Name: series-workflowp4p78 Phase: Failed StartedAt: 2026-08-17 19:27:34 +0000 UTC FinishedAt: 2026-08-17 19:44:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4p78[0] Phase: Succeeded StartedAt: 2026-08-17 19:27:34 +0000 UTC FinishedAt: 2026-08-17 19:44:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4p78[0].run-triage Phase: Succeeded StartedAt: 2026-08-17 19:27:34 +0000 UTC FinishedAt: 2026-08-17 19:44:24 +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+CgkJCTx0ZD4yMDI2LzA4LzE3IDE5OjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBCUEYgc2VsZnRlc3RzIGFuZCBiZW5jaG1hcmtzIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8uIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE5OjQzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZDFhMjI4NmNhYTk4ZmE4NjUwM2QzYTkyMGVlZDNjZGYzNWE2NmQ4M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDE3IDE5OjQzOjQyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxuaW5kZXggZDM2NTVhNzA2NDgyNi4uMjJlOWViMTZjMTUxMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXG5AQCAtODI2LDE4ICYjNDM7ODI2LDIyIEBAIExJQkFSRU5BX01BS0VfQVJHUyA9IFxcXG4gXHRcdEJQRl9UQVJHRVRfRU5ESUFOPVwmIzM0OyQoQlBGX1RBUkdFVF9FTkRJQU4pXCYjMzQ7IFxcXG4gXHRcdFE9XCYjMzQ7JChRKVwmIzM0O1xuIFxuLUxJQkFSRU5BX0JQRl9ERVBTIDo9ICQod2lsZGNhcmQgbGliYXJlbmEvTWFrZWZpbGVcdFx0XFxcbi1cdFx0XHRcdCBsaWJhcmVuYS9pbmNsdWRlLypcdFx0XFxcbi1cdFx0XHRcdCBsaWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hLypcdFxcXG4tXHRcdFx0XHQgbGliYXJlbmEvc3JjLypcdFx0XHRcXFxuLVx0XHRcdFx0IGxpYmFyZW5hL3NlbGZ0ZXN0cy8qXHRcdFxcXG4tXHRcdFx0XHQgbGliYXJlbmEvKi5icGYubylcbiYjNDM7TElCQVJFTkFfQ09NTU9OX0RFUFMgOj0gJCh3aWxkY2FyZCBsaWJhcmVuYS9NYWtlZmlsZVx0XHRcXFxuJiM0MztcdFx0XHRcdCAgICBsaWJhcmVuYS9pbmNsdWRlLypcdFx0XFxcbiYjNDM7XHRcdFx0XHQgICAgbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS8qXHRcXFxuJiM0MztcdFx0XHRcdCAgICBsaWJhcmVuYS9zcmMvKilcbiYjNDM7TElCQVJFTkFfQlBGX0RFUFMgOj0gJChMSUJBUkVOQV9DT01NT05fREVQUykgJCh3aWxkY2FyZCBsaWJhcmVuYS9zZWxmdGVzdHMvKilcbiYjNDM7TElCQVJFTkFfQkVOQ0hfQlBGX0RFUFMgOj0gJChMSUJBUkVOQV9DT01NT05fREVQUykgJCh3aWxkY2FyZCBsaWJhcmVuYS9iZW5jaHMvKilcbiBcbiBMSUJBUkVOQV9TS0VMIDo9IGxpYmFyZW5hL2xpYmFyZW5hLnNrZWwuaFxuJiM0MztMSUJBUkVOQV9CRU5DSF9TS0VMIDo9IGxpYmFyZW5hL2xpYmFyZW5hX2JlbmNoLnNrZWwuaFxuIFxuICQoTElCQVJFTkFfU0tFTCk6ICQoSU5DTFVERV9ESVIpL3ZtbGludXguaCAkKEJQRk9CSikgJChMSUJBUkVOQV9CUEZfREVQUylcbiBcdCYjNDM7JChNQUtFKSAtQyBsaWJhcmVuYSBsaWJhcmVuYS5za2VsLmggJChMSUJBUkVOQV9NQUtFX0FSR1MpXG4gXG4mIzQzOyQoTElCQVJFTkFfQkVOQ0hfU0tFTCk6ICQoSU5DTFVERV9ESVIpL3ZtbGludXguaCAkKEJQRk9CSikgJChMSUJBUkVOQV9CRU5DSF9CUEZfREVQUykgfCAkKExJQkFSRU5BX1NLRUwpXG4mIzQzO1x0JiM0MzskKE1BS0UpIC1DIGxpYmFyZW5hIGJlbmNobWFya3MgJChMSUJBUkVOQV9NQUtFX0FSR1MpXG4mIzQzO1xuIGlmbmVxICgkKENMQU5HX0hBU19BUkVOQV9BU0FOKSwpXG4gTElCQVJFTkFfQVNBTl9TS0VMIDo9IGxpYmFyZW5hL2xpYmFyZW5hX2FzYW4uc2tlbC5oXG4gQ0ZMQUdTICYjNDM7PSAtREhBU19CUEZfQVJFTkFfQVNBTlxuQEAgLTk4Nyw2ICYjNDM7OTkxLDcgQEAgJChPVVRQVVQpL2JlbmNoX3NvY2ttYXAubzogJChPVVRQVVQpL2JlbmNoX3NvY2ttYXBfcHJvZy5za2VsLmhcbiAkKE9VVFBVVCkvYmVuY2hfbHBtX3RyaWVfbWFwLm86ICQoT1VUUFVUKS9scG1fdHJpZV9iZW5jaC5za2VsLmggJChPVVRQVVQpL2xwbV90cmllX21hcC5za2VsLmhcbiAkKE9VVFBVVCkvYmVuY2hfYnBmX25vcC5vOiAkKE9VVFBVVCkvYnBmX25vcF9iZW5jaC5za2VsLmggYmVuY2hfYnBmX3RpbWluZy5oXG4gJChPVVRQVVQpL2JlbmNoX3hkcF9sYi5vOiAkKE9VVFBVVCkveGRwX2xiX2JlbmNoLnNrZWwuaCBiZW5jaF9icGZfdGltaW5nLmhcbiYjNDM7JChPVVRQVVQpL2JlbmNoX2xpYmFyZW5hLm86ICQoTElCQVJFTkFfQkVOQ0hfU0tFTClcbiAkKE9VVFBVVCkvYmVuY2hfYnBmX3RpbWluZy5vOiBiZW5jaF9icGZfdGltaW5nLmhcbiAkKE9VVFBVVCkvYmVuY2gubzogYmVuY2guaCB0ZXN0aW5nX2hlbHBlcnMuaCAkKEJQRk9CSilcbiAkKE9VVFBVVCkvYmVuY2g6IExETElCUyAmIzQzOz0gLWxtXG5AQCAtMTAxNCw2ICYjNDM7MTAxOSw3IEBAICQoT1VUUFVUKS9iZW5jaDogJChPVVRQVVQpL2JlbmNoLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS9iZW5jaF9icGZfdGltaW5nLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS9iZW5jaF9icGZfbm9wLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS9iZW5jaF94ZHBfbGIubyBcXFxuJiM0MztcdFx0ICQoT1VUUFVUKS9iZW5jaF9saWJhcmVuYS5vIFxcXG4gXHRcdCAkKE9VVFBVVCkvdXNkdF8xLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS91c2R0XzIubyBcXFxuIFx0XHQgI1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmNcbmluZGV4IGI4NmI3MzQ1NmQzY2EuLmRlNjcyZjYxZDRhYmUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmNcbkBAIC0yODgsNiAmIzQzOzI4OCw3IEBAIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9jcnlwdG9fYXJncDtcbiBleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfc29ja21hcF9hcmdwO1xuIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9scG1fdHJpZV9tYXBfYXJncDtcbiBleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfeGRwX2xiX2FyZ3A7XG4mIzQzO2V4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9saWJhcmVuYV9hcmdwO1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9jaGlsZCBiZW5jaF9wYXJzZXJzW10gPSB7XG4gXHR7IFx1MDAyNmJlbmNoX3JpbmdidWZzX2FyZ3AsIDAsIFwmIzM0O1JpbmcgYnVmZmVycyBiZW5jaG1hcmtcJiMzNDssIDAgfSxcbkBAIC0zMDYsNiAmIzQzOzMwNyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9jaGlsZCBiZW5jaF9wYXJzZXJzW10gPSB7XG4gXHR7IFx1MDAyNmJlbmNoX3NvY2ttYXBfYXJncCwgMCwgXCYjMzQ7YnBmIHNvY2ttYXAgYmVuY2htYXJrXCYjMzQ7LCAwIH0sXG4gXHR7IFx1MDAyNmJlbmNoX2xwbV90cmllX21hcF9hcmdwLCAwLCBcJiMzNDtMUE0gdHJpZSBtYXAgYmVuY2htYXJrXCYjMzQ7LCAwIH0sXG4gXHR7IFx1MDAyNmJlbmNoX3hkcF9sYl9hcmdwLCAwLCBcJiMzNDtYRFAgbG9hZC1iYWxhbmNlciBiZW5jaG1hcmtcJiMzNDssIDAgfSxcbiYjNDM7XHR7IFx1MDAyNmJlbmNoX2xpYmFyZW5hX2FyZ3AsIDAsIFwmIzM0O2xpYmFyZW5hIGFsbG9jYXRvciBiZW5jaG1hcmtcJiMzNDssIDAgfSxcbiBcdHt9LFxuIH07XG4gXG5AQCAtNTg1LDYgJiM0Mzs1ODcsOCBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2xwbV90cmllX2RlbGV0ZTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2xwbV90cmllX2ZyZWU7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9icGZfbm9wO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfeGRwX2xiO1xuJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2xpYmFyZW5hX21hbGxvYztcbiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9saWJhcmVuYV9jYWxsb2M7XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBiZW5jaCAqYmVuY2hzW10gPSB7XG4gXHRcdTAwMjZiZW5jaF9jb3VudF9nbG9iYWwsXG5AQCAtNjY5LDYgJiM0Mzs2NzMsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJlbmNoICpiZW5jaHNbXSA9IHtcbiBcdFx1MDAyNmJlbmNoX2xwbV90cmllX2ZyZWUsXG4gXHRcdTAwMjZiZW5jaF9icGZfbm9wLFxuIFx0XHUwMDI2YmVuY2hfeGRwX2xiLFxuJiM0MztcdFx1MDAyNmJlbmNoX2xpYmFyZW5hX21hbGxvYyxcbiYjNDM7XHRcdTAwMjZiZW5jaF9saWJhcmVuYV9jYWxsb2MsXG4gfTtcbiBcbiBzdGF0aWMgdm9pZCBmaW5kX2JlbmNobWFyayh2b2lkKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfbGliYXJlbmEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfbGliYXJlbmEuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjI0ZTQzMjI0NGJmNWRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfbGliYXJlbmEuY1xuQEAgLTAsMCAmIzQzOzEsMjEwIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXJncC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbWl0cy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtiZW5jaC5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaWJhcmVuYS9jb21tb24uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaWJhcmVuYS9hc2FuLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGliYXJlbmEvYnVkZHkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaWJhcmVuYS91c2Vyc3BhY2UuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bGliYXJlbmEvbGliYXJlbmFfYmVuY2guc2tlbC5oXCYjMzQ7XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHtcbiYjNDM7XHRfX3U2NCBhbGxvY19zaXplO1xuJiM0MztcdF9fdTY0IG5hbGxvY3M7XG4mIzQzO30gYXJncyA9IHtcbiYjNDM7XHQuYWxsb2Nfc2l6ZSA9IDY0LFxuJiM0MztcdC5uYWxsb2NzID0gMTAwMDAsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHtcbiYjNDM7XHRzdHJ1Y3QgbGliYXJlbmFfYmVuY2ggKnNrZWw7XG4mIzQzO1x0aW50IGJlbmNoX2ZkO1xuJiM0MztcdGludCByZXNldF9mZDtcbiYjNDM7fSBjdHg7XG4mIzQzO1xuJiM0MztlbnVtIHtcbiYjNDM7XHRBUkdfTElCQVJFTkFfQUxMT0NfU0laRSA9IDEyMDAwLFxuJiM0MztcdEFSR19MSUJBUkVOQV9OQUxMT0NTLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiBvcHRzW10gPSB7XG4mIzQzO1x0eyBcJiMzNDthbGxvY19zaXplXCYjMzQ7LCBBUkdfTElCQVJFTkFfQUxMT0NfU0laRSwgXCYjMzQ7QllURVNcJiMzNDssIDAsXG4mIzQzO1x0ICBcJiMzNDtTaXplIG9mIGVhY2ggYXJlbmEgYWxsb2NhdGlvblwmIzM0OyB9LFxuJiM0MztcdHsgXCYjMzQ7bmFsbG9jc1wmIzM0OywgQVJHX0xJQkFSRU5BX05BTExPQ1MsIFwmIzM0O0lURVJTXCYjMzQ7LCAwLFxuJiM0MztcdCAgXCYjMzQ7TnVtYmVyIG9mIGFsbG9jYXRpb24gcGVyIG1lYXN1cmVtZW50XCYjMzQ7IH0sXG4mIzQzO1x0e30sXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgZXJyb3JfdCBwYXJzZV9hcmcoaW50IGtleSwgY2hhciAqYXJnLCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHZhbHVlO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGtleSkge1xuJiM0MztcdGNhc2UgQVJHX0xJQkFSRU5BX0FMTE9DX1NJWkU6XG4mIzQzO1x0XHR2YWx1ZSA9IHN0cnRvdWxsKGFyZywgTlVMTCwgMTApO1xuJiM0MztcdFx0aWYgKCF2YWx1ZSB8fCB2YWx1ZSBcdTAwM2U9IFVJTlRfTUFYKSB7XG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtpbnZhbGlkIGFsbG9jX3NpemU6ICVsZFwmIzM0OywgdmFsdWUpO1xuJiM0MztcdFx0XHRhcmdwX3VzYWdlKHN0YXRlKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGFyZ3MuYWxsb2Nfc2l6ZSA9IHZhbHVlO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBBUkdfTElCQVJFTkFfTkFMTE9DUzpcbiYjNDM7XHRcdGFyZ3MubmFsbG9jcyA9IHN0cnRvdWxsKGFyZywgTlVMTCwgMTApO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiBBUkdQX0VSUl9VTktOT1dOO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NvbnN0IHN0cnVjdCBhcmdwIGJlbmNoX2xpYmFyZW5hX2FyZ3AgPSB7XG4mIzQzO1x0Lm9wdGlvbnMgPSBvcHRzLFxuJiM0MztcdC5wYXJzZXIgPSBwYXJzZV9hcmcsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB2YWxpZGF0ZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGVudi5jb25zdW1lcl9jbnQgIT0gMCkge1xuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O2JlbmNobWFyayBkb2VzbiYjMzk7dCBzdXBwb3J0IGNvbnN1bWVyc1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRleGl0KDEpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGVudi5wcm9kdWNlcl9jbnQgIT0gMSkge1xuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O2JlbmNobWFyayBzdXBwb3J0cyBleGFjdGx5IG9uZSBwcm9kdWNlclxcblwmIzM0Oyk7XG4mIzQzO1x0XHRleGl0KDEpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgc2V0dXBfY29tbW9uKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYXJlbmFfYWxsb2NfcmVzZXJ2ZV9hcmdzIHJlc2VydmVfYXJncyA9IHtcbiYjNDM7XHRcdC5ucl9wYWdlcyA9IEFSRU5BX1JFU0VSVkVfUEFHRVNfREZMLFxuJiM0MztcdH07XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0c2V0dXBfbGliYnBmKCk7XG4mIzQzO1xuJiM0MztcdGN0eC5za2VsID0gbGliYXJlbmFfYmVuY2hfX29wZW5fYW5kX2xvYWQoKTtcbiYjNDM7XHRpZiAoIWN0eC5za2VsKSB7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7ZmFpbGVkIHRvIG9wZW4gYW5kIGxvYWQgc2tlbGV0b25cXG5cJiMzNDspO1xuJiM0MztcdFx0ZXhpdCgxKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IGxpYmFyZW5hX3J1bl9wcm9nX2FyZ3MoXG4mIzQzO1x0XHRicGZfcHJvZ3JhbV9fZmQoY3R4LnNrZWwtXHUwMDNlcHJvZ3MuYXJlbmFfYWxsb2NfcmVzZXJ2ZSksXG4mIzQzO1x0XHRcdTAwMjZyZXNlcnZlX2FyZ3MsIHNpemVvZihyZXNlcnZlX2FyZ3MpKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7ZmFpbGVkIHRvIHJlc2VydmUgYXJlbmEgcGFnZXM6ICVkXFxuXCYjMzQ7LCBlcnIpO1xuJiM0MztcdFx0ZXhpdCgxKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IGxpYmFyZW5hX3J1bl9wcm9nKFxuJiM0MztcdFx0YnBmX3Byb2dyYW1fX2ZkKGN0eC5za2VsLVx1MDAzZXByb2dzLmFyZW5hX2J1ZGR5X3Jlc2V0KSk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O2ZhaWxlZCB0byBpbml0aWFsaXplIGFyZW5hIGFsbG9jYXRvcjogJWRcXG5cJiMzNDssIGVycik7XG4mIzQzO1x0XHRleGl0KDEpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y3R4LnNrZWwtXHUwMDNlYnNzLVx1MDAzZWJlbmNoX2FsbG9jX3NpemUgPSBhcmdzLmFsbG9jX3NpemU7XG4mIzQzO1x0Y3R4LnNrZWwtXHUwMDNlYnNzLVx1MDAzZWJlbmNoX25hbGxvY3MgPSBhcmdzLm5hbGxvY3M7XG4mIzQzO1x0Y3R4LnJlc2V0X2ZkID0gYnBmX3Byb2dyYW1fX2ZkKGN0eC5za2VsLVx1MDAzZXByb2dzLmFyZW5hX2J1ZGR5X3Jlc2V0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbWFsbG9jX3NldHVwKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzZXR1cF9jb21tb24oKTtcbiYjNDM7XHRjdHguYmVuY2hfZmQgPSBicGZfcHJvZ3JhbV9fZmQoY3R4LnNrZWwtXHUwMDNlcHJvZ3MuYmVuY2hfbWFsbG9jKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgY2FsbG9jX3NldHVwKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzZXR1cF9jb21tb24oKTtcbiYjNDM7XHRjdHguYmVuY2hfZmQgPSBicGZfcHJvZ3JhbV9fZmQoY3R4LnNrZWwtXHUwMDNlcHJvZ3MuYmVuY2hfY2FsbG9jKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgKnByb2R1Y2VyKHZvaWQgKmlucHV0KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKHRydWUpIHtcbiYjNDM7XHRcdGVyciA9IGxpYmFyZW5hX3J1bl9wcm9nKGN0eC5iZW5jaF9mZCk7XG4mIzQzO1x0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtsaWJhcmVuYSBiZW5jaG1hcmsgZmFpbGVkOiAlZFxcblwmIzM0OywgZXJyKTtcbiYjNDM7XHRcdFx0ZXhpdCgxKTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRlcnIgPSBsaWJhcmVuYV9ydW5fcHJvZyhjdHgucmVzZXRfZmQpO1xuJiM0MztcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7bGliYXJlbmEgYWxsb2MgcmVzZXQgZmFpbGVkOiAlZFxcblwmIzM0OywgZXJyKTtcbiYjNDM7XHRcdFx0ZXhpdCgxKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBtZWFzdXJlKHN0cnVjdCBiZW5jaF9yZXMgKnJlcylcbiYjNDM7e1xuJiM0MztcdHJlcy1cdTAwM2VkdXJhdGlvbl9ucyA9IGF0b21pY19zd2FwKFx1MDAyNmN0eC5za2VsLVx1MDAzZWJzcy1cdTAwM2ViZW5jaF9kdXJhdGlvbl9ucywgMCk7XG4mIzQzO1x0cmVzLVx1MDAzZWhpdHMgPSBhdG9taWNfc3dhcChcdTAwMjZjdHguc2tlbC1cdTAwM2Vic3MtXHUwMDNlYmVuY2hfaGl0cywgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJlcG9ydF9wcm9ncmVzcyhpbnQgaXRlciwgc3RydWN0IGJlbmNoX3JlcyAqcmVzLCBsb25nIGRlbHRhX25zKVxuJiM0Mzt7XG4mIzQzO1x0ZG91YmxlIGxhdGVuY3lfbnMgPSAwLjA7XG4mIzQzO1xuJiM0MztcdGlmIChyZXMtXHUwMDNlaGl0cylcbiYjNDM7XHRcdGxhdGVuY3lfbnMgPSByZXMtXHUwMDNlZHVyYXRpb25fbnMgLyAoZG91YmxlKXJlcy1cdTAwM2VoaXRzO1xuJiM0MztcbiYjNDM7XHRwcmludGYoXCYjMzQ7SXRlciAlM2QgKCU3LjNsZnVzKTogbGF0ZW5jeSAlOC4zbGYgbnMvb3AgKCVsZCBhbGxvY2F0aW9ucylcXG5cJiMzNDssXG4mIzQzO1x0ICAgICAgIGl0ZXIsIChkZWx0YV9ucyAtIDEwMDAwMDAwMDApIC8gMTAwMC4wLCBsYXRlbmN5X25zLCByZXMtXHUwMDNlaGl0cyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJlcG9ydF9maW5hbChzdHJ1Y3QgYmVuY2hfcmVzIHJlc1tdLCBpbnQgcmVzX2NudClcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZHVyYXRpb25fbnMgPSAwO1xuJiM0MztcdGxvbmcgaGl0cyA9IDA7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHJlc19jbnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRkdXJhdGlvbl9ucyAmIzQzOz0gcmVzW2ldLmR1cmF0aW9uX25zO1xuJiM0MztcdFx0aGl0cyAmIzQzOz0gcmVzW2ldLmhpdHM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIWhpdHMgfHwgIXJlc19jbnQpIHtcbiYjNDM7XHRcdHByaW50ZihcJiMzNDtTdW1tYXJ5OiBubyBydW5zIG1lYXN1cmVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHByaW50ZihcJiMzNDtTdW1tYXJ5OiAlLjNsZiBucy9vcCwgJS4wbGYgaW52b2NhdGlvbnMgZm9yICV1IGFsbG9jYXRpb25zL2ludm9jYXRpb24pXFxuXCYjMzQ7LFxuJiM0MztcdCAgICAgICBkdXJhdGlvbl9ucyAvIChkb3VibGUpaGl0cywgaGl0cyAvIChkb3VibGUpcmVzX2NudCxcbiYjNDM7XHQgICAgICAgY3R4LnNrZWwtXHUwMDNlYnNzLVx1MDAzZWJlbmNoX25hbGxvY3MpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mztjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfbGliYXJlbmFfbWFsbG9jID0ge1xuJiM0MztcdC5uYW1lID0gXCYjMzQ7bGliYXJlbmEtbWFsbG9jXCYjMzQ7LFxuJiM0MztcdC5hcmdwID0gXHUwMDI2YmVuY2hfbGliYXJlbmFfYXJncCxcbiYjNDM7XHQudmFsaWRhdGUgPSB2YWxpZGF0ZSxcbiYjNDM7XHQuc2V0dXAgPSBtYWxsb2Nfc2V0dXAsXG4mIzQzO1x0LnByb2R1Y2VyX3RocmVhZCA9IHByb2R1Y2VyLFxuJiM0MztcdC5tZWFzdXJlID0gbWVhc3VyZSxcbiYjNDM7XHQucmVwb3J0X3Byb2dyZXNzID0gcmVwb3J0X3Byb2dyZXNzLFxuJiM0MztcdC5yZXBvcnRfZmluYWwgPSByZXBvcnRfZmluYWwsXG4mIzQzO307XG4mIzQzO1xuJiM0Mztjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfbGliYXJlbmFfY2FsbG9jID0ge1xuJiM0MztcdC5uYW1lID0gXCYjMzQ7bGliYXJlbmEtY2FsbG9jXCYjMzQ7LFxuJiM0MztcdC5hcmdwID0gXHUwMDI2YmVuY2hfbGliYXJlbmFfYXJncCxcbiYjNDM7XHQudmFsaWRhdGUgPSB2YWxpZGF0ZSxcbiYjNDM7XHQuc2V0dXAgPSBjYWxsb2Nfc2V0dXAsXG4mIzQzO1x0LnByb2R1Y2VyX3RocmVhZCA9IHByb2R1Y2VyLFxuJiM0MztcdC5tZWFzdXJlID0gbWVhc3VyZSxcbiYjNDM7XHQucmVwb3J0X3Byb2dyZXNzID0gcmVwb3J0X3Byb2dyZXNzLFxuJiM0MztcdC5yZXBvcnRfZmluYWwgPSByZXBvcnRfZmluYWwsXG4mIzQzO307XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9ydW5fYmVuY2hfbGliYXJlbmEuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL3J1bl9iZW5jaF9saWJhcmVuYS5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjEwYWZlNGQ1MmViZjdcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvcnVuX2JlbmNoX2xpYmFyZW5hLnNoXG5AQCAtMCwwICYjNDM7MSwzMSBAQFxuJiM0MzsjIS9iaW4vYmFzaFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO1xuJiM0Mztzb3VyY2UgLi9iZW5jaHMvcnVuX2NvbW1vbi5zaFxuJiM0MztcbiYjNDM7c2V0IC1ldWZvIHBpcGVmYWlsXG4mIzQzO1xuJiM0MztSVU5fQkVOQ0g9XCYjMzQ7Li9iZW5jaCAtZDMgLXFcJiMzNDtcbiYjNDM7XG4mIzQzO3N1bW1hcml6ZV9saWJhcmVuYSgpXG4mIzQzO3tcbiYjNDM7XHRsb2NhbCBiZW5jaD1cJiMzNDskMVwmIzM0O1xuJiM0MztcdGxvY2FsIHN1bW1hcnlcbiYjNDM7XG4mIzQzO1x0c3VtbWFyeT0kKHByaW50ZiAmIzM5OyVzXFxuJiMzOTsgXCYjMzQ7JDJcJiMzNDsgfCB0YWlsIC1uMSlcbiYjNDM7XHRzdW1tYXJ5PSR7c3VtbWFyeSNTdW1tYXJ5OiB9XG4mIzQzO1x0cHJpbnRmIFwmIzM0OyUtMjBzICVzXFxuXCYjMzQ7IFwmIzM0OyRiZW5jaFwmIzM0OyBcJiMzNDskc3VtbWFyeVwmIzM0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztoZWFkZXIgXCYjMzQ7bGliYXJlbmEgc2VxdWVudGlhbCBtYWxsb2NcXG5cJiMzNDtcbiYjNDM7XG4mIzQzO2ZvciBzaXplIGluIDE2IDY0IDI1NiAxMDI0IDQwOTY7IGRvXG4mIzQzO3N1YnRpdGxlIFwmIzM0O2FsbG9jYXRpb24gc2l6ZTogJHNpemVcJiMzNDtcbiYjNDM7cHJpbnRmIFwmIzM0O1xcdC0tLS0tLS0tLS0tLS0tLS0tLS1cXG5cJiMzNDtcbiYjNDM7XHRmb3IgbmFsbG9jcyBpbiAxMCA1MCAxMDAgNTAwIDEwMDAgNTAwMCAxMDAwMDsgZG9cbiYjNDM7XHRcdHN1bW1hcml6ZV9saWJhcmVuYSBcJiMzNDttYWxsb2M6XCYjMzQ7IFxcXG4mIzQzO1x0XHRcdFwmIzM0OyQoJFJVTl9CRU5DSCAtLWFsbG9jX3NpemUgXCYjMzQ7JHNpemVcJiMzNDsgLS1uYWxsb2NzIFwmIzM0OyRuYWxsb2NzXCYjMzQ7IGxpYmFyZW5hLW1hbGxvYylcJiMzNDtcbiYjNDM7XHRcdHN1bW1hcml6ZV9saWJhcmVuYSBcJiMzNDtjYWxsb2M6XCYjMzQ7IFxcXG4mIzQzO1x0XHRcdFwmIzM0OyQoJFJVTl9CRU5DSCAtLWFsbG9jX3NpemUgXCYjMzQ7JHNpemVcJiMzNDsgLS1uYWxsb2NzIFwmIzM0OyRuYWxsb2NzXCYjMzQ7IGxpYmFyZW5hLWNhbGxvYylcJiMzNDtcbiYjNDM7XHRkb25lXG4mIzQzO2RvbmVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvTWFrZWZpbGVcbmluZGV4IDVlMmFiNTE0ODA1ZTQuLjkxMTY0ZDQzYmQ2MTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9NYWtlZmlsZVxuQEAgLTI3LDEwICYjNDM7MjcsMTcgQEAgQlBGRElSPSQoYWJzcGF0aCAkKExJQkFSRU5BKS8uLilcbiBJTkNMVURFX0RJUiA/PSAkKEJQRkRJUikvdG9vbHMvaW5jbHVkZVxuIExJQkJQRl9JTkNMVURFID89ICQoSU5DTFVERV9ESVIpXG4gXG4tIyBTY2FuIHNyYy8gYW5kIHNlbGZ0ZXN0cy8gdG8gZ2VuZXJhdGUgdGhlIGZpbmFsIGJpbmFyaWVzXG4tTElCQVJFTkFfU09VUkNFUyA9ICQod2lsZGNhcmQgJChMSUJBUkVOQSkvc3JjLyouYnBmLmMpICQod2lsZGNhcmQgJChMSUJBUkVOQSkvc2VsZnRlc3RzLyouYnBmLmMpXG4tTElCQVJFTkFfT0JKRUNUUyA9ICQobm90ZGlyICQoTElCQVJFTkFfU09VUkNFUzouYnBmLmM9LmJwZi5vKSlcbi1MSUJBUkVOQV9PQkpFQ1RTX0FTQU4gPSAkKG5vdGRpciAkKExJQkFSRU5BX1NPVVJDRVM6LmJwZi5jPV9hc2FuLmJwZi5vKSlcbiYjNDM7IyBCdWlsZCBzZWxmdGVzdHMgYW5kIGJlbmNobWFya3MgaW50byBzZXBhcmF0ZSBCUEYgb2JqZWN0cyBhbmQgc2tlbGV0b25zLlxuJiM0MztMSUJBUkVOQV9DT1JFX1NPVVJDRVMgPSAkKHdpbGRjYXJkICQoTElCQVJFTkEpL3NyYy8qLmJwZi5jKVxuJiM0MztMSUJBUkVOQV9URVNUX1NPVVJDRVMgPSAkKHdpbGRjYXJkICQoTElCQVJFTkEpL3NlbGZ0ZXN0cy8qLmJwZi5jKVxuJiM0MztMSUJBUkVOQV9CRU5DSF9TT1VSQ0VTID0gJCh3aWxkY2FyZCAkKExJQkFSRU5BKS9iZW5jaHMvKi5icGYuYylcbiYjNDM7XG4mIzQzO0xJQkFSRU5BX09CSkVDVFMgPSAkKG5vdGRpciAkKExJQkFSRU5BX0NPUkVfU09VUkNFUzouYnBmLmM9LmJwZi5vKSBcXFxuJiM0MztcdFx0XHQgICAgICAgJChMSUJBUkVOQV9URVNUX1NPVVJDRVM6LmJwZi5jPS5icGYubykpXG4mIzQzO0xJQkFSRU5BX09CSkVDVFNfQVNBTiA9ICQobm90ZGlyICQoTElCQVJFTkFfQ09SRV9TT1VSQ0VTOi5icGYuYz1fYXNhbi5icGYubykgXFxcbiYjNDM7XHRcdFx0XHQgICAgJChMSUJBUkVOQV9URVNUX1NPVVJDRVM6LmJwZi5jPV9hc2FuLmJwZi5vKSlcbiYjNDM7TElCQVJFTkFfQkVOQ0hfT0JKRUNUUyA9ICQobm90ZGlyICQoTElCQVJFTkFfQ09SRV9TT1VSQ0VTOi5icGYuYz0uYnBmLm8pIFxcXG4mIzQzO1x0XHRcdFx0ICAgICAkKExJQkFSRU5BX0JFTkNIX1NPVVJDRVM6LmJwZi5jPS5icGYubykpXG4gXG4gSU5DTFVERVMgPSAtSSQoTElCQVJFTkEpL2luY2x1ZGUgLUkkKEJQRkRJUilcbiBpZm5lcSAoJChJTkNMVURFX0RJUiksKVxuQEAgLTUzLDE3ICYjNDM7NjAsMjUgQEAgb3ZlcnJpZGUgQlBGX0NGTEFHUyAmIzQzOz0gLU8yIC1nXG4gb3ZlcnJpZGUgQlBGX0NGTEFHUyAmIzQzOz0gLVduby1pbmNvbXBhdGlibGUtcG9pbnRlci10eXBlcy1kaXNjYXJkcy1xdWFsaWZpZXJzXG4gIyBSZXF1aXJlZCBmb3Igc3VwcHJlc3NpbmcgaGFybWxlc3Mgdm1saW51eC5oLXJlbGF0ZWQgd2FybmluZ3MuXG4gb3ZlcnJpZGUgQlBGX0NGTEFHUyAmIzQzOz0gLVduby1taXNzaW5nLWRlY2xhcmF0aW9uc1xuJiM0MztvdmVycmlkZSBCUEZfQ0ZMQUdTICYjNDM7PSAtZm5vLXN0cmljdC1hbGlhc2luZ1xuIG92ZXJyaWRlIEJQRl9DRkxBR1MgJiM0Mzs9ICQoSU5DTFVERVMpXG4gXG4gQ0ZMQUdTID0gLU8yIC1uby1waWVcbiBDRkxBR1MgJiM0Mzs9ICQoSU5DTFVERVMpXG4gXG4tdnBhdGggJS5icGYuYyAkKExJQkFSRU5BKS9zcmMgJChMSUJBUkVOQSkvc2VsZnRlc3RzXG4tdnBhdGggJS5jICQoTElCQVJFTkEpL3NyYyAkKExJQkFSRU5BKS9zZWxmdGVzdHNcbiYjNDM7dnBhdGggJS5icGYuYyAkKExJQkFSRU5BKS9zcmMgJChMSUJBUkVOQSkvc2VsZnRlc3RzICQoTElCQVJFTkEpL2JlbmNoc1xuJiM0Mzt2cGF0aCAlLmMgJChMSUJBUkVOQSkvc3JjICQoTElCQVJFTkEpL3NlbGZ0ZXN0cyAkKExJQkFSRU5BKS9iZW5jaHNcbiBcbiBza2VsZXRvbnM6IGxpYmFyZW5hLnNrZWwuaCBsaWJhcmVuYV9hc2FuLnNrZWwuaFxuIC5QSE9OWTogc2tlbGV0b25zXG4gXG4mIzQzO2JlbmNobWFya3M6IGxpYmFyZW5hX2JlbmNoLnNrZWwuaFxuJiM0MzsuUEhPTlk6IGJlbmNobWFya3NcbiYjNDM7XG4mIzQzO2xpYmFyZW5hX2JlbmNoLnNrZWwuaDogbGliYXJlbmFfYmVuY2guYnBmLm9cbiYjNDM7XHQkKGNhbGwgbXNnLEdFTi1TS0VMLGxpYmFyZW5hLCRAKVxuJiM0MztcdCQoUSkkKEJQRlRPT0wpIGdlbiBza2VsZXRvbiAkXHUwMDNjIG5hbWUgXCYjMzQ7bGliYXJlbmFfYmVuY2hcJiMzNDsgXHUwMDNlICRAXG4mIzQzO1xuIGxpYmFyZW5hX2FzYW4uc2tlbC5oOiBsaWJhcmVuYV9hc2FuLmJwZi5vXG4gXHQkKGNhbGwgbXNnLEdFTi1TS0VMLGxpYmFyZW5hLCRAKVxuIFx0JChRKSQoQlBGVE9PTCkgZ2VuIHNrZWxldG9uICRcdTAwM2MgbmFtZSBcJiMzNDtsaWJhcmVuYV9hc2FuXCYjMzQ7IFx1MDAzZSAkQFxuQEAgLTgwLDYgJiM0Mzs5NSwxMCBAQCBsaWJhcmVuYS5icGYubzogJChMSUJBUkVOQV9PQkpFQ1RTKVxuIFx0JChjYWxsIG1zZyxHRU4tT0JKLGxpYmFyZW5hLCRAKVxuIFx0JChRKSQoQlBGVE9PTCkgZ2VuIG9iamVjdCAkQCAkXlxuIFxuJiM0MztsaWJhcmVuYV9iZW5jaC5icGYubzogJChMSUJBUkVOQV9CRU5DSF9PQkpFQ1RTKVxuJiM0MztcdCQoY2FsbCBtc2csR0VOLU9CSixsaWJhcmVuYSwkQClcbiYjNDM7XHQkKFEpJChCUEZUT09MKSBnZW4gb2JqZWN0ICRAICReXG4mIzQzO1xuICVfYXNhbi5icGYubzogJS5icGYuY1xuIFx0JChjYWxsIG1zZyxDTE5HLUJQRixsaWJhcmVuYSwkQClcbiBcdCQoUSkkKENMQU5HKSAkKEJQRl9DRkxBR1MpICQoQVNBTl9GTEFHUykgLURCUEZfQVJFTkFfQVNBTiAkKEJQRl9UQVJHRVRfRU5ESUFOKSAtYyAkXHUwMDNjIC1vICRAXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2JlbmNocy9iZW5jaF9tYWxsb2MuYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvYmVuY2hzL2JlbmNoX21hbGxvYy5icGYuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmUwNjM5N2RjOWE0MGRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9iZW5jaHMvYmVuY2hfbWFsbG9jLmJwZi5jXG5AQCAtMCwwICYjNDM7MSw1MSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTEdQTC0yLjEgT1IgQlNELTItQ2xhdXNlXG4mIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGliYXJlbmEvY29tbW9uLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpYmFyZW5hL2FzYW4uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaWJhcmVuYS9idWRkeS5oXHUwMDNlXG4mIzQzO1xuJiM0Mzt1MzIgYmVuY2hfYWxsb2Nfc2l6ZTtcbiYjNDM7dTMyIGJlbmNoX25hbGxvY3M7XG4mIzQzO2xvbmcgYmVuY2hfaGl0cztcbiYjNDM7bG9uZyBiZW5jaF9kdXJhdGlvbl9ucztcbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuJiM0MztpbnQgYmVuY2hfbWFsbG9jKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHR2b2lkIF9fYXJlbmEgKm1lbTtcbiYjNDM7XHR1NjQgc3RhcnRfbnM7XG4mIzQzO1x0dTMyIGk7XG4mIzQzO1xuJiM0MztcdHN0YXJ0X25zID0gYnBmX2t0aW1lX2dldF9ucygpO1xuJiM0MztcdGZvciAoaSA9IHplcm87IGkgXHUwMDNjIGJlbmNoX25hbGxvY3MgXHUwMDI2XHUwMDI2IGNhbl9sb29wOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0bWVtID0gYXJlbmFfbWFsbG9jKGJlbmNoX2FsbG9jX3NpemUpO1xuJiM0MztcdFx0aWYgKCFtZW0pXG4mIzQzO1x0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0X19zeW5jX2FkZF9hbmRfZmV0Y2goXHUwMDI2YmVuY2hfZHVyYXRpb25fbnMsXG4mIzQzO1x0XHRcdCAgICAgYnBmX2t0aW1lX2dldF9ucygpIC0gc3RhcnRfbnMpO1xuJiM0MztcdF9fc3luY19hZGRfYW5kX2ZldGNoKFx1MDAyNmJlbmNoX2hpdHMsIGkpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7aW50IGJlbmNoX2NhbGxvYyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0dm9pZCBfX2FyZW5hICptZW07XG4mIzQzO1x0dTY0IHN0YXJ0X25zO1xuJiM0MztcdHUzMiBpO1xuJiM0MztcbiYjNDM7XHRzdGFydF9ucyA9IGJwZl9rdGltZV9nZXRfbnMoKTtcbiYjNDM7XHRmb3IgKGkgPSB6ZXJvOyBpIFx1MDAzYyBiZW5jaF9uYWxsb2NzIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdG1lbSA9IGFyZW5hX2NhbGxvYygxLCBiZW5jaF9hbGxvY19zaXplKTtcbiYjNDM7XHRcdGlmICghbWVtKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdF9fc3luY19hZGRfYW5kX2ZldGNoKFx1MDAyNmJlbmNoX2R1cmF0aW9uX25zLFxuJiM0MztcdFx0XHQgICAgIGJwZl9rdGltZV9nZXRfbnMoKSAtIHN0YXJ0X25zKTtcbiYjNDM7XHRfX3N5bmNfYWRkX2FuZF9mZXRjaChcdTAwMjZiZW5jaF9oaXRzLCBpKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9zcGluX2xvY2suaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9zcGluX2xvY2suaFxuaW5kZXggYWU2YjcyZDE1YmI2Ny4uODcyZmEyMGYyOWE1OSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9zcGluX2xvY2suaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX3NwaW5fbG9jay5oXG5AQCAtMSw0ICYjNDM7MSw0IEBAXG4tLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgQlNELTItQ2xhdXNlXG4gLyogQ29weXJpZ2h0IChjKSAyMDI1IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuICNpZm5kZWYgQlBGX0FSRU5BX1NQSU5fTE9DS19IXG4gI2RlZmluZSBCUEZfQVJFTkFfU1BJTl9MT0NLX0hcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXRvbWljLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXRvbWljLmhcbmluZGV4IDQzYzMwNmUxN2YxOTguLjY1NTgyYjIwMTBhZDQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXRvbWljLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hdG9taWMuaFxuQEAgLTEsNCAmIzQzOzEsNCBAQFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIEJTRC0yLUNsYXVzZVxuIC8qIENvcHlyaWdodCAoYykgMjAyNSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbiAjaWZuZGVmIEJQRl9BVE9NSUNfSFxuICNkZWZpbmUgQlBGX0FUT01JQ19IXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX21heV9nb3RvLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfbWF5X2dvdG8uaFxuaW5kZXggOWJhOTA2ODlkNmJhMi4uYjMyYTQyMGQ0ZTFhZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9tYXlfZ290by5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfbWF5X2dvdG8uaFxuQEAgLTEsMyAmIzQzOzEsNCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTEdQTC0yLjEgT1IgQlNELTItQ2xhdXNlXG4gI3ByYWdtYSBvbmNlXG4gXG4gLypcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9iaXRtYXAuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2JpdG1hcC5oXG5pbmRleCBlMjQzMWVhNmZkZDY4Li4xNjNlMmI4M2Q5NDMxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvYml0bWFwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2JpdG1hcC5oXG5AQCAtMSw1ICYjNDM7MSw4IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBMR1BMLTIuMSBPUiBCU0QtMi1DbGF1c2VcbiAjcHJhZ21hIG9uY2VcbiBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmX2F0b21pYy5oXHUwMDNlXG4mIzQzO1xuICNkZWZpbmUgQklUU19QRVJfQllURVx0XHQ4XG4gI2RlZmluZSBCWVRFU19UT19CSVRTKG5iKVx0KChuYikgKiBCSVRTX1BFUl9CWVRFKVxuIFxuQEAgLTE1LDExICYjNDM7MTgsOCBAQCBzdHJ1Y3QgYXJlbmFfYml0bWFwIHtcbiBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcF9hbGxvYyhzaXplX3QgYml0cyk7XG4gdm9pZCBibXBfZnJlZShzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcCk7XG4gXG4tdm9pZCBfX2JtcF9zZXRfYml0KHUzMiBiaXQsIHN0cnVjdCBhcmVuYV9iaXRtYXAgX19hcmVuYSAqYm1wKTtcbi12b2lkIF9fYm1wX2NsZWFyX2JpdCh1MzIgYml0LCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcCk7XG4gdm9pZCBibXBfc2V0X2JpdCh1MzIgYml0LCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcCk7XG4gdm9pZCBibXBfY2xlYXJfYml0KHUzMiBiaXQsIHN0cnVjdCBhcmVuYV9iaXRtYXAgX19hcmVuYSAqYm1wKTtcbi1ib29sIGJtcF90ZXN0X2JpdCh1MzIgYml0LCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcCk7XG4gYm9vbCBibXBfdGVzdF9hbmRfY2xlYXJfYml0KHUzMiBiaXQsIHN0cnVjdCBhcmVuYV9iaXRtYXAgX19hcmVuYSAqYm1wKTtcbiBib29sIGJtcF90ZXN0X2FuZF9zZXRfYml0KHUzMiBiaXQsIHN0cnVjdCBhcmVuYV9iaXRtYXAgX19hcmVuYSAqYm1wKTtcbiBcbkBAIC0zMiwzICYjNDM7MzIsMjcgQEAgdm9pZCBibXBfY29weShzaXplX3QgYml0cywgc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICpkc3QsIHN0cnVjdCBhcmVuYV9iaXRtYXBcbiBib29sIGJtcF9pbnRlcnNlY3RzKHNpemVfdCBiaXRzLCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmFyZzEsIHN0cnVjdCBhcmVuYV9iaXRtYXAgX19hcmVuYSAqYXJnMik7XG4gYm9vbCBibXBfc3Vic2V0KHNpemVfdCBiaXRzLCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJpZywgc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICpzbWFsbCk7XG4gdm9pZCBibXBfcHJpbnQoc2l6ZV90IGJpdHMsIHN0cnVjdCBhcmVuYV9iaXRtYXAgX19hcmVuYSAqYm1wKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmVcbiYjNDM7dm9pZCBfX2JtcF9zZXRfYml0KHUzMiBiaXQsIHN0cnVjdCBhcmVuYV9iaXRtYXAgX19hcmVuYSAqYm1wKVxuJiM0Mzt7XG4mIzQzO1x0dm9sYXRpbGUgdTY0IF9fYXJlbmEgKndvcmQgPSBcdTAwMjZibXAtXHUwMDNlYml0c1tCSVRfV09SRChiaXQpXTtcbiYjNDM7XG4mIzQzO1x0KndvcmQgfD0gQklUX01BU0soYml0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZVxuJiM0Mzt2b2lkIF9fYm1wX2NsZWFyX2JpdCh1MzIgYml0LCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcClcbiYjNDM7e1xuJiM0MztcdHZvbGF0aWxlIHU2NCBfX2FyZW5hICp3b3JkID0gXHUwMDI2Ym1wLVx1MDAzZWJpdHNbQklUX1dPUkQoYml0KV07XG4mIzQzO1xuJiM0MztcdCp3b3JkIFx1MDAyNj0gfkJJVF9NQVNLKGJpdCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmVcbiYjNDM7Ym9vbCBibXBfdGVzdF9iaXQodTMyIGJpdCwgc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICpibXApXG4mIzQzO3tcbiYjNDM7XHR1NjQgd29yZCA9IFJFQURfT05DRShibXAtXHUwMDNlYml0c1tCSVRfV09SRChiaXQpXSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiB3b3JkIFx1MDAyNiBCSVRfTUFTSyhiaXQpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvY29tbW9uLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9jb21tb24uaFxuaW5kZXggOTMxYWNlOWE0OWUyYi4uYTYyMjAzNTVhNjk3NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2NvbW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9jb21tb24uaFxuQEAgLTQ5LDYgJiM0Mzs0OSw3IEBAIGV4dGVybiB2b2xhdGlsZSB1NjQgYXNhbl92aW9sYXRlZDtcbiBpbnQgYXJlbmFfZmxzKF9fdTY0IHdvcmQpO1xuIFxuIHZvaWQgX19hcmVuYSAqYXJlbmFfbWFsbG9jKHNpemVfdCBzaXplKTtcbiYjNDM7dm9pZCBfX2FyZW5hICphcmVuYV9jYWxsb2Moc2l6ZV90IG5jb3VudCwgc2l6ZV90IHNpemUpO1xuIHZvaWQgYXJlbmFfZnJlZSh2b2lkIF9fYXJlbmEgKnB0cik7XG4gXG4gLypcbkBAIC02MSw2ICYjNDM7NjIsNzYgQEAgdm9pZCBhcmVuYV9mcmVlKHZvaWQgX19hcmVuYSAqcHRyKTtcbiAgKi9cbiAjZGVmaW5lIGFyZW5hX3N1YnByb2dfaW5pdCgpIGRvIHsgYXNtIHZvbGF0aWxlIChcJiMzNDtcJiMzNDsgOjogXCYjMzQ7clwmIzM0OyhcdTAwMjZhcmVuYSkpOyB9IHdoaWxlICgwKVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBCUEYgZG9lcyBub3QgY3VycmVudGx5IHN1cHBvcnQgdGhlIG1lbXNldCBpbnRyaW5zaWNzLiBmb3IgbGFyZ2VcbiYjNDM7ICogc2VxdWVudGlhbCBjb3BpZXMsIG9yIGFzc2lnbm1lbnRzIG9mIGxhcmdlIGRhdGEgc3RydWN0dXJlcyxcbiYjNDM7ICogdGhlIGZyb250ZW5kIHdpbGwgZ2VuZXJhdGUgYW4gaW50cmluc2ljIHRoYXQgY2F1c2VzIHRoZSBCUEZcbiYjNDM7ICogYmFja2VuZCB0byBleGl0IGR1ZSB0byBhIG1pc3NpbmcgaW1wbGVtZW50YXRpb24uIFByb3ZpZGVcbiYjNDM7ICogaW1wbGVtZW50YXRpb25zIGZvciB0aGUgaW50cmluc2ljLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBpbnQgYXJlbmFfbWVtc2V0KHM4IF9fYXJlbmEgKmRzdCwgczggdmFsLCBzaXplX3Qgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHNpemVfdCBoZWFkYWxpZ247XG4mIzQzO1x0c2l6ZV90IHRhaWxhbGlnbjtcbiYjNDM7XHR1OCB1dmFsID0gKHU4KXZhbDtcbiYjNDM7XHRzaXplX3QgdmFsNjQ7XG4mIzQzO1x0c2l6ZV90IGk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQ2FsY3VsYXRlIGhvdyBtYW55IGJ5dGVzIHRvIHRoZSBuZXh0IHdvcmQtYWxpZ25lZCBvbmUuXG4mIzQzO1x0ICogV2UgZ2V0IHRoaXMgYnkgdHJ1bmNhdGluZyB0aGUgMnMgY29tcGxlbWVudCBvZiB0aGVcbiYjNDM7XHQgKiBwb2ludGVyIHRvIHRoZSBsYXN0IDMgYml0cy4gSW50dWl0aXZlbHksIHNpbmNlXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBUaGUgTiBMU0JzIG9mIGRzdCBhbmQgLWRzdCBhZGQgdG8gMSBcdTAwM2NcdTAwM2MgTiwgd2hpY2hcbiYjNDM7XHQgKiBpcyB3aHkgZHN0ICYjNDM7ICgtZHN0KSA9IDB4MFVMTCB0aHJvdWdoIG92ZXJmbG93LiBTbyB0aGVcbiYjNDM7XHQgKiBsYXN0IE4gPSAzIGJpdHMgb2YgdGhlIG5lZ2F0aXZlIGFyZSB0aGUgbnVtYmVyIG9mXG4mIzQzO1x0ICogYnl0ZXMgdG8gYWxpZ24gZHN0IG9uIHRoZSBsYXN0IDMgYml0cy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqL1xuJiM0MztcdGhlYWRhbGlnbiA9IC0odTY0KWRzdCBcdTAwMjYgKHNpemVvZih1NjQpIC0gMSk7XG4mIzQzO1x0aWYgKCFoZWFkYWxpZ24gfHwgc2l6ZSBcdTAwM2MgaGVhZGFsaWduKVxuJiM0MztcdFx0Z290byBwdHJhbGlnbmVkO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSB6ZXJvOyBpIFx1MDAzYyBoZWFkYWxpZ24gXHUwMDI2XHUwMDI2IGNhbl9sb29wOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGRzdFtpXSA9IHV2YWw7XG4mIzQzO1xuJiM0MztcdGRzdCAmIzQzOz0gaGVhZGFsaWduO1xuJiM0MztcdHNpemUgLT0gaGVhZGFsaWduO1xuJiM0MztcbiYjNDM7cHRyYWxpZ25lZDpcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNYWtlIGEgd29yZCB3aXRoIGFsbCBieXRlcyBlcXVhbCB0byB0aGUgYnl0ZSB3ZSBhcmUgc2V0dGluZy5cbiYjNDM7XHQgKiBTaW5jZSAxIGJ5dGUgLVx1MDAzZSAyIGhleCBkaWdpdHMuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBTaGlmdGluZyB0aGUgdmFsdWUgYnkgYSAwIGJ5dGVzIGlzIGVxdWFsIHRvIG11bHRpcGxpY2F0aW9uIGJ5IDB4MDFcbiYjNDM7XHQgKiBTaGlmdGluZyBieSAxIGJ5dGVzIGlzIGVxdWFsIHRvIG11bHRpcGxpY2F0aW9uIGJ5IDB4MDEgXHUwMDNjXHUwMDNjIDgsXG4mIzQzO1x0ICogLi4uXG4mIzQzO1x0ICogU2hpZnRpbmcgYnkgNyBieXRlcyBpcyBlcXVhbCB0byBtdWx0aXBsaWNhdGlvbiBieSAweDAxIFx1MDAzY1x1MDAzYyA1Ni5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIEVuZCBvcGVyYXRpb24gdG8gcmVwbGljYXRlIHRoZSBieXRlIGludG8gYWxsIHRoZSBieXRlcyBvZiBhIHdvcmRcbiYjNDM7XHQgKiBpcyAoc2luY2UgYSB8IGIgPSBhICYjNDM7IGIgd2hlbiBhIFx1MDAyNiBiID09IDApOlxuJiM0MztcdCAqXG4mIzQzO1x0ICogdmFsICYjNDM7IHZhbCAqICgxVUwgXHUwMDNjXHUwMDNjIDgpICYjNDM7IHZhbCAqICgxVUwgXHUwMDNjXHUwMDNjIDE2KSAmIzQzOyAuLiAmIzQzOyB2YWwgKiAoMVVMIFx1MDAzY1x1MDAzYyA1NilcbiYjNDM7XHQgKiA9IHZhbCAqICgxVUwgXHUwMDNjXHUwMDNjIDU2ICYjNDM7IDFVTCBcdTAwM2NcdTAwM2MgNDggJiM0MzsgLi4uICYjNDM7IDFVTCBcdTAwM2NcdTAwM2MgMClcbiYjNDM7XHQgKiA9IHZhbCAqICgweDAxVUwgXHUwMDNjXHUwMDNjIDU2IHwgMHgwMVVMIFx1MDAzY1x1MDAzYyA0OCAmIzQzOyAuLi4gJiM0MzsgMVVMIFx1MDAzY1x1MDAzYyAwKVxuJiM0MztcdCAqID0gdmFsICogMHgwMTAxIDAxMDEgMDEwMSAwMTAxXG4mIzQzO1x0ICovXG4mIzQzO1x0dmFsNjQgPSAodTgpdmFsICogMHgwMTAxMDEwMTAxMDEwMTAxVUxMO1xuJiM0MztcbiYjNDM7XHQvKiBQb2ludGVyIGlzIG5vdyBhbGlnbmVkLCB1c2Ugd29yZC1hbGlnbmVkIGFzc2lnbm1lbnRzLiAqL1xuJiM0MztcdGZvciAoaSA9IHplcm87IGkgXHUwMDNjIHNpemUgLyBzaXplb2YodTY0KSBcdTAwMjZcdTAwMjYgY2FuX2xvb3A7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0KCh1NjQgX19hcmVuYSAqKWRzdClbaV0gPSB2YWw2NDtcbiYjNDM7XG4mIzQzO1x0LyogR28gYmFjayB0byBieXRlLWFsaWduZWQgZm9yIHRoZSB0YWlsLiAqL1xuJiM0MztcdHRhaWxhbGlnbiA9IHNpemUgJSBzaXplb2YodTY0KTtcbiYjNDM7XHRkc3QgJiM0Mzs9IHNpemUgLSB0YWlsYWxpZ247XG4mIzQzO1x0Zm9yIChpID0gemVybzsgaSBcdTAwM2MgdGFpbGFsaWduIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRkc3RbaV0gPSB1dmFsO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiAjZWxzZSAvKiAhIF9fQlBGX18gKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NzdGRpbnQuaFx1MDAzZVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9iaXRtYXAuYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYml0bWFwLmJwZi5jXG5pbmRleCA3NjMxOWE1MjlmMDJiLi5lNjZiM2EyNmNhM2Q2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2JpdG1hcC5icGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2JpdG1hcC5icGYuY1xuQEAgLTEsMyAmIzQzOzEsNiBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTEdQTC0yLjEgT1IgQlNELTItQ2xhdXNlXG4mIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbiYjNDM7XG4gI2luY2x1ZGUgXHUwMDNjbGliYXJlbmEvY29tbW9uLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaWJhcmVuYS9hc2FuLmhcdTAwM2VcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmNcbmluZGV4IDUxMzVkNWM3MmE0NmQuLmRlNjU2YjY5ZDEzYWYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYXNhbi5icGYuY1xuQEAgLTEwMywyMyAmIzQzOzEwMyw2IEBAIHZvbGF0aWxlIGJvb2wgYXNhbl9pbml0ZWQgPSBmYWxzZTtcbiAgKi9cbiB2b2xhdGlsZSBib29sIGFzYW5fcmVwb3J0X29uY2UgPSBmYWxzZTtcbiBcbi0vKlxuLSAqIEJQRiBkb2VzIG5vdCBjdXJyZW50bHkgc3VwcG9ydCB0aGUgbWVtc2V0L21lbWNweS9tZW1jbXAgaW50cmluc2ljcy5cbi0gKiBGb3IgbGFyZ2Ugc2VxdWVudGlhbCBjb3BpZXMsIG9yIGFzc2lnbm1lbnRzIG9mIGxhcmdlIGRhdGEgc3RydWN0dXJlcyxcbi0gKiB0aGUgZnJvbnRlbmQgd2lsbCBnZW5lcmF0ZSBhbiBpbnRyaW5zaWMgdGhhdCBjYXVzZXMgdGhlIEJQRiBiYWNrZW5kXG4tICogdG8gZXhpdCBkdWUgdG8gYSBtaXNzaW5nIGltcGxlbWVudGF0aW9uLiBQcm92aWRlIGEgc2ltcGxlIGltcGxlbWVudGF0aW9uXG4tICoganVzdCBmb3IgbWVtc2V0IHRvIHVzZSBpdCBmb3IgcG9pc29uaW5nL3VucG9pc29uaW5nIHRoZSBtYXAuXG4tICovXG4tX193ZWFrIGludCBhc2FuX21lbXNldChzOCBfX2FyZW5hICpkc3QsIHM4IHZhbCwgc2l6ZV90IHNpemUpXG4te1xuLVx0c2l6ZV90IGk7XG4tXG4tXHRmb3IgKGkgPSB6ZXJvOyBpIFx1MDAzYyBzaXplIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSYjNDM7JiM0MzspXG4tXHRcdGRzdFtpXSA9IHZhbDtcbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbiAvKiBWYWxpZGF0ZSBhIDEtYnl0ZSBhY2Nlc3MsIGFsd2F5cyB3aXRoaW4gYSBzaW5nbGUgYnl0ZS4gKi9cbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgbWVtb3J5X2lzX3BvaXNvbmVkXzEoczggX19hcmVuYSAqYWRkcilcbiB7XG5AQCAtNDIyLDcgJiM0Mzs0MDUsNyBAQCBfX2hpZGRlbiBfX25vYXNhbiBpbnQgYXNhbl9wb2lzb24odm9pZCBfX2FyZW5hICphZGRyLCBzOCB2YWwsIHNpemVfdCBzaXplKVxuIFx0c2hhZG93ID0gbWVtX3RvX3NoYWRvdyhhZGRyKTtcbiBcdGxlbiA9IHNpemUgXHUwMDNlXHUwMDNlIEFTQU5fU0hBRE9XX1NISUZUO1xuIFxuLVx0YXNhbl9tZW1zZXQoc2hhZG93LCB2YWwsIGxlbik7XG4mIzQzO1x0YXJlbmFfbWVtc2V0KHNoYWRvdywgdmFsLCBsZW4pO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTQ2Myw3ICYjNDM7NDQ2LDcgQEAgX19oaWRkZW4gX19ub2FzYW4gaW50IGFzYW5fdW5wb2lzb24odm9pZCBfX2FyZW5hICphZGRyLCBzaXplX3Qgc2l6ZSlcbiBcdHNoYWRvdyA9IG1lbV90b19zaGFkb3coYWRkcik7XG4gXHRsZW4gPSBzaXplIFx1MDAzZVx1MDAzZSBBU0FOX1NIQURPV19TSElGVDtcbiBcbi1cdGFzYW5fbWVtc2V0KHNoYWRvdywgMCwgbGVuKTtcbiYjNDM7XHRhcmVuYV9tZW1zZXQoc2hhZG93LCAwLCBsZW4pO1xuIFxuIFx0LypcbiBcdCAqIElmIHdlIGFyZSBhbGxvY2F0aW5nIGEgbm9uLWdyYW51bGUgYWxpZ25lZCByZWdpb24sIHdlIG5lZWQgdG8gYWRqdXN0XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9iaXRtYXAuYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2JpdG1hcC5icGYuY1xuaW5kZXggNWZmOGU2ODhkZGM3Ni4uMDM5MGYyMGNlMzY2ZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYml0bWFwLmJwZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2JpdG1hcC5icGYuY1xuQEAgLTM0LDI0ICYjNDM7MzQsNiBAQCB2b2lkIGJtcF9mcmVlKHN0cnVjdCBhcmVuYV9iaXRtYXAgX19hcmVuYSAqYm1wKVxuIFx0YXJlbmFfZnJlZShibXApO1xuIH1cbiBcbi1fX3dlYWtcbi12b2lkIF9fYm1wX3NldF9iaXQodTMyIGJpdCwgc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICpibXApXG4te1xuLVx0Ym1wLVx1MDAzZWJpdHNbQklUX1dPUkQoYml0KV0gfD0gQklUX01BU0soYml0KTtcbi19XG4tXG4tX193ZWFrXG4tdm9pZCBfX2JtcF9jbGVhcl9iaXQodTMyIGJpdCwgc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICpibXApXG4te1xuLVx0Ym1wLVx1MDAzZWJpdHNbQklUX1dPUkQoYml0KV0gXHUwMDI2PSB+QklUX01BU0soYml0KTtcbi19XG4tXG4tX193ZWFrXG4tYm9vbCBibXBfdGVzdF9iaXQodTMyIGJpdCwgc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICpibXApXG4te1xuLVx0cmV0dXJuIGJtcC1cdTAwM2ViaXRzW0JJVF9XT1JEKGJpdCldIFx1MDAyNiBCSVRfTUFTSyhiaXQpO1xuLX1cbi1cbiBfX3dlYWtcbiBib29sIGJtcF90ZXN0X2FuZF9jbGVhcl9iaXQodTMyIGJpdCwgc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICpibXApXG4ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYnVkZHkuYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2J1ZGR5LmJwZi5jXG5pbmRleCBjNjc0ZWU1Y2ZjYzFkLi4yNDkwYWIxMzk2ZGUwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9idWRkeS5icGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9idWRkeS5icGYuY1xuQEAgLTUsNiAmIzQzOzUsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpYmFyZW5hL2FzYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpYmFyZW5hL2J1ZGR5LmhcdTAwM2VcbiBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmX2FyZW5hX3NwaW5fbG9jay5oXHUwMDNlXG4mIzQzO1xuIC8qXG4gICogQnVkZHkgYWxsb2NhdG9yIGFyZW5hLWJhc2VkIGltcGxlbWVudGF0aW9uLlxuICAqXG5AQCAtNDUsMTUgJiM0Mzs0Nyw4IEBAIGVudW0ge1xuIFx0QlVERFlfQ0hVTktfUEFHRVNcdD0gQlVERFlfQ0hVTktfQllURVMgLyBfX1BBR0VfU0laRVxuIH07XG4gXG4tc3RhdGljIGlubGluZSBpbnQgYnVkZHlfbG9jayhzdHJ1Y3QgYnVkZHkgX19hcmVuYSAqYnVkZHkpXG4te1xuLVx0cmV0dXJuIGFyZW5hX3NwaW5fbG9jayhcdTAwMjZidWRkeS1cdTAwM2Vsb2NrKTtcbi19XG4tXG4tc3RhdGljIGlubGluZSB2b2lkIGJ1ZGR5X3VubG9jayhzdHJ1Y3QgYnVkZHkgX19hcmVuYSAqYnVkZHkpXG4te1xuLVx0YXJlbmFfc3Bpbl91bmxvY2soXHUwMDI2YnVkZHktXHUwMDNlbG9jayk7XG4tfVxuJiM0MzsjZGVmaW5lIGJ1ZGR5X2xvY2soYnVkZHksIGZsYWdzKSAoYXJlbmFfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2KGJ1ZGR5KS1cdTAwM2Vsb2NrLCAoZmxhZ3MpKSlcbiYjNDM7I2RlZmluZSBidWRkeV91bmxvY2soYnVkZHksIGZsYWdzKSAoYXJlbmFfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjYoYnVkZHkpLVx1MDAzZWxvY2ssIChmbGFncykpKVxuIFxuIC8qXG4gICogUmVzZXJ2ZSBwYXJ0IG9mIHRoZSBhcmVuYSBhZGRyZXNzIHNwYWNlIGZvciB0aGUgYWxsb2NhdG9yLiBXZSB1c2VcbkBAIC0zODUsNiAmIzQzOzM4MCw3IEBAIHN0YXRpYyBzdHJ1Y3QgYnVkZHlfY2h1bmsgX19hcmVuYSAqYnVkZHlfY2h1bmtfZ2V0KHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSlcbiB7XG4gXHR1NjQgb3JkZXIsIG9yZCwgbWluX29yZGVyLCBtYXhfb3JkZXI7XG4gXHRzdHJ1Y3QgYnVkZHlfY2h1bmsgX19hcmVuYSAgKmNodW5rO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRzaXplX3QgbGVmdDtcbiBcdGludCBwb3dlcjI7XG4gXHR1NjQgdmFkZHI7XG5AQCAtNDE2LDcgJiM0Mzs0MTIsNyBAQCBzdGF0aWMgc3RydWN0IGJ1ZGR5X2NodW5rIF9fYXJlbmEgKmJ1ZGR5X2NodW5rX2dldChzdHJ1Y3QgYnVkZHkgX19hcmVuYSAqYnVkZHkpXG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuIFxuLVx0aWYgKGJ1ZGR5X2xvY2soYnVkZHkpKSB7XG4mIzQzO1x0aWYgKGJ1ZGR5X2xvY2soYnVkZHksIGZsYWdzKSkge1xuIFx0XHQvKlxuIFx0XHQgKiBXZSBjYW5ub3QgcmVjbGFpbSB0aGUgdmFkZHIgc3BhY2UsIGJ1dCB0aGF0IGlzIG9rIC0gdGhpc1xuIFx0XHQgKiBvcGVyYXRpb24gc2hvdWxkIGFsd2F5cyBzdWNjZWVkLiBUaGUgZXJyb3IgcGF0aCBpcyB0byBjYXRjaFxuQEAgLTUyMCw3ICYjNDM7NTE2LDcgQEAgc3RhdGljIHN0cnVjdCBidWRkeV9jaHVuayBfX2FyZW5hICpidWRkeV9jaHVua19nZXQoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KVxuIFx0XHRcdGFyZW5hX3N0ZGVycihcbiBcdFx0XHRcdFwmIzM0O2NodW5rIGhhcyBzaXplIG9mIDB4JWx4IGJ5dGVzIChsZWZ0ICVseCBieXRlcylcXG5cJiMzNDssXG4gXHRcdFx0XHRzaXplb2YoKmNodW5rKSwgbGVmdCk7XG4tXHRcdFx0YnVkZHlfdW5sb2NrKGJ1ZGR5KTtcbiYjNDM7XHRcdFx0YnVkZHlfdW5sb2NrKGJ1ZGR5LCBmbGFncyk7XG4gXG4gXHRcdFx0cmV0dXJuIE5VTEw7XG4gXHRcdH1cbkBAIC01MzEsNyAmIzQzOzUyNyw3IEBAIHN0YXRpYyBzdHJ1Y3QgYnVkZHlfY2h1bmsgX19hcmVuYSAqYnVkZHlfY2h1bmtfZ2V0KHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSlcbiBcdFx0b3JkZXIgPSAocG93ZXIyIFx1MDAzZT0gQlVERFlfTUlOX0FMTE9DX1NISUZUKSA/IHBvd2VyMiAtIEJVRERZX01JTl9BTExPQ19TSElGVCA6IDA7XG4gXG4gXHRcdGlmIChpZHhfc2V0X2FsbG9jYXRlZChjaHVuaywgaWR4LCB0cnVlKSkge1xuLVx0XHRcdGJ1ZGR5X3VubG9jayhidWRkeSk7XG4mIzQzO1x0XHRcdGJ1ZGR5X3VubG9jayhidWRkeSwgZmxhZ3MpO1xuIFx0XHRcdHJldHVybiBOVUxMO1xuIFx0XHR9XG4gXG5AQCAtNTQ3LDcgJiM0Mzs1NDMsNyBAQCBzdGF0aWMgc3RydWN0IGJ1ZGR5X2NodW5rIF9fYXJlbmEgKmJ1ZGR5X2NodW5rX2dldChzdHJ1Y3QgYnVkZHkgX19hcmVuYSAqYnVkZHkpXG4gXHRcdCAqL1xuIFx0XHRtaW5fb3JkZXIgPSBsZWZ0ID8gb3JkZXIgJiM0MzsgMSA6IG9yZGVyO1xuIFx0XHRpZiAoYWRkX2xlZnRvdmVyc190b19mcmVlbGlzdChjaHVuaywgaWR4LCBtaW5fb3JkZXIsIG1heF9vcmRlcikpIHtcbi1cdFx0XHRidWRkeV91bmxvY2soYnVkZHkpO1xuJiM0MztcdFx0XHRidWRkeV91bmxvY2soYnVkZHksIGZsYWdzKTtcbiBcdFx0XHRyZXR1cm4gTlVMTDtcbiBcdFx0fVxuIFxuQEAgLTU1Niw3ICYjNDM7NTUyLDcgQEAgc3RhdGljIHN0cnVjdCBidWRkeV9jaHVuayBfX2FyZW5hICpidWRkeV9jaHVua19nZXQoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KVxuIFx0XHRtYXhfb3JkZXIgPSBvcmRlcjtcbiBcdH1cbiBcbi1cdGJ1ZGR5X3VubG9jayhidWRkeSk7XG4mIzQzO1x0YnVkZHlfdW5sb2NrKGJ1ZGR5LCBmbGFncyk7XG4gXG4gXHRyZXR1cm4gY2h1bms7XG4gfVxuQEAgLTU2NCw2ICYjNDM7NTYwLDcgQEAgc3RhdGljIHN0cnVjdCBidWRkeV9jaHVuayBfX2FyZW5hICpidWRkeV9jaHVua19nZXQoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KVxuIF9fd2VhayBpbnQgYnVkZHlfaW5pdChzdHJ1Y3QgYnVkZHkgX19hcmVuYSAqYnVkZHkpXG4ge1xuIFx0c3RydWN0IGJ1ZGR5X2NodW5rIF9fYXJlbmEgKmNodW5rO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRpbnQgcmV0O1xuIFxuIFx0aWYgKCFhc2FuX3JlYWR5KCkpXG5AQCAtNTc5LDcgJiM0Mzs1NzYsNyBAQCBfX3dlYWsgaW50IGJ1ZGR5X2luaXQoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KVxuIFxuIFx0Y2h1bmsgPSBidWRkeV9jaHVua19nZXQoYnVkZHkpO1xuIFxuLVx0aWYgKGJ1ZGR5X2xvY2soYnVkZHkpKSB7XG4mIzQzO1x0aWYgKGJ1ZGR5X2xvY2soYnVkZHksIGZsYWdzKSkge1xuIFx0XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgY2h1bmssIEJVRERZX0NIVU5LX1BBR0VTKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG5AQCAtNTkxLDcgJiM0Mzs1ODgsNyBAQCBfX3dlYWsgaW50IGJ1ZGR5X2luaXQoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KVxuIFx0LyogUHV0IHRoZSBjaHVuayBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0LiAqL1xuIFx0YnVkZHktXHUwMDNlZmlyc3RfY2h1bmsgPSBjaHVuaztcbiBcbi1cdGJ1ZGR5X3VubG9jayhidWRkeSk7XG4mIzQzO1x0YnVkZHlfdW5sb2NrKGJ1ZGR5LCBmbGFncyk7XG4gXG4gXHRyZXR1cm4gY2h1bmsgPyAwIDogLUVOT01FTTtcbiB9XG5AQCAtNzMwLDkgJiM0Mzs3MjcsMTAgQEAgc3RhdGljIHU2NCBidWRkeV9hbGxvY19mcm9tX2V4aXN0aW5nX2NodW5rcyhzdHJ1Y3QgYnVkZHkgX19hcmVuYSAqYnVkZHksIGludCBvcmRcbiAgKi9cbiBzdGF0aWMgdTY0IGJ1ZGR5X2FsbG9jX2Zyb21fbmV3X2NodW5rKHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSwgc3RydWN0IGJ1ZGR5X2NodW5rIF9fYXJlbmEgKmNodW5rLCBpbnQgb3JkZXIpXG4ge1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHR1NjQgYWRkcmVzcztcbiBcbi1cdGlmIChidWRkeV9sb2NrKGJ1ZGR5KSlcbiYjNDM7XHRpZiAoYnVkZHlfbG9jayhidWRkeSwgZmxhZ3MpKVxuIFx0XHRyZXR1cm4gKHU2NClOVUxMO1xuIFxuIFxuQEAgLTc0NSw3ICYjNDM7NzQzLDcgQEAgc3RhdGljIHU2NCBidWRkeV9hbGxvY19mcm9tX25ld19jaHVuayhzdHJ1Y3QgYnVkZHkgX19hcmVuYSAqYnVkZHksIHN0cnVjdCBidWRkeV9cbiBcbiBcdGFkZHJlc3MgPSBidWRkeV9jaHVua19hbGxvYyhidWRkeS1cdTAwM2VmaXJzdF9jaHVuaywgb3JkZXIpO1xuIFxuLVx0YnVkZHlfdW5sb2NrKGJ1ZGR5KTtcbiYjNDM7XHRidWRkeV91bmxvY2soYnVkZHksIGZsYWdzKTtcbiBcbiBcdHJldHVybiAodTY0KWFkZHJlc3M7XG4gfVxuQEAgLTc1NCw2ICYjNDM7NzUyLDcgQEAgdm9pZCBfX2FyZW5hICpidWRkeV9hbGxvYyhzdHJ1Y3QgYnVkZHkgX19hcmVuYSAqYnVkZHksIHNpemVfdCBzaXplKVxuIHtcbiBcdHZvaWQgX19hcmVuYSAqYWRkcmVzcyA9IE5VTEw7XG4gXHRzdHJ1Y3QgYnVkZHlfY2h1bmsgX19hcmVuYSAqY2h1bms7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGludCBvcmRlcjtcbiBcbiBcdGlmICghYnVkZHkpXG5AQCAtNzY1LDExICYjNDM7NzY0LDExIEBAIHZvaWQgX19hcmVuYSAqYnVkZHlfYWxsb2Moc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5LCBzaXplX3Qgc2l6ZSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG4gXG4tXHRpZiAoYnVkZHlfbG9jayhidWRkeSkpXG4mIzQzO1x0aWYgKGJ1ZGR5X2xvY2soYnVkZHksIGZsYWdzKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4gXHRhZGRyZXNzID0gKHU4IF9fYXJlbmEgKilidWRkeV9hbGxvY19mcm9tX2V4aXN0aW5nX2NodW5rcyhidWRkeSwgb3JkZXIpO1xuLVx0YnVkZHlfdW5sb2NrKGJ1ZGR5KTtcbiYjNDM7XHRidWRkeV91bmxvY2soYnVkZHksIGZsYWdzKTtcbiBcdGlmIChhZGRyZXNzKVxuIFx0XHRnb3RvIGRvbmU7XG4gXG5AQCAtODgwLDYgJiM0Mzs4NzksNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBidWRkeV9mcmVlX3VubG9ja2VkKHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSwgdTY0XG4gXG4gX193ZWFrIGludCBidWRkeV9mcmVlKHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSwgdm9pZCBfX2FyZW5hICphZGRyKVxuIHtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0aW50IHJldDtcbiBcbiBcdGlmICghYnVkZHkpXG5AQCAtODg5LDEzICYjNDM7ODg5LDEzIEBAIF9fd2VhayBpbnQgYnVkZHlfZnJlZShzdHJ1Y3QgYnVkZHkgX19hcmVuYSAqYnVkZHksIHZvaWQgX19hcmVuYSAqYWRkcilcbiBcdGlmICghYWRkcilcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRyZXQgPSBidWRkeV9sb2NrKGJ1ZGR5KTtcbiYjNDM7XHRyZXQgPSBidWRkeV9sb2NrKGJ1ZGR5LCBmbGFncyk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0cmV0ID0gYnVkZHlfZnJlZV91bmxvY2tlZChidWRkeSwgKHU2NClhZGRyKTtcbiBcbi1cdGJ1ZGR5X3VubG9jayhidWRkeSk7XG4mIzQzO1x0YnVkZHlfdW5sb2NrKGJ1ZGR5LCBmbGFncyk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2NvbW1vbi5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvY29tbW9uLmJwZi5jXG5pbmRleCA1NjlmMGY2NGQ1MThiLi43ODVkNDg3MmNiNDk0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9jb21tb24uYnBmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvY29tbW9uLmJwZi5jXG5AQCAtMSw1ICYjNDM7MSw3IEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IExHUEwtMi4xIE9SIEJTRC0yLUNsYXVzZVxuIC8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGltaXRzLmhcdTAwM2VcbiYjNDM7XG4gI2luY2x1ZGUgXHUwMDNjbGliYXJlbmEvY29tbW9uLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaWJhcmVuYS9hc2FuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaWJhcmVuYS9idWRkeS5oXHUwMDNlXG5AQCAtNDgsMTAgJiM0Mzs1MCwzMyBAQCBfX3dlYWsgdm9pZCBfX2FyZW5hICphcmVuYV9tYWxsb2Moc2l6ZV90IHNpemUpXG4gXHRyZXR1cm4gYnVkZHlfYWxsb2MoXHUwMDI2YnVkZHksIHNpemUpO1xuIH1cbiBcbiYjNDM7X193ZWFrIHZvaWQgX19hcmVuYSAqYXJlbmFfY2FsbG9jKHNpemVfdCBuY291bnQsIHNpemVfdCBzaXplKVxuJiM0Mzt7XG4mIzQzO1x0dm9pZCBfX2FyZW5hICptZW07XG4mIzQzO1x0c2l6ZV90IHRvdGFsO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIElkZWFsbHkgd2UmIzM5O2QgYmUgdXNpbmcgX19idWlsdGluX211bF9vdmVyZmxvdyBoZXJlLFxuJiM0MztcdCAqIGJ1dCB0aGUgQlBGIGNvbXBpbGVyIGJhY2tlbmQgZG9lc24mIzM5O3QgaW1wbGVtZW50IF9fbXVsdGkzLlxuJiM0MztcdCAqIFRoZXJlIGFyZSB3YXlzIHRvIG9wdGltaXplIHRoZSBkaXZpc2lvbiBhd2F5IGZyb20gdGhlXG4mIzQzO1x0ICogb3ZlcmZsb3cgY2hlY2ssIGJ1dCBhbnkgY29zdHMgYXJlIGR3YXJmZWQgYnkgdGhlXG4mIzQzO1x0ICogYnVkZHlfYWxsb2MoKSBjYWxsLiBLZWVwIGl0IHNpbXBsZSBmb3Igbm93LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh1bmxpa2VseShuY291bnQgXHUwMDI2XHUwMDI2IHNpemUgXHUwMDNlPSBVTExPTkdfTUFYIC8gbmNvdW50KSlcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHR0b3RhbCA9IG5jb3VudCAqIHNpemU7XG4mIzQzO1xuJiM0MztcdG1lbSA9IGJ1ZGR5X2FsbG9jKFx1MDAyNmJ1ZGR5LCB0b3RhbCk7XG4mIzQzO1x0aWYgKGxpa2VseShtZW0pKVxuJiM0MztcdFx0YXJlbmFfbWVtc2V0KG1lbSwgMCwgdG90YWwpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbWVtO1xuJiM0Mzt9XG4mIzQzO1xuIF9fd2VhayB2b2lkIGFyZW5hX2ZyZWUodm9pZCBfX2FyZW5hICpwdHIpXG4ge1xuIFx0YnVkZHlfZnJlZShcdTAwMjZidWRkeSwgcHRyKTtcbiB9XG4gXG4tXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxOTo0MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBCUEYgc2VsZnRlc3RzIGFuZCBiZW5jaG1hcmtzIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8uIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDFhMjI4NmNhYTk4ZmE4NjUwM2QzYTkyMGVlZDNjZGYzNWE2NmQ4MwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDE3IDE5OjQzOjQyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlCmluZGV4IGQzNjU1YTcwNjQ4MjYuLjIyZTllYjE2YzE1MTEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUKQEAgLTgyNiwxOCAmIzQzOzgyNiwyMiBAQCBMSUJBUkVOQV9NQUtFX0FSR1MgPSBcCiAJCUJQRl9UQVJHRVRfRU5ESUFOPSYjMzQ7JChCUEZfVEFSR0VUX0VORElBTikmIzM0OyBcCiAJCVE9JiMzNDskKFEpJiMzNDsKIAotTElCQVJFTkFfQlBGX0RFUFMgOj0gJCh3aWxkY2FyZCBsaWJhcmVuYS9NYWtlZmlsZQkJXAotCQkJCSBsaWJhcmVuYS9pbmNsdWRlLyoJCVwKLQkJCQkgbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS8qCVwKLQkJCQkgbGliYXJlbmEvc3JjLyoJCQlcCi0JCQkJIGxpYmFyZW5hL3NlbGZ0ZXN0cy8qCQlcCi0JCQkJIGxpYmFyZW5hLyouYnBmLm8pCiYjNDM7TElCQVJFTkFfQ09NTU9OX0RFUFMgOj0gJCh3aWxkY2FyZCBsaWJhcmVuYS9NYWtlZmlsZQkJXAomIzQzOwkJCQkgICAgbGliYXJlbmEvaW5jbHVkZS8qCQlcCiYjNDM7CQkJCSAgICBsaWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hLyoJXAomIzQzOwkJCQkgICAgbGliYXJlbmEvc3JjLyopCiYjNDM7TElCQVJFTkFfQlBGX0RFUFMgOj0gJChMSUJBUkVOQV9DT01NT05fREVQUykgJCh3aWxkY2FyZCBsaWJhcmVuYS9zZWxmdGVzdHMvKikKJiM0MztMSUJBUkVOQV9CRU5DSF9CUEZfREVQUyA6PSAkKExJQkFSRU5BX0NPTU1PTl9ERVBTKSAkKHdpbGRjYXJkIGxpYmFyZW5hL2JlbmNocy8qKQogCiBMSUJBUkVOQV9TS0VMIDo9IGxpYmFyZW5hL2xpYmFyZW5hLnNrZWwuaAomIzQzO0xJQkFSRU5BX0JFTkNIX1NLRUwgOj0gbGliYXJlbmEvbGliYXJlbmFfYmVuY2guc2tlbC5oCiAKICQoTElCQVJFTkFfU0tFTCk6ICQoSU5DTFVERV9ESVIpL3ZtbGludXguaCAkKEJQRk9CSikgJChMSUJBUkVOQV9CUEZfREVQUykKIAkmIzQzOyQoTUFLRSkgLUMgbGliYXJlbmEgbGliYXJlbmEuc2tlbC5oICQoTElCQVJFTkFfTUFLRV9BUkdTKQogCiYjNDM7JChMSUJBUkVOQV9CRU5DSF9TS0VMKTogJChJTkNMVURFX0RJUikvdm1saW51eC5oICQoQlBGT0JKKSAkKExJQkFSRU5BX0JFTkNIX0JQRl9ERVBTKSB8ICQoTElCQVJFTkFfU0tFTCkKJiM0MzsJJiM0MzskKE1BS0UpIC1DIGxpYmFyZW5hIGJlbmNobWFya3MgJChMSUJBUkVOQV9NQUtFX0FSR1MpCiYjNDM7CiBpZm5lcSAoJChDTEFOR19IQVNfQVJFTkFfQVNBTiksKQogTElCQVJFTkFfQVNBTl9TS0VMIDo9IGxpYmFyZW5hL2xpYmFyZW5hX2FzYW4uc2tlbC5oCiBDRkxBR1MgJiM0Mzs9IC1ESEFTX0JQRl9BUkVOQV9BU0FOCkBAIC05ODcsNiAmIzQzOzk5MSw3IEBAICQoT1VUUFVUKS9iZW5jaF9zb2NrbWFwLm86ICQoT1VUUFVUKS9iZW5jaF9zb2NrbWFwX3Byb2cuc2tlbC5oCiAkKE9VVFBVVCkvYmVuY2hfbHBtX3RyaWVfbWFwLm86ICQoT1VUUFVUKS9scG1fdHJpZV9iZW5jaC5za2VsLmggJChPVVRQVVQpL2xwbV90cmllX21hcC5za2VsLmgKICQoT1VUUFVUKS9iZW5jaF9icGZfbm9wLm86ICQoT1VUUFVUKS9icGZfbm9wX2JlbmNoLnNrZWwuaCBiZW5jaF9icGZfdGltaW5nLmgKICQoT1VUUFVUKS9iZW5jaF94ZHBfbGIubzogJChPVVRQVVQpL3hkcF9sYl9iZW5jaC5za2VsLmggYmVuY2hfYnBmX3RpbWluZy5oCiYjNDM7JChPVVRQVVQpL2JlbmNoX2xpYmFyZW5hLm86ICQoTElCQVJFTkFfQkVOQ0hfU0tFTCkKICQoT1VUUFVUKS9iZW5jaF9icGZfdGltaW5nLm86IGJlbmNoX2JwZl90aW1pbmcuaAogJChPVVRQVVQpL2JlbmNoLm86IGJlbmNoLmggdGVzdGluZ19oZWxwZXJzLmggJChCUEZPQkopCiAkKE9VVFBVVCkvYmVuY2g6IExETElCUyAmIzQzOz0gLWxtCkBAIC0xMDE0LDYgJiM0MzsxMDE5LDcgQEAgJChPVVRQVVQpL2JlbmNoOiAkKE9VVFBVVCkvYmVuY2gubyBcCiAJCSAkKE9VVFBVVCkvYmVuY2hfYnBmX3RpbWluZy5vIFwKIAkJICQoT1VUUFVUKS9iZW5jaF9icGZfbm9wLm8gXAogCQkgJChPVVRQVVQpL2JlbmNoX3hkcF9sYi5vIFwKJiM0MzsJCSAkKE9VVFBVVCkvYmVuY2hfbGliYXJlbmEubyBcCiAJCSAkKE9VVFBVVCkvdXNkdF8xLm8gXAogCQkgJChPVVRQVVQpL3VzZHRfMi5vIFwKIAkJICMKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmMKaW5kZXggYjg2YjczNDU2ZDNjYS4uZGU2NzJmNjFkNGFiZSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmMKQEAgLTI4OCw2ICYjNDM7Mjg4LDcgQEAgZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX2NyeXB0b19hcmdwOwogZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX3NvY2ttYXBfYXJncDsKIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9scG1fdHJpZV9tYXBfYXJncDsKIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF94ZHBfbGJfYXJncDsKJiM0MztleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfbGliYXJlbmFfYXJncDsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX2NoaWxkIGJlbmNoX3BhcnNlcnNbXSA9IHsKIAl7ICZhbXA7YmVuY2hfcmluZ2J1ZnNfYXJncCwgMCwgJiMzNDtSaW5nIGJ1ZmZlcnMgYmVuY2htYXJrJiMzNDssIDAgfSwKQEAgLTMwNiw2ICYjNDM7MzA3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX2NoaWxkIGJlbmNoX3BhcnNlcnNbXSA9IHsKIAl7ICZhbXA7YmVuY2hfc29ja21hcF9hcmdwLCAwLCAmIzM0O2JwZiBzb2NrbWFwIGJlbmNobWFyayYjMzQ7LCAwIH0sCiAJeyAmYW1wO2JlbmNoX2xwbV90cmllX21hcF9hcmdwLCAwLCAmIzM0O0xQTSB0cmllIG1hcCBiZW5jaG1hcmsmIzM0OywgMCB9LAogCXsgJmFtcDtiZW5jaF94ZHBfbGJfYXJncCwgMCwgJiMzNDtYRFAgbG9hZC1iYWxhbmNlciBiZW5jaG1hcmsmIzM0OywgMCB9LAomIzQzOwl7ICZhbXA7YmVuY2hfbGliYXJlbmFfYXJncCwgMCwgJiMzNDtsaWJhcmVuYSBhbGxvY2F0b3IgYmVuY2htYXJrJiMzNDssIDAgfSwKIAl7fSwKIH07CiAKQEAgLTU4NSw2ICYjNDM7NTg3LDggQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9scG1fdHJpZV9kZWxldGU7CiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2xwbV90cmllX2ZyZWU7CiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2JwZl9ub3A7CiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX3hkcF9sYjsKJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2xpYmFyZW5hX21hbGxvYzsKJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2xpYmFyZW5hX2NhbGxvYzsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBiZW5jaCAqYmVuY2hzW10gPSB7CiAJJmFtcDtiZW5jaF9jb3VudF9nbG9iYWwsCkBAIC02NjksNiAmIzQzOzY3Myw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmVuY2ggKmJlbmNoc1tdID0gewogCSZhbXA7YmVuY2hfbHBtX3RyaWVfZnJlZSwKIAkmYW1wO2JlbmNoX2JwZl9ub3AsCiAJJmFtcDtiZW5jaF94ZHBfbGIsCiYjNDM7CSZhbXA7YmVuY2hfbGliYXJlbmFfbWFsbG9jLAomIzQzOwkmYW1wO2JlbmNoX2xpYmFyZW5hX2NhbGxvYywKIH07CiAKIHN0YXRpYyB2b2lkIGZpbmRfYmVuY2htYXJrKHZvaWQpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2xpYmFyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2xpYmFyZW5hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uMjRlNDMyMjQ0YmY1ZAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfbGliYXJlbmEuYwpAQCAtMCwwICYjNDM7MSwyMTAgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi8KJiM0MzsjaW5jbHVkZSAmbHQ7YXJncC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW1pdHMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtiZW5jaC5oJiMzNDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGliYXJlbmEvY29tbW9uLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpYmFyZW5hL2FzYW4uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGliYXJlbmEvYnVkZHkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGliYXJlbmEvdXNlcnNwYWNlLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtsaWJhcmVuYS9saWJhcmVuYV9iZW5jaC5za2VsLmgmIzM0OwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgewomIzQzOwlfX3U2NCBhbGxvY19zaXplOwomIzQzOwlfX3U2NCBuYWxsb2NzOwomIzQzO30gYXJncyA9IHsKJiM0MzsJLmFsbG9jX3NpemUgPSA2NCwKJiM0MzsJLm5hbGxvY3MgPSAxMDAwMCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgewomIzQzOwlzdHJ1Y3QgbGliYXJlbmFfYmVuY2ggKnNrZWw7CiYjNDM7CWludCBiZW5jaF9mZDsKJiM0MzsJaW50IHJlc2V0X2ZkOwomIzQzO30gY3R4OwomIzQzOwomIzQzO2VudW0gewomIzQzOwlBUkdfTElCQVJFTkFfQUxMT0NfU0laRSA9IDEyMDAwLAomIzQzOwlBUkdfTElCQVJFTkFfTkFMTE9DUywKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0c1tdID0gewomIzQzOwl7ICYjMzQ7YWxsb2Nfc2l6ZSYjMzQ7LCBBUkdfTElCQVJFTkFfQUxMT0NfU0laRSwgJiMzNDtCWVRFUyYjMzQ7LCAwLAomIzQzOwkgICYjMzQ7U2l6ZSBvZiBlYWNoIGFyZW5hIGFsbG9jYXRpb24mIzM0OyB9LAomIzQzOwl7ICYjMzQ7bmFsbG9jcyYjMzQ7LCBBUkdfTElCQVJFTkFfTkFMTE9DUywgJiMzNDtJVEVSUyYjMzQ7LCAwLAomIzQzOwkgICYjMzQ7TnVtYmVyIG9mIGFsbG9jYXRpb24gcGVyIG1lYXN1cmVtZW50JiMzNDsgfSwKJiM0MzsJe30sCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgZXJyb3JfdCBwYXJzZV9hcmcoaW50IGtleSwgY2hhciAqYXJnLCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIHZhbHVlOwomIzQzOwomIzQzOwlzd2l0Y2ggKGtleSkgewomIzQzOwljYXNlIEFSR19MSUJBUkVOQV9BTExPQ19TSVpFOgomIzQzOwkJdmFsdWUgPSBzdHJ0b3VsbChhcmcsIE5VTEwsIDEwKTsKJiM0MzsJCWlmICghdmFsdWUgfHwgdmFsdWUgJmd0Oz0gVUlOVF9NQVgpIHsKJiM0MzsJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtpbnZhbGlkIGFsbG9jX3NpemU6ICVsZCYjMzQ7LCB2YWx1ZSk7CiYjNDM7CQkJYXJncF91c2FnZShzdGF0ZSk7CiYjNDM7CQl9CiYjNDM7CQlhcmdzLmFsbG9jX3NpemUgPSB2YWx1ZTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEFSR19MSUJBUkVOQV9OQUxMT0NTOgomIzQzOwkJYXJncy5uYWxsb2NzID0gc3RydG91bGwoYXJnLCBOVUxMLCAxMCk7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiBBUkdQX0VSUl9VTktOT1dOOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgYXJncCBiZW5jaF9saWJhcmVuYV9hcmdwID0gewomIzQzOwkub3B0aW9ucyA9IG9wdHMsCiYjNDM7CS5wYXJzZXIgPSBwYXJzZV9hcmcsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB2YWxpZGF0ZSh2b2lkKQomIzQzO3sKJiM0MzsJaWYgKGVudi5jb25zdW1lcl9jbnQgIT0gMCkgewomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7YmVuY2htYXJrIGRvZXNuJiMzOTt0IHN1cHBvcnQgY29uc3VtZXJzXG4mIzM0Oyk7CiYjNDM7CQlleGl0KDEpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChlbnYucHJvZHVjZXJfY250ICE9IDEpIHsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O2JlbmNobWFyayBzdXBwb3J0cyBleGFjdGx5IG9uZSBwcm9kdWNlclxuJiMzNDspOwomIzQzOwkJZXhpdCgxKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBzZXR1cF9jb21tb24odm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhcmVuYV9hbGxvY19yZXNlcnZlX2FyZ3MgcmVzZXJ2ZV9hcmdzID0gewomIzQzOwkJLm5yX3BhZ2VzID0gQVJFTkFfUkVTRVJWRV9QQUdFU19ERkwsCiYjNDM7CX07CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CXNldHVwX2xpYmJwZigpOwomIzQzOwomIzQzOwljdHguc2tlbCA9IGxpYmFyZW5hX2JlbmNoX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghY3R4LnNrZWwpIHsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O2ZhaWxlZCB0byBvcGVuIGFuZCBsb2FkIHNrZWxldG9uXG4mIzM0Oyk7CiYjNDM7CQlleGl0KDEpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWVyciA9IGxpYmFyZW5hX3J1bl9wcm9nX2FyZ3MoCiYjNDM7CQlicGZfcHJvZ3JhbV9fZmQoY3R4LnNrZWwtJmd0O3Byb2dzLmFyZW5hX2FsbG9jX3Jlc2VydmUpLAomIzQzOwkJJmFtcDtyZXNlcnZlX2FyZ3MsIHNpemVvZihyZXNlcnZlX2FyZ3MpKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7ZmFpbGVkIHRvIHJlc2VydmUgYXJlbmEgcGFnZXM6ICVkXG4mIzM0OywgZXJyKTsKJiM0MzsJCWV4aXQoMSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXJyID0gbGliYXJlbmFfcnVuX3Byb2coCiYjNDM7CQlicGZfcHJvZ3JhbV9fZmQoY3R4LnNrZWwtJmd0O3Byb2dzLmFyZW5hX2J1ZGR5X3Jlc2V0KSk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O2ZhaWxlZCB0byBpbml0aWFsaXplIGFyZW5hIGFsbG9jYXRvcjogJWRcbiYjMzQ7LCBlcnIpOwomIzQzOwkJZXhpdCgxKTsKJiM0MzsJfQomIzQzOwomIzQzOwljdHguc2tlbC0mZ3Q7YnNzLSZndDtiZW5jaF9hbGxvY19zaXplID0gYXJncy5hbGxvY19zaXplOwomIzQzOwljdHguc2tlbC0mZ3Q7YnNzLSZndDtiZW5jaF9uYWxsb2NzID0gYXJncy5uYWxsb2NzOwomIzQzOwljdHgucmVzZXRfZmQgPSBicGZfcHJvZ3JhbV9fZmQoY3R4LnNrZWwtJmd0O3Byb2dzLmFyZW5hX2J1ZGR5X3Jlc2V0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbWFsbG9jX3NldHVwKHZvaWQpCiYjNDM7ewomIzQzOwlzZXR1cF9jb21tb24oKTsKJiM0MzsJY3R4LmJlbmNoX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKGN0eC5za2VsLSZndDtwcm9ncy5iZW5jaF9tYWxsb2MpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBjYWxsb2Nfc2V0dXAodm9pZCkKJiM0Mzt7CiYjNDM7CXNldHVwX2NvbW1vbigpOwomIzQzOwljdHguYmVuY2hfZmQgPSBicGZfcHJvZ3JhbV9fZmQoY3R4LnNrZWwtJmd0O3Byb2dzLmJlbmNoX2NhbGxvYyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkICpwcm9kdWNlcih2b2lkICppbnB1dCkKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CXdoaWxlICh0cnVlKSB7CiYjNDM7CQllcnIgPSBsaWJhcmVuYV9ydW5fcHJvZyhjdHguYmVuY2hfZmQpOwomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0O2xpYmFyZW5hIGJlbmNobWFyayBmYWlsZWQ6ICVkXG4mIzM0OywgZXJyKTsKJiM0MzsJCQlleGl0KDEpOwomIzQzOwkJfQomIzQzOwomIzQzOwkJZXJyID0gbGliYXJlbmFfcnVuX3Byb2coY3R4LnJlc2V0X2ZkKTsKJiM0MzsJCWlmIChlcnIpIHsKJiM0MzsJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtsaWJhcmVuYSBhbGxvYyByZXNldCBmYWlsZWQ6ICVkXG4mIzM0OywgZXJyKTsKJiM0MzsJCQlleGl0KDEpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtZWFzdXJlKHN0cnVjdCBiZW5jaF9yZXMgKnJlcykKJiM0Mzt7CiYjNDM7CXJlcy0mZ3Q7ZHVyYXRpb25fbnMgPSBhdG9taWNfc3dhcCgmYW1wO2N0eC5za2VsLSZndDtic3MtJmd0O2JlbmNoX2R1cmF0aW9uX25zLCAwKTsKJiM0MzsJcmVzLSZndDtoaXRzID0gYXRvbWljX3N3YXAoJmFtcDtjdHguc2tlbC0mZ3Q7YnNzLSZndDtiZW5jaF9oaXRzLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcmVwb3J0X3Byb2dyZXNzKGludCBpdGVyLCBzdHJ1Y3QgYmVuY2hfcmVzICpyZXMsIGxvbmcgZGVsdGFfbnMpCiYjNDM7ewomIzQzOwlkb3VibGUgbGF0ZW5jeV9ucyA9IDAuMDsKJiM0MzsKJiM0MzsJaWYgKHJlcy0mZ3Q7aGl0cykKJiM0MzsJCWxhdGVuY3lfbnMgPSByZXMtJmd0O2R1cmF0aW9uX25zIC8gKGRvdWJsZSlyZXMtJmd0O2hpdHM7CiYjNDM7CiYjNDM7CXByaW50ZigmIzM0O0l0ZXIgJTNkICglNy4zbGZ1cyk6IGxhdGVuY3kgJTguM2xmIG5zL29wICglbGQgYWxsb2NhdGlvbnMpXG4mIzM0OywKJiM0MzsJICAgICAgIGl0ZXIsIChkZWx0YV9ucyAtIDEwMDAwMDAwMDApIC8gMTAwMC4wLCBsYXRlbmN5X25zLCByZXMtJmd0O2hpdHMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCByZXBvcnRfZmluYWwoc3RydWN0IGJlbmNoX3JlcyByZXNbXSwgaW50IHJlc19jbnQpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGR1cmF0aW9uX25zID0gMDsKJiM0MzsJbG9uZyBoaXRzID0gMDsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyByZXNfY250OyBpJiM0MzsmIzQzOykgewomIzQzOwkJZHVyYXRpb25fbnMgJiM0Mzs9IHJlc1tpXS5kdXJhdGlvbl9uczsKJiM0MzsJCWhpdHMgJiM0Mzs9IHJlc1tpXS5oaXRzOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghaGl0cyB8fCAhcmVzX2NudCkgewomIzQzOwkJcHJpbnRmKCYjMzQ7U3VtbWFyeTogbm8gcnVucyBtZWFzdXJlZFxuJiMzNDspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXByaW50ZigmIzM0O1N1bW1hcnk6ICUuM2xmIG5zL29wLCAlLjBsZiBpbnZvY2F0aW9ucyBmb3IgJXUgYWxsb2NhdGlvbnMvaW52b2NhdGlvbilcbiYjMzQ7LAomIzQzOwkgICAgICAgZHVyYXRpb25fbnMgLyAoZG91YmxlKWhpdHMsIGhpdHMgLyAoZG91YmxlKXJlc19jbnQsCiYjNDM7CSAgICAgICBjdHguc2tlbC0mZ3Q7YnNzLSZndDtiZW5jaF9uYWxsb2NzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2xpYmFyZW5hX21hbGxvYyA9IHsKJiM0MzsJLm5hbWUgPSAmIzM0O2xpYmFyZW5hLW1hbGxvYyYjMzQ7LAomIzQzOwkuYXJncCA9ICZhbXA7YmVuY2hfbGliYXJlbmFfYXJncCwKJiM0MzsJLnZhbGlkYXRlID0gdmFsaWRhdGUsCiYjNDM7CS5zZXR1cCA9IG1hbGxvY19zZXR1cCwKJiM0MzsJLnByb2R1Y2VyX3RocmVhZCA9IHByb2R1Y2VyLAomIzQzOwkubWVhc3VyZSA9IG1lYXN1cmUsCiYjNDM7CS5yZXBvcnRfcHJvZ3Jlc3MgPSByZXBvcnRfcHJvZ3Jlc3MsCiYjNDM7CS5yZXBvcnRfZmluYWwgPSByZXBvcnRfZmluYWwsCiYjNDM7fTsKJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfbGliYXJlbmFfY2FsbG9jID0gewomIzQzOwkubmFtZSA9ICYjMzQ7bGliYXJlbmEtY2FsbG9jJiMzNDssCiYjNDM7CS5hcmdwID0gJmFtcDtiZW5jaF9saWJhcmVuYV9hcmdwLAomIzQzOwkudmFsaWRhdGUgPSB2YWxpZGF0ZSwKJiM0MzsJLnNldHVwID0gY2FsbG9jX3NldHVwLAomIzQzOwkucHJvZHVjZXJfdGhyZWFkID0gcHJvZHVjZXIsCiYjNDM7CS5tZWFzdXJlID0gbWVhc3VyZSwKJiM0MzsJLnJlcG9ydF9wcm9ncmVzcyA9IHJlcG9ydF9wcm9ncmVzcywKJiM0MzsJLnJlcG9ydF9maW5hbCA9IHJlcG9ydF9maW5hbCwKJiM0Mzt9OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9ydW5fYmVuY2hfbGliYXJlbmEuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL3J1bl9iZW5jaF9saWJhcmVuYS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwLi4xMGFmZTRkNTJlYmY3Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9ydW5fYmVuY2hfbGliYXJlbmEuc2gKQEAgLTAsMCAmIzQzOzEsMzEgQEAKJiM0MzsjIS9iaW4vYmFzaAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsKJiM0Mztzb3VyY2UgLi9iZW5jaHMvcnVuX2NvbW1vbi5zaAomIzQzOwomIzQzO3NldCAtZXVmbyBwaXBlZmFpbAomIzQzOwomIzQzO1JVTl9CRU5DSD0mIzM0Oy4vYmVuY2ggLWQzIC1xJiMzNDsKJiM0MzsKJiM0MztzdW1tYXJpemVfbGliYXJlbmEoKQomIzQzO3sKJiM0MzsJbG9jYWwgYmVuY2g9JiMzNDskMSYjMzQ7CiYjNDM7CWxvY2FsIHN1bW1hcnkKJiM0MzsKJiM0MzsJc3VtbWFyeT0kKHByaW50ZiAmIzM5OyVzXG4mIzM5OyAmIzM0OyQyJiMzNDsgfCB0YWlsIC1uMSkKJiM0MzsJc3VtbWFyeT0ke3N1bW1hcnkjU3VtbWFyeTogfQomIzQzOwlwcmludGYgJiMzNDslLTIwcyAlc1xuJiMzNDsgJiMzNDskYmVuY2gmIzM0OyAmIzM0OyRzdW1tYXJ5JiMzNDsKJiM0Mzt9CiYjNDM7CiYjNDM7aGVhZGVyICYjMzQ7bGliYXJlbmEgc2VxdWVudGlhbCBtYWxsb2NcbiYjMzQ7CiYjNDM7CiYjNDM7Zm9yIHNpemUgaW4gMTYgNjQgMjU2IDEwMjQgNDA5NjsgZG8KJiM0MztzdWJ0aXRsZSAmIzM0O2FsbG9jYXRpb24gc2l6ZTogJHNpemUmIzM0OwomIzQzO3ByaW50ZiAmIzM0O1x0LS0tLS0tLS0tLS0tLS0tLS0tLVxuJiMzNDsKJiM0MzsJZm9yIG5hbGxvY3MgaW4gMTAgNTAgMTAwIDUwMCAxMDAwIDUwMDAgMTAwMDA7IGRvCiYjNDM7CQlzdW1tYXJpemVfbGliYXJlbmEgJiMzNDttYWxsb2M6JiMzNDsgXAomIzQzOwkJCSYjMzQ7JCgkUlVOX0JFTkNIIC0tYWxsb2Nfc2l6ZSAmIzM0OyRzaXplJiMzNDsgLS1uYWxsb2NzICYjMzQ7JG5hbGxvY3MmIzM0OyBsaWJhcmVuYS1tYWxsb2MpJiMzNDsKJiM0MzsJCXN1bW1hcml6ZV9saWJhcmVuYSAmIzM0O2NhbGxvYzomIzM0OyBcCiYjNDM7CQkJJiMzNDskKCRSVU5fQkVOQ0ggLS1hbGxvY19zaXplICYjMzQ7JHNpemUmIzM0OyAtLW5hbGxvY3MgJiMzNDskbmFsbG9jcyYjMzQ7IGxpYmFyZW5hLWNhbGxvYykmIzM0OwomIzQzOwlkb25lCiYjNDM7ZG9uZQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL01ha2VmaWxlCmluZGV4IDVlMmFiNTE0ODA1ZTQuLjkxMTY0ZDQzYmQ2MTIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvTWFrZWZpbGUKQEAgLTI3LDEwICYjNDM7MjcsMTcgQEAgQlBGRElSPSQoYWJzcGF0aCAkKExJQkFSRU5BKS8uLikKIElOQ0xVREVfRElSID89ICQoQlBGRElSKS90b29scy9pbmNsdWRlCiBMSUJCUEZfSU5DTFVERSA/PSAkKElOQ0xVREVfRElSKQogCi0jIFNjYW4gc3JjLyBhbmQgc2VsZnRlc3RzLyB0byBnZW5lcmF0ZSB0aGUgZmluYWwgYmluYXJpZXMKLUxJQkFSRU5BX1NPVVJDRVMgPSAkKHdpbGRjYXJkICQoTElCQVJFTkEpL3NyYy8qLmJwZi5jKSAkKHdpbGRjYXJkICQoTElCQVJFTkEpL3NlbGZ0ZXN0cy8qLmJwZi5jKQotTElCQVJFTkFfT0JKRUNUUyA9ICQobm90ZGlyICQoTElCQVJFTkFfU09VUkNFUzouYnBmLmM9LmJwZi5vKSkKLUxJQkFSRU5BX09CSkVDVFNfQVNBTiA9ICQobm90ZGlyICQoTElCQVJFTkFfU09VUkNFUzouYnBmLmM9X2FzYW4uYnBmLm8pKQomIzQzOyMgQnVpbGQgc2VsZnRlc3RzIGFuZCBiZW5jaG1hcmtzIGludG8gc2VwYXJhdGUgQlBGIG9iamVjdHMgYW5kIHNrZWxldG9ucy4KJiM0MztMSUJBUkVOQV9DT1JFX1NPVVJDRVMgPSAkKHdpbGRjYXJkICQoTElCQVJFTkEpL3NyYy8qLmJwZi5jKQomIzQzO0xJQkFSRU5BX1RFU1RfU09VUkNFUyA9ICQod2lsZGNhcmQgJChMSUJBUkVOQSkvc2VsZnRlc3RzLyouYnBmLmMpCiYjNDM7TElCQVJFTkFfQkVOQ0hfU09VUkNFUyA9ICQod2lsZGNhcmQgJChMSUJBUkVOQSkvYmVuY2hzLyouYnBmLmMpCiYjNDM7CiYjNDM7TElCQVJFTkFfT0JKRUNUUyA9ICQobm90ZGlyICQoTElCQVJFTkFfQ09SRV9TT1VSQ0VTOi5icGYuYz0uYnBmLm8pIFwKJiM0MzsJCQkgICAgICAgJChMSUJBUkVOQV9URVNUX1NPVVJDRVM6LmJwZi5jPS5icGYubykpCiYjNDM7TElCQVJFTkFfT0JKRUNUU19BU0FOID0gJChub3RkaXIgJChMSUJBUkVOQV9DT1JFX1NPVVJDRVM6LmJwZi5jPV9hc2FuLmJwZi5vKSBcCiYjNDM7CQkJCSAgICAkKExJQkFSRU5BX1RFU1RfU09VUkNFUzouYnBmLmM9X2FzYW4uYnBmLm8pKQomIzQzO0xJQkFSRU5BX0JFTkNIX09CSkVDVFMgPSAkKG5vdGRpciAkKExJQkFSRU5BX0NPUkVfU09VUkNFUzouYnBmLmM9LmJwZi5vKSBcCiYjNDM7CQkJCSAgICAgJChMSUJBUkVOQV9CRU5DSF9TT1VSQ0VTOi5icGYuYz0uYnBmLm8pKQogCiBJTkNMVURFUyA9IC1JJChMSUJBUkVOQSkvaW5jbHVkZSAtSSQoQlBGRElSKQogaWZuZXEgKCQoSU5DTFVERV9ESVIpLCkKQEAgLTUzLDE3ICYjNDM7NjAsMjUgQEAgb3ZlcnJpZGUgQlBGX0NGTEFHUyAmIzQzOz0gLU8yIC1nCiBvdmVycmlkZSBCUEZfQ0ZMQUdTICYjNDM7PSAtV25vLWluY29tcGF0aWJsZS1wb2ludGVyLXR5cGVzLWRpc2NhcmRzLXF1YWxpZmllcnMKICMgUmVxdWlyZWQgZm9yIHN1cHByZXNzaW5nIGhhcm1sZXNzIHZtbGludXguaC1yZWxhdGVkIHdhcm5pbmdzLgogb3ZlcnJpZGUgQlBGX0NGTEFHUyAmIzQzOz0gLVduby1taXNzaW5nLWRlY2xhcmF0aW9ucwomIzQzO292ZXJyaWRlIEJQRl9DRkxBR1MgJiM0Mzs9IC1mbm8tc3RyaWN0LWFsaWFzaW5nCiBvdmVycmlkZSBCUEZfQ0ZMQUdTICYjNDM7PSAkKElOQ0xVREVTKQogCiBDRkxBR1MgPSAtTzIgLW5vLXBpZQogQ0ZMQUdTICYjNDM7PSAkKElOQ0xVREVTKQogCi12cGF0aCAlLmJwZi5jICQoTElCQVJFTkEpL3NyYyAkKExJQkFSRU5BKS9zZWxmdGVzdHMKLXZwYXRoICUuYyAkKExJQkFSRU5BKS9zcmMgJChMSUJBUkVOQSkvc2VsZnRlc3RzCiYjNDM7dnBhdGggJS5icGYuYyAkKExJQkFSRU5BKS9zcmMgJChMSUJBUkVOQSkvc2VsZnRlc3RzICQoTElCQVJFTkEpL2JlbmNocwomIzQzO3ZwYXRoICUuYyAkKExJQkFSRU5BKS9zcmMgJChMSUJBUkVOQSkvc2VsZnRlc3RzICQoTElCQVJFTkEpL2JlbmNocwogCiBza2VsZXRvbnM6IGxpYmFyZW5hLnNrZWwuaCBsaWJhcmVuYV9hc2FuLnNrZWwuaAogLlBIT05ZOiBza2VsZXRvbnMKIAomIzQzO2JlbmNobWFya3M6IGxpYmFyZW5hX2JlbmNoLnNrZWwuaAomIzQzOy5QSE9OWTogYmVuY2htYXJrcwomIzQzOwomIzQzO2xpYmFyZW5hX2JlbmNoLnNrZWwuaDogbGliYXJlbmFfYmVuY2guYnBmLm8KJiM0MzsJJChjYWxsIG1zZyxHRU4tU0tFTCxsaWJhcmVuYSwkQCkKJiM0MzsJJChRKSQoQlBGVE9PTCkgZ2VuIHNrZWxldG9uICQmbHQ7IG5hbWUgJiMzNDtsaWJhcmVuYV9iZW5jaCYjMzQ7ICZndDsgJEAKJiM0MzsKIGxpYmFyZW5hX2FzYW4uc2tlbC5oOiBsaWJhcmVuYV9hc2FuLmJwZi5vCiAJJChjYWxsIG1zZyxHRU4tU0tFTCxsaWJhcmVuYSwkQCkKIAkkKFEpJChCUEZUT09MKSBnZW4gc2tlbGV0b24gJCZsdDsgbmFtZSAmIzM0O2xpYmFyZW5hX2FzYW4mIzM0OyAmZ3Q7ICRACkBAIC04MCw2ICYjNDM7OTUsMTAgQEAgbGliYXJlbmEuYnBmLm86ICQoTElCQVJFTkFfT0JKRUNUUykKIAkkKGNhbGwgbXNnLEdFTi1PQkosbGliYXJlbmEsJEApCiAJJChRKSQoQlBGVE9PTCkgZ2VuIG9iamVjdCAkQCAkXgogCiYjNDM7bGliYXJlbmFfYmVuY2guYnBmLm86ICQoTElCQVJFTkFfQkVOQ0hfT0JKRUNUUykKJiM0MzsJJChjYWxsIG1zZyxHRU4tT0JKLGxpYmFyZW5hLCRAKQomIzQzOwkkKFEpJChCUEZUT09MKSBnZW4gb2JqZWN0ICRAICReCiYjNDM7CiAlX2FzYW4uYnBmLm86ICUuYnBmLmMKIAkkKGNhbGwgbXNnLENMTkctQlBGLGxpYmFyZW5hLCRAKQogCSQoUSkkKENMQU5HKSAkKEJQRl9DRkxBR1MpICQoQVNBTl9GTEFHUykgLURCUEZfQVJFTkFfQVNBTiAkKEJQRl9UQVJHRVRfRU5ESUFOKSAtYyAkJmx0OyAtbyAkQApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2JlbmNocy9iZW5jaF9tYWxsb2MuYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvYmVuY2hzL2JlbmNoX21hbGxvYy5icGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5lMDYzOTdkYzlhNDBkCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2JlbmNocy9iZW5jaF9tYWxsb2MuYnBmLmMKQEAgLTAsMCAmIzQzOzEsNTEgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTEdQTC0yLjEgT1IgQlNELTItQ2xhdXNlCiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqLwomIzQzOyNpbmNsdWRlICZsdDtsaWJhcmVuYS9jb21tb24uaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGliYXJlbmEvYXNhbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaWJhcmVuYS9idWRkeS5oJmd0OwomIzQzOwomIzQzO3UzMiBiZW5jaF9hbGxvY19zaXplOwomIzQzO3UzMiBiZW5jaF9uYWxsb2NzOwomIzQzO2xvbmcgYmVuY2hfaGl0czsKJiM0Mztsb25nIGJlbmNoX2R1cmF0aW9uX25zOwomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztpbnQgYmVuY2hfbWFsbG9jKHZvaWQpCiYjNDM7ewomIzQzOwl2b2lkIF9fYXJlbmEgKm1lbTsKJiM0MzsJdTY0IHN0YXJ0X25zOwomIzQzOwl1MzIgaTsKJiM0MzsKJiM0MzsJc3RhcnRfbnMgPSBicGZfa3RpbWVfZ2V0X25zKCk7CiYjNDM7CWZvciAoaSA9IHplcm87IGkgJmx0OyBiZW5jaF9uYWxsb2NzICZhbXA7JmFtcDsgY2FuX2xvb3A7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQltZW0gPSBhcmVuYV9tYWxsb2MoYmVuY2hfYWxsb2Nfc2l6ZSk7CiYjNDM7CQlpZiAoIW1lbSkKJiM0MzsJCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOwlfX3N5bmNfYWRkX2FuZF9mZXRjaCgmYW1wO2JlbmNoX2R1cmF0aW9uX25zLAomIzQzOwkJCSAgICAgYnBmX2t0aW1lX2dldF9ucygpIC0gc3RhcnRfbnMpOwomIzQzOwlfX3N5bmNfYWRkX2FuZF9mZXRjaCgmYW1wO2JlbmNoX2hpdHMsIGkpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO2ludCBiZW5jaF9jYWxsb2Modm9pZCkKJiM0Mzt7CiYjNDM7CXZvaWQgX19hcmVuYSAqbWVtOwomIzQzOwl1NjQgc3RhcnRfbnM7CiYjNDM7CXUzMiBpOwomIzQzOwomIzQzOwlzdGFydF9ucyA9IGJwZl9rdGltZV9nZXRfbnMoKTsKJiM0MzsJZm9yIChpID0gemVybzsgaSAmbHQ7IGJlbmNoX25hbGxvY3MgJmFtcDsmYW1wOyBjYW5fbG9vcDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCW1lbSA9IGFyZW5hX2NhbGxvYygxLCBiZW5jaF9hbGxvY19zaXplKTsKJiM0MzsJCWlmICghbWVtKQomIzQzOwkJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CV9fc3luY19hZGRfYW5kX2ZldGNoKCZhbXA7YmVuY2hfZHVyYXRpb25fbnMsCiYjNDM7CQkJICAgICBicGZfa3RpbWVfZ2V0X25zKCkgLSBzdGFydF9ucyk7CiYjNDM7CV9fc3luY19hZGRfYW5kX2ZldGNoKCZhbXA7YmVuY2hfaGl0cywgaSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9zcGluX2xvY2suaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9zcGluX2xvY2suaAppbmRleCBhZTZiNzJkMTViYjY3Li44NzJmYTIwZjI5YTU5IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXJlbmFfc3Bpbl9sb2NrLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX3NwaW5fbG9jay5oCkBAIC0xLDQgJiM0MzsxLDQgQEAKLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgQlNELTItQ2xhdXNlCiAvKiBDb3B5cmlnaHQgKGMpIDIwMjUgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovCiAjaWZuZGVmIEJQRl9BUkVOQV9TUElOX0xPQ0tfSAogI2RlZmluZSBCUEZfQVJFTkFfU1BJTl9MT0NLX0gKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hdG9taWMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hdG9taWMuaAppbmRleCA0M2MzMDZlMTdmMTk4Li42NTU4MmIyMDEwYWQ0IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXRvbWljLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2F0b21pYy5oCkBAIC0xLDQgJiM0MzsxLDQgQEAKLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgQlNELTItQ2xhdXNlCiAvKiBDb3B5cmlnaHQgKGMpIDIwMjUgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovCiAjaWZuZGVmIEJQRl9BVE9NSUNfSAogI2RlZmluZSBCUEZfQVRPTUlDX0gKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9tYXlfZ290by5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX21heV9nb3RvLmgKaW5kZXggOWJhOTA2ODlkNmJhMi4uYjMyYTQyMGQ0ZTFhZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX21heV9nb3RvLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX21heV9nb3RvLmgKQEAgLTEsMyAmIzQzOzEsNCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBMR1BMLTIuMSBPUiBCU0QtMi1DbGF1c2UKICNwcmFnbWEgb25jZQogCiAvKgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvYml0bWFwLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9iaXRtYXAuaAppbmRleCBlMjQzMWVhNmZkZDY4Li4xNjNlMmI4M2Q5NDMxIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9iaXRtYXAuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9iaXRtYXAuaApAQCAtMSw1ICYjNDM7MSw4IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IExHUEwtMi4xIE9SIEJTRC0yLUNsYXVzZQogI3ByYWdtYSBvbmNlCiAKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmX2F0b21pYy5oJmd0OwomIzQzOwogI2RlZmluZSBCSVRTX1BFUl9CWVRFCQk4CiAjZGVmaW5lIEJZVEVTX1RPX0JJVFMobmIpCSgobmIpICogQklUU19QRVJfQllURSkKIApAQCAtMTUsMTEgJiM0MzsxOCw4IEBAIHN0cnVjdCBhcmVuYV9iaXRtYXAgewogc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICpibXBfYWxsb2Moc2l6ZV90IGJpdHMpOwogdm9pZCBibXBfZnJlZShzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcCk7CiAKLXZvaWQgX19ibXBfc2V0X2JpdCh1MzIgYml0LCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcCk7Ci12b2lkIF9fYm1wX2NsZWFyX2JpdCh1MzIgYml0LCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcCk7CiB2b2lkIGJtcF9zZXRfYml0KHUzMiBiaXQsIHN0cnVjdCBhcmVuYV9iaXRtYXAgX19hcmVuYSAqYm1wKTsKIHZvaWQgYm1wX2NsZWFyX2JpdCh1MzIgYml0LCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcCk7Ci1ib29sIGJtcF90ZXN0X2JpdCh1MzIgYml0LCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcCk7CiBib29sIGJtcF90ZXN0X2FuZF9jbGVhcl9iaXQodTMyIGJpdCwgc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICpibXApOwogYm9vbCBibXBfdGVzdF9hbmRfc2V0X2JpdCh1MzIgYml0LCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcCk7CiAKQEAgLTMyLDMgJiM0MzszMiwyNyBAQCB2b2lkIGJtcF9jb3B5KHNpemVfdCBiaXRzLCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmRzdCwgc3RydWN0IGFyZW5hX2JpdG1hcAogYm9vbCBibXBfaW50ZXJzZWN0cyhzaXplX3QgYml0cywgc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICphcmcxLCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmFyZzIpOwogYm9vbCBibXBfc3Vic2V0KHNpemVfdCBiaXRzLCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJpZywgc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICpzbWFsbCk7CiB2b2lkIGJtcF9wcmludChzaXplX3QgYml0cywgc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICpibXApOwomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUKJiM0Mzt2b2lkIF9fYm1wX3NldF9iaXQodTMyIGJpdCwgc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICpibXApCiYjNDM7ewomIzQzOwl2b2xhdGlsZSB1NjQgX19hcmVuYSAqd29yZCA9ICZhbXA7Ym1wLSZndDtiaXRzW0JJVF9XT1JEKGJpdCldOwomIzQzOwomIzQzOwkqd29yZCB8PSBCSVRfTUFTSyhiaXQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lCiYjNDM7dm9pZCBfX2JtcF9jbGVhcl9iaXQodTMyIGJpdCwgc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICpibXApCiYjNDM7ewomIzQzOwl2b2xhdGlsZSB1NjQgX19hcmVuYSAqd29yZCA9ICZhbXA7Ym1wLSZndDtiaXRzW0JJVF9XT1JEKGJpdCldOwomIzQzOwomIzQzOwkqd29yZCAmYW1wOz0gfkJJVF9NQVNLKGJpdCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUKJiM0Mztib29sIGJtcF90ZXN0X2JpdCh1MzIgYml0LCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcCkKJiM0Mzt7CiYjNDM7CXU2NCB3b3JkID0gUkVBRF9PTkNFKGJtcC0mZ3Q7Yml0c1tCSVRfV09SRChiaXQpXSk7CiYjNDM7CiYjNDM7CXJldHVybiB3b3JkICZhbXA7IEJJVF9NQVNLKGJpdCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvY29tbW9uLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9jb21tb24uaAppbmRleCA5MzFhY2U5YTQ5ZTJiLi5hNjIyMDM1NWE2OTc1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9jb21tb24uaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9jb21tb24uaApAQCAtNDksNiAmIzQzOzQ5LDcgQEAgZXh0ZXJuIHZvbGF0aWxlIHU2NCBhc2FuX3Zpb2xhdGVkOwogaW50IGFyZW5hX2ZscyhfX3U2NCB3b3JkKTsKIAogdm9pZCBfX2FyZW5hICphcmVuYV9tYWxsb2Moc2l6ZV90IHNpemUpOwomIzQzO3ZvaWQgX19hcmVuYSAqYXJlbmFfY2FsbG9jKHNpemVfdCBuY291bnQsIHNpemVfdCBzaXplKTsKIHZvaWQgYXJlbmFfZnJlZSh2b2lkIF9fYXJlbmEgKnB0cik7CiAKIC8qCkBAIC02MSw2ICYjNDM7NjIsNzYgQEAgdm9pZCBhcmVuYV9mcmVlKHZvaWQgX19hcmVuYSAqcHRyKTsKICAqLwogI2RlZmluZSBhcmVuYV9zdWJwcm9nX2luaXQoKSBkbyB7IGFzbSB2b2xhdGlsZSAoJiMzNDsmIzM0OyA6OiAmIzM0O3ImIzM0OygmYW1wO2FyZW5hKSk7IH0gd2hpbGUgKDApCiAKJiM0MzsvKgomIzQzOyAqIEJQRiBkb2VzIG5vdCBjdXJyZW50bHkgc3VwcG9ydCB0aGUgbWVtc2V0IGludHJpbnNpY3MuIGZvciBsYXJnZQomIzQzOyAqIHNlcXVlbnRpYWwgY29waWVzLCBvciBhc3NpZ25tZW50cyBvZiBsYXJnZSBkYXRhIHN0cnVjdHVyZXMsCiYjNDM7ICogdGhlIGZyb250ZW5kIHdpbGwgZ2VuZXJhdGUgYW4gaW50cmluc2ljIHRoYXQgY2F1c2VzIHRoZSBCUEYKJiM0MzsgKiBiYWNrZW5kIHRvIGV4aXQgZHVlIHRvIGEgbWlzc2luZyBpbXBsZW1lbnRhdGlvbi4gUHJvdmlkZQomIzQzOyAqIGltcGxlbWVudGF0aW9ucyBmb3IgdGhlIGludHJpbnNpYy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGludCBhcmVuYV9tZW1zZXQoczggX19hcmVuYSAqZHN0LCBzOCB2YWwsIHNpemVfdCBzaXplKQomIzQzO3sKJiM0MzsJc2l6ZV90IGhlYWRhbGlnbjsKJiM0MzsJc2l6ZV90IHRhaWxhbGlnbjsKJiM0MzsJdTggdXZhbCA9ICh1OCl2YWw7CiYjNDM7CXNpemVfdCB2YWw2NDsKJiM0MzsJc2l6ZV90IGk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIENhbGN1bGF0ZSBob3cgbWFueSBieXRlcyB0byB0aGUgbmV4dCB3b3JkLWFsaWduZWQgb25lLgomIzQzOwkgKiBXZSBnZXQgdGhpcyBieSB0cnVuY2F0aW5nIHRoZSAycyBjb21wbGVtZW50IG9mIHRoZQomIzQzOwkgKiBwb2ludGVyIHRvIHRoZSBsYXN0IDMgYml0cy4gSW50dWl0aXZlbHksIHNpbmNlCiYjNDM7CSAqCiYjNDM7CSAqIFRoZSBOIExTQnMgb2YgZHN0IGFuZCAtZHN0IGFkZCB0byAxICZsdDsmbHQ7IE4sIHdoaWNoCiYjNDM7CSAqIGlzIHdoeSBkc3QgJiM0MzsgKC1kc3QpID0gMHgwVUxMIHRocm91Z2ggb3ZlcmZsb3cuIFNvIHRoZQomIzQzOwkgKiBsYXN0IE4gPSAzIGJpdHMgb2YgdGhlIG5lZ2F0aXZlIGFyZSB0aGUgbnVtYmVyIG9mCiYjNDM7CSAqIGJ5dGVzIHRvIGFsaWduIGRzdCBvbiB0aGUgbGFzdCAzIGJpdHMuCiYjNDM7CSAqCiYjNDM7CSAqLwomIzQzOwloZWFkYWxpZ24gPSAtKHU2NClkc3QgJmFtcDsgKHNpemVvZih1NjQpIC0gMSk7CiYjNDM7CWlmICghaGVhZGFsaWduIHx8IHNpemUgJmx0OyBoZWFkYWxpZ24pCiYjNDM7CQlnb3RvIHB0cmFsaWduZWQ7CiYjNDM7CiYjNDM7CWZvciAoaSA9IHplcm87IGkgJmx0OyBoZWFkYWxpZ24gJmFtcDsmYW1wOyBjYW5fbG9vcDsgaSYjNDM7JiM0MzspCiYjNDM7CQlkc3RbaV0gPSB1dmFsOwomIzQzOwomIzQzOwlkc3QgJiM0Mzs9IGhlYWRhbGlnbjsKJiM0MzsJc2l6ZSAtPSBoZWFkYWxpZ247CiYjNDM7CiYjNDM7cHRyYWxpZ25lZDoKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogTWFrZSBhIHdvcmQgd2l0aCBhbGwgYnl0ZXMgZXF1YWwgdG8gdGhlIGJ5dGUgd2UgYXJlIHNldHRpbmcuCiYjNDM7CSAqIFNpbmNlIDEgYnl0ZSAtJmd0OyAyIGhleCBkaWdpdHMuCiYjNDM7CSAqCiYjNDM7CSAqIFNoaWZ0aW5nIHRoZSB2YWx1ZSBieSBhIDAgYnl0ZXMgaXMgZXF1YWwgdG8gbXVsdGlwbGljYXRpb24gYnkgMHgwMQomIzQzOwkgKiBTaGlmdGluZyBieSAxIGJ5dGVzIGlzIGVxdWFsIHRvIG11bHRpcGxpY2F0aW9uIGJ5IDB4MDEgJmx0OyZsdDsgOCwKJiM0MzsJICogLi4uCiYjNDM7CSAqIFNoaWZ0aW5nIGJ5IDcgYnl0ZXMgaXMgZXF1YWwgdG8gbXVsdGlwbGljYXRpb24gYnkgMHgwMSAmbHQ7Jmx0OyA1Ni4KJiM0MzsJICoKJiM0MzsJICogRW5kIG9wZXJhdGlvbiB0byByZXBsaWNhdGUgdGhlIGJ5dGUgaW50byBhbGwgdGhlIGJ5dGVzIG9mIGEgd29yZAomIzQzOwkgKiBpcyAoc2luY2UgYSB8IGIgPSBhICYjNDM7IGIgd2hlbiBhICZhbXA7IGIgPT0gMCk6CiYjNDM7CSAqCiYjNDM7CSAqIHZhbCAmIzQzOyB2YWwgKiAoMVVMICZsdDsmbHQ7IDgpICYjNDM7IHZhbCAqICgxVUwgJmx0OyZsdDsgMTYpICYjNDM7IC4uICYjNDM7IHZhbCAqICgxVUwgJmx0OyZsdDsgNTYpCiYjNDM7CSAqID0gdmFsICogKDFVTCAmbHQ7Jmx0OyA1NiAmIzQzOyAxVUwgJmx0OyZsdDsgNDggJiM0MzsgLi4uICYjNDM7IDFVTCAmbHQ7Jmx0OyAwKQomIzQzOwkgKiA9IHZhbCAqICgweDAxVUwgJmx0OyZsdDsgNTYgfCAweDAxVUwgJmx0OyZsdDsgNDggJiM0MzsgLi4uICYjNDM7IDFVTCAmbHQ7Jmx0OyAwKQomIzQzOwkgKiA9IHZhbCAqIDB4MDEwMSAwMTAxIDAxMDEgMDEwMQomIzQzOwkgKi8KJiM0MzsJdmFsNjQgPSAodTgpdmFsICogMHgwMTAxMDEwMTAxMDEwMTAxVUxMOwomIzQzOwomIzQzOwkvKiBQb2ludGVyIGlzIG5vdyBhbGlnbmVkLCB1c2Ugd29yZC1hbGlnbmVkIGFzc2lnbm1lbnRzLiAqLwomIzQzOwlmb3IgKGkgPSB6ZXJvOyBpICZsdDsgc2l6ZSAvIHNpemVvZih1NjQpICZhbXA7JmFtcDsgY2FuX2xvb3A7IGkmIzQzOyYjNDM7KQomIzQzOwkJKCh1NjQgX19hcmVuYSAqKWRzdClbaV0gPSB2YWw2NDsKJiM0MzsKJiM0MzsJLyogR28gYmFjayB0byBieXRlLWFsaWduZWQgZm9yIHRoZSB0YWlsLiAqLwomIzQzOwl0YWlsYWxpZ24gPSBzaXplICUgc2l6ZW9mKHU2NCk7CiYjNDM7CWRzdCAmIzQzOz0gc2l6ZSAtIHRhaWxhbGlnbjsKJiM0MzsJZm9yIChpID0gemVybzsgaSAmbHQ7IHRhaWxhbGlnbiAmYW1wOyZhbXA7IGNhbl9sb29wOyBpJiM0MzsmIzQzOykKJiM0MzsJCWRzdFtpXSA9IHV2YWw7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKICNlbHNlIC8qICEgX19CUEZfXyAqLwogCiAjaW5jbHVkZSAmbHQ7c3RkaW50LmgmZ3Q7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYml0bWFwLmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2JpdG1hcC5icGYuYwppbmRleCA3NjMxOWE1MjlmMDJiLi5lNjZiM2EyNmNhM2Q2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYml0bWFwLmJwZi5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9iaXRtYXAuYnBmLmMKQEAgLTEsMyAmIzQzOzEsNiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBMR1BMLTIuMSBPUiBCU0QtMi1DbGF1c2UKJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovCiYjNDM7CiAjaW5jbHVkZSAmbHQ7bGliYXJlbmEvY29tbW9uLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDtsaWJhcmVuYS9hc2FuLmgmZ3Q7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmMKaW5kZXggNTEzNWQ1YzcyYTQ2ZC4uZGU2NTZiNjlkMTNhZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYXNhbi5icGYuYwpAQCAtMTAzLDIzICYjNDM7MTAzLDYgQEAgdm9sYXRpbGUgYm9vbCBhc2FuX2luaXRlZCA9IGZhbHNlOwogICovCiB2b2xhdGlsZSBib29sIGFzYW5fcmVwb3J0X29uY2UgPSBmYWxzZTsKIAotLyoKLSAqIEJQRiBkb2VzIG5vdCBjdXJyZW50bHkgc3VwcG9ydCB0aGUgbWVtc2V0L21lbWNweS9tZW1jbXAgaW50cmluc2ljcy4KLSAqIEZvciBsYXJnZSBzZXF1ZW50aWFsIGNvcGllcywgb3IgYXNzaWdubWVudHMgb2YgbGFyZ2UgZGF0YSBzdHJ1Y3R1cmVzLAotICogdGhlIGZyb250ZW5kIHdpbGwgZ2VuZXJhdGUgYW4gaW50cmluc2ljIHRoYXQgY2F1c2VzIHRoZSBCUEYgYmFja2VuZAotICogdG8gZXhpdCBkdWUgdG8gYSBtaXNzaW5nIGltcGxlbWVudGF0aW9uLiBQcm92aWRlIGEgc2ltcGxlIGltcGxlbWVudGF0aW9uCi0gKiBqdXN0IGZvciBtZW1zZXQgdG8gdXNlIGl0IGZvciBwb2lzb25pbmcvdW5wb2lzb25pbmcgdGhlIG1hcC4KLSAqLwotX193ZWFrIGludCBhc2FuX21lbXNldChzOCBfX2FyZW5hICpkc3QsIHM4IHZhbCwgc2l6ZV90IHNpemUpCi17Ci0Jc2l6ZV90IGk7Ci0KLQlmb3IgKGkgPSB6ZXJvOyBpICZsdDsgc2l6ZSAmYW1wOyZhbXA7IGNhbl9sb29wOyBpJiM0MzsmIzQzOykKLQkJZHN0W2ldID0gdmFsOwotCi0JcmV0dXJuIDA7Ci19Ci0KIC8qIFZhbGlkYXRlIGEgMS1ieXRlIGFjY2VzcywgYWx3YXlzIHdpdGhpbiBhIHNpbmdsZSBieXRlLiAqLwogc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIG1lbW9yeV9pc19wb2lzb25lZF8xKHM4IF9fYXJlbmEgKmFkZHIpCiB7CkBAIC00MjIsNyAmIzQzOzQwNSw3IEBAIF9faGlkZGVuIF9fbm9hc2FuIGludCBhc2FuX3BvaXNvbih2b2lkIF9fYXJlbmEgKmFkZHIsIHM4IHZhbCwgc2l6ZV90IHNpemUpCiAJc2hhZG93ID0gbWVtX3RvX3NoYWRvdyhhZGRyKTsKIAlsZW4gPSBzaXplICZndDsmZ3Q7IEFTQU5fU0hBRE9XX1NISUZUOwogCi0JYXNhbl9tZW1zZXQoc2hhZG93LCB2YWwsIGxlbik7CiYjNDM7CWFyZW5hX21lbXNldChzaGFkb3csIHZhbCwgbGVuKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDYzLDcgJiM0Mzs0NDYsNyBAQCBfX2hpZGRlbiBfX25vYXNhbiBpbnQgYXNhbl91bnBvaXNvbih2b2lkIF9fYXJlbmEgKmFkZHIsIHNpemVfdCBzaXplKQogCXNoYWRvdyA9IG1lbV90b19zaGFkb3coYWRkcik7CiAJbGVuID0gc2l6ZSAmZ3Q7Jmd0OyBBU0FOX1NIQURPV19TSElGVDsKIAotCWFzYW5fbWVtc2V0KHNoYWRvdywgMCwgbGVuKTsKJiM0MzsJYXJlbmFfbWVtc2V0KHNoYWRvdywgMCwgbGVuKTsKIAogCS8qCiAJICogSWYgd2UgYXJlIGFsbG9jYXRpbmcgYSBub24tZ3JhbnVsZSBhbGlnbmVkIHJlZ2lvbiwgd2UgbmVlZCB0byBhZGp1c3QKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYml0bWFwLmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9iaXRtYXAuYnBmLmMKaW5kZXggNWZmOGU2ODhkZGM3Ni4uMDM5MGYyMGNlMzY2ZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9iaXRtYXAuYnBmLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9iaXRtYXAuYnBmLmMKQEAgLTM0LDI0ICYjNDM7MzQsNiBAQCB2b2lkIGJtcF9mcmVlKHN0cnVjdCBhcmVuYV9iaXRtYXAgX19hcmVuYSAqYm1wKQogCWFyZW5hX2ZyZWUoYm1wKTsKIH0KIAotX193ZWFrCi12b2lkIF9fYm1wX3NldF9iaXQodTMyIGJpdCwgc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICpibXApCi17Ci0JYm1wLSZndDtiaXRzW0JJVF9XT1JEKGJpdCldIHw9IEJJVF9NQVNLKGJpdCk7Ci19Ci0KLV9fd2Vhawotdm9pZCBfX2JtcF9jbGVhcl9iaXQodTMyIGJpdCwgc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICpibXApCi17Ci0JYm1wLSZndDtiaXRzW0JJVF9XT1JEKGJpdCldICZhbXA7PSB+QklUX01BU0soYml0KTsKLX0KLQotX193ZWFrCi1ib29sIGJtcF90ZXN0X2JpdCh1MzIgYml0LCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcCkKLXsKLQlyZXR1cm4gYm1wLSZndDtiaXRzW0JJVF9XT1JEKGJpdCldICZhbXA7IEJJVF9NQVNLKGJpdCk7Ci19Ci0KIF9fd2VhawogYm9vbCBibXBfdGVzdF9hbmRfY2xlYXJfYml0KHUzMiBiaXQsIHN0cnVjdCBhcmVuYV9iaXRtYXAgX19hcmVuYSAqYm1wKQogewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9idWRkeS5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYnVkZHkuYnBmLmMKaW5kZXggYzY3NGVlNWNmY2MxZC4uMjQ5MGFiMTM5NmRlMCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9idWRkeS5icGYuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2J1ZGR5LmJwZi5jCkBAIC01LDYgJiM0Mzs1LDggQEAKICNpbmNsdWRlICZsdDtsaWJhcmVuYS9hc2FuLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGliYXJlbmEvYnVkZHkuaCZndDsKIAomIzQzOyNpbmNsdWRlICZsdDticGZfYXJlbmFfc3Bpbl9sb2NrLmgmZ3Q7CiYjNDM7CiAvKgogICogQnVkZHkgYWxsb2NhdG9yIGFyZW5hLWJhc2VkIGltcGxlbWVudGF0aW9uLgogICoKQEAgLTQ1LDE1ICYjNDM7NDcsOCBAQCBlbnVtIHsKIAlCVUREWV9DSFVOS19QQUdFUwk9IEJVRERZX0NIVU5LX0JZVEVTIC8gX19QQUdFX1NJWkUKIH07CiAKLXN0YXRpYyBpbmxpbmUgaW50IGJ1ZGR5X2xvY2soc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KQotewotCXJldHVybiBhcmVuYV9zcGluX2xvY2soJmFtcDtidWRkeS0mZ3Q7bG9jayk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBidWRkeV91bmxvY2soc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KQotewotCWFyZW5hX3NwaW5fdW5sb2NrKCZhbXA7YnVkZHktJmd0O2xvY2spOwotfQomIzQzOyNkZWZpbmUgYnVkZHlfbG9jayhidWRkeSwgZmxhZ3MpIChhcmVuYV9zcGluX2xvY2tfaXJxc2F2ZSgmYW1wOyhidWRkeSktJmd0O2xvY2ssIChmbGFncykpKQomIzQzOyNkZWZpbmUgYnVkZHlfdW5sb2NrKGJ1ZGR5LCBmbGFncykgKGFyZW5hX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDsoYnVkZHkpLSZndDtsb2NrLCAoZmxhZ3MpKSkKIAogLyoKICAqIFJlc2VydmUgcGFydCBvZiB0aGUgYXJlbmEgYWRkcmVzcyBzcGFjZSBmb3IgdGhlIGFsbG9jYXRvci4gV2UgdXNlCkBAIC0zODUsNiAmIzQzOzM4MCw3IEBAIHN0YXRpYyBzdHJ1Y3QgYnVkZHlfY2h1bmsgX19hcmVuYSAqYnVkZHlfY2h1bmtfZ2V0KHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSkKIHsKIAl1NjQgb3JkZXIsIG9yZCwgbWluX29yZGVyLCBtYXhfb3JkZXI7CiAJc3RydWN0IGJ1ZGR5X2NodW5rIF9fYXJlbmEgICpjaHVuazsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzaXplX3QgbGVmdDsKIAlpbnQgcG93ZXIyOwogCXU2NCB2YWRkcjsKQEAgLTQxNiw3ICYjNDM7NDEyLDcgQEAgc3RhdGljIHN0cnVjdCBidWRkeV9jaHVuayBfX2FyZW5hICpidWRkeV9jaHVua19nZXQoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KQogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlpZiAoYnVkZHlfbG9jayhidWRkeSkpIHsKJiM0MzsJaWYgKGJ1ZGR5X2xvY2soYnVkZHksIGZsYWdzKSkgewogCQkvKgogCQkgKiBXZSBjYW5ub3QgcmVjbGFpbSB0aGUgdmFkZHIgc3BhY2UsIGJ1dCB0aGF0IGlzIG9rIC0gdGhpcwogCQkgKiBvcGVyYXRpb24gc2hvdWxkIGFsd2F5cyBzdWNjZWVkLiBUaGUgZXJyb3IgcGF0aCBpcyB0byBjYXRjaApAQCAtNTIwLDcgJiM0Mzs1MTYsNyBAQCBzdGF0aWMgc3RydWN0IGJ1ZGR5X2NodW5rIF9fYXJlbmEgKmJ1ZGR5X2NodW5rX2dldChzdHJ1Y3QgYnVkZHkgX19hcmVuYSAqYnVkZHkpCiAJCQlhcmVuYV9zdGRlcnIoCiAJCQkJJiMzNDtjaHVuayBoYXMgc2l6ZSBvZiAweCVseCBieXRlcyAobGVmdCAlbHggYnl0ZXMpXG4mIzM0OywKIAkJCQlzaXplb2YoKmNodW5rKSwgbGVmdCk7Ci0JCQlidWRkeV91bmxvY2soYnVkZHkpOwomIzQzOwkJCWJ1ZGR5X3VubG9jayhidWRkeSwgZmxhZ3MpOwogCiAJCQlyZXR1cm4gTlVMTDsKIAkJfQpAQCAtNTMxLDcgJiM0Mzs1MjcsNyBAQCBzdGF0aWMgc3RydWN0IGJ1ZGR5X2NodW5rIF9fYXJlbmEgKmJ1ZGR5X2NodW5rX2dldChzdHJ1Y3QgYnVkZHkgX19hcmVuYSAqYnVkZHkpCiAJCW9yZGVyID0gKHBvd2VyMiAmZ3Q7PSBCVUREWV9NSU5fQUxMT0NfU0hJRlQpID8gcG93ZXIyIC0gQlVERFlfTUlOX0FMTE9DX1NISUZUIDogMDsKIAogCQlpZiAoaWR4X3NldF9hbGxvY2F0ZWQoY2h1bmssIGlkeCwgdHJ1ZSkpIHsKLQkJCWJ1ZGR5X3VubG9jayhidWRkeSk7CiYjNDM7CQkJYnVkZHlfdW5sb2NrKGJ1ZGR5LCBmbGFncyk7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQogCkBAIC01NDcsNyAmIzQzOzU0Myw3IEBAIHN0YXRpYyBzdHJ1Y3QgYnVkZHlfY2h1bmsgX19hcmVuYSAqYnVkZHlfY2h1bmtfZ2V0KHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSkKIAkJICovCiAJCW1pbl9vcmRlciA9IGxlZnQgPyBvcmRlciAmIzQzOyAxIDogb3JkZXI7CiAJCWlmIChhZGRfbGVmdG92ZXJzX3RvX2ZyZWVsaXN0KGNodW5rLCBpZHgsIG1pbl9vcmRlciwgbWF4X29yZGVyKSkgewotCQkJYnVkZHlfdW5sb2NrKGJ1ZGR5KTsKJiM0MzsJCQlidWRkeV91bmxvY2soYnVkZHksIGZsYWdzKTsKIAkJCXJldHVybiBOVUxMOwogCQl9CiAKQEAgLTU1Niw3ICYjNDM7NTUyLDcgQEAgc3RhdGljIHN0cnVjdCBidWRkeV9jaHVuayBfX2FyZW5hICpidWRkeV9jaHVua19nZXQoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KQogCQltYXhfb3JkZXIgPSBvcmRlcjsKIAl9CiAKLQlidWRkeV91bmxvY2soYnVkZHkpOwomIzQzOwlidWRkeV91bmxvY2soYnVkZHksIGZsYWdzKTsKIAogCXJldHVybiBjaHVuazsKIH0KQEAgLTU2NCw2ICYjNDM7NTYwLDcgQEAgc3RhdGljIHN0cnVjdCBidWRkeV9jaHVuayBfX2FyZW5hICpidWRkeV9jaHVua19nZXQoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KQogX193ZWFrIGludCBidWRkeV9pbml0KHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSkKIHsKIAlzdHJ1Y3QgYnVkZHlfY2h1bmsgX19hcmVuYSAqY2h1bms7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldDsKIAogCWlmICghYXNhbl9yZWFkeSgpKQpAQCAtNTc5LDcgJiM0Mzs1NzYsNyBAQCBfX3dlYWsgaW50IGJ1ZGR5X2luaXQoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KQogCiAJY2h1bmsgPSBidWRkeV9jaHVua19nZXQoYnVkZHkpOwogCi0JaWYgKGJ1ZGR5X2xvY2soYnVkZHkpKSB7CiYjNDM7CWlmIChidWRkeV9sb2NrKGJ1ZGR5LCBmbGFncykpIHsKIAkJYnBmX2FyZW5hX2ZyZWVfcGFnZXMoJmFtcDthcmVuYSwgY2h1bmssIEJVRERZX0NIVU5LX1BBR0VTKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtNTkxLDcgJiM0Mzs1ODgsNyBAQCBfX3dlYWsgaW50IGJ1ZGR5X2luaXQoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KQogCS8qIFB1dCB0aGUgY2h1bmsgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdC4gKi8KIAlidWRkeS0mZ3Q7Zmlyc3RfY2h1bmsgPSBjaHVuazsKIAotCWJ1ZGR5X3VubG9jayhidWRkeSk7CiYjNDM7CWJ1ZGR5X3VubG9jayhidWRkeSwgZmxhZ3MpOwogCiAJcmV0dXJuIGNodW5rID8gMCA6IC1FTk9NRU07CiB9CkBAIC03MzAsOSAmIzQzOzcyNywxMCBAQCBzdGF0aWMgdTY0IGJ1ZGR5X2FsbG9jX2Zyb21fZXhpc3RpbmdfY2h1bmtzKHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSwgaW50IG9yZAogICovCiBzdGF0aWMgdTY0IGJ1ZGR5X2FsbG9jX2Zyb21fbmV3X2NodW5rKHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSwgc3RydWN0IGJ1ZGR5X2NodW5rIF9fYXJlbmEgKmNodW5rLCBpbnQgb3JkZXIpCiB7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTY0IGFkZHJlc3M7CiAKLQlpZiAoYnVkZHlfbG9jayhidWRkeSkpCiYjNDM7CWlmIChidWRkeV9sb2NrKGJ1ZGR5LCBmbGFncykpCiAJCXJldHVybiAodTY0KU5VTEw7CiAKIApAQCAtNzQ1LDcgJiM0Mzs3NDMsNyBAQCBzdGF0aWMgdTY0IGJ1ZGR5X2FsbG9jX2Zyb21fbmV3X2NodW5rKHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSwgc3RydWN0IGJ1ZGR5XwogCiAJYWRkcmVzcyA9IGJ1ZGR5X2NodW5rX2FsbG9jKGJ1ZGR5LSZndDtmaXJzdF9jaHVuaywgb3JkZXIpOwogCi0JYnVkZHlfdW5sb2NrKGJ1ZGR5KTsKJiM0MzsJYnVkZHlfdW5sb2NrKGJ1ZGR5LCBmbGFncyk7CiAKIAlyZXR1cm4gKHU2NClhZGRyZXNzOwogfQpAQCAtNzU0LDYgJiM0Mzs3NTIsNyBAQCB2b2lkIF9fYXJlbmEgKmJ1ZGR5X2FsbG9jKHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSwgc2l6ZV90IHNpemUpCiB7CiAJdm9pZCBfX2FyZW5hICphZGRyZXNzID0gTlVMTDsKIAlzdHJ1Y3QgYnVkZHlfY2h1bmsgX19hcmVuYSAqY2h1bms7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IG9yZGVyOwogCiAJaWYgKCFidWRkeSkKQEAgLTc2NSwxMSAmIzQzOzc2NCwxMSBAQCB2b2lkIF9fYXJlbmEgKmJ1ZGR5X2FsbG9jKHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSwgc2l6ZV90IHNpemUpCiAJCXJldHVybiBOVUxMOwogCX0KIAotCWlmIChidWRkeV9sb2NrKGJ1ZGR5KSkKJiM0MzsJaWYgKGJ1ZGR5X2xvY2soYnVkZHksIGZsYWdzKSkKIAkJcmV0dXJuIE5VTEw7CiAKIAlhZGRyZXNzID0gKHU4IF9fYXJlbmEgKilidWRkeV9hbGxvY19mcm9tX2V4aXN0aW5nX2NodW5rcyhidWRkeSwgb3JkZXIpOwotCWJ1ZGR5X3VubG9jayhidWRkeSk7CiYjNDM7CWJ1ZGR5X3VubG9jayhidWRkeSwgZmxhZ3MpOwogCWlmIChhZGRyZXNzKQogCQlnb3RvIGRvbmU7CiAKQEAgLTg4MCw2ICYjNDM7ODc5LDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgYnVkZHlfZnJlZV91bmxvY2tlZChzdHJ1Y3QgYnVkZHkgX19hcmVuYSAqYnVkZHksIHU2NAogCiBfX3dlYWsgaW50IGJ1ZGR5X2ZyZWUoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5LCB2b2lkIF9fYXJlbmEgKmFkZHIpCiB7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldDsKIAogCWlmICghYnVkZHkpCkBAIC04ODksMTMgJiM0Mzs4ODksMTMgQEAgX193ZWFrIGludCBidWRkeV9mcmVlKHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSwgdm9pZCBfX2FyZW5hICphZGRyKQogCWlmICghYWRkcikKIAkJcmV0dXJuIDA7CiAKLQlyZXQgPSBidWRkeV9sb2NrKGJ1ZGR5KTsKJiM0MzsJcmV0ID0gYnVkZHlfbG9jayhidWRkeSwgZmxhZ3MpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKIAlyZXQgPSBidWRkeV9mcmVlX3VubG9ja2VkKGJ1ZGR5LCAodTY0KWFkZHIpOwogCi0JYnVkZHlfdW5sb2NrKGJ1ZGR5KTsKJiM0MzsJYnVkZHlfdW5sb2NrKGJ1ZGR5LCBmbGFncyk7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9jb21tb24uYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2NvbW1vbi5icGYuYwppbmRleCA1NjlmMGY2NGQ1MThiLi43ODVkNDg3MmNiNDk0IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2NvbW1vbi5icGYuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2NvbW1vbi5icGYuYwpAQCAtMSw1ICYjNDM7MSw3IEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTEdQTC0yLjEgT1IgQlNELTItQ2xhdXNlCiAvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovCiYjNDM7I2luY2x1ZGUgJmx0O2xpbWl0cy5oJmd0OwomIzQzOwogI2luY2x1ZGUgJmx0O2xpYmFyZW5hL2NvbW1vbi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpYmFyZW5hL2FzYW4uaCZndDsKICNpbmNsdWRlICZsdDtsaWJhcmVuYS9idWRkeS5oJmd0OwpAQCAtNDgsMTAgJiM0Mzs1MCwzMyBAQCBfX3dlYWsgdm9pZCBfX2FyZW5hICphcmVuYV9tYWxsb2Moc2l6ZV90IHNpemUpCiAJcmV0dXJuIGJ1ZGR5X2FsbG9jKCZhbXA7YnVkZHksIHNpemUpOwogfQogCiYjNDM7X193ZWFrIHZvaWQgX19hcmVuYSAqYXJlbmFfY2FsbG9jKHNpemVfdCBuY291bnQsIHNpemVfdCBzaXplKQomIzQzO3sKJiM0MzsJdm9pZCBfX2FyZW5hICptZW07CiYjNDM7CXNpemVfdCB0b3RhbDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSWRlYWxseSB3ZSYjMzk7ZCBiZSB1c2luZyBfX2J1aWx0aW5fbXVsX292ZXJmbG93IGhlcmUsCiYjNDM7CSAqIGJ1dCB0aGUgQlBGIGNvbXBpbGVyIGJhY2tlbmQgZG9lc24mIzM5O3QgaW1wbGVtZW50IF9fbXVsdGkzLgomIzQzOwkgKiBUaGVyZSBhcmUgd2F5cyB0byBvcHRpbWl6ZSB0aGUgZGl2aXNpb24gYXdheSBmcm9tIHRoZQomIzQzOwkgKiBvdmVyZmxvdyBjaGVjaywgYnV0IGFueSBjb3N0cyBhcmUgZHdhcmZlZCBieSB0aGUKJiM0MzsJICogYnVkZHlfYWxsb2MoKSBjYWxsLiBLZWVwIGl0IHNpbXBsZSBmb3Igbm93LgomIzQzOwkgKi8KJiM0MzsJaWYgKHVubGlrZWx5KG5jb3VudCAmYW1wOyZhbXA7IHNpemUgJmd0Oz0gVUxMT05HX01BWCAvIG5jb3VudCkpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJdG90YWwgPSBuY291bnQgKiBzaXplOwomIzQzOwomIzQzOwltZW0gPSBidWRkeV9hbGxvYygmYW1wO2J1ZGR5LCB0b3RhbCk7CiYjNDM7CWlmIChsaWtlbHkobWVtKSkKJiM0MzsJCWFyZW5hX21lbXNldChtZW0sIDAsIHRvdGFsKTsKJiM0MzsKJiM0MzsJcmV0dXJuIG1lbTsKJiM0Mzt9CiYjNDM7CiBfX3dlYWsgdm9pZCBhcmVuYV9mcmVlKHZvaWQgX19hcmVuYSAqcHRyKQogewogCWJ1ZGR5X2ZyZWUoJmFtcDtidWRkeSwgcHRyKTsKIH0KIAotCiBjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE5OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjMwCgkJCQkJCQlvdXRwdXQ6IDcxCgkJCQkJCQl0aG91Z2h0czogODI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkJQRiBTZWxmdGVzdHMgUGF0Y2ggQW5hbHlzaXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCBzZXJpZXMgbmVjZXNzaXRhdGVzIGZ1enppbmcuIFRoZSBmaWxlcyBsaXN0ZWQgYXJlIGFsbCBuZXN0bGVkIHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2AuIE15IGltbWVkaWF0ZSByZWFjdGlvbiBpczogKm5vdCBrZXJuZWwgY29yZSBjb2RlKi4gVGhpcyBsb29rcyBsaWtlIEJQRiBzZWxmLXRlc3RzIGFuZCBiZW5jaG1hcmtzLiBJJiMzOTttIHByZXR0eSBjZXJ0YWluIHRoaXMgaXMgdXNlci1zcGFjZSB0b29saW5nIGRlc2lnbmVkIGZvciB0ZXN0aW5nLCBub3Qga2VybmVsIGZ1bmN0aW9uYWxpdHkuCgpUaGUgcHJvbXB0IHN0YXRlcyBjbGVhciBjcml0ZXJpYSBmb3Igd2hlbiBhIHBhdGNoICpkb2VzbiYjMzk7dCogd2FycmFudCBmdXp6aW5nLiBUaGluZ3MgbGlrZSBkb2N1bWVudGF0aW9uIHVwZGF0ZXMsIGxvZ2dpbmcgY2hhbmdlcywgZGVjb3JhdGl2ZSBtb2RpZmljYXRpb25zLCB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzLCBhbmQgc3BlY2lmaWMgZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyBhcmUgYWxsIGV4ZW1wdC4gVGhpcyBzZWVtcyBsaWtlIGl0IHdvdWxkIGJlIHJlbGF0ZWQuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIGJlY2F1c2UgaXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2guIE9rYXksIGEgcXVpY2sgZ2xhbmNlIGF0IHRoZSBmaWxlIGxpc3QgY29uZmlybXMgbXkgaW5pdGlhbCBhc3Nlc3NtZW50LiBBbGwgcGF0aHMgYmVnaW4gd2l0aCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2AuIFRoaXMgcGF0Y2ggKm9ubHkqIHRvdWNoZXMgQlBGIHNlbGYtdGVzdHMgYW5kIHJlbGF0ZWQgYmVuY2htYXJrIGNvZGUuIEl0JiMzOTtzIG5vdCBtb2RpZnlpbmcgYW55IGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiBUaGUgY29udGV4dCBpcyB2ZXJ5IGNsZWFybHkgdXNlci1zcGFjZSB0b29scyBhbmQgQlBGIHByb2dyYW1zIGZvciB0ZXN0aW5nLiBObyBjaGFuY2Ugb2YgYW55IGNvcmUga2VybmVsIHNpZGUgZWZmZWN0cy4KClRoZXJlZm9yZSwgYXBwbHlpbmcgdGhlIHByb3ZpZGVkIGNyaXRlcmlhLCBJJiMzOTttIGNvbmZpZGVudCBpbiBjb25jbHVkaW5nIHRoYXQgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCB3YXJyYW50IGZ1enppbmcgYnkgYSB0b29sIGxpa2Ugc3l6a2FsbGVyLCB3aGljaCB0YXJnZXRzIHRoZSBrZXJuZWwgaXRzZWxmLgoKV29ydGhGdXp6aW5nPWZhbHNlLiBMZXQmIzM5O3MgZ2V0IHRoYXQgbG9nZ2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE5OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBCUEYgc2VsZnRlc3RzIGFuZCBiZW5jaG1hcmtzIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8uIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEJQRiBzZWxmdGVzdHMgYW5kIGJlbmNobWFya3MgdW5kZXIgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTk6NDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE5OjQzOjQzLjE3NjM3MjE4OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNTU2NzM1MDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBCUEYgc2VsZnRlc3RzIGFuZCBiZW5jaG1hcmtzIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8uIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxOTo0Mzo0My4xNzYzNzg1NjlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MjgzMDE2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGQxYTIyODZjYWE5OGZhODY1MDNkM2E5MjBlZWQzY2RmMzVhNjZkODNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTcgMTk6NDM6NDIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXFxuaW5kZXggZDM2NTVhNzA2NDgyNi4uMjJlOWViMTZjMTUxMSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcXG5AQCAtODI2LDE4ICs4MjYsMjIgQEAgTElCQVJFTkFfTUFLRV9BUkdTID0gXFxcXFxcbiBcXHRcXHRCUEZfVEFSR0VUX0VORElBTj1cXFwiJChCUEZfVEFSR0VUX0VORElBTilcXFwiIFxcXFxcXG4gXFx0XFx0UT1cXFwiJChRKVxcXCJcXG4gXFxuLUxJQkFSRU5BX0JQRl9ERVBTIDo9ICQod2lsZGNhcmQgbGliYXJlbmEvTWFrZWZpbGVcXHRcXHRcXFxcXFxuLVxcdFxcdFxcdFxcdCBsaWJhcmVuYS9pbmNsdWRlLypcXHRcXHRcXFxcXFxuLVxcdFxcdFxcdFxcdCBsaWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hLypcXHRcXFxcXFxuLVxcdFxcdFxcdFxcdCBsaWJhcmVuYS9zcmMvKlxcdFxcdFxcdFxcXFxcXG4tXFx0XFx0XFx0XFx0IGxpYmFyZW5hL3NlbGZ0ZXN0cy8qXFx0XFx0XFxcXFxcbi1cXHRcXHRcXHRcXHQgbGliYXJlbmEvKi5icGYubylcXG4rTElCQVJFTkFfQ09NTU9OX0RFUFMgOj0gJCh3aWxkY2FyZCBsaWJhcmVuYS9NYWtlZmlsZVxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0ICAgIGxpYmFyZW5hL2luY2x1ZGUvKlxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0ICAgIGxpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvKlxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0ICAgIGxpYmFyZW5hL3NyYy8qKVxcbitMSUJBUkVOQV9CUEZfREVQUyA6PSAkKExJQkFSRU5BX0NPTU1PTl9ERVBTKSAkKHdpbGRjYXJkIGxpYmFyZW5hL3NlbGZ0ZXN0cy8qKVxcbitMSUJBUkVOQV9CRU5DSF9CUEZfREVQUyA6PSAkKExJQkFSRU5BX0NPTU1PTl9ERVBTKSAkKHdpbGRjYXJkIGxpYmFyZW5hL2JlbmNocy8qKVxcbiBcXG4gTElCQVJFTkFfU0tFTCA6PSBsaWJhcmVuYS9saWJhcmVuYS5za2VsLmhcXG4rTElCQVJFTkFfQkVOQ0hfU0tFTCA6PSBsaWJhcmVuYS9saWJhcmVuYV9iZW5jaC5za2VsLmhcXG4gXFxuICQoTElCQVJFTkFfU0tFTCk6ICQoSU5DTFVERV9ESVIpL3ZtbGludXguaCAkKEJQRk9CSikgJChMSUJBUkVOQV9CUEZfREVQUylcXG4gXFx0KyQoTUFLRSkgLUMgbGliYXJlbmEgbGliYXJlbmEuc2tlbC5oICQoTElCQVJFTkFfTUFLRV9BUkdTKVxcbiBcXG4rJChMSUJBUkVOQV9CRU5DSF9TS0VMKTogJChJTkNMVURFX0RJUikvdm1saW51eC5oICQoQlBGT0JKKSAkKExJQkFSRU5BX0JFTkNIX0JQRl9ERVBTKSB8ICQoTElCQVJFTkFfU0tFTClcXG4rXFx0KyQoTUFLRSkgLUMgbGliYXJlbmEgYmVuY2htYXJrcyAkKExJQkFSRU5BX01BS0VfQVJHUylcXG4rXFxuIGlmbmVxICgkKENMQU5HX0hBU19BUkVOQV9BU0FOKSwpXFxuIExJQkFSRU5BX0FTQU5fU0tFTCA6PSBsaWJhcmVuYS9saWJhcmVuYV9hc2FuLnNrZWwuaFxcbiBDRkxBR1MgKz0gLURIQVNfQlBGX0FSRU5BX0FTQU5cXG5AQCAtOTg3LDYgKzk5MSw3IEBAICQoT1VUUFVUKS9iZW5jaF9zb2NrbWFwLm86ICQoT1VUUFVUKS9iZW5jaF9zb2NrbWFwX3Byb2cuc2tlbC5oXFxuICQoT1VUUFVUKS9iZW5jaF9scG1fdHJpZV9tYXAubzogJChPVVRQVVQpL2xwbV90cmllX2JlbmNoLnNrZWwuaCAkKE9VVFBVVCkvbHBtX3RyaWVfbWFwLnNrZWwuaFxcbiAkKE9VVFBVVCkvYmVuY2hfYnBmX25vcC5vOiAkKE9VVFBVVCkvYnBmX25vcF9iZW5jaC5za2VsLmggYmVuY2hfYnBmX3RpbWluZy5oXFxuICQoT1VUUFVUKS9iZW5jaF94ZHBfbGIubzogJChPVVRQVVQpL3hkcF9sYl9iZW5jaC5za2VsLmggYmVuY2hfYnBmX3RpbWluZy5oXFxuKyQoT1VUUFVUKS9iZW5jaF9saWJhcmVuYS5vOiAkKExJQkFSRU5BX0JFTkNIX1NLRUwpXFxuICQoT1VUUFVUKS9iZW5jaF9icGZfdGltaW5nLm86IGJlbmNoX2JwZl90aW1pbmcuaFxcbiAkKE9VVFBVVCkvYmVuY2gubzogYmVuY2guaCB0ZXN0aW5nX2hlbHBlcnMuaCAkKEJQRk9CSilcXG4gJChPVVRQVVQpL2JlbmNoOiBMRExJQlMgKz0gLWxtXFxuQEAgLTEwMTQsNiArMTAxOSw3IEBAICQoT1VUUFVUKS9iZW5jaDogJChPVVRQVVQpL2JlbmNoLm8gXFxcXFxcbiBcXHRcXHQgJChPVVRQVVQpL2JlbmNoX2JwZl90aW1pbmcubyBcXFxcXFxuIFxcdFxcdCAkKE9VVFBVVCkvYmVuY2hfYnBmX25vcC5vIFxcXFxcXG4gXFx0XFx0ICQoT1VUUFVUKS9iZW5jaF94ZHBfbGIubyBcXFxcXFxuK1xcdFxcdCAkKE9VVFBVVCkvYmVuY2hfbGliYXJlbmEubyBcXFxcXFxuIFxcdFxcdCAkKE9VVFBVVCkvdXNkdF8xLm8gXFxcXFxcbiBcXHRcXHQgJChPVVRQVVQpL3VzZHRfMi5vIFxcXFxcXG4gXFx0XFx0ICNcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guY1xcbmluZGV4IGI4NmI3MzQ1NmQzY2EuLmRlNjcyZjYxZDRhYmUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guY1xcbkBAIC0yODgsNiArMjg4LDcgQEAgZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX2NyeXB0b19hcmdwO1xcbiBleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfc29ja21hcF9hcmdwO1xcbiBleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfbHBtX3RyaWVfbWFwX2FyZ3A7XFxuIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF94ZHBfbGJfYXJncDtcXG4rZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX2xpYmFyZW5hX2FyZ3A7XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3BfY2hpbGQgYmVuY2hfcGFyc2Vyc1tdID0ge1xcbiBcXHR7IFxcdTAwMjZiZW5jaF9yaW5nYnVmc19hcmdwLCAwLCBcXFwiUmluZyBidWZmZXJzIGJlbmNobWFya1xcXCIsIDAgfSxcXG5AQCAtMzA2LDYgKzMwNyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9jaGlsZCBiZW5jaF9wYXJzZXJzW10gPSB7XFxuIFxcdHsgXFx1MDAyNmJlbmNoX3NvY2ttYXBfYXJncCwgMCwgXFxcImJwZiBzb2NrbWFwIGJlbmNobWFya1xcXCIsIDAgfSxcXG4gXFx0eyBcXHUwMDI2YmVuY2hfbHBtX3RyaWVfbWFwX2FyZ3AsIDAsIFxcXCJMUE0gdHJpZSBtYXAgYmVuY2htYXJrXFxcIiwgMCB9LFxcbiBcXHR7IFxcdTAwMjZiZW5jaF94ZHBfbGJfYXJncCwgMCwgXFxcIlhEUCBsb2FkLWJhbGFuY2VyIGJlbmNobWFya1xcXCIsIDAgfSxcXG4rXFx0eyBcXHUwMDI2YmVuY2hfbGliYXJlbmFfYXJncCwgMCwgXFxcImxpYmFyZW5hIGFsbG9jYXRvciBiZW5jaG1hcmtcXFwiLCAwIH0sXFxuIFxcdHt9LFxcbiB9O1xcbiBcXG5AQCAtNTg1LDYgKzU4Nyw4IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfbHBtX3RyaWVfZGVsZXRlO1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2xwbV90cmllX2ZyZWU7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfYnBmX25vcDtcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF94ZHBfbGI7XFxuK2V4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfbGliYXJlbmFfbWFsbG9jO1xcbitleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2xpYmFyZW5hX2NhbGxvYztcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmVuY2ggKmJlbmNoc1tdID0ge1xcbiBcXHRcXHUwMDI2YmVuY2hfY291bnRfZ2xvYmFsLFxcbkBAIC02NjksNiArNjczLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBiZW5jaCAqYmVuY2hzW10gPSB7XFxuIFxcdFxcdTAwMjZiZW5jaF9scG1fdHJpZV9mcmVlLFxcbiBcXHRcXHUwMDI2YmVuY2hfYnBmX25vcCxcXG4gXFx0XFx1MDAyNmJlbmNoX3hkcF9sYixcXG4rXFx0XFx1MDAyNmJlbmNoX2xpYmFyZW5hX21hbGxvYyxcXG4rXFx0XFx1MDAyNmJlbmNoX2xpYmFyZW5hX2NhbGxvYyxcXG4gfTtcXG4gXFxuIHN0YXRpYyB2b2lkIGZpbmRfYmVuY2htYXJrKHZvaWQpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfbGliYXJlbmEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfbGliYXJlbmEuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMjRlNDMyMjQ0YmY1ZFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2xpYmFyZW5hLmNcXG5AQCAtMCwwICsxLDIxMCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXFxuKyNpbmNsdWRlIFxcdTAwM2NhcmdwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW1pdHMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcImJlbmNoLmhcXFwiXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGliYXJlbmEvY29tbW9uLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaWJhcmVuYS9hc2FuLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaWJhcmVuYS9idWRkeS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGliYXJlbmEvdXNlcnNwYWNlLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwibGliYXJlbmEvbGliYXJlbmFfYmVuY2guc2tlbC5oXFxcIlxcbitcXG4rc3RhdGljIHN0cnVjdCB7XFxuK1xcdF9fdTY0IGFsbG9jX3NpemU7XFxuK1xcdF9fdTY0IG5hbGxvY3M7XFxuK30gYXJncyA9IHtcXG4rXFx0LmFsbG9jX3NpemUgPSA2NCxcXG4rXFx0Lm5hbGxvY3MgPSAxMDAwMCxcXG4rfTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3Qge1xcbitcXHRzdHJ1Y3QgbGliYXJlbmFfYmVuY2ggKnNrZWw7XFxuK1xcdGludCBiZW5jaF9mZDtcXG4rXFx0aW50IHJlc2V0X2ZkO1xcbit9IGN0eDtcXG4rXFxuK2VudW0ge1xcbitcXHRBUkdfTElCQVJFTkFfQUxMT0NfU0laRSA9IDEyMDAwLFxcbitcXHRBUkdfTElCQVJFTkFfTkFMTE9DUyxcXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0c1tdID0ge1xcbitcXHR7IFxcXCJhbGxvY19zaXplXFxcIiwgQVJHX0xJQkFSRU5BX0FMTE9DX1NJWkUsIFxcXCJCWVRFU1xcXCIsIDAsXFxuK1xcdCAgXFxcIlNpemUgb2YgZWFjaCBhcmVuYSBhbGxvY2F0aW9uXFxcIiB9LFxcbitcXHR7IFxcXCJuYWxsb2NzXFxcIiwgQVJHX0xJQkFSRU5BX05BTExPQ1MsIFxcXCJJVEVSU1xcXCIsIDAsXFxuK1xcdCAgXFxcIk51bWJlciBvZiBhbGxvY2F0aW9uIHBlciBtZWFzdXJlbWVudFxcXCIgfSxcXG4rXFx0e30sXFxuK307XFxuK1xcbitzdGF0aWMgZXJyb3JfdCBwYXJzZV9hcmcoaW50IGtleSwgY2hhciAqYXJnLCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyB2YWx1ZTtcXG4rXFxuK1xcdHN3aXRjaCAoa2V5KSB7XFxuK1xcdGNhc2UgQVJHX0xJQkFSRU5BX0FMTE9DX1NJWkU6XFxuK1xcdFxcdHZhbHVlID0gc3RydG91bGwoYXJnLCBOVUxMLCAxMCk7XFxuK1xcdFxcdGlmICghdmFsdWUgfHwgdmFsdWUgXFx1MDAzZT0gVUlOVF9NQVgpIHtcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJpbnZhbGlkIGFsbG9jX3NpemU6ICVsZFxcXCIsIHZhbHVlKTtcXG4rXFx0XFx0XFx0YXJncF91c2FnZShzdGF0ZSk7XFxuK1xcdFxcdH1cXG4rXFx0XFx0YXJncy5hbGxvY19zaXplID0gdmFsdWU7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEFSR19MSUJBUkVOQV9OQUxMT0NTOlxcbitcXHRcXHRhcmdzLm5hbGxvY3MgPSBzdHJ0b3VsbChhcmcsIE5VTEwsIDEwKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBBUkdQX0VSUl9VTktOT1dOO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rY29uc3Qgc3RydWN0IGFyZ3AgYmVuY2hfbGliYXJlbmFfYXJncCA9IHtcXG4rXFx0Lm9wdGlvbnMgPSBvcHRzLFxcbitcXHQucGFyc2VyID0gcGFyc2VfYXJnLFxcbit9O1xcbitcXG4rc3RhdGljIHZvaWQgdmFsaWRhdGUodm9pZClcXG4re1xcbitcXHRpZiAoZW52LmNvbnN1bWVyX2NudCAhPSAwKSB7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiYmVuY2htYXJrIGRvZXNuJ3Qgc3VwcG9ydCBjb25zdW1lcnNcXFxcblxcXCIpO1xcbitcXHRcXHRleGl0KDEpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoZW52LnByb2R1Y2VyX2NudCAhPSAxKSB7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiYmVuY2htYXJrIHN1cHBvcnRzIGV4YWN0bHkgb25lIHByb2R1Y2VyXFxcXG5cXFwiKTtcXG4rXFx0XFx0ZXhpdCgxKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBzZXR1cF9jb21tb24odm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgYXJlbmFfYWxsb2NfcmVzZXJ2ZV9hcmdzIHJlc2VydmVfYXJncyA9IHtcXG4rXFx0XFx0Lm5yX3BhZ2VzID0gQVJFTkFfUkVTRVJWRV9QQUdFU19ERkwsXFxuK1xcdH07XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRzZXR1cF9saWJicGYoKTtcXG4rXFxuK1xcdGN0eC5za2VsID0gbGliYXJlbmFfYmVuY2hfX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKCFjdHguc2tlbCkge1xcbitcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcImZhaWxlZCB0byBvcGVuIGFuZCBsb2FkIHNrZWxldG9uXFxcXG5cXFwiKTtcXG4rXFx0XFx0ZXhpdCgxKTtcXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gbGliYXJlbmFfcnVuX3Byb2dfYXJncyhcXG4rXFx0XFx0YnBmX3Byb2dyYW1fX2ZkKGN0eC5za2VsLVxcdTAwM2Vwcm9ncy5hcmVuYV9hbGxvY19yZXNlcnZlKSxcXG4rXFx0XFx0XFx1MDAyNnJlc2VydmVfYXJncywgc2l6ZW9mKHJlc2VydmVfYXJncykpO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiZmFpbGVkIHRvIHJlc2VydmUgYXJlbmEgcGFnZXM6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbitcXHRcXHRleGl0KDEpO1xcbitcXHR9XFxuK1xcbitcXHRlcnIgPSBsaWJhcmVuYV9ydW5fcHJvZyhcXG4rXFx0XFx0YnBmX3Byb2dyYW1fX2ZkKGN0eC5za2VsLVxcdTAwM2Vwcm9ncy5hcmVuYV9idWRkeV9yZXNldCkpO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiZmFpbGVkIHRvIGluaXRpYWxpemUgYXJlbmEgYWxsb2NhdG9yOiAlZFxcXFxuXFxcIiwgZXJyKTtcXG4rXFx0XFx0ZXhpdCgxKTtcXG4rXFx0fVxcbitcXG4rXFx0Y3R4LnNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlYmVuY2hfYWxsb2Nfc2l6ZSA9IGFyZ3MuYWxsb2Nfc2l6ZTtcXG4rXFx0Y3R4LnNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlYmVuY2hfbmFsbG9jcyA9IGFyZ3MubmFsbG9jcztcXG4rXFx0Y3R4LnJlc2V0X2ZkID0gYnBmX3Byb2dyYW1fX2ZkKGN0eC5za2VsLVxcdTAwM2Vwcm9ncy5hcmVuYV9idWRkeV9yZXNldCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG1hbGxvY19zZXR1cCh2b2lkKVxcbit7XFxuK1xcdHNldHVwX2NvbW1vbigpO1xcbitcXHRjdHguYmVuY2hfZmQgPSBicGZfcHJvZ3JhbV9fZmQoY3R4LnNrZWwtXFx1MDAzZXByb2dzLmJlbmNoX21hbGxvYyk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGNhbGxvY19zZXR1cCh2b2lkKVxcbit7XFxuK1xcdHNldHVwX2NvbW1vbigpO1xcbitcXHRjdHguYmVuY2hfZmQgPSBicGZfcHJvZ3JhbV9fZmQoY3R4LnNrZWwtXFx1MDAzZXByb2dzLmJlbmNoX2NhbGxvYyk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkICpwcm9kdWNlcih2b2lkICppbnB1dClcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0d2hpbGUgKHRydWUpIHtcXG4rXFx0XFx0ZXJyID0gbGliYXJlbmFfcnVuX3Byb2coY3R4LmJlbmNoX2ZkKTtcXG4rXFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcImxpYmFyZW5hIGJlbmNobWFyayBmYWlsZWQ6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbitcXHRcXHRcXHRleGl0KDEpO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRlcnIgPSBsaWJhcmVuYV9ydW5fcHJvZyhjdHgucmVzZXRfZmQpO1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwibGliYXJlbmEgYWxsb2MgcmVzZXQgZmFpbGVkOiAlZFxcXFxuXFxcIiwgZXJyKTtcXG4rXFx0XFx0XFx0ZXhpdCgxKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbWVhc3VyZShzdHJ1Y3QgYmVuY2hfcmVzICpyZXMpXFxuK3tcXG4rXFx0cmVzLVxcdTAwM2VkdXJhdGlvbl9ucyA9IGF0b21pY19zd2FwKFxcdTAwMjZjdHguc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2ViZW5jaF9kdXJhdGlvbl9ucywgMCk7XFxuK1xcdHJlcy1cXHUwMDNlaGl0cyA9IGF0b21pY19zd2FwKFxcdTAwMjZjdHguc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2ViZW5jaF9oaXRzLCAwKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcmVwb3J0X3Byb2dyZXNzKGludCBpdGVyLCBzdHJ1Y3QgYmVuY2hfcmVzICpyZXMsIGxvbmcgZGVsdGFfbnMpXFxuK3tcXG4rXFx0ZG91YmxlIGxhdGVuY3lfbnMgPSAwLjA7XFxuK1xcbitcXHRpZiAocmVzLVxcdTAwM2VoaXRzKVxcbitcXHRcXHRsYXRlbmN5X25zID0gcmVzLVxcdTAwM2VkdXJhdGlvbl9ucyAvIChkb3VibGUpcmVzLVxcdTAwM2VoaXRzO1xcbitcXG4rXFx0cHJpbnRmKFxcXCJJdGVyICUzZCAoJTcuM2xmdXMpOiBsYXRlbmN5ICU4LjNsZiBucy9vcCAoJWxkIGFsbG9jYXRpb25zKVxcXFxuXFxcIixcXG4rXFx0ICAgICAgIGl0ZXIsIChkZWx0YV9ucyAtIDEwMDAwMDAwMDApIC8gMTAwMC4wLCBsYXRlbmN5X25zLCByZXMtXFx1MDAzZWhpdHMpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCByZXBvcnRfZmluYWwoc3RydWN0IGJlbmNoX3JlcyByZXNbXSwgaW50IHJlc19jbnQpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBkdXJhdGlvbl9ucyA9IDA7XFxuK1xcdGxvbmcgaGl0cyA9IDA7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHJlc19jbnQ7IGkrKykge1xcbitcXHRcXHRkdXJhdGlvbl9ucyArPSByZXNbaV0uZHVyYXRpb25fbnM7XFxuK1xcdFxcdGhpdHMgKz0gcmVzW2ldLmhpdHM7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghaGl0cyB8fCAhcmVzX2NudCkge1xcbitcXHRcXHRwcmludGYoXFxcIlN1bW1hcnk6IG5vIHJ1bnMgbWVhc3VyZWRcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdHByaW50ZihcXFwiU3VtbWFyeTogJS4zbGYgbnMvb3AsICUuMGxmIGludm9jYXRpb25zIGZvciAldSBhbGxvY2F0aW9ucy9pbnZvY2F0aW9uKVxcXFxuXFxcIixcXG4rXFx0ICAgICAgIGR1cmF0aW9uX25zIC8gKGRvdWJsZSloaXRzLCBoaXRzIC8gKGRvdWJsZSlyZXNfY250LFxcbitcXHQgICAgICAgY3R4LnNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlYmVuY2hfbmFsbG9jcyk7XFxuK31cXG4rXFxuK2NvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9saWJhcmVuYV9tYWxsb2MgPSB7XFxuK1xcdC5uYW1lID0gXFxcImxpYmFyZW5hLW1hbGxvY1xcXCIsXFxuK1xcdC5hcmdwID0gXFx1MDAyNmJlbmNoX2xpYmFyZW5hX2FyZ3AsXFxuK1xcdC52YWxpZGF0ZSA9IHZhbGlkYXRlLFxcbitcXHQuc2V0dXAgPSBtYWxsb2Nfc2V0dXAsXFxuK1xcdC5wcm9kdWNlcl90aHJlYWQgPSBwcm9kdWNlcixcXG4rXFx0Lm1lYXN1cmUgPSBtZWFzdXJlLFxcbitcXHQucmVwb3J0X3Byb2dyZXNzID0gcmVwb3J0X3Byb2dyZXNzLFxcbitcXHQucmVwb3J0X2ZpbmFsID0gcmVwb3J0X2ZpbmFsLFxcbit9O1xcbitcXG4rY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2xpYmFyZW5hX2NhbGxvYyA9IHtcXG4rXFx0Lm5hbWUgPSBcXFwibGliYXJlbmEtY2FsbG9jXFxcIixcXG4rXFx0LmFyZ3AgPSBcXHUwMDI2YmVuY2hfbGliYXJlbmFfYXJncCxcXG4rXFx0LnZhbGlkYXRlID0gdmFsaWRhdGUsXFxuK1xcdC5zZXR1cCA9IGNhbGxvY19zZXR1cCxcXG4rXFx0LnByb2R1Y2VyX3RocmVhZCA9IHByb2R1Y2VyLFxcbitcXHQubWVhc3VyZSA9IG1lYXN1cmUsXFxuK1xcdC5yZXBvcnRfcHJvZ3Jlc3MgPSByZXBvcnRfcHJvZ3Jlc3MsXFxuK1xcdC5yZXBvcnRfZmluYWwgPSByZXBvcnRfZmluYWwsXFxuK307XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvcnVuX2JlbmNoX2xpYmFyZW5hLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9ydW5fYmVuY2hfbGliYXJlbmEuc2hcXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjEwYWZlNGQ1MmViZjdcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9ydW5fYmVuY2hfbGliYXJlbmEuc2hcXG5AQCAtMCwwICsxLDMxIEBAXFxuKyMhL2Jpbi9iYXNoXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rXFxuK3NvdXJjZSAuL2JlbmNocy9ydW5fY29tbW9uLnNoXFxuK1xcbitzZXQgLWV1Zm8gcGlwZWZhaWxcXG4rXFxuK1JVTl9CRU5DSD1cXFwiLi9iZW5jaCAtZDMgLXFcXFwiXFxuK1xcbitzdW1tYXJpemVfbGliYXJlbmEoKVxcbit7XFxuK1xcdGxvY2FsIGJlbmNoPVxcXCIkMVxcXCJcXG4rXFx0bG9jYWwgc3VtbWFyeVxcbitcXG4rXFx0c3VtbWFyeT0kKHByaW50ZiAnJXNcXFxcbicgXFxcIiQyXFxcIiB8IHRhaWwgLW4xKVxcbitcXHRzdW1tYXJ5PSR7c3VtbWFyeSNTdW1tYXJ5OiB9XFxuK1xcdHByaW50ZiBcXFwiJS0yMHMgJXNcXFxcblxcXCIgXFxcIiRiZW5jaFxcXCIgXFxcIiRzdW1tYXJ5XFxcIlxcbit9XFxuK1xcbitoZWFkZXIgXFxcImxpYmFyZW5hIHNlcXVlbnRpYWwgbWFsbG9jXFxcXG5cXFwiXFxuK1xcbitmb3Igc2l6ZSBpbiAxNiA2NCAyNTYgMTAyNCA0MDk2OyBkb1xcbitzdWJ0aXRsZSBcXFwiYWxsb2NhdGlvbiBzaXplOiAkc2l6ZVxcXCJcXG4rcHJpbnRmIFxcXCJcXFxcdC0tLS0tLS0tLS0tLS0tLS0tLS1cXFxcblxcXCJcXG4rXFx0Zm9yIG5hbGxvY3MgaW4gMTAgNTAgMTAwIDUwMCAxMDAwIDUwMDAgMTAwMDA7IGRvXFxuK1xcdFxcdHN1bW1hcml6ZV9saWJhcmVuYSBcXFwibWFsbG9jOlxcXCIgXFxcXFxcbitcXHRcXHRcXHRcXFwiJCgkUlVOX0JFTkNIIC0tYWxsb2Nfc2l6ZSBcXFwiJHNpemVcXFwiIC0tbmFsbG9jcyBcXFwiJG5hbGxvY3NcXFwiIGxpYmFyZW5hLW1hbGxvYylcXFwiXFxuK1xcdFxcdHN1bW1hcml6ZV9saWJhcmVuYSBcXFwiY2FsbG9jOlxcXCIgXFxcXFxcbitcXHRcXHRcXHRcXFwiJCgkUlVOX0JFTkNIIC0tYWxsb2Nfc2l6ZSBcXFwiJHNpemVcXFwiIC0tbmFsbG9jcyBcXFwiJG5hbGxvY3NcXFwiIGxpYmFyZW5hLWNhbGxvYylcXFwiXFxuK1xcdGRvbmVcXG4rZG9uZVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvTWFrZWZpbGVcXG5pbmRleCA1ZTJhYjUxNDgwNWU0Li45MTE2NGQ0M2JkNjEyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9NYWtlZmlsZVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9NYWtlZmlsZVxcbkBAIC0yNywxMCArMjcsMTcgQEAgQlBGRElSPSQoYWJzcGF0aCAkKExJQkFSRU5BKS8uLilcXG4gSU5DTFVERV9ESVIgPz0gJChCUEZESVIpL3Rvb2xzL2luY2x1ZGVcXG4gTElCQlBGX0lOQ0xVREUgPz0gJChJTkNMVURFX0RJUilcXG4gXFxuLSMgU2NhbiBzcmMvIGFuZCBzZWxmdGVzdHMvIHRvIGdlbmVyYXRlIHRoZSBmaW5hbCBiaW5hcmllc1xcbi1MSUJBUkVOQV9TT1VSQ0VTID0gJCh3aWxkY2FyZCAkKExJQkFSRU5BKS9zcmMvKi5icGYuYykgJCh3aWxkY2FyZCAkKExJQkFSRU5BKS9zZWxmdGVzdHMvKi5icGYuYylcXG4tTElCQVJFTkFfT0JKRUNUUyA9ICQobm90ZGlyICQoTElCQVJFTkFfU09VUkNFUzouYnBmLmM9LmJwZi5vKSlcXG4tTElCQVJFTkFfT0JKRUNUU19BU0FOID0gJChub3RkaXIgJChMSUJBUkVOQV9TT1VSQ0VTOi5icGYuYz1fYXNhbi5icGYubykpXFxuKyMgQnVpbGQgc2VsZnRlc3RzIGFuZCBiZW5jaG1hcmtzIGludG8gc2VwYXJhdGUgQlBGIG9iamVjdHMgYW5kIHNrZWxldG9ucy5cXG4rTElCQVJFTkFfQ09SRV9TT1VSQ0VTID0gJCh3aWxkY2FyZCAkKExJQkFSRU5BKS9zcmMvKi5icGYuYylcXG4rTElCQVJFTkFfVEVTVF9TT1VSQ0VTID0gJCh3aWxkY2FyZCAkKExJQkFSRU5BKS9zZWxmdGVzdHMvKi5icGYuYylcXG4rTElCQVJFTkFfQkVOQ0hfU09VUkNFUyA9ICQod2lsZGNhcmQgJChMSUJBUkVOQSkvYmVuY2hzLyouYnBmLmMpXFxuK1xcbitMSUJBUkVOQV9PQkpFQ1RTID0gJChub3RkaXIgJChMSUJBUkVOQV9DT1JFX1NPVVJDRVM6LmJwZi5jPS5icGYubykgXFxcXFxcbitcXHRcXHRcXHQgICAgICAgJChMSUJBUkVOQV9URVNUX1NPVVJDRVM6LmJwZi5jPS5icGYubykpXFxuK0xJQkFSRU5BX09CSkVDVFNfQVNBTiA9ICQobm90ZGlyICQoTElCQVJFTkFfQ09SRV9TT1VSQ0VTOi5icGYuYz1fYXNhbi5icGYubykgXFxcXFxcbitcXHRcXHRcXHRcXHQgICAgJChMSUJBUkVOQV9URVNUX1NPVVJDRVM6LmJwZi5jPV9hc2FuLmJwZi5vKSlcXG4rTElCQVJFTkFfQkVOQ0hfT0JKRUNUUyA9ICQobm90ZGlyICQoTElCQVJFTkFfQ09SRV9TT1VSQ0VTOi5icGYuYz0uYnBmLm8pIFxcXFxcXG4rXFx0XFx0XFx0XFx0ICAgICAkKExJQkFSRU5BX0JFTkNIX1NPVVJDRVM6LmJwZi5jPS5icGYubykpXFxuIFxcbiBJTkNMVURFUyA9IC1JJChMSUJBUkVOQSkvaW5jbHVkZSAtSSQoQlBGRElSKVxcbiBpZm5lcSAoJChJTkNMVURFX0RJUiksKVxcbkBAIC01MywxNyArNjAsMjUgQEAgb3ZlcnJpZGUgQlBGX0NGTEFHUyArPSAtTzIgLWdcXG4gb3ZlcnJpZGUgQlBGX0NGTEFHUyArPSAtV25vLWluY29tcGF0aWJsZS1wb2ludGVyLXR5cGVzLWRpc2NhcmRzLXF1YWxpZmllcnNcXG4gIyBSZXF1aXJlZCBmb3Igc3VwcHJlc3NpbmcgaGFybWxlc3Mgdm1saW51eC5oLXJlbGF0ZWQgd2FybmluZ3MuXFxuIG92ZXJyaWRlIEJQRl9DRkxBR1MgKz0gLVduby1taXNzaW5nLWRlY2xhcmF0aW9uc1xcbitvdmVycmlkZSBCUEZfQ0ZMQUdTICs9IC1mbm8tc3RyaWN0LWFsaWFzaW5nXFxuIG92ZXJyaWRlIEJQRl9DRkxBR1MgKz0gJChJTkNMVURFUylcXG4gXFxuIENGTEFHUyA9IC1PMiAtbm8tcGllXFxuIENGTEFHUyArPSAkKElOQ0xVREVTKVxcbiBcXG4tdnBhdGggJS5icGYuYyAkKExJQkFSRU5BKS9zcmMgJChMSUJBUkVOQSkvc2VsZnRlc3RzXFxuLXZwYXRoICUuYyAkKExJQkFSRU5BKS9zcmMgJChMSUJBUkVOQSkvc2VsZnRlc3RzXFxuK3ZwYXRoICUuYnBmLmMgJChMSUJBUkVOQSkvc3JjICQoTElCQVJFTkEpL3NlbGZ0ZXN0cyAkKExJQkFSRU5BKS9iZW5jaHNcXG4rdnBhdGggJS5jICQoTElCQVJFTkEpL3NyYyAkKExJQkFSRU5BKS9zZWxmdGVzdHMgJChMSUJBUkVOQSkvYmVuY2hzXFxuIFxcbiBza2VsZXRvbnM6IGxpYmFyZW5hLnNrZWwuaCBsaWJhcmVuYV9hc2FuLnNrZWwuaFxcbiAuUEhPTlk6IHNrZWxldG9uc1xcbiBcXG4rYmVuY2htYXJrczogbGliYXJlbmFfYmVuY2guc2tlbC5oXFxuKy5QSE9OWTogYmVuY2htYXJrc1xcbitcXG4rbGliYXJlbmFfYmVuY2guc2tlbC5oOiBsaWJhcmVuYV9iZW5jaC5icGYub1xcbitcXHQkKGNhbGwgbXNnLEdFTi1TS0VMLGxpYmFyZW5hLCRAKVxcbitcXHQkKFEpJChCUEZUT09MKSBnZW4gc2tlbGV0b24gJFxcdTAwM2MgbmFtZSBcXFwibGliYXJlbmFfYmVuY2hcXFwiIFxcdTAwM2UgJEBcXG4rXFxuIGxpYmFyZW5hX2FzYW4uc2tlbC5oOiBsaWJhcmVuYV9hc2FuLmJwZi5vXFxuIFxcdCQoY2FsbCBtc2csR0VOLVNLRUwsbGliYXJlbmEsJEApXFxuIFxcdCQoUSkkKEJQRlRPT0wpIGdlbiBza2VsZXRvbiAkXFx1MDAzYyBuYW1lIFxcXCJsaWJhcmVuYV9hc2FuXFxcIiBcXHUwMDNlICRAXFxuQEAgLTgwLDYgKzk1LDEwIEBAIGxpYmFyZW5hLmJwZi5vOiAkKExJQkFSRU5BX09CSkVDVFMpXFxuIFxcdCQoY2FsbCBtc2csR0VOLU9CSixsaWJhcmVuYSwkQClcXG4gXFx0JChRKSQoQlBGVE9PTCkgZ2VuIG9iamVjdCAkQCAkXlxcbiBcXG4rbGliYXJlbmFfYmVuY2guYnBmLm86ICQoTElCQVJFTkFfQkVOQ0hfT0JKRUNUUylcXG4rXFx0JChjYWxsIG1zZyxHRU4tT0JKLGxpYmFyZW5hLCRAKVxcbitcXHQkKFEpJChCUEZUT09MKSBnZW4gb2JqZWN0ICRAICReXFxuK1xcbiAlX2FzYW4uYnBmLm86ICUuYnBmLmNcXG4gXFx0JChjYWxsIG1zZyxDTE5HLUJQRixsaWJhcmVuYSwkQClcXG4gXFx0JChRKSQoQ0xBTkcpICQoQlBGX0NGTEFHUykgJChBU0FOX0ZMQUdTKSAtREJQRl9BUkVOQV9BU0FOICQoQlBGX1RBUkdFVF9FTkRJQU4pIC1jICRcXHUwMDNjIC1vICRAXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9iZW5jaHMvYmVuY2hfbWFsbG9jLmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2JlbmNocy9iZW5jaF9tYWxsb2MuYnBmLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmUwNjM5N2RjOWE0MGRcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2JlbmNocy9iZW5jaF9tYWxsb2MuYnBmLmNcXG5AQCAtMCwwICsxLDUxIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBMR1BMLTIuMSBPUiBCU0QtMi1DbGF1c2VcXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xcbisjaW5jbHVkZSBcXHUwMDNjbGliYXJlbmEvY29tbW9uLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGliYXJlbmEvYXNhbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGliYXJlbmEvYnVkZHkuaFxcdTAwM2VcXG4rXFxuK3UzMiBiZW5jaF9hbGxvY19zaXplO1xcbit1MzIgYmVuY2hfbmFsbG9jcztcXG4rbG9uZyBiZW5jaF9oaXRzO1xcbitsb25nIGJlbmNoX2R1cmF0aW9uX25zO1xcbitcXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4raW50IGJlbmNoX21hbGxvYyh2b2lkKVxcbit7XFxuK1xcdHZvaWQgX19hcmVuYSAqbWVtO1xcbitcXHR1NjQgc3RhcnRfbnM7XFxuK1xcdHUzMiBpO1xcbitcXG4rXFx0c3RhcnRfbnMgPSBicGZfa3RpbWVfZ2V0X25zKCk7XFxuK1xcdGZvciAoaSA9IHplcm87IGkgXFx1MDAzYyBiZW5jaF9uYWxsb2NzIFxcdTAwMjZcXHUwMDI2IGNhbl9sb29wOyBpKyspIHtcXG4rXFx0XFx0bWVtID0gYXJlbmFfbWFsbG9jKGJlbmNoX2FsbG9jX3NpemUpO1xcbitcXHRcXHRpZiAoIW1lbSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFxuK1xcdF9fc3luY19hZGRfYW5kX2ZldGNoKFxcdTAwMjZiZW5jaF9kdXJhdGlvbl9ucyxcXG4rXFx0XFx0XFx0ICAgICBicGZfa3RpbWVfZ2V0X25zKCkgLSBzdGFydF9ucyk7XFxuK1xcdF9fc3luY19hZGRfYW5kX2ZldGNoKFxcdTAwMjZiZW5jaF9oaXRzLCBpKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK2ludCBiZW5jaF9jYWxsb2Modm9pZClcXG4re1xcbitcXHR2b2lkIF9fYXJlbmEgKm1lbTtcXG4rXFx0dTY0IHN0YXJ0X25zO1xcbitcXHR1MzIgaTtcXG4rXFxuK1xcdHN0YXJ0X25zID0gYnBmX2t0aW1lX2dldF9ucygpO1xcbitcXHRmb3IgKGkgPSB6ZXJvOyBpIFxcdTAwM2MgYmVuY2hfbmFsbG9jcyBcXHUwMDI2XFx1MDAyNiBjYW5fbG9vcDsgaSsrKSB7XFxuK1xcdFxcdG1lbSA9IGFyZW5hX2NhbGxvYygxLCBiZW5jaF9hbGxvY19zaXplKTtcXG4rXFx0XFx0aWYgKCFtZW0pXFxuK1xcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRfX3N5bmNfYWRkX2FuZF9mZXRjaChcXHUwMDI2YmVuY2hfZHVyYXRpb25fbnMsXFxuK1xcdFxcdFxcdCAgICAgYnBmX2t0aW1lX2dldF9ucygpIC0gc3RhcnRfbnMpO1xcbitcXHRfX3N5bmNfYWRkX2FuZF9mZXRjaChcXHUwMDI2YmVuY2hfaGl0cywgaSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9zcGluX2xvY2suaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9zcGluX2xvY2suaFxcbmluZGV4IGFlNmI3MmQxNWJiNjcuLjg3MmZhMjBmMjlhNTkgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX3NwaW5fbG9jay5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX3NwaW5fbG9jay5oXFxuQEAgLTEsNCArMSw0IEBAXFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIEJTRC0yLUNsYXVzZVxcbiAvKiBDb3B5cmlnaHQgKGMpIDIwMjUgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXFxuICNpZm5kZWYgQlBGX0FSRU5BX1NQSU5fTE9DS19IXFxuICNkZWZpbmUgQlBGX0FSRU5BX1NQSU5fTE9DS19IXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hdG9taWMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hdG9taWMuaFxcbmluZGV4IDQzYzMwNmUxN2YxOTguLjY1NTgyYjIwMTBhZDQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2F0b21pYy5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2F0b21pYy5oXFxuQEAgLTEsNCArMSw0IEBAXFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIEJTRC0yLUNsYXVzZVxcbiAvKiBDb3B5cmlnaHQgKGMpIDIwMjUgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXFxuICNpZm5kZWYgQlBGX0FUT01JQ19IXFxuICNkZWZpbmUgQlBGX0FUT01JQ19IXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9tYXlfZ290by5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX21heV9nb3RvLmhcXG5pbmRleCA5YmE5MDY4OWQ2YmEyLi5iMzJhNDIwZDRlMWFkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9tYXlfZ290by5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX21heV9nb3RvLmhcXG5AQCAtMSwzICsxLDQgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IExHUEwtMi4xIE9SIEJTRC0yLUNsYXVzZVxcbiAjcHJhZ21hIG9uY2VcXG4gXFxuIC8qXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2JpdG1hcC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvYml0bWFwLmhcXG5pbmRleCBlMjQzMWVhNmZkZDY4Li4xNjNlMmI4M2Q5NDMxIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2JpdG1hcC5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvYml0bWFwLmhcXG5AQCAtMSw1ICsxLDggQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IExHUEwtMi4xIE9SIEJTRC0yLUNsYXVzZVxcbiAjcHJhZ21hIG9uY2VcXG4gXFxuKyNpbmNsdWRlIFxcdTAwM2NicGZfYXRvbWljLmhcXHUwMDNlXFxuK1xcbiAjZGVmaW5lIEJJVFNfUEVSX0JZVEVcXHRcXHQ4XFxuICNkZWZpbmUgQllURVNfVE9fQklUUyhuYilcXHQoKG5iKSAqIEJJVFNfUEVSX0JZVEUpXFxuIFxcbkBAIC0xNSwxMSArMTgsOCBAQCBzdHJ1Y3QgYXJlbmFfYml0bWFwIHtcXG4gc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICpibXBfYWxsb2Moc2l6ZV90IGJpdHMpO1xcbiB2b2lkIGJtcF9mcmVlKHN0cnVjdCBhcmVuYV9iaXRtYXAgX19hcmVuYSAqYm1wKTtcXG4gXFxuLXZvaWQgX19ibXBfc2V0X2JpdCh1MzIgYml0LCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcCk7XFxuLXZvaWQgX19ibXBfY2xlYXJfYml0KHUzMiBiaXQsIHN0cnVjdCBhcmVuYV9iaXRtYXAgX19hcmVuYSAqYm1wKTtcXG4gdm9pZCBibXBfc2V0X2JpdCh1MzIgYml0LCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcCk7XFxuIHZvaWQgYm1wX2NsZWFyX2JpdCh1MzIgYml0LCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcCk7XFxuLWJvb2wgYm1wX3Rlc3RfYml0KHUzMiBiaXQsIHN0cnVjdCBhcmVuYV9iaXRtYXAgX19hcmVuYSAqYm1wKTtcXG4gYm9vbCBibXBfdGVzdF9hbmRfY2xlYXJfYml0KHUzMiBiaXQsIHN0cnVjdCBhcmVuYV9iaXRtYXAgX19hcmVuYSAqYm1wKTtcXG4gYm9vbCBibXBfdGVzdF9hbmRfc2V0X2JpdCh1MzIgYml0LCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcCk7XFxuIFxcbkBAIC0zMiwzICszMiwyNyBAQCB2b2lkIGJtcF9jb3B5KHNpemVfdCBiaXRzLCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmRzdCwgc3RydWN0IGFyZW5hX2JpdG1hcFxcbiBib29sIGJtcF9pbnRlcnNlY3RzKHNpemVfdCBiaXRzLCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmFyZzEsIHN0cnVjdCBhcmVuYV9iaXRtYXAgX19hcmVuYSAqYXJnMik7XFxuIGJvb2wgYm1wX3N1YnNldChzaXplX3QgYml0cywgc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICpiaWcsIHN0cnVjdCBhcmVuYV9iaXRtYXAgX19hcmVuYSAqc21hbGwpO1xcbiB2b2lkIGJtcF9wcmludChzaXplX3QgYml0cywgc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICpibXApO1xcbitcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZVxcbit2b2lkIF9fYm1wX3NldF9iaXQodTMyIGJpdCwgc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICpibXApXFxuK3tcXG4rXFx0dm9sYXRpbGUgdTY0IF9fYXJlbmEgKndvcmQgPSBcXHUwMDI2Ym1wLVxcdTAwM2ViaXRzW0JJVF9XT1JEKGJpdCldO1xcbitcXG4rXFx0KndvcmQgfD0gQklUX01BU0soYml0KTtcXG4rfVxcbitcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZVxcbit2b2lkIF9fYm1wX2NsZWFyX2JpdCh1MzIgYml0LCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcClcXG4re1xcbitcXHR2b2xhdGlsZSB1NjQgX19hcmVuYSAqd29yZCA9IFxcdTAwMjZibXAtXFx1MDAzZWJpdHNbQklUX1dPUkQoYml0KV07XFxuK1xcbitcXHQqd29yZCBcXHUwMDI2PSB+QklUX01BU0soYml0KTtcXG4rfVxcbitcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZVxcbitib29sIGJtcF90ZXN0X2JpdCh1MzIgYml0LCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcClcXG4re1xcbitcXHR1NjQgd29yZCA9IFJFQURfT05DRShibXAtXFx1MDAzZWJpdHNbQklUX1dPUkQoYml0KV0pO1xcbitcXG4rXFx0cmV0dXJuIHdvcmQgXFx1MDAyNiBCSVRfTUFTSyhiaXQpO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2NvbW1vbi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvY29tbW9uLmhcXG5pbmRleCA5MzFhY2U5YTQ5ZTJiLi5hNjIyMDM1NWE2OTc1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2NvbW1vbi5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvY29tbW9uLmhcXG5AQCAtNDksNiArNDksNyBAQCBleHRlcm4gdm9sYXRpbGUgdTY0IGFzYW5fdmlvbGF0ZWQ7XFxuIGludCBhcmVuYV9mbHMoX191NjQgd29yZCk7XFxuIFxcbiB2b2lkIF9fYXJlbmEgKmFyZW5hX21hbGxvYyhzaXplX3Qgc2l6ZSk7XFxuK3ZvaWQgX19hcmVuYSAqYXJlbmFfY2FsbG9jKHNpemVfdCBuY291bnQsIHNpemVfdCBzaXplKTtcXG4gdm9pZCBhcmVuYV9mcmVlKHZvaWQgX19hcmVuYSAqcHRyKTtcXG4gXFxuIC8qXFxuQEAgLTYxLDYgKzYyLDc2IEBAIHZvaWQgYXJlbmFfZnJlZSh2b2lkIF9fYXJlbmEgKnB0cik7XFxuICAqL1xcbiAjZGVmaW5lIGFyZW5hX3N1YnByb2dfaW5pdCgpIGRvIHsgYXNtIHZvbGF0aWxlIChcXFwiXFxcIiA6OiBcXFwiclxcXCIoXFx1MDAyNmFyZW5hKSk7IH0gd2hpbGUgKDApXFxuIFxcbisvKlxcbisgKiBCUEYgZG9lcyBub3QgY3VycmVudGx5IHN1cHBvcnQgdGhlIG1lbXNldCBpbnRyaW5zaWNzLiBmb3IgbGFyZ2VcXG4rICogc2VxdWVudGlhbCBjb3BpZXMsIG9yIGFzc2lnbm1lbnRzIG9mIGxhcmdlIGRhdGEgc3RydWN0dXJlcyxcXG4rICogdGhlIGZyb250ZW5kIHdpbGwgZ2VuZXJhdGUgYW4gaW50cmluc2ljIHRoYXQgY2F1c2VzIHRoZSBCUEZcXG4rICogYmFja2VuZCB0byBleGl0IGR1ZSB0byBhIG1pc3NpbmcgaW1wbGVtZW50YXRpb24uIFByb3ZpZGVcXG4rICogaW1wbGVtZW50YXRpb25zIGZvciB0aGUgaW50cmluc2ljLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSBpbnQgYXJlbmFfbWVtc2V0KHM4IF9fYXJlbmEgKmRzdCwgczggdmFsLCBzaXplX3Qgc2l6ZSlcXG4re1xcbitcXHRzaXplX3QgaGVhZGFsaWduO1xcbitcXHRzaXplX3QgdGFpbGFsaWduO1xcbitcXHR1OCB1dmFsID0gKHU4KXZhbDtcXG4rXFx0c2l6ZV90IHZhbDY0O1xcbitcXHRzaXplX3QgaTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIENhbGN1bGF0ZSBob3cgbWFueSBieXRlcyB0byB0aGUgbmV4dCB3b3JkLWFsaWduZWQgb25lLlxcbitcXHQgKiBXZSBnZXQgdGhpcyBieSB0cnVuY2F0aW5nIHRoZSAycyBjb21wbGVtZW50IG9mIHRoZVxcbitcXHQgKiBwb2ludGVyIHRvIHRoZSBsYXN0IDMgYml0cy4gSW50dWl0aXZlbHksIHNpbmNlXFxuK1xcdCAqXFxuK1xcdCAqIFRoZSBOIExTQnMgb2YgZHN0IGFuZCAtZHN0IGFkZCB0byAxIFxcdTAwM2NcXHUwMDNjIE4sIHdoaWNoXFxuK1xcdCAqIGlzIHdoeSBkc3QgKyAoLWRzdCkgPSAweDBVTEwgdGhyb3VnaCBvdmVyZmxvdy4gU28gdGhlXFxuK1xcdCAqIGxhc3QgTiA9IDMgYml0cyBvZiB0aGUgbmVnYXRpdmUgYXJlIHRoZSBudW1iZXIgb2ZcXG4rXFx0ICogYnl0ZXMgdG8gYWxpZ24gZHN0IG9uIHRoZSBsYXN0IDMgYml0cy5cXG4rXFx0ICpcXG4rXFx0ICovXFxuK1xcdGhlYWRhbGlnbiA9IC0odTY0KWRzdCBcXHUwMDI2IChzaXplb2YodTY0KSAtIDEpO1xcbitcXHRpZiAoIWhlYWRhbGlnbiB8fCBzaXplIFxcdTAwM2MgaGVhZGFsaWduKVxcbitcXHRcXHRnb3RvIHB0cmFsaWduZWQ7XFxuK1xcbitcXHRmb3IgKGkgPSB6ZXJvOyBpIFxcdTAwM2MgaGVhZGFsaWduIFxcdTAwMjZcXHUwMDI2IGNhbl9sb29wOyBpKyspXFxuK1xcdFxcdGRzdFtpXSA9IHV2YWw7XFxuK1xcbitcXHRkc3QgKz0gaGVhZGFsaWduO1xcbitcXHRzaXplIC09IGhlYWRhbGlnbjtcXG4rXFxuK3B0cmFsaWduZWQ6XFxuK1xcbitcXHQvKlxcbitcXHQgKiBNYWtlIGEgd29yZCB3aXRoIGFsbCBieXRlcyBlcXVhbCB0byB0aGUgYnl0ZSB3ZSBhcmUgc2V0dGluZy5cXG4rXFx0ICogU2luY2UgMSBieXRlIC1cXHUwMDNlIDIgaGV4IGRpZ2l0cy5cXG4rXFx0ICpcXG4rXFx0ICogU2hpZnRpbmcgdGhlIHZhbHVlIGJ5IGEgMCBieXRlcyBpcyBlcXVhbCB0byBtdWx0aXBsaWNhdGlvbiBieSAweDAxXFxuK1xcdCAqIFNoaWZ0aW5nIGJ5IDEgYnl0ZXMgaXMgZXF1YWwgdG8gbXVsdGlwbGljYXRpb24gYnkgMHgwMSBcXHUwMDNjXFx1MDAzYyA4LFxcbitcXHQgKiAuLi5cXG4rXFx0ICogU2hpZnRpbmcgYnkgNyBieXRlcyBpcyBlcXVhbCB0byBtdWx0aXBsaWNhdGlvbiBieSAweDAxIFxcdTAwM2NcXHUwMDNjIDU2LlxcbitcXHQgKlxcbitcXHQgKiBFbmQgb3BlcmF0aW9uIHRvIHJlcGxpY2F0ZSB0aGUgYnl0ZSBpbnRvIGFsbCB0aGUgYnl0ZXMgb2YgYSB3b3JkXFxuK1xcdCAqIGlzIChzaW5jZSBhIHwgYiA9IGEgKyBiIHdoZW4gYSBcXHUwMDI2IGIgPT0gMCk6XFxuK1xcdCAqXFxuK1xcdCAqIHZhbCArIHZhbCAqICgxVUwgXFx1MDAzY1xcdTAwM2MgOCkgKyB2YWwgKiAoMVVMIFxcdTAwM2NcXHUwMDNjIDE2KSArIC4uICsgdmFsICogKDFVTCBcXHUwMDNjXFx1MDAzYyA1NilcXG4rXFx0ICogPSB2YWwgKiAoMVVMIFxcdTAwM2NcXHUwMDNjIDU2ICsgMVVMIFxcdTAwM2NcXHUwMDNjIDQ4ICsgLi4uICsgMVVMIFxcdTAwM2NcXHUwMDNjIDApXFxuK1xcdCAqID0gdmFsICogKDB4MDFVTCBcXHUwMDNjXFx1MDAzYyA1NiB8IDB4MDFVTCBcXHUwMDNjXFx1MDAzYyA0OCArIC4uLiArIDFVTCBcXHUwMDNjXFx1MDAzYyAwKVxcbitcXHQgKiA9IHZhbCAqIDB4MDEwMSAwMTAxIDAxMDEgMDEwMVxcbitcXHQgKi9cXG4rXFx0dmFsNjQgPSAodTgpdmFsICogMHgwMTAxMDEwMTAxMDEwMTAxVUxMO1xcbitcXG4rXFx0LyogUG9pbnRlciBpcyBub3cgYWxpZ25lZCwgdXNlIHdvcmQtYWxpZ25lZCBhc3NpZ25tZW50cy4gKi9cXG4rXFx0Zm9yIChpID0gemVybzsgaSBcXHUwMDNjIHNpemUgLyBzaXplb2YodTY0KSBcXHUwMDI2XFx1MDAyNiBjYW5fbG9vcDsgaSsrKVxcbitcXHRcXHQoKHU2NCBfX2FyZW5hICopZHN0KVtpXSA9IHZhbDY0O1xcbitcXG4rXFx0LyogR28gYmFjayB0byBieXRlLWFsaWduZWQgZm9yIHRoZSB0YWlsLiAqL1xcbitcXHR0YWlsYWxpZ24gPSBzaXplICUgc2l6ZW9mKHU2NCk7XFxuK1xcdGRzdCArPSBzaXplIC0gdGFpbGFsaWduO1xcbitcXHRmb3IgKGkgPSB6ZXJvOyBpIFxcdTAwM2MgdGFpbGFsaWduIFxcdTAwMjZcXHUwMDI2IGNhbl9sb29wOyBpKyspXFxuK1xcdFxcdGRzdFtpXSA9IHV2YWw7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gI2Vsc2UgLyogISBfX0JQRl9fICovXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjc3RkaW50LmhcXHUwMDNlXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9iaXRtYXAuYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYml0bWFwLmJwZi5jXFxuaW5kZXggNzYzMTlhNTI5ZjAyYi4uZTY2YjNhMjZjYTNkNiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYml0bWFwLmJwZi5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2JpdG1hcC5icGYuY1xcbkBAIC0xLDMgKzEsNiBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTEdQTC0yLjEgT1IgQlNELTItQ2xhdXNlXFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cXG4rXFxuICNpbmNsdWRlIFxcdTAwM2NsaWJhcmVuYS9jb21tb24uaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaWJhcmVuYS9hc2FuLmhcXHUwMDNlXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYXNhbi5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYXNhbi5icGYuY1xcbmluZGV4IDUxMzVkNWM3MmE0NmQuLmRlNjU2YjY5ZDEzYWYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jXFxuQEAgLTEwMywyMyArMTAzLDYgQEAgdm9sYXRpbGUgYm9vbCBhc2FuX2luaXRlZCA9IGZhbHNlO1xcbiAgKi9cXG4gdm9sYXRpbGUgYm9vbCBhc2FuX3JlcG9ydF9vbmNlID0gZmFsc2U7XFxuIFxcbi0vKlxcbi0gKiBCUEYgZG9lcyBub3QgY3VycmVudGx5IHN1cHBvcnQgdGhlIG1lbXNldC9tZW1jcHkvbWVtY21wIGludHJpbnNpY3MuXFxuLSAqIEZvciBsYXJnZSBzZXF1ZW50aWFsIGNvcGllcywgb3IgYXNzaWdubWVudHMgb2YgbGFyZ2UgZGF0YSBzdHJ1Y3R1cmVzLFxcbi0gKiB0aGUgZnJvbnRlbmQgd2lsbCBnZW5lcmF0ZSBhbiBpbnRyaW5zaWMgdGhhdCBjYXVzZXMgdGhlIEJQRiBiYWNrZW5kXFxuLSAqIHRvIGV4aXQgZHVlIHRvIGEgbWlzc2luZyBpbXBsZW1lbnRhdGlvbi4gUHJvdmlkZSBhIHNpbXBsZSBpbXBsZW1lbnRhdGlvblxcbi0gKiBqdXN0IGZvciBtZW1zZXQgdG8gdXNlIGl0IGZvciBwb2lzb25pbmcvdW5wb2lzb25pbmcgdGhlIG1hcC5cXG4tICovXFxuLV9fd2VhayBpbnQgYXNhbl9tZW1zZXQoczggX19hcmVuYSAqZHN0LCBzOCB2YWwsIHNpemVfdCBzaXplKVxcbi17XFxuLVxcdHNpemVfdCBpO1xcbi1cXG4tXFx0Zm9yIChpID0gemVybzsgaSBcXHUwMDNjIHNpemUgXFx1MDAyNlxcdTAwMjYgY2FuX2xvb3A7IGkrKylcXG4tXFx0XFx0ZHN0W2ldID0gdmFsO1xcbi1cXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuIC8qIFZhbGlkYXRlIGEgMS1ieXRlIGFjY2VzcywgYWx3YXlzIHdpdGhpbiBhIHNpbmdsZSBieXRlLiAqL1xcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgbWVtb3J5X2lzX3BvaXNvbmVkXzEoczggX19hcmVuYSAqYWRkcilcXG4ge1xcbkBAIC00MjIsNyArNDA1LDcgQEAgX19oaWRkZW4gX19ub2FzYW4gaW50IGFzYW5fcG9pc29uKHZvaWQgX19hcmVuYSAqYWRkciwgczggdmFsLCBzaXplX3Qgc2l6ZSlcXG4gXFx0c2hhZG93ID0gbWVtX3RvX3NoYWRvdyhhZGRyKTtcXG4gXFx0bGVuID0gc2l6ZSBcXHUwMDNlXFx1MDAzZSBBU0FOX1NIQURPV19TSElGVDtcXG4gXFxuLVxcdGFzYW5fbWVtc2V0KHNoYWRvdywgdmFsLCBsZW4pO1xcbitcXHRhcmVuYV9tZW1zZXQoc2hhZG93LCB2YWwsIGxlbik7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC00NjMsNyArNDQ2LDcgQEAgX19oaWRkZW4gX19ub2FzYW4gaW50IGFzYW5fdW5wb2lzb24odm9pZCBfX2FyZW5hICphZGRyLCBzaXplX3Qgc2l6ZSlcXG4gXFx0c2hhZG93ID0gbWVtX3RvX3NoYWRvdyhhZGRyKTtcXG4gXFx0bGVuID0gc2l6ZSBcXHUwMDNlXFx1MDAzZSBBU0FOX1NIQURPV19TSElGVDtcXG4gXFxuLVxcdGFzYW5fbWVtc2V0KHNoYWRvdywgMCwgbGVuKTtcXG4rXFx0YXJlbmFfbWVtc2V0KHNoYWRvdywgMCwgbGVuKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIElmIHdlIGFyZSBhbGxvY2F0aW5nIGEgbm9uLWdyYW51bGUgYWxpZ25lZCByZWdpb24sIHdlIG5lZWQgdG8gYWRqdXN0XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYml0bWFwLmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9iaXRtYXAuYnBmLmNcXG5pbmRleCA1ZmY4ZTY4OGRkYzc2Li4wMzkwZjIwY2UzNjZkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYml0bWFwLmJwZi5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9iaXRtYXAuYnBmLmNcXG5AQCAtMzQsMjQgKzM0LDYgQEAgdm9pZCBibXBfZnJlZShzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcClcXG4gXFx0YXJlbmFfZnJlZShibXApO1xcbiB9XFxuIFxcbi1fX3dlYWtcXG4tdm9pZCBfX2JtcF9zZXRfYml0KHUzMiBiaXQsIHN0cnVjdCBhcmVuYV9iaXRtYXAgX19hcmVuYSAqYm1wKVxcbi17XFxuLVxcdGJtcC1cXHUwMDNlYml0c1tCSVRfV09SRChiaXQpXSB8PSBCSVRfTUFTSyhiaXQpO1xcbi19XFxuLVxcbi1fX3dlYWtcXG4tdm9pZCBfX2JtcF9jbGVhcl9iaXQodTMyIGJpdCwgc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICpibXApXFxuLXtcXG4tXFx0Ym1wLVxcdTAwM2ViaXRzW0JJVF9XT1JEKGJpdCldIFxcdTAwMjY9IH5CSVRfTUFTSyhiaXQpO1xcbi19XFxuLVxcbi1fX3dlYWtcXG4tYm9vbCBibXBfdGVzdF9iaXQodTMyIGJpdCwgc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICpibXApXFxuLXtcXG4tXFx0cmV0dXJuIGJtcC1cXHUwMDNlYml0c1tCSVRfV09SRChiaXQpXSBcXHUwMDI2IEJJVF9NQVNLKGJpdCk7XFxuLX1cXG4tXFxuIF9fd2Vha1xcbiBib29sIGJtcF90ZXN0X2FuZF9jbGVhcl9iaXQodTMyIGJpdCwgc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICpibXApXFxuIHtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9idWRkeS5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYnVkZHkuYnBmLmNcXG5pbmRleCBjNjc0ZWU1Y2ZjYzFkLi4yNDkwYWIxMzk2ZGUwIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYnVkZHkuYnBmLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2J1ZGR5LmJwZi5jXFxuQEAgLTUsNiArNSw4IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaWJhcmVuYS9hc2FuLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaWJhcmVuYS9idWRkeS5oXFx1MDAzZVxcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZl9hcmVuYV9zcGluX2xvY2suaFxcdTAwM2VcXG4rXFxuIC8qXFxuICAqIEJ1ZGR5IGFsbG9jYXRvciBhcmVuYS1iYXNlZCBpbXBsZW1lbnRhdGlvbi5cXG4gICpcXG5AQCAtNDUsMTUgKzQ3LDggQEAgZW51bSB7XFxuIFxcdEJVRERZX0NIVU5LX1BBR0VTXFx0PSBCVUREWV9DSFVOS19CWVRFUyAvIF9fUEFHRV9TSVpFXFxuIH07XFxuIFxcbi1zdGF0aWMgaW5saW5lIGludCBidWRkeV9sb2NrKHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSlcXG4te1xcbi1cXHRyZXR1cm4gYXJlbmFfc3Bpbl9sb2NrKFxcdTAwMjZidWRkeS1cXHUwMDNlbG9jayk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBidWRkeV91bmxvY2soc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KVxcbi17XFxuLVxcdGFyZW5hX3NwaW5fdW5sb2NrKFxcdTAwMjZidWRkeS1cXHUwMDNlbG9jayk7XFxuLX1cXG4rI2RlZmluZSBidWRkeV9sb2NrKGJ1ZGR5LCBmbGFncykgKGFyZW5hX3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjYoYnVkZHkpLVxcdTAwM2Vsb2NrLCAoZmxhZ3MpKSlcXG4rI2RlZmluZSBidWRkeV91bmxvY2soYnVkZHksIGZsYWdzKSAoYXJlbmFfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2KGJ1ZGR5KS1cXHUwMDNlbG9jaywgKGZsYWdzKSkpXFxuIFxcbiAvKlxcbiAgKiBSZXNlcnZlIHBhcnQgb2YgdGhlIGFyZW5hIGFkZHJlc3Mgc3BhY2UgZm9yIHRoZSBhbGxvY2F0b3IuIFdlIHVzZVxcbkBAIC0zODUsNiArMzgwLDcgQEAgc3RhdGljIHN0cnVjdCBidWRkeV9jaHVuayBfX2FyZW5hICpidWRkeV9jaHVua19nZXQoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KVxcbiB7XFxuIFxcdHU2NCBvcmRlciwgb3JkLCBtaW5fb3JkZXIsIG1heF9vcmRlcjtcXG4gXFx0c3RydWN0IGJ1ZGR5X2NodW5rIF9fYXJlbmEgICpjaHVuaztcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFx0c2l6ZV90IGxlZnQ7XFxuIFxcdGludCBwb3dlcjI7XFxuIFxcdHU2NCB2YWRkcjtcXG5AQCAtNDE2LDcgKzQxMiw3IEBAIHN0YXRpYyBzdHJ1Y3QgYnVkZHlfY2h1bmsgX19hcmVuYSAqYnVkZHlfY2h1bmtfZ2V0KHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSlcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChidWRkeV9sb2NrKGJ1ZGR5KSkge1xcbitcXHRpZiAoYnVkZHlfbG9jayhidWRkeSwgZmxhZ3MpKSB7XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIFdlIGNhbm5vdCByZWNsYWltIHRoZSB2YWRkciBzcGFjZSwgYnV0IHRoYXQgaXMgb2sgLSB0aGlzXFxuIFxcdFxcdCAqIG9wZXJhdGlvbiBzaG91bGQgYWx3YXlzIHN1Y2NlZWQuIFRoZSBlcnJvciBwYXRoIGlzIHRvIGNhdGNoXFxuQEAgLTUyMCw3ICs1MTYsNyBAQCBzdGF0aWMgc3RydWN0IGJ1ZGR5X2NodW5rIF9fYXJlbmEgKmJ1ZGR5X2NodW5rX2dldChzdHJ1Y3QgYnVkZHkgX19hcmVuYSAqYnVkZHkpXFxuIFxcdFxcdFxcdGFyZW5hX3N0ZGVycihcXG4gXFx0XFx0XFx0XFx0XFxcImNodW5rIGhhcyBzaXplIG9mIDB4JWx4IGJ5dGVzIChsZWZ0ICVseCBieXRlcylcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdHNpemVvZigqY2h1bmspLCBsZWZ0KTtcXG4tXFx0XFx0XFx0YnVkZHlfdW5sb2NrKGJ1ZGR5KTtcXG4rXFx0XFx0XFx0YnVkZHlfdW5sb2NrKGJ1ZGR5LCBmbGFncyk7XFxuIFxcbiBcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFx0XFx0fVxcbkBAIC01MzEsNyArNTI3LDcgQEAgc3RhdGljIHN0cnVjdCBidWRkeV9jaHVuayBfX2FyZW5hICpidWRkeV9jaHVua19nZXQoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KVxcbiBcXHRcXHRvcmRlciA9IChwb3dlcjIgXFx1MDAzZT0gQlVERFlfTUlOX0FMTE9DX1NISUZUKSA/IHBvd2VyMiAtIEJVRERZX01JTl9BTExPQ19TSElGVCA6IDA7XFxuIFxcbiBcXHRcXHRpZiAoaWR4X3NldF9hbGxvY2F0ZWQoY2h1bmssIGlkeCwgdHJ1ZSkpIHtcXG4tXFx0XFx0XFx0YnVkZHlfdW5sb2NrKGJ1ZGR5KTtcXG4rXFx0XFx0XFx0YnVkZHlfdW5sb2NrKGJ1ZGR5LCBmbGFncyk7XFxuIFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHRcXHR9XFxuIFxcbkBAIC01NDcsNyArNTQzLDcgQEAgc3RhdGljIHN0cnVjdCBidWRkeV9jaHVuayBfX2FyZW5hICpidWRkeV9jaHVua19nZXQoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KVxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0bWluX29yZGVyID0gbGVmdCA/IG9yZGVyICsgMSA6IG9yZGVyO1xcbiBcXHRcXHRpZiAoYWRkX2xlZnRvdmVyc190b19mcmVlbGlzdChjaHVuaywgaWR4LCBtaW5fb3JkZXIsIG1heF9vcmRlcikpIHtcXG4tXFx0XFx0XFx0YnVkZHlfdW5sb2NrKGJ1ZGR5KTtcXG4rXFx0XFx0XFx0YnVkZHlfdW5sb2NrKGJ1ZGR5LCBmbGFncyk7XFxuIFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHRcXHR9XFxuIFxcbkBAIC01NTYsNyArNTUyLDcgQEAgc3RhdGljIHN0cnVjdCBidWRkeV9jaHVuayBfX2FyZW5hICpidWRkeV9jaHVua19nZXQoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KVxcbiBcXHRcXHRtYXhfb3JkZXIgPSBvcmRlcjtcXG4gXFx0fVxcbiBcXG4tXFx0YnVkZHlfdW5sb2NrKGJ1ZGR5KTtcXG4rXFx0YnVkZHlfdW5sb2NrKGJ1ZGR5LCBmbGFncyk7XFxuIFxcbiBcXHRyZXR1cm4gY2h1bms7XFxuIH1cXG5AQCAtNTY0LDYgKzU2MCw3IEBAIHN0YXRpYyBzdHJ1Y3QgYnVkZHlfY2h1bmsgX19hcmVuYSAqYnVkZHlfY2h1bmtfZ2V0KHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSlcXG4gX193ZWFrIGludCBidWRkeV9pbml0KHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSlcXG4ge1xcbiBcXHRzdHJ1Y3QgYnVkZHlfY2h1bmsgX19hcmVuYSAqY2h1bms7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHRpZiAoIWFzYW5fcmVhZHkoKSlcXG5AQCAtNTc5LDcgKzU3Niw3IEBAIF9fd2VhayBpbnQgYnVkZHlfaW5pdChzdHJ1Y3QgYnVkZHkgX19hcmVuYSAqYnVkZHkpXFxuIFxcbiBcXHRjaHVuayA9IGJ1ZGR5X2NodW5rX2dldChidWRkeSk7XFxuIFxcbi1cXHRpZiAoYnVkZHlfbG9jayhidWRkeSkpIHtcXG4rXFx0aWYgKGJ1ZGR5X2xvY2soYnVkZHksIGZsYWdzKSkge1xcbiBcXHRcXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcXHUwMDI2YXJlbmEsIGNodW5rLCBCVUREWV9DSFVOS19QQUdFUyk7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuQEAgLTU5MSw3ICs1ODgsNyBAQCBfX3dlYWsgaW50IGJ1ZGR5X2luaXQoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KVxcbiBcXHQvKiBQdXQgdGhlIGNodW5rIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpc3QuICovXFxuIFxcdGJ1ZGR5LVxcdTAwM2VmaXJzdF9jaHVuayA9IGNodW5rO1xcbiBcXG4tXFx0YnVkZHlfdW5sb2NrKGJ1ZGR5KTtcXG4rXFx0YnVkZHlfdW5sb2NrKGJ1ZGR5LCBmbGFncyk7XFxuIFxcbiBcXHRyZXR1cm4gY2h1bmsgPyAwIDogLUVOT01FTTtcXG4gfVxcbkBAIC03MzAsOSArNzI3LDEwIEBAIHN0YXRpYyB1NjQgYnVkZHlfYWxsb2NfZnJvbV9leGlzdGluZ19jaHVua3Moc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5LCBpbnQgb3JkXFxuICAqL1xcbiBzdGF0aWMgdTY0IGJ1ZGR5X2FsbG9jX2Zyb21fbmV3X2NodW5rKHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSwgc3RydWN0IGJ1ZGR5X2NodW5rIF9fYXJlbmEgKmNodW5rLCBpbnQgb3JkZXIpXFxuIHtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFx0dTY0IGFkZHJlc3M7XFxuIFxcbi1cXHRpZiAoYnVkZHlfbG9jayhidWRkeSkpXFxuK1xcdGlmIChidWRkeV9sb2NrKGJ1ZGR5LCBmbGFncykpXFxuIFxcdFxcdHJldHVybiAodTY0KU5VTEw7XFxuIFxcbiBcXG5AQCAtNzQ1LDcgKzc0Myw3IEBAIHN0YXRpYyB1NjQgYnVkZHlfYWxsb2NfZnJvbV9uZXdfY2h1bmsoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5LCBzdHJ1Y3QgYnVkZHlfXFxuIFxcbiBcXHRhZGRyZXNzID0gYnVkZHlfY2h1bmtfYWxsb2MoYnVkZHktXFx1MDAzZWZpcnN0X2NodW5rLCBvcmRlcik7XFxuIFxcbi1cXHRidWRkeV91bmxvY2soYnVkZHkpO1xcbitcXHRidWRkeV91bmxvY2soYnVkZHksIGZsYWdzKTtcXG4gXFxuIFxcdHJldHVybiAodTY0KWFkZHJlc3M7XFxuIH1cXG5AQCAtNzU0LDYgKzc1Miw3IEBAIHZvaWQgX19hcmVuYSAqYnVkZHlfYWxsb2Moc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5LCBzaXplX3Qgc2l6ZSlcXG4ge1xcbiBcXHR2b2lkIF9fYXJlbmEgKmFkZHJlc3MgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgYnVkZHlfY2h1bmsgX19hcmVuYSAqY2h1bms7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcdGludCBvcmRlcjtcXG4gXFxuIFxcdGlmICghYnVkZHkpXFxuQEAgLTc2NSwxMSArNzY0LDExIEBAIHZvaWQgX19hcmVuYSAqYnVkZHlfYWxsb2Moc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5LCBzaXplX3Qgc2l6ZSlcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChidWRkeV9sb2NrKGJ1ZGR5KSlcXG4rXFx0aWYgKGJ1ZGR5X2xvY2soYnVkZHksIGZsYWdzKSlcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcbiBcXHRhZGRyZXNzID0gKHU4IF9fYXJlbmEgKilidWRkeV9hbGxvY19mcm9tX2V4aXN0aW5nX2NodW5rcyhidWRkeSwgb3JkZXIpO1xcbi1cXHRidWRkeV91bmxvY2soYnVkZHkpO1xcbitcXHRidWRkeV91bmxvY2soYnVkZHksIGZsYWdzKTtcXG4gXFx0aWYgKGFkZHJlc3MpXFxuIFxcdFxcdGdvdG8gZG9uZTtcXG4gXFxuQEAgLTg4MCw2ICs4NzksNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBidWRkeV9mcmVlX3VubG9ja2VkKHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSwgdTY0XFxuIFxcbiBfX3dlYWsgaW50IGJ1ZGR5X2ZyZWUoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5LCB2b2lkIF9fYXJlbmEgKmFkZHIpXFxuIHtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdGlmICghYnVkZHkpXFxuQEAgLTg4OSwxMyArODg5LDEzIEBAIF9fd2VhayBpbnQgYnVkZHlfZnJlZShzdHJ1Y3QgYnVkZHkgX19hcmVuYSAqYnVkZHksIHZvaWQgX19hcmVuYSAqYWRkcilcXG4gXFx0aWYgKCFhZGRyKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdHJldCA9IGJ1ZGR5X2xvY2soYnVkZHkpO1xcbitcXHRyZXQgPSBidWRkeV9sb2NrKGJ1ZGR5LCBmbGFncyk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHRyZXQgPSBidWRkeV9mcmVlX3VubG9ja2VkKGJ1ZGR5LCAodTY0KWFkZHIpO1xcbiBcXG4tXFx0YnVkZHlfdW5sb2NrKGJ1ZGR5KTtcXG4rXFx0YnVkZHlfdW5sb2NrKGJ1ZGR5LCBmbGFncyk7XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvY29tbW9uLmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9jb21tb24uYnBmLmNcXG5pbmRleCA1NjlmMGY2NGQ1MThiLi43ODVkNDg3MmNiNDk0IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvY29tbW9uLmJwZi5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9jb21tb24uYnBmLmNcXG5AQCAtMSw1ICsxLDcgQEBcXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IExHUEwtMi4xIE9SIEJTRC0yLUNsYXVzZVxcbiAvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW1pdHMuaFxcdTAwM2VcXG4rXFxuICNpbmNsdWRlIFxcdTAwM2NsaWJhcmVuYS9jb21tb24uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpYmFyZW5hL2FzYW4uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpYmFyZW5hL2J1ZGR5LmhcXHUwMDNlXFxuQEAgLTQ4LDEwICs1MCwzMyBAQCBfX3dlYWsgdm9pZCBfX2FyZW5hICphcmVuYV9tYWxsb2Moc2l6ZV90IHNpemUpXFxuIFxcdHJldHVybiBidWRkeV9hbGxvYyhcXHUwMDI2YnVkZHksIHNpemUpO1xcbiB9XFxuIFxcbitfX3dlYWsgdm9pZCBfX2FyZW5hICphcmVuYV9jYWxsb2Moc2l6ZV90IG5jb3VudCwgc2l6ZV90IHNpemUpXFxuK3tcXG4rXFx0dm9pZCBfX2FyZW5hICptZW07XFxuK1xcdHNpemVfdCB0b3RhbDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIElkZWFsbHkgd2UnZCBiZSB1c2luZyBfX2J1aWx0aW5fbXVsX292ZXJmbG93IGhlcmUsXFxuK1xcdCAqIGJ1dCB0aGUgQlBGIGNvbXBpbGVyIGJhY2tlbmQgZG9lc24ndCBpbXBsZW1lbnQgX19tdWx0aTMuXFxuK1xcdCAqIFRoZXJlIGFyZSB3YXlzIHRvIG9wdGltaXplIHRoZSBkaXZpc2lvbiBhd2F5IGZyb20gdGhlXFxuK1xcdCAqIG92ZXJmbG93IGNoZWNrLCBidXQgYW55IGNvc3RzIGFyZSBkd2FyZmVkIGJ5IHRoZVxcbitcXHQgKiBidWRkeV9hbGxvYygpIGNhbGwuIEtlZXAgaXQgc2ltcGxlIGZvciBub3cuXFxuK1xcdCAqL1xcbitcXHRpZiAodW5saWtlbHkobmNvdW50IFxcdTAwMjZcXHUwMDI2IHNpemUgXFx1MDAzZT0gVUxMT05HX01BWCAvIG5jb3VudCkpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0dG90YWwgPSBuY291bnQgKiBzaXplO1xcbitcXG4rXFx0bWVtID0gYnVkZHlfYWxsb2MoXFx1MDAyNmJ1ZGR5LCB0b3RhbCk7XFxuK1xcdGlmIChsaWtlbHkobWVtKSlcXG4rXFx0XFx0YXJlbmFfbWVtc2V0KG1lbSwgMCwgdG90YWwpO1xcbitcXG4rXFx0cmV0dXJuIG1lbTtcXG4rfVxcbitcXG4gX193ZWFrIHZvaWQgYXJlbmFfZnJlZSh2b2lkIF9fYXJlbmEgKnB0cilcXG4ge1xcbiBcXHRidWRkeV9mcmVlKFxcdTAwMjZidWRkeSwgcHRyKTtcXG4gfVxcbiBcXG4tXFxuIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxOTo0Mzo0My43NDk5OTc2ODJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyOTk4MzA5Njg1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBCUEYgc2VsZnRlc3RzIGFuZCBiZW5jaG1hcmtzIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8uIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkMWEyMjg2Y2FhOThmYTg2NTAzZDNhOTIwZWVkM2NkZjM1YTY2ZDgzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMTk6NDM6NDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcbmluZGV4IGQzNjU1YTcwNjQ4MjYuLjIyZTllYjE2YzE1MTEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxuQEAgLTgyNiwxOCArODI2LDIyIEBAIExJQkFSRU5BX01BS0VfQVJHUyA9IFxcXG4gXHRcdEJQRl9UQVJHRVRfRU5ESUFOPVwiJChCUEZfVEFSR0VUX0VORElBTilcIiBcXFxuIFx0XHRRPVwiJChRKVwiXG4gXG4tTElCQVJFTkFfQlBGX0RFUFMgOj0gJCh3aWxkY2FyZCBsaWJhcmVuYS9NYWtlZmlsZVx0XHRcXFxuLVx0XHRcdFx0IGxpYmFyZW5hL2luY2x1ZGUvKlx0XHRcXFxuLVx0XHRcdFx0IGxpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvKlx0XFxcbi1cdFx0XHRcdCBsaWJhcmVuYS9zcmMvKlx0XHRcdFxcXG4tXHRcdFx0XHQgbGliYXJlbmEvc2VsZnRlc3RzLypcdFx0XFxcbi1cdFx0XHRcdCBsaWJhcmVuYS8qLmJwZi5vKVxuK0xJQkFSRU5BX0NPTU1PTl9ERVBTIDo9ICQod2lsZGNhcmQgbGliYXJlbmEvTWFrZWZpbGVcdFx0XFxcbitcdFx0XHRcdCAgICBsaWJhcmVuYS9pbmNsdWRlLypcdFx0XFxcbitcdFx0XHRcdCAgICBsaWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hLypcdFxcXG4rXHRcdFx0XHQgICAgbGliYXJlbmEvc3JjLyopXG4rTElCQVJFTkFfQlBGX0RFUFMgOj0gJChMSUJBUkVOQV9DT01NT05fREVQUykgJCh3aWxkY2FyZCBsaWJhcmVuYS9zZWxmdGVzdHMvKilcbitMSUJBUkVOQV9CRU5DSF9CUEZfREVQUyA6PSAkKExJQkFSRU5BX0NPTU1PTl9ERVBTKSAkKHdpbGRjYXJkIGxpYmFyZW5hL2JlbmNocy8qKVxuIFxuIExJQkFSRU5BX1NLRUwgOj0gbGliYXJlbmEvbGliYXJlbmEuc2tlbC5oXG4rTElCQVJFTkFfQkVOQ0hfU0tFTCA6PSBsaWJhcmVuYS9saWJhcmVuYV9iZW5jaC5za2VsLmhcbiBcbiAkKExJQkFSRU5BX1NLRUwpOiAkKElOQ0xVREVfRElSKS92bWxpbnV4LmggJChCUEZPQkopICQoTElCQVJFTkFfQlBGX0RFUFMpXG4gXHQrJChNQUtFKSAtQyBsaWJhcmVuYSBsaWJhcmVuYS5za2VsLmggJChMSUJBUkVOQV9NQUtFX0FSR1MpXG4gXG4rJChMSUJBUkVOQV9CRU5DSF9TS0VMKTogJChJTkNMVURFX0RJUikvdm1saW51eC5oICQoQlBGT0JKKSAkKExJQkFSRU5BX0JFTkNIX0JQRl9ERVBTKSB8ICQoTElCQVJFTkFfU0tFTClcbitcdCskKE1BS0UpIC1DIGxpYmFyZW5hIGJlbmNobWFya3MgJChMSUJBUkVOQV9NQUtFX0FSR1MpXG4rXG4gaWZuZXEgKCQoQ0xBTkdfSEFTX0FSRU5BX0FTQU4pLClcbiBMSUJBUkVOQV9BU0FOX1NLRUwgOj0gbGliYXJlbmEvbGliYXJlbmFfYXNhbi5za2VsLmhcbiBDRkxBR1MgKz0gLURIQVNfQlBGX0FSRU5BX0FTQU5cbkBAIC05ODcsNiArOTkxLDcgQEAgJChPVVRQVVQpL2JlbmNoX3NvY2ttYXAubzogJChPVVRQVVQpL2JlbmNoX3NvY2ttYXBfcHJvZy5za2VsLmhcbiAkKE9VVFBVVCkvYmVuY2hfbHBtX3RyaWVfbWFwLm86ICQoT1VUUFVUKS9scG1fdHJpZV9iZW5jaC5za2VsLmggJChPVVRQVVQpL2xwbV90cmllX21hcC5za2VsLmhcbiAkKE9VVFBVVCkvYmVuY2hfYnBmX25vcC5vOiAkKE9VVFBVVCkvYnBmX25vcF9iZW5jaC5za2VsLmggYmVuY2hfYnBmX3RpbWluZy5oXG4gJChPVVRQVVQpL2JlbmNoX3hkcF9sYi5vOiAkKE9VVFBVVCkveGRwX2xiX2JlbmNoLnNrZWwuaCBiZW5jaF9icGZfdGltaW5nLmhcbiskKE9VVFBVVCkvYmVuY2hfbGliYXJlbmEubzogJChMSUJBUkVOQV9CRU5DSF9TS0VMKVxuICQoT1VUUFVUKS9iZW5jaF9icGZfdGltaW5nLm86IGJlbmNoX2JwZl90aW1pbmcuaFxuICQoT1VUUFVUKS9iZW5jaC5vOiBiZW5jaC5oIHRlc3RpbmdfaGVscGVycy5oICQoQlBGT0JKKVxuICQoT1VUUFVUKS9iZW5jaDogTERMSUJTICs9IC1sbVxuQEAgLTEwMTQsNiArMTAxOSw3IEBAICQoT1VUUFVUKS9iZW5jaDogJChPVVRQVVQpL2JlbmNoLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS9iZW5jaF9icGZfdGltaW5nLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS9iZW5jaF9icGZfbm9wLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS9iZW5jaF94ZHBfbGIubyBcXFxuK1x0XHQgJChPVVRQVVQpL2JlbmNoX2xpYmFyZW5hLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS91c2R0XzEubyBcXFxuIFx0XHQgJChPVVRQVVQpL3VzZHRfMi5vIFxcXG4gXHRcdCAjXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guY1xuaW5kZXggYjg2YjczNDU2ZDNjYS4uZGU2NzJmNjFkNGFiZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guY1xuQEAgLTI4OCw2ICsyODgsNyBAQCBleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfY3J5cHRvX2FyZ3A7XG4gZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX3NvY2ttYXBfYXJncDtcbiBleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfbHBtX3RyaWVfbWFwX2FyZ3A7XG4gZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX3hkcF9sYl9hcmdwO1xuK2V4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9saWJhcmVuYV9hcmdwO1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9jaGlsZCBiZW5jaF9wYXJzZXJzW10gPSB7XG4gXHR7IFx1MDAyNmJlbmNoX3JpbmdidWZzX2FyZ3AsIDAsIFwiUmluZyBidWZmZXJzIGJlbmNobWFya1wiLCAwIH0sXG5AQCAtMzA2LDYgKzMwNyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9jaGlsZCBiZW5jaF9wYXJzZXJzW10gPSB7XG4gXHR7IFx1MDAyNmJlbmNoX3NvY2ttYXBfYXJncCwgMCwgXCJicGYgc29ja21hcCBiZW5jaG1hcmtcIiwgMCB9LFxuIFx0eyBcdTAwMjZiZW5jaF9scG1fdHJpZV9tYXBfYXJncCwgMCwgXCJMUE0gdHJpZSBtYXAgYmVuY2htYXJrXCIsIDAgfSxcbiBcdHsgXHUwMDI2YmVuY2hfeGRwX2xiX2FyZ3AsIDAsIFwiWERQIGxvYWQtYmFsYW5jZXIgYmVuY2htYXJrXCIsIDAgfSxcbitcdHsgXHUwMDI2YmVuY2hfbGliYXJlbmFfYXJncCwgMCwgXCJsaWJhcmVuYSBhbGxvY2F0b3IgYmVuY2htYXJrXCIsIDAgfSxcbiBcdHt9LFxuIH07XG4gXG5AQCAtNTg1LDYgKzU4Nyw4IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfbHBtX3RyaWVfZGVsZXRlO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfbHBtX3RyaWVfZnJlZTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2JwZl9ub3A7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF94ZHBfbGI7XG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9saWJhcmVuYV9tYWxsb2M7XG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9saWJhcmVuYV9jYWxsb2M7XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBiZW5jaCAqYmVuY2hzW10gPSB7XG4gXHRcdTAwMjZiZW5jaF9jb3VudF9nbG9iYWwsXG5AQCAtNjY5LDYgKzY3Myw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmVuY2ggKmJlbmNoc1tdID0ge1xuIFx0XHUwMDI2YmVuY2hfbHBtX3RyaWVfZnJlZSxcbiBcdFx1MDAyNmJlbmNoX2JwZl9ub3AsXG4gXHRcdTAwMjZiZW5jaF94ZHBfbGIsXG4rXHRcdTAwMjZiZW5jaF9saWJhcmVuYV9tYWxsb2MsXG4rXHRcdTAwMjZiZW5jaF9saWJhcmVuYV9jYWxsb2MsXG4gfTtcbiBcbiBzdGF0aWMgdm9pZCBmaW5kX2JlbmNobWFyayh2b2lkKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfbGliYXJlbmEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfbGliYXJlbmEuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjI0ZTQzMjI0NGJmNWRcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfbGliYXJlbmEuY1xuQEAgLTAsMCArMSwyMTAgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbisjaW5jbHVkZSBcdTAwM2NhcmdwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW1pdHMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJiZW5jaC5oXCJcbitcbisjaW5jbHVkZSBcdTAwM2NsaWJhcmVuYS9jb21tb24uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpYmFyZW5hL2FzYW4uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpYmFyZW5hL2J1ZGR5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaWJhcmVuYS91c2Vyc3BhY2UuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwibGliYXJlbmEvbGliYXJlbmFfYmVuY2guc2tlbC5oXCJcbitcbitzdGF0aWMgc3RydWN0IHtcbitcdF9fdTY0IGFsbG9jX3NpemU7XG4rXHRfX3U2NCBuYWxsb2NzO1xuK30gYXJncyA9IHtcbitcdC5hbGxvY19zaXplID0gNjQsXG4rXHQubmFsbG9jcyA9IDEwMDAwLFxuK307XG4rXG4rc3RhdGljIHN0cnVjdCB7XG4rXHRzdHJ1Y3QgbGliYXJlbmFfYmVuY2ggKnNrZWw7XG4rXHRpbnQgYmVuY2hfZmQ7XG4rXHRpbnQgcmVzZXRfZmQ7XG4rfSBjdHg7XG4rXG4rZW51bSB7XG4rXHRBUkdfTElCQVJFTkFfQUxMT0NfU0laRSA9IDEyMDAwLFxuK1x0QVJHX0xJQkFSRU5BX05BTExPQ1MsXG4rfTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uIG9wdHNbXSA9IHtcbitcdHsgXCJhbGxvY19zaXplXCIsIEFSR19MSUJBUkVOQV9BTExPQ19TSVpFLCBcIkJZVEVTXCIsIDAsXG4rXHQgIFwiU2l6ZSBvZiBlYWNoIGFyZW5hIGFsbG9jYXRpb25cIiB9LFxuK1x0eyBcIm5hbGxvY3NcIiwgQVJHX0xJQkFSRU5BX05BTExPQ1MsIFwiSVRFUlNcIiwgMCxcbitcdCAgXCJOdW1iZXIgb2YgYWxsb2NhdGlvbiBwZXIgbWVhc3VyZW1lbnRcIiB9LFxuK1x0e30sXG4rfTtcbitcbitzdGF0aWMgZXJyb3JfdCBwYXJzZV9hcmcoaW50IGtleSwgY2hhciAqYXJnLCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUpXG4re1xuK1x0dW5zaWduZWQgbG9uZyB2YWx1ZTtcbitcbitcdHN3aXRjaCAoa2V5KSB7XG4rXHRjYXNlIEFSR19MSUJBUkVOQV9BTExPQ19TSVpFOlxuK1x0XHR2YWx1ZSA9IHN0cnRvdWxsKGFyZywgTlVMTCwgMTApO1xuK1x0XHRpZiAoIXZhbHVlIHx8IHZhbHVlIFx1MDAzZT0gVUlOVF9NQVgpIHtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJpbnZhbGlkIGFsbG9jX3NpemU6ICVsZFwiLCB2YWx1ZSk7XG4rXHRcdFx0YXJncF91c2FnZShzdGF0ZSk7XG4rXHRcdH1cbitcdFx0YXJncy5hbGxvY19zaXplID0gdmFsdWU7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBBUkdfTElCQVJFTkFfTkFMTE9DUzpcbitcdFx0YXJncy5uYWxsb2NzID0gc3RydG91bGwoYXJnLCBOVUxMLCAxMCk7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIEFSR1BfRVJSX1VOS05PV047XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rY29uc3Qgc3RydWN0IGFyZ3AgYmVuY2hfbGliYXJlbmFfYXJncCA9IHtcbitcdC5vcHRpb25zID0gb3B0cyxcbitcdC5wYXJzZXIgPSBwYXJzZV9hcmcsXG4rfTtcbitcbitzdGF0aWMgdm9pZCB2YWxpZGF0ZSh2b2lkKVxuK3tcbitcdGlmIChlbnYuY29uc3VtZXJfY250ICE9IDApIHtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiYmVuY2htYXJrIGRvZXNuJ3Qgc3VwcG9ydCBjb25zdW1lcnNcXG5cIik7XG4rXHRcdGV4aXQoMSk7XG4rXHR9XG4rXG4rXHRpZiAoZW52LnByb2R1Y2VyX2NudCAhPSAxKSB7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcImJlbmNobWFyayBzdXBwb3J0cyBleGFjdGx5IG9uZSBwcm9kdWNlclxcblwiKTtcbitcdFx0ZXhpdCgxKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgc2V0dXBfY29tbW9uKHZvaWQpXG4re1xuK1x0c3RydWN0IGFyZW5hX2FsbG9jX3Jlc2VydmVfYXJncyByZXNlcnZlX2FyZ3MgPSB7XG4rXHRcdC5ucl9wYWdlcyA9IEFSRU5BX1JFU0VSVkVfUEFHRVNfREZMLFxuK1x0fTtcbitcdGludCBlcnI7XG4rXG4rXHRzZXR1cF9saWJicGYoKTtcbitcbitcdGN0eC5za2VsID0gbGliYXJlbmFfYmVuY2hfX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghY3R4LnNrZWwpIHtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiZmFpbGVkIHRvIG9wZW4gYW5kIGxvYWQgc2tlbGV0b25cXG5cIik7XG4rXHRcdGV4aXQoMSk7XG4rXHR9XG4rXG4rXHRlcnIgPSBsaWJhcmVuYV9ydW5fcHJvZ19hcmdzKFxuK1x0XHRicGZfcHJvZ3JhbV9fZmQoY3R4LnNrZWwtXHUwMDNlcHJvZ3MuYXJlbmFfYWxsb2NfcmVzZXJ2ZSksXG4rXHRcdFx1MDAyNnJlc2VydmVfYXJncywgc2l6ZW9mKHJlc2VydmVfYXJncykpO1xuK1x0aWYgKGVycikge1xuK1x0XHRmcHJpbnRmKHN0ZGVyciwgXCJmYWlsZWQgdG8gcmVzZXJ2ZSBhcmVuYSBwYWdlczogJWRcXG5cIiwgZXJyKTtcbitcdFx0ZXhpdCgxKTtcbitcdH1cbitcbitcdGVyciA9IGxpYmFyZW5hX3J1bl9wcm9nKFxuK1x0XHRicGZfcHJvZ3JhbV9fZmQoY3R4LnNrZWwtXHUwMDNlcHJvZ3MuYXJlbmFfYnVkZHlfcmVzZXQpKTtcbitcdGlmIChlcnIpIHtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiZmFpbGVkIHRvIGluaXRpYWxpemUgYXJlbmEgYWxsb2NhdG9yOiAlZFxcblwiLCBlcnIpO1xuK1x0XHRleGl0KDEpO1xuK1x0fVxuK1xuK1x0Y3R4LnNrZWwtXHUwMDNlYnNzLVx1MDAzZWJlbmNoX2FsbG9jX3NpemUgPSBhcmdzLmFsbG9jX3NpemU7XG4rXHRjdHguc2tlbC1cdTAwM2Vic3MtXHUwMDNlYmVuY2hfbmFsbG9jcyA9IGFyZ3MubmFsbG9jcztcbitcdGN0eC5yZXNldF9mZCA9IGJwZl9wcm9ncmFtX19mZChjdHguc2tlbC1cdTAwM2Vwcm9ncy5hcmVuYV9idWRkeV9yZXNldCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG1hbGxvY19zZXR1cCh2b2lkKVxuK3tcbitcdHNldHVwX2NvbW1vbigpO1xuK1x0Y3R4LmJlbmNoX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKGN0eC5za2VsLVx1MDAzZXByb2dzLmJlbmNoX21hbGxvYyk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGNhbGxvY19zZXR1cCh2b2lkKVxuK3tcbitcdHNldHVwX2NvbW1vbigpO1xuK1x0Y3R4LmJlbmNoX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKGN0eC5za2VsLVx1MDAzZXByb2dzLmJlbmNoX2NhbGxvYyk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkICpwcm9kdWNlcih2b2lkICppbnB1dClcbit7XG4rXHRpbnQgZXJyO1xuK1xuK1x0d2hpbGUgKHRydWUpIHtcbitcdFx0ZXJyID0gbGliYXJlbmFfcnVuX3Byb2coY3R4LmJlbmNoX2ZkKTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdGZwcmludGYoc3RkZXJyLCBcImxpYmFyZW5hIGJlbmNobWFyayBmYWlsZWQ6ICVkXFxuXCIsIGVycik7XG4rXHRcdFx0ZXhpdCgxKTtcbitcdFx0fVxuK1xuK1x0XHRlcnIgPSBsaWJhcmVuYV9ydW5fcHJvZyhjdHgucmVzZXRfZmQpO1xuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwibGliYXJlbmEgYWxsb2MgcmVzZXQgZmFpbGVkOiAlZFxcblwiLCBlcnIpO1xuK1x0XHRcdGV4aXQoMSk7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiBOVUxMO1xuK31cbitcbitzdGF0aWMgdm9pZCBtZWFzdXJlKHN0cnVjdCBiZW5jaF9yZXMgKnJlcylcbit7XG4rXHRyZXMtXHUwMDNlZHVyYXRpb25fbnMgPSBhdG9taWNfc3dhcChcdTAwMjZjdHguc2tlbC1cdTAwM2Vic3MtXHUwMDNlYmVuY2hfZHVyYXRpb25fbnMsIDApO1xuK1x0cmVzLVx1MDAzZWhpdHMgPSBhdG9taWNfc3dhcChcdTAwMjZjdHguc2tlbC1cdTAwM2Vic3MtXHUwMDNlYmVuY2hfaGl0cywgMCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJlcG9ydF9wcm9ncmVzcyhpbnQgaXRlciwgc3RydWN0IGJlbmNoX3JlcyAqcmVzLCBsb25nIGRlbHRhX25zKVxuK3tcbitcdGRvdWJsZSBsYXRlbmN5X25zID0gMC4wO1xuK1xuK1x0aWYgKHJlcy1cdTAwM2VoaXRzKVxuK1x0XHRsYXRlbmN5X25zID0gcmVzLVx1MDAzZWR1cmF0aW9uX25zIC8gKGRvdWJsZSlyZXMtXHUwMDNlaGl0cztcbitcbitcdHByaW50ZihcIkl0ZXIgJTNkICglNy4zbGZ1cyk6IGxhdGVuY3kgJTguM2xmIG5zL29wICglbGQgYWxsb2NhdGlvbnMpXFxuXCIsXG4rXHQgICAgICAgaXRlciwgKGRlbHRhX25zIC0gMTAwMDAwMDAwMCkgLyAxMDAwLjAsIGxhdGVuY3lfbnMsIHJlcy1cdTAwM2VoaXRzKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcmVwb3J0X2ZpbmFsKHN0cnVjdCBiZW5jaF9yZXMgcmVzW10sIGludCByZXNfY250KVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgZHVyYXRpb25fbnMgPSAwO1xuK1x0bG9uZyBoaXRzID0gMDtcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcmVzX2NudDsgaSsrKSB7XG4rXHRcdGR1cmF0aW9uX25zICs9IHJlc1tpXS5kdXJhdGlvbl9ucztcbitcdFx0aGl0cyArPSByZXNbaV0uaGl0cztcbitcdH1cbitcbitcdGlmICghaGl0cyB8fCAhcmVzX2NudCkge1xuK1x0XHRwcmludGYoXCJTdW1tYXJ5OiBubyBydW5zIG1lYXN1cmVkXFxuXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRwcmludGYoXCJTdW1tYXJ5OiAlLjNsZiBucy9vcCwgJS4wbGYgaW52b2NhdGlvbnMgZm9yICV1IGFsbG9jYXRpb25zL2ludm9jYXRpb24pXFxuXCIsXG4rXHQgICAgICAgZHVyYXRpb25fbnMgLyAoZG91YmxlKWhpdHMsIGhpdHMgLyAoZG91YmxlKXJlc19jbnQsXG4rXHQgICAgICAgY3R4LnNrZWwtXHUwMDNlYnNzLVx1MDAzZWJlbmNoX25hbGxvY3MpO1xuK31cbitcbitjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfbGliYXJlbmFfbWFsbG9jID0ge1xuK1x0Lm5hbWUgPSBcImxpYmFyZW5hLW1hbGxvY1wiLFxuK1x0LmFyZ3AgPSBcdTAwMjZiZW5jaF9saWJhcmVuYV9hcmdwLFxuK1x0LnZhbGlkYXRlID0gdmFsaWRhdGUsXG4rXHQuc2V0dXAgPSBtYWxsb2Nfc2V0dXAsXG4rXHQucHJvZHVjZXJfdGhyZWFkID0gcHJvZHVjZXIsXG4rXHQubWVhc3VyZSA9IG1lYXN1cmUsXG4rXHQucmVwb3J0X3Byb2dyZXNzID0gcmVwb3J0X3Byb2dyZXNzLFxuK1x0LnJlcG9ydF9maW5hbCA9IHJlcG9ydF9maW5hbCxcbit9O1xuK1xuK2NvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9saWJhcmVuYV9jYWxsb2MgPSB7XG4rXHQubmFtZSA9IFwibGliYXJlbmEtY2FsbG9jXCIsXG4rXHQuYXJncCA9IFx1MDAyNmJlbmNoX2xpYmFyZW5hX2FyZ3AsXG4rXHQudmFsaWRhdGUgPSB2YWxpZGF0ZSxcbitcdC5zZXR1cCA9IGNhbGxvY19zZXR1cCxcbitcdC5wcm9kdWNlcl90aHJlYWQgPSBwcm9kdWNlcixcbitcdC5tZWFzdXJlID0gbWVhc3VyZSxcbitcdC5yZXBvcnRfcHJvZ3Jlc3MgPSByZXBvcnRfcHJvZ3Jlc3MsXG4rXHQucmVwb3J0X2ZpbmFsID0gcmVwb3J0X2ZpbmFsLFxuK307XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9ydW5fYmVuY2hfbGliYXJlbmEuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL3J1bl9iZW5jaF9saWJhcmVuYS5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjEwYWZlNGQ1MmViZjdcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvcnVuX2JlbmNoX2xpYmFyZW5hLnNoXG5AQCAtMCwwICsxLDMxIEBAXG4rIyEvYmluL2Jhc2hcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rc291cmNlIC4vYmVuY2hzL3J1bl9jb21tb24uc2hcbitcbitzZXQgLWV1Zm8gcGlwZWZhaWxcbitcbitSVU5fQkVOQ0g9XCIuL2JlbmNoIC1kMyAtcVwiXG4rXG4rc3VtbWFyaXplX2xpYmFyZW5hKClcbit7XG4rXHRsb2NhbCBiZW5jaD1cIiQxXCJcbitcdGxvY2FsIHN1bW1hcnlcbitcbitcdHN1bW1hcnk9JChwcmludGYgJyVzXFxuJyBcIiQyXCIgfCB0YWlsIC1uMSlcbitcdHN1bW1hcnk9JHtzdW1tYXJ5I1N1bW1hcnk6IH1cbitcdHByaW50ZiBcIiUtMjBzICVzXFxuXCIgXCIkYmVuY2hcIiBcIiRzdW1tYXJ5XCJcbit9XG4rXG4raGVhZGVyIFwibGliYXJlbmEgc2VxdWVudGlhbCBtYWxsb2NcXG5cIlxuK1xuK2ZvciBzaXplIGluIDE2IDY0IDI1NiAxMDI0IDQwOTY7IGRvXG4rc3VidGl0bGUgXCJhbGxvY2F0aW9uIHNpemU6ICRzaXplXCJcbitwcmludGYgXCJcXHQtLS0tLS0tLS0tLS0tLS0tLS0tXFxuXCJcbitcdGZvciBuYWxsb2NzIGluIDEwIDUwIDEwMCA1MDAgMTAwMCA1MDAwIDEwMDAwOyBkb1xuK1x0XHRzdW1tYXJpemVfbGliYXJlbmEgXCJtYWxsb2M6XCIgXFxcbitcdFx0XHRcIiQoJFJVTl9CRU5DSCAtLWFsbG9jX3NpemUgXCIkc2l6ZVwiIC0tbmFsbG9jcyBcIiRuYWxsb2NzXCIgbGliYXJlbmEtbWFsbG9jKVwiXG4rXHRcdHN1bW1hcml6ZV9saWJhcmVuYSBcImNhbGxvYzpcIiBcXFxuK1x0XHRcdFwiJCgkUlVOX0JFTkNIIC0tYWxsb2Nfc2l6ZSBcIiRzaXplXCIgLS1uYWxsb2NzIFwiJG5hbGxvY3NcIiBsaWJhcmVuYS1jYWxsb2MpXCJcbitcdGRvbmVcbitkb25lXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL01ha2VmaWxlXG5pbmRleCA1ZTJhYjUxNDgwNWU0Li45MTE2NGQ0M2JkNjEyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL01ha2VmaWxlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvTWFrZWZpbGVcbkBAIC0yNywxMCArMjcsMTcgQEAgQlBGRElSPSQoYWJzcGF0aCAkKExJQkFSRU5BKS8uLilcbiBJTkNMVURFX0RJUiA/PSAkKEJQRkRJUikvdG9vbHMvaW5jbHVkZVxuIExJQkJQRl9JTkNMVURFID89ICQoSU5DTFVERV9ESVIpXG4gXG4tIyBTY2FuIHNyYy8gYW5kIHNlbGZ0ZXN0cy8gdG8gZ2VuZXJhdGUgdGhlIGZpbmFsIGJpbmFyaWVzXG4tTElCQVJFTkFfU09VUkNFUyA9ICQod2lsZGNhcmQgJChMSUJBUkVOQSkvc3JjLyouYnBmLmMpICQod2lsZGNhcmQgJChMSUJBUkVOQSkvc2VsZnRlc3RzLyouYnBmLmMpXG4tTElCQVJFTkFfT0JKRUNUUyA9ICQobm90ZGlyICQoTElCQVJFTkFfU09VUkNFUzouYnBmLmM9LmJwZi5vKSlcbi1MSUJBUkVOQV9PQkpFQ1RTX0FTQU4gPSAkKG5vdGRpciAkKExJQkFSRU5BX1NPVVJDRVM6LmJwZi5jPV9hc2FuLmJwZi5vKSlcbisjIEJ1aWxkIHNlbGZ0ZXN0cyBhbmQgYmVuY2htYXJrcyBpbnRvIHNlcGFyYXRlIEJQRiBvYmplY3RzIGFuZCBza2VsZXRvbnMuXG4rTElCQVJFTkFfQ09SRV9TT1VSQ0VTID0gJCh3aWxkY2FyZCAkKExJQkFSRU5BKS9zcmMvKi5icGYuYylcbitMSUJBUkVOQV9URVNUX1NPVVJDRVMgPSAkKHdpbGRjYXJkICQoTElCQVJFTkEpL3NlbGZ0ZXN0cy8qLmJwZi5jKVxuK0xJQkFSRU5BX0JFTkNIX1NPVVJDRVMgPSAkKHdpbGRjYXJkICQoTElCQVJFTkEpL2JlbmNocy8qLmJwZi5jKVxuK1xuK0xJQkFSRU5BX09CSkVDVFMgPSAkKG5vdGRpciAkKExJQkFSRU5BX0NPUkVfU09VUkNFUzouYnBmLmM9LmJwZi5vKSBcXFxuK1x0XHRcdCAgICAgICAkKExJQkFSRU5BX1RFU1RfU09VUkNFUzouYnBmLmM9LmJwZi5vKSlcbitMSUJBUkVOQV9PQkpFQ1RTX0FTQU4gPSAkKG5vdGRpciAkKExJQkFSRU5BX0NPUkVfU09VUkNFUzouYnBmLmM9X2FzYW4uYnBmLm8pIFxcXG4rXHRcdFx0XHQgICAgJChMSUJBUkVOQV9URVNUX1NPVVJDRVM6LmJwZi5jPV9hc2FuLmJwZi5vKSlcbitMSUJBUkVOQV9CRU5DSF9PQkpFQ1RTID0gJChub3RkaXIgJChMSUJBUkVOQV9DT1JFX1NPVVJDRVM6LmJwZi5jPS5icGYubykgXFxcbitcdFx0XHRcdCAgICAgJChMSUJBUkVOQV9CRU5DSF9TT1VSQ0VTOi5icGYuYz0uYnBmLm8pKVxuIFxuIElOQ0xVREVTID0gLUkkKExJQkFSRU5BKS9pbmNsdWRlIC1JJChCUEZESVIpXG4gaWZuZXEgKCQoSU5DTFVERV9ESVIpLClcbkBAIC01MywxNyArNjAsMjUgQEAgb3ZlcnJpZGUgQlBGX0NGTEFHUyArPSAtTzIgLWdcbiBvdmVycmlkZSBCUEZfQ0ZMQUdTICs9IC1Xbm8taW5jb21wYXRpYmxlLXBvaW50ZXItdHlwZXMtZGlzY2FyZHMtcXVhbGlmaWVyc1xuICMgUmVxdWlyZWQgZm9yIHN1cHByZXNzaW5nIGhhcm1sZXNzIHZtbGludXguaC1yZWxhdGVkIHdhcm5pbmdzLlxuIG92ZXJyaWRlIEJQRl9DRkxBR1MgKz0gLVduby1taXNzaW5nLWRlY2xhcmF0aW9uc1xuK292ZXJyaWRlIEJQRl9DRkxBR1MgKz0gLWZuby1zdHJpY3QtYWxpYXNpbmdcbiBvdmVycmlkZSBCUEZfQ0ZMQUdTICs9ICQoSU5DTFVERVMpXG4gXG4gQ0ZMQUdTID0gLU8yIC1uby1waWVcbiBDRkxBR1MgKz0gJChJTkNMVURFUylcbiBcbi12cGF0aCAlLmJwZi5jICQoTElCQVJFTkEpL3NyYyAkKExJQkFSRU5BKS9zZWxmdGVzdHNcbi12cGF0aCAlLmMgJChMSUJBUkVOQSkvc3JjICQoTElCQVJFTkEpL3NlbGZ0ZXN0c1xuK3ZwYXRoICUuYnBmLmMgJChMSUJBUkVOQSkvc3JjICQoTElCQVJFTkEpL3NlbGZ0ZXN0cyAkKExJQkFSRU5BKS9iZW5jaHNcbit2cGF0aCAlLmMgJChMSUJBUkVOQSkvc3JjICQoTElCQVJFTkEpL3NlbGZ0ZXN0cyAkKExJQkFSRU5BKS9iZW5jaHNcbiBcbiBza2VsZXRvbnM6IGxpYmFyZW5hLnNrZWwuaCBsaWJhcmVuYV9hc2FuLnNrZWwuaFxuIC5QSE9OWTogc2tlbGV0b25zXG4gXG4rYmVuY2htYXJrczogbGliYXJlbmFfYmVuY2guc2tlbC5oXG4rLlBIT05ZOiBiZW5jaG1hcmtzXG4rXG4rbGliYXJlbmFfYmVuY2guc2tlbC5oOiBsaWJhcmVuYV9iZW5jaC5icGYub1xuK1x0JChjYWxsIG1zZyxHRU4tU0tFTCxsaWJhcmVuYSwkQClcbitcdCQoUSkkKEJQRlRPT0wpIGdlbiBza2VsZXRvbiAkXHUwMDNjIG5hbWUgXCJsaWJhcmVuYV9iZW5jaFwiIFx1MDAzZSAkQFxuK1xuIGxpYmFyZW5hX2FzYW4uc2tlbC5oOiBsaWJhcmVuYV9hc2FuLmJwZi5vXG4gXHQkKGNhbGwgbXNnLEdFTi1TS0VMLGxpYmFyZW5hLCRAKVxuIFx0JChRKSQoQlBGVE9PTCkgZ2VuIHNrZWxldG9uICRcdTAwM2MgbmFtZSBcImxpYmFyZW5hX2FzYW5cIiBcdTAwM2UgJEBcbkBAIC04MCw2ICs5NSwxMCBAQCBsaWJhcmVuYS5icGYubzogJChMSUJBUkVOQV9PQkpFQ1RTKVxuIFx0JChjYWxsIG1zZyxHRU4tT0JKLGxpYmFyZW5hLCRAKVxuIFx0JChRKSQoQlBGVE9PTCkgZ2VuIG9iamVjdCAkQCAkXlxuIFxuK2xpYmFyZW5hX2JlbmNoLmJwZi5vOiAkKExJQkFSRU5BX0JFTkNIX09CSkVDVFMpXG4rXHQkKGNhbGwgbXNnLEdFTi1PQkosbGliYXJlbmEsJEApXG4rXHQkKFEpJChCUEZUT09MKSBnZW4gb2JqZWN0ICRAICReXG4rXG4gJV9hc2FuLmJwZi5vOiAlLmJwZi5jXG4gXHQkKGNhbGwgbXNnLENMTkctQlBGLGxpYmFyZW5hLCRAKVxuIFx0JChRKSQoQ0xBTkcpICQoQlBGX0NGTEFHUykgJChBU0FOX0ZMQUdTKSAtREJQRl9BUkVOQV9BU0FOICQoQlBGX1RBUkdFVF9FTkRJQU4pIC1jICRcdTAwM2MgLW8gJEBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvYmVuY2hzL2JlbmNoX21hbGxvYy5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9iZW5jaHMvYmVuY2hfbWFsbG9jLmJwZi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZTA2Mzk3ZGM5YTQwZFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2JlbmNocy9iZW5jaF9tYWxsb2MuYnBmLmNcbkBAIC0wLDAgKzEsNTEgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTEdQTC0yLjEgT1IgQlNELTItQ2xhdXNlXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuKyNpbmNsdWRlIFx1MDAzY2xpYmFyZW5hL2NvbW1vbi5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGliYXJlbmEvYXNhbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGliYXJlbmEvYnVkZHkuaFx1MDAzZVxuK1xuK3UzMiBiZW5jaF9hbGxvY19zaXplO1xuK3UzMiBiZW5jaF9uYWxsb2NzO1xuK2xvbmcgYmVuY2hfaGl0cztcbitsb25nIGJlbmNoX2R1cmF0aW9uX25zO1xuK1xuK1NFQyhcInN5c2NhbGxcIilcbitpbnQgYmVuY2hfbWFsbG9jKHZvaWQpXG4re1xuK1x0dm9pZCBfX2FyZW5hICptZW07XG4rXHR1NjQgc3RhcnRfbnM7XG4rXHR1MzIgaTtcbitcbitcdHN0YXJ0X25zID0gYnBmX2t0aW1lX2dldF9ucygpO1xuK1x0Zm9yIChpID0gemVybzsgaSBcdTAwM2MgYmVuY2hfbmFsbG9jcyBcdTAwMjZcdTAwMjYgY2FuX2xvb3A7IGkrKykge1xuK1x0XHRtZW0gPSBhcmVuYV9tYWxsb2MoYmVuY2hfYWxsb2Nfc2l6ZSk7XG4rXHRcdGlmICghbWVtKVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0X19zeW5jX2FkZF9hbmRfZmV0Y2goXHUwMDI2YmVuY2hfZHVyYXRpb25fbnMsXG4rXHRcdFx0ICAgICBicGZfa3RpbWVfZ2V0X25zKCkgLSBzdGFydF9ucyk7XG4rXHRfX3N5bmNfYWRkX2FuZF9mZXRjaChcdTAwMjZiZW5jaF9oaXRzLCBpKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJzeXNjYWxsXCIpXG4raW50IGJlbmNoX2NhbGxvYyh2b2lkKVxuK3tcbitcdHZvaWQgX19hcmVuYSAqbWVtO1xuK1x0dTY0IHN0YXJ0X25zO1xuK1x0dTMyIGk7XG4rXG4rXHRzdGFydF9ucyA9IGJwZl9rdGltZV9nZXRfbnMoKTtcbitcdGZvciAoaSA9IHplcm87IGkgXHUwMDNjIGJlbmNoX25hbGxvY3MgXHUwMDI2XHUwMDI2IGNhbl9sb29wOyBpKyspIHtcbitcdFx0bWVtID0gYXJlbmFfY2FsbG9jKDEsIGJlbmNoX2FsbG9jX3NpemUpO1xuK1x0XHRpZiAoIW1lbSlcbitcdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbitcbitcdF9fc3luY19hZGRfYW5kX2ZldGNoKFx1MDAyNmJlbmNoX2R1cmF0aW9uX25zLFxuK1x0XHRcdCAgICAgYnBmX2t0aW1lX2dldF9ucygpIC0gc3RhcnRfbnMpO1xuK1x0X19zeW5jX2FkZF9hbmRfZmV0Y2goXHUwMDI2YmVuY2hfaGl0cywgaSk7XG4rXHRyZXR1cm4gMDtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX3NwaW5fbG9jay5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX3NwaW5fbG9jay5oXG5pbmRleCBhZTZiNzJkMTViYjY3Li44NzJmYTIwZjI5YTU5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX3NwaW5fbG9jay5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXJlbmFfc3Bpbl9sb2NrLmhcbkBAIC0xLDQgKzEsNCBAQFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgQlNELTItQ2xhdXNlXG4gLyogQ29weXJpZ2h0IChjKSAyMDI1IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuICNpZm5kZWYgQlBGX0FSRU5BX1NQSU5fTE9DS19IXG4gI2RlZmluZSBCUEZfQVJFTkFfU1BJTl9MT0NLX0hcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXRvbWljLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXRvbWljLmhcbmluZGV4IDQzYzMwNmUxN2YxOTguLjY1NTgyYjIwMTBhZDQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXRvbWljLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hdG9taWMuaFxuQEAgLTEsNCArMSw0IEBAXG4tLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBCU0QtMi1DbGF1c2VcbiAvKiBDb3B5cmlnaHQgKGMpIDIwMjUgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXG4gI2lmbmRlZiBCUEZfQVRPTUlDX0hcbiAjZGVmaW5lIEJQRl9BVE9NSUNfSFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9tYXlfZ290by5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX21heV9nb3RvLmhcbmluZGV4IDliYTkwNjg5ZDZiYTIuLmIzMmE0MjBkNGUxYWQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfbWF5X2dvdG8uaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX21heV9nb3RvLmhcbkBAIC0xLDMgKzEsNCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBMR1BMLTIuMSBPUiBCU0QtMi1DbGF1c2VcbiAjcHJhZ21hIG9uY2VcbiBcbiAvKlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2JpdG1hcC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvYml0bWFwLmhcbmluZGV4IGUyNDMxZWE2ZmRkNjguLjE2M2UyYjgzZDk0MzEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9iaXRtYXAuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvYml0bWFwLmhcbkBAIC0xLDUgKzEsOCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBMR1BMLTIuMSBPUiBCU0QtMi1DbGF1c2VcbiAjcHJhZ21hIG9uY2VcbiBcbisjaW5jbHVkZSBcdTAwM2NicGZfYXRvbWljLmhcdTAwM2VcbitcbiAjZGVmaW5lIEJJVFNfUEVSX0JZVEVcdFx0OFxuICNkZWZpbmUgQllURVNfVE9fQklUUyhuYilcdCgobmIpICogQklUU19QRVJfQllURSlcbiBcbkBAIC0xNSwxMSArMTgsOCBAQCBzdHJ1Y3QgYXJlbmFfYml0bWFwIHtcbiBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcF9hbGxvYyhzaXplX3QgYml0cyk7XG4gdm9pZCBibXBfZnJlZShzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcCk7XG4gXG4tdm9pZCBfX2JtcF9zZXRfYml0KHUzMiBiaXQsIHN0cnVjdCBhcmVuYV9iaXRtYXAgX19hcmVuYSAqYm1wKTtcbi12b2lkIF9fYm1wX2NsZWFyX2JpdCh1MzIgYml0LCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcCk7XG4gdm9pZCBibXBfc2V0X2JpdCh1MzIgYml0LCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcCk7XG4gdm9pZCBibXBfY2xlYXJfYml0KHUzMiBiaXQsIHN0cnVjdCBhcmVuYV9iaXRtYXAgX19hcmVuYSAqYm1wKTtcbi1ib29sIGJtcF90ZXN0X2JpdCh1MzIgYml0LCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcCk7XG4gYm9vbCBibXBfdGVzdF9hbmRfY2xlYXJfYml0KHUzMiBiaXQsIHN0cnVjdCBhcmVuYV9iaXRtYXAgX19hcmVuYSAqYm1wKTtcbiBib29sIGJtcF90ZXN0X2FuZF9zZXRfYml0KHUzMiBiaXQsIHN0cnVjdCBhcmVuYV9iaXRtYXAgX19hcmVuYSAqYm1wKTtcbiBcbkBAIC0zMiwzICszMiwyNyBAQCB2b2lkIGJtcF9jb3B5KHNpemVfdCBiaXRzLCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmRzdCwgc3RydWN0IGFyZW5hX2JpdG1hcFxuIGJvb2wgYm1wX2ludGVyc2VjdHMoc2l6ZV90IGJpdHMsIHN0cnVjdCBhcmVuYV9iaXRtYXAgX19hcmVuYSAqYXJnMSwgc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICphcmcyKTtcbiBib29sIGJtcF9zdWJzZXQoc2l6ZV90IGJpdHMsIHN0cnVjdCBhcmVuYV9iaXRtYXAgX19hcmVuYSAqYmlnLCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKnNtYWxsKTtcbiB2b2lkIGJtcF9wcmludChzaXplX3QgYml0cywgc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICpibXApO1xuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmVcbit2b2lkIF9fYm1wX3NldF9iaXQodTMyIGJpdCwgc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICpibXApXG4re1xuK1x0dm9sYXRpbGUgdTY0IF9fYXJlbmEgKndvcmQgPSBcdTAwMjZibXAtXHUwMDNlYml0c1tCSVRfV09SRChiaXQpXTtcbitcbitcdCp3b3JkIHw9IEJJVF9NQVNLKGJpdCk7XG4rfVxuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmVcbit2b2lkIF9fYm1wX2NsZWFyX2JpdCh1MzIgYml0LCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcClcbit7XG4rXHR2b2xhdGlsZSB1NjQgX19hcmVuYSAqd29yZCA9IFx1MDAyNmJtcC1cdTAwM2ViaXRzW0JJVF9XT1JEKGJpdCldO1xuK1xuK1x0KndvcmQgXHUwMDI2PSB+QklUX01BU0soYml0KTtcbit9XG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZVxuK2Jvb2wgYm1wX3Rlc3RfYml0KHUzMiBiaXQsIHN0cnVjdCBhcmVuYV9iaXRtYXAgX19hcmVuYSAqYm1wKVxuK3tcbitcdHU2NCB3b3JkID0gUkVBRF9PTkNFKGJtcC1cdTAwM2ViaXRzW0JJVF9XT1JEKGJpdCldKTtcbitcbitcdHJldHVybiB3b3JkIFx1MDAyNiBCSVRfTUFTSyhiaXQpO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9jb21tb24uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2NvbW1vbi5oXG5pbmRleCA5MzFhY2U5YTQ5ZTJiLi5hNjIyMDM1NWE2OTc1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvY29tbW9uLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2NvbW1vbi5oXG5AQCAtNDksNiArNDksNyBAQCBleHRlcm4gdm9sYXRpbGUgdTY0IGFzYW5fdmlvbGF0ZWQ7XG4gaW50IGFyZW5hX2ZscyhfX3U2NCB3b3JkKTtcbiBcbiB2b2lkIF9fYXJlbmEgKmFyZW5hX21hbGxvYyhzaXplX3Qgc2l6ZSk7XG4rdm9pZCBfX2FyZW5hICphcmVuYV9jYWxsb2Moc2l6ZV90IG5jb3VudCwgc2l6ZV90IHNpemUpO1xuIHZvaWQgYXJlbmFfZnJlZSh2b2lkIF9fYXJlbmEgKnB0cik7XG4gXG4gLypcbkBAIC02MSw2ICs2Miw3NiBAQCB2b2lkIGFyZW5hX2ZyZWUodm9pZCBfX2FyZW5hICpwdHIpO1xuICAqL1xuICNkZWZpbmUgYXJlbmFfc3VicHJvZ19pbml0KCkgZG8geyBhc20gdm9sYXRpbGUgKFwiXCIgOjogXCJyXCIoXHUwMDI2YXJlbmEpKTsgfSB3aGlsZSAoMClcbiBcbisvKlxuKyAqIEJQRiBkb2VzIG5vdCBjdXJyZW50bHkgc3VwcG9ydCB0aGUgbWVtc2V0IGludHJpbnNpY3MuIGZvciBsYXJnZVxuKyAqIHNlcXVlbnRpYWwgY29waWVzLCBvciBhc3NpZ25tZW50cyBvZiBsYXJnZSBkYXRhIHN0cnVjdHVyZXMsXG4rICogdGhlIGZyb250ZW5kIHdpbGwgZ2VuZXJhdGUgYW4gaW50cmluc2ljIHRoYXQgY2F1c2VzIHRoZSBCUEZcbisgKiBiYWNrZW5kIHRvIGV4aXQgZHVlIHRvIGEgbWlzc2luZyBpbXBsZW1lbnRhdGlvbi4gUHJvdmlkZVxuKyAqIGltcGxlbWVudGF0aW9ucyBmb3IgdGhlIGludHJpbnNpYy5cbisgKi9cbitzdGF0aWMgaW5saW5lIGludCBhcmVuYV9tZW1zZXQoczggX19hcmVuYSAqZHN0LCBzOCB2YWwsIHNpemVfdCBzaXplKVxuK3tcbitcdHNpemVfdCBoZWFkYWxpZ247XG4rXHRzaXplX3QgdGFpbGFsaWduO1xuK1x0dTggdXZhbCA9ICh1OCl2YWw7XG4rXHRzaXplX3QgdmFsNjQ7XG4rXHRzaXplX3QgaTtcbitcbitcdC8qXG4rXHQgKiBDYWxjdWxhdGUgaG93IG1hbnkgYnl0ZXMgdG8gdGhlIG5leHQgd29yZC1hbGlnbmVkIG9uZS5cbitcdCAqIFdlIGdldCB0aGlzIGJ5IHRydW5jYXRpbmcgdGhlIDJzIGNvbXBsZW1lbnQgb2YgdGhlXG4rXHQgKiBwb2ludGVyIHRvIHRoZSBsYXN0IDMgYml0cy4gSW50dWl0aXZlbHksIHNpbmNlXG4rXHQgKlxuK1x0ICogVGhlIE4gTFNCcyBvZiBkc3QgYW5kIC1kc3QgYWRkIHRvIDEgXHUwMDNjXHUwMDNjIE4sIHdoaWNoXG4rXHQgKiBpcyB3aHkgZHN0ICsgKC1kc3QpID0gMHgwVUxMIHRocm91Z2ggb3ZlcmZsb3cuIFNvIHRoZVxuK1x0ICogbGFzdCBOID0gMyBiaXRzIG9mIHRoZSBuZWdhdGl2ZSBhcmUgdGhlIG51bWJlciBvZlxuK1x0ICogYnl0ZXMgdG8gYWxpZ24gZHN0IG9uIHRoZSBsYXN0IDMgYml0cy5cbitcdCAqXG4rXHQgKi9cbitcdGhlYWRhbGlnbiA9IC0odTY0KWRzdCBcdTAwMjYgKHNpemVvZih1NjQpIC0gMSk7XG4rXHRpZiAoIWhlYWRhbGlnbiB8fCBzaXplIFx1MDAzYyBoZWFkYWxpZ24pXG4rXHRcdGdvdG8gcHRyYWxpZ25lZDtcbitcbitcdGZvciAoaSA9IHplcm87IGkgXHUwMDNjIGhlYWRhbGlnbiBcdTAwMjZcdTAwMjYgY2FuX2xvb3A7IGkrKylcbitcdFx0ZHN0W2ldID0gdXZhbDtcbitcbitcdGRzdCArPSBoZWFkYWxpZ247XG4rXHRzaXplIC09IGhlYWRhbGlnbjtcbitcbitwdHJhbGlnbmVkOlxuK1xuK1x0LypcbitcdCAqIE1ha2UgYSB3b3JkIHdpdGggYWxsIGJ5dGVzIGVxdWFsIHRvIHRoZSBieXRlIHdlIGFyZSBzZXR0aW5nLlxuK1x0ICogU2luY2UgMSBieXRlIC1cdTAwM2UgMiBoZXggZGlnaXRzLlxuK1x0ICpcbitcdCAqIFNoaWZ0aW5nIHRoZSB2YWx1ZSBieSBhIDAgYnl0ZXMgaXMgZXF1YWwgdG8gbXVsdGlwbGljYXRpb24gYnkgMHgwMVxuK1x0ICogU2hpZnRpbmcgYnkgMSBieXRlcyBpcyBlcXVhbCB0byBtdWx0aXBsaWNhdGlvbiBieSAweDAxIFx1MDAzY1x1MDAzYyA4LFxuK1x0ICogLi4uXG4rXHQgKiBTaGlmdGluZyBieSA3IGJ5dGVzIGlzIGVxdWFsIHRvIG11bHRpcGxpY2F0aW9uIGJ5IDB4MDEgXHUwMDNjXHUwMDNjIDU2LlxuK1x0ICpcbitcdCAqIEVuZCBvcGVyYXRpb24gdG8gcmVwbGljYXRlIHRoZSBieXRlIGludG8gYWxsIHRoZSBieXRlcyBvZiBhIHdvcmRcbitcdCAqIGlzIChzaW5jZSBhIHwgYiA9IGEgKyBiIHdoZW4gYSBcdTAwMjYgYiA9PSAwKTpcbitcdCAqXG4rXHQgKiB2YWwgKyB2YWwgKiAoMVVMIFx1MDAzY1x1MDAzYyA4KSArIHZhbCAqICgxVUwgXHUwMDNjXHUwMDNjIDE2KSArIC4uICsgdmFsICogKDFVTCBcdTAwM2NcdTAwM2MgNTYpXG4rXHQgKiA9IHZhbCAqICgxVUwgXHUwMDNjXHUwMDNjIDU2ICsgMVVMIFx1MDAzY1x1MDAzYyA0OCArIC4uLiArIDFVTCBcdTAwM2NcdTAwM2MgMClcbitcdCAqID0gdmFsICogKDB4MDFVTCBcdTAwM2NcdTAwM2MgNTYgfCAweDAxVUwgXHUwMDNjXHUwMDNjIDQ4ICsgLi4uICsgMVVMIFx1MDAzY1x1MDAzYyAwKVxuK1x0ICogPSB2YWwgKiAweDAxMDEgMDEwMSAwMTAxIDAxMDFcbitcdCAqL1xuK1x0dmFsNjQgPSAodTgpdmFsICogMHgwMTAxMDEwMTAxMDEwMTAxVUxMO1xuK1xuK1x0LyogUG9pbnRlciBpcyBub3cgYWxpZ25lZCwgdXNlIHdvcmQtYWxpZ25lZCBhc3NpZ25tZW50cy4gKi9cbitcdGZvciAoaSA9IHplcm87IGkgXHUwMDNjIHNpemUgLyBzaXplb2YodTY0KSBcdTAwMjZcdTAwMjYgY2FuX2xvb3A7IGkrKylcbitcdFx0KCh1NjQgX19hcmVuYSAqKWRzdClbaV0gPSB2YWw2NDtcbitcbitcdC8qIEdvIGJhY2sgdG8gYnl0ZS1hbGlnbmVkIGZvciB0aGUgdGFpbC4gKi9cbitcdHRhaWxhbGlnbiA9IHNpemUgJSBzaXplb2YodTY0KTtcbitcdGRzdCArPSBzaXplIC0gdGFpbGFsaWduO1xuK1x0Zm9yIChpID0gemVybzsgaSBcdTAwM2MgdGFpbGFsaWduIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSsrKVxuK1x0XHRkc3RbaV0gPSB1dmFsO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuICNlbHNlIC8qICEgX19CUEZfXyAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY3N0ZGludC5oXHUwMDNlXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2JpdG1hcC5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9iaXRtYXAuYnBmLmNcbmluZGV4IDc2MzE5YTUyOWYwMmIuLmU2NmIzYTI2Y2EzZDYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYml0bWFwLmJwZi5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYml0bWFwLmJwZi5jXG5AQCAtMSwzICsxLDYgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTEdQTC0yLjEgT1IgQlNELTItQ2xhdXNlXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuK1xuICNpbmNsdWRlIFx1MDAzY2xpYmFyZW5hL2NvbW1vbi5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGliYXJlbmEvYXNhbi5oXHUwMDNlXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jXG5pbmRleCA1MTM1ZDVjNzJhNDZkLi5kZTY1NmI2OWQxM2FmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmNcbkBAIC0xMDMsMjMgKzEwMyw2IEBAIHZvbGF0aWxlIGJvb2wgYXNhbl9pbml0ZWQgPSBmYWxzZTtcbiAgKi9cbiB2b2xhdGlsZSBib29sIGFzYW5fcmVwb3J0X29uY2UgPSBmYWxzZTtcbiBcbi0vKlxuLSAqIEJQRiBkb2VzIG5vdCBjdXJyZW50bHkgc3VwcG9ydCB0aGUgbWVtc2V0L21lbWNweS9tZW1jbXAgaW50cmluc2ljcy5cbi0gKiBGb3IgbGFyZ2Ugc2VxdWVudGlhbCBjb3BpZXMsIG9yIGFzc2lnbm1lbnRzIG9mIGxhcmdlIGRhdGEgc3RydWN0dXJlcyxcbi0gKiB0aGUgZnJvbnRlbmQgd2lsbCBnZW5lcmF0ZSBhbiBpbnRyaW5zaWMgdGhhdCBjYXVzZXMgdGhlIEJQRiBiYWNrZW5kXG4tICogdG8gZXhpdCBkdWUgdG8gYSBtaXNzaW5nIGltcGxlbWVudGF0aW9uLiBQcm92aWRlIGEgc2ltcGxlIGltcGxlbWVudGF0aW9uXG4tICoganVzdCBmb3IgbWVtc2V0IHRvIHVzZSBpdCBmb3IgcG9pc29uaW5nL3VucG9pc29uaW5nIHRoZSBtYXAuXG4tICovXG4tX193ZWFrIGludCBhc2FuX21lbXNldChzOCBfX2FyZW5hICpkc3QsIHM4IHZhbCwgc2l6ZV90IHNpemUpXG4te1xuLVx0c2l6ZV90IGk7XG4tXG4tXHRmb3IgKGkgPSB6ZXJvOyBpIFx1MDAzYyBzaXplIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSsrKVxuLVx0XHRkc3RbaV0gPSB2YWw7XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4gLyogVmFsaWRhdGUgYSAxLWJ5dGUgYWNjZXNzLCBhbHdheXMgd2l0aGluIGEgc2luZ2xlIGJ5dGUuICovXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIG1lbW9yeV9pc19wb2lzb25lZF8xKHM4IF9fYXJlbmEgKmFkZHIpXG4ge1xuQEAgLTQyMiw3ICs0MDUsNyBAQCBfX2hpZGRlbiBfX25vYXNhbiBpbnQgYXNhbl9wb2lzb24odm9pZCBfX2FyZW5hICphZGRyLCBzOCB2YWwsIHNpemVfdCBzaXplKVxuIFx0c2hhZG93ID0gbWVtX3RvX3NoYWRvdyhhZGRyKTtcbiBcdGxlbiA9IHNpemUgXHUwMDNlXHUwMDNlIEFTQU5fU0hBRE9XX1NISUZUO1xuIFxuLVx0YXNhbl9tZW1zZXQoc2hhZG93LCB2YWwsIGxlbik7XG4rXHRhcmVuYV9tZW1zZXQoc2hhZG93LCB2YWwsIGxlbik7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNDYzLDcgKzQ0Niw3IEBAIF9faGlkZGVuIF9fbm9hc2FuIGludCBhc2FuX3VucG9pc29uKHZvaWQgX19hcmVuYSAqYWRkciwgc2l6ZV90IHNpemUpXG4gXHRzaGFkb3cgPSBtZW1fdG9fc2hhZG93KGFkZHIpO1xuIFx0bGVuID0gc2l6ZSBcdTAwM2VcdTAwM2UgQVNBTl9TSEFET1dfU0hJRlQ7XG4gXG4tXHRhc2FuX21lbXNldChzaGFkb3csIDAsIGxlbik7XG4rXHRhcmVuYV9tZW1zZXQoc2hhZG93LCAwLCBsZW4pO1xuIFxuIFx0LypcbiBcdCAqIElmIHdlIGFyZSBhbGxvY2F0aW5nIGEgbm9uLWdyYW51bGUgYWxpZ25lZCByZWdpb24sIHdlIG5lZWQgdG8gYWRqdXN0XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9iaXRtYXAuYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2JpdG1hcC5icGYuY1xuaW5kZXggNWZmOGU2ODhkZGM3Ni4uMDM5MGYyMGNlMzY2ZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYml0bWFwLmJwZi5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2JpdG1hcC5icGYuY1xuQEAgLTM0LDI0ICszNCw2IEBAIHZvaWQgYm1wX2ZyZWUoc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICpibXApXG4gXHRhcmVuYV9mcmVlKGJtcCk7XG4gfVxuIFxuLV9fd2Vha1xuLXZvaWQgX19ibXBfc2V0X2JpdCh1MzIgYml0LCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcClcbi17XG4tXHRibXAtXHUwMDNlYml0c1tCSVRfV09SRChiaXQpXSB8PSBCSVRfTUFTSyhiaXQpO1xuLX1cbi1cbi1fX3dlYWtcbi12b2lkIF9fYm1wX2NsZWFyX2JpdCh1MzIgYml0LCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcClcbi17XG4tXHRibXAtXHUwMDNlYml0c1tCSVRfV09SRChiaXQpXSBcdTAwMjY9IH5CSVRfTUFTSyhiaXQpO1xuLX1cbi1cbi1fX3dlYWtcbi1ib29sIGJtcF90ZXN0X2JpdCh1MzIgYml0LCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcClcbi17XG4tXHRyZXR1cm4gYm1wLVx1MDAzZWJpdHNbQklUX1dPUkQoYml0KV0gXHUwMDI2IEJJVF9NQVNLKGJpdCk7XG4tfVxuLVxuIF9fd2Vha1xuIGJvb2wgYm1wX3Rlc3RfYW5kX2NsZWFyX2JpdCh1MzIgYml0LCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcClcbiB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9idWRkeS5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYnVkZHkuYnBmLmNcbmluZGV4IGM2NzRlZTVjZmNjMWQuLjI0OTBhYjEzOTZkZTAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2J1ZGR5LmJwZi5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2J1ZGR5LmJwZi5jXG5AQCAtNSw2ICs1LDggQEBcbiAjaW5jbHVkZSBcdTAwM2NsaWJhcmVuYS9hc2FuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaWJhcmVuYS9idWRkeS5oXHUwMDNlXG4gXG4rI2luY2x1ZGUgXHUwMDNjYnBmX2FyZW5hX3NwaW5fbG9jay5oXHUwMDNlXG4rXG4gLypcbiAgKiBCdWRkeSBhbGxvY2F0b3IgYXJlbmEtYmFzZWQgaW1wbGVtZW50YXRpb24uXG4gICpcbkBAIC00NSwxNSArNDcsOCBAQCBlbnVtIHtcbiBcdEJVRERZX0NIVU5LX1BBR0VTXHQ9IEJVRERZX0NIVU5LX0JZVEVTIC8gX19QQUdFX1NJWkVcbiB9O1xuIFxuLXN0YXRpYyBpbmxpbmUgaW50IGJ1ZGR5X2xvY2soc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KVxuLXtcbi1cdHJldHVybiBhcmVuYV9zcGluX2xvY2soXHUwMDI2YnVkZHktXHUwMDNlbG9jayk7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBidWRkeV91bmxvY2soc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KVxuLXtcbi1cdGFyZW5hX3NwaW5fdW5sb2NrKFx1MDAyNmJ1ZGR5LVx1MDAzZWxvY2spO1xuLX1cbisjZGVmaW5lIGJ1ZGR5X2xvY2soYnVkZHksIGZsYWdzKSAoYXJlbmFfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2KGJ1ZGR5KS1cdTAwM2Vsb2NrLCAoZmxhZ3MpKSlcbisjZGVmaW5lIGJ1ZGR5X3VubG9jayhidWRkeSwgZmxhZ3MpIChhcmVuYV9zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNihidWRkeSktXHUwMDNlbG9jaywgKGZsYWdzKSkpXG4gXG4gLypcbiAgKiBSZXNlcnZlIHBhcnQgb2YgdGhlIGFyZW5hIGFkZHJlc3Mgc3BhY2UgZm9yIHRoZSBhbGxvY2F0b3IuIFdlIHVzZVxuQEAgLTM4NSw2ICszODAsNyBAQCBzdGF0aWMgc3RydWN0IGJ1ZGR5X2NodW5rIF9fYXJlbmEgKmJ1ZGR5X2NodW5rX2dldChzdHJ1Y3QgYnVkZHkgX19hcmVuYSAqYnVkZHkpXG4ge1xuIFx0dTY0IG9yZGVyLCBvcmQsIG1pbl9vcmRlciwgbWF4X29yZGVyO1xuIFx0c3RydWN0IGJ1ZGR5X2NodW5rIF9fYXJlbmEgICpjaHVuaztcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRzaXplX3QgbGVmdDtcbiBcdGludCBwb3dlcjI7XG4gXHR1NjQgdmFkZHI7XG5AQCAtNDE2LDcgKzQxMiw3IEBAIHN0YXRpYyBzdHJ1Y3QgYnVkZHlfY2h1bmsgX19hcmVuYSAqYnVkZHlfY2h1bmtfZ2V0KHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG4gXG4tXHRpZiAoYnVkZHlfbG9jayhidWRkeSkpIHtcbitcdGlmIChidWRkeV9sb2NrKGJ1ZGR5LCBmbGFncykpIHtcbiBcdFx0LypcbiBcdFx0ICogV2UgY2Fubm90IHJlY2xhaW0gdGhlIHZhZGRyIHNwYWNlLCBidXQgdGhhdCBpcyBvayAtIHRoaXNcbiBcdFx0ICogb3BlcmF0aW9uIHNob3VsZCBhbHdheXMgc3VjY2VlZC4gVGhlIGVycm9yIHBhdGggaXMgdG8gY2F0Y2hcbkBAIC01MjAsNyArNTE2LDcgQEAgc3RhdGljIHN0cnVjdCBidWRkeV9jaHVuayBfX2FyZW5hICpidWRkeV9jaHVua19nZXQoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KVxuIFx0XHRcdGFyZW5hX3N0ZGVycihcbiBcdFx0XHRcdFwiY2h1bmsgaGFzIHNpemUgb2YgMHglbHggYnl0ZXMgKGxlZnQgJWx4IGJ5dGVzKVxcblwiLFxuIFx0XHRcdFx0c2l6ZW9mKCpjaHVuayksIGxlZnQpO1xuLVx0XHRcdGJ1ZGR5X3VubG9jayhidWRkeSk7XG4rXHRcdFx0YnVkZHlfdW5sb2NrKGJ1ZGR5LCBmbGFncyk7XG4gXG4gXHRcdFx0cmV0dXJuIE5VTEw7XG4gXHRcdH1cbkBAIC01MzEsNyArNTI3LDcgQEAgc3RhdGljIHN0cnVjdCBidWRkeV9jaHVuayBfX2FyZW5hICpidWRkeV9jaHVua19nZXQoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KVxuIFx0XHRvcmRlciA9IChwb3dlcjIgXHUwMDNlPSBCVUREWV9NSU5fQUxMT0NfU0hJRlQpID8gcG93ZXIyIC0gQlVERFlfTUlOX0FMTE9DX1NISUZUIDogMDtcbiBcbiBcdFx0aWYgKGlkeF9zZXRfYWxsb2NhdGVkKGNodW5rLCBpZHgsIHRydWUpKSB7XG4tXHRcdFx0YnVkZHlfdW5sb2NrKGJ1ZGR5KTtcbitcdFx0XHRidWRkeV91bmxvY2soYnVkZHksIGZsYWdzKTtcbiBcdFx0XHRyZXR1cm4gTlVMTDtcbiBcdFx0fVxuIFxuQEAgLTU0Nyw3ICs1NDMsNyBAQCBzdGF0aWMgc3RydWN0IGJ1ZGR5X2NodW5rIF9fYXJlbmEgKmJ1ZGR5X2NodW5rX2dldChzdHJ1Y3QgYnVkZHkgX19hcmVuYSAqYnVkZHkpXG4gXHRcdCAqL1xuIFx0XHRtaW5fb3JkZXIgPSBsZWZ0ID8gb3JkZXIgKyAxIDogb3JkZXI7XG4gXHRcdGlmIChhZGRfbGVmdG92ZXJzX3RvX2ZyZWVsaXN0KGNodW5rLCBpZHgsIG1pbl9vcmRlciwgbWF4X29yZGVyKSkge1xuLVx0XHRcdGJ1ZGR5X3VubG9jayhidWRkeSk7XG4rXHRcdFx0YnVkZHlfdW5sb2NrKGJ1ZGR5LCBmbGFncyk7XG4gXHRcdFx0cmV0dXJuIE5VTEw7XG4gXHRcdH1cbiBcbkBAIC01NTYsNyArNTUyLDcgQEAgc3RhdGljIHN0cnVjdCBidWRkeV9jaHVuayBfX2FyZW5hICpidWRkeV9jaHVua19nZXQoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KVxuIFx0XHRtYXhfb3JkZXIgPSBvcmRlcjtcbiBcdH1cbiBcbi1cdGJ1ZGR5X3VubG9jayhidWRkeSk7XG4rXHRidWRkeV91bmxvY2soYnVkZHksIGZsYWdzKTtcbiBcbiBcdHJldHVybiBjaHVuaztcbiB9XG5AQCAtNTY0LDYgKzU2MCw3IEBAIHN0YXRpYyBzdHJ1Y3QgYnVkZHlfY2h1bmsgX19hcmVuYSAqYnVkZHlfY2h1bmtfZ2V0KHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSlcbiBfX3dlYWsgaW50IGJ1ZGR5X2luaXQoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KVxuIHtcbiBcdHN0cnVjdCBidWRkeV9jaHVuayBfX2FyZW5hICpjaHVuaztcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRpbnQgcmV0O1xuIFxuIFx0aWYgKCFhc2FuX3JlYWR5KCkpXG5AQCAtNTc5LDcgKzU3Niw3IEBAIF9fd2VhayBpbnQgYnVkZHlfaW5pdChzdHJ1Y3QgYnVkZHkgX19hcmVuYSAqYnVkZHkpXG4gXG4gXHRjaHVuayA9IGJ1ZGR5X2NodW5rX2dldChidWRkeSk7XG4gXG4tXHRpZiAoYnVkZHlfbG9jayhidWRkeSkpIHtcbitcdGlmIChidWRkeV9sb2NrKGJ1ZGR5LCBmbGFncykpIHtcbiBcdFx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsIGNodW5rLCBCVUREWV9DSFVOS19QQUdFUyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuQEAgLTU5MSw3ICs1ODgsNyBAQCBfX3dlYWsgaW50IGJ1ZGR5X2luaXQoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KVxuIFx0LyogUHV0IHRoZSBjaHVuayBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0LiAqL1xuIFx0YnVkZHktXHUwMDNlZmlyc3RfY2h1bmsgPSBjaHVuaztcbiBcbi1cdGJ1ZGR5X3VubG9jayhidWRkeSk7XG4rXHRidWRkeV91bmxvY2soYnVkZHksIGZsYWdzKTtcbiBcbiBcdHJldHVybiBjaHVuayA/IDAgOiAtRU5PTUVNO1xuIH1cbkBAIC03MzAsOSArNzI3LDEwIEBAIHN0YXRpYyB1NjQgYnVkZHlfYWxsb2NfZnJvbV9leGlzdGluZ19jaHVua3Moc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5LCBpbnQgb3JkXG4gICovXG4gc3RhdGljIHU2NCBidWRkeV9hbGxvY19mcm9tX25ld19jaHVuayhzdHJ1Y3QgYnVkZHkgX19hcmVuYSAqYnVkZHksIHN0cnVjdCBidWRkeV9jaHVuayBfX2FyZW5hICpjaHVuaywgaW50IG9yZGVyKVxuIHtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHR1NjQgYWRkcmVzcztcbiBcbi1cdGlmIChidWRkeV9sb2NrKGJ1ZGR5KSlcbitcdGlmIChidWRkeV9sb2NrKGJ1ZGR5LCBmbGFncykpXG4gXHRcdHJldHVybiAodTY0KU5VTEw7XG4gXG4gXG5AQCAtNzQ1LDcgKzc0Myw3IEBAIHN0YXRpYyB1NjQgYnVkZHlfYWxsb2NfZnJvbV9uZXdfY2h1bmsoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5LCBzdHJ1Y3QgYnVkZHlfXG4gXG4gXHRhZGRyZXNzID0gYnVkZHlfY2h1bmtfYWxsb2MoYnVkZHktXHUwMDNlZmlyc3RfY2h1bmssIG9yZGVyKTtcbiBcbi1cdGJ1ZGR5X3VubG9jayhidWRkeSk7XG4rXHRidWRkeV91bmxvY2soYnVkZHksIGZsYWdzKTtcbiBcbiBcdHJldHVybiAodTY0KWFkZHJlc3M7XG4gfVxuQEAgLTc1NCw2ICs3NTIsNyBAQCB2b2lkIF9fYXJlbmEgKmJ1ZGR5X2FsbG9jKHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSwgc2l6ZV90IHNpemUpXG4ge1xuIFx0dm9pZCBfX2FyZW5hICphZGRyZXNzID0gTlVMTDtcbiBcdHN0cnVjdCBidWRkeV9jaHVuayBfX2FyZW5hICpjaHVuaztcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRpbnQgb3JkZXI7XG4gXG4gXHRpZiAoIWJ1ZGR5KVxuQEAgLTc2NSwxMSArNzY0LDExIEBAIHZvaWQgX19hcmVuYSAqYnVkZHlfYWxsb2Moc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5LCBzaXplX3Qgc2l6ZSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG4gXG4tXHRpZiAoYnVkZHlfbG9jayhidWRkeSkpXG4rXHRpZiAoYnVkZHlfbG9jayhidWRkeSwgZmxhZ3MpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbiBcdGFkZHJlc3MgPSAodTggX19hcmVuYSAqKWJ1ZGR5X2FsbG9jX2Zyb21fZXhpc3RpbmdfY2h1bmtzKGJ1ZGR5LCBvcmRlcik7XG4tXHRidWRkeV91bmxvY2soYnVkZHkpO1xuK1x0YnVkZHlfdW5sb2NrKGJ1ZGR5LCBmbGFncyk7XG4gXHRpZiAoYWRkcmVzcylcbiBcdFx0Z290byBkb25lO1xuIFxuQEAgLTg4MCw2ICs4NzksNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBidWRkeV9mcmVlX3VubG9ja2VkKHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSwgdTY0XG4gXG4gX193ZWFrIGludCBidWRkeV9mcmVlKHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSwgdm9pZCBfX2FyZW5hICphZGRyKVxuIHtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRpbnQgcmV0O1xuIFxuIFx0aWYgKCFidWRkeSlcbkBAIC04ODksMTMgKzg4OSwxMyBAQCBfX3dlYWsgaW50IGJ1ZGR5X2ZyZWUoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5LCB2b2lkIF9fYXJlbmEgKmFkZHIpXG4gXHRpZiAoIWFkZHIpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0cmV0ID0gYnVkZHlfbG9jayhidWRkeSk7XG4rXHRyZXQgPSBidWRkeV9sb2NrKGJ1ZGR5LCBmbGFncyk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0cmV0ID0gYnVkZHlfZnJlZV91bmxvY2tlZChidWRkeSwgKHU2NClhZGRyKTtcbiBcbi1cdGJ1ZGR5X3VubG9jayhidWRkeSk7XG4rXHRidWRkeV91bmxvY2soYnVkZHksIGZsYWdzKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvY29tbW9uLmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9jb21tb24uYnBmLmNcbmluZGV4IDU2OWYwZjY0ZDUxOGIuLjc4NWQ0ODcyY2I0OTQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2NvbW1vbi5icGYuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9jb21tb24uYnBmLmNcbkBAIC0xLDUgKzEsNyBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBMR1BMLTIuMSBPUiBCU0QtMi1DbGF1c2VcbiAvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXG4rI2luY2x1ZGUgXHUwMDNjbGltaXRzLmhcdTAwM2VcbitcbiAjaW5jbHVkZSBcdTAwM2NsaWJhcmVuYS9jb21tb24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpYmFyZW5hL2FzYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpYmFyZW5hL2J1ZGR5LmhcdTAwM2VcbkBAIC00OCwxMCArNTAsMzMgQEAgX193ZWFrIHZvaWQgX19hcmVuYSAqYXJlbmFfbWFsbG9jKHNpemVfdCBzaXplKVxuIFx0cmV0dXJuIGJ1ZGR5X2FsbG9jKFx1MDAyNmJ1ZGR5LCBzaXplKTtcbiB9XG4gXG4rX193ZWFrIHZvaWQgX19hcmVuYSAqYXJlbmFfY2FsbG9jKHNpemVfdCBuY291bnQsIHNpemVfdCBzaXplKVxuK3tcbitcdHZvaWQgX19hcmVuYSAqbWVtO1xuK1x0c2l6ZV90IHRvdGFsO1xuK1xuK1x0LypcbitcdCAqIElkZWFsbHkgd2UnZCBiZSB1c2luZyBfX2J1aWx0aW5fbXVsX292ZXJmbG93IGhlcmUsXG4rXHQgKiBidXQgdGhlIEJQRiBjb21waWxlciBiYWNrZW5kIGRvZXNuJ3QgaW1wbGVtZW50IF9fbXVsdGkzLlxuK1x0ICogVGhlcmUgYXJlIHdheXMgdG8gb3B0aW1pemUgdGhlIGRpdmlzaW9uIGF3YXkgZnJvbSB0aGVcbitcdCAqIG92ZXJmbG93IGNoZWNrLCBidXQgYW55IGNvc3RzIGFyZSBkd2FyZmVkIGJ5IHRoZVxuK1x0ICogYnVkZHlfYWxsb2MoKSBjYWxsLiBLZWVwIGl0IHNpbXBsZSBmb3Igbm93LlxuK1x0ICovXG4rXHRpZiAodW5saWtlbHkobmNvdW50IFx1MDAyNlx1MDAyNiBzaXplIFx1MDAzZT0gVUxMT05HX01BWCAvIG5jb3VudCkpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0dG90YWwgPSBuY291bnQgKiBzaXplO1xuK1xuK1x0bWVtID0gYnVkZHlfYWxsb2MoXHUwMDI2YnVkZHksIHRvdGFsKTtcbitcdGlmIChsaWtlbHkobWVtKSlcbitcdFx0YXJlbmFfbWVtc2V0KG1lbSwgMCwgdG90YWwpO1xuK1xuK1x0cmV0dXJuIG1lbTtcbit9XG4rXG4gX193ZWFrIHZvaWQgYXJlbmFfZnJlZSh2b2lkIF9fYXJlbmEgKnB0cilcbiB7XG4gXHRidWRkeV9mcmVlKFx1MDAyNmJ1ZGR5LCBwdHIpO1xuIH1cbiBcbi1cbiBjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxOTo0Mzo0My43NDk5OTk0MzJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTk4MzA2NzAwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipCUEYgU2VsZnRlc3RzIFBhdGNoIEFuYWx5c2lzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCBzZXJpZXMgbmVjZXNzaXRhdGVzIGZ1enppbmcuIFRoZSBmaWxlcyBsaXN0ZWQgYXJlIGFsbCBuZXN0bGVkIHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2AuIE15IGltbWVkaWF0ZSByZWFjdGlvbiBpczogKm5vdCBrZXJuZWwgY29yZSBjb2RlKi4gVGhpcyBsb29rcyBsaWtlIEJQRiBzZWxmLXRlc3RzIGFuZCBiZW5jaG1hcmtzLiBJJ20gcHJldHR5IGNlcnRhaW4gdGhpcyBpcyB1c2VyLXNwYWNlIHRvb2xpbmcgZGVzaWduZWQgZm9yIHRlc3RpbmcsIG5vdCBrZXJuZWwgZnVuY3Rpb25hbGl0eS5cblxuVGhlIHByb21wdCBzdGF0ZXMgY2xlYXIgY3JpdGVyaWEgZm9yIHdoZW4gYSBwYXRjaCAqZG9lc24ndCogd2FycmFudCBmdXp6aW5nLiBUaGluZ3MgbGlrZSBkb2N1bWVudGF0aW9uIHVwZGF0ZXMsIGxvZ2dpbmcgY2hhbmdlcywgZGVjb3JhdGl2ZSBtb2RpZmljYXRpb25zLCB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzLCBhbmQgc3BlY2lmaWMgZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyBhcmUgYWxsIGV4ZW1wdC4gVGhpcyBzZWVtcyBsaWtlIGl0IHdvdWxkIGJlIHJlbGF0ZWQuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgYmVjYXVzZSBpdCdzIGFsd2F5cyBnb29kIHRvIGJlIHRob3JvdWdoLiBPa2F5LCBhIHF1aWNrIGdsYW5jZSBhdCB0aGUgZmlsZSBsaXN0IGNvbmZpcm1zIG15IGluaXRpYWwgYXNzZXNzbWVudC4gQWxsIHBhdGhzIGJlZ2luIHdpdGggYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9gLiBUaGlzIHBhdGNoICpvbmx5KiB0b3VjaGVzIEJQRiBzZWxmLXRlc3RzIGFuZCByZWxhdGVkIGJlbmNobWFyayBjb2RlLiBJdCdzIG5vdCBtb2RpZnlpbmcgYW55IGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiBUaGUgY29udGV4dCBpcyB2ZXJ5IGNsZWFybHkgdXNlci1zcGFjZSB0b29scyBhbmQgQlBGIHByb2dyYW1zIGZvciB0ZXN0aW5nLiBObyBjaGFuY2Ugb2YgYW55IGNvcmUga2VybmVsIHNpZGUgZWZmZWN0cy5cblxuVGhlcmVmb3JlLCBhcHBseWluZyB0aGUgcHJvdmlkZWQgY3JpdGVyaWEsIEknbSBjb25maWRlbnQgaW4gY29uY2x1ZGluZyB0aGF0IHRoaXMgcGF0Y2ggZG9lc24ndCB3YXJyYW50IGZ1enppbmcgYnkgYSB0b29sIGxpa2Ugc3l6a2FsbGVyLCB3aGljaCB0YXJnZXRzIHRoZSBrZXJuZWwgaXRzZWxmLlxuXG5Xb3J0aEZ1enppbmc9ZmFsc2UuIExldCdzIGdldCB0aGF0IGxvZ2dlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyMzAsIk91dHB1dFRva2VucyI6NzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MjksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxOTo0NDoxMy43MzMwNjg5MDNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgQlBGIHNlbGZ0ZXN0cyBhbmQgYmVuY2htYXJrcyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBCUEYgc2VsZnRlc3RzIGFuZCBiZW5jaG1hcmtzIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8uIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxOTo0NDoxMy43MzMwOTcxNDNaIiwiU2VxIjo1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowp4p78[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-17 19:27:34 +0000 UTC FinishedAt: 2026-08-17 19:44:14 +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+CgkJCTx0ZD4yMDI2LzA4LzE3IDE5OjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBCUEYgc2VsZnRlc3RzIGFuZCBiZW5jaG1hcmtzIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8uIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE5OjQzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZDFhMjI4NmNhYTk4ZmE4NjUwM2QzYTkyMGVlZDNjZGYzNWE2NmQ4M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDE3IDE5OjQzOjQyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxuaW5kZXggZDM2NTVhNzA2NDgyNi4uMjJlOWViMTZjMTUxMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXG5AQCAtODI2LDE4ICYjNDM7ODI2LDIyIEBAIExJQkFSRU5BX01BS0VfQVJHUyA9IFxcXG4gXHRcdEJQRl9UQVJHRVRfRU5ESUFOPVwmIzM0OyQoQlBGX1RBUkdFVF9FTkRJQU4pXCYjMzQ7IFxcXG4gXHRcdFE9XCYjMzQ7JChRKVwmIzM0O1xuIFxuLUxJQkFSRU5BX0JQRl9ERVBTIDo9ICQod2lsZGNhcmQgbGliYXJlbmEvTWFrZWZpbGVcdFx0XFxcbi1cdFx0XHRcdCBsaWJhcmVuYS9pbmNsdWRlLypcdFx0XFxcbi1cdFx0XHRcdCBsaWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hLypcdFxcXG4tXHRcdFx0XHQgbGliYXJlbmEvc3JjLypcdFx0XHRcXFxuLVx0XHRcdFx0IGxpYmFyZW5hL3NlbGZ0ZXN0cy8qXHRcdFxcXG4tXHRcdFx0XHQgbGliYXJlbmEvKi5icGYubylcbiYjNDM7TElCQVJFTkFfQ09NTU9OX0RFUFMgOj0gJCh3aWxkY2FyZCBsaWJhcmVuYS9NYWtlZmlsZVx0XHRcXFxuJiM0MztcdFx0XHRcdCAgICBsaWJhcmVuYS9pbmNsdWRlLypcdFx0XFxcbiYjNDM7XHRcdFx0XHQgICAgbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS8qXHRcXFxuJiM0MztcdFx0XHRcdCAgICBsaWJhcmVuYS9zcmMvKilcbiYjNDM7TElCQVJFTkFfQlBGX0RFUFMgOj0gJChMSUJBUkVOQV9DT01NT05fREVQUykgJCh3aWxkY2FyZCBsaWJhcmVuYS9zZWxmdGVzdHMvKilcbiYjNDM7TElCQVJFTkFfQkVOQ0hfQlBGX0RFUFMgOj0gJChMSUJBUkVOQV9DT01NT05fREVQUykgJCh3aWxkY2FyZCBsaWJhcmVuYS9iZW5jaHMvKilcbiBcbiBMSUJBUkVOQV9TS0VMIDo9IGxpYmFyZW5hL2xpYmFyZW5hLnNrZWwuaFxuJiM0MztMSUJBUkVOQV9CRU5DSF9TS0VMIDo9IGxpYmFyZW5hL2xpYmFyZW5hX2JlbmNoLnNrZWwuaFxuIFxuICQoTElCQVJFTkFfU0tFTCk6ICQoSU5DTFVERV9ESVIpL3ZtbGludXguaCAkKEJQRk9CSikgJChMSUJBUkVOQV9CUEZfREVQUylcbiBcdCYjNDM7JChNQUtFKSAtQyBsaWJhcmVuYSBsaWJhcmVuYS5za2VsLmggJChMSUJBUkVOQV9NQUtFX0FSR1MpXG4gXG4mIzQzOyQoTElCQVJFTkFfQkVOQ0hfU0tFTCk6ICQoSU5DTFVERV9ESVIpL3ZtbGludXguaCAkKEJQRk9CSikgJChMSUJBUkVOQV9CRU5DSF9CUEZfREVQUykgfCAkKExJQkFSRU5BX1NLRUwpXG4mIzQzO1x0JiM0MzskKE1BS0UpIC1DIGxpYmFyZW5hIGJlbmNobWFya3MgJChMSUJBUkVOQV9NQUtFX0FSR1MpXG4mIzQzO1xuIGlmbmVxICgkKENMQU5HX0hBU19BUkVOQV9BU0FOKSwpXG4gTElCQVJFTkFfQVNBTl9TS0VMIDo9IGxpYmFyZW5hL2xpYmFyZW5hX2FzYW4uc2tlbC5oXG4gQ0ZMQUdTICYjNDM7PSAtREhBU19CUEZfQVJFTkFfQVNBTlxuQEAgLTk4Nyw2ICYjNDM7OTkxLDcgQEAgJChPVVRQVVQpL2JlbmNoX3NvY2ttYXAubzogJChPVVRQVVQpL2JlbmNoX3NvY2ttYXBfcHJvZy5za2VsLmhcbiAkKE9VVFBVVCkvYmVuY2hfbHBtX3RyaWVfbWFwLm86ICQoT1VUUFVUKS9scG1fdHJpZV9iZW5jaC5za2VsLmggJChPVVRQVVQpL2xwbV90cmllX21hcC5za2VsLmhcbiAkKE9VVFBVVCkvYmVuY2hfYnBmX25vcC5vOiAkKE9VVFBVVCkvYnBmX25vcF9iZW5jaC5za2VsLmggYmVuY2hfYnBmX3RpbWluZy5oXG4gJChPVVRQVVQpL2JlbmNoX3hkcF9sYi5vOiAkKE9VVFBVVCkveGRwX2xiX2JlbmNoLnNrZWwuaCBiZW5jaF9icGZfdGltaW5nLmhcbiYjNDM7JChPVVRQVVQpL2JlbmNoX2xpYmFyZW5hLm86ICQoTElCQVJFTkFfQkVOQ0hfU0tFTClcbiAkKE9VVFBVVCkvYmVuY2hfYnBmX3RpbWluZy5vOiBiZW5jaF9icGZfdGltaW5nLmhcbiAkKE9VVFBVVCkvYmVuY2gubzogYmVuY2guaCB0ZXN0aW5nX2hlbHBlcnMuaCAkKEJQRk9CSilcbiAkKE9VVFBVVCkvYmVuY2g6IExETElCUyAmIzQzOz0gLWxtXG5AQCAtMTAxNCw2ICYjNDM7MTAxOSw3IEBAICQoT1VUUFVUKS9iZW5jaDogJChPVVRQVVQpL2JlbmNoLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS9iZW5jaF9icGZfdGltaW5nLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS9iZW5jaF9icGZfbm9wLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS9iZW5jaF94ZHBfbGIubyBcXFxuJiM0MztcdFx0ICQoT1VUUFVUKS9iZW5jaF9saWJhcmVuYS5vIFxcXG4gXHRcdCAkKE9VVFBVVCkvdXNkdF8xLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS91c2R0XzIubyBcXFxuIFx0XHQgI1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmNcbmluZGV4IGI4NmI3MzQ1NmQzY2EuLmRlNjcyZjYxZDRhYmUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmNcbkBAIC0yODgsNiAmIzQzOzI4OCw3IEBAIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9jcnlwdG9fYXJncDtcbiBleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfc29ja21hcF9hcmdwO1xuIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9scG1fdHJpZV9tYXBfYXJncDtcbiBleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfeGRwX2xiX2FyZ3A7XG4mIzQzO2V4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9saWJhcmVuYV9hcmdwO1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9jaGlsZCBiZW5jaF9wYXJzZXJzW10gPSB7XG4gXHR7IFx1MDAyNmJlbmNoX3JpbmdidWZzX2FyZ3AsIDAsIFwmIzM0O1JpbmcgYnVmZmVycyBiZW5jaG1hcmtcJiMzNDssIDAgfSxcbkBAIC0zMDYsNiAmIzQzOzMwNyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9jaGlsZCBiZW5jaF9wYXJzZXJzW10gPSB7XG4gXHR7IFx1MDAyNmJlbmNoX3NvY2ttYXBfYXJncCwgMCwgXCYjMzQ7YnBmIHNvY2ttYXAgYmVuY2htYXJrXCYjMzQ7LCAwIH0sXG4gXHR7IFx1MDAyNmJlbmNoX2xwbV90cmllX21hcF9hcmdwLCAwLCBcJiMzNDtMUE0gdHJpZSBtYXAgYmVuY2htYXJrXCYjMzQ7LCAwIH0sXG4gXHR7IFx1MDAyNmJlbmNoX3hkcF9sYl9hcmdwLCAwLCBcJiMzNDtYRFAgbG9hZC1iYWxhbmNlciBiZW5jaG1hcmtcJiMzNDssIDAgfSxcbiYjNDM7XHR7IFx1MDAyNmJlbmNoX2xpYmFyZW5hX2FyZ3AsIDAsIFwmIzM0O2xpYmFyZW5hIGFsbG9jYXRvciBiZW5jaG1hcmtcJiMzNDssIDAgfSxcbiBcdHt9LFxuIH07XG4gXG5AQCAtNTg1LDYgJiM0Mzs1ODcsOCBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2xwbV90cmllX2RlbGV0ZTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2xwbV90cmllX2ZyZWU7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9icGZfbm9wO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfeGRwX2xiO1xuJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2xpYmFyZW5hX21hbGxvYztcbiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9saWJhcmVuYV9jYWxsb2M7XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBiZW5jaCAqYmVuY2hzW10gPSB7XG4gXHRcdTAwMjZiZW5jaF9jb3VudF9nbG9iYWwsXG5AQCAtNjY5LDYgJiM0Mzs2NzMsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJlbmNoICpiZW5jaHNbXSA9IHtcbiBcdFx1MDAyNmJlbmNoX2xwbV90cmllX2ZyZWUsXG4gXHRcdTAwMjZiZW5jaF9icGZfbm9wLFxuIFx0XHUwMDI2YmVuY2hfeGRwX2xiLFxuJiM0MztcdFx1MDAyNmJlbmNoX2xpYmFyZW5hX21hbGxvYyxcbiYjNDM7XHRcdTAwMjZiZW5jaF9saWJhcmVuYV9jYWxsb2MsXG4gfTtcbiBcbiBzdGF0aWMgdm9pZCBmaW5kX2JlbmNobWFyayh2b2lkKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfbGliYXJlbmEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfbGliYXJlbmEuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjI0ZTQzMjI0NGJmNWRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfbGliYXJlbmEuY1xuQEAgLTAsMCAmIzQzOzEsMjEwIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXJncC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbWl0cy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtiZW5jaC5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaWJhcmVuYS9jb21tb24uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaWJhcmVuYS9hc2FuLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGliYXJlbmEvYnVkZHkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaWJhcmVuYS91c2Vyc3BhY2UuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bGliYXJlbmEvbGliYXJlbmFfYmVuY2guc2tlbC5oXCYjMzQ7XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHtcbiYjNDM7XHRfX3U2NCBhbGxvY19zaXplO1xuJiM0MztcdF9fdTY0IG5hbGxvY3M7XG4mIzQzO30gYXJncyA9IHtcbiYjNDM7XHQuYWxsb2Nfc2l6ZSA9IDY0LFxuJiM0MztcdC5uYWxsb2NzID0gMTAwMDAsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHtcbiYjNDM7XHRzdHJ1Y3QgbGliYXJlbmFfYmVuY2ggKnNrZWw7XG4mIzQzO1x0aW50IGJlbmNoX2ZkO1xuJiM0MztcdGludCByZXNldF9mZDtcbiYjNDM7fSBjdHg7XG4mIzQzO1xuJiM0MztlbnVtIHtcbiYjNDM7XHRBUkdfTElCQVJFTkFfQUxMT0NfU0laRSA9IDEyMDAwLFxuJiM0MztcdEFSR19MSUJBUkVOQV9OQUxMT0NTLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiBvcHRzW10gPSB7XG4mIzQzO1x0eyBcJiMzNDthbGxvY19zaXplXCYjMzQ7LCBBUkdfTElCQVJFTkFfQUxMT0NfU0laRSwgXCYjMzQ7QllURVNcJiMzNDssIDAsXG4mIzQzO1x0ICBcJiMzNDtTaXplIG9mIGVhY2ggYXJlbmEgYWxsb2NhdGlvblwmIzM0OyB9LFxuJiM0MztcdHsgXCYjMzQ7bmFsbG9jc1wmIzM0OywgQVJHX0xJQkFSRU5BX05BTExPQ1MsIFwmIzM0O0lURVJTXCYjMzQ7LCAwLFxuJiM0MztcdCAgXCYjMzQ7TnVtYmVyIG9mIGFsbG9jYXRpb24gcGVyIG1lYXN1cmVtZW50XCYjMzQ7IH0sXG4mIzQzO1x0e30sXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgZXJyb3JfdCBwYXJzZV9hcmcoaW50IGtleSwgY2hhciAqYXJnLCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHZhbHVlO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGtleSkge1xuJiM0MztcdGNhc2UgQVJHX0xJQkFSRU5BX0FMTE9DX1NJWkU6XG4mIzQzO1x0XHR2YWx1ZSA9IHN0cnRvdWxsKGFyZywgTlVMTCwgMTApO1xuJiM0MztcdFx0aWYgKCF2YWx1ZSB8fCB2YWx1ZSBcdTAwM2U9IFVJTlRfTUFYKSB7XG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtpbnZhbGlkIGFsbG9jX3NpemU6ICVsZFwmIzM0OywgdmFsdWUpO1xuJiM0MztcdFx0XHRhcmdwX3VzYWdlKHN0YXRlKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGFyZ3MuYWxsb2Nfc2l6ZSA9IHZhbHVlO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBBUkdfTElCQVJFTkFfTkFMTE9DUzpcbiYjNDM7XHRcdGFyZ3MubmFsbG9jcyA9IHN0cnRvdWxsKGFyZywgTlVMTCwgMTApO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiBBUkdQX0VSUl9VTktOT1dOO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NvbnN0IHN0cnVjdCBhcmdwIGJlbmNoX2xpYmFyZW5hX2FyZ3AgPSB7XG4mIzQzO1x0Lm9wdGlvbnMgPSBvcHRzLFxuJiM0MztcdC5wYXJzZXIgPSBwYXJzZV9hcmcsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB2YWxpZGF0ZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGVudi5jb25zdW1lcl9jbnQgIT0gMCkge1xuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O2JlbmNobWFyayBkb2VzbiYjMzk7dCBzdXBwb3J0IGNvbnN1bWVyc1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRleGl0KDEpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGVudi5wcm9kdWNlcl9jbnQgIT0gMSkge1xuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O2JlbmNobWFyayBzdXBwb3J0cyBleGFjdGx5IG9uZSBwcm9kdWNlclxcblwmIzM0Oyk7XG4mIzQzO1x0XHRleGl0KDEpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgc2V0dXBfY29tbW9uKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYXJlbmFfYWxsb2NfcmVzZXJ2ZV9hcmdzIHJlc2VydmVfYXJncyA9IHtcbiYjNDM7XHRcdC5ucl9wYWdlcyA9IEFSRU5BX1JFU0VSVkVfUEFHRVNfREZMLFxuJiM0MztcdH07XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0c2V0dXBfbGliYnBmKCk7XG4mIzQzO1xuJiM0MztcdGN0eC5za2VsID0gbGliYXJlbmFfYmVuY2hfX29wZW5fYW5kX2xvYWQoKTtcbiYjNDM7XHRpZiAoIWN0eC5za2VsKSB7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7ZmFpbGVkIHRvIG9wZW4gYW5kIGxvYWQgc2tlbGV0b25cXG5cJiMzNDspO1xuJiM0MztcdFx0ZXhpdCgxKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IGxpYmFyZW5hX3J1bl9wcm9nX2FyZ3MoXG4mIzQzO1x0XHRicGZfcHJvZ3JhbV9fZmQoY3R4LnNrZWwtXHUwMDNlcHJvZ3MuYXJlbmFfYWxsb2NfcmVzZXJ2ZSksXG4mIzQzO1x0XHRcdTAwMjZyZXNlcnZlX2FyZ3MsIHNpemVvZihyZXNlcnZlX2FyZ3MpKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7ZmFpbGVkIHRvIHJlc2VydmUgYXJlbmEgcGFnZXM6ICVkXFxuXCYjMzQ7LCBlcnIpO1xuJiM0MztcdFx0ZXhpdCgxKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IGxpYmFyZW5hX3J1bl9wcm9nKFxuJiM0MztcdFx0YnBmX3Byb2dyYW1fX2ZkKGN0eC5za2VsLVx1MDAzZXByb2dzLmFyZW5hX2J1ZGR5X3Jlc2V0KSk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O2ZhaWxlZCB0byBpbml0aWFsaXplIGFyZW5hIGFsbG9jYXRvcjogJWRcXG5cJiMzNDssIGVycik7XG4mIzQzO1x0XHRleGl0KDEpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y3R4LnNrZWwtXHUwMDNlYnNzLVx1MDAzZWJlbmNoX2FsbG9jX3NpemUgPSBhcmdzLmFsbG9jX3NpemU7XG4mIzQzO1x0Y3R4LnNrZWwtXHUwMDNlYnNzLVx1MDAzZWJlbmNoX25hbGxvY3MgPSBhcmdzLm5hbGxvY3M7XG4mIzQzO1x0Y3R4LnJlc2V0X2ZkID0gYnBmX3Byb2dyYW1fX2ZkKGN0eC5za2VsLVx1MDAzZXByb2dzLmFyZW5hX2J1ZGR5X3Jlc2V0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbWFsbG9jX3NldHVwKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzZXR1cF9jb21tb24oKTtcbiYjNDM7XHRjdHguYmVuY2hfZmQgPSBicGZfcHJvZ3JhbV9fZmQoY3R4LnNrZWwtXHUwMDNlcHJvZ3MuYmVuY2hfbWFsbG9jKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgY2FsbG9jX3NldHVwKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzZXR1cF9jb21tb24oKTtcbiYjNDM7XHRjdHguYmVuY2hfZmQgPSBicGZfcHJvZ3JhbV9fZmQoY3R4LnNrZWwtXHUwMDNlcHJvZ3MuYmVuY2hfY2FsbG9jKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgKnByb2R1Y2VyKHZvaWQgKmlucHV0KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKHRydWUpIHtcbiYjNDM7XHRcdGVyciA9IGxpYmFyZW5hX3J1bl9wcm9nKGN0eC5iZW5jaF9mZCk7XG4mIzQzO1x0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtsaWJhcmVuYSBiZW5jaG1hcmsgZmFpbGVkOiAlZFxcblwmIzM0OywgZXJyKTtcbiYjNDM7XHRcdFx0ZXhpdCgxKTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRlcnIgPSBsaWJhcmVuYV9ydW5fcHJvZyhjdHgucmVzZXRfZmQpO1xuJiM0MztcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7bGliYXJlbmEgYWxsb2MgcmVzZXQgZmFpbGVkOiAlZFxcblwmIzM0OywgZXJyKTtcbiYjNDM7XHRcdFx0ZXhpdCgxKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBtZWFzdXJlKHN0cnVjdCBiZW5jaF9yZXMgKnJlcylcbiYjNDM7e1xuJiM0MztcdHJlcy1cdTAwM2VkdXJhdGlvbl9ucyA9IGF0b21pY19zd2FwKFx1MDAyNmN0eC5za2VsLVx1MDAzZWJzcy1cdTAwM2ViZW5jaF9kdXJhdGlvbl9ucywgMCk7XG4mIzQzO1x0cmVzLVx1MDAzZWhpdHMgPSBhdG9taWNfc3dhcChcdTAwMjZjdHguc2tlbC1cdTAwM2Vic3MtXHUwMDNlYmVuY2hfaGl0cywgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJlcG9ydF9wcm9ncmVzcyhpbnQgaXRlciwgc3RydWN0IGJlbmNoX3JlcyAqcmVzLCBsb25nIGRlbHRhX25zKVxuJiM0Mzt7XG4mIzQzO1x0ZG91YmxlIGxhdGVuY3lfbnMgPSAwLjA7XG4mIzQzO1xuJiM0MztcdGlmIChyZXMtXHUwMDNlaGl0cylcbiYjNDM7XHRcdGxhdGVuY3lfbnMgPSByZXMtXHUwMDNlZHVyYXRpb25fbnMgLyAoZG91YmxlKXJlcy1cdTAwM2VoaXRzO1xuJiM0MztcbiYjNDM7XHRwcmludGYoXCYjMzQ7SXRlciAlM2QgKCU3LjNsZnVzKTogbGF0ZW5jeSAlOC4zbGYgbnMvb3AgKCVsZCBhbGxvY2F0aW9ucylcXG5cJiMzNDssXG4mIzQzO1x0ICAgICAgIGl0ZXIsIChkZWx0YV9ucyAtIDEwMDAwMDAwMDApIC8gMTAwMC4wLCBsYXRlbmN5X25zLCByZXMtXHUwMDNlaGl0cyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJlcG9ydF9maW5hbChzdHJ1Y3QgYmVuY2hfcmVzIHJlc1tdLCBpbnQgcmVzX2NudClcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZHVyYXRpb25fbnMgPSAwO1xuJiM0MztcdGxvbmcgaGl0cyA9IDA7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHJlc19jbnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRkdXJhdGlvbl9ucyAmIzQzOz0gcmVzW2ldLmR1cmF0aW9uX25zO1xuJiM0MztcdFx0aGl0cyAmIzQzOz0gcmVzW2ldLmhpdHM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIWhpdHMgfHwgIXJlc19jbnQpIHtcbiYjNDM7XHRcdHByaW50ZihcJiMzNDtTdW1tYXJ5OiBubyBydW5zIG1lYXN1cmVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHByaW50ZihcJiMzNDtTdW1tYXJ5OiAlLjNsZiBucy9vcCwgJS4wbGYgaW52b2NhdGlvbnMgZm9yICV1IGFsbG9jYXRpb25zL2ludm9jYXRpb24pXFxuXCYjMzQ7LFxuJiM0MztcdCAgICAgICBkdXJhdGlvbl9ucyAvIChkb3VibGUpaGl0cywgaGl0cyAvIChkb3VibGUpcmVzX2NudCxcbiYjNDM7XHQgICAgICAgY3R4LnNrZWwtXHUwMDNlYnNzLVx1MDAzZWJlbmNoX25hbGxvY3MpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mztjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfbGliYXJlbmFfbWFsbG9jID0ge1xuJiM0MztcdC5uYW1lID0gXCYjMzQ7bGliYXJlbmEtbWFsbG9jXCYjMzQ7LFxuJiM0MztcdC5hcmdwID0gXHUwMDI2YmVuY2hfbGliYXJlbmFfYXJncCxcbiYjNDM7XHQudmFsaWRhdGUgPSB2YWxpZGF0ZSxcbiYjNDM7XHQuc2V0dXAgPSBtYWxsb2Nfc2V0dXAsXG4mIzQzO1x0LnByb2R1Y2VyX3RocmVhZCA9IHByb2R1Y2VyLFxuJiM0MztcdC5tZWFzdXJlID0gbWVhc3VyZSxcbiYjNDM7XHQucmVwb3J0X3Byb2dyZXNzID0gcmVwb3J0X3Byb2dyZXNzLFxuJiM0MztcdC5yZXBvcnRfZmluYWwgPSByZXBvcnRfZmluYWwsXG4mIzQzO307XG4mIzQzO1xuJiM0Mztjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfbGliYXJlbmFfY2FsbG9jID0ge1xuJiM0MztcdC5uYW1lID0gXCYjMzQ7bGliYXJlbmEtY2FsbG9jXCYjMzQ7LFxuJiM0MztcdC5hcmdwID0gXHUwMDI2YmVuY2hfbGliYXJlbmFfYXJncCxcbiYjNDM7XHQudmFsaWRhdGUgPSB2YWxpZGF0ZSxcbiYjNDM7XHQuc2V0dXAgPSBjYWxsb2Nfc2V0dXAsXG4mIzQzO1x0LnByb2R1Y2VyX3RocmVhZCA9IHByb2R1Y2VyLFxuJiM0MztcdC5tZWFzdXJlID0gbWVhc3VyZSxcbiYjNDM7XHQucmVwb3J0X3Byb2dyZXNzID0gcmVwb3J0X3Byb2dyZXNzLFxuJiM0MztcdC5yZXBvcnRfZmluYWwgPSByZXBvcnRfZmluYWwsXG4mIzQzO307XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9ydW5fYmVuY2hfbGliYXJlbmEuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL3J1bl9iZW5jaF9saWJhcmVuYS5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjEwYWZlNGQ1MmViZjdcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvcnVuX2JlbmNoX2xpYmFyZW5hLnNoXG5AQCAtMCwwICYjNDM7MSwzMSBAQFxuJiM0MzsjIS9iaW4vYmFzaFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO1xuJiM0Mztzb3VyY2UgLi9iZW5jaHMvcnVuX2NvbW1vbi5zaFxuJiM0MztcbiYjNDM7c2V0IC1ldWZvIHBpcGVmYWlsXG4mIzQzO1xuJiM0MztSVU5fQkVOQ0g9XCYjMzQ7Li9iZW5jaCAtZDMgLXFcJiMzNDtcbiYjNDM7XG4mIzQzO3N1bW1hcml6ZV9saWJhcmVuYSgpXG4mIzQzO3tcbiYjNDM7XHRsb2NhbCBiZW5jaD1cJiMzNDskMVwmIzM0O1xuJiM0MztcdGxvY2FsIHN1bW1hcnlcbiYjNDM7XG4mIzQzO1x0c3VtbWFyeT0kKHByaW50ZiAmIzM5OyVzXFxuJiMzOTsgXCYjMzQ7JDJcJiMzNDsgfCB0YWlsIC1uMSlcbiYjNDM7XHRzdW1tYXJ5PSR7c3VtbWFyeSNTdW1tYXJ5OiB9XG4mIzQzO1x0cHJpbnRmIFwmIzM0OyUtMjBzICVzXFxuXCYjMzQ7IFwmIzM0OyRiZW5jaFwmIzM0OyBcJiMzNDskc3VtbWFyeVwmIzM0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztoZWFkZXIgXCYjMzQ7bGliYXJlbmEgc2VxdWVudGlhbCBtYWxsb2NcXG5cJiMzNDtcbiYjNDM7XG4mIzQzO2ZvciBzaXplIGluIDE2IDY0IDI1NiAxMDI0IDQwOTY7IGRvXG4mIzQzO3N1YnRpdGxlIFwmIzM0O2FsbG9jYXRpb24gc2l6ZTogJHNpemVcJiMzNDtcbiYjNDM7cHJpbnRmIFwmIzM0O1xcdC0tLS0tLS0tLS0tLS0tLS0tLS1cXG5cJiMzNDtcbiYjNDM7XHRmb3IgbmFsbG9jcyBpbiAxMCA1MCAxMDAgNTAwIDEwMDAgNTAwMCAxMDAwMDsgZG9cbiYjNDM7XHRcdHN1bW1hcml6ZV9saWJhcmVuYSBcJiMzNDttYWxsb2M6XCYjMzQ7IFxcXG4mIzQzO1x0XHRcdFwmIzM0OyQoJFJVTl9CRU5DSCAtLWFsbG9jX3NpemUgXCYjMzQ7JHNpemVcJiMzNDsgLS1uYWxsb2NzIFwmIzM0OyRuYWxsb2NzXCYjMzQ7IGxpYmFyZW5hLW1hbGxvYylcJiMzNDtcbiYjNDM7XHRcdHN1bW1hcml6ZV9saWJhcmVuYSBcJiMzNDtjYWxsb2M6XCYjMzQ7IFxcXG4mIzQzO1x0XHRcdFwmIzM0OyQoJFJVTl9CRU5DSCAtLWFsbG9jX3NpemUgXCYjMzQ7JHNpemVcJiMzNDsgLS1uYWxsb2NzIFwmIzM0OyRuYWxsb2NzXCYjMzQ7IGxpYmFyZW5hLWNhbGxvYylcJiMzNDtcbiYjNDM7XHRkb25lXG4mIzQzO2RvbmVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvTWFrZWZpbGVcbmluZGV4IDVlMmFiNTE0ODA1ZTQuLjkxMTY0ZDQzYmQ2MTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9NYWtlZmlsZVxuQEAgLTI3LDEwICYjNDM7MjcsMTcgQEAgQlBGRElSPSQoYWJzcGF0aCAkKExJQkFSRU5BKS8uLilcbiBJTkNMVURFX0RJUiA/PSAkKEJQRkRJUikvdG9vbHMvaW5jbHVkZVxuIExJQkJQRl9JTkNMVURFID89ICQoSU5DTFVERV9ESVIpXG4gXG4tIyBTY2FuIHNyYy8gYW5kIHNlbGZ0ZXN0cy8gdG8gZ2VuZXJhdGUgdGhlIGZpbmFsIGJpbmFyaWVzXG4tTElCQVJFTkFfU09VUkNFUyA9ICQod2lsZGNhcmQgJChMSUJBUkVOQSkvc3JjLyouYnBmLmMpICQod2lsZGNhcmQgJChMSUJBUkVOQSkvc2VsZnRlc3RzLyouYnBmLmMpXG4tTElCQVJFTkFfT0JKRUNUUyA9ICQobm90ZGlyICQoTElCQVJFTkFfU09VUkNFUzouYnBmLmM9LmJwZi5vKSlcbi1MSUJBUkVOQV9PQkpFQ1RTX0FTQU4gPSAkKG5vdGRpciAkKExJQkFSRU5BX1NPVVJDRVM6LmJwZi5jPV9hc2FuLmJwZi5vKSlcbiYjNDM7IyBCdWlsZCBzZWxmdGVzdHMgYW5kIGJlbmNobWFya3MgaW50byBzZXBhcmF0ZSBCUEYgb2JqZWN0cyBhbmQgc2tlbGV0b25zLlxuJiM0MztMSUJBUkVOQV9DT1JFX1NPVVJDRVMgPSAkKHdpbGRjYXJkICQoTElCQVJFTkEpL3NyYy8qLmJwZi5jKVxuJiM0MztMSUJBUkVOQV9URVNUX1NPVVJDRVMgPSAkKHdpbGRjYXJkICQoTElCQVJFTkEpL3NlbGZ0ZXN0cy8qLmJwZi5jKVxuJiM0MztMSUJBUkVOQV9CRU5DSF9TT1VSQ0VTID0gJCh3aWxkY2FyZCAkKExJQkFSRU5BKS9iZW5jaHMvKi5icGYuYylcbiYjNDM7XG4mIzQzO0xJQkFSRU5BX09CSkVDVFMgPSAkKG5vdGRpciAkKExJQkFSRU5BX0NPUkVfU09VUkNFUzouYnBmLmM9LmJwZi5vKSBcXFxuJiM0MztcdFx0XHQgICAgICAgJChMSUJBUkVOQV9URVNUX1NPVVJDRVM6LmJwZi5jPS5icGYubykpXG4mIzQzO0xJQkFSRU5BX09CSkVDVFNfQVNBTiA9ICQobm90ZGlyICQoTElCQVJFTkFfQ09SRV9TT1VSQ0VTOi5icGYuYz1fYXNhbi5icGYubykgXFxcbiYjNDM7XHRcdFx0XHQgICAgJChMSUJBUkVOQV9URVNUX1NPVVJDRVM6LmJwZi5jPV9hc2FuLmJwZi5vKSlcbiYjNDM7TElCQVJFTkFfQkVOQ0hfT0JKRUNUUyA9ICQobm90ZGlyICQoTElCQVJFTkFfQ09SRV9TT1VSQ0VTOi5icGYuYz0uYnBmLm8pIFxcXG4mIzQzO1x0XHRcdFx0ICAgICAkKExJQkFSRU5BX0JFTkNIX1NPVVJDRVM6LmJwZi5jPS5icGYubykpXG4gXG4gSU5DTFVERVMgPSAtSSQoTElCQVJFTkEpL2luY2x1ZGUgLUkkKEJQRkRJUilcbiBpZm5lcSAoJChJTkNMVURFX0RJUiksKVxuQEAgLTUzLDE3ICYjNDM7NjAsMjUgQEAgb3ZlcnJpZGUgQlBGX0NGTEFHUyAmIzQzOz0gLU8yIC1nXG4gb3ZlcnJpZGUgQlBGX0NGTEFHUyAmIzQzOz0gLVduby1pbmNvbXBhdGlibGUtcG9pbnRlci10eXBlcy1kaXNjYXJkcy1xdWFsaWZpZXJzXG4gIyBSZXF1aXJlZCBmb3Igc3VwcHJlc3NpbmcgaGFybWxlc3Mgdm1saW51eC5oLXJlbGF0ZWQgd2FybmluZ3MuXG4gb3ZlcnJpZGUgQlBGX0NGTEFHUyAmIzQzOz0gLVduby1taXNzaW5nLWRlY2xhcmF0aW9uc1xuJiM0MztvdmVycmlkZSBCUEZfQ0ZMQUdTICYjNDM7PSAtZm5vLXN0cmljdC1hbGlhc2luZ1xuIG92ZXJyaWRlIEJQRl9DRkxBR1MgJiM0Mzs9ICQoSU5DTFVERVMpXG4gXG4gQ0ZMQUdTID0gLU8yIC1uby1waWVcbiBDRkxBR1MgJiM0Mzs9ICQoSU5DTFVERVMpXG4gXG4tdnBhdGggJS5icGYuYyAkKExJQkFSRU5BKS9zcmMgJChMSUJBUkVOQSkvc2VsZnRlc3RzXG4tdnBhdGggJS5jICQoTElCQVJFTkEpL3NyYyAkKExJQkFSRU5BKS9zZWxmdGVzdHNcbiYjNDM7dnBhdGggJS5icGYuYyAkKExJQkFSRU5BKS9zcmMgJChMSUJBUkVOQSkvc2VsZnRlc3RzICQoTElCQVJFTkEpL2JlbmNoc1xuJiM0Mzt2cGF0aCAlLmMgJChMSUJBUkVOQSkvc3JjICQoTElCQVJFTkEpL3NlbGZ0ZXN0cyAkKExJQkFSRU5BKS9iZW5jaHNcbiBcbiBza2VsZXRvbnM6IGxpYmFyZW5hLnNrZWwuaCBsaWJhcmVuYV9hc2FuLnNrZWwuaFxuIC5QSE9OWTogc2tlbGV0b25zXG4gXG4mIzQzO2JlbmNobWFya3M6IGxpYmFyZW5hX2JlbmNoLnNrZWwuaFxuJiM0MzsuUEhPTlk6IGJlbmNobWFya3NcbiYjNDM7XG4mIzQzO2xpYmFyZW5hX2JlbmNoLnNrZWwuaDogbGliYXJlbmFfYmVuY2guYnBmLm9cbiYjNDM7XHQkKGNhbGwgbXNnLEdFTi1TS0VMLGxpYmFyZW5hLCRAKVxuJiM0MztcdCQoUSkkKEJQRlRPT0wpIGdlbiBza2VsZXRvbiAkXHUwMDNjIG5hbWUgXCYjMzQ7bGliYXJlbmFfYmVuY2hcJiMzNDsgXHUwMDNlICRAXG4mIzQzO1xuIGxpYmFyZW5hX2FzYW4uc2tlbC5oOiBsaWJhcmVuYV9hc2FuLmJwZi5vXG4gXHQkKGNhbGwgbXNnLEdFTi1TS0VMLGxpYmFyZW5hLCRAKVxuIFx0JChRKSQoQlBGVE9PTCkgZ2VuIHNrZWxldG9uICRcdTAwM2MgbmFtZSBcJiMzNDtsaWJhcmVuYV9hc2FuXCYjMzQ7IFx1MDAzZSAkQFxuQEAgLTgwLDYgJiM0Mzs5NSwxMCBAQCBsaWJhcmVuYS5icGYubzogJChMSUJBUkVOQV9PQkpFQ1RTKVxuIFx0JChjYWxsIG1zZyxHRU4tT0JKLGxpYmFyZW5hLCRAKVxuIFx0JChRKSQoQlBGVE9PTCkgZ2VuIG9iamVjdCAkQCAkXlxuIFxuJiM0MztsaWJhcmVuYV9iZW5jaC5icGYubzogJChMSUJBUkVOQV9CRU5DSF9PQkpFQ1RTKVxuJiM0MztcdCQoY2FsbCBtc2csR0VOLU9CSixsaWJhcmVuYSwkQClcbiYjNDM7XHQkKFEpJChCUEZUT09MKSBnZW4gb2JqZWN0ICRAICReXG4mIzQzO1xuICVfYXNhbi5icGYubzogJS5icGYuY1xuIFx0JChjYWxsIG1zZyxDTE5HLUJQRixsaWJhcmVuYSwkQClcbiBcdCQoUSkkKENMQU5HKSAkKEJQRl9DRkxBR1MpICQoQVNBTl9GTEFHUykgLURCUEZfQVJFTkFfQVNBTiAkKEJQRl9UQVJHRVRfRU5ESUFOKSAtYyAkXHUwMDNjIC1vICRAXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2JlbmNocy9iZW5jaF9tYWxsb2MuYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvYmVuY2hzL2JlbmNoX21hbGxvYy5icGYuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmUwNjM5N2RjOWE0MGRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9iZW5jaHMvYmVuY2hfbWFsbG9jLmJwZi5jXG5AQCAtMCwwICYjNDM7MSw1MSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTEdQTC0yLjEgT1IgQlNELTItQ2xhdXNlXG4mIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGliYXJlbmEvY29tbW9uLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpYmFyZW5hL2FzYW4uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaWJhcmVuYS9idWRkeS5oXHUwMDNlXG4mIzQzO1xuJiM0Mzt1MzIgYmVuY2hfYWxsb2Nfc2l6ZTtcbiYjNDM7dTMyIGJlbmNoX25hbGxvY3M7XG4mIzQzO2xvbmcgYmVuY2hfaGl0cztcbiYjNDM7bG9uZyBiZW5jaF9kdXJhdGlvbl9ucztcbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuJiM0MztpbnQgYmVuY2hfbWFsbG9jKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHR2b2lkIF9fYXJlbmEgKm1lbTtcbiYjNDM7XHR1NjQgc3RhcnRfbnM7XG4mIzQzO1x0dTMyIGk7XG4mIzQzO1xuJiM0MztcdHN0YXJ0X25zID0gYnBmX2t0aW1lX2dldF9ucygpO1xuJiM0MztcdGZvciAoaSA9IHplcm87IGkgXHUwMDNjIGJlbmNoX25hbGxvY3MgXHUwMDI2XHUwMDI2IGNhbl9sb29wOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0bWVtID0gYXJlbmFfbWFsbG9jKGJlbmNoX2FsbG9jX3NpemUpO1xuJiM0MztcdFx0aWYgKCFtZW0pXG4mIzQzO1x0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0X19zeW5jX2FkZF9hbmRfZmV0Y2goXHUwMDI2YmVuY2hfZHVyYXRpb25fbnMsXG4mIzQzO1x0XHRcdCAgICAgYnBmX2t0aW1lX2dldF9ucygpIC0gc3RhcnRfbnMpO1xuJiM0MztcdF9fc3luY19hZGRfYW5kX2ZldGNoKFx1MDAyNmJlbmNoX2hpdHMsIGkpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7aW50IGJlbmNoX2NhbGxvYyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0dm9pZCBfX2FyZW5hICptZW07XG4mIzQzO1x0dTY0IHN0YXJ0X25zO1xuJiM0MztcdHUzMiBpO1xuJiM0MztcbiYjNDM7XHRzdGFydF9ucyA9IGJwZl9rdGltZV9nZXRfbnMoKTtcbiYjNDM7XHRmb3IgKGkgPSB6ZXJvOyBpIFx1MDAzYyBiZW5jaF9uYWxsb2NzIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdG1lbSA9IGFyZW5hX2NhbGxvYygxLCBiZW5jaF9hbGxvY19zaXplKTtcbiYjNDM7XHRcdGlmICghbWVtKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdF9fc3luY19hZGRfYW5kX2ZldGNoKFx1MDAyNmJlbmNoX2R1cmF0aW9uX25zLFxuJiM0MztcdFx0XHQgICAgIGJwZl9rdGltZV9nZXRfbnMoKSAtIHN0YXJ0X25zKTtcbiYjNDM7XHRfX3N5bmNfYWRkX2FuZF9mZXRjaChcdTAwMjZiZW5jaF9oaXRzLCBpKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9zcGluX2xvY2suaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9zcGluX2xvY2suaFxuaW5kZXggYWU2YjcyZDE1YmI2Ny4uODcyZmEyMGYyOWE1OSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9zcGluX2xvY2suaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX3NwaW5fbG9jay5oXG5AQCAtMSw0ICYjNDM7MSw0IEBAXG4tLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgQlNELTItQ2xhdXNlXG4gLyogQ29weXJpZ2h0IChjKSAyMDI1IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuICNpZm5kZWYgQlBGX0FSRU5BX1NQSU5fTE9DS19IXG4gI2RlZmluZSBCUEZfQVJFTkFfU1BJTl9MT0NLX0hcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXRvbWljLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXRvbWljLmhcbmluZGV4IDQzYzMwNmUxN2YxOTguLjY1NTgyYjIwMTBhZDQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXRvbWljLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hdG9taWMuaFxuQEAgLTEsNCAmIzQzOzEsNCBAQFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIEJTRC0yLUNsYXVzZVxuIC8qIENvcHlyaWdodCAoYykgMjAyNSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbiAjaWZuZGVmIEJQRl9BVE9NSUNfSFxuICNkZWZpbmUgQlBGX0FUT01JQ19IXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX21heV9nb3RvLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfbWF5X2dvdG8uaFxuaW5kZXggOWJhOTA2ODlkNmJhMi4uYjMyYTQyMGQ0ZTFhZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9tYXlfZ290by5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfbWF5X2dvdG8uaFxuQEAgLTEsMyAmIzQzOzEsNCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTEdQTC0yLjEgT1IgQlNELTItQ2xhdXNlXG4gI3ByYWdtYSBvbmNlXG4gXG4gLypcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9iaXRtYXAuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2JpdG1hcC5oXG5pbmRleCBlMjQzMWVhNmZkZDY4Li4xNjNlMmI4M2Q5NDMxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvYml0bWFwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2JpdG1hcC5oXG5AQCAtMSw1ICYjNDM7MSw4IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBMR1BMLTIuMSBPUiBCU0QtMi1DbGF1c2VcbiAjcHJhZ21hIG9uY2VcbiBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmX2F0b21pYy5oXHUwMDNlXG4mIzQzO1xuICNkZWZpbmUgQklUU19QRVJfQllURVx0XHQ4XG4gI2RlZmluZSBCWVRFU19UT19CSVRTKG5iKVx0KChuYikgKiBCSVRTX1BFUl9CWVRFKVxuIFxuQEAgLTE1LDExICYjNDM7MTgsOCBAQCBzdHJ1Y3QgYXJlbmFfYml0bWFwIHtcbiBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcF9hbGxvYyhzaXplX3QgYml0cyk7XG4gdm9pZCBibXBfZnJlZShzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcCk7XG4gXG4tdm9pZCBfX2JtcF9zZXRfYml0KHUzMiBiaXQsIHN0cnVjdCBhcmVuYV9iaXRtYXAgX19hcmVuYSAqYm1wKTtcbi12b2lkIF9fYm1wX2NsZWFyX2JpdCh1MzIgYml0LCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcCk7XG4gdm9pZCBibXBfc2V0X2JpdCh1MzIgYml0LCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcCk7XG4gdm9pZCBibXBfY2xlYXJfYml0KHUzMiBiaXQsIHN0cnVjdCBhcmVuYV9iaXRtYXAgX19hcmVuYSAqYm1wKTtcbi1ib29sIGJtcF90ZXN0X2JpdCh1MzIgYml0LCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcCk7XG4gYm9vbCBibXBfdGVzdF9hbmRfY2xlYXJfYml0KHUzMiBiaXQsIHN0cnVjdCBhcmVuYV9iaXRtYXAgX19hcmVuYSAqYm1wKTtcbiBib29sIGJtcF90ZXN0X2FuZF9zZXRfYml0KHUzMiBiaXQsIHN0cnVjdCBhcmVuYV9iaXRtYXAgX19hcmVuYSAqYm1wKTtcbiBcbkBAIC0zMiwzICYjNDM7MzIsMjcgQEAgdm9pZCBibXBfY29weShzaXplX3QgYml0cywgc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICpkc3QsIHN0cnVjdCBhcmVuYV9iaXRtYXBcbiBib29sIGJtcF9pbnRlcnNlY3RzKHNpemVfdCBiaXRzLCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmFyZzEsIHN0cnVjdCBhcmVuYV9iaXRtYXAgX19hcmVuYSAqYXJnMik7XG4gYm9vbCBibXBfc3Vic2V0KHNpemVfdCBiaXRzLCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJpZywgc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICpzbWFsbCk7XG4gdm9pZCBibXBfcHJpbnQoc2l6ZV90IGJpdHMsIHN0cnVjdCBhcmVuYV9iaXRtYXAgX19hcmVuYSAqYm1wKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmVcbiYjNDM7dm9pZCBfX2JtcF9zZXRfYml0KHUzMiBiaXQsIHN0cnVjdCBhcmVuYV9iaXRtYXAgX19hcmVuYSAqYm1wKVxuJiM0Mzt7XG4mIzQzO1x0dm9sYXRpbGUgdTY0IF9fYXJlbmEgKndvcmQgPSBcdTAwMjZibXAtXHUwMDNlYml0c1tCSVRfV09SRChiaXQpXTtcbiYjNDM7XG4mIzQzO1x0KndvcmQgfD0gQklUX01BU0soYml0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZVxuJiM0Mzt2b2lkIF9fYm1wX2NsZWFyX2JpdCh1MzIgYml0LCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcClcbiYjNDM7e1xuJiM0MztcdHZvbGF0aWxlIHU2NCBfX2FyZW5hICp3b3JkID0gXHUwMDI2Ym1wLVx1MDAzZWJpdHNbQklUX1dPUkQoYml0KV07XG4mIzQzO1xuJiM0MztcdCp3b3JkIFx1MDAyNj0gfkJJVF9NQVNLKGJpdCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmVcbiYjNDM7Ym9vbCBibXBfdGVzdF9iaXQodTMyIGJpdCwgc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICpibXApXG4mIzQzO3tcbiYjNDM7XHR1NjQgd29yZCA9IFJFQURfT05DRShibXAtXHUwMDNlYml0c1tCSVRfV09SRChiaXQpXSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiB3b3JkIFx1MDAyNiBCSVRfTUFTSyhiaXQpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvY29tbW9uLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9jb21tb24uaFxuaW5kZXggOTMxYWNlOWE0OWUyYi4uYTYyMjAzNTVhNjk3NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2NvbW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9jb21tb24uaFxuQEAgLTQ5LDYgJiM0Mzs0OSw3IEBAIGV4dGVybiB2b2xhdGlsZSB1NjQgYXNhbl92aW9sYXRlZDtcbiBpbnQgYXJlbmFfZmxzKF9fdTY0IHdvcmQpO1xuIFxuIHZvaWQgX19hcmVuYSAqYXJlbmFfbWFsbG9jKHNpemVfdCBzaXplKTtcbiYjNDM7dm9pZCBfX2FyZW5hICphcmVuYV9jYWxsb2Moc2l6ZV90IG5jb3VudCwgc2l6ZV90IHNpemUpO1xuIHZvaWQgYXJlbmFfZnJlZSh2b2lkIF9fYXJlbmEgKnB0cik7XG4gXG4gLypcbkBAIC02MSw2ICYjNDM7NjIsNzYgQEAgdm9pZCBhcmVuYV9mcmVlKHZvaWQgX19hcmVuYSAqcHRyKTtcbiAgKi9cbiAjZGVmaW5lIGFyZW5hX3N1YnByb2dfaW5pdCgpIGRvIHsgYXNtIHZvbGF0aWxlIChcJiMzNDtcJiMzNDsgOjogXCYjMzQ7clwmIzM0OyhcdTAwMjZhcmVuYSkpOyB9IHdoaWxlICgwKVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBCUEYgZG9lcyBub3QgY3VycmVudGx5IHN1cHBvcnQgdGhlIG1lbXNldCBpbnRyaW5zaWNzLiBmb3IgbGFyZ2VcbiYjNDM7ICogc2VxdWVudGlhbCBjb3BpZXMsIG9yIGFzc2lnbm1lbnRzIG9mIGxhcmdlIGRhdGEgc3RydWN0dXJlcyxcbiYjNDM7ICogdGhlIGZyb250ZW5kIHdpbGwgZ2VuZXJhdGUgYW4gaW50cmluc2ljIHRoYXQgY2F1c2VzIHRoZSBCUEZcbiYjNDM7ICogYmFja2VuZCB0byBleGl0IGR1ZSB0byBhIG1pc3NpbmcgaW1wbGVtZW50YXRpb24uIFByb3ZpZGVcbiYjNDM7ICogaW1wbGVtZW50YXRpb25zIGZvciB0aGUgaW50cmluc2ljLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBpbnQgYXJlbmFfbWVtc2V0KHM4IF9fYXJlbmEgKmRzdCwgczggdmFsLCBzaXplX3Qgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHNpemVfdCBoZWFkYWxpZ247XG4mIzQzO1x0c2l6ZV90IHRhaWxhbGlnbjtcbiYjNDM7XHR1OCB1dmFsID0gKHU4KXZhbDtcbiYjNDM7XHRzaXplX3QgdmFsNjQ7XG4mIzQzO1x0c2l6ZV90IGk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQ2FsY3VsYXRlIGhvdyBtYW55IGJ5dGVzIHRvIHRoZSBuZXh0IHdvcmQtYWxpZ25lZCBvbmUuXG4mIzQzO1x0ICogV2UgZ2V0IHRoaXMgYnkgdHJ1bmNhdGluZyB0aGUgMnMgY29tcGxlbWVudCBvZiB0aGVcbiYjNDM7XHQgKiBwb2ludGVyIHRvIHRoZSBsYXN0IDMgYml0cy4gSW50dWl0aXZlbHksIHNpbmNlXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBUaGUgTiBMU0JzIG9mIGRzdCBhbmQgLWRzdCBhZGQgdG8gMSBcdTAwM2NcdTAwM2MgTiwgd2hpY2hcbiYjNDM7XHQgKiBpcyB3aHkgZHN0ICYjNDM7ICgtZHN0KSA9IDB4MFVMTCB0aHJvdWdoIG92ZXJmbG93LiBTbyB0aGVcbiYjNDM7XHQgKiBsYXN0IE4gPSAzIGJpdHMgb2YgdGhlIG5lZ2F0aXZlIGFyZSB0aGUgbnVtYmVyIG9mXG4mIzQzO1x0ICogYnl0ZXMgdG8gYWxpZ24gZHN0IG9uIHRoZSBsYXN0IDMgYml0cy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqL1xuJiM0MztcdGhlYWRhbGlnbiA9IC0odTY0KWRzdCBcdTAwMjYgKHNpemVvZih1NjQpIC0gMSk7XG4mIzQzO1x0aWYgKCFoZWFkYWxpZ24gfHwgc2l6ZSBcdTAwM2MgaGVhZGFsaWduKVxuJiM0MztcdFx0Z290byBwdHJhbGlnbmVkO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSB6ZXJvOyBpIFx1MDAzYyBoZWFkYWxpZ24gXHUwMDI2XHUwMDI2IGNhbl9sb29wOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGRzdFtpXSA9IHV2YWw7XG4mIzQzO1xuJiM0MztcdGRzdCAmIzQzOz0gaGVhZGFsaWduO1xuJiM0MztcdHNpemUgLT0gaGVhZGFsaWduO1xuJiM0MztcbiYjNDM7cHRyYWxpZ25lZDpcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNYWtlIGEgd29yZCB3aXRoIGFsbCBieXRlcyBlcXVhbCB0byB0aGUgYnl0ZSB3ZSBhcmUgc2V0dGluZy5cbiYjNDM7XHQgKiBTaW5jZSAxIGJ5dGUgLVx1MDAzZSAyIGhleCBkaWdpdHMuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBTaGlmdGluZyB0aGUgdmFsdWUgYnkgYSAwIGJ5dGVzIGlzIGVxdWFsIHRvIG11bHRpcGxpY2F0aW9uIGJ5IDB4MDFcbiYjNDM7XHQgKiBTaGlmdGluZyBieSAxIGJ5dGVzIGlzIGVxdWFsIHRvIG11bHRpcGxpY2F0aW9uIGJ5IDB4MDEgXHUwMDNjXHUwMDNjIDgsXG4mIzQzO1x0ICogLi4uXG4mIzQzO1x0ICogU2hpZnRpbmcgYnkgNyBieXRlcyBpcyBlcXVhbCB0byBtdWx0aXBsaWNhdGlvbiBieSAweDAxIFx1MDAzY1x1MDAzYyA1Ni5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIEVuZCBvcGVyYXRpb24gdG8gcmVwbGljYXRlIHRoZSBieXRlIGludG8gYWxsIHRoZSBieXRlcyBvZiBhIHdvcmRcbiYjNDM7XHQgKiBpcyAoc2luY2UgYSB8IGIgPSBhICYjNDM7IGIgd2hlbiBhIFx1MDAyNiBiID09IDApOlxuJiM0MztcdCAqXG4mIzQzO1x0ICogdmFsICYjNDM7IHZhbCAqICgxVUwgXHUwMDNjXHUwMDNjIDgpICYjNDM7IHZhbCAqICgxVUwgXHUwMDNjXHUwMDNjIDE2KSAmIzQzOyAuLiAmIzQzOyB2YWwgKiAoMVVMIFx1MDAzY1x1MDAzYyA1NilcbiYjNDM7XHQgKiA9IHZhbCAqICgxVUwgXHUwMDNjXHUwMDNjIDU2ICYjNDM7IDFVTCBcdTAwM2NcdTAwM2MgNDggJiM0MzsgLi4uICYjNDM7IDFVTCBcdTAwM2NcdTAwM2MgMClcbiYjNDM7XHQgKiA9IHZhbCAqICgweDAxVUwgXHUwMDNjXHUwMDNjIDU2IHwgMHgwMVVMIFx1MDAzY1x1MDAzYyA0OCAmIzQzOyAuLi4gJiM0MzsgMVVMIFx1MDAzY1x1MDAzYyAwKVxuJiM0MztcdCAqID0gdmFsICogMHgwMTAxIDAxMDEgMDEwMSAwMTAxXG4mIzQzO1x0ICovXG4mIzQzO1x0dmFsNjQgPSAodTgpdmFsICogMHgwMTAxMDEwMTAxMDEwMTAxVUxMO1xuJiM0MztcbiYjNDM7XHQvKiBQb2ludGVyIGlzIG5vdyBhbGlnbmVkLCB1c2Ugd29yZC1hbGlnbmVkIGFzc2lnbm1lbnRzLiAqL1xuJiM0MztcdGZvciAoaSA9IHplcm87IGkgXHUwMDNjIHNpemUgLyBzaXplb2YodTY0KSBcdTAwMjZcdTAwMjYgY2FuX2xvb3A7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0KCh1NjQgX19hcmVuYSAqKWRzdClbaV0gPSB2YWw2NDtcbiYjNDM7XG4mIzQzO1x0LyogR28gYmFjayB0byBieXRlLWFsaWduZWQgZm9yIHRoZSB0YWlsLiAqL1xuJiM0MztcdHRhaWxhbGlnbiA9IHNpemUgJSBzaXplb2YodTY0KTtcbiYjNDM7XHRkc3QgJiM0Mzs9IHNpemUgLSB0YWlsYWxpZ247XG4mIzQzO1x0Zm9yIChpID0gemVybzsgaSBcdTAwM2MgdGFpbGFsaWduIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRkc3RbaV0gPSB1dmFsO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiAjZWxzZSAvKiAhIF9fQlBGX18gKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NzdGRpbnQuaFx1MDAzZVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9iaXRtYXAuYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYml0bWFwLmJwZi5jXG5pbmRleCA3NjMxOWE1MjlmMDJiLi5lNjZiM2EyNmNhM2Q2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2JpdG1hcC5icGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2JpdG1hcC5icGYuY1xuQEAgLTEsMyAmIzQzOzEsNiBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTEdQTC0yLjEgT1IgQlNELTItQ2xhdXNlXG4mIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbiYjNDM7XG4gI2luY2x1ZGUgXHUwMDNjbGliYXJlbmEvY29tbW9uLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaWJhcmVuYS9hc2FuLmhcdTAwM2VcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmNcbmluZGV4IDUxMzVkNWM3MmE0NmQuLmRlNjU2YjY5ZDEzYWYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYXNhbi5icGYuY1xuQEAgLTEwMywyMyAmIzQzOzEwMyw2IEBAIHZvbGF0aWxlIGJvb2wgYXNhbl9pbml0ZWQgPSBmYWxzZTtcbiAgKi9cbiB2b2xhdGlsZSBib29sIGFzYW5fcmVwb3J0X29uY2UgPSBmYWxzZTtcbiBcbi0vKlxuLSAqIEJQRiBkb2VzIG5vdCBjdXJyZW50bHkgc3VwcG9ydCB0aGUgbWVtc2V0L21lbWNweS9tZW1jbXAgaW50cmluc2ljcy5cbi0gKiBGb3IgbGFyZ2Ugc2VxdWVudGlhbCBjb3BpZXMsIG9yIGFzc2lnbm1lbnRzIG9mIGxhcmdlIGRhdGEgc3RydWN0dXJlcyxcbi0gKiB0aGUgZnJvbnRlbmQgd2lsbCBnZW5lcmF0ZSBhbiBpbnRyaW5zaWMgdGhhdCBjYXVzZXMgdGhlIEJQRiBiYWNrZW5kXG4tICogdG8gZXhpdCBkdWUgdG8gYSBtaXNzaW5nIGltcGxlbWVudGF0aW9uLiBQcm92aWRlIGEgc2ltcGxlIGltcGxlbWVudGF0aW9uXG4tICoganVzdCBmb3IgbWVtc2V0IHRvIHVzZSBpdCBmb3IgcG9pc29uaW5nL3VucG9pc29uaW5nIHRoZSBtYXAuXG4tICovXG4tX193ZWFrIGludCBhc2FuX21lbXNldChzOCBfX2FyZW5hICpkc3QsIHM4IHZhbCwgc2l6ZV90IHNpemUpXG4te1xuLVx0c2l6ZV90IGk7XG4tXG4tXHRmb3IgKGkgPSB6ZXJvOyBpIFx1MDAzYyBzaXplIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSYjNDM7JiM0MzspXG4tXHRcdGRzdFtpXSA9IHZhbDtcbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbiAvKiBWYWxpZGF0ZSBhIDEtYnl0ZSBhY2Nlc3MsIGFsd2F5cyB3aXRoaW4gYSBzaW5nbGUgYnl0ZS4gKi9cbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgbWVtb3J5X2lzX3BvaXNvbmVkXzEoczggX19hcmVuYSAqYWRkcilcbiB7XG5AQCAtNDIyLDcgJiM0Mzs0MDUsNyBAQCBfX2hpZGRlbiBfX25vYXNhbiBpbnQgYXNhbl9wb2lzb24odm9pZCBfX2FyZW5hICphZGRyLCBzOCB2YWwsIHNpemVfdCBzaXplKVxuIFx0c2hhZG93ID0gbWVtX3RvX3NoYWRvdyhhZGRyKTtcbiBcdGxlbiA9IHNpemUgXHUwMDNlXHUwMDNlIEFTQU5fU0hBRE9XX1NISUZUO1xuIFxuLVx0YXNhbl9tZW1zZXQoc2hhZG93LCB2YWwsIGxlbik7XG4mIzQzO1x0YXJlbmFfbWVtc2V0KHNoYWRvdywgdmFsLCBsZW4pO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTQ2Myw3ICYjNDM7NDQ2LDcgQEAgX19oaWRkZW4gX19ub2FzYW4gaW50IGFzYW5fdW5wb2lzb24odm9pZCBfX2FyZW5hICphZGRyLCBzaXplX3Qgc2l6ZSlcbiBcdHNoYWRvdyA9IG1lbV90b19zaGFkb3coYWRkcik7XG4gXHRsZW4gPSBzaXplIFx1MDAzZVx1MDAzZSBBU0FOX1NIQURPV19TSElGVDtcbiBcbi1cdGFzYW5fbWVtc2V0KHNoYWRvdywgMCwgbGVuKTtcbiYjNDM7XHRhcmVuYV9tZW1zZXQoc2hhZG93LCAwLCBsZW4pO1xuIFxuIFx0LypcbiBcdCAqIElmIHdlIGFyZSBhbGxvY2F0aW5nIGEgbm9uLWdyYW51bGUgYWxpZ25lZCByZWdpb24sIHdlIG5lZWQgdG8gYWRqdXN0XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9iaXRtYXAuYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2JpdG1hcC5icGYuY1xuaW5kZXggNWZmOGU2ODhkZGM3Ni4uMDM5MGYyMGNlMzY2ZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYml0bWFwLmJwZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2JpdG1hcC5icGYuY1xuQEAgLTM0LDI0ICYjNDM7MzQsNiBAQCB2b2lkIGJtcF9mcmVlKHN0cnVjdCBhcmVuYV9iaXRtYXAgX19hcmVuYSAqYm1wKVxuIFx0YXJlbmFfZnJlZShibXApO1xuIH1cbiBcbi1fX3dlYWtcbi12b2lkIF9fYm1wX3NldF9iaXQodTMyIGJpdCwgc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICpibXApXG4te1xuLVx0Ym1wLVx1MDAzZWJpdHNbQklUX1dPUkQoYml0KV0gfD0gQklUX01BU0soYml0KTtcbi19XG4tXG4tX193ZWFrXG4tdm9pZCBfX2JtcF9jbGVhcl9iaXQodTMyIGJpdCwgc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICpibXApXG4te1xuLVx0Ym1wLVx1MDAzZWJpdHNbQklUX1dPUkQoYml0KV0gXHUwMDI2PSB+QklUX01BU0soYml0KTtcbi19XG4tXG4tX193ZWFrXG4tYm9vbCBibXBfdGVzdF9iaXQodTMyIGJpdCwgc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICpibXApXG4te1xuLVx0cmV0dXJuIGJtcC1cdTAwM2ViaXRzW0JJVF9XT1JEKGJpdCldIFx1MDAyNiBCSVRfTUFTSyhiaXQpO1xuLX1cbi1cbiBfX3dlYWtcbiBib29sIGJtcF90ZXN0X2FuZF9jbGVhcl9iaXQodTMyIGJpdCwgc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICpibXApXG4ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYnVkZHkuYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2J1ZGR5LmJwZi5jXG5pbmRleCBjNjc0ZWU1Y2ZjYzFkLi4yNDkwYWIxMzk2ZGUwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9idWRkeS5icGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9idWRkeS5icGYuY1xuQEAgLTUsNiAmIzQzOzUsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpYmFyZW5hL2FzYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpYmFyZW5hL2J1ZGR5LmhcdTAwM2VcbiBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmX2FyZW5hX3NwaW5fbG9jay5oXHUwMDNlXG4mIzQzO1xuIC8qXG4gICogQnVkZHkgYWxsb2NhdG9yIGFyZW5hLWJhc2VkIGltcGxlbWVudGF0aW9uLlxuICAqXG5AQCAtNDUsMTUgJiM0Mzs0Nyw4IEBAIGVudW0ge1xuIFx0QlVERFlfQ0hVTktfUEFHRVNcdD0gQlVERFlfQ0hVTktfQllURVMgLyBfX1BBR0VfU0laRVxuIH07XG4gXG4tc3RhdGljIGlubGluZSBpbnQgYnVkZHlfbG9jayhzdHJ1Y3QgYnVkZHkgX19hcmVuYSAqYnVkZHkpXG4te1xuLVx0cmV0dXJuIGFyZW5hX3NwaW5fbG9jayhcdTAwMjZidWRkeS1cdTAwM2Vsb2NrKTtcbi19XG4tXG4tc3RhdGljIGlubGluZSB2b2lkIGJ1ZGR5X3VubG9jayhzdHJ1Y3QgYnVkZHkgX19hcmVuYSAqYnVkZHkpXG4te1xuLVx0YXJlbmFfc3Bpbl91bmxvY2soXHUwMDI2YnVkZHktXHUwMDNlbG9jayk7XG4tfVxuJiM0MzsjZGVmaW5lIGJ1ZGR5X2xvY2soYnVkZHksIGZsYWdzKSAoYXJlbmFfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2KGJ1ZGR5KS1cdTAwM2Vsb2NrLCAoZmxhZ3MpKSlcbiYjNDM7I2RlZmluZSBidWRkeV91bmxvY2soYnVkZHksIGZsYWdzKSAoYXJlbmFfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjYoYnVkZHkpLVx1MDAzZWxvY2ssIChmbGFncykpKVxuIFxuIC8qXG4gICogUmVzZXJ2ZSBwYXJ0IG9mIHRoZSBhcmVuYSBhZGRyZXNzIHNwYWNlIGZvciB0aGUgYWxsb2NhdG9yLiBXZSB1c2VcbkBAIC0zODUsNiAmIzQzOzM4MCw3IEBAIHN0YXRpYyBzdHJ1Y3QgYnVkZHlfY2h1bmsgX19hcmVuYSAqYnVkZHlfY2h1bmtfZ2V0KHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSlcbiB7XG4gXHR1NjQgb3JkZXIsIG9yZCwgbWluX29yZGVyLCBtYXhfb3JkZXI7XG4gXHRzdHJ1Y3QgYnVkZHlfY2h1bmsgX19hcmVuYSAgKmNodW5rO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRzaXplX3QgbGVmdDtcbiBcdGludCBwb3dlcjI7XG4gXHR1NjQgdmFkZHI7XG5AQCAtNDE2LDcgJiM0Mzs0MTIsNyBAQCBzdGF0aWMgc3RydWN0IGJ1ZGR5X2NodW5rIF9fYXJlbmEgKmJ1ZGR5X2NodW5rX2dldChzdHJ1Y3QgYnVkZHkgX19hcmVuYSAqYnVkZHkpXG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuIFxuLVx0aWYgKGJ1ZGR5X2xvY2soYnVkZHkpKSB7XG4mIzQzO1x0aWYgKGJ1ZGR5X2xvY2soYnVkZHksIGZsYWdzKSkge1xuIFx0XHQvKlxuIFx0XHQgKiBXZSBjYW5ub3QgcmVjbGFpbSB0aGUgdmFkZHIgc3BhY2UsIGJ1dCB0aGF0IGlzIG9rIC0gdGhpc1xuIFx0XHQgKiBvcGVyYXRpb24gc2hvdWxkIGFsd2F5cyBzdWNjZWVkLiBUaGUgZXJyb3IgcGF0aCBpcyB0byBjYXRjaFxuQEAgLTUyMCw3ICYjNDM7NTE2LDcgQEAgc3RhdGljIHN0cnVjdCBidWRkeV9jaHVuayBfX2FyZW5hICpidWRkeV9jaHVua19nZXQoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KVxuIFx0XHRcdGFyZW5hX3N0ZGVycihcbiBcdFx0XHRcdFwmIzM0O2NodW5rIGhhcyBzaXplIG9mIDB4JWx4IGJ5dGVzIChsZWZ0ICVseCBieXRlcylcXG5cJiMzNDssXG4gXHRcdFx0XHRzaXplb2YoKmNodW5rKSwgbGVmdCk7XG4tXHRcdFx0YnVkZHlfdW5sb2NrKGJ1ZGR5KTtcbiYjNDM7XHRcdFx0YnVkZHlfdW5sb2NrKGJ1ZGR5LCBmbGFncyk7XG4gXG4gXHRcdFx0cmV0dXJuIE5VTEw7XG4gXHRcdH1cbkBAIC01MzEsNyAmIzQzOzUyNyw3IEBAIHN0YXRpYyBzdHJ1Y3QgYnVkZHlfY2h1bmsgX19hcmVuYSAqYnVkZHlfY2h1bmtfZ2V0KHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSlcbiBcdFx0b3JkZXIgPSAocG93ZXIyIFx1MDAzZT0gQlVERFlfTUlOX0FMTE9DX1NISUZUKSA/IHBvd2VyMiAtIEJVRERZX01JTl9BTExPQ19TSElGVCA6IDA7XG4gXG4gXHRcdGlmIChpZHhfc2V0X2FsbG9jYXRlZChjaHVuaywgaWR4LCB0cnVlKSkge1xuLVx0XHRcdGJ1ZGR5X3VubG9jayhidWRkeSk7XG4mIzQzO1x0XHRcdGJ1ZGR5X3VubG9jayhidWRkeSwgZmxhZ3MpO1xuIFx0XHRcdHJldHVybiBOVUxMO1xuIFx0XHR9XG4gXG5AQCAtNTQ3LDcgJiM0Mzs1NDMsNyBAQCBzdGF0aWMgc3RydWN0IGJ1ZGR5X2NodW5rIF9fYXJlbmEgKmJ1ZGR5X2NodW5rX2dldChzdHJ1Y3QgYnVkZHkgX19hcmVuYSAqYnVkZHkpXG4gXHRcdCAqL1xuIFx0XHRtaW5fb3JkZXIgPSBsZWZ0ID8gb3JkZXIgJiM0MzsgMSA6IG9yZGVyO1xuIFx0XHRpZiAoYWRkX2xlZnRvdmVyc190b19mcmVlbGlzdChjaHVuaywgaWR4LCBtaW5fb3JkZXIsIG1heF9vcmRlcikpIHtcbi1cdFx0XHRidWRkeV91bmxvY2soYnVkZHkpO1xuJiM0MztcdFx0XHRidWRkeV91bmxvY2soYnVkZHksIGZsYWdzKTtcbiBcdFx0XHRyZXR1cm4gTlVMTDtcbiBcdFx0fVxuIFxuQEAgLTU1Niw3ICYjNDM7NTUyLDcgQEAgc3RhdGljIHN0cnVjdCBidWRkeV9jaHVuayBfX2FyZW5hICpidWRkeV9jaHVua19nZXQoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KVxuIFx0XHRtYXhfb3JkZXIgPSBvcmRlcjtcbiBcdH1cbiBcbi1cdGJ1ZGR5X3VubG9jayhidWRkeSk7XG4mIzQzO1x0YnVkZHlfdW5sb2NrKGJ1ZGR5LCBmbGFncyk7XG4gXG4gXHRyZXR1cm4gY2h1bms7XG4gfVxuQEAgLTU2NCw2ICYjNDM7NTYwLDcgQEAgc3RhdGljIHN0cnVjdCBidWRkeV9jaHVuayBfX2FyZW5hICpidWRkeV9jaHVua19nZXQoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KVxuIF9fd2VhayBpbnQgYnVkZHlfaW5pdChzdHJ1Y3QgYnVkZHkgX19hcmVuYSAqYnVkZHkpXG4ge1xuIFx0c3RydWN0IGJ1ZGR5X2NodW5rIF9fYXJlbmEgKmNodW5rO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRpbnQgcmV0O1xuIFxuIFx0aWYgKCFhc2FuX3JlYWR5KCkpXG5AQCAtNTc5LDcgJiM0Mzs1NzYsNyBAQCBfX3dlYWsgaW50IGJ1ZGR5X2luaXQoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KVxuIFxuIFx0Y2h1bmsgPSBidWRkeV9jaHVua19nZXQoYnVkZHkpO1xuIFxuLVx0aWYgKGJ1ZGR5X2xvY2soYnVkZHkpKSB7XG4mIzQzO1x0aWYgKGJ1ZGR5X2xvY2soYnVkZHksIGZsYWdzKSkge1xuIFx0XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgY2h1bmssIEJVRERZX0NIVU5LX1BBR0VTKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG5AQCAtNTkxLDcgJiM0Mzs1ODgsNyBAQCBfX3dlYWsgaW50IGJ1ZGR5X2luaXQoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KVxuIFx0LyogUHV0IHRoZSBjaHVuayBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0LiAqL1xuIFx0YnVkZHktXHUwMDNlZmlyc3RfY2h1bmsgPSBjaHVuaztcbiBcbi1cdGJ1ZGR5X3VubG9jayhidWRkeSk7XG4mIzQzO1x0YnVkZHlfdW5sb2NrKGJ1ZGR5LCBmbGFncyk7XG4gXG4gXHRyZXR1cm4gY2h1bmsgPyAwIDogLUVOT01FTTtcbiB9XG5AQCAtNzMwLDkgJiM0Mzs3MjcsMTAgQEAgc3RhdGljIHU2NCBidWRkeV9hbGxvY19mcm9tX2V4aXN0aW5nX2NodW5rcyhzdHJ1Y3QgYnVkZHkgX19hcmVuYSAqYnVkZHksIGludCBvcmRcbiAgKi9cbiBzdGF0aWMgdTY0IGJ1ZGR5X2FsbG9jX2Zyb21fbmV3X2NodW5rKHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSwgc3RydWN0IGJ1ZGR5X2NodW5rIF9fYXJlbmEgKmNodW5rLCBpbnQgb3JkZXIpXG4ge1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHR1NjQgYWRkcmVzcztcbiBcbi1cdGlmIChidWRkeV9sb2NrKGJ1ZGR5KSlcbiYjNDM7XHRpZiAoYnVkZHlfbG9jayhidWRkeSwgZmxhZ3MpKVxuIFx0XHRyZXR1cm4gKHU2NClOVUxMO1xuIFxuIFxuQEAgLTc0NSw3ICYjNDM7NzQzLDcgQEAgc3RhdGljIHU2NCBidWRkeV9hbGxvY19mcm9tX25ld19jaHVuayhzdHJ1Y3QgYnVkZHkgX19hcmVuYSAqYnVkZHksIHN0cnVjdCBidWRkeV9cbiBcbiBcdGFkZHJlc3MgPSBidWRkeV9jaHVua19hbGxvYyhidWRkeS1cdTAwM2VmaXJzdF9jaHVuaywgb3JkZXIpO1xuIFxuLVx0YnVkZHlfdW5sb2NrKGJ1ZGR5KTtcbiYjNDM7XHRidWRkeV91bmxvY2soYnVkZHksIGZsYWdzKTtcbiBcbiBcdHJldHVybiAodTY0KWFkZHJlc3M7XG4gfVxuQEAgLTc1NCw2ICYjNDM7NzUyLDcgQEAgdm9pZCBfX2FyZW5hICpidWRkeV9hbGxvYyhzdHJ1Y3QgYnVkZHkgX19hcmVuYSAqYnVkZHksIHNpemVfdCBzaXplKVxuIHtcbiBcdHZvaWQgX19hcmVuYSAqYWRkcmVzcyA9IE5VTEw7XG4gXHRzdHJ1Y3QgYnVkZHlfY2h1bmsgX19hcmVuYSAqY2h1bms7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGludCBvcmRlcjtcbiBcbiBcdGlmICghYnVkZHkpXG5AQCAtNzY1LDExICYjNDM7NzY0LDExIEBAIHZvaWQgX19hcmVuYSAqYnVkZHlfYWxsb2Moc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5LCBzaXplX3Qgc2l6ZSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG4gXG4tXHRpZiAoYnVkZHlfbG9jayhidWRkeSkpXG4mIzQzO1x0aWYgKGJ1ZGR5X2xvY2soYnVkZHksIGZsYWdzKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4gXHRhZGRyZXNzID0gKHU4IF9fYXJlbmEgKilidWRkeV9hbGxvY19mcm9tX2V4aXN0aW5nX2NodW5rcyhidWRkeSwgb3JkZXIpO1xuLVx0YnVkZHlfdW5sb2NrKGJ1ZGR5KTtcbiYjNDM7XHRidWRkeV91bmxvY2soYnVkZHksIGZsYWdzKTtcbiBcdGlmIChhZGRyZXNzKVxuIFx0XHRnb3RvIGRvbmU7XG4gXG5AQCAtODgwLDYgJiM0Mzs4NzksNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBidWRkeV9mcmVlX3VubG9ja2VkKHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSwgdTY0XG4gXG4gX193ZWFrIGludCBidWRkeV9mcmVlKHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSwgdm9pZCBfX2FyZW5hICphZGRyKVxuIHtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0aW50IHJldDtcbiBcbiBcdGlmICghYnVkZHkpXG5AQCAtODg5LDEzICYjNDM7ODg5LDEzIEBAIF9fd2VhayBpbnQgYnVkZHlfZnJlZShzdHJ1Y3QgYnVkZHkgX19hcmVuYSAqYnVkZHksIHZvaWQgX19hcmVuYSAqYWRkcilcbiBcdGlmICghYWRkcilcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRyZXQgPSBidWRkeV9sb2NrKGJ1ZGR5KTtcbiYjNDM7XHRyZXQgPSBidWRkeV9sb2NrKGJ1ZGR5LCBmbGFncyk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0cmV0ID0gYnVkZHlfZnJlZV91bmxvY2tlZChidWRkeSwgKHU2NClhZGRyKTtcbiBcbi1cdGJ1ZGR5X3VubG9jayhidWRkeSk7XG4mIzQzO1x0YnVkZHlfdW5sb2NrKGJ1ZGR5LCBmbGFncyk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2NvbW1vbi5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvY29tbW9uLmJwZi5jXG5pbmRleCA1NjlmMGY2NGQ1MThiLi43ODVkNDg3MmNiNDk0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9jb21tb24uYnBmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvY29tbW9uLmJwZi5jXG5AQCAtMSw1ICYjNDM7MSw3IEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IExHUEwtMi4xIE9SIEJTRC0yLUNsYXVzZVxuIC8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGltaXRzLmhcdTAwM2VcbiYjNDM7XG4gI2luY2x1ZGUgXHUwMDNjbGliYXJlbmEvY29tbW9uLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaWJhcmVuYS9hc2FuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaWJhcmVuYS9idWRkeS5oXHUwMDNlXG5AQCAtNDgsMTAgJiM0Mzs1MCwzMyBAQCBfX3dlYWsgdm9pZCBfX2FyZW5hICphcmVuYV9tYWxsb2Moc2l6ZV90IHNpemUpXG4gXHRyZXR1cm4gYnVkZHlfYWxsb2MoXHUwMDI2YnVkZHksIHNpemUpO1xuIH1cbiBcbiYjNDM7X193ZWFrIHZvaWQgX19hcmVuYSAqYXJlbmFfY2FsbG9jKHNpemVfdCBuY291bnQsIHNpemVfdCBzaXplKVxuJiM0Mzt7XG4mIzQzO1x0dm9pZCBfX2FyZW5hICptZW07XG4mIzQzO1x0c2l6ZV90IHRvdGFsO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIElkZWFsbHkgd2UmIzM5O2QgYmUgdXNpbmcgX19idWlsdGluX211bF9vdmVyZmxvdyBoZXJlLFxuJiM0MztcdCAqIGJ1dCB0aGUgQlBGIGNvbXBpbGVyIGJhY2tlbmQgZG9lc24mIzM5O3QgaW1wbGVtZW50IF9fbXVsdGkzLlxuJiM0MztcdCAqIFRoZXJlIGFyZSB3YXlzIHRvIG9wdGltaXplIHRoZSBkaXZpc2lvbiBhd2F5IGZyb20gdGhlXG4mIzQzO1x0ICogb3ZlcmZsb3cgY2hlY2ssIGJ1dCBhbnkgY29zdHMgYXJlIGR3YXJmZWQgYnkgdGhlXG4mIzQzO1x0ICogYnVkZHlfYWxsb2MoKSBjYWxsLiBLZWVwIGl0IHNpbXBsZSBmb3Igbm93LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh1bmxpa2VseShuY291bnQgXHUwMDI2XHUwMDI2IHNpemUgXHUwMDNlPSBVTExPTkdfTUFYIC8gbmNvdW50KSlcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHR0b3RhbCA9IG5jb3VudCAqIHNpemU7XG4mIzQzO1xuJiM0MztcdG1lbSA9IGJ1ZGR5X2FsbG9jKFx1MDAyNmJ1ZGR5LCB0b3RhbCk7XG4mIzQzO1x0aWYgKGxpa2VseShtZW0pKVxuJiM0MztcdFx0YXJlbmFfbWVtc2V0KG1lbSwgMCwgdG90YWwpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbWVtO1xuJiM0Mzt9XG4mIzQzO1xuIF9fd2VhayB2b2lkIGFyZW5hX2ZyZWUodm9pZCBfX2FyZW5hICpwdHIpXG4ge1xuIFx0YnVkZHlfZnJlZShcdTAwMjZidWRkeSwgcHRyKTtcbiB9XG4gXG4tXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxOTo0MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBCUEYgc2VsZnRlc3RzIGFuZCBiZW5jaG1hcmtzIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8uIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDFhMjI4NmNhYTk4ZmE4NjUwM2QzYTkyMGVlZDNjZGYzNWE2NmQ4MwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDE3IDE5OjQzOjQyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlCmluZGV4IGQzNjU1YTcwNjQ4MjYuLjIyZTllYjE2YzE1MTEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUKQEAgLTgyNiwxOCAmIzQzOzgyNiwyMiBAQCBMSUJBUkVOQV9NQUtFX0FSR1MgPSBcCiAJCUJQRl9UQVJHRVRfRU5ESUFOPSYjMzQ7JChCUEZfVEFSR0VUX0VORElBTikmIzM0OyBcCiAJCVE9JiMzNDskKFEpJiMzNDsKIAotTElCQVJFTkFfQlBGX0RFUFMgOj0gJCh3aWxkY2FyZCBsaWJhcmVuYS9NYWtlZmlsZQkJXAotCQkJCSBsaWJhcmVuYS9pbmNsdWRlLyoJCVwKLQkJCQkgbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS8qCVwKLQkJCQkgbGliYXJlbmEvc3JjLyoJCQlcCi0JCQkJIGxpYmFyZW5hL3NlbGZ0ZXN0cy8qCQlcCi0JCQkJIGxpYmFyZW5hLyouYnBmLm8pCiYjNDM7TElCQVJFTkFfQ09NTU9OX0RFUFMgOj0gJCh3aWxkY2FyZCBsaWJhcmVuYS9NYWtlZmlsZQkJXAomIzQzOwkJCQkgICAgbGliYXJlbmEvaW5jbHVkZS8qCQlcCiYjNDM7CQkJCSAgICBsaWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hLyoJXAomIzQzOwkJCQkgICAgbGliYXJlbmEvc3JjLyopCiYjNDM7TElCQVJFTkFfQlBGX0RFUFMgOj0gJChMSUJBUkVOQV9DT01NT05fREVQUykgJCh3aWxkY2FyZCBsaWJhcmVuYS9zZWxmdGVzdHMvKikKJiM0MztMSUJBUkVOQV9CRU5DSF9CUEZfREVQUyA6PSAkKExJQkFSRU5BX0NPTU1PTl9ERVBTKSAkKHdpbGRjYXJkIGxpYmFyZW5hL2JlbmNocy8qKQogCiBMSUJBUkVOQV9TS0VMIDo9IGxpYmFyZW5hL2xpYmFyZW5hLnNrZWwuaAomIzQzO0xJQkFSRU5BX0JFTkNIX1NLRUwgOj0gbGliYXJlbmEvbGliYXJlbmFfYmVuY2guc2tlbC5oCiAKICQoTElCQVJFTkFfU0tFTCk6ICQoSU5DTFVERV9ESVIpL3ZtbGludXguaCAkKEJQRk9CSikgJChMSUJBUkVOQV9CUEZfREVQUykKIAkmIzQzOyQoTUFLRSkgLUMgbGliYXJlbmEgbGliYXJlbmEuc2tlbC5oICQoTElCQVJFTkFfTUFLRV9BUkdTKQogCiYjNDM7JChMSUJBUkVOQV9CRU5DSF9TS0VMKTogJChJTkNMVURFX0RJUikvdm1saW51eC5oICQoQlBGT0JKKSAkKExJQkFSRU5BX0JFTkNIX0JQRl9ERVBTKSB8ICQoTElCQVJFTkFfU0tFTCkKJiM0MzsJJiM0MzskKE1BS0UpIC1DIGxpYmFyZW5hIGJlbmNobWFya3MgJChMSUJBUkVOQV9NQUtFX0FSR1MpCiYjNDM7CiBpZm5lcSAoJChDTEFOR19IQVNfQVJFTkFfQVNBTiksKQogTElCQVJFTkFfQVNBTl9TS0VMIDo9IGxpYmFyZW5hL2xpYmFyZW5hX2FzYW4uc2tlbC5oCiBDRkxBR1MgJiM0Mzs9IC1ESEFTX0JQRl9BUkVOQV9BU0FOCkBAIC05ODcsNiAmIzQzOzk5MSw3IEBAICQoT1VUUFVUKS9iZW5jaF9zb2NrbWFwLm86ICQoT1VUUFVUKS9iZW5jaF9zb2NrbWFwX3Byb2cuc2tlbC5oCiAkKE9VVFBVVCkvYmVuY2hfbHBtX3RyaWVfbWFwLm86ICQoT1VUUFVUKS9scG1fdHJpZV9iZW5jaC5za2VsLmggJChPVVRQVVQpL2xwbV90cmllX21hcC5za2VsLmgKICQoT1VUUFVUKS9iZW5jaF9icGZfbm9wLm86ICQoT1VUUFVUKS9icGZfbm9wX2JlbmNoLnNrZWwuaCBiZW5jaF9icGZfdGltaW5nLmgKICQoT1VUUFVUKS9iZW5jaF94ZHBfbGIubzogJChPVVRQVVQpL3hkcF9sYl9iZW5jaC5za2VsLmggYmVuY2hfYnBmX3RpbWluZy5oCiYjNDM7JChPVVRQVVQpL2JlbmNoX2xpYmFyZW5hLm86ICQoTElCQVJFTkFfQkVOQ0hfU0tFTCkKICQoT1VUUFVUKS9iZW5jaF9icGZfdGltaW5nLm86IGJlbmNoX2JwZl90aW1pbmcuaAogJChPVVRQVVQpL2JlbmNoLm86IGJlbmNoLmggdGVzdGluZ19oZWxwZXJzLmggJChCUEZPQkopCiAkKE9VVFBVVCkvYmVuY2g6IExETElCUyAmIzQzOz0gLWxtCkBAIC0xMDE0LDYgJiM0MzsxMDE5LDcgQEAgJChPVVRQVVQpL2JlbmNoOiAkKE9VVFBVVCkvYmVuY2gubyBcCiAJCSAkKE9VVFBVVCkvYmVuY2hfYnBmX3RpbWluZy5vIFwKIAkJICQoT1VUUFVUKS9iZW5jaF9icGZfbm9wLm8gXAogCQkgJChPVVRQVVQpL2JlbmNoX3hkcF9sYi5vIFwKJiM0MzsJCSAkKE9VVFBVVCkvYmVuY2hfbGliYXJlbmEubyBcCiAJCSAkKE9VVFBVVCkvdXNkdF8xLm8gXAogCQkgJChPVVRQVVQpL3VzZHRfMi5vIFwKIAkJICMKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmMKaW5kZXggYjg2YjczNDU2ZDNjYS4uZGU2NzJmNjFkNGFiZSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmMKQEAgLTI4OCw2ICYjNDM7Mjg4LDcgQEAgZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX2NyeXB0b19hcmdwOwogZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX3NvY2ttYXBfYXJncDsKIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9scG1fdHJpZV9tYXBfYXJncDsKIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF94ZHBfbGJfYXJncDsKJiM0MztleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfbGliYXJlbmFfYXJncDsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX2NoaWxkIGJlbmNoX3BhcnNlcnNbXSA9IHsKIAl7ICZhbXA7YmVuY2hfcmluZ2J1ZnNfYXJncCwgMCwgJiMzNDtSaW5nIGJ1ZmZlcnMgYmVuY2htYXJrJiMzNDssIDAgfSwKQEAgLTMwNiw2ICYjNDM7MzA3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX2NoaWxkIGJlbmNoX3BhcnNlcnNbXSA9IHsKIAl7ICZhbXA7YmVuY2hfc29ja21hcF9hcmdwLCAwLCAmIzM0O2JwZiBzb2NrbWFwIGJlbmNobWFyayYjMzQ7LCAwIH0sCiAJeyAmYW1wO2JlbmNoX2xwbV90cmllX21hcF9hcmdwLCAwLCAmIzM0O0xQTSB0cmllIG1hcCBiZW5jaG1hcmsmIzM0OywgMCB9LAogCXsgJmFtcDtiZW5jaF94ZHBfbGJfYXJncCwgMCwgJiMzNDtYRFAgbG9hZC1iYWxhbmNlciBiZW5jaG1hcmsmIzM0OywgMCB9LAomIzQzOwl7ICZhbXA7YmVuY2hfbGliYXJlbmFfYXJncCwgMCwgJiMzNDtsaWJhcmVuYSBhbGxvY2F0b3IgYmVuY2htYXJrJiMzNDssIDAgfSwKIAl7fSwKIH07CiAKQEAgLTU4NSw2ICYjNDM7NTg3LDggQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9scG1fdHJpZV9kZWxldGU7CiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2xwbV90cmllX2ZyZWU7CiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2JwZl9ub3A7CiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX3hkcF9sYjsKJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2xpYmFyZW5hX21hbGxvYzsKJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2xpYmFyZW5hX2NhbGxvYzsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBiZW5jaCAqYmVuY2hzW10gPSB7CiAJJmFtcDtiZW5jaF9jb3VudF9nbG9iYWwsCkBAIC02NjksNiAmIzQzOzY3Myw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmVuY2ggKmJlbmNoc1tdID0gewogCSZhbXA7YmVuY2hfbHBtX3RyaWVfZnJlZSwKIAkmYW1wO2JlbmNoX2JwZl9ub3AsCiAJJmFtcDtiZW5jaF94ZHBfbGIsCiYjNDM7CSZhbXA7YmVuY2hfbGliYXJlbmFfbWFsbG9jLAomIzQzOwkmYW1wO2JlbmNoX2xpYmFyZW5hX2NhbGxvYywKIH07CiAKIHN0YXRpYyB2b2lkIGZpbmRfYmVuY2htYXJrKHZvaWQpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2xpYmFyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2xpYmFyZW5hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uMjRlNDMyMjQ0YmY1ZAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfbGliYXJlbmEuYwpAQCAtMCwwICYjNDM7MSwyMTAgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi8KJiM0MzsjaW5jbHVkZSAmbHQ7YXJncC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW1pdHMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtiZW5jaC5oJiMzNDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGliYXJlbmEvY29tbW9uLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpYmFyZW5hL2FzYW4uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGliYXJlbmEvYnVkZHkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGliYXJlbmEvdXNlcnNwYWNlLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtsaWJhcmVuYS9saWJhcmVuYV9iZW5jaC5za2VsLmgmIzM0OwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgewomIzQzOwlfX3U2NCBhbGxvY19zaXplOwomIzQzOwlfX3U2NCBuYWxsb2NzOwomIzQzO30gYXJncyA9IHsKJiM0MzsJLmFsbG9jX3NpemUgPSA2NCwKJiM0MzsJLm5hbGxvY3MgPSAxMDAwMCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgewomIzQzOwlzdHJ1Y3QgbGliYXJlbmFfYmVuY2ggKnNrZWw7CiYjNDM7CWludCBiZW5jaF9mZDsKJiM0MzsJaW50IHJlc2V0X2ZkOwomIzQzO30gY3R4OwomIzQzOwomIzQzO2VudW0gewomIzQzOwlBUkdfTElCQVJFTkFfQUxMT0NfU0laRSA9IDEyMDAwLAomIzQzOwlBUkdfTElCQVJFTkFfTkFMTE9DUywKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0c1tdID0gewomIzQzOwl7ICYjMzQ7YWxsb2Nfc2l6ZSYjMzQ7LCBBUkdfTElCQVJFTkFfQUxMT0NfU0laRSwgJiMzNDtCWVRFUyYjMzQ7LCAwLAomIzQzOwkgICYjMzQ7U2l6ZSBvZiBlYWNoIGFyZW5hIGFsbG9jYXRpb24mIzM0OyB9LAomIzQzOwl7ICYjMzQ7bmFsbG9jcyYjMzQ7LCBBUkdfTElCQVJFTkFfTkFMTE9DUywgJiMzNDtJVEVSUyYjMzQ7LCAwLAomIzQzOwkgICYjMzQ7TnVtYmVyIG9mIGFsbG9jYXRpb24gcGVyIG1lYXN1cmVtZW50JiMzNDsgfSwKJiM0MzsJe30sCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgZXJyb3JfdCBwYXJzZV9hcmcoaW50IGtleSwgY2hhciAqYXJnLCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIHZhbHVlOwomIzQzOwomIzQzOwlzd2l0Y2ggKGtleSkgewomIzQzOwljYXNlIEFSR19MSUJBUkVOQV9BTExPQ19TSVpFOgomIzQzOwkJdmFsdWUgPSBzdHJ0b3VsbChhcmcsIE5VTEwsIDEwKTsKJiM0MzsJCWlmICghdmFsdWUgfHwgdmFsdWUgJmd0Oz0gVUlOVF9NQVgpIHsKJiM0MzsJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtpbnZhbGlkIGFsbG9jX3NpemU6ICVsZCYjMzQ7LCB2YWx1ZSk7CiYjNDM7CQkJYXJncF91c2FnZShzdGF0ZSk7CiYjNDM7CQl9CiYjNDM7CQlhcmdzLmFsbG9jX3NpemUgPSB2YWx1ZTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEFSR19MSUJBUkVOQV9OQUxMT0NTOgomIzQzOwkJYXJncy5uYWxsb2NzID0gc3RydG91bGwoYXJnLCBOVUxMLCAxMCk7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiBBUkdQX0VSUl9VTktOT1dOOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgYXJncCBiZW5jaF9saWJhcmVuYV9hcmdwID0gewomIzQzOwkub3B0aW9ucyA9IG9wdHMsCiYjNDM7CS5wYXJzZXIgPSBwYXJzZV9hcmcsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB2YWxpZGF0ZSh2b2lkKQomIzQzO3sKJiM0MzsJaWYgKGVudi5jb25zdW1lcl9jbnQgIT0gMCkgewomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7YmVuY2htYXJrIGRvZXNuJiMzOTt0IHN1cHBvcnQgY29uc3VtZXJzXG4mIzM0Oyk7CiYjNDM7CQlleGl0KDEpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChlbnYucHJvZHVjZXJfY250ICE9IDEpIHsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O2JlbmNobWFyayBzdXBwb3J0cyBleGFjdGx5IG9uZSBwcm9kdWNlclxuJiMzNDspOwomIzQzOwkJZXhpdCgxKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBzZXR1cF9jb21tb24odm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhcmVuYV9hbGxvY19yZXNlcnZlX2FyZ3MgcmVzZXJ2ZV9hcmdzID0gewomIzQzOwkJLm5yX3BhZ2VzID0gQVJFTkFfUkVTRVJWRV9QQUdFU19ERkwsCiYjNDM7CX07CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CXNldHVwX2xpYmJwZigpOwomIzQzOwomIzQzOwljdHguc2tlbCA9IGxpYmFyZW5hX2JlbmNoX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghY3R4LnNrZWwpIHsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O2ZhaWxlZCB0byBvcGVuIGFuZCBsb2FkIHNrZWxldG9uXG4mIzM0Oyk7CiYjNDM7CQlleGl0KDEpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWVyciA9IGxpYmFyZW5hX3J1bl9wcm9nX2FyZ3MoCiYjNDM7CQlicGZfcHJvZ3JhbV9fZmQoY3R4LnNrZWwtJmd0O3Byb2dzLmFyZW5hX2FsbG9jX3Jlc2VydmUpLAomIzQzOwkJJmFtcDtyZXNlcnZlX2FyZ3MsIHNpemVvZihyZXNlcnZlX2FyZ3MpKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7ZmFpbGVkIHRvIHJlc2VydmUgYXJlbmEgcGFnZXM6ICVkXG4mIzM0OywgZXJyKTsKJiM0MzsJCWV4aXQoMSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXJyID0gbGliYXJlbmFfcnVuX3Byb2coCiYjNDM7CQlicGZfcHJvZ3JhbV9fZmQoY3R4LnNrZWwtJmd0O3Byb2dzLmFyZW5hX2J1ZGR5X3Jlc2V0KSk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O2ZhaWxlZCB0byBpbml0aWFsaXplIGFyZW5hIGFsbG9jYXRvcjogJWRcbiYjMzQ7LCBlcnIpOwomIzQzOwkJZXhpdCgxKTsKJiM0MzsJfQomIzQzOwomIzQzOwljdHguc2tlbC0mZ3Q7YnNzLSZndDtiZW5jaF9hbGxvY19zaXplID0gYXJncy5hbGxvY19zaXplOwomIzQzOwljdHguc2tlbC0mZ3Q7YnNzLSZndDtiZW5jaF9uYWxsb2NzID0gYXJncy5uYWxsb2NzOwomIzQzOwljdHgucmVzZXRfZmQgPSBicGZfcHJvZ3JhbV9fZmQoY3R4LnNrZWwtJmd0O3Byb2dzLmFyZW5hX2J1ZGR5X3Jlc2V0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbWFsbG9jX3NldHVwKHZvaWQpCiYjNDM7ewomIzQzOwlzZXR1cF9jb21tb24oKTsKJiM0MzsJY3R4LmJlbmNoX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKGN0eC5za2VsLSZndDtwcm9ncy5iZW5jaF9tYWxsb2MpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBjYWxsb2Nfc2V0dXAodm9pZCkKJiM0Mzt7CiYjNDM7CXNldHVwX2NvbW1vbigpOwomIzQzOwljdHguYmVuY2hfZmQgPSBicGZfcHJvZ3JhbV9fZmQoY3R4LnNrZWwtJmd0O3Byb2dzLmJlbmNoX2NhbGxvYyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkICpwcm9kdWNlcih2b2lkICppbnB1dCkKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CXdoaWxlICh0cnVlKSB7CiYjNDM7CQllcnIgPSBsaWJhcmVuYV9ydW5fcHJvZyhjdHguYmVuY2hfZmQpOwomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0O2xpYmFyZW5hIGJlbmNobWFyayBmYWlsZWQ6ICVkXG4mIzM0OywgZXJyKTsKJiM0MzsJCQlleGl0KDEpOwomIzQzOwkJfQomIzQzOwomIzQzOwkJZXJyID0gbGliYXJlbmFfcnVuX3Byb2coY3R4LnJlc2V0X2ZkKTsKJiM0MzsJCWlmIChlcnIpIHsKJiM0MzsJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtsaWJhcmVuYSBhbGxvYyByZXNldCBmYWlsZWQ6ICVkXG4mIzM0OywgZXJyKTsKJiM0MzsJCQlleGl0KDEpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtZWFzdXJlKHN0cnVjdCBiZW5jaF9yZXMgKnJlcykKJiM0Mzt7CiYjNDM7CXJlcy0mZ3Q7ZHVyYXRpb25fbnMgPSBhdG9taWNfc3dhcCgmYW1wO2N0eC5za2VsLSZndDtic3MtJmd0O2JlbmNoX2R1cmF0aW9uX25zLCAwKTsKJiM0MzsJcmVzLSZndDtoaXRzID0gYXRvbWljX3N3YXAoJmFtcDtjdHguc2tlbC0mZ3Q7YnNzLSZndDtiZW5jaF9oaXRzLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcmVwb3J0X3Byb2dyZXNzKGludCBpdGVyLCBzdHJ1Y3QgYmVuY2hfcmVzICpyZXMsIGxvbmcgZGVsdGFfbnMpCiYjNDM7ewomIzQzOwlkb3VibGUgbGF0ZW5jeV9ucyA9IDAuMDsKJiM0MzsKJiM0MzsJaWYgKHJlcy0mZ3Q7aGl0cykKJiM0MzsJCWxhdGVuY3lfbnMgPSByZXMtJmd0O2R1cmF0aW9uX25zIC8gKGRvdWJsZSlyZXMtJmd0O2hpdHM7CiYjNDM7CiYjNDM7CXByaW50ZigmIzM0O0l0ZXIgJTNkICglNy4zbGZ1cyk6IGxhdGVuY3kgJTguM2xmIG5zL29wICglbGQgYWxsb2NhdGlvbnMpXG4mIzM0OywKJiM0MzsJICAgICAgIGl0ZXIsIChkZWx0YV9ucyAtIDEwMDAwMDAwMDApIC8gMTAwMC4wLCBsYXRlbmN5X25zLCByZXMtJmd0O2hpdHMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCByZXBvcnRfZmluYWwoc3RydWN0IGJlbmNoX3JlcyByZXNbXSwgaW50IHJlc19jbnQpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGR1cmF0aW9uX25zID0gMDsKJiM0MzsJbG9uZyBoaXRzID0gMDsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyByZXNfY250OyBpJiM0MzsmIzQzOykgewomIzQzOwkJZHVyYXRpb25fbnMgJiM0Mzs9IHJlc1tpXS5kdXJhdGlvbl9uczsKJiM0MzsJCWhpdHMgJiM0Mzs9IHJlc1tpXS5oaXRzOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghaGl0cyB8fCAhcmVzX2NudCkgewomIzQzOwkJcHJpbnRmKCYjMzQ7U3VtbWFyeTogbm8gcnVucyBtZWFzdXJlZFxuJiMzNDspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXByaW50ZigmIzM0O1N1bW1hcnk6ICUuM2xmIG5zL29wLCAlLjBsZiBpbnZvY2F0aW9ucyBmb3IgJXUgYWxsb2NhdGlvbnMvaW52b2NhdGlvbilcbiYjMzQ7LAomIzQzOwkgICAgICAgZHVyYXRpb25fbnMgLyAoZG91YmxlKWhpdHMsIGhpdHMgLyAoZG91YmxlKXJlc19jbnQsCiYjNDM7CSAgICAgICBjdHguc2tlbC0mZ3Q7YnNzLSZndDtiZW5jaF9uYWxsb2NzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2xpYmFyZW5hX21hbGxvYyA9IHsKJiM0MzsJLm5hbWUgPSAmIzM0O2xpYmFyZW5hLW1hbGxvYyYjMzQ7LAomIzQzOwkuYXJncCA9ICZhbXA7YmVuY2hfbGliYXJlbmFfYXJncCwKJiM0MzsJLnZhbGlkYXRlID0gdmFsaWRhdGUsCiYjNDM7CS5zZXR1cCA9IG1hbGxvY19zZXR1cCwKJiM0MzsJLnByb2R1Y2VyX3RocmVhZCA9IHByb2R1Y2VyLAomIzQzOwkubWVhc3VyZSA9IG1lYXN1cmUsCiYjNDM7CS5yZXBvcnRfcHJvZ3Jlc3MgPSByZXBvcnRfcHJvZ3Jlc3MsCiYjNDM7CS5yZXBvcnRfZmluYWwgPSByZXBvcnRfZmluYWwsCiYjNDM7fTsKJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfbGliYXJlbmFfY2FsbG9jID0gewomIzQzOwkubmFtZSA9ICYjMzQ7bGliYXJlbmEtY2FsbG9jJiMzNDssCiYjNDM7CS5hcmdwID0gJmFtcDtiZW5jaF9saWJhcmVuYV9hcmdwLAomIzQzOwkudmFsaWRhdGUgPSB2YWxpZGF0ZSwKJiM0MzsJLnNldHVwID0gY2FsbG9jX3NldHVwLAomIzQzOwkucHJvZHVjZXJfdGhyZWFkID0gcHJvZHVjZXIsCiYjNDM7CS5tZWFzdXJlID0gbWVhc3VyZSwKJiM0MzsJLnJlcG9ydF9wcm9ncmVzcyA9IHJlcG9ydF9wcm9ncmVzcywKJiM0MzsJLnJlcG9ydF9maW5hbCA9IHJlcG9ydF9maW5hbCwKJiM0Mzt9OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9ydW5fYmVuY2hfbGliYXJlbmEuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL3J1bl9iZW5jaF9saWJhcmVuYS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwLi4xMGFmZTRkNTJlYmY3Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9ydW5fYmVuY2hfbGliYXJlbmEuc2gKQEAgLTAsMCAmIzQzOzEsMzEgQEAKJiM0MzsjIS9iaW4vYmFzaAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsKJiM0Mztzb3VyY2UgLi9iZW5jaHMvcnVuX2NvbW1vbi5zaAomIzQzOwomIzQzO3NldCAtZXVmbyBwaXBlZmFpbAomIzQzOwomIzQzO1JVTl9CRU5DSD0mIzM0Oy4vYmVuY2ggLWQzIC1xJiMzNDsKJiM0MzsKJiM0MztzdW1tYXJpemVfbGliYXJlbmEoKQomIzQzO3sKJiM0MzsJbG9jYWwgYmVuY2g9JiMzNDskMSYjMzQ7CiYjNDM7CWxvY2FsIHN1bW1hcnkKJiM0MzsKJiM0MzsJc3VtbWFyeT0kKHByaW50ZiAmIzM5OyVzXG4mIzM5OyAmIzM0OyQyJiMzNDsgfCB0YWlsIC1uMSkKJiM0MzsJc3VtbWFyeT0ke3N1bW1hcnkjU3VtbWFyeTogfQomIzQzOwlwcmludGYgJiMzNDslLTIwcyAlc1xuJiMzNDsgJiMzNDskYmVuY2gmIzM0OyAmIzM0OyRzdW1tYXJ5JiMzNDsKJiM0Mzt9CiYjNDM7CiYjNDM7aGVhZGVyICYjMzQ7bGliYXJlbmEgc2VxdWVudGlhbCBtYWxsb2NcbiYjMzQ7CiYjNDM7CiYjNDM7Zm9yIHNpemUgaW4gMTYgNjQgMjU2IDEwMjQgNDA5NjsgZG8KJiM0MztzdWJ0aXRsZSAmIzM0O2FsbG9jYXRpb24gc2l6ZTogJHNpemUmIzM0OwomIzQzO3ByaW50ZiAmIzM0O1x0LS0tLS0tLS0tLS0tLS0tLS0tLVxuJiMzNDsKJiM0MzsJZm9yIG5hbGxvY3MgaW4gMTAgNTAgMTAwIDUwMCAxMDAwIDUwMDAgMTAwMDA7IGRvCiYjNDM7CQlzdW1tYXJpemVfbGliYXJlbmEgJiMzNDttYWxsb2M6JiMzNDsgXAomIzQzOwkJCSYjMzQ7JCgkUlVOX0JFTkNIIC0tYWxsb2Nfc2l6ZSAmIzM0OyRzaXplJiMzNDsgLS1uYWxsb2NzICYjMzQ7JG5hbGxvY3MmIzM0OyBsaWJhcmVuYS1tYWxsb2MpJiMzNDsKJiM0MzsJCXN1bW1hcml6ZV9saWJhcmVuYSAmIzM0O2NhbGxvYzomIzM0OyBcCiYjNDM7CQkJJiMzNDskKCRSVU5fQkVOQ0ggLS1hbGxvY19zaXplICYjMzQ7JHNpemUmIzM0OyAtLW5hbGxvY3MgJiMzNDskbmFsbG9jcyYjMzQ7IGxpYmFyZW5hLWNhbGxvYykmIzM0OwomIzQzOwlkb25lCiYjNDM7ZG9uZQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL01ha2VmaWxlCmluZGV4IDVlMmFiNTE0ODA1ZTQuLjkxMTY0ZDQzYmQ2MTIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvTWFrZWZpbGUKQEAgLTI3LDEwICYjNDM7MjcsMTcgQEAgQlBGRElSPSQoYWJzcGF0aCAkKExJQkFSRU5BKS8uLikKIElOQ0xVREVfRElSID89ICQoQlBGRElSKS90b29scy9pbmNsdWRlCiBMSUJCUEZfSU5DTFVERSA/PSAkKElOQ0xVREVfRElSKQogCi0jIFNjYW4gc3JjLyBhbmQgc2VsZnRlc3RzLyB0byBnZW5lcmF0ZSB0aGUgZmluYWwgYmluYXJpZXMKLUxJQkFSRU5BX1NPVVJDRVMgPSAkKHdpbGRjYXJkICQoTElCQVJFTkEpL3NyYy8qLmJwZi5jKSAkKHdpbGRjYXJkICQoTElCQVJFTkEpL3NlbGZ0ZXN0cy8qLmJwZi5jKQotTElCQVJFTkFfT0JKRUNUUyA9ICQobm90ZGlyICQoTElCQVJFTkFfU09VUkNFUzouYnBmLmM9LmJwZi5vKSkKLUxJQkFSRU5BX09CSkVDVFNfQVNBTiA9ICQobm90ZGlyICQoTElCQVJFTkFfU09VUkNFUzouYnBmLmM9X2FzYW4uYnBmLm8pKQomIzQzOyMgQnVpbGQgc2VsZnRlc3RzIGFuZCBiZW5jaG1hcmtzIGludG8gc2VwYXJhdGUgQlBGIG9iamVjdHMgYW5kIHNrZWxldG9ucy4KJiM0MztMSUJBUkVOQV9DT1JFX1NPVVJDRVMgPSAkKHdpbGRjYXJkICQoTElCQVJFTkEpL3NyYy8qLmJwZi5jKQomIzQzO0xJQkFSRU5BX1RFU1RfU09VUkNFUyA9ICQod2lsZGNhcmQgJChMSUJBUkVOQSkvc2VsZnRlc3RzLyouYnBmLmMpCiYjNDM7TElCQVJFTkFfQkVOQ0hfU09VUkNFUyA9ICQod2lsZGNhcmQgJChMSUJBUkVOQSkvYmVuY2hzLyouYnBmLmMpCiYjNDM7CiYjNDM7TElCQVJFTkFfT0JKRUNUUyA9ICQobm90ZGlyICQoTElCQVJFTkFfQ09SRV9TT1VSQ0VTOi5icGYuYz0uYnBmLm8pIFwKJiM0MzsJCQkgICAgICAgJChMSUJBUkVOQV9URVNUX1NPVVJDRVM6LmJwZi5jPS5icGYubykpCiYjNDM7TElCQVJFTkFfT0JKRUNUU19BU0FOID0gJChub3RkaXIgJChMSUJBUkVOQV9DT1JFX1NPVVJDRVM6LmJwZi5jPV9hc2FuLmJwZi5vKSBcCiYjNDM7CQkJCSAgICAkKExJQkFSRU5BX1RFU1RfU09VUkNFUzouYnBmLmM9X2FzYW4uYnBmLm8pKQomIzQzO0xJQkFSRU5BX0JFTkNIX09CSkVDVFMgPSAkKG5vdGRpciAkKExJQkFSRU5BX0NPUkVfU09VUkNFUzouYnBmLmM9LmJwZi5vKSBcCiYjNDM7CQkJCSAgICAgJChMSUJBUkVOQV9CRU5DSF9TT1VSQ0VTOi5icGYuYz0uYnBmLm8pKQogCiBJTkNMVURFUyA9IC1JJChMSUJBUkVOQSkvaW5jbHVkZSAtSSQoQlBGRElSKQogaWZuZXEgKCQoSU5DTFVERV9ESVIpLCkKQEAgLTUzLDE3ICYjNDM7NjAsMjUgQEAgb3ZlcnJpZGUgQlBGX0NGTEFHUyAmIzQzOz0gLU8yIC1nCiBvdmVycmlkZSBCUEZfQ0ZMQUdTICYjNDM7PSAtV25vLWluY29tcGF0aWJsZS1wb2ludGVyLXR5cGVzLWRpc2NhcmRzLXF1YWxpZmllcnMKICMgUmVxdWlyZWQgZm9yIHN1cHByZXNzaW5nIGhhcm1sZXNzIHZtbGludXguaC1yZWxhdGVkIHdhcm5pbmdzLgogb3ZlcnJpZGUgQlBGX0NGTEFHUyAmIzQzOz0gLVduby1taXNzaW5nLWRlY2xhcmF0aW9ucwomIzQzO292ZXJyaWRlIEJQRl9DRkxBR1MgJiM0Mzs9IC1mbm8tc3RyaWN0LWFsaWFzaW5nCiBvdmVycmlkZSBCUEZfQ0ZMQUdTICYjNDM7PSAkKElOQ0xVREVTKQogCiBDRkxBR1MgPSAtTzIgLW5vLXBpZQogQ0ZMQUdTICYjNDM7PSAkKElOQ0xVREVTKQogCi12cGF0aCAlLmJwZi5jICQoTElCQVJFTkEpL3NyYyAkKExJQkFSRU5BKS9zZWxmdGVzdHMKLXZwYXRoICUuYyAkKExJQkFSRU5BKS9zcmMgJChMSUJBUkVOQSkvc2VsZnRlc3RzCiYjNDM7dnBhdGggJS5icGYuYyAkKExJQkFSRU5BKS9zcmMgJChMSUJBUkVOQSkvc2VsZnRlc3RzICQoTElCQVJFTkEpL2JlbmNocwomIzQzO3ZwYXRoICUuYyAkKExJQkFSRU5BKS9zcmMgJChMSUJBUkVOQSkvc2VsZnRlc3RzICQoTElCQVJFTkEpL2JlbmNocwogCiBza2VsZXRvbnM6IGxpYmFyZW5hLnNrZWwuaCBsaWJhcmVuYV9hc2FuLnNrZWwuaAogLlBIT05ZOiBza2VsZXRvbnMKIAomIzQzO2JlbmNobWFya3M6IGxpYmFyZW5hX2JlbmNoLnNrZWwuaAomIzQzOy5QSE9OWTogYmVuY2htYXJrcwomIzQzOwomIzQzO2xpYmFyZW5hX2JlbmNoLnNrZWwuaDogbGliYXJlbmFfYmVuY2guYnBmLm8KJiM0MzsJJChjYWxsIG1zZyxHRU4tU0tFTCxsaWJhcmVuYSwkQCkKJiM0MzsJJChRKSQoQlBGVE9PTCkgZ2VuIHNrZWxldG9uICQmbHQ7IG5hbWUgJiMzNDtsaWJhcmVuYV9iZW5jaCYjMzQ7ICZndDsgJEAKJiM0MzsKIGxpYmFyZW5hX2FzYW4uc2tlbC5oOiBsaWJhcmVuYV9hc2FuLmJwZi5vCiAJJChjYWxsIG1zZyxHRU4tU0tFTCxsaWJhcmVuYSwkQCkKIAkkKFEpJChCUEZUT09MKSBnZW4gc2tlbGV0b24gJCZsdDsgbmFtZSAmIzM0O2xpYmFyZW5hX2FzYW4mIzM0OyAmZ3Q7ICRACkBAIC04MCw2ICYjNDM7OTUsMTAgQEAgbGliYXJlbmEuYnBmLm86ICQoTElCQVJFTkFfT0JKRUNUUykKIAkkKGNhbGwgbXNnLEdFTi1PQkosbGliYXJlbmEsJEApCiAJJChRKSQoQlBGVE9PTCkgZ2VuIG9iamVjdCAkQCAkXgogCiYjNDM7bGliYXJlbmFfYmVuY2guYnBmLm86ICQoTElCQVJFTkFfQkVOQ0hfT0JKRUNUUykKJiM0MzsJJChjYWxsIG1zZyxHRU4tT0JKLGxpYmFyZW5hLCRAKQomIzQzOwkkKFEpJChCUEZUT09MKSBnZW4gb2JqZWN0ICRAICReCiYjNDM7CiAlX2FzYW4uYnBmLm86ICUuYnBmLmMKIAkkKGNhbGwgbXNnLENMTkctQlBGLGxpYmFyZW5hLCRAKQogCSQoUSkkKENMQU5HKSAkKEJQRl9DRkxBR1MpICQoQVNBTl9GTEFHUykgLURCUEZfQVJFTkFfQVNBTiAkKEJQRl9UQVJHRVRfRU5ESUFOKSAtYyAkJmx0OyAtbyAkQApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2JlbmNocy9iZW5jaF9tYWxsb2MuYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvYmVuY2hzL2JlbmNoX21hbGxvYy5icGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5lMDYzOTdkYzlhNDBkCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2JlbmNocy9iZW5jaF9tYWxsb2MuYnBmLmMKQEAgLTAsMCAmIzQzOzEsNTEgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTEdQTC0yLjEgT1IgQlNELTItQ2xhdXNlCiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqLwomIzQzOyNpbmNsdWRlICZsdDtsaWJhcmVuYS9jb21tb24uaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGliYXJlbmEvYXNhbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaWJhcmVuYS9idWRkeS5oJmd0OwomIzQzOwomIzQzO3UzMiBiZW5jaF9hbGxvY19zaXplOwomIzQzO3UzMiBiZW5jaF9uYWxsb2NzOwomIzQzO2xvbmcgYmVuY2hfaGl0czsKJiM0Mztsb25nIGJlbmNoX2R1cmF0aW9uX25zOwomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztpbnQgYmVuY2hfbWFsbG9jKHZvaWQpCiYjNDM7ewomIzQzOwl2b2lkIF9fYXJlbmEgKm1lbTsKJiM0MzsJdTY0IHN0YXJ0X25zOwomIzQzOwl1MzIgaTsKJiM0MzsKJiM0MzsJc3RhcnRfbnMgPSBicGZfa3RpbWVfZ2V0X25zKCk7CiYjNDM7CWZvciAoaSA9IHplcm87IGkgJmx0OyBiZW5jaF9uYWxsb2NzICZhbXA7JmFtcDsgY2FuX2xvb3A7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQltZW0gPSBhcmVuYV9tYWxsb2MoYmVuY2hfYWxsb2Nfc2l6ZSk7CiYjNDM7CQlpZiAoIW1lbSkKJiM0MzsJCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOwlfX3N5bmNfYWRkX2FuZF9mZXRjaCgmYW1wO2JlbmNoX2R1cmF0aW9uX25zLAomIzQzOwkJCSAgICAgYnBmX2t0aW1lX2dldF9ucygpIC0gc3RhcnRfbnMpOwomIzQzOwlfX3N5bmNfYWRkX2FuZF9mZXRjaCgmYW1wO2JlbmNoX2hpdHMsIGkpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO2ludCBiZW5jaF9jYWxsb2Modm9pZCkKJiM0Mzt7CiYjNDM7CXZvaWQgX19hcmVuYSAqbWVtOwomIzQzOwl1NjQgc3RhcnRfbnM7CiYjNDM7CXUzMiBpOwomIzQzOwomIzQzOwlzdGFydF9ucyA9IGJwZl9rdGltZV9nZXRfbnMoKTsKJiM0MzsJZm9yIChpID0gemVybzsgaSAmbHQ7IGJlbmNoX25hbGxvY3MgJmFtcDsmYW1wOyBjYW5fbG9vcDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCW1lbSA9IGFyZW5hX2NhbGxvYygxLCBiZW5jaF9hbGxvY19zaXplKTsKJiM0MzsJCWlmICghbWVtKQomIzQzOwkJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CV9fc3luY19hZGRfYW5kX2ZldGNoKCZhbXA7YmVuY2hfZHVyYXRpb25fbnMsCiYjNDM7CQkJICAgICBicGZfa3RpbWVfZ2V0X25zKCkgLSBzdGFydF9ucyk7CiYjNDM7CV9fc3luY19hZGRfYW5kX2ZldGNoKCZhbXA7YmVuY2hfaGl0cywgaSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9zcGluX2xvY2suaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9zcGluX2xvY2suaAppbmRleCBhZTZiNzJkMTViYjY3Li44NzJmYTIwZjI5YTU5IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXJlbmFfc3Bpbl9sb2NrLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX3NwaW5fbG9jay5oCkBAIC0xLDQgJiM0MzsxLDQgQEAKLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgQlNELTItQ2xhdXNlCiAvKiBDb3B5cmlnaHQgKGMpIDIwMjUgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovCiAjaWZuZGVmIEJQRl9BUkVOQV9TUElOX0xPQ0tfSAogI2RlZmluZSBCUEZfQVJFTkFfU1BJTl9MT0NLX0gKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hdG9taWMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hdG9taWMuaAppbmRleCA0M2MzMDZlMTdmMTk4Li42NTU4MmIyMDEwYWQ0IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXRvbWljLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2F0b21pYy5oCkBAIC0xLDQgJiM0MzsxLDQgQEAKLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgQlNELTItQ2xhdXNlCiAvKiBDb3B5cmlnaHQgKGMpIDIwMjUgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovCiAjaWZuZGVmIEJQRl9BVE9NSUNfSAogI2RlZmluZSBCUEZfQVRPTUlDX0gKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9tYXlfZ290by5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX21heV9nb3RvLmgKaW5kZXggOWJhOTA2ODlkNmJhMi4uYjMyYTQyMGQ0ZTFhZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX21heV9nb3RvLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX21heV9nb3RvLmgKQEAgLTEsMyAmIzQzOzEsNCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBMR1BMLTIuMSBPUiBCU0QtMi1DbGF1c2UKICNwcmFnbWEgb25jZQogCiAvKgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvYml0bWFwLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9iaXRtYXAuaAppbmRleCBlMjQzMWVhNmZkZDY4Li4xNjNlMmI4M2Q5NDMxIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9iaXRtYXAuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9iaXRtYXAuaApAQCAtMSw1ICYjNDM7MSw4IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IExHUEwtMi4xIE9SIEJTRC0yLUNsYXVzZQogI3ByYWdtYSBvbmNlCiAKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmX2F0b21pYy5oJmd0OwomIzQzOwogI2RlZmluZSBCSVRTX1BFUl9CWVRFCQk4CiAjZGVmaW5lIEJZVEVTX1RPX0JJVFMobmIpCSgobmIpICogQklUU19QRVJfQllURSkKIApAQCAtMTUsMTEgJiM0MzsxOCw4IEBAIHN0cnVjdCBhcmVuYV9iaXRtYXAgewogc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICpibXBfYWxsb2Moc2l6ZV90IGJpdHMpOwogdm9pZCBibXBfZnJlZShzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcCk7CiAKLXZvaWQgX19ibXBfc2V0X2JpdCh1MzIgYml0LCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcCk7Ci12b2lkIF9fYm1wX2NsZWFyX2JpdCh1MzIgYml0LCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcCk7CiB2b2lkIGJtcF9zZXRfYml0KHUzMiBiaXQsIHN0cnVjdCBhcmVuYV9iaXRtYXAgX19hcmVuYSAqYm1wKTsKIHZvaWQgYm1wX2NsZWFyX2JpdCh1MzIgYml0LCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcCk7Ci1ib29sIGJtcF90ZXN0X2JpdCh1MzIgYml0LCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcCk7CiBib29sIGJtcF90ZXN0X2FuZF9jbGVhcl9iaXQodTMyIGJpdCwgc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICpibXApOwogYm9vbCBibXBfdGVzdF9hbmRfc2V0X2JpdCh1MzIgYml0LCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcCk7CiAKQEAgLTMyLDMgJiM0MzszMiwyNyBAQCB2b2lkIGJtcF9jb3B5KHNpemVfdCBiaXRzLCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmRzdCwgc3RydWN0IGFyZW5hX2JpdG1hcAogYm9vbCBibXBfaW50ZXJzZWN0cyhzaXplX3QgYml0cywgc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICphcmcxLCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmFyZzIpOwogYm9vbCBibXBfc3Vic2V0KHNpemVfdCBiaXRzLCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJpZywgc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICpzbWFsbCk7CiB2b2lkIGJtcF9wcmludChzaXplX3QgYml0cywgc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICpibXApOwomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUKJiM0Mzt2b2lkIF9fYm1wX3NldF9iaXQodTMyIGJpdCwgc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICpibXApCiYjNDM7ewomIzQzOwl2b2xhdGlsZSB1NjQgX19hcmVuYSAqd29yZCA9ICZhbXA7Ym1wLSZndDtiaXRzW0JJVF9XT1JEKGJpdCldOwomIzQzOwomIzQzOwkqd29yZCB8PSBCSVRfTUFTSyhiaXQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lCiYjNDM7dm9pZCBfX2JtcF9jbGVhcl9iaXQodTMyIGJpdCwgc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICpibXApCiYjNDM7ewomIzQzOwl2b2xhdGlsZSB1NjQgX19hcmVuYSAqd29yZCA9ICZhbXA7Ym1wLSZndDtiaXRzW0JJVF9XT1JEKGJpdCldOwomIzQzOwomIzQzOwkqd29yZCAmYW1wOz0gfkJJVF9NQVNLKGJpdCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUKJiM0Mztib29sIGJtcF90ZXN0X2JpdCh1MzIgYml0LCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcCkKJiM0Mzt7CiYjNDM7CXU2NCB3b3JkID0gUkVBRF9PTkNFKGJtcC0mZ3Q7Yml0c1tCSVRfV09SRChiaXQpXSk7CiYjNDM7CiYjNDM7CXJldHVybiB3b3JkICZhbXA7IEJJVF9NQVNLKGJpdCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvY29tbW9uLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9jb21tb24uaAppbmRleCA5MzFhY2U5YTQ5ZTJiLi5hNjIyMDM1NWE2OTc1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9jb21tb24uaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9jb21tb24uaApAQCAtNDksNiAmIzQzOzQ5LDcgQEAgZXh0ZXJuIHZvbGF0aWxlIHU2NCBhc2FuX3Zpb2xhdGVkOwogaW50IGFyZW5hX2ZscyhfX3U2NCB3b3JkKTsKIAogdm9pZCBfX2FyZW5hICphcmVuYV9tYWxsb2Moc2l6ZV90IHNpemUpOwomIzQzO3ZvaWQgX19hcmVuYSAqYXJlbmFfY2FsbG9jKHNpemVfdCBuY291bnQsIHNpemVfdCBzaXplKTsKIHZvaWQgYXJlbmFfZnJlZSh2b2lkIF9fYXJlbmEgKnB0cik7CiAKIC8qCkBAIC02MSw2ICYjNDM7NjIsNzYgQEAgdm9pZCBhcmVuYV9mcmVlKHZvaWQgX19hcmVuYSAqcHRyKTsKICAqLwogI2RlZmluZSBhcmVuYV9zdWJwcm9nX2luaXQoKSBkbyB7IGFzbSB2b2xhdGlsZSAoJiMzNDsmIzM0OyA6OiAmIzM0O3ImIzM0OygmYW1wO2FyZW5hKSk7IH0gd2hpbGUgKDApCiAKJiM0MzsvKgomIzQzOyAqIEJQRiBkb2VzIG5vdCBjdXJyZW50bHkgc3VwcG9ydCB0aGUgbWVtc2V0IGludHJpbnNpY3MuIGZvciBsYXJnZQomIzQzOyAqIHNlcXVlbnRpYWwgY29waWVzLCBvciBhc3NpZ25tZW50cyBvZiBsYXJnZSBkYXRhIHN0cnVjdHVyZXMsCiYjNDM7ICogdGhlIGZyb250ZW5kIHdpbGwgZ2VuZXJhdGUgYW4gaW50cmluc2ljIHRoYXQgY2F1c2VzIHRoZSBCUEYKJiM0MzsgKiBiYWNrZW5kIHRvIGV4aXQgZHVlIHRvIGEgbWlzc2luZyBpbXBsZW1lbnRhdGlvbi4gUHJvdmlkZQomIzQzOyAqIGltcGxlbWVudGF0aW9ucyBmb3IgdGhlIGludHJpbnNpYy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGludCBhcmVuYV9tZW1zZXQoczggX19hcmVuYSAqZHN0LCBzOCB2YWwsIHNpemVfdCBzaXplKQomIzQzO3sKJiM0MzsJc2l6ZV90IGhlYWRhbGlnbjsKJiM0MzsJc2l6ZV90IHRhaWxhbGlnbjsKJiM0MzsJdTggdXZhbCA9ICh1OCl2YWw7CiYjNDM7CXNpemVfdCB2YWw2NDsKJiM0MzsJc2l6ZV90IGk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIENhbGN1bGF0ZSBob3cgbWFueSBieXRlcyB0byB0aGUgbmV4dCB3b3JkLWFsaWduZWQgb25lLgomIzQzOwkgKiBXZSBnZXQgdGhpcyBieSB0cnVuY2F0aW5nIHRoZSAycyBjb21wbGVtZW50IG9mIHRoZQomIzQzOwkgKiBwb2ludGVyIHRvIHRoZSBsYXN0IDMgYml0cy4gSW50dWl0aXZlbHksIHNpbmNlCiYjNDM7CSAqCiYjNDM7CSAqIFRoZSBOIExTQnMgb2YgZHN0IGFuZCAtZHN0IGFkZCB0byAxICZsdDsmbHQ7IE4sIHdoaWNoCiYjNDM7CSAqIGlzIHdoeSBkc3QgJiM0MzsgKC1kc3QpID0gMHgwVUxMIHRocm91Z2ggb3ZlcmZsb3cuIFNvIHRoZQomIzQzOwkgKiBsYXN0IE4gPSAzIGJpdHMgb2YgdGhlIG5lZ2F0aXZlIGFyZSB0aGUgbnVtYmVyIG9mCiYjNDM7CSAqIGJ5dGVzIHRvIGFsaWduIGRzdCBvbiB0aGUgbGFzdCAzIGJpdHMuCiYjNDM7CSAqCiYjNDM7CSAqLwomIzQzOwloZWFkYWxpZ24gPSAtKHU2NClkc3QgJmFtcDsgKHNpemVvZih1NjQpIC0gMSk7CiYjNDM7CWlmICghaGVhZGFsaWduIHx8IHNpemUgJmx0OyBoZWFkYWxpZ24pCiYjNDM7CQlnb3RvIHB0cmFsaWduZWQ7CiYjNDM7CiYjNDM7CWZvciAoaSA9IHplcm87IGkgJmx0OyBoZWFkYWxpZ24gJmFtcDsmYW1wOyBjYW5fbG9vcDsgaSYjNDM7JiM0MzspCiYjNDM7CQlkc3RbaV0gPSB1dmFsOwomIzQzOwomIzQzOwlkc3QgJiM0Mzs9IGhlYWRhbGlnbjsKJiM0MzsJc2l6ZSAtPSBoZWFkYWxpZ247CiYjNDM7CiYjNDM7cHRyYWxpZ25lZDoKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogTWFrZSBhIHdvcmQgd2l0aCBhbGwgYnl0ZXMgZXF1YWwgdG8gdGhlIGJ5dGUgd2UgYXJlIHNldHRpbmcuCiYjNDM7CSAqIFNpbmNlIDEgYnl0ZSAtJmd0OyAyIGhleCBkaWdpdHMuCiYjNDM7CSAqCiYjNDM7CSAqIFNoaWZ0aW5nIHRoZSB2YWx1ZSBieSBhIDAgYnl0ZXMgaXMgZXF1YWwgdG8gbXVsdGlwbGljYXRpb24gYnkgMHgwMQomIzQzOwkgKiBTaGlmdGluZyBieSAxIGJ5dGVzIGlzIGVxdWFsIHRvIG11bHRpcGxpY2F0aW9uIGJ5IDB4MDEgJmx0OyZsdDsgOCwKJiM0MzsJICogLi4uCiYjNDM7CSAqIFNoaWZ0aW5nIGJ5IDcgYnl0ZXMgaXMgZXF1YWwgdG8gbXVsdGlwbGljYXRpb24gYnkgMHgwMSAmbHQ7Jmx0OyA1Ni4KJiM0MzsJICoKJiM0MzsJICogRW5kIG9wZXJhdGlvbiB0byByZXBsaWNhdGUgdGhlIGJ5dGUgaW50byBhbGwgdGhlIGJ5dGVzIG9mIGEgd29yZAomIzQzOwkgKiBpcyAoc2luY2UgYSB8IGIgPSBhICYjNDM7IGIgd2hlbiBhICZhbXA7IGIgPT0gMCk6CiYjNDM7CSAqCiYjNDM7CSAqIHZhbCAmIzQzOyB2YWwgKiAoMVVMICZsdDsmbHQ7IDgpICYjNDM7IHZhbCAqICgxVUwgJmx0OyZsdDsgMTYpICYjNDM7IC4uICYjNDM7IHZhbCAqICgxVUwgJmx0OyZsdDsgNTYpCiYjNDM7CSAqID0gdmFsICogKDFVTCAmbHQ7Jmx0OyA1NiAmIzQzOyAxVUwgJmx0OyZsdDsgNDggJiM0MzsgLi4uICYjNDM7IDFVTCAmbHQ7Jmx0OyAwKQomIzQzOwkgKiA9IHZhbCAqICgweDAxVUwgJmx0OyZsdDsgNTYgfCAweDAxVUwgJmx0OyZsdDsgNDggJiM0MzsgLi4uICYjNDM7IDFVTCAmbHQ7Jmx0OyAwKQomIzQzOwkgKiA9IHZhbCAqIDB4MDEwMSAwMTAxIDAxMDEgMDEwMQomIzQzOwkgKi8KJiM0MzsJdmFsNjQgPSAodTgpdmFsICogMHgwMTAxMDEwMTAxMDEwMTAxVUxMOwomIzQzOwomIzQzOwkvKiBQb2ludGVyIGlzIG5vdyBhbGlnbmVkLCB1c2Ugd29yZC1hbGlnbmVkIGFzc2lnbm1lbnRzLiAqLwomIzQzOwlmb3IgKGkgPSB6ZXJvOyBpICZsdDsgc2l6ZSAvIHNpemVvZih1NjQpICZhbXA7JmFtcDsgY2FuX2xvb3A7IGkmIzQzOyYjNDM7KQomIzQzOwkJKCh1NjQgX19hcmVuYSAqKWRzdClbaV0gPSB2YWw2NDsKJiM0MzsKJiM0MzsJLyogR28gYmFjayB0byBieXRlLWFsaWduZWQgZm9yIHRoZSB0YWlsLiAqLwomIzQzOwl0YWlsYWxpZ24gPSBzaXplICUgc2l6ZW9mKHU2NCk7CiYjNDM7CWRzdCAmIzQzOz0gc2l6ZSAtIHRhaWxhbGlnbjsKJiM0MzsJZm9yIChpID0gemVybzsgaSAmbHQ7IHRhaWxhbGlnbiAmYW1wOyZhbXA7IGNhbl9sb29wOyBpJiM0MzsmIzQzOykKJiM0MzsJCWRzdFtpXSA9IHV2YWw7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKICNlbHNlIC8qICEgX19CUEZfXyAqLwogCiAjaW5jbHVkZSAmbHQ7c3RkaW50LmgmZ3Q7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYml0bWFwLmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2JpdG1hcC5icGYuYwppbmRleCA3NjMxOWE1MjlmMDJiLi5lNjZiM2EyNmNhM2Q2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYml0bWFwLmJwZi5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9iaXRtYXAuYnBmLmMKQEAgLTEsMyAmIzQzOzEsNiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBMR1BMLTIuMSBPUiBCU0QtMi1DbGF1c2UKJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovCiYjNDM7CiAjaW5jbHVkZSAmbHQ7bGliYXJlbmEvY29tbW9uLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDtsaWJhcmVuYS9hc2FuLmgmZ3Q7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmMKaW5kZXggNTEzNWQ1YzcyYTQ2ZC4uZGU2NTZiNjlkMTNhZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYXNhbi5icGYuYwpAQCAtMTAzLDIzICYjNDM7MTAzLDYgQEAgdm9sYXRpbGUgYm9vbCBhc2FuX2luaXRlZCA9IGZhbHNlOwogICovCiB2b2xhdGlsZSBib29sIGFzYW5fcmVwb3J0X29uY2UgPSBmYWxzZTsKIAotLyoKLSAqIEJQRiBkb2VzIG5vdCBjdXJyZW50bHkgc3VwcG9ydCB0aGUgbWVtc2V0L21lbWNweS9tZW1jbXAgaW50cmluc2ljcy4KLSAqIEZvciBsYXJnZSBzZXF1ZW50aWFsIGNvcGllcywgb3IgYXNzaWdubWVudHMgb2YgbGFyZ2UgZGF0YSBzdHJ1Y3R1cmVzLAotICogdGhlIGZyb250ZW5kIHdpbGwgZ2VuZXJhdGUgYW4gaW50cmluc2ljIHRoYXQgY2F1c2VzIHRoZSBCUEYgYmFja2VuZAotICogdG8gZXhpdCBkdWUgdG8gYSBtaXNzaW5nIGltcGxlbWVudGF0aW9uLiBQcm92aWRlIGEgc2ltcGxlIGltcGxlbWVudGF0aW9uCi0gKiBqdXN0IGZvciBtZW1zZXQgdG8gdXNlIGl0IGZvciBwb2lzb25pbmcvdW5wb2lzb25pbmcgdGhlIG1hcC4KLSAqLwotX193ZWFrIGludCBhc2FuX21lbXNldChzOCBfX2FyZW5hICpkc3QsIHM4IHZhbCwgc2l6ZV90IHNpemUpCi17Ci0Jc2l6ZV90IGk7Ci0KLQlmb3IgKGkgPSB6ZXJvOyBpICZsdDsgc2l6ZSAmYW1wOyZhbXA7IGNhbl9sb29wOyBpJiM0MzsmIzQzOykKLQkJZHN0W2ldID0gdmFsOwotCi0JcmV0dXJuIDA7Ci19Ci0KIC8qIFZhbGlkYXRlIGEgMS1ieXRlIGFjY2VzcywgYWx3YXlzIHdpdGhpbiBhIHNpbmdsZSBieXRlLiAqLwogc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIG1lbW9yeV9pc19wb2lzb25lZF8xKHM4IF9fYXJlbmEgKmFkZHIpCiB7CkBAIC00MjIsNyAmIzQzOzQwNSw3IEBAIF9faGlkZGVuIF9fbm9hc2FuIGludCBhc2FuX3BvaXNvbih2b2lkIF9fYXJlbmEgKmFkZHIsIHM4IHZhbCwgc2l6ZV90IHNpemUpCiAJc2hhZG93ID0gbWVtX3RvX3NoYWRvdyhhZGRyKTsKIAlsZW4gPSBzaXplICZndDsmZ3Q7IEFTQU5fU0hBRE9XX1NISUZUOwogCi0JYXNhbl9tZW1zZXQoc2hhZG93LCB2YWwsIGxlbik7CiYjNDM7CWFyZW5hX21lbXNldChzaGFkb3csIHZhbCwgbGVuKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDYzLDcgJiM0Mzs0NDYsNyBAQCBfX2hpZGRlbiBfX25vYXNhbiBpbnQgYXNhbl91bnBvaXNvbih2b2lkIF9fYXJlbmEgKmFkZHIsIHNpemVfdCBzaXplKQogCXNoYWRvdyA9IG1lbV90b19zaGFkb3coYWRkcik7CiAJbGVuID0gc2l6ZSAmZ3Q7Jmd0OyBBU0FOX1NIQURPV19TSElGVDsKIAotCWFzYW5fbWVtc2V0KHNoYWRvdywgMCwgbGVuKTsKJiM0MzsJYXJlbmFfbWVtc2V0KHNoYWRvdywgMCwgbGVuKTsKIAogCS8qCiAJICogSWYgd2UgYXJlIGFsbG9jYXRpbmcgYSBub24tZ3JhbnVsZSBhbGlnbmVkIHJlZ2lvbiwgd2UgbmVlZCB0byBhZGp1c3QKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYml0bWFwLmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9iaXRtYXAuYnBmLmMKaW5kZXggNWZmOGU2ODhkZGM3Ni4uMDM5MGYyMGNlMzY2ZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9iaXRtYXAuYnBmLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9iaXRtYXAuYnBmLmMKQEAgLTM0LDI0ICYjNDM7MzQsNiBAQCB2b2lkIGJtcF9mcmVlKHN0cnVjdCBhcmVuYV9iaXRtYXAgX19hcmVuYSAqYm1wKQogCWFyZW5hX2ZyZWUoYm1wKTsKIH0KIAotX193ZWFrCi12b2lkIF9fYm1wX3NldF9iaXQodTMyIGJpdCwgc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICpibXApCi17Ci0JYm1wLSZndDtiaXRzW0JJVF9XT1JEKGJpdCldIHw9IEJJVF9NQVNLKGJpdCk7Ci19Ci0KLV9fd2Vhawotdm9pZCBfX2JtcF9jbGVhcl9iaXQodTMyIGJpdCwgc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICpibXApCi17Ci0JYm1wLSZndDtiaXRzW0JJVF9XT1JEKGJpdCldICZhbXA7PSB+QklUX01BU0soYml0KTsKLX0KLQotX193ZWFrCi1ib29sIGJtcF90ZXN0X2JpdCh1MzIgYml0LCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcCkKLXsKLQlyZXR1cm4gYm1wLSZndDtiaXRzW0JJVF9XT1JEKGJpdCldICZhbXA7IEJJVF9NQVNLKGJpdCk7Ci19Ci0KIF9fd2VhawogYm9vbCBibXBfdGVzdF9hbmRfY2xlYXJfYml0KHUzMiBiaXQsIHN0cnVjdCBhcmVuYV9iaXRtYXAgX19hcmVuYSAqYm1wKQogewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9idWRkeS5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYnVkZHkuYnBmLmMKaW5kZXggYzY3NGVlNWNmY2MxZC4uMjQ5MGFiMTM5NmRlMCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9idWRkeS5icGYuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2J1ZGR5LmJwZi5jCkBAIC01LDYgJiM0Mzs1LDggQEAKICNpbmNsdWRlICZsdDtsaWJhcmVuYS9hc2FuLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGliYXJlbmEvYnVkZHkuaCZndDsKIAomIzQzOyNpbmNsdWRlICZsdDticGZfYXJlbmFfc3Bpbl9sb2NrLmgmZ3Q7CiYjNDM7CiAvKgogICogQnVkZHkgYWxsb2NhdG9yIGFyZW5hLWJhc2VkIGltcGxlbWVudGF0aW9uLgogICoKQEAgLTQ1LDE1ICYjNDM7NDcsOCBAQCBlbnVtIHsKIAlCVUREWV9DSFVOS19QQUdFUwk9IEJVRERZX0NIVU5LX0JZVEVTIC8gX19QQUdFX1NJWkUKIH07CiAKLXN0YXRpYyBpbmxpbmUgaW50IGJ1ZGR5X2xvY2soc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KQotewotCXJldHVybiBhcmVuYV9zcGluX2xvY2soJmFtcDtidWRkeS0mZ3Q7bG9jayk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBidWRkeV91bmxvY2soc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KQotewotCWFyZW5hX3NwaW5fdW5sb2NrKCZhbXA7YnVkZHktJmd0O2xvY2spOwotfQomIzQzOyNkZWZpbmUgYnVkZHlfbG9jayhidWRkeSwgZmxhZ3MpIChhcmVuYV9zcGluX2xvY2tfaXJxc2F2ZSgmYW1wOyhidWRkeSktJmd0O2xvY2ssIChmbGFncykpKQomIzQzOyNkZWZpbmUgYnVkZHlfdW5sb2NrKGJ1ZGR5LCBmbGFncykgKGFyZW5hX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDsoYnVkZHkpLSZndDtsb2NrLCAoZmxhZ3MpKSkKIAogLyoKICAqIFJlc2VydmUgcGFydCBvZiB0aGUgYXJlbmEgYWRkcmVzcyBzcGFjZSBmb3IgdGhlIGFsbG9jYXRvci4gV2UgdXNlCkBAIC0zODUsNiAmIzQzOzM4MCw3IEBAIHN0YXRpYyBzdHJ1Y3QgYnVkZHlfY2h1bmsgX19hcmVuYSAqYnVkZHlfY2h1bmtfZ2V0KHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSkKIHsKIAl1NjQgb3JkZXIsIG9yZCwgbWluX29yZGVyLCBtYXhfb3JkZXI7CiAJc3RydWN0IGJ1ZGR5X2NodW5rIF9fYXJlbmEgICpjaHVuazsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzaXplX3QgbGVmdDsKIAlpbnQgcG93ZXIyOwogCXU2NCB2YWRkcjsKQEAgLTQxNiw3ICYjNDM7NDEyLDcgQEAgc3RhdGljIHN0cnVjdCBidWRkeV9jaHVuayBfX2FyZW5hICpidWRkeV9jaHVua19nZXQoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KQogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlpZiAoYnVkZHlfbG9jayhidWRkeSkpIHsKJiM0MzsJaWYgKGJ1ZGR5X2xvY2soYnVkZHksIGZsYWdzKSkgewogCQkvKgogCQkgKiBXZSBjYW5ub3QgcmVjbGFpbSB0aGUgdmFkZHIgc3BhY2UsIGJ1dCB0aGF0IGlzIG9rIC0gdGhpcwogCQkgKiBvcGVyYXRpb24gc2hvdWxkIGFsd2F5cyBzdWNjZWVkLiBUaGUgZXJyb3IgcGF0aCBpcyB0byBjYXRjaApAQCAtNTIwLDcgJiM0Mzs1MTYsNyBAQCBzdGF0aWMgc3RydWN0IGJ1ZGR5X2NodW5rIF9fYXJlbmEgKmJ1ZGR5X2NodW5rX2dldChzdHJ1Y3QgYnVkZHkgX19hcmVuYSAqYnVkZHkpCiAJCQlhcmVuYV9zdGRlcnIoCiAJCQkJJiMzNDtjaHVuayBoYXMgc2l6ZSBvZiAweCVseCBieXRlcyAobGVmdCAlbHggYnl0ZXMpXG4mIzM0OywKIAkJCQlzaXplb2YoKmNodW5rKSwgbGVmdCk7Ci0JCQlidWRkeV91bmxvY2soYnVkZHkpOwomIzQzOwkJCWJ1ZGR5X3VubG9jayhidWRkeSwgZmxhZ3MpOwogCiAJCQlyZXR1cm4gTlVMTDsKIAkJfQpAQCAtNTMxLDcgJiM0Mzs1MjcsNyBAQCBzdGF0aWMgc3RydWN0IGJ1ZGR5X2NodW5rIF9fYXJlbmEgKmJ1ZGR5X2NodW5rX2dldChzdHJ1Y3QgYnVkZHkgX19hcmVuYSAqYnVkZHkpCiAJCW9yZGVyID0gKHBvd2VyMiAmZ3Q7PSBCVUREWV9NSU5fQUxMT0NfU0hJRlQpID8gcG93ZXIyIC0gQlVERFlfTUlOX0FMTE9DX1NISUZUIDogMDsKIAogCQlpZiAoaWR4X3NldF9hbGxvY2F0ZWQoY2h1bmssIGlkeCwgdHJ1ZSkpIHsKLQkJCWJ1ZGR5X3VubG9jayhidWRkeSk7CiYjNDM7CQkJYnVkZHlfdW5sb2NrKGJ1ZGR5LCBmbGFncyk7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQogCkBAIC01NDcsNyAmIzQzOzU0Myw3IEBAIHN0YXRpYyBzdHJ1Y3QgYnVkZHlfY2h1bmsgX19hcmVuYSAqYnVkZHlfY2h1bmtfZ2V0KHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSkKIAkJICovCiAJCW1pbl9vcmRlciA9IGxlZnQgPyBvcmRlciAmIzQzOyAxIDogb3JkZXI7CiAJCWlmIChhZGRfbGVmdG92ZXJzX3RvX2ZyZWVsaXN0KGNodW5rLCBpZHgsIG1pbl9vcmRlciwgbWF4X29yZGVyKSkgewotCQkJYnVkZHlfdW5sb2NrKGJ1ZGR5KTsKJiM0MzsJCQlidWRkeV91bmxvY2soYnVkZHksIGZsYWdzKTsKIAkJCXJldHVybiBOVUxMOwogCQl9CiAKQEAgLTU1Niw3ICYjNDM7NTUyLDcgQEAgc3RhdGljIHN0cnVjdCBidWRkeV9jaHVuayBfX2FyZW5hICpidWRkeV9jaHVua19nZXQoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KQogCQltYXhfb3JkZXIgPSBvcmRlcjsKIAl9CiAKLQlidWRkeV91bmxvY2soYnVkZHkpOwomIzQzOwlidWRkeV91bmxvY2soYnVkZHksIGZsYWdzKTsKIAogCXJldHVybiBjaHVuazsKIH0KQEAgLTU2NCw2ICYjNDM7NTYwLDcgQEAgc3RhdGljIHN0cnVjdCBidWRkeV9jaHVuayBfX2FyZW5hICpidWRkeV9jaHVua19nZXQoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KQogX193ZWFrIGludCBidWRkeV9pbml0KHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSkKIHsKIAlzdHJ1Y3QgYnVkZHlfY2h1bmsgX19hcmVuYSAqY2h1bms7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldDsKIAogCWlmICghYXNhbl9yZWFkeSgpKQpAQCAtNTc5LDcgJiM0Mzs1NzYsNyBAQCBfX3dlYWsgaW50IGJ1ZGR5X2luaXQoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KQogCiAJY2h1bmsgPSBidWRkeV9jaHVua19nZXQoYnVkZHkpOwogCi0JaWYgKGJ1ZGR5X2xvY2soYnVkZHkpKSB7CiYjNDM7CWlmIChidWRkeV9sb2NrKGJ1ZGR5LCBmbGFncykpIHsKIAkJYnBmX2FyZW5hX2ZyZWVfcGFnZXMoJmFtcDthcmVuYSwgY2h1bmssIEJVRERZX0NIVU5LX1BBR0VTKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtNTkxLDcgJiM0Mzs1ODgsNyBAQCBfX3dlYWsgaW50IGJ1ZGR5X2luaXQoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KQogCS8qIFB1dCB0aGUgY2h1bmsgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdC4gKi8KIAlidWRkeS0mZ3Q7Zmlyc3RfY2h1bmsgPSBjaHVuazsKIAotCWJ1ZGR5X3VubG9jayhidWRkeSk7CiYjNDM7CWJ1ZGR5X3VubG9jayhidWRkeSwgZmxhZ3MpOwogCiAJcmV0dXJuIGNodW5rID8gMCA6IC1FTk9NRU07CiB9CkBAIC03MzAsOSAmIzQzOzcyNywxMCBAQCBzdGF0aWMgdTY0IGJ1ZGR5X2FsbG9jX2Zyb21fZXhpc3RpbmdfY2h1bmtzKHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSwgaW50IG9yZAogICovCiBzdGF0aWMgdTY0IGJ1ZGR5X2FsbG9jX2Zyb21fbmV3X2NodW5rKHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSwgc3RydWN0IGJ1ZGR5X2NodW5rIF9fYXJlbmEgKmNodW5rLCBpbnQgb3JkZXIpCiB7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTY0IGFkZHJlc3M7CiAKLQlpZiAoYnVkZHlfbG9jayhidWRkeSkpCiYjNDM7CWlmIChidWRkeV9sb2NrKGJ1ZGR5LCBmbGFncykpCiAJCXJldHVybiAodTY0KU5VTEw7CiAKIApAQCAtNzQ1LDcgJiM0Mzs3NDMsNyBAQCBzdGF0aWMgdTY0IGJ1ZGR5X2FsbG9jX2Zyb21fbmV3X2NodW5rKHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSwgc3RydWN0IGJ1ZGR5XwogCiAJYWRkcmVzcyA9IGJ1ZGR5X2NodW5rX2FsbG9jKGJ1ZGR5LSZndDtmaXJzdF9jaHVuaywgb3JkZXIpOwogCi0JYnVkZHlfdW5sb2NrKGJ1ZGR5KTsKJiM0MzsJYnVkZHlfdW5sb2NrKGJ1ZGR5LCBmbGFncyk7CiAKIAlyZXR1cm4gKHU2NClhZGRyZXNzOwogfQpAQCAtNzU0LDYgJiM0Mzs3NTIsNyBAQCB2b2lkIF9fYXJlbmEgKmJ1ZGR5X2FsbG9jKHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSwgc2l6ZV90IHNpemUpCiB7CiAJdm9pZCBfX2FyZW5hICphZGRyZXNzID0gTlVMTDsKIAlzdHJ1Y3QgYnVkZHlfY2h1bmsgX19hcmVuYSAqY2h1bms7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IG9yZGVyOwogCiAJaWYgKCFidWRkeSkKQEAgLTc2NSwxMSAmIzQzOzc2NCwxMSBAQCB2b2lkIF9fYXJlbmEgKmJ1ZGR5X2FsbG9jKHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSwgc2l6ZV90IHNpemUpCiAJCXJldHVybiBOVUxMOwogCX0KIAotCWlmIChidWRkeV9sb2NrKGJ1ZGR5KSkKJiM0MzsJaWYgKGJ1ZGR5X2xvY2soYnVkZHksIGZsYWdzKSkKIAkJcmV0dXJuIE5VTEw7CiAKIAlhZGRyZXNzID0gKHU4IF9fYXJlbmEgKilidWRkeV9hbGxvY19mcm9tX2V4aXN0aW5nX2NodW5rcyhidWRkeSwgb3JkZXIpOwotCWJ1ZGR5X3VubG9jayhidWRkeSk7CiYjNDM7CWJ1ZGR5X3VubG9jayhidWRkeSwgZmxhZ3MpOwogCWlmIChhZGRyZXNzKQogCQlnb3RvIGRvbmU7CiAKQEAgLTg4MCw2ICYjNDM7ODc5LDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgYnVkZHlfZnJlZV91bmxvY2tlZChzdHJ1Y3QgYnVkZHkgX19hcmVuYSAqYnVkZHksIHU2NAogCiBfX3dlYWsgaW50IGJ1ZGR5X2ZyZWUoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5LCB2b2lkIF9fYXJlbmEgKmFkZHIpCiB7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldDsKIAogCWlmICghYnVkZHkpCkBAIC04ODksMTMgJiM0Mzs4ODksMTMgQEAgX193ZWFrIGludCBidWRkeV9mcmVlKHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSwgdm9pZCBfX2FyZW5hICphZGRyKQogCWlmICghYWRkcikKIAkJcmV0dXJuIDA7CiAKLQlyZXQgPSBidWRkeV9sb2NrKGJ1ZGR5KTsKJiM0MzsJcmV0ID0gYnVkZHlfbG9jayhidWRkeSwgZmxhZ3MpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKIAlyZXQgPSBidWRkeV9mcmVlX3VubG9ja2VkKGJ1ZGR5LCAodTY0KWFkZHIpOwogCi0JYnVkZHlfdW5sb2NrKGJ1ZGR5KTsKJiM0MzsJYnVkZHlfdW5sb2NrKGJ1ZGR5LCBmbGFncyk7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9jb21tb24uYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2NvbW1vbi5icGYuYwppbmRleCA1NjlmMGY2NGQ1MThiLi43ODVkNDg3MmNiNDk0IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2NvbW1vbi5icGYuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2NvbW1vbi5icGYuYwpAQCAtMSw1ICYjNDM7MSw3IEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTEdQTC0yLjEgT1IgQlNELTItQ2xhdXNlCiAvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovCiYjNDM7I2luY2x1ZGUgJmx0O2xpbWl0cy5oJmd0OwomIzQzOwogI2luY2x1ZGUgJmx0O2xpYmFyZW5hL2NvbW1vbi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpYmFyZW5hL2FzYW4uaCZndDsKICNpbmNsdWRlICZsdDtsaWJhcmVuYS9idWRkeS5oJmd0OwpAQCAtNDgsMTAgJiM0Mzs1MCwzMyBAQCBfX3dlYWsgdm9pZCBfX2FyZW5hICphcmVuYV9tYWxsb2Moc2l6ZV90IHNpemUpCiAJcmV0dXJuIGJ1ZGR5X2FsbG9jKCZhbXA7YnVkZHksIHNpemUpOwogfQogCiYjNDM7X193ZWFrIHZvaWQgX19hcmVuYSAqYXJlbmFfY2FsbG9jKHNpemVfdCBuY291bnQsIHNpemVfdCBzaXplKQomIzQzO3sKJiM0MzsJdm9pZCBfX2FyZW5hICptZW07CiYjNDM7CXNpemVfdCB0b3RhbDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSWRlYWxseSB3ZSYjMzk7ZCBiZSB1c2luZyBfX2J1aWx0aW5fbXVsX292ZXJmbG93IGhlcmUsCiYjNDM7CSAqIGJ1dCB0aGUgQlBGIGNvbXBpbGVyIGJhY2tlbmQgZG9lc24mIzM5O3QgaW1wbGVtZW50IF9fbXVsdGkzLgomIzQzOwkgKiBUaGVyZSBhcmUgd2F5cyB0byBvcHRpbWl6ZSB0aGUgZGl2aXNpb24gYXdheSBmcm9tIHRoZQomIzQzOwkgKiBvdmVyZmxvdyBjaGVjaywgYnV0IGFueSBjb3N0cyBhcmUgZHdhcmZlZCBieSB0aGUKJiM0MzsJICogYnVkZHlfYWxsb2MoKSBjYWxsLiBLZWVwIGl0IHNpbXBsZSBmb3Igbm93LgomIzQzOwkgKi8KJiM0MzsJaWYgKHVubGlrZWx5KG5jb3VudCAmYW1wOyZhbXA7IHNpemUgJmd0Oz0gVUxMT05HX01BWCAvIG5jb3VudCkpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJdG90YWwgPSBuY291bnQgKiBzaXplOwomIzQzOwomIzQzOwltZW0gPSBidWRkeV9hbGxvYygmYW1wO2J1ZGR5LCB0b3RhbCk7CiYjNDM7CWlmIChsaWtlbHkobWVtKSkKJiM0MzsJCWFyZW5hX21lbXNldChtZW0sIDAsIHRvdGFsKTsKJiM0MzsKJiM0MzsJcmV0dXJuIG1lbTsKJiM0Mzt9CiYjNDM7CiBfX3dlYWsgdm9pZCBhcmVuYV9mcmVlKHZvaWQgX19hcmVuYSAqcHRyKQogewogCWJ1ZGR5X2ZyZWUoJmFtcDtidWRkeSwgcHRyKTsKIH0KIAotCiBjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE5OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjMwCgkJCQkJCQlvdXRwdXQ6IDcxCgkJCQkJCQl0aG91Z2h0czogODI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkJQRiBTZWxmdGVzdHMgUGF0Y2ggQW5hbHlzaXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCBzZXJpZXMgbmVjZXNzaXRhdGVzIGZ1enppbmcuIFRoZSBmaWxlcyBsaXN0ZWQgYXJlIGFsbCBuZXN0bGVkIHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2AuIE15IGltbWVkaWF0ZSByZWFjdGlvbiBpczogKm5vdCBrZXJuZWwgY29yZSBjb2RlKi4gVGhpcyBsb29rcyBsaWtlIEJQRiBzZWxmLXRlc3RzIGFuZCBiZW5jaG1hcmtzLiBJJiMzOTttIHByZXR0eSBjZXJ0YWluIHRoaXMgaXMgdXNlci1zcGFjZSB0b29saW5nIGRlc2lnbmVkIGZvciB0ZXN0aW5nLCBub3Qga2VybmVsIGZ1bmN0aW9uYWxpdHkuCgpUaGUgcHJvbXB0IHN0YXRlcyBjbGVhciBjcml0ZXJpYSBmb3Igd2hlbiBhIHBhdGNoICpkb2VzbiYjMzk7dCogd2FycmFudCBmdXp6aW5nLiBUaGluZ3MgbGlrZSBkb2N1bWVudGF0aW9uIHVwZGF0ZXMsIGxvZ2dpbmcgY2hhbmdlcywgZGVjb3JhdGl2ZSBtb2RpZmljYXRpb25zLCB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzLCBhbmQgc3BlY2lmaWMgZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyBhcmUgYWxsIGV4ZW1wdC4gVGhpcyBzZWVtcyBsaWtlIGl0IHdvdWxkIGJlIHJlbGF0ZWQuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIGJlY2F1c2UgaXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2guIE9rYXksIGEgcXVpY2sgZ2xhbmNlIGF0IHRoZSBmaWxlIGxpc3QgY29uZmlybXMgbXkgaW5pdGlhbCBhc3Nlc3NtZW50LiBBbGwgcGF0aHMgYmVnaW4gd2l0aCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2AuIFRoaXMgcGF0Y2ggKm9ubHkqIHRvdWNoZXMgQlBGIHNlbGYtdGVzdHMgYW5kIHJlbGF0ZWQgYmVuY2htYXJrIGNvZGUuIEl0JiMzOTtzIG5vdCBtb2RpZnlpbmcgYW55IGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiBUaGUgY29udGV4dCBpcyB2ZXJ5IGNsZWFybHkgdXNlci1zcGFjZSB0b29scyBhbmQgQlBGIHByb2dyYW1zIGZvciB0ZXN0aW5nLiBObyBjaGFuY2Ugb2YgYW55IGNvcmUga2VybmVsIHNpZGUgZWZmZWN0cy4KClRoZXJlZm9yZSwgYXBwbHlpbmcgdGhlIHByb3ZpZGVkIGNyaXRlcmlhLCBJJiMzOTttIGNvbmZpZGVudCBpbiBjb25jbHVkaW5nIHRoYXQgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCB3YXJyYW50IGZ1enppbmcgYnkgYSB0b29sIGxpa2Ugc3l6a2FsbGVyLCB3aGljaCB0YXJnZXRzIHRoZSBrZXJuZWwgaXRzZWxmLgoKV29ydGhGdXp6aW5nPWZhbHNlLiBMZXQmIzM5O3MgZ2V0IHRoYXQgbG9nZ2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE5OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBCUEYgc2VsZnRlc3RzIGFuZCBiZW5jaG1hcmtzIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8uIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEJQRiBzZWxmdGVzdHMgYW5kIGJlbmNobWFya3MgdW5kZXIgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTk6NDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE5OjQzOjQzLjE3NjM3MjE4OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNTU2NzM1MDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBCUEYgc2VsZnRlc3RzIGFuZCBiZW5jaG1hcmtzIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8uIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxOTo0Mzo0My4xNzYzNzg1NjlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MjgzMDE2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGQxYTIyODZjYWE5OGZhODY1MDNkM2E5MjBlZWQzY2RmMzVhNjZkODNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTcgMTk6NDM6NDIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXFxuaW5kZXggZDM2NTVhNzA2NDgyNi4uMjJlOWViMTZjMTUxMSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcXG5AQCAtODI2LDE4ICs4MjYsMjIgQEAgTElCQVJFTkFfTUFLRV9BUkdTID0gXFxcXFxcbiBcXHRcXHRCUEZfVEFSR0VUX0VORElBTj1cXFwiJChCUEZfVEFSR0VUX0VORElBTilcXFwiIFxcXFxcXG4gXFx0XFx0UT1cXFwiJChRKVxcXCJcXG4gXFxuLUxJQkFSRU5BX0JQRl9ERVBTIDo9ICQod2lsZGNhcmQgbGliYXJlbmEvTWFrZWZpbGVcXHRcXHRcXFxcXFxuLVxcdFxcdFxcdFxcdCBsaWJhcmVuYS9pbmNsdWRlLypcXHRcXHRcXFxcXFxuLVxcdFxcdFxcdFxcdCBsaWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hLypcXHRcXFxcXFxuLVxcdFxcdFxcdFxcdCBsaWJhcmVuYS9zcmMvKlxcdFxcdFxcdFxcXFxcXG4tXFx0XFx0XFx0XFx0IGxpYmFyZW5hL3NlbGZ0ZXN0cy8qXFx0XFx0XFxcXFxcbi1cXHRcXHRcXHRcXHQgbGliYXJlbmEvKi5icGYubylcXG4rTElCQVJFTkFfQ09NTU9OX0RFUFMgOj0gJCh3aWxkY2FyZCBsaWJhcmVuYS9NYWtlZmlsZVxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0ICAgIGxpYmFyZW5hL2luY2x1ZGUvKlxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0ICAgIGxpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvKlxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0ICAgIGxpYmFyZW5hL3NyYy8qKVxcbitMSUJBUkVOQV9CUEZfREVQUyA6PSAkKExJQkFSRU5BX0NPTU1PTl9ERVBTKSAkKHdpbGRjYXJkIGxpYmFyZW5hL3NlbGZ0ZXN0cy8qKVxcbitMSUJBUkVOQV9CRU5DSF9CUEZfREVQUyA6PSAkKExJQkFSRU5BX0NPTU1PTl9ERVBTKSAkKHdpbGRjYXJkIGxpYmFyZW5hL2JlbmNocy8qKVxcbiBcXG4gTElCQVJFTkFfU0tFTCA6PSBsaWJhcmVuYS9saWJhcmVuYS5za2VsLmhcXG4rTElCQVJFTkFfQkVOQ0hfU0tFTCA6PSBsaWJhcmVuYS9saWJhcmVuYV9iZW5jaC5za2VsLmhcXG4gXFxuICQoTElCQVJFTkFfU0tFTCk6ICQoSU5DTFVERV9ESVIpL3ZtbGludXguaCAkKEJQRk9CSikgJChMSUJBUkVOQV9CUEZfREVQUylcXG4gXFx0KyQoTUFLRSkgLUMgbGliYXJlbmEgbGliYXJlbmEuc2tlbC5oICQoTElCQVJFTkFfTUFLRV9BUkdTKVxcbiBcXG4rJChMSUJBUkVOQV9CRU5DSF9TS0VMKTogJChJTkNMVURFX0RJUikvdm1saW51eC5oICQoQlBGT0JKKSAkKExJQkFSRU5BX0JFTkNIX0JQRl9ERVBTKSB8ICQoTElCQVJFTkFfU0tFTClcXG4rXFx0KyQoTUFLRSkgLUMgbGliYXJlbmEgYmVuY2htYXJrcyAkKExJQkFSRU5BX01BS0VfQVJHUylcXG4rXFxuIGlmbmVxICgkKENMQU5HX0hBU19BUkVOQV9BU0FOKSwpXFxuIExJQkFSRU5BX0FTQU5fU0tFTCA6PSBsaWJhcmVuYS9saWJhcmVuYV9hc2FuLnNrZWwuaFxcbiBDRkxBR1MgKz0gLURIQVNfQlBGX0FSRU5BX0FTQU5cXG5AQCAtOTg3LDYgKzk5MSw3IEBAICQoT1VUUFVUKS9iZW5jaF9zb2NrbWFwLm86ICQoT1VUUFVUKS9iZW5jaF9zb2NrbWFwX3Byb2cuc2tlbC5oXFxuICQoT1VUUFVUKS9iZW5jaF9scG1fdHJpZV9tYXAubzogJChPVVRQVVQpL2xwbV90cmllX2JlbmNoLnNrZWwuaCAkKE9VVFBVVCkvbHBtX3RyaWVfbWFwLnNrZWwuaFxcbiAkKE9VVFBVVCkvYmVuY2hfYnBmX25vcC5vOiAkKE9VVFBVVCkvYnBmX25vcF9iZW5jaC5za2VsLmggYmVuY2hfYnBmX3RpbWluZy5oXFxuICQoT1VUUFVUKS9iZW5jaF94ZHBfbGIubzogJChPVVRQVVQpL3hkcF9sYl9iZW5jaC5za2VsLmggYmVuY2hfYnBmX3RpbWluZy5oXFxuKyQoT1VUUFVUKS9iZW5jaF9saWJhcmVuYS5vOiAkKExJQkFSRU5BX0JFTkNIX1NLRUwpXFxuICQoT1VUUFVUKS9iZW5jaF9icGZfdGltaW5nLm86IGJlbmNoX2JwZl90aW1pbmcuaFxcbiAkKE9VVFBVVCkvYmVuY2gubzogYmVuY2guaCB0ZXN0aW5nX2hlbHBlcnMuaCAkKEJQRk9CSilcXG4gJChPVVRQVVQpL2JlbmNoOiBMRExJQlMgKz0gLWxtXFxuQEAgLTEwMTQsNiArMTAxOSw3IEBAICQoT1VUUFVUKS9iZW5jaDogJChPVVRQVVQpL2JlbmNoLm8gXFxcXFxcbiBcXHRcXHQgJChPVVRQVVQpL2JlbmNoX2JwZl90aW1pbmcubyBcXFxcXFxuIFxcdFxcdCAkKE9VVFBVVCkvYmVuY2hfYnBmX25vcC5vIFxcXFxcXG4gXFx0XFx0ICQoT1VUUFVUKS9iZW5jaF94ZHBfbGIubyBcXFxcXFxuK1xcdFxcdCAkKE9VVFBVVCkvYmVuY2hfbGliYXJlbmEubyBcXFxcXFxuIFxcdFxcdCAkKE9VVFBVVCkvdXNkdF8xLm8gXFxcXFxcbiBcXHRcXHQgJChPVVRQVVQpL3VzZHRfMi5vIFxcXFxcXG4gXFx0XFx0ICNcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guY1xcbmluZGV4IGI4NmI3MzQ1NmQzY2EuLmRlNjcyZjYxZDRhYmUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guY1xcbkBAIC0yODgsNiArMjg4LDcgQEAgZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX2NyeXB0b19hcmdwO1xcbiBleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfc29ja21hcF9hcmdwO1xcbiBleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfbHBtX3RyaWVfbWFwX2FyZ3A7XFxuIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF94ZHBfbGJfYXJncDtcXG4rZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX2xpYmFyZW5hX2FyZ3A7XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3BfY2hpbGQgYmVuY2hfcGFyc2Vyc1tdID0ge1xcbiBcXHR7IFxcdTAwMjZiZW5jaF9yaW5nYnVmc19hcmdwLCAwLCBcXFwiUmluZyBidWZmZXJzIGJlbmNobWFya1xcXCIsIDAgfSxcXG5AQCAtMzA2LDYgKzMwNyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9jaGlsZCBiZW5jaF9wYXJzZXJzW10gPSB7XFxuIFxcdHsgXFx1MDAyNmJlbmNoX3NvY2ttYXBfYXJncCwgMCwgXFxcImJwZiBzb2NrbWFwIGJlbmNobWFya1xcXCIsIDAgfSxcXG4gXFx0eyBcXHUwMDI2YmVuY2hfbHBtX3RyaWVfbWFwX2FyZ3AsIDAsIFxcXCJMUE0gdHJpZSBtYXAgYmVuY2htYXJrXFxcIiwgMCB9LFxcbiBcXHR7IFxcdTAwMjZiZW5jaF94ZHBfbGJfYXJncCwgMCwgXFxcIlhEUCBsb2FkLWJhbGFuY2VyIGJlbmNobWFya1xcXCIsIDAgfSxcXG4rXFx0eyBcXHUwMDI2YmVuY2hfbGliYXJlbmFfYXJncCwgMCwgXFxcImxpYmFyZW5hIGFsbG9jYXRvciBiZW5jaG1hcmtcXFwiLCAwIH0sXFxuIFxcdHt9LFxcbiB9O1xcbiBcXG5AQCAtNTg1LDYgKzU4Nyw4IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfbHBtX3RyaWVfZGVsZXRlO1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2xwbV90cmllX2ZyZWU7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfYnBmX25vcDtcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF94ZHBfbGI7XFxuK2V4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfbGliYXJlbmFfbWFsbG9jO1xcbitleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2xpYmFyZW5hX2NhbGxvYztcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmVuY2ggKmJlbmNoc1tdID0ge1xcbiBcXHRcXHUwMDI2YmVuY2hfY291bnRfZ2xvYmFsLFxcbkBAIC02NjksNiArNjczLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBiZW5jaCAqYmVuY2hzW10gPSB7XFxuIFxcdFxcdTAwMjZiZW5jaF9scG1fdHJpZV9mcmVlLFxcbiBcXHRcXHUwMDI2YmVuY2hfYnBmX25vcCxcXG4gXFx0XFx1MDAyNmJlbmNoX3hkcF9sYixcXG4rXFx0XFx1MDAyNmJlbmNoX2xpYmFyZW5hX21hbGxvYyxcXG4rXFx0XFx1MDAyNmJlbmNoX2xpYmFyZW5hX2NhbGxvYyxcXG4gfTtcXG4gXFxuIHN0YXRpYyB2b2lkIGZpbmRfYmVuY2htYXJrKHZvaWQpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfbGliYXJlbmEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfbGliYXJlbmEuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMjRlNDMyMjQ0YmY1ZFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2xpYmFyZW5hLmNcXG5AQCAtMCwwICsxLDIxMCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXFxuKyNpbmNsdWRlIFxcdTAwM2NhcmdwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW1pdHMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcImJlbmNoLmhcXFwiXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGliYXJlbmEvY29tbW9uLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaWJhcmVuYS9hc2FuLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaWJhcmVuYS9idWRkeS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGliYXJlbmEvdXNlcnNwYWNlLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwibGliYXJlbmEvbGliYXJlbmFfYmVuY2guc2tlbC5oXFxcIlxcbitcXG4rc3RhdGljIHN0cnVjdCB7XFxuK1xcdF9fdTY0IGFsbG9jX3NpemU7XFxuK1xcdF9fdTY0IG5hbGxvY3M7XFxuK30gYXJncyA9IHtcXG4rXFx0LmFsbG9jX3NpemUgPSA2NCxcXG4rXFx0Lm5hbGxvY3MgPSAxMDAwMCxcXG4rfTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3Qge1xcbitcXHRzdHJ1Y3QgbGliYXJlbmFfYmVuY2ggKnNrZWw7XFxuK1xcdGludCBiZW5jaF9mZDtcXG4rXFx0aW50IHJlc2V0X2ZkO1xcbit9IGN0eDtcXG4rXFxuK2VudW0ge1xcbitcXHRBUkdfTElCQVJFTkFfQUxMT0NfU0laRSA9IDEyMDAwLFxcbitcXHRBUkdfTElCQVJFTkFfTkFMTE9DUyxcXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0c1tdID0ge1xcbitcXHR7IFxcXCJhbGxvY19zaXplXFxcIiwgQVJHX0xJQkFSRU5BX0FMTE9DX1NJWkUsIFxcXCJCWVRFU1xcXCIsIDAsXFxuK1xcdCAgXFxcIlNpemUgb2YgZWFjaCBhcmVuYSBhbGxvY2F0aW9uXFxcIiB9LFxcbitcXHR7IFxcXCJuYWxsb2NzXFxcIiwgQVJHX0xJQkFSRU5BX05BTExPQ1MsIFxcXCJJVEVSU1xcXCIsIDAsXFxuK1xcdCAgXFxcIk51bWJlciBvZiBhbGxvY2F0aW9uIHBlciBtZWFzdXJlbWVudFxcXCIgfSxcXG4rXFx0e30sXFxuK307XFxuK1xcbitzdGF0aWMgZXJyb3JfdCBwYXJzZV9hcmcoaW50IGtleSwgY2hhciAqYXJnLCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyB2YWx1ZTtcXG4rXFxuK1xcdHN3aXRjaCAoa2V5KSB7XFxuK1xcdGNhc2UgQVJHX0xJQkFSRU5BX0FMTE9DX1NJWkU6XFxuK1xcdFxcdHZhbHVlID0gc3RydG91bGwoYXJnLCBOVUxMLCAxMCk7XFxuK1xcdFxcdGlmICghdmFsdWUgfHwgdmFsdWUgXFx1MDAzZT0gVUlOVF9NQVgpIHtcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJpbnZhbGlkIGFsbG9jX3NpemU6ICVsZFxcXCIsIHZhbHVlKTtcXG4rXFx0XFx0XFx0YXJncF91c2FnZShzdGF0ZSk7XFxuK1xcdFxcdH1cXG4rXFx0XFx0YXJncy5hbGxvY19zaXplID0gdmFsdWU7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEFSR19MSUJBUkVOQV9OQUxMT0NTOlxcbitcXHRcXHRhcmdzLm5hbGxvY3MgPSBzdHJ0b3VsbChhcmcsIE5VTEwsIDEwKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBBUkdQX0VSUl9VTktOT1dOO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rY29uc3Qgc3RydWN0IGFyZ3AgYmVuY2hfbGliYXJlbmFfYXJncCA9IHtcXG4rXFx0Lm9wdGlvbnMgPSBvcHRzLFxcbitcXHQucGFyc2VyID0gcGFyc2VfYXJnLFxcbit9O1xcbitcXG4rc3RhdGljIHZvaWQgdmFsaWRhdGUodm9pZClcXG4re1xcbitcXHRpZiAoZW52LmNvbnN1bWVyX2NudCAhPSAwKSB7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiYmVuY2htYXJrIGRvZXNuJ3Qgc3VwcG9ydCBjb25zdW1lcnNcXFxcblxcXCIpO1xcbitcXHRcXHRleGl0KDEpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoZW52LnByb2R1Y2VyX2NudCAhPSAxKSB7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiYmVuY2htYXJrIHN1cHBvcnRzIGV4YWN0bHkgb25lIHByb2R1Y2VyXFxcXG5cXFwiKTtcXG4rXFx0XFx0ZXhpdCgxKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBzZXR1cF9jb21tb24odm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgYXJlbmFfYWxsb2NfcmVzZXJ2ZV9hcmdzIHJlc2VydmVfYXJncyA9IHtcXG4rXFx0XFx0Lm5yX3BhZ2VzID0gQVJFTkFfUkVTRVJWRV9QQUdFU19ERkwsXFxuK1xcdH07XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRzZXR1cF9saWJicGYoKTtcXG4rXFxuK1xcdGN0eC5za2VsID0gbGliYXJlbmFfYmVuY2hfX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKCFjdHguc2tlbCkge1xcbitcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcImZhaWxlZCB0byBvcGVuIGFuZCBsb2FkIHNrZWxldG9uXFxcXG5cXFwiKTtcXG4rXFx0XFx0ZXhpdCgxKTtcXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gbGliYXJlbmFfcnVuX3Byb2dfYXJncyhcXG4rXFx0XFx0YnBmX3Byb2dyYW1fX2ZkKGN0eC5za2VsLVxcdTAwM2Vwcm9ncy5hcmVuYV9hbGxvY19yZXNlcnZlKSxcXG4rXFx0XFx0XFx1MDAyNnJlc2VydmVfYXJncywgc2l6ZW9mKHJlc2VydmVfYXJncykpO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiZmFpbGVkIHRvIHJlc2VydmUgYXJlbmEgcGFnZXM6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbitcXHRcXHRleGl0KDEpO1xcbitcXHR9XFxuK1xcbitcXHRlcnIgPSBsaWJhcmVuYV9ydW5fcHJvZyhcXG4rXFx0XFx0YnBmX3Byb2dyYW1fX2ZkKGN0eC5za2VsLVxcdTAwM2Vwcm9ncy5hcmVuYV9idWRkeV9yZXNldCkpO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiZmFpbGVkIHRvIGluaXRpYWxpemUgYXJlbmEgYWxsb2NhdG9yOiAlZFxcXFxuXFxcIiwgZXJyKTtcXG4rXFx0XFx0ZXhpdCgxKTtcXG4rXFx0fVxcbitcXG4rXFx0Y3R4LnNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlYmVuY2hfYWxsb2Nfc2l6ZSA9IGFyZ3MuYWxsb2Nfc2l6ZTtcXG4rXFx0Y3R4LnNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlYmVuY2hfbmFsbG9jcyA9IGFyZ3MubmFsbG9jcztcXG4rXFx0Y3R4LnJlc2V0X2ZkID0gYnBmX3Byb2dyYW1fX2ZkKGN0eC5za2VsLVxcdTAwM2Vwcm9ncy5hcmVuYV9idWRkeV9yZXNldCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG1hbGxvY19zZXR1cCh2b2lkKVxcbit7XFxuK1xcdHNldHVwX2NvbW1vbigpO1xcbitcXHRjdHguYmVuY2hfZmQgPSBicGZfcHJvZ3JhbV9fZmQoY3R4LnNrZWwtXFx1MDAzZXByb2dzLmJlbmNoX21hbGxvYyk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGNhbGxvY19zZXR1cCh2b2lkKVxcbit7XFxuK1xcdHNldHVwX2NvbW1vbigpO1xcbitcXHRjdHguYmVuY2hfZmQgPSBicGZfcHJvZ3JhbV9fZmQoY3R4LnNrZWwtXFx1MDAzZXByb2dzLmJlbmNoX2NhbGxvYyk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkICpwcm9kdWNlcih2b2lkICppbnB1dClcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0d2hpbGUgKHRydWUpIHtcXG4rXFx0XFx0ZXJyID0gbGliYXJlbmFfcnVuX3Byb2coY3R4LmJlbmNoX2ZkKTtcXG4rXFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcImxpYmFyZW5hIGJlbmNobWFyayBmYWlsZWQ6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbitcXHRcXHRcXHRleGl0KDEpO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRlcnIgPSBsaWJhcmVuYV9ydW5fcHJvZyhjdHgucmVzZXRfZmQpO1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwibGliYXJlbmEgYWxsb2MgcmVzZXQgZmFpbGVkOiAlZFxcXFxuXFxcIiwgZXJyKTtcXG4rXFx0XFx0XFx0ZXhpdCgxKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbWVhc3VyZShzdHJ1Y3QgYmVuY2hfcmVzICpyZXMpXFxuK3tcXG4rXFx0cmVzLVxcdTAwM2VkdXJhdGlvbl9ucyA9IGF0b21pY19zd2FwKFxcdTAwMjZjdHguc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2ViZW5jaF9kdXJhdGlvbl9ucywgMCk7XFxuK1xcdHJlcy1cXHUwMDNlaGl0cyA9IGF0b21pY19zd2FwKFxcdTAwMjZjdHguc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2ViZW5jaF9oaXRzLCAwKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcmVwb3J0X3Byb2dyZXNzKGludCBpdGVyLCBzdHJ1Y3QgYmVuY2hfcmVzICpyZXMsIGxvbmcgZGVsdGFfbnMpXFxuK3tcXG4rXFx0ZG91YmxlIGxhdGVuY3lfbnMgPSAwLjA7XFxuK1xcbitcXHRpZiAocmVzLVxcdTAwM2VoaXRzKVxcbitcXHRcXHRsYXRlbmN5X25zID0gcmVzLVxcdTAwM2VkdXJhdGlvbl9ucyAvIChkb3VibGUpcmVzLVxcdTAwM2VoaXRzO1xcbitcXG4rXFx0cHJpbnRmKFxcXCJJdGVyICUzZCAoJTcuM2xmdXMpOiBsYXRlbmN5ICU4LjNsZiBucy9vcCAoJWxkIGFsbG9jYXRpb25zKVxcXFxuXFxcIixcXG4rXFx0ICAgICAgIGl0ZXIsIChkZWx0YV9ucyAtIDEwMDAwMDAwMDApIC8gMTAwMC4wLCBsYXRlbmN5X25zLCByZXMtXFx1MDAzZWhpdHMpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCByZXBvcnRfZmluYWwoc3RydWN0IGJlbmNoX3JlcyByZXNbXSwgaW50IHJlc19jbnQpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBkdXJhdGlvbl9ucyA9IDA7XFxuK1xcdGxvbmcgaGl0cyA9IDA7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHJlc19jbnQ7IGkrKykge1xcbitcXHRcXHRkdXJhdGlvbl9ucyArPSByZXNbaV0uZHVyYXRpb25fbnM7XFxuK1xcdFxcdGhpdHMgKz0gcmVzW2ldLmhpdHM7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghaGl0cyB8fCAhcmVzX2NudCkge1xcbitcXHRcXHRwcmludGYoXFxcIlN1bW1hcnk6IG5vIHJ1bnMgbWVhc3VyZWRcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdHByaW50ZihcXFwiU3VtbWFyeTogJS4zbGYgbnMvb3AsICUuMGxmIGludm9jYXRpb25zIGZvciAldSBhbGxvY2F0aW9ucy9pbnZvY2F0aW9uKVxcXFxuXFxcIixcXG4rXFx0ICAgICAgIGR1cmF0aW9uX25zIC8gKGRvdWJsZSloaXRzLCBoaXRzIC8gKGRvdWJsZSlyZXNfY250LFxcbitcXHQgICAgICAgY3R4LnNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlYmVuY2hfbmFsbG9jcyk7XFxuK31cXG4rXFxuK2NvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9saWJhcmVuYV9tYWxsb2MgPSB7XFxuK1xcdC5uYW1lID0gXFxcImxpYmFyZW5hLW1hbGxvY1xcXCIsXFxuK1xcdC5hcmdwID0gXFx1MDAyNmJlbmNoX2xpYmFyZW5hX2FyZ3AsXFxuK1xcdC52YWxpZGF0ZSA9IHZhbGlkYXRlLFxcbitcXHQuc2V0dXAgPSBtYWxsb2Nfc2V0dXAsXFxuK1xcdC5wcm9kdWNlcl90aHJlYWQgPSBwcm9kdWNlcixcXG4rXFx0Lm1lYXN1cmUgPSBtZWFzdXJlLFxcbitcXHQucmVwb3J0X3Byb2dyZXNzID0gcmVwb3J0X3Byb2dyZXNzLFxcbitcXHQucmVwb3J0X2ZpbmFsID0gcmVwb3J0X2ZpbmFsLFxcbit9O1xcbitcXG4rY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2xpYmFyZW5hX2NhbGxvYyA9IHtcXG4rXFx0Lm5hbWUgPSBcXFwibGliYXJlbmEtY2FsbG9jXFxcIixcXG4rXFx0LmFyZ3AgPSBcXHUwMDI2YmVuY2hfbGliYXJlbmFfYXJncCxcXG4rXFx0LnZhbGlkYXRlID0gdmFsaWRhdGUsXFxuK1xcdC5zZXR1cCA9IGNhbGxvY19zZXR1cCxcXG4rXFx0LnByb2R1Y2VyX3RocmVhZCA9IHByb2R1Y2VyLFxcbitcXHQubWVhc3VyZSA9IG1lYXN1cmUsXFxuK1xcdC5yZXBvcnRfcHJvZ3Jlc3MgPSByZXBvcnRfcHJvZ3Jlc3MsXFxuK1xcdC5yZXBvcnRfZmluYWwgPSByZXBvcnRfZmluYWwsXFxuK307XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvcnVuX2JlbmNoX2xpYmFyZW5hLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9ydW5fYmVuY2hfbGliYXJlbmEuc2hcXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjEwYWZlNGQ1MmViZjdcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9ydW5fYmVuY2hfbGliYXJlbmEuc2hcXG5AQCAtMCwwICsxLDMxIEBAXFxuKyMhL2Jpbi9iYXNoXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rXFxuK3NvdXJjZSAuL2JlbmNocy9ydW5fY29tbW9uLnNoXFxuK1xcbitzZXQgLWV1Zm8gcGlwZWZhaWxcXG4rXFxuK1JVTl9CRU5DSD1cXFwiLi9iZW5jaCAtZDMgLXFcXFwiXFxuK1xcbitzdW1tYXJpemVfbGliYXJlbmEoKVxcbit7XFxuK1xcdGxvY2FsIGJlbmNoPVxcXCIkMVxcXCJcXG4rXFx0bG9jYWwgc3VtbWFyeVxcbitcXG4rXFx0c3VtbWFyeT0kKHByaW50ZiAnJXNcXFxcbicgXFxcIiQyXFxcIiB8IHRhaWwgLW4xKVxcbitcXHRzdW1tYXJ5PSR7c3VtbWFyeSNTdW1tYXJ5OiB9XFxuK1xcdHByaW50ZiBcXFwiJS0yMHMgJXNcXFxcblxcXCIgXFxcIiRiZW5jaFxcXCIgXFxcIiRzdW1tYXJ5XFxcIlxcbit9XFxuK1xcbitoZWFkZXIgXFxcImxpYmFyZW5hIHNlcXVlbnRpYWwgbWFsbG9jXFxcXG5cXFwiXFxuK1xcbitmb3Igc2l6ZSBpbiAxNiA2NCAyNTYgMTAyNCA0MDk2OyBkb1xcbitzdWJ0aXRsZSBcXFwiYWxsb2NhdGlvbiBzaXplOiAkc2l6ZVxcXCJcXG4rcHJpbnRmIFxcXCJcXFxcdC0tLS0tLS0tLS0tLS0tLS0tLS1cXFxcblxcXCJcXG4rXFx0Zm9yIG5hbGxvY3MgaW4gMTAgNTAgMTAwIDUwMCAxMDAwIDUwMDAgMTAwMDA7IGRvXFxuK1xcdFxcdHN1bW1hcml6ZV9saWJhcmVuYSBcXFwibWFsbG9jOlxcXCIgXFxcXFxcbitcXHRcXHRcXHRcXFwiJCgkUlVOX0JFTkNIIC0tYWxsb2Nfc2l6ZSBcXFwiJHNpemVcXFwiIC0tbmFsbG9jcyBcXFwiJG5hbGxvY3NcXFwiIGxpYmFyZW5hLW1hbGxvYylcXFwiXFxuK1xcdFxcdHN1bW1hcml6ZV9saWJhcmVuYSBcXFwiY2FsbG9jOlxcXCIgXFxcXFxcbitcXHRcXHRcXHRcXFwiJCgkUlVOX0JFTkNIIC0tYWxsb2Nfc2l6ZSBcXFwiJHNpemVcXFwiIC0tbmFsbG9jcyBcXFwiJG5hbGxvY3NcXFwiIGxpYmFyZW5hLWNhbGxvYylcXFwiXFxuK1xcdGRvbmVcXG4rZG9uZVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvTWFrZWZpbGVcXG5pbmRleCA1ZTJhYjUxNDgwNWU0Li45MTE2NGQ0M2JkNjEyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9NYWtlZmlsZVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9NYWtlZmlsZVxcbkBAIC0yNywxMCArMjcsMTcgQEAgQlBGRElSPSQoYWJzcGF0aCAkKExJQkFSRU5BKS8uLilcXG4gSU5DTFVERV9ESVIgPz0gJChCUEZESVIpL3Rvb2xzL2luY2x1ZGVcXG4gTElCQlBGX0lOQ0xVREUgPz0gJChJTkNMVURFX0RJUilcXG4gXFxuLSMgU2NhbiBzcmMvIGFuZCBzZWxmdGVzdHMvIHRvIGdlbmVyYXRlIHRoZSBmaW5hbCBiaW5hcmllc1xcbi1MSUJBUkVOQV9TT1VSQ0VTID0gJCh3aWxkY2FyZCAkKExJQkFSRU5BKS9zcmMvKi5icGYuYykgJCh3aWxkY2FyZCAkKExJQkFSRU5BKS9zZWxmdGVzdHMvKi5icGYuYylcXG4tTElCQVJFTkFfT0JKRUNUUyA9ICQobm90ZGlyICQoTElCQVJFTkFfU09VUkNFUzouYnBmLmM9LmJwZi5vKSlcXG4tTElCQVJFTkFfT0JKRUNUU19BU0FOID0gJChub3RkaXIgJChMSUJBUkVOQV9TT1VSQ0VTOi5icGYuYz1fYXNhbi5icGYubykpXFxuKyMgQnVpbGQgc2VsZnRlc3RzIGFuZCBiZW5jaG1hcmtzIGludG8gc2VwYXJhdGUgQlBGIG9iamVjdHMgYW5kIHNrZWxldG9ucy5cXG4rTElCQVJFTkFfQ09SRV9TT1VSQ0VTID0gJCh3aWxkY2FyZCAkKExJQkFSRU5BKS9zcmMvKi5icGYuYylcXG4rTElCQVJFTkFfVEVTVF9TT1VSQ0VTID0gJCh3aWxkY2FyZCAkKExJQkFSRU5BKS9zZWxmdGVzdHMvKi5icGYuYylcXG4rTElCQVJFTkFfQkVOQ0hfU09VUkNFUyA9ICQod2lsZGNhcmQgJChMSUJBUkVOQSkvYmVuY2hzLyouYnBmLmMpXFxuK1xcbitMSUJBUkVOQV9PQkpFQ1RTID0gJChub3RkaXIgJChMSUJBUkVOQV9DT1JFX1NPVVJDRVM6LmJwZi5jPS5icGYubykgXFxcXFxcbitcXHRcXHRcXHQgICAgICAgJChMSUJBUkVOQV9URVNUX1NPVVJDRVM6LmJwZi5jPS5icGYubykpXFxuK0xJQkFSRU5BX09CSkVDVFNfQVNBTiA9ICQobm90ZGlyICQoTElCQVJFTkFfQ09SRV9TT1VSQ0VTOi5icGYuYz1fYXNhbi5icGYubykgXFxcXFxcbitcXHRcXHRcXHRcXHQgICAgJChMSUJBUkVOQV9URVNUX1NPVVJDRVM6LmJwZi5jPV9hc2FuLmJwZi5vKSlcXG4rTElCQVJFTkFfQkVOQ0hfT0JKRUNUUyA9ICQobm90ZGlyICQoTElCQVJFTkFfQ09SRV9TT1VSQ0VTOi5icGYuYz0uYnBmLm8pIFxcXFxcXG4rXFx0XFx0XFx0XFx0ICAgICAkKExJQkFSRU5BX0JFTkNIX1NPVVJDRVM6LmJwZi5jPS5icGYubykpXFxuIFxcbiBJTkNMVURFUyA9IC1JJChMSUJBUkVOQSkvaW5jbHVkZSAtSSQoQlBGRElSKVxcbiBpZm5lcSAoJChJTkNMVURFX0RJUiksKVxcbkBAIC01MywxNyArNjAsMjUgQEAgb3ZlcnJpZGUgQlBGX0NGTEFHUyArPSAtTzIgLWdcXG4gb3ZlcnJpZGUgQlBGX0NGTEFHUyArPSAtV25vLWluY29tcGF0aWJsZS1wb2ludGVyLXR5cGVzLWRpc2NhcmRzLXF1YWxpZmllcnNcXG4gIyBSZXF1aXJlZCBmb3Igc3VwcHJlc3NpbmcgaGFybWxlc3Mgdm1saW51eC5oLXJlbGF0ZWQgd2FybmluZ3MuXFxuIG92ZXJyaWRlIEJQRl9DRkxBR1MgKz0gLVduby1taXNzaW5nLWRlY2xhcmF0aW9uc1xcbitvdmVycmlkZSBCUEZfQ0ZMQUdTICs9IC1mbm8tc3RyaWN0LWFsaWFzaW5nXFxuIG92ZXJyaWRlIEJQRl9DRkxBR1MgKz0gJChJTkNMVURFUylcXG4gXFxuIENGTEFHUyA9IC1PMiAtbm8tcGllXFxuIENGTEFHUyArPSAkKElOQ0xVREVTKVxcbiBcXG4tdnBhdGggJS5icGYuYyAkKExJQkFSRU5BKS9zcmMgJChMSUJBUkVOQSkvc2VsZnRlc3RzXFxuLXZwYXRoICUuYyAkKExJQkFSRU5BKS9zcmMgJChMSUJBUkVOQSkvc2VsZnRlc3RzXFxuK3ZwYXRoICUuYnBmLmMgJChMSUJBUkVOQSkvc3JjICQoTElCQVJFTkEpL3NlbGZ0ZXN0cyAkKExJQkFSRU5BKS9iZW5jaHNcXG4rdnBhdGggJS5jICQoTElCQVJFTkEpL3NyYyAkKExJQkFSRU5BKS9zZWxmdGVzdHMgJChMSUJBUkVOQSkvYmVuY2hzXFxuIFxcbiBza2VsZXRvbnM6IGxpYmFyZW5hLnNrZWwuaCBsaWJhcmVuYV9hc2FuLnNrZWwuaFxcbiAuUEhPTlk6IHNrZWxldG9uc1xcbiBcXG4rYmVuY2htYXJrczogbGliYXJlbmFfYmVuY2guc2tlbC5oXFxuKy5QSE9OWTogYmVuY2htYXJrc1xcbitcXG4rbGliYXJlbmFfYmVuY2guc2tlbC5oOiBsaWJhcmVuYV9iZW5jaC5icGYub1xcbitcXHQkKGNhbGwgbXNnLEdFTi1TS0VMLGxpYmFyZW5hLCRAKVxcbitcXHQkKFEpJChCUEZUT09MKSBnZW4gc2tlbGV0b24gJFxcdTAwM2MgbmFtZSBcXFwibGliYXJlbmFfYmVuY2hcXFwiIFxcdTAwM2UgJEBcXG4rXFxuIGxpYmFyZW5hX2FzYW4uc2tlbC5oOiBsaWJhcmVuYV9hc2FuLmJwZi5vXFxuIFxcdCQoY2FsbCBtc2csR0VOLVNLRUwsbGliYXJlbmEsJEApXFxuIFxcdCQoUSkkKEJQRlRPT0wpIGdlbiBza2VsZXRvbiAkXFx1MDAzYyBuYW1lIFxcXCJsaWJhcmVuYV9hc2FuXFxcIiBcXHUwMDNlICRAXFxuQEAgLTgwLDYgKzk1LDEwIEBAIGxpYmFyZW5hLmJwZi5vOiAkKExJQkFSRU5BX09CSkVDVFMpXFxuIFxcdCQoY2FsbCBtc2csR0VOLU9CSixsaWJhcmVuYSwkQClcXG4gXFx0JChRKSQoQlBGVE9PTCkgZ2VuIG9iamVjdCAkQCAkXlxcbiBcXG4rbGliYXJlbmFfYmVuY2guYnBmLm86ICQoTElCQVJFTkFfQkVOQ0hfT0JKRUNUUylcXG4rXFx0JChjYWxsIG1zZyxHRU4tT0JKLGxpYmFyZW5hLCRAKVxcbitcXHQkKFEpJChCUEZUT09MKSBnZW4gb2JqZWN0ICRAICReXFxuK1xcbiAlX2FzYW4uYnBmLm86ICUuYnBmLmNcXG4gXFx0JChjYWxsIG1zZyxDTE5HLUJQRixsaWJhcmVuYSwkQClcXG4gXFx0JChRKSQoQ0xBTkcpICQoQlBGX0NGTEFHUykgJChBU0FOX0ZMQUdTKSAtREJQRl9BUkVOQV9BU0FOICQoQlBGX1RBUkdFVF9FTkRJQU4pIC1jICRcXHUwMDNjIC1vICRAXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9iZW5jaHMvYmVuY2hfbWFsbG9jLmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2JlbmNocy9iZW5jaF9tYWxsb2MuYnBmLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmUwNjM5N2RjOWE0MGRcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2JlbmNocy9iZW5jaF9tYWxsb2MuYnBmLmNcXG5AQCAtMCwwICsxLDUxIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBMR1BMLTIuMSBPUiBCU0QtMi1DbGF1c2VcXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xcbisjaW5jbHVkZSBcXHUwMDNjbGliYXJlbmEvY29tbW9uLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGliYXJlbmEvYXNhbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGliYXJlbmEvYnVkZHkuaFxcdTAwM2VcXG4rXFxuK3UzMiBiZW5jaF9hbGxvY19zaXplO1xcbit1MzIgYmVuY2hfbmFsbG9jcztcXG4rbG9uZyBiZW5jaF9oaXRzO1xcbitsb25nIGJlbmNoX2R1cmF0aW9uX25zO1xcbitcXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4raW50IGJlbmNoX21hbGxvYyh2b2lkKVxcbit7XFxuK1xcdHZvaWQgX19hcmVuYSAqbWVtO1xcbitcXHR1NjQgc3RhcnRfbnM7XFxuK1xcdHUzMiBpO1xcbitcXG4rXFx0c3RhcnRfbnMgPSBicGZfa3RpbWVfZ2V0X25zKCk7XFxuK1xcdGZvciAoaSA9IHplcm87IGkgXFx1MDAzYyBiZW5jaF9uYWxsb2NzIFxcdTAwMjZcXHUwMDI2IGNhbl9sb29wOyBpKyspIHtcXG4rXFx0XFx0bWVtID0gYXJlbmFfbWFsbG9jKGJlbmNoX2FsbG9jX3NpemUpO1xcbitcXHRcXHRpZiAoIW1lbSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFxuK1xcdF9fc3luY19hZGRfYW5kX2ZldGNoKFxcdTAwMjZiZW5jaF9kdXJhdGlvbl9ucyxcXG4rXFx0XFx0XFx0ICAgICBicGZfa3RpbWVfZ2V0X25zKCkgLSBzdGFydF9ucyk7XFxuK1xcdF9fc3luY19hZGRfYW5kX2ZldGNoKFxcdTAwMjZiZW5jaF9oaXRzLCBpKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK2ludCBiZW5jaF9jYWxsb2Modm9pZClcXG4re1xcbitcXHR2b2lkIF9fYXJlbmEgKm1lbTtcXG4rXFx0dTY0IHN0YXJ0X25zO1xcbitcXHR1MzIgaTtcXG4rXFxuK1xcdHN0YXJ0X25zID0gYnBmX2t0aW1lX2dldF9ucygpO1xcbitcXHRmb3IgKGkgPSB6ZXJvOyBpIFxcdTAwM2MgYmVuY2hfbmFsbG9jcyBcXHUwMDI2XFx1MDAyNiBjYW5fbG9vcDsgaSsrKSB7XFxuK1xcdFxcdG1lbSA9IGFyZW5hX2NhbGxvYygxLCBiZW5jaF9hbGxvY19zaXplKTtcXG4rXFx0XFx0aWYgKCFtZW0pXFxuK1xcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRfX3N5bmNfYWRkX2FuZF9mZXRjaChcXHUwMDI2YmVuY2hfZHVyYXRpb25fbnMsXFxuK1xcdFxcdFxcdCAgICAgYnBmX2t0aW1lX2dldF9ucygpIC0gc3RhcnRfbnMpO1xcbitcXHRfX3N5bmNfYWRkX2FuZF9mZXRjaChcXHUwMDI2YmVuY2hfaGl0cywgaSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9zcGluX2xvY2suaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9zcGluX2xvY2suaFxcbmluZGV4IGFlNmI3MmQxNWJiNjcuLjg3MmZhMjBmMjlhNTkgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX3NwaW5fbG9jay5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX3NwaW5fbG9jay5oXFxuQEAgLTEsNCArMSw0IEBAXFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIEJTRC0yLUNsYXVzZVxcbiAvKiBDb3B5cmlnaHQgKGMpIDIwMjUgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXFxuICNpZm5kZWYgQlBGX0FSRU5BX1NQSU5fTE9DS19IXFxuICNkZWZpbmUgQlBGX0FSRU5BX1NQSU5fTE9DS19IXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hdG9taWMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hdG9taWMuaFxcbmluZGV4IDQzYzMwNmUxN2YxOTguLjY1NTgyYjIwMTBhZDQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2F0b21pYy5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2F0b21pYy5oXFxuQEAgLTEsNCArMSw0IEBAXFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIEJTRC0yLUNsYXVzZVxcbiAvKiBDb3B5cmlnaHQgKGMpIDIwMjUgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXFxuICNpZm5kZWYgQlBGX0FUT01JQ19IXFxuICNkZWZpbmUgQlBGX0FUT01JQ19IXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9tYXlfZ290by5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX21heV9nb3RvLmhcXG5pbmRleCA5YmE5MDY4OWQ2YmEyLi5iMzJhNDIwZDRlMWFkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9tYXlfZ290by5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX21heV9nb3RvLmhcXG5AQCAtMSwzICsxLDQgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IExHUEwtMi4xIE9SIEJTRC0yLUNsYXVzZVxcbiAjcHJhZ21hIG9uY2VcXG4gXFxuIC8qXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2JpdG1hcC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvYml0bWFwLmhcXG5pbmRleCBlMjQzMWVhNmZkZDY4Li4xNjNlMmI4M2Q5NDMxIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2JpdG1hcC5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvYml0bWFwLmhcXG5AQCAtMSw1ICsxLDggQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IExHUEwtMi4xIE9SIEJTRC0yLUNsYXVzZVxcbiAjcHJhZ21hIG9uY2VcXG4gXFxuKyNpbmNsdWRlIFxcdTAwM2NicGZfYXRvbWljLmhcXHUwMDNlXFxuK1xcbiAjZGVmaW5lIEJJVFNfUEVSX0JZVEVcXHRcXHQ4XFxuICNkZWZpbmUgQllURVNfVE9fQklUUyhuYilcXHQoKG5iKSAqIEJJVFNfUEVSX0JZVEUpXFxuIFxcbkBAIC0xNSwxMSArMTgsOCBAQCBzdHJ1Y3QgYXJlbmFfYml0bWFwIHtcXG4gc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICpibXBfYWxsb2Moc2l6ZV90IGJpdHMpO1xcbiB2b2lkIGJtcF9mcmVlKHN0cnVjdCBhcmVuYV9iaXRtYXAgX19hcmVuYSAqYm1wKTtcXG4gXFxuLXZvaWQgX19ibXBfc2V0X2JpdCh1MzIgYml0LCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcCk7XFxuLXZvaWQgX19ibXBfY2xlYXJfYml0KHUzMiBiaXQsIHN0cnVjdCBhcmVuYV9iaXRtYXAgX19hcmVuYSAqYm1wKTtcXG4gdm9pZCBibXBfc2V0X2JpdCh1MzIgYml0LCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcCk7XFxuIHZvaWQgYm1wX2NsZWFyX2JpdCh1MzIgYml0LCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcCk7XFxuLWJvb2wgYm1wX3Rlc3RfYml0KHUzMiBiaXQsIHN0cnVjdCBhcmVuYV9iaXRtYXAgX19hcmVuYSAqYm1wKTtcXG4gYm9vbCBibXBfdGVzdF9hbmRfY2xlYXJfYml0KHUzMiBiaXQsIHN0cnVjdCBhcmVuYV9iaXRtYXAgX19hcmVuYSAqYm1wKTtcXG4gYm9vbCBibXBfdGVzdF9hbmRfc2V0X2JpdCh1MzIgYml0LCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcCk7XFxuIFxcbkBAIC0zMiwzICszMiwyNyBAQCB2b2lkIGJtcF9jb3B5KHNpemVfdCBiaXRzLCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmRzdCwgc3RydWN0IGFyZW5hX2JpdG1hcFxcbiBib29sIGJtcF9pbnRlcnNlY3RzKHNpemVfdCBiaXRzLCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmFyZzEsIHN0cnVjdCBhcmVuYV9iaXRtYXAgX19hcmVuYSAqYXJnMik7XFxuIGJvb2wgYm1wX3N1YnNldChzaXplX3QgYml0cywgc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICpiaWcsIHN0cnVjdCBhcmVuYV9iaXRtYXAgX19hcmVuYSAqc21hbGwpO1xcbiB2b2lkIGJtcF9wcmludChzaXplX3QgYml0cywgc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICpibXApO1xcbitcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZVxcbit2b2lkIF9fYm1wX3NldF9iaXQodTMyIGJpdCwgc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICpibXApXFxuK3tcXG4rXFx0dm9sYXRpbGUgdTY0IF9fYXJlbmEgKndvcmQgPSBcXHUwMDI2Ym1wLVxcdTAwM2ViaXRzW0JJVF9XT1JEKGJpdCldO1xcbitcXG4rXFx0KndvcmQgfD0gQklUX01BU0soYml0KTtcXG4rfVxcbitcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZVxcbit2b2lkIF9fYm1wX2NsZWFyX2JpdCh1MzIgYml0LCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcClcXG4re1xcbitcXHR2b2xhdGlsZSB1NjQgX19hcmVuYSAqd29yZCA9IFxcdTAwMjZibXAtXFx1MDAzZWJpdHNbQklUX1dPUkQoYml0KV07XFxuK1xcbitcXHQqd29yZCBcXHUwMDI2PSB+QklUX01BU0soYml0KTtcXG4rfVxcbitcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZVxcbitib29sIGJtcF90ZXN0X2JpdCh1MzIgYml0LCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcClcXG4re1xcbitcXHR1NjQgd29yZCA9IFJFQURfT05DRShibXAtXFx1MDAzZWJpdHNbQklUX1dPUkQoYml0KV0pO1xcbitcXG4rXFx0cmV0dXJuIHdvcmQgXFx1MDAyNiBCSVRfTUFTSyhiaXQpO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2NvbW1vbi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvY29tbW9uLmhcXG5pbmRleCA5MzFhY2U5YTQ5ZTJiLi5hNjIyMDM1NWE2OTc1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2NvbW1vbi5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvY29tbW9uLmhcXG5AQCAtNDksNiArNDksNyBAQCBleHRlcm4gdm9sYXRpbGUgdTY0IGFzYW5fdmlvbGF0ZWQ7XFxuIGludCBhcmVuYV9mbHMoX191NjQgd29yZCk7XFxuIFxcbiB2b2lkIF9fYXJlbmEgKmFyZW5hX21hbGxvYyhzaXplX3Qgc2l6ZSk7XFxuK3ZvaWQgX19hcmVuYSAqYXJlbmFfY2FsbG9jKHNpemVfdCBuY291bnQsIHNpemVfdCBzaXplKTtcXG4gdm9pZCBhcmVuYV9mcmVlKHZvaWQgX19hcmVuYSAqcHRyKTtcXG4gXFxuIC8qXFxuQEAgLTYxLDYgKzYyLDc2IEBAIHZvaWQgYXJlbmFfZnJlZSh2b2lkIF9fYXJlbmEgKnB0cik7XFxuICAqL1xcbiAjZGVmaW5lIGFyZW5hX3N1YnByb2dfaW5pdCgpIGRvIHsgYXNtIHZvbGF0aWxlIChcXFwiXFxcIiA6OiBcXFwiclxcXCIoXFx1MDAyNmFyZW5hKSk7IH0gd2hpbGUgKDApXFxuIFxcbisvKlxcbisgKiBCUEYgZG9lcyBub3QgY3VycmVudGx5IHN1cHBvcnQgdGhlIG1lbXNldCBpbnRyaW5zaWNzLiBmb3IgbGFyZ2VcXG4rICogc2VxdWVudGlhbCBjb3BpZXMsIG9yIGFzc2lnbm1lbnRzIG9mIGxhcmdlIGRhdGEgc3RydWN0dXJlcyxcXG4rICogdGhlIGZyb250ZW5kIHdpbGwgZ2VuZXJhdGUgYW4gaW50cmluc2ljIHRoYXQgY2F1c2VzIHRoZSBCUEZcXG4rICogYmFja2VuZCB0byBleGl0IGR1ZSB0byBhIG1pc3NpbmcgaW1wbGVtZW50YXRpb24uIFByb3ZpZGVcXG4rICogaW1wbGVtZW50YXRpb25zIGZvciB0aGUgaW50cmluc2ljLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSBpbnQgYXJlbmFfbWVtc2V0KHM4IF9fYXJlbmEgKmRzdCwgczggdmFsLCBzaXplX3Qgc2l6ZSlcXG4re1xcbitcXHRzaXplX3QgaGVhZGFsaWduO1xcbitcXHRzaXplX3QgdGFpbGFsaWduO1xcbitcXHR1OCB1dmFsID0gKHU4KXZhbDtcXG4rXFx0c2l6ZV90IHZhbDY0O1xcbitcXHRzaXplX3QgaTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIENhbGN1bGF0ZSBob3cgbWFueSBieXRlcyB0byB0aGUgbmV4dCB3b3JkLWFsaWduZWQgb25lLlxcbitcXHQgKiBXZSBnZXQgdGhpcyBieSB0cnVuY2F0aW5nIHRoZSAycyBjb21wbGVtZW50IG9mIHRoZVxcbitcXHQgKiBwb2ludGVyIHRvIHRoZSBsYXN0IDMgYml0cy4gSW50dWl0aXZlbHksIHNpbmNlXFxuK1xcdCAqXFxuK1xcdCAqIFRoZSBOIExTQnMgb2YgZHN0IGFuZCAtZHN0IGFkZCB0byAxIFxcdTAwM2NcXHUwMDNjIE4sIHdoaWNoXFxuK1xcdCAqIGlzIHdoeSBkc3QgKyAoLWRzdCkgPSAweDBVTEwgdGhyb3VnaCBvdmVyZmxvdy4gU28gdGhlXFxuK1xcdCAqIGxhc3QgTiA9IDMgYml0cyBvZiB0aGUgbmVnYXRpdmUgYXJlIHRoZSBudW1iZXIgb2ZcXG4rXFx0ICogYnl0ZXMgdG8gYWxpZ24gZHN0IG9uIHRoZSBsYXN0IDMgYml0cy5cXG4rXFx0ICpcXG4rXFx0ICovXFxuK1xcdGhlYWRhbGlnbiA9IC0odTY0KWRzdCBcXHUwMDI2IChzaXplb2YodTY0KSAtIDEpO1xcbitcXHRpZiAoIWhlYWRhbGlnbiB8fCBzaXplIFxcdTAwM2MgaGVhZGFsaWduKVxcbitcXHRcXHRnb3RvIHB0cmFsaWduZWQ7XFxuK1xcbitcXHRmb3IgKGkgPSB6ZXJvOyBpIFxcdTAwM2MgaGVhZGFsaWduIFxcdTAwMjZcXHUwMDI2IGNhbl9sb29wOyBpKyspXFxuK1xcdFxcdGRzdFtpXSA9IHV2YWw7XFxuK1xcbitcXHRkc3QgKz0gaGVhZGFsaWduO1xcbitcXHRzaXplIC09IGhlYWRhbGlnbjtcXG4rXFxuK3B0cmFsaWduZWQ6XFxuK1xcbitcXHQvKlxcbitcXHQgKiBNYWtlIGEgd29yZCB3aXRoIGFsbCBieXRlcyBlcXVhbCB0byB0aGUgYnl0ZSB3ZSBhcmUgc2V0dGluZy5cXG4rXFx0ICogU2luY2UgMSBieXRlIC1cXHUwMDNlIDIgaGV4IGRpZ2l0cy5cXG4rXFx0ICpcXG4rXFx0ICogU2hpZnRpbmcgdGhlIHZhbHVlIGJ5IGEgMCBieXRlcyBpcyBlcXVhbCB0byBtdWx0aXBsaWNhdGlvbiBieSAweDAxXFxuK1xcdCAqIFNoaWZ0aW5nIGJ5IDEgYnl0ZXMgaXMgZXF1YWwgdG8gbXVsdGlwbGljYXRpb24gYnkgMHgwMSBcXHUwMDNjXFx1MDAzYyA4LFxcbitcXHQgKiAuLi5cXG4rXFx0ICogU2hpZnRpbmcgYnkgNyBieXRlcyBpcyBlcXVhbCB0byBtdWx0aXBsaWNhdGlvbiBieSAweDAxIFxcdTAwM2NcXHUwMDNjIDU2LlxcbitcXHQgKlxcbitcXHQgKiBFbmQgb3BlcmF0aW9uIHRvIHJlcGxpY2F0ZSB0aGUgYnl0ZSBpbnRvIGFsbCB0aGUgYnl0ZXMgb2YgYSB3b3JkXFxuK1xcdCAqIGlzIChzaW5jZSBhIHwgYiA9IGEgKyBiIHdoZW4gYSBcXHUwMDI2IGIgPT0gMCk6XFxuK1xcdCAqXFxuK1xcdCAqIHZhbCArIHZhbCAqICgxVUwgXFx1MDAzY1xcdTAwM2MgOCkgKyB2YWwgKiAoMVVMIFxcdTAwM2NcXHUwMDNjIDE2KSArIC4uICsgdmFsICogKDFVTCBcXHUwMDNjXFx1MDAzYyA1NilcXG4rXFx0ICogPSB2YWwgKiAoMVVMIFxcdTAwM2NcXHUwMDNjIDU2ICsgMVVMIFxcdTAwM2NcXHUwMDNjIDQ4ICsgLi4uICsgMVVMIFxcdTAwM2NcXHUwMDNjIDApXFxuK1xcdCAqID0gdmFsICogKDB4MDFVTCBcXHUwMDNjXFx1MDAzYyA1NiB8IDB4MDFVTCBcXHUwMDNjXFx1MDAzYyA0OCArIC4uLiArIDFVTCBcXHUwMDNjXFx1MDAzYyAwKVxcbitcXHQgKiA9IHZhbCAqIDB4MDEwMSAwMTAxIDAxMDEgMDEwMVxcbitcXHQgKi9cXG4rXFx0dmFsNjQgPSAodTgpdmFsICogMHgwMTAxMDEwMTAxMDEwMTAxVUxMO1xcbitcXG4rXFx0LyogUG9pbnRlciBpcyBub3cgYWxpZ25lZCwgdXNlIHdvcmQtYWxpZ25lZCBhc3NpZ25tZW50cy4gKi9cXG4rXFx0Zm9yIChpID0gemVybzsgaSBcXHUwMDNjIHNpemUgLyBzaXplb2YodTY0KSBcXHUwMDI2XFx1MDAyNiBjYW5fbG9vcDsgaSsrKVxcbitcXHRcXHQoKHU2NCBfX2FyZW5hICopZHN0KVtpXSA9IHZhbDY0O1xcbitcXG4rXFx0LyogR28gYmFjayB0byBieXRlLWFsaWduZWQgZm9yIHRoZSB0YWlsLiAqL1xcbitcXHR0YWlsYWxpZ24gPSBzaXplICUgc2l6ZW9mKHU2NCk7XFxuK1xcdGRzdCArPSBzaXplIC0gdGFpbGFsaWduO1xcbitcXHRmb3IgKGkgPSB6ZXJvOyBpIFxcdTAwM2MgdGFpbGFsaWduIFxcdTAwMjZcXHUwMDI2IGNhbl9sb29wOyBpKyspXFxuK1xcdFxcdGRzdFtpXSA9IHV2YWw7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gI2Vsc2UgLyogISBfX0JQRl9fICovXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjc3RkaW50LmhcXHUwMDNlXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9iaXRtYXAuYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYml0bWFwLmJwZi5jXFxuaW5kZXggNzYzMTlhNTI5ZjAyYi4uZTY2YjNhMjZjYTNkNiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYml0bWFwLmJwZi5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2JpdG1hcC5icGYuY1xcbkBAIC0xLDMgKzEsNiBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTEdQTC0yLjEgT1IgQlNELTItQ2xhdXNlXFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cXG4rXFxuICNpbmNsdWRlIFxcdTAwM2NsaWJhcmVuYS9jb21tb24uaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaWJhcmVuYS9hc2FuLmhcXHUwMDNlXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYXNhbi5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYXNhbi5icGYuY1xcbmluZGV4IDUxMzVkNWM3MmE0NmQuLmRlNjU2YjY5ZDEzYWYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jXFxuQEAgLTEwMywyMyArMTAzLDYgQEAgdm9sYXRpbGUgYm9vbCBhc2FuX2luaXRlZCA9IGZhbHNlO1xcbiAgKi9cXG4gdm9sYXRpbGUgYm9vbCBhc2FuX3JlcG9ydF9vbmNlID0gZmFsc2U7XFxuIFxcbi0vKlxcbi0gKiBCUEYgZG9lcyBub3QgY3VycmVudGx5IHN1cHBvcnQgdGhlIG1lbXNldC9tZW1jcHkvbWVtY21wIGludHJpbnNpY3MuXFxuLSAqIEZvciBsYXJnZSBzZXF1ZW50aWFsIGNvcGllcywgb3IgYXNzaWdubWVudHMgb2YgbGFyZ2UgZGF0YSBzdHJ1Y3R1cmVzLFxcbi0gKiB0aGUgZnJvbnRlbmQgd2lsbCBnZW5lcmF0ZSBhbiBpbnRyaW5zaWMgdGhhdCBjYXVzZXMgdGhlIEJQRiBiYWNrZW5kXFxuLSAqIHRvIGV4aXQgZHVlIHRvIGEgbWlzc2luZyBpbXBsZW1lbnRhdGlvbi4gUHJvdmlkZSBhIHNpbXBsZSBpbXBsZW1lbnRhdGlvblxcbi0gKiBqdXN0IGZvciBtZW1zZXQgdG8gdXNlIGl0IGZvciBwb2lzb25pbmcvdW5wb2lzb25pbmcgdGhlIG1hcC5cXG4tICovXFxuLV9fd2VhayBpbnQgYXNhbl9tZW1zZXQoczggX19hcmVuYSAqZHN0LCBzOCB2YWwsIHNpemVfdCBzaXplKVxcbi17XFxuLVxcdHNpemVfdCBpO1xcbi1cXG4tXFx0Zm9yIChpID0gemVybzsgaSBcXHUwMDNjIHNpemUgXFx1MDAyNlxcdTAwMjYgY2FuX2xvb3A7IGkrKylcXG4tXFx0XFx0ZHN0W2ldID0gdmFsO1xcbi1cXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuIC8qIFZhbGlkYXRlIGEgMS1ieXRlIGFjY2VzcywgYWx3YXlzIHdpdGhpbiBhIHNpbmdsZSBieXRlLiAqL1xcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgbWVtb3J5X2lzX3BvaXNvbmVkXzEoczggX19hcmVuYSAqYWRkcilcXG4ge1xcbkBAIC00MjIsNyArNDA1LDcgQEAgX19oaWRkZW4gX19ub2FzYW4gaW50IGFzYW5fcG9pc29uKHZvaWQgX19hcmVuYSAqYWRkciwgczggdmFsLCBzaXplX3Qgc2l6ZSlcXG4gXFx0c2hhZG93ID0gbWVtX3RvX3NoYWRvdyhhZGRyKTtcXG4gXFx0bGVuID0gc2l6ZSBcXHUwMDNlXFx1MDAzZSBBU0FOX1NIQURPV19TSElGVDtcXG4gXFxuLVxcdGFzYW5fbWVtc2V0KHNoYWRvdywgdmFsLCBsZW4pO1xcbitcXHRhcmVuYV9tZW1zZXQoc2hhZG93LCB2YWwsIGxlbik7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC00NjMsNyArNDQ2LDcgQEAgX19oaWRkZW4gX19ub2FzYW4gaW50IGFzYW5fdW5wb2lzb24odm9pZCBfX2FyZW5hICphZGRyLCBzaXplX3Qgc2l6ZSlcXG4gXFx0c2hhZG93ID0gbWVtX3RvX3NoYWRvdyhhZGRyKTtcXG4gXFx0bGVuID0gc2l6ZSBcXHUwMDNlXFx1MDAzZSBBU0FOX1NIQURPV19TSElGVDtcXG4gXFxuLVxcdGFzYW5fbWVtc2V0KHNoYWRvdywgMCwgbGVuKTtcXG4rXFx0YXJlbmFfbWVtc2V0KHNoYWRvdywgMCwgbGVuKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIElmIHdlIGFyZSBhbGxvY2F0aW5nIGEgbm9uLWdyYW51bGUgYWxpZ25lZCByZWdpb24sIHdlIG5lZWQgdG8gYWRqdXN0XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYml0bWFwLmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9iaXRtYXAuYnBmLmNcXG5pbmRleCA1ZmY4ZTY4OGRkYzc2Li4wMzkwZjIwY2UzNjZkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYml0bWFwLmJwZi5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9iaXRtYXAuYnBmLmNcXG5AQCAtMzQsMjQgKzM0LDYgQEAgdm9pZCBibXBfZnJlZShzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcClcXG4gXFx0YXJlbmFfZnJlZShibXApO1xcbiB9XFxuIFxcbi1fX3dlYWtcXG4tdm9pZCBfX2JtcF9zZXRfYml0KHUzMiBiaXQsIHN0cnVjdCBhcmVuYV9iaXRtYXAgX19hcmVuYSAqYm1wKVxcbi17XFxuLVxcdGJtcC1cXHUwMDNlYml0c1tCSVRfV09SRChiaXQpXSB8PSBCSVRfTUFTSyhiaXQpO1xcbi19XFxuLVxcbi1fX3dlYWtcXG4tdm9pZCBfX2JtcF9jbGVhcl9iaXQodTMyIGJpdCwgc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICpibXApXFxuLXtcXG4tXFx0Ym1wLVxcdTAwM2ViaXRzW0JJVF9XT1JEKGJpdCldIFxcdTAwMjY9IH5CSVRfTUFTSyhiaXQpO1xcbi19XFxuLVxcbi1fX3dlYWtcXG4tYm9vbCBibXBfdGVzdF9iaXQodTMyIGJpdCwgc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICpibXApXFxuLXtcXG4tXFx0cmV0dXJuIGJtcC1cXHUwMDNlYml0c1tCSVRfV09SRChiaXQpXSBcXHUwMDI2IEJJVF9NQVNLKGJpdCk7XFxuLX1cXG4tXFxuIF9fd2Vha1xcbiBib29sIGJtcF90ZXN0X2FuZF9jbGVhcl9iaXQodTMyIGJpdCwgc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICpibXApXFxuIHtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9idWRkeS5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYnVkZHkuYnBmLmNcXG5pbmRleCBjNjc0ZWU1Y2ZjYzFkLi4yNDkwYWIxMzk2ZGUwIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYnVkZHkuYnBmLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2J1ZGR5LmJwZi5jXFxuQEAgLTUsNiArNSw4IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaWJhcmVuYS9hc2FuLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaWJhcmVuYS9idWRkeS5oXFx1MDAzZVxcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZl9hcmVuYV9zcGluX2xvY2suaFxcdTAwM2VcXG4rXFxuIC8qXFxuICAqIEJ1ZGR5IGFsbG9jYXRvciBhcmVuYS1iYXNlZCBpbXBsZW1lbnRhdGlvbi5cXG4gICpcXG5AQCAtNDUsMTUgKzQ3LDggQEAgZW51bSB7XFxuIFxcdEJVRERZX0NIVU5LX1BBR0VTXFx0PSBCVUREWV9DSFVOS19CWVRFUyAvIF9fUEFHRV9TSVpFXFxuIH07XFxuIFxcbi1zdGF0aWMgaW5saW5lIGludCBidWRkeV9sb2NrKHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSlcXG4te1xcbi1cXHRyZXR1cm4gYXJlbmFfc3Bpbl9sb2NrKFxcdTAwMjZidWRkeS1cXHUwMDNlbG9jayk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBidWRkeV91bmxvY2soc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KVxcbi17XFxuLVxcdGFyZW5hX3NwaW5fdW5sb2NrKFxcdTAwMjZidWRkeS1cXHUwMDNlbG9jayk7XFxuLX1cXG4rI2RlZmluZSBidWRkeV9sb2NrKGJ1ZGR5LCBmbGFncykgKGFyZW5hX3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjYoYnVkZHkpLVxcdTAwM2Vsb2NrLCAoZmxhZ3MpKSlcXG4rI2RlZmluZSBidWRkeV91bmxvY2soYnVkZHksIGZsYWdzKSAoYXJlbmFfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2KGJ1ZGR5KS1cXHUwMDNlbG9jaywgKGZsYWdzKSkpXFxuIFxcbiAvKlxcbiAgKiBSZXNlcnZlIHBhcnQgb2YgdGhlIGFyZW5hIGFkZHJlc3Mgc3BhY2UgZm9yIHRoZSBhbGxvY2F0b3IuIFdlIHVzZVxcbkBAIC0zODUsNiArMzgwLDcgQEAgc3RhdGljIHN0cnVjdCBidWRkeV9jaHVuayBfX2FyZW5hICpidWRkeV9jaHVua19nZXQoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KVxcbiB7XFxuIFxcdHU2NCBvcmRlciwgb3JkLCBtaW5fb3JkZXIsIG1heF9vcmRlcjtcXG4gXFx0c3RydWN0IGJ1ZGR5X2NodW5rIF9fYXJlbmEgICpjaHVuaztcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFx0c2l6ZV90IGxlZnQ7XFxuIFxcdGludCBwb3dlcjI7XFxuIFxcdHU2NCB2YWRkcjtcXG5AQCAtNDE2LDcgKzQxMiw3IEBAIHN0YXRpYyBzdHJ1Y3QgYnVkZHlfY2h1bmsgX19hcmVuYSAqYnVkZHlfY2h1bmtfZ2V0KHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSlcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChidWRkeV9sb2NrKGJ1ZGR5KSkge1xcbitcXHRpZiAoYnVkZHlfbG9jayhidWRkeSwgZmxhZ3MpKSB7XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIFdlIGNhbm5vdCByZWNsYWltIHRoZSB2YWRkciBzcGFjZSwgYnV0IHRoYXQgaXMgb2sgLSB0aGlzXFxuIFxcdFxcdCAqIG9wZXJhdGlvbiBzaG91bGQgYWx3YXlzIHN1Y2NlZWQuIFRoZSBlcnJvciBwYXRoIGlzIHRvIGNhdGNoXFxuQEAgLTUyMCw3ICs1MTYsNyBAQCBzdGF0aWMgc3RydWN0IGJ1ZGR5X2NodW5rIF9fYXJlbmEgKmJ1ZGR5X2NodW5rX2dldChzdHJ1Y3QgYnVkZHkgX19hcmVuYSAqYnVkZHkpXFxuIFxcdFxcdFxcdGFyZW5hX3N0ZGVycihcXG4gXFx0XFx0XFx0XFx0XFxcImNodW5rIGhhcyBzaXplIG9mIDB4JWx4IGJ5dGVzIChsZWZ0ICVseCBieXRlcylcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdHNpemVvZigqY2h1bmspLCBsZWZ0KTtcXG4tXFx0XFx0XFx0YnVkZHlfdW5sb2NrKGJ1ZGR5KTtcXG4rXFx0XFx0XFx0YnVkZHlfdW5sb2NrKGJ1ZGR5LCBmbGFncyk7XFxuIFxcbiBcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFx0XFx0fVxcbkBAIC01MzEsNyArNTI3LDcgQEAgc3RhdGljIHN0cnVjdCBidWRkeV9jaHVuayBfX2FyZW5hICpidWRkeV9jaHVua19nZXQoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KVxcbiBcXHRcXHRvcmRlciA9IChwb3dlcjIgXFx1MDAzZT0gQlVERFlfTUlOX0FMTE9DX1NISUZUKSA/IHBvd2VyMiAtIEJVRERZX01JTl9BTExPQ19TSElGVCA6IDA7XFxuIFxcbiBcXHRcXHRpZiAoaWR4X3NldF9hbGxvY2F0ZWQoY2h1bmssIGlkeCwgdHJ1ZSkpIHtcXG4tXFx0XFx0XFx0YnVkZHlfdW5sb2NrKGJ1ZGR5KTtcXG4rXFx0XFx0XFx0YnVkZHlfdW5sb2NrKGJ1ZGR5LCBmbGFncyk7XFxuIFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHRcXHR9XFxuIFxcbkBAIC01NDcsNyArNTQzLDcgQEAgc3RhdGljIHN0cnVjdCBidWRkeV9jaHVuayBfX2FyZW5hICpidWRkeV9jaHVua19nZXQoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KVxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0bWluX29yZGVyID0gbGVmdCA/IG9yZGVyICsgMSA6IG9yZGVyO1xcbiBcXHRcXHRpZiAoYWRkX2xlZnRvdmVyc190b19mcmVlbGlzdChjaHVuaywgaWR4LCBtaW5fb3JkZXIsIG1heF9vcmRlcikpIHtcXG4tXFx0XFx0XFx0YnVkZHlfdW5sb2NrKGJ1ZGR5KTtcXG4rXFx0XFx0XFx0YnVkZHlfdW5sb2NrKGJ1ZGR5LCBmbGFncyk7XFxuIFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHRcXHR9XFxuIFxcbkBAIC01NTYsNyArNTUyLDcgQEAgc3RhdGljIHN0cnVjdCBidWRkeV9jaHVuayBfX2FyZW5hICpidWRkeV9jaHVua19nZXQoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KVxcbiBcXHRcXHRtYXhfb3JkZXIgPSBvcmRlcjtcXG4gXFx0fVxcbiBcXG4tXFx0YnVkZHlfdW5sb2NrKGJ1ZGR5KTtcXG4rXFx0YnVkZHlfdW5sb2NrKGJ1ZGR5LCBmbGFncyk7XFxuIFxcbiBcXHRyZXR1cm4gY2h1bms7XFxuIH1cXG5AQCAtNTY0LDYgKzU2MCw3IEBAIHN0YXRpYyBzdHJ1Y3QgYnVkZHlfY2h1bmsgX19hcmVuYSAqYnVkZHlfY2h1bmtfZ2V0KHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSlcXG4gX193ZWFrIGludCBidWRkeV9pbml0KHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSlcXG4ge1xcbiBcXHRzdHJ1Y3QgYnVkZHlfY2h1bmsgX19hcmVuYSAqY2h1bms7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHRpZiAoIWFzYW5fcmVhZHkoKSlcXG5AQCAtNTc5LDcgKzU3Niw3IEBAIF9fd2VhayBpbnQgYnVkZHlfaW5pdChzdHJ1Y3QgYnVkZHkgX19hcmVuYSAqYnVkZHkpXFxuIFxcbiBcXHRjaHVuayA9IGJ1ZGR5X2NodW5rX2dldChidWRkeSk7XFxuIFxcbi1cXHRpZiAoYnVkZHlfbG9jayhidWRkeSkpIHtcXG4rXFx0aWYgKGJ1ZGR5X2xvY2soYnVkZHksIGZsYWdzKSkge1xcbiBcXHRcXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcXHUwMDI2YXJlbmEsIGNodW5rLCBCVUREWV9DSFVOS19QQUdFUyk7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuQEAgLTU5MSw3ICs1ODgsNyBAQCBfX3dlYWsgaW50IGJ1ZGR5X2luaXQoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KVxcbiBcXHQvKiBQdXQgdGhlIGNodW5rIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpc3QuICovXFxuIFxcdGJ1ZGR5LVxcdTAwM2VmaXJzdF9jaHVuayA9IGNodW5rO1xcbiBcXG4tXFx0YnVkZHlfdW5sb2NrKGJ1ZGR5KTtcXG4rXFx0YnVkZHlfdW5sb2NrKGJ1ZGR5LCBmbGFncyk7XFxuIFxcbiBcXHRyZXR1cm4gY2h1bmsgPyAwIDogLUVOT01FTTtcXG4gfVxcbkBAIC03MzAsOSArNzI3LDEwIEBAIHN0YXRpYyB1NjQgYnVkZHlfYWxsb2NfZnJvbV9leGlzdGluZ19jaHVua3Moc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5LCBpbnQgb3JkXFxuICAqL1xcbiBzdGF0aWMgdTY0IGJ1ZGR5X2FsbG9jX2Zyb21fbmV3X2NodW5rKHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSwgc3RydWN0IGJ1ZGR5X2NodW5rIF9fYXJlbmEgKmNodW5rLCBpbnQgb3JkZXIpXFxuIHtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFx0dTY0IGFkZHJlc3M7XFxuIFxcbi1cXHRpZiAoYnVkZHlfbG9jayhidWRkeSkpXFxuK1xcdGlmIChidWRkeV9sb2NrKGJ1ZGR5LCBmbGFncykpXFxuIFxcdFxcdHJldHVybiAodTY0KU5VTEw7XFxuIFxcbiBcXG5AQCAtNzQ1LDcgKzc0Myw3IEBAIHN0YXRpYyB1NjQgYnVkZHlfYWxsb2NfZnJvbV9uZXdfY2h1bmsoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5LCBzdHJ1Y3QgYnVkZHlfXFxuIFxcbiBcXHRhZGRyZXNzID0gYnVkZHlfY2h1bmtfYWxsb2MoYnVkZHktXFx1MDAzZWZpcnN0X2NodW5rLCBvcmRlcik7XFxuIFxcbi1cXHRidWRkeV91bmxvY2soYnVkZHkpO1xcbitcXHRidWRkeV91bmxvY2soYnVkZHksIGZsYWdzKTtcXG4gXFxuIFxcdHJldHVybiAodTY0KWFkZHJlc3M7XFxuIH1cXG5AQCAtNzU0LDYgKzc1Miw3IEBAIHZvaWQgX19hcmVuYSAqYnVkZHlfYWxsb2Moc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5LCBzaXplX3Qgc2l6ZSlcXG4ge1xcbiBcXHR2b2lkIF9fYXJlbmEgKmFkZHJlc3MgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgYnVkZHlfY2h1bmsgX19hcmVuYSAqY2h1bms7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcdGludCBvcmRlcjtcXG4gXFxuIFxcdGlmICghYnVkZHkpXFxuQEAgLTc2NSwxMSArNzY0LDExIEBAIHZvaWQgX19hcmVuYSAqYnVkZHlfYWxsb2Moc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5LCBzaXplX3Qgc2l6ZSlcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChidWRkeV9sb2NrKGJ1ZGR5KSlcXG4rXFx0aWYgKGJ1ZGR5X2xvY2soYnVkZHksIGZsYWdzKSlcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcbiBcXHRhZGRyZXNzID0gKHU4IF9fYXJlbmEgKilidWRkeV9hbGxvY19mcm9tX2V4aXN0aW5nX2NodW5rcyhidWRkeSwgb3JkZXIpO1xcbi1cXHRidWRkeV91bmxvY2soYnVkZHkpO1xcbitcXHRidWRkeV91bmxvY2soYnVkZHksIGZsYWdzKTtcXG4gXFx0aWYgKGFkZHJlc3MpXFxuIFxcdFxcdGdvdG8gZG9uZTtcXG4gXFxuQEAgLTg4MCw2ICs4NzksNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBidWRkeV9mcmVlX3VubG9ja2VkKHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSwgdTY0XFxuIFxcbiBfX3dlYWsgaW50IGJ1ZGR5X2ZyZWUoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5LCB2b2lkIF9fYXJlbmEgKmFkZHIpXFxuIHtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdGlmICghYnVkZHkpXFxuQEAgLTg4OSwxMyArODg5LDEzIEBAIF9fd2VhayBpbnQgYnVkZHlfZnJlZShzdHJ1Y3QgYnVkZHkgX19hcmVuYSAqYnVkZHksIHZvaWQgX19hcmVuYSAqYWRkcilcXG4gXFx0aWYgKCFhZGRyKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdHJldCA9IGJ1ZGR5X2xvY2soYnVkZHkpO1xcbitcXHRyZXQgPSBidWRkeV9sb2NrKGJ1ZGR5LCBmbGFncyk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHRyZXQgPSBidWRkeV9mcmVlX3VubG9ja2VkKGJ1ZGR5LCAodTY0KWFkZHIpO1xcbiBcXG4tXFx0YnVkZHlfdW5sb2NrKGJ1ZGR5KTtcXG4rXFx0YnVkZHlfdW5sb2NrKGJ1ZGR5LCBmbGFncyk7XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvY29tbW9uLmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9jb21tb24uYnBmLmNcXG5pbmRleCA1NjlmMGY2NGQ1MThiLi43ODVkNDg3MmNiNDk0IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvY29tbW9uLmJwZi5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9jb21tb24uYnBmLmNcXG5AQCAtMSw1ICsxLDcgQEBcXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IExHUEwtMi4xIE9SIEJTRC0yLUNsYXVzZVxcbiAvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW1pdHMuaFxcdTAwM2VcXG4rXFxuICNpbmNsdWRlIFxcdTAwM2NsaWJhcmVuYS9jb21tb24uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpYmFyZW5hL2FzYW4uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpYmFyZW5hL2J1ZGR5LmhcXHUwMDNlXFxuQEAgLTQ4LDEwICs1MCwzMyBAQCBfX3dlYWsgdm9pZCBfX2FyZW5hICphcmVuYV9tYWxsb2Moc2l6ZV90IHNpemUpXFxuIFxcdHJldHVybiBidWRkeV9hbGxvYyhcXHUwMDI2YnVkZHksIHNpemUpO1xcbiB9XFxuIFxcbitfX3dlYWsgdm9pZCBfX2FyZW5hICphcmVuYV9jYWxsb2Moc2l6ZV90IG5jb3VudCwgc2l6ZV90IHNpemUpXFxuK3tcXG4rXFx0dm9pZCBfX2FyZW5hICptZW07XFxuK1xcdHNpemVfdCB0b3RhbDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIElkZWFsbHkgd2UnZCBiZSB1c2luZyBfX2J1aWx0aW5fbXVsX292ZXJmbG93IGhlcmUsXFxuK1xcdCAqIGJ1dCB0aGUgQlBGIGNvbXBpbGVyIGJhY2tlbmQgZG9lc24ndCBpbXBsZW1lbnQgX19tdWx0aTMuXFxuK1xcdCAqIFRoZXJlIGFyZSB3YXlzIHRvIG9wdGltaXplIHRoZSBkaXZpc2lvbiBhd2F5IGZyb20gdGhlXFxuK1xcdCAqIG92ZXJmbG93IGNoZWNrLCBidXQgYW55IGNvc3RzIGFyZSBkd2FyZmVkIGJ5IHRoZVxcbitcXHQgKiBidWRkeV9hbGxvYygpIGNhbGwuIEtlZXAgaXQgc2ltcGxlIGZvciBub3cuXFxuK1xcdCAqL1xcbitcXHRpZiAodW5saWtlbHkobmNvdW50IFxcdTAwMjZcXHUwMDI2IHNpemUgXFx1MDAzZT0gVUxMT05HX01BWCAvIG5jb3VudCkpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0dG90YWwgPSBuY291bnQgKiBzaXplO1xcbitcXG4rXFx0bWVtID0gYnVkZHlfYWxsb2MoXFx1MDAyNmJ1ZGR5LCB0b3RhbCk7XFxuK1xcdGlmIChsaWtlbHkobWVtKSlcXG4rXFx0XFx0YXJlbmFfbWVtc2V0KG1lbSwgMCwgdG90YWwpO1xcbitcXG4rXFx0cmV0dXJuIG1lbTtcXG4rfVxcbitcXG4gX193ZWFrIHZvaWQgYXJlbmFfZnJlZSh2b2lkIF9fYXJlbmEgKnB0cilcXG4ge1xcbiBcXHRidWRkeV9mcmVlKFxcdTAwMjZidWRkeSwgcHRyKTtcXG4gfVxcbiBcXG4tXFxuIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxOTo0Mzo0My43NDk5OTc2ODJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyOTk4MzA5Njg1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBCUEYgc2VsZnRlc3RzIGFuZCBiZW5jaG1hcmtzIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8uIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkMWEyMjg2Y2FhOThmYTg2NTAzZDNhOTIwZWVkM2NkZjM1YTY2ZDgzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMTk6NDM6NDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcbmluZGV4IGQzNjU1YTcwNjQ4MjYuLjIyZTllYjE2YzE1MTEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxuQEAgLTgyNiwxOCArODI2LDIyIEBAIExJQkFSRU5BX01BS0VfQVJHUyA9IFxcXG4gXHRcdEJQRl9UQVJHRVRfRU5ESUFOPVwiJChCUEZfVEFSR0VUX0VORElBTilcIiBcXFxuIFx0XHRRPVwiJChRKVwiXG4gXG4tTElCQVJFTkFfQlBGX0RFUFMgOj0gJCh3aWxkY2FyZCBsaWJhcmVuYS9NYWtlZmlsZVx0XHRcXFxuLVx0XHRcdFx0IGxpYmFyZW5hL2luY2x1ZGUvKlx0XHRcXFxuLVx0XHRcdFx0IGxpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvKlx0XFxcbi1cdFx0XHRcdCBsaWJhcmVuYS9zcmMvKlx0XHRcdFxcXG4tXHRcdFx0XHQgbGliYXJlbmEvc2VsZnRlc3RzLypcdFx0XFxcbi1cdFx0XHRcdCBsaWJhcmVuYS8qLmJwZi5vKVxuK0xJQkFSRU5BX0NPTU1PTl9ERVBTIDo9ICQod2lsZGNhcmQgbGliYXJlbmEvTWFrZWZpbGVcdFx0XFxcbitcdFx0XHRcdCAgICBsaWJhcmVuYS9pbmNsdWRlLypcdFx0XFxcbitcdFx0XHRcdCAgICBsaWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hLypcdFxcXG4rXHRcdFx0XHQgICAgbGliYXJlbmEvc3JjLyopXG4rTElCQVJFTkFfQlBGX0RFUFMgOj0gJChMSUJBUkVOQV9DT01NT05fREVQUykgJCh3aWxkY2FyZCBsaWJhcmVuYS9zZWxmdGVzdHMvKilcbitMSUJBUkVOQV9CRU5DSF9CUEZfREVQUyA6PSAkKExJQkFSRU5BX0NPTU1PTl9ERVBTKSAkKHdpbGRjYXJkIGxpYmFyZW5hL2JlbmNocy8qKVxuIFxuIExJQkFSRU5BX1NLRUwgOj0gbGliYXJlbmEvbGliYXJlbmEuc2tlbC5oXG4rTElCQVJFTkFfQkVOQ0hfU0tFTCA6PSBsaWJhcmVuYS9saWJhcmVuYV9iZW5jaC5za2VsLmhcbiBcbiAkKExJQkFSRU5BX1NLRUwpOiAkKElOQ0xVREVfRElSKS92bWxpbnV4LmggJChCUEZPQkopICQoTElCQVJFTkFfQlBGX0RFUFMpXG4gXHQrJChNQUtFKSAtQyBsaWJhcmVuYSBsaWJhcmVuYS5za2VsLmggJChMSUJBUkVOQV9NQUtFX0FSR1MpXG4gXG4rJChMSUJBUkVOQV9CRU5DSF9TS0VMKTogJChJTkNMVURFX0RJUikvdm1saW51eC5oICQoQlBGT0JKKSAkKExJQkFSRU5BX0JFTkNIX0JQRl9ERVBTKSB8ICQoTElCQVJFTkFfU0tFTClcbitcdCskKE1BS0UpIC1DIGxpYmFyZW5hIGJlbmNobWFya3MgJChMSUJBUkVOQV9NQUtFX0FSR1MpXG4rXG4gaWZuZXEgKCQoQ0xBTkdfSEFTX0FSRU5BX0FTQU4pLClcbiBMSUJBUkVOQV9BU0FOX1NLRUwgOj0gbGliYXJlbmEvbGliYXJlbmFfYXNhbi5za2VsLmhcbiBDRkxBR1MgKz0gLURIQVNfQlBGX0FSRU5BX0FTQU5cbkBAIC05ODcsNiArOTkxLDcgQEAgJChPVVRQVVQpL2JlbmNoX3NvY2ttYXAubzogJChPVVRQVVQpL2JlbmNoX3NvY2ttYXBfcHJvZy5za2VsLmhcbiAkKE9VVFBVVCkvYmVuY2hfbHBtX3RyaWVfbWFwLm86ICQoT1VUUFVUKS9scG1fdHJpZV9iZW5jaC5za2VsLmggJChPVVRQVVQpL2xwbV90cmllX21hcC5za2VsLmhcbiAkKE9VVFBVVCkvYmVuY2hfYnBmX25vcC5vOiAkKE9VVFBVVCkvYnBmX25vcF9iZW5jaC5za2VsLmggYmVuY2hfYnBmX3RpbWluZy5oXG4gJChPVVRQVVQpL2JlbmNoX3hkcF9sYi5vOiAkKE9VVFBVVCkveGRwX2xiX2JlbmNoLnNrZWwuaCBiZW5jaF9icGZfdGltaW5nLmhcbiskKE9VVFBVVCkvYmVuY2hfbGliYXJlbmEubzogJChMSUJBUkVOQV9CRU5DSF9TS0VMKVxuICQoT1VUUFVUKS9iZW5jaF9icGZfdGltaW5nLm86IGJlbmNoX2JwZl90aW1pbmcuaFxuICQoT1VUUFVUKS9iZW5jaC5vOiBiZW5jaC5oIHRlc3RpbmdfaGVscGVycy5oICQoQlBGT0JKKVxuICQoT1VUUFVUKS9iZW5jaDogTERMSUJTICs9IC1sbVxuQEAgLTEwMTQsNiArMTAxOSw3IEBAICQoT1VUUFVUKS9iZW5jaDogJChPVVRQVVQpL2JlbmNoLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS9iZW5jaF9icGZfdGltaW5nLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS9iZW5jaF9icGZfbm9wLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS9iZW5jaF94ZHBfbGIubyBcXFxuK1x0XHQgJChPVVRQVVQpL2JlbmNoX2xpYmFyZW5hLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS91c2R0XzEubyBcXFxuIFx0XHQgJChPVVRQVVQpL3VzZHRfMi5vIFxcXG4gXHRcdCAjXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guY1xuaW5kZXggYjg2YjczNDU2ZDNjYS4uZGU2NzJmNjFkNGFiZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guY1xuQEAgLTI4OCw2ICsyODgsNyBAQCBleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfY3J5cHRvX2FyZ3A7XG4gZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX3NvY2ttYXBfYXJncDtcbiBleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfbHBtX3RyaWVfbWFwX2FyZ3A7XG4gZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX3hkcF9sYl9hcmdwO1xuK2V4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9saWJhcmVuYV9hcmdwO1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9jaGlsZCBiZW5jaF9wYXJzZXJzW10gPSB7XG4gXHR7IFx1MDAyNmJlbmNoX3JpbmdidWZzX2FyZ3AsIDAsIFwiUmluZyBidWZmZXJzIGJlbmNobWFya1wiLCAwIH0sXG5AQCAtMzA2LDYgKzMwNyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9jaGlsZCBiZW5jaF9wYXJzZXJzW10gPSB7XG4gXHR7IFx1MDAyNmJlbmNoX3NvY2ttYXBfYXJncCwgMCwgXCJicGYgc29ja21hcCBiZW5jaG1hcmtcIiwgMCB9LFxuIFx0eyBcdTAwMjZiZW5jaF9scG1fdHJpZV9tYXBfYXJncCwgMCwgXCJMUE0gdHJpZSBtYXAgYmVuY2htYXJrXCIsIDAgfSxcbiBcdHsgXHUwMDI2YmVuY2hfeGRwX2xiX2FyZ3AsIDAsIFwiWERQIGxvYWQtYmFsYW5jZXIgYmVuY2htYXJrXCIsIDAgfSxcbitcdHsgXHUwMDI2YmVuY2hfbGliYXJlbmFfYXJncCwgMCwgXCJsaWJhcmVuYSBhbGxvY2F0b3IgYmVuY2htYXJrXCIsIDAgfSxcbiBcdHt9LFxuIH07XG4gXG5AQCAtNTg1LDYgKzU4Nyw4IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfbHBtX3RyaWVfZGVsZXRlO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfbHBtX3RyaWVfZnJlZTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2JwZl9ub3A7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF94ZHBfbGI7XG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9saWJhcmVuYV9tYWxsb2M7XG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9saWJhcmVuYV9jYWxsb2M7XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBiZW5jaCAqYmVuY2hzW10gPSB7XG4gXHRcdTAwMjZiZW5jaF9jb3VudF9nbG9iYWwsXG5AQCAtNjY5LDYgKzY3Myw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmVuY2ggKmJlbmNoc1tdID0ge1xuIFx0XHUwMDI2YmVuY2hfbHBtX3RyaWVfZnJlZSxcbiBcdFx1MDAyNmJlbmNoX2JwZl9ub3AsXG4gXHRcdTAwMjZiZW5jaF94ZHBfbGIsXG4rXHRcdTAwMjZiZW5jaF9saWJhcmVuYV9tYWxsb2MsXG4rXHRcdTAwMjZiZW5jaF9saWJhcmVuYV9jYWxsb2MsXG4gfTtcbiBcbiBzdGF0aWMgdm9pZCBmaW5kX2JlbmNobWFyayh2b2lkKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfbGliYXJlbmEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfbGliYXJlbmEuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjI0ZTQzMjI0NGJmNWRcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfbGliYXJlbmEuY1xuQEAgLTAsMCArMSwyMTAgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbisjaW5jbHVkZSBcdTAwM2NhcmdwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW1pdHMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJiZW5jaC5oXCJcbitcbisjaW5jbHVkZSBcdTAwM2NsaWJhcmVuYS9jb21tb24uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpYmFyZW5hL2FzYW4uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpYmFyZW5hL2J1ZGR5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaWJhcmVuYS91c2Vyc3BhY2UuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwibGliYXJlbmEvbGliYXJlbmFfYmVuY2guc2tlbC5oXCJcbitcbitzdGF0aWMgc3RydWN0IHtcbitcdF9fdTY0IGFsbG9jX3NpemU7XG4rXHRfX3U2NCBuYWxsb2NzO1xuK30gYXJncyA9IHtcbitcdC5hbGxvY19zaXplID0gNjQsXG4rXHQubmFsbG9jcyA9IDEwMDAwLFxuK307XG4rXG4rc3RhdGljIHN0cnVjdCB7XG4rXHRzdHJ1Y3QgbGliYXJlbmFfYmVuY2ggKnNrZWw7XG4rXHRpbnQgYmVuY2hfZmQ7XG4rXHRpbnQgcmVzZXRfZmQ7XG4rfSBjdHg7XG4rXG4rZW51bSB7XG4rXHRBUkdfTElCQVJFTkFfQUxMT0NfU0laRSA9IDEyMDAwLFxuK1x0QVJHX0xJQkFSRU5BX05BTExPQ1MsXG4rfTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uIG9wdHNbXSA9IHtcbitcdHsgXCJhbGxvY19zaXplXCIsIEFSR19MSUJBUkVOQV9BTExPQ19TSVpFLCBcIkJZVEVTXCIsIDAsXG4rXHQgIFwiU2l6ZSBvZiBlYWNoIGFyZW5hIGFsbG9jYXRpb25cIiB9LFxuK1x0eyBcIm5hbGxvY3NcIiwgQVJHX0xJQkFSRU5BX05BTExPQ1MsIFwiSVRFUlNcIiwgMCxcbitcdCAgXCJOdW1iZXIgb2YgYWxsb2NhdGlvbiBwZXIgbWVhc3VyZW1lbnRcIiB9LFxuK1x0e30sXG4rfTtcbitcbitzdGF0aWMgZXJyb3JfdCBwYXJzZV9hcmcoaW50IGtleSwgY2hhciAqYXJnLCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUpXG4re1xuK1x0dW5zaWduZWQgbG9uZyB2YWx1ZTtcbitcbitcdHN3aXRjaCAoa2V5KSB7XG4rXHRjYXNlIEFSR19MSUJBUkVOQV9BTExPQ19TSVpFOlxuK1x0XHR2YWx1ZSA9IHN0cnRvdWxsKGFyZywgTlVMTCwgMTApO1xuK1x0XHRpZiAoIXZhbHVlIHx8IHZhbHVlIFx1MDAzZT0gVUlOVF9NQVgpIHtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJpbnZhbGlkIGFsbG9jX3NpemU6ICVsZFwiLCB2YWx1ZSk7XG4rXHRcdFx0YXJncF91c2FnZShzdGF0ZSk7XG4rXHRcdH1cbitcdFx0YXJncy5hbGxvY19zaXplID0gdmFsdWU7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBBUkdfTElCQVJFTkFfTkFMTE9DUzpcbitcdFx0YXJncy5uYWxsb2NzID0gc3RydG91bGwoYXJnLCBOVUxMLCAxMCk7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIEFSR1BfRVJSX1VOS05PV047XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rY29uc3Qgc3RydWN0IGFyZ3AgYmVuY2hfbGliYXJlbmFfYXJncCA9IHtcbitcdC5vcHRpb25zID0gb3B0cyxcbitcdC5wYXJzZXIgPSBwYXJzZV9hcmcsXG4rfTtcbitcbitzdGF0aWMgdm9pZCB2YWxpZGF0ZSh2b2lkKVxuK3tcbitcdGlmIChlbnYuY29uc3VtZXJfY250ICE9IDApIHtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiYmVuY2htYXJrIGRvZXNuJ3Qgc3VwcG9ydCBjb25zdW1lcnNcXG5cIik7XG4rXHRcdGV4aXQoMSk7XG4rXHR9XG4rXG4rXHRpZiAoZW52LnByb2R1Y2VyX2NudCAhPSAxKSB7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcImJlbmNobWFyayBzdXBwb3J0cyBleGFjdGx5IG9uZSBwcm9kdWNlclxcblwiKTtcbitcdFx0ZXhpdCgxKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgc2V0dXBfY29tbW9uKHZvaWQpXG4re1xuK1x0c3RydWN0IGFyZW5hX2FsbG9jX3Jlc2VydmVfYXJncyByZXNlcnZlX2FyZ3MgPSB7XG4rXHRcdC5ucl9wYWdlcyA9IEFSRU5BX1JFU0VSVkVfUEFHRVNfREZMLFxuK1x0fTtcbitcdGludCBlcnI7XG4rXG4rXHRzZXR1cF9saWJicGYoKTtcbitcbitcdGN0eC5za2VsID0gbGliYXJlbmFfYmVuY2hfX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghY3R4LnNrZWwpIHtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiZmFpbGVkIHRvIG9wZW4gYW5kIGxvYWQgc2tlbGV0b25cXG5cIik7XG4rXHRcdGV4aXQoMSk7XG4rXHR9XG4rXG4rXHRlcnIgPSBsaWJhcmVuYV9ydW5fcHJvZ19hcmdzKFxuK1x0XHRicGZfcHJvZ3JhbV9fZmQoY3R4LnNrZWwtXHUwMDNlcHJvZ3MuYXJlbmFfYWxsb2NfcmVzZXJ2ZSksXG4rXHRcdFx1MDAyNnJlc2VydmVfYXJncywgc2l6ZW9mKHJlc2VydmVfYXJncykpO1xuK1x0aWYgKGVycikge1xuK1x0XHRmcHJpbnRmKHN0ZGVyciwgXCJmYWlsZWQgdG8gcmVzZXJ2ZSBhcmVuYSBwYWdlczogJWRcXG5cIiwgZXJyKTtcbitcdFx0ZXhpdCgxKTtcbitcdH1cbitcbitcdGVyciA9IGxpYmFyZW5hX3J1bl9wcm9nKFxuK1x0XHRicGZfcHJvZ3JhbV9fZmQoY3R4LnNrZWwtXHUwMDNlcHJvZ3MuYXJlbmFfYnVkZHlfcmVzZXQpKTtcbitcdGlmIChlcnIpIHtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiZmFpbGVkIHRvIGluaXRpYWxpemUgYXJlbmEgYWxsb2NhdG9yOiAlZFxcblwiLCBlcnIpO1xuK1x0XHRleGl0KDEpO1xuK1x0fVxuK1xuK1x0Y3R4LnNrZWwtXHUwMDNlYnNzLVx1MDAzZWJlbmNoX2FsbG9jX3NpemUgPSBhcmdzLmFsbG9jX3NpemU7XG4rXHRjdHguc2tlbC1cdTAwM2Vic3MtXHUwMDNlYmVuY2hfbmFsbG9jcyA9IGFyZ3MubmFsbG9jcztcbitcdGN0eC5yZXNldF9mZCA9IGJwZl9wcm9ncmFtX19mZChjdHguc2tlbC1cdTAwM2Vwcm9ncy5hcmVuYV9idWRkeV9yZXNldCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG1hbGxvY19zZXR1cCh2b2lkKVxuK3tcbitcdHNldHVwX2NvbW1vbigpO1xuK1x0Y3R4LmJlbmNoX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKGN0eC5za2VsLVx1MDAzZXByb2dzLmJlbmNoX21hbGxvYyk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGNhbGxvY19zZXR1cCh2b2lkKVxuK3tcbitcdHNldHVwX2NvbW1vbigpO1xuK1x0Y3R4LmJlbmNoX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKGN0eC5za2VsLVx1MDAzZXByb2dzLmJlbmNoX2NhbGxvYyk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkICpwcm9kdWNlcih2b2lkICppbnB1dClcbit7XG4rXHRpbnQgZXJyO1xuK1xuK1x0d2hpbGUgKHRydWUpIHtcbitcdFx0ZXJyID0gbGliYXJlbmFfcnVuX3Byb2coY3R4LmJlbmNoX2ZkKTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdGZwcmludGYoc3RkZXJyLCBcImxpYmFyZW5hIGJlbmNobWFyayBmYWlsZWQ6ICVkXFxuXCIsIGVycik7XG4rXHRcdFx0ZXhpdCgxKTtcbitcdFx0fVxuK1xuK1x0XHRlcnIgPSBsaWJhcmVuYV9ydW5fcHJvZyhjdHgucmVzZXRfZmQpO1xuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwibGliYXJlbmEgYWxsb2MgcmVzZXQgZmFpbGVkOiAlZFxcblwiLCBlcnIpO1xuK1x0XHRcdGV4aXQoMSk7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiBOVUxMO1xuK31cbitcbitzdGF0aWMgdm9pZCBtZWFzdXJlKHN0cnVjdCBiZW5jaF9yZXMgKnJlcylcbit7XG4rXHRyZXMtXHUwMDNlZHVyYXRpb25fbnMgPSBhdG9taWNfc3dhcChcdTAwMjZjdHguc2tlbC1cdTAwM2Vic3MtXHUwMDNlYmVuY2hfZHVyYXRpb25fbnMsIDApO1xuK1x0cmVzLVx1MDAzZWhpdHMgPSBhdG9taWNfc3dhcChcdTAwMjZjdHguc2tlbC1cdTAwM2Vic3MtXHUwMDNlYmVuY2hfaGl0cywgMCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJlcG9ydF9wcm9ncmVzcyhpbnQgaXRlciwgc3RydWN0IGJlbmNoX3JlcyAqcmVzLCBsb25nIGRlbHRhX25zKVxuK3tcbitcdGRvdWJsZSBsYXRlbmN5X25zID0gMC4wO1xuK1xuK1x0aWYgKHJlcy1cdTAwM2VoaXRzKVxuK1x0XHRsYXRlbmN5X25zID0gcmVzLVx1MDAzZWR1cmF0aW9uX25zIC8gKGRvdWJsZSlyZXMtXHUwMDNlaGl0cztcbitcbitcdHByaW50ZihcIkl0ZXIgJTNkICglNy4zbGZ1cyk6IGxhdGVuY3kgJTguM2xmIG5zL29wICglbGQgYWxsb2NhdGlvbnMpXFxuXCIsXG4rXHQgICAgICAgaXRlciwgKGRlbHRhX25zIC0gMTAwMDAwMDAwMCkgLyAxMDAwLjAsIGxhdGVuY3lfbnMsIHJlcy1cdTAwM2VoaXRzKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcmVwb3J0X2ZpbmFsKHN0cnVjdCBiZW5jaF9yZXMgcmVzW10sIGludCByZXNfY250KVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgZHVyYXRpb25fbnMgPSAwO1xuK1x0bG9uZyBoaXRzID0gMDtcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcmVzX2NudDsgaSsrKSB7XG4rXHRcdGR1cmF0aW9uX25zICs9IHJlc1tpXS5kdXJhdGlvbl9ucztcbitcdFx0aGl0cyArPSByZXNbaV0uaGl0cztcbitcdH1cbitcbitcdGlmICghaGl0cyB8fCAhcmVzX2NudCkge1xuK1x0XHRwcmludGYoXCJTdW1tYXJ5OiBubyBydW5zIG1lYXN1cmVkXFxuXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRwcmludGYoXCJTdW1tYXJ5OiAlLjNsZiBucy9vcCwgJS4wbGYgaW52b2NhdGlvbnMgZm9yICV1IGFsbG9jYXRpb25zL2ludm9jYXRpb24pXFxuXCIsXG4rXHQgICAgICAgZHVyYXRpb25fbnMgLyAoZG91YmxlKWhpdHMsIGhpdHMgLyAoZG91YmxlKXJlc19jbnQsXG4rXHQgICAgICAgY3R4LnNrZWwtXHUwMDNlYnNzLVx1MDAzZWJlbmNoX25hbGxvY3MpO1xuK31cbitcbitjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfbGliYXJlbmFfbWFsbG9jID0ge1xuK1x0Lm5hbWUgPSBcImxpYmFyZW5hLW1hbGxvY1wiLFxuK1x0LmFyZ3AgPSBcdTAwMjZiZW5jaF9saWJhcmVuYV9hcmdwLFxuK1x0LnZhbGlkYXRlID0gdmFsaWRhdGUsXG4rXHQuc2V0dXAgPSBtYWxsb2Nfc2V0dXAsXG4rXHQucHJvZHVjZXJfdGhyZWFkID0gcHJvZHVjZXIsXG4rXHQubWVhc3VyZSA9IG1lYXN1cmUsXG4rXHQucmVwb3J0X3Byb2dyZXNzID0gcmVwb3J0X3Byb2dyZXNzLFxuK1x0LnJlcG9ydF9maW5hbCA9IHJlcG9ydF9maW5hbCxcbit9O1xuK1xuK2NvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9saWJhcmVuYV9jYWxsb2MgPSB7XG4rXHQubmFtZSA9IFwibGliYXJlbmEtY2FsbG9jXCIsXG4rXHQuYXJncCA9IFx1MDAyNmJlbmNoX2xpYmFyZW5hX2FyZ3AsXG4rXHQudmFsaWRhdGUgPSB2YWxpZGF0ZSxcbitcdC5zZXR1cCA9IGNhbGxvY19zZXR1cCxcbitcdC5wcm9kdWNlcl90aHJlYWQgPSBwcm9kdWNlcixcbitcdC5tZWFzdXJlID0gbWVhc3VyZSxcbitcdC5yZXBvcnRfcHJvZ3Jlc3MgPSByZXBvcnRfcHJvZ3Jlc3MsXG4rXHQucmVwb3J0X2ZpbmFsID0gcmVwb3J0X2ZpbmFsLFxuK307XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9ydW5fYmVuY2hfbGliYXJlbmEuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL3J1bl9iZW5jaF9saWJhcmVuYS5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjEwYWZlNGQ1MmViZjdcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvcnVuX2JlbmNoX2xpYmFyZW5hLnNoXG5AQCAtMCwwICsxLDMxIEBAXG4rIyEvYmluL2Jhc2hcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rc291cmNlIC4vYmVuY2hzL3J1bl9jb21tb24uc2hcbitcbitzZXQgLWV1Zm8gcGlwZWZhaWxcbitcbitSVU5fQkVOQ0g9XCIuL2JlbmNoIC1kMyAtcVwiXG4rXG4rc3VtbWFyaXplX2xpYmFyZW5hKClcbit7XG4rXHRsb2NhbCBiZW5jaD1cIiQxXCJcbitcdGxvY2FsIHN1bW1hcnlcbitcbitcdHN1bW1hcnk9JChwcmludGYgJyVzXFxuJyBcIiQyXCIgfCB0YWlsIC1uMSlcbitcdHN1bW1hcnk9JHtzdW1tYXJ5I1N1bW1hcnk6IH1cbitcdHByaW50ZiBcIiUtMjBzICVzXFxuXCIgXCIkYmVuY2hcIiBcIiRzdW1tYXJ5XCJcbit9XG4rXG4raGVhZGVyIFwibGliYXJlbmEgc2VxdWVudGlhbCBtYWxsb2NcXG5cIlxuK1xuK2ZvciBzaXplIGluIDE2IDY0IDI1NiAxMDI0IDQwOTY7IGRvXG4rc3VidGl0bGUgXCJhbGxvY2F0aW9uIHNpemU6ICRzaXplXCJcbitwcmludGYgXCJcXHQtLS0tLS0tLS0tLS0tLS0tLS0tXFxuXCJcbitcdGZvciBuYWxsb2NzIGluIDEwIDUwIDEwMCA1MDAgMTAwMCA1MDAwIDEwMDAwOyBkb1xuK1x0XHRzdW1tYXJpemVfbGliYXJlbmEgXCJtYWxsb2M6XCIgXFxcbitcdFx0XHRcIiQoJFJVTl9CRU5DSCAtLWFsbG9jX3NpemUgXCIkc2l6ZVwiIC0tbmFsbG9jcyBcIiRuYWxsb2NzXCIgbGliYXJlbmEtbWFsbG9jKVwiXG4rXHRcdHN1bW1hcml6ZV9saWJhcmVuYSBcImNhbGxvYzpcIiBcXFxuK1x0XHRcdFwiJCgkUlVOX0JFTkNIIC0tYWxsb2Nfc2l6ZSBcIiRzaXplXCIgLS1uYWxsb2NzIFwiJG5hbGxvY3NcIiBsaWJhcmVuYS1jYWxsb2MpXCJcbitcdGRvbmVcbitkb25lXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL01ha2VmaWxlXG5pbmRleCA1ZTJhYjUxNDgwNWU0Li45MTE2NGQ0M2JkNjEyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL01ha2VmaWxlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvTWFrZWZpbGVcbkBAIC0yNywxMCArMjcsMTcgQEAgQlBGRElSPSQoYWJzcGF0aCAkKExJQkFSRU5BKS8uLilcbiBJTkNMVURFX0RJUiA/PSAkKEJQRkRJUikvdG9vbHMvaW5jbHVkZVxuIExJQkJQRl9JTkNMVURFID89ICQoSU5DTFVERV9ESVIpXG4gXG4tIyBTY2FuIHNyYy8gYW5kIHNlbGZ0ZXN0cy8gdG8gZ2VuZXJhdGUgdGhlIGZpbmFsIGJpbmFyaWVzXG4tTElCQVJFTkFfU09VUkNFUyA9ICQod2lsZGNhcmQgJChMSUJBUkVOQSkvc3JjLyouYnBmLmMpICQod2lsZGNhcmQgJChMSUJBUkVOQSkvc2VsZnRlc3RzLyouYnBmLmMpXG4tTElCQVJFTkFfT0JKRUNUUyA9ICQobm90ZGlyICQoTElCQVJFTkFfU09VUkNFUzouYnBmLmM9LmJwZi5vKSlcbi1MSUJBUkVOQV9PQkpFQ1RTX0FTQU4gPSAkKG5vdGRpciAkKExJQkFSRU5BX1NPVVJDRVM6LmJwZi5jPV9hc2FuLmJwZi5vKSlcbisjIEJ1aWxkIHNlbGZ0ZXN0cyBhbmQgYmVuY2htYXJrcyBpbnRvIHNlcGFyYXRlIEJQRiBvYmplY3RzIGFuZCBza2VsZXRvbnMuXG4rTElCQVJFTkFfQ09SRV9TT1VSQ0VTID0gJCh3aWxkY2FyZCAkKExJQkFSRU5BKS9zcmMvKi5icGYuYylcbitMSUJBUkVOQV9URVNUX1NPVVJDRVMgPSAkKHdpbGRjYXJkICQoTElCQVJFTkEpL3NlbGZ0ZXN0cy8qLmJwZi5jKVxuK0xJQkFSRU5BX0JFTkNIX1NPVVJDRVMgPSAkKHdpbGRjYXJkICQoTElCQVJFTkEpL2JlbmNocy8qLmJwZi5jKVxuK1xuK0xJQkFSRU5BX09CSkVDVFMgPSAkKG5vdGRpciAkKExJQkFSRU5BX0NPUkVfU09VUkNFUzouYnBmLmM9LmJwZi5vKSBcXFxuK1x0XHRcdCAgICAgICAkKExJQkFSRU5BX1RFU1RfU09VUkNFUzouYnBmLmM9LmJwZi5vKSlcbitMSUJBUkVOQV9PQkpFQ1RTX0FTQU4gPSAkKG5vdGRpciAkKExJQkFSRU5BX0NPUkVfU09VUkNFUzouYnBmLmM9X2FzYW4uYnBmLm8pIFxcXG4rXHRcdFx0XHQgICAgJChMSUJBUkVOQV9URVNUX1NPVVJDRVM6LmJwZi5jPV9hc2FuLmJwZi5vKSlcbitMSUJBUkVOQV9CRU5DSF9PQkpFQ1RTID0gJChub3RkaXIgJChMSUJBUkVOQV9DT1JFX1NPVVJDRVM6LmJwZi5jPS5icGYubykgXFxcbitcdFx0XHRcdCAgICAgJChMSUJBUkVOQV9CRU5DSF9TT1VSQ0VTOi5icGYuYz0uYnBmLm8pKVxuIFxuIElOQ0xVREVTID0gLUkkKExJQkFSRU5BKS9pbmNsdWRlIC1JJChCUEZESVIpXG4gaWZuZXEgKCQoSU5DTFVERV9ESVIpLClcbkBAIC01MywxNyArNjAsMjUgQEAgb3ZlcnJpZGUgQlBGX0NGTEFHUyArPSAtTzIgLWdcbiBvdmVycmlkZSBCUEZfQ0ZMQUdTICs9IC1Xbm8taW5jb21wYXRpYmxlLXBvaW50ZXItdHlwZXMtZGlzY2FyZHMtcXVhbGlmaWVyc1xuICMgUmVxdWlyZWQgZm9yIHN1cHByZXNzaW5nIGhhcm1sZXNzIHZtbGludXguaC1yZWxhdGVkIHdhcm5pbmdzLlxuIG92ZXJyaWRlIEJQRl9DRkxBR1MgKz0gLVduby1taXNzaW5nLWRlY2xhcmF0aW9uc1xuK292ZXJyaWRlIEJQRl9DRkxBR1MgKz0gLWZuby1zdHJpY3QtYWxpYXNpbmdcbiBvdmVycmlkZSBCUEZfQ0ZMQUdTICs9ICQoSU5DTFVERVMpXG4gXG4gQ0ZMQUdTID0gLU8yIC1uby1waWVcbiBDRkxBR1MgKz0gJChJTkNMVURFUylcbiBcbi12cGF0aCAlLmJwZi5jICQoTElCQVJFTkEpL3NyYyAkKExJQkFSRU5BKS9zZWxmdGVzdHNcbi12cGF0aCAlLmMgJChMSUJBUkVOQSkvc3JjICQoTElCQVJFTkEpL3NlbGZ0ZXN0c1xuK3ZwYXRoICUuYnBmLmMgJChMSUJBUkVOQSkvc3JjICQoTElCQVJFTkEpL3NlbGZ0ZXN0cyAkKExJQkFSRU5BKS9iZW5jaHNcbit2cGF0aCAlLmMgJChMSUJBUkVOQSkvc3JjICQoTElCQVJFTkEpL3NlbGZ0ZXN0cyAkKExJQkFSRU5BKS9iZW5jaHNcbiBcbiBza2VsZXRvbnM6IGxpYmFyZW5hLnNrZWwuaCBsaWJhcmVuYV9hc2FuLnNrZWwuaFxuIC5QSE9OWTogc2tlbGV0b25zXG4gXG4rYmVuY2htYXJrczogbGliYXJlbmFfYmVuY2guc2tlbC5oXG4rLlBIT05ZOiBiZW5jaG1hcmtzXG4rXG4rbGliYXJlbmFfYmVuY2guc2tlbC5oOiBsaWJhcmVuYV9iZW5jaC5icGYub1xuK1x0JChjYWxsIG1zZyxHRU4tU0tFTCxsaWJhcmVuYSwkQClcbitcdCQoUSkkKEJQRlRPT0wpIGdlbiBza2VsZXRvbiAkXHUwMDNjIG5hbWUgXCJsaWJhcmVuYV9iZW5jaFwiIFx1MDAzZSAkQFxuK1xuIGxpYmFyZW5hX2FzYW4uc2tlbC5oOiBsaWJhcmVuYV9hc2FuLmJwZi5vXG4gXHQkKGNhbGwgbXNnLEdFTi1TS0VMLGxpYmFyZW5hLCRAKVxuIFx0JChRKSQoQlBGVE9PTCkgZ2VuIHNrZWxldG9uICRcdTAwM2MgbmFtZSBcImxpYmFyZW5hX2FzYW5cIiBcdTAwM2UgJEBcbkBAIC04MCw2ICs5NSwxMCBAQCBsaWJhcmVuYS5icGYubzogJChMSUJBUkVOQV9PQkpFQ1RTKVxuIFx0JChjYWxsIG1zZyxHRU4tT0JKLGxpYmFyZW5hLCRAKVxuIFx0JChRKSQoQlBGVE9PTCkgZ2VuIG9iamVjdCAkQCAkXlxuIFxuK2xpYmFyZW5hX2JlbmNoLmJwZi5vOiAkKExJQkFSRU5BX0JFTkNIX09CSkVDVFMpXG4rXHQkKGNhbGwgbXNnLEdFTi1PQkosbGliYXJlbmEsJEApXG4rXHQkKFEpJChCUEZUT09MKSBnZW4gb2JqZWN0ICRAICReXG4rXG4gJV9hc2FuLmJwZi5vOiAlLmJwZi5jXG4gXHQkKGNhbGwgbXNnLENMTkctQlBGLGxpYmFyZW5hLCRAKVxuIFx0JChRKSQoQ0xBTkcpICQoQlBGX0NGTEFHUykgJChBU0FOX0ZMQUdTKSAtREJQRl9BUkVOQV9BU0FOICQoQlBGX1RBUkdFVF9FTkRJQU4pIC1jICRcdTAwM2MgLW8gJEBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvYmVuY2hzL2JlbmNoX21hbGxvYy5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9iZW5jaHMvYmVuY2hfbWFsbG9jLmJwZi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZTA2Mzk3ZGM5YTQwZFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2JlbmNocy9iZW5jaF9tYWxsb2MuYnBmLmNcbkBAIC0wLDAgKzEsNTEgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTEdQTC0yLjEgT1IgQlNELTItQ2xhdXNlXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuKyNpbmNsdWRlIFx1MDAzY2xpYmFyZW5hL2NvbW1vbi5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGliYXJlbmEvYXNhbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGliYXJlbmEvYnVkZHkuaFx1MDAzZVxuK1xuK3UzMiBiZW5jaF9hbGxvY19zaXplO1xuK3UzMiBiZW5jaF9uYWxsb2NzO1xuK2xvbmcgYmVuY2hfaGl0cztcbitsb25nIGJlbmNoX2R1cmF0aW9uX25zO1xuK1xuK1NFQyhcInN5c2NhbGxcIilcbitpbnQgYmVuY2hfbWFsbG9jKHZvaWQpXG4re1xuK1x0dm9pZCBfX2FyZW5hICptZW07XG4rXHR1NjQgc3RhcnRfbnM7XG4rXHR1MzIgaTtcbitcbitcdHN0YXJ0X25zID0gYnBmX2t0aW1lX2dldF9ucygpO1xuK1x0Zm9yIChpID0gemVybzsgaSBcdTAwM2MgYmVuY2hfbmFsbG9jcyBcdTAwMjZcdTAwMjYgY2FuX2xvb3A7IGkrKykge1xuK1x0XHRtZW0gPSBhcmVuYV9tYWxsb2MoYmVuY2hfYWxsb2Nfc2l6ZSk7XG4rXHRcdGlmICghbWVtKVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0X19zeW5jX2FkZF9hbmRfZmV0Y2goXHUwMDI2YmVuY2hfZHVyYXRpb25fbnMsXG4rXHRcdFx0ICAgICBicGZfa3RpbWVfZ2V0X25zKCkgLSBzdGFydF9ucyk7XG4rXHRfX3N5bmNfYWRkX2FuZF9mZXRjaChcdTAwMjZiZW5jaF9oaXRzLCBpKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJzeXNjYWxsXCIpXG4raW50IGJlbmNoX2NhbGxvYyh2b2lkKVxuK3tcbitcdHZvaWQgX19hcmVuYSAqbWVtO1xuK1x0dTY0IHN0YXJ0X25zO1xuK1x0dTMyIGk7XG4rXG4rXHRzdGFydF9ucyA9IGJwZl9rdGltZV9nZXRfbnMoKTtcbitcdGZvciAoaSA9IHplcm87IGkgXHUwMDNjIGJlbmNoX25hbGxvY3MgXHUwMDI2XHUwMDI2IGNhbl9sb29wOyBpKyspIHtcbitcdFx0bWVtID0gYXJlbmFfY2FsbG9jKDEsIGJlbmNoX2FsbG9jX3NpemUpO1xuK1x0XHRpZiAoIW1lbSlcbitcdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbitcbitcdF9fc3luY19hZGRfYW5kX2ZldGNoKFx1MDAyNmJlbmNoX2R1cmF0aW9uX25zLFxuK1x0XHRcdCAgICAgYnBmX2t0aW1lX2dldF9ucygpIC0gc3RhcnRfbnMpO1xuK1x0X19zeW5jX2FkZF9hbmRfZmV0Y2goXHUwMDI2YmVuY2hfaGl0cywgaSk7XG4rXHRyZXR1cm4gMDtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX3NwaW5fbG9jay5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX3NwaW5fbG9jay5oXG5pbmRleCBhZTZiNzJkMTViYjY3Li44NzJmYTIwZjI5YTU5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX3NwaW5fbG9jay5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXJlbmFfc3Bpbl9sb2NrLmhcbkBAIC0xLDQgKzEsNCBAQFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgQlNELTItQ2xhdXNlXG4gLyogQ29weXJpZ2h0IChjKSAyMDI1IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuICNpZm5kZWYgQlBGX0FSRU5BX1NQSU5fTE9DS19IXG4gI2RlZmluZSBCUEZfQVJFTkFfU1BJTl9MT0NLX0hcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXRvbWljLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXRvbWljLmhcbmluZGV4IDQzYzMwNmUxN2YxOTguLjY1NTgyYjIwMTBhZDQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXRvbWljLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hdG9taWMuaFxuQEAgLTEsNCArMSw0IEBAXG4tLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBCU0QtMi1DbGF1c2VcbiAvKiBDb3B5cmlnaHQgKGMpIDIwMjUgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXG4gI2lmbmRlZiBCUEZfQVRPTUlDX0hcbiAjZGVmaW5lIEJQRl9BVE9NSUNfSFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9tYXlfZ290by5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX21heV9nb3RvLmhcbmluZGV4IDliYTkwNjg5ZDZiYTIuLmIzMmE0MjBkNGUxYWQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfbWF5X2dvdG8uaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX21heV9nb3RvLmhcbkBAIC0xLDMgKzEsNCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBMR1BMLTIuMSBPUiBCU0QtMi1DbGF1c2VcbiAjcHJhZ21hIG9uY2VcbiBcbiAvKlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2JpdG1hcC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvYml0bWFwLmhcbmluZGV4IGUyNDMxZWE2ZmRkNjguLjE2M2UyYjgzZDk0MzEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9iaXRtYXAuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvYml0bWFwLmhcbkBAIC0xLDUgKzEsOCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBMR1BMLTIuMSBPUiBCU0QtMi1DbGF1c2VcbiAjcHJhZ21hIG9uY2VcbiBcbisjaW5jbHVkZSBcdTAwM2NicGZfYXRvbWljLmhcdTAwM2VcbitcbiAjZGVmaW5lIEJJVFNfUEVSX0JZVEVcdFx0OFxuICNkZWZpbmUgQllURVNfVE9fQklUUyhuYilcdCgobmIpICogQklUU19QRVJfQllURSlcbiBcbkBAIC0xNSwxMSArMTgsOCBAQCBzdHJ1Y3QgYXJlbmFfYml0bWFwIHtcbiBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcF9hbGxvYyhzaXplX3QgYml0cyk7XG4gdm9pZCBibXBfZnJlZShzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcCk7XG4gXG4tdm9pZCBfX2JtcF9zZXRfYml0KHUzMiBiaXQsIHN0cnVjdCBhcmVuYV9iaXRtYXAgX19hcmVuYSAqYm1wKTtcbi12b2lkIF9fYm1wX2NsZWFyX2JpdCh1MzIgYml0LCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcCk7XG4gdm9pZCBibXBfc2V0X2JpdCh1MzIgYml0LCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcCk7XG4gdm9pZCBibXBfY2xlYXJfYml0KHUzMiBiaXQsIHN0cnVjdCBhcmVuYV9iaXRtYXAgX19hcmVuYSAqYm1wKTtcbi1ib29sIGJtcF90ZXN0X2JpdCh1MzIgYml0LCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcCk7XG4gYm9vbCBibXBfdGVzdF9hbmRfY2xlYXJfYml0KHUzMiBiaXQsIHN0cnVjdCBhcmVuYV9iaXRtYXAgX19hcmVuYSAqYm1wKTtcbiBib29sIGJtcF90ZXN0X2FuZF9zZXRfYml0KHUzMiBiaXQsIHN0cnVjdCBhcmVuYV9iaXRtYXAgX19hcmVuYSAqYm1wKTtcbiBcbkBAIC0zMiwzICszMiwyNyBAQCB2b2lkIGJtcF9jb3B5KHNpemVfdCBiaXRzLCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmRzdCwgc3RydWN0IGFyZW5hX2JpdG1hcFxuIGJvb2wgYm1wX2ludGVyc2VjdHMoc2l6ZV90IGJpdHMsIHN0cnVjdCBhcmVuYV9iaXRtYXAgX19hcmVuYSAqYXJnMSwgc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICphcmcyKTtcbiBib29sIGJtcF9zdWJzZXQoc2l6ZV90IGJpdHMsIHN0cnVjdCBhcmVuYV9iaXRtYXAgX19hcmVuYSAqYmlnLCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKnNtYWxsKTtcbiB2b2lkIGJtcF9wcmludChzaXplX3QgYml0cywgc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICpibXApO1xuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmVcbit2b2lkIF9fYm1wX3NldF9iaXQodTMyIGJpdCwgc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICpibXApXG4re1xuK1x0dm9sYXRpbGUgdTY0IF9fYXJlbmEgKndvcmQgPSBcdTAwMjZibXAtXHUwMDNlYml0c1tCSVRfV09SRChiaXQpXTtcbitcbitcdCp3b3JkIHw9IEJJVF9NQVNLKGJpdCk7XG4rfVxuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmVcbit2b2lkIF9fYm1wX2NsZWFyX2JpdCh1MzIgYml0LCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcClcbit7XG4rXHR2b2xhdGlsZSB1NjQgX19hcmVuYSAqd29yZCA9IFx1MDAyNmJtcC1cdTAwM2ViaXRzW0JJVF9XT1JEKGJpdCldO1xuK1xuK1x0KndvcmQgXHUwMDI2PSB+QklUX01BU0soYml0KTtcbit9XG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZVxuK2Jvb2wgYm1wX3Rlc3RfYml0KHUzMiBiaXQsIHN0cnVjdCBhcmVuYV9iaXRtYXAgX19hcmVuYSAqYm1wKVxuK3tcbitcdHU2NCB3b3JkID0gUkVBRF9PTkNFKGJtcC1cdTAwM2ViaXRzW0JJVF9XT1JEKGJpdCldKTtcbitcbitcdHJldHVybiB3b3JkIFx1MDAyNiBCSVRfTUFTSyhiaXQpO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9jb21tb24uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2NvbW1vbi5oXG5pbmRleCA5MzFhY2U5YTQ5ZTJiLi5hNjIyMDM1NWE2OTc1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvY29tbW9uLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2NvbW1vbi5oXG5AQCAtNDksNiArNDksNyBAQCBleHRlcm4gdm9sYXRpbGUgdTY0IGFzYW5fdmlvbGF0ZWQ7XG4gaW50IGFyZW5hX2ZscyhfX3U2NCB3b3JkKTtcbiBcbiB2b2lkIF9fYXJlbmEgKmFyZW5hX21hbGxvYyhzaXplX3Qgc2l6ZSk7XG4rdm9pZCBfX2FyZW5hICphcmVuYV9jYWxsb2Moc2l6ZV90IG5jb3VudCwgc2l6ZV90IHNpemUpO1xuIHZvaWQgYXJlbmFfZnJlZSh2b2lkIF9fYXJlbmEgKnB0cik7XG4gXG4gLypcbkBAIC02MSw2ICs2Miw3NiBAQCB2b2lkIGFyZW5hX2ZyZWUodm9pZCBfX2FyZW5hICpwdHIpO1xuICAqL1xuICNkZWZpbmUgYXJlbmFfc3VicHJvZ19pbml0KCkgZG8geyBhc20gdm9sYXRpbGUgKFwiXCIgOjogXCJyXCIoXHUwMDI2YXJlbmEpKTsgfSB3aGlsZSAoMClcbiBcbisvKlxuKyAqIEJQRiBkb2VzIG5vdCBjdXJyZW50bHkgc3VwcG9ydCB0aGUgbWVtc2V0IGludHJpbnNpY3MuIGZvciBsYXJnZVxuKyAqIHNlcXVlbnRpYWwgY29waWVzLCBvciBhc3NpZ25tZW50cyBvZiBsYXJnZSBkYXRhIHN0cnVjdHVyZXMsXG4rICogdGhlIGZyb250ZW5kIHdpbGwgZ2VuZXJhdGUgYW4gaW50cmluc2ljIHRoYXQgY2F1c2VzIHRoZSBCUEZcbisgKiBiYWNrZW5kIHRvIGV4aXQgZHVlIHRvIGEgbWlzc2luZyBpbXBsZW1lbnRhdGlvbi4gUHJvdmlkZVxuKyAqIGltcGxlbWVudGF0aW9ucyBmb3IgdGhlIGludHJpbnNpYy5cbisgKi9cbitzdGF0aWMgaW5saW5lIGludCBhcmVuYV9tZW1zZXQoczggX19hcmVuYSAqZHN0LCBzOCB2YWwsIHNpemVfdCBzaXplKVxuK3tcbitcdHNpemVfdCBoZWFkYWxpZ247XG4rXHRzaXplX3QgdGFpbGFsaWduO1xuK1x0dTggdXZhbCA9ICh1OCl2YWw7XG4rXHRzaXplX3QgdmFsNjQ7XG4rXHRzaXplX3QgaTtcbitcbitcdC8qXG4rXHQgKiBDYWxjdWxhdGUgaG93IG1hbnkgYnl0ZXMgdG8gdGhlIG5leHQgd29yZC1hbGlnbmVkIG9uZS5cbitcdCAqIFdlIGdldCB0aGlzIGJ5IHRydW5jYXRpbmcgdGhlIDJzIGNvbXBsZW1lbnQgb2YgdGhlXG4rXHQgKiBwb2ludGVyIHRvIHRoZSBsYXN0IDMgYml0cy4gSW50dWl0aXZlbHksIHNpbmNlXG4rXHQgKlxuK1x0ICogVGhlIE4gTFNCcyBvZiBkc3QgYW5kIC1kc3QgYWRkIHRvIDEgXHUwMDNjXHUwMDNjIE4sIHdoaWNoXG4rXHQgKiBpcyB3aHkgZHN0ICsgKC1kc3QpID0gMHgwVUxMIHRocm91Z2ggb3ZlcmZsb3cuIFNvIHRoZVxuK1x0ICogbGFzdCBOID0gMyBiaXRzIG9mIHRoZSBuZWdhdGl2ZSBhcmUgdGhlIG51bWJlciBvZlxuK1x0ICogYnl0ZXMgdG8gYWxpZ24gZHN0IG9uIHRoZSBsYXN0IDMgYml0cy5cbitcdCAqXG4rXHQgKi9cbitcdGhlYWRhbGlnbiA9IC0odTY0KWRzdCBcdTAwMjYgKHNpemVvZih1NjQpIC0gMSk7XG4rXHRpZiAoIWhlYWRhbGlnbiB8fCBzaXplIFx1MDAzYyBoZWFkYWxpZ24pXG4rXHRcdGdvdG8gcHRyYWxpZ25lZDtcbitcbitcdGZvciAoaSA9IHplcm87IGkgXHUwMDNjIGhlYWRhbGlnbiBcdTAwMjZcdTAwMjYgY2FuX2xvb3A7IGkrKylcbitcdFx0ZHN0W2ldID0gdXZhbDtcbitcbitcdGRzdCArPSBoZWFkYWxpZ247XG4rXHRzaXplIC09IGhlYWRhbGlnbjtcbitcbitwdHJhbGlnbmVkOlxuK1xuK1x0LypcbitcdCAqIE1ha2UgYSB3b3JkIHdpdGggYWxsIGJ5dGVzIGVxdWFsIHRvIHRoZSBieXRlIHdlIGFyZSBzZXR0aW5nLlxuK1x0ICogU2luY2UgMSBieXRlIC1cdTAwM2UgMiBoZXggZGlnaXRzLlxuK1x0ICpcbitcdCAqIFNoaWZ0aW5nIHRoZSB2YWx1ZSBieSBhIDAgYnl0ZXMgaXMgZXF1YWwgdG8gbXVsdGlwbGljYXRpb24gYnkgMHgwMVxuK1x0ICogU2hpZnRpbmcgYnkgMSBieXRlcyBpcyBlcXVhbCB0byBtdWx0aXBsaWNhdGlvbiBieSAweDAxIFx1MDAzY1x1MDAzYyA4LFxuK1x0ICogLi4uXG4rXHQgKiBTaGlmdGluZyBieSA3IGJ5dGVzIGlzIGVxdWFsIHRvIG11bHRpcGxpY2F0aW9uIGJ5IDB4MDEgXHUwMDNjXHUwMDNjIDU2LlxuK1x0ICpcbitcdCAqIEVuZCBvcGVyYXRpb24gdG8gcmVwbGljYXRlIHRoZSBieXRlIGludG8gYWxsIHRoZSBieXRlcyBvZiBhIHdvcmRcbitcdCAqIGlzIChzaW5jZSBhIHwgYiA9IGEgKyBiIHdoZW4gYSBcdTAwMjYgYiA9PSAwKTpcbitcdCAqXG4rXHQgKiB2YWwgKyB2YWwgKiAoMVVMIFx1MDAzY1x1MDAzYyA4KSArIHZhbCAqICgxVUwgXHUwMDNjXHUwMDNjIDE2KSArIC4uICsgdmFsICogKDFVTCBcdTAwM2NcdTAwM2MgNTYpXG4rXHQgKiA9IHZhbCAqICgxVUwgXHUwMDNjXHUwMDNjIDU2ICsgMVVMIFx1MDAzY1x1MDAzYyA0OCArIC4uLiArIDFVTCBcdTAwM2NcdTAwM2MgMClcbitcdCAqID0gdmFsICogKDB4MDFVTCBcdTAwM2NcdTAwM2MgNTYgfCAweDAxVUwgXHUwMDNjXHUwMDNjIDQ4ICsgLi4uICsgMVVMIFx1MDAzY1x1MDAzYyAwKVxuK1x0ICogPSB2YWwgKiAweDAxMDEgMDEwMSAwMTAxIDAxMDFcbitcdCAqL1xuK1x0dmFsNjQgPSAodTgpdmFsICogMHgwMTAxMDEwMTAxMDEwMTAxVUxMO1xuK1xuK1x0LyogUG9pbnRlciBpcyBub3cgYWxpZ25lZCwgdXNlIHdvcmQtYWxpZ25lZCBhc3NpZ25tZW50cy4gKi9cbitcdGZvciAoaSA9IHplcm87IGkgXHUwMDNjIHNpemUgLyBzaXplb2YodTY0KSBcdTAwMjZcdTAwMjYgY2FuX2xvb3A7IGkrKylcbitcdFx0KCh1NjQgX19hcmVuYSAqKWRzdClbaV0gPSB2YWw2NDtcbitcbitcdC8qIEdvIGJhY2sgdG8gYnl0ZS1hbGlnbmVkIGZvciB0aGUgdGFpbC4gKi9cbitcdHRhaWxhbGlnbiA9IHNpemUgJSBzaXplb2YodTY0KTtcbitcdGRzdCArPSBzaXplIC0gdGFpbGFsaWduO1xuK1x0Zm9yIChpID0gemVybzsgaSBcdTAwM2MgdGFpbGFsaWduIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSsrKVxuK1x0XHRkc3RbaV0gPSB1dmFsO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuICNlbHNlIC8qICEgX19CUEZfXyAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY3N0ZGludC5oXHUwMDNlXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2JpdG1hcC5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9iaXRtYXAuYnBmLmNcbmluZGV4IDc2MzE5YTUyOWYwMmIuLmU2NmIzYTI2Y2EzZDYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYml0bWFwLmJwZi5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYml0bWFwLmJwZi5jXG5AQCAtMSwzICsxLDYgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTEdQTC0yLjEgT1IgQlNELTItQ2xhdXNlXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuK1xuICNpbmNsdWRlIFx1MDAzY2xpYmFyZW5hL2NvbW1vbi5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGliYXJlbmEvYXNhbi5oXHUwMDNlXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jXG5pbmRleCA1MTM1ZDVjNzJhNDZkLi5kZTY1NmI2OWQxM2FmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmNcbkBAIC0xMDMsMjMgKzEwMyw2IEBAIHZvbGF0aWxlIGJvb2wgYXNhbl9pbml0ZWQgPSBmYWxzZTtcbiAgKi9cbiB2b2xhdGlsZSBib29sIGFzYW5fcmVwb3J0X29uY2UgPSBmYWxzZTtcbiBcbi0vKlxuLSAqIEJQRiBkb2VzIG5vdCBjdXJyZW50bHkgc3VwcG9ydCB0aGUgbWVtc2V0L21lbWNweS9tZW1jbXAgaW50cmluc2ljcy5cbi0gKiBGb3IgbGFyZ2Ugc2VxdWVudGlhbCBjb3BpZXMsIG9yIGFzc2lnbm1lbnRzIG9mIGxhcmdlIGRhdGEgc3RydWN0dXJlcyxcbi0gKiB0aGUgZnJvbnRlbmQgd2lsbCBnZW5lcmF0ZSBhbiBpbnRyaW5zaWMgdGhhdCBjYXVzZXMgdGhlIEJQRiBiYWNrZW5kXG4tICogdG8gZXhpdCBkdWUgdG8gYSBtaXNzaW5nIGltcGxlbWVudGF0aW9uLiBQcm92aWRlIGEgc2ltcGxlIGltcGxlbWVudGF0aW9uXG4tICoganVzdCBmb3IgbWVtc2V0IHRvIHVzZSBpdCBmb3IgcG9pc29uaW5nL3VucG9pc29uaW5nIHRoZSBtYXAuXG4tICovXG4tX193ZWFrIGludCBhc2FuX21lbXNldChzOCBfX2FyZW5hICpkc3QsIHM4IHZhbCwgc2l6ZV90IHNpemUpXG4te1xuLVx0c2l6ZV90IGk7XG4tXG4tXHRmb3IgKGkgPSB6ZXJvOyBpIFx1MDAzYyBzaXplIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSsrKVxuLVx0XHRkc3RbaV0gPSB2YWw7XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4gLyogVmFsaWRhdGUgYSAxLWJ5dGUgYWNjZXNzLCBhbHdheXMgd2l0aGluIGEgc2luZ2xlIGJ5dGUuICovXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIG1lbW9yeV9pc19wb2lzb25lZF8xKHM4IF9fYXJlbmEgKmFkZHIpXG4ge1xuQEAgLTQyMiw3ICs0MDUsNyBAQCBfX2hpZGRlbiBfX25vYXNhbiBpbnQgYXNhbl9wb2lzb24odm9pZCBfX2FyZW5hICphZGRyLCBzOCB2YWwsIHNpemVfdCBzaXplKVxuIFx0c2hhZG93ID0gbWVtX3RvX3NoYWRvdyhhZGRyKTtcbiBcdGxlbiA9IHNpemUgXHUwMDNlXHUwMDNlIEFTQU5fU0hBRE9XX1NISUZUO1xuIFxuLVx0YXNhbl9tZW1zZXQoc2hhZG93LCB2YWwsIGxlbik7XG4rXHRhcmVuYV9tZW1zZXQoc2hhZG93LCB2YWwsIGxlbik7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNDYzLDcgKzQ0Niw3IEBAIF9faGlkZGVuIF9fbm9hc2FuIGludCBhc2FuX3VucG9pc29uKHZvaWQgX19hcmVuYSAqYWRkciwgc2l6ZV90IHNpemUpXG4gXHRzaGFkb3cgPSBtZW1fdG9fc2hhZG93KGFkZHIpO1xuIFx0bGVuID0gc2l6ZSBcdTAwM2VcdTAwM2UgQVNBTl9TSEFET1dfU0hJRlQ7XG4gXG4tXHRhc2FuX21lbXNldChzaGFkb3csIDAsIGxlbik7XG4rXHRhcmVuYV9tZW1zZXQoc2hhZG93LCAwLCBsZW4pO1xuIFxuIFx0LypcbiBcdCAqIElmIHdlIGFyZSBhbGxvY2F0aW5nIGEgbm9uLWdyYW51bGUgYWxpZ25lZCByZWdpb24sIHdlIG5lZWQgdG8gYWRqdXN0XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9iaXRtYXAuYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2JpdG1hcC5icGYuY1xuaW5kZXggNWZmOGU2ODhkZGM3Ni4uMDM5MGYyMGNlMzY2ZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYml0bWFwLmJwZi5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2JpdG1hcC5icGYuY1xuQEAgLTM0LDI0ICszNCw2IEBAIHZvaWQgYm1wX2ZyZWUoc3RydWN0IGFyZW5hX2JpdG1hcCBfX2FyZW5hICpibXApXG4gXHRhcmVuYV9mcmVlKGJtcCk7XG4gfVxuIFxuLV9fd2Vha1xuLXZvaWQgX19ibXBfc2V0X2JpdCh1MzIgYml0LCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcClcbi17XG4tXHRibXAtXHUwMDNlYml0c1tCSVRfV09SRChiaXQpXSB8PSBCSVRfTUFTSyhiaXQpO1xuLX1cbi1cbi1fX3dlYWtcbi12b2lkIF9fYm1wX2NsZWFyX2JpdCh1MzIgYml0LCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcClcbi17XG4tXHRibXAtXHUwMDNlYml0c1tCSVRfV09SRChiaXQpXSBcdTAwMjY9IH5CSVRfTUFTSyhiaXQpO1xuLX1cbi1cbi1fX3dlYWtcbi1ib29sIGJtcF90ZXN0X2JpdCh1MzIgYml0LCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcClcbi17XG4tXHRyZXR1cm4gYm1wLVx1MDAzZWJpdHNbQklUX1dPUkQoYml0KV0gXHUwMDI2IEJJVF9NQVNLKGJpdCk7XG4tfVxuLVxuIF9fd2Vha1xuIGJvb2wgYm1wX3Rlc3RfYW5kX2NsZWFyX2JpdCh1MzIgYml0LCBzdHJ1Y3QgYXJlbmFfYml0bWFwIF9fYXJlbmEgKmJtcClcbiB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9idWRkeS5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYnVkZHkuYnBmLmNcbmluZGV4IGM2NzRlZTVjZmNjMWQuLjI0OTBhYjEzOTZkZTAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2J1ZGR5LmJwZi5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2J1ZGR5LmJwZi5jXG5AQCAtNSw2ICs1LDggQEBcbiAjaW5jbHVkZSBcdTAwM2NsaWJhcmVuYS9hc2FuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaWJhcmVuYS9idWRkeS5oXHUwMDNlXG4gXG4rI2luY2x1ZGUgXHUwMDNjYnBmX2FyZW5hX3NwaW5fbG9jay5oXHUwMDNlXG4rXG4gLypcbiAgKiBCdWRkeSBhbGxvY2F0b3IgYXJlbmEtYmFzZWQgaW1wbGVtZW50YXRpb24uXG4gICpcbkBAIC00NSwxNSArNDcsOCBAQCBlbnVtIHtcbiBcdEJVRERZX0NIVU5LX1BBR0VTXHQ9IEJVRERZX0NIVU5LX0JZVEVTIC8gX19QQUdFX1NJWkVcbiB9O1xuIFxuLXN0YXRpYyBpbmxpbmUgaW50IGJ1ZGR5X2xvY2soc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KVxuLXtcbi1cdHJldHVybiBhcmVuYV9zcGluX2xvY2soXHUwMDI2YnVkZHktXHUwMDNlbG9jayk7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBidWRkeV91bmxvY2soc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KVxuLXtcbi1cdGFyZW5hX3NwaW5fdW5sb2NrKFx1MDAyNmJ1ZGR5LVx1MDAzZWxvY2spO1xuLX1cbisjZGVmaW5lIGJ1ZGR5X2xvY2soYnVkZHksIGZsYWdzKSAoYXJlbmFfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2KGJ1ZGR5KS1cdTAwM2Vsb2NrLCAoZmxhZ3MpKSlcbisjZGVmaW5lIGJ1ZGR5X3VubG9jayhidWRkeSwgZmxhZ3MpIChhcmVuYV9zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNihidWRkeSktXHUwMDNlbG9jaywgKGZsYWdzKSkpXG4gXG4gLypcbiAgKiBSZXNlcnZlIHBhcnQgb2YgdGhlIGFyZW5hIGFkZHJlc3Mgc3BhY2UgZm9yIHRoZSBhbGxvY2F0b3IuIFdlIHVzZVxuQEAgLTM4NSw2ICszODAsNyBAQCBzdGF0aWMgc3RydWN0IGJ1ZGR5X2NodW5rIF9fYXJlbmEgKmJ1ZGR5X2NodW5rX2dldChzdHJ1Y3QgYnVkZHkgX19hcmVuYSAqYnVkZHkpXG4ge1xuIFx0dTY0IG9yZGVyLCBvcmQsIG1pbl9vcmRlciwgbWF4X29yZGVyO1xuIFx0c3RydWN0IGJ1ZGR5X2NodW5rIF9fYXJlbmEgICpjaHVuaztcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRzaXplX3QgbGVmdDtcbiBcdGludCBwb3dlcjI7XG4gXHR1NjQgdmFkZHI7XG5AQCAtNDE2LDcgKzQxMiw3IEBAIHN0YXRpYyBzdHJ1Y3QgYnVkZHlfY2h1bmsgX19hcmVuYSAqYnVkZHlfY2h1bmtfZ2V0KHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG4gXG4tXHRpZiAoYnVkZHlfbG9jayhidWRkeSkpIHtcbitcdGlmIChidWRkeV9sb2NrKGJ1ZGR5LCBmbGFncykpIHtcbiBcdFx0LypcbiBcdFx0ICogV2UgY2Fubm90IHJlY2xhaW0gdGhlIHZhZGRyIHNwYWNlLCBidXQgdGhhdCBpcyBvayAtIHRoaXNcbiBcdFx0ICogb3BlcmF0aW9uIHNob3VsZCBhbHdheXMgc3VjY2VlZC4gVGhlIGVycm9yIHBhdGggaXMgdG8gY2F0Y2hcbkBAIC01MjAsNyArNTE2LDcgQEAgc3RhdGljIHN0cnVjdCBidWRkeV9jaHVuayBfX2FyZW5hICpidWRkeV9jaHVua19nZXQoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KVxuIFx0XHRcdGFyZW5hX3N0ZGVycihcbiBcdFx0XHRcdFwiY2h1bmsgaGFzIHNpemUgb2YgMHglbHggYnl0ZXMgKGxlZnQgJWx4IGJ5dGVzKVxcblwiLFxuIFx0XHRcdFx0c2l6ZW9mKCpjaHVuayksIGxlZnQpO1xuLVx0XHRcdGJ1ZGR5X3VubG9jayhidWRkeSk7XG4rXHRcdFx0YnVkZHlfdW5sb2NrKGJ1ZGR5LCBmbGFncyk7XG4gXG4gXHRcdFx0cmV0dXJuIE5VTEw7XG4gXHRcdH1cbkBAIC01MzEsNyArNTI3LDcgQEAgc3RhdGljIHN0cnVjdCBidWRkeV9jaHVuayBfX2FyZW5hICpidWRkeV9jaHVua19nZXQoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KVxuIFx0XHRvcmRlciA9IChwb3dlcjIgXHUwMDNlPSBCVUREWV9NSU5fQUxMT0NfU0hJRlQpID8gcG93ZXIyIC0gQlVERFlfTUlOX0FMTE9DX1NISUZUIDogMDtcbiBcbiBcdFx0aWYgKGlkeF9zZXRfYWxsb2NhdGVkKGNodW5rLCBpZHgsIHRydWUpKSB7XG4tXHRcdFx0YnVkZHlfdW5sb2NrKGJ1ZGR5KTtcbitcdFx0XHRidWRkeV91bmxvY2soYnVkZHksIGZsYWdzKTtcbiBcdFx0XHRyZXR1cm4gTlVMTDtcbiBcdFx0fVxuIFxuQEAgLTU0Nyw3ICs1NDMsNyBAQCBzdGF0aWMgc3RydWN0IGJ1ZGR5X2NodW5rIF9fYXJlbmEgKmJ1ZGR5X2NodW5rX2dldChzdHJ1Y3QgYnVkZHkgX19hcmVuYSAqYnVkZHkpXG4gXHRcdCAqL1xuIFx0XHRtaW5fb3JkZXIgPSBsZWZ0ID8gb3JkZXIgKyAxIDogb3JkZXI7XG4gXHRcdGlmIChhZGRfbGVmdG92ZXJzX3RvX2ZyZWVsaXN0KGNodW5rLCBpZHgsIG1pbl9vcmRlciwgbWF4X29yZGVyKSkge1xuLVx0XHRcdGJ1ZGR5X3VubG9jayhidWRkeSk7XG4rXHRcdFx0YnVkZHlfdW5sb2NrKGJ1ZGR5LCBmbGFncyk7XG4gXHRcdFx0cmV0dXJuIE5VTEw7XG4gXHRcdH1cbiBcbkBAIC01NTYsNyArNTUyLDcgQEAgc3RhdGljIHN0cnVjdCBidWRkeV9jaHVuayBfX2FyZW5hICpidWRkeV9jaHVua19nZXQoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KVxuIFx0XHRtYXhfb3JkZXIgPSBvcmRlcjtcbiBcdH1cbiBcbi1cdGJ1ZGR5X3VubG9jayhidWRkeSk7XG4rXHRidWRkeV91bmxvY2soYnVkZHksIGZsYWdzKTtcbiBcbiBcdHJldHVybiBjaHVuaztcbiB9XG5AQCAtNTY0LDYgKzU2MCw3IEBAIHN0YXRpYyBzdHJ1Y3QgYnVkZHlfY2h1bmsgX19hcmVuYSAqYnVkZHlfY2h1bmtfZ2V0KHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSlcbiBfX3dlYWsgaW50IGJ1ZGR5X2luaXQoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KVxuIHtcbiBcdHN0cnVjdCBidWRkeV9jaHVuayBfX2FyZW5hICpjaHVuaztcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRpbnQgcmV0O1xuIFxuIFx0aWYgKCFhc2FuX3JlYWR5KCkpXG5AQCAtNTc5LDcgKzU3Niw3IEBAIF9fd2VhayBpbnQgYnVkZHlfaW5pdChzdHJ1Y3QgYnVkZHkgX19hcmVuYSAqYnVkZHkpXG4gXG4gXHRjaHVuayA9IGJ1ZGR5X2NodW5rX2dldChidWRkeSk7XG4gXG4tXHRpZiAoYnVkZHlfbG9jayhidWRkeSkpIHtcbitcdGlmIChidWRkeV9sb2NrKGJ1ZGR5LCBmbGFncykpIHtcbiBcdFx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsIGNodW5rLCBCVUREWV9DSFVOS19QQUdFUyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuQEAgLTU5MSw3ICs1ODgsNyBAQCBfX3dlYWsgaW50IGJ1ZGR5X2luaXQoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KVxuIFx0LyogUHV0IHRoZSBjaHVuayBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0LiAqL1xuIFx0YnVkZHktXHUwMDNlZmlyc3RfY2h1bmsgPSBjaHVuaztcbiBcbi1cdGJ1ZGR5X3VubG9jayhidWRkeSk7XG4rXHRidWRkeV91bmxvY2soYnVkZHksIGZsYWdzKTtcbiBcbiBcdHJldHVybiBjaHVuayA/IDAgOiAtRU5PTUVNO1xuIH1cbkBAIC03MzAsOSArNzI3LDEwIEBAIHN0YXRpYyB1NjQgYnVkZHlfYWxsb2NfZnJvbV9leGlzdGluZ19jaHVua3Moc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5LCBpbnQgb3JkXG4gICovXG4gc3RhdGljIHU2NCBidWRkeV9hbGxvY19mcm9tX25ld19jaHVuayhzdHJ1Y3QgYnVkZHkgX19hcmVuYSAqYnVkZHksIHN0cnVjdCBidWRkeV9jaHVuayBfX2FyZW5hICpjaHVuaywgaW50IG9yZGVyKVxuIHtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHR1NjQgYWRkcmVzcztcbiBcbi1cdGlmIChidWRkeV9sb2NrKGJ1ZGR5KSlcbitcdGlmIChidWRkeV9sb2NrKGJ1ZGR5LCBmbGFncykpXG4gXHRcdHJldHVybiAodTY0KU5VTEw7XG4gXG4gXG5AQCAtNzQ1LDcgKzc0Myw3IEBAIHN0YXRpYyB1NjQgYnVkZHlfYWxsb2NfZnJvbV9uZXdfY2h1bmsoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5LCBzdHJ1Y3QgYnVkZHlfXG4gXG4gXHRhZGRyZXNzID0gYnVkZHlfY2h1bmtfYWxsb2MoYnVkZHktXHUwMDNlZmlyc3RfY2h1bmssIG9yZGVyKTtcbiBcbi1cdGJ1ZGR5X3VubG9jayhidWRkeSk7XG4rXHRidWRkeV91bmxvY2soYnVkZHksIGZsYWdzKTtcbiBcbiBcdHJldHVybiAodTY0KWFkZHJlc3M7XG4gfVxuQEAgLTc1NCw2ICs3NTIsNyBAQCB2b2lkIF9fYXJlbmEgKmJ1ZGR5X2FsbG9jKHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSwgc2l6ZV90IHNpemUpXG4ge1xuIFx0dm9pZCBfX2FyZW5hICphZGRyZXNzID0gTlVMTDtcbiBcdHN0cnVjdCBidWRkeV9jaHVuayBfX2FyZW5hICpjaHVuaztcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRpbnQgb3JkZXI7XG4gXG4gXHRpZiAoIWJ1ZGR5KVxuQEAgLTc2NSwxMSArNzY0LDExIEBAIHZvaWQgX19hcmVuYSAqYnVkZHlfYWxsb2Moc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5LCBzaXplX3Qgc2l6ZSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG4gXG4tXHRpZiAoYnVkZHlfbG9jayhidWRkeSkpXG4rXHRpZiAoYnVkZHlfbG9jayhidWRkeSwgZmxhZ3MpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbiBcdGFkZHJlc3MgPSAodTggX19hcmVuYSAqKWJ1ZGR5X2FsbG9jX2Zyb21fZXhpc3RpbmdfY2h1bmtzKGJ1ZGR5LCBvcmRlcik7XG4tXHRidWRkeV91bmxvY2soYnVkZHkpO1xuK1x0YnVkZHlfdW5sb2NrKGJ1ZGR5LCBmbGFncyk7XG4gXHRpZiAoYWRkcmVzcylcbiBcdFx0Z290byBkb25lO1xuIFxuQEAgLTg4MCw2ICs4NzksNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBidWRkeV9mcmVlX3VubG9ja2VkKHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSwgdTY0XG4gXG4gX193ZWFrIGludCBidWRkeV9mcmVlKHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSwgdm9pZCBfX2FyZW5hICphZGRyKVxuIHtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRpbnQgcmV0O1xuIFxuIFx0aWYgKCFidWRkeSlcbkBAIC04ODksMTMgKzg4OSwxMyBAQCBfX3dlYWsgaW50IGJ1ZGR5X2ZyZWUoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5LCB2b2lkIF9fYXJlbmEgKmFkZHIpXG4gXHRpZiAoIWFkZHIpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0cmV0ID0gYnVkZHlfbG9jayhidWRkeSk7XG4rXHRyZXQgPSBidWRkeV9sb2NrKGJ1ZGR5LCBmbGFncyk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0cmV0ID0gYnVkZHlfZnJlZV91bmxvY2tlZChidWRkeSwgKHU2NClhZGRyKTtcbiBcbi1cdGJ1ZGR5X3VubG9jayhidWRkeSk7XG4rXHRidWRkeV91bmxvY2soYnVkZHksIGZsYWdzKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvY29tbW9uLmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9jb21tb24uYnBmLmNcbmluZGV4IDU2OWYwZjY0ZDUxOGIuLjc4NWQ0ODcyY2I0OTQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2NvbW1vbi5icGYuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9jb21tb24uYnBmLmNcbkBAIC0xLDUgKzEsNyBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBMR1BMLTIuMSBPUiBCU0QtMi1DbGF1c2VcbiAvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXG4rI2luY2x1ZGUgXHUwMDNjbGltaXRzLmhcdTAwM2VcbitcbiAjaW5jbHVkZSBcdTAwM2NsaWJhcmVuYS9jb21tb24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpYmFyZW5hL2FzYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpYmFyZW5hL2J1ZGR5LmhcdTAwM2VcbkBAIC00OCwxMCArNTAsMzMgQEAgX193ZWFrIHZvaWQgX19hcmVuYSAqYXJlbmFfbWFsbG9jKHNpemVfdCBzaXplKVxuIFx0cmV0dXJuIGJ1ZGR5X2FsbG9jKFx1MDAyNmJ1ZGR5LCBzaXplKTtcbiB9XG4gXG4rX193ZWFrIHZvaWQgX19hcmVuYSAqYXJlbmFfY2FsbG9jKHNpemVfdCBuY291bnQsIHNpemVfdCBzaXplKVxuK3tcbitcdHZvaWQgX19hcmVuYSAqbWVtO1xuK1x0c2l6ZV90IHRvdGFsO1xuK1xuK1x0LypcbitcdCAqIElkZWFsbHkgd2UnZCBiZSB1c2luZyBfX2J1aWx0aW5fbXVsX292ZXJmbG93IGhlcmUsXG4rXHQgKiBidXQgdGhlIEJQRiBjb21waWxlciBiYWNrZW5kIGRvZXNuJ3QgaW1wbGVtZW50IF9fbXVsdGkzLlxuK1x0ICogVGhlcmUgYXJlIHdheXMgdG8gb3B0aW1pemUgdGhlIGRpdmlzaW9uIGF3YXkgZnJvbSB0aGVcbitcdCAqIG92ZXJmbG93IGNoZWNrLCBidXQgYW55IGNvc3RzIGFyZSBkd2FyZmVkIGJ5IHRoZVxuK1x0ICogYnVkZHlfYWxsb2MoKSBjYWxsLiBLZWVwIGl0IHNpbXBsZSBmb3Igbm93LlxuK1x0ICovXG4rXHRpZiAodW5saWtlbHkobmNvdW50IFx1MDAyNlx1MDAyNiBzaXplIFx1MDAzZT0gVUxMT05HX01BWCAvIG5jb3VudCkpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0dG90YWwgPSBuY291bnQgKiBzaXplO1xuK1xuK1x0bWVtID0gYnVkZHlfYWxsb2MoXHUwMDI2YnVkZHksIHRvdGFsKTtcbitcdGlmIChsaWtlbHkobWVtKSlcbitcdFx0YXJlbmFfbWVtc2V0KG1lbSwgMCwgdG90YWwpO1xuK1xuK1x0cmV0dXJuIG1lbTtcbit9XG4rXG4gX193ZWFrIHZvaWQgYXJlbmFfZnJlZSh2b2lkIF9fYXJlbmEgKnB0cilcbiB7XG4gXHRidWRkeV9mcmVlKFx1MDAyNmJ1ZGR5LCBwdHIpO1xuIH1cbiBcbi1cbiBjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxOTo0Mzo0My43NDk5OTk0MzJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTk4MzA2NzAwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipCUEYgU2VsZnRlc3RzIFBhdGNoIEFuYWx5c2lzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCBzZXJpZXMgbmVjZXNzaXRhdGVzIGZ1enppbmcuIFRoZSBmaWxlcyBsaXN0ZWQgYXJlIGFsbCBuZXN0bGVkIHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2AuIE15IGltbWVkaWF0ZSByZWFjdGlvbiBpczogKm5vdCBrZXJuZWwgY29yZSBjb2RlKi4gVGhpcyBsb29rcyBsaWtlIEJQRiBzZWxmLXRlc3RzIGFuZCBiZW5jaG1hcmtzLiBJJ20gcHJldHR5IGNlcnRhaW4gdGhpcyBpcyB1c2VyLXNwYWNlIHRvb2xpbmcgZGVzaWduZWQgZm9yIHRlc3RpbmcsIG5vdCBrZXJuZWwgZnVuY3Rpb25hbGl0eS5cblxuVGhlIHByb21wdCBzdGF0ZXMgY2xlYXIgY3JpdGVyaWEgZm9yIHdoZW4gYSBwYXRjaCAqZG9lc24ndCogd2FycmFudCBmdXp6aW5nLiBUaGluZ3MgbGlrZSBkb2N1bWVudGF0aW9uIHVwZGF0ZXMsIGxvZ2dpbmcgY2hhbmdlcywgZGVjb3JhdGl2ZSBtb2RpZmljYXRpb25zLCB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzLCBhbmQgc3BlY2lmaWMgZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyBhcmUgYWxsIGV4ZW1wdC4gVGhpcyBzZWVtcyBsaWtlIGl0IHdvdWxkIGJlIHJlbGF0ZWQuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgYmVjYXVzZSBpdCdzIGFsd2F5cyBnb29kIHRvIGJlIHRob3JvdWdoLiBPa2F5LCBhIHF1aWNrIGdsYW5jZSBhdCB0aGUgZmlsZSBsaXN0IGNvbmZpcm1zIG15IGluaXRpYWwgYXNzZXNzbWVudC4gQWxsIHBhdGhzIGJlZ2luIHdpdGggYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9gLiBUaGlzIHBhdGNoICpvbmx5KiB0b3VjaGVzIEJQRiBzZWxmLXRlc3RzIGFuZCByZWxhdGVkIGJlbmNobWFyayBjb2RlLiBJdCdzIG5vdCBtb2RpZnlpbmcgYW55IGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiBUaGUgY29udGV4dCBpcyB2ZXJ5IGNsZWFybHkgdXNlci1zcGFjZSB0b29scyBhbmQgQlBGIHByb2dyYW1zIGZvciB0ZXN0aW5nLiBObyBjaGFuY2Ugb2YgYW55IGNvcmUga2VybmVsIHNpZGUgZWZmZWN0cy5cblxuVGhlcmVmb3JlLCBhcHBseWluZyB0aGUgcHJvdmlkZWQgY3JpdGVyaWEsIEknbSBjb25maWRlbnQgaW4gY29uY2x1ZGluZyB0aGF0IHRoaXMgcGF0Y2ggZG9lc24ndCB3YXJyYW50IGZ1enppbmcgYnkgYSB0b29sIGxpa2Ugc3l6a2FsbGVyLCB3aGljaCB0YXJnZXRzIHRoZSBrZXJuZWwgaXRzZWxmLlxuXG5Xb3J0aEZ1enppbmc9ZmFsc2UuIExldCdzIGdldCB0aGF0IGxvZ2dlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyMzAsIk91dHB1dFRva2VucyI6NzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MjksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxOTo0NDoxMy43MzMwNjg5MDNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgQlBGIHNlbGZ0ZXN0cyBhbmQgYmVuY2htYXJrcyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBCUEYgc2VsZnRlc3RzIGFuZCBiZW5jaG1hcmtzIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8uIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxOTo0NDoxMy43MzMwOTcxNDNaIiwiU2VxIjo1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowp4p78[1] Phase: Running StartedAt: 2026-08-17 19:44:24 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4p78[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-17 19:44:24 +0000 UTC FinishedAt: 2026-08-17 19:44:28 +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,}