Name: series-workflowfdc7s Phase: Failed StartedAt: 2026-09-04 12:30:32 +0000 UTC FinishedAt: 2026-09-04 13:15:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfdc7s[0] Phase: Succeeded StartedAt: 2026-09-04 12:30:32 +0000 UTC FinishedAt: 2026-09-04 13:15:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfdc7s[0].run-triage Phase: Succeeded StartedAt: 2026-09-04 12:30:32 +0000 UTC FinishedAt: 2026-09-04 13:15:19 +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+CgkJCTx0ZD4yMDI2LzA5LzA0IDEzOjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIGNvZGUgdW5kZXIgdG9vbHMvIChzcGVjaWZpY2FsbHkgbGliYnBmLCBicGZ0b29sLCBhbmQgc2VsZnRlc3RzKSwgaW50cm9kdWNpbmcgdXNlci1zcGFjZSBoZWxwZXIgZnVuY3Rpb25zIGJwZl9wcm9ncmFtX19hZGRfZmxhZ3MoKSBhbmQgYnBmX3Byb2dyYW1fX2NsZWFyX2ZsYWdzKCkuIE5vIGtlcm5lbC1zcGFjZSBjb2RlICh2bWxpbnV4IG9yIG1vZHVsZXMpIGlzIHRvdWNoZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEzOjE0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjYzNjA5Njk5ZjY5ZTcxZmM0OWE4NDEyNmY5MjZhN2IzZDhmZTJiZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMTM6MTQ6NDkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvYnBmL2JwZnRvb2wvcHJvZy5jIGIvdG9vbHMvYnBmL2JwZnRvb2wvcHJvZy5jXG5pbmRleCA4YzJmOTI1NWIzNmQ3Li42YWI5MTFlODIxNTUxIDEwMDY0NFxuLS0tIGEvdG9vbHMvYnBmL2JwZnRvb2wvcHJvZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9icGYvYnBmdG9vbC9wcm9nLmNcbkBAIC0xNzY5LDcgJiM0MzsxNzY5LDcgQEAgc3RhdGljIGludCBsb2FkX3dpdGhfb3B0aW9ucyhpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGJvb2wgZmlyc3RfcHJvZ19vbmx5KVxuIFx0XHR9XG4gXG4gXHRcdGlmIChwcm9nX3R5cGUgPT0gQlBGX1BST0dfVFlQRV9YRFAgXHUwMDI2XHUwMDI2IHhkcG1ldGFfaWZpbmRleCkge1xuLVx0XHRcdGJwZl9wcm9ncmFtX19zZXRfZmxhZ3MocG9zLCBicGZfcHJvZ3JhbV9fZmxhZ3MocG9zKSB8IEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWSk7XG4mIzQzO1x0XHRcdGJwZl9wcm9ncmFtX19hZGRfZmxhZ3MocG9zLCBCUEZfRl9YRFBfREVWX0JPVU5EX09OTFkpO1xuIFx0XHRcdGJwZl9wcm9ncmFtX19zZXRfaWZpbmRleChwb3MsIHhkcG1ldGFfaWZpbmRleCk7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0YnBmX3Byb2dyYW1fX3NldF9pZmluZGV4KHBvcywgb2ZmbG9hZF9pZmluZGV4KTtcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5jIGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xuaW5kZXggYzAzNmU4YTkxZWQ4OC4uMjIxYzRmZTFmYjMxOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbkBAIC05OTM4LDYgJiM0Mzs5OTM4LDE2IEBAIGludCBicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgX191MzIgZmxhZ3MpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO2ludCBicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgX191MzIgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYnBmX3Byb2dyYW1fX3NldF9mbGFncyhwcm9nLCBwcm9nLVx1MDAzZXByb2dfZmxhZ3MgfCBmbGFncyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBicGZfcHJvZ3JhbV9fY2xlYXJfZmxhZ3Moc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBfX3UzMiBmbGFncylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKHByb2csIHByb2ctXHUwMDNlcHJvZ19mbGFncyBcdTAwMjYgfmZsYWdzKTtcbiYjNDM7fVxuJiM0MztcbiBfX3UzMiBicGZfcHJvZ3JhbV9fbG9nX2xldmVsKGNvbnN0IHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZylcbiB7XG4gXHRyZXR1cm4gcHJvZy1cdTAwM2Vsb2dfbGV2ZWw7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9saWJicGYuaCBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcbmluZGV4IGI5NjVhZDU3MTU0MDMuLjM5MzJiZjljYjQ5MDMgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvYnBmL2xpYmJwZi5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2xpYmJwZi5oXG5AQCAtMTAxMSw2ICYjNDM7MTAxMSwxMiBAQCBicGZfcHJvZ3JhbV9fc2V0X2V4cGVjdGVkX2F0dGFjaF90eXBlKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyxcbiBMSUJCUEZfQVBJIF9fdTMyIGJwZl9wcm9ncmFtX19mbGFncyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cpO1xuIExJQkJQRl9BUEkgaW50IGJwZl9wcm9ncmFtX19zZXRfZmxhZ3Moc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBfX3UzMiBmbGFncyk7XG4gXG4mIzQzOy8qIENvbnZlbmllbmNlIGhlbHBlcnMgdG8gbm9uLWRlc3RydWN0aXZlbHkgYWRkIG9yIGNsZWFyIHRoZSBzcGVjaWZpZWQgZmxhZ3NcbiYjNDM7ICogaW5zdGVhZCBvZiBjbG9iYmVyaW5nIHRoZW0gYXMgYnBmX3Byb2dyYW1fX3NldF9mbGFncygpIGRvZXMuXG4mIzQzOyAqL1xuJiM0MztMSUJCUEZfQVBJIGludCBicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgX191MzIgZmxhZ3MpO1xuJiM0MztMSUJCUEZfQVBJIGludCBicGZfcHJvZ3JhbV9fY2xlYXJfZmxhZ3Moc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBfX3UzMiBmbGFncyk7XG4mIzQzO1xuIC8qIFBlci1wcm9ncmFtIGxvZyBsZXZlbCBhbmQgbG9nIGJ1ZmZlciBnZXR0ZXJzL3NldHRlcnMuXG4gICogU2VlIGJwZl9vYmplY3Rfb3Blbl9vcHRzIGNvbW1lbnRzIHJlZ2FyZGluZyBsb2dfbGV2ZWwgYW5kIGxvZ19idWZcbiAgKiBpbnRlcmFjdGlvbnMuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9saWJicGYubWFwIGIvdG9vbHMvbGliL2JwZi9saWJicGYubWFwXG5pbmRleCAwOGFiMmVhODgxZmI2Li5hODExYTFiM2EwODU3IDEwMDY0NFxuLS0tIGEvdG9vbHMvbGliL2JwZi9saWJicGYubWFwXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2xpYmJwZi5tYXBcbkBAIC00NTgsNyAmIzQzOzQ1OCw5IEBAIExJQkJQRl8xLjcuMCB7XG4gXG4gTElCQlBGXzEuOC4wIHtcbiBcdGdsb2JhbDpcbiYjNDM7XHRcdGJwZl9wcm9ncmFtX19hZGRfZmxhZ3M7XG4gXHRcdGJwZl9wcm9ncmFtX19hdHRhY2hfdHJhY2luZ19tdWx0aTtcbiYjNDM7XHRcdGJwZl9wcm9ncmFtX19jbGVhcl9mbGFncztcbiBcdFx0YnBmX3Byb2dyYW1fX2Nsb25lO1xuIFx0XHRidGZfX2ZpbmRfYnlfbmFtZV9raW5kX293bjtcbiBcdFx0YnRmX19uZXdfZW1wdHlfb3B0cztcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hdHRhY2hfcHJvYmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2F0dGFjaF9wcm9iZS5jXG5pbmRleCA3ZGFkYjkwZTdiNjg5Li40MTEzNmUxYzc3NTJlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXR0YWNoX3Byb2JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2F0dGFjaF9wcm9iZS5jXG5AQCAtNTQzLDkgJiM0Mzs1NDMsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2twcm9iZV9zbGVlcGFibGUodm9pZClcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Lyogc2xlZXBhYmxlIGtwcm9iZSB0ZXN0IGNhc2UgbmVlZHMgZmxhZ3Mgc2V0IGJlZm9yZSBsb2FkaW5nICovXG4tXHRpZiAoIUFTU0VSVF9PSyhicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKFxuLVx0XHRcdCAgICAgICBza2VsLVx1MDAzZXByb2dzLmhhbmRsZV9rcHJvYmVfc2xlZXBhYmxlLFxuLVx0XHRcdCAgICAgICBicGZfcHJvZ3JhbV9fZmxhZ3Moc2tlbC1cdTAwM2Vwcm9ncy5oYW5kbGVfa3Byb2JlX3NsZWVwYWJsZSkgfCBCUEZfRl9TTEVFUEFCTEUpLFxuJiM0MztcdGlmICghQVNTRVJUX09LKGJwZl9wcm9ncmFtX19hZGRfZmxhZ3Moc2tlbC1cdTAwM2Vwcm9ncy5oYW5kbGVfa3Byb2JlX3NsZWVwYWJsZSwgQlBGX0ZfU0xFRVBBQkxFKSxcbiBcdFx0ICAgICAgIFwmIzM0O2twcm9iZV9zbGVlcGFibGVfZmxhZ3NcJiMzNDspKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3ZlcmlmX3NjYWxlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfdmVyaWZfc2NhbGUuY1xuaW5kZXggNjUyMzA3YTFiMjJlNy4uOTAyYTcwZDVhZmViNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl92ZXJpZl9zY2FsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfdmVyaWZfc2NhbGUuY1xuQEAgLTM1LDcgJiM0MzszNSw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfbG9hZChjb25zdCBjaGFyICpmaWxlLCBlbnVtIGJwZl9wcm9nX3R5cGUgdHlwZSlcbiBcdH1cbiBcbiBcdGJwZl9wcm9ncmFtX19zZXRfdHlwZShwcm9nLCB0eXBlKTtcbi1cdGJwZl9wcm9ncmFtX19zZXRfZmxhZ3MocHJvZywgYnBmX3Byb2dyYW1fX2ZsYWdzKHByb2cpIHwgdGVzdGluZ19wcm9nX2ZsYWdzKCkpO1xuJiM0MztcdGJwZl9wcm9ncmFtX19hZGRfZmxhZ3MocHJvZywgdGVzdGluZ19wcm9nX2ZsYWdzKCkpO1xuIFx0YnBmX3Byb2dyYW1fX3NldF9sb2dfbGV2ZWwocHJvZywgNCB8IGV4dHJhX3Byb2dfbG9hZF9sb2dfZmxhZ3MpO1xuIFxuIFx0ZXJyID0gYnBmX29iamVjdF9fbG9hZChvYmopO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tlcm5lbF9mbGFnLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rZXJuZWxfZmxhZy5jXG5pbmRleCAyNWViNTlmNDYwYWJlLi43MmMwZWY4ZGE0MDllIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva2VybmVsX2ZsYWcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva2VybmVsX2ZsYWcuY1xuQEAgLTEwLDE1ICYjNDM7MTAsMzEgQEAgdm9pZCB0ZXN0X2tlcm5lbF9mbGFnKHZvaWQpXG4gXHRzdHJ1Y3QgdGVzdF9rZXJuZWxfZmxhZyAqbHNtX3NrZWw7XG4gXHRzdHJ1Y3Qga2Z1bmNfY2FsbF90ZXN0ICpza2VsID0gTlVMTDtcbiBcdHN0cnVjdCBrZnVuY19jYWxsX3Rlc3RfbHNrZWwgKmxza2VsID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2c7XG4mIzQzO1x0X191MzIgZmxhZ3M7XG4gXHRpbnQgcmV0O1xuIFxuLVx0bHNtX3NrZWwgPSB0ZXN0X2tlcm5lbF9mbGFnX19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0bHNtX3NrZWwgPSB0ZXN0X2tlcm5lbF9mbGFnX19vcGVuKCk7XG4gXHRpZiAoIUFTU0VSVF9PS19QVFIobHNtX3NrZWwsIFwmIzM0O2xzbV9za2VsXCYjMzQ7KSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0QVNTRVJUX0VRKGJwZl9wcm9ncmFtX19mbGFncyhsc21fc2tlbC1cdTAwM2Vwcm9ncy5icGYpIFx1MDAyNiBCUEZfRl9TTEVFUEFCTEUsXG4mIzQzO1x0cHJvZyA9IGxzbV9za2VsLVx1MDAzZXByb2dzLmJwZjtcbiYjNDM7XHRmbGFncyA9IGJwZl9wcm9ncmFtX19mbGFncyhwcm9nKTtcbiYjNDM7XHRBU1NFUlRfRVEoZmxhZ3MgXHUwMDI2IEJQRl9GX1NMRUVQQUJMRSxcbiBcdFx0ICBCUEZfRl9TTEVFUEFCTEUsIFwmIzM0O3NsZWVwYWJsZSBpbiBwcm9ncmFtIGZsYWdzXCYjMzQ7KTtcbiBcbiYjNDM7XHRyZXQgPSBicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHByb2csIEJQRl9GX0FOWV9BTElHTk1FTlQpO1xuJiM0MztcdEFTU0VSVF9PSyhyZXQsIFwmIzM0O2JwZl9wcm9ncmFtX19hZGRfZmxhZ3MgcmV0XCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoYnBmX3Byb2dyYW1fX2ZsYWdzKHByb2cpLCBmbGFncyB8IEJQRl9GX0FOWV9BTElHTk1FTlQsXG4mIzQzO1x0XHQgIFwmIzM0O2JwZl9wcm9ncmFtX19hZGRfZmxhZ3MgdmFsdWVcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBicGZfcHJvZ3JhbV9fY2xlYXJfZmxhZ3MocHJvZywgQlBGX0ZfQU5ZX0FMSUdOTUVOVCk7XG4mIzQzO1x0QVNTRVJUX09LKHJldCwgXCYjMzQ7YnBmX3Byb2dyYW1fX2NsZWFyX2ZsYWdzIHJldFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKGJwZl9wcm9ncmFtX19mbGFncyhwcm9nKSwgZmxhZ3MsIFwmIzM0O2JwZl9wcm9ncmFtX19jbGVhcl9mbGFncyB2YWx1ZVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHJldCA9IHRlc3Rfa2VybmVsX2ZsYWdfX2xvYWQobHNtX3NrZWwpO1xuJiM0MztcdEFTU0VSVF9PSyhyZXQsIFwmIzM0O3Rlc3Rfa2VybmVsX2ZsYWdfX2xvYWRcJiMzNDspO1xuJiM0MztcbiBcdGxzbV9za2VsLVx1MDAzZWJzcy1cdTAwM2Vtb25pdG9yZWRfdGlkID0gc3lzX2dldHRpZCgpO1xuIFxuIFx0cmV0ID0gdGVzdF9rZXJuZWxfZmxhZ19fYXR0YWNoKGxzbV9za2VsKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rcHJvYmVfbXVsdGlfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3Byb2JlX211bHRpX3Rlc3QuY1xuaW5kZXggZWQzZmQwYTg4ZGFiNi4uNjUxMTIzY2Q4NjAyZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2twcm9iZV9tdWx0aV90ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2twcm9iZV9tdWx0aV90ZXN0LmNcbkBAIC0zNjEsOCAmIzQzOzM2MSw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfYXR0YWNoX2FwaV9mYWlscyh2b2lkKVxuIFxuIFx0c2xfc2tlbC1cdTAwM2Vic3MtXHUwMDNldXNlcl9wdHIgPSBzbF9za2VsO1xuIFxuLVx0ZXJyID0gYnBmX3Byb2dyYW1fX3NldF9mbGFncyhzbF9za2VsLVx1MDAzZXByb2dzLmhhbmRsZV9rcHJvYmVfbXVsdGlfc2xlZXBhYmxlLFxuLVx0XHRcdFx0ICAgICBicGZfcHJvZ3JhbV9fZmxhZ3Moc2xfc2tlbC1cdTAwM2Vwcm9ncy5oYW5kbGVfa3Byb2JlX211bHRpX3NsZWVwYWJsZSkgfCBCUEZfRl9TTEVFUEFCTEUpO1xuJiM0MztcdGVyciA9IGJwZl9wcm9ncmFtX19hZGRfZmxhZ3Moc2xfc2tlbC1cdTAwM2Vwcm9ncy5oYW5kbGVfa3Byb2JlX211bHRpX3NsZWVwYWJsZSwgQlBGX0ZfU0xFRVBBQkxFKTtcbiBcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7c2xlZXBfc2tlbF9zZXRfZmxhZ3NcJiMzNDspKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX21ldGFkYXRhLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfbWV0YWRhdGEuY1xuaW5kZXggMDQ3ZGZkYzMyMmEyZi4uM2FiOTYzNDU4OTAzZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9tZXRhZGF0YS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfbWV0YWRhdGEuY1xuQEAgLTQwOCwxNCAmIzQzOzQwOCwxNCBAQCB2b2lkIHRlc3RfeGRwX21ldGFkYXRhKHZvaWQpXG4gXG4gXHRwcm9nID0gYnBmX29iamVjdF9fZmluZF9wcm9ncmFtX2J5X25hbWUoYnBmX29iai1cdTAwM2VvYmosIFwmIzM0O3J4XCYjMzQ7KTtcbiBcdGJwZl9wcm9ncmFtX19zZXRfaWZpbmRleChwcm9nLCByeF9pZmluZGV4KTtcbi1cdGJwZl9wcm9ncmFtX19zZXRfZmxhZ3MocHJvZywgYnBmX3Byb2dyYW1fX2ZsYWdzKHByb2cpIHwgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTtcbiYjNDM7XHRicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHByb2csIEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWSk7XG4gXG4gXHQvKiBNYWtlIHN1cmUgd2UgY2FuIGxvYWQgYSBkZXYtYm91bmQgcHJvZ3JhbSB0aGF0IHBlcmZvcm1zXG4gXHQgKiBYRFBfUkVESVJFQ1QgaW50byBhIGRldm1hcC5cbiBcdCAqL1xuIFx0bmV3X3Byb2cgPSBicGZfb2JqZWN0X19maW5kX3Byb2dyYW1fYnlfbmFtZShicGZfb2JqLVx1MDAzZW9iaiwgXCYjMzQ7cmVkaXJlY3RcJiMzNDspO1xuIFx0YnBmX3Byb2dyYW1fX3NldF9pZmluZGV4KG5ld19wcm9nLCByeF9pZmluZGV4KTtcbi1cdGJwZl9wcm9ncmFtX19zZXRfZmxhZ3MobmV3X3Byb2csIGJwZl9wcm9ncmFtX19mbGFncyhuZXdfcHJvZykgfCBCUEZfRl9YRFBfREVWX0JPVU5EX09OTFkpO1xuJiM0MztcdGJwZl9wcm9ncmFtX19hZGRfZmxhZ3MobmV3X3Byb2csIEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWSk7XG4gXG4gXHRpZiAoIUFTU0VSVF9PSyh4ZHBfbWV0YWRhdGFfX2xvYWQoYnBmX29iaiksIFwmIzM0O2xvYWQgc2tlbGV0b25cJiMzNDspKVxuIFx0XHRnb3RvIG91dDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jXG5pbmRleCA3OTRhN2RmYjA1Nzk2Li4yODcyNGRlMDYzMjIwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jXG5AQCAtNzQ4LDcgJiM0Mzs3NDgsNyBAQCBzdGF0aWMgdm9pZCBwcmVwYXJlX2Nhc2Uoc3RydWN0IHRlc3RfbG9hZGVyICp0ZXN0ZXIsXG4gXHRcdFx0IHN0cnVjdCBicGZfb2JqZWN0ICpvYmosXG4gXHRcdFx0IHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZylcbiB7XG4tXHRpbnQgbWluX2xvZ19sZXZlbCA9IDAsIHByb2dfZmxhZ3M7XG4mIzQzO1x0aW50IG1pbl9sb2dfbGV2ZWwgPSAwO1xuIFxuIFx0aWYgKGVudi52ZXJib3NpdHkgXHUwMDNlIFZFUkJPU0VfTk9ORSlcbiBcdFx0bWluX2xvZ19sZXZlbCA9IDE7XG5AQCAtNzY2LDggJiM0Mzs3NjYsNyBAQCBzdGF0aWMgdm9pZCBwcmVwYXJlX2Nhc2Uoc3RydWN0IHRlc3RfbG9hZGVyICp0ZXN0ZXIsXG4gXHRlbHNlXG4gXHRcdGJwZl9wcm9ncmFtX19zZXRfbG9nX2xldmVsKHByb2csIHNwZWMtXHUwMDNlbG9nX2xldmVsKTtcbiBcbi1cdHByb2dfZmxhZ3MgPSBicGZfcHJvZ3JhbV9fZmxhZ3MocHJvZyk7XG4tXHRicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKHByb2csIHByb2dfZmxhZ3MgfCBzcGVjLVx1MDAzZXByb2dfZmxhZ3MpO1xuJiM0MztcdGJwZl9wcm9ncmFtX19hZGRfZmxhZ3MocHJvZywgc3BlYy1cdTAwM2Vwcm9nX2ZsYWdzKTtcbiBcbiBcdHRlc3Rlci1cdTAwM2Vsb2dfYnVmWzBdID0gJiMzOTtcXDAmIzM5OztcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5jXG5pbmRleCAzZjAzNzk0OWU5Nzg5Li5kMWQ2MDQ1MWM1YmNjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmNcbkBAIC0yOTIsNyAmIzQzOzI5Miw2IEBAIGludCBicGZfcHJvZ190ZXN0X2xvYWQoY29uc3QgY2hhciAqZmlsZSwgZW51bSBicGZfcHJvZ190eXBlIHR5cGUsXG4gXHQpO1xuIFx0c3RydWN0IGJwZl9vYmplY3QgKm9iajtcbiBcdHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZztcbi1cdF9fdTMyIGZsYWdzO1xuIFx0aW50IGVycjtcbiBcbiBcdG9iaiA9IGJwZl9vYmplY3RfX29wZW5fZmlsZShmaWxlLCBcdTAwMjZvcHRzKTtcbkBAIC0zMDgsOCAmIzQzOzMwNyw3IEBAIGludCBicGZfcHJvZ190ZXN0X2xvYWQoY29uc3QgY2hhciAqZmlsZSwgZW51bSBicGZfcHJvZ190eXBlIHR5cGUsXG4gXHRpZiAodHlwZSAhPSBCUEZfUFJPR19UWVBFX1VOU1BFQyBcdTAwMjZcdTAwMjYgYnBmX3Byb2dyYW1fX3R5cGUocHJvZykgIT0gdHlwZSlcbiBcdFx0YnBmX3Byb2dyYW1fX3NldF90eXBlKHByb2csIHR5cGUpO1xuIFxuLVx0ZmxhZ3MgPSBicGZfcHJvZ3JhbV9fZmxhZ3MocHJvZykgfCB0ZXN0aW5nX3Byb2dfZmxhZ3MoKTtcbi1cdGJwZl9wcm9ncmFtX19zZXRfZmxhZ3MocHJvZywgZmxhZ3MpO1xuJiM0MztcdGJwZl9wcm9ncmFtX19hZGRfZmxhZ3MocHJvZywgdGVzdGluZ19wcm9nX2ZsYWdzKCkpO1xuIFxuIFx0ZXJyID0gYnBmX29iamVjdF9fbG9hZChvYmopO1xuIFx0aWYgKGVycilcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaXN0YXQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpc3RhdC5jXG5pbmRleCBlNzA3NDFjNmI5YjdjLi45Y2ZjOWI0YjQxYzEyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3ZlcmlzdGF0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpc3RhdC5jXG5AQCAtMTcyMiw5ICYjNDM7MTcyMiw5IEBAIHN0YXRpYyBpbnQgcHJvY2Vzc19wcm9nKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzdHJ1Y3QgYnBmXG4gXHRmaXh1cF9vYmoob2JqLCBwcm9nLCBiYXNlX2ZpbGVuYW1lKTtcbiBcbiBcdGlmIChlbnYuZm9yY2VfY2hlY2twb2ludHMpXG4tXHRcdGJwZl9wcm9ncmFtX19zZXRfZmxhZ3MocHJvZywgYnBmX3Byb2dyYW1fX2ZsYWdzKHByb2cpIHwgQlBGX0ZfVEVTVF9TVEFURV9GUkVRKTtcbiYjNDM7XHRcdGJwZl9wcm9ncmFtX19hZGRfZmxhZ3MocHJvZywgQlBGX0ZfVEVTVF9TVEFURV9GUkVRKTtcbiBcdGlmIChlbnYuZm9yY2VfcmVnX2ludmFyaWFudHMpXG4tXHRcdGJwZl9wcm9ncmFtX19zZXRfZmxhZ3MocHJvZywgYnBmX3Byb2dyYW1fX2ZsYWdzKHByb2cpIHwgQlBGX0ZfVEVTVF9SRUdfSU5WQVJJQU5UUyk7XG4mIzQzO1x0XHRicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHByb2csIEJQRl9GX1RFU1RfUkVHX0lOVkFSSUFOVFMpO1xuIFxuIFx0b3B0cy5sb2dfYnVmID0gYnVmO1xuIFx0b3B0cy5sb2dfc2l6ZSA9IGJ1Zl9zejtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveGRwX2h3X21ldGFkYXRhLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveGRwX2h3X21ldGFkYXRhLmNcbmluZGV4IGM1NTAxYjNmZGY0OGYuLmFiM2Y1ZmM1NmU4NjcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveGRwX2h3X21ldGFkYXRhLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94ZHBfaHdfbWV0YWRhdGEuY1xuQEAgLTg0NSw3ICYjNDM7ODQ1LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcbiBcdHByb2cgPSBicGZfb2JqZWN0X19maW5kX3Byb2dyYW1fYnlfbmFtZShicGZfb2JqLVx1MDAzZW9iaiwgXCYjMzQ7cnhcJiMzNDspO1xuIFx0YnBmX3Byb2dyYW1fX3NldF9pZmluZGV4KHByb2csIGlmaW5kZXgpO1xuLVx0YnBmX3Byb2dyYW1fX3NldF9mbGFncyhwcm9nLCBicGZfcHJvZ3JhbV9fZmxhZ3MocHJvZykgfCBCUEZfRl9YRFBfREVWX0JPVU5EX09OTFkpO1xuJiM0MztcdGJwZl9wcm9ncmFtX19hZGRfZmxhZ3MocHJvZywgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTtcbiBcbiBcdHByaW50ZihcJiMzNDtsb2FkIGJwZiBwcm9ncmFtLi4uXFxuXCYjMzQ7KTtcbiBcdHJldCA9IHhkcF9od19tZXRhZGF0YV9fbG9hZChicGZfb2JqKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMzoxNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgY29kZSB1bmRlciB0b29scy8gKHNwZWNpZmljYWxseSBsaWJicGYsIGJwZnRvb2wsIGFuZCBzZWxmdGVzdHMpLCBpbnRyb2R1Y2luZyB1c2VyLXNwYWNlIGhlbHBlciBmdW5jdGlvbnMgYnBmX3Byb2dyYW1fX2FkZF9mbGFncygpIGFuZCBicGZfcHJvZ3JhbV9fY2xlYXJfZmxhZ3MoKS4gTm8ga2VybmVsLXNwYWNlIGNvZGUgKHZtbGludXggb3IgbW9kdWxlcykgaXMgdG91Y2hlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmNjM2MDk2OTlmNjllNzFmYzQ5YTg0MTI2ZjkyNmE3YjNkOGZlMmJlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAxMzoxNDo0OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZi9icGZ0b29sL3Byb2cuYyBiL3Rvb2xzL2JwZi9icGZ0b29sL3Byb2cuYwppbmRleCA4YzJmOTI1NWIzNmQ3Li42YWI5MTFlODIxNTUxIDEwMDY0NAotLS0gYS90b29scy9icGYvYnBmdG9vbC9wcm9nLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvYnBmL2JwZnRvb2wvcHJvZy5jCkBAIC0xNzY5LDcgJiM0MzsxNzY5LDcgQEAgc3RhdGljIGludCBsb2FkX3dpdGhfb3B0aW9ucyhpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGJvb2wgZmlyc3RfcHJvZ19vbmx5KQogCQl9CiAKIAkJaWYgKHByb2dfdHlwZSA9PSBCUEZfUFJPR19UWVBFX1hEUCAmYW1wOyZhbXA7IHhkcG1ldGFfaWZpbmRleCkgewotCQkJYnBmX3Byb2dyYW1fX3NldF9mbGFncyhwb3MsIGJwZl9wcm9ncmFtX19mbGFncyhwb3MpIHwgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTsKJiM0MzsJCQlicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHBvcywgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTsKIAkJCWJwZl9wcm9ncmFtX19zZXRfaWZpbmRleChwb3MsIHhkcG1ldGFfaWZpbmRleCk7CiAJCX0gZWxzZSB7CiAJCQlicGZfcHJvZ3JhbV9fc2V0X2lmaW5kZXgocG9zLCBvZmZsb2FkX2lmaW5kZXgpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9saWJicGYuYyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMKaW5kZXggYzAzNmU4YTkxZWQ4OC4uMjIxYzRmZTFmYjMxOSAxMDA2NDQKLS0tIGEvdG9vbHMvbGliL2JwZi9saWJicGYuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2xpYmJwZi5jCkBAIC05OTM4LDYgJiM0Mzs5OTM4LDE2IEBAIGludCBicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgX191MzIgZmxhZ3MpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztpbnQgYnBmX3Byb2dyYW1fX2FkZF9mbGFncyhzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIF9fdTMyIGZsYWdzKQomIzQzO3sKJiM0MzsJcmV0dXJuIGJwZl9wcm9ncmFtX19zZXRfZmxhZ3MocHJvZywgcHJvZy0mZ3Q7cHJvZ19mbGFncyB8IGZsYWdzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IGJwZl9wcm9ncmFtX19jbGVhcl9mbGFncyhzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIF9fdTMyIGZsYWdzKQomIzQzO3sKJiM0MzsJcmV0dXJuIGJwZl9wcm9ncmFtX19zZXRfZmxhZ3MocHJvZywgcHJvZy0mZ3Q7cHJvZ19mbGFncyAmYW1wOyB+ZmxhZ3MpOwomIzQzO30KJiM0MzsKIF9fdTMyIGJwZl9wcm9ncmFtX19sb2dfbGV2ZWwoY29uc3Qgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nKQogewogCXJldHVybiBwcm9nLSZndDtsb2dfbGV2ZWw7CmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5oIGIvdG9vbHMvbGliL2JwZi9saWJicGYuaAppbmRleCBiOTY1YWQ1NzE1NDAzLi4zOTMyYmY5Y2I0OTAzIDEwMDY0NAotLS0gYS90b29scy9saWIvYnBmL2xpYmJwZi5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmgKQEAgLTEwMTEsNiAmIzQzOzEwMTEsMTIgQEAgYnBmX3Byb2dyYW1fX3NldF9leHBlY3RlZF9hdHRhY2hfdHlwZShzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csCiBMSUJCUEZfQVBJIF9fdTMyIGJwZl9wcm9ncmFtX19mbGFncyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cpOwogTElCQlBGX0FQSSBpbnQgYnBmX3Byb2dyYW1fX3NldF9mbGFncyhzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIF9fdTMyIGZsYWdzKTsKIAomIzQzOy8qIENvbnZlbmllbmNlIGhlbHBlcnMgdG8gbm9uLWRlc3RydWN0aXZlbHkgYWRkIG9yIGNsZWFyIHRoZSBzcGVjaWZpZWQgZmxhZ3MKJiM0MzsgKiBpbnN0ZWFkIG9mIGNsb2JiZXJpbmcgdGhlbSBhcyBicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKCkgZG9lcy4KJiM0MzsgKi8KJiM0MztMSUJCUEZfQVBJIGludCBicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgX191MzIgZmxhZ3MpOwomIzQzO0xJQkJQRl9BUEkgaW50IGJwZl9wcm9ncmFtX19jbGVhcl9mbGFncyhzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIF9fdTMyIGZsYWdzKTsKJiM0MzsKIC8qIFBlci1wcm9ncmFtIGxvZyBsZXZlbCBhbmQgbG9nIGJ1ZmZlciBnZXR0ZXJzL3NldHRlcnMuCiAgKiBTZWUgYnBmX29iamVjdF9vcGVuX29wdHMgY29tbWVudHMgcmVnYXJkaW5nIGxvZ19sZXZlbCBhbmQgbG9nX2J1ZgogICogaW50ZXJhY3Rpb25zLgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9saWJicGYubWFwIGIvdG9vbHMvbGliL2JwZi9saWJicGYubWFwCmluZGV4IDA4YWIyZWE4ODFmYjYuLmE4MTFhMWIzYTA4NTcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLm1hcAomIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2xpYmJwZi5tYXAKQEAgLTQ1OCw3ICYjNDM7NDU4LDkgQEAgTElCQlBGXzEuNy4wIHsKIAogTElCQlBGXzEuOC4wIHsKIAlnbG9iYWw6CiYjNDM7CQlicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzOwogCQlicGZfcHJvZ3JhbV9fYXR0YWNoX3RyYWNpbmdfbXVsdGk7CiYjNDM7CQlicGZfcHJvZ3JhbV9fY2xlYXJfZmxhZ3M7CiAJCWJwZl9wcm9ncmFtX19jbG9uZTsKIAkJYnRmX19maW5kX2J5X25hbWVfa2luZF9vd247CiAJCWJ0Zl9fbmV3X2VtcHR5X29wdHM7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hdHRhY2hfcHJvYmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2F0dGFjaF9wcm9iZS5jCmluZGV4IDdkYWRiOTBlN2I2ODkuLjQxMTM2ZTFjNzc1MmUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2F0dGFjaF9wcm9iZS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2F0dGFjaF9wcm9iZS5jCkBAIC01NDMsOSAmIzQzOzU0Myw3IEBAIHN0YXRpYyB2b2lkIHRlc3Rfa3Byb2JlX3NsZWVwYWJsZSh2b2lkKQogCQlyZXR1cm47CiAKIAkvKiBzbGVlcGFibGUga3Byb2JlIHRlc3QgY2FzZSBuZWVkcyBmbGFncyBzZXQgYmVmb3JlIGxvYWRpbmcgKi8KLQlpZiAoIUFTU0VSVF9PSyhicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKAotCQkJICAgICAgIHNrZWwtJmd0O3Byb2dzLmhhbmRsZV9rcHJvYmVfc2xlZXBhYmxlLAotCQkJICAgICAgIGJwZl9wcm9ncmFtX19mbGFncyhza2VsLSZndDtwcm9ncy5oYW5kbGVfa3Byb2JlX3NsZWVwYWJsZSkgfCBCUEZfRl9TTEVFUEFCTEUpLAomIzQzOwlpZiAoIUFTU0VSVF9PSyhicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHNrZWwtJmd0O3Byb2dzLmhhbmRsZV9rcHJvYmVfc2xlZXBhYmxlLCBCUEZfRl9TTEVFUEFCTEUpLAogCQkgICAgICAgJiMzNDtrcHJvYmVfc2xlZXBhYmxlX2ZsYWdzJiMzNDspKQogCQlnb3RvIGNsZWFudXA7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl92ZXJpZl9zY2FsZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3ZlcmlmX3NjYWxlLmMKaW5kZXggNjUyMzA3YTFiMjJlNy4uOTAyYTcwZDVhZmViNiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3ZlcmlmX3NjYWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3ZlcmlmX3NjYWxlLmMKQEAgLTM1LDcgJiM0MzszNSw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfbG9hZChjb25zdCBjaGFyICpmaWxlLCBlbnVtIGJwZl9wcm9nX3R5cGUgdHlwZSkKIAl9CiAKIAlicGZfcHJvZ3JhbV9fc2V0X3R5cGUocHJvZywgdHlwZSk7Ci0JYnBmX3Byb2dyYW1fX3NldF9mbGFncyhwcm9nLCBicGZfcHJvZ3JhbV9fZmxhZ3MocHJvZykgfCB0ZXN0aW5nX3Byb2dfZmxhZ3MoKSk7CiYjNDM7CWJwZl9wcm9ncmFtX19hZGRfZmxhZ3MocHJvZywgdGVzdGluZ19wcm9nX2ZsYWdzKCkpOwogCWJwZl9wcm9ncmFtX19zZXRfbG9nX2xldmVsKHByb2csIDQgfCBleHRyYV9wcm9nX2xvYWRfbG9nX2ZsYWdzKTsKIAogCWVyciA9IGJwZl9vYmplY3RfX2xvYWQob2JqKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tlcm5lbF9mbGFnLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rZXJuZWxfZmxhZy5jCmluZGV4IDI1ZWI1OWY0NjBhYmUuLjcyYzBlZjhkYTQwOWUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tlcm5lbF9mbGFnLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva2VybmVsX2ZsYWcuYwpAQCAtMTAsMTUgJiM0MzsxMCwzMSBAQCB2b2lkIHRlc3Rfa2VybmVsX2ZsYWcodm9pZCkKIAlzdHJ1Y3QgdGVzdF9rZXJuZWxfZmxhZyAqbHNtX3NrZWw7CiAJc3RydWN0IGtmdW5jX2NhbGxfdGVzdCAqc2tlbCA9IE5VTEw7CiAJc3RydWN0IGtmdW5jX2NhbGxfdGVzdF9sc2tlbCAqbHNrZWwgPSBOVUxMOwomIzQzOwlzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2c7CiYjNDM7CV9fdTMyIGZsYWdzOwogCWludCByZXQ7CiAKLQlsc21fc2tlbCA9IHRlc3Rfa2VybmVsX2ZsYWdfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJbHNtX3NrZWwgPSB0ZXN0X2tlcm5lbF9mbGFnX19vcGVuKCk7CiAJaWYgKCFBU1NFUlRfT0tfUFRSKGxzbV9za2VsLCAmIzM0O2xzbV9za2VsJiMzNDspKQogCQlyZXR1cm47CiAKLQlBU1NFUlRfRVEoYnBmX3Byb2dyYW1fX2ZsYWdzKGxzbV9za2VsLSZndDtwcm9ncy5icGYpICZhbXA7IEJQRl9GX1NMRUVQQUJMRSwKJiM0MzsJcHJvZyA9IGxzbV9za2VsLSZndDtwcm9ncy5icGY7CiYjNDM7CWZsYWdzID0gYnBmX3Byb2dyYW1fX2ZsYWdzKHByb2cpOwomIzQzOwlBU1NFUlRfRVEoZmxhZ3MgJmFtcDsgQlBGX0ZfU0xFRVBBQkxFLAogCQkgIEJQRl9GX1NMRUVQQUJMRSwgJiMzNDtzbGVlcGFibGUgaW4gcHJvZ3JhbSBmbGFncyYjMzQ7KTsKIAomIzQzOwlyZXQgPSBicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHByb2csIEJQRl9GX0FOWV9BTElHTk1FTlQpOwomIzQzOwlBU1NFUlRfT0socmV0LCAmIzM0O2JwZl9wcm9ncmFtX19hZGRfZmxhZ3MgcmV0JiMzNDspOwomIzQzOwlBU1NFUlRfRVEoYnBmX3Byb2dyYW1fX2ZsYWdzKHByb2cpLCBmbGFncyB8IEJQRl9GX0FOWV9BTElHTk1FTlQsCiYjNDM7CQkgICYjMzQ7YnBmX3Byb2dyYW1fX2FkZF9mbGFncyB2YWx1ZSYjMzQ7KTsKJiM0MzsKJiM0MzsJcmV0ID0gYnBmX3Byb2dyYW1fX2NsZWFyX2ZsYWdzKHByb2csIEJQRl9GX0FOWV9BTElHTk1FTlQpOwomIzQzOwlBU1NFUlRfT0socmV0LCAmIzM0O2JwZl9wcm9ncmFtX19jbGVhcl9mbGFncyByZXQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShicGZfcHJvZ3JhbV9fZmxhZ3MocHJvZyksIGZsYWdzLCAmIzM0O2JwZl9wcm9ncmFtX19jbGVhcl9mbGFncyB2YWx1ZSYjMzQ7KTsKJiM0MzsKJiM0MzsJcmV0ID0gdGVzdF9rZXJuZWxfZmxhZ19fbG9hZChsc21fc2tlbCk7CiYjNDM7CUFTU0VSVF9PSyhyZXQsICYjMzQ7dGVzdF9rZXJuZWxfZmxhZ19fbG9hZCYjMzQ7KTsKJiM0MzsKIAlsc21fc2tlbC0mZ3Q7YnNzLSZndDttb25pdG9yZWRfdGlkID0gc3lzX2dldHRpZCgpOwogCiAJcmV0ID0gdGVzdF9rZXJuZWxfZmxhZ19fYXR0YWNoKGxzbV9za2VsKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2twcm9iZV9tdWx0aV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rcHJvYmVfbXVsdGlfdGVzdC5jCmluZGV4IGVkM2ZkMGE4OGRhYjYuLjY1MTEyM2NkODYwMmQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2twcm9iZV9tdWx0aV90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3Byb2JlX211bHRpX3Rlc3QuYwpAQCAtMzYxLDggJiM0MzszNjEsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2F0dGFjaF9hcGlfZmFpbHModm9pZCkKIAogCXNsX3NrZWwtJmd0O2Jzcy0mZ3Q7dXNlcl9wdHIgPSBzbF9za2VsOwogCi0JZXJyID0gYnBmX3Byb2dyYW1fX3NldF9mbGFncyhzbF9za2VsLSZndDtwcm9ncy5oYW5kbGVfa3Byb2JlX211bHRpX3NsZWVwYWJsZSwKLQkJCQkgICAgIGJwZl9wcm9ncmFtX19mbGFncyhzbF9za2VsLSZndDtwcm9ncy5oYW5kbGVfa3Byb2JlX211bHRpX3NsZWVwYWJsZSkgfCBCUEZfRl9TTEVFUEFCTEUpOwomIzQzOwllcnIgPSBicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHNsX3NrZWwtJmd0O3Byb2dzLmhhbmRsZV9rcHJvYmVfbXVsdGlfc2xlZXBhYmxlLCBCUEZfRl9TTEVFUEFCTEUpOwogCWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtzbGVlcF9za2VsX3NldF9mbGFncyYjMzQ7KSkKIAkJZ290byBjbGVhbnVwOwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfbWV0YWRhdGEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9tZXRhZGF0YS5jCmluZGV4IDA0N2RmZGMzMjJhMmYuLjNhYjk2MzQ1ODkwM2QgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9tZXRhZGF0YS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9tZXRhZGF0YS5jCkBAIC00MDgsMTQgJiM0Mzs0MDgsMTQgQEAgdm9pZCB0ZXN0X3hkcF9tZXRhZGF0YSh2b2lkKQogCiAJcHJvZyA9IGJwZl9vYmplY3RfX2ZpbmRfcHJvZ3JhbV9ieV9uYW1lKGJwZl9vYmotJmd0O29iaiwgJiMzNDtyeCYjMzQ7KTsKIAlicGZfcHJvZ3JhbV9fc2V0X2lmaW5kZXgocHJvZywgcnhfaWZpbmRleCk7Ci0JYnBmX3Byb2dyYW1fX3NldF9mbGFncyhwcm9nLCBicGZfcHJvZ3JhbV9fZmxhZ3MocHJvZykgfCBCUEZfRl9YRFBfREVWX0JPVU5EX09OTFkpOwomIzQzOwlicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHByb2csIEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWSk7CiAKIAkvKiBNYWtlIHN1cmUgd2UgY2FuIGxvYWQgYSBkZXYtYm91bmQgcHJvZ3JhbSB0aGF0IHBlcmZvcm1zCiAJICogWERQX1JFRElSRUNUIGludG8gYSBkZXZtYXAuCiAJICovCiAJbmV3X3Byb2cgPSBicGZfb2JqZWN0X19maW5kX3Byb2dyYW1fYnlfbmFtZShicGZfb2JqLSZndDtvYmosICYjMzQ7cmVkaXJlY3QmIzM0Oyk7CiAJYnBmX3Byb2dyYW1fX3NldF9pZmluZGV4KG5ld19wcm9nLCByeF9pZmluZGV4KTsKLQlicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKG5ld19wcm9nLCBicGZfcHJvZ3JhbV9fZmxhZ3MobmV3X3Byb2cpIHwgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTsKJiM0MzsJYnBmX3Byb2dyYW1fX2FkZF9mbGFncyhuZXdfcHJvZywgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTsKIAogCWlmICghQVNTRVJUX09LKHhkcF9tZXRhZGF0YV9fbG9hZChicGZfb2JqKSwgJiMzNDtsb2FkIHNrZWxldG9uJiMzNDspKQogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmMKaW5kZXggNzk0YTdkZmIwNTc5Ni4uMjg3MjRkZTA2MzIyMCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmMKQEAgLTc0OCw3ICYjNDM7NzQ4LDcgQEAgc3RhdGljIHZvaWQgcHJlcGFyZV9jYXNlKHN0cnVjdCB0ZXN0X2xvYWRlciAqdGVzdGVyLAogCQkJIHN0cnVjdCBicGZfb2JqZWN0ICpvYmosCiAJCQkgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nKQogewotCWludCBtaW5fbG9nX2xldmVsID0gMCwgcHJvZ19mbGFnczsKJiM0MzsJaW50IG1pbl9sb2dfbGV2ZWwgPSAwOwogCiAJaWYgKGVudi52ZXJib3NpdHkgJmd0OyBWRVJCT1NFX05PTkUpCiAJCW1pbl9sb2dfbGV2ZWwgPSAxOwpAQCAtNzY2LDggJiM0Mzs3NjYsNyBAQCBzdGF0aWMgdm9pZCBwcmVwYXJlX2Nhc2Uoc3RydWN0IHRlc3RfbG9hZGVyICp0ZXN0ZXIsCiAJZWxzZQogCQlicGZfcHJvZ3JhbV9fc2V0X2xvZ19sZXZlbChwcm9nLCBzcGVjLSZndDtsb2dfbGV2ZWwpOwogCi0JcHJvZ19mbGFncyA9IGJwZl9wcm9ncmFtX19mbGFncyhwcm9nKTsKLQlicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKHByb2csIHByb2dfZmxhZ3MgfCBzcGVjLSZndDtwcm9nX2ZsYWdzKTsKJiM0MzsJYnBmX3Byb2dyYW1fX2FkZF9mbGFncyhwcm9nLCBzcGVjLSZndDtwcm9nX2ZsYWdzKTsKIAogCXRlc3Rlci0mZ3Q7bG9nX2J1ZlswXSA9ICYjMzk7XDAmIzM5OzsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuYwppbmRleCAzZjAzNzk0OWU5Nzg5Li5kMWQ2MDQ1MWM1YmNjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5jCkBAIC0yOTIsNyAmIzQzOzI5Miw2IEBAIGludCBicGZfcHJvZ190ZXN0X2xvYWQoY29uc3QgY2hhciAqZmlsZSwgZW51bSBicGZfcHJvZ190eXBlIHR5cGUsCiAJKTsKIAlzdHJ1Y3QgYnBmX29iamVjdCAqb2JqOwogCXN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZzsKLQlfX3UzMiBmbGFnczsKIAlpbnQgZXJyOwogCiAJb2JqID0gYnBmX29iamVjdF9fb3Blbl9maWxlKGZpbGUsICZhbXA7b3B0cyk7CkBAIC0zMDgsOCAmIzQzOzMwNyw3IEBAIGludCBicGZfcHJvZ190ZXN0X2xvYWQoY29uc3QgY2hhciAqZmlsZSwgZW51bSBicGZfcHJvZ190eXBlIHR5cGUsCiAJaWYgKHR5cGUgIT0gQlBGX1BST0dfVFlQRV9VTlNQRUMgJmFtcDsmYW1wOyBicGZfcHJvZ3JhbV9fdHlwZShwcm9nKSAhPSB0eXBlKQogCQlicGZfcHJvZ3JhbV9fc2V0X3R5cGUocHJvZywgdHlwZSk7CiAKLQlmbGFncyA9IGJwZl9wcm9ncmFtX19mbGFncyhwcm9nKSB8IHRlc3RpbmdfcHJvZ19mbGFncygpOwotCWJwZl9wcm9ncmFtX19zZXRfZmxhZ3MocHJvZywgZmxhZ3MpOwomIzQzOwlicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHByb2csIHRlc3RpbmdfcHJvZ19mbGFncygpKTsKIAogCWVyciA9IGJwZl9vYmplY3RfX2xvYWQob2JqKTsKIAlpZiAoZXJyKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3ZlcmlzdGF0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaXN0YXQuYwppbmRleCBlNzA3NDFjNmI5YjdjLi45Y2ZjOWI0YjQxYzEyIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaXN0YXQuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaXN0YXQuYwpAQCAtMTcyMiw5ICYjNDM7MTcyMiw5IEBAIHN0YXRpYyBpbnQgcHJvY2Vzc19wcm9nKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzdHJ1Y3QgYnBmCiAJZml4dXBfb2JqKG9iaiwgcHJvZywgYmFzZV9maWxlbmFtZSk7CiAKIAlpZiAoZW52LmZvcmNlX2NoZWNrcG9pbnRzKQotCQlicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKHByb2csIGJwZl9wcm9ncmFtX19mbGFncyhwcm9nKSB8IEJQRl9GX1RFU1RfU1RBVEVfRlJFUSk7CiYjNDM7CQlicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHByb2csIEJQRl9GX1RFU1RfU1RBVEVfRlJFUSk7CiAJaWYgKGVudi5mb3JjZV9yZWdfaW52YXJpYW50cykKLQkJYnBmX3Byb2dyYW1fX3NldF9mbGFncyhwcm9nLCBicGZfcHJvZ3JhbV9fZmxhZ3MocHJvZykgfCBCUEZfRl9URVNUX1JFR19JTlZBUklBTlRTKTsKJiM0MzsJCWJwZl9wcm9ncmFtX19hZGRfZmxhZ3MocHJvZywgQlBGX0ZfVEVTVF9SRUdfSU5WQVJJQU5UUyk7CiAKIAlvcHRzLmxvZ19idWYgPSBidWY7CiAJb3B0cy5sb2dfc2l6ZSA9IGJ1Zl9zejsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94ZHBfaHdfbWV0YWRhdGEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94ZHBfaHdfbWV0YWRhdGEuYwppbmRleCBjNTUwMWIzZmRmNDhmLi5hYjNmNWZjNTZlODY3IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveGRwX2h3X21ldGFkYXRhLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hkcF9od19tZXRhZGF0YS5jCkBAIC04NDUsNyAmIzQzOzg0NSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAKIAlwcm9nID0gYnBmX29iamVjdF9fZmluZF9wcm9ncmFtX2J5X25hbWUoYnBmX29iai0mZ3Q7b2JqLCAmIzM0O3J4JiMzNDspOwogCWJwZl9wcm9ncmFtX19zZXRfaWZpbmRleChwcm9nLCBpZmluZGV4KTsKLQlicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKHByb2csIGJwZl9wcm9ncmFtX19mbGFncyhwcm9nKSB8IEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWSk7CiYjNDM7CWJwZl9wcm9ncmFtX19hZGRfZmxhZ3MocHJvZywgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTsKIAogCXByaW50ZigmIzM0O2xvYWQgYnBmIHByb2dyYW0uLi5cbiYjMzQ7KTsKIAlyZXQgPSB4ZHBfaHdfbWV0YWRhdGFfX2xvYWQoYnBmX29iaik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEzOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNjQKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA1MDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IFdvcnRoRnV6emluZz1mYWxzZSBBc3Nlc3NtZW50KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBmaWxlIGxpc3Q6IGB0b29scy9icGYvYnBmdG9vbC9wcm9nLmNgLCBgdG9vbHMvbGliL2JwZi9saWJicGYuY2AsIGB0b29scy9saWIvYnBmL2xpYmJwZi5oYCwgZXRjLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgZXZlcnl0aGluZyBpcyBjb250YWluZWQgd2l0aGluIHRoZSBgdG9vbHMvYCBkaXJlY3Rvcnkg4oCTIHNwZWNpZmljYWxseSBgdG9vbHMvYnBmL2AsIGB0b29scy9saWIvYnBmL2AsIGFuZCB0aGUgZXZlci1wcmVzZW50IGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9gLiBUaGF0IHNjcmVhbXMgJiMzNDt1c2VyLXNwYWNlJiMzNDsgdG8gbWUsIGJ1dCBJIG5lZWQgdG8gYmUgbWV0aG9kaWNhbC4KCk5vdywgbGV0JiMzOTtzIGFwcGx5IHRoZSBXb3J0aEZ1enppbmcgY3JpdGVyaWEuIFNlY3Rpb24gMiBpcyBjbGVhcjogd2UgY2FuIGNvbmZpZGVudGx5IHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCAqb25seSogaWYgdGhlIGNvZGUgY2hhbmdlcyBmYWxsIG5lYXRseSBpbnRvIGEgc3BlY2lmaWMgc2V0IG9mIG5lZ2F0aXZlIGNyaXRlcmlhLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSAmIzM0O05vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXMmIzM0OyBjbGF1c2UuIFdlJiMzOTtyZSBsb29raW5nIGZvciBtb2RpZmljYXRpb25zIGluIHRoaW5ncyBsaWtlIGRvY3VtZW50YXRpb24sIGNvbW1lbnRzLCB1c2VyLXNwYWNlLCBzZWxmLXRlc3RzLCBzY3JpcHRzLCBhbmQgc2FtcGxlcyB0aGF0ICpkb24mIzM5O3QqIGFmZmVjdCB0aGUgY29yZSBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGl0cyBtb2R1bGVzLgoKTG9va2luZyBhdCB0aGUgZmlsZXMsIGl0JiMzOTtzIHByZXR0eSBjbGVhcjogYnBmdG9vbCwgbGliYnBmLCBhbmQgYnBmIHNlbGZ0ZXN0cyBhcmUgcHJlY2lzZWx5IHRoZSBraW5kcyBvZiB0b29scyBhbmQgdGVzdHMgdGhhdCBmYWxsIG91dHNpZGUgb2YgY29yZSBrZXJuZWwgc3BhY2UuIFRoZXkgYXJlIGFsbCBpbiBgdG9vbHMvYCBhbmQgbm8ga2VybmVsIGNvZGUgaXMgYmVpbmcgbW9kaWZpZWQuIEl0JiMzOTtzIHNhZmUgdG8gc2F5IHRoZXJlIGlzIG5vIGltcGFjdCBvbiB2bWxpbnV4IG9yIG1vZHVsZXMuCgpCZWZvcmUgSSBnaXZlIGl0IHRoZSBncmVlbiBsaWdodCwgSSB3aWxsIGNoZWNrIHRoZSBIRUFEIHRvIHZlcmlmeSB0aGVyZSB3ZXJlIG5vIGFkZGl0aW9uYWwgbW9kaWZpY2F0aW9ucywganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3Byb2dyYW1fX2FkZF9mbGFncyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt0b29scy9icGYvYnBmdG9vbC9wcm9nLmM9MTU2Nz1zdGF0aWMgaW50IGxvYWRfd2l0aF9vcHRpb25zKGludCBhcmdjLCBjaGFyICoqYXJndiwgYm9vbCBmaXJzdF9wcm9nX29ubHkpXG4tLVxudG9vbHMvYnBmL2JwZnRvb2wvcHJvZy5jLTE3NzEtXHRcdGlmIChwcm9nX3R5cGUgPT0gQlBGX1BST0dfVFlQRV9YRFAgXHUwMDI2XHUwMDI2IHhkcG1ldGFfaWZpbmRleCkge1xudG9vbHMvYnBmL2JwZnRvb2wvcHJvZy5jOjE3NzI6XHRcdFx0YnBmX3Byb2dyYW1fX2FkZF9mbGFncyhwb3MsIEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWSk7XG50b29scy9icGYvYnBmdG9vbC9wcm9nLmMtMTc3My1cdFx0XHRicGZfcHJvZ3JhbV9fc2V0X2lmaW5kZXgocG9zLCB4ZHBtZXRhX2lmaW5kZXgpO1xuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmM9OTkzMj1pbnQgYnBmX3Byb2dyYW1fX3NldF9mbGFncyhzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIF9fdTMyIGZsYWdzKVxuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtOTk0MC1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6OTk0MTppbnQgYnBmX3Byb2dyYW1fX2FkZF9mbGFncyhzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIF9fdTMyIGZsYWdzKVxudG9vbHMvbGliL2JwZi9saWJicGYuYy05OTQyLXtcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZi5oPTEwMTI9TElCQlBGX0FQSSBpbnQgYnBmX3Byb2dyYW1fX3NldF9mbGFncyhzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIF9fdTMyIGZsYWdzKTtcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZi5oLTEwMTYtICovXG50b29scy9saWIvYnBmL2xpYmJwZi5oOjEwMTc6TElCQlBGX0FQSSBpbnQgYnBmX3Byb2dyYW1fX2FkZF9mbGFncyhzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIF9fdTMyIGZsYWdzKTtcbnRvb2xzL2xpYi9icGYvbGliYnBmLmgtMTAxOC1MSUJCUEZfQVBJIGludCBicGZfcHJvZ3JhbV9fY2xlYXJfZmxhZ3Moc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBfX3UzMiBmbGFncyk7XG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYubWFwPTQ1OT1MSUJCUEZfMS44LjAge1xudG9vbHMvbGliL2JwZi9saWJicGYubWFwLTQ2MC1cdGdsb2JhbDpcbnRvb2xzL2xpYi9icGYvbGliYnBmLm1hcDo0NjE6XHRcdGJwZl9wcm9ncmFtX19hZGRfZmxhZ3M7XG50b29scy9saWIvYnBmL2xpYmJwZi5tYXAtNDYyLVx0XHRicGZfcHJvZ3JhbV9fYXR0YWNoX3RyYWNpbmdfbXVsdGk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXR0YWNoX3Byb2JlLmM9NTM3PXN0YXRpYyB2b2lkIHRlc3Rfa3Byb2JlX3NsZWVwYWJsZSh2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2F0dGFjaF9wcm9iZS5jLTU0NS1cdC8qIHNsZWVwYWJsZSBrcHJvYmUgdGVzdCBjYXNlIG5lZWRzIGZsYWdzIHNldCBiZWZvcmUgbG9hZGluZyAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXR0YWNoX3Byb2JlLmM6NTQ2Olx0aWYgKCFBU1NFUlRfT0soYnBmX3Byb2dyYW1fX2FkZF9mbGFncyhza2VsLVx1MDAzZXByb2dzLmhhbmRsZV9rcHJvYmVfc2xlZXBhYmxlLCBCUEZfRl9TTEVFUEFCTEUpLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXR0YWNoX3Byb2JlLmMtNTQ3LVx0XHQgICAgICAgXCYjMzQ7a3Byb2JlX3NsZWVwYWJsZV9mbGFnc1wmIzM0OykpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3ZlcmlmX3NjYWxlLmM9MjA9c3RhdGljIGludCBjaGVja19sb2FkKGNvbnN0IGNoYXIgKmZpbGUsIGVudW0gYnBmX3Byb2dfdHlwZSB0eXBlKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl92ZXJpZl9zY2FsZS5jLTM3LVx0YnBmX3Byb2dyYW1fX3NldF90eXBlKHByb2csIHR5cGUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3ZlcmlmX3NjYWxlLmM6Mzg6XHRicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHByb2csIHRlc3RpbmdfcHJvZ19mbGFncygpKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl92ZXJpZl9zY2FsZS5jLTM5LVx0YnBmX3Byb2dyYW1fX3NldF9sb2dfbGV2ZWwocHJvZywgNCB8IGV4dHJhX3Byb2dfbG9hZF9sb2dfZmxhZ3MpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tlcm5lbF9mbGFnLmM9OD12b2lkIHRlc3Rfa2VybmVsX2ZsYWcodm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rZXJuZWxfZmxhZy5jLTI1LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva2VybmVsX2ZsYWcuYzoyNjpcdHJldCA9IGJwZl9wcm9ncmFtX19hZGRfZmxhZ3MocHJvZywgQlBGX0ZfQU5ZX0FMSUdOTUVOVCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rZXJuZWxfZmxhZy5jOjI3Olx0QVNTRVJUX09LKHJldCwgXCYjMzQ7YnBmX3Byb2dyYW1fX2FkZF9mbGFncyByZXRcJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva2VybmVsX2ZsYWcuYy0yOC1cdEFTU0VSVF9FUShicGZfcHJvZ3JhbV9fZmxhZ3MocHJvZyksIGZsYWdzIHwgQlBGX0ZfQU5ZX0FMSUdOTUVOVCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tlcm5lbF9mbGFnLmM6Mjk6XHRcdCAgXCYjMzQ7YnBmX3Byb2dyYW1fX2FkZF9mbGFncyB2YWx1ZVwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rZXJuZWxfZmxhZy5jLTMwLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2twcm9iZV9tdWx0aV90ZXN0LmM9MjIxPXN0YXRpYyB2b2lkIHRlc3RfYXR0YWNoX2FwaV9mYWlscyh2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2twcm9iZV9tdWx0aV90ZXN0LmMtMzYzLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3Byb2JlX211bHRpX3Rlc3QuYzozNjQ6XHRlcnIgPSBicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHNsX3NrZWwtXHUwMDNlcHJvZ3MuaGFuZGxlX2twcm9iZV9tdWx0aV9zbGVlcGFibGUsIEJQRl9GX1NMRUVQQUJMRSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rcHJvYmVfbXVsdGlfdGVzdC5jLTM2NS1cdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7c2xlZXBfc2tlbF9zZXRfZmxhZ3NcJiMzNDspKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9tZXRhZGF0YS5jPTM0OT12b2lkIHRlc3RfeGRwX21ldGFkYXRhKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX21ldGFkYXRhLmMtNDEwLVx0YnBmX3Byb2dyYW1fX3NldF9pZmluZGV4KHByb2csIHJ4X2lmaW5kZXgpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX21ldGFkYXRhLmM6NDExOlx0YnBmX3Byb2dyYW1fX2FkZF9mbGFncyhwcm9nLCBCUEZfRl9YRFBfREVWX0JPVU5EX09OTFkpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX21ldGFkYXRhLmMtNDEyLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9tZXRhZGF0YS5jLTQxNy1cdGJwZl9wcm9ncmFtX19zZXRfaWZpbmRleChuZXdfcHJvZywgcnhfaWZpbmRleCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfbWV0YWRhdGEuYzo0MTg6XHRicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKG5ld19wcm9nLCBCUEZfRl9YRFBfREVWX0JPVU5EX09OTFkpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX21ldGFkYXRhLmMtNDE5LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jPTc0Nj1zdGF0aWMgdm9pZCBwcmVwYXJlX2Nhc2Uoc3RydWN0IHRlc3RfbG9hZGVyICp0ZXN0ZXIsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmMtNzY4LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmM6NzY5Olx0YnBmX3Byb2dyYW1fX2FkZF9mbGFncyhwcm9nLCBzcGVjLVx1MDAzZXByb2dfZmxhZ3MpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmMtNzcwLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuYz0yODc9aW50IGJwZl9wcm9nX3Rlc3RfbG9hZChjb25zdCBjaGFyICpmaWxlLCBlbnVtIGJwZl9wcm9nX3R5cGUgdHlwZSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmMtMzA5LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5jOjMxMDpcdGJwZl9wcm9ncmFtX19hZGRfZmxhZ3MocHJvZywgdGVzdGluZ19wcm9nX2ZsYWdzKCkpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5jLTMxMS1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaXN0YXQuYz0xNjc2PXN0YXRpYyBpbnQgcHJvY2Vzc19wcm9nKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3ZlcmlzdGF0LmMtMTcyNC1cdGlmIChlbnYuZm9yY2VfY2hlY2twb2ludHMpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaXN0YXQuYzoxNzI1Olx0XHRicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHByb2csIEJQRl9GX1RFU1RfU1RBVEVfRlJFUSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaXN0YXQuYy0xNzI2LVx0aWYgKGVudi5mb3JjZV9yZWdfaW52YXJpYW50cylcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpc3RhdC5jOjE3Mjc6XHRcdGJwZl9wcm9ncmFtX19hZGRfZmxhZ3MocHJvZywgQlBGX0ZfVEVTVF9SRUdfSU5WQVJJQU5UUyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaXN0YXQuYy0xNzI4LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94ZHBfaHdfbWV0YWRhdGEuYz03MzU9aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveGRwX2h3X21ldGFkYXRhLmMtODQ3LVx0YnBmX3Byb2dyYW1fX3NldF9pZmluZGV4KHByb2csIGlmaW5kZXgpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hkcF9od19tZXRhZGF0YS5jOjg0ODpcdGJwZl9wcm9ncmFtX19hZGRfZmxhZ3MocHJvZywgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94ZHBfaHdfbWV0YWRhdGEuYy04NDktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTM6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1MzYKCQkJCQkJCW91dHB1dDogOTcKCQkJCQkJCXRob3VnaHRzOiAxOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgSW1wYWN0KioKCk9rYXksIHNvIEkmIzM5O3ZlIHRha2VuIGEgbG9vayBhdCB0aGlzIHBhdGNoLCBhbmQgaXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIHNjb3BlIGlzIGVudGlyZWx5IGNvbnRhaW5lZCB3aXRoaW4gdGhlIGB0b29scy9gIGRpcmVjdG9yeSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGB0b29scy9saWIvYnBmL2AsIGB0b29scy9icGYvYnBmdG9vbC9gLCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9gLiBUaGlzIG1lYW5zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdXNlci1zcGFjZSBjb21wb25lbnRzIGhlcmU6IGxpYnJhcmllcywgdG9vbHMsIGFuZCB0aGUgYXNzb2NpYXRlZCB0ZXN0cy4gQ3J1Y2lhbGx5LCBub25lIG9mIHRoaXMgdG91Y2hlcyB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlIChgdm1saW51eGApIG9yIGFueSBrZXJuZWwgbW9kdWxlcy4KCkNvbnNlcXVlbnRseSwgZnJvbSBteSBwZXJzcGVjdGl2ZSwgdGhpcyBkb2VzbiYjMzk7dCB3YXJyYW50IGFueSBzcGVjaWFsIGZ1enppbmcgY29uc2lkZXJhdGlvbnMg4oCTIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgZmFsc2VgLiBUaGVyZSBhcmUgbm8gc3BlY2lmaWMgc3ltYm9scyBJIG5lZWQgdG8gZm9jdXMgb24sIHNvIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0IGlzIGFwcHJvcHJpYXRlbHkgZW1wdHkuIExpa2V3aXNlLCBzaW5jZSB0aGlzIGlzIHN0cmljdGx5IHVzZXItc3BhY2UsIHRoZXJlIGFyZSBubyBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIEkgbmVlZCB0byBlbmFibGU7IHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBpcyBlbXB0eS4KCk15IHJlYXNvbmluZyBpcyBzaW1wbGU6IHRoZSBjaGFuZ2VzIGFyZSBsaW1pdGVkIHRvIHVzZXItc3BhY2UgdG9vbGluZyBhbmQgdGVzdCBmaWxlcy4gU3BlY2lmaWNhbGx5LCB3ZSYjMzk7cmUgc2VlaW5nIHRoZSBhZGRpdGlvbiBvZiBoZWxwZXIgZnVuY3Rpb25zLCBgYnBmX3Byb2dyYW1fX2FkZF9mbGFnc2AgYW5kIGBicGZfcHJvZ3JhbV9fY2xlYXJfZmxhZ3NgLCB3aXRoaW4gbGliYnBmIGFuZCB1cGRhdGVzIHRvIHRoZSBicGZ0b29sIGFuZCBzZWxmdGVzdHMgdG8gdXRpbGl6ZSB0aGVzZSBmdW5jdGlvbnMuIFRoaXMgaXMgY29udGFpbmVkIHdpdGhpbiB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5LCBzbyBpdCB3b24mIzM5O3QgYmUgaW5mbHVlbmNpbmcgYW55IGNvcmUga2VybmVsIGJlaGF2aW9yLgoKSSYjMzk7bSBjb25maWRlbnQgaW4gdGhlc2UgY29uY2x1c2lvbnMsIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgY29kZSB1bmRlciB0b29scy8gKHNwZWNpZmljYWxseSBsaWJicGYsIGJwZnRvb2wsIGFuZCBzZWxmdGVzdHMpLCBpbnRyb2R1Y2luZyB1c2VyLXNwYWNlIGhlbHBlciBmdW5jdGlvbnMgYnBmX3Byb2dyYW1fX2FkZF9mbGFncygpIGFuZCBicGZfcHJvZ3JhbV9fY2xlYXJfZmxhZ3MoKS4gTm8ga2VybmVsLXNwYWNlIGNvZGUgKHZtbGludXggb3IgbW9kdWxlcykgaXMgdG91Y2hlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBjb2RlIHVuZGVyIHRvb2xzLyAoc3BlY2lmaWNhbGx5IGxpYmJwZiwgYnBmdG9vbCwgYW5kIHNlbGZ0ZXN0cyksIGludHJvZHVjaW5nIHVzZXItc3BhY2UgaGVscGVyIGZ1bmN0aW9ucyBicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKCkgYW5kIGJwZl9wcm9ncmFtX19jbGVhcl9mbGFncygpLiBObyBrZXJuZWwtc3BhY2UgY29kZSAodm1saW51eCBvciBtb2R1bGVzKSBpcyB0b3VjaGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMzoxNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDRUMTM6MTQ6NTEuNzU5MjY0NTY0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2NzAyNDMzMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgY29kZSB1bmRlciB0b29scy8gKHNwZWNpZmljYWxseSBsaWJicGYsIGJwZnRvb2wsIGFuZCBzZWxmdGVzdHMpLCBpbnRyb2R1Y2luZyB1c2VyLXNwYWNlIGhlbHBlciBmdW5jdGlvbnMgYnBmX3Byb2dyYW1fX2FkZF9mbGFncygpIGFuZCBicGZfcHJvZ3JhbV9fY2xlYXJfZmxhZ3MoKS4gTm8ga2VybmVsLXNwYWNlIGNvZGUgKHZtbGludXggb3IgbW9kdWxlcykgaXMgdG91Y2hlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEzOjE0OjUxLjc1OTI2ODg1NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcwMzEzNTA1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGY2MzYwOTY5OWY2OWU3MWZjNDlhODQxMjZmOTI2YTdiM2Q4ZmUyYmVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgNCAxMzoxNDo0OSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy9icGYvYnBmdG9vbC9wcm9nLmMgYi90b29scy9icGYvYnBmdG9vbC9wcm9nLmNcXG5pbmRleCA4YzJmOTI1NWIzNmQ3Li42YWI5MTFlODIxNTUxIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL3Byb2cuY1xcbisrKyBiL3Rvb2xzL2JwZi9icGZ0b29sL3Byb2cuY1xcbkBAIC0xNzY5LDcgKzE3NjksNyBAQCBzdGF0aWMgaW50IGxvYWRfd2l0aF9vcHRpb25zKGludCBhcmdjLCBjaGFyICoqYXJndiwgYm9vbCBmaXJzdF9wcm9nX29ubHkpXFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdGlmIChwcm9nX3R5cGUgPT0gQlBGX1BST0dfVFlQRV9YRFAgXFx1MDAyNlxcdTAwMjYgeGRwbWV0YV9pZmluZGV4KSB7XFxuLVxcdFxcdFxcdGJwZl9wcm9ncmFtX19zZXRfZmxhZ3MocG9zLCBicGZfcHJvZ3JhbV9fZmxhZ3MocG9zKSB8IEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWSk7XFxuK1xcdFxcdFxcdGJwZl9wcm9ncmFtX19hZGRfZmxhZ3MocG9zLCBCUEZfRl9YRFBfREVWX0JPVU5EX09OTFkpO1xcbiBcXHRcXHRcXHRicGZfcHJvZ3JhbV9fc2V0X2lmaW5kZXgocG9zLCB4ZHBtZXRhX2lmaW5kZXgpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRicGZfcHJvZ3JhbV9fc2V0X2lmaW5kZXgocG9zLCBvZmZsb2FkX2lmaW5kZXgpO1xcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5jIGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xcbmluZGV4IGMwMzZlOGE5MWVkODguLjIyMWM0ZmUxZmIzMTkgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvbGliL2JwZi9saWJicGYuY1xcbisrKyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcXG5AQCAtOTkzOCw2ICs5OTM4LDE2IEBAIGludCBicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgX191MzIgZmxhZ3MpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitpbnQgYnBmX3Byb2dyYW1fX2FkZF9mbGFncyhzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIF9fdTMyIGZsYWdzKVxcbit7XFxuK1xcdHJldHVybiBicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKHByb2csIHByb2ctXFx1MDAzZXByb2dfZmxhZ3MgfCBmbGFncyk7XFxuK31cXG4rXFxuK2ludCBicGZfcHJvZ3JhbV9fY2xlYXJfZmxhZ3Moc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBfX3UzMiBmbGFncylcXG4re1xcbitcXHRyZXR1cm4gYnBmX3Byb2dyYW1fX3NldF9mbGFncyhwcm9nLCBwcm9nLVxcdTAwM2Vwcm9nX2ZsYWdzIFxcdTAwMjYgfmZsYWdzKTtcXG4rfVxcbitcXG4gX191MzIgYnBmX3Byb2dyYW1fX2xvZ19sZXZlbChjb25zdCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cpXFxuIHtcXG4gXFx0cmV0dXJuIHByb2ctXFx1MDAzZWxvZ19sZXZlbDtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9saWJicGYuaCBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcXG5pbmRleCBiOTY1YWQ1NzE1NDAzLi4zOTMyYmY5Y2I0OTAzIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcXG4rKysgYi90b29scy9saWIvYnBmL2xpYmJwZi5oXFxuQEAgLTEwMTEsNiArMTAxMSwxMiBAQCBicGZfcHJvZ3JhbV9fc2V0X2V4cGVjdGVkX2F0dGFjaF90eXBlKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyxcXG4gTElCQlBGX0FQSSBfX3UzMiBicGZfcHJvZ3JhbV9fZmxhZ3MoY29uc3Qgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nKTtcXG4gTElCQlBGX0FQSSBpbnQgYnBmX3Byb2dyYW1fX3NldF9mbGFncyhzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIF9fdTMyIGZsYWdzKTtcXG4gXFxuKy8qIENvbnZlbmllbmNlIGhlbHBlcnMgdG8gbm9uLWRlc3RydWN0aXZlbHkgYWRkIG9yIGNsZWFyIHRoZSBzcGVjaWZpZWQgZmxhZ3NcXG4rICogaW5zdGVhZCBvZiBjbG9iYmVyaW5nIHRoZW0gYXMgYnBmX3Byb2dyYW1fX3NldF9mbGFncygpIGRvZXMuXFxuKyAqL1xcbitMSUJCUEZfQVBJIGludCBicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgX191MzIgZmxhZ3MpO1xcbitMSUJCUEZfQVBJIGludCBicGZfcHJvZ3JhbV9fY2xlYXJfZmxhZ3Moc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBfX3UzMiBmbGFncyk7XFxuK1xcbiAvKiBQZXItcHJvZ3JhbSBsb2cgbGV2ZWwgYW5kIGxvZyBidWZmZXIgZ2V0dGVycy9zZXR0ZXJzLlxcbiAgKiBTZWUgYnBmX29iamVjdF9vcGVuX29wdHMgY29tbWVudHMgcmVnYXJkaW5nIGxvZ19sZXZlbCBhbmQgbG9nX2J1ZlxcbiAgKiBpbnRlcmFjdGlvbnMuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLm1hcCBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLm1hcFxcbmluZGV4IDA4YWIyZWE4ODFmYjYuLmE4MTFhMWIzYTA4NTcgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvbGliL2JwZi9saWJicGYubWFwXFxuKysrIGIvdG9vbHMvbGliL2JwZi9saWJicGYubWFwXFxuQEAgLTQ1OCw3ICs0NTgsOSBAQCBMSUJCUEZfMS43LjAge1xcbiBcXG4gTElCQlBGXzEuOC4wIHtcXG4gXFx0Z2xvYmFsOlxcbitcXHRcXHRicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzO1xcbiBcXHRcXHRicGZfcHJvZ3JhbV9fYXR0YWNoX3RyYWNpbmdfbXVsdGk7XFxuK1xcdFxcdGJwZl9wcm9ncmFtX19jbGVhcl9mbGFncztcXG4gXFx0XFx0YnBmX3Byb2dyYW1fX2Nsb25lO1xcbiBcXHRcXHRidGZfX2ZpbmRfYnlfbmFtZV9raW5kX293bjtcXG4gXFx0XFx0YnRmX19uZXdfZW1wdHlfb3B0cztcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXR0YWNoX3Byb2JlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hdHRhY2hfcHJvYmUuY1xcbmluZGV4IDdkYWRiOTBlN2I2ODkuLjQxMTM2ZTFjNzc1MmUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXR0YWNoX3Byb2JlLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hdHRhY2hfcHJvYmUuY1xcbkBAIC01NDMsOSArNTQzLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9rcHJvYmVfc2xlZXBhYmxlKHZvaWQpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdC8qIHNsZWVwYWJsZSBrcHJvYmUgdGVzdCBjYXNlIG5lZWRzIGZsYWdzIHNldCBiZWZvcmUgbG9hZGluZyAqL1xcbi1cXHRpZiAoIUFTU0VSVF9PSyhicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKFxcbi1cXHRcXHRcXHQgICAgICAgc2tlbC1cXHUwMDNlcHJvZ3MuaGFuZGxlX2twcm9iZV9zbGVlcGFibGUsXFxuLVxcdFxcdFxcdCAgICAgICBicGZfcHJvZ3JhbV9fZmxhZ3Moc2tlbC1cXHUwMDNlcHJvZ3MuaGFuZGxlX2twcm9iZV9zbGVlcGFibGUpIHwgQlBGX0ZfU0xFRVBBQkxFKSxcXG4rXFx0aWYgKCFBU1NFUlRfT0soYnBmX3Byb2dyYW1fX2FkZF9mbGFncyhza2VsLVxcdTAwM2Vwcm9ncy5oYW5kbGVfa3Byb2JlX3NsZWVwYWJsZSwgQlBGX0ZfU0xFRVBBQkxFKSxcXG4gXFx0XFx0ICAgICAgIFxcXCJrcHJvYmVfc2xlZXBhYmxlX2ZsYWdzXFxcIikpXFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl92ZXJpZl9zY2FsZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3ZlcmlmX3NjYWxlLmNcXG5pbmRleCA2NTIzMDdhMWIyMmU3Li45MDJhNzBkNWFmZWI2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl92ZXJpZl9zY2FsZS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3ZlcmlmX3NjYWxlLmNcXG5AQCAtMzUsNyArMzUsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2xvYWQoY29uc3QgY2hhciAqZmlsZSwgZW51bSBicGZfcHJvZ190eXBlIHR5cGUpXFxuIFxcdH1cXG4gXFxuIFxcdGJwZl9wcm9ncmFtX19zZXRfdHlwZShwcm9nLCB0eXBlKTtcXG4tXFx0YnBmX3Byb2dyYW1fX3NldF9mbGFncyhwcm9nLCBicGZfcHJvZ3JhbV9fZmxhZ3MocHJvZykgfCB0ZXN0aW5nX3Byb2dfZmxhZ3MoKSk7XFxuK1xcdGJwZl9wcm9ncmFtX19hZGRfZmxhZ3MocHJvZywgdGVzdGluZ19wcm9nX2ZsYWdzKCkpO1xcbiBcXHRicGZfcHJvZ3JhbV9fc2V0X2xvZ19sZXZlbChwcm9nLCA0IHwgZXh0cmFfcHJvZ19sb2FkX2xvZ19mbGFncyk7XFxuIFxcbiBcXHRlcnIgPSBicGZfb2JqZWN0X19sb2FkKG9iaik7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tlcm5lbF9mbGFnLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rZXJuZWxfZmxhZy5jXFxuaW5kZXggMjVlYjU5ZjQ2MGFiZS4uNzJjMGVmOGRhNDA5ZSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rZXJuZWxfZmxhZy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva2VybmVsX2ZsYWcuY1xcbkBAIC0xMCwxNSArMTAsMzEgQEAgdm9pZCB0ZXN0X2tlcm5lbF9mbGFnKHZvaWQpXFxuIFxcdHN0cnVjdCB0ZXN0X2tlcm5lbF9mbGFnICpsc21fc2tlbDtcXG4gXFx0c3RydWN0IGtmdW5jX2NhbGxfdGVzdCAqc2tlbCA9IE5VTEw7XFxuIFxcdHN0cnVjdCBrZnVuY19jYWxsX3Rlc3RfbHNrZWwgKmxza2VsID0gTlVMTDtcXG4rXFx0c3RydWN0IGJwZl9wcm9ncmFtICpwcm9nO1xcbitcXHRfX3UzMiBmbGFncztcXG4gXFx0aW50IHJldDtcXG4gXFxuLVxcdGxzbV9za2VsID0gdGVzdF9rZXJuZWxfZmxhZ19fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRsc21fc2tlbCA9IHRlc3Rfa2VybmVsX2ZsYWdfX29wZW4oKTtcXG4gXFx0aWYgKCFBU1NFUlRfT0tfUFRSKGxzbV9za2VsLCBcXFwibHNtX3NrZWxcXFwiKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0QVNTRVJUX0VRKGJwZl9wcm9ncmFtX19mbGFncyhsc21fc2tlbC1cXHUwMDNlcHJvZ3MuYnBmKSBcXHUwMDI2IEJQRl9GX1NMRUVQQUJMRSxcXG4rXFx0cHJvZyA9IGxzbV9za2VsLVxcdTAwM2Vwcm9ncy5icGY7XFxuK1xcdGZsYWdzID0gYnBmX3Byb2dyYW1fX2ZsYWdzKHByb2cpO1xcbitcXHRBU1NFUlRfRVEoZmxhZ3MgXFx1MDAyNiBCUEZfRl9TTEVFUEFCTEUsXFxuIFxcdFxcdCAgQlBGX0ZfU0xFRVBBQkxFLCBcXFwic2xlZXBhYmxlIGluIHByb2dyYW0gZmxhZ3NcXFwiKTtcXG4gXFxuK1xcdHJldCA9IGJwZl9wcm9ncmFtX19hZGRfZmxhZ3MocHJvZywgQlBGX0ZfQU5ZX0FMSUdOTUVOVCk7XFxuK1xcdEFTU0VSVF9PSyhyZXQsIFxcXCJicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzIHJldFxcXCIpO1xcbitcXHRBU1NFUlRfRVEoYnBmX3Byb2dyYW1fX2ZsYWdzKHByb2cpLCBmbGFncyB8IEJQRl9GX0FOWV9BTElHTk1FTlQsXFxuK1xcdFxcdCAgXFxcImJwZl9wcm9ncmFtX19hZGRfZmxhZ3MgdmFsdWVcXFwiKTtcXG4rXFxuK1xcdHJldCA9IGJwZl9wcm9ncmFtX19jbGVhcl9mbGFncyhwcm9nLCBCUEZfRl9BTllfQUxJR05NRU5UKTtcXG4rXFx0QVNTRVJUX09LKHJldCwgXFxcImJwZl9wcm9ncmFtX19jbGVhcl9mbGFncyByZXRcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKGJwZl9wcm9ncmFtX19mbGFncyhwcm9nKSwgZmxhZ3MsIFxcXCJicGZfcHJvZ3JhbV9fY2xlYXJfZmxhZ3MgdmFsdWVcXFwiKTtcXG4rXFxuK1xcdHJldCA9IHRlc3Rfa2VybmVsX2ZsYWdfX2xvYWQobHNtX3NrZWwpO1xcbitcXHRBU1NFUlRfT0socmV0LCBcXFwidGVzdF9rZXJuZWxfZmxhZ19fbG9hZFxcXCIpO1xcbitcXG4gXFx0bHNtX3NrZWwtXFx1MDAzZWJzcy1cXHUwMDNlbW9uaXRvcmVkX3RpZCA9IHN5c19nZXR0aWQoKTtcXG4gXFxuIFxcdHJldCA9IHRlc3Rfa2VybmVsX2ZsYWdfX2F0dGFjaChsc21fc2tlbCk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2twcm9iZV9tdWx0aV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rcHJvYmVfbXVsdGlfdGVzdC5jXFxuaW5kZXggZWQzZmQwYTg4ZGFiNi4uNjUxMTIzY2Q4NjAyZCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rcHJvYmVfbXVsdGlfdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3Byb2JlX211bHRpX3Rlc3QuY1xcbkBAIC0zNjEsOCArMzYxLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9hdHRhY2hfYXBpX2ZhaWxzKHZvaWQpXFxuIFxcbiBcXHRzbF9za2VsLVxcdTAwM2Vic3MtXFx1MDAzZXVzZXJfcHRyID0gc2xfc2tlbDtcXG4gXFxuLVxcdGVyciA9IGJwZl9wcm9ncmFtX19zZXRfZmxhZ3Moc2xfc2tlbC1cXHUwMDNlcHJvZ3MuaGFuZGxlX2twcm9iZV9tdWx0aV9zbGVlcGFibGUsXFxuLVxcdFxcdFxcdFxcdCAgICAgYnBmX3Byb2dyYW1fX2ZsYWdzKHNsX3NrZWwtXFx1MDAzZXByb2dzLmhhbmRsZV9rcHJvYmVfbXVsdGlfc2xlZXBhYmxlKSB8IEJQRl9GX1NMRUVQQUJMRSk7XFxuK1xcdGVyciA9IGJwZl9wcm9ncmFtX19hZGRfZmxhZ3Moc2xfc2tlbC1cXHUwMDNlcHJvZ3MuaGFuZGxlX2twcm9iZV9tdWx0aV9zbGVlcGFibGUsIEJQRl9GX1NMRUVQQUJMRSk7XFxuIFxcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInNsZWVwX3NrZWxfc2V0X2ZsYWdzXFxcIikpXFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9tZXRhZGF0YS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX21ldGFkYXRhLmNcXG5pbmRleCAwNDdkZmRjMzIyYTJmLi4zYWI5NjM0NTg5MDNkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9tZXRhZGF0YS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX21ldGFkYXRhLmNcXG5AQCAtNDA4LDE0ICs0MDgsMTQgQEAgdm9pZCB0ZXN0X3hkcF9tZXRhZGF0YSh2b2lkKVxcbiBcXG4gXFx0cHJvZyA9IGJwZl9vYmplY3RfX2ZpbmRfcHJvZ3JhbV9ieV9uYW1lKGJwZl9vYmotXFx1MDAzZW9iaiwgXFxcInJ4XFxcIik7XFxuIFxcdGJwZl9wcm9ncmFtX19zZXRfaWZpbmRleChwcm9nLCByeF9pZmluZGV4KTtcXG4tXFx0YnBmX3Byb2dyYW1fX3NldF9mbGFncyhwcm9nLCBicGZfcHJvZ3JhbV9fZmxhZ3MocHJvZykgfCBCUEZfRl9YRFBfREVWX0JPVU5EX09OTFkpO1xcbitcXHRicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHByb2csIEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWSk7XFxuIFxcbiBcXHQvKiBNYWtlIHN1cmUgd2UgY2FuIGxvYWQgYSBkZXYtYm91bmQgcHJvZ3JhbSB0aGF0IHBlcmZvcm1zXFxuIFxcdCAqIFhEUF9SRURJUkVDVCBpbnRvIGEgZGV2bWFwLlxcbiBcXHQgKi9cXG4gXFx0bmV3X3Byb2cgPSBicGZfb2JqZWN0X19maW5kX3Byb2dyYW1fYnlfbmFtZShicGZfb2JqLVxcdTAwM2VvYmosIFxcXCJyZWRpcmVjdFxcXCIpO1xcbiBcXHRicGZfcHJvZ3JhbV9fc2V0X2lmaW5kZXgobmV3X3Byb2csIHJ4X2lmaW5kZXgpO1xcbi1cXHRicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKG5ld19wcm9nLCBicGZfcHJvZ3JhbV9fZmxhZ3MobmV3X3Byb2cpIHwgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTtcXG4rXFx0YnBmX3Byb2dyYW1fX2FkZF9mbGFncyhuZXdfcHJvZywgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTtcXG4gXFxuIFxcdGlmICghQVNTRVJUX09LKHhkcF9tZXRhZGF0YV9fbG9hZChicGZfb2JqKSwgXFxcImxvYWQgc2tlbGV0b25cXFwiKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmNcXG5pbmRleCA3OTRhN2RmYjA1Nzk2Li4yODcyNGRlMDYzMjIwIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmNcXG5AQCAtNzQ4LDcgKzc0OCw3IEBAIHN0YXRpYyB2b2lkIHByZXBhcmVfY2FzZShzdHJ1Y3QgdGVzdF9sb2FkZXIgKnRlc3RlcixcXG4gXFx0XFx0XFx0IHN0cnVjdCBicGZfb2JqZWN0ICpvYmosXFxuIFxcdFxcdFxcdCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cpXFxuIHtcXG4tXFx0aW50IG1pbl9sb2dfbGV2ZWwgPSAwLCBwcm9nX2ZsYWdzO1xcbitcXHRpbnQgbWluX2xvZ19sZXZlbCA9IDA7XFxuIFxcbiBcXHRpZiAoZW52LnZlcmJvc2l0eSBcXHUwMDNlIFZFUkJPU0VfTk9ORSlcXG4gXFx0XFx0bWluX2xvZ19sZXZlbCA9IDE7XFxuQEAgLTc2Niw4ICs3NjYsNyBAQCBzdGF0aWMgdm9pZCBwcmVwYXJlX2Nhc2Uoc3RydWN0IHRlc3RfbG9hZGVyICp0ZXN0ZXIsXFxuIFxcdGVsc2VcXG4gXFx0XFx0YnBmX3Byb2dyYW1fX3NldF9sb2dfbGV2ZWwocHJvZywgc3BlYy1cXHUwMDNlbG9nX2xldmVsKTtcXG4gXFxuLVxcdHByb2dfZmxhZ3MgPSBicGZfcHJvZ3JhbV9fZmxhZ3MocHJvZyk7XFxuLVxcdGJwZl9wcm9ncmFtX19zZXRfZmxhZ3MocHJvZywgcHJvZ19mbGFncyB8IHNwZWMtXFx1MDAzZXByb2dfZmxhZ3MpO1xcbitcXHRicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHByb2csIHNwZWMtXFx1MDAzZXByb2dfZmxhZ3MpO1xcbiBcXG4gXFx0dGVzdGVyLVxcdTAwM2Vsb2dfYnVmWzBdID0gJ1xcXFwwJztcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmNcXG5pbmRleCAzZjAzNzk0OWU5Nzg5Li5kMWQ2MDQ1MWM1YmNjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuY1xcbkBAIC0yOTIsNyArMjkyLDYgQEAgaW50IGJwZl9wcm9nX3Rlc3RfbG9hZChjb25zdCBjaGFyICpmaWxlLCBlbnVtIGJwZl9wcm9nX3R5cGUgdHlwZSxcXG4gXFx0KTtcXG4gXFx0c3RydWN0IGJwZl9vYmplY3QgKm9iajtcXG4gXFx0c3RydWN0IGJwZl9wcm9ncmFtICpwcm9nO1xcbi1cXHRfX3UzMiBmbGFncztcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdG9iaiA9IGJwZl9vYmplY3RfX29wZW5fZmlsZShmaWxlLCBcXHUwMDI2b3B0cyk7XFxuQEAgLTMwOCw4ICszMDcsNyBAQCBpbnQgYnBmX3Byb2dfdGVzdF9sb2FkKGNvbnN0IGNoYXIgKmZpbGUsIGVudW0gYnBmX3Byb2dfdHlwZSB0eXBlLFxcbiBcXHRpZiAodHlwZSAhPSBCUEZfUFJPR19UWVBFX1VOU1BFQyBcXHUwMDI2XFx1MDAyNiBicGZfcHJvZ3JhbV9fdHlwZShwcm9nKSAhPSB0eXBlKVxcbiBcXHRcXHRicGZfcHJvZ3JhbV9fc2V0X3R5cGUocHJvZywgdHlwZSk7XFxuIFxcbi1cXHRmbGFncyA9IGJwZl9wcm9ncmFtX19mbGFncyhwcm9nKSB8IHRlc3RpbmdfcHJvZ19mbGFncygpO1xcbi1cXHRicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKHByb2csIGZsYWdzKTtcXG4rXFx0YnBmX3Byb2dyYW1fX2FkZF9mbGFncyhwcm9nLCB0ZXN0aW5nX3Byb2dfZmxhZ3MoKSk7XFxuIFxcbiBcXHRlcnIgPSBicGZfb2JqZWN0X19sb2FkKG9iaik7XFxuIFxcdGlmIChlcnIpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpc3RhdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3ZlcmlzdGF0LmNcXG5pbmRleCBlNzA3NDFjNmI5YjdjLi45Y2ZjOWI0YjQxYzEyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpc3RhdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3ZlcmlzdGF0LmNcXG5AQCAtMTcyMiw5ICsxNzIyLDkgQEAgc3RhdGljIGludCBwcm9jZXNzX3Byb2coY29uc3QgY2hhciAqZmlsZW5hbWUsIHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZcXG4gXFx0Zml4dXBfb2JqKG9iaiwgcHJvZywgYmFzZV9maWxlbmFtZSk7XFxuIFxcbiBcXHRpZiAoZW52LmZvcmNlX2NoZWNrcG9pbnRzKVxcbi1cXHRcXHRicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKHByb2csIGJwZl9wcm9ncmFtX19mbGFncyhwcm9nKSB8IEJQRl9GX1RFU1RfU1RBVEVfRlJFUSk7XFxuK1xcdFxcdGJwZl9wcm9ncmFtX19hZGRfZmxhZ3MocHJvZywgQlBGX0ZfVEVTVF9TVEFURV9GUkVRKTtcXG4gXFx0aWYgKGVudi5mb3JjZV9yZWdfaW52YXJpYW50cylcXG4tXFx0XFx0YnBmX3Byb2dyYW1fX3NldF9mbGFncyhwcm9nLCBicGZfcHJvZ3JhbV9fZmxhZ3MocHJvZykgfCBCUEZfRl9URVNUX1JFR19JTlZBUklBTlRTKTtcXG4rXFx0XFx0YnBmX3Byb2dyYW1fX2FkZF9mbGFncyhwcm9nLCBCUEZfRl9URVNUX1JFR19JTlZBUklBTlRTKTtcXG4gXFxuIFxcdG9wdHMubG9nX2J1ZiA9IGJ1ZjtcXG4gXFx0b3B0cy5sb2dfc2l6ZSA9IGJ1Zl9zejtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hkcF9od19tZXRhZGF0YS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hkcF9od19tZXRhZGF0YS5jXFxuaW5kZXggYzU1MDFiM2ZkZjQ4Zi4uYWIzZjVmYzU2ZTg2NyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveGRwX2h3X21ldGFkYXRhLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveGRwX2h3X21ldGFkYXRhLmNcXG5AQCAtODQ1LDcgKzg0NSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuIFxcbiBcXHRwcm9nID0gYnBmX29iamVjdF9fZmluZF9wcm9ncmFtX2J5X25hbWUoYnBmX29iai1cXHUwMDNlb2JqLCBcXFwicnhcXFwiKTtcXG4gXFx0YnBmX3Byb2dyYW1fX3NldF9pZmluZGV4KHByb2csIGlmaW5kZXgpO1xcbi1cXHRicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKHByb2csIGJwZl9wcm9ncmFtX19mbGFncyhwcm9nKSB8IEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWSk7XFxuK1xcdGJwZl9wcm9ncmFtX19hZGRfZmxhZ3MocHJvZywgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTtcXG4gXFxuIFxcdHByaW50ZihcXFwibG9hZCBicGYgcHJvZ3JhbS4uLlxcXFxuXFxcIik7XFxuIFxcdHJldCA9IHhkcF9od19tZXRhZGF0YV9fbG9hZChicGZfb2JqKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTM6MTQ6NTMuNDYyOTQ5MDU4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMzk2NjU0NjA1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIGNvZGUgdW5kZXIgdG9vbHMvIChzcGVjaWZpY2FsbHkgbGliYnBmLCBicGZ0b29sLCBhbmQgc2VsZnRlc3RzKSwgaW50cm9kdWNpbmcgdXNlci1zcGFjZSBoZWxwZXIgZnVuY3Rpb25zIGJwZl9wcm9ncmFtX19hZGRfZmxhZ3MoKSBhbmQgYnBmX3Byb2dyYW1fX2NsZWFyX2ZsYWdzKCkuIE5vIGtlcm5lbC1zcGFjZSBjb2RlICh2bWxpbnV4IG9yIG1vZHVsZXMpIGlzIHRvdWNoZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY2MzYwOTY5OWY2OWU3MWZjNDlhODQxMjZmOTI2YTdiM2Q4ZmUyYmVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDEzOjE0OjQ5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvYnBmL2JwZnRvb2wvcHJvZy5jIGIvdG9vbHMvYnBmL2JwZnRvb2wvcHJvZy5jXG5pbmRleCA4YzJmOTI1NWIzNmQ3Li42YWI5MTFlODIxNTUxIDEwMDY0NFxuLS0tIGEvdG9vbHMvYnBmL2JwZnRvb2wvcHJvZy5jXG4rKysgYi90b29scy9icGYvYnBmdG9vbC9wcm9nLmNcbkBAIC0xNzY5LDcgKzE3NjksNyBAQCBzdGF0aWMgaW50IGxvYWRfd2l0aF9vcHRpb25zKGludCBhcmdjLCBjaGFyICoqYXJndiwgYm9vbCBmaXJzdF9wcm9nX29ubHkpXG4gXHRcdH1cbiBcbiBcdFx0aWYgKHByb2dfdHlwZSA9PSBCUEZfUFJPR19UWVBFX1hEUCBcdTAwMjZcdTAwMjYgeGRwbWV0YV9pZmluZGV4KSB7XG4tXHRcdFx0YnBmX3Byb2dyYW1fX3NldF9mbGFncyhwb3MsIGJwZl9wcm9ncmFtX19mbGFncyhwb3MpIHwgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTtcbitcdFx0XHRicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHBvcywgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTtcbiBcdFx0XHRicGZfcHJvZ3JhbV9fc2V0X2lmaW5kZXgocG9zLCB4ZHBtZXRhX2lmaW5kZXgpO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdGJwZl9wcm9ncmFtX19zZXRfaWZpbmRleChwb3MsIG9mZmxvYWRfaWZpbmRleCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9saWJicGYuYyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbmluZGV4IGMwMzZlOGE5MWVkODguLjIyMWM0ZmUxZmIzMTkgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvYnBmL2xpYmJwZi5jXG4rKysgYi90b29scy9saWIvYnBmL2xpYmJwZi5jXG5AQCAtOTkzOCw2ICs5OTM4LDE2IEBAIGludCBicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgX191MzIgZmxhZ3MpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4raW50IGJwZl9wcm9ncmFtX19hZGRfZmxhZ3Moc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBfX3UzMiBmbGFncylcbit7XG4rXHRyZXR1cm4gYnBmX3Byb2dyYW1fX3NldF9mbGFncyhwcm9nLCBwcm9nLVx1MDAzZXByb2dfZmxhZ3MgfCBmbGFncyk7XG4rfVxuK1xuK2ludCBicGZfcHJvZ3JhbV9fY2xlYXJfZmxhZ3Moc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBfX3UzMiBmbGFncylcbit7XG4rXHRyZXR1cm4gYnBmX3Byb2dyYW1fX3NldF9mbGFncyhwcm9nLCBwcm9nLVx1MDAzZXByb2dfZmxhZ3MgXHUwMDI2IH5mbGFncyk7XG4rfVxuK1xuIF9fdTMyIGJwZl9wcm9ncmFtX19sb2dfbGV2ZWwoY29uc3Qgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nKVxuIHtcbiBcdHJldHVybiBwcm9nLVx1MDAzZWxvZ19sZXZlbDtcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5oIGIvdG9vbHMvbGliL2JwZi9saWJicGYuaFxuaW5kZXggYjk2NWFkNTcxNTQwMy4uMzkzMmJmOWNiNDkwMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcbisrKyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcbkBAIC0xMDExLDYgKzEwMTEsMTIgQEAgYnBmX3Byb2dyYW1fX3NldF9leHBlY3RlZF9hdHRhY2hfdHlwZShzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csXG4gTElCQlBGX0FQSSBfX3UzMiBicGZfcHJvZ3JhbV9fZmxhZ3MoY29uc3Qgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nKTtcbiBMSUJCUEZfQVBJIGludCBicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgX191MzIgZmxhZ3MpO1xuIFxuKy8qIENvbnZlbmllbmNlIGhlbHBlcnMgdG8gbm9uLWRlc3RydWN0aXZlbHkgYWRkIG9yIGNsZWFyIHRoZSBzcGVjaWZpZWQgZmxhZ3NcbisgKiBpbnN0ZWFkIG9mIGNsb2JiZXJpbmcgdGhlbSBhcyBicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKCkgZG9lcy5cbisgKi9cbitMSUJCUEZfQVBJIGludCBicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgX191MzIgZmxhZ3MpO1xuK0xJQkJQRl9BUEkgaW50IGJwZl9wcm9ncmFtX19jbGVhcl9mbGFncyhzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIF9fdTMyIGZsYWdzKTtcbitcbiAvKiBQZXItcHJvZ3JhbSBsb2cgbGV2ZWwgYW5kIGxvZyBidWZmZXIgZ2V0dGVycy9zZXR0ZXJzLlxuICAqIFNlZSBicGZfb2JqZWN0X29wZW5fb3B0cyBjb21tZW50cyByZWdhcmRpbmcgbG9nX2xldmVsIGFuZCBsb2dfYnVmXG4gICogaW50ZXJhY3Rpb25zLlxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLm1hcCBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLm1hcFxuaW5kZXggMDhhYjJlYTg4MWZiNi4uYTgxMWExYjNhMDg1NyAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLm1hcFxuKysrIGIvdG9vbHMvbGliL2JwZi9saWJicGYubWFwXG5AQCAtNDU4LDcgKzQ1OCw5IEBAIExJQkJQRl8xLjcuMCB7XG4gXG4gTElCQlBGXzEuOC4wIHtcbiBcdGdsb2JhbDpcbitcdFx0YnBmX3Byb2dyYW1fX2FkZF9mbGFncztcbiBcdFx0YnBmX3Byb2dyYW1fX2F0dGFjaF90cmFjaW5nX211bHRpO1xuK1x0XHRicGZfcHJvZ3JhbV9fY2xlYXJfZmxhZ3M7XG4gXHRcdGJwZl9wcm9ncmFtX19jbG9uZTtcbiBcdFx0YnRmX19maW5kX2J5X25hbWVfa2luZF9vd247XG4gXHRcdGJ0Zl9fbmV3X2VtcHR5X29wdHM7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXR0YWNoX3Byb2JlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hdHRhY2hfcHJvYmUuY1xuaW5kZXggN2RhZGI5MGU3YjY4OS4uNDExMzZlMWM3NzUyZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2F0dGFjaF9wcm9iZS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hdHRhY2hfcHJvYmUuY1xuQEAgLTU0Myw5ICs1NDMsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2twcm9iZV9zbGVlcGFibGUodm9pZClcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Lyogc2xlZXBhYmxlIGtwcm9iZSB0ZXN0IGNhc2UgbmVlZHMgZmxhZ3Mgc2V0IGJlZm9yZSBsb2FkaW5nICovXG4tXHRpZiAoIUFTU0VSVF9PSyhicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKFxuLVx0XHRcdCAgICAgICBza2VsLVx1MDAzZXByb2dzLmhhbmRsZV9rcHJvYmVfc2xlZXBhYmxlLFxuLVx0XHRcdCAgICAgICBicGZfcHJvZ3JhbV9fZmxhZ3Moc2tlbC1cdTAwM2Vwcm9ncy5oYW5kbGVfa3Byb2JlX3NsZWVwYWJsZSkgfCBCUEZfRl9TTEVFUEFCTEUpLFxuK1x0aWYgKCFBU1NFUlRfT0soYnBmX3Byb2dyYW1fX2FkZF9mbGFncyhza2VsLVx1MDAzZXByb2dzLmhhbmRsZV9rcHJvYmVfc2xlZXBhYmxlLCBCUEZfRl9TTEVFUEFCTEUpLFxuIFx0XHQgICAgICAgXCJrcHJvYmVfc2xlZXBhYmxlX2ZsYWdzXCIpKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3ZlcmlmX3NjYWxlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfdmVyaWZfc2NhbGUuY1xuaW5kZXggNjUyMzA3YTFiMjJlNy4uOTAyYTcwZDVhZmViNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl92ZXJpZl9zY2FsZS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfdmVyaWZfc2NhbGUuY1xuQEAgLTM1LDcgKzM1LDcgQEAgc3RhdGljIGludCBjaGVja19sb2FkKGNvbnN0IGNoYXIgKmZpbGUsIGVudW0gYnBmX3Byb2dfdHlwZSB0eXBlKVxuIFx0fVxuIFxuIFx0YnBmX3Byb2dyYW1fX3NldF90eXBlKHByb2csIHR5cGUpO1xuLVx0YnBmX3Byb2dyYW1fX3NldF9mbGFncyhwcm9nLCBicGZfcHJvZ3JhbV9fZmxhZ3MocHJvZykgfCB0ZXN0aW5nX3Byb2dfZmxhZ3MoKSk7XG4rXHRicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHByb2csIHRlc3RpbmdfcHJvZ19mbGFncygpKTtcbiBcdGJwZl9wcm9ncmFtX19zZXRfbG9nX2xldmVsKHByb2csIDQgfCBleHRyYV9wcm9nX2xvYWRfbG9nX2ZsYWdzKTtcbiBcbiBcdGVyciA9IGJwZl9vYmplY3RfX2xvYWQob2JqKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rZXJuZWxfZmxhZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva2VybmVsX2ZsYWcuY1xuaW5kZXggMjVlYjU5ZjQ2MGFiZS4uNzJjMGVmOGRhNDA5ZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tlcm5lbF9mbGFnLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tlcm5lbF9mbGFnLmNcbkBAIC0xMCwxNSArMTAsMzEgQEAgdm9pZCB0ZXN0X2tlcm5lbF9mbGFnKHZvaWQpXG4gXHRzdHJ1Y3QgdGVzdF9rZXJuZWxfZmxhZyAqbHNtX3NrZWw7XG4gXHRzdHJ1Y3Qga2Z1bmNfY2FsbF90ZXN0ICpza2VsID0gTlVMTDtcbiBcdHN0cnVjdCBrZnVuY19jYWxsX3Rlc3RfbHNrZWwgKmxza2VsID0gTlVMTDtcbitcdHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZztcbitcdF9fdTMyIGZsYWdzO1xuIFx0aW50IHJldDtcbiBcbi1cdGxzbV9za2VsID0gdGVzdF9rZXJuZWxfZmxhZ19fb3Blbl9hbmRfbG9hZCgpO1xuK1x0bHNtX3NrZWwgPSB0ZXN0X2tlcm5lbF9mbGFnX19vcGVuKCk7XG4gXHRpZiAoIUFTU0VSVF9PS19QVFIobHNtX3NrZWwsIFwibHNtX3NrZWxcIikpXG4gXHRcdHJldHVybjtcbiBcbi1cdEFTU0VSVF9FUShicGZfcHJvZ3JhbV9fZmxhZ3MobHNtX3NrZWwtXHUwMDNlcHJvZ3MuYnBmKSBcdTAwMjYgQlBGX0ZfU0xFRVBBQkxFLFxuK1x0cHJvZyA9IGxzbV9za2VsLVx1MDAzZXByb2dzLmJwZjtcbitcdGZsYWdzID0gYnBmX3Byb2dyYW1fX2ZsYWdzKHByb2cpO1xuK1x0QVNTRVJUX0VRKGZsYWdzIFx1MDAyNiBCUEZfRl9TTEVFUEFCTEUsXG4gXHRcdCAgQlBGX0ZfU0xFRVBBQkxFLCBcInNsZWVwYWJsZSBpbiBwcm9ncmFtIGZsYWdzXCIpO1xuIFxuK1x0cmV0ID0gYnBmX3Byb2dyYW1fX2FkZF9mbGFncyhwcm9nLCBCUEZfRl9BTllfQUxJR05NRU5UKTtcbitcdEFTU0VSVF9PSyhyZXQsIFwiYnBmX3Byb2dyYW1fX2FkZF9mbGFncyByZXRcIik7XG4rXHRBU1NFUlRfRVEoYnBmX3Byb2dyYW1fX2ZsYWdzKHByb2cpLCBmbGFncyB8IEJQRl9GX0FOWV9BTElHTk1FTlQsXG4rXHRcdCAgXCJicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzIHZhbHVlXCIpO1xuK1xuK1x0cmV0ID0gYnBmX3Byb2dyYW1fX2NsZWFyX2ZsYWdzKHByb2csIEJQRl9GX0FOWV9BTElHTk1FTlQpO1xuK1x0QVNTRVJUX09LKHJldCwgXCJicGZfcHJvZ3JhbV9fY2xlYXJfZmxhZ3MgcmV0XCIpO1xuK1x0QVNTRVJUX0VRKGJwZl9wcm9ncmFtX19mbGFncyhwcm9nKSwgZmxhZ3MsIFwiYnBmX3Byb2dyYW1fX2NsZWFyX2ZsYWdzIHZhbHVlXCIpO1xuK1xuK1x0cmV0ID0gdGVzdF9rZXJuZWxfZmxhZ19fbG9hZChsc21fc2tlbCk7XG4rXHRBU1NFUlRfT0socmV0LCBcInRlc3Rfa2VybmVsX2ZsYWdfX2xvYWRcIik7XG4rXG4gXHRsc21fc2tlbC1cdTAwM2Vic3MtXHUwMDNlbW9uaXRvcmVkX3RpZCA9IHN5c19nZXR0aWQoKTtcbiBcbiBcdHJldCA9IHRlc3Rfa2VybmVsX2ZsYWdfX2F0dGFjaChsc21fc2tlbCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3Byb2JlX211bHRpX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2twcm9iZV9tdWx0aV90ZXN0LmNcbmluZGV4IGVkM2ZkMGE4OGRhYjYuLjY1MTEyM2NkODYwMmQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rcHJvYmVfbXVsdGlfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rcHJvYmVfbXVsdGlfdGVzdC5jXG5AQCAtMzYxLDggKzM2MSw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfYXR0YWNoX2FwaV9mYWlscyh2b2lkKVxuIFxuIFx0c2xfc2tlbC1cdTAwM2Vic3MtXHUwMDNldXNlcl9wdHIgPSBzbF9za2VsO1xuIFxuLVx0ZXJyID0gYnBmX3Byb2dyYW1fX3NldF9mbGFncyhzbF9za2VsLVx1MDAzZXByb2dzLmhhbmRsZV9rcHJvYmVfbXVsdGlfc2xlZXBhYmxlLFxuLVx0XHRcdFx0ICAgICBicGZfcHJvZ3JhbV9fZmxhZ3Moc2xfc2tlbC1cdTAwM2Vwcm9ncy5oYW5kbGVfa3Byb2JlX211bHRpX3NsZWVwYWJsZSkgfCBCUEZfRl9TTEVFUEFCTEUpO1xuK1x0ZXJyID0gYnBmX3Byb2dyYW1fX2FkZF9mbGFncyhzbF9za2VsLVx1MDAzZXByb2dzLmhhbmRsZV9rcHJvYmVfbXVsdGlfc2xlZXBhYmxlLCBCUEZfRl9TTEVFUEFCTEUpO1xuIFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcInNsZWVwX3NrZWxfc2V0X2ZsYWdzXCIpKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX21ldGFkYXRhLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfbWV0YWRhdGEuY1xuaW5kZXggMDQ3ZGZkYzMyMmEyZi4uM2FiOTYzNDU4OTAzZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9tZXRhZGF0YS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfbWV0YWRhdGEuY1xuQEAgLTQwOCwxNCArNDA4LDE0IEBAIHZvaWQgdGVzdF94ZHBfbWV0YWRhdGEodm9pZClcbiBcbiBcdHByb2cgPSBicGZfb2JqZWN0X19maW5kX3Byb2dyYW1fYnlfbmFtZShicGZfb2JqLVx1MDAzZW9iaiwgXCJyeFwiKTtcbiBcdGJwZl9wcm9ncmFtX19zZXRfaWZpbmRleChwcm9nLCByeF9pZmluZGV4KTtcbi1cdGJwZl9wcm9ncmFtX19zZXRfZmxhZ3MocHJvZywgYnBmX3Byb2dyYW1fX2ZsYWdzKHByb2cpIHwgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTtcbitcdGJwZl9wcm9ncmFtX19hZGRfZmxhZ3MocHJvZywgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTtcbiBcbiBcdC8qIE1ha2Ugc3VyZSB3ZSBjYW4gbG9hZCBhIGRldi1ib3VuZCBwcm9ncmFtIHRoYXQgcGVyZm9ybXNcbiBcdCAqIFhEUF9SRURJUkVDVCBpbnRvIGEgZGV2bWFwLlxuIFx0ICovXG4gXHRuZXdfcHJvZyA9IGJwZl9vYmplY3RfX2ZpbmRfcHJvZ3JhbV9ieV9uYW1lKGJwZl9vYmotXHUwMDNlb2JqLCBcInJlZGlyZWN0XCIpO1xuIFx0YnBmX3Byb2dyYW1fX3NldF9pZmluZGV4KG5ld19wcm9nLCByeF9pZmluZGV4KTtcbi1cdGJwZl9wcm9ncmFtX19zZXRfZmxhZ3MobmV3X3Byb2csIGJwZl9wcm9ncmFtX19mbGFncyhuZXdfcHJvZykgfCBCUEZfRl9YRFBfREVWX0JPVU5EX09OTFkpO1xuK1x0YnBmX3Byb2dyYW1fX2FkZF9mbGFncyhuZXdfcHJvZywgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTtcbiBcbiBcdGlmICghQVNTRVJUX09LKHhkcF9tZXRhZGF0YV9fbG9hZChicGZfb2JqKSwgXCJsb2FkIHNrZWxldG9uXCIpKVxuIFx0XHRnb3RvIG91dDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jXG5pbmRleCA3OTRhN2RmYjA1Nzk2Li4yODcyNGRlMDYzMjIwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jXG5AQCAtNzQ4LDcgKzc0OCw3IEBAIHN0YXRpYyB2b2lkIHByZXBhcmVfY2FzZShzdHJ1Y3QgdGVzdF9sb2FkZXIgKnRlc3RlcixcbiBcdFx0XHQgc3RydWN0IGJwZl9vYmplY3QgKm9iaixcbiBcdFx0XHQgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nKVxuIHtcbi1cdGludCBtaW5fbG9nX2xldmVsID0gMCwgcHJvZ19mbGFncztcbitcdGludCBtaW5fbG9nX2xldmVsID0gMDtcbiBcbiBcdGlmIChlbnYudmVyYm9zaXR5IFx1MDAzZSBWRVJCT1NFX05PTkUpXG4gXHRcdG1pbl9sb2dfbGV2ZWwgPSAxO1xuQEAgLTc2Niw4ICs3NjYsNyBAQCBzdGF0aWMgdm9pZCBwcmVwYXJlX2Nhc2Uoc3RydWN0IHRlc3RfbG9hZGVyICp0ZXN0ZXIsXG4gXHRlbHNlXG4gXHRcdGJwZl9wcm9ncmFtX19zZXRfbG9nX2xldmVsKHByb2csIHNwZWMtXHUwMDNlbG9nX2xldmVsKTtcbiBcbi1cdHByb2dfZmxhZ3MgPSBicGZfcHJvZ3JhbV9fZmxhZ3MocHJvZyk7XG4tXHRicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKHByb2csIHByb2dfZmxhZ3MgfCBzcGVjLVx1MDAzZXByb2dfZmxhZ3MpO1xuK1x0YnBmX3Byb2dyYW1fX2FkZF9mbGFncyhwcm9nLCBzcGVjLVx1MDAzZXByb2dfZmxhZ3MpO1xuIFxuIFx0dGVzdGVyLVx1MDAzZWxvZ19idWZbMF0gPSAnXFwwJztcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5jXG5pbmRleCAzZjAzNzk0OWU5Nzg5Li5kMWQ2MDQ1MWM1YmNjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmNcbkBAIC0yOTIsNyArMjkyLDYgQEAgaW50IGJwZl9wcm9nX3Rlc3RfbG9hZChjb25zdCBjaGFyICpmaWxlLCBlbnVtIGJwZl9wcm9nX3R5cGUgdHlwZSxcbiBcdCk7XG4gXHRzdHJ1Y3QgYnBmX29iamVjdCAqb2JqO1xuIFx0c3RydWN0IGJwZl9wcm9ncmFtICpwcm9nO1xuLVx0X191MzIgZmxhZ3M7XG4gXHRpbnQgZXJyO1xuIFxuIFx0b2JqID0gYnBmX29iamVjdF9fb3Blbl9maWxlKGZpbGUsIFx1MDAyNm9wdHMpO1xuQEAgLTMwOCw4ICszMDcsNyBAQCBpbnQgYnBmX3Byb2dfdGVzdF9sb2FkKGNvbnN0IGNoYXIgKmZpbGUsIGVudW0gYnBmX3Byb2dfdHlwZSB0eXBlLFxuIFx0aWYgKHR5cGUgIT0gQlBGX1BST0dfVFlQRV9VTlNQRUMgXHUwMDI2XHUwMDI2IGJwZl9wcm9ncmFtX190eXBlKHByb2cpICE9IHR5cGUpXG4gXHRcdGJwZl9wcm9ncmFtX19zZXRfdHlwZShwcm9nLCB0eXBlKTtcbiBcbi1cdGZsYWdzID0gYnBmX3Byb2dyYW1fX2ZsYWdzKHByb2cpIHwgdGVzdGluZ19wcm9nX2ZsYWdzKCk7XG4tXHRicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKHByb2csIGZsYWdzKTtcbitcdGJwZl9wcm9ncmFtX19hZGRfZmxhZ3MocHJvZywgdGVzdGluZ19wcm9nX2ZsYWdzKCkpO1xuIFxuIFx0ZXJyID0gYnBmX29iamVjdF9fbG9hZChvYmopO1xuIFx0aWYgKGVycilcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaXN0YXQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpc3RhdC5jXG5pbmRleCBlNzA3NDFjNmI5YjdjLi45Y2ZjOWI0YjQxYzEyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3ZlcmlzdGF0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpc3RhdC5jXG5AQCAtMTcyMiw5ICsxNzIyLDkgQEAgc3RhdGljIGludCBwcm9jZXNzX3Byb2coY29uc3QgY2hhciAqZmlsZW5hbWUsIHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZcbiBcdGZpeHVwX29iaihvYmosIHByb2csIGJhc2VfZmlsZW5hbWUpO1xuIFxuIFx0aWYgKGVudi5mb3JjZV9jaGVja3BvaW50cylcbi1cdFx0YnBmX3Byb2dyYW1fX3NldF9mbGFncyhwcm9nLCBicGZfcHJvZ3JhbV9fZmxhZ3MocHJvZykgfCBCUEZfRl9URVNUX1NUQVRFX0ZSRVEpO1xuK1x0XHRicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHByb2csIEJQRl9GX1RFU1RfU1RBVEVfRlJFUSk7XG4gXHRpZiAoZW52LmZvcmNlX3JlZ19pbnZhcmlhbnRzKVxuLVx0XHRicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKHByb2csIGJwZl9wcm9ncmFtX19mbGFncyhwcm9nKSB8IEJQRl9GX1RFU1RfUkVHX0lOVkFSSUFOVFMpO1xuK1x0XHRicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHByb2csIEJQRl9GX1RFU1RfUkVHX0lOVkFSSUFOVFMpO1xuIFxuIFx0b3B0cy5sb2dfYnVmID0gYnVmO1xuIFx0b3B0cy5sb2dfc2l6ZSA9IGJ1Zl9zejtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveGRwX2h3X21ldGFkYXRhLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveGRwX2h3X21ldGFkYXRhLmNcbmluZGV4IGM1NTAxYjNmZGY0OGYuLmFiM2Y1ZmM1NmU4NjcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveGRwX2h3X21ldGFkYXRhLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94ZHBfaHdfbWV0YWRhdGEuY1xuQEAgLTg0NSw3ICs4NDUsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFxuIFx0cHJvZyA9IGJwZl9vYmplY3RfX2ZpbmRfcHJvZ3JhbV9ieV9uYW1lKGJwZl9vYmotXHUwMDNlb2JqLCBcInJ4XCIpO1xuIFx0YnBmX3Byb2dyYW1fX3NldF9pZmluZGV4KHByb2csIGlmaW5kZXgpO1xuLVx0YnBmX3Byb2dyYW1fX3NldF9mbGFncyhwcm9nLCBicGZfcHJvZ3JhbV9fZmxhZ3MocHJvZykgfCBCUEZfRl9YRFBfREVWX0JPVU5EX09OTFkpO1xuK1x0YnBmX3Byb2dyYW1fX2FkZF9mbGFncyhwcm9nLCBCUEZfRl9YRFBfREVWX0JPVU5EX09OTFkpO1xuIFxuIFx0cHJpbnRmKFwibG9hZCBicGYgcHJvZ3JhbS4uLlxcblwiKTtcbiBcdHJldCA9IHhkcF9od19tZXRhZGF0YV9fbG9hZChicGZfb2JqKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEzOjE0OjUzLjQ2Mjk1MDIzOFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc4OTQ1ODgwNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXM6IFdvcnRoRnV6emluZz1mYWxzZSBBc3Nlc3NtZW50KipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgZmlsZSBsaXN0OiBgdG9vbHMvYnBmL2JwZnRvb2wvcHJvZy5jYCwgYHRvb2xzL2xpYi9icGYvbGliYnBmLmNgLCBgdG9vbHMvbGliL2JwZi9saWJicGYuaGAsIGV0Yy4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIGV2ZXJ5dGhpbmcgaXMgY29udGFpbmVkIHdpdGhpbiB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5IOKAkyBzcGVjaWZpY2FsbHkgYHRvb2xzL2JwZi9gLCBgdG9vbHMvbGliL2JwZi9gLCBhbmQgdGhlIGV2ZXItcHJlc2VudCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYC4gVGhhdCBzY3JlYW1zIFwidXNlci1zcGFjZVwiIHRvIG1lLCBidXQgSSBuZWVkIHRvIGJlIG1ldGhvZGljYWwuXG5cbk5vdywgbGV0J3MgYXBwbHkgdGhlIFdvcnRoRnV6emluZyBjcml0ZXJpYS4gU2VjdGlvbiAyIGlzIGNsZWFyOiB3ZSBjYW4gY29uZmlkZW50bHkgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgICpvbmx5KiBpZiB0aGUgY29kZSBjaGFuZ2VzIGZhbGwgbmVhdGx5IGludG8gYSBzcGVjaWZpYyBzZXQgb2YgbmVnYXRpdmUgY3JpdGVyaWEuIEknbSBmb2N1c2luZyBvbiB0aGUgXCJOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzXCIgY2xhdXNlLiBXZSdyZSBsb29raW5nIGZvciBtb2RpZmljYXRpb25zIGluIHRoaW5ncyBsaWtlIGRvY3VtZW50YXRpb24sIGNvbW1lbnRzLCB1c2VyLXNwYWNlLCBzZWxmLXRlc3RzLCBzY3JpcHRzLCBhbmQgc2FtcGxlcyB0aGF0ICpkb24ndCogYWZmZWN0IHRoZSBjb3JlIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3IgaXRzIG1vZHVsZXMuXG5cbkxvb2tpbmcgYXQgdGhlIGZpbGVzLCBpdCdzIHByZXR0eSBjbGVhcjogYnBmdG9vbCwgbGliYnBmLCBhbmQgYnBmIHNlbGZ0ZXN0cyBhcmUgcHJlY2lzZWx5IHRoZSBraW5kcyBvZiB0b29scyBhbmQgdGVzdHMgdGhhdCBmYWxsIG91dHNpZGUgb2YgY29yZSBrZXJuZWwgc3BhY2UuIFRoZXkgYXJlIGFsbCBpbiBgdG9vbHMvYCBhbmQgbm8ga2VybmVsIGNvZGUgaXMgYmVpbmcgbW9kaWZpZWQuIEl0J3Mgc2FmZSB0byBzYXkgdGhlcmUgaXMgbm8gaW1wYWN0IG9uIHZtbGludXggb3IgbW9kdWxlcy5cblxuQmVmb3JlIEkgZ2l2ZSBpdCB0aGUgZ3JlZW4gbGlnaHQsIEkgd2lsbCBjaGVjayB0aGUgSEVBRCB0byB2ZXJpZnkgdGhlcmUgd2VyZSBubyBhZGRpdGlvbmFsIG1vZGlmaWNhdGlvbnMsIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjY0LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTA5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTM6MTU6MDEuMzU3NTQwODI0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NjAwNzMwNzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3Byb2dyYW1fX2FkZF9mbGFnc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJ0b29scy9icGYvYnBmdG9vbC9wcm9nLmM9MTU2Nz1zdGF0aWMgaW50IGxvYWRfd2l0aF9vcHRpb25zKGludCBhcmdjLCBjaGFyICoqYXJndiwgYm9vbCBmaXJzdF9wcm9nX29ubHkpXFxuLS1cXG50b29scy9icGYvYnBmdG9vbC9wcm9nLmMtMTc3MS1cXHRcXHRpZiAocHJvZ190eXBlID09IEJQRl9QUk9HX1RZUEVfWERQIFxcdTAwMjZcXHUwMDI2IHhkcG1ldGFfaWZpbmRleCkge1xcbnRvb2xzL2JwZi9icGZ0b29sL3Byb2cuYzoxNzcyOlxcdFxcdFxcdGJwZl9wcm9ncmFtX19hZGRfZmxhZ3MocG9zLCBCUEZfRl9YRFBfREVWX0JPVU5EX09OTFkpO1xcbnRvb2xzL2JwZi9icGZ0b29sL3Byb2cuYy0xNzczLVxcdFxcdFxcdGJwZl9wcm9ncmFtX19zZXRfaWZpbmRleChwb3MsIHhkcG1ldGFfaWZpbmRleCk7XFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jPTk5MzI9aW50IGJwZl9wcm9ncmFtX19zZXRfZmxhZ3Moc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBfX3UzMiBmbGFncylcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtOTk0MC1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jOjk5NDE6aW50IGJwZl9wcm9ncmFtX19hZGRfZmxhZ3Moc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBfX3UzMiBmbGFncylcXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTk5NDIte1xcbi0tXFxudG9vbHMvbGliL2JwZi9saWJicGYuaD0xMDEyPUxJQkJQRl9BUEkgaW50IGJwZl9wcm9ncmFtX19zZXRfZmxhZ3Moc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBfX3UzMiBmbGFncyk7XFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5oLTEwMTYtICovXFxudG9vbHMvbGliL2JwZi9saWJicGYuaDoxMDE3OkxJQkJQRl9BUEkgaW50IGJwZl9wcm9ncmFtX19hZGRfZmxhZ3Moc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBfX3UzMiBmbGFncyk7XFxudG9vbHMvbGliL2JwZi9saWJicGYuaC0xMDE4LUxJQkJQRl9BUEkgaW50IGJwZl9wcm9ncmFtX19jbGVhcl9mbGFncyhzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIF9fdTMyIGZsYWdzKTtcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLm1hcD00NTk9TElCQlBGXzEuOC4wIHtcXG50b29scy9saWIvYnBmL2xpYmJwZi5tYXAtNDYwLVxcdGdsb2JhbDpcXG50b29scy9saWIvYnBmL2xpYmJwZi5tYXA6NDYxOlxcdFxcdGJwZl9wcm9ncmFtX19hZGRfZmxhZ3M7XFxudG9vbHMvbGliL2JwZi9saWJicGYubWFwLTQ2Mi1cXHRcXHRicGZfcHJvZ3JhbV9fYXR0YWNoX3RyYWNpbmdfbXVsdGk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hdHRhY2hfcHJvYmUuYz01Mzc9c3RhdGljIHZvaWQgdGVzdF9rcHJvYmVfc2xlZXBhYmxlKHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hdHRhY2hfcHJvYmUuYy01NDUtXFx0Lyogc2xlZXBhYmxlIGtwcm9iZSB0ZXN0IGNhc2UgbmVlZHMgZmxhZ3Mgc2V0IGJlZm9yZSBsb2FkaW5nICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXR0YWNoX3Byb2JlLmM6NTQ2OlxcdGlmICghQVNTRVJUX09LKGJwZl9wcm9ncmFtX19hZGRfZmxhZ3Moc2tlbC1cXHUwMDNlcHJvZ3MuaGFuZGxlX2twcm9iZV9zbGVlcGFibGUsIEJQRl9GX1NMRUVQQUJMRSksXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXR0YWNoX3Byb2JlLmMtNTQ3LVxcdFxcdCAgICAgICBcXFwia3Byb2JlX3NsZWVwYWJsZV9mbGFnc1xcXCIpKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3ZlcmlmX3NjYWxlLmM9MjA9c3RhdGljIGludCBjaGVja19sb2FkKGNvbnN0IGNoYXIgKmZpbGUsIGVudW0gYnBmX3Byb2dfdHlwZSB0eXBlKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3ZlcmlmX3NjYWxlLmMtMzctXFx0YnBmX3Byb2dyYW1fX3NldF90eXBlKHByb2csIHR5cGUpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl92ZXJpZl9zY2FsZS5jOjM4OlxcdGJwZl9wcm9ncmFtX19hZGRfZmxhZ3MocHJvZywgdGVzdGluZ19wcm9nX2ZsYWdzKCkpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl92ZXJpZl9zY2FsZS5jLTM5LVxcdGJwZl9wcm9ncmFtX19zZXRfbG9nX2xldmVsKHByb2csIDQgfCBleHRyYV9wcm9nX2xvYWRfbG9nX2ZsYWdzKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tlcm5lbF9mbGFnLmM9OD12b2lkIHRlc3Rfa2VybmVsX2ZsYWcodm9pZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tlcm5lbF9mbGFnLmMtMjUtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva2VybmVsX2ZsYWcuYzoyNjpcXHRyZXQgPSBicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHByb2csIEJQRl9GX0FOWV9BTElHTk1FTlQpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tlcm5lbF9mbGFnLmM6Mjc6XFx0QVNTRVJUX09LKHJldCwgXFxcImJwZl9wcm9ncmFtX19hZGRfZmxhZ3MgcmV0XFxcIik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva2VybmVsX2ZsYWcuYy0yOC1cXHRBU1NFUlRfRVEoYnBmX3Byb2dyYW1fX2ZsYWdzKHByb2cpLCBmbGFncyB8IEJQRl9GX0FOWV9BTElHTk1FTlQsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva2VybmVsX2ZsYWcuYzoyOTpcXHRcXHQgIFxcXCJicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzIHZhbHVlXFxcIik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva2VybmVsX2ZsYWcuYy0zMC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2twcm9iZV9tdWx0aV90ZXN0LmM9MjIxPXN0YXRpYyB2b2lkIHRlc3RfYXR0YWNoX2FwaV9mYWlscyh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3Byb2JlX211bHRpX3Rlc3QuYy0zNjMtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3Byb2JlX211bHRpX3Rlc3QuYzozNjQ6XFx0ZXJyID0gYnBmX3Byb2dyYW1fX2FkZF9mbGFncyhzbF9za2VsLVxcdTAwM2Vwcm9ncy5oYW5kbGVfa3Byb2JlX211bHRpX3NsZWVwYWJsZSwgQlBGX0ZfU0xFRVBBQkxFKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rcHJvYmVfbXVsdGlfdGVzdC5jLTM2NS1cXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJzbGVlcF9za2VsX3NldF9mbGFnc1xcXCIpKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX21ldGFkYXRhLmM9MzQ5PXZvaWQgdGVzdF94ZHBfbWV0YWRhdGEodm9pZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9tZXRhZGF0YS5jLTQxMC1cXHRicGZfcHJvZ3JhbV9fc2V0X2lmaW5kZXgocHJvZywgcnhfaWZpbmRleCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX21ldGFkYXRhLmM6NDExOlxcdGJwZl9wcm9ncmFtX19hZGRfZmxhZ3MocHJvZywgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfbWV0YWRhdGEuYy00MTItXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfbWV0YWRhdGEuYy00MTctXFx0YnBmX3Byb2dyYW1fX3NldF9pZmluZGV4KG5ld19wcm9nLCByeF9pZmluZGV4KTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfbWV0YWRhdGEuYzo0MTg6XFx0YnBmX3Byb2dyYW1fX2FkZF9mbGFncyhuZXdfcHJvZywgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfbWV0YWRhdGEuYy00MTktXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuYz03NDY9c3RhdGljIHZvaWQgcHJlcGFyZV9jYXNlKHN0cnVjdCB0ZXN0X2xvYWRlciAqdGVzdGVyLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmMtNzY4LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jOjc2OTpcXHRicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHByb2csIHNwZWMtXFx1MDAzZXByb2dfZmxhZ3MpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jLTc3MC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuYz0yODc9aW50IGJwZl9wcm9nX3Rlc3RfbG9hZChjb25zdCBjaGFyICpmaWxlLCBlbnVtIGJwZl9wcm9nX3R5cGUgdHlwZSxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuYy0zMDktXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5jOjMxMDpcXHRicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHByb2csIHRlc3RpbmdfcHJvZ19mbGFncygpKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmMtMzExLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3ZlcmlzdGF0LmM9MTY3Nj1zdGF0aWMgaW50IHByb2Nlc3NfcHJvZyhjb25zdCBjaGFyICpmaWxlbmFtZSwgc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3ZlcmlzdGF0LmMtMTcyNC1cXHRpZiAoZW52LmZvcmNlX2NoZWNrcG9pbnRzKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpc3RhdC5jOjE3MjU6XFx0XFx0YnBmX3Byb2dyYW1fX2FkZF9mbGFncyhwcm9nLCBCUEZfRl9URVNUX1NUQVRFX0ZSRVEpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpc3RhdC5jLTE3MjYtXFx0aWYgKGVudi5mb3JjZV9yZWdfaW52YXJpYW50cylcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaXN0YXQuYzoxNzI3OlxcdFxcdGJwZl9wcm9ncmFtX19hZGRfZmxhZ3MocHJvZywgQlBGX0ZfVEVTVF9SRUdfSU5WQVJJQU5UUyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3ZlcmlzdGF0LmMtMTcyOC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94ZHBfaHdfbWV0YWRhdGEuYz03MzU9aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94ZHBfaHdfbWV0YWRhdGEuYy04NDctXFx0YnBmX3Byb2dyYW1fX3NldF9pZmluZGV4KHByb2csIGlmaW5kZXgpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94ZHBfaHdfbWV0YWRhdGEuYzo4NDg6XFx0YnBmX3Byb2dyYW1fX2FkZF9mbGFncyhwcm9nLCBCUEZfRl9YRFBfREVWX0JPVU5EX09OTFkpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94ZHBfaHdfbWV0YWRhdGEuYy04NDktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEzOjE1OjAzLjAxNzYyMTIyOFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0MTE4NTEwMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBJbXBhY3QqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHRha2VuIGEgbG9vayBhdCB0aGlzIHBhdGNoLCBhbmQgaXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGUgc2NvcGUgaXMgZW50aXJlbHkgY29udGFpbmVkIHdpdGhpbiB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5LCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYHRvb2xzL2xpYi9icGYvYCwgYHRvb2xzL2JwZi9icGZ0b29sL2AsIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2AuIFRoaXMgbWVhbnMgd2UncmUgZGVhbGluZyB3aXRoIHVzZXItc3BhY2UgY29tcG9uZW50cyBoZXJlOiBsaWJyYXJpZXMsIHRvb2xzLCBhbmQgdGhlIGFzc29jaWF0ZWQgdGVzdHMuIENydWNpYWxseSwgbm9uZSBvZiB0aGlzIHRvdWNoZXMgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAoYHZtbGludXhgKSBvciBhbnkga2VybmVsIG1vZHVsZXMuXG5cbkNvbnNlcXVlbnRseSwgZnJvbSBteSBwZXJzcGVjdGl2ZSwgdGhpcyBkb2Vzbid0IHdhcnJhbnQgYW55IHNwZWNpYWwgZnV6emluZyBjb25zaWRlcmF0aW9ucyDigJMgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGBmYWxzZWAuIFRoZXJlIGFyZSBubyBzcGVjaWZpYyBzeW1ib2xzIEkgbmVlZCB0byBmb2N1cyBvbiwgc28gdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QgaXMgYXBwcm9wcmlhdGVseSBlbXB0eS4gTGlrZXdpc2UsIHNpbmNlIHRoaXMgaXMgc3RyaWN0bHkgdXNlci1zcGFjZSwgdGhlcmUgYXJlIG5vIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgSSBuZWVkIHRvIGVuYWJsZTsgdGhlIGBFbmFibGVDb25maWdzYCBsaXN0IGlzIGVtcHR5LlxuXG5NeSByZWFzb25pbmcgaXMgc2ltcGxlOiB0aGUgY2hhbmdlcyBhcmUgbGltaXRlZCB0byB1c2VyLXNwYWNlIHRvb2xpbmcgYW5kIHRlc3QgZmlsZXMuIFNwZWNpZmljYWxseSwgd2UncmUgc2VlaW5nIHRoZSBhZGRpdGlvbiBvZiBoZWxwZXIgZnVuY3Rpb25zLCBgYnBmX3Byb2dyYW1fX2FkZF9mbGFnc2AgYW5kIGBicGZfcHJvZ3JhbV9fY2xlYXJfZmxhZ3NgLCB3aXRoaW4gbGliYnBmIGFuZCB1cGRhdGVzIHRvIHRoZSBicGZ0b29sIGFuZCBzZWxmdGVzdHMgdG8gdXRpbGl6ZSB0aGVzZSBmdW5jdGlvbnMuIFRoaXMgaXMgY29udGFpbmVkIHdpdGhpbiB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5LCBzbyBpdCB3b24ndCBiZSBpbmZsdWVuY2luZyBhbnkgY29yZSBrZXJuZWwgYmVoYXZpb3IuXG5cbkknbSBjb25maWRlbnQgaW4gdGhlc2UgY29uY2x1c2lvbnMsIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1MzYsIk91dHB1dFRva2VucyI6OTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTM6MTU6MDcuNDI5NDc0MDQzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgY29kZSB1bmRlciB0b29scy8gKHNwZWNpZmljYWxseSBsaWJicGYsIGJwZnRvb2wsIGFuZCBzZWxmdGVzdHMpLCBpbnRyb2R1Y2luZyB1c2VyLXNwYWNlIGhlbHBlciBmdW5jdGlvbnMgYnBmX3Byb2dyYW1fX2FkZF9mbGFncygpIGFuZCBicGZfcHJvZ3JhbV9fY2xlYXJfZmxhZ3MoKS4gTm8ga2VybmVsLXNwYWNlIGNvZGUgKHZtbGludXggb3IgbW9kdWxlcykgaXMgdG91Y2hlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBjb2RlIHVuZGVyIHRvb2xzLyAoc3BlY2lmaWNhbGx5IGxpYmJwZiwgYnBmdG9vbCwgYW5kIHNlbGZ0ZXN0cyksIGludHJvZHVjaW5nIHVzZXItc3BhY2UgaGVscGVyIGZ1bmN0aW9ucyBicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKCkgYW5kIGJwZl9wcm9ncmFtX19jbGVhcl9mbGFncygpLiBObyBrZXJuZWwtc3BhY2UgY29kZSAodm1saW51eCBvciBtb2R1bGVzKSBpcyB0b3VjaGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTM6MTU6MDcuNDI5NDk2NjgzWiIsIlNlcSI6NywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfdc7s[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-04 12:30:32 +0000 UTC FinishedAt: 2026-09-04 13:15:09 +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+CgkJCTx0ZD4yMDI2LzA5LzA0IDEzOjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIGNvZGUgdW5kZXIgdG9vbHMvIChzcGVjaWZpY2FsbHkgbGliYnBmLCBicGZ0b29sLCBhbmQgc2VsZnRlc3RzKSwgaW50cm9kdWNpbmcgdXNlci1zcGFjZSBoZWxwZXIgZnVuY3Rpb25zIGJwZl9wcm9ncmFtX19hZGRfZmxhZ3MoKSBhbmQgYnBmX3Byb2dyYW1fX2NsZWFyX2ZsYWdzKCkuIE5vIGtlcm5lbC1zcGFjZSBjb2RlICh2bWxpbnV4IG9yIG1vZHVsZXMpIGlzIHRvdWNoZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEzOjE0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjYzNjA5Njk5ZjY5ZTcxZmM0OWE4NDEyNmY5MjZhN2IzZDhmZTJiZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMTM6MTQ6NDkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvYnBmL2JwZnRvb2wvcHJvZy5jIGIvdG9vbHMvYnBmL2JwZnRvb2wvcHJvZy5jXG5pbmRleCA4YzJmOTI1NWIzNmQ3Li42YWI5MTFlODIxNTUxIDEwMDY0NFxuLS0tIGEvdG9vbHMvYnBmL2JwZnRvb2wvcHJvZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9icGYvYnBmdG9vbC9wcm9nLmNcbkBAIC0xNzY5LDcgJiM0MzsxNzY5LDcgQEAgc3RhdGljIGludCBsb2FkX3dpdGhfb3B0aW9ucyhpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGJvb2wgZmlyc3RfcHJvZ19vbmx5KVxuIFx0XHR9XG4gXG4gXHRcdGlmIChwcm9nX3R5cGUgPT0gQlBGX1BST0dfVFlQRV9YRFAgXHUwMDI2XHUwMDI2IHhkcG1ldGFfaWZpbmRleCkge1xuLVx0XHRcdGJwZl9wcm9ncmFtX19zZXRfZmxhZ3MocG9zLCBicGZfcHJvZ3JhbV9fZmxhZ3MocG9zKSB8IEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWSk7XG4mIzQzO1x0XHRcdGJwZl9wcm9ncmFtX19hZGRfZmxhZ3MocG9zLCBCUEZfRl9YRFBfREVWX0JPVU5EX09OTFkpO1xuIFx0XHRcdGJwZl9wcm9ncmFtX19zZXRfaWZpbmRleChwb3MsIHhkcG1ldGFfaWZpbmRleCk7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0YnBmX3Byb2dyYW1fX3NldF9pZmluZGV4KHBvcywgb2ZmbG9hZF9pZmluZGV4KTtcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5jIGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xuaW5kZXggYzAzNmU4YTkxZWQ4OC4uMjIxYzRmZTFmYjMxOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbkBAIC05OTM4LDYgJiM0Mzs5OTM4LDE2IEBAIGludCBicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgX191MzIgZmxhZ3MpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO2ludCBicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgX191MzIgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYnBmX3Byb2dyYW1fX3NldF9mbGFncyhwcm9nLCBwcm9nLVx1MDAzZXByb2dfZmxhZ3MgfCBmbGFncyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBicGZfcHJvZ3JhbV9fY2xlYXJfZmxhZ3Moc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBfX3UzMiBmbGFncylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKHByb2csIHByb2ctXHUwMDNlcHJvZ19mbGFncyBcdTAwMjYgfmZsYWdzKTtcbiYjNDM7fVxuJiM0MztcbiBfX3UzMiBicGZfcHJvZ3JhbV9fbG9nX2xldmVsKGNvbnN0IHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZylcbiB7XG4gXHRyZXR1cm4gcHJvZy1cdTAwM2Vsb2dfbGV2ZWw7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9saWJicGYuaCBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcbmluZGV4IGI5NjVhZDU3MTU0MDMuLjM5MzJiZjljYjQ5MDMgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvYnBmL2xpYmJwZi5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2xpYmJwZi5oXG5AQCAtMTAxMSw2ICYjNDM7MTAxMSwxMiBAQCBicGZfcHJvZ3JhbV9fc2V0X2V4cGVjdGVkX2F0dGFjaF90eXBlKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyxcbiBMSUJCUEZfQVBJIF9fdTMyIGJwZl9wcm9ncmFtX19mbGFncyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cpO1xuIExJQkJQRl9BUEkgaW50IGJwZl9wcm9ncmFtX19zZXRfZmxhZ3Moc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBfX3UzMiBmbGFncyk7XG4gXG4mIzQzOy8qIENvbnZlbmllbmNlIGhlbHBlcnMgdG8gbm9uLWRlc3RydWN0aXZlbHkgYWRkIG9yIGNsZWFyIHRoZSBzcGVjaWZpZWQgZmxhZ3NcbiYjNDM7ICogaW5zdGVhZCBvZiBjbG9iYmVyaW5nIHRoZW0gYXMgYnBmX3Byb2dyYW1fX3NldF9mbGFncygpIGRvZXMuXG4mIzQzOyAqL1xuJiM0MztMSUJCUEZfQVBJIGludCBicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgX191MzIgZmxhZ3MpO1xuJiM0MztMSUJCUEZfQVBJIGludCBicGZfcHJvZ3JhbV9fY2xlYXJfZmxhZ3Moc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBfX3UzMiBmbGFncyk7XG4mIzQzO1xuIC8qIFBlci1wcm9ncmFtIGxvZyBsZXZlbCBhbmQgbG9nIGJ1ZmZlciBnZXR0ZXJzL3NldHRlcnMuXG4gICogU2VlIGJwZl9vYmplY3Rfb3Blbl9vcHRzIGNvbW1lbnRzIHJlZ2FyZGluZyBsb2dfbGV2ZWwgYW5kIGxvZ19idWZcbiAgKiBpbnRlcmFjdGlvbnMuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9saWJicGYubWFwIGIvdG9vbHMvbGliL2JwZi9saWJicGYubWFwXG5pbmRleCAwOGFiMmVhODgxZmI2Li5hODExYTFiM2EwODU3IDEwMDY0NFxuLS0tIGEvdG9vbHMvbGliL2JwZi9saWJicGYubWFwXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2xpYmJwZi5tYXBcbkBAIC00NTgsNyAmIzQzOzQ1OCw5IEBAIExJQkJQRl8xLjcuMCB7XG4gXG4gTElCQlBGXzEuOC4wIHtcbiBcdGdsb2JhbDpcbiYjNDM7XHRcdGJwZl9wcm9ncmFtX19hZGRfZmxhZ3M7XG4gXHRcdGJwZl9wcm9ncmFtX19hdHRhY2hfdHJhY2luZ19tdWx0aTtcbiYjNDM7XHRcdGJwZl9wcm9ncmFtX19jbGVhcl9mbGFncztcbiBcdFx0YnBmX3Byb2dyYW1fX2Nsb25lO1xuIFx0XHRidGZfX2ZpbmRfYnlfbmFtZV9raW5kX293bjtcbiBcdFx0YnRmX19uZXdfZW1wdHlfb3B0cztcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hdHRhY2hfcHJvYmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2F0dGFjaF9wcm9iZS5jXG5pbmRleCA3ZGFkYjkwZTdiNjg5Li40MTEzNmUxYzc3NTJlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXR0YWNoX3Byb2JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2F0dGFjaF9wcm9iZS5jXG5AQCAtNTQzLDkgJiM0Mzs1NDMsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2twcm9iZV9zbGVlcGFibGUodm9pZClcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Lyogc2xlZXBhYmxlIGtwcm9iZSB0ZXN0IGNhc2UgbmVlZHMgZmxhZ3Mgc2V0IGJlZm9yZSBsb2FkaW5nICovXG4tXHRpZiAoIUFTU0VSVF9PSyhicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKFxuLVx0XHRcdCAgICAgICBza2VsLVx1MDAzZXByb2dzLmhhbmRsZV9rcHJvYmVfc2xlZXBhYmxlLFxuLVx0XHRcdCAgICAgICBicGZfcHJvZ3JhbV9fZmxhZ3Moc2tlbC1cdTAwM2Vwcm9ncy5oYW5kbGVfa3Byb2JlX3NsZWVwYWJsZSkgfCBCUEZfRl9TTEVFUEFCTEUpLFxuJiM0MztcdGlmICghQVNTRVJUX09LKGJwZl9wcm9ncmFtX19hZGRfZmxhZ3Moc2tlbC1cdTAwM2Vwcm9ncy5oYW5kbGVfa3Byb2JlX3NsZWVwYWJsZSwgQlBGX0ZfU0xFRVBBQkxFKSxcbiBcdFx0ICAgICAgIFwmIzM0O2twcm9iZV9zbGVlcGFibGVfZmxhZ3NcJiMzNDspKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3ZlcmlmX3NjYWxlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfdmVyaWZfc2NhbGUuY1xuaW5kZXggNjUyMzA3YTFiMjJlNy4uOTAyYTcwZDVhZmViNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl92ZXJpZl9zY2FsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfdmVyaWZfc2NhbGUuY1xuQEAgLTM1LDcgJiM0MzszNSw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfbG9hZChjb25zdCBjaGFyICpmaWxlLCBlbnVtIGJwZl9wcm9nX3R5cGUgdHlwZSlcbiBcdH1cbiBcbiBcdGJwZl9wcm9ncmFtX19zZXRfdHlwZShwcm9nLCB0eXBlKTtcbi1cdGJwZl9wcm9ncmFtX19zZXRfZmxhZ3MocHJvZywgYnBmX3Byb2dyYW1fX2ZsYWdzKHByb2cpIHwgdGVzdGluZ19wcm9nX2ZsYWdzKCkpO1xuJiM0MztcdGJwZl9wcm9ncmFtX19hZGRfZmxhZ3MocHJvZywgdGVzdGluZ19wcm9nX2ZsYWdzKCkpO1xuIFx0YnBmX3Byb2dyYW1fX3NldF9sb2dfbGV2ZWwocHJvZywgNCB8IGV4dHJhX3Byb2dfbG9hZF9sb2dfZmxhZ3MpO1xuIFxuIFx0ZXJyID0gYnBmX29iamVjdF9fbG9hZChvYmopO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tlcm5lbF9mbGFnLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rZXJuZWxfZmxhZy5jXG5pbmRleCAyNWViNTlmNDYwYWJlLi43MmMwZWY4ZGE0MDllIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva2VybmVsX2ZsYWcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva2VybmVsX2ZsYWcuY1xuQEAgLTEwLDE1ICYjNDM7MTAsMzEgQEAgdm9pZCB0ZXN0X2tlcm5lbF9mbGFnKHZvaWQpXG4gXHRzdHJ1Y3QgdGVzdF9rZXJuZWxfZmxhZyAqbHNtX3NrZWw7XG4gXHRzdHJ1Y3Qga2Z1bmNfY2FsbF90ZXN0ICpza2VsID0gTlVMTDtcbiBcdHN0cnVjdCBrZnVuY19jYWxsX3Rlc3RfbHNrZWwgKmxza2VsID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2c7XG4mIzQzO1x0X191MzIgZmxhZ3M7XG4gXHRpbnQgcmV0O1xuIFxuLVx0bHNtX3NrZWwgPSB0ZXN0X2tlcm5lbF9mbGFnX19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0bHNtX3NrZWwgPSB0ZXN0X2tlcm5lbF9mbGFnX19vcGVuKCk7XG4gXHRpZiAoIUFTU0VSVF9PS19QVFIobHNtX3NrZWwsIFwmIzM0O2xzbV9za2VsXCYjMzQ7KSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0QVNTRVJUX0VRKGJwZl9wcm9ncmFtX19mbGFncyhsc21fc2tlbC1cdTAwM2Vwcm9ncy5icGYpIFx1MDAyNiBCUEZfRl9TTEVFUEFCTEUsXG4mIzQzO1x0cHJvZyA9IGxzbV9za2VsLVx1MDAzZXByb2dzLmJwZjtcbiYjNDM7XHRmbGFncyA9IGJwZl9wcm9ncmFtX19mbGFncyhwcm9nKTtcbiYjNDM7XHRBU1NFUlRfRVEoZmxhZ3MgXHUwMDI2IEJQRl9GX1NMRUVQQUJMRSxcbiBcdFx0ICBCUEZfRl9TTEVFUEFCTEUsIFwmIzM0O3NsZWVwYWJsZSBpbiBwcm9ncmFtIGZsYWdzXCYjMzQ7KTtcbiBcbiYjNDM7XHRyZXQgPSBicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHByb2csIEJQRl9GX0FOWV9BTElHTk1FTlQpO1xuJiM0MztcdEFTU0VSVF9PSyhyZXQsIFwmIzM0O2JwZl9wcm9ncmFtX19hZGRfZmxhZ3MgcmV0XCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoYnBmX3Byb2dyYW1fX2ZsYWdzKHByb2cpLCBmbGFncyB8IEJQRl9GX0FOWV9BTElHTk1FTlQsXG4mIzQzO1x0XHQgIFwmIzM0O2JwZl9wcm9ncmFtX19hZGRfZmxhZ3MgdmFsdWVcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBicGZfcHJvZ3JhbV9fY2xlYXJfZmxhZ3MocHJvZywgQlBGX0ZfQU5ZX0FMSUdOTUVOVCk7XG4mIzQzO1x0QVNTRVJUX09LKHJldCwgXCYjMzQ7YnBmX3Byb2dyYW1fX2NsZWFyX2ZsYWdzIHJldFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKGJwZl9wcm9ncmFtX19mbGFncyhwcm9nKSwgZmxhZ3MsIFwmIzM0O2JwZl9wcm9ncmFtX19jbGVhcl9mbGFncyB2YWx1ZVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHJldCA9IHRlc3Rfa2VybmVsX2ZsYWdfX2xvYWQobHNtX3NrZWwpO1xuJiM0MztcdEFTU0VSVF9PSyhyZXQsIFwmIzM0O3Rlc3Rfa2VybmVsX2ZsYWdfX2xvYWRcJiMzNDspO1xuJiM0MztcbiBcdGxzbV9za2VsLVx1MDAzZWJzcy1cdTAwM2Vtb25pdG9yZWRfdGlkID0gc3lzX2dldHRpZCgpO1xuIFxuIFx0cmV0ID0gdGVzdF9rZXJuZWxfZmxhZ19fYXR0YWNoKGxzbV9za2VsKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rcHJvYmVfbXVsdGlfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3Byb2JlX211bHRpX3Rlc3QuY1xuaW5kZXggZWQzZmQwYTg4ZGFiNi4uNjUxMTIzY2Q4NjAyZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2twcm9iZV9tdWx0aV90ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2twcm9iZV9tdWx0aV90ZXN0LmNcbkBAIC0zNjEsOCAmIzQzOzM2MSw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfYXR0YWNoX2FwaV9mYWlscyh2b2lkKVxuIFxuIFx0c2xfc2tlbC1cdTAwM2Vic3MtXHUwMDNldXNlcl9wdHIgPSBzbF9za2VsO1xuIFxuLVx0ZXJyID0gYnBmX3Byb2dyYW1fX3NldF9mbGFncyhzbF9za2VsLVx1MDAzZXByb2dzLmhhbmRsZV9rcHJvYmVfbXVsdGlfc2xlZXBhYmxlLFxuLVx0XHRcdFx0ICAgICBicGZfcHJvZ3JhbV9fZmxhZ3Moc2xfc2tlbC1cdTAwM2Vwcm9ncy5oYW5kbGVfa3Byb2JlX211bHRpX3NsZWVwYWJsZSkgfCBCUEZfRl9TTEVFUEFCTEUpO1xuJiM0MztcdGVyciA9IGJwZl9wcm9ncmFtX19hZGRfZmxhZ3Moc2xfc2tlbC1cdTAwM2Vwcm9ncy5oYW5kbGVfa3Byb2JlX211bHRpX3NsZWVwYWJsZSwgQlBGX0ZfU0xFRVBBQkxFKTtcbiBcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7c2xlZXBfc2tlbF9zZXRfZmxhZ3NcJiMzNDspKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX21ldGFkYXRhLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfbWV0YWRhdGEuY1xuaW5kZXggMDQ3ZGZkYzMyMmEyZi4uM2FiOTYzNDU4OTAzZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9tZXRhZGF0YS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfbWV0YWRhdGEuY1xuQEAgLTQwOCwxNCAmIzQzOzQwOCwxNCBAQCB2b2lkIHRlc3RfeGRwX21ldGFkYXRhKHZvaWQpXG4gXG4gXHRwcm9nID0gYnBmX29iamVjdF9fZmluZF9wcm9ncmFtX2J5X25hbWUoYnBmX29iai1cdTAwM2VvYmosIFwmIzM0O3J4XCYjMzQ7KTtcbiBcdGJwZl9wcm9ncmFtX19zZXRfaWZpbmRleChwcm9nLCByeF9pZmluZGV4KTtcbi1cdGJwZl9wcm9ncmFtX19zZXRfZmxhZ3MocHJvZywgYnBmX3Byb2dyYW1fX2ZsYWdzKHByb2cpIHwgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTtcbiYjNDM7XHRicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHByb2csIEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWSk7XG4gXG4gXHQvKiBNYWtlIHN1cmUgd2UgY2FuIGxvYWQgYSBkZXYtYm91bmQgcHJvZ3JhbSB0aGF0IHBlcmZvcm1zXG4gXHQgKiBYRFBfUkVESVJFQ1QgaW50byBhIGRldm1hcC5cbiBcdCAqL1xuIFx0bmV3X3Byb2cgPSBicGZfb2JqZWN0X19maW5kX3Byb2dyYW1fYnlfbmFtZShicGZfb2JqLVx1MDAzZW9iaiwgXCYjMzQ7cmVkaXJlY3RcJiMzNDspO1xuIFx0YnBmX3Byb2dyYW1fX3NldF9pZmluZGV4KG5ld19wcm9nLCByeF9pZmluZGV4KTtcbi1cdGJwZl9wcm9ncmFtX19zZXRfZmxhZ3MobmV3X3Byb2csIGJwZl9wcm9ncmFtX19mbGFncyhuZXdfcHJvZykgfCBCUEZfRl9YRFBfREVWX0JPVU5EX09OTFkpO1xuJiM0MztcdGJwZl9wcm9ncmFtX19hZGRfZmxhZ3MobmV3X3Byb2csIEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWSk7XG4gXG4gXHRpZiAoIUFTU0VSVF9PSyh4ZHBfbWV0YWRhdGFfX2xvYWQoYnBmX29iaiksIFwmIzM0O2xvYWQgc2tlbGV0b25cJiMzNDspKVxuIFx0XHRnb3RvIG91dDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jXG5pbmRleCA3OTRhN2RmYjA1Nzk2Li4yODcyNGRlMDYzMjIwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jXG5AQCAtNzQ4LDcgJiM0Mzs3NDgsNyBAQCBzdGF0aWMgdm9pZCBwcmVwYXJlX2Nhc2Uoc3RydWN0IHRlc3RfbG9hZGVyICp0ZXN0ZXIsXG4gXHRcdFx0IHN0cnVjdCBicGZfb2JqZWN0ICpvYmosXG4gXHRcdFx0IHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZylcbiB7XG4tXHRpbnQgbWluX2xvZ19sZXZlbCA9IDAsIHByb2dfZmxhZ3M7XG4mIzQzO1x0aW50IG1pbl9sb2dfbGV2ZWwgPSAwO1xuIFxuIFx0aWYgKGVudi52ZXJib3NpdHkgXHUwMDNlIFZFUkJPU0VfTk9ORSlcbiBcdFx0bWluX2xvZ19sZXZlbCA9IDE7XG5AQCAtNzY2LDggJiM0Mzs3NjYsNyBAQCBzdGF0aWMgdm9pZCBwcmVwYXJlX2Nhc2Uoc3RydWN0IHRlc3RfbG9hZGVyICp0ZXN0ZXIsXG4gXHRlbHNlXG4gXHRcdGJwZl9wcm9ncmFtX19zZXRfbG9nX2xldmVsKHByb2csIHNwZWMtXHUwMDNlbG9nX2xldmVsKTtcbiBcbi1cdHByb2dfZmxhZ3MgPSBicGZfcHJvZ3JhbV9fZmxhZ3MocHJvZyk7XG4tXHRicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKHByb2csIHByb2dfZmxhZ3MgfCBzcGVjLVx1MDAzZXByb2dfZmxhZ3MpO1xuJiM0MztcdGJwZl9wcm9ncmFtX19hZGRfZmxhZ3MocHJvZywgc3BlYy1cdTAwM2Vwcm9nX2ZsYWdzKTtcbiBcbiBcdHRlc3Rlci1cdTAwM2Vsb2dfYnVmWzBdID0gJiMzOTtcXDAmIzM5OztcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5jXG5pbmRleCAzZjAzNzk0OWU5Nzg5Li5kMWQ2MDQ1MWM1YmNjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmNcbkBAIC0yOTIsNyAmIzQzOzI5Miw2IEBAIGludCBicGZfcHJvZ190ZXN0X2xvYWQoY29uc3QgY2hhciAqZmlsZSwgZW51bSBicGZfcHJvZ190eXBlIHR5cGUsXG4gXHQpO1xuIFx0c3RydWN0IGJwZl9vYmplY3QgKm9iajtcbiBcdHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZztcbi1cdF9fdTMyIGZsYWdzO1xuIFx0aW50IGVycjtcbiBcbiBcdG9iaiA9IGJwZl9vYmplY3RfX29wZW5fZmlsZShmaWxlLCBcdTAwMjZvcHRzKTtcbkBAIC0zMDgsOCAmIzQzOzMwNyw3IEBAIGludCBicGZfcHJvZ190ZXN0X2xvYWQoY29uc3QgY2hhciAqZmlsZSwgZW51bSBicGZfcHJvZ190eXBlIHR5cGUsXG4gXHRpZiAodHlwZSAhPSBCUEZfUFJPR19UWVBFX1VOU1BFQyBcdTAwMjZcdTAwMjYgYnBmX3Byb2dyYW1fX3R5cGUocHJvZykgIT0gdHlwZSlcbiBcdFx0YnBmX3Byb2dyYW1fX3NldF90eXBlKHByb2csIHR5cGUpO1xuIFxuLVx0ZmxhZ3MgPSBicGZfcHJvZ3JhbV9fZmxhZ3MocHJvZykgfCB0ZXN0aW5nX3Byb2dfZmxhZ3MoKTtcbi1cdGJwZl9wcm9ncmFtX19zZXRfZmxhZ3MocHJvZywgZmxhZ3MpO1xuJiM0MztcdGJwZl9wcm9ncmFtX19hZGRfZmxhZ3MocHJvZywgdGVzdGluZ19wcm9nX2ZsYWdzKCkpO1xuIFxuIFx0ZXJyID0gYnBmX29iamVjdF9fbG9hZChvYmopO1xuIFx0aWYgKGVycilcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaXN0YXQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpc3RhdC5jXG5pbmRleCBlNzA3NDFjNmI5YjdjLi45Y2ZjOWI0YjQxYzEyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3ZlcmlzdGF0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpc3RhdC5jXG5AQCAtMTcyMiw5ICYjNDM7MTcyMiw5IEBAIHN0YXRpYyBpbnQgcHJvY2Vzc19wcm9nKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzdHJ1Y3QgYnBmXG4gXHRmaXh1cF9vYmoob2JqLCBwcm9nLCBiYXNlX2ZpbGVuYW1lKTtcbiBcbiBcdGlmIChlbnYuZm9yY2VfY2hlY2twb2ludHMpXG4tXHRcdGJwZl9wcm9ncmFtX19zZXRfZmxhZ3MocHJvZywgYnBmX3Byb2dyYW1fX2ZsYWdzKHByb2cpIHwgQlBGX0ZfVEVTVF9TVEFURV9GUkVRKTtcbiYjNDM7XHRcdGJwZl9wcm9ncmFtX19hZGRfZmxhZ3MocHJvZywgQlBGX0ZfVEVTVF9TVEFURV9GUkVRKTtcbiBcdGlmIChlbnYuZm9yY2VfcmVnX2ludmFyaWFudHMpXG4tXHRcdGJwZl9wcm9ncmFtX19zZXRfZmxhZ3MocHJvZywgYnBmX3Byb2dyYW1fX2ZsYWdzKHByb2cpIHwgQlBGX0ZfVEVTVF9SRUdfSU5WQVJJQU5UUyk7XG4mIzQzO1x0XHRicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHByb2csIEJQRl9GX1RFU1RfUkVHX0lOVkFSSUFOVFMpO1xuIFxuIFx0b3B0cy5sb2dfYnVmID0gYnVmO1xuIFx0b3B0cy5sb2dfc2l6ZSA9IGJ1Zl9zejtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveGRwX2h3X21ldGFkYXRhLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveGRwX2h3X21ldGFkYXRhLmNcbmluZGV4IGM1NTAxYjNmZGY0OGYuLmFiM2Y1ZmM1NmU4NjcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveGRwX2h3X21ldGFkYXRhLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94ZHBfaHdfbWV0YWRhdGEuY1xuQEAgLTg0NSw3ICYjNDM7ODQ1LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcbiBcdHByb2cgPSBicGZfb2JqZWN0X19maW5kX3Byb2dyYW1fYnlfbmFtZShicGZfb2JqLVx1MDAzZW9iaiwgXCYjMzQ7cnhcJiMzNDspO1xuIFx0YnBmX3Byb2dyYW1fX3NldF9pZmluZGV4KHByb2csIGlmaW5kZXgpO1xuLVx0YnBmX3Byb2dyYW1fX3NldF9mbGFncyhwcm9nLCBicGZfcHJvZ3JhbV9fZmxhZ3MocHJvZykgfCBCUEZfRl9YRFBfREVWX0JPVU5EX09OTFkpO1xuJiM0MztcdGJwZl9wcm9ncmFtX19hZGRfZmxhZ3MocHJvZywgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTtcbiBcbiBcdHByaW50ZihcJiMzNDtsb2FkIGJwZiBwcm9ncmFtLi4uXFxuXCYjMzQ7KTtcbiBcdHJldCA9IHhkcF9od19tZXRhZGF0YV9fbG9hZChicGZfb2JqKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMzoxNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgY29kZSB1bmRlciB0b29scy8gKHNwZWNpZmljYWxseSBsaWJicGYsIGJwZnRvb2wsIGFuZCBzZWxmdGVzdHMpLCBpbnRyb2R1Y2luZyB1c2VyLXNwYWNlIGhlbHBlciBmdW5jdGlvbnMgYnBmX3Byb2dyYW1fX2FkZF9mbGFncygpIGFuZCBicGZfcHJvZ3JhbV9fY2xlYXJfZmxhZ3MoKS4gTm8ga2VybmVsLXNwYWNlIGNvZGUgKHZtbGludXggb3IgbW9kdWxlcykgaXMgdG91Y2hlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmNjM2MDk2OTlmNjllNzFmYzQ5YTg0MTI2ZjkyNmE3YjNkOGZlMmJlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAxMzoxNDo0OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZi9icGZ0b29sL3Byb2cuYyBiL3Rvb2xzL2JwZi9icGZ0b29sL3Byb2cuYwppbmRleCA4YzJmOTI1NWIzNmQ3Li42YWI5MTFlODIxNTUxIDEwMDY0NAotLS0gYS90b29scy9icGYvYnBmdG9vbC9wcm9nLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvYnBmL2JwZnRvb2wvcHJvZy5jCkBAIC0xNzY5LDcgJiM0MzsxNzY5LDcgQEAgc3RhdGljIGludCBsb2FkX3dpdGhfb3B0aW9ucyhpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGJvb2wgZmlyc3RfcHJvZ19vbmx5KQogCQl9CiAKIAkJaWYgKHByb2dfdHlwZSA9PSBCUEZfUFJPR19UWVBFX1hEUCAmYW1wOyZhbXA7IHhkcG1ldGFfaWZpbmRleCkgewotCQkJYnBmX3Byb2dyYW1fX3NldF9mbGFncyhwb3MsIGJwZl9wcm9ncmFtX19mbGFncyhwb3MpIHwgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTsKJiM0MzsJCQlicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHBvcywgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTsKIAkJCWJwZl9wcm9ncmFtX19zZXRfaWZpbmRleChwb3MsIHhkcG1ldGFfaWZpbmRleCk7CiAJCX0gZWxzZSB7CiAJCQlicGZfcHJvZ3JhbV9fc2V0X2lmaW5kZXgocG9zLCBvZmZsb2FkX2lmaW5kZXgpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9saWJicGYuYyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMKaW5kZXggYzAzNmU4YTkxZWQ4OC4uMjIxYzRmZTFmYjMxOSAxMDA2NDQKLS0tIGEvdG9vbHMvbGliL2JwZi9saWJicGYuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2xpYmJwZi5jCkBAIC05OTM4LDYgJiM0Mzs5OTM4LDE2IEBAIGludCBicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgX191MzIgZmxhZ3MpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztpbnQgYnBmX3Byb2dyYW1fX2FkZF9mbGFncyhzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIF9fdTMyIGZsYWdzKQomIzQzO3sKJiM0MzsJcmV0dXJuIGJwZl9wcm9ncmFtX19zZXRfZmxhZ3MocHJvZywgcHJvZy0mZ3Q7cHJvZ19mbGFncyB8IGZsYWdzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IGJwZl9wcm9ncmFtX19jbGVhcl9mbGFncyhzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIF9fdTMyIGZsYWdzKQomIzQzO3sKJiM0MzsJcmV0dXJuIGJwZl9wcm9ncmFtX19zZXRfZmxhZ3MocHJvZywgcHJvZy0mZ3Q7cHJvZ19mbGFncyAmYW1wOyB+ZmxhZ3MpOwomIzQzO30KJiM0MzsKIF9fdTMyIGJwZl9wcm9ncmFtX19sb2dfbGV2ZWwoY29uc3Qgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nKQogewogCXJldHVybiBwcm9nLSZndDtsb2dfbGV2ZWw7CmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5oIGIvdG9vbHMvbGliL2JwZi9saWJicGYuaAppbmRleCBiOTY1YWQ1NzE1NDAzLi4zOTMyYmY5Y2I0OTAzIDEwMDY0NAotLS0gYS90b29scy9saWIvYnBmL2xpYmJwZi5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmgKQEAgLTEwMTEsNiAmIzQzOzEwMTEsMTIgQEAgYnBmX3Byb2dyYW1fX3NldF9leHBlY3RlZF9hdHRhY2hfdHlwZShzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csCiBMSUJCUEZfQVBJIF9fdTMyIGJwZl9wcm9ncmFtX19mbGFncyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cpOwogTElCQlBGX0FQSSBpbnQgYnBmX3Byb2dyYW1fX3NldF9mbGFncyhzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIF9fdTMyIGZsYWdzKTsKIAomIzQzOy8qIENvbnZlbmllbmNlIGhlbHBlcnMgdG8gbm9uLWRlc3RydWN0aXZlbHkgYWRkIG9yIGNsZWFyIHRoZSBzcGVjaWZpZWQgZmxhZ3MKJiM0MzsgKiBpbnN0ZWFkIG9mIGNsb2JiZXJpbmcgdGhlbSBhcyBicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKCkgZG9lcy4KJiM0MzsgKi8KJiM0MztMSUJCUEZfQVBJIGludCBicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgX191MzIgZmxhZ3MpOwomIzQzO0xJQkJQRl9BUEkgaW50IGJwZl9wcm9ncmFtX19jbGVhcl9mbGFncyhzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIF9fdTMyIGZsYWdzKTsKJiM0MzsKIC8qIFBlci1wcm9ncmFtIGxvZyBsZXZlbCBhbmQgbG9nIGJ1ZmZlciBnZXR0ZXJzL3NldHRlcnMuCiAgKiBTZWUgYnBmX29iamVjdF9vcGVuX29wdHMgY29tbWVudHMgcmVnYXJkaW5nIGxvZ19sZXZlbCBhbmQgbG9nX2J1ZgogICogaW50ZXJhY3Rpb25zLgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9saWJicGYubWFwIGIvdG9vbHMvbGliL2JwZi9saWJicGYubWFwCmluZGV4IDA4YWIyZWE4ODFmYjYuLmE4MTFhMWIzYTA4NTcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLm1hcAomIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2xpYmJwZi5tYXAKQEAgLTQ1OCw3ICYjNDM7NDU4LDkgQEAgTElCQlBGXzEuNy4wIHsKIAogTElCQlBGXzEuOC4wIHsKIAlnbG9iYWw6CiYjNDM7CQlicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzOwogCQlicGZfcHJvZ3JhbV9fYXR0YWNoX3RyYWNpbmdfbXVsdGk7CiYjNDM7CQlicGZfcHJvZ3JhbV9fY2xlYXJfZmxhZ3M7CiAJCWJwZl9wcm9ncmFtX19jbG9uZTsKIAkJYnRmX19maW5kX2J5X25hbWVfa2luZF9vd247CiAJCWJ0Zl9fbmV3X2VtcHR5X29wdHM7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hdHRhY2hfcHJvYmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2F0dGFjaF9wcm9iZS5jCmluZGV4IDdkYWRiOTBlN2I2ODkuLjQxMTM2ZTFjNzc1MmUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2F0dGFjaF9wcm9iZS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2F0dGFjaF9wcm9iZS5jCkBAIC01NDMsOSAmIzQzOzU0Myw3IEBAIHN0YXRpYyB2b2lkIHRlc3Rfa3Byb2JlX3NsZWVwYWJsZSh2b2lkKQogCQlyZXR1cm47CiAKIAkvKiBzbGVlcGFibGUga3Byb2JlIHRlc3QgY2FzZSBuZWVkcyBmbGFncyBzZXQgYmVmb3JlIGxvYWRpbmcgKi8KLQlpZiAoIUFTU0VSVF9PSyhicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKAotCQkJICAgICAgIHNrZWwtJmd0O3Byb2dzLmhhbmRsZV9rcHJvYmVfc2xlZXBhYmxlLAotCQkJICAgICAgIGJwZl9wcm9ncmFtX19mbGFncyhza2VsLSZndDtwcm9ncy5oYW5kbGVfa3Byb2JlX3NsZWVwYWJsZSkgfCBCUEZfRl9TTEVFUEFCTEUpLAomIzQzOwlpZiAoIUFTU0VSVF9PSyhicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHNrZWwtJmd0O3Byb2dzLmhhbmRsZV9rcHJvYmVfc2xlZXBhYmxlLCBCUEZfRl9TTEVFUEFCTEUpLAogCQkgICAgICAgJiMzNDtrcHJvYmVfc2xlZXBhYmxlX2ZsYWdzJiMzNDspKQogCQlnb3RvIGNsZWFudXA7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl92ZXJpZl9zY2FsZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3ZlcmlmX3NjYWxlLmMKaW5kZXggNjUyMzA3YTFiMjJlNy4uOTAyYTcwZDVhZmViNiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3ZlcmlmX3NjYWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3ZlcmlmX3NjYWxlLmMKQEAgLTM1LDcgJiM0MzszNSw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfbG9hZChjb25zdCBjaGFyICpmaWxlLCBlbnVtIGJwZl9wcm9nX3R5cGUgdHlwZSkKIAl9CiAKIAlicGZfcHJvZ3JhbV9fc2V0X3R5cGUocHJvZywgdHlwZSk7Ci0JYnBmX3Byb2dyYW1fX3NldF9mbGFncyhwcm9nLCBicGZfcHJvZ3JhbV9fZmxhZ3MocHJvZykgfCB0ZXN0aW5nX3Byb2dfZmxhZ3MoKSk7CiYjNDM7CWJwZl9wcm9ncmFtX19hZGRfZmxhZ3MocHJvZywgdGVzdGluZ19wcm9nX2ZsYWdzKCkpOwogCWJwZl9wcm9ncmFtX19zZXRfbG9nX2xldmVsKHByb2csIDQgfCBleHRyYV9wcm9nX2xvYWRfbG9nX2ZsYWdzKTsKIAogCWVyciA9IGJwZl9vYmplY3RfX2xvYWQob2JqKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tlcm5lbF9mbGFnLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rZXJuZWxfZmxhZy5jCmluZGV4IDI1ZWI1OWY0NjBhYmUuLjcyYzBlZjhkYTQwOWUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tlcm5lbF9mbGFnLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva2VybmVsX2ZsYWcuYwpAQCAtMTAsMTUgJiM0MzsxMCwzMSBAQCB2b2lkIHRlc3Rfa2VybmVsX2ZsYWcodm9pZCkKIAlzdHJ1Y3QgdGVzdF9rZXJuZWxfZmxhZyAqbHNtX3NrZWw7CiAJc3RydWN0IGtmdW5jX2NhbGxfdGVzdCAqc2tlbCA9IE5VTEw7CiAJc3RydWN0IGtmdW5jX2NhbGxfdGVzdF9sc2tlbCAqbHNrZWwgPSBOVUxMOwomIzQzOwlzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2c7CiYjNDM7CV9fdTMyIGZsYWdzOwogCWludCByZXQ7CiAKLQlsc21fc2tlbCA9IHRlc3Rfa2VybmVsX2ZsYWdfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJbHNtX3NrZWwgPSB0ZXN0X2tlcm5lbF9mbGFnX19vcGVuKCk7CiAJaWYgKCFBU1NFUlRfT0tfUFRSKGxzbV9za2VsLCAmIzM0O2xzbV9za2VsJiMzNDspKQogCQlyZXR1cm47CiAKLQlBU1NFUlRfRVEoYnBmX3Byb2dyYW1fX2ZsYWdzKGxzbV9za2VsLSZndDtwcm9ncy5icGYpICZhbXA7IEJQRl9GX1NMRUVQQUJMRSwKJiM0MzsJcHJvZyA9IGxzbV9za2VsLSZndDtwcm9ncy5icGY7CiYjNDM7CWZsYWdzID0gYnBmX3Byb2dyYW1fX2ZsYWdzKHByb2cpOwomIzQzOwlBU1NFUlRfRVEoZmxhZ3MgJmFtcDsgQlBGX0ZfU0xFRVBBQkxFLAogCQkgIEJQRl9GX1NMRUVQQUJMRSwgJiMzNDtzbGVlcGFibGUgaW4gcHJvZ3JhbSBmbGFncyYjMzQ7KTsKIAomIzQzOwlyZXQgPSBicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHByb2csIEJQRl9GX0FOWV9BTElHTk1FTlQpOwomIzQzOwlBU1NFUlRfT0socmV0LCAmIzM0O2JwZl9wcm9ncmFtX19hZGRfZmxhZ3MgcmV0JiMzNDspOwomIzQzOwlBU1NFUlRfRVEoYnBmX3Byb2dyYW1fX2ZsYWdzKHByb2cpLCBmbGFncyB8IEJQRl9GX0FOWV9BTElHTk1FTlQsCiYjNDM7CQkgICYjMzQ7YnBmX3Byb2dyYW1fX2FkZF9mbGFncyB2YWx1ZSYjMzQ7KTsKJiM0MzsKJiM0MzsJcmV0ID0gYnBmX3Byb2dyYW1fX2NsZWFyX2ZsYWdzKHByb2csIEJQRl9GX0FOWV9BTElHTk1FTlQpOwomIzQzOwlBU1NFUlRfT0socmV0LCAmIzM0O2JwZl9wcm9ncmFtX19jbGVhcl9mbGFncyByZXQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShicGZfcHJvZ3JhbV9fZmxhZ3MocHJvZyksIGZsYWdzLCAmIzM0O2JwZl9wcm9ncmFtX19jbGVhcl9mbGFncyB2YWx1ZSYjMzQ7KTsKJiM0MzsKJiM0MzsJcmV0ID0gdGVzdF9rZXJuZWxfZmxhZ19fbG9hZChsc21fc2tlbCk7CiYjNDM7CUFTU0VSVF9PSyhyZXQsICYjMzQ7dGVzdF9rZXJuZWxfZmxhZ19fbG9hZCYjMzQ7KTsKJiM0MzsKIAlsc21fc2tlbC0mZ3Q7YnNzLSZndDttb25pdG9yZWRfdGlkID0gc3lzX2dldHRpZCgpOwogCiAJcmV0ID0gdGVzdF9rZXJuZWxfZmxhZ19fYXR0YWNoKGxzbV9za2VsKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2twcm9iZV9tdWx0aV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rcHJvYmVfbXVsdGlfdGVzdC5jCmluZGV4IGVkM2ZkMGE4OGRhYjYuLjY1MTEyM2NkODYwMmQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2twcm9iZV9tdWx0aV90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3Byb2JlX211bHRpX3Rlc3QuYwpAQCAtMzYxLDggJiM0MzszNjEsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2F0dGFjaF9hcGlfZmFpbHModm9pZCkKIAogCXNsX3NrZWwtJmd0O2Jzcy0mZ3Q7dXNlcl9wdHIgPSBzbF9za2VsOwogCi0JZXJyID0gYnBmX3Byb2dyYW1fX3NldF9mbGFncyhzbF9za2VsLSZndDtwcm9ncy5oYW5kbGVfa3Byb2JlX211bHRpX3NsZWVwYWJsZSwKLQkJCQkgICAgIGJwZl9wcm9ncmFtX19mbGFncyhzbF9za2VsLSZndDtwcm9ncy5oYW5kbGVfa3Byb2JlX211bHRpX3NsZWVwYWJsZSkgfCBCUEZfRl9TTEVFUEFCTEUpOwomIzQzOwllcnIgPSBicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHNsX3NrZWwtJmd0O3Byb2dzLmhhbmRsZV9rcHJvYmVfbXVsdGlfc2xlZXBhYmxlLCBCUEZfRl9TTEVFUEFCTEUpOwogCWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtzbGVlcF9za2VsX3NldF9mbGFncyYjMzQ7KSkKIAkJZ290byBjbGVhbnVwOwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfbWV0YWRhdGEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9tZXRhZGF0YS5jCmluZGV4IDA0N2RmZGMzMjJhMmYuLjNhYjk2MzQ1ODkwM2QgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9tZXRhZGF0YS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9tZXRhZGF0YS5jCkBAIC00MDgsMTQgJiM0Mzs0MDgsMTQgQEAgdm9pZCB0ZXN0X3hkcF9tZXRhZGF0YSh2b2lkKQogCiAJcHJvZyA9IGJwZl9vYmplY3RfX2ZpbmRfcHJvZ3JhbV9ieV9uYW1lKGJwZl9vYmotJmd0O29iaiwgJiMzNDtyeCYjMzQ7KTsKIAlicGZfcHJvZ3JhbV9fc2V0X2lmaW5kZXgocHJvZywgcnhfaWZpbmRleCk7Ci0JYnBmX3Byb2dyYW1fX3NldF9mbGFncyhwcm9nLCBicGZfcHJvZ3JhbV9fZmxhZ3MocHJvZykgfCBCUEZfRl9YRFBfREVWX0JPVU5EX09OTFkpOwomIzQzOwlicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHByb2csIEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWSk7CiAKIAkvKiBNYWtlIHN1cmUgd2UgY2FuIGxvYWQgYSBkZXYtYm91bmQgcHJvZ3JhbSB0aGF0IHBlcmZvcm1zCiAJICogWERQX1JFRElSRUNUIGludG8gYSBkZXZtYXAuCiAJICovCiAJbmV3X3Byb2cgPSBicGZfb2JqZWN0X19maW5kX3Byb2dyYW1fYnlfbmFtZShicGZfb2JqLSZndDtvYmosICYjMzQ7cmVkaXJlY3QmIzM0Oyk7CiAJYnBmX3Byb2dyYW1fX3NldF9pZmluZGV4KG5ld19wcm9nLCByeF9pZmluZGV4KTsKLQlicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKG5ld19wcm9nLCBicGZfcHJvZ3JhbV9fZmxhZ3MobmV3X3Byb2cpIHwgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTsKJiM0MzsJYnBmX3Byb2dyYW1fX2FkZF9mbGFncyhuZXdfcHJvZywgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTsKIAogCWlmICghQVNTRVJUX09LKHhkcF9tZXRhZGF0YV9fbG9hZChicGZfb2JqKSwgJiMzNDtsb2FkIHNrZWxldG9uJiMzNDspKQogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmMKaW5kZXggNzk0YTdkZmIwNTc5Ni4uMjg3MjRkZTA2MzIyMCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmMKQEAgLTc0OCw3ICYjNDM7NzQ4LDcgQEAgc3RhdGljIHZvaWQgcHJlcGFyZV9jYXNlKHN0cnVjdCB0ZXN0X2xvYWRlciAqdGVzdGVyLAogCQkJIHN0cnVjdCBicGZfb2JqZWN0ICpvYmosCiAJCQkgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nKQogewotCWludCBtaW5fbG9nX2xldmVsID0gMCwgcHJvZ19mbGFnczsKJiM0MzsJaW50IG1pbl9sb2dfbGV2ZWwgPSAwOwogCiAJaWYgKGVudi52ZXJib3NpdHkgJmd0OyBWRVJCT1NFX05PTkUpCiAJCW1pbl9sb2dfbGV2ZWwgPSAxOwpAQCAtNzY2LDggJiM0Mzs3NjYsNyBAQCBzdGF0aWMgdm9pZCBwcmVwYXJlX2Nhc2Uoc3RydWN0IHRlc3RfbG9hZGVyICp0ZXN0ZXIsCiAJZWxzZQogCQlicGZfcHJvZ3JhbV9fc2V0X2xvZ19sZXZlbChwcm9nLCBzcGVjLSZndDtsb2dfbGV2ZWwpOwogCi0JcHJvZ19mbGFncyA9IGJwZl9wcm9ncmFtX19mbGFncyhwcm9nKTsKLQlicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKHByb2csIHByb2dfZmxhZ3MgfCBzcGVjLSZndDtwcm9nX2ZsYWdzKTsKJiM0MzsJYnBmX3Byb2dyYW1fX2FkZF9mbGFncyhwcm9nLCBzcGVjLSZndDtwcm9nX2ZsYWdzKTsKIAogCXRlc3Rlci0mZ3Q7bG9nX2J1ZlswXSA9ICYjMzk7XDAmIzM5OzsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuYwppbmRleCAzZjAzNzk0OWU5Nzg5Li5kMWQ2MDQ1MWM1YmNjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5jCkBAIC0yOTIsNyAmIzQzOzI5Miw2IEBAIGludCBicGZfcHJvZ190ZXN0X2xvYWQoY29uc3QgY2hhciAqZmlsZSwgZW51bSBicGZfcHJvZ190eXBlIHR5cGUsCiAJKTsKIAlzdHJ1Y3QgYnBmX29iamVjdCAqb2JqOwogCXN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZzsKLQlfX3UzMiBmbGFnczsKIAlpbnQgZXJyOwogCiAJb2JqID0gYnBmX29iamVjdF9fb3Blbl9maWxlKGZpbGUsICZhbXA7b3B0cyk7CkBAIC0zMDgsOCAmIzQzOzMwNyw3IEBAIGludCBicGZfcHJvZ190ZXN0X2xvYWQoY29uc3QgY2hhciAqZmlsZSwgZW51bSBicGZfcHJvZ190eXBlIHR5cGUsCiAJaWYgKHR5cGUgIT0gQlBGX1BST0dfVFlQRV9VTlNQRUMgJmFtcDsmYW1wOyBicGZfcHJvZ3JhbV9fdHlwZShwcm9nKSAhPSB0eXBlKQogCQlicGZfcHJvZ3JhbV9fc2V0X3R5cGUocHJvZywgdHlwZSk7CiAKLQlmbGFncyA9IGJwZl9wcm9ncmFtX19mbGFncyhwcm9nKSB8IHRlc3RpbmdfcHJvZ19mbGFncygpOwotCWJwZl9wcm9ncmFtX19zZXRfZmxhZ3MocHJvZywgZmxhZ3MpOwomIzQzOwlicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHByb2csIHRlc3RpbmdfcHJvZ19mbGFncygpKTsKIAogCWVyciA9IGJwZl9vYmplY3RfX2xvYWQob2JqKTsKIAlpZiAoZXJyKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3ZlcmlzdGF0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaXN0YXQuYwppbmRleCBlNzA3NDFjNmI5YjdjLi45Y2ZjOWI0YjQxYzEyIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaXN0YXQuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaXN0YXQuYwpAQCAtMTcyMiw5ICYjNDM7MTcyMiw5IEBAIHN0YXRpYyBpbnQgcHJvY2Vzc19wcm9nKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzdHJ1Y3QgYnBmCiAJZml4dXBfb2JqKG9iaiwgcHJvZywgYmFzZV9maWxlbmFtZSk7CiAKIAlpZiAoZW52LmZvcmNlX2NoZWNrcG9pbnRzKQotCQlicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKHByb2csIGJwZl9wcm9ncmFtX19mbGFncyhwcm9nKSB8IEJQRl9GX1RFU1RfU1RBVEVfRlJFUSk7CiYjNDM7CQlicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHByb2csIEJQRl9GX1RFU1RfU1RBVEVfRlJFUSk7CiAJaWYgKGVudi5mb3JjZV9yZWdfaW52YXJpYW50cykKLQkJYnBmX3Byb2dyYW1fX3NldF9mbGFncyhwcm9nLCBicGZfcHJvZ3JhbV9fZmxhZ3MocHJvZykgfCBCUEZfRl9URVNUX1JFR19JTlZBUklBTlRTKTsKJiM0MzsJCWJwZl9wcm9ncmFtX19hZGRfZmxhZ3MocHJvZywgQlBGX0ZfVEVTVF9SRUdfSU5WQVJJQU5UUyk7CiAKIAlvcHRzLmxvZ19idWYgPSBidWY7CiAJb3B0cy5sb2dfc2l6ZSA9IGJ1Zl9zejsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94ZHBfaHdfbWV0YWRhdGEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94ZHBfaHdfbWV0YWRhdGEuYwppbmRleCBjNTUwMWIzZmRmNDhmLi5hYjNmNWZjNTZlODY3IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveGRwX2h3X21ldGFkYXRhLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hkcF9od19tZXRhZGF0YS5jCkBAIC04NDUsNyAmIzQzOzg0NSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAKIAlwcm9nID0gYnBmX29iamVjdF9fZmluZF9wcm9ncmFtX2J5X25hbWUoYnBmX29iai0mZ3Q7b2JqLCAmIzM0O3J4JiMzNDspOwogCWJwZl9wcm9ncmFtX19zZXRfaWZpbmRleChwcm9nLCBpZmluZGV4KTsKLQlicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKHByb2csIGJwZl9wcm9ncmFtX19mbGFncyhwcm9nKSB8IEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWSk7CiYjNDM7CWJwZl9wcm9ncmFtX19hZGRfZmxhZ3MocHJvZywgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTsKIAogCXByaW50ZigmIzM0O2xvYWQgYnBmIHByb2dyYW0uLi5cbiYjMzQ7KTsKIAlyZXQgPSB4ZHBfaHdfbWV0YWRhdGFfX2xvYWQoYnBmX29iaik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEzOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNjQKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA1MDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IFdvcnRoRnV6emluZz1mYWxzZSBBc3Nlc3NtZW50KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBmaWxlIGxpc3Q6IGB0b29scy9icGYvYnBmdG9vbC9wcm9nLmNgLCBgdG9vbHMvbGliL2JwZi9saWJicGYuY2AsIGB0b29scy9saWIvYnBmL2xpYmJwZi5oYCwgZXRjLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgZXZlcnl0aGluZyBpcyBjb250YWluZWQgd2l0aGluIHRoZSBgdG9vbHMvYCBkaXJlY3Rvcnkg4oCTIHNwZWNpZmljYWxseSBgdG9vbHMvYnBmL2AsIGB0b29scy9saWIvYnBmL2AsIGFuZCB0aGUgZXZlci1wcmVzZW50IGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9gLiBUaGF0IHNjcmVhbXMgJiMzNDt1c2VyLXNwYWNlJiMzNDsgdG8gbWUsIGJ1dCBJIG5lZWQgdG8gYmUgbWV0aG9kaWNhbC4KCk5vdywgbGV0JiMzOTtzIGFwcGx5IHRoZSBXb3J0aEZ1enppbmcgY3JpdGVyaWEuIFNlY3Rpb24gMiBpcyBjbGVhcjogd2UgY2FuIGNvbmZpZGVudGx5IHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCAqb25seSogaWYgdGhlIGNvZGUgY2hhbmdlcyBmYWxsIG5lYXRseSBpbnRvIGEgc3BlY2lmaWMgc2V0IG9mIG5lZ2F0aXZlIGNyaXRlcmlhLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSAmIzM0O05vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXMmIzM0OyBjbGF1c2UuIFdlJiMzOTtyZSBsb29raW5nIGZvciBtb2RpZmljYXRpb25zIGluIHRoaW5ncyBsaWtlIGRvY3VtZW50YXRpb24sIGNvbW1lbnRzLCB1c2VyLXNwYWNlLCBzZWxmLXRlc3RzLCBzY3JpcHRzLCBhbmQgc2FtcGxlcyB0aGF0ICpkb24mIzM5O3QqIGFmZmVjdCB0aGUgY29yZSBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGl0cyBtb2R1bGVzLgoKTG9va2luZyBhdCB0aGUgZmlsZXMsIGl0JiMzOTtzIHByZXR0eSBjbGVhcjogYnBmdG9vbCwgbGliYnBmLCBhbmQgYnBmIHNlbGZ0ZXN0cyBhcmUgcHJlY2lzZWx5IHRoZSBraW5kcyBvZiB0b29scyBhbmQgdGVzdHMgdGhhdCBmYWxsIG91dHNpZGUgb2YgY29yZSBrZXJuZWwgc3BhY2UuIFRoZXkgYXJlIGFsbCBpbiBgdG9vbHMvYCBhbmQgbm8ga2VybmVsIGNvZGUgaXMgYmVpbmcgbW9kaWZpZWQuIEl0JiMzOTtzIHNhZmUgdG8gc2F5IHRoZXJlIGlzIG5vIGltcGFjdCBvbiB2bWxpbnV4IG9yIG1vZHVsZXMuCgpCZWZvcmUgSSBnaXZlIGl0IHRoZSBncmVlbiBsaWdodCwgSSB3aWxsIGNoZWNrIHRoZSBIRUFEIHRvIHZlcmlmeSB0aGVyZSB3ZXJlIG5vIGFkZGl0aW9uYWwgbW9kaWZpY2F0aW9ucywganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3Byb2dyYW1fX2FkZF9mbGFncyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt0b29scy9icGYvYnBmdG9vbC9wcm9nLmM9MTU2Nz1zdGF0aWMgaW50IGxvYWRfd2l0aF9vcHRpb25zKGludCBhcmdjLCBjaGFyICoqYXJndiwgYm9vbCBmaXJzdF9wcm9nX29ubHkpXG4tLVxudG9vbHMvYnBmL2JwZnRvb2wvcHJvZy5jLTE3NzEtXHRcdGlmIChwcm9nX3R5cGUgPT0gQlBGX1BST0dfVFlQRV9YRFAgXHUwMDI2XHUwMDI2IHhkcG1ldGFfaWZpbmRleCkge1xudG9vbHMvYnBmL2JwZnRvb2wvcHJvZy5jOjE3NzI6XHRcdFx0YnBmX3Byb2dyYW1fX2FkZF9mbGFncyhwb3MsIEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWSk7XG50b29scy9icGYvYnBmdG9vbC9wcm9nLmMtMTc3My1cdFx0XHRicGZfcHJvZ3JhbV9fc2V0X2lmaW5kZXgocG9zLCB4ZHBtZXRhX2lmaW5kZXgpO1xuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmM9OTkzMj1pbnQgYnBmX3Byb2dyYW1fX3NldF9mbGFncyhzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIF9fdTMyIGZsYWdzKVxuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtOTk0MC1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6OTk0MTppbnQgYnBmX3Byb2dyYW1fX2FkZF9mbGFncyhzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIF9fdTMyIGZsYWdzKVxudG9vbHMvbGliL2JwZi9saWJicGYuYy05OTQyLXtcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZi5oPTEwMTI9TElCQlBGX0FQSSBpbnQgYnBmX3Byb2dyYW1fX3NldF9mbGFncyhzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIF9fdTMyIGZsYWdzKTtcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZi5oLTEwMTYtICovXG50b29scy9saWIvYnBmL2xpYmJwZi5oOjEwMTc6TElCQlBGX0FQSSBpbnQgYnBmX3Byb2dyYW1fX2FkZF9mbGFncyhzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIF9fdTMyIGZsYWdzKTtcbnRvb2xzL2xpYi9icGYvbGliYnBmLmgtMTAxOC1MSUJCUEZfQVBJIGludCBicGZfcHJvZ3JhbV9fY2xlYXJfZmxhZ3Moc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBfX3UzMiBmbGFncyk7XG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYubWFwPTQ1OT1MSUJCUEZfMS44LjAge1xudG9vbHMvbGliL2JwZi9saWJicGYubWFwLTQ2MC1cdGdsb2JhbDpcbnRvb2xzL2xpYi9icGYvbGliYnBmLm1hcDo0NjE6XHRcdGJwZl9wcm9ncmFtX19hZGRfZmxhZ3M7XG50b29scy9saWIvYnBmL2xpYmJwZi5tYXAtNDYyLVx0XHRicGZfcHJvZ3JhbV9fYXR0YWNoX3RyYWNpbmdfbXVsdGk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXR0YWNoX3Byb2JlLmM9NTM3PXN0YXRpYyB2b2lkIHRlc3Rfa3Byb2JlX3NsZWVwYWJsZSh2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2F0dGFjaF9wcm9iZS5jLTU0NS1cdC8qIHNsZWVwYWJsZSBrcHJvYmUgdGVzdCBjYXNlIG5lZWRzIGZsYWdzIHNldCBiZWZvcmUgbG9hZGluZyAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXR0YWNoX3Byb2JlLmM6NTQ2Olx0aWYgKCFBU1NFUlRfT0soYnBmX3Byb2dyYW1fX2FkZF9mbGFncyhza2VsLVx1MDAzZXByb2dzLmhhbmRsZV9rcHJvYmVfc2xlZXBhYmxlLCBCUEZfRl9TTEVFUEFCTEUpLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXR0YWNoX3Byb2JlLmMtNTQ3LVx0XHQgICAgICAgXCYjMzQ7a3Byb2JlX3NsZWVwYWJsZV9mbGFnc1wmIzM0OykpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3ZlcmlmX3NjYWxlLmM9MjA9c3RhdGljIGludCBjaGVja19sb2FkKGNvbnN0IGNoYXIgKmZpbGUsIGVudW0gYnBmX3Byb2dfdHlwZSB0eXBlKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl92ZXJpZl9zY2FsZS5jLTM3LVx0YnBmX3Byb2dyYW1fX3NldF90eXBlKHByb2csIHR5cGUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3ZlcmlmX3NjYWxlLmM6Mzg6XHRicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHByb2csIHRlc3RpbmdfcHJvZ19mbGFncygpKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl92ZXJpZl9zY2FsZS5jLTM5LVx0YnBmX3Byb2dyYW1fX3NldF9sb2dfbGV2ZWwocHJvZywgNCB8IGV4dHJhX3Byb2dfbG9hZF9sb2dfZmxhZ3MpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tlcm5lbF9mbGFnLmM9OD12b2lkIHRlc3Rfa2VybmVsX2ZsYWcodm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rZXJuZWxfZmxhZy5jLTI1LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva2VybmVsX2ZsYWcuYzoyNjpcdHJldCA9IGJwZl9wcm9ncmFtX19hZGRfZmxhZ3MocHJvZywgQlBGX0ZfQU5ZX0FMSUdOTUVOVCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rZXJuZWxfZmxhZy5jOjI3Olx0QVNTRVJUX09LKHJldCwgXCYjMzQ7YnBmX3Byb2dyYW1fX2FkZF9mbGFncyByZXRcJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva2VybmVsX2ZsYWcuYy0yOC1cdEFTU0VSVF9FUShicGZfcHJvZ3JhbV9fZmxhZ3MocHJvZyksIGZsYWdzIHwgQlBGX0ZfQU5ZX0FMSUdOTUVOVCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tlcm5lbF9mbGFnLmM6Mjk6XHRcdCAgXCYjMzQ7YnBmX3Byb2dyYW1fX2FkZF9mbGFncyB2YWx1ZVwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rZXJuZWxfZmxhZy5jLTMwLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2twcm9iZV9tdWx0aV90ZXN0LmM9MjIxPXN0YXRpYyB2b2lkIHRlc3RfYXR0YWNoX2FwaV9mYWlscyh2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2twcm9iZV9tdWx0aV90ZXN0LmMtMzYzLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3Byb2JlX211bHRpX3Rlc3QuYzozNjQ6XHRlcnIgPSBicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHNsX3NrZWwtXHUwMDNlcHJvZ3MuaGFuZGxlX2twcm9iZV9tdWx0aV9zbGVlcGFibGUsIEJQRl9GX1NMRUVQQUJMRSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rcHJvYmVfbXVsdGlfdGVzdC5jLTM2NS1cdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7c2xlZXBfc2tlbF9zZXRfZmxhZ3NcJiMzNDspKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9tZXRhZGF0YS5jPTM0OT12b2lkIHRlc3RfeGRwX21ldGFkYXRhKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX21ldGFkYXRhLmMtNDEwLVx0YnBmX3Byb2dyYW1fX3NldF9pZmluZGV4KHByb2csIHJ4X2lmaW5kZXgpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX21ldGFkYXRhLmM6NDExOlx0YnBmX3Byb2dyYW1fX2FkZF9mbGFncyhwcm9nLCBCUEZfRl9YRFBfREVWX0JPVU5EX09OTFkpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX21ldGFkYXRhLmMtNDEyLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9tZXRhZGF0YS5jLTQxNy1cdGJwZl9wcm9ncmFtX19zZXRfaWZpbmRleChuZXdfcHJvZywgcnhfaWZpbmRleCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfbWV0YWRhdGEuYzo0MTg6XHRicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKG5ld19wcm9nLCBCUEZfRl9YRFBfREVWX0JPVU5EX09OTFkpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX21ldGFkYXRhLmMtNDE5LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jPTc0Nj1zdGF0aWMgdm9pZCBwcmVwYXJlX2Nhc2Uoc3RydWN0IHRlc3RfbG9hZGVyICp0ZXN0ZXIsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmMtNzY4LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmM6NzY5Olx0YnBmX3Byb2dyYW1fX2FkZF9mbGFncyhwcm9nLCBzcGVjLVx1MDAzZXByb2dfZmxhZ3MpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmMtNzcwLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuYz0yODc9aW50IGJwZl9wcm9nX3Rlc3RfbG9hZChjb25zdCBjaGFyICpmaWxlLCBlbnVtIGJwZl9wcm9nX3R5cGUgdHlwZSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmMtMzA5LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5jOjMxMDpcdGJwZl9wcm9ncmFtX19hZGRfZmxhZ3MocHJvZywgdGVzdGluZ19wcm9nX2ZsYWdzKCkpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5jLTMxMS1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaXN0YXQuYz0xNjc2PXN0YXRpYyBpbnQgcHJvY2Vzc19wcm9nKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3ZlcmlzdGF0LmMtMTcyNC1cdGlmIChlbnYuZm9yY2VfY2hlY2twb2ludHMpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaXN0YXQuYzoxNzI1Olx0XHRicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHByb2csIEJQRl9GX1RFU1RfU1RBVEVfRlJFUSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaXN0YXQuYy0xNzI2LVx0aWYgKGVudi5mb3JjZV9yZWdfaW52YXJpYW50cylcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpc3RhdC5jOjE3Mjc6XHRcdGJwZl9wcm9ncmFtX19hZGRfZmxhZ3MocHJvZywgQlBGX0ZfVEVTVF9SRUdfSU5WQVJJQU5UUyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaXN0YXQuYy0xNzI4LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94ZHBfaHdfbWV0YWRhdGEuYz03MzU9aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveGRwX2h3X21ldGFkYXRhLmMtODQ3LVx0YnBmX3Byb2dyYW1fX3NldF9pZmluZGV4KHByb2csIGlmaW5kZXgpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hkcF9od19tZXRhZGF0YS5jOjg0ODpcdGJwZl9wcm9ncmFtX19hZGRfZmxhZ3MocHJvZywgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94ZHBfaHdfbWV0YWRhdGEuYy04NDktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTM6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1MzYKCQkJCQkJCW91dHB1dDogOTcKCQkJCQkJCXRob3VnaHRzOiAxOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgSW1wYWN0KioKCk9rYXksIHNvIEkmIzM5O3ZlIHRha2VuIGEgbG9vayBhdCB0aGlzIHBhdGNoLCBhbmQgaXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIHNjb3BlIGlzIGVudGlyZWx5IGNvbnRhaW5lZCB3aXRoaW4gdGhlIGB0b29scy9gIGRpcmVjdG9yeSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGB0b29scy9saWIvYnBmL2AsIGB0b29scy9icGYvYnBmdG9vbC9gLCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9gLiBUaGlzIG1lYW5zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdXNlci1zcGFjZSBjb21wb25lbnRzIGhlcmU6IGxpYnJhcmllcywgdG9vbHMsIGFuZCB0aGUgYXNzb2NpYXRlZCB0ZXN0cy4gQ3J1Y2lhbGx5LCBub25lIG9mIHRoaXMgdG91Y2hlcyB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlIChgdm1saW51eGApIG9yIGFueSBrZXJuZWwgbW9kdWxlcy4KCkNvbnNlcXVlbnRseSwgZnJvbSBteSBwZXJzcGVjdGl2ZSwgdGhpcyBkb2VzbiYjMzk7dCB3YXJyYW50IGFueSBzcGVjaWFsIGZ1enppbmcgY29uc2lkZXJhdGlvbnMg4oCTIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgZmFsc2VgLiBUaGVyZSBhcmUgbm8gc3BlY2lmaWMgc3ltYm9scyBJIG5lZWQgdG8gZm9jdXMgb24sIHNvIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0IGlzIGFwcHJvcHJpYXRlbHkgZW1wdHkuIExpa2V3aXNlLCBzaW5jZSB0aGlzIGlzIHN0cmljdGx5IHVzZXItc3BhY2UsIHRoZXJlIGFyZSBubyBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIEkgbmVlZCB0byBlbmFibGU7IHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBpcyBlbXB0eS4KCk15IHJlYXNvbmluZyBpcyBzaW1wbGU6IHRoZSBjaGFuZ2VzIGFyZSBsaW1pdGVkIHRvIHVzZXItc3BhY2UgdG9vbGluZyBhbmQgdGVzdCBmaWxlcy4gU3BlY2lmaWNhbGx5LCB3ZSYjMzk7cmUgc2VlaW5nIHRoZSBhZGRpdGlvbiBvZiBoZWxwZXIgZnVuY3Rpb25zLCBgYnBmX3Byb2dyYW1fX2FkZF9mbGFnc2AgYW5kIGBicGZfcHJvZ3JhbV9fY2xlYXJfZmxhZ3NgLCB3aXRoaW4gbGliYnBmIGFuZCB1cGRhdGVzIHRvIHRoZSBicGZ0b29sIGFuZCBzZWxmdGVzdHMgdG8gdXRpbGl6ZSB0aGVzZSBmdW5jdGlvbnMuIFRoaXMgaXMgY29udGFpbmVkIHdpdGhpbiB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5LCBzbyBpdCB3b24mIzM5O3QgYmUgaW5mbHVlbmNpbmcgYW55IGNvcmUga2VybmVsIGJlaGF2aW9yLgoKSSYjMzk7bSBjb25maWRlbnQgaW4gdGhlc2UgY29uY2x1c2lvbnMsIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgY29kZSB1bmRlciB0b29scy8gKHNwZWNpZmljYWxseSBsaWJicGYsIGJwZnRvb2wsIGFuZCBzZWxmdGVzdHMpLCBpbnRyb2R1Y2luZyB1c2VyLXNwYWNlIGhlbHBlciBmdW5jdGlvbnMgYnBmX3Byb2dyYW1fX2FkZF9mbGFncygpIGFuZCBicGZfcHJvZ3JhbV9fY2xlYXJfZmxhZ3MoKS4gTm8ga2VybmVsLXNwYWNlIGNvZGUgKHZtbGludXggb3IgbW9kdWxlcykgaXMgdG91Y2hlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBjb2RlIHVuZGVyIHRvb2xzLyAoc3BlY2lmaWNhbGx5IGxpYmJwZiwgYnBmdG9vbCwgYW5kIHNlbGZ0ZXN0cyksIGludHJvZHVjaW5nIHVzZXItc3BhY2UgaGVscGVyIGZ1bmN0aW9ucyBicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKCkgYW5kIGJwZl9wcm9ncmFtX19jbGVhcl9mbGFncygpLiBObyBrZXJuZWwtc3BhY2UgY29kZSAodm1saW51eCBvciBtb2R1bGVzKSBpcyB0b3VjaGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMzoxNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDRUMTM6MTQ6NTEuNzU5MjY0NTY0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2NzAyNDMzMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgY29kZSB1bmRlciB0b29scy8gKHNwZWNpZmljYWxseSBsaWJicGYsIGJwZnRvb2wsIGFuZCBzZWxmdGVzdHMpLCBpbnRyb2R1Y2luZyB1c2VyLXNwYWNlIGhlbHBlciBmdW5jdGlvbnMgYnBmX3Byb2dyYW1fX2FkZF9mbGFncygpIGFuZCBicGZfcHJvZ3JhbV9fY2xlYXJfZmxhZ3MoKS4gTm8ga2VybmVsLXNwYWNlIGNvZGUgKHZtbGludXggb3IgbW9kdWxlcykgaXMgdG91Y2hlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEzOjE0OjUxLjc1OTI2ODg1NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcwMzEzNTA1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGY2MzYwOTY5OWY2OWU3MWZjNDlhODQxMjZmOTI2YTdiM2Q4ZmUyYmVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgNCAxMzoxNDo0OSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy9icGYvYnBmdG9vbC9wcm9nLmMgYi90b29scy9icGYvYnBmdG9vbC9wcm9nLmNcXG5pbmRleCA4YzJmOTI1NWIzNmQ3Li42YWI5MTFlODIxNTUxIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL3Byb2cuY1xcbisrKyBiL3Rvb2xzL2JwZi9icGZ0b29sL3Byb2cuY1xcbkBAIC0xNzY5LDcgKzE3NjksNyBAQCBzdGF0aWMgaW50IGxvYWRfd2l0aF9vcHRpb25zKGludCBhcmdjLCBjaGFyICoqYXJndiwgYm9vbCBmaXJzdF9wcm9nX29ubHkpXFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdGlmIChwcm9nX3R5cGUgPT0gQlBGX1BST0dfVFlQRV9YRFAgXFx1MDAyNlxcdTAwMjYgeGRwbWV0YV9pZmluZGV4KSB7XFxuLVxcdFxcdFxcdGJwZl9wcm9ncmFtX19zZXRfZmxhZ3MocG9zLCBicGZfcHJvZ3JhbV9fZmxhZ3MocG9zKSB8IEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWSk7XFxuK1xcdFxcdFxcdGJwZl9wcm9ncmFtX19hZGRfZmxhZ3MocG9zLCBCUEZfRl9YRFBfREVWX0JPVU5EX09OTFkpO1xcbiBcXHRcXHRcXHRicGZfcHJvZ3JhbV9fc2V0X2lmaW5kZXgocG9zLCB4ZHBtZXRhX2lmaW5kZXgpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRicGZfcHJvZ3JhbV9fc2V0X2lmaW5kZXgocG9zLCBvZmZsb2FkX2lmaW5kZXgpO1xcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5jIGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xcbmluZGV4IGMwMzZlOGE5MWVkODguLjIyMWM0ZmUxZmIzMTkgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvbGliL2JwZi9saWJicGYuY1xcbisrKyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcXG5AQCAtOTkzOCw2ICs5OTM4LDE2IEBAIGludCBicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgX191MzIgZmxhZ3MpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitpbnQgYnBmX3Byb2dyYW1fX2FkZF9mbGFncyhzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIF9fdTMyIGZsYWdzKVxcbit7XFxuK1xcdHJldHVybiBicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKHByb2csIHByb2ctXFx1MDAzZXByb2dfZmxhZ3MgfCBmbGFncyk7XFxuK31cXG4rXFxuK2ludCBicGZfcHJvZ3JhbV9fY2xlYXJfZmxhZ3Moc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBfX3UzMiBmbGFncylcXG4re1xcbitcXHRyZXR1cm4gYnBmX3Byb2dyYW1fX3NldF9mbGFncyhwcm9nLCBwcm9nLVxcdTAwM2Vwcm9nX2ZsYWdzIFxcdTAwMjYgfmZsYWdzKTtcXG4rfVxcbitcXG4gX191MzIgYnBmX3Byb2dyYW1fX2xvZ19sZXZlbChjb25zdCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cpXFxuIHtcXG4gXFx0cmV0dXJuIHByb2ctXFx1MDAzZWxvZ19sZXZlbDtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9saWJicGYuaCBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcXG5pbmRleCBiOTY1YWQ1NzE1NDAzLi4zOTMyYmY5Y2I0OTAzIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcXG4rKysgYi90b29scy9saWIvYnBmL2xpYmJwZi5oXFxuQEAgLTEwMTEsNiArMTAxMSwxMiBAQCBicGZfcHJvZ3JhbV9fc2V0X2V4cGVjdGVkX2F0dGFjaF90eXBlKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyxcXG4gTElCQlBGX0FQSSBfX3UzMiBicGZfcHJvZ3JhbV9fZmxhZ3MoY29uc3Qgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nKTtcXG4gTElCQlBGX0FQSSBpbnQgYnBmX3Byb2dyYW1fX3NldF9mbGFncyhzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIF9fdTMyIGZsYWdzKTtcXG4gXFxuKy8qIENvbnZlbmllbmNlIGhlbHBlcnMgdG8gbm9uLWRlc3RydWN0aXZlbHkgYWRkIG9yIGNsZWFyIHRoZSBzcGVjaWZpZWQgZmxhZ3NcXG4rICogaW5zdGVhZCBvZiBjbG9iYmVyaW5nIHRoZW0gYXMgYnBmX3Byb2dyYW1fX3NldF9mbGFncygpIGRvZXMuXFxuKyAqL1xcbitMSUJCUEZfQVBJIGludCBicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgX191MzIgZmxhZ3MpO1xcbitMSUJCUEZfQVBJIGludCBicGZfcHJvZ3JhbV9fY2xlYXJfZmxhZ3Moc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBfX3UzMiBmbGFncyk7XFxuK1xcbiAvKiBQZXItcHJvZ3JhbSBsb2cgbGV2ZWwgYW5kIGxvZyBidWZmZXIgZ2V0dGVycy9zZXR0ZXJzLlxcbiAgKiBTZWUgYnBmX29iamVjdF9vcGVuX29wdHMgY29tbWVudHMgcmVnYXJkaW5nIGxvZ19sZXZlbCBhbmQgbG9nX2J1ZlxcbiAgKiBpbnRlcmFjdGlvbnMuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLm1hcCBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLm1hcFxcbmluZGV4IDA4YWIyZWE4ODFmYjYuLmE4MTFhMWIzYTA4NTcgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvbGliL2JwZi9saWJicGYubWFwXFxuKysrIGIvdG9vbHMvbGliL2JwZi9saWJicGYubWFwXFxuQEAgLTQ1OCw3ICs0NTgsOSBAQCBMSUJCUEZfMS43LjAge1xcbiBcXG4gTElCQlBGXzEuOC4wIHtcXG4gXFx0Z2xvYmFsOlxcbitcXHRcXHRicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzO1xcbiBcXHRcXHRicGZfcHJvZ3JhbV9fYXR0YWNoX3RyYWNpbmdfbXVsdGk7XFxuK1xcdFxcdGJwZl9wcm9ncmFtX19jbGVhcl9mbGFncztcXG4gXFx0XFx0YnBmX3Byb2dyYW1fX2Nsb25lO1xcbiBcXHRcXHRidGZfX2ZpbmRfYnlfbmFtZV9raW5kX293bjtcXG4gXFx0XFx0YnRmX19uZXdfZW1wdHlfb3B0cztcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXR0YWNoX3Byb2JlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hdHRhY2hfcHJvYmUuY1xcbmluZGV4IDdkYWRiOTBlN2I2ODkuLjQxMTM2ZTFjNzc1MmUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXR0YWNoX3Byb2JlLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hdHRhY2hfcHJvYmUuY1xcbkBAIC01NDMsOSArNTQzLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9rcHJvYmVfc2xlZXBhYmxlKHZvaWQpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdC8qIHNsZWVwYWJsZSBrcHJvYmUgdGVzdCBjYXNlIG5lZWRzIGZsYWdzIHNldCBiZWZvcmUgbG9hZGluZyAqL1xcbi1cXHRpZiAoIUFTU0VSVF9PSyhicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKFxcbi1cXHRcXHRcXHQgICAgICAgc2tlbC1cXHUwMDNlcHJvZ3MuaGFuZGxlX2twcm9iZV9zbGVlcGFibGUsXFxuLVxcdFxcdFxcdCAgICAgICBicGZfcHJvZ3JhbV9fZmxhZ3Moc2tlbC1cXHUwMDNlcHJvZ3MuaGFuZGxlX2twcm9iZV9zbGVlcGFibGUpIHwgQlBGX0ZfU0xFRVBBQkxFKSxcXG4rXFx0aWYgKCFBU1NFUlRfT0soYnBmX3Byb2dyYW1fX2FkZF9mbGFncyhza2VsLVxcdTAwM2Vwcm9ncy5oYW5kbGVfa3Byb2JlX3NsZWVwYWJsZSwgQlBGX0ZfU0xFRVBBQkxFKSxcXG4gXFx0XFx0ICAgICAgIFxcXCJrcHJvYmVfc2xlZXBhYmxlX2ZsYWdzXFxcIikpXFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl92ZXJpZl9zY2FsZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3ZlcmlmX3NjYWxlLmNcXG5pbmRleCA2NTIzMDdhMWIyMmU3Li45MDJhNzBkNWFmZWI2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl92ZXJpZl9zY2FsZS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3ZlcmlmX3NjYWxlLmNcXG5AQCAtMzUsNyArMzUsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2xvYWQoY29uc3QgY2hhciAqZmlsZSwgZW51bSBicGZfcHJvZ190eXBlIHR5cGUpXFxuIFxcdH1cXG4gXFxuIFxcdGJwZl9wcm9ncmFtX19zZXRfdHlwZShwcm9nLCB0eXBlKTtcXG4tXFx0YnBmX3Byb2dyYW1fX3NldF9mbGFncyhwcm9nLCBicGZfcHJvZ3JhbV9fZmxhZ3MocHJvZykgfCB0ZXN0aW5nX3Byb2dfZmxhZ3MoKSk7XFxuK1xcdGJwZl9wcm9ncmFtX19hZGRfZmxhZ3MocHJvZywgdGVzdGluZ19wcm9nX2ZsYWdzKCkpO1xcbiBcXHRicGZfcHJvZ3JhbV9fc2V0X2xvZ19sZXZlbChwcm9nLCA0IHwgZXh0cmFfcHJvZ19sb2FkX2xvZ19mbGFncyk7XFxuIFxcbiBcXHRlcnIgPSBicGZfb2JqZWN0X19sb2FkKG9iaik7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tlcm5lbF9mbGFnLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rZXJuZWxfZmxhZy5jXFxuaW5kZXggMjVlYjU5ZjQ2MGFiZS4uNzJjMGVmOGRhNDA5ZSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rZXJuZWxfZmxhZy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva2VybmVsX2ZsYWcuY1xcbkBAIC0xMCwxNSArMTAsMzEgQEAgdm9pZCB0ZXN0X2tlcm5lbF9mbGFnKHZvaWQpXFxuIFxcdHN0cnVjdCB0ZXN0X2tlcm5lbF9mbGFnICpsc21fc2tlbDtcXG4gXFx0c3RydWN0IGtmdW5jX2NhbGxfdGVzdCAqc2tlbCA9IE5VTEw7XFxuIFxcdHN0cnVjdCBrZnVuY19jYWxsX3Rlc3RfbHNrZWwgKmxza2VsID0gTlVMTDtcXG4rXFx0c3RydWN0IGJwZl9wcm9ncmFtICpwcm9nO1xcbitcXHRfX3UzMiBmbGFncztcXG4gXFx0aW50IHJldDtcXG4gXFxuLVxcdGxzbV9za2VsID0gdGVzdF9rZXJuZWxfZmxhZ19fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRsc21fc2tlbCA9IHRlc3Rfa2VybmVsX2ZsYWdfX29wZW4oKTtcXG4gXFx0aWYgKCFBU1NFUlRfT0tfUFRSKGxzbV9za2VsLCBcXFwibHNtX3NrZWxcXFwiKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0QVNTRVJUX0VRKGJwZl9wcm9ncmFtX19mbGFncyhsc21fc2tlbC1cXHUwMDNlcHJvZ3MuYnBmKSBcXHUwMDI2IEJQRl9GX1NMRUVQQUJMRSxcXG4rXFx0cHJvZyA9IGxzbV9za2VsLVxcdTAwM2Vwcm9ncy5icGY7XFxuK1xcdGZsYWdzID0gYnBmX3Byb2dyYW1fX2ZsYWdzKHByb2cpO1xcbitcXHRBU1NFUlRfRVEoZmxhZ3MgXFx1MDAyNiBCUEZfRl9TTEVFUEFCTEUsXFxuIFxcdFxcdCAgQlBGX0ZfU0xFRVBBQkxFLCBcXFwic2xlZXBhYmxlIGluIHByb2dyYW0gZmxhZ3NcXFwiKTtcXG4gXFxuK1xcdHJldCA9IGJwZl9wcm9ncmFtX19hZGRfZmxhZ3MocHJvZywgQlBGX0ZfQU5ZX0FMSUdOTUVOVCk7XFxuK1xcdEFTU0VSVF9PSyhyZXQsIFxcXCJicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzIHJldFxcXCIpO1xcbitcXHRBU1NFUlRfRVEoYnBmX3Byb2dyYW1fX2ZsYWdzKHByb2cpLCBmbGFncyB8IEJQRl9GX0FOWV9BTElHTk1FTlQsXFxuK1xcdFxcdCAgXFxcImJwZl9wcm9ncmFtX19hZGRfZmxhZ3MgdmFsdWVcXFwiKTtcXG4rXFxuK1xcdHJldCA9IGJwZl9wcm9ncmFtX19jbGVhcl9mbGFncyhwcm9nLCBCUEZfRl9BTllfQUxJR05NRU5UKTtcXG4rXFx0QVNTRVJUX09LKHJldCwgXFxcImJwZl9wcm9ncmFtX19jbGVhcl9mbGFncyByZXRcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKGJwZl9wcm9ncmFtX19mbGFncyhwcm9nKSwgZmxhZ3MsIFxcXCJicGZfcHJvZ3JhbV9fY2xlYXJfZmxhZ3MgdmFsdWVcXFwiKTtcXG4rXFxuK1xcdHJldCA9IHRlc3Rfa2VybmVsX2ZsYWdfX2xvYWQobHNtX3NrZWwpO1xcbitcXHRBU1NFUlRfT0socmV0LCBcXFwidGVzdF9rZXJuZWxfZmxhZ19fbG9hZFxcXCIpO1xcbitcXG4gXFx0bHNtX3NrZWwtXFx1MDAzZWJzcy1cXHUwMDNlbW9uaXRvcmVkX3RpZCA9IHN5c19nZXR0aWQoKTtcXG4gXFxuIFxcdHJldCA9IHRlc3Rfa2VybmVsX2ZsYWdfX2F0dGFjaChsc21fc2tlbCk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2twcm9iZV9tdWx0aV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rcHJvYmVfbXVsdGlfdGVzdC5jXFxuaW5kZXggZWQzZmQwYTg4ZGFiNi4uNjUxMTIzY2Q4NjAyZCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rcHJvYmVfbXVsdGlfdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3Byb2JlX211bHRpX3Rlc3QuY1xcbkBAIC0zNjEsOCArMzYxLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9hdHRhY2hfYXBpX2ZhaWxzKHZvaWQpXFxuIFxcbiBcXHRzbF9za2VsLVxcdTAwM2Vic3MtXFx1MDAzZXVzZXJfcHRyID0gc2xfc2tlbDtcXG4gXFxuLVxcdGVyciA9IGJwZl9wcm9ncmFtX19zZXRfZmxhZ3Moc2xfc2tlbC1cXHUwMDNlcHJvZ3MuaGFuZGxlX2twcm9iZV9tdWx0aV9zbGVlcGFibGUsXFxuLVxcdFxcdFxcdFxcdCAgICAgYnBmX3Byb2dyYW1fX2ZsYWdzKHNsX3NrZWwtXFx1MDAzZXByb2dzLmhhbmRsZV9rcHJvYmVfbXVsdGlfc2xlZXBhYmxlKSB8IEJQRl9GX1NMRUVQQUJMRSk7XFxuK1xcdGVyciA9IGJwZl9wcm9ncmFtX19hZGRfZmxhZ3Moc2xfc2tlbC1cXHUwMDNlcHJvZ3MuaGFuZGxlX2twcm9iZV9tdWx0aV9zbGVlcGFibGUsIEJQRl9GX1NMRUVQQUJMRSk7XFxuIFxcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInNsZWVwX3NrZWxfc2V0X2ZsYWdzXFxcIikpXFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9tZXRhZGF0YS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX21ldGFkYXRhLmNcXG5pbmRleCAwNDdkZmRjMzIyYTJmLi4zYWI5NjM0NTg5MDNkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9tZXRhZGF0YS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX21ldGFkYXRhLmNcXG5AQCAtNDA4LDE0ICs0MDgsMTQgQEAgdm9pZCB0ZXN0X3hkcF9tZXRhZGF0YSh2b2lkKVxcbiBcXG4gXFx0cHJvZyA9IGJwZl9vYmplY3RfX2ZpbmRfcHJvZ3JhbV9ieV9uYW1lKGJwZl9vYmotXFx1MDAzZW9iaiwgXFxcInJ4XFxcIik7XFxuIFxcdGJwZl9wcm9ncmFtX19zZXRfaWZpbmRleChwcm9nLCByeF9pZmluZGV4KTtcXG4tXFx0YnBmX3Byb2dyYW1fX3NldF9mbGFncyhwcm9nLCBicGZfcHJvZ3JhbV9fZmxhZ3MocHJvZykgfCBCUEZfRl9YRFBfREVWX0JPVU5EX09OTFkpO1xcbitcXHRicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHByb2csIEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWSk7XFxuIFxcbiBcXHQvKiBNYWtlIHN1cmUgd2UgY2FuIGxvYWQgYSBkZXYtYm91bmQgcHJvZ3JhbSB0aGF0IHBlcmZvcm1zXFxuIFxcdCAqIFhEUF9SRURJUkVDVCBpbnRvIGEgZGV2bWFwLlxcbiBcXHQgKi9cXG4gXFx0bmV3X3Byb2cgPSBicGZfb2JqZWN0X19maW5kX3Byb2dyYW1fYnlfbmFtZShicGZfb2JqLVxcdTAwM2VvYmosIFxcXCJyZWRpcmVjdFxcXCIpO1xcbiBcXHRicGZfcHJvZ3JhbV9fc2V0X2lmaW5kZXgobmV3X3Byb2csIHJ4X2lmaW5kZXgpO1xcbi1cXHRicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKG5ld19wcm9nLCBicGZfcHJvZ3JhbV9fZmxhZ3MobmV3X3Byb2cpIHwgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTtcXG4rXFx0YnBmX3Byb2dyYW1fX2FkZF9mbGFncyhuZXdfcHJvZywgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTtcXG4gXFxuIFxcdGlmICghQVNTRVJUX09LKHhkcF9tZXRhZGF0YV9fbG9hZChicGZfb2JqKSwgXFxcImxvYWQgc2tlbGV0b25cXFwiKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmNcXG5pbmRleCA3OTRhN2RmYjA1Nzk2Li4yODcyNGRlMDYzMjIwIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmNcXG5AQCAtNzQ4LDcgKzc0OCw3IEBAIHN0YXRpYyB2b2lkIHByZXBhcmVfY2FzZShzdHJ1Y3QgdGVzdF9sb2FkZXIgKnRlc3RlcixcXG4gXFx0XFx0XFx0IHN0cnVjdCBicGZfb2JqZWN0ICpvYmosXFxuIFxcdFxcdFxcdCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cpXFxuIHtcXG4tXFx0aW50IG1pbl9sb2dfbGV2ZWwgPSAwLCBwcm9nX2ZsYWdzO1xcbitcXHRpbnQgbWluX2xvZ19sZXZlbCA9IDA7XFxuIFxcbiBcXHRpZiAoZW52LnZlcmJvc2l0eSBcXHUwMDNlIFZFUkJPU0VfTk9ORSlcXG4gXFx0XFx0bWluX2xvZ19sZXZlbCA9IDE7XFxuQEAgLTc2Niw4ICs3NjYsNyBAQCBzdGF0aWMgdm9pZCBwcmVwYXJlX2Nhc2Uoc3RydWN0IHRlc3RfbG9hZGVyICp0ZXN0ZXIsXFxuIFxcdGVsc2VcXG4gXFx0XFx0YnBmX3Byb2dyYW1fX3NldF9sb2dfbGV2ZWwocHJvZywgc3BlYy1cXHUwMDNlbG9nX2xldmVsKTtcXG4gXFxuLVxcdHByb2dfZmxhZ3MgPSBicGZfcHJvZ3JhbV9fZmxhZ3MocHJvZyk7XFxuLVxcdGJwZl9wcm9ncmFtX19zZXRfZmxhZ3MocHJvZywgcHJvZ19mbGFncyB8IHNwZWMtXFx1MDAzZXByb2dfZmxhZ3MpO1xcbitcXHRicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHByb2csIHNwZWMtXFx1MDAzZXByb2dfZmxhZ3MpO1xcbiBcXG4gXFx0dGVzdGVyLVxcdTAwM2Vsb2dfYnVmWzBdID0gJ1xcXFwwJztcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmNcXG5pbmRleCAzZjAzNzk0OWU5Nzg5Li5kMWQ2MDQ1MWM1YmNjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuY1xcbkBAIC0yOTIsNyArMjkyLDYgQEAgaW50IGJwZl9wcm9nX3Rlc3RfbG9hZChjb25zdCBjaGFyICpmaWxlLCBlbnVtIGJwZl9wcm9nX3R5cGUgdHlwZSxcXG4gXFx0KTtcXG4gXFx0c3RydWN0IGJwZl9vYmplY3QgKm9iajtcXG4gXFx0c3RydWN0IGJwZl9wcm9ncmFtICpwcm9nO1xcbi1cXHRfX3UzMiBmbGFncztcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdG9iaiA9IGJwZl9vYmplY3RfX29wZW5fZmlsZShmaWxlLCBcXHUwMDI2b3B0cyk7XFxuQEAgLTMwOCw4ICszMDcsNyBAQCBpbnQgYnBmX3Byb2dfdGVzdF9sb2FkKGNvbnN0IGNoYXIgKmZpbGUsIGVudW0gYnBmX3Byb2dfdHlwZSB0eXBlLFxcbiBcXHRpZiAodHlwZSAhPSBCUEZfUFJPR19UWVBFX1VOU1BFQyBcXHUwMDI2XFx1MDAyNiBicGZfcHJvZ3JhbV9fdHlwZShwcm9nKSAhPSB0eXBlKVxcbiBcXHRcXHRicGZfcHJvZ3JhbV9fc2V0X3R5cGUocHJvZywgdHlwZSk7XFxuIFxcbi1cXHRmbGFncyA9IGJwZl9wcm9ncmFtX19mbGFncyhwcm9nKSB8IHRlc3RpbmdfcHJvZ19mbGFncygpO1xcbi1cXHRicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKHByb2csIGZsYWdzKTtcXG4rXFx0YnBmX3Byb2dyYW1fX2FkZF9mbGFncyhwcm9nLCB0ZXN0aW5nX3Byb2dfZmxhZ3MoKSk7XFxuIFxcbiBcXHRlcnIgPSBicGZfb2JqZWN0X19sb2FkKG9iaik7XFxuIFxcdGlmIChlcnIpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpc3RhdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3ZlcmlzdGF0LmNcXG5pbmRleCBlNzA3NDFjNmI5YjdjLi45Y2ZjOWI0YjQxYzEyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpc3RhdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3ZlcmlzdGF0LmNcXG5AQCAtMTcyMiw5ICsxNzIyLDkgQEAgc3RhdGljIGludCBwcm9jZXNzX3Byb2coY29uc3QgY2hhciAqZmlsZW5hbWUsIHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZcXG4gXFx0Zml4dXBfb2JqKG9iaiwgcHJvZywgYmFzZV9maWxlbmFtZSk7XFxuIFxcbiBcXHRpZiAoZW52LmZvcmNlX2NoZWNrcG9pbnRzKVxcbi1cXHRcXHRicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKHByb2csIGJwZl9wcm9ncmFtX19mbGFncyhwcm9nKSB8IEJQRl9GX1RFU1RfU1RBVEVfRlJFUSk7XFxuK1xcdFxcdGJwZl9wcm9ncmFtX19hZGRfZmxhZ3MocHJvZywgQlBGX0ZfVEVTVF9TVEFURV9GUkVRKTtcXG4gXFx0aWYgKGVudi5mb3JjZV9yZWdfaW52YXJpYW50cylcXG4tXFx0XFx0YnBmX3Byb2dyYW1fX3NldF9mbGFncyhwcm9nLCBicGZfcHJvZ3JhbV9fZmxhZ3MocHJvZykgfCBCUEZfRl9URVNUX1JFR19JTlZBUklBTlRTKTtcXG4rXFx0XFx0YnBmX3Byb2dyYW1fX2FkZF9mbGFncyhwcm9nLCBCUEZfRl9URVNUX1JFR19JTlZBUklBTlRTKTtcXG4gXFxuIFxcdG9wdHMubG9nX2J1ZiA9IGJ1ZjtcXG4gXFx0b3B0cy5sb2dfc2l6ZSA9IGJ1Zl9zejtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hkcF9od19tZXRhZGF0YS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hkcF9od19tZXRhZGF0YS5jXFxuaW5kZXggYzU1MDFiM2ZkZjQ4Zi4uYWIzZjVmYzU2ZTg2NyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveGRwX2h3X21ldGFkYXRhLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveGRwX2h3X21ldGFkYXRhLmNcXG5AQCAtODQ1LDcgKzg0NSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuIFxcbiBcXHRwcm9nID0gYnBmX29iamVjdF9fZmluZF9wcm9ncmFtX2J5X25hbWUoYnBmX29iai1cXHUwMDNlb2JqLCBcXFwicnhcXFwiKTtcXG4gXFx0YnBmX3Byb2dyYW1fX3NldF9pZmluZGV4KHByb2csIGlmaW5kZXgpO1xcbi1cXHRicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKHByb2csIGJwZl9wcm9ncmFtX19mbGFncyhwcm9nKSB8IEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWSk7XFxuK1xcdGJwZl9wcm9ncmFtX19hZGRfZmxhZ3MocHJvZywgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTtcXG4gXFxuIFxcdHByaW50ZihcXFwibG9hZCBicGYgcHJvZ3JhbS4uLlxcXFxuXFxcIik7XFxuIFxcdHJldCA9IHhkcF9od19tZXRhZGF0YV9fbG9hZChicGZfb2JqKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTM6MTQ6NTMuNDYyOTQ5MDU4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMzk2NjU0NjA1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIGNvZGUgdW5kZXIgdG9vbHMvIChzcGVjaWZpY2FsbHkgbGliYnBmLCBicGZ0b29sLCBhbmQgc2VsZnRlc3RzKSwgaW50cm9kdWNpbmcgdXNlci1zcGFjZSBoZWxwZXIgZnVuY3Rpb25zIGJwZl9wcm9ncmFtX19hZGRfZmxhZ3MoKSBhbmQgYnBmX3Byb2dyYW1fX2NsZWFyX2ZsYWdzKCkuIE5vIGtlcm5lbC1zcGFjZSBjb2RlICh2bWxpbnV4IG9yIG1vZHVsZXMpIGlzIHRvdWNoZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY2MzYwOTY5OWY2OWU3MWZjNDlhODQxMjZmOTI2YTdiM2Q4ZmUyYmVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDEzOjE0OjQ5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvYnBmL2JwZnRvb2wvcHJvZy5jIGIvdG9vbHMvYnBmL2JwZnRvb2wvcHJvZy5jXG5pbmRleCA4YzJmOTI1NWIzNmQ3Li42YWI5MTFlODIxNTUxIDEwMDY0NFxuLS0tIGEvdG9vbHMvYnBmL2JwZnRvb2wvcHJvZy5jXG4rKysgYi90b29scy9icGYvYnBmdG9vbC9wcm9nLmNcbkBAIC0xNzY5LDcgKzE3NjksNyBAQCBzdGF0aWMgaW50IGxvYWRfd2l0aF9vcHRpb25zKGludCBhcmdjLCBjaGFyICoqYXJndiwgYm9vbCBmaXJzdF9wcm9nX29ubHkpXG4gXHRcdH1cbiBcbiBcdFx0aWYgKHByb2dfdHlwZSA9PSBCUEZfUFJPR19UWVBFX1hEUCBcdTAwMjZcdTAwMjYgeGRwbWV0YV9pZmluZGV4KSB7XG4tXHRcdFx0YnBmX3Byb2dyYW1fX3NldF9mbGFncyhwb3MsIGJwZl9wcm9ncmFtX19mbGFncyhwb3MpIHwgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTtcbitcdFx0XHRicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHBvcywgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTtcbiBcdFx0XHRicGZfcHJvZ3JhbV9fc2V0X2lmaW5kZXgocG9zLCB4ZHBtZXRhX2lmaW5kZXgpO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdGJwZl9wcm9ncmFtX19zZXRfaWZpbmRleChwb3MsIG9mZmxvYWRfaWZpbmRleCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9saWJicGYuYyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbmluZGV4IGMwMzZlOGE5MWVkODguLjIyMWM0ZmUxZmIzMTkgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvYnBmL2xpYmJwZi5jXG4rKysgYi90b29scy9saWIvYnBmL2xpYmJwZi5jXG5AQCAtOTkzOCw2ICs5OTM4LDE2IEBAIGludCBicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgX191MzIgZmxhZ3MpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4raW50IGJwZl9wcm9ncmFtX19hZGRfZmxhZ3Moc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBfX3UzMiBmbGFncylcbit7XG4rXHRyZXR1cm4gYnBmX3Byb2dyYW1fX3NldF9mbGFncyhwcm9nLCBwcm9nLVx1MDAzZXByb2dfZmxhZ3MgfCBmbGFncyk7XG4rfVxuK1xuK2ludCBicGZfcHJvZ3JhbV9fY2xlYXJfZmxhZ3Moc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBfX3UzMiBmbGFncylcbit7XG4rXHRyZXR1cm4gYnBmX3Byb2dyYW1fX3NldF9mbGFncyhwcm9nLCBwcm9nLVx1MDAzZXByb2dfZmxhZ3MgXHUwMDI2IH5mbGFncyk7XG4rfVxuK1xuIF9fdTMyIGJwZl9wcm9ncmFtX19sb2dfbGV2ZWwoY29uc3Qgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nKVxuIHtcbiBcdHJldHVybiBwcm9nLVx1MDAzZWxvZ19sZXZlbDtcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5oIGIvdG9vbHMvbGliL2JwZi9saWJicGYuaFxuaW5kZXggYjk2NWFkNTcxNTQwMy4uMzkzMmJmOWNiNDkwMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcbisrKyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcbkBAIC0xMDExLDYgKzEwMTEsMTIgQEAgYnBmX3Byb2dyYW1fX3NldF9leHBlY3RlZF9hdHRhY2hfdHlwZShzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csXG4gTElCQlBGX0FQSSBfX3UzMiBicGZfcHJvZ3JhbV9fZmxhZ3MoY29uc3Qgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nKTtcbiBMSUJCUEZfQVBJIGludCBicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgX191MzIgZmxhZ3MpO1xuIFxuKy8qIENvbnZlbmllbmNlIGhlbHBlcnMgdG8gbm9uLWRlc3RydWN0aXZlbHkgYWRkIG9yIGNsZWFyIHRoZSBzcGVjaWZpZWQgZmxhZ3NcbisgKiBpbnN0ZWFkIG9mIGNsb2JiZXJpbmcgdGhlbSBhcyBicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKCkgZG9lcy5cbisgKi9cbitMSUJCUEZfQVBJIGludCBicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgX191MzIgZmxhZ3MpO1xuK0xJQkJQRl9BUEkgaW50IGJwZl9wcm9ncmFtX19jbGVhcl9mbGFncyhzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIF9fdTMyIGZsYWdzKTtcbitcbiAvKiBQZXItcHJvZ3JhbSBsb2cgbGV2ZWwgYW5kIGxvZyBidWZmZXIgZ2V0dGVycy9zZXR0ZXJzLlxuICAqIFNlZSBicGZfb2JqZWN0X29wZW5fb3B0cyBjb21tZW50cyByZWdhcmRpbmcgbG9nX2xldmVsIGFuZCBsb2dfYnVmXG4gICogaW50ZXJhY3Rpb25zLlxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLm1hcCBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLm1hcFxuaW5kZXggMDhhYjJlYTg4MWZiNi4uYTgxMWExYjNhMDg1NyAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLm1hcFxuKysrIGIvdG9vbHMvbGliL2JwZi9saWJicGYubWFwXG5AQCAtNDU4LDcgKzQ1OCw5IEBAIExJQkJQRl8xLjcuMCB7XG4gXG4gTElCQlBGXzEuOC4wIHtcbiBcdGdsb2JhbDpcbitcdFx0YnBmX3Byb2dyYW1fX2FkZF9mbGFncztcbiBcdFx0YnBmX3Byb2dyYW1fX2F0dGFjaF90cmFjaW5nX211bHRpO1xuK1x0XHRicGZfcHJvZ3JhbV9fY2xlYXJfZmxhZ3M7XG4gXHRcdGJwZl9wcm9ncmFtX19jbG9uZTtcbiBcdFx0YnRmX19maW5kX2J5X25hbWVfa2luZF9vd247XG4gXHRcdGJ0Zl9fbmV3X2VtcHR5X29wdHM7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXR0YWNoX3Byb2JlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hdHRhY2hfcHJvYmUuY1xuaW5kZXggN2RhZGI5MGU3YjY4OS4uNDExMzZlMWM3NzUyZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2F0dGFjaF9wcm9iZS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hdHRhY2hfcHJvYmUuY1xuQEAgLTU0Myw5ICs1NDMsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2twcm9iZV9zbGVlcGFibGUodm9pZClcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Lyogc2xlZXBhYmxlIGtwcm9iZSB0ZXN0IGNhc2UgbmVlZHMgZmxhZ3Mgc2V0IGJlZm9yZSBsb2FkaW5nICovXG4tXHRpZiAoIUFTU0VSVF9PSyhicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKFxuLVx0XHRcdCAgICAgICBza2VsLVx1MDAzZXByb2dzLmhhbmRsZV9rcHJvYmVfc2xlZXBhYmxlLFxuLVx0XHRcdCAgICAgICBicGZfcHJvZ3JhbV9fZmxhZ3Moc2tlbC1cdTAwM2Vwcm9ncy5oYW5kbGVfa3Byb2JlX3NsZWVwYWJsZSkgfCBCUEZfRl9TTEVFUEFCTEUpLFxuK1x0aWYgKCFBU1NFUlRfT0soYnBmX3Byb2dyYW1fX2FkZF9mbGFncyhza2VsLVx1MDAzZXByb2dzLmhhbmRsZV9rcHJvYmVfc2xlZXBhYmxlLCBCUEZfRl9TTEVFUEFCTEUpLFxuIFx0XHQgICAgICAgXCJrcHJvYmVfc2xlZXBhYmxlX2ZsYWdzXCIpKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3ZlcmlmX3NjYWxlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfdmVyaWZfc2NhbGUuY1xuaW5kZXggNjUyMzA3YTFiMjJlNy4uOTAyYTcwZDVhZmViNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl92ZXJpZl9zY2FsZS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfdmVyaWZfc2NhbGUuY1xuQEAgLTM1LDcgKzM1LDcgQEAgc3RhdGljIGludCBjaGVja19sb2FkKGNvbnN0IGNoYXIgKmZpbGUsIGVudW0gYnBmX3Byb2dfdHlwZSB0eXBlKVxuIFx0fVxuIFxuIFx0YnBmX3Byb2dyYW1fX3NldF90eXBlKHByb2csIHR5cGUpO1xuLVx0YnBmX3Byb2dyYW1fX3NldF9mbGFncyhwcm9nLCBicGZfcHJvZ3JhbV9fZmxhZ3MocHJvZykgfCB0ZXN0aW5nX3Byb2dfZmxhZ3MoKSk7XG4rXHRicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHByb2csIHRlc3RpbmdfcHJvZ19mbGFncygpKTtcbiBcdGJwZl9wcm9ncmFtX19zZXRfbG9nX2xldmVsKHByb2csIDQgfCBleHRyYV9wcm9nX2xvYWRfbG9nX2ZsYWdzKTtcbiBcbiBcdGVyciA9IGJwZl9vYmplY3RfX2xvYWQob2JqKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rZXJuZWxfZmxhZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva2VybmVsX2ZsYWcuY1xuaW5kZXggMjVlYjU5ZjQ2MGFiZS4uNzJjMGVmOGRhNDA5ZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tlcm5lbF9mbGFnLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tlcm5lbF9mbGFnLmNcbkBAIC0xMCwxNSArMTAsMzEgQEAgdm9pZCB0ZXN0X2tlcm5lbF9mbGFnKHZvaWQpXG4gXHRzdHJ1Y3QgdGVzdF9rZXJuZWxfZmxhZyAqbHNtX3NrZWw7XG4gXHRzdHJ1Y3Qga2Z1bmNfY2FsbF90ZXN0ICpza2VsID0gTlVMTDtcbiBcdHN0cnVjdCBrZnVuY19jYWxsX3Rlc3RfbHNrZWwgKmxza2VsID0gTlVMTDtcbitcdHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZztcbitcdF9fdTMyIGZsYWdzO1xuIFx0aW50IHJldDtcbiBcbi1cdGxzbV9za2VsID0gdGVzdF9rZXJuZWxfZmxhZ19fb3Blbl9hbmRfbG9hZCgpO1xuK1x0bHNtX3NrZWwgPSB0ZXN0X2tlcm5lbF9mbGFnX19vcGVuKCk7XG4gXHRpZiAoIUFTU0VSVF9PS19QVFIobHNtX3NrZWwsIFwibHNtX3NrZWxcIikpXG4gXHRcdHJldHVybjtcbiBcbi1cdEFTU0VSVF9FUShicGZfcHJvZ3JhbV9fZmxhZ3MobHNtX3NrZWwtXHUwMDNlcHJvZ3MuYnBmKSBcdTAwMjYgQlBGX0ZfU0xFRVBBQkxFLFxuK1x0cHJvZyA9IGxzbV9za2VsLVx1MDAzZXByb2dzLmJwZjtcbitcdGZsYWdzID0gYnBmX3Byb2dyYW1fX2ZsYWdzKHByb2cpO1xuK1x0QVNTRVJUX0VRKGZsYWdzIFx1MDAyNiBCUEZfRl9TTEVFUEFCTEUsXG4gXHRcdCAgQlBGX0ZfU0xFRVBBQkxFLCBcInNsZWVwYWJsZSBpbiBwcm9ncmFtIGZsYWdzXCIpO1xuIFxuK1x0cmV0ID0gYnBmX3Byb2dyYW1fX2FkZF9mbGFncyhwcm9nLCBCUEZfRl9BTllfQUxJR05NRU5UKTtcbitcdEFTU0VSVF9PSyhyZXQsIFwiYnBmX3Byb2dyYW1fX2FkZF9mbGFncyByZXRcIik7XG4rXHRBU1NFUlRfRVEoYnBmX3Byb2dyYW1fX2ZsYWdzKHByb2cpLCBmbGFncyB8IEJQRl9GX0FOWV9BTElHTk1FTlQsXG4rXHRcdCAgXCJicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzIHZhbHVlXCIpO1xuK1xuK1x0cmV0ID0gYnBmX3Byb2dyYW1fX2NsZWFyX2ZsYWdzKHByb2csIEJQRl9GX0FOWV9BTElHTk1FTlQpO1xuK1x0QVNTRVJUX09LKHJldCwgXCJicGZfcHJvZ3JhbV9fY2xlYXJfZmxhZ3MgcmV0XCIpO1xuK1x0QVNTRVJUX0VRKGJwZl9wcm9ncmFtX19mbGFncyhwcm9nKSwgZmxhZ3MsIFwiYnBmX3Byb2dyYW1fX2NsZWFyX2ZsYWdzIHZhbHVlXCIpO1xuK1xuK1x0cmV0ID0gdGVzdF9rZXJuZWxfZmxhZ19fbG9hZChsc21fc2tlbCk7XG4rXHRBU1NFUlRfT0socmV0LCBcInRlc3Rfa2VybmVsX2ZsYWdfX2xvYWRcIik7XG4rXG4gXHRsc21fc2tlbC1cdTAwM2Vic3MtXHUwMDNlbW9uaXRvcmVkX3RpZCA9IHN5c19nZXR0aWQoKTtcbiBcbiBcdHJldCA9IHRlc3Rfa2VybmVsX2ZsYWdfX2F0dGFjaChsc21fc2tlbCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3Byb2JlX211bHRpX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2twcm9iZV9tdWx0aV90ZXN0LmNcbmluZGV4IGVkM2ZkMGE4OGRhYjYuLjY1MTEyM2NkODYwMmQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rcHJvYmVfbXVsdGlfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rcHJvYmVfbXVsdGlfdGVzdC5jXG5AQCAtMzYxLDggKzM2MSw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfYXR0YWNoX2FwaV9mYWlscyh2b2lkKVxuIFxuIFx0c2xfc2tlbC1cdTAwM2Vic3MtXHUwMDNldXNlcl9wdHIgPSBzbF9za2VsO1xuIFxuLVx0ZXJyID0gYnBmX3Byb2dyYW1fX3NldF9mbGFncyhzbF9za2VsLVx1MDAzZXByb2dzLmhhbmRsZV9rcHJvYmVfbXVsdGlfc2xlZXBhYmxlLFxuLVx0XHRcdFx0ICAgICBicGZfcHJvZ3JhbV9fZmxhZ3Moc2xfc2tlbC1cdTAwM2Vwcm9ncy5oYW5kbGVfa3Byb2JlX211bHRpX3NsZWVwYWJsZSkgfCBCUEZfRl9TTEVFUEFCTEUpO1xuK1x0ZXJyID0gYnBmX3Byb2dyYW1fX2FkZF9mbGFncyhzbF9za2VsLVx1MDAzZXByb2dzLmhhbmRsZV9rcHJvYmVfbXVsdGlfc2xlZXBhYmxlLCBCUEZfRl9TTEVFUEFCTEUpO1xuIFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcInNsZWVwX3NrZWxfc2V0X2ZsYWdzXCIpKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX21ldGFkYXRhLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfbWV0YWRhdGEuY1xuaW5kZXggMDQ3ZGZkYzMyMmEyZi4uM2FiOTYzNDU4OTAzZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9tZXRhZGF0YS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfbWV0YWRhdGEuY1xuQEAgLTQwOCwxNCArNDA4LDE0IEBAIHZvaWQgdGVzdF94ZHBfbWV0YWRhdGEodm9pZClcbiBcbiBcdHByb2cgPSBicGZfb2JqZWN0X19maW5kX3Byb2dyYW1fYnlfbmFtZShicGZfb2JqLVx1MDAzZW9iaiwgXCJyeFwiKTtcbiBcdGJwZl9wcm9ncmFtX19zZXRfaWZpbmRleChwcm9nLCByeF9pZmluZGV4KTtcbi1cdGJwZl9wcm9ncmFtX19zZXRfZmxhZ3MocHJvZywgYnBmX3Byb2dyYW1fX2ZsYWdzKHByb2cpIHwgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTtcbitcdGJwZl9wcm9ncmFtX19hZGRfZmxhZ3MocHJvZywgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTtcbiBcbiBcdC8qIE1ha2Ugc3VyZSB3ZSBjYW4gbG9hZCBhIGRldi1ib3VuZCBwcm9ncmFtIHRoYXQgcGVyZm9ybXNcbiBcdCAqIFhEUF9SRURJUkVDVCBpbnRvIGEgZGV2bWFwLlxuIFx0ICovXG4gXHRuZXdfcHJvZyA9IGJwZl9vYmplY3RfX2ZpbmRfcHJvZ3JhbV9ieV9uYW1lKGJwZl9vYmotXHUwMDNlb2JqLCBcInJlZGlyZWN0XCIpO1xuIFx0YnBmX3Byb2dyYW1fX3NldF9pZmluZGV4KG5ld19wcm9nLCByeF9pZmluZGV4KTtcbi1cdGJwZl9wcm9ncmFtX19zZXRfZmxhZ3MobmV3X3Byb2csIGJwZl9wcm9ncmFtX19mbGFncyhuZXdfcHJvZykgfCBCUEZfRl9YRFBfREVWX0JPVU5EX09OTFkpO1xuK1x0YnBmX3Byb2dyYW1fX2FkZF9mbGFncyhuZXdfcHJvZywgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTtcbiBcbiBcdGlmICghQVNTRVJUX09LKHhkcF9tZXRhZGF0YV9fbG9hZChicGZfb2JqKSwgXCJsb2FkIHNrZWxldG9uXCIpKVxuIFx0XHRnb3RvIG91dDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jXG5pbmRleCA3OTRhN2RmYjA1Nzk2Li4yODcyNGRlMDYzMjIwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jXG5AQCAtNzQ4LDcgKzc0OCw3IEBAIHN0YXRpYyB2b2lkIHByZXBhcmVfY2FzZShzdHJ1Y3QgdGVzdF9sb2FkZXIgKnRlc3RlcixcbiBcdFx0XHQgc3RydWN0IGJwZl9vYmplY3QgKm9iaixcbiBcdFx0XHQgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nKVxuIHtcbi1cdGludCBtaW5fbG9nX2xldmVsID0gMCwgcHJvZ19mbGFncztcbitcdGludCBtaW5fbG9nX2xldmVsID0gMDtcbiBcbiBcdGlmIChlbnYudmVyYm9zaXR5IFx1MDAzZSBWRVJCT1NFX05PTkUpXG4gXHRcdG1pbl9sb2dfbGV2ZWwgPSAxO1xuQEAgLTc2Niw4ICs3NjYsNyBAQCBzdGF0aWMgdm9pZCBwcmVwYXJlX2Nhc2Uoc3RydWN0IHRlc3RfbG9hZGVyICp0ZXN0ZXIsXG4gXHRlbHNlXG4gXHRcdGJwZl9wcm9ncmFtX19zZXRfbG9nX2xldmVsKHByb2csIHNwZWMtXHUwMDNlbG9nX2xldmVsKTtcbiBcbi1cdHByb2dfZmxhZ3MgPSBicGZfcHJvZ3JhbV9fZmxhZ3MocHJvZyk7XG4tXHRicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKHByb2csIHByb2dfZmxhZ3MgfCBzcGVjLVx1MDAzZXByb2dfZmxhZ3MpO1xuK1x0YnBmX3Byb2dyYW1fX2FkZF9mbGFncyhwcm9nLCBzcGVjLVx1MDAzZXByb2dfZmxhZ3MpO1xuIFxuIFx0dGVzdGVyLVx1MDAzZWxvZ19idWZbMF0gPSAnXFwwJztcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5jXG5pbmRleCAzZjAzNzk0OWU5Nzg5Li5kMWQ2MDQ1MWM1YmNjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmNcbkBAIC0yOTIsNyArMjkyLDYgQEAgaW50IGJwZl9wcm9nX3Rlc3RfbG9hZChjb25zdCBjaGFyICpmaWxlLCBlbnVtIGJwZl9wcm9nX3R5cGUgdHlwZSxcbiBcdCk7XG4gXHRzdHJ1Y3QgYnBmX29iamVjdCAqb2JqO1xuIFx0c3RydWN0IGJwZl9wcm9ncmFtICpwcm9nO1xuLVx0X191MzIgZmxhZ3M7XG4gXHRpbnQgZXJyO1xuIFxuIFx0b2JqID0gYnBmX29iamVjdF9fb3Blbl9maWxlKGZpbGUsIFx1MDAyNm9wdHMpO1xuQEAgLTMwOCw4ICszMDcsNyBAQCBpbnQgYnBmX3Byb2dfdGVzdF9sb2FkKGNvbnN0IGNoYXIgKmZpbGUsIGVudW0gYnBmX3Byb2dfdHlwZSB0eXBlLFxuIFx0aWYgKHR5cGUgIT0gQlBGX1BST0dfVFlQRV9VTlNQRUMgXHUwMDI2XHUwMDI2IGJwZl9wcm9ncmFtX190eXBlKHByb2cpICE9IHR5cGUpXG4gXHRcdGJwZl9wcm9ncmFtX19zZXRfdHlwZShwcm9nLCB0eXBlKTtcbiBcbi1cdGZsYWdzID0gYnBmX3Byb2dyYW1fX2ZsYWdzKHByb2cpIHwgdGVzdGluZ19wcm9nX2ZsYWdzKCk7XG4tXHRicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKHByb2csIGZsYWdzKTtcbitcdGJwZl9wcm9ncmFtX19hZGRfZmxhZ3MocHJvZywgdGVzdGluZ19wcm9nX2ZsYWdzKCkpO1xuIFxuIFx0ZXJyID0gYnBmX29iamVjdF9fbG9hZChvYmopO1xuIFx0aWYgKGVycilcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaXN0YXQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpc3RhdC5jXG5pbmRleCBlNzA3NDFjNmI5YjdjLi45Y2ZjOWI0YjQxYzEyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3ZlcmlzdGF0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpc3RhdC5jXG5AQCAtMTcyMiw5ICsxNzIyLDkgQEAgc3RhdGljIGludCBwcm9jZXNzX3Byb2coY29uc3QgY2hhciAqZmlsZW5hbWUsIHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZcbiBcdGZpeHVwX29iaihvYmosIHByb2csIGJhc2VfZmlsZW5hbWUpO1xuIFxuIFx0aWYgKGVudi5mb3JjZV9jaGVja3BvaW50cylcbi1cdFx0YnBmX3Byb2dyYW1fX3NldF9mbGFncyhwcm9nLCBicGZfcHJvZ3JhbV9fZmxhZ3MocHJvZykgfCBCUEZfRl9URVNUX1NUQVRFX0ZSRVEpO1xuK1x0XHRicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHByb2csIEJQRl9GX1RFU1RfU1RBVEVfRlJFUSk7XG4gXHRpZiAoZW52LmZvcmNlX3JlZ19pbnZhcmlhbnRzKVxuLVx0XHRicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKHByb2csIGJwZl9wcm9ncmFtX19mbGFncyhwcm9nKSB8IEJQRl9GX1RFU1RfUkVHX0lOVkFSSUFOVFMpO1xuK1x0XHRicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHByb2csIEJQRl9GX1RFU1RfUkVHX0lOVkFSSUFOVFMpO1xuIFxuIFx0b3B0cy5sb2dfYnVmID0gYnVmO1xuIFx0b3B0cy5sb2dfc2l6ZSA9IGJ1Zl9zejtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveGRwX2h3X21ldGFkYXRhLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveGRwX2h3X21ldGFkYXRhLmNcbmluZGV4IGM1NTAxYjNmZGY0OGYuLmFiM2Y1ZmM1NmU4NjcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveGRwX2h3X21ldGFkYXRhLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94ZHBfaHdfbWV0YWRhdGEuY1xuQEAgLTg0NSw3ICs4NDUsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFxuIFx0cHJvZyA9IGJwZl9vYmplY3RfX2ZpbmRfcHJvZ3JhbV9ieV9uYW1lKGJwZl9vYmotXHUwMDNlb2JqLCBcInJ4XCIpO1xuIFx0YnBmX3Byb2dyYW1fX3NldF9pZmluZGV4KHByb2csIGlmaW5kZXgpO1xuLVx0YnBmX3Byb2dyYW1fX3NldF9mbGFncyhwcm9nLCBicGZfcHJvZ3JhbV9fZmxhZ3MocHJvZykgfCBCUEZfRl9YRFBfREVWX0JPVU5EX09OTFkpO1xuK1x0YnBmX3Byb2dyYW1fX2FkZF9mbGFncyhwcm9nLCBCUEZfRl9YRFBfREVWX0JPVU5EX09OTFkpO1xuIFxuIFx0cHJpbnRmKFwibG9hZCBicGYgcHJvZ3JhbS4uLlxcblwiKTtcbiBcdHJldCA9IHhkcF9od19tZXRhZGF0YV9fbG9hZChicGZfb2JqKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEzOjE0OjUzLjQ2Mjk1MDIzOFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc4OTQ1ODgwNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXM6IFdvcnRoRnV6emluZz1mYWxzZSBBc3Nlc3NtZW50KipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgZmlsZSBsaXN0OiBgdG9vbHMvYnBmL2JwZnRvb2wvcHJvZy5jYCwgYHRvb2xzL2xpYi9icGYvbGliYnBmLmNgLCBgdG9vbHMvbGliL2JwZi9saWJicGYuaGAsIGV0Yy4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIGV2ZXJ5dGhpbmcgaXMgY29udGFpbmVkIHdpdGhpbiB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5IOKAkyBzcGVjaWZpY2FsbHkgYHRvb2xzL2JwZi9gLCBgdG9vbHMvbGliL2JwZi9gLCBhbmQgdGhlIGV2ZXItcHJlc2VudCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYC4gVGhhdCBzY3JlYW1zIFwidXNlci1zcGFjZVwiIHRvIG1lLCBidXQgSSBuZWVkIHRvIGJlIG1ldGhvZGljYWwuXG5cbk5vdywgbGV0J3MgYXBwbHkgdGhlIFdvcnRoRnV6emluZyBjcml0ZXJpYS4gU2VjdGlvbiAyIGlzIGNsZWFyOiB3ZSBjYW4gY29uZmlkZW50bHkgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgICpvbmx5KiBpZiB0aGUgY29kZSBjaGFuZ2VzIGZhbGwgbmVhdGx5IGludG8gYSBzcGVjaWZpYyBzZXQgb2YgbmVnYXRpdmUgY3JpdGVyaWEuIEknbSBmb2N1c2luZyBvbiB0aGUgXCJOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzXCIgY2xhdXNlLiBXZSdyZSBsb29raW5nIGZvciBtb2RpZmljYXRpb25zIGluIHRoaW5ncyBsaWtlIGRvY3VtZW50YXRpb24sIGNvbW1lbnRzLCB1c2VyLXNwYWNlLCBzZWxmLXRlc3RzLCBzY3JpcHRzLCBhbmQgc2FtcGxlcyB0aGF0ICpkb24ndCogYWZmZWN0IHRoZSBjb3JlIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3IgaXRzIG1vZHVsZXMuXG5cbkxvb2tpbmcgYXQgdGhlIGZpbGVzLCBpdCdzIHByZXR0eSBjbGVhcjogYnBmdG9vbCwgbGliYnBmLCBhbmQgYnBmIHNlbGZ0ZXN0cyBhcmUgcHJlY2lzZWx5IHRoZSBraW5kcyBvZiB0b29scyBhbmQgdGVzdHMgdGhhdCBmYWxsIG91dHNpZGUgb2YgY29yZSBrZXJuZWwgc3BhY2UuIFRoZXkgYXJlIGFsbCBpbiBgdG9vbHMvYCBhbmQgbm8ga2VybmVsIGNvZGUgaXMgYmVpbmcgbW9kaWZpZWQuIEl0J3Mgc2FmZSB0byBzYXkgdGhlcmUgaXMgbm8gaW1wYWN0IG9uIHZtbGludXggb3IgbW9kdWxlcy5cblxuQmVmb3JlIEkgZ2l2ZSBpdCB0aGUgZ3JlZW4gbGlnaHQsIEkgd2lsbCBjaGVjayB0aGUgSEVBRCB0byB2ZXJpZnkgdGhlcmUgd2VyZSBubyBhZGRpdGlvbmFsIG1vZGlmaWNhdGlvbnMsIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjY0LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTA5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTM6MTU6MDEuMzU3NTQwODI0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NjAwNzMwNzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3Byb2dyYW1fX2FkZF9mbGFnc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJ0b29scy9icGYvYnBmdG9vbC9wcm9nLmM9MTU2Nz1zdGF0aWMgaW50IGxvYWRfd2l0aF9vcHRpb25zKGludCBhcmdjLCBjaGFyICoqYXJndiwgYm9vbCBmaXJzdF9wcm9nX29ubHkpXFxuLS1cXG50b29scy9icGYvYnBmdG9vbC9wcm9nLmMtMTc3MS1cXHRcXHRpZiAocHJvZ190eXBlID09IEJQRl9QUk9HX1RZUEVfWERQIFxcdTAwMjZcXHUwMDI2IHhkcG1ldGFfaWZpbmRleCkge1xcbnRvb2xzL2JwZi9icGZ0b29sL3Byb2cuYzoxNzcyOlxcdFxcdFxcdGJwZl9wcm9ncmFtX19hZGRfZmxhZ3MocG9zLCBCUEZfRl9YRFBfREVWX0JPVU5EX09OTFkpO1xcbnRvb2xzL2JwZi9icGZ0b29sL3Byb2cuYy0xNzczLVxcdFxcdFxcdGJwZl9wcm9ncmFtX19zZXRfaWZpbmRleChwb3MsIHhkcG1ldGFfaWZpbmRleCk7XFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jPTk5MzI9aW50IGJwZl9wcm9ncmFtX19zZXRfZmxhZ3Moc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBfX3UzMiBmbGFncylcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtOTk0MC1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jOjk5NDE6aW50IGJwZl9wcm9ncmFtX19hZGRfZmxhZ3Moc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBfX3UzMiBmbGFncylcXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTk5NDIte1xcbi0tXFxudG9vbHMvbGliL2JwZi9saWJicGYuaD0xMDEyPUxJQkJQRl9BUEkgaW50IGJwZl9wcm9ncmFtX19zZXRfZmxhZ3Moc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBfX3UzMiBmbGFncyk7XFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5oLTEwMTYtICovXFxudG9vbHMvbGliL2JwZi9saWJicGYuaDoxMDE3OkxJQkJQRl9BUEkgaW50IGJwZl9wcm9ncmFtX19hZGRfZmxhZ3Moc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBfX3UzMiBmbGFncyk7XFxudG9vbHMvbGliL2JwZi9saWJicGYuaC0xMDE4LUxJQkJQRl9BUEkgaW50IGJwZl9wcm9ncmFtX19jbGVhcl9mbGFncyhzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIF9fdTMyIGZsYWdzKTtcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLm1hcD00NTk9TElCQlBGXzEuOC4wIHtcXG50b29scy9saWIvYnBmL2xpYmJwZi5tYXAtNDYwLVxcdGdsb2JhbDpcXG50b29scy9saWIvYnBmL2xpYmJwZi5tYXA6NDYxOlxcdFxcdGJwZl9wcm9ncmFtX19hZGRfZmxhZ3M7XFxudG9vbHMvbGliL2JwZi9saWJicGYubWFwLTQ2Mi1cXHRcXHRicGZfcHJvZ3JhbV9fYXR0YWNoX3RyYWNpbmdfbXVsdGk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hdHRhY2hfcHJvYmUuYz01Mzc9c3RhdGljIHZvaWQgdGVzdF9rcHJvYmVfc2xlZXBhYmxlKHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hdHRhY2hfcHJvYmUuYy01NDUtXFx0Lyogc2xlZXBhYmxlIGtwcm9iZSB0ZXN0IGNhc2UgbmVlZHMgZmxhZ3Mgc2V0IGJlZm9yZSBsb2FkaW5nICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXR0YWNoX3Byb2JlLmM6NTQ2OlxcdGlmICghQVNTRVJUX09LKGJwZl9wcm9ncmFtX19hZGRfZmxhZ3Moc2tlbC1cXHUwMDNlcHJvZ3MuaGFuZGxlX2twcm9iZV9zbGVlcGFibGUsIEJQRl9GX1NMRUVQQUJMRSksXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXR0YWNoX3Byb2JlLmMtNTQ3LVxcdFxcdCAgICAgICBcXFwia3Byb2JlX3NsZWVwYWJsZV9mbGFnc1xcXCIpKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3ZlcmlmX3NjYWxlLmM9MjA9c3RhdGljIGludCBjaGVja19sb2FkKGNvbnN0IGNoYXIgKmZpbGUsIGVudW0gYnBmX3Byb2dfdHlwZSB0eXBlKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3ZlcmlmX3NjYWxlLmMtMzctXFx0YnBmX3Byb2dyYW1fX3NldF90eXBlKHByb2csIHR5cGUpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl92ZXJpZl9zY2FsZS5jOjM4OlxcdGJwZl9wcm9ncmFtX19hZGRfZmxhZ3MocHJvZywgdGVzdGluZ19wcm9nX2ZsYWdzKCkpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl92ZXJpZl9zY2FsZS5jLTM5LVxcdGJwZl9wcm9ncmFtX19zZXRfbG9nX2xldmVsKHByb2csIDQgfCBleHRyYV9wcm9nX2xvYWRfbG9nX2ZsYWdzKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tlcm5lbF9mbGFnLmM9OD12b2lkIHRlc3Rfa2VybmVsX2ZsYWcodm9pZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tlcm5lbF9mbGFnLmMtMjUtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva2VybmVsX2ZsYWcuYzoyNjpcXHRyZXQgPSBicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHByb2csIEJQRl9GX0FOWV9BTElHTk1FTlQpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tlcm5lbF9mbGFnLmM6Mjc6XFx0QVNTRVJUX09LKHJldCwgXFxcImJwZl9wcm9ncmFtX19hZGRfZmxhZ3MgcmV0XFxcIik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva2VybmVsX2ZsYWcuYy0yOC1cXHRBU1NFUlRfRVEoYnBmX3Byb2dyYW1fX2ZsYWdzKHByb2cpLCBmbGFncyB8IEJQRl9GX0FOWV9BTElHTk1FTlQsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva2VybmVsX2ZsYWcuYzoyOTpcXHRcXHQgIFxcXCJicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzIHZhbHVlXFxcIik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva2VybmVsX2ZsYWcuYy0zMC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2twcm9iZV9tdWx0aV90ZXN0LmM9MjIxPXN0YXRpYyB2b2lkIHRlc3RfYXR0YWNoX2FwaV9mYWlscyh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3Byb2JlX211bHRpX3Rlc3QuYy0zNjMtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3Byb2JlX211bHRpX3Rlc3QuYzozNjQ6XFx0ZXJyID0gYnBmX3Byb2dyYW1fX2FkZF9mbGFncyhzbF9za2VsLVxcdTAwM2Vwcm9ncy5oYW5kbGVfa3Byb2JlX211bHRpX3NsZWVwYWJsZSwgQlBGX0ZfU0xFRVBBQkxFKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rcHJvYmVfbXVsdGlfdGVzdC5jLTM2NS1cXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJzbGVlcF9za2VsX3NldF9mbGFnc1xcXCIpKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX21ldGFkYXRhLmM9MzQ5PXZvaWQgdGVzdF94ZHBfbWV0YWRhdGEodm9pZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9tZXRhZGF0YS5jLTQxMC1cXHRicGZfcHJvZ3JhbV9fc2V0X2lmaW5kZXgocHJvZywgcnhfaWZpbmRleCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX21ldGFkYXRhLmM6NDExOlxcdGJwZl9wcm9ncmFtX19hZGRfZmxhZ3MocHJvZywgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfbWV0YWRhdGEuYy00MTItXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfbWV0YWRhdGEuYy00MTctXFx0YnBmX3Byb2dyYW1fX3NldF9pZmluZGV4KG5ld19wcm9nLCByeF9pZmluZGV4KTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfbWV0YWRhdGEuYzo0MTg6XFx0YnBmX3Byb2dyYW1fX2FkZF9mbGFncyhuZXdfcHJvZywgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfbWV0YWRhdGEuYy00MTktXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuYz03NDY9c3RhdGljIHZvaWQgcHJlcGFyZV9jYXNlKHN0cnVjdCB0ZXN0X2xvYWRlciAqdGVzdGVyLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmMtNzY4LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jOjc2OTpcXHRicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHByb2csIHNwZWMtXFx1MDAzZXByb2dfZmxhZ3MpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jLTc3MC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuYz0yODc9aW50IGJwZl9wcm9nX3Rlc3RfbG9hZChjb25zdCBjaGFyICpmaWxlLCBlbnVtIGJwZl9wcm9nX3R5cGUgdHlwZSxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuYy0zMDktXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5jOjMxMDpcXHRicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKHByb2csIHRlc3RpbmdfcHJvZ19mbGFncygpKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmMtMzExLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3ZlcmlzdGF0LmM9MTY3Nj1zdGF0aWMgaW50IHByb2Nlc3NfcHJvZyhjb25zdCBjaGFyICpmaWxlbmFtZSwgc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3ZlcmlzdGF0LmMtMTcyNC1cXHRpZiAoZW52LmZvcmNlX2NoZWNrcG9pbnRzKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpc3RhdC5jOjE3MjU6XFx0XFx0YnBmX3Byb2dyYW1fX2FkZF9mbGFncyhwcm9nLCBCUEZfRl9URVNUX1NUQVRFX0ZSRVEpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpc3RhdC5jLTE3MjYtXFx0aWYgKGVudi5mb3JjZV9yZWdfaW52YXJpYW50cylcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaXN0YXQuYzoxNzI3OlxcdFxcdGJwZl9wcm9ncmFtX19hZGRfZmxhZ3MocHJvZywgQlBGX0ZfVEVTVF9SRUdfSU5WQVJJQU5UUyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3ZlcmlzdGF0LmMtMTcyOC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94ZHBfaHdfbWV0YWRhdGEuYz03MzU9aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94ZHBfaHdfbWV0YWRhdGEuYy04NDctXFx0YnBmX3Byb2dyYW1fX3NldF9pZmluZGV4KHByb2csIGlmaW5kZXgpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94ZHBfaHdfbWV0YWRhdGEuYzo4NDg6XFx0YnBmX3Byb2dyYW1fX2FkZF9mbGFncyhwcm9nLCBCUEZfRl9YRFBfREVWX0JPVU5EX09OTFkpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94ZHBfaHdfbWV0YWRhdGEuYy04NDktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEzOjE1OjAzLjAxNzYyMTIyOFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0MTE4NTEwMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBJbXBhY3QqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHRha2VuIGEgbG9vayBhdCB0aGlzIHBhdGNoLCBhbmQgaXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGUgc2NvcGUgaXMgZW50aXJlbHkgY29udGFpbmVkIHdpdGhpbiB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5LCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYHRvb2xzL2xpYi9icGYvYCwgYHRvb2xzL2JwZi9icGZ0b29sL2AsIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2AuIFRoaXMgbWVhbnMgd2UncmUgZGVhbGluZyB3aXRoIHVzZXItc3BhY2UgY29tcG9uZW50cyBoZXJlOiBsaWJyYXJpZXMsIHRvb2xzLCBhbmQgdGhlIGFzc29jaWF0ZWQgdGVzdHMuIENydWNpYWxseSwgbm9uZSBvZiB0aGlzIHRvdWNoZXMgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAoYHZtbGludXhgKSBvciBhbnkga2VybmVsIG1vZHVsZXMuXG5cbkNvbnNlcXVlbnRseSwgZnJvbSBteSBwZXJzcGVjdGl2ZSwgdGhpcyBkb2Vzbid0IHdhcnJhbnQgYW55IHNwZWNpYWwgZnV6emluZyBjb25zaWRlcmF0aW9ucyDigJMgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGBmYWxzZWAuIFRoZXJlIGFyZSBubyBzcGVjaWZpYyBzeW1ib2xzIEkgbmVlZCB0byBmb2N1cyBvbiwgc28gdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QgaXMgYXBwcm9wcmlhdGVseSBlbXB0eS4gTGlrZXdpc2UsIHNpbmNlIHRoaXMgaXMgc3RyaWN0bHkgdXNlci1zcGFjZSwgdGhlcmUgYXJlIG5vIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgSSBuZWVkIHRvIGVuYWJsZTsgdGhlIGBFbmFibGVDb25maWdzYCBsaXN0IGlzIGVtcHR5LlxuXG5NeSByZWFzb25pbmcgaXMgc2ltcGxlOiB0aGUgY2hhbmdlcyBhcmUgbGltaXRlZCB0byB1c2VyLXNwYWNlIHRvb2xpbmcgYW5kIHRlc3QgZmlsZXMuIFNwZWNpZmljYWxseSwgd2UncmUgc2VlaW5nIHRoZSBhZGRpdGlvbiBvZiBoZWxwZXIgZnVuY3Rpb25zLCBgYnBmX3Byb2dyYW1fX2FkZF9mbGFnc2AgYW5kIGBicGZfcHJvZ3JhbV9fY2xlYXJfZmxhZ3NgLCB3aXRoaW4gbGliYnBmIGFuZCB1cGRhdGVzIHRvIHRoZSBicGZ0b29sIGFuZCBzZWxmdGVzdHMgdG8gdXRpbGl6ZSB0aGVzZSBmdW5jdGlvbnMuIFRoaXMgaXMgY29udGFpbmVkIHdpdGhpbiB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5LCBzbyBpdCB3b24ndCBiZSBpbmZsdWVuY2luZyBhbnkgY29yZSBrZXJuZWwgYmVoYXZpb3IuXG5cbkknbSBjb25maWRlbnQgaW4gdGhlc2UgY29uY2x1c2lvbnMsIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1MzYsIk91dHB1dFRva2VucyI6OTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTM6MTU6MDcuNDI5NDc0MDQzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgY29kZSB1bmRlciB0b29scy8gKHNwZWNpZmljYWxseSBsaWJicGYsIGJwZnRvb2wsIGFuZCBzZWxmdGVzdHMpLCBpbnRyb2R1Y2luZyB1c2VyLXNwYWNlIGhlbHBlciBmdW5jdGlvbnMgYnBmX3Byb2dyYW1fX2FkZF9mbGFncygpIGFuZCBicGZfcHJvZ3JhbV9fY2xlYXJfZmxhZ3MoKS4gTm8ga2VybmVsLXNwYWNlIGNvZGUgKHZtbGludXggb3IgbW9kdWxlcykgaXMgdG91Y2hlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBjb2RlIHVuZGVyIHRvb2xzLyAoc3BlY2lmaWNhbGx5IGxpYmJwZiwgYnBmdG9vbCwgYW5kIHNlbGZ0ZXN0cyksIGludHJvZHVjaW5nIHVzZXItc3BhY2UgaGVscGVyIGZ1bmN0aW9ucyBicGZfcHJvZ3JhbV9fYWRkX2ZsYWdzKCkgYW5kIGJwZl9wcm9ncmFtX19jbGVhcl9mbGFncygpLiBObyBrZXJuZWwtc3BhY2UgY29kZSAodm1saW51eCBvciBtb2R1bGVzKSBpcyB0b3VjaGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTM6MTU6MDcuNDI5NDk2NjgzWiIsIlNlcSI6NywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfdc7s[1] Phase: Running StartedAt: 2026-09-04 13:15:19 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfdc7s[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-04 13:15:19 +0000 UTC FinishedAt: 2026-09-04 13:15:23 +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,}