Name: series-workflow2cngk Phase: Failed StartedAt: 2026-07-30 21:42:30 +0000 UTC FinishedAt: 2026-07-30 21:44:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2cngk[0] Phase: Succeeded StartedAt: 2026-07-30 21:42:30 +0000 UTC FinishedAt: 2026-07-30 21:43:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2cngk[0].run-triage Phase: Succeeded StartedAt: 2026-07-30 21:42:30 +0000 UTC FinishedAt: 2026-07-30 21:43:56 +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+CgkJCTx0ZD4yMDI2LzA3LzMwIDIxOjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBLVW5pdCB0ZXN0cyBhbmQgUHl0aG9uIHNlbGZ0ZXN0cyBmb3IgREFNT04gZmlsdGVycyBhbmQgcHJvYmVzLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IGZ1bmN0aW9uYWwga2VybmVsIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIxOjQzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTZkMjFmYjllY2I5Mzc5MTZhOTBlZTE5MmY2OGFjNzE5MmQxYWI3M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDMwIDIxOjQzOjM0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaCBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuaW5kZXggNGE1MzZkNDFjZGIyZC4uNjU3NzQxMGFjZTNkYSAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG5AQCAtMTMwNiw2ICYjNDM7MTMwNiwxMjUgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfdGFyZ2V0X3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0XHRcdCh1bnNpZ25lZCBsb25nW11bMl0pIHt7MywgOH0sIHs4LCAxMH19LCAyKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X2ZpbHRlcl9mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuJiM0MztcdFx0c3RydWN0IGRhbW9uX2ZpbHRlciAqZHN0LCBzdHJ1Y3QgZGFtb25fZmlsdGVyICpzcmMpXG4mIzQzO3tcbiYjNDM7XHRkYW1vbl9jb21taXRfZmlsdGVyKGRzdCwgc3JjKTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVx1MDAzZXR5cGUsIHNyYy1cdTAwM2V0eXBlKTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVx1MDAzZW1hdGNoaW5nLCBzcmMtXHUwMDNlbWF0Y2hpbmcpO1xuJiM0MztcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNlYWxsb3csIHNyYy1cdTAwM2VhbGxvdyk7XG4mIzQzO1x0c3dpdGNoIChzcmMtXHUwMDNldHlwZSkge1xuJiM0MztcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfTUVNQ0c6XG4mIzQzO1x0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVx1MDAzZW1lbWNnX2lkLCBzcmMtXHUwMDNlbWVtY2dfaWQpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfZmlsdGVyKHN0cnVjdCBrdW5pdCAqdGVzdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkYW1vbl9maWx0ZXIgZHN0ID0ge1xuJiM0MztcdFx0LnR5cGUgPSBEQU1PTl9GSUxURVJfVFlQRV9BTk9OLFxuJiM0MztcdFx0Lm1hdGNoaW5nID0gZmFsc2UsXG4mIzQzO1x0XHQuYWxsb3cgPSBmYWxzZSxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRkYW1vbl90ZXN0X2NvbW1pdF9maWx0ZXJfZm9yKHRlc3QsIFx1MDAyNmRzdCxcbiYjNDM7XHRcdFx0XHUwMDI2KHN0cnVjdCBkYW1vbl9maWx0ZXIpe1xuJiM0MztcdFx0XHQudHlwZSA9IERBTU9OX0ZJTFRFUl9UWVBFX0FOT04sXG4mIzQzO1x0XHRcdC5tYXRjaGluZyA9IHRydWUsXG4mIzQzO1x0XHRcdC5hbGxvdyA9IHRydWUsXG4mIzQzO1x0XHRcdH0pO1xuJiM0MztcdGRhbW9uX3Rlc3RfY29tbWl0X2ZpbHRlcl9mb3IodGVzdCwgXHUwMDI2ZHN0LFxuJiM0MztcdFx0XHRcdTAwMjYoc3RydWN0IGRhbW9uX2ZpbHRlcil7XG4mIzQzO1x0XHRcdC50eXBlID0gREFNT05fRklMVEVSX1RZUEVfTUVNQ0csXG4mIzQzO1x0XHRcdC5tYXRjaGluZyA9IGZhbHNlLFxuJiM0MztcdFx0XHQuYWxsb3cgPSBmYWxzZSxcbiYjNDM7XHRcdFx0Lm1lbWNnX2lkID0gMTIzLFxuJiM0MztcdFx0XHR9KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3Rlc3RfaGVscF9zZXR1cF9wcm9iZXModW5zaWduZWQgaW50IHdlaWdodHNbXSxcbiYjNDM7XHRcdGludCBucl93ZWlnaHRzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRhbW9uX2N0eCAqY3R4O1xuJiM0MztcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGN0eCA9IGRhbW9uX25ld19jdHgoKTtcbiYjNDM7XHRpZiAoIWN0eClcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3dlaWdodHM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRwcm9iZSA9IGRhbW9uX25ld19wcm9iZSgpO1xuJiM0MztcdFx0aWYgKCFwcm9iZSkge1xuJiM0MztcdFx0XHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xuJiM0MztcdFx0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHByb2JlLVx1MDAzZXdlaWdodCA9IHdlaWdodHNbaV07XG4mIzQzO1x0XHRkYW1vbl9hZGRfcHJvYmUoY3R4LCBwcm9iZSk7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiBjdHg7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuJiM0MztcdFx0dW5zaWduZWQgaW50IGRzdF93ZWlnaHRzW10sIGludCBucl9kc3RfcHJvYmVzLFxuJiM0MztcdFx0dW5zaWduZWQgaW50IHNyY193ZWlnaHRzW10sIGludCBucl9zcmNfcHJvYmVzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRhbW9uX2N0eCAqZHN0LCAqc3JjO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1x0c3RydWN0IGRhbW9uX3Byb2JlICpkc3RfcHJvYmUsICpzcmNfcHJvYmU7XG4mIzQzO1xuJiM0MztcdGRzdCA9IGRhbW9uX3Rlc3RfaGVscF9zZXR1cF9wcm9iZXMoZHN0X3dlaWdodHMsIG5yX2RzdF9wcm9iZXMpO1xuJiM0MztcdGlmICghZHN0KVxuJiM0MztcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDtkc3QgYWxsb2MgZmFpbFwmIzM0Oyk7XG4mIzQzO1x0c3JjID0gZGFtb25fdGVzdF9oZWxwX3NldHVwX3Byb2JlcyhzcmNfd2VpZ2h0cywgbnJfc3JjX3Byb2Jlcyk7XG4mIzQzO1x0aWYgKCFzcmMpIHtcbiYjNDM7XHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KGRzdCk7XG4mIzQzO1x0XHRrdW5pdF9za2lwKHRlc3QsIFwmIzM0O3NyYyBhbGxvYyBmYWlsXCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IGRhbW9uX2NvbW1pdF9wcm9iZXMoZHN0LCBzcmMpO1xuJiM0MztcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBlcnIsIDApO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0bnJfZHN0X3Byb2JlcyA9IDA7XG4mIzQzO1x0ZGFtb25fZm9yX2VhY2hfcHJvYmUoZHN0X3Byb2JlLCBkc3QpXG4mIzQzO1x0XHRucl9kc3RfcHJvYmVzJiM0MzsmIzQzOztcbiYjNDM7XHRucl9zcmNfcHJvYmVzID0gMDtcbiYjNDM7XHRkYW1vbl9mb3JfZWFjaF9wcm9iZShzcmNfcHJvYmUsIHNyYylcbiYjNDM7XHRcdG5yX3NyY19wcm9iZXMmIzQzOyYjNDM7O1xuJiM0MztcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBucl9kc3RfcHJvYmVzLCBucl9zcmNfcHJvYmVzKTtcbiYjNDM7XHRucl9kc3RfcHJvYmVzID0gMDtcbiYjNDM7XHRkYW1vbl9mb3JfZWFjaF9wcm9iZShkc3RfcHJvYmUsIGRzdCkge1xuJiM0MztcdFx0c3JjX3Byb2JlID0gZGFtb25fbnRoX3Byb2JlKG5yX2RzdF9wcm9iZXMsIHNyYyk7XG4mIzQzO1x0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgc3JjX3Byb2JlLVx1MDAzZXdlaWdodCwgZHN0X3Byb2JlLVx1MDAzZXdlaWdodCk7XG4mIzQzO1x0XHRucl9kc3RfcHJvYmVzJiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1x0ZGFtb25fZGVzdHJveV9jdHgoZHN0KTtcbiYjNDM7XHRkYW1vbl9kZXN0cm95X2N0eChzcmMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXMoc3RydWN0IGt1bml0ICp0ZXN0KVxuJiM0Mzt7XG4mIzQzO1x0ZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LFxuJiM0MztcdFx0XHQodW5zaWduZWQgaW50W10pe30sIDAsICh1bnNpZ25lZCBpbnRbXSl7fSwgMCk7XG4mIzQzO1x0ZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LFxuJiM0MztcdFx0XHQodW5zaWduZWQgaW50W10pe30sIDAsICh1bnNpZ25lZCBpbnRbXSl7MX0sIDEpO1xuJiM0MztcdGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCxcbiYjNDM7XHRcdFx0KHVuc2lnbmVkIGludFtdKXt9LCAwLCAodW5zaWduZWQgaW50W10pezEsIDJ9LCAyKTtcbiYjNDM7XHRkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsXG4mIzQzO1x0XHRcdCh1bnNpZ25lZCBpbnRbXSl7MX0sIDEsICh1bnNpZ25lZCBpbnRbXSl7Mn0sIDEpO1xuJiM0MztcdGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCxcbiYjNDM7XHRcdFx0KHVuc2lnbmVkIGludFtdKXsxfSwgMSwgKHVuc2lnbmVkIGludFtdKXsyLCAzfSwgMik7XG4mIzQzO1x0ZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LFxuJiM0MztcdFx0XHQodW5zaWduZWQgaW50W10pezIsIDN9LCAyLCAodW5zaWduZWQgaW50W10pezF9LCAxKTtcbiYjNDM7XHRkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsXG4mIzQzO1x0XHRcdCh1bnNpZ25lZCBpbnRbXSl7MiwgM30sIDIsICh1bnNpZ25lZCBpbnRbXSl7fSwgMCk7XG4mIzQzO1x0ZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LFxuJiM0MztcdFx0XHQodW5zaWduZWQgaW50W10pezJ9LCAxLCAodW5zaWduZWQgaW50W10pe30sIDApO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X2N0eChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4ge1xuIFx0c3RydWN0IGRhbW9uX2N0eCAqc3JjLCAqZHN0O1xuQEAgLTE2NTYsNiAmIzQzOzE3NzUsOCBAQCBzdGF0aWMgc3RydWN0IGt1bml0X2Nhc2UgZGFtb25fdGVzdF9jYXNlc1tdID0ge1xuIFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9wYWdlb3V0KSxcbiBcdEtVTklUX0NBU0UoZGFtb3NfdGVzdF9jb21taXRfbWlncmF0ZV9ob3QpLFxuIFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X2NvbW1pdF90YXJnZXRfcmVnaW9ucyksXG4mIzQzO1x0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X2NvbW1pdF9maWx0ZXIpLFxuJiM0MztcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9jb21taXRfcHJvYmVzKSxcbiBcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9jb21taXRfY3R4KSxcbiBcdEtVTklUX0NBU0UoZGFtb3NfdGVzdF9maWx0ZXJfb3V0KSxcbiBcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9mZWVkX2xvb3BfbmV4dF9pbnB1dCksXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vX2RhbW9uX3N5c2ZzLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vX2RhbW9uX3N5c2ZzLnB5XG5pbmRleCBlNmEyMjY1ZDcyMWU4Li5kNmFmYjViMmYwYTRhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vX2RhbW9uX3N5c2ZzLnB5XG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9fZGFtb25fc3lzZnMucHlcbkBAIC01NTgsNiAmIzQzOzU1OCwxMTUgQEAgY2xhc3MgSW50ZXJ2YWxzR29hbDpcbiAgICAgICAgICAgICByZXR1cm4gZXJyXG4gICAgICAgICByZXR1cm4gTm9uZVxuIFxuJiM0MztjbGFzcyBEYW1vbkZpbHRlcjpcbiYjNDM7ICAgIHR5cGVfID0gTm9uZVxuJiM0MzsgICAgbWF0Y2hpbmcgPSBOb25lXG4mIzQzOyAgICBhbGxvdyA9IE5vbmVcbiYjNDM7ICAgIGZpbHRlcnMgPSBOb25lXG4mIzQzOyAgICBwYXRoID0gTm9uZVxuJiM0MzsgICAgaWR4ID0gTm9uZVxuJiM0MztcbiYjNDM7ICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0eXBlXz0mIzM5O2Fub24mIzM5OywgbWF0Y2hpbmc9RmFsc2UsIGFsbG93PUZhbHNlLCBwYXRoPU5vbmUpOlxuJiM0MzsgICAgICAgIHNlbGYudHlwZV8gPSB0eXBlX1xuJiM0MzsgICAgICAgIHNlbGYubWF0Y2hpbmcgPSBtYXRjaGluZ1xuJiM0MzsgICAgICAgIHNlbGYuYWxsb3cgPSBhbGxvd1xuJiM0MzsgICAgICAgIHNlbGYucGF0aCA9IHBhdGhcbiYjNDM7XG4mIzQzOyAgICBkZWYgc3lzZnNfZGlyKHNlbGYpOlxuJiM0MzsgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5maWx0ZXJzLnN5c2ZzX2RpcigpLCAmIzM5OyVkJiMzOTsgJSBzZWxmLmlkeClcbiYjNDM7XG4mIzQzOyAgICBkZWYgc3RhZ2Uoc2VsZik6XG4mIzQzOyAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJiMzOTt0eXBlJiMzOTspLCBzZWxmLnR5cGVfKVxuJiM0MzsgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZTpcbiYjNDM7ICAgICAgICAgICAgcmV0dXJuIGVyclxuJiM0MzsgICAgICAgIGVyciA9IHdyaXRlX2ZpbGUob3MucGF0aC5qb2luKHNlbGYuc3lzZnNfZGlyKCksICYjMzk7bWF0Y2hpbmcmIzM5OyksXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAmIzM5O1kmIzM5OyBpZiBzZWxmLm1hdGNoaW5nIGVsc2UgJiMzOTtOJiMzOTspXG4mIzQzOyAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOlxuJiM0MzsgICAgICAgICAgICByZXR1cm4gZXJyXG4mIzQzOyAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJiMzOTthbGxvdyYjMzk7KSxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICYjMzk7WSYjMzk7IGlmIHNlbGYuYWxsb3cgZWxzZSAmIzM5O04mIzM5OylcbiYjNDM7ICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6XG4mIzQzOyAgICAgICAgICAgIHJldHVybiBlcnJcbiYjNDM7ICAgICAgICBpZiBzZWxmLnR5cGVfID09ICYjMzk7bWVtY2cmIzM5OzpcbiYjNDM7ICAgICAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJiMzOTtwYXRoJiMzOTspLCBzZWxmLnBhdGgpXG4mIzQzOyAgICAgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZTpcbiYjNDM7ICAgICAgICAgICAgICAgIHJldHVybiBlcnJcbiYjNDM7ICAgICAgICByZXR1cm4gTm9uZVxuJiM0MztcbiYjNDM7Y2xhc3MgRGFtb25GaWx0ZXJzOlxuJiM0MzsgICAgZmlsdGVycyA9IE5vbmVcbiYjNDM7ICAgIHByb2JlID0gTm9uZVxuJiM0MztcbiYjNDM7ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWx0ZXJzPU5vbmUpOlxuJiM0MzsgICAgICAgIGlmIGZpbHRlcnMgaXMgTm9uZTpcbiYjNDM7ICAgICAgICAgICAgZmlsdGVycyA9IFtdXG4mIzQzOyAgICAgICAgc2VsZi5maWx0ZXJzID0gZmlsdGVyc1xuJiM0MzsgICAgICAgIGZvciBpZHgsIGZpbHRlciBpbiBlbnVtZXJhdGUoc2VsZi5maWx0ZXJzKTpcbiYjNDM7ICAgICAgICAgICAgZmlsdGVyLmZpbHRlcnMgPSBzZWxmXG4mIzQzOyAgICAgICAgICAgIGZpbHRlci5pZHggPSBpZHhcbiYjNDM7XG4mIzQzOyAgICBkZWYgc3lzZnNfZGlyKHNlbGYpOlxuJiM0MzsgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5wcm9iZS5zeXNmc19kaXIoKSwgJiMzOTtmaWx0ZXJzJiMzOTspXG4mIzQzO1xuJiM0MzsgICAgZGVmIHN0YWdlKHNlbGYpOlxuJiM0MzsgICAgICAgIGVyciA9IHdyaXRlX2ZpbGUoXG4mIzQzOyAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJiMzOTtucl9maWx0ZXJzJiMzOTspLFxuJiM0MzsgICAgICAgICAgICAgICAgbGVuKHNlbGYuZmlsdGVycykpXG4mIzQzOyAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOlxuJiM0MzsgICAgICAgICAgICByZXR1cm4gZXJyXG4mIzQzOyAgICAgICAgZm9yIGZpbHRlciBpbiBzZWxmLmZpbHRlcnM6XG4mIzQzOyAgICAgICAgICAgIGVyciA9IGZpbHRlci5zdGFnZSgpXG4mIzQzOyAgICAgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZTpcbiYjNDM7ICAgICAgICAgICAgICAgIHJldHVybiBlcnJcbiYjNDM7ICAgICAgICByZXR1cm4gTm9uZVxuJiM0MztcbiYjNDM7Y2xhc3MgRGFtb25Qcm9iZTpcbiYjNDM7ICAgIHdlaWdodCA9IE5vbmVcbiYjNDM7ICAgIGZpbHRlcnMgPSBOb25lXG4mIzQzOyAgICBwcm9iZXMgPSBOb25lXG4mIzQzOyAgICBpZHggPSBOb25lXG4mIzQzO1xuJiM0MzsgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdlaWdodD0wLCBmaWx0ZXJzPU5vbmUpOlxuJiM0MzsgICAgICAgIHNlbGYud2VpZ2h0ID0gd2VpZ2h0XG4mIzQzOyAgICAgICAgaWYgZmlsdGVycyBpcyBOb25lOlxuJiM0MzsgICAgICAgICAgICBmaWx0ZXJzID0gRGFtb25GaWx0ZXJzKClcbiYjNDM7ICAgICAgICBzZWxmLmZpbHRlcnMgPSBmaWx0ZXJzXG4mIzQzOyAgICAgICAgc2VsZi5maWx0ZXJzLnByb2JlID0gc2VsZlxuJiM0MztcbiYjNDM7ICAgIGRlZiBzeXNmc19kaXIoc2VsZik6XG4mIzQzOyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLnByb2Jlcy5zeXNmc19kaXIoKSwgJiMzOTslZCYjMzk7ICUgc2VsZi5pZHgpXG4mIzQzO1xuJiM0MzsgICAgZGVmIHN0YWdlKHNlbGYpOlxuJiM0MzsgICAgICAgIGVyciA9IHdyaXRlX2ZpbGUoXG4mIzQzOyAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJiMzOTt3ZWlnaHQmIzM5OyksICYjMzk7JWQmIzM5OyAlIHNlbGYud2VpZ2h0KVxuJiM0MzsgICAgICAgIHJldHVybiBzZWxmLmZpbHRlcnMuc3RhZ2UoKVxuJiM0MztcbiYjNDM7Y2xhc3MgRGFtb25Qcm9iZXM6XG4mIzQzOyAgICBwcm9iZXMgPSBOb25lXG4mIzQzOyAgICBhdHRycyA9IE5vbmVcbiYjNDM7XG4mIzQzOyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvYmVzPU5vbmUpOlxuJiM0MzsgICAgICAgIGlmIHByb2JlcyBpcyBOb25lOlxuJiM0MzsgICAgICAgICAgICBwcm9iZXMgPSBbXVxuJiM0MzsgICAgICAgIHNlbGYucHJvYmVzID0gcHJvYmVzXG4mIzQzOyAgICAgICAgZm9yIGlkeCwgcHJvYmUgaW4gZW51bWVyYXRlKHNlbGYucHJvYmVzKTpcbiYjNDM7ICAgICAgICAgICAgcHJvYmUucHJvYmVzID0gc2VsZlxuJiM0MzsgICAgICAgICAgICBwcm9iZS5pZHggPSBpZHhcbiYjNDM7XG4mIzQzOyAgICBkZWYgc3lzZnNfZGlyKHNlbGYpOlxuJiM0MzsgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5hdHRycy5zeXNmc19kaXIoKSwgJiMzOTtwcm9iZXMmIzM5OylcbiYjNDM7XG4mIzQzOyAgICBkZWYgc3RhZ2Uoc2VsZik6XG4mIzQzOyAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJiMzOTtucl9wcm9iZXMmIzM5OyksXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICBsZW4oc2VsZi5wcm9iZXMpKVxuJiM0MzsgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZTpcbiYjNDM7ICAgICAgICAgICAgcmV0dXJuIGVyclxuJiM0MzsgICAgICAgIGZvciBwcm9iZSBpbiBzZWxmLnByb2JlczpcbiYjNDM7ICAgICAgICAgICAgZXJyID0gcHJvYmUuc3RhZ2UoKVxuJiM0MzsgICAgICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6XG4mIzQzOyAgICAgICAgICAgICAgICByZXR1cm4gZXJyXG4mIzQzOyAgICAgICAgcmV0dXJuIE5vbmVcbiYjNDM7XG4gY2xhc3MgRGFtb25BdHRyczpcbiAgICAgc2FtcGxlX3VzID0gTm9uZVxuICAgICBhZ2dyX3VzID0gTm9uZVxuQEAgLTU2NSwxMSAmIzQzOzY3NCwxMiBAQCBjbGFzcyBEYW1vbkF0dHJzOlxuICAgICB1cGRhdGVfdXMgPSBOb25lXG4gICAgIG1pbl9ucl9yZWdpb25zID0gTm9uZVxuICAgICBtYXhfbnJfcmVnaW9ucyA9IE5vbmVcbiYjNDM7ICAgIHByb2JlcyA9IE5vbmVcbiAgICAgY29udGV4dCA9IE5vbmVcbiBcbiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNhbXBsZV91cz01MDAwLCBhZ2dyX3VzPTEwMDAwMCxcbiAgICAgICAgICAgICAgICAgIGludGVydmFsc19nb2FsPUludGVydmFsc0dvYWwoKSwgdXBkYXRlX3VzPTEwMDAwMDAsXG4tICAgICAgICAgICAgbWluX25yX3JlZ2lvbnM9MTAsIG1heF9ucl9yZWdpb25zPTEwMDApOlxuJiM0MzsgICAgICAgICAgICBtaW5fbnJfcmVnaW9ucz0xMCwgbWF4X25yX3JlZ2lvbnM9MTAwMCwgcHJvYmVzPU5vbmUpOlxuICAgICAgICAgc2VsZi5zYW1wbGVfdXMgPSBzYW1wbGVfdXNcbiAgICAgICAgIHNlbGYuYWdncl91cyA9IGFnZ3JfdXNcbiAgICAgICAgIHNlbGYuaW50ZXJ2YWxzX2dvYWwgPSBpbnRlcnZhbHNfZ29hbFxuQEAgLTU3Nyw2ICYjNDM7Njg3LDEwIEBAIGNsYXNzIERhbW9uQXR0cnM6XG4gICAgICAgICBzZWxmLnVwZGF0ZV91cyA9IHVwZGF0ZV91c1xuICAgICAgICAgc2VsZi5taW5fbnJfcmVnaW9ucyA9IG1pbl9ucl9yZWdpb25zXG4gICAgICAgICBzZWxmLm1heF9ucl9yZWdpb25zID0gbWF4X25yX3JlZ2lvbnNcbiYjNDM7ICAgICAgICBpZiBwcm9iZXMgaXMgTm9uZTpcbiYjNDM7ICAgICAgICAgICAgcHJvYmVzID0gRGFtb25Qcm9iZXMoKVxuJiM0MzsgICAgICAgIHNlbGYucHJvYmVzID0gcHJvYmVzXG4mIzQzOyAgICAgICAgc2VsZi5wcm9iZXMuYXR0cnMgPSBzZWxmXG4gXG4gICAgIGRlZiBpbnRlcnZhbF9zeXNmc19kaXIoc2VsZik6XG4gICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuY29udGV4dC5zeXNmc19kaXIoKSwgJiMzOTttb25pdG9yaW5nX2F0dHJzJiMzOTssXG5AQCAtNTg2LDYgJiM0Mzs3MDAsOSBAQCBjbGFzcyBEYW1vbkF0dHJzOlxuICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLmNvbnRleHQuc3lzZnNfZGlyKCksICYjMzk7bW9uaXRvcmluZ19hdHRycyYjMzk7LFxuICAgICAgICAgICAgICAgICAmIzM5O25yX3JlZ2lvbnMmIzM5OylcbiBcbiYjNDM7ICAgIGRlZiBzeXNmc19kaXIoc2VsZik6XG4mIzQzOyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLmNvbnRleHQuc3lzZnNfZGlyKCksICYjMzk7bW9uaXRvcmluZ19hdHRycyYjMzk7KVxuJiM0MztcbiAgICAgZGVmIHN0YWdlKHNlbGYpOlxuICAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5pbnRlcnZhbF9zeXNmc19kaXIoKSwgJiMzOTtzYW1wbGVfdXMmIzM5OyksXG4gICAgICAgICAgICAgICAgIHNlbGYuc2FtcGxlX3VzKVxuQEAgLTYxNSw2ICYjNDM7NzMyLDEwIEBAIGNsYXNzIERhbW9uQXR0cnM6XG4gICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6XG4gICAgICAgICAgICAgcmV0dXJuIGVyclxuIFxuJiM0MzsgICAgICAgIGVyciA9IHNlbGYucHJvYmVzLnN0YWdlKClcbiYjNDM7ICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6XG4mIzQzOyAgICAgICAgICAgIHJldHVybiBlcnJcbiYjNDM7XG4gY2xhc3MgRGFtb25DdHg6XG4gICAgIG9wcyA9IE5vbmVcbiAgICAgbW9uaXRvcmluZ19hdHRycyA9IE5vbmVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9kcmduX2R1bXBfZGFtb25fc3RhdHVzLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vZHJnbl9kdW1wX2RhbW9uX3N0YXR1cy5weVxuaW5kZXggMDk1NTJlOTFiYzc4Mi4uNDYyMjA0NmZkMDExOCAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2RyZ25fZHVtcF9kYW1vbl9zdGF0dXMucHlcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2RyZ25fZHVtcF9kYW1vbl9zdGF0dXMucHlcbkBAIC00OCw2ICYjNDM7NDgsMzcgQEAgZGVmIGF0dHJzX3RvX2RpY3QoYXR0cnMpOlxuICAgICAgICAgWyYjMzk7bWF4X25yX3JlZ2lvbnMmIzM5OywgaW50XSxcbiAgICAgICAgIF0pXG4gXG4mIzQzO2RlZiBmaWx0ZXJfdG9fZGljdChkYW1vbl9maWx0ZXIpOlxuJiM0MzsgICAgZmlsdGVyX3R5cGVfa2V5d29yZCA9IHtcbiYjNDM7ICAgICAgICAgICAgMDogJiMzOTthbm9uJiMzOTssXG4mIzQzOyAgICAgICAgICAgIDE6ICYjMzk7bWVtY2cmIzM5OyxcbiYjNDM7ICAgICAgICAgICAgfVxuJiM0MzsgICAgZGljdF8gPSB7XG4mIzQzOyAgICAgICAgICAgICYjMzk7dHlwZSYjMzk7OiBmaWx0ZXJfdHlwZV9rZXl3b3JkW2ludChkYW1vbl9maWx0ZXIudHlwZSldLFxuJiM0MzsgICAgICAgICAgICAmIzM5O21hdGNoaW5nJiMzOTs6IGJvb2woZGFtb25fZmlsdGVyLm1hdGNoaW5nKSxcbiYjNDM7ICAgICAgICAgICAgJiMzOTthbGxvdyYjMzk7OiBib29sKGRhbW9uX2ZpbHRlci5hbGxvdyksXG4mIzQzOyAgICAgICAgICAgIH1cbiYjNDM7ICAgIHR5cGVfID0gZGljdF9bJiMzOTt0eXBlJiMzOTtdXG4mIzQzOyAgICBpZiB0eXBlXyA9PSAmIzM5O21lbWNnJiMzOTs6XG4mIzQzOyAgICAgICAgZGljdF9bJiMzOTttZW1jZ19pZCYjMzk7XSA9IGludChkYW1vbl9maWx0ZXIubWVtY2dfaWQpXG4mIzQzOyAgICByZXR1cm4gZGljdF9cbiYjNDM7XG4mIzQzO2RlZiBmaWx0ZXJzX3RvX2xpc3QoZmlsdGVycyk6XG4mIzQzOyAgICByZXR1cm4gW2ZpbHRlcl90b19kaWN0KGYpXG4mIzQzOyAgICAgICAgICAgIGZvciBmIGluIGxpc3RfZm9yX2VhY2hfZW50cnkoXG4mIzQzOyAgICAgICAgICAgICAgICAmIzM5O3N0cnVjdCBkYW1vbl9maWx0ZXImIzM5OywgZmlsdGVycy5hZGRyZXNzX29mXygpLCAmIzM5O2xpc3QmIzM5OyldXG4mIzQzO1xuJiM0MztkZWYgcHJvYmVfdG9fZGljdChwcm9iZSk6XG4mIzQzOyAgICByZXR1cm4gdG9fZGljdChwcm9iZSwgW1xuJiM0MzsgICAgICAgIFsmIzM5O3dlaWdodCYjMzk7LCBpbnRdLFxuJiM0MzsgICAgICAgIFsmIzM5O2ZpbHRlcnMmIzM5OywgZmlsdGVyc190b19saXN0XSxcbiYjNDM7ICAgICAgICBdKVxuJiM0MztcbiYjNDM7ZGVmIHByb2Jlc190b19saXN0KHByb2Jlcyk6XG4mIzQzOyAgICByZXR1cm4gW3Byb2JlX3RvX2RpY3QocClcbiYjNDM7ICAgICAgICAgICAgZm9yIHAgaW4gbGlzdF9mb3JfZWFjaF9lbnRyeShcbiYjNDM7ICAgICAgICAgICAgICAgICYjMzk7c3RydWN0IGRhbW9uX3Byb2JlJiMzOTssIHByb2Jlcy5hZGRyZXNzX29mXygpLCAmIzM5O2xpc3QmIzM5OyldXG4mIzQzO1xuIGRlZiBhZGRyX3JhbmdlX3RvX2RpY3QoYWRkcl9yYW5nZSk6XG4gICAgIHJldHVybiB0b19kaWN0KGFkZHJfcmFuZ2UsIFtcbiAgICAgICAgIFsmIzM5O3N0YXJ0JiMzOTssIGludF0sXG5AQCAtMTk5LDYgJiM0MzsyMzAsNyBAQCBkZWYgZGFtb25fY3R4X3RvX2RpY3QoY3R4KTpcbiAgICAgcmV0dXJuIHRvX2RpY3QoY3R4LCBbXG4gICAgICAgICBbJiMzOTtvcHMmIzM5Oywgb3BzX3RvX2RpY3RdLFxuICAgICAgICAgWyYjMzk7YXR0cnMmIzM5OywgYXR0cnNfdG9fZGljdF0sXG4mIzQzOyAgICAgICAgWyYjMzk7cHJvYmVzJiMzOTssIHByb2Jlc190b19saXN0XSxcbiAgICAgICAgIFsmIzM5O2FkYXB0aXZlX3RhcmdldHMmIzM5OywgdGFyZ2V0c190b19saXN0XSxcbiAgICAgICAgIFsmIzM5O3NjaGVtZXMmIzM5Oywgc2NoZW1lc190b19saXN0XSxcbiAgICAgICAgIFsmIzM5O3BhdXNlJiMzOTssIGJvb2xdLFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMucHlcbmluZGV4IDNmZmEwNTRiNjM4NjcuLjg1MmI2ODg3YTc1Y2UgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5weVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMucHlcbkBAIC0xNzgsNiAmIzQzOzE3OCwyNCBAQCBkZWYgYXNzZXJ0X21vbml0b3JpbmdfYXR0cnNfY29tbWl0dGVkKGF0dHJzLCBkdW1wKTpcbiAgICAgYXNzZXJ0X3RydWUoZHVtcFsmIzM5O21heF9ucl9yZWdpb25zJiMzOTtdID09IGF0dHJzLm1heF9ucl9yZWdpb25zLFxuICAgICAgICAgICAgICAgICAmIzM5O21heF9ucl9yZWdpb25zJiMzOTssIGR1bXApXG4gXG4mIzQzO2RlZiBhc3NlcnRfZGFtb25fZmlsdGVyc19jb21taXR0ZWQoZmlsdGVycywgZHVtcCk6XG4mIzQzOyAgICBhc3NlcnRfdHJ1ZShsZW4oZHVtcCkgPT0gbGVuKGZpbHRlcnMuZmlsdGVycyksICYjMzk7cHJvYmUgZmlsdGVycyYjMzk7LCBkdW1wKVxuJiM0MzsgICAgZm9yIGlkeCwgZGFtb25fZmlsdGVyIGluIGVudW1lcmF0ZShmaWx0ZXJzLmZpbHRlcnMpOlxuJiM0MzsgICAgICAgIGZpbHRlcl9kdW1wID0gZHVtcFtpZHhdXG4mIzQzOyAgICAgICAgYXNzZXJ0X3RydWUoZmlsdGVyX2R1bXBbJiMzOTt0eXBlJiMzOTtdID09IGRhbW9uX2ZpbHRlci50eXBlXywgJiMzOTt0eXBlJiMzOTssXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgZmlsdGVyX2R1bXApXG4mIzQzOyAgICAgICAgYXNzZXJ0X3RydWUoZmlsdGVyX2R1bXBbJiMzOTttYXRjaGluZyYjMzk7XSA9PSBkYW1vbl9maWx0ZXIubWF0Y2hpbmcsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgJiMzOTttYXRjaGluZyYjMzk7LCBmaWx0ZXJfZHVtcClcbiYjNDM7ICAgICAgICBhc3NlcnRfdHJ1ZShmaWx0ZXJfZHVtcFsmIzM5O2FsbG93JiMzOTtdID09IGRhbW9uX2ZpbHRlci5hbGxvdywgJiMzOTthbGxvdyYjMzk7LFxuJiM0MzsgICAgICAgICAgICAgICAgICAgIGZpbHRlcl9kdW1wKVxuJiM0MztcbiYjNDM7ZGVmIGFzc2VydF9wcm9iZXNfY29tbWl0dGVkKHByb2JlcywgZHVtcCk6XG4mIzQzOyAgICBhc3NlcnRfdHJ1ZShsZW4oZHVtcCkgPT0gbGVuKHByb2Jlcy5wcm9iZXMpLCAmIzM5O3Byb2JlcyBsZW5ndGgmIzM5OywgZHVtcClcbiYjNDM7ICAgIGZvciBpZHgsIHByb2JlIGluIGVudW1lcmF0ZShwcm9iZXMucHJvYmVzKTpcbiYjNDM7ICAgICAgICBwcm9iZV9kdW1wID0gZHVtcFtpZHhdXG4mIzQzOyAgICAgICAgYXNzZXJ0X3RydWUocHJvYmUud2VpZ2h0ID09IHByb2JlX2R1bXBbJiMzOTt3ZWlnaHQmIzM5O10sICYjMzk7d2VpZ2h0JiMzOTssIHByb2JlX2R1bXApXG4mIzQzOyAgICAgICAgYXNzZXJ0X2RhbW9uX2ZpbHRlcnNfY29tbWl0dGVkKHByb2JlLmZpbHRlcnMsIHByb2JlX2R1bXBbJiMzOTtmaWx0ZXJzJiMzOTtdKVxuJiM0MztcbiBkZWYgYXNzZXJ0X21vbml0b3JpbmdfdGFyZ2V0X2NvbW1pdHRlZCh0YXJnZXQsIGR1bXApOlxuICAgICAjIHRhcmdldC5waWQgaXMgdGhlIHBpZCBcJiMzNDtudW1iZXJcJiMzNDssIHdoaWxlIGR1bXBbJiMzOTtwaWQmIzM5O10gaXMgJiMzOTtzdHJ1Y3QgcGlkJiMzOTtcbiAgICAgIyBwb2ludGVyLCBhbmQgaGVuY2UgY2Fubm90IGJlIGNvbXBhcmVkLlxuQEAgLTE5Niw2ICYjNDM7MjE0LDcgQEAgZGVmIGFzc2VydF9jdHhfY29tbWl0dGVkKGN0eCwgZHVtcCk6XG4gICAgICAgICAgICAgfVxuICAgICBhc3NlcnRfdHJ1ZShkdW1wWyYjMzk7b3BzJiMzOTtdWyYjMzk7aWQmIzM5O10gPT0gb3BzX3ZhbFtjdHgub3BzXSwgJiMzOTtvcHNfaWQmIzM5OywgZHVtcClcbiAgICAgYXNzZXJ0X21vbml0b3JpbmdfYXR0cnNfY29tbWl0dGVkKGN0eC5tb25pdG9yaW5nX2F0dHJzLCBkdW1wWyYjMzk7YXR0cnMmIzM5O10pXG4mIzQzOyAgICBhc3NlcnRfcHJvYmVzX2NvbW1pdHRlZChjdHgubW9uaXRvcmluZ19hdHRycy5wcm9iZXMsIGR1bXBbJiMzOTtwcm9iZXMmIzM5O10pXG4gICAgIGFzc2VydF9tb25pdG9yaW5nX3RhcmdldHNfY29tbWl0dGVkKGN0eC50YXJnZXRzLCBkdW1wWyYjMzk7YWRhcHRpdmVfdGFyZ2V0cyYjMzk7XSlcbiAgICAgYXNzZXJ0X3NjaGVtZXNfY29tbWl0dGVkKGN0eC5zY2hlbWVzLCBkdW1wWyYjMzk7c2NoZW1lcyYjMzk7XSlcbiAgICAgYXNzZXJ0X3RydWUoZHVtcFsmIzM5O3BhdXNlJiMzOTtdID09IGN0eC5wYXVzZSwgJiMzOTtwYXVzZSYjMzk7LCBkdW1wKVxuQEAgLTMwMCw3ICYjNDM7MzE5LDIxIEBAIGRlZiBtYWluKCk6XG4gICAgICAgICAgICAgICAgIGludGVydmFsc19nb2FsPV9kYW1vbl9zeXNmcy5JbnRlcnZhbHNHb2FsKFxuICAgICAgICAgICAgICAgICAgICAgYWNjZXNzX2JwPTQwMCwgYWdncnM9MywgbWluX3NhbXBsZV91cz01MDAwLFxuICAgICAgICAgICAgICAgICAgICAgbWF4X3NhbXBsZV91cz0xMDAwMDAwMCksXG4tICAgICAgICAgICAgICAgIHVwZGF0ZV91cz0yMDAwMDAwKSxcbiYjNDM7ICAgICAgICAgICAgICAgIHVwZGF0ZV91cz0yMDAwMDAwLFxuJiM0MzsgICAgICAgICAgICAgICAgcHJvYmVzPV9kYW1vbl9zeXNmcy5EYW1vblByb2JlcyhcbiYjNDM7ICAgICAgICAgICAgICAgICAgICBwcm9iZXM9W19kYW1vbl9zeXNmcy5EYW1vblByb2JlKFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQ9NDIsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcnM9X2RhbW9uX3N5c2ZzLkRhbW9uRmlsdGVycyhcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcnM9W1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kYW1vbl9zeXNmcy5EYW1vbkZpbHRlcihcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZV89JiMzOTthbm9uJiMzOTssXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoaW5nPVRydWUsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93PVRydWUsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICBzY2hlbWVzPVtfZGFtb25fc3lzZnMuRGFtb3MoXG4gICAgICAgICAgICAgICAgIGFjdGlvbj0mIzM5O3BhZ2VvdXQmIzM5OyxcbiAgICAgICAgICAgICAgICAgYWNjZXNzX3BhdHRlcm49X2RhbW9uX3N5c2ZzLkRhbW9zQWNjZXNzUGF0dGVybihcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMTo0MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBhZGRzIEtVbml0IHRlc3RzIGFuZCBQeXRob24gc2VsZnRlc3RzIGZvciBEQU1PTiBmaWx0ZXJzIGFuZCBwcm9iZXMuIEl0IGRvZXMgbm90IG1vZGlmeSBhbnkgZnVuY3Rpb25hbCBrZXJuZWwgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhNmQyMWZiOWVjYjkzNzkxNmE5MGVlMTkyZjY4YWM3MTkyZDFhYjczCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMzAgMjE6NDM6MzQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgKaW5kZXggNGE1MzZkNDFjZGIyZC4uNjU3NzQxMGFjZTNkYSAxMDA2NDQKLS0tIGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaApAQCAtMTMwNiw2ICYjNDM7MTMwNiwxMjUgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfdGFyZ2V0X3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0KQogCQkJKHVuc2lnbmVkIGxvbmdbXVsyXSkge3szLCA4fSwgezgsIDEwfX0sIDIpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfZmlsdGVyX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsCiYjNDM7CQlzdHJ1Y3QgZGFtb25fZmlsdGVyICpkc3QsIHN0cnVjdCBkYW1vbl9maWx0ZXIgKnNyYykKJiM0Mzt7CiYjNDM7CWRhbW9uX2NvbW1pdF9maWx0ZXIoZHN0LCBzcmMpOwomIzQzOwlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LSZndDt0eXBlLCBzcmMtJmd0O3R5cGUpOwomIzQzOwlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LSZndDttYXRjaGluZywgc3JjLSZndDttYXRjaGluZyk7CiYjNDM7CUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtJmd0O2FsbG93LCBzcmMtJmd0O2FsbG93KTsKJiM0MzsJc3dpdGNoIChzcmMtJmd0O3R5cGUpIHsKJiM0MzsJY2FzZSBEQU1PU19GSUxURVJfVFlQRV9NRU1DRzoKJiM0MzsJCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtJmd0O21lbWNnX2lkLCBzcmMtJmd0O21lbWNnX2lkKTsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfZmlsdGVyKHN0cnVjdCBrdW5pdCAqdGVzdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYW1vbl9maWx0ZXIgZHN0ID0gewomIzQzOwkJLnR5cGUgPSBEQU1PTl9GSUxURVJfVFlQRV9BTk9OLAomIzQzOwkJLm1hdGNoaW5nID0gZmFsc2UsCiYjNDM7CQkuYWxsb3cgPSBmYWxzZSwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJZGFtb25fdGVzdF9jb21taXRfZmlsdGVyX2Zvcih0ZXN0LCAmYW1wO2RzdCwKJiM0MzsJCQkmYW1wOyhzdHJ1Y3QgZGFtb25fZmlsdGVyKXsKJiM0MzsJCQkudHlwZSA9IERBTU9OX0ZJTFRFUl9UWVBFX0FOT04sCiYjNDM7CQkJLm1hdGNoaW5nID0gdHJ1ZSwKJiM0MzsJCQkuYWxsb3cgPSB0cnVlLAomIzQzOwkJCX0pOwomIzQzOwlkYW1vbl90ZXN0X2NvbW1pdF9maWx0ZXJfZm9yKHRlc3QsICZhbXA7ZHN0LAomIzQzOwkJCSZhbXA7KHN0cnVjdCBkYW1vbl9maWx0ZXIpewomIzQzOwkJCS50eXBlID0gREFNT05fRklMVEVSX1RZUEVfTUVNQ0csCiYjNDM7CQkJLm1hdGNoaW5nID0gZmFsc2UsCiYjNDM7CQkJLmFsbG93ID0gZmFsc2UsCiYjNDM7CQkJLm1lbWNnX2lkID0gMTIzLAomIzQzOwkJCX0pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fdGVzdF9oZWxwX3NldHVwX3Byb2Jlcyh1bnNpZ25lZCBpbnQgd2VpZ2h0c1tdLAomIzQzOwkJaW50IG5yX3dlaWdodHMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGFtb25fY3R4ICpjdHg7CiYjNDM7CXN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwljdHggPSBkYW1vbl9uZXdfY3R4KCk7CiYjNDM7CWlmICghY3R4KQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBucl93ZWlnaHRzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJcHJvYmUgPSBkYW1vbl9uZXdfcHJvYmUoKTsKJiM0MzsJCWlmICghcHJvYmUpIHsKJiM0MzsJCQlkYW1vbl9kZXN0cm95X2N0eChjdHgpOwomIzQzOwkJCXJldHVybiBOVUxMOwomIzQzOwkJfQomIzQzOwkJcHJvYmUtJmd0O3dlaWdodCA9IHdlaWdodHNbaV07CiYjNDM7CQlkYW1vbl9hZGRfcHJvYmUoY3R4LCBwcm9iZSk7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIGN0eDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsCiYjNDM7CQl1bnNpZ25lZCBpbnQgZHN0X3dlaWdodHNbXSwgaW50IG5yX2RzdF9wcm9iZXMsCiYjNDM7CQl1bnNpZ25lZCBpbnQgc3JjX3dlaWdodHNbXSwgaW50IG5yX3NyY19wcm9iZXMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsICpzcmM7CiYjNDM7CWludCBlcnI7CiYjNDM7CXN0cnVjdCBkYW1vbl9wcm9iZSAqZHN0X3Byb2JlLCAqc3JjX3Byb2JlOwomIzQzOwomIzQzOwlkc3QgPSBkYW1vbl90ZXN0X2hlbHBfc2V0dXBfcHJvYmVzKGRzdF93ZWlnaHRzLCBucl9kc3RfcHJvYmVzKTsKJiM0MzsJaWYgKCFkc3QpCiYjNDM7CQlrdW5pdF9za2lwKHRlc3QsICYjMzQ7ZHN0IGFsbG9jIGZhaWwmIzM0Oyk7CiYjNDM7CXNyYyA9IGRhbW9uX3Rlc3RfaGVscF9zZXR1cF9wcm9iZXMoc3JjX3dlaWdodHMsIG5yX3NyY19wcm9iZXMpOwomIzQzOwlpZiAoIXNyYykgewomIzQzOwkJZGFtb25fZGVzdHJveV9jdHgoZHN0KTsKJiM0MzsJCWt1bml0X3NraXAodGVzdCwgJiMzNDtzcmMgYWxsb2MgZmFpbCYjMzQ7KTsKJiM0MzsJfQomIzQzOwomIzQzOwllcnIgPSBkYW1vbl9jb21taXRfcHJvYmVzKGRzdCwgc3JjKTsKJiM0MzsJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIGVyciwgMCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm47CiYjNDM7CW5yX2RzdF9wcm9iZXMgPSAwOwomIzQzOwlkYW1vbl9mb3JfZWFjaF9wcm9iZShkc3RfcHJvYmUsIGRzdCkKJiM0MzsJCW5yX2RzdF9wcm9iZXMmIzQzOyYjNDM7OwomIzQzOwlucl9zcmNfcHJvYmVzID0gMDsKJiM0MzsJZGFtb25fZm9yX2VhY2hfcHJvYmUoc3JjX3Byb2JlLCBzcmMpCiYjNDM7CQlucl9zcmNfcHJvYmVzJiM0MzsmIzQzOzsKJiM0MzsJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIG5yX2RzdF9wcm9iZXMsIG5yX3NyY19wcm9iZXMpOwomIzQzOwlucl9kc3RfcHJvYmVzID0gMDsKJiM0MzsJZGFtb25fZm9yX2VhY2hfcHJvYmUoZHN0X3Byb2JlLCBkc3QpIHsKJiM0MzsJCXNyY19wcm9iZSA9IGRhbW9uX250aF9wcm9iZShucl9kc3RfcHJvYmVzLCBzcmMpOwomIzQzOwkJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIHNyY19wcm9iZS0mZ3Q7d2VpZ2h0LCBkc3RfcHJvYmUtJmd0O3dlaWdodCk7CiYjNDM7CQlucl9kc3RfcHJvYmVzJiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwlkYW1vbl9kZXN0cm95X2N0eChkc3QpOwomIzQzOwlkYW1vbl9kZXN0cm95X2N0eChzcmMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXMoc3RydWN0IGt1bml0ICp0ZXN0KQomIzQzO3sKJiM0MzsJZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LAomIzQzOwkJCSh1bnNpZ25lZCBpbnRbXSl7fSwgMCwgKHVuc2lnbmVkIGludFtdKXt9LCAwKTsKJiM0MzsJZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LAomIzQzOwkJCSh1bnNpZ25lZCBpbnRbXSl7fSwgMCwgKHVuc2lnbmVkIGludFtdKXsxfSwgMSk7CiYjNDM7CWRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCwKJiM0MzsJCQkodW5zaWduZWQgaW50W10pe30sIDAsICh1bnNpZ25lZCBpbnRbXSl7MSwgMn0sIDIpOwomIzQzOwlkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsCiYjNDM7CQkJKHVuc2lnbmVkIGludFtdKXsxfSwgMSwgKHVuc2lnbmVkIGludFtdKXsyfSwgMSk7CiYjNDM7CWRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCwKJiM0MzsJCQkodW5zaWduZWQgaW50W10pezF9LCAxLCAodW5zaWduZWQgaW50W10pezIsIDN9LCAyKTsKJiM0MzsJZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LAomIzQzOwkJCSh1bnNpZ25lZCBpbnRbXSl7MiwgM30sIDIsICh1bnNpZ25lZCBpbnRbXSl7MX0sIDEpOwomIzQzOwlkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsCiYjNDM7CQkJKHVuc2lnbmVkIGludFtdKXsyLCAzfSwgMiwgKHVuc2lnbmVkIGludFtdKXt9LCAwKTsKJiM0MzsJZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LAomIzQzOwkJCSh1bnNpZ25lZCBpbnRbXSl7Mn0sIDEsICh1bnNpZ25lZCBpbnRbXSl7fSwgMCk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfY3R4KHN0cnVjdCBrdW5pdCAqdGVzdCkKIHsKIAlzdHJ1Y3QgZGFtb25fY3R4ICpzcmMsICpkc3Q7CkBAIC0xNjU2LDYgJiM0MzsxNzc1LDggQEAgc3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIGRhbW9uX3Rlc3RfY2FzZXNbXSA9IHsKIAlLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfY29tbWl0X3BhZ2VvdXQpLAogCUtVTklUX0NBU0UoZGFtb3NfdGVzdF9jb21taXRfbWlncmF0ZV9ob3QpLAogCUtVTklUX0NBU0UoZGFtb25fdGVzdF9jb21taXRfdGFyZ2V0X3JlZ2lvbnMpLAomIzQzOwlLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfY29tbWl0X2ZpbHRlciksCiYjNDM7CUtVTklUX0NBU0UoZGFtb25fdGVzdF9jb21taXRfcHJvYmVzKSwKIAlLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfY29tbWl0X2N0eCksCiAJS1VOSVRfQ0FTRShkYW1vc190ZXN0X2ZpbHRlcl9vdXQpLAogCUtVTklUX0NBU0UoZGFtb25fdGVzdF9mZWVkX2xvb3BfbmV4dF9pbnB1dCksCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9fZGFtb25fc3lzZnMucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9fZGFtb25fc3lzZnMucHkKaW5kZXggZTZhMjI2NWQ3MjFlOC4uZDZhZmI1YjJmMGE0YSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vX2RhbW9uX3N5c2ZzLnB5CiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL19kYW1vbl9zeXNmcy5weQpAQCAtNTU4LDYgJiM0Mzs1NTgsMTE1IEBAIGNsYXNzIEludGVydmFsc0dvYWw6CiAgICAgICAgICAgICByZXR1cm4gZXJyCiAgICAgICAgIHJldHVybiBOb25lCiAKJiM0MztjbGFzcyBEYW1vbkZpbHRlcjoKJiM0MzsgICAgdHlwZV8gPSBOb25lCiYjNDM7ICAgIG1hdGNoaW5nID0gTm9uZQomIzQzOyAgICBhbGxvdyA9IE5vbmUKJiM0MzsgICAgZmlsdGVycyA9IE5vbmUKJiM0MzsgICAgcGF0aCA9IE5vbmUKJiM0MzsgICAgaWR4ID0gTm9uZQomIzQzOwomIzQzOyAgICBkZWYgX19pbml0X18oc2VsZiwgdHlwZV89JiMzOTthbm9uJiMzOTssIG1hdGNoaW5nPUZhbHNlLCBhbGxvdz1GYWxzZSwgcGF0aD1Ob25lKToKJiM0MzsgICAgICAgIHNlbGYudHlwZV8gPSB0eXBlXwomIzQzOyAgICAgICAgc2VsZi5tYXRjaGluZyA9IG1hdGNoaW5nCiYjNDM7ICAgICAgICBzZWxmLmFsbG93ID0gYWxsb3cKJiM0MzsgICAgICAgIHNlbGYucGF0aCA9IHBhdGgKJiM0MzsKJiM0MzsgICAgZGVmIHN5c2ZzX2RpcihzZWxmKToKJiM0MzsgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5maWx0ZXJzLnN5c2ZzX2RpcigpLCAmIzM5OyVkJiMzOTsgJSBzZWxmLmlkeCkKJiM0MzsKJiM0MzsgICAgZGVmIHN0YWdlKHNlbGYpOgomIzQzOyAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJiMzOTt0eXBlJiMzOTspLCBzZWxmLnR5cGVfKQomIzQzOyAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgICAgIHJldHVybiBlcnIKJiM0MzsgICAgICAgIGVyciA9IHdyaXRlX2ZpbGUob3MucGF0aC5qb2luKHNlbGYuc3lzZnNfZGlyKCksICYjMzk7bWF0Y2hpbmcmIzM5OyksCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICYjMzk7WSYjMzk7IGlmIHNlbGYubWF0Y2hpbmcgZWxzZSAmIzM5O04mIzM5OykKJiM0MzsgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZToKJiM0MzsgICAgICAgICAgICByZXR1cm4gZXJyCiYjNDM7ICAgICAgICBlcnIgPSB3cml0ZV9maWxlKG9zLnBhdGguam9pbihzZWxmLnN5c2ZzX2RpcigpLCAmIzM5O2FsbG93JiMzOTspLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAmIzM5O1kmIzM5OyBpZiBzZWxmLmFsbG93IGVsc2UgJiMzOTtOJiMzOTspCiYjNDM7ICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6CiYjNDM7ICAgICAgICAgICAgcmV0dXJuIGVycgomIzQzOyAgICAgICAgaWYgc2VsZi50eXBlXyA9PSAmIzM5O21lbWNnJiMzOTs6CiYjNDM7ICAgICAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJiMzOTtwYXRoJiMzOTspLCBzZWxmLnBhdGgpCiYjNDM7ICAgICAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgICAgICAgICByZXR1cm4gZXJyCiYjNDM7ICAgICAgICByZXR1cm4gTm9uZQomIzQzOwomIzQzO2NsYXNzIERhbW9uRmlsdGVyczoKJiM0MzsgICAgZmlsdGVycyA9IE5vbmUKJiM0MzsgICAgcHJvYmUgPSBOb25lCiYjNDM7CiYjNDM7ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWx0ZXJzPU5vbmUpOgomIzQzOyAgICAgICAgaWYgZmlsdGVycyBpcyBOb25lOgomIzQzOyAgICAgICAgICAgIGZpbHRlcnMgPSBbXQomIzQzOyAgICAgICAgc2VsZi5maWx0ZXJzID0gZmlsdGVycwomIzQzOyAgICAgICAgZm9yIGlkeCwgZmlsdGVyIGluIGVudW1lcmF0ZShzZWxmLmZpbHRlcnMpOgomIzQzOyAgICAgICAgICAgIGZpbHRlci5maWx0ZXJzID0gc2VsZgomIzQzOyAgICAgICAgICAgIGZpbHRlci5pZHggPSBpZHgKJiM0MzsKJiM0MzsgICAgZGVmIHN5c2ZzX2RpcihzZWxmKToKJiM0MzsgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5wcm9iZS5zeXNmc19kaXIoKSwgJiMzOTtmaWx0ZXJzJiMzOTspCiYjNDM7CiYjNDM7ICAgIGRlZiBzdGFnZShzZWxmKToKJiM0MzsgICAgICAgIGVyciA9IHdyaXRlX2ZpbGUoCiYjNDM7ICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihzZWxmLnN5c2ZzX2RpcigpLCAmIzM5O25yX2ZpbHRlcnMmIzM5OyksCiYjNDM7ICAgICAgICAgICAgICAgIGxlbihzZWxmLmZpbHRlcnMpKQomIzQzOyAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgICAgIHJldHVybiBlcnIKJiM0MzsgICAgICAgIGZvciBmaWx0ZXIgaW4gc2VsZi5maWx0ZXJzOgomIzQzOyAgICAgICAgICAgIGVyciA9IGZpbHRlci5zdGFnZSgpCiYjNDM7ICAgICAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgICAgICAgICByZXR1cm4gZXJyCiYjNDM7ICAgICAgICByZXR1cm4gTm9uZQomIzQzOwomIzQzO2NsYXNzIERhbW9uUHJvYmU6CiYjNDM7ICAgIHdlaWdodCA9IE5vbmUKJiM0MzsgICAgZmlsdGVycyA9IE5vbmUKJiM0MzsgICAgcHJvYmVzID0gTm9uZQomIzQzOyAgICBpZHggPSBOb25lCiYjNDM7CiYjNDM7ICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3ZWlnaHQ9MCwgZmlsdGVycz1Ob25lKToKJiM0MzsgICAgICAgIHNlbGYud2VpZ2h0ID0gd2VpZ2h0CiYjNDM7ICAgICAgICBpZiBmaWx0ZXJzIGlzIE5vbmU6CiYjNDM7ICAgICAgICAgICAgZmlsdGVycyA9IERhbW9uRmlsdGVycygpCiYjNDM7ICAgICAgICBzZWxmLmZpbHRlcnMgPSBmaWx0ZXJzCiYjNDM7ICAgICAgICBzZWxmLmZpbHRlcnMucHJvYmUgPSBzZWxmCiYjNDM7CiYjNDM7ICAgIGRlZiBzeXNmc19kaXIoc2VsZik6CiYjNDM7ICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYucHJvYmVzLnN5c2ZzX2RpcigpLCAmIzM5OyVkJiMzOTsgJSBzZWxmLmlkeCkKJiM0MzsKJiM0MzsgICAgZGVmIHN0YWdlKHNlbGYpOgomIzQzOyAgICAgICAgZXJyID0gd3JpdGVfZmlsZSgKJiM0MzsgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHNlbGYuc3lzZnNfZGlyKCksICYjMzk7d2VpZ2h0JiMzOTspLCAmIzM5OyVkJiMzOTsgJSBzZWxmLndlaWdodCkKJiM0MzsgICAgICAgIHJldHVybiBzZWxmLmZpbHRlcnMuc3RhZ2UoKQomIzQzOwomIzQzO2NsYXNzIERhbW9uUHJvYmVzOgomIzQzOyAgICBwcm9iZXMgPSBOb25lCiYjNDM7ICAgIGF0dHJzID0gTm9uZQomIzQzOwomIzQzOyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvYmVzPU5vbmUpOgomIzQzOyAgICAgICAgaWYgcHJvYmVzIGlzIE5vbmU6CiYjNDM7ICAgICAgICAgICAgcHJvYmVzID0gW10KJiM0MzsgICAgICAgIHNlbGYucHJvYmVzID0gcHJvYmVzCiYjNDM7ICAgICAgICBmb3IgaWR4LCBwcm9iZSBpbiBlbnVtZXJhdGUoc2VsZi5wcm9iZXMpOgomIzQzOyAgICAgICAgICAgIHByb2JlLnByb2JlcyA9IHNlbGYKJiM0MzsgICAgICAgICAgICBwcm9iZS5pZHggPSBpZHgKJiM0MzsKJiM0MzsgICAgZGVmIHN5c2ZzX2RpcihzZWxmKToKJiM0MzsgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5hdHRycy5zeXNmc19kaXIoKSwgJiMzOTtwcm9iZXMmIzM5OykKJiM0MzsKJiM0MzsgICAgZGVmIHN0YWdlKHNlbGYpOgomIzQzOyAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJiMzOTtucl9wcm9iZXMmIzM5OyksCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgIGxlbihzZWxmLnByb2JlcykpCiYjNDM7ICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6CiYjNDM7ICAgICAgICAgICAgcmV0dXJuIGVycgomIzQzOyAgICAgICAgZm9yIHByb2JlIGluIHNlbGYucHJvYmVzOgomIzQzOyAgICAgICAgICAgIGVyciA9IHByb2JlLnN0YWdlKCkKJiM0MzsgICAgICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6CiYjNDM7ICAgICAgICAgICAgICAgIHJldHVybiBlcnIKJiM0MzsgICAgICAgIHJldHVybiBOb25lCiYjNDM7CiBjbGFzcyBEYW1vbkF0dHJzOgogICAgIHNhbXBsZV91cyA9IE5vbmUKICAgICBhZ2dyX3VzID0gTm9uZQpAQCAtNTY1LDExICYjNDM7Njc0LDEyIEBAIGNsYXNzIERhbW9uQXR0cnM6CiAgICAgdXBkYXRlX3VzID0gTm9uZQogICAgIG1pbl9ucl9yZWdpb25zID0gTm9uZQogICAgIG1heF9ucl9yZWdpb25zID0gTm9uZQomIzQzOyAgICBwcm9iZXMgPSBOb25lCiAgICAgY29udGV4dCA9IE5vbmUKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzYW1wbGVfdXM9NTAwMCwgYWdncl91cz0xMDAwMDAsCiAgICAgICAgICAgICAgICAgIGludGVydmFsc19nb2FsPUludGVydmFsc0dvYWwoKSwgdXBkYXRlX3VzPTEwMDAwMDAsCi0gICAgICAgICAgICBtaW5fbnJfcmVnaW9ucz0xMCwgbWF4X25yX3JlZ2lvbnM9MTAwMCk6CiYjNDM7ICAgICAgICAgICAgbWluX25yX3JlZ2lvbnM9MTAsIG1heF9ucl9yZWdpb25zPTEwMDAsIHByb2Jlcz1Ob25lKToKICAgICAgICAgc2VsZi5zYW1wbGVfdXMgPSBzYW1wbGVfdXMKICAgICAgICAgc2VsZi5hZ2dyX3VzID0gYWdncl91cwogICAgICAgICBzZWxmLmludGVydmFsc19nb2FsID0gaW50ZXJ2YWxzX2dvYWwKQEAgLTU3Nyw2ICYjNDM7Njg3LDEwIEBAIGNsYXNzIERhbW9uQXR0cnM6CiAgICAgICAgIHNlbGYudXBkYXRlX3VzID0gdXBkYXRlX3VzCiAgICAgICAgIHNlbGYubWluX25yX3JlZ2lvbnMgPSBtaW5fbnJfcmVnaW9ucwogICAgICAgICBzZWxmLm1heF9ucl9yZWdpb25zID0gbWF4X25yX3JlZ2lvbnMKJiM0MzsgICAgICAgIGlmIHByb2JlcyBpcyBOb25lOgomIzQzOyAgICAgICAgICAgIHByb2JlcyA9IERhbW9uUHJvYmVzKCkKJiM0MzsgICAgICAgIHNlbGYucHJvYmVzID0gcHJvYmVzCiYjNDM7ICAgICAgICBzZWxmLnByb2Jlcy5hdHRycyA9IHNlbGYKIAogICAgIGRlZiBpbnRlcnZhbF9zeXNmc19kaXIoc2VsZik6CiAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5jb250ZXh0LnN5c2ZzX2RpcigpLCAmIzM5O21vbml0b3JpbmdfYXR0cnMmIzM5OywKQEAgLTU4Niw2ICYjNDM7NzAwLDkgQEAgY2xhc3MgRGFtb25BdHRyczoKICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLmNvbnRleHQuc3lzZnNfZGlyKCksICYjMzk7bW9uaXRvcmluZ19hdHRycyYjMzk7LAogICAgICAgICAgICAgICAgICYjMzk7bnJfcmVnaW9ucyYjMzk7KQogCiYjNDM7ICAgIGRlZiBzeXNmc19kaXIoc2VsZik6CiYjNDM7ICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuY29udGV4dC5zeXNmc19kaXIoKSwgJiMzOTttb25pdG9yaW5nX2F0dHJzJiMzOTspCiYjNDM7CiAgICAgZGVmIHN0YWdlKHNlbGYpOgogICAgICAgICBlcnIgPSB3cml0ZV9maWxlKG9zLnBhdGguam9pbihzZWxmLmludGVydmFsX3N5c2ZzX2RpcigpLCAmIzM5O3NhbXBsZV91cyYjMzk7KSwKICAgICAgICAgICAgICAgICBzZWxmLnNhbXBsZV91cykKQEAgLTYxNSw2ICYjNDM7NzMyLDEwIEBAIGNsYXNzIERhbW9uQXR0cnM6CiAgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHJldHVybiBlcnIKIAomIzQzOyAgICAgICAgZXJyID0gc2VsZi5wcm9iZXMuc3RhZ2UoKQomIzQzOyAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgICAgIHJldHVybiBlcnIKJiM0MzsKIGNsYXNzIERhbW9uQ3R4OgogICAgIG9wcyA9IE5vbmUKICAgICBtb25pdG9yaW5nX2F0dHJzID0gTm9uZQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vZHJnbl9kdW1wX2RhbW9uX3N0YXR1cy5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2RyZ25fZHVtcF9kYW1vbl9zdGF0dXMucHkKaW5kZXggMDk1NTJlOTFiYzc4Mi4uNDYyMjA0NmZkMDExOCAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vZHJnbl9kdW1wX2RhbW9uX3N0YXR1cy5weQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9kcmduX2R1bXBfZGFtb25fc3RhdHVzLnB5CkBAIC00OCw2ICYjNDM7NDgsMzcgQEAgZGVmIGF0dHJzX3RvX2RpY3QoYXR0cnMpOgogICAgICAgICBbJiMzOTttYXhfbnJfcmVnaW9ucyYjMzk7LCBpbnRdLAogICAgICAgICBdKQogCiYjNDM7ZGVmIGZpbHRlcl90b19kaWN0KGRhbW9uX2ZpbHRlcik6CiYjNDM7ICAgIGZpbHRlcl90eXBlX2tleXdvcmQgPSB7CiYjNDM7ICAgICAgICAgICAgMDogJiMzOTthbm9uJiMzOTssCiYjNDM7ICAgICAgICAgICAgMTogJiMzOTttZW1jZyYjMzk7LAomIzQzOyAgICAgICAgICAgIH0KJiM0MzsgICAgZGljdF8gPSB7CiYjNDM7ICAgICAgICAgICAgJiMzOTt0eXBlJiMzOTs6IGZpbHRlcl90eXBlX2tleXdvcmRbaW50KGRhbW9uX2ZpbHRlci50eXBlKV0sCiYjNDM7ICAgICAgICAgICAgJiMzOTttYXRjaGluZyYjMzk7OiBib29sKGRhbW9uX2ZpbHRlci5tYXRjaGluZyksCiYjNDM7ICAgICAgICAgICAgJiMzOTthbGxvdyYjMzk7OiBib29sKGRhbW9uX2ZpbHRlci5hbGxvdyksCiYjNDM7ICAgICAgICAgICAgfQomIzQzOyAgICB0eXBlXyA9IGRpY3RfWyYjMzk7dHlwZSYjMzk7XQomIzQzOyAgICBpZiB0eXBlXyA9PSAmIzM5O21lbWNnJiMzOTs6CiYjNDM7ICAgICAgICBkaWN0X1smIzM5O21lbWNnX2lkJiMzOTtdID0gaW50KGRhbW9uX2ZpbHRlci5tZW1jZ19pZCkKJiM0MzsgICAgcmV0dXJuIGRpY3RfCiYjNDM7CiYjNDM7ZGVmIGZpbHRlcnNfdG9fbGlzdChmaWx0ZXJzKToKJiM0MzsgICAgcmV0dXJuIFtmaWx0ZXJfdG9fZGljdChmKQomIzQzOyAgICAgICAgICAgIGZvciBmIGluIGxpc3RfZm9yX2VhY2hfZW50cnkoCiYjNDM7ICAgICAgICAgICAgICAgICYjMzk7c3RydWN0IGRhbW9uX2ZpbHRlciYjMzk7LCBmaWx0ZXJzLmFkZHJlc3Nfb2ZfKCksICYjMzk7bGlzdCYjMzk7KV0KJiM0MzsKJiM0MztkZWYgcHJvYmVfdG9fZGljdChwcm9iZSk6CiYjNDM7ICAgIHJldHVybiB0b19kaWN0KHByb2JlLCBbCiYjNDM7ICAgICAgICBbJiMzOTt3ZWlnaHQmIzM5OywgaW50XSwKJiM0MzsgICAgICAgIFsmIzM5O2ZpbHRlcnMmIzM5OywgZmlsdGVyc190b19saXN0XSwKJiM0MzsgICAgICAgIF0pCiYjNDM7CiYjNDM7ZGVmIHByb2Jlc190b19saXN0KHByb2Jlcyk6CiYjNDM7ICAgIHJldHVybiBbcHJvYmVfdG9fZGljdChwKQomIzQzOyAgICAgICAgICAgIGZvciBwIGluIGxpc3RfZm9yX2VhY2hfZW50cnkoCiYjNDM7ICAgICAgICAgICAgICAgICYjMzk7c3RydWN0IGRhbW9uX3Byb2JlJiMzOTssIHByb2Jlcy5hZGRyZXNzX29mXygpLCAmIzM5O2xpc3QmIzM5OyldCiYjNDM7CiBkZWYgYWRkcl9yYW5nZV90b19kaWN0KGFkZHJfcmFuZ2UpOgogICAgIHJldHVybiB0b19kaWN0KGFkZHJfcmFuZ2UsIFsKICAgICAgICAgWyYjMzk7c3RhcnQmIzM5OywgaW50XSwKQEAgLTE5OSw2ICYjNDM7MjMwLDcgQEAgZGVmIGRhbW9uX2N0eF90b19kaWN0KGN0eCk6CiAgICAgcmV0dXJuIHRvX2RpY3QoY3R4LCBbCiAgICAgICAgIFsmIzM5O29wcyYjMzk7LCBvcHNfdG9fZGljdF0sCiAgICAgICAgIFsmIzM5O2F0dHJzJiMzOTssIGF0dHJzX3RvX2RpY3RdLAomIzQzOyAgICAgICAgWyYjMzk7cHJvYmVzJiMzOTssIHByb2Jlc190b19saXN0XSwKICAgICAgICAgWyYjMzk7YWRhcHRpdmVfdGFyZ2V0cyYjMzk7LCB0YXJnZXRzX3RvX2xpc3RdLAogICAgICAgICBbJiMzOTtzY2hlbWVzJiMzOTssIHNjaGVtZXNfdG9fbGlzdF0sCiAgICAgICAgIFsmIzM5O3BhdXNlJiMzOTssIGJvb2xdLApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5weQppbmRleCAzZmZhMDU0YjYzODY3Li44NTJiNjg4N2E3NWNlIDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5weQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5weQpAQCAtMTc4LDYgJiM0MzsxNzgsMjQgQEAgZGVmIGFzc2VydF9tb25pdG9yaW5nX2F0dHJzX2NvbW1pdHRlZChhdHRycywgZHVtcCk6CiAgICAgYXNzZXJ0X3RydWUoZHVtcFsmIzM5O21heF9ucl9yZWdpb25zJiMzOTtdID09IGF0dHJzLm1heF9ucl9yZWdpb25zLAogICAgICAgICAgICAgICAgICYjMzk7bWF4X25yX3JlZ2lvbnMmIzM5OywgZHVtcCkKIAomIzQzO2RlZiBhc3NlcnRfZGFtb25fZmlsdGVyc19jb21taXR0ZWQoZmlsdGVycywgZHVtcCk6CiYjNDM7ICAgIGFzc2VydF90cnVlKGxlbihkdW1wKSA9PSBsZW4oZmlsdGVycy5maWx0ZXJzKSwgJiMzOTtwcm9iZSBmaWx0ZXJzJiMzOTssIGR1bXApCiYjNDM7ICAgIGZvciBpZHgsIGRhbW9uX2ZpbHRlciBpbiBlbnVtZXJhdGUoZmlsdGVycy5maWx0ZXJzKToKJiM0MzsgICAgICAgIGZpbHRlcl9kdW1wID0gZHVtcFtpZHhdCiYjNDM7ICAgICAgICBhc3NlcnRfdHJ1ZShmaWx0ZXJfZHVtcFsmIzM5O3R5cGUmIzM5O10gPT0gZGFtb25fZmlsdGVyLnR5cGVfLCAmIzM5O3R5cGUmIzM5OywKJiM0MzsgICAgICAgICAgICAgICAgICAgIGZpbHRlcl9kdW1wKQomIzQzOyAgICAgICAgYXNzZXJ0X3RydWUoZmlsdGVyX2R1bXBbJiMzOTttYXRjaGluZyYjMzk7XSA9PSBkYW1vbl9maWx0ZXIubWF0Y2hpbmcsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAmIzM5O21hdGNoaW5nJiMzOTssIGZpbHRlcl9kdW1wKQomIzQzOyAgICAgICAgYXNzZXJ0X3RydWUoZmlsdGVyX2R1bXBbJiMzOTthbGxvdyYjMzk7XSA9PSBkYW1vbl9maWx0ZXIuYWxsb3csICYjMzk7YWxsb3cmIzM5OywKJiM0MzsgICAgICAgICAgICAgICAgICAgIGZpbHRlcl9kdW1wKQomIzQzOwomIzQzO2RlZiBhc3NlcnRfcHJvYmVzX2NvbW1pdHRlZChwcm9iZXMsIGR1bXApOgomIzQzOyAgICBhc3NlcnRfdHJ1ZShsZW4oZHVtcCkgPT0gbGVuKHByb2Jlcy5wcm9iZXMpLCAmIzM5O3Byb2JlcyBsZW5ndGgmIzM5OywgZHVtcCkKJiM0MzsgICAgZm9yIGlkeCwgcHJvYmUgaW4gZW51bWVyYXRlKHByb2Jlcy5wcm9iZXMpOgomIzQzOyAgICAgICAgcHJvYmVfZHVtcCA9IGR1bXBbaWR4XQomIzQzOyAgICAgICAgYXNzZXJ0X3RydWUocHJvYmUud2VpZ2h0ID09IHByb2JlX2R1bXBbJiMzOTt3ZWlnaHQmIzM5O10sICYjMzk7d2VpZ2h0JiMzOTssIHByb2JlX2R1bXApCiYjNDM7ICAgICAgICBhc3NlcnRfZGFtb25fZmlsdGVyc19jb21taXR0ZWQocHJvYmUuZmlsdGVycywgcHJvYmVfZHVtcFsmIzM5O2ZpbHRlcnMmIzM5O10pCiYjNDM7CiBkZWYgYXNzZXJ0X21vbml0b3JpbmdfdGFyZ2V0X2NvbW1pdHRlZCh0YXJnZXQsIGR1bXApOgogICAgICMgdGFyZ2V0LnBpZCBpcyB0aGUgcGlkICYjMzQ7bnVtYmVyJiMzNDssIHdoaWxlIGR1bXBbJiMzOTtwaWQmIzM5O10gaXMgJiMzOTtzdHJ1Y3QgcGlkJiMzOTsKICAgICAjIHBvaW50ZXIsIGFuZCBoZW5jZSBjYW5ub3QgYmUgY29tcGFyZWQuCkBAIC0xOTYsNiAmIzQzOzIxNCw3IEBAIGRlZiBhc3NlcnRfY3R4X2NvbW1pdHRlZChjdHgsIGR1bXApOgogICAgICAgICAgICAgfQogICAgIGFzc2VydF90cnVlKGR1bXBbJiMzOTtvcHMmIzM5O11bJiMzOTtpZCYjMzk7XSA9PSBvcHNfdmFsW2N0eC5vcHNdLCAmIzM5O29wc19pZCYjMzk7LCBkdW1wKQogICAgIGFzc2VydF9tb25pdG9yaW5nX2F0dHJzX2NvbW1pdHRlZChjdHgubW9uaXRvcmluZ19hdHRycywgZHVtcFsmIzM5O2F0dHJzJiMzOTtdKQomIzQzOyAgICBhc3NlcnRfcHJvYmVzX2NvbW1pdHRlZChjdHgubW9uaXRvcmluZ19hdHRycy5wcm9iZXMsIGR1bXBbJiMzOTtwcm9iZXMmIzM5O10pCiAgICAgYXNzZXJ0X21vbml0b3JpbmdfdGFyZ2V0c19jb21taXR0ZWQoY3R4LnRhcmdldHMsIGR1bXBbJiMzOTthZGFwdGl2ZV90YXJnZXRzJiMzOTtdKQogICAgIGFzc2VydF9zY2hlbWVzX2NvbW1pdHRlZChjdHguc2NoZW1lcywgZHVtcFsmIzM5O3NjaGVtZXMmIzM5O10pCiAgICAgYXNzZXJ0X3RydWUoZHVtcFsmIzM5O3BhdXNlJiMzOTtdID09IGN0eC5wYXVzZSwgJiMzOTtwYXVzZSYjMzk7LCBkdW1wKQpAQCAtMzAwLDcgJiM0MzszMTksMjEgQEAgZGVmIG1haW4oKToKICAgICAgICAgICAgICAgICBpbnRlcnZhbHNfZ29hbD1fZGFtb25fc3lzZnMuSW50ZXJ2YWxzR29hbCgKICAgICAgICAgICAgICAgICAgICAgYWNjZXNzX2JwPTQwMCwgYWdncnM9MywgbWluX3NhbXBsZV91cz01MDAwLAogICAgICAgICAgICAgICAgICAgICBtYXhfc2FtcGxlX3VzPTEwMDAwMDAwKSwKLSAgICAgICAgICAgICAgICB1cGRhdGVfdXM9MjAwMDAwMCksCiYjNDM7ICAgICAgICAgICAgICAgIHVwZGF0ZV91cz0yMDAwMDAwLAomIzQzOyAgICAgICAgICAgICAgICBwcm9iZXM9X2RhbW9uX3N5c2ZzLkRhbW9uUHJvYmVzKAomIzQzOyAgICAgICAgICAgICAgICAgICAgcHJvYmVzPVtfZGFtb25fc3lzZnMuRGFtb25Qcm9iZSgKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQ9NDIsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVycz1fZGFtb25fc3lzZnMuRGFtb25GaWx0ZXJzKAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzPVsKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kYW1vbl9zeXNmcy5EYW1vbkZpbHRlcigKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlXz0mIzM5O2Fub24mIzM5OywKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGluZz1UcnVlLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93PVRydWUsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKJiM0MzsgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICBzY2hlbWVzPVtfZGFtb25fc3lzZnMuRGFtb3MoCiAgICAgICAgICAgICAgICAgYWN0aW9uPSYjMzk7cGFnZW91dCYjMzk7LAogICAgICAgICAgICAgICAgIGFjY2Vzc19wYXR0ZXJuPV9kYW1vbl9zeXNmcy5EYW1vc0FjY2Vzc1BhdHRlcm4oCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIxOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NDUKCQkJCQkJCW91dHB1dDogNTkKCQkJCQkJCXRob3VnaHRzOiA4MTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IERBTU9OIFRlc3QgU3VpdGUgQWRkaXRpb25zKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyBpbiBmcm9udCBvZiBtZSwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpczogZG9lcyB0aGlzIGludHJvZHVjZSBhbnkgKmZ1bmN0aW9uYWwqIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHdlIG5lZWQgdG8gY29uc2lkZXIgZm9yIGZ1enppbmc/IExldCYjMzk7cyBzZWUuLi4gaXQgc2VlbXMgbGlrZSBpdCYjMzk7cyB0b3VjaGluZyBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYCBhbmQgc29tZSBmaWxlcyB1bmRlciBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vYCwgc3BlY2lmaWNhbGx5IHB5dGhvbiBzY3JpcHRzOiBgX2RhbW9uX3N5c2ZzLnB5YCwgYGRyZ25fZHVtcF9kYW1vbl9zdGF0dXMucHlgLCBhbmQgYHN5c2ZzLnB5YC4gUmlnaHQgYXdheSwgdGhhdCByYWlzZXMgYSBmbGFnIOKAkyBpZiBpdCYjMzk7cyB0ZXN0IGNvZGUsIHdlIG1pZ2h0IGJlIGluIHRoZSBjbGVhci4KCkJ1dCBJIG5lZWQgdG8gYmUgKmFic29sdXRlbHkqIHN1cmUuIExldCBtZSBjb25maXJtIHRoYXQgdGhpcyBpcyAqYWxsKiB0aGUgcGF0Y2ggbW9kaWZpZXMuIERvdWJsZS1jaGVja2luZy4uLiB5dXAsIHRoYXQmIzM5O3MgaXQuIEp1c3QgS1VuaXQgdGVzdHMgYW5kIHNlbGZ0ZXN0cy4gTm8gY29yZSBrZXJuZWwgbG9naWMsIG5vIGRyaXZlcnMsIG5vIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb2RlIGhhcyBiZWVuIHRvdWNoZWQuIEl0JiMzOTtzICpwdXJlbHkqIHRlc3QgaW5mcmFzdHJ1Y3R1cmUuIE9rYXksIEnigJltIGNvbmZpcm1pbmcgdGhhdCBhZ2Fpbi4uLgoKQWxyaWdodCwgbm93IHRvIGFwcGx5IHRoZSBydWxlcy4gQW0gSSBtaXNzaW5nIGFueXRoaW5nLCBpdCBzZWVtcyBsaWtlIHRoZSBydWxlIHN0YXRlczogJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOiAuLi4gJiMzNDsgYW5kICYjMzQ7SWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4mIzM0OwoKSXQmIzM5O3MgdGVtcHRpbmcgdG8gY2F0ZWdvcml6ZSB0aGlzIGFzICYjMzQ7ZGVjb3JhdGl2ZSBjaGFuZ2VzJiMzNDsgYmVjYXVzZSwgaW4gYSB3YXksIHRlc3RzIGRvbiYjMzk7dCAqZGlyZWN0bHkqIGFsdGVyIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwsIGJ1dCB0aGVyZSYjMzk7cyBubyBzcGVjaWZpYyBidWxsZXQgZm9yIHRlc3RzLiBIb3dldmVyLCB0ZXN0cyBkb24mIzM5O3QgbW9kaWZ5IHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4gVGhlIGNoYW5nZXMgYXJlIGNvbmZpbmVkIHRvIHRoZSB0ZXN0IGhhcm5lc3MuIFNvLCBhY2NvcmRpbmcgdG8gdGhlIHJ1bGUgc2V0LCBzaW5jZSBpdCBvbmx5IGNvbnRhaW5zIHRlc3RzIEkgd2lsbCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIFRpbWUgdG8gY2FsbCBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBLVW5pdCB0ZXN0cyBhbmQgUHl0aG9uIHNlbGZ0ZXN0cyBmb3IgREFNT04gZmlsdGVycyBhbmQgcHJvYmVzLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IGZ1bmN0aW9uYWwga2VybmVsIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgS1VuaXQgdGVzdHMgYW5kIFB5dGhvbiBzZWxmdGVzdHMgZm9yIERBTU9OIGZpbHRlcnMgYW5kIHByb2Jlcy4gSXQgZG9lcyBub3QgbW9kaWZ5IGFueSBmdW5jdGlvbmFsIGtlcm5lbCBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIxOjQzOjM0Ljg1MTI2MTY3NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzNzA0MTczNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBLVW5pdCB0ZXN0cyBhbmQgUHl0aG9uIHNlbGZ0ZXN0cyBmb3IgREFNT04gZmlsdGVycyBhbmQgcHJvYmVzLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IGZ1bmN0aW9uYWwga2VybmVsIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMTo0MzozNC44NTEyNjc5NTVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNjA2MzgzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGE2ZDIxZmI5ZWNiOTM3OTE2YTkwZWUxOTJmNjhhYzcxOTJkMWFiNzNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMzAgMjE6NDM6MzQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXFxuaW5kZXggNGE1MzZkNDFjZGIyZC4uNjU3NzQxMGFjZTNkYSAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcXG4rKysgYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcXG5AQCAtMTMwNiw2ICsxMzA2LDEyNSBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF90YXJnZXRfcmVnaW9ucyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuIFxcdFxcdFxcdCh1bnNpZ25lZCBsb25nW11bMl0pIHt7MywgOH0sIHs4LCAxMH19LCAyKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfZmlsdGVyX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXFxuK1xcdFxcdHN0cnVjdCBkYW1vbl9maWx0ZXIgKmRzdCwgc3RydWN0IGRhbW9uX2ZpbHRlciAqc3JjKVxcbit7XFxuK1xcdGRhbW9uX2NvbW1pdF9maWx0ZXIoZHN0LCBzcmMpO1xcbitcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVxcdTAwM2V0eXBlLCBzcmMtXFx1MDAzZXR5cGUpO1xcbitcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVxcdTAwM2VtYXRjaGluZywgc3JjLVxcdTAwM2VtYXRjaGluZyk7XFxuK1xcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXFx1MDAzZWFsbG93LCBzcmMtXFx1MDAzZWFsbG93KTtcXG4rXFx0c3dpdGNoIChzcmMtXFx1MDAzZXR5cGUpIHtcXG4rXFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9NRU1DRzpcXG4rXFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cXHUwMDNlbWVtY2dfaWQsIHNyYy1cXHUwMDNlbWVtY2dfaWQpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfZmlsdGVyKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4re1xcbitcXHRzdHJ1Y3QgZGFtb25fZmlsdGVyIGRzdCA9IHtcXG4rXFx0XFx0LnR5cGUgPSBEQU1PTl9GSUxURVJfVFlQRV9BTk9OLFxcbitcXHRcXHQubWF0Y2hpbmcgPSBmYWxzZSxcXG4rXFx0XFx0LmFsbG93ID0gZmFsc2UsXFxuK1xcdH07XFxuK1xcbitcXHRkYW1vbl90ZXN0X2NvbW1pdF9maWx0ZXJfZm9yKHRlc3QsIFxcdTAwMjZkc3QsXFxuK1xcdFxcdFxcdFxcdTAwMjYoc3RydWN0IGRhbW9uX2ZpbHRlcil7XFxuK1xcdFxcdFxcdC50eXBlID0gREFNT05fRklMVEVSX1RZUEVfQU5PTixcXG4rXFx0XFx0XFx0Lm1hdGNoaW5nID0gdHJ1ZSxcXG4rXFx0XFx0XFx0LmFsbG93ID0gdHJ1ZSxcXG4rXFx0XFx0XFx0fSk7XFxuK1xcdGRhbW9uX3Rlc3RfY29tbWl0X2ZpbHRlcl9mb3IodGVzdCwgXFx1MDAyNmRzdCxcXG4rXFx0XFx0XFx0XFx1MDAyNihzdHJ1Y3QgZGFtb25fZmlsdGVyKXtcXG4rXFx0XFx0XFx0LnR5cGUgPSBEQU1PTl9GSUxURVJfVFlQRV9NRU1DRyxcXG4rXFx0XFx0XFx0Lm1hdGNoaW5nID0gZmFsc2UsXFxuK1xcdFxcdFxcdC5hbGxvdyA9IGZhbHNlLFxcbitcXHRcXHRcXHQubWVtY2dfaWQgPSAxMjMsXFxuK1xcdFxcdFxcdH0pO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fdGVzdF9oZWxwX3NldHVwX3Byb2Jlcyh1bnNpZ25lZCBpbnQgd2VpZ2h0c1tdLFxcbitcXHRcXHRpbnQgbnJfd2VpZ2h0cylcXG4re1xcbitcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHg7XFxuK1xcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Y3R4ID0gZGFtb25fbmV3X2N0eCgpO1xcbitcXHRpZiAoIWN0eClcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl93ZWlnaHRzOyBpKyspIHtcXG4rXFx0XFx0cHJvYmUgPSBkYW1vbl9uZXdfcHJvYmUoKTtcXG4rXFx0XFx0aWYgKCFwcm9iZSkge1xcbitcXHRcXHRcXHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xcbitcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0XFx0fVxcbitcXHRcXHRwcm9iZS1cXHUwMDNld2VpZ2h0ID0gd2VpZ2h0c1tpXTtcXG4rXFx0XFx0ZGFtb25fYWRkX3Byb2JlKGN0eCwgcHJvYmUpO1xcbitcXHR9XFxuK1xcdHJldHVybiBjdHg7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbitcXHRcXHR1bnNpZ25lZCBpbnQgZHN0X3dlaWdodHNbXSwgaW50IG5yX2RzdF9wcm9iZXMsXFxuK1xcdFxcdHVuc2lnbmVkIGludCBzcmNfd2VpZ2h0c1tdLCBpbnQgbnJfc3JjX3Byb2JlcylcXG4re1xcbitcXHRzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsICpzcmM7XFxuK1xcdGludCBlcnI7XFxuK1xcdHN0cnVjdCBkYW1vbl9wcm9iZSAqZHN0X3Byb2JlLCAqc3JjX3Byb2JlO1xcbitcXG4rXFx0ZHN0ID0gZGFtb25fdGVzdF9oZWxwX3NldHVwX3Byb2Jlcyhkc3Rfd2VpZ2h0cywgbnJfZHN0X3Byb2Jlcyk7XFxuK1xcdGlmICghZHN0KVxcbitcXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJkc3QgYWxsb2MgZmFpbFxcXCIpO1xcbitcXHRzcmMgPSBkYW1vbl90ZXN0X2hlbHBfc2V0dXBfcHJvYmVzKHNyY193ZWlnaHRzLCBucl9zcmNfcHJvYmVzKTtcXG4rXFx0aWYgKCFzcmMpIHtcXG4rXFx0XFx0ZGFtb25fZGVzdHJveV9jdHgoZHN0KTtcXG4rXFx0XFx0a3VuaXRfc2tpcCh0ZXN0LCBcXFwic3JjIGFsbG9jIGZhaWxcXFwiKTtcXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gZGFtb25fY29tbWl0X3Byb2Jlcyhkc3QsIHNyYyk7XFxuK1xcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBlcnIsIDApO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdG5yX2RzdF9wcm9iZXMgPSAwO1xcbitcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShkc3RfcHJvYmUsIGRzdClcXG4rXFx0XFx0bnJfZHN0X3Byb2JlcysrO1xcbitcXHRucl9zcmNfcHJvYmVzID0gMDtcXG4rXFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUoc3JjX3Byb2JlLCBzcmMpXFxuK1xcdFxcdG5yX3NyY19wcm9iZXMrKztcXG4rXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIG5yX2RzdF9wcm9iZXMsIG5yX3NyY19wcm9iZXMpO1xcbitcXHRucl9kc3RfcHJvYmVzID0gMDtcXG4rXFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUoZHN0X3Byb2JlLCBkc3QpIHtcXG4rXFx0XFx0c3JjX3Byb2JlID0gZGFtb25fbnRoX3Byb2JlKG5yX2RzdF9wcm9iZXMsIHNyYyk7XFxuK1xcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzcmNfcHJvYmUtXFx1MDAzZXdlaWdodCwgZHN0X3Byb2JlLVxcdTAwM2V3ZWlnaHQpO1xcbitcXHRcXHRucl9kc3RfcHJvYmVzKys7XFxuK1xcdH1cXG4rXFx0ZGFtb25fZGVzdHJveV9jdHgoZHN0KTtcXG4rXFx0ZGFtb25fZGVzdHJveV9jdHgoc3JjKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfcHJvYmVzKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4re1xcbitcXHRkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsXFxuK1xcdFxcdFxcdCh1bnNpZ25lZCBpbnRbXSl7fSwgMCwgKHVuc2lnbmVkIGludFtdKXt9LCAwKTtcXG4rXFx0ZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LFxcbitcXHRcXHRcXHQodW5zaWduZWQgaW50W10pe30sIDAsICh1bnNpZ25lZCBpbnRbXSl7MX0sIDEpO1xcbitcXHRkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsXFxuK1xcdFxcdFxcdCh1bnNpZ25lZCBpbnRbXSl7fSwgMCwgKHVuc2lnbmVkIGludFtdKXsxLCAyfSwgMik7XFxuK1xcdGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCxcXG4rXFx0XFx0XFx0KHVuc2lnbmVkIGludFtdKXsxfSwgMSwgKHVuc2lnbmVkIGludFtdKXsyfSwgMSk7XFxuK1xcdGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCxcXG4rXFx0XFx0XFx0KHVuc2lnbmVkIGludFtdKXsxfSwgMSwgKHVuc2lnbmVkIGludFtdKXsyLCAzfSwgMik7XFxuK1xcdGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCxcXG4rXFx0XFx0XFx0KHVuc2lnbmVkIGludFtdKXsyLCAzfSwgMiwgKHVuc2lnbmVkIGludFtdKXsxfSwgMSk7XFxuK1xcdGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCxcXG4rXFx0XFx0XFx0KHVuc2lnbmVkIGludFtdKXsyLCAzfSwgMiwgKHVuc2lnbmVkIGludFtdKXt9LCAwKTtcXG4rXFx0ZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LFxcbitcXHRcXHRcXHQodW5zaWduZWQgaW50W10pezJ9LCAxLCAodW5zaWduZWQgaW50W10pe30sIDApO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF9jdHgoc3RydWN0IGt1bml0ICp0ZXN0KVxcbiB7XFxuIFxcdHN0cnVjdCBkYW1vbl9jdHggKnNyYywgKmRzdDtcXG5AQCAtMTY1Niw2ICsxNzc1LDggQEAgc3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIGRhbW9uX3Rlc3RfY2FzZXNbXSA9IHtcXG4gXFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9wYWdlb3V0KSxcXG4gXFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9taWdyYXRlX2hvdCksXFxuIFxcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9jb21taXRfdGFyZ2V0X3JlZ2lvbnMpLFxcbitcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfY29tbWl0X2ZpbHRlciksXFxuK1xcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9jb21taXRfcHJvYmVzKSxcXG4gXFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X2NvbW1pdF9jdHgpLFxcbiBcXHRLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfZmlsdGVyX291dCksXFxuIFxcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9mZWVkX2xvb3BfbmV4dF9pbnB1dCksXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL19kYW1vbl9zeXNmcy5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL19kYW1vbl9zeXNmcy5weVxcbmluZGV4IGU2YTIyNjVkNzIxZTguLmQ2YWZiNWIyZjBhNGEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vX2RhbW9uX3N5c2ZzLnB5XFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vX2RhbW9uX3N5c2ZzLnB5XFxuQEAgLTU1OCw2ICs1NTgsMTE1IEBAIGNsYXNzIEludGVydmFsc0dvYWw6XFxuICAgICAgICAgICAgIHJldHVybiBlcnJcXG4gICAgICAgICByZXR1cm4gTm9uZVxcbiBcXG4rY2xhc3MgRGFtb25GaWx0ZXI6XFxuKyAgICB0eXBlXyA9IE5vbmVcXG4rICAgIG1hdGNoaW5nID0gTm9uZVxcbisgICAgYWxsb3cgPSBOb25lXFxuKyAgICBmaWx0ZXJzID0gTm9uZVxcbisgICAgcGF0aCA9IE5vbmVcXG4rICAgIGlkeCA9IE5vbmVcXG4rXFxuKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHlwZV89J2Fub24nLCBtYXRjaGluZz1GYWxzZSwgYWxsb3c9RmFsc2UsIHBhdGg9Tm9uZSk6XFxuKyAgICAgICAgc2VsZi50eXBlXyA9IHR5cGVfXFxuKyAgICAgICAgc2VsZi5tYXRjaGluZyA9IG1hdGNoaW5nXFxuKyAgICAgICAgc2VsZi5hbGxvdyA9IGFsbG93XFxuKyAgICAgICAgc2VsZi5wYXRoID0gcGF0aFxcbitcXG4rICAgIGRlZiBzeXNmc19kaXIoc2VsZik6XFxuKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLmZpbHRlcnMuc3lzZnNfZGlyKCksICclZCcgJSBzZWxmLmlkeClcXG4rXFxuKyAgICBkZWYgc3RhZ2Uoc2VsZik6XFxuKyAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJ3R5cGUnKSwgc2VsZi50eXBlXylcXG4rICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6XFxuKyAgICAgICAgICAgIHJldHVybiBlcnJcXG4rICAgICAgICBlcnIgPSB3cml0ZV9maWxlKG9zLnBhdGguam9pbihzZWxmLnN5c2ZzX2RpcigpLCAnbWF0Y2hpbmcnKSxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICdZJyBpZiBzZWxmLm1hdGNoaW5nIGVsc2UgJ04nKVxcbisgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZTpcXG4rICAgICAgICAgICAgcmV0dXJuIGVyclxcbisgICAgICAgIGVyciA9IHdyaXRlX2ZpbGUob3MucGF0aC5qb2luKHNlbGYuc3lzZnNfZGlyKCksICdhbGxvdycpLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgJ1knIGlmIHNlbGYuYWxsb3cgZWxzZSAnTicpXFxuKyAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOlxcbisgICAgICAgICAgICByZXR1cm4gZXJyXFxuKyAgICAgICAgaWYgc2VsZi50eXBlXyA9PSAnbWVtY2cnOlxcbisgICAgICAgICAgICBlcnIgPSB3cml0ZV9maWxlKG9zLnBhdGguam9pbihzZWxmLnN5c2ZzX2RpcigpLCAncGF0aCcpLCBzZWxmLnBhdGgpXFxuKyAgICAgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZTpcXG4rICAgICAgICAgICAgICAgIHJldHVybiBlcnJcXG4rICAgICAgICByZXR1cm4gTm9uZVxcbitcXG4rY2xhc3MgRGFtb25GaWx0ZXJzOlxcbisgICAgZmlsdGVycyA9IE5vbmVcXG4rICAgIHByb2JlID0gTm9uZVxcbitcXG4rICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWx0ZXJzPU5vbmUpOlxcbisgICAgICAgIGlmIGZpbHRlcnMgaXMgTm9uZTpcXG4rICAgICAgICAgICAgZmlsdGVycyA9IFtdXFxuKyAgICAgICAgc2VsZi5maWx0ZXJzID0gZmlsdGVyc1xcbisgICAgICAgIGZvciBpZHgsIGZpbHRlciBpbiBlbnVtZXJhdGUoc2VsZi5maWx0ZXJzKTpcXG4rICAgICAgICAgICAgZmlsdGVyLmZpbHRlcnMgPSBzZWxmXFxuKyAgICAgICAgICAgIGZpbHRlci5pZHggPSBpZHhcXG4rXFxuKyAgICBkZWYgc3lzZnNfZGlyKHNlbGYpOlxcbisgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5wcm9iZS5zeXNmc19kaXIoKSwgJ2ZpbHRlcnMnKVxcbitcXG4rICAgIGRlZiBzdGFnZShzZWxmKTpcXG4rICAgICAgICBlcnIgPSB3cml0ZV9maWxlKFxcbisgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHNlbGYuc3lzZnNfZGlyKCksICducl9maWx0ZXJzJyksXFxuKyAgICAgICAgICAgICAgICBsZW4oc2VsZi5maWx0ZXJzKSlcXG4rICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6XFxuKyAgICAgICAgICAgIHJldHVybiBlcnJcXG4rICAgICAgICBmb3IgZmlsdGVyIGluIHNlbGYuZmlsdGVyczpcXG4rICAgICAgICAgICAgZXJyID0gZmlsdGVyLnN0YWdlKClcXG4rICAgICAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOlxcbisgICAgICAgICAgICAgICAgcmV0dXJuIGVyclxcbisgICAgICAgIHJldHVybiBOb25lXFxuK1xcbitjbGFzcyBEYW1vblByb2JlOlxcbisgICAgd2VpZ2h0ID0gTm9uZVxcbisgICAgZmlsdGVycyA9IE5vbmVcXG4rICAgIHByb2JlcyA9IE5vbmVcXG4rICAgIGlkeCA9IE5vbmVcXG4rXFxuKyAgICBkZWYgX19pbml0X18oc2VsZiwgd2VpZ2h0PTAsIGZpbHRlcnM9Tm9uZSk6XFxuKyAgICAgICAgc2VsZi53ZWlnaHQgPSB3ZWlnaHRcXG4rICAgICAgICBpZiBmaWx0ZXJzIGlzIE5vbmU6XFxuKyAgICAgICAgICAgIGZpbHRlcnMgPSBEYW1vbkZpbHRlcnMoKVxcbisgICAgICAgIHNlbGYuZmlsdGVycyA9IGZpbHRlcnNcXG4rICAgICAgICBzZWxmLmZpbHRlcnMucHJvYmUgPSBzZWxmXFxuK1xcbisgICAgZGVmIHN5c2ZzX2RpcihzZWxmKTpcXG4rICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYucHJvYmVzLnN5c2ZzX2RpcigpLCAnJWQnICUgc2VsZi5pZHgpXFxuK1xcbisgICAgZGVmIHN0YWdlKHNlbGYpOlxcbisgICAgICAgIGVyciA9IHdyaXRlX2ZpbGUoXFxuKyAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJ3dlaWdodCcpLCAnJWQnICUgc2VsZi53ZWlnaHQpXFxuKyAgICAgICAgcmV0dXJuIHNlbGYuZmlsdGVycy5zdGFnZSgpXFxuK1xcbitjbGFzcyBEYW1vblByb2JlczpcXG4rICAgIHByb2JlcyA9IE5vbmVcXG4rICAgIGF0dHJzID0gTm9uZVxcbitcXG4rICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9iZXM9Tm9uZSk6XFxuKyAgICAgICAgaWYgcHJvYmVzIGlzIE5vbmU6XFxuKyAgICAgICAgICAgIHByb2JlcyA9IFtdXFxuKyAgICAgICAgc2VsZi5wcm9iZXMgPSBwcm9iZXNcXG4rICAgICAgICBmb3IgaWR4LCBwcm9iZSBpbiBlbnVtZXJhdGUoc2VsZi5wcm9iZXMpOlxcbisgICAgICAgICAgICBwcm9iZS5wcm9iZXMgPSBzZWxmXFxuKyAgICAgICAgICAgIHByb2JlLmlkeCA9IGlkeFxcbitcXG4rICAgIGRlZiBzeXNmc19kaXIoc2VsZik6XFxuKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLmF0dHJzLnN5c2ZzX2RpcigpLCAncHJvYmVzJylcXG4rXFxuKyAgICBkZWYgc3RhZ2Uoc2VsZik6XFxuKyAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJ25yX3Byb2JlcycpLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKHNlbGYucHJvYmVzKSlcXG4rICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6XFxuKyAgICAgICAgICAgIHJldHVybiBlcnJcXG4rICAgICAgICBmb3IgcHJvYmUgaW4gc2VsZi5wcm9iZXM6XFxuKyAgICAgICAgICAgIGVyciA9IHByb2JlLnN0YWdlKClcXG4rICAgICAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOlxcbisgICAgICAgICAgICAgICAgcmV0dXJuIGVyclxcbisgICAgICAgIHJldHVybiBOb25lXFxuK1xcbiBjbGFzcyBEYW1vbkF0dHJzOlxcbiAgICAgc2FtcGxlX3VzID0gTm9uZVxcbiAgICAgYWdncl91cyA9IE5vbmVcXG5AQCAtNTY1LDExICs2NzQsMTIgQEAgY2xhc3MgRGFtb25BdHRyczpcXG4gICAgIHVwZGF0ZV91cyA9IE5vbmVcXG4gICAgIG1pbl9ucl9yZWdpb25zID0gTm9uZVxcbiAgICAgbWF4X25yX3JlZ2lvbnMgPSBOb25lXFxuKyAgICBwcm9iZXMgPSBOb25lXFxuICAgICBjb250ZXh0ID0gTm9uZVxcbiBcXG4gICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzYW1wbGVfdXM9NTAwMCwgYWdncl91cz0xMDAwMDAsXFxuICAgICAgICAgICAgICAgICAgaW50ZXJ2YWxzX2dvYWw9SW50ZXJ2YWxzR29hbCgpLCB1cGRhdGVfdXM9MTAwMDAwMCxcXG4tICAgICAgICAgICAgbWluX25yX3JlZ2lvbnM9MTAsIG1heF9ucl9yZWdpb25zPTEwMDApOlxcbisgICAgICAgICAgICBtaW5fbnJfcmVnaW9ucz0xMCwgbWF4X25yX3JlZ2lvbnM9MTAwMCwgcHJvYmVzPU5vbmUpOlxcbiAgICAgICAgIHNlbGYuc2FtcGxlX3VzID0gc2FtcGxlX3VzXFxuICAgICAgICAgc2VsZi5hZ2dyX3VzID0gYWdncl91c1xcbiAgICAgICAgIHNlbGYuaW50ZXJ2YWxzX2dvYWwgPSBpbnRlcnZhbHNfZ29hbFxcbkBAIC01NzcsNiArNjg3LDEwIEBAIGNsYXNzIERhbW9uQXR0cnM6XFxuICAgICAgICAgc2VsZi51cGRhdGVfdXMgPSB1cGRhdGVfdXNcXG4gICAgICAgICBzZWxmLm1pbl9ucl9yZWdpb25zID0gbWluX25yX3JlZ2lvbnNcXG4gICAgICAgICBzZWxmLm1heF9ucl9yZWdpb25zID0gbWF4X25yX3JlZ2lvbnNcXG4rICAgICAgICBpZiBwcm9iZXMgaXMgTm9uZTpcXG4rICAgICAgICAgICAgcHJvYmVzID0gRGFtb25Qcm9iZXMoKVxcbisgICAgICAgIHNlbGYucHJvYmVzID0gcHJvYmVzXFxuKyAgICAgICAgc2VsZi5wcm9iZXMuYXR0cnMgPSBzZWxmXFxuIFxcbiAgICAgZGVmIGludGVydmFsX3N5c2ZzX2RpcihzZWxmKTpcXG4gICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuY29udGV4dC5zeXNmc19kaXIoKSwgJ21vbml0b3JpbmdfYXR0cnMnLFxcbkBAIC01ODYsNiArNzAwLDkgQEAgY2xhc3MgRGFtb25BdHRyczpcXG4gICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuY29udGV4dC5zeXNmc19kaXIoKSwgJ21vbml0b3JpbmdfYXR0cnMnLFxcbiAgICAgICAgICAgICAgICAgJ25yX3JlZ2lvbnMnKVxcbiBcXG4rICAgIGRlZiBzeXNmc19kaXIoc2VsZik6XFxuKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLmNvbnRleHQuc3lzZnNfZGlyKCksICdtb25pdG9yaW5nX2F0dHJzJylcXG4rXFxuICAgICBkZWYgc3RhZ2Uoc2VsZik6XFxuICAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5pbnRlcnZhbF9zeXNmc19kaXIoKSwgJ3NhbXBsZV91cycpLFxcbiAgICAgICAgICAgICAgICAgc2VsZi5zYW1wbGVfdXMpXFxuQEAgLTYxNSw2ICs3MzIsMTAgQEAgY2xhc3MgRGFtb25BdHRyczpcXG4gICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6XFxuICAgICAgICAgICAgIHJldHVybiBlcnJcXG4gXFxuKyAgICAgICAgZXJyID0gc2VsZi5wcm9iZXMuc3RhZ2UoKVxcbisgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZTpcXG4rICAgICAgICAgICAgcmV0dXJuIGVyclxcbitcXG4gY2xhc3MgRGFtb25DdHg6XFxuICAgICBvcHMgPSBOb25lXFxuICAgICBtb25pdG9yaW5nX2F0dHJzID0gTm9uZVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9kcmduX2R1bXBfZGFtb25fc3RhdHVzLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vZHJnbl9kdW1wX2RhbW9uX3N0YXR1cy5weVxcbmluZGV4IDA5NTUyZTkxYmM3ODIuLjQ2MjIwNDZmZDAxMTggMTAwNzU1XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vZHJnbl9kdW1wX2RhbW9uX3N0YXR1cy5weVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2RyZ25fZHVtcF9kYW1vbl9zdGF0dXMucHlcXG5AQCAtNDgsNiArNDgsMzcgQEAgZGVmIGF0dHJzX3RvX2RpY3QoYXR0cnMpOlxcbiAgICAgICAgIFsnbWF4X25yX3JlZ2lvbnMnLCBpbnRdLFxcbiAgICAgICAgIF0pXFxuIFxcbitkZWYgZmlsdGVyX3RvX2RpY3QoZGFtb25fZmlsdGVyKTpcXG4rICAgIGZpbHRlcl90eXBlX2tleXdvcmQgPSB7XFxuKyAgICAgICAgICAgIDA6ICdhbm9uJyxcXG4rICAgICAgICAgICAgMTogJ21lbWNnJyxcXG4rICAgICAgICAgICAgfVxcbisgICAgZGljdF8gPSB7XFxuKyAgICAgICAgICAgICd0eXBlJzogZmlsdGVyX3R5cGVfa2V5d29yZFtpbnQoZGFtb25fZmlsdGVyLnR5cGUpXSxcXG4rICAgICAgICAgICAgJ21hdGNoaW5nJzogYm9vbChkYW1vbl9maWx0ZXIubWF0Y2hpbmcpLFxcbisgICAgICAgICAgICAnYWxsb3cnOiBib29sKGRhbW9uX2ZpbHRlci5hbGxvdyksXFxuKyAgICAgICAgICAgIH1cXG4rICAgIHR5cGVfID0gZGljdF9bJ3R5cGUnXVxcbisgICAgaWYgdHlwZV8gPT0gJ21lbWNnJzpcXG4rICAgICAgICBkaWN0X1snbWVtY2dfaWQnXSA9IGludChkYW1vbl9maWx0ZXIubWVtY2dfaWQpXFxuKyAgICByZXR1cm4gZGljdF9cXG4rXFxuK2RlZiBmaWx0ZXJzX3RvX2xpc3QoZmlsdGVycyk6XFxuKyAgICByZXR1cm4gW2ZpbHRlcl90b19kaWN0KGYpXFxuKyAgICAgICAgICAgIGZvciBmIGluIGxpc3RfZm9yX2VhY2hfZW50cnkoXFxuKyAgICAgICAgICAgICAgICAnc3RydWN0IGRhbW9uX2ZpbHRlcicsIGZpbHRlcnMuYWRkcmVzc19vZl8oKSwgJ2xpc3QnKV1cXG4rXFxuK2RlZiBwcm9iZV90b19kaWN0KHByb2JlKTpcXG4rICAgIHJldHVybiB0b19kaWN0KHByb2JlLCBbXFxuKyAgICAgICAgWyd3ZWlnaHQnLCBpbnRdLFxcbisgICAgICAgIFsnZmlsdGVycycsIGZpbHRlcnNfdG9fbGlzdF0sXFxuKyAgICAgICAgXSlcXG4rXFxuK2RlZiBwcm9iZXNfdG9fbGlzdChwcm9iZXMpOlxcbisgICAgcmV0dXJuIFtwcm9iZV90b19kaWN0KHApXFxuKyAgICAgICAgICAgIGZvciBwIGluIGxpc3RfZm9yX2VhY2hfZW50cnkoXFxuKyAgICAgICAgICAgICAgICAnc3RydWN0IGRhbW9uX3Byb2JlJywgcHJvYmVzLmFkZHJlc3Nfb2ZfKCksICdsaXN0JyldXFxuK1xcbiBkZWYgYWRkcl9yYW5nZV90b19kaWN0KGFkZHJfcmFuZ2UpOlxcbiAgICAgcmV0dXJuIHRvX2RpY3QoYWRkcl9yYW5nZSwgW1xcbiAgICAgICAgIFsnc3RhcnQnLCBpbnRdLFxcbkBAIC0xOTksNiArMjMwLDcgQEAgZGVmIGRhbW9uX2N0eF90b19kaWN0KGN0eCk6XFxuICAgICByZXR1cm4gdG9fZGljdChjdHgsIFtcXG4gICAgICAgICBbJ29wcycsIG9wc190b19kaWN0XSxcXG4gICAgICAgICBbJ2F0dHJzJywgYXR0cnNfdG9fZGljdF0sXFxuKyAgICAgICAgWydwcm9iZXMnLCBwcm9iZXNfdG9fbGlzdF0sXFxuICAgICAgICAgWydhZGFwdGl2ZV90YXJnZXRzJywgdGFyZ2V0c190b19saXN0XSxcXG4gICAgICAgICBbJ3NjaGVtZXMnLCBzY2hlbWVzX3RvX2xpc3RdLFxcbiAgICAgICAgIFsncGF1c2UnLCBib29sXSxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5weVxcbmluZGV4IDNmZmEwNTRiNjM4NjcuLjg1MmI2ODg3YTc1Y2UgMTAwNzU1XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMucHlcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5weVxcbkBAIC0xNzgsNiArMTc4LDI0IEBAIGRlZiBhc3NlcnRfbW9uaXRvcmluZ19hdHRyc19jb21taXR0ZWQoYXR0cnMsIGR1bXApOlxcbiAgICAgYXNzZXJ0X3RydWUoZHVtcFsnbWF4X25yX3JlZ2lvbnMnXSA9PSBhdHRycy5tYXhfbnJfcmVnaW9ucyxcXG4gICAgICAgICAgICAgICAgICdtYXhfbnJfcmVnaW9ucycsIGR1bXApXFxuIFxcbitkZWYgYXNzZXJ0X2RhbW9uX2ZpbHRlcnNfY29tbWl0dGVkKGZpbHRlcnMsIGR1bXApOlxcbisgICAgYXNzZXJ0X3RydWUobGVuKGR1bXApID09IGxlbihmaWx0ZXJzLmZpbHRlcnMpLCAncHJvYmUgZmlsdGVycycsIGR1bXApXFxuKyAgICBmb3IgaWR4LCBkYW1vbl9maWx0ZXIgaW4gZW51bWVyYXRlKGZpbHRlcnMuZmlsdGVycyk6XFxuKyAgICAgICAgZmlsdGVyX2R1bXAgPSBkdW1wW2lkeF1cXG4rICAgICAgICBhc3NlcnRfdHJ1ZShmaWx0ZXJfZHVtcFsndHlwZSddID09IGRhbW9uX2ZpbHRlci50eXBlXywgJ3R5cGUnLFxcbisgICAgICAgICAgICAgICAgICAgIGZpbHRlcl9kdW1wKVxcbisgICAgICAgIGFzc2VydF90cnVlKGZpbHRlcl9kdW1wWydtYXRjaGluZyddID09IGRhbW9uX2ZpbHRlci5tYXRjaGluZyxcXG4rICAgICAgICAgICAgICAgICAgICAnbWF0Y2hpbmcnLCBmaWx0ZXJfZHVtcClcXG4rICAgICAgICBhc3NlcnRfdHJ1ZShmaWx0ZXJfZHVtcFsnYWxsb3cnXSA9PSBkYW1vbl9maWx0ZXIuYWxsb3csICdhbGxvdycsXFxuKyAgICAgICAgICAgICAgICAgICAgZmlsdGVyX2R1bXApXFxuK1xcbitkZWYgYXNzZXJ0X3Byb2Jlc19jb21taXR0ZWQocHJvYmVzLCBkdW1wKTpcXG4rICAgIGFzc2VydF90cnVlKGxlbihkdW1wKSA9PSBsZW4ocHJvYmVzLnByb2JlcyksICdwcm9iZXMgbGVuZ3RoJywgZHVtcClcXG4rICAgIGZvciBpZHgsIHByb2JlIGluIGVudW1lcmF0ZShwcm9iZXMucHJvYmVzKTpcXG4rICAgICAgICBwcm9iZV9kdW1wID0gZHVtcFtpZHhdXFxuKyAgICAgICAgYXNzZXJ0X3RydWUocHJvYmUud2VpZ2h0ID09IHByb2JlX2R1bXBbJ3dlaWdodCddLCAnd2VpZ2h0JywgcHJvYmVfZHVtcClcXG4rICAgICAgICBhc3NlcnRfZGFtb25fZmlsdGVyc19jb21taXR0ZWQocHJvYmUuZmlsdGVycywgcHJvYmVfZHVtcFsnZmlsdGVycyddKVxcbitcXG4gZGVmIGFzc2VydF9tb25pdG9yaW5nX3RhcmdldF9jb21taXR0ZWQodGFyZ2V0LCBkdW1wKTpcXG4gICAgICMgdGFyZ2V0LnBpZCBpcyB0aGUgcGlkIFxcXCJudW1iZXJcXFwiLCB3aGlsZSBkdW1wWydwaWQnXSBpcyAnc3RydWN0IHBpZCdcXG4gICAgICMgcG9pbnRlciwgYW5kIGhlbmNlIGNhbm5vdCBiZSBjb21wYXJlZC5cXG5AQCAtMTk2LDYgKzIxNCw3IEBAIGRlZiBhc3NlcnRfY3R4X2NvbW1pdHRlZChjdHgsIGR1bXApOlxcbiAgICAgICAgICAgICB9XFxuICAgICBhc3NlcnRfdHJ1ZShkdW1wWydvcHMnXVsnaWQnXSA9PSBvcHNfdmFsW2N0eC5vcHNdLCAnb3BzX2lkJywgZHVtcClcXG4gICAgIGFzc2VydF9tb25pdG9yaW5nX2F0dHJzX2NvbW1pdHRlZChjdHgubW9uaXRvcmluZ19hdHRycywgZHVtcFsnYXR0cnMnXSlcXG4rICAgIGFzc2VydF9wcm9iZXNfY29tbWl0dGVkKGN0eC5tb25pdG9yaW5nX2F0dHJzLnByb2JlcywgZHVtcFsncHJvYmVzJ10pXFxuICAgICBhc3NlcnRfbW9uaXRvcmluZ190YXJnZXRzX2NvbW1pdHRlZChjdHgudGFyZ2V0cywgZHVtcFsnYWRhcHRpdmVfdGFyZ2V0cyddKVxcbiAgICAgYXNzZXJ0X3NjaGVtZXNfY29tbWl0dGVkKGN0eC5zY2hlbWVzLCBkdW1wWydzY2hlbWVzJ10pXFxuICAgICBhc3NlcnRfdHJ1ZShkdW1wWydwYXVzZSddID09IGN0eC5wYXVzZSwgJ3BhdXNlJywgZHVtcClcXG5AQCAtMzAwLDcgKzMxOSwyMSBAQCBkZWYgbWFpbigpOlxcbiAgICAgICAgICAgICAgICAgaW50ZXJ2YWxzX2dvYWw9X2RhbW9uX3N5c2ZzLkludGVydmFsc0dvYWwoXFxuICAgICAgICAgICAgICAgICAgICAgYWNjZXNzX2JwPTQwMCwgYWdncnM9MywgbWluX3NhbXBsZV91cz01MDAwLFxcbiAgICAgICAgICAgICAgICAgICAgIG1heF9zYW1wbGVfdXM9MTAwMDAwMDApLFxcbi0gICAgICAgICAgICAgICAgdXBkYXRlX3VzPTIwMDAwMDApLFxcbisgICAgICAgICAgICAgICAgdXBkYXRlX3VzPTIwMDAwMDAsXFxuKyAgICAgICAgICAgICAgICBwcm9iZXM9X2RhbW9uX3N5c2ZzLkRhbW9uUHJvYmVzKFxcbisgICAgICAgICAgICAgICAgICAgIHByb2Jlcz1bX2RhbW9uX3N5c2ZzLkRhbW9uUHJvYmUoXFxuKyAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodD00MixcXG4rICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVycz1fZGFtb25fc3lzZnMuRGFtb25GaWx0ZXJzKFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVycz1bXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2RhbW9uX3N5c2ZzLkRhbW9uRmlsdGVyKFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlXz0nYW5vbicsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoaW5nPVRydWUsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93PVRydWUsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXFxuKyAgICAgICAgICAgICAgICAgICAgKSxcXG4gICAgICAgICAgICAgc2NoZW1lcz1bX2RhbW9uX3N5c2ZzLkRhbW9zKFxcbiAgICAgICAgICAgICAgICAgYWN0aW9uPSdwYWdlb3V0JyxcXG4gICAgICAgICAgICAgICAgIGFjY2Vzc19wYXR0ZXJuPV9kYW1vbl9zeXNmcy5EYW1vc0FjY2Vzc1BhdHRlcm4oXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIxOjQzOjM1LjE4Nzk2NjY1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTAzMzcwNjIxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIEtVbml0IHRlc3RzIGFuZCBQeXRob24gc2VsZnRlc3RzIGZvciBEQU1PTiBmaWx0ZXJzIGFuZCBwcm9iZXMuIEl0IGRvZXMgbm90IG1vZGlmeSBhbnkgZnVuY3Rpb25hbCBrZXJuZWwgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGE2ZDIxZmI5ZWNiOTM3OTE2YTkwZWUxOTJmNjhhYzcxOTJkMWFiNzNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAzMCAyMTo0MzozNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaCBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuaW5kZXggNGE1MzZkNDFjZGIyZC4uNjU3NzQxMGFjZTNkYSAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuKysrIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG5AQCAtMTMwNiw2ICsxMzA2LDEyNSBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF90YXJnZXRfcmVnaW9ucyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRcdFx0KHVuc2lnbmVkIGxvbmdbXVsyXSkge3szLCA4fSwgezgsIDEwfX0sIDIpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF9maWx0ZXJfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcbitcdFx0c3RydWN0IGRhbW9uX2ZpbHRlciAqZHN0LCBzdHJ1Y3QgZGFtb25fZmlsdGVyICpzcmMpXG4re1xuK1x0ZGFtb25fY29tbWl0X2ZpbHRlcihkc3QsIHNyYyk7XG4rXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVx1MDAzZXR5cGUsIHNyYy1cdTAwM2V0eXBlKTtcbitcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNlbWF0Y2hpbmcsIHNyYy1cdTAwM2VtYXRjaGluZyk7XG4rXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVx1MDAzZWFsbG93LCBzcmMtXHUwMDNlYWxsb3cpO1xuK1x0c3dpdGNoIChzcmMtXHUwMDNldHlwZSkge1xuK1x0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9NRU1DRzpcbitcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cdTAwM2VtZW1jZ19pZCwgc3JjLVx1MDAzZW1lbWNnX2lkKTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRicmVhaztcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfZmlsdGVyKHN0cnVjdCBrdW5pdCAqdGVzdClcbit7XG4rXHRzdHJ1Y3QgZGFtb25fZmlsdGVyIGRzdCA9IHtcbitcdFx0LnR5cGUgPSBEQU1PTl9GSUxURVJfVFlQRV9BTk9OLFxuK1x0XHQubWF0Y2hpbmcgPSBmYWxzZSxcbitcdFx0LmFsbG93ID0gZmFsc2UsXG4rXHR9O1xuK1xuK1x0ZGFtb25fdGVzdF9jb21taXRfZmlsdGVyX2Zvcih0ZXN0LCBcdTAwMjZkc3QsXG4rXHRcdFx0XHUwMDI2KHN0cnVjdCBkYW1vbl9maWx0ZXIpe1xuK1x0XHRcdC50eXBlID0gREFNT05fRklMVEVSX1RZUEVfQU5PTixcbitcdFx0XHQubWF0Y2hpbmcgPSB0cnVlLFxuK1x0XHRcdC5hbGxvdyA9IHRydWUsXG4rXHRcdFx0fSk7XG4rXHRkYW1vbl90ZXN0X2NvbW1pdF9maWx0ZXJfZm9yKHRlc3QsIFx1MDAyNmRzdCxcbitcdFx0XHRcdTAwMjYoc3RydWN0IGRhbW9uX2ZpbHRlcil7XG4rXHRcdFx0LnR5cGUgPSBEQU1PTl9GSUxURVJfVFlQRV9NRU1DRyxcbitcdFx0XHQubWF0Y2hpbmcgPSBmYWxzZSxcbitcdFx0XHQuYWxsb3cgPSBmYWxzZSxcbitcdFx0XHQubWVtY2dfaWQgPSAxMjMsXG4rXHRcdFx0fSk7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl90ZXN0X2hlbHBfc2V0dXBfcHJvYmVzKHVuc2lnbmVkIGludCB3ZWlnaHRzW10sXG4rXHRcdGludCBucl93ZWlnaHRzKVxuK3tcbitcdHN0cnVjdCBkYW1vbl9jdHggKmN0eDtcbitcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XG4rXHRpbnQgaTtcbitcbitcdGN0eCA9IGRhbW9uX25ld19jdHgoKTtcbitcdGlmICghY3R4KVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3dlaWdodHM7IGkrKykge1xuK1x0XHRwcm9iZSA9IGRhbW9uX25ld19wcm9iZSgpO1xuK1x0XHRpZiAoIXByb2JlKSB7XG4rXHRcdFx0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcbitcdFx0XHRyZXR1cm4gTlVMTDtcbitcdFx0fVxuK1x0XHRwcm9iZS1cdTAwM2V3ZWlnaHQgPSB3ZWlnaHRzW2ldO1xuK1x0XHRkYW1vbl9hZGRfcHJvYmUoY3R4LCBwcm9iZSk7XG4rXHR9XG4rXHRyZXR1cm4gY3R4O1xuK31cbitcbitzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcbitcdFx0dW5zaWduZWQgaW50IGRzdF93ZWlnaHRzW10sIGludCBucl9kc3RfcHJvYmVzLFxuK1x0XHR1bnNpZ25lZCBpbnQgc3JjX3dlaWdodHNbXSwgaW50IG5yX3NyY19wcm9iZXMpXG4re1xuK1x0c3RydWN0IGRhbW9uX2N0eCAqZHN0LCAqc3JjO1xuK1x0aW50IGVycjtcbitcdHN0cnVjdCBkYW1vbl9wcm9iZSAqZHN0X3Byb2JlLCAqc3JjX3Byb2JlO1xuK1xuK1x0ZHN0ID0gZGFtb25fdGVzdF9oZWxwX3NldHVwX3Byb2Jlcyhkc3Rfd2VpZ2h0cywgbnJfZHN0X3Byb2Jlcyk7XG4rXHRpZiAoIWRzdClcbitcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcImRzdCBhbGxvYyBmYWlsXCIpO1xuK1x0c3JjID0gZGFtb25fdGVzdF9oZWxwX3NldHVwX3Byb2JlcyhzcmNfd2VpZ2h0cywgbnJfc3JjX3Byb2Jlcyk7XG4rXHRpZiAoIXNyYykge1xuK1x0XHRkYW1vbl9kZXN0cm95X2N0eChkc3QpO1xuK1x0XHRrdW5pdF9za2lwKHRlc3QsIFwic3JjIGFsbG9jIGZhaWxcIik7XG4rXHR9XG4rXG4rXHRlcnIgPSBkYW1vbl9jb21taXRfcHJvYmVzKGRzdCwgc3JjKTtcbitcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBlcnIsIDApO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuO1xuK1x0bnJfZHN0X3Byb2JlcyA9IDA7XG4rXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShkc3RfcHJvYmUsIGRzdClcbitcdFx0bnJfZHN0X3Byb2JlcysrO1xuK1x0bnJfc3JjX3Byb2JlcyA9IDA7XG4rXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShzcmNfcHJvYmUsIHNyYylcbitcdFx0bnJfc3JjX3Byb2JlcysrO1xuK1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIG5yX2RzdF9wcm9iZXMsIG5yX3NyY19wcm9iZXMpO1xuK1x0bnJfZHN0X3Byb2JlcyA9IDA7XG4rXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShkc3RfcHJvYmUsIGRzdCkge1xuK1x0XHRzcmNfcHJvYmUgPSBkYW1vbl9udGhfcHJvYmUobnJfZHN0X3Byb2Jlcywgc3JjKTtcbitcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHNyY19wcm9iZS1cdTAwM2V3ZWlnaHQsIGRzdF9wcm9iZS1cdTAwM2V3ZWlnaHQpO1xuK1x0XHRucl9kc3RfcHJvYmVzKys7XG4rXHR9XG4rXHRkYW1vbl9kZXN0cm95X2N0eChkc3QpO1xuK1x0ZGFtb25fZGVzdHJveV9jdHgoc3JjKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfcHJvYmVzKHN0cnVjdCBrdW5pdCAqdGVzdClcbit7XG4rXHRkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsXG4rXHRcdFx0KHVuc2lnbmVkIGludFtdKXt9LCAwLCAodW5zaWduZWQgaW50W10pe30sIDApO1xuK1x0ZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LFxuK1x0XHRcdCh1bnNpZ25lZCBpbnRbXSl7fSwgMCwgKHVuc2lnbmVkIGludFtdKXsxfSwgMSk7XG4rXHRkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsXG4rXHRcdFx0KHVuc2lnbmVkIGludFtdKXt9LCAwLCAodW5zaWduZWQgaW50W10pezEsIDJ9LCAyKTtcbitcdGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCxcbitcdFx0XHQodW5zaWduZWQgaW50W10pezF9LCAxLCAodW5zaWduZWQgaW50W10pezJ9LCAxKTtcbitcdGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCxcbitcdFx0XHQodW5zaWduZWQgaW50W10pezF9LCAxLCAodW5zaWduZWQgaW50W10pezIsIDN9LCAyKTtcbitcdGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCxcbitcdFx0XHQodW5zaWduZWQgaW50W10pezIsIDN9LCAyLCAodW5zaWduZWQgaW50W10pezF9LCAxKTtcbitcdGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCxcbitcdFx0XHQodW5zaWduZWQgaW50W10pezIsIDN9LCAyLCAodW5zaWduZWQgaW50W10pe30sIDApO1xuK1x0ZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LFxuK1x0XHRcdCh1bnNpZ25lZCBpbnRbXSl7Mn0sIDEsICh1bnNpZ25lZCBpbnRbXSl7fSwgMCk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X2N0eChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4ge1xuIFx0c3RydWN0IGRhbW9uX2N0eCAqc3JjLCAqZHN0O1xuQEAgLTE2NTYsNiArMTc3NSw4IEBAIHN0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBkYW1vbl90ZXN0X2Nhc2VzW10gPSB7XG4gXHRLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfY29tbWl0X3BhZ2VvdXQpLFxuIFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9taWdyYXRlX2hvdCksXG4gXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfY29tbWl0X3RhcmdldF9yZWdpb25zKSxcbitcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9jb21taXRfZmlsdGVyKSxcbitcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9jb21taXRfcHJvYmVzKSxcbiBcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9jb21taXRfY3R4KSxcbiBcdEtVTklUX0NBU0UoZGFtb3NfdGVzdF9maWx0ZXJfb3V0KSxcbiBcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9mZWVkX2xvb3BfbmV4dF9pbnB1dCksXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vX2RhbW9uX3N5c2ZzLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vX2RhbW9uX3N5c2ZzLnB5XG5pbmRleCBlNmEyMjY1ZDcyMWU4Li5kNmFmYjViMmYwYTRhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vX2RhbW9uX3N5c2ZzLnB5XG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9fZGFtb25fc3lzZnMucHlcbkBAIC01NTgsNiArNTU4LDExNSBAQCBjbGFzcyBJbnRlcnZhbHNHb2FsOlxuICAgICAgICAgICAgIHJldHVybiBlcnJcbiAgICAgICAgIHJldHVybiBOb25lXG4gXG4rY2xhc3MgRGFtb25GaWx0ZXI6XG4rICAgIHR5cGVfID0gTm9uZVxuKyAgICBtYXRjaGluZyA9IE5vbmVcbisgICAgYWxsb3cgPSBOb25lXG4rICAgIGZpbHRlcnMgPSBOb25lXG4rICAgIHBhdGggPSBOb25lXG4rICAgIGlkeCA9IE5vbmVcbitcbisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHR5cGVfPSdhbm9uJywgbWF0Y2hpbmc9RmFsc2UsIGFsbG93PUZhbHNlLCBwYXRoPU5vbmUpOlxuKyAgICAgICAgc2VsZi50eXBlXyA9IHR5cGVfXG4rICAgICAgICBzZWxmLm1hdGNoaW5nID0gbWF0Y2hpbmdcbisgICAgICAgIHNlbGYuYWxsb3cgPSBhbGxvd1xuKyAgICAgICAgc2VsZi5wYXRoID0gcGF0aFxuK1xuKyAgICBkZWYgc3lzZnNfZGlyKHNlbGYpOlxuKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLmZpbHRlcnMuc3lzZnNfZGlyKCksICclZCcgJSBzZWxmLmlkeClcbitcbisgICAgZGVmIHN0YWdlKHNlbGYpOlxuKyAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJ3R5cGUnKSwgc2VsZi50eXBlXylcbisgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZTpcbisgICAgICAgICAgICByZXR1cm4gZXJyXG4rICAgICAgICBlcnIgPSB3cml0ZV9maWxlKG9zLnBhdGguam9pbihzZWxmLnN5c2ZzX2RpcigpLCAnbWF0Y2hpbmcnKSxcbisgICAgICAgICAgICAgICAgICAgICAgICAgJ1knIGlmIHNlbGYubWF0Y2hpbmcgZWxzZSAnTicpXG4rICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6XG4rICAgICAgICAgICAgcmV0dXJuIGVyclxuKyAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJ2FsbG93JyksXG4rICAgICAgICAgICAgICAgICAgICAgICAgICdZJyBpZiBzZWxmLmFsbG93IGVsc2UgJ04nKVxuKyAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOlxuKyAgICAgICAgICAgIHJldHVybiBlcnJcbisgICAgICAgIGlmIHNlbGYudHlwZV8gPT0gJ21lbWNnJzpcbisgICAgICAgICAgICBlcnIgPSB3cml0ZV9maWxlKG9zLnBhdGguam9pbihzZWxmLnN5c2ZzX2RpcigpLCAncGF0aCcpLCBzZWxmLnBhdGgpXG4rICAgICAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOlxuKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyXG4rICAgICAgICByZXR1cm4gTm9uZVxuK1xuK2NsYXNzIERhbW9uRmlsdGVyczpcbisgICAgZmlsdGVycyA9IE5vbmVcbisgICAgcHJvYmUgPSBOb25lXG4rXG4rICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWx0ZXJzPU5vbmUpOlxuKyAgICAgICAgaWYgZmlsdGVycyBpcyBOb25lOlxuKyAgICAgICAgICAgIGZpbHRlcnMgPSBbXVxuKyAgICAgICAgc2VsZi5maWx0ZXJzID0gZmlsdGVyc1xuKyAgICAgICAgZm9yIGlkeCwgZmlsdGVyIGluIGVudW1lcmF0ZShzZWxmLmZpbHRlcnMpOlxuKyAgICAgICAgICAgIGZpbHRlci5maWx0ZXJzID0gc2VsZlxuKyAgICAgICAgICAgIGZpbHRlci5pZHggPSBpZHhcbitcbisgICAgZGVmIHN5c2ZzX2RpcihzZWxmKTpcbisgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5wcm9iZS5zeXNmc19kaXIoKSwgJ2ZpbHRlcnMnKVxuK1xuKyAgICBkZWYgc3RhZ2Uoc2VsZik6XG4rICAgICAgICBlcnIgPSB3cml0ZV9maWxlKFxuKyAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJ25yX2ZpbHRlcnMnKSxcbisgICAgICAgICAgICAgICAgbGVuKHNlbGYuZmlsdGVycykpXG4rICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6XG4rICAgICAgICAgICAgcmV0dXJuIGVyclxuKyAgICAgICAgZm9yIGZpbHRlciBpbiBzZWxmLmZpbHRlcnM6XG4rICAgICAgICAgICAgZXJyID0gZmlsdGVyLnN0YWdlKClcbisgICAgICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6XG4rICAgICAgICAgICAgICAgIHJldHVybiBlcnJcbisgICAgICAgIHJldHVybiBOb25lXG4rXG4rY2xhc3MgRGFtb25Qcm9iZTpcbisgICAgd2VpZ2h0ID0gTm9uZVxuKyAgICBmaWx0ZXJzID0gTm9uZVxuKyAgICBwcm9iZXMgPSBOb25lXG4rICAgIGlkeCA9IE5vbmVcbitcbisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdlaWdodD0wLCBmaWx0ZXJzPU5vbmUpOlxuKyAgICAgICAgc2VsZi53ZWlnaHQgPSB3ZWlnaHRcbisgICAgICAgIGlmIGZpbHRlcnMgaXMgTm9uZTpcbisgICAgICAgICAgICBmaWx0ZXJzID0gRGFtb25GaWx0ZXJzKClcbisgICAgICAgIHNlbGYuZmlsdGVycyA9IGZpbHRlcnNcbisgICAgICAgIHNlbGYuZmlsdGVycy5wcm9iZSA9IHNlbGZcbitcbisgICAgZGVmIHN5c2ZzX2RpcihzZWxmKTpcbisgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5wcm9iZXMuc3lzZnNfZGlyKCksICclZCcgJSBzZWxmLmlkeClcbitcbisgICAgZGVmIHN0YWdlKHNlbGYpOlxuKyAgICAgICAgZXJyID0gd3JpdGVfZmlsZShcbisgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHNlbGYuc3lzZnNfZGlyKCksICd3ZWlnaHQnKSwgJyVkJyAlIHNlbGYud2VpZ2h0KVxuKyAgICAgICAgcmV0dXJuIHNlbGYuZmlsdGVycy5zdGFnZSgpXG4rXG4rY2xhc3MgRGFtb25Qcm9iZXM6XG4rICAgIHByb2JlcyA9IE5vbmVcbisgICAgYXR0cnMgPSBOb25lXG4rXG4rICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9iZXM9Tm9uZSk6XG4rICAgICAgICBpZiBwcm9iZXMgaXMgTm9uZTpcbisgICAgICAgICAgICBwcm9iZXMgPSBbXVxuKyAgICAgICAgc2VsZi5wcm9iZXMgPSBwcm9iZXNcbisgICAgICAgIGZvciBpZHgsIHByb2JlIGluIGVudW1lcmF0ZShzZWxmLnByb2Jlcyk6XG4rICAgICAgICAgICAgcHJvYmUucHJvYmVzID0gc2VsZlxuKyAgICAgICAgICAgIHByb2JlLmlkeCA9IGlkeFxuK1xuKyAgICBkZWYgc3lzZnNfZGlyKHNlbGYpOlxuKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLmF0dHJzLnN5c2ZzX2RpcigpLCAncHJvYmVzJylcbitcbisgICAgZGVmIHN0YWdlKHNlbGYpOlxuKyAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJ25yX3Byb2JlcycpLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICBsZW4oc2VsZi5wcm9iZXMpKVxuKyAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOlxuKyAgICAgICAgICAgIHJldHVybiBlcnJcbisgICAgICAgIGZvciBwcm9iZSBpbiBzZWxmLnByb2JlczpcbisgICAgICAgICAgICBlcnIgPSBwcm9iZS5zdGFnZSgpXG4rICAgICAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOlxuKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyXG4rICAgICAgICByZXR1cm4gTm9uZVxuK1xuIGNsYXNzIERhbW9uQXR0cnM6XG4gICAgIHNhbXBsZV91cyA9IE5vbmVcbiAgICAgYWdncl91cyA9IE5vbmVcbkBAIC01NjUsMTEgKzY3NCwxMiBAQCBjbGFzcyBEYW1vbkF0dHJzOlxuICAgICB1cGRhdGVfdXMgPSBOb25lXG4gICAgIG1pbl9ucl9yZWdpb25zID0gTm9uZVxuICAgICBtYXhfbnJfcmVnaW9ucyA9IE5vbmVcbisgICAgcHJvYmVzID0gTm9uZVxuICAgICBjb250ZXh0ID0gTm9uZVxuIFxuICAgICBkZWYgX19pbml0X18oc2VsZiwgc2FtcGxlX3VzPTUwMDAsIGFnZ3JfdXM9MTAwMDAwLFxuICAgICAgICAgICAgICAgICAgaW50ZXJ2YWxzX2dvYWw9SW50ZXJ2YWxzR29hbCgpLCB1cGRhdGVfdXM9MTAwMDAwMCxcbi0gICAgICAgICAgICBtaW5fbnJfcmVnaW9ucz0xMCwgbWF4X25yX3JlZ2lvbnM9MTAwMCk6XG4rICAgICAgICAgICAgbWluX25yX3JlZ2lvbnM9MTAsIG1heF9ucl9yZWdpb25zPTEwMDAsIHByb2Jlcz1Ob25lKTpcbiAgICAgICAgIHNlbGYuc2FtcGxlX3VzID0gc2FtcGxlX3VzXG4gICAgICAgICBzZWxmLmFnZ3JfdXMgPSBhZ2dyX3VzXG4gICAgICAgICBzZWxmLmludGVydmFsc19nb2FsID0gaW50ZXJ2YWxzX2dvYWxcbkBAIC01NzcsNiArNjg3LDEwIEBAIGNsYXNzIERhbW9uQXR0cnM6XG4gICAgICAgICBzZWxmLnVwZGF0ZV91cyA9IHVwZGF0ZV91c1xuICAgICAgICAgc2VsZi5taW5fbnJfcmVnaW9ucyA9IG1pbl9ucl9yZWdpb25zXG4gICAgICAgICBzZWxmLm1heF9ucl9yZWdpb25zID0gbWF4X25yX3JlZ2lvbnNcbisgICAgICAgIGlmIHByb2JlcyBpcyBOb25lOlxuKyAgICAgICAgICAgIHByb2JlcyA9IERhbW9uUHJvYmVzKClcbisgICAgICAgIHNlbGYucHJvYmVzID0gcHJvYmVzXG4rICAgICAgICBzZWxmLnByb2Jlcy5hdHRycyA9IHNlbGZcbiBcbiAgICAgZGVmIGludGVydmFsX3N5c2ZzX2RpcihzZWxmKTpcbiAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5jb250ZXh0LnN5c2ZzX2RpcigpLCAnbW9uaXRvcmluZ19hdHRycycsXG5AQCAtNTg2LDYgKzcwMCw5IEBAIGNsYXNzIERhbW9uQXR0cnM6XG4gICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuY29udGV4dC5zeXNmc19kaXIoKSwgJ21vbml0b3JpbmdfYXR0cnMnLFxuICAgICAgICAgICAgICAgICAnbnJfcmVnaW9ucycpXG4gXG4rICAgIGRlZiBzeXNmc19kaXIoc2VsZik6XG4rICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuY29udGV4dC5zeXNmc19kaXIoKSwgJ21vbml0b3JpbmdfYXR0cnMnKVxuK1xuICAgICBkZWYgc3RhZ2Uoc2VsZik6XG4gICAgICAgICBlcnIgPSB3cml0ZV9maWxlKG9zLnBhdGguam9pbihzZWxmLmludGVydmFsX3N5c2ZzX2RpcigpLCAnc2FtcGxlX3VzJyksXG4gICAgICAgICAgICAgICAgIHNlbGYuc2FtcGxlX3VzKVxuQEAgLTYxNSw2ICs3MzIsMTAgQEAgY2xhc3MgRGFtb25BdHRyczpcbiAgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZTpcbiAgICAgICAgICAgICByZXR1cm4gZXJyXG4gXG4rICAgICAgICBlcnIgPSBzZWxmLnByb2Jlcy5zdGFnZSgpXG4rICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6XG4rICAgICAgICAgICAgcmV0dXJuIGVyclxuK1xuIGNsYXNzIERhbW9uQ3R4OlxuICAgICBvcHMgPSBOb25lXG4gICAgIG1vbml0b3JpbmdfYXR0cnMgPSBOb25lXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vZHJnbl9kdW1wX2RhbW9uX3N0YXR1cy5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2RyZ25fZHVtcF9kYW1vbl9zdGF0dXMucHlcbmluZGV4IDA5NTUyZTkxYmM3ODIuLjQ2MjIwNDZmZDAxMTggMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9kcmduX2R1bXBfZGFtb25fc3RhdHVzLnB5XG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9kcmduX2R1bXBfZGFtb25fc3RhdHVzLnB5XG5AQCAtNDgsNiArNDgsMzcgQEAgZGVmIGF0dHJzX3RvX2RpY3QoYXR0cnMpOlxuICAgICAgICAgWydtYXhfbnJfcmVnaW9ucycsIGludF0sXG4gICAgICAgICBdKVxuIFxuK2RlZiBmaWx0ZXJfdG9fZGljdChkYW1vbl9maWx0ZXIpOlxuKyAgICBmaWx0ZXJfdHlwZV9rZXl3b3JkID0ge1xuKyAgICAgICAgICAgIDA6ICdhbm9uJyxcbisgICAgICAgICAgICAxOiAnbWVtY2cnLFxuKyAgICAgICAgICAgIH1cbisgICAgZGljdF8gPSB7XG4rICAgICAgICAgICAgJ3R5cGUnOiBmaWx0ZXJfdHlwZV9rZXl3b3JkW2ludChkYW1vbl9maWx0ZXIudHlwZSldLFxuKyAgICAgICAgICAgICdtYXRjaGluZyc6IGJvb2woZGFtb25fZmlsdGVyLm1hdGNoaW5nKSxcbisgICAgICAgICAgICAnYWxsb3cnOiBib29sKGRhbW9uX2ZpbHRlci5hbGxvdyksXG4rICAgICAgICAgICAgfVxuKyAgICB0eXBlXyA9IGRpY3RfWyd0eXBlJ11cbisgICAgaWYgdHlwZV8gPT0gJ21lbWNnJzpcbisgICAgICAgIGRpY3RfWydtZW1jZ19pZCddID0gaW50KGRhbW9uX2ZpbHRlci5tZW1jZ19pZClcbisgICAgcmV0dXJuIGRpY3RfXG4rXG4rZGVmIGZpbHRlcnNfdG9fbGlzdChmaWx0ZXJzKTpcbisgICAgcmV0dXJuIFtmaWx0ZXJfdG9fZGljdChmKVxuKyAgICAgICAgICAgIGZvciBmIGluIGxpc3RfZm9yX2VhY2hfZW50cnkoXG4rICAgICAgICAgICAgICAgICdzdHJ1Y3QgZGFtb25fZmlsdGVyJywgZmlsdGVycy5hZGRyZXNzX29mXygpLCAnbGlzdCcpXVxuK1xuK2RlZiBwcm9iZV90b19kaWN0KHByb2JlKTpcbisgICAgcmV0dXJuIHRvX2RpY3QocHJvYmUsIFtcbisgICAgICAgIFsnd2VpZ2h0JywgaW50XSxcbisgICAgICAgIFsnZmlsdGVycycsIGZpbHRlcnNfdG9fbGlzdF0sXG4rICAgICAgICBdKVxuK1xuK2RlZiBwcm9iZXNfdG9fbGlzdChwcm9iZXMpOlxuKyAgICByZXR1cm4gW3Byb2JlX3RvX2RpY3QocClcbisgICAgICAgICAgICBmb3IgcCBpbiBsaXN0X2Zvcl9lYWNoX2VudHJ5KFxuKyAgICAgICAgICAgICAgICAnc3RydWN0IGRhbW9uX3Byb2JlJywgcHJvYmVzLmFkZHJlc3Nfb2ZfKCksICdsaXN0JyldXG4rXG4gZGVmIGFkZHJfcmFuZ2VfdG9fZGljdChhZGRyX3JhbmdlKTpcbiAgICAgcmV0dXJuIHRvX2RpY3QoYWRkcl9yYW5nZSwgW1xuICAgICAgICAgWydzdGFydCcsIGludF0sXG5AQCAtMTk5LDYgKzIzMCw3IEBAIGRlZiBkYW1vbl9jdHhfdG9fZGljdChjdHgpOlxuICAgICByZXR1cm4gdG9fZGljdChjdHgsIFtcbiAgICAgICAgIFsnb3BzJywgb3BzX3RvX2RpY3RdLFxuICAgICAgICAgWydhdHRycycsIGF0dHJzX3RvX2RpY3RdLFxuKyAgICAgICAgWydwcm9iZXMnLCBwcm9iZXNfdG9fbGlzdF0sXG4gICAgICAgICBbJ2FkYXB0aXZlX3RhcmdldHMnLCB0YXJnZXRzX3RvX2xpc3RdLFxuICAgICAgICAgWydzY2hlbWVzJywgc2NoZW1lc190b19saXN0XSxcbiAgICAgICAgIFsncGF1c2UnLCBib29sXSxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnB5XG5pbmRleCAzZmZhMDU0YjYzODY3Li44NTJiNjg4N2E3NWNlIDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMucHlcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnB5XG5AQCAtMTc4LDYgKzE3OCwyNCBAQCBkZWYgYXNzZXJ0X21vbml0b3JpbmdfYXR0cnNfY29tbWl0dGVkKGF0dHJzLCBkdW1wKTpcbiAgICAgYXNzZXJ0X3RydWUoZHVtcFsnbWF4X25yX3JlZ2lvbnMnXSA9PSBhdHRycy5tYXhfbnJfcmVnaW9ucyxcbiAgICAgICAgICAgICAgICAgJ21heF9ucl9yZWdpb25zJywgZHVtcClcbiBcbitkZWYgYXNzZXJ0X2RhbW9uX2ZpbHRlcnNfY29tbWl0dGVkKGZpbHRlcnMsIGR1bXApOlxuKyAgICBhc3NlcnRfdHJ1ZShsZW4oZHVtcCkgPT0gbGVuKGZpbHRlcnMuZmlsdGVycyksICdwcm9iZSBmaWx0ZXJzJywgZHVtcClcbisgICAgZm9yIGlkeCwgZGFtb25fZmlsdGVyIGluIGVudW1lcmF0ZShmaWx0ZXJzLmZpbHRlcnMpOlxuKyAgICAgICAgZmlsdGVyX2R1bXAgPSBkdW1wW2lkeF1cbisgICAgICAgIGFzc2VydF90cnVlKGZpbHRlcl9kdW1wWyd0eXBlJ10gPT0gZGFtb25fZmlsdGVyLnR5cGVfLCAndHlwZScsXG4rICAgICAgICAgICAgICAgICAgICBmaWx0ZXJfZHVtcClcbisgICAgICAgIGFzc2VydF90cnVlKGZpbHRlcl9kdW1wWydtYXRjaGluZyddID09IGRhbW9uX2ZpbHRlci5tYXRjaGluZyxcbisgICAgICAgICAgICAgICAgICAgICdtYXRjaGluZycsIGZpbHRlcl9kdW1wKVxuKyAgICAgICAgYXNzZXJ0X3RydWUoZmlsdGVyX2R1bXBbJ2FsbG93J10gPT0gZGFtb25fZmlsdGVyLmFsbG93LCAnYWxsb3cnLFxuKyAgICAgICAgICAgICAgICAgICAgZmlsdGVyX2R1bXApXG4rXG4rZGVmIGFzc2VydF9wcm9iZXNfY29tbWl0dGVkKHByb2JlcywgZHVtcCk6XG4rICAgIGFzc2VydF90cnVlKGxlbihkdW1wKSA9PSBsZW4ocHJvYmVzLnByb2JlcyksICdwcm9iZXMgbGVuZ3RoJywgZHVtcClcbisgICAgZm9yIGlkeCwgcHJvYmUgaW4gZW51bWVyYXRlKHByb2Jlcy5wcm9iZXMpOlxuKyAgICAgICAgcHJvYmVfZHVtcCA9IGR1bXBbaWR4XVxuKyAgICAgICAgYXNzZXJ0X3RydWUocHJvYmUud2VpZ2h0ID09IHByb2JlX2R1bXBbJ3dlaWdodCddLCAnd2VpZ2h0JywgcHJvYmVfZHVtcClcbisgICAgICAgIGFzc2VydF9kYW1vbl9maWx0ZXJzX2NvbW1pdHRlZChwcm9iZS5maWx0ZXJzLCBwcm9iZV9kdW1wWydmaWx0ZXJzJ10pXG4rXG4gZGVmIGFzc2VydF9tb25pdG9yaW5nX3RhcmdldF9jb21taXR0ZWQodGFyZ2V0LCBkdW1wKTpcbiAgICAgIyB0YXJnZXQucGlkIGlzIHRoZSBwaWQgXCJudW1iZXJcIiwgd2hpbGUgZHVtcFsncGlkJ10gaXMgJ3N0cnVjdCBwaWQnXG4gICAgICMgcG9pbnRlciwgYW5kIGhlbmNlIGNhbm5vdCBiZSBjb21wYXJlZC5cbkBAIC0xOTYsNiArMjE0LDcgQEAgZGVmIGFzc2VydF9jdHhfY29tbWl0dGVkKGN0eCwgZHVtcCk6XG4gICAgICAgICAgICAgfVxuICAgICBhc3NlcnRfdHJ1ZShkdW1wWydvcHMnXVsnaWQnXSA9PSBvcHNfdmFsW2N0eC5vcHNdLCAnb3BzX2lkJywgZHVtcClcbiAgICAgYXNzZXJ0X21vbml0b3JpbmdfYXR0cnNfY29tbWl0dGVkKGN0eC5tb25pdG9yaW5nX2F0dHJzLCBkdW1wWydhdHRycyddKVxuKyAgICBhc3NlcnRfcHJvYmVzX2NvbW1pdHRlZChjdHgubW9uaXRvcmluZ19hdHRycy5wcm9iZXMsIGR1bXBbJ3Byb2JlcyddKVxuICAgICBhc3NlcnRfbW9uaXRvcmluZ190YXJnZXRzX2NvbW1pdHRlZChjdHgudGFyZ2V0cywgZHVtcFsnYWRhcHRpdmVfdGFyZ2V0cyddKVxuICAgICBhc3NlcnRfc2NoZW1lc19jb21taXR0ZWQoY3R4LnNjaGVtZXMsIGR1bXBbJ3NjaGVtZXMnXSlcbiAgICAgYXNzZXJ0X3RydWUoZHVtcFsncGF1c2UnXSA9PSBjdHgucGF1c2UsICdwYXVzZScsIGR1bXApXG5AQCAtMzAwLDcgKzMxOSwyMSBAQCBkZWYgbWFpbigpOlxuICAgICAgICAgICAgICAgICBpbnRlcnZhbHNfZ29hbD1fZGFtb25fc3lzZnMuSW50ZXJ2YWxzR29hbChcbiAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc19icD00MDAsIGFnZ3JzPTMsIG1pbl9zYW1wbGVfdXM9NTAwMCxcbiAgICAgICAgICAgICAgICAgICAgIG1heF9zYW1wbGVfdXM9MTAwMDAwMDApLFxuLSAgICAgICAgICAgICAgICB1cGRhdGVfdXM9MjAwMDAwMCksXG4rICAgICAgICAgICAgICAgIHVwZGF0ZV91cz0yMDAwMDAwLFxuKyAgICAgICAgICAgICAgICBwcm9iZXM9X2RhbW9uX3N5c2ZzLkRhbW9uUHJvYmVzKFxuKyAgICAgICAgICAgICAgICAgICAgcHJvYmVzPVtfZGFtb25fc3lzZnMuRGFtb25Qcm9iZShcbisgICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQ9NDIsXG4rICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVycz1fZGFtb25fc3lzZnMuRGFtb25GaWx0ZXJzKFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzPVtcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kYW1vbl9zeXNmcy5EYW1vbkZpbHRlcihcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlXz0nYW5vbicsXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hpbmc9VHJ1ZSxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvdz1UcnVlLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4rICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgIHNjaGVtZXM9W19kYW1vbl9zeXNmcy5EYW1vcyhcbiAgICAgICAgICAgICAgICAgYWN0aW9uPSdwYWdlb3V0JyxcbiAgICAgICAgICAgICAgICAgYWNjZXNzX3BhdHRlcm49X2RhbW9uX3N5c2ZzLkRhbW9zQWNjZXNzUGF0dGVybihcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIxOjQzOjM1LjE4Nzk2ODEyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTAzMzY3ODE4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogREFNT04gVGVzdCBTdWl0ZSBBZGRpdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyBpbiBmcm9udCBvZiBtZSwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpczogZG9lcyB0aGlzIGludHJvZHVjZSBhbnkgKmZ1bmN0aW9uYWwqIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHdlIG5lZWQgdG8gY29uc2lkZXIgZm9yIGZ1enppbmc/IExldCdzIHNlZS4uLiBpdCBzZWVtcyBsaWtlIGl0J3MgdG91Y2hpbmcgYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAgYW5kIHNvbWUgZmlsZXMgdW5kZXIgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2AsIHNwZWNpZmljYWxseSBweXRob24gc2NyaXB0czogYF9kYW1vbl9zeXNmcy5weWAsIGBkcmduX2R1bXBfZGFtb25fc3RhdHVzLnB5YCwgYW5kIGBzeXNmcy5weWAuIFJpZ2h0IGF3YXksIHRoYXQgcmFpc2VzIGEgZmxhZyDigJMgaWYgaXQncyB0ZXN0IGNvZGUsIHdlIG1pZ2h0IGJlIGluIHRoZSBjbGVhci5cblxuQnV0IEkgbmVlZCB0byBiZSAqYWJzb2x1dGVseSogc3VyZS4gTGV0IG1lIGNvbmZpcm0gdGhhdCB0aGlzIGlzICphbGwqIHRoZSBwYXRjaCBtb2RpZmllcy4gRG91YmxlLWNoZWNraW5nLi4uIHl1cCwgdGhhdCdzIGl0LiBKdXN0IEtVbml0IHRlc3RzIGFuZCBzZWxmdGVzdHMuIE5vIGNvcmUga2VybmVsIGxvZ2ljLCBubyBkcml2ZXJzLCBubyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29kZSBoYXMgYmVlbiB0b3VjaGVkLiBJdCdzICpwdXJlbHkqIHRlc3QgaW5mcmFzdHJ1Y3R1cmUuIE9rYXksIEnigJltIGNvbmZpcm1pbmcgdGhhdCBhZ2Fpbi4uLlxuXG5BbHJpZ2h0LCBub3cgdG8gYXBwbHkgdGhlIHJ1bGVzLiBBbSBJIG1pc3NpbmcgYW55dGhpbmcsIGl0IHNlZW1zIGxpa2UgdGhlIHJ1bGUgc3RhdGVzOiBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6IC4uLiBcIiBhbmQgXCJJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoIHRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlwiXG5cbkl0J3MgdGVtcHRpbmcgdG8gY2F0ZWdvcml6ZSB0aGlzIGFzIFwiZGVjb3JhdGl2ZSBjaGFuZ2VzXCIgYmVjYXVzZSwgaW4gYSB3YXksIHRlc3RzIGRvbid0ICpkaXJlY3RseSogYWx0ZXIgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIGtlcm5lbCwgYnV0IHRoZXJlJ3Mgbm8gc3BlY2lmaWMgYnVsbGV0IGZvciB0ZXN0cy4gSG93ZXZlciwgdGVzdHMgZG9uJ3QgbW9kaWZ5IHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4gVGhlIGNoYW5nZXMgYXJlIGNvbmZpbmVkIHRvIHRoZSB0ZXN0IGhhcm5lc3MuIFNvLCBhY2NvcmRpbmcgdG8gdGhlIHJ1bGUgc2V0LCBzaW5jZSBpdCBvbmx5IGNvbnRhaW5zIHRlc3RzIEkgd2lsbCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIFRpbWUgdG8gY2FsbCBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk0NSwiT3V0cHV0VG9rZW5zIjo1OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIxOjQzOjQ0LjIyMTY0OTdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBLVW5pdCB0ZXN0cyBhbmQgUHl0aG9uIHNlbGZ0ZXN0cyBmb3IgREFNT04gZmlsdGVycyBhbmQgcHJvYmVzLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IGZ1bmN0aW9uYWwga2VybmVsIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGFkZHMgS1VuaXQgdGVzdHMgYW5kIFB5dGhvbiBzZWxmdGVzdHMgZm9yIERBTU9OIGZpbHRlcnMgYW5kIHByb2Jlcy4gSXQgZG9lcyBub3QgbW9kaWZ5IGFueSBmdW5jdGlvbmFsIGtlcm5lbCBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow2cngk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-30 21:42:30 +0000 UTC FinishedAt: 2026-07-30 21:43:46 +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+CgkJCTx0ZD4yMDI2LzA3LzMwIDIxOjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBLVW5pdCB0ZXN0cyBhbmQgUHl0aG9uIHNlbGZ0ZXN0cyBmb3IgREFNT04gZmlsdGVycyBhbmQgcHJvYmVzLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IGZ1bmN0aW9uYWwga2VybmVsIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIxOjQzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTZkMjFmYjllY2I5Mzc5MTZhOTBlZTE5MmY2OGFjNzE5MmQxYWI3M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDMwIDIxOjQzOjM0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaCBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuaW5kZXggNGE1MzZkNDFjZGIyZC4uNjU3NzQxMGFjZTNkYSAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG5AQCAtMTMwNiw2ICYjNDM7MTMwNiwxMjUgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfdGFyZ2V0X3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0XHRcdCh1bnNpZ25lZCBsb25nW11bMl0pIHt7MywgOH0sIHs4LCAxMH19LCAyKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X2ZpbHRlcl9mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuJiM0MztcdFx0c3RydWN0IGRhbW9uX2ZpbHRlciAqZHN0LCBzdHJ1Y3QgZGFtb25fZmlsdGVyICpzcmMpXG4mIzQzO3tcbiYjNDM7XHRkYW1vbl9jb21taXRfZmlsdGVyKGRzdCwgc3JjKTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVx1MDAzZXR5cGUsIHNyYy1cdTAwM2V0eXBlKTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVx1MDAzZW1hdGNoaW5nLCBzcmMtXHUwMDNlbWF0Y2hpbmcpO1xuJiM0MztcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNlYWxsb3csIHNyYy1cdTAwM2VhbGxvdyk7XG4mIzQzO1x0c3dpdGNoIChzcmMtXHUwMDNldHlwZSkge1xuJiM0MztcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfTUVNQ0c6XG4mIzQzO1x0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVx1MDAzZW1lbWNnX2lkLCBzcmMtXHUwMDNlbWVtY2dfaWQpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfZmlsdGVyKHN0cnVjdCBrdW5pdCAqdGVzdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkYW1vbl9maWx0ZXIgZHN0ID0ge1xuJiM0MztcdFx0LnR5cGUgPSBEQU1PTl9GSUxURVJfVFlQRV9BTk9OLFxuJiM0MztcdFx0Lm1hdGNoaW5nID0gZmFsc2UsXG4mIzQzO1x0XHQuYWxsb3cgPSBmYWxzZSxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRkYW1vbl90ZXN0X2NvbW1pdF9maWx0ZXJfZm9yKHRlc3QsIFx1MDAyNmRzdCxcbiYjNDM7XHRcdFx0XHUwMDI2KHN0cnVjdCBkYW1vbl9maWx0ZXIpe1xuJiM0MztcdFx0XHQudHlwZSA9IERBTU9OX0ZJTFRFUl9UWVBFX0FOT04sXG4mIzQzO1x0XHRcdC5tYXRjaGluZyA9IHRydWUsXG4mIzQzO1x0XHRcdC5hbGxvdyA9IHRydWUsXG4mIzQzO1x0XHRcdH0pO1xuJiM0MztcdGRhbW9uX3Rlc3RfY29tbWl0X2ZpbHRlcl9mb3IodGVzdCwgXHUwMDI2ZHN0LFxuJiM0MztcdFx0XHRcdTAwMjYoc3RydWN0IGRhbW9uX2ZpbHRlcil7XG4mIzQzO1x0XHRcdC50eXBlID0gREFNT05fRklMVEVSX1RZUEVfTUVNQ0csXG4mIzQzO1x0XHRcdC5tYXRjaGluZyA9IGZhbHNlLFxuJiM0MztcdFx0XHQuYWxsb3cgPSBmYWxzZSxcbiYjNDM7XHRcdFx0Lm1lbWNnX2lkID0gMTIzLFxuJiM0MztcdFx0XHR9KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3Rlc3RfaGVscF9zZXR1cF9wcm9iZXModW5zaWduZWQgaW50IHdlaWdodHNbXSxcbiYjNDM7XHRcdGludCBucl93ZWlnaHRzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRhbW9uX2N0eCAqY3R4O1xuJiM0MztcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGN0eCA9IGRhbW9uX25ld19jdHgoKTtcbiYjNDM7XHRpZiAoIWN0eClcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3dlaWdodHM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRwcm9iZSA9IGRhbW9uX25ld19wcm9iZSgpO1xuJiM0MztcdFx0aWYgKCFwcm9iZSkge1xuJiM0MztcdFx0XHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xuJiM0MztcdFx0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHByb2JlLVx1MDAzZXdlaWdodCA9IHdlaWdodHNbaV07XG4mIzQzO1x0XHRkYW1vbl9hZGRfcHJvYmUoY3R4LCBwcm9iZSk7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiBjdHg7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuJiM0MztcdFx0dW5zaWduZWQgaW50IGRzdF93ZWlnaHRzW10sIGludCBucl9kc3RfcHJvYmVzLFxuJiM0MztcdFx0dW5zaWduZWQgaW50IHNyY193ZWlnaHRzW10sIGludCBucl9zcmNfcHJvYmVzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRhbW9uX2N0eCAqZHN0LCAqc3JjO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1x0c3RydWN0IGRhbW9uX3Byb2JlICpkc3RfcHJvYmUsICpzcmNfcHJvYmU7XG4mIzQzO1xuJiM0MztcdGRzdCA9IGRhbW9uX3Rlc3RfaGVscF9zZXR1cF9wcm9iZXMoZHN0X3dlaWdodHMsIG5yX2RzdF9wcm9iZXMpO1xuJiM0MztcdGlmICghZHN0KVxuJiM0MztcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDtkc3QgYWxsb2MgZmFpbFwmIzM0Oyk7XG4mIzQzO1x0c3JjID0gZGFtb25fdGVzdF9oZWxwX3NldHVwX3Byb2JlcyhzcmNfd2VpZ2h0cywgbnJfc3JjX3Byb2Jlcyk7XG4mIzQzO1x0aWYgKCFzcmMpIHtcbiYjNDM7XHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KGRzdCk7XG4mIzQzO1x0XHRrdW5pdF9za2lwKHRlc3QsIFwmIzM0O3NyYyBhbGxvYyBmYWlsXCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IGRhbW9uX2NvbW1pdF9wcm9iZXMoZHN0LCBzcmMpO1xuJiM0MztcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBlcnIsIDApO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0bnJfZHN0X3Byb2JlcyA9IDA7XG4mIzQzO1x0ZGFtb25fZm9yX2VhY2hfcHJvYmUoZHN0X3Byb2JlLCBkc3QpXG4mIzQzO1x0XHRucl9kc3RfcHJvYmVzJiM0MzsmIzQzOztcbiYjNDM7XHRucl9zcmNfcHJvYmVzID0gMDtcbiYjNDM7XHRkYW1vbl9mb3JfZWFjaF9wcm9iZShzcmNfcHJvYmUsIHNyYylcbiYjNDM7XHRcdG5yX3NyY19wcm9iZXMmIzQzOyYjNDM7O1xuJiM0MztcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBucl9kc3RfcHJvYmVzLCBucl9zcmNfcHJvYmVzKTtcbiYjNDM7XHRucl9kc3RfcHJvYmVzID0gMDtcbiYjNDM7XHRkYW1vbl9mb3JfZWFjaF9wcm9iZShkc3RfcHJvYmUsIGRzdCkge1xuJiM0MztcdFx0c3JjX3Byb2JlID0gZGFtb25fbnRoX3Byb2JlKG5yX2RzdF9wcm9iZXMsIHNyYyk7XG4mIzQzO1x0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgc3JjX3Byb2JlLVx1MDAzZXdlaWdodCwgZHN0X3Byb2JlLVx1MDAzZXdlaWdodCk7XG4mIzQzO1x0XHRucl9kc3RfcHJvYmVzJiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1x0ZGFtb25fZGVzdHJveV9jdHgoZHN0KTtcbiYjNDM7XHRkYW1vbl9kZXN0cm95X2N0eChzcmMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXMoc3RydWN0IGt1bml0ICp0ZXN0KVxuJiM0Mzt7XG4mIzQzO1x0ZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LFxuJiM0MztcdFx0XHQodW5zaWduZWQgaW50W10pe30sIDAsICh1bnNpZ25lZCBpbnRbXSl7fSwgMCk7XG4mIzQzO1x0ZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LFxuJiM0MztcdFx0XHQodW5zaWduZWQgaW50W10pe30sIDAsICh1bnNpZ25lZCBpbnRbXSl7MX0sIDEpO1xuJiM0MztcdGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCxcbiYjNDM7XHRcdFx0KHVuc2lnbmVkIGludFtdKXt9LCAwLCAodW5zaWduZWQgaW50W10pezEsIDJ9LCAyKTtcbiYjNDM7XHRkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsXG4mIzQzO1x0XHRcdCh1bnNpZ25lZCBpbnRbXSl7MX0sIDEsICh1bnNpZ25lZCBpbnRbXSl7Mn0sIDEpO1xuJiM0MztcdGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCxcbiYjNDM7XHRcdFx0KHVuc2lnbmVkIGludFtdKXsxfSwgMSwgKHVuc2lnbmVkIGludFtdKXsyLCAzfSwgMik7XG4mIzQzO1x0ZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LFxuJiM0MztcdFx0XHQodW5zaWduZWQgaW50W10pezIsIDN9LCAyLCAodW5zaWduZWQgaW50W10pezF9LCAxKTtcbiYjNDM7XHRkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsXG4mIzQzO1x0XHRcdCh1bnNpZ25lZCBpbnRbXSl7MiwgM30sIDIsICh1bnNpZ25lZCBpbnRbXSl7fSwgMCk7XG4mIzQzO1x0ZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LFxuJiM0MztcdFx0XHQodW5zaWduZWQgaW50W10pezJ9LCAxLCAodW5zaWduZWQgaW50W10pe30sIDApO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X2N0eChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4ge1xuIFx0c3RydWN0IGRhbW9uX2N0eCAqc3JjLCAqZHN0O1xuQEAgLTE2NTYsNiAmIzQzOzE3NzUsOCBAQCBzdGF0aWMgc3RydWN0IGt1bml0X2Nhc2UgZGFtb25fdGVzdF9jYXNlc1tdID0ge1xuIFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9wYWdlb3V0KSxcbiBcdEtVTklUX0NBU0UoZGFtb3NfdGVzdF9jb21taXRfbWlncmF0ZV9ob3QpLFxuIFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X2NvbW1pdF90YXJnZXRfcmVnaW9ucyksXG4mIzQzO1x0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X2NvbW1pdF9maWx0ZXIpLFxuJiM0MztcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9jb21taXRfcHJvYmVzKSxcbiBcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9jb21taXRfY3R4KSxcbiBcdEtVTklUX0NBU0UoZGFtb3NfdGVzdF9maWx0ZXJfb3V0KSxcbiBcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9mZWVkX2xvb3BfbmV4dF9pbnB1dCksXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vX2RhbW9uX3N5c2ZzLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vX2RhbW9uX3N5c2ZzLnB5XG5pbmRleCBlNmEyMjY1ZDcyMWU4Li5kNmFmYjViMmYwYTRhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vX2RhbW9uX3N5c2ZzLnB5XG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9fZGFtb25fc3lzZnMucHlcbkBAIC01NTgsNiAmIzQzOzU1OCwxMTUgQEAgY2xhc3MgSW50ZXJ2YWxzR29hbDpcbiAgICAgICAgICAgICByZXR1cm4gZXJyXG4gICAgICAgICByZXR1cm4gTm9uZVxuIFxuJiM0MztjbGFzcyBEYW1vbkZpbHRlcjpcbiYjNDM7ICAgIHR5cGVfID0gTm9uZVxuJiM0MzsgICAgbWF0Y2hpbmcgPSBOb25lXG4mIzQzOyAgICBhbGxvdyA9IE5vbmVcbiYjNDM7ICAgIGZpbHRlcnMgPSBOb25lXG4mIzQzOyAgICBwYXRoID0gTm9uZVxuJiM0MzsgICAgaWR4ID0gTm9uZVxuJiM0MztcbiYjNDM7ICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0eXBlXz0mIzM5O2Fub24mIzM5OywgbWF0Y2hpbmc9RmFsc2UsIGFsbG93PUZhbHNlLCBwYXRoPU5vbmUpOlxuJiM0MzsgICAgICAgIHNlbGYudHlwZV8gPSB0eXBlX1xuJiM0MzsgICAgICAgIHNlbGYubWF0Y2hpbmcgPSBtYXRjaGluZ1xuJiM0MzsgICAgICAgIHNlbGYuYWxsb3cgPSBhbGxvd1xuJiM0MzsgICAgICAgIHNlbGYucGF0aCA9IHBhdGhcbiYjNDM7XG4mIzQzOyAgICBkZWYgc3lzZnNfZGlyKHNlbGYpOlxuJiM0MzsgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5maWx0ZXJzLnN5c2ZzX2RpcigpLCAmIzM5OyVkJiMzOTsgJSBzZWxmLmlkeClcbiYjNDM7XG4mIzQzOyAgICBkZWYgc3RhZ2Uoc2VsZik6XG4mIzQzOyAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJiMzOTt0eXBlJiMzOTspLCBzZWxmLnR5cGVfKVxuJiM0MzsgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZTpcbiYjNDM7ICAgICAgICAgICAgcmV0dXJuIGVyclxuJiM0MzsgICAgICAgIGVyciA9IHdyaXRlX2ZpbGUob3MucGF0aC5qb2luKHNlbGYuc3lzZnNfZGlyKCksICYjMzk7bWF0Y2hpbmcmIzM5OyksXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAmIzM5O1kmIzM5OyBpZiBzZWxmLm1hdGNoaW5nIGVsc2UgJiMzOTtOJiMzOTspXG4mIzQzOyAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOlxuJiM0MzsgICAgICAgICAgICByZXR1cm4gZXJyXG4mIzQzOyAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJiMzOTthbGxvdyYjMzk7KSxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICYjMzk7WSYjMzk7IGlmIHNlbGYuYWxsb3cgZWxzZSAmIzM5O04mIzM5OylcbiYjNDM7ICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6XG4mIzQzOyAgICAgICAgICAgIHJldHVybiBlcnJcbiYjNDM7ICAgICAgICBpZiBzZWxmLnR5cGVfID09ICYjMzk7bWVtY2cmIzM5OzpcbiYjNDM7ICAgICAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJiMzOTtwYXRoJiMzOTspLCBzZWxmLnBhdGgpXG4mIzQzOyAgICAgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZTpcbiYjNDM7ICAgICAgICAgICAgICAgIHJldHVybiBlcnJcbiYjNDM7ICAgICAgICByZXR1cm4gTm9uZVxuJiM0MztcbiYjNDM7Y2xhc3MgRGFtb25GaWx0ZXJzOlxuJiM0MzsgICAgZmlsdGVycyA9IE5vbmVcbiYjNDM7ICAgIHByb2JlID0gTm9uZVxuJiM0MztcbiYjNDM7ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWx0ZXJzPU5vbmUpOlxuJiM0MzsgICAgICAgIGlmIGZpbHRlcnMgaXMgTm9uZTpcbiYjNDM7ICAgICAgICAgICAgZmlsdGVycyA9IFtdXG4mIzQzOyAgICAgICAgc2VsZi5maWx0ZXJzID0gZmlsdGVyc1xuJiM0MzsgICAgICAgIGZvciBpZHgsIGZpbHRlciBpbiBlbnVtZXJhdGUoc2VsZi5maWx0ZXJzKTpcbiYjNDM7ICAgICAgICAgICAgZmlsdGVyLmZpbHRlcnMgPSBzZWxmXG4mIzQzOyAgICAgICAgICAgIGZpbHRlci5pZHggPSBpZHhcbiYjNDM7XG4mIzQzOyAgICBkZWYgc3lzZnNfZGlyKHNlbGYpOlxuJiM0MzsgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5wcm9iZS5zeXNmc19kaXIoKSwgJiMzOTtmaWx0ZXJzJiMzOTspXG4mIzQzO1xuJiM0MzsgICAgZGVmIHN0YWdlKHNlbGYpOlxuJiM0MzsgICAgICAgIGVyciA9IHdyaXRlX2ZpbGUoXG4mIzQzOyAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJiMzOTtucl9maWx0ZXJzJiMzOTspLFxuJiM0MzsgICAgICAgICAgICAgICAgbGVuKHNlbGYuZmlsdGVycykpXG4mIzQzOyAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOlxuJiM0MzsgICAgICAgICAgICByZXR1cm4gZXJyXG4mIzQzOyAgICAgICAgZm9yIGZpbHRlciBpbiBzZWxmLmZpbHRlcnM6XG4mIzQzOyAgICAgICAgICAgIGVyciA9IGZpbHRlci5zdGFnZSgpXG4mIzQzOyAgICAgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZTpcbiYjNDM7ICAgICAgICAgICAgICAgIHJldHVybiBlcnJcbiYjNDM7ICAgICAgICByZXR1cm4gTm9uZVxuJiM0MztcbiYjNDM7Y2xhc3MgRGFtb25Qcm9iZTpcbiYjNDM7ICAgIHdlaWdodCA9IE5vbmVcbiYjNDM7ICAgIGZpbHRlcnMgPSBOb25lXG4mIzQzOyAgICBwcm9iZXMgPSBOb25lXG4mIzQzOyAgICBpZHggPSBOb25lXG4mIzQzO1xuJiM0MzsgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdlaWdodD0wLCBmaWx0ZXJzPU5vbmUpOlxuJiM0MzsgICAgICAgIHNlbGYud2VpZ2h0ID0gd2VpZ2h0XG4mIzQzOyAgICAgICAgaWYgZmlsdGVycyBpcyBOb25lOlxuJiM0MzsgICAgICAgICAgICBmaWx0ZXJzID0gRGFtb25GaWx0ZXJzKClcbiYjNDM7ICAgICAgICBzZWxmLmZpbHRlcnMgPSBmaWx0ZXJzXG4mIzQzOyAgICAgICAgc2VsZi5maWx0ZXJzLnByb2JlID0gc2VsZlxuJiM0MztcbiYjNDM7ICAgIGRlZiBzeXNmc19kaXIoc2VsZik6XG4mIzQzOyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLnByb2Jlcy5zeXNmc19kaXIoKSwgJiMzOTslZCYjMzk7ICUgc2VsZi5pZHgpXG4mIzQzO1xuJiM0MzsgICAgZGVmIHN0YWdlKHNlbGYpOlxuJiM0MzsgICAgICAgIGVyciA9IHdyaXRlX2ZpbGUoXG4mIzQzOyAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJiMzOTt3ZWlnaHQmIzM5OyksICYjMzk7JWQmIzM5OyAlIHNlbGYud2VpZ2h0KVxuJiM0MzsgICAgICAgIHJldHVybiBzZWxmLmZpbHRlcnMuc3RhZ2UoKVxuJiM0MztcbiYjNDM7Y2xhc3MgRGFtb25Qcm9iZXM6XG4mIzQzOyAgICBwcm9iZXMgPSBOb25lXG4mIzQzOyAgICBhdHRycyA9IE5vbmVcbiYjNDM7XG4mIzQzOyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvYmVzPU5vbmUpOlxuJiM0MzsgICAgICAgIGlmIHByb2JlcyBpcyBOb25lOlxuJiM0MzsgICAgICAgICAgICBwcm9iZXMgPSBbXVxuJiM0MzsgICAgICAgIHNlbGYucHJvYmVzID0gcHJvYmVzXG4mIzQzOyAgICAgICAgZm9yIGlkeCwgcHJvYmUgaW4gZW51bWVyYXRlKHNlbGYucHJvYmVzKTpcbiYjNDM7ICAgICAgICAgICAgcHJvYmUucHJvYmVzID0gc2VsZlxuJiM0MzsgICAgICAgICAgICBwcm9iZS5pZHggPSBpZHhcbiYjNDM7XG4mIzQzOyAgICBkZWYgc3lzZnNfZGlyKHNlbGYpOlxuJiM0MzsgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5hdHRycy5zeXNmc19kaXIoKSwgJiMzOTtwcm9iZXMmIzM5OylcbiYjNDM7XG4mIzQzOyAgICBkZWYgc3RhZ2Uoc2VsZik6XG4mIzQzOyAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJiMzOTtucl9wcm9iZXMmIzM5OyksXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICBsZW4oc2VsZi5wcm9iZXMpKVxuJiM0MzsgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZTpcbiYjNDM7ICAgICAgICAgICAgcmV0dXJuIGVyclxuJiM0MzsgICAgICAgIGZvciBwcm9iZSBpbiBzZWxmLnByb2JlczpcbiYjNDM7ICAgICAgICAgICAgZXJyID0gcHJvYmUuc3RhZ2UoKVxuJiM0MzsgICAgICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6XG4mIzQzOyAgICAgICAgICAgICAgICByZXR1cm4gZXJyXG4mIzQzOyAgICAgICAgcmV0dXJuIE5vbmVcbiYjNDM7XG4gY2xhc3MgRGFtb25BdHRyczpcbiAgICAgc2FtcGxlX3VzID0gTm9uZVxuICAgICBhZ2dyX3VzID0gTm9uZVxuQEAgLTU2NSwxMSAmIzQzOzY3NCwxMiBAQCBjbGFzcyBEYW1vbkF0dHJzOlxuICAgICB1cGRhdGVfdXMgPSBOb25lXG4gICAgIG1pbl9ucl9yZWdpb25zID0gTm9uZVxuICAgICBtYXhfbnJfcmVnaW9ucyA9IE5vbmVcbiYjNDM7ICAgIHByb2JlcyA9IE5vbmVcbiAgICAgY29udGV4dCA9IE5vbmVcbiBcbiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNhbXBsZV91cz01MDAwLCBhZ2dyX3VzPTEwMDAwMCxcbiAgICAgICAgICAgICAgICAgIGludGVydmFsc19nb2FsPUludGVydmFsc0dvYWwoKSwgdXBkYXRlX3VzPTEwMDAwMDAsXG4tICAgICAgICAgICAgbWluX25yX3JlZ2lvbnM9MTAsIG1heF9ucl9yZWdpb25zPTEwMDApOlxuJiM0MzsgICAgICAgICAgICBtaW5fbnJfcmVnaW9ucz0xMCwgbWF4X25yX3JlZ2lvbnM9MTAwMCwgcHJvYmVzPU5vbmUpOlxuICAgICAgICAgc2VsZi5zYW1wbGVfdXMgPSBzYW1wbGVfdXNcbiAgICAgICAgIHNlbGYuYWdncl91cyA9IGFnZ3JfdXNcbiAgICAgICAgIHNlbGYuaW50ZXJ2YWxzX2dvYWwgPSBpbnRlcnZhbHNfZ29hbFxuQEAgLTU3Nyw2ICYjNDM7Njg3LDEwIEBAIGNsYXNzIERhbW9uQXR0cnM6XG4gICAgICAgICBzZWxmLnVwZGF0ZV91cyA9IHVwZGF0ZV91c1xuICAgICAgICAgc2VsZi5taW5fbnJfcmVnaW9ucyA9IG1pbl9ucl9yZWdpb25zXG4gICAgICAgICBzZWxmLm1heF9ucl9yZWdpb25zID0gbWF4X25yX3JlZ2lvbnNcbiYjNDM7ICAgICAgICBpZiBwcm9iZXMgaXMgTm9uZTpcbiYjNDM7ICAgICAgICAgICAgcHJvYmVzID0gRGFtb25Qcm9iZXMoKVxuJiM0MzsgICAgICAgIHNlbGYucHJvYmVzID0gcHJvYmVzXG4mIzQzOyAgICAgICAgc2VsZi5wcm9iZXMuYXR0cnMgPSBzZWxmXG4gXG4gICAgIGRlZiBpbnRlcnZhbF9zeXNmc19kaXIoc2VsZik6XG4gICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuY29udGV4dC5zeXNmc19kaXIoKSwgJiMzOTttb25pdG9yaW5nX2F0dHJzJiMzOTssXG5AQCAtNTg2LDYgJiM0Mzs3MDAsOSBAQCBjbGFzcyBEYW1vbkF0dHJzOlxuICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLmNvbnRleHQuc3lzZnNfZGlyKCksICYjMzk7bW9uaXRvcmluZ19hdHRycyYjMzk7LFxuICAgICAgICAgICAgICAgICAmIzM5O25yX3JlZ2lvbnMmIzM5OylcbiBcbiYjNDM7ICAgIGRlZiBzeXNmc19kaXIoc2VsZik6XG4mIzQzOyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLmNvbnRleHQuc3lzZnNfZGlyKCksICYjMzk7bW9uaXRvcmluZ19hdHRycyYjMzk7KVxuJiM0MztcbiAgICAgZGVmIHN0YWdlKHNlbGYpOlxuICAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5pbnRlcnZhbF9zeXNmc19kaXIoKSwgJiMzOTtzYW1wbGVfdXMmIzM5OyksXG4gICAgICAgICAgICAgICAgIHNlbGYuc2FtcGxlX3VzKVxuQEAgLTYxNSw2ICYjNDM7NzMyLDEwIEBAIGNsYXNzIERhbW9uQXR0cnM6XG4gICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6XG4gICAgICAgICAgICAgcmV0dXJuIGVyclxuIFxuJiM0MzsgICAgICAgIGVyciA9IHNlbGYucHJvYmVzLnN0YWdlKClcbiYjNDM7ICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6XG4mIzQzOyAgICAgICAgICAgIHJldHVybiBlcnJcbiYjNDM7XG4gY2xhc3MgRGFtb25DdHg6XG4gICAgIG9wcyA9IE5vbmVcbiAgICAgbW9uaXRvcmluZ19hdHRycyA9IE5vbmVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9kcmduX2R1bXBfZGFtb25fc3RhdHVzLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vZHJnbl9kdW1wX2RhbW9uX3N0YXR1cy5weVxuaW5kZXggMDk1NTJlOTFiYzc4Mi4uNDYyMjA0NmZkMDExOCAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2RyZ25fZHVtcF9kYW1vbl9zdGF0dXMucHlcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2RyZ25fZHVtcF9kYW1vbl9zdGF0dXMucHlcbkBAIC00OCw2ICYjNDM7NDgsMzcgQEAgZGVmIGF0dHJzX3RvX2RpY3QoYXR0cnMpOlxuICAgICAgICAgWyYjMzk7bWF4X25yX3JlZ2lvbnMmIzM5OywgaW50XSxcbiAgICAgICAgIF0pXG4gXG4mIzQzO2RlZiBmaWx0ZXJfdG9fZGljdChkYW1vbl9maWx0ZXIpOlxuJiM0MzsgICAgZmlsdGVyX3R5cGVfa2V5d29yZCA9IHtcbiYjNDM7ICAgICAgICAgICAgMDogJiMzOTthbm9uJiMzOTssXG4mIzQzOyAgICAgICAgICAgIDE6ICYjMzk7bWVtY2cmIzM5OyxcbiYjNDM7ICAgICAgICAgICAgfVxuJiM0MzsgICAgZGljdF8gPSB7XG4mIzQzOyAgICAgICAgICAgICYjMzk7dHlwZSYjMzk7OiBmaWx0ZXJfdHlwZV9rZXl3b3JkW2ludChkYW1vbl9maWx0ZXIudHlwZSldLFxuJiM0MzsgICAgICAgICAgICAmIzM5O21hdGNoaW5nJiMzOTs6IGJvb2woZGFtb25fZmlsdGVyLm1hdGNoaW5nKSxcbiYjNDM7ICAgICAgICAgICAgJiMzOTthbGxvdyYjMzk7OiBib29sKGRhbW9uX2ZpbHRlci5hbGxvdyksXG4mIzQzOyAgICAgICAgICAgIH1cbiYjNDM7ICAgIHR5cGVfID0gZGljdF9bJiMzOTt0eXBlJiMzOTtdXG4mIzQzOyAgICBpZiB0eXBlXyA9PSAmIzM5O21lbWNnJiMzOTs6XG4mIzQzOyAgICAgICAgZGljdF9bJiMzOTttZW1jZ19pZCYjMzk7XSA9IGludChkYW1vbl9maWx0ZXIubWVtY2dfaWQpXG4mIzQzOyAgICByZXR1cm4gZGljdF9cbiYjNDM7XG4mIzQzO2RlZiBmaWx0ZXJzX3RvX2xpc3QoZmlsdGVycyk6XG4mIzQzOyAgICByZXR1cm4gW2ZpbHRlcl90b19kaWN0KGYpXG4mIzQzOyAgICAgICAgICAgIGZvciBmIGluIGxpc3RfZm9yX2VhY2hfZW50cnkoXG4mIzQzOyAgICAgICAgICAgICAgICAmIzM5O3N0cnVjdCBkYW1vbl9maWx0ZXImIzM5OywgZmlsdGVycy5hZGRyZXNzX29mXygpLCAmIzM5O2xpc3QmIzM5OyldXG4mIzQzO1xuJiM0MztkZWYgcHJvYmVfdG9fZGljdChwcm9iZSk6XG4mIzQzOyAgICByZXR1cm4gdG9fZGljdChwcm9iZSwgW1xuJiM0MzsgICAgICAgIFsmIzM5O3dlaWdodCYjMzk7LCBpbnRdLFxuJiM0MzsgICAgICAgIFsmIzM5O2ZpbHRlcnMmIzM5OywgZmlsdGVyc190b19saXN0XSxcbiYjNDM7ICAgICAgICBdKVxuJiM0MztcbiYjNDM7ZGVmIHByb2Jlc190b19saXN0KHByb2Jlcyk6XG4mIzQzOyAgICByZXR1cm4gW3Byb2JlX3RvX2RpY3QocClcbiYjNDM7ICAgICAgICAgICAgZm9yIHAgaW4gbGlzdF9mb3JfZWFjaF9lbnRyeShcbiYjNDM7ICAgICAgICAgICAgICAgICYjMzk7c3RydWN0IGRhbW9uX3Byb2JlJiMzOTssIHByb2Jlcy5hZGRyZXNzX29mXygpLCAmIzM5O2xpc3QmIzM5OyldXG4mIzQzO1xuIGRlZiBhZGRyX3JhbmdlX3RvX2RpY3QoYWRkcl9yYW5nZSk6XG4gICAgIHJldHVybiB0b19kaWN0KGFkZHJfcmFuZ2UsIFtcbiAgICAgICAgIFsmIzM5O3N0YXJ0JiMzOTssIGludF0sXG5AQCAtMTk5LDYgJiM0MzsyMzAsNyBAQCBkZWYgZGFtb25fY3R4X3RvX2RpY3QoY3R4KTpcbiAgICAgcmV0dXJuIHRvX2RpY3QoY3R4LCBbXG4gICAgICAgICBbJiMzOTtvcHMmIzM5Oywgb3BzX3RvX2RpY3RdLFxuICAgICAgICAgWyYjMzk7YXR0cnMmIzM5OywgYXR0cnNfdG9fZGljdF0sXG4mIzQzOyAgICAgICAgWyYjMzk7cHJvYmVzJiMzOTssIHByb2Jlc190b19saXN0XSxcbiAgICAgICAgIFsmIzM5O2FkYXB0aXZlX3RhcmdldHMmIzM5OywgdGFyZ2V0c190b19saXN0XSxcbiAgICAgICAgIFsmIzM5O3NjaGVtZXMmIzM5Oywgc2NoZW1lc190b19saXN0XSxcbiAgICAgICAgIFsmIzM5O3BhdXNlJiMzOTssIGJvb2xdLFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMucHlcbmluZGV4IDNmZmEwNTRiNjM4NjcuLjg1MmI2ODg3YTc1Y2UgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5weVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMucHlcbkBAIC0xNzgsNiAmIzQzOzE3OCwyNCBAQCBkZWYgYXNzZXJ0X21vbml0b3JpbmdfYXR0cnNfY29tbWl0dGVkKGF0dHJzLCBkdW1wKTpcbiAgICAgYXNzZXJ0X3RydWUoZHVtcFsmIzM5O21heF9ucl9yZWdpb25zJiMzOTtdID09IGF0dHJzLm1heF9ucl9yZWdpb25zLFxuICAgICAgICAgICAgICAgICAmIzM5O21heF9ucl9yZWdpb25zJiMzOTssIGR1bXApXG4gXG4mIzQzO2RlZiBhc3NlcnRfZGFtb25fZmlsdGVyc19jb21taXR0ZWQoZmlsdGVycywgZHVtcCk6XG4mIzQzOyAgICBhc3NlcnRfdHJ1ZShsZW4oZHVtcCkgPT0gbGVuKGZpbHRlcnMuZmlsdGVycyksICYjMzk7cHJvYmUgZmlsdGVycyYjMzk7LCBkdW1wKVxuJiM0MzsgICAgZm9yIGlkeCwgZGFtb25fZmlsdGVyIGluIGVudW1lcmF0ZShmaWx0ZXJzLmZpbHRlcnMpOlxuJiM0MzsgICAgICAgIGZpbHRlcl9kdW1wID0gZHVtcFtpZHhdXG4mIzQzOyAgICAgICAgYXNzZXJ0X3RydWUoZmlsdGVyX2R1bXBbJiMzOTt0eXBlJiMzOTtdID09IGRhbW9uX2ZpbHRlci50eXBlXywgJiMzOTt0eXBlJiMzOTssXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgZmlsdGVyX2R1bXApXG4mIzQzOyAgICAgICAgYXNzZXJ0X3RydWUoZmlsdGVyX2R1bXBbJiMzOTttYXRjaGluZyYjMzk7XSA9PSBkYW1vbl9maWx0ZXIubWF0Y2hpbmcsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgJiMzOTttYXRjaGluZyYjMzk7LCBmaWx0ZXJfZHVtcClcbiYjNDM7ICAgICAgICBhc3NlcnRfdHJ1ZShmaWx0ZXJfZHVtcFsmIzM5O2FsbG93JiMzOTtdID09IGRhbW9uX2ZpbHRlci5hbGxvdywgJiMzOTthbGxvdyYjMzk7LFxuJiM0MzsgICAgICAgICAgICAgICAgICAgIGZpbHRlcl9kdW1wKVxuJiM0MztcbiYjNDM7ZGVmIGFzc2VydF9wcm9iZXNfY29tbWl0dGVkKHByb2JlcywgZHVtcCk6XG4mIzQzOyAgICBhc3NlcnRfdHJ1ZShsZW4oZHVtcCkgPT0gbGVuKHByb2Jlcy5wcm9iZXMpLCAmIzM5O3Byb2JlcyBsZW5ndGgmIzM5OywgZHVtcClcbiYjNDM7ICAgIGZvciBpZHgsIHByb2JlIGluIGVudW1lcmF0ZShwcm9iZXMucHJvYmVzKTpcbiYjNDM7ICAgICAgICBwcm9iZV9kdW1wID0gZHVtcFtpZHhdXG4mIzQzOyAgICAgICAgYXNzZXJ0X3RydWUocHJvYmUud2VpZ2h0ID09IHByb2JlX2R1bXBbJiMzOTt3ZWlnaHQmIzM5O10sICYjMzk7d2VpZ2h0JiMzOTssIHByb2JlX2R1bXApXG4mIzQzOyAgICAgICAgYXNzZXJ0X2RhbW9uX2ZpbHRlcnNfY29tbWl0dGVkKHByb2JlLmZpbHRlcnMsIHByb2JlX2R1bXBbJiMzOTtmaWx0ZXJzJiMzOTtdKVxuJiM0MztcbiBkZWYgYXNzZXJ0X21vbml0b3JpbmdfdGFyZ2V0X2NvbW1pdHRlZCh0YXJnZXQsIGR1bXApOlxuICAgICAjIHRhcmdldC5waWQgaXMgdGhlIHBpZCBcJiMzNDtudW1iZXJcJiMzNDssIHdoaWxlIGR1bXBbJiMzOTtwaWQmIzM5O10gaXMgJiMzOTtzdHJ1Y3QgcGlkJiMzOTtcbiAgICAgIyBwb2ludGVyLCBhbmQgaGVuY2UgY2Fubm90IGJlIGNvbXBhcmVkLlxuQEAgLTE5Niw2ICYjNDM7MjE0LDcgQEAgZGVmIGFzc2VydF9jdHhfY29tbWl0dGVkKGN0eCwgZHVtcCk6XG4gICAgICAgICAgICAgfVxuICAgICBhc3NlcnRfdHJ1ZShkdW1wWyYjMzk7b3BzJiMzOTtdWyYjMzk7aWQmIzM5O10gPT0gb3BzX3ZhbFtjdHgub3BzXSwgJiMzOTtvcHNfaWQmIzM5OywgZHVtcClcbiAgICAgYXNzZXJ0X21vbml0b3JpbmdfYXR0cnNfY29tbWl0dGVkKGN0eC5tb25pdG9yaW5nX2F0dHJzLCBkdW1wWyYjMzk7YXR0cnMmIzM5O10pXG4mIzQzOyAgICBhc3NlcnRfcHJvYmVzX2NvbW1pdHRlZChjdHgubW9uaXRvcmluZ19hdHRycy5wcm9iZXMsIGR1bXBbJiMzOTtwcm9iZXMmIzM5O10pXG4gICAgIGFzc2VydF9tb25pdG9yaW5nX3RhcmdldHNfY29tbWl0dGVkKGN0eC50YXJnZXRzLCBkdW1wWyYjMzk7YWRhcHRpdmVfdGFyZ2V0cyYjMzk7XSlcbiAgICAgYXNzZXJ0X3NjaGVtZXNfY29tbWl0dGVkKGN0eC5zY2hlbWVzLCBkdW1wWyYjMzk7c2NoZW1lcyYjMzk7XSlcbiAgICAgYXNzZXJ0X3RydWUoZHVtcFsmIzM5O3BhdXNlJiMzOTtdID09IGN0eC5wYXVzZSwgJiMzOTtwYXVzZSYjMzk7LCBkdW1wKVxuQEAgLTMwMCw3ICYjNDM7MzE5LDIxIEBAIGRlZiBtYWluKCk6XG4gICAgICAgICAgICAgICAgIGludGVydmFsc19nb2FsPV9kYW1vbl9zeXNmcy5JbnRlcnZhbHNHb2FsKFxuICAgICAgICAgICAgICAgICAgICAgYWNjZXNzX2JwPTQwMCwgYWdncnM9MywgbWluX3NhbXBsZV91cz01MDAwLFxuICAgICAgICAgICAgICAgICAgICAgbWF4X3NhbXBsZV91cz0xMDAwMDAwMCksXG4tICAgICAgICAgICAgICAgIHVwZGF0ZV91cz0yMDAwMDAwKSxcbiYjNDM7ICAgICAgICAgICAgICAgIHVwZGF0ZV91cz0yMDAwMDAwLFxuJiM0MzsgICAgICAgICAgICAgICAgcHJvYmVzPV9kYW1vbl9zeXNmcy5EYW1vblByb2JlcyhcbiYjNDM7ICAgICAgICAgICAgICAgICAgICBwcm9iZXM9W19kYW1vbl9zeXNmcy5EYW1vblByb2JlKFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQ9NDIsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcnM9X2RhbW9uX3N5c2ZzLkRhbW9uRmlsdGVycyhcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcnM9W1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kYW1vbl9zeXNmcy5EYW1vbkZpbHRlcihcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZV89JiMzOTthbm9uJiMzOTssXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoaW5nPVRydWUsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93PVRydWUsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICBzY2hlbWVzPVtfZGFtb25fc3lzZnMuRGFtb3MoXG4gICAgICAgICAgICAgICAgIGFjdGlvbj0mIzM5O3BhZ2VvdXQmIzM5OyxcbiAgICAgICAgICAgICAgICAgYWNjZXNzX3BhdHRlcm49X2RhbW9uX3N5c2ZzLkRhbW9zQWNjZXNzUGF0dGVybihcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMTo0MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBhZGRzIEtVbml0IHRlc3RzIGFuZCBQeXRob24gc2VsZnRlc3RzIGZvciBEQU1PTiBmaWx0ZXJzIGFuZCBwcm9iZXMuIEl0IGRvZXMgbm90IG1vZGlmeSBhbnkgZnVuY3Rpb25hbCBrZXJuZWwgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhNmQyMWZiOWVjYjkzNzkxNmE5MGVlMTkyZjY4YWM3MTkyZDFhYjczCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMzAgMjE6NDM6MzQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgKaW5kZXggNGE1MzZkNDFjZGIyZC4uNjU3NzQxMGFjZTNkYSAxMDA2NDQKLS0tIGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaApAQCAtMTMwNiw2ICYjNDM7MTMwNiwxMjUgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfdGFyZ2V0X3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0KQogCQkJKHVuc2lnbmVkIGxvbmdbXVsyXSkge3szLCA4fSwgezgsIDEwfX0sIDIpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfZmlsdGVyX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsCiYjNDM7CQlzdHJ1Y3QgZGFtb25fZmlsdGVyICpkc3QsIHN0cnVjdCBkYW1vbl9maWx0ZXIgKnNyYykKJiM0Mzt7CiYjNDM7CWRhbW9uX2NvbW1pdF9maWx0ZXIoZHN0LCBzcmMpOwomIzQzOwlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LSZndDt0eXBlLCBzcmMtJmd0O3R5cGUpOwomIzQzOwlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LSZndDttYXRjaGluZywgc3JjLSZndDttYXRjaGluZyk7CiYjNDM7CUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtJmd0O2FsbG93LCBzcmMtJmd0O2FsbG93KTsKJiM0MzsJc3dpdGNoIChzcmMtJmd0O3R5cGUpIHsKJiM0MzsJY2FzZSBEQU1PU19GSUxURVJfVFlQRV9NRU1DRzoKJiM0MzsJCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtJmd0O21lbWNnX2lkLCBzcmMtJmd0O21lbWNnX2lkKTsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfZmlsdGVyKHN0cnVjdCBrdW5pdCAqdGVzdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYW1vbl9maWx0ZXIgZHN0ID0gewomIzQzOwkJLnR5cGUgPSBEQU1PTl9GSUxURVJfVFlQRV9BTk9OLAomIzQzOwkJLm1hdGNoaW5nID0gZmFsc2UsCiYjNDM7CQkuYWxsb3cgPSBmYWxzZSwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJZGFtb25fdGVzdF9jb21taXRfZmlsdGVyX2Zvcih0ZXN0LCAmYW1wO2RzdCwKJiM0MzsJCQkmYW1wOyhzdHJ1Y3QgZGFtb25fZmlsdGVyKXsKJiM0MzsJCQkudHlwZSA9IERBTU9OX0ZJTFRFUl9UWVBFX0FOT04sCiYjNDM7CQkJLm1hdGNoaW5nID0gdHJ1ZSwKJiM0MzsJCQkuYWxsb3cgPSB0cnVlLAomIzQzOwkJCX0pOwomIzQzOwlkYW1vbl90ZXN0X2NvbW1pdF9maWx0ZXJfZm9yKHRlc3QsICZhbXA7ZHN0LAomIzQzOwkJCSZhbXA7KHN0cnVjdCBkYW1vbl9maWx0ZXIpewomIzQzOwkJCS50eXBlID0gREFNT05fRklMVEVSX1RZUEVfTUVNQ0csCiYjNDM7CQkJLm1hdGNoaW5nID0gZmFsc2UsCiYjNDM7CQkJLmFsbG93ID0gZmFsc2UsCiYjNDM7CQkJLm1lbWNnX2lkID0gMTIzLAomIzQzOwkJCX0pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fdGVzdF9oZWxwX3NldHVwX3Byb2Jlcyh1bnNpZ25lZCBpbnQgd2VpZ2h0c1tdLAomIzQzOwkJaW50IG5yX3dlaWdodHMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGFtb25fY3R4ICpjdHg7CiYjNDM7CXN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwljdHggPSBkYW1vbl9uZXdfY3R4KCk7CiYjNDM7CWlmICghY3R4KQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBucl93ZWlnaHRzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJcHJvYmUgPSBkYW1vbl9uZXdfcHJvYmUoKTsKJiM0MzsJCWlmICghcHJvYmUpIHsKJiM0MzsJCQlkYW1vbl9kZXN0cm95X2N0eChjdHgpOwomIzQzOwkJCXJldHVybiBOVUxMOwomIzQzOwkJfQomIzQzOwkJcHJvYmUtJmd0O3dlaWdodCA9IHdlaWdodHNbaV07CiYjNDM7CQlkYW1vbl9hZGRfcHJvYmUoY3R4LCBwcm9iZSk7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIGN0eDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsCiYjNDM7CQl1bnNpZ25lZCBpbnQgZHN0X3dlaWdodHNbXSwgaW50IG5yX2RzdF9wcm9iZXMsCiYjNDM7CQl1bnNpZ25lZCBpbnQgc3JjX3dlaWdodHNbXSwgaW50IG5yX3NyY19wcm9iZXMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsICpzcmM7CiYjNDM7CWludCBlcnI7CiYjNDM7CXN0cnVjdCBkYW1vbl9wcm9iZSAqZHN0X3Byb2JlLCAqc3JjX3Byb2JlOwomIzQzOwomIzQzOwlkc3QgPSBkYW1vbl90ZXN0X2hlbHBfc2V0dXBfcHJvYmVzKGRzdF93ZWlnaHRzLCBucl9kc3RfcHJvYmVzKTsKJiM0MzsJaWYgKCFkc3QpCiYjNDM7CQlrdW5pdF9za2lwKHRlc3QsICYjMzQ7ZHN0IGFsbG9jIGZhaWwmIzM0Oyk7CiYjNDM7CXNyYyA9IGRhbW9uX3Rlc3RfaGVscF9zZXR1cF9wcm9iZXMoc3JjX3dlaWdodHMsIG5yX3NyY19wcm9iZXMpOwomIzQzOwlpZiAoIXNyYykgewomIzQzOwkJZGFtb25fZGVzdHJveV9jdHgoZHN0KTsKJiM0MzsJCWt1bml0X3NraXAodGVzdCwgJiMzNDtzcmMgYWxsb2MgZmFpbCYjMzQ7KTsKJiM0MzsJfQomIzQzOwomIzQzOwllcnIgPSBkYW1vbl9jb21taXRfcHJvYmVzKGRzdCwgc3JjKTsKJiM0MzsJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIGVyciwgMCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm47CiYjNDM7CW5yX2RzdF9wcm9iZXMgPSAwOwomIzQzOwlkYW1vbl9mb3JfZWFjaF9wcm9iZShkc3RfcHJvYmUsIGRzdCkKJiM0MzsJCW5yX2RzdF9wcm9iZXMmIzQzOyYjNDM7OwomIzQzOwlucl9zcmNfcHJvYmVzID0gMDsKJiM0MzsJZGFtb25fZm9yX2VhY2hfcHJvYmUoc3JjX3Byb2JlLCBzcmMpCiYjNDM7CQlucl9zcmNfcHJvYmVzJiM0MzsmIzQzOzsKJiM0MzsJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIG5yX2RzdF9wcm9iZXMsIG5yX3NyY19wcm9iZXMpOwomIzQzOwlucl9kc3RfcHJvYmVzID0gMDsKJiM0MzsJZGFtb25fZm9yX2VhY2hfcHJvYmUoZHN0X3Byb2JlLCBkc3QpIHsKJiM0MzsJCXNyY19wcm9iZSA9IGRhbW9uX250aF9wcm9iZShucl9kc3RfcHJvYmVzLCBzcmMpOwomIzQzOwkJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIHNyY19wcm9iZS0mZ3Q7d2VpZ2h0LCBkc3RfcHJvYmUtJmd0O3dlaWdodCk7CiYjNDM7CQlucl9kc3RfcHJvYmVzJiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwlkYW1vbl9kZXN0cm95X2N0eChkc3QpOwomIzQzOwlkYW1vbl9kZXN0cm95X2N0eChzcmMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXMoc3RydWN0IGt1bml0ICp0ZXN0KQomIzQzO3sKJiM0MzsJZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LAomIzQzOwkJCSh1bnNpZ25lZCBpbnRbXSl7fSwgMCwgKHVuc2lnbmVkIGludFtdKXt9LCAwKTsKJiM0MzsJZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LAomIzQzOwkJCSh1bnNpZ25lZCBpbnRbXSl7fSwgMCwgKHVuc2lnbmVkIGludFtdKXsxfSwgMSk7CiYjNDM7CWRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCwKJiM0MzsJCQkodW5zaWduZWQgaW50W10pe30sIDAsICh1bnNpZ25lZCBpbnRbXSl7MSwgMn0sIDIpOwomIzQzOwlkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsCiYjNDM7CQkJKHVuc2lnbmVkIGludFtdKXsxfSwgMSwgKHVuc2lnbmVkIGludFtdKXsyfSwgMSk7CiYjNDM7CWRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCwKJiM0MzsJCQkodW5zaWduZWQgaW50W10pezF9LCAxLCAodW5zaWduZWQgaW50W10pezIsIDN9LCAyKTsKJiM0MzsJZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LAomIzQzOwkJCSh1bnNpZ25lZCBpbnRbXSl7MiwgM30sIDIsICh1bnNpZ25lZCBpbnRbXSl7MX0sIDEpOwomIzQzOwlkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsCiYjNDM7CQkJKHVuc2lnbmVkIGludFtdKXsyLCAzfSwgMiwgKHVuc2lnbmVkIGludFtdKXt9LCAwKTsKJiM0MzsJZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LAomIzQzOwkJCSh1bnNpZ25lZCBpbnRbXSl7Mn0sIDEsICh1bnNpZ25lZCBpbnRbXSl7fSwgMCk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfY3R4KHN0cnVjdCBrdW5pdCAqdGVzdCkKIHsKIAlzdHJ1Y3QgZGFtb25fY3R4ICpzcmMsICpkc3Q7CkBAIC0xNjU2LDYgJiM0MzsxNzc1LDggQEAgc3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIGRhbW9uX3Rlc3RfY2FzZXNbXSA9IHsKIAlLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfY29tbWl0X3BhZ2VvdXQpLAogCUtVTklUX0NBU0UoZGFtb3NfdGVzdF9jb21taXRfbWlncmF0ZV9ob3QpLAogCUtVTklUX0NBU0UoZGFtb25fdGVzdF9jb21taXRfdGFyZ2V0X3JlZ2lvbnMpLAomIzQzOwlLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfY29tbWl0X2ZpbHRlciksCiYjNDM7CUtVTklUX0NBU0UoZGFtb25fdGVzdF9jb21taXRfcHJvYmVzKSwKIAlLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfY29tbWl0X2N0eCksCiAJS1VOSVRfQ0FTRShkYW1vc190ZXN0X2ZpbHRlcl9vdXQpLAogCUtVTklUX0NBU0UoZGFtb25fdGVzdF9mZWVkX2xvb3BfbmV4dF9pbnB1dCksCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9fZGFtb25fc3lzZnMucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9fZGFtb25fc3lzZnMucHkKaW5kZXggZTZhMjI2NWQ3MjFlOC4uZDZhZmI1YjJmMGE0YSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vX2RhbW9uX3N5c2ZzLnB5CiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL19kYW1vbl9zeXNmcy5weQpAQCAtNTU4LDYgJiM0Mzs1NTgsMTE1IEBAIGNsYXNzIEludGVydmFsc0dvYWw6CiAgICAgICAgICAgICByZXR1cm4gZXJyCiAgICAgICAgIHJldHVybiBOb25lCiAKJiM0MztjbGFzcyBEYW1vbkZpbHRlcjoKJiM0MzsgICAgdHlwZV8gPSBOb25lCiYjNDM7ICAgIG1hdGNoaW5nID0gTm9uZQomIzQzOyAgICBhbGxvdyA9IE5vbmUKJiM0MzsgICAgZmlsdGVycyA9IE5vbmUKJiM0MzsgICAgcGF0aCA9IE5vbmUKJiM0MzsgICAgaWR4ID0gTm9uZQomIzQzOwomIzQzOyAgICBkZWYgX19pbml0X18oc2VsZiwgdHlwZV89JiMzOTthbm9uJiMzOTssIG1hdGNoaW5nPUZhbHNlLCBhbGxvdz1GYWxzZSwgcGF0aD1Ob25lKToKJiM0MzsgICAgICAgIHNlbGYudHlwZV8gPSB0eXBlXwomIzQzOyAgICAgICAgc2VsZi5tYXRjaGluZyA9IG1hdGNoaW5nCiYjNDM7ICAgICAgICBzZWxmLmFsbG93ID0gYWxsb3cKJiM0MzsgICAgICAgIHNlbGYucGF0aCA9IHBhdGgKJiM0MzsKJiM0MzsgICAgZGVmIHN5c2ZzX2RpcihzZWxmKToKJiM0MzsgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5maWx0ZXJzLnN5c2ZzX2RpcigpLCAmIzM5OyVkJiMzOTsgJSBzZWxmLmlkeCkKJiM0MzsKJiM0MzsgICAgZGVmIHN0YWdlKHNlbGYpOgomIzQzOyAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJiMzOTt0eXBlJiMzOTspLCBzZWxmLnR5cGVfKQomIzQzOyAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgICAgIHJldHVybiBlcnIKJiM0MzsgICAgICAgIGVyciA9IHdyaXRlX2ZpbGUob3MucGF0aC5qb2luKHNlbGYuc3lzZnNfZGlyKCksICYjMzk7bWF0Y2hpbmcmIzM5OyksCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICYjMzk7WSYjMzk7IGlmIHNlbGYubWF0Y2hpbmcgZWxzZSAmIzM5O04mIzM5OykKJiM0MzsgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZToKJiM0MzsgICAgICAgICAgICByZXR1cm4gZXJyCiYjNDM7ICAgICAgICBlcnIgPSB3cml0ZV9maWxlKG9zLnBhdGguam9pbihzZWxmLnN5c2ZzX2RpcigpLCAmIzM5O2FsbG93JiMzOTspLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAmIzM5O1kmIzM5OyBpZiBzZWxmLmFsbG93IGVsc2UgJiMzOTtOJiMzOTspCiYjNDM7ICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6CiYjNDM7ICAgICAgICAgICAgcmV0dXJuIGVycgomIzQzOyAgICAgICAgaWYgc2VsZi50eXBlXyA9PSAmIzM5O21lbWNnJiMzOTs6CiYjNDM7ICAgICAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJiMzOTtwYXRoJiMzOTspLCBzZWxmLnBhdGgpCiYjNDM7ICAgICAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgICAgICAgICByZXR1cm4gZXJyCiYjNDM7ICAgICAgICByZXR1cm4gTm9uZQomIzQzOwomIzQzO2NsYXNzIERhbW9uRmlsdGVyczoKJiM0MzsgICAgZmlsdGVycyA9IE5vbmUKJiM0MzsgICAgcHJvYmUgPSBOb25lCiYjNDM7CiYjNDM7ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWx0ZXJzPU5vbmUpOgomIzQzOyAgICAgICAgaWYgZmlsdGVycyBpcyBOb25lOgomIzQzOyAgICAgICAgICAgIGZpbHRlcnMgPSBbXQomIzQzOyAgICAgICAgc2VsZi5maWx0ZXJzID0gZmlsdGVycwomIzQzOyAgICAgICAgZm9yIGlkeCwgZmlsdGVyIGluIGVudW1lcmF0ZShzZWxmLmZpbHRlcnMpOgomIzQzOyAgICAgICAgICAgIGZpbHRlci5maWx0ZXJzID0gc2VsZgomIzQzOyAgICAgICAgICAgIGZpbHRlci5pZHggPSBpZHgKJiM0MzsKJiM0MzsgICAgZGVmIHN5c2ZzX2RpcihzZWxmKToKJiM0MzsgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5wcm9iZS5zeXNmc19kaXIoKSwgJiMzOTtmaWx0ZXJzJiMzOTspCiYjNDM7CiYjNDM7ICAgIGRlZiBzdGFnZShzZWxmKToKJiM0MzsgICAgICAgIGVyciA9IHdyaXRlX2ZpbGUoCiYjNDM7ICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihzZWxmLnN5c2ZzX2RpcigpLCAmIzM5O25yX2ZpbHRlcnMmIzM5OyksCiYjNDM7ICAgICAgICAgICAgICAgIGxlbihzZWxmLmZpbHRlcnMpKQomIzQzOyAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgICAgIHJldHVybiBlcnIKJiM0MzsgICAgICAgIGZvciBmaWx0ZXIgaW4gc2VsZi5maWx0ZXJzOgomIzQzOyAgICAgICAgICAgIGVyciA9IGZpbHRlci5zdGFnZSgpCiYjNDM7ICAgICAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgICAgICAgICByZXR1cm4gZXJyCiYjNDM7ICAgICAgICByZXR1cm4gTm9uZQomIzQzOwomIzQzO2NsYXNzIERhbW9uUHJvYmU6CiYjNDM7ICAgIHdlaWdodCA9IE5vbmUKJiM0MzsgICAgZmlsdGVycyA9IE5vbmUKJiM0MzsgICAgcHJvYmVzID0gTm9uZQomIzQzOyAgICBpZHggPSBOb25lCiYjNDM7CiYjNDM7ICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3ZWlnaHQ9MCwgZmlsdGVycz1Ob25lKToKJiM0MzsgICAgICAgIHNlbGYud2VpZ2h0ID0gd2VpZ2h0CiYjNDM7ICAgICAgICBpZiBmaWx0ZXJzIGlzIE5vbmU6CiYjNDM7ICAgICAgICAgICAgZmlsdGVycyA9IERhbW9uRmlsdGVycygpCiYjNDM7ICAgICAgICBzZWxmLmZpbHRlcnMgPSBmaWx0ZXJzCiYjNDM7ICAgICAgICBzZWxmLmZpbHRlcnMucHJvYmUgPSBzZWxmCiYjNDM7CiYjNDM7ICAgIGRlZiBzeXNmc19kaXIoc2VsZik6CiYjNDM7ICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYucHJvYmVzLnN5c2ZzX2RpcigpLCAmIzM5OyVkJiMzOTsgJSBzZWxmLmlkeCkKJiM0MzsKJiM0MzsgICAgZGVmIHN0YWdlKHNlbGYpOgomIzQzOyAgICAgICAgZXJyID0gd3JpdGVfZmlsZSgKJiM0MzsgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHNlbGYuc3lzZnNfZGlyKCksICYjMzk7d2VpZ2h0JiMzOTspLCAmIzM5OyVkJiMzOTsgJSBzZWxmLndlaWdodCkKJiM0MzsgICAgICAgIHJldHVybiBzZWxmLmZpbHRlcnMuc3RhZ2UoKQomIzQzOwomIzQzO2NsYXNzIERhbW9uUHJvYmVzOgomIzQzOyAgICBwcm9iZXMgPSBOb25lCiYjNDM7ICAgIGF0dHJzID0gTm9uZQomIzQzOwomIzQzOyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvYmVzPU5vbmUpOgomIzQzOyAgICAgICAgaWYgcHJvYmVzIGlzIE5vbmU6CiYjNDM7ICAgICAgICAgICAgcHJvYmVzID0gW10KJiM0MzsgICAgICAgIHNlbGYucHJvYmVzID0gcHJvYmVzCiYjNDM7ICAgICAgICBmb3IgaWR4LCBwcm9iZSBpbiBlbnVtZXJhdGUoc2VsZi5wcm9iZXMpOgomIzQzOyAgICAgICAgICAgIHByb2JlLnByb2JlcyA9IHNlbGYKJiM0MzsgICAgICAgICAgICBwcm9iZS5pZHggPSBpZHgKJiM0MzsKJiM0MzsgICAgZGVmIHN5c2ZzX2RpcihzZWxmKToKJiM0MzsgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5hdHRycy5zeXNmc19kaXIoKSwgJiMzOTtwcm9iZXMmIzM5OykKJiM0MzsKJiM0MzsgICAgZGVmIHN0YWdlKHNlbGYpOgomIzQzOyAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJiMzOTtucl9wcm9iZXMmIzM5OyksCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgIGxlbihzZWxmLnByb2JlcykpCiYjNDM7ICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6CiYjNDM7ICAgICAgICAgICAgcmV0dXJuIGVycgomIzQzOyAgICAgICAgZm9yIHByb2JlIGluIHNlbGYucHJvYmVzOgomIzQzOyAgICAgICAgICAgIGVyciA9IHByb2JlLnN0YWdlKCkKJiM0MzsgICAgICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6CiYjNDM7ICAgICAgICAgICAgICAgIHJldHVybiBlcnIKJiM0MzsgICAgICAgIHJldHVybiBOb25lCiYjNDM7CiBjbGFzcyBEYW1vbkF0dHJzOgogICAgIHNhbXBsZV91cyA9IE5vbmUKICAgICBhZ2dyX3VzID0gTm9uZQpAQCAtNTY1LDExICYjNDM7Njc0LDEyIEBAIGNsYXNzIERhbW9uQXR0cnM6CiAgICAgdXBkYXRlX3VzID0gTm9uZQogICAgIG1pbl9ucl9yZWdpb25zID0gTm9uZQogICAgIG1heF9ucl9yZWdpb25zID0gTm9uZQomIzQzOyAgICBwcm9iZXMgPSBOb25lCiAgICAgY29udGV4dCA9IE5vbmUKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzYW1wbGVfdXM9NTAwMCwgYWdncl91cz0xMDAwMDAsCiAgICAgICAgICAgICAgICAgIGludGVydmFsc19nb2FsPUludGVydmFsc0dvYWwoKSwgdXBkYXRlX3VzPTEwMDAwMDAsCi0gICAgICAgICAgICBtaW5fbnJfcmVnaW9ucz0xMCwgbWF4X25yX3JlZ2lvbnM9MTAwMCk6CiYjNDM7ICAgICAgICAgICAgbWluX25yX3JlZ2lvbnM9MTAsIG1heF9ucl9yZWdpb25zPTEwMDAsIHByb2Jlcz1Ob25lKToKICAgICAgICAgc2VsZi5zYW1wbGVfdXMgPSBzYW1wbGVfdXMKICAgICAgICAgc2VsZi5hZ2dyX3VzID0gYWdncl91cwogICAgICAgICBzZWxmLmludGVydmFsc19nb2FsID0gaW50ZXJ2YWxzX2dvYWwKQEAgLTU3Nyw2ICYjNDM7Njg3LDEwIEBAIGNsYXNzIERhbW9uQXR0cnM6CiAgICAgICAgIHNlbGYudXBkYXRlX3VzID0gdXBkYXRlX3VzCiAgICAgICAgIHNlbGYubWluX25yX3JlZ2lvbnMgPSBtaW5fbnJfcmVnaW9ucwogICAgICAgICBzZWxmLm1heF9ucl9yZWdpb25zID0gbWF4X25yX3JlZ2lvbnMKJiM0MzsgICAgICAgIGlmIHByb2JlcyBpcyBOb25lOgomIzQzOyAgICAgICAgICAgIHByb2JlcyA9IERhbW9uUHJvYmVzKCkKJiM0MzsgICAgICAgIHNlbGYucHJvYmVzID0gcHJvYmVzCiYjNDM7ICAgICAgICBzZWxmLnByb2Jlcy5hdHRycyA9IHNlbGYKIAogICAgIGRlZiBpbnRlcnZhbF9zeXNmc19kaXIoc2VsZik6CiAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5jb250ZXh0LnN5c2ZzX2RpcigpLCAmIzM5O21vbml0b3JpbmdfYXR0cnMmIzM5OywKQEAgLTU4Niw2ICYjNDM7NzAwLDkgQEAgY2xhc3MgRGFtb25BdHRyczoKICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLmNvbnRleHQuc3lzZnNfZGlyKCksICYjMzk7bW9uaXRvcmluZ19hdHRycyYjMzk7LAogICAgICAgICAgICAgICAgICYjMzk7bnJfcmVnaW9ucyYjMzk7KQogCiYjNDM7ICAgIGRlZiBzeXNmc19kaXIoc2VsZik6CiYjNDM7ICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuY29udGV4dC5zeXNmc19kaXIoKSwgJiMzOTttb25pdG9yaW5nX2F0dHJzJiMzOTspCiYjNDM7CiAgICAgZGVmIHN0YWdlKHNlbGYpOgogICAgICAgICBlcnIgPSB3cml0ZV9maWxlKG9zLnBhdGguam9pbihzZWxmLmludGVydmFsX3N5c2ZzX2RpcigpLCAmIzM5O3NhbXBsZV91cyYjMzk7KSwKICAgICAgICAgICAgICAgICBzZWxmLnNhbXBsZV91cykKQEAgLTYxNSw2ICYjNDM7NzMyLDEwIEBAIGNsYXNzIERhbW9uQXR0cnM6CiAgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHJldHVybiBlcnIKIAomIzQzOyAgICAgICAgZXJyID0gc2VsZi5wcm9iZXMuc3RhZ2UoKQomIzQzOyAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgICAgIHJldHVybiBlcnIKJiM0MzsKIGNsYXNzIERhbW9uQ3R4OgogICAgIG9wcyA9IE5vbmUKICAgICBtb25pdG9yaW5nX2F0dHJzID0gTm9uZQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vZHJnbl9kdW1wX2RhbW9uX3N0YXR1cy5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2RyZ25fZHVtcF9kYW1vbl9zdGF0dXMucHkKaW5kZXggMDk1NTJlOTFiYzc4Mi4uNDYyMjA0NmZkMDExOCAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vZHJnbl9kdW1wX2RhbW9uX3N0YXR1cy5weQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9kcmduX2R1bXBfZGFtb25fc3RhdHVzLnB5CkBAIC00OCw2ICYjNDM7NDgsMzcgQEAgZGVmIGF0dHJzX3RvX2RpY3QoYXR0cnMpOgogICAgICAgICBbJiMzOTttYXhfbnJfcmVnaW9ucyYjMzk7LCBpbnRdLAogICAgICAgICBdKQogCiYjNDM7ZGVmIGZpbHRlcl90b19kaWN0KGRhbW9uX2ZpbHRlcik6CiYjNDM7ICAgIGZpbHRlcl90eXBlX2tleXdvcmQgPSB7CiYjNDM7ICAgICAgICAgICAgMDogJiMzOTthbm9uJiMzOTssCiYjNDM7ICAgICAgICAgICAgMTogJiMzOTttZW1jZyYjMzk7LAomIzQzOyAgICAgICAgICAgIH0KJiM0MzsgICAgZGljdF8gPSB7CiYjNDM7ICAgICAgICAgICAgJiMzOTt0eXBlJiMzOTs6IGZpbHRlcl90eXBlX2tleXdvcmRbaW50KGRhbW9uX2ZpbHRlci50eXBlKV0sCiYjNDM7ICAgICAgICAgICAgJiMzOTttYXRjaGluZyYjMzk7OiBib29sKGRhbW9uX2ZpbHRlci5tYXRjaGluZyksCiYjNDM7ICAgICAgICAgICAgJiMzOTthbGxvdyYjMzk7OiBib29sKGRhbW9uX2ZpbHRlci5hbGxvdyksCiYjNDM7ICAgICAgICAgICAgfQomIzQzOyAgICB0eXBlXyA9IGRpY3RfWyYjMzk7dHlwZSYjMzk7XQomIzQzOyAgICBpZiB0eXBlXyA9PSAmIzM5O21lbWNnJiMzOTs6CiYjNDM7ICAgICAgICBkaWN0X1smIzM5O21lbWNnX2lkJiMzOTtdID0gaW50KGRhbW9uX2ZpbHRlci5tZW1jZ19pZCkKJiM0MzsgICAgcmV0dXJuIGRpY3RfCiYjNDM7CiYjNDM7ZGVmIGZpbHRlcnNfdG9fbGlzdChmaWx0ZXJzKToKJiM0MzsgICAgcmV0dXJuIFtmaWx0ZXJfdG9fZGljdChmKQomIzQzOyAgICAgICAgICAgIGZvciBmIGluIGxpc3RfZm9yX2VhY2hfZW50cnkoCiYjNDM7ICAgICAgICAgICAgICAgICYjMzk7c3RydWN0IGRhbW9uX2ZpbHRlciYjMzk7LCBmaWx0ZXJzLmFkZHJlc3Nfb2ZfKCksICYjMzk7bGlzdCYjMzk7KV0KJiM0MzsKJiM0MztkZWYgcHJvYmVfdG9fZGljdChwcm9iZSk6CiYjNDM7ICAgIHJldHVybiB0b19kaWN0KHByb2JlLCBbCiYjNDM7ICAgICAgICBbJiMzOTt3ZWlnaHQmIzM5OywgaW50XSwKJiM0MzsgICAgICAgIFsmIzM5O2ZpbHRlcnMmIzM5OywgZmlsdGVyc190b19saXN0XSwKJiM0MzsgICAgICAgIF0pCiYjNDM7CiYjNDM7ZGVmIHByb2Jlc190b19saXN0KHByb2Jlcyk6CiYjNDM7ICAgIHJldHVybiBbcHJvYmVfdG9fZGljdChwKQomIzQzOyAgICAgICAgICAgIGZvciBwIGluIGxpc3RfZm9yX2VhY2hfZW50cnkoCiYjNDM7ICAgICAgICAgICAgICAgICYjMzk7c3RydWN0IGRhbW9uX3Byb2JlJiMzOTssIHByb2Jlcy5hZGRyZXNzX29mXygpLCAmIzM5O2xpc3QmIzM5OyldCiYjNDM7CiBkZWYgYWRkcl9yYW5nZV90b19kaWN0KGFkZHJfcmFuZ2UpOgogICAgIHJldHVybiB0b19kaWN0KGFkZHJfcmFuZ2UsIFsKICAgICAgICAgWyYjMzk7c3RhcnQmIzM5OywgaW50XSwKQEAgLTE5OSw2ICYjNDM7MjMwLDcgQEAgZGVmIGRhbW9uX2N0eF90b19kaWN0KGN0eCk6CiAgICAgcmV0dXJuIHRvX2RpY3QoY3R4LCBbCiAgICAgICAgIFsmIzM5O29wcyYjMzk7LCBvcHNfdG9fZGljdF0sCiAgICAgICAgIFsmIzM5O2F0dHJzJiMzOTssIGF0dHJzX3RvX2RpY3RdLAomIzQzOyAgICAgICAgWyYjMzk7cHJvYmVzJiMzOTssIHByb2Jlc190b19saXN0XSwKICAgICAgICAgWyYjMzk7YWRhcHRpdmVfdGFyZ2V0cyYjMzk7LCB0YXJnZXRzX3RvX2xpc3RdLAogICAgICAgICBbJiMzOTtzY2hlbWVzJiMzOTssIHNjaGVtZXNfdG9fbGlzdF0sCiAgICAgICAgIFsmIzM5O3BhdXNlJiMzOTssIGJvb2xdLApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5weQppbmRleCAzZmZhMDU0YjYzODY3Li44NTJiNjg4N2E3NWNlIDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5weQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5weQpAQCAtMTc4LDYgJiM0MzsxNzgsMjQgQEAgZGVmIGFzc2VydF9tb25pdG9yaW5nX2F0dHJzX2NvbW1pdHRlZChhdHRycywgZHVtcCk6CiAgICAgYXNzZXJ0X3RydWUoZHVtcFsmIzM5O21heF9ucl9yZWdpb25zJiMzOTtdID09IGF0dHJzLm1heF9ucl9yZWdpb25zLAogICAgICAgICAgICAgICAgICYjMzk7bWF4X25yX3JlZ2lvbnMmIzM5OywgZHVtcCkKIAomIzQzO2RlZiBhc3NlcnRfZGFtb25fZmlsdGVyc19jb21taXR0ZWQoZmlsdGVycywgZHVtcCk6CiYjNDM7ICAgIGFzc2VydF90cnVlKGxlbihkdW1wKSA9PSBsZW4oZmlsdGVycy5maWx0ZXJzKSwgJiMzOTtwcm9iZSBmaWx0ZXJzJiMzOTssIGR1bXApCiYjNDM7ICAgIGZvciBpZHgsIGRhbW9uX2ZpbHRlciBpbiBlbnVtZXJhdGUoZmlsdGVycy5maWx0ZXJzKToKJiM0MzsgICAgICAgIGZpbHRlcl9kdW1wID0gZHVtcFtpZHhdCiYjNDM7ICAgICAgICBhc3NlcnRfdHJ1ZShmaWx0ZXJfZHVtcFsmIzM5O3R5cGUmIzM5O10gPT0gZGFtb25fZmlsdGVyLnR5cGVfLCAmIzM5O3R5cGUmIzM5OywKJiM0MzsgICAgICAgICAgICAgICAgICAgIGZpbHRlcl9kdW1wKQomIzQzOyAgICAgICAgYXNzZXJ0X3RydWUoZmlsdGVyX2R1bXBbJiMzOTttYXRjaGluZyYjMzk7XSA9PSBkYW1vbl9maWx0ZXIubWF0Y2hpbmcsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAmIzM5O21hdGNoaW5nJiMzOTssIGZpbHRlcl9kdW1wKQomIzQzOyAgICAgICAgYXNzZXJ0X3RydWUoZmlsdGVyX2R1bXBbJiMzOTthbGxvdyYjMzk7XSA9PSBkYW1vbl9maWx0ZXIuYWxsb3csICYjMzk7YWxsb3cmIzM5OywKJiM0MzsgICAgICAgICAgICAgICAgICAgIGZpbHRlcl9kdW1wKQomIzQzOwomIzQzO2RlZiBhc3NlcnRfcHJvYmVzX2NvbW1pdHRlZChwcm9iZXMsIGR1bXApOgomIzQzOyAgICBhc3NlcnRfdHJ1ZShsZW4oZHVtcCkgPT0gbGVuKHByb2Jlcy5wcm9iZXMpLCAmIzM5O3Byb2JlcyBsZW5ndGgmIzM5OywgZHVtcCkKJiM0MzsgICAgZm9yIGlkeCwgcHJvYmUgaW4gZW51bWVyYXRlKHByb2Jlcy5wcm9iZXMpOgomIzQzOyAgICAgICAgcHJvYmVfZHVtcCA9IGR1bXBbaWR4XQomIzQzOyAgICAgICAgYXNzZXJ0X3RydWUocHJvYmUud2VpZ2h0ID09IHByb2JlX2R1bXBbJiMzOTt3ZWlnaHQmIzM5O10sICYjMzk7d2VpZ2h0JiMzOTssIHByb2JlX2R1bXApCiYjNDM7ICAgICAgICBhc3NlcnRfZGFtb25fZmlsdGVyc19jb21taXR0ZWQocHJvYmUuZmlsdGVycywgcHJvYmVfZHVtcFsmIzM5O2ZpbHRlcnMmIzM5O10pCiYjNDM7CiBkZWYgYXNzZXJ0X21vbml0b3JpbmdfdGFyZ2V0X2NvbW1pdHRlZCh0YXJnZXQsIGR1bXApOgogICAgICMgdGFyZ2V0LnBpZCBpcyB0aGUgcGlkICYjMzQ7bnVtYmVyJiMzNDssIHdoaWxlIGR1bXBbJiMzOTtwaWQmIzM5O10gaXMgJiMzOTtzdHJ1Y3QgcGlkJiMzOTsKICAgICAjIHBvaW50ZXIsIGFuZCBoZW5jZSBjYW5ub3QgYmUgY29tcGFyZWQuCkBAIC0xOTYsNiAmIzQzOzIxNCw3IEBAIGRlZiBhc3NlcnRfY3R4X2NvbW1pdHRlZChjdHgsIGR1bXApOgogICAgICAgICAgICAgfQogICAgIGFzc2VydF90cnVlKGR1bXBbJiMzOTtvcHMmIzM5O11bJiMzOTtpZCYjMzk7XSA9PSBvcHNfdmFsW2N0eC5vcHNdLCAmIzM5O29wc19pZCYjMzk7LCBkdW1wKQogICAgIGFzc2VydF9tb25pdG9yaW5nX2F0dHJzX2NvbW1pdHRlZChjdHgubW9uaXRvcmluZ19hdHRycywgZHVtcFsmIzM5O2F0dHJzJiMzOTtdKQomIzQzOyAgICBhc3NlcnRfcHJvYmVzX2NvbW1pdHRlZChjdHgubW9uaXRvcmluZ19hdHRycy5wcm9iZXMsIGR1bXBbJiMzOTtwcm9iZXMmIzM5O10pCiAgICAgYXNzZXJ0X21vbml0b3JpbmdfdGFyZ2V0c19jb21taXR0ZWQoY3R4LnRhcmdldHMsIGR1bXBbJiMzOTthZGFwdGl2ZV90YXJnZXRzJiMzOTtdKQogICAgIGFzc2VydF9zY2hlbWVzX2NvbW1pdHRlZChjdHguc2NoZW1lcywgZHVtcFsmIzM5O3NjaGVtZXMmIzM5O10pCiAgICAgYXNzZXJ0X3RydWUoZHVtcFsmIzM5O3BhdXNlJiMzOTtdID09IGN0eC5wYXVzZSwgJiMzOTtwYXVzZSYjMzk7LCBkdW1wKQpAQCAtMzAwLDcgJiM0MzszMTksMjEgQEAgZGVmIG1haW4oKToKICAgICAgICAgICAgICAgICBpbnRlcnZhbHNfZ29hbD1fZGFtb25fc3lzZnMuSW50ZXJ2YWxzR29hbCgKICAgICAgICAgICAgICAgICAgICAgYWNjZXNzX2JwPTQwMCwgYWdncnM9MywgbWluX3NhbXBsZV91cz01MDAwLAogICAgICAgICAgICAgICAgICAgICBtYXhfc2FtcGxlX3VzPTEwMDAwMDAwKSwKLSAgICAgICAgICAgICAgICB1cGRhdGVfdXM9MjAwMDAwMCksCiYjNDM7ICAgICAgICAgICAgICAgIHVwZGF0ZV91cz0yMDAwMDAwLAomIzQzOyAgICAgICAgICAgICAgICBwcm9iZXM9X2RhbW9uX3N5c2ZzLkRhbW9uUHJvYmVzKAomIzQzOyAgICAgICAgICAgICAgICAgICAgcHJvYmVzPVtfZGFtb25fc3lzZnMuRGFtb25Qcm9iZSgKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQ9NDIsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVycz1fZGFtb25fc3lzZnMuRGFtb25GaWx0ZXJzKAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzPVsKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kYW1vbl9zeXNmcy5EYW1vbkZpbHRlcigKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlXz0mIzM5O2Fub24mIzM5OywKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGluZz1UcnVlLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93PVRydWUsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKJiM0MzsgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICBzY2hlbWVzPVtfZGFtb25fc3lzZnMuRGFtb3MoCiAgICAgICAgICAgICAgICAgYWN0aW9uPSYjMzk7cGFnZW91dCYjMzk7LAogICAgICAgICAgICAgICAgIGFjY2Vzc19wYXR0ZXJuPV9kYW1vbl9zeXNmcy5EYW1vc0FjY2Vzc1BhdHRlcm4oCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIxOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NDUKCQkJCQkJCW91dHB1dDogNTkKCQkJCQkJCXRob3VnaHRzOiA4MTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IERBTU9OIFRlc3QgU3VpdGUgQWRkaXRpb25zKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyBpbiBmcm9udCBvZiBtZSwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpczogZG9lcyB0aGlzIGludHJvZHVjZSBhbnkgKmZ1bmN0aW9uYWwqIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHdlIG5lZWQgdG8gY29uc2lkZXIgZm9yIGZ1enppbmc/IExldCYjMzk7cyBzZWUuLi4gaXQgc2VlbXMgbGlrZSBpdCYjMzk7cyB0b3VjaGluZyBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYCBhbmQgc29tZSBmaWxlcyB1bmRlciBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vYCwgc3BlY2lmaWNhbGx5IHB5dGhvbiBzY3JpcHRzOiBgX2RhbW9uX3N5c2ZzLnB5YCwgYGRyZ25fZHVtcF9kYW1vbl9zdGF0dXMucHlgLCBhbmQgYHN5c2ZzLnB5YC4gUmlnaHQgYXdheSwgdGhhdCByYWlzZXMgYSBmbGFnIOKAkyBpZiBpdCYjMzk7cyB0ZXN0IGNvZGUsIHdlIG1pZ2h0IGJlIGluIHRoZSBjbGVhci4KCkJ1dCBJIG5lZWQgdG8gYmUgKmFic29sdXRlbHkqIHN1cmUuIExldCBtZSBjb25maXJtIHRoYXQgdGhpcyBpcyAqYWxsKiB0aGUgcGF0Y2ggbW9kaWZpZXMuIERvdWJsZS1jaGVja2luZy4uLiB5dXAsIHRoYXQmIzM5O3MgaXQuIEp1c3QgS1VuaXQgdGVzdHMgYW5kIHNlbGZ0ZXN0cy4gTm8gY29yZSBrZXJuZWwgbG9naWMsIG5vIGRyaXZlcnMsIG5vIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb2RlIGhhcyBiZWVuIHRvdWNoZWQuIEl0JiMzOTtzICpwdXJlbHkqIHRlc3QgaW5mcmFzdHJ1Y3R1cmUuIE9rYXksIEnigJltIGNvbmZpcm1pbmcgdGhhdCBhZ2Fpbi4uLgoKQWxyaWdodCwgbm93IHRvIGFwcGx5IHRoZSBydWxlcy4gQW0gSSBtaXNzaW5nIGFueXRoaW5nLCBpdCBzZWVtcyBsaWtlIHRoZSBydWxlIHN0YXRlczogJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOiAuLi4gJiMzNDsgYW5kICYjMzQ7SWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4mIzM0OwoKSXQmIzM5O3MgdGVtcHRpbmcgdG8gY2F0ZWdvcml6ZSB0aGlzIGFzICYjMzQ7ZGVjb3JhdGl2ZSBjaGFuZ2VzJiMzNDsgYmVjYXVzZSwgaW4gYSB3YXksIHRlc3RzIGRvbiYjMzk7dCAqZGlyZWN0bHkqIGFsdGVyIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwsIGJ1dCB0aGVyZSYjMzk7cyBubyBzcGVjaWZpYyBidWxsZXQgZm9yIHRlc3RzLiBIb3dldmVyLCB0ZXN0cyBkb24mIzM5O3QgbW9kaWZ5IHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4gVGhlIGNoYW5nZXMgYXJlIGNvbmZpbmVkIHRvIHRoZSB0ZXN0IGhhcm5lc3MuIFNvLCBhY2NvcmRpbmcgdG8gdGhlIHJ1bGUgc2V0LCBzaW5jZSBpdCBvbmx5IGNvbnRhaW5zIHRlc3RzIEkgd2lsbCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIFRpbWUgdG8gY2FsbCBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBLVW5pdCB0ZXN0cyBhbmQgUHl0aG9uIHNlbGZ0ZXN0cyBmb3IgREFNT04gZmlsdGVycyBhbmQgcHJvYmVzLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IGZ1bmN0aW9uYWwga2VybmVsIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgS1VuaXQgdGVzdHMgYW5kIFB5dGhvbiBzZWxmdGVzdHMgZm9yIERBTU9OIGZpbHRlcnMgYW5kIHByb2Jlcy4gSXQgZG9lcyBub3QgbW9kaWZ5IGFueSBmdW5jdGlvbmFsIGtlcm5lbCBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIxOjQzOjM0Ljg1MTI2MTY3NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzNzA0MTczNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBLVW5pdCB0ZXN0cyBhbmQgUHl0aG9uIHNlbGZ0ZXN0cyBmb3IgREFNT04gZmlsdGVycyBhbmQgcHJvYmVzLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IGZ1bmN0aW9uYWwga2VybmVsIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMTo0MzozNC44NTEyNjc5NTVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNjA2MzgzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGE2ZDIxZmI5ZWNiOTM3OTE2YTkwZWUxOTJmNjhhYzcxOTJkMWFiNzNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMzAgMjE6NDM6MzQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXFxuaW5kZXggNGE1MzZkNDFjZGIyZC4uNjU3NzQxMGFjZTNkYSAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcXG4rKysgYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcXG5AQCAtMTMwNiw2ICsxMzA2LDEyNSBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF90YXJnZXRfcmVnaW9ucyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuIFxcdFxcdFxcdCh1bnNpZ25lZCBsb25nW11bMl0pIHt7MywgOH0sIHs4LCAxMH19LCAyKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfZmlsdGVyX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXFxuK1xcdFxcdHN0cnVjdCBkYW1vbl9maWx0ZXIgKmRzdCwgc3RydWN0IGRhbW9uX2ZpbHRlciAqc3JjKVxcbit7XFxuK1xcdGRhbW9uX2NvbW1pdF9maWx0ZXIoZHN0LCBzcmMpO1xcbitcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVxcdTAwM2V0eXBlLCBzcmMtXFx1MDAzZXR5cGUpO1xcbitcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVxcdTAwM2VtYXRjaGluZywgc3JjLVxcdTAwM2VtYXRjaGluZyk7XFxuK1xcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXFx1MDAzZWFsbG93LCBzcmMtXFx1MDAzZWFsbG93KTtcXG4rXFx0c3dpdGNoIChzcmMtXFx1MDAzZXR5cGUpIHtcXG4rXFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9NRU1DRzpcXG4rXFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cXHUwMDNlbWVtY2dfaWQsIHNyYy1cXHUwMDNlbWVtY2dfaWQpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfZmlsdGVyKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4re1xcbitcXHRzdHJ1Y3QgZGFtb25fZmlsdGVyIGRzdCA9IHtcXG4rXFx0XFx0LnR5cGUgPSBEQU1PTl9GSUxURVJfVFlQRV9BTk9OLFxcbitcXHRcXHQubWF0Y2hpbmcgPSBmYWxzZSxcXG4rXFx0XFx0LmFsbG93ID0gZmFsc2UsXFxuK1xcdH07XFxuK1xcbitcXHRkYW1vbl90ZXN0X2NvbW1pdF9maWx0ZXJfZm9yKHRlc3QsIFxcdTAwMjZkc3QsXFxuK1xcdFxcdFxcdFxcdTAwMjYoc3RydWN0IGRhbW9uX2ZpbHRlcil7XFxuK1xcdFxcdFxcdC50eXBlID0gREFNT05fRklMVEVSX1RZUEVfQU5PTixcXG4rXFx0XFx0XFx0Lm1hdGNoaW5nID0gdHJ1ZSxcXG4rXFx0XFx0XFx0LmFsbG93ID0gdHJ1ZSxcXG4rXFx0XFx0XFx0fSk7XFxuK1xcdGRhbW9uX3Rlc3RfY29tbWl0X2ZpbHRlcl9mb3IodGVzdCwgXFx1MDAyNmRzdCxcXG4rXFx0XFx0XFx0XFx1MDAyNihzdHJ1Y3QgZGFtb25fZmlsdGVyKXtcXG4rXFx0XFx0XFx0LnR5cGUgPSBEQU1PTl9GSUxURVJfVFlQRV9NRU1DRyxcXG4rXFx0XFx0XFx0Lm1hdGNoaW5nID0gZmFsc2UsXFxuK1xcdFxcdFxcdC5hbGxvdyA9IGZhbHNlLFxcbitcXHRcXHRcXHQubWVtY2dfaWQgPSAxMjMsXFxuK1xcdFxcdFxcdH0pO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fdGVzdF9oZWxwX3NldHVwX3Byb2Jlcyh1bnNpZ25lZCBpbnQgd2VpZ2h0c1tdLFxcbitcXHRcXHRpbnQgbnJfd2VpZ2h0cylcXG4re1xcbitcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHg7XFxuK1xcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Y3R4ID0gZGFtb25fbmV3X2N0eCgpO1xcbitcXHRpZiAoIWN0eClcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl93ZWlnaHRzOyBpKyspIHtcXG4rXFx0XFx0cHJvYmUgPSBkYW1vbl9uZXdfcHJvYmUoKTtcXG4rXFx0XFx0aWYgKCFwcm9iZSkge1xcbitcXHRcXHRcXHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xcbitcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0XFx0fVxcbitcXHRcXHRwcm9iZS1cXHUwMDNld2VpZ2h0ID0gd2VpZ2h0c1tpXTtcXG4rXFx0XFx0ZGFtb25fYWRkX3Byb2JlKGN0eCwgcHJvYmUpO1xcbitcXHR9XFxuK1xcdHJldHVybiBjdHg7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbitcXHRcXHR1bnNpZ25lZCBpbnQgZHN0X3dlaWdodHNbXSwgaW50IG5yX2RzdF9wcm9iZXMsXFxuK1xcdFxcdHVuc2lnbmVkIGludCBzcmNfd2VpZ2h0c1tdLCBpbnQgbnJfc3JjX3Byb2JlcylcXG4re1xcbitcXHRzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsICpzcmM7XFxuK1xcdGludCBlcnI7XFxuK1xcdHN0cnVjdCBkYW1vbl9wcm9iZSAqZHN0X3Byb2JlLCAqc3JjX3Byb2JlO1xcbitcXG4rXFx0ZHN0ID0gZGFtb25fdGVzdF9oZWxwX3NldHVwX3Byb2Jlcyhkc3Rfd2VpZ2h0cywgbnJfZHN0X3Byb2Jlcyk7XFxuK1xcdGlmICghZHN0KVxcbitcXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJkc3QgYWxsb2MgZmFpbFxcXCIpO1xcbitcXHRzcmMgPSBkYW1vbl90ZXN0X2hlbHBfc2V0dXBfcHJvYmVzKHNyY193ZWlnaHRzLCBucl9zcmNfcHJvYmVzKTtcXG4rXFx0aWYgKCFzcmMpIHtcXG4rXFx0XFx0ZGFtb25fZGVzdHJveV9jdHgoZHN0KTtcXG4rXFx0XFx0a3VuaXRfc2tpcCh0ZXN0LCBcXFwic3JjIGFsbG9jIGZhaWxcXFwiKTtcXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gZGFtb25fY29tbWl0X3Byb2Jlcyhkc3QsIHNyYyk7XFxuK1xcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBlcnIsIDApO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdG5yX2RzdF9wcm9iZXMgPSAwO1xcbitcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShkc3RfcHJvYmUsIGRzdClcXG4rXFx0XFx0bnJfZHN0X3Byb2JlcysrO1xcbitcXHRucl9zcmNfcHJvYmVzID0gMDtcXG4rXFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUoc3JjX3Byb2JlLCBzcmMpXFxuK1xcdFxcdG5yX3NyY19wcm9iZXMrKztcXG4rXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIG5yX2RzdF9wcm9iZXMsIG5yX3NyY19wcm9iZXMpO1xcbitcXHRucl9kc3RfcHJvYmVzID0gMDtcXG4rXFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUoZHN0X3Byb2JlLCBkc3QpIHtcXG4rXFx0XFx0c3JjX3Byb2JlID0gZGFtb25fbnRoX3Byb2JlKG5yX2RzdF9wcm9iZXMsIHNyYyk7XFxuK1xcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzcmNfcHJvYmUtXFx1MDAzZXdlaWdodCwgZHN0X3Byb2JlLVxcdTAwM2V3ZWlnaHQpO1xcbitcXHRcXHRucl9kc3RfcHJvYmVzKys7XFxuK1xcdH1cXG4rXFx0ZGFtb25fZGVzdHJveV9jdHgoZHN0KTtcXG4rXFx0ZGFtb25fZGVzdHJveV9jdHgoc3JjKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfcHJvYmVzKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4re1xcbitcXHRkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsXFxuK1xcdFxcdFxcdCh1bnNpZ25lZCBpbnRbXSl7fSwgMCwgKHVuc2lnbmVkIGludFtdKXt9LCAwKTtcXG4rXFx0ZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LFxcbitcXHRcXHRcXHQodW5zaWduZWQgaW50W10pe30sIDAsICh1bnNpZ25lZCBpbnRbXSl7MX0sIDEpO1xcbitcXHRkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsXFxuK1xcdFxcdFxcdCh1bnNpZ25lZCBpbnRbXSl7fSwgMCwgKHVuc2lnbmVkIGludFtdKXsxLCAyfSwgMik7XFxuK1xcdGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCxcXG4rXFx0XFx0XFx0KHVuc2lnbmVkIGludFtdKXsxfSwgMSwgKHVuc2lnbmVkIGludFtdKXsyfSwgMSk7XFxuK1xcdGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCxcXG4rXFx0XFx0XFx0KHVuc2lnbmVkIGludFtdKXsxfSwgMSwgKHVuc2lnbmVkIGludFtdKXsyLCAzfSwgMik7XFxuK1xcdGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCxcXG4rXFx0XFx0XFx0KHVuc2lnbmVkIGludFtdKXsyLCAzfSwgMiwgKHVuc2lnbmVkIGludFtdKXsxfSwgMSk7XFxuK1xcdGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCxcXG4rXFx0XFx0XFx0KHVuc2lnbmVkIGludFtdKXsyLCAzfSwgMiwgKHVuc2lnbmVkIGludFtdKXt9LCAwKTtcXG4rXFx0ZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LFxcbitcXHRcXHRcXHQodW5zaWduZWQgaW50W10pezJ9LCAxLCAodW5zaWduZWQgaW50W10pe30sIDApO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF9jdHgoc3RydWN0IGt1bml0ICp0ZXN0KVxcbiB7XFxuIFxcdHN0cnVjdCBkYW1vbl9jdHggKnNyYywgKmRzdDtcXG5AQCAtMTY1Niw2ICsxNzc1LDggQEAgc3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIGRhbW9uX3Rlc3RfY2FzZXNbXSA9IHtcXG4gXFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9wYWdlb3V0KSxcXG4gXFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9taWdyYXRlX2hvdCksXFxuIFxcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9jb21taXRfdGFyZ2V0X3JlZ2lvbnMpLFxcbitcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfY29tbWl0X2ZpbHRlciksXFxuK1xcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9jb21taXRfcHJvYmVzKSxcXG4gXFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X2NvbW1pdF9jdHgpLFxcbiBcXHRLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfZmlsdGVyX291dCksXFxuIFxcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9mZWVkX2xvb3BfbmV4dF9pbnB1dCksXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL19kYW1vbl9zeXNmcy5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL19kYW1vbl9zeXNmcy5weVxcbmluZGV4IGU2YTIyNjVkNzIxZTguLmQ2YWZiNWIyZjBhNGEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vX2RhbW9uX3N5c2ZzLnB5XFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vX2RhbW9uX3N5c2ZzLnB5XFxuQEAgLTU1OCw2ICs1NTgsMTE1IEBAIGNsYXNzIEludGVydmFsc0dvYWw6XFxuICAgICAgICAgICAgIHJldHVybiBlcnJcXG4gICAgICAgICByZXR1cm4gTm9uZVxcbiBcXG4rY2xhc3MgRGFtb25GaWx0ZXI6XFxuKyAgICB0eXBlXyA9IE5vbmVcXG4rICAgIG1hdGNoaW5nID0gTm9uZVxcbisgICAgYWxsb3cgPSBOb25lXFxuKyAgICBmaWx0ZXJzID0gTm9uZVxcbisgICAgcGF0aCA9IE5vbmVcXG4rICAgIGlkeCA9IE5vbmVcXG4rXFxuKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHlwZV89J2Fub24nLCBtYXRjaGluZz1GYWxzZSwgYWxsb3c9RmFsc2UsIHBhdGg9Tm9uZSk6XFxuKyAgICAgICAgc2VsZi50eXBlXyA9IHR5cGVfXFxuKyAgICAgICAgc2VsZi5tYXRjaGluZyA9IG1hdGNoaW5nXFxuKyAgICAgICAgc2VsZi5hbGxvdyA9IGFsbG93XFxuKyAgICAgICAgc2VsZi5wYXRoID0gcGF0aFxcbitcXG4rICAgIGRlZiBzeXNmc19kaXIoc2VsZik6XFxuKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLmZpbHRlcnMuc3lzZnNfZGlyKCksICclZCcgJSBzZWxmLmlkeClcXG4rXFxuKyAgICBkZWYgc3RhZ2Uoc2VsZik6XFxuKyAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJ3R5cGUnKSwgc2VsZi50eXBlXylcXG4rICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6XFxuKyAgICAgICAgICAgIHJldHVybiBlcnJcXG4rICAgICAgICBlcnIgPSB3cml0ZV9maWxlKG9zLnBhdGguam9pbihzZWxmLnN5c2ZzX2RpcigpLCAnbWF0Y2hpbmcnKSxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICdZJyBpZiBzZWxmLm1hdGNoaW5nIGVsc2UgJ04nKVxcbisgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZTpcXG4rICAgICAgICAgICAgcmV0dXJuIGVyclxcbisgICAgICAgIGVyciA9IHdyaXRlX2ZpbGUob3MucGF0aC5qb2luKHNlbGYuc3lzZnNfZGlyKCksICdhbGxvdycpLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgJ1knIGlmIHNlbGYuYWxsb3cgZWxzZSAnTicpXFxuKyAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOlxcbisgICAgICAgICAgICByZXR1cm4gZXJyXFxuKyAgICAgICAgaWYgc2VsZi50eXBlXyA9PSAnbWVtY2cnOlxcbisgICAgICAgICAgICBlcnIgPSB3cml0ZV9maWxlKG9zLnBhdGguam9pbihzZWxmLnN5c2ZzX2RpcigpLCAncGF0aCcpLCBzZWxmLnBhdGgpXFxuKyAgICAgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZTpcXG4rICAgICAgICAgICAgICAgIHJldHVybiBlcnJcXG4rICAgICAgICByZXR1cm4gTm9uZVxcbitcXG4rY2xhc3MgRGFtb25GaWx0ZXJzOlxcbisgICAgZmlsdGVycyA9IE5vbmVcXG4rICAgIHByb2JlID0gTm9uZVxcbitcXG4rICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWx0ZXJzPU5vbmUpOlxcbisgICAgICAgIGlmIGZpbHRlcnMgaXMgTm9uZTpcXG4rICAgICAgICAgICAgZmlsdGVycyA9IFtdXFxuKyAgICAgICAgc2VsZi5maWx0ZXJzID0gZmlsdGVyc1xcbisgICAgICAgIGZvciBpZHgsIGZpbHRlciBpbiBlbnVtZXJhdGUoc2VsZi5maWx0ZXJzKTpcXG4rICAgICAgICAgICAgZmlsdGVyLmZpbHRlcnMgPSBzZWxmXFxuKyAgICAgICAgICAgIGZpbHRlci5pZHggPSBpZHhcXG4rXFxuKyAgICBkZWYgc3lzZnNfZGlyKHNlbGYpOlxcbisgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5wcm9iZS5zeXNmc19kaXIoKSwgJ2ZpbHRlcnMnKVxcbitcXG4rICAgIGRlZiBzdGFnZShzZWxmKTpcXG4rICAgICAgICBlcnIgPSB3cml0ZV9maWxlKFxcbisgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHNlbGYuc3lzZnNfZGlyKCksICducl9maWx0ZXJzJyksXFxuKyAgICAgICAgICAgICAgICBsZW4oc2VsZi5maWx0ZXJzKSlcXG4rICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6XFxuKyAgICAgICAgICAgIHJldHVybiBlcnJcXG4rICAgICAgICBmb3IgZmlsdGVyIGluIHNlbGYuZmlsdGVyczpcXG4rICAgICAgICAgICAgZXJyID0gZmlsdGVyLnN0YWdlKClcXG4rICAgICAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOlxcbisgICAgICAgICAgICAgICAgcmV0dXJuIGVyclxcbisgICAgICAgIHJldHVybiBOb25lXFxuK1xcbitjbGFzcyBEYW1vblByb2JlOlxcbisgICAgd2VpZ2h0ID0gTm9uZVxcbisgICAgZmlsdGVycyA9IE5vbmVcXG4rICAgIHByb2JlcyA9IE5vbmVcXG4rICAgIGlkeCA9IE5vbmVcXG4rXFxuKyAgICBkZWYgX19pbml0X18oc2VsZiwgd2VpZ2h0PTAsIGZpbHRlcnM9Tm9uZSk6XFxuKyAgICAgICAgc2VsZi53ZWlnaHQgPSB3ZWlnaHRcXG4rICAgICAgICBpZiBmaWx0ZXJzIGlzIE5vbmU6XFxuKyAgICAgICAgICAgIGZpbHRlcnMgPSBEYW1vbkZpbHRlcnMoKVxcbisgICAgICAgIHNlbGYuZmlsdGVycyA9IGZpbHRlcnNcXG4rICAgICAgICBzZWxmLmZpbHRlcnMucHJvYmUgPSBzZWxmXFxuK1xcbisgICAgZGVmIHN5c2ZzX2RpcihzZWxmKTpcXG4rICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYucHJvYmVzLnN5c2ZzX2RpcigpLCAnJWQnICUgc2VsZi5pZHgpXFxuK1xcbisgICAgZGVmIHN0YWdlKHNlbGYpOlxcbisgICAgICAgIGVyciA9IHdyaXRlX2ZpbGUoXFxuKyAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJ3dlaWdodCcpLCAnJWQnICUgc2VsZi53ZWlnaHQpXFxuKyAgICAgICAgcmV0dXJuIHNlbGYuZmlsdGVycy5zdGFnZSgpXFxuK1xcbitjbGFzcyBEYW1vblByb2JlczpcXG4rICAgIHByb2JlcyA9IE5vbmVcXG4rICAgIGF0dHJzID0gTm9uZVxcbitcXG4rICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9iZXM9Tm9uZSk6XFxuKyAgICAgICAgaWYgcHJvYmVzIGlzIE5vbmU6XFxuKyAgICAgICAgICAgIHByb2JlcyA9IFtdXFxuKyAgICAgICAgc2VsZi5wcm9iZXMgPSBwcm9iZXNcXG4rICAgICAgICBmb3IgaWR4LCBwcm9iZSBpbiBlbnVtZXJhdGUoc2VsZi5wcm9iZXMpOlxcbisgICAgICAgICAgICBwcm9iZS5wcm9iZXMgPSBzZWxmXFxuKyAgICAgICAgICAgIHByb2JlLmlkeCA9IGlkeFxcbitcXG4rICAgIGRlZiBzeXNmc19kaXIoc2VsZik6XFxuKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLmF0dHJzLnN5c2ZzX2RpcigpLCAncHJvYmVzJylcXG4rXFxuKyAgICBkZWYgc3RhZ2Uoc2VsZik6XFxuKyAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJ25yX3Byb2JlcycpLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKHNlbGYucHJvYmVzKSlcXG4rICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6XFxuKyAgICAgICAgICAgIHJldHVybiBlcnJcXG4rICAgICAgICBmb3IgcHJvYmUgaW4gc2VsZi5wcm9iZXM6XFxuKyAgICAgICAgICAgIGVyciA9IHByb2JlLnN0YWdlKClcXG4rICAgICAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOlxcbisgICAgICAgICAgICAgICAgcmV0dXJuIGVyclxcbisgICAgICAgIHJldHVybiBOb25lXFxuK1xcbiBjbGFzcyBEYW1vbkF0dHJzOlxcbiAgICAgc2FtcGxlX3VzID0gTm9uZVxcbiAgICAgYWdncl91cyA9IE5vbmVcXG5AQCAtNTY1LDExICs2NzQsMTIgQEAgY2xhc3MgRGFtb25BdHRyczpcXG4gICAgIHVwZGF0ZV91cyA9IE5vbmVcXG4gICAgIG1pbl9ucl9yZWdpb25zID0gTm9uZVxcbiAgICAgbWF4X25yX3JlZ2lvbnMgPSBOb25lXFxuKyAgICBwcm9iZXMgPSBOb25lXFxuICAgICBjb250ZXh0ID0gTm9uZVxcbiBcXG4gICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzYW1wbGVfdXM9NTAwMCwgYWdncl91cz0xMDAwMDAsXFxuICAgICAgICAgICAgICAgICAgaW50ZXJ2YWxzX2dvYWw9SW50ZXJ2YWxzR29hbCgpLCB1cGRhdGVfdXM9MTAwMDAwMCxcXG4tICAgICAgICAgICAgbWluX25yX3JlZ2lvbnM9MTAsIG1heF9ucl9yZWdpb25zPTEwMDApOlxcbisgICAgICAgICAgICBtaW5fbnJfcmVnaW9ucz0xMCwgbWF4X25yX3JlZ2lvbnM9MTAwMCwgcHJvYmVzPU5vbmUpOlxcbiAgICAgICAgIHNlbGYuc2FtcGxlX3VzID0gc2FtcGxlX3VzXFxuICAgICAgICAgc2VsZi5hZ2dyX3VzID0gYWdncl91c1xcbiAgICAgICAgIHNlbGYuaW50ZXJ2YWxzX2dvYWwgPSBpbnRlcnZhbHNfZ29hbFxcbkBAIC01NzcsNiArNjg3LDEwIEBAIGNsYXNzIERhbW9uQXR0cnM6XFxuICAgICAgICAgc2VsZi51cGRhdGVfdXMgPSB1cGRhdGVfdXNcXG4gICAgICAgICBzZWxmLm1pbl9ucl9yZWdpb25zID0gbWluX25yX3JlZ2lvbnNcXG4gICAgICAgICBzZWxmLm1heF9ucl9yZWdpb25zID0gbWF4X25yX3JlZ2lvbnNcXG4rICAgICAgICBpZiBwcm9iZXMgaXMgTm9uZTpcXG4rICAgICAgICAgICAgcHJvYmVzID0gRGFtb25Qcm9iZXMoKVxcbisgICAgICAgIHNlbGYucHJvYmVzID0gcHJvYmVzXFxuKyAgICAgICAgc2VsZi5wcm9iZXMuYXR0cnMgPSBzZWxmXFxuIFxcbiAgICAgZGVmIGludGVydmFsX3N5c2ZzX2RpcihzZWxmKTpcXG4gICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuY29udGV4dC5zeXNmc19kaXIoKSwgJ21vbml0b3JpbmdfYXR0cnMnLFxcbkBAIC01ODYsNiArNzAwLDkgQEAgY2xhc3MgRGFtb25BdHRyczpcXG4gICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuY29udGV4dC5zeXNmc19kaXIoKSwgJ21vbml0b3JpbmdfYXR0cnMnLFxcbiAgICAgICAgICAgICAgICAgJ25yX3JlZ2lvbnMnKVxcbiBcXG4rICAgIGRlZiBzeXNmc19kaXIoc2VsZik6XFxuKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLmNvbnRleHQuc3lzZnNfZGlyKCksICdtb25pdG9yaW5nX2F0dHJzJylcXG4rXFxuICAgICBkZWYgc3RhZ2Uoc2VsZik6XFxuICAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5pbnRlcnZhbF9zeXNmc19kaXIoKSwgJ3NhbXBsZV91cycpLFxcbiAgICAgICAgICAgICAgICAgc2VsZi5zYW1wbGVfdXMpXFxuQEAgLTYxNSw2ICs3MzIsMTAgQEAgY2xhc3MgRGFtb25BdHRyczpcXG4gICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6XFxuICAgICAgICAgICAgIHJldHVybiBlcnJcXG4gXFxuKyAgICAgICAgZXJyID0gc2VsZi5wcm9iZXMuc3RhZ2UoKVxcbisgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZTpcXG4rICAgICAgICAgICAgcmV0dXJuIGVyclxcbitcXG4gY2xhc3MgRGFtb25DdHg6XFxuICAgICBvcHMgPSBOb25lXFxuICAgICBtb25pdG9yaW5nX2F0dHJzID0gTm9uZVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9kcmduX2R1bXBfZGFtb25fc3RhdHVzLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vZHJnbl9kdW1wX2RhbW9uX3N0YXR1cy5weVxcbmluZGV4IDA5NTUyZTkxYmM3ODIuLjQ2MjIwNDZmZDAxMTggMTAwNzU1XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vZHJnbl9kdW1wX2RhbW9uX3N0YXR1cy5weVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2RyZ25fZHVtcF9kYW1vbl9zdGF0dXMucHlcXG5AQCAtNDgsNiArNDgsMzcgQEAgZGVmIGF0dHJzX3RvX2RpY3QoYXR0cnMpOlxcbiAgICAgICAgIFsnbWF4X25yX3JlZ2lvbnMnLCBpbnRdLFxcbiAgICAgICAgIF0pXFxuIFxcbitkZWYgZmlsdGVyX3RvX2RpY3QoZGFtb25fZmlsdGVyKTpcXG4rICAgIGZpbHRlcl90eXBlX2tleXdvcmQgPSB7XFxuKyAgICAgICAgICAgIDA6ICdhbm9uJyxcXG4rICAgICAgICAgICAgMTogJ21lbWNnJyxcXG4rICAgICAgICAgICAgfVxcbisgICAgZGljdF8gPSB7XFxuKyAgICAgICAgICAgICd0eXBlJzogZmlsdGVyX3R5cGVfa2V5d29yZFtpbnQoZGFtb25fZmlsdGVyLnR5cGUpXSxcXG4rICAgICAgICAgICAgJ21hdGNoaW5nJzogYm9vbChkYW1vbl9maWx0ZXIubWF0Y2hpbmcpLFxcbisgICAgICAgICAgICAnYWxsb3cnOiBib29sKGRhbW9uX2ZpbHRlci5hbGxvdyksXFxuKyAgICAgICAgICAgIH1cXG4rICAgIHR5cGVfID0gZGljdF9bJ3R5cGUnXVxcbisgICAgaWYgdHlwZV8gPT0gJ21lbWNnJzpcXG4rICAgICAgICBkaWN0X1snbWVtY2dfaWQnXSA9IGludChkYW1vbl9maWx0ZXIubWVtY2dfaWQpXFxuKyAgICByZXR1cm4gZGljdF9cXG4rXFxuK2RlZiBmaWx0ZXJzX3RvX2xpc3QoZmlsdGVycyk6XFxuKyAgICByZXR1cm4gW2ZpbHRlcl90b19kaWN0KGYpXFxuKyAgICAgICAgICAgIGZvciBmIGluIGxpc3RfZm9yX2VhY2hfZW50cnkoXFxuKyAgICAgICAgICAgICAgICAnc3RydWN0IGRhbW9uX2ZpbHRlcicsIGZpbHRlcnMuYWRkcmVzc19vZl8oKSwgJ2xpc3QnKV1cXG4rXFxuK2RlZiBwcm9iZV90b19kaWN0KHByb2JlKTpcXG4rICAgIHJldHVybiB0b19kaWN0KHByb2JlLCBbXFxuKyAgICAgICAgWyd3ZWlnaHQnLCBpbnRdLFxcbisgICAgICAgIFsnZmlsdGVycycsIGZpbHRlcnNfdG9fbGlzdF0sXFxuKyAgICAgICAgXSlcXG4rXFxuK2RlZiBwcm9iZXNfdG9fbGlzdChwcm9iZXMpOlxcbisgICAgcmV0dXJuIFtwcm9iZV90b19kaWN0KHApXFxuKyAgICAgICAgICAgIGZvciBwIGluIGxpc3RfZm9yX2VhY2hfZW50cnkoXFxuKyAgICAgICAgICAgICAgICAnc3RydWN0IGRhbW9uX3Byb2JlJywgcHJvYmVzLmFkZHJlc3Nfb2ZfKCksICdsaXN0JyldXFxuK1xcbiBkZWYgYWRkcl9yYW5nZV90b19kaWN0KGFkZHJfcmFuZ2UpOlxcbiAgICAgcmV0dXJuIHRvX2RpY3QoYWRkcl9yYW5nZSwgW1xcbiAgICAgICAgIFsnc3RhcnQnLCBpbnRdLFxcbkBAIC0xOTksNiArMjMwLDcgQEAgZGVmIGRhbW9uX2N0eF90b19kaWN0KGN0eCk6XFxuICAgICByZXR1cm4gdG9fZGljdChjdHgsIFtcXG4gICAgICAgICBbJ29wcycsIG9wc190b19kaWN0XSxcXG4gICAgICAgICBbJ2F0dHJzJywgYXR0cnNfdG9fZGljdF0sXFxuKyAgICAgICAgWydwcm9iZXMnLCBwcm9iZXNfdG9fbGlzdF0sXFxuICAgICAgICAgWydhZGFwdGl2ZV90YXJnZXRzJywgdGFyZ2V0c190b19saXN0XSxcXG4gICAgICAgICBbJ3NjaGVtZXMnLCBzY2hlbWVzX3RvX2xpc3RdLFxcbiAgICAgICAgIFsncGF1c2UnLCBib29sXSxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5weVxcbmluZGV4IDNmZmEwNTRiNjM4NjcuLjg1MmI2ODg3YTc1Y2UgMTAwNzU1XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMucHlcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5weVxcbkBAIC0xNzgsNiArMTc4LDI0IEBAIGRlZiBhc3NlcnRfbW9uaXRvcmluZ19hdHRyc19jb21taXR0ZWQoYXR0cnMsIGR1bXApOlxcbiAgICAgYXNzZXJ0X3RydWUoZHVtcFsnbWF4X25yX3JlZ2lvbnMnXSA9PSBhdHRycy5tYXhfbnJfcmVnaW9ucyxcXG4gICAgICAgICAgICAgICAgICdtYXhfbnJfcmVnaW9ucycsIGR1bXApXFxuIFxcbitkZWYgYXNzZXJ0X2RhbW9uX2ZpbHRlcnNfY29tbWl0dGVkKGZpbHRlcnMsIGR1bXApOlxcbisgICAgYXNzZXJ0X3RydWUobGVuKGR1bXApID09IGxlbihmaWx0ZXJzLmZpbHRlcnMpLCAncHJvYmUgZmlsdGVycycsIGR1bXApXFxuKyAgICBmb3IgaWR4LCBkYW1vbl9maWx0ZXIgaW4gZW51bWVyYXRlKGZpbHRlcnMuZmlsdGVycyk6XFxuKyAgICAgICAgZmlsdGVyX2R1bXAgPSBkdW1wW2lkeF1cXG4rICAgICAgICBhc3NlcnRfdHJ1ZShmaWx0ZXJfZHVtcFsndHlwZSddID09IGRhbW9uX2ZpbHRlci50eXBlXywgJ3R5cGUnLFxcbisgICAgICAgICAgICAgICAgICAgIGZpbHRlcl9kdW1wKVxcbisgICAgICAgIGFzc2VydF90cnVlKGZpbHRlcl9kdW1wWydtYXRjaGluZyddID09IGRhbW9uX2ZpbHRlci5tYXRjaGluZyxcXG4rICAgICAgICAgICAgICAgICAgICAnbWF0Y2hpbmcnLCBmaWx0ZXJfZHVtcClcXG4rICAgICAgICBhc3NlcnRfdHJ1ZShmaWx0ZXJfZHVtcFsnYWxsb3cnXSA9PSBkYW1vbl9maWx0ZXIuYWxsb3csICdhbGxvdycsXFxuKyAgICAgICAgICAgICAgICAgICAgZmlsdGVyX2R1bXApXFxuK1xcbitkZWYgYXNzZXJ0X3Byb2Jlc19jb21taXR0ZWQocHJvYmVzLCBkdW1wKTpcXG4rICAgIGFzc2VydF90cnVlKGxlbihkdW1wKSA9PSBsZW4ocHJvYmVzLnByb2JlcyksICdwcm9iZXMgbGVuZ3RoJywgZHVtcClcXG4rICAgIGZvciBpZHgsIHByb2JlIGluIGVudW1lcmF0ZShwcm9iZXMucHJvYmVzKTpcXG4rICAgICAgICBwcm9iZV9kdW1wID0gZHVtcFtpZHhdXFxuKyAgICAgICAgYXNzZXJ0X3RydWUocHJvYmUud2VpZ2h0ID09IHByb2JlX2R1bXBbJ3dlaWdodCddLCAnd2VpZ2h0JywgcHJvYmVfZHVtcClcXG4rICAgICAgICBhc3NlcnRfZGFtb25fZmlsdGVyc19jb21taXR0ZWQocHJvYmUuZmlsdGVycywgcHJvYmVfZHVtcFsnZmlsdGVycyddKVxcbitcXG4gZGVmIGFzc2VydF9tb25pdG9yaW5nX3RhcmdldF9jb21taXR0ZWQodGFyZ2V0LCBkdW1wKTpcXG4gICAgICMgdGFyZ2V0LnBpZCBpcyB0aGUgcGlkIFxcXCJudW1iZXJcXFwiLCB3aGlsZSBkdW1wWydwaWQnXSBpcyAnc3RydWN0IHBpZCdcXG4gICAgICMgcG9pbnRlciwgYW5kIGhlbmNlIGNhbm5vdCBiZSBjb21wYXJlZC5cXG5AQCAtMTk2LDYgKzIxNCw3IEBAIGRlZiBhc3NlcnRfY3R4X2NvbW1pdHRlZChjdHgsIGR1bXApOlxcbiAgICAgICAgICAgICB9XFxuICAgICBhc3NlcnRfdHJ1ZShkdW1wWydvcHMnXVsnaWQnXSA9PSBvcHNfdmFsW2N0eC5vcHNdLCAnb3BzX2lkJywgZHVtcClcXG4gICAgIGFzc2VydF9tb25pdG9yaW5nX2F0dHJzX2NvbW1pdHRlZChjdHgubW9uaXRvcmluZ19hdHRycywgZHVtcFsnYXR0cnMnXSlcXG4rICAgIGFzc2VydF9wcm9iZXNfY29tbWl0dGVkKGN0eC5tb25pdG9yaW5nX2F0dHJzLnByb2JlcywgZHVtcFsncHJvYmVzJ10pXFxuICAgICBhc3NlcnRfbW9uaXRvcmluZ190YXJnZXRzX2NvbW1pdHRlZChjdHgudGFyZ2V0cywgZHVtcFsnYWRhcHRpdmVfdGFyZ2V0cyddKVxcbiAgICAgYXNzZXJ0X3NjaGVtZXNfY29tbWl0dGVkKGN0eC5zY2hlbWVzLCBkdW1wWydzY2hlbWVzJ10pXFxuICAgICBhc3NlcnRfdHJ1ZShkdW1wWydwYXVzZSddID09IGN0eC5wYXVzZSwgJ3BhdXNlJywgZHVtcClcXG5AQCAtMzAwLDcgKzMxOSwyMSBAQCBkZWYgbWFpbigpOlxcbiAgICAgICAgICAgICAgICAgaW50ZXJ2YWxzX2dvYWw9X2RhbW9uX3N5c2ZzLkludGVydmFsc0dvYWwoXFxuICAgICAgICAgICAgICAgICAgICAgYWNjZXNzX2JwPTQwMCwgYWdncnM9MywgbWluX3NhbXBsZV91cz01MDAwLFxcbiAgICAgICAgICAgICAgICAgICAgIG1heF9zYW1wbGVfdXM9MTAwMDAwMDApLFxcbi0gICAgICAgICAgICAgICAgdXBkYXRlX3VzPTIwMDAwMDApLFxcbisgICAgICAgICAgICAgICAgdXBkYXRlX3VzPTIwMDAwMDAsXFxuKyAgICAgICAgICAgICAgICBwcm9iZXM9X2RhbW9uX3N5c2ZzLkRhbW9uUHJvYmVzKFxcbisgICAgICAgICAgICAgICAgICAgIHByb2Jlcz1bX2RhbW9uX3N5c2ZzLkRhbW9uUHJvYmUoXFxuKyAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodD00MixcXG4rICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVycz1fZGFtb25fc3lzZnMuRGFtb25GaWx0ZXJzKFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVycz1bXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2RhbW9uX3N5c2ZzLkRhbW9uRmlsdGVyKFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlXz0nYW5vbicsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoaW5nPVRydWUsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93PVRydWUsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXFxuKyAgICAgICAgICAgICAgICAgICAgKSxcXG4gICAgICAgICAgICAgc2NoZW1lcz1bX2RhbW9uX3N5c2ZzLkRhbW9zKFxcbiAgICAgICAgICAgICAgICAgYWN0aW9uPSdwYWdlb3V0JyxcXG4gICAgICAgICAgICAgICAgIGFjY2Vzc19wYXR0ZXJuPV9kYW1vbl9zeXNmcy5EYW1vc0FjY2Vzc1BhdHRlcm4oXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIxOjQzOjM1LjE4Nzk2NjY1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTAzMzcwNjIxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIEtVbml0IHRlc3RzIGFuZCBQeXRob24gc2VsZnRlc3RzIGZvciBEQU1PTiBmaWx0ZXJzIGFuZCBwcm9iZXMuIEl0IGRvZXMgbm90IG1vZGlmeSBhbnkgZnVuY3Rpb25hbCBrZXJuZWwgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGE2ZDIxZmI5ZWNiOTM3OTE2YTkwZWUxOTJmNjhhYzcxOTJkMWFiNzNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAzMCAyMTo0MzozNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaCBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuaW5kZXggNGE1MzZkNDFjZGIyZC4uNjU3NzQxMGFjZTNkYSAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuKysrIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG5AQCAtMTMwNiw2ICsxMzA2LDEyNSBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF90YXJnZXRfcmVnaW9ucyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRcdFx0KHVuc2lnbmVkIGxvbmdbXVsyXSkge3szLCA4fSwgezgsIDEwfX0sIDIpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF9maWx0ZXJfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcbitcdFx0c3RydWN0IGRhbW9uX2ZpbHRlciAqZHN0LCBzdHJ1Y3QgZGFtb25fZmlsdGVyICpzcmMpXG4re1xuK1x0ZGFtb25fY29tbWl0X2ZpbHRlcihkc3QsIHNyYyk7XG4rXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVx1MDAzZXR5cGUsIHNyYy1cdTAwM2V0eXBlKTtcbitcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNlbWF0Y2hpbmcsIHNyYy1cdTAwM2VtYXRjaGluZyk7XG4rXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVx1MDAzZWFsbG93LCBzcmMtXHUwMDNlYWxsb3cpO1xuK1x0c3dpdGNoIChzcmMtXHUwMDNldHlwZSkge1xuK1x0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9NRU1DRzpcbitcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cdTAwM2VtZW1jZ19pZCwgc3JjLVx1MDAzZW1lbWNnX2lkKTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRicmVhaztcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfZmlsdGVyKHN0cnVjdCBrdW5pdCAqdGVzdClcbit7XG4rXHRzdHJ1Y3QgZGFtb25fZmlsdGVyIGRzdCA9IHtcbitcdFx0LnR5cGUgPSBEQU1PTl9GSUxURVJfVFlQRV9BTk9OLFxuK1x0XHQubWF0Y2hpbmcgPSBmYWxzZSxcbitcdFx0LmFsbG93ID0gZmFsc2UsXG4rXHR9O1xuK1xuK1x0ZGFtb25fdGVzdF9jb21taXRfZmlsdGVyX2Zvcih0ZXN0LCBcdTAwMjZkc3QsXG4rXHRcdFx0XHUwMDI2KHN0cnVjdCBkYW1vbl9maWx0ZXIpe1xuK1x0XHRcdC50eXBlID0gREFNT05fRklMVEVSX1RZUEVfQU5PTixcbitcdFx0XHQubWF0Y2hpbmcgPSB0cnVlLFxuK1x0XHRcdC5hbGxvdyA9IHRydWUsXG4rXHRcdFx0fSk7XG4rXHRkYW1vbl90ZXN0X2NvbW1pdF9maWx0ZXJfZm9yKHRlc3QsIFx1MDAyNmRzdCxcbitcdFx0XHRcdTAwMjYoc3RydWN0IGRhbW9uX2ZpbHRlcil7XG4rXHRcdFx0LnR5cGUgPSBEQU1PTl9GSUxURVJfVFlQRV9NRU1DRyxcbitcdFx0XHQubWF0Y2hpbmcgPSBmYWxzZSxcbitcdFx0XHQuYWxsb3cgPSBmYWxzZSxcbitcdFx0XHQubWVtY2dfaWQgPSAxMjMsXG4rXHRcdFx0fSk7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl90ZXN0X2hlbHBfc2V0dXBfcHJvYmVzKHVuc2lnbmVkIGludCB3ZWlnaHRzW10sXG4rXHRcdGludCBucl93ZWlnaHRzKVxuK3tcbitcdHN0cnVjdCBkYW1vbl9jdHggKmN0eDtcbitcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XG4rXHRpbnQgaTtcbitcbitcdGN0eCA9IGRhbW9uX25ld19jdHgoKTtcbitcdGlmICghY3R4KVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3dlaWdodHM7IGkrKykge1xuK1x0XHRwcm9iZSA9IGRhbW9uX25ld19wcm9iZSgpO1xuK1x0XHRpZiAoIXByb2JlKSB7XG4rXHRcdFx0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcbitcdFx0XHRyZXR1cm4gTlVMTDtcbitcdFx0fVxuK1x0XHRwcm9iZS1cdTAwM2V3ZWlnaHQgPSB3ZWlnaHRzW2ldO1xuK1x0XHRkYW1vbl9hZGRfcHJvYmUoY3R4LCBwcm9iZSk7XG4rXHR9XG4rXHRyZXR1cm4gY3R4O1xuK31cbitcbitzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcbitcdFx0dW5zaWduZWQgaW50IGRzdF93ZWlnaHRzW10sIGludCBucl9kc3RfcHJvYmVzLFxuK1x0XHR1bnNpZ25lZCBpbnQgc3JjX3dlaWdodHNbXSwgaW50IG5yX3NyY19wcm9iZXMpXG4re1xuK1x0c3RydWN0IGRhbW9uX2N0eCAqZHN0LCAqc3JjO1xuK1x0aW50IGVycjtcbitcdHN0cnVjdCBkYW1vbl9wcm9iZSAqZHN0X3Byb2JlLCAqc3JjX3Byb2JlO1xuK1xuK1x0ZHN0ID0gZGFtb25fdGVzdF9oZWxwX3NldHVwX3Byb2Jlcyhkc3Rfd2VpZ2h0cywgbnJfZHN0X3Byb2Jlcyk7XG4rXHRpZiAoIWRzdClcbitcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcImRzdCBhbGxvYyBmYWlsXCIpO1xuK1x0c3JjID0gZGFtb25fdGVzdF9oZWxwX3NldHVwX3Byb2JlcyhzcmNfd2VpZ2h0cywgbnJfc3JjX3Byb2Jlcyk7XG4rXHRpZiAoIXNyYykge1xuK1x0XHRkYW1vbl9kZXN0cm95X2N0eChkc3QpO1xuK1x0XHRrdW5pdF9za2lwKHRlc3QsIFwic3JjIGFsbG9jIGZhaWxcIik7XG4rXHR9XG4rXG4rXHRlcnIgPSBkYW1vbl9jb21taXRfcHJvYmVzKGRzdCwgc3JjKTtcbitcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBlcnIsIDApO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuO1xuK1x0bnJfZHN0X3Byb2JlcyA9IDA7XG4rXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShkc3RfcHJvYmUsIGRzdClcbitcdFx0bnJfZHN0X3Byb2JlcysrO1xuK1x0bnJfc3JjX3Byb2JlcyA9IDA7XG4rXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShzcmNfcHJvYmUsIHNyYylcbitcdFx0bnJfc3JjX3Byb2JlcysrO1xuK1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIG5yX2RzdF9wcm9iZXMsIG5yX3NyY19wcm9iZXMpO1xuK1x0bnJfZHN0X3Byb2JlcyA9IDA7XG4rXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShkc3RfcHJvYmUsIGRzdCkge1xuK1x0XHRzcmNfcHJvYmUgPSBkYW1vbl9udGhfcHJvYmUobnJfZHN0X3Byb2Jlcywgc3JjKTtcbitcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHNyY19wcm9iZS1cdTAwM2V3ZWlnaHQsIGRzdF9wcm9iZS1cdTAwM2V3ZWlnaHQpO1xuK1x0XHRucl9kc3RfcHJvYmVzKys7XG4rXHR9XG4rXHRkYW1vbl9kZXN0cm95X2N0eChkc3QpO1xuK1x0ZGFtb25fZGVzdHJveV9jdHgoc3JjKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfcHJvYmVzKHN0cnVjdCBrdW5pdCAqdGVzdClcbit7XG4rXHRkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsXG4rXHRcdFx0KHVuc2lnbmVkIGludFtdKXt9LCAwLCAodW5zaWduZWQgaW50W10pe30sIDApO1xuK1x0ZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LFxuK1x0XHRcdCh1bnNpZ25lZCBpbnRbXSl7fSwgMCwgKHVuc2lnbmVkIGludFtdKXsxfSwgMSk7XG4rXHRkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsXG4rXHRcdFx0KHVuc2lnbmVkIGludFtdKXt9LCAwLCAodW5zaWduZWQgaW50W10pezEsIDJ9LCAyKTtcbitcdGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCxcbitcdFx0XHQodW5zaWduZWQgaW50W10pezF9LCAxLCAodW5zaWduZWQgaW50W10pezJ9LCAxKTtcbitcdGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCxcbitcdFx0XHQodW5zaWduZWQgaW50W10pezF9LCAxLCAodW5zaWduZWQgaW50W10pezIsIDN9LCAyKTtcbitcdGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCxcbitcdFx0XHQodW5zaWduZWQgaW50W10pezIsIDN9LCAyLCAodW5zaWduZWQgaW50W10pezF9LCAxKTtcbitcdGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCxcbitcdFx0XHQodW5zaWduZWQgaW50W10pezIsIDN9LCAyLCAodW5zaWduZWQgaW50W10pe30sIDApO1xuK1x0ZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LFxuK1x0XHRcdCh1bnNpZ25lZCBpbnRbXSl7Mn0sIDEsICh1bnNpZ25lZCBpbnRbXSl7fSwgMCk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X2N0eChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4ge1xuIFx0c3RydWN0IGRhbW9uX2N0eCAqc3JjLCAqZHN0O1xuQEAgLTE2NTYsNiArMTc3NSw4IEBAIHN0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBkYW1vbl90ZXN0X2Nhc2VzW10gPSB7XG4gXHRLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfY29tbWl0X3BhZ2VvdXQpLFxuIFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9taWdyYXRlX2hvdCksXG4gXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfY29tbWl0X3RhcmdldF9yZWdpb25zKSxcbitcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9jb21taXRfZmlsdGVyKSxcbitcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9jb21taXRfcHJvYmVzKSxcbiBcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9jb21taXRfY3R4KSxcbiBcdEtVTklUX0NBU0UoZGFtb3NfdGVzdF9maWx0ZXJfb3V0KSxcbiBcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9mZWVkX2xvb3BfbmV4dF9pbnB1dCksXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vX2RhbW9uX3N5c2ZzLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vX2RhbW9uX3N5c2ZzLnB5XG5pbmRleCBlNmEyMjY1ZDcyMWU4Li5kNmFmYjViMmYwYTRhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vX2RhbW9uX3N5c2ZzLnB5XG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9fZGFtb25fc3lzZnMucHlcbkBAIC01NTgsNiArNTU4LDExNSBAQCBjbGFzcyBJbnRlcnZhbHNHb2FsOlxuICAgICAgICAgICAgIHJldHVybiBlcnJcbiAgICAgICAgIHJldHVybiBOb25lXG4gXG4rY2xhc3MgRGFtb25GaWx0ZXI6XG4rICAgIHR5cGVfID0gTm9uZVxuKyAgICBtYXRjaGluZyA9IE5vbmVcbisgICAgYWxsb3cgPSBOb25lXG4rICAgIGZpbHRlcnMgPSBOb25lXG4rICAgIHBhdGggPSBOb25lXG4rICAgIGlkeCA9IE5vbmVcbitcbisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHR5cGVfPSdhbm9uJywgbWF0Y2hpbmc9RmFsc2UsIGFsbG93PUZhbHNlLCBwYXRoPU5vbmUpOlxuKyAgICAgICAgc2VsZi50eXBlXyA9IHR5cGVfXG4rICAgICAgICBzZWxmLm1hdGNoaW5nID0gbWF0Y2hpbmdcbisgICAgICAgIHNlbGYuYWxsb3cgPSBhbGxvd1xuKyAgICAgICAgc2VsZi5wYXRoID0gcGF0aFxuK1xuKyAgICBkZWYgc3lzZnNfZGlyKHNlbGYpOlxuKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLmZpbHRlcnMuc3lzZnNfZGlyKCksICclZCcgJSBzZWxmLmlkeClcbitcbisgICAgZGVmIHN0YWdlKHNlbGYpOlxuKyAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJ3R5cGUnKSwgc2VsZi50eXBlXylcbisgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZTpcbisgICAgICAgICAgICByZXR1cm4gZXJyXG4rICAgICAgICBlcnIgPSB3cml0ZV9maWxlKG9zLnBhdGguam9pbihzZWxmLnN5c2ZzX2RpcigpLCAnbWF0Y2hpbmcnKSxcbisgICAgICAgICAgICAgICAgICAgICAgICAgJ1knIGlmIHNlbGYubWF0Y2hpbmcgZWxzZSAnTicpXG4rICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6XG4rICAgICAgICAgICAgcmV0dXJuIGVyclxuKyAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJ2FsbG93JyksXG4rICAgICAgICAgICAgICAgICAgICAgICAgICdZJyBpZiBzZWxmLmFsbG93IGVsc2UgJ04nKVxuKyAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOlxuKyAgICAgICAgICAgIHJldHVybiBlcnJcbisgICAgICAgIGlmIHNlbGYudHlwZV8gPT0gJ21lbWNnJzpcbisgICAgICAgICAgICBlcnIgPSB3cml0ZV9maWxlKG9zLnBhdGguam9pbihzZWxmLnN5c2ZzX2RpcigpLCAncGF0aCcpLCBzZWxmLnBhdGgpXG4rICAgICAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOlxuKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyXG4rICAgICAgICByZXR1cm4gTm9uZVxuK1xuK2NsYXNzIERhbW9uRmlsdGVyczpcbisgICAgZmlsdGVycyA9IE5vbmVcbisgICAgcHJvYmUgPSBOb25lXG4rXG4rICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWx0ZXJzPU5vbmUpOlxuKyAgICAgICAgaWYgZmlsdGVycyBpcyBOb25lOlxuKyAgICAgICAgICAgIGZpbHRlcnMgPSBbXVxuKyAgICAgICAgc2VsZi5maWx0ZXJzID0gZmlsdGVyc1xuKyAgICAgICAgZm9yIGlkeCwgZmlsdGVyIGluIGVudW1lcmF0ZShzZWxmLmZpbHRlcnMpOlxuKyAgICAgICAgICAgIGZpbHRlci5maWx0ZXJzID0gc2VsZlxuKyAgICAgICAgICAgIGZpbHRlci5pZHggPSBpZHhcbitcbisgICAgZGVmIHN5c2ZzX2RpcihzZWxmKTpcbisgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5wcm9iZS5zeXNmc19kaXIoKSwgJ2ZpbHRlcnMnKVxuK1xuKyAgICBkZWYgc3RhZ2Uoc2VsZik6XG4rICAgICAgICBlcnIgPSB3cml0ZV9maWxlKFxuKyAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJ25yX2ZpbHRlcnMnKSxcbisgICAgICAgICAgICAgICAgbGVuKHNlbGYuZmlsdGVycykpXG4rICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6XG4rICAgICAgICAgICAgcmV0dXJuIGVyclxuKyAgICAgICAgZm9yIGZpbHRlciBpbiBzZWxmLmZpbHRlcnM6XG4rICAgICAgICAgICAgZXJyID0gZmlsdGVyLnN0YWdlKClcbisgICAgICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6XG4rICAgICAgICAgICAgICAgIHJldHVybiBlcnJcbisgICAgICAgIHJldHVybiBOb25lXG4rXG4rY2xhc3MgRGFtb25Qcm9iZTpcbisgICAgd2VpZ2h0ID0gTm9uZVxuKyAgICBmaWx0ZXJzID0gTm9uZVxuKyAgICBwcm9iZXMgPSBOb25lXG4rICAgIGlkeCA9IE5vbmVcbitcbisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdlaWdodD0wLCBmaWx0ZXJzPU5vbmUpOlxuKyAgICAgICAgc2VsZi53ZWlnaHQgPSB3ZWlnaHRcbisgICAgICAgIGlmIGZpbHRlcnMgaXMgTm9uZTpcbisgICAgICAgICAgICBmaWx0ZXJzID0gRGFtb25GaWx0ZXJzKClcbisgICAgICAgIHNlbGYuZmlsdGVycyA9IGZpbHRlcnNcbisgICAgICAgIHNlbGYuZmlsdGVycy5wcm9iZSA9IHNlbGZcbitcbisgICAgZGVmIHN5c2ZzX2RpcihzZWxmKTpcbisgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5wcm9iZXMuc3lzZnNfZGlyKCksICclZCcgJSBzZWxmLmlkeClcbitcbisgICAgZGVmIHN0YWdlKHNlbGYpOlxuKyAgICAgICAgZXJyID0gd3JpdGVfZmlsZShcbisgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHNlbGYuc3lzZnNfZGlyKCksICd3ZWlnaHQnKSwgJyVkJyAlIHNlbGYud2VpZ2h0KVxuKyAgICAgICAgcmV0dXJuIHNlbGYuZmlsdGVycy5zdGFnZSgpXG4rXG4rY2xhc3MgRGFtb25Qcm9iZXM6XG4rICAgIHByb2JlcyA9IE5vbmVcbisgICAgYXR0cnMgPSBOb25lXG4rXG4rICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9iZXM9Tm9uZSk6XG4rICAgICAgICBpZiBwcm9iZXMgaXMgTm9uZTpcbisgICAgICAgICAgICBwcm9iZXMgPSBbXVxuKyAgICAgICAgc2VsZi5wcm9iZXMgPSBwcm9iZXNcbisgICAgICAgIGZvciBpZHgsIHByb2JlIGluIGVudW1lcmF0ZShzZWxmLnByb2Jlcyk6XG4rICAgICAgICAgICAgcHJvYmUucHJvYmVzID0gc2VsZlxuKyAgICAgICAgICAgIHByb2JlLmlkeCA9IGlkeFxuK1xuKyAgICBkZWYgc3lzZnNfZGlyKHNlbGYpOlxuKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLmF0dHJzLnN5c2ZzX2RpcigpLCAncHJvYmVzJylcbitcbisgICAgZGVmIHN0YWdlKHNlbGYpOlxuKyAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJ25yX3Byb2JlcycpLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICBsZW4oc2VsZi5wcm9iZXMpKVxuKyAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOlxuKyAgICAgICAgICAgIHJldHVybiBlcnJcbisgICAgICAgIGZvciBwcm9iZSBpbiBzZWxmLnByb2JlczpcbisgICAgICAgICAgICBlcnIgPSBwcm9iZS5zdGFnZSgpXG4rICAgICAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOlxuKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyXG4rICAgICAgICByZXR1cm4gTm9uZVxuK1xuIGNsYXNzIERhbW9uQXR0cnM6XG4gICAgIHNhbXBsZV91cyA9IE5vbmVcbiAgICAgYWdncl91cyA9IE5vbmVcbkBAIC01NjUsMTEgKzY3NCwxMiBAQCBjbGFzcyBEYW1vbkF0dHJzOlxuICAgICB1cGRhdGVfdXMgPSBOb25lXG4gICAgIG1pbl9ucl9yZWdpb25zID0gTm9uZVxuICAgICBtYXhfbnJfcmVnaW9ucyA9IE5vbmVcbisgICAgcHJvYmVzID0gTm9uZVxuICAgICBjb250ZXh0ID0gTm9uZVxuIFxuICAgICBkZWYgX19pbml0X18oc2VsZiwgc2FtcGxlX3VzPTUwMDAsIGFnZ3JfdXM9MTAwMDAwLFxuICAgICAgICAgICAgICAgICAgaW50ZXJ2YWxzX2dvYWw9SW50ZXJ2YWxzR29hbCgpLCB1cGRhdGVfdXM9MTAwMDAwMCxcbi0gICAgICAgICAgICBtaW5fbnJfcmVnaW9ucz0xMCwgbWF4X25yX3JlZ2lvbnM9MTAwMCk6XG4rICAgICAgICAgICAgbWluX25yX3JlZ2lvbnM9MTAsIG1heF9ucl9yZWdpb25zPTEwMDAsIHByb2Jlcz1Ob25lKTpcbiAgICAgICAgIHNlbGYuc2FtcGxlX3VzID0gc2FtcGxlX3VzXG4gICAgICAgICBzZWxmLmFnZ3JfdXMgPSBhZ2dyX3VzXG4gICAgICAgICBzZWxmLmludGVydmFsc19nb2FsID0gaW50ZXJ2YWxzX2dvYWxcbkBAIC01NzcsNiArNjg3LDEwIEBAIGNsYXNzIERhbW9uQXR0cnM6XG4gICAgICAgICBzZWxmLnVwZGF0ZV91cyA9IHVwZGF0ZV91c1xuICAgICAgICAgc2VsZi5taW5fbnJfcmVnaW9ucyA9IG1pbl9ucl9yZWdpb25zXG4gICAgICAgICBzZWxmLm1heF9ucl9yZWdpb25zID0gbWF4X25yX3JlZ2lvbnNcbisgICAgICAgIGlmIHByb2JlcyBpcyBOb25lOlxuKyAgICAgICAgICAgIHByb2JlcyA9IERhbW9uUHJvYmVzKClcbisgICAgICAgIHNlbGYucHJvYmVzID0gcHJvYmVzXG4rICAgICAgICBzZWxmLnByb2Jlcy5hdHRycyA9IHNlbGZcbiBcbiAgICAgZGVmIGludGVydmFsX3N5c2ZzX2RpcihzZWxmKTpcbiAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5jb250ZXh0LnN5c2ZzX2RpcigpLCAnbW9uaXRvcmluZ19hdHRycycsXG5AQCAtNTg2LDYgKzcwMCw5IEBAIGNsYXNzIERhbW9uQXR0cnM6XG4gICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuY29udGV4dC5zeXNmc19kaXIoKSwgJ21vbml0b3JpbmdfYXR0cnMnLFxuICAgICAgICAgICAgICAgICAnbnJfcmVnaW9ucycpXG4gXG4rICAgIGRlZiBzeXNmc19kaXIoc2VsZik6XG4rICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuY29udGV4dC5zeXNmc19kaXIoKSwgJ21vbml0b3JpbmdfYXR0cnMnKVxuK1xuICAgICBkZWYgc3RhZ2Uoc2VsZik6XG4gICAgICAgICBlcnIgPSB3cml0ZV9maWxlKG9zLnBhdGguam9pbihzZWxmLmludGVydmFsX3N5c2ZzX2RpcigpLCAnc2FtcGxlX3VzJyksXG4gICAgICAgICAgICAgICAgIHNlbGYuc2FtcGxlX3VzKVxuQEAgLTYxNSw2ICs3MzIsMTAgQEAgY2xhc3MgRGFtb25BdHRyczpcbiAgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZTpcbiAgICAgICAgICAgICByZXR1cm4gZXJyXG4gXG4rICAgICAgICBlcnIgPSBzZWxmLnByb2Jlcy5zdGFnZSgpXG4rICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6XG4rICAgICAgICAgICAgcmV0dXJuIGVyclxuK1xuIGNsYXNzIERhbW9uQ3R4OlxuICAgICBvcHMgPSBOb25lXG4gICAgIG1vbml0b3JpbmdfYXR0cnMgPSBOb25lXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vZHJnbl9kdW1wX2RhbW9uX3N0YXR1cy5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2RyZ25fZHVtcF9kYW1vbl9zdGF0dXMucHlcbmluZGV4IDA5NTUyZTkxYmM3ODIuLjQ2MjIwNDZmZDAxMTggMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9kcmduX2R1bXBfZGFtb25fc3RhdHVzLnB5XG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9kcmduX2R1bXBfZGFtb25fc3RhdHVzLnB5XG5AQCAtNDgsNiArNDgsMzcgQEAgZGVmIGF0dHJzX3RvX2RpY3QoYXR0cnMpOlxuICAgICAgICAgWydtYXhfbnJfcmVnaW9ucycsIGludF0sXG4gICAgICAgICBdKVxuIFxuK2RlZiBmaWx0ZXJfdG9fZGljdChkYW1vbl9maWx0ZXIpOlxuKyAgICBmaWx0ZXJfdHlwZV9rZXl3b3JkID0ge1xuKyAgICAgICAgICAgIDA6ICdhbm9uJyxcbisgICAgICAgICAgICAxOiAnbWVtY2cnLFxuKyAgICAgICAgICAgIH1cbisgICAgZGljdF8gPSB7XG4rICAgICAgICAgICAgJ3R5cGUnOiBmaWx0ZXJfdHlwZV9rZXl3b3JkW2ludChkYW1vbl9maWx0ZXIudHlwZSldLFxuKyAgICAgICAgICAgICdtYXRjaGluZyc6IGJvb2woZGFtb25fZmlsdGVyLm1hdGNoaW5nKSxcbisgICAgICAgICAgICAnYWxsb3cnOiBib29sKGRhbW9uX2ZpbHRlci5hbGxvdyksXG4rICAgICAgICAgICAgfVxuKyAgICB0eXBlXyA9IGRpY3RfWyd0eXBlJ11cbisgICAgaWYgdHlwZV8gPT0gJ21lbWNnJzpcbisgICAgICAgIGRpY3RfWydtZW1jZ19pZCddID0gaW50KGRhbW9uX2ZpbHRlci5tZW1jZ19pZClcbisgICAgcmV0dXJuIGRpY3RfXG4rXG4rZGVmIGZpbHRlcnNfdG9fbGlzdChmaWx0ZXJzKTpcbisgICAgcmV0dXJuIFtmaWx0ZXJfdG9fZGljdChmKVxuKyAgICAgICAgICAgIGZvciBmIGluIGxpc3RfZm9yX2VhY2hfZW50cnkoXG4rICAgICAgICAgICAgICAgICdzdHJ1Y3QgZGFtb25fZmlsdGVyJywgZmlsdGVycy5hZGRyZXNzX29mXygpLCAnbGlzdCcpXVxuK1xuK2RlZiBwcm9iZV90b19kaWN0KHByb2JlKTpcbisgICAgcmV0dXJuIHRvX2RpY3QocHJvYmUsIFtcbisgICAgICAgIFsnd2VpZ2h0JywgaW50XSxcbisgICAgICAgIFsnZmlsdGVycycsIGZpbHRlcnNfdG9fbGlzdF0sXG4rICAgICAgICBdKVxuK1xuK2RlZiBwcm9iZXNfdG9fbGlzdChwcm9iZXMpOlxuKyAgICByZXR1cm4gW3Byb2JlX3RvX2RpY3QocClcbisgICAgICAgICAgICBmb3IgcCBpbiBsaXN0X2Zvcl9lYWNoX2VudHJ5KFxuKyAgICAgICAgICAgICAgICAnc3RydWN0IGRhbW9uX3Byb2JlJywgcHJvYmVzLmFkZHJlc3Nfb2ZfKCksICdsaXN0JyldXG4rXG4gZGVmIGFkZHJfcmFuZ2VfdG9fZGljdChhZGRyX3JhbmdlKTpcbiAgICAgcmV0dXJuIHRvX2RpY3QoYWRkcl9yYW5nZSwgW1xuICAgICAgICAgWydzdGFydCcsIGludF0sXG5AQCAtMTk5LDYgKzIzMCw3IEBAIGRlZiBkYW1vbl9jdHhfdG9fZGljdChjdHgpOlxuICAgICByZXR1cm4gdG9fZGljdChjdHgsIFtcbiAgICAgICAgIFsnb3BzJywgb3BzX3RvX2RpY3RdLFxuICAgICAgICAgWydhdHRycycsIGF0dHJzX3RvX2RpY3RdLFxuKyAgICAgICAgWydwcm9iZXMnLCBwcm9iZXNfdG9fbGlzdF0sXG4gICAgICAgICBbJ2FkYXB0aXZlX3RhcmdldHMnLCB0YXJnZXRzX3RvX2xpc3RdLFxuICAgICAgICAgWydzY2hlbWVzJywgc2NoZW1lc190b19saXN0XSxcbiAgICAgICAgIFsncGF1c2UnLCBib29sXSxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnB5XG5pbmRleCAzZmZhMDU0YjYzODY3Li44NTJiNjg4N2E3NWNlIDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMucHlcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnB5XG5AQCAtMTc4LDYgKzE3OCwyNCBAQCBkZWYgYXNzZXJ0X21vbml0b3JpbmdfYXR0cnNfY29tbWl0dGVkKGF0dHJzLCBkdW1wKTpcbiAgICAgYXNzZXJ0X3RydWUoZHVtcFsnbWF4X25yX3JlZ2lvbnMnXSA9PSBhdHRycy5tYXhfbnJfcmVnaW9ucyxcbiAgICAgICAgICAgICAgICAgJ21heF9ucl9yZWdpb25zJywgZHVtcClcbiBcbitkZWYgYXNzZXJ0X2RhbW9uX2ZpbHRlcnNfY29tbWl0dGVkKGZpbHRlcnMsIGR1bXApOlxuKyAgICBhc3NlcnRfdHJ1ZShsZW4oZHVtcCkgPT0gbGVuKGZpbHRlcnMuZmlsdGVycyksICdwcm9iZSBmaWx0ZXJzJywgZHVtcClcbisgICAgZm9yIGlkeCwgZGFtb25fZmlsdGVyIGluIGVudW1lcmF0ZShmaWx0ZXJzLmZpbHRlcnMpOlxuKyAgICAgICAgZmlsdGVyX2R1bXAgPSBkdW1wW2lkeF1cbisgICAgICAgIGFzc2VydF90cnVlKGZpbHRlcl9kdW1wWyd0eXBlJ10gPT0gZGFtb25fZmlsdGVyLnR5cGVfLCAndHlwZScsXG4rICAgICAgICAgICAgICAgICAgICBmaWx0ZXJfZHVtcClcbisgICAgICAgIGFzc2VydF90cnVlKGZpbHRlcl9kdW1wWydtYXRjaGluZyddID09IGRhbW9uX2ZpbHRlci5tYXRjaGluZyxcbisgICAgICAgICAgICAgICAgICAgICdtYXRjaGluZycsIGZpbHRlcl9kdW1wKVxuKyAgICAgICAgYXNzZXJ0X3RydWUoZmlsdGVyX2R1bXBbJ2FsbG93J10gPT0gZGFtb25fZmlsdGVyLmFsbG93LCAnYWxsb3cnLFxuKyAgICAgICAgICAgICAgICAgICAgZmlsdGVyX2R1bXApXG4rXG4rZGVmIGFzc2VydF9wcm9iZXNfY29tbWl0dGVkKHByb2JlcywgZHVtcCk6XG4rICAgIGFzc2VydF90cnVlKGxlbihkdW1wKSA9PSBsZW4ocHJvYmVzLnByb2JlcyksICdwcm9iZXMgbGVuZ3RoJywgZHVtcClcbisgICAgZm9yIGlkeCwgcHJvYmUgaW4gZW51bWVyYXRlKHByb2Jlcy5wcm9iZXMpOlxuKyAgICAgICAgcHJvYmVfZHVtcCA9IGR1bXBbaWR4XVxuKyAgICAgICAgYXNzZXJ0X3RydWUocHJvYmUud2VpZ2h0ID09IHByb2JlX2R1bXBbJ3dlaWdodCddLCAnd2VpZ2h0JywgcHJvYmVfZHVtcClcbisgICAgICAgIGFzc2VydF9kYW1vbl9maWx0ZXJzX2NvbW1pdHRlZChwcm9iZS5maWx0ZXJzLCBwcm9iZV9kdW1wWydmaWx0ZXJzJ10pXG4rXG4gZGVmIGFzc2VydF9tb25pdG9yaW5nX3RhcmdldF9jb21taXR0ZWQodGFyZ2V0LCBkdW1wKTpcbiAgICAgIyB0YXJnZXQucGlkIGlzIHRoZSBwaWQgXCJudW1iZXJcIiwgd2hpbGUgZHVtcFsncGlkJ10gaXMgJ3N0cnVjdCBwaWQnXG4gICAgICMgcG9pbnRlciwgYW5kIGhlbmNlIGNhbm5vdCBiZSBjb21wYXJlZC5cbkBAIC0xOTYsNiArMjE0LDcgQEAgZGVmIGFzc2VydF9jdHhfY29tbWl0dGVkKGN0eCwgZHVtcCk6XG4gICAgICAgICAgICAgfVxuICAgICBhc3NlcnRfdHJ1ZShkdW1wWydvcHMnXVsnaWQnXSA9PSBvcHNfdmFsW2N0eC5vcHNdLCAnb3BzX2lkJywgZHVtcClcbiAgICAgYXNzZXJ0X21vbml0b3JpbmdfYXR0cnNfY29tbWl0dGVkKGN0eC5tb25pdG9yaW5nX2F0dHJzLCBkdW1wWydhdHRycyddKVxuKyAgICBhc3NlcnRfcHJvYmVzX2NvbW1pdHRlZChjdHgubW9uaXRvcmluZ19hdHRycy5wcm9iZXMsIGR1bXBbJ3Byb2JlcyddKVxuICAgICBhc3NlcnRfbW9uaXRvcmluZ190YXJnZXRzX2NvbW1pdHRlZChjdHgudGFyZ2V0cywgZHVtcFsnYWRhcHRpdmVfdGFyZ2V0cyddKVxuICAgICBhc3NlcnRfc2NoZW1lc19jb21taXR0ZWQoY3R4LnNjaGVtZXMsIGR1bXBbJ3NjaGVtZXMnXSlcbiAgICAgYXNzZXJ0X3RydWUoZHVtcFsncGF1c2UnXSA9PSBjdHgucGF1c2UsICdwYXVzZScsIGR1bXApXG5AQCAtMzAwLDcgKzMxOSwyMSBAQCBkZWYgbWFpbigpOlxuICAgICAgICAgICAgICAgICBpbnRlcnZhbHNfZ29hbD1fZGFtb25fc3lzZnMuSW50ZXJ2YWxzR29hbChcbiAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc19icD00MDAsIGFnZ3JzPTMsIG1pbl9zYW1wbGVfdXM9NTAwMCxcbiAgICAgICAgICAgICAgICAgICAgIG1heF9zYW1wbGVfdXM9MTAwMDAwMDApLFxuLSAgICAgICAgICAgICAgICB1cGRhdGVfdXM9MjAwMDAwMCksXG4rICAgICAgICAgICAgICAgIHVwZGF0ZV91cz0yMDAwMDAwLFxuKyAgICAgICAgICAgICAgICBwcm9iZXM9X2RhbW9uX3N5c2ZzLkRhbW9uUHJvYmVzKFxuKyAgICAgICAgICAgICAgICAgICAgcHJvYmVzPVtfZGFtb25fc3lzZnMuRGFtb25Qcm9iZShcbisgICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQ9NDIsXG4rICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVycz1fZGFtb25fc3lzZnMuRGFtb25GaWx0ZXJzKFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzPVtcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kYW1vbl9zeXNmcy5EYW1vbkZpbHRlcihcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlXz0nYW5vbicsXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hpbmc9VHJ1ZSxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvdz1UcnVlLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4rICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgIHNjaGVtZXM9W19kYW1vbl9zeXNmcy5EYW1vcyhcbiAgICAgICAgICAgICAgICAgYWN0aW9uPSdwYWdlb3V0JyxcbiAgICAgICAgICAgICAgICAgYWNjZXNzX3BhdHRlcm49X2RhbW9uX3N5c2ZzLkRhbW9zQWNjZXNzUGF0dGVybihcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIxOjQzOjM1LjE4Nzk2ODEyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTAzMzY3ODE4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogREFNT04gVGVzdCBTdWl0ZSBBZGRpdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyBpbiBmcm9udCBvZiBtZSwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpczogZG9lcyB0aGlzIGludHJvZHVjZSBhbnkgKmZ1bmN0aW9uYWwqIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHdlIG5lZWQgdG8gY29uc2lkZXIgZm9yIGZ1enppbmc/IExldCdzIHNlZS4uLiBpdCBzZWVtcyBsaWtlIGl0J3MgdG91Y2hpbmcgYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAgYW5kIHNvbWUgZmlsZXMgdW5kZXIgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2AsIHNwZWNpZmljYWxseSBweXRob24gc2NyaXB0czogYF9kYW1vbl9zeXNmcy5weWAsIGBkcmduX2R1bXBfZGFtb25fc3RhdHVzLnB5YCwgYW5kIGBzeXNmcy5weWAuIFJpZ2h0IGF3YXksIHRoYXQgcmFpc2VzIGEgZmxhZyDigJMgaWYgaXQncyB0ZXN0IGNvZGUsIHdlIG1pZ2h0IGJlIGluIHRoZSBjbGVhci5cblxuQnV0IEkgbmVlZCB0byBiZSAqYWJzb2x1dGVseSogc3VyZS4gTGV0IG1lIGNvbmZpcm0gdGhhdCB0aGlzIGlzICphbGwqIHRoZSBwYXRjaCBtb2RpZmllcy4gRG91YmxlLWNoZWNraW5nLi4uIHl1cCwgdGhhdCdzIGl0LiBKdXN0IEtVbml0IHRlc3RzIGFuZCBzZWxmdGVzdHMuIE5vIGNvcmUga2VybmVsIGxvZ2ljLCBubyBkcml2ZXJzLCBubyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29kZSBoYXMgYmVlbiB0b3VjaGVkLiBJdCdzICpwdXJlbHkqIHRlc3QgaW5mcmFzdHJ1Y3R1cmUuIE9rYXksIEnigJltIGNvbmZpcm1pbmcgdGhhdCBhZ2Fpbi4uLlxuXG5BbHJpZ2h0LCBub3cgdG8gYXBwbHkgdGhlIHJ1bGVzLiBBbSBJIG1pc3NpbmcgYW55dGhpbmcsIGl0IHNlZW1zIGxpa2UgdGhlIHJ1bGUgc3RhdGVzOiBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6IC4uLiBcIiBhbmQgXCJJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoIHRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlwiXG5cbkl0J3MgdGVtcHRpbmcgdG8gY2F0ZWdvcml6ZSB0aGlzIGFzIFwiZGVjb3JhdGl2ZSBjaGFuZ2VzXCIgYmVjYXVzZSwgaW4gYSB3YXksIHRlc3RzIGRvbid0ICpkaXJlY3RseSogYWx0ZXIgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIGtlcm5lbCwgYnV0IHRoZXJlJ3Mgbm8gc3BlY2lmaWMgYnVsbGV0IGZvciB0ZXN0cy4gSG93ZXZlciwgdGVzdHMgZG9uJ3QgbW9kaWZ5IHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4gVGhlIGNoYW5nZXMgYXJlIGNvbmZpbmVkIHRvIHRoZSB0ZXN0IGhhcm5lc3MuIFNvLCBhY2NvcmRpbmcgdG8gdGhlIHJ1bGUgc2V0LCBzaW5jZSBpdCBvbmx5IGNvbnRhaW5zIHRlc3RzIEkgd2lsbCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIFRpbWUgdG8gY2FsbCBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk0NSwiT3V0cHV0VG9rZW5zIjo1OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIxOjQzOjQ0LjIyMTY0OTdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBLVW5pdCB0ZXN0cyBhbmQgUHl0aG9uIHNlbGZ0ZXN0cyBmb3IgREFNT04gZmlsdGVycyBhbmQgcHJvYmVzLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IGZ1bmN0aW9uYWwga2VybmVsIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGFkZHMgS1VuaXQgdGVzdHMgYW5kIFB5dGhvbiBzZWxmdGVzdHMgZm9yIERBTU9OIGZpbHRlcnMgYW5kIHByb2Jlcy4gSXQgZG9lcyBub3QgbW9kaWZ5IGFueSBmdW5jdGlvbmFsIGtlcm5lbCBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow2cngk[1] Phase: Running StartedAt: 2026-07-30 21:43:56 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2cngk[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-30 21:43:56 +0000 UTC FinishedAt: 2026-07-30 21:44:03 +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,}