Name: series-workflowkvqqt Phase: Failed StartedAt: 2026-09-14 13:16:56 +0000 UTC FinishedAt: 2026-09-14 13:39:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvqqt[0] Phase: Succeeded StartedAt: 2026-09-14 13:16:56 +0000 UTC FinishedAt: 2026-09-14 13:39:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvqqt[0].run-triage Phase: Succeeded StartedAt: 2026-09-14 13:16:56 +0000 UTC FinishedAt: 2026-09-14 13:39:23 +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+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB0aGUgdXNlci1zcGFjZSBzZWxmdGVzdCBzY3JpcHQgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY3RsL3N5c2N0bC5zaCB0byBtb2Rlcm5pemUgaXQgYW5kIHVzZSBrdGFwX2hlbHBlcnMuIEl0IGRvZXMgbm90IHRvdWNoIGFueSBrZXJuZWwgc291cmNlIGNvZGUsIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCksIG9yIGtlcm5lbCBtb2R1bGVzLCBzbyBpdCBpcyBub3Qgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6Mzk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyNzE2NjkyY2U0ZmJlMDEzYjg4ZTNmNDNiMDBmNzM1Mzg5MjUxMzU4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMTM6Mzk6MDUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY3RsL3N5c2N0bC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2N0bC9zeXNjdGwuc2hcbmluZGV4IDk1ZTkzNzA5MDg4YTMuLmNlYjVjZmEwY2ZkNGQgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjdGwvc3lzY3RsLnNoXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjdGwvc3lzY3RsLnNoXG5AQCAtMiwzNjIgJiM0MzsyLDIzOSBAQFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgT1IgY29weWxlZnQtbmV4dC0wLjMuMVxuICMgQ29weXJpZ2h0IChDKSAyMDE3IEx1aXMgUi4gUm9kcmlndWV6IFx1MDAzY21jZ3JvZkBrZXJuZWwub3JnXHUwMDNlXG4gXG4tIyBUaGlzIHBlcmZvcm1zIGEgc2VyaWVzIHRlc3RzIGFnYWluc3QgdGhlIHByb2Mgc3lzY3RsIGludGVyZmFjZS5cbi1cbiYjNDM7IyBSZWR1Y2Ugbm9pc2UgYnkgZGlzYWJsaW5nIFwmIzM0O3VucmVhY2hhYmxlXCYjMzQ7IGNoZWNrLlxuICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjMxN1xuLSMgS3NlbGZ0ZXN0IGZyYW1ld29yayByZXF1aXJlbWVudCAtIFNLSVAgY29kZSBpcyA0LlxuLWtzZnRfc2tpcD00XG4tXG4tVEVTVF9OQU1FPVwmIzM0O3N5c2N0bFwmIzM0O1xuLVRFU1RfRFJJVkVSPVwmIzM0O3Rlc3RfJHtURVNUX05BTUV9XCYjMzQ7XG4tVEVTVF9ESVI9JChkaXJuYW1lICQwKVxuLVRFU1RfRklMRT0kKG1rdGVtcClcbi1cbi0jIGluaXRpYWxpemUgZm9yIGluZGl2aWR1YWwgdGVzdHNcbi1yYz0wXG4tXG4tIyBUaGlzIHJlcHJlc2VudHNcbi0jXG4tIyBURVNUX0lEOlRFU1RfQ09VTlQ6RU5BQkxFRDpUQVJHRVQ6U0tJUF9OT19UQVJHRVRcbi0jXG4tIyBURVNUX0lEOiBpcyB0aGUgdGVzdCBpZCBudW1iZXJcbi0jIFRFU1RfQ09VTlQ6IG51bWJlciBvZiB0aW1lcyB3ZSBzaG91bGQgcnVuIHRoZSB0ZXN0XG4tIyBFTkFCTEVEOiAxIGlmIGVuYWJsZWQsIDAgb3RoZXJ3aXNlXG4tIyBUQVJHRVQ6IHRlc3QgdGFyZ2V0IGZpbGUgcmVxdWlyZWQgb24gdGhlIHRlc3Rfc3lzY3RsIG1vZHVsZVxuLSMgU0tJUF9OT19UQVJHRVQ6IDEgc2tpcCBpZiBUQVJHRVQgbm90IHRoZXJlXG4tIyAgICAgICAgICAgICAgICAgMCBydW4gZXZlbiB0aG91Z2ggVEFSR0VUIG5vdCB0aGVyZVxuLSNcbi0jIE9uY2UgdGhlc2UgYXJlIGVuYWJsZWQgcGxlYXNlIGxlYXZlIHRoZW0gYXMtaXMuIFdyaXRlIHlvdXIgb3duIHRlc3QsXG4tIyB3ZSBoYXZlIHRvbnMgb2Ygc3BhY2UuXG4tQUxMX1RFU1RTPVwmIzM0OzAwMDE6MToxOmludF8wMDAxOjFcJiMzNDtcbi1BTExfVEVTVFM9XCYjMzQ7JEFMTF9URVNUUyAwMDAyOjE6MTpzdHJpbmdfMDAwMToxXCYjMzQ7XG4tQUxMX1RFU1RTPVwmIzM0OyRBTExfVEVTVFMgMDAwMzoxOjE6aW50XzAwMDI6MVwmIzM0O1xuLUFMTF9URVNUUz1cJiMzNDskQUxMX1RFU1RTIDAwMDQ6MToxOnVpbnRfMDAwMToxXCYjMzQ7XG4tQUxMX1RFU1RTPVwmIzM0OyRBTExfVEVTVFMgMDAwNTozOjE6aW50XzAwMDM6MVwmIzM0O1xuLUFMTF9URVNUUz1cJiMzNDskQUxMX1RFU1RTIDAwMDY6NTA6MTpiaXRtYXBfMDAwMToxXCYjMzQ7XG4tQUxMX1RFU1RTPVwmIzM0OyRBTExfVEVTVFMgMDAwNzoxOjE6Ym9vdF9pbnQ6MVwmIzM0O1xuLUFMTF9URVNUUz1cJiMzNDskQUxMX1RFU1RTIDAwMDg6MToxOm1hdGNoX2ludDoxXCYjMzQ7XG4tQUxMX1RFU1RTPVwmIzM0OyRBTExfVEVTVFMgMDAwOToxOjE6dW5yZWdpc3Rlcl9lcnJvcjowXCYjMzQ7XG4tQUxMX1RFU1RTPVwmIzM0OyRBTExfVEVTVFMgMDAxMDoxOjE6bW50L21udF9lcnJvcjowXCYjMzQ7XG4tQUxMX1RFU1RTPVwmIzM0OyRBTExfVEVTVFMgMDAxMToxOjE6ZW1wdHlfYWRkOjBcJiMzNDtcbi1BTExfVEVTVFM9XCYjMzQ7JEFMTF9URVNUUyAwMDEyOjE6MTp1OF92YWxpZDowXCYjMzQ7XG4tQUxMX1RFU1RTPVwmIzM0OyRBTExfVEVTVFMgMDAxMzoxOjE6aW50XzAwMDM6MVwmIzM0O1xuLVxuLWZ1bmN0aW9uIGFsbG93X3VzZXJfZGVmYXVsdHMoKVxuJiM0MztcbiYjNDM7IyBUaGlzIHBlcmZvcm1zIGEgc2VyaWVzIG9mIHRlc3RzIGFnYWluc3QgdGhlIHByb2Mgc3lzY3RsIGludGVyZmFjZS5cbiYjNDM7XG4mIzQzO0RJUj1cJiMzNDskKGRpcm5hbWUgXCYjMzQ7JChyZWFkbGluayAtZiBcJiMzNDskMFwmIzM0OylcJiMzNDspXCYjMzQ7XG4mIzQzO3NvdXJjZSBcJiMzNDske0RJUn1cJiMzNDsvLi4va3NlbGZ0ZXN0L2t0YXBfaGVscGVycy5zaFxuJiM0MztcbiYjNDM7VEVTVF9EUklWRVI9XCYjMzQ7dGVzdF9zeXNjdGxcJiMzNDtcbiYjNDM7XG4mIzQzO2Fzc2VydF93cml0ZV9yZWplY3RlZCgpICMgXHUwMDNjZmlsZVx1MDAzZSBcdTAwM2N2YWx1ZVx1MDAzZVxuIHtcbi1cdGlmIFsgLXogJERJUiBdOyB0aGVuXG4tXHRcdERJUj1cJiMzNDsvc3lzL21vZHVsZS90ZXN0X3N5c2N0bC9cJiMzNDtcbi1cdGZpXG4tXHRpZiBbIC16ICRERUZBVUxUX05VTV9URVNUUyBdOyB0aGVuXG4tXHRcdERFRkFVTFRfTlVNX1RFU1RTPTUwXG4tXHRmaVxuLVx0aWYgWyAteiAkU1lTQ1RMIF07IHRoZW5cbi1cdFx0U1lTQ1RMPVwmIzM0Oy9wcm9jL3N5cy9kZWJ1Zy90ZXN0X3N5c2N0bFwmIzM0O1xuLVx0Zmlcbi1cdGlmIFsgLXogJFBST0RfU1lTQ1RMIF07IHRoZW5cbi1cdFx0UFJPRF9TWVNDVEw9XCYjMzQ7L3Byb2Mvc3lzXCYjMzQ7XG4tXHRmaVxuLVx0aWYgWyAteiAkV1JJVEVTX1NUUklDVCBdOyB0aGVuXG4tXHRcdFdSSVRFU19TVFJJQ1Q9XCYjMzQ7JHtQUk9EX1NZU0NUTH0va2VybmVsL3N5c2N0bF93cml0ZXNfc3RyaWN0XCYjMzQ7XG4mIzQzO1x0bG9jYWwgZmlsZT0kMSB2YWw9JDJcbiYjNDM7XHRpZiBwcmludGYgJiMzOTslcyYjMzk7IFwmIzM0OyR2YWxcJiMzNDsgXHUwMDNlIFwmIzM0OyRmaWxlXCYjMzQ7IDJcdTAwM2UvZGV2L251bGw7IHRoZW5cbiYjNDM7XHRcdGt0YXBfcHJpbnRfbXNnIFwmIzM0OyRmaWxlOiB3cml0ZSBvZiAmIzM5OyR2YWwmIzM5OyBzdWNjZWVkZWQsIGV4cGVjdGVkIHJlamVjdGlvblwmIzM0O1xuJiM0MztcdFx0cmV0dXJuIDFcbiBcdGZpXG4mIzQzO1x0cmV0dXJuIDBcbiB9XG4gXG4tZnVuY3Rpb24gY2hlY2tfcHJvZHVjdGlvbl9zeXNjdGxfd3JpdGVzX3N0cmljdCgpXG4mIzQzO2Fzc2VydF9jb250ZW50KCkgIyBcdTAwM2NmaWxlXHUwMDNlIFx1MDAzY3dhbnQtZmlsZVx1MDAzZVxuIHtcbi1cdGVjaG8gLW4gXCYjMzQ7Q2hlY2tpbmcgcHJvZHVjdGlvbiB3cml0ZSBzdHJpY3Qgc2V0dGluZyAuLi4gXCYjMzQ7XG4tXHRpZiBbICEgLWUgJHtXUklURVNfU1RSSUNUfSBdOyB0aGVuXG4tXHRcdGVjaG8gXCYjMzQ7RkFJTCwgYnV0IHNraXAgaW4gY2FzZSBvZiBvbGQga2VybmVsXCYjMzQ7IFx1MDAzZVx1MDAyNjJcbi1cdGVsc2Vcbi1cdFx0b2xkX3N0cmljdD0kKGNhdCAke1dSSVRFU19TVFJJQ1R9KVxuLVx0XHRpZiBbIFwmIzM0OyRvbGRfc3RyaWN0XCYjMzQ7ID0gXCYjMzQ7MVwmIzM0OyBdOyB0aGVuXG4tXHRcdFx0ZWNobyBcJiMzNDtPS1wmIzM0O1xuLVx0XHRlbHNlXG4tXHRcdFx0ZWNobyBcJiMzNDtGQUlMLCBzdHJpY3QgdmFsdWUgaXMgMCBidXQgZm9yY2UgdG8gMSB0byBjb250aW51ZVwmIzM0OyBcdTAwM2VcdTAwMjYyXG4tXHRcdFx0ZWNobyBcJiMzNDsxXCYjMzQ7IFx1MDAzZSAke1dSSVRFU19TVFJJQ1R9XG4tXHRcdGZpXG4tXHRmaVxuLVxuLVx0aWYgWyAteiAkUEFHRV9TSVpFIF07IHRoZW5cbi1cdFx0UEFHRV9TSVpFPSQoZ2V0Y29uZiBQQUdFU0laRSlcbi1cdGZpXG4tXHRpZiBbIC16ICRNQVhfRElHSVRTIF07IHRoZW5cbi1cdFx0TUFYX0RJR0lUUz0kKCgkUEFHRV9TSVpFLzgpKVxuLVx0Zmlcbi1cdGlmIFsgLXogJElOVF9NQVggXTsgdGhlblxuLVx0XHRJTlRfTUFYPSQoZ2V0Y29uZiBJTlRfTUFYKVxuLVx0Zmlcbi1cdGlmIFsgLXogJFVJTlRfTUFYIF07IHRoZW5cbi1cdFx0VUlOVF9NQVg9JChnZXRjb25mIFVJTlRfTUFYKVxuJiM0MztcdGxvY2FsIGZpbGU9JDEgd2FudF9maWxlPSQyIGdvdFxuJiM0MztcdGdvdD0kKGNhdCBcJiMzNDskZmlsZVwmIzM0OylcbiYjNDM7XHRpZiBbIFwmIzM0OyRnb3RcJiMzNDsgPT0gXCYjMzQ7JHdhbnRfZmlsZVwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0XHRyZXR1cm4gMFxuIFx0ZmlcbiYjNDM7XHRrdGFwX3ByaW50X21zZyBcJiMzNDskZmlsZTogZ290ICYjMzk7JGdvdCYjMzk7LCB3YW50ICYjMzk7JHdhbnRfZmlsZSYjMzk7XCYjMzQ7XG4mIzQzO1x0cmV0dXJuIDFcbiB9XG4gXG4tdGVzdF9yZXFzKClcbiYjNDM7IyBjb21wYXJlIGlnbm9yaW5nIHdoaXRlc3BhY2VzXG4mIzQzO2Fzc2VydF9jb250ZW50X2xvb3NlKCkgIyBcdTAwM2NmaWxlXHUwMDNlIFx1MDAzY3dhbnQtZmlsZVx1MDAzZVxuIHtcbi1cdHVpZD0kKGlkIC11KVxuLVx0aWYgWyAkdWlkIC1uZSAwIF07IHRoZW5cbi1cdFx0ZWNobyAkbXNnIG11c3QgYmUgcnVuIGFzIHJvb3QgXHUwMDNlXHUwMDI2MlxuLVx0XHRleGl0ICRrc2Z0X3NraXBcbi1cdGZpXG4tXG4tXHRpZiAhIHdoaWNoIHBlcmwgMlx1MDAzZSAvZGV2L251bGwgXHUwMDNlIC9kZXYvbnVsbDsgdGhlblxuLVx0XHRlY2hvIFwmIzM0OyQwOiBZb3UgbmVlZCBwZXJsIGluc3RhbGxlZFwmIzM0O1xuLVx0XHRleGl0ICRrc2Z0X3NraXBcbi1cdGZpXG4tXHRpZiAhIHdoaWNoIGdldGNvbmYgMlx1MDAzZSAvZGV2L251bGwgXHUwMDNlIC9kZXYvbnVsbDsgdGhlblxuLVx0XHRlY2hvIFwmIzM0OyQwOiBZb3UgbmVlZCBnZXRjb25mIGluc3RhbGxlZFwmIzM0O1xuLVx0XHRleGl0ICRrc2Z0X3NraXBcbi1cdGZpXG4tXHRpZiAhIHdoaWNoIGRpZmYgMlx1MDAzZSAvZGV2L251bGwgXHUwMDNlIC9kZXYvbnVsbDsgdGhlblxuLVx0XHRlY2hvIFwmIzM0OyQwOiBZb3UgbmVlZCBkaWZmIGluc3RhbGxlZFwmIzM0O1xuLVx0XHRleGl0ICRrc2Z0X3NraXBcbiYjNDM7XHRsb2NhbCBmaWxlPSQxIHdhbnRfZmlsZT0kMlxuJiM0MztcdGlmIGVjaG8gXCYjMzQ7JHdhbnRfZmlsZVwmIzM0OyB8IGRpZmYgLXEgLXcgLXUgLSBcJiMzNDskZmlsZVwmIzM0OyBcdTAwM2UgL2Rldi9udWxsOyB0aGVuXG4mIzQzO1x0XHRyZXR1cm4gMFxuIFx0ZmlcbiYjNDM7XHRrdGFwX3ByaW50X21zZyBcJiMzNDskZmlsZTogY29udGVudCBkb2VzIG5vdCBtYXRjaCAmIzM5OyR3YW50X2ZpbGUmIzM5OyAod2hpdGVzcGFjZS1pbnNlbnNpdGl2ZSlcJiMzNDtcbiYjNDM7XHRyZXR1cm4gMVxuIH1cbiBcbi1mdW5jdGlvbiBsb2FkX3JlcV9tb2QoKVxuJiM0MzsjIEZvciBjaGVja3Mgd2hlcmUgd3JpdGVzIG11c3QgTk9UIHRha2UgZWZmZWN0XG4mIzQzO2Fzc2VydF9jb250ZW50X3JlamVjdGVkKCkgIyBcdTAwM2NmaWxlXHUwMDNlIFx1MDAzY2JhZFx1MDAzZVxuIHtcbi1cdGlmIFsgISAtZCAkU1lTQ1RMIF07IHRoZW5cbi1cdFx0aWYgISBtb2Rwcm9iZSAtcSAtbiAkVEVTVF9EUklWRVI7IHRoZW5cbi1cdFx0XHRlY2hvIFwmIzM0OyQwOiBtb2R1bGUgJFRFU1RfRFJJVkVSIG5vdCBmb3VuZCBbU0tJUF1cJiMzNDtcbi1cdFx0XHRlY2hvIFwmIzM0O1lvdSBtdXN0IHNldCBDT05GSUdfVEVTVF9TWVNDVEw9bSBpbiB5b3VyIGtlcm5lbFwmIzM0OyBcdTAwM2VcdTAwMjYyXG4tXHRcdFx0ZXhpdCAka3NmdF9za2lwXG4tXHRcdGZpXG4tXHRcdG1vZHByb2JlICRURVNUX0RSSVZFUlxuLVx0XHRpZiBbICQ/IC1uZSAwIF07IHRoZW5cbi1cdFx0XHRlY2hvIFwmIzM0OyQwOiBtb2Rwcm9iZSAkVEVTVF9EUklWRVIgZmFpbGVkLlwmIzM0O1xuLVx0XHRcdGV4aXRcbi1cdFx0ZmlcbiYjNDM7XHRsb2NhbCBmaWxlPSQxIGJhZD0kMlxuJiM0MztcdGlmIGVjaG8gXCYjMzQ7JGJhZFwmIzM0OyB8IGRpZmYgLXEgLXcgLXUgLSBcJiMzNDskZmlsZVwmIzM0OyBcdTAwM2UgL2Rldi9udWxsOyB0aGVuXG4mIzQzO1x0XHRrdGFwX3ByaW50X21zZyBcJiMzNDskZmlsZTogdW5leHBlY3RlZGx5IG5vdyBob2xkcyByZWplY3RlZCB2YWx1ZSAmIzM5OyRiYWQmIzM5O1wmIzM0O1xuJiM0MztcdFx0cmV0dXJuIDFcbiBcdGZpXG4mIzQzO1x0cmV0dXJuIDBcbiB9XG4gXG4tcmVzZXRfdmFscygpXG4mIzQzOyMgcHJvYyBmaWxlcyBnZXQgcmVhZCBhIHBhZ2UgYXQgYSB0aW1lLCB3aGljaCBjYW4gY29uZnVzZSBkaWZmIHJlc3VsdGluZyBpblxuJiM0MzsjIGluY29ycmVjdCByZXN1bHRzLiBVc2UgYSB0ZW1wIGZpbGUgdG8gZGlmZi5cbiYjNDM7YXNzZXJ0X2RpZmZfcHJvY19maWxlKCkgIyBcdTAwM2NmaWxlXHUwMDNlIFx1MDAzY3dhbnQtZmlsZVx1MDAzZVxuIHtcbi1cdFZBTD1cJiMzNDtcJiMzNDtcbi1cdFRSSUdHRVI9JChiYXNlbmFtZSAke1RBUkdFVH0pXG4tXHRjYXNlIFwmIzM0OyRUUklHR0VSXCYjMzQ7IGluXG4tXHRcdGludF8wMDAxKVxuLVx0XHRcdFZBTD1cJiMzNDs2MFwmIzM0O1xuLVx0XHRcdDs7XG4tXHRcdGludF8wMDAyKVxuLVx0XHRcdFZBTD1cJiMzNDsxXCYjMzQ7XG4tXHRcdFx0Oztcbi1cdFx0dWludF8wMDAxKVxuLVx0XHRcdFZBTD1cJiMzNDszMTRcJiMzNDtcbi1cdFx0XHQ7O1xuLVx0XHRzdHJpbmdfMDAwMSlcbi1cdFx0XHRWQUw9XCYjMzQ7KG5vbmUpXCYjMzQ7XG4tXHRcdFx0Oztcbi1cdFx0Yml0bWFwXzAwMDEpXG4tXHRcdFx0VkFMPVwmIzM0O1wmIzM0O1xuLVx0XHRcdDs7XG4tXHRcdCopXG4tXHRcdFx0Oztcbi1cdGVzYWNcbi1cdGVjaG8gLW4gJFZBTCBcdTAwM2UgJFRBUkdFVFxuLX1cbiYjNDM7XHRsb2NhbCBmaWxlPSQxIHdhbnRfZmlsZT0kMiB0bXBcbiYjNDM7XHR0bXA9JChta3RlbXApXG4mIzQzO1x0Y2F0IFwmIzM0OyRmaWxlXCYjMzQ7IFx1MDAzZSBcJiMzNDskdG1wXCYjMzQ7XG4gXG4tc2V0X29yaWcoKVxuLXtcbi1cdGlmIFsgISAteiAkVEFSR0VUIF0gXHUwMDI2XHUwMDI2IFsgISAteiAkT1JJRyBdOyB0aGVuXG4tXHRcdGlmIFsgLWYgJHtUQVJHRVR9IF07IHRoZW5cbi1cdFx0XHRlY2hvIFwmIzM0OyR7T1JJR31cJiMzNDsgXHUwMDNlIFwmIzM0OyR7VEFSR0VUfVwmIzM0O1xuLVx0XHRmaVxuJiM0MztcdGlmIGRpZmYgLXcgLXEgXCYjMzQ7JHRtcFwmIzM0OyBcJiMzNDskd2FudF9maWxlXCYjMzQ7IFx1MDAzZSAvZGV2L251bGw7IHRoZW5cbiYjNDM7XHRcdHJtIC1mIFwmIzM0OyR0bXBcJiMzNDtcbiYjNDM7XHRcdHJldHVybiAwXG4gXHRmaVxuJiM0MztcdGt0YXBfcHJpbnRfbXNnIFwmIzM0OyRmaWxlOiBjb250ZW50IGRvZXMgbm90IG1hdGNoIGV4cGVjdGVkIGZpbGUgJHdhbnRfZmlsZVwmIzM0O1xuJiM0MztcdHJtIC1mIFwmIzM0OyR0bXBcJiMzNDtcbiYjNDM7XHRyZXR1cm4gMVxuIH1cbiBcbi1zZXRfdGVzdCgpXG4mIzQzOyMgVmVyaWZ5IHRoYXQgYW4gZXJyb25lb3VzIHVwZGF0ZSBmYWlscyBhbmQgZG9lcyBub3QgY2hhbmdlIHRoZSBiYXNlbGluZS5cbiYjNDM7YXNzZXJ0X25vX3BhcnRpYWxfdXBkYXRlKCkgIyBcdTAwM2NmaWxlXHUwMDNlIFx1MDAzY2Jhc2VsaW5lXHUwMDNlIFx1MDAzY2JhZC12YWx1ZVx1MDAzZVxuIHtcbi1cdGVjaG8gXCYjMzQ7JHtURVNUX1NUUn1cJiMzNDsgXHUwMDNlIFwmIzM0OyR7VEFSR0VUfVwmIzM0O1xuJiM0MztcdGxvY2FsIGZpbGU9JDEgYmFzZWxpbmU9JDIgYmFkPSQzXG4mIzQzO1xuJiM0MztcdHByaW50ZiAmIzM5OyVzJiMzOTsgXCYjMzQ7JGJhc2VsaW5lXCYjMzQ7IFx1MDAzZSBcJiMzNDskZmlsZVwmIzM0O1xuJiM0MztcdGFzc2VydF93cml0ZV9yZWplY3RlZCBcJiMzNDskZmlsZVwmIzM0OyBcJiMzNDskYmFkXCYjMzQ7IHx8IHJldHVybiAxXG4mIzQzO1x0YXNzZXJ0X2NvbnRlbnRfbG9vc2UgXCYjMzQ7JGZpbGVcJiMzNDsgXCYjMzQ7JGJhc2VsaW5lXCYjMzQ7XG4gfVxuIFxuLXZlcmlmeSgpXG4mIzQzO2Fzc2VydF9ncmVwKCkgIyBcdTAwM2NmaWxlXHUwMDNlIFx1MDAzY3BhdHRlcm5cdTAwM2UgLSBcdTAwM2NwYXR0ZXJuXHUwMDNlIG11c3QgYXBwZWFyIGluIFx1MDAzY2ZpbGVcdTAwM2VcbiB7XG4tXHRsb2NhbCBzZWVuXG4tXHRzZWVuPSQoY2F0IFwmIzM0OyQxXCYjMzQ7KVxuLVx0aWYgWyBcJiMzNDske3NlZW59XCYjMzQ7ICE9IFwmIzM0OyR7VEVTVF9TVFJ9XCYjMzQ7IF07IHRoZW5cbi1cdFx0cmV0dXJuIDFcbiYjNDM7XHRsb2NhbCBmaWxlPSQxIHBhdHRlcm49JDJcbiYjNDM7XHRpZiBncmVwIC1xIFwmIzM0OyRwYXR0ZXJuXCYjMzQ7IFwmIzM0OyRmaWxlXCYjMzQ7OyB0aGVuXG4mIzQzO1x0XHRyZXR1cm4gMFxuIFx0Zmlcbi1cdHJldHVybiAwXG4mIzQzO1x0a3RhcF9wcmludF9tc2cgXCYjMzQ7JGZpbGU6IHBhdHRlcm4gJiMzOTskcGF0dGVybiYjMzk7IG5vdCBmb3VuZFwmIzM0O1xuJiM0MztcdHJldHVybiAxXG4gfVxuIFxuLSMgcHJvYyBmaWxlcyBnZXQgcmVhZCBhIHBhZ2UgYXQgYSB0aW1lLCB3aGljaCBjYW4gY29uZnVzZSBkaWZmLFxuLSMgYW5kIGdldCB5b3UgaW5jb3JyZWN0IHJlc3VsdHMgb24gcHJvYyBmaWxlcyB3aXRoIGxvbmcgZGF0YS4gVG8gdXNlXG4tIyBkaWZmIGFnYWluc3QgdGhlbSB5b3UgbXVzdCBmaXJzdCBleHRyYWN0IHRoZSBvdXRwdXQgdG8gYSBmaWxlLCBhbmRcbi0jIHRoZW4gY29tcGFyZSBhZ2FpbnN0IHRoYXQgZmlsZS5cbi12ZXJpZnlfZGlmZl9wcm9jX2ZpbGUoKVxuJiM0Mzthc3NlcnRfZ3JlcF9hYnNlbnQoKSAjIFx1MDAzY2ZpbGVcdTAwM2UgXHUwMDNjcGF0dGVyblx1MDAzZSAtIFx1MDAzY3BhdHRlcm5cdTAwM2UgbXVzdCBOT1QgYXBwZWFyXG4ge1xuLVx0VE1QX0RVTVBfRklMRT0kKG1rdGVtcClcbi1cdGNhdCAkMSBcdTAwM2UgJFRNUF9EVU1QX0ZJTEVcbi1cbi1cdGlmICEgZGlmZiAtdyAtcSAkVE1QX0RVTVBfRklMRSAkMjsgdGhlblxuLVx0XHRyZXR1cm4gMVxuLVx0ZWxzZVxuJiM0MztcdGxvY2FsIGZpbGU9JDEgcGF0dGVybj0kMlxuJiM0MztcdGlmICEgZ3JlcCAtcSBcJiMzNDskcGF0dGVyblwmIzM0OyBcJiMzNDskZmlsZVwmIzM0OzsgdGhlblxuIFx0XHRyZXR1cm4gMFxuIFx0ZmlcbiYjNDM7XHRrdGFwX3ByaW50X21zZyBcJiMzNDskZmlsZTogcGF0dGVybiAmIzM5OyRwYXR0ZXJuJiMzOTsgdW5leHBlY3RlZGx5IGZvdW5kXCYjMzQ7XG4mIzQzO1x0cmV0dXJuIDFcbiB9XG4gXG4tdmVyaWZ5X2RpZmZfdygpXG4mIzQzO2Fzc2VydF9kbWVzZ19jb3VudCgpICMgXHUwMDNjcGF0dGVyblx1MDAzZSBcdTAwM2N3YW50LWNvdW50XHUwMDNlXG4ge1xuLVx0ZWNobyBcJiMzNDskVEVTVF9TVFJcJiMzNDsgfCBkaWZmIC1xIC13IC11IC0gJDEgXHUwMDNlIC9kZXYvbnVsbFxuLVx0cmV0dXJuICQ/XG4mIzQzO1x0bG9jYWwgcGF0dGVybj0kMSB3YW50PSQyIGdvdFxuJiM0MztcdGdvdD0kKGRtZXNnIHwgZ3JlcCAtYyBcJiMzNDskcGF0dGVyblwmIzM0OylcbiYjNDM7XHRpZiBbIFwmIzM0OyRnb3RcJiMzNDsgLWVxIFwmIzM0OyR3YW50XCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRcdHJldHVybiAwXG4mIzQzO1x0ZmlcbiYjNDM7XHRrdGFwX3ByaW50X21zZyBcJiMzNDtkbWVzZzogcGF0dGVybiAmIzM5OyRwYXR0ZXJuJiMzOTsgc2VlbiAkZ290IHRpbWVzLCB3YW50ICR3YW50XCYjMzQ7XG4mIzQzO1x0cmV0dXJuIDFcbiB9XG4gXG4tIyBWZXJpZnkgdGhhdCBhbiBlcnJvbmVvdXMgKCQyKSB1cGRhdGUgZmFpbHMgYW5kIGRvZXMgbm90IGNoYW5nZSBUQVJHRVRcbi12ZXJpZnlfbm9fcGFydGlhbF91cGRhdGUoKVxuJiM0MzsjIHdyaXRlIFx1MDAzY3N0clx1MDAzZSB0aHJvdWdoIGRkIGluIFx1MDAzY2JzXHUwMDNlLXNpemVkIGNodW5rc1xuJiM0Mzt3cml0ZV9pbl9jaHVua3MoKSAgIyBcdTAwM2NmaWxlXHUwMDNlIFx1MDAzY3N0clx1MDAzZSBcdTAwM2Nic1x1MDAzZVxuIHtcbi1cdFRFU1RfU1RSPVwmIzM0OyQxXCYjMzQ7XG4tXHRlY2hvIC1uIFwmIzM0OyRURVNUX1NUUlwmIzM0OyBcdTAwM2UgXCYjMzQ7JFRBUkdFVFwmIzM0O1xuLVxuLVx0aWYgZWNobyAtbiBcJiMzNDskMlwmIzM0OyBcdTAwM2UgXCYjMzQ7JFRBUkdFVFwmIzM0OyAyXHUwMDNlIC9kZXYvbnVsbDsgdGhlblxuLVx0XHRyZXR1cm4gMVxuLVx0Zmlcbi1cdHZlcmlmeV9kaWZmX3cgXCYjMzQ7JHtUQVJHRVR9XCYjMzQ7XG4mIzQzO1x0bG9jYWwgZmlsZT0kMSBzdHI9JDIgYnM9JDNcbiYjNDM7XHRwcmludGYgJiMzOTslcyYjMzk7IFwmIzM0OyRzdHJcJiMzNDsgfCBkZCBvZj1cJiMzNDskZmlsZVwmIzM0OyBicz1cJiMzNDskYnNcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuIH1cbiBcbi10ZXN0X3JjKClcbiYjNDM7IyB3cml0ZSBcdTAwM2NzdHJcdTAwM2UgdGhyb3VnaCBkZCBpbiBcdTAwM2Nic1x1MDAzZS1zaXplZCBjaHVua3MuIHNlZWtpbmcgXHUwMDNjc2Vla1x1MDAzZSBibG9ja3Mgb2Ygc2l6ZVxuJiM0MzsjIFx1MDAzY2JzXHUwMDNlIGludG8gdGhlIG91dHB1dC4gc2tpcHBpbmcgXHUwMDNjc2tpcFx1MDAzZSBibG9ja3Mgb2Ygc2l6ZSBcdTAwM2Nic1x1MDAzZSBmcm9tIHRoZSBpbnB1dC5cbiYjNDM7IyBVbnN5bmNyaG9uaXplZCB3aGVuIHNraXAgaXMgbm90IHBhc3NlZC5cbiYjNDM7d3JpdGVfYXRfb2Zmc2V0KCkgICMgXHUwMDNjZmlsZVx1MDAzZSBcdTAwM2NzdHJcdTAwM2UgXHUwMDNjYnNcdTAwM2UgXHUwMDNjc2Vla1x1MDAzZSBbc2tpcF1cbiB7XG4tXHRpZiBbWyAkcmMgIT0gMCBdXTsgdGhlblxuLVx0XHRlY2hvIFwmIzM0O0ZhaWxlZCB0ZXN0LCByZXR1cm4gdmFsdWU6ICRyY1wmIzM0OyBcdTAwM2VcdTAwMjYyXG4tXHRcdGV4aXQgJHJjXG4mIzQzO1x0bG9jYWwgZmlsZT0kMSBzdHI9JDIgYnM9JDMgc2Vlaz0kNCBza2lwPSR7NTotfVxuJiM0MztcdGlmIFsgLW4gXCYjMzQ7JHNraXBcJiMzNDsgXTsgdGhlblxuJiM0MztcdFx0cHJpbnRmICYjMzk7JXMmIzM5OyBcJiMzNDskc3RyXCYjMzQ7IHwgZGQgb2Y9XCYjMzQ7JGZpbGVcJiMzNDsgYnM9XCYjMzQ7JGJzXCYjMzQ7IHNlZWs9XCYjMzQ7JHNlZWtcJiMzNDsgc2tpcD1cJiMzNDskc2tpcFwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cHJpbnRmICYjMzk7JXMmIzM5OyBcJiMzNDskc3RyXCYjMzQ7IHwgZGQgb2Y9XCYjMzQ7JGZpbGVcJiMzNDsgYnM9XCYjMzQ7JGJzXCYjMzQ7IHNlZWs9XCYjMzQ7JHNlZWtcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuIFx0ZmlcbiB9XG4gXG4tdGVzdF9maW5pc2goKVxuJiM0MzsjIHBhZCAocHJlZml4KSBcdTAwM2NzdHJcdTAwM2Ugd2l0aCBcdTAwM2NwYWRcdTAwM2UgJiMzOTtBJiMzOTsgY2hhcmFjdGVycywgdGhlbiB3cml0ZSBpdCBhbGwgdG8gXHUwMDNjZmlsZVx1MDAzZVxuJiM0MzsjIHdpdGggZGQgYmxvY2sgc2l6ZSBcdTAwM2Nic1x1MDAzZSAoZGVmYXVsdHMgdG8gXHUwMDNjcGFkXHUwMDNlKS5cbiYjNDM7d3JpdGVfb3ZlcmxvbmcoKSAgIyBcdTAwM2NmaWxlXHUwMDNlIFx1MDAzY3BhZFx1MDAzZSBcdTAwM2NzdHJcdTAwM2UgW2JzXVxuIHtcbi1cdHNldF9vcmlnXG4tXHRybSAtZiBcJiMzNDske1RFU1RfRklMRX1cJiMzNDtcbiYjNDM7XHRsb2NhbCBmaWxlPSQxIHBhZD0kMiBzdHI9JDMgYnM9JDQgcFxuJiM0MztcdDogXCYjMzQ7JHticzo9JHBhZH1cJiMzNDtcbiBcbi1cdGlmIFsgISAteiAke29sZF9zdHJpY3R9IF07IHRoZW5cbi1cdFx0ZWNobyAke29sZF9zdHJpY3R9IFx1MDAzZSAke1dSSVRFU19TVFJJQ1R9XG4tXHRmaVxuLVx0ZXhpdCAkcmNcbiYjNDM7XHQjIHNhdmUgYSBzdHJpbmcgd2l0aCAkcGFkIHNwYWNlcyBpbiAkcFxuJiM0MztcdHByaW50ZiAtdiBwICYjMzk7JSpzJiMzOTsgXCYjMzQ7JHBhZFwmIzM0OyAmIzM5OyYjMzk7XG4mIzQzO1x0IyByZXBsYWNlIFwmIzM0OyBcJiMzNDsgd2l0aCBcJiMzNDtBXCYjMzQ7XG4mIzQzO1x0cHJpbnRmICYjMzk7JXMlcyYjMzk7IFwmIzM0OyR7cC8vIC9BfVwmIzM0OyBcJiMzNDskc3RyXCYjMzQ7IHwgZGQgb2Y9XCYjMzQ7JGZpbGVcJiMzNDsgYnM9XCYjMzQ7JGJzXCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiB9XG4gXG4tcnVuX251bWVyaWN0ZXN0cygpXG4mIzQzOyMgcGFkIChwcmVmaXgpIFx1MDAzY3N0clx1MDAzZSB3aXRoIFx1MDAzY3BhZFx1MDAzZSBBU0NJSSBzcGFjZXMsIHRoZW4gd3JpdGUgd2l0aCBkZWZhdWx0IGJsb2NrIHNpemUuXG4mIzQzO3dyaXRlX3BhZGRlZF9kaWdpdHMoKSAgIyBcdTAwM2NmaWxlXHUwMDNlIFx1MDAzY3BhZFx1MDAzZSBcdTAwM2N2YWxcdTAwM2VcbiB7XG4tXHRlY2hvIFwmIzM0Oz09IFRlc3Rpbmcgc3lzY3RsIGJlaGF2aW9yIGFnYWluc3QgJHtUQVJHRVR9ID09XCYjMzQ7XG4mIzQzO1x0bG9jYWwgZmlsZT0kMSBwYWQ9JDIgdmFsPSQzIHBcbiYjNDM7XHRwcmludGYgLXYgcCAmIzM5OyUqcyYjMzk7IFwmIzM0OyRwYWRcJiMzNDsgJiMzOTsmIzM5O1xuJiM0MztcdHByaW50ZiAmIzM5OyVzJXMmIzM5OyBcJiMzNDskcFwmIzM0OyBcJiMzNDskdmFsXCYjMzQ7IHwgZGQgb2Y9XCYjMzQ7JGZpbGVcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuJiM0Mzt9XG4gXG4tXHRyYz0wXG4mIzQzO3Rlc3RfaW50X2FycmF5X3dyaXRlcygpXG4mIzQzO3tcbiYjNDM7XHRsb2NhbCB0PVwmIzM0OyR7U1lTQ1RMfS9pbnRfMDAwM1wmIzM0O1xuJiM0MztcdGxvY2FsIGxpbWl0XG4gXG4tXHRlY2hvIC1uIFwmIzM0O1dyaXRpbmcgdGVzdCBmaWxlIC4uLiBcJiMzNDtcbi1cdGVjaG8gXCYjMzQ7JHtURVNUX1NUUn1cJiMzNDsgXHUwMDNlIFwmIzM0OyR7VEVTVF9GSUxFfVwmIzM0O1xuLVx0aWYgISB2ZXJpZnkgXCYjMzQ7JHtURVNUX0ZJTEV9XCYjMzQ7OyB0aGVuXG4tXHRcdGVjaG8gXCYjMzQ7RkFJTFwmIzM0OyBcdTAwM2VcdTAwMjYyXG4tXHRcdGV4aXQgMVxuLVx0ZWxzZVxuLVx0XHRlY2hvIFwmIzM0O09LXCYjMzQ7XG4tXHRmaVxuJiM0MztcdFtbIC1mIFwmIzM0OyR0XCYjMzQ7IF1dIHx8IHsgUkVUPSRLU0ZUX1NLSVA7IHJldHVybjsgfVxuIFxuLVx0ZWNobyAtbiBcJiMzNDtDaGVja2luZyBzeXNjdGwgaXMgbm90IHNldCB0byB0ZXN0IHZhbHVlIC4uLiBcJiMzNDtcbi1cdGlmIHZlcmlmeSBcJiMzNDske1RBUkdFVH1cJiMzNDs7IHRoZW5cbi1cdFx0ZWNobyBcJiMzNDtGQUlMXCYjMzQ7IFx1MDAzZVx1MDAyNjJcbi1cdFx0ZXhpdCAxXG4tXHRlbHNlXG4tXHRcdGVjaG8gXCYjMzQ7T0tcJiMzNDtcbi1cdGZpXG4mIzQzO1x0cHJpbnRmICYjMzk7JXMmIzM5OyBcJiMzNDs0IDMgMiAxXCYjMzQ7IFx1MDAzZSBcJiMzNDskdFwmIzM0O1xuJiM0MztcdGFzc2VydF9jb250ZW50X2xvb3NlIFwmIzM0OyR0XCYjMzQ7IFwmIzM0OzQgMyAyIDFcJiMzNDsgfHwgUkVUPSRLU0ZUX0ZBSUxcbiBcbi1cdGVjaG8gLW4gXCYjMzQ7V3JpdGluZyBzeXNjdGwgZnJvbSBzaGVsbCAuLi4gXCYjMzQ7XG4tXHRzZXRfdGVzdFxuLVx0aWYgISB2ZXJpZnkgXCYjMzQ7JHtUQVJHRVR9XCYjMzQ7OyB0aGVuXG4tXHRcdGVjaG8gXCYjMzQ7RkFJTFwmIzM0OyBcdTAwM2VcdTAwMjYyXG4tXHRcdGV4aXQgMVxuLVx0ZWxzZVxuLVx0XHRlY2hvIFwmIzM0O09LXCYjMzQ7XG4tXHRmaVxuJiM0MztcdCMgU2tpcHBpbmcgdHJhaWxpbmcgZWxlbWVudHMgbGVhdmVzIHRoZW0gaW50YWN0XG4mIzQzO1x0cHJpbnRmICYjMzk7JXMmIzM5OyBcJiMzNDsxMDAgMTAxXCYjMzQ7IFx1MDAzZSBcJiMzNDskdFwmIzM0O1xuJiM0MztcdGFzc2VydF9jb250ZW50X2xvb3NlIFwmIzM0OyR0XCYjMzQ7IFwmIzM0OzEwMCAxMDEgMiAxXCYjMzQ7IHx8IFJFVD0kS1NGVF9GQUlMXG4gXG4tXHRlY2hvIC1uIFwmIzM0O1Jlc2V0dGluZyBzeXNjdGwgdG8gb3JpZ2luYWwgdmFsdWUgLi4uIFwmIzM0O1xuLVx0c2V0X29yaWdcbi1cdGlmIHZlcmlmeSBcJiMzNDske1RBUkdFVH1cJiMzNDs7IHRoZW5cbi1cdFx0ZWNobyBcJiMzNDtGQUlMXCYjMzQ7IFx1MDAzZVx1MDAyNjJcbi1cdFx0ZXhpdCAxXG4tXHRlbHNlXG4tXHRcdGVjaG8gXCYjMzQ7T0tcJiMzNDtcbi1cdGZpXG4mIzQzO1x0IyBFdmVuIGZvciBhbiBpbnQgYXJyYXksIGEgc2luZ2xlIHdyaXRlIGlzIHN0aWxsIGNhcHBlZCBhdCBNQVhfRElHSVRTXG4mIzQzO1x0IyAoUEFHRV9TSVpFLzgpIGJ5dGVzOyBjaGVjayByaWdodCBhdCwgYW5kIGp1c3QgcGFzdCwgdGhhdCBib3VuZGFyeS5cbiYjNDM7XHQjIENhcnJpZXMgb24gdGhlIHN0YXRlIGZyb20gdGhlIHdyaXRlcyBhYm92ZS5cbiYjNDM7XHRsaW1pdD0kKChNQVhfRElHSVRTIC0gMSkpXG4mIzQzO1x0d3JpdGVfcGFkZGVkX2RpZ2l0cyBcJiMzNDskdFwmIzM0OyBcJiMzNDskbGltaXRcJiMzNDsgXCYjMzQ7OVwmIzM0O1xuJiM0MztcdGFzc2VydF9jb250ZW50X2xvb3NlIFwmIzM0OyR0XCYjMzQ7IFwmIzM0OzkgMTAxIDIgMVwmIzM0OyB8fCBSRVQ9JEtTRlRfRkFJTFxuIFxuLVx0IyBOb3cgdGhhdCB3ZSYjMzk7dmUgdmFsaWRhdGVkIHRoZSBzYW5pdHkgb2YgXCYjMzQ7c2V0X3Rlc3RcJiMzNDsgYW5kIFwmIzM0O3NldF9vcmlnXCYjMzQ7LFxuLVx0IyB3ZSBjYW4gdXNlIHRob3NlIGZ1bmN0aW9ucyB0byBzZXQgc3RhcnRpbmcgc3RhdGVzIGJlZm9yZSBydW5uaW5nXG4tXHQjIHNwZWNpZmljIGJlaGF2aW9yYWwgdGVzdHMuXG4mIzQzO1x0bGltaXQ9JCgoTUFYX0RJR0lUUykpXG4mIzQzO1x0d3JpdGVfcGFkZGVkX2RpZ2l0cyBcJiMzNDskdFwmIzM0OyBcJiMzNDskbGltaXRcJiMzNDsgXCYjMzQ7N1wmIzM0O1xuJiM0MztcdGFzc2VydF9jb250ZW50X3JlamVjdGVkIFwmIzM0OyR0XCYjMzQ7IFwmIzM0OzcgMTAxIDIgMVwmIzM0OyB8fCBSRVQ9JEtTRlRfRkFJTFxuJiM0Mzt9XG4gXG4tXHRlY2hvIC1uIFwmIzM0O1dyaXRpbmcgZW50aXJlIHN5c2N0bCBpbiBzaW5nbGUgd3JpdGUgLi4uIFwmIzM0O1xuLVx0c2V0X29yaWdcbi1cdGRkIGlmPVwmIzM0OyR7VEVTVF9GSUxFfVwmIzM0OyBvZj1cJiMzNDske1RBUkdFVH1cJiMzNDsgYnM9NDA5NiAyXHUwMDNlL2Rldi9udWxsXG4tXHRpZiAhIHZlcmlmeSBcJiMzNDske1RBUkdFVH1cJiMzNDs7IHRoZW5cbi1cdFx0ZWNobyBcJiMzNDtGQUlMXCYjMzQ7IFx1MDAzZVx1MDAyNjJcbi1cdFx0cmM9MVxuLVx0ZWxzZVxuLVx0XHRlY2hvIFwmIzM0O09LXCYjMzQ7XG4tXHRmaVxuJiM0Mzt0ZXN0X2ludF9hcnJheV9ub19wYXJ0aWFsX3VwZGF0ZSgpXG4mIzQzO3tcbiYjNDM7XHRsb2NhbCB0PVwmIzM0OyR7U1lTQ1RMfS9pbnRfMDAwM1wmIzM0O1xuIFxuLVx0ZWNobyAtbiBcJiMzNDtXcml0aW5nIG1pZGRsZSBvZiBzeXNjdGwgYWZ0ZXIgc3luY2hyb25pemVkIHNlZWsgLi4uIFwmIzM0O1xuLVx0c2V0X3Rlc3Rcbi1cdGRkIGlmPVwmIzM0OyR7VEVTVF9GSUxFfVwmIzM0OyBvZj1cJiMzNDske1RBUkdFVH1cJiMzNDsgYnM9MSBzZWVrPTEgc2tpcD0xIDJcdTAwM2UvZGV2L251bGxcbi1cdGlmICEgdmVyaWZ5IFwmIzM0OyR7VEFSR0VUfVwmIzM0OzsgdGhlblxuLVx0XHRlY2hvIFwmIzM0O0ZBSUxcJiMzNDsgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRlbHNlXG4tXHRcdGVjaG8gXCYjMzQ7T0tcJiMzNDtcbi1cdGZpXG4mIzQzO1x0W1sgLWYgXCYjMzQ7JHRcJiMzNDsgXV0gfHwgeyBSRVQ9JEtTRlRfU0tJUDsgcmV0dXJuOyB9XG4gXG4tXHRlY2hvIC1uIFwmIzM0O1dyaXRpbmcgYmV5b25kIGVuZCBvZiBzeXNjdGwgLi4uIFwmIzM0O1xuLVx0c2V0X29yaWdcbi1cdGRkIGlmPVwmIzM0OyR7VEVTVF9GSUxFfVwmIzM0OyBvZj1cJiMzNDske1RBUkdFVH1cJiMzNDsgYnM9MjAgc2Vlaz0yIDJcdTAwM2UvZGV2L251bGxcbi1cdGlmIHZlcmlmeSBcJiMzNDske1RBUkdFVH1cJiMzNDs7IHRoZW5cbi1cdFx0ZWNobyBcJiMzNDtGQUlMXCYjMzQ7IFx1MDAzZVx1MDAyNjJcbi1cdFx0cmM9MVxuLVx0ZWxzZVxuLVx0XHRlY2hvIFwmIzM0O09LXCYjMzQ7XG4tXHRmaVxuJiM0MztcdCMgYmFkIDNyZCBlbGVtZW50IChub3QgYSBudW1iZXIpXG4mIzQzO1x0YXNzZXJ0X25vX3BhcnRpYWxfdXBkYXRlIFwmIzM0OyR0XCYjMzQ7IFwmIzM0OzEgMiAzIDRcJiMzNDsgXCYjMzQ7MTAgMjAgYWJjIDQwXCYjMzQ7IHx8IFJFVD0kS1NGVF9GQUlMXG4gXG4tXHRlY2hvIC1uIFwmIzM0O1dyaXRpbmcgc3lzY3RsIHdpdGggbXVsdGlwbGUgbG9uZyB3cml0ZXMgLi4uIFwmIzM0O1xuLVx0c2V0X29yaWdcbi1cdChwZXJsIC1lICYjMzk7cHJpbnQgXCYjMzQ7QVwmIzM0OyB4IDUwOyYjMzk7OyBlY2hvIFwmIzM0OyR7VEVTVF9TVFJ9XCYjMzQ7KSB8IFxcXG4tXHRcdGRkIG9mPVwmIzM0OyR7VEFSR0VUfVwmIzM0OyBicz01MCAyXHUwMDNlL2Rldi9udWxsXG4tXHRpZiB2ZXJpZnkgXCYjMzQ7JHtUQVJHRVR9XCYjMzQ7OyB0aGVuXG4tXHRcdGVjaG8gXCYjMzQ7RkFJTFwmIzM0OyBcdTAwM2VcdTAwMjYyXG4tXHRcdHJjPTFcbi1cdGVsc2Vcbi1cdFx0ZWNobyBcJiMzNDtPS1wmIzM0O1xuLVx0Zmlcbi1cdHRlc3RfcmNcbiYjNDM7XHQjIGJhZCAzcmQgZWxlbWVudCAob3ZlcmZsb3dzIGludClcbiYjNDM7XHRhc3NlcnRfbm9fcGFydGlhbF91cGRhdGUgXCYjMzQ7JHRcJiMzNDsgXCYjMzQ7MSAyIDMgNFwmIzM0OyBcJiMzNDsxMCAyMCAkKChJTlRfTUFYICYjNDM7IDEpKSA0MFwmIzM0OyB8fCBSRVQ9JEtTRlRfRkFJTFxuJiM0MztcbiYjNDM7XHQjIGJhZCAxc3QgZWxlbWVudFxuJiM0MztcdGFzc2VydF9ub19wYXJ0aWFsX3VwZGF0ZSBcJiMzNDskdFwmIzM0OyBcJiMzNDsxIDIgMyA0XCYjMzQ7IFwmIzM0O2FiYyAyMCAzMCA0MFwmIzM0OyB8fCBSRVQ9JEtTRlRfRkFJTFxuIH1cbiBcbi1jaGVja19mYWlsdXJlKClcbiYjNDM7IyBFeGVyY2lzZSB0aGUgd3JpdGUgcGF0dGVybnNcbiYjNDM7YXNzZXJ0X3dyaXRlX3BhdHRlcm5zKCkgICMgXHUwMDNjZmlsZVx1MDAzZSBcdTAwM2NiYXNlbGluZVx1MDAzZSBcdTAwM2N2YWxcdTAwM2VcbiB7XG4tXHRlY2hvIC1uIFwmIzM0O1Rlc3RpbmcgdGhhdCAkMSBmYWlscyBhcyBleHBlY3RlZCAuLi4gXCYjMzQ7XG4tXHRyZXNldF92YWxzXG4tXHRURVNUX1NUUj1cJiMzNDskMVwmIzM0O1xuLVx0b3JpZz1cJiMzNDskKGNhdCAkVEFSR0VUKVwmIzM0O1xuLVx0ZWNobyAtbiBcJiMzNDskVEVTVF9TVFJcJiMzNDsgXHUwMDNlICRUQVJHRVQgMlx1MDAzZSAvZGV2L251bGxcbi1cbi1cdCMgd3JpdGUgc2hvdWxkIGZhaWwgYW5kICRUQVJHRVQgc2hvdWxkIHJldGFpbiBpdHMgb3JpZ2luYWwgdmFsdWVcbi1cdGlmIFsgJD8gPSAwIF0gfHwgWyBcJiMzNDskKGNhdCAkVEFSR0VUKVwmIzM0OyAhPSBcJiMzNDskb3JpZ1wmIzM0OyBdOyB0aGVuXG4tXHRcdGVjaG8gXCYjMzQ7RkFJTFwmIzM0OyBcdTAwM2VcdTAwMjYyXG4tXHRcdHJjPTFcbi1cdGVsc2Vcbi1cdFx0ZWNobyBcJiMzNDtPS1wmIzM0O1xuLVx0Zmlcbi1cdHRlc3RfcmNcbiYjNDM7XHRsb2NhbCBmaWxlPSQxIGJhc2VsaW5lPSQyIHZhbD0kMyBzdGF0dXM9MFxuJiM0MztcbiYjNDM7XHRwcmludGYgJiMzOTslcyYjMzk7IFwmIzM0OyR2YWxcJiMzNDsgXHUwMDNlIFwmIzM0OyRmaWxlXCYjMzQ7XG4mIzQzO1x0YXNzZXJ0X2NvbnRlbnQgXCYjMzQ7JGZpbGVcJiMzNDsgXCYjMzQ7JHZhbFwmIzM0OyB8fCBzdGF0dXM9MVxuJiM0MztcdHByaW50ZiAmIzM5OyVzJiMzOTsgXCYjMzQ7JGJhc2VsaW5lXCYjMzQ7IFx1MDAzZSBcJiMzNDskZmlsZVwmIzM0O1xuJiM0MztcdGFzc2VydF9jb250ZW50IFwmIzM0OyRmaWxlXCYjMzQ7IFwmIzM0OyRiYXNlbGluZVwmIzM0OyB8fCBzdGF0dXM9MVxuJiM0MztcbiYjNDM7XHRwcmludGYgJiMzOTslcyYjMzk7IFwmIzM0OyRiYXNlbGluZVwmIzM0OyBcdTAwM2UgXCYjMzQ7JGZpbGVcJiMzNDtcbiYjNDM7XHR3cml0ZV9pbl9jaHVua3MgXCYjMzQ7JGZpbGVcJiMzNDsgXCYjMzQ7JHZhbFwmIzM0OyA0MDk2XG4mIzQzO1x0YXNzZXJ0X2NvbnRlbnQgXCYjMzQ7JGZpbGVcJiMzNDsgXCYjMzQ7JHZhbFwmIzM0OyB8fCBzdGF0dXM9MVxuJiM0MztcbiYjNDM7XHRwcmludGYgJiMzOTslcyYjMzk7IFwmIzM0OyR2YWxcJiMzNDsgXHUwMDNlIFwmIzM0OyRmaWxlXCYjMzQ7XG4mIzQzO1x0d3JpdGVfYXRfb2Zmc2V0IFwmIzM0OyRmaWxlXCYjMzQ7IFwmIzM0OyR2YWxcJiMzNDsgMSAxIDFcbiYjNDM7XHRhc3NlcnRfY29udGVudCBcJiMzNDskZmlsZVwmIzM0OyBcJiMzNDskdmFsXCYjMzQ7IHx8IHN0YXR1cz0xXG4mIzQzO1xuJiM0MztcdHByaW50ZiAmIzM5OyVzJiMzOTsgXCYjMzQ7JGJhc2VsaW5lXCYjMzQ7IFx1MDAzZSBcJiMzNDskZmlsZVwmIzM0O1xuJiM0MztcdHdyaXRlX2F0X29mZnNldCBcJiMzNDskZmlsZVwmIzM0OyBcJiMzNDskdmFsXCYjMzQ7IDIwIDJcbiYjNDM7XHRhc3NlcnRfY29udGVudF9yZWplY3RlZCBcJiMzNDskZmlsZVwmIzM0OyBcJiMzNDskdmFsXCYjMzQ7IHx8IHN0YXR1cz0xXG4mIzQzO1xuJiM0MztcdHByaW50ZiAmIzM5OyVzJiMzOTsgXCYjMzQ7JGJhc2VsaW5lXCYjMzQ7IFx1MDAzZSBcJiMzNDskZmlsZVwmIzM0O1xuJiM0MztcdHdyaXRlX292ZXJsb25nIFwmIzM0OyRmaWxlXCYjMzQ7IDUwIFwmIzM0OyR2YWxcJiMzNDtcbiYjNDM7XHRhc3NlcnRfY29udGVudF9yZWplY3RlZCBcJiMzNDskZmlsZVwmIzM0OyBcJiMzNDskdmFsXCYjMzQ7IHx8IHN0YXR1cz0xXG4mIzQzO1xuJiM0MztcdHJldHVybiBcJiMzNDskc3RhdHVzXCYjMzQ7XG4gfVxuIFxuLXJ1bl93aWRlaW50X3Rlc3RzKClcbiYjNDM7IyBOb25lIG9mIHRoZXNlIGZpdCBpbiAzMiBiaXRzLCBzbyB3cml0aW5nIHRoZW0gdG8gYW4gaW50L3VpbnQgc3lzY3RsIG11c3QgZmFpbFxuJiM0Mzthc3NlcnRfd2lkZWludF93cml0ZXNfcmVqZWN0ZWQoKSAgIyBcdTAwM2NmaWxlXHUwMDNlIFx1MDAzY2Jhc2VsaW5lXHUwMDNlXG4ge1xuLVx0IyBzeXNjdGwgY29udmVyc2lvbiBmdW5jdGlvbnMgcmVjZWl2ZSBhIGJvb2xlYW4gc2lnbiBhbmQgdWxvbmdcbi1cdCMgbWFnbml0dWRlOyBoZXJlIHdlIGxpc3QgdGhlIG1hZ25pdHVkZXMgd2Ugd2FudCB0byB0ZXN0IChlYWNoIG9mXG4tXHQjIHdoaWNoIHdpbGwgYmUgdGVzdGVkIGluIGJvdGggcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIGZvcm1zKS4gIFNpbmNlXG4tXHQjIG5vbmUgb2YgdGhlc2UgdmFsdWVzIGZpdCBpbiAzMiBiaXRzLCB3cml0aW5nIHRoZW0gdG8gYW4gaW50LSBvclxuLVx0IyB1aW50LXR5cGVkIHN5c2N0bCBzaG91bGQgZmFpbC5cbiYjNDM7XHRsb2NhbCBmaWxlPSQxIGJhc2VsaW5lPSQyIHNpZ24gbWFnIHN0YXR1cz0wXG4gXHRsb2NhbCBtYWduaXR1ZGVzPShcbi1cdFx0IyBjb21tb24gYm91bmRhcnktY29uZGl0aW9uIHZhbHVlcyAoemVybywgJiM0MzsxLCAtMSwgSU5UX01JTixcbi1cdFx0IyBhbmQgSU5UX01BWCByZXNwZWN0aXZlbHkpIGlmIHRydW5jYXRlZCB0byBsb3dlciAzMiBiaXRzXG4tXHRcdCMgKHBvdGVudGlhbCBmb3IgYmVpbmcgZmFsc2VseSBkZWVtZWQgaW4gcmFuZ2UpXG4gXHRcdDB4MDAwMDAwMDEwMDAwMDAwMFxuIFx0XHQweDAwMDAwMDAxMDAwMDAwMDFcbiBcdFx0MHgwMDAwMDAwMWZmZmZmZmZmXG4gXHRcdDB4MDAwMDAwMDE4MDAwMDAwMFxuIFx0XHQweDAwMDAwMDAxN2ZmZmZmZmZcbi1cbi1cdFx0IyB0aGVzZSBsb29rIGxpa2UgbmVnYXRpdmVzLCBidXQgd2l0aG91dCBhIGxlYWRpbmcgJiMzOTstJiMzOTsgYXJlXG4tXHRcdCMgYWN0dWFsbHkgbGFyZ2UgcG9zaXRpdmVzIChzaG91bGQgYmUgcmVqZWN0ZWQgYXMgYWJvdmVcbi1cdFx0IyBkZXNwaXRlIGJlaW5nIHplcm8vJiM0MzsxLy0xL0lOVF9NSU4vSU5UX01BWCBpbiB0aGUgbG93ZXIgMzIpXG4gXHRcdDB4ZmZmZmZmZmYwMDAwMDAwMFxuIFx0XHQweGZmZmZmZmZmMDAwMDAwMDFcbiBcdFx0MHhmZmZmZmZmZmZmZmZmZmZmXG5AQCAtMzY3LDc5MyAmIzQzOzI0NCw1MTUgQEAgcnVuX3dpZGVpbnRfdGVzdHMoKVxuIFxuIFx0Zm9yIHNpZ24gaW4gJiMzOTsmIzM5OyAmIzM5Oy0mIzM5OzsgZG9cbiBcdFx0Zm9yIG1hZyBpbiBcJiMzNDske21hZ25pdHVkZXNbQF19XCYjMzQ7OyBkb1xuLVx0XHRcdGNoZWNrX2ZhaWx1cmUgXCYjMzQ7JHtzaWdufSR7bWFnfVwmIzM0O1xuJiM0MztcdFx0XHRhc3NlcnRfbm9fcGFydGlhbF91cGRhdGUgXCYjMzQ7JGZpbGVcJiMzNDsgXCYjMzQ7JGJhc2VsaW5lXCYjMzQ7IFwmIzM0OyR7c2lnbn0ke21hZ31cJiMzNDsgfHwgc3RhdHVzPTFcbiBcdFx0ZG9uZVxuIFx0ZG9uZVxuJiM0MztcdHJldHVybiBcJiMzNDskc3RhdHVzXCYjMzQ7XG4gfVxuIFxuLSMgWW91ciB0ZXN0IG11c3QgYWNjZXB0IGRpZ2l0cyAzIGFuZCA0IHRvIHVzZSB0aGlzXG4tcnVuX2xpbWl0X2RpZ2l0KClcbiYjNDM7IyBBIHNpbmdsZSB3cml0ZSBpcyBjYXBwZWQgYXQgTUFYX0RJR0lUUyAoUEFHRV9TSVpFLzgpIGJ5dGVzOyBjaGVjayB0aGF0XG4mIzQzOyMgbGVhZGluZyB3aGl0ZXNwYWNlIHVwIHRvIHRoYXQgbGltaXQgaXMgaWdub3JlZCwgYW5kIHRoYXQgUEFHRV9TSVpFIG9mXG4mIzQzOyMgbGVhZGluZyB3aGl0ZXNwYWNlIHB1c2hlcyB0aGUgdmFsdWUgcGFzdCB0aGUgbGltaXQgYW5kIGZhaWxzLlxuJiM0Mzthc3NlcnRfZGlnaXRfbGltaXQoKSAgIyBcdTAwM2NmaWxlXHUwMDNlIFx1MDAzY2Jhc2VsaW5lXHUwMDNlXG4ge1xuLVx0ZWNobyAtbiBcJiMzNDtDaGVja2luZyBpZ25vcmluZyBzcGFjZXMgdXAgdG8gUEFHRV9TSVpFIHdvcmtzIG9uIHdyaXRlIC4uLiBcJiMzNDtcbi1cdHJlc2V0X3ZhbHNcbi1cbi1cdExJTUlUPSQoKE1BWF9ESUdJVFMgLTEpKVxuLVx0VEVTVF9TVFI9XCYjMzQ7M1wmIzM0O1xuLVx0KHBlcmwgLWUgJiMzOTtwcmludCBcJiMzNDsgXCYjMzQ7IHggJiMzOTskTElNSVQmIzM5OzsmIzM5OzsgZWNobyBcJiMzNDske1RFU1RfU1RSfVwmIzM0OykgfCBcXFxuLVx0XHRkZCBvZj1cJiMzNDske1RBUkdFVH1cJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuLVxuLVx0aWYgISB2ZXJpZnkgXCYjMzQ7JHtUQVJHRVR9XCYjMzQ7OyB0aGVuXG4tXHRcdGVjaG8gXCYjMzQ7RkFJTFwmIzM0OyBcdTAwM2VcdTAwMjYyXG4tXHRcdHJjPTFcbi1cdGVsc2Vcbi1cdFx0ZWNobyBcJiMzNDtPS1wmIzM0O1xuLVx0Zmlcbi1cdHRlc3RfcmNcbiYjNDM7XHRsb2NhbCBmaWxlPSQxIGJhc2VsaW5lPSQyIHN0YXR1cz0wXG4gXG4tXHRlY2hvIC1uIFwmIzM0O0NoZWNraW5nIHBhc3NpbmcgUEFHRV9TSVpFIG9mIHNwYWNlcyBmYWlscyBvbiB3cml0ZSAuLi4gXCYjMzQ7XG4tXHRyZXNldF92YWxzXG4mIzQzO1x0cHJpbnRmICYjMzk7JXMmIzM5OyBcJiMzNDskYmFzZWxpbmVcJiMzNDsgXHUwMDNlIFwmIzM0OyRmaWxlXCYjMzQ7XG4mIzQzO1x0d3JpdGVfcGFkZGVkX2RpZ2l0cyBcJiMzNDskZmlsZVwmIzM0OyBcJiMzNDskKChNQVhfRElHSVRTIC0gMSkpXCYjMzQ7IFwmIzM0OzNcJiMzNDtcbiYjNDM7XHRhc3NlcnRfY29udGVudCBcJiMzNDskZmlsZVwmIzM0OyBcJiMzNDszXCYjMzQ7IHx8IHN0YXR1cz0xXG4gXG4tXHRMSU1JVD0kKChNQVhfRElHSVRTKSlcbi1cdFRFU1RfU1RSPVwmIzM0OzRcJiMzNDtcbi1cdChwZXJsIC1lICYjMzk7cHJpbnQgXCYjMzQ7IFwmIzM0OyB4ICYjMzk7JExJTUlUJiMzOTs7JiMzOTs7IGVjaG8gXCYjMzQ7JHtURVNUX1NUUn1cJiMzNDspIHwgXFxcbi1cdFx0ZGQgb2Y9XCYjMzQ7JHtUQVJHRVR9XCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7XHRwcmludGYgJiMzOTslcyYjMzk7IFwmIzM0OyRiYXNlbGluZVwmIzM0OyBcdTAwM2UgXCYjMzQ7JGZpbGVcJiMzNDtcbiYjNDM7XHR3cml0ZV9wYWRkZWRfZGlnaXRzIFwmIzM0OyRmaWxlXCYjMzQ7IFwmIzM0OyRNQVhfRElHSVRTXCYjMzQ7IFwmIzM0OzRcJiMzNDtcbiYjNDM7XHRhc3NlcnRfY29udGVudF9yZWplY3RlZCBcJiMzNDskZmlsZVwmIzM0OyBcJiMzNDs0XCYjMzQ7IHx8IHN0YXR1cz0xXG4gXG4tXHRpZiB2ZXJpZnkgXCYjMzQ7JHtUQVJHRVR9XCYjMzQ7OyB0aGVuXG4tXHRcdGVjaG8gXCYjMzQ7RkFJTFwmIzM0OyBcdTAwM2VcdTAwMjYyXG4tXHRcdHJjPTFcbi1cdGVsc2Vcbi1cdFx0ZWNobyBcJiMzNDtPS1wmIzM0O1xuLVx0Zmlcbi1cdHRlc3RfcmNcbiYjNDM7XHRyZXR1cm4gXCYjMzQ7JHN0YXR1c1wmIzM0O1xuIH1cbiBcbi0jIFlvdSBhcmUgdXNpbmcgYW4gaW50XG4tcnVuX2xpbWl0X2RpZ2l0X2ludCgpXG4mIzQzOyMgcHJvY19kb2ludHZlYygpLXNwZWNpZmljIHJhbmdlIGNoZWNrczogSU5UX01BWCBtdXN0IGJlIGFjY2VwdGVkLCBJTlRfTUFYJiM0MzsxXG4mIzQzOyMgbXVzdCBiZSByZWplY3RlZCwgYW5kIG5lZ2F0aXZlIHZhbHVlcyBtdXN0IGJlIGFjY2VwdGVkLlxuJiM0Mzthc3NlcnRfaW50X3JhbmdlKCkgICMgXHUwMDNjZmlsZVx1MDAzZSBcdTAwM2NiYXNlbGluZVx1MDAzZVxuIHtcbi1cdGVjaG8gLW4gXCYjMzQ7VGVzdGluZyBJTlRfTUFYIHdvcmtzIC4uLiBcJiMzNDtcbi1cdHJlc2V0X3ZhbHNcbi1cdFRFU1RfU1RSPVwmIzM0OyRJTlRfTUFYXCYjMzQ7XG4tXHRlY2hvIC1uICRURVNUX1NUUiBcdTAwM2UgJFRBUkdFVFxuLVxuLVx0aWYgISB2ZXJpZnkgXCYjMzQ7JHtUQVJHRVR9XCYjMzQ7OyB0aGVuXG4tXHRcdGVjaG8gXCYjMzQ7RkFJTFwmIzM0OyBcdTAwM2VcdTAwMjYyXG4tXHRcdHJjPTFcbi1cdGVsc2Vcbi1cdFx0ZWNobyBcJiMzNDtPS1wmIzM0O1xuLVx0Zmlcbi1cdHRlc3RfcmNcbiYjNDM7XHRsb2NhbCBmaWxlPSQxIGJhc2VsaW5lPSQyIHN0YXR1cz0wXG4gXG4tXHRlY2hvIC1uIFwmIzM0O1Rlc3RpbmcgSU5UX01BWCAmIzQzOyAxIHdpbGwgZmFpbCBhcyBleHBlY3RlZCAuLi4gXCYjMzQ7XG4tXHRyZXNldF92YWxzXG4tXHRsZXQgVEVTVF9TVFI9JElOVF9NQVgmIzQzOzFcbi1cdGVjaG8gLW4gJFRFU1RfU1RSIFx1MDAzZSAkVEFSR0VUIDJcdTAwM2UgL2Rldi9udWxsXG4mIzQzO1x0cHJpbnRmICYjMzk7JXMmIzM5OyBcJiMzNDskYmFzZWxpbmVcJiMzNDsgXHUwMDNlIFwmIzM0OyRmaWxlXCYjMzQ7XG4mIzQzO1x0cHJpbnRmICYjMzk7JXMmIzM5OyBcJiMzNDskSU5UX01BWFwmIzM0OyBcdTAwM2UgXCYjMzQ7JGZpbGVcJiMzNDtcbiYjNDM7XHRhc3NlcnRfY29udGVudCBcJiMzNDskZmlsZVwmIzM0OyBcJiMzNDskSU5UX01BWFwmIzM0OyB8fCBzdGF0dXM9MVxuIFxuLVx0aWYgdmVyaWZ5IFwmIzM0OyR7VEFSR0VUfVwmIzM0OzsgdGhlblxuLVx0XHRlY2hvIFwmIzM0O0ZBSUxcJiMzNDsgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRlbHNlXG4tXHRcdGVjaG8gXCYjMzQ7T0tcJiMzNDtcbi1cdGZpXG4tXHR0ZXN0X3JjXG4tXG4tXHRlY2hvIC1uIFwmIzM0O1Rlc3RpbmcgbmVnYXRpdmUgdmFsdWVzIHdpbGwgd29yayBhcyBleHBlY3RlZCAuLi4gXCYjMzQ7XG4tXHRyZXNldF92YWxzXG4tXHRURVNUX1NUUj1cJiMzNDstM1wmIzM0O1xuLVx0ZWNobyAtbiAkVEVTVF9TVFIgXHUwMDNlICRUQVJHRVQgMlx1MDAzZSAvZGV2L251bGxcbi1cdGlmICEgdmVyaWZ5IFwmIzM0OyR7VEFSR0VUfVwmIzM0OzsgdGhlblxuLVx0XHRlY2hvIFwmIzM0O0ZBSUxcJiMzNDsgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRlbHNlXG4tXHRcdGVjaG8gXCYjMzQ7T0tcJiMzNDtcbi1cdGZpXG4tXHR0ZXN0X3JjXG4tfVxuJiM0MztcdGFzc2VydF9ub19wYXJ0aWFsX3VwZGF0ZSBcJiMzNDskZmlsZVwmIzM0OyBcJiMzNDskYmFzZWxpbmVcJiMzNDsgXCYjMzQ7JCgoSU5UX01BWCAmIzQzOyAxKSlcJiMzNDsgfHwgc3RhdHVzPTFcbiBcbi0jIFlvdSB1c2VkIGFuIGludCBhcnJheVxuLXJ1bl9saW1pdF9kaWdpdF9pbnRfYXJyYXkoKVxuLXtcbi1cdGVjaG8gLW4gXCYjMzQ7VGVzdGluZyBhcnJheSB3b3JrcyBhcyBleHBlY3RlZCAuLi4gXCYjMzQ7XG4tXHRURVNUX1NUUj1cJiMzNDs0IDMgMiAxXCYjMzQ7XG4tXHRlY2hvIC1uICRURVNUX1NUUiBcdTAwM2UgJFRBUkdFVFxuJiM0MztcdHByaW50ZiAmIzM5OyVzJiMzOTsgXCYjMzQ7JGJhc2VsaW5lXCYjMzQ7IFx1MDAzZSBcJiMzNDskZmlsZVwmIzM0O1xuJiM0MztcdHByaW50ZiAmIzM5OyVzJiMzOTsgXCYjMzQ7LTNcJiMzNDsgXHUwMDNlIFwmIzM0OyRmaWxlXCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7XHRhc3NlcnRfY29udGVudCBcJiMzNDskZmlsZVwmIzM0OyBcJiMzNDstM1wmIzM0OyB8fCBzdGF0dXM9MVxuIFxuLVx0aWYgISB2ZXJpZnlfZGlmZl93IFwmIzM0OyR7VEFSR0VUfVwmIzM0OzsgdGhlblxuLVx0XHRlY2hvIFwmIzM0O0ZBSUxcJiMzNDsgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRlbHNlXG4tXHRcdGVjaG8gXCYjMzQ7T0tcJiMzNDtcbi1cdGZpXG4tXHR0ZXN0X3JjXG4tXG4tXHRlY2hvIC1uIFwmIzM0O1Rlc3Rpbmcgc2tpcHBpbmcgdHJhaWxpbmcgYXJyYXkgZWxlbWVudHMgd29ya3MgLi4uIFwmIzM0O1xuLVx0IyBEbyBub3QgcmVzZXRfdmFscywgY2Fycnkgb24gdGhlIHZhbHVlcyBmcm9tIHRoZSBsYXN0IHRlc3QuXG4tXHQjIElmIHdlIG9ubHkgZWNobyBpbiB0d28gZGlnaXRzIHRoZSBsYXN0IHR3byBhcmUgbGVmdCBpbnRhY3Rcbi1cdFRFU1RfU1RSPVwmIzM0OzEwMCAxMDFcJiMzNDtcbi1cdGVjaG8gLW4gJFRFU1RfU1RSIFx1MDAzZSAkVEFSR0VUXG4tXHQjIEFmdGVyIHdlIGVjaG8gaW4sIHRvIGhlbHAgZGlmZiB3ZSBuZWVkIHRvIHNldCBvbiBURVNUX1NUUiB3aGF0XG4tXHQjIHdlIGV4cGVjdCB0aGUgcmVzdWx0IHRvIGJlLlxuLVx0VEVTVF9TVFI9XCYjMzQ7MTAwIDEwMSAyIDFcJiMzNDtcbi1cbi1cdGlmICEgdmVyaWZ5X2RpZmZfdyBcJiMzNDske1RBUkdFVH1cJiMzNDs7IHRoZW5cbi1cdFx0ZWNobyBcJiMzNDtGQUlMXCYjMzQ7IFx1MDAzZVx1MDAyNjJcbi1cdFx0cmM9MVxuLVx0ZWxzZVxuLVx0XHRlY2hvIFwmIzM0O09LXCYjMzQ7XG4tXHRmaVxuLVx0dGVzdF9yY1xuLVxuLVx0ZWNobyAtbiBcJiMzNDtUZXN0aW5nIFBBR0VfU0laRSBsaW1pdCBvbiBhcnJheSB3b3JrcyAuLi4gXCYjMzQ7XG4tXHQjIERvIG5vdCByZXNldF92YWxzLCBjYXJyeSBvbiB0aGUgdmFsdWVzIGZyb20gdGhlIGxhc3QgdGVzdC5cbi1cdCMgRXZlbiBpZiB5b3UgdXNlIGFuIGludCBhcnJheSwgeW91IGFyZSBzdGlsbCByZXN0cmljdGVkIHRvXG4tXHQjIE1BWF9ESUdJVFMsIHRoaXMgaXMgYSBrbm93biBsaW1pdGF0aW9uLiBUZXN0IGxpbWl0IHdvcmtzLlxuLVx0TElNSVQ9JCgoTUFYX0RJR0lUUyAtMSkpXG4tXHRURVNUX1NUUj1cJiMzNDs5XCYjMzQ7XG4tXHQocGVybCAtZSAmIzM5O3ByaW50IFwmIzM0OyBcJiMzNDsgeCAmIzM5OyRMSU1JVCYjMzk7OyYjMzk7OyBlY2hvIFwmIzM0OyR7VEVTVF9TVFJ9XCYjMzQ7KSB8IFxcXG4tXHRcdGRkIG9mPVwmIzM0OyR7VEFSR0VUfVwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4tXG4tXHRURVNUX1NUUj1cJiMzNDs5IDEwMSAyIDFcJiMzNDtcbi1cdGlmICEgdmVyaWZ5X2RpZmZfdyBcJiMzNDske1RBUkdFVH1cJiMzNDs7IHRoZW5cbi1cdFx0ZWNobyBcJiMzNDtGQUlMXCYjMzQ7IFx1MDAzZVx1MDAyNjJcbi1cdFx0cmM9MVxuLVx0ZWxzZVxuLVx0XHRlY2hvIFwmIzM0O09LXCYjMzQ7XG4tXHRmaVxuLVx0dGVzdF9yY1xuLVxuLVx0ZWNobyAtbiBcJiMzNDtUZXN0aW5nIGV4Y2VlZGluZyBQQUdFX1NJWkUgbGltaXQgZmFpbHMgYXMgZXhwZWN0ZWQgLi4uIFwmIzM0O1xuLVx0IyBEbyBub3QgcmVzZXRfdmFscywgY2Fycnkgb24gdGhlIHZhbHVlcyBmcm9tIHRoZSBsYXN0IHRlc3QuXG4tXHQjIE5vdyBnbyBvdmVyIGxpbWl0LlxuLVx0TElNSVQ9JCgoTUFYX0RJR0lUUykpXG4tXHRURVNUX1NUUj1cJiMzNDs3XCYjMzQ7XG4tXHQocGVybCAtZSAmIzM5O3ByaW50IFwmIzM0OyBcJiMzNDsgeCAmIzM5OyRMSU1JVCYjMzk7OyYjMzk7OyBlY2hvIFwmIzM0OyR7VEVTVF9TVFJ9XCYjMzQ7KSB8IFxcXG4tXHRcdGRkIG9mPVwmIzM0OyR7VEFSR0VUfVwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4tXG4tXHRURVNUX1NUUj1cJiMzNDs3IDEwMSAyIDFcJiMzNDtcbi1cdGlmIHZlcmlmeV9kaWZmX3cgXCYjMzQ7JHtUQVJHRVR9XCYjMzQ7OyB0aGVuXG4tXHRcdGVjaG8gXCYjMzQ7RkFJTFwmIzM0OyBcdTAwM2VcdTAwMjYyXG4tXHRcdHJjPTFcbi1cdGVsc2Vcbi1cdFx0ZWNobyBcJiMzNDtPS1wmIzM0O1xuLVx0Zmlcbi1cdHRlc3RfcmNcbiYjNDM7XHRyZXR1cm4gXCYjMzQ7JHN0YXR1c1wmIzM0O1xuIH1cbiBcbi0jIFlvdSB1c2VkIGFuIGludCBhcnJheSBhbmQgb25lIG9mIHRoZSBlbGVtZW50cyBpcyBub3QgYWNjZXB0YWJsZVxuLXJ1bl9pbnRfYXJyYXlfbm9fcGFydGlhbF91cGRhdGUoKVxuJiM0MzsjIHByb2NfZG91aW50dmVjKCktc3BlY2lmaWMgcmFuZ2UgY2hlY2tzOiBVSU5UX01BWCBtdXN0IGJlIGFjY2VwdGVkLFxuJiM0MzsjIFVJTlRfTUFYJiM0MzsxIG11c3QgYmUgcmVqZWN0ZWQsIGFuZCBuZWdhdGl2ZSB2YWx1ZXMgbXVzdCBiZSByZWplY3RlZCB0b28uXG4mIzQzO2Fzc2VydF91aW50X3JhbmdlKCkgICMgXHUwMDNjZmlsZVx1MDAzZSBcdTAwM2NiYXNlbGluZVx1MDAzZVxuIHtcbi1cdGVjaG8gLW4gXCYjMzQ7VGVzdGluZyBpbnZhbGlkIGFycmF5IGVsZW1lbnQgZG9lcyBub3QgcGFydGlhbGx5IHVwZGF0ZSAuLi4gXCYjMzQ7XG4tXHQjIEV4cGVjdCBmYWlsdXJlIGJlY2F1c2Ugb2YgM3JkIGVsZW1lbnQgKGFiYykuXG4tXHRpZiAhIHZlcmlmeV9ub19wYXJ0aWFsX3VwZGF0ZSBcJiMzNDsxIDIgMyA0XCYjMzQ7IFwmIzM0OzEwIDIwIGFiYyA0MFwmIzM0OzsgdGhlblxuLVx0XHRlY2hvIFwmIzM0O0ZBSUxcJiMzNDsgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRlbHNlXG4tXHRcdGVjaG8gXCYjMzQ7T0tcJiMzNDtcbi1cdGZpXG4tXHR0ZXN0X3JjXG4mIzQzO1x0bG9jYWwgZmlsZT0kMSBiYXNlbGluZT0kMiBzdGF0dXM9MFxuIFxuLVx0ZWNobyAtbiBcJiMzNDtUZXN0aW5nIG91dCBvZiByYW5nZSBhcnJheSBlbGVtZW50IGRvZXMgbm90IHBhcnRpYWxseSB1cGRhdGUgLi4uIFwmIzM0O1xuLVx0IyBFeHBlY3QgZmFpbHVyZSBiZWNhdXNlIG9mIDNyZCBlbGVtZW50IChncmVhdGVyIHRoYW4gaW50KVxuLVx0aWYgISB2ZXJpZnlfbm9fcGFydGlhbF91cGRhdGUgXCYjMzQ7MSAyIDMgNFwmIzM0OyBcJiMzNDsxMCAyMCAkKChJTlRfTUFYICYjNDM7IDEpKSA0MFwmIzM0OzsgdGhlblxuLVx0XHRlY2hvIFwmIzM0O0ZBSUxcJiMzNDsgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRlbHNlXG4tXHRcdGVjaG8gXCYjMzQ7T0tcJiMzNDtcbi1cdGZpXG4tXHR0ZXN0X3JjXG4mIzQzO1x0cHJpbnRmICYjMzk7JXMmIzM5OyBcJiMzNDskYmFzZWxpbmVcJiMzNDsgXHUwMDNlIFwmIzM0OyRmaWxlXCYjMzQ7XG4mIzQzO1x0cHJpbnRmICYjMzk7JXMmIzM5OyBcJiMzNDskVUlOVF9NQVhcJiMzNDsgXHUwMDNlIFwmIzM0OyRmaWxlXCYjMzQ7XG4mIzQzO1x0YXNzZXJ0X2NvbnRlbnQgXCYjMzQ7JGZpbGVcJiMzNDsgXCYjMzQ7JFVJTlRfTUFYXCYjMzQ7IHx8IHN0YXR1cz0xXG4gXG4tXHRlY2hvIC1uIFwmIzM0O1Rlc3RpbmcgaW52YWxpZCBmaXJzdCBhcnJheSBlbGVtZW50IGRvZXMgbm90IHVwZGF0ZSAuLi4gXCYjMzQ7XG4tXHQjIEV4cGVjdCBmYWlsdXJlIG9mIDFzdCBlbGVtZW50XG4tXHRpZiAhIHZlcmlmeV9ub19wYXJ0aWFsX3VwZGF0ZSBcJiMzNDsxIDIgMyA0XCYjMzQ7IFwmIzM0O2FiYyAyMCAzMCA0MFwmIzM0OzsgdGhlblxuLVx0XHRlY2hvIFwmIzM0O0ZBSUxcJiMzNDsgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRlbHNlXG4tXHRcdGVjaG8gXCYjMzQ7T0tcJiMzNDtcbi1cdGZpXG4tXHR0ZXN0X3JjXG4mIzQzO1x0YXNzZXJ0X25vX3BhcnRpYWxfdXBkYXRlIFwmIzM0OyRmaWxlXCYjMzQ7IFwmIzM0OyRiYXNlbGluZVwmIzM0OyBcJiMzNDskKChVSU5UX01BWCAmIzQzOyAxKSlcJiMzNDsgfHwgc3RhdHVzPTFcbiYjNDM7XHRhc3NlcnRfbm9fcGFydGlhbF91cGRhdGUgXCYjMzQ7JGZpbGVcJiMzNDsgXCYjMzQ7JGJhc2VsaW5lXCYjMzQ7IFwmIzM0Oy0zXCYjMzQ7IHx8IHN0YXR1cz0xXG4mIzQzO1xuJiM0MztcdHJldHVybiBcJiMzNDskc3RhdHVzXCYjMzQ7XG4gfVxuIFxuLSMgWW91IGFyZSB1c2luZyBhbiB1bnNpZ25lZCBpbnRcbi1ydW5fbGltaXRfZGlnaXRfdWludCgpXG4mIzQzO3Rlc3RfaW50X21pbm1heCgpXG4ge1xuLVx0ZWNobyAtbiBcJiMzNDtUZXN0aW5nIFVJTlRfTUFYIHdvcmtzIC4uLiBcJiMzNDtcbi1cdHJlc2V0X3ZhbHNcbi1cdFRFU1RfU1RSPVwmIzM0OyRVSU5UX01BWFwmIzM0O1xuLVx0ZWNobyAtbiAkVEVTVF9TVFIgXHUwMDNlICRUQVJHRVRcbi1cbi1cdGlmICEgdmVyaWZ5IFwmIzM0OyR7VEFSR0VUfVwmIzM0OzsgdGhlblxuLVx0XHRlY2hvIFwmIzM0O0ZBSUxcJiMzNDsgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRlbHNlXG4tXHRcdGVjaG8gXCYjMzQ7T0tcJiMzNDtcbi1cdGZpXG4tXHR0ZXN0X3JjXG4tXG4tXHRlY2hvIC1uIFwmIzM0O1Rlc3RpbmcgVUlOVF9NQVggJiM0MzsgMSB3aWxsIGZhaWwgYXMgZXhwZWN0ZWQgLi4uIFwmIzM0O1xuLVx0cmVzZXRfdmFsc1xuLVx0VEVTVF9TVFI9JCgoJFVJTlRfTUFYJiM0MzsxKSlcbi1cdGVjaG8gLW4gJFRFU1RfU1RSIFx1MDAzZSAkVEFSR0VUIDJcdTAwM2UgL2Rldi9udWxsXG4mIzQzO1x0bG9jYWwgdD1cJiMzNDske1NZU0NUTH0vaW50XzAwMDFcJiMzNDtcbiYjNDM7XHRsb2NhbCBiYXNlbGluZT1cJiMzNDs2MFwmIzM0OyB2YWw9XCYjMzQ7NjFcJiMzNDtcbiBcbi1cdGlmIHZlcmlmeSBcJiMzNDske1RBUkdFVH1cJiMzNDs7IHRoZW5cbi1cdFx0ZWNobyBcJiMzNDtGQUlMXCYjMzQ7IFx1MDAzZVx1MDAyNjJcbi1cdFx0cmM9MVxuLVx0ZWxzZVxuLVx0XHRlY2hvIFwmIzM0O09LXCYjMzQ7XG4tXHRmaVxuLVx0dGVzdF9yY1xuJiM0MztcdFtbIC1mIFwmIzM0OyR0XCYjMzQ7IF1dIHx8IHsgUkVUPSRLU0ZUX1NLSVA7IHJldHVybjsgfVxuIFxuLVx0ZWNobyAtbiBcJiMzNDtUZXN0aW5nIG5lZ2F0aXZlIHZhbHVlcyB3aWxsIG5vdCB3b3JrIGFzIGV4cGVjdGVkIC4uLiBcJiMzNDtcbi1cdHJlc2V0X3ZhbHNcbi1cdFRFU1RfU1RSPVwmIzM0Oy0zXCYjMzQ7XG4tXHRlY2hvIC1uICRURVNUX1NUUiBcdTAwM2UgJFRBUkdFVCAyXHUwMDNlIC9kZXYvbnVsbFxuLVxuLVx0aWYgdmVyaWZ5IFwmIzM0OyR7VEFSR0VUfVwmIzM0OzsgdGhlblxuLVx0XHRlY2hvIFwmIzM0O0ZBSUxcJiMzNDsgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRlbHNlXG4tXHRcdGVjaG8gXCYjMzQ7T0tcJiMzNDtcbi1cdGZpXG4tXHR0ZXN0X3JjXG4mIzQzO1x0YXNzZXJ0X3dyaXRlX3BhdHRlcm5zIFwmIzM0OyR0XCYjMzQ7IFwmIzM0OyRiYXNlbGluZVwmIzM0OyBcJiMzNDskdmFsXCYjMzQ7IHx8IFJFVD0kS1NGVF9GQUlMXG4mIzQzO1x0YXNzZXJ0X3dpZGVpbnRfd3JpdGVzX3JlamVjdGVkIFwmIzM0OyR0XCYjMzQ7IFwmIzM0OyRiYXNlbGluZVwmIzM0OyB8fCBSRVQ9JEtTRlRfRkFJTFxuJiM0MztcdGFzc2VydF9kaWdpdF9saW1pdCBcJiMzNDskdFwmIzM0OyBcJiMzNDskYmFzZWxpbmVcJiMzNDsgfHwgUkVUPSRLU0ZUX0ZBSUxcbiB9XG4gXG4tcnVuX3N0cmluZ3Rlc3RzKClcbiYjNDM7dGVzdF9pbnRfcGxhaW4oKVxuIHtcbi1cdGVjaG8gLW4gXCYjMzQ7V3JpdGluZyBlbnRpcmUgc3lzY3RsIGluIHNob3J0IHdyaXRlcyAuLi4gXCYjMzQ7XG4tXHRzZXRfb3JpZ1xuLVx0ZGQgaWY9XCYjMzQ7JHtURVNUX0ZJTEV9XCYjMzQ7IG9mPVwmIzM0OyR7VEFSR0VUfVwmIzM0OyBicz0xIDJcdTAwM2UvZGV2L251bGxcbi1cdGlmICEgdmVyaWZ5IFwmIzM0OyR7VEFSR0VUfVwmIzM0OzsgdGhlblxuLVx0XHRlY2hvIFwmIzM0O0ZBSUxcJiMzNDsgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRlbHNlXG4tXHRcdGVjaG8gXCYjMzQ7T0tcJiMzNDtcbi1cdGZpXG4mIzQzO1x0bG9jYWwgdD1cJiMzNDske1NZU0NUTH0vaW50XzAwMDJcJiMzNDtcbiYjNDM7XHRsb2NhbCBiYXNlbGluZT1cJiMzNDsxXCYjMzQ7IHZhbD1cJiMzNDsyXCYjMzQ7XG4gXG4tXHRlY2hvIC1uIFwmIzM0O1dyaXRpbmcgbWlkZGxlIG9mIHN5c2N0bCBhZnRlciB1bnN5bmNocm9uaXplZCBzZWVrIC4uLiBcJiMzNDtcbi1cdHNldF90ZXN0XG4tXHRkZCBpZj1cJiMzNDske1RFU1RfRklMRX1cJiMzNDsgb2Y9XCYjMzQ7JHtUQVJHRVR9XCYjMzQ7IGJzPTEgc2Vlaz0xIDJcdTAwM2UvZGV2L251bGxcbi1cdGlmIHZlcmlmeSBcJiMzNDske1RBUkdFVH1cJiMzNDs7IHRoZW5cbi1cdFx0ZWNobyBcJiMzNDtGQUlMXCYjMzQ7IFx1MDAzZVx1MDAyNjJcbi1cdFx0cmM9MVxuLVx0ZWxzZVxuLVx0XHRlY2hvIFwmIzM0O09LXCYjMzQ7XG4tXHRmaVxuJiM0MztcdFtbIC1mIFwmIzM0OyR0XCYjMzQ7IF1dIHx8IHsgUkVUPSRLU0ZUX1NLSVA7IHJldHVybjsgfVxuIFxuLVx0ZWNobyAtbiBcJiMzNDtDaGVja2luZyBzeXNjdGwgbWF4bGVuIGlzIGF0IGxlYXN0ICRNQVhMRU4gLi4uIFwmIzM0O1xuLVx0c2V0X29yaWdcbi1cdHBlcmwgLWUgJiMzOTtwcmludCBcJiMzNDtBXCYjMzQ7IHggKCYjMzk7XCYjMzQ7JHtNQVhMRU59XCYjMzQ7JiMzOTstMiksIFwmIzM0O0JcJiMzNDs7JiMzOTsgfCBcXFxuLVx0XHRkZCBvZj1cJiMzNDske1RBUkdFVH1cJiMzNDsgYnM9XCYjMzQ7JHtNQVhMRU59XCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbi1cdGlmICEgZ3JlcCAtcSBCIFwmIzM0OyR7VEFSR0VUfVwmIzM0OzsgdGhlblxuLVx0XHRlY2hvIFwmIzM0O0ZBSUxcJiMzNDsgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRlbHNlXG4tXHRcdGVjaG8gXCYjMzQ7T0tcJiMzNDtcbi1cdGZpXG4tXG4tXHRlY2hvIC1uIFwmIzM0O0NoZWNraW5nIHN5c2N0bCBrZWVwcyBvcmlnaW5hbCBzdHJpbmcgb24gb3ZlcmZsb3cgYXBwZW5kIC4uLiBcJiMzNDtcbi1cdHNldF9vcmlnXG4tXHRwZXJsIC1lICYjMzk7cHJpbnQgXCYjMzQ7QVwmIzM0OyB4ICgmIzM5O1wmIzM0OyR7TUFYTEVOfVwmIzM0OyYjMzk7LTEpLCBcJiMzNDtCXCYjMzQ7OyYjMzk7IHwgXFxcbi1cdFx0ZGQgb2Y9XCYjMzQ7JHtUQVJHRVR9XCYjMzQ7IGJzPSQoKCBNQVhMRU4gLSAxICkpIDJcdTAwM2UvZGV2L251bGxcbi1cdGlmIGdyZXAgLXEgQiBcJiMzNDske1RBUkdFVH1cJiMzNDs7IHRoZW5cbi1cdFx0ZWNobyBcJiMzNDtGQUlMXCYjMzQ7IFx1MDAzZVx1MDAyNjJcbi1cdFx0cmM9MVxuLVx0ZWxzZVxuLVx0XHRlY2hvIFwmIzM0O09LXCYjMzQ7XG4tXHRmaVxuLVxuLVx0ZWNobyAtbiBcJiMzNDtDaGVja2luZyBzeXNjdGwgc3RheXMgTlVMTCB0ZXJtaW5hdGVkIG9uIHdyaXRlIC4uLiBcJiMzNDtcbi1cdHNldF9vcmlnXG4tXHRwZXJsIC1lICYjMzk7cHJpbnQgXCYjMzQ7QVwmIzM0OyB4ICgmIzM5O1wmIzM0OyR7TUFYTEVOfVwmIzM0OyYjMzk7LTEpLCBcJiMzNDtCXCYjMzQ7OyYjMzk7IHwgXFxcbi1cdFx0ZGQgb2Y9XCYjMzQ7JHtUQVJHRVR9XCYjMzQ7IGJzPVwmIzM0OyR7TUFYTEVOfVwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4tXHRpZiBncmVwIC1xIEIgXCYjMzQ7JHtUQVJHRVR9XCYjMzQ7OyB0aGVuXG4tXHRcdGVjaG8gXCYjMzQ7RkFJTFwmIzM0OyBcdTAwM2VcdTAwMjYyXG4tXHRcdHJjPTFcbi1cdGVsc2Vcbi1cdFx0ZWNobyBcJiMzNDtPS1wmIzM0O1xuLVx0Zmlcbi1cbi1cdGVjaG8gLW4gXCYjMzQ7Q2hlY2tpbmcgc3lzY3RsIHN0YXlzIE5VTEwgdGVybWluYXRlZCBvbiBvdmVyd3JpdGUgLi4uIFwmIzM0O1xuLVx0c2V0X29yaWdcbi1cdHBlcmwgLWUgJiMzOTtwcmludCBcJiMzNDtBXCYjMzQ7IHggKCYjMzk7XCYjMzQ7JHtNQVhMRU59XCYjMzQ7JiMzOTstMSksIFwmIzM0O0JCXCYjMzQ7OyYjMzk7IHwgXFxcbi1cdFx0ZGQgb2Y9XCYjMzQ7JHtUQVJHRVR9XCYjMzQ7IGJzPSQoKCAkTUFYTEVOICYjNDM7IDEgKSkgMlx1MDAzZS9kZXYvbnVsbFxuLVx0aWYgZ3JlcCAtcSBCIFwmIzM0OyR7VEFSR0VUfVwmIzM0OzsgdGhlblxuLVx0XHRlY2hvIFwmIzM0O0ZBSUxcJiMzNDsgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRlbHNlXG4tXHRcdGVjaG8gXCYjMzQ7T0tcJiMzNDtcbi1cdGZpXG4tXG4tXHR0ZXN0X3JjXG4mIzQzO1x0YXNzZXJ0X3dyaXRlX3BhdHRlcm5zIFwmIzM0OyR0XCYjMzQ7IFwmIzM0OyRiYXNlbGluZVwmIzM0OyBcJiMzNDskdmFsXCYjMzQ7IHx8IFJFVD0kS1NGVF9GQUlMXG4mIzQzO1x0YXNzZXJ0X3dpZGVpbnRfd3JpdGVzX3JlamVjdGVkIFwmIzM0OyR0XCYjMzQ7IFwmIzM0OyRiYXNlbGluZVwmIzM0OyB8fCBSRVQ9JEtTRlRfRkFJTFxuJiM0MztcdGFzc2VydF9kaWdpdF9saW1pdCBcJiMzNDskdFwmIzM0OyBcJiMzNDskYmFzZWxpbmVcJiMzNDsgfHwgUkVUPSRLU0ZUX0ZBSUxcbiYjNDM7XHRhc3NlcnRfaW50X3JhbmdlIFwmIzM0OyR0XCYjMzQ7IFwmIzM0OyRiYXNlbGluZVwmIzM0OyB8fCBSRVQ9JEtTRlRfRkFJTFxuIH1cbiBcbi10YXJnZXRfZXhpc3RzKClcbiYjNDM7dGVzdF91aW50X3BsYWluKClcbiB7XG4tXHRUQVJHRVQ9XCYjMzQ7JHtTWVNDVEx9LyQxXCYjMzQ7XG4tXHRURVNUX0lEPVwmIzM0OyQyXCYjMzQ7XG4mIzQzO1x0bG9jYWwgdD1cJiMzNDske1NZU0NUTH0vdWludF8wMDAxXCYjMzQ7XG4mIzQzO1x0bG9jYWwgYmFzZWxpbmU9XCYjMzQ7MzE0XCYjMzQ7IHZhbD1cJiMzNDszMTVcJiMzNDtcbiBcbi1cdGlmIFsgISAtZiAke1RBUkdFVH0gXSA7IHRoZW5cbi1cdFx0cmV0dXJuIDBcbi1cdGZpXG4tXHRyZXR1cm4gMVxuLX1cbiYjNDM7XHRbWyAtZiBcJiMzNDskdFwmIzM0OyBdXSB8fCB7IFJFVD0kS1NGVF9TS0lQOyByZXR1cm47IH1cbiBcbi1ydW5fYml0bWFwdGVzdCgpIHtcbi1cdCMgVG90YWwgbGVuZ3RoIG9mIGJpdG1hcHMgc3RyaW5nIHRvIHVzZSwgYSBiaXQgdW5kZXJcbi1cdCMgdGhlIG1heGltdW0gaW5wdXQgc2l6ZSBvZiB0aGUgdGVzdCBub2RlXG4tXHRMRU5HVEg9JCgoUkFORE9NICUgNjUwMDApKVxuJiM0MztcdGFzc2VydF93cml0ZV9wYXR0ZXJucyBcJiMzNDskdFwmIzM0OyBcJiMzNDskYmFzZWxpbmVcJiMzNDsgXCYjMzQ7JHZhbFwmIzM0OyB8fCBSRVQ9JEtTRlRfRkFJTFxuJiM0MztcdGFzc2VydF93aWRlaW50X3dyaXRlc19yZWplY3RlZCBcJiMzNDskdFwmIzM0OyBcJiMzNDskYmFzZWxpbmVcJiMzNDsgfHwgUkVUPSRLU0ZUX0ZBSUxcbiYjNDM7XHRhc3NlcnRfZGlnaXRfbGltaXQgXCYjMzQ7JHRcJiMzNDsgXCYjMzQ7JGJhc2VsaW5lXCYjMzQ7IHx8IFJFVD0kS1NGVF9GQUlMXG4mIzQzO1x0YXNzZXJ0X3VpbnRfcmFuZ2UgXCYjMzQ7JHRcJiMzNDsgXCYjMzQ7JGJhc2VsaW5lXCYjMzQ7IHx8IFJFVD0kS1NGVF9GQUlMXG4mIzQzO31cbiBcbi1cdCMgRmlyc3QgYml0IHRvIHNldFxuLVx0QklUPSQoKFJBTkRPTSAlIDEwMjQpKVxuJiM0MzsjIHByb2NfZG9zdHJpbmcoKS1zcGVjaWZpYyB3cml0ZSBwYXR0ZXJuc1xuJiM0Mzthc3NlcnRfc3RyaW5nX3dyaXRlX3BhdHRlcm5zKCkgICMgXHUwMDNjZmlsZVx1MDAzZSBcdTAwM2NiYXNlbGluZVx1MDAzZSBcdTAwM2N2YWxcdTAwM2UgXHUwMDNjbWF4bGVuXHUwMDNlXG4mIzQzO3tcbiYjNDM7XHRsb2NhbCBmaWxlPSQxIGJhc2VsaW5lPSQyIHZhbD0kMyBtYXhsZW49JDQgc3RhdHVzPTBcbiBcbi1cdCMgU3RyaW5nIGNvbnRhaW5pbmcgb3VyIGxpc3Qgb2YgYml0cyB0byBzZXRcbi1cdFRFU1RfU1RSPSRCSVRcbiYjNDM7XHRwcmludGYgJiMzOTslcyYjMzk7IFwmIzM0OyRiYXNlbGluZVwmIzM0OyBcdTAwM2UgXCYjMzQ7JGZpbGVcJiMzNDtcbiYjNDM7XHR3cml0ZV9pbl9jaHVua3MgXCYjMzQ7JGZpbGVcJiMzNDsgXCYjMzQ7JHZhbFwmIzM0OyAxXG4mIzQzO1x0YXNzZXJ0X2NvbnRlbnQgXCYjMzQ7JGZpbGVcJiMzNDsgXCYjMzQ7JHZhbFwmIzM0OyB8fCBzdGF0dXM9MVxuIFxuLVx0IyBidWlsZCB1cCB0aGUgc3RyaW5nXG4tXHR3aGlsZSBbIFwmIzM0OyR7I1RFU1RfU1RSfVwmIzM0OyAtbGUgXCYjMzQ7JExFTkdUSFwmIzM0OyBdOyBkb1xuLVx0XHQjIE1ha2Ugc3VyZSBuZXh0IGVudHJ5IGlzIGRpc2NvbnRpZ3VvdXMsXG4tXHRcdCMgc2tpcCBhaGVhZCBhdCBsZWFzdCAyXG4tXHRcdEJJVD0kKChCSVQgJiM0MzsgJCgoMiAmIzQzOyBSQU5ET00gJSAxMCkpKSlcbiYjNDM7XHRwcmludGYgJiMzOTslcyYjMzk7IFwmIzM0OyR2YWxcJiMzNDsgXHUwMDNlIFwmIzM0OyRmaWxlXCYjMzQ7XG4mIzQzO1x0d3JpdGVfYXRfb2Zmc2V0IFwmIzM0OyRmaWxlXCYjMzQ7IFwmIzM0OyR2YWxcJiMzNDsgMSAxXG4mIzQzO1x0YXNzZXJ0X2NvbnRlbnRfcmVqZWN0ZWQgXCYjMzQ7JGZpbGVcJiMzNDsgXCYjMzQ7JHZhbFwmIzM0OyB8fCBzdGF0dXM9MVxuIFxuLVx0XHQjIEFkZCBuZXcgYml0IHRvIHRoZSBsaXN0XG4tXHRcdFRFU1RfU1RSPVwmIzM0OyR7VEVTVF9TVFJ9LCR7QklUfVwmIzM0O1xuJiM0MztcdCMgc3lzY3RsIG1heGxlbiBpcyBhdCBsZWFzdCAkbWF4bGVuXG4mIzQzO1x0cHJpbnRmICYjMzk7JXMmIzM5OyBcJiMzNDskYmFzZWxpbmVcJiMzNDsgXHUwMDNlIFwmIzM0OyRmaWxlXCYjMzQ7XG4mIzQzO1x0d3JpdGVfb3ZlcmxvbmcgXCYjMzQ7JGZpbGVcJiMzNDsgXCYjMzQ7JCgobWF4bGVuIC0gMikpXCYjMzQ7IFwmIzM0O0JcJiMzNDsgXCYjMzQ7JG1heGxlblwmIzM0O1xuJiM0MztcdGFzc2VydF9ncmVwIFwmIzM0OyRmaWxlXCYjMzQ7IFwmIzM0O0JcJiMzNDsgfHwgc3RhdHVzPTFcbiBcbi1cdFx0IyBSYW5kb21seSBtYWtlIGl0IGEgcmFuZ2Vcbi1cdFx0aWYgWyBcJiMzNDskKChSQU5ET00gJSAyKSlcJiMzNDsgLWVxIFwmIzM0OzFcJiMzNDsgXTsgdGhlblxuLVx0XHRcdFJBTkdFX0VORD0kKChCSVQgJiM0MzsgJCgoMSAmIzQzOyBSQU5ET00gJSAxMCkpKSlcbi1cdFx0XHRURVNUX1NUUj1cJiMzNDske1RFU1RfU1RSfS0ke1JBTkdFX0VORH1cJiMzNDtcbi1cdFx0XHRCSVQ9JFJBTkdFX0VORFxuLVx0XHRmaVxuLVx0ZG9uZVxuJiM0MztcdCMga2VlcCBvcmlnaW5hbCBzdHJpbmcgb24gb3ZlcmZsb3cgYXBwZW5kXG4mIzQzO1x0cHJpbnRmICYjMzk7JXMmIzM5OyBcJiMzNDskYmFzZWxpbmVcJiMzNDsgXHUwMDNlIFwmIzM0OyRmaWxlXCYjMzQ7XG4mIzQzO1x0d3JpdGVfb3ZlcmxvbmcgXCYjMzQ7JGZpbGVcJiMzNDsgXCYjMzQ7JCgobWF4bGVuIC0gMSkpXCYjMzQ7IFwmIzM0O0JcJiMzNDsgXCYjMzQ7JCgobWF4bGVuIC0gMSkpXCYjMzQ7XG4mIzQzO1x0YXNzZXJ0X2dyZXBfYWJzZW50IFwmIzM0OyRmaWxlXCYjMzQ7IFwmIzM0O0JcJiMzNDsgfHwgc3RhdHVzPTFcbiBcbi1cdGVjaG8gLW4gXCYjMzQ7Q2hlY2tpbmcgYml0bWFwIGhhbmRsZXIgLi4uIFwmIzM0O1xuLVx0VEVTVF9GSUxFPSQobWt0ZW1wKVxuLVx0ZWNobyAtbiBcJiMzNDskVEVTVF9TVFJcJiMzNDsgXHUwMDNlICRURVNUX0ZJTEVcbiYjNDM7XHQjIHN5c2N0bCBzdGF5cyBOVUxMIHRlcm1pbmF0ZWQgb24gd3JpdGVcbiYjNDM7XHRwcmludGYgJiMzOTslcyYjMzk7IFwmIzM0OyRiYXNlbGluZVwmIzM0OyBcdTAwM2UgXCYjMzQ7JGZpbGVcJiMzNDtcbiYjNDM7XHR3cml0ZV9vdmVybG9uZyBcJiMzNDskZmlsZVwmIzM0OyBcJiMzNDskKChtYXhsZW4gLSAxKSlcJiMzNDsgXCYjMzQ7QlwmIzM0OyBcJiMzNDskbWF4bGVuXCYjMzQ7XG4mIzQzO1x0YXNzZXJ0X2dyZXBfYWJzZW50IFwmIzM0OyRmaWxlXCYjMzQ7IFwmIzM0O0JcJiMzNDsgfHwgc3RhdHVzPTFcbiBcbi1cdGNhdCAkVEVTVF9GSUxFIFx1MDAzZSAkVEFSR0VUIDJcdTAwM2UgL2Rldi9udWxsXG4tXHRpZiBbICQ/IC1uZSAwIF07IHRoZW5cbi1cdFx0ZWNobyBcJiMzNDtGQUlMXCYjMzQ7IFx1MDAzZVx1MDAyNjJcbi1cdFx0cmM9MVxuLVx0XHR0ZXN0X3JjXG4tXHRmaVxuJiM0MztcdCMgc3lzY3RsIHN0YXlzIE5VTEwgdGVybWluYXRlZCBvbiBvdmVyd3JpdGVcbiYjNDM7XHRwcmludGYgJiMzOTslcyYjMzk7IFwmIzM0OyRiYXNlbGluZVwmIzM0OyBcdTAwM2UgXCYjMzQ7JGZpbGVcJiMzNDtcbiYjNDM7XHR3cml0ZV9vdmVybG9uZyBcJiMzNDskZmlsZVwmIzM0OyBcJiMzNDskKChtYXhsZW4gLSAxKSlcJiMzNDsgXCYjMzQ7QkJcJiMzNDsgXCYjMzQ7JCgobWF4bGVuICYjNDM7IDEpKVwmIzM0O1xuJiM0MztcdGFzc2VydF9ncmVwX2Fic2VudCBcJiMzNDskZmlsZVwmIzM0OyBcJiMzNDtCXCYjMzQ7IHx8IHN0YXR1cz0xXG4gXG4tXHRpZiAhIHZlcmlmeV9kaWZmX3Byb2NfZmlsZSBcJiMzNDskVEFSR0VUXCYjMzQ7IFwmIzM0OyRURVNUX0ZJTEVcJiMzNDs7IHRoZW5cbi1cdFx0ZWNobyBcJiMzNDtGQUlMXCYjMzQ7IFx1MDAzZVx1MDAyNjJcbi1cdFx0cmM9MVxuLVx0ZWxzZVxuLVx0XHRlY2hvIFwmIzM0O09LXCYjMzQ7XG4tXHRcdHJjPTBcbi1cdGZpXG4tXHR0ZXN0X3JjXG4mIzQzO1x0cmV0dXJuIFwmIzM0OyRzdGF0dXNcJiMzNDtcbiB9XG4gXG4tc3lzY3RsX3Rlc3RfMDAwMSgpXG4mIzQzO3Rlc3Rfc3RyaW5nX2Rvc3RyaW5nKClcbiB7XG4tXHRUQVJHRVQ9XCYjMzQ7JHtTWVNDVEx9LyQoZ2V0X3Rlc3RfdGFyZ2V0IDAwMDEpXCYjMzQ7XG4tXHRyZXNldF92YWxzXG4tXHRPUklHPSQoY2F0IFwmIzM0OyR7VEFSR0VUfVwmIzM0Oylcbi1cdFRFU1RfU1RSPSQoKCAkT1JJRyAmIzQzOyAxICkpXG4tXG4tXHRydW5fbnVtZXJpY3Rlc3RzXG4tXHRydW5fd2lkZWludF90ZXN0c1xuLVx0cnVuX2xpbWl0X2RpZ2l0XG4tfVxuJiM0MztcdGxvY2FsIHQ9XCYjMzQ7JHtTWVNDVEx9L3N0cmluZ18wMDAxXCYjMzQ7XG4mIzQzO1x0bG9jYWwgYmFzZWxpbmU9XCYjMzQ7KG5vbmUpXCYjMzQ7IHZhbD1cJiMzNDtUZXN0aW5nIHN5c2N0bFwmIzM0OyBtYXhsZW49NjVcbiBcbi1zeXNjdGxfdGVzdF8wMDAyKClcbi17XG4tXHRUQVJHRVQ9XCYjMzQ7JHtTWVNDVEx9LyQoZ2V0X3Rlc3RfdGFyZ2V0IDAwMDIpXCYjMzQ7XG4tXHRyZXNldF92YWxzXG4tXHRPUklHPSQoY2F0IFwmIzM0OyR7VEFSR0VUfVwmIzM0Oylcbi1cdFRFU1RfU1RSPVwmIzM0O1Rlc3Rpbmcgc3lzY3RsXCYjMzQ7XG4tXHQjIE9ubHkgc3RyaW5nIHN5c2N0bHMgc3VwcG9ydCBzZWVraW5nL2FwcGVuZGluZy5cbi1cdE1BWExFTj02NVxuLVxuLVx0cnVuX251bWVyaWN0ZXN0c1xuLVx0cnVuX3N0cmluZ3Rlc3RzXG4tfVxuJiM0MztcdFtbIC1mIFwmIzM0OyR0XCYjMzQ7IF1dIHx8IHsgUkVUPSRLU0ZUX1NLSVA7IHJldHVybjsgfVxuIFxuLXN5c2N0bF90ZXN0XzAwMDMoKVxuLXtcbi1cdFRBUkdFVD1cJiMzNDske1NZU0NUTH0vJChnZXRfdGVzdF90YXJnZXQgMDAwMylcJiMzNDtcbi1cdHJlc2V0X3ZhbHNcbi1cdE9SSUc9JChjYXQgXCYjMzQ7JHtUQVJHRVR9XCYjMzQ7KVxuLVx0VEVTVF9TVFI9JCgoICRPUklHICYjNDM7IDEgKSlcbi1cbi1cdHJ1bl9udW1lcmljdGVzdHNcbi1cdHJ1bl93aWRlaW50X3Rlc3RzXG4tXHRydW5fbGltaXRfZGlnaXRcbi1cdHJ1bl9saW1pdF9kaWdpdF9pbnRcbiYjNDM7XHRhc3NlcnRfd3JpdGVfcGF0dGVybnMgXCYjMzQ7JHRcJiMzNDsgXCYjMzQ7JGJhc2VsaW5lXCYjMzQ7IFwmIzM0OyR2YWxcJiMzNDsgfHwgUkVUPSRLU0ZUX0ZBSUxcbiYjNDM7XHRhc3NlcnRfc3RyaW5nX3dyaXRlX3BhdHRlcm5zIFwmIzM0OyR0XCYjMzQ7IFwmIzM0OyRiYXNlbGluZVwmIzM0OyBcJiMzNDskdmFsXCYjMzQ7IFwmIzM0OyRtYXhsZW5cJiMzNDsgfHwgUkVUPSRLU0ZUX0ZBSUxcbiB9XG4gXG4tc3lzY3RsX3Rlc3RfMDAwNCgpXG4mIzQzOyMgRW1pdCBhIHJhbmRvbSBzeXNjdGwgYml0IG1hcFxuJiM0MztyYW5kb21fYml0bWFwX3NwZWMoKVxuIHtcbi1cdFRBUkdFVD1cJiMzNDske1NZU0NUTH0vJChnZXRfdGVzdF90YXJnZXQgMDAwNClcJiMzNDtcbi1cdHJlc2V0X3ZhbHNcbi1cdE9SSUc9JChjYXQgXCYjMzQ7JHtUQVJHRVR9XCYjMzQ7KVxuLVx0VEVTVF9TVFI9JCgoICRPUklHICYjNDM7IDEgKSlcbi1cbi1cdHJ1bl9udW1lcmljdGVzdHNcbi1cdHJ1bl93aWRlaW50X3Rlc3RzXG4tXHRydW5fbGltaXRfZGlnaXRcbi1cdHJ1bl9saW1pdF9kaWdpdF91aW50XG4tfVxuJiM0MztcdGxvY2FsIGxlbmd0aD0kKChSQU5ET00gJSA2NTAwMCkpXG4mIzQzO1x0bG9jYWwgYml0PSQoKFJBTkRPTSAlIDEwMjQpKVxuJiM0MztcdGxvY2FsIHNwZWM9JGJpdFxuJiM0MztcdGxvY2FsIHJhbmdlX2VuZFxuIFxuLXN5c2N0bF90ZXN0XzAwMDUoKVxuLXtcbi1cdFRBUkdFVD1cJiMzNDske1NZU0NUTH0vJChnZXRfdGVzdF90YXJnZXQgMDAwNSlcJiMzNDtcbi1cdHJlc2V0X3ZhbHNcbi1cdE9SSUc9JChjYXQgXCYjMzQ7JHtUQVJHRVR9XCYjMzQ7KVxuJiM0MztcdHdoaWxlIFsgXCYjMzQ7JHsjc3BlY31cJiMzNDsgLWxlIFwmIzM0OyRsZW5ndGhcJiMzNDsgXTsgZG9cbiYjNDM7XHRcdCMgS2VlcCBlbnRyaWVzIGRpc2NvbnRpZ3VvdXMsIHNraXAgYWhlYWQgYnkgYXQgbGVhc3QgMi5cbiYjNDM7XHRcdGJpdD0kKChiaXQgJiM0MzsgMiAmIzQzOyBSQU5ET00gJSAxMCkpXG4mIzQzO1x0XHRzcGVjPVwmIzM0OyR7c3BlY30sJHtiaXR9XCYjMzQ7XG4gXG4tXHRydW5fbGltaXRfZGlnaXRfaW50X2FycmF5XG4tfVxuJiM0MztcdFx0aWYgWyBcJiMzNDskKChSQU5ET00gJSAyKSlcJiMzNDsgLWVxIDEgXTsgdGhlblxuJiM0MztcdFx0XHRyYW5nZV9lbmQ9JCgoYml0ICYjNDM7IDEgJiM0MzsgUkFORE9NICUgMTApKVxuJiM0MztcdFx0XHRzcGVjPVwmIzM0OyR7c3BlY30tJHtyYW5nZV9lbmR9XCYjMzQ7XG4mIzQzO1x0XHRcdGJpdD0kcmFuZ2VfZW5kXG4mIzQzO1x0XHRmaVxuJiM0MztcdGRvbmVcbiBcbi1zeXNjdGxfdGVzdF8wMDA2KClcbi17XG4tXHRUQVJHRVQ9XCYjMzQ7JHtTWVNDVEx9LyQoZ2V0X3Rlc3RfdGFyZ2V0IDAwMDYpXCYjMzQ7XG4tXHRyZXNldF92YWxzXG4tXHRPUklHPVwmIzM0O1wmIzM0O1xuLVx0cnVuX2JpdG1hcHRlc3RcbiYjNDM7XHRlY2hvIC1uIFwmIzM0OyRzcGVjXCYjMzQ7XG4gfVxuIFxuLXN5c2N0bF90ZXN0XzAwMDcoKVxuJiM0MzsjIERvICpub3QqIHByZWZpeCB3aXRoIFwmIzM0O3Rlc3RfXCYjMzQ7LiBBbGwgYXV0b2dlbmVyYXRlIGJpdG1hcCB0ZXN0cyBjYWxsIHRoaXMgaGVscGVyXG4mIzQzO2JpdG1hcF9yYW5nZV9jaGVja19vbmNlKCkgICMgXHUwMDNjaXRlclx1MDAzZVxuIHtcbi1cdFRBUkdFVD1cJiMzNDske1NZU0NUTH0vJChnZXRfdGVzdF90YXJnZXQgMDAwNylcJiMzNDtcbi1cdGVjaG8gLW4gXCYjMzQ7VGVzdGluZyBpZiAkVEFSR0VUIGlzIHNldCB0byAxIC4uLiBcJiMzNDtcbiYjNDM7XHRsb2NhbCB0PVwmIzM0OyR7U1lTQ1RMfS9iaXRtYXBfMDAwMVwmIzM0O1xuJiM0MztcdGxvY2FsIHNwZWNfZmlsZSBzZWVkXG4gXG4tXHRpZiBbICEgLWYgJFRBUkdFVCBdOyB0aGVuXG4tXHRcdGVjaG8gLWUgXCYjMzQ7U0tJUFBJTkdcXG4kVEFSR0VUIGlzIG5vdCBwcmVzZW50XCYjMzQ7XG4tXHRcdHJldHVybiAka3NmdF9za2lwXG4tXHRmaVxuLVxuLVx0aWYgWyAtZCAkRElSIF07IHRoZW5cbi1cdFx0ZWNobyAtZSBcJiMzNDtTS0lQUElOR1xcblRlc3Qgb25seSBwb3NzaWJsZSBpZiBzeXNjdGxfdGVzdCBpcyBidWlsdC1pbiwgbm90IG1vZHVsZTpcJiMzNDtcbi1cdFx0Y2F0ICRURVNUX0RJUi9jb25maWcgXHUwMDNlXHUwMDI2MlxuLVx0XHRyZXR1cm4gJGtzZnRfc2tpcFxuLVx0ZmlcbiYjNDM7XHRbWyAtZiBcJiMzNDskdFwmIzM0OyBdXSB8fCB7IFJFVD0kS1NGVF9TS0lQOyByZXR1cm47IH1cbiBcbi1cdE9SSUc9JChjYXQgXCYjMzQ7JHtUQVJHRVR9XCYjMzQ7KVxuJiM0MztcdHNlZWQ9JCgoQklUTUFQX1NFRUQgJiM0MzsgJDEpKVxuJiM0MztcdFJBTkRPTT0kc2VlZFxuIFxuLVx0aWYgWyB4JE9SSUcgPSBcJiMzNDt4MVwmIzM0OyBdOyB0aGVuXG4tXHRcdGVjaG8gXCYjMzQ7T0tcJiMzNDtcbi1cdFx0cmV0dXJuIDBcbi1cdGZpXG4mIzQzO1x0c3BlY19maWxlPSQobWt0ZW1wKVxuJiM0MztcdHJhbmRvbV9iaXRtYXBfc3BlYyBcdTAwM2UgXCYjMzQ7JHNwZWNfZmlsZVwmIzM0O1xuIFxuLVx0aWYgWyAhIC1mIC9wcm9jL2NtZGxpbmUgXTsgdGhlblxuLVx0XHRlY2hvIC1lIFwmIzM0O1NLSVBQSU5HXFxuVGhlcmUgaXMgbm8gL3Byb2MvY21kbGluZSB0byBjaGVjayBmb3IgcGFyYW1ldGVyXCYjMzQ7XG4tXHRcdHJldHVybiAka3NmdF9za2lwXG4mIzQzO1x0aWYgISBjYXQgXCYjMzQ7JHNwZWNfZmlsZVwmIzM0OyBcdTAwM2UgXCYjMzQ7JHRcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbDsgdGhlblxuJiM0MztcdFx0a3RhcF9wcmludF9tc2cgXCYjMzQ7JHQ6IHdyaXRlIG9mIHJhbmRvbSBiaXRtYXAgc3BlYyByZWplY3RlZCAoc2VlZCAkc2VlZClcJiMzNDtcbiYjNDM7XHRcdFJFVD0kS1NGVF9GQUlMXG4mIzQzO1x0ZWxpZiAhIGFzc2VydF9kaWZmX3Byb2NfZmlsZSBcJiMzNDskdFwmIzM0OyBcJiMzNDskc3BlY19maWxlXCYjMzQ7OyB0aGVuXG4mIzQzO1x0XHRrdGFwX3ByaW50X21zZyBcJiMzNDskdDogcmVhZGJhY2sgbWlzbWF0Y2ggKHNlZWQgJHNlZWQpXCYjMzQ7XG4mIzQzO1x0XHRSRVQ9JEtTRlRfRkFJTFxuIFx0ZmlcbiBcbi1cdEZPVU5EPSQoZ3JlcCAtYyBcJiMzNDtzeXNjdGxbLi9dZGVidWdbLi9ddGVzdF9zeXNjdGxbLi9dYm9vdF9pbnQ9MVwmIzM0OyAvcHJvYy9jbWRsaW5lKVxuLVx0aWYgWyAkRk9VTkQgPSBcJiMzNDsxXCYjMzQ7IF07IHRoZW5cbi1cdFx0ZWNobyAtZSBcJiMzNDtGQUlMXFxuS2VybmVsIHBhcmFtIGZvdW5kIGJ1dCAkVEFSR0VUIGlzIG5vdCAxLlwmIzM0OyBcdTAwM2VcdTAwMjYyXG4tXHRcdHJjPTFcbi1cdFx0dGVzdF9yY1xuLVx0Zmlcbi1cbi1cdGVjaG8gLWUgXCYjMzQ7U0tJUFBJTkdcXG5FeHBlY3RlZCBrZXJuZWwgcGFyYW1ldGVyIG1pc3NpbmcuXCYjMzQ7XG4tXHRlY2hvIFwmIzM0O0tlcm5lbCBtdXN0IGJlIGJvb3RlZCB3aXRoIHBhcmFtZXRlcjogc3lzY3RsLmRlYnVnLnRlc3Rfc3lzY3RsLmJvb3RfaW50PTFcJiMzNDtcbi1cdHJldHVybiAka3NmdF9za2lwXG4mIzQzO1x0cm0gLWYgXCYjMzQ7JHNwZWNfZmlsZVwmIzM0O1xuIH1cbiBcbi1zeXNjdGxfdGVzdF8wMDA4KClcbiYjNDM7dGVzdF91bnJlZ2lzdGVyX3JlbW92ZXNfZGlyKClcbiB7XG4tXHRUQVJHRVQ9XCYjMzQ7JHtTWVNDVEx9LyQoZ2V0X3Rlc3RfdGFyZ2V0IDAwMDgpXCYjMzQ7XG4tXHRlY2hvIC1uIFwmIzM0O1Rlc3RpbmcgaWYgJFRBUkdFVCBpcyBtYXRjaGVkIGluIGtlcm5lbCAuLi4gXCYjMzQ7XG4mIzQzO1x0bG9jYWwgdD1cJiMzNDske1NZU0NUTH0vdW5yZWdpc3Rlcl9lcnJvclwmIzM0O1xuIFxuLVx0aWYgWyAhIC1mICRUQVJHRVQgXTsgdGhlblxuLVx0XHRlY2hvIC1lIFwmIzM0O1NLSVBQSU5HXFxuJFRBUkdFVCBpcyBub3QgcHJlc2VudFwmIzM0O1xuLVx0XHRyZXR1cm4gJGtzZnRfc2tpcFxuJiM0MztcdGlmIFtbIC1kIFwmIzM0OyR0XCYjMzQ7IF1dOyB0aGVuXG4mIzQzO1x0XHRrdGFwX3ByaW50X21zZyBcJiMzNDskdDogZGlyZWN0b3J5IHN0aWxsIGV4aXN0cywgZXhwZWN0ZWQgaXQgdG8gYmUgdW5yZWdpc3RlcmVkXCYjMzQ7XG4mIzQzO1x0XHRSRVQ9JEtTRlRfRkFJTFxuIFx0ZmlcbiYjNDM7fVxuIFxuLVx0T1JJR19WQUxVRT0kKGNhdCBcJiMzNDske1RBUkdFVH1cJiMzNDspXG4mIzQzO3Rlc3RfbW91bnRfcG9pbnRfZXJyb3IoKVxuJiM0Mzt7XG4mIzQzO1x0bG9jYWwgdD1cJiMzNDske1NZU0NUTH0vbW50L21udF9lcnJvclwmIzM0O1xuIFxuLVx0aWYgWyAkT1JJR19WQUxVRSAtbmUgMSBdOyB0aGVuXG4tXHRcdGVjaG8gXCYjMzQ7RkFJTFwmIzM0OyBcdTAwM2VcdTAwMjYyXG4tXHRcdHJjPTFcbi1cdFx0dGVzdF9yY1xuJiM0MztcdGlmIFtbIC1kIFwmIzM0OyR0XCYjMzQ7IF1dOyB0aGVuXG4mIzQzO1x0XHRrdGFwX3ByaW50X21zZyBcJiMzNDskdDogZGlyZWN0b3J5IHVuZXhwZWN0ZWRseSBjcmVhdGVkXCYjMzQ7XG4mIzQzO1x0XHRSRVQ9JEtTRlRfRkFJTFxuIFx0Zmlcbi1cbi1cdGVjaG8gXCYjMzQ7T0tcJiMzNDtcbi1cdHJldHVybiAwXG4gfVxuIFxuLXN5c2N0bF90ZXN0XzAwMDkoKVxuJiM0Mzt0ZXN0X2VtcHR5X2Rpcl9yZWdpc3RyYXRpb24oKVxuIHtcbi1cdFRBUkdFVD1cJiMzNDske1NZU0NUTH0vJChnZXRfdGVzdF90YXJnZXQgMDAwOSlcJiMzNDtcbi1cdGVjaG8gLW4gXCYjMzQ7VGVzdGluZyBpZiAkVEFSR0VUIHVucmVnaXN0ZXJlZCBjb3JyZWN0bHkgLi4uIFwmIzM0O1xuLVx0aWYgWyAtZCAkVEFSR0VUIF07IHRoZW5cbi1cdFx0ZWNobyBcJiMzNDtGQUlMXCYjMzQ7IFx1MDAzZVx1MDAyNjJcbi1cdFx0cmM9MVxuLVx0XHR0ZXN0X3JjXG4tXHRmaVxuJiM0MztcdGxvY2FsIHQ9XCYjMzQ7JHtTWVNDVEx9L2VtcHR5X2FkZFwmIzM0O1xuIFxuLVx0ZWNobyBcJiMzNDtPS1wmIzM0O1xuLVx0cmV0dXJuIDBcbiYjNDM7XHRpZiBbWyAhIC1kIFwmIzM0OyR0XCYjMzQ7IF1dOyB0aGVuXG4mIzQzO1x0XHRrdGFwX3ByaW50X21zZyBcJiMzNDskdDogZGlyZWN0b3J5IHdhcyBub3QgY3JlYXRlZFwmIzM0O1xuJiM0MztcdFx0UkVUPSRLU0ZUX0ZBSUxcbiYjNDM7XHRcdHJldHVyblxuJiM0MztcdGZpXG4mIzQzO1x0aWYgW1sgISAtZCBcJiMzNDskdC9lbXB0eVwmIzM0OyBdXTsgdGhlblxuJiM0MztcdFx0a3RhcF9wcmludF9tc2cgXCYjMzQ7JHQvZW1wdHk6IGRpcmVjdG9yeSB3YXMgbm90IGNyZWF0ZWRcJiMzNDtcbiYjNDM7XHRcdFJFVD0kS1NGVF9GQUlMXG4mIzQzO1x0ZmlcbiB9XG4gXG4tc3lzY3RsX3Rlc3RfMDAxMCgpXG4mIzQzO3Rlc3RfdThfcmFuZ2VfY2hlY2soKVxuIHtcbi1cdFRBUkdFVD1cJiMzNDske1NZU0NUTH0vJChnZXRfdGVzdF90YXJnZXQgMDAxMClcJiMzNDtcbi1cdGVjaG8gLW4gXCYjMzQ7VGVzdGluZyB0aGF0ICRUQVJHRVQgd2FzIG5vdCBjcmVhdGVkIC4uLiBcJiMzNDtcbi1cdGlmIFsgLWQgJFRBUkdFVCBdOyB0aGVuXG4tXHRcdGVjaG8gXCYjMzQ7RkFJTFwmIzM0OyBcdTAwM2VcdTAwMjYyXG4tXHRcdHJjPTFcbi1cdFx0dGVzdF9yY1xuJiM0MztcdGxvY2FsIHQ9XCYjMzQ7JHtTWVNDVEx9L3U4X3ZhbGlkXCYjMzQ7XG4mIzQzO1xuJiM0MztcdGlmIFtbICEgLWYgXCYjMzQ7JHRcJiMzNDsgXV07IHRoZW5cbiYjNDM7XHRcdGt0YXBfcHJpbnRfbXNnIFwmIzM0OyR0OiBmaWxlIHdhcyBub3QgY3JlYXRlZFwmIzM0O1xuJiM0MztcdFx0UkVUPSRLU0ZUX0ZBSUxcbiYjNDM7XHRcdHJldHVyblxuIFx0ZmlcbiBcbi1cdGVjaG8gXCYjMzQ7T0tcJiMzNDtcbi1cdHJldHVybiAwXG4mIzQzO1x0YXNzZXJ0X2RtZXNnX2NvdW50IFwmIzM0O3U4X292ZXIgcmFuZ2UgdmFsdWVcJiMzNDsgMSB8fCBSRVQ9JEtTRlRfRkFJTFxuJiM0MztcdGFzc2VydF9kbWVzZ19jb3VudCBcJiMzNDt1OF91bmRlciByYW5nZSB2YWx1ZVwmIzM0OyAxIHx8IFJFVD0kS1NGVF9GQUlMXG4gfVxuIFxuLXN5c2N0bF90ZXN0XzAwMTEoKVxuJiM0Mzt0ZXN0X2Jvb3RfcGFyYW1faW50KClcbiB7XG4tXHRUQVJHRVQ9XCYjMzQ7JHtTWVNDVEx9LyQoZ2V0X3Rlc3RfdGFyZ2V0IDAwMTEpXCYjMzQ7XG4tXHRlY2hvIC1uIFwmIzM0O1Rlc3RpbmcgZW1wdHkgZGlyIGhhbmRsaW5nIGluICR7VEFSR0VUfSAuLi4gXCYjMzQ7XG4tXHRpZiBbICEgLWQgJHtUQVJHRVR9IF07IHRoZW5cbi1cdFx0ZWNobyAtZSBcJiMzNDtGQUlMXFxuQ291bGQgbm90IGNyZWF0ZSAke1RBUkdFVH1cJiMzNDsgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRcdHRlc3RfcmNcbi1cdGZpXG4mIzQzO1x0bG9jYWwgdD1cJiMzNDske1NZU0NUTH0vYm9vdF9pbnRcJiMzNDtcbiYjNDM7XHRsb2NhbCBvcmlnIGZvdW5kXG4gXG4tXHRUQVJHRVQyPVwmIzM0OyR7VEFSR0VUfS9lbXB0eVwmIzM0O1xuLVx0aWYgWyAhIC1kICR7VEFSR0VUMn0gXTsgdGhlblxuLVx0XHRlY2hvIC1lIFwmIzM0O0ZBSUxcXG5Db3VsZCBub3QgY3JlYXRlICR7VEFSR0VUMn1cJiMzNDsgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRcdHRlc3RfcmNcbi1cdGZpXG4mIzQzO1x0W1sgLWYgXCYjMzQ7JHRcJiMzNDsgXV0gfHwgeyBSRVQ9JEtTRlRfU0tJUDsgcmV0dXJuOyB9XG4gXG4tXHRlY2hvIFwmIzM0O09LXCYjMzQ7XG4tXHRyZXR1cm4gMFxuLX1cbiYjNDM7XHQjIEJvb3QgY21kbGluZSBwYXJhbXMgb25seSBhcHBseSB3aGVuIHRlc3Rfc3lzY3RsIGlzIGJ1aWx0IGluLCBub3RcbiYjNDM7XHQjIGxvYWRlZCBhcyBhIG1vZHVsZS5cbiYjNDM7XHRpZiBbWyAtZCBcJiMzNDskTU9EVUxFX0RJUlwmIzM0OyBdXTsgdGhlblxuJiM0MztcdFx0a3RhcF9wcmludF9tc2cgXCYjMzQ7JHQ6IHRlc3Qgb25seSBwb3NzaWJsZSBpZiB0ZXN0X3N5c2N0bCBpcyBidWlsdC1pbiwgbm90IGEgbW9kdWxlXCYjMzQ7XG4mIzQzO1x0XHRSRVQ9JEtTRlRfU0tJUFxuJiM0MztcdFx0cmV0dXJuXG4mIzQzO1x0ZmlcbiBcbi1zeXNjdGxfdGVzdF8wMDEyKClcbi17XG4tXHRUQVJHRVQ9XCYjMzQ7JHtTWVNDVEx9LyQoZ2V0X3Rlc3RfdGFyZ2V0IDAwMTIpXCYjMzQ7XG4tXHRlY2hvIC1uIFwmIzM0O1Rlc3RpbmcgdTggcmFuZ2UgY2hlY2sgaW4gc3lzY3RsIHRhYmxlIGNoZWNrIGluICR7VEFSR0VUfSAuLi4gXCYjMzQ7XG4tXHRpZiBbICEgLWYgJHtUQVJHRVR9IF07IHRoZW5cbi1cdFx0ZWNobyAtZSBcJiMzNDtGQUlMXFxuQ291bGQgbm90IGNyZWF0ZSAke1RBUkdFVH1cJiMzNDsgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRcdHRlc3RfcmNcbiYjNDM7XHRvcmlnPSQoY2F0IFwmIzM0OyR0XCYjMzQ7KVxuJiM0MztcdGlmIFtbIFwmIzM0OyRvcmlnXCYjMzQ7ID09IFwmIzM0OzFcJiMzNDsgXV07IHRoZW5cbiYjNDM7XHRcdHJldHVyblxuIFx0ZmlcbiBcbi1cdGxvY2FsIHU4b3Zlcl9tc2c9JChkbWVzZyB8IGdyZXAgXCYjMzQ7dThfb3ZlciByYW5nZSB2YWx1ZVwmIzM0OyB8IHdjIC1sKVxuLVx0aWYgWyAhICR7dThvdmVyX21zZ30gLWVxIDEgXTsgdGhlblxuLVx0XHRlY2hvIC1lIFwmIzM0O0ZBSUxcXG51OCBvdmVyZmxvdyBub3QgZGV0ZWN0ZWRcJiMzNDsgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRcdHRlc3RfcmNcbiYjNDM7XHRpZiBbWyAhIC1mIC9wcm9jL2NtZGxpbmUgXV07IHRoZW5cbiYjNDM7XHRcdGt0YXBfcHJpbnRfbXNnIFwmIzM0OyR0OiBubyAvcHJvYy9jbWRsaW5lIHRvIGNoZWNrIGZvciB0aGUgYm9vdCBwYXJhbWV0ZXJcJiMzNDtcbiYjNDM7XHRcdFJFVD0kS1NGVF9TS0lQXG4mIzQzO1x0XHRyZXR1cm5cbiBcdGZpXG4gXG4tXHRsb2NhbCB1OHVuZGVyX21zZz0kKGRtZXNnIHwgZ3JlcCBcJiMzNDt1OF91bmRlciByYW5nZSB2YWx1ZVwmIzM0OyB8IHdjIC1sKVxuLVx0aWYgWyAhICR7dTh1bmRlcl9tc2d9IC1lcSAxIF07IHRoZW5cbi1cdFx0ZWNobyAtZSBcJiMzNDtGQUlMXFxudTggdW5kZXJmbG93IG5vdCBkZXRlY3RlZFwmIzM0OyBcdTAwM2VcdTAwMjYyXG4tXHRcdHJjPTFcbi1cdFx0dGVzdF9yY1xuJiM0MztcdGZvdW5kPSQoZ3JlcCAtYyBcJiMzNDtzeXNjdGxbLi9dZGVidWdbLi9ddGVzdF9zeXNjdGxbLi9dYm9vdF9pbnQ9MVwmIzM0OyAvcHJvYy9jbWRsaW5lKVxuJiM0MztcdGlmIFtbIFwmIzM0OyRmb3VuZFwmIzM0OyA9PSBcJiMzNDsxXCYjMzQ7IF1dOyB0aGVuXG4mIzQzO1x0XHRrdGFwX3ByaW50X21zZyBcJiMzNDskdDoga2VybmVsIHBhcmFtIGZvdW5kIG9uIGNtZGxpbmUgYnV0IHZhbHVlIGlzIG5vdCAxXCYjMzQ7XG4mIzQzO1x0XHRSRVQ9JEtTRlRfRkFJTFxuJiM0MztcdFx0cmV0dXJuXG4gXHRmaVxuIFxuLVx0ZWNobyBcJiMzNDtPS1wmIzM0O1xuLVx0cmV0dXJuIDBcbiYjNDM7XHRrdGFwX3ByaW50X21zZyBcJiMzNDskdDoga2VybmVsIG5vdCBib290ZWQgd2l0aCBzeXNjdGwuZGVidWcudGVzdF9zeXNjdGwuYm9vdF9pbnQ9MVwmIzM0O1xuJiM0MztcdFJFVD0kS1NGVF9TS0lQXG4gfVxuIFxuLXN5c2N0bF90ZXN0XzAwMTMoKVxuJiM0Mzt0ZXN0X3N5c2N0bF9tYWNyb19tYXRjaCgpXG4ge1xuLVx0VEFSR0VUPVwmIzM0OyR7U1lTQ1RMfS8kKGdldF90ZXN0X3RhcmdldCAwMDEzKVwmIzM0O1xuLVx0cmVzZXRfdmFsc1xuJiM0MztcdGxvY2FsIHQ9XCYjMzQ7JHtTWVNDVEx9L21hdGNoX2ludFwmIzM0O1xuJiM0MztcbiYjNDM7XHRbWyAtZiBcJiMzNDskdFwmIzM0OyBdXSB8fCB7IFJFVD0kS1NGVF9TS0lQOyByZXR1cm47IH1cbiBcbi1cdHJ1bl9pbnRfYXJyYXlfbm9fcGFydGlhbF91cGRhdGVcbiYjNDM7XHRhc3NlcnRfY29udGVudCBcJiMzNDskdFwmIzM0OyBcJiMzNDsxXCYjMzQ7IHx8IFJFVD0kS1NGVF9GQUlMXG4gfVxuIFxuLWxpc3RfdGVzdHMoKVxuJiM0MztydW5fb25lKClcbiB7XG4tXHRlY2hvIFwmIzM0O1Rlc3QgSUQgbGlzdDpcJiMzNDtcbi1cdGVjaG9cbi1cdGVjaG8gXCYjMzQ7VEVTVF9JRCB4IE5VTV9URVNUXCYjMzQ7XG4tXHRlY2hvIFwmIzM0O1RFU1RfSUQ6ICAgVGVzdCBJRFwmIzM0O1xuLVx0ZWNobyBcJiMzNDtOVU1fVEVTVFM6IFJlY29tbWVuZGVkIG51bWJlciBvZiB0aW1lcyB0byBydW4gdGhlIHRlc3RcJiMzNDtcbi1cdGVjaG9cbi1cdGVjaG8gXCYjMzQ7MDAwMSB4ICQoZ2V0X3Rlc3RfY291bnQgMDAwMSkgLSB0ZXN0cyBwcm9jX2RvaW50dmVjX21pbm1heCgpXCYjMzQ7XG4tXHRlY2hvIFwmIzM0OzAwMDIgeCAkKGdldF90ZXN0X2NvdW50IDAwMDIpIC0gdGVzdHMgcHJvY19kb3N0cmluZygpXCYjMzQ7XG4tXHRlY2hvIFwmIzM0OzAwMDMgeCAkKGdldF90ZXN0X2NvdW50IDAwMDMpIC0gdGVzdHMgcHJvY19kb2ludHZlYygpXCYjMzQ7XG4tXHRlY2hvIFwmIzM0OzAwMDQgeCAkKGdldF90ZXN0X2NvdW50IDAwMDQpIC0gdGVzdHMgcHJvY19kb3VpbnR2ZWMoKVwmIzM0O1xuLVx0ZWNobyBcJiMzNDswMDA1IHggJChnZXRfdGVzdF9jb3VudCAwMDA1KSAtIHRlc3RzIHByb2NfZG91aW50dmVjKCkgYXJyYXlcJiMzNDtcbi1cdGVjaG8gXCYjMzQ7MDAwNiB4ICQoZ2V0X3Rlc3RfY291bnQgMDAwNikgLSB0ZXN0cyBwcm9jX2RvX2xhcmdlX2JpdG1hcCgpXCYjMzQ7XG4tXHRlY2hvIFwmIzM0OzAwMDcgeCAkKGdldF90ZXN0X2NvdW50IDAwMDcpIC0gdGVzdHMgc2V0dGluZyBzeXNjdGwgZnJvbSBrZXJuZWwgYm9vdCBwYXJhbVwmIzM0O1xuLVx0ZWNobyBcJiMzNDswMDA4IHggJChnZXRfdGVzdF9jb3VudCAwMDA4KSAtIHRlc3RzIHN5c2N0bCBtYWNybyB2YWx1ZXMgbWF0Y2hcJiMzNDtcbi1cdGVjaG8gXCYjMzQ7MDAwOSB4ICQoZ2V0X3Rlc3RfY291bnQgMDAwOSkgLSB0ZXN0cyBzeXNjdCB1bnJlZ2lzdGVyXCYjMzQ7XG4tXHRlY2hvIFwmIzM0OzAwMTAgeCAkKGdldF90ZXN0X2NvdW50IDAwMTApIC0gdGVzdHMgc3lzY3QgbW91bnQgcG9pbnRcJiMzNDtcbi1cdGVjaG8gXCYjMzQ7MDAxMSB4ICQoZ2V0X3Rlc3RfY291bnQgMDAxMSkgLSB0ZXN0cyBlbXB0eSBkaXJlY3Rvcmllc1wmIzM0O1xuLVx0ZWNobyBcJiMzNDswMDEyIHggJChnZXRfdGVzdF9jb3VudCAwMDEyKSAtIHRlc3RzIHJhbmdlIGNoZWNrIGZvciB1OCBwcm9jX2hhbmRsZXJcJiMzNDtcbi1cdGVjaG8gXCYjMzQ7MDAxMyB4ICQoZ2V0X3Rlc3RfY291bnQgMDAxMykgLSB0ZXN0cyBwYXJ0aWFsbHkgdXBkYXRlIHZlY3RvcnMgb24gZXJyb3JcJiMzNDtcbiYjNDM7XHRsb2NhbCBuYW1lPSQxXG4mIzQzO1xuJiM0MztcdCMgU3Vic2hlbGw6IGEgdGVzdCBjYW5ub3QgbGVhayB2YXJzL2N3ZC90cmFwcyBpbnRvIHRoZSBuZXh0IG9uZSwgYW5kIGFuXG4mIzQzO1x0IyBhY2NpZGVudGFsIGBleGl0YCBpbnNpZGUgYSB0ZXN0IGtpbGxzIG9ubHkgaXRzIG93biBzdWJzaGVsbC5cbiYjNDM7XHQoIFJFVD0kS1NGVF9QQVNTOyBcJiMzNDskbmFtZVwmIzM0OzsgZXhpdCAkUkVUIClcbiYjNDM7XG4mIzQzO1x0Y2FzZSAkPyBpblxuJiM0MztcdFwmIzM0OyRLU0ZUX1BBU1NcJiMzNDspIGt0YXBfdGVzdF9wYXNzIFwmIzM0OyRuYW1lXCYjMzQ7IDs7XG4mIzQzO1x0XCYjMzQ7JEtTRlRfU0tJUFwmIzM0Oykga3RhcF90ZXN0X3NraXAgXCYjMzQ7JG5hbWVcJiMzNDsgOztcbiYjNDM7XHQqKSAgICAgICAgICBrdGFwX3Rlc3RfZmFpbCBcJiMzNDskbmFtZVwmIzM0OyA7O1xuJiM0MztcdGVzYWNcbiB9XG4gXG4gdXNhZ2UoKVxuIHtcbi1cdE5VTV9URVNUUz0kKGdyZXAgLW8gJiMzOTsgJiMzOTsgXHUwMDNjXHUwMDNjXHUwMDNjXCYjMzQ7JEFMTF9URVNUU1wmIzM0OyB8IGdyZXAgLWMgLilcbi1cdGxldCBOVU1fVEVTVFM9JE5VTV9URVNUUyYjNDM7MVxuLVx0TUFYX1RFU1Q9JChwcmludGYgXCYjMzQ7JTA0ZFxcblwmIzM0OyAkTlVNX1RFU1RTKVxuLVx0ZWNobyBcJiMzNDtVc2FnZTogJDAgWyAtdCBcdTAwM2M0LW51bWJlci1kaWdpdFx1MDAzZSBdIHwgWyAtdyBcdTAwM2M0LW51bWJlci1kaWdpdFx1MDAzZSBdIHxcJiMzNDtcbi1cdGVjaG8gXCYjMzQ7XHRcdCBbIC1zIFx1MDAzYzQtbnVtYmVyLWRpZ2l0XHUwMDNlIF0gfCBbIC1jIFx1MDAzYzQtbnVtYmVyLWRpZ2l0XHUwMDNlIFx1MDAzY3Rlc3QtIGNvdW50XHUwMDNlXCYjMzQ7XG4tXHRlY2hvIFwmIzM0OyAgICAgICAgICAgWyBhbGwgXSBbIC1oIHwgLS1oZWxwIF0gWyAtbCBdXCYjMzQ7XG4tXHRlY2hvIFwmIzM0O1wmIzM0O1xuLVx0ZWNobyBcJiMzNDtWYWxpZCB0ZXN0czogMDAwMS0kTUFYX1RFU1RcJiMzNDtcbi1cdGVjaG8gXCYjMzQ7XCYjMzQ7XG4tXHRlY2hvIFwmIzM0OyAgICBhbGwgICAgIFJ1bnMgYWxsIHRlc3RzIChkZWZhdWx0KVwmIzM0O1xuLVx0ZWNobyBcJiMzNDsgICAgLXQgICAgICBSdW4gdGVzdCBJRCB0aGUgcmVjb21tZW5kZWQgbnVtYmVyIG9mIHRpbWVzXCYjMzQ7XG4tXHRlY2hvIFwmIzM0OyAgICAtdyAgICAgIFdhdGNoIHRlc3QgSUQgcnVuIHVudGlsIGl0IHJ1bnMgaW50byBhbiBlcnJvclwmIzM0O1xuLVx0ZWNobyBcJiMzNDsgICAgLWMgICAgICBSdW4gdGVzdCBJRCBvbmNlXCYjMzQ7XG4tXHRlY2hvIFwmIzM0OyAgICAtcyAgICAgIFJ1biB0ZXN0IElEIHggdGVzdC1jb3VudCBudW1iZXIgb2YgdGltZXNcJiMzNDtcbi1cdGVjaG8gXCYjMzQ7ICAgIC1sICAgICAgTGlzdCBhbGwgdGVzdCBJRCBsaXN0XCYjMzQ7XG4tXHRlY2hvIFwmIzM0OyAtaHwtLWhlbHAgIEhlbHBcJiMzNDtcbi1cdGVjaG9cbi1cdGVjaG8gXCYjMzQ7SWYgYW4gZXJyb3IgZXZlcnkgb2NjdXJzIGV4ZWN1dGlvbiB3aWxsIGltbWVkaWF0ZWx5IHRlcm1pbmF0ZS5cJiMzNDtcbi1cdGVjaG8gXCYjMzQ7SWYgeW91IGFyZSBhZGRpbmcgYSBuZXcgdGVzdCB0cnkgdXNpbmcgLXcgXHUwMDNjdGVzdC1JRFx1MDAzZSBmaXJzdCB0b1wmIzM0O1xuLVx0ZWNobyBcJiMzNDttYWtlIHN1cmUgdGhlIHRlc3QgcGFzc2VzIGEgc2VyaWVzIG9mIHRlc3RzLlwmIzM0O1xuLVx0ZWNob1xuLVx0ZWNobyBFeGFtcGxlIHVzZXM6XG4tXHRlY2hvXG4tXHRlY2hvIFwmIzM0OyRURVNUX05BTUUuc2ggICAgICAgICAgICAtLSBleGVjdXRlcyBhbGwgdGVzdHNcJiMzNDtcbi1cdGVjaG8gXCYjMzQ7JFRFU1RfTkFNRS5zaCAtdCAwMDAyICAgIC0tIEV4ZWN1dGVzIHRlc3QgSUQgMDAwMiB0aGUgcmVjb21tZW5kZWQgbnVtYmVyIG9mIHRpbWVzXCYjMzQ7XG4tXHRlY2hvIFwmIzM0OyRURVNUX05BTUUuc2ggLXcgMDAwMiAgICAtLSBXYXRjaCB0ZXN0IElEIDAwMDIgcnVuIHVudGlsIGFuIGVycm9yIG9jY3Vyc1wmIzM0O1xuLVx0ZWNobyBcJiMzNDskVEVTVF9OQU1FLnNoIC1zIDAwMDIgICAgLS0gUnVuIHRlc3QgSUQgMDAwMiBvbmNlXCYjMzQ7XG4tXHRlY2hvIFwmIzM0OyRURVNUX05BTUUuc2ggLWMgMDAwMiAzICAtLSBSdW4gdGVzdCBJRCAwMDAyIHRocmVlIHRpbWVzXCYjMzQ7XG4tXHRlY2hvXG4tXHRsaXN0X3Rlc3RzXG4tXHRleGl0IDFcbi19XG4mIzQzO1x0Y2F0IFx1MDAzY1x1MDAzYy1FT0ZcbiYjNDM7XHRVc2FnZTogJDAgWy1yIE5dIFstbF0gWy10IFRdIFstcyBOXSBbLWh8LS1oZWxwXVxuIFxuLWZ1bmN0aW9uIHRlc3RfbnVtKClcbi17XG4tXHRyZT0mIzM5O15bMC05XSYjNDM7JCYjMzk7XG4tXHRpZiAhIFtbICQxID1+ICRyZSBdXTsgdGhlblxuLVx0XHR1c2FnZVxuLVx0Zmlcbi19XG4tZnVuY3Rpb24gcmVtb3ZlX2xlYWRpbmdfemVyb3MoKVxuLXtcbi1cdGVjaG8gJDEgfCBzZWQgJiMzOTtzL14wKi8vJiMzOTtcbi19XG4mIzQzO1x0UnVucyBldmVyeSBhdXRvLWRpc2NvdmVyZWQgdGVzdF8qIGZ1bmN0aW9uLiBTZXR0aW5nIFNZU0NUTF9URVNUUyB3aWxsXG4mIzQzO1x0b3ZlcnJpZGUgdGhlIGRlZmF1bHQgYW5kIHBhc3NpbmcgLXQgd2lsbCBvdmVycmlkZSBib3RoIGVudiB2YXIgYW5kIHRoZVxuJiM0MztcdGRlZmF1bHQuXG4gXG4tZnVuY3Rpb24gZ2V0X3Rlc3RfY291bnQoKVxuLXtcbi1cdHRlc3RfbnVtICQxXG4tXHRhd2tfZmllbGQ9JChyZW1vdmVfbGVhZGluZ196ZXJvcyAkMSlcbi1cdFRFU1RfREFUQT0kKGVjaG8gJEFMTF9URVNUUyB8IGF3ayAmIzM5O3twcmludCAkJiMzOTskYXdrX2ZpZWxkJiMzOTt9JiMzOTspXG4tXHRlY2hvICR7VEVTVF9EQVRBfSB8IGF3ayAtRlwmIzM0OzpcJiMzNDsgJiMzOTt7cHJpbnQgJDJ9JiMzOTtcbi19XG4mIzQzO1x0ICAgIC1yIE4gICAgICAgICAgcmVwZWF0IHNlbGVjdGVkIHRlc3RzIE4gdGltZXMgKGRlZmF1bHQgMSlcbiYjNDM7XHQgICAgLWwgICAgICAgICAgICBsaXN0IGRpc2NvdmVyZWQgdGVzdHNcbiYjNDM7XHQgICAgLXQgVCAgICAgICAgICBzcGFjZSBzZXBhcmF0ZWQgdGVzdHMgbGlzdC4gRm9yIGV4YW1wbGUgXCYjMzQ7dGVzdF8xIHRlc3RfMlwmIzM0O1xuJiM0MztcdCAgICAtcyBOICAgICAgICAgIGJhc2Ugc2VlZCBmb3IgdGhlIHJhbmRvbWl6ZWQgYml0bWFwIGl0ZXJhdGlvbnMuXG4mIzQzO1x0ICAgIC1oLCAtLWhlbHAgICAgaGVscFxuIFxuLWZ1bmN0aW9uIGdldF90ZXN0X2VuYWJsZWQoKVxuLXtcbi1cdHRlc3RfbnVtICQxXG4tXHRhd2tfZmllbGQ9JChyZW1vdmVfbGVhZGluZ196ZXJvcyAkMSlcbi1cdFRFU1RfREFUQT0kKGVjaG8gJEFMTF9URVNUUyB8IGF3ayAmIzM5O3twcmludCAkJiMzOTskYXdrX2ZpZWxkJiMzOTt9JiMzOTspXG4tXHRlY2hvICR7VEVTVF9EQVRBfSB8IGF3ayAtRlwmIzM0OzpcJiMzNDsgJiMzOTt7cHJpbnQgJDN9JiMzOTtcbiYjNDM7XHQgICAgU1lTQ1RMX1RFU1RTPSYjMzk7dGVzdF8xIHRlc3RfMiYjMzk7ICQwICBydW4gb25seSB0aGUgbmFtZWQgdGVzdHNcbiYjNDM7XHRFT0ZcbiB9XG4gXG4tZnVuY3Rpb24gZ2V0X3Rlc3RfdGFyZ2V0KClcbiYjNDM7bGlzdF90ZXN0cygpXG4ge1xuLVx0dGVzdF9udW0gJDFcbi1cdGF3a19maWVsZD0kKHJlbW92ZV9sZWFkaW5nX3plcm9zICQxKVxuLVx0VEVTVF9EQVRBPSQoZWNobyAkQUxMX1RFU1RTIHwgYXdrICYjMzk7e3ByaW50ICQmIzM5OyRhd2tfZmllbGQmIzM5O30mIzM5Oylcbi1cdGVjaG8gJHtURVNUX0RBVEF9IHwgYXdrIC1GXCYjMzQ7OlwmIzM0OyAmIzM5O3twcmludCAkNH0mIzM5O1xuJiM0MztcdGVjaG8gXCYjMzQ7RGlzY292ZXJlZCB0ZXN0czpcJiMzNDtcbiYjNDM7XHRsb2NhbCB0XG4mIzQzO1x0Zm9yIHQgaW4gJEFMTF9URVNUUzsgZG9cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7ICAkdFwmIzM0O1xuJiM0MztcdGRvbmVcbiB9XG4gXG4tZnVuY3Rpb24gZ2V0X3Rlc3Rfc2tpcF9ub190YXJnZXQoKVxuJiM0MztjaGVja19yZXFzKClcbiB7XG4tXHR0ZXN0X251bSAkMVxuLVx0YXdrX2ZpZWxkPSQocmVtb3ZlX2xlYWRpbmdfemVyb3MgJDEpXG4tXHRURVNUX0RBVEE9JChlY2hvICRBTExfVEVTVFMgfCBhd2sgJiMzOTt7cHJpbnQgJCYjMzk7JGF3a19maWVsZCYjMzk7fSYjMzk7KVxuLVx0ZWNobyAke1RFU1RfREFUQX0gfCBhd2sgLUZcJiMzNDs6XCYjMzQ7ICYjMzk7e3ByaW50ICQ1fSYjMzk7XG4tfVxuJiM0MztcdGxvY2FsIHVpZFxuJiM0MztcdHVpZD0kKGlkIC11KVxuIFxuLWZ1bmN0aW9uIHNraXBfdGVzdCgpXG4te1xuLVx0VEVTVF9JRD0kMVxuLVx0VEVTVF9UQVJHRVQ9JDJcbi1cdGlmIHRhcmdldF9leGlzdHMgJFRFU1RfVEFSR0VUICRURVNUX0lEOyB0aGVuXG4tXHRcdFRFU1RfU0tJUD0kKGdldF90ZXN0X3NraXBfbm9fdGFyZ2V0ICRURVNUX0lEKVxuLVx0XHRpZiBbWyAkVEVTVF9TS0lQIC1lcSBcJiMzNDsxXCYjMzQ7IF1dOyB0aGVuXG4tXHRcdFx0ZWNobyBcJiMzNDtUYXJnZXQgJFRFU1RfVEFSR0VUIGZvciB0ZXN0ICRURVNUX0lEIGRvZXMgbm90IGV4aXN0IC4uLiBTS0lQUElOR1wmIzM0O1xuLVx0XHRcdHJldHVybiAwXG4tXHRcdGZpXG4mIzQzO1x0aWYgWyBcJiMzNDskdWlkXCYjMzQ7IC1uZSAwIF07IHRoZW5cbiYjNDM7XHRcdGt0YXBfc2tpcF9hbGwgXCYjMzQ7bXVzdCBiZSBydW4gYXMgcm9vdFwmIzM0O1xuJiM0MztcdFx0ZXhpdCBcJiMzNDskS1NGVF9TS0lQXCYjMzQ7XG4mIzQzO1x0ZmlcbiYjNDM7XG4mIzQzO1x0aWYgISB3aGljaCBnZXRjb25mIFx1MDAzZSAvZGV2L251bGwgMlx1MDAzZVx1MDAyNjE7IHRoZW5cbiYjNDM7XHRcdGt0YXBfc2tpcF9hbGwgXCYjMzQ7JDA6IFlvdSBuZWVkIGdldGNvbmYgaW5zdGFsbGVkXCYjMzQ7XG4mIzQzO1x0XHRleGl0IFwmIzM0OyRLU0ZUX1NLSVBcJiMzNDtcbiYjNDM7XHRmaVxuJiM0MztcbiYjNDM7XHRpZiAhIHdoaWNoIGRpZmYgXHUwMDNlIC9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MTsgdGhlblxuJiM0MztcdFx0a3RhcF9za2lwX2FsbCBcJiMzNDskMDogWW91IG5lZWQgZGlmZiBpbnN0YWxsZWRcJiMzNDtcbiYjNDM7XHRcdGV4aXQgXCYjMzQ7JEtTRlRfU0tJUFwmIzM0O1xuIFx0Zmlcbi1cdHJldHVybiAxXG4gfVxuIFxuLWZ1bmN0aW9uIHJ1bl9hbGxfdGVzdHMoKVxuJiM0MztjaGVja19hcmdzKCkgICMgXHUwMDNjcmVwZWF0XHUwMDNlIFx1MDAzY3NlbGVjdGVkXHUwMDNlIFx1MDAzY3NlZWRcdTAwM2VcbiB7XG4tXHRmb3IgaSBpbiAkQUxMX1RFU1RTIDsgZG9cbi1cdFx0VEVTVF9JRD0ke2klOio6KjoqOip9XG4tXHRcdEVOQUJMRUQ9JChnZXRfdGVzdF9lbmFibGVkICRURVNUX0lEKVxuLVx0XHRURVNUX0NPVU5UPSQoZ2V0X3Rlc3RfY291bnQgJFRFU1RfSUQpXG4tXHRcdFRFU1RfVEFSR0VUPSQoZ2V0X3Rlc3RfdGFyZ2V0ICRURVNUX0lEKVxuLVxuLVx0XHRpZiBbWyAkRU5BQkxFRCAtZXEgXCYjMzQ7MVwmIzM0OyBdXTsgdGhlblxuLVx0XHRcdHRlc3RfY2FzZSAkVEVTVF9JRCAkVEVTVF9DT1VOVCAkVEVTVF9UQVJHRVRcbiYjNDM7XHRsb2NhbCByZXBlYXRfYXJnPVwmIzM0OyQxXCYjMzQ7XG4mIzQzO1x0bG9jYWwgc2VsZWN0ZWRfYXJnPVwmIzM0OyQyXCYjMzQ7XG4mIzQzO1x0bG9jYWwgc2VlZF9hcmc9XCYjMzQ7JDNcJiMzNDtcbiYjNDM7XHRsb2NhbCB0XG4mIzQzO1xuJiM0MztcdGlmIFsgLXogXCYjMzQ7JHNlbGVjdGVkX2FyZ1wmIzM0OyBdOyB0aGVuXG4mIzQzO1x0XHRrdGFwX2V4aXRfZmFpbF9tc2cgXCYjMzQ7bm8gdGVzdCBzZWxlY3RlZFwmIzM0O1xuJiM0MztcdGZpXG4mIzQzO1xuJiM0MztcdGlmICEgW1sgXCYjMzQ7JHJlcGVhdF9hcmdcJiMzNDsgPX4gXlswLTldJiM0MzskIF1dOyB0aGVuXG4mIzQzO1x0XHRrdGFwX2V4aXRfZmFpbF9tc2cgXCYjMzQ7cmVwZWF0IGFyZ3VtZW50ICYjMzk7JHJlcGVhdF9hcmcmIzM5OyBpcyBub3QgYSBudW1iZXJcJiMzNDtcbiYjNDM7XHRmaVxuJiM0MztcbiYjNDM7XHRpZiAhIFtbIFwmIzM0OyRzZWVkX2FyZ1wmIzM0OyA9fiBeWzAtOV0mIzQzOyQgXV07IHRoZW5cbiYjNDM7XHRcdGt0YXBfZXhpdF9mYWlsX21zZyBcJiMzNDtzZWVkIGFyZ3VtZW50ICYjMzk7JHNlZWRfYXJnJiMzOTsgaXMgbm90IGEgbnVtYmVyXCYjMzQ7XG4mIzQzO1x0ZmlcbiYjNDM7XG4mIzQzO1x0Zm9yIHQgaW4gJHNlbGVjdGVkX2FyZzsgZG9cbiYjNDM7XHRcdGlmICEgZGVjbGFyZSAtRiBcJiMzNDskdFwmIzM0OyBcdTAwM2UgL2Rldi9udWxsOyB0aGVuXG4mIzQzO1x0XHRcdGt0YXBfZXhpdF9mYWlsX21zZyBcJiMzNDt1bmtub3duIHNlbGVjdGVkIHRlc3QgJiMzOTskdCYjMzk7XCYjMzQ7XG4gXHRcdGZpXG4gXHRkb25lXG4gfVxuIFxuLWZ1bmN0aW9uIHdhdGNoX2xvZygpXG4mIzQzO2FsbG93X3VzZXJfZGVmYXVsdHMoKVxuIHtcbi1cdGlmIFsgJCMgLW5lIDMgXTsgdGhlblxuLVx0XHRjbGVhclxuJiM0MztcdGlmIFsgLXogXCYjMzQ7JHtNT0RVTEVfRElSfVwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0XHRNT0RVTEVfRElSPVwmIzM0Oy9zeXMvbW9kdWxlL3Rlc3Rfc3lzY3RsL1wmIzM0O1xuJiM0MztcdGZpXG4mIzQzO1x0aWYgWyAteiBcJiMzNDske1NZU0NUTH1cJiMzNDsgXTsgdGhlblxuJiM0MztcdFx0U1lTQ1RMPVwmIzM0Oy9wcm9jL3N5cy9kZWJ1Zy90ZXN0X3N5c2N0bFwmIzM0O1xuJiM0MztcdGZpXG4mIzQzO1x0aWYgWyAteiBcJiMzNDske1BST0RfU1lTQ1RMfVwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0XHRQUk9EX1NZU0NUTD1cJiMzNDsvcHJvYy9zeXNcJiMzNDtcbiYjNDM7XHRmaVxuJiM0MztcdGlmIFsgLXogXCYjMzQ7JHtXUklURVNfU1RSSUNUfVwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0XHRXUklURVNfU1RSSUNUPVwmIzM0OyR7UFJPRF9TWVNDVEx9L2tlcm5lbC9zeXNjdGxfd3JpdGVzX3N0cmljdFwmIzM0O1xuJiM0MztcdGZpXG4mIzQzO1x0aWYgWyAteiBcJiMzNDske0JJVE1BUF9JVEVSQVRJT05TfVwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0XHRCSVRNQVBfSVRFUkFUSU9OUz01MFxuJiM0MztcdGZpXG4mIzQzO1x0IyBTZXQgc2VlZCBmb3IgYml0bWFwIHJhbmRvbSB0ZXN0c1xuJiM0MztcdGlmIFsgLXogXCYjMzQ7JHtCSVRNQVBfU0VFRH1cJiMzNDsgXTsgdGhlblxuJiM0MztcdFx0QklUTUFQX1NFRUQ9JFJBTkRPTVxuIFx0Zmlcbi1cdGRhdGVcbi1cdGVjaG8gXCYjMzQ7UnVubmluZyB0ZXN0OiAkMiAtIHJ1biAjJDFcJiMzNDtcbiB9XG4gXG4tZnVuY3Rpb24gd2F0Y2hfY2FzZSgpXG4mIzQzO2NoZWNrX3Byb2R1Y3Rpb25fc3lzY3RsX3dyaXRlc19zdHJpY3QoKVxuIHtcbi1cdGk9MFxuLVx0d2hpbGUgWyAxIF07IGRvXG4tXG4tXHRcdGlmIFsgJCMgLWVxIDEgXTsgdGhlblxuLVx0XHRcdHRlc3RfbnVtICQxXG4tXHRcdFx0d2F0Y2hfbG9nICRpICR7VEVTVF9OQU1FfV90ZXN0XyQxXG4tXHRcdFx0JHtURVNUX05BTUV9X3Rlc3RfJDFcbi1cdFx0ZWxzZVxuLVx0XHRcdHdhdGNoX2xvZyAkaSBhbGxcbi1cdFx0XHRydW5fYWxsX3Rlc3RzXG4mIzQzO1x0aWYgWyAhIC1lIFwmIzM0OyR7V1JJVEVTX1NUUklDVH1cJiMzNDsgXTsgdGhlblxuJiM0MztcdFx0a3RhcF9wcmludF9tc2cgXCYjMzQ7JHtXUklURVNfU1RSSUNUfSBtaXNzaW5nLCBza2lwcGluZyBzdHJpY3Qgd3JpdGUgY2hlY2sgKG9sZCBrZXJuZWw/KVwmIzM0O1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdG9sZF9zdHJpY3Q9JChjYXQgXCYjMzQ7JHtXUklURVNfU1RSSUNUfVwmIzM0OylcbiYjNDM7XHRcdGlmIFsgXCYjMzQ7JG9sZF9zdHJpY3RcJiMzNDsgIT0gXCYjMzQ7MVwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0XHRcdGt0YXBfcHJpbnRfbXNnIFwmIzM0O2ZvcmNpbmcgJHtXUklURVNfU1RSSUNUfSB0byAxICh3YXMgJHtvbGRfc3RyaWN0fSlcJiMzNDtcbiYjNDM7XHRcdFx0ZWNobyBcJiMzNDsxXCYjMzQ7IFx1MDAzZSBcJiMzNDske1dSSVRFU19TVFJJQ1R9XCYjMzQ7XG4gXHRcdGZpXG4tXHRcdGxldCBpPSRpJiM0MzsxXG4tXHRkb25lXG4mIzQzO1x0ZmlcbiYjNDM7XG4mIzQzO1x0aWYgWyAteiBcJiMzNDske1BBR0VfU0laRX1cJiMzNDsgXTsgdGhlblxuJiM0MztcdFx0UEFHRV9TSVpFPSQoZ2V0Y29uZiBQQUdFU0laRSlcbiYjNDM7XHRmaVxuJiM0MztcdGlmIFsgLXogXCYjMzQ7JHtNQVhfRElHSVRTfVwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0XHRNQVhfRElHSVRTPSQoKFBBR0VfU0laRSAvIDgpKVxuJiM0MztcdGZpXG4mIzQzO1x0aWYgWyAteiBcJiMzNDske0lOVF9NQVh9XCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRcdElOVF9NQVg9JChnZXRjb25mIElOVF9NQVgpXG4mIzQzO1x0ZmlcbiYjNDM7XHRpZiBbIC16IFwmIzM0OyR7VUlOVF9NQVh9XCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRcdFVJTlRfTUFYPSQoZ2V0Y29uZiBVSU5UX01BWClcbiYjNDM7XHRmaVxuIH1cbiBcbi1mdW5jdGlvbiB0ZXN0X2Nhc2UoKVxuJiM0Mztsb2FkX3JlcV9tb2QoKVxuIHtcbi1cdFRFU1RfSUQ9JDFcbi1cdE5VTV9URVNUUz0kMlxuLVx0VEFSR0VUPSQzXG4tXG4tXHRpZiBza2lwX3Rlc3QgJFRFU1RfSUQgJFRBUkdFVDsgdGhlblxuLVx0XHRyZXR1cm5cbiYjNDM7XHRpZiBbICEgLWQgXCYjMzQ7JHtTWVNDVEx9XCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRcdGlmICEgbW9kcHJvYmUgLXEgLW4gXCYjMzQ7JHtURVNUX0RSSVZFUn1cJiMzNDs7IHRoZW5cbiYjNDM7XHRcdFx0a3RhcF9za2lwX2FsbCBcJiMzNDttb2R1bGUgJHtURVNUX0RSSVZFUn0gbm90IGZvdW5kLiBcXFxuJiM0MztcdFx0XHRcdFlvdSBtdXN0IHNldCBDT05GSUdfVEVTVF9TWVNDVEw9bSBpbiB5b3VyIGtlcm5lbFwmIzM0O1xuJiM0MztcdFx0XHRleGl0IFwmIzM0OyRLU0ZUX1NLSVBcJiMzNDtcbiYjNDM7XHRcdGZpXG4mIzQzO1x0XHRpZiAhIG1vZHByb2JlIFwmIzM0OyR7VEVTVF9EUklWRVJ9XCYjMzQ7OyB0aGVuXG4mIzQzO1x0XHRcdGt0YXBfZXhpdF9mYWlsX21zZyBcJiMzNDttb2Rwcm9iZSAke1RFU1RfRFJJVkVSfSBmYWlsZWRcJiMzNDtcbiYjNDM7XHRcdGZpXG4gXHRmaVxuLVxuLVx0aT0wXG4tXHR3aGlsZSBbICRpIC1sdCAkTlVNX1RFU1RTIF07IGRvXG4tXHRcdHRlc3RfbnVtICRURVNUX0lEXG4tXHRcdHdhdGNoX2xvZyAkaSAke1RFU1RfTkFNRX1fdGVzdF8ke1RFU1RfSUR9IG5vY2xlYXJcbi1cdFx0UlVOX1RFU1Q9JHtURVNUX05BTUV9X3Rlc3RfJHtURVNUX0lEfVxuLVx0XHQkUlVOX1RFU1Rcbi1cdFx0bGV0IGk9JGkmIzQzOzFcbi1cdGRvbmVcbiB9XG4gXG4tZnVuY3Rpb24gcGFyc2VfYXJncygpXG4mIzQzOyMgQ2xlYW51cCBvbmx5ISBEbyBub3QgY2FsbCBleGl0IGhlcmUgb3IgaXQgd2lsbCBzaWxlbnRseSBvdmVycmlkZSBLVEFQIGV4aXQgc3RhdHVzXG4mIzQzO3Jlc3RvcmVfc3lzY3RsX3dyaXRlc19zdHJpY3QoKVxuIHtcbi1cdGlmIFsgJCMgLWVxIDAgXTsgdGhlblxuLVx0XHRydW5fYWxsX3Rlc3RzXG4tXHRlbHNlXG4tXHRcdGlmIFtbIFwmIzM0OyQxXCYjMzQ7ID0gXCYjMzQ7YWxsXCYjMzQ7IF1dOyB0aGVuXG4tXHRcdFx0cnVuX2FsbF90ZXN0c1xuLVx0XHRlbGlmIFtbIFwmIzM0OyQxXCYjMzQ7ID0gXCYjMzQ7LXdcJiMzNDsgXV07IHRoZW5cbi1cdFx0XHRzaGlmdFxuLVx0XHRcdHdhdGNoX2Nhc2UgJEBcbi1cdFx0ZWxpZiBbWyBcJiMzNDskMVwmIzM0OyA9IFwmIzM0Oy10XCYjMzQ7IF1dOyB0aGVuXG4tXHRcdFx0c2hpZnRcbi1cdFx0XHR0ZXN0X251bSAkMVxuLVx0XHRcdHRlc3RfY2FzZSAkMSAkKGdldF90ZXN0X2NvdW50ICQxKSAkKGdldF90ZXN0X3RhcmdldCAkMSlcbi1cdFx0ZWxpZiBbWyBcJiMzNDskMVwmIzM0OyA9IFwmIzM0Oy1jXCYjMzQ7IF1dOyB0aGVuXG4tXHRcdFx0c2hpZnRcbi1cdFx0XHR0ZXN0X251bSAkMVxuLVx0XHRcdHRlc3RfbnVtICQyXG4tXHRcdFx0dGVzdF9jYXNlICQxICQyICQoZ2V0X3Rlc3RfdGFyZ2V0ICQxKVxuLVx0XHRlbGlmIFtbIFwmIzM0OyQxXCYjMzQ7ID0gXCYjMzQ7LXNcJiMzNDsgXV07IHRoZW5cbi1cdFx0XHRzaGlmdFxuLVx0XHRcdHRlc3RfY2FzZSAkMSAxICQoZ2V0X3Rlc3RfdGFyZ2V0ICQxKVxuLVx0XHRlbGlmIFtbIFwmIzM0OyQxXCYjMzQ7ID0gXCYjMzQ7LWxcJiMzNDsgXV07IHRoZW5cbi1cdFx0XHRsaXN0X3Rlc3RzXG4tXHRcdGVsaWYgW1sgXCYjMzQ7JDFcJiMzNDsgPSBcJiMzNDstaFwmIzM0OyB8fCBcJiMzNDskMVwmIzM0OyA9IFwmIzM0Oy0taGVscFwmIzM0OyBdXTsgdGhlblxuLVx0XHRcdHVzYWdlXG4tXHRcdGVsc2Vcbi1cdFx0XHR1c2FnZVxuLVx0XHRmaVxuJiM0MztcdGlmIFsgLW4gXCYjMzQ7JHtvbGRfc3RyaWN0fVwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0XHRlY2hvIFwmIzM0OyR7b2xkX3N0cmljdH1cJiMzNDsgXHUwMDNlIFwmIzM0OyR7V1JJVEVTX1NUUklDVH1cJiMzNDtcbiBcdGZpXG4gfVxuIFxuLXRlc3RfcmVxc1xuIGFsbG93X3VzZXJfZGVmYXVsdHNcbiYjNDM7XG4mIzQzOyMgRWFjaCBiaXRtYXAgaXRlcmF0aW9uIGlzIG9uZSBmdW5jdGlvbiB0byBnZW5lcmF0ZSBvbmUgS1RBUCByZXBvcnQgcGVyIGl0ZXJhdGlvblxuJiM0Mztmb3IgaSBpbiAkKHNlcSAxIFwmIzM0OyRCSVRNQVBfSVRFUkFUSU9OU1wmIzM0Oyk7IGRvXG4mIzQzO1x0ZXZhbCBcJiMzNDt0ZXN0X2JpdG1hcF9yYW5nZV9jaGVja18kKHByaW50ZiAmIzM5OyUwMmQmIzM5OyBcJiMzNDskaVwmIzM0OykoKSBcXFxuJiM0MztcdFx0eyBcXFxuJiM0MztcdFx0XHRiaXRtYXBfcmFuZ2VfY2hlY2tfb25jZSAkaTsgXFxcbiYjNDM7XHRcdH1cJiMzNDtcbiYjNDM7ZG9uZVxuJiM0MztcbiYjNDM7IyBEaXNjb3ZlciB0ZXN0XyogZnVuY3Rpb25zIGFib3ZlIHRoaXMgbGluZVxuJiM0MztBTExfVEVTVFM9JChkZWNsYXJlIC1GIHwgYXdrICYjMzk7e3ByaW50ICQzfSYjMzk7IHwgZ3JlcCAmIzM5O150ZXN0XyYjMzk7IHwgc29ydClcbiYjNDM7XG4mIzQzO1JFUEVBVD0xXG4mIzQzO3doaWxlIFsgJCMgLWd0IDAgXTsgZG9cbiYjNDM7XHRjYXNlIFwmIzM0OyQxXCYjMzQ7IGluXG4mIzQzO1x0LXIgKVxuJiM0MztcdFx0c2hpZnRcbiYjNDM7XHRcdFJFUEVBVD0kMVxuJiM0MztcdFx0OztcbiYjNDM7XHQtbCApXG4mIzQzO1x0XHRsaXN0X3Rlc3RzXG4mIzQzO1x0XHRleGl0IDBcbiYjNDM7XHRcdDs7XG4mIzQzO1x0LWggfCAtLWhlbHAgKVxuJiM0MztcdFx0dXNhZ2VcbiYjNDM7XHRcdGV4aXQgMFxuJiM0MztcdFx0OztcbiYjNDM7XHQtdCApXG4mIzQzO1x0XHRzaGlmdFxuJiM0MztcdFx0U1lTQ1RMX1RFU1RTPVwmIzM0OyQxXCYjMzQ7XG4mIzQzO1x0XHQ7O1xuJiM0MztcdC1zIClcbiYjNDM7XHRcdHNoaWZ0XG4mIzQzO1x0XHRCSVRNQVBfU0VFRD1cJiMzNDskMVwmIzM0O1xuJiM0MztcdFx0OztcbiYjNDM7XHQqIClcbiYjNDM7XHRcdHVzYWdlXG4mIzQzO1x0XHRleGl0IDFcbiYjNDM7XHRcdDs7XG4mIzQzO1x0ZXNhY1xuJiM0MztcdHNoaWZ0XG4mIzQzO2RvbmVcbiYjNDM7XG4mIzQzO1NFTEVDVEVEPSR7U1lTQ1RMX1RFU1RTLSRBTExfVEVTVFN9XG4mIzQzO1xuJiM0MztrdGFwX3ByaW50X2hlYWRlclxuJiM0Mzt0cmFwIHJlc3RvcmVfc3lzY3RsX3dyaXRlc19zdHJpY3QgRVhJVFxuJiM0MztjaGVja19hcmdzIFwmIzM0OyRSRVBFQVRcJiMzNDsgXCYjMzQ7JFNFTEVDVEVEXCYjMzQ7IFwmIzM0OyRCSVRNQVBfU0VFRFwmIzM0O1xuJiM0MztjaGVja19yZXFzXG4gY2hlY2tfcHJvZHVjdGlvbl9zeXNjdGxfd3JpdGVzX3N0cmljdFxuIGxvYWRfcmVxX21vZFxuIFxuLXRyYXAgXCYjMzQ7dGVzdF9maW5pc2hcJiMzNDsgRVhJVFxuJiM0MztrdGFwX3ByaW50X21zZyBcJiMzNDtiaXRtYXAgYmFzZSBzZWVkOiAkQklUTUFQX1NFRUQgKHJlcGxheSB3aXRoIC1zICRCSVRNQVBfU0VFRClcJiMzNDtcbiBcbi1wYXJzZV9hcmdzICRAXG4mIzQzO2t0YXBfc2V0X3BsYW4gXCYjMzQ7JCgoICQod2MgLXcgXHUwMDNjXHUwMDNjXHUwMDNjIFwmIzM0OyRTRUxFQ1RFRFwmIzM0OykgKiBSRVBFQVQgKSlcJiMzNDtcbiYjNDM7XG4mIzQzO2ZvciAoKGkgPSAwOyBpIFx1MDAzYyBSRVBFQVQ7IGkmIzQzOyYjNDM7KSk7IGRvXG4mIzQzO1x0Zm9yIHQgaW4gJFNFTEVDVEVEOyBkb1xuJiM0MztcdFx0cnVuX29uZSBcJiMzNDskdFwmIzM0O1xuJiM0MztcdGRvbmVcbiYjNDM7ZG9uZVxuIFxuLWV4aXQgMFxuJiM0MztrdGFwX2ZpbmlzaGVkXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6Mzk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB0aGUgdXNlci1zcGFjZSBzZWxmdGVzdCBzY3JpcHQgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY3RsL3N5c2N0bC5zaCB0byBtb2Rlcm5pemUgaXQgYW5kIHVzZSBrdGFwX2hlbHBlcnMuIEl0IGRvZXMgbm90IHRvdWNoIGFueSBrZXJuZWwgc291cmNlIGNvZGUsIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCksIG9yIGtlcm5lbCBtb2R1bGVzLCBzbyBpdCBpcyBub3Qgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyNzE2NjkyY2U0ZmJlMDEzYjg4ZTNmNDNiMDBmNzM1Mzg5MjUxMzU4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgMTQgMTM6Mzk6MDUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjdGwvc3lzY3RsLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY3RsL3N5c2N0bC5zaAppbmRleCA5NWU5MzcwOTA4OGEzLi5jZWI1Y2ZhMGNmZDRkIDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjdGwvc3lzY3RsLnNoCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2N0bC9zeXNjdGwuc2gKQEAgLTIsMzYyICYjNDM7MiwyMzkgQEAKICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgT1IgY29weWxlZnQtbmV4dC0wLjMuMQogIyBDb3B5cmlnaHQgKEMpIDIwMTcgTHVpcyBSLiBSb2RyaWd1ZXogJmx0O21jZ3JvZkBrZXJuZWwub3JnJmd0OwogCi0jIFRoaXMgcGVyZm9ybXMgYSBzZXJpZXMgdGVzdHMgYWdhaW5zdCB0aGUgcHJvYyBzeXNjdGwgaW50ZXJmYWNlLgotCiYjNDM7IyBSZWR1Y2Ugbm9pc2UgYnkgZGlzYWJsaW5nICYjMzQ7dW5yZWFjaGFibGUmIzM0OyBjaGVjay4KICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjMxNwotIyBLc2VsZnRlc3QgZnJhbWV3b3JrIHJlcXVpcmVtZW50IC0gU0tJUCBjb2RlIGlzIDQuCi1rc2Z0X3NraXA9NAotCi1URVNUX05BTUU9JiMzNDtzeXNjdGwmIzM0OwotVEVTVF9EUklWRVI9JiMzNDt0ZXN0XyR7VEVTVF9OQU1FfSYjMzQ7Ci1URVNUX0RJUj0kKGRpcm5hbWUgJDApCi1URVNUX0ZJTEU9JChta3RlbXApCi0KLSMgaW5pdGlhbGl6ZSBmb3IgaW5kaXZpZHVhbCB0ZXN0cwotcmM9MAotCi0jIFRoaXMgcmVwcmVzZW50cwotIwotIyBURVNUX0lEOlRFU1RfQ09VTlQ6RU5BQkxFRDpUQVJHRVQ6U0tJUF9OT19UQVJHRVQKLSMKLSMgVEVTVF9JRDogaXMgdGhlIHRlc3QgaWQgbnVtYmVyCi0jIFRFU1RfQ09VTlQ6IG51bWJlciBvZiB0aW1lcyB3ZSBzaG91bGQgcnVuIHRoZSB0ZXN0Ci0jIEVOQUJMRUQ6IDEgaWYgZW5hYmxlZCwgMCBvdGhlcndpc2UKLSMgVEFSR0VUOiB0ZXN0IHRhcmdldCBmaWxlIHJlcXVpcmVkIG9uIHRoZSB0ZXN0X3N5c2N0bCBtb2R1bGUKLSMgU0tJUF9OT19UQVJHRVQ6IDEgc2tpcCBpZiBUQVJHRVQgbm90IHRoZXJlCi0jICAgICAgICAgICAgICAgICAwIHJ1biBldmVuIHRob3VnaCBUQVJHRVQgbm90IHRoZXJlCi0jCi0jIE9uY2UgdGhlc2UgYXJlIGVuYWJsZWQgcGxlYXNlIGxlYXZlIHRoZW0gYXMtaXMuIFdyaXRlIHlvdXIgb3duIHRlc3QsCi0jIHdlIGhhdmUgdG9ucyBvZiBzcGFjZS4KLUFMTF9URVNUUz0mIzM0OzAwMDE6MToxOmludF8wMDAxOjEmIzM0OwotQUxMX1RFU1RTPSYjMzQ7JEFMTF9URVNUUyAwMDAyOjE6MTpzdHJpbmdfMDAwMToxJiMzNDsKLUFMTF9URVNUUz0mIzM0OyRBTExfVEVTVFMgMDAwMzoxOjE6aW50XzAwMDI6MSYjMzQ7Ci1BTExfVEVTVFM9JiMzNDskQUxMX1RFU1RTIDAwMDQ6MToxOnVpbnRfMDAwMToxJiMzNDsKLUFMTF9URVNUUz0mIzM0OyRBTExfVEVTVFMgMDAwNTozOjE6aW50XzAwMDM6MSYjMzQ7Ci1BTExfVEVTVFM9JiMzNDskQUxMX1RFU1RTIDAwMDY6NTA6MTpiaXRtYXBfMDAwMToxJiMzNDsKLUFMTF9URVNUUz0mIzM0OyRBTExfVEVTVFMgMDAwNzoxOjE6Ym9vdF9pbnQ6MSYjMzQ7Ci1BTExfVEVTVFM9JiMzNDskQUxMX1RFU1RTIDAwMDg6MToxOm1hdGNoX2ludDoxJiMzNDsKLUFMTF9URVNUUz0mIzM0OyRBTExfVEVTVFMgMDAwOToxOjE6dW5yZWdpc3Rlcl9lcnJvcjowJiMzNDsKLUFMTF9URVNUUz0mIzM0OyRBTExfVEVTVFMgMDAxMDoxOjE6bW50L21udF9lcnJvcjowJiMzNDsKLUFMTF9URVNUUz0mIzM0OyRBTExfVEVTVFMgMDAxMToxOjE6ZW1wdHlfYWRkOjAmIzM0OwotQUxMX1RFU1RTPSYjMzQ7JEFMTF9URVNUUyAwMDEyOjE6MTp1OF92YWxpZDowJiMzNDsKLUFMTF9URVNUUz0mIzM0OyRBTExfVEVTVFMgMDAxMzoxOjE6aW50XzAwMDM6MSYjMzQ7Ci0KLWZ1bmN0aW9uIGFsbG93X3VzZXJfZGVmYXVsdHMoKQomIzQzOwomIzQzOyMgVGhpcyBwZXJmb3JtcyBhIHNlcmllcyBvZiB0ZXN0cyBhZ2FpbnN0IHRoZSBwcm9jIHN5c2N0bCBpbnRlcmZhY2UuCiYjNDM7CiYjNDM7RElSPSYjMzQ7JChkaXJuYW1lICYjMzQ7JChyZWFkbGluayAtZiAmIzM0OyQwJiMzNDspJiMzNDspJiMzNDsKJiM0Mztzb3VyY2UgJiMzNDske0RJUn0mIzM0Oy8uLi9rc2VsZnRlc3Qva3RhcF9oZWxwZXJzLnNoCiYjNDM7CiYjNDM7VEVTVF9EUklWRVI9JiMzNDt0ZXN0X3N5c2N0bCYjMzQ7CiYjNDM7CiYjNDM7YXNzZXJ0X3dyaXRlX3JlamVjdGVkKCkgIyAmbHQ7ZmlsZSZndDsgJmx0O3ZhbHVlJmd0OwogewotCWlmIFsgLXogJERJUiBdOyB0aGVuCi0JCURJUj0mIzM0Oy9zeXMvbW9kdWxlL3Rlc3Rfc3lzY3RsLyYjMzQ7Ci0JZmkKLQlpZiBbIC16ICRERUZBVUxUX05VTV9URVNUUyBdOyB0aGVuCi0JCURFRkFVTFRfTlVNX1RFU1RTPTUwCi0JZmkKLQlpZiBbIC16ICRTWVNDVEwgXTsgdGhlbgotCQlTWVNDVEw9JiMzNDsvcHJvYy9zeXMvZGVidWcvdGVzdF9zeXNjdGwmIzM0OwotCWZpCi0JaWYgWyAteiAkUFJPRF9TWVNDVEwgXTsgdGhlbgotCQlQUk9EX1NZU0NUTD0mIzM0Oy9wcm9jL3N5cyYjMzQ7Ci0JZmkKLQlpZiBbIC16ICRXUklURVNfU1RSSUNUIF07IHRoZW4KLQkJV1JJVEVTX1NUUklDVD0mIzM0OyR7UFJPRF9TWVNDVEx9L2tlcm5lbC9zeXNjdGxfd3JpdGVzX3N0cmljdCYjMzQ7CiYjNDM7CWxvY2FsIGZpbGU9JDEgdmFsPSQyCiYjNDM7CWlmIHByaW50ZiAmIzM5OyVzJiMzOTsgJiMzNDskdmFsJiMzNDsgJmd0OyAmIzM0OyRmaWxlJiMzNDsgMiZndDsvZGV2L251bGw7IHRoZW4KJiM0MzsJCWt0YXBfcHJpbnRfbXNnICYjMzQ7JGZpbGU6IHdyaXRlIG9mICYjMzk7JHZhbCYjMzk7IHN1Y2NlZWRlZCwgZXhwZWN0ZWQgcmVqZWN0aW9uJiMzNDsKJiM0MzsJCXJldHVybiAxCiAJZmkKJiM0MzsJcmV0dXJuIDAKIH0KIAotZnVuY3Rpb24gY2hlY2tfcHJvZHVjdGlvbl9zeXNjdGxfd3JpdGVzX3N0cmljdCgpCiYjNDM7YXNzZXJ0X2NvbnRlbnQoKSAjICZsdDtmaWxlJmd0OyAmbHQ7d2FudC1maWxlJmd0OwogewotCWVjaG8gLW4gJiMzNDtDaGVja2luZyBwcm9kdWN0aW9uIHdyaXRlIHN0cmljdCBzZXR0aW5nIC4uLiAmIzM0OwotCWlmIFsgISAtZSAke1dSSVRFU19TVFJJQ1R9IF07IHRoZW4KLQkJZWNobyAmIzM0O0ZBSUwsIGJ1dCBza2lwIGluIGNhc2Ugb2Ygb2xkIGtlcm5lbCYjMzQ7ICZndDsmYW1wOzIKLQllbHNlCi0JCW9sZF9zdHJpY3Q9JChjYXQgJHtXUklURVNfU1RSSUNUfSkKLQkJaWYgWyAmIzM0OyRvbGRfc3RyaWN0JiMzNDsgPSAmIzM0OzEmIzM0OyBdOyB0aGVuCi0JCQllY2hvICYjMzQ7T0smIzM0OwotCQllbHNlCi0JCQllY2hvICYjMzQ7RkFJTCwgc3RyaWN0IHZhbHVlIGlzIDAgYnV0IGZvcmNlIHRvIDEgdG8gY29udGludWUmIzM0OyAmZ3Q7JmFtcDsyCi0JCQllY2hvICYjMzQ7MSYjMzQ7ICZndDsgJHtXUklURVNfU1RSSUNUfQotCQlmaQotCWZpCi0KLQlpZiBbIC16ICRQQUdFX1NJWkUgXTsgdGhlbgotCQlQQUdFX1NJWkU9JChnZXRjb25mIFBBR0VTSVpFKQotCWZpCi0JaWYgWyAteiAkTUFYX0RJR0lUUyBdOyB0aGVuCi0JCU1BWF9ESUdJVFM9JCgoJFBBR0VfU0laRS84KSkKLQlmaQotCWlmIFsgLXogJElOVF9NQVggXTsgdGhlbgotCQlJTlRfTUFYPSQoZ2V0Y29uZiBJTlRfTUFYKQotCWZpCi0JaWYgWyAteiAkVUlOVF9NQVggXTsgdGhlbgotCQlVSU5UX01BWD0kKGdldGNvbmYgVUlOVF9NQVgpCiYjNDM7CWxvY2FsIGZpbGU9JDEgd2FudF9maWxlPSQyIGdvdAomIzQzOwlnb3Q9JChjYXQgJiMzNDskZmlsZSYjMzQ7KQomIzQzOwlpZiBbICYjMzQ7JGdvdCYjMzQ7ID09ICYjMzQ7JHdhbnRfZmlsZSYjMzQ7IF07IHRoZW4KJiM0MzsJCXJldHVybiAwCiAJZmkKJiM0MzsJa3RhcF9wcmludF9tc2cgJiMzNDskZmlsZTogZ290ICYjMzk7JGdvdCYjMzk7LCB3YW50ICYjMzk7JHdhbnRfZmlsZSYjMzk7JiMzNDsKJiM0MzsJcmV0dXJuIDEKIH0KIAotdGVzdF9yZXFzKCkKJiM0MzsjIGNvbXBhcmUgaWdub3Jpbmcgd2hpdGVzcGFjZXMKJiM0Mzthc3NlcnRfY29udGVudF9sb29zZSgpICMgJmx0O2ZpbGUmZ3Q7ICZsdDt3YW50LWZpbGUmZ3Q7CiB7Ci0JdWlkPSQoaWQgLXUpCi0JaWYgWyAkdWlkIC1uZSAwIF07IHRoZW4KLQkJZWNobyAkbXNnIG11c3QgYmUgcnVuIGFzIHJvb3QgJmd0OyZhbXA7MgotCQlleGl0ICRrc2Z0X3NraXAKLQlmaQotCi0JaWYgISB3aGljaCBwZXJsIDImZ3Q7IC9kZXYvbnVsbCAmZ3Q7IC9kZXYvbnVsbDsgdGhlbgotCQllY2hvICYjMzQ7JDA6IFlvdSBuZWVkIHBlcmwgaW5zdGFsbGVkJiMzNDsKLQkJZXhpdCAka3NmdF9za2lwCi0JZmkKLQlpZiAhIHdoaWNoIGdldGNvbmYgMiZndDsgL2Rldi9udWxsICZndDsgL2Rldi9udWxsOyB0aGVuCi0JCWVjaG8gJiMzNDskMDogWW91IG5lZWQgZ2V0Y29uZiBpbnN0YWxsZWQmIzM0OwotCQlleGl0ICRrc2Z0X3NraXAKLQlmaQotCWlmICEgd2hpY2ggZGlmZiAyJmd0OyAvZGV2L251bGwgJmd0OyAvZGV2L251bGw7IHRoZW4KLQkJZWNobyAmIzM0OyQwOiBZb3UgbmVlZCBkaWZmIGluc3RhbGxlZCYjMzQ7Ci0JCWV4aXQgJGtzZnRfc2tpcAomIzQzOwlsb2NhbCBmaWxlPSQxIHdhbnRfZmlsZT0kMgomIzQzOwlpZiBlY2hvICYjMzQ7JHdhbnRfZmlsZSYjMzQ7IHwgZGlmZiAtcSAtdyAtdSAtICYjMzQ7JGZpbGUmIzM0OyAmZ3Q7IC9kZXYvbnVsbDsgdGhlbgomIzQzOwkJcmV0dXJuIDAKIAlmaQomIzQzOwlrdGFwX3ByaW50X21zZyAmIzM0OyRmaWxlOiBjb250ZW50IGRvZXMgbm90IG1hdGNoICYjMzk7JHdhbnRfZmlsZSYjMzk7ICh3aGl0ZXNwYWNlLWluc2Vuc2l0aXZlKSYjMzQ7CiYjNDM7CXJldHVybiAxCiB9CiAKLWZ1bmN0aW9uIGxvYWRfcmVxX21vZCgpCiYjNDM7IyBGb3IgY2hlY2tzIHdoZXJlIHdyaXRlcyBtdXN0IE5PVCB0YWtlIGVmZmVjdAomIzQzO2Fzc2VydF9jb250ZW50X3JlamVjdGVkKCkgIyAmbHQ7ZmlsZSZndDsgJmx0O2JhZCZndDsKIHsKLQlpZiBbICEgLWQgJFNZU0NUTCBdOyB0aGVuCi0JCWlmICEgbW9kcHJvYmUgLXEgLW4gJFRFU1RfRFJJVkVSOyB0aGVuCi0JCQllY2hvICYjMzQ7JDA6IG1vZHVsZSAkVEVTVF9EUklWRVIgbm90IGZvdW5kIFtTS0lQXSYjMzQ7Ci0JCQllY2hvICYjMzQ7WW91IG11c3Qgc2V0IENPTkZJR19URVNUX1NZU0NUTD1tIGluIHlvdXIga2VybmVsJiMzNDsgJmd0OyZhbXA7MgotCQkJZXhpdCAka3NmdF9za2lwCi0JCWZpCi0JCW1vZHByb2JlICRURVNUX0RSSVZFUgotCQlpZiBbICQ/IC1uZSAwIF07IHRoZW4KLQkJCWVjaG8gJiMzNDskMDogbW9kcHJvYmUgJFRFU1RfRFJJVkVSIGZhaWxlZC4mIzM0OwotCQkJZXhpdAotCQlmaQomIzQzOwlsb2NhbCBmaWxlPSQxIGJhZD0kMgomIzQzOwlpZiBlY2hvICYjMzQ7JGJhZCYjMzQ7IHwgZGlmZiAtcSAtdyAtdSAtICYjMzQ7JGZpbGUmIzM0OyAmZ3Q7IC9kZXYvbnVsbDsgdGhlbgomIzQzOwkJa3RhcF9wcmludF9tc2cgJiMzNDskZmlsZTogdW5leHBlY3RlZGx5IG5vdyBob2xkcyByZWplY3RlZCB2YWx1ZSAmIzM5OyRiYWQmIzM5OyYjMzQ7CiYjNDM7CQlyZXR1cm4gMQogCWZpCiYjNDM7CXJldHVybiAwCiB9CiAKLXJlc2V0X3ZhbHMoKQomIzQzOyMgcHJvYyBmaWxlcyBnZXQgcmVhZCBhIHBhZ2UgYXQgYSB0aW1lLCB3aGljaCBjYW4gY29uZnVzZSBkaWZmIHJlc3VsdGluZyBpbgomIzQzOyMgaW5jb3JyZWN0IHJlc3VsdHMuIFVzZSBhIHRlbXAgZmlsZSB0byBkaWZmLgomIzQzO2Fzc2VydF9kaWZmX3Byb2NfZmlsZSgpICMgJmx0O2ZpbGUmZ3Q7ICZsdDt3YW50LWZpbGUmZ3Q7CiB7Ci0JVkFMPSYjMzQ7JiMzNDsKLQlUUklHR0VSPSQoYmFzZW5hbWUgJHtUQVJHRVR9KQotCWNhc2UgJiMzNDskVFJJR0dFUiYjMzQ7IGluCi0JCWludF8wMDAxKQotCQkJVkFMPSYjMzQ7NjAmIzM0OwotCQkJOzsKLQkJaW50XzAwMDIpCi0JCQlWQUw9JiMzNDsxJiMzNDsKLQkJCTs7Ci0JCXVpbnRfMDAwMSkKLQkJCVZBTD0mIzM0OzMxNCYjMzQ7Ci0JCQk7OwotCQlzdHJpbmdfMDAwMSkKLQkJCVZBTD0mIzM0Oyhub25lKSYjMzQ7Ci0JCQk7OwotCQliaXRtYXBfMDAwMSkKLQkJCVZBTD0mIzM0OyYjMzQ7Ci0JCQk7OwotCQkqKQotCQkJOzsKLQllc2FjCi0JZWNobyAtbiAkVkFMICZndDsgJFRBUkdFVAotfQomIzQzOwlsb2NhbCBmaWxlPSQxIHdhbnRfZmlsZT0kMiB0bXAKJiM0MzsJdG1wPSQobWt0ZW1wKQomIzQzOwljYXQgJiMzNDskZmlsZSYjMzQ7ICZndDsgJiMzNDskdG1wJiMzNDsKIAotc2V0X29yaWcoKQotewotCWlmIFsgISAteiAkVEFSR0VUIF0gJmFtcDsmYW1wOyBbICEgLXogJE9SSUcgXTsgdGhlbgotCQlpZiBbIC1mICR7VEFSR0VUfSBdOyB0aGVuCi0JCQllY2hvICYjMzQ7JHtPUklHfSYjMzQ7ICZndDsgJiMzNDske1RBUkdFVH0mIzM0OwotCQlmaQomIzQzOwlpZiBkaWZmIC13IC1xICYjMzQ7JHRtcCYjMzQ7ICYjMzQ7JHdhbnRfZmlsZSYjMzQ7ICZndDsgL2Rldi9udWxsOyB0aGVuCiYjNDM7CQlybSAtZiAmIzM0OyR0bXAmIzM0OwomIzQzOwkJcmV0dXJuIDAKIAlmaQomIzQzOwlrdGFwX3ByaW50X21zZyAmIzM0OyRmaWxlOiBjb250ZW50IGRvZXMgbm90IG1hdGNoIGV4cGVjdGVkIGZpbGUgJHdhbnRfZmlsZSYjMzQ7CiYjNDM7CXJtIC1mICYjMzQ7JHRtcCYjMzQ7CiYjNDM7CXJldHVybiAxCiB9CiAKLXNldF90ZXN0KCkKJiM0MzsjIFZlcmlmeSB0aGF0IGFuIGVycm9uZW91cyB1cGRhdGUgZmFpbHMgYW5kIGRvZXMgbm90IGNoYW5nZSB0aGUgYmFzZWxpbmUuCiYjNDM7YXNzZXJ0X25vX3BhcnRpYWxfdXBkYXRlKCkgIyAmbHQ7ZmlsZSZndDsgJmx0O2Jhc2VsaW5lJmd0OyAmbHQ7YmFkLXZhbHVlJmd0OwogewotCWVjaG8gJiMzNDske1RFU1RfU1RSfSYjMzQ7ICZndDsgJiMzNDske1RBUkdFVH0mIzM0OwomIzQzOwlsb2NhbCBmaWxlPSQxIGJhc2VsaW5lPSQyIGJhZD0kMwomIzQzOwomIzQzOwlwcmludGYgJiMzOTslcyYjMzk7ICYjMzQ7JGJhc2VsaW5lJiMzNDsgJmd0OyAmIzM0OyRmaWxlJiMzNDsKJiM0MzsJYXNzZXJ0X3dyaXRlX3JlamVjdGVkICYjMzQ7JGZpbGUmIzM0OyAmIzM0OyRiYWQmIzM0OyB8fCByZXR1cm4gMQomIzQzOwlhc3NlcnRfY29udGVudF9sb29zZSAmIzM0OyRmaWxlJiMzNDsgJiMzNDskYmFzZWxpbmUmIzM0OwogfQogCi12ZXJpZnkoKQomIzQzO2Fzc2VydF9ncmVwKCkgIyAmbHQ7ZmlsZSZndDsgJmx0O3BhdHRlcm4mZ3Q7IC0gJmx0O3BhdHRlcm4mZ3Q7IG11c3QgYXBwZWFyIGluICZsdDtmaWxlJmd0OwogewotCWxvY2FsIHNlZW4KLQlzZWVuPSQoY2F0ICYjMzQ7JDEmIzM0OykKLQlpZiBbICYjMzQ7JHtzZWVufSYjMzQ7ICE9ICYjMzQ7JHtURVNUX1NUUn0mIzM0OyBdOyB0aGVuCi0JCXJldHVybiAxCiYjNDM7CWxvY2FsIGZpbGU9JDEgcGF0dGVybj0kMgomIzQzOwlpZiBncmVwIC1xICYjMzQ7JHBhdHRlcm4mIzM0OyAmIzM0OyRmaWxlJiMzNDs7IHRoZW4KJiM0MzsJCXJldHVybiAwCiAJZmkKLQlyZXR1cm4gMAomIzQzOwlrdGFwX3ByaW50X21zZyAmIzM0OyRmaWxlOiBwYXR0ZXJuICYjMzk7JHBhdHRlcm4mIzM5OyBub3QgZm91bmQmIzM0OwomIzQzOwlyZXR1cm4gMQogfQogCi0jIHByb2MgZmlsZXMgZ2V0IHJlYWQgYSBwYWdlIGF0IGEgdGltZSwgd2hpY2ggY2FuIGNvbmZ1c2UgZGlmZiwKLSMgYW5kIGdldCB5b3UgaW5jb3JyZWN0IHJlc3VsdHMgb24gcHJvYyBmaWxlcyB3aXRoIGxvbmcgZGF0YS4gVG8gdXNlCi0jIGRpZmYgYWdhaW5zdCB0aGVtIHlvdSBtdXN0IGZpcnN0IGV4dHJhY3QgdGhlIG91dHB1dCB0byBhIGZpbGUsIGFuZAotIyB0aGVuIGNvbXBhcmUgYWdhaW5zdCB0aGF0IGZpbGUuCi12ZXJpZnlfZGlmZl9wcm9jX2ZpbGUoKQomIzQzO2Fzc2VydF9ncmVwX2Fic2VudCgpICMgJmx0O2ZpbGUmZ3Q7ICZsdDtwYXR0ZXJuJmd0OyAtICZsdDtwYXR0ZXJuJmd0OyBtdXN0IE5PVCBhcHBlYXIKIHsKLQlUTVBfRFVNUF9GSUxFPSQobWt0ZW1wKQotCWNhdCAkMSAmZ3Q7ICRUTVBfRFVNUF9GSUxFCi0KLQlpZiAhIGRpZmYgLXcgLXEgJFRNUF9EVU1QX0ZJTEUgJDI7IHRoZW4KLQkJcmV0dXJuIDEKLQllbHNlCiYjNDM7CWxvY2FsIGZpbGU9JDEgcGF0dGVybj0kMgomIzQzOwlpZiAhIGdyZXAgLXEgJiMzNDskcGF0dGVybiYjMzQ7ICYjMzQ7JGZpbGUmIzM0OzsgdGhlbgogCQlyZXR1cm4gMAogCWZpCiYjNDM7CWt0YXBfcHJpbnRfbXNnICYjMzQ7JGZpbGU6IHBhdHRlcm4gJiMzOTskcGF0dGVybiYjMzk7IHVuZXhwZWN0ZWRseSBmb3VuZCYjMzQ7CiYjNDM7CXJldHVybiAxCiB9CiAKLXZlcmlmeV9kaWZmX3coKQomIzQzO2Fzc2VydF9kbWVzZ19jb3VudCgpICMgJmx0O3BhdHRlcm4mZ3Q7ICZsdDt3YW50LWNvdW50Jmd0OwogewotCWVjaG8gJiMzNDskVEVTVF9TVFImIzM0OyB8IGRpZmYgLXEgLXcgLXUgLSAkMSAmZ3Q7IC9kZXYvbnVsbAotCXJldHVybiAkPwomIzQzOwlsb2NhbCBwYXR0ZXJuPSQxIHdhbnQ9JDIgZ290CiYjNDM7CWdvdD0kKGRtZXNnIHwgZ3JlcCAtYyAmIzM0OyRwYXR0ZXJuJiMzNDspCiYjNDM7CWlmIFsgJiMzNDskZ290JiMzNDsgLWVxICYjMzQ7JHdhbnQmIzM0OyBdOyB0aGVuCiYjNDM7CQlyZXR1cm4gMAomIzQzOwlmaQomIzQzOwlrdGFwX3ByaW50X21zZyAmIzM0O2RtZXNnOiBwYXR0ZXJuICYjMzk7JHBhdHRlcm4mIzM5OyBzZWVuICRnb3QgdGltZXMsIHdhbnQgJHdhbnQmIzM0OwomIzQzOwlyZXR1cm4gMQogfQogCi0jIFZlcmlmeSB0aGF0IGFuIGVycm9uZW91cyAoJDIpIHVwZGF0ZSBmYWlscyBhbmQgZG9lcyBub3QgY2hhbmdlIFRBUkdFVAotdmVyaWZ5X25vX3BhcnRpYWxfdXBkYXRlKCkKJiM0MzsjIHdyaXRlICZsdDtzdHImZ3Q7IHRocm91Z2ggZGQgaW4gJmx0O2JzJmd0Oy1zaXplZCBjaHVua3MKJiM0Mzt3cml0ZV9pbl9jaHVua3MoKSAgIyAmbHQ7ZmlsZSZndDsgJmx0O3N0ciZndDsgJmx0O2JzJmd0OwogewotCVRFU1RfU1RSPSYjMzQ7JDEmIzM0OwotCWVjaG8gLW4gJiMzNDskVEVTVF9TVFImIzM0OyAmZ3Q7ICYjMzQ7JFRBUkdFVCYjMzQ7Ci0KLQlpZiBlY2hvIC1uICYjMzQ7JDImIzM0OyAmZ3Q7ICYjMzQ7JFRBUkdFVCYjMzQ7IDImZ3Q7IC9kZXYvbnVsbDsgdGhlbgotCQlyZXR1cm4gMQotCWZpCi0JdmVyaWZ5X2RpZmZfdyAmIzM0OyR7VEFSR0VUfSYjMzQ7CiYjNDM7CWxvY2FsIGZpbGU9JDEgc3RyPSQyIGJzPSQzCiYjNDM7CXByaW50ZiAmIzM5OyVzJiMzOTsgJiMzNDskc3RyJiMzNDsgfCBkZCBvZj0mIzM0OyRmaWxlJiMzNDsgYnM9JiMzNDskYnMmIzM0OyAyJmd0Oy9kZXYvbnVsbAogfQogCi10ZXN0X3JjKCkKJiM0MzsjIHdyaXRlICZsdDtzdHImZ3Q7IHRocm91Z2ggZGQgaW4gJmx0O2JzJmd0Oy1zaXplZCBjaHVua3MuIHNlZWtpbmcgJmx0O3NlZWsmZ3Q7IGJsb2NrcyBvZiBzaXplCiYjNDM7IyAmbHQ7YnMmZ3Q7IGludG8gdGhlIG91dHB1dC4gc2tpcHBpbmcgJmx0O3NraXAmZ3Q7IGJsb2NrcyBvZiBzaXplICZsdDticyZndDsgZnJvbSB0aGUgaW5wdXQuCiYjNDM7IyBVbnN5bmNyaG9uaXplZCB3aGVuIHNraXAgaXMgbm90IHBhc3NlZC4KJiM0Mzt3cml0ZV9hdF9vZmZzZXQoKSAgIyAmbHQ7ZmlsZSZndDsgJmx0O3N0ciZndDsgJmx0O2JzJmd0OyAmbHQ7c2VlayZndDsgW3NraXBdCiB7Ci0JaWYgW1sgJHJjICE9IDAgXV07IHRoZW4KLQkJZWNobyAmIzM0O0ZhaWxlZCB0ZXN0LCByZXR1cm4gdmFsdWU6ICRyYyYjMzQ7ICZndDsmYW1wOzIKLQkJZXhpdCAkcmMKJiM0MzsJbG9jYWwgZmlsZT0kMSBzdHI9JDIgYnM9JDMgc2Vlaz0kNCBza2lwPSR7NTotfQomIzQzOwlpZiBbIC1uICYjMzQ7JHNraXAmIzM0OyBdOyB0aGVuCiYjNDM7CQlwcmludGYgJiMzOTslcyYjMzk7ICYjMzQ7JHN0ciYjMzQ7IHwgZGQgb2Y9JiMzNDskZmlsZSYjMzQ7IGJzPSYjMzQ7JGJzJiMzNDsgc2Vlaz0mIzM0OyRzZWVrJiMzNDsgc2tpcD0mIzM0OyRza2lwJiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJZWxzZQomIzQzOwkJcHJpbnRmICYjMzk7JXMmIzM5OyAmIzM0OyRzdHImIzM0OyB8IGRkIG9mPSYjMzQ7JGZpbGUmIzM0OyBicz0mIzM0OyRicyYjMzQ7IHNlZWs9JiMzNDskc2VlayYjMzQ7IDImZ3Q7L2Rldi9udWxsCiAJZmkKIH0KIAotdGVzdF9maW5pc2goKQomIzQzOyMgcGFkIChwcmVmaXgpICZsdDtzdHImZ3Q7IHdpdGggJmx0O3BhZCZndDsgJiMzOTtBJiMzOTsgY2hhcmFjdGVycywgdGhlbiB3cml0ZSBpdCBhbGwgdG8gJmx0O2ZpbGUmZ3Q7CiYjNDM7IyB3aXRoIGRkIGJsb2NrIHNpemUgJmx0O2JzJmd0OyAoZGVmYXVsdHMgdG8gJmx0O3BhZCZndDspLgomIzQzO3dyaXRlX292ZXJsb25nKCkgICMgJmx0O2ZpbGUmZ3Q7ICZsdDtwYWQmZ3Q7ICZsdDtzdHImZ3Q7IFtic10KIHsKLQlzZXRfb3JpZwotCXJtIC1mICYjMzQ7JHtURVNUX0ZJTEV9JiMzNDsKJiM0MzsJbG9jYWwgZmlsZT0kMSBwYWQ9JDIgc3RyPSQzIGJzPSQ0IHAKJiM0MzsJOiAmIzM0OyR7YnM6PSRwYWR9JiMzNDsKIAotCWlmIFsgISAteiAke29sZF9zdHJpY3R9IF07IHRoZW4KLQkJZWNobyAke29sZF9zdHJpY3R9ICZndDsgJHtXUklURVNfU1RSSUNUfQotCWZpCi0JZXhpdCAkcmMKJiM0MzsJIyBzYXZlIGEgc3RyaW5nIHdpdGggJHBhZCBzcGFjZXMgaW4gJHAKJiM0MzsJcHJpbnRmIC12IHAgJiMzOTslKnMmIzM5OyAmIzM0OyRwYWQmIzM0OyAmIzM5OyYjMzk7CiYjNDM7CSMgcmVwbGFjZSAmIzM0OyAmIzM0OyB3aXRoICYjMzQ7QSYjMzQ7CiYjNDM7CXByaW50ZiAmIzM5OyVzJXMmIzM5OyAmIzM0OyR7cC8vIC9BfSYjMzQ7ICYjMzQ7JHN0ciYjMzQ7IHwgZGQgb2Y9JiMzNDskZmlsZSYjMzQ7IGJzPSYjMzQ7JGJzJiMzNDsgMiZndDsvZGV2L251bGwKIH0KIAotcnVuX251bWVyaWN0ZXN0cygpCiYjNDM7IyBwYWQgKHByZWZpeCkgJmx0O3N0ciZndDsgd2l0aCAmbHQ7cGFkJmd0OyBBU0NJSSBzcGFjZXMsIHRoZW4gd3JpdGUgd2l0aCBkZWZhdWx0IGJsb2NrIHNpemUuCiYjNDM7d3JpdGVfcGFkZGVkX2RpZ2l0cygpICAjICZsdDtmaWxlJmd0OyAmbHQ7cGFkJmd0OyAmbHQ7dmFsJmd0OwogewotCWVjaG8gJiMzNDs9PSBUZXN0aW5nIHN5c2N0bCBiZWhhdmlvciBhZ2FpbnN0ICR7VEFSR0VUfSA9PSYjMzQ7CiYjNDM7CWxvY2FsIGZpbGU9JDEgcGFkPSQyIHZhbD0kMyBwCiYjNDM7CXByaW50ZiAtdiBwICYjMzk7JSpzJiMzOTsgJiMzNDskcGFkJiMzNDsgJiMzOTsmIzM5OwomIzQzOwlwcmludGYgJiMzOTslcyVzJiMzOTsgJiMzNDskcCYjMzQ7ICYjMzQ7JHZhbCYjMzQ7IHwgZGQgb2Y9JiMzNDskZmlsZSYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7fQogCi0JcmM9MAomIzQzO3Rlc3RfaW50X2FycmF5X3dyaXRlcygpCiYjNDM7ewomIzQzOwlsb2NhbCB0PSYjMzQ7JHtTWVNDVEx9L2ludF8wMDAzJiMzNDsKJiM0MzsJbG9jYWwgbGltaXQKIAotCWVjaG8gLW4gJiMzNDtXcml0aW5nIHRlc3QgZmlsZSAuLi4gJiMzNDsKLQllY2hvICYjMzQ7JHtURVNUX1NUUn0mIzM0OyAmZ3Q7ICYjMzQ7JHtURVNUX0ZJTEV9JiMzNDsKLQlpZiAhIHZlcmlmeSAmIzM0OyR7VEVTVF9GSUxFfSYjMzQ7OyB0aGVuCi0JCWVjaG8gJiMzNDtGQUlMJiMzNDsgJmd0OyZhbXA7MgotCQlleGl0IDEKLQllbHNlCi0JCWVjaG8gJiMzNDtPSyYjMzQ7Ci0JZmkKJiM0MzsJW1sgLWYgJiMzNDskdCYjMzQ7IF1dIHx8IHsgUkVUPSRLU0ZUX1NLSVA7IHJldHVybjsgfQogCi0JZWNobyAtbiAmIzM0O0NoZWNraW5nIHN5c2N0bCBpcyBub3Qgc2V0IHRvIHRlc3QgdmFsdWUgLi4uICYjMzQ7Ci0JaWYgdmVyaWZ5ICYjMzQ7JHtUQVJHRVR9JiMzNDs7IHRoZW4KLQkJZWNobyAmIzM0O0ZBSUwmIzM0OyAmZ3Q7JmFtcDsyCi0JCWV4aXQgMQotCWVsc2UKLQkJZWNobyAmIzM0O09LJiMzNDsKLQlmaQomIzQzOwlwcmludGYgJiMzOTslcyYjMzk7ICYjMzQ7NCAzIDIgMSYjMzQ7ICZndDsgJiMzNDskdCYjMzQ7CiYjNDM7CWFzc2VydF9jb250ZW50X2xvb3NlICYjMzQ7JHQmIzM0OyAmIzM0OzQgMyAyIDEmIzM0OyB8fCBSRVQ9JEtTRlRfRkFJTAogCi0JZWNobyAtbiAmIzM0O1dyaXRpbmcgc3lzY3RsIGZyb20gc2hlbGwgLi4uICYjMzQ7Ci0Jc2V0X3Rlc3QKLQlpZiAhIHZlcmlmeSAmIzM0OyR7VEFSR0VUfSYjMzQ7OyB0aGVuCi0JCWVjaG8gJiMzNDtGQUlMJiMzNDsgJmd0OyZhbXA7MgotCQlleGl0IDEKLQllbHNlCi0JCWVjaG8gJiMzNDtPSyYjMzQ7Ci0JZmkKJiM0MzsJIyBTa2lwcGluZyB0cmFpbGluZyBlbGVtZW50cyBsZWF2ZXMgdGhlbSBpbnRhY3QKJiM0MzsJcHJpbnRmICYjMzk7JXMmIzM5OyAmIzM0OzEwMCAxMDEmIzM0OyAmZ3Q7ICYjMzQ7JHQmIzM0OwomIzQzOwlhc3NlcnRfY29udGVudF9sb29zZSAmIzM0OyR0JiMzNDsgJiMzNDsxMDAgMTAxIDIgMSYjMzQ7IHx8IFJFVD0kS1NGVF9GQUlMCiAKLQllY2hvIC1uICYjMzQ7UmVzZXR0aW5nIHN5c2N0bCB0byBvcmlnaW5hbCB2YWx1ZSAuLi4gJiMzNDsKLQlzZXRfb3JpZwotCWlmIHZlcmlmeSAmIzM0OyR7VEFSR0VUfSYjMzQ7OyB0aGVuCi0JCWVjaG8gJiMzNDtGQUlMJiMzNDsgJmd0OyZhbXA7MgotCQlleGl0IDEKLQllbHNlCi0JCWVjaG8gJiMzNDtPSyYjMzQ7Ci0JZmkKJiM0MzsJIyBFdmVuIGZvciBhbiBpbnQgYXJyYXksIGEgc2luZ2xlIHdyaXRlIGlzIHN0aWxsIGNhcHBlZCBhdCBNQVhfRElHSVRTCiYjNDM7CSMgKFBBR0VfU0laRS84KSBieXRlczsgY2hlY2sgcmlnaHQgYXQsIGFuZCBqdXN0IHBhc3QsIHRoYXQgYm91bmRhcnkuCiYjNDM7CSMgQ2FycmllcyBvbiB0aGUgc3RhdGUgZnJvbSB0aGUgd3JpdGVzIGFib3ZlLgomIzQzOwlsaW1pdD0kKChNQVhfRElHSVRTIC0gMSkpCiYjNDM7CXdyaXRlX3BhZGRlZF9kaWdpdHMgJiMzNDskdCYjMzQ7ICYjMzQ7JGxpbWl0JiMzNDsgJiMzNDs5JiMzNDsKJiM0MzsJYXNzZXJ0X2NvbnRlbnRfbG9vc2UgJiMzNDskdCYjMzQ7ICYjMzQ7OSAxMDEgMiAxJiMzNDsgfHwgUkVUPSRLU0ZUX0ZBSUwKIAotCSMgTm93IHRoYXQgd2UmIzM5O3ZlIHZhbGlkYXRlZCB0aGUgc2FuaXR5IG9mICYjMzQ7c2V0X3Rlc3QmIzM0OyBhbmQgJiMzNDtzZXRfb3JpZyYjMzQ7LAotCSMgd2UgY2FuIHVzZSB0aG9zZSBmdW5jdGlvbnMgdG8gc2V0IHN0YXJ0aW5nIHN0YXRlcyBiZWZvcmUgcnVubmluZwotCSMgc3BlY2lmaWMgYmVoYXZpb3JhbCB0ZXN0cy4KJiM0MzsJbGltaXQ9JCgoTUFYX0RJR0lUUykpCiYjNDM7CXdyaXRlX3BhZGRlZF9kaWdpdHMgJiMzNDskdCYjMzQ7ICYjMzQ7JGxpbWl0JiMzNDsgJiMzNDs3JiMzNDsKJiM0MzsJYXNzZXJ0X2NvbnRlbnRfcmVqZWN0ZWQgJiMzNDskdCYjMzQ7ICYjMzQ7NyAxMDEgMiAxJiMzNDsgfHwgUkVUPSRLU0ZUX0ZBSUwKJiM0Mzt9CiAKLQllY2hvIC1uICYjMzQ7V3JpdGluZyBlbnRpcmUgc3lzY3RsIGluIHNpbmdsZSB3cml0ZSAuLi4gJiMzNDsKLQlzZXRfb3JpZwotCWRkIGlmPSYjMzQ7JHtURVNUX0ZJTEV9JiMzNDsgb2Y9JiMzNDske1RBUkdFVH0mIzM0OyBicz00MDk2IDImZ3Q7L2Rldi9udWxsCi0JaWYgISB2ZXJpZnkgJiMzNDske1RBUkdFVH0mIzM0OzsgdGhlbgotCQllY2hvICYjMzQ7RkFJTCYjMzQ7ICZndDsmYW1wOzIKLQkJcmM9MQotCWVsc2UKLQkJZWNobyAmIzM0O09LJiMzNDsKLQlmaQomIzQzO3Rlc3RfaW50X2FycmF5X25vX3BhcnRpYWxfdXBkYXRlKCkKJiM0Mzt7CiYjNDM7CWxvY2FsIHQ9JiMzNDske1NZU0NUTH0vaW50XzAwMDMmIzM0OwogCi0JZWNobyAtbiAmIzM0O1dyaXRpbmcgbWlkZGxlIG9mIHN5c2N0bCBhZnRlciBzeW5jaHJvbml6ZWQgc2VlayAuLi4gJiMzNDsKLQlzZXRfdGVzdAotCWRkIGlmPSYjMzQ7JHtURVNUX0ZJTEV9JiMzNDsgb2Y9JiMzNDske1RBUkdFVH0mIzM0OyBicz0xIHNlZWs9MSBza2lwPTEgMiZndDsvZGV2L251bGwKLQlpZiAhIHZlcmlmeSAmIzM0OyR7VEFSR0VUfSYjMzQ7OyB0aGVuCi0JCWVjaG8gJiMzNDtGQUlMJiMzNDsgJmd0OyZhbXA7MgotCQlyYz0xCi0JZWxzZQotCQllY2hvICYjMzQ7T0smIzM0OwotCWZpCiYjNDM7CVtbIC1mICYjMzQ7JHQmIzM0OyBdXSB8fCB7IFJFVD0kS1NGVF9TS0lQOyByZXR1cm47IH0KIAotCWVjaG8gLW4gJiMzNDtXcml0aW5nIGJleW9uZCBlbmQgb2Ygc3lzY3RsIC4uLiAmIzM0OwotCXNldF9vcmlnCi0JZGQgaWY9JiMzNDske1RFU1RfRklMRX0mIzM0OyBvZj0mIzM0OyR7VEFSR0VUfSYjMzQ7IGJzPTIwIHNlZWs9MiAyJmd0Oy9kZXYvbnVsbAotCWlmIHZlcmlmeSAmIzM0OyR7VEFSR0VUfSYjMzQ7OyB0aGVuCi0JCWVjaG8gJiMzNDtGQUlMJiMzNDsgJmd0OyZhbXA7MgotCQlyYz0xCi0JZWxzZQotCQllY2hvICYjMzQ7T0smIzM0OwotCWZpCiYjNDM7CSMgYmFkIDNyZCBlbGVtZW50IChub3QgYSBudW1iZXIpCiYjNDM7CWFzc2VydF9ub19wYXJ0aWFsX3VwZGF0ZSAmIzM0OyR0JiMzNDsgJiMzNDsxIDIgMyA0JiMzNDsgJiMzNDsxMCAyMCBhYmMgNDAmIzM0OyB8fCBSRVQ9JEtTRlRfRkFJTAogCi0JZWNobyAtbiAmIzM0O1dyaXRpbmcgc3lzY3RsIHdpdGggbXVsdGlwbGUgbG9uZyB3cml0ZXMgLi4uICYjMzQ7Ci0Jc2V0X29yaWcKLQkocGVybCAtZSAmIzM5O3ByaW50ICYjMzQ7QSYjMzQ7IHggNTA7JiMzOTs7IGVjaG8gJiMzNDske1RFU1RfU1RSfSYjMzQ7KSB8IFwKLQkJZGQgb2Y9JiMzNDske1RBUkdFVH0mIzM0OyBicz01MCAyJmd0Oy9kZXYvbnVsbAotCWlmIHZlcmlmeSAmIzM0OyR7VEFSR0VUfSYjMzQ7OyB0aGVuCi0JCWVjaG8gJiMzNDtGQUlMJiMzNDsgJmd0OyZhbXA7MgotCQlyYz0xCi0JZWxzZQotCQllY2hvICYjMzQ7T0smIzM0OwotCWZpCi0JdGVzdF9yYwomIzQzOwkjIGJhZCAzcmQgZWxlbWVudCAob3ZlcmZsb3dzIGludCkKJiM0MzsJYXNzZXJ0X25vX3BhcnRpYWxfdXBkYXRlICYjMzQ7JHQmIzM0OyAmIzM0OzEgMiAzIDQmIzM0OyAmIzM0OzEwIDIwICQoKElOVF9NQVggJiM0MzsgMSkpIDQwJiMzNDsgfHwgUkVUPSRLU0ZUX0ZBSUwKJiM0MzsKJiM0MzsJIyBiYWQgMXN0IGVsZW1lbnQKJiM0MzsJYXNzZXJ0X25vX3BhcnRpYWxfdXBkYXRlICYjMzQ7JHQmIzM0OyAmIzM0OzEgMiAzIDQmIzM0OyAmIzM0O2FiYyAyMCAzMCA0MCYjMzQ7IHx8IFJFVD0kS1NGVF9GQUlMCiB9CiAKLWNoZWNrX2ZhaWx1cmUoKQomIzQzOyMgRXhlcmNpc2UgdGhlIHdyaXRlIHBhdHRlcm5zCiYjNDM7YXNzZXJ0X3dyaXRlX3BhdHRlcm5zKCkgICMgJmx0O2ZpbGUmZ3Q7ICZsdDtiYXNlbGluZSZndDsgJmx0O3ZhbCZndDsKIHsKLQllY2hvIC1uICYjMzQ7VGVzdGluZyB0aGF0ICQxIGZhaWxzIGFzIGV4cGVjdGVkIC4uLiAmIzM0OwotCXJlc2V0X3ZhbHMKLQlURVNUX1NUUj0mIzM0OyQxJiMzNDsKLQlvcmlnPSYjMzQ7JChjYXQgJFRBUkdFVCkmIzM0OwotCWVjaG8gLW4gJiMzNDskVEVTVF9TVFImIzM0OyAmZ3Q7ICRUQVJHRVQgMiZndDsgL2Rldi9udWxsCi0KLQkjIHdyaXRlIHNob3VsZCBmYWlsIGFuZCAkVEFSR0VUIHNob3VsZCByZXRhaW4gaXRzIG9yaWdpbmFsIHZhbHVlCi0JaWYgWyAkPyA9IDAgXSB8fCBbICYjMzQ7JChjYXQgJFRBUkdFVCkmIzM0OyAhPSAmIzM0OyRvcmlnJiMzNDsgXTsgdGhlbgotCQllY2hvICYjMzQ7RkFJTCYjMzQ7ICZndDsmYW1wOzIKLQkJcmM9MQotCWVsc2UKLQkJZWNobyAmIzM0O09LJiMzNDsKLQlmaQotCXRlc3RfcmMKJiM0MzsJbG9jYWwgZmlsZT0kMSBiYXNlbGluZT0kMiB2YWw9JDMgc3RhdHVzPTAKJiM0MzsKJiM0MzsJcHJpbnRmICYjMzk7JXMmIzM5OyAmIzM0OyR2YWwmIzM0OyAmZ3Q7ICYjMzQ7JGZpbGUmIzM0OwomIzQzOwlhc3NlcnRfY29udGVudCAmIzM0OyRmaWxlJiMzNDsgJiMzNDskdmFsJiMzNDsgfHwgc3RhdHVzPTEKJiM0MzsJcHJpbnRmICYjMzk7JXMmIzM5OyAmIzM0OyRiYXNlbGluZSYjMzQ7ICZndDsgJiMzNDskZmlsZSYjMzQ7CiYjNDM7CWFzc2VydF9jb250ZW50ICYjMzQ7JGZpbGUmIzM0OyAmIzM0OyRiYXNlbGluZSYjMzQ7IHx8IHN0YXR1cz0xCiYjNDM7CiYjNDM7CXByaW50ZiAmIzM5OyVzJiMzOTsgJiMzNDskYmFzZWxpbmUmIzM0OyAmZ3Q7ICYjMzQ7JGZpbGUmIzM0OwomIzQzOwl3cml0ZV9pbl9jaHVua3MgJiMzNDskZmlsZSYjMzQ7ICYjMzQ7JHZhbCYjMzQ7IDQwOTYKJiM0MzsJYXNzZXJ0X2NvbnRlbnQgJiMzNDskZmlsZSYjMzQ7ICYjMzQ7JHZhbCYjMzQ7IHx8IHN0YXR1cz0xCiYjNDM7CiYjNDM7CXByaW50ZiAmIzM5OyVzJiMzOTsgJiMzNDskdmFsJiMzNDsgJmd0OyAmIzM0OyRmaWxlJiMzNDsKJiM0MzsJd3JpdGVfYXRfb2Zmc2V0ICYjMzQ7JGZpbGUmIzM0OyAmIzM0OyR2YWwmIzM0OyAxIDEgMQomIzQzOwlhc3NlcnRfY29udGVudCAmIzM0OyRmaWxlJiMzNDsgJiMzNDskdmFsJiMzNDsgfHwgc3RhdHVzPTEKJiM0MzsKJiM0MzsJcHJpbnRmICYjMzk7JXMmIzM5OyAmIzM0OyRiYXNlbGluZSYjMzQ7ICZndDsgJiMzNDskZmlsZSYjMzQ7CiYjNDM7CXdyaXRlX2F0X29mZnNldCAmIzM0OyRmaWxlJiMzNDsgJiMzNDskdmFsJiMzNDsgMjAgMgomIzQzOwlhc3NlcnRfY29udGVudF9yZWplY3RlZCAmIzM0OyRmaWxlJiMzNDsgJiMzNDskdmFsJiMzNDsgfHwgc3RhdHVzPTEKJiM0MzsKJiM0MzsJcHJpbnRmICYjMzk7JXMmIzM5OyAmIzM0OyRiYXNlbGluZSYjMzQ7ICZndDsgJiMzNDskZmlsZSYjMzQ7CiYjNDM7CXdyaXRlX292ZXJsb25nICYjMzQ7JGZpbGUmIzM0OyA1MCAmIzM0OyR2YWwmIzM0OwomIzQzOwlhc3NlcnRfY29udGVudF9yZWplY3RlZCAmIzM0OyRmaWxlJiMzNDsgJiMzNDskdmFsJiMzNDsgfHwgc3RhdHVzPTEKJiM0MzsKJiM0MzsJcmV0dXJuICYjMzQ7JHN0YXR1cyYjMzQ7CiB9CiAKLXJ1bl93aWRlaW50X3Rlc3RzKCkKJiM0MzsjIE5vbmUgb2YgdGhlc2UgZml0IGluIDMyIGJpdHMsIHNvIHdyaXRpbmcgdGhlbSB0byBhbiBpbnQvdWludCBzeXNjdGwgbXVzdCBmYWlsCiYjNDM7YXNzZXJ0X3dpZGVpbnRfd3JpdGVzX3JlamVjdGVkKCkgICMgJmx0O2ZpbGUmZ3Q7ICZsdDtiYXNlbGluZSZndDsKIHsKLQkjIHN5c2N0bCBjb252ZXJzaW9uIGZ1bmN0aW9ucyByZWNlaXZlIGEgYm9vbGVhbiBzaWduIGFuZCB1bG9uZwotCSMgbWFnbml0dWRlOyBoZXJlIHdlIGxpc3QgdGhlIG1hZ25pdHVkZXMgd2Ugd2FudCB0byB0ZXN0IChlYWNoIG9mCi0JIyB3aGljaCB3aWxsIGJlIHRlc3RlZCBpbiBib3RoIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBmb3JtcykuICBTaW5jZQotCSMgbm9uZSBvZiB0aGVzZSB2YWx1ZXMgZml0IGluIDMyIGJpdHMsIHdyaXRpbmcgdGhlbSB0byBhbiBpbnQtIG9yCi0JIyB1aW50LXR5cGVkIHN5c2N0bCBzaG91bGQgZmFpbC4KJiM0MzsJbG9jYWwgZmlsZT0kMSBiYXNlbGluZT0kMiBzaWduIG1hZyBzdGF0dXM9MAogCWxvY2FsIG1hZ25pdHVkZXM9KAotCQkjIGNvbW1vbiBib3VuZGFyeS1jb25kaXRpb24gdmFsdWVzICh6ZXJvLCAmIzQzOzEsIC0xLCBJTlRfTUlOLAotCQkjIGFuZCBJTlRfTUFYIHJlc3BlY3RpdmVseSkgaWYgdHJ1bmNhdGVkIHRvIGxvd2VyIDMyIGJpdHMKLQkJIyAocG90ZW50aWFsIGZvciBiZWluZyBmYWxzZWx5IGRlZW1lZCBpbiByYW5nZSkKIAkJMHgwMDAwMDAwMTAwMDAwMDAwCiAJCTB4MDAwMDAwMDEwMDAwMDAwMQogCQkweDAwMDAwMDAxZmZmZmZmZmYKIAkJMHgwMDAwMDAwMTgwMDAwMDAwCiAJCTB4MDAwMDAwMDE3ZmZmZmZmZgotCi0JCSMgdGhlc2UgbG9vayBsaWtlIG5lZ2F0aXZlcywgYnV0IHdpdGhvdXQgYSBsZWFkaW5nICYjMzk7LSYjMzk7IGFyZQotCQkjIGFjdHVhbGx5IGxhcmdlIHBvc2l0aXZlcyAoc2hvdWxkIGJlIHJlamVjdGVkIGFzIGFib3ZlCi0JCSMgZGVzcGl0ZSBiZWluZyB6ZXJvLyYjNDM7MS8tMS9JTlRfTUlOL0lOVF9NQVggaW4gdGhlIGxvd2VyIDMyKQogCQkweGZmZmZmZmZmMDAwMDAwMDAKIAkJMHhmZmZmZmZmZjAwMDAwMDAxCiAJCTB4ZmZmZmZmZmZmZmZmZmZmZgpAQCAtMzY3LDc5MyAmIzQzOzI0NCw1MTUgQEAgcnVuX3dpZGVpbnRfdGVzdHMoKQogCiAJZm9yIHNpZ24gaW4gJiMzOTsmIzM5OyAmIzM5Oy0mIzM5OzsgZG8KIAkJZm9yIG1hZyBpbiAmIzM0OyR7bWFnbml0dWRlc1tAXX0mIzM0OzsgZG8KLQkJCWNoZWNrX2ZhaWx1cmUgJiMzNDske3NpZ259JHttYWd9JiMzNDsKJiM0MzsJCQlhc3NlcnRfbm9fcGFydGlhbF91cGRhdGUgJiMzNDskZmlsZSYjMzQ7ICYjMzQ7JGJhc2VsaW5lJiMzNDsgJiMzNDske3NpZ259JHttYWd9JiMzNDsgfHwgc3RhdHVzPTEKIAkJZG9uZQogCWRvbmUKJiM0MzsJcmV0dXJuICYjMzQ7JHN0YXR1cyYjMzQ7CiB9CiAKLSMgWW91ciB0ZXN0IG11c3QgYWNjZXB0IGRpZ2l0cyAzIGFuZCA0IHRvIHVzZSB0aGlzCi1ydW5fbGltaXRfZGlnaXQoKQomIzQzOyMgQSBzaW5nbGUgd3JpdGUgaXMgY2FwcGVkIGF0IE1BWF9ESUdJVFMgKFBBR0VfU0laRS84KSBieXRlczsgY2hlY2sgdGhhdAomIzQzOyMgbGVhZGluZyB3aGl0ZXNwYWNlIHVwIHRvIHRoYXQgbGltaXQgaXMgaWdub3JlZCwgYW5kIHRoYXQgUEFHRV9TSVpFIG9mCiYjNDM7IyBsZWFkaW5nIHdoaXRlc3BhY2UgcHVzaGVzIHRoZSB2YWx1ZSBwYXN0IHRoZSBsaW1pdCBhbmQgZmFpbHMuCiYjNDM7YXNzZXJ0X2RpZ2l0X2xpbWl0KCkgICMgJmx0O2ZpbGUmZ3Q7ICZsdDtiYXNlbGluZSZndDsKIHsKLQllY2hvIC1uICYjMzQ7Q2hlY2tpbmcgaWdub3Jpbmcgc3BhY2VzIHVwIHRvIFBBR0VfU0laRSB3b3JrcyBvbiB3cml0ZSAuLi4gJiMzNDsKLQlyZXNldF92YWxzCi0KLQlMSU1JVD0kKChNQVhfRElHSVRTIC0xKSkKLQlURVNUX1NUUj0mIzM0OzMmIzM0OwotCShwZXJsIC1lICYjMzk7cHJpbnQgJiMzNDsgJiMzNDsgeCAmIzM5OyRMSU1JVCYjMzk7OyYjMzk7OyBlY2hvICYjMzQ7JHtURVNUX1NUUn0mIzM0OykgfCBcCi0JCWRkIG9mPSYjMzQ7JHtUQVJHRVR9JiMzNDsgMiZndDsvZGV2L251bGwKLQotCWlmICEgdmVyaWZ5ICYjMzQ7JHtUQVJHRVR9JiMzNDs7IHRoZW4KLQkJZWNobyAmIzM0O0ZBSUwmIzM0OyAmZ3Q7JmFtcDsyCi0JCXJjPTEKLQllbHNlCi0JCWVjaG8gJiMzNDtPSyYjMzQ7Ci0JZmkKLQl0ZXN0X3JjCiYjNDM7CWxvY2FsIGZpbGU9JDEgYmFzZWxpbmU9JDIgc3RhdHVzPTAKIAotCWVjaG8gLW4gJiMzNDtDaGVja2luZyBwYXNzaW5nIFBBR0VfU0laRSBvZiBzcGFjZXMgZmFpbHMgb24gd3JpdGUgLi4uICYjMzQ7Ci0JcmVzZXRfdmFscwomIzQzOwlwcmludGYgJiMzOTslcyYjMzk7ICYjMzQ7JGJhc2VsaW5lJiMzNDsgJmd0OyAmIzM0OyRmaWxlJiMzNDsKJiM0MzsJd3JpdGVfcGFkZGVkX2RpZ2l0cyAmIzM0OyRmaWxlJiMzNDsgJiMzNDskKChNQVhfRElHSVRTIC0gMSkpJiMzNDsgJiMzNDszJiMzNDsKJiM0MzsJYXNzZXJ0X2NvbnRlbnQgJiMzNDskZmlsZSYjMzQ7ICYjMzQ7MyYjMzQ7IHx8IHN0YXR1cz0xCiAKLQlMSU1JVD0kKChNQVhfRElHSVRTKSkKLQlURVNUX1NUUj0mIzM0OzQmIzM0OwotCShwZXJsIC1lICYjMzk7cHJpbnQgJiMzNDsgJiMzNDsgeCAmIzM5OyRMSU1JVCYjMzk7OyYjMzk7OyBlY2hvICYjMzQ7JHtURVNUX1NUUn0mIzM0OykgfCBcCi0JCWRkIG9mPSYjMzQ7JHtUQVJHRVR9JiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJcHJpbnRmICYjMzk7JXMmIzM5OyAmIzM0OyRiYXNlbGluZSYjMzQ7ICZndDsgJiMzNDskZmlsZSYjMzQ7CiYjNDM7CXdyaXRlX3BhZGRlZF9kaWdpdHMgJiMzNDskZmlsZSYjMzQ7ICYjMzQ7JE1BWF9ESUdJVFMmIzM0OyAmIzM0OzQmIzM0OwomIzQzOwlhc3NlcnRfY29udGVudF9yZWplY3RlZCAmIzM0OyRmaWxlJiMzNDsgJiMzNDs0JiMzNDsgfHwgc3RhdHVzPTEKIAotCWlmIHZlcmlmeSAmIzM0OyR7VEFSR0VUfSYjMzQ7OyB0aGVuCi0JCWVjaG8gJiMzNDtGQUlMJiMzNDsgJmd0OyZhbXA7MgotCQlyYz0xCi0JZWxzZQotCQllY2hvICYjMzQ7T0smIzM0OwotCWZpCi0JdGVzdF9yYwomIzQzOwlyZXR1cm4gJiMzNDskc3RhdHVzJiMzNDsKIH0KIAotIyBZb3UgYXJlIHVzaW5nIGFuIGludAotcnVuX2xpbWl0X2RpZ2l0X2ludCgpCiYjNDM7IyBwcm9jX2RvaW50dmVjKCktc3BlY2lmaWMgcmFuZ2UgY2hlY2tzOiBJTlRfTUFYIG11c3QgYmUgYWNjZXB0ZWQsIElOVF9NQVgmIzQzOzEKJiM0MzsjIG11c3QgYmUgcmVqZWN0ZWQsIGFuZCBuZWdhdGl2ZSB2YWx1ZXMgbXVzdCBiZSBhY2NlcHRlZC4KJiM0Mzthc3NlcnRfaW50X3JhbmdlKCkgICMgJmx0O2ZpbGUmZ3Q7ICZsdDtiYXNlbGluZSZndDsKIHsKLQllY2hvIC1uICYjMzQ7VGVzdGluZyBJTlRfTUFYIHdvcmtzIC4uLiAmIzM0OwotCXJlc2V0X3ZhbHMKLQlURVNUX1NUUj0mIzM0OyRJTlRfTUFYJiMzNDsKLQllY2hvIC1uICRURVNUX1NUUiAmZ3Q7ICRUQVJHRVQKLQotCWlmICEgdmVyaWZ5ICYjMzQ7JHtUQVJHRVR9JiMzNDs7IHRoZW4KLQkJZWNobyAmIzM0O0ZBSUwmIzM0OyAmZ3Q7JmFtcDsyCi0JCXJjPTEKLQllbHNlCi0JCWVjaG8gJiMzNDtPSyYjMzQ7Ci0JZmkKLQl0ZXN0X3JjCiYjNDM7CWxvY2FsIGZpbGU9JDEgYmFzZWxpbmU9JDIgc3RhdHVzPTAKIAotCWVjaG8gLW4gJiMzNDtUZXN0aW5nIElOVF9NQVggJiM0MzsgMSB3aWxsIGZhaWwgYXMgZXhwZWN0ZWQgLi4uICYjMzQ7Ci0JcmVzZXRfdmFscwotCWxldCBURVNUX1NUUj0kSU5UX01BWCYjNDM7MQotCWVjaG8gLW4gJFRFU1RfU1RSICZndDsgJFRBUkdFVCAyJmd0OyAvZGV2L251bGwKJiM0MzsJcHJpbnRmICYjMzk7JXMmIzM5OyAmIzM0OyRiYXNlbGluZSYjMzQ7ICZndDsgJiMzNDskZmlsZSYjMzQ7CiYjNDM7CXByaW50ZiAmIzM5OyVzJiMzOTsgJiMzNDskSU5UX01BWCYjMzQ7ICZndDsgJiMzNDskZmlsZSYjMzQ7CiYjNDM7CWFzc2VydF9jb250ZW50ICYjMzQ7JGZpbGUmIzM0OyAmIzM0OyRJTlRfTUFYJiMzNDsgfHwgc3RhdHVzPTEKIAotCWlmIHZlcmlmeSAmIzM0OyR7VEFSR0VUfSYjMzQ7OyB0aGVuCi0JCWVjaG8gJiMzNDtGQUlMJiMzNDsgJmd0OyZhbXA7MgotCQlyYz0xCi0JZWxzZQotCQllY2hvICYjMzQ7T0smIzM0OwotCWZpCi0JdGVzdF9yYwotCi0JZWNobyAtbiAmIzM0O1Rlc3RpbmcgbmVnYXRpdmUgdmFsdWVzIHdpbGwgd29yayBhcyBleHBlY3RlZCAuLi4gJiMzNDsKLQlyZXNldF92YWxzCi0JVEVTVF9TVFI9JiMzNDstMyYjMzQ7Ci0JZWNobyAtbiAkVEVTVF9TVFIgJmd0OyAkVEFSR0VUIDImZ3Q7IC9kZXYvbnVsbAotCWlmICEgdmVyaWZ5ICYjMzQ7JHtUQVJHRVR9JiMzNDs7IHRoZW4KLQkJZWNobyAmIzM0O0ZBSUwmIzM0OyAmZ3Q7JmFtcDsyCi0JCXJjPTEKLQllbHNlCi0JCWVjaG8gJiMzNDtPSyYjMzQ7Ci0JZmkKLQl0ZXN0X3JjCi19CiYjNDM7CWFzc2VydF9ub19wYXJ0aWFsX3VwZGF0ZSAmIzM0OyRmaWxlJiMzNDsgJiMzNDskYmFzZWxpbmUmIzM0OyAmIzM0OyQoKElOVF9NQVggJiM0MzsgMSkpJiMzNDsgfHwgc3RhdHVzPTEKIAotIyBZb3UgdXNlZCBhbiBpbnQgYXJyYXkKLXJ1bl9saW1pdF9kaWdpdF9pbnRfYXJyYXkoKQotewotCWVjaG8gLW4gJiMzNDtUZXN0aW5nIGFycmF5IHdvcmtzIGFzIGV4cGVjdGVkIC4uLiAmIzM0OwotCVRFU1RfU1RSPSYjMzQ7NCAzIDIgMSYjMzQ7Ci0JZWNobyAtbiAkVEVTVF9TVFIgJmd0OyAkVEFSR0VUCiYjNDM7CXByaW50ZiAmIzM5OyVzJiMzOTsgJiMzNDskYmFzZWxpbmUmIzM0OyAmZ3Q7ICYjMzQ7JGZpbGUmIzM0OwomIzQzOwlwcmludGYgJiMzOTslcyYjMzk7ICYjMzQ7LTMmIzM0OyAmZ3Q7ICYjMzQ7JGZpbGUmIzM0OyAyJmd0Oy9kZXYvbnVsbAomIzQzOwlhc3NlcnRfY29udGVudCAmIzM0OyRmaWxlJiMzNDsgJiMzNDstMyYjMzQ7IHx8IHN0YXR1cz0xCiAKLQlpZiAhIHZlcmlmeV9kaWZmX3cgJiMzNDske1RBUkdFVH0mIzM0OzsgdGhlbgotCQllY2hvICYjMzQ7RkFJTCYjMzQ7ICZndDsmYW1wOzIKLQkJcmM9MQotCWVsc2UKLQkJZWNobyAmIzM0O09LJiMzNDsKLQlmaQotCXRlc3RfcmMKLQotCWVjaG8gLW4gJiMzNDtUZXN0aW5nIHNraXBwaW5nIHRyYWlsaW5nIGFycmF5IGVsZW1lbnRzIHdvcmtzIC4uLiAmIzM0OwotCSMgRG8gbm90IHJlc2V0X3ZhbHMsIGNhcnJ5IG9uIHRoZSB2YWx1ZXMgZnJvbSB0aGUgbGFzdCB0ZXN0LgotCSMgSWYgd2Ugb25seSBlY2hvIGluIHR3byBkaWdpdHMgdGhlIGxhc3QgdHdvIGFyZSBsZWZ0IGludGFjdAotCVRFU1RfU1RSPSYjMzQ7MTAwIDEwMSYjMzQ7Ci0JZWNobyAtbiAkVEVTVF9TVFIgJmd0OyAkVEFSR0VUCi0JIyBBZnRlciB3ZSBlY2hvIGluLCB0byBoZWxwIGRpZmYgd2UgbmVlZCB0byBzZXQgb24gVEVTVF9TVFIgd2hhdAotCSMgd2UgZXhwZWN0IHRoZSByZXN1bHQgdG8gYmUuCi0JVEVTVF9TVFI9JiMzNDsxMDAgMTAxIDIgMSYjMzQ7Ci0KLQlpZiAhIHZlcmlmeV9kaWZmX3cgJiMzNDske1RBUkdFVH0mIzM0OzsgdGhlbgotCQllY2hvICYjMzQ7RkFJTCYjMzQ7ICZndDsmYW1wOzIKLQkJcmM9MQotCWVsc2UKLQkJZWNobyAmIzM0O09LJiMzNDsKLQlmaQotCXRlc3RfcmMKLQotCWVjaG8gLW4gJiMzNDtUZXN0aW5nIFBBR0VfU0laRSBsaW1pdCBvbiBhcnJheSB3b3JrcyAuLi4gJiMzNDsKLQkjIERvIG5vdCByZXNldF92YWxzLCBjYXJyeSBvbiB0aGUgdmFsdWVzIGZyb20gdGhlIGxhc3QgdGVzdC4KLQkjIEV2ZW4gaWYgeW91IHVzZSBhbiBpbnQgYXJyYXksIHlvdSBhcmUgc3RpbGwgcmVzdHJpY3RlZCB0bwotCSMgTUFYX0RJR0lUUywgdGhpcyBpcyBhIGtub3duIGxpbWl0YXRpb24uIFRlc3QgbGltaXQgd29ya3MuCi0JTElNSVQ9JCgoTUFYX0RJR0lUUyAtMSkpCi0JVEVTVF9TVFI9JiMzNDs5JiMzNDsKLQkocGVybCAtZSAmIzM5O3ByaW50ICYjMzQ7ICYjMzQ7IHggJiMzOTskTElNSVQmIzM5OzsmIzM5OzsgZWNobyAmIzM0OyR7VEVTVF9TVFJ9JiMzNDspIHwgXAotCQlkZCBvZj0mIzM0OyR7VEFSR0VUfSYjMzQ7IDImZ3Q7L2Rldi9udWxsCi0KLQlURVNUX1NUUj0mIzM0OzkgMTAxIDIgMSYjMzQ7Ci0JaWYgISB2ZXJpZnlfZGlmZl93ICYjMzQ7JHtUQVJHRVR9JiMzNDs7IHRoZW4KLQkJZWNobyAmIzM0O0ZBSUwmIzM0OyAmZ3Q7JmFtcDsyCi0JCXJjPTEKLQllbHNlCi0JCWVjaG8gJiMzNDtPSyYjMzQ7Ci0JZmkKLQl0ZXN0X3JjCi0KLQllY2hvIC1uICYjMzQ7VGVzdGluZyBleGNlZWRpbmcgUEFHRV9TSVpFIGxpbWl0IGZhaWxzIGFzIGV4cGVjdGVkIC4uLiAmIzM0OwotCSMgRG8gbm90IHJlc2V0X3ZhbHMsIGNhcnJ5IG9uIHRoZSB2YWx1ZXMgZnJvbSB0aGUgbGFzdCB0ZXN0LgotCSMgTm93IGdvIG92ZXIgbGltaXQuCi0JTElNSVQ9JCgoTUFYX0RJR0lUUykpCi0JVEVTVF9TVFI9JiMzNDs3JiMzNDsKLQkocGVybCAtZSAmIzM5O3ByaW50ICYjMzQ7ICYjMzQ7IHggJiMzOTskTElNSVQmIzM5OzsmIzM5OzsgZWNobyAmIzM0OyR7VEVTVF9TVFJ9JiMzNDspIHwgXAotCQlkZCBvZj0mIzM0OyR7VEFSR0VUfSYjMzQ7IDImZ3Q7L2Rldi9udWxsCi0KLQlURVNUX1NUUj0mIzM0OzcgMTAxIDIgMSYjMzQ7Ci0JaWYgdmVyaWZ5X2RpZmZfdyAmIzM0OyR7VEFSR0VUfSYjMzQ7OyB0aGVuCi0JCWVjaG8gJiMzNDtGQUlMJiMzNDsgJmd0OyZhbXA7MgotCQlyYz0xCi0JZWxzZQotCQllY2hvICYjMzQ7T0smIzM0OwotCWZpCi0JdGVzdF9yYwomIzQzOwlyZXR1cm4gJiMzNDskc3RhdHVzJiMzNDsKIH0KIAotIyBZb3UgdXNlZCBhbiBpbnQgYXJyYXkgYW5kIG9uZSBvZiB0aGUgZWxlbWVudHMgaXMgbm90IGFjY2VwdGFibGUKLXJ1bl9pbnRfYXJyYXlfbm9fcGFydGlhbF91cGRhdGUoKQomIzQzOyMgcHJvY19kb3VpbnR2ZWMoKS1zcGVjaWZpYyByYW5nZSBjaGVja3M6IFVJTlRfTUFYIG11c3QgYmUgYWNjZXB0ZWQsCiYjNDM7IyBVSU5UX01BWCYjNDM7MSBtdXN0IGJlIHJlamVjdGVkLCBhbmQgbmVnYXRpdmUgdmFsdWVzIG11c3QgYmUgcmVqZWN0ZWQgdG9vLgomIzQzO2Fzc2VydF91aW50X3JhbmdlKCkgICMgJmx0O2ZpbGUmZ3Q7ICZsdDtiYXNlbGluZSZndDsKIHsKLQllY2hvIC1uICYjMzQ7VGVzdGluZyBpbnZhbGlkIGFycmF5IGVsZW1lbnQgZG9lcyBub3QgcGFydGlhbGx5IHVwZGF0ZSAuLi4gJiMzNDsKLQkjIEV4cGVjdCBmYWlsdXJlIGJlY2F1c2Ugb2YgM3JkIGVsZW1lbnQgKGFiYykuCi0JaWYgISB2ZXJpZnlfbm9fcGFydGlhbF91cGRhdGUgJiMzNDsxIDIgMyA0JiMzNDsgJiMzNDsxMCAyMCBhYmMgNDAmIzM0OzsgdGhlbgotCQllY2hvICYjMzQ7RkFJTCYjMzQ7ICZndDsmYW1wOzIKLQkJcmM9MQotCWVsc2UKLQkJZWNobyAmIzM0O09LJiMzNDsKLQlmaQotCXRlc3RfcmMKJiM0MzsJbG9jYWwgZmlsZT0kMSBiYXNlbGluZT0kMiBzdGF0dXM9MAogCi0JZWNobyAtbiAmIzM0O1Rlc3Rpbmcgb3V0IG9mIHJhbmdlIGFycmF5IGVsZW1lbnQgZG9lcyBub3QgcGFydGlhbGx5IHVwZGF0ZSAuLi4gJiMzNDsKLQkjIEV4cGVjdCBmYWlsdXJlIGJlY2F1c2Ugb2YgM3JkIGVsZW1lbnQgKGdyZWF0ZXIgdGhhbiBpbnQpCi0JaWYgISB2ZXJpZnlfbm9fcGFydGlhbF91cGRhdGUgJiMzNDsxIDIgMyA0JiMzNDsgJiMzNDsxMCAyMCAkKChJTlRfTUFYICYjNDM7IDEpKSA0MCYjMzQ7OyB0aGVuCi0JCWVjaG8gJiMzNDtGQUlMJiMzNDsgJmd0OyZhbXA7MgotCQlyYz0xCi0JZWxzZQotCQllY2hvICYjMzQ7T0smIzM0OwotCWZpCi0JdGVzdF9yYwomIzQzOwlwcmludGYgJiMzOTslcyYjMzk7ICYjMzQ7JGJhc2VsaW5lJiMzNDsgJmd0OyAmIzM0OyRmaWxlJiMzNDsKJiM0MzsJcHJpbnRmICYjMzk7JXMmIzM5OyAmIzM0OyRVSU5UX01BWCYjMzQ7ICZndDsgJiMzNDskZmlsZSYjMzQ7CiYjNDM7CWFzc2VydF9jb250ZW50ICYjMzQ7JGZpbGUmIzM0OyAmIzM0OyRVSU5UX01BWCYjMzQ7IHx8IHN0YXR1cz0xCiAKLQllY2hvIC1uICYjMzQ7VGVzdGluZyBpbnZhbGlkIGZpcnN0IGFycmF5IGVsZW1lbnQgZG9lcyBub3QgdXBkYXRlIC4uLiAmIzM0OwotCSMgRXhwZWN0IGZhaWx1cmUgb2YgMXN0IGVsZW1lbnQKLQlpZiAhIHZlcmlmeV9ub19wYXJ0aWFsX3VwZGF0ZSAmIzM0OzEgMiAzIDQmIzM0OyAmIzM0O2FiYyAyMCAzMCA0MCYjMzQ7OyB0aGVuCi0JCWVjaG8gJiMzNDtGQUlMJiMzNDsgJmd0OyZhbXA7MgotCQlyYz0xCi0JZWxzZQotCQllY2hvICYjMzQ7T0smIzM0OwotCWZpCi0JdGVzdF9yYwomIzQzOwlhc3NlcnRfbm9fcGFydGlhbF91cGRhdGUgJiMzNDskZmlsZSYjMzQ7ICYjMzQ7JGJhc2VsaW5lJiMzNDsgJiMzNDskKChVSU5UX01BWCAmIzQzOyAxKSkmIzM0OyB8fCBzdGF0dXM9MQomIzQzOwlhc3NlcnRfbm9fcGFydGlhbF91cGRhdGUgJiMzNDskZmlsZSYjMzQ7ICYjMzQ7JGJhc2VsaW5lJiMzNDsgJiMzNDstMyYjMzQ7IHx8IHN0YXR1cz0xCiYjNDM7CiYjNDM7CXJldHVybiAmIzM0OyRzdGF0dXMmIzM0OwogfQogCi0jIFlvdSBhcmUgdXNpbmcgYW4gdW5zaWduZWQgaW50Ci1ydW5fbGltaXRfZGlnaXRfdWludCgpCiYjNDM7dGVzdF9pbnRfbWlubWF4KCkKIHsKLQllY2hvIC1uICYjMzQ7VGVzdGluZyBVSU5UX01BWCB3b3JrcyAuLi4gJiMzNDsKLQlyZXNldF92YWxzCi0JVEVTVF9TVFI9JiMzNDskVUlOVF9NQVgmIzM0OwotCWVjaG8gLW4gJFRFU1RfU1RSICZndDsgJFRBUkdFVAotCi0JaWYgISB2ZXJpZnkgJiMzNDske1RBUkdFVH0mIzM0OzsgdGhlbgotCQllY2hvICYjMzQ7RkFJTCYjMzQ7ICZndDsmYW1wOzIKLQkJcmM9MQotCWVsc2UKLQkJZWNobyAmIzM0O09LJiMzNDsKLQlmaQotCXRlc3RfcmMKLQotCWVjaG8gLW4gJiMzNDtUZXN0aW5nIFVJTlRfTUFYICYjNDM7IDEgd2lsbCBmYWlsIGFzIGV4cGVjdGVkIC4uLiAmIzM0OwotCXJlc2V0X3ZhbHMKLQlURVNUX1NUUj0kKCgkVUlOVF9NQVgmIzQzOzEpKQotCWVjaG8gLW4gJFRFU1RfU1RSICZndDsgJFRBUkdFVCAyJmd0OyAvZGV2L251bGwKJiM0MzsJbG9jYWwgdD0mIzM0OyR7U1lTQ1RMfS9pbnRfMDAwMSYjMzQ7CiYjNDM7CWxvY2FsIGJhc2VsaW5lPSYjMzQ7NjAmIzM0OyB2YWw9JiMzNDs2MSYjMzQ7CiAKLQlpZiB2ZXJpZnkgJiMzNDske1RBUkdFVH0mIzM0OzsgdGhlbgotCQllY2hvICYjMzQ7RkFJTCYjMzQ7ICZndDsmYW1wOzIKLQkJcmM9MQotCWVsc2UKLQkJZWNobyAmIzM0O09LJiMzNDsKLQlmaQotCXRlc3RfcmMKJiM0MzsJW1sgLWYgJiMzNDskdCYjMzQ7IF1dIHx8IHsgUkVUPSRLU0ZUX1NLSVA7IHJldHVybjsgfQogCi0JZWNobyAtbiAmIzM0O1Rlc3RpbmcgbmVnYXRpdmUgdmFsdWVzIHdpbGwgbm90IHdvcmsgYXMgZXhwZWN0ZWQgLi4uICYjMzQ7Ci0JcmVzZXRfdmFscwotCVRFU1RfU1RSPSYjMzQ7LTMmIzM0OwotCWVjaG8gLW4gJFRFU1RfU1RSICZndDsgJFRBUkdFVCAyJmd0OyAvZGV2L251bGwKLQotCWlmIHZlcmlmeSAmIzM0OyR7VEFSR0VUfSYjMzQ7OyB0aGVuCi0JCWVjaG8gJiMzNDtGQUlMJiMzNDsgJmd0OyZhbXA7MgotCQlyYz0xCi0JZWxzZQotCQllY2hvICYjMzQ7T0smIzM0OwotCWZpCi0JdGVzdF9yYwomIzQzOwlhc3NlcnRfd3JpdGVfcGF0dGVybnMgJiMzNDskdCYjMzQ7ICYjMzQ7JGJhc2VsaW5lJiMzNDsgJiMzNDskdmFsJiMzNDsgfHwgUkVUPSRLU0ZUX0ZBSUwKJiM0MzsJYXNzZXJ0X3dpZGVpbnRfd3JpdGVzX3JlamVjdGVkICYjMzQ7JHQmIzM0OyAmIzM0OyRiYXNlbGluZSYjMzQ7IHx8IFJFVD0kS1NGVF9GQUlMCiYjNDM7CWFzc2VydF9kaWdpdF9saW1pdCAmIzM0OyR0JiMzNDsgJiMzNDskYmFzZWxpbmUmIzM0OyB8fCBSRVQ9JEtTRlRfRkFJTAogfQogCi1ydW5fc3RyaW5ndGVzdHMoKQomIzQzO3Rlc3RfaW50X3BsYWluKCkKIHsKLQllY2hvIC1uICYjMzQ7V3JpdGluZyBlbnRpcmUgc3lzY3RsIGluIHNob3J0IHdyaXRlcyAuLi4gJiMzNDsKLQlzZXRfb3JpZwotCWRkIGlmPSYjMzQ7JHtURVNUX0ZJTEV9JiMzNDsgb2Y9JiMzNDske1RBUkdFVH0mIzM0OyBicz0xIDImZ3Q7L2Rldi9udWxsCi0JaWYgISB2ZXJpZnkgJiMzNDske1RBUkdFVH0mIzM0OzsgdGhlbgotCQllY2hvICYjMzQ7RkFJTCYjMzQ7ICZndDsmYW1wOzIKLQkJcmM9MQotCWVsc2UKLQkJZWNobyAmIzM0O09LJiMzNDsKLQlmaQomIzQzOwlsb2NhbCB0PSYjMzQ7JHtTWVNDVEx9L2ludF8wMDAyJiMzNDsKJiM0MzsJbG9jYWwgYmFzZWxpbmU9JiMzNDsxJiMzNDsgdmFsPSYjMzQ7MiYjMzQ7CiAKLQllY2hvIC1uICYjMzQ7V3JpdGluZyBtaWRkbGUgb2Ygc3lzY3RsIGFmdGVyIHVuc3luY2hyb25pemVkIHNlZWsgLi4uICYjMzQ7Ci0Jc2V0X3Rlc3QKLQlkZCBpZj0mIzM0OyR7VEVTVF9GSUxFfSYjMzQ7IG9mPSYjMzQ7JHtUQVJHRVR9JiMzNDsgYnM9MSBzZWVrPTEgMiZndDsvZGV2L251bGwKLQlpZiB2ZXJpZnkgJiMzNDske1RBUkdFVH0mIzM0OzsgdGhlbgotCQllY2hvICYjMzQ7RkFJTCYjMzQ7ICZndDsmYW1wOzIKLQkJcmM9MQotCWVsc2UKLQkJZWNobyAmIzM0O09LJiMzNDsKLQlmaQomIzQzOwlbWyAtZiAmIzM0OyR0JiMzNDsgXV0gfHwgeyBSRVQ9JEtTRlRfU0tJUDsgcmV0dXJuOyB9CiAKLQllY2hvIC1uICYjMzQ7Q2hlY2tpbmcgc3lzY3RsIG1heGxlbiBpcyBhdCBsZWFzdCAkTUFYTEVOIC4uLiAmIzM0OwotCXNldF9vcmlnCi0JcGVybCAtZSAmIzM5O3ByaW50ICYjMzQ7QSYjMzQ7IHggKCYjMzk7JiMzNDske01BWExFTn0mIzM0OyYjMzk7LTIpLCAmIzM0O0ImIzM0OzsmIzM5OyB8IFwKLQkJZGQgb2Y9JiMzNDske1RBUkdFVH0mIzM0OyBicz0mIzM0OyR7TUFYTEVOfSYjMzQ7IDImZ3Q7L2Rldi9udWxsCi0JaWYgISBncmVwIC1xIEIgJiMzNDske1RBUkdFVH0mIzM0OzsgdGhlbgotCQllY2hvICYjMzQ7RkFJTCYjMzQ7ICZndDsmYW1wOzIKLQkJcmM9MQotCWVsc2UKLQkJZWNobyAmIzM0O09LJiMzNDsKLQlmaQotCi0JZWNobyAtbiAmIzM0O0NoZWNraW5nIHN5c2N0bCBrZWVwcyBvcmlnaW5hbCBzdHJpbmcgb24gb3ZlcmZsb3cgYXBwZW5kIC4uLiAmIzM0OwotCXNldF9vcmlnCi0JcGVybCAtZSAmIzM5O3ByaW50ICYjMzQ7QSYjMzQ7IHggKCYjMzk7JiMzNDske01BWExFTn0mIzM0OyYjMzk7LTEpLCAmIzM0O0ImIzM0OzsmIzM5OyB8IFwKLQkJZGQgb2Y9JiMzNDske1RBUkdFVH0mIzM0OyBicz0kKCggTUFYTEVOIC0gMSApKSAyJmd0Oy9kZXYvbnVsbAotCWlmIGdyZXAgLXEgQiAmIzM0OyR7VEFSR0VUfSYjMzQ7OyB0aGVuCi0JCWVjaG8gJiMzNDtGQUlMJiMzNDsgJmd0OyZhbXA7MgotCQlyYz0xCi0JZWxzZQotCQllY2hvICYjMzQ7T0smIzM0OwotCWZpCi0KLQllY2hvIC1uICYjMzQ7Q2hlY2tpbmcgc3lzY3RsIHN0YXlzIE5VTEwgdGVybWluYXRlZCBvbiB3cml0ZSAuLi4gJiMzNDsKLQlzZXRfb3JpZwotCXBlcmwgLWUgJiMzOTtwcmludCAmIzM0O0EmIzM0OyB4ICgmIzM5OyYjMzQ7JHtNQVhMRU59JiMzNDsmIzM5Oy0xKSwgJiMzNDtCJiMzNDs7JiMzOTsgfCBcCi0JCWRkIG9mPSYjMzQ7JHtUQVJHRVR9JiMzNDsgYnM9JiMzNDske01BWExFTn0mIzM0OyAyJmd0Oy9kZXYvbnVsbAotCWlmIGdyZXAgLXEgQiAmIzM0OyR7VEFSR0VUfSYjMzQ7OyB0aGVuCi0JCWVjaG8gJiMzNDtGQUlMJiMzNDsgJmd0OyZhbXA7MgotCQlyYz0xCi0JZWxzZQotCQllY2hvICYjMzQ7T0smIzM0OwotCWZpCi0KLQllY2hvIC1uICYjMzQ7Q2hlY2tpbmcgc3lzY3RsIHN0YXlzIE5VTEwgdGVybWluYXRlZCBvbiBvdmVyd3JpdGUgLi4uICYjMzQ7Ci0Jc2V0X29yaWcKLQlwZXJsIC1lICYjMzk7cHJpbnQgJiMzNDtBJiMzNDsgeCAoJiMzOTsmIzM0OyR7TUFYTEVOfSYjMzQ7JiMzOTstMSksICYjMzQ7QkImIzM0OzsmIzM5OyB8IFwKLQkJZGQgb2Y9JiMzNDske1RBUkdFVH0mIzM0OyBicz0kKCggJE1BWExFTiAmIzQzOyAxICkpIDImZ3Q7L2Rldi9udWxsCi0JaWYgZ3JlcCAtcSBCICYjMzQ7JHtUQVJHRVR9JiMzNDs7IHRoZW4KLQkJZWNobyAmIzM0O0ZBSUwmIzM0OyAmZ3Q7JmFtcDsyCi0JCXJjPTEKLQllbHNlCi0JCWVjaG8gJiMzNDtPSyYjMzQ7Ci0JZmkKLQotCXRlc3RfcmMKJiM0MzsJYXNzZXJ0X3dyaXRlX3BhdHRlcm5zICYjMzQ7JHQmIzM0OyAmIzM0OyRiYXNlbGluZSYjMzQ7ICYjMzQ7JHZhbCYjMzQ7IHx8IFJFVD0kS1NGVF9GQUlMCiYjNDM7CWFzc2VydF93aWRlaW50X3dyaXRlc19yZWplY3RlZCAmIzM0OyR0JiMzNDsgJiMzNDskYmFzZWxpbmUmIzM0OyB8fCBSRVQ9JEtTRlRfRkFJTAomIzQzOwlhc3NlcnRfZGlnaXRfbGltaXQgJiMzNDskdCYjMzQ7ICYjMzQ7JGJhc2VsaW5lJiMzNDsgfHwgUkVUPSRLU0ZUX0ZBSUwKJiM0MzsJYXNzZXJ0X2ludF9yYW5nZSAmIzM0OyR0JiMzNDsgJiMzNDskYmFzZWxpbmUmIzM0OyB8fCBSRVQ9JEtTRlRfRkFJTAogfQogCi10YXJnZXRfZXhpc3RzKCkKJiM0Mzt0ZXN0X3VpbnRfcGxhaW4oKQogewotCVRBUkdFVD0mIzM0OyR7U1lTQ1RMfS8kMSYjMzQ7Ci0JVEVTVF9JRD0mIzM0OyQyJiMzNDsKJiM0MzsJbG9jYWwgdD0mIzM0OyR7U1lTQ1RMfS91aW50XzAwMDEmIzM0OwomIzQzOwlsb2NhbCBiYXNlbGluZT0mIzM0OzMxNCYjMzQ7IHZhbD0mIzM0OzMxNSYjMzQ7CiAKLQlpZiBbICEgLWYgJHtUQVJHRVR9IF0gOyB0aGVuCi0JCXJldHVybiAwCi0JZmkKLQlyZXR1cm4gMQotfQomIzQzOwlbWyAtZiAmIzM0OyR0JiMzNDsgXV0gfHwgeyBSRVQ9JEtTRlRfU0tJUDsgcmV0dXJuOyB9CiAKLXJ1bl9iaXRtYXB0ZXN0KCkgewotCSMgVG90YWwgbGVuZ3RoIG9mIGJpdG1hcHMgc3RyaW5nIHRvIHVzZSwgYSBiaXQgdW5kZXIKLQkjIHRoZSBtYXhpbXVtIGlucHV0IHNpemUgb2YgdGhlIHRlc3Qgbm9kZQotCUxFTkdUSD0kKChSQU5ET00gJSA2NTAwMCkpCiYjNDM7CWFzc2VydF93cml0ZV9wYXR0ZXJucyAmIzM0OyR0JiMzNDsgJiMzNDskYmFzZWxpbmUmIzM0OyAmIzM0OyR2YWwmIzM0OyB8fCBSRVQ9JEtTRlRfRkFJTAomIzQzOwlhc3NlcnRfd2lkZWludF93cml0ZXNfcmVqZWN0ZWQgJiMzNDskdCYjMzQ7ICYjMzQ7JGJhc2VsaW5lJiMzNDsgfHwgUkVUPSRLU0ZUX0ZBSUwKJiM0MzsJYXNzZXJ0X2RpZ2l0X2xpbWl0ICYjMzQ7JHQmIzM0OyAmIzM0OyRiYXNlbGluZSYjMzQ7IHx8IFJFVD0kS1NGVF9GQUlMCiYjNDM7CWFzc2VydF91aW50X3JhbmdlICYjMzQ7JHQmIzM0OyAmIzM0OyRiYXNlbGluZSYjMzQ7IHx8IFJFVD0kS1NGVF9GQUlMCiYjNDM7fQogCi0JIyBGaXJzdCBiaXQgdG8gc2V0Ci0JQklUPSQoKFJBTkRPTSAlIDEwMjQpKQomIzQzOyMgcHJvY19kb3N0cmluZygpLXNwZWNpZmljIHdyaXRlIHBhdHRlcm5zCiYjNDM7YXNzZXJ0X3N0cmluZ193cml0ZV9wYXR0ZXJucygpICAjICZsdDtmaWxlJmd0OyAmbHQ7YmFzZWxpbmUmZ3Q7ICZsdDt2YWwmZ3Q7ICZsdDttYXhsZW4mZ3Q7CiYjNDM7ewomIzQzOwlsb2NhbCBmaWxlPSQxIGJhc2VsaW5lPSQyIHZhbD0kMyBtYXhsZW49JDQgc3RhdHVzPTAKIAotCSMgU3RyaW5nIGNvbnRhaW5pbmcgb3VyIGxpc3Qgb2YgYml0cyB0byBzZXQKLQlURVNUX1NUUj0kQklUCiYjNDM7CXByaW50ZiAmIzM5OyVzJiMzOTsgJiMzNDskYmFzZWxpbmUmIzM0OyAmZ3Q7ICYjMzQ7JGZpbGUmIzM0OwomIzQzOwl3cml0ZV9pbl9jaHVua3MgJiMzNDskZmlsZSYjMzQ7ICYjMzQ7JHZhbCYjMzQ7IDEKJiM0MzsJYXNzZXJ0X2NvbnRlbnQgJiMzNDskZmlsZSYjMzQ7ICYjMzQ7JHZhbCYjMzQ7IHx8IHN0YXR1cz0xCiAKLQkjIGJ1aWxkIHVwIHRoZSBzdHJpbmcKLQl3aGlsZSBbICYjMzQ7JHsjVEVTVF9TVFJ9JiMzNDsgLWxlICYjMzQ7JExFTkdUSCYjMzQ7IF07IGRvCi0JCSMgTWFrZSBzdXJlIG5leHQgZW50cnkgaXMgZGlzY29udGlndW91cywKLQkJIyBza2lwIGFoZWFkIGF0IGxlYXN0IDIKLQkJQklUPSQoKEJJVCAmIzQzOyAkKCgyICYjNDM7IFJBTkRPTSAlIDEwKSkpKQomIzQzOwlwcmludGYgJiMzOTslcyYjMzk7ICYjMzQ7JHZhbCYjMzQ7ICZndDsgJiMzNDskZmlsZSYjMzQ7CiYjNDM7CXdyaXRlX2F0X29mZnNldCAmIzM0OyRmaWxlJiMzNDsgJiMzNDskdmFsJiMzNDsgMSAxCiYjNDM7CWFzc2VydF9jb250ZW50X3JlamVjdGVkICYjMzQ7JGZpbGUmIzM0OyAmIzM0OyR2YWwmIzM0OyB8fCBzdGF0dXM9MQogCi0JCSMgQWRkIG5ldyBiaXQgdG8gdGhlIGxpc3QKLQkJVEVTVF9TVFI9JiMzNDske1RFU1RfU1RSfSwke0JJVH0mIzM0OwomIzQzOwkjIHN5c2N0bCBtYXhsZW4gaXMgYXQgbGVhc3QgJG1heGxlbgomIzQzOwlwcmludGYgJiMzOTslcyYjMzk7ICYjMzQ7JGJhc2VsaW5lJiMzNDsgJmd0OyAmIzM0OyRmaWxlJiMzNDsKJiM0MzsJd3JpdGVfb3ZlcmxvbmcgJiMzNDskZmlsZSYjMzQ7ICYjMzQ7JCgobWF4bGVuIC0gMikpJiMzNDsgJiMzNDtCJiMzNDsgJiMzNDskbWF4bGVuJiMzNDsKJiM0MzsJYXNzZXJ0X2dyZXAgJiMzNDskZmlsZSYjMzQ7ICYjMzQ7QiYjMzQ7IHx8IHN0YXR1cz0xCiAKLQkJIyBSYW5kb21seSBtYWtlIGl0IGEgcmFuZ2UKLQkJaWYgWyAmIzM0OyQoKFJBTkRPTSAlIDIpKSYjMzQ7IC1lcSAmIzM0OzEmIzM0OyBdOyB0aGVuCi0JCQlSQU5HRV9FTkQ9JCgoQklUICYjNDM7ICQoKDEgJiM0MzsgUkFORE9NICUgMTApKSkpCi0JCQlURVNUX1NUUj0mIzM0OyR7VEVTVF9TVFJ9LSR7UkFOR0VfRU5EfSYjMzQ7Ci0JCQlCSVQ9JFJBTkdFX0VORAotCQlmaQotCWRvbmUKJiM0MzsJIyBrZWVwIG9yaWdpbmFsIHN0cmluZyBvbiBvdmVyZmxvdyBhcHBlbmQKJiM0MzsJcHJpbnRmICYjMzk7JXMmIzM5OyAmIzM0OyRiYXNlbGluZSYjMzQ7ICZndDsgJiMzNDskZmlsZSYjMzQ7CiYjNDM7CXdyaXRlX292ZXJsb25nICYjMzQ7JGZpbGUmIzM0OyAmIzM0OyQoKG1heGxlbiAtIDEpKSYjMzQ7ICYjMzQ7QiYjMzQ7ICYjMzQ7JCgobWF4bGVuIC0gMSkpJiMzNDsKJiM0MzsJYXNzZXJ0X2dyZXBfYWJzZW50ICYjMzQ7JGZpbGUmIzM0OyAmIzM0O0ImIzM0OyB8fCBzdGF0dXM9MQogCi0JZWNobyAtbiAmIzM0O0NoZWNraW5nIGJpdG1hcCBoYW5kbGVyIC4uLiAmIzM0OwotCVRFU1RfRklMRT0kKG1rdGVtcCkKLQllY2hvIC1uICYjMzQ7JFRFU1RfU1RSJiMzNDsgJmd0OyAkVEVTVF9GSUxFCiYjNDM7CSMgc3lzY3RsIHN0YXlzIE5VTEwgdGVybWluYXRlZCBvbiB3cml0ZQomIzQzOwlwcmludGYgJiMzOTslcyYjMzk7ICYjMzQ7JGJhc2VsaW5lJiMzNDsgJmd0OyAmIzM0OyRmaWxlJiMzNDsKJiM0MzsJd3JpdGVfb3ZlcmxvbmcgJiMzNDskZmlsZSYjMzQ7ICYjMzQ7JCgobWF4bGVuIC0gMSkpJiMzNDsgJiMzNDtCJiMzNDsgJiMzNDskbWF4bGVuJiMzNDsKJiM0MzsJYXNzZXJ0X2dyZXBfYWJzZW50ICYjMzQ7JGZpbGUmIzM0OyAmIzM0O0ImIzM0OyB8fCBzdGF0dXM9MQogCi0JY2F0ICRURVNUX0ZJTEUgJmd0OyAkVEFSR0VUIDImZ3Q7IC9kZXYvbnVsbAotCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgotCQllY2hvICYjMzQ7RkFJTCYjMzQ7ICZndDsmYW1wOzIKLQkJcmM9MQotCQl0ZXN0X3JjCi0JZmkKJiM0MzsJIyBzeXNjdGwgc3RheXMgTlVMTCB0ZXJtaW5hdGVkIG9uIG92ZXJ3cml0ZQomIzQzOwlwcmludGYgJiMzOTslcyYjMzk7ICYjMzQ7JGJhc2VsaW5lJiMzNDsgJmd0OyAmIzM0OyRmaWxlJiMzNDsKJiM0MzsJd3JpdGVfb3ZlcmxvbmcgJiMzNDskZmlsZSYjMzQ7ICYjMzQ7JCgobWF4bGVuIC0gMSkpJiMzNDsgJiMzNDtCQiYjMzQ7ICYjMzQ7JCgobWF4bGVuICYjNDM7IDEpKSYjMzQ7CiYjNDM7CWFzc2VydF9ncmVwX2Fic2VudCAmIzM0OyRmaWxlJiMzNDsgJiMzNDtCJiMzNDsgfHwgc3RhdHVzPTEKIAotCWlmICEgdmVyaWZ5X2RpZmZfcHJvY19maWxlICYjMzQ7JFRBUkdFVCYjMzQ7ICYjMzQ7JFRFU1RfRklMRSYjMzQ7OyB0aGVuCi0JCWVjaG8gJiMzNDtGQUlMJiMzNDsgJmd0OyZhbXA7MgotCQlyYz0xCi0JZWxzZQotCQllY2hvICYjMzQ7T0smIzM0OwotCQlyYz0wCi0JZmkKLQl0ZXN0X3JjCiYjNDM7CXJldHVybiAmIzM0OyRzdGF0dXMmIzM0OwogfQogCi1zeXNjdGxfdGVzdF8wMDAxKCkKJiM0Mzt0ZXN0X3N0cmluZ19kb3N0cmluZygpCiB7Ci0JVEFSR0VUPSYjMzQ7JHtTWVNDVEx9LyQoZ2V0X3Rlc3RfdGFyZ2V0IDAwMDEpJiMzNDsKLQlyZXNldF92YWxzCi0JT1JJRz0kKGNhdCAmIzM0OyR7VEFSR0VUfSYjMzQ7KQotCVRFU1RfU1RSPSQoKCAkT1JJRyAmIzQzOyAxICkpCi0KLQlydW5fbnVtZXJpY3Rlc3RzCi0JcnVuX3dpZGVpbnRfdGVzdHMKLQlydW5fbGltaXRfZGlnaXQKLX0KJiM0MzsJbG9jYWwgdD0mIzM0OyR7U1lTQ1RMfS9zdHJpbmdfMDAwMSYjMzQ7CiYjNDM7CWxvY2FsIGJhc2VsaW5lPSYjMzQ7KG5vbmUpJiMzNDsgdmFsPSYjMzQ7VGVzdGluZyBzeXNjdGwmIzM0OyBtYXhsZW49NjUKIAotc3lzY3RsX3Rlc3RfMDAwMigpCi17Ci0JVEFSR0VUPSYjMzQ7JHtTWVNDVEx9LyQoZ2V0X3Rlc3RfdGFyZ2V0IDAwMDIpJiMzNDsKLQlyZXNldF92YWxzCi0JT1JJRz0kKGNhdCAmIzM0OyR7VEFSR0VUfSYjMzQ7KQotCVRFU1RfU1RSPSYjMzQ7VGVzdGluZyBzeXNjdGwmIzM0OwotCSMgT25seSBzdHJpbmcgc3lzY3RscyBzdXBwb3J0IHNlZWtpbmcvYXBwZW5kaW5nLgotCU1BWExFTj02NQotCi0JcnVuX251bWVyaWN0ZXN0cwotCXJ1bl9zdHJpbmd0ZXN0cwotfQomIzQzOwlbWyAtZiAmIzM0OyR0JiMzNDsgXV0gfHwgeyBSRVQ9JEtTRlRfU0tJUDsgcmV0dXJuOyB9CiAKLXN5c2N0bF90ZXN0XzAwMDMoKQotewotCVRBUkdFVD0mIzM0OyR7U1lTQ1RMfS8kKGdldF90ZXN0X3RhcmdldCAwMDAzKSYjMzQ7Ci0JcmVzZXRfdmFscwotCU9SSUc9JChjYXQgJiMzNDske1RBUkdFVH0mIzM0OykKLQlURVNUX1NUUj0kKCggJE9SSUcgJiM0MzsgMSApKQotCi0JcnVuX251bWVyaWN0ZXN0cwotCXJ1bl93aWRlaW50X3Rlc3RzCi0JcnVuX2xpbWl0X2RpZ2l0Ci0JcnVuX2xpbWl0X2RpZ2l0X2ludAomIzQzOwlhc3NlcnRfd3JpdGVfcGF0dGVybnMgJiMzNDskdCYjMzQ7ICYjMzQ7JGJhc2VsaW5lJiMzNDsgJiMzNDskdmFsJiMzNDsgfHwgUkVUPSRLU0ZUX0ZBSUwKJiM0MzsJYXNzZXJ0X3N0cmluZ193cml0ZV9wYXR0ZXJucyAmIzM0OyR0JiMzNDsgJiMzNDskYmFzZWxpbmUmIzM0OyAmIzM0OyR2YWwmIzM0OyAmIzM0OyRtYXhsZW4mIzM0OyB8fCBSRVQ9JEtTRlRfRkFJTAogfQogCi1zeXNjdGxfdGVzdF8wMDA0KCkKJiM0MzsjIEVtaXQgYSByYW5kb20gc3lzY3RsIGJpdCBtYXAKJiM0MztyYW5kb21fYml0bWFwX3NwZWMoKQogewotCVRBUkdFVD0mIzM0OyR7U1lTQ1RMfS8kKGdldF90ZXN0X3RhcmdldCAwMDA0KSYjMzQ7Ci0JcmVzZXRfdmFscwotCU9SSUc9JChjYXQgJiMzNDske1RBUkdFVH0mIzM0OykKLQlURVNUX1NUUj0kKCggJE9SSUcgJiM0MzsgMSApKQotCi0JcnVuX251bWVyaWN0ZXN0cwotCXJ1bl93aWRlaW50X3Rlc3RzCi0JcnVuX2xpbWl0X2RpZ2l0Ci0JcnVuX2xpbWl0X2RpZ2l0X3VpbnQKLX0KJiM0MzsJbG9jYWwgbGVuZ3RoPSQoKFJBTkRPTSAlIDY1MDAwKSkKJiM0MzsJbG9jYWwgYml0PSQoKFJBTkRPTSAlIDEwMjQpKQomIzQzOwlsb2NhbCBzcGVjPSRiaXQKJiM0MzsJbG9jYWwgcmFuZ2VfZW5kCiAKLXN5c2N0bF90ZXN0XzAwMDUoKQotewotCVRBUkdFVD0mIzM0OyR7U1lTQ1RMfS8kKGdldF90ZXN0X3RhcmdldCAwMDA1KSYjMzQ7Ci0JcmVzZXRfdmFscwotCU9SSUc9JChjYXQgJiMzNDske1RBUkdFVH0mIzM0OykKJiM0MzsJd2hpbGUgWyAmIzM0OyR7I3NwZWN9JiMzNDsgLWxlICYjMzQ7JGxlbmd0aCYjMzQ7IF07IGRvCiYjNDM7CQkjIEtlZXAgZW50cmllcyBkaXNjb250aWd1b3VzLCBza2lwIGFoZWFkIGJ5IGF0IGxlYXN0IDIuCiYjNDM7CQliaXQ9JCgoYml0ICYjNDM7IDIgJiM0MzsgUkFORE9NICUgMTApKQomIzQzOwkJc3BlYz0mIzM0OyR7c3BlY30sJHtiaXR9JiMzNDsKIAotCXJ1bl9saW1pdF9kaWdpdF9pbnRfYXJyYXkKLX0KJiM0MzsJCWlmIFsgJiMzNDskKChSQU5ET00gJSAyKSkmIzM0OyAtZXEgMSBdOyB0aGVuCiYjNDM7CQkJcmFuZ2VfZW5kPSQoKGJpdCAmIzQzOyAxICYjNDM7IFJBTkRPTSAlIDEwKSkKJiM0MzsJCQlzcGVjPSYjMzQ7JHtzcGVjfS0ke3JhbmdlX2VuZH0mIzM0OwomIzQzOwkJCWJpdD0kcmFuZ2VfZW5kCiYjNDM7CQlmaQomIzQzOwlkb25lCiAKLXN5c2N0bF90ZXN0XzAwMDYoKQotewotCVRBUkdFVD0mIzM0OyR7U1lTQ1RMfS8kKGdldF90ZXN0X3RhcmdldCAwMDA2KSYjMzQ7Ci0JcmVzZXRfdmFscwotCU9SSUc9JiMzNDsmIzM0OwotCXJ1bl9iaXRtYXB0ZXN0CiYjNDM7CWVjaG8gLW4gJiMzNDskc3BlYyYjMzQ7CiB9CiAKLXN5c2N0bF90ZXN0XzAwMDcoKQomIzQzOyMgRG8gKm5vdCogcHJlZml4IHdpdGggJiMzNDt0ZXN0XyYjMzQ7LiBBbGwgYXV0b2dlbmVyYXRlIGJpdG1hcCB0ZXN0cyBjYWxsIHRoaXMgaGVscGVyCiYjNDM7Yml0bWFwX3JhbmdlX2NoZWNrX29uY2UoKSAgIyAmbHQ7aXRlciZndDsKIHsKLQlUQVJHRVQ9JiMzNDske1NZU0NUTH0vJChnZXRfdGVzdF90YXJnZXQgMDAwNykmIzM0OwotCWVjaG8gLW4gJiMzNDtUZXN0aW5nIGlmICRUQVJHRVQgaXMgc2V0IHRvIDEgLi4uICYjMzQ7CiYjNDM7CWxvY2FsIHQ9JiMzNDske1NZU0NUTH0vYml0bWFwXzAwMDEmIzM0OwomIzQzOwlsb2NhbCBzcGVjX2ZpbGUgc2VlZAogCi0JaWYgWyAhIC1mICRUQVJHRVQgXTsgdGhlbgotCQllY2hvIC1lICYjMzQ7U0tJUFBJTkdcbiRUQVJHRVQgaXMgbm90IHByZXNlbnQmIzM0OwotCQlyZXR1cm4gJGtzZnRfc2tpcAotCWZpCi0KLQlpZiBbIC1kICRESVIgXTsgdGhlbgotCQllY2hvIC1lICYjMzQ7U0tJUFBJTkdcblRlc3Qgb25seSBwb3NzaWJsZSBpZiBzeXNjdGxfdGVzdCBpcyBidWlsdC1pbiwgbm90IG1vZHVsZTomIzM0OwotCQljYXQgJFRFU1RfRElSL2NvbmZpZyAmZ3Q7JmFtcDsyCi0JCXJldHVybiAka3NmdF9za2lwCi0JZmkKJiM0MzsJW1sgLWYgJiMzNDskdCYjMzQ7IF1dIHx8IHsgUkVUPSRLU0ZUX1NLSVA7IHJldHVybjsgfQogCi0JT1JJRz0kKGNhdCAmIzM0OyR7VEFSR0VUfSYjMzQ7KQomIzQzOwlzZWVkPSQoKEJJVE1BUF9TRUVEICYjNDM7ICQxKSkKJiM0MzsJUkFORE9NPSRzZWVkCiAKLQlpZiBbIHgkT1JJRyA9ICYjMzQ7eDEmIzM0OyBdOyB0aGVuCi0JCWVjaG8gJiMzNDtPSyYjMzQ7Ci0JCXJldHVybiAwCi0JZmkKJiM0MzsJc3BlY19maWxlPSQobWt0ZW1wKQomIzQzOwlyYW5kb21fYml0bWFwX3NwZWMgJmd0OyAmIzM0OyRzcGVjX2ZpbGUmIzM0OwogCi0JaWYgWyAhIC1mIC9wcm9jL2NtZGxpbmUgXTsgdGhlbgotCQllY2hvIC1lICYjMzQ7U0tJUFBJTkdcblRoZXJlIGlzIG5vIC9wcm9jL2NtZGxpbmUgdG8gY2hlY2sgZm9yIHBhcmFtZXRlciYjMzQ7Ci0JCXJldHVybiAka3NmdF9za2lwCiYjNDM7CWlmICEgY2F0ICYjMzQ7JHNwZWNfZmlsZSYjMzQ7ICZndDsgJiMzNDskdCYjMzQ7IDImZ3Q7L2Rldi9udWxsOyB0aGVuCiYjNDM7CQlrdGFwX3ByaW50X21zZyAmIzM0OyR0OiB3cml0ZSBvZiByYW5kb20gYml0bWFwIHNwZWMgcmVqZWN0ZWQgKHNlZWQgJHNlZWQpJiMzNDsKJiM0MzsJCVJFVD0kS1NGVF9GQUlMCiYjNDM7CWVsaWYgISBhc3NlcnRfZGlmZl9wcm9jX2ZpbGUgJiMzNDskdCYjMzQ7ICYjMzQ7JHNwZWNfZmlsZSYjMzQ7OyB0aGVuCiYjNDM7CQlrdGFwX3ByaW50X21zZyAmIzM0OyR0OiByZWFkYmFjayBtaXNtYXRjaCAoc2VlZCAkc2VlZCkmIzM0OwomIzQzOwkJUkVUPSRLU0ZUX0ZBSUwKIAlmaQogCi0JRk9VTkQ9JChncmVwIC1jICYjMzQ7c3lzY3RsWy4vXWRlYnVnWy4vXXRlc3Rfc3lzY3RsWy4vXWJvb3RfaW50PTEmIzM0OyAvcHJvYy9jbWRsaW5lKQotCWlmIFsgJEZPVU5EID0gJiMzNDsxJiMzNDsgXTsgdGhlbgotCQllY2hvIC1lICYjMzQ7RkFJTFxuS2VybmVsIHBhcmFtIGZvdW5kIGJ1dCAkVEFSR0VUIGlzIG5vdCAxLiYjMzQ7ICZndDsmYW1wOzIKLQkJcmM9MQotCQl0ZXN0X3JjCi0JZmkKLQotCWVjaG8gLWUgJiMzNDtTS0lQUElOR1xuRXhwZWN0ZWQga2VybmVsIHBhcmFtZXRlciBtaXNzaW5nLiYjMzQ7Ci0JZWNobyAmIzM0O0tlcm5lbCBtdXN0IGJlIGJvb3RlZCB3aXRoIHBhcmFtZXRlcjogc3lzY3RsLmRlYnVnLnRlc3Rfc3lzY3RsLmJvb3RfaW50PTEmIzM0OwotCXJldHVybiAka3NmdF9za2lwCiYjNDM7CXJtIC1mICYjMzQ7JHNwZWNfZmlsZSYjMzQ7CiB9CiAKLXN5c2N0bF90ZXN0XzAwMDgoKQomIzQzO3Rlc3RfdW5yZWdpc3Rlcl9yZW1vdmVzX2RpcigpCiB7Ci0JVEFSR0VUPSYjMzQ7JHtTWVNDVEx9LyQoZ2V0X3Rlc3RfdGFyZ2V0IDAwMDgpJiMzNDsKLQllY2hvIC1uICYjMzQ7VGVzdGluZyBpZiAkVEFSR0VUIGlzIG1hdGNoZWQgaW4ga2VybmVsIC4uLiAmIzM0OwomIzQzOwlsb2NhbCB0PSYjMzQ7JHtTWVNDVEx9L3VucmVnaXN0ZXJfZXJyb3ImIzM0OwogCi0JaWYgWyAhIC1mICRUQVJHRVQgXTsgdGhlbgotCQllY2hvIC1lICYjMzQ7U0tJUFBJTkdcbiRUQVJHRVQgaXMgbm90IHByZXNlbnQmIzM0OwotCQlyZXR1cm4gJGtzZnRfc2tpcAomIzQzOwlpZiBbWyAtZCAmIzM0OyR0JiMzNDsgXV07IHRoZW4KJiM0MzsJCWt0YXBfcHJpbnRfbXNnICYjMzQ7JHQ6IGRpcmVjdG9yeSBzdGlsbCBleGlzdHMsIGV4cGVjdGVkIGl0IHRvIGJlIHVucmVnaXN0ZXJlZCYjMzQ7CiYjNDM7CQlSRVQ9JEtTRlRfRkFJTAogCWZpCiYjNDM7fQogCi0JT1JJR19WQUxVRT0kKGNhdCAmIzM0OyR7VEFSR0VUfSYjMzQ7KQomIzQzO3Rlc3RfbW91bnRfcG9pbnRfZXJyb3IoKQomIzQzO3sKJiM0MzsJbG9jYWwgdD0mIzM0OyR7U1lTQ1RMfS9tbnQvbW50X2Vycm9yJiMzNDsKIAotCWlmIFsgJE9SSUdfVkFMVUUgLW5lIDEgXTsgdGhlbgotCQllY2hvICYjMzQ7RkFJTCYjMzQ7ICZndDsmYW1wOzIKLQkJcmM9MQotCQl0ZXN0X3JjCiYjNDM7CWlmIFtbIC1kICYjMzQ7JHQmIzM0OyBdXTsgdGhlbgomIzQzOwkJa3RhcF9wcmludF9tc2cgJiMzNDskdDogZGlyZWN0b3J5IHVuZXhwZWN0ZWRseSBjcmVhdGVkJiMzNDsKJiM0MzsJCVJFVD0kS1NGVF9GQUlMCiAJZmkKLQotCWVjaG8gJiMzNDtPSyYjMzQ7Ci0JcmV0dXJuIDAKIH0KIAotc3lzY3RsX3Rlc3RfMDAwOSgpCiYjNDM7dGVzdF9lbXB0eV9kaXJfcmVnaXN0cmF0aW9uKCkKIHsKLQlUQVJHRVQ9JiMzNDske1NZU0NUTH0vJChnZXRfdGVzdF90YXJnZXQgMDAwOSkmIzM0OwotCWVjaG8gLW4gJiMzNDtUZXN0aW5nIGlmICRUQVJHRVQgdW5yZWdpc3RlcmVkIGNvcnJlY3RseSAuLi4gJiMzNDsKLQlpZiBbIC1kICRUQVJHRVQgXTsgdGhlbgotCQllY2hvICYjMzQ7RkFJTCYjMzQ7ICZndDsmYW1wOzIKLQkJcmM9MQotCQl0ZXN0X3JjCi0JZmkKJiM0MzsJbG9jYWwgdD0mIzM0OyR7U1lTQ1RMfS9lbXB0eV9hZGQmIzM0OwogCi0JZWNobyAmIzM0O09LJiMzNDsKLQlyZXR1cm4gMAomIzQzOwlpZiBbWyAhIC1kICYjMzQ7JHQmIzM0OyBdXTsgdGhlbgomIzQzOwkJa3RhcF9wcmludF9tc2cgJiMzNDskdDogZGlyZWN0b3J5IHdhcyBub3QgY3JlYXRlZCYjMzQ7CiYjNDM7CQlSRVQ9JEtTRlRfRkFJTAomIzQzOwkJcmV0dXJuCiYjNDM7CWZpCiYjNDM7CWlmIFtbICEgLWQgJiMzNDskdC9lbXB0eSYjMzQ7IF1dOyB0aGVuCiYjNDM7CQlrdGFwX3ByaW50X21zZyAmIzM0OyR0L2VtcHR5OiBkaXJlY3Rvcnkgd2FzIG5vdCBjcmVhdGVkJiMzNDsKJiM0MzsJCVJFVD0kS1NGVF9GQUlMCiYjNDM7CWZpCiB9CiAKLXN5c2N0bF90ZXN0XzAwMTAoKQomIzQzO3Rlc3RfdThfcmFuZ2VfY2hlY2soKQogewotCVRBUkdFVD0mIzM0OyR7U1lTQ1RMfS8kKGdldF90ZXN0X3RhcmdldCAwMDEwKSYjMzQ7Ci0JZWNobyAtbiAmIzM0O1Rlc3RpbmcgdGhhdCAkVEFSR0VUIHdhcyBub3QgY3JlYXRlZCAuLi4gJiMzNDsKLQlpZiBbIC1kICRUQVJHRVQgXTsgdGhlbgotCQllY2hvICYjMzQ7RkFJTCYjMzQ7ICZndDsmYW1wOzIKLQkJcmM9MQotCQl0ZXN0X3JjCiYjNDM7CWxvY2FsIHQ9JiMzNDske1NZU0NUTH0vdThfdmFsaWQmIzM0OwomIzQzOwomIzQzOwlpZiBbWyAhIC1mICYjMzQ7JHQmIzM0OyBdXTsgdGhlbgomIzQzOwkJa3RhcF9wcmludF9tc2cgJiMzNDskdDogZmlsZSB3YXMgbm90IGNyZWF0ZWQmIzM0OwomIzQzOwkJUkVUPSRLU0ZUX0ZBSUwKJiM0MzsJCXJldHVybgogCWZpCiAKLQllY2hvICYjMzQ7T0smIzM0OwotCXJldHVybiAwCiYjNDM7CWFzc2VydF9kbWVzZ19jb3VudCAmIzM0O3U4X292ZXIgcmFuZ2UgdmFsdWUmIzM0OyAxIHx8IFJFVD0kS1NGVF9GQUlMCiYjNDM7CWFzc2VydF9kbWVzZ19jb3VudCAmIzM0O3U4X3VuZGVyIHJhbmdlIHZhbHVlJiMzNDsgMSB8fCBSRVQ9JEtTRlRfRkFJTAogfQogCi1zeXNjdGxfdGVzdF8wMDExKCkKJiM0Mzt0ZXN0X2Jvb3RfcGFyYW1faW50KCkKIHsKLQlUQVJHRVQ9JiMzNDske1NZU0NUTH0vJChnZXRfdGVzdF90YXJnZXQgMDAxMSkmIzM0OwotCWVjaG8gLW4gJiMzNDtUZXN0aW5nIGVtcHR5IGRpciBoYW5kbGluZyBpbiAke1RBUkdFVH0gLi4uICYjMzQ7Ci0JaWYgWyAhIC1kICR7VEFSR0VUfSBdOyB0aGVuCi0JCWVjaG8gLWUgJiMzNDtGQUlMXG5Db3VsZCBub3QgY3JlYXRlICR7VEFSR0VUfSYjMzQ7ICZndDsmYW1wOzIKLQkJcmM9MQotCQl0ZXN0X3JjCi0JZmkKJiM0MzsJbG9jYWwgdD0mIzM0OyR7U1lTQ1RMfS9ib290X2ludCYjMzQ7CiYjNDM7CWxvY2FsIG9yaWcgZm91bmQKIAotCVRBUkdFVDI9JiMzNDske1RBUkdFVH0vZW1wdHkmIzM0OwotCWlmIFsgISAtZCAke1RBUkdFVDJ9IF07IHRoZW4KLQkJZWNobyAtZSAmIzM0O0ZBSUxcbkNvdWxkIG5vdCBjcmVhdGUgJHtUQVJHRVQyfSYjMzQ7ICZndDsmYW1wOzIKLQkJcmM9MQotCQl0ZXN0X3JjCi0JZmkKJiM0MzsJW1sgLWYgJiMzNDskdCYjMzQ7IF1dIHx8IHsgUkVUPSRLU0ZUX1NLSVA7IHJldHVybjsgfQogCi0JZWNobyAmIzM0O09LJiMzNDsKLQlyZXR1cm4gMAotfQomIzQzOwkjIEJvb3QgY21kbGluZSBwYXJhbXMgb25seSBhcHBseSB3aGVuIHRlc3Rfc3lzY3RsIGlzIGJ1aWx0IGluLCBub3QKJiM0MzsJIyBsb2FkZWQgYXMgYSBtb2R1bGUuCiYjNDM7CWlmIFtbIC1kICYjMzQ7JE1PRFVMRV9ESVImIzM0OyBdXTsgdGhlbgomIzQzOwkJa3RhcF9wcmludF9tc2cgJiMzNDskdDogdGVzdCBvbmx5IHBvc3NpYmxlIGlmIHRlc3Rfc3lzY3RsIGlzIGJ1aWx0LWluLCBub3QgYSBtb2R1bGUmIzM0OwomIzQzOwkJUkVUPSRLU0ZUX1NLSVAKJiM0MzsJCXJldHVybgomIzQzOwlmaQogCi1zeXNjdGxfdGVzdF8wMDEyKCkKLXsKLQlUQVJHRVQ9JiMzNDske1NZU0NUTH0vJChnZXRfdGVzdF90YXJnZXQgMDAxMikmIzM0OwotCWVjaG8gLW4gJiMzNDtUZXN0aW5nIHU4IHJhbmdlIGNoZWNrIGluIHN5c2N0bCB0YWJsZSBjaGVjayBpbiAke1RBUkdFVH0gLi4uICYjMzQ7Ci0JaWYgWyAhIC1mICR7VEFSR0VUfSBdOyB0aGVuCi0JCWVjaG8gLWUgJiMzNDtGQUlMXG5Db3VsZCBub3QgY3JlYXRlICR7VEFSR0VUfSYjMzQ7ICZndDsmYW1wOzIKLQkJcmM9MQotCQl0ZXN0X3JjCiYjNDM7CW9yaWc9JChjYXQgJiMzNDskdCYjMzQ7KQomIzQzOwlpZiBbWyAmIzM0OyRvcmlnJiMzNDsgPT0gJiMzNDsxJiMzNDsgXV07IHRoZW4KJiM0MzsJCXJldHVybgogCWZpCiAKLQlsb2NhbCB1OG92ZXJfbXNnPSQoZG1lc2cgfCBncmVwICYjMzQ7dThfb3ZlciByYW5nZSB2YWx1ZSYjMzQ7IHwgd2MgLWwpCi0JaWYgWyAhICR7dThvdmVyX21zZ30gLWVxIDEgXTsgdGhlbgotCQllY2hvIC1lICYjMzQ7RkFJTFxudTggb3ZlcmZsb3cgbm90IGRldGVjdGVkJiMzNDsgJmd0OyZhbXA7MgotCQlyYz0xCi0JCXRlc3RfcmMKJiM0MzsJaWYgW1sgISAtZiAvcHJvYy9jbWRsaW5lIF1dOyB0aGVuCiYjNDM7CQlrdGFwX3ByaW50X21zZyAmIzM0OyR0OiBubyAvcHJvYy9jbWRsaW5lIHRvIGNoZWNrIGZvciB0aGUgYm9vdCBwYXJhbWV0ZXImIzM0OwomIzQzOwkJUkVUPSRLU0ZUX1NLSVAKJiM0MzsJCXJldHVybgogCWZpCiAKLQlsb2NhbCB1OHVuZGVyX21zZz0kKGRtZXNnIHwgZ3JlcCAmIzM0O3U4X3VuZGVyIHJhbmdlIHZhbHVlJiMzNDsgfCB3YyAtbCkKLQlpZiBbICEgJHt1OHVuZGVyX21zZ30gLWVxIDEgXTsgdGhlbgotCQllY2hvIC1lICYjMzQ7RkFJTFxudTggdW5kZXJmbG93IG5vdCBkZXRlY3RlZCYjMzQ7ICZndDsmYW1wOzIKLQkJcmM9MQotCQl0ZXN0X3JjCiYjNDM7CWZvdW5kPSQoZ3JlcCAtYyAmIzM0O3N5c2N0bFsuL11kZWJ1Z1suL110ZXN0X3N5c2N0bFsuL11ib290X2ludD0xJiMzNDsgL3Byb2MvY21kbGluZSkKJiM0MzsJaWYgW1sgJiMzNDskZm91bmQmIzM0OyA9PSAmIzM0OzEmIzM0OyBdXTsgdGhlbgomIzQzOwkJa3RhcF9wcmludF9tc2cgJiMzNDskdDoga2VybmVsIHBhcmFtIGZvdW5kIG9uIGNtZGxpbmUgYnV0IHZhbHVlIGlzIG5vdCAxJiMzNDsKJiM0MzsJCVJFVD0kS1NGVF9GQUlMCiYjNDM7CQlyZXR1cm4KIAlmaQogCi0JZWNobyAmIzM0O09LJiMzNDsKLQlyZXR1cm4gMAomIzQzOwlrdGFwX3ByaW50X21zZyAmIzM0OyR0OiBrZXJuZWwgbm90IGJvb3RlZCB3aXRoIHN5c2N0bC5kZWJ1Zy50ZXN0X3N5c2N0bC5ib290X2ludD0xJiMzNDsKJiM0MzsJUkVUPSRLU0ZUX1NLSVAKIH0KIAotc3lzY3RsX3Rlc3RfMDAxMygpCiYjNDM7dGVzdF9zeXNjdGxfbWFjcm9fbWF0Y2goKQogewotCVRBUkdFVD0mIzM0OyR7U1lTQ1RMfS8kKGdldF90ZXN0X3RhcmdldCAwMDEzKSYjMzQ7Ci0JcmVzZXRfdmFscwomIzQzOwlsb2NhbCB0PSYjMzQ7JHtTWVNDVEx9L21hdGNoX2ludCYjMzQ7CiYjNDM7CiYjNDM7CVtbIC1mICYjMzQ7JHQmIzM0OyBdXSB8fCB7IFJFVD0kS1NGVF9TS0lQOyByZXR1cm47IH0KIAotCXJ1bl9pbnRfYXJyYXlfbm9fcGFydGlhbF91cGRhdGUKJiM0MzsJYXNzZXJ0X2NvbnRlbnQgJiMzNDskdCYjMzQ7ICYjMzQ7MSYjMzQ7IHx8IFJFVD0kS1NGVF9GQUlMCiB9CiAKLWxpc3RfdGVzdHMoKQomIzQzO3J1bl9vbmUoKQogewotCWVjaG8gJiMzNDtUZXN0IElEIGxpc3Q6JiMzNDsKLQllY2hvCi0JZWNobyAmIzM0O1RFU1RfSUQgeCBOVU1fVEVTVCYjMzQ7Ci0JZWNobyAmIzM0O1RFU1RfSUQ6ICAgVGVzdCBJRCYjMzQ7Ci0JZWNobyAmIzM0O05VTV9URVNUUzogUmVjb21tZW5kZWQgbnVtYmVyIG9mIHRpbWVzIHRvIHJ1biB0aGUgdGVzdCYjMzQ7Ci0JZWNobwotCWVjaG8gJiMzNDswMDAxIHggJChnZXRfdGVzdF9jb3VudCAwMDAxKSAtIHRlc3RzIHByb2NfZG9pbnR2ZWNfbWlubWF4KCkmIzM0OwotCWVjaG8gJiMzNDswMDAyIHggJChnZXRfdGVzdF9jb3VudCAwMDAyKSAtIHRlc3RzIHByb2NfZG9zdHJpbmcoKSYjMzQ7Ci0JZWNobyAmIzM0OzAwMDMgeCAkKGdldF90ZXN0X2NvdW50IDAwMDMpIC0gdGVzdHMgcHJvY19kb2ludHZlYygpJiMzNDsKLQllY2hvICYjMzQ7MDAwNCB4ICQoZ2V0X3Rlc3RfY291bnQgMDAwNCkgLSB0ZXN0cyBwcm9jX2RvdWludHZlYygpJiMzNDsKLQllY2hvICYjMzQ7MDAwNSB4ICQoZ2V0X3Rlc3RfY291bnQgMDAwNSkgLSB0ZXN0cyBwcm9jX2RvdWludHZlYygpIGFycmF5JiMzNDsKLQllY2hvICYjMzQ7MDAwNiB4ICQoZ2V0X3Rlc3RfY291bnQgMDAwNikgLSB0ZXN0cyBwcm9jX2RvX2xhcmdlX2JpdG1hcCgpJiMzNDsKLQllY2hvICYjMzQ7MDAwNyB4ICQoZ2V0X3Rlc3RfY291bnQgMDAwNykgLSB0ZXN0cyBzZXR0aW5nIHN5c2N0bCBmcm9tIGtlcm5lbCBib290IHBhcmFtJiMzNDsKLQllY2hvICYjMzQ7MDAwOCB4ICQoZ2V0X3Rlc3RfY291bnQgMDAwOCkgLSB0ZXN0cyBzeXNjdGwgbWFjcm8gdmFsdWVzIG1hdGNoJiMzNDsKLQllY2hvICYjMzQ7MDAwOSB4ICQoZ2V0X3Rlc3RfY291bnQgMDAwOSkgLSB0ZXN0cyBzeXNjdCB1bnJlZ2lzdGVyJiMzNDsKLQllY2hvICYjMzQ7MDAxMCB4ICQoZ2V0X3Rlc3RfY291bnQgMDAxMCkgLSB0ZXN0cyBzeXNjdCBtb3VudCBwb2ludCYjMzQ7Ci0JZWNobyAmIzM0OzAwMTEgeCAkKGdldF90ZXN0X2NvdW50IDAwMTEpIC0gdGVzdHMgZW1wdHkgZGlyZWN0b3JpZXMmIzM0OwotCWVjaG8gJiMzNDswMDEyIHggJChnZXRfdGVzdF9jb3VudCAwMDEyKSAtIHRlc3RzIHJhbmdlIGNoZWNrIGZvciB1OCBwcm9jX2hhbmRsZXImIzM0OwotCWVjaG8gJiMzNDswMDEzIHggJChnZXRfdGVzdF9jb3VudCAwMDEzKSAtIHRlc3RzIHBhcnRpYWxseSB1cGRhdGUgdmVjdG9ycyBvbiBlcnJvciYjMzQ7CiYjNDM7CWxvY2FsIG5hbWU9JDEKJiM0MzsKJiM0MzsJIyBTdWJzaGVsbDogYSB0ZXN0IGNhbm5vdCBsZWFrIHZhcnMvY3dkL3RyYXBzIGludG8gdGhlIG5leHQgb25lLCBhbmQgYW4KJiM0MzsJIyBhY2NpZGVudGFsIGBleGl0YCBpbnNpZGUgYSB0ZXN0IGtpbGxzIG9ubHkgaXRzIG93biBzdWJzaGVsbC4KJiM0MzsJKCBSRVQ9JEtTRlRfUEFTUzsgJiMzNDskbmFtZSYjMzQ7OyBleGl0ICRSRVQgKQomIzQzOwomIzQzOwljYXNlICQ/IGluCiYjNDM7CSYjMzQ7JEtTRlRfUEFTUyYjMzQ7KSBrdGFwX3Rlc3RfcGFzcyAmIzM0OyRuYW1lJiMzNDsgOzsKJiM0MzsJJiMzNDskS1NGVF9TS0lQJiMzNDspIGt0YXBfdGVzdF9za2lwICYjMzQ7JG5hbWUmIzM0OyA7OwomIzQzOwkqKSAgICAgICAgICBrdGFwX3Rlc3RfZmFpbCAmIzM0OyRuYW1lJiMzNDsgOzsKJiM0MzsJZXNhYwogfQogCiB1c2FnZSgpCiB7Ci0JTlVNX1RFU1RTPSQoZ3JlcCAtbyAmIzM5OyAmIzM5OyAmbHQ7Jmx0OyZsdDsmIzM0OyRBTExfVEVTVFMmIzM0OyB8IGdyZXAgLWMgLikKLQlsZXQgTlVNX1RFU1RTPSROVU1fVEVTVFMmIzQzOzEKLQlNQVhfVEVTVD0kKHByaW50ZiAmIzM0OyUwNGRcbiYjMzQ7ICROVU1fVEVTVFMpCi0JZWNobyAmIzM0O1VzYWdlOiAkMCBbIC10ICZsdDs0LW51bWJlci1kaWdpdCZndDsgXSB8IFsgLXcgJmx0OzQtbnVtYmVyLWRpZ2l0Jmd0OyBdIHwmIzM0OwotCWVjaG8gJiMzNDsJCSBbIC1zICZsdDs0LW51bWJlci1kaWdpdCZndDsgXSB8IFsgLWMgJmx0OzQtbnVtYmVyLWRpZ2l0Jmd0OyAmbHQ7dGVzdC0gY291bnQmZ3Q7JiMzNDsKLQllY2hvICYjMzQ7ICAgICAgICAgICBbIGFsbCBdIFsgLWggfCAtLWhlbHAgXSBbIC1sIF0mIzM0OwotCWVjaG8gJiMzNDsmIzM0OwotCWVjaG8gJiMzNDtWYWxpZCB0ZXN0czogMDAwMS0kTUFYX1RFU1QmIzM0OwotCWVjaG8gJiMzNDsmIzM0OwotCWVjaG8gJiMzNDsgICAgYWxsICAgICBSdW5zIGFsbCB0ZXN0cyAoZGVmYXVsdCkmIzM0OwotCWVjaG8gJiMzNDsgICAgLXQgICAgICBSdW4gdGVzdCBJRCB0aGUgcmVjb21tZW5kZWQgbnVtYmVyIG9mIHRpbWVzJiMzNDsKLQllY2hvICYjMzQ7ICAgIC13ICAgICAgV2F0Y2ggdGVzdCBJRCBydW4gdW50aWwgaXQgcnVucyBpbnRvIGFuIGVycm9yJiMzNDsKLQllY2hvICYjMzQ7ICAgIC1jICAgICAgUnVuIHRlc3QgSUQgb25jZSYjMzQ7Ci0JZWNobyAmIzM0OyAgICAtcyAgICAgIFJ1biB0ZXN0IElEIHggdGVzdC1jb3VudCBudW1iZXIgb2YgdGltZXMmIzM0OwotCWVjaG8gJiMzNDsgICAgLWwgICAgICBMaXN0IGFsbCB0ZXN0IElEIGxpc3QmIzM0OwotCWVjaG8gJiMzNDsgLWh8LS1oZWxwICBIZWxwJiMzNDsKLQllY2hvCi0JZWNobyAmIzM0O0lmIGFuIGVycm9yIGV2ZXJ5IG9jY3VycyBleGVjdXRpb24gd2lsbCBpbW1lZGlhdGVseSB0ZXJtaW5hdGUuJiMzNDsKLQllY2hvICYjMzQ7SWYgeW91IGFyZSBhZGRpbmcgYSBuZXcgdGVzdCB0cnkgdXNpbmcgLXcgJmx0O3Rlc3QtSUQmZ3Q7IGZpcnN0IHRvJiMzNDsKLQllY2hvICYjMzQ7bWFrZSBzdXJlIHRoZSB0ZXN0IHBhc3NlcyBhIHNlcmllcyBvZiB0ZXN0cy4mIzM0OwotCWVjaG8KLQllY2hvIEV4YW1wbGUgdXNlczoKLQllY2hvCi0JZWNobyAmIzM0OyRURVNUX05BTUUuc2ggICAgICAgICAgICAtLSBleGVjdXRlcyBhbGwgdGVzdHMmIzM0OwotCWVjaG8gJiMzNDskVEVTVF9OQU1FLnNoIC10IDAwMDIgICAgLS0gRXhlY3V0ZXMgdGVzdCBJRCAwMDAyIHRoZSByZWNvbW1lbmRlZCBudW1iZXIgb2YgdGltZXMmIzM0OwotCWVjaG8gJiMzNDskVEVTVF9OQU1FLnNoIC13IDAwMDIgICAgLS0gV2F0Y2ggdGVzdCBJRCAwMDAyIHJ1biB1bnRpbCBhbiBlcnJvciBvY2N1cnMmIzM0OwotCWVjaG8gJiMzNDskVEVTVF9OQU1FLnNoIC1zIDAwMDIgICAgLS0gUnVuIHRlc3QgSUQgMDAwMiBvbmNlJiMzNDsKLQllY2hvICYjMzQ7JFRFU1RfTkFNRS5zaCAtYyAwMDAyIDMgIC0tIFJ1biB0ZXN0IElEIDAwMDIgdGhyZWUgdGltZXMmIzM0OwotCWVjaG8KLQlsaXN0X3Rlc3RzCi0JZXhpdCAxCi19CiYjNDM7CWNhdCAmbHQ7Jmx0Oy1FT0YKJiM0MzsJVXNhZ2U6ICQwIFstciBOXSBbLWxdIFstdCBUXSBbLXMgTl0gWy1ofC0taGVscF0KIAotZnVuY3Rpb24gdGVzdF9udW0oKQotewotCXJlPSYjMzk7XlswLTldJiM0MzskJiMzOTsKLQlpZiAhIFtbICQxID1+ICRyZSBdXTsgdGhlbgotCQl1c2FnZQotCWZpCi19Ci1mdW5jdGlvbiByZW1vdmVfbGVhZGluZ196ZXJvcygpCi17Ci0JZWNobyAkMSB8IHNlZCAmIzM5O3MvXjAqLy8mIzM5OwotfQomIzQzOwlSdW5zIGV2ZXJ5IGF1dG8tZGlzY292ZXJlZCB0ZXN0XyogZnVuY3Rpb24uIFNldHRpbmcgU1lTQ1RMX1RFU1RTIHdpbGwKJiM0MzsJb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYW5kIHBhc3NpbmcgLXQgd2lsbCBvdmVycmlkZSBib3RoIGVudiB2YXIgYW5kIHRoZQomIzQzOwlkZWZhdWx0LgogCi1mdW5jdGlvbiBnZXRfdGVzdF9jb3VudCgpCi17Ci0JdGVzdF9udW0gJDEKLQlhd2tfZmllbGQ9JChyZW1vdmVfbGVhZGluZ196ZXJvcyAkMSkKLQlURVNUX0RBVEE9JChlY2hvICRBTExfVEVTVFMgfCBhd2sgJiMzOTt7cHJpbnQgJCYjMzk7JGF3a19maWVsZCYjMzk7fSYjMzk7KQotCWVjaG8gJHtURVNUX0RBVEF9IHwgYXdrIC1GJiMzNDs6JiMzNDsgJiMzOTt7cHJpbnQgJDJ9JiMzOTsKLX0KJiM0MzsJICAgIC1yIE4gICAgICAgICAgcmVwZWF0IHNlbGVjdGVkIHRlc3RzIE4gdGltZXMgKGRlZmF1bHQgMSkKJiM0MzsJICAgIC1sICAgICAgICAgICAgbGlzdCBkaXNjb3ZlcmVkIHRlc3RzCiYjNDM7CSAgICAtdCBUICAgICAgICAgIHNwYWNlIHNlcGFyYXRlZCB0ZXN0cyBsaXN0LiBGb3IgZXhhbXBsZSAmIzM0O3Rlc3RfMSB0ZXN0XzImIzM0OwomIzQzOwkgICAgLXMgTiAgICAgICAgICBiYXNlIHNlZWQgZm9yIHRoZSByYW5kb21pemVkIGJpdG1hcCBpdGVyYXRpb25zLgomIzQzOwkgICAgLWgsIC0taGVscCAgICBoZWxwCiAKLWZ1bmN0aW9uIGdldF90ZXN0X2VuYWJsZWQoKQotewotCXRlc3RfbnVtICQxCi0JYXdrX2ZpZWxkPSQocmVtb3ZlX2xlYWRpbmdfemVyb3MgJDEpCi0JVEVTVF9EQVRBPSQoZWNobyAkQUxMX1RFU1RTIHwgYXdrICYjMzk7e3ByaW50ICQmIzM5OyRhd2tfZmllbGQmIzM5O30mIzM5OykKLQllY2hvICR7VEVTVF9EQVRBfSB8IGF3ayAtRiYjMzQ7OiYjMzQ7ICYjMzk7e3ByaW50ICQzfSYjMzk7CiYjNDM7CSAgICBTWVNDVExfVEVTVFM9JiMzOTt0ZXN0XzEgdGVzdF8yJiMzOTsgJDAgIHJ1biBvbmx5IHRoZSBuYW1lZCB0ZXN0cwomIzQzOwlFT0YKIH0KIAotZnVuY3Rpb24gZ2V0X3Rlc3RfdGFyZ2V0KCkKJiM0MztsaXN0X3Rlc3RzKCkKIHsKLQl0ZXN0X251bSAkMQotCWF3a19maWVsZD0kKHJlbW92ZV9sZWFkaW5nX3plcm9zICQxKQotCVRFU1RfREFUQT0kKGVjaG8gJEFMTF9URVNUUyB8IGF3ayAmIzM5O3twcmludCAkJiMzOTskYXdrX2ZpZWxkJiMzOTt9JiMzOTspCi0JZWNobyAke1RFU1RfREFUQX0gfCBhd2sgLUYmIzM0OzomIzM0OyAmIzM5O3twcmludCAkNH0mIzM5OwomIzQzOwllY2hvICYjMzQ7RGlzY292ZXJlZCB0ZXN0czomIzM0OwomIzQzOwlsb2NhbCB0CiYjNDM7CWZvciB0IGluICRBTExfVEVTVFM7IGRvCiYjNDM7CQllY2hvICYjMzQ7ICAkdCYjMzQ7CiYjNDM7CWRvbmUKIH0KIAotZnVuY3Rpb24gZ2V0X3Rlc3Rfc2tpcF9ub190YXJnZXQoKQomIzQzO2NoZWNrX3JlcXMoKQogewotCXRlc3RfbnVtICQxCi0JYXdrX2ZpZWxkPSQocmVtb3ZlX2xlYWRpbmdfemVyb3MgJDEpCi0JVEVTVF9EQVRBPSQoZWNobyAkQUxMX1RFU1RTIHwgYXdrICYjMzk7e3ByaW50ICQmIzM5OyRhd2tfZmllbGQmIzM5O30mIzM5OykKLQllY2hvICR7VEVTVF9EQVRBfSB8IGF3ayAtRiYjMzQ7OiYjMzQ7ICYjMzk7e3ByaW50ICQ1fSYjMzk7Ci19CiYjNDM7CWxvY2FsIHVpZAomIzQzOwl1aWQ9JChpZCAtdSkKIAotZnVuY3Rpb24gc2tpcF90ZXN0KCkKLXsKLQlURVNUX0lEPSQxCi0JVEVTVF9UQVJHRVQ9JDIKLQlpZiB0YXJnZXRfZXhpc3RzICRURVNUX1RBUkdFVCAkVEVTVF9JRDsgdGhlbgotCQlURVNUX1NLSVA9JChnZXRfdGVzdF9za2lwX25vX3RhcmdldCAkVEVTVF9JRCkKLQkJaWYgW1sgJFRFU1RfU0tJUCAtZXEgJiMzNDsxJiMzNDsgXV07IHRoZW4KLQkJCWVjaG8gJiMzNDtUYXJnZXQgJFRFU1RfVEFSR0VUIGZvciB0ZXN0ICRURVNUX0lEIGRvZXMgbm90IGV4aXN0IC4uLiBTS0lQUElORyYjMzQ7Ci0JCQlyZXR1cm4gMAotCQlmaQomIzQzOwlpZiBbICYjMzQ7JHVpZCYjMzQ7IC1uZSAwIF07IHRoZW4KJiM0MzsJCWt0YXBfc2tpcF9hbGwgJiMzNDttdXN0IGJlIHJ1biBhcyByb290JiMzNDsKJiM0MzsJCWV4aXQgJiMzNDskS1NGVF9TS0lQJiMzNDsKJiM0MzsJZmkKJiM0MzsKJiM0MzsJaWYgISB3aGljaCBnZXRjb25mICZndDsgL2Rldi9udWxsIDImZ3Q7JmFtcDsxOyB0aGVuCiYjNDM7CQlrdGFwX3NraXBfYWxsICYjMzQ7JDA6IFlvdSBuZWVkIGdldGNvbmYgaW5zdGFsbGVkJiMzNDsKJiM0MzsJCWV4aXQgJiMzNDskS1NGVF9TS0lQJiMzNDsKJiM0MzsJZmkKJiM0MzsKJiM0MzsJaWYgISB3aGljaCBkaWZmICZndDsgL2Rldi9udWxsIDImZ3Q7JmFtcDsxOyB0aGVuCiYjNDM7CQlrdGFwX3NraXBfYWxsICYjMzQ7JDA6IFlvdSBuZWVkIGRpZmYgaW5zdGFsbGVkJiMzNDsKJiM0MzsJCWV4aXQgJiMzNDskS1NGVF9TS0lQJiMzNDsKIAlmaQotCXJldHVybiAxCiB9CiAKLWZ1bmN0aW9uIHJ1bl9hbGxfdGVzdHMoKQomIzQzO2NoZWNrX2FyZ3MoKSAgIyAmbHQ7cmVwZWF0Jmd0OyAmbHQ7c2VsZWN0ZWQmZ3Q7ICZsdDtzZWVkJmd0OwogewotCWZvciBpIGluICRBTExfVEVTVFMgOyBkbwotCQlURVNUX0lEPSR7aSU6KjoqOio6Kn0KLQkJRU5BQkxFRD0kKGdldF90ZXN0X2VuYWJsZWQgJFRFU1RfSUQpCi0JCVRFU1RfQ09VTlQ9JChnZXRfdGVzdF9jb3VudCAkVEVTVF9JRCkKLQkJVEVTVF9UQVJHRVQ9JChnZXRfdGVzdF90YXJnZXQgJFRFU1RfSUQpCi0KLQkJaWYgW1sgJEVOQUJMRUQgLWVxICYjMzQ7MSYjMzQ7IF1dOyB0aGVuCi0JCQl0ZXN0X2Nhc2UgJFRFU1RfSUQgJFRFU1RfQ09VTlQgJFRFU1RfVEFSR0VUCiYjNDM7CWxvY2FsIHJlcGVhdF9hcmc9JiMzNDskMSYjMzQ7CiYjNDM7CWxvY2FsIHNlbGVjdGVkX2FyZz0mIzM0OyQyJiMzNDsKJiM0MzsJbG9jYWwgc2VlZF9hcmc9JiMzNDskMyYjMzQ7CiYjNDM7CWxvY2FsIHQKJiM0MzsKJiM0MzsJaWYgWyAteiAmIzM0OyRzZWxlY3RlZF9hcmcmIzM0OyBdOyB0aGVuCiYjNDM7CQlrdGFwX2V4aXRfZmFpbF9tc2cgJiMzNDtubyB0ZXN0IHNlbGVjdGVkJiMzNDsKJiM0MzsJZmkKJiM0MzsKJiM0MzsJaWYgISBbWyAmIzM0OyRyZXBlYXRfYXJnJiMzNDsgPX4gXlswLTldJiM0MzskIF1dOyB0aGVuCiYjNDM7CQlrdGFwX2V4aXRfZmFpbF9tc2cgJiMzNDtyZXBlYXQgYXJndW1lbnQgJiMzOTskcmVwZWF0X2FyZyYjMzk7IGlzIG5vdCBhIG51bWJlciYjMzQ7CiYjNDM7CWZpCiYjNDM7CiYjNDM7CWlmICEgW1sgJiMzNDskc2VlZF9hcmcmIzM0OyA9fiBeWzAtOV0mIzQzOyQgXV07IHRoZW4KJiM0MzsJCWt0YXBfZXhpdF9mYWlsX21zZyAmIzM0O3NlZWQgYXJndW1lbnQgJiMzOTskc2VlZF9hcmcmIzM5OyBpcyBub3QgYSBudW1iZXImIzM0OwomIzQzOwlmaQomIzQzOwomIzQzOwlmb3IgdCBpbiAkc2VsZWN0ZWRfYXJnOyBkbwomIzQzOwkJaWYgISBkZWNsYXJlIC1GICYjMzQ7JHQmIzM0OyAmZ3Q7IC9kZXYvbnVsbDsgdGhlbgomIzQzOwkJCWt0YXBfZXhpdF9mYWlsX21zZyAmIzM0O3Vua25vd24gc2VsZWN0ZWQgdGVzdCAmIzM5OyR0JiMzOTsmIzM0OwogCQlmaQogCWRvbmUKIH0KIAotZnVuY3Rpb24gd2F0Y2hfbG9nKCkKJiM0MzthbGxvd191c2VyX2RlZmF1bHRzKCkKIHsKLQlpZiBbICQjIC1uZSAzIF07IHRoZW4KLQkJY2xlYXIKJiM0MzsJaWYgWyAteiAmIzM0OyR7TU9EVUxFX0RJUn0mIzM0OyBdOyB0aGVuCiYjNDM7CQlNT0RVTEVfRElSPSYjMzQ7L3N5cy9tb2R1bGUvdGVzdF9zeXNjdGwvJiMzNDsKJiM0MzsJZmkKJiM0MzsJaWYgWyAteiAmIzM0OyR7U1lTQ1RMfSYjMzQ7IF07IHRoZW4KJiM0MzsJCVNZU0NUTD0mIzM0Oy9wcm9jL3N5cy9kZWJ1Zy90ZXN0X3N5c2N0bCYjMzQ7CiYjNDM7CWZpCiYjNDM7CWlmIFsgLXogJiMzNDske1BST0RfU1lTQ1RMfSYjMzQ7IF07IHRoZW4KJiM0MzsJCVBST0RfU1lTQ1RMPSYjMzQ7L3Byb2Mvc3lzJiMzNDsKJiM0MzsJZmkKJiM0MzsJaWYgWyAteiAmIzM0OyR7V1JJVEVTX1NUUklDVH0mIzM0OyBdOyB0aGVuCiYjNDM7CQlXUklURVNfU1RSSUNUPSYjMzQ7JHtQUk9EX1NZU0NUTH0va2VybmVsL3N5c2N0bF93cml0ZXNfc3RyaWN0JiMzNDsKJiM0MzsJZmkKJiM0MzsJaWYgWyAteiAmIzM0OyR7QklUTUFQX0lURVJBVElPTlN9JiMzNDsgXTsgdGhlbgomIzQzOwkJQklUTUFQX0lURVJBVElPTlM9NTAKJiM0MzsJZmkKJiM0MzsJIyBTZXQgc2VlZCBmb3IgYml0bWFwIHJhbmRvbSB0ZXN0cwomIzQzOwlpZiBbIC16ICYjMzQ7JHtCSVRNQVBfU0VFRH0mIzM0OyBdOyB0aGVuCiYjNDM7CQlCSVRNQVBfU0VFRD0kUkFORE9NCiAJZmkKLQlkYXRlCi0JZWNobyAmIzM0O1J1bm5pbmcgdGVzdDogJDIgLSBydW4gIyQxJiMzNDsKIH0KIAotZnVuY3Rpb24gd2F0Y2hfY2FzZSgpCiYjNDM7Y2hlY2tfcHJvZHVjdGlvbl9zeXNjdGxfd3JpdGVzX3N0cmljdCgpCiB7Ci0JaT0wCi0Jd2hpbGUgWyAxIF07IGRvCi0KLQkJaWYgWyAkIyAtZXEgMSBdOyB0aGVuCi0JCQl0ZXN0X251bSAkMQotCQkJd2F0Y2hfbG9nICRpICR7VEVTVF9OQU1FfV90ZXN0XyQxCi0JCQkke1RFU1RfTkFNRX1fdGVzdF8kMQotCQllbHNlCi0JCQl3YXRjaF9sb2cgJGkgYWxsCi0JCQlydW5fYWxsX3Rlc3RzCiYjNDM7CWlmIFsgISAtZSAmIzM0OyR7V1JJVEVTX1NUUklDVH0mIzM0OyBdOyB0aGVuCiYjNDM7CQlrdGFwX3ByaW50X21zZyAmIzM0OyR7V1JJVEVTX1NUUklDVH0gbWlzc2luZywgc2tpcHBpbmcgc3RyaWN0IHdyaXRlIGNoZWNrIChvbGQga2VybmVsPykmIzM0OwomIzQzOwllbHNlCiYjNDM7CQlvbGRfc3RyaWN0PSQoY2F0ICYjMzQ7JHtXUklURVNfU1RSSUNUfSYjMzQ7KQomIzQzOwkJaWYgWyAmIzM0OyRvbGRfc3RyaWN0JiMzNDsgIT0gJiMzNDsxJiMzNDsgXTsgdGhlbgomIzQzOwkJCWt0YXBfcHJpbnRfbXNnICYjMzQ7Zm9yY2luZyAke1dSSVRFU19TVFJJQ1R9IHRvIDEgKHdhcyAke29sZF9zdHJpY3R9KSYjMzQ7CiYjNDM7CQkJZWNobyAmIzM0OzEmIzM0OyAmZ3Q7ICYjMzQ7JHtXUklURVNfU1RSSUNUfSYjMzQ7CiAJCWZpCi0JCWxldCBpPSRpJiM0MzsxCi0JZG9uZQomIzQzOwlmaQomIzQzOwomIzQzOwlpZiBbIC16ICYjMzQ7JHtQQUdFX1NJWkV9JiMzNDsgXTsgdGhlbgomIzQzOwkJUEFHRV9TSVpFPSQoZ2V0Y29uZiBQQUdFU0laRSkKJiM0MzsJZmkKJiM0MzsJaWYgWyAteiAmIzM0OyR7TUFYX0RJR0lUU30mIzM0OyBdOyB0aGVuCiYjNDM7CQlNQVhfRElHSVRTPSQoKFBBR0VfU0laRSAvIDgpKQomIzQzOwlmaQomIzQzOwlpZiBbIC16ICYjMzQ7JHtJTlRfTUFYfSYjMzQ7IF07IHRoZW4KJiM0MzsJCUlOVF9NQVg9JChnZXRjb25mIElOVF9NQVgpCiYjNDM7CWZpCiYjNDM7CWlmIFsgLXogJiMzNDske1VJTlRfTUFYfSYjMzQ7IF07IHRoZW4KJiM0MzsJCVVJTlRfTUFYPSQoZ2V0Y29uZiBVSU5UX01BWCkKJiM0MzsJZmkKIH0KIAotZnVuY3Rpb24gdGVzdF9jYXNlKCkKJiM0Mztsb2FkX3JlcV9tb2QoKQogewotCVRFU1RfSUQ9JDEKLQlOVU1fVEVTVFM9JDIKLQlUQVJHRVQ9JDMKLQotCWlmIHNraXBfdGVzdCAkVEVTVF9JRCAkVEFSR0VUOyB0aGVuCi0JCXJldHVybgomIzQzOwlpZiBbICEgLWQgJiMzNDske1NZU0NUTH0mIzM0OyBdOyB0aGVuCiYjNDM7CQlpZiAhIG1vZHByb2JlIC1xIC1uICYjMzQ7JHtURVNUX0RSSVZFUn0mIzM0OzsgdGhlbgomIzQzOwkJCWt0YXBfc2tpcF9hbGwgJiMzNDttb2R1bGUgJHtURVNUX0RSSVZFUn0gbm90IGZvdW5kLiBcCiYjNDM7CQkJCVlvdSBtdXN0IHNldCBDT05GSUdfVEVTVF9TWVNDVEw9bSBpbiB5b3VyIGtlcm5lbCYjMzQ7CiYjNDM7CQkJZXhpdCAmIzM0OyRLU0ZUX1NLSVAmIzM0OwomIzQzOwkJZmkKJiM0MzsJCWlmICEgbW9kcHJvYmUgJiMzNDske1RFU1RfRFJJVkVSfSYjMzQ7OyB0aGVuCiYjNDM7CQkJa3RhcF9leGl0X2ZhaWxfbXNnICYjMzQ7bW9kcHJvYmUgJHtURVNUX0RSSVZFUn0gZmFpbGVkJiMzNDsKJiM0MzsJCWZpCiAJZmkKLQotCWk9MAotCXdoaWxlIFsgJGkgLWx0ICROVU1fVEVTVFMgXTsgZG8KLQkJdGVzdF9udW0gJFRFU1RfSUQKLQkJd2F0Y2hfbG9nICRpICR7VEVTVF9OQU1FfV90ZXN0XyR7VEVTVF9JRH0gbm9jbGVhcgotCQlSVU5fVEVTVD0ke1RFU1RfTkFNRX1fdGVzdF8ke1RFU1RfSUR9Ci0JCSRSVU5fVEVTVAotCQlsZXQgaT0kaSYjNDM7MQotCWRvbmUKIH0KIAotZnVuY3Rpb24gcGFyc2VfYXJncygpCiYjNDM7IyBDbGVhbnVwIG9ubHkhIERvIG5vdCBjYWxsIGV4aXQgaGVyZSBvciBpdCB3aWxsIHNpbGVudGx5IG92ZXJyaWRlIEtUQVAgZXhpdCBzdGF0dXMKJiM0MztyZXN0b3JlX3N5c2N0bF93cml0ZXNfc3RyaWN0KCkKIHsKLQlpZiBbICQjIC1lcSAwIF07IHRoZW4KLQkJcnVuX2FsbF90ZXN0cwotCWVsc2UKLQkJaWYgW1sgJiMzNDskMSYjMzQ7ID0gJiMzNDthbGwmIzM0OyBdXTsgdGhlbgotCQkJcnVuX2FsbF90ZXN0cwotCQllbGlmIFtbICYjMzQ7JDEmIzM0OyA9ICYjMzQ7LXcmIzM0OyBdXTsgdGhlbgotCQkJc2hpZnQKLQkJCXdhdGNoX2Nhc2UgJEAKLQkJZWxpZiBbWyAmIzM0OyQxJiMzNDsgPSAmIzM0Oy10JiMzNDsgXV07IHRoZW4KLQkJCXNoaWZ0Ci0JCQl0ZXN0X251bSAkMQotCQkJdGVzdF9jYXNlICQxICQoZ2V0X3Rlc3RfY291bnQgJDEpICQoZ2V0X3Rlc3RfdGFyZ2V0ICQxKQotCQllbGlmIFtbICYjMzQ7JDEmIzM0OyA9ICYjMzQ7LWMmIzM0OyBdXTsgdGhlbgotCQkJc2hpZnQKLQkJCXRlc3RfbnVtICQxCi0JCQl0ZXN0X251bSAkMgotCQkJdGVzdF9jYXNlICQxICQyICQoZ2V0X3Rlc3RfdGFyZ2V0ICQxKQotCQllbGlmIFtbICYjMzQ7JDEmIzM0OyA9ICYjMzQ7LXMmIzM0OyBdXTsgdGhlbgotCQkJc2hpZnQKLQkJCXRlc3RfY2FzZSAkMSAxICQoZ2V0X3Rlc3RfdGFyZ2V0ICQxKQotCQllbGlmIFtbICYjMzQ7JDEmIzM0OyA9ICYjMzQ7LWwmIzM0OyBdXTsgdGhlbgotCQkJbGlzdF90ZXN0cwotCQllbGlmIFtbICYjMzQ7JDEmIzM0OyA9ICYjMzQ7LWgmIzM0OyB8fCAmIzM0OyQxJiMzNDsgPSAmIzM0Oy0taGVscCYjMzQ7IF1dOyB0aGVuCi0JCQl1c2FnZQotCQllbHNlCi0JCQl1c2FnZQotCQlmaQomIzQzOwlpZiBbIC1uICYjMzQ7JHtvbGRfc3RyaWN0fSYjMzQ7IF07IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDske29sZF9zdHJpY3R9JiMzNDsgJmd0OyAmIzM0OyR7V1JJVEVTX1NUUklDVH0mIzM0OwogCWZpCiB9CiAKLXRlc3RfcmVxcwogYWxsb3dfdXNlcl9kZWZhdWx0cwomIzQzOwomIzQzOyMgRWFjaCBiaXRtYXAgaXRlcmF0aW9uIGlzIG9uZSBmdW5jdGlvbiB0byBnZW5lcmF0ZSBvbmUgS1RBUCByZXBvcnQgcGVyIGl0ZXJhdGlvbgomIzQzO2ZvciBpIGluICQoc2VxIDEgJiMzNDskQklUTUFQX0lURVJBVElPTlMmIzM0Oyk7IGRvCiYjNDM7CWV2YWwgJiMzNDt0ZXN0X2JpdG1hcF9yYW5nZV9jaGVja18kKHByaW50ZiAmIzM5OyUwMmQmIzM5OyAmIzM0OyRpJiMzNDspKCkgXAomIzQzOwkJeyBcCiYjNDM7CQkJYml0bWFwX3JhbmdlX2NoZWNrX29uY2UgJGk7IFwKJiM0MzsJCX0mIzM0OwomIzQzO2RvbmUKJiM0MzsKJiM0MzsjIERpc2NvdmVyIHRlc3RfKiBmdW5jdGlvbnMgYWJvdmUgdGhpcyBsaW5lCiYjNDM7QUxMX1RFU1RTPSQoZGVjbGFyZSAtRiB8IGF3ayAmIzM5O3twcmludCAkM30mIzM5OyB8IGdyZXAgJiMzOTtedGVzdF8mIzM5OyB8IHNvcnQpCiYjNDM7CiYjNDM7UkVQRUFUPTEKJiM0Mzt3aGlsZSBbICQjIC1ndCAwIF07IGRvCiYjNDM7CWNhc2UgJiMzNDskMSYjMzQ7IGluCiYjNDM7CS1yICkKJiM0MzsJCXNoaWZ0CiYjNDM7CQlSRVBFQVQ9JDEKJiM0MzsJCTs7CiYjNDM7CS1sICkKJiM0MzsJCWxpc3RfdGVzdHMKJiM0MzsJCWV4aXQgMAomIzQzOwkJOzsKJiM0MzsJLWggfCAtLWhlbHAgKQomIzQzOwkJdXNhZ2UKJiM0MzsJCWV4aXQgMAomIzQzOwkJOzsKJiM0MzsJLXQgKQomIzQzOwkJc2hpZnQKJiM0MzsJCVNZU0NUTF9URVNUUz0mIzM0OyQxJiMzNDsKJiM0MzsJCTs7CiYjNDM7CS1zICkKJiM0MzsJCXNoaWZ0CiYjNDM7CQlCSVRNQVBfU0VFRD0mIzM0OyQxJiMzNDsKJiM0MzsJCTs7CiYjNDM7CSogKQomIzQzOwkJdXNhZ2UKJiM0MzsJCWV4aXQgMQomIzQzOwkJOzsKJiM0MzsJZXNhYwomIzQzOwlzaGlmdAomIzQzO2RvbmUKJiM0MzsKJiM0MztTRUxFQ1RFRD0ke1NZU0NUTF9URVNUUy0kQUxMX1RFU1RTfQomIzQzOwomIzQzO2t0YXBfcHJpbnRfaGVhZGVyCiYjNDM7dHJhcCByZXN0b3JlX3N5c2N0bF93cml0ZXNfc3RyaWN0IEVYSVQKJiM0MztjaGVja19hcmdzICYjMzQ7JFJFUEVBVCYjMzQ7ICYjMzQ7JFNFTEVDVEVEJiMzNDsgJiMzNDskQklUTUFQX1NFRUQmIzM0OwomIzQzO2NoZWNrX3JlcXMKIGNoZWNrX3Byb2R1Y3Rpb25fc3lzY3RsX3dyaXRlc19zdHJpY3QKIGxvYWRfcmVxX21vZAogCi10cmFwICYjMzQ7dGVzdF9maW5pc2gmIzM0OyBFWElUCiYjNDM7a3RhcF9wcmludF9tc2cgJiMzNDtiaXRtYXAgYmFzZSBzZWVkOiAkQklUTUFQX1NFRUQgKHJlcGxheSB3aXRoIC1zICRCSVRNQVBfU0VFRCkmIzM0OwogCi1wYXJzZV9hcmdzICRACiYjNDM7a3RhcF9zZXRfcGxhbiAmIzM0OyQoKCAkKHdjIC13ICZsdDsmbHQ7Jmx0OyAmIzM0OyRTRUxFQ1RFRCYjMzQ7KSAqIFJFUEVBVCApKSYjMzQ7CiYjNDM7CiYjNDM7Zm9yICgoaSA9IDA7IGkgJmx0OyBSRVBFQVQ7IGkmIzQzOyYjNDM7KSk7IGRvCiYjNDM7CWZvciB0IGluICRTRUxFQ1RFRDsgZG8KJiM0MzsJCXJ1bl9vbmUgJiMzNDskdCYjMzQ7CiYjNDM7CWRvbmUKJiM0Mztkb25lCiAKLWV4aXQgMAomIzQzO2t0YXBfZmluaXNoZWQKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA3OTMKCQkJCQkJCW91dHB1dDogOTYKCQkJCQkJCXRob3VnaHRzOiA0NzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBFdmFsdWF0aW9uOiBRdWljayBEZWNpc2lvbioqCgpPa2F5LCBsZXQmIzM5O3MgYXNzZXNzIHRoaXMgcGF0Y2ggc2VyaWVzIGZvciBzeXprYWxsZXIgZnV6emluZyBwb3RlbnRpYWwuIFRoZSBkaWZmIGlzIGZvY3VzZWQsIG9ubHkgdG91Y2hpbmcgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2N0bC9zeXNjdGwuc2hgLiBUaW1lIHRvIGFwcGx5IHRoZSBjcml0ZXJpYS4gQWNjb3JkaW5nIHRvIHRoZSBndWlkZWxpbmVzLCBtb2RpZmljYXRpb25zIHN0cmljdGx5IHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYCBmYWxsIHVuZGVyIHRoZSAmIzM0O05vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXMmIzM0OyBjYXRlZ29yeS4gVGhpcyBzcGVjaWZpY2FsbHkgbWVhbnMgdGhlIGNoYW5nZXMgZG9uJiMzOTt0IGFmZmVjdCB0aGUga2VybmVsIGltYWdlIG9yIG1vZHVsZXMuIFRoZXJlZm9yZSwgaXQmIzM5O3MgYSBjbGVhciAmIzM0O1dvcnRoRnV6emluZyA9IGZhbHNlJiMzNDsgc2l0dWF0aW9uLiBObyBuZWVkIHRvIGRlbHZlIGZ1cnRoZXIg4oCTIHRoZSBzY3JpcHQgaXMgdXNlci1zcGFjZSBzZWxmdGVzdCBvbmx5LiBJJiMzOTtsbCBjb25maXJtIHdpdGggYSBxdWljayBkb3VibGUtY2hlY2sgdXNpbmcgYGdpdCBkaWZmYCAob3IgdGhlIHByb3ZpZGVkIGRpZmYgZGV0YWlscykganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGJ1dCBteSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgZmlybS4KCkkgY2FuIGNvbmZpZGVudGx5IGNvbmNsdWRlOgoKKiAgIGBXb3J0aEZ1enppbmcgPSBmYWxzZWAKKiAgIGBGb2N1c1N5bWJvbHMgPSBbXWAKKiAgIGBFbmFibGVDb25maWdzID0gW11gCgpUaGUgcmVhc29uaW5nIGhlcmUgaXMgY3J5c3RhbCBjbGVhcjogdGhpcyBwYXRjaCBpcyBsaW1pdGVkIHRvIG1vZGlmeWluZyBhIHNlbGZ0ZXN0IHNjcmlwdCBpbiB1c2VyIHNwYWNlLCBhbmQgdGh1cyBkb2VzbiYjMzk7dCBpbXBhY3QgYW55IGtlcm5lbCBjb2RlLiBSZWFkeSB0byBwYXNzIHRoaXMgaW5mb3JtYXRpb24gYWxvbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBvbmx5IHRoZSB1c2VyLXNwYWNlIHNlbGZ0ZXN0IHNjcmlwdCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjdGwvc3lzY3RsLnNoIHRvIG1vZGVybml6ZSBpdCBhbmQgdXNlIGt0YXBfaGVscGVycy4gSXQgZG9lcyBub3QgdG91Y2ggYW55IGtlcm5lbCBzb3VyY2UgY29kZSwgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSwgb3Iga2VybmVsIG1vZHVsZXMsIHNvIGl0IGlzIG5vdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB0aGUgdXNlci1zcGFjZSBzZWxmdGVzdCBzY3JpcHQgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY3RsL3N5c2N0bC5zaCB0byBtb2Rlcm5pemUgaXQgYW5kIHVzZSBrdGFwX2hlbHBlcnMuIEl0IGRvZXMgbm90IHRvdWNoIGFueSBrZXJuZWwgc291cmNlIGNvZGUsIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCksIG9yIGtlcm5lbCBtb2R1bGVzLCBzbyBpdCBpcyBub3Qgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6Mzk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjM5OjA2LjkyNTg0NjA2N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NzE0ODg4OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBvbmx5IHRoZSB1c2VyLXNwYWNlIHNlbGZ0ZXN0IHNjcmlwdCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjdGwvc3lzY3RsLnNoIHRvIG1vZGVybml6ZSBpdCBhbmQgdXNlIGt0YXBfaGVscGVycy4gSXQgZG9lcyBub3QgdG91Y2ggYW55IGtlcm5lbCBzb3VyY2UgY29kZSwgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSwgb3Iga2VybmVsIG1vZHVsZXMsIHNvIGl0IGlzIG5vdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6Mzk6MDYuOTI1ODUwNTg3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDg2MDMyMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyNzE2NjkyY2U0ZmJlMDEzYjg4ZTNmNDNiMDBmNzM1Mzg5MjUxMzU4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDE0IDEzOjM5OjA1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2N0bC9zeXNjdGwuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjdGwvc3lzY3RsLnNoXFxuaW5kZXggOTVlOTM3MDkwODhhMy4uY2ViNWNmYTBjZmQ0ZCAxMDA3NTVcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjdGwvc3lzY3RsLnNoXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY3RsL3N5c2N0bC5zaFxcbkBAIC0yLDM2MiArMiwyMzkgQEBcXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciBPUiBjb3B5bGVmdC1uZXh0LTAuMy4xXFxuICMgQ29weXJpZ2h0IChDKSAyMDE3IEx1aXMgUi4gUm9kcmlndWV6IFxcdTAwM2NtY2dyb2ZAa2VybmVsLm9yZ1xcdTAwM2VcXG4gXFxuLSMgVGhpcyBwZXJmb3JtcyBhIHNlcmllcyB0ZXN0cyBhZ2FpbnN0IHRoZSBwcm9jIHN5c2N0bCBpbnRlcmZhY2UuXFxuLVxcbisjIFJlZHVjZSBub2lzZSBieSBkaXNhYmxpbmcgXFxcInVucmVhY2hhYmxlXFxcIiBjaGVjay5cXG4gIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMzE3XFxuLSMgS3NlbGZ0ZXN0IGZyYW1ld29yayByZXF1aXJlbWVudCAtIFNLSVAgY29kZSBpcyA0Llxcbi1rc2Z0X3NraXA9NFxcbi1cXG4tVEVTVF9OQU1FPVxcXCJzeXNjdGxcXFwiXFxuLVRFU1RfRFJJVkVSPVxcXCJ0ZXN0XyR7VEVTVF9OQU1FfVxcXCJcXG4tVEVTVF9ESVI9JChkaXJuYW1lICQwKVxcbi1URVNUX0ZJTEU9JChta3RlbXApXFxuLVxcbi0jIGluaXRpYWxpemUgZm9yIGluZGl2aWR1YWwgdGVzdHNcXG4tcmM9MFxcbi1cXG4tIyBUaGlzIHJlcHJlc2VudHNcXG4tI1xcbi0jIFRFU1RfSUQ6VEVTVF9DT1VOVDpFTkFCTEVEOlRBUkdFVDpTS0lQX05PX1RBUkdFVFxcbi0jXFxuLSMgVEVTVF9JRDogaXMgdGhlIHRlc3QgaWQgbnVtYmVyXFxuLSMgVEVTVF9DT1VOVDogbnVtYmVyIG9mIHRpbWVzIHdlIHNob3VsZCBydW4gdGhlIHRlc3RcXG4tIyBFTkFCTEVEOiAxIGlmIGVuYWJsZWQsIDAgb3RoZXJ3aXNlXFxuLSMgVEFSR0VUOiB0ZXN0IHRhcmdldCBmaWxlIHJlcXVpcmVkIG9uIHRoZSB0ZXN0X3N5c2N0bCBtb2R1bGVcXG4tIyBTS0lQX05PX1RBUkdFVDogMSBza2lwIGlmIFRBUkdFVCBub3QgdGhlcmVcXG4tIyAgICAgICAgICAgICAgICAgMCBydW4gZXZlbiB0aG91Z2ggVEFSR0VUIG5vdCB0aGVyZVxcbi0jXFxuLSMgT25jZSB0aGVzZSBhcmUgZW5hYmxlZCBwbGVhc2UgbGVhdmUgdGhlbSBhcy1pcy4gV3JpdGUgeW91ciBvd24gdGVzdCxcXG4tIyB3ZSBoYXZlIHRvbnMgb2Ygc3BhY2UuXFxuLUFMTF9URVNUUz1cXFwiMDAwMToxOjE6aW50XzAwMDE6MVxcXCJcXG4tQUxMX1RFU1RTPVxcXCIkQUxMX1RFU1RTIDAwMDI6MToxOnN0cmluZ18wMDAxOjFcXFwiXFxuLUFMTF9URVNUUz1cXFwiJEFMTF9URVNUUyAwMDAzOjE6MTppbnRfMDAwMjoxXFxcIlxcbi1BTExfVEVTVFM9XFxcIiRBTExfVEVTVFMgMDAwNDoxOjE6dWludF8wMDAxOjFcXFwiXFxuLUFMTF9URVNUUz1cXFwiJEFMTF9URVNUUyAwMDA1OjM6MTppbnRfMDAwMzoxXFxcIlxcbi1BTExfVEVTVFM9XFxcIiRBTExfVEVTVFMgMDAwNjo1MDoxOmJpdG1hcF8wMDAxOjFcXFwiXFxuLUFMTF9URVNUUz1cXFwiJEFMTF9URVNUUyAwMDA3OjE6MTpib290X2ludDoxXFxcIlxcbi1BTExfVEVTVFM9XFxcIiRBTExfVEVTVFMgMDAwODoxOjE6bWF0Y2hfaW50OjFcXFwiXFxuLUFMTF9URVNUUz1cXFwiJEFMTF9URVNUUyAwMDA5OjE6MTp1bnJlZ2lzdGVyX2Vycm9yOjBcXFwiXFxuLUFMTF9URVNUUz1cXFwiJEFMTF9URVNUUyAwMDEwOjE6MTptbnQvbW50X2Vycm9yOjBcXFwiXFxuLUFMTF9URVNUUz1cXFwiJEFMTF9URVNUUyAwMDExOjE6MTplbXB0eV9hZGQ6MFxcXCJcXG4tQUxMX1RFU1RTPVxcXCIkQUxMX1RFU1RTIDAwMTI6MToxOnU4X3ZhbGlkOjBcXFwiXFxuLUFMTF9URVNUUz1cXFwiJEFMTF9URVNUUyAwMDEzOjE6MTppbnRfMDAwMzoxXFxcIlxcbi1cXG4tZnVuY3Rpb24gYWxsb3dfdXNlcl9kZWZhdWx0cygpXFxuK1xcbisjIFRoaXMgcGVyZm9ybXMgYSBzZXJpZXMgb2YgdGVzdHMgYWdhaW5zdCB0aGUgcHJvYyBzeXNjdGwgaW50ZXJmYWNlLlxcbitcXG4rRElSPVxcXCIkKGRpcm5hbWUgXFxcIiQocmVhZGxpbmsgLWYgXFxcIiQwXFxcIilcXFwiKVxcXCJcXG4rc291cmNlIFxcXCIke0RJUn1cXFwiLy4uL2tzZWxmdGVzdC9rdGFwX2hlbHBlcnMuc2hcXG4rXFxuK1RFU1RfRFJJVkVSPVxcXCJ0ZXN0X3N5c2N0bFxcXCJcXG4rXFxuK2Fzc2VydF93cml0ZV9yZWplY3RlZCgpICMgXFx1MDAzY2ZpbGVcXHUwMDNlIFxcdTAwM2N2YWx1ZVxcdTAwM2VcXG4ge1xcbi1cXHRpZiBbIC16ICRESVIgXTsgdGhlblxcbi1cXHRcXHRESVI9XFxcIi9zeXMvbW9kdWxlL3Rlc3Rfc3lzY3RsL1xcXCJcXG4tXFx0ZmlcXG4tXFx0aWYgWyAteiAkREVGQVVMVF9OVU1fVEVTVFMgXTsgdGhlblxcbi1cXHRcXHRERUZBVUxUX05VTV9URVNUUz01MFxcbi1cXHRmaVxcbi1cXHRpZiBbIC16ICRTWVNDVEwgXTsgdGhlblxcbi1cXHRcXHRTWVNDVEw9XFxcIi9wcm9jL3N5cy9kZWJ1Zy90ZXN0X3N5c2N0bFxcXCJcXG4tXFx0ZmlcXG4tXFx0aWYgWyAteiAkUFJPRF9TWVNDVEwgXTsgdGhlblxcbi1cXHRcXHRQUk9EX1NZU0NUTD1cXFwiL3Byb2Mvc3lzXFxcIlxcbi1cXHRmaVxcbi1cXHRpZiBbIC16ICRXUklURVNfU1RSSUNUIF07IHRoZW5cXG4tXFx0XFx0V1JJVEVTX1NUUklDVD1cXFwiJHtQUk9EX1NZU0NUTH0va2VybmVsL3N5c2N0bF93cml0ZXNfc3RyaWN0XFxcIlxcbitcXHRsb2NhbCBmaWxlPSQxIHZhbD0kMlxcbitcXHRpZiBwcmludGYgJyVzJyBcXFwiJHZhbFxcXCIgXFx1MDAzZSBcXFwiJGZpbGVcXFwiIDJcXHUwMDNlL2Rldi9udWxsOyB0aGVuXFxuK1xcdFxcdGt0YXBfcHJpbnRfbXNnIFxcXCIkZmlsZTogd3JpdGUgb2YgJyR2YWwnIHN1Y2NlZWRlZCwgZXhwZWN0ZWQgcmVqZWN0aW9uXFxcIlxcbitcXHRcXHRyZXR1cm4gMVxcbiBcXHRmaVxcbitcXHRyZXR1cm4gMFxcbiB9XFxuIFxcbi1mdW5jdGlvbiBjaGVja19wcm9kdWN0aW9uX3N5c2N0bF93cml0ZXNfc3RyaWN0KClcXG4rYXNzZXJ0X2NvbnRlbnQoKSAjIFxcdTAwM2NmaWxlXFx1MDAzZSBcXHUwMDNjd2FudC1maWxlXFx1MDAzZVxcbiB7XFxuLVxcdGVjaG8gLW4gXFxcIkNoZWNraW5nIHByb2R1Y3Rpb24gd3JpdGUgc3RyaWN0IHNldHRpbmcgLi4uIFxcXCJcXG4tXFx0aWYgWyAhIC1lICR7V1JJVEVTX1NUUklDVH0gXTsgdGhlblxcbi1cXHRcXHRlY2hvIFxcXCJGQUlMLCBidXQgc2tpcCBpbiBjYXNlIG9mIG9sZCBrZXJuZWxcXFwiIFxcdTAwM2VcXHUwMDI2Mlxcbi1cXHRlbHNlXFxuLVxcdFxcdG9sZF9zdHJpY3Q9JChjYXQgJHtXUklURVNfU1RSSUNUfSlcXG4tXFx0XFx0aWYgWyBcXFwiJG9sZF9zdHJpY3RcXFwiID0gXFxcIjFcXFwiIF07IHRoZW5cXG4tXFx0XFx0XFx0ZWNobyBcXFwiT0tcXFwiXFxuLVxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0ZWNobyBcXFwiRkFJTCwgc3RyaWN0IHZhbHVlIGlzIDAgYnV0IGZvcmNlIHRvIDEgdG8gY29udGludWVcXFwiIFxcdTAwM2VcXHUwMDI2Mlxcbi1cXHRcXHRcXHRlY2hvIFxcXCIxXFxcIiBcXHUwMDNlICR7V1JJVEVTX1NUUklDVH1cXG4tXFx0XFx0ZmlcXG4tXFx0ZmlcXG4tXFxuLVxcdGlmIFsgLXogJFBBR0VfU0laRSBdOyB0aGVuXFxuLVxcdFxcdFBBR0VfU0laRT0kKGdldGNvbmYgUEFHRVNJWkUpXFxuLVxcdGZpXFxuLVxcdGlmIFsgLXogJE1BWF9ESUdJVFMgXTsgdGhlblxcbi1cXHRcXHRNQVhfRElHSVRTPSQoKCRQQUdFX1NJWkUvOCkpXFxuLVxcdGZpXFxuLVxcdGlmIFsgLXogJElOVF9NQVggXTsgdGhlblxcbi1cXHRcXHRJTlRfTUFYPSQoZ2V0Y29uZiBJTlRfTUFYKVxcbi1cXHRmaVxcbi1cXHRpZiBbIC16ICRVSU5UX01BWCBdOyB0aGVuXFxuLVxcdFxcdFVJTlRfTUFYPSQoZ2V0Y29uZiBVSU5UX01BWClcXG4rXFx0bG9jYWwgZmlsZT0kMSB3YW50X2ZpbGU9JDIgZ290XFxuK1xcdGdvdD0kKGNhdCBcXFwiJGZpbGVcXFwiKVxcbitcXHRpZiBbIFxcXCIkZ290XFxcIiA9PSBcXFwiJHdhbnRfZmlsZVxcXCIgXTsgdGhlblxcbitcXHRcXHRyZXR1cm4gMFxcbiBcXHRmaVxcbitcXHRrdGFwX3ByaW50X21zZyBcXFwiJGZpbGU6IGdvdCAnJGdvdCcsIHdhbnQgJyR3YW50X2ZpbGUnXFxcIlxcbitcXHRyZXR1cm4gMVxcbiB9XFxuIFxcbi10ZXN0X3JlcXMoKVxcbisjIGNvbXBhcmUgaWdub3Jpbmcgd2hpdGVzcGFjZXNcXG4rYXNzZXJ0X2NvbnRlbnRfbG9vc2UoKSAjIFxcdTAwM2NmaWxlXFx1MDAzZSBcXHUwMDNjd2FudC1maWxlXFx1MDAzZVxcbiB7XFxuLVxcdHVpZD0kKGlkIC11KVxcbi1cXHRpZiBbICR1aWQgLW5lIDAgXTsgdGhlblxcbi1cXHRcXHRlY2hvICRtc2cgbXVzdCBiZSBydW4gYXMgcm9vdCBcXHUwMDNlXFx1MDAyNjJcXG4tXFx0XFx0ZXhpdCAka3NmdF9za2lwXFxuLVxcdGZpXFxuLVxcbi1cXHRpZiAhIHdoaWNoIHBlcmwgMlxcdTAwM2UgL2Rldi9udWxsIFxcdTAwM2UgL2Rldi9udWxsOyB0aGVuXFxuLVxcdFxcdGVjaG8gXFxcIiQwOiBZb3UgbmVlZCBwZXJsIGluc3RhbGxlZFxcXCJcXG4tXFx0XFx0ZXhpdCAka3NmdF9za2lwXFxuLVxcdGZpXFxuLVxcdGlmICEgd2hpY2ggZ2V0Y29uZiAyXFx1MDAzZSAvZGV2L251bGwgXFx1MDAzZSAvZGV2L251bGw7IHRoZW5cXG4tXFx0XFx0ZWNobyBcXFwiJDA6IFlvdSBuZWVkIGdldGNvbmYgaW5zdGFsbGVkXFxcIlxcbi1cXHRcXHRleGl0ICRrc2Z0X3NraXBcXG4tXFx0ZmlcXG4tXFx0aWYgISB3aGljaCBkaWZmIDJcXHUwMDNlIC9kZXYvbnVsbCBcXHUwMDNlIC9kZXYvbnVsbDsgdGhlblxcbi1cXHRcXHRlY2hvIFxcXCIkMDogWW91IG5lZWQgZGlmZiBpbnN0YWxsZWRcXFwiXFxuLVxcdFxcdGV4aXQgJGtzZnRfc2tpcFxcbitcXHRsb2NhbCBmaWxlPSQxIHdhbnRfZmlsZT0kMlxcbitcXHRpZiBlY2hvIFxcXCIkd2FudF9maWxlXFxcIiB8IGRpZmYgLXEgLXcgLXUgLSBcXFwiJGZpbGVcXFwiIFxcdTAwM2UgL2Rldi9udWxsOyB0aGVuXFxuK1xcdFxcdHJldHVybiAwXFxuIFxcdGZpXFxuK1xcdGt0YXBfcHJpbnRfbXNnIFxcXCIkZmlsZTogY29udGVudCBkb2VzIG5vdCBtYXRjaCAnJHdhbnRfZmlsZScgKHdoaXRlc3BhY2UtaW5zZW5zaXRpdmUpXFxcIlxcbitcXHRyZXR1cm4gMVxcbiB9XFxuIFxcbi1mdW5jdGlvbiBsb2FkX3JlcV9tb2QoKVxcbisjIEZvciBjaGVja3Mgd2hlcmUgd3JpdGVzIG11c3QgTk9UIHRha2UgZWZmZWN0XFxuK2Fzc2VydF9jb250ZW50X3JlamVjdGVkKCkgIyBcXHUwMDNjZmlsZVxcdTAwM2UgXFx1MDAzY2JhZFxcdTAwM2VcXG4ge1xcbi1cXHRpZiBbICEgLWQgJFNZU0NUTCBdOyB0aGVuXFxuLVxcdFxcdGlmICEgbW9kcHJvYmUgLXEgLW4gJFRFU1RfRFJJVkVSOyB0aGVuXFxuLVxcdFxcdFxcdGVjaG8gXFxcIiQwOiBtb2R1bGUgJFRFU1RfRFJJVkVSIG5vdCBmb3VuZCBbU0tJUF1cXFwiXFxuLVxcdFxcdFxcdGVjaG8gXFxcIllvdSBtdXN0IHNldCBDT05GSUdfVEVTVF9TWVNDVEw9bSBpbiB5b3VyIGtlcm5lbFxcXCIgXFx1MDAzZVxcdTAwMjYyXFxuLVxcdFxcdFxcdGV4aXQgJGtzZnRfc2tpcFxcbi1cXHRcXHRmaVxcbi1cXHRcXHRtb2Rwcm9iZSAkVEVTVF9EUklWRVJcXG4tXFx0XFx0aWYgWyAkPyAtbmUgMCBdOyB0aGVuXFxuLVxcdFxcdFxcdGVjaG8gXFxcIiQwOiBtb2Rwcm9iZSAkVEVTVF9EUklWRVIgZmFpbGVkLlxcXCJcXG4tXFx0XFx0XFx0ZXhpdFxcbi1cXHRcXHRmaVxcbitcXHRsb2NhbCBmaWxlPSQxIGJhZD0kMlxcbitcXHRpZiBlY2hvIFxcXCIkYmFkXFxcIiB8IGRpZmYgLXEgLXcgLXUgLSBcXFwiJGZpbGVcXFwiIFxcdTAwM2UgL2Rldi9udWxsOyB0aGVuXFxuK1xcdFxcdGt0YXBfcHJpbnRfbXNnIFxcXCIkZmlsZTogdW5leHBlY3RlZGx5IG5vdyBob2xkcyByZWplY3RlZCB2YWx1ZSAnJGJhZCdcXFwiXFxuK1xcdFxcdHJldHVybiAxXFxuIFxcdGZpXFxuK1xcdHJldHVybiAwXFxuIH1cXG4gXFxuLXJlc2V0X3ZhbHMoKVxcbisjIHByb2MgZmlsZXMgZ2V0IHJlYWQgYSBwYWdlIGF0IGEgdGltZSwgd2hpY2ggY2FuIGNvbmZ1c2UgZGlmZiByZXN1bHRpbmcgaW5cXG4rIyBpbmNvcnJlY3QgcmVzdWx0cy4gVXNlIGEgdGVtcCBmaWxlIHRvIGRpZmYuXFxuK2Fzc2VydF9kaWZmX3Byb2NfZmlsZSgpICMgXFx1MDAzY2ZpbGVcXHUwMDNlIFxcdTAwM2N3YW50LWZpbGVcXHUwMDNlXFxuIHtcXG4tXFx0VkFMPVxcXCJcXFwiXFxuLVxcdFRSSUdHRVI9JChiYXNlbmFtZSAke1RBUkdFVH0pXFxuLVxcdGNhc2UgXFxcIiRUUklHR0VSXFxcIiBpblxcbi1cXHRcXHRpbnRfMDAwMSlcXG4tXFx0XFx0XFx0VkFMPVxcXCI2MFxcXCJcXG4tXFx0XFx0XFx0OztcXG4tXFx0XFx0aW50XzAwMDIpXFxuLVxcdFxcdFxcdFZBTD1cXFwiMVxcXCJcXG4tXFx0XFx0XFx0OztcXG4tXFx0XFx0dWludF8wMDAxKVxcbi1cXHRcXHRcXHRWQUw9XFxcIjMxNFxcXCJcXG4tXFx0XFx0XFx0OztcXG4tXFx0XFx0c3RyaW5nXzAwMDEpXFxuLVxcdFxcdFxcdFZBTD1cXFwiKG5vbmUpXFxcIlxcbi1cXHRcXHRcXHQ7O1xcbi1cXHRcXHRiaXRtYXBfMDAwMSlcXG4tXFx0XFx0XFx0VkFMPVxcXCJcXFwiXFxuLVxcdFxcdFxcdDs7XFxuLVxcdFxcdCopXFxuLVxcdFxcdFxcdDs7XFxuLVxcdGVzYWNcXG4tXFx0ZWNobyAtbiAkVkFMIFxcdTAwM2UgJFRBUkdFVFxcbi19XFxuK1xcdGxvY2FsIGZpbGU9JDEgd2FudF9maWxlPSQyIHRtcFxcbitcXHR0bXA9JChta3RlbXApXFxuK1xcdGNhdCBcXFwiJGZpbGVcXFwiIFxcdTAwM2UgXFxcIiR0bXBcXFwiXFxuIFxcbi1zZXRfb3JpZygpXFxuLXtcXG4tXFx0aWYgWyAhIC16ICRUQVJHRVQgXSBcXHUwMDI2XFx1MDAyNiBbICEgLXogJE9SSUcgXTsgdGhlblxcbi1cXHRcXHRpZiBbIC1mICR7VEFSR0VUfSBdOyB0aGVuXFxuLVxcdFxcdFxcdGVjaG8gXFxcIiR7T1JJR31cXFwiIFxcdTAwM2UgXFxcIiR7VEFSR0VUfVxcXCJcXG4tXFx0XFx0ZmlcXG4rXFx0aWYgZGlmZiAtdyAtcSBcXFwiJHRtcFxcXCIgXFxcIiR3YW50X2ZpbGVcXFwiIFxcdTAwM2UgL2Rldi9udWxsOyB0aGVuXFxuK1xcdFxcdHJtIC1mIFxcXCIkdG1wXFxcIlxcbitcXHRcXHRyZXR1cm4gMFxcbiBcXHRmaVxcbitcXHRrdGFwX3ByaW50X21zZyBcXFwiJGZpbGU6IGNvbnRlbnQgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgZmlsZSAkd2FudF9maWxlXFxcIlxcbitcXHRybSAtZiBcXFwiJHRtcFxcXCJcXG4rXFx0cmV0dXJuIDFcXG4gfVxcbiBcXG4tc2V0X3Rlc3QoKVxcbisjIFZlcmlmeSB0aGF0IGFuIGVycm9uZW91cyB1cGRhdGUgZmFpbHMgYW5kIGRvZXMgbm90IGNoYW5nZSB0aGUgYmFzZWxpbmUuXFxuK2Fzc2VydF9ub19wYXJ0aWFsX3VwZGF0ZSgpICMgXFx1MDAzY2ZpbGVcXHUwMDNlIFxcdTAwM2NiYXNlbGluZVxcdTAwM2UgXFx1MDAzY2JhZC12YWx1ZVxcdTAwM2VcXG4ge1xcbi1cXHRlY2hvIFxcXCIke1RFU1RfU1RSfVxcXCIgXFx1MDAzZSBcXFwiJHtUQVJHRVR9XFxcIlxcbitcXHRsb2NhbCBmaWxlPSQxIGJhc2VsaW5lPSQyIGJhZD0kM1xcbitcXG4rXFx0cHJpbnRmICclcycgXFxcIiRiYXNlbGluZVxcXCIgXFx1MDAzZSBcXFwiJGZpbGVcXFwiXFxuK1xcdGFzc2VydF93cml0ZV9yZWplY3RlZCBcXFwiJGZpbGVcXFwiIFxcXCIkYmFkXFxcIiB8fCByZXR1cm4gMVxcbitcXHRhc3NlcnRfY29udGVudF9sb29zZSBcXFwiJGZpbGVcXFwiIFxcXCIkYmFzZWxpbmVcXFwiXFxuIH1cXG4gXFxuLXZlcmlmeSgpXFxuK2Fzc2VydF9ncmVwKCkgIyBcXHUwMDNjZmlsZVxcdTAwM2UgXFx1MDAzY3BhdHRlcm5cXHUwMDNlIC0gXFx1MDAzY3BhdHRlcm5cXHUwMDNlIG11c3QgYXBwZWFyIGluIFxcdTAwM2NmaWxlXFx1MDAzZVxcbiB7XFxuLVxcdGxvY2FsIHNlZW5cXG4tXFx0c2Vlbj0kKGNhdCBcXFwiJDFcXFwiKVxcbi1cXHRpZiBbIFxcXCIke3NlZW59XFxcIiAhPSBcXFwiJHtURVNUX1NUUn1cXFwiIF07IHRoZW5cXG4tXFx0XFx0cmV0dXJuIDFcXG4rXFx0bG9jYWwgZmlsZT0kMSBwYXR0ZXJuPSQyXFxuK1xcdGlmIGdyZXAgLXEgXFxcIiRwYXR0ZXJuXFxcIiBcXFwiJGZpbGVcXFwiOyB0aGVuXFxuK1xcdFxcdHJldHVybiAwXFxuIFxcdGZpXFxuLVxcdHJldHVybiAwXFxuK1xcdGt0YXBfcHJpbnRfbXNnIFxcXCIkZmlsZTogcGF0dGVybiAnJHBhdHRlcm4nIG5vdCBmb3VuZFxcXCJcXG4rXFx0cmV0dXJuIDFcXG4gfVxcbiBcXG4tIyBwcm9jIGZpbGVzIGdldCByZWFkIGEgcGFnZSBhdCBhIHRpbWUsIHdoaWNoIGNhbiBjb25mdXNlIGRpZmYsXFxuLSMgYW5kIGdldCB5b3UgaW5jb3JyZWN0IHJlc3VsdHMgb24gcHJvYyBmaWxlcyB3aXRoIGxvbmcgZGF0YS4gVG8gdXNlXFxuLSMgZGlmZiBhZ2FpbnN0IHRoZW0geW91IG11c3QgZmlyc3QgZXh0cmFjdCB0aGUgb3V0cHV0IHRvIGEgZmlsZSwgYW5kXFxuLSMgdGhlbiBjb21wYXJlIGFnYWluc3QgdGhhdCBmaWxlLlxcbi12ZXJpZnlfZGlmZl9wcm9jX2ZpbGUoKVxcbithc3NlcnRfZ3JlcF9hYnNlbnQoKSAjIFxcdTAwM2NmaWxlXFx1MDAzZSBcXHUwMDNjcGF0dGVyblxcdTAwM2UgLSBcXHUwMDNjcGF0dGVyblxcdTAwM2UgbXVzdCBOT1QgYXBwZWFyXFxuIHtcXG4tXFx0VE1QX0RVTVBfRklMRT0kKG1rdGVtcClcXG4tXFx0Y2F0ICQxIFxcdTAwM2UgJFRNUF9EVU1QX0ZJTEVcXG4tXFxuLVxcdGlmICEgZGlmZiAtdyAtcSAkVE1QX0RVTVBfRklMRSAkMjsgdGhlblxcbi1cXHRcXHRyZXR1cm4gMVxcbi1cXHRlbHNlXFxuK1xcdGxvY2FsIGZpbGU9JDEgcGF0dGVybj0kMlxcbitcXHRpZiAhIGdyZXAgLXEgXFxcIiRwYXR0ZXJuXFxcIiBcXFwiJGZpbGVcXFwiOyB0aGVuXFxuIFxcdFxcdHJldHVybiAwXFxuIFxcdGZpXFxuK1xcdGt0YXBfcHJpbnRfbXNnIFxcXCIkZmlsZTogcGF0dGVybiAnJHBhdHRlcm4nIHVuZXhwZWN0ZWRseSBmb3VuZFxcXCJcXG4rXFx0cmV0dXJuIDFcXG4gfVxcbiBcXG4tdmVyaWZ5X2RpZmZfdygpXFxuK2Fzc2VydF9kbWVzZ19jb3VudCgpICMgXFx1MDAzY3BhdHRlcm5cXHUwMDNlIFxcdTAwM2N3YW50LWNvdW50XFx1MDAzZVxcbiB7XFxuLVxcdGVjaG8gXFxcIiRURVNUX1NUUlxcXCIgfCBkaWZmIC1xIC13IC11IC0gJDEgXFx1MDAzZSAvZGV2L251bGxcXG4tXFx0cmV0dXJuICQ/XFxuK1xcdGxvY2FsIHBhdHRlcm49JDEgd2FudD0kMiBnb3RcXG4rXFx0Z290PSQoZG1lc2cgfCBncmVwIC1jIFxcXCIkcGF0dGVyblxcXCIpXFxuK1xcdGlmIFsgXFxcIiRnb3RcXFwiIC1lcSBcXFwiJHdhbnRcXFwiIF07IHRoZW5cXG4rXFx0XFx0cmV0dXJuIDBcXG4rXFx0ZmlcXG4rXFx0a3RhcF9wcmludF9tc2cgXFxcImRtZXNnOiBwYXR0ZXJuICckcGF0dGVybicgc2VlbiAkZ290IHRpbWVzLCB3YW50ICR3YW50XFxcIlxcbitcXHRyZXR1cm4gMVxcbiB9XFxuIFxcbi0jIFZlcmlmeSB0aGF0IGFuIGVycm9uZW91cyAoJDIpIHVwZGF0ZSBmYWlscyBhbmQgZG9lcyBub3QgY2hhbmdlIFRBUkdFVFxcbi12ZXJpZnlfbm9fcGFydGlhbF91cGRhdGUoKVxcbisjIHdyaXRlIFxcdTAwM2NzdHJcXHUwMDNlIHRocm91Z2ggZGQgaW4gXFx1MDAzY2JzXFx1MDAzZS1zaXplZCBjaHVua3NcXG4rd3JpdGVfaW5fY2h1bmtzKCkgICMgXFx1MDAzY2ZpbGVcXHUwMDNlIFxcdTAwM2NzdHJcXHUwMDNlIFxcdTAwM2Nic1xcdTAwM2VcXG4ge1xcbi1cXHRURVNUX1NUUj1cXFwiJDFcXFwiXFxuLVxcdGVjaG8gLW4gXFxcIiRURVNUX1NUUlxcXCIgXFx1MDAzZSBcXFwiJFRBUkdFVFxcXCJcXG4tXFxuLVxcdGlmIGVjaG8gLW4gXFxcIiQyXFxcIiBcXHUwMDNlIFxcXCIkVEFSR0VUXFxcIiAyXFx1MDAzZSAvZGV2L251bGw7IHRoZW5cXG4tXFx0XFx0cmV0dXJuIDFcXG4tXFx0ZmlcXG4tXFx0dmVyaWZ5X2RpZmZfdyBcXFwiJHtUQVJHRVR9XFxcIlxcbitcXHRsb2NhbCBmaWxlPSQxIHN0cj0kMiBicz0kM1xcbitcXHRwcmludGYgJyVzJyBcXFwiJHN0clxcXCIgfCBkZCBvZj1cXFwiJGZpbGVcXFwiIGJzPVxcXCIkYnNcXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuIH1cXG4gXFxuLXRlc3RfcmMoKVxcbisjIHdyaXRlIFxcdTAwM2NzdHJcXHUwMDNlIHRocm91Z2ggZGQgaW4gXFx1MDAzY2JzXFx1MDAzZS1zaXplZCBjaHVua3MuIHNlZWtpbmcgXFx1MDAzY3NlZWtcXHUwMDNlIGJsb2NrcyBvZiBzaXplXFxuKyMgXFx1MDAzY2JzXFx1MDAzZSBpbnRvIHRoZSBvdXRwdXQuIHNraXBwaW5nIFxcdTAwM2Nza2lwXFx1MDAzZSBibG9ja3Mgb2Ygc2l6ZSBcXHUwMDNjYnNcXHUwMDNlIGZyb20gdGhlIGlucHV0LlxcbisjIFVuc3luY3Job25pemVkIHdoZW4gc2tpcCBpcyBub3QgcGFzc2VkLlxcbit3cml0ZV9hdF9vZmZzZXQoKSAgIyBcXHUwMDNjZmlsZVxcdTAwM2UgXFx1MDAzY3N0clxcdTAwM2UgXFx1MDAzY2JzXFx1MDAzZSBcXHUwMDNjc2Vla1xcdTAwM2UgW3NraXBdXFxuIHtcXG4tXFx0aWYgW1sgJHJjICE9IDAgXV07IHRoZW5cXG4tXFx0XFx0ZWNobyBcXFwiRmFpbGVkIHRlc3QsIHJldHVybiB2YWx1ZTogJHJjXFxcIiBcXHUwMDNlXFx1MDAyNjJcXG4tXFx0XFx0ZXhpdCAkcmNcXG4rXFx0bG9jYWwgZmlsZT0kMSBzdHI9JDIgYnM9JDMgc2Vlaz0kNCBza2lwPSR7NTotfVxcbitcXHRpZiBbIC1uIFxcXCIkc2tpcFxcXCIgXTsgdGhlblxcbitcXHRcXHRwcmludGYgJyVzJyBcXFwiJHN0clxcXCIgfCBkZCBvZj1cXFwiJGZpbGVcXFwiIGJzPVxcXCIkYnNcXFwiIHNlZWs9XFxcIiRzZWVrXFxcIiBza2lwPVxcXCIkc2tpcFxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rXFx0ZWxzZVxcbitcXHRcXHRwcmludGYgJyVzJyBcXFwiJHN0clxcXCIgfCBkZCBvZj1cXFwiJGZpbGVcXFwiIGJzPVxcXCIkYnNcXFwiIHNlZWs9XFxcIiRzZWVrXFxcIiAyXFx1MDAzZS9kZXYvbnVsbFxcbiBcXHRmaVxcbiB9XFxuIFxcbi10ZXN0X2ZpbmlzaCgpXFxuKyMgcGFkIChwcmVmaXgpIFxcdTAwM2NzdHJcXHUwMDNlIHdpdGggXFx1MDAzY3BhZFxcdTAwM2UgJ0EnIGNoYXJhY3RlcnMsIHRoZW4gd3JpdGUgaXQgYWxsIHRvIFxcdTAwM2NmaWxlXFx1MDAzZVxcbisjIHdpdGggZGQgYmxvY2sgc2l6ZSBcXHUwMDNjYnNcXHUwMDNlIChkZWZhdWx0cyB0byBcXHUwMDNjcGFkXFx1MDAzZSkuXFxuK3dyaXRlX292ZXJsb25nKCkgICMgXFx1MDAzY2ZpbGVcXHUwMDNlIFxcdTAwM2NwYWRcXHUwMDNlIFxcdTAwM2NzdHJcXHUwMDNlIFtic11cXG4ge1xcbi1cXHRzZXRfb3JpZ1xcbi1cXHRybSAtZiBcXFwiJHtURVNUX0ZJTEV9XFxcIlxcbitcXHRsb2NhbCBmaWxlPSQxIHBhZD0kMiBzdHI9JDMgYnM9JDQgcFxcbitcXHQ6IFxcXCIke2JzOj0kcGFkfVxcXCJcXG4gXFxuLVxcdGlmIFsgISAteiAke29sZF9zdHJpY3R9IF07IHRoZW5cXG4tXFx0XFx0ZWNobyAke29sZF9zdHJpY3R9IFxcdTAwM2UgJHtXUklURVNfU1RSSUNUfVxcbi1cXHRmaVxcbi1cXHRleGl0ICRyY1xcbitcXHQjIHNhdmUgYSBzdHJpbmcgd2l0aCAkcGFkIHNwYWNlcyBpbiAkcFxcbitcXHRwcmludGYgLXYgcCAnJSpzJyBcXFwiJHBhZFxcXCIgJydcXG4rXFx0IyByZXBsYWNlIFxcXCIgXFxcIiB3aXRoIFxcXCJBXFxcIlxcbitcXHRwcmludGYgJyVzJXMnIFxcXCIke3AvLyAvQX1cXFwiIFxcXCIkc3RyXFxcIiB8IGRkIG9mPVxcXCIkZmlsZVxcXCIgYnM9XFxcIiRic1xcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4gfVxcbiBcXG4tcnVuX251bWVyaWN0ZXN0cygpXFxuKyMgcGFkIChwcmVmaXgpIFxcdTAwM2NzdHJcXHUwMDNlIHdpdGggXFx1MDAzY3BhZFxcdTAwM2UgQVNDSUkgc3BhY2VzLCB0aGVuIHdyaXRlIHdpdGggZGVmYXVsdCBibG9jayBzaXplLlxcbit3cml0ZV9wYWRkZWRfZGlnaXRzKCkgICMgXFx1MDAzY2ZpbGVcXHUwMDNlIFxcdTAwM2NwYWRcXHUwMDNlIFxcdTAwM2N2YWxcXHUwMDNlXFxuIHtcXG4tXFx0ZWNobyBcXFwiPT0gVGVzdGluZyBzeXNjdGwgYmVoYXZpb3IgYWdhaW5zdCAke1RBUkdFVH0gPT1cXFwiXFxuK1xcdGxvY2FsIGZpbGU9JDEgcGFkPSQyIHZhbD0kMyBwXFxuK1xcdHByaW50ZiAtdiBwICclKnMnIFxcXCIkcGFkXFxcIiAnJ1xcbitcXHRwcmludGYgJyVzJXMnIFxcXCIkcFxcXCIgXFxcIiR2YWxcXFwiIHwgZGQgb2Y9XFxcIiRmaWxlXFxcIiAyXFx1MDAzZS9kZXYvbnVsbFxcbit9XFxuIFxcbi1cXHRyYz0wXFxuK3Rlc3RfaW50X2FycmF5X3dyaXRlcygpXFxuK3tcXG4rXFx0bG9jYWwgdD1cXFwiJHtTWVNDVEx9L2ludF8wMDAzXFxcIlxcbitcXHRsb2NhbCBsaW1pdFxcbiBcXG4tXFx0ZWNobyAtbiBcXFwiV3JpdGluZyB0ZXN0IGZpbGUgLi4uIFxcXCJcXG4tXFx0ZWNobyBcXFwiJHtURVNUX1NUUn1cXFwiIFxcdTAwM2UgXFxcIiR7VEVTVF9GSUxFfVxcXCJcXG4tXFx0aWYgISB2ZXJpZnkgXFxcIiR7VEVTVF9GSUxFfVxcXCI7IHRoZW5cXG4tXFx0XFx0ZWNobyBcXFwiRkFJTFxcXCIgXFx1MDAzZVxcdTAwMjYyXFxuLVxcdFxcdGV4aXQgMVxcbi1cXHRlbHNlXFxuLVxcdFxcdGVjaG8gXFxcIk9LXFxcIlxcbi1cXHRmaVxcbitcXHRbWyAtZiBcXFwiJHRcXFwiIF1dIHx8IHsgUkVUPSRLU0ZUX1NLSVA7IHJldHVybjsgfVxcbiBcXG4tXFx0ZWNobyAtbiBcXFwiQ2hlY2tpbmcgc3lzY3RsIGlzIG5vdCBzZXQgdG8gdGVzdCB2YWx1ZSAuLi4gXFxcIlxcbi1cXHRpZiB2ZXJpZnkgXFxcIiR7VEFSR0VUfVxcXCI7IHRoZW5cXG4tXFx0XFx0ZWNobyBcXFwiRkFJTFxcXCIgXFx1MDAzZVxcdTAwMjYyXFxuLVxcdFxcdGV4aXQgMVxcbi1cXHRlbHNlXFxuLVxcdFxcdGVjaG8gXFxcIk9LXFxcIlxcbi1cXHRmaVxcbitcXHRwcmludGYgJyVzJyBcXFwiNCAzIDIgMVxcXCIgXFx1MDAzZSBcXFwiJHRcXFwiXFxuK1xcdGFzc2VydF9jb250ZW50X2xvb3NlIFxcXCIkdFxcXCIgXFxcIjQgMyAyIDFcXFwiIHx8IFJFVD0kS1NGVF9GQUlMXFxuIFxcbi1cXHRlY2hvIC1uIFxcXCJXcml0aW5nIHN5c2N0bCBmcm9tIHNoZWxsIC4uLiBcXFwiXFxuLVxcdHNldF90ZXN0XFxuLVxcdGlmICEgdmVyaWZ5IFxcXCIke1RBUkdFVH1cXFwiOyB0aGVuXFxuLVxcdFxcdGVjaG8gXFxcIkZBSUxcXFwiIFxcdTAwM2VcXHUwMDI2Mlxcbi1cXHRcXHRleGl0IDFcXG4tXFx0ZWxzZVxcbi1cXHRcXHRlY2hvIFxcXCJPS1xcXCJcXG4tXFx0ZmlcXG4rXFx0IyBTa2lwcGluZyB0cmFpbGluZyBlbGVtZW50cyBsZWF2ZXMgdGhlbSBpbnRhY3RcXG4rXFx0cHJpbnRmICclcycgXFxcIjEwMCAxMDFcXFwiIFxcdTAwM2UgXFxcIiR0XFxcIlxcbitcXHRhc3NlcnRfY29udGVudF9sb29zZSBcXFwiJHRcXFwiIFxcXCIxMDAgMTAxIDIgMVxcXCIgfHwgUkVUPSRLU0ZUX0ZBSUxcXG4gXFxuLVxcdGVjaG8gLW4gXFxcIlJlc2V0dGluZyBzeXNjdGwgdG8gb3JpZ2luYWwgdmFsdWUgLi4uIFxcXCJcXG4tXFx0c2V0X29yaWdcXG4tXFx0aWYgdmVyaWZ5IFxcXCIke1RBUkdFVH1cXFwiOyB0aGVuXFxuLVxcdFxcdGVjaG8gXFxcIkZBSUxcXFwiIFxcdTAwM2VcXHUwMDI2Mlxcbi1cXHRcXHRleGl0IDFcXG4tXFx0ZWxzZVxcbi1cXHRcXHRlY2hvIFxcXCJPS1xcXCJcXG4tXFx0ZmlcXG4rXFx0IyBFdmVuIGZvciBhbiBpbnQgYXJyYXksIGEgc2luZ2xlIHdyaXRlIGlzIHN0aWxsIGNhcHBlZCBhdCBNQVhfRElHSVRTXFxuK1xcdCMgKFBBR0VfU0laRS84KSBieXRlczsgY2hlY2sgcmlnaHQgYXQsIGFuZCBqdXN0IHBhc3QsIHRoYXQgYm91bmRhcnkuXFxuK1xcdCMgQ2FycmllcyBvbiB0aGUgc3RhdGUgZnJvbSB0aGUgd3JpdGVzIGFib3ZlLlxcbitcXHRsaW1pdD0kKChNQVhfRElHSVRTIC0gMSkpXFxuK1xcdHdyaXRlX3BhZGRlZF9kaWdpdHMgXFxcIiR0XFxcIiBcXFwiJGxpbWl0XFxcIiBcXFwiOVxcXCJcXG4rXFx0YXNzZXJ0X2NvbnRlbnRfbG9vc2UgXFxcIiR0XFxcIiBcXFwiOSAxMDEgMiAxXFxcIiB8fCBSRVQ9JEtTRlRfRkFJTFxcbiBcXG4tXFx0IyBOb3cgdGhhdCB3ZSd2ZSB2YWxpZGF0ZWQgdGhlIHNhbml0eSBvZiBcXFwic2V0X3Rlc3RcXFwiIGFuZCBcXFwic2V0X29yaWdcXFwiLFxcbi1cXHQjIHdlIGNhbiB1c2UgdGhvc2UgZnVuY3Rpb25zIHRvIHNldCBzdGFydGluZyBzdGF0ZXMgYmVmb3JlIHJ1bm5pbmdcXG4tXFx0IyBzcGVjaWZpYyBiZWhhdmlvcmFsIHRlc3RzLlxcbitcXHRsaW1pdD0kKChNQVhfRElHSVRTKSlcXG4rXFx0d3JpdGVfcGFkZGVkX2RpZ2l0cyBcXFwiJHRcXFwiIFxcXCIkbGltaXRcXFwiIFxcXCI3XFxcIlxcbitcXHRhc3NlcnRfY29udGVudF9yZWplY3RlZCBcXFwiJHRcXFwiIFxcXCI3IDEwMSAyIDFcXFwiIHx8IFJFVD0kS1NGVF9GQUlMXFxuK31cXG4gXFxuLVxcdGVjaG8gLW4gXFxcIldyaXRpbmcgZW50aXJlIHN5c2N0bCBpbiBzaW5nbGUgd3JpdGUgLi4uIFxcXCJcXG4tXFx0c2V0X29yaWdcXG4tXFx0ZGQgaWY9XFxcIiR7VEVTVF9GSUxFfVxcXCIgb2Y9XFxcIiR7VEFSR0VUfVxcXCIgYnM9NDA5NiAyXFx1MDAzZS9kZXYvbnVsbFxcbi1cXHRpZiAhIHZlcmlmeSBcXFwiJHtUQVJHRVR9XFxcIjsgdGhlblxcbi1cXHRcXHRlY2hvIFxcXCJGQUlMXFxcIiBcXHUwMDNlXFx1MDAyNjJcXG4tXFx0XFx0cmM9MVxcbi1cXHRlbHNlXFxuLVxcdFxcdGVjaG8gXFxcIk9LXFxcIlxcbi1cXHRmaVxcbit0ZXN0X2ludF9hcnJheV9ub19wYXJ0aWFsX3VwZGF0ZSgpXFxuK3tcXG4rXFx0bG9jYWwgdD1cXFwiJHtTWVNDVEx9L2ludF8wMDAzXFxcIlxcbiBcXG4tXFx0ZWNobyAtbiBcXFwiV3JpdGluZyBtaWRkbGUgb2Ygc3lzY3RsIGFmdGVyIHN5bmNocm9uaXplZCBzZWVrIC4uLiBcXFwiXFxuLVxcdHNldF90ZXN0XFxuLVxcdGRkIGlmPVxcXCIke1RFU1RfRklMRX1cXFwiIG9mPVxcXCIke1RBUkdFVH1cXFwiIGJzPTEgc2Vlaz0xIHNraXA9MSAyXFx1MDAzZS9kZXYvbnVsbFxcbi1cXHRpZiAhIHZlcmlmeSBcXFwiJHtUQVJHRVR9XFxcIjsgdGhlblxcbi1cXHRcXHRlY2hvIFxcXCJGQUlMXFxcIiBcXHUwMDNlXFx1MDAyNjJcXG4tXFx0XFx0cmM9MVxcbi1cXHRlbHNlXFxuLVxcdFxcdGVjaG8gXFxcIk9LXFxcIlxcbi1cXHRmaVxcbitcXHRbWyAtZiBcXFwiJHRcXFwiIF1dIHx8IHsgUkVUPSRLU0ZUX1NLSVA7IHJldHVybjsgfVxcbiBcXG4tXFx0ZWNobyAtbiBcXFwiV3JpdGluZyBiZXlvbmQgZW5kIG9mIHN5c2N0bCAuLi4gXFxcIlxcbi1cXHRzZXRfb3JpZ1xcbi1cXHRkZCBpZj1cXFwiJHtURVNUX0ZJTEV9XFxcIiBvZj1cXFwiJHtUQVJHRVR9XFxcIiBicz0yMCBzZWVrPTIgMlxcdTAwM2UvZGV2L251bGxcXG4tXFx0aWYgdmVyaWZ5IFxcXCIke1RBUkdFVH1cXFwiOyB0aGVuXFxuLVxcdFxcdGVjaG8gXFxcIkZBSUxcXFwiIFxcdTAwM2VcXHUwMDI2Mlxcbi1cXHRcXHRyYz0xXFxuLVxcdGVsc2VcXG4tXFx0XFx0ZWNobyBcXFwiT0tcXFwiXFxuLVxcdGZpXFxuK1xcdCMgYmFkIDNyZCBlbGVtZW50IChub3QgYSBudW1iZXIpXFxuK1xcdGFzc2VydF9ub19wYXJ0aWFsX3VwZGF0ZSBcXFwiJHRcXFwiIFxcXCIxIDIgMyA0XFxcIiBcXFwiMTAgMjAgYWJjIDQwXFxcIiB8fCBSRVQ9JEtTRlRfRkFJTFxcbiBcXG4tXFx0ZWNobyAtbiBcXFwiV3JpdGluZyBzeXNjdGwgd2l0aCBtdWx0aXBsZSBsb25nIHdyaXRlcyAuLi4gXFxcIlxcbi1cXHRzZXRfb3JpZ1xcbi1cXHQocGVybCAtZSAncHJpbnQgXFxcIkFcXFwiIHggNTA7JzsgZWNobyBcXFwiJHtURVNUX1NUUn1cXFwiKSB8IFxcXFxcXG4tXFx0XFx0ZGQgb2Y9XFxcIiR7VEFSR0VUfVxcXCIgYnM9NTAgMlxcdTAwM2UvZGV2L251bGxcXG4tXFx0aWYgdmVyaWZ5IFxcXCIke1RBUkdFVH1cXFwiOyB0aGVuXFxuLVxcdFxcdGVjaG8gXFxcIkZBSUxcXFwiIFxcdTAwM2VcXHUwMDI2Mlxcbi1cXHRcXHRyYz0xXFxuLVxcdGVsc2VcXG4tXFx0XFx0ZWNobyBcXFwiT0tcXFwiXFxuLVxcdGZpXFxuLVxcdHRlc3RfcmNcXG4rXFx0IyBiYWQgM3JkIGVsZW1lbnQgKG92ZXJmbG93cyBpbnQpXFxuK1xcdGFzc2VydF9ub19wYXJ0aWFsX3VwZGF0ZSBcXFwiJHRcXFwiIFxcXCIxIDIgMyA0XFxcIiBcXFwiMTAgMjAgJCgoSU5UX01BWCArIDEpKSA0MFxcXCIgfHwgUkVUPSRLU0ZUX0ZBSUxcXG4rXFxuK1xcdCMgYmFkIDFzdCBlbGVtZW50XFxuK1xcdGFzc2VydF9ub19wYXJ0aWFsX3VwZGF0ZSBcXFwiJHRcXFwiIFxcXCIxIDIgMyA0XFxcIiBcXFwiYWJjIDIwIDMwIDQwXFxcIiB8fCBSRVQ9JEtTRlRfRkFJTFxcbiB9XFxuIFxcbi1jaGVja19mYWlsdXJlKClcXG4rIyBFeGVyY2lzZSB0aGUgd3JpdGUgcGF0dGVybnNcXG4rYXNzZXJ0X3dyaXRlX3BhdHRlcm5zKCkgICMgXFx1MDAzY2ZpbGVcXHUwMDNlIFxcdTAwM2NiYXNlbGluZVxcdTAwM2UgXFx1MDAzY3ZhbFxcdTAwM2VcXG4ge1xcbi1cXHRlY2hvIC1uIFxcXCJUZXN0aW5nIHRoYXQgJDEgZmFpbHMgYXMgZXhwZWN0ZWQgLi4uIFxcXCJcXG4tXFx0cmVzZXRfdmFsc1xcbi1cXHRURVNUX1NUUj1cXFwiJDFcXFwiXFxuLVxcdG9yaWc9XFxcIiQoY2F0ICRUQVJHRVQpXFxcIlxcbi1cXHRlY2hvIC1uIFxcXCIkVEVTVF9TVFJcXFwiIFxcdTAwM2UgJFRBUkdFVCAyXFx1MDAzZSAvZGV2L251bGxcXG4tXFxuLVxcdCMgd3JpdGUgc2hvdWxkIGZhaWwgYW5kICRUQVJHRVQgc2hvdWxkIHJldGFpbiBpdHMgb3JpZ2luYWwgdmFsdWVcXG4tXFx0aWYgWyAkPyA9IDAgXSB8fCBbIFxcXCIkKGNhdCAkVEFSR0VUKVxcXCIgIT0gXFxcIiRvcmlnXFxcIiBdOyB0aGVuXFxuLVxcdFxcdGVjaG8gXFxcIkZBSUxcXFwiIFxcdTAwM2VcXHUwMDI2Mlxcbi1cXHRcXHRyYz0xXFxuLVxcdGVsc2VcXG4tXFx0XFx0ZWNobyBcXFwiT0tcXFwiXFxuLVxcdGZpXFxuLVxcdHRlc3RfcmNcXG4rXFx0bG9jYWwgZmlsZT0kMSBiYXNlbGluZT0kMiB2YWw9JDMgc3RhdHVzPTBcXG4rXFxuK1xcdHByaW50ZiAnJXMnIFxcXCIkdmFsXFxcIiBcXHUwMDNlIFxcXCIkZmlsZVxcXCJcXG4rXFx0YXNzZXJ0X2NvbnRlbnQgXFxcIiRmaWxlXFxcIiBcXFwiJHZhbFxcXCIgfHwgc3RhdHVzPTFcXG4rXFx0cHJpbnRmICclcycgXFxcIiRiYXNlbGluZVxcXCIgXFx1MDAzZSBcXFwiJGZpbGVcXFwiXFxuK1xcdGFzc2VydF9jb250ZW50IFxcXCIkZmlsZVxcXCIgXFxcIiRiYXNlbGluZVxcXCIgfHwgc3RhdHVzPTFcXG4rXFxuK1xcdHByaW50ZiAnJXMnIFxcXCIkYmFzZWxpbmVcXFwiIFxcdTAwM2UgXFxcIiRmaWxlXFxcIlxcbitcXHR3cml0ZV9pbl9jaHVua3MgXFxcIiRmaWxlXFxcIiBcXFwiJHZhbFxcXCIgNDA5NlxcbitcXHRhc3NlcnRfY29udGVudCBcXFwiJGZpbGVcXFwiIFxcXCIkdmFsXFxcIiB8fCBzdGF0dXM9MVxcbitcXG4rXFx0cHJpbnRmICclcycgXFxcIiR2YWxcXFwiIFxcdTAwM2UgXFxcIiRmaWxlXFxcIlxcbitcXHR3cml0ZV9hdF9vZmZzZXQgXFxcIiRmaWxlXFxcIiBcXFwiJHZhbFxcXCIgMSAxIDFcXG4rXFx0YXNzZXJ0X2NvbnRlbnQgXFxcIiRmaWxlXFxcIiBcXFwiJHZhbFxcXCIgfHwgc3RhdHVzPTFcXG4rXFxuK1xcdHByaW50ZiAnJXMnIFxcXCIkYmFzZWxpbmVcXFwiIFxcdTAwM2UgXFxcIiRmaWxlXFxcIlxcbitcXHR3cml0ZV9hdF9vZmZzZXQgXFxcIiRmaWxlXFxcIiBcXFwiJHZhbFxcXCIgMjAgMlxcbitcXHRhc3NlcnRfY29udGVudF9yZWplY3RlZCBcXFwiJGZpbGVcXFwiIFxcXCIkdmFsXFxcIiB8fCBzdGF0dXM9MVxcbitcXG4rXFx0cHJpbnRmICclcycgXFxcIiRiYXNlbGluZVxcXCIgXFx1MDAzZSBcXFwiJGZpbGVcXFwiXFxuK1xcdHdyaXRlX292ZXJsb25nIFxcXCIkZmlsZVxcXCIgNTAgXFxcIiR2YWxcXFwiXFxuK1xcdGFzc2VydF9jb250ZW50X3JlamVjdGVkIFxcXCIkZmlsZVxcXCIgXFxcIiR2YWxcXFwiIHx8IHN0YXR1cz0xXFxuK1xcbitcXHRyZXR1cm4gXFxcIiRzdGF0dXNcXFwiXFxuIH1cXG4gXFxuLXJ1bl93aWRlaW50X3Rlc3RzKClcXG4rIyBOb25lIG9mIHRoZXNlIGZpdCBpbiAzMiBiaXRzLCBzbyB3cml0aW5nIHRoZW0gdG8gYW4gaW50L3VpbnQgc3lzY3RsIG11c3QgZmFpbFxcbithc3NlcnRfd2lkZWludF93cml0ZXNfcmVqZWN0ZWQoKSAgIyBcXHUwMDNjZmlsZVxcdTAwM2UgXFx1MDAzY2Jhc2VsaW5lXFx1MDAzZVxcbiB7XFxuLVxcdCMgc3lzY3RsIGNvbnZlcnNpb24gZnVuY3Rpb25zIHJlY2VpdmUgYSBib29sZWFuIHNpZ24gYW5kIHVsb25nXFxuLVxcdCMgbWFnbml0dWRlOyBoZXJlIHdlIGxpc3QgdGhlIG1hZ25pdHVkZXMgd2Ugd2FudCB0byB0ZXN0IChlYWNoIG9mXFxuLVxcdCMgd2hpY2ggd2lsbCBiZSB0ZXN0ZWQgaW4gYm90aCBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgZm9ybXMpLiAgU2luY2VcXG4tXFx0IyBub25lIG9mIHRoZXNlIHZhbHVlcyBmaXQgaW4gMzIgYml0cywgd3JpdGluZyB0aGVtIHRvIGFuIGludC0gb3JcXG4tXFx0IyB1aW50LXR5cGVkIHN5c2N0bCBzaG91bGQgZmFpbC5cXG4rXFx0bG9jYWwgZmlsZT0kMSBiYXNlbGluZT0kMiBzaWduIG1hZyBzdGF0dXM9MFxcbiBcXHRsb2NhbCBtYWduaXR1ZGVzPShcXG4tXFx0XFx0IyBjb21tb24gYm91bmRhcnktY29uZGl0aW9uIHZhbHVlcyAoemVybywgKzEsIC0xLCBJTlRfTUlOLFxcbi1cXHRcXHQjIGFuZCBJTlRfTUFYIHJlc3BlY3RpdmVseSkgaWYgdHJ1bmNhdGVkIHRvIGxvd2VyIDMyIGJpdHNcXG4tXFx0XFx0IyAocG90ZW50aWFsIGZvciBiZWluZyBmYWxzZWx5IGRlZW1lZCBpbiByYW5nZSlcXG4gXFx0XFx0MHgwMDAwMDAwMTAwMDAwMDAwXFxuIFxcdFxcdDB4MDAwMDAwMDEwMDAwMDAwMVxcbiBcXHRcXHQweDAwMDAwMDAxZmZmZmZmZmZcXG4gXFx0XFx0MHgwMDAwMDAwMTgwMDAwMDAwXFxuIFxcdFxcdDB4MDAwMDAwMDE3ZmZmZmZmZlxcbi1cXG4tXFx0XFx0IyB0aGVzZSBsb29rIGxpa2UgbmVnYXRpdmVzLCBidXQgd2l0aG91dCBhIGxlYWRpbmcgJy0nIGFyZVxcbi1cXHRcXHQjIGFjdHVhbGx5IGxhcmdlIHBvc2l0aXZlcyAoc2hvdWxkIGJlIHJlamVjdGVkIGFzIGFib3ZlXFxuLVxcdFxcdCMgZGVzcGl0ZSBiZWluZyB6ZXJvLysxLy0xL0lOVF9NSU4vSU5UX01BWCBpbiB0aGUgbG93ZXIgMzIpXFxuIFxcdFxcdDB4ZmZmZmZmZmYwMDAwMDAwMFxcbiBcXHRcXHQweGZmZmZmZmZmMDAwMDAwMDFcXG4gXFx0XFx0MHhmZmZmZmZmZmZmZmZmZmZmXFxuQEAgLTM2Nyw3OTMgKzI0NCw1MTUgQEAgcnVuX3dpZGVpbnRfdGVzdHMoKVxcbiBcXG4gXFx0Zm9yIHNpZ24gaW4gJycgJy0nOyBkb1xcbiBcXHRcXHRmb3IgbWFnIGluIFxcXCIke21hZ25pdHVkZXNbQF19XFxcIjsgZG9cXG4tXFx0XFx0XFx0Y2hlY2tfZmFpbHVyZSBcXFwiJHtzaWdufSR7bWFnfVxcXCJcXG4rXFx0XFx0XFx0YXNzZXJ0X25vX3BhcnRpYWxfdXBkYXRlIFxcXCIkZmlsZVxcXCIgXFxcIiRiYXNlbGluZVxcXCIgXFxcIiR7c2lnbn0ke21hZ31cXFwiIHx8IHN0YXR1cz0xXFxuIFxcdFxcdGRvbmVcXG4gXFx0ZG9uZVxcbitcXHRyZXR1cm4gXFxcIiRzdGF0dXNcXFwiXFxuIH1cXG4gXFxuLSMgWW91ciB0ZXN0IG11c3QgYWNjZXB0IGRpZ2l0cyAzIGFuZCA0IHRvIHVzZSB0aGlzXFxuLXJ1bl9saW1pdF9kaWdpdCgpXFxuKyMgQSBzaW5nbGUgd3JpdGUgaXMgY2FwcGVkIGF0IE1BWF9ESUdJVFMgKFBBR0VfU0laRS84KSBieXRlczsgY2hlY2sgdGhhdFxcbisjIGxlYWRpbmcgd2hpdGVzcGFjZSB1cCB0byB0aGF0IGxpbWl0IGlzIGlnbm9yZWQsIGFuZCB0aGF0IFBBR0VfU0laRSBvZlxcbisjIGxlYWRpbmcgd2hpdGVzcGFjZSBwdXNoZXMgdGhlIHZhbHVlIHBhc3QgdGhlIGxpbWl0IGFuZCBmYWlscy5cXG4rYXNzZXJ0X2RpZ2l0X2xpbWl0KCkgICMgXFx1MDAzY2ZpbGVcXHUwMDNlIFxcdTAwM2NiYXNlbGluZVxcdTAwM2VcXG4ge1xcbi1cXHRlY2hvIC1uIFxcXCJDaGVja2luZyBpZ25vcmluZyBzcGFjZXMgdXAgdG8gUEFHRV9TSVpFIHdvcmtzIG9uIHdyaXRlIC4uLiBcXFwiXFxuLVxcdHJlc2V0X3ZhbHNcXG4tXFxuLVxcdExJTUlUPSQoKE1BWF9ESUdJVFMgLTEpKVxcbi1cXHRURVNUX1NUUj1cXFwiM1xcXCJcXG4tXFx0KHBlcmwgLWUgJ3ByaW50IFxcXCIgXFxcIiB4ICckTElNSVQnOyc7IGVjaG8gXFxcIiR7VEVTVF9TVFJ9XFxcIikgfCBcXFxcXFxuLVxcdFxcdGRkIG9mPVxcXCIke1RBUkdFVH1cXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuLVxcbi1cXHRpZiAhIHZlcmlmeSBcXFwiJHtUQVJHRVR9XFxcIjsgdGhlblxcbi1cXHRcXHRlY2hvIFxcXCJGQUlMXFxcIiBcXHUwMDNlXFx1MDAyNjJcXG4tXFx0XFx0cmM9MVxcbi1cXHRlbHNlXFxuLVxcdFxcdGVjaG8gXFxcIk9LXFxcIlxcbi1cXHRmaVxcbi1cXHR0ZXN0X3JjXFxuK1xcdGxvY2FsIGZpbGU9JDEgYmFzZWxpbmU9JDIgc3RhdHVzPTBcXG4gXFxuLVxcdGVjaG8gLW4gXFxcIkNoZWNraW5nIHBhc3NpbmcgUEFHRV9TSVpFIG9mIHNwYWNlcyBmYWlscyBvbiB3cml0ZSAuLi4gXFxcIlxcbi1cXHRyZXNldF92YWxzXFxuK1xcdHByaW50ZiAnJXMnIFxcXCIkYmFzZWxpbmVcXFwiIFxcdTAwM2UgXFxcIiRmaWxlXFxcIlxcbitcXHR3cml0ZV9wYWRkZWRfZGlnaXRzIFxcXCIkZmlsZVxcXCIgXFxcIiQoKE1BWF9ESUdJVFMgLSAxKSlcXFwiIFxcXCIzXFxcIlxcbitcXHRhc3NlcnRfY29udGVudCBcXFwiJGZpbGVcXFwiIFxcXCIzXFxcIiB8fCBzdGF0dXM9MVxcbiBcXG4tXFx0TElNSVQ9JCgoTUFYX0RJR0lUUykpXFxuLVxcdFRFU1RfU1RSPVxcXCI0XFxcIlxcbi1cXHQocGVybCAtZSAncHJpbnQgXFxcIiBcXFwiIHggJyRMSU1JVCc7JzsgZWNobyBcXFwiJHtURVNUX1NUUn1cXFwiKSB8IFxcXFxcXG4tXFx0XFx0ZGQgb2Y9XFxcIiR7VEFSR0VUfVxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rXFx0cHJpbnRmICclcycgXFxcIiRiYXNlbGluZVxcXCIgXFx1MDAzZSBcXFwiJGZpbGVcXFwiXFxuK1xcdHdyaXRlX3BhZGRlZF9kaWdpdHMgXFxcIiRmaWxlXFxcIiBcXFwiJE1BWF9ESUdJVFNcXFwiIFxcXCI0XFxcIlxcbitcXHRhc3NlcnRfY29udGVudF9yZWplY3RlZCBcXFwiJGZpbGVcXFwiIFxcXCI0XFxcIiB8fCBzdGF0dXM9MVxcbiBcXG4tXFx0aWYgdmVyaWZ5IFxcXCIke1RBUkdFVH1cXFwiOyB0aGVuXFxuLVxcdFxcdGVjaG8gXFxcIkZBSUxcXFwiIFxcdTAwM2VcXHUwMDI2Mlxcbi1cXHRcXHRyYz0xXFxuLVxcdGVsc2VcXG4tXFx0XFx0ZWNobyBcXFwiT0tcXFwiXFxuLVxcdGZpXFxuLVxcdHRlc3RfcmNcXG4rXFx0cmV0dXJuIFxcXCIkc3RhdHVzXFxcIlxcbiB9XFxuIFxcbi0jIFlvdSBhcmUgdXNpbmcgYW4gaW50XFxuLXJ1bl9saW1pdF9kaWdpdF9pbnQoKVxcbisjIHByb2NfZG9pbnR2ZWMoKS1zcGVjaWZpYyByYW5nZSBjaGVja3M6IElOVF9NQVggbXVzdCBiZSBhY2NlcHRlZCwgSU5UX01BWCsxXFxuKyMgbXVzdCBiZSByZWplY3RlZCwgYW5kIG5lZ2F0aXZlIHZhbHVlcyBtdXN0IGJlIGFjY2VwdGVkLlxcbithc3NlcnRfaW50X3JhbmdlKCkgICMgXFx1MDAzY2ZpbGVcXHUwMDNlIFxcdTAwM2NiYXNlbGluZVxcdTAwM2VcXG4ge1xcbi1cXHRlY2hvIC1uIFxcXCJUZXN0aW5nIElOVF9NQVggd29ya3MgLi4uIFxcXCJcXG4tXFx0cmVzZXRfdmFsc1xcbi1cXHRURVNUX1NUUj1cXFwiJElOVF9NQVhcXFwiXFxuLVxcdGVjaG8gLW4gJFRFU1RfU1RSIFxcdTAwM2UgJFRBUkdFVFxcbi1cXG4tXFx0aWYgISB2ZXJpZnkgXFxcIiR7VEFSR0VUfVxcXCI7IHRoZW5cXG4tXFx0XFx0ZWNobyBcXFwiRkFJTFxcXCIgXFx1MDAzZVxcdTAwMjYyXFxuLVxcdFxcdHJjPTFcXG4tXFx0ZWxzZVxcbi1cXHRcXHRlY2hvIFxcXCJPS1xcXCJcXG4tXFx0ZmlcXG4tXFx0dGVzdF9yY1xcbitcXHRsb2NhbCBmaWxlPSQxIGJhc2VsaW5lPSQyIHN0YXR1cz0wXFxuIFxcbi1cXHRlY2hvIC1uIFxcXCJUZXN0aW5nIElOVF9NQVggKyAxIHdpbGwgZmFpbCBhcyBleHBlY3RlZCAuLi4gXFxcIlxcbi1cXHRyZXNldF92YWxzXFxuLVxcdGxldCBURVNUX1NUUj0kSU5UX01BWCsxXFxuLVxcdGVjaG8gLW4gJFRFU1RfU1RSIFxcdTAwM2UgJFRBUkdFVCAyXFx1MDAzZSAvZGV2L251bGxcXG4rXFx0cHJpbnRmICclcycgXFxcIiRiYXNlbGluZVxcXCIgXFx1MDAzZSBcXFwiJGZpbGVcXFwiXFxuK1xcdHByaW50ZiAnJXMnIFxcXCIkSU5UX01BWFxcXCIgXFx1MDAzZSBcXFwiJGZpbGVcXFwiXFxuK1xcdGFzc2VydF9jb250ZW50IFxcXCIkZmlsZVxcXCIgXFxcIiRJTlRfTUFYXFxcIiB8fCBzdGF0dXM9MVxcbiBcXG4tXFx0aWYgdmVyaWZ5IFxcXCIke1RBUkdFVH1cXFwiOyB0aGVuXFxuLVxcdFxcdGVjaG8gXFxcIkZBSUxcXFwiIFxcdTAwM2VcXHUwMDI2Mlxcbi1cXHRcXHRyYz0xXFxuLVxcdGVsc2VcXG4tXFx0XFx0ZWNobyBcXFwiT0tcXFwiXFxuLVxcdGZpXFxuLVxcdHRlc3RfcmNcXG4tXFxuLVxcdGVjaG8gLW4gXFxcIlRlc3RpbmcgbmVnYXRpdmUgdmFsdWVzIHdpbGwgd29yayBhcyBleHBlY3RlZCAuLi4gXFxcIlxcbi1cXHRyZXNldF92YWxzXFxuLVxcdFRFU1RfU1RSPVxcXCItM1xcXCJcXG4tXFx0ZWNobyAtbiAkVEVTVF9TVFIgXFx1MDAzZSAkVEFSR0VUIDJcXHUwMDNlIC9kZXYvbnVsbFxcbi1cXHRpZiAhIHZlcmlmeSBcXFwiJHtUQVJHRVR9XFxcIjsgdGhlblxcbi1cXHRcXHRlY2hvIFxcXCJGQUlMXFxcIiBcXHUwMDNlXFx1MDAyNjJcXG4tXFx0XFx0cmM9MVxcbi1cXHRlbHNlXFxuLVxcdFxcdGVjaG8gXFxcIk9LXFxcIlxcbi1cXHRmaVxcbi1cXHR0ZXN0X3JjXFxuLX1cXG4rXFx0YXNzZXJ0X25vX3BhcnRpYWxfdXBkYXRlIFxcXCIkZmlsZVxcXCIgXFxcIiRiYXNlbGluZVxcXCIgXFxcIiQoKElOVF9NQVggKyAxKSlcXFwiIHx8IHN0YXR1cz0xXFxuIFxcbi0jIFlvdSB1c2VkIGFuIGludCBhcnJheVxcbi1ydW5fbGltaXRfZGlnaXRfaW50X2FycmF5KClcXG4te1xcbi1cXHRlY2hvIC1uIFxcXCJUZXN0aW5nIGFycmF5IHdvcmtzIGFzIGV4cGVjdGVkIC4uLiBcXFwiXFxuLVxcdFRFU1RfU1RSPVxcXCI0IDMgMiAxXFxcIlxcbi1cXHRlY2hvIC1uICRURVNUX1NUUiBcXHUwMDNlICRUQVJHRVRcXG4rXFx0cHJpbnRmICclcycgXFxcIiRiYXNlbGluZVxcXCIgXFx1MDAzZSBcXFwiJGZpbGVcXFwiXFxuK1xcdHByaW50ZiAnJXMnIFxcXCItM1xcXCIgXFx1MDAzZSBcXFwiJGZpbGVcXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuK1xcdGFzc2VydF9jb250ZW50IFxcXCIkZmlsZVxcXCIgXFxcIi0zXFxcIiB8fCBzdGF0dXM9MVxcbiBcXG4tXFx0aWYgISB2ZXJpZnlfZGlmZl93IFxcXCIke1RBUkdFVH1cXFwiOyB0aGVuXFxuLVxcdFxcdGVjaG8gXFxcIkZBSUxcXFwiIFxcdTAwM2VcXHUwMDI2Mlxcbi1cXHRcXHRyYz0xXFxuLVxcdGVsc2VcXG4tXFx0XFx0ZWNobyBcXFwiT0tcXFwiXFxuLVxcdGZpXFxuLVxcdHRlc3RfcmNcXG4tXFxuLVxcdGVjaG8gLW4gXFxcIlRlc3Rpbmcgc2tpcHBpbmcgdHJhaWxpbmcgYXJyYXkgZWxlbWVudHMgd29ya3MgLi4uIFxcXCJcXG4tXFx0IyBEbyBub3QgcmVzZXRfdmFscywgY2Fycnkgb24gdGhlIHZhbHVlcyBmcm9tIHRoZSBsYXN0IHRlc3QuXFxuLVxcdCMgSWYgd2Ugb25seSBlY2hvIGluIHR3byBkaWdpdHMgdGhlIGxhc3QgdHdvIGFyZSBsZWZ0IGludGFjdFxcbi1cXHRURVNUX1NUUj1cXFwiMTAwIDEwMVxcXCJcXG4tXFx0ZWNobyAtbiAkVEVTVF9TVFIgXFx1MDAzZSAkVEFSR0VUXFxuLVxcdCMgQWZ0ZXIgd2UgZWNobyBpbiwgdG8gaGVscCBkaWZmIHdlIG5lZWQgdG8gc2V0IG9uIFRFU1RfU1RSIHdoYXRcXG4tXFx0IyB3ZSBleHBlY3QgdGhlIHJlc3VsdCB0byBiZS5cXG4tXFx0VEVTVF9TVFI9XFxcIjEwMCAxMDEgMiAxXFxcIlxcbi1cXG4tXFx0aWYgISB2ZXJpZnlfZGlmZl93IFxcXCIke1RBUkdFVH1cXFwiOyB0aGVuXFxuLVxcdFxcdGVjaG8gXFxcIkZBSUxcXFwiIFxcdTAwM2VcXHUwMDI2Mlxcbi1cXHRcXHRyYz0xXFxuLVxcdGVsc2VcXG4tXFx0XFx0ZWNobyBcXFwiT0tcXFwiXFxuLVxcdGZpXFxuLVxcdHRlc3RfcmNcXG4tXFxuLVxcdGVjaG8gLW4gXFxcIlRlc3RpbmcgUEFHRV9TSVpFIGxpbWl0IG9uIGFycmF5IHdvcmtzIC4uLiBcXFwiXFxuLVxcdCMgRG8gbm90IHJlc2V0X3ZhbHMsIGNhcnJ5IG9uIHRoZSB2YWx1ZXMgZnJvbSB0aGUgbGFzdCB0ZXN0Llxcbi1cXHQjIEV2ZW4gaWYgeW91IHVzZSBhbiBpbnQgYXJyYXksIHlvdSBhcmUgc3RpbGwgcmVzdHJpY3RlZCB0b1xcbi1cXHQjIE1BWF9ESUdJVFMsIHRoaXMgaXMgYSBrbm93biBsaW1pdGF0aW9uLiBUZXN0IGxpbWl0IHdvcmtzLlxcbi1cXHRMSU1JVD0kKChNQVhfRElHSVRTIC0xKSlcXG4tXFx0VEVTVF9TVFI9XFxcIjlcXFwiXFxuLVxcdChwZXJsIC1lICdwcmludCBcXFwiIFxcXCIgeCAnJExJTUlUJzsnOyBlY2hvIFxcXCIke1RFU1RfU1RSfVxcXCIpIHwgXFxcXFxcbi1cXHRcXHRkZCBvZj1cXFwiJHtUQVJHRVR9XFxcIiAyXFx1MDAzZS9kZXYvbnVsbFxcbi1cXG4tXFx0VEVTVF9TVFI9XFxcIjkgMTAxIDIgMVxcXCJcXG4tXFx0aWYgISB2ZXJpZnlfZGlmZl93IFxcXCIke1RBUkdFVH1cXFwiOyB0aGVuXFxuLVxcdFxcdGVjaG8gXFxcIkZBSUxcXFwiIFxcdTAwM2VcXHUwMDI2Mlxcbi1cXHRcXHRyYz0xXFxuLVxcdGVsc2VcXG4tXFx0XFx0ZWNobyBcXFwiT0tcXFwiXFxuLVxcdGZpXFxuLVxcdHRlc3RfcmNcXG4tXFxuLVxcdGVjaG8gLW4gXFxcIlRlc3RpbmcgZXhjZWVkaW5nIFBBR0VfU0laRSBsaW1pdCBmYWlscyBhcyBleHBlY3RlZCAuLi4gXFxcIlxcbi1cXHQjIERvIG5vdCByZXNldF92YWxzLCBjYXJyeSBvbiB0aGUgdmFsdWVzIGZyb20gdGhlIGxhc3QgdGVzdC5cXG4tXFx0IyBOb3cgZ28gb3ZlciBsaW1pdC5cXG4tXFx0TElNSVQ9JCgoTUFYX0RJR0lUUykpXFxuLVxcdFRFU1RfU1RSPVxcXCI3XFxcIlxcbi1cXHQocGVybCAtZSAncHJpbnQgXFxcIiBcXFwiIHggJyRMSU1JVCc7JzsgZWNobyBcXFwiJHtURVNUX1NUUn1cXFwiKSB8IFxcXFxcXG4tXFx0XFx0ZGQgb2Y9XFxcIiR7VEFSR0VUfVxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4tXFxuLVxcdFRFU1RfU1RSPVxcXCI3IDEwMSAyIDFcXFwiXFxuLVxcdGlmIHZlcmlmeV9kaWZmX3cgXFxcIiR7VEFSR0VUfVxcXCI7IHRoZW5cXG4tXFx0XFx0ZWNobyBcXFwiRkFJTFxcXCIgXFx1MDAzZVxcdTAwMjYyXFxuLVxcdFxcdHJjPTFcXG4tXFx0ZWxzZVxcbi1cXHRcXHRlY2hvIFxcXCJPS1xcXCJcXG4tXFx0ZmlcXG4tXFx0dGVzdF9yY1xcbitcXHRyZXR1cm4gXFxcIiRzdGF0dXNcXFwiXFxuIH1cXG4gXFxuLSMgWW91IHVzZWQgYW4gaW50IGFycmF5IGFuZCBvbmUgb2YgdGhlIGVsZW1lbnRzIGlzIG5vdCBhY2NlcHRhYmxlXFxuLXJ1bl9pbnRfYXJyYXlfbm9fcGFydGlhbF91cGRhdGUoKVxcbisjIHByb2NfZG91aW50dmVjKCktc3BlY2lmaWMgcmFuZ2UgY2hlY2tzOiBVSU5UX01BWCBtdXN0IGJlIGFjY2VwdGVkLFxcbisjIFVJTlRfTUFYKzEgbXVzdCBiZSByZWplY3RlZCwgYW5kIG5lZ2F0aXZlIHZhbHVlcyBtdXN0IGJlIHJlamVjdGVkIHRvby5cXG4rYXNzZXJ0X3VpbnRfcmFuZ2UoKSAgIyBcXHUwMDNjZmlsZVxcdTAwM2UgXFx1MDAzY2Jhc2VsaW5lXFx1MDAzZVxcbiB7XFxuLVxcdGVjaG8gLW4gXFxcIlRlc3RpbmcgaW52YWxpZCBhcnJheSBlbGVtZW50IGRvZXMgbm90IHBhcnRpYWxseSB1cGRhdGUgLi4uIFxcXCJcXG4tXFx0IyBFeHBlY3QgZmFpbHVyZSBiZWNhdXNlIG9mIDNyZCBlbGVtZW50IChhYmMpLlxcbi1cXHRpZiAhIHZlcmlmeV9ub19wYXJ0aWFsX3VwZGF0ZSBcXFwiMSAyIDMgNFxcXCIgXFxcIjEwIDIwIGFiYyA0MFxcXCI7IHRoZW5cXG4tXFx0XFx0ZWNobyBcXFwiRkFJTFxcXCIgXFx1MDAzZVxcdTAwMjYyXFxuLVxcdFxcdHJjPTFcXG4tXFx0ZWxzZVxcbi1cXHRcXHRlY2hvIFxcXCJPS1xcXCJcXG4tXFx0ZmlcXG4tXFx0dGVzdF9yY1xcbitcXHRsb2NhbCBmaWxlPSQxIGJhc2VsaW5lPSQyIHN0YXR1cz0wXFxuIFxcbi1cXHRlY2hvIC1uIFxcXCJUZXN0aW5nIG91dCBvZiByYW5nZSBhcnJheSBlbGVtZW50IGRvZXMgbm90IHBhcnRpYWxseSB1cGRhdGUgLi4uIFxcXCJcXG4tXFx0IyBFeHBlY3QgZmFpbHVyZSBiZWNhdXNlIG9mIDNyZCBlbGVtZW50IChncmVhdGVyIHRoYW4gaW50KVxcbi1cXHRpZiAhIHZlcmlmeV9ub19wYXJ0aWFsX3VwZGF0ZSBcXFwiMSAyIDMgNFxcXCIgXFxcIjEwIDIwICQoKElOVF9NQVggKyAxKSkgNDBcXFwiOyB0aGVuXFxuLVxcdFxcdGVjaG8gXFxcIkZBSUxcXFwiIFxcdTAwM2VcXHUwMDI2Mlxcbi1cXHRcXHRyYz0xXFxuLVxcdGVsc2VcXG4tXFx0XFx0ZWNobyBcXFwiT0tcXFwiXFxuLVxcdGZpXFxuLVxcdHRlc3RfcmNcXG4rXFx0cHJpbnRmICclcycgXFxcIiRiYXNlbGluZVxcXCIgXFx1MDAzZSBcXFwiJGZpbGVcXFwiXFxuK1xcdHByaW50ZiAnJXMnIFxcXCIkVUlOVF9NQVhcXFwiIFxcdTAwM2UgXFxcIiRmaWxlXFxcIlxcbitcXHRhc3NlcnRfY29udGVudCBcXFwiJGZpbGVcXFwiIFxcXCIkVUlOVF9NQVhcXFwiIHx8IHN0YXR1cz0xXFxuIFxcbi1cXHRlY2hvIC1uIFxcXCJUZXN0aW5nIGludmFsaWQgZmlyc3QgYXJyYXkgZWxlbWVudCBkb2VzIG5vdCB1cGRhdGUgLi4uIFxcXCJcXG4tXFx0IyBFeHBlY3QgZmFpbHVyZSBvZiAxc3QgZWxlbWVudFxcbi1cXHRpZiAhIHZlcmlmeV9ub19wYXJ0aWFsX3VwZGF0ZSBcXFwiMSAyIDMgNFxcXCIgXFxcImFiYyAyMCAzMCA0MFxcXCI7IHRoZW5cXG4tXFx0XFx0ZWNobyBcXFwiRkFJTFxcXCIgXFx1MDAzZVxcdTAwMjYyXFxuLVxcdFxcdHJjPTFcXG4tXFx0ZWxzZVxcbi1cXHRcXHRlY2hvIFxcXCJPS1xcXCJcXG4tXFx0ZmlcXG4tXFx0dGVzdF9yY1xcbitcXHRhc3NlcnRfbm9fcGFydGlhbF91cGRhdGUgXFxcIiRmaWxlXFxcIiBcXFwiJGJhc2VsaW5lXFxcIiBcXFwiJCgoVUlOVF9NQVggKyAxKSlcXFwiIHx8IHN0YXR1cz0xXFxuK1xcdGFzc2VydF9ub19wYXJ0aWFsX3VwZGF0ZSBcXFwiJGZpbGVcXFwiIFxcXCIkYmFzZWxpbmVcXFwiIFxcXCItM1xcXCIgfHwgc3RhdHVzPTFcXG4rXFxuK1xcdHJldHVybiBcXFwiJHN0YXR1c1xcXCJcXG4gfVxcbiBcXG4tIyBZb3UgYXJlIHVzaW5nIGFuIHVuc2lnbmVkIGludFxcbi1ydW5fbGltaXRfZGlnaXRfdWludCgpXFxuK3Rlc3RfaW50X21pbm1heCgpXFxuIHtcXG4tXFx0ZWNobyAtbiBcXFwiVGVzdGluZyBVSU5UX01BWCB3b3JrcyAuLi4gXFxcIlxcbi1cXHRyZXNldF92YWxzXFxuLVxcdFRFU1RfU1RSPVxcXCIkVUlOVF9NQVhcXFwiXFxuLVxcdGVjaG8gLW4gJFRFU1RfU1RSIFxcdTAwM2UgJFRBUkdFVFxcbi1cXG4tXFx0aWYgISB2ZXJpZnkgXFxcIiR7VEFSR0VUfVxcXCI7IHRoZW5cXG4tXFx0XFx0ZWNobyBcXFwiRkFJTFxcXCIgXFx1MDAzZVxcdTAwMjYyXFxuLVxcdFxcdHJjPTFcXG4tXFx0ZWxzZVxcbi1cXHRcXHRlY2hvIFxcXCJPS1xcXCJcXG4tXFx0ZmlcXG4tXFx0dGVzdF9yY1xcbi1cXG4tXFx0ZWNobyAtbiBcXFwiVGVzdGluZyBVSU5UX01BWCArIDEgd2lsbCBmYWlsIGFzIGV4cGVjdGVkIC4uLiBcXFwiXFxuLVxcdHJlc2V0X3ZhbHNcXG4tXFx0VEVTVF9TVFI9JCgoJFVJTlRfTUFYKzEpKVxcbi1cXHRlY2hvIC1uICRURVNUX1NUUiBcXHUwMDNlICRUQVJHRVQgMlxcdTAwM2UgL2Rldi9udWxsXFxuK1xcdGxvY2FsIHQ9XFxcIiR7U1lTQ1RMfS9pbnRfMDAwMVxcXCJcXG4rXFx0bG9jYWwgYmFzZWxpbmU9XFxcIjYwXFxcIiB2YWw9XFxcIjYxXFxcIlxcbiBcXG4tXFx0aWYgdmVyaWZ5IFxcXCIke1RBUkdFVH1cXFwiOyB0aGVuXFxuLVxcdFxcdGVjaG8gXFxcIkZBSUxcXFwiIFxcdTAwM2VcXHUwMDI2Mlxcbi1cXHRcXHRyYz0xXFxuLVxcdGVsc2VcXG4tXFx0XFx0ZWNobyBcXFwiT0tcXFwiXFxuLVxcdGZpXFxuLVxcdHRlc3RfcmNcXG4rXFx0W1sgLWYgXFxcIiR0XFxcIiBdXSB8fCB7IFJFVD0kS1NGVF9TS0lQOyByZXR1cm47IH1cXG4gXFxuLVxcdGVjaG8gLW4gXFxcIlRlc3RpbmcgbmVnYXRpdmUgdmFsdWVzIHdpbGwgbm90IHdvcmsgYXMgZXhwZWN0ZWQgLi4uIFxcXCJcXG4tXFx0cmVzZXRfdmFsc1xcbi1cXHRURVNUX1NUUj1cXFwiLTNcXFwiXFxuLVxcdGVjaG8gLW4gJFRFU1RfU1RSIFxcdTAwM2UgJFRBUkdFVCAyXFx1MDAzZSAvZGV2L251bGxcXG4tXFxuLVxcdGlmIHZlcmlmeSBcXFwiJHtUQVJHRVR9XFxcIjsgdGhlblxcbi1cXHRcXHRlY2hvIFxcXCJGQUlMXFxcIiBcXHUwMDNlXFx1MDAyNjJcXG4tXFx0XFx0cmM9MVxcbi1cXHRlbHNlXFxuLVxcdFxcdGVjaG8gXFxcIk9LXFxcIlxcbi1cXHRmaVxcbi1cXHR0ZXN0X3JjXFxuK1xcdGFzc2VydF93cml0ZV9wYXR0ZXJucyBcXFwiJHRcXFwiIFxcXCIkYmFzZWxpbmVcXFwiIFxcXCIkdmFsXFxcIiB8fCBSRVQ9JEtTRlRfRkFJTFxcbitcXHRhc3NlcnRfd2lkZWludF93cml0ZXNfcmVqZWN0ZWQgXFxcIiR0XFxcIiBcXFwiJGJhc2VsaW5lXFxcIiB8fCBSRVQ9JEtTRlRfRkFJTFxcbitcXHRhc3NlcnRfZGlnaXRfbGltaXQgXFxcIiR0XFxcIiBcXFwiJGJhc2VsaW5lXFxcIiB8fCBSRVQ9JEtTRlRfRkFJTFxcbiB9XFxuIFxcbi1ydW5fc3RyaW5ndGVzdHMoKVxcbit0ZXN0X2ludF9wbGFpbigpXFxuIHtcXG4tXFx0ZWNobyAtbiBcXFwiV3JpdGluZyBlbnRpcmUgc3lzY3RsIGluIHNob3J0IHdyaXRlcyAuLi4gXFxcIlxcbi1cXHRzZXRfb3JpZ1xcbi1cXHRkZCBpZj1cXFwiJHtURVNUX0ZJTEV9XFxcIiBvZj1cXFwiJHtUQVJHRVR9XFxcIiBicz0xIDJcXHUwMDNlL2Rldi9udWxsXFxuLVxcdGlmICEgdmVyaWZ5IFxcXCIke1RBUkdFVH1cXFwiOyB0aGVuXFxuLVxcdFxcdGVjaG8gXFxcIkZBSUxcXFwiIFxcdTAwM2VcXHUwMDI2Mlxcbi1cXHRcXHRyYz0xXFxuLVxcdGVsc2VcXG4tXFx0XFx0ZWNobyBcXFwiT0tcXFwiXFxuLVxcdGZpXFxuK1xcdGxvY2FsIHQ9XFxcIiR7U1lTQ1RMfS9pbnRfMDAwMlxcXCJcXG4rXFx0bG9jYWwgYmFzZWxpbmU9XFxcIjFcXFwiIHZhbD1cXFwiMlxcXCJcXG4gXFxuLVxcdGVjaG8gLW4gXFxcIldyaXRpbmcgbWlkZGxlIG9mIHN5c2N0bCBhZnRlciB1bnN5bmNocm9uaXplZCBzZWVrIC4uLiBcXFwiXFxuLVxcdHNldF90ZXN0XFxuLVxcdGRkIGlmPVxcXCIke1RFU1RfRklMRX1cXFwiIG9mPVxcXCIke1RBUkdFVH1cXFwiIGJzPTEgc2Vlaz0xIDJcXHUwMDNlL2Rldi9udWxsXFxuLVxcdGlmIHZlcmlmeSBcXFwiJHtUQVJHRVR9XFxcIjsgdGhlblxcbi1cXHRcXHRlY2hvIFxcXCJGQUlMXFxcIiBcXHUwMDNlXFx1MDAyNjJcXG4tXFx0XFx0cmM9MVxcbi1cXHRlbHNlXFxuLVxcdFxcdGVjaG8gXFxcIk9LXFxcIlxcbi1cXHRmaVxcbitcXHRbWyAtZiBcXFwiJHRcXFwiIF1dIHx8IHsgUkVUPSRLU0ZUX1NLSVA7IHJldHVybjsgfVxcbiBcXG4tXFx0ZWNobyAtbiBcXFwiQ2hlY2tpbmcgc3lzY3RsIG1heGxlbiBpcyBhdCBsZWFzdCAkTUFYTEVOIC4uLiBcXFwiXFxuLVxcdHNldF9vcmlnXFxuLVxcdHBlcmwgLWUgJ3ByaW50IFxcXCJBXFxcIiB4ICgnXFxcIiR7TUFYTEVOfVxcXCInLTIpLCBcXFwiQlxcXCI7JyB8IFxcXFxcXG4tXFx0XFx0ZGQgb2Y9XFxcIiR7VEFSR0VUfVxcXCIgYnM9XFxcIiR7TUFYTEVOfVxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4tXFx0aWYgISBncmVwIC1xIEIgXFxcIiR7VEFSR0VUfVxcXCI7IHRoZW5cXG4tXFx0XFx0ZWNobyBcXFwiRkFJTFxcXCIgXFx1MDAzZVxcdTAwMjYyXFxuLVxcdFxcdHJjPTFcXG4tXFx0ZWxzZVxcbi1cXHRcXHRlY2hvIFxcXCJPS1xcXCJcXG4tXFx0ZmlcXG4tXFxuLVxcdGVjaG8gLW4gXFxcIkNoZWNraW5nIHN5c2N0bCBrZWVwcyBvcmlnaW5hbCBzdHJpbmcgb24gb3ZlcmZsb3cgYXBwZW5kIC4uLiBcXFwiXFxuLVxcdHNldF9vcmlnXFxuLVxcdHBlcmwgLWUgJ3ByaW50IFxcXCJBXFxcIiB4ICgnXFxcIiR7TUFYTEVOfVxcXCInLTEpLCBcXFwiQlxcXCI7JyB8IFxcXFxcXG4tXFx0XFx0ZGQgb2Y9XFxcIiR7VEFSR0VUfVxcXCIgYnM9JCgoIE1BWExFTiAtIDEgKSkgMlxcdTAwM2UvZGV2L251bGxcXG4tXFx0aWYgZ3JlcCAtcSBCIFxcXCIke1RBUkdFVH1cXFwiOyB0aGVuXFxuLVxcdFxcdGVjaG8gXFxcIkZBSUxcXFwiIFxcdTAwM2VcXHUwMDI2Mlxcbi1cXHRcXHRyYz0xXFxuLVxcdGVsc2VcXG4tXFx0XFx0ZWNobyBcXFwiT0tcXFwiXFxuLVxcdGZpXFxuLVxcbi1cXHRlY2hvIC1uIFxcXCJDaGVja2luZyBzeXNjdGwgc3RheXMgTlVMTCB0ZXJtaW5hdGVkIG9uIHdyaXRlIC4uLiBcXFwiXFxuLVxcdHNldF9vcmlnXFxuLVxcdHBlcmwgLWUgJ3ByaW50IFxcXCJBXFxcIiB4ICgnXFxcIiR7TUFYTEVOfVxcXCInLTEpLCBcXFwiQlxcXCI7JyB8IFxcXFxcXG4tXFx0XFx0ZGQgb2Y9XFxcIiR7VEFSR0VUfVxcXCIgYnM9XFxcIiR7TUFYTEVOfVxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4tXFx0aWYgZ3JlcCAtcSBCIFxcXCIke1RBUkdFVH1cXFwiOyB0aGVuXFxuLVxcdFxcdGVjaG8gXFxcIkZBSUxcXFwiIFxcdTAwM2VcXHUwMDI2Mlxcbi1cXHRcXHRyYz0xXFxuLVxcdGVsc2VcXG4tXFx0XFx0ZWNobyBcXFwiT0tcXFwiXFxuLVxcdGZpXFxuLVxcbi1cXHRlY2hvIC1uIFxcXCJDaGVja2luZyBzeXNjdGwgc3RheXMgTlVMTCB0ZXJtaW5hdGVkIG9uIG92ZXJ3cml0ZSAuLi4gXFxcIlxcbi1cXHRzZXRfb3JpZ1xcbi1cXHRwZXJsIC1lICdwcmludCBcXFwiQVxcXCIgeCAoJ1xcXCIke01BWExFTn1cXFwiJy0xKSwgXFxcIkJCXFxcIjsnIHwgXFxcXFxcbi1cXHRcXHRkZCBvZj1cXFwiJHtUQVJHRVR9XFxcIiBicz0kKCggJE1BWExFTiArIDEgKSkgMlxcdTAwM2UvZGV2L251bGxcXG4tXFx0aWYgZ3JlcCAtcSBCIFxcXCIke1RBUkdFVH1cXFwiOyB0aGVuXFxuLVxcdFxcdGVjaG8gXFxcIkZBSUxcXFwiIFxcdTAwM2VcXHUwMDI2Mlxcbi1cXHRcXHRyYz0xXFxuLVxcdGVsc2VcXG4tXFx0XFx0ZWNobyBcXFwiT0tcXFwiXFxuLVxcdGZpXFxuLVxcbi1cXHR0ZXN0X3JjXFxuK1xcdGFzc2VydF93cml0ZV9wYXR0ZXJucyBcXFwiJHRcXFwiIFxcXCIkYmFzZWxpbmVcXFwiIFxcXCIkdmFsXFxcIiB8fCBSRVQ9JEtTRlRfRkFJTFxcbitcXHRhc3NlcnRfd2lkZWludF93cml0ZXNfcmVqZWN0ZWQgXFxcIiR0XFxcIiBcXFwiJGJhc2VsaW5lXFxcIiB8fCBSRVQ9JEtTRlRfRkFJTFxcbitcXHRhc3NlcnRfZGlnaXRfbGltaXQgXFxcIiR0XFxcIiBcXFwiJGJhc2VsaW5lXFxcIiB8fCBSRVQ9JEtTRlRfRkFJTFxcbitcXHRhc3NlcnRfaW50X3JhbmdlIFxcXCIkdFxcXCIgXFxcIiRiYXNlbGluZVxcXCIgfHwgUkVUPSRLU0ZUX0ZBSUxcXG4gfVxcbiBcXG4tdGFyZ2V0X2V4aXN0cygpXFxuK3Rlc3RfdWludF9wbGFpbigpXFxuIHtcXG4tXFx0VEFSR0VUPVxcXCIke1NZU0NUTH0vJDFcXFwiXFxuLVxcdFRFU1RfSUQ9XFxcIiQyXFxcIlxcbitcXHRsb2NhbCB0PVxcXCIke1NZU0NUTH0vdWludF8wMDAxXFxcIlxcbitcXHRsb2NhbCBiYXNlbGluZT1cXFwiMzE0XFxcIiB2YWw9XFxcIjMxNVxcXCJcXG4gXFxuLVxcdGlmIFsgISAtZiAke1RBUkdFVH0gXSA7IHRoZW5cXG4tXFx0XFx0cmV0dXJuIDBcXG4tXFx0ZmlcXG4tXFx0cmV0dXJuIDFcXG4tfVxcbitcXHRbWyAtZiBcXFwiJHRcXFwiIF1dIHx8IHsgUkVUPSRLU0ZUX1NLSVA7IHJldHVybjsgfVxcbiBcXG4tcnVuX2JpdG1hcHRlc3QoKSB7XFxuLVxcdCMgVG90YWwgbGVuZ3RoIG9mIGJpdG1hcHMgc3RyaW5nIHRvIHVzZSwgYSBiaXQgdW5kZXJcXG4tXFx0IyB0aGUgbWF4aW11bSBpbnB1dCBzaXplIG9mIHRoZSB0ZXN0IG5vZGVcXG4tXFx0TEVOR1RIPSQoKFJBTkRPTSAlIDY1MDAwKSlcXG4rXFx0YXNzZXJ0X3dyaXRlX3BhdHRlcm5zIFxcXCIkdFxcXCIgXFxcIiRiYXNlbGluZVxcXCIgXFxcIiR2YWxcXFwiIHx8IFJFVD0kS1NGVF9GQUlMXFxuK1xcdGFzc2VydF93aWRlaW50X3dyaXRlc19yZWplY3RlZCBcXFwiJHRcXFwiIFxcXCIkYmFzZWxpbmVcXFwiIHx8IFJFVD0kS1NGVF9GQUlMXFxuK1xcdGFzc2VydF9kaWdpdF9saW1pdCBcXFwiJHRcXFwiIFxcXCIkYmFzZWxpbmVcXFwiIHx8IFJFVD0kS1NGVF9GQUlMXFxuK1xcdGFzc2VydF91aW50X3JhbmdlIFxcXCIkdFxcXCIgXFxcIiRiYXNlbGluZVxcXCIgfHwgUkVUPSRLU0ZUX0ZBSUxcXG4rfVxcbiBcXG4tXFx0IyBGaXJzdCBiaXQgdG8gc2V0XFxuLVxcdEJJVD0kKChSQU5ET00gJSAxMDI0KSlcXG4rIyBwcm9jX2Rvc3RyaW5nKCktc3BlY2lmaWMgd3JpdGUgcGF0dGVybnNcXG4rYXNzZXJ0X3N0cmluZ193cml0ZV9wYXR0ZXJucygpICAjIFxcdTAwM2NmaWxlXFx1MDAzZSBcXHUwMDNjYmFzZWxpbmVcXHUwMDNlIFxcdTAwM2N2YWxcXHUwMDNlIFxcdTAwM2NtYXhsZW5cXHUwMDNlXFxuK3tcXG4rXFx0bG9jYWwgZmlsZT0kMSBiYXNlbGluZT0kMiB2YWw9JDMgbWF4bGVuPSQ0IHN0YXR1cz0wXFxuIFxcbi1cXHQjIFN0cmluZyBjb250YWluaW5nIG91ciBsaXN0IG9mIGJpdHMgdG8gc2V0XFxuLVxcdFRFU1RfU1RSPSRCSVRcXG4rXFx0cHJpbnRmICclcycgXFxcIiRiYXNlbGluZVxcXCIgXFx1MDAzZSBcXFwiJGZpbGVcXFwiXFxuK1xcdHdyaXRlX2luX2NodW5rcyBcXFwiJGZpbGVcXFwiIFxcXCIkdmFsXFxcIiAxXFxuK1xcdGFzc2VydF9jb250ZW50IFxcXCIkZmlsZVxcXCIgXFxcIiR2YWxcXFwiIHx8IHN0YXR1cz0xXFxuIFxcbi1cXHQjIGJ1aWxkIHVwIHRoZSBzdHJpbmdcXG4tXFx0d2hpbGUgWyBcXFwiJHsjVEVTVF9TVFJ9XFxcIiAtbGUgXFxcIiRMRU5HVEhcXFwiIF07IGRvXFxuLVxcdFxcdCMgTWFrZSBzdXJlIG5leHQgZW50cnkgaXMgZGlzY29udGlndW91cyxcXG4tXFx0XFx0IyBza2lwIGFoZWFkIGF0IGxlYXN0IDJcXG4tXFx0XFx0QklUPSQoKEJJVCArICQoKDIgKyBSQU5ET00gJSAxMCkpKSlcXG4rXFx0cHJpbnRmICclcycgXFxcIiR2YWxcXFwiIFxcdTAwM2UgXFxcIiRmaWxlXFxcIlxcbitcXHR3cml0ZV9hdF9vZmZzZXQgXFxcIiRmaWxlXFxcIiBcXFwiJHZhbFxcXCIgMSAxXFxuK1xcdGFzc2VydF9jb250ZW50X3JlamVjdGVkIFxcXCIkZmlsZVxcXCIgXFxcIiR2YWxcXFwiIHx8IHN0YXR1cz0xXFxuIFxcbi1cXHRcXHQjIEFkZCBuZXcgYml0IHRvIHRoZSBsaXN0XFxuLVxcdFxcdFRFU1RfU1RSPVxcXCIke1RFU1RfU1RSfSwke0JJVH1cXFwiXFxuK1xcdCMgc3lzY3RsIG1heGxlbiBpcyBhdCBsZWFzdCAkbWF4bGVuXFxuK1xcdHByaW50ZiAnJXMnIFxcXCIkYmFzZWxpbmVcXFwiIFxcdTAwM2UgXFxcIiRmaWxlXFxcIlxcbitcXHR3cml0ZV9vdmVybG9uZyBcXFwiJGZpbGVcXFwiIFxcXCIkKChtYXhsZW4gLSAyKSlcXFwiIFxcXCJCXFxcIiBcXFwiJG1heGxlblxcXCJcXG4rXFx0YXNzZXJ0X2dyZXAgXFxcIiRmaWxlXFxcIiBcXFwiQlxcXCIgfHwgc3RhdHVzPTFcXG4gXFxuLVxcdFxcdCMgUmFuZG9tbHkgbWFrZSBpdCBhIHJhbmdlXFxuLVxcdFxcdGlmIFsgXFxcIiQoKFJBTkRPTSAlIDIpKVxcXCIgLWVxIFxcXCIxXFxcIiBdOyB0aGVuXFxuLVxcdFxcdFxcdFJBTkdFX0VORD0kKChCSVQgKyAkKCgxICsgUkFORE9NICUgMTApKSkpXFxuLVxcdFxcdFxcdFRFU1RfU1RSPVxcXCIke1RFU1RfU1RSfS0ke1JBTkdFX0VORH1cXFwiXFxuLVxcdFxcdFxcdEJJVD0kUkFOR0VfRU5EXFxuLVxcdFxcdGZpXFxuLVxcdGRvbmVcXG4rXFx0IyBrZWVwIG9yaWdpbmFsIHN0cmluZyBvbiBvdmVyZmxvdyBhcHBlbmRcXG4rXFx0cHJpbnRmICclcycgXFxcIiRiYXNlbGluZVxcXCIgXFx1MDAzZSBcXFwiJGZpbGVcXFwiXFxuK1xcdHdyaXRlX292ZXJsb25nIFxcXCIkZmlsZVxcXCIgXFxcIiQoKG1heGxlbiAtIDEpKVxcXCIgXFxcIkJcXFwiIFxcXCIkKChtYXhsZW4gLSAxKSlcXFwiXFxuK1xcdGFzc2VydF9ncmVwX2Fic2VudCBcXFwiJGZpbGVcXFwiIFxcXCJCXFxcIiB8fCBzdGF0dXM9MVxcbiBcXG4tXFx0ZWNobyAtbiBcXFwiQ2hlY2tpbmcgYml0bWFwIGhhbmRsZXIgLi4uIFxcXCJcXG4tXFx0VEVTVF9GSUxFPSQobWt0ZW1wKVxcbi1cXHRlY2hvIC1uIFxcXCIkVEVTVF9TVFJcXFwiIFxcdTAwM2UgJFRFU1RfRklMRVxcbitcXHQjIHN5c2N0bCBzdGF5cyBOVUxMIHRlcm1pbmF0ZWQgb24gd3JpdGVcXG4rXFx0cHJpbnRmICclcycgXFxcIiRiYXNlbGluZVxcXCIgXFx1MDAzZSBcXFwiJGZpbGVcXFwiXFxuK1xcdHdyaXRlX292ZXJsb25nIFxcXCIkZmlsZVxcXCIgXFxcIiQoKG1heGxlbiAtIDEpKVxcXCIgXFxcIkJcXFwiIFxcXCIkbWF4bGVuXFxcIlxcbitcXHRhc3NlcnRfZ3JlcF9hYnNlbnQgXFxcIiRmaWxlXFxcIiBcXFwiQlxcXCIgfHwgc3RhdHVzPTFcXG4gXFxuLVxcdGNhdCAkVEVTVF9GSUxFIFxcdTAwM2UgJFRBUkdFVCAyXFx1MDAzZSAvZGV2L251bGxcXG4tXFx0aWYgWyAkPyAtbmUgMCBdOyB0aGVuXFxuLVxcdFxcdGVjaG8gXFxcIkZBSUxcXFwiIFxcdTAwM2VcXHUwMDI2Mlxcbi1cXHRcXHRyYz0xXFxuLVxcdFxcdHRlc3RfcmNcXG4tXFx0ZmlcXG4rXFx0IyBzeXNjdGwgc3RheXMgTlVMTCB0ZXJtaW5hdGVkIG9uIG92ZXJ3cml0ZVxcbitcXHRwcmludGYgJyVzJyBcXFwiJGJhc2VsaW5lXFxcIiBcXHUwMDNlIFxcXCIkZmlsZVxcXCJcXG4rXFx0d3JpdGVfb3ZlcmxvbmcgXFxcIiRmaWxlXFxcIiBcXFwiJCgobWF4bGVuIC0gMSkpXFxcIiBcXFwiQkJcXFwiIFxcXCIkKChtYXhsZW4gKyAxKSlcXFwiXFxuK1xcdGFzc2VydF9ncmVwX2Fic2VudCBcXFwiJGZpbGVcXFwiIFxcXCJCXFxcIiB8fCBzdGF0dXM9MVxcbiBcXG4tXFx0aWYgISB2ZXJpZnlfZGlmZl9wcm9jX2ZpbGUgXFxcIiRUQVJHRVRcXFwiIFxcXCIkVEVTVF9GSUxFXFxcIjsgdGhlblxcbi1cXHRcXHRlY2hvIFxcXCJGQUlMXFxcIiBcXHUwMDNlXFx1MDAyNjJcXG4tXFx0XFx0cmM9MVxcbi1cXHRlbHNlXFxuLVxcdFxcdGVjaG8gXFxcIk9LXFxcIlxcbi1cXHRcXHRyYz0wXFxuLVxcdGZpXFxuLVxcdHRlc3RfcmNcXG4rXFx0cmV0dXJuIFxcXCIkc3RhdHVzXFxcIlxcbiB9XFxuIFxcbi1zeXNjdGxfdGVzdF8wMDAxKClcXG4rdGVzdF9zdHJpbmdfZG9zdHJpbmcoKVxcbiB7XFxuLVxcdFRBUkdFVD1cXFwiJHtTWVNDVEx9LyQoZ2V0X3Rlc3RfdGFyZ2V0IDAwMDEpXFxcIlxcbi1cXHRyZXNldF92YWxzXFxuLVxcdE9SSUc9JChjYXQgXFxcIiR7VEFSR0VUfVxcXCIpXFxuLVxcdFRFU1RfU1RSPSQoKCAkT1JJRyArIDEgKSlcXG4tXFxuLVxcdHJ1bl9udW1lcmljdGVzdHNcXG4tXFx0cnVuX3dpZGVpbnRfdGVzdHNcXG4tXFx0cnVuX2xpbWl0X2RpZ2l0XFxuLX1cXG4rXFx0bG9jYWwgdD1cXFwiJHtTWVNDVEx9L3N0cmluZ18wMDAxXFxcIlxcbitcXHRsb2NhbCBiYXNlbGluZT1cXFwiKG5vbmUpXFxcIiB2YWw9XFxcIlRlc3Rpbmcgc3lzY3RsXFxcIiBtYXhsZW49NjVcXG4gXFxuLXN5c2N0bF90ZXN0XzAwMDIoKVxcbi17XFxuLVxcdFRBUkdFVD1cXFwiJHtTWVNDVEx9LyQoZ2V0X3Rlc3RfdGFyZ2V0IDAwMDIpXFxcIlxcbi1cXHRyZXNldF92YWxzXFxuLVxcdE9SSUc9JChjYXQgXFxcIiR7VEFSR0VUfVxcXCIpXFxuLVxcdFRFU1RfU1RSPVxcXCJUZXN0aW5nIHN5c2N0bFxcXCJcXG4tXFx0IyBPbmx5IHN0cmluZyBzeXNjdGxzIHN1cHBvcnQgc2Vla2luZy9hcHBlbmRpbmcuXFxuLVxcdE1BWExFTj02NVxcbi1cXG4tXFx0cnVuX251bWVyaWN0ZXN0c1xcbi1cXHRydW5fc3RyaW5ndGVzdHNcXG4tfVxcbitcXHRbWyAtZiBcXFwiJHRcXFwiIF1dIHx8IHsgUkVUPSRLU0ZUX1NLSVA7IHJldHVybjsgfVxcbiBcXG4tc3lzY3RsX3Rlc3RfMDAwMygpXFxuLXtcXG4tXFx0VEFSR0VUPVxcXCIke1NZU0NUTH0vJChnZXRfdGVzdF90YXJnZXQgMDAwMylcXFwiXFxuLVxcdHJlc2V0X3ZhbHNcXG4tXFx0T1JJRz0kKGNhdCBcXFwiJHtUQVJHRVR9XFxcIilcXG4tXFx0VEVTVF9TVFI9JCgoICRPUklHICsgMSApKVxcbi1cXG4tXFx0cnVuX251bWVyaWN0ZXN0c1xcbi1cXHRydW5fd2lkZWludF90ZXN0c1xcbi1cXHRydW5fbGltaXRfZGlnaXRcXG4tXFx0cnVuX2xpbWl0X2RpZ2l0X2ludFxcbitcXHRhc3NlcnRfd3JpdGVfcGF0dGVybnMgXFxcIiR0XFxcIiBcXFwiJGJhc2VsaW5lXFxcIiBcXFwiJHZhbFxcXCIgfHwgUkVUPSRLU0ZUX0ZBSUxcXG4rXFx0YXNzZXJ0X3N0cmluZ193cml0ZV9wYXR0ZXJucyBcXFwiJHRcXFwiIFxcXCIkYmFzZWxpbmVcXFwiIFxcXCIkdmFsXFxcIiBcXFwiJG1heGxlblxcXCIgfHwgUkVUPSRLU0ZUX0ZBSUxcXG4gfVxcbiBcXG4tc3lzY3RsX3Rlc3RfMDAwNCgpXFxuKyMgRW1pdCBhIHJhbmRvbSBzeXNjdGwgYml0IG1hcFxcbityYW5kb21fYml0bWFwX3NwZWMoKVxcbiB7XFxuLVxcdFRBUkdFVD1cXFwiJHtTWVNDVEx9LyQoZ2V0X3Rlc3RfdGFyZ2V0IDAwMDQpXFxcIlxcbi1cXHRyZXNldF92YWxzXFxuLVxcdE9SSUc9JChjYXQgXFxcIiR7VEFSR0VUfVxcXCIpXFxuLVxcdFRFU1RfU1RSPSQoKCAkT1JJRyArIDEgKSlcXG4tXFxuLVxcdHJ1bl9udW1lcmljdGVzdHNcXG4tXFx0cnVuX3dpZGVpbnRfdGVzdHNcXG4tXFx0cnVuX2xpbWl0X2RpZ2l0XFxuLVxcdHJ1bl9saW1pdF9kaWdpdF91aW50XFxuLX1cXG4rXFx0bG9jYWwgbGVuZ3RoPSQoKFJBTkRPTSAlIDY1MDAwKSlcXG4rXFx0bG9jYWwgYml0PSQoKFJBTkRPTSAlIDEwMjQpKVxcbitcXHRsb2NhbCBzcGVjPSRiaXRcXG4rXFx0bG9jYWwgcmFuZ2VfZW5kXFxuIFxcbi1zeXNjdGxfdGVzdF8wMDA1KClcXG4te1xcbi1cXHRUQVJHRVQ9XFxcIiR7U1lTQ1RMfS8kKGdldF90ZXN0X3RhcmdldCAwMDA1KVxcXCJcXG4tXFx0cmVzZXRfdmFsc1xcbi1cXHRPUklHPSQoY2F0IFxcXCIke1RBUkdFVH1cXFwiKVxcbitcXHR3aGlsZSBbIFxcXCIkeyNzcGVjfVxcXCIgLWxlIFxcXCIkbGVuZ3RoXFxcIiBdOyBkb1xcbitcXHRcXHQjIEtlZXAgZW50cmllcyBkaXNjb250aWd1b3VzLCBza2lwIGFoZWFkIGJ5IGF0IGxlYXN0IDIuXFxuK1xcdFxcdGJpdD0kKChiaXQgKyAyICsgUkFORE9NICUgMTApKVxcbitcXHRcXHRzcGVjPVxcXCIke3NwZWN9LCR7Yml0fVxcXCJcXG4gXFxuLVxcdHJ1bl9saW1pdF9kaWdpdF9pbnRfYXJyYXlcXG4tfVxcbitcXHRcXHRpZiBbIFxcXCIkKChSQU5ET00gJSAyKSlcXFwiIC1lcSAxIF07IHRoZW5cXG4rXFx0XFx0XFx0cmFuZ2VfZW5kPSQoKGJpdCArIDEgKyBSQU5ET00gJSAxMCkpXFxuK1xcdFxcdFxcdHNwZWM9XFxcIiR7c3BlY30tJHtyYW5nZV9lbmR9XFxcIlxcbitcXHRcXHRcXHRiaXQ9JHJhbmdlX2VuZFxcbitcXHRcXHRmaVxcbitcXHRkb25lXFxuIFxcbi1zeXNjdGxfdGVzdF8wMDA2KClcXG4te1xcbi1cXHRUQVJHRVQ9XFxcIiR7U1lTQ1RMfS8kKGdldF90ZXN0X3RhcmdldCAwMDA2KVxcXCJcXG4tXFx0cmVzZXRfdmFsc1xcbi1cXHRPUklHPVxcXCJcXFwiXFxuLVxcdHJ1bl9iaXRtYXB0ZXN0XFxuK1xcdGVjaG8gLW4gXFxcIiRzcGVjXFxcIlxcbiB9XFxuIFxcbi1zeXNjdGxfdGVzdF8wMDA3KClcXG4rIyBEbyAqbm90KiBwcmVmaXggd2l0aCBcXFwidGVzdF9cXFwiLiBBbGwgYXV0b2dlbmVyYXRlIGJpdG1hcCB0ZXN0cyBjYWxsIHRoaXMgaGVscGVyXFxuK2JpdG1hcF9yYW5nZV9jaGVja19vbmNlKCkgICMgXFx1MDAzY2l0ZXJcXHUwMDNlXFxuIHtcXG4tXFx0VEFSR0VUPVxcXCIke1NZU0NUTH0vJChnZXRfdGVzdF90YXJnZXQgMDAwNylcXFwiXFxuLVxcdGVjaG8gLW4gXFxcIlRlc3RpbmcgaWYgJFRBUkdFVCBpcyBzZXQgdG8gMSAuLi4gXFxcIlxcbitcXHRsb2NhbCB0PVxcXCIke1NZU0NUTH0vYml0bWFwXzAwMDFcXFwiXFxuK1xcdGxvY2FsIHNwZWNfZmlsZSBzZWVkXFxuIFxcbi1cXHRpZiBbICEgLWYgJFRBUkdFVCBdOyB0aGVuXFxuLVxcdFxcdGVjaG8gLWUgXFxcIlNLSVBQSU5HXFxcXG4kVEFSR0VUIGlzIG5vdCBwcmVzZW50XFxcIlxcbi1cXHRcXHRyZXR1cm4gJGtzZnRfc2tpcFxcbi1cXHRmaVxcbi1cXG4tXFx0aWYgWyAtZCAkRElSIF07IHRoZW5cXG4tXFx0XFx0ZWNobyAtZSBcXFwiU0tJUFBJTkdcXFxcblRlc3Qgb25seSBwb3NzaWJsZSBpZiBzeXNjdGxfdGVzdCBpcyBidWlsdC1pbiwgbm90IG1vZHVsZTpcXFwiXFxuLVxcdFxcdGNhdCAkVEVTVF9ESVIvY29uZmlnIFxcdTAwM2VcXHUwMDI2Mlxcbi1cXHRcXHRyZXR1cm4gJGtzZnRfc2tpcFxcbi1cXHRmaVxcbitcXHRbWyAtZiBcXFwiJHRcXFwiIF1dIHx8IHsgUkVUPSRLU0ZUX1NLSVA7IHJldHVybjsgfVxcbiBcXG4tXFx0T1JJRz0kKGNhdCBcXFwiJHtUQVJHRVR9XFxcIilcXG4rXFx0c2VlZD0kKChCSVRNQVBfU0VFRCArICQxKSlcXG4rXFx0UkFORE9NPSRzZWVkXFxuIFxcbi1cXHRpZiBbIHgkT1JJRyA9IFxcXCJ4MVxcXCIgXTsgdGhlblxcbi1cXHRcXHRlY2hvIFxcXCJPS1xcXCJcXG4tXFx0XFx0cmV0dXJuIDBcXG4tXFx0ZmlcXG4rXFx0c3BlY19maWxlPSQobWt0ZW1wKVxcbitcXHRyYW5kb21fYml0bWFwX3NwZWMgXFx1MDAzZSBcXFwiJHNwZWNfZmlsZVxcXCJcXG4gXFxuLVxcdGlmIFsgISAtZiAvcHJvYy9jbWRsaW5lIF07IHRoZW5cXG4tXFx0XFx0ZWNobyAtZSBcXFwiU0tJUFBJTkdcXFxcblRoZXJlIGlzIG5vIC9wcm9jL2NtZGxpbmUgdG8gY2hlY2sgZm9yIHBhcmFtZXRlclxcXCJcXG4tXFx0XFx0cmV0dXJuICRrc2Z0X3NraXBcXG4rXFx0aWYgISBjYXQgXFxcIiRzcGVjX2ZpbGVcXFwiIFxcdTAwM2UgXFxcIiR0XFxcIiAyXFx1MDAzZS9kZXYvbnVsbDsgdGhlblxcbitcXHRcXHRrdGFwX3ByaW50X21zZyBcXFwiJHQ6IHdyaXRlIG9mIHJhbmRvbSBiaXRtYXAgc3BlYyByZWplY3RlZCAoc2VlZCAkc2VlZClcXFwiXFxuK1xcdFxcdFJFVD0kS1NGVF9GQUlMXFxuK1xcdGVsaWYgISBhc3NlcnRfZGlmZl9wcm9jX2ZpbGUgXFxcIiR0XFxcIiBcXFwiJHNwZWNfZmlsZVxcXCI7IHRoZW5cXG4rXFx0XFx0a3RhcF9wcmludF9tc2cgXFxcIiR0OiByZWFkYmFjayBtaXNtYXRjaCAoc2VlZCAkc2VlZClcXFwiXFxuK1xcdFxcdFJFVD0kS1NGVF9GQUlMXFxuIFxcdGZpXFxuIFxcbi1cXHRGT1VORD0kKGdyZXAgLWMgXFxcInN5c2N0bFsuL11kZWJ1Z1suL110ZXN0X3N5c2N0bFsuL11ib290X2ludD0xXFxcIiAvcHJvYy9jbWRsaW5lKVxcbi1cXHRpZiBbICRGT1VORCA9IFxcXCIxXFxcIiBdOyB0aGVuXFxuLVxcdFxcdGVjaG8gLWUgXFxcIkZBSUxcXFxcbktlcm5lbCBwYXJhbSBmb3VuZCBidXQgJFRBUkdFVCBpcyBub3QgMS5cXFwiIFxcdTAwM2VcXHUwMDI2Mlxcbi1cXHRcXHRyYz0xXFxuLVxcdFxcdHRlc3RfcmNcXG4tXFx0ZmlcXG4tXFxuLVxcdGVjaG8gLWUgXFxcIlNLSVBQSU5HXFxcXG5FeHBlY3RlZCBrZXJuZWwgcGFyYW1ldGVyIG1pc3NpbmcuXFxcIlxcbi1cXHRlY2hvIFxcXCJLZXJuZWwgbXVzdCBiZSBib290ZWQgd2l0aCBwYXJhbWV0ZXI6IHN5c2N0bC5kZWJ1Zy50ZXN0X3N5c2N0bC5ib290X2ludD0xXFxcIlxcbi1cXHRyZXR1cm4gJGtzZnRfc2tpcFxcbitcXHRybSAtZiBcXFwiJHNwZWNfZmlsZVxcXCJcXG4gfVxcbiBcXG4tc3lzY3RsX3Rlc3RfMDAwOCgpXFxuK3Rlc3RfdW5yZWdpc3Rlcl9yZW1vdmVzX2RpcigpXFxuIHtcXG4tXFx0VEFSR0VUPVxcXCIke1NZU0NUTH0vJChnZXRfdGVzdF90YXJnZXQgMDAwOClcXFwiXFxuLVxcdGVjaG8gLW4gXFxcIlRlc3RpbmcgaWYgJFRBUkdFVCBpcyBtYXRjaGVkIGluIGtlcm5lbCAuLi4gXFxcIlxcbitcXHRsb2NhbCB0PVxcXCIke1NZU0NUTH0vdW5yZWdpc3Rlcl9lcnJvclxcXCJcXG4gXFxuLVxcdGlmIFsgISAtZiAkVEFSR0VUIF07IHRoZW5cXG4tXFx0XFx0ZWNobyAtZSBcXFwiU0tJUFBJTkdcXFxcbiRUQVJHRVQgaXMgbm90IHByZXNlbnRcXFwiXFxuLVxcdFxcdHJldHVybiAka3NmdF9za2lwXFxuK1xcdGlmIFtbIC1kIFxcXCIkdFxcXCIgXV07IHRoZW5cXG4rXFx0XFx0a3RhcF9wcmludF9tc2cgXFxcIiR0OiBkaXJlY3Rvcnkgc3RpbGwgZXhpc3RzLCBleHBlY3RlZCBpdCB0byBiZSB1bnJlZ2lzdGVyZWRcXFwiXFxuK1xcdFxcdFJFVD0kS1NGVF9GQUlMXFxuIFxcdGZpXFxuK31cXG4gXFxuLVxcdE9SSUdfVkFMVUU9JChjYXQgXFxcIiR7VEFSR0VUfVxcXCIpXFxuK3Rlc3RfbW91bnRfcG9pbnRfZXJyb3IoKVxcbit7XFxuK1xcdGxvY2FsIHQ9XFxcIiR7U1lTQ1RMfS9tbnQvbW50X2Vycm9yXFxcIlxcbiBcXG4tXFx0aWYgWyAkT1JJR19WQUxVRSAtbmUgMSBdOyB0aGVuXFxuLVxcdFxcdGVjaG8gXFxcIkZBSUxcXFwiIFxcdTAwM2VcXHUwMDI2Mlxcbi1cXHRcXHRyYz0xXFxuLVxcdFxcdHRlc3RfcmNcXG4rXFx0aWYgW1sgLWQgXFxcIiR0XFxcIiBdXTsgdGhlblxcbitcXHRcXHRrdGFwX3ByaW50X21zZyBcXFwiJHQ6IGRpcmVjdG9yeSB1bmV4cGVjdGVkbHkgY3JlYXRlZFxcXCJcXG4rXFx0XFx0UkVUPSRLU0ZUX0ZBSUxcXG4gXFx0ZmlcXG4tXFxuLVxcdGVjaG8gXFxcIk9LXFxcIlxcbi1cXHRyZXR1cm4gMFxcbiB9XFxuIFxcbi1zeXNjdGxfdGVzdF8wMDA5KClcXG4rdGVzdF9lbXB0eV9kaXJfcmVnaXN0cmF0aW9uKClcXG4ge1xcbi1cXHRUQVJHRVQ9XFxcIiR7U1lTQ1RMfS8kKGdldF90ZXN0X3RhcmdldCAwMDA5KVxcXCJcXG4tXFx0ZWNobyAtbiBcXFwiVGVzdGluZyBpZiAkVEFSR0VUIHVucmVnaXN0ZXJlZCBjb3JyZWN0bHkgLi4uIFxcXCJcXG4tXFx0aWYgWyAtZCAkVEFSR0VUIF07IHRoZW5cXG4tXFx0XFx0ZWNobyBcXFwiRkFJTFxcXCIgXFx1MDAzZVxcdTAwMjYyXFxuLVxcdFxcdHJjPTFcXG4tXFx0XFx0dGVzdF9yY1xcbi1cXHRmaVxcbitcXHRsb2NhbCB0PVxcXCIke1NZU0NUTH0vZW1wdHlfYWRkXFxcIlxcbiBcXG4tXFx0ZWNobyBcXFwiT0tcXFwiXFxuLVxcdHJldHVybiAwXFxuK1xcdGlmIFtbICEgLWQgXFxcIiR0XFxcIiBdXTsgdGhlblxcbitcXHRcXHRrdGFwX3ByaW50X21zZyBcXFwiJHQ6IGRpcmVjdG9yeSB3YXMgbm90IGNyZWF0ZWRcXFwiXFxuK1xcdFxcdFJFVD0kS1NGVF9GQUlMXFxuK1xcdFxcdHJldHVyblxcbitcXHRmaVxcbitcXHRpZiBbWyAhIC1kIFxcXCIkdC9lbXB0eVxcXCIgXV07IHRoZW5cXG4rXFx0XFx0a3RhcF9wcmludF9tc2cgXFxcIiR0L2VtcHR5OiBkaXJlY3Rvcnkgd2FzIG5vdCBjcmVhdGVkXFxcIlxcbitcXHRcXHRSRVQ9JEtTRlRfRkFJTFxcbitcXHRmaVxcbiB9XFxuIFxcbi1zeXNjdGxfdGVzdF8wMDEwKClcXG4rdGVzdF91OF9yYW5nZV9jaGVjaygpXFxuIHtcXG4tXFx0VEFSR0VUPVxcXCIke1NZU0NUTH0vJChnZXRfdGVzdF90YXJnZXQgMDAxMClcXFwiXFxuLVxcdGVjaG8gLW4gXFxcIlRlc3RpbmcgdGhhdCAkVEFSR0VUIHdhcyBub3QgY3JlYXRlZCAuLi4gXFxcIlxcbi1cXHRpZiBbIC1kICRUQVJHRVQgXTsgdGhlblxcbi1cXHRcXHRlY2hvIFxcXCJGQUlMXFxcIiBcXHUwMDNlXFx1MDAyNjJcXG4tXFx0XFx0cmM9MVxcbi1cXHRcXHR0ZXN0X3JjXFxuK1xcdGxvY2FsIHQ9XFxcIiR7U1lTQ1RMfS91OF92YWxpZFxcXCJcXG4rXFxuK1xcdGlmIFtbICEgLWYgXFxcIiR0XFxcIiBdXTsgdGhlblxcbitcXHRcXHRrdGFwX3ByaW50X21zZyBcXFwiJHQ6IGZpbGUgd2FzIG5vdCBjcmVhdGVkXFxcIlxcbitcXHRcXHRSRVQ9JEtTRlRfRkFJTFxcbitcXHRcXHRyZXR1cm5cXG4gXFx0ZmlcXG4gXFxuLVxcdGVjaG8gXFxcIk9LXFxcIlxcbi1cXHRyZXR1cm4gMFxcbitcXHRhc3NlcnRfZG1lc2dfY291bnQgXFxcInU4X292ZXIgcmFuZ2UgdmFsdWVcXFwiIDEgfHwgUkVUPSRLU0ZUX0ZBSUxcXG4rXFx0YXNzZXJ0X2RtZXNnX2NvdW50IFxcXCJ1OF91bmRlciByYW5nZSB2YWx1ZVxcXCIgMSB8fCBSRVQ9JEtTRlRfRkFJTFxcbiB9XFxuIFxcbi1zeXNjdGxfdGVzdF8wMDExKClcXG4rdGVzdF9ib290X3BhcmFtX2ludCgpXFxuIHtcXG4tXFx0VEFSR0VUPVxcXCIke1NZU0NUTH0vJChnZXRfdGVzdF90YXJnZXQgMDAxMSlcXFwiXFxuLVxcdGVjaG8gLW4gXFxcIlRlc3RpbmcgZW1wdHkgZGlyIGhhbmRsaW5nIGluICR7VEFSR0VUfSAuLi4gXFxcIlxcbi1cXHRpZiBbICEgLWQgJHtUQVJHRVR9IF07IHRoZW5cXG4tXFx0XFx0ZWNobyAtZSBcXFwiRkFJTFxcXFxuQ291bGQgbm90IGNyZWF0ZSAke1RBUkdFVH1cXFwiIFxcdTAwM2VcXHUwMDI2Mlxcbi1cXHRcXHRyYz0xXFxuLVxcdFxcdHRlc3RfcmNcXG4tXFx0ZmlcXG4rXFx0bG9jYWwgdD1cXFwiJHtTWVNDVEx9L2Jvb3RfaW50XFxcIlxcbitcXHRsb2NhbCBvcmlnIGZvdW5kXFxuIFxcbi1cXHRUQVJHRVQyPVxcXCIke1RBUkdFVH0vZW1wdHlcXFwiXFxuLVxcdGlmIFsgISAtZCAke1RBUkdFVDJ9IF07IHRoZW5cXG4tXFx0XFx0ZWNobyAtZSBcXFwiRkFJTFxcXFxuQ291bGQgbm90IGNyZWF0ZSAke1RBUkdFVDJ9XFxcIiBcXHUwMDNlXFx1MDAyNjJcXG4tXFx0XFx0cmM9MVxcbi1cXHRcXHR0ZXN0X3JjXFxuLVxcdGZpXFxuK1xcdFtbIC1mIFxcXCIkdFxcXCIgXV0gfHwgeyBSRVQ9JEtTRlRfU0tJUDsgcmV0dXJuOyB9XFxuIFxcbi1cXHRlY2hvIFxcXCJPS1xcXCJcXG4tXFx0cmV0dXJuIDBcXG4tfVxcbitcXHQjIEJvb3QgY21kbGluZSBwYXJhbXMgb25seSBhcHBseSB3aGVuIHRlc3Rfc3lzY3RsIGlzIGJ1aWx0IGluLCBub3RcXG4rXFx0IyBsb2FkZWQgYXMgYSBtb2R1bGUuXFxuK1xcdGlmIFtbIC1kIFxcXCIkTU9EVUxFX0RJUlxcXCIgXV07IHRoZW5cXG4rXFx0XFx0a3RhcF9wcmludF9tc2cgXFxcIiR0OiB0ZXN0IG9ubHkgcG9zc2libGUgaWYgdGVzdF9zeXNjdGwgaXMgYnVpbHQtaW4sIG5vdCBhIG1vZHVsZVxcXCJcXG4rXFx0XFx0UkVUPSRLU0ZUX1NLSVBcXG4rXFx0XFx0cmV0dXJuXFxuK1xcdGZpXFxuIFxcbi1zeXNjdGxfdGVzdF8wMDEyKClcXG4te1xcbi1cXHRUQVJHRVQ9XFxcIiR7U1lTQ1RMfS8kKGdldF90ZXN0X3RhcmdldCAwMDEyKVxcXCJcXG4tXFx0ZWNobyAtbiBcXFwiVGVzdGluZyB1OCByYW5nZSBjaGVjayBpbiBzeXNjdGwgdGFibGUgY2hlY2sgaW4gJHtUQVJHRVR9IC4uLiBcXFwiXFxuLVxcdGlmIFsgISAtZiAke1RBUkdFVH0gXTsgdGhlblxcbi1cXHRcXHRlY2hvIC1lIFxcXCJGQUlMXFxcXG5Db3VsZCBub3QgY3JlYXRlICR7VEFSR0VUfVxcXCIgXFx1MDAzZVxcdTAwMjYyXFxuLVxcdFxcdHJjPTFcXG4tXFx0XFx0dGVzdF9yY1xcbitcXHRvcmlnPSQoY2F0IFxcXCIkdFxcXCIpXFxuK1xcdGlmIFtbIFxcXCIkb3JpZ1xcXCIgPT0gXFxcIjFcXFwiIF1dOyB0aGVuXFxuK1xcdFxcdHJldHVyblxcbiBcXHRmaVxcbiBcXG4tXFx0bG9jYWwgdThvdmVyX21zZz0kKGRtZXNnIHwgZ3JlcCBcXFwidThfb3ZlciByYW5nZSB2YWx1ZVxcXCIgfCB3YyAtbClcXG4tXFx0aWYgWyAhICR7dThvdmVyX21zZ30gLWVxIDEgXTsgdGhlblxcbi1cXHRcXHRlY2hvIC1lIFxcXCJGQUlMXFxcXG51OCBvdmVyZmxvdyBub3QgZGV0ZWN0ZWRcXFwiIFxcdTAwM2VcXHUwMDI2Mlxcbi1cXHRcXHRyYz0xXFxuLVxcdFxcdHRlc3RfcmNcXG4rXFx0aWYgW1sgISAtZiAvcHJvYy9jbWRsaW5lIF1dOyB0aGVuXFxuK1xcdFxcdGt0YXBfcHJpbnRfbXNnIFxcXCIkdDogbm8gL3Byb2MvY21kbGluZSB0byBjaGVjayBmb3IgdGhlIGJvb3QgcGFyYW1ldGVyXFxcIlxcbitcXHRcXHRSRVQ9JEtTRlRfU0tJUFxcbitcXHRcXHRyZXR1cm5cXG4gXFx0ZmlcXG4gXFxuLVxcdGxvY2FsIHU4dW5kZXJfbXNnPSQoZG1lc2cgfCBncmVwIFxcXCJ1OF91bmRlciByYW5nZSB2YWx1ZVxcXCIgfCB3YyAtbClcXG4tXFx0aWYgWyAhICR7dTh1bmRlcl9tc2d9IC1lcSAxIF07IHRoZW5cXG4tXFx0XFx0ZWNobyAtZSBcXFwiRkFJTFxcXFxudTggdW5kZXJmbG93IG5vdCBkZXRlY3RlZFxcXCIgXFx1MDAzZVxcdTAwMjYyXFxuLVxcdFxcdHJjPTFcXG4tXFx0XFx0dGVzdF9yY1xcbitcXHRmb3VuZD0kKGdyZXAgLWMgXFxcInN5c2N0bFsuL11kZWJ1Z1suL110ZXN0X3N5c2N0bFsuL11ib290X2ludD0xXFxcIiAvcHJvYy9jbWRsaW5lKVxcbitcXHRpZiBbWyBcXFwiJGZvdW5kXFxcIiA9PSBcXFwiMVxcXCIgXV07IHRoZW5cXG4rXFx0XFx0a3RhcF9wcmludF9tc2cgXFxcIiR0OiBrZXJuZWwgcGFyYW0gZm91bmQgb24gY21kbGluZSBidXQgdmFsdWUgaXMgbm90IDFcXFwiXFxuK1xcdFxcdFJFVD0kS1NGVF9GQUlMXFxuK1xcdFxcdHJldHVyblxcbiBcXHRmaVxcbiBcXG4tXFx0ZWNobyBcXFwiT0tcXFwiXFxuLVxcdHJldHVybiAwXFxuK1xcdGt0YXBfcHJpbnRfbXNnIFxcXCIkdDoga2VybmVsIG5vdCBib290ZWQgd2l0aCBzeXNjdGwuZGVidWcudGVzdF9zeXNjdGwuYm9vdF9pbnQ9MVxcXCJcXG4rXFx0UkVUPSRLU0ZUX1NLSVBcXG4gfVxcbiBcXG4tc3lzY3RsX3Rlc3RfMDAxMygpXFxuK3Rlc3Rfc3lzY3RsX21hY3JvX21hdGNoKClcXG4ge1xcbi1cXHRUQVJHRVQ9XFxcIiR7U1lTQ1RMfS8kKGdldF90ZXN0X3RhcmdldCAwMDEzKVxcXCJcXG4tXFx0cmVzZXRfdmFsc1xcbitcXHRsb2NhbCB0PVxcXCIke1NZU0NUTH0vbWF0Y2hfaW50XFxcIlxcbitcXG4rXFx0W1sgLWYgXFxcIiR0XFxcIiBdXSB8fCB7IFJFVD0kS1NGVF9TS0lQOyByZXR1cm47IH1cXG4gXFxuLVxcdHJ1bl9pbnRfYXJyYXlfbm9fcGFydGlhbF91cGRhdGVcXG4rXFx0YXNzZXJ0X2NvbnRlbnQgXFxcIiR0XFxcIiBcXFwiMVxcXCIgfHwgUkVUPSRLU0ZUX0ZBSUxcXG4gfVxcbiBcXG4tbGlzdF90ZXN0cygpXFxuK3J1bl9vbmUoKVxcbiB7XFxuLVxcdGVjaG8gXFxcIlRlc3QgSUQgbGlzdDpcXFwiXFxuLVxcdGVjaG9cXG4tXFx0ZWNobyBcXFwiVEVTVF9JRCB4IE5VTV9URVNUXFxcIlxcbi1cXHRlY2hvIFxcXCJURVNUX0lEOiAgIFRlc3QgSURcXFwiXFxuLVxcdGVjaG8gXFxcIk5VTV9URVNUUzogUmVjb21tZW5kZWQgbnVtYmVyIG9mIHRpbWVzIHRvIHJ1biB0aGUgdGVzdFxcXCJcXG4tXFx0ZWNob1xcbi1cXHRlY2hvIFxcXCIwMDAxIHggJChnZXRfdGVzdF9jb3VudCAwMDAxKSAtIHRlc3RzIHByb2NfZG9pbnR2ZWNfbWlubWF4KClcXFwiXFxuLVxcdGVjaG8gXFxcIjAwMDIgeCAkKGdldF90ZXN0X2NvdW50IDAwMDIpIC0gdGVzdHMgcHJvY19kb3N0cmluZygpXFxcIlxcbi1cXHRlY2hvIFxcXCIwMDAzIHggJChnZXRfdGVzdF9jb3VudCAwMDAzKSAtIHRlc3RzIHByb2NfZG9pbnR2ZWMoKVxcXCJcXG4tXFx0ZWNobyBcXFwiMDAwNCB4ICQoZ2V0X3Rlc3RfY291bnQgMDAwNCkgLSB0ZXN0cyBwcm9jX2RvdWludHZlYygpXFxcIlxcbi1cXHRlY2hvIFxcXCIwMDA1IHggJChnZXRfdGVzdF9jb3VudCAwMDA1KSAtIHRlc3RzIHByb2NfZG91aW50dmVjKCkgYXJyYXlcXFwiXFxuLVxcdGVjaG8gXFxcIjAwMDYgeCAkKGdldF90ZXN0X2NvdW50IDAwMDYpIC0gdGVzdHMgcHJvY19kb19sYXJnZV9iaXRtYXAoKVxcXCJcXG4tXFx0ZWNobyBcXFwiMDAwNyB4ICQoZ2V0X3Rlc3RfY291bnQgMDAwNykgLSB0ZXN0cyBzZXR0aW5nIHN5c2N0bCBmcm9tIGtlcm5lbCBib290IHBhcmFtXFxcIlxcbi1cXHRlY2hvIFxcXCIwMDA4IHggJChnZXRfdGVzdF9jb3VudCAwMDA4KSAtIHRlc3RzIHN5c2N0bCBtYWNybyB2YWx1ZXMgbWF0Y2hcXFwiXFxuLVxcdGVjaG8gXFxcIjAwMDkgeCAkKGdldF90ZXN0X2NvdW50IDAwMDkpIC0gdGVzdHMgc3lzY3QgdW5yZWdpc3RlclxcXCJcXG4tXFx0ZWNobyBcXFwiMDAxMCB4ICQoZ2V0X3Rlc3RfY291bnQgMDAxMCkgLSB0ZXN0cyBzeXNjdCBtb3VudCBwb2ludFxcXCJcXG4tXFx0ZWNobyBcXFwiMDAxMSB4ICQoZ2V0X3Rlc3RfY291bnQgMDAxMSkgLSB0ZXN0cyBlbXB0eSBkaXJlY3Rvcmllc1xcXCJcXG4tXFx0ZWNobyBcXFwiMDAxMiB4ICQoZ2V0X3Rlc3RfY291bnQgMDAxMikgLSB0ZXN0cyByYW5nZSBjaGVjayBmb3IgdTggcHJvY19oYW5kbGVyXFxcIlxcbi1cXHRlY2hvIFxcXCIwMDEzIHggJChnZXRfdGVzdF9jb3VudCAwMDEzKSAtIHRlc3RzIHBhcnRpYWxseSB1cGRhdGUgdmVjdG9ycyBvbiBlcnJvclxcXCJcXG4rXFx0bG9jYWwgbmFtZT0kMVxcbitcXG4rXFx0IyBTdWJzaGVsbDogYSB0ZXN0IGNhbm5vdCBsZWFrIHZhcnMvY3dkL3RyYXBzIGludG8gdGhlIG5leHQgb25lLCBhbmQgYW5cXG4rXFx0IyBhY2NpZGVudGFsIGBleGl0YCBpbnNpZGUgYSB0ZXN0IGtpbGxzIG9ubHkgaXRzIG93biBzdWJzaGVsbC5cXG4rXFx0KCBSRVQ9JEtTRlRfUEFTUzsgXFxcIiRuYW1lXFxcIjsgZXhpdCAkUkVUIClcXG4rXFxuK1xcdGNhc2UgJD8gaW5cXG4rXFx0XFxcIiRLU0ZUX1BBU1NcXFwiKSBrdGFwX3Rlc3RfcGFzcyBcXFwiJG5hbWVcXFwiIDs7XFxuK1xcdFxcXCIkS1NGVF9TS0lQXFxcIikga3RhcF90ZXN0X3NraXAgXFxcIiRuYW1lXFxcIiA7O1xcbitcXHQqKSAgICAgICAgICBrdGFwX3Rlc3RfZmFpbCBcXFwiJG5hbWVcXFwiIDs7XFxuK1xcdGVzYWNcXG4gfVxcbiBcXG4gdXNhZ2UoKVxcbiB7XFxuLVxcdE5VTV9URVNUUz0kKGdyZXAgLW8gJyAnIFxcdTAwM2NcXHUwMDNjXFx1MDAzY1xcXCIkQUxMX1RFU1RTXFxcIiB8IGdyZXAgLWMgLilcXG4tXFx0bGV0IE5VTV9URVNUUz0kTlVNX1RFU1RTKzFcXG4tXFx0TUFYX1RFU1Q9JChwcmludGYgXFxcIiUwNGRcXFxcblxcXCIgJE5VTV9URVNUUylcXG4tXFx0ZWNobyBcXFwiVXNhZ2U6ICQwIFsgLXQgXFx1MDAzYzQtbnVtYmVyLWRpZ2l0XFx1MDAzZSBdIHwgWyAtdyBcXHUwMDNjNC1udW1iZXItZGlnaXRcXHUwMDNlIF0gfFxcXCJcXG4tXFx0ZWNobyBcXFwiXFx0XFx0IFsgLXMgXFx1MDAzYzQtbnVtYmVyLWRpZ2l0XFx1MDAzZSBdIHwgWyAtYyBcXHUwMDNjNC1udW1iZXItZGlnaXRcXHUwMDNlIFxcdTAwM2N0ZXN0LSBjb3VudFxcdTAwM2VcXFwiXFxuLVxcdGVjaG8gXFxcIiAgICAgICAgICAgWyBhbGwgXSBbIC1oIHwgLS1oZWxwIF0gWyAtbCBdXFxcIlxcbi1cXHRlY2hvIFxcXCJcXFwiXFxuLVxcdGVjaG8gXFxcIlZhbGlkIHRlc3RzOiAwMDAxLSRNQVhfVEVTVFxcXCJcXG4tXFx0ZWNobyBcXFwiXFxcIlxcbi1cXHRlY2hvIFxcXCIgICAgYWxsICAgICBSdW5zIGFsbCB0ZXN0cyAoZGVmYXVsdClcXFwiXFxuLVxcdGVjaG8gXFxcIiAgICAtdCAgICAgIFJ1biB0ZXN0IElEIHRoZSByZWNvbW1lbmRlZCBudW1iZXIgb2YgdGltZXNcXFwiXFxuLVxcdGVjaG8gXFxcIiAgICAtdyAgICAgIFdhdGNoIHRlc3QgSUQgcnVuIHVudGlsIGl0IHJ1bnMgaW50byBhbiBlcnJvclxcXCJcXG4tXFx0ZWNobyBcXFwiICAgIC1jICAgICAgUnVuIHRlc3QgSUQgb25jZVxcXCJcXG4tXFx0ZWNobyBcXFwiICAgIC1zICAgICAgUnVuIHRlc3QgSUQgeCB0ZXN0LWNvdW50IG51bWJlciBvZiB0aW1lc1xcXCJcXG4tXFx0ZWNobyBcXFwiICAgIC1sICAgICAgTGlzdCBhbGwgdGVzdCBJRCBsaXN0XFxcIlxcbi1cXHRlY2hvIFxcXCIgLWh8LS1oZWxwICBIZWxwXFxcIlxcbi1cXHRlY2hvXFxuLVxcdGVjaG8gXFxcIklmIGFuIGVycm9yIGV2ZXJ5IG9jY3VycyBleGVjdXRpb24gd2lsbCBpbW1lZGlhdGVseSB0ZXJtaW5hdGUuXFxcIlxcbi1cXHRlY2hvIFxcXCJJZiB5b3UgYXJlIGFkZGluZyBhIG5ldyB0ZXN0IHRyeSB1c2luZyAtdyBcXHUwMDNjdGVzdC1JRFxcdTAwM2UgZmlyc3QgdG9cXFwiXFxuLVxcdGVjaG8gXFxcIm1ha2Ugc3VyZSB0aGUgdGVzdCBwYXNzZXMgYSBzZXJpZXMgb2YgdGVzdHMuXFxcIlxcbi1cXHRlY2hvXFxuLVxcdGVjaG8gRXhhbXBsZSB1c2VzOlxcbi1cXHRlY2hvXFxuLVxcdGVjaG8gXFxcIiRURVNUX05BTUUuc2ggICAgICAgICAgICAtLSBleGVjdXRlcyBhbGwgdGVzdHNcXFwiXFxuLVxcdGVjaG8gXFxcIiRURVNUX05BTUUuc2ggLXQgMDAwMiAgICAtLSBFeGVjdXRlcyB0ZXN0IElEIDAwMDIgdGhlIHJlY29tbWVuZGVkIG51bWJlciBvZiB0aW1lc1xcXCJcXG4tXFx0ZWNobyBcXFwiJFRFU1RfTkFNRS5zaCAtdyAwMDAyICAgIC0tIFdhdGNoIHRlc3QgSUQgMDAwMiBydW4gdW50aWwgYW4gZXJyb3Igb2NjdXJzXFxcIlxcbi1cXHRlY2hvIFxcXCIkVEVTVF9OQU1FLnNoIC1zIDAwMDIgICAgLS0gUnVuIHRlc3QgSUQgMDAwMiBvbmNlXFxcIlxcbi1cXHRlY2hvIFxcXCIkVEVTVF9OQU1FLnNoIC1jIDAwMDIgMyAgLS0gUnVuIHRlc3QgSUQgMDAwMiB0aHJlZSB0aW1lc1xcXCJcXG4tXFx0ZWNob1xcbi1cXHRsaXN0X3Rlc3RzXFxuLVxcdGV4aXQgMVxcbi19XFxuK1xcdGNhdCBcXHUwMDNjXFx1MDAzYy1FT0ZcXG4rXFx0VXNhZ2U6ICQwIFstciBOXSBbLWxdIFstdCBUXSBbLXMgTl0gWy1ofC0taGVscF1cXG4gXFxuLWZ1bmN0aW9uIHRlc3RfbnVtKClcXG4te1xcbi1cXHRyZT0nXlswLTldKyQnXFxuLVxcdGlmICEgW1sgJDEgPX4gJHJlIF1dOyB0aGVuXFxuLVxcdFxcdHVzYWdlXFxuLVxcdGZpXFxuLX1cXG4tZnVuY3Rpb24gcmVtb3ZlX2xlYWRpbmdfemVyb3MoKVxcbi17XFxuLVxcdGVjaG8gJDEgfCBzZWQgJ3MvXjAqLy8nXFxuLX1cXG4rXFx0UnVucyBldmVyeSBhdXRvLWRpc2NvdmVyZWQgdGVzdF8qIGZ1bmN0aW9uLiBTZXR0aW5nIFNZU0NUTF9URVNUUyB3aWxsXFxuK1xcdG92ZXJyaWRlIHRoZSBkZWZhdWx0IGFuZCBwYXNzaW5nIC10IHdpbGwgb3ZlcnJpZGUgYm90aCBlbnYgdmFyIGFuZCB0aGVcXG4rXFx0ZGVmYXVsdC5cXG4gXFxuLWZ1bmN0aW9uIGdldF90ZXN0X2NvdW50KClcXG4te1xcbi1cXHR0ZXN0X251bSAkMVxcbi1cXHRhd2tfZmllbGQ9JChyZW1vdmVfbGVhZGluZ196ZXJvcyAkMSlcXG4tXFx0VEVTVF9EQVRBPSQoZWNobyAkQUxMX1RFU1RTIHwgYXdrICd7cHJpbnQgJCckYXdrX2ZpZWxkJ30nKVxcbi1cXHRlY2hvICR7VEVTVF9EQVRBfSB8IGF3ayAtRlxcXCI6XFxcIiAne3ByaW50ICQyfSdcXG4tfVxcbitcXHQgICAgLXIgTiAgICAgICAgICByZXBlYXQgc2VsZWN0ZWQgdGVzdHMgTiB0aW1lcyAoZGVmYXVsdCAxKVxcbitcXHQgICAgLWwgICAgICAgICAgICBsaXN0IGRpc2NvdmVyZWQgdGVzdHNcXG4rXFx0ICAgIC10IFQgICAgICAgICAgc3BhY2Ugc2VwYXJhdGVkIHRlc3RzIGxpc3QuIEZvciBleGFtcGxlIFxcXCJ0ZXN0XzEgdGVzdF8yXFxcIlxcbitcXHQgICAgLXMgTiAgICAgICAgICBiYXNlIHNlZWQgZm9yIHRoZSByYW5kb21pemVkIGJpdG1hcCBpdGVyYXRpb25zLlxcbitcXHQgICAgLWgsIC0taGVscCAgICBoZWxwXFxuIFxcbi1mdW5jdGlvbiBnZXRfdGVzdF9lbmFibGVkKClcXG4te1xcbi1cXHR0ZXN0X251bSAkMVxcbi1cXHRhd2tfZmllbGQ9JChyZW1vdmVfbGVhZGluZ196ZXJvcyAkMSlcXG4tXFx0VEVTVF9EQVRBPSQoZWNobyAkQUxMX1RFU1RTIHwgYXdrICd7cHJpbnQgJCckYXdrX2ZpZWxkJ30nKVxcbi1cXHRlY2hvICR7VEVTVF9EQVRBfSB8IGF3ayAtRlxcXCI6XFxcIiAne3ByaW50ICQzfSdcXG4rXFx0ICAgIFNZU0NUTF9URVNUUz0ndGVzdF8xIHRlc3RfMicgJDAgIHJ1biBvbmx5IHRoZSBuYW1lZCB0ZXN0c1xcbitcXHRFT0ZcXG4gfVxcbiBcXG4tZnVuY3Rpb24gZ2V0X3Rlc3RfdGFyZ2V0KClcXG4rbGlzdF90ZXN0cygpXFxuIHtcXG4tXFx0dGVzdF9udW0gJDFcXG4tXFx0YXdrX2ZpZWxkPSQocmVtb3ZlX2xlYWRpbmdfemVyb3MgJDEpXFxuLVxcdFRFU1RfREFUQT0kKGVjaG8gJEFMTF9URVNUUyB8IGF3ayAne3ByaW50ICQnJGF3a19maWVsZCd9JylcXG4tXFx0ZWNobyAke1RFU1RfREFUQX0gfCBhd2sgLUZcXFwiOlxcXCIgJ3twcmludCAkNH0nXFxuK1xcdGVjaG8gXFxcIkRpc2NvdmVyZWQgdGVzdHM6XFxcIlxcbitcXHRsb2NhbCB0XFxuK1xcdGZvciB0IGluICRBTExfVEVTVFM7IGRvXFxuK1xcdFxcdGVjaG8gXFxcIiAgJHRcXFwiXFxuK1xcdGRvbmVcXG4gfVxcbiBcXG4tZnVuY3Rpb24gZ2V0X3Rlc3Rfc2tpcF9ub190YXJnZXQoKVxcbitjaGVja19yZXFzKClcXG4ge1xcbi1cXHR0ZXN0X251bSAkMVxcbi1cXHRhd2tfZmllbGQ9JChyZW1vdmVfbGVhZGluZ196ZXJvcyAkMSlcXG4tXFx0VEVTVF9EQVRBPSQoZWNobyAkQUxMX1RFU1RTIHwgYXdrICd7cHJpbnQgJCckYXdrX2ZpZWxkJ30nKVxcbi1cXHRlY2hvICR7VEVTVF9EQVRBfSB8IGF3ayAtRlxcXCI6XFxcIiAne3ByaW50ICQ1fSdcXG4tfVxcbitcXHRsb2NhbCB1aWRcXG4rXFx0dWlkPSQoaWQgLXUpXFxuIFxcbi1mdW5jdGlvbiBza2lwX3Rlc3QoKVxcbi17XFxuLVxcdFRFU1RfSUQ9JDFcXG4tXFx0VEVTVF9UQVJHRVQ9JDJcXG4tXFx0aWYgdGFyZ2V0X2V4aXN0cyAkVEVTVF9UQVJHRVQgJFRFU1RfSUQ7IHRoZW5cXG4tXFx0XFx0VEVTVF9TS0lQPSQoZ2V0X3Rlc3Rfc2tpcF9ub190YXJnZXQgJFRFU1RfSUQpXFxuLVxcdFxcdGlmIFtbICRURVNUX1NLSVAgLWVxIFxcXCIxXFxcIiBdXTsgdGhlblxcbi1cXHRcXHRcXHRlY2hvIFxcXCJUYXJnZXQgJFRFU1RfVEFSR0VUIGZvciB0ZXN0ICRURVNUX0lEIGRvZXMgbm90IGV4aXN0IC4uLiBTS0lQUElOR1xcXCJcXG4tXFx0XFx0XFx0cmV0dXJuIDBcXG4tXFx0XFx0ZmlcXG4rXFx0aWYgWyBcXFwiJHVpZFxcXCIgLW5lIDAgXTsgdGhlblxcbitcXHRcXHRrdGFwX3NraXBfYWxsIFxcXCJtdXN0IGJlIHJ1biBhcyByb290XFxcIlxcbitcXHRcXHRleGl0IFxcXCIkS1NGVF9TS0lQXFxcIlxcbitcXHRmaVxcbitcXG4rXFx0aWYgISB3aGljaCBnZXRjb25mIFxcdTAwM2UgL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjE7IHRoZW5cXG4rXFx0XFx0a3RhcF9za2lwX2FsbCBcXFwiJDA6IFlvdSBuZWVkIGdldGNvbmYgaW5zdGFsbGVkXFxcIlxcbitcXHRcXHRleGl0IFxcXCIkS1NGVF9TS0lQXFxcIlxcbitcXHRmaVxcbitcXG4rXFx0aWYgISB3aGljaCBkaWZmIFxcdTAwM2UgL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjE7IHRoZW5cXG4rXFx0XFx0a3RhcF9za2lwX2FsbCBcXFwiJDA6IFlvdSBuZWVkIGRpZmYgaW5zdGFsbGVkXFxcIlxcbitcXHRcXHRleGl0IFxcXCIkS1NGVF9TS0lQXFxcIlxcbiBcXHRmaVxcbi1cXHRyZXR1cm4gMVxcbiB9XFxuIFxcbi1mdW5jdGlvbiBydW5fYWxsX3Rlc3RzKClcXG4rY2hlY2tfYXJncygpICAjIFxcdTAwM2NyZXBlYXRcXHUwMDNlIFxcdTAwM2NzZWxlY3RlZFxcdTAwM2UgXFx1MDAzY3NlZWRcXHUwMDNlXFxuIHtcXG4tXFx0Zm9yIGkgaW4gJEFMTF9URVNUUyA7IGRvXFxuLVxcdFxcdFRFU1RfSUQ9JHtpJToqOio6KjoqfVxcbi1cXHRcXHRFTkFCTEVEPSQoZ2V0X3Rlc3RfZW5hYmxlZCAkVEVTVF9JRClcXG4tXFx0XFx0VEVTVF9DT1VOVD0kKGdldF90ZXN0X2NvdW50ICRURVNUX0lEKVxcbi1cXHRcXHRURVNUX1RBUkdFVD0kKGdldF90ZXN0X3RhcmdldCAkVEVTVF9JRClcXG4tXFxuLVxcdFxcdGlmIFtbICRFTkFCTEVEIC1lcSBcXFwiMVxcXCIgXV07IHRoZW5cXG4tXFx0XFx0XFx0dGVzdF9jYXNlICRURVNUX0lEICRURVNUX0NPVU5UICRURVNUX1RBUkdFVFxcbitcXHRsb2NhbCByZXBlYXRfYXJnPVxcXCIkMVxcXCJcXG4rXFx0bG9jYWwgc2VsZWN0ZWRfYXJnPVxcXCIkMlxcXCJcXG4rXFx0bG9jYWwgc2VlZF9hcmc9XFxcIiQzXFxcIlxcbitcXHRsb2NhbCB0XFxuK1xcbitcXHRpZiBbIC16IFxcXCIkc2VsZWN0ZWRfYXJnXFxcIiBdOyB0aGVuXFxuK1xcdFxcdGt0YXBfZXhpdF9mYWlsX21zZyBcXFwibm8gdGVzdCBzZWxlY3RlZFxcXCJcXG4rXFx0ZmlcXG4rXFxuK1xcdGlmICEgW1sgXFxcIiRyZXBlYXRfYXJnXFxcIiA9fiBeWzAtOV0rJCBdXTsgdGhlblxcbitcXHRcXHRrdGFwX2V4aXRfZmFpbF9tc2cgXFxcInJlcGVhdCBhcmd1bWVudCAnJHJlcGVhdF9hcmcnIGlzIG5vdCBhIG51bWJlclxcXCJcXG4rXFx0ZmlcXG4rXFxuK1xcdGlmICEgW1sgXFxcIiRzZWVkX2FyZ1xcXCIgPX4gXlswLTldKyQgXV07IHRoZW5cXG4rXFx0XFx0a3RhcF9leGl0X2ZhaWxfbXNnIFxcXCJzZWVkIGFyZ3VtZW50ICckc2VlZF9hcmcnIGlzIG5vdCBhIG51bWJlclxcXCJcXG4rXFx0ZmlcXG4rXFxuK1xcdGZvciB0IGluICRzZWxlY3RlZF9hcmc7IGRvXFxuK1xcdFxcdGlmICEgZGVjbGFyZSAtRiBcXFwiJHRcXFwiIFxcdTAwM2UgL2Rldi9udWxsOyB0aGVuXFxuK1xcdFxcdFxcdGt0YXBfZXhpdF9mYWlsX21zZyBcXFwidW5rbm93biBzZWxlY3RlZCB0ZXN0ICckdCdcXFwiXFxuIFxcdFxcdGZpXFxuIFxcdGRvbmVcXG4gfVxcbiBcXG4tZnVuY3Rpb24gd2F0Y2hfbG9nKClcXG4rYWxsb3dfdXNlcl9kZWZhdWx0cygpXFxuIHtcXG4tXFx0aWYgWyAkIyAtbmUgMyBdOyB0aGVuXFxuLVxcdFxcdGNsZWFyXFxuK1xcdGlmIFsgLXogXFxcIiR7TU9EVUxFX0RJUn1cXFwiIF07IHRoZW5cXG4rXFx0XFx0TU9EVUxFX0RJUj1cXFwiL3N5cy9tb2R1bGUvdGVzdF9zeXNjdGwvXFxcIlxcbitcXHRmaVxcbitcXHRpZiBbIC16IFxcXCIke1NZU0NUTH1cXFwiIF07IHRoZW5cXG4rXFx0XFx0U1lTQ1RMPVxcXCIvcHJvYy9zeXMvZGVidWcvdGVzdF9zeXNjdGxcXFwiXFxuK1xcdGZpXFxuK1xcdGlmIFsgLXogXFxcIiR7UFJPRF9TWVNDVEx9XFxcIiBdOyB0aGVuXFxuK1xcdFxcdFBST0RfU1lTQ1RMPVxcXCIvcHJvYy9zeXNcXFwiXFxuK1xcdGZpXFxuK1xcdGlmIFsgLXogXFxcIiR7V1JJVEVTX1NUUklDVH1cXFwiIF07IHRoZW5cXG4rXFx0XFx0V1JJVEVTX1NUUklDVD1cXFwiJHtQUk9EX1NZU0NUTH0va2VybmVsL3N5c2N0bF93cml0ZXNfc3RyaWN0XFxcIlxcbitcXHRmaVxcbitcXHRpZiBbIC16IFxcXCIke0JJVE1BUF9JVEVSQVRJT05TfVxcXCIgXTsgdGhlblxcbitcXHRcXHRCSVRNQVBfSVRFUkFUSU9OUz01MFxcbitcXHRmaVxcbitcXHQjIFNldCBzZWVkIGZvciBiaXRtYXAgcmFuZG9tIHRlc3RzXFxuK1xcdGlmIFsgLXogXFxcIiR7QklUTUFQX1NFRUR9XFxcIiBdOyB0aGVuXFxuK1xcdFxcdEJJVE1BUF9TRUVEPSRSQU5ET01cXG4gXFx0ZmlcXG4tXFx0ZGF0ZVxcbi1cXHRlY2hvIFxcXCJSdW5uaW5nIHRlc3Q6ICQyIC0gcnVuICMkMVxcXCJcXG4gfVxcbiBcXG4tZnVuY3Rpb24gd2F0Y2hfY2FzZSgpXFxuK2NoZWNrX3Byb2R1Y3Rpb25fc3lzY3RsX3dyaXRlc19zdHJpY3QoKVxcbiB7XFxuLVxcdGk9MFxcbi1cXHR3aGlsZSBbIDEgXTsgZG9cXG4tXFxuLVxcdFxcdGlmIFsgJCMgLWVxIDEgXTsgdGhlblxcbi1cXHRcXHRcXHR0ZXN0X251bSAkMVxcbi1cXHRcXHRcXHR3YXRjaF9sb2cgJGkgJHtURVNUX05BTUV9X3Rlc3RfJDFcXG4tXFx0XFx0XFx0JHtURVNUX05BTUV9X3Rlc3RfJDFcXG4tXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHR3YXRjaF9sb2cgJGkgYWxsXFxuLVxcdFxcdFxcdHJ1bl9hbGxfdGVzdHNcXG4rXFx0aWYgWyAhIC1lIFxcXCIke1dSSVRFU19TVFJJQ1R9XFxcIiBdOyB0aGVuXFxuK1xcdFxcdGt0YXBfcHJpbnRfbXNnIFxcXCIke1dSSVRFU19TVFJJQ1R9IG1pc3NpbmcsIHNraXBwaW5nIHN0cmljdCB3cml0ZSBjaGVjayAob2xkIGtlcm5lbD8pXFxcIlxcbitcXHRlbHNlXFxuK1xcdFxcdG9sZF9zdHJpY3Q9JChjYXQgXFxcIiR7V1JJVEVTX1NUUklDVH1cXFwiKVxcbitcXHRcXHRpZiBbIFxcXCIkb2xkX3N0cmljdFxcXCIgIT0gXFxcIjFcXFwiIF07IHRoZW5cXG4rXFx0XFx0XFx0a3RhcF9wcmludF9tc2cgXFxcImZvcmNpbmcgJHtXUklURVNfU1RSSUNUfSB0byAxICh3YXMgJHtvbGRfc3RyaWN0fSlcXFwiXFxuK1xcdFxcdFxcdGVjaG8gXFxcIjFcXFwiIFxcdTAwM2UgXFxcIiR7V1JJVEVTX1NUUklDVH1cXFwiXFxuIFxcdFxcdGZpXFxuLVxcdFxcdGxldCBpPSRpKzFcXG4tXFx0ZG9uZVxcbitcXHRmaVxcbitcXG4rXFx0aWYgWyAteiBcXFwiJHtQQUdFX1NJWkV9XFxcIiBdOyB0aGVuXFxuK1xcdFxcdFBBR0VfU0laRT0kKGdldGNvbmYgUEFHRVNJWkUpXFxuK1xcdGZpXFxuK1xcdGlmIFsgLXogXFxcIiR7TUFYX0RJR0lUU31cXFwiIF07IHRoZW5cXG4rXFx0XFx0TUFYX0RJR0lUUz0kKChQQUdFX1NJWkUgLyA4KSlcXG4rXFx0ZmlcXG4rXFx0aWYgWyAteiBcXFwiJHtJTlRfTUFYfVxcXCIgXTsgdGhlblxcbitcXHRcXHRJTlRfTUFYPSQoZ2V0Y29uZiBJTlRfTUFYKVxcbitcXHRmaVxcbitcXHRpZiBbIC16IFxcXCIke1VJTlRfTUFYfVxcXCIgXTsgdGhlblxcbitcXHRcXHRVSU5UX01BWD0kKGdldGNvbmYgVUlOVF9NQVgpXFxuK1xcdGZpXFxuIH1cXG4gXFxuLWZ1bmN0aW9uIHRlc3RfY2FzZSgpXFxuK2xvYWRfcmVxX21vZCgpXFxuIHtcXG4tXFx0VEVTVF9JRD0kMVxcbi1cXHROVU1fVEVTVFM9JDJcXG4tXFx0VEFSR0VUPSQzXFxuLVxcbi1cXHRpZiBza2lwX3Rlc3QgJFRFU1RfSUQgJFRBUkdFVDsgdGhlblxcbi1cXHRcXHRyZXR1cm5cXG4rXFx0aWYgWyAhIC1kIFxcXCIke1NZU0NUTH1cXFwiIF07IHRoZW5cXG4rXFx0XFx0aWYgISBtb2Rwcm9iZSAtcSAtbiBcXFwiJHtURVNUX0RSSVZFUn1cXFwiOyB0aGVuXFxuK1xcdFxcdFxcdGt0YXBfc2tpcF9hbGwgXFxcIm1vZHVsZSAke1RFU1RfRFJJVkVSfSBub3QgZm91bmQuIFxcXFxcXG4rXFx0XFx0XFx0XFx0WW91IG11c3Qgc2V0IENPTkZJR19URVNUX1NZU0NUTD1tIGluIHlvdXIga2VybmVsXFxcIlxcbitcXHRcXHRcXHRleGl0IFxcXCIkS1NGVF9TS0lQXFxcIlxcbitcXHRcXHRmaVxcbitcXHRcXHRpZiAhIG1vZHByb2JlIFxcXCIke1RFU1RfRFJJVkVSfVxcXCI7IHRoZW5cXG4rXFx0XFx0XFx0a3RhcF9leGl0X2ZhaWxfbXNnIFxcXCJtb2Rwcm9iZSAke1RFU1RfRFJJVkVSfSBmYWlsZWRcXFwiXFxuK1xcdFxcdGZpXFxuIFxcdGZpXFxuLVxcbi1cXHRpPTBcXG4tXFx0d2hpbGUgWyAkaSAtbHQgJE5VTV9URVNUUyBdOyBkb1xcbi1cXHRcXHR0ZXN0X251bSAkVEVTVF9JRFxcbi1cXHRcXHR3YXRjaF9sb2cgJGkgJHtURVNUX05BTUV9X3Rlc3RfJHtURVNUX0lEfSBub2NsZWFyXFxuLVxcdFxcdFJVTl9URVNUPSR7VEVTVF9OQU1FfV90ZXN0XyR7VEVTVF9JRH1cXG4tXFx0XFx0JFJVTl9URVNUXFxuLVxcdFxcdGxldCBpPSRpKzFcXG4tXFx0ZG9uZVxcbiB9XFxuIFxcbi1mdW5jdGlvbiBwYXJzZV9hcmdzKClcXG4rIyBDbGVhbnVwIG9ubHkhIERvIG5vdCBjYWxsIGV4aXQgaGVyZSBvciBpdCB3aWxsIHNpbGVudGx5IG92ZXJyaWRlIEtUQVAgZXhpdCBzdGF0dXNcXG4rcmVzdG9yZV9zeXNjdGxfd3JpdGVzX3N0cmljdCgpXFxuIHtcXG4tXFx0aWYgWyAkIyAtZXEgMCBdOyB0aGVuXFxuLVxcdFxcdHJ1bl9hbGxfdGVzdHNcXG4tXFx0ZWxzZVxcbi1cXHRcXHRpZiBbWyBcXFwiJDFcXFwiID0gXFxcImFsbFxcXCIgXV07IHRoZW5cXG4tXFx0XFx0XFx0cnVuX2FsbF90ZXN0c1xcbi1cXHRcXHRlbGlmIFtbIFxcXCIkMVxcXCIgPSBcXFwiLXdcXFwiIF1dOyB0aGVuXFxuLVxcdFxcdFxcdHNoaWZ0XFxuLVxcdFxcdFxcdHdhdGNoX2Nhc2UgJEBcXG4tXFx0XFx0ZWxpZiBbWyBcXFwiJDFcXFwiID0gXFxcIi10XFxcIiBdXTsgdGhlblxcbi1cXHRcXHRcXHRzaGlmdFxcbi1cXHRcXHRcXHR0ZXN0X251bSAkMVxcbi1cXHRcXHRcXHR0ZXN0X2Nhc2UgJDEgJChnZXRfdGVzdF9jb3VudCAkMSkgJChnZXRfdGVzdF90YXJnZXQgJDEpXFxuLVxcdFxcdGVsaWYgW1sgXFxcIiQxXFxcIiA9IFxcXCItY1xcXCIgXV07IHRoZW5cXG4tXFx0XFx0XFx0c2hpZnRcXG4tXFx0XFx0XFx0dGVzdF9udW0gJDFcXG4tXFx0XFx0XFx0dGVzdF9udW0gJDJcXG4tXFx0XFx0XFx0dGVzdF9jYXNlICQxICQyICQoZ2V0X3Rlc3RfdGFyZ2V0ICQxKVxcbi1cXHRcXHRlbGlmIFtbIFxcXCIkMVxcXCIgPSBcXFwiLXNcXFwiIF1dOyB0aGVuXFxuLVxcdFxcdFxcdHNoaWZ0XFxuLVxcdFxcdFxcdHRlc3RfY2FzZSAkMSAxICQoZ2V0X3Rlc3RfdGFyZ2V0ICQxKVxcbi1cXHRcXHRlbGlmIFtbIFxcXCIkMVxcXCIgPSBcXFwiLWxcXFwiIF1dOyB0aGVuXFxuLVxcdFxcdFxcdGxpc3RfdGVzdHNcXG4tXFx0XFx0ZWxpZiBbWyBcXFwiJDFcXFwiID0gXFxcIi1oXFxcIiB8fCBcXFwiJDFcXFwiID0gXFxcIi0taGVscFxcXCIgXV07IHRoZW5cXG4tXFx0XFx0XFx0dXNhZ2VcXG4tXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHR1c2FnZVxcbi1cXHRcXHRmaVxcbitcXHRpZiBbIC1uIFxcXCIke29sZF9zdHJpY3R9XFxcIiBdOyB0aGVuXFxuK1xcdFxcdGVjaG8gXFxcIiR7b2xkX3N0cmljdH1cXFwiIFxcdTAwM2UgXFxcIiR7V1JJVEVTX1NUUklDVH1cXFwiXFxuIFxcdGZpXFxuIH1cXG4gXFxuLXRlc3RfcmVxc1xcbiBhbGxvd191c2VyX2RlZmF1bHRzXFxuK1xcbisjIEVhY2ggYml0bWFwIGl0ZXJhdGlvbiBpcyBvbmUgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgb25lIEtUQVAgcmVwb3J0IHBlciBpdGVyYXRpb25cXG4rZm9yIGkgaW4gJChzZXEgMSBcXFwiJEJJVE1BUF9JVEVSQVRJT05TXFxcIik7IGRvXFxuK1xcdGV2YWwgXFxcInRlc3RfYml0bWFwX3JhbmdlX2NoZWNrXyQocHJpbnRmICclMDJkJyBcXFwiJGlcXFwiKSgpIFxcXFxcXG4rXFx0XFx0eyBcXFxcXFxuK1xcdFxcdFxcdGJpdG1hcF9yYW5nZV9jaGVja19vbmNlICRpOyBcXFxcXFxuK1xcdFxcdH1cXFwiXFxuK2RvbmVcXG4rXFxuKyMgRGlzY292ZXIgdGVzdF8qIGZ1bmN0aW9ucyBhYm92ZSB0aGlzIGxpbmVcXG4rQUxMX1RFU1RTPSQoZGVjbGFyZSAtRiB8IGF3ayAne3ByaW50ICQzfScgfCBncmVwICdedGVzdF8nIHwgc29ydClcXG4rXFxuK1JFUEVBVD0xXFxuK3doaWxlIFsgJCMgLWd0IDAgXTsgZG9cXG4rXFx0Y2FzZSBcXFwiJDFcXFwiIGluXFxuK1xcdC1yIClcXG4rXFx0XFx0c2hpZnRcXG4rXFx0XFx0UkVQRUFUPSQxXFxuK1xcdFxcdDs7XFxuK1xcdC1sIClcXG4rXFx0XFx0bGlzdF90ZXN0c1xcbitcXHRcXHRleGl0IDBcXG4rXFx0XFx0OztcXG4rXFx0LWggfCAtLWhlbHAgKVxcbitcXHRcXHR1c2FnZVxcbitcXHRcXHRleGl0IDBcXG4rXFx0XFx0OztcXG4rXFx0LXQgKVxcbitcXHRcXHRzaGlmdFxcbitcXHRcXHRTWVNDVExfVEVTVFM9XFxcIiQxXFxcIlxcbitcXHRcXHQ7O1xcbitcXHQtcyApXFxuK1xcdFxcdHNoaWZ0XFxuK1xcdFxcdEJJVE1BUF9TRUVEPVxcXCIkMVxcXCJcXG4rXFx0XFx0OztcXG4rXFx0KiApXFxuK1xcdFxcdHVzYWdlXFxuK1xcdFxcdGV4aXQgMVxcbitcXHRcXHQ7O1xcbitcXHRlc2FjXFxuK1xcdHNoaWZ0XFxuK2RvbmVcXG4rXFxuK1NFTEVDVEVEPSR7U1lTQ1RMX1RFU1RTLSRBTExfVEVTVFN9XFxuK1xcbitrdGFwX3ByaW50X2hlYWRlclxcbit0cmFwIHJlc3RvcmVfc3lzY3RsX3dyaXRlc19zdHJpY3QgRVhJVFxcbitjaGVja19hcmdzIFxcXCIkUkVQRUFUXFxcIiBcXFwiJFNFTEVDVEVEXFxcIiBcXFwiJEJJVE1BUF9TRUVEXFxcIlxcbitjaGVja19yZXFzXFxuIGNoZWNrX3Byb2R1Y3Rpb25fc3lzY3RsX3dyaXRlc19zdHJpY3RcXG4gbG9hZF9yZXFfbW9kXFxuIFxcbi10cmFwIFxcXCJ0ZXN0X2ZpbmlzaFxcXCIgRVhJVFxcbitrdGFwX3ByaW50X21zZyBcXFwiYml0bWFwIGJhc2Ugc2VlZDogJEJJVE1BUF9TRUVEIChyZXBsYXkgd2l0aCAtcyAkQklUTUFQX1NFRUQpXFxcIlxcbiBcXG4tcGFyc2VfYXJncyAkQFxcbitrdGFwX3NldF9wbGFuIFxcXCIkKCggJCh3YyAtdyBcXHUwMDNjXFx1MDAzY1xcdTAwM2MgXFxcIiRTRUxFQ1RFRFxcXCIpICogUkVQRUFUICkpXFxcIlxcbitcXG4rZm9yICgoaSA9IDA7IGkgXFx1MDAzYyBSRVBFQVQ7IGkrKykpOyBkb1xcbitcXHRmb3IgdCBpbiAkU0VMRUNURUQ7IGRvXFxuK1xcdFxcdHJ1bl9vbmUgXFxcIiR0XFxcIlxcbitcXHRkb25lXFxuK2RvbmVcXG4gXFxuLWV4aXQgMFxcbitrdGFwX2ZpbmlzaGVkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjM5OjA3LjUzNTA2MzMyN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDE2MjI1MTcxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB0aGUgdXNlci1zcGFjZSBzZWxmdGVzdCBzY3JpcHQgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY3RsL3N5c2N0bC5zaCB0byBtb2Rlcm5pemUgaXQgYW5kIHVzZSBrdGFwX2hlbHBlcnMuIEl0IGRvZXMgbm90IHRvdWNoIGFueSBrZXJuZWwgc291cmNlIGNvZGUsIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCksIG9yIGtlcm5lbCBtb2R1bGVzLCBzbyBpdCBpcyBub3Qgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjcxNjY5MmNlNGZiZTAxM2I4OGUzZjQzYjAwZjczNTM4OTI1MTM1OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDE0IDEzOjM5OjA1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY3RsL3N5c2N0bC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2N0bC9zeXNjdGwuc2hcbmluZGV4IDk1ZTkzNzA5MDg4YTMuLmNlYjVjZmEwY2ZkNGQgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjdGwvc3lzY3RsLnNoXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjdGwvc3lzY3RsLnNoXG5AQCAtMiwzNjIgKzIsMjM5IEBAXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciBPUiBjb3B5bGVmdC1uZXh0LTAuMy4xXG4gIyBDb3B5cmlnaHQgKEMpIDIwMTcgTHVpcyBSLiBSb2RyaWd1ZXogXHUwMDNjbWNncm9mQGtlcm5lbC5vcmdcdTAwM2VcbiBcbi0jIFRoaXMgcGVyZm9ybXMgYSBzZXJpZXMgdGVzdHMgYWdhaW5zdCB0aGUgcHJvYyBzeXNjdGwgaW50ZXJmYWNlLlxuLVxuKyMgUmVkdWNlIG5vaXNlIGJ5IGRpc2FibGluZyBcInVucmVhY2hhYmxlXCIgY2hlY2suXG4gIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMzE3XG4tIyBLc2VsZnRlc3QgZnJhbWV3b3JrIHJlcXVpcmVtZW50IC0gU0tJUCBjb2RlIGlzIDQuXG4ta3NmdF9za2lwPTRcbi1cbi1URVNUX05BTUU9XCJzeXNjdGxcIlxuLVRFU1RfRFJJVkVSPVwidGVzdF8ke1RFU1RfTkFNRX1cIlxuLVRFU1RfRElSPSQoZGlybmFtZSAkMClcbi1URVNUX0ZJTEU9JChta3RlbXApXG4tXG4tIyBpbml0aWFsaXplIGZvciBpbmRpdmlkdWFsIHRlc3RzXG4tcmM9MFxuLVxuLSMgVGhpcyByZXByZXNlbnRzXG4tI1xuLSMgVEVTVF9JRDpURVNUX0NPVU5UOkVOQUJMRUQ6VEFSR0VUOlNLSVBfTk9fVEFSR0VUXG4tI1xuLSMgVEVTVF9JRDogaXMgdGhlIHRlc3QgaWQgbnVtYmVyXG4tIyBURVNUX0NPVU5UOiBudW1iZXIgb2YgdGltZXMgd2Ugc2hvdWxkIHJ1biB0aGUgdGVzdFxuLSMgRU5BQkxFRDogMSBpZiBlbmFibGVkLCAwIG90aGVyd2lzZVxuLSMgVEFSR0VUOiB0ZXN0IHRhcmdldCBmaWxlIHJlcXVpcmVkIG9uIHRoZSB0ZXN0X3N5c2N0bCBtb2R1bGVcbi0jIFNLSVBfTk9fVEFSR0VUOiAxIHNraXAgaWYgVEFSR0VUIG5vdCB0aGVyZVxuLSMgICAgICAgICAgICAgICAgIDAgcnVuIGV2ZW4gdGhvdWdoIFRBUkdFVCBub3QgdGhlcmVcbi0jXG4tIyBPbmNlIHRoZXNlIGFyZSBlbmFibGVkIHBsZWFzZSBsZWF2ZSB0aGVtIGFzLWlzLiBXcml0ZSB5b3VyIG93biB0ZXN0LFxuLSMgd2UgaGF2ZSB0b25zIG9mIHNwYWNlLlxuLUFMTF9URVNUUz1cIjAwMDE6MToxOmludF8wMDAxOjFcIlxuLUFMTF9URVNUUz1cIiRBTExfVEVTVFMgMDAwMjoxOjE6c3RyaW5nXzAwMDE6MVwiXG4tQUxMX1RFU1RTPVwiJEFMTF9URVNUUyAwMDAzOjE6MTppbnRfMDAwMjoxXCJcbi1BTExfVEVTVFM9XCIkQUxMX1RFU1RTIDAwMDQ6MToxOnVpbnRfMDAwMToxXCJcbi1BTExfVEVTVFM9XCIkQUxMX1RFU1RTIDAwMDU6MzoxOmludF8wMDAzOjFcIlxuLUFMTF9URVNUUz1cIiRBTExfVEVTVFMgMDAwNjo1MDoxOmJpdG1hcF8wMDAxOjFcIlxuLUFMTF9URVNUUz1cIiRBTExfVEVTVFMgMDAwNzoxOjE6Ym9vdF9pbnQ6MVwiXG4tQUxMX1RFU1RTPVwiJEFMTF9URVNUUyAwMDA4OjE6MTptYXRjaF9pbnQ6MVwiXG4tQUxMX1RFU1RTPVwiJEFMTF9URVNUUyAwMDA5OjE6MTp1bnJlZ2lzdGVyX2Vycm9yOjBcIlxuLUFMTF9URVNUUz1cIiRBTExfVEVTVFMgMDAxMDoxOjE6bW50L21udF9lcnJvcjowXCJcbi1BTExfVEVTVFM9XCIkQUxMX1RFU1RTIDAwMTE6MToxOmVtcHR5X2FkZDowXCJcbi1BTExfVEVTVFM9XCIkQUxMX1RFU1RTIDAwMTI6MToxOnU4X3ZhbGlkOjBcIlxuLUFMTF9URVNUUz1cIiRBTExfVEVTVFMgMDAxMzoxOjE6aW50XzAwMDM6MVwiXG4tXG4tZnVuY3Rpb24gYWxsb3dfdXNlcl9kZWZhdWx0cygpXG4rXG4rIyBUaGlzIHBlcmZvcm1zIGEgc2VyaWVzIG9mIHRlc3RzIGFnYWluc3QgdGhlIHByb2Mgc3lzY3RsIGludGVyZmFjZS5cbitcbitESVI9XCIkKGRpcm5hbWUgXCIkKHJlYWRsaW5rIC1mIFwiJDBcIilcIilcIlxuK3NvdXJjZSBcIiR7RElSfVwiLy4uL2tzZWxmdGVzdC9rdGFwX2hlbHBlcnMuc2hcbitcbitURVNUX0RSSVZFUj1cInRlc3Rfc3lzY3RsXCJcbitcbithc3NlcnRfd3JpdGVfcmVqZWN0ZWQoKSAjIFx1MDAzY2ZpbGVcdTAwM2UgXHUwMDNjdmFsdWVcdTAwM2VcbiB7XG4tXHRpZiBbIC16ICRESVIgXTsgdGhlblxuLVx0XHRESVI9XCIvc3lzL21vZHVsZS90ZXN0X3N5c2N0bC9cIlxuLVx0Zmlcbi1cdGlmIFsgLXogJERFRkFVTFRfTlVNX1RFU1RTIF07IHRoZW5cbi1cdFx0REVGQVVMVF9OVU1fVEVTVFM9NTBcbi1cdGZpXG4tXHRpZiBbIC16ICRTWVNDVEwgXTsgdGhlblxuLVx0XHRTWVNDVEw9XCIvcHJvYy9zeXMvZGVidWcvdGVzdF9zeXNjdGxcIlxuLVx0Zmlcbi1cdGlmIFsgLXogJFBST0RfU1lTQ1RMIF07IHRoZW5cbi1cdFx0UFJPRF9TWVNDVEw9XCIvcHJvYy9zeXNcIlxuLVx0Zmlcbi1cdGlmIFsgLXogJFdSSVRFU19TVFJJQ1QgXTsgdGhlblxuLVx0XHRXUklURVNfU1RSSUNUPVwiJHtQUk9EX1NZU0NUTH0va2VybmVsL3N5c2N0bF93cml0ZXNfc3RyaWN0XCJcbitcdGxvY2FsIGZpbGU9JDEgdmFsPSQyXG4rXHRpZiBwcmludGYgJyVzJyBcIiR2YWxcIiBcdTAwM2UgXCIkZmlsZVwiIDJcdTAwM2UvZGV2L251bGw7IHRoZW5cbitcdFx0a3RhcF9wcmludF9tc2cgXCIkZmlsZTogd3JpdGUgb2YgJyR2YWwnIHN1Y2NlZWRlZCwgZXhwZWN0ZWQgcmVqZWN0aW9uXCJcbitcdFx0cmV0dXJuIDFcbiBcdGZpXG4rXHRyZXR1cm4gMFxuIH1cbiBcbi1mdW5jdGlvbiBjaGVja19wcm9kdWN0aW9uX3N5c2N0bF93cml0ZXNfc3RyaWN0KClcbithc3NlcnRfY29udGVudCgpICMgXHUwMDNjZmlsZVx1MDAzZSBcdTAwM2N3YW50LWZpbGVcdTAwM2VcbiB7XG4tXHRlY2hvIC1uIFwiQ2hlY2tpbmcgcHJvZHVjdGlvbiB3cml0ZSBzdHJpY3Qgc2V0dGluZyAuLi4gXCJcbi1cdGlmIFsgISAtZSAke1dSSVRFU19TVFJJQ1R9IF07IHRoZW5cbi1cdFx0ZWNobyBcIkZBSUwsIGJ1dCBza2lwIGluIGNhc2Ugb2Ygb2xkIGtlcm5lbFwiIFx1MDAzZVx1MDAyNjJcbi1cdGVsc2Vcbi1cdFx0b2xkX3N0cmljdD0kKGNhdCAke1dSSVRFU19TVFJJQ1R9KVxuLVx0XHRpZiBbIFwiJG9sZF9zdHJpY3RcIiA9IFwiMVwiIF07IHRoZW5cbi1cdFx0XHRlY2hvIFwiT0tcIlxuLVx0XHRlbHNlXG4tXHRcdFx0ZWNobyBcIkZBSUwsIHN0cmljdCB2YWx1ZSBpcyAwIGJ1dCBmb3JjZSB0byAxIHRvIGNvbnRpbnVlXCIgXHUwMDNlXHUwMDI2MlxuLVx0XHRcdGVjaG8gXCIxXCIgXHUwMDNlICR7V1JJVEVTX1NUUklDVH1cbi1cdFx0Zmlcbi1cdGZpXG4tXG4tXHRpZiBbIC16ICRQQUdFX1NJWkUgXTsgdGhlblxuLVx0XHRQQUdFX1NJWkU9JChnZXRjb25mIFBBR0VTSVpFKVxuLVx0Zmlcbi1cdGlmIFsgLXogJE1BWF9ESUdJVFMgXTsgdGhlblxuLVx0XHRNQVhfRElHSVRTPSQoKCRQQUdFX1NJWkUvOCkpXG4tXHRmaVxuLVx0aWYgWyAteiAkSU5UX01BWCBdOyB0aGVuXG4tXHRcdElOVF9NQVg9JChnZXRjb25mIElOVF9NQVgpXG4tXHRmaVxuLVx0aWYgWyAteiAkVUlOVF9NQVggXTsgdGhlblxuLVx0XHRVSU5UX01BWD0kKGdldGNvbmYgVUlOVF9NQVgpXG4rXHRsb2NhbCBmaWxlPSQxIHdhbnRfZmlsZT0kMiBnb3RcbitcdGdvdD0kKGNhdCBcIiRmaWxlXCIpXG4rXHRpZiBbIFwiJGdvdFwiID09IFwiJHdhbnRfZmlsZVwiIF07IHRoZW5cbitcdFx0cmV0dXJuIDBcbiBcdGZpXG4rXHRrdGFwX3ByaW50X21zZyBcIiRmaWxlOiBnb3QgJyRnb3QnLCB3YW50ICckd2FudF9maWxlJ1wiXG4rXHRyZXR1cm4gMVxuIH1cbiBcbi10ZXN0X3JlcXMoKVxuKyMgY29tcGFyZSBpZ25vcmluZyB3aGl0ZXNwYWNlc1xuK2Fzc2VydF9jb250ZW50X2xvb3NlKCkgIyBcdTAwM2NmaWxlXHUwMDNlIFx1MDAzY3dhbnQtZmlsZVx1MDAzZVxuIHtcbi1cdHVpZD0kKGlkIC11KVxuLVx0aWYgWyAkdWlkIC1uZSAwIF07IHRoZW5cbi1cdFx0ZWNobyAkbXNnIG11c3QgYmUgcnVuIGFzIHJvb3QgXHUwMDNlXHUwMDI2MlxuLVx0XHRleGl0ICRrc2Z0X3NraXBcbi1cdGZpXG4tXG4tXHRpZiAhIHdoaWNoIHBlcmwgMlx1MDAzZSAvZGV2L251bGwgXHUwMDNlIC9kZXYvbnVsbDsgdGhlblxuLVx0XHRlY2hvIFwiJDA6IFlvdSBuZWVkIHBlcmwgaW5zdGFsbGVkXCJcbi1cdFx0ZXhpdCAka3NmdF9za2lwXG4tXHRmaVxuLVx0aWYgISB3aGljaCBnZXRjb25mIDJcdTAwM2UgL2Rldi9udWxsIFx1MDAzZSAvZGV2L251bGw7IHRoZW5cbi1cdFx0ZWNobyBcIiQwOiBZb3UgbmVlZCBnZXRjb25mIGluc3RhbGxlZFwiXG4tXHRcdGV4aXQgJGtzZnRfc2tpcFxuLVx0Zmlcbi1cdGlmICEgd2hpY2ggZGlmZiAyXHUwMDNlIC9kZXYvbnVsbCBcdTAwM2UgL2Rldi9udWxsOyB0aGVuXG4tXHRcdGVjaG8gXCIkMDogWW91IG5lZWQgZGlmZiBpbnN0YWxsZWRcIlxuLVx0XHRleGl0ICRrc2Z0X3NraXBcbitcdGxvY2FsIGZpbGU9JDEgd2FudF9maWxlPSQyXG4rXHRpZiBlY2hvIFwiJHdhbnRfZmlsZVwiIHwgZGlmZiAtcSAtdyAtdSAtIFwiJGZpbGVcIiBcdTAwM2UgL2Rldi9udWxsOyB0aGVuXG4rXHRcdHJldHVybiAwXG4gXHRmaVxuK1x0a3RhcF9wcmludF9tc2cgXCIkZmlsZTogY29udGVudCBkb2VzIG5vdCBtYXRjaCAnJHdhbnRfZmlsZScgKHdoaXRlc3BhY2UtaW5zZW5zaXRpdmUpXCJcbitcdHJldHVybiAxXG4gfVxuIFxuLWZ1bmN0aW9uIGxvYWRfcmVxX21vZCgpXG4rIyBGb3IgY2hlY2tzIHdoZXJlIHdyaXRlcyBtdXN0IE5PVCB0YWtlIGVmZmVjdFxuK2Fzc2VydF9jb250ZW50X3JlamVjdGVkKCkgIyBcdTAwM2NmaWxlXHUwMDNlIFx1MDAzY2JhZFx1MDAzZVxuIHtcbi1cdGlmIFsgISAtZCAkU1lTQ1RMIF07IHRoZW5cbi1cdFx0aWYgISBtb2Rwcm9iZSAtcSAtbiAkVEVTVF9EUklWRVI7IHRoZW5cbi1cdFx0XHRlY2hvIFwiJDA6IG1vZHVsZSAkVEVTVF9EUklWRVIgbm90IGZvdW5kIFtTS0lQXVwiXG4tXHRcdFx0ZWNobyBcIllvdSBtdXN0IHNldCBDT05GSUdfVEVTVF9TWVNDVEw9bSBpbiB5b3VyIGtlcm5lbFwiIFx1MDAzZVx1MDAyNjJcbi1cdFx0XHRleGl0ICRrc2Z0X3NraXBcbi1cdFx0Zmlcbi1cdFx0bW9kcHJvYmUgJFRFU1RfRFJJVkVSXG4tXHRcdGlmIFsgJD8gLW5lIDAgXTsgdGhlblxuLVx0XHRcdGVjaG8gXCIkMDogbW9kcHJvYmUgJFRFU1RfRFJJVkVSIGZhaWxlZC5cIlxuLVx0XHRcdGV4aXRcbi1cdFx0ZmlcbitcdGxvY2FsIGZpbGU9JDEgYmFkPSQyXG4rXHRpZiBlY2hvIFwiJGJhZFwiIHwgZGlmZiAtcSAtdyAtdSAtIFwiJGZpbGVcIiBcdTAwM2UgL2Rldi9udWxsOyB0aGVuXG4rXHRcdGt0YXBfcHJpbnRfbXNnIFwiJGZpbGU6IHVuZXhwZWN0ZWRseSBub3cgaG9sZHMgcmVqZWN0ZWQgdmFsdWUgJyRiYWQnXCJcbitcdFx0cmV0dXJuIDFcbiBcdGZpXG4rXHRyZXR1cm4gMFxuIH1cbiBcbi1yZXNldF92YWxzKClcbisjIHByb2MgZmlsZXMgZ2V0IHJlYWQgYSBwYWdlIGF0IGEgdGltZSwgd2hpY2ggY2FuIGNvbmZ1c2UgZGlmZiByZXN1bHRpbmcgaW5cbisjIGluY29ycmVjdCByZXN1bHRzLiBVc2UgYSB0ZW1wIGZpbGUgdG8gZGlmZi5cbithc3NlcnRfZGlmZl9wcm9jX2ZpbGUoKSAjIFx1MDAzY2ZpbGVcdTAwM2UgXHUwMDNjd2FudC1maWxlXHUwMDNlXG4ge1xuLVx0VkFMPVwiXCJcbi1cdFRSSUdHRVI9JChiYXNlbmFtZSAke1RBUkdFVH0pXG4tXHRjYXNlIFwiJFRSSUdHRVJcIiBpblxuLVx0XHRpbnRfMDAwMSlcbi1cdFx0XHRWQUw9XCI2MFwiXG4tXHRcdFx0Oztcbi1cdFx0aW50XzAwMDIpXG4tXHRcdFx0VkFMPVwiMVwiXG4tXHRcdFx0Oztcbi1cdFx0dWludF8wMDAxKVxuLVx0XHRcdFZBTD1cIjMxNFwiXG4tXHRcdFx0Oztcbi1cdFx0c3RyaW5nXzAwMDEpXG4tXHRcdFx0VkFMPVwiKG5vbmUpXCJcbi1cdFx0XHQ7O1xuLVx0XHRiaXRtYXBfMDAwMSlcbi1cdFx0XHRWQUw9XCJcIlxuLVx0XHRcdDs7XG4tXHRcdCopXG4tXHRcdFx0Oztcbi1cdGVzYWNcbi1cdGVjaG8gLW4gJFZBTCBcdTAwM2UgJFRBUkdFVFxuLX1cbitcdGxvY2FsIGZpbGU9JDEgd2FudF9maWxlPSQyIHRtcFxuK1x0dG1wPSQobWt0ZW1wKVxuK1x0Y2F0IFwiJGZpbGVcIiBcdTAwM2UgXCIkdG1wXCJcbiBcbi1zZXRfb3JpZygpXG4te1xuLVx0aWYgWyAhIC16ICRUQVJHRVQgXSBcdTAwMjZcdTAwMjYgWyAhIC16ICRPUklHIF07IHRoZW5cbi1cdFx0aWYgWyAtZiAke1RBUkdFVH0gXTsgdGhlblxuLVx0XHRcdGVjaG8gXCIke09SSUd9XCIgXHUwMDNlIFwiJHtUQVJHRVR9XCJcbi1cdFx0ZmlcbitcdGlmIGRpZmYgLXcgLXEgXCIkdG1wXCIgXCIkd2FudF9maWxlXCIgXHUwMDNlIC9kZXYvbnVsbDsgdGhlblxuK1x0XHRybSAtZiBcIiR0bXBcIlxuK1x0XHRyZXR1cm4gMFxuIFx0ZmlcbitcdGt0YXBfcHJpbnRfbXNnIFwiJGZpbGU6IGNvbnRlbnQgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgZmlsZSAkd2FudF9maWxlXCJcbitcdHJtIC1mIFwiJHRtcFwiXG4rXHRyZXR1cm4gMVxuIH1cbiBcbi1zZXRfdGVzdCgpXG4rIyBWZXJpZnkgdGhhdCBhbiBlcnJvbmVvdXMgdXBkYXRlIGZhaWxzIGFuZCBkb2VzIG5vdCBjaGFuZ2UgdGhlIGJhc2VsaW5lLlxuK2Fzc2VydF9ub19wYXJ0aWFsX3VwZGF0ZSgpICMgXHUwMDNjZmlsZVx1MDAzZSBcdTAwM2NiYXNlbGluZVx1MDAzZSBcdTAwM2NiYWQtdmFsdWVcdTAwM2VcbiB7XG4tXHRlY2hvIFwiJHtURVNUX1NUUn1cIiBcdTAwM2UgXCIke1RBUkdFVH1cIlxuK1x0bG9jYWwgZmlsZT0kMSBiYXNlbGluZT0kMiBiYWQ9JDNcbitcbitcdHByaW50ZiAnJXMnIFwiJGJhc2VsaW5lXCIgXHUwMDNlIFwiJGZpbGVcIlxuK1x0YXNzZXJ0X3dyaXRlX3JlamVjdGVkIFwiJGZpbGVcIiBcIiRiYWRcIiB8fCByZXR1cm4gMVxuK1x0YXNzZXJ0X2NvbnRlbnRfbG9vc2UgXCIkZmlsZVwiIFwiJGJhc2VsaW5lXCJcbiB9XG4gXG4tdmVyaWZ5KClcbithc3NlcnRfZ3JlcCgpICMgXHUwMDNjZmlsZVx1MDAzZSBcdTAwM2NwYXR0ZXJuXHUwMDNlIC0gXHUwMDNjcGF0dGVyblx1MDAzZSBtdXN0IGFwcGVhciBpbiBcdTAwM2NmaWxlXHUwMDNlXG4ge1xuLVx0bG9jYWwgc2VlblxuLVx0c2Vlbj0kKGNhdCBcIiQxXCIpXG4tXHRpZiBbIFwiJHtzZWVufVwiICE9IFwiJHtURVNUX1NUUn1cIiBdOyB0aGVuXG4tXHRcdHJldHVybiAxXG4rXHRsb2NhbCBmaWxlPSQxIHBhdHRlcm49JDJcbitcdGlmIGdyZXAgLXEgXCIkcGF0dGVyblwiIFwiJGZpbGVcIjsgdGhlblxuK1x0XHRyZXR1cm4gMFxuIFx0Zmlcbi1cdHJldHVybiAwXG4rXHRrdGFwX3ByaW50X21zZyBcIiRmaWxlOiBwYXR0ZXJuICckcGF0dGVybicgbm90IGZvdW5kXCJcbitcdHJldHVybiAxXG4gfVxuIFxuLSMgcHJvYyBmaWxlcyBnZXQgcmVhZCBhIHBhZ2UgYXQgYSB0aW1lLCB3aGljaCBjYW4gY29uZnVzZSBkaWZmLFxuLSMgYW5kIGdldCB5b3UgaW5jb3JyZWN0IHJlc3VsdHMgb24gcHJvYyBmaWxlcyB3aXRoIGxvbmcgZGF0YS4gVG8gdXNlXG4tIyBkaWZmIGFnYWluc3QgdGhlbSB5b3UgbXVzdCBmaXJzdCBleHRyYWN0IHRoZSBvdXRwdXQgdG8gYSBmaWxlLCBhbmRcbi0jIHRoZW4gY29tcGFyZSBhZ2FpbnN0IHRoYXQgZmlsZS5cbi12ZXJpZnlfZGlmZl9wcm9jX2ZpbGUoKVxuK2Fzc2VydF9ncmVwX2Fic2VudCgpICMgXHUwMDNjZmlsZVx1MDAzZSBcdTAwM2NwYXR0ZXJuXHUwMDNlIC0gXHUwMDNjcGF0dGVyblx1MDAzZSBtdXN0IE5PVCBhcHBlYXJcbiB7XG4tXHRUTVBfRFVNUF9GSUxFPSQobWt0ZW1wKVxuLVx0Y2F0ICQxIFx1MDAzZSAkVE1QX0RVTVBfRklMRVxuLVxuLVx0aWYgISBkaWZmIC13IC1xICRUTVBfRFVNUF9GSUxFICQyOyB0aGVuXG4tXHRcdHJldHVybiAxXG4tXHRlbHNlXG4rXHRsb2NhbCBmaWxlPSQxIHBhdHRlcm49JDJcbitcdGlmICEgZ3JlcCAtcSBcIiRwYXR0ZXJuXCIgXCIkZmlsZVwiOyB0aGVuXG4gXHRcdHJldHVybiAwXG4gXHRmaVxuK1x0a3RhcF9wcmludF9tc2cgXCIkZmlsZTogcGF0dGVybiAnJHBhdHRlcm4nIHVuZXhwZWN0ZWRseSBmb3VuZFwiXG4rXHRyZXR1cm4gMVxuIH1cbiBcbi12ZXJpZnlfZGlmZl93KClcbithc3NlcnRfZG1lc2dfY291bnQoKSAjIFx1MDAzY3BhdHRlcm5cdTAwM2UgXHUwMDNjd2FudC1jb3VudFx1MDAzZVxuIHtcbi1cdGVjaG8gXCIkVEVTVF9TVFJcIiB8IGRpZmYgLXEgLXcgLXUgLSAkMSBcdTAwM2UgL2Rldi9udWxsXG4tXHRyZXR1cm4gJD9cbitcdGxvY2FsIHBhdHRlcm49JDEgd2FudD0kMiBnb3RcbitcdGdvdD0kKGRtZXNnIHwgZ3JlcCAtYyBcIiRwYXR0ZXJuXCIpXG4rXHRpZiBbIFwiJGdvdFwiIC1lcSBcIiR3YW50XCIgXTsgdGhlblxuK1x0XHRyZXR1cm4gMFxuK1x0ZmlcbitcdGt0YXBfcHJpbnRfbXNnIFwiZG1lc2c6IHBhdHRlcm4gJyRwYXR0ZXJuJyBzZWVuICRnb3QgdGltZXMsIHdhbnQgJHdhbnRcIlxuK1x0cmV0dXJuIDFcbiB9XG4gXG4tIyBWZXJpZnkgdGhhdCBhbiBlcnJvbmVvdXMgKCQyKSB1cGRhdGUgZmFpbHMgYW5kIGRvZXMgbm90IGNoYW5nZSBUQVJHRVRcbi12ZXJpZnlfbm9fcGFydGlhbF91cGRhdGUoKVxuKyMgd3JpdGUgXHUwMDNjc3RyXHUwMDNlIHRocm91Z2ggZGQgaW4gXHUwMDNjYnNcdTAwM2Utc2l6ZWQgY2h1bmtzXG4rd3JpdGVfaW5fY2h1bmtzKCkgICMgXHUwMDNjZmlsZVx1MDAzZSBcdTAwM2NzdHJcdTAwM2UgXHUwMDNjYnNcdTAwM2VcbiB7XG4tXHRURVNUX1NUUj1cIiQxXCJcbi1cdGVjaG8gLW4gXCIkVEVTVF9TVFJcIiBcdTAwM2UgXCIkVEFSR0VUXCJcbi1cbi1cdGlmIGVjaG8gLW4gXCIkMlwiIFx1MDAzZSBcIiRUQVJHRVRcIiAyXHUwMDNlIC9kZXYvbnVsbDsgdGhlblxuLVx0XHRyZXR1cm4gMVxuLVx0Zmlcbi1cdHZlcmlmeV9kaWZmX3cgXCIke1RBUkdFVH1cIlxuK1x0bG9jYWwgZmlsZT0kMSBzdHI9JDIgYnM9JDNcbitcdHByaW50ZiAnJXMnIFwiJHN0clwiIHwgZGQgb2Y9XCIkZmlsZVwiIGJzPVwiJGJzXCIgMlx1MDAzZS9kZXYvbnVsbFxuIH1cbiBcbi10ZXN0X3JjKClcbisjIHdyaXRlIFx1MDAzY3N0clx1MDAzZSB0aHJvdWdoIGRkIGluIFx1MDAzY2JzXHUwMDNlLXNpemVkIGNodW5rcy4gc2Vla2luZyBcdTAwM2NzZWVrXHUwMDNlIGJsb2NrcyBvZiBzaXplXG4rIyBcdTAwM2Nic1x1MDAzZSBpbnRvIHRoZSBvdXRwdXQuIHNraXBwaW5nIFx1MDAzY3NraXBcdTAwM2UgYmxvY2tzIG9mIHNpemUgXHUwMDNjYnNcdTAwM2UgZnJvbSB0aGUgaW5wdXQuXG4rIyBVbnN5bmNyaG9uaXplZCB3aGVuIHNraXAgaXMgbm90IHBhc3NlZC5cbit3cml0ZV9hdF9vZmZzZXQoKSAgIyBcdTAwM2NmaWxlXHUwMDNlIFx1MDAzY3N0clx1MDAzZSBcdTAwM2Nic1x1MDAzZSBcdTAwM2NzZWVrXHUwMDNlIFtza2lwXVxuIHtcbi1cdGlmIFtbICRyYyAhPSAwIF1dOyB0aGVuXG4tXHRcdGVjaG8gXCJGYWlsZWQgdGVzdCwgcmV0dXJuIHZhbHVlOiAkcmNcIiBcdTAwM2VcdTAwMjYyXG4tXHRcdGV4aXQgJHJjXG4rXHRsb2NhbCBmaWxlPSQxIHN0cj0kMiBicz0kMyBzZWVrPSQ0IHNraXA9JHs1Oi19XG4rXHRpZiBbIC1uIFwiJHNraXBcIiBdOyB0aGVuXG4rXHRcdHByaW50ZiAnJXMnIFwiJHN0clwiIHwgZGQgb2Y9XCIkZmlsZVwiIGJzPVwiJGJzXCIgc2Vlaz1cIiRzZWVrXCIgc2tpcD1cIiRza2lwXCIgMlx1MDAzZS9kZXYvbnVsbFxuK1x0ZWxzZVxuK1x0XHRwcmludGYgJyVzJyBcIiRzdHJcIiB8IGRkIG9mPVwiJGZpbGVcIiBicz1cIiRic1wiIHNlZWs9XCIkc2Vla1wiIDJcdTAwM2UvZGV2L251bGxcbiBcdGZpXG4gfVxuIFxuLXRlc3RfZmluaXNoKClcbisjIHBhZCAocHJlZml4KSBcdTAwM2NzdHJcdTAwM2Ugd2l0aCBcdTAwM2NwYWRcdTAwM2UgJ0EnIGNoYXJhY3RlcnMsIHRoZW4gd3JpdGUgaXQgYWxsIHRvIFx1MDAzY2ZpbGVcdTAwM2VcbisjIHdpdGggZGQgYmxvY2sgc2l6ZSBcdTAwM2Nic1x1MDAzZSAoZGVmYXVsdHMgdG8gXHUwMDNjcGFkXHUwMDNlKS5cbit3cml0ZV9vdmVybG9uZygpICAjIFx1MDAzY2ZpbGVcdTAwM2UgXHUwMDNjcGFkXHUwMDNlIFx1MDAzY3N0clx1MDAzZSBbYnNdXG4ge1xuLVx0c2V0X29yaWdcbi1cdHJtIC1mIFwiJHtURVNUX0ZJTEV9XCJcbitcdGxvY2FsIGZpbGU9JDEgcGFkPSQyIHN0cj0kMyBicz0kNCBwXG4rXHQ6IFwiJHticzo9JHBhZH1cIlxuIFxuLVx0aWYgWyAhIC16ICR7b2xkX3N0cmljdH0gXTsgdGhlblxuLVx0XHRlY2hvICR7b2xkX3N0cmljdH0gXHUwMDNlICR7V1JJVEVTX1NUUklDVH1cbi1cdGZpXG4tXHRleGl0ICRyY1xuK1x0IyBzYXZlIGEgc3RyaW5nIHdpdGggJHBhZCBzcGFjZXMgaW4gJHBcbitcdHByaW50ZiAtdiBwICclKnMnIFwiJHBhZFwiICcnXG4rXHQjIHJlcGxhY2UgXCIgXCIgd2l0aCBcIkFcIlxuK1x0cHJpbnRmICclcyVzJyBcIiR7cC8vIC9BfVwiIFwiJHN0clwiIHwgZGQgb2Y9XCIkZmlsZVwiIGJzPVwiJGJzXCIgMlx1MDAzZS9kZXYvbnVsbFxuIH1cbiBcbi1ydW5fbnVtZXJpY3Rlc3RzKClcbisjIHBhZCAocHJlZml4KSBcdTAwM2NzdHJcdTAwM2Ugd2l0aCBcdTAwM2NwYWRcdTAwM2UgQVNDSUkgc3BhY2VzLCB0aGVuIHdyaXRlIHdpdGggZGVmYXVsdCBibG9jayBzaXplLlxuK3dyaXRlX3BhZGRlZF9kaWdpdHMoKSAgIyBcdTAwM2NmaWxlXHUwMDNlIFx1MDAzY3BhZFx1MDAzZSBcdTAwM2N2YWxcdTAwM2VcbiB7XG4tXHRlY2hvIFwiPT0gVGVzdGluZyBzeXNjdGwgYmVoYXZpb3IgYWdhaW5zdCAke1RBUkdFVH0gPT1cIlxuK1x0bG9jYWwgZmlsZT0kMSBwYWQ9JDIgdmFsPSQzIHBcbitcdHByaW50ZiAtdiBwICclKnMnIFwiJHBhZFwiICcnXG4rXHRwcmludGYgJyVzJXMnIFwiJHBcIiBcIiR2YWxcIiB8IGRkIG9mPVwiJGZpbGVcIiAyXHUwMDNlL2Rldi9udWxsXG4rfVxuIFxuLVx0cmM9MFxuK3Rlc3RfaW50X2FycmF5X3dyaXRlcygpXG4re1xuK1x0bG9jYWwgdD1cIiR7U1lTQ1RMfS9pbnRfMDAwM1wiXG4rXHRsb2NhbCBsaW1pdFxuIFxuLVx0ZWNobyAtbiBcIldyaXRpbmcgdGVzdCBmaWxlIC4uLiBcIlxuLVx0ZWNobyBcIiR7VEVTVF9TVFJ9XCIgXHUwMDNlIFwiJHtURVNUX0ZJTEV9XCJcbi1cdGlmICEgdmVyaWZ5IFwiJHtURVNUX0ZJTEV9XCI7IHRoZW5cbi1cdFx0ZWNobyBcIkZBSUxcIiBcdTAwM2VcdTAwMjYyXG4tXHRcdGV4aXQgMVxuLVx0ZWxzZVxuLVx0XHRlY2hvIFwiT0tcIlxuLVx0ZmlcbitcdFtbIC1mIFwiJHRcIiBdXSB8fCB7IFJFVD0kS1NGVF9TS0lQOyByZXR1cm47IH1cbiBcbi1cdGVjaG8gLW4gXCJDaGVja2luZyBzeXNjdGwgaXMgbm90IHNldCB0byB0ZXN0IHZhbHVlIC4uLiBcIlxuLVx0aWYgdmVyaWZ5IFwiJHtUQVJHRVR9XCI7IHRoZW5cbi1cdFx0ZWNobyBcIkZBSUxcIiBcdTAwM2VcdTAwMjYyXG4tXHRcdGV4aXQgMVxuLVx0ZWxzZVxuLVx0XHRlY2hvIFwiT0tcIlxuLVx0ZmlcbitcdHByaW50ZiAnJXMnIFwiNCAzIDIgMVwiIFx1MDAzZSBcIiR0XCJcbitcdGFzc2VydF9jb250ZW50X2xvb3NlIFwiJHRcIiBcIjQgMyAyIDFcIiB8fCBSRVQ9JEtTRlRfRkFJTFxuIFxuLVx0ZWNobyAtbiBcIldyaXRpbmcgc3lzY3RsIGZyb20gc2hlbGwgLi4uIFwiXG4tXHRzZXRfdGVzdFxuLVx0aWYgISB2ZXJpZnkgXCIke1RBUkdFVH1cIjsgdGhlblxuLVx0XHRlY2hvIFwiRkFJTFwiIFx1MDAzZVx1MDAyNjJcbi1cdFx0ZXhpdCAxXG4tXHRlbHNlXG4tXHRcdGVjaG8gXCJPS1wiXG4tXHRmaVxuK1x0IyBTa2lwcGluZyB0cmFpbGluZyBlbGVtZW50cyBsZWF2ZXMgdGhlbSBpbnRhY3RcbitcdHByaW50ZiAnJXMnIFwiMTAwIDEwMVwiIFx1MDAzZSBcIiR0XCJcbitcdGFzc2VydF9jb250ZW50X2xvb3NlIFwiJHRcIiBcIjEwMCAxMDEgMiAxXCIgfHwgUkVUPSRLU0ZUX0ZBSUxcbiBcbi1cdGVjaG8gLW4gXCJSZXNldHRpbmcgc3lzY3RsIHRvIG9yaWdpbmFsIHZhbHVlIC4uLiBcIlxuLVx0c2V0X29yaWdcbi1cdGlmIHZlcmlmeSBcIiR7VEFSR0VUfVwiOyB0aGVuXG4tXHRcdGVjaG8gXCJGQUlMXCIgXHUwMDNlXHUwMDI2MlxuLVx0XHRleGl0IDFcbi1cdGVsc2Vcbi1cdFx0ZWNobyBcIk9LXCJcbi1cdGZpXG4rXHQjIEV2ZW4gZm9yIGFuIGludCBhcnJheSwgYSBzaW5nbGUgd3JpdGUgaXMgc3RpbGwgY2FwcGVkIGF0IE1BWF9ESUdJVFNcbitcdCMgKFBBR0VfU0laRS84KSBieXRlczsgY2hlY2sgcmlnaHQgYXQsIGFuZCBqdXN0IHBhc3QsIHRoYXQgYm91bmRhcnkuXG4rXHQjIENhcnJpZXMgb24gdGhlIHN0YXRlIGZyb20gdGhlIHdyaXRlcyBhYm92ZS5cbitcdGxpbWl0PSQoKE1BWF9ESUdJVFMgLSAxKSlcbitcdHdyaXRlX3BhZGRlZF9kaWdpdHMgXCIkdFwiIFwiJGxpbWl0XCIgXCI5XCJcbitcdGFzc2VydF9jb250ZW50X2xvb3NlIFwiJHRcIiBcIjkgMTAxIDIgMVwiIHx8IFJFVD0kS1NGVF9GQUlMXG4gXG4tXHQjIE5vdyB0aGF0IHdlJ3ZlIHZhbGlkYXRlZCB0aGUgc2FuaXR5IG9mIFwic2V0X3Rlc3RcIiBhbmQgXCJzZXRfb3JpZ1wiLFxuLVx0IyB3ZSBjYW4gdXNlIHRob3NlIGZ1bmN0aW9ucyB0byBzZXQgc3RhcnRpbmcgc3RhdGVzIGJlZm9yZSBydW5uaW5nXG4tXHQjIHNwZWNpZmljIGJlaGF2aW9yYWwgdGVzdHMuXG4rXHRsaW1pdD0kKChNQVhfRElHSVRTKSlcbitcdHdyaXRlX3BhZGRlZF9kaWdpdHMgXCIkdFwiIFwiJGxpbWl0XCIgXCI3XCJcbitcdGFzc2VydF9jb250ZW50X3JlamVjdGVkIFwiJHRcIiBcIjcgMTAxIDIgMVwiIHx8IFJFVD0kS1NGVF9GQUlMXG4rfVxuIFxuLVx0ZWNobyAtbiBcIldyaXRpbmcgZW50aXJlIHN5c2N0bCBpbiBzaW5nbGUgd3JpdGUgLi4uIFwiXG4tXHRzZXRfb3JpZ1xuLVx0ZGQgaWY9XCIke1RFU1RfRklMRX1cIiBvZj1cIiR7VEFSR0VUfVwiIGJzPTQwOTYgMlx1MDAzZS9kZXYvbnVsbFxuLVx0aWYgISB2ZXJpZnkgXCIke1RBUkdFVH1cIjsgdGhlblxuLVx0XHRlY2hvIFwiRkFJTFwiIFx1MDAzZVx1MDAyNjJcbi1cdFx0cmM9MVxuLVx0ZWxzZVxuLVx0XHRlY2hvIFwiT0tcIlxuLVx0Zmlcbit0ZXN0X2ludF9hcnJheV9ub19wYXJ0aWFsX3VwZGF0ZSgpXG4re1xuK1x0bG9jYWwgdD1cIiR7U1lTQ1RMfS9pbnRfMDAwM1wiXG4gXG4tXHRlY2hvIC1uIFwiV3JpdGluZyBtaWRkbGUgb2Ygc3lzY3RsIGFmdGVyIHN5bmNocm9uaXplZCBzZWVrIC4uLiBcIlxuLVx0c2V0X3Rlc3Rcbi1cdGRkIGlmPVwiJHtURVNUX0ZJTEV9XCIgb2Y9XCIke1RBUkdFVH1cIiBicz0xIHNlZWs9MSBza2lwPTEgMlx1MDAzZS9kZXYvbnVsbFxuLVx0aWYgISB2ZXJpZnkgXCIke1RBUkdFVH1cIjsgdGhlblxuLVx0XHRlY2hvIFwiRkFJTFwiIFx1MDAzZVx1MDAyNjJcbi1cdFx0cmM9MVxuLVx0ZWxzZVxuLVx0XHRlY2hvIFwiT0tcIlxuLVx0ZmlcbitcdFtbIC1mIFwiJHRcIiBdXSB8fCB7IFJFVD0kS1NGVF9TS0lQOyByZXR1cm47IH1cbiBcbi1cdGVjaG8gLW4gXCJXcml0aW5nIGJleW9uZCBlbmQgb2Ygc3lzY3RsIC4uLiBcIlxuLVx0c2V0X29yaWdcbi1cdGRkIGlmPVwiJHtURVNUX0ZJTEV9XCIgb2Y9XCIke1RBUkdFVH1cIiBicz0yMCBzZWVrPTIgMlx1MDAzZS9kZXYvbnVsbFxuLVx0aWYgdmVyaWZ5IFwiJHtUQVJHRVR9XCI7IHRoZW5cbi1cdFx0ZWNobyBcIkZBSUxcIiBcdTAwM2VcdTAwMjYyXG4tXHRcdHJjPTFcbi1cdGVsc2Vcbi1cdFx0ZWNobyBcIk9LXCJcbi1cdGZpXG4rXHQjIGJhZCAzcmQgZWxlbWVudCAobm90IGEgbnVtYmVyKVxuK1x0YXNzZXJ0X25vX3BhcnRpYWxfdXBkYXRlIFwiJHRcIiBcIjEgMiAzIDRcIiBcIjEwIDIwIGFiYyA0MFwiIHx8IFJFVD0kS1NGVF9GQUlMXG4gXG4tXHRlY2hvIC1uIFwiV3JpdGluZyBzeXNjdGwgd2l0aCBtdWx0aXBsZSBsb25nIHdyaXRlcyAuLi4gXCJcbi1cdHNldF9vcmlnXG4tXHQocGVybCAtZSAncHJpbnQgXCJBXCIgeCA1MDsnOyBlY2hvIFwiJHtURVNUX1NUUn1cIikgfCBcXFxuLVx0XHRkZCBvZj1cIiR7VEFSR0VUfVwiIGJzPTUwIDJcdTAwM2UvZGV2L251bGxcbi1cdGlmIHZlcmlmeSBcIiR7VEFSR0VUfVwiOyB0aGVuXG4tXHRcdGVjaG8gXCJGQUlMXCIgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRlbHNlXG4tXHRcdGVjaG8gXCJPS1wiXG4tXHRmaVxuLVx0dGVzdF9yY1xuK1x0IyBiYWQgM3JkIGVsZW1lbnQgKG92ZXJmbG93cyBpbnQpXG4rXHRhc3NlcnRfbm9fcGFydGlhbF91cGRhdGUgXCIkdFwiIFwiMSAyIDMgNFwiIFwiMTAgMjAgJCgoSU5UX01BWCArIDEpKSA0MFwiIHx8IFJFVD0kS1NGVF9GQUlMXG4rXG4rXHQjIGJhZCAxc3QgZWxlbWVudFxuK1x0YXNzZXJ0X25vX3BhcnRpYWxfdXBkYXRlIFwiJHRcIiBcIjEgMiAzIDRcIiBcImFiYyAyMCAzMCA0MFwiIHx8IFJFVD0kS1NGVF9GQUlMXG4gfVxuIFxuLWNoZWNrX2ZhaWx1cmUoKVxuKyMgRXhlcmNpc2UgdGhlIHdyaXRlIHBhdHRlcm5zXG4rYXNzZXJ0X3dyaXRlX3BhdHRlcm5zKCkgICMgXHUwMDNjZmlsZVx1MDAzZSBcdTAwM2NiYXNlbGluZVx1MDAzZSBcdTAwM2N2YWxcdTAwM2VcbiB7XG4tXHRlY2hvIC1uIFwiVGVzdGluZyB0aGF0ICQxIGZhaWxzIGFzIGV4cGVjdGVkIC4uLiBcIlxuLVx0cmVzZXRfdmFsc1xuLVx0VEVTVF9TVFI9XCIkMVwiXG4tXHRvcmlnPVwiJChjYXQgJFRBUkdFVClcIlxuLVx0ZWNobyAtbiBcIiRURVNUX1NUUlwiIFx1MDAzZSAkVEFSR0VUIDJcdTAwM2UgL2Rldi9udWxsXG4tXG4tXHQjIHdyaXRlIHNob3VsZCBmYWlsIGFuZCAkVEFSR0VUIHNob3VsZCByZXRhaW4gaXRzIG9yaWdpbmFsIHZhbHVlXG4tXHRpZiBbICQ/ID0gMCBdIHx8IFsgXCIkKGNhdCAkVEFSR0VUKVwiICE9IFwiJG9yaWdcIiBdOyB0aGVuXG4tXHRcdGVjaG8gXCJGQUlMXCIgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRlbHNlXG4tXHRcdGVjaG8gXCJPS1wiXG4tXHRmaVxuLVx0dGVzdF9yY1xuK1x0bG9jYWwgZmlsZT0kMSBiYXNlbGluZT0kMiB2YWw9JDMgc3RhdHVzPTBcbitcbitcdHByaW50ZiAnJXMnIFwiJHZhbFwiIFx1MDAzZSBcIiRmaWxlXCJcbitcdGFzc2VydF9jb250ZW50IFwiJGZpbGVcIiBcIiR2YWxcIiB8fCBzdGF0dXM9MVxuK1x0cHJpbnRmICclcycgXCIkYmFzZWxpbmVcIiBcdTAwM2UgXCIkZmlsZVwiXG4rXHRhc3NlcnRfY29udGVudCBcIiRmaWxlXCIgXCIkYmFzZWxpbmVcIiB8fCBzdGF0dXM9MVxuK1xuK1x0cHJpbnRmICclcycgXCIkYmFzZWxpbmVcIiBcdTAwM2UgXCIkZmlsZVwiXG4rXHR3cml0ZV9pbl9jaHVua3MgXCIkZmlsZVwiIFwiJHZhbFwiIDQwOTZcbitcdGFzc2VydF9jb250ZW50IFwiJGZpbGVcIiBcIiR2YWxcIiB8fCBzdGF0dXM9MVxuK1xuK1x0cHJpbnRmICclcycgXCIkdmFsXCIgXHUwMDNlIFwiJGZpbGVcIlxuK1x0d3JpdGVfYXRfb2Zmc2V0IFwiJGZpbGVcIiBcIiR2YWxcIiAxIDEgMVxuK1x0YXNzZXJ0X2NvbnRlbnQgXCIkZmlsZVwiIFwiJHZhbFwiIHx8IHN0YXR1cz0xXG4rXG4rXHRwcmludGYgJyVzJyBcIiRiYXNlbGluZVwiIFx1MDAzZSBcIiRmaWxlXCJcbitcdHdyaXRlX2F0X29mZnNldCBcIiRmaWxlXCIgXCIkdmFsXCIgMjAgMlxuK1x0YXNzZXJ0X2NvbnRlbnRfcmVqZWN0ZWQgXCIkZmlsZVwiIFwiJHZhbFwiIHx8IHN0YXR1cz0xXG4rXG4rXHRwcmludGYgJyVzJyBcIiRiYXNlbGluZVwiIFx1MDAzZSBcIiRmaWxlXCJcbitcdHdyaXRlX292ZXJsb25nIFwiJGZpbGVcIiA1MCBcIiR2YWxcIlxuK1x0YXNzZXJ0X2NvbnRlbnRfcmVqZWN0ZWQgXCIkZmlsZVwiIFwiJHZhbFwiIHx8IHN0YXR1cz0xXG4rXG4rXHRyZXR1cm4gXCIkc3RhdHVzXCJcbiB9XG4gXG4tcnVuX3dpZGVpbnRfdGVzdHMoKVxuKyMgTm9uZSBvZiB0aGVzZSBmaXQgaW4gMzIgYml0cywgc28gd3JpdGluZyB0aGVtIHRvIGFuIGludC91aW50IHN5c2N0bCBtdXN0IGZhaWxcbithc3NlcnRfd2lkZWludF93cml0ZXNfcmVqZWN0ZWQoKSAgIyBcdTAwM2NmaWxlXHUwMDNlIFx1MDAzY2Jhc2VsaW5lXHUwMDNlXG4ge1xuLVx0IyBzeXNjdGwgY29udmVyc2lvbiBmdW5jdGlvbnMgcmVjZWl2ZSBhIGJvb2xlYW4gc2lnbiBhbmQgdWxvbmdcbi1cdCMgbWFnbml0dWRlOyBoZXJlIHdlIGxpc3QgdGhlIG1hZ25pdHVkZXMgd2Ugd2FudCB0byB0ZXN0IChlYWNoIG9mXG4tXHQjIHdoaWNoIHdpbGwgYmUgdGVzdGVkIGluIGJvdGggcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIGZvcm1zKS4gIFNpbmNlXG4tXHQjIG5vbmUgb2YgdGhlc2UgdmFsdWVzIGZpdCBpbiAzMiBiaXRzLCB3cml0aW5nIHRoZW0gdG8gYW4gaW50LSBvclxuLVx0IyB1aW50LXR5cGVkIHN5c2N0bCBzaG91bGQgZmFpbC5cbitcdGxvY2FsIGZpbGU9JDEgYmFzZWxpbmU9JDIgc2lnbiBtYWcgc3RhdHVzPTBcbiBcdGxvY2FsIG1hZ25pdHVkZXM9KFxuLVx0XHQjIGNvbW1vbiBib3VuZGFyeS1jb25kaXRpb24gdmFsdWVzICh6ZXJvLCArMSwgLTEsIElOVF9NSU4sXG4tXHRcdCMgYW5kIElOVF9NQVggcmVzcGVjdGl2ZWx5KSBpZiB0cnVuY2F0ZWQgdG8gbG93ZXIgMzIgYml0c1xuLVx0XHQjIChwb3RlbnRpYWwgZm9yIGJlaW5nIGZhbHNlbHkgZGVlbWVkIGluIHJhbmdlKVxuIFx0XHQweDAwMDAwMDAxMDAwMDAwMDBcbiBcdFx0MHgwMDAwMDAwMTAwMDAwMDAxXG4gXHRcdDB4MDAwMDAwMDFmZmZmZmZmZlxuIFx0XHQweDAwMDAwMDAxODAwMDAwMDBcbiBcdFx0MHgwMDAwMDAwMTdmZmZmZmZmXG4tXG4tXHRcdCMgdGhlc2UgbG9vayBsaWtlIG5lZ2F0aXZlcywgYnV0IHdpdGhvdXQgYSBsZWFkaW5nICctJyBhcmVcbi1cdFx0IyBhY3R1YWxseSBsYXJnZSBwb3NpdGl2ZXMgKHNob3VsZCBiZSByZWplY3RlZCBhcyBhYm92ZVxuLVx0XHQjIGRlc3BpdGUgYmVpbmcgemVyby8rMS8tMS9JTlRfTUlOL0lOVF9NQVggaW4gdGhlIGxvd2VyIDMyKVxuIFx0XHQweGZmZmZmZmZmMDAwMDAwMDBcbiBcdFx0MHhmZmZmZmZmZjAwMDAwMDAxXG4gXHRcdDB4ZmZmZmZmZmZmZmZmZmZmZlxuQEAgLTM2Nyw3OTMgKzI0NCw1MTUgQEAgcnVuX3dpZGVpbnRfdGVzdHMoKVxuIFxuIFx0Zm9yIHNpZ24gaW4gJycgJy0nOyBkb1xuIFx0XHRmb3IgbWFnIGluIFwiJHttYWduaXR1ZGVzW0BdfVwiOyBkb1xuLVx0XHRcdGNoZWNrX2ZhaWx1cmUgXCIke3NpZ259JHttYWd9XCJcbitcdFx0XHRhc3NlcnRfbm9fcGFydGlhbF91cGRhdGUgXCIkZmlsZVwiIFwiJGJhc2VsaW5lXCIgXCIke3NpZ259JHttYWd9XCIgfHwgc3RhdHVzPTFcbiBcdFx0ZG9uZVxuIFx0ZG9uZVxuK1x0cmV0dXJuIFwiJHN0YXR1c1wiXG4gfVxuIFxuLSMgWW91ciB0ZXN0IG11c3QgYWNjZXB0IGRpZ2l0cyAzIGFuZCA0IHRvIHVzZSB0aGlzXG4tcnVuX2xpbWl0X2RpZ2l0KClcbisjIEEgc2luZ2xlIHdyaXRlIGlzIGNhcHBlZCBhdCBNQVhfRElHSVRTIChQQUdFX1NJWkUvOCkgYnl0ZXM7IGNoZWNrIHRoYXRcbisjIGxlYWRpbmcgd2hpdGVzcGFjZSB1cCB0byB0aGF0IGxpbWl0IGlzIGlnbm9yZWQsIGFuZCB0aGF0IFBBR0VfU0laRSBvZlxuKyMgbGVhZGluZyB3aGl0ZXNwYWNlIHB1c2hlcyB0aGUgdmFsdWUgcGFzdCB0aGUgbGltaXQgYW5kIGZhaWxzLlxuK2Fzc2VydF9kaWdpdF9saW1pdCgpICAjIFx1MDAzY2ZpbGVcdTAwM2UgXHUwMDNjYmFzZWxpbmVcdTAwM2VcbiB7XG4tXHRlY2hvIC1uIFwiQ2hlY2tpbmcgaWdub3Jpbmcgc3BhY2VzIHVwIHRvIFBBR0VfU0laRSB3b3JrcyBvbiB3cml0ZSAuLi4gXCJcbi1cdHJlc2V0X3ZhbHNcbi1cbi1cdExJTUlUPSQoKE1BWF9ESUdJVFMgLTEpKVxuLVx0VEVTVF9TVFI9XCIzXCJcbi1cdChwZXJsIC1lICdwcmludCBcIiBcIiB4ICckTElNSVQnOyc7IGVjaG8gXCIke1RFU1RfU1RSfVwiKSB8IFxcXG4tXHRcdGRkIG9mPVwiJHtUQVJHRVR9XCIgMlx1MDAzZS9kZXYvbnVsbFxuLVxuLVx0aWYgISB2ZXJpZnkgXCIke1RBUkdFVH1cIjsgdGhlblxuLVx0XHRlY2hvIFwiRkFJTFwiIFx1MDAzZVx1MDAyNjJcbi1cdFx0cmM9MVxuLVx0ZWxzZVxuLVx0XHRlY2hvIFwiT0tcIlxuLVx0Zmlcbi1cdHRlc3RfcmNcbitcdGxvY2FsIGZpbGU9JDEgYmFzZWxpbmU9JDIgc3RhdHVzPTBcbiBcbi1cdGVjaG8gLW4gXCJDaGVja2luZyBwYXNzaW5nIFBBR0VfU0laRSBvZiBzcGFjZXMgZmFpbHMgb24gd3JpdGUgLi4uIFwiXG4tXHRyZXNldF92YWxzXG4rXHRwcmludGYgJyVzJyBcIiRiYXNlbGluZVwiIFx1MDAzZSBcIiRmaWxlXCJcbitcdHdyaXRlX3BhZGRlZF9kaWdpdHMgXCIkZmlsZVwiIFwiJCgoTUFYX0RJR0lUUyAtIDEpKVwiIFwiM1wiXG4rXHRhc3NlcnRfY29udGVudCBcIiRmaWxlXCIgXCIzXCIgfHwgc3RhdHVzPTFcbiBcbi1cdExJTUlUPSQoKE1BWF9ESUdJVFMpKVxuLVx0VEVTVF9TVFI9XCI0XCJcbi1cdChwZXJsIC1lICdwcmludCBcIiBcIiB4ICckTElNSVQnOyc7IGVjaG8gXCIke1RFU1RfU1RSfVwiKSB8IFxcXG4tXHRcdGRkIG9mPVwiJHtUQVJHRVR9XCIgMlx1MDAzZS9kZXYvbnVsbFxuK1x0cHJpbnRmICclcycgXCIkYmFzZWxpbmVcIiBcdTAwM2UgXCIkZmlsZVwiXG4rXHR3cml0ZV9wYWRkZWRfZGlnaXRzIFwiJGZpbGVcIiBcIiRNQVhfRElHSVRTXCIgXCI0XCJcbitcdGFzc2VydF9jb250ZW50X3JlamVjdGVkIFwiJGZpbGVcIiBcIjRcIiB8fCBzdGF0dXM9MVxuIFxuLVx0aWYgdmVyaWZ5IFwiJHtUQVJHRVR9XCI7IHRoZW5cbi1cdFx0ZWNobyBcIkZBSUxcIiBcdTAwM2VcdTAwMjYyXG4tXHRcdHJjPTFcbi1cdGVsc2Vcbi1cdFx0ZWNobyBcIk9LXCJcbi1cdGZpXG4tXHR0ZXN0X3JjXG4rXHRyZXR1cm4gXCIkc3RhdHVzXCJcbiB9XG4gXG4tIyBZb3UgYXJlIHVzaW5nIGFuIGludFxuLXJ1bl9saW1pdF9kaWdpdF9pbnQoKVxuKyMgcHJvY19kb2ludHZlYygpLXNwZWNpZmljIHJhbmdlIGNoZWNrczogSU5UX01BWCBtdXN0IGJlIGFjY2VwdGVkLCBJTlRfTUFYKzFcbisjIG11c3QgYmUgcmVqZWN0ZWQsIGFuZCBuZWdhdGl2ZSB2YWx1ZXMgbXVzdCBiZSBhY2NlcHRlZC5cbithc3NlcnRfaW50X3JhbmdlKCkgICMgXHUwMDNjZmlsZVx1MDAzZSBcdTAwM2NiYXNlbGluZVx1MDAzZVxuIHtcbi1cdGVjaG8gLW4gXCJUZXN0aW5nIElOVF9NQVggd29ya3MgLi4uIFwiXG4tXHRyZXNldF92YWxzXG4tXHRURVNUX1NUUj1cIiRJTlRfTUFYXCJcbi1cdGVjaG8gLW4gJFRFU1RfU1RSIFx1MDAzZSAkVEFSR0VUXG4tXG4tXHRpZiAhIHZlcmlmeSBcIiR7VEFSR0VUfVwiOyB0aGVuXG4tXHRcdGVjaG8gXCJGQUlMXCIgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRlbHNlXG4tXHRcdGVjaG8gXCJPS1wiXG4tXHRmaVxuLVx0dGVzdF9yY1xuK1x0bG9jYWwgZmlsZT0kMSBiYXNlbGluZT0kMiBzdGF0dXM9MFxuIFxuLVx0ZWNobyAtbiBcIlRlc3RpbmcgSU5UX01BWCArIDEgd2lsbCBmYWlsIGFzIGV4cGVjdGVkIC4uLiBcIlxuLVx0cmVzZXRfdmFsc1xuLVx0bGV0IFRFU1RfU1RSPSRJTlRfTUFYKzFcbi1cdGVjaG8gLW4gJFRFU1RfU1RSIFx1MDAzZSAkVEFSR0VUIDJcdTAwM2UgL2Rldi9udWxsXG4rXHRwcmludGYgJyVzJyBcIiRiYXNlbGluZVwiIFx1MDAzZSBcIiRmaWxlXCJcbitcdHByaW50ZiAnJXMnIFwiJElOVF9NQVhcIiBcdTAwM2UgXCIkZmlsZVwiXG4rXHRhc3NlcnRfY29udGVudCBcIiRmaWxlXCIgXCIkSU5UX01BWFwiIHx8IHN0YXR1cz0xXG4gXG4tXHRpZiB2ZXJpZnkgXCIke1RBUkdFVH1cIjsgdGhlblxuLVx0XHRlY2hvIFwiRkFJTFwiIFx1MDAzZVx1MDAyNjJcbi1cdFx0cmM9MVxuLVx0ZWxzZVxuLVx0XHRlY2hvIFwiT0tcIlxuLVx0Zmlcbi1cdHRlc3RfcmNcbi1cbi1cdGVjaG8gLW4gXCJUZXN0aW5nIG5lZ2F0aXZlIHZhbHVlcyB3aWxsIHdvcmsgYXMgZXhwZWN0ZWQgLi4uIFwiXG4tXHRyZXNldF92YWxzXG4tXHRURVNUX1NUUj1cIi0zXCJcbi1cdGVjaG8gLW4gJFRFU1RfU1RSIFx1MDAzZSAkVEFSR0VUIDJcdTAwM2UgL2Rldi9udWxsXG4tXHRpZiAhIHZlcmlmeSBcIiR7VEFSR0VUfVwiOyB0aGVuXG4tXHRcdGVjaG8gXCJGQUlMXCIgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRlbHNlXG4tXHRcdGVjaG8gXCJPS1wiXG4tXHRmaVxuLVx0dGVzdF9yY1xuLX1cbitcdGFzc2VydF9ub19wYXJ0aWFsX3VwZGF0ZSBcIiRmaWxlXCIgXCIkYmFzZWxpbmVcIiBcIiQoKElOVF9NQVggKyAxKSlcIiB8fCBzdGF0dXM9MVxuIFxuLSMgWW91IHVzZWQgYW4gaW50IGFycmF5XG4tcnVuX2xpbWl0X2RpZ2l0X2ludF9hcnJheSgpXG4te1xuLVx0ZWNobyAtbiBcIlRlc3RpbmcgYXJyYXkgd29ya3MgYXMgZXhwZWN0ZWQgLi4uIFwiXG4tXHRURVNUX1NUUj1cIjQgMyAyIDFcIlxuLVx0ZWNobyAtbiAkVEVTVF9TVFIgXHUwMDNlICRUQVJHRVRcbitcdHByaW50ZiAnJXMnIFwiJGJhc2VsaW5lXCIgXHUwMDNlIFwiJGZpbGVcIlxuK1x0cHJpbnRmICclcycgXCItM1wiIFx1MDAzZSBcIiRmaWxlXCIgMlx1MDAzZS9kZXYvbnVsbFxuK1x0YXNzZXJ0X2NvbnRlbnQgXCIkZmlsZVwiIFwiLTNcIiB8fCBzdGF0dXM9MVxuIFxuLVx0aWYgISB2ZXJpZnlfZGlmZl93IFwiJHtUQVJHRVR9XCI7IHRoZW5cbi1cdFx0ZWNobyBcIkZBSUxcIiBcdTAwM2VcdTAwMjYyXG4tXHRcdHJjPTFcbi1cdGVsc2Vcbi1cdFx0ZWNobyBcIk9LXCJcbi1cdGZpXG4tXHR0ZXN0X3JjXG4tXG4tXHRlY2hvIC1uIFwiVGVzdGluZyBza2lwcGluZyB0cmFpbGluZyBhcnJheSBlbGVtZW50cyB3b3JrcyAuLi4gXCJcbi1cdCMgRG8gbm90IHJlc2V0X3ZhbHMsIGNhcnJ5IG9uIHRoZSB2YWx1ZXMgZnJvbSB0aGUgbGFzdCB0ZXN0LlxuLVx0IyBJZiB3ZSBvbmx5IGVjaG8gaW4gdHdvIGRpZ2l0cyB0aGUgbGFzdCB0d28gYXJlIGxlZnQgaW50YWN0XG4tXHRURVNUX1NUUj1cIjEwMCAxMDFcIlxuLVx0ZWNobyAtbiAkVEVTVF9TVFIgXHUwMDNlICRUQVJHRVRcbi1cdCMgQWZ0ZXIgd2UgZWNobyBpbiwgdG8gaGVscCBkaWZmIHdlIG5lZWQgdG8gc2V0IG9uIFRFU1RfU1RSIHdoYXRcbi1cdCMgd2UgZXhwZWN0IHRoZSByZXN1bHQgdG8gYmUuXG4tXHRURVNUX1NUUj1cIjEwMCAxMDEgMiAxXCJcbi1cbi1cdGlmICEgdmVyaWZ5X2RpZmZfdyBcIiR7VEFSR0VUfVwiOyB0aGVuXG4tXHRcdGVjaG8gXCJGQUlMXCIgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRlbHNlXG4tXHRcdGVjaG8gXCJPS1wiXG4tXHRmaVxuLVx0dGVzdF9yY1xuLVxuLVx0ZWNobyAtbiBcIlRlc3RpbmcgUEFHRV9TSVpFIGxpbWl0IG9uIGFycmF5IHdvcmtzIC4uLiBcIlxuLVx0IyBEbyBub3QgcmVzZXRfdmFscywgY2Fycnkgb24gdGhlIHZhbHVlcyBmcm9tIHRoZSBsYXN0IHRlc3QuXG4tXHQjIEV2ZW4gaWYgeW91IHVzZSBhbiBpbnQgYXJyYXksIHlvdSBhcmUgc3RpbGwgcmVzdHJpY3RlZCB0b1xuLVx0IyBNQVhfRElHSVRTLCB0aGlzIGlzIGEga25vd24gbGltaXRhdGlvbi4gVGVzdCBsaW1pdCB3b3Jrcy5cbi1cdExJTUlUPSQoKE1BWF9ESUdJVFMgLTEpKVxuLVx0VEVTVF9TVFI9XCI5XCJcbi1cdChwZXJsIC1lICdwcmludCBcIiBcIiB4ICckTElNSVQnOyc7IGVjaG8gXCIke1RFU1RfU1RSfVwiKSB8IFxcXG4tXHRcdGRkIG9mPVwiJHtUQVJHRVR9XCIgMlx1MDAzZS9kZXYvbnVsbFxuLVxuLVx0VEVTVF9TVFI9XCI5IDEwMSAyIDFcIlxuLVx0aWYgISB2ZXJpZnlfZGlmZl93IFwiJHtUQVJHRVR9XCI7IHRoZW5cbi1cdFx0ZWNobyBcIkZBSUxcIiBcdTAwM2VcdTAwMjYyXG4tXHRcdHJjPTFcbi1cdGVsc2Vcbi1cdFx0ZWNobyBcIk9LXCJcbi1cdGZpXG4tXHR0ZXN0X3JjXG4tXG4tXHRlY2hvIC1uIFwiVGVzdGluZyBleGNlZWRpbmcgUEFHRV9TSVpFIGxpbWl0IGZhaWxzIGFzIGV4cGVjdGVkIC4uLiBcIlxuLVx0IyBEbyBub3QgcmVzZXRfdmFscywgY2Fycnkgb24gdGhlIHZhbHVlcyBmcm9tIHRoZSBsYXN0IHRlc3QuXG4tXHQjIE5vdyBnbyBvdmVyIGxpbWl0LlxuLVx0TElNSVQ9JCgoTUFYX0RJR0lUUykpXG4tXHRURVNUX1NUUj1cIjdcIlxuLVx0KHBlcmwgLWUgJ3ByaW50IFwiIFwiIHggJyRMSU1JVCc7JzsgZWNobyBcIiR7VEVTVF9TVFJ9XCIpIHwgXFxcbi1cdFx0ZGQgb2Y9XCIke1RBUkdFVH1cIiAyXHUwMDNlL2Rldi9udWxsXG4tXG4tXHRURVNUX1NUUj1cIjcgMTAxIDIgMVwiXG4tXHRpZiB2ZXJpZnlfZGlmZl93IFwiJHtUQVJHRVR9XCI7IHRoZW5cbi1cdFx0ZWNobyBcIkZBSUxcIiBcdTAwM2VcdTAwMjYyXG4tXHRcdHJjPTFcbi1cdGVsc2Vcbi1cdFx0ZWNobyBcIk9LXCJcbi1cdGZpXG4tXHR0ZXN0X3JjXG4rXHRyZXR1cm4gXCIkc3RhdHVzXCJcbiB9XG4gXG4tIyBZb3UgdXNlZCBhbiBpbnQgYXJyYXkgYW5kIG9uZSBvZiB0aGUgZWxlbWVudHMgaXMgbm90IGFjY2VwdGFibGVcbi1ydW5faW50X2FycmF5X25vX3BhcnRpYWxfdXBkYXRlKClcbisjIHByb2NfZG91aW50dmVjKCktc3BlY2lmaWMgcmFuZ2UgY2hlY2tzOiBVSU5UX01BWCBtdXN0IGJlIGFjY2VwdGVkLFxuKyMgVUlOVF9NQVgrMSBtdXN0IGJlIHJlamVjdGVkLCBhbmQgbmVnYXRpdmUgdmFsdWVzIG11c3QgYmUgcmVqZWN0ZWQgdG9vLlxuK2Fzc2VydF91aW50X3JhbmdlKCkgICMgXHUwMDNjZmlsZVx1MDAzZSBcdTAwM2NiYXNlbGluZVx1MDAzZVxuIHtcbi1cdGVjaG8gLW4gXCJUZXN0aW5nIGludmFsaWQgYXJyYXkgZWxlbWVudCBkb2VzIG5vdCBwYXJ0aWFsbHkgdXBkYXRlIC4uLiBcIlxuLVx0IyBFeHBlY3QgZmFpbHVyZSBiZWNhdXNlIG9mIDNyZCBlbGVtZW50IChhYmMpLlxuLVx0aWYgISB2ZXJpZnlfbm9fcGFydGlhbF91cGRhdGUgXCIxIDIgMyA0XCIgXCIxMCAyMCBhYmMgNDBcIjsgdGhlblxuLVx0XHRlY2hvIFwiRkFJTFwiIFx1MDAzZVx1MDAyNjJcbi1cdFx0cmM9MVxuLVx0ZWxzZVxuLVx0XHRlY2hvIFwiT0tcIlxuLVx0Zmlcbi1cdHRlc3RfcmNcbitcdGxvY2FsIGZpbGU9JDEgYmFzZWxpbmU9JDIgc3RhdHVzPTBcbiBcbi1cdGVjaG8gLW4gXCJUZXN0aW5nIG91dCBvZiByYW5nZSBhcnJheSBlbGVtZW50IGRvZXMgbm90IHBhcnRpYWxseSB1cGRhdGUgLi4uIFwiXG4tXHQjIEV4cGVjdCBmYWlsdXJlIGJlY2F1c2Ugb2YgM3JkIGVsZW1lbnQgKGdyZWF0ZXIgdGhhbiBpbnQpXG4tXHRpZiAhIHZlcmlmeV9ub19wYXJ0aWFsX3VwZGF0ZSBcIjEgMiAzIDRcIiBcIjEwIDIwICQoKElOVF9NQVggKyAxKSkgNDBcIjsgdGhlblxuLVx0XHRlY2hvIFwiRkFJTFwiIFx1MDAzZVx1MDAyNjJcbi1cdFx0cmM9MVxuLVx0ZWxzZVxuLVx0XHRlY2hvIFwiT0tcIlxuLVx0Zmlcbi1cdHRlc3RfcmNcbitcdHByaW50ZiAnJXMnIFwiJGJhc2VsaW5lXCIgXHUwMDNlIFwiJGZpbGVcIlxuK1x0cHJpbnRmICclcycgXCIkVUlOVF9NQVhcIiBcdTAwM2UgXCIkZmlsZVwiXG4rXHRhc3NlcnRfY29udGVudCBcIiRmaWxlXCIgXCIkVUlOVF9NQVhcIiB8fCBzdGF0dXM9MVxuIFxuLVx0ZWNobyAtbiBcIlRlc3RpbmcgaW52YWxpZCBmaXJzdCBhcnJheSBlbGVtZW50IGRvZXMgbm90IHVwZGF0ZSAuLi4gXCJcbi1cdCMgRXhwZWN0IGZhaWx1cmUgb2YgMXN0IGVsZW1lbnRcbi1cdGlmICEgdmVyaWZ5X25vX3BhcnRpYWxfdXBkYXRlIFwiMSAyIDMgNFwiIFwiYWJjIDIwIDMwIDQwXCI7IHRoZW5cbi1cdFx0ZWNobyBcIkZBSUxcIiBcdTAwM2VcdTAwMjYyXG4tXHRcdHJjPTFcbi1cdGVsc2Vcbi1cdFx0ZWNobyBcIk9LXCJcbi1cdGZpXG4tXHR0ZXN0X3JjXG4rXHRhc3NlcnRfbm9fcGFydGlhbF91cGRhdGUgXCIkZmlsZVwiIFwiJGJhc2VsaW5lXCIgXCIkKChVSU5UX01BWCArIDEpKVwiIHx8IHN0YXR1cz0xXG4rXHRhc3NlcnRfbm9fcGFydGlhbF91cGRhdGUgXCIkZmlsZVwiIFwiJGJhc2VsaW5lXCIgXCItM1wiIHx8IHN0YXR1cz0xXG4rXG4rXHRyZXR1cm4gXCIkc3RhdHVzXCJcbiB9XG4gXG4tIyBZb3UgYXJlIHVzaW5nIGFuIHVuc2lnbmVkIGludFxuLXJ1bl9saW1pdF9kaWdpdF91aW50KClcbit0ZXN0X2ludF9taW5tYXgoKVxuIHtcbi1cdGVjaG8gLW4gXCJUZXN0aW5nIFVJTlRfTUFYIHdvcmtzIC4uLiBcIlxuLVx0cmVzZXRfdmFsc1xuLVx0VEVTVF9TVFI9XCIkVUlOVF9NQVhcIlxuLVx0ZWNobyAtbiAkVEVTVF9TVFIgXHUwMDNlICRUQVJHRVRcbi1cbi1cdGlmICEgdmVyaWZ5IFwiJHtUQVJHRVR9XCI7IHRoZW5cbi1cdFx0ZWNobyBcIkZBSUxcIiBcdTAwM2VcdTAwMjYyXG4tXHRcdHJjPTFcbi1cdGVsc2Vcbi1cdFx0ZWNobyBcIk9LXCJcbi1cdGZpXG4tXHR0ZXN0X3JjXG4tXG4tXHRlY2hvIC1uIFwiVGVzdGluZyBVSU5UX01BWCArIDEgd2lsbCBmYWlsIGFzIGV4cGVjdGVkIC4uLiBcIlxuLVx0cmVzZXRfdmFsc1xuLVx0VEVTVF9TVFI9JCgoJFVJTlRfTUFYKzEpKVxuLVx0ZWNobyAtbiAkVEVTVF9TVFIgXHUwMDNlICRUQVJHRVQgMlx1MDAzZSAvZGV2L251bGxcbitcdGxvY2FsIHQ9XCIke1NZU0NUTH0vaW50XzAwMDFcIlxuK1x0bG9jYWwgYmFzZWxpbmU9XCI2MFwiIHZhbD1cIjYxXCJcbiBcbi1cdGlmIHZlcmlmeSBcIiR7VEFSR0VUfVwiOyB0aGVuXG4tXHRcdGVjaG8gXCJGQUlMXCIgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRlbHNlXG4tXHRcdGVjaG8gXCJPS1wiXG4tXHRmaVxuLVx0dGVzdF9yY1xuK1x0W1sgLWYgXCIkdFwiIF1dIHx8IHsgUkVUPSRLU0ZUX1NLSVA7IHJldHVybjsgfVxuIFxuLVx0ZWNobyAtbiBcIlRlc3RpbmcgbmVnYXRpdmUgdmFsdWVzIHdpbGwgbm90IHdvcmsgYXMgZXhwZWN0ZWQgLi4uIFwiXG4tXHRyZXNldF92YWxzXG4tXHRURVNUX1NUUj1cIi0zXCJcbi1cdGVjaG8gLW4gJFRFU1RfU1RSIFx1MDAzZSAkVEFSR0VUIDJcdTAwM2UgL2Rldi9udWxsXG4tXG4tXHRpZiB2ZXJpZnkgXCIke1RBUkdFVH1cIjsgdGhlblxuLVx0XHRlY2hvIFwiRkFJTFwiIFx1MDAzZVx1MDAyNjJcbi1cdFx0cmM9MVxuLVx0ZWxzZVxuLVx0XHRlY2hvIFwiT0tcIlxuLVx0Zmlcbi1cdHRlc3RfcmNcbitcdGFzc2VydF93cml0ZV9wYXR0ZXJucyBcIiR0XCIgXCIkYmFzZWxpbmVcIiBcIiR2YWxcIiB8fCBSRVQ9JEtTRlRfRkFJTFxuK1x0YXNzZXJ0X3dpZGVpbnRfd3JpdGVzX3JlamVjdGVkIFwiJHRcIiBcIiRiYXNlbGluZVwiIHx8IFJFVD0kS1NGVF9GQUlMXG4rXHRhc3NlcnRfZGlnaXRfbGltaXQgXCIkdFwiIFwiJGJhc2VsaW5lXCIgfHwgUkVUPSRLU0ZUX0ZBSUxcbiB9XG4gXG4tcnVuX3N0cmluZ3Rlc3RzKClcbit0ZXN0X2ludF9wbGFpbigpXG4ge1xuLVx0ZWNobyAtbiBcIldyaXRpbmcgZW50aXJlIHN5c2N0bCBpbiBzaG9ydCB3cml0ZXMgLi4uIFwiXG4tXHRzZXRfb3JpZ1xuLVx0ZGQgaWY9XCIke1RFU1RfRklMRX1cIiBvZj1cIiR7VEFSR0VUfVwiIGJzPTEgMlx1MDAzZS9kZXYvbnVsbFxuLVx0aWYgISB2ZXJpZnkgXCIke1RBUkdFVH1cIjsgdGhlblxuLVx0XHRlY2hvIFwiRkFJTFwiIFx1MDAzZVx1MDAyNjJcbi1cdFx0cmM9MVxuLVx0ZWxzZVxuLVx0XHRlY2hvIFwiT0tcIlxuLVx0ZmlcbitcdGxvY2FsIHQ9XCIke1NZU0NUTH0vaW50XzAwMDJcIlxuK1x0bG9jYWwgYmFzZWxpbmU9XCIxXCIgdmFsPVwiMlwiXG4gXG4tXHRlY2hvIC1uIFwiV3JpdGluZyBtaWRkbGUgb2Ygc3lzY3RsIGFmdGVyIHVuc3luY2hyb25pemVkIHNlZWsgLi4uIFwiXG4tXHRzZXRfdGVzdFxuLVx0ZGQgaWY9XCIke1RFU1RfRklMRX1cIiBvZj1cIiR7VEFSR0VUfVwiIGJzPTEgc2Vlaz0xIDJcdTAwM2UvZGV2L251bGxcbi1cdGlmIHZlcmlmeSBcIiR7VEFSR0VUfVwiOyB0aGVuXG4tXHRcdGVjaG8gXCJGQUlMXCIgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRlbHNlXG4tXHRcdGVjaG8gXCJPS1wiXG4tXHRmaVxuK1x0W1sgLWYgXCIkdFwiIF1dIHx8IHsgUkVUPSRLU0ZUX1NLSVA7IHJldHVybjsgfVxuIFxuLVx0ZWNobyAtbiBcIkNoZWNraW5nIHN5c2N0bCBtYXhsZW4gaXMgYXQgbGVhc3QgJE1BWExFTiAuLi4gXCJcbi1cdHNldF9vcmlnXG4tXHRwZXJsIC1lICdwcmludCBcIkFcIiB4ICgnXCIke01BWExFTn1cIictMiksIFwiQlwiOycgfCBcXFxuLVx0XHRkZCBvZj1cIiR7VEFSR0VUfVwiIGJzPVwiJHtNQVhMRU59XCIgMlx1MDAzZS9kZXYvbnVsbFxuLVx0aWYgISBncmVwIC1xIEIgXCIke1RBUkdFVH1cIjsgdGhlblxuLVx0XHRlY2hvIFwiRkFJTFwiIFx1MDAzZVx1MDAyNjJcbi1cdFx0cmM9MVxuLVx0ZWxzZVxuLVx0XHRlY2hvIFwiT0tcIlxuLVx0Zmlcbi1cbi1cdGVjaG8gLW4gXCJDaGVja2luZyBzeXNjdGwga2VlcHMgb3JpZ2luYWwgc3RyaW5nIG9uIG92ZXJmbG93IGFwcGVuZCAuLi4gXCJcbi1cdHNldF9vcmlnXG4tXHRwZXJsIC1lICdwcmludCBcIkFcIiB4ICgnXCIke01BWExFTn1cIictMSksIFwiQlwiOycgfCBcXFxuLVx0XHRkZCBvZj1cIiR7VEFSR0VUfVwiIGJzPSQoKCBNQVhMRU4gLSAxICkpIDJcdTAwM2UvZGV2L251bGxcbi1cdGlmIGdyZXAgLXEgQiBcIiR7VEFSR0VUfVwiOyB0aGVuXG4tXHRcdGVjaG8gXCJGQUlMXCIgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRlbHNlXG4tXHRcdGVjaG8gXCJPS1wiXG4tXHRmaVxuLVxuLVx0ZWNobyAtbiBcIkNoZWNraW5nIHN5c2N0bCBzdGF5cyBOVUxMIHRlcm1pbmF0ZWQgb24gd3JpdGUgLi4uIFwiXG4tXHRzZXRfb3JpZ1xuLVx0cGVybCAtZSAncHJpbnQgXCJBXCIgeCAoJ1wiJHtNQVhMRU59XCInLTEpLCBcIkJcIjsnIHwgXFxcbi1cdFx0ZGQgb2Y9XCIke1RBUkdFVH1cIiBicz1cIiR7TUFYTEVOfVwiIDJcdTAwM2UvZGV2L251bGxcbi1cdGlmIGdyZXAgLXEgQiBcIiR7VEFSR0VUfVwiOyB0aGVuXG4tXHRcdGVjaG8gXCJGQUlMXCIgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRlbHNlXG4tXHRcdGVjaG8gXCJPS1wiXG4tXHRmaVxuLVxuLVx0ZWNobyAtbiBcIkNoZWNraW5nIHN5c2N0bCBzdGF5cyBOVUxMIHRlcm1pbmF0ZWQgb24gb3ZlcndyaXRlIC4uLiBcIlxuLVx0c2V0X29yaWdcbi1cdHBlcmwgLWUgJ3ByaW50IFwiQVwiIHggKCdcIiR7TUFYTEVOfVwiJy0xKSwgXCJCQlwiOycgfCBcXFxuLVx0XHRkZCBvZj1cIiR7VEFSR0VUfVwiIGJzPSQoKCAkTUFYTEVOICsgMSApKSAyXHUwMDNlL2Rldi9udWxsXG4tXHRpZiBncmVwIC1xIEIgXCIke1RBUkdFVH1cIjsgdGhlblxuLVx0XHRlY2hvIFwiRkFJTFwiIFx1MDAzZVx1MDAyNjJcbi1cdFx0cmM9MVxuLVx0ZWxzZVxuLVx0XHRlY2hvIFwiT0tcIlxuLVx0Zmlcbi1cbi1cdHRlc3RfcmNcbitcdGFzc2VydF93cml0ZV9wYXR0ZXJucyBcIiR0XCIgXCIkYmFzZWxpbmVcIiBcIiR2YWxcIiB8fCBSRVQ9JEtTRlRfRkFJTFxuK1x0YXNzZXJ0X3dpZGVpbnRfd3JpdGVzX3JlamVjdGVkIFwiJHRcIiBcIiRiYXNlbGluZVwiIHx8IFJFVD0kS1NGVF9GQUlMXG4rXHRhc3NlcnRfZGlnaXRfbGltaXQgXCIkdFwiIFwiJGJhc2VsaW5lXCIgfHwgUkVUPSRLU0ZUX0ZBSUxcbitcdGFzc2VydF9pbnRfcmFuZ2UgXCIkdFwiIFwiJGJhc2VsaW5lXCIgfHwgUkVUPSRLU0ZUX0ZBSUxcbiB9XG4gXG4tdGFyZ2V0X2V4aXN0cygpXG4rdGVzdF91aW50X3BsYWluKClcbiB7XG4tXHRUQVJHRVQ9XCIke1NZU0NUTH0vJDFcIlxuLVx0VEVTVF9JRD1cIiQyXCJcbitcdGxvY2FsIHQ9XCIke1NZU0NUTH0vdWludF8wMDAxXCJcbitcdGxvY2FsIGJhc2VsaW5lPVwiMzE0XCIgdmFsPVwiMzE1XCJcbiBcbi1cdGlmIFsgISAtZiAke1RBUkdFVH0gXSA7IHRoZW5cbi1cdFx0cmV0dXJuIDBcbi1cdGZpXG4tXHRyZXR1cm4gMVxuLX1cbitcdFtbIC1mIFwiJHRcIiBdXSB8fCB7IFJFVD0kS1NGVF9TS0lQOyByZXR1cm47IH1cbiBcbi1ydW5fYml0bWFwdGVzdCgpIHtcbi1cdCMgVG90YWwgbGVuZ3RoIG9mIGJpdG1hcHMgc3RyaW5nIHRvIHVzZSwgYSBiaXQgdW5kZXJcbi1cdCMgdGhlIG1heGltdW0gaW5wdXQgc2l6ZSBvZiB0aGUgdGVzdCBub2RlXG4tXHRMRU5HVEg9JCgoUkFORE9NICUgNjUwMDApKVxuK1x0YXNzZXJ0X3dyaXRlX3BhdHRlcm5zIFwiJHRcIiBcIiRiYXNlbGluZVwiIFwiJHZhbFwiIHx8IFJFVD0kS1NGVF9GQUlMXG4rXHRhc3NlcnRfd2lkZWludF93cml0ZXNfcmVqZWN0ZWQgXCIkdFwiIFwiJGJhc2VsaW5lXCIgfHwgUkVUPSRLU0ZUX0ZBSUxcbitcdGFzc2VydF9kaWdpdF9saW1pdCBcIiR0XCIgXCIkYmFzZWxpbmVcIiB8fCBSRVQ9JEtTRlRfRkFJTFxuK1x0YXNzZXJ0X3VpbnRfcmFuZ2UgXCIkdFwiIFwiJGJhc2VsaW5lXCIgfHwgUkVUPSRLU0ZUX0ZBSUxcbit9XG4gXG4tXHQjIEZpcnN0IGJpdCB0byBzZXRcbi1cdEJJVD0kKChSQU5ET00gJSAxMDI0KSlcbisjIHByb2NfZG9zdHJpbmcoKS1zcGVjaWZpYyB3cml0ZSBwYXR0ZXJuc1xuK2Fzc2VydF9zdHJpbmdfd3JpdGVfcGF0dGVybnMoKSAgIyBcdTAwM2NmaWxlXHUwMDNlIFx1MDAzY2Jhc2VsaW5lXHUwMDNlIFx1MDAzY3ZhbFx1MDAzZSBcdTAwM2NtYXhsZW5cdTAwM2Vcbit7XG4rXHRsb2NhbCBmaWxlPSQxIGJhc2VsaW5lPSQyIHZhbD0kMyBtYXhsZW49JDQgc3RhdHVzPTBcbiBcbi1cdCMgU3RyaW5nIGNvbnRhaW5pbmcgb3VyIGxpc3Qgb2YgYml0cyB0byBzZXRcbi1cdFRFU1RfU1RSPSRCSVRcbitcdHByaW50ZiAnJXMnIFwiJGJhc2VsaW5lXCIgXHUwMDNlIFwiJGZpbGVcIlxuK1x0d3JpdGVfaW5fY2h1bmtzIFwiJGZpbGVcIiBcIiR2YWxcIiAxXG4rXHRhc3NlcnRfY29udGVudCBcIiRmaWxlXCIgXCIkdmFsXCIgfHwgc3RhdHVzPTFcbiBcbi1cdCMgYnVpbGQgdXAgdGhlIHN0cmluZ1xuLVx0d2hpbGUgWyBcIiR7I1RFU1RfU1RSfVwiIC1sZSBcIiRMRU5HVEhcIiBdOyBkb1xuLVx0XHQjIE1ha2Ugc3VyZSBuZXh0IGVudHJ5IGlzIGRpc2NvbnRpZ3VvdXMsXG4tXHRcdCMgc2tpcCBhaGVhZCBhdCBsZWFzdCAyXG4tXHRcdEJJVD0kKChCSVQgKyAkKCgyICsgUkFORE9NICUgMTApKSkpXG4rXHRwcmludGYgJyVzJyBcIiR2YWxcIiBcdTAwM2UgXCIkZmlsZVwiXG4rXHR3cml0ZV9hdF9vZmZzZXQgXCIkZmlsZVwiIFwiJHZhbFwiIDEgMVxuK1x0YXNzZXJ0X2NvbnRlbnRfcmVqZWN0ZWQgXCIkZmlsZVwiIFwiJHZhbFwiIHx8IHN0YXR1cz0xXG4gXG4tXHRcdCMgQWRkIG5ldyBiaXQgdG8gdGhlIGxpc3Rcbi1cdFx0VEVTVF9TVFI9XCIke1RFU1RfU1RSfSwke0JJVH1cIlxuK1x0IyBzeXNjdGwgbWF4bGVuIGlzIGF0IGxlYXN0ICRtYXhsZW5cbitcdHByaW50ZiAnJXMnIFwiJGJhc2VsaW5lXCIgXHUwMDNlIFwiJGZpbGVcIlxuK1x0d3JpdGVfb3ZlcmxvbmcgXCIkZmlsZVwiIFwiJCgobWF4bGVuIC0gMikpXCIgXCJCXCIgXCIkbWF4bGVuXCJcbitcdGFzc2VydF9ncmVwIFwiJGZpbGVcIiBcIkJcIiB8fCBzdGF0dXM9MVxuIFxuLVx0XHQjIFJhbmRvbWx5IG1ha2UgaXQgYSByYW5nZVxuLVx0XHRpZiBbIFwiJCgoUkFORE9NICUgMikpXCIgLWVxIFwiMVwiIF07IHRoZW5cbi1cdFx0XHRSQU5HRV9FTkQ9JCgoQklUICsgJCgoMSArIFJBTkRPTSAlIDEwKSkpKVxuLVx0XHRcdFRFU1RfU1RSPVwiJHtURVNUX1NUUn0tJHtSQU5HRV9FTkR9XCJcbi1cdFx0XHRCSVQ9JFJBTkdFX0VORFxuLVx0XHRmaVxuLVx0ZG9uZVxuK1x0IyBrZWVwIG9yaWdpbmFsIHN0cmluZyBvbiBvdmVyZmxvdyBhcHBlbmRcbitcdHByaW50ZiAnJXMnIFwiJGJhc2VsaW5lXCIgXHUwMDNlIFwiJGZpbGVcIlxuK1x0d3JpdGVfb3ZlcmxvbmcgXCIkZmlsZVwiIFwiJCgobWF4bGVuIC0gMSkpXCIgXCJCXCIgXCIkKChtYXhsZW4gLSAxKSlcIlxuK1x0YXNzZXJ0X2dyZXBfYWJzZW50IFwiJGZpbGVcIiBcIkJcIiB8fCBzdGF0dXM9MVxuIFxuLVx0ZWNobyAtbiBcIkNoZWNraW5nIGJpdG1hcCBoYW5kbGVyIC4uLiBcIlxuLVx0VEVTVF9GSUxFPSQobWt0ZW1wKVxuLVx0ZWNobyAtbiBcIiRURVNUX1NUUlwiIFx1MDAzZSAkVEVTVF9GSUxFXG4rXHQjIHN5c2N0bCBzdGF5cyBOVUxMIHRlcm1pbmF0ZWQgb24gd3JpdGVcbitcdHByaW50ZiAnJXMnIFwiJGJhc2VsaW5lXCIgXHUwMDNlIFwiJGZpbGVcIlxuK1x0d3JpdGVfb3ZlcmxvbmcgXCIkZmlsZVwiIFwiJCgobWF4bGVuIC0gMSkpXCIgXCJCXCIgXCIkbWF4bGVuXCJcbitcdGFzc2VydF9ncmVwX2Fic2VudCBcIiRmaWxlXCIgXCJCXCIgfHwgc3RhdHVzPTFcbiBcbi1cdGNhdCAkVEVTVF9GSUxFIFx1MDAzZSAkVEFSR0VUIDJcdTAwM2UgL2Rldi9udWxsXG4tXHRpZiBbICQ/IC1uZSAwIF07IHRoZW5cbi1cdFx0ZWNobyBcIkZBSUxcIiBcdTAwM2VcdTAwMjYyXG4tXHRcdHJjPTFcbi1cdFx0dGVzdF9yY1xuLVx0ZmlcbitcdCMgc3lzY3RsIHN0YXlzIE5VTEwgdGVybWluYXRlZCBvbiBvdmVyd3JpdGVcbitcdHByaW50ZiAnJXMnIFwiJGJhc2VsaW5lXCIgXHUwMDNlIFwiJGZpbGVcIlxuK1x0d3JpdGVfb3ZlcmxvbmcgXCIkZmlsZVwiIFwiJCgobWF4bGVuIC0gMSkpXCIgXCJCQlwiIFwiJCgobWF4bGVuICsgMSkpXCJcbitcdGFzc2VydF9ncmVwX2Fic2VudCBcIiRmaWxlXCIgXCJCXCIgfHwgc3RhdHVzPTFcbiBcbi1cdGlmICEgdmVyaWZ5X2RpZmZfcHJvY19maWxlIFwiJFRBUkdFVFwiIFwiJFRFU1RfRklMRVwiOyB0aGVuXG4tXHRcdGVjaG8gXCJGQUlMXCIgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRlbHNlXG4tXHRcdGVjaG8gXCJPS1wiXG4tXHRcdHJjPTBcbi1cdGZpXG4tXHR0ZXN0X3JjXG4rXHRyZXR1cm4gXCIkc3RhdHVzXCJcbiB9XG4gXG4tc3lzY3RsX3Rlc3RfMDAwMSgpXG4rdGVzdF9zdHJpbmdfZG9zdHJpbmcoKVxuIHtcbi1cdFRBUkdFVD1cIiR7U1lTQ1RMfS8kKGdldF90ZXN0X3RhcmdldCAwMDAxKVwiXG4tXHRyZXNldF92YWxzXG4tXHRPUklHPSQoY2F0IFwiJHtUQVJHRVR9XCIpXG4tXHRURVNUX1NUUj0kKCggJE9SSUcgKyAxICkpXG4tXG4tXHRydW5fbnVtZXJpY3Rlc3RzXG4tXHRydW5fd2lkZWludF90ZXN0c1xuLVx0cnVuX2xpbWl0X2RpZ2l0XG4tfVxuK1x0bG9jYWwgdD1cIiR7U1lTQ1RMfS9zdHJpbmdfMDAwMVwiXG4rXHRsb2NhbCBiYXNlbGluZT1cIihub25lKVwiIHZhbD1cIlRlc3Rpbmcgc3lzY3RsXCIgbWF4bGVuPTY1XG4gXG4tc3lzY3RsX3Rlc3RfMDAwMigpXG4te1xuLVx0VEFSR0VUPVwiJHtTWVNDVEx9LyQoZ2V0X3Rlc3RfdGFyZ2V0IDAwMDIpXCJcbi1cdHJlc2V0X3ZhbHNcbi1cdE9SSUc9JChjYXQgXCIke1RBUkdFVH1cIilcbi1cdFRFU1RfU1RSPVwiVGVzdGluZyBzeXNjdGxcIlxuLVx0IyBPbmx5IHN0cmluZyBzeXNjdGxzIHN1cHBvcnQgc2Vla2luZy9hcHBlbmRpbmcuXG4tXHRNQVhMRU49NjVcbi1cbi1cdHJ1bl9udW1lcmljdGVzdHNcbi1cdHJ1bl9zdHJpbmd0ZXN0c1xuLX1cbitcdFtbIC1mIFwiJHRcIiBdXSB8fCB7IFJFVD0kS1NGVF9TS0lQOyByZXR1cm47IH1cbiBcbi1zeXNjdGxfdGVzdF8wMDAzKClcbi17XG4tXHRUQVJHRVQ9XCIke1NZU0NUTH0vJChnZXRfdGVzdF90YXJnZXQgMDAwMylcIlxuLVx0cmVzZXRfdmFsc1xuLVx0T1JJRz0kKGNhdCBcIiR7VEFSR0VUfVwiKVxuLVx0VEVTVF9TVFI9JCgoICRPUklHICsgMSApKVxuLVxuLVx0cnVuX251bWVyaWN0ZXN0c1xuLVx0cnVuX3dpZGVpbnRfdGVzdHNcbi1cdHJ1bl9saW1pdF9kaWdpdFxuLVx0cnVuX2xpbWl0X2RpZ2l0X2ludFxuK1x0YXNzZXJ0X3dyaXRlX3BhdHRlcm5zIFwiJHRcIiBcIiRiYXNlbGluZVwiIFwiJHZhbFwiIHx8IFJFVD0kS1NGVF9GQUlMXG4rXHRhc3NlcnRfc3RyaW5nX3dyaXRlX3BhdHRlcm5zIFwiJHRcIiBcIiRiYXNlbGluZVwiIFwiJHZhbFwiIFwiJG1heGxlblwiIHx8IFJFVD0kS1NGVF9GQUlMXG4gfVxuIFxuLXN5c2N0bF90ZXN0XzAwMDQoKVxuKyMgRW1pdCBhIHJhbmRvbSBzeXNjdGwgYml0IG1hcFxuK3JhbmRvbV9iaXRtYXBfc3BlYygpXG4ge1xuLVx0VEFSR0VUPVwiJHtTWVNDVEx9LyQoZ2V0X3Rlc3RfdGFyZ2V0IDAwMDQpXCJcbi1cdHJlc2V0X3ZhbHNcbi1cdE9SSUc9JChjYXQgXCIke1RBUkdFVH1cIilcbi1cdFRFU1RfU1RSPSQoKCAkT1JJRyArIDEgKSlcbi1cbi1cdHJ1bl9udW1lcmljdGVzdHNcbi1cdHJ1bl93aWRlaW50X3Rlc3RzXG4tXHRydW5fbGltaXRfZGlnaXRcbi1cdHJ1bl9saW1pdF9kaWdpdF91aW50XG4tfVxuK1x0bG9jYWwgbGVuZ3RoPSQoKFJBTkRPTSAlIDY1MDAwKSlcbitcdGxvY2FsIGJpdD0kKChSQU5ET00gJSAxMDI0KSlcbitcdGxvY2FsIHNwZWM9JGJpdFxuK1x0bG9jYWwgcmFuZ2VfZW5kXG4gXG4tc3lzY3RsX3Rlc3RfMDAwNSgpXG4te1xuLVx0VEFSR0VUPVwiJHtTWVNDVEx9LyQoZ2V0X3Rlc3RfdGFyZ2V0IDAwMDUpXCJcbi1cdHJlc2V0X3ZhbHNcbi1cdE9SSUc9JChjYXQgXCIke1RBUkdFVH1cIilcbitcdHdoaWxlIFsgXCIkeyNzcGVjfVwiIC1sZSBcIiRsZW5ndGhcIiBdOyBkb1xuK1x0XHQjIEtlZXAgZW50cmllcyBkaXNjb250aWd1b3VzLCBza2lwIGFoZWFkIGJ5IGF0IGxlYXN0IDIuXG4rXHRcdGJpdD0kKChiaXQgKyAyICsgUkFORE9NICUgMTApKVxuK1x0XHRzcGVjPVwiJHtzcGVjfSwke2JpdH1cIlxuIFxuLVx0cnVuX2xpbWl0X2RpZ2l0X2ludF9hcnJheVxuLX1cbitcdFx0aWYgWyBcIiQoKFJBTkRPTSAlIDIpKVwiIC1lcSAxIF07IHRoZW5cbitcdFx0XHRyYW5nZV9lbmQ9JCgoYml0ICsgMSArIFJBTkRPTSAlIDEwKSlcbitcdFx0XHRzcGVjPVwiJHtzcGVjfS0ke3JhbmdlX2VuZH1cIlxuK1x0XHRcdGJpdD0kcmFuZ2VfZW5kXG4rXHRcdGZpXG4rXHRkb25lXG4gXG4tc3lzY3RsX3Rlc3RfMDAwNigpXG4te1xuLVx0VEFSR0VUPVwiJHtTWVNDVEx9LyQoZ2V0X3Rlc3RfdGFyZ2V0IDAwMDYpXCJcbi1cdHJlc2V0X3ZhbHNcbi1cdE9SSUc9XCJcIlxuLVx0cnVuX2JpdG1hcHRlc3RcbitcdGVjaG8gLW4gXCIkc3BlY1wiXG4gfVxuIFxuLXN5c2N0bF90ZXN0XzAwMDcoKVxuKyMgRG8gKm5vdCogcHJlZml4IHdpdGggXCJ0ZXN0X1wiLiBBbGwgYXV0b2dlbmVyYXRlIGJpdG1hcCB0ZXN0cyBjYWxsIHRoaXMgaGVscGVyXG4rYml0bWFwX3JhbmdlX2NoZWNrX29uY2UoKSAgIyBcdTAwM2NpdGVyXHUwMDNlXG4ge1xuLVx0VEFSR0VUPVwiJHtTWVNDVEx9LyQoZ2V0X3Rlc3RfdGFyZ2V0IDAwMDcpXCJcbi1cdGVjaG8gLW4gXCJUZXN0aW5nIGlmICRUQVJHRVQgaXMgc2V0IHRvIDEgLi4uIFwiXG4rXHRsb2NhbCB0PVwiJHtTWVNDVEx9L2JpdG1hcF8wMDAxXCJcbitcdGxvY2FsIHNwZWNfZmlsZSBzZWVkXG4gXG4tXHRpZiBbICEgLWYgJFRBUkdFVCBdOyB0aGVuXG4tXHRcdGVjaG8gLWUgXCJTS0lQUElOR1xcbiRUQVJHRVQgaXMgbm90IHByZXNlbnRcIlxuLVx0XHRyZXR1cm4gJGtzZnRfc2tpcFxuLVx0Zmlcbi1cbi1cdGlmIFsgLWQgJERJUiBdOyB0aGVuXG4tXHRcdGVjaG8gLWUgXCJTS0lQUElOR1xcblRlc3Qgb25seSBwb3NzaWJsZSBpZiBzeXNjdGxfdGVzdCBpcyBidWlsdC1pbiwgbm90IG1vZHVsZTpcIlxuLVx0XHRjYXQgJFRFU1RfRElSL2NvbmZpZyBcdTAwM2VcdTAwMjYyXG4tXHRcdHJldHVybiAka3NmdF9za2lwXG4tXHRmaVxuK1x0W1sgLWYgXCIkdFwiIF1dIHx8IHsgUkVUPSRLU0ZUX1NLSVA7IHJldHVybjsgfVxuIFxuLVx0T1JJRz0kKGNhdCBcIiR7VEFSR0VUfVwiKVxuK1x0c2VlZD0kKChCSVRNQVBfU0VFRCArICQxKSlcbitcdFJBTkRPTT0kc2VlZFxuIFxuLVx0aWYgWyB4JE9SSUcgPSBcIngxXCIgXTsgdGhlblxuLVx0XHRlY2hvIFwiT0tcIlxuLVx0XHRyZXR1cm4gMFxuLVx0ZmlcbitcdHNwZWNfZmlsZT0kKG1rdGVtcClcbitcdHJhbmRvbV9iaXRtYXBfc3BlYyBcdTAwM2UgXCIkc3BlY19maWxlXCJcbiBcbi1cdGlmIFsgISAtZiAvcHJvYy9jbWRsaW5lIF07IHRoZW5cbi1cdFx0ZWNobyAtZSBcIlNLSVBQSU5HXFxuVGhlcmUgaXMgbm8gL3Byb2MvY21kbGluZSB0byBjaGVjayBmb3IgcGFyYW1ldGVyXCJcbi1cdFx0cmV0dXJuICRrc2Z0X3NraXBcbitcdGlmICEgY2F0IFwiJHNwZWNfZmlsZVwiIFx1MDAzZSBcIiR0XCIgMlx1MDAzZS9kZXYvbnVsbDsgdGhlblxuK1x0XHRrdGFwX3ByaW50X21zZyBcIiR0OiB3cml0ZSBvZiByYW5kb20gYml0bWFwIHNwZWMgcmVqZWN0ZWQgKHNlZWQgJHNlZWQpXCJcbitcdFx0UkVUPSRLU0ZUX0ZBSUxcbitcdGVsaWYgISBhc3NlcnRfZGlmZl9wcm9jX2ZpbGUgXCIkdFwiIFwiJHNwZWNfZmlsZVwiOyB0aGVuXG4rXHRcdGt0YXBfcHJpbnRfbXNnIFwiJHQ6IHJlYWRiYWNrIG1pc21hdGNoIChzZWVkICRzZWVkKVwiXG4rXHRcdFJFVD0kS1NGVF9GQUlMXG4gXHRmaVxuIFxuLVx0Rk9VTkQ9JChncmVwIC1jIFwic3lzY3RsWy4vXWRlYnVnWy4vXXRlc3Rfc3lzY3RsWy4vXWJvb3RfaW50PTFcIiAvcHJvYy9jbWRsaW5lKVxuLVx0aWYgWyAkRk9VTkQgPSBcIjFcIiBdOyB0aGVuXG4tXHRcdGVjaG8gLWUgXCJGQUlMXFxuS2VybmVsIHBhcmFtIGZvdW5kIGJ1dCAkVEFSR0VUIGlzIG5vdCAxLlwiIFx1MDAzZVx1MDAyNjJcbi1cdFx0cmM9MVxuLVx0XHR0ZXN0X3JjXG4tXHRmaVxuLVxuLVx0ZWNobyAtZSBcIlNLSVBQSU5HXFxuRXhwZWN0ZWQga2VybmVsIHBhcmFtZXRlciBtaXNzaW5nLlwiXG4tXHRlY2hvIFwiS2VybmVsIG11c3QgYmUgYm9vdGVkIHdpdGggcGFyYW1ldGVyOiBzeXNjdGwuZGVidWcudGVzdF9zeXNjdGwuYm9vdF9pbnQ9MVwiXG4tXHRyZXR1cm4gJGtzZnRfc2tpcFxuK1x0cm0gLWYgXCIkc3BlY19maWxlXCJcbiB9XG4gXG4tc3lzY3RsX3Rlc3RfMDAwOCgpXG4rdGVzdF91bnJlZ2lzdGVyX3JlbW92ZXNfZGlyKClcbiB7XG4tXHRUQVJHRVQ9XCIke1NZU0NUTH0vJChnZXRfdGVzdF90YXJnZXQgMDAwOClcIlxuLVx0ZWNobyAtbiBcIlRlc3RpbmcgaWYgJFRBUkdFVCBpcyBtYXRjaGVkIGluIGtlcm5lbCAuLi4gXCJcbitcdGxvY2FsIHQ9XCIke1NZU0NUTH0vdW5yZWdpc3Rlcl9lcnJvclwiXG4gXG4tXHRpZiBbICEgLWYgJFRBUkdFVCBdOyB0aGVuXG4tXHRcdGVjaG8gLWUgXCJTS0lQUElOR1xcbiRUQVJHRVQgaXMgbm90IHByZXNlbnRcIlxuLVx0XHRyZXR1cm4gJGtzZnRfc2tpcFxuK1x0aWYgW1sgLWQgXCIkdFwiIF1dOyB0aGVuXG4rXHRcdGt0YXBfcHJpbnRfbXNnIFwiJHQ6IGRpcmVjdG9yeSBzdGlsbCBleGlzdHMsIGV4cGVjdGVkIGl0IHRvIGJlIHVucmVnaXN0ZXJlZFwiXG4rXHRcdFJFVD0kS1NGVF9GQUlMXG4gXHRmaVxuK31cbiBcbi1cdE9SSUdfVkFMVUU9JChjYXQgXCIke1RBUkdFVH1cIilcbit0ZXN0X21vdW50X3BvaW50X2Vycm9yKClcbit7XG4rXHRsb2NhbCB0PVwiJHtTWVNDVEx9L21udC9tbnRfZXJyb3JcIlxuIFxuLVx0aWYgWyAkT1JJR19WQUxVRSAtbmUgMSBdOyB0aGVuXG4tXHRcdGVjaG8gXCJGQUlMXCIgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRcdHRlc3RfcmNcbitcdGlmIFtbIC1kIFwiJHRcIiBdXTsgdGhlblxuK1x0XHRrdGFwX3ByaW50X21zZyBcIiR0OiBkaXJlY3RvcnkgdW5leHBlY3RlZGx5IGNyZWF0ZWRcIlxuK1x0XHRSRVQ9JEtTRlRfRkFJTFxuIFx0Zmlcbi1cbi1cdGVjaG8gXCJPS1wiXG4tXHRyZXR1cm4gMFxuIH1cbiBcbi1zeXNjdGxfdGVzdF8wMDA5KClcbit0ZXN0X2VtcHR5X2Rpcl9yZWdpc3RyYXRpb24oKVxuIHtcbi1cdFRBUkdFVD1cIiR7U1lTQ1RMfS8kKGdldF90ZXN0X3RhcmdldCAwMDA5KVwiXG4tXHRlY2hvIC1uIFwiVGVzdGluZyBpZiAkVEFSR0VUIHVucmVnaXN0ZXJlZCBjb3JyZWN0bHkgLi4uIFwiXG4tXHRpZiBbIC1kICRUQVJHRVQgXTsgdGhlblxuLVx0XHRlY2hvIFwiRkFJTFwiIFx1MDAzZVx1MDAyNjJcbi1cdFx0cmM9MVxuLVx0XHR0ZXN0X3JjXG4tXHRmaVxuK1x0bG9jYWwgdD1cIiR7U1lTQ1RMfS9lbXB0eV9hZGRcIlxuIFxuLVx0ZWNobyBcIk9LXCJcbi1cdHJldHVybiAwXG4rXHRpZiBbWyAhIC1kIFwiJHRcIiBdXTsgdGhlblxuK1x0XHRrdGFwX3ByaW50X21zZyBcIiR0OiBkaXJlY3Rvcnkgd2FzIG5vdCBjcmVhdGVkXCJcbitcdFx0UkVUPSRLU0ZUX0ZBSUxcbitcdFx0cmV0dXJuXG4rXHRmaVxuK1x0aWYgW1sgISAtZCBcIiR0L2VtcHR5XCIgXV07IHRoZW5cbitcdFx0a3RhcF9wcmludF9tc2cgXCIkdC9lbXB0eTogZGlyZWN0b3J5IHdhcyBub3QgY3JlYXRlZFwiXG4rXHRcdFJFVD0kS1NGVF9GQUlMXG4rXHRmaVxuIH1cbiBcbi1zeXNjdGxfdGVzdF8wMDEwKClcbit0ZXN0X3U4X3JhbmdlX2NoZWNrKClcbiB7XG4tXHRUQVJHRVQ9XCIke1NZU0NUTH0vJChnZXRfdGVzdF90YXJnZXQgMDAxMClcIlxuLVx0ZWNobyAtbiBcIlRlc3RpbmcgdGhhdCAkVEFSR0VUIHdhcyBub3QgY3JlYXRlZCAuLi4gXCJcbi1cdGlmIFsgLWQgJFRBUkdFVCBdOyB0aGVuXG4tXHRcdGVjaG8gXCJGQUlMXCIgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRcdHRlc3RfcmNcbitcdGxvY2FsIHQ9XCIke1NZU0NUTH0vdThfdmFsaWRcIlxuK1xuK1x0aWYgW1sgISAtZiBcIiR0XCIgXV07IHRoZW5cbitcdFx0a3RhcF9wcmludF9tc2cgXCIkdDogZmlsZSB3YXMgbm90IGNyZWF0ZWRcIlxuK1x0XHRSRVQ9JEtTRlRfRkFJTFxuK1x0XHRyZXR1cm5cbiBcdGZpXG4gXG4tXHRlY2hvIFwiT0tcIlxuLVx0cmV0dXJuIDBcbitcdGFzc2VydF9kbWVzZ19jb3VudCBcInU4X292ZXIgcmFuZ2UgdmFsdWVcIiAxIHx8IFJFVD0kS1NGVF9GQUlMXG4rXHRhc3NlcnRfZG1lc2dfY291bnQgXCJ1OF91bmRlciByYW5nZSB2YWx1ZVwiIDEgfHwgUkVUPSRLU0ZUX0ZBSUxcbiB9XG4gXG4tc3lzY3RsX3Rlc3RfMDAxMSgpXG4rdGVzdF9ib290X3BhcmFtX2ludCgpXG4ge1xuLVx0VEFSR0VUPVwiJHtTWVNDVEx9LyQoZ2V0X3Rlc3RfdGFyZ2V0IDAwMTEpXCJcbi1cdGVjaG8gLW4gXCJUZXN0aW5nIGVtcHR5IGRpciBoYW5kbGluZyBpbiAke1RBUkdFVH0gLi4uIFwiXG4tXHRpZiBbICEgLWQgJHtUQVJHRVR9IF07IHRoZW5cbi1cdFx0ZWNobyAtZSBcIkZBSUxcXG5Db3VsZCBub3QgY3JlYXRlICR7VEFSR0VUfVwiIFx1MDAzZVx1MDAyNjJcbi1cdFx0cmM9MVxuLVx0XHR0ZXN0X3JjXG4tXHRmaVxuK1x0bG9jYWwgdD1cIiR7U1lTQ1RMfS9ib290X2ludFwiXG4rXHRsb2NhbCBvcmlnIGZvdW5kXG4gXG4tXHRUQVJHRVQyPVwiJHtUQVJHRVR9L2VtcHR5XCJcbi1cdGlmIFsgISAtZCAke1RBUkdFVDJ9IF07IHRoZW5cbi1cdFx0ZWNobyAtZSBcIkZBSUxcXG5Db3VsZCBub3QgY3JlYXRlICR7VEFSR0VUMn1cIiBcdTAwM2VcdTAwMjYyXG4tXHRcdHJjPTFcbi1cdFx0dGVzdF9yY1xuLVx0ZmlcbitcdFtbIC1mIFwiJHRcIiBdXSB8fCB7IFJFVD0kS1NGVF9TS0lQOyByZXR1cm47IH1cbiBcbi1cdGVjaG8gXCJPS1wiXG4tXHRyZXR1cm4gMFxuLX1cbitcdCMgQm9vdCBjbWRsaW5lIHBhcmFtcyBvbmx5IGFwcGx5IHdoZW4gdGVzdF9zeXNjdGwgaXMgYnVpbHQgaW4sIG5vdFxuK1x0IyBsb2FkZWQgYXMgYSBtb2R1bGUuXG4rXHRpZiBbWyAtZCBcIiRNT0RVTEVfRElSXCIgXV07IHRoZW5cbitcdFx0a3RhcF9wcmludF9tc2cgXCIkdDogdGVzdCBvbmx5IHBvc3NpYmxlIGlmIHRlc3Rfc3lzY3RsIGlzIGJ1aWx0LWluLCBub3QgYSBtb2R1bGVcIlxuK1x0XHRSRVQ9JEtTRlRfU0tJUFxuK1x0XHRyZXR1cm5cbitcdGZpXG4gXG4tc3lzY3RsX3Rlc3RfMDAxMigpXG4te1xuLVx0VEFSR0VUPVwiJHtTWVNDVEx9LyQoZ2V0X3Rlc3RfdGFyZ2V0IDAwMTIpXCJcbi1cdGVjaG8gLW4gXCJUZXN0aW5nIHU4IHJhbmdlIGNoZWNrIGluIHN5c2N0bCB0YWJsZSBjaGVjayBpbiAke1RBUkdFVH0gLi4uIFwiXG4tXHRpZiBbICEgLWYgJHtUQVJHRVR9IF07IHRoZW5cbi1cdFx0ZWNobyAtZSBcIkZBSUxcXG5Db3VsZCBub3QgY3JlYXRlICR7VEFSR0VUfVwiIFx1MDAzZVx1MDAyNjJcbi1cdFx0cmM9MVxuLVx0XHR0ZXN0X3JjXG4rXHRvcmlnPSQoY2F0IFwiJHRcIilcbitcdGlmIFtbIFwiJG9yaWdcIiA9PSBcIjFcIiBdXTsgdGhlblxuK1x0XHRyZXR1cm5cbiBcdGZpXG4gXG4tXHRsb2NhbCB1OG92ZXJfbXNnPSQoZG1lc2cgfCBncmVwIFwidThfb3ZlciByYW5nZSB2YWx1ZVwiIHwgd2MgLWwpXG4tXHRpZiBbICEgJHt1OG92ZXJfbXNnfSAtZXEgMSBdOyB0aGVuXG4tXHRcdGVjaG8gLWUgXCJGQUlMXFxudTggb3ZlcmZsb3cgbm90IGRldGVjdGVkXCIgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRcdHRlc3RfcmNcbitcdGlmIFtbICEgLWYgL3Byb2MvY21kbGluZSBdXTsgdGhlblxuK1x0XHRrdGFwX3ByaW50X21zZyBcIiR0OiBubyAvcHJvYy9jbWRsaW5lIHRvIGNoZWNrIGZvciB0aGUgYm9vdCBwYXJhbWV0ZXJcIlxuK1x0XHRSRVQ9JEtTRlRfU0tJUFxuK1x0XHRyZXR1cm5cbiBcdGZpXG4gXG4tXHRsb2NhbCB1OHVuZGVyX21zZz0kKGRtZXNnIHwgZ3JlcCBcInU4X3VuZGVyIHJhbmdlIHZhbHVlXCIgfCB3YyAtbClcbi1cdGlmIFsgISAke3U4dW5kZXJfbXNnfSAtZXEgMSBdOyB0aGVuXG4tXHRcdGVjaG8gLWUgXCJGQUlMXFxudTggdW5kZXJmbG93IG5vdCBkZXRlY3RlZFwiIFx1MDAzZVx1MDAyNjJcbi1cdFx0cmM9MVxuLVx0XHR0ZXN0X3JjXG4rXHRmb3VuZD0kKGdyZXAgLWMgXCJzeXNjdGxbLi9dZGVidWdbLi9ddGVzdF9zeXNjdGxbLi9dYm9vdF9pbnQ9MVwiIC9wcm9jL2NtZGxpbmUpXG4rXHRpZiBbWyBcIiRmb3VuZFwiID09IFwiMVwiIF1dOyB0aGVuXG4rXHRcdGt0YXBfcHJpbnRfbXNnIFwiJHQ6IGtlcm5lbCBwYXJhbSBmb3VuZCBvbiBjbWRsaW5lIGJ1dCB2YWx1ZSBpcyBub3QgMVwiXG4rXHRcdFJFVD0kS1NGVF9GQUlMXG4rXHRcdHJldHVyblxuIFx0ZmlcbiBcbi1cdGVjaG8gXCJPS1wiXG4tXHRyZXR1cm4gMFxuK1x0a3RhcF9wcmludF9tc2cgXCIkdDoga2VybmVsIG5vdCBib290ZWQgd2l0aCBzeXNjdGwuZGVidWcudGVzdF9zeXNjdGwuYm9vdF9pbnQ9MVwiXG4rXHRSRVQ9JEtTRlRfU0tJUFxuIH1cbiBcbi1zeXNjdGxfdGVzdF8wMDEzKClcbit0ZXN0X3N5c2N0bF9tYWNyb19tYXRjaCgpXG4ge1xuLVx0VEFSR0VUPVwiJHtTWVNDVEx9LyQoZ2V0X3Rlc3RfdGFyZ2V0IDAwMTMpXCJcbi1cdHJlc2V0X3ZhbHNcbitcdGxvY2FsIHQ9XCIke1NZU0NUTH0vbWF0Y2hfaW50XCJcbitcbitcdFtbIC1mIFwiJHRcIiBdXSB8fCB7IFJFVD0kS1NGVF9TS0lQOyByZXR1cm47IH1cbiBcbi1cdHJ1bl9pbnRfYXJyYXlfbm9fcGFydGlhbF91cGRhdGVcbitcdGFzc2VydF9jb250ZW50IFwiJHRcIiBcIjFcIiB8fCBSRVQ9JEtTRlRfRkFJTFxuIH1cbiBcbi1saXN0X3Rlc3RzKClcbitydW5fb25lKClcbiB7XG4tXHRlY2hvIFwiVGVzdCBJRCBsaXN0OlwiXG4tXHRlY2hvXG4tXHRlY2hvIFwiVEVTVF9JRCB4IE5VTV9URVNUXCJcbi1cdGVjaG8gXCJURVNUX0lEOiAgIFRlc3QgSURcIlxuLVx0ZWNobyBcIk5VTV9URVNUUzogUmVjb21tZW5kZWQgbnVtYmVyIG9mIHRpbWVzIHRvIHJ1biB0aGUgdGVzdFwiXG4tXHRlY2hvXG4tXHRlY2hvIFwiMDAwMSB4ICQoZ2V0X3Rlc3RfY291bnQgMDAwMSkgLSB0ZXN0cyBwcm9jX2RvaW50dmVjX21pbm1heCgpXCJcbi1cdGVjaG8gXCIwMDAyIHggJChnZXRfdGVzdF9jb3VudCAwMDAyKSAtIHRlc3RzIHByb2NfZG9zdHJpbmcoKVwiXG4tXHRlY2hvIFwiMDAwMyB4ICQoZ2V0X3Rlc3RfY291bnQgMDAwMykgLSB0ZXN0cyBwcm9jX2RvaW50dmVjKClcIlxuLVx0ZWNobyBcIjAwMDQgeCAkKGdldF90ZXN0X2NvdW50IDAwMDQpIC0gdGVzdHMgcHJvY19kb3VpbnR2ZWMoKVwiXG4tXHRlY2hvIFwiMDAwNSB4ICQoZ2V0X3Rlc3RfY291bnQgMDAwNSkgLSB0ZXN0cyBwcm9jX2RvdWludHZlYygpIGFycmF5XCJcbi1cdGVjaG8gXCIwMDA2IHggJChnZXRfdGVzdF9jb3VudCAwMDA2KSAtIHRlc3RzIHByb2NfZG9fbGFyZ2VfYml0bWFwKClcIlxuLVx0ZWNobyBcIjAwMDcgeCAkKGdldF90ZXN0X2NvdW50IDAwMDcpIC0gdGVzdHMgc2V0dGluZyBzeXNjdGwgZnJvbSBrZXJuZWwgYm9vdCBwYXJhbVwiXG4tXHRlY2hvIFwiMDAwOCB4ICQoZ2V0X3Rlc3RfY291bnQgMDAwOCkgLSB0ZXN0cyBzeXNjdGwgbWFjcm8gdmFsdWVzIG1hdGNoXCJcbi1cdGVjaG8gXCIwMDA5IHggJChnZXRfdGVzdF9jb3VudCAwMDA5KSAtIHRlc3RzIHN5c2N0IHVucmVnaXN0ZXJcIlxuLVx0ZWNobyBcIjAwMTAgeCAkKGdldF90ZXN0X2NvdW50IDAwMTApIC0gdGVzdHMgc3lzY3QgbW91bnQgcG9pbnRcIlxuLVx0ZWNobyBcIjAwMTEgeCAkKGdldF90ZXN0X2NvdW50IDAwMTEpIC0gdGVzdHMgZW1wdHkgZGlyZWN0b3JpZXNcIlxuLVx0ZWNobyBcIjAwMTIgeCAkKGdldF90ZXN0X2NvdW50IDAwMTIpIC0gdGVzdHMgcmFuZ2UgY2hlY2sgZm9yIHU4IHByb2NfaGFuZGxlclwiXG4tXHRlY2hvIFwiMDAxMyB4ICQoZ2V0X3Rlc3RfY291bnQgMDAxMykgLSB0ZXN0cyBwYXJ0aWFsbHkgdXBkYXRlIHZlY3RvcnMgb24gZXJyb3JcIlxuK1x0bG9jYWwgbmFtZT0kMVxuK1xuK1x0IyBTdWJzaGVsbDogYSB0ZXN0IGNhbm5vdCBsZWFrIHZhcnMvY3dkL3RyYXBzIGludG8gdGhlIG5leHQgb25lLCBhbmQgYW5cbitcdCMgYWNjaWRlbnRhbCBgZXhpdGAgaW5zaWRlIGEgdGVzdCBraWxscyBvbmx5IGl0cyBvd24gc3Vic2hlbGwuXG4rXHQoIFJFVD0kS1NGVF9QQVNTOyBcIiRuYW1lXCI7IGV4aXQgJFJFVCApXG4rXG4rXHRjYXNlICQ/IGluXG4rXHRcIiRLU0ZUX1BBU1NcIikga3RhcF90ZXN0X3Bhc3MgXCIkbmFtZVwiIDs7XG4rXHRcIiRLU0ZUX1NLSVBcIikga3RhcF90ZXN0X3NraXAgXCIkbmFtZVwiIDs7XG4rXHQqKSAgICAgICAgICBrdGFwX3Rlc3RfZmFpbCBcIiRuYW1lXCIgOztcbitcdGVzYWNcbiB9XG4gXG4gdXNhZ2UoKVxuIHtcbi1cdE5VTV9URVNUUz0kKGdyZXAgLW8gJyAnIFx1MDAzY1x1MDAzY1x1MDAzY1wiJEFMTF9URVNUU1wiIHwgZ3JlcCAtYyAuKVxuLVx0bGV0IE5VTV9URVNUUz0kTlVNX1RFU1RTKzFcbi1cdE1BWF9URVNUPSQocHJpbnRmIFwiJTA0ZFxcblwiICROVU1fVEVTVFMpXG4tXHRlY2hvIFwiVXNhZ2U6ICQwIFsgLXQgXHUwMDNjNC1udW1iZXItZGlnaXRcdTAwM2UgXSB8IFsgLXcgXHUwMDNjNC1udW1iZXItZGlnaXRcdTAwM2UgXSB8XCJcbi1cdGVjaG8gXCJcdFx0IFsgLXMgXHUwMDNjNC1udW1iZXItZGlnaXRcdTAwM2UgXSB8IFsgLWMgXHUwMDNjNC1udW1iZXItZGlnaXRcdTAwM2UgXHUwMDNjdGVzdC0gY291bnRcdTAwM2VcIlxuLVx0ZWNobyBcIiAgICAgICAgICAgWyBhbGwgXSBbIC1oIHwgLS1oZWxwIF0gWyAtbCBdXCJcbi1cdGVjaG8gXCJcIlxuLVx0ZWNobyBcIlZhbGlkIHRlc3RzOiAwMDAxLSRNQVhfVEVTVFwiXG4tXHRlY2hvIFwiXCJcbi1cdGVjaG8gXCIgICAgYWxsICAgICBSdW5zIGFsbCB0ZXN0cyAoZGVmYXVsdClcIlxuLVx0ZWNobyBcIiAgICAtdCAgICAgIFJ1biB0ZXN0IElEIHRoZSByZWNvbW1lbmRlZCBudW1iZXIgb2YgdGltZXNcIlxuLVx0ZWNobyBcIiAgICAtdyAgICAgIFdhdGNoIHRlc3QgSUQgcnVuIHVudGlsIGl0IHJ1bnMgaW50byBhbiBlcnJvclwiXG4tXHRlY2hvIFwiICAgIC1jICAgICAgUnVuIHRlc3QgSUQgb25jZVwiXG4tXHRlY2hvIFwiICAgIC1zICAgICAgUnVuIHRlc3QgSUQgeCB0ZXN0LWNvdW50IG51bWJlciBvZiB0aW1lc1wiXG4tXHRlY2hvIFwiICAgIC1sICAgICAgTGlzdCBhbGwgdGVzdCBJRCBsaXN0XCJcbi1cdGVjaG8gXCIgLWh8LS1oZWxwICBIZWxwXCJcbi1cdGVjaG9cbi1cdGVjaG8gXCJJZiBhbiBlcnJvciBldmVyeSBvY2N1cnMgZXhlY3V0aW9uIHdpbGwgaW1tZWRpYXRlbHkgdGVybWluYXRlLlwiXG4tXHRlY2hvIFwiSWYgeW91IGFyZSBhZGRpbmcgYSBuZXcgdGVzdCB0cnkgdXNpbmcgLXcgXHUwMDNjdGVzdC1JRFx1MDAzZSBmaXJzdCB0b1wiXG4tXHRlY2hvIFwibWFrZSBzdXJlIHRoZSB0ZXN0IHBhc3NlcyBhIHNlcmllcyBvZiB0ZXN0cy5cIlxuLVx0ZWNob1xuLVx0ZWNobyBFeGFtcGxlIHVzZXM6XG4tXHRlY2hvXG4tXHRlY2hvIFwiJFRFU1RfTkFNRS5zaCAgICAgICAgICAgIC0tIGV4ZWN1dGVzIGFsbCB0ZXN0c1wiXG4tXHRlY2hvIFwiJFRFU1RfTkFNRS5zaCAtdCAwMDAyICAgIC0tIEV4ZWN1dGVzIHRlc3QgSUQgMDAwMiB0aGUgcmVjb21tZW5kZWQgbnVtYmVyIG9mIHRpbWVzXCJcbi1cdGVjaG8gXCIkVEVTVF9OQU1FLnNoIC13IDAwMDIgICAgLS0gV2F0Y2ggdGVzdCBJRCAwMDAyIHJ1biB1bnRpbCBhbiBlcnJvciBvY2N1cnNcIlxuLVx0ZWNobyBcIiRURVNUX05BTUUuc2ggLXMgMDAwMiAgICAtLSBSdW4gdGVzdCBJRCAwMDAyIG9uY2VcIlxuLVx0ZWNobyBcIiRURVNUX05BTUUuc2ggLWMgMDAwMiAzICAtLSBSdW4gdGVzdCBJRCAwMDAyIHRocmVlIHRpbWVzXCJcbi1cdGVjaG9cbi1cdGxpc3RfdGVzdHNcbi1cdGV4aXQgMVxuLX1cbitcdGNhdCBcdTAwM2NcdTAwM2MtRU9GXG4rXHRVc2FnZTogJDAgWy1yIE5dIFstbF0gWy10IFRdIFstcyBOXSBbLWh8LS1oZWxwXVxuIFxuLWZ1bmN0aW9uIHRlc3RfbnVtKClcbi17XG4tXHRyZT0nXlswLTldKyQnXG4tXHRpZiAhIFtbICQxID1+ICRyZSBdXTsgdGhlblxuLVx0XHR1c2FnZVxuLVx0Zmlcbi19XG4tZnVuY3Rpb24gcmVtb3ZlX2xlYWRpbmdfemVyb3MoKVxuLXtcbi1cdGVjaG8gJDEgfCBzZWQgJ3MvXjAqLy8nXG4tfVxuK1x0UnVucyBldmVyeSBhdXRvLWRpc2NvdmVyZWQgdGVzdF8qIGZ1bmN0aW9uLiBTZXR0aW5nIFNZU0NUTF9URVNUUyB3aWxsXG4rXHRvdmVycmlkZSB0aGUgZGVmYXVsdCBhbmQgcGFzc2luZyAtdCB3aWxsIG92ZXJyaWRlIGJvdGggZW52IHZhciBhbmQgdGhlXG4rXHRkZWZhdWx0LlxuIFxuLWZ1bmN0aW9uIGdldF90ZXN0X2NvdW50KClcbi17XG4tXHR0ZXN0X251bSAkMVxuLVx0YXdrX2ZpZWxkPSQocmVtb3ZlX2xlYWRpbmdfemVyb3MgJDEpXG4tXHRURVNUX0RBVEE9JChlY2hvICRBTExfVEVTVFMgfCBhd2sgJ3twcmludCAkJyRhd2tfZmllbGQnfScpXG4tXHRlY2hvICR7VEVTVF9EQVRBfSB8IGF3ayAtRlwiOlwiICd7cHJpbnQgJDJ9J1xuLX1cbitcdCAgICAtciBOICAgICAgICAgIHJlcGVhdCBzZWxlY3RlZCB0ZXN0cyBOIHRpbWVzIChkZWZhdWx0IDEpXG4rXHQgICAgLWwgICAgICAgICAgICBsaXN0IGRpc2NvdmVyZWQgdGVzdHNcbitcdCAgICAtdCBUICAgICAgICAgIHNwYWNlIHNlcGFyYXRlZCB0ZXN0cyBsaXN0LiBGb3IgZXhhbXBsZSBcInRlc3RfMSB0ZXN0XzJcIlxuK1x0ICAgIC1zIE4gICAgICAgICAgYmFzZSBzZWVkIGZvciB0aGUgcmFuZG9taXplZCBiaXRtYXAgaXRlcmF0aW9ucy5cbitcdCAgICAtaCwgLS1oZWxwICAgIGhlbHBcbiBcbi1mdW5jdGlvbiBnZXRfdGVzdF9lbmFibGVkKClcbi17XG4tXHR0ZXN0X251bSAkMVxuLVx0YXdrX2ZpZWxkPSQocmVtb3ZlX2xlYWRpbmdfemVyb3MgJDEpXG4tXHRURVNUX0RBVEE9JChlY2hvICRBTExfVEVTVFMgfCBhd2sgJ3twcmludCAkJyRhd2tfZmllbGQnfScpXG4tXHRlY2hvICR7VEVTVF9EQVRBfSB8IGF3ayAtRlwiOlwiICd7cHJpbnQgJDN9J1xuK1x0ICAgIFNZU0NUTF9URVNUUz0ndGVzdF8xIHRlc3RfMicgJDAgIHJ1biBvbmx5IHRoZSBuYW1lZCB0ZXN0c1xuK1x0RU9GXG4gfVxuIFxuLWZ1bmN0aW9uIGdldF90ZXN0X3RhcmdldCgpXG4rbGlzdF90ZXN0cygpXG4ge1xuLVx0dGVzdF9udW0gJDFcbi1cdGF3a19maWVsZD0kKHJlbW92ZV9sZWFkaW5nX3plcm9zICQxKVxuLVx0VEVTVF9EQVRBPSQoZWNobyAkQUxMX1RFU1RTIHwgYXdrICd7cHJpbnQgJCckYXdrX2ZpZWxkJ30nKVxuLVx0ZWNobyAke1RFU1RfREFUQX0gfCBhd2sgLUZcIjpcIiAne3ByaW50ICQ0fSdcbitcdGVjaG8gXCJEaXNjb3ZlcmVkIHRlc3RzOlwiXG4rXHRsb2NhbCB0XG4rXHRmb3IgdCBpbiAkQUxMX1RFU1RTOyBkb1xuK1x0XHRlY2hvIFwiICAkdFwiXG4rXHRkb25lXG4gfVxuIFxuLWZ1bmN0aW9uIGdldF90ZXN0X3NraXBfbm9fdGFyZ2V0KClcbitjaGVja19yZXFzKClcbiB7XG4tXHR0ZXN0X251bSAkMVxuLVx0YXdrX2ZpZWxkPSQocmVtb3ZlX2xlYWRpbmdfemVyb3MgJDEpXG4tXHRURVNUX0RBVEE9JChlY2hvICRBTExfVEVTVFMgfCBhd2sgJ3twcmludCAkJyRhd2tfZmllbGQnfScpXG4tXHRlY2hvICR7VEVTVF9EQVRBfSB8IGF3ayAtRlwiOlwiICd7cHJpbnQgJDV9J1xuLX1cbitcdGxvY2FsIHVpZFxuK1x0dWlkPSQoaWQgLXUpXG4gXG4tZnVuY3Rpb24gc2tpcF90ZXN0KClcbi17XG4tXHRURVNUX0lEPSQxXG4tXHRURVNUX1RBUkdFVD0kMlxuLVx0aWYgdGFyZ2V0X2V4aXN0cyAkVEVTVF9UQVJHRVQgJFRFU1RfSUQ7IHRoZW5cbi1cdFx0VEVTVF9TS0lQPSQoZ2V0X3Rlc3Rfc2tpcF9ub190YXJnZXQgJFRFU1RfSUQpXG4tXHRcdGlmIFtbICRURVNUX1NLSVAgLWVxIFwiMVwiIF1dOyB0aGVuXG4tXHRcdFx0ZWNobyBcIlRhcmdldCAkVEVTVF9UQVJHRVQgZm9yIHRlc3QgJFRFU1RfSUQgZG9lcyBub3QgZXhpc3QgLi4uIFNLSVBQSU5HXCJcbi1cdFx0XHRyZXR1cm4gMFxuLVx0XHRmaVxuK1x0aWYgWyBcIiR1aWRcIiAtbmUgMCBdOyB0aGVuXG4rXHRcdGt0YXBfc2tpcF9hbGwgXCJtdXN0IGJlIHJ1biBhcyByb290XCJcbitcdFx0ZXhpdCBcIiRLU0ZUX1NLSVBcIlxuK1x0ZmlcbitcbitcdGlmICEgd2hpY2ggZ2V0Y29uZiBcdTAwM2UgL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxOyB0aGVuXG4rXHRcdGt0YXBfc2tpcF9hbGwgXCIkMDogWW91IG5lZWQgZ2V0Y29uZiBpbnN0YWxsZWRcIlxuK1x0XHRleGl0IFwiJEtTRlRfU0tJUFwiXG4rXHRmaVxuK1xuK1x0aWYgISB3aGljaCBkaWZmIFx1MDAzZSAvZGV2L251bGwgMlx1MDAzZVx1MDAyNjE7IHRoZW5cbitcdFx0a3RhcF9za2lwX2FsbCBcIiQwOiBZb3UgbmVlZCBkaWZmIGluc3RhbGxlZFwiXG4rXHRcdGV4aXQgXCIkS1NGVF9TS0lQXCJcbiBcdGZpXG4tXHRyZXR1cm4gMVxuIH1cbiBcbi1mdW5jdGlvbiBydW5fYWxsX3Rlc3RzKClcbitjaGVja19hcmdzKCkgICMgXHUwMDNjcmVwZWF0XHUwMDNlIFx1MDAzY3NlbGVjdGVkXHUwMDNlIFx1MDAzY3NlZWRcdTAwM2VcbiB7XG4tXHRmb3IgaSBpbiAkQUxMX1RFU1RTIDsgZG9cbi1cdFx0VEVTVF9JRD0ke2klOio6KjoqOip9XG4tXHRcdEVOQUJMRUQ9JChnZXRfdGVzdF9lbmFibGVkICRURVNUX0lEKVxuLVx0XHRURVNUX0NPVU5UPSQoZ2V0X3Rlc3RfY291bnQgJFRFU1RfSUQpXG4tXHRcdFRFU1RfVEFSR0VUPSQoZ2V0X3Rlc3RfdGFyZ2V0ICRURVNUX0lEKVxuLVxuLVx0XHRpZiBbWyAkRU5BQkxFRCAtZXEgXCIxXCIgXV07IHRoZW5cbi1cdFx0XHR0ZXN0X2Nhc2UgJFRFU1RfSUQgJFRFU1RfQ09VTlQgJFRFU1RfVEFSR0VUXG4rXHRsb2NhbCByZXBlYXRfYXJnPVwiJDFcIlxuK1x0bG9jYWwgc2VsZWN0ZWRfYXJnPVwiJDJcIlxuK1x0bG9jYWwgc2VlZF9hcmc9XCIkM1wiXG4rXHRsb2NhbCB0XG4rXG4rXHRpZiBbIC16IFwiJHNlbGVjdGVkX2FyZ1wiIF07IHRoZW5cbitcdFx0a3RhcF9leGl0X2ZhaWxfbXNnIFwibm8gdGVzdCBzZWxlY3RlZFwiXG4rXHRmaVxuK1xuK1x0aWYgISBbWyBcIiRyZXBlYXRfYXJnXCIgPX4gXlswLTldKyQgXV07IHRoZW5cbitcdFx0a3RhcF9leGl0X2ZhaWxfbXNnIFwicmVwZWF0IGFyZ3VtZW50ICckcmVwZWF0X2FyZycgaXMgbm90IGEgbnVtYmVyXCJcbitcdGZpXG4rXG4rXHRpZiAhIFtbIFwiJHNlZWRfYXJnXCIgPX4gXlswLTldKyQgXV07IHRoZW5cbitcdFx0a3RhcF9leGl0X2ZhaWxfbXNnIFwic2VlZCBhcmd1bWVudCAnJHNlZWRfYXJnJyBpcyBub3QgYSBudW1iZXJcIlxuK1x0ZmlcbitcbitcdGZvciB0IGluICRzZWxlY3RlZF9hcmc7IGRvXG4rXHRcdGlmICEgZGVjbGFyZSAtRiBcIiR0XCIgXHUwMDNlIC9kZXYvbnVsbDsgdGhlblxuK1x0XHRcdGt0YXBfZXhpdF9mYWlsX21zZyBcInVua25vd24gc2VsZWN0ZWQgdGVzdCAnJHQnXCJcbiBcdFx0ZmlcbiBcdGRvbmVcbiB9XG4gXG4tZnVuY3Rpb24gd2F0Y2hfbG9nKClcbithbGxvd191c2VyX2RlZmF1bHRzKClcbiB7XG4tXHRpZiBbICQjIC1uZSAzIF07IHRoZW5cbi1cdFx0Y2xlYXJcbitcdGlmIFsgLXogXCIke01PRFVMRV9ESVJ9XCIgXTsgdGhlblxuK1x0XHRNT0RVTEVfRElSPVwiL3N5cy9tb2R1bGUvdGVzdF9zeXNjdGwvXCJcbitcdGZpXG4rXHRpZiBbIC16IFwiJHtTWVNDVEx9XCIgXTsgdGhlblxuK1x0XHRTWVNDVEw9XCIvcHJvYy9zeXMvZGVidWcvdGVzdF9zeXNjdGxcIlxuK1x0ZmlcbitcdGlmIFsgLXogXCIke1BST0RfU1lTQ1RMfVwiIF07IHRoZW5cbitcdFx0UFJPRF9TWVNDVEw9XCIvcHJvYy9zeXNcIlxuK1x0ZmlcbitcdGlmIFsgLXogXCIke1dSSVRFU19TVFJJQ1R9XCIgXTsgdGhlblxuK1x0XHRXUklURVNfU1RSSUNUPVwiJHtQUk9EX1NZU0NUTH0va2VybmVsL3N5c2N0bF93cml0ZXNfc3RyaWN0XCJcbitcdGZpXG4rXHRpZiBbIC16IFwiJHtCSVRNQVBfSVRFUkFUSU9OU31cIiBdOyB0aGVuXG4rXHRcdEJJVE1BUF9JVEVSQVRJT05TPTUwXG4rXHRmaVxuK1x0IyBTZXQgc2VlZCBmb3IgYml0bWFwIHJhbmRvbSB0ZXN0c1xuK1x0aWYgWyAteiBcIiR7QklUTUFQX1NFRUR9XCIgXTsgdGhlblxuK1x0XHRCSVRNQVBfU0VFRD0kUkFORE9NXG4gXHRmaVxuLVx0ZGF0ZVxuLVx0ZWNobyBcIlJ1bm5pbmcgdGVzdDogJDIgLSBydW4gIyQxXCJcbiB9XG4gXG4tZnVuY3Rpb24gd2F0Y2hfY2FzZSgpXG4rY2hlY2tfcHJvZHVjdGlvbl9zeXNjdGxfd3JpdGVzX3N0cmljdCgpXG4ge1xuLVx0aT0wXG4tXHR3aGlsZSBbIDEgXTsgZG9cbi1cbi1cdFx0aWYgWyAkIyAtZXEgMSBdOyB0aGVuXG4tXHRcdFx0dGVzdF9udW0gJDFcbi1cdFx0XHR3YXRjaF9sb2cgJGkgJHtURVNUX05BTUV9X3Rlc3RfJDFcbi1cdFx0XHQke1RFU1RfTkFNRX1fdGVzdF8kMVxuLVx0XHRlbHNlXG4tXHRcdFx0d2F0Y2hfbG9nICRpIGFsbFxuLVx0XHRcdHJ1bl9hbGxfdGVzdHNcbitcdGlmIFsgISAtZSBcIiR7V1JJVEVTX1NUUklDVH1cIiBdOyB0aGVuXG4rXHRcdGt0YXBfcHJpbnRfbXNnIFwiJHtXUklURVNfU1RSSUNUfSBtaXNzaW5nLCBza2lwcGluZyBzdHJpY3Qgd3JpdGUgY2hlY2sgKG9sZCBrZXJuZWw/KVwiXG4rXHRlbHNlXG4rXHRcdG9sZF9zdHJpY3Q9JChjYXQgXCIke1dSSVRFU19TVFJJQ1R9XCIpXG4rXHRcdGlmIFsgXCIkb2xkX3N0cmljdFwiICE9IFwiMVwiIF07IHRoZW5cbitcdFx0XHRrdGFwX3ByaW50X21zZyBcImZvcmNpbmcgJHtXUklURVNfU1RSSUNUfSB0byAxICh3YXMgJHtvbGRfc3RyaWN0fSlcIlxuK1x0XHRcdGVjaG8gXCIxXCIgXHUwMDNlIFwiJHtXUklURVNfU1RSSUNUfVwiXG4gXHRcdGZpXG4tXHRcdGxldCBpPSRpKzFcbi1cdGRvbmVcbitcdGZpXG4rXG4rXHRpZiBbIC16IFwiJHtQQUdFX1NJWkV9XCIgXTsgdGhlblxuK1x0XHRQQUdFX1NJWkU9JChnZXRjb25mIFBBR0VTSVpFKVxuK1x0ZmlcbitcdGlmIFsgLXogXCIke01BWF9ESUdJVFN9XCIgXTsgdGhlblxuK1x0XHRNQVhfRElHSVRTPSQoKFBBR0VfU0laRSAvIDgpKVxuK1x0ZmlcbitcdGlmIFsgLXogXCIke0lOVF9NQVh9XCIgXTsgdGhlblxuK1x0XHRJTlRfTUFYPSQoZ2V0Y29uZiBJTlRfTUFYKVxuK1x0ZmlcbitcdGlmIFsgLXogXCIke1VJTlRfTUFYfVwiIF07IHRoZW5cbitcdFx0VUlOVF9NQVg9JChnZXRjb25mIFVJTlRfTUFYKVxuK1x0ZmlcbiB9XG4gXG4tZnVuY3Rpb24gdGVzdF9jYXNlKClcbitsb2FkX3JlcV9tb2QoKVxuIHtcbi1cdFRFU1RfSUQ9JDFcbi1cdE5VTV9URVNUUz0kMlxuLVx0VEFSR0VUPSQzXG4tXG4tXHRpZiBza2lwX3Rlc3QgJFRFU1RfSUQgJFRBUkdFVDsgdGhlblxuLVx0XHRyZXR1cm5cbitcdGlmIFsgISAtZCBcIiR7U1lTQ1RMfVwiIF07IHRoZW5cbitcdFx0aWYgISBtb2Rwcm9iZSAtcSAtbiBcIiR7VEVTVF9EUklWRVJ9XCI7IHRoZW5cbitcdFx0XHRrdGFwX3NraXBfYWxsIFwibW9kdWxlICR7VEVTVF9EUklWRVJ9IG5vdCBmb3VuZC4gXFxcbitcdFx0XHRcdFlvdSBtdXN0IHNldCBDT05GSUdfVEVTVF9TWVNDVEw9bSBpbiB5b3VyIGtlcm5lbFwiXG4rXHRcdFx0ZXhpdCBcIiRLU0ZUX1NLSVBcIlxuK1x0XHRmaVxuK1x0XHRpZiAhIG1vZHByb2JlIFwiJHtURVNUX0RSSVZFUn1cIjsgdGhlblxuK1x0XHRcdGt0YXBfZXhpdF9mYWlsX21zZyBcIm1vZHByb2JlICR7VEVTVF9EUklWRVJ9IGZhaWxlZFwiXG4rXHRcdGZpXG4gXHRmaVxuLVxuLVx0aT0wXG4tXHR3aGlsZSBbICRpIC1sdCAkTlVNX1RFU1RTIF07IGRvXG4tXHRcdHRlc3RfbnVtICRURVNUX0lEXG4tXHRcdHdhdGNoX2xvZyAkaSAke1RFU1RfTkFNRX1fdGVzdF8ke1RFU1RfSUR9IG5vY2xlYXJcbi1cdFx0UlVOX1RFU1Q9JHtURVNUX05BTUV9X3Rlc3RfJHtURVNUX0lEfVxuLVx0XHQkUlVOX1RFU1Rcbi1cdFx0bGV0IGk9JGkrMVxuLVx0ZG9uZVxuIH1cbiBcbi1mdW5jdGlvbiBwYXJzZV9hcmdzKClcbisjIENsZWFudXAgb25seSEgRG8gbm90IGNhbGwgZXhpdCBoZXJlIG9yIGl0IHdpbGwgc2lsZW50bHkgb3ZlcnJpZGUgS1RBUCBleGl0IHN0YXR1c1xuK3Jlc3RvcmVfc3lzY3RsX3dyaXRlc19zdHJpY3QoKVxuIHtcbi1cdGlmIFsgJCMgLWVxIDAgXTsgdGhlblxuLVx0XHRydW5fYWxsX3Rlc3RzXG4tXHRlbHNlXG4tXHRcdGlmIFtbIFwiJDFcIiA9IFwiYWxsXCIgXV07IHRoZW5cbi1cdFx0XHRydW5fYWxsX3Rlc3RzXG4tXHRcdGVsaWYgW1sgXCIkMVwiID0gXCItd1wiIF1dOyB0aGVuXG4tXHRcdFx0c2hpZnRcbi1cdFx0XHR3YXRjaF9jYXNlICRAXG4tXHRcdGVsaWYgW1sgXCIkMVwiID0gXCItdFwiIF1dOyB0aGVuXG4tXHRcdFx0c2hpZnRcbi1cdFx0XHR0ZXN0X251bSAkMVxuLVx0XHRcdHRlc3RfY2FzZSAkMSAkKGdldF90ZXN0X2NvdW50ICQxKSAkKGdldF90ZXN0X3RhcmdldCAkMSlcbi1cdFx0ZWxpZiBbWyBcIiQxXCIgPSBcIi1jXCIgXV07IHRoZW5cbi1cdFx0XHRzaGlmdFxuLVx0XHRcdHRlc3RfbnVtICQxXG4tXHRcdFx0dGVzdF9udW0gJDJcbi1cdFx0XHR0ZXN0X2Nhc2UgJDEgJDIgJChnZXRfdGVzdF90YXJnZXQgJDEpXG4tXHRcdGVsaWYgW1sgXCIkMVwiID0gXCItc1wiIF1dOyB0aGVuXG4tXHRcdFx0c2hpZnRcbi1cdFx0XHR0ZXN0X2Nhc2UgJDEgMSAkKGdldF90ZXN0X3RhcmdldCAkMSlcbi1cdFx0ZWxpZiBbWyBcIiQxXCIgPSBcIi1sXCIgXV07IHRoZW5cbi1cdFx0XHRsaXN0X3Rlc3RzXG4tXHRcdGVsaWYgW1sgXCIkMVwiID0gXCItaFwiIHx8IFwiJDFcIiA9IFwiLS1oZWxwXCIgXV07IHRoZW5cbi1cdFx0XHR1c2FnZVxuLVx0XHRlbHNlXG4tXHRcdFx0dXNhZ2Vcbi1cdFx0ZmlcbitcdGlmIFsgLW4gXCIke29sZF9zdHJpY3R9XCIgXTsgdGhlblxuK1x0XHRlY2hvIFwiJHtvbGRfc3RyaWN0fVwiIFx1MDAzZSBcIiR7V1JJVEVTX1NUUklDVH1cIlxuIFx0ZmlcbiB9XG4gXG4tdGVzdF9yZXFzXG4gYWxsb3dfdXNlcl9kZWZhdWx0c1xuK1xuKyMgRWFjaCBiaXRtYXAgaXRlcmF0aW9uIGlzIG9uZSBmdW5jdGlvbiB0byBnZW5lcmF0ZSBvbmUgS1RBUCByZXBvcnQgcGVyIGl0ZXJhdGlvblxuK2ZvciBpIGluICQoc2VxIDEgXCIkQklUTUFQX0lURVJBVElPTlNcIik7IGRvXG4rXHRldmFsIFwidGVzdF9iaXRtYXBfcmFuZ2VfY2hlY2tfJChwcmludGYgJyUwMmQnIFwiJGlcIikoKSBcXFxuK1x0XHR7IFxcXG4rXHRcdFx0Yml0bWFwX3JhbmdlX2NoZWNrX29uY2UgJGk7IFxcXG4rXHRcdH1cIlxuK2RvbmVcbitcbisjIERpc2NvdmVyIHRlc3RfKiBmdW5jdGlvbnMgYWJvdmUgdGhpcyBsaW5lXG4rQUxMX1RFU1RTPSQoZGVjbGFyZSAtRiB8IGF3ayAne3ByaW50ICQzfScgfCBncmVwICdedGVzdF8nIHwgc29ydClcbitcbitSRVBFQVQ9MVxuK3doaWxlIFsgJCMgLWd0IDAgXTsgZG9cbitcdGNhc2UgXCIkMVwiIGluXG4rXHQtciApXG4rXHRcdHNoaWZ0XG4rXHRcdFJFUEVBVD0kMVxuK1x0XHQ7O1xuK1x0LWwgKVxuK1x0XHRsaXN0X3Rlc3RzXG4rXHRcdGV4aXQgMFxuK1x0XHQ7O1xuK1x0LWggfCAtLWhlbHAgKVxuK1x0XHR1c2FnZVxuK1x0XHRleGl0IDBcbitcdFx0OztcbitcdC10IClcbitcdFx0c2hpZnRcbitcdFx0U1lTQ1RMX1RFU1RTPVwiJDFcIlxuK1x0XHQ7O1xuK1x0LXMgKVxuK1x0XHRzaGlmdFxuK1x0XHRCSVRNQVBfU0VFRD1cIiQxXCJcbitcdFx0OztcbitcdCogKVxuK1x0XHR1c2FnZVxuK1x0XHRleGl0IDFcbitcdFx0OztcbitcdGVzYWNcbitcdHNoaWZ0XG4rZG9uZVxuK1xuK1NFTEVDVEVEPSR7U1lTQ1RMX1RFU1RTLSRBTExfVEVTVFN9XG4rXG4ra3RhcF9wcmludF9oZWFkZXJcbit0cmFwIHJlc3RvcmVfc3lzY3RsX3dyaXRlc19zdHJpY3QgRVhJVFxuK2NoZWNrX2FyZ3MgXCIkUkVQRUFUXCIgXCIkU0VMRUNURURcIiBcIiRCSVRNQVBfU0VFRFwiXG4rY2hlY2tfcmVxc1xuIGNoZWNrX3Byb2R1Y3Rpb25fc3lzY3RsX3dyaXRlc19zdHJpY3RcbiBsb2FkX3JlcV9tb2RcbiBcbi10cmFwIFwidGVzdF9maW5pc2hcIiBFWElUXG4ra3RhcF9wcmludF9tc2cgXCJiaXRtYXAgYmFzZSBzZWVkOiAkQklUTUFQX1NFRUQgKHJlcGxheSB3aXRoIC1zICRCSVRNQVBfU0VFRClcIlxuIFxuLXBhcnNlX2FyZ3MgJEBcbitrdGFwX3NldF9wbGFuIFwiJCgoICQod2MgLXcgXHUwMDNjXHUwMDNjXHUwMDNjIFwiJFNFTEVDVEVEXCIpICogUkVQRUFUICkpXCJcbitcbitmb3IgKChpID0gMDsgaSBcdTAwM2MgUkVQRUFUOyBpKyspKTsgZG9cbitcdGZvciB0IGluICRTRUxFQ1RFRDsgZG9cbitcdFx0cnVuX29uZSBcIiR0XCJcbitcdGRvbmVcbitkb25lXG4gXG4tZXhpdCAwXG4ra3RhcF9maW5pc2hlZFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6Mzk6MDcuNTM1MDY1MDg3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDE2MjIwOTc4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEV2YWx1YXRpb246IFF1aWNrIERlY2lzaW9uKipcblxuT2theSwgbGV0J3MgYXNzZXNzIHRoaXMgcGF0Y2ggc2VyaWVzIGZvciBzeXprYWxsZXIgZnV6emluZyBwb3RlbnRpYWwuIFRoZSBkaWZmIGlzIGZvY3VzZWQsIG9ubHkgdG91Y2hpbmcgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2N0bC9zeXNjdGwuc2hgLiBUaW1lIHRvIGFwcGx5IHRoZSBjcml0ZXJpYS4gQWNjb3JkaW5nIHRvIHRoZSBndWlkZWxpbmVzLCBtb2RpZmljYXRpb25zIHN0cmljdGx5IHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYCBmYWxsIHVuZGVyIHRoZSBcIk5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXNcIiBjYXRlZ29yeS4gVGhpcyBzcGVjaWZpY2FsbHkgbWVhbnMgdGhlIGNoYW5nZXMgZG9uJ3QgYWZmZWN0IHRoZSBrZXJuZWwgaW1hZ2Ugb3IgbW9kdWxlcy4gVGhlcmVmb3JlLCBpdCdzIGEgY2xlYXIgXCJXb3J0aEZ1enppbmcgPSBmYWxzZVwiIHNpdHVhdGlvbi4gTm8gbmVlZCB0byBkZWx2ZSBmdXJ0aGVyIOKAkyB0aGUgc2NyaXB0IGlzIHVzZXItc3BhY2Ugc2VsZnRlc3Qgb25seS4gSSdsbCBjb25maXJtIHdpdGggYSBxdWljayBkb3VibGUtY2hlY2sgdXNpbmcgYGdpdCBkaWZmYCAob3IgdGhlIHByb3ZpZGVkIGRpZmYgZGV0YWlscykganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGJ1dCBteSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgZmlybS5cblxuSSBjYW4gY29uZmlkZW50bHkgY29uY2x1ZGU6XG5cbiogICBgV29ydGhGdXp6aW5nID0gZmFsc2VgXG4qICAgYEZvY3VzU3ltYm9scyA9IFtdYFxuKiAgIGBFbmFibGVDb25maWdzID0gW11gXG5cblRoZSByZWFzb25pbmcgaGVyZSBpcyBjcnlzdGFsIGNsZWFyOiB0aGlzIHBhdGNoIGlzIGxpbWl0ZWQgdG8gbW9kaWZ5aW5nIGEgc2VsZnRlc3Qgc2NyaXB0IGluIHVzZXIgc3BhY2UsIGFuZCB0aHVzIGRvZXNuJ3QgaW1wYWN0IGFueSBrZXJuZWwgY29kZS4gUmVhZHkgdG8gcGFzcyB0aGlzIGluZm9ybWF0aW9uIGFsb25nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDc5MywiT3V0cHV0VG9rZW5zIjo5NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjM5OjExLjY5NzI4NjYwNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB0aGUgdXNlci1zcGFjZSBzZWxmdGVzdCBzY3JpcHQgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY3RsL3N5c2N0bC5zaCB0byBtb2Rlcm5pemUgaXQgYW5kIHVzZSBrdGFwX2hlbHBlcnMuIEl0IGRvZXMgbm90IHRvdWNoIGFueSBrZXJuZWwgc291cmNlIGNvZGUsIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCksIG9yIGtlcm5lbCBtb2R1bGVzLCBzbyBpdCBpcyBub3Qgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG9ubHkgdGhlIHVzZXItc3BhY2Ugc2VsZnRlc3Qgc2NyaXB0IHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2N0bC9zeXNjdGwuc2ggdG8gbW9kZXJuaXplIGl0IGFuZCB1c2Uga3RhcF9oZWxwZXJzLiBJdCBkb2VzIG5vdCB0b3VjaCBhbnkga2VybmVsIHNvdXJjZSBjb2RlLCBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpLCBvciBrZXJuZWwgbW9kdWxlcywgc28gaXQgaXMgbm90IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzozOToxMS42OTczMTczMjVaIiwiU2VxIjo1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkvqqt[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-14 13:16:56 +0000 UTC FinishedAt: 2026-09-14 13:39:13 +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+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB0aGUgdXNlci1zcGFjZSBzZWxmdGVzdCBzY3JpcHQgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY3RsL3N5c2N0bC5zaCB0byBtb2Rlcm5pemUgaXQgYW5kIHVzZSBrdGFwX2hlbHBlcnMuIEl0IGRvZXMgbm90IHRvdWNoIGFueSBrZXJuZWwgc291cmNlIGNvZGUsIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCksIG9yIGtlcm5lbCBtb2R1bGVzLCBzbyBpdCBpcyBub3Qgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6Mzk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyNzE2NjkyY2U0ZmJlMDEzYjg4ZTNmNDNiMDBmNzM1Mzg5MjUxMzU4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMTM6Mzk6MDUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY3RsL3N5c2N0bC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2N0bC9zeXNjdGwuc2hcbmluZGV4IDk1ZTkzNzA5MDg4YTMuLmNlYjVjZmEwY2ZkNGQgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjdGwvc3lzY3RsLnNoXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjdGwvc3lzY3RsLnNoXG5AQCAtMiwzNjIgJiM0MzsyLDIzOSBAQFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgT1IgY29weWxlZnQtbmV4dC0wLjMuMVxuICMgQ29weXJpZ2h0IChDKSAyMDE3IEx1aXMgUi4gUm9kcmlndWV6IFx1MDAzY21jZ3JvZkBrZXJuZWwub3JnXHUwMDNlXG4gXG4tIyBUaGlzIHBlcmZvcm1zIGEgc2VyaWVzIHRlc3RzIGFnYWluc3QgdGhlIHByb2Mgc3lzY3RsIGludGVyZmFjZS5cbi1cbiYjNDM7IyBSZWR1Y2Ugbm9pc2UgYnkgZGlzYWJsaW5nIFwmIzM0O3VucmVhY2hhYmxlXCYjMzQ7IGNoZWNrLlxuICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjMxN1xuLSMgS3NlbGZ0ZXN0IGZyYW1ld29yayByZXF1aXJlbWVudCAtIFNLSVAgY29kZSBpcyA0LlxuLWtzZnRfc2tpcD00XG4tXG4tVEVTVF9OQU1FPVwmIzM0O3N5c2N0bFwmIzM0O1xuLVRFU1RfRFJJVkVSPVwmIzM0O3Rlc3RfJHtURVNUX05BTUV9XCYjMzQ7XG4tVEVTVF9ESVI9JChkaXJuYW1lICQwKVxuLVRFU1RfRklMRT0kKG1rdGVtcClcbi1cbi0jIGluaXRpYWxpemUgZm9yIGluZGl2aWR1YWwgdGVzdHNcbi1yYz0wXG4tXG4tIyBUaGlzIHJlcHJlc2VudHNcbi0jXG4tIyBURVNUX0lEOlRFU1RfQ09VTlQ6RU5BQkxFRDpUQVJHRVQ6U0tJUF9OT19UQVJHRVRcbi0jXG4tIyBURVNUX0lEOiBpcyB0aGUgdGVzdCBpZCBudW1iZXJcbi0jIFRFU1RfQ09VTlQ6IG51bWJlciBvZiB0aW1lcyB3ZSBzaG91bGQgcnVuIHRoZSB0ZXN0XG4tIyBFTkFCTEVEOiAxIGlmIGVuYWJsZWQsIDAgb3RoZXJ3aXNlXG4tIyBUQVJHRVQ6IHRlc3QgdGFyZ2V0IGZpbGUgcmVxdWlyZWQgb24gdGhlIHRlc3Rfc3lzY3RsIG1vZHVsZVxuLSMgU0tJUF9OT19UQVJHRVQ6IDEgc2tpcCBpZiBUQVJHRVQgbm90IHRoZXJlXG4tIyAgICAgICAgICAgICAgICAgMCBydW4gZXZlbiB0aG91Z2ggVEFSR0VUIG5vdCB0aGVyZVxuLSNcbi0jIE9uY2UgdGhlc2UgYXJlIGVuYWJsZWQgcGxlYXNlIGxlYXZlIHRoZW0gYXMtaXMuIFdyaXRlIHlvdXIgb3duIHRlc3QsXG4tIyB3ZSBoYXZlIHRvbnMgb2Ygc3BhY2UuXG4tQUxMX1RFU1RTPVwmIzM0OzAwMDE6MToxOmludF8wMDAxOjFcJiMzNDtcbi1BTExfVEVTVFM9XCYjMzQ7JEFMTF9URVNUUyAwMDAyOjE6MTpzdHJpbmdfMDAwMToxXCYjMzQ7XG4tQUxMX1RFU1RTPVwmIzM0OyRBTExfVEVTVFMgMDAwMzoxOjE6aW50XzAwMDI6MVwmIzM0O1xuLUFMTF9URVNUUz1cJiMzNDskQUxMX1RFU1RTIDAwMDQ6MToxOnVpbnRfMDAwMToxXCYjMzQ7XG4tQUxMX1RFU1RTPVwmIzM0OyRBTExfVEVTVFMgMDAwNTozOjE6aW50XzAwMDM6MVwmIzM0O1xuLUFMTF9URVNUUz1cJiMzNDskQUxMX1RFU1RTIDAwMDY6NTA6MTpiaXRtYXBfMDAwMToxXCYjMzQ7XG4tQUxMX1RFU1RTPVwmIzM0OyRBTExfVEVTVFMgMDAwNzoxOjE6Ym9vdF9pbnQ6MVwmIzM0O1xuLUFMTF9URVNUUz1cJiMzNDskQUxMX1RFU1RTIDAwMDg6MToxOm1hdGNoX2ludDoxXCYjMzQ7XG4tQUxMX1RFU1RTPVwmIzM0OyRBTExfVEVTVFMgMDAwOToxOjE6dW5yZWdpc3Rlcl9lcnJvcjowXCYjMzQ7XG4tQUxMX1RFU1RTPVwmIzM0OyRBTExfVEVTVFMgMDAxMDoxOjE6bW50L21udF9lcnJvcjowXCYjMzQ7XG4tQUxMX1RFU1RTPVwmIzM0OyRBTExfVEVTVFMgMDAxMToxOjE6ZW1wdHlfYWRkOjBcJiMzNDtcbi1BTExfVEVTVFM9XCYjMzQ7JEFMTF9URVNUUyAwMDEyOjE6MTp1OF92YWxpZDowXCYjMzQ7XG4tQUxMX1RFU1RTPVwmIzM0OyRBTExfVEVTVFMgMDAxMzoxOjE6aW50XzAwMDM6MVwmIzM0O1xuLVxuLWZ1bmN0aW9uIGFsbG93X3VzZXJfZGVmYXVsdHMoKVxuJiM0MztcbiYjNDM7IyBUaGlzIHBlcmZvcm1zIGEgc2VyaWVzIG9mIHRlc3RzIGFnYWluc3QgdGhlIHByb2Mgc3lzY3RsIGludGVyZmFjZS5cbiYjNDM7XG4mIzQzO0RJUj1cJiMzNDskKGRpcm5hbWUgXCYjMzQ7JChyZWFkbGluayAtZiBcJiMzNDskMFwmIzM0OylcJiMzNDspXCYjMzQ7XG4mIzQzO3NvdXJjZSBcJiMzNDske0RJUn1cJiMzNDsvLi4va3NlbGZ0ZXN0L2t0YXBfaGVscGVycy5zaFxuJiM0MztcbiYjNDM7VEVTVF9EUklWRVI9XCYjMzQ7dGVzdF9zeXNjdGxcJiMzNDtcbiYjNDM7XG4mIzQzO2Fzc2VydF93cml0ZV9yZWplY3RlZCgpICMgXHUwMDNjZmlsZVx1MDAzZSBcdTAwM2N2YWx1ZVx1MDAzZVxuIHtcbi1cdGlmIFsgLXogJERJUiBdOyB0aGVuXG4tXHRcdERJUj1cJiMzNDsvc3lzL21vZHVsZS90ZXN0X3N5c2N0bC9cJiMzNDtcbi1cdGZpXG4tXHRpZiBbIC16ICRERUZBVUxUX05VTV9URVNUUyBdOyB0aGVuXG4tXHRcdERFRkFVTFRfTlVNX1RFU1RTPTUwXG4tXHRmaVxuLVx0aWYgWyAteiAkU1lTQ1RMIF07IHRoZW5cbi1cdFx0U1lTQ1RMPVwmIzM0Oy9wcm9jL3N5cy9kZWJ1Zy90ZXN0X3N5c2N0bFwmIzM0O1xuLVx0Zmlcbi1cdGlmIFsgLXogJFBST0RfU1lTQ1RMIF07IHRoZW5cbi1cdFx0UFJPRF9TWVNDVEw9XCYjMzQ7L3Byb2Mvc3lzXCYjMzQ7XG4tXHRmaVxuLVx0aWYgWyAteiAkV1JJVEVTX1NUUklDVCBdOyB0aGVuXG4tXHRcdFdSSVRFU19TVFJJQ1Q9XCYjMzQ7JHtQUk9EX1NZU0NUTH0va2VybmVsL3N5c2N0bF93cml0ZXNfc3RyaWN0XCYjMzQ7XG4mIzQzO1x0bG9jYWwgZmlsZT0kMSB2YWw9JDJcbiYjNDM7XHRpZiBwcmludGYgJiMzOTslcyYjMzk7IFwmIzM0OyR2YWxcJiMzNDsgXHUwMDNlIFwmIzM0OyRmaWxlXCYjMzQ7IDJcdTAwM2UvZGV2L251bGw7IHRoZW5cbiYjNDM7XHRcdGt0YXBfcHJpbnRfbXNnIFwmIzM0OyRmaWxlOiB3cml0ZSBvZiAmIzM5OyR2YWwmIzM5OyBzdWNjZWVkZWQsIGV4cGVjdGVkIHJlamVjdGlvblwmIzM0O1xuJiM0MztcdFx0cmV0dXJuIDFcbiBcdGZpXG4mIzQzO1x0cmV0dXJuIDBcbiB9XG4gXG4tZnVuY3Rpb24gY2hlY2tfcHJvZHVjdGlvbl9zeXNjdGxfd3JpdGVzX3N0cmljdCgpXG4mIzQzO2Fzc2VydF9jb250ZW50KCkgIyBcdTAwM2NmaWxlXHUwMDNlIFx1MDAzY3dhbnQtZmlsZVx1MDAzZVxuIHtcbi1cdGVjaG8gLW4gXCYjMzQ7Q2hlY2tpbmcgcHJvZHVjdGlvbiB3cml0ZSBzdHJpY3Qgc2V0dGluZyAuLi4gXCYjMzQ7XG4tXHRpZiBbICEgLWUgJHtXUklURVNfU1RSSUNUfSBdOyB0aGVuXG4tXHRcdGVjaG8gXCYjMzQ7RkFJTCwgYnV0IHNraXAgaW4gY2FzZSBvZiBvbGQga2VybmVsXCYjMzQ7IFx1MDAzZVx1MDAyNjJcbi1cdGVsc2Vcbi1cdFx0b2xkX3N0cmljdD0kKGNhdCAke1dSSVRFU19TVFJJQ1R9KVxuLVx0XHRpZiBbIFwmIzM0OyRvbGRfc3RyaWN0XCYjMzQ7ID0gXCYjMzQ7MVwmIzM0OyBdOyB0aGVuXG4tXHRcdFx0ZWNobyBcJiMzNDtPS1wmIzM0O1xuLVx0XHRlbHNlXG4tXHRcdFx0ZWNobyBcJiMzNDtGQUlMLCBzdHJpY3QgdmFsdWUgaXMgMCBidXQgZm9yY2UgdG8gMSB0byBjb250aW51ZVwmIzM0OyBcdTAwM2VcdTAwMjYyXG4tXHRcdFx0ZWNobyBcJiMzNDsxXCYjMzQ7IFx1MDAzZSAke1dSSVRFU19TVFJJQ1R9XG4tXHRcdGZpXG4tXHRmaVxuLVxuLVx0aWYgWyAteiAkUEFHRV9TSVpFIF07IHRoZW5cbi1cdFx0UEFHRV9TSVpFPSQoZ2V0Y29uZiBQQUdFU0laRSlcbi1cdGZpXG4tXHRpZiBbIC16ICRNQVhfRElHSVRTIF07IHRoZW5cbi1cdFx0TUFYX0RJR0lUUz0kKCgkUEFHRV9TSVpFLzgpKVxuLVx0Zmlcbi1cdGlmIFsgLXogJElOVF9NQVggXTsgdGhlblxuLVx0XHRJTlRfTUFYPSQoZ2V0Y29uZiBJTlRfTUFYKVxuLVx0Zmlcbi1cdGlmIFsgLXogJFVJTlRfTUFYIF07IHRoZW5cbi1cdFx0VUlOVF9NQVg9JChnZXRjb25mIFVJTlRfTUFYKVxuJiM0MztcdGxvY2FsIGZpbGU9JDEgd2FudF9maWxlPSQyIGdvdFxuJiM0MztcdGdvdD0kKGNhdCBcJiMzNDskZmlsZVwmIzM0OylcbiYjNDM7XHRpZiBbIFwmIzM0OyRnb3RcJiMzNDsgPT0gXCYjMzQ7JHdhbnRfZmlsZVwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0XHRyZXR1cm4gMFxuIFx0ZmlcbiYjNDM7XHRrdGFwX3ByaW50X21zZyBcJiMzNDskZmlsZTogZ290ICYjMzk7JGdvdCYjMzk7LCB3YW50ICYjMzk7JHdhbnRfZmlsZSYjMzk7XCYjMzQ7XG4mIzQzO1x0cmV0dXJuIDFcbiB9XG4gXG4tdGVzdF9yZXFzKClcbiYjNDM7IyBjb21wYXJlIGlnbm9yaW5nIHdoaXRlc3BhY2VzXG4mIzQzO2Fzc2VydF9jb250ZW50X2xvb3NlKCkgIyBcdTAwM2NmaWxlXHUwMDNlIFx1MDAzY3dhbnQtZmlsZVx1MDAzZVxuIHtcbi1cdHVpZD0kKGlkIC11KVxuLVx0aWYgWyAkdWlkIC1uZSAwIF07IHRoZW5cbi1cdFx0ZWNobyAkbXNnIG11c3QgYmUgcnVuIGFzIHJvb3QgXHUwMDNlXHUwMDI2MlxuLVx0XHRleGl0ICRrc2Z0X3NraXBcbi1cdGZpXG4tXG4tXHRpZiAhIHdoaWNoIHBlcmwgMlx1MDAzZSAvZGV2L251bGwgXHUwMDNlIC9kZXYvbnVsbDsgdGhlblxuLVx0XHRlY2hvIFwmIzM0OyQwOiBZb3UgbmVlZCBwZXJsIGluc3RhbGxlZFwmIzM0O1xuLVx0XHRleGl0ICRrc2Z0X3NraXBcbi1cdGZpXG4tXHRpZiAhIHdoaWNoIGdldGNvbmYgMlx1MDAzZSAvZGV2L251bGwgXHUwMDNlIC9kZXYvbnVsbDsgdGhlblxuLVx0XHRlY2hvIFwmIzM0OyQwOiBZb3UgbmVlZCBnZXRjb25mIGluc3RhbGxlZFwmIzM0O1xuLVx0XHRleGl0ICRrc2Z0X3NraXBcbi1cdGZpXG4tXHRpZiAhIHdoaWNoIGRpZmYgMlx1MDAzZSAvZGV2L251bGwgXHUwMDNlIC9kZXYvbnVsbDsgdGhlblxuLVx0XHRlY2hvIFwmIzM0OyQwOiBZb3UgbmVlZCBkaWZmIGluc3RhbGxlZFwmIzM0O1xuLVx0XHRleGl0ICRrc2Z0X3NraXBcbiYjNDM7XHRsb2NhbCBmaWxlPSQxIHdhbnRfZmlsZT0kMlxuJiM0MztcdGlmIGVjaG8gXCYjMzQ7JHdhbnRfZmlsZVwmIzM0OyB8IGRpZmYgLXEgLXcgLXUgLSBcJiMzNDskZmlsZVwmIzM0OyBcdTAwM2UgL2Rldi9udWxsOyB0aGVuXG4mIzQzO1x0XHRyZXR1cm4gMFxuIFx0ZmlcbiYjNDM7XHRrdGFwX3ByaW50X21zZyBcJiMzNDskZmlsZTogY29udGVudCBkb2VzIG5vdCBtYXRjaCAmIzM5OyR3YW50X2ZpbGUmIzM5OyAod2hpdGVzcGFjZS1pbnNlbnNpdGl2ZSlcJiMzNDtcbiYjNDM7XHRyZXR1cm4gMVxuIH1cbiBcbi1mdW5jdGlvbiBsb2FkX3JlcV9tb2QoKVxuJiM0MzsjIEZvciBjaGVja3Mgd2hlcmUgd3JpdGVzIG11c3QgTk9UIHRha2UgZWZmZWN0XG4mIzQzO2Fzc2VydF9jb250ZW50X3JlamVjdGVkKCkgIyBcdTAwM2NmaWxlXHUwMDNlIFx1MDAzY2JhZFx1MDAzZVxuIHtcbi1cdGlmIFsgISAtZCAkU1lTQ1RMIF07IHRoZW5cbi1cdFx0aWYgISBtb2Rwcm9iZSAtcSAtbiAkVEVTVF9EUklWRVI7IHRoZW5cbi1cdFx0XHRlY2hvIFwmIzM0OyQwOiBtb2R1bGUgJFRFU1RfRFJJVkVSIG5vdCBmb3VuZCBbU0tJUF1cJiMzNDtcbi1cdFx0XHRlY2hvIFwmIzM0O1lvdSBtdXN0IHNldCBDT05GSUdfVEVTVF9TWVNDVEw9bSBpbiB5b3VyIGtlcm5lbFwmIzM0OyBcdTAwM2VcdTAwMjYyXG4tXHRcdFx0ZXhpdCAka3NmdF9za2lwXG4tXHRcdGZpXG4tXHRcdG1vZHByb2JlICRURVNUX0RSSVZFUlxuLVx0XHRpZiBbICQ/IC1uZSAwIF07IHRoZW5cbi1cdFx0XHRlY2hvIFwmIzM0OyQwOiBtb2Rwcm9iZSAkVEVTVF9EUklWRVIgZmFpbGVkLlwmIzM0O1xuLVx0XHRcdGV4aXRcbi1cdFx0ZmlcbiYjNDM7XHRsb2NhbCBmaWxlPSQxIGJhZD0kMlxuJiM0MztcdGlmIGVjaG8gXCYjMzQ7JGJhZFwmIzM0OyB8IGRpZmYgLXEgLXcgLXUgLSBcJiMzNDskZmlsZVwmIzM0OyBcdTAwM2UgL2Rldi9udWxsOyB0aGVuXG4mIzQzO1x0XHRrdGFwX3ByaW50X21zZyBcJiMzNDskZmlsZTogdW5leHBlY3RlZGx5IG5vdyBob2xkcyByZWplY3RlZCB2YWx1ZSAmIzM5OyRiYWQmIzM5O1wmIzM0O1xuJiM0MztcdFx0cmV0dXJuIDFcbiBcdGZpXG4mIzQzO1x0cmV0dXJuIDBcbiB9XG4gXG4tcmVzZXRfdmFscygpXG4mIzQzOyMgcHJvYyBmaWxlcyBnZXQgcmVhZCBhIHBhZ2UgYXQgYSB0aW1lLCB3aGljaCBjYW4gY29uZnVzZSBkaWZmIHJlc3VsdGluZyBpblxuJiM0MzsjIGluY29ycmVjdCByZXN1bHRzLiBVc2UgYSB0ZW1wIGZpbGUgdG8gZGlmZi5cbiYjNDM7YXNzZXJ0X2RpZmZfcHJvY19maWxlKCkgIyBcdTAwM2NmaWxlXHUwMDNlIFx1MDAzY3dhbnQtZmlsZVx1MDAzZVxuIHtcbi1cdFZBTD1cJiMzNDtcJiMzNDtcbi1cdFRSSUdHRVI9JChiYXNlbmFtZSAke1RBUkdFVH0pXG4tXHRjYXNlIFwmIzM0OyRUUklHR0VSXCYjMzQ7IGluXG4tXHRcdGludF8wMDAxKVxuLVx0XHRcdFZBTD1cJiMzNDs2MFwmIzM0O1xuLVx0XHRcdDs7XG4tXHRcdGludF8wMDAyKVxuLVx0XHRcdFZBTD1cJiMzNDsxXCYjMzQ7XG4tXHRcdFx0Oztcbi1cdFx0dWludF8wMDAxKVxuLVx0XHRcdFZBTD1cJiMzNDszMTRcJiMzNDtcbi1cdFx0XHQ7O1xuLVx0XHRzdHJpbmdfMDAwMSlcbi1cdFx0XHRWQUw9XCYjMzQ7KG5vbmUpXCYjMzQ7XG4tXHRcdFx0Oztcbi1cdFx0Yml0bWFwXzAwMDEpXG4tXHRcdFx0VkFMPVwmIzM0O1wmIzM0O1xuLVx0XHRcdDs7XG4tXHRcdCopXG4tXHRcdFx0Oztcbi1cdGVzYWNcbi1cdGVjaG8gLW4gJFZBTCBcdTAwM2UgJFRBUkdFVFxuLX1cbiYjNDM7XHRsb2NhbCBmaWxlPSQxIHdhbnRfZmlsZT0kMiB0bXBcbiYjNDM7XHR0bXA9JChta3RlbXApXG4mIzQzO1x0Y2F0IFwmIzM0OyRmaWxlXCYjMzQ7IFx1MDAzZSBcJiMzNDskdG1wXCYjMzQ7XG4gXG4tc2V0X29yaWcoKVxuLXtcbi1cdGlmIFsgISAteiAkVEFSR0VUIF0gXHUwMDI2XHUwMDI2IFsgISAteiAkT1JJRyBdOyB0aGVuXG4tXHRcdGlmIFsgLWYgJHtUQVJHRVR9IF07IHRoZW5cbi1cdFx0XHRlY2hvIFwmIzM0OyR7T1JJR31cJiMzNDsgXHUwMDNlIFwmIzM0OyR7VEFSR0VUfVwmIzM0O1xuLVx0XHRmaVxuJiM0MztcdGlmIGRpZmYgLXcgLXEgXCYjMzQ7JHRtcFwmIzM0OyBcJiMzNDskd2FudF9maWxlXCYjMzQ7IFx1MDAzZSAvZGV2L251bGw7IHRoZW5cbiYjNDM7XHRcdHJtIC1mIFwmIzM0OyR0bXBcJiMzNDtcbiYjNDM7XHRcdHJldHVybiAwXG4gXHRmaVxuJiM0MztcdGt0YXBfcHJpbnRfbXNnIFwmIzM0OyRmaWxlOiBjb250ZW50IGRvZXMgbm90IG1hdGNoIGV4cGVjdGVkIGZpbGUgJHdhbnRfZmlsZVwmIzM0O1xuJiM0MztcdHJtIC1mIFwmIzM0OyR0bXBcJiMzNDtcbiYjNDM7XHRyZXR1cm4gMVxuIH1cbiBcbi1zZXRfdGVzdCgpXG4mIzQzOyMgVmVyaWZ5IHRoYXQgYW4gZXJyb25lb3VzIHVwZGF0ZSBmYWlscyBhbmQgZG9lcyBub3QgY2hhbmdlIHRoZSBiYXNlbGluZS5cbiYjNDM7YXNzZXJ0X25vX3BhcnRpYWxfdXBkYXRlKCkgIyBcdTAwM2NmaWxlXHUwMDNlIFx1MDAzY2Jhc2VsaW5lXHUwMDNlIFx1MDAzY2JhZC12YWx1ZVx1MDAzZVxuIHtcbi1cdGVjaG8gXCYjMzQ7JHtURVNUX1NUUn1cJiMzNDsgXHUwMDNlIFwmIzM0OyR7VEFSR0VUfVwmIzM0O1xuJiM0MztcdGxvY2FsIGZpbGU9JDEgYmFzZWxpbmU9JDIgYmFkPSQzXG4mIzQzO1xuJiM0MztcdHByaW50ZiAmIzM5OyVzJiMzOTsgXCYjMzQ7JGJhc2VsaW5lXCYjMzQ7IFx1MDAzZSBcJiMzNDskZmlsZVwmIzM0O1xuJiM0MztcdGFzc2VydF93cml0ZV9yZWplY3RlZCBcJiMzNDskZmlsZVwmIzM0OyBcJiMzNDskYmFkXCYjMzQ7IHx8IHJldHVybiAxXG4mIzQzO1x0YXNzZXJ0X2NvbnRlbnRfbG9vc2UgXCYjMzQ7JGZpbGVcJiMzNDsgXCYjMzQ7JGJhc2VsaW5lXCYjMzQ7XG4gfVxuIFxuLXZlcmlmeSgpXG4mIzQzO2Fzc2VydF9ncmVwKCkgIyBcdTAwM2NmaWxlXHUwMDNlIFx1MDAzY3BhdHRlcm5cdTAwM2UgLSBcdTAwM2NwYXR0ZXJuXHUwMDNlIG11c3QgYXBwZWFyIGluIFx1MDAzY2ZpbGVcdTAwM2VcbiB7XG4tXHRsb2NhbCBzZWVuXG4tXHRzZWVuPSQoY2F0IFwmIzM0OyQxXCYjMzQ7KVxuLVx0aWYgWyBcJiMzNDske3NlZW59XCYjMzQ7ICE9IFwmIzM0OyR7VEVTVF9TVFJ9XCYjMzQ7IF07IHRoZW5cbi1cdFx0cmV0dXJuIDFcbiYjNDM7XHRsb2NhbCBmaWxlPSQxIHBhdHRlcm49JDJcbiYjNDM7XHRpZiBncmVwIC1xIFwmIzM0OyRwYXR0ZXJuXCYjMzQ7IFwmIzM0OyRmaWxlXCYjMzQ7OyB0aGVuXG4mIzQzO1x0XHRyZXR1cm4gMFxuIFx0Zmlcbi1cdHJldHVybiAwXG4mIzQzO1x0a3RhcF9wcmludF9tc2cgXCYjMzQ7JGZpbGU6IHBhdHRlcm4gJiMzOTskcGF0dGVybiYjMzk7IG5vdCBmb3VuZFwmIzM0O1xuJiM0MztcdHJldHVybiAxXG4gfVxuIFxuLSMgcHJvYyBmaWxlcyBnZXQgcmVhZCBhIHBhZ2UgYXQgYSB0aW1lLCB3aGljaCBjYW4gY29uZnVzZSBkaWZmLFxuLSMgYW5kIGdldCB5b3UgaW5jb3JyZWN0IHJlc3VsdHMgb24gcHJvYyBmaWxlcyB3aXRoIGxvbmcgZGF0YS4gVG8gdXNlXG4tIyBkaWZmIGFnYWluc3QgdGhlbSB5b3UgbXVzdCBmaXJzdCBleHRyYWN0IHRoZSBvdXRwdXQgdG8gYSBmaWxlLCBhbmRcbi0jIHRoZW4gY29tcGFyZSBhZ2FpbnN0IHRoYXQgZmlsZS5cbi12ZXJpZnlfZGlmZl9wcm9jX2ZpbGUoKVxuJiM0Mzthc3NlcnRfZ3JlcF9hYnNlbnQoKSAjIFx1MDAzY2ZpbGVcdTAwM2UgXHUwMDNjcGF0dGVyblx1MDAzZSAtIFx1MDAzY3BhdHRlcm5cdTAwM2UgbXVzdCBOT1QgYXBwZWFyXG4ge1xuLVx0VE1QX0RVTVBfRklMRT0kKG1rdGVtcClcbi1cdGNhdCAkMSBcdTAwM2UgJFRNUF9EVU1QX0ZJTEVcbi1cbi1cdGlmICEgZGlmZiAtdyAtcSAkVE1QX0RVTVBfRklMRSAkMjsgdGhlblxuLVx0XHRyZXR1cm4gMVxuLVx0ZWxzZVxuJiM0MztcdGxvY2FsIGZpbGU9JDEgcGF0dGVybj0kMlxuJiM0MztcdGlmICEgZ3JlcCAtcSBcJiMzNDskcGF0dGVyblwmIzM0OyBcJiMzNDskZmlsZVwmIzM0OzsgdGhlblxuIFx0XHRyZXR1cm4gMFxuIFx0ZmlcbiYjNDM7XHRrdGFwX3ByaW50X21zZyBcJiMzNDskZmlsZTogcGF0dGVybiAmIzM5OyRwYXR0ZXJuJiMzOTsgdW5leHBlY3RlZGx5IGZvdW5kXCYjMzQ7XG4mIzQzO1x0cmV0dXJuIDFcbiB9XG4gXG4tdmVyaWZ5X2RpZmZfdygpXG4mIzQzO2Fzc2VydF9kbWVzZ19jb3VudCgpICMgXHUwMDNjcGF0dGVyblx1MDAzZSBcdTAwM2N3YW50LWNvdW50XHUwMDNlXG4ge1xuLVx0ZWNobyBcJiMzNDskVEVTVF9TVFJcJiMzNDsgfCBkaWZmIC1xIC13IC11IC0gJDEgXHUwMDNlIC9kZXYvbnVsbFxuLVx0cmV0dXJuICQ/XG4mIzQzO1x0bG9jYWwgcGF0dGVybj0kMSB3YW50PSQyIGdvdFxuJiM0MztcdGdvdD0kKGRtZXNnIHwgZ3JlcCAtYyBcJiMzNDskcGF0dGVyblwmIzM0OylcbiYjNDM7XHRpZiBbIFwmIzM0OyRnb3RcJiMzNDsgLWVxIFwmIzM0OyR3YW50XCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRcdHJldHVybiAwXG4mIzQzO1x0ZmlcbiYjNDM7XHRrdGFwX3ByaW50X21zZyBcJiMzNDtkbWVzZzogcGF0dGVybiAmIzM5OyRwYXR0ZXJuJiMzOTsgc2VlbiAkZ290IHRpbWVzLCB3YW50ICR3YW50XCYjMzQ7XG4mIzQzO1x0cmV0dXJuIDFcbiB9XG4gXG4tIyBWZXJpZnkgdGhhdCBhbiBlcnJvbmVvdXMgKCQyKSB1cGRhdGUgZmFpbHMgYW5kIGRvZXMgbm90IGNoYW5nZSBUQVJHRVRcbi12ZXJpZnlfbm9fcGFydGlhbF91cGRhdGUoKVxuJiM0MzsjIHdyaXRlIFx1MDAzY3N0clx1MDAzZSB0aHJvdWdoIGRkIGluIFx1MDAzY2JzXHUwMDNlLXNpemVkIGNodW5rc1xuJiM0Mzt3cml0ZV9pbl9jaHVua3MoKSAgIyBcdTAwM2NmaWxlXHUwMDNlIFx1MDAzY3N0clx1MDAzZSBcdTAwM2Nic1x1MDAzZVxuIHtcbi1cdFRFU1RfU1RSPVwmIzM0OyQxXCYjMzQ7XG4tXHRlY2hvIC1uIFwmIzM0OyRURVNUX1NUUlwmIzM0OyBcdTAwM2UgXCYjMzQ7JFRBUkdFVFwmIzM0O1xuLVxuLVx0aWYgZWNobyAtbiBcJiMzNDskMlwmIzM0OyBcdTAwM2UgXCYjMzQ7JFRBUkdFVFwmIzM0OyAyXHUwMDNlIC9kZXYvbnVsbDsgdGhlblxuLVx0XHRyZXR1cm4gMVxuLVx0Zmlcbi1cdHZlcmlmeV9kaWZmX3cgXCYjMzQ7JHtUQVJHRVR9XCYjMzQ7XG4mIzQzO1x0bG9jYWwgZmlsZT0kMSBzdHI9JDIgYnM9JDNcbiYjNDM7XHRwcmludGYgJiMzOTslcyYjMzk7IFwmIzM0OyRzdHJcJiMzNDsgfCBkZCBvZj1cJiMzNDskZmlsZVwmIzM0OyBicz1cJiMzNDskYnNcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuIH1cbiBcbi10ZXN0X3JjKClcbiYjNDM7IyB3cml0ZSBcdTAwM2NzdHJcdTAwM2UgdGhyb3VnaCBkZCBpbiBcdTAwM2Nic1x1MDAzZS1zaXplZCBjaHVua3MuIHNlZWtpbmcgXHUwMDNjc2Vla1x1MDAzZSBibG9ja3Mgb2Ygc2l6ZVxuJiM0MzsjIFx1MDAzY2JzXHUwMDNlIGludG8gdGhlIG91dHB1dC4gc2tpcHBpbmcgXHUwMDNjc2tpcFx1MDAzZSBibG9ja3Mgb2Ygc2l6ZSBcdTAwM2Nic1x1MDAzZSBmcm9tIHRoZSBpbnB1dC5cbiYjNDM7IyBVbnN5bmNyaG9uaXplZCB3aGVuIHNraXAgaXMgbm90IHBhc3NlZC5cbiYjNDM7d3JpdGVfYXRfb2Zmc2V0KCkgICMgXHUwMDNjZmlsZVx1MDAzZSBcdTAwM2NzdHJcdTAwM2UgXHUwMDNjYnNcdTAwM2UgXHUwMDNjc2Vla1x1MDAzZSBbc2tpcF1cbiB7XG4tXHRpZiBbWyAkcmMgIT0gMCBdXTsgdGhlblxuLVx0XHRlY2hvIFwmIzM0O0ZhaWxlZCB0ZXN0LCByZXR1cm4gdmFsdWU6ICRyY1wmIzM0OyBcdTAwM2VcdTAwMjYyXG4tXHRcdGV4aXQgJHJjXG4mIzQzO1x0bG9jYWwgZmlsZT0kMSBzdHI9JDIgYnM9JDMgc2Vlaz0kNCBza2lwPSR7NTotfVxuJiM0MztcdGlmIFsgLW4gXCYjMzQ7JHNraXBcJiMzNDsgXTsgdGhlblxuJiM0MztcdFx0cHJpbnRmICYjMzk7JXMmIzM5OyBcJiMzNDskc3RyXCYjMzQ7IHwgZGQgb2Y9XCYjMzQ7JGZpbGVcJiMzNDsgYnM9XCYjMzQ7JGJzXCYjMzQ7IHNlZWs9XCYjMzQ7JHNlZWtcJiMzNDsgc2tpcD1cJiMzNDskc2tpcFwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cHJpbnRmICYjMzk7JXMmIzM5OyBcJiMzNDskc3RyXCYjMzQ7IHwgZGQgb2Y9XCYjMzQ7JGZpbGVcJiMzNDsgYnM9XCYjMzQ7JGJzXCYjMzQ7IHNlZWs9XCYjMzQ7JHNlZWtcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuIFx0ZmlcbiB9XG4gXG4tdGVzdF9maW5pc2goKVxuJiM0MzsjIHBhZCAocHJlZml4KSBcdTAwM2NzdHJcdTAwM2Ugd2l0aCBcdTAwM2NwYWRcdTAwM2UgJiMzOTtBJiMzOTsgY2hhcmFjdGVycywgdGhlbiB3cml0ZSBpdCBhbGwgdG8gXHUwMDNjZmlsZVx1MDAzZVxuJiM0MzsjIHdpdGggZGQgYmxvY2sgc2l6ZSBcdTAwM2Nic1x1MDAzZSAoZGVmYXVsdHMgdG8gXHUwMDNjcGFkXHUwMDNlKS5cbiYjNDM7d3JpdGVfb3ZlcmxvbmcoKSAgIyBcdTAwM2NmaWxlXHUwMDNlIFx1MDAzY3BhZFx1MDAzZSBcdTAwM2NzdHJcdTAwM2UgW2JzXVxuIHtcbi1cdHNldF9vcmlnXG4tXHRybSAtZiBcJiMzNDske1RFU1RfRklMRX1cJiMzNDtcbiYjNDM7XHRsb2NhbCBmaWxlPSQxIHBhZD0kMiBzdHI9JDMgYnM9JDQgcFxuJiM0MztcdDogXCYjMzQ7JHticzo9JHBhZH1cJiMzNDtcbiBcbi1cdGlmIFsgISAteiAke29sZF9zdHJpY3R9IF07IHRoZW5cbi1cdFx0ZWNobyAke29sZF9zdHJpY3R9IFx1MDAzZSAke1dSSVRFU19TVFJJQ1R9XG4tXHRmaVxuLVx0ZXhpdCAkcmNcbiYjNDM7XHQjIHNhdmUgYSBzdHJpbmcgd2l0aCAkcGFkIHNwYWNlcyBpbiAkcFxuJiM0MztcdHByaW50ZiAtdiBwICYjMzk7JSpzJiMzOTsgXCYjMzQ7JHBhZFwmIzM0OyAmIzM5OyYjMzk7XG4mIzQzO1x0IyByZXBsYWNlIFwmIzM0OyBcJiMzNDsgd2l0aCBcJiMzNDtBXCYjMzQ7XG4mIzQzO1x0cHJpbnRmICYjMzk7JXMlcyYjMzk7IFwmIzM0OyR7cC8vIC9BfVwmIzM0OyBcJiMzNDskc3RyXCYjMzQ7IHwgZGQgb2Y9XCYjMzQ7JGZpbGVcJiMzNDsgYnM9XCYjMzQ7JGJzXCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiB9XG4gXG4tcnVuX251bWVyaWN0ZXN0cygpXG4mIzQzOyMgcGFkIChwcmVmaXgpIFx1MDAzY3N0clx1MDAzZSB3aXRoIFx1MDAzY3BhZFx1MDAzZSBBU0NJSSBzcGFjZXMsIHRoZW4gd3JpdGUgd2l0aCBkZWZhdWx0IGJsb2NrIHNpemUuXG4mIzQzO3dyaXRlX3BhZGRlZF9kaWdpdHMoKSAgIyBcdTAwM2NmaWxlXHUwMDNlIFx1MDAzY3BhZFx1MDAzZSBcdTAwM2N2YWxcdTAwM2VcbiB7XG4tXHRlY2hvIFwmIzM0Oz09IFRlc3Rpbmcgc3lzY3RsIGJlaGF2aW9yIGFnYWluc3QgJHtUQVJHRVR9ID09XCYjMzQ7XG4mIzQzO1x0bG9jYWwgZmlsZT0kMSBwYWQ9JDIgdmFsPSQzIHBcbiYjNDM7XHRwcmludGYgLXYgcCAmIzM5OyUqcyYjMzk7IFwmIzM0OyRwYWRcJiMzNDsgJiMzOTsmIzM5O1xuJiM0MztcdHByaW50ZiAmIzM5OyVzJXMmIzM5OyBcJiMzNDskcFwmIzM0OyBcJiMzNDskdmFsXCYjMzQ7IHwgZGQgb2Y9XCYjMzQ7JGZpbGVcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuJiM0Mzt9XG4gXG4tXHRyYz0wXG4mIzQzO3Rlc3RfaW50X2FycmF5X3dyaXRlcygpXG4mIzQzO3tcbiYjNDM7XHRsb2NhbCB0PVwmIzM0OyR7U1lTQ1RMfS9pbnRfMDAwM1wmIzM0O1xuJiM0MztcdGxvY2FsIGxpbWl0XG4gXG4tXHRlY2hvIC1uIFwmIzM0O1dyaXRpbmcgdGVzdCBmaWxlIC4uLiBcJiMzNDtcbi1cdGVjaG8gXCYjMzQ7JHtURVNUX1NUUn1cJiMzNDsgXHUwMDNlIFwmIzM0OyR7VEVTVF9GSUxFfVwmIzM0O1xuLVx0aWYgISB2ZXJpZnkgXCYjMzQ7JHtURVNUX0ZJTEV9XCYjMzQ7OyB0aGVuXG4tXHRcdGVjaG8gXCYjMzQ7RkFJTFwmIzM0OyBcdTAwM2VcdTAwMjYyXG4tXHRcdGV4aXQgMVxuLVx0ZWxzZVxuLVx0XHRlY2hvIFwmIzM0O09LXCYjMzQ7XG4tXHRmaVxuJiM0MztcdFtbIC1mIFwmIzM0OyR0XCYjMzQ7IF1dIHx8IHsgUkVUPSRLU0ZUX1NLSVA7IHJldHVybjsgfVxuIFxuLVx0ZWNobyAtbiBcJiMzNDtDaGVja2luZyBzeXNjdGwgaXMgbm90IHNldCB0byB0ZXN0IHZhbHVlIC4uLiBcJiMzNDtcbi1cdGlmIHZlcmlmeSBcJiMzNDske1RBUkdFVH1cJiMzNDs7IHRoZW5cbi1cdFx0ZWNobyBcJiMzNDtGQUlMXCYjMzQ7IFx1MDAzZVx1MDAyNjJcbi1cdFx0ZXhpdCAxXG4tXHRlbHNlXG4tXHRcdGVjaG8gXCYjMzQ7T0tcJiMzNDtcbi1cdGZpXG4mIzQzO1x0cHJpbnRmICYjMzk7JXMmIzM5OyBcJiMzNDs0IDMgMiAxXCYjMzQ7IFx1MDAzZSBcJiMzNDskdFwmIzM0O1xuJiM0MztcdGFzc2VydF9jb250ZW50X2xvb3NlIFwmIzM0OyR0XCYjMzQ7IFwmIzM0OzQgMyAyIDFcJiMzNDsgfHwgUkVUPSRLU0ZUX0ZBSUxcbiBcbi1cdGVjaG8gLW4gXCYjMzQ7V3JpdGluZyBzeXNjdGwgZnJvbSBzaGVsbCAuLi4gXCYjMzQ7XG4tXHRzZXRfdGVzdFxuLVx0aWYgISB2ZXJpZnkgXCYjMzQ7JHtUQVJHRVR9XCYjMzQ7OyB0aGVuXG4tXHRcdGVjaG8gXCYjMzQ7RkFJTFwmIzM0OyBcdTAwM2VcdTAwMjYyXG4tXHRcdGV4aXQgMVxuLVx0ZWxzZVxuLVx0XHRlY2hvIFwmIzM0O09LXCYjMzQ7XG4tXHRmaVxuJiM0MztcdCMgU2tpcHBpbmcgdHJhaWxpbmcgZWxlbWVudHMgbGVhdmVzIHRoZW0gaW50YWN0XG4mIzQzO1x0cHJpbnRmICYjMzk7JXMmIzM5OyBcJiMzNDsxMDAgMTAxXCYjMzQ7IFx1MDAzZSBcJiMzNDskdFwmIzM0O1xuJiM0MztcdGFzc2VydF9jb250ZW50X2xvb3NlIFwmIzM0OyR0XCYjMzQ7IFwmIzM0OzEwMCAxMDEgMiAxXCYjMzQ7IHx8IFJFVD0kS1NGVF9GQUlMXG4gXG4tXHRlY2hvIC1uIFwmIzM0O1Jlc2V0dGluZyBzeXNjdGwgdG8gb3JpZ2luYWwgdmFsdWUgLi4uIFwmIzM0O1xuLVx0c2V0X29yaWdcbi1cdGlmIHZlcmlmeSBcJiMzNDske1RBUkdFVH1cJiMzNDs7IHRoZW5cbi1cdFx0ZWNobyBcJiMzNDtGQUlMXCYjMzQ7IFx1MDAzZVx1MDAyNjJcbi1cdFx0ZXhpdCAxXG4tXHRlbHNlXG4tXHRcdGVjaG8gXCYjMzQ7T0tcJiMzNDtcbi1cdGZpXG4mIzQzO1x0IyBFdmVuIGZvciBhbiBpbnQgYXJyYXksIGEgc2luZ2xlIHdyaXRlIGlzIHN0aWxsIGNhcHBlZCBhdCBNQVhfRElHSVRTXG4mIzQzO1x0IyAoUEFHRV9TSVpFLzgpIGJ5dGVzOyBjaGVjayByaWdodCBhdCwgYW5kIGp1c3QgcGFzdCwgdGhhdCBib3VuZGFyeS5cbiYjNDM7XHQjIENhcnJpZXMgb24gdGhlIHN0YXRlIGZyb20gdGhlIHdyaXRlcyBhYm92ZS5cbiYjNDM7XHRsaW1pdD0kKChNQVhfRElHSVRTIC0gMSkpXG4mIzQzO1x0d3JpdGVfcGFkZGVkX2RpZ2l0cyBcJiMzNDskdFwmIzM0OyBcJiMzNDskbGltaXRcJiMzNDsgXCYjMzQ7OVwmIzM0O1xuJiM0MztcdGFzc2VydF9jb250ZW50X2xvb3NlIFwmIzM0OyR0XCYjMzQ7IFwmIzM0OzkgMTAxIDIgMVwmIzM0OyB8fCBSRVQ9JEtTRlRfRkFJTFxuIFxuLVx0IyBOb3cgdGhhdCB3ZSYjMzk7dmUgdmFsaWRhdGVkIHRoZSBzYW5pdHkgb2YgXCYjMzQ7c2V0X3Rlc3RcJiMzNDsgYW5kIFwmIzM0O3NldF9vcmlnXCYjMzQ7LFxuLVx0IyB3ZSBjYW4gdXNlIHRob3NlIGZ1bmN0aW9ucyB0byBzZXQgc3RhcnRpbmcgc3RhdGVzIGJlZm9yZSBydW5uaW5nXG4tXHQjIHNwZWNpZmljIGJlaGF2aW9yYWwgdGVzdHMuXG4mIzQzO1x0bGltaXQ9JCgoTUFYX0RJR0lUUykpXG4mIzQzO1x0d3JpdGVfcGFkZGVkX2RpZ2l0cyBcJiMzNDskdFwmIzM0OyBcJiMzNDskbGltaXRcJiMzNDsgXCYjMzQ7N1wmIzM0O1xuJiM0MztcdGFzc2VydF9jb250ZW50X3JlamVjdGVkIFwmIzM0OyR0XCYjMzQ7IFwmIzM0OzcgMTAxIDIgMVwmIzM0OyB8fCBSRVQ9JEtTRlRfRkFJTFxuJiM0Mzt9XG4gXG4tXHRlY2hvIC1uIFwmIzM0O1dyaXRpbmcgZW50aXJlIHN5c2N0bCBpbiBzaW5nbGUgd3JpdGUgLi4uIFwmIzM0O1xuLVx0c2V0X29yaWdcbi1cdGRkIGlmPVwmIzM0OyR7VEVTVF9GSUxFfVwmIzM0OyBvZj1cJiMzNDske1RBUkdFVH1cJiMzNDsgYnM9NDA5NiAyXHUwMDNlL2Rldi9udWxsXG4tXHRpZiAhIHZlcmlmeSBcJiMzNDske1RBUkdFVH1cJiMzNDs7IHRoZW5cbi1cdFx0ZWNobyBcJiMzNDtGQUlMXCYjMzQ7IFx1MDAzZVx1MDAyNjJcbi1cdFx0cmM9MVxuLVx0ZWxzZVxuLVx0XHRlY2hvIFwmIzM0O09LXCYjMzQ7XG4tXHRmaVxuJiM0Mzt0ZXN0X2ludF9hcnJheV9ub19wYXJ0aWFsX3VwZGF0ZSgpXG4mIzQzO3tcbiYjNDM7XHRsb2NhbCB0PVwmIzM0OyR7U1lTQ1RMfS9pbnRfMDAwM1wmIzM0O1xuIFxuLVx0ZWNobyAtbiBcJiMzNDtXcml0aW5nIG1pZGRsZSBvZiBzeXNjdGwgYWZ0ZXIgc3luY2hyb25pemVkIHNlZWsgLi4uIFwmIzM0O1xuLVx0c2V0X3Rlc3Rcbi1cdGRkIGlmPVwmIzM0OyR7VEVTVF9GSUxFfVwmIzM0OyBvZj1cJiMzNDske1RBUkdFVH1cJiMzNDsgYnM9MSBzZWVrPTEgc2tpcD0xIDJcdTAwM2UvZGV2L251bGxcbi1cdGlmICEgdmVyaWZ5IFwmIzM0OyR7VEFSR0VUfVwmIzM0OzsgdGhlblxuLVx0XHRlY2hvIFwmIzM0O0ZBSUxcJiMzNDsgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRlbHNlXG4tXHRcdGVjaG8gXCYjMzQ7T0tcJiMzNDtcbi1cdGZpXG4mIzQzO1x0W1sgLWYgXCYjMzQ7JHRcJiMzNDsgXV0gfHwgeyBSRVQ9JEtTRlRfU0tJUDsgcmV0dXJuOyB9XG4gXG4tXHRlY2hvIC1uIFwmIzM0O1dyaXRpbmcgYmV5b25kIGVuZCBvZiBzeXNjdGwgLi4uIFwmIzM0O1xuLVx0c2V0X29yaWdcbi1cdGRkIGlmPVwmIzM0OyR7VEVTVF9GSUxFfVwmIzM0OyBvZj1cJiMzNDske1RBUkdFVH1cJiMzNDsgYnM9MjAgc2Vlaz0yIDJcdTAwM2UvZGV2L251bGxcbi1cdGlmIHZlcmlmeSBcJiMzNDske1RBUkdFVH1cJiMzNDs7IHRoZW5cbi1cdFx0ZWNobyBcJiMzNDtGQUlMXCYjMzQ7IFx1MDAzZVx1MDAyNjJcbi1cdFx0cmM9MVxuLVx0ZWxzZVxuLVx0XHRlY2hvIFwmIzM0O09LXCYjMzQ7XG4tXHRmaVxuJiM0MztcdCMgYmFkIDNyZCBlbGVtZW50IChub3QgYSBudW1iZXIpXG4mIzQzO1x0YXNzZXJ0X25vX3BhcnRpYWxfdXBkYXRlIFwmIzM0OyR0XCYjMzQ7IFwmIzM0OzEgMiAzIDRcJiMzNDsgXCYjMzQ7MTAgMjAgYWJjIDQwXCYjMzQ7IHx8IFJFVD0kS1NGVF9GQUlMXG4gXG4tXHRlY2hvIC1uIFwmIzM0O1dyaXRpbmcgc3lzY3RsIHdpdGggbXVsdGlwbGUgbG9uZyB3cml0ZXMgLi4uIFwmIzM0O1xuLVx0c2V0X29yaWdcbi1cdChwZXJsIC1lICYjMzk7cHJpbnQgXCYjMzQ7QVwmIzM0OyB4IDUwOyYjMzk7OyBlY2hvIFwmIzM0OyR7VEVTVF9TVFJ9XCYjMzQ7KSB8IFxcXG4tXHRcdGRkIG9mPVwmIzM0OyR7VEFSR0VUfVwmIzM0OyBicz01MCAyXHUwMDNlL2Rldi9udWxsXG4tXHRpZiB2ZXJpZnkgXCYjMzQ7JHtUQVJHRVR9XCYjMzQ7OyB0aGVuXG4tXHRcdGVjaG8gXCYjMzQ7RkFJTFwmIzM0OyBcdTAwM2VcdTAwMjYyXG4tXHRcdHJjPTFcbi1cdGVsc2Vcbi1cdFx0ZWNobyBcJiMzNDtPS1wmIzM0O1xuLVx0Zmlcbi1cdHRlc3RfcmNcbiYjNDM7XHQjIGJhZCAzcmQgZWxlbWVudCAob3ZlcmZsb3dzIGludClcbiYjNDM7XHRhc3NlcnRfbm9fcGFydGlhbF91cGRhdGUgXCYjMzQ7JHRcJiMzNDsgXCYjMzQ7MSAyIDMgNFwmIzM0OyBcJiMzNDsxMCAyMCAkKChJTlRfTUFYICYjNDM7IDEpKSA0MFwmIzM0OyB8fCBSRVQ9JEtTRlRfRkFJTFxuJiM0MztcbiYjNDM7XHQjIGJhZCAxc3QgZWxlbWVudFxuJiM0MztcdGFzc2VydF9ub19wYXJ0aWFsX3VwZGF0ZSBcJiMzNDskdFwmIzM0OyBcJiMzNDsxIDIgMyA0XCYjMzQ7IFwmIzM0O2FiYyAyMCAzMCA0MFwmIzM0OyB8fCBSRVQ9JEtTRlRfRkFJTFxuIH1cbiBcbi1jaGVja19mYWlsdXJlKClcbiYjNDM7IyBFeGVyY2lzZSB0aGUgd3JpdGUgcGF0dGVybnNcbiYjNDM7YXNzZXJ0X3dyaXRlX3BhdHRlcm5zKCkgICMgXHUwMDNjZmlsZVx1MDAzZSBcdTAwM2NiYXNlbGluZVx1MDAzZSBcdTAwM2N2YWxcdTAwM2VcbiB7XG4tXHRlY2hvIC1uIFwmIzM0O1Rlc3RpbmcgdGhhdCAkMSBmYWlscyBhcyBleHBlY3RlZCAuLi4gXCYjMzQ7XG4tXHRyZXNldF92YWxzXG4tXHRURVNUX1NUUj1cJiMzNDskMVwmIzM0O1xuLVx0b3JpZz1cJiMzNDskKGNhdCAkVEFSR0VUKVwmIzM0O1xuLVx0ZWNobyAtbiBcJiMzNDskVEVTVF9TVFJcJiMzNDsgXHUwMDNlICRUQVJHRVQgMlx1MDAzZSAvZGV2L251bGxcbi1cbi1cdCMgd3JpdGUgc2hvdWxkIGZhaWwgYW5kICRUQVJHRVQgc2hvdWxkIHJldGFpbiBpdHMgb3JpZ2luYWwgdmFsdWVcbi1cdGlmIFsgJD8gPSAwIF0gfHwgWyBcJiMzNDskKGNhdCAkVEFSR0VUKVwmIzM0OyAhPSBcJiMzNDskb3JpZ1wmIzM0OyBdOyB0aGVuXG4tXHRcdGVjaG8gXCYjMzQ7RkFJTFwmIzM0OyBcdTAwM2VcdTAwMjYyXG4tXHRcdHJjPTFcbi1cdGVsc2Vcbi1cdFx0ZWNobyBcJiMzNDtPS1wmIzM0O1xuLVx0Zmlcbi1cdHRlc3RfcmNcbiYjNDM7XHRsb2NhbCBmaWxlPSQxIGJhc2VsaW5lPSQyIHZhbD0kMyBzdGF0dXM9MFxuJiM0MztcbiYjNDM7XHRwcmludGYgJiMzOTslcyYjMzk7IFwmIzM0OyR2YWxcJiMzNDsgXHUwMDNlIFwmIzM0OyRmaWxlXCYjMzQ7XG4mIzQzO1x0YXNzZXJ0X2NvbnRlbnQgXCYjMzQ7JGZpbGVcJiMzNDsgXCYjMzQ7JHZhbFwmIzM0OyB8fCBzdGF0dXM9MVxuJiM0MztcdHByaW50ZiAmIzM5OyVzJiMzOTsgXCYjMzQ7JGJhc2VsaW5lXCYjMzQ7IFx1MDAzZSBcJiMzNDskZmlsZVwmIzM0O1xuJiM0MztcdGFzc2VydF9jb250ZW50IFwmIzM0OyRmaWxlXCYjMzQ7IFwmIzM0OyRiYXNlbGluZVwmIzM0OyB8fCBzdGF0dXM9MVxuJiM0MztcbiYjNDM7XHRwcmludGYgJiMzOTslcyYjMzk7IFwmIzM0OyRiYXNlbGluZVwmIzM0OyBcdTAwM2UgXCYjMzQ7JGZpbGVcJiMzNDtcbiYjNDM7XHR3cml0ZV9pbl9jaHVua3MgXCYjMzQ7JGZpbGVcJiMzNDsgXCYjMzQ7JHZhbFwmIzM0OyA0MDk2XG4mIzQzO1x0YXNzZXJ0X2NvbnRlbnQgXCYjMzQ7JGZpbGVcJiMzNDsgXCYjMzQ7JHZhbFwmIzM0OyB8fCBzdGF0dXM9MVxuJiM0MztcbiYjNDM7XHRwcmludGYgJiMzOTslcyYjMzk7IFwmIzM0OyR2YWxcJiMzNDsgXHUwMDNlIFwmIzM0OyRmaWxlXCYjMzQ7XG4mIzQzO1x0d3JpdGVfYXRfb2Zmc2V0IFwmIzM0OyRmaWxlXCYjMzQ7IFwmIzM0OyR2YWxcJiMzNDsgMSAxIDFcbiYjNDM7XHRhc3NlcnRfY29udGVudCBcJiMzNDskZmlsZVwmIzM0OyBcJiMzNDskdmFsXCYjMzQ7IHx8IHN0YXR1cz0xXG4mIzQzO1xuJiM0MztcdHByaW50ZiAmIzM5OyVzJiMzOTsgXCYjMzQ7JGJhc2VsaW5lXCYjMzQ7IFx1MDAzZSBcJiMzNDskZmlsZVwmIzM0O1xuJiM0MztcdHdyaXRlX2F0X29mZnNldCBcJiMzNDskZmlsZVwmIzM0OyBcJiMzNDskdmFsXCYjMzQ7IDIwIDJcbiYjNDM7XHRhc3NlcnRfY29udGVudF9yZWplY3RlZCBcJiMzNDskZmlsZVwmIzM0OyBcJiMzNDskdmFsXCYjMzQ7IHx8IHN0YXR1cz0xXG4mIzQzO1xuJiM0MztcdHByaW50ZiAmIzM5OyVzJiMzOTsgXCYjMzQ7JGJhc2VsaW5lXCYjMzQ7IFx1MDAzZSBcJiMzNDskZmlsZVwmIzM0O1xuJiM0MztcdHdyaXRlX292ZXJsb25nIFwmIzM0OyRmaWxlXCYjMzQ7IDUwIFwmIzM0OyR2YWxcJiMzNDtcbiYjNDM7XHRhc3NlcnRfY29udGVudF9yZWplY3RlZCBcJiMzNDskZmlsZVwmIzM0OyBcJiMzNDskdmFsXCYjMzQ7IHx8IHN0YXR1cz0xXG4mIzQzO1xuJiM0MztcdHJldHVybiBcJiMzNDskc3RhdHVzXCYjMzQ7XG4gfVxuIFxuLXJ1bl93aWRlaW50X3Rlc3RzKClcbiYjNDM7IyBOb25lIG9mIHRoZXNlIGZpdCBpbiAzMiBiaXRzLCBzbyB3cml0aW5nIHRoZW0gdG8gYW4gaW50L3VpbnQgc3lzY3RsIG11c3QgZmFpbFxuJiM0Mzthc3NlcnRfd2lkZWludF93cml0ZXNfcmVqZWN0ZWQoKSAgIyBcdTAwM2NmaWxlXHUwMDNlIFx1MDAzY2Jhc2VsaW5lXHUwMDNlXG4ge1xuLVx0IyBzeXNjdGwgY29udmVyc2lvbiBmdW5jdGlvbnMgcmVjZWl2ZSBhIGJvb2xlYW4gc2lnbiBhbmQgdWxvbmdcbi1cdCMgbWFnbml0dWRlOyBoZXJlIHdlIGxpc3QgdGhlIG1hZ25pdHVkZXMgd2Ugd2FudCB0byB0ZXN0IChlYWNoIG9mXG4tXHQjIHdoaWNoIHdpbGwgYmUgdGVzdGVkIGluIGJvdGggcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIGZvcm1zKS4gIFNpbmNlXG4tXHQjIG5vbmUgb2YgdGhlc2UgdmFsdWVzIGZpdCBpbiAzMiBiaXRzLCB3cml0aW5nIHRoZW0gdG8gYW4gaW50LSBvclxuLVx0IyB1aW50LXR5cGVkIHN5c2N0bCBzaG91bGQgZmFpbC5cbiYjNDM7XHRsb2NhbCBmaWxlPSQxIGJhc2VsaW5lPSQyIHNpZ24gbWFnIHN0YXR1cz0wXG4gXHRsb2NhbCBtYWduaXR1ZGVzPShcbi1cdFx0IyBjb21tb24gYm91bmRhcnktY29uZGl0aW9uIHZhbHVlcyAoemVybywgJiM0MzsxLCAtMSwgSU5UX01JTixcbi1cdFx0IyBhbmQgSU5UX01BWCByZXNwZWN0aXZlbHkpIGlmIHRydW5jYXRlZCB0byBsb3dlciAzMiBiaXRzXG4tXHRcdCMgKHBvdGVudGlhbCBmb3IgYmVpbmcgZmFsc2VseSBkZWVtZWQgaW4gcmFuZ2UpXG4gXHRcdDB4MDAwMDAwMDEwMDAwMDAwMFxuIFx0XHQweDAwMDAwMDAxMDAwMDAwMDFcbiBcdFx0MHgwMDAwMDAwMWZmZmZmZmZmXG4gXHRcdDB4MDAwMDAwMDE4MDAwMDAwMFxuIFx0XHQweDAwMDAwMDAxN2ZmZmZmZmZcbi1cbi1cdFx0IyB0aGVzZSBsb29rIGxpa2UgbmVnYXRpdmVzLCBidXQgd2l0aG91dCBhIGxlYWRpbmcgJiMzOTstJiMzOTsgYXJlXG4tXHRcdCMgYWN0dWFsbHkgbGFyZ2UgcG9zaXRpdmVzIChzaG91bGQgYmUgcmVqZWN0ZWQgYXMgYWJvdmVcbi1cdFx0IyBkZXNwaXRlIGJlaW5nIHplcm8vJiM0MzsxLy0xL0lOVF9NSU4vSU5UX01BWCBpbiB0aGUgbG93ZXIgMzIpXG4gXHRcdDB4ZmZmZmZmZmYwMDAwMDAwMFxuIFx0XHQweGZmZmZmZmZmMDAwMDAwMDFcbiBcdFx0MHhmZmZmZmZmZmZmZmZmZmZmXG5AQCAtMzY3LDc5MyAmIzQzOzI0NCw1MTUgQEAgcnVuX3dpZGVpbnRfdGVzdHMoKVxuIFxuIFx0Zm9yIHNpZ24gaW4gJiMzOTsmIzM5OyAmIzM5Oy0mIzM5OzsgZG9cbiBcdFx0Zm9yIG1hZyBpbiBcJiMzNDske21hZ25pdHVkZXNbQF19XCYjMzQ7OyBkb1xuLVx0XHRcdGNoZWNrX2ZhaWx1cmUgXCYjMzQ7JHtzaWdufSR7bWFnfVwmIzM0O1xuJiM0MztcdFx0XHRhc3NlcnRfbm9fcGFydGlhbF91cGRhdGUgXCYjMzQ7JGZpbGVcJiMzNDsgXCYjMzQ7JGJhc2VsaW5lXCYjMzQ7IFwmIzM0OyR7c2lnbn0ke21hZ31cJiMzNDsgfHwgc3RhdHVzPTFcbiBcdFx0ZG9uZVxuIFx0ZG9uZVxuJiM0MztcdHJldHVybiBcJiMzNDskc3RhdHVzXCYjMzQ7XG4gfVxuIFxuLSMgWW91ciB0ZXN0IG11c3QgYWNjZXB0IGRpZ2l0cyAzIGFuZCA0IHRvIHVzZSB0aGlzXG4tcnVuX2xpbWl0X2RpZ2l0KClcbiYjNDM7IyBBIHNpbmdsZSB3cml0ZSBpcyBjYXBwZWQgYXQgTUFYX0RJR0lUUyAoUEFHRV9TSVpFLzgpIGJ5dGVzOyBjaGVjayB0aGF0XG4mIzQzOyMgbGVhZGluZyB3aGl0ZXNwYWNlIHVwIHRvIHRoYXQgbGltaXQgaXMgaWdub3JlZCwgYW5kIHRoYXQgUEFHRV9TSVpFIG9mXG4mIzQzOyMgbGVhZGluZyB3aGl0ZXNwYWNlIHB1c2hlcyB0aGUgdmFsdWUgcGFzdCB0aGUgbGltaXQgYW5kIGZhaWxzLlxuJiM0Mzthc3NlcnRfZGlnaXRfbGltaXQoKSAgIyBcdTAwM2NmaWxlXHUwMDNlIFx1MDAzY2Jhc2VsaW5lXHUwMDNlXG4ge1xuLVx0ZWNobyAtbiBcJiMzNDtDaGVja2luZyBpZ25vcmluZyBzcGFjZXMgdXAgdG8gUEFHRV9TSVpFIHdvcmtzIG9uIHdyaXRlIC4uLiBcJiMzNDtcbi1cdHJlc2V0X3ZhbHNcbi1cbi1cdExJTUlUPSQoKE1BWF9ESUdJVFMgLTEpKVxuLVx0VEVTVF9TVFI9XCYjMzQ7M1wmIzM0O1xuLVx0KHBlcmwgLWUgJiMzOTtwcmludCBcJiMzNDsgXCYjMzQ7IHggJiMzOTskTElNSVQmIzM5OzsmIzM5OzsgZWNobyBcJiMzNDske1RFU1RfU1RSfVwmIzM0OykgfCBcXFxuLVx0XHRkZCBvZj1cJiMzNDske1RBUkdFVH1cJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuLVxuLVx0aWYgISB2ZXJpZnkgXCYjMzQ7JHtUQVJHRVR9XCYjMzQ7OyB0aGVuXG4tXHRcdGVjaG8gXCYjMzQ7RkFJTFwmIzM0OyBcdTAwM2VcdTAwMjYyXG4tXHRcdHJjPTFcbi1cdGVsc2Vcbi1cdFx0ZWNobyBcJiMzNDtPS1wmIzM0O1xuLVx0Zmlcbi1cdHRlc3RfcmNcbiYjNDM7XHRsb2NhbCBmaWxlPSQxIGJhc2VsaW5lPSQyIHN0YXR1cz0wXG4gXG4tXHRlY2hvIC1uIFwmIzM0O0NoZWNraW5nIHBhc3NpbmcgUEFHRV9TSVpFIG9mIHNwYWNlcyBmYWlscyBvbiB3cml0ZSAuLi4gXCYjMzQ7XG4tXHRyZXNldF92YWxzXG4mIzQzO1x0cHJpbnRmICYjMzk7JXMmIzM5OyBcJiMzNDskYmFzZWxpbmVcJiMzNDsgXHUwMDNlIFwmIzM0OyRmaWxlXCYjMzQ7XG4mIzQzO1x0d3JpdGVfcGFkZGVkX2RpZ2l0cyBcJiMzNDskZmlsZVwmIzM0OyBcJiMzNDskKChNQVhfRElHSVRTIC0gMSkpXCYjMzQ7IFwmIzM0OzNcJiMzNDtcbiYjNDM7XHRhc3NlcnRfY29udGVudCBcJiMzNDskZmlsZVwmIzM0OyBcJiMzNDszXCYjMzQ7IHx8IHN0YXR1cz0xXG4gXG4tXHRMSU1JVD0kKChNQVhfRElHSVRTKSlcbi1cdFRFU1RfU1RSPVwmIzM0OzRcJiMzNDtcbi1cdChwZXJsIC1lICYjMzk7cHJpbnQgXCYjMzQ7IFwmIzM0OyB4ICYjMzk7JExJTUlUJiMzOTs7JiMzOTs7IGVjaG8gXCYjMzQ7JHtURVNUX1NUUn1cJiMzNDspIHwgXFxcbi1cdFx0ZGQgb2Y9XCYjMzQ7JHtUQVJHRVR9XCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7XHRwcmludGYgJiMzOTslcyYjMzk7IFwmIzM0OyRiYXNlbGluZVwmIzM0OyBcdTAwM2UgXCYjMzQ7JGZpbGVcJiMzNDtcbiYjNDM7XHR3cml0ZV9wYWRkZWRfZGlnaXRzIFwmIzM0OyRmaWxlXCYjMzQ7IFwmIzM0OyRNQVhfRElHSVRTXCYjMzQ7IFwmIzM0OzRcJiMzNDtcbiYjNDM7XHRhc3NlcnRfY29udGVudF9yZWplY3RlZCBcJiMzNDskZmlsZVwmIzM0OyBcJiMzNDs0XCYjMzQ7IHx8IHN0YXR1cz0xXG4gXG4tXHRpZiB2ZXJpZnkgXCYjMzQ7JHtUQVJHRVR9XCYjMzQ7OyB0aGVuXG4tXHRcdGVjaG8gXCYjMzQ7RkFJTFwmIzM0OyBcdTAwM2VcdTAwMjYyXG4tXHRcdHJjPTFcbi1cdGVsc2Vcbi1cdFx0ZWNobyBcJiMzNDtPS1wmIzM0O1xuLVx0Zmlcbi1cdHRlc3RfcmNcbiYjNDM7XHRyZXR1cm4gXCYjMzQ7JHN0YXR1c1wmIzM0O1xuIH1cbiBcbi0jIFlvdSBhcmUgdXNpbmcgYW4gaW50XG4tcnVuX2xpbWl0X2RpZ2l0X2ludCgpXG4mIzQzOyMgcHJvY19kb2ludHZlYygpLXNwZWNpZmljIHJhbmdlIGNoZWNrczogSU5UX01BWCBtdXN0IGJlIGFjY2VwdGVkLCBJTlRfTUFYJiM0MzsxXG4mIzQzOyMgbXVzdCBiZSByZWplY3RlZCwgYW5kIG5lZ2F0aXZlIHZhbHVlcyBtdXN0IGJlIGFjY2VwdGVkLlxuJiM0Mzthc3NlcnRfaW50X3JhbmdlKCkgICMgXHUwMDNjZmlsZVx1MDAzZSBcdTAwM2NiYXNlbGluZVx1MDAzZVxuIHtcbi1cdGVjaG8gLW4gXCYjMzQ7VGVzdGluZyBJTlRfTUFYIHdvcmtzIC4uLiBcJiMzNDtcbi1cdHJlc2V0X3ZhbHNcbi1cdFRFU1RfU1RSPVwmIzM0OyRJTlRfTUFYXCYjMzQ7XG4tXHRlY2hvIC1uICRURVNUX1NUUiBcdTAwM2UgJFRBUkdFVFxuLVxuLVx0aWYgISB2ZXJpZnkgXCYjMzQ7JHtUQVJHRVR9XCYjMzQ7OyB0aGVuXG4tXHRcdGVjaG8gXCYjMzQ7RkFJTFwmIzM0OyBcdTAwM2VcdTAwMjYyXG4tXHRcdHJjPTFcbi1cdGVsc2Vcbi1cdFx0ZWNobyBcJiMzNDtPS1wmIzM0O1xuLVx0Zmlcbi1cdHRlc3RfcmNcbiYjNDM7XHRsb2NhbCBmaWxlPSQxIGJhc2VsaW5lPSQyIHN0YXR1cz0wXG4gXG4tXHRlY2hvIC1uIFwmIzM0O1Rlc3RpbmcgSU5UX01BWCAmIzQzOyAxIHdpbGwgZmFpbCBhcyBleHBlY3RlZCAuLi4gXCYjMzQ7XG4tXHRyZXNldF92YWxzXG4tXHRsZXQgVEVTVF9TVFI9JElOVF9NQVgmIzQzOzFcbi1cdGVjaG8gLW4gJFRFU1RfU1RSIFx1MDAzZSAkVEFSR0VUIDJcdTAwM2UgL2Rldi9udWxsXG4mIzQzO1x0cHJpbnRmICYjMzk7JXMmIzM5OyBcJiMzNDskYmFzZWxpbmVcJiMzNDsgXHUwMDNlIFwmIzM0OyRmaWxlXCYjMzQ7XG4mIzQzO1x0cHJpbnRmICYjMzk7JXMmIzM5OyBcJiMzNDskSU5UX01BWFwmIzM0OyBcdTAwM2UgXCYjMzQ7JGZpbGVcJiMzNDtcbiYjNDM7XHRhc3NlcnRfY29udGVudCBcJiMzNDskZmlsZVwmIzM0OyBcJiMzNDskSU5UX01BWFwmIzM0OyB8fCBzdGF0dXM9MVxuIFxuLVx0aWYgdmVyaWZ5IFwmIzM0OyR7VEFSR0VUfVwmIzM0OzsgdGhlblxuLVx0XHRlY2hvIFwmIzM0O0ZBSUxcJiMzNDsgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRlbHNlXG4tXHRcdGVjaG8gXCYjMzQ7T0tcJiMzNDtcbi1cdGZpXG4tXHR0ZXN0X3JjXG4tXG4tXHRlY2hvIC1uIFwmIzM0O1Rlc3RpbmcgbmVnYXRpdmUgdmFsdWVzIHdpbGwgd29yayBhcyBleHBlY3RlZCAuLi4gXCYjMzQ7XG4tXHRyZXNldF92YWxzXG4tXHRURVNUX1NUUj1cJiMzNDstM1wmIzM0O1xuLVx0ZWNobyAtbiAkVEVTVF9TVFIgXHUwMDNlICRUQVJHRVQgMlx1MDAzZSAvZGV2L251bGxcbi1cdGlmICEgdmVyaWZ5IFwmIzM0OyR7VEFSR0VUfVwmIzM0OzsgdGhlblxuLVx0XHRlY2hvIFwmIzM0O0ZBSUxcJiMzNDsgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRlbHNlXG4tXHRcdGVjaG8gXCYjMzQ7T0tcJiMzNDtcbi1cdGZpXG4tXHR0ZXN0X3JjXG4tfVxuJiM0MztcdGFzc2VydF9ub19wYXJ0aWFsX3VwZGF0ZSBcJiMzNDskZmlsZVwmIzM0OyBcJiMzNDskYmFzZWxpbmVcJiMzNDsgXCYjMzQ7JCgoSU5UX01BWCAmIzQzOyAxKSlcJiMzNDsgfHwgc3RhdHVzPTFcbiBcbi0jIFlvdSB1c2VkIGFuIGludCBhcnJheVxuLXJ1bl9saW1pdF9kaWdpdF9pbnRfYXJyYXkoKVxuLXtcbi1cdGVjaG8gLW4gXCYjMzQ7VGVzdGluZyBhcnJheSB3b3JrcyBhcyBleHBlY3RlZCAuLi4gXCYjMzQ7XG4tXHRURVNUX1NUUj1cJiMzNDs0IDMgMiAxXCYjMzQ7XG4tXHRlY2hvIC1uICRURVNUX1NUUiBcdTAwM2UgJFRBUkdFVFxuJiM0MztcdHByaW50ZiAmIzM5OyVzJiMzOTsgXCYjMzQ7JGJhc2VsaW5lXCYjMzQ7IFx1MDAzZSBcJiMzNDskZmlsZVwmIzM0O1xuJiM0MztcdHByaW50ZiAmIzM5OyVzJiMzOTsgXCYjMzQ7LTNcJiMzNDsgXHUwMDNlIFwmIzM0OyRmaWxlXCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7XHRhc3NlcnRfY29udGVudCBcJiMzNDskZmlsZVwmIzM0OyBcJiMzNDstM1wmIzM0OyB8fCBzdGF0dXM9MVxuIFxuLVx0aWYgISB2ZXJpZnlfZGlmZl93IFwmIzM0OyR7VEFSR0VUfVwmIzM0OzsgdGhlblxuLVx0XHRlY2hvIFwmIzM0O0ZBSUxcJiMzNDsgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRlbHNlXG4tXHRcdGVjaG8gXCYjMzQ7T0tcJiMzNDtcbi1cdGZpXG4tXHR0ZXN0X3JjXG4tXG4tXHRlY2hvIC1uIFwmIzM0O1Rlc3Rpbmcgc2tpcHBpbmcgdHJhaWxpbmcgYXJyYXkgZWxlbWVudHMgd29ya3MgLi4uIFwmIzM0O1xuLVx0IyBEbyBub3QgcmVzZXRfdmFscywgY2Fycnkgb24gdGhlIHZhbHVlcyBmcm9tIHRoZSBsYXN0IHRlc3QuXG4tXHQjIElmIHdlIG9ubHkgZWNobyBpbiB0d28gZGlnaXRzIHRoZSBsYXN0IHR3byBhcmUgbGVmdCBpbnRhY3Rcbi1cdFRFU1RfU1RSPVwmIzM0OzEwMCAxMDFcJiMzNDtcbi1cdGVjaG8gLW4gJFRFU1RfU1RSIFx1MDAzZSAkVEFSR0VUXG4tXHQjIEFmdGVyIHdlIGVjaG8gaW4sIHRvIGhlbHAgZGlmZiB3ZSBuZWVkIHRvIHNldCBvbiBURVNUX1NUUiB3aGF0XG4tXHQjIHdlIGV4cGVjdCB0aGUgcmVzdWx0IHRvIGJlLlxuLVx0VEVTVF9TVFI9XCYjMzQ7MTAwIDEwMSAyIDFcJiMzNDtcbi1cbi1cdGlmICEgdmVyaWZ5X2RpZmZfdyBcJiMzNDske1RBUkdFVH1cJiMzNDs7IHRoZW5cbi1cdFx0ZWNobyBcJiMzNDtGQUlMXCYjMzQ7IFx1MDAzZVx1MDAyNjJcbi1cdFx0cmM9MVxuLVx0ZWxzZVxuLVx0XHRlY2hvIFwmIzM0O09LXCYjMzQ7XG4tXHRmaVxuLVx0dGVzdF9yY1xuLVxuLVx0ZWNobyAtbiBcJiMzNDtUZXN0aW5nIFBBR0VfU0laRSBsaW1pdCBvbiBhcnJheSB3b3JrcyAuLi4gXCYjMzQ7XG4tXHQjIERvIG5vdCByZXNldF92YWxzLCBjYXJyeSBvbiB0aGUgdmFsdWVzIGZyb20gdGhlIGxhc3QgdGVzdC5cbi1cdCMgRXZlbiBpZiB5b3UgdXNlIGFuIGludCBhcnJheSwgeW91IGFyZSBzdGlsbCByZXN0cmljdGVkIHRvXG4tXHQjIE1BWF9ESUdJVFMsIHRoaXMgaXMgYSBrbm93biBsaW1pdGF0aW9uLiBUZXN0IGxpbWl0IHdvcmtzLlxuLVx0TElNSVQ9JCgoTUFYX0RJR0lUUyAtMSkpXG4tXHRURVNUX1NUUj1cJiMzNDs5XCYjMzQ7XG4tXHQocGVybCAtZSAmIzM5O3ByaW50IFwmIzM0OyBcJiMzNDsgeCAmIzM5OyRMSU1JVCYjMzk7OyYjMzk7OyBlY2hvIFwmIzM0OyR7VEVTVF9TVFJ9XCYjMzQ7KSB8IFxcXG4tXHRcdGRkIG9mPVwmIzM0OyR7VEFSR0VUfVwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4tXG4tXHRURVNUX1NUUj1cJiMzNDs5IDEwMSAyIDFcJiMzNDtcbi1cdGlmICEgdmVyaWZ5X2RpZmZfdyBcJiMzNDske1RBUkdFVH1cJiMzNDs7IHRoZW5cbi1cdFx0ZWNobyBcJiMzNDtGQUlMXCYjMzQ7IFx1MDAzZVx1MDAyNjJcbi1cdFx0cmM9MVxuLVx0ZWxzZVxuLVx0XHRlY2hvIFwmIzM0O09LXCYjMzQ7XG4tXHRmaVxuLVx0dGVzdF9yY1xuLVxuLVx0ZWNobyAtbiBcJiMzNDtUZXN0aW5nIGV4Y2VlZGluZyBQQUdFX1NJWkUgbGltaXQgZmFpbHMgYXMgZXhwZWN0ZWQgLi4uIFwmIzM0O1xuLVx0IyBEbyBub3QgcmVzZXRfdmFscywgY2Fycnkgb24gdGhlIHZhbHVlcyBmcm9tIHRoZSBsYXN0IHRlc3QuXG4tXHQjIE5vdyBnbyBvdmVyIGxpbWl0LlxuLVx0TElNSVQ9JCgoTUFYX0RJR0lUUykpXG4tXHRURVNUX1NUUj1cJiMzNDs3XCYjMzQ7XG4tXHQocGVybCAtZSAmIzM5O3ByaW50IFwmIzM0OyBcJiMzNDsgeCAmIzM5OyRMSU1JVCYjMzk7OyYjMzk7OyBlY2hvIFwmIzM0OyR7VEVTVF9TVFJ9XCYjMzQ7KSB8IFxcXG4tXHRcdGRkIG9mPVwmIzM0OyR7VEFSR0VUfVwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4tXG4tXHRURVNUX1NUUj1cJiMzNDs3IDEwMSAyIDFcJiMzNDtcbi1cdGlmIHZlcmlmeV9kaWZmX3cgXCYjMzQ7JHtUQVJHRVR9XCYjMzQ7OyB0aGVuXG4tXHRcdGVjaG8gXCYjMzQ7RkFJTFwmIzM0OyBcdTAwM2VcdTAwMjYyXG4tXHRcdHJjPTFcbi1cdGVsc2Vcbi1cdFx0ZWNobyBcJiMzNDtPS1wmIzM0O1xuLVx0Zmlcbi1cdHRlc3RfcmNcbiYjNDM7XHRyZXR1cm4gXCYjMzQ7JHN0YXR1c1wmIzM0O1xuIH1cbiBcbi0jIFlvdSB1c2VkIGFuIGludCBhcnJheSBhbmQgb25lIG9mIHRoZSBlbGVtZW50cyBpcyBub3QgYWNjZXB0YWJsZVxuLXJ1bl9pbnRfYXJyYXlfbm9fcGFydGlhbF91cGRhdGUoKVxuJiM0MzsjIHByb2NfZG91aW50dmVjKCktc3BlY2lmaWMgcmFuZ2UgY2hlY2tzOiBVSU5UX01BWCBtdXN0IGJlIGFjY2VwdGVkLFxuJiM0MzsjIFVJTlRfTUFYJiM0MzsxIG11c3QgYmUgcmVqZWN0ZWQsIGFuZCBuZWdhdGl2ZSB2YWx1ZXMgbXVzdCBiZSByZWplY3RlZCB0b28uXG4mIzQzO2Fzc2VydF91aW50X3JhbmdlKCkgICMgXHUwMDNjZmlsZVx1MDAzZSBcdTAwM2NiYXNlbGluZVx1MDAzZVxuIHtcbi1cdGVjaG8gLW4gXCYjMzQ7VGVzdGluZyBpbnZhbGlkIGFycmF5IGVsZW1lbnQgZG9lcyBub3QgcGFydGlhbGx5IHVwZGF0ZSAuLi4gXCYjMzQ7XG4tXHQjIEV4cGVjdCBmYWlsdXJlIGJlY2F1c2Ugb2YgM3JkIGVsZW1lbnQgKGFiYykuXG4tXHRpZiAhIHZlcmlmeV9ub19wYXJ0aWFsX3VwZGF0ZSBcJiMzNDsxIDIgMyA0XCYjMzQ7IFwmIzM0OzEwIDIwIGFiYyA0MFwmIzM0OzsgdGhlblxuLVx0XHRlY2hvIFwmIzM0O0ZBSUxcJiMzNDsgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRlbHNlXG4tXHRcdGVjaG8gXCYjMzQ7T0tcJiMzNDtcbi1cdGZpXG4tXHR0ZXN0X3JjXG4mIzQzO1x0bG9jYWwgZmlsZT0kMSBiYXNlbGluZT0kMiBzdGF0dXM9MFxuIFxuLVx0ZWNobyAtbiBcJiMzNDtUZXN0aW5nIG91dCBvZiByYW5nZSBhcnJheSBlbGVtZW50IGRvZXMgbm90IHBhcnRpYWxseSB1cGRhdGUgLi4uIFwmIzM0O1xuLVx0IyBFeHBlY3QgZmFpbHVyZSBiZWNhdXNlIG9mIDNyZCBlbGVtZW50IChncmVhdGVyIHRoYW4gaW50KVxuLVx0aWYgISB2ZXJpZnlfbm9fcGFydGlhbF91cGRhdGUgXCYjMzQ7MSAyIDMgNFwmIzM0OyBcJiMzNDsxMCAyMCAkKChJTlRfTUFYICYjNDM7IDEpKSA0MFwmIzM0OzsgdGhlblxuLVx0XHRlY2hvIFwmIzM0O0ZBSUxcJiMzNDsgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRlbHNlXG4tXHRcdGVjaG8gXCYjMzQ7T0tcJiMzNDtcbi1cdGZpXG4tXHR0ZXN0X3JjXG4mIzQzO1x0cHJpbnRmICYjMzk7JXMmIzM5OyBcJiMzNDskYmFzZWxpbmVcJiMzNDsgXHUwMDNlIFwmIzM0OyRmaWxlXCYjMzQ7XG4mIzQzO1x0cHJpbnRmICYjMzk7JXMmIzM5OyBcJiMzNDskVUlOVF9NQVhcJiMzNDsgXHUwMDNlIFwmIzM0OyRmaWxlXCYjMzQ7XG4mIzQzO1x0YXNzZXJ0X2NvbnRlbnQgXCYjMzQ7JGZpbGVcJiMzNDsgXCYjMzQ7JFVJTlRfTUFYXCYjMzQ7IHx8IHN0YXR1cz0xXG4gXG4tXHRlY2hvIC1uIFwmIzM0O1Rlc3RpbmcgaW52YWxpZCBmaXJzdCBhcnJheSBlbGVtZW50IGRvZXMgbm90IHVwZGF0ZSAuLi4gXCYjMzQ7XG4tXHQjIEV4cGVjdCBmYWlsdXJlIG9mIDFzdCBlbGVtZW50XG4tXHRpZiAhIHZlcmlmeV9ub19wYXJ0aWFsX3VwZGF0ZSBcJiMzNDsxIDIgMyA0XCYjMzQ7IFwmIzM0O2FiYyAyMCAzMCA0MFwmIzM0OzsgdGhlblxuLVx0XHRlY2hvIFwmIzM0O0ZBSUxcJiMzNDsgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRlbHNlXG4tXHRcdGVjaG8gXCYjMzQ7T0tcJiMzNDtcbi1cdGZpXG4tXHR0ZXN0X3JjXG4mIzQzO1x0YXNzZXJ0X25vX3BhcnRpYWxfdXBkYXRlIFwmIzM0OyRmaWxlXCYjMzQ7IFwmIzM0OyRiYXNlbGluZVwmIzM0OyBcJiMzNDskKChVSU5UX01BWCAmIzQzOyAxKSlcJiMzNDsgfHwgc3RhdHVzPTFcbiYjNDM7XHRhc3NlcnRfbm9fcGFydGlhbF91cGRhdGUgXCYjMzQ7JGZpbGVcJiMzNDsgXCYjMzQ7JGJhc2VsaW5lXCYjMzQ7IFwmIzM0Oy0zXCYjMzQ7IHx8IHN0YXR1cz0xXG4mIzQzO1xuJiM0MztcdHJldHVybiBcJiMzNDskc3RhdHVzXCYjMzQ7XG4gfVxuIFxuLSMgWW91IGFyZSB1c2luZyBhbiB1bnNpZ25lZCBpbnRcbi1ydW5fbGltaXRfZGlnaXRfdWludCgpXG4mIzQzO3Rlc3RfaW50X21pbm1heCgpXG4ge1xuLVx0ZWNobyAtbiBcJiMzNDtUZXN0aW5nIFVJTlRfTUFYIHdvcmtzIC4uLiBcJiMzNDtcbi1cdHJlc2V0X3ZhbHNcbi1cdFRFU1RfU1RSPVwmIzM0OyRVSU5UX01BWFwmIzM0O1xuLVx0ZWNobyAtbiAkVEVTVF9TVFIgXHUwMDNlICRUQVJHRVRcbi1cbi1cdGlmICEgdmVyaWZ5IFwmIzM0OyR7VEFSR0VUfVwmIzM0OzsgdGhlblxuLVx0XHRlY2hvIFwmIzM0O0ZBSUxcJiMzNDsgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRlbHNlXG4tXHRcdGVjaG8gXCYjMzQ7T0tcJiMzNDtcbi1cdGZpXG4tXHR0ZXN0X3JjXG4tXG4tXHRlY2hvIC1uIFwmIzM0O1Rlc3RpbmcgVUlOVF9NQVggJiM0MzsgMSB3aWxsIGZhaWwgYXMgZXhwZWN0ZWQgLi4uIFwmIzM0O1xuLVx0cmVzZXRfdmFsc1xuLVx0VEVTVF9TVFI9JCgoJFVJTlRfTUFYJiM0MzsxKSlcbi1cdGVjaG8gLW4gJFRFU1RfU1RSIFx1MDAzZSAkVEFSR0VUIDJcdTAwM2UgL2Rldi9udWxsXG4mIzQzO1x0bG9jYWwgdD1cJiMzNDske1NZU0NUTH0vaW50XzAwMDFcJiMzNDtcbiYjNDM7XHRsb2NhbCBiYXNlbGluZT1cJiMzNDs2MFwmIzM0OyB2YWw9XCYjMzQ7NjFcJiMzNDtcbiBcbi1cdGlmIHZlcmlmeSBcJiMzNDske1RBUkdFVH1cJiMzNDs7IHRoZW5cbi1cdFx0ZWNobyBcJiMzNDtGQUlMXCYjMzQ7IFx1MDAzZVx1MDAyNjJcbi1cdFx0cmM9MVxuLVx0ZWxzZVxuLVx0XHRlY2hvIFwmIzM0O09LXCYjMzQ7XG4tXHRmaVxuLVx0dGVzdF9yY1xuJiM0MztcdFtbIC1mIFwmIzM0OyR0XCYjMzQ7IF1dIHx8IHsgUkVUPSRLU0ZUX1NLSVA7IHJldHVybjsgfVxuIFxuLVx0ZWNobyAtbiBcJiMzNDtUZXN0aW5nIG5lZ2F0aXZlIHZhbHVlcyB3aWxsIG5vdCB3b3JrIGFzIGV4cGVjdGVkIC4uLiBcJiMzNDtcbi1cdHJlc2V0X3ZhbHNcbi1cdFRFU1RfU1RSPVwmIzM0Oy0zXCYjMzQ7XG4tXHRlY2hvIC1uICRURVNUX1NUUiBcdTAwM2UgJFRBUkdFVCAyXHUwMDNlIC9kZXYvbnVsbFxuLVxuLVx0aWYgdmVyaWZ5IFwmIzM0OyR7VEFSR0VUfVwmIzM0OzsgdGhlblxuLVx0XHRlY2hvIFwmIzM0O0ZBSUxcJiMzNDsgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRlbHNlXG4tXHRcdGVjaG8gXCYjMzQ7T0tcJiMzNDtcbi1cdGZpXG4tXHR0ZXN0X3JjXG4mIzQzO1x0YXNzZXJ0X3dyaXRlX3BhdHRlcm5zIFwmIzM0OyR0XCYjMzQ7IFwmIzM0OyRiYXNlbGluZVwmIzM0OyBcJiMzNDskdmFsXCYjMzQ7IHx8IFJFVD0kS1NGVF9GQUlMXG4mIzQzO1x0YXNzZXJ0X3dpZGVpbnRfd3JpdGVzX3JlamVjdGVkIFwmIzM0OyR0XCYjMzQ7IFwmIzM0OyRiYXNlbGluZVwmIzM0OyB8fCBSRVQ9JEtTRlRfRkFJTFxuJiM0MztcdGFzc2VydF9kaWdpdF9saW1pdCBcJiMzNDskdFwmIzM0OyBcJiMzNDskYmFzZWxpbmVcJiMzNDsgfHwgUkVUPSRLU0ZUX0ZBSUxcbiB9XG4gXG4tcnVuX3N0cmluZ3Rlc3RzKClcbiYjNDM7dGVzdF9pbnRfcGxhaW4oKVxuIHtcbi1cdGVjaG8gLW4gXCYjMzQ7V3JpdGluZyBlbnRpcmUgc3lzY3RsIGluIHNob3J0IHdyaXRlcyAuLi4gXCYjMzQ7XG4tXHRzZXRfb3JpZ1xuLVx0ZGQgaWY9XCYjMzQ7JHtURVNUX0ZJTEV9XCYjMzQ7IG9mPVwmIzM0OyR7VEFSR0VUfVwmIzM0OyBicz0xIDJcdTAwM2UvZGV2L251bGxcbi1cdGlmICEgdmVyaWZ5IFwmIzM0OyR7VEFSR0VUfVwmIzM0OzsgdGhlblxuLVx0XHRlY2hvIFwmIzM0O0ZBSUxcJiMzNDsgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRlbHNlXG4tXHRcdGVjaG8gXCYjMzQ7T0tcJiMzNDtcbi1cdGZpXG4mIzQzO1x0bG9jYWwgdD1cJiMzNDske1NZU0NUTH0vaW50XzAwMDJcJiMzNDtcbiYjNDM7XHRsb2NhbCBiYXNlbGluZT1cJiMzNDsxXCYjMzQ7IHZhbD1cJiMzNDsyXCYjMzQ7XG4gXG4tXHRlY2hvIC1uIFwmIzM0O1dyaXRpbmcgbWlkZGxlIG9mIHN5c2N0bCBhZnRlciB1bnN5bmNocm9uaXplZCBzZWVrIC4uLiBcJiMzNDtcbi1cdHNldF90ZXN0XG4tXHRkZCBpZj1cJiMzNDske1RFU1RfRklMRX1cJiMzNDsgb2Y9XCYjMzQ7JHtUQVJHRVR9XCYjMzQ7IGJzPTEgc2Vlaz0xIDJcdTAwM2UvZGV2L251bGxcbi1cdGlmIHZlcmlmeSBcJiMzNDske1RBUkdFVH1cJiMzNDs7IHRoZW5cbi1cdFx0ZWNobyBcJiMzNDtGQUlMXCYjMzQ7IFx1MDAzZVx1MDAyNjJcbi1cdFx0cmM9MVxuLVx0ZWxzZVxuLVx0XHRlY2hvIFwmIzM0O09LXCYjMzQ7XG4tXHRmaVxuJiM0MztcdFtbIC1mIFwmIzM0OyR0XCYjMzQ7IF1dIHx8IHsgUkVUPSRLU0ZUX1NLSVA7IHJldHVybjsgfVxuIFxuLVx0ZWNobyAtbiBcJiMzNDtDaGVja2luZyBzeXNjdGwgbWF4bGVuIGlzIGF0IGxlYXN0ICRNQVhMRU4gLi4uIFwmIzM0O1xuLVx0c2V0X29yaWdcbi1cdHBlcmwgLWUgJiMzOTtwcmludCBcJiMzNDtBXCYjMzQ7IHggKCYjMzk7XCYjMzQ7JHtNQVhMRU59XCYjMzQ7JiMzOTstMiksIFwmIzM0O0JcJiMzNDs7JiMzOTsgfCBcXFxuLVx0XHRkZCBvZj1cJiMzNDske1RBUkdFVH1cJiMzNDsgYnM9XCYjMzQ7JHtNQVhMRU59XCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbi1cdGlmICEgZ3JlcCAtcSBCIFwmIzM0OyR7VEFSR0VUfVwmIzM0OzsgdGhlblxuLVx0XHRlY2hvIFwmIzM0O0ZBSUxcJiMzNDsgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRlbHNlXG4tXHRcdGVjaG8gXCYjMzQ7T0tcJiMzNDtcbi1cdGZpXG4tXG4tXHRlY2hvIC1uIFwmIzM0O0NoZWNraW5nIHN5c2N0bCBrZWVwcyBvcmlnaW5hbCBzdHJpbmcgb24gb3ZlcmZsb3cgYXBwZW5kIC4uLiBcJiMzNDtcbi1cdHNldF9vcmlnXG4tXHRwZXJsIC1lICYjMzk7cHJpbnQgXCYjMzQ7QVwmIzM0OyB4ICgmIzM5O1wmIzM0OyR7TUFYTEVOfVwmIzM0OyYjMzk7LTEpLCBcJiMzNDtCXCYjMzQ7OyYjMzk7IHwgXFxcbi1cdFx0ZGQgb2Y9XCYjMzQ7JHtUQVJHRVR9XCYjMzQ7IGJzPSQoKCBNQVhMRU4gLSAxICkpIDJcdTAwM2UvZGV2L251bGxcbi1cdGlmIGdyZXAgLXEgQiBcJiMzNDske1RBUkdFVH1cJiMzNDs7IHRoZW5cbi1cdFx0ZWNobyBcJiMzNDtGQUlMXCYjMzQ7IFx1MDAzZVx1MDAyNjJcbi1cdFx0cmM9MVxuLVx0ZWxzZVxuLVx0XHRlY2hvIFwmIzM0O09LXCYjMzQ7XG4tXHRmaVxuLVxuLVx0ZWNobyAtbiBcJiMzNDtDaGVja2luZyBzeXNjdGwgc3RheXMgTlVMTCB0ZXJtaW5hdGVkIG9uIHdyaXRlIC4uLiBcJiMzNDtcbi1cdHNldF9vcmlnXG4tXHRwZXJsIC1lICYjMzk7cHJpbnQgXCYjMzQ7QVwmIzM0OyB4ICgmIzM5O1wmIzM0OyR7TUFYTEVOfVwmIzM0OyYjMzk7LTEpLCBcJiMzNDtCXCYjMzQ7OyYjMzk7IHwgXFxcbi1cdFx0ZGQgb2Y9XCYjMzQ7JHtUQVJHRVR9XCYjMzQ7IGJzPVwmIzM0OyR7TUFYTEVOfVwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4tXHRpZiBncmVwIC1xIEIgXCYjMzQ7JHtUQVJHRVR9XCYjMzQ7OyB0aGVuXG4tXHRcdGVjaG8gXCYjMzQ7RkFJTFwmIzM0OyBcdTAwM2VcdTAwMjYyXG4tXHRcdHJjPTFcbi1cdGVsc2Vcbi1cdFx0ZWNobyBcJiMzNDtPS1wmIzM0O1xuLVx0Zmlcbi1cbi1cdGVjaG8gLW4gXCYjMzQ7Q2hlY2tpbmcgc3lzY3RsIHN0YXlzIE5VTEwgdGVybWluYXRlZCBvbiBvdmVyd3JpdGUgLi4uIFwmIzM0O1xuLVx0c2V0X29yaWdcbi1cdHBlcmwgLWUgJiMzOTtwcmludCBcJiMzNDtBXCYjMzQ7IHggKCYjMzk7XCYjMzQ7JHtNQVhMRU59XCYjMzQ7JiMzOTstMSksIFwmIzM0O0JCXCYjMzQ7OyYjMzk7IHwgXFxcbi1cdFx0ZGQgb2Y9XCYjMzQ7JHtUQVJHRVR9XCYjMzQ7IGJzPSQoKCAkTUFYTEVOICYjNDM7IDEgKSkgMlx1MDAzZS9kZXYvbnVsbFxuLVx0aWYgZ3JlcCAtcSBCIFwmIzM0OyR7VEFSR0VUfVwmIzM0OzsgdGhlblxuLVx0XHRlY2hvIFwmIzM0O0ZBSUxcJiMzNDsgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRlbHNlXG4tXHRcdGVjaG8gXCYjMzQ7T0tcJiMzNDtcbi1cdGZpXG4tXG4tXHR0ZXN0X3JjXG4mIzQzO1x0YXNzZXJ0X3dyaXRlX3BhdHRlcm5zIFwmIzM0OyR0XCYjMzQ7IFwmIzM0OyRiYXNlbGluZVwmIzM0OyBcJiMzNDskdmFsXCYjMzQ7IHx8IFJFVD0kS1NGVF9GQUlMXG4mIzQzO1x0YXNzZXJ0X3dpZGVpbnRfd3JpdGVzX3JlamVjdGVkIFwmIzM0OyR0XCYjMzQ7IFwmIzM0OyRiYXNlbGluZVwmIzM0OyB8fCBSRVQ9JEtTRlRfRkFJTFxuJiM0MztcdGFzc2VydF9kaWdpdF9saW1pdCBcJiMzNDskdFwmIzM0OyBcJiMzNDskYmFzZWxpbmVcJiMzNDsgfHwgUkVUPSRLU0ZUX0ZBSUxcbiYjNDM7XHRhc3NlcnRfaW50X3JhbmdlIFwmIzM0OyR0XCYjMzQ7IFwmIzM0OyRiYXNlbGluZVwmIzM0OyB8fCBSRVQ9JEtTRlRfRkFJTFxuIH1cbiBcbi10YXJnZXRfZXhpc3RzKClcbiYjNDM7dGVzdF91aW50X3BsYWluKClcbiB7XG4tXHRUQVJHRVQ9XCYjMzQ7JHtTWVNDVEx9LyQxXCYjMzQ7XG4tXHRURVNUX0lEPVwmIzM0OyQyXCYjMzQ7XG4mIzQzO1x0bG9jYWwgdD1cJiMzNDske1NZU0NUTH0vdWludF8wMDAxXCYjMzQ7XG4mIzQzO1x0bG9jYWwgYmFzZWxpbmU9XCYjMzQ7MzE0XCYjMzQ7IHZhbD1cJiMzNDszMTVcJiMzNDtcbiBcbi1cdGlmIFsgISAtZiAke1RBUkdFVH0gXSA7IHRoZW5cbi1cdFx0cmV0dXJuIDBcbi1cdGZpXG4tXHRyZXR1cm4gMVxuLX1cbiYjNDM7XHRbWyAtZiBcJiMzNDskdFwmIzM0OyBdXSB8fCB7IFJFVD0kS1NGVF9TS0lQOyByZXR1cm47IH1cbiBcbi1ydW5fYml0bWFwdGVzdCgpIHtcbi1cdCMgVG90YWwgbGVuZ3RoIG9mIGJpdG1hcHMgc3RyaW5nIHRvIHVzZSwgYSBiaXQgdW5kZXJcbi1cdCMgdGhlIG1heGltdW0gaW5wdXQgc2l6ZSBvZiB0aGUgdGVzdCBub2RlXG4tXHRMRU5HVEg9JCgoUkFORE9NICUgNjUwMDApKVxuJiM0MztcdGFzc2VydF93cml0ZV9wYXR0ZXJucyBcJiMzNDskdFwmIzM0OyBcJiMzNDskYmFzZWxpbmVcJiMzNDsgXCYjMzQ7JHZhbFwmIzM0OyB8fCBSRVQ9JEtTRlRfRkFJTFxuJiM0MztcdGFzc2VydF93aWRlaW50X3dyaXRlc19yZWplY3RlZCBcJiMzNDskdFwmIzM0OyBcJiMzNDskYmFzZWxpbmVcJiMzNDsgfHwgUkVUPSRLU0ZUX0ZBSUxcbiYjNDM7XHRhc3NlcnRfZGlnaXRfbGltaXQgXCYjMzQ7JHRcJiMzNDsgXCYjMzQ7JGJhc2VsaW5lXCYjMzQ7IHx8IFJFVD0kS1NGVF9GQUlMXG4mIzQzO1x0YXNzZXJ0X3VpbnRfcmFuZ2UgXCYjMzQ7JHRcJiMzNDsgXCYjMzQ7JGJhc2VsaW5lXCYjMzQ7IHx8IFJFVD0kS1NGVF9GQUlMXG4mIzQzO31cbiBcbi1cdCMgRmlyc3QgYml0IHRvIHNldFxuLVx0QklUPSQoKFJBTkRPTSAlIDEwMjQpKVxuJiM0MzsjIHByb2NfZG9zdHJpbmcoKS1zcGVjaWZpYyB3cml0ZSBwYXR0ZXJuc1xuJiM0Mzthc3NlcnRfc3RyaW5nX3dyaXRlX3BhdHRlcm5zKCkgICMgXHUwMDNjZmlsZVx1MDAzZSBcdTAwM2NiYXNlbGluZVx1MDAzZSBcdTAwM2N2YWxcdTAwM2UgXHUwMDNjbWF4bGVuXHUwMDNlXG4mIzQzO3tcbiYjNDM7XHRsb2NhbCBmaWxlPSQxIGJhc2VsaW5lPSQyIHZhbD0kMyBtYXhsZW49JDQgc3RhdHVzPTBcbiBcbi1cdCMgU3RyaW5nIGNvbnRhaW5pbmcgb3VyIGxpc3Qgb2YgYml0cyB0byBzZXRcbi1cdFRFU1RfU1RSPSRCSVRcbiYjNDM7XHRwcmludGYgJiMzOTslcyYjMzk7IFwmIzM0OyRiYXNlbGluZVwmIzM0OyBcdTAwM2UgXCYjMzQ7JGZpbGVcJiMzNDtcbiYjNDM7XHR3cml0ZV9pbl9jaHVua3MgXCYjMzQ7JGZpbGVcJiMzNDsgXCYjMzQ7JHZhbFwmIzM0OyAxXG4mIzQzO1x0YXNzZXJ0X2NvbnRlbnQgXCYjMzQ7JGZpbGVcJiMzNDsgXCYjMzQ7JHZhbFwmIzM0OyB8fCBzdGF0dXM9MVxuIFxuLVx0IyBidWlsZCB1cCB0aGUgc3RyaW5nXG4tXHR3aGlsZSBbIFwmIzM0OyR7I1RFU1RfU1RSfVwmIzM0OyAtbGUgXCYjMzQ7JExFTkdUSFwmIzM0OyBdOyBkb1xuLVx0XHQjIE1ha2Ugc3VyZSBuZXh0IGVudHJ5IGlzIGRpc2NvbnRpZ3VvdXMsXG4tXHRcdCMgc2tpcCBhaGVhZCBhdCBsZWFzdCAyXG4tXHRcdEJJVD0kKChCSVQgJiM0MzsgJCgoMiAmIzQzOyBSQU5ET00gJSAxMCkpKSlcbiYjNDM7XHRwcmludGYgJiMzOTslcyYjMzk7IFwmIzM0OyR2YWxcJiMzNDsgXHUwMDNlIFwmIzM0OyRmaWxlXCYjMzQ7XG4mIzQzO1x0d3JpdGVfYXRfb2Zmc2V0IFwmIzM0OyRmaWxlXCYjMzQ7IFwmIzM0OyR2YWxcJiMzNDsgMSAxXG4mIzQzO1x0YXNzZXJ0X2NvbnRlbnRfcmVqZWN0ZWQgXCYjMzQ7JGZpbGVcJiMzNDsgXCYjMzQ7JHZhbFwmIzM0OyB8fCBzdGF0dXM9MVxuIFxuLVx0XHQjIEFkZCBuZXcgYml0IHRvIHRoZSBsaXN0XG4tXHRcdFRFU1RfU1RSPVwmIzM0OyR7VEVTVF9TVFJ9LCR7QklUfVwmIzM0O1xuJiM0MztcdCMgc3lzY3RsIG1heGxlbiBpcyBhdCBsZWFzdCAkbWF4bGVuXG4mIzQzO1x0cHJpbnRmICYjMzk7JXMmIzM5OyBcJiMzNDskYmFzZWxpbmVcJiMzNDsgXHUwMDNlIFwmIzM0OyRmaWxlXCYjMzQ7XG4mIzQzO1x0d3JpdGVfb3ZlcmxvbmcgXCYjMzQ7JGZpbGVcJiMzNDsgXCYjMzQ7JCgobWF4bGVuIC0gMikpXCYjMzQ7IFwmIzM0O0JcJiMzNDsgXCYjMzQ7JG1heGxlblwmIzM0O1xuJiM0MztcdGFzc2VydF9ncmVwIFwmIzM0OyRmaWxlXCYjMzQ7IFwmIzM0O0JcJiMzNDsgfHwgc3RhdHVzPTFcbiBcbi1cdFx0IyBSYW5kb21seSBtYWtlIGl0IGEgcmFuZ2Vcbi1cdFx0aWYgWyBcJiMzNDskKChSQU5ET00gJSAyKSlcJiMzNDsgLWVxIFwmIzM0OzFcJiMzNDsgXTsgdGhlblxuLVx0XHRcdFJBTkdFX0VORD0kKChCSVQgJiM0MzsgJCgoMSAmIzQzOyBSQU5ET00gJSAxMCkpKSlcbi1cdFx0XHRURVNUX1NUUj1cJiMzNDske1RFU1RfU1RSfS0ke1JBTkdFX0VORH1cJiMzNDtcbi1cdFx0XHRCSVQ9JFJBTkdFX0VORFxuLVx0XHRmaVxuLVx0ZG9uZVxuJiM0MztcdCMga2VlcCBvcmlnaW5hbCBzdHJpbmcgb24gb3ZlcmZsb3cgYXBwZW5kXG4mIzQzO1x0cHJpbnRmICYjMzk7JXMmIzM5OyBcJiMzNDskYmFzZWxpbmVcJiMzNDsgXHUwMDNlIFwmIzM0OyRmaWxlXCYjMzQ7XG4mIzQzO1x0d3JpdGVfb3ZlcmxvbmcgXCYjMzQ7JGZpbGVcJiMzNDsgXCYjMzQ7JCgobWF4bGVuIC0gMSkpXCYjMzQ7IFwmIzM0O0JcJiMzNDsgXCYjMzQ7JCgobWF4bGVuIC0gMSkpXCYjMzQ7XG4mIzQzO1x0YXNzZXJ0X2dyZXBfYWJzZW50IFwmIzM0OyRmaWxlXCYjMzQ7IFwmIzM0O0JcJiMzNDsgfHwgc3RhdHVzPTFcbiBcbi1cdGVjaG8gLW4gXCYjMzQ7Q2hlY2tpbmcgYml0bWFwIGhhbmRsZXIgLi4uIFwmIzM0O1xuLVx0VEVTVF9GSUxFPSQobWt0ZW1wKVxuLVx0ZWNobyAtbiBcJiMzNDskVEVTVF9TVFJcJiMzNDsgXHUwMDNlICRURVNUX0ZJTEVcbiYjNDM7XHQjIHN5c2N0bCBzdGF5cyBOVUxMIHRlcm1pbmF0ZWQgb24gd3JpdGVcbiYjNDM7XHRwcmludGYgJiMzOTslcyYjMzk7IFwmIzM0OyRiYXNlbGluZVwmIzM0OyBcdTAwM2UgXCYjMzQ7JGZpbGVcJiMzNDtcbiYjNDM7XHR3cml0ZV9vdmVybG9uZyBcJiMzNDskZmlsZVwmIzM0OyBcJiMzNDskKChtYXhsZW4gLSAxKSlcJiMzNDsgXCYjMzQ7QlwmIzM0OyBcJiMzNDskbWF4bGVuXCYjMzQ7XG4mIzQzO1x0YXNzZXJ0X2dyZXBfYWJzZW50IFwmIzM0OyRmaWxlXCYjMzQ7IFwmIzM0O0JcJiMzNDsgfHwgc3RhdHVzPTFcbiBcbi1cdGNhdCAkVEVTVF9GSUxFIFx1MDAzZSAkVEFSR0VUIDJcdTAwM2UgL2Rldi9udWxsXG4tXHRpZiBbICQ/IC1uZSAwIF07IHRoZW5cbi1cdFx0ZWNobyBcJiMzNDtGQUlMXCYjMzQ7IFx1MDAzZVx1MDAyNjJcbi1cdFx0cmM9MVxuLVx0XHR0ZXN0X3JjXG4tXHRmaVxuJiM0MztcdCMgc3lzY3RsIHN0YXlzIE5VTEwgdGVybWluYXRlZCBvbiBvdmVyd3JpdGVcbiYjNDM7XHRwcmludGYgJiMzOTslcyYjMzk7IFwmIzM0OyRiYXNlbGluZVwmIzM0OyBcdTAwM2UgXCYjMzQ7JGZpbGVcJiMzNDtcbiYjNDM7XHR3cml0ZV9vdmVybG9uZyBcJiMzNDskZmlsZVwmIzM0OyBcJiMzNDskKChtYXhsZW4gLSAxKSlcJiMzNDsgXCYjMzQ7QkJcJiMzNDsgXCYjMzQ7JCgobWF4bGVuICYjNDM7IDEpKVwmIzM0O1xuJiM0MztcdGFzc2VydF9ncmVwX2Fic2VudCBcJiMzNDskZmlsZVwmIzM0OyBcJiMzNDtCXCYjMzQ7IHx8IHN0YXR1cz0xXG4gXG4tXHRpZiAhIHZlcmlmeV9kaWZmX3Byb2NfZmlsZSBcJiMzNDskVEFSR0VUXCYjMzQ7IFwmIzM0OyRURVNUX0ZJTEVcJiMzNDs7IHRoZW5cbi1cdFx0ZWNobyBcJiMzNDtGQUlMXCYjMzQ7IFx1MDAzZVx1MDAyNjJcbi1cdFx0cmM9MVxuLVx0ZWxzZVxuLVx0XHRlY2hvIFwmIzM0O09LXCYjMzQ7XG4tXHRcdHJjPTBcbi1cdGZpXG4tXHR0ZXN0X3JjXG4mIzQzO1x0cmV0dXJuIFwmIzM0OyRzdGF0dXNcJiMzNDtcbiB9XG4gXG4tc3lzY3RsX3Rlc3RfMDAwMSgpXG4mIzQzO3Rlc3Rfc3RyaW5nX2Rvc3RyaW5nKClcbiB7XG4tXHRUQVJHRVQ9XCYjMzQ7JHtTWVNDVEx9LyQoZ2V0X3Rlc3RfdGFyZ2V0IDAwMDEpXCYjMzQ7XG4tXHRyZXNldF92YWxzXG4tXHRPUklHPSQoY2F0IFwmIzM0OyR7VEFSR0VUfVwmIzM0Oylcbi1cdFRFU1RfU1RSPSQoKCAkT1JJRyAmIzQzOyAxICkpXG4tXG4tXHRydW5fbnVtZXJpY3Rlc3RzXG4tXHRydW5fd2lkZWludF90ZXN0c1xuLVx0cnVuX2xpbWl0X2RpZ2l0XG4tfVxuJiM0MztcdGxvY2FsIHQ9XCYjMzQ7JHtTWVNDVEx9L3N0cmluZ18wMDAxXCYjMzQ7XG4mIzQzO1x0bG9jYWwgYmFzZWxpbmU9XCYjMzQ7KG5vbmUpXCYjMzQ7IHZhbD1cJiMzNDtUZXN0aW5nIHN5c2N0bFwmIzM0OyBtYXhsZW49NjVcbiBcbi1zeXNjdGxfdGVzdF8wMDAyKClcbi17XG4tXHRUQVJHRVQ9XCYjMzQ7JHtTWVNDVEx9LyQoZ2V0X3Rlc3RfdGFyZ2V0IDAwMDIpXCYjMzQ7XG4tXHRyZXNldF92YWxzXG4tXHRPUklHPSQoY2F0IFwmIzM0OyR7VEFSR0VUfVwmIzM0Oylcbi1cdFRFU1RfU1RSPVwmIzM0O1Rlc3Rpbmcgc3lzY3RsXCYjMzQ7XG4tXHQjIE9ubHkgc3RyaW5nIHN5c2N0bHMgc3VwcG9ydCBzZWVraW5nL2FwcGVuZGluZy5cbi1cdE1BWExFTj02NVxuLVxuLVx0cnVuX251bWVyaWN0ZXN0c1xuLVx0cnVuX3N0cmluZ3Rlc3RzXG4tfVxuJiM0MztcdFtbIC1mIFwmIzM0OyR0XCYjMzQ7IF1dIHx8IHsgUkVUPSRLU0ZUX1NLSVA7IHJldHVybjsgfVxuIFxuLXN5c2N0bF90ZXN0XzAwMDMoKVxuLXtcbi1cdFRBUkdFVD1cJiMzNDske1NZU0NUTH0vJChnZXRfdGVzdF90YXJnZXQgMDAwMylcJiMzNDtcbi1cdHJlc2V0X3ZhbHNcbi1cdE9SSUc9JChjYXQgXCYjMzQ7JHtUQVJHRVR9XCYjMzQ7KVxuLVx0VEVTVF9TVFI9JCgoICRPUklHICYjNDM7IDEgKSlcbi1cbi1cdHJ1bl9udW1lcmljdGVzdHNcbi1cdHJ1bl93aWRlaW50X3Rlc3RzXG4tXHRydW5fbGltaXRfZGlnaXRcbi1cdHJ1bl9saW1pdF9kaWdpdF9pbnRcbiYjNDM7XHRhc3NlcnRfd3JpdGVfcGF0dGVybnMgXCYjMzQ7JHRcJiMzNDsgXCYjMzQ7JGJhc2VsaW5lXCYjMzQ7IFwmIzM0OyR2YWxcJiMzNDsgfHwgUkVUPSRLU0ZUX0ZBSUxcbiYjNDM7XHRhc3NlcnRfc3RyaW5nX3dyaXRlX3BhdHRlcm5zIFwmIzM0OyR0XCYjMzQ7IFwmIzM0OyRiYXNlbGluZVwmIzM0OyBcJiMzNDskdmFsXCYjMzQ7IFwmIzM0OyRtYXhsZW5cJiMzNDsgfHwgUkVUPSRLU0ZUX0ZBSUxcbiB9XG4gXG4tc3lzY3RsX3Rlc3RfMDAwNCgpXG4mIzQzOyMgRW1pdCBhIHJhbmRvbSBzeXNjdGwgYml0IG1hcFxuJiM0MztyYW5kb21fYml0bWFwX3NwZWMoKVxuIHtcbi1cdFRBUkdFVD1cJiMzNDske1NZU0NUTH0vJChnZXRfdGVzdF90YXJnZXQgMDAwNClcJiMzNDtcbi1cdHJlc2V0X3ZhbHNcbi1cdE9SSUc9JChjYXQgXCYjMzQ7JHtUQVJHRVR9XCYjMzQ7KVxuLVx0VEVTVF9TVFI9JCgoICRPUklHICYjNDM7IDEgKSlcbi1cbi1cdHJ1bl9udW1lcmljdGVzdHNcbi1cdHJ1bl93aWRlaW50X3Rlc3RzXG4tXHRydW5fbGltaXRfZGlnaXRcbi1cdHJ1bl9saW1pdF9kaWdpdF91aW50XG4tfVxuJiM0MztcdGxvY2FsIGxlbmd0aD0kKChSQU5ET00gJSA2NTAwMCkpXG4mIzQzO1x0bG9jYWwgYml0PSQoKFJBTkRPTSAlIDEwMjQpKVxuJiM0MztcdGxvY2FsIHNwZWM9JGJpdFxuJiM0MztcdGxvY2FsIHJhbmdlX2VuZFxuIFxuLXN5c2N0bF90ZXN0XzAwMDUoKVxuLXtcbi1cdFRBUkdFVD1cJiMzNDske1NZU0NUTH0vJChnZXRfdGVzdF90YXJnZXQgMDAwNSlcJiMzNDtcbi1cdHJlc2V0X3ZhbHNcbi1cdE9SSUc9JChjYXQgXCYjMzQ7JHtUQVJHRVR9XCYjMzQ7KVxuJiM0MztcdHdoaWxlIFsgXCYjMzQ7JHsjc3BlY31cJiMzNDsgLWxlIFwmIzM0OyRsZW5ndGhcJiMzNDsgXTsgZG9cbiYjNDM7XHRcdCMgS2VlcCBlbnRyaWVzIGRpc2NvbnRpZ3VvdXMsIHNraXAgYWhlYWQgYnkgYXQgbGVhc3QgMi5cbiYjNDM7XHRcdGJpdD0kKChiaXQgJiM0MzsgMiAmIzQzOyBSQU5ET00gJSAxMCkpXG4mIzQzO1x0XHRzcGVjPVwmIzM0OyR7c3BlY30sJHtiaXR9XCYjMzQ7XG4gXG4tXHRydW5fbGltaXRfZGlnaXRfaW50X2FycmF5XG4tfVxuJiM0MztcdFx0aWYgWyBcJiMzNDskKChSQU5ET00gJSAyKSlcJiMzNDsgLWVxIDEgXTsgdGhlblxuJiM0MztcdFx0XHRyYW5nZV9lbmQ9JCgoYml0ICYjNDM7IDEgJiM0MzsgUkFORE9NICUgMTApKVxuJiM0MztcdFx0XHRzcGVjPVwmIzM0OyR7c3BlY30tJHtyYW5nZV9lbmR9XCYjMzQ7XG4mIzQzO1x0XHRcdGJpdD0kcmFuZ2VfZW5kXG4mIzQzO1x0XHRmaVxuJiM0MztcdGRvbmVcbiBcbi1zeXNjdGxfdGVzdF8wMDA2KClcbi17XG4tXHRUQVJHRVQ9XCYjMzQ7JHtTWVNDVEx9LyQoZ2V0X3Rlc3RfdGFyZ2V0IDAwMDYpXCYjMzQ7XG4tXHRyZXNldF92YWxzXG4tXHRPUklHPVwmIzM0O1wmIzM0O1xuLVx0cnVuX2JpdG1hcHRlc3RcbiYjNDM7XHRlY2hvIC1uIFwmIzM0OyRzcGVjXCYjMzQ7XG4gfVxuIFxuLXN5c2N0bF90ZXN0XzAwMDcoKVxuJiM0MzsjIERvICpub3QqIHByZWZpeCB3aXRoIFwmIzM0O3Rlc3RfXCYjMzQ7LiBBbGwgYXV0b2dlbmVyYXRlIGJpdG1hcCB0ZXN0cyBjYWxsIHRoaXMgaGVscGVyXG4mIzQzO2JpdG1hcF9yYW5nZV9jaGVja19vbmNlKCkgICMgXHUwMDNjaXRlclx1MDAzZVxuIHtcbi1cdFRBUkdFVD1cJiMzNDske1NZU0NUTH0vJChnZXRfdGVzdF90YXJnZXQgMDAwNylcJiMzNDtcbi1cdGVjaG8gLW4gXCYjMzQ7VGVzdGluZyBpZiAkVEFSR0VUIGlzIHNldCB0byAxIC4uLiBcJiMzNDtcbiYjNDM7XHRsb2NhbCB0PVwmIzM0OyR7U1lTQ1RMfS9iaXRtYXBfMDAwMVwmIzM0O1xuJiM0MztcdGxvY2FsIHNwZWNfZmlsZSBzZWVkXG4gXG4tXHRpZiBbICEgLWYgJFRBUkdFVCBdOyB0aGVuXG4tXHRcdGVjaG8gLWUgXCYjMzQ7U0tJUFBJTkdcXG4kVEFSR0VUIGlzIG5vdCBwcmVzZW50XCYjMzQ7XG4tXHRcdHJldHVybiAka3NmdF9za2lwXG4tXHRmaVxuLVxuLVx0aWYgWyAtZCAkRElSIF07IHRoZW5cbi1cdFx0ZWNobyAtZSBcJiMzNDtTS0lQUElOR1xcblRlc3Qgb25seSBwb3NzaWJsZSBpZiBzeXNjdGxfdGVzdCBpcyBidWlsdC1pbiwgbm90IG1vZHVsZTpcJiMzNDtcbi1cdFx0Y2F0ICRURVNUX0RJUi9jb25maWcgXHUwMDNlXHUwMDI2MlxuLVx0XHRyZXR1cm4gJGtzZnRfc2tpcFxuLVx0ZmlcbiYjNDM7XHRbWyAtZiBcJiMzNDskdFwmIzM0OyBdXSB8fCB7IFJFVD0kS1NGVF9TS0lQOyByZXR1cm47IH1cbiBcbi1cdE9SSUc9JChjYXQgXCYjMzQ7JHtUQVJHRVR9XCYjMzQ7KVxuJiM0MztcdHNlZWQ9JCgoQklUTUFQX1NFRUQgJiM0MzsgJDEpKVxuJiM0MztcdFJBTkRPTT0kc2VlZFxuIFxuLVx0aWYgWyB4JE9SSUcgPSBcJiMzNDt4MVwmIzM0OyBdOyB0aGVuXG4tXHRcdGVjaG8gXCYjMzQ7T0tcJiMzNDtcbi1cdFx0cmV0dXJuIDBcbi1cdGZpXG4mIzQzO1x0c3BlY19maWxlPSQobWt0ZW1wKVxuJiM0MztcdHJhbmRvbV9iaXRtYXBfc3BlYyBcdTAwM2UgXCYjMzQ7JHNwZWNfZmlsZVwmIzM0O1xuIFxuLVx0aWYgWyAhIC1mIC9wcm9jL2NtZGxpbmUgXTsgdGhlblxuLVx0XHRlY2hvIC1lIFwmIzM0O1NLSVBQSU5HXFxuVGhlcmUgaXMgbm8gL3Byb2MvY21kbGluZSB0byBjaGVjayBmb3IgcGFyYW1ldGVyXCYjMzQ7XG4tXHRcdHJldHVybiAka3NmdF9za2lwXG4mIzQzO1x0aWYgISBjYXQgXCYjMzQ7JHNwZWNfZmlsZVwmIzM0OyBcdTAwM2UgXCYjMzQ7JHRcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbDsgdGhlblxuJiM0MztcdFx0a3RhcF9wcmludF9tc2cgXCYjMzQ7JHQ6IHdyaXRlIG9mIHJhbmRvbSBiaXRtYXAgc3BlYyByZWplY3RlZCAoc2VlZCAkc2VlZClcJiMzNDtcbiYjNDM7XHRcdFJFVD0kS1NGVF9GQUlMXG4mIzQzO1x0ZWxpZiAhIGFzc2VydF9kaWZmX3Byb2NfZmlsZSBcJiMzNDskdFwmIzM0OyBcJiMzNDskc3BlY19maWxlXCYjMzQ7OyB0aGVuXG4mIzQzO1x0XHRrdGFwX3ByaW50X21zZyBcJiMzNDskdDogcmVhZGJhY2sgbWlzbWF0Y2ggKHNlZWQgJHNlZWQpXCYjMzQ7XG4mIzQzO1x0XHRSRVQ9JEtTRlRfRkFJTFxuIFx0ZmlcbiBcbi1cdEZPVU5EPSQoZ3JlcCAtYyBcJiMzNDtzeXNjdGxbLi9dZGVidWdbLi9ddGVzdF9zeXNjdGxbLi9dYm9vdF9pbnQ9MVwmIzM0OyAvcHJvYy9jbWRsaW5lKVxuLVx0aWYgWyAkRk9VTkQgPSBcJiMzNDsxXCYjMzQ7IF07IHRoZW5cbi1cdFx0ZWNobyAtZSBcJiMzNDtGQUlMXFxuS2VybmVsIHBhcmFtIGZvdW5kIGJ1dCAkVEFSR0VUIGlzIG5vdCAxLlwmIzM0OyBcdTAwM2VcdTAwMjYyXG4tXHRcdHJjPTFcbi1cdFx0dGVzdF9yY1xuLVx0Zmlcbi1cbi1cdGVjaG8gLWUgXCYjMzQ7U0tJUFBJTkdcXG5FeHBlY3RlZCBrZXJuZWwgcGFyYW1ldGVyIG1pc3NpbmcuXCYjMzQ7XG4tXHRlY2hvIFwmIzM0O0tlcm5lbCBtdXN0IGJlIGJvb3RlZCB3aXRoIHBhcmFtZXRlcjogc3lzY3RsLmRlYnVnLnRlc3Rfc3lzY3RsLmJvb3RfaW50PTFcJiMzNDtcbi1cdHJldHVybiAka3NmdF9za2lwXG4mIzQzO1x0cm0gLWYgXCYjMzQ7JHNwZWNfZmlsZVwmIzM0O1xuIH1cbiBcbi1zeXNjdGxfdGVzdF8wMDA4KClcbiYjNDM7dGVzdF91bnJlZ2lzdGVyX3JlbW92ZXNfZGlyKClcbiB7XG4tXHRUQVJHRVQ9XCYjMzQ7JHtTWVNDVEx9LyQoZ2V0X3Rlc3RfdGFyZ2V0IDAwMDgpXCYjMzQ7XG4tXHRlY2hvIC1uIFwmIzM0O1Rlc3RpbmcgaWYgJFRBUkdFVCBpcyBtYXRjaGVkIGluIGtlcm5lbCAuLi4gXCYjMzQ7XG4mIzQzO1x0bG9jYWwgdD1cJiMzNDske1NZU0NUTH0vdW5yZWdpc3Rlcl9lcnJvclwmIzM0O1xuIFxuLVx0aWYgWyAhIC1mICRUQVJHRVQgXTsgdGhlblxuLVx0XHRlY2hvIC1lIFwmIzM0O1NLSVBQSU5HXFxuJFRBUkdFVCBpcyBub3QgcHJlc2VudFwmIzM0O1xuLVx0XHRyZXR1cm4gJGtzZnRfc2tpcFxuJiM0MztcdGlmIFtbIC1kIFwmIzM0OyR0XCYjMzQ7IF1dOyB0aGVuXG4mIzQzO1x0XHRrdGFwX3ByaW50X21zZyBcJiMzNDskdDogZGlyZWN0b3J5IHN0aWxsIGV4aXN0cywgZXhwZWN0ZWQgaXQgdG8gYmUgdW5yZWdpc3RlcmVkXCYjMzQ7XG4mIzQzO1x0XHRSRVQ9JEtTRlRfRkFJTFxuIFx0ZmlcbiYjNDM7fVxuIFxuLVx0T1JJR19WQUxVRT0kKGNhdCBcJiMzNDske1RBUkdFVH1cJiMzNDspXG4mIzQzO3Rlc3RfbW91bnRfcG9pbnRfZXJyb3IoKVxuJiM0Mzt7XG4mIzQzO1x0bG9jYWwgdD1cJiMzNDske1NZU0NUTH0vbW50L21udF9lcnJvclwmIzM0O1xuIFxuLVx0aWYgWyAkT1JJR19WQUxVRSAtbmUgMSBdOyB0aGVuXG4tXHRcdGVjaG8gXCYjMzQ7RkFJTFwmIzM0OyBcdTAwM2VcdTAwMjYyXG4tXHRcdHJjPTFcbi1cdFx0dGVzdF9yY1xuJiM0MztcdGlmIFtbIC1kIFwmIzM0OyR0XCYjMzQ7IF1dOyB0aGVuXG4mIzQzO1x0XHRrdGFwX3ByaW50X21zZyBcJiMzNDskdDogZGlyZWN0b3J5IHVuZXhwZWN0ZWRseSBjcmVhdGVkXCYjMzQ7XG4mIzQzO1x0XHRSRVQ9JEtTRlRfRkFJTFxuIFx0Zmlcbi1cbi1cdGVjaG8gXCYjMzQ7T0tcJiMzNDtcbi1cdHJldHVybiAwXG4gfVxuIFxuLXN5c2N0bF90ZXN0XzAwMDkoKVxuJiM0Mzt0ZXN0X2VtcHR5X2Rpcl9yZWdpc3RyYXRpb24oKVxuIHtcbi1cdFRBUkdFVD1cJiMzNDske1NZU0NUTH0vJChnZXRfdGVzdF90YXJnZXQgMDAwOSlcJiMzNDtcbi1cdGVjaG8gLW4gXCYjMzQ7VGVzdGluZyBpZiAkVEFSR0VUIHVucmVnaXN0ZXJlZCBjb3JyZWN0bHkgLi4uIFwmIzM0O1xuLVx0aWYgWyAtZCAkVEFSR0VUIF07IHRoZW5cbi1cdFx0ZWNobyBcJiMzNDtGQUlMXCYjMzQ7IFx1MDAzZVx1MDAyNjJcbi1cdFx0cmM9MVxuLVx0XHR0ZXN0X3JjXG4tXHRmaVxuJiM0MztcdGxvY2FsIHQ9XCYjMzQ7JHtTWVNDVEx9L2VtcHR5X2FkZFwmIzM0O1xuIFxuLVx0ZWNobyBcJiMzNDtPS1wmIzM0O1xuLVx0cmV0dXJuIDBcbiYjNDM7XHRpZiBbWyAhIC1kIFwmIzM0OyR0XCYjMzQ7IF1dOyB0aGVuXG4mIzQzO1x0XHRrdGFwX3ByaW50X21zZyBcJiMzNDskdDogZGlyZWN0b3J5IHdhcyBub3QgY3JlYXRlZFwmIzM0O1xuJiM0MztcdFx0UkVUPSRLU0ZUX0ZBSUxcbiYjNDM7XHRcdHJldHVyblxuJiM0MztcdGZpXG4mIzQzO1x0aWYgW1sgISAtZCBcJiMzNDskdC9lbXB0eVwmIzM0OyBdXTsgdGhlblxuJiM0MztcdFx0a3RhcF9wcmludF9tc2cgXCYjMzQ7JHQvZW1wdHk6IGRpcmVjdG9yeSB3YXMgbm90IGNyZWF0ZWRcJiMzNDtcbiYjNDM7XHRcdFJFVD0kS1NGVF9GQUlMXG4mIzQzO1x0ZmlcbiB9XG4gXG4tc3lzY3RsX3Rlc3RfMDAxMCgpXG4mIzQzO3Rlc3RfdThfcmFuZ2VfY2hlY2soKVxuIHtcbi1cdFRBUkdFVD1cJiMzNDske1NZU0NUTH0vJChnZXRfdGVzdF90YXJnZXQgMDAxMClcJiMzNDtcbi1cdGVjaG8gLW4gXCYjMzQ7VGVzdGluZyB0aGF0ICRUQVJHRVQgd2FzIG5vdCBjcmVhdGVkIC4uLiBcJiMzNDtcbi1cdGlmIFsgLWQgJFRBUkdFVCBdOyB0aGVuXG4tXHRcdGVjaG8gXCYjMzQ7RkFJTFwmIzM0OyBcdTAwM2VcdTAwMjYyXG4tXHRcdHJjPTFcbi1cdFx0dGVzdF9yY1xuJiM0MztcdGxvY2FsIHQ9XCYjMzQ7JHtTWVNDVEx9L3U4X3ZhbGlkXCYjMzQ7XG4mIzQzO1xuJiM0MztcdGlmIFtbICEgLWYgXCYjMzQ7JHRcJiMzNDsgXV07IHRoZW5cbiYjNDM7XHRcdGt0YXBfcHJpbnRfbXNnIFwmIzM0OyR0OiBmaWxlIHdhcyBub3QgY3JlYXRlZFwmIzM0O1xuJiM0MztcdFx0UkVUPSRLU0ZUX0ZBSUxcbiYjNDM7XHRcdHJldHVyblxuIFx0ZmlcbiBcbi1cdGVjaG8gXCYjMzQ7T0tcJiMzNDtcbi1cdHJldHVybiAwXG4mIzQzO1x0YXNzZXJ0X2RtZXNnX2NvdW50IFwmIzM0O3U4X292ZXIgcmFuZ2UgdmFsdWVcJiMzNDsgMSB8fCBSRVQ9JEtTRlRfRkFJTFxuJiM0MztcdGFzc2VydF9kbWVzZ19jb3VudCBcJiMzNDt1OF91bmRlciByYW5nZSB2YWx1ZVwmIzM0OyAxIHx8IFJFVD0kS1NGVF9GQUlMXG4gfVxuIFxuLXN5c2N0bF90ZXN0XzAwMTEoKVxuJiM0Mzt0ZXN0X2Jvb3RfcGFyYW1faW50KClcbiB7XG4tXHRUQVJHRVQ9XCYjMzQ7JHtTWVNDVEx9LyQoZ2V0X3Rlc3RfdGFyZ2V0IDAwMTEpXCYjMzQ7XG4tXHRlY2hvIC1uIFwmIzM0O1Rlc3RpbmcgZW1wdHkgZGlyIGhhbmRsaW5nIGluICR7VEFSR0VUfSAuLi4gXCYjMzQ7XG4tXHRpZiBbICEgLWQgJHtUQVJHRVR9IF07IHRoZW5cbi1cdFx0ZWNobyAtZSBcJiMzNDtGQUlMXFxuQ291bGQgbm90IGNyZWF0ZSAke1RBUkdFVH1cJiMzNDsgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRcdHRlc3RfcmNcbi1cdGZpXG4mIzQzO1x0bG9jYWwgdD1cJiMzNDske1NZU0NUTH0vYm9vdF9pbnRcJiMzNDtcbiYjNDM7XHRsb2NhbCBvcmlnIGZvdW5kXG4gXG4tXHRUQVJHRVQyPVwmIzM0OyR7VEFSR0VUfS9lbXB0eVwmIzM0O1xuLVx0aWYgWyAhIC1kICR7VEFSR0VUMn0gXTsgdGhlblxuLVx0XHRlY2hvIC1lIFwmIzM0O0ZBSUxcXG5Db3VsZCBub3QgY3JlYXRlICR7VEFSR0VUMn1cJiMzNDsgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRcdHRlc3RfcmNcbi1cdGZpXG4mIzQzO1x0W1sgLWYgXCYjMzQ7JHRcJiMzNDsgXV0gfHwgeyBSRVQ9JEtTRlRfU0tJUDsgcmV0dXJuOyB9XG4gXG4tXHRlY2hvIFwmIzM0O09LXCYjMzQ7XG4tXHRyZXR1cm4gMFxuLX1cbiYjNDM7XHQjIEJvb3QgY21kbGluZSBwYXJhbXMgb25seSBhcHBseSB3aGVuIHRlc3Rfc3lzY3RsIGlzIGJ1aWx0IGluLCBub3RcbiYjNDM7XHQjIGxvYWRlZCBhcyBhIG1vZHVsZS5cbiYjNDM7XHRpZiBbWyAtZCBcJiMzNDskTU9EVUxFX0RJUlwmIzM0OyBdXTsgdGhlblxuJiM0MztcdFx0a3RhcF9wcmludF9tc2cgXCYjMzQ7JHQ6IHRlc3Qgb25seSBwb3NzaWJsZSBpZiB0ZXN0X3N5c2N0bCBpcyBidWlsdC1pbiwgbm90IGEgbW9kdWxlXCYjMzQ7XG4mIzQzO1x0XHRSRVQ9JEtTRlRfU0tJUFxuJiM0MztcdFx0cmV0dXJuXG4mIzQzO1x0ZmlcbiBcbi1zeXNjdGxfdGVzdF8wMDEyKClcbi17XG4tXHRUQVJHRVQ9XCYjMzQ7JHtTWVNDVEx9LyQoZ2V0X3Rlc3RfdGFyZ2V0IDAwMTIpXCYjMzQ7XG4tXHRlY2hvIC1uIFwmIzM0O1Rlc3RpbmcgdTggcmFuZ2UgY2hlY2sgaW4gc3lzY3RsIHRhYmxlIGNoZWNrIGluICR7VEFSR0VUfSAuLi4gXCYjMzQ7XG4tXHRpZiBbICEgLWYgJHtUQVJHRVR9IF07IHRoZW5cbi1cdFx0ZWNobyAtZSBcJiMzNDtGQUlMXFxuQ291bGQgbm90IGNyZWF0ZSAke1RBUkdFVH1cJiMzNDsgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRcdHRlc3RfcmNcbiYjNDM7XHRvcmlnPSQoY2F0IFwmIzM0OyR0XCYjMzQ7KVxuJiM0MztcdGlmIFtbIFwmIzM0OyRvcmlnXCYjMzQ7ID09IFwmIzM0OzFcJiMzNDsgXV07IHRoZW5cbiYjNDM7XHRcdHJldHVyblxuIFx0ZmlcbiBcbi1cdGxvY2FsIHU4b3Zlcl9tc2c9JChkbWVzZyB8IGdyZXAgXCYjMzQ7dThfb3ZlciByYW5nZSB2YWx1ZVwmIzM0OyB8IHdjIC1sKVxuLVx0aWYgWyAhICR7dThvdmVyX21zZ30gLWVxIDEgXTsgdGhlblxuLVx0XHRlY2hvIC1lIFwmIzM0O0ZBSUxcXG51OCBvdmVyZmxvdyBub3QgZGV0ZWN0ZWRcJiMzNDsgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRcdHRlc3RfcmNcbiYjNDM7XHRpZiBbWyAhIC1mIC9wcm9jL2NtZGxpbmUgXV07IHRoZW5cbiYjNDM7XHRcdGt0YXBfcHJpbnRfbXNnIFwmIzM0OyR0OiBubyAvcHJvYy9jbWRsaW5lIHRvIGNoZWNrIGZvciB0aGUgYm9vdCBwYXJhbWV0ZXJcJiMzNDtcbiYjNDM7XHRcdFJFVD0kS1NGVF9TS0lQXG4mIzQzO1x0XHRyZXR1cm5cbiBcdGZpXG4gXG4tXHRsb2NhbCB1OHVuZGVyX21zZz0kKGRtZXNnIHwgZ3JlcCBcJiMzNDt1OF91bmRlciByYW5nZSB2YWx1ZVwmIzM0OyB8IHdjIC1sKVxuLVx0aWYgWyAhICR7dTh1bmRlcl9tc2d9IC1lcSAxIF07IHRoZW5cbi1cdFx0ZWNobyAtZSBcJiMzNDtGQUlMXFxudTggdW5kZXJmbG93IG5vdCBkZXRlY3RlZFwmIzM0OyBcdTAwM2VcdTAwMjYyXG4tXHRcdHJjPTFcbi1cdFx0dGVzdF9yY1xuJiM0MztcdGZvdW5kPSQoZ3JlcCAtYyBcJiMzNDtzeXNjdGxbLi9dZGVidWdbLi9ddGVzdF9zeXNjdGxbLi9dYm9vdF9pbnQ9MVwmIzM0OyAvcHJvYy9jbWRsaW5lKVxuJiM0MztcdGlmIFtbIFwmIzM0OyRmb3VuZFwmIzM0OyA9PSBcJiMzNDsxXCYjMzQ7IF1dOyB0aGVuXG4mIzQzO1x0XHRrdGFwX3ByaW50X21zZyBcJiMzNDskdDoga2VybmVsIHBhcmFtIGZvdW5kIG9uIGNtZGxpbmUgYnV0IHZhbHVlIGlzIG5vdCAxXCYjMzQ7XG4mIzQzO1x0XHRSRVQ9JEtTRlRfRkFJTFxuJiM0MztcdFx0cmV0dXJuXG4gXHRmaVxuIFxuLVx0ZWNobyBcJiMzNDtPS1wmIzM0O1xuLVx0cmV0dXJuIDBcbiYjNDM7XHRrdGFwX3ByaW50X21zZyBcJiMzNDskdDoga2VybmVsIG5vdCBib290ZWQgd2l0aCBzeXNjdGwuZGVidWcudGVzdF9zeXNjdGwuYm9vdF9pbnQ9MVwmIzM0O1xuJiM0MztcdFJFVD0kS1NGVF9TS0lQXG4gfVxuIFxuLXN5c2N0bF90ZXN0XzAwMTMoKVxuJiM0Mzt0ZXN0X3N5c2N0bF9tYWNyb19tYXRjaCgpXG4ge1xuLVx0VEFSR0VUPVwmIzM0OyR7U1lTQ1RMfS8kKGdldF90ZXN0X3RhcmdldCAwMDEzKVwmIzM0O1xuLVx0cmVzZXRfdmFsc1xuJiM0MztcdGxvY2FsIHQ9XCYjMzQ7JHtTWVNDVEx9L21hdGNoX2ludFwmIzM0O1xuJiM0MztcbiYjNDM7XHRbWyAtZiBcJiMzNDskdFwmIzM0OyBdXSB8fCB7IFJFVD0kS1NGVF9TS0lQOyByZXR1cm47IH1cbiBcbi1cdHJ1bl9pbnRfYXJyYXlfbm9fcGFydGlhbF91cGRhdGVcbiYjNDM7XHRhc3NlcnRfY29udGVudCBcJiMzNDskdFwmIzM0OyBcJiMzNDsxXCYjMzQ7IHx8IFJFVD0kS1NGVF9GQUlMXG4gfVxuIFxuLWxpc3RfdGVzdHMoKVxuJiM0MztydW5fb25lKClcbiB7XG4tXHRlY2hvIFwmIzM0O1Rlc3QgSUQgbGlzdDpcJiMzNDtcbi1cdGVjaG9cbi1cdGVjaG8gXCYjMzQ7VEVTVF9JRCB4IE5VTV9URVNUXCYjMzQ7XG4tXHRlY2hvIFwmIzM0O1RFU1RfSUQ6ICAgVGVzdCBJRFwmIzM0O1xuLVx0ZWNobyBcJiMzNDtOVU1fVEVTVFM6IFJlY29tbWVuZGVkIG51bWJlciBvZiB0aW1lcyB0byBydW4gdGhlIHRlc3RcJiMzNDtcbi1cdGVjaG9cbi1cdGVjaG8gXCYjMzQ7MDAwMSB4ICQoZ2V0X3Rlc3RfY291bnQgMDAwMSkgLSB0ZXN0cyBwcm9jX2RvaW50dmVjX21pbm1heCgpXCYjMzQ7XG4tXHRlY2hvIFwmIzM0OzAwMDIgeCAkKGdldF90ZXN0X2NvdW50IDAwMDIpIC0gdGVzdHMgcHJvY19kb3N0cmluZygpXCYjMzQ7XG4tXHRlY2hvIFwmIzM0OzAwMDMgeCAkKGdldF90ZXN0X2NvdW50IDAwMDMpIC0gdGVzdHMgcHJvY19kb2ludHZlYygpXCYjMzQ7XG4tXHRlY2hvIFwmIzM0OzAwMDQgeCAkKGdldF90ZXN0X2NvdW50IDAwMDQpIC0gdGVzdHMgcHJvY19kb3VpbnR2ZWMoKVwmIzM0O1xuLVx0ZWNobyBcJiMzNDswMDA1IHggJChnZXRfdGVzdF9jb3VudCAwMDA1KSAtIHRlc3RzIHByb2NfZG91aW50dmVjKCkgYXJyYXlcJiMzNDtcbi1cdGVjaG8gXCYjMzQ7MDAwNiB4ICQoZ2V0X3Rlc3RfY291bnQgMDAwNikgLSB0ZXN0cyBwcm9jX2RvX2xhcmdlX2JpdG1hcCgpXCYjMzQ7XG4tXHRlY2hvIFwmIzM0OzAwMDcgeCAkKGdldF90ZXN0X2NvdW50IDAwMDcpIC0gdGVzdHMgc2V0dGluZyBzeXNjdGwgZnJvbSBrZXJuZWwgYm9vdCBwYXJhbVwmIzM0O1xuLVx0ZWNobyBcJiMzNDswMDA4IHggJChnZXRfdGVzdF9jb3VudCAwMDA4KSAtIHRlc3RzIHN5c2N0bCBtYWNybyB2YWx1ZXMgbWF0Y2hcJiMzNDtcbi1cdGVjaG8gXCYjMzQ7MDAwOSB4ICQoZ2V0X3Rlc3RfY291bnQgMDAwOSkgLSB0ZXN0cyBzeXNjdCB1bnJlZ2lzdGVyXCYjMzQ7XG4tXHRlY2hvIFwmIzM0OzAwMTAgeCAkKGdldF90ZXN0X2NvdW50IDAwMTApIC0gdGVzdHMgc3lzY3QgbW91bnQgcG9pbnRcJiMzNDtcbi1cdGVjaG8gXCYjMzQ7MDAxMSB4ICQoZ2V0X3Rlc3RfY291bnQgMDAxMSkgLSB0ZXN0cyBlbXB0eSBkaXJlY3Rvcmllc1wmIzM0O1xuLVx0ZWNobyBcJiMzNDswMDEyIHggJChnZXRfdGVzdF9jb3VudCAwMDEyKSAtIHRlc3RzIHJhbmdlIGNoZWNrIGZvciB1OCBwcm9jX2hhbmRsZXJcJiMzNDtcbi1cdGVjaG8gXCYjMzQ7MDAxMyB4ICQoZ2V0X3Rlc3RfY291bnQgMDAxMykgLSB0ZXN0cyBwYXJ0aWFsbHkgdXBkYXRlIHZlY3RvcnMgb24gZXJyb3JcJiMzNDtcbiYjNDM7XHRsb2NhbCBuYW1lPSQxXG4mIzQzO1xuJiM0MztcdCMgU3Vic2hlbGw6IGEgdGVzdCBjYW5ub3QgbGVhayB2YXJzL2N3ZC90cmFwcyBpbnRvIHRoZSBuZXh0IG9uZSwgYW5kIGFuXG4mIzQzO1x0IyBhY2NpZGVudGFsIGBleGl0YCBpbnNpZGUgYSB0ZXN0IGtpbGxzIG9ubHkgaXRzIG93biBzdWJzaGVsbC5cbiYjNDM7XHQoIFJFVD0kS1NGVF9QQVNTOyBcJiMzNDskbmFtZVwmIzM0OzsgZXhpdCAkUkVUIClcbiYjNDM7XG4mIzQzO1x0Y2FzZSAkPyBpblxuJiM0MztcdFwmIzM0OyRLU0ZUX1BBU1NcJiMzNDspIGt0YXBfdGVzdF9wYXNzIFwmIzM0OyRuYW1lXCYjMzQ7IDs7XG4mIzQzO1x0XCYjMzQ7JEtTRlRfU0tJUFwmIzM0Oykga3RhcF90ZXN0X3NraXAgXCYjMzQ7JG5hbWVcJiMzNDsgOztcbiYjNDM7XHQqKSAgICAgICAgICBrdGFwX3Rlc3RfZmFpbCBcJiMzNDskbmFtZVwmIzM0OyA7O1xuJiM0MztcdGVzYWNcbiB9XG4gXG4gdXNhZ2UoKVxuIHtcbi1cdE5VTV9URVNUUz0kKGdyZXAgLW8gJiMzOTsgJiMzOTsgXHUwMDNjXHUwMDNjXHUwMDNjXCYjMzQ7JEFMTF9URVNUU1wmIzM0OyB8IGdyZXAgLWMgLilcbi1cdGxldCBOVU1fVEVTVFM9JE5VTV9URVNUUyYjNDM7MVxuLVx0TUFYX1RFU1Q9JChwcmludGYgXCYjMzQ7JTA0ZFxcblwmIzM0OyAkTlVNX1RFU1RTKVxuLVx0ZWNobyBcJiMzNDtVc2FnZTogJDAgWyAtdCBcdTAwM2M0LW51bWJlci1kaWdpdFx1MDAzZSBdIHwgWyAtdyBcdTAwM2M0LW51bWJlci1kaWdpdFx1MDAzZSBdIHxcJiMzNDtcbi1cdGVjaG8gXCYjMzQ7XHRcdCBbIC1zIFx1MDAzYzQtbnVtYmVyLWRpZ2l0XHUwMDNlIF0gfCBbIC1jIFx1MDAzYzQtbnVtYmVyLWRpZ2l0XHUwMDNlIFx1MDAzY3Rlc3QtIGNvdW50XHUwMDNlXCYjMzQ7XG4tXHRlY2hvIFwmIzM0OyAgICAgICAgICAgWyBhbGwgXSBbIC1oIHwgLS1oZWxwIF0gWyAtbCBdXCYjMzQ7XG4tXHRlY2hvIFwmIzM0O1wmIzM0O1xuLVx0ZWNobyBcJiMzNDtWYWxpZCB0ZXN0czogMDAwMS0kTUFYX1RFU1RcJiMzNDtcbi1cdGVjaG8gXCYjMzQ7XCYjMzQ7XG4tXHRlY2hvIFwmIzM0OyAgICBhbGwgICAgIFJ1bnMgYWxsIHRlc3RzIChkZWZhdWx0KVwmIzM0O1xuLVx0ZWNobyBcJiMzNDsgICAgLXQgICAgICBSdW4gdGVzdCBJRCB0aGUgcmVjb21tZW5kZWQgbnVtYmVyIG9mIHRpbWVzXCYjMzQ7XG4tXHRlY2hvIFwmIzM0OyAgICAtdyAgICAgIFdhdGNoIHRlc3QgSUQgcnVuIHVudGlsIGl0IHJ1bnMgaW50byBhbiBlcnJvclwmIzM0O1xuLVx0ZWNobyBcJiMzNDsgICAgLWMgICAgICBSdW4gdGVzdCBJRCBvbmNlXCYjMzQ7XG4tXHRlY2hvIFwmIzM0OyAgICAtcyAgICAgIFJ1biB0ZXN0IElEIHggdGVzdC1jb3VudCBudW1iZXIgb2YgdGltZXNcJiMzNDtcbi1cdGVjaG8gXCYjMzQ7ICAgIC1sICAgICAgTGlzdCBhbGwgdGVzdCBJRCBsaXN0XCYjMzQ7XG4tXHRlY2hvIFwmIzM0OyAtaHwtLWhlbHAgIEhlbHBcJiMzNDtcbi1cdGVjaG9cbi1cdGVjaG8gXCYjMzQ7SWYgYW4gZXJyb3IgZXZlcnkgb2NjdXJzIGV4ZWN1dGlvbiB3aWxsIGltbWVkaWF0ZWx5IHRlcm1pbmF0ZS5cJiMzNDtcbi1cdGVjaG8gXCYjMzQ7SWYgeW91IGFyZSBhZGRpbmcgYSBuZXcgdGVzdCB0cnkgdXNpbmcgLXcgXHUwMDNjdGVzdC1JRFx1MDAzZSBmaXJzdCB0b1wmIzM0O1xuLVx0ZWNobyBcJiMzNDttYWtlIHN1cmUgdGhlIHRlc3QgcGFzc2VzIGEgc2VyaWVzIG9mIHRlc3RzLlwmIzM0O1xuLVx0ZWNob1xuLVx0ZWNobyBFeGFtcGxlIHVzZXM6XG4tXHRlY2hvXG4tXHRlY2hvIFwmIzM0OyRURVNUX05BTUUuc2ggICAgICAgICAgICAtLSBleGVjdXRlcyBhbGwgdGVzdHNcJiMzNDtcbi1cdGVjaG8gXCYjMzQ7JFRFU1RfTkFNRS5zaCAtdCAwMDAyICAgIC0tIEV4ZWN1dGVzIHRlc3QgSUQgMDAwMiB0aGUgcmVjb21tZW5kZWQgbnVtYmVyIG9mIHRpbWVzXCYjMzQ7XG4tXHRlY2hvIFwmIzM0OyRURVNUX05BTUUuc2ggLXcgMDAwMiAgICAtLSBXYXRjaCB0ZXN0IElEIDAwMDIgcnVuIHVudGlsIGFuIGVycm9yIG9jY3Vyc1wmIzM0O1xuLVx0ZWNobyBcJiMzNDskVEVTVF9OQU1FLnNoIC1zIDAwMDIgICAgLS0gUnVuIHRlc3QgSUQgMDAwMiBvbmNlXCYjMzQ7XG4tXHRlY2hvIFwmIzM0OyRURVNUX05BTUUuc2ggLWMgMDAwMiAzICAtLSBSdW4gdGVzdCBJRCAwMDAyIHRocmVlIHRpbWVzXCYjMzQ7XG4tXHRlY2hvXG4tXHRsaXN0X3Rlc3RzXG4tXHRleGl0IDFcbi19XG4mIzQzO1x0Y2F0IFx1MDAzY1x1MDAzYy1FT0ZcbiYjNDM7XHRVc2FnZTogJDAgWy1yIE5dIFstbF0gWy10IFRdIFstcyBOXSBbLWh8LS1oZWxwXVxuIFxuLWZ1bmN0aW9uIHRlc3RfbnVtKClcbi17XG4tXHRyZT0mIzM5O15bMC05XSYjNDM7JCYjMzk7XG4tXHRpZiAhIFtbICQxID1+ICRyZSBdXTsgdGhlblxuLVx0XHR1c2FnZVxuLVx0Zmlcbi19XG4tZnVuY3Rpb24gcmVtb3ZlX2xlYWRpbmdfemVyb3MoKVxuLXtcbi1cdGVjaG8gJDEgfCBzZWQgJiMzOTtzL14wKi8vJiMzOTtcbi19XG4mIzQzO1x0UnVucyBldmVyeSBhdXRvLWRpc2NvdmVyZWQgdGVzdF8qIGZ1bmN0aW9uLiBTZXR0aW5nIFNZU0NUTF9URVNUUyB3aWxsXG4mIzQzO1x0b3ZlcnJpZGUgdGhlIGRlZmF1bHQgYW5kIHBhc3NpbmcgLXQgd2lsbCBvdmVycmlkZSBib3RoIGVudiB2YXIgYW5kIHRoZVxuJiM0MztcdGRlZmF1bHQuXG4gXG4tZnVuY3Rpb24gZ2V0X3Rlc3RfY291bnQoKVxuLXtcbi1cdHRlc3RfbnVtICQxXG4tXHRhd2tfZmllbGQ9JChyZW1vdmVfbGVhZGluZ196ZXJvcyAkMSlcbi1cdFRFU1RfREFUQT0kKGVjaG8gJEFMTF9URVNUUyB8IGF3ayAmIzM5O3twcmludCAkJiMzOTskYXdrX2ZpZWxkJiMzOTt9JiMzOTspXG4tXHRlY2hvICR7VEVTVF9EQVRBfSB8IGF3ayAtRlwmIzM0OzpcJiMzNDsgJiMzOTt7cHJpbnQgJDJ9JiMzOTtcbi19XG4mIzQzO1x0ICAgIC1yIE4gICAgICAgICAgcmVwZWF0IHNlbGVjdGVkIHRlc3RzIE4gdGltZXMgKGRlZmF1bHQgMSlcbiYjNDM7XHQgICAgLWwgICAgICAgICAgICBsaXN0IGRpc2NvdmVyZWQgdGVzdHNcbiYjNDM7XHQgICAgLXQgVCAgICAgICAgICBzcGFjZSBzZXBhcmF0ZWQgdGVzdHMgbGlzdC4gRm9yIGV4YW1wbGUgXCYjMzQ7dGVzdF8xIHRlc3RfMlwmIzM0O1xuJiM0MztcdCAgICAtcyBOICAgICAgICAgIGJhc2Ugc2VlZCBmb3IgdGhlIHJhbmRvbWl6ZWQgYml0bWFwIGl0ZXJhdGlvbnMuXG4mIzQzO1x0ICAgIC1oLCAtLWhlbHAgICAgaGVscFxuIFxuLWZ1bmN0aW9uIGdldF90ZXN0X2VuYWJsZWQoKVxuLXtcbi1cdHRlc3RfbnVtICQxXG4tXHRhd2tfZmllbGQ9JChyZW1vdmVfbGVhZGluZ196ZXJvcyAkMSlcbi1cdFRFU1RfREFUQT0kKGVjaG8gJEFMTF9URVNUUyB8IGF3ayAmIzM5O3twcmludCAkJiMzOTskYXdrX2ZpZWxkJiMzOTt9JiMzOTspXG4tXHRlY2hvICR7VEVTVF9EQVRBfSB8IGF3ayAtRlwmIzM0OzpcJiMzNDsgJiMzOTt7cHJpbnQgJDN9JiMzOTtcbiYjNDM7XHQgICAgU1lTQ1RMX1RFU1RTPSYjMzk7dGVzdF8xIHRlc3RfMiYjMzk7ICQwICBydW4gb25seSB0aGUgbmFtZWQgdGVzdHNcbiYjNDM7XHRFT0ZcbiB9XG4gXG4tZnVuY3Rpb24gZ2V0X3Rlc3RfdGFyZ2V0KClcbiYjNDM7bGlzdF90ZXN0cygpXG4ge1xuLVx0dGVzdF9udW0gJDFcbi1cdGF3a19maWVsZD0kKHJlbW92ZV9sZWFkaW5nX3plcm9zICQxKVxuLVx0VEVTVF9EQVRBPSQoZWNobyAkQUxMX1RFU1RTIHwgYXdrICYjMzk7e3ByaW50ICQmIzM5OyRhd2tfZmllbGQmIzM5O30mIzM5Oylcbi1cdGVjaG8gJHtURVNUX0RBVEF9IHwgYXdrIC1GXCYjMzQ7OlwmIzM0OyAmIzM5O3twcmludCAkNH0mIzM5O1xuJiM0MztcdGVjaG8gXCYjMzQ7RGlzY292ZXJlZCB0ZXN0czpcJiMzNDtcbiYjNDM7XHRsb2NhbCB0XG4mIzQzO1x0Zm9yIHQgaW4gJEFMTF9URVNUUzsgZG9cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7ICAkdFwmIzM0O1xuJiM0MztcdGRvbmVcbiB9XG4gXG4tZnVuY3Rpb24gZ2V0X3Rlc3Rfc2tpcF9ub190YXJnZXQoKVxuJiM0MztjaGVja19yZXFzKClcbiB7XG4tXHR0ZXN0X251bSAkMVxuLVx0YXdrX2ZpZWxkPSQocmVtb3ZlX2xlYWRpbmdfemVyb3MgJDEpXG4tXHRURVNUX0RBVEE9JChlY2hvICRBTExfVEVTVFMgfCBhd2sgJiMzOTt7cHJpbnQgJCYjMzk7JGF3a19maWVsZCYjMzk7fSYjMzk7KVxuLVx0ZWNobyAke1RFU1RfREFUQX0gfCBhd2sgLUZcJiMzNDs6XCYjMzQ7ICYjMzk7e3ByaW50ICQ1fSYjMzk7XG4tfVxuJiM0MztcdGxvY2FsIHVpZFxuJiM0MztcdHVpZD0kKGlkIC11KVxuIFxuLWZ1bmN0aW9uIHNraXBfdGVzdCgpXG4te1xuLVx0VEVTVF9JRD0kMVxuLVx0VEVTVF9UQVJHRVQ9JDJcbi1cdGlmIHRhcmdldF9leGlzdHMgJFRFU1RfVEFSR0VUICRURVNUX0lEOyB0aGVuXG4tXHRcdFRFU1RfU0tJUD0kKGdldF90ZXN0X3NraXBfbm9fdGFyZ2V0ICRURVNUX0lEKVxuLVx0XHRpZiBbWyAkVEVTVF9TS0lQIC1lcSBcJiMzNDsxXCYjMzQ7IF1dOyB0aGVuXG4tXHRcdFx0ZWNobyBcJiMzNDtUYXJnZXQgJFRFU1RfVEFSR0VUIGZvciB0ZXN0ICRURVNUX0lEIGRvZXMgbm90IGV4aXN0IC4uLiBTS0lQUElOR1wmIzM0O1xuLVx0XHRcdHJldHVybiAwXG4tXHRcdGZpXG4mIzQzO1x0aWYgWyBcJiMzNDskdWlkXCYjMzQ7IC1uZSAwIF07IHRoZW5cbiYjNDM7XHRcdGt0YXBfc2tpcF9hbGwgXCYjMzQ7bXVzdCBiZSBydW4gYXMgcm9vdFwmIzM0O1xuJiM0MztcdFx0ZXhpdCBcJiMzNDskS1NGVF9TS0lQXCYjMzQ7XG4mIzQzO1x0ZmlcbiYjNDM7XG4mIzQzO1x0aWYgISB3aGljaCBnZXRjb25mIFx1MDAzZSAvZGV2L251bGwgMlx1MDAzZVx1MDAyNjE7IHRoZW5cbiYjNDM7XHRcdGt0YXBfc2tpcF9hbGwgXCYjMzQ7JDA6IFlvdSBuZWVkIGdldGNvbmYgaW5zdGFsbGVkXCYjMzQ7XG4mIzQzO1x0XHRleGl0IFwmIzM0OyRLU0ZUX1NLSVBcJiMzNDtcbiYjNDM7XHRmaVxuJiM0MztcbiYjNDM7XHRpZiAhIHdoaWNoIGRpZmYgXHUwMDNlIC9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MTsgdGhlblxuJiM0MztcdFx0a3RhcF9za2lwX2FsbCBcJiMzNDskMDogWW91IG5lZWQgZGlmZiBpbnN0YWxsZWRcJiMzNDtcbiYjNDM7XHRcdGV4aXQgXCYjMzQ7JEtTRlRfU0tJUFwmIzM0O1xuIFx0Zmlcbi1cdHJldHVybiAxXG4gfVxuIFxuLWZ1bmN0aW9uIHJ1bl9hbGxfdGVzdHMoKVxuJiM0MztjaGVja19hcmdzKCkgICMgXHUwMDNjcmVwZWF0XHUwMDNlIFx1MDAzY3NlbGVjdGVkXHUwMDNlIFx1MDAzY3NlZWRcdTAwM2VcbiB7XG4tXHRmb3IgaSBpbiAkQUxMX1RFU1RTIDsgZG9cbi1cdFx0VEVTVF9JRD0ke2klOio6KjoqOip9XG4tXHRcdEVOQUJMRUQ9JChnZXRfdGVzdF9lbmFibGVkICRURVNUX0lEKVxuLVx0XHRURVNUX0NPVU5UPSQoZ2V0X3Rlc3RfY291bnQgJFRFU1RfSUQpXG4tXHRcdFRFU1RfVEFSR0VUPSQoZ2V0X3Rlc3RfdGFyZ2V0ICRURVNUX0lEKVxuLVxuLVx0XHRpZiBbWyAkRU5BQkxFRCAtZXEgXCYjMzQ7MVwmIzM0OyBdXTsgdGhlblxuLVx0XHRcdHRlc3RfY2FzZSAkVEVTVF9JRCAkVEVTVF9DT1VOVCAkVEVTVF9UQVJHRVRcbiYjNDM7XHRsb2NhbCByZXBlYXRfYXJnPVwmIzM0OyQxXCYjMzQ7XG4mIzQzO1x0bG9jYWwgc2VsZWN0ZWRfYXJnPVwmIzM0OyQyXCYjMzQ7XG4mIzQzO1x0bG9jYWwgc2VlZF9hcmc9XCYjMzQ7JDNcJiMzNDtcbiYjNDM7XHRsb2NhbCB0XG4mIzQzO1xuJiM0MztcdGlmIFsgLXogXCYjMzQ7JHNlbGVjdGVkX2FyZ1wmIzM0OyBdOyB0aGVuXG4mIzQzO1x0XHRrdGFwX2V4aXRfZmFpbF9tc2cgXCYjMzQ7bm8gdGVzdCBzZWxlY3RlZFwmIzM0O1xuJiM0MztcdGZpXG4mIzQzO1xuJiM0MztcdGlmICEgW1sgXCYjMzQ7JHJlcGVhdF9hcmdcJiMzNDsgPX4gXlswLTldJiM0MzskIF1dOyB0aGVuXG4mIzQzO1x0XHRrdGFwX2V4aXRfZmFpbF9tc2cgXCYjMzQ7cmVwZWF0IGFyZ3VtZW50ICYjMzk7JHJlcGVhdF9hcmcmIzM5OyBpcyBub3QgYSBudW1iZXJcJiMzNDtcbiYjNDM7XHRmaVxuJiM0MztcbiYjNDM7XHRpZiAhIFtbIFwmIzM0OyRzZWVkX2FyZ1wmIzM0OyA9fiBeWzAtOV0mIzQzOyQgXV07IHRoZW5cbiYjNDM7XHRcdGt0YXBfZXhpdF9mYWlsX21zZyBcJiMzNDtzZWVkIGFyZ3VtZW50ICYjMzk7JHNlZWRfYXJnJiMzOTsgaXMgbm90IGEgbnVtYmVyXCYjMzQ7XG4mIzQzO1x0ZmlcbiYjNDM7XG4mIzQzO1x0Zm9yIHQgaW4gJHNlbGVjdGVkX2FyZzsgZG9cbiYjNDM7XHRcdGlmICEgZGVjbGFyZSAtRiBcJiMzNDskdFwmIzM0OyBcdTAwM2UgL2Rldi9udWxsOyB0aGVuXG4mIzQzO1x0XHRcdGt0YXBfZXhpdF9mYWlsX21zZyBcJiMzNDt1bmtub3duIHNlbGVjdGVkIHRlc3QgJiMzOTskdCYjMzk7XCYjMzQ7XG4gXHRcdGZpXG4gXHRkb25lXG4gfVxuIFxuLWZ1bmN0aW9uIHdhdGNoX2xvZygpXG4mIzQzO2FsbG93X3VzZXJfZGVmYXVsdHMoKVxuIHtcbi1cdGlmIFsgJCMgLW5lIDMgXTsgdGhlblxuLVx0XHRjbGVhclxuJiM0MztcdGlmIFsgLXogXCYjMzQ7JHtNT0RVTEVfRElSfVwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0XHRNT0RVTEVfRElSPVwmIzM0Oy9zeXMvbW9kdWxlL3Rlc3Rfc3lzY3RsL1wmIzM0O1xuJiM0MztcdGZpXG4mIzQzO1x0aWYgWyAteiBcJiMzNDske1NZU0NUTH1cJiMzNDsgXTsgdGhlblxuJiM0MztcdFx0U1lTQ1RMPVwmIzM0Oy9wcm9jL3N5cy9kZWJ1Zy90ZXN0X3N5c2N0bFwmIzM0O1xuJiM0MztcdGZpXG4mIzQzO1x0aWYgWyAteiBcJiMzNDske1BST0RfU1lTQ1RMfVwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0XHRQUk9EX1NZU0NUTD1cJiMzNDsvcHJvYy9zeXNcJiMzNDtcbiYjNDM7XHRmaVxuJiM0MztcdGlmIFsgLXogXCYjMzQ7JHtXUklURVNfU1RSSUNUfVwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0XHRXUklURVNfU1RSSUNUPVwmIzM0OyR7UFJPRF9TWVNDVEx9L2tlcm5lbC9zeXNjdGxfd3JpdGVzX3N0cmljdFwmIzM0O1xuJiM0MztcdGZpXG4mIzQzO1x0aWYgWyAteiBcJiMzNDske0JJVE1BUF9JVEVSQVRJT05TfVwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0XHRCSVRNQVBfSVRFUkFUSU9OUz01MFxuJiM0MztcdGZpXG4mIzQzO1x0IyBTZXQgc2VlZCBmb3IgYml0bWFwIHJhbmRvbSB0ZXN0c1xuJiM0MztcdGlmIFsgLXogXCYjMzQ7JHtCSVRNQVBfU0VFRH1cJiMzNDsgXTsgdGhlblxuJiM0MztcdFx0QklUTUFQX1NFRUQ9JFJBTkRPTVxuIFx0Zmlcbi1cdGRhdGVcbi1cdGVjaG8gXCYjMzQ7UnVubmluZyB0ZXN0OiAkMiAtIHJ1biAjJDFcJiMzNDtcbiB9XG4gXG4tZnVuY3Rpb24gd2F0Y2hfY2FzZSgpXG4mIzQzO2NoZWNrX3Byb2R1Y3Rpb25fc3lzY3RsX3dyaXRlc19zdHJpY3QoKVxuIHtcbi1cdGk9MFxuLVx0d2hpbGUgWyAxIF07IGRvXG4tXG4tXHRcdGlmIFsgJCMgLWVxIDEgXTsgdGhlblxuLVx0XHRcdHRlc3RfbnVtICQxXG4tXHRcdFx0d2F0Y2hfbG9nICRpICR7VEVTVF9OQU1FfV90ZXN0XyQxXG4tXHRcdFx0JHtURVNUX05BTUV9X3Rlc3RfJDFcbi1cdFx0ZWxzZVxuLVx0XHRcdHdhdGNoX2xvZyAkaSBhbGxcbi1cdFx0XHRydW5fYWxsX3Rlc3RzXG4mIzQzO1x0aWYgWyAhIC1lIFwmIzM0OyR7V1JJVEVTX1NUUklDVH1cJiMzNDsgXTsgdGhlblxuJiM0MztcdFx0a3RhcF9wcmludF9tc2cgXCYjMzQ7JHtXUklURVNfU1RSSUNUfSBtaXNzaW5nLCBza2lwcGluZyBzdHJpY3Qgd3JpdGUgY2hlY2sgKG9sZCBrZXJuZWw/KVwmIzM0O1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdG9sZF9zdHJpY3Q9JChjYXQgXCYjMzQ7JHtXUklURVNfU1RSSUNUfVwmIzM0OylcbiYjNDM7XHRcdGlmIFsgXCYjMzQ7JG9sZF9zdHJpY3RcJiMzNDsgIT0gXCYjMzQ7MVwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0XHRcdGt0YXBfcHJpbnRfbXNnIFwmIzM0O2ZvcmNpbmcgJHtXUklURVNfU1RSSUNUfSB0byAxICh3YXMgJHtvbGRfc3RyaWN0fSlcJiMzNDtcbiYjNDM7XHRcdFx0ZWNobyBcJiMzNDsxXCYjMzQ7IFx1MDAzZSBcJiMzNDske1dSSVRFU19TVFJJQ1R9XCYjMzQ7XG4gXHRcdGZpXG4tXHRcdGxldCBpPSRpJiM0MzsxXG4tXHRkb25lXG4mIzQzO1x0ZmlcbiYjNDM7XG4mIzQzO1x0aWYgWyAteiBcJiMzNDske1BBR0VfU0laRX1cJiMzNDsgXTsgdGhlblxuJiM0MztcdFx0UEFHRV9TSVpFPSQoZ2V0Y29uZiBQQUdFU0laRSlcbiYjNDM7XHRmaVxuJiM0MztcdGlmIFsgLXogXCYjMzQ7JHtNQVhfRElHSVRTfVwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0XHRNQVhfRElHSVRTPSQoKFBBR0VfU0laRSAvIDgpKVxuJiM0MztcdGZpXG4mIzQzO1x0aWYgWyAteiBcJiMzNDske0lOVF9NQVh9XCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRcdElOVF9NQVg9JChnZXRjb25mIElOVF9NQVgpXG4mIzQzO1x0ZmlcbiYjNDM7XHRpZiBbIC16IFwmIzM0OyR7VUlOVF9NQVh9XCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRcdFVJTlRfTUFYPSQoZ2V0Y29uZiBVSU5UX01BWClcbiYjNDM7XHRmaVxuIH1cbiBcbi1mdW5jdGlvbiB0ZXN0X2Nhc2UoKVxuJiM0Mztsb2FkX3JlcV9tb2QoKVxuIHtcbi1cdFRFU1RfSUQ9JDFcbi1cdE5VTV9URVNUUz0kMlxuLVx0VEFSR0VUPSQzXG4tXG4tXHRpZiBza2lwX3Rlc3QgJFRFU1RfSUQgJFRBUkdFVDsgdGhlblxuLVx0XHRyZXR1cm5cbiYjNDM7XHRpZiBbICEgLWQgXCYjMzQ7JHtTWVNDVEx9XCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRcdGlmICEgbW9kcHJvYmUgLXEgLW4gXCYjMzQ7JHtURVNUX0RSSVZFUn1cJiMzNDs7IHRoZW5cbiYjNDM7XHRcdFx0a3RhcF9za2lwX2FsbCBcJiMzNDttb2R1bGUgJHtURVNUX0RSSVZFUn0gbm90IGZvdW5kLiBcXFxuJiM0MztcdFx0XHRcdFlvdSBtdXN0IHNldCBDT05GSUdfVEVTVF9TWVNDVEw9bSBpbiB5b3VyIGtlcm5lbFwmIzM0O1xuJiM0MztcdFx0XHRleGl0IFwmIzM0OyRLU0ZUX1NLSVBcJiMzNDtcbiYjNDM7XHRcdGZpXG4mIzQzO1x0XHRpZiAhIG1vZHByb2JlIFwmIzM0OyR7VEVTVF9EUklWRVJ9XCYjMzQ7OyB0aGVuXG4mIzQzO1x0XHRcdGt0YXBfZXhpdF9mYWlsX21zZyBcJiMzNDttb2Rwcm9iZSAke1RFU1RfRFJJVkVSfSBmYWlsZWRcJiMzNDtcbiYjNDM7XHRcdGZpXG4gXHRmaVxuLVxuLVx0aT0wXG4tXHR3aGlsZSBbICRpIC1sdCAkTlVNX1RFU1RTIF07IGRvXG4tXHRcdHRlc3RfbnVtICRURVNUX0lEXG4tXHRcdHdhdGNoX2xvZyAkaSAke1RFU1RfTkFNRX1fdGVzdF8ke1RFU1RfSUR9IG5vY2xlYXJcbi1cdFx0UlVOX1RFU1Q9JHtURVNUX05BTUV9X3Rlc3RfJHtURVNUX0lEfVxuLVx0XHQkUlVOX1RFU1Rcbi1cdFx0bGV0IGk9JGkmIzQzOzFcbi1cdGRvbmVcbiB9XG4gXG4tZnVuY3Rpb24gcGFyc2VfYXJncygpXG4mIzQzOyMgQ2xlYW51cCBvbmx5ISBEbyBub3QgY2FsbCBleGl0IGhlcmUgb3IgaXQgd2lsbCBzaWxlbnRseSBvdmVycmlkZSBLVEFQIGV4aXQgc3RhdHVzXG4mIzQzO3Jlc3RvcmVfc3lzY3RsX3dyaXRlc19zdHJpY3QoKVxuIHtcbi1cdGlmIFsgJCMgLWVxIDAgXTsgdGhlblxuLVx0XHRydW5fYWxsX3Rlc3RzXG4tXHRlbHNlXG4tXHRcdGlmIFtbIFwmIzM0OyQxXCYjMzQ7ID0gXCYjMzQ7YWxsXCYjMzQ7IF1dOyB0aGVuXG4tXHRcdFx0cnVuX2FsbF90ZXN0c1xuLVx0XHRlbGlmIFtbIFwmIzM0OyQxXCYjMzQ7ID0gXCYjMzQ7LXdcJiMzNDsgXV07IHRoZW5cbi1cdFx0XHRzaGlmdFxuLVx0XHRcdHdhdGNoX2Nhc2UgJEBcbi1cdFx0ZWxpZiBbWyBcJiMzNDskMVwmIzM0OyA9IFwmIzM0Oy10XCYjMzQ7IF1dOyB0aGVuXG4tXHRcdFx0c2hpZnRcbi1cdFx0XHR0ZXN0X251bSAkMVxuLVx0XHRcdHRlc3RfY2FzZSAkMSAkKGdldF90ZXN0X2NvdW50ICQxKSAkKGdldF90ZXN0X3RhcmdldCAkMSlcbi1cdFx0ZWxpZiBbWyBcJiMzNDskMVwmIzM0OyA9IFwmIzM0Oy1jXCYjMzQ7IF1dOyB0aGVuXG4tXHRcdFx0c2hpZnRcbi1cdFx0XHR0ZXN0X251bSAkMVxuLVx0XHRcdHRlc3RfbnVtICQyXG4tXHRcdFx0dGVzdF9jYXNlICQxICQyICQoZ2V0X3Rlc3RfdGFyZ2V0ICQxKVxuLVx0XHRlbGlmIFtbIFwmIzM0OyQxXCYjMzQ7ID0gXCYjMzQ7LXNcJiMzNDsgXV07IHRoZW5cbi1cdFx0XHRzaGlmdFxuLVx0XHRcdHRlc3RfY2FzZSAkMSAxICQoZ2V0X3Rlc3RfdGFyZ2V0ICQxKVxuLVx0XHRlbGlmIFtbIFwmIzM0OyQxXCYjMzQ7ID0gXCYjMzQ7LWxcJiMzNDsgXV07IHRoZW5cbi1cdFx0XHRsaXN0X3Rlc3RzXG4tXHRcdGVsaWYgW1sgXCYjMzQ7JDFcJiMzNDsgPSBcJiMzNDstaFwmIzM0OyB8fCBcJiMzNDskMVwmIzM0OyA9IFwmIzM0Oy0taGVscFwmIzM0OyBdXTsgdGhlblxuLVx0XHRcdHVzYWdlXG4tXHRcdGVsc2Vcbi1cdFx0XHR1c2FnZVxuLVx0XHRmaVxuJiM0MztcdGlmIFsgLW4gXCYjMzQ7JHtvbGRfc3RyaWN0fVwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0XHRlY2hvIFwmIzM0OyR7b2xkX3N0cmljdH1cJiMzNDsgXHUwMDNlIFwmIzM0OyR7V1JJVEVTX1NUUklDVH1cJiMzNDtcbiBcdGZpXG4gfVxuIFxuLXRlc3RfcmVxc1xuIGFsbG93X3VzZXJfZGVmYXVsdHNcbiYjNDM7XG4mIzQzOyMgRWFjaCBiaXRtYXAgaXRlcmF0aW9uIGlzIG9uZSBmdW5jdGlvbiB0byBnZW5lcmF0ZSBvbmUgS1RBUCByZXBvcnQgcGVyIGl0ZXJhdGlvblxuJiM0Mztmb3IgaSBpbiAkKHNlcSAxIFwmIzM0OyRCSVRNQVBfSVRFUkFUSU9OU1wmIzM0Oyk7IGRvXG4mIzQzO1x0ZXZhbCBcJiMzNDt0ZXN0X2JpdG1hcF9yYW5nZV9jaGVja18kKHByaW50ZiAmIzM5OyUwMmQmIzM5OyBcJiMzNDskaVwmIzM0OykoKSBcXFxuJiM0MztcdFx0eyBcXFxuJiM0MztcdFx0XHRiaXRtYXBfcmFuZ2VfY2hlY2tfb25jZSAkaTsgXFxcbiYjNDM7XHRcdH1cJiMzNDtcbiYjNDM7ZG9uZVxuJiM0MztcbiYjNDM7IyBEaXNjb3ZlciB0ZXN0XyogZnVuY3Rpb25zIGFib3ZlIHRoaXMgbGluZVxuJiM0MztBTExfVEVTVFM9JChkZWNsYXJlIC1GIHwgYXdrICYjMzk7e3ByaW50ICQzfSYjMzk7IHwgZ3JlcCAmIzM5O150ZXN0XyYjMzk7IHwgc29ydClcbiYjNDM7XG4mIzQzO1JFUEVBVD0xXG4mIzQzO3doaWxlIFsgJCMgLWd0IDAgXTsgZG9cbiYjNDM7XHRjYXNlIFwmIzM0OyQxXCYjMzQ7IGluXG4mIzQzO1x0LXIgKVxuJiM0MztcdFx0c2hpZnRcbiYjNDM7XHRcdFJFUEVBVD0kMVxuJiM0MztcdFx0OztcbiYjNDM7XHQtbCApXG4mIzQzO1x0XHRsaXN0X3Rlc3RzXG4mIzQzO1x0XHRleGl0IDBcbiYjNDM7XHRcdDs7XG4mIzQzO1x0LWggfCAtLWhlbHAgKVxuJiM0MztcdFx0dXNhZ2VcbiYjNDM7XHRcdGV4aXQgMFxuJiM0MztcdFx0OztcbiYjNDM7XHQtdCApXG4mIzQzO1x0XHRzaGlmdFxuJiM0MztcdFx0U1lTQ1RMX1RFU1RTPVwmIzM0OyQxXCYjMzQ7XG4mIzQzO1x0XHQ7O1xuJiM0MztcdC1zIClcbiYjNDM7XHRcdHNoaWZ0XG4mIzQzO1x0XHRCSVRNQVBfU0VFRD1cJiMzNDskMVwmIzM0O1xuJiM0MztcdFx0OztcbiYjNDM7XHQqIClcbiYjNDM7XHRcdHVzYWdlXG4mIzQzO1x0XHRleGl0IDFcbiYjNDM7XHRcdDs7XG4mIzQzO1x0ZXNhY1xuJiM0MztcdHNoaWZ0XG4mIzQzO2RvbmVcbiYjNDM7XG4mIzQzO1NFTEVDVEVEPSR7U1lTQ1RMX1RFU1RTLSRBTExfVEVTVFN9XG4mIzQzO1xuJiM0MztrdGFwX3ByaW50X2hlYWRlclxuJiM0Mzt0cmFwIHJlc3RvcmVfc3lzY3RsX3dyaXRlc19zdHJpY3QgRVhJVFxuJiM0MztjaGVja19hcmdzIFwmIzM0OyRSRVBFQVRcJiMzNDsgXCYjMzQ7JFNFTEVDVEVEXCYjMzQ7IFwmIzM0OyRCSVRNQVBfU0VFRFwmIzM0O1xuJiM0MztjaGVja19yZXFzXG4gY2hlY2tfcHJvZHVjdGlvbl9zeXNjdGxfd3JpdGVzX3N0cmljdFxuIGxvYWRfcmVxX21vZFxuIFxuLXRyYXAgXCYjMzQ7dGVzdF9maW5pc2hcJiMzNDsgRVhJVFxuJiM0MztrdGFwX3ByaW50X21zZyBcJiMzNDtiaXRtYXAgYmFzZSBzZWVkOiAkQklUTUFQX1NFRUQgKHJlcGxheSB3aXRoIC1zICRCSVRNQVBfU0VFRClcJiMzNDtcbiBcbi1wYXJzZV9hcmdzICRAXG4mIzQzO2t0YXBfc2V0X3BsYW4gXCYjMzQ7JCgoICQod2MgLXcgXHUwMDNjXHUwMDNjXHUwMDNjIFwmIzM0OyRTRUxFQ1RFRFwmIzM0OykgKiBSRVBFQVQgKSlcJiMzNDtcbiYjNDM7XG4mIzQzO2ZvciAoKGkgPSAwOyBpIFx1MDAzYyBSRVBFQVQ7IGkmIzQzOyYjNDM7KSk7IGRvXG4mIzQzO1x0Zm9yIHQgaW4gJFNFTEVDVEVEOyBkb1xuJiM0MztcdFx0cnVuX29uZSBcJiMzNDskdFwmIzM0O1xuJiM0MztcdGRvbmVcbiYjNDM7ZG9uZVxuIFxuLWV4aXQgMFxuJiM0MztrdGFwX2ZpbmlzaGVkXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6Mzk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB0aGUgdXNlci1zcGFjZSBzZWxmdGVzdCBzY3JpcHQgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY3RsL3N5c2N0bC5zaCB0byBtb2Rlcm5pemUgaXQgYW5kIHVzZSBrdGFwX2hlbHBlcnMuIEl0IGRvZXMgbm90IHRvdWNoIGFueSBrZXJuZWwgc291cmNlIGNvZGUsIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCksIG9yIGtlcm5lbCBtb2R1bGVzLCBzbyBpdCBpcyBub3Qgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyNzE2NjkyY2U0ZmJlMDEzYjg4ZTNmNDNiMDBmNzM1Mzg5MjUxMzU4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgMTQgMTM6Mzk6MDUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjdGwvc3lzY3RsLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY3RsL3N5c2N0bC5zaAppbmRleCA5NWU5MzcwOTA4OGEzLi5jZWI1Y2ZhMGNmZDRkIDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjdGwvc3lzY3RsLnNoCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2N0bC9zeXNjdGwuc2gKQEAgLTIsMzYyICYjNDM7MiwyMzkgQEAKICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgT1IgY29weWxlZnQtbmV4dC0wLjMuMQogIyBDb3B5cmlnaHQgKEMpIDIwMTcgTHVpcyBSLiBSb2RyaWd1ZXogJmx0O21jZ3JvZkBrZXJuZWwub3JnJmd0OwogCi0jIFRoaXMgcGVyZm9ybXMgYSBzZXJpZXMgdGVzdHMgYWdhaW5zdCB0aGUgcHJvYyBzeXNjdGwgaW50ZXJmYWNlLgotCiYjNDM7IyBSZWR1Y2Ugbm9pc2UgYnkgZGlzYWJsaW5nICYjMzQ7dW5yZWFjaGFibGUmIzM0OyBjaGVjay4KICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjMxNwotIyBLc2VsZnRlc3QgZnJhbWV3b3JrIHJlcXVpcmVtZW50IC0gU0tJUCBjb2RlIGlzIDQuCi1rc2Z0X3NraXA9NAotCi1URVNUX05BTUU9JiMzNDtzeXNjdGwmIzM0OwotVEVTVF9EUklWRVI9JiMzNDt0ZXN0XyR7VEVTVF9OQU1FfSYjMzQ7Ci1URVNUX0RJUj0kKGRpcm5hbWUgJDApCi1URVNUX0ZJTEU9JChta3RlbXApCi0KLSMgaW5pdGlhbGl6ZSBmb3IgaW5kaXZpZHVhbCB0ZXN0cwotcmM9MAotCi0jIFRoaXMgcmVwcmVzZW50cwotIwotIyBURVNUX0lEOlRFU1RfQ09VTlQ6RU5BQkxFRDpUQVJHRVQ6U0tJUF9OT19UQVJHRVQKLSMKLSMgVEVTVF9JRDogaXMgdGhlIHRlc3QgaWQgbnVtYmVyCi0jIFRFU1RfQ09VTlQ6IG51bWJlciBvZiB0aW1lcyB3ZSBzaG91bGQgcnVuIHRoZSB0ZXN0Ci0jIEVOQUJMRUQ6IDEgaWYgZW5hYmxlZCwgMCBvdGhlcndpc2UKLSMgVEFSR0VUOiB0ZXN0IHRhcmdldCBmaWxlIHJlcXVpcmVkIG9uIHRoZSB0ZXN0X3N5c2N0bCBtb2R1bGUKLSMgU0tJUF9OT19UQVJHRVQ6IDEgc2tpcCBpZiBUQVJHRVQgbm90IHRoZXJlCi0jICAgICAgICAgICAgICAgICAwIHJ1biBldmVuIHRob3VnaCBUQVJHRVQgbm90IHRoZXJlCi0jCi0jIE9uY2UgdGhlc2UgYXJlIGVuYWJsZWQgcGxlYXNlIGxlYXZlIHRoZW0gYXMtaXMuIFdyaXRlIHlvdXIgb3duIHRlc3QsCi0jIHdlIGhhdmUgdG9ucyBvZiBzcGFjZS4KLUFMTF9URVNUUz0mIzM0OzAwMDE6MToxOmludF8wMDAxOjEmIzM0OwotQUxMX1RFU1RTPSYjMzQ7JEFMTF9URVNUUyAwMDAyOjE6MTpzdHJpbmdfMDAwMToxJiMzNDsKLUFMTF9URVNUUz0mIzM0OyRBTExfVEVTVFMgMDAwMzoxOjE6aW50XzAwMDI6MSYjMzQ7Ci1BTExfVEVTVFM9JiMzNDskQUxMX1RFU1RTIDAwMDQ6MToxOnVpbnRfMDAwMToxJiMzNDsKLUFMTF9URVNUUz0mIzM0OyRBTExfVEVTVFMgMDAwNTozOjE6aW50XzAwMDM6MSYjMzQ7Ci1BTExfVEVTVFM9JiMzNDskQUxMX1RFU1RTIDAwMDY6NTA6MTpiaXRtYXBfMDAwMToxJiMzNDsKLUFMTF9URVNUUz0mIzM0OyRBTExfVEVTVFMgMDAwNzoxOjE6Ym9vdF9pbnQ6MSYjMzQ7Ci1BTExfVEVTVFM9JiMzNDskQUxMX1RFU1RTIDAwMDg6MToxOm1hdGNoX2ludDoxJiMzNDsKLUFMTF9URVNUUz0mIzM0OyRBTExfVEVTVFMgMDAwOToxOjE6dW5yZWdpc3Rlcl9lcnJvcjowJiMzNDsKLUFMTF9URVNUUz0mIzM0OyRBTExfVEVTVFMgMDAxMDoxOjE6bW50L21udF9lcnJvcjowJiMzNDsKLUFMTF9URVNUUz0mIzM0OyRBTExfVEVTVFMgMDAxMToxOjE6ZW1wdHlfYWRkOjAmIzM0OwotQUxMX1RFU1RTPSYjMzQ7JEFMTF9URVNUUyAwMDEyOjE6MTp1OF92YWxpZDowJiMzNDsKLUFMTF9URVNUUz0mIzM0OyRBTExfVEVTVFMgMDAxMzoxOjE6aW50XzAwMDM6MSYjMzQ7Ci0KLWZ1bmN0aW9uIGFsbG93X3VzZXJfZGVmYXVsdHMoKQomIzQzOwomIzQzOyMgVGhpcyBwZXJmb3JtcyBhIHNlcmllcyBvZiB0ZXN0cyBhZ2FpbnN0IHRoZSBwcm9jIHN5c2N0bCBpbnRlcmZhY2UuCiYjNDM7CiYjNDM7RElSPSYjMzQ7JChkaXJuYW1lICYjMzQ7JChyZWFkbGluayAtZiAmIzM0OyQwJiMzNDspJiMzNDspJiMzNDsKJiM0Mztzb3VyY2UgJiMzNDske0RJUn0mIzM0Oy8uLi9rc2VsZnRlc3Qva3RhcF9oZWxwZXJzLnNoCiYjNDM7CiYjNDM7VEVTVF9EUklWRVI9JiMzNDt0ZXN0X3N5c2N0bCYjMzQ7CiYjNDM7CiYjNDM7YXNzZXJ0X3dyaXRlX3JlamVjdGVkKCkgIyAmbHQ7ZmlsZSZndDsgJmx0O3ZhbHVlJmd0OwogewotCWlmIFsgLXogJERJUiBdOyB0aGVuCi0JCURJUj0mIzM0Oy9zeXMvbW9kdWxlL3Rlc3Rfc3lzY3RsLyYjMzQ7Ci0JZmkKLQlpZiBbIC16ICRERUZBVUxUX05VTV9URVNUUyBdOyB0aGVuCi0JCURFRkFVTFRfTlVNX1RFU1RTPTUwCi0JZmkKLQlpZiBbIC16ICRTWVNDVEwgXTsgdGhlbgotCQlTWVNDVEw9JiMzNDsvcHJvYy9zeXMvZGVidWcvdGVzdF9zeXNjdGwmIzM0OwotCWZpCi0JaWYgWyAteiAkUFJPRF9TWVNDVEwgXTsgdGhlbgotCQlQUk9EX1NZU0NUTD0mIzM0Oy9wcm9jL3N5cyYjMzQ7Ci0JZmkKLQlpZiBbIC16ICRXUklURVNfU1RSSUNUIF07IHRoZW4KLQkJV1JJVEVTX1NUUklDVD0mIzM0OyR7UFJPRF9TWVNDVEx9L2tlcm5lbC9zeXNjdGxfd3JpdGVzX3N0cmljdCYjMzQ7CiYjNDM7CWxvY2FsIGZpbGU9JDEgdmFsPSQyCiYjNDM7CWlmIHByaW50ZiAmIzM5OyVzJiMzOTsgJiMzNDskdmFsJiMzNDsgJmd0OyAmIzM0OyRmaWxlJiMzNDsgMiZndDsvZGV2L251bGw7IHRoZW4KJiM0MzsJCWt0YXBfcHJpbnRfbXNnICYjMzQ7JGZpbGU6IHdyaXRlIG9mICYjMzk7JHZhbCYjMzk7IHN1Y2NlZWRlZCwgZXhwZWN0ZWQgcmVqZWN0aW9uJiMzNDsKJiM0MzsJCXJldHVybiAxCiAJZmkKJiM0MzsJcmV0dXJuIDAKIH0KIAotZnVuY3Rpb24gY2hlY2tfcHJvZHVjdGlvbl9zeXNjdGxfd3JpdGVzX3N0cmljdCgpCiYjNDM7YXNzZXJ0X2NvbnRlbnQoKSAjICZsdDtmaWxlJmd0OyAmbHQ7d2FudC1maWxlJmd0OwogewotCWVjaG8gLW4gJiMzNDtDaGVja2luZyBwcm9kdWN0aW9uIHdyaXRlIHN0cmljdCBzZXR0aW5nIC4uLiAmIzM0OwotCWlmIFsgISAtZSAke1dSSVRFU19TVFJJQ1R9IF07IHRoZW4KLQkJZWNobyAmIzM0O0ZBSUwsIGJ1dCBza2lwIGluIGNhc2Ugb2Ygb2xkIGtlcm5lbCYjMzQ7ICZndDsmYW1wOzIKLQllbHNlCi0JCW9sZF9zdHJpY3Q9JChjYXQgJHtXUklURVNfU1RSSUNUfSkKLQkJaWYgWyAmIzM0OyRvbGRfc3RyaWN0JiMzNDsgPSAmIzM0OzEmIzM0OyBdOyB0aGVuCi0JCQllY2hvICYjMzQ7T0smIzM0OwotCQllbHNlCi0JCQllY2hvICYjMzQ7RkFJTCwgc3RyaWN0IHZhbHVlIGlzIDAgYnV0IGZvcmNlIHRvIDEgdG8gY29udGludWUmIzM0OyAmZ3Q7JmFtcDsyCi0JCQllY2hvICYjMzQ7MSYjMzQ7ICZndDsgJHtXUklURVNfU1RSSUNUfQotCQlmaQotCWZpCi0KLQlpZiBbIC16ICRQQUdFX1NJWkUgXTsgdGhlbgotCQlQQUdFX1NJWkU9JChnZXRjb25mIFBBR0VTSVpFKQotCWZpCi0JaWYgWyAteiAkTUFYX0RJR0lUUyBdOyB0aGVuCi0JCU1BWF9ESUdJVFM9JCgoJFBBR0VfU0laRS84KSkKLQlmaQotCWlmIFsgLXogJElOVF9NQVggXTsgdGhlbgotCQlJTlRfTUFYPSQoZ2V0Y29uZiBJTlRfTUFYKQotCWZpCi0JaWYgWyAteiAkVUlOVF9NQVggXTsgdGhlbgotCQlVSU5UX01BWD0kKGdldGNvbmYgVUlOVF9NQVgpCiYjNDM7CWxvY2FsIGZpbGU9JDEgd2FudF9maWxlPSQyIGdvdAomIzQzOwlnb3Q9JChjYXQgJiMzNDskZmlsZSYjMzQ7KQomIzQzOwlpZiBbICYjMzQ7JGdvdCYjMzQ7ID09ICYjMzQ7JHdhbnRfZmlsZSYjMzQ7IF07IHRoZW4KJiM0MzsJCXJldHVybiAwCiAJZmkKJiM0MzsJa3RhcF9wcmludF9tc2cgJiMzNDskZmlsZTogZ290ICYjMzk7JGdvdCYjMzk7LCB3YW50ICYjMzk7JHdhbnRfZmlsZSYjMzk7JiMzNDsKJiM0MzsJcmV0dXJuIDEKIH0KIAotdGVzdF9yZXFzKCkKJiM0MzsjIGNvbXBhcmUgaWdub3Jpbmcgd2hpdGVzcGFjZXMKJiM0Mzthc3NlcnRfY29udGVudF9sb29zZSgpICMgJmx0O2ZpbGUmZ3Q7ICZsdDt3YW50LWZpbGUmZ3Q7CiB7Ci0JdWlkPSQoaWQgLXUpCi0JaWYgWyAkdWlkIC1uZSAwIF07IHRoZW4KLQkJZWNobyAkbXNnIG11c3QgYmUgcnVuIGFzIHJvb3QgJmd0OyZhbXA7MgotCQlleGl0ICRrc2Z0X3NraXAKLQlmaQotCi0JaWYgISB3aGljaCBwZXJsIDImZ3Q7IC9kZXYvbnVsbCAmZ3Q7IC9kZXYvbnVsbDsgdGhlbgotCQllY2hvICYjMzQ7JDA6IFlvdSBuZWVkIHBlcmwgaW5zdGFsbGVkJiMzNDsKLQkJZXhpdCAka3NmdF9za2lwCi0JZmkKLQlpZiAhIHdoaWNoIGdldGNvbmYgMiZndDsgL2Rldi9udWxsICZndDsgL2Rldi9udWxsOyB0aGVuCi0JCWVjaG8gJiMzNDskMDogWW91IG5lZWQgZ2V0Y29uZiBpbnN0YWxsZWQmIzM0OwotCQlleGl0ICRrc2Z0X3NraXAKLQlmaQotCWlmICEgd2hpY2ggZGlmZiAyJmd0OyAvZGV2L251bGwgJmd0OyAvZGV2L251bGw7IHRoZW4KLQkJZWNobyAmIzM0OyQwOiBZb3UgbmVlZCBkaWZmIGluc3RhbGxlZCYjMzQ7Ci0JCWV4aXQgJGtzZnRfc2tpcAomIzQzOwlsb2NhbCBmaWxlPSQxIHdhbnRfZmlsZT0kMgomIzQzOwlpZiBlY2hvICYjMzQ7JHdhbnRfZmlsZSYjMzQ7IHwgZGlmZiAtcSAtdyAtdSAtICYjMzQ7JGZpbGUmIzM0OyAmZ3Q7IC9kZXYvbnVsbDsgdGhlbgomIzQzOwkJcmV0dXJuIDAKIAlmaQomIzQzOwlrdGFwX3ByaW50X21zZyAmIzM0OyRmaWxlOiBjb250ZW50IGRvZXMgbm90IG1hdGNoICYjMzk7JHdhbnRfZmlsZSYjMzk7ICh3aGl0ZXNwYWNlLWluc2Vuc2l0aXZlKSYjMzQ7CiYjNDM7CXJldHVybiAxCiB9CiAKLWZ1bmN0aW9uIGxvYWRfcmVxX21vZCgpCiYjNDM7IyBGb3IgY2hlY2tzIHdoZXJlIHdyaXRlcyBtdXN0IE5PVCB0YWtlIGVmZmVjdAomIzQzO2Fzc2VydF9jb250ZW50X3JlamVjdGVkKCkgIyAmbHQ7ZmlsZSZndDsgJmx0O2JhZCZndDsKIHsKLQlpZiBbICEgLWQgJFNZU0NUTCBdOyB0aGVuCi0JCWlmICEgbW9kcHJvYmUgLXEgLW4gJFRFU1RfRFJJVkVSOyB0aGVuCi0JCQllY2hvICYjMzQ7JDA6IG1vZHVsZSAkVEVTVF9EUklWRVIgbm90IGZvdW5kIFtTS0lQXSYjMzQ7Ci0JCQllY2hvICYjMzQ7WW91IG11c3Qgc2V0IENPTkZJR19URVNUX1NZU0NUTD1tIGluIHlvdXIga2VybmVsJiMzNDsgJmd0OyZhbXA7MgotCQkJZXhpdCAka3NmdF9za2lwCi0JCWZpCi0JCW1vZHByb2JlICRURVNUX0RSSVZFUgotCQlpZiBbICQ/IC1uZSAwIF07IHRoZW4KLQkJCWVjaG8gJiMzNDskMDogbW9kcHJvYmUgJFRFU1RfRFJJVkVSIGZhaWxlZC4mIzM0OwotCQkJZXhpdAotCQlmaQomIzQzOwlsb2NhbCBmaWxlPSQxIGJhZD0kMgomIzQzOwlpZiBlY2hvICYjMzQ7JGJhZCYjMzQ7IHwgZGlmZiAtcSAtdyAtdSAtICYjMzQ7JGZpbGUmIzM0OyAmZ3Q7IC9kZXYvbnVsbDsgdGhlbgomIzQzOwkJa3RhcF9wcmludF9tc2cgJiMzNDskZmlsZTogdW5leHBlY3RlZGx5IG5vdyBob2xkcyByZWplY3RlZCB2YWx1ZSAmIzM5OyRiYWQmIzM5OyYjMzQ7CiYjNDM7CQlyZXR1cm4gMQogCWZpCiYjNDM7CXJldHVybiAwCiB9CiAKLXJlc2V0X3ZhbHMoKQomIzQzOyMgcHJvYyBmaWxlcyBnZXQgcmVhZCBhIHBhZ2UgYXQgYSB0aW1lLCB3aGljaCBjYW4gY29uZnVzZSBkaWZmIHJlc3VsdGluZyBpbgomIzQzOyMgaW5jb3JyZWN0IHJlc3VsdHMuIFVzZSBhIHRlbXAgZmlsZSB0byBkaWZmLgomIzQzO2Fzc2VydF9kaWZmX3Byb2NfZmlsZSgpICMgJmx0O2ZpbGUmZ3Q7ICZsdDt3YW50LWZpbGUmZ3Q7CiB7Ci0JVkFMPSYjMzQ7JiMzNDsKLQlUUklHR0VSPSQoYmFzZW5hbWUgJHtUQVJHRVR9KQotCWNhc2UgJiMzNDskVFJJR0dFUiYjMzQ7IGluCi0JCWludF8wMDAxKQotCQkJVkFMPSYjMzQ7NjAmIzM0OwotCQkJOzsKLQkJaW50XzAwMDIpCi0JCQlWQUw9JiMzNDsxJiMzNDsKLQkJCTs7Ci0JCXVpbnRfMDAwMSkKLQkJCVZBTD0mIzM0OzMxNCYjMzQ7Ci0JCQk7OwotCQlzdHJpbmdfMDAwMSkKLQkJCVZBTD0mIzM0Oyhub25lKSYjMzQ7Ci0JCQk7OwotCQliaXRtYXBfMDAwMSkKLQkJCVZBTD0mIzM0OyYjMzQ7Ci0JCQk7OwotCQkqKQotCQkJOzsKLQllc2FjCi0JZWNobyAtbiAkVkFMICZndDsgJFRBUkdFVAotfQomIzQzOwlsb2NhbCBmaWxlPSQxIHdhbnRfZmlsZT0kMiB0bXAKJiM0MzsJdG1wPSQobWt0ZW1wKQomIzQzOwljYXQgJiMzNDskZmlsZSYjMzQ7ICZndDsgJiMzNDskdG1wJiMzNDsKIAotc2V0X29yaWcoKQotewotCWlmIFsgISAteiAkVEFSR0VUIF0gJmFtcDsmYW1wOyBbICEgLXogJE9SSUcgXTsgdGhlbgotCQlpZiBbIC1mICR7VEFSR0VUfSBdOyB0aGVuCi0JCQllY2hvICYjMzQ7JHtPUklHfSYjMzQ7ICZndDsgJiMzNDske1RBUkdFVH0mIzM0OwotCQlmaQomIzQzOwlpZiBkaWZmIC13IC1xICYjMzQ7JHRtcCYjMzQ7ICYjMzQ7JHdhbnRfZmlsZSYjMzQ7ICZndDsgL2Rldi9udWxsOyB0aGVuCiYjNDM7CQlybSAtZiAmIzM0OyR0bXAmIzM0OwomIzQzOwkJcmV0dXJuIDAKIAlmaQomIzQzOwlrdGFwX3ByaW50X21zZyAmIzM0OyRmaWxlOiBjb250ZW50IGRvZXMgbm90IG1hdGNoIGV4cGVjdGVkIGZpbGUgJHdhbnRfZmlsZSYjMzQ7CiYjNDM7CXJtIC1mICYjMzQ7JHRtcCYjMzQ7CiYjNDM7CXJldHVybiAxCiB9CiAKLXNldF90ZXN0KCkKJiM0MzsjIFZlcmlmeSB0aGF0IGFuIGVycm9uZW91cyB1cGRhdGUgZmFpbHMgYW5kIGRvZXMgbm90IGNoYW5nZSB0aGUgYmFzZWxpbmUuCiYjNDM7YXNzZXJ0X25vX3BhcnRpYWxfdXBkYXRlKCkgIyAmbHQ7ZmlsZSZndDsgJmx0O2Jhc2VsaW5lJmd0OyAmbHQ7YmFkLXZhbHVlJmd0OwogewotCWVjaG8gJiMzNDske1RFU1RfU1RSfSYjMzQ7ICZndDsgJiMzNDske1RBUkdFVH0mIzM0OwomIzQzOwlsb2NhbCBmaWxlPSQxIGJhc2VsaW5lPSQyIGJhZD0kMwomIzQzOwomIzQzOwlwcmludGYgJiMzOTslcyYjMzk7ICYjMzQ7JGJhc2VsaW5lJiMzNDsgJmd0OyAmIzM0OyRmaWxlJiMzNDsKJiM0MzsJYXNzZXJ0X3dyaXRlX3JlamVjdGVkICYjMzQ7JGZpbGUmIzM0OyAmIzM0OyRiYWQmIzM0OyB8fCByZXR1cm4gMQomIzQzOwlhc3NlcnRfY29udGVudF9sb29zZSAmIzM0OyRmaWxlJiMzNDsgJiMzNDskYmFzZWxpbmUmIzM0OwogfQogCi12ZXJpZnkoKQomIzQzO2Fzc2VydF9ncmVwKCkgIyAmbHQ7ZmlsZSZndDsgJmx0O3BhdHRlcm4mZ3Q7IC0gJmx0O3BhdHRlcm4mZ3Q7IG11c3QgYXBwZWFyIGluICZsdDtmaWxlJmd0OwogewotCWxvY2FsIHNlZW4KLQlzZWVuPSQoY2F0ICYjMzQ7JDEmIzM0OykKLQlpZiBbICYjMzQ7JHtzZWVufSYjMzQ7ICE9ICYjMzQ7JHtURVNUX1NUUn0mIzM0OyBdOyB0aGVuCi0JCXJldHVybiAxCiYjNDM7CWxvY2FsIGZpbGU9JDEgcGF0dGVybj0kMgomIzQzOwlpZiBncmVwIC1xICYjMzQ7JHBhdHRlcm4mIzM0OyAmIzM0OyRmaWxlJiMzNDs7IHRoZW4KJiM0MzsJCXJldHVybiAwCiAJZmkKLQlyZXR1cm4gMAomIzQzOwlrdGFwX3ByaW50X21zZyAmIzM0OyRmaWxlOiBwYXR0ZXJuICYjMzk7JHBhdHRlcm4mIzM5OyBub3QgZm91bmQmIzM0OwomIzQzOwlyZXR1cm4gMQogfQogCi0jIHByb2MgZmlsZXMgZ2V0IHJlYWQgYSBwYWdlIGF0IGEgdGltZSwgd2hpY2ggY2FuIGNvbmZ1c2UgZGlmZiwKLSMgYW5kIGdldCB5b3UgaW5jb3JyZWN0IHJlc3VsdHMgb24gcHJvYyBmaWxlcyB3aXRoIGxvbmcgZGF0YS4gVG8gdXNlCi0jIGRpZmYgYWdhaW5zdCB0aGVtIHlvdSBtdXN0IGZpcnN0IGV4dHJhY3QgdGhlIG91dHB1dCB0byBhIGZpbGUsIGFuZAotIyB0aGVuIGNvbXBhcmUgYWdhaW5zdCB0aGF0IGZpbGUuCi12ZXJpZnlfZGlmZl9wcm9jX2ZpbGUoKQomIzQzO2Fzc2VydF9ncmVwX2Fic2VudCgpICMgJmx0O2ZpbGUmZ3Q7ICZsdDtwYXR0ZXJuJmd0OyAtICZsdDtwYXR0ZXJuJmd0OyBtdXN0IE5PVCBhcHBlYXIKIHsKLQlUTVBfRFVNUF9GSUxFPSQobWt0ZW1wKQotCWNhdCAkMSAmZ3Q7ICRUTVBfRFVNUF9GSUxFCi0KLQlpZiAhIGRpZmYgLXcgLXEgJFRNUF9EVU1QX0ZJTEUgJDI7IHRoZW4KLQkJcmV0dXJuIDEKLQllbHNlCiYjNDM7CWxvY2FsIGZpbGU9JDEgcGF0dGVybj0kMgomIzQzOwlpZiAhIGdyZXAgLXEgJiMzNDskcGF0dGVybiYjMzQ7ICYjMzQ7JGZpbGUmIzM0OzsgdGhlbgogCQlyZXR1cm4gMAogCWZpCiYjNDM7CWt0YXBfcHJpbnRfbXNnICYjMzQ7JGZpbGU6IHBhdHRlcm4gJiMzOTskcGF0dGVybiYjMzk7IHVuZXhwZWN0ZWRseSBmb3VuZCYjMzQ7CiYjNDM7CXJldHVybiAxCiB9CiAKLXZlcmlmeV9kaWZmX3coKQomIzQzO2Fzc2VydF9kbWVzZ19jb3VudCgpICMgJmx0O3BhdHRlcm4mZ3Q7ICZsdDt3YW50LWNvdW50Jmd0OwogewotCWVjaG8gJiMzNDskVEVTVF9TVFImIzM0OyB8IGRpZmYgLXEgLXcgLXUgLSAkMSAmZ3Q7IC9kZXYvbnVsbAotCXJldHVybiAkPwomIzQzOwlsb2NhbCBwYXR0ZXJuPSQxIHdhbnQ9JDIgZ290CiYjNDM7CWdvdD0kKGRtZXNnIHwgZ3JlcCAtYyAmIzM0OyRwYXR0ZXJuJiMzNDspCiYjNDM7CWlmIFsgJiMzNDskZ290JiMzNDsgLWVxICYjMzQ7JHdhbnQmIzM0OyBdOyB0aGVuCiYjNDM7CQlyZXR1cm4gMAomIzQzOwlmaQomIzQzOwlrdGFwX3ByaW50X21zZyAmIzM0O2RtZXNnOiBwYXR0ZXJuICYjMzk7JHBhdHRlcm4mIzM5OyBzZWVuICRnb3QgdGltZXMsIHdhbnQgJHdhbnQmIzM0OwomIzQzOwlyZXR1cm4gMQogfQogCi0jIFZlcmlmeSB0aGF0IGFuIGVycm9uZW91cyAoJDIpIHVwZGF0ZSBmYWlscyBhbmQgZG9lcyBub3QgY2hhbmdlIFRBUkdFVAotdmVyaWZ5X25vX3BhcnRpYWxfdXBkYXRlKCkKJiM0MzsjIHdyaXRlICZsdDtzdHImZ3Q7IHRocm91Z2ggZGQgaW4gJmx0O2JzJmd0Oy1zaXplZCBjaHVua3MKJiM0Mzt3cml0ZV9pbl9jaHVua3MoKSAgIyAmbHQ7ZmlsZSZndDsgJmx0O3N0ciZndDsgJmx0O2JzJmd0OwogewotCVRFU1RfU1RSPSYjMzQ7JDEmIzM0OwotCWVjaG8gLW4gJiMzNDskVEVTVF9TVFImIzM0OyAmZ3Q7ICYjMzQ7JFRBUkdFVCYjMzQ7Ci0KLQlpZiBlY2hvIC1uICYjMzQ7JDImIzM0OyAmZ3Q7ICYjMzQ7JFRBUkdFVCYjMzQ7IDImZ3Q7IC9kZXYvbnVsbDsgdGhlbgotCQlyZXR1cm4gMQotCWZpCi0JdmVyaWZ5X2RpZmZfdyAmIzM0OyR7VEFSR0VUfSYjMzQ7CiYjNDM7CWxvY2FsIGZpbGU9JDEgc3RyPSQyIGJzPSQzCiYjNDM7CXByaW50ZiAmIzM5OyVzJiMzOTsgJiMzNDskc3RyJiMzNDsgfCBkZCBvZj0mIzM0OyRmaWxlJiMzNDsgYnM9JiMzNDskYnMmIzM0OyAyJmd0Oy9kZXYvbnVsbAogfQogCi10ZXN0X3JjKCkKJiM0MzsjIHdyaXRlICZsdDtzdHImZ3Q7IHRocm91Z2ggZGQgaW4gJmx0O2JzJmd0Oy1zaXplZCBjaHVua3MuIHNlZWtpbmcgJmx0O3NlZWsmZ3Q7IGJsb2NrcyBvZiBzaXplCiYjNDM7IyAmbHQ7YnMmZ3Q7IGludG8gdGhlIG91dHB1dC4gc2tpcHBpbmcgJmx0O3NraXAmZ3Q7IGJsb2NrcyBvZiBzaXplICZsdDticyZndDsgZnJvbSB0aGUgaW5wdXQuCiYjNDM7IyBVbnN5bmNyaG9uaXplZCB3aGVuIHNraXAgaXMgbm90IHBhc3NlZC4KJiM0Mzt3cml0ZV9hdF9vZmZzZXQoKSAgIyAmbHQ7ZmlsZSZndDsgJmx0O3N0ciZndDsgJmx0O2JzJmd0OyAmbHQ7c2VlayZndDsgW3NraXBdCiB7Ci0JaWYgW1sgJHJjICE9IDAgXV07IHRoZW4KLQkJZWNobyAmIzM0O0ZhaWxlZCB0ZXN0LCByZXR1cm4gdmFsdWU6ICRyYyYjMzQ7ICZndDsmYW1wOzIKLQkJZXhpdCAkcmMKJiM0MzsJbG9jYWwgZmlsZT0kMSBzdHI9JDIgYnM9JDMgc2Vlaz0kNCBza2lwPSR7NTotfQomIzQzOwlpZiBbIC1uICYjMzQ7JHNraXAmIzM0OyBdOyB0aGVuCiYjNDM7CQlwcmludGYgJiMzOTslcyYjMzk7ICYjMzQ7JHN0ciYjMzQ7IHwgZGQgb2Y9JiMzNDskZmlsZSYjMzQ7IGJzPSYjMzQ7JGJzJiMzNDsgc2Vlaz0mIzM0OyRzZWVrJiMzNDsgc2tpcD0mIzM0OyRza2lwJiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJZWxzZQomIzQzOwkJcHJpbnRmICYjMzk7JXMmIzM5OyAmIzM0OyRzdHImIzM0OyB8IGRkIG9mPSYjMzQ7JGZpbGUmIzM0OyBicz0mIzM0OyRicyYjMzQ7IHNlZWs9JiMzNDskc2VlayYjMzQ7IDImZ3Q7L2Rldi9udWxsCiAJZmkKIH0KIAotdGVzdF9maW5pc2goKQomIzQzOyMgcGFkIChwcmVmaXgpICZsdDtzdHImZ3Q7IHdpdGggJmx0O3BhZCZndDsgJiMzOTtBJiMzOTsgY2hhcmFjdGVycywgdGhlbiB3cml0ZSBpdCBhbGwgdG8gJmx0O2ZpbGUmZ3Q7CiYjNDM7IyB3aXRoIGRkIGJsb2NrIHNpemUgJmx0O2JzJmd0OyAoZGVmYXVsdHMgdG8gJmx0O3BhZCZndDspLgomIzQzO3dyaXRlX292ZXJsb25nKCkgICMgJmx0O2ZpbGUmZ3Q7ICZsdDtwYWQmZ3Q7ICZsdDtzdHImZ3Q7IFtic10KIHsKLQlzZXRfb3JpZwotCXJtIC1mICYjMzQ7JHtURVNUX0ZJTEV9JiMzNDsKJiM0MzsJbG9jYWwgZmlsZT0kMSBwYWQ9JDIgc3RyPSQzIGJzPSQ0IHAKJiM0MzsJOiAmIzM0OyR7YnM6PSRwYWR9JiMzNDsKIAotCWlmIFsgISAteiAke29sZF9zdHJpY3R9IF07IHRoZW4KLQkJZWNobyAke29sZF9zdHJpY3R9ICZndDsgJHtXUklURVNfU1RSSUNUfQotCWZpCi0JZXhpdCAkcmMKJiM0MzsJIyBzYXZlIGEgc3RyaW5nIHdpdGggJHBhZCBzcGFjZXMgaW4gJHAKJiM0MzsJcHJpbnRmIC12IHAgJiMzOTslKnMmIzM5OyAmIzM0OyRwYWQmIzM0OyAmIzM5OyYjMzk7CiYjNDM7CSMgcmVwbGFjZSAmIzM0OyAmIzM0OyB3aXRoICYjMzQ7QSYjMzQ7CiYjNDM7CXByaW50ZiAmIzM5OyVzJXMmIzM5OyAmIzM0OyR7cC8vIC9BfSYjMzQ7ICYjMzQ7JHN0ciYjMzQ7IHwgZGQgb2Y9JiMzNDskZmlsZSYjMzQ7IGJzPSYjMzQ7JGJzJiMzNDsgMiZndDsvZGV2L251bGwKIH0KIAotcnVuX251bWVyaWN0ZXN0cygpCiYjNDM7IyBwYWQgKHByZWZpeCkgJmx0O3N0ciZndDsgd2l0aCAmbHQ7cGFkJmd0OyBBU0NJSSBzcGFjZXMsIHRoZW4gd3JpdGUgd2l0aCBkZWZhdWx0IGJsb2NrIHNpemUuCiYjNDM7d3JpdGVfcGFkZGVkX2RpZ2l0cygpICAjICZsdDtmaWxlJmd0OyAmbHQ7cGFkJmd0OyAmbHQ7dmFsJmd0OwogewotCWVjaG8gJiMzNDs9PSBUZXN0aW5nIHN5c2N0bCBiZWhhdmlvciBhZ2FpbnN0ICR7VEFSR0VUfSA9PSYjMzQ7CiYjNDM7CWxvY2FsIGZpbGU9JDEgcGFkPSQyIHZhbD0kMyBwCiYjNDM7CXByaW50ZiAtdiBwICYjMzk7JSpzJiMzOTsgJiMzNDskcGFkJiMzNDsgJiMzOTsmIzM5OwomIzQzOwlwcmludGYgJiMzOTslcyVzJiMzOTsgJiMzNDskcCYjMzQ7ICYjMzQ7JHZhbCYjMzQ7IHwgZGQgb2Y9JiMzNDskZmlsZSYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7fQogCi0JcmM9MAomIzQzO3Rlc3RfaW50X2FycmF5X3dyaXRlcygpCiYjNDM7ewomIzQzOwlsb2NhbCB0PSYjMzQ7JHtTWVNDVEx9L2ludF8wMDAzJiMzNDsKJiM0MzsJbG9jYWwgbGltaXQKIAotCWVjaG8gLW4gJiMzNDtXcml0aW5nIHRlc3QgZmlsZSAuLi4gJiMzNDsKLQllY2hvICYjMzQ7JHtURVNUX1NUUn0mIzM0OyAmZ3Q7ICYjMzQ7JHtURVNUX0ZJTEV9JiMzNDsKLQlpZiAhIHZlcmlmeSAmIzM0OyR7VEVTVF9GSUxFfSYjMzQ7OyB0aGVuCi0JCWVjaG8gJiMzNDtGQUlMJiMzNDsgJmd0OyZhbXA7MgotCQlleGl0IDEKLQllbHNlCi0JCWVjaG8gJiMzNDtPSyYjMzQ7Ci0JZmkKJiM0MzsJW1sgLWYgJiMzNDskdCYjMzQ7IF1dIHx8IHsgUkVUPSRLU0ZUX1NLSVA7IHJldHVybjsgfQogCi0JZWNobyAtbiAmIzM0O0NoZWNraW5nIHN5c2N0bCBpcyBub3Qgc2V0IHRvIHRlc3QgdmFsdWUgLi4uICYjMzQ7Ci0JaWYgdmVyaWZ5ICYjMzQ7JHtUQVJHRVR9JiMzNDs7IHRoZW4KLQkJZWNobyAmIzM0O0ZBSUwmIzM0OyAmZ3Q7JmFtcDsyCi0JCWV4aXQgMQotCWVsc2UKLQkJZWNobyAmIzM0O09LJiMzNDsKLQlmaQomIzQzOwlwcmludGYgJiMzOTslcyYjMzk7ICYjMzQ7NCAzIDIgMSYjMzQ7ICZndDsgJiMzNDskdCYjMzQ7CiYjNDM7CWFzc2VydF9jb250ZW50X2xvb3NlICYjMzQ7JHQmIzM0OyAmIzM0OzQgMyAyIDEmIzM0OyB8fCBSRVQ9JEtTRlRfRkFJTAogCi0JZWNobyAtbiAmIzM0O1dyaXRpbmcgc3lzY3RsIGZyb20gc2hlbGwgLi4uICYjMzQ7Ci0Jc2V0X3Rlc3QKLQlpZiAhIHZlcmlmeSAmIzM0OyR7VEFSR0VUfSYjMzQ7OyB0aGVuCi0JCWVjaG8gJiMzNDtGQUlMJiMzNDsgJmd0OyZhbXA7MgotCQlleGl0IDEKLQllbHNlCi0JCWVjaG8gJiMzNDtPSyYjMzQ7Ci0JZmkKJiM0MzsJIyBTa2lwcGluZyB0cmFpbGluZyBlbGVtZW50cyBsZWF2ZXMgdGhlbSBpbnRhY3QKJiM0MzsJcHJpbnRmICYjMzk7JXMmIzM5OyAmIzM0OzEwMCAxMDEmIzM0OyAmZ3Q7ICYjMzQ7JHQmIzM0OwomIzQzOwlhc3NlcnRfY29udGVudF9sb29zZSAmIzM0OyR0JiMzNDsgJiMzNDsxMDAgMTAxIDIgMSYjMzQ7IHx8IFJFVD0kS1NGVF9GQUlMCiAKLQllY2hvIC1uICYjMzQ7UmVzZXR0aW5nIHN5c2N0bCB0byBvcmlnaW5hbCB2YWx1ZSAuLi4gJiMzNDsKLQlzZXRfb3JpZwotCWlmIHZlcmlmeSAmIzM0OyR7VEFSR0VUfSYjMzQ7OyB0aGVuCi0JCWVjaG8gJiMzNDtGQUlMJiMzNDsgJmd0OyZhbXA7MgotCQlleGl0IDEKLQllbHNlCi0JCWVjaG8gJiMzNDtPSyYjMzQ7Ci0JZmkKJiM0MzsJIyBFdmVuIGZvciBhbiBpbnQgYXJyYXksIGEgc2luZ2xlIHdyaXRlIGlzIHN0aWxsIGNhcHBlZCBhdCBNQVhfRElHSVRTCiYjNDM7CSMgKFBBR0VfU0laRS84KSBieXRlczsgY2hlY2sgcmlnaHQgYXQsIGFuZCBqdXN0IHBhc3QsIHRoYXQgYm91bmRhcnkuCiYjNDM7CSMgQ2FycmllcyBvbiB0aGUgc3RhdGUgZnJvbSB0aGUgd3JpdGVzIGFib3ZlLgomIzQzOwlsaW1pdD0kKChNQVhfRElHSVRTIC0gMSkpCiYjNDM7CXdyaXRlX3BhZGRlZF9kaWdpdHMgJiMzNDskdCYjMzQ7ICYjMzQ7JGxpbWl0JiMzNDsgJiMzNDs5JiMzNDsKJiM0MzsJYXNzZXJ0X2NvbnRlbnRfbG9vc2UgJiMzNDskdCYjMzQ7ICYjMzQ7OSAxMDEgMiAxJiMzNDsgfHwgUkVUPSRLU0ZUX0ZBSUwKIAotCSMgTm93IHRoYXQgd2UmIzM5O3ZlIHZhbGlkYXRlZCB0aGUgc2FuaXR5IG9mICYjMzQ7c2V0X3Rlc3QmIzM0OyBhbmQgJiMzNDtzZXRfb3JpZyYjMzQ7LAotCSMgd2UgY2FuIHVzZSB0aG9zZSBmdW5jdGlvbnMgdG8gc2V0IHN0YXJ0aW5nIHN0YXRlcyBiZWZvcmUgcnVubmluZwotCSMgc3BlY2lmaWMgYmVoYXZpb3JhbCB0ZXN0cy4KJiM0MzsJbGltaXQ9JCgoTUFYX0RJR0lUUykpCiYjNDM7CXdyaXRlX3BhZGRlZF9kaWdpdHMgJiMzNDskdCYjMzQ7ICYjMzQ7JGxpbWl0JiMzNDsgJiMzNDs3JiMzNDsKJiM0MzsJYXNzZXJ0X2NvbnRlbnRfcmVqZWN0ZWQgJiMzNDskdCYjMzQ7ICYjMzQ7NyAxMDEgMiAxJiMzNDsgfHwgUkVUPSRLU0ZUX0ZBSUwKJiM0Mzt9CiAKLQllY2hvIC1uICYjMzQ7V3JpdGluZyBlbnRpcmUgc3lzY3RsIGluIHNpbmdsZSB3cml0ZSAuLi4gJiMzNDsKLQlzZXRfb3JpZwotCWRkIGlmPSYjMzQ7JHtURVNUX0ZJTEV9JiMzNDsgb2Y9JiMzNDske1RBUkdFVH0mIzM0OyBicz00MDk2IDImZ3Q7L2Rldi9udWxsCi0JaWYgISB2ZXJpZnkgJiMzNDske1RBUkdFVH0mIzM0OzsgdGhlbgotCQllY2hvICYjMzQ7RkFJTCYjMzQ7ICZndDsmYW1wOzIKLQkJcmM9MQotCWVsc2UKLQkJZWNobyAmIzM0O09LJiMzNDsKLQlmaQomIzQzO3Rlc3RfaW50X2FycmF5X25vX3BhcnRpYWxfdXBkYXRlKCkKJiM0Mzt7CiYjNDM7CWxvY2FsIHQ9JiMzNDske1NZU0NUTH0vaW50XzAwMDMmIzM0OwogCi0JZWNobyAtbiAmIzM0O1dyaXRpbmcgbWlkZGxlIG9mIHN5c2N0bCBhZnRlciBzeW5jaHJvbml6ZWQgc2VlayAuLi4gJiMzNDsKLQlzZXRfdGVzdAotCWRkIGlmPSYjMzQ7JHtURVNUX0ZJTEV9JiMzNDsgb2Y9JiMzNDske1RBUkdFVH0mIzM0OyBicz0xIHNlZWs9MSBza2lwPTEgMiZndDsvZGV2L251bGwKLQlpZiAhIHZlcmlmeSAmIzM0OyR7VEFSR0VUfSYjMzQ7OyB0aGVuCi0JCWVjaG8gJiMzNDtGQUlMJiMzNDsgJmd0OyZhbXA7MgotCQlyYz0xCi0JZWxzZQotCQllY2hvICYjMzQ7T0smIzM0OwotCWZpCiYjNDM7CVtbIC1mICYjMzQ7JHQmIzM0OyBdXSB8fCB7IFJFVD0kS1NGVF9TS0lQOyByZXR1cm47IH0KIAotCWVjaG8gLW4gJiMzNDtXcml0aW5nIGJleW9uZCBlbmQgb2Ygc3lzY3RsIC4uLiAmIzM0OwotCXNldF9vcmlnCi0JZGQgaWY9JiMzNDske1RFU1RfRklMRX0mIzM0OyBvZj0mIzM0OyR7VEFSR0VUfSYjMzQ7IGJzPTIwIHNlZWs9MiAyJmd0Oy9kZXYvbnVsbAotCWlmIHZlcmlmeSAmIzM0OyR7VEFSR0VUfSYjMzQ7OyB0aGVuCi0JCWVjaG8gJiMzNDtGQUlMJiMzNDsgJmd0OyZhbXA7MgotCQlyYz0xCi0JZWxzZQotCQllY2hvICYjMzQ7T0smIzM0OwotCWZpCiYjNDM7CSMgYmFkIDNyZCBlbGVtZW50IChub3QgYSBudW1iZXIpCiYjNDM7CWFzc2VydF9ub19wYXJ0aWFsX3VwZGF0ZSAmIzM0OyR0JiMzNDsgJiMzNDsxIDIgMyA0JiMzNDsgJiMzNDsxMCAyMCBhYmMgNDAmIzM0OyB8fCBSRVQ9JEtTRlRfRkFJTAogCi0JZWNobyAtbiAmIzM0O1dyaXRpbmcgc3lzY3RsIHdpdGggbXVsdGlwbGUgbG9uZyB3cml0ZXMgLi4uICYjMzQ7Ci0Jc2V0X29yaWcKLQkocGVybCAtZSAmIzM5O3ByaW50ICYjMzQ7QSYjMzQ7IHggNTA7JiMzOTs7IGVjaG8gJiMzNDske1RFU1RfU1RSfSYjMzQ7KSB8IFwKLQkJZGQgb2Y9JiMzNDske1RBUkdFVH0mIzM0OyBicz01MCAyJmd0Oy9kZXYvbnVsbAotCWlmIHZlcmlmeSAmIzM0OyR7VEFSR0VUfSYjMzQ7OyB0aGVuCi0JCWVjaG8gJiMzNDtGQUlMJiMzNDsgJmd0OyZhbXA7MgotCQlyYz0xCi0JZWxzZQotCQllY2hvICYjMzQ7T0smIzM0OwotCWZpCi0JdGVzdF9yYwomIzQzOwkjIGJhZCAzcmQgZWxlbWVudCAob3ZlcmZsb3dzIGludCkKJiM0MzsJYXNzZXJ0X25vX3BhcnRpYWxfdXBkYXRlICYjMzQ7JHQmIzM0OyAmIzM0OzEgMiAzIDQmIzM0OyAmIzM0OzEwIDIwICQoKElOVF9NQVggJiM0MzsgMSkpIDQwJiMzNDsgfHwgUkVUPSRLU0ZUX0ZBSUwKJiM0MzsKJiM0MzsJIyBiYWQgMXN0IGVsZW1lbnQKJiM0MzsJYXNzZXJ0X25vX3BhcnRpYWxfdXBkYXRlICYjMzQ7JHQmIzM0OyAmIzM0OzEgMiAzIDQmIzM0OyAmIzM0O2FiYyAyMCAzMCA0MCYjMzQ7IHx8IFJFVD0kS1NGVF9GQUlMCiB9CiAKLWNoZWNrX2ZhaWx1cmUoKQomIzQzOyMgRXhlcmNpc2UgdGhlIHdyaXRlIHBhdHRlcm5zCiYjNDM7YXNzZXJ0X3dyaXRlX3BhdHRlcm5zKCkgICMgJmx0O2ZpbGUmZ3Q7ICZsdDtiYXNlbGluZSZndDsgJmx0O3ZhbCZndDsKIHsKLQllY2hvIC1uICYjMzQ7VGVzdGluZyB0aGF0ICQxIGZhaWxzIGFzIGV4cGVjdGVkIC4uLiAmIzM0OwotCXJlc2V0X3ZhbHMKLQlURVNUX1NUUj0mIzM0OyQxJiMzNDsKLQlvcmlnPSYjMzQ7JChjYXQgJFRBUkdFVCkmIzM0OwotCWVjaG8gLW4gJiMzNDskVEVTVF9TVFImIzM0OyAmZ3Q7ICRUQVJHRVQgMiZndDsgL2Rldi9udWxsCi0KLQkjIHdyaXRlIHNob3VsZCBmYWlsIGFuZCAkVEFSR0VUIHNob3VsZCByZXRhaW4gaXRzIG9yaWdpbmFsIHZhbHVlCi0JaWYgWyAkPyA9IDAgXSB8fCBbICYjMzQ7JChjYXQgJFRBUkdFVCkmIzM0OyAhPSAmIzM0OyRvcmlnJiMzNDsgXTsgdGhlbgotCQllY2hvICYjMzQ7RkFJTCYjMzQ7ICZndDsmYW1wOzIKLQkJcmM9MQotCWVsc2UKLQkJZWNobyAmIzM0O09LJiMzNDsKLQlmaQotCXRlc3RfcmMKJiM0MzsJbG9jYWwgZmlsZT0kMSBiYXNlbGluZT0kMiB2YWw9JDMgc3RhdHVzPTAKJiM0MzsKJiM0MzsJcHJpbnRmICYjMzk7JXMmIzM5OyAmIzM0OyR2YWwmIzM0OyAmZ3Q7ICYjMzQ7JGZpbGUmIzM0OwomIzQzOwlhc3NlcnRfY29udGVudCAmIzM0OyRmaWxlJiMzNDsgJiMzNDskdmFsJiMzNDsgfHwgc3RhdHVzPTEKJiM0MzsJcHJpbnRmICYjMzk7JXMmIzM5OyAmIzM0OyRiYXNlbGluZSYjMzQ7ICZndDsgJiMzNDskZmlsZSYjMzQ7CiYjNDM7CWFzc2VydF9jb250ZW50ICYjMzQ7JGZpbGUmIzM0OyAmIzM0OyRiYXNlbGluZSYjMzQ7IHx8IHN0YXR1cz0xCiYjNDM7CiYjNDM7CXByaW50ZiAmIzM5OyVzJiMzOTsgJiMzNDskYmFzZWxpbmUmIzM0OyAmZ3Q7ICYjMzQ7JGZpbGUmIzM0OwomIzQzOwl3cml0ZV9pbl9jaHVua3MgJiMzNDskZmlsZSYjMzQ7ICYjMzQ7JHZhbCYjMzQ7IDQwOTYKJiM0MzsJYXNzZXJ0X2NvbnRlbnQgJiMzNDskZmlsZSYjMzQ7ICYjMzQ7JHZhbCYjMzQ7IHx8IHN0YXR1cz0xCiYjNDM7CiYjNDM7CXByaW50ZiAmIzM5OyVzJiMzOTsgJiMzNDskdmFsJiMzNDsgJmd0OyAmIzM0OyRmaWxlJiMzNDsKJiM0MzsJd3JpdGVfYXRfb2Zmc2V0ICYjMzQ7JGZpbGUmIzM0OyAmIzM0OyR2YWwmIzM0OyAxIDEgMQomIzQzOwlhc3NlcnRfY29udGVudCAmIzM0OyRmaWxlJiMzNDsgJiMzNDskdmFsJiMzNDsgfHwgc3RhdHVzPTEKJiM0MzsKJiM0MzsJcHJpbnRmICYjMzk7JXMmIzM5OyAmIzM0OyRiYXNlbGluZSYjMzQ7ICZndDsgJiMzNDskZmlsZSYjMzQ7CiYjNDM7CXdyaXRlX2F0X29mZnNldCAmIzM0OyRmaWxlJiMzNDsgJiMzNDskdmFsJiMzNDsgMjAgMgomIzQzOwlhc3NlcnRfY29udGVudF9yZWplY3RlZCAmIzM0OyRmaWxlJiMzNDsgJiMzNDskdmFsJiMzNDsgfHwgc3RhdHVzPTEKJiM0MzsKJiM0MzsJcHJpbnRmICYjMzk7JXMmIzM5OyAmIzM0OyRiYXNlbGluZSYjMzQ7ICZndDsgJiMzNDskZmlsZSYjMzQ7CiYjNDM7CXdyaXRlX292ZXJsb25nICYjMzQ7JGZpbGUmIzM0OyA1MCAmIzM0OyR2YWwmIzM0OwomIzQzOwlhc3NlcnRfY29udGVudF9yZWplY3RlZCAmIzM0OyRmaWxlJiMzNDsgJiMzNDskdmFsJiMzNDsgfHwgc3RhdHVzPTEKJiM0MzsKJiM0MzsJcmV0dXJuICYjMzQ7JHN0YXR1cyYjMzQ7CiB9CiAKLXJ1bl93aWRlaW50X3Rlc3RzKCkKJiM0MzsjIE5vbmUgb2YgdGhlc2UgZml0IGluIDMyIGJpdHMsIHNvIHdyaXRpbmcgdGhlbSB0byBhbiBpbnQvdWludCBzeXNjdGwgbXVzdCBmYWlsCiYjNDM7YXNzZXJ0X3dpZGVpbnRfd3JpdGVzX3JlamVjdGVkKCkgICMgJmx0O2ZpbGUmZ3Q7ICZsdDtiYXNlbGluZSZndDsKIHsKLQkjIHN5c2N0bCBjb252ZXJzaW9uIGZ1bmN0aW9ucyByZWNlaXZlIGEgYm9vbGVhbiBzaWduIGFuZCB1bG9uZwotCSMgbWFnbml0dWRlOyBoZXJlIHdlIGxpc3QgdGhlIG1hZ25pdHVkZXMgd2Ugd2FudCB0byB0ZXN0IChlYWNoIG9mCi0JIyB3aGljaCB3aWxsIGJlIHRlc3RlZCBpbiBib3RoIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBmb3JtcykuICBTaW5jZQotCSMgbm9uZSBvZiB0aGVzZSB2YWx1ZXMgZml0IGluIDMyIGJpdHMsIHdyaXRpbmcgdGhlbSB0byBhbiBpbnQtIG9yCi0JIyB1aW50LXR5cGVkIHN5c2N0bCBzaG91bGQgZmFpbC4KJiM0MzsJbG9jYWwgZmlsZT0kMSBiYXNlbGluZT0kMiBzaWduIG1hZyBzdGF0dXM9MAogCWxvY2FsIG1hZ25pdHVkZXM9KAotCQkjIGNvbW1vbiBib3VuZGFyeS1jb25kaXRpb24gdmFsdWVzICh6ZXJvLCAmIzQzOzEsIC0xLCBJTlRfTUlOLAotCQkjIGFuZCBJTlRfTUFYIHJlc3BlY3RpdmVseSkgaWYgdHJ1bmNhdGVkIHRvIGxvd2VyIDMyIGJpdHMKLQkJIyAocG90ZW50aWFsIGZvciBiZWluZyBmYWxzZWx5IGRlZW1lZCBpbiByYW5nZSkKIAkJMHgwMDAwMDAwMTAwMDAwMDAwCiAJCTB4MDAwMDAwMDEwMDAwMDAwMQogCQkweDAwMDAwMDAxZmZmZmZmZmYKIAkJMHgwMDAwMDAwMTgwMDAwMDAwCiAJCTB4MDAwMDAwMDE3ZmZmZmZmZgotCi0JCSMgdGhlc2UgbG9vayBsaWtlIG5lZ2F0aXZlcywgYnV0IHdpdGhvdXQgYSBsZWFkaW5nICYjMzk7LSYjMzk7IGFyZQotCQkjIGFjdHVhbGx5IGxhcmdlIHBvc2l0aXZlcyAoc2hvdWxkIGJlIHJlamVjdGVkIGFzIGFib3ZlCi0JCSMgZGVzcGl0ZSBiZWluZyB6ZXJvLyYjNDM7MS8tMS9JTlRfTUlOL0lOVF9NQVggaW4gdGhlIGxvd2VyIDMyKQogCQkweGZmZmZmZmZmMDAwMDAwMDAKIAkJMHhmZmZmZmZmZjAwMDAwMDAxCiAJCTB4ZmZmZmZmZmZmZmZmZmZmZgpAQCAtMzY3LDc5MyAmIzQzOzI0NCw1MTUgQEAgcnVuX3dpZGVpbnRfdGVzdHMoKQogCiAJZm9yIHNpZ24gaW4gJiMzOTsmIzM5OyAmIzM5Oy0mIzM5OzsgZG8KIAkJZm9yIG1hZyBpbiAmIzM0OyR7bWFnbml0dWRlc1tAXX0mIzM0OzsgZG8KLQkJCWNoZWNrX2ZhaWx1cmUgJiMzNDske3NpZ259JHttYWd9JiMzNDsKJiM0MzsJCQlhc3NlcnRfbm9fcGFydGlhbF91cGRhdGUgJiMzNDskZmlsZSYjMzQ7ICYjMzQ7JGJhc2VsaW5lJiMzNDsgJiMzNDske3NpZ259JHttYWd9JiMzNDsgfHwgc3RhdHVzPTEKIAkJZG9uZQogCWRvbmUKJiM0MzsJcmV0dXJuICYjMzQ7JHN0YXR1cyYjMzQ7CiB9CiAKLSMgWW91ciB0ZXN0IG11c3QgYWNjZXB0IGRpZ2l0cyAzIGFuZCA0IHRvIHVzZSB0aGlzCi1ydW5fbGltaXRfZGlnaXQoKQomIzQzOyMgQSBzaW5nbGUgd3JpdGUgaXMgY2FwcGVkIGF0IE1BWF9ESUdJVFMgKFBBR0VfU0laRS84KSBieXRlczsgY2hlY2sgdGhhdAomIzQzOyMgbGVhZGluZyB3aGl0ZXNwYWNlIHVwIHRvIHRoYXQgbGltaXQgaXMgaWdub3JlZCwgYW5kIHRoYXQgUEFHRV9TSVpFIG9mCiYjNDM7IyBsZWFkaW5nIHdoaXRlc3BhY2UgcHVzaGVzIHRoZSB2YWx1ZSBwYXN0IHRoZSBsaW1pdCBhbmQgZmFpbHMuCiYjNDM7YXNzZXJ0X2RpZ2l0X2xpbWl0KCkgICMgJmx0O2ZpbGUmZ3Q7ICZsdDtiYXNlbGluZSZndDsKIHsKLQllY2hvIC1uICYjMzQ7Q2hlY2tpbmcgaWdub3Jpbmcgc3BhY2VzIHVwIHRvIFBBR0VfU0laRSB3b3JrcyBvbiB3cml0ZSAuLi4gJiMzNDsKLQlyZXNldF92YWxzCi0KLQlMSU1JVD0kKChNQVhfRElHSVRTIC0xKSkKLQlURVNUX1NUUj0mIzM0OzMmIzM0OwotCShwZXJsIC1lICYjMzk7cHJpbnQgJiMzNDsgJiMzNDsgeCAmIzM5OyRMSU1JVCYjMzk7OyYjMzk7OyBlY2hvICYjMzQ7JHtURVNUX1NUUn0mIzM0OykgfCBcCi0JCWRkIG9mPSYjMzQ7JHtUQVJHRVR9JiMzNDsgMiZndDsvZGV2L251bGwKLQotCWlmICEgdmVyaWZ5ICYjMzQ7JHtUQVJHRVR9JiMzNDs7IHRoZW4KLQkJZWNobyAmIzM0O0ZBSUwmIzM0OyAmZ3Q7JmFtcDsyCi0JCXJjPTEKLQllbHNlCi0JCWVjaG8gJiMzNDtPSyYjMzQ7Ci0JZmkKLQl0ZXN0X3JjCiYjNDM7CWxvY2FsIGZpbGU9JDEgYmFzZWxpbmU9JDIgc3RhdHVzPTAKIAotCWVjaG8gLW4gJiMzNDtDaGVja2luZyBwYXNzaW5nIFBBR0VfU0laRSBvZiBzcGFjZXMgZmFpbHMgb24gd3JpdGUgLi4uICYjMzQ7Ci0JcmVzZXRfdmFscwomIzQzOwlwcmludGYgJiMzOTslcyYjMzk7ICYjMzQ7JGJhc2VsaW5lJiMzNDsgJmd0OyAmIzM0OyRmaWxlJiMzNDsKJiM0MzsJd3JpdGVfcGFkZGVkX2RpZ2l0cyAmIzM0OyRmaWxlJiMzNDsgJiMzNDskKChNQVhfRElHSVRTIC0gMSkpJiMzNDsgJiMzNDszJiMzNDsKJiM0MzsJYXNzZXJ0X2NvbnRlbnQgJiMzNDskZmlsZSYjMzQ7ICYjMzQ7MyYjMzQ7IHx8IHN0YXR1cz0xCiAKLQlMSU1JVD0kKChNQVhfRElHSVRTKSkKLQlURVNUX1NUUj0mIzM0OzQmIzM0OwotCShwZXJsIC1lICYjMzk7cHJpbnQgJiMzNDsgJiMzNDsgeCAmIzM5OyRMSU1JVCYjMzk7OyYjMzk7OyBlY2hvICYjMzQ7JHtURVNUX1NUUn0mIzM0OykgfCBcCi0JCWRkIG9mPSYjMzQ7JHtUQVJHRVR9JiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJcHJpbnRmICYjMzk7JXMmIzM5OyAmIzM0OyRiYXNlbGluZSYjMzQ7ICZndDsgJiMzNDskZmlsZSYjMzQ7CiYjNDM7CXdyaXRlX3BhZGRlZF9kaWdpdHMgJiMzNDskZmlsZSYjMzQ7ICYjMzQ7JE1BWF9ESUdJVFMmIzM0OyAmIzM0OzQmIzM0OwomIzQzOwlhc3NlcnRfY29udGVudF9yZWplY3RlZCAmIzM0OyRmaWxlJiMzNDsgJiMzNDs0JiMzNDsgfHwgc3RhdHVzPTEKIAotCWlmIHZlcmlmeSAmIzM0OyR7VEFSR0VUfSYjMzQ7OyB0aGVuCi0JCWVjaG8gJiMzNDtGQUlMJiMzNDsgJmd0OyZhbXA7MgotCQlyYz0xCi0JZWxzZQotCQllY2hvICYjMzQ7T0smIzM0OwotCWZpCi0JdGVzdF9yYwomIzQzOwlyZXR1cm4gJiMzNDskc3RhdHVzJiMzNDsKIH0KIAotIyBZb3UgYXJlIHVzaW5nIGFuIGludAotcnVuX2xpbWl0X2RpZ2l0X2ludCgpCiYjNDM7IyBwcm9jX2RvaW50dmVjKCktc3BlY2lmaWMgcmFuZ2UgY2hlY2tzOiBJTlRfTUFYIG11c3QgYmUgYWNjZXB0ZWQsIElOVF9NQVgmIzQzOzEKJiM0MzsjIG11c3QgYmUgcmVqZWN0ZWQsIGFuZCBuZWdhdGl2ZSB2YWx1ZXMgbXVzdCBiZSBhY2NlcHRlZC4KJiM0Mzthc3NlcnRfaW50X3JhbmdlKCkgICMgJmx0O2ZpbGUmZ3Q7ICZsdDtiYXNlbGluZSZndDsKIHsKLQllY2hvIC1uICYjMzQ7VGVzdGluZyBJTlRfTUFYIHdvcmtzIC4uLiAmIzM0OwotCXJlc2V0X3ZhbHMKLQlURVNUX1NUUj0mIzM0OyRJTlRfTUFYJiMzNDsKLQllY2hvIC1uICRURVNUX1NUUiAmZ3Q7ICRUQVJHRVQKLQotCWlmICEgdmVyaWZ5ICYjMzQ7JHtUQVJHRVR9JiMzNDs7IHRoZW4KLQkJZWNobyAmIzM0O0ZBSUwmIzM0OyAmZ3Q7JmFtcDsyCi0JCXJjPTEKLQllbHNlCi0JCWVjaG8gJiMzNDtPSyYjMzQ7Ci0JZmkKLQl0ZXN0X3JjCiYjNDM7CWxvY2FsIGZpbGU9JDEgYmFzZWxpbmU9JDIgc3RhdHVzPTAKIAotCWVjaG8gLW4gJiMzNDtUZXN0aW5nIElOVF9NQVggJiM0MzsgMSB3aWxsIGZhaWwgYXMgZXhwZWN0ZWQgLi4uICYjMzQ7Ci0JcmVzZXRfdmFscwotCWxldCBURVNUX1NUUj0kSU5UX01BWCYjNDM7MQotCWVjaG8gLW4gJFRFU1RfU1RSICZndDsgJFRBUkdFVCAyJmd0OyAvZGV2L251bGwKJiM0MzsJcHJpbnRmICYjMzk7JXMmIzM5OyAmIzM0OyRiYXNlbGluZSYjMzQ7ICZndDsgJiMzNDskZmlsZSYjMzQ7CiYjNDM7CXByaW50ZiAmIzM5OyVzJiMzOTsgJiMzNDskSU5UX01BWCYjMzQ7ICZndDsgJiMzNDskZmlsZSYjMzQ7CiYjNDM7CWFzc2VydF9jb250ZW50ICYjMzQ7JGZpbGUmIzM0OyAmIzM0OyRJTlRfTUFYJiMzNDsgfHwgc3RhdHVzPTEKIAotCWlmIHZlcmlmeSAmIzM0OyR7VEFSR0VUfSYjMzQ7OyB0aGVuCi0JCWVjaG8gJiMzNDtGQUlMJiMzNDsgJmd0OyZhbXA7MgotCQlyYz0xCi0JZWxzZQotCQllY2hvICYjMzQ7T0smIzM0OwotCWZpCi0JdGVzdF9yYwotCi0JZWNobyAtbiAmIzM0O1Rlc3RpbmcgbmVnYXRpdmUgdmFsdWVzIHdpbGwgd29yayBhcyBleHBlY3RlZCAuLi4gJiMzNDsKLQlyZXNldF92YWxzCi0JVEVTVF9TVFI9JiMzNDstMyYjMzQ7Ci0JZWNobyAtbiAkVEVTVF9TVFIgJmd0OyAkVEFSR0VUIDImZ3Q7IC9kZXYvbnVsbAotCWlmICEgdmVyaWZ5ICYjMzQ7JHtUQVJHRVR9JiMzNDs7IHRoZW4KLQkJZWNobyAmIzM0O0ZBSUwmIzM0OyAmZ3Q7JmFtcDsyCi0JCXJjPTEKLQllbHNlCi0JCWVjaG8gJiMzNDtPSyYjMzQ7Ci0JZmkKLQl0ZXN0X3JjCi19CiYjNDM7CWFzc2VydF9ub19wYXJ0aWFsX3VwZGF0ZSAmIzM0OyRmaWxlJiMzNDsgJiMzNDskYmFzZWxpbmUmIzM0OyAmIzM0OyQoKElOVF9NQVggJiM0MzsgMSkpJiMzNDsgfHwgc3RhdHVzPTEKIAotIyBZb3UgdXNlZCBhbiBpbnQgYXJyYXkKLXJ1bl9saW1pdF9kaWdpdF9pbnRfYXJyYXkoKQotewotCWVjaG8gLW4gJiMzNDtUZXN0aW5nIGFycmF5IHdvcmtzIGFzIGV4cGVjdGVkIC4uLiAmIzM0OwotCVRFU1RfU1RSPSYjMzQ7NCAzIDIgMSYjMzQ7Ci0JZWNobyAtbiAkVEVTVF9TVFIgJmd0OyAkVEFSR0VUCiYjNDM7CXByaW50ZiAmIzM5OyVzJiMzOTsgJiMzNDskYmFzZWxpbmUmIzM0OyAmZ3Q7ICYjMzQ7JGZpbGUmIzM0OwomIzQzOwlwcmludGYgJiMzOTslcyYjMzk7ICYjMzQ7LTMmIzM0OyAmZ3Q7ICYjMzQ7JGZpbGUmIzM0OyAyJmd0Oy9kZXYvbnVsbAomIzQzOwlhc3NlcnRfY29udGVudCAmIzM0OyRmaWxlJiMzNDsgJiMzNDstMyYjMzQ7IHx8IHN0YXR1cz0xCiAKLQlpZiAhIHZlcmlmeV9kaWZmX3cgJiMzNDske1RBUkdFVH0mIzM0OzsgdGhlbgotCQllY2hvICYjMzQ7RkFJTCYjMzQ7ICZndDsmYW1wOzIKLQkJcmM9MQotCWVsc2UKLQkJZWNobyAmIzM0O09LJiMzNDsKLQlmaQotCXRlc3RfcmMKLQotCWVjaG8gLW4gJiMzNDtUZXN0aW5nIHNraXBwaW5nIHRyYWlsaW5nIGFycmF5IGVsZW1lbnRzIHdvcmtzIC4uLiAmIzM0OwotCSMgRG8gbm90IHJlc2V0X3ZhbHMsIGNhcnJ5IG9uIHRoZSB2YWx1ZXMgZnJvbSB0aGUgbGFzdCB0ZXN0LgotCSMgSWYgd2Ugb25seSBlY2hvIGluIHR3byBkaWdpdHMgdGhlIGxhc3QgdHdvIGFyZSBsZWZ0IGludGFjdAotCVRFU1RfU1RSPSYjMzQ7MTAwIDEwMSYjMzQ7Ci0JZWNobyAtbiAkVEVTVF9TVFIgJmd0OyAkVEFSR0VUCi0JIyBBZnRlciB3ZSBlY2hvIGluLCB0byBoZWxwIGRpZmYgd2UgbmVlZCB0byBzZXQgb24gVEVTVF9TVFIgd2hhdAotCSMgd2UgZXhwZWN0IHRoZSByZXN1bHQgdG8gYmUuCi0JVEVTVF9TVFI9JiMzNDsxMDAgMTAxIDIgMSYjMzQ7Ci0KLQlpZiAhIHZlcmlmeV9kaWZmX3cgJiMzNDske1RBUkdFVH0mIzM0OzsgdGhlbgotCQllY2hvICYjMzQ7RkFJTCYjMzQ7ICZndDsmYW1wOzIKLQkJcmM9MQotCWVsc2UKLQkJZWNobyAmIzM0O09LJiMzNDsKLQlmaQotCXRlc3RfcmMKLQotCWVjaG8gLW4gJiMzNDtUZXN0aW5nIFBBR0VfU0laRSBsaW1pdCBvbiBhcnJheSB3b3JrcyAuLi4gJiMzNDsKLQkjIERvIG5vdCByZXNldF92YWxzLCBjYXJyeSBvbiB0aGUgdmFsdWVzIGZyb20gdGhlIGxhc3QgdGVzdC4KLQkjIEV2ZW4gaWYgeW91IHVzZSBhbiBpbnQgYXJyYXksIHlvdSBhcmUgc3RpbGwgcmVzdHJpY3RlZCB0bwotCSMgTUFYX0RJR0lUUywgdGhpcyBpcyBhIGtub3duIGxpbWl0YXRpb24uIFRlc3QgbGltaXQgd29ya3MuCi0JTElNSVQ9JCgoTUFYX0RJR0lUUyAtMSkpCi0JVEVTVF9TVFI9JiMzNDs5JiMzNDsKLQkocGVybCAtZSAmIzM5O3ByaW50ICYjMzQ7ICYjMzQ7IHggJiMzOTskTElNSVQmIzM5OzsmIzM5OzsgZWNobyAmIzM0OyR7VEVTVF9TVFJ9JiMzNDspIHwgXAotCQlkZCBvZj0mIzM0OyR7VEFSR0VUfSYjMzQ7IDImZ3Q7L2Rldi9udWxsCi0KLQlURVNUX1NUUj0mIzM0OzkgMTAxIDIgMSYjMzQ7Ci0JaWYgISB2ZXJpZnlfZGlmZl93ICYjMzQ7JHtUQVJHRVR9JiMzNDs7IHRoZW4KLQkJZWNobyAmIzM0O0ZBSUwmIzM0OyAmZ3Q7JmFtcDsyCi0JCXJjPTEKLQllbHNlCi0JCWVjaG8gJiMzNDtPSyYjMzQ7Ci0JZmkKLQl0ZXN0X3JjCi0KLQllY2hvIC1uICYjMzQ7VGVzdGluZyBleGNlZWRpbmcgUEFHRV9TSVpFIGxpbWl0IGZhaWxzIGFzIGV4cGVjdGVkIC4uLiAmIzM0OwotCSMgRG8gbm90IHJlc2V0X3ZhbHMsIGNhcnJ5IG9uIHRoZSB2YWx1ZXMgZnJvbSB0aGUgbGFzdCB0ZXN0LgotCSMgTm93IGdvIG92ZXIgbGltaXQuCi0JTElNSVQ9JCgoTUFYX0RJR0lUUykpCi0JVEVTVF9TVFI9JiMzNDs3JiMzNDsKLQkocGVybCAtZSAmIzM5O3ByaW50ICYjMzQ7ICYjMzQ7IHggJiMzOTskTElNSVQmIzM5OzsmIzM5OzsgZWNobyAmIzM0OyR7VEVTVF9TVFJ9JiMzNDspIHwgXAotCQlkZCBvZj0mIzM0OyR7VEFSR0VUfSYjMzQ7IDImZ3Q7L2Rldi9udWxsCi0KLQlURVNUX1NUUj0mIzM0OzcgMTAxIDIgMSYjMzQ7Ci0JaWYgdmVyaWZ5X2RpZmZfdyAmIzM0OyR7VEFSR0VUfSYjMzQ7OyB0aGVuCi0JCWVjaG8gJiMzNDtGQUlMJiMzNDsgJmd0OyZhbXA7MgotCQlyYz0xCi0JZWxzZQotCQllY2hvICYjMzQ7T0smIzM0OwotCWZpCi0JdGVzdF9yYwomIzQzOwlyZXR1cm4gJiMzNDskc3RhdHVzJiMzNDsKIH0KIAotIyBZb3UgdXNlZCBhbiBpbnQgYXJyYXkgYW5kIG9uZSBvZiB0aGUgZWxlbWVudHMgaXMgbm90IGFjY2VwdGFibGUKLXJ1bl9pbnRfYXJyYXlfbm9fcGFydGlhbF91cGRhdGUoKQomIzQzOyMgcHJvY19kb3VpbnR2ZWMoKS1zcGVjaWZpYyByYW5nZSBjaGVja3M6IFVJTlRfTUFYIG11c3QgYmUgYWNjZXB0ZWQsCiYjNDM7IyBVSU5UX01BWCYjNDM7MSBtdXN0IGJlIHJlamVjdGVkLCBhbmQgbmVnYXRpdmUgdmFsdWVzIG11c3QgYmUgcmVqZWN0ZWQgdG9vLgomIzQzO2Fzc2VydF91aW50X3JhbmdlKCkgICMgJmx0O2ZpbGUmZ3Q7ICZsdDtiYXNlbGluZSZndDsKIHsKLQllY2hvIC1uICYjMzQ7VGVzdGluZyBpbnZhbGlkIGFycmF5IGVsZW1lbnQgZG9lcyBub3QgcGFydGlhbGx5IHVwZGF0ZSAuLi4gJiMzNDsKLQkjIEV4cGVjdCBmYWlsdXJlIGJlY2F1c2Ugb2YgM3JkIGVsZW1lbnQgKGFiYykuCi0JaWYgISB2ZXJpZnlfbm9fcGFydGlhbF91cGRhdGUgJiMzNDsxIDIgMyA0JiMzNDsgJiMzNDsxMCAyMCBhYmMgNDAmIzM0OzsgdGhlbgotCQllY2hvICYjMzQ7RkFJTCYjMzQ7ICZndDsmYW1wOzIKLQkJcmM9MQotCWVsc2UKLQkJZWNobyAmIzM0O09LJiMzNDsKLQlmaQotCXRlc3RfcmMKJiM0MzsJbG9jYWwgZmlsZT0kMSBiYXNlbGluZT0kMiBzdGF0dXM9MAogCi0JZWNobyAtbiAmIzM0O1Rlc3Rpbmcgb3V0IG9mIHJhbmdlIGFycmF5IGVsZW1lbnQgZG9lcyBub3QgcGFydGlhbGx5IHVwZGF0ZSAuLi4gJiMzNDsKLQkjIEV4cGVjdCBmYWlsdXJlIGJlY2F1c2Ugb2YgM3JkIGVsZW1lbnQgKGdyZWF0ZXIgdGhhbiBpbnQpCi0JaWYgISB2ZXJpZnlfbm9fcGFydGlhbF91cGRhdGUgJiMzNDsxIDIgMyA0JiMzNDsgJiMzNDsxMCAyMCAkKChJTlRfTUFYICYjNDM7IDEpKSA0MCYjMzQ7OyB0aGVuCi0JCWVjaG8gJiMzNDtGQUlMJiMzNDsgJmd0OyZhbXA7MgotCQlyYz0xCi0JZWxzZQotCQllY2hvICYjMzQ7T0smIzM0OwotCWZpCi0JdGVzdF9yYwomIzQzOwlwcmludGYgJiMzOTslcyYjMzk7ICYjMzQ7JGJhc2VsaW5lJiMzNDsgJmd0OyAmIzM0OyRmaWxlJiMzNDsKJiM0MzsJcHJpbnRmICYjMzk7JXMmIzM5OyAmIzM0OyRVSU5UX01BWCYjMzQ7ICZndDsgJiMzNDskZmlsZSYjMzQ7CiYjNDM7CWFzc2VydF9jb250ZW50ICYjMzQ7JGZpbGUmIzM0OyAmIzM0OyRVSU5UX01BWCYjMzQ7IHx8IHN0YXR1cz0xCiAKLQllY2hvIC1uICYjMzQ7VGVzdGluZyBpbnZhbGlkIGZpcnN0IGFycmF5IGVsZW1lbnQgZG9lcyBub3QgdXBkYXRlIC4uLiAmIzM0OwotCSMgRXhwZWN0IGZhaWx1cmUgb2YgMXN0IGVsZW1lbnQKLQlpZiAhIHZlcmlmeV9ub19wYXJ0aWFsX3VwZGF0ZSAmIzM0OzEgMiAzIDQmIzM0OyAmIzM0O2FiYyAyMCAzMCA0MCYjMzQ7OyB0aGVuCi0JCWVjaG8gJiMzNDtGQUlMJiMzNDsgJmd0OyZhbXA7MgotCQlyYz0xCi0JZWxzZQotCQllY2hvICYjMzQ7T0smIzM0OwotCWZpCi0JdGVzdF9yYwomIzQzOwlhc3NlcnRfbm9fcGFydGlhbF91cGRhdGUgJiMzNDskZmlsZSYjMzQ7ICYjMzQ7JGJhc2VsaW5lJiMzNDsgJiMzNDskKChVSU5UX01BWCAmIzQzOyAxKSkmIzM0OyB8fCBzdGF0dXM9MQomIzQzOwlhc3NlcnRfbm9fcGFydGlhbF91cGRhdGUgJiMzNDskZmlsZSYjMzQ7ICYjMzQ7JGJhc2VsaW5lJiMzNDsgJiMzNDstMyYjMzQ7IHx8IHN0YXR1cz0xCiYjNDM7CiYjNDM7CXJldHVybiAmIzM0OyRzdGF0dXMmIzM0OwogfQogCi0jIFlvdSBhcmUgdXNpbmcgYW4gdW5zaWduZWQgaW50Ci1ydW5fbGltaXRfZGlnaXRfdWludCgpCiYjNDM7dGVzdF9pbnRfbWlubWF4KCkKIHsKLQllY2hvIC1uICYjMzQ7VGVzdGluZyBVSU5UX01BWCB3b3JrcyAuLi4gJiMzNDsKLQlyZXNldF92YWxzCi0JVEVTVF9TVFI9JiMzNDskVUlOVF9NQVgmIzM0OwotCWVjaG8gLW4gJFRFU1RfU1RSICZndDsgJFRBUkdFVAotCi0JaWYgISB2ZXJpZnkgJiMzNDske1RBUkdFVH0mIzM0OzsgdGhlbgotCQllY2hvICYjMzQ7RkFJTCYjMzQ7ICZndDsmYW1wOzIKLQkJcmM9MQotCWVsc2UKLQkJZWNobyAmIzM0O09LJiMzNDsKLQlmaQotCXRlc3RfcmMKLQotCWVjaG8gLW4gJiMzNDtUZXN0aW5nIFVJTlRfTUFYICYjNDM7IDEgd2lsbCBmYWlsIGFzIGV4cGVjdGVkIC4uLiAmIzM0OwotCXJlc2V0X3ZhbHMKLQlURVNUX1NUUj0kKCgkVUlOVF9NQVgmIzQzOzEpKQotCWVjaG8gLW4gJFRFU1RfU1RSICZndDsgJFRBUkdFVCAyJmd0OyAvZGV2L251bGwKJiM0MzsJbG9jYWwgdD0mIzM0OyR7U1lTQ1RMfS9pbnRfMDAwMSYjMzQ7CiYjNDM7CWxvY2FsIGJhc2VsaW5lPSYjMzQ7NjAmIzM0OyB2YWw9JiMzNDs2MSYjMzQ7CiAKLQlpZiB2ZXJpZnkgJiMzNDske1RBUkdFVH0mIzM0OzsgdGhlbgotCQllY2hvICYjMzQ7RkFJTCYjMzQ7ICZndDsmYW1wOzIKLQkJcmM9MQotCWVsc2UKLQkJZWNobyAmIzM0O09LJiMzNDsKLQlmaQotCXRlc3RfcmMKJiM0MzsJW1sgLWYgJiMzNDskdCYjMzQ7IF1dIHx8IHsgUkVUPSRLU0ZUX1NLSVA7IHJldHVybjsgfQogCi0JZWNobyAtbiAmIzM0O1Rlc3RpbmcgbmVnYXRpdmUgdmFsdWVzIHdpbGwgbm90IHdvcmsgYXMgZXhwZWN0ZWQgLi4uICYjMzQ7Ci0JcmVzZXRfdmFscwotCVRFU1RfU1RSPSYjMzQ7LTMmIzM0OwotCWVjaG8gLW4gJFRFU1RfU1RSICZndDsgJFRBUkdFVCAyJmd0OyAvZGV2L251bGwKLQotCWlmIHZlcmlmeSAmIzM0OyR7VEFSR0VUfSYjMzQ7OyB0aGVuCi0JCWVjaG8gJiMzNDtGQUlMJiMzNDsgJmd0OyZhbXA7MgotCQlyYz0xCi0JZWxzZQotCQllY2hvICYjMzQ7T0smIzM0OwotCWZpCi0JdGVzdF9yYwomIzQzOwlhc3NlcnRfd3JpdGVfcGF0dGVybnMgJiMzNDskdCYjMzQ7ICYjMzQ7JGJhc2VsaW5lJiMzNDsgJiMzNDskdmFsJiMzNDsgfHwgUkVUPSRLU0ZUX0ZBSUwKJiM0MzsJYXNzZXJ0X3dpZGVpbnRfd3JpdGVzX3JlamVjdGVkICYjMzQ7JHQmIzM0OyAmIzM0OyRiYXNlbGluZSYjMzQ7IHx8IFJFVD0kS1NGVF9GQUlMCiYjNDM7CWFzc2VydF9kaWdpdF9saW1pdCAmIzM0OyR0JiMzNDsgJiMzNDskYmFzZWxpbmUmIzM0OyB8fCBSRVQ9JEtTRlRfRkFJTAogfQogCi1ydW5fc3RyaW5ndGVzdHMoKQomIzQzO3Rlc3RfaW50X3BsYWluKCkKIHsKLQllY2hvIC1uICYjMzQ7V3JpdGluZyBlbnRpcmUgc3lzY3RsIGluIHNob3J0IHdyaXRlcyAuLi4gJiMzNDsKLQlzZXRfb3JpZwotCWRkIGlmPSYjMzQ7JHtURVNUX0ZJTEV9JiMzNDsgb2Y9JiMzNDske1RBUkdFVH0mIzM0OyBicz0xIDImZ3Q7L2Rldi9udWxsCi0JaWYgISB2ZXJpZnkgJiMzNDske1RBUkdFVH0mIzM0OzsgdGhlbgotCQllY2hvICYjMzQ7RkFJTCYjMzQ7ICZndDsmYW1wOzIKLQkJcmM9MQotCWVsc2UKLQkJZWNobyAmIzM0O09LJiMzNDsKLQlmaQomIzQzOwlsb2NhbCB0PSYjMzQ7JHtTWVNDVEx9L2ludF8wMDAyJiMzNDsKJiM0MzsJbG9jYWwgYmFzZWxpbmU9JiMzNDsxJiMzNDsgdmFsPSYjMzQ7MiYjMzQ7CiAKLQllY2hvIC1uICYjMzQ7V3JpdGluZyBtaWRkbGUgb2Ygc3lzY3RsIGFmdGVyIHVuc3luY2hyb25pemVkIHNlZWsgLi4uICYjMzQ7Ci0Jc2V0X3Rlc3QKLQlkZCBpZj0mIzM0OyR7VEVTVF9GSUxFfSYjMzQ7IG9mPSYjMzQ7JHtUQVJHRVR9JiMzNDsgYnM9MSBzZWVrPTEgMiZndDsvZGV2L251bGwKLQlpZiB2ZXJpZnkgJiMzNDske1RBUkdFVH0mIzM0OzsgdGhlbgotCQllY2hvICYjMzQ7RkFJTCYjMzQ7ICZndDsmYW1wOzIKLQkJcmM9MQotCWVsc2UKLQkJZWNobyAmIzM0O09LJiMzNDsKLQlmaQomIzQzOwlbWyAtZiAmIzM0OyR0JiMzNDsgXV0gfHwgeyBSRVQ9JEtTRlRfU0tJUDsgcmV0dXJuOyB9CiAKLQllY2hvIC1uICYjMzQ7Q2hlY2tpbmcgc3lzY3RsIG1heGxlbiBpcyBhdCBsZWFzdCAkTUFYTEVOIC4uLiAmIzM0OwotCXNldF9vcmlnCi0JcGVybCAtZSAmIzM5O3ByaW50ICYjMzQ7QSYjMzQ7IHggKCYjMzk7JiMzNDske01BWExFTn0mIzM0OyYjMzk7LTIpLCAmIzM0O0ImIzM0OzsmIzM5OyB8IFwKLQkJZGQgb2Y9JiMzNDske1RBUkdFVH0mIzM0OyBicz0mIzM0OyR7TUFYTEVOfSYjMzQ7IDImZ3Q7L2Rldi9udWxsCi0JaWYgISBncmVwIC1xIEIgJiMzNDske1RBUkdFVH0mIzM0OzsgdGhlbgotCQllY2hvICYjMzQ7RkFJTCYjMzQ7ICZndDsmYW1wOzIKLQkJcmM9MQotCWVsc2UKLQkJZWNobyAmIzM0O09LJiMzNDsKLQlmaQotCi0JZWNobyAtbiAmIzM0O0NoZWNraW5nIHN5c2N0bCBrZWVwcyBvcmlnaW5hbCBzdHJpbmcgb24gb3ZlcmZsb3cgYXBwZW5kIC4uLiAmIzM0OwotCXNldF9vcmlnCi0JcGVybCAtZSAmIzM5O3ByaW50ICYjMzQ7QSYjMzQ7IHggKCYjMzk7JiMzNDske01BWExFTn0mIzM0OyYjMzk7LTEpLCAmIzM0O0ImIzM0OzsmIzM5OyB8IFwKLQkJZGQgb2Y9JiMzNDske1RBUkdFVH0mIzM0OyBicz0kKCggTUFYTEVOIC0gMSApKSAyJmd0Oy9kZXYvbnVsbAotCWlmIGdyZXAgLXEgQiAmIzM0OyR7VEFSR0VUfSYjMzQ7OyB0aGVuCi0JCWVjaG8gJiMzNDtGQUlMJiMzNDsgJmd0OyZhbXA7MgotCQlyYz0xCi0JZWxzZQotCQllY2hvICYjMzQ7T0smIzM0OwotCWZpCi0KLQllY2hvIC1uICYjMzQ7Q2hlY2tpbmcgc3lzY3RsIHN0YXlzIE5VTEwgdGVybWluYXRlZCBvbiB3cml0ZSAuLi4gJiMzNDsKLQlzZXRfb3JpZwotCXBlcmwgLWUgJiMzOTtwcmludCAmIzM0O0EmIzM0OyB4ICgmIzM5OyYjMzQ7JHtNQVhMRU59JiMzNDsmIzM5Oy0xKSwgJiMzNDtCJiMzNDs7JiMzOTsgfCBcCi0JCWRkIG9mPSYjMzQ7JHtUQVJHRVR9JiMzNDsgYnM9JiMzNDske01BWExFTn0mIzM0OyAyJmd0Oy9kZXYvbnVsbAotCWlmIGdyZXAgLXEgQiAmIzM0OyR7VEFSR0VUfSYjMzQ7OyB0aGVuCi0JCWVjaG8gJiMzNDtGQUlMJiMzNDsgJmd0OyZhbXA7MgotCQlyYz0xCi0JZWxzZQotCQllY2hvICYjMzQ7T0smIzM0OwotCWZpCi0KLQllY2hvIC1uICYjMzQ7Q2hlY2tpbmcgc3lzY3RsIHN0YXlzIE5VTEwgdGVybWluYXRlZCBvbiBvdmVyd3JpdGUgLi4uICYjMzQ7Ci0Jc2V0X29yaWcKLQlwZXJsIC1lICYjMzk7cHJpbnQgJiMzNDtBJiMzNDsgeCAoJiMzOTsmIzM0OyR7TUFYTEVOfSYjMzQ7JiMzOTstMSksICYjMzQ7QkImIzM0OzsmIzM5OyB8IFwKLQkJZGQgb2Y9JiMzNDske1RBUkdFVH0mIzM0OyBicz0kKCggJE1BWExFTiAmIzQzOyAxICkpIDImZ3Q7L2Rldi9udWxsCi0JaWYgZ3JlcCAtcSBCICYjMzQ7JHtUQVJHRVR9JiMzNDs7IHRoZW4KLQkJZWNobyAmIzM0O0ZBSUwmIzM0OyAmZ3Q7JmFtcDsyCi0JCXJjPTEKLQllbHNlCi0JCWVjaG8gJiMzNDtPSyYjMzQ7Ci0JZmkKLQotCXRlc3RfcmMKJiM0MzsJYXNzZXJ0X3dyaXRlX3BhdHRlcm5zICYjMzQ7JHQmIzM0OyAmIzM0OyRiYXNlbGluZSYjMzQ7ICYjMzQ7JHZhbCYjMzQ7IHx8IFJFVD0kS1NGVF9GQUlMCiYjNDM7CWFzc2VydF93aWRlaW50X3dyaXRlc19yZWplY3RlZCAmIzM0OyR0JiMzNDsgJiMzNDskYmFzZWxpbmUmIzM0OyB8fCBSRVQ9JEtTRlRfRkFJTAomIzQzOwlhc3NlcnRfZGlnaXRfbGltaXQgJiMzNDskdCYjMzQ7ICYjMzQ7JGJhc2VsaW5lJiMzNDsgfHwgUkVUPSRLU0ZUX0ZBSUwKJiM0MzsJYXNzZXJ0X2ludF9yYW5nZSAmIzM0OyR0JiMzNDsgJiMzNDskYmFzZWxpbmUmIzM0OyB8fCBSRVQ9JEtTRlRfRkFJTAogfQogCi10YXJnZXRfZXhpc3RzKCkKJiM0Mzt0ZXN0X3VpbnRfcGxhaW4oKQogewotCVRBUkdFVD0mIzM0OyR7U1lTQ1RMfS8kMSYjMzQ7Ci0JVEVTVF9JRD0mIzM0OyQyJiMzNDsKJiM0MzsJbG9jYWwgdD0mIzM0OyR7U1lTQ1RMfS91aW50XzAwMDEmIzM0OwomIzQzOwlsb2NhbCBiYXNlbGluZT0mIzM0OzMxNCYjMzQ7IHZhbD0mIzM0OzMxNSYjMzQ7CiAKLQlpZiBbICEgLWYgJHtUQVJHRVR9IF0gOyB0aGVuCi0JCXJldHVybiAwCi0JZmkKLQlyZXR1cm4gMQotfQomIzQzOwlbWyAtZiAmIzM0OyR0JiMzNDsgXV0gfHwgeyBSRVQ9JEtTRlRfU0tJUDsgcmV0dXJuOyB9CiAKLXJ1bl9iaXRtYXB0ZXN0KCkgewotCSMgVG90YWwgbGVuZ3RoIG9mIGJpdG1hcHMgc3RyaW5nIHRvIHVzZSwgYSBiaXQgdW5kZXIKLQkjIHRoZSBtYXhpbXVtIGlucHV0IHNpemUgb2YgdGhlIHRlc3Qgbm9kZQotCUxFTkdUSD0kKChSQU5ET00gJSA2NTAwMCkpCiYjNDM7CWFzc2VydF93cml0ZV9wYXR0ZXJucyAmIzM0OyR0JiMzNDsgJiMzNDskYmFzZWxpbmUmIzM0OyAmIzM0OyR2YWwmIzM0OyB8fCBSRVQ9JEtTRlRfRkFJTAomIzQzOwlhc3NlcnRfd2lkZWludF93cml0ZXNfcmVqZWN0ZWQgJiMzNDskdCYjMzQ7ICYjMzQ7JGJhc2VsaW5lJiMzNDsgfHwgUkVUPSRLU0ZUX0ZBSUwKJiM0MzsJYXNzZXJ0X2RpZ2l0X2xpbWl0ICYjMzQ7JHQmIzM0OyAmIzM0OyRiYXNlbGluZSYjMzQ7IHx8IFJFVD0kS1NGVF9GQUlMCiYjNDM7CWFzc2VydF91aW50X3JhbmdlICYjMzQ7JHQmIzM0OyAmIzM0OyRiYXNlbGluZSYjMzQ7IHx8IFJFVD0kS1NGVF9GQUlMCiYjNDM7fQogCi0JIyBGaXJzdCBiaXQgdG8gc2V0Ci0JQklUPSQoKFJBTkRPTSAlIDEwMjQpKQomIzQzOyMgcHJvY19kb3N0cmluZygpLXNwZWNpZmljIHdyaXRlIHBhdHRlcm5zCiYjNDM7YXNzZXJ0X3N0cmluZ193cml0ZV9wYXR0ZXJucygpICAjICZsdDtmaWxlJmd0OyAmbHQ7YmFzZWxpbmUmZ3Q7ICZsdDt2YWwmZ3Q7ICZsdDttYXhsZW4mZ3Q7CiYjNDM7ewomIzQzOwlsb2NhbCBmaWxlPSQxIGJhc2VsaW5lPSQyIHZhbD0kMyBtYXhsZW49JDQgc3RhdHVzPTAKIAotCSMgU3RyaW5nIGNvbnRhaW5pbmcgb3VyIGxpc3Qgb2YgYml0cyB0byBzZXQKLQlURVNUX1NUUj0kQklUCiYjNDM7CXByaW50ZiAmIzM5OyVzJiMzOTsgJiMzNDskYmFzZWxpbmUmIzM0OyAmZ3Q7ICYjMzQ7JGZpbGUmIzM0OwomIzQzOwl3cml0ZV9pbl9jaHVua3MgJiMzNDskZmlsZSYjMzQ7ICYjMzQ7JHZhbCYjMzQ7IDEKJiM0MzsJYXNzZXJ0X2NvbnRlbnQgJiMzNDskZmlsZSYjMzQ7ICYjMzQ7JHZhbCYjMzQ7IHx8IHN0YXR1cz0xCiAKLQkjIGJ1aWxkIHVwIHRoZSBzdHJpbmcKLQl3aGlsZSBbICYjMzQ7JHsjVEVTVF9TVFJ9JiMzNDsgLWxlICYjMzQ7JExFTkdUSCYjMzQ7IF07IGRvCi0JCSMgTWFrZSBzdXJlIG5leHQgZW50cnkgaXMgZGlzY29udGlndW91cywKLQkJIyBza2lwIGFoZWFkIGF0IGxlYXN0IDIKLQkJQklUPSQoKEJJVCAmIzQzOyAkKCgyICYjNDM7IFJBTkRPTSAlIDEwKSkpKQomIzQzOwlwcmludGYgJiMzOTslcyYjMzk7ICYjMzQ7JHZhbCYjMzQ7ICZndDsgJiMzNDskZmlsZSYjMzQ7CiYjNDM7CXdyaXRlX2F0X29mZnNldCAmIzM0OyRmaWxlJiMzNDsgJiMzNDskdmFsJiMzNDsgMSAxCiYjNDM7CWFzc2VydF9jb250ZW50X3JlamVjdGVkICYjMzQ7JGZpbGUmIzM0OyAmIzM0OyR2YWwmIzM0OyB8fCBzdGF0dXM9MQogCi0JCSMgQWRkIG5ldyBiaXQgdG8gdGhlIGxpc3QKLQkJVEVTVF9TVFI9JiMzNDske1RFU1RfU1RSfSwke0JJVH0mIzM0OwomIzQzOwkjIHN5c2N0bCBtYXhsZW4gaXMgYXQgbGVhc3QgJG1heGxlbgomIzQzOwlwcmludGYgJiMzOTslcyYjMzk7ICYjMzQ7JGJhc2VsaW5lJiMzNDsgJmd0OyAmIzM0OyRmaWxlJiMzNDsKJiM0MzsJd3JpdGVfb3ZlcmxvbmcgJiMzNDskZmlsZSYjMzQ7ICYjMzQ7JCgobWF4bGVuIC0gMikpJiMzNDsgJiMzNDtCJiMzNDsgJiMzNDskbWF4bGVuJiMzNDsKJiM0MzsJYXNzZXJ0X2dyZXAgJiMzNDskZmlsZSYjMzQ7ICYjMzQ7QiYjMzQ7IHx8IHN0YXR1cz0xCiAKLQkJIyBSYW5kb21seSBtYWtlIGl0IGEgcmFuZ2UKLQkJaWYgWyAmIzM0OyQoKFJBTkRPTSAlIDIpKSYjMzQ7IC1lcSAmIzM0OzEmIzM0OyBdOyB0aGVuCi0JCQlSQU5HRV9FTkQ9JCgoQklUICYjNDM7ICQoKDEgJiM0MzsgUkFORE9NICUgMTApKSkpCi0JCQlURVNUX1NUUj0mIzM0OyR7VEVTVF9TVFJ9LSR7UkFOR0VfRU5EfSYjMzQ7Ci0JCQlCSVQ9JFJBTkdFX0VORAotCQlmaQotCWRvbmUKJiM0MzsJIyBrZWVwIG9yaWdpbmFsIHN0cmluZyBvbiBvdmVyZmxvdyBhcHBlbmQKJiM0MzsJcHJpbnRmICYjMzk7JXMmIzM5OyAmIzM0OyRiYXNlbGluZSYjMzQ7ICZndDsgJiMzNDskZmlsZSYjMzQ7CiYjNDM7CXdyaXRlX292ZXJsb25nICYjMzQ7JGZpbGUmIzM0OyAmIzM0OyQoKG1heGxlbiAtIDEpKSYjMzQ7ICYjMzQ7QiYjMzQ7ICYjMzQ7JCgobWF4bGVuIC0gMSkpJiMzNDsKJiM0MzsJYXNzZXJ0X2dyZXBfYWJzZW50ICYjMzQ7JGZpbGUmIzM0OyAmIzM0O0ImIzM0OyB8fCBzdGF0dXM9MQogCi0JZWNobyAtbiAmIzM0O0NoZWNraW5nIGJpdG1hcCBoYW5kbGVyIC4uLiAmIzM0OwotCVRFU1RfRklMRT0kKG1rdGVtcCkKLQllY2hvIC1uICYjMzQ7JFRFU1RfU1RSJiMzNDsgJmd0OyAkVEVTVF9GSUxFCiYjNDM7CSMgc3lzY3RsIHN0YXlzIE5VTEwgdGVybWluYXRlZCBvbiB3cml0ZQomIzQzOwlwcmludGYgJiMzOTslcyYjMzk7ICYjMzQ7JGJhc2VsaW5lJiMzNDsgJmd0OyAmIzM0OyRmaWxlJiMzNDsKJiM0MzsJd3JpdGVfb3ZlcmxvbmcgJiMzNDskZmlsZSYjMzQ7ICYjMzQ7JCgobWF4bGVuIC0gMSkpJiMzNDsgJiMzNDtCJiMzNDsgJiMzNDskbWF4bGVuJiMzNDsKJiM0MzsJYXNzZXJ0X2dyZXBfYWJzZW50ICYjMzQ7JGZpbGUmIzM0OyAmIzM0O0ImIzM0OyB8fCBzdGF0dXM9MQogCi0JY2F0ICRURVNUX0ZJTEUgJmd0OyAkVEFSR0VUIDImZ3Q7IC9kZXYvbnVsbAotCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgotCQllY2hvICYjMzQ7RkFJTCYjMzQ7ICZndDsmYW1wOzIKLQkJcmM9MQotCQl0ZXN0X3JjCi0JZmkKJiM0MzsJIyBzeXNjdGwgc3RheXMgTlVMTCB0ZXJtaW5hdGVkIG9uIG92ZXJ3cml0ZQomIzQzOwlwcmludGYgJiMzOTslcyYjMzk7ICYjMzQ7JGJhc2VsaW5lJiMzNDsgJmd0OyAmIzM0OyRmaWxlJiMzNDsKJiM0MzsJd3JpdGVfb3ZlcmxvbmcgJiMzNDskZmlsZSYjMzQ7ICYjMzQ7JCgobWF4bGVuIC0gMSkpJiMzNDsgJiMzNDtCQiYjMzQ7ICYjMzQ7JCgobWF4bGVuICYjNDM7IDEpKSYjMzQ7CiYjNDM7CWFzc2VydF9ncmVwX2Fic2VudCAmIzM0OyRmaWxlJiMzNDsgJiMzNDtCJiMzNDsgfHwgc3RhdHVzPTEKIAotCWlmICEgdmVyaWZ5X2RpZmZfcHJvY19maWxlICYjMzQ7JFRBUkdFVCYjMzQ7ICYjMzQ7JFRFU1RfRklMRSYjMzQ7OyB0aGVuCi0JCWVjaG8gJiMzNDtGQUlMJiMzNDsgJmd0OyZhbXA7MgotCQlyYz0xCi0JZWxzZQotCQllY2hvICYjMzQ7T0smIzM0OwotCQlyYz0wCi0JZmkKLQl0ZXN0X3JjCiYjNDM7CXJldHVybiAmIzM0OyRzdGF0dXMmIzM0OwogfQogCi1zeXNjdGxfdGVzdF8wMDAxKCkKJiM0Mzt0ZXN0X3N0cmluZ19kb3N0cmluZygpCiB7Ci0JVEFSR0VUPSYjMzQ7JHtTWVNDVEx9LyQoZ2V0X3Rlc3RfdGFyZ2V0IDAwMDEpJiMzNDsKLQlyZXNldF92YWxzCi0JT1JJRz0kKGNhdCAmIzM0OyR7VEFSR0VUfSYjMzQ7KQotCVRFU1RfU1RSPSQoKCAkT1JJRyAmIzQzOyAxICkpCi0KLQlydW5fbnVtZXJpY3Rlc3RzCi0JcnVuX3dpZGVpbnRfdGVzdHMKLQlydW5fbGltaXRfZGlnaXQKLX0KJiM0MzsJbG9jYWwgdD0mIzM0OyR7U1lTQ1RMfS9zdHJpbmdfMDAwMSYjMzQ7CiYjNDM7CWxvY2FsIGJhc2VsaW5lPSYjMzQ7KG5vbmUpJiMzNDsgdmFsPSYjMzQ7VGVzdGluZyBzeXNjdGwmIzM0OyBtYXhsZW49NjUKIAotc3lzY3RsX3Rlc3RfMDAwMigpCi17Ci0JVEFSR0VUPSYjMzQ7JHtTWVNDVEx9LyQoZ2V0X3Rlc3RfdGFyZ2V0IDAwMDIpJiMzNDsKLQlyZXNldF92YWxzCi0JT1JJRz0kKGNhdCAmIzM0OyR7VEFSR0VUfSYjMzQ7KQotCVRFU1RfU1RSPSYjMzQ7VGVzdGluZyBzeXNjdGwmIzM0OwotCSMgT25seSBzdHJpbmcgc3lzY3RscyBzdXBwb3J0IHNlZWtpbmcvYXBwZW5kaW5nLgotCU1BWExFTj02NQotCi0JcnVuX251bWVyaWN0ZXN0cwotCXJ1bl9zdHJpbmd0ZXN0cwotfQomIzQzOwlbWyAtZiAmIzM0OyR0JiMzNDsgXV0gfHwgeyBSRVQ9JEtTRlRfU0tJUDsgcmV0dXJuOyB9CiAKLXN5c2N0bF90ZXN0XzAwMDMoKQotewotCVRBUkdFVD0mIzM0OyR7U1lTQ1RMfS8kKGdldF90ZXN0X3RhcmdldCAwMDAzKSYjMzQ7Ci0JcmVzZXRfdmFscwotCU9SSUc9JChjYXQgJiMzNDske1RBUkdFVH0mIzM0OykKLQlURVNUX1NUUj0kKCggJE9SSUcgJiM0MzsgMSApKQotCi0JcnVuX251bWVyaWN0ZXN0cwotCXJ1bl93aWRlaW50X3Rlc3RzCi0JcnVuX2xpbWl0X2RpZ2l0Ci0JcnVuX2xpbWl0X2RpZ2l0X2ludAomIzQzOwlhc3NlcnRfd3JpdGVfcGF0dGVybnMgJiMzNDskdCYjMzQ7ICYjMzQ7JGJhc2VsaW5lJiMzNDsgJiMzNDskdmFsJiMzNDsgfHwgUkVUPSRLU0ZUX0ZBSUwKJiM0MzsJYXNzZXJ0X3N0cmluZ193cml0ZV9wYXR0ZXJucyAmIzM0OyR0JiMzNDsgJiMzNDskYmFzZWxpbmUmIzM0OyAmIzM0OyR2YWwmIzM0OyAmIzM0OyRtYXhsZW4mIzM0OyB8fCBSRVQ9JEtTRlRfRkFJTAogfQogCi1zeXNjdGxfdGVzdF8wMDA0KCkKJiM0MzsjIEVtaXQgYSByYW5kb20gc3lzY3RsIGJpdCBtYXAKJiM0MztyYW5kb21fYml0bWFwX3NwZWMoKQogewotCVRBUkdFVD0mIzM0OyR7U1lTQ1RMfS8kKGdldF90ZXN0X3RhcmdldCAwMDA0KSYjMzQ7Ci0JcmVzZXRfdmFscwotCU9SSUc9JChjYXQgJiMzNDske1RBUkdFVH0mIzM0OykKLQlURVNUX1NUUj0kKCggJE9SSUcgJiM0MzsgMSApKQotCi0JcnVuX251bWVyaWN0ZXN0cwotCXJ1bl93aWRlaW50X3Rlc3RzCi0JcnVuX2xpbWl0X2RpZ2l0Ci0JcnVuX2xpbWl0X2RpZ2l0X3VpbnQKLX0KJiM0MzsJbG9jYWwgbGVuZ3RoPSQoKFJBTkRPTSAlIDY1MDAwKSkKJiM0MzsJbG9jYWwgYml0PSQoKFJBTkRPTSAlIDEwMjQpKQomIzQzOwlsb2NhbCBzcGVjPSRiaXQKJiM0MzsJbG9jYWwgcmFuZ2VfZW5kCiAKLXN5c2N0bF90ZXN0XzAwMDUoKQotewotCVRBUkdFVD0mIzM0OyR7U1lTQ1RMfS8kKGdldF90ZXN0X3RhcmdldCAwMDA1KSYjMzQ7Ci0JcmVzZXRfdmFscwotCU9SSUc9JChjYXQgJiMzNDske1RBUkdFVH0mIzM0OykKJiM0MzsJd2hpbGUgWyAmIzM0OyR7I3NwZWN9JiMzNDsgLWxlICYjMzQ7JGxlbmd0aCYjMzQ7IF07IGRvCiYjNDM7CQkjIEtlZXAgZW50cmllcyBkaXNjb250aWd1b3VzLCBza2lwIGFoZWFkIGJ5IGF0IGxlYXN0IDIuCiYjNDM7CQliaXQ9JCgoYml0ICYjNDM7IDIgJiM0MzsgUkFORE9NICUgMTApKQomIzQzOwkJc3BlYz0mIzM0OyR7c3BlY30sJHtiaXR9JiMzNDsKIAotCXJ1bl9saW1pdF9kaWdpdF9pbnRfYXJyYXkKLX0KJiM0MzsJCWlmIFsgJiMzNDskKChSQU5ET00gJSAyKSkmIzM0OyAtZXEgMSBdOyB0aGVuCiYjNDM7CQkJcmFuZ2VfZW5kPSQoKGJpdCAmIzQzOyAxICYjNDM7IFJBTkRPTSAlIDEwKSkKJiM0MzsJCQlzcGVjPSYjMzQ7JHtzcGVjfS0ke3JhbmdlX2VuZH0mIzM0OwomIzQzOwkJCWJpdD0kcmFuZ2VfZW5kCiYjNDM7CQlmaQomIzQzOwlkb25lCiAKLXN5c2N0bF90ZXN0XzAwMDYoKQotewotCVRBUkdFVD0mIzM0OyR7U1lTQ1RMfS8kKGdldF90ZXN0X3RhcmdldCAwMDA2KSYjMzQ7Ci0JcmVzZXRfdmFscwotCU9SSUc9JiMzNDsmIzM0OwotCXJ1bl9iaXRtYXB0ZXN0CiYjNDM7CWVjaG8gLW4gJiMzNDskc3BlYyYjMzQ7CiB9CiAKLXN5c2N0bF90ZXN0XzAwMDcoKQomIzQzOyMgRG8gKm5vdCogcHJlZml4IHdpdGggJiMzNDt0ZXN0XyYjMzQ7LiBBbGwgYXV0b2dlbmVyYXRlIGJpdG1hcCB0ZXN0cyBjYWxsIHRoaXMgaGVscGVyCiYjNDM7Yml0bWFwX3JhbmdlX2NoZWNrX29uY2UoKSAgIyAmbHQ7aXRlciZndDsKIHsKLQlUQVJHRVQ9JiMzNDske1NZU0NUTH0vJChnZXRfdGVzdF90YXJnZXQgMDAwNykmIzM0OwotCWVjaG8gLW4gJiMzNDtUZXN0aW5nIGlmICRUQVJHRVQgaXMgc2V0IHRvIDEgLi4uICYjMzQ7CiYjNDM7CWxvY2FsIHQ9JiMzNDske1NZU0NUTH0vYml0bWFwXzAwMDEmIzM0OwomIzQzOwlsb2NhbCBzcGVjX2ZpbGUgc2VlZAogCi0JaWYgWyAhIC1mICRUQVJHRVQgXTsgdGhlbgotCQllY2hvIC1lICYjMzQ7U0tJUFBJTkdcbiRUQVJHRVQgaXMgbm90IHByZXNlbnQmIzM0OwotCQlyZXR1cm4gJGtzZnRfc2tpcAotCWZpCi0KLQlpZiBbIC1kICRESVIgXTsgdGhlbgotCQllY2hvIC1lICYjMzQ7U0tJUFBJTkdcblRlc3Qgb25seSBwb3NzaWJsZSBpZiBzeXNjdGxfdGVzdCBpcyBidWlsdC1pbiwgbm90IG1vZHVsZTomIzM0OwotCQljYXQgJFRFU1RfRElSL2NvbmZpZyAmZ3Q7JmFtcDsyCi0JCXJldHVybiAka3NmdF9za2lwCi0JZmkKJiM0MzsJW1sgLWYgJiMzNDskdCYjMzQ7IF1dIHx8IHsgUkVUPSRLU0ZUX1NLSVA7IHJldHVybjsgfQogCi0JT1JJRz0kKGNhdCAmIzM0OyR7VEFSR0VUfSYjMzQ7KQomIzQzOwlzZWVkPSQoKEJJVE1BUF9TRUVEICYjNDM7ICQxKSkKJiM0MzsJUkFORE9NPSRzZWVkCiAKLQlpZiBbIHgkT1JJRyA9ICYjMzQ7eDEmIzM0OyBdOyB0aGVuCi0JCWVjaG8gJiMzNDtPSyYjMzQ7Ci0JCXJldHVybiAwCi0JZmkKJiM0MzsJc3BlY19maWxlPSQobWt0ZW1wKQomIzQzOwlyYW5kb21fYml0bWFwX3NwZWMgJmd0OyAmIzM0OyRzcGVjX2ZpbGUmIzM0OwogCi0JaWYgWyAhIC1mIC9wcm9jL2NtZGxpbmUgXTsgdGhlbgotCQllY2hvIC1lICYjMzQ7U0tJUFBJTkdcblRoZXJlIGlzIG5vIC9wcm9jL2NtZGxpbmUgdG8gY2hlY2sgZm9yIHBhcmFtZXRlciYjMzQ7Ci0JCXJldHVybiAka3NmdF9za2lwCiYjNDM7CWlmICEgY2F0ICYjMzQ7JHNwZWNfZmlsZSYjMzQ7ICZndDsgJiMzNDskdCYjMzQ7IDImZ3Q7L2Rldi9udWxsOyB0aGVuCiYjNDM7CQlrdGFwX3ByaW50X21zZyAmIzM0OyR0OiB3cml0ZSBvZiByYW5kb20gYml0bWFwIHNwZWMgcmVqZWN0ZWQgKHNlZWQgJHNlZWQpJiMzNDsKJiM0MzsJCVJFVD0kS1NGVF9GQUlMCiYjNDM7CWVsaWYgISBhc3NlcnRfZGlmZl9wcm9jX2ZpbGUgJiMzNDskdCYjMzQ7ICYjMzQ7JHNwZWNfZmlsZSYjMzQ7OyB0aGVuCiYjNDM7CQlrdGFwX3ByaW50X21zZyAmIzM0OyR0OiByZWFkYmFjayBtaXNtYXRjaCAoc2VlZCAkc2VlZCkmIzM0OwomIzQzOwkJUkVUPSRLU0ZUX0ZBSUwKIAlmaQogCi0JRk9VTkQ9JChncmVwIC1jICYjMzQ7c3lzY3RsWy4vXWRlYnVnWy4vXXRlc3Rfc3lzY3RsWy4vXWJvb3RfaW50PTEmIzM0OyAvcHJvYy9jbWRsaW5lKQotCWlmIFsgJEZPVU5EID0gJiMzNDsxJiMzNDsgXTsgdGhlbgotCQllY2hvIC1lICYjMzQ7RkFJTFxuS2VybmVsIHBhcmFtIGZvdW5kIGJ1dCAkVEFSR0VUIGlzIG5vdCAxLiYjMzQ7ICZndDsmYW1wOzIKLQkJcmM9MQotCQl0ZXN0X3JjCi0JZmkKLQotCWVjaG8gLWUgJiMzNDtTS0lQUElOR1xuRXhwZWN0ZWQga2VybmVsIHBhcmFtZXRlciBtaXNzaW5nLiYjMzQ7Ci0JZWNobyAmIzM0O0tlcm5lbCBtdXN0IGJlIGJvb3RlZCB3aXRoIHBhcmFtZXRlcjogc3lzY3RsLmRlYnVnLnRlc3Rfc3lzY3RsLmJvb3RfaW50PTEmIzM0OwotCXJldHVybiAka3NmdF9za2lwCiYjNDM7CXJtIC1mICYjMzQ7JHNwZWNfZmlsZSYjMzQ7CiB9CiAKLXN5c2N0bF90ZXN0XzAwMDgoKQomIzQzO3Rlc3RfdW5yZWdpc3Rlcl9yZW1vdmVzX2RpcigpCiB7Ci0JVEFSR0VUPSYjMzQ7JHtTWVNDVEx9LyQoZ2V0X3Rlc3RfdGFyZ2V0IDAwMDgpJiMzNDsKLQllY2hvIC1uICYjMzQ7VGVzdGluZyBpZiAkVEFSR0VUIGlzIG1hdGNoZWQgaW4ga2VybmVsIC4uLiAmIzM0OwomIzQzOwlsb2NhbCB0PSYjMzQ7JHtTWVNDVEx9L3VucmVnaXN0ZXJfZXJyb3ImIzM0OwogCi0JaWYgWyAhIC1mICRUQVJHRVQgXTsgdGhlbgotCQllY2hvIC1lICYjMzQ7U0tJUFBJTkdcbiRUQVJHRVQgaXMgbm90IHByZXNlbnQmIzM0OwotCQlyZXR1cm4gJGtzZnRfc2tpcAomIzQzOwlpZiBbWyAtZCAmIzM0OyR0JiMzNDsgXV07IHRoZW4KJiM0MzsJCWt0YXBfcHJpbnRfbXNnICYjMzQ7JHQ6IGRpcmVjdG9yeSBzdGlsbCBleGlzdHMsIGV4cGVjdGVkIGl0IHRvIGJlIHVucmVnaXN0ZXJlZCYjMzQ7CiYjNDM7CQlSRVQ9JEtTRlRfRkFJTAogCWZpCiYjNDM7fQogCi0JT1JJR19WQUxVRT0kKGNhdCAmIzM0OyR7VEFSR0VUfSYjMzQ7KQomIzQzO3Rlc3RfbW91bnRfcG9pbnRfZXJyb3IoKQomIzQzO3sKJiM0MzsJbG9jYWwgdD0mIzM0OyR7U1lTQ1RMfS9tbnQvbW50X2Vycm9yJiMzNDsKIAotCWlmIFsgJE9SSUdfVkFMVUUgLW5lIDEgXTsgdGhlbgotCQllY2hvICYjMzQ7RkFJTCYjMzQ7ICZndDsmYW1wOzIKLQkJcmM9MQotCQl0ZXN0X3JjCiYjNDM7CWlmIFtbIC1kICYjMzQ7JHQmIzM0OyBdXTsgdGhlbgomIzQzOwkJa3RhcF9wcmludF9tc2cgJiMzNDskdDogZGlyZWN0b3J5IHVuZXhwZWN0ZWRseSBjcmVhdGVkJiMzNDsKJiM0MzsJCVJFVD0kS1NGVF9GQUlMCiAJZmkKLQotCWVjaG8gJiMzNDtPSyYjMzQ7Ci0JcmV0dXJuIDAKIH0KIAotc3lzY3RsX3Rlc3RfMDAwOSgpCiYjNDM7dGVzdF9lbXB0eV9kaXJfcmVnaXN0cmF0aW9uKCkKIHsKLQlUQVJHRVQ9JiMzNDske1NZU0NUTH0vJChnZXRfdGVzdF90YXJnZXQgMDAwOSkmIzM0OwotCWVjaG8gLW4gJiMzNDtUZXN0aW5nIGlmICRUQVJHRVQgdW5yZWdpc3RlcmVkIGNvcnJlY3RseSAuLi4gJiMzNDsKLQlpZiBbIC1kICRUQVJHRVQgXTsgdGhlbgotCQllY2hvICYjMzQ7RkFJTCYjMzQ7ICZndDsmYW1wOzIKLQkJcmM9MQotCQl0ZXN0X3JjCi0JZmkKJiM0MzsJbG9jYWwgdD0mIzM0OyR7U1lTQ1RMfS9lbXB0eV9hZGQmIzM0OwogCi0JZWNobyAmIzM0O09LJiMzNDsKLQlyZXR1cm4gMAomIzQzOwlpZiBbWyAhIC1kICYjMzQ7JHQmIzM0OyBdXTsgdGhlbgomIzQzOwkJa3RhcF9wcmludF9tc2cgJiMzNDskdDogZGlyZWN0b3J5IHdhcyBub3QgY3JlYXRlZCYjMzQ7CiYjNDM7CQlSRVQ9JEtTRlRfRkFJTAomIzQzOwkJcmV0dXJuCiYjNDM7CWZpCiYjNDM7CWlmIFtbICEgLWQgJiMzNDskdC9lbXB0eSYjMzQ7IF1dOyB0aGVuCiYjNDM7CQlrdGFwX3ByaW50X21zZyAmIzM0OyR0L2VtcHR5OiBkaXJlY3Rvcnkgd2FzIG5vdCBjcmVhdGVkJiMzNDsKJiM0MzsJCVJFVD0kS1NGVF9GQUlMCiYjNDM7CWZpCiB9CiAKLXN5c2N0bF90ZXN0XzAwMTAoKQomIzQzO3Rlc3RfdThfcmFuZ2VfY2hlY2soKQogewotCVRBUkdFVD0mIzM0OyR7U1lTQ1RMfS8kKGdldF90ZXN0X3RhcmdldCAwMDEwKSYjMzQ7Ci0JZWNobyAtbiAmIzM0O1Rlc3RpbmcgdGhhdCAkVEFSR0VUIHdhcyBub3QgY3JlYXRlZCAuLi4gJiMzNDsKLQlpZiBbIC1kICRUQVJHRVQgXTsgdGhlbgotCQllY2hvICYjMzQ7RkFJTCYjMzQ7ICZndDsmYW1wOzIKLQkJcmM9MQotCQl0ZXN0X3JjCiYjNDM7CWxvY2FsIHQ9JiMzNDske1NZU0NUTH0vdThfdmFsaWQmIzM0OwomIzQzOwomIzQzOwlpZiBbWyAhIC1mICYjMzQ7JHQmIzM0OyBdXTsgdGhlbgomIzQzOwkJa3RhcF9wcmludF9tc2cgJiMzNDskdDogZmlsZSB3YXMgbm90IGNyZWF0ZWQmIzM0OwomIzQzOwkJUkVUPSRLU0ZUX0ZBSUwKJiM0MzsJCXJldHVybgogCWZpCiAKLQllY2hvICYjMzQ7T0smIzM0OwotCXJldHVybiAwCiYjNDM7CWFzc2VydF9kbWVzZ19jb3VudCAmIzM0O3U4X292ZXIgcmFuZ2UgdmFsdWUmIzM0OyAxIHx8IFJFVD0kS1NGVF9GQUlMCiYjNDM7CWFzc2VydF9kbWVzZ19jb3VudCAmIzM0O3U4X3VuZGVyIHJhbmdlIHZhbHVlJiMzNDsgMSB8fCBSRVQ9JEtTRlRfRkFJTAogfQogCi1zeXNjdGxfdGVzdF8wMDExKCkKJiM0Mzt0ZXN0X2Jvb3RfcGFyYW1faW50KCkKIHsKLQlUQVJHRVQ9JiMzNDske1NZU0NUTH0vJChnZXRfdGVzdF90YXJnZXQgMDAxMSkmIzM0OwotCWVjaG8gLW4gJiMzNDtUZXN0aW5nIGVtcHR5IGRpciBoYW5kbGluZyBpbiAke1RBUkdFVH0gLi4uICYjMzQ7Ci0JaWYgWyAhIC1kICR7VEFSR0VUfSBdOyB0aGVuCi0JCWVjaG8gLWUgJiMzNDtGQUlMXG5Db3VsZCBub3QgY3JlYXRlICR7VEFSR0VUfSYjMzQ7ICZndDsmYW1wOzIKLQkJcmM9MQotCQl0ZXN0X3JjCi0JZmkKJiM0MzsJbG9jYWwgdD0mIzM0OyR7U1lTQ1RMfS9ib290X2ludCYjMzQ7CiYjNDM7CWxvY2FsIG9yaWcgZm91bmQKIAotCVRBUkdFVDI9JiMzNDske1RBUkdFVH0vZW1wdHkmIzM0OwotCWlmIFsgISAtZCAke1RBUkdFVDJ9IF07IHRoZW4KLQkJZWNobyAtZSAmIzM0O0ZBSUxcbkNvdWxkIG5vdCBjcmVhdGUgJHtUQVJHRVQyfSYjMzQ7ICZndDsmYW1wOzIKLQkJcmM9MQotCQl0ZXN0X3JjCi0JZmkKJiM0MzsJW1sgLWYgJiMzNDskdCYjMzQ7IF1dIHx8IHsgUkVUPSRLU0ZUX1NLSVA7IHJldHVybjsgfQogCi0JZWNobyAmIzM0O09LJiMzNDsKLQlyZXR1cm4gMAotfQomIzQzOwkjIEJvb3QgY21kbGluZSBwYXJhbXMgb25seSBhcHBseSB3aGVuIHRlc3Rfc3lzY3RsIGlzIGJ1aWx0IGluLCBub3QKJiM0MzsJIyBsb2FkZWQgYXMgYSBtb2R1bGUuCiYjNDM7CWlmIFtbIC1kICYjMzQ7JE1PRFVMRV9ESVImIzM0OyBdXTsgdGhlbgomIzQzOwkJa3RhcF9wcmludF9tc2cgJiMzNDskdDogdGVzdCBvbmx5IHBvc3NpYmxlIGlmIHRlc3Rfc3lzY3RsIGlzIGJ1aWx0LWluLCBub3QgYSBtb2R1bGUmIzM0OwomIzQzOwkJUkVUPSRLU0ZUX1NLSVAKJiM0MzsJCXJldHVybgomIzQzOwlmaQogCi1zeXNjdGxfdGVzdF8wMDEyKCkKLXsKLQlUQVJHRVQ9JiMzNDske1NZU0NUTH0vJChnZXRfdGVzdF90YXJnZXQgMDAxMikmIzM0OwotCWVjaG8gLW4gJiMzNDtUZXN0aW5nIHU4IHJhbmdlIGNoZWNrIGluIHN5c2N0bCB0YWJsZSBjaGVjayBpbiAke1RBUkdFVH0gLi4uICYjMzQ7Ci0JaWYgWyAhIC1mICR7VEFSR0VUfSBdOyB0aGVuCi0JCWVjaG8gLWUgJiMzNDtGQUlMXG5Db3VsZCBub3QgY3JlYXRlICR7VEFSR0VUfSYjMzQ7ICZndDsmYW1wOzIKLQkJcmM9MQotCQl0ZXN0X3JjCiYjNDM7CW9yaWc9JChjYXQgJiMzNDskdCYjMzQ7KQomIzQzOwlpZiBbWyAmIzM0OyRvcmlnJiMzNDsgPT0gJiMzNDsxJiMzNDsgXV07IHRoZW4KJiM0MzsJCXJldHVybgogCWZpCiAKLQlsb2NhbCB1OG92ZXJfbXNnPSQoZG1lc2cgfCBncmVwICYjMzQ7dThfb3ZlciByYW5nZSB2YWx1ZSYjMzQ7IHwgd2MgLWwpCi0JaWYgWyAhICR7dThvdmVyX21zZ30gLWVxIDEgXTsgdGhlbgotCQllY2hvIC1lICYjMzQ7RkFJTFxudTggb3ZlcmZsb3cgbm90IGRldGVjdGVkJiMzNDsgJmd0OyZhbXA7MgotCQlyYz0xCi0JCXRlc3RfcmMKJiM0MzsJaWYgW1sgISAtZiAvcHJvYy9jbWRsaW5lIF1dOyB0aGVuCiYjNDM7CQlrdGFwX3ByaW50X21zZyAmIzM0OyR0OiBubyAvcHJvYy9jbWRsaW5lIHRvIGNoZWNrIGZvciB0aGUgYm9vdCBwYXJhbWV0ZXImIzM0OwomIzQzOwkJUkVUPSRLU0ZUX1NLSVAKJiM0MzsJCXJldHVybgogCWZpCiAKLQlsb2NhbCB1OHVuZGVyX21zZz0kKGRtZXNnIHwgZ3JlcCAmIzM0O3U4X3VuZGVyIHJhbmdlIHZhbHVlJiMzNDsgfCB3YyAtbCkKLQlpZiBbICEgJHt1OHVuZGVyX21zZ30gLWVxIDEgXTsgdGhlbgotCQllY2hvIC1lICYjMzQ7RkFJTFxudTggdW5kZXJmbG93IG5vdCBkZXRlY3RlZCYjMzQ7ICZndDsmYW1wOzIKLQkJcmM9MQotCQl0ZXN0X3JjCiYjNDM7CWZvdW5kPSQoZ3JlcCAtYyAmIzM0O3N5c2N0bFsuL11kZWJ1Z1suL110ZXN0X3N5c2N0bFsuL11ib290X2ludD0xJiMzNDsgL3Byb2MvY21kbGluZSkKJiM0MzsJaWYgW1sgJiMzNDskZm91bmQmIzM0OyA9PSAmIzM0OzEmIzM0OyBdXTsgdGhlbgomIzQzOwkJa3RhcF9wcmludF9tc2cgJiMzNDskdDoga2VybmVsIHBhcmFtIGZvdW5kIG9uIGNtZGxpbmUgYnV0IHZhbHVlIGlzIG5vdCAxJiMzNDsKJiM0MzsJCVJFVD0kS1NGVF9GQUlMCiYjNDM7CQlyZXR1cm4KIAlmaQogCi0JZWNobyAmIzM0O09LJiMzNDsKLQlyZXR1cm4gMAomIzQzOwlrdGFwX3ByaW50X21zZyAmIzM0OyR0OiBrZXJuZWwgbm90IGJvb3RlZCB3aXRoIHN5c2N0bC5kZWJ1Zy50ZXN0X3N5c2N0bC5ib290X2ludD0xJiMzNDsKJiM0MzsJUkVUPSRLU0ZUX1NLSVAKIH0KIAotc3lzY3RsX3Rlc3RfMDAxMygpCiYjNDM7dGVzdF9zeXNjdGxfbWFjcm9fbWF0Y2goKQogewotCVRBUkdFVD0mIzM0OyR7U1lTQ1RMfS8kKGdldF90ZXN0X3RhcmdldCAwMDEzKSYjMzQ7Ci0JcmVzZXRfdmFscwomIzQzOwlsb2NhbCB0PSYjMzQ7JHtTWVNDVEx9L21hdGNoX2ludCYjMzQ7CiYjNDM7CiYjNDM7CVtbIC1mICYjMzQ7JHQmIzM0OyBdXSB8fCB7IFJFVD0kS1NGVF9TS0lQOyByZXR1cm47IH0KIAotCXJ1bl9pbnRfYXJyYXlfbm9fcGFydGlhbF91cGRhdGUKJiM0MzsJYXNzZXJ0X2NvbnRlbnQgJiMzNDskdCYjMzQ7ICYjMzQ7MSYjMzQ7IHx8IFJFVD0kS1NGVF9GQUlMCiB9CiAKLWxpc3RfdGVzdHMoKQomIzQzO3J1bl9vbmUoKQogewotCWVjaG8gJiMzNDtUZXN0IElEIGxpc3Q6JiMzNDsKLQllY2hvCi0JZWNobyAmIzM0O1RFU1RfSUQgeCBOVU1fVEVTVCYjMzQ7Ci0JZWNobyAmIzM0O1RFU1RfSUQ6ICAgVGVzdCBJRCYjMzQ7Ci0JZWNobyAmIzM0O05VTV9URVNUUzogUmVjb21tZW5kZWQgbnVtYmVyIG9mIHRpbWVzIHRvIHJ1biB0aGUgdGVzdCYjMzQ7Ci0JZWNobwotCWVjaG8gJiMzNDswMDAxIHggJChnZXRfdGVzdF9jb3VudCAwMDAxKSAtIHRlc3RzIHByb2NfZG9pbnR2ZWNfbWlubWF4KCkmIzM0OwotCWVjaG8gJiMzNDswMDAyIHggJChnZXRfdGVzdF9jb3VudCAwMDAyKSAtIHRlc3RzIHByb2NfZG9zdHJpbmcoKSYjMzQ7Ci0JZWNobyAmIzM0OzAwMDMgeCAkKGdldF90ZXN0X2NvdW50IDAwMDMpIC0gdGVzdHMgcHJvY19kb2ludHZlYygpJiMzNDsKLQllY2hvICYjMzQ7MDAwNCB4ICQoZ2V0X3Rlc3RfY291bnQgMDAwNCkgLSB0ZXN0cyBwcm9jX2RvdWludHZlYygpJiMzNDsKLQllY2hvICYjMzQ7MDAwNSB4ICQoZ2V0X3Rlc3RfY291bnQgMDAwNSkgLSB0ZXN0cyBwcm9jX2RvdWludHZlYygpIGFycmF5JiMzNDsKLQllY2hvICYjMzQ7MDAwNiB4ICQoZ2V0X3Rlc3RfY291bnQgMDAwNikgLSB0ZXN0cyBwcm9jX2RvX2xhcmdlX2JpdG1hcCgpJiMzNDsKLQllY2hvICYjMzQ7MDAwNyB4ICQoZ2V0X3Rlc3RfY291bnQgMDAwNykgLSB0ZXN0cyBzZXR0aW5nIHN5c2N0bCBmcm9tIGtlcm5lbCBib290IHBhcmFtJiMzNDsKLQllY2hvICYjMzQ7MDAwOCB4ICQoZ2V0X3Rlc3RfY291bnQgMDAwOCkgLSB0ZXN0cyBzeXNjdGwgbWFjcm8gdmFsdWVzIG1hdGNoJiMzNDsKLQllY2hvICYjMzQ7MDAwOSB4ICQoZ2V0X3Rlc3RfY291bnQgMDAwOSkgLSB0ZXN0cyBzeXNjdCB1bnJlZ2lzdGVyJiMzNDsKLQllY2hvICYjMzQ7MDAxMCB4ICQoZ2V0X3Rlc3RfY291bnQgMDAxMCkgLSB0ZXN0cyBzeXNjdCBtb3VudCBwb2ludCYjMzQ7Ci0JZWNobyAmIzM0OzAwMTEgeCAkKGdldF90ZXN0X2NvdW50IDAwMTEpIC0gdGVzdHMgZW1wdHkgZGlyZWN0b3JpZXMmIzM0OwotCWVjaG8gJiMzNDswMDEyIHggJChnZXRfdGVzdF9jb3VudCAwMDEyKSAtIHRlc3RzIHJhbmdlIGNoZWNrIGZvciB1OCBwcm9jX2hhbmRsZXImIzM0OwotCWVjaG8gJiMzNDswMDEzIHggJChnZXRfdGVzdF9jb3VudCAwMDEzKSAtIHRlc3RzIHBhcnRpYWxseSB1cGRhdGUgdmVjdG9ycyBvbiBlcnJvciYjMzQ7CiYjNDM7CWxvY2FsIG5hbWU9JDEKJiM0MzsKJiM0MzsJIyBTdWJzaGVsbDogYSB0ZXN0IGNhbm5vdCBsZWFrIHZhcnMvY3dkL3RyYXBzIGludG8gdGhlIG5leHQgb25lLCBhbmQgYW4KJiM0MzsJIyBhY2NpZGVudGFsIGBleGl0YCBpbnNpZGUgYSB0ZXN0IGtpbGxzIG9ubHkgaXRzIG93biBzdWJzaGVsbC4KJiM0MzsJKCBSRVQ9JEtTRlRfUEFTUzsgJiMzNDskbmFtZSYjMzQ7OyBleGl0ICRSRVQgKQomIzQzOwomIzQzOwljYXNlICQ/IGluCiYjNDM7CSYjMzQ7JEtTRlRfUEFTUyYjMzQ7KSBrdGFwX3Rlc3RfcGFzcyAmIzM0OyRuYW1lJiMzNDsgOzsKJiM0MzsJJiMzNDskS1NGVF9TS0lQJiMzNDspIGt0YXBfdGVzdF9za2lwICYjMzQ7JG5hbWUmIzM0OyA7OwomIzQzOwkqKSAgICAgICAgICBrdGFwX3Rlc3RfZmFpbCAmIzM0OyRuYW1lJiMzNDsgOzsKJiM0MzsJZXNhYwogfQogCiB1c2FnZSgpCiB7Ci0JTlVNX1RFU1RTPSQoZ3JlcCAtbyAmIzM5OyAmIzM5OyAmbHQ7Jmx0OyZsdDsmIzM0OyRBTExfVEVTVFMmIzM0OyB8IGdyZXAgLWMgLikKLQlsZXQgTlVNX1RFU1RTPSROVU1fVEVTVFMmIzQzOzEKLQlNQVhfVEVTVD0kKHByaW50ZiAmIzM0OyUwNGRcbiYjMzQ7ICROVU1fVEVTVFMpCi0JZWNobyAmIzM0O1VzYWdlOiAkMCBbIC10ICZsdDs0LW51bWJlci1kaWdpdCZndDsgXSB8IFsgLXcgJmx0OzQtbnVtYmVyLWRpZ2l0Jmd0OyBdIHwmIzM0OwotCWVjaG8gJiMzNDsJCSBbIC1zICZsdDs0LW51bWJlci1kaWdpdCZndDsgXSB8IFsgLWMgJmx0OzQtbnVtYmVyLWRpZ2l0Jmd0OyAmbHQ7dGVzdC0gY291bnQmZ3Q7JiMzNDsKLQllY2hvICYjMzQ7ICAgICAgICAgICBbIGFsbCBdIFsgLWggfCAtLWhlbHAgXSBbIC1sIF0mIzM0OwotCWVjaG8gJiMzNDsmIzM0OwotCWVjaG8gJiMzNDtWYWxpZCB0ZXN0czogMDAwMS0kTUFYX1RFU1QmIzM0OwotCWVjaG8gJiMzNDsmIzM0OwotCWVjaG8gJiMzNDsgICAgYWxsICAgICBSdW5zIGFsbCB0ZXN0cyAoZGVmYXVsdCkmIzM0OwotCWVjaG8gJiMzNDsgICAgLXQgICAgICBSdW4gdGVzdCBJRCB0aGUgcmVjb21tZW5kZWQgbnVtYmVyIG9mIHRpbWVzJiMzNDsKLQllY2hvICYjMzQ7ICAgIC13ICAgICAgV2F0Y2ggdGVzdCBJRCBydW4gdW50aWwgaXQgcnVucyBpbnRvIGFuIGVycm9yJiMzNDsKLQllY2hvICYjMzQ7ICAgIC1jICAgICAgUnVuIHRlc3QgSUQgb25jZSYjMzQ7Ci0JZWNobyAmIzM0OyAgICAtcyAgICAgIFJ1biB0ZXN0IElEIHggdGVzdC1jb3VudCBudW1iZXIgb2YgdGltZXMmIzM0OwotCWVjaG8gJiMzNDsgICAgLWwgICAgICBMaXN0IGFsbCB0ZXN0IElEIGxpc3QmIzM0OwotCWVjaG8gJiMzNDsgLWh8LS1oZWxwICBIZWxwJiMzNDsKLQllY2hvCi0JZWNobyAmIzM0O0lmIGFuIGVycm9yIGV2ZXJ5IG9jY3VycyBleGVjdXRpb24gd2lsbCBpbW1lZGlhdGVseSB0ZXJtaW5hdGUuJiMzNDsKLQllY2hvICYjMzQ7SWYgeW91IGFyZSBhZGRpbmcgYSBuZXcgdGVzdCB0cnkgdXNpbmcgLXcgJmx0O3Rlc3QtSUQmZ3Q7IGZpcnN0IHRvJiMzNDsKLQllY2hvICYjMzQ7bWFrZSBzdXJlIHRoZSB0ZXN0IHBhc3NlcyBhIHNlcmllcyBvZiB0ZXN0cy4mIzM0OwotCWVjaG8KLQllY2hvIEV4YW1wbGUgdXNlczoKLQllY2hvCi0JZWNobyAmIzM0OyRURVNUX05BTUUuc2ggICAgICAgICAgICAtLSBleGVjdXRlcyBhbGwgdGVzdHMmIzM0OwotCWVjaG8gJiMzNDskVEVTVF9OQU1FLnNoIC10IDAwMDIgICAgLS0gRXhlY3V0ZXMgdGVzdCBJRCAwMDAyIHRoZSByZWNvbW1lbmRlZCBudW1iZXIgb2YgdGltZXMmIzM0OwotCWVjaG8gJiMzNDskVEVTVF9OQU1FLnNoIC13IDAwMDIgICAgLS0gV2F0Y2ggdGVzdCBJRCAwMDAyIHJ1biB1bnRpbCBhbiBlcnJvciBvY2N1cnMmIzM0OwotCWVjaG8gJiMzNDskVEVTVF9OQU1FLnNoIC1zIDAwMDIgICAgLS0gUnVuIHRlc3QgSUQgMDAwMiBvbmNlJiMzNDsKLQllY2hvICYjMzQ7JFRFU1RfTkFNRS5zaCAtYyAwMDAyIDMgIC0tIFJ1biB0ZXN0IElEIDAwMDIgdGhyZWUgdGltZXMmIzM0OwotCWVjaG8KLQlsaXN0X3Rlc3RzCi0JZXhpdCAxCi19CiYjNDM7CWNhdCAmbHQ7Jmx0Oy1FT0YKJiM0MzsJVXNhZ2U6ICQwIFstciBOXSBbLWxdIFstdCBUXSBbLXMgTl0gWy1ofC0taGVscF0KIAotZnVuY3Rpb24gdGVzdF9udW0oKQotewotCXJlPSYjMzk7XlswLTldJiM0MzskJiMzOTsKLQlpZiAhIFtbICQxID1+ICRyZSBdXTsgdGhlbgotCQl1c2FnZQotCWZpCi19Ci1mdW5jdGlvbiByZW1vdmVfbGVhZGluZ196ZXJvcygpCi17Ci0JZWNobyAkMSB8IHNlZCAmIzM5O3MvXjAqLy8mIzM5OwotfQomIzQzOwlSdW5zIGV2ZXJ5IGF1dG8tZGlzY292ZXJlZCB0ZXN0XyogZnVuY3Rpb24uIFNldHRpbmcgU1lTQ1RMX1RFU1RTIHdpbGwKJiM0MzsJb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYW5kIHBhc3NpbmcgLXQgd2lsbCBvdmVycmlkZSBib3RoIGVudiB2YXIgYW5kIHRoZQomIzQzOwlkZWZhdWx0LgogCi1mdW5jdGlvbiBnZXRfdGVzdF9jb3VudCgpCi17Ci0JdGVzdF9udW0gJDEKLQlhd2tfZmllbGQ9JChyZW1vdmVfbGVhZGluZ196ZXJvcyAkMSkKLQlURVNUX0RBVEE9JChlY2hvICRBTExfVEVTVFMgfCBhd2sgJiMzOTt7cHJpbnQgJCYjMzk7JGF3a19maWVsZCYjMzk7fSYjMzk7KQotCWVjaG8gJHtURVNUX0RBVEF9IHwgYXdrIC1GJiMzNDs6JiMzNDsgJiMzOTt7cHJpbnQgJDJ9JiMzOTsKLX0KJiM0MzsJICAgIC1yIE4gICAgICAgICAgcmVwZWF0IHNlbGVjdGVkIHRlc3RzIE4gdGltZXMgKGRlZmF1bHQgMSkKJiM0MzsJICAgIC1sICAgICAgICAgICAgbGlzdCBkaXNjb3ZlcmVkIHRlc3RzCiYjNDM7CSAgICAtdCBUICAgICAgICAgIHNwYWNlIHNlcGFyYXRlZCB0ZXN0cyBsaXN0LiBGb3IgZXhhbXBsZSAmIzM0O3Rlc3RfMSB0ZXN0XzImIzM0OwomIzQzOwkgICAgLXMgTiAgICAgICAgICBiYXNlIHNlZWQgZm9yIHRoZSByYW5kb21pemVkIGJpdG1hcCBpdGVyYXRpb25zLgomIzQzOwkgICAgLWgsIC0taGVscCAgICBoZWxwCiAKLWZ1bmN0aW9uIGdldF90ZXN0X2VuYWJsZWQoKQotewotCXRlc3RfbnVtICQxCi0JYXdrX2ZpZWxkPSQocmVtb3ZlX2xlYWRpbmdfemVyb3MgJDEpCi0JVEVTVF9EQVRBPSQoZWNobyAkQUxMX1RFU1RTIHwgYXdrICYjMzk7e3ByaW50ICQmIzM5OyRhd2tfZmllbGQmIzM5O30mIzM5OykKLQllY2hvICR7VEVTVF9EQVRBfSB8IGF3ayAtRiYjMzQ7OiYjMzQ7ICYjMzk7e3ByaW50ICQzfSYjMzk7CiYjNDM7CSAgICBTWVNDVExfVEVTVFM9JiMzOTt0ZXN0XzEgdGVzdF8yJiMzOTsgJDAgIHJ1biBvbmx5IHRoZSBuYW1lZCB0ZXN0cwomIzQzOwlFT0YKIH0KIAotZnVuY3Rpb24gZ2V0X3Rlc3RfdGFyZ2V0KCkKJiM0MztsaXN0X3Rlc3RzKCkKIHsKLQl0ZXN0X251bSAkMQotCWF3a19maWVsZD0kKHJlbW92ZV9sZWFkaW5nX3plcm9zICQxKQotCVRFU1RfREFUQT0kKGVjaG8gJEFMTF9URVNUUyB8IGF3ayAmIzM5O3twcmludCAkJiMzOTskYXdrX2ZpZWxkJiMzOTt9JiMzOTspCi0JZWNobyAke1RFU1RfREFUQX0gfCBhd2sgLUYmIzM0OzomIzM0OyAmIzM5O3twcmludCAkNH0mIzM5OwomIzQzOwllY2hvICYjMzQ7RGlzY292ZXJlZCB0ZXN0czomIzM0OwomIzQzOwlsb2NhbCB0CiYjNDM7CWZvciB0IGluICRBTExfVEVTVFM7IGRvCiYjNDM7CQllY2hvICYjMzQ7ICAkdCYjMzQ7CiYjNDM7CWRvbmUKIH0KIAotZnVuY3Rpb24gZ2V0X3Rlc3Rfc2tpcF9ub190YXJnZXQoKQomIzQzO2NoZWNrX3JlcXMoKQogewotCXRlc3RfbnVtICQxCi0JYXdrX2ZpZWxkPSQocmVtb3ZlX2xlYWRpbmdfemVyb3MgJDEpCi0JVEVTVF9EQVRBPSQoZWNobyAkQUxMX1RFU1RTIHwgYXdrICYjMzk7e3ByaW50ICQmIzM5OyRhd2tfZmllbGQmIzM5O30mIzM5OykKLQllY2hvICR7VEVTVF9EQVRBfSB8IGF3ayAtRiYjMzQ7OiYjMzQ7ICYjMzk7e3ByaW50ICQ1fSYjMzk7Ci19CiYjNDM7CWxvY2FsIHVpZAomIzQzOwl1aWQ9JChpZCAtdSkKIAotZnVuY3Rpb24gc2tpcF90ZXN0KCkKLXsKLQlURVNUX0lEPSQxCi0JVEVTVF9UQVJHRVQ9JDIKLQlpZiB0YXJnZXRfZXhpc3RzICRURVNUX1RBUkdFVCAkVEVTVF9JRDsgdGhlbgotCQlURVNUX1NLSVA9JChnZXRfdGVzdF9za2lwX25vX3RhcmdldCAkVEVTVF9JRCkKLQkJaWYgW1sgJFRFU1RfU0tJUCAtZXEgJiMzNDsxJiMzNDsgXV07IHRoZW4KLQkJCWVjaG8gJiMzNDtUYXJnZXQgJFRFU1RfVEFSR0VUIGZvciB0ZXN0ICRURVNUX0lEIGRvZXMgbm90IGV4aXN0IC4uLiBTS0lQUElORyYjMzQ7Ci0JCQlyZXR1cm4gMAotCQlmaQomIzQzOwlpZiBbICYjMzQ7JHVpZCYjMzQ7IC1uZSAwIF07IHRoZW4KJiM0MzsJCWt0YXBfc2tpcF9hbGwgJiMzNDttdXN0IGJlIHJ1biBhcyByb290JiMzNDsKJiM0MzsJCWV4aXQgJiMzNDskS1NGVF9TS0lQJiMzNDsKJiM0MzsJZmkKJiM0MzsKJiM0MzsJaWYgISB3aGljaCBnZXRjb25mICZndDsgL2Rldi9udWxsIDImZ3Q7JmFtcDsxOyB0aGVuCiYjNDM7CQlrdGFwX3NraXBfYWxsICYjMzQ7JDA6IFlvdSBuZWVkIGdldGNvbmYgaW5zdGFsbGVkJiMzNDsKJiM0MzsJCWV4aXQgJiMzNDskS1NGVF9TS0lQJiMzNDsKJiM0MzsJZmkKJiM0MzsKJiM0MzsJaWYgISB3aGljaCBkaWZmICZndDsgL2Rldi9udWxsIDImZ3Q7JmFtcDsxOyB0aGVuCiYjNDM7CQlrdGFwX3NraXBfYWxsICYjMzQ7JDA6IFlvdSBuZWVkIGRpZmYgaW5zdGFsbGVkJiMzNDsKJiM0MzsJCWV4aXQgJiMzNDskS1NGVF9TS0lQJiMzNDsKIAlmaQotCXJldHVybiAxCiB9CiAKLWZ1bmN0aW9uIHJ1bl9hbGxfdGVzdHMoKQomIzQzO2NoZWNrX2FyZ3MoKSAgIyAmbHQ7cmVwZWF0Jmd0OyAmbHQ7c2VsZWN0ZWQmZ3Q7ICZsdDtzZWVkJmd0OwogewotCWZvciBpIGluICRBTExfVEVTVFMgOyBkbwotCQlURVNUX0lEPSR7aSU6KjoqOio6Kn0KLQkJRU5BQkxFRD0kKGdldF90ZXN0X2VuYWJsZWQgJFRFU1RfSUQpCi0JCVRFU1RfQ09VTlQ9JChnZXRfdGVzdF9jb3VudCAkVEVTVF9JRCkKLQkJVEVTVF9UQVJHRVQ9JChnZXRfdGVzdF90YXJnZXQgJFRFU1RfSUQpCi0KLQkJaWYgW1sgJEVOQUJMRUQgLWVxICYjMzQ7MSYjMzQ7IF1dOyB0aGVuCi0JCQl0ZXN0X2Nhc2UgJFRFU1RfSUQgJFRFU1RfQ09VTlQgJFRFU1RfVEFSR0VUCiYjNDM7CWxvY2FsIHJlcGVhdF9hcmc9JiMzNDskMSYjMzQ7CiYjNDM7CWxvY2FsIHNlbGVjdGVkX2FyZz0mIzM0OyQyJiMzNDsKJiM0MzsJbG9jYWwgc2VlZF9hcmc9JiMzNDskMyYjMzQ7CiYjNDM7CWxvY2FsIHQKJiM0MzsKJiM0MzsJaWYgWyAteiAmIzM0OyRzZWxlY3RlZF9hcmcmIzM0OyBdOyB0aGVuCiYjNDM7CQlrdGFwX2V4aXRfZmFpbF9tc2cgJiMzNDtubyB0ZXN0IHNlbGVjdGVkJiMzNDsKJiM0MzsJZmkKJiM0MzsKJiM0MzsJaWYgISBbWyAmIzM0OyRyZXBlYXRfYXJnJiMzNDsgPX4gXlswLTldJiM0MzskIF1dOyB0aGVuCiYjNDM7CQlrdGFwX2V4aXRfZmFpbF9tc2cgJiMzNDtyZXBlYXQgYXJndW1lbnQgJiMzOTskcmVwZWF0X2FyZyYjMzk7IGlzIG5vdCBhIG51bWJlciYjMzQ7CiYjNDM7CWZpCiYjNDM7CiYjNDM7CWlmICEgW1sgJiMzNDskc2VlZF9hcmcmIzM0OyA9fiBeWzAtOV0mIzQzOyQgXV07IHRoZW4KJiM0MzsJCWt0YXBfZXhpdF9mYWlsX21zZyAmIzM0O3NlZWQgYXJndW1lbnQgJiMzOTskc2VlZF9hcmcmIzM5OyBpcyBub3QgYSBudW1iZXImIzM0OwomIzQzOwlmaQomIzQzOwomIzQzOwlmb3IgdCBpbiAkc2VsZWN0ZWRfYXJnOyBkbwomIzQzOwkJaWYgISBkZWNsYXJlIC1GICYjMzQ7JHQmIzM0OyAmZ3Q7IC9kZXYvbnVsbDsgdGhlbgomIzQzOwkJCWt0YXBfZXhpdF9mYWlsX21zZyAmIzM0O3Vua25vd24gc2VsZWN0ZWQgdGVzdCAmIzM5OyR0JiMzOTsmIzM0OwogCQlmaQogCWRvbmUKIH0KIAotZnVuY3Rpb24gd2F0Y2hfbG9nKCkKJiM0MzthbGxvd191c2VyX2RlZmF1bHRzKCkKIHsKLQlpZiBbICQjIC1uZSAzIF07IHRoZW4KLQkJY2xlYXIKJiM0MzsJaWYgWyAteiAmIzM0OyR7TU9EVUxFX0RJUn0mIzM0OyBdOyB0aGVuCiYjNDM7CQlNT0RVTEVfRElSPSYjMzQ7L3N5cy9tb2R1bGUvdGVzdF9zeXNjdGwvJiMzNDsKJiM0MzsJZmkKJiM0MzsJaWYgWyAteiAmIzM0OyR7U1lTQ1RMfSYjMzQ7IF07IHRoZW4KJiM0MzsJCVNZU0NUTD0mIzM0Oy9wcm9jL3N5cy9kZWJ1Zy90ZXN0X3N5c2N0bCYjMzQ7CiYjNDM7CWZpCiYjNDM7CWlmIFsgLXogJiMzNDske1BST0RfU1lTQ1RMfSYjMzQ7IF07IHRoZW4KJiM0MzsJCVBST0RfU1lTQ1RMPSYjMzQ7L3Byb2Mvc3lzJiMzNDsKJiM0MzsJZmkKJiM0MzsJaWYgWyAteiAmIzM0OyR7V1JJVEVTX1NUUklDVH0mIzM0OyBdOyB0aGVuCiYjNDM7CQlXUklURVNfU1RSSUNUPSYjMzQ7JHtQUk9EX1NZU0NUTH0va2VybmVsL3N5c2N0bF93cml0ZXNfc3RyaWN0JiMzNDsKJiM0MzsJZmkKJiM0MzsJaWYgWyAteiAmIzM0OyR7QklUTUFQX0lURVJBVElPTlN9JiMzNDsgXTsgdGhlbgomIzQzOwkJQklUTUFQX0lURVJBVElPTlM9NTAKJiM0MzsJZmkKJiM0MzsJIyBTZXQgc2VlZCBmb3IgYml0bWFwIHJhbmRvbSB0ZXN0cwomIzQzOwlpZiBbIC16ICYjMzQ7JHtCSVRNQVBfU0VFRH0mIzM0OyBdOyB0aGVuCiYjNDM7CQlCSVRNQVBfU0VFRD0kUkFORE9NCiAJZmkKLQlkYXRlCi0JZWNobyAmIzM0O1J1bm5pbmcgdGVzdDogJDIgLSBydW4gIyQxJiMzNDsKIH0KIAotZnVuY3Rpb24gd2F0Y2hfY2FzZSgpCiYjNDM7Y2hlY2tfcHJvZHVjdGlvbl9zeXNjdGxfd3JpdGVzX3N0cmljdCgpCiB7Ci0JaT0wCi0Jd2hpbGUgWyAxIF07IGRvCi0KLQkJaWYgWyAkIyAtZXEgMSBdOyB0aGVuCi0JCQl0ZXN0X251bSAkMQotCQkJd2F0Y2hfbG9nICRpICR7VEVTVF9OQU1FfV90ZXN0XyQxCi0JCQkke1RFU1RfTkFNRX1fdGVzdF8kMQotCQllbHNlCi0JCQl3YXRjaF9sb2cgJGkgYWxsCi0JCQlydW5fYWxsX3Rlc3RzCiYjNDM7CWlmIFsgISAtZSAmIzM0OyR7V1JJVEVTX1NUUklDVH0mIzM0OyBdOyB0aGVuCiYjNDM7CQlrdGFwX3ByaW50X21zZyAmIzM0OyR7V1JJVEVTX1NUUklDVH0gbWlzc2luZywgc2tpcHBpbmcgc3RyaWN0IHdyaXRlIGNoZWNrIChvbGQga2VybmVsPykmIzM0OwomIzQzOwllbHNlCiYjNDM7CQlvbGRfc3RyaWN0PSQoY2F0ICYjMzQ7JHtXUklURVNfU1RSSUNUfSYjMzQ7KQomIzQzOwkJaWYgWyAmIzM0OyRvbGRfc3RyaWN0JiMzNDsgIT0gJiMzNDsxJiMzNDsgXTsgdGhlbgomIzQzOwkJCWt0YXBfcHJpbnRfbXNnICYjMzQ7Zm9yY2luZyAke1dSSVRFU19TVFJJQ1R9IHRvIDEgKHdhcyAke29sZF9zdHJpY3R9KSYjMzQ7CiYjNDM7CQkJZWNobyAmIzM0OzEmIzM0OyAmZ3Q7ICYjMzQ7JHtXUklURVNfU1RSSUNUfSYjMzQ7CiAJCWZpCi0JCWxldCBpPSRpJiM0MzsxCi0JZG9uZQomIzQzOwlmaQomIzQzOwomIzQzOwlpZiBbIC16ICYjMzQ7JHtQQUdFX1NJWkV9JiMzNDsgXTsgdGhlbgomIzQzOwkJUEFHRV9TSVpFPSQoZ2V0Y29uZiBQQUdFU0laRSkKJiM0MzsJZmkKJiM0MzsJaWYgWyAteiAmIzM0OyR7TUFYX0RJR0lUU30mIzM0OyBdOyB0aGVuCiYjNDM7CQlNQVhfRElHSVRTPSQoKFBBR0VfU0laRSAvIDgpKQomIzQzOwlmaQomIzQzOwlpZiBbIC16ICYjMzQ7JHtJTlRfTUFYfSYjMzQ7IF07IHRoZW4KJiM0MzsJCUlOVF9NQVg9JChnZXRjb25mIElOVF9NQVgpCiYjNDM7CWZpCiYjNDM7CWlmIFsgLXogJiMzNDske1VJTlRfTUFYfSYjMzQ7IF07IHRoZW4KJiM0MzsJCVVJTlRfTUFYPSQoZ2V0Y29uZiBVSU5UX01BWCkKJiM0MzsJZmkKIH0KIAotZnVuY3Rpb24gdGVzdF9jYXNlKCkKJiM0Mztsb2FkX3JlcV9tb2QoKQogewotCVRFU1RfSUQ9JDEKLQlOVU1fVEVTVFM9JDIKLQlUQVJHRVQ9JDMKLQotCWlmIHNraXBfdGVzdCAkVEVTVF9JRCAkVEFSR0VUOyB0aGVuCi0JCXJldHVybgomIzQzOwlpZiBbICEgLWQgJiMzNDske1NZU0NUTH0mIzM0OyBdOyB0aGVuCiYjNDM7CQlpZiAhIG1vZHByb2JlIC1xIC1uICYjMzQ7JHtURVNUX0RSSVZFUn0mIzM0OzsgdGhlbgomIzQzOwkJCWt0YXBfc2tpcF9hbGwgJiMzNDttb2R1bGUgJHtURVNUX0RSSVZFUn0gbm90IGZvdW5kLiBcCiYjNDM7CQkJCVlvdSBtdXN0IHNldCBDT05GSUdfVEVTVF9TWVNDVEw9bSBpbiB5b3VyIGtlcm5lbCYjMzQ7CiYjNDM7CQkJZXhpdCAmIzM0OyRLU0ZUX1NLSVAmIzM0OwomIzQzOwkJZmkKJiM0MzsJCWlmICEgbW9kcHJvYmUgJiMzNDske1RFU1RfRFJJVkVSfSYjMzQ7OyB0aGVuCiYjNDM7CQkJa3RhcF9leGl0X2ZhaWxfbXNnICYjMzQ7bW9kcHJvYmUgJHtURVNUX0RSSVZFUn0gZmFpbGVkJiMzNDsKJiM0MzsJCWZpCiAJZmkKLQotCWk9MAotCXdoaWxlIFsgJGkgLWx0ICROVU1fVEVTVFMgXTsgZG8KLQkJdGVzdF9udW0gJFRFU1RfSUQKLQkJd2F0Y2hfbG9nICRpICR7VEVTVF9OQU1FfV90ZXN0XyR7VEVTVF9JRH0gbm9jbGVhcgotCQlSVU5fVEVTVD0ke1RFU1RfTkFNRX1fdGVzdF8ke1RFU1RfSUR9Ci0JCSRSVU5fVEVTVAotCQlsZXQgaT0kaSYjNDM7MQotCWRvbmUKIH0KIAotZnVuY3Rpb24gcGFyc2VfYXJncygpCiYjNDM7IyBDbGVhbnVwIG9ubHkhIERvIG5vdCBjYWxsIGV4aXQgaGVyZSBvciBpdCB3aWxsIHNpbGVudGx5IG92ZXJyaWRlIEtUQVAgZXhpdCBzdGF0dXMKJiM0MztyZXN0b3JlX3N5c2N0bF93cml0ZXNfc3RyaWN0KCkKIHsKLQlpZiBbICQjIC1lcSAwIF07IHRoZW4KLQkJcnVuX2FsbF90ZXN0cwotCWVsc2UKLQkJaWYgW1sgJiMzNDskMSYjMzQ7ID0gJiMzNDthbGwmIzM0OyBdXTsgdGhlbgotCQkJcnVuX2FsbF90ZXN0cwotCQllbGlmIFtbICYjMzQ7JDEmIzM0OyA9ICYjMzQ7LXcmIzM0OyBdXTsgdGhlbgotCQkJc2hpZnQKLQkJCXdhdGNoX2Nhc2UgJEAKLQkJZWxpZiBbWyAmIzM0OyQxJiMzNDsgPSAmIzM0Oy10JiMzNDsgXV07IHRoZW4KLQkJCXNoaWZ0Ci0JCQl0ZXN0X251bSAkMQotCQkJdGVzdF9jYXNlICQxICQoZ2V0X3Rlc3RfY291bnQgJDEpICQoZ2V0X3Rlc3RfdGFyZ2V0ICQxKQotCQllbGlmIFtbICYjMzQ7JDEmIzM0OyA9ICYjMzQ7LWMmIzM0OyBdXTsgdGhlbgotCQkJc2hpZnQKLQkJCXRlc3RfbnVtICQxCi0JCQl0ZXN0X251bSAkMgotCQkJdGVzdF9jYXNlICQxICQyICQoZ2V0X3Rlc3RfdGFyZ2V0ICQxKQotCQllbGlmIFtbICYjMzQ7JDEmIzM0OyA9ICYjMzQ7LXMmIzM0OyBdXTsgdGhlbgotCQkJc2hpZnQKLQkJCXRlc3RfY2FzZSAkMSAxICQoZ2V0X3Rlc3RfdGFyZ2V0ICQxKQotCQllbGlmIFtbICYjMzQ7JDEmIzM0OyA9ICYjMzQ7LWwmIzM0OyBdXTsgdGhlbgotCQkJbGlzdF90ZXN0cwotCQllbGlmIFtbICYjMzQ7JDEmIzM0OyA9ICYjMzQ7LWgmIzM0OyB8fCAmIzM0OyQxJiMzNDsgPSAmIzM0Oy0taGVscCYjMzQ7IF1dOyB0aGVuCi0JCQl1c2FnZQotCQllbHNlCi0JCQl1c2FnZQotCQlmaQomIzQzOwlpZiBbIC1uICYjMzQ7JHtvbGRfc3RyaWN0fSYjMzQ7IF07IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDske29sZF9zdHJpY3R9JiMzNDsgJmd0OyAmIzM0OyR7V1JJVEVTX1NUUklDVH0mIzM0OwogCWZpCiB9CiAKLXRlc3RfcmVxcwogYWxsb3dfdXNlcl9kZWZhdWx0cwomIzQzOwomIzQzOyMgRWFjaCBiaXRtYXAgaXRlcmF0aW9uIGlzIG9uZSBmdW5jdGlvbiB0byBnZW5lcmF0ZSBvbmUgS1RBUCByZXBvcnQgcGVyIGl0ZXJhdGlvbgomIzQzO2ZvciBpIGluICQoc2VxIDEgJiMzNDskQklUTUFQX0lURVJBVElPTlMmIzM0Oyk7IGRvCiYjNDM7CWV2YWwgJiMzNDt0ZXN0X2JpdG1hcF9yYW5nZV9jaGVja18kKHByaW50ZiAmIzM5OyUwMmQmIzM5OyAmIzM0OyRpJiMzNDspKCkgXAomIzQzOwkJeyBcCiYjNDM7CQkJYml0bWFwX3JhbmdlX2NoZWNrX29uY2UgJGk7IFwKJiM0MzsJCX0mIzM0OwomIzQzO2RvbmUKJiM0MzsKJiM0MzsjIERpc2NvdmVyIHRlc3RfKiBmdW5jdGlvbnMgYWJvdmUgdGhpcyBsaW5lCiYjNDM7QUxMX1RFU1RTPSQoZGVjbGFyZSAtRiB8IGF3ayAmIzM5O3twcmludCAkM30mIzM5OyB8IGdyZXAgJiMzOTtedGVzdF8mIzM5OyB8IHNvcnQpCiYjNDM7CiYjNDM7UkVQRUFUPTEKJiM0Mzt3aGlsZSBbICQjIC1ndCAwIF07IGRvCiYjNDM7CWNhc2UgJiMzNDskMSYjMzQ7IGluCiYjNDM7CS1yICkKJiM0MzsJCXNoaWZ0CiYjNDM7CQlSRVBFQVQ9JDEKJiM0MzsJCTs7CiYjNDM7CS1sICkKJiM0MzsJCWxpc3RfdGVzdHMKJiM0MzsJCWV4aXQgMAomIzQzOwkJOzsKJiM0MzsJLWggfCAtLWhlbHAgKQomIzQzOwkJdXNhZ2UKJiM0MzsJCWV4aXQgMAomIzQzOwkJOzsKJiM0MzsJLXQgKQomIzQzOwkJc2hpZnQKJiM0MzsJCVNZU0NUTF9URVNUUz0mIzM0OyQxJiMzNDsKJiM0MzsJCTs7CiYjNDM7CS1zICkKJiM0MzsJCXNoaWZ0CiYjNDM7CQlCSVRNQVBfU0VFRD0mIzM0OyQxJiMzNDsKJiM0MzsJCTs7CiYjNDM7CSogKQomIzQzOwkJdXNhZ2UKJiM0MzsJCWV4aXQgMQomIzQzOwkJOzsKJiM0MzsJZXNhYwomIzQzOwlzaGlmdAomIzQzO2RvbmUKJiM0MzsKJiM0MztTRUxFQ1RFRD0ke1NZU0NUTF9URVNUUy0kQUxMX1RFU1RTfQomIzQzOwomIzQzO2t0YXBfcHJpbnRfaGVhZGVyCiYjNDM7dHJhcCByZXN0b3JlX3N5c2N0bF93cml0ZXNfc3RyaWN0IEVYSVQKJiM0MztjaGVja19hcmdzICYjMzQ7JFJFUEVBVCYjMzQ7ICYjMzQ7JFNFTEVDVEVEJiMzNDsgJiMzNDskQklUTUFQX1NFRUQmIzM0OwomIzQzO2NoZWNrX3JlcXMKIGNoZWNrX3Byb2R1Y3Rpb25fc3lzY3RsX3dyaXRlc19zdHJpY3QKIGxvYWRfcmVxX21vZAogCi10cmFwICYjMzQ7dGVzdF9maW5pc2gmIzM0OyBFWElUCiYjNDM7a3RhcF9wcmludF9tc2cgJiMzNDtiaXRtYXAgYmFzZSBzZWVkOiAkQklUTUFQX1NFRUQgKHJlcGxheSB3aXRoIC1zICRCSVRNQVBfU0VFRCkmIzM0OwogCi1wYXJzZV9hcmdzICRACiYjNDM7a3RhcF9zZXRfcGxhbiAmIzM0OyQoKCAkKHdjIC13ICZsdDsmbHQ7Jmx0OyAmIzM0OyRTRUxFQ1RFRCYjMzQ7KSAqIFJFUEVBVCApKSYjMzQ7CiYjNDM7CiYjNDM7Zm9yICgoaSA9IDA7IGkgJmx0OyBSRVBFQVQ7IGkmIzQzOyYjNDM7KSk7IGRvCiYjNDM7CWZvciB0IGluICRTRUxFQ1RFRDsgZG8KJiM0MzsJCXJ1bl9vbmUgJiMzNDskdCYjMzQ7CiYjNDM7CWRvbmUKJiM0Mztkb25lCiAKLWV4aXQgMAomIzQzO2t0YXBfZmluaXNoZWQKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA3OTMKCQkJCQkJCW91dHB1dDogOTYKCQkJCQkJCXRob3VnaHRzOiA0NzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBFdmFsdWF0aW9uOiBRdWljayBEZWNpc2lvbioqCgpPa2F5LCBsZXQmIzM5O3MgYXNzZXNzIHRoaXMgcGF0Y2ggc2VyaWVzIGZvciBzeXprYWxsZXIgZnV6emluZyBwb3RlbnRpYWwuIFRoZSBkaWZmIGlzIGZvY3VzZWQsIG9ubHkgdG91Y2hpbmcgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2N0bC9zeXNjdGwuc2hgLiBUaW1lIHRvIGFwcGx5IHRoZSBjcml0ZXJpYS4gQWNjb3JkaW5nIHRvIHRoZSBndWlkZWxpbmVzLCBtb2RpZmljYXRpb25zIHN0cmljdGx5IHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYCBmYWxsIHVuZGVyIHRoZSAmIzM0O05vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXMmIzM0OyBjYXRlZ29yeS4gVGhpcyBzcGVjaWZpY2FsbHkgbWVhbnMgdGhlIGNoYW5nZXMgZG9uJiMzOTt0IGFmZmVjdCB0aGUga2VybmVsIGltYWdlIG9yIG1vZHVsZXMuIFRoZXJlZm9yZSwgaXQmIzM5O3MgYSBjbGVhciAmIzM0O1dvcnRoRnV6emluZyA9IGZhbHNlJiMzNDsgc2l0dWF0aW9uLiBObyBuZWVkIHRvIGRlbHZlIGZ1cnRoZXIg4oCTIHRoZSBzY3JpcHQgaXMgdXNlci1zcGFjZSBzZWxmdGVzdCBvbmx5LiBJJiMzOTtsbCBjb25maXJtIHdpdGggYSBxdWljayBkb3VibGUtY2hlY2sgdXNpbmcgYGdpdCBkaWZmYCAob3IgdGhlIHByb3ZpZGVkIGRpZmYgZGV0YWlscykganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGJ1dCBteSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgZmlybS4KCkkgY2FuIGNvbmZpZGVudGx5IGNvbmNsdWRlOgoKKiAgIGBXb3J0aEZ1enppbmcgPSBmYWxzZWAKKiAgIGBGb2N1c1N5bWJvbHMgPSBbXWAKKiAgIGBFbmFibGVDb25maWdzID0gW11gCgpUaGUgcmVhc29uaW5nIGhlcmUgaXMgY3J5c3RhbCBjbGVhcjogdGhpcyBwYXRjaCBpcyBsaW1pdGVkIHRvIG1vZGlmeWluZyBhIHNlbGZ0ZXN0IHNjcmlwdCBpbiB1c2VyIHNwYWNlLCBhbmQgdGh1cyBkb2VzbiYjMzk7dCBpbXBhY3QgYW55IGtlcm5lbCBjb2RlLiBSZWFkeSB0byBwYXNzIHRoaXMgaW5mb3JtYXRpb24gYWxvbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBvbmx5IHRoZSB1c2VyLXNwYWNlIHNlbGZ0ZXN0IHNjcmlwdCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjdGwvc3lzY3RsLnNoIHRvIG1vZGVybml6ZSBpdCBhbmQgdXNlIGt0YXBfaGVscGVycy4gSXQgZG9lcyBub3QgdG91Y2ggYW55IGtlcm5lbCBzb3VyY2UgY29kZSwgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSwgb3Iga2VybmVsIG1vZHVsZXMsIHNvIGl0IGlzIG5vdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB0aGUgdXNlci1zcGFjZSBzZWxmdGVzdCBzY3JpcHQgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY3RsL3N5c2N0bC5zaCB0byBtb2Rlcm5pemUgaXQgYW5kIHVzZSBrdGFwX2hlbHBlcnMuIEl0IGRvZXMgbm90IHRvdWNoIGFueSBrZXJuZWwgc291cmNlIGNvZGUsIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCksIG9yIGtlcm5lbCBtb2R1bGVzLCBzbyBpdCBpcyBub3Qgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6Mzk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjM5OjA2LjkyNTg0NjA2N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NzE0ODg4OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBvbmx5IHRoZSB1c2VyLXNwYWNlIHNlbGZ0ZXN0IHNjcmlwdCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjdGwvc3lzY3RsLnNoIHRvIG1vZGVybml6ZSBpdCBhbmQgdXNlIGt0YXBfaGVscGVycy4gSXQgZG9lcyBub3QgdG91Y2ggYW55IGtlcm5lbCBzb3VyY2UgY29kZSwgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSwgb3Iga2VybmVsIG1vZHVsZXMsIHNvIGl0IGlzIG5vdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6Mzk6MDYuOTI1ODUwNTg3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDg2MDMyMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyNzE2NjkyY2U0ZmJlMDEzYjg4ZTNmNDNiMDBmNzM1Mzg5MjUxMzU4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDE0IDEzOjM5OjA1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2N0bC9zeXNjdGwuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjdGwvc3lzY3RsLnNoXFxuaW5kZXggOTVlOTM3MDkwODhhMy4uY2ViNWNmYTBjZmQ0ZCAxMDA3NTVcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjdGwvc3lzY3RsLnNoXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY3RsL3N5c2N0bC5zaFxcbkBAIC0yLDM2MiArMiwyMzkgQEBcXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciBPUiBjb3B5bGVmdC1uZXh0LTAuMy4xXFxuICMgQ29weXJpZ2h0IChDKSAyMDE3IEx1aXMgUi4gUm9kcmlndWV6IFxcdTAwM2NtY2dyb2ZAa2VybmVsLm9yZ1xcdTAwM2VcXG4gXFxuLSMgVGhpcyBwZXJmb3JtcyBhIHNlcmllcyB0ZXN0cyBhZ2FpbnN0IHRoZSBwcm9jIHN5c2N0bCBpbnRlcmZhY2UuXFxuLVxcbisjIFJlZHVjZSBub2lzZSBieSBkaXNhYmxpbmcgXFxcInVucmVhY2hhYmxlXFxcIiBjaGVjay5cXG4gIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMzE3XFxuLSMgS3NlbGZ0ZXN0IGZyYW1ld29yayByZXF1aXJlbWVudCAtIFNLSVAgY29kZSBpcyA0Llxcbi1rc2Z0X3NraXA9NFxcbi1cXG4tVEVTVF9OQU1FPVxcXCJzeXNjdGxcXFwiXFxuLVRFU1RfRFJJVkVSPVxcXCJ0ZXN0XyR7VEVTVF9OQU1FfVxcXCJcXG4tVEVTVF9ESVI9JChkaXJuYW1lICQwKVxcbi1URVNUX0ZJTEU9JChta3RlbXApXFxuLVxcbi0jIGluaXRpYWxpemUgZm9yIGluZGl2aWR1YWwgdGVzdHNcXG4tcmM9MFxcbi1cXG4tIyBUaGlzIHJlcHJlc2VudHNcXG4tI1xcbi0jIFRFU1RfSUQ6VEVTVF9DT1VOVDpFTkFCTEVEOlRBUkdFVDpTS0lQX05PX1RBUkdFVFxcbi0jXFxuLSMgVEVTVF9JRDogaXMgdGhlIHRlc3QgaWQgbnVtYmVyXFxuLSMgVEVTVF9DT1VOVDogbnVtYmVyIG9mIHRpbWVzIHdlIHNob3VsZCBydW4gdGhlIHRlc3RcXG4tIyBFTkFCTEVEOiAxIGlmIGVuYWJsZWQsIDAgb3RoZXJ3aXNlXFxuLSMgVEFSR0VUOiB0ZXN0IHRhcmdldCBmaWxlIHJlcXVpcmVkIG9uIHRoZSB0ZXN0X3N5c2N0bCBtb2R1bGVcXG4tIyBTS0lQX05PX1RBUkdFVDogMSBza2lwIGlmIFRBUkdFVCBub3QgdGhlcmVcXG4tIyAgICAgICAgICAgICAgICAgMCBydW4gZXZlbiB0aG91Z2ggVEFSR0VUIG5vdCB0aGVyZVxcbi0jXFxuLSMgT25jZSB0aGVzZSBhcmUgZW5hYmxlZCBwbGVhc2UgbGVhdmUgdGhlbSBhcy1pcy4gV3JpdGUgeW91ciBvd24gdGVzdCxcXG4tIyB3ZSBoYXZlIHRvbnMgb2Ygc3BhY2UuXFxuLUFMTF9URVNUUz1cXFwiMDAwMToxOjE6aW50XzAwMDE6MVxcXCJcXG4tQUxMX1RFU1RTPVxcXCIkQUxMX1RFU1RTIDAwMDI6MToxOnN0cmluZ18wMDAxOjFcXFwiXFxuLUFMTF9URVNUUz1cXFwiJEFMTF9URVNUUyAwMDAzOjE6MTppbnRfMDAwMjoxXFxcIlxcbi1BTExfVEVTVFM9XFxcIiRBTExfVEVTVFMgMDAwNDoxOjE6dWludF8wMDAxOjFcXFwiXFxuLUFMTF9URVNUUz1cXFwiJEFMTF9URVNUUyAwMDA1OjM6MTppbnRfMDAwMzoxXFxcIlxcbi1BTExfVEVTVFM9XFxcIiRBTExfVEVTVFMgMDAwNjo1MDoxOmJpdG1hcF8wMDAxOjFcXFwiXFxuLUFMTF9URVNUUz1cXFwiJEFMTF9URVNUUyAwMDA3OjE6MTpib290X2ludDoxXFxcIlxcbi1BTExfVEVTVFM9XFxcIiRBTExfVEVTVFMgMDAwODoxOjE6bWF0Y2hfaW50OjFcXFwiXFxuLUFMTF9URVNUUz1cXFwiJEFMTF9URVNUUyAwMDA5OjE6MTp1bnJlZ2lzdGVyX2Vycm9yOjBcXFwiXFxuLUFMTF9URVNUUz1cXFwiJEFMTF9URVNUUyAwMDEwOjE6MTptbnQvbW50X2Vycm9yOjBcXFwiXFxuLUFMTF9URVNUUz1cXFwiJEFMTF9URVNUUyAwMDExOjE6MTplbXB0eV9hZGQ6MFxcXCJcXG4tQUxMX1RFU1RTPVxcXCIkQUxMX1RFU1RTIDAwMTI6MToxOnU4X3ZhbGlkOjBcXFwiXFxuLUFMTF9URVNUUz1cXFwiJEFMTF9URVNUUyAwMDEzOjE6MTppbnRfMDAwMzoxXFxcIlxcbi1cXG4tZnVuY3Rpb24gYWxsb3dfdXNlcl9kZWZhdWx0cygpXFxuK1xcbisjIFRoaXMgcGVyZm9ybXMgYSBzZXJpZXMgb2YgdGVzdHMgYWdhaW5zdCB0aGUgcHJvYyBzeXNjdGwgaW50ZXJmYWNlLlxcbitcXG4rRElSPVxcXCIkKGRpcm5hbWUgXFxcIiQocmVhZGxpbmsgLWYgXFxcIiQwXFxcIilcXFwiKVxcXCJcXG4rc291cmNlIFxcXCIke0RJUn1cXFwiLy4uL2tzZWxmdGVzdC9rdGFwX2hlbHBlcnMuc2hcXG4rXFxuK1RFU1RfRFJJVkVSPVxcXCJ0ZXN0X3N5c2N0bFxcXCJcXG4rXFxuK2Fzc2VydF93cml0ZV9yZWplY3RlZCgpICMgXFx1MDAzY2ZpbGVcXHUwMDNlIFxcdTAwM2N2YWx1ZVxcdTAwM2VcXG4ge1xcbi1cXHRpZiBbIC16ICRESVIgXTsgdGhlblxcbi1cXHRcXHRESVI9XFxcIi9zeXMvbW9kdWxlL3Rlc3Rfc3lzY3RsL1xcXCJcXG4tXFx0ZmlcXG4tXFx0aWYgWyAteiAkREVGQVVMVF9OVU1fVEVTVFMgXTsgdGhlblxcbi1cXHRcXHRERUZBVUxUX05VTV9URVNUUz01MFxcbi1cXHRmaVxcbi1cXHRpZiBbIC16ICRTWVNDVEwgXTsgdGhlblxcbi1cXHRcXHRTWVNDVEw9XFxcIi9wcm9jL3N5cy9kZWJ1Zy90ZXN0X3N5c2N0bFxcXCJcXG4tXFx0ZmlcXG4tXFx0aWYgWyAteiAkUFJPRF9TWVNDVEwgXTsgdGhlblxcbi1cXHRcXHRQUk9EX1NZU0NUTD1cXFwiL3Byb2Mvc3lzXFxcIlxcbi1cXHRmaVxcbi1cXHRpZiBbIC16ICRXUklURVNfU1RSSUNUIF07IHRoZW5cXG4tXFx0XFx0V1JJVEVTX1NUUklDVD1cXFwiJHtQUk9EX1NZU0NUTH0va2VybmVsL3N5c2N0bF93cml0ZXNfc3RyaWN0XFxcIlxcbitcXHRsb2NhbCBmaWxlPSQxIHZhbD0kMlxcbitcXHRpZiBwcmludGYgJyVzJyBcXFwiJHZhbFxcXCIgXFx1MDAzZSBcXFwiJGZpbGVcXFwiIDJcXHUwMDNlL2Rldi9udWxsOyB0aGVuXFxuK1xcdFxcdGt0YXBfcHJpbnRfbXNnIFxcXCIkZmlsZTogd3JpdGUgb2YgJyR2YWwnIHN1Y2NlZWRlZCwgZXhwZWN0ZWQgcmVqZWN0aW9uXFxcIlxcbitcXHRcXHRyZXR1cm4gMVxcbiBcXHRmaVxcbitcXHRyZXR1cm4gMFxcbiB9XFxuIFxcbi1mdW5jdGlvbiBjaGVja19wcm9kdWN0aW9uX3N5c2N0bF93cml0ZXNfc3RyaWN0KClcXG4rYXNzZXJ0X2NvbnRlbnQoKSAjIFxcdTAwM2NmaWxlXFx1MDAzZSBcXHUwMDNjd2FudC1maWxlXFx1MDAzZVxcbiB7XFxuLVxcdGVjaG8gLW4gXFxcIkNoZWNraW5nIHByb2R1Y3Rpb24gd3JpdGUgc3RyaWN0IHNldHRpbmcgLi4uIFxcXCJcXG4tXFx0aWYgWyAhIC1lICR7V1JJVEVTX1NUUklDVH0gXTsgdGhlblxcbi1cXHRcXHRlY2hvIFxcXCJGQUlMLCBidXQgc2tpcCBpbiBjYXNlIG9mIG9sZCBrZXJuZWxcXFwiIFxcdTAwM2VcXHUwMDI2Mlxcbi1cXHRlbHNlXFxuLVxcdFxcdG9sZF9zdHJpY3Q9JChjYXQgJHtXUklURVNfU1RSSUNUfSlcXG4tXFx0XFx0aWYgWyBcXFwiJG9sZF9zdHJpY3RcXFwiID0gXFxcIjFcXFwiIF07IHRoZW5cXG4tXFx0XFx0XFx0ZWNobyBcXFwiT0tcXFwiXFxuLVxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0ZWNobyBcXFwiRkFJTCwgc3RyaWN0IHZhbHVlIGlzIDAgYnV0IGZvcmNlIHRvIDEgdG8gY29udGludWVcXFwiIFxcdTAwM2VcXHUwMDI2Mlxcbi1cXHRcXHRcXHRlY2hvIFxcXCIxXFxcIiBcXHUwMDNlICR7V1JJVEVTX1NUUklDVH1cXG4tXFx0XFx0ZmlcXG4tXFx0ZmlcXG4tXFxuLVxcdGlmIFsgLXogJFBBR0VfU0laRSBdOyB0aGVuXFxuLVxcdFxcdFBBR0VfU0laRT0kKGdldGNvbmYgUEFHRVNJWkUpXFxuLVxcdGZpXFxuLVxcdGlmIFsgLXogJE1BWF9ESUdJVFMgXTsgdGhlblxcbi1cXHRcXHRNQVhfRElHSVRTPSQoKCRQQUdFX1NJWkUvOCkpXFxuLVxcdGZpXFxuLVxcdGlmIFsgLXogJElOVF9NQVggXTsgdGhlblxcbi1cXHRcXHRJTlRfTUFYPSQoZ2V0Y29uZiBJTlRfTUFYKVxcbi1cXHRmaVxcbi1cXHRpZiBbIC16ICRVSU5UX01BWCBdOyB0aGVuXFxuLVxcdFxcdFVJTlRfTUFYPSQoZ2V0Y29uZiBVSU5UX01BWClcXG4rXFx0bG9jYWwgZmlsZT0kMSB3YW50X2ZpbGU9JDIgZ290XFxuK1xcdGdvdD0kKGNhdCBcXFwiJGZpbGVcXFwiKVxcbitcXHRpZiBbIFxcXCIkZ290XFxcIiA9PSBcXFwiJHdhbnRfZmlsZVxcXCIgXTsgdGhlblxcbitcXHRcXHRyZXR1cm4gMFxcbiBcXHRmaVxcbitcXHRrdGFwX3ByaW50X21zZyBcXFwiJGZpbGU6IGdvdCAnJGdvdCcsIHdhbnQgJyR3YW50X2ZpbGUnXFxcIlxcbitcXHRyZXR1cm4gMVxcbiB9XFxuIFxcbi10ZXN0X3JlcXMoKVxcbisjIGNvbXBhcmUgaWdub3Jpbmcgd2hpdGVzcGFjZXNcXG4rYXNzZXJ0X2NvbnRlbnRfbG9vc2UoKSAjIFxcdTAwM2NmaWxlXFx1MDAzZSBcXHUwMDNjd2FudC1maWxlXFx1MDAzZVxcbiB7XFxuLVxcdHVpZD0kKGlkIC11KVxcbi1cXHRpZiBbICR1aWQgLW5lIDAgXTsgdGhlblxcbi1cXHRcXHRlY2hvICRtc2cgbXVzdCBiZSBydW4gYXMgcm9vdCBcXHUwMDNlXFx1MDAyNjJcXG4tXFx0XFx0ZXhpdCAka3NmdF9za2lwXFxuLVxcdGZpXFxuLVxcbi1cXHRpZiAhIHdoaWNoIHBlcmwgMlxcdTAwM2UgL2Rldi9udWxsIFxcdTAwM2UgL2Rldi9udWxsOyB0aGVuXFxuLVxcdFxcdGVjaG8gXFxcIiQwOiBZb3UgbmVlZCBwZXJsIGluc3RhbGxlZFxcXCJcXG4tXFx0XFx0ZXhpdCAka3NmdF9za2lwXFxuLVxcdGZpXFxuLVxcdGlmICEgd2hpY2ggZ2V0Y29uZiAyXFx1MDAzZSAvZGV2L251bGwgXFx1MDAzZSAvZGV2L251bGw7IHRoZW5cXG4tXFx0XFx0ZWNobyBcXFwiJDA6IFlvdSBuZWVkIGdldGNvbmYgaW5zdGFsbGVkXFxcIlxcbi1cXHRcXHRleGl0ICRrc2Z0X3NraXBcXG4tXFx0ZmlcXG4tXFx0aWYgISB3aGljaCBkaWZmIDJcXHUwMDNlIC9kZXYvbnVsbCBcXHUwMDNlIC9kZXYvbnVsbDsgdGhlblxcbi1cXHRcXHRlY2hvIFxcXCIkMDogWW91IG5lZWQgZGlmZiBpbnN0YWxsZWRcXFwiXFxuLVxcdFxcdGV4aXQgJGtzZnRfc2tpcFxcbitcXHRsb2NhbCBmaWxlPSQxIHdhbnRfZmlsZT0kMlxcbitcXHRpZiBlY2hvIFxcXCIkd2FudF9maWxlXFxcIiB8IGRpZmYgLXEgLXcgLXUgLSBcXFwiJGZpbGVcXFwiIFxcdTAwM2UgL2Rldi9udWxsOyB0aGVuXFxuK1xcdFxcdHJldHVybiAwXFxuIFxcdGZpXFxuK1xcdGt0YXBfcHJpbnRfbXNnIFxcXCIkZmlsZTogY29udGVudCBkb2VzIG5vdCBtYXRjaCAnJHdhbnRfZmlsZScgKHdoaXRlc3BhY2UtaW5zZW5zaXRpdmUpXFxcIlxcbitcXHRyZXR1cm4gMVxcbiB9XFxuIFxcbi1mdW5jdGlvbiBsb2FkX3JlcV9tb2QoKVxcbisjIEZvciBjaGVja3Mgd2hlcmUgd3JpdGVzIG11c3QgTk9UIHRha2UgZWZmZWN0XFxuK2Fzc2VydF9jb250ZW50X3JlamVjdGVkKCkgIyBcXHUwMDNjZmlsZVxcdTAwM2UgXFx1MDAzY2JhZFxcdTAwM2VcXG4ge1xcbi1cXHRpZiBbICEgLWQgJFNZU0NUTCBdOyB0aGVuXFxuLVxcdFxcdGlmICEgbW9kcHJvYmUgLXEgLW4gJFRFU1RfRFJJVkVSOyB0aGVuXFxuLVxcdFxcdFxcdGVjaG8gXFxcIiQwOiBtb2R1bGUgJFRFU1RfRFJJVkVSIG5vdCBmb3VuZCBbU0tJUF1cXFwiXFxuLVxcdFxcdFxcdGVjaG8gXFxcIllvdSBtdXN0IHNldCBDT05GSUdfVEVTVF9TWVNDVEw9bSBpbiB5b3VyIGtlcm5lbFxcXCIgXFx1MDAzZVxcdTAwMjYyXFxuLVxcdFxcdFxcdGV4aXQgJGtzZnRfc2tpcFxcbi1cXHRcXHRmaVxcbi1cXHRcXHRtb2Rwcm9iZSAkVEVTVF9EUklWRVJcXG4tXFx0XFx0aWYgWyAkPyAtbmUgMCBdOyB0aGVuXFxuLVxcdFxcdFxcdGVjaG8gXFxcIiQwOiBtb2Rwcm9iZSAkVEVTVF9EUklWRVIgZmFpbGVkLlxcXCJcXG4tXFx0XFx0XFx0ZXhpdFxcbi1cXHRcXHRmaVxcbitcXHRsb2NhbCBmaWxlPSQxIGJhZD0kMlxcbitcXHRpZiBlY2hvIFxcXCIkYmFkXFxcIiB8IGRpZmYgLXEgLXcgLXUgLSBcXFwiJGZpbGVcXFwiIFxcdTAwM2UgL2Rldi9udWxsOyB0aGVuXFxuK1xcdFxcdGt0YXBfcHJpbnRfbXNnIFxcXCIkZmlsZTogdW5leHBlY3RlZGx5IG5vdyBob2xkcyByZWplY3RlZCB2YWx1ZSAnJGJhZCdcXFwiXFxuK1xcdFxcdHJldHVybiAxXFxuIFxcdGZpXFxuK1xcdHJldHVybiAwXFxuIH1cXG4gXFxuLXJlc2V0X3ZhbHMoKVxcbisjIHByb2MgZmlsZXMgZ2V0IHJlYWQgYSBwYWdlIGF0IGEgdGltZSwgd2hpY2ggY2FuIGNvbmZ1c2UgZGlmZiByZXN1bHRpbmcgaW5cXG4rIyBpbmNvcnJlY3QgcmVzdWx0cy4gVXNlIGEgdGVtcCBmaWxlIHRvIGRpZmYuXFxuK2Fzc2VydF9kaWZmX3Byb2NfZmlsZSgpICMgXFx1MDAzY2ZpbGVcXHUwMDNlIFxcdTAwM2N3YW50LWZpbGVcXHUwMDNlXFxuIHtcXG4tXFx0VkFMPVxcXCJcXFwiXFxuLVxcdFRSSUdHRVI9JChiYXNlbmFtZSAke1RBUkdFVH0pXFxuLVxcdGNhc2UgXFxcIiRUUklHR0VSXFxcIiBpblxcbi1cXHRcXHRpbnRfMDAwMSlcXG4tXFx0XFx0XFx0VkFMPVxcXCI2MFxcXCJcXG4tXFx0XFx0XFx0OztcXG4tXFx0XFx0aW50XzAwMDIpXFxuLVxcdFxcdFxcdFZBTD1cXFwiMVxcXCJcXG4tXFx0XFx0XFx0OztcXG4tXFx0XFx0dWludF8wMDAxKVxcbi1cXHRcXHRcXHRWQUw9XFxcIjMxNFxcXCJcXG4tXFx0XFx0XFx0OztcXG4tXFx0XFx0c3RyaW5nXzAwMDEpXFxuLVxcdFxcdFxcdFZBTD1cXFwiKG5vbmUpXFxcIlxcbi1cXHRcXHRcXHQ7O1xcbi1cXHRcXHRiaXRtYXBfMDAwMSlcXG4tXFx0XFx0XFx0VkFMPVxcXCJcXFwiXFxuLVxcdFxcdFxcdDs7XFxuLVxcdFxcdCopXFxuLVxcdFxcdFxcdDs7XFxuLVxcdGVzYWNcXG4tXFx0ZWNobyAtbiAkVkFMIFxcdTAwM2UgJFRBUkdFVFxcbi19XFxuK1xcdGxvY2FsIGZpbGU9JDEgd2FudF9maWxlPSQyIHRtcFxcbitcXHR0bXA9JChta3RlbXApXFxuK1xcdGNhdCBcXFwiJGZpbGVcXFwiIFxcdTAwM2UgXFxcIiR0bXBcXFwiXFxuIFxcbi1zZXRfb3JpZygpXFxuLXtcXG4tXFx0aWYgWyAhIC16ICRUQVJHRVQgXSBcXHUwMDI2XFx1MDAyNiBbICEgLXogJE9SSUcgXTsgdGhlblxcbi1cXHRcXHRpZiBbIC1mICR7VEFSR0VUfSBdOyB0aGVuXFxuLVxcdFxcdFxcdGVjaG8gXFxcIiR7T1JJR31cXFwiIFxcdTAwM2UgXFxcIiR7VEFSR0VUfVxcXCJcXG4tXFx0XFx0ZmlcXG4rXFx0aWYgZGlmZiAtdyAtcSBcXFwiJHRtcFxcXCIgXFxcIiR3YW50X2ZpbGVcXFwiIFxcdTAwM2UgL2Rldi9udWxsOyB0aGVuXFxuK1xcdFxcdHJtIC1mIFxcXCIkdG1wXFxcIlxcbitcXHRcXHRyZXR1cm4gMFxcbiBcXHRmaVxcbitcXHRrdGFwX3ByaW50X21zZyBcXFwiJGZpbGU6IGNvbnRlbnQgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgZmlsZSAkd2FudF9maWxlXFxcIlxcbitcXHRybSAtZiBcXFwiJHRtcFxcXCJcXG4rXFx0cmV0dXJuIDFcXG4gfVxcbiBcXG4tc2V0X3Rlc3QoKVxcbisjIFZlcmlmeSB0aGF0IGFuIGVycm9uZW91cyB1cGRhdGUgZmFpbHMgYW5kIGRvZXMgbm90IGNoYW5nZSB0aGUgYmFzZWxpbmUuXFxuK2Fzc2VydF9ub19wYXJ0aWFsX3VwZGF0ZSgpICMgXFx1MDAzY2ZpbGVcXHUwMDNlIFxcdTAwM2NiYXNlbGluZVxcdTAwM2UgXFx1MDAzY2JhZC12YWx1ZVxcdTAwM2VcXG4ge1xcbi1cXHRlY2hvIFxcXCIke1RFU1RfU1RSfVxcXCIgXFx1MDAzZSBcXFwiJHtUQVJHRVR9XFxcIlxcbitcXHRsb2NhbCBmaWxlPSQxIGJhc2VsaW5lPSQyIGJhZD0kM1xcbitcXG4rXFx0cHJpbnRmICclcycgXFxcIiRiYXNlbGluZVxcXCIgXFx1MDAzZSBcXFwiJGZpbGVcXFwiXFxuK1xcdGFzc2VydF93cml0ZV9yZWplY3RlZCBcXFwiJGZpbGVcXFwiIFxcXCIkYmFkXFxcIiB8fCByZXR1cm4gMVxcbitcXHRhc3NlcnRfY29udGVudF9sb29zZSBcXFwiJGZpbGVcXFwiIFxcXCIkYmFzZWxpbmVcXFwiXFxuIH1cXG4gXFxuLXZlcmlmeSgpXFxuK2Fzc2VydF9ncmVwKCkgIyBcXHUwMDNjZmlsZVxcdTAwM2UgXFx1MDAzY3BhdHRlcm5cXHUwMDNlIC0gXFx1MDAzY3BhdHRlcm5cXHUwMDNlIG11c3QgYXBwZWFyIGluIFxcdTAwM2NmaWxlXFx1MDAzZVxcbiB7XFxuLVxcdGxvY2FsIHNlZW5cXG4tXFx0c2Vlbj0kKGNhdCBcXFwiJDFcXFwiKVxcbi1cXHRpZiBbIFxcXCIke3NlZW59XFxcIiAhPSBcXFwiJHtURVNUX1NUUn1cXFwiIF07IHRoZW5cXG4tXFx0XFx0cmV0dXJuIDFcXG4rXFx0bG9jYWwgZmlsZT0kMSBwYXR0ZXJuPSQyXFxuK1xcdGlmIGdyZXAgLXEgXFxcIiRwYXR0ZXJuXFxcIiBcXFwiJGZpbGVcXFwiOyB0aGVuXFxuK1xcdFxcdHJldHVybiAwXFxuIFxcdGZpXFxuLVxcdHJldHVybiAwXFxuK1xcdGt0YXBfcHJpbnRfbXNnIFxcXCIkZmlsZTogcGF0dGVybiAnJHBhdHRlcm4nIG5vdCBmb3VuZFxcXCJcXG4rXFx0cmV0dXJuIDFcXG4gfVxcbiBcXG4tIyBwcm9jIGZpbGVzIGdldCByZWFkIGEgcGFnZSBhdCBhIHRpbWUsIHdoaWNoIGNhbiBjb25mdXNlIGRpZmYsXFxuLSMgYW5kIGdldCB5b3UgaW5jb3JyZWN0IHJlc3VsdHMgb24gcHJvYyBmaWxlcyB3aXRoIGxvbmcgZGF0YS4gVG8gdXNlXFxuLSMgZGlmZiBhZ2FpbnN0IHRoZW0geW91IG11c3QgZmlyc3QgZXh0cmFjdCB0aGUgb3V0cHV0IHRvIGEgZmlsZSwgYW5kXFxuLSMgdGhlbiBjb21wYXJlIGFnYWluc3QgdGhhdCBmaWxlLlxcbi12ZXJpZnlfZGlmZl9wcm9jX2ZpbGUoKVxcbithc3NlcnRfZ3JlcF9hYnNlbnQoKSAjIFxcdTAwM2NmaWxlXFx1MDAzZSBcXHUwMDNjcGF0dGVyblxcdTAwM2UgLSBcXHUwMDNjcGF0dGVyblxcdTAwM2UgbXVzdCBOT1QgYXBwZWFyXFxuIHtcXG4tXFx0VE1QX0RVTVBfRklMRT0kKG1rdGVtcClcXG4tXFx0Y2F0ICQxIFxcdTAwM2UgJFRNUF9EVU1QX0ZJTEVcXG4tXFxuLVxcdGlmICEgZGlmZiAtdyAtcSAkVE1QX0RVTVBfRklMRSAkMjsgdGhlblxcbi1cXHRcXHRyZXR1cm4gMVxcbi1cXHRlbHNlXFxuK1xcdGxvY2FsIGZpbGU9JDEgcGF0dGVybj0kMlxcbitcXHRpZiAhIGdyZXAgLXEgXFxcIiRwYXR0ZXJuXFxcIiBcXFwiJGZpbGVcXFwiOyB0aGVuXFxuIFxcdFxcdHJldHVybiAwXFxuIFxcdGZpXFxuK1xcdGt0YXBfcHJpbnRfbXNnIFxcXCIkZmlsZTogcGF0dGVybiAnJHBhdHRlcm4nIHVuZXhwZWN0ZWRseSBmb3VuZFxcXCJcXG4rXFx0cmV0dXJuIDFcXG4gfVxcbiBcXG4tdmVyaWZ5X2RpZmZfdygpXFxuK2Fzc2VydF9kbWVzZ19jb3VudCgpICMgXFx1MDAzY3BhdHRlcm5cXHUwMDNlIFxcdTAwM2N3YW50LWNvdW50XFx1MDAzZVxcbiB7XFxuLVxcdGVjaG8gXFxcIiRURVNUX1NUUlxcXCIgfCBkaWZmIC1xIC13IC11IC0gJDEgXFx1MDAzZSAvZGV2L251bGxcXG4tXFx0cmV0dXJuICQ/XFxuK1xcdGxvY2FsIHBhdHRlcm49JDEgd2FudD0kMiBnb3RcXG4rXFx0Z290PSQoZG1lc2cgfCBncmVwIC1jIFxcXCIkcGF0dGVyblxcXCIpXFxuK1xcdGlmIFsgXFxcIiRnb3RcXFwiIC1lcSBcXFwiJHdhbnRcXFwiIF07IHRoZW5cXG4rXFx0XFx0cmV0dXJuIDBcXG4rXFx0ZmlcXG4rXFx0a3RhcF9wcmludF9tc2cgXFxcImRtZXNnOiBwYXR0ZXJuICckcGF0dGVybicgc2VlbiAkZ290IHRpbWVzLCB3YW50ICR3YW50XFxcIlxcbitcXHRyZXR1cm4gMVxcbiB9XFxuIFxcbi0jIFZlcmlmeSB0aGF0IGFuIGVycm9uZW91cyAoJDIpIHVwZGF0ZSBmYWlscyBhbmQgZG9lcyBub3QgY2hhbmdlIFRBUkdFVFxcbi12ZXJpZnlfbm9fcGFydGlhbF91cGRhdGUoKVxcbisjIHdyaXRlIFxcdTAwM2NzdHJcXHUwMDNlIHRocm91Z2ggZGQgaW4gXFx1MDAzY2JzXFx1MDAzZS1zaXplZCBjaHVua3NcXG4rd3JpdGVfaW5fY2h1bmtzKCkgICMgXFx1MDAzY2ZpbGVcXHUwMDNlIFxcdTAwM2NzdHJcXHUwMDNlIFxcdTAwM2Nic1xcdTAwM2VcXG4ge1xcbi1cXHRURVNUX1NUUj1cXFwiJDFcXFwiXFxuLVxcdGVjaG8gLW4gXFxcIiRURVNUX1NUUlxcXCIgXFx1MDAzZSBcXFwiJFRBUkdFVFxcXCJcXG4tXFxuLVxcdGlmIGVjaG8gLW4gXFxcIiQyXFxcIiBcXHUwMDNlIFxcXCIkVEFSR0VUXFxcIiAyXFx1MDAzZSAvZGV2L251bGw7IHRoZW5cXG4tXFx0XFx0cmV0dXJuIDFcXG4tXFx0ZmlcXG4tXFx0dmVyaWZ5X2RpZmZfdyBcXFwiJHtUQVJHRVR9XFxcIlxcbitcXHRsb2NhbCBmaWxlPSQxIHN0cj0kMiBicz0kM1xcbitcXHRwcmludGYgJyVzJyBcXFwiJHN0clxcXCIgfCBkZCBvZj1cXFwiJGZpbGVcXFwiIGJzPVxcXCIkYnNcXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuIH1cXG4gXFxuLXRlc3RfcmMoKVxcbisjIHdyaXRlIFxcdTAwM2NzdHJcXHUwMDNlIHRocm91Z2ggZGQgaW4gXFx1MDAzY2JzXFx1MDAzZS1zaXplZCBjaHVua3MuIHNlZWtpbmcgXFx1MDAzY3NlZWtcXHUwMDNlIGJsb2NrcyBvZiBzaXplXFxuKyMgXFx1MDAzY2JzXFx1MDAzZSBpbnRvIHRoZSBvdXRwdXQuIHNraXBwaW5nIFxcdTAwM2Nza2lwXFx1MDAzZSBibG9ja3Mgb2Ygc2l6ZSBcXHUwMDNjYnNcXHUwMDNlIGZyb20gdGhlIGlucHV0LlxcbisjIFVuc3luY3Job25pemVkIHdoZW4gc2tpcCBpcyBub3QgcGFzc2VkLlxcbit3cml0ZV9hdF9vZmZzZXQoKSAgIyBcXHUwMDNjZmlsZVxcdTAwM2UgXFx1MDAzY3N0clxcdTAwM2UgXFx1MDAzY2JzXFx1MDAzZSBcXHUwMDNjc2Vla1xcdTAwM2UgW3NraXBdXFxuIHtcXG4tXFx0aWYgW1sgJHJjICE9IDAgXV07IHRoZW5cXG4tXFx0XFx0ZWNobyBcXFwiRmFpbGVkIHRlc3QsIHJldHVybiB2YWx1ZTogJHJjXFxcIiBcXHUwMDNlXFx1MDAyNjJcXG4tXFx0XFx0ZXhpdCAkcmNcXG4rXFx0bG9jYWwgZmlsZT0kMSBzdHI9JDIgYnM9JDMgc2Vlaz0kNCBza2lwPSR7NTotfVxcbitcXHRpZiBbIC1uIFxcXCIkc2tpcFxcXCIgXTsgdGhlblxcbitcXHRcXHRwcmludGYgJyVzJyBcXFwiJHN0clxcXCIgfCBkZCBvZj1cXFwiJGZpbGVcXFwiIGJzPVxcXCIkYnNcXFwiIHNlZWs9XFxcIiRzZWVrXFxcIiBza2lwPVxcXCIkc2tpcFxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rXFx0ZWxzZVxcbitcXHRcXHRwcmludGYgJyVzJyBcXFwiJHN0clxcXCIgfCBkZCBvZj1cXFwiJGZpbGVcXFwiIGJzPVxcXCIkYnNcXFwiIHNlZWs9XFxcIiRzZWVrXFxcIiAyXFx1MDAzZS9kZXYvbnVsbFxcbiBcXHRmaVxcbiB9XFxuIFxcbi10ZXN0X2ZpbmlzaCgpXFxuKyMgcGFkIChwcmVmaXgpIFxcdTAwM2NzdHJcXHUwMDNlIHdpdGggXFx1MDAzY3BhZFxcdTAwM2UgJ0EnIGNoYXJhY3RlcnMsIHRoZW4gd3JpdGUgaXQgYWxsIHRvIFxcdTAwM2NmaWxlXFx1MDAzZVxcbisjIHdpdGggZGQgYmxvY2sgc2l6ZSBcXHUwMDNjYnNcXHUwMDNlIChkZWZhdWx0cyB0byBcXHUwMDNjcGFkXFx1MDAzZSkuXFxuK3dyaXRlX292ZXJsb25nKCkgICMgXFx1MDAzY2ZpbGVcXHUwMDNlIFxcdTAwM2NwYWRcXHUwMDNlIFxcdTAwM2NzdHJcXHUwMDNlIFtic11cXG4ge1xcbi1cXHRzZXRfb3JpZ1xcbi1cXHRybSAtZiBcXFwiJHtURVNUX0ZJTEV9XFxcIlxcbitcXHRsb2NhbCBmaWxlPSQxIHBhZD0kMiBzdHI9JDMgYnM9JDQgcFxcbitcXHQ6IFxcXCIke2JzOj0kcGFkfVxcXCJcXG4gXFxuLVxcdGlmIFsgISAteiAke29sZF9zdHJpY3R9IF07IHRoZW5cXG4tXFx0XFx0ZWNobyAke29sZF9zdHJpY3R9IFxcdTAwM2UgJHtXUklURVNfU1RSSUNUfVxcbi1cXHRmaVxcbi1cXHRleGl0ICRyY1xcbitcXHQjIHNhdmUgYSBzdHJpbmcgd2l0aCAkcGFkIHNwYWNlcyBpbiAkcFxcbitcXHRwcmludGYgLXYgcCAnJSpzJyBcXFwiJHBhZFxcXCIgJydcXG4rXFx0IyByZXBsYWNlIFxcXCIgXFxcIiB3aXRoIFxcXCJBXFxcIlxcbitcXHRwcmludGYgJyVzJXMnIFxcXCIke3AvLyAvQX1cXFwiIFxcXCIkc3RyXFxcIiB8IGRkIG9mPVxcXCIkZmlsZVxcXCIgYnM9XFxcIiRic1xcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4gfVxcbiBcXG4tcnVuX251bWVyaWN0ZXN0cygpXFxuKyMgcGFkIChwcmVmaXgpIFxcdTAwM2NzdHJcXHUwMDNlIHdpdGggXFx1MDAzY3BhZFxcdTAwM2UgQVNDSUkgc3BhY2VzLCB0aGVuIHdyaXRlIHdpdGggZGVmYXVsdCBibG9jayBzaXplLlxcbit3cml0ZV9wYWRkZWRfZGlnaXRzKCkgICMgXFx1MDAzY2ZpbGVcXHUwMDNlIFxcdTAwM2NwYWRcXHUwMDNlIFxcdTAwM2N2YWxcXHUwMDNlXFxuIHtcXG4tXFx0ZWNobyBcXFwiPT0gVGVzdGluZyBzeXNjdGwgYmVoYXZpb3IgYWdhaW5zdCAke1RBUkdFVH0gPT1cXFwiXFxuK1xcdGxvY2FsIGZpbGU9JDEgcGFkPSQyIHZhbD0kMyBwXFxuK1xcdHByaW50ZiAtdiBwICclKnMnIFxcXCIkcGFkXFxcIiAnJ1xcbitcXHRwcmludGYgJyVzJXMnIFxcXCIkcFxcXCIgXFxcIiR2YWxcXFwiIHwgZGQgb2Y9XFxcIiRmaWxlXFxcIiAyXFx1MDAzZS9kZXYvbnVsbFxcbit9XFxuIFxcbi1cXHRyYz0wXFxuK3Rlc3RfaW50X2FycmF5X3dyaXRlcygpXFxuK3tcXG4rXFx0bG9jYWwgdD1cXFwiJHtTWVNDVEx9L2ludF8wMDAzXFxcIlxcbitcXHRsb2NhbCBsaW1pdFxcbiBcXG4tXFx0ZWNobyAtbiBcXFwiV3JpdGluZyB0ZXN0IGZpbGUgLi4uIFxcXCJcXG4tXFx0ZWNobyBcXFwiJHtURVNUX1NUUn1cXFwiIFxcdTAwM2UgXFxcIiR7VEVTVF9GSUxFfVxcXCJcXG4tXFx0aWYgISB2ZXJpZnkgXFxcIiR7VEVTVF9GSUxFfVxcXCI7IHRoZW5cXG4tXFx0XFx0ZWNobyBcXFwiRkFJTFxcXCIgXFx1MDAzZVxcdTAwMjYyXFxuLVxcdFxcdGV4aXQgMVxcbi1cXHRlbHNlXFxuLVxcdFxcdGVjaG8gXFxcIk9LXFxcIlxcbi1cXHRmaVxcbitcXHRbWyAtZiBcXFwiJHRcXFwiIF1dIHx8IHsgUkVUPSRLU0ZUX1NLSVA7IHJldHVybjsgfVxcbiBcXG4tXFx0ZWNobyAtbiBcXFwiQ2hlY2tpbmcgc3lzY3RsIGlzIG5vdCBzZXQgdG8gdGVzdCB2YWx1ZSAuLi4gXFxcIlxcbi1cXHRpZiB2ZXJpZnkgXFxcIiR7VEFSR0VUfVxcXCI7IHRoZW5cXG4tXFx0XFx0ZWNobyBcXFwiRkFJTFxcXCIgXFx1MDAzZVxcdTAwMjYyXFxuLVxcdFxcdGV4aXQgMVxcbi1cXHRlbHNlXFxuLVxcdFxcdGVjaG8gXFxcIk9LXFxcIlxcbi1cXHRmaVxcbitcXHRwcmludGYgJyVzJyBcXFwiNCAzIDIgMVxcXCIgXFx1MDAzZSBcXFwiJHRcXFwiXFxuK1xcdGFzc2VydF9jb250ZW50X2xvb3NlIFxcXCIkdFxcXCIgXFxcIjQgMyAyIDFcXFwiIHx8IFJFVD0kS1NGVF9GQUlMXFxuIFxcbi1cXHRlY2hvIC1uIFxcXCJXcml0aW5nIHN5c2N0bCBmcm9tIHNoZWxsIC4uLiBcXFwiXFxuLVxcdHNldF90ZXN0XFxuLVxcdGlmICEgdmVyaWZ5IFxcXCIke1RBUkdFVH1cXFwiOyB0aGVuXFxuLVxcdFxcdGVjaG8gXFxcIkZBSUxcXFwiIFxcdTAwM2VcXHUwMDI2Mlxcbi1cXHRcXHRleGl0IDFcXG4tXFx0ZWxzZVxcbi1cXHRcXHRlY2hvIFxcXCJPS1xcXCJcXG4tXFx0ZmlcXG4rXFx0IyBTa2lwcGluZyB0cmFpbGluZyBlbGVtZW50cyBsZWF2ZXMgdGhlbSBpbnRhY3RcXG4rXFx0cHJpbnRmICclcycgXFxcIjEwMCAxMDFcXFwiIFxcdTAwM2UgXFxcIiR0XFxcIlxcbitcXHRhc3NlcnRfY29udGVudF9sb29zZSBcXFwiJHRcXFwiIFxcXCIxMDAgMTAxIDIgMVxcXCIgfHwgUkVUPSRLU0ZUX0ZBSUxcXG4gXFxuLVxcdGVjaG8gLW4gXFxcIlJlc2V0dGluZyBzeXNjdGwgdG8gb3JpZ2luYWwgdmFsdWUgLi4uIFxcXCJcXG4tXFx0c2V0X29yaWdcXG4tXFx0aWYgdmVyaWZ5IFxcXCIke1RBUkdFVH1cXFwiOyB0aGVuXFxuLVxcdFxcdGVjaG8gXFxcIkZBSUxcXFwiIFxcdTAwM2VcXHUwMDI2Mlxcbi1cXHRcXHRleGl0IDFcXG4tXFx0ZWxzZVxcbi1cXHRcXHRlY2hvIFxcXCJPS1xcXCJcXG4tXFx0ZmlcXG4rXFx0IyBFdmVuIGZvciBhbiBpbnQgYXJyYXksIGEgc2luZ2xlIHdyaXRlIGlzIHN0aWxsIGNhcHBlZCBhdCBNQVhfRElHSVRTXFxuK1xcdCMgKFBBR0VfU0laRS84KSBieXRlczsgY2hlY2sgcmlnaHQgYXQsIGFuZCBqdXN0IHBhc3QsIHRoYXQgYm91bmRhcnkuXFxuK1xcdCMgQ2FycmllcyBvbiB0aGUgc3RhdGUgZnJvbSB0aGUgd3JpdGVzIGFib3ZlLlxcbitcXHRsaW1pdD0kKChNQVhfRElHSVRTIC0gMSkpXFxuK1xcdHdyaXRlX3BhZGRlZF9kaWdpdHMgXFxcIiR0XFxcIiBcXFwiJGxpbWl0XFxcIiBcXFwiOVxcXCJcXG4rXFx0YXNzZXJ0X2NvbnRlbnRfbG9vc2UgXFxcIiR0XFxcIiBcXFwiOSAxMDEgMiAxXFxcIiB8fCBSRVQ9JEtTRlRfRkFJTFxcbiBcXG4tXFx0IyBOb3cgdGhhdCB3ZSd2ZSB2YWxpZGF0ZWQgdGhlIHNhbml0eSBvZiBcXFwic2V0X3Rlc3RcXFwiIGFuZCBcXFwic2V0X29yaWdcXFwiLFxcbi1cXHQjIHdlIGNhbiB1c2UgdGhvc2UgZnVuY3Rpb25zIHRvIHNldCBzdGFydGluZyBzdGF0ZXMgYmVmb3JlIHJ1bm5pbmdcXG4tXFx0IyBzcGVjaWZpYyBiZWhhdmlvcmFsIHRlc3RzLlxcbitcXHRsaW1pdD0kKChNQVhfRElHSVRTKSlcXG4rXFx0d3JpdGVfcGFkZGVkX2RpZ2l0cyBcXFwiJHRcXFwiIFxcXCIkbGltaXRcXFwiIFxcXCI3XFxcIlxcbitcXHRhc3NlcnRfY29udGVudF9yZWplY3RlZCBcXFwiJHRcXFwiIFxcXCI3IDEwMSAyIDFcXFwiIHx8IFJFVD0kS1NGVF9GQUlMXFxuK31cXG4gXFxuLVxcdGVjaG8gLW4gXFxcIldyaXRpbmcgZW50aXJlIHN5c2N0bCBpbiBzaW5nbGUgd3JpdGUgLi4uIFxcXCJcXG4tXFx0c2V0X29yaWdcXG4tXFx0ZGQgaWY9XFxcIiR7VEVTVF9GSUxFfVxcXCIgb2Y9XFxcIiR7VEFSR0VUfVxcXCIgYnM9NDA5NiAyXFx1MDAzZS9kZXYvbnVsbFxcbi1cXHRpZiAhIHZlcmlmeSBcXFwiJHtUQVJHRVR9XFxcIjsgdGhlblxcbi1cXHRcXHRlY2hvIFxcXCJGQUlMXFxcIiBcXHUwMDNlXFx1MDAyNjJcXG4tXFx0XFx0cmM9MVxcbi1cXHRlbHNlXFxuLVxcdFxcdGVjaG8gXFxcIk9LXFxcIlxcbi1cXHRmaVxcbit0ZXN0X2ludF9hcnJheV9ub19wYXJ0aWFsX3VwZGF0ZSgpXFxuK3tcXG4rXFx0bG9jYWwgdD1cXFwiJHtTWVNDVEx9L2ludF8wMDAzXFxcIlxcbiBcXG4tXFx0ZWNobyAtbiBcXFwiV3JpdGluZyBtaWRkbGUgb2Ygc3lzY3RsIGFmdGVyIHN5bmNocm9uaXplZCBzZWVrIC4uLiBcXFwiXFxuLVxcdHNldF90ZXN0XFxuLVxcdGRkIGlmPVxcXCIke1RFU1RfRklMRX1cXFwiIG9mPVxcXCIke1RBUkdFVH1cXFwiIGJzPTEgc2Vlaz0xIHNraXA9MSAyXFx1MDAzZS9kZXYvbnVsbFxcbi1cXHRpZiAhIHZlcmlmeSBcXFwiJHtUQVJHRVR9XFxcIjsgdGhlblxcbi1cXHRcXHRlY2hvIFxcXCJGQUlMXFxcIiBcXHUwMDNlXFx1MDAyNjJcXG4tXFx0XFx0cmM9MVxcbi1cXHRlbHNlXFxuLVxcdFxcdGVjaG8gXFxcIk9LXFxcIlxcbi1cXHRmaVxcbitcXHRbWyAtZiBcXFwiJHRcXFwiIF1dIHx8IHsgUkVUPSRLU0ZUX1NLSVA7IHJldHVybjsgfVxcbiBcXG4tXFx0ZWNobyAtbiBcXFwiV3JpdGluZyBiZXlvbmQgZW5kIG9mIHN5c2N0bCAuLi4gXFxcIlxcbi1cXHRzZXRfb3JpZ1xcbi1cXHRkZCBpZj1cXFwiJHtURVNUX0ZJTEV9XFxcIiBvZj1cXFwiJHtUQVJHRVR9XFxcIiBicz0yMCBzZWVrPTIgMlxcdTAwM2UvZGV2L251bGxcXG4tXFx0aWYgdmVyaWZ5IFxcXCIke1RBUkdFVH1cXFwiOyB0aGVuXFxuLVxcdFxcdGVjaG8gXFxcIkZBSUxcXFwiIFxcdTAwM2VcXHUwMDI2Mlxcbi1cXHRcXHRyYz0xXFxuLVxcdGVsc2VcXG4tXFx0XFx0ZWNobyBcXFwiT0tcXFwiXFxuLVxcdGZpXFxuK1xcdCMgYmFkIDNyZCBlbGVtZW50IChub3QgYSBudW1iZXIpXFxuK1xcdGFzc2VydF9ub19wYXJ0aWFsX3VwZGF0ZSBcXFwiJHRcXFwiIFxcXCIxIDIgMyA0XFxcIiBcXFwiMTAgMjAgYWJjIDQwXFxcIiB8fCBSRVQ9JEtTRlRfRkFJTFxcbiBcXG4tXFx0ZWNobyAtbiBcXFwiV3JpdGluZyBzeXNjdGwgd2l0aCBtdWx0aXBsZSBsb25nIHdyaXRlcyAuLi4gXFxcIlxcbi1cXHRzZXRfb3JpZ1xcbi1cXHQocGVybCAtZSAncHJpbnQgXFxcIkFcXFwiIHggNTA7JzsgZWNobyBcXFwiJHtURVNUX1NUUn1cXFwiKSB8IFxcXFxcXG4tXFx0XFx0ZGQgb2Y9XFxcIiR7VEFSR0VUfVxcXCIgYnM9NTAgMlxcdTAwM2UvZGV2L251bGxcXG4tXFx0aWYgdmVyaWZ5IFxcXCIke1RBUkdFVH1cXFwiOyB0aGVuXFxuLVxcdFxcdGVjaG8gXFxcIkZBSUxcXFwiIFxcdTAwM2VcXHUwMDI2Mlxcbi1cXHRcXHRyYz0xXFxuLVxcdGVsc2VcXG4tXFx0XFx0ZWNobyBcXFwiT0tcXFwiXFxuLVxcdGZpXFxuLVxcdHRlc3RfcmNcXG4rXFx0IyBiYWQgM3JkIGVsZW1lbnQgKG92ZXJmbG93cyBpbnQpXFxuK1xcdGFzc2VydF9ub19wYXJ0aWFsX3VwZGF0ZSBcXFwiJHRcXFwiIFxcXCIxIDIgMyA0XFxcIiBcXFwiMTAgMjAgJCgoSU5UX01BWCArIDEpKSA0MFxcXCIgfHwgUkVUPSRLU0ZUX0ZBSUxcXG4rXFxuK1xcdCMgYmFkIDFzdCBlbGVtZW50XFxuK1xcdGFzc2VydF9ub19wYXJ0aWFsX3VwZGF0ZSBcXFwiJHRcXFwiIFxcXCIxIDIgMyA0XFxcIiBcXFwiYWJjIDIwIDMwIDQwXFxcIiB8fCBSRVQ9JEtTRlRfRkFJTFxcbiB9XFxuIFxcbi1jaGVja19mYWlsdXJlKClcXG4rIyBFeGVyY2lzZSB0aGUgd3JpdGUgcGF0dGVybnNcXG4rYXNzZXJ0X3dyaXRlX3BhdHRlcm5zKCkgICMgXFx1MDAzY2ZpbGVcXHUwMDNlIFxcdTAwM2NiYXNlbGluZVxcdTAwM2UgXFx1MDAzY3ZhbFxcdTAwM2VcXG4ge1xcbi1cXHRlY2hvIC1uIFxcXCJUZXN0aW5nIHRoYXQgJDEgZmFpbHMgYXMgZXhwZWN0ZWQgLi4uIFxcXCJcXG4tXFx0cmVzZXRfdmFsc1xcbi1cXHRURVNUX1NUUj1cXFwiJDFcXFwiXFxuLVxcdG9yaWc9XFxcIiQoY2F0ICRUQVJHRVQpXFxcIlxcbi1cXHRlY2hvIC1uIFxcXCIkVEVTVF9TVFJcXFwiIFxcdTAwM2UgJFRBUkdFVCAyXFx1MDAzZSAvZGV2L251bGxcXG4tXFxuLVxcdCMgd3JpdGUgc2hvdWxkIGZhaWwgYW5kICRUQVJHRVQgc2hvdWxkIHJldGFpbiBpdHMgb3JpZ2luYWwgdmFsdWVcXG4tXFx0aWYgWyAkPyA9IDAgXSB8fCBbIFxcXCIkKGNhdCAkVEFSR0VUKVxcXCIgIT0gXFxcIiRvcmlnXFxcIiBdOyB0aGVuXFxuLVxcdFxcdGVjaG8gXFxcIkZBSUxcXFwiIFxcdTAwM2VcXHUwMDI2Mlxcbi1cXHRcXHRyYz0xXFxuLVxcdGVsc2VcXG4tXFx0XFx0ZWNobyBcXFwiT0tcXFwiXFxuLVxcdGZpXFxuLVxcdHRlc3RfcmNcXG4rXFx0bG9jYWwgZmlsZT0kMSBiYXNlbGluZT0kMiB2YWw9JDMgc3RhdHVzPTBcXG4rXFxuK1xcdHByaW50ZiAnJXMnIFxcXCIkdmFsXFxcIiBcXHUwMDNlIFxcXCIkZmlsZVxcXCJcXG4rXFx0YXNzZXJ0X2NvbnRlbnQgXFxcIiRmaWxlXFxcIiBcXFwiJHZhbFxcXCIgfHwgc3RhdHVzPTFcXG4rXFx0cHJpbnRmICclcycgXFxcIiRiYXNlbGluZVxcXCIgXFx1MDAzZSBcXFwiJGZpbGVcXFwiXFxuK1xcdGFzc2VydF9jb250ZW50IFxcXCIkZmlsZVxcXCIgXFxcIiRiYXNlbGluZVxcXCIgfHwgc3RhdHVzPTFcXG4rXFxuK1xcdHByaW50ZiAnJXMnIFxcXCIkYmFzZWxpbmVcXFwiIFxcdTAwM2UgXFxcIiRmaWxlXFxcIlxcbitcXHR3cml0ZV9pbl9jaHVua3MgXFxcIiRmaWxlXFxcIiBcXFwiJHZhbFxcXCIgNDA5NlxcbitcXHRhc3NlcnRfY29udGVudCBcXFwiJGZpbGVcXFwiIFxcXCIkdmFsXFxcIiB8fCBzdGF0dXM9MVxcbitcXG4rXFx0cHJpbnRmICclcycgXFxcIiR2YWxcXFwiIFxcdTAwM2UgXFxcIiRmaWxlXFxcIlxcbitcXHR3cml0ZV9hdF9vZmZzZXQgXFxcIiRmaWxlXFxcIiBcXFwiJHZhbFxcXCIgMSAxIDFcXG4rXFx0YXNzZXJ0X2NvbnRlbnQgXFxcIiRmaWxlXFxcIiBcXFwiJHZhbFxcXCIgfHwgc3RhdHVzPTFcXG4rXFxuK1xcdHByaW50ZiAnJXMnIFxcXCIkYmFzZWxpbmVcXFwiIFxcdTAwM2UgXFxcIiRmaWxlXFxcIlxcbitcXHR3cml0ZV9hdF9vZmZzZXQgXFxcIiRmaWxlXFxcIiBcXFwiJHZhbFxcXCIgMjAgMlxcbitcXHRhc3NlcnRfY29udGVudF9yZWplY3RlZCBcXFwiJGZpbGVcXFwiIFxcXCIkdmFsXFxcIiB8fCBzdGF0dXM9MVxcbitcXG4rXFx0cHJpbnRmICclcycgXFxcIiRiYXNlbGluZVxcXCIgXFx1MDAzZSBcXFwiJGZpbGVcXFwiXFxuK1xcdHdyaXRlX292ZXJsb25nIFxcXCIkZmlsZVxcXCIgNTAgXFxcIiR2YWxcXFwiXFxuK1xcdGFzc2VydF9jb250ZW50X3JlamVjdGVkIFxcXCIkZmlsZVxcXCIgXFxcIiR2YWxcXFwiIHx8IHN0YXR1cz0xXFxuK1xcbitcXHRyZXR1cm4gXFxcIiRzdGF0dXNcXFwiXFxuIH1cXG4gXFxuLXJ1bl93aWRlaW50X3Rlc3RzKClcXG4rIyBOb25lIG9mIHRoZXNlIGZpdCBpbiAzMiBiaXRzLCBzbyB3cml0aW5nIHRoZW0gdG8gYW4gaW50L3VpbnQgc3lzY3RsIG11c3QgZmFpbFxcbithc3NlcnRfd2lkZWludF93cml0ZXNfcmVqZWN0ZWQoKSAgIyBcXHUwMDNjZmlsZVxcdTAwM2UgXFx1MDAzY2Jhc2VsaW5lXFx1MDAzZVxcbiB7XFxuLVxcdCMgc3lzY3RsIGNvbnZlcnNpb24gZnVuY3Rpb25zIHJlY2VpdmUgYSBib29sZWFuIHNpZ24gYW5kIHVsb25nXFxuLVxcdCMgbWFnbml0dWRlOyBoZXJlIHdlIGxpc3QgdGhlIG1hZ25pdHVkZXMgd2Ugd2FudCB0byB0ZXN0IChlYWNoIG9mXFxuLVxcdCMgd2hpY2ggd2lsbCBiZSB0ZXN0ZWQgaW4gYm90aCBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgZm9ybXMpLiAgU2luY2VcXG4tXFx0IyBub25lIG9mIHRoZXNlIHZhbHVlcyBmaXQgaW4gMzIgYml0cywgd3JpdGluZyB0aGVtIHRvIGFuIGludC0gb3JcXG4tXFx0IyB1aW50LXR5cGVkIHN5c2N0bCBzaG91bGQgZmFpbC5cXG4rXFx0bG9jYWwgZmlsZT0kMSBiYXNlbGluZT0kMiBzaWduIG1hZyBzdGF0dXM9MFxcbiBcXHRsb2NhbCBtYWduaXR1ZGVzPShcXG4tXFx0XFx0IyBjb21tb24gYm91bmRhcnktY29uZGl0aW9uIHZhbHVlcyAoemVybywgKzEsIC0xLCBJTlRfTUlOLFxcbi1cXHRcXHQjIGFuZCBJTlRfTUFYIHJlc3BlY3RpdmVseSkgaWYgdHJ1bmNhdGVkIHRvIGxvd2VyIDMyIGJpdHNcXG4tXFx0XFx0IyAocG90ZW50aWFsIGZvciBiZWluZyBmYWxzZWx5IGRlZW1lZCBpbiByYW5nZSlcXG4gXFx0XFx0MHgwMDAwMDAwMTAwMDAwMDAwXFxuIFxcdFxcdDB4MDAwMDAwMDEwMDAwMDAwMVxcbiBcXHRcXHQweDAwMDAwMDAxZmZmZmZmZmZcXG4gXFx0XFx0MHgwMDAwMDAwMTgwMDAwMDAwXFxuIFxcdFxcdDB4MDAwMDAwMDE3ZmZmZmZmZlxcbi1cXG4tXFx0XFx0IyB0aGVzZSBsb29rIGxpa2UgbmVnYXRpdmVzLCBidXQgd2l0aG91dCBhIGxlYWRpbmcgJy0nIGFyZVxcbi1cXHRcXHQjIGFjdHVhbGx5IGxhcmdlIHBvc2l0aXZlcyAoc2hvdWxkIGJlIHJlamVjdGVkIGFzIGFib3ZlXFxuLVxcdFxcdCMgZGVzcGl0ZSBiZWluZyB6ZXJvLysxLy0xL0lOVF9NSU4vSU5UX01BWCBpbiB0aGUgbG93ZXIgMzIpXFxuIFxcdFxcdDB4ZmZmZmZmZmYwMDAwMDAwMFxcbiBcXHRcXHQweGZmZmZmZmZmMDAwMDAwMDFcXG4gXFx0XFx0MHhmZmZmZmZmZmZmZmZmZmZmXFxuQEAgLTM2Nyw3OTMgKzI0NCw1MTUgQEAgcnVuX3dpZGVpbnRfdGVzdHMoKVxcbiBcXG4gXFx0Zm9yIHNpZ24gaW4gJycgJy0nOyBkb1xcbiBcXHRcXHRmb3IgbWFnIGluIFxcXCIke21hZ25pdHVkZXNbQF19XFxcIjsgZG9cXG4tXFx0XFx0XFx0Y2hlY2tfZmFpbHVyZSBcXFwiJHtzaWdufSR7bWFnfVxcXCJcXG4rXFx0XFx0XFx0YXNzZXJ0X25vX3BhcnRpYWxfdXBkYXRlIFxcXCIkZmlsZVxcXCIgXFxcIiRiYXNlbGluZVxcXCIgXFxcIiR7c2lnbn0ke21hZ31cXFwiIHx8IHN0YXR1cz0xXFxuIFxcdFxcdGRvbmVcXG4gXFx0ZG9uZVxcbitcXHRyZXR1cm4gXFxcIiRzdGF0dXNcXFwiXFxuIH1cXG4gXFxuLSMgWW91ciB0ZXN0IG11c3QgYWNjZXB0IGRpZ2l0cyAzIGFuZCA0IHRvIHVzZSB0aGlzXFxuLXJ1bl9saW1pdF9kaWdpdCgpXFxuKyMgQSBzaW5nbGUgd3JpdGUgaXMgY2FwcGVkIGF0IE1BWF9ESUdJVFMgKFBBR0VfU0laRS84KSBieXRlczsgY2hlY2sgdGhhdFxcbisjIGxlYWRpbmcgd2hpdGVzcGFjZSB1cCB0byB0aGF0IGxpbWl0IGlzIGlnbm9yZWQsIGFuZCB0aGF0IFBBR0VfU0laRSBvZlxcbisjIGxlYWRpbmcgd2hpdGVzcGFjZSBwdXNoZXMgdGhlIHZhbHVlIHBhc3QgdGhlIGxpbWl0IGFuZCBmYWlscy5cXG4rYXNzZXJ0X2RpZ2l0X2xpbWl0KCkgICMgXFx1MDAzY2ZpbGVcXHUwMDNlIFxcdTAwM2NiYXNlbGluZVxcdTAwM2VcXG4ge1xcbi1cXHRlY2hvIC1uIFxcXCJDaGVja2luZyBpZ25vcmluZyBzcGFjZXMgdXAgdG8gUEFHRV9TSVpFIHdvcmtzIG9uIHdyaXRlIC4uLiBcXFwiXFxuLVxcdHJlc2V0X3ZhbHNcXG4tXFxuLVxcdExJTUlUPSQoKE1BWF9ESUdJVFMgLTEpKVxcbi1cXHRURVNUX1NUUj1cXFwiM1xcXCJcXG4tXFx0KHBlcmwgLWUgJ3ByaW50IFxcXCIgXFxcIiB4ICckTElNSVQnOyc7IGVjaG8gXFxcIiR7VEVTVF9TVFJ9XFxcIikgfCBcXFxcXFxuLVxcdFxcdGRkIG9mPVxcXCIke1RBUkdFVH1cXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuLVxcbi1cXHRpZiAhIHZlcmlmeSBcXFwiJHtUQVJHRVR9XFxcIjsgdGhlblxcbi1cXHRcXHRlY2hvIFxcXCJGQUlMXFxcIiBcXHUwMDNlXFx1MDAyNjJcXG4tXFx0XFx0cmM9MVxcbi1cXHRlbHNlXFxuLVxcdFxcdGVjaG8gXFxcIk9LXFxcIlxcbi1cXHRmaVxcbi1cXHR0ZXN0X3JjXFxuK1xcdGxvY2FsIGZpbGU9JDEgYmFzZWxpbmU9JDIgc3RhdHVzPTBcXG4gXFxuLVxcdGVjaG8gLW4gXFxcIkNoZWNraW5nIHBhc3NpbmcgUEFHRV9TSVpFIG9mIHNwYWNlcyBmYWlscyBvbiB3cml0ZSAuLi4gXFxcIlxcbi1cXHRyZXNldF92YWxzXFxuK1xcdHByaW50ZiAnJXMnIFxcXCIkYmFzZWxpbmVcXFwiIFxcdTAwM2UgXFxcIiRmaWxlXFxcIlxcbitcXHR3cml0ZV9wYWRkZWRfZGlnaXRzIFxcXCIkZmlsZVxcXCIgXFxcIiQoKE1BWF9ESUdJVFMgLSAxKSlcXFwiIFxcXCIzXFxcIlxcbitcXHRhc3NlcnRfY29udGVudCBcXFwiJGZpbGVcXFwiIFxcXCIzXFxcIiB8fCBzdGF0dXM9MVxcbiBcXG4tXFx0TElNSVQ9JCgoTUFYX0RJR0lUUykpXFxuLVxcdFRFU1RfU1RSPVxcXCI0XFxcIlxcbi1cXHQocGVybCAtZSAncHJpbnQgXFxcIiBcXFwiIHggJyRMSU1JVCc7JzsgZWNobyBcXFwiJHtURVNUX1NUUn1cXFwiKSB8IFxcXFxcXG4tXFx0XFx0ZGQgb2Y9XFxcIiR7VEFSR0VUfVxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rXFx0cHJpbnRmICclcycgXFxcIiRiYXNlbGluZVxcXCIgXFx1MDAzZSBcXFwiJGZpbGVcXFwiXFxuK1xcdHdyaXRlX3BhZGRlZF9kaWdpdHMgXFxcIiRmaWxlXFxcIiBcXFwiJE1BWF9ESUdJVFNcXFwiIFxcXCI0XFxcIlxcbitcXHRhc3NlcnRfY29udGVudF9yZWplY3RlZCBcXFwiJGZpbGVcXFwiIFxcXCI0XFxcIiB8fCBzdGF0dXM9MVxcbiBcXG4tXFx0aWYgdmVyaWZ5IFxcXCIke1RBUkdFVH1cXFwiOyB0aGVuXFxuLVxcdFxcdGVjaG8gXFxcIkZBSUxcXFwiIFxcdTAwM2VcXHUwMDI2Mlxcbi1cXHRcXHRyYz0xXFxuLVxcdGVsc2VcXG4tXFx0XFx0ZWNobyBcXFwiT0tcXFwiXFxuLVxcdGZpXFxuLVxcdHRlc3RfcmNcXG4rXFx0cmV0dXJuIFxcXCIkc3RhdHVzXFxcIlxcbiB9XFxuIFxcbi0jIFlvdSBhcmUgdXNpbmcgYW4gaW50XFxuLXJ1bl9saW1pdF9kaWdpdF9pbnQoKVxcbisjIHByb2NfZG9pbnR2ZWMoKS1zcGVjaWZpYyByYW5nZSBjaGVja3M6IElOVF9NQVggbXVzdCBiZSBhY2NlcHRlZCwgSU5UX01BWCsxXFxuKyMgbXVzdCBiZSByZWplY3RlZCwgYW5kIG5lZ2F0aXZlIHZhbHVlcyBtdXN0IGJlIGFjY2VwdGVkLlxcbithc3NlcnRfaW50X3JhbmdlKCkgICMgXFx1MDAzY2ZpbGVcXHUwMDNlIFxcdTAwM2NiYXNlbGluZVxcdTAwM2VcXG4ge1xcbi1cXHRlY2hvIC1uIFxcXCJUZXN0aW5nIElOVF9NQVggd29ya3MgLi4uIFxcXCJcXG4tXFx0cmVzZXRfdmFsc1xcbi1cXHRURVNUX1NUUj1cXFwiJElOVF9NQVhcXFwiXFxuLVxcdGVjaG8gLW4gJFRFU1RfU1RSIFxcdTAwM2UgJFRBUkdFVFxcbi1cXG4tXFx0aWYgISB2ZXJpZnkgXFxcIiR7VEFSR0VUfVxcXCI7IHRoZW5cXG4tXFx0XFx0ZWNobyBcXFwiRkFJTFxcXCIgXFx1MDAzZVxcdTAwMjYyXFxuLVxcdFxcdHJjPTFcXG4tXFx0ZWxzZVxcbi1cXHRcXHRlY2hvIFxcXCJPS1xcXCJcXG4tXFx0ZmlcXG4tXFx0dGVzdF9yY1xcbitcXHRsb2NhbCBmaWxlPSQxIGJhc2VsaW5lPSQyIHN0YXR1cz0wXFxuIFxcbi1cXHRlY2hvIC1uIFxcXCJUZXN0aW5nIElOVF9NQVggKyAxIHdpbGwgZmFpbCBhcyBleHBlY3RlZCAuLi4gXFxcIlxcbi1cXHRyZXNldF92YWxzXFxuLVxcdGxldCBURVNUX1NUUj0kSU5UX01BWCsxXFxuLVxcdGVjaG8gLW4gJFRFU1RfU1RSIFxcdTAwM2UgJFRBUkdFVCAyXFx1MDAzZSAvZGV2L251bGxcXG4rXFx0cHJpbnRmICclcycgXFxcIiRiYXNlbGluZVxcXCIgXFx1MDAzZSBcXFwiJGZpbGVcXFwiXFxuK1xcdHByaW50ZiAnJXMnIFxcXCIkSU5UX01BWFxcXCIgXFx1MDAzZSBcXFwiJGZpbGVcXFwiXFxuK1xcdGFzc2VydF9jb250ZW50IFxcXCIkZmlsZVxcXCIgXFxcIiRJTlRfTUFYXFxcIiB8fCBzdGF0dXM9MVxcbiBcXG4tXFx0aWYgdmVyaWZ5IFxcXCIke1RBUkdFVH1cXFwiOyB0aGVuXFxuLVxcdFxcdGVjaG8gXFxcIkZBSUxcXFwiIFxcdTAwM2VcXHUwMDI2Mlxcbi1cXHRcXHRyYz0xXFxuLVxcdGVsc2VcXG4tXFx0XFx0ZWNobyBcXFwiT0tcXFwiXFxuLVxcdGZpXFxuLVxcdHRlc3RfcmNcXG4tXFxuLVxcdGVjaG8gLW4gXFxcIlRlc3RpbmcgbmVnYXRpdmUgdmFsdWVzIHdpbGwgd29yayBhcyBleHBlY3RlZCAuLi4gXFxcIlxcbi1cXHRyZXNldF92YWxzXFxuLVxcdFRFU1RfU1RSPVxcXCItM1xcXCJcXG4tXFx0ZWNobyAtbiAkVEVTVF9TVFIgXFx1MDAzZSAkVEFSR0VUIDJcXHUwMDNlIC9kZXYvbnVsbFxcbi1cXHRpZiAhIHZlcmlmeSBcXFwiJHtUQVJHRVR9XFxcIjsgdGhlblxcbi1cXHRcXHRlY2hvIFxcXCJGQUlMXFxcIiBcXHUwMDNlXFx1MDAyNjJcXG4tXFx0XFx0cmM9MVxcbi1cXHRlbHNlXFxuLVxcdFxcdGVjaG8gXFxcIk9LXFxcIlxcbi1cXHRmaVxcbi1cXHR0ZXN0X3JjXFxuLX1cXG4rXFx0YXNzZXJ0X25vX3BhcnRpYWxfdXBkYXRlIFxcXCIkZmlsZVxcXCIgXFxcIiRiYXNlbGluZVxcXCIgXFxcIiQoKElOVF9NQVggKyAxKSlcXFwiIHx8IHN0YXR1cz0xXFxuIFxcbi0jIFlvdSB1c2VkIGFuIGludCBhcnJheVxcbi1ydW5fbGltaXRfZGlnaXRfaW50X2FycmF5KClcXG4te1xcbi1cXHRlY2hvIC1uIFxcXCJUZXN0aW5nIGFycmF5IHdvcmtzIGFzIGV4cGVjdGVkIC4uLiBcXFwiXFxuLVxcdFRFU1RfU1RSPVxcXCI0IDMgMiAxXFxcIlxcbi1cXHRlY2hvIC1uICRURVNUX1NUUiBcXHUwMDNlICRUQVJHRVRcXG4rXFx0cHJpbnRmICclcycgXFxcIiRiYXNlbGluZVxcXCIgXFx1MDAzZSBcXFwiJGZpbGVcXFwiXFxuK1xcdHByaW50ZiAnJXMnIFxcXCItM1xcXCIgXFx1MDAzZSBcXFwiJGZpbGVcXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuK1xcdGFzc2VydF9jb250ZW50IFxcXCIkZmlsZVxcXCIgXFxcIi0zXFxcIiB8fCBzdGF0dXM9MVxcbiBcXG4tXFx0aWYgISB2ZXJpZnlfZGlmZl93IFxcXCIke1RBUkdFVH1cXFwiOyB0aGVuXFxuLVxcdFxcdGVjaG8gXFxcIkZBSUxcXFwiIFxcdTAwM2VcXHUwMDI2Mlxcbi1cXHRcXHRyYz0xXFxuLVxcdGVsc2VcXG4tXFx0XFx0ZWNobyBcXFwiT0tcXFwiXFxuLVxcdGZpXFxuLVxcdHRlc3RfcmNcXG4tXFxuLVxcdGVjaG8gLW4gXFxcIlRlc3Rpbmcgc2tpcHBpbmcgdHJhaWxpbmcgYXJyYXkgZWxlbWVudHMgd29ya3MgLi4uIFxcXCJcXG4tXFx0IyBEbyBub3QgcmVzZXRfdmFscywgY2Fycnkgb24gdGhlIHZhbHVlcyBmcm9tIHRoZSBsYXN0IHRlc3QuXFxuLVxcdCMgSWYgd2Ugb25seSBlY2hvIGluIHR3byBkaWdpdHMgdGhlIGxhc3QgdHdvIGFyZSBsZWZ0IGludGFjdFxcbi1cXHRURVNUX1NUUj1cXFwiMTAwIDEwMVxcXCJcXG4tXFx0ZWNobyAtbiAkVEVTVF9TVFIgXFx1MDAzZSAkVEFSR0VUXFxuLVxcdCMgQWZ0ZXIgd2UgZWNobyBpbiwgdG8gaGVscCBkaWZmIHdlIG5lZWQgdG8gc2V0IG9uIFRFU1RfU1RSIHdoYXRcXG4tXFx0IyB3ZSBleHBlY3QgdGhlIHJlc3VsdCB0byBiZS5cXG4tXFx0VEVTVF9TVFI9XFxcIjEwMCAxMDEgMiAxXFxcIlxcbi1cXG4tXFx0aWYgISB2ZXJpZnlfZGlmZl93IFxcXCIke1RBUkdFVH1cXFwiOyB0aGVuXFxuLVxcdFxcdGVjaG8gXFxcIkZBSUxcXFwiIFxcdTAwM2VcXHUwMDI2Mlxcbi1cXHRcXHRyYz0xXFxuLVxcdGVsc2VcXG4tXFx0XFx0ZWNobyBcXFwiT0tcXFwiXFxuLVxcdGZpXFxuLVxcdHRlc3RfcmNcXG4tXFxuLVxcdGVjaG8gLW4gXFxcIlRlc3RpbmcgUEFHRV9TSVpFIGxpbWl0IG9uIGFycmF5IHdvcmtzIC4uLiBcXFwiXFxuLVxcdCMgRG8gbm90IHJlc2V0X3ZhbHMsIGNhcnJ5IG9uIHRoZSB2YWx1ZXMgZnJvbSB0aGUgbGFzdCB0ZXN0Llxcbi1cXHQjIEV2ZW4gaWYgeW91IHVzZSBhbiBpbnQgYXJyYXksIHlvdSBhcmUgc3RpbGwgcmVzdHJpY3RlZCB0b1xcbi1cXHQjIE1BWF9ESUdJVFMsIHRoaXMgaXMgYSBrbm93biBsaW1pdGF0aW9uLiBUZXN0IGxpbWl0IHdvcmtzLlxcbi1cXHRMSU1JVD0kKChNQVhfRElHSVRTIC0xKSlcXG4tXFx0VEVTVF9TVFI9XFxcIjlcXFwiXFxuLVxcdChwZXJsIC1lICdwcmludCBcXFwiIFxcXCIgeCAnJExJTUlUJzsnOyBlY2hvIFxcXCIke1RFU1RfU1RSfVxcXCIpIHwgXFxcXFxcbi1cXHRcXHRkZCBvZj1cXFwiJHtUQVJHRVR9XFxcIiAyXFx1MDAzZS9kZXYvbnVsbFxcbi1cXG4tXFx0VEVTVF9TVFI9XFxcIjkgMTAxIDIgMVxcXCJcXG4tXFx0aWYgISB2ZXJpZnlfZGlmZl93IFxcXCIke1RBUkdFVH1cXFwiOyB0aGVuXFxuLVxcdFxcdGVjaG8gXFxcIkZBSUxcXFwiIFxcdTAwM2VcXHUwMDI2Mlxcbi1cXHRcXHRyYz0xXFxuLVxcdGVsc2VcXG4tXFx0XFx0ZWNobyBcXFwiT0tcXFwiXFxuLVxcdGZpXFxuLVxcdHRlc3RfcmNcXG4tXFxuLVxcdGVjaG8gLW4gXFxcIlRlc3RpbmcgZXhjZWVkaW5nIFBBR0VfU0laRSBsaW1pdCBmYWlscyBhcyBleHBlY3RlZCAuLi4gXFxcIlxcbi1cXHQjIERvIG5vdCByZXNldF92YWxzLCBjYXJyeSBvbiB0aGUgdmFsdWVzIGZyb20gdGhlIGxhc3QgdGVzdC5cXG4tXFx0IyBOb3cgZ28gb3ZlciBsaW1pdC5cXG4tXFx0TElNSVQ9JCgoTUFYX0RJR0lUUykpXFxuLVxcdFRFU1RfU1RSPVxcXCI3XFxcIlxcbi1cXHQocGVybCAtZSAncHJpbnQgXFxcIiBcXFwiIHggJyRMSU1JVCc7JzsgZWNobyBcXFwiJHtURVNUX1NUUn1cXFwiKSB8IFxcXFxcXG4tXFx0XFx0ZGQgb2Y9XFxcIiR7VEFSR0VUfVxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4tXFxuLVxcdFRFU1RfU1RSPVxcXCI3IDEwMSAyIDFcXFwiXFxuLVxcdGlmIHZlcmlmeV9kaWZmX3cgXFxcIiR7VEFSR0VUfVxcXCI7IHRoZW5cXG4tXFx0XFx0ZWNobyBcXFwiRkFJTFxcXCIgXFx1MDAzZVxcdTAwMjYyXFxuLVxcdFxcdHJjPTFcXG4tXFx0ZWxzZVxcbi1cXHRcXHRlY2hvIFxcXCJPS1xcXCJcXG4tXFx0ZmlcXG4tXFx0dGVzdF9yY1xcbitcXHRyZXR1cm4gXFxcIiRzdGF0dXNcXFwiXFxuIH1cXG4gXFxuLSMgWW91IHVzZWQgYW4gaW50IGFycmF5IGFuZCBvbmUgb2YgdGhlIGVsZW1lbnRzIGlzIG5vdCBhY2NlcHRhYmxlXFxuLXJ1bl9pbnRfYXJyYXlfbm9fcGFydGlhbF91cGRhdGUoKVxcbisjIHByb2NfZG91aW50dmVjKCktc3BlY2lmaWMgcmFuZ2UgY2hlY2tzOiBVSU5UX01BWCBtdXN0IGJlIGFjY2VwdGVkLFxcbisjIFVJTlRfTUFYKzEgbXVzdCBiZSByZWplY3RlZCwgYW5kIG5lZ2F0aXZlIHZhbHVlcyBtdXN0IGJlIHJlamVjdGVkIHRvby5cXG4rYXNzZXJ0X3VpbnRfcmFuZ2UoKSAgIyBcXHUwMDNjZmlsZVxcdTAwM2UgXFx1MDAzY2Jhc2VsaW5lXFx1MDAzZVxcbiB7XFxuLVxcdGVjaG8gLW4gXFxcIlRlc3RpbmcgaW52YWxpZCBhcnJheSBlbGVtZW50IGRvZXMgbm90IHBhcnRpYWxseSB1cGRhdGUgLi4uIFxcXCJcXG4tXFx0IyBFeHBlY3QgZmFpbHVyZSBiZWNhdXNlIG9mIDNyZCBlbGVtZW50IChhYmMpLlxcbi1cXHRpZiAhIHZlcmlmeV9ub19wYXJ0aWFsX3VwZGF0ZSBcXFwiMSAyIDMgNFxcXCIgXFxcIjEwIDIwIGFiYyA0MFxcXCI7IHRoZW5cXG4tXFx0XFx0ZWNobyBcXFwiRkFJTFxcXCIgXFx1MDAzZVxcdTAwMjYyXFxuLVxcdFxcdHJjPTFcXG4tXFx0ZWxzZVxcbi1cXHRcXHRlY2hvIFxcXCJPS1xcXCJcXG4tXFx0ZmlcXG4tXFx0dGVzdF9yY1xcbitcXHRsb2NhbCBmaWxlPSQxIGJhc2VsaW5lPSQyIHN0YXR1cz0wXFxuIFxcbi1cXHRlY2hvIC1uIFxcXCJUZXN0aW5nIG91dCBvZiByYW5nZSBhcnJheSBlbGVtZW50IGRvZXMgbm90IHBhcnRpYWxseSB1cGRhdGUgLi4uIFxcXCJcXG4tXFx0IyBFeHBlY3QgZmFpbHVyZSBiZWNhdXNlIG9mIDNyZCBlbGVtZW50IChncmVhdGVyIHRoYW4gaW50KVxcbi1cXHRpZiAhIHZlcmlmeV9ub19wYXJ0aWFsX3VwZGF0ZSBcXFwiMSAyIDMgNFxcXCIgXFxcIjEwIDIwICQoKElOVF9NQVggKyAxKSkgNDBcXFwiOyB0aGVuXFxuLVxcdFxcdGVjaG8gXFxcIkZBSUxcXFwiIFxcdTAwM2VcXHUwMDI2Mlxcbi1cXHRcXHRyYz0xXFxuLVxcdGVsc2VcXG4tXFx0XFx0ZWNobyBcXFwiT0tcXFwiXFxuLVxcdGZpXFxuLVxcdHRlc3RfcmNcXG4rXFx0cHJpbnRmICclcycgXFxcIiRiYXNlbGluZVxcXCIgXFx1MDAzZSBcXFwiJGZpbGVcXFwiXFxuK1xcdHByaW50ZiAnJXMnIFxcXCIkVUlOVF9NQVhcXFwiIFxcdTAwM2UgXFxcIiRmaWxlXFxcIlxcbitcXHRhc3NlcnRfY29udGVudCBcXFwiJGZpbGVcXFwiIFxcXCIkVUlOVF9NQVhcXFwiIHx8IHN0YXR1cz0xXFxuIFxcbi1cXHRlY2hvIC1uIFxcXCJUZXN0aW5nIGludmFsaWQgZmlyc3QgYXJyYXkgZWxlbWVudCBkb2VzIG5vdCB1cGRhdGUgLi4uIFxcXCJcXG4tXFx0IyBFeHBlY3QgZmFpbHVyZSBvZiAxc3QgZWxlbWVudFxcbi1cXHRpZiAhIHZlcmlmeV9ub19wYXJ0aWFsX3VwZGF0ZSBcXFwiMSAyIDMgNFxcXCIgXFxcImFiYyAyMCAzMCA0MFxcXCI7IHRoZW5cXG4tXFx0XFx0ZWNobyBcXFwiRkFJTFxcXCIgXFx1MDAzZVxcdTAwMjYyXFxuLVxcdFxcdHJjPTFcXG4tXFx0ZWxzZVxcbi1cXHRcXHRlY2hvIFxcXCJPS1xcXCJcXG4tXFx0ZmlcXG4tXFx0dGVzdF9yY1xcbitcXHRhc3NlcnRfbm9fcGFydGlhbF91cGRhdGUgXFxcIiRmaWxlXFxcIiBcXFwiJGJhc2VsaW5lXFxcIiBcXFwiJCgoVUlOVF9NQVggKyAxKSlcXFwiIHx8IHN0YXR1cz0xXFxuK1xcdGFzc2VydF9ub19wYXJ0aWFsX3VwZGF0ZSBcXFwiJGZpbGVcXFwiIFxcXCIkYmFzZWxpbmVcXFwiIFxcXCItM1xcXCIgfHwgc3RhdHVzPTFcXG4rXFxuK1xcdHJldHVybiBcXFwiJHN0YXR1c1xcXCJcXG4gfVxcbiBcXG4tIyBZb3UgYXJlIHVzaW5nIGFuIHVuc2lnbmVkIGludFxcbi1ydW5fbGltaXRfZGlnaXRfdWludCgpXFxuK3Rlc3RfaW50X21pbm1heCgpXFxuIHtcXG4tXFx0ZWNobyAtbiBcXFwiVGVzdGluZyBVSU5UX01BWCB3b3JrcyAuLi4gXFxcIlxcbi1cXHRyZXNldF92YWxzXFxuLVxcdFRFU1RfU1RSPVxcXCIkVUlOVF9NQVhcXFwiXFxuLVxcdGVjaG8gLW4gJFRFU1RfU1RSIFxcdTAwM2UgJFRBUkdFVFxcbi1cXG4tXFx0aWYgISB2ZXJpZnkgXFxcIiR7VEFSR0VUfVxcXCI7IHRoZW5cXG4tXFx0XFx0ZWNobyBcXFwiRkFJTFxcXCIgXFx1MDAzZVxcdTAwMjYyXFxuLVxcdFxcdHJjPTFcXG4tXFx0ZWxzZVxcbi1cXHRcXHRlY2hvIFxcXCJPS1xcXCJcXG4tXFx0ZmlcXG4tXFx0dGVzdF9yY1xcbi1cXG4tXFx0ZWNobyAtbiBcXFwiVGVzdGluZyBVSU5UX01BWCArIDEgd2lsbCBmYWlsIGFzIGV4cGVjdGVkIC4uLiBcXFwiXFxuLVxcdHJlc2V0X3ZhbHNcXG4tXFx0VEVTVF9TVFI9JCgoJFVJTlRfTUFYKzEpKVxcbi1cXHRlY2hvIC1uICRURVNUX1NUUiBcXHUwMDNlICRUQVJHRVQgMlxcdTAwM2UgL2Rldi9udWxsXFxuK1xcdGxvY2FsIHQ9XFxcIiR7U1lTQ1RMfS9pbnRfMDAwMVxcXCJcXG4rXFx0bG9jYWwgYmFzZWxpbmU9XFxcIjYwXFxcIiB2YWw9XFxcIjYxXFxcIlxcbiBcXG4tXFx0aWYgdmVyaWZ5IFxcXCIke1RBUkdFVH1cXFwiOyB0aGVuXFxuLVxcdFxcdGVjaG8gXFxcIkZBSUxcXFwiIFxcdTAwM2VcXHUwMDI2Mlxcbi1cXHRcXHRyYz0xXFxuLVxcdGVsc2VcXG4tXFx0XFx0ZWNobyBcXFwiT0tcXFwiXFxuLVxcdGZpXFxuLVxcdHRlc3RfcmNcXG4rXFx0W1sgLWYgXFxcIiR0XFxcIiBdXSB8fCB7IFJFVD0kS1NGVF9TS0lQOyByZXR1cm47IH1cXG4gXFxuLVxcdGVjaG8gLW4gXFxcIlRlc3RpbmcgbmVnYXRpdmUgdmFsdWVzIHdpbGwgbm90IHdvcmsgYXMgZXhwZWN0ZWQgLi4uIFxcXCJcXG4tXFx0cmVzZXRfdmFsc1xcbi1cXHRURVNUX1NUUj1cXFwiLTNcXFwiXFxuLVxcdGVjaG8gLW4gJFRFU1RfU1RSIFxcdTAwM2UgJFRBUkdFVCAyXFx1MDAzZSAvZGV2L251bGxcXG4tXFxuLVxcdGlmIHZlcmlmeSBcXFwiJHtUQVJHRVR9XFxcIjsgdGhlblxcbi1cXHRcXHRlY2hvIFxcXCJGQUlMXFxcIiBcXHUwMDNlXFx1MDAyNjJcXG4tXFx0XFx0cmM9MVxcbi1cXHRlbHNlXFxuLVxcdFxcdGVjaG8gXFxcIk9LXFxcIlxcbi1cXHRmaVxcbi1cXHR0ZXN0X3JjXFxuK1xcdGFzc2VydF93cml0ZV9wYXR0ZXJucyBcXFwiJHRcXFwiIFxcXCIkYmFzZWxpbmVcXFwiIFxcXCIkdmFsXFxcIiB8fCBSRVQ9JEtTRlRfRkFJTFxcbitcXHRhc3NlcnRfd2lkZWludF93cml0ZXNfcmVqZWN0ZWQgXFxcIiR0XFxcIiBcXFwiJGJhc2VsaW5lXFxcIiB8fCBSRVQ9JEtTRlRfRkFJTFxcbitcXHRhc3NlcnRfZGlnaXRfbGltaXQgXFxcIiR0XFxcIiBcXFwiJGJhc2VsaW5lXFxcIiB8fCBSRVQ9JEtTRlRfRkFJTFxcbiB9XFxuIFxcbi1ydW5fc3RyaW5ndGVzdHMoKVxcbit0ZXN0X2ludF9wbGFpbigpXFxuIHtcXG4tXFx0ZWNobyAtbiBcXFwiV3JpdGluZyBlbnRpcmUgc3lzY3RsIGluIHNob3J0IHdyaXRlcyAuLi4gXFxcIlxcbi1cXHRzZXRfb3JpZ1xcbi1cXHRkZCBpZj1cXFwiJHtURVNUX0ZJTEV9XFxcIiBvZj1cXFwiJHtUQVJHRVR9XFxcIiBicz0xIDJcXHUwMDNlL2Rldi9udWxsXFxuLVxcdGlmICEgdmVyaWZ5IFxcXCIke1RBUkdFVH1cXFwiOyB0aGVuXFxuLVxcdFxcdGVjaG8gXFxcIkZBSUxcXFwiIFxcdTAwM2VcXHUwMDI2Mlxcbi1cXHRcXHRyYz0xXFxuLVxcdGVsc2VcXG4tXFx0XFx0ZWNobyBcXFwiT0tcXFwiXFxuLVxcdGZpXFxuK1xcdGxvY2FsIHQ9XFxcIiR7U1lTQ1RMfS9pbnRfMDAwMlxcXCJcXG4rXFx0bG9jYWwgYmFzZWxpbmU9XFxcIjFcXFwiIHZhbD1cXFwiMlxcXCJcXG4gXFxuLVxcdGVjaG8gLW4gXFxcIldyaXRpbmcgbWlkZGxlIG9mIHN5c2N0bCBhZnRlciB1bnN5bmNocm9uaXplZCBzZWVrIC4uLiBcXFwiXFxuLVxcdHNldF90ZXN0XFxuLVxcdGRkIGlmPVxcXCIke1RFU1RfRklMRX1cXFwiIG9mPVxcXCIke1RBUkdFVH1cXFwiIGJzPTEgc2Vlaz0xIDJcXHUwMDNlL2Rldi9udWxsXFxuLVxcdGlmIHZlcmlmeSBcXFwiJHtUQVJHRVR9XFxcIjsgdGhlblxcbi1cXHRcXHRlY2hvIFxcXCJGQUlMXFxcIiBcXHUwMDNlXFx1MDAyNjJcXG4tXFx0XFx0cmM9MVxcbi1cXHRlbHNlXFxuLVxcdFxcdGVjaG8gXFxcIk9LXFxcIlxcbi1cXHRmaVxcbitcXHRbWyAtZiBcXFwiJHRcXFwiIF1dIHx8IHsgUkVUPSRLU0ZUX1NLSVA7IHJldHVybjsgfVxcbiBcXG4tXFx0ZWNobyAtbiBcXFwiQ2hlY2tpbmcgc3lzY3RsIG1heGxlbiBpcyBhdCBsZWFzdCAkTUFYTEVOIC4uLiBcXFwiXFxuLVxcdHNldF9vcmlnXFxuLVxcdHBlcmwgLWUgJ3ByaW50IFxcXCJBXFxcIiB4ICgnXFxcIiR7TUFYTEVOfVxcXCInLTIpLCBcXFwiQlxcXCI7JyB8IFxcXFxcXG4tXFx0XFx0ZGQgb2Y9XFxcIiR7VEFSR0VUfVxcXCIgYnM9XFxcIiR7TUFYTEVOfVxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4tXFx0aWYgISBncmVwIC1xIEIgXFxcIiR7VEFSR0VUfVxcXCI7IHRoZW5cXG4tXFx0XFx0ZWNobyBcXFwiRkFJTFxcXCIgXFx1MDAzZVxcdTAwMjYyXFxuLVxcdFxcdHJjPTFcXG4tXFx0ZWxzZVxcbi1cXHRcXHRlY2hvIFxcXCJPS1xcXCJcXG4tXFx0ZmlcXG4tXFxuLVxcdGVjaG8gLW4gXFxcIkNoZWNraW5nIHN5c2N0bCBrZWVwcyBvcmlnaW5hbCBzdHJpbmcgb24gb3ZlcmZsb3cgYXBwZW5kIC4uLiBcXFwiXFxuLVxcdHNldF9vcmlnXFxuLVxcdHBlcmwgLWUgJ3ByaW50IFxcXCJBXFxcIiB4ICgnXFxcIiR7TUFYTEVOfVxcXCInLTEpLCBcXFwiQlxcXCI7JyB8IFxcXFxcXG4tXFx0XFx0ZGQgb2Y9XFxcIiR7VEFSR0VUfVxcXCIgYnM9JCgoIE1BWExFTiAtIDEgKSkgMlxcdTAwM2UvZGV2L251bGxcXG4tXFx0aWYgZ3JlcCAtcSBCIFxcXCIke1RBUkdFVH1cXFwiOyB0aGVuXFxuLVxcdFxcdGVjaG8gXFxcIkZBSUxcXFwiIFxcdTAwM2VcXHUwMDI2Mlxcbi1cXHRcXHRyYz0xXFxuLVxcdGVsc2VcXG4tXFx0XFx0ZWNobyBcXFwiT0tcXFwiXFxuLVxcdGZpXFxuLVxcbi1cXHRlY2hvIC1uIFxcXCJDaGVja2luZyBzeXNjdGwgc3RheXMgTlVMTCB0ZXJtaW5hdGVkIG9uIHdyaXRlIC4uLiBcXFwiXFxuLVxcdHNldF9vcmlnXFxuLVxcdHBlcmwgLWUgJ3ByaW50IFxcXCJBXFxcIiB4ICgnXFxcIiR7TUFYTEVOfVxcXCInLTEpLCBcXFwiQlxcXCI7JyB8IFxcXFxcXG4tXFx0XFx0ZGQgb2Y9XFxcIiR7VEFSR0VUfVxcXCIgYnM9XFxcIiR7TUFYTEVOfVxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4tXFx0aWYgZ3JlcCAtcSBCIFxcXCIke1RBUkdFVH1cXFwiOyB0aGVuXFxuLVxcdFxcdGVjaG8gXFxcIkZBSUxcXFwiIFxcdTAwM2VcXHUwMDI2Mlxcbi1cXHRcXHRyYz0xXFxuLVxcdGVsc2VcXG4tXFx0XFx0ZWNobyBcXFwiT0tcXFwiXFxuLVxcdGZpXFxuLVxcbi1cXHRlY2hvIC1uIFxcXCJDaGVja2luZyBzeXNjdGwgc3RheXMgTlVMTCB0ZXJtaW5hdGVkIG9uIG92ZXJ3cml0ZSAuLi4gXFxcIlxcbi1cXHRzZXRfb3JpZ1xcbi1cXHRwZXJsIC1lICdwcmludCBcXFwiQVxcXCIgeCAoJ1xcXCIke01BWExFTn1cXFwiJy0xKSwgXFxcIkJCXFxcIjsnIHwgXFxcXFxcbi1cXHRcXHRkZCBvZj1cXFwiJHtUQVJHRVR9XFxcIiBicz0kKCggJE1BWExFTiArIDEgKSkgMlxcdTAwM2UvZGV2L251bGxcXG4tXFx0aWYgZ3JlcCAtcSBCIFxcXCIke1RBUkdFVH1cXFwiOyB0aGVuXFxuLVxcdFxcdGVjaG8gXFxcIkZBSUxcXFwiIFxcdTAwM2VcXHUwMDI2Mlxcbi1cXHRcXHRyYz0xXFxuLVxcdGVsc2VcXG4tXFx0XFx0ZWNobyBcXFwiT0tcXFwiXFxuLVxcdGZpXFxuLVxcbi1cXHR0ZXN0X3JjXFxuK1xcdGFzc2VydF93cml0ZV9wYXR0ZXJucyBcXFwiJHRcXFwiIFxcXCIkYmFzZWxpbmVcXFwiIFxcXCIkdmFsXFxcIiB8fCBSRVQ9JEtTRlRfRkFJTFxcbitcXHRhc3NlcnRfd2lkZWludF93cml0ZXNfcmVqZWN0ZWQgXFxcIiR0XFxcIiBcXFwiJGJhc2VsaW5lXFxcIiB8fCBSRVQ9JEtTRlRfRkFJTFxcbitcXHRhc3NlcnRfZGlnaXRfbGltaXQgXFxcIiR0XFxcIiBcXFwiJGJhc2VsaW5lXFxcIiB8fCBSRVQ9JEtTRlRfRkFJTFxcbitcXHRhc3NlcnRfaW50X3JhbmdlIFxcXCIkdFxcXCIgXFxcIiRiYXNlbGluZVxcXCIgfHwgUkVUPSRLU0ZUX0ZBSUxcXG4gfVxcbiBcXG4tdGFyZ2V0X2V4aXN0cygpXFxuK3Rlc3RfdWludF9wbGFpbigpXFxuIHtcXG4tXFx0VEFSR0VUPVxcXCIke1NZU0NUTH0vJDFcXFwiXFxuLVxcdFRFU1RfSUQ9XFxcIiQyXFxcIlxcbitcXHRsb2NhbCB0PVxcXCIke1NZU0NUTH0vdWludF8wMDAxXFxcIlxcbitcXHRsb2NhbCBiYXNlbGluZT1cXFwiMzE0XFxcIiB2YWw9XFxcIjMxNVxcXCJcXG4gXFxuLVxcdGlmIFsgISAtZiAke1RBUkdFVH0gXSA7IHRoZW5cXG4tXFx0XFx0cmV0dXJuIDBcXG4tXFx0ZmlcXG4tXFx0cmV0dXJuIDFcXG4tfVxcbitcXHRbWyAtZiBcXFwiJHRcXFwiIF1dIHx8IHsgUkVUPSRLU0ZUX1NLSVA7IHJldHVybjsgfVxcbiBcXG4tcnVuX2JpdG1hcHRlc3QoKSB7XFxuLVxcdCMgVG90YWwgbGVuZ3RoIG9mIGJpdG1hcHMgc3RyaW5nIHRvIHVzZSwgYSBiaXQgdW5kZXJcXG4tXFx0IyB0aGUgbWF4aW11bSBpbnB1dCBzaXplIG9mIHRoZSB0ZXN0IG5vZGVcXG4tXFx0TEVOR1RIPSQoKFJBTkRPTSAlIDY1MDAwKSlcXG4rXFx0YXNzZXJ0X3dyaXRlX3BhdHRlcm5zIFxcXCIkdFxcXCIgXFxcIiRiYXNlbGluZVxcXCIgXFxcIiR2YWxcXFwiIHx8IFJFVD0kS1NGVF9GQUlMXFxuK1xcdGFzc2VydF93aWRlaW50X3dyaXRlc19yZWplY3RlZCBcXFwiJHRcXFwiIFxcXCIkYmFzZWxpbmVcXFwiIHx8IFJFVD0kS1NGVF9GQUlMXFxuK1xcdGFzc2VydF9kaWdpdF9saW1pdCBcXFwiJHRcXFwiIFxcXCIkYmFzZWxpbmVcXFwiIHx8IFJFVD0kS1NGVF9GQUlMXFxuK1xcdGFzc2VydF91aW50X3JhbmdlIFxcXCIkdFxcXCIgXFxcIiRiYXNlbGluZVxcXCIgfHwgUkVUPSRLU0ZUX0ZBSUxcXG4rfVxcbiBcXG4tXFx0IyBGaXJzdCBiaXQgdG8gc2V0XFxuLVxcdEJJVD0kKChSQU5ET00gJSAxMDI0KSlcXG4rIyBwcm9jX2Rvc3RyaW5nKCktc3BlY2lmaWMgd3JpdGUgcGF0dGVybnNcXG4rYXNzZXJ0X3N0cmluZ193cml0ZV9wYXR0ZXJucygpICAjIFxcdTAwM2NmaWxlXFx1MDAzZSBcXHUwMDNjYmFzZWxpbmVcXHUwMDNlIFxcdTAwM2N2YWxcXHUwMDNlIFxcdTAwM2NtYXhsZW5cXHUwMDNlXFxuK3tcXG4rXFx0bG9jYWwgZmlsZT0kMSBiYXNlbGluZT0kMiB2YWw9JDMgbWF4bGVuPSQ0IHN0YXR1cz0wXFxuIFxcbi1cXHQjIFN0cmluZyBjb250YWluaW5nIG91ciBsaXN0IG9mIGJpdHMgdG8gc2V0XFxuLVxcdFRFU1RfU1RSPSRCSVRcXG4rXFx0cHJpbnRmICclcycgXFxcIiRiYXNlbGluZVxcXCIgXFx1MDAzZSBcXFwiJGZpbGVcXFwiXFxuK1xcdHdyaXRlX2luX2NodW5rcyBcXFwiJGZpbGVcXFwiIFxcXCIkdmFsXFxcIiAxXFxuK1xcdGFzc2VydF9jb250ZW50IFxcXCIkZmlsZVxcXCIgXFxcIiR2YWxcXFwiIHx8IHN0YXR1cz0xXFxuIFxcbi1cXHQjIGJ1aWxkIHVwIHRoZSBzdHJpbmdcXG4tXFx0d2hpbGUgWyBcXFwiJHsjVEVTVF9TVFJ9XFxcIiAtbGUgXFxcIiRMRU5HVEhcXFwiIF07IGRvXFxuLVxcdFxcdCMgTWFrZSBzdXJlIG5leHQgZW50cnkgaXMgZGlzY29udGlndW91cyxcXG4tXFx0XFx0IyBza2lwIGFoZWFkIGF0IGxlYXN0IDJcXG4tXFx0XFx0QklUPSQoKEJJVCArICQoKDIgKyBSQU5ET00gJSAxMCkpKSlcXG4rXFx0cHJpbnRmICclcycgXFxcIiR2YWxcXFwiIFxcdTAwM2UgXFxcIiRmaWxlXFxcIlxcbitcXHR3cml0ZV9hdF9vZmZzZXQgXFxcIiRmaWxlXFxcIiBcXFwiJHZhbFxcXCIgMSAxXFxuK1xcdGFzc2VydF9jb250ZW50X3JlamVjdGVkIFxcXCIkZmlsZVxcXCIgXFxcIiR2YWxcXFwiIHx8IHN0YXR1cz0xXFxuIFxcbi1cXHRcXHQjIEFkZCBuZXcgYml0IHRvIHRoZSBsaXN0XFxuLVxcdFxcdFRFU1RfU1RSPVxcXCIke1RFU1RfU1RSfSwke0JJVH1cXFwiXFxuK1xcdCMgc3lzY3RsIG1heGxlbiBpcyBhdCBsZWFzdCAkbWF4bGVuXFxuK1xcdHByaW50ZiAnJXMnIFxcXCIkYmFzZWxpbmVcXFwiIFxcdTAwM2UgXFxcIiRmaWxlXFxcIlxcbitcXHR3cml0ZV9vdmVybG9uZyBcXFwiJGZpbGVcXFwiIFxcXCIkKChtYXhsZW4gLSAyKSlcXFwiIFxcXCJCXFxcIiBcXFwiJG1heGxlblxcXCJcXG4rXFx0YXNzZXJ0X2dyZXAgXFxcIiRmaWxlXFxcIiBcXFwiQlxcXCIgfHwgc3RhdHVzPTFcXG4gXFxuLVxcdFxcdCMgUmFuZG9tbHkgbWFrZSBpdCBhIHJhbmdlXFxuLVxcdFxcdGlmIFsgXFxcIiQoKFJBTkRPTSAlIDIpKVxcXCIgLWVxIFxcXCIxXFxcIiBdOyB0aGVuXFxuLVxcdFxcdFxcdFJBTkdFX0VORD0kKChCSVQgKyAkKCgxICsgUkFORE9NICUgMTApKSkpXFxuLVxcdFxcdFxcdFRFU1RfU1RSPVxcXCIke1RFU1RfU1RSfS0ke1JBTkdFX0VORH1cXFwiXFxuLVxcdFxcdFxcdEJJVD0kUkFOR0VfRU5EXFxuLVxcdFxcdGZpXFxuLVxcdGRvbmVcXG4rXFx0IyBrZWVwIG9yaWdpbmFsIHN0cmluZyBvbiBvdmVyZmxvdyBhcHBlbmRcXG4rXFx0cHJpbnRmICclcycgXFxcIiRiYXNlbGluZVxcXCIgXFx1MDAzZSBcXFwiJGZpbGVcXFwiXFxuK1xcdHdyaXRlX292ZXJsb25nIFxcXCIkZmlsZVxcXCIgXFxcIiQoKG1heGxlbiAtIDEpKVxcXCIgXFxcIkJcXFwiIFxcXCIkKChtYXhsZW4gLSAxKSlcXFwiXFxuK1xcdGFzc2VydF9ncmVwX2Fic2VudCBcXFwiJGZpbGVcXFwiIFxcXCJCXFxcIiB8fCBzdGF0dXM9MVxcbiBcXG4tXFx0ZWNobyAtbiBcXFwiQ2hlY2tpbmcgYml0bWFwIGhhbmRsZXIgLi4uIFxcXCJcXG4tXFx0VEVTVF9GSUxFPSQobWt0ZW1wKVxcbi1cXHRlY2hvIC1uIFxcXCIkVEVTVF9TVFJcXFwiIFxcdTAwM2UgJFRFU1RfRklMRVxcbitcXHQjIHN5c2N0bCBzdGF5cyBOVUxMIHRlcm1pbmF0ZWQgb24gd3JpdGVcXG4rXFx0cHJpbnRmICclcycgXFxcIiRiYXNlbGluZVxcXCIgXFx1MDAzZSBcXFwiJGZpbGVcXFwiXFxuK1xcdHdyaXRlX292ZXJsb25nIFxcXCIkZmlsZVxcXCIgXFxcIiQoKG1heGxlbiAtIDEpKVxcXCIgXFxcIkJcXFwiIFxcXCIkbWF4bGVuXFxcIlxcbitcXHRhc3NlcnRfZ3JlcF9hYnNlbnQgXFxcIiRmaWxlXFxcIiBcXFwiQlxcXCIgfHwgc3RhdHVzPTFcXG4gXFxuLVxcdGNhdCAkVEVTVF9GSUxFIFxcdTAwM2UgJFRBUkdFVCAyXFx1MDAzZSAvZGV2L251bGxcXG4tXFx0aWYgWyAkPyAtbmUgMCBdOyB0aGVuXFxuLVxcdFxcdGVjaG8gXFxcIkZBSUxcXFwiIFxcdTAwM2VcXHUwMDI2Mlxcbi1cXHRcXHRyYz0xXFxuLVxcdFxcdHRlc3RfcmNcXG4tXFx0ZmlcXG4rXFx0IyBzeXNjdGwgc3RheXMgTlVMTCB0ZXJtaW5hdGVkIG9uIG92ZXJ3cml0ZVxcbitcXHRwcmludGYgJyVzJyBcXFwiJGJhc2VsaW5lXFxcIiBcXHUwMDNlIFxcXCIkZmlsZVxcXCJcXG4rXFx0d3JpdGVfb3ZlcmxvbmcgXFxcIiRmaWxlXFxcIiBcXFwiJCgobWF4bGVuIC0gMSkpXFxcIiBcXFwiQkJcXFwiIFxcXCIkKChtYXhsZW4gKyAxKSlcXFwiXFxuK1xcdGFzc2VydF9ncmVwX2Fic2VudCBcXFwiJGZpbGVcXFwiIFxcXCJCXFxcIiB8fCBzdGF0dXM9MVxcbiBcXG4tXFx0aWYgISB2ZXJpZnlfZGlmZl9wcm9jX2ZpbGUgXFxcIiRUQVJHRVRcXFwiIFxcXCIkVEVTVF9GSUxFXFxcIjsgdGhlblxcbi1cXHRcXHRlY2hvIFxcXCJGQUlMXFxcIiBcXHUwMDNlXFx1MDAyNjJcXG4tXFx0XFx0cmM9MVxcbi1cXHRlbHNlXFxuLVxcdFxcdGVjaG8gXFxcIk9LXFxcIlxcbi1cXHRcXHRyYz0wXFxuLVxcdGZpXFxuLVxcdHRlc3RfcmNcXG4rXFx0cmV0dXJuIFxcXCIkc3RhdHVzXFxcIlxcbiB9XFxuIFxcbi1zeXNjdGxfdGVzdF8wMDAxKClcXG4rdGVzdF9zdHJpbmdfZG9zdHJpbmcoKVxcbiB7XFxuLVxcdFRBUkdFVD1cXFwiJHtTWVNDVEx9LyQoZ2V0X3Rlc3RfdGFyZ2V0IDAwMDEpXFxcIlxcbi1cXHRyZXNldF92YWxzXFxuLVxcdE9SSUc9JChjYXQgXFxcIiR7VEFSR0VUfVxcXCIpXFxuLVxcdFRFU1RfU1RSPSQoKCAkT1JJRyArIDEgKSlcXG4tXFxuLVxcdHJ1bl9udW1lcmljdGVzdHNcXG4tXFx0cnVuX3dpZGVpbnRfdGVzdHNcXG4tXFx0cnVuX2xpbWl0X2RpZ2l0XFxuLX1cXG4rXFx0bG9jYWwgdD1cXFwiJHtTWVNDVEx9L3N0cmluZ18wMDAxXFxcIlxcbitcXHRsb2NhbCBiYXNlbGluZT1cXFwiKG5vbmUpXFxcIiB2YWw9XFxcIlRlc3Rpbmcgc3lzY3RsXFxcIiBtYXhsZW49NjVcXG4gXFxuLXN5c2N0bF90ZXN0XzAwMDIoKVxcbi17XFxuLVxcdFRBUkdFVD1cXFwiJHtTWVNDVEx9LyQoZ2V0X3Rlc3RfdGFyZ2V0IDAwMDIpXFxcIlxcbi1cXHRyZXNldF92YWxzXFxuLVxcdE9SSUc9JChjYXQgXFxcIiR7VEFSR0VUfVxcXCIpXFxuLVxcdFRFU1RfU1RSPVxcXCJUZXN0aW5nIHN5c2N0bFxcXCJcXG4tXFx0IyBPbmx5IHN0cmluZyBzeXNjdGxzIHN1cHBvcnQgc2Vla2luZy9hcHBlbmRpbmcuXFxuLVxcdE1BWExFTj02NVxcbi1cXG4tXFx0cnVuX251bWVyaWN0ZXN0c1xcbi1cXHRydW5fc3RyaW5ndGVzdHNcXG4tfVxcbitcXHRbWyAtZiBcXFwiJHRcXFwiIF1dIHx8IHsgUkVUPSRLU0ZUX1NLSVA7IHJldHVybjsgfVxcbiBcXG4tc3lzY3RsX3Rlc3RfMDAwMygpXFxuLXtcXG4tXFx0VEFSR0VUPVxcXCIke1NZU0NUTH0vJChnZXRfdGVzdF90YXJnZXQgMDAwMylcXFwiXFxuLVxcdHJlc2V0X3ZhbHNcXG4tXFx0T1JJRz0kKGNhdCBcXFwiJHtUQVJHRVR9XFxcIilcXG4tXFx0VEVTVF9TVFI9JCgoICRPUklHICsgMSApKVxcbi1cXG4tXFx0cnVuX251bWVyaWN0ZXN0c1xcbi1cXHRydW5fd2lkZWludF90ZXN0c1xcbi1cXHRydW5fbGltaXRfZGlnaXRcXG4tXFx0cnVuX2xpbWl0X2RpZ2l0X2ludFxcbitcXHRhc3NlcnRfd3JpdGVfcGF0dGVybnMgXFxcIiR0XFxcIiBcXFwiJGJhc2VsaW5lXFxcIiBcXFwiJHZhbFxcXCIgfHwgUkVUPSRLU0ZUX0ZBSUxcXG4rXFx0YXNzZXJ0X3N0cmluZ193cml0ZV9wYXR0ZXJucyBcXFwiJHRcXFwiIFxcXCIkYmFzZWxpbmVcXFwiIFxcXCIkdmFsXFxcIiBcXFwiJG1heGxlblxcXCIgfHwgUkVUPSRLU0ZUX0ZBSUxcXG4gfVxcbiBcXG4tc3lzY3RsX3Rlc3RfMDAwNCgpXFxuKyMgRW1pdCBhIHJhbmRvbSBzeXNjdGwgYml0IG1hcFxcbityYW5kb21fYml0bWFwX3NwZWMoKVxcbiB7XFxuLVxcdFRBUkdFVD1cXFwiJHtTWVNDVEx9LyQoZ2V0X3Rlc3RfdGFyZ2V0IDAwMDQpXFxcIlxcbi1cXHRyZXNldF92YWxzXFxuLVxcdE9SSUc9JChjYXQgXFxcIiR7VEFSR0VUfVxcXCIpXFxuLVxcdFRFU1RfU1RSPSQoKCAkT1JJRyArIDEgKSlcXG4tXFxuLVxcdHJ1bl9udW1lcmljdGVzdHNcXG4tXFx0cnVuX3dpZGVpbnRfdGVzdHNcXG4tXFx0cnVuX2xpbWl0X2RpZ2l0XFxuLVxcdHJ1bl9saW1pdF9kaWdpdF91aW50XFxuLX1cXG4rXFx0bG9jYWwgbGVuZ3RoPSQoKFJBTkRPTSAlIDY1MDAwKSlcXG4rXFx0bG9jYWwgYml0PSQoKFJBTkRPTSAlIDEwMjQpKVxcbitcXHRsb2NhbCBzcGVjPSRiaXRcXG4rXFx0bG9jYWwgcmFuZ2VfZW5kXFxuIFxcbi1zeXNjdGxfdGVzdF8wMDA1KClcXG4te1xcbi1cXHRUQVJHRVQ9XFxcIiR7U1lTQ1RMfS8kKGdldF90ZXN0X3RhcmdldCAwMDA1KVxcXCJcXG4tXFx0cmVzZXRfdmFsc1xcbi1cXHRPUklHPSQoY2F0IFxcXCIke1RBUkdFVH1cXFwiKVxcbitcXHR3aGlsZSBbIFxcXCIkeyNzcGVjfVxcXCIgLWxlIFxcXCIkbGVuZ3RoXFxcIiBdOyBkb1xcbitcXHRcXHQjIEtlZXAgZW50cmllcyBkaXNjb250aWd1b3VzLCBza2lwIGFoZWFkIGJ5IGF0IGxlYXN0IDIuXFxuK1xcdFxcdGJpdD0kKChiaXQgKyAyICsgUkFORE9NICUgMTApKVxcbitcXHRcXHRzcGVjPVxcXCIke3NwZWN9LCR7Yml0fVxcXCJcXG4gXFxuLVxcdHJ1bl9saW1pdF9kaWdpdF9pbnRfYXJyYXlcXG4tfVxcbitcXHRcXHRpZiBbIFxcXCIkKChSQU5ET00gJSAyKSlcXFwiIC1lcSAxIF07IHRoZW5cXG4rXFx0XFx0XFx0cmFuZ2VfZW5kPSQoKGJpdCArIDEgKyBSQU5ET00gJSAxMCkpXFxuK1xcdFxcdFxcdHNwZWM9XFxcIiR7c3BlY30tJHtyYW5nZV9lbmR9XFxcIlxcbitcXHRcXHRcXHRiaXQ9JHJhbmdlX2VuZFxcbitcXHRcXHRmaVxcbitcXHRkb25lXFxuIFxcbi1zeXNjdGxfdGVzdF8wMDA2KClcXG4te1xcbi1cXHRUQVJHRVQ9XFxcIiR7U1lTQ1RMfS8kKGdldF90ZXN0X3RhcmdldCAwMDA2KVxcXCJcXG4tXFx0cmVzZXRfdmFsc1xcbi1cXHRPUklHPVxcXCJcXFwiXFxuLVxcdHJ1bl9iaXRtYXB0ZXN0XFxuK1xcdGVjaG8gLW4gXFxcIiRzcGVjXFxcIlxcbiB9XFxuIFxcbi1zeXNjdGxfdGVzdF8wMDA3KClcXG4rIyBEbyAqbm90KiBwcmVmaXggd2l0aCBcXFwidGVzdF9cXFwiLiBBbGwgYXV0b2dlbmVyYXRlIGJpdG1hcCB0ZXN0cyBjYWxsIHRoaXMgaGVscGVyXFxuK2JpdG1hcF9yYW5nZV9jaGVja19vbmNlKCkgICMgXFx1MDAzY2l0ZXJcXHUwMDNlXFxuIHtcXG4tXFx0VEFSR0VUPVxcXCIke1NZU0NUTH0vJChnZXRfdGVzdF90YXJnZXQgMDAwNylcXFwiXFxuLVxcdGVjaG8gLW4gXFxcIlRlc3RpbmcgaWYgJFRBUkdFVCBpcyBzZXQgdG8gMSAuLi4gXFxcIlxcbitcXHRsb2NhbCB0PVxcXCIke1NZU0NUTH0vYml0bWFwXzAwMDFcXFwiXFxuK1xcdGxvY2FsIHNwZWNfZmlsZSBzZWVkXFxuIFxcbi1cXHRpZiBbICEgLWYgJFRBUkdFVCBdOyB0aGVuXFxuLVxcdFxcdGVjaG8gLWUgXFxcIlNLSVBQSU5HXFxcXG4kVEFSR0VUIGlzIG5vdCBwcmVzZW50XFxcIlxcbi1cXHRcXHRyZXR1cm4gJGtzZnRfc2tpcFxcbi1cXHRmaVxcbi1cXG4tXFx0aWYgWyAtZCAkRElSIF07IHRoZW5cXG4tXFx0XFx0ZWNobyAtZSBcXFwiU0tJUFBJTkdcXFxcblRlc3Qgb25seSBwb3NzaWJsZSBpZiBzeXNjdGxfdGVzdCBpcyBidWlsdC1pbiwgbm90IG1vZHVsZTpcXFwiXFxuLVxcdFxcdGNhdCAkVEVTVF9ESVIvY29uZmlnIFxcdTAwM2VcXHUwMDI2Mlxcbi1cXHRcXHRyZXR1cm4gJGtzZnRfc2tpcFxcbi1cXHRmaVxcbitcXHRbWyAtZiBcXFwiJHRcXFwiIF1dIHx8IHsgUkVUPSRLU0ZUX1NLSVA7IHJldHVybjsgfVxcbiBcXG4tXFx0T1JJRz0kKGNhdCBcXFwiJHtUQVJHRVR9XFxcIilcXG4rXFx0c2VlZD0kKChCSVRNQVBfU0VFRCArICQxKSlcXG4rXFx0UkFORE9NPSRzZWVkXFxuIFxcbi1cXHRpZiBbIHgkT1JJRyA9IFxcXCJ4MVxcXCIgXTsgdGhlblxcbi1cXHRcXHRlY2hvIFxcXCJPS1xcXCJcXG4tXFx0XFx0cmV0dXJuIDBcXG4tXFx0ZmlcXG4rXFx0c3BlY19maWxlPSQobWt0ZW1wKVxcbitcXHRyYW5kb21fYml0bWFwX3NwZWMgXFx1MDAzZSBcXFwiJHNwZWNfZmlsZVxcXCJcXG4gXFxuLVxcdGlmIFsgISAtZiAvcHJvYy9jbWRsaW5lIF07IHRoZW5cXG4tXFx0XFx0ZWNobyAtZSBcXFwiU0tJUFBJTkdcXFxcblRoZXJlIGlzIG5vIC9wcm9jL2NtZGxpbmUgdG8gY2hlY2sgZm9yIHBhcmFtZXRlclxcXCJcXG4tXFx0XFx0cmV0dXJuICRrc2Z0X3NraXBcXG4rXFx0aWYgISBjYXQgXFxcIiRzcGVjX2ZpbGVcXFwiIFxcdTAwM2UgXFxcIiR0XFxcIiAyXFx1MDAzZS9kZXYvbnVsbDsgdGhlblxcbitcXHRcXHRrdGFwX3ByaW50X21zZyBcXFwiJHQ6IHdyaXRlIG9mIHJhbmRvbSBiaXRtYXAgc3BlYyByZWplY3RlZCAoc2VlZCAkc2VlZClcXFwiXFxuK1xcdFxcdFJFVD0kS1NGVF9GQUlMXFxuK1xcdGVsaWYgISBhc3NlcnRfZGlmZl9wcm9jX2ZpbGUgXFxcIiR0XFxcIiBcXFwiJHNwZWNfZmlsZVxcXCI7IHRoZW5cXG4rXFx0XFx0a3RhcF9wcmludF9tc2cgXFxcIiR0OiByZWFkYmFjayBtaXNtYXRjaCAoc2VlZCAkc2VlZClcXFwiXFxuK1xcdFxcdFJFVD0kS1NGVF9GQUlMXFxuIFxcdGZpXFxuIFxcbi1cXHRGT1VORD0kKGdyZXAgLWMgXFxcInN5c2N0bFsuL11kZWJ1Z1suL110ZXN0X3N5c2N0bFsuL11ib290X2ludD0xXFxcIiAvcHJvYy9jbWRsaW5lKVxcbi1cXHRpZiBbICRGT1VORCA9IFxcXCIxXFxcIiBdOyB0aGVuXFxuLVxcdFxcdGVjaG8gLWUgXFxcIkZBSUxcXFxcbktlcm5lbCBwYXJhbSBmb3VuZCBidXQgJFRBUkdFVCBpcyBub3QgMS5cXFwiIFxcdTAwM2VcXHUwMDI2Mlxcbi1cXHRcXHRyYz0xXFxuLVxcdFxcdHRlc3RfcmNcXG4tXFx0ZmlcXG4tXFxuLVxcdGVjaG8gLWUgXFxcIlNLSVBQSU5HXFxcXG5FeHBlY3RlZCBrZXJuZWwgcGFyYW1ldGVyIG1pc3NpbmcuXFxcIlxcbi1cXHRlY2hvIFxcXCJLZXJuZWwgbXVzdCBiZSBib290ZWQgd2l0aCBwYXJhbWV0ZXI6IHN5c2N0bC5kZWJ1Zy50ZXN0X3N5c2N0bC5ib290X2ludD0xXFxcIlxcbi1cXHRyZXR1cm4gJGtzZnRfc2tpcFxcbitcXHRybSAtZiBcXFwiJHNwZWNfZmlsZVxcXCJcXG4gfVxcbiBcXG4tc3lzY3RsX3Rlc3RfMDAwOCgpXFxuK3Rlc3RfdW5yZWdpc3Rlcl9yZW1vdmVzX2RpcigpXFxuIHtcXG4tXFx0VEFSR0VUPVxcXCIke1NZU0NUTH0vJChnZXRfdGVzdF90YXJnZXQgMDAwOClcXFwiXFxuLVxcdGVjaG8gLW4gXFxcIlRlc3RpbmcgaWYgJFRBUkdFVCBpcyBtYXRjaGVkIGluIGtlcm5lbCAuLi4gXFxcIlxcbitcXHRsb2NhbCB0PVxcXCIke1NZU0NUTH0vdW5yZWdpc3Rlcl9lcnJvclxcXCJcXG4gXFxuLVxcdGlmIFsgISAtZiAkVEFSR0VUIF07IHRoZW5cXG4tXFx0XFx0ZWNobyAtZSBcXFwiU0tJUFBJTkdcXFxcbiRUQVJHRVQgaXMgbm90IHByZXNlbnRcXFwiXFxuLVxcdFxcdHJldHVybiAka3NmdF9za2lwXFxuK1xcdGlmIFtbIC1kIFxcXCIkdFxcXCIgXV07IHRoZW5cXG4rXFx0XFx0a3RhcF9wcmludF9tc2cgXFxcIiR0OiBkaXJlY3Rvcnkgc3RpbGwgZXhpc3RzLCBleHBlY3RlZCBpdCB0byBiZSB1bnJlZ2lzdGVyZWRcXFwiXFxuK1xcdFxcdFJFVD0kS1NGVF9GQUlMXFxuIFxcdGZpXFxuK31cXG4gXFxuLVxcdE9SSUdfVkFMVUU9JChjYXQgXFxcIiR7VEFSR0VUfVxcXCIpXFxuK3Rlc3RfbW91bnRfcG9pbnRfZXJyb3IoKVxcbit7XFxuK1xcdGxvY2FsIHQ9XFxcIiR7U1lTQ1RMfS9tbnQvbW50X2Vycm9yXFxcIlxcbiBcXG4tXFx0aWYgWyAkT1JJR19WQUxVRSAtbmUgMSBdOyB0aGVuXFxuLVxcdFxcdGVjaG8gXFxcIkZBSUxcXFwiIFxcdTAwM2VcXHUwMDI2Mlxcbi1cXHRcXHRyYz0xXFxuLVxcdFxcdHRlc3RfcmNcXG4rXFx0aWYgW1sgLWQgXFxcIiR0XFxcIiBdXTsgdGhlblxcbitcXHRcXHRrdGFwX3ByaW50X21zZyBcXFwiJHQ6IGRpcmVjdG9yeSB1bmV4cGVjdGVkbHkgY3JlYXRlZFxcXCJcXG4rXFx0XFx0UkVUPSRLU0ZUX0ZBSUxcXG4gXFx0ZmlcXG4tXFxuLVxcdGVjaG8gXFxcIk9LXFxcIlxcbi1cXHRyZXR1cm4gMFxcbiB9XFxuIFxcbi1zeXNjdGxfdGVzdF8wMDA5KClcXG4rdGVzdF9lbXB0eV9kaXJfcmVnaXN0cmF0aW9uKClcXG4ge1xcbi1cXHRUQVJHRVQ9XFxcIiR7U1lTQ1RMfS8kKGdldF90ZXN0X3RhcmdldCAwMDA5KVxcXCJcXG4tXFx0ZWNobyAtbiBcXFwiVGVzdGluZyBpZiAkVEFSR0VUIHVucmVnaXN0ZXJlZCBjb3JyZWN0bHkgLi4uIFxcXCJcXG4tXFx0aWYgWyAtZCAkVEFSR0VUIF07IHRoZW5cXG4tXFx0XFx0ZWNobyBcXFwiRkFJTFxcXCIgXFx1MDAzZVxcdTAwMjYyXFxuLVxcdFxcdHJjPTFcXG4tXFx0XFx0dGVzdF9yY1xcbi1cXHRmaVxcbitcXHRsb2NhbCB0PVxcXCIke1NZU0NUTH0vZW1wdHlfYWRkXFxcIlxcbiBcXG4tXFx0ZWNobyBcXFwiT0tcXFwiXFxuLVxcdHJldHVybiAwXFxuK1xcdGlmIFtbICEgLWQgXFxcIiR0XFxcIiBdXTsgdGhlblxcbitcXHRcXHRrdGFwX3ByaW50X21zZyBcXFwiJHQ6IGRpcmVjdG9yeSB3YXMgbm90IGNyZWF0ZWRcXFwiXFxuK1xcdFxcdFJFVD0kS1NGVF9GQUlMXFxuK1xcdFxcdHJldHVyblxcbitcXHRmaVxcbitcXHRpZiBbWyAhIC1kIFxcXCIkdC9lbXB0eVxcXCIgXV07IHRoZW5cXG4rXFx0XFx0a3RhcF9wcmludF9tc2cgXFxcIiR0L2VtcHR5OiBkaXJlY3Rvcnkgd2FzIG5vdCBjcmVhdGVkXFxcIlxcbitcXHRcXHRSRVQ9JEtTRlRfRkFJTFxcbitcXHRmaVxcbiB9XFxuIFxcbi1zeXNjdGxfdGVzdF8wMDEwKClcXG4rdGVzdF91OF9yYW5nZV9jaGVjaygpXFxuIHtcXG4tXFx0VEFSR0VUPVxcXCIke1NZU0NUTH0vJChnZXRfdGVzdF90YXJnZXQgMDAxMClcXFwiXFxuLVxcdGVjaG8gLW4gXFxcIlRlc3RpbmcgdGhhdCAkVEFSR0VUIHdhcyBub3QgY3JlYXRlZCAuLi4gXFxcIlxcbi1cXHRpZiBbIC1kICRUQVJHRVQgXTsgdGhlblxcbi1cXHRcXHRlY2hvIFxcXCJGQUlMXFxcIiBcXHUwMDNlXFx1MDAyNjJcXG4tXFx0XFx0cmM9MVxcbi1cXHRcXHR0ZXN0X3JjXFxuK1xcdGxvY2FsIHQ9XFxcIiR7U1lTQ1RMfS91OF92YWxpZFxcXCJcXG4rXFxuK1xcdGlmIFtbICEgLWYgXFxcIiR0XFxcIiBdXTsgdGhlblxcbitcXHRcXHRrdGFwX3ByaW50X21zZyBcXFwiJHQ6IGZpbGUgd2FzIG5vdCBjcmVhdGVkXFxcIlxcbitcXHRcXHRSRVQ9JEtTRlRfRkFJTFxcbitcXHRcXHRyZXR1cm5cXG4gXFx0ZmlcXG4gXFxuLVxcdGVjaG8gXFxcIk9LXFxcIlxcbi1cXHRyZXR1cm4gMFxcbitcXHRhc3NlcnRfZG1lc2dfY291bnQgXFxcInU4X292ZXIgcmFuZ2UgdmFsdWVcXFwiIDEgfHwgUkVUPSRLU0ZUX0ZBSUxcXG4rXFx0YXNzZXJ0X2RtZXNnX2NvdW50IFxcXCJ1OF91bmRlciByYW5nZSB2YWx1ZVxcXCIgMSB8fCBSRVQ9JEtTRlRfRkFJTFxcbiB9XFxuIFxcbi1zeXNjdGxfdGVzdF8wMDExKClcXG4rdGVzdF9ib290X3BhcmFtX2ludCgpXFxuIHtcXG4tXFx0VEFSR0VUPVxcXCIke1NZU0NUTH0vJChnZXRfdGVzdF90YXJnZXQgMDAxMSlcXFwiXFxuLVxcdGVjaG8gLW4gXFxcIlRlc3RpbmcgZW1wdHkgZGlyIGhhbmRsaW5nIGluICR7VEFSR0VUfSAuLi4gXFxcIlxcbi1cXHRpZiBbICEgLWQgJHtUQVJHRVR9IF07IHRoZW5cXG4tXFx0XFx0ZWNobyAtZSBcXFwiRkFJTFxcXFxuQ291bGQgbm90IGNyZWF0ZSAke1RBUkdFVH1cXFwiIFxcdTAwM2VcXHUwMDI2Mlxcbi1cXHRcXHRyYz0xXFxuLVxcdFxcdHRlc3RfcmNcXG4tXFx0ZmlcXG4rXFx0bG9jYWwgdD1cXFwiJHtTWVNDVEx9L2Jvb3RfaW50XFxcIlxcbitcXHRsb2NhbCBvcmlnIGZvdW5kXFxuIFxcbi1cXHRUQVJHRVQyPVxcXCIke1RBUkdFVH0vZW1wdHlcXFwiXFxuLVxcdGlmIFsgISAtZCAke1RBUkdFVDJ9IF07IHRoZW5cXG4tXFx0XFx0ZWNobyAtZSBcXFwiRkFJTFxcXFxuQ291bGQgbm90IGNyZWF0ZSAke1RBUkdFVDJ9XFxcIiBcXHUwMDNlXFx1MDAyNjJcXG4tXFx0XFx0cmM9MVxcbi1cXHRcXHR0ZXN0X3JjXFxuLVxcdGZpXFxuK1xcdFtbIC1mIFxcXCIkdFxcXCIgXV0gfHwgeyBSRVQ9JEtTRlRfU0tJUDsgcmV0dXJuOyB9XFxuIFxcbi1cXHRlY2hvIFxcXCJPS1xcXCJcXG4tXFx0cmV0dXJuIDBcXG4tfVxcbitcXHQjIEJvb3QgY21kbGluZSBwYXJhbXMgb25seSBhcHBseSB3aGVuIHRlc3Rfc3lzY3RsIGlzIGJ1aWx0IGluLCBub3RcXG4rXFx0IyBsb2FkZWQgYXMgYSBtb2R1bGUuXFxuK1xcdGlmIFtbIC1kIFxcXCIkTU9EVUxFX0RJUlxcXCIgXV07IHRoZW5cXG4rXFx0XFx0a3RhcF9wcmludF9tc2cgXFxcIiR0OiB0ZXN0IG9ubHkgcG9zc2libGUgaWYgdGVzdF9zeXNjdGwgaXMgYnVpbHQtaW4sIG5vdCBhIG1vZHVsZVxcXCJcXG4rXFx0XFx0UkVUPSRLU0ZUX1NLSVBcXG4rXFx0XFx0cmV0dXJuXFxuK1xcdGZpXFxuIFxcbi1zeXNjdGxfdGVzdF8wMDEyKClcXG4te1xcbi1cXHRUQVJHRVQ9XFxcIiR7U1lTQ1RMfS8kKGdldF90ZXN0X3RhcmdldCAwMDEyKVxcXCJcXG4tXFx0ZWNobyAtbiBcXFwiVGVzdGluZyB1OCByYW5nZSBjaGVjayBpbiBzeXNjdGwgdGFibGUgY2hlY2sgaW4gJHtUQVJHRVR9IC4uLiBcXFwiXFxuLVxcdGlmIFsgISAtZiAke1RBUkdFVH0gXTsgdGhlblxcbi1cXHRcXHRlY2hvIC1lIFxcXCJGQUlMXFxcXG5Db3VsZCBub3QgY3JlYXRlICR7VEFSR0VUfVxcXCIgXFx1MDAzZVxcdTAwMjYyXFxuLVxcdFxcdHJjPTFcXG4tXFx0XFx0dGVzdF9yY1xcbitcXHRvcmlnPSQoY2F0IFxcXCIkdFxcXCIpXFxuK1xcdGlmIFtbIFxcXCIkb3JpZ1xcXCIgPT0gXFxcIjFcXFwiIF1dOyB0aGVuXFxuK1xcdFxcdHJldHVyblxcbiBcXHRmaVxcbiBcXG4tXFx0bG9jYWwgdThvdmVyX21zZz0kKGRtZXNnIHwgZ3JlcCBcXFwidThfb3ZlciByYW5nZSB2YWx1ZVxcXCIgfCB3YyAtbClcXG4tXFx0aWYgWyAhICR7dThvdmVyX21zZ30gLWVxIDEgXTsgdGhlblxcbi1cXHRcXHRlY2hvIC1lIFxcXCJGQUlMXFxcXG51OCBvdmVyZmxvdyBub3QgZGV0ZWN0ZWRcXFwiIFxcdTAwM2VcXHUwMDI2Mlxcbi1cXHRcXHRyYz0xXFxuLVxcdFxcdHRlc3RfcmNcXG4rXFx0aWYgW1sgISAtZiAvcHJvYy9jbWRsaW5lIF1dOyB0aGVuXFxuK1xcdFxcdGt0YXBfcHJpbnRfbXNnIFxcXCIkdDogbm8gL3Byb2MvY21kbGluZSB0byBjaGVjayBmb3IgdGhlIGJvb3QgcGFyYW1ldGVyXFxcIlxcbitcXHRcXHRSRVQ9JEtTRlRfU0tJUFxcbitcXHRcXHRyZXR1cm5cXG4gXFx0ZmlcXG4gXFxuLVxcdGxvY2FsIHU4dW5kZXJfbXNnPSQoZG1lc2cgfCBncmVwIFxcXCJ1OF91bmRlciByYW5nZSB2YWx1ZVxcXCIgfCB3YyAtbClcXG4tXFx0aWYgWyAhICR7dTh1bmRlcl9tc2d9IC1lcSAxIF07IHRoZW5cXG4tXFx0XFx0ZWNobyAtZSBcXFwiRkFJTFxcXFxudTggdW5kZXJmbG93IG5vdCBkZXRlY3RlZFxcXCIgXFx1MDAzZVxcdTAwMjYyXFxuLVxcdFxcdHJjPTFcXG4tXFx0XFx0dGVzdF9yY1xcbitcXHRmb3VuZD0kKGdyZXAgLWMgXFxcInN5c2N0bFsuL11kZWJ1Z1suL110ZXN0X3N5c2N0bFsuL11ib290X2ludD0xXFxcIiAvcHJvYy9jbWRsaW5lKVxcbitcXHRpZiBbWyBcXFwiJGZvdW5kXFxcIiA9PSBcXFwiMVxcXCIgXV07IHRoZW5cXG4rXFx0XFx0a3RhcF9wcmludF9tc2cgXFxcIiR0OiBrZXJuZWwgcGFyYW0gZm91bmQgb24gY21kbGluZSBidXQgdmFsdWUgaXMgbm90IDFcXFwiXFxuK1xcdFxcdFJFVD0kS1NGVF9GQUlMXFxuK1xcdFxcdHJldHVyblxcbiBcXHRmaVxcbiBcXG4tXFx0ZWNobyBcXFwiT0tcXFwiXFxuLVxcdHJldHVybiAwXFxuK1xcdGt0YXBfcHJpbnRfbXNnIFxcXCIkdDoga2VybmVsIG5vdCBib290ZWQgd2l0aCBzeXNjdGwuZGVidWcudGVzdF9zeXNjdGwuYm9vdF9pbnQ9MVxcXCJcXG4rXFx0UkVUPSRLU0ZUX1NLSVBcXG4gfVxcbiBcXG4tc3lzY3RsX3Rlc3RfMDAxMygpXFxuK3Rlc3Rfc3lzY3RsX21hY3JvX21hdGNoKClcXG4ge1xcbi1cXHRUQVJHRVQ9XFxcIiR7U1lTQ1RMfS8kKGdldF90ZXN0X3RhcmdldCAwMDEzKVxcXCJcXG4tXFx0cmVzZXRfdmFsc1xcbitcXHRsb2NhbCB0PVxcXCIke1NZU0NUTH0vbWF0Y2hfaW50XFxcIlxcbitcXG4rXFx0W1sgLWYgXFxcIiR0XFxcIiBdXSB8fCB7IFJFVD0kS1NGVF9TS0lQOyByZXR1cm47IH1cXG4gXFxuLVxcdHJ1bl9pbnRfYXJyYXlfbm9fcGFydGlhbF91cGRhdGVcXG4rXFx0YXNzZXJ0X2NvbnRlbnQgXFxcIiR0XFxcIiBcXFwiMVxcXCIgfHwgUkVUPSRLU0ZUX0ZBSUxcXG4gfVxcbiBcXG4tbGlzdF90ZXN0cygpXFxuK3J1bl9vbmUoKVxcbiB7XFxuLVxcdGVjaG8gXFxcIlRlc3QgSUQgbGlzdDpcXFwiXFxuLVxcdGVjaG9cXG4tXFx0ZWNobyBcXFwiVEVTVF9JRCB4IE5VTV9URVNUXFxcIlxcbi1cXHRlY2hvIFxcXCJURVNUX0lEOiAgIFRlc3QgSURcXFwiXFxuLVxcdGVjaG8gXFxcIk5VTV9URVNUUzogUmVjb21tZW5kZWQgbnVtYmVyIG9mIHRpbWVzIHRvIHJ1biB0aGUgdGVzdFxcXCJcXG4tXFx0ZWNob1xcbi1cXHRlY2hvIFxcXCIwMDAxIHggJChnZXRfdGVzdF9jb3VudCAwMDAxKSAtIHRlc3RzIHByb2NfZG9pbnR2ZWNfbWlubWF4KClcXFwiXFxuLVxcdGVjaG8gXFxcIjAwMDIgeCAkKGdldF90ZXN0X2NvdW50IDAwMDIpIC0gdGVzdHMgcHJvY19kb3N0cmluZygpXFxcIlxcbi1cXHRlY2hvIFxcXCIwMDAzIHggJChnZXRfdGVzdF9jb3VudCAwMDAzKSAtIHRlc3RzIHByb2NfZG9pbnR2ZWMoKVxcXCJcXG4tXFx0ZWNobyBcXFwiMDAwNCB4ICQoZ2V0X3Rlc3RfY291bnQgMDAwNCkgLSB0ZXN0cyBwcm9jX2RvdWludHZlYygpXFxcIlxcbi1cXHRlY2hvIFxcXCIwMDA1IHggJChnZXRfdGVzdF9jb3VudCAwMDA1KSAtIHRlc3RzIHByb2NfZG91aW50dmVjKCkgYXJyYXlcXFwiXFxuLVxcdGVjaG8gXFxcIjAwMDYgeCAkKGdldF90ZXN0X2NvdW50IDAwMDYpIC0gdGVzdHMgcHJvY19kb19sYXJnZV9iaXRtYXAoKVxcXCJcXG4tXFx0ZWNobyBcXFwiMDAwNyB4ICQoZ2V0X3Rlc3RfY291bnQgMDAwNykgLSB0ZXN0cyBzZXR0aW5nIHN5c2N0bCBmcm9tIGtlcm5lbCBib290IHBhcmFtXFxcIlxcbi1cXHRlY2hvIFxcXCIwMDA4IHggJChnZXRfdGVzdF9jb3VudCAwMDA4KSAtIHRlc3RzIHN5c2N0bCBtYWNybyB2YWx1ZXMgbWF0Y2hcXFwiXFxuLVxcdGVjaG8gXFxcIjAwMDkgeCAkKGdldF90ZXN0X2NvdW50IDAwMDkpIC0gdGVzdHMgc3lzY3QgdW5yZWdpc3RlclxcXCJcXG4tXFx0ZWNobyBcXFwiMDAxMCB4ICQoZ2V0X3Rlc3RfY291bnQgMDAxMCkgLSB0ZXN0cyBzeXNjdCBtb3VudCBwb2ludFxcXCJcXG4tXFx0ZWNobyBcXFwiMDAxMSB4ICQoZ2V0X3Rlc3RfY291bnQgMDAxMSkgLSB0ZXN0cyBlbXB0eSBkaXJlY3Rvcmllc1xcXCJcXG4tXFx0ZWNobyBcXFwiMDAxMiB4ICQoZ2V0X3Rlc3RfY291bnQgMDAxMikgLSB0ZXN0cyByYW5nZSBjaGVjayBmb3IgdTggcHJvY19oYW5kbGVyXFxcIlxcbi1cXHRlY2hvIFxcXCIwMDEzIHggJChnZXRfdGVzdF9jb3VudCAwMDEzKSAtIHRlc3RzIHBhcnRpYWxseSB1cGRhdGUgdmVjdG9ycyBvbiBlcnJvclxcXCJcXG4rXFx0bG9jYWwgbmFtZT0kMVxcbitcXG4rXFx0IyBTdWJzaGVsbDogYSB0ZXN0IGNhbm5vdCBsZWFrIHZhcnMvY3dkL3RyYXBzIGludG8gdGhlIG5leHQgb25lLCBhbmQgYW5cXG4rXFx0IyBhY2NpZGVudGFsIGBleGl0YCBpbnNpZGUgYSB0ZXN0IGtpbGxzIG9ubHkgaXRzIG93biBzdWJzaGVsbC5cXG4rXFx0KCBSRVQ9JEtTRlRfUEFTUzsgXFxcIiRuYW1lXFxcIjsgZXhpdCAkUkVUIClcXG4rXFxuK1xcdGNhc2UgJD8gaW5cXG4rXFx0XFxcIiRLU0ZUX1BBU1NcXFwiKSBrdGFwX3Rlc3RfcGFzcyBcXFwiJG5hbWVcXFwiIDs7XFxuK1xcdFxcXCIkS1NGVF9TS0lQXFxcIikga3RhcF90ZXN0X3NraXAgXFxcIiRuYW1lXFxcIiA7O1xcbitcXHQqKSAgICAgICAgICBrdGFwX3Rlc3RfZmFpbCBcXFwiJG5hbWVcXFwiIDs7XFxuK1xcdGVzYWNcXG4gfVxcbiBcXG4gdXNhZ2UoKVxcbiB7XFxuLVxcdE5VTV9URVNUUz0kKGdyZXAgLW8gJyAnIFxcdTAwM2NcXHUwMDNjXFx1MDAzY1xcXCIkQUxMX1RFU1RTXFxcIiB8IGdyZXAgLWMgLilcXG4tXFx0bGV0IE5VTV9URVNUUz0kTlVNX1RFU1RTKzFcXG4tXFx0TUFYX1RFU1Q9JChwcmludGYgXFxcIiUwNGRcXFxcblxcXCIgJE5VTV9URVNUUylcXG4tXFx0ZWNobyBcXFwiVXNhZ2U6ICQwIFsgLXQgXFx1MDAzYzQtbnVtYmVyLWRpZ2l0XFx1MDAzZSBdIHwgWyAtdyBcXHUwMDNjNC1udW1iZXItZGlnaXRcXHUwMDNlIF0gfFxcXCJcXG4tXFx0ZWNobyBcXFwiXFx0XFx0IFsgLXMgXFx1MDAzYzQtbnVtYmVyLWRpZ2l0XFx1MDAzZSBdIHwgWyAtYyBcXHUwMDNjNC1udW1iZXItZGlnaXRcXHUwMDNlIFxcdTAwM2N0ZXN0LSBjb3VudFxcdTAwM2VcXFwiXFxuLVxcdGVjaG8gXFxcIiAgICAgICAgICAgWyBhbGwgXSBbIC1oIHwgLS1oZWxwIF0gWyAtbCBdXFxcIlxcbi1cXHRlY2hvIFxcXCJcXFwiXFxuLVxcdGVjaG8gXFxcIlZhbGlkIHRlc3RzOiAwMDAxLSRNQVhfVEVTVFxcXCJcXG4tXFx0ZWNobyBcXFwiXFxcIlxcbi1cXHRlY2hvIFxcXCIgICAgYWxsICAgICBSdW5zIGFsbCB0ZXN0cyAoZGVmYXVsdClcXFwiXFxuLVxcdGVjaG8gXFxcIiAgICAtdCAgICAgIFJ1biB0ZXN0IElEIHRoZSByZWNvbW1lbmRlZCBudW1iZXIgb2YgdGltZXNcXFwiXFxuLVxcdGVjaG8gXFxcIiAgICAtdyAgICAgIFdhdGNoIHRlc3QgSUQgcnVuIHVudGlsIGl0IHJ1bnMgaW50byBhbiBlcnJvclxcXCJcXG4tXFx0ZWNobyBcXFwiICAgIC1jICAgICAgUnVuIHRlc3QgSUQgb25jZVxcXCJcXG4tXFx0ZWNobyBcXFwiICAgIC1zICAgICAgUnVuIHRlc3QgSUQgeCB0ZXN0LWNvdW50IG51bWJlciBvZiB0aW1lc1xcXCJcXG4tXFx0ZWNobyBcXFwiICAgIC1sICAgICAgTGlzdCBhbGwgdGVzdCBJRCBsaXN0XFxcIlxcbi1cXHRlY2hvIFxcXCIgLWh8LS1oZWxwICBIZWxwXFxcIlxcbi1cXHRlY2hvXFxuLVxcdGVjaG8gXFxcIklmIGFuIGVycm9yIGV2ZXJ5IG9jY3VycyBleGVjdXRpb24gd2lsbCBpbW1lZGlhdGVseSB0ZXJtaW5hdGUuXFxcIlxcbi1cXHRlY2hvIFxcXCJJZiB5b3UgYXJlIGFkZGluZyBhIG5ldyB0ZXN0IHRyeSB1c2luZyAtdyBcXHUwMDNjdGVzdC1JRFxcdTAwM2UgZmlyc3QgdG9cXFwiXFxuLVxcdGVjaG8gXFxcIm1ha2Ugc3VyZSB0aGUgdGVzdCBwYXNzZXMgYSBzZXJpZXMgb2YgdGVzdHMuXFxcIlxcbi1cXHRlY2hvXFxuLVxcdGVjaG8gRXhhbXBsZSB1c2VzOlxcbi1cXHRlY2hvXFxuLVxcdGVjaG8gXFxcIiRURVNUX05BTUUuc2ggICAgICAgICAgICAtLSBleGVjdXRlcyBhbGwgdGVzdHNcXFwiXFxuLVxcdGVjaG8gXFxcIiRURVNUX05BTUUuc2ggLXQgMDAwMiAgICAtLSBFeGVjdXRlcyB0ZXN0IElEIDAwMDIgdGhlIHJlY29tbWVuZGVkIG51bWJlciBvZiB0aW1lc1xcXCJcXG4tXFx0ZWNobyBcXFwiJFRFU1RfTkFNRS5zaCAtdyAwMDAyICAgIC0tIFdhdGNoIHRlc3QgSUQgMDAwMiBydW4gdW50aWwgYW4gZXJyb3Igb2NjdXJzXFxcIlxcbi1cXHRlY2hvIFxcXCIkVEVTVF9OQU1FLnNoIC1zIDAwMDIgICAgLS0gUnVuIHRlc3QgSUQgMDAwMiBvbmNlXFxcIlxcbi1cXHRlY2hvIFxcXCIkVEVTVF9OQU1FLnNoIC1jIDAwMDIgMyAgLS0gUnVuIHRlc3QgSUQgMDAwMiB0aHJlZSB0aW1lc1xcXCJcXG4tXFx0ZWNob1xcbi1cXHRsaXN0X3Rlc3RzXFxuLVxcdGV4aXQgMVxcbi19XFxuK1xcdGNhdCBcXHUwMDNjXFx1MDAzYy1FT0ZcXG4rXFx0VXNhZ2U6ICQwIFstciBOXSBbLWxdIFstdCBUXSBbLXMgTl0gWy1ofC0taGVscF1cXG4gXFxuLWZ1bmN0aW9uIHRlc3RfbnVtKClcXG4te1xcbi1cXHRyZT0nXlswLTldKyQnXFxuLVxcdGlmICEgW1sgJDEgPX4gJHJlIF1dOyB0aGVuXFxuLVxcdFxcdHVzYWdlXFxuLVxcdGZpXFxuLX1cXG4tZnVuY3Rpb24gcmVtb3ZlX2xlYWRpbmdfemVyb3MoKVxcbi17XFxuLVxcdGVjaG8gJDEgfCBzZWQgJ3MvXjAqLy8nXFxuLX1cXG4rXFx0UnVucyBldmVyeSBhdXRvLWRpc2NvdmVyZWQgdGVzdF8qIGZ1bmN0aW9uLiBTZXR0aW5nIFNZU0NUTF9URVNUUyB3aWxsXFxuK1xcdG92ZXJyaWRlIHRoZSBkZWZhdWx0IGFuZCBwYXNzaW5nIC10IHdpbGwgb3ZlcnJpZGUgYm90aCBlbnYgdmFyIGFuZCB0aGVcXG4rXFx0ZGVmYXVsdC5cXG4gXFxuLWZ1bmN0aW9uIGdldF90ZXN0X2NvdW50KClcXG4te1xcbi1cXHR0ZXN0X251bSAkMVxcbi1cXHRhd2tfZmllbGQ9JChyZW1vdmVfbGVhZGluZ196ZXJvcyAkMSlcXG4tXFx0VEVTVF9EQVRBPSQoZWNobyAkQUxMX1RFU1RTIHwgYXdrICd7cHJpbnQgJCckYXdrX2ZpZWxkJ30nKVxcbi1cXHRlY2hvICR7VEVTVF9EQVRBfSB8IGF3ayAtRlxcXCI6XFxcIiAne3ByaW50ICQyfSdcXG4tfVxcbitcXHQgICAgLXIgTiAgICAgICAgICByZXBlYXQgc2VsZWN0ZWQgdGVzdHMgTiB0aW1lcyAoZGVmYXVsdCAxKVxcbitcXHQgICAgLWwgICAgICAgICAgICBsaXN0IGRpc2NvdmVyZWQgdGVzdHNcXG4rXFx0ICAgIC10IFQgICAgICAgICAgc3BhY2Ugc2VwYXJhdGVkIHRlc3RzIGxpc3QuIEZvciBleGFtcGxlIFxcXCJ0ZXN0XzEgdGVzdF8yXFxcIlxcbitcXHQgICAgLXMgTiAgICAgICAgICBiYXNlIHNlZWQgZm9yIHRoZSByYW5kb21pemVkIGJpdG1hcCBpdGVyYXRpb25zLlxcbitcXHQgICAgLWgsIC0taGVscCAgICBoZWxwXFxuIFxcbi1mdW5jdGlvbiBnZXRfdGVzdF9lbmFibGVkKClcXG4te1xcbi1cXHR0ZXN0X251bSAkMVxcbi1cXHRhd2tfZmllbGQ9JChyZW1vdmVfbGVhZGluZ196ZXJvcyAkMSlcXG4tXFx0VEVTVF9EQVRBPSQoZWNobyAkQUxMX1RFU1RTIHwgYXdrICd7cHJpbnQgJCckYXdrX2ZpZWxkJ30nKVxcbi1cXHRlY2hvICR7VEVTVF9EQVRBfSB8IGF3ayAtRlxcXCI6XFxcIiAne3ByaW50ICQzfSdcXG4rXFx0ICAgIFNZU0NUTF9URVNUUz0ndGVzdF8xIHRlc3RfMicgJDAgIHJ1biBvbmx5IHRoZSBuYW1lZCB0ZXN0c1xcbitcXHRFT0ZcXG4gfVxcbiBcXG4tZnVuY3Rpb24gZ2V0X3Rlc3RfdGFyZ2V0KClcXG4rbGlzdF90ZXN0cygpXFxuIHtcXG4tXFx0dGVzdF9udW0gJDFcXG4tXFx0YXdrX2ZpZWxkPSQocmVtb3ZlX2xlYWRpbmdfemVyb3MgJDEpXFxuLVxcdFRFU1RfREFUQT0kKGVjaG8gJEFMTF9URVNUUyB8IGF3ayAne3ByaW50ICQnJGF3a19maWVsZCd9JylcXG4tXFx0ZWNobyAke1RFU1RfREFUQX0gfCBhd2sgLUZcXFwiOlxcXCIgJ3twcmludCAkNH0nXFxuK1xcdGVjaG8gXFxcIkRpc2NvdmVyZWQgdGVzdHM6XFxcIlxcbitcXHRsb2NhbCB0XFxuK1xcdGZvciB0IGluICRBTExfVEVTVFM7IGRvXFxuK1xcdFxcdGVjaG8gXFxcIiAgJHRcXFwiXFxuK1xcdGRvbmVcXG4gfVxcbiBcXG4tZnVuY3Rpb24gZ2V0X3Rlc3Rfc2tpcF9ub190YXJnZXQoKVxcbitjaGVja19yZXFzKClcXG4ge1xcbi1cXHR0ZXN0X251bSAkMVxcbi1cXHRhd2tfZmllbGQ9JChyZW1vdmVfbGVhZGluZ196ZXJvcyAkMSlcXG4tXFx0VEVTVF9EQVRBPSQoZWNobyAkQUxMX1RFU1RTIHwgYXdrICd7cHJpbnQgJCckYXdrX2ZpZWxkJ30nKVxcbi1cXHRlY2hvICR7VEVTVF9EQVRBfSB8IGF3ayAtRlxcXCI6XFxcIiAne3ByaW50ICQ1fSdcXG4tfVxcbitcXHRsb2NhbCB1aWRcXG4rXFx0dWlkPSQoaWQgLXUpXFxuIFxcbi1mdW5jdGlvbiBza2lwX3Rlc3QoKVxcbi17XFxuLVxcdFRFU1RfSUQ9JDFcXG4tXFx0VEVTVF9UQVJHRVQ9JDJcXG4tXFx0aWYgdGFyZ2V0X2V4aXN0cyAkVEVTVF9UQVJHRVQgJFRFU1RfSUQ7IHRoZW5cXG4tXFx0XFx0VEVTVF9TS0lQPSQoZ2V0X3Rlc3Rfc2tpcF9ub190YXJnZXQgJFRFU1RfSUQpXFxuLVxcdFxcdGlmIFtbICRURVNUX1NLSVAgLWVxIFxcXCIxXFxcIiBdXTsgdGhlblxcbi1cXHRcXHRcXHRlY2hvIFxcXCJUYXJnZXQgJFRFU1RfVEFSR0VUIGZvciB0ZXN0ICRURVNUX0lEIGRvZXMgbm90IGV4aXN0IC4uLiBTS0lQUElOR1xcXCJcXG4tXFx0XFx0XFx0cmV0dXJuIDBcXG4tXFx0XFx0ZmlcXG4rXFx0aWYgWyBcXFwiJHVpZFxcXCIgLW5lIDAgXTsgdGhlblxcbitcXHRcXHRrdGFwX3NraXBfYWxsIFxcXCJtdXN0IGJlIHJ1biBhcyByb290XFxcIlxcbitcXHRcXHRleGl0IFxcXCIkS1NGVF9TS0lQXFxcIlxcbitcXHRmaVxcbitcXG4rXFx0aWYgISB3aGljaCBnZXRjb25mIFxcdTAwM2UgL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjE7IHRoZW5cXG4rXFx0XFx0a3RhcF9za2lwX2FsbCBcXFwiJDA6IFlvdSBuZWVkIGdldGNvbmYgaW5zdGFsbGVkXFxcIlxcbitcXHRcXHRleGl0IFxcXCIkS1NGVF9TS0lQXFxcIlxcbitcXHRmaVxcbitcXG4rXFx0aWYgISB3aGljaCBkaWZmIFxcdTAwM2UgL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjE7IHRoZW5cXG4rXFx0XFx0a3RhcF9za2lwX2FsbCBcXFwiJDA6IFlvdSBuZWVkIGRpZmYgaW5zdGFsbGVkXFxcIlxcbitcXHRcXHRleGl0IFxcXCIkS1NGVF9TS0lQXFxcIlxcbiBcXHRmaVxcbi1cXHRyZXR1cm4gMVxcbiB9XFxuIFxcbi1mdW5jdGlvbiBydW5fYWxsX3Rlc3RzKClcXG4rY2hlY2tfYXJncygpICAjIFxcdTAwM2NyZXBlYXRcXHUwMDNlIFxcdTAwM2NzZWxlY3RlZFxcdTAwM2UgXFx1MDAzY3NlZWRcXHUwMDNlXFxuIHtcXG4tXFx0Zm9yIGkgaW4gJEFMTF9URVNUUyA7IGRvXFxuLVxcdFxcdFRFU1RfSUQ9JHtpJToqOio6KjoqfVxcbi1cXHRcXHRFTkFCTEVEPSQoZ2V0X3Rlc3RfZW5hYmxlZCAkVEVTVF9JRClcXG4tXFx0XFx0VEVTVF9DT1VOVD0kKGdldF90ZXN0X2NvdW50ICRURVNUX0lEKVxcbi1cXHRcXHRURVNUX1RBUkdFVD0kKGdldF90ZXN0X3RhcmdldCAkVEVTVF9JRClcXG4tXFxuLVxcdFxcdGlmIFtbICRFTkFCTEVEIC1lcSBcXFwiMVxcXCIgXV07IHRoZW5cXG4tXFx0XFx0XFx0dGVzdF9jYXNlICRURVNUX0lEICRURVNUX0NPVU5UICRURVNUX1RBUkdFVFxcbitcXHRsb2NhbCByZXBlYXRfYXJnPVxcXCIkMVxcXCJcXG4rXFx0bG9jYWwgc2VsZWN0ZWRfYXJnPVxcXCIkMlxcXCJcXG4rXFx0bG9jYWwgc2VlZF9hcmc9XFxcIiQzXFxcIlxcbitcXHRsb2NhbCB0XFxuK1xcbitcXHRpZiBbIC16IFxcXCIkc2VsZWN0ZWRfYXJnXFxcIiBdOyB0aGVuXFxuK1xcdFxcdGt0YXBfZXhpdF9mYWlsX21zZyBcXFwibm8gdGVzdCBzZWxlY3RlZFxcXCJcXG4rXFx0ZmlcXG4rXFxuK1xcdGlmICEgW1sgXFxcIiRyZXBlYXRfYXJnXFxcIiA9fiBeWzAtOV0rJCBdXTsgdGhlblxcbitcXHRcXHRrdGFwX2V4aXRfZmFpbF9tc2cgXFxcInJlcGVhdCBhcmd1bWVudCAnJHJlcGVhdF9hcmcnIGlzIG5vdCBhIG51bWJlclxcXCJcXG4rXFx0ZmlcXG4rXFxuK1xcdGlmICEgW1sgXFxcIiRzZWVkX2FyZ1xcXCIgPX4gXlswLTldKyQgXV07IHRoZW5cXG4rXFx0XFx0a3RhcF9leGl0X2ZhaWxfbXNnIFxcXCJzZWVkIGFyZ3VtZW50ICckc2VlZF9hcmcnIGlzIG5vdCBhIG51bWJlclxcXCJcXG4rXFx0ZmlcXG4rXFxuK1xcdGZvciB0IGluICRzZWxlY3RlZF9hcmc7IGRvXFxuK1xcdFxcdGlmICEgZGVjbGFyZSAtRiBcXFwiJHRcXFwiIFxcdTAwM2UgL2Rldi9udWxsOyB0aGVuXFxuK1xcdFxcdFxcdGt0YXBfZXhpdF9mYWlsX21zZyBcXFwidW5rbm93biBzZWxlY3RlZCB0ZXN0ICckdCdcXFwiXFxuIFxcdFxcdGZpXFxuIFxcdGRvbmVcXG4gfVxcbiBcXG4tZnVuY3Rpb24gd2F0Y2hfbG9nKClcXG4rYWxsb3dfdXNlcl9kZWZhdWx0cygpXFxuIHtcXG4tXFx0aWYgWyAkIyAtbmUgMyBdOyB0aGVuXFxuLVxcdFxcdGNsZWFyXFxuK1xcdGlmIFsgLXogXFxcIiR7TU9EVUxFX0RJUn1cXFwiIF07IHRoZW5cXG4rXFx0XFx0TU9EVUxFX0RJUj1cXFwiL3N5cy9tb2R1bGUvdGVzdF9zeXNjdGwvXFxcIlxcbitcXHRmaVxcbitcXHRpZiBbIC16IFxcXCIke1NZU0NUTH1cXFwiIF07IHRoZW5cXG4rXFx0XFx0U1lTQ1RMPVxcXCIvcHJvYy9zeXMvZGVidWcvdGVzdF9zeXNjdGxcXFwiXFxuK1xcdGZpXFxuK1xcdGlmIFsgLXogXFxcIiR7UFJPRF9TWVNDVEx9XFxcIiBdOyB0aGVuXFxuK1xcdFxcdFBST0RfU1lTQ1RMPVxcXCIvcHJvYy9zeXNcXFwiXFxuK1xcdGZpXFxuK1xcdGlmIFsgLXogXFxcIiR7V1JJVEVTX1NUUklDVH1cXFwiIF07IHRoZW5cXG4rXFx0XFx0V1JJVEVTX1NUUklDVD1cXFwiJHtQUk9EX1NZU0NUTH0va2VybmVsL3N5c2N0bF93cml0ZXNfc3RyaWN0XFxcIlxcbitcXHRmaVxcbitcXHRpZiBbIC16IFxcXCIke0JJVE1BUF9JVEVSQVRJT05TfVxcXCIgXTsgdGhlblxcbitcXHRcXHRCSVRNQVBfSVRFUkFUSU9OUz01MFxcbitcXHRmaVxcbitcXHQjIFNldCBzZWVkIGZvciBiaXRtYXAgcmFuZG9tIHRlc3RzXFxuK1xcdGlmIFsgLXogXFxcIiR7QklUTUFQX1NFRUR9XFxcIiBdOyB0aGVuXFxuK1xcdFxcdEJJVE1BUF9TRUVEPSRSQU5ET01cXG4gXFx0ZmlcXG4tXFx0ZGF0ZVxcbi1cXHRlY2hvIFxcXCJSdW5uaW5nIHRlc3Q6ICQyIC0gcnVuICMkMVxcXCJcXG4gfVxcbiBcXG4tZnVuY3Rpb24gd2F0Y2hfY2FzZSgpXFxuK2NoZWNrX3Byb2R1Y3Rpb25fc3lzY3RsX3dyaXRlc19zdHJpY3QoKVxcbiB7XFxuLVxcdGk9MFxcbi1cXHR3aGlsZSBbIDEgXTsgZG9cXG4tXFxuLVxcdFxcdGlmIFsgJCMgLWVxIDEgXTsgdGhlblxcbi1cXHRcXHRcXHR0ZXN0X251bSAkMVxcbi1cXHRcXHRcXHR3YXRjaF9sb2cgJGkgJHtURVNUX05BTUV9X3Rlc3RfJDFcXG4tXFx0XFx0XFx0JHtURVNUX05BTUV9X3Rlc3RfJDFcXG4tXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHR3YXRjaF9sb2cgJGkgYWxsXFxuLVxcdFxcdFxcdHJ1bl9hbGxfdGVzdHNcXG4rXFx0aWYgWyAhIC1lIFxcXCIke1dSSVRFU19TVFJJQ1R9XFxcIiBdOyB0aGVuXFxuK1xcdFxcdGt0YXBfcHJpbnRfbXNnIFxcXCIke1dSSVRFU19TVFJJQ1R9IG1pc3NpbmcsIHNraXBwaW5nIHN0cmljdCB3cml0ZSBjaGVjayAob2xkIGtlcm5lbD8pXFxcIlxcbitcXHRlbHNlXFxuK1xcdFxcdG9sZF9zdHJpY3Q9JChjYXQgXFxcIiR7V1JJVEVTX1NUUklDVH1cXFwiKVxcbitcXHRcXHRpZiBbIFxcXCIkb2xkX3N0cmljdFxcXCIgIT0gXFxcIjFcXFwiIF07IHRoZW5cXG4rXFx0XFx0XFx0a3RhcF9wcmludF9tc2cgXFxcImZvcmNpbmcgJHtXUklURVNfU1RSSUNUfSB0byAxICh3YXMgJHtvbGRfc3RyaWN0fSlcXFwiXFxuK1xcdFxcdFxcdGVjaG8gXFxcIjFcXFwiIFxcdTAwM2UgXFxcIiR7V1JJVEVTX1NUUklDVH1cXFwiXFxuIFxcdFxcdGZpXFxuLVxcdFxcdGxldCBpPSRpKzFcXG4tXFx0ZG9uZVxcbitcXHRmaVxcbitcXG4rXFx0aWYgWyAteiBcXFwiJHtQQUdFX1NJWkV9XFxcIiBdOyB0aGVuXFxuK1xcdFxcdFBBR0VfU0laRT0kKGdldGNvbmYgUEFHRVNJWkUpXFxuK1xcdGZpXFxuK1xcdGlmIFsgLXogXFxcIiR7TUFYX0RJR0lUU31cXFwiIF07IHRoZW5cXG4rXFx0XFx0TUFYX0RJR0lUUz0kKChQQUdFX1NJWkUgLyA4KSlcXG4rXFx0ZmlcXG4rXFx0aWYgWyAteiBcXFwiJHtJTlRfTUFYfVxcXCIgXTsgdGhlblxcbitcXHRcXHRJTlRfTUFYPSQoZ2V0Y29uZiBJTlRfTUFYKVxcbitcXHRmaVxcbitcXHRpZiBbIC16IFxcXCIke1VJTlRfTUFYfVxcXCIgXTsgdGhlblxcbitcXHRcXHRVSU5UX01BWD0kKGdldGNvbmYgVUlOVF9NQVgpXFxuK1xcdGZpXFxuIH1cXG4gXFxuLWZ1bmN0aW9uIHRlc3RfY2FzZSgpXFxuK2xvYWRfcmVxX21vZCgpXFxuIHtcXG4tXFx0VEVTVF9JRD0kMVxcbi1cXHROVU1fVEVTVFM9JDJcXG4tXFx0VEFSR0VUPSQzXFxuLVxcbi1cXHRpZiBza2lwX3Rlc3QgJFRFU1RfSUQgJFRBUkdFVDsgdGhlblxcbi1cXHRcXHRyZXR1cm5cXG4rXFx0aWYgWyAhIC1kIFxcXCIke1NZU0NUTH1cXFwiIF07IHRoZW5cXG4rXFx0XFx0aWYgISBtb2Rwcm9iZSAtcSAtbiBcXFwiJHtURVNUX0RSSVZFUn1cXFwiOyB0aGVuXFxuK1xcdFxcdFxcdGt0YXBfc2tpcF9hbGwgXFxcIm1vZHVsZSAke1RFU1RfRFJJVkVSfSBub3QgZm91bmQuIFxcXFxcXG4rXFx0XFx0XFx0XFx0WW91IG11c3Qgc2V0IENPTkZJR19URVNUX1NZU0NUTD1tIGluIHlvdXIga2VybmVsXFxcIlxcbitcXHRcXHRcXHRleGl0IFxcXCIkS1NGVF9TS0lQXFxcIlxcbitcXHRcXHRmaVxcbitcXHRcXHRpZiAhIG1vZHByb2JlIFxcXCIke1RFU1RfRFJJVkVSfVxcXCI7IHRoZW5cXG4rXFx0XFx0XFx0a3RhcF9leGl0X2ZhaWxfbXNnIFxcXCJtb2Rwcm9iZSAke1RFU1RfRFJJVkVSfSBmYWlsZWRcXFwiXFxuK1xcdFxcdGZpXFxuIFxcdGZpXFxuLVxcbi1cXHRpPTBcXG4tXFx0d2hpbGUgWyAkaSAtbHQgJE5VTV9URVNUUyBdOyBkb1xcbi1cXHRcXHR0ZXN0X251bSAkVEVTVF9JRFxcbi1cXHRcXHR3YXRjaF9sb2cgJGkgJHtURVNUX05BTUV9X3Rlc3RfJHtURVNUX0lEfSBub2NsZWFyXFxuLVxcdFxcdFJVTl9URVNUPSR7VEVTVF9OQU1FfV90ZXN0XyR7VEVTVF9JRH1cXG4tXFx0XFx0JFJVTl9URVNUXFxuLVxcdFxcdGxldCBpPSRpKzFcXG4tXFx0ZG9uZVxcbiB9XFxuIFxcbi1mdW5jdGlvbiBwYXJzZV9hcmdzKClcXG4rIyBDbGVhbnVwIG9ubHkhIERvIG5vdCBjYWxsIGV4aXQgaGVyZSBvciBpdCB3aWxsIHNpbGVudGx5IG92ZXJyaWRlIEtUQVAgZXhpdCBzdGF0dXNcXG4rcmVzdG9yZV9zeXNjdGxfd3JpdGVzX3N0cmljdCgpXFxuIHtcXG4tXFx0aWYgWyAkIyAtZXEgMCBdOyB0aGVuXFxuLVxcdFxcdHJ1bl9hbGxfdGVzdHNcXG4tXFx0ZWxzZVxcbi1cXHRcXHRpZiBbWyBcXFwiJDFcXFwiID0gXFxcImFsbFxcXCIgXV07IHRoZW5cXG4tXFx0XFx0XFx0cnVuX2FsbF90ZXN0c1xcbi1cXHRcXHRlbGlmIFtbIFxcXCIkMVxcXCIgPSBcXFwiLXdcXFwiIF1dOyB0aGVuXFxuLVxcdFxcdFxcdHNoaWZ0XFxuLVxcdFxcdFxcdHdhdGNoX2Nhc2UgJEBcXG4tXFx0XFx0ZWxpZiBbWyBcXFwiJDFcXFwiID0gXFxcIi10XFxcIiBdXTsgdGhlblxcbi1cXHRcXHRcXHRzaGlmdFxcbi1cXHRcXHRcXHR0ZXN0X251bSAkMVxcbi1cXHRcXHRcXHR0ZXN0X2Nhc2UgJDEgJChnZXRfdGVzdF9jb3VudCAkMSkgJChnZXRfdGVzdF90YXJnZXQgJDEpXFxuLVxcdFxcdGVsaWYgW1sgXFxcIiQxXFxcIiA9IFxcXCItY1xcXCIgXV07IHRoZW5cXG4tXFx0XFx0XFx0c2hpZnRcXG4tXFx0XFx0XFx0dGVzdF9udW0gJDFcXG4tXFx0XFx0XFx0dGVzdF9udW0gJDJcXG4tXFx0XFx0XFx0dGVzdF9jYXNlICQxICQyICQoZ2V0X3Rlc3RfdGFyZ2V0ICQxKVxcbi1cXHRcXHRlbGlmIFtbIFxcXCIkMVxcXCIgPSBcXFwiLXNcXFwiIF1dOyB0aGVuXFxuLVxcdFxcdFxcdHNoaWZ0XFxuLVxcdFxcdFxcdHRlc3RfY2FzZSAkMSAxICQoZ2V0X3Rlc3RfdGFyZ2V0ICQxKVxcbi1cXHRcXHRlbGlmIFtbIFxcXCIkMVxcXCIgPSBcXFwiLWxcXFwiIF1dOyB0aGVuXFxuLVxcdFxcdFxcdGxpc3RfdGVzdHNcXG4tXFx0XFx0ZWxpZiBbWyBcXFwiJDFcXFwiID0gXFxcIi1oXFxcIiB8fCBcXFwiJDFcXFwiID0gXFxcIi0taGVscFxcXCIgXV07IHRoZW5cXG4tXFx0XFx0XFx0dXNhZ2VcXG4tXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHR1c2FnZVxcbi1cXHRcXHRmaVxcbitcXHRpZiBbIC1uIFxcXCIke29sZF9zdHJpY3R9XFxcIiBdOyB0aGVuXFxuK1xcdFxcdGVjaG8gXFxcIiR7b2xkX3N0cmljdH1cXFwiIFxcdTAwM2UgXFxcIiR7V1JJVEVTX1NUUklDVH1cXFwiXFxuIFxcdGZpXFxuIH1cXG4gXFxuLXRlc3RfcmVxc1xcbiBhbGxvd191c2VyX2RlZmF1bHRzXFxuK1xcbisjIEVhY2ggYml0bWFwIGl0ZXJhdGlvbiBpcyBvbmUgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgb25lIEtUQVAgcmVwb3J0IHBlciBpdGVyYXRpb25cXG4rZm9yIGkgaW4gJChzZXEgMSBcXFwiJEJJVE1BUF9JVEVSQVRJT05TXFxcIik7IGRvXFxuK1xcdGV2YWwgXFxcInRlc3RfYml0bWFwX3JhbmdlX2NoZWNrXyQocHJpbnRmICclMDJkJyBcXFwiJGlcXFwiKSgpIFxcXFxcXG4rXFx0XFx0eyBcXFxcXFxuK1xcdFxcdFxcdGJpdG1hcF9yYW5nZV9jaGVja19vbmNlICRpOyBcXFxcXFxuK1xcdFxcdH1cXFwiXFxuK2RvbmVcXG4rXFxuKyMgRGlzY292ZXIgdGVzdF8qIGZ1bmN0aW9ucyBhYm92ZSB0aGlzIGxpbmVcXG4rQUxMX1RFU1RTPSQoZGVjbGFyZSAtRiB8IGF3ayAne3ByaW50ICQzfScgfCBncmVwICdedGVzdF8nIHwgc29ydClcXG4rXFxuK1JFUEVBVD0xXFxuK3doaWxlIFsgJCMgLWd0IDAgXTsgZG9cXG4rXFx0Y2FzZSBcXFwiJDFcXFwiIGluXFxuK1xcdC1yIClcXG4rXFx0XFx0c2hpZnRcXG4rXFx0XFx0UkVQRUFUPSQxXFxuK1xcdFxcdDs7XFxuK1xcdC1sIClcXG4rXFx0XFx0bGlzdF90ZXN0c1xcbitcXHRcXHRleGl0IDBcXG4rXFx0XFx0OztcXG4rXFx0LWggfCAtLWhlbHAgKVxcbitcXHRcXHR1c2FnZVxcbitcXHRcXHRleGl0IDBcXG4rXFx0XFx0OztcXG4rXFx0LXQgKVxcbitcXHRcXHRzaGlmdFxcbitcXHRcXHRTWVNDVExfVEVTVFM9XFxcIiQxXFxcIlxcbitcXHRcXHQ7O1xcbitcXHQtcyApXFxuK1xcdFxcdHNoaWZ0XFxuK1xcdFxcdEJJVE1BUF9TRUVEPVxcXCIkMVxcXCJcXG4rXFx0XFx0OztcXG4rXFx0KiApXFxuK1xcdFxcdHVzYWdlXFxuK1xcdFxcdGV4aXQgMVxcbitcXHRcXHQ7O1xcbitcXHRlc2FjXFxuK1xcdHNoaWZ0XFxuK2RvbmVcXG4rXFxuK1NFTEVDVEVEPSR7U1lTQ1RMX1RFU1RTLSRBTExfVEVTVFN9XFxuK1xcbitrdGFwX3ByaW50X2hlYWRlclxcbit0cmFwIHJlc3RvcmVfc3lzY3RsX3dyaXRlc19zdHJpY3QgRVhJVFxcbitjaGVja19hcmdzIFxcXCIkUkVQRUFUXFxcIiBcXFwiJFNFTEVDVEVEXFxcIiBcXFwiJEJJVE1BUF9TRUVEXFxcIlxcbitjaGVja19yZXFzXFxuIGNoZWNrX3Byb2R1Y3Rpb25fc3lzY3RsX3dyaXRlc19zdHJpY3RcXG4gbG9hZF9yZXFfbW9kXFxuIFxcbi10cmFwIFxcXCJ0ZXN0X2ZpbmlzaFxcXCIgRVhJVFxcbitrdGFwX3ByaW50X21zZyBcXFwiYml0bWFwIGJhc2Ugc2VlZDogJEJJVE1BUF9TRUVEIChyZXBsYXkgd2l0aCAtcyAkQklUTUFQX1NFRUQpXFxcIlxcbiBcXG4tcGFyc2VfYXJncyAkQFxcbitrdGFwX3NldF9wbGFuIFxcXCIkKCggJCh3YyAtdyBcXHUwMDNjXFx1MDAzY1xcdTAwM2MgXFxcIiRTRUxFQ1RFRFxcXCIpICogUkVQRUFUICkpXFxcIlxcbitcXG4rZm9yICgoaSA9IDA7IGkgXFx1MDAzYyBSRVBFQVQ7IGkrKykpOyBkb1xcbitcXHRmb3IgdCBpbiAkU0VMRUNURUQ7IGRvXFxuK1xcdFxcdHJ1bl9vbmUgXFxcIiR0XFxcIlxcbitcXHRkb25lXFxuK2RvbmVcXG4gXFxuLWV4aXQgMFxcbitrdGFwX2ZpbmlzaGVkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjM5OjA3LjUzNTA2MzMyN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDE2MjI1MTcxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB0aGUgdXNlci1zcGFjZSBzZWxmdGVzdCBzY3JpcHQgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY3RsL3N5c2N0bC5zaCB0byBtb2Rlcm5pemUgaXQgYW5kIHVzZSBrdGFwX2hlbHBlcnMuIEl0IGRvZXMgbm90IHRvdWNoIGFueSBrZXJuZWwgc291cmNlIGNvZGUsIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCksIG9yIGtlcm5lbCBtb2R1bGVzLCBzbyBpdCBpcyBub3Qgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjcxNjY5MmNlNGZiZTAxM2I4OGUzZjQzYjAwZjczNTM4OTI1MTM1OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDE0IDEzOjM5OjA1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY3RsL3N5c2N0bC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2N0bC9zeXNjdGwuc2hcbmluZGV4IDk1ZTkzNzA5MDg4YTMuLmNlYjVjZmEwY2ZkNGQgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjdGwvc3lzY3RsLnNoXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zeXNjdGwvc3lzY3RsLnNoXG5AQCAtMiwzNjIgKzIsMjM5IEBAXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciBPUiBjb3B5bGVmdC1uZXh0LTAuMy4xXG4gIyBDb3B5cmlnaHQgKEMpIDIwMTcgTHVpcyBSLiBSb2RyaWd1ZXogXHUwMDNjbWNncm9mQGtlcm5lbC5vcmdcdTAwM2VcbiBcbi0jIFRoaXMgcGVyZm9ybXMgYSBzZXJpZXMgdGVzdHMgYWdhaW5zdCB0aGUgcHJvYyBzeXNjdGwgaW50ZXJmYWNlLlxuLVxuKyMgUmVkdWNlIG5vaXNlIGJ5IGRpc2FibGluZyBcInVucmVhY2hhYmxlXCIgY2hlY2suXG4gIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMzE3XG4tIyBLc2VsZnRlc3QgZnJhbWV3b3JrIHJlcXVpcmVtZW50IC0gU0tJUCBjb2RlIGlzIDQuXG4ta3NmdF9za2lwPTRcbi1cbi1URVNUX05BTUU9XCJzeXNjdGxcIlxuLVRFU1RfRFJJVkVSPVwidGVzdF8ke1RFU1RfTkFNRX1cIlxuLVRFU1RfRElSPSQoZGlybmFtZSAkMClcbi1URVNUX0ZJTEU9JChta3RlbXApXG4tXG4tIyBpbml0aWFsaXplIGZvciBpbmRpdmlkdWFsIHRlc3RzXG4tcmM9MFxuLVxuLSMgVGhpcyByZXByZXNlbnRzXG4tI1xuLSMgVEVTVF9JRDpURVNUX0NPVU5UOkVOQUJMRUQ6VEFSR0VUOlNLSVBfTk9fVEFSR0VUXG4tI1xuLSMgVEVTVF9JRDogaXMgdGhlIHRlc3QgaWQgbnVtYmVyXG4tIyBURVNUX0NPVU5UOiBudW1iZXIgb2YgdGltZXMgd2Ugc2hvdWxkIHJ1biB0aGUgdGVzdFxuLSMgRU5BQkxFRDogMSBpZiBlbmFibGVkLCAwIG90aGVyd2lzZVxuLSMgVEFSR0VUOiB0ZXN0IHRhcmdldCBmaWxlIHJlcXVpcmVkIG9uIHRoZSB0ZXN0X3N5c2N0bCBtb2R1bGVcbi0jIFNLSVBfTk9fVEFSR0VUOiAxIHNraXAgaWYgVEFSR0VUIG5vdCB0aGVyZVxuLSMgICAgICAgICAgICAgICAgIDAgcnVuIGV2ZW4gdGhvdWdoIFRBUkdFVCBub3QgdGhlcmVcbi0jXG4tIyBPbmNlIHRoZXNlIGFyZSBlbmFibGVkIHBsZWFzZSBsZWF2ZSB0aGVtIGFzLWlzLiBXcml0ZSB5b3VyIG93biB0ZXN0LFxuLSMgd2UgaGF2ZSB0b25zIG9mIHNwYWNlLlxuLUFMTF9URVNUUz1cIjAwMDE6MToxOmludF8wMDAxOjFcIlxuLUFMTF9URVNUUz1cIiRBTExfVEVTVFMgMDAwMjoxOjE6c3RyaW5nXzAwMDE6MVwiXG4tQUxMX1RFU1RTPVwiJEFMTF9URVNUUyAwMDAzOjE6MTppbnRfMDAwMjoxXCJcbi1BTExfVEVTVFM9XCIkQUxMX1RFU1RTIDAwMDQ6MToxOnVpbnRfMDAwMToxXCJcbi1BTExfVEVTVFM9XCIkQUxMX1RFU1RTIDAwMDU6MzoxOmludF8wMDAzOjFcIlxuLUFMTF9URVNUUz1cIiRBTExfVEVTVFMgMDAwNjo1MDoxOmJpdG1hcF8wMDAxOjFcIlxuLUFMTF9URVNUUz1cIiRBTExfVEVTVFMgMDAwNzoxOjE6Ym9vdF9pbnQ6MVwiXG4tQUxMX1RFU1RTPVwiJEFMTF9URVNUUyAwMDA4OjE6MTptYXRjaF9pbnQ6MVwiXG4tQUxMX1RFU1RTPVwiJEFMTF9URVNUUyAwMDA5OjE6MTp1bnJlZ2lzdGVyX2Vycm9yOjBcIlxuLUFMTF9URVNUUz1cIiRBTExfVEVTVFMgMDAxMDoxOjE6bW50L21udF9lcnJvcjowXCJcbi1BTExfVEVTVFM9XCIkQUxMX1RFU1RTIDAwMTE6MToxOmVtcHR5X2FkZDowXCJcbi1BTExfVEVTVFM9XCIkQUxMX1RFU1RTIDAwMTI6MToxOnU4X3ZhbGlkOjBcIlxuLUFMTF9URVNUUz1cIiRBTExfVEVTVFMgMDAxMzoxOjE6aW50XzAwMDM6MVwiXG4tXG4tZnVuY3Rpb24gYWxsb3dfdXNlcl9kZWZhdWx0cygpXG4rXG4rIyBUaGlzIHBlcmZvcm1zIGEgc2VyaWVzIG9mIHRlc3RzIGFnYWluc3QgdGhlIHByb2Mgc3lzY3RsIGludGVyZmFjZS5cbitcbitESVI9XCIkKGRpcm5hbWUgXCIkKHJlYWRsaW5rIC1mIFwiJDBcIilcIilcIlxuK3NvdXJjZSBcIiR7RElSfVwiLy4uL2tzZWxmdGVzdC9rdGFwX2hlbHBlcnMuc2hcbitcbitURVNUX0RSSVZFUj1cInRlc3Rfc3lzY3RsXCJcbitcbithc3NlcnRfd3JpdGVfcmVqZWN0ZWQoKSAjIFx1MDAzY2ZpbGVcdTAwM2UgXHUwMDNjdmFsdWVcdTAwM2VcbiB7XG4tXHRpZiBbIC16ICRESVIgXTsgdGhlblxuLVx0XHRESVI9XCIvc3lzL21vZHVsZS90ZXN0X3N5c2N0bC9cIlxuLVx0Zmlcbi1cdGlmIFsgLXogJERFRkFVTFRfTlVNX1RFU1RTIF07IHRoZW5cbi1cdFx0REVGQVVMVF9OVU1fVEVTVFM9NTBcbi1cdGZpXG4tXHRpZiBbIC16ICRTWVNDVEwgXTsgdGhlblxuLVx0XHRTWVNDVEw9XCIvcHJvYy9zeXMvZGVidWcvdGVzdF9zeXNjdGxcIlxuLVx0Zmlcbi1cdGlmIFsgLXogJFBST0RfU1lTQ1RMIF07IHRoZW5cbi1cdFx0UFJPRF9TWVNDVEw9XCIvcHJvYy9zeXNcIlxuLVx0Zmlcbi1cdGlmIFsgLXogJFdSSVRFU19TVFJJQ1QgXTsgdGhlblxuLVx0XHRXUklURVNfU1RSSUNUPVwiJHtQUk9EX1NZU0NUTH0va2VybmVsL3N5c2N0bF93cml0ZXNfc3RyaWN0XCJcbitcdGxvY2FsIGZpbGU9JDEgdmFsPSQyXG4rXHRpZiBwcmludGYgJyVzJyBcIiR2YWxcIiBcdTAwM2UgXCIkZmlsZVwiIDJcdTAwM2UvZGV2L251bGw7IHRoZW5cbitcdFx0a3RhcF9wcmludF9tc2cgXCIkZmlsZTogd3JpdGUgb2YgJyR2YWwnIHN1Y2NlZWRlZCwgZXhwZWN0ZWQgcmVqZWN0aW9uXCJcbitcdFx0cmV0dXJuIDFcbiBcdGZpXG4rXHRyZXR1cm4gMFxuIH1cbiBcbi1mdW5jdGlvbiBjaGVja19wcm9kdWN0aW9uX3N5c2N0bF93cml0ZXNfc3RyaWN0KClcbithc3NlcnRfY29udGVudCgpICMgXHUwMDNjZmlsZVx1MDAzZSBcdTAwM2N3YW50LWZpbGVcdTAwM2VcbiB7XG4tXHRlY2hvIC1uIFwiQ2hlY2tpbmcgcHJvZHVjdGlvbiB3cml0ZSBzdHJpY3Qgc2V0dGluZyAuLi4gXCJcbi1cdGlmIFsgISAtZSAke1dSSVRFU19TVFJJQ1R9IF07IHRoZW5cbi1cdFx0ZWNobyBcIkZBSUwsIGJ1dCBza2lwIGluIGNhc2Ugb2Ygb2xkIGtlcm5lbFwiIFx1MDAzZVx1MDAyNjJcbi1cdGVsc2Vcbi1cdFx0b2xkX3N0cmljdD0kKGNhdCAke1dSSVRFU19TVFJJQ1R9KVxuLVx0XHRpZiBbIFwiJG9sZF9zdHJpY3RcIiA9IFwiMVwiIF07IHRoZW5cbi1cdFx0XHRlY2hvIFwiT0tcIlxuLVx0XHRlbHNlXG4tXHRcdFx0ZWNobyBcIkZBSUwsIHN0cmljdCB2YWx1ZSBpcyAwIGJ1dCBmb3JjZSB0byAxIHRvIGNvbnRpbnVlXCIgXHUwMDNlXHUwMDI2MlxuLVx0XHRcdGVjaG8gXCIxXCIgXHUwMDNlICR7V1JJVEVTX1NUUklDVH1cbi1cdFx0Zmlcbi1cdGZpXG4tXG4tXHRpZiBbIC16ICRQQUdFX1NJWkUgXTsgdGhlblxuLVx0XHRQQUdFX1NJWkU9JChnZXRjb25mIFBBR0VTSVpFKVxuLVx0Zmlcbi1cdGlmIFsgLXogJE1BWF9ESUdJVFMgXTsgdGhlblxuLVx0XHRNQVhfRElHSVRTPSQoKCRQQUdFX1NJWkUvOCkpXG4tXHRmaVxuLVx0aWYgWyAteiAkSU5UX01BWCBdOyB0aGVuXG4tXHRcdElOVF9NQVg9JChnZXRjb25mIElOVF9NQVgpXG4tXHRmaVxuLVx0aWYgWyAteiAkVUlOVF9NQVggXTsgdGhlblxuLVx0XHRVSU5UX01BWD0kKGdldGNvbmYgVUlOVF9NQVgpXG4rXHRsb2NhbCBmaWxlPSQxIHdhbnRfZmlsZT0kMiBnb3RcbitcdGdvdD0kKGNhdCBcIiRmaWxlXCIpXG4rXHRpZiBbIFwiJGdvdFwiID09IFwiJHdhbnRfZmlsZVwiIF07IHRoZW5cbitcdFx0cmV0dXJuIDBcbiBcdGZpXG4rXHRrdGFwX3ByaW50X21zZyBcIiRmaWxlOiBnb3QgJyRnb3QnLCB3YW50ICckd2FudF9maWxlJ1wiXG4rXHRyZXR1cm4gMVxuIH1cbiBcbi10ZXN0X3JlcXMoKVxuKyMgY29tcGFyZSBpZ25vcmluZyB3aGl0ZXNwYWNlc1xuK2Fzc2VydF9jb250ZW50X2xvb3NlKCkgIyBcdTAwM2NmaWxlXHUwMDNlIFx1MDAzY3dhbnQtZmlsZVx1MDAzZVxuIHtcbi1cdHVpZD0kKGlkIC11KVxuLVx0aWYgWyAkdWlkIC1uZSAwIF07IHRoZW5cbi1cdFx0ZWNobyAkbXNnIG11c3QgYmUgcnVuIGFzIHJvb3QgXHUwMDNlXHUwMDI2MlxuLVx0XHRleGl0ICRrc2Z0X3NraXBcbi1cdGZpXG4tXG4tXHRpZiAhIHdoaWNoIHBlcmwgMlx1MDAzZSAvZGV2L251bGwgXHUwMDNlIC9kZXYvbnVsbDsgdGhlblxuLVx0XHRlY2hvIFwiJDA6IFlvdSBuZWVkIHBlcmwgaW5zdGFsbGVkXCJcbi1cdFx0ZXhpdCAka3NmdF9za2lwXG4tXHRmaVxuLVx0aWYgISB3aGljaCBnZXRjb25mIDJcdTAwM2UgL2Rldi9udWxsIFx1MDAzZSAvZGV2L251bGw7IHRoZW5cbi1cdFx0ZWNobyBcIiQwOiBZb3UgbmVlZCBnZXRjb25mIGluc3RhbGxlZFwiXG4tXHRcdGV4aXQgJGtzZnRfc2tpcFxuLVx0Zmlcbi1cdGlmICEgd2hpY2ggZGlmZiAyXHUwMDNlIC9kZXYvbnVsbCBcdTAwM2UgL2Rldi9udWxsOyB0aGVuXG4tXHRcdGVjaG8gXCIkMDogWW91IG5lZWQgZGlmZiBpbnN0YWxsZWRcIlxuLVx0XHRleGl0ICRrc2Z0X3NraXBcbitcdGxvY2FsIGZpbGU9JDEgd2FudF9maWxlPSQyXG4rXHRpZiBlY2hvIFwiJHdhbnRfZmlsZVwiIHwgZGlmZiAtcSAtdyAtdSAtIFwiJGZpbGVcIiBcdTAwM2UgL2Rldi9udWxsOyB0aGVuXG4rXHRcdHJldHVybiAwXG4gXHRmaVxuK1x0a3RhcF9wcmludF9tc2cgXCIkZmlsZTogY29udGVudCBkb2VzIG5vdCBtYXRjaCAnJHdhbnRfZmlsZScgKHdoaXRlc3BhY2UtaW5zZW5zaXRpdmUpXCJcbitcdHJldHVybiAxXG4gfVxuIFxuLWZ1bmN0aW9uIGxvYWRfcmVxX21vZCgpXG4rIyBGb3IgY2hlY2tzIHdoZXJlIHdyaXRlcyBtdXN0IE5PVCB0YWtlIGVmZmVjdFxuK2Fzc2VydF9jb250ZW50X3JlamVjdGVkKCkgIyBcdTAwM2NmaWxlXHUwMDNlIFx1MDAzY2JhZFx1MDAzZVxuIHtcbi1cdGlmIFsgISAtZCAkU1lTQ1RMIF07IHRoZW5cbi1cdFx0aWYgISBtb2Rwcm9iZSAtcSAtbiAkVEVTVF9EUklWRVI7IHRoZW5cbi1cdFx0XHRlY2hvIFwiJDA6IG1vZHVsZSAkVEVTVF9EUklWRVIgbm90IGZvdW5kIFtTS0lQXVwiXG4tXHRcdFx0ZWNobyBcIllvdSBtdXN0IHNldCBDT05GSUdfVEVTVF9TWVNDVEw9bSBpbiB5b3VyIGtlcm5lbFwiIFx1MDAzZVx1MDAyNjJcbi1cdFx0XHRleGl0ICRrc2Z0X3NraXBcbi1cdFx0Zmlcbi1cdFx0bW9kcHJvYmUgJFRFU1RfRFJJVkVSXG4tXHRcdGlmIFsgJD8gLW5lIDAgXTsgdGhlblxuLVx0XHRcdGVjaG8gXCIkMDogbW9kcHJvYmUgJFRFU1RfRFJJVkVSIGZhaWxlZC5cIlxuLVx0XHRcdGV4aXRcbi1cdFx0ZmlcbitcdGxvY2FsIGZpbGU9JDEgYmFkPSQyXG4rXHRpZiBlY2hvIFwiJGJhZFwiIHwgZGlmZiAtcSAtdyAtdSAtIFwiJGZpbGVcIiBcdTAwM2UgL2Rldi9udWxsOyB0aGVuXG4rXHRcdGt0YXBfcHJpbnRfbXNnIFwiJGZpbGU6IHVuZXhwZWN0ZWRseSBub3cgaG9sZHMgcmVqZWN0ZWQgdmFsdWUgJyRiYWQnXCJcbitcdFx0cmV0dXJuIDFcbiBcdGZpXG4rXHRyZXR1cm4gMFxuIH1cbiBcbi1yZXNldF92YWxzKClcbisjIHByb2MgZmlsZXMgZ2V0IHJlYWQgYSBwYWdlIGF0IGEgdGltZSwgd2hpY2ggY2FuIGNvbmZ1c2UgZGlmZiByZXN1bHRpbmcgaW5cbisjIGluY29ycmVjdCByZXN1bHRzLiBVc2UgYSB0ZW1wIGZpbGUgdG8gZGlmZi5cbithc3NlcnRfZGlmZl9wcm9jX2ZpbGUoKSAjIFx1MDAzY2ZpbGVcdTAwM2UgXHUwMDNjd2FudC1maWxlXHUwMDNlXG4ge1xuLVx0VkFMPVwiXCJcbi1cdFRSSUdHRVI9JChiYXNlbmFtZSAke1RBUkdFVH0pXG4tXHRjYXNlIFwiJFRSSUdHRVJcIiBpblxuLVx0XHRpbnRfMDAwMSlcbi1cdFx0XHRWQUw9XCI2MFwiXG4tXHRcdFx0Oztcbi1cdFx0aW50XzAwMDIpXG4tXHRcdFx0VkFMPVwiMVwiXG4tXHRcdFx0Oztcbi1cdFx0dWludF8wMDAxKVxuLVx0XHRcdFZBTD1cIjMxNFwiXG4tXHRcdFx0Oztcbi1cdFx0c3RyaW5nXzAwMDEpXG4tXHRcdFx0VkFMPVwiKG5vbmUpXCJcbi1cdFx0XHQ7O1xuLVx0XHRiaXRtYXBfMDAwMSlcbi1cdFx0XHRWQUw9XCJcIlxuLVx0XHRcdDs7XG4tXHRcdCopXG4tXHRcdFx0Oztcbi1cdGVzYWNcbi1cdGVjaG8gLW4gJFZBTCBcdTAwM2UgJFRBUkdFVFxuLX1cbitcdGxvY2FsIGZpbGU9JDEgd2FudF9maWxlPSQyIHRtcFxuK1x0dG1wPSQobWt0ZW1wKVxuK1x0Y2F0IFwiJGZpbGVcIiBcdTAwM2UgXCIkdG1wXCJcbiBcbi1zZXRfb3JpZygpXG4te1xuLVx0aWYgWyAhIC16ICRUQVJHRVQgXSBcdTAwMjZcdTAwMjYgWyAhIC16ICRPUklHIF07IHRoZW5cbi1cdFx0aWYgWyAtZiAke1RBUkdFVH0gXTsgdGhlblxuLVx0XHRcdGVjaG8gXCIke09SSUd9XCIgXHUwMDNlIFwiJHtUQVJHRVR9XCJcbi1cdFx0ZmlcbitcdGlmIGRpZmYgLXcgLXEgXCIkdG1wXCIgXCIkd2FudF9maWxlXCIgXHUwMDNlIC9kZXYvbnVsbDsgdGhlblxuK1x0XHRybSAtZiBcIiR0bXBcIlxuK1x0XHRyZXR1cm4gMFxuIFx0ZmlcbitcdGt0YXBfcHJpbnRfbXNnIFwiJGZpbGU6IGNvbnRlbnQgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgZmlsZSAkd2FudF9maWxlXCJcbitcdHJtIC1mIFwiJHRtcFwiXG4rXHRyZXR1cm4gMVxuIH1cbiBcbi1zZXRfdGVzdCgpXG4rIyBWZXJpZnkgdGhhdCBhbiBlcnJvbmVvdXMgdXBkYXRlIGZhaWxzIGFuZCBkb2VzIG5vdCBjaGFuZ2UgdGhlIGJhc2VsaW5lLlxuK2Fzc2VydF9ub19wYXJ0aWFsX3VwZGF0ZSgpICMgXHUwMDNjZmlsZVx1MDAzZSBcdTAwM2NiYXNlbGluZVx1MDAzZSBcdTAwM2NiYWQtdmFsdWVcdTAwM2VcbiB7XG4tXHRlY2hvIFwiJHtURVNUX1NUUn1cIiBcdTAwM2UgXCIke1RBUkdFVH1cIlxuK1x0bG9jYWwgZmlsZT0kMSBiYXNlbGluZT0kMiBiYWQ9JDNcbitcbitcdHByaW50ZiAnJXMnIFwiJGJhc2VsaW5lXCIgXHUwMDNlIFwiJGZpbGVcIlxuK1x0YXNzZXJ0X3dyaXRlX3JlamVjdGVkIFwiJGZpbGVcIiBcIiRiYWRcIiB8fCByZXR1cm4gMVxuK1x0YXNzZXJ0X2NvbnRlbnRfbG9vc2UgXCIkZmlsZVwiIFwiJGJhc2VsaW5lXCJcbiB9XG4gXG4tdmVyaWZ5KClcbithc3NlcnRfZ3JlcCgpICMgXHUwMDNjZmlsZVx1MDAzZSBcdTAwM2NwYXR0ZXJuXHUwMDNlIC0gXHUwMDNjcGF0dGVyblx1MDAzZSBtdXN0IGFwcGVhciBpbiBcdTAwM2NmaWxlXHUwMDNlXG4ge1xuLVx0bG9jYWwgc2VlblxuLVx0c2Vlbj0kKGNhdCBcIiQxXCIpXG4tXHRpZiBbIFwiJHtzZWVufVwiICE9IFwiJHtURVNUX1NUUn1cIiBdOyB0aGVuXG4tXHRcdHJldHVybiAxXG4rXHRsb2NhbCBmaWxlPSQxIHBhdHRlcm49JDJcbitcdGlmIGdyZXAgLXEgXCIkcGF0dGVyblwiIFwiJGZpbGVcIjsgdGhlblxuK1x0XHRyZXR1cm4gMFxuIFx0Zmlcbi1cdHJldHVybiAwXG4rXHRrdGFwX3ByaW50X21zZyBcIiRmaWxlOiBwYXR0ZXJuICckcGF0dGVybicgbm90IGZvdW5kXCJcbitcdHJldHVybiAxXG4gfVxuIFxuLSMgcHJvYyBmaWxlcyBnZXQgcmVhZCBhIHBhZ2UgYXQgYSB0aW1lLCB3aGljaCBjYW4gY29uZnVzZSBkaWZmLFxuLSMgYW5kIGdldCB5b3UgaW5jb3JyZWN0IHJlc3VsdHMgb24gcHJvYyBmaWxlcyB3aXRoIGxvbmcgZGF0YS4gVG8gdXNlXG4tIyBkaWZmIGFnYWluc3QgdGhlbSB5b3UgbXVzdCBmaXJzdCBleHRyYWN0IHRoZSBvdXRwdXQgdG8gYSBmaWxlLCBhbmRcbi0jIHRoZW4gY29tcGFyZSBhZ2FpbnN0IHRoYXQgZmlsZS5cbi12ZXJpZnlfZGlmZl9wcm9jX2ZpbGUoKVxuK2Fzc2VydF9ncmVwX2Fic2VudCgpICMgXHUwMDNjZmlsZVx1MDAzZSBcdTAwM2NwYXR0ZXJuXHUwMDNlIC0gXHUwMDNjcGF0dGVyblx1MDAzZSBtdXN0IE5PVCBhcHBlYXJcbiB7XG4tXHRUTVBfRFVNUF9GSUxFPSQobWt0ZW1wKVxuLVx0Y2F0ICQxIFx1MDAzZSAkVE1QX0RVTVBfRklMRVxuLVxuLVx0aWYgISBkaWZmIC13IC1xICRUTVBfRFVNUF9GSUxFICQyOyB0aGVuXG4tXHRcdHJldHVybiAxXG4tXHRlbHNlXG4rXHRsb2NhbCBmaWxlPSQxIHBhdHRlcm49JDJcbitcdGlmICEgZ3JlcCAtcSBcIiRwYXR0ZXJuXCIgXCIkZmlsZVwiOyB0aGVuXG4gXHRcdHJldHVybiAwXG4gXHRmaVxuK1x0a3RhcF9wcmludF9tc2cgXCIkZmlsZTogcGF0dGVybiAnJHBhdHRlcm4nIHVuZXhwZWN0ZWRseSBmb3VuZFwiXG4rXHRyZXR1cm4gMVxuIH1cbiBcbi12ZXJpZnlfZGlmZl93KClcbithc3NlcnRfZG1lc2dfY291bnQoKSAjIFx1MDAzY3BhdHRlcm5cdTAwM2UgXHUwMDNjd2FudC1jb3VudFx1MDAzZVxuIHtcbi1cdGVjaG8gXCIkVEVTVF9TVFJcIiB8IGRpZmYgLXEgLXcgLXUgLSAkMSBcdTAwM2UgL2Rldi9udWxsXG4tXHRyZXR1cm4gJD9cbitcdGxvY2FsIHBhdHRlcm49JDEgd2FudD0kMiBnb3RcbitcdGdvdD0kKGRtZXNnIHwgZ3JlcCAtYyBcIiRwYXR0ZXJuXCIpXG4rXHRpZiBbIFwiJGdvdFwiIC1lcSBcIiR3YW50XCIgXTsgdGhlblxuK1x0XHRyZXR1cm4gMFxuK1x0ZmlcbitcdGt0YXBfcHJpbnRfbXNnIFwiZG1lc2c6IHBhdHRlcm4gJyRwYXR0ZXJuJyBzZWVuICRnb3QgdGltZXMsIHdhbnQgJHdhbnRcIlxuK1x0cmV0dXJuIDFcbiB9XG4gXG4tIyBWZXJpZnkgdGhhdCBhbiBlcnJvbmVvdXMgKCQyKSB1cGRhdGUgZmFpbHMgYW5kIGRvZXMgbm90IGNoYW5nZSBUQVJHRVRcbi12ZXJpZnlfbm9fcGFydGlhbF91cGRhdGUoKVxuKyMgd3JpdGUgXHUwMDNjc3RyXHUwMDNlIHRocm91Z2ggZGQgaW4gXHUwMDNjYnNcdTAwM2Utc2l6ZWQgY2h1bmtzXG4rd3JpdGVfaW5fY2h1bmtzKCkgICMgXHUwMDNjZmlsZVx1MDAzZSBcdTAwM2NzdHJcdTAwM2UgXHUwMDNjYnNcdTAwM2VcbiB7XG4tXHRURVNUX1NUUj1cIiQxXCJcbi1cdGVjaG8gLW4gXCIkVEVTVF9TVFJcIiBcdTAwM2UgXCIkVEFSR0VUXCJcbi1cbi1cdGlmIGVjaG8gLW4gXCIkMlwiIFx1MDAzZSBcIiRUQVJHRVRcIiAyXHUwMDNlIC9kZXYvbnVsbDsgdGhlblxuLVx0XHRyZXR1cm4gMVxuLVx0Zmlcbi1cdHZlcmlmeV9kaWZmX3cgXCIke1RBUkdFVH1cIlxuK1x0bG9jYWwgZmlsZT0kMSBzdHI9JDIgYnM9JDNcbitcdHByaW50ZiAnJXMnIFwiJHN0clwiIHwgZGQgb2Y9XCIkZmlsZVwiIGJzPVwiJGJzXCIgMlx1MDAzZS9kZXYvbnVsbFxuIH1cbiBcbi10ZXN0X3JjKClcbisjIHdyaXRlIFx1MDAzY3N0clx1MDAzZSB0aHJvdWdoIGRkIGluIFx1MDAzY2JzXHUwMDNlLXNpemVkIGNodW5rcy4gc2Vla2luZyBcdTAwM2NzZWVrXHUwMDNlIGJsb2NrcyBvZiBzaXplXG4rIyBcdTAwM2Nic1x1MDAzZSBpbnRvIHRoZSBvdXRwdXQuIHNraXBwaW5nIFx1MDAzY3NraXBcdTAwM2UgYmxvY2tzIG9mIHNpemUgXHUwMDNjYnNcdTAwM2UgZnJvbSB0aGUgaW5wdXQuXG4rIyBVbnN5bmNyaG9uaXplZCB3aGVuIHNraXAgaXMgbm90IHBhc3NlZC5cbit3cml0ZV9hdF9vZmZzZXQoKSAgIyBcdTAwM2NmaWxlXHUwMDNlIFx1MDAzY3N0clx1MDAzZSBcdTAwM2Nic1x1MDAzZSBcdTAwM2NzZWVrXHUwMDNlIFtza2lwXVxuIHtcbi1cdGlmIFtbICRyYyAhPSAwIF1dOyB0aGVuXG4tXHRcdGVjaG8gXCJGYWlsZWQgdGVzdCwgcmV0dXJuIHZhbHVlOiAkcmNcIiBcdTAwM2VcdTAwMjYyXG4tXHRcdGV4aXQgJHJjXG4rXHRsb2NhbCBmaWxlPSQxIHN0cj0kMiBicz0kMyBzZWVrPSQ0IHNraXA9JHs1Oi19XG4rXHRpZiBbIC1uIFwiJHNraXBcIiBdOyB0aGVuXG4rXHRcdHByaW50ZiAnJXMnIFwiJHN0clwiIHwgZGQgb2Y9XCIkZmlsZVwiIGJzPVwiJGJzXCIgc2Vlaz1cIiRzZWVrXCIgc2tpcD1cIiRza2lwXCIgMlx1MDAzZS9kZXYvbnVsbFxuK1x0ZWxzZVxuK1x0XHRwcmludGYgJyVzJyBcIiRzdHJcIiB8IGRkIG9mPVwiJGZpbGVcIiBicz1cIiRic1wiIHNlZWs9XCIkc2Vla1wiIDJcdTAwM2UvZGV2L251bGxcbiBcdGZpXG4gfVxuIFxuLXRlc3RfZmluaXNoKClcbisjIHBhZCAocHJlZml4KSBcdTAwM2NzdHJcdTAwM2Ugd2l0aCBcdTAwM2NwYWRcdTAwM2UgJ0EnIGNoYXJhY3RlcnMsIHRoZW4gd3JpdGUgaXQgYWxsIHRvIFx1MDAzY2ZpbGVcdTAwM2VcbisjIHdpdGggZGQgYmxvY2sgc2l6ZSBcdTAwM2Nic1x1MDAzZSAoZGVmYXVsdHMgdG8gXHUwMDNjcGFkXHUwMDNlKS5cbit3cml0ZV9vdmVybG9uZygpICAjIFx1MDAzY2ZpbGVcdTAwM2UgXHUwMDNjcGFkXHUwMDNlIFx1MDAzY3N0clx1MDAzZSBbYnNdXG4ge1xuLVx0c2V0X29yaWdcbi1cdHJtIC1mIFwiJHtURVNUX0ZJTEV9XCJcbitcdGxvY2FsIGZpbGU9JDEgcGFkPSQyIHN0cj0kMyBicz0kNCBwXG4rXHQ6IFwiJHticzo9JHBhZH1cIlxuIFxuLVx0aWYgWyAhIC16ICR7b2xkX3N0cmljdH0gXTsgdGhlblxuLVx0XHRlY2hvICR7b2xkX3N0cmljdH0gXHUwMDNlICR7V1JJVEVTX1NUUklDVH1cbi1cdGZpXG4tXHRleGl0ICRyY1xuK1x0IyBzYXZlIGEgc3RyaW5nIHdpdGggJHBhZCBzcGFjZXMgaW4gJHBcbitcdHByaW50ZiAtdiBwICclKnMnIFwiJHBhZFwiICcnXG4rXHQjIHJlcGxhY2UgXCIgXCIgd2l0aCBcIkFcIlxuK1x0cHJpbnRmICclcyVzJyBcIiR7cC8vIC9BfVwiIFwiJHN0clwiIHwgZGQgb2Y9XCIkZmlsZVwiIGJzPVwiJGJzXCIgMlx1MDAzZS9kZXYvbnVsbFxuIH1cbiBcbi1ydW5fbnVtZXJpY3Rlc3RzKClcbisjIHBhZCAocHJlZml4KSBcdTAwM2NzdHJcdTAwM2Ugd2l0aCBcdTAwM2NwYWRcdTAwM2UgQVNDSUkgc3BhY2VzLCB0aGVuIHdyaXRlIHdpdGggZGVmYXVsdCBibG9jayBzaXplLlxuK3dyaXRlX3BhZGRlZF9kaWdpdHMoKSAgIyBcdTAwM2NmaWxlXHUwMDNlIFx1MDAzY3BhZFx1MDAzZSBcdTAwM2N2YWxcdTAwM2VcbiB7XG4tXHRlY2hvIFwiPT0gVGVzdGluZyBzeXNjdGwgYmVoYXZpb3IgYWdhaW5zdCAke1RBUkdFVH0gPT1cIlxuK1x0bG9jYWwgZmlsZT0kMSBwYWQ9JDIgdmFsPSQzIHBcbitcdHByaW50ZiAtdiBwICclKnMnIFwiJHBhZFwiICcnXG4rXHRwcmludGYgJyVzJXMnIFwiJHBcIiBcIiR2YWxcIiB8IGRkIG9mPVwiJGZpbGVcIiAyXHUwMDNlL2Rldi9udWxsXG4rfVxuIFxuLVx0cmM9MFxuK3Rlc3RfaW50X2FycmF5X3dyaXRlcygpXG4re1xuK1x0bG9jYWwgdD1cIiR7U1lTQ1RMfS9pbnRfMDAwM1wiXG4rXHRsb2NhbCBsaW1pdFxuIFxuLVx0ZWNobyAtbiBcIldyaXRpbmcgdGVzdCBmaWxlIC4uLiBcIlxuLVx0ZWNobyBcIiR7VEVTVF9TVFJ9XCIgXHUwMDNlIFwiJHtURVNUX0ZJTEV9XCJcbi1cdGlmICEgdmVyaWZ5IFwiJHtURVNUX0ZJTEV9XCI7IHRoZW5cbi1cdFx0ZWNobyBcIkZBSUxcIiBcdTAwM2VcdTAwMjYyXG4tXHRcdGV4aXQgMVxuLVx0ZWxzZVxuLVx0XHRlY2hvIFwiT0tcIlxuLVx0ZmlcbitcdFtbIC1mIFwiJHRcIiBdXSB8fCB7IFJFVD0kS1NGVF9TS0lQOyByZXR1cm47IH1cbiBcbi1cdGVjaG8gLW4gXCJDaGVja2luZyBzeXNjdGwgaXMgbm90IHNldCB0byB0ZXN0IHZhbHVlIC4uLiBcIlxuLVx0aWYgdmVyaWZ5IFwiJHtUQVJHRVR9XCI7IHRoZW5cbi1cdFx0ZWNobyBcIkZBSUxcIiBcdTAwM2VcdTAwMjYyXG4tXHRcdGV4aXQgMVxuLVx0ZWxzZVxuLVx0XHRlY2hvIFwiT0tcIlxuLVx0ZmlcbitcdHByaW50ZiAnJXMnIFwiNCAzIDIgMVwiIFx1MDAzZSBcIiR0XCJcbitcdGFzc2VydF9jb250ZW50X2xvb3NlIFwiJHRcIiBcIjQgMyAyIDFcIiB8fCBSRVQ9JEtTRlRfRkFJTFxuIFxuLVx0ZWNobyAtbiBcIldyaXRpbmcgc3lzY3RsIGZyb20gc2hlbGwgLi4uIFwiXG4tXHRzZXRfdGVzdFxuLVx0aWYgISB2ZXJpZnkgXCIke1RBUkdFVH1cIjsgdGhlblxuLVx0XHRlY2hvIFwiRkFJTFwiIFx1MDAzZVx1MDAyNjJcbi1cdFx0ZXhpdCAxXG4tXHRlbHNlXG4tXHRcdGVjaG8gXCJPS1wiXG4tXHRmaVxuK1x0IyBTa2lwcGluZyB0cmFpbGluZyBlbGVtZW50cyBsZWF2ZXMgdGhlbSBpbnRhY3RcbitcdHByaW50ZiAnJXMnIFwiMTAwIDEwMVwiIFx1MDAzZSBcIiR0XCJcbitcdGFzc2VydF9jb250ZW50X2xvb3NlIFwiJHRcIiBcIjEwMCAxMDEgMiAxXCIgfHwgUkVUPSRLU0ZUX0ZBSUxcbiBcbi1cdGVjaG8gLW4gXCJSZXNldHRpbmcgc3lzY3RsIHRvIG9yaWdpbmFsIHZhbHVlIC4uLiBcIlxuLVx0c2V0X29yaWdcbi1cdGlmIHZlcmlmeSBcIiR7VEFSR0VUfVwiOyB0aGVuXG4tXHRcdGVjaG8gXCJGQUlMXCIgXHUwMDNlXHUwMDI2MlxuLVx0XHRleGl0IDFcbi1cdGVsc2Vcbi1cdFx0ZWNobyBcIk9LXCJcbi1cdGZpXG4rXHQjIEV2ZW4gZm9yIGFuIGludCBhcnJheSwgYSBzaW5nbGUgd3JpdGUgaXMgc3RpbGwgY2FwcGVkIGF0IE1BWF9ESUdJVFNcbitcdCMgKFBBR0VfU0laRS84KSBieXRlczsgY2hlY2sgcmlnaHQgYXQsIGFuZCBqdXN0IHBhc3QsIHRoYXQgYm91bmRhcnkuXG4rXHQjIENhcnJpZXMgb24gdGhlIHN0YXRlIGZyb20gdGhlIHdyaXRlcyBhYm92ZS5cbitcdGxpbWl0PSQoKE1BWF9ESUdJVFMgLSAxKSlcbitcdHdyaXRlX3BhZGRlZF9kaWdpdHMgXCIkdFwiIFwiJGxpbWl0XCIgXCI5XCJcbitcdGFzc2VydF9jb250ZW50X2xvb3NlIFwiJHRcIiBcIjkgMTAxIDIgMVwiIHx8IFJFVD0kS1NGVF9GQUlMXG4gXG4tXHQjIE5vdyB0aGF0IHdlJ3ZlIHZhbGlkYXRlZCB0aGUgc2FuaXR5IG9mIFwic2V0X3Rlc3RcIiBhbmQgXCJzZXRfb3JpZ1wiLFxuLVx0IyB3ZSBjYW4gdXNlIHRob3NlIGZ1bmN0aW9ucyB0byBzZXQgc3RhcnRpbmcgc3RhdGVzIGJlZm9yZSBydW5uaW5nXG4tXHQjIHNwZWNpZmljIGJlaGF2aW9yYWwgdGVzdHMuXG4rXHRsaW1pdD0kKChNQVhfRElHSVRTKSlcbitcdHdyaXRlX3BhZGRlZF9kaWdpdHMgXCIkdFwiIFwiJGxpbWl0XCIgXCI3XCJcbitcdGFzc2VydF9jb250ZW50X3JlamVjdGVkIFwiJHRcIiBcIjcgMTAxIDIgMVwiIHx8IFJFVD0kS1NGVF9GQUlMXG4rfVxuIFxuLVx0ZWNobyAtbiBcIldyaXRpbmcgZW50aXJlIHN5c2N0bCBpbiBzaW5nbGUgd3JpdGUgLi4uIFwiXG4tXHRzZXRfb3JpZ1xuLVx0ZGQgaWY9XCIke1RFU1RfRklMRX1cIiBvZj1cIiR7VEFSR0VUfVwiIGJzPTQwOTYgMlx1MDAzZS9kZXYvbnVsbFxuLVx0aWYgISB2ZXJpZnkgXCIke1RBUkdFVH1cIjsgdGhlblxuLVx0XHRlY2hvIFwiRkFJTFwiIFx1MDAzZVx1MDAyNjJcbi1cdFx0cmM9MVxuLVx0ZWxzZVxuLVx0XHRlY2hvIFwiT0tcIlxuLVx0Zmlcbit0ZXN0X2ludF9hcnJheV9ub19wYXJ0aWFsX3VwZGF0ZSgpXG4re1xuK1x0bG9jYWwgdD1cIiR7U1lTQ1RMfS9pbnRfMDAwM1wiXG4gXG4tXHRlY2hvIC1uIFwiV3JpdGluZyBtaWRkbGUgb2Ygc3lzY3RsIGFmdGVyIHN5bmNocm9uaXplZCBzZWVrIC4uLiBcIlxuLVx0c2V0X3Rlc3Rcbi1cdGRkIGlmPVwiJHtURVNUX0ZJTEV9XCIgb2Y9XCIke1RBUkdFVH1cIiBicz0xIHNlZWs9MSBza2lwPTEgMlx1MDAzZS9kZXYvbnVsbFxuLVx0aWYgISB2ZXJpZnkgXCIke1RBUkdFVH1cIjsgdGhlblxuLVx0XHRlY2hvIFwiRkFJTFwiIFx1MDAzZVx1MDAyNjJcbi1cdFx0cmM9MVxuLVx0ZWxzZVxuLVx0XHRlY2hvIFwiT0tcIlxuLVx0ZmlcbitcdFtbIC1mIFwiJHRcIiBdXSB8fCB7IFJFVD0kS1NGVF9TS0lQOyByZXR1cm47IH1cbiBcbi1cdGVjaG8gLW4gXCJXcml0aW5nIGJleW9uZCBlbmQgb2Ygc3lzY3RsIC4uLiBcIlxuLVx0c2V0X29yaWdcbi1cdGRkIGlmPVwiJHtURVNUX0ZJTEV9XCIgb2Y9XCIke1RBUkdFVH1cIiBicz0yMCBzZWVrPTIgMlx1MDAzZS9kZXYvbnVsbFxuLVx0aWYgdmVyaWZ5IFwiJHtUQVJHRVR9XCI7IHRoZW5cbi1cdFx0ZWNobyBcIkZBSUxcIiBcdTAwM2VcdTAwMjYyXG4tXHRcdHJjPTFcbi1cdGVsc2Vcbi1cdFx0ZWNobyBcIk9LXCJcbi1cdGZpXG4rXHQjIGJhZCAzcmQgZWxlbWVudCAobm90IGEgbnVtYmVyKVxuK1x0YXNzZXJ0X25vX3BhcnRpYWxfdXBkYXRlIFwiJHRcIiBcIjEgMiAzIDRcIiBcIjEwIDIwIGFiYyA0MFwiIHx8IFJFVD0kS1NGVF9GQUlMXG4gXG4tXHRlY2hvIC1uIFwiV3JpdGluZyBzeXNjdGwgd2l0aCBtdWx0aXBsZSBsb25nIHdyaXRlcyAuLi4gXCJcbi1cdHNldF9vcmlnXG4tXHQocGVybCAtZSAncHJpbnQgXCJBXCIgeCA1MDsnOyBlY2hvIFwiJHtURVNUX1NUUn1cIikgfCBcXFxuLVx0XHRkZCBvZj1cIiR7VEFSR0VUfVwiIGJzPTUwIDJcdTAwM2UvZGV2L251bGxcbi1cdGlmIHZlcmlmeSBcIiR7VEFSR0VUfVwiOyB0aGVuXG4tXHRcdGVjaG8gXCJGQUlMXCIgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRlbHNlXG4tXHRcdGVjaG8gXCJPS1wiXG4tXHRmaVxuLVx0dGVzdF9yY1xuK1x0IyBiYWQgM3JkIGVsZW1lbnQgKG92ZXJmbG93cyBpbnQpXG4rXHRhc3NlcnRfbm9fcGFydGlhbF91cGRhdGUgXCIkdFwiIFwiMSAyIDMgNFwiIFwiMTAgMjAgJCgoSU5UX01BWCArIDEpKSA0MFwiIHx8IFJFVD0kS1NGVF9GQUlMXG4rXG4rXHQjIGJhZCAxc3QgZWxlbWVudFxuK1x0YXNzZXJ0X25vX3BhcnRpYWxfdXBkYXRlIFwiJHRcIiBcIjEgMiAzIDRcIiBcImFiYyAyMCAzMCA0MFwiIHx8IFJFVD0kS1NGVF9GQUlMXG4gfVxuIFxuLWNoZWNrX2ZhaWx1cmUoKVxuKyMgRXhlcmNpc2UgdGhlIHdyaXRlIHBhdHRlcm5zXG4rYXNzZXJ0X3dyaXRlX3BhdHRlcm5zKCkgICMgXHUwMDNjZmlsZVx1MDAzZSBcdTAwM2NiYXNlbGluZVx1MDAzZSBcdTAwM2N2YWxcdTAwM2VcbiB7XG4tXHRlY2hvIC1uIFwiVGVzdGluZyB0aGF0ICQxIGZhaWxzIGFzIGV4cGVjdGVkIC4uLiBcIlxuLVx0cmVzZXRfdmFsc1xuLVx0VEVTVF9TVFI9XCIkMVwiXG4tXHRvcmlnPVwiJChjYXQgJFRBUkdFVClcIlxuLVx0ZWNobyAtbiBcIiRURVNUX1NUUlwiIFx1MDAzZSAkVEFSR0VUIDJcdTAwM2UgL2Rldi9udWxsXG4tXG4tXHQjIHdyaXRlIHNob3VsZCBmYWlsIGFuZCAkVEFSR0VUIHNob3VsZCByZXRhaW4gaXRzIG9yaWdpbmFsIHZhbHVlXG4tXHRpZiBbICQ/ID0gMCBdIHx8IFsgXCIkKGNhdCAkVEFSR0VUKVwiICE9IFwiJG9yaWdcIiBdOyB0aGVuXG4tXHRcdGVjaG8gXCJGQUlMXCIgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRlbHNlXG4tXHRcdGVjaG8gXCJPS1wiXG4tXHRmaVxuLVx0dGVzdF9yY1xuK1x0bG9jYWwgZmlsZT0kMSBiYXNlbGluZT0kMiB2YWw9JDMgc3RhdHVzPTBcbitcbitcdHByaW50ZiAnJXMnIFwiJHZhbFwiIFx1MDAzZSBcIiRmaWxlXCJcbitcdGFzc2VydF9jb250ZW50IFwiJGZpbGVcIiBcIiR2YWxcIiB8fCBzdGF0dXM9MVxuK1x0cHJpbnRmICclcycgXCIkYmFzZWxpbmVcIiBcdTAwM2UgXCIkZmlsZVwiXG4rXHRhc3NlcnRfY29udGVudCBcIiRmaWxlXCIgXCIkYmFzZWxpbmVcIiB8fCBzdGF0dXM9MVxuK1xuK1x0cHJpbnRmICclcycgXCIkYmFzZWxpbmVcIiBcdTAwM2UgXCIkZmlsZVwiXG4rXHR3cml0ZV9pbl9jaHVua3MgXCIkZmlsZVwiIFwiJHZhbFwiIDQwOTZcbitcdGFzc2VydF9jb250ZW50IFwiJGZpbGVcIiBcIiR2YWxcIiB8fCBzdGF0dXM9MVxuK1xuK1x0cHJpbnRmICclcycgXCIkdmFsXCIgXHUwMDNlIFwiJGZpbGVcIlxuK1x0d3JpdGVfYXRfb2Zmc2V0IFwiJGZpbGVcIiBcIiR2YWxcIiAxIDEgMVxuK1x0YXNzZXJ0X2NvbnRlbnQgXCIkZmlsZVwiIFwiJHZhbFwiIHx8IHN0YXR1cz0xXG4rXG4rXHRwcmludGYgJyVzJyBcIiRiYXNlbGluZVwiIFx1MDAzZSBcIiRmaWxlXCJcbitcdHdyaXRlX2F0X29mZnNldCBcIiRmaWxlXCIgXCIkdmFsXCIgMjAgMlxuK1x0YXNzZXJ0X2NvbnRlbnRfcmVqZWN0ZWQgXCIkZmlsZVwiIFwiJHZhbFwiIHx8IHN0YXR1cz0xXG4rXG4rXHRwcmludGYgJyVzJyBcIiRiYXNlbGluZVwiIFx1MDAzZSBcIiRmaWxlXCJcbitcdHdyaXRlX292ZXJsb25nIFwiJGZpbGVcIiA1MCBcIiR2YWxcIlxuK1x0YXNzZXJ0X2NvbnRlbnRfcmVqZWN0ZWQgXCIkZmlsZVwiIFwiJHZhbFwiIHx8IHN0YXR1cz0xXG4rXG4rXHRyZXR1cm4gXCIkc3RhdHVzXCJcbiB9XG4gXG4tcnVuX3dpZGVpbnRfdGVzdHMoKVxuKyMgTm9uZSBvZiB0aGVzZSBmaXQgaW4gMzIgYml0cywgc28gd3JpdGluZyB0aGVtIHRvIGFuIGludC91aW50IHN5c2N0bCBtdXN0IGZhaWxcbithc3NlcnRfd2lkZWludF93cml0ZXNfcmVqZWN0ZWQoKSAgIyBcdTAwM2NmaWxlXHUwMDNlIFx1MDAzY2Jhc2VsaW5lXHUwMDNlXG4ge1xuLVx0IyBzeXNjdGwgY29udmVyc2lvbiBmdW5jdGlvbnMgcmVjZWl2ZSBhIGJvb2xlYW4gc2lnbiBhbmQgdWxvbmdcbi1cdCMgbWFnbml0dWRlOyBoZXJlIHdlIGxpc3QgdGhlIG1hZ25pdHVkZXMgd2Ugd2FudCB0byB0ZXN0IChlYWNoIG9mXG4tXHQjIHdoaWNoIHdpbGwgYmUgdGVzdGVkIGluIGJvdGggcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIGZvcm1zKS4gIFNpbmNlXG4tXHQjIG5vbmUgb2YgdGhlc2UgdmFsdWVzIGZpdCBpbiAzMiBiaXRzLCB3cml0aW5nIHRoZW0gdG8gYW4gaW50LSBvclxuLVx0IyB1aW50LXR5cGVkIHN5c2N0bCBzaG91bGQgZmFpbC5cbitcdGxvY2FsIGZpbGU9JDEgYmFzZWxpbmU9JDIgc2lnbiBtYWcgc3RhdHVzPTBcbiBcdGxvY2FsIG1hZ25pdHVkZXM9KFxuLVx0XHQjIGNvbW1vbiBib3VuZGFyeS1jb25kaXRpb24gdmFsdWVzICh6ZXJvLCArMSwgLTEsIElOVF9NSU4sXG4tXHRcdCMgYW5kIElOVF9NQVggcmVzcGVjdGl2ZWx5KSBpZiB0cnVuY2F0ZWQgdG8gbG93ZXIgMzIgYml0c1xuLVx0XHQjIChwb3RlbnRpYWwgZm9yIGJlaW5nIGZhbHNlbHkgZGVlbWVkIGluIHJhbmdlKVxuIFx0XHQweDAwMDAwMDAxMDAwMDAwMDBcbiBcdFx0MHgwMDAwMDAwMTAwMDAwMDAxXG4gXHRcdDB4MDAwMDAwMDFmZmZmZmZmZlxuIFx0XHQweDAwMDAwMDAxODAwMDAwMDBcbiBcdFx0MHgwMDAwMDAwMTdmZmZmZmZmXG4tXG4tXHRcdCMgdGhlc2UgbG9vayBsaWtlIG5lZ2F0aXZlcywgYnV0IHdpdGhvdXQgYSBsZWFkaW5nICctJyBhcmVcbi1cdFx0IyBhY3R1YWxseSBsYXJnZSBwb3NpdGl2ZXMgKHNob3VsZCBiZSByZWplY3RlZCBhcyBhYm92ZVxuLVx0XHQjIGRlc3BpdGUgYmVpbmcgemVyby8rMS8tMS9JTlRfTUlOL0lOVF9NQVggaW4gdGhlIGxvd2VyIDMyKVxuIFx0XHQweGZmZmZmZmZmMDAwMDAwMDBcbiBcdFx0MHhmZmZmZmZmZjAwMDAwMDAxXG4gXHRcdDB4ZmZmZmZmZmZmZmZmZmZmZlxuQEAgLTM2Nyw3OTMgKzI0NCw1MTUgQEAgcnVuX3dpZGVpbnRfdGVzdHMoKVxuIFxuIFx0Zm9yIHNpZ24gaW4gJycgJy0nOyBkb1xuIFx0XHRmb3IgbWFnIGluIFwiJHttYWduaXR1ZGVzW0BdfVwiOyBkb1xuLVx0XHRcdGNoZWNrX2ZhaWx1cmUgXCIke3NpZ259JHttYWd9XCJcbitcdFx0XHRhc3NlcnRfbm9fcGFydGlhbF91cGRhdGUgXCIkZmlsZVwiIFwiJGJhc2VsaW5lXCIgXCIke3NpZ259JHttYWd9XCIgfHwgc3RhdHVzPTFcbiBcdFx0ZG9uZVxuIFx0ZG9uZVxuK1x0cmV0dXJuIFwiJHN0YXR1c1wiXG4gfVxuIFxuLSMgWW91ciB0ZXN0IG11c3QgYWNjZXB0IGRpZ2l0cyAzIGFuZCA0IHRvIHVzZSB0aGlzXG4tcnVuX2xpbWl0X2RpZ2l0KClcbisjIEEgc2luZ2xlIHdyaXRlIGlzIGNhcHBlZCBhdCBNQVhfRElHSVRTIChQQUdFX1NJWkUvOCkgYnl0ZXM7IGNoZWNrIHRoYXRcbisjIGxlYWRpbmcgd2hpdGVzcGFjZSB1cCB0byB0aGF0IGxpbWl0IGlzIGlnbm9yZWQsIGFuZCB0aGF0IFBBR0VfU0laRSBvZlxuKyMgbGVhZGluZyB3aGl0ZXNwYWNlIHB1c2hlcyB0aGUgdmFsdWUgcGFzdCB0aGUgbGltaXQgYW5kIGZhaWxzLlxuK2Fzc2VydF9kaWdpdF9saW1pdCgpICAjIFx1MDAzY2ZpbGVcdTAwM2UgXHUwMDNjYmFzZWxpbmVcdTAwM2VcbiB7XG4tXHRlY2hvIC1uIFwiQ2hlY2tpbmcgaWdub3Jpbmcgc3BhY2VzIHVwIHRvIFBBR0VfU0laRSB3b3JrcyBvbiB3cml0ZSAuLi4gXCJcbi1cdHJlc2V0X3ZhbHNcbi1cbi1cdExJTUlUPSQoKE1BWF9ESUdJVFMgLTEpKVxuLVx0VEVTVF9TVFI9XCIzXCJcbi1cdChwZXJsIC1lICdwcmludCBcIiBcIiB4ICckTElNSVQnOyc7IGVjaG8gXCIke1RFU1RfU1RSfVwiKSB8IFxcXG4tXHRcdGRkIG9mPVwiJHtUQVJHRVR9XCIgMlx1MDAzZS9kZXYvbnVsbFxuLVxuLVx0aWYgISB2ZXJpZnkgXCIke1RBUkdFVH1cIjsgdGhlblxuLVx0XHRlY2hvIFwiRkFJTFwiIFx1MDAzZVx1MDAyNjJcbi1cdFx0cmM9MVxuLVx0ZWxzZVxuLVx0XHRlY2hvIFwiT0tcIlxuLVx0Zmlcbi1cdHRlc3RfcmNcbitcdGxvY2FsIGZpbGU9JDEgYmFzZWxpbmU9JDIgc3RhdHVzPTBcbiBcbi1cdGVjaG8gLW4gXCJDaGVja2luZyBwYXNzaW5nIFBBR0VfU0laRSBvZiBzcGFjZXMgZmFpbHMgb24gd3JpdGUgLi4uIFwiXG4tXHRyZXNldF92YWxzXG4rXHRwcmludGYgJyVzJyBcIiRiYXNlbGluZVwiIFx1MDAzZSBcIiRmaWxlXCJcbitcdHdyaXRlX3BhZGRlZF9kaWdpdHMgXCIkZmlsZVwiIFwiJCgoTUFYX0RJR0lUUyAtIDEpKVwiIFwiM1wiXG4rXHRhc3NlcnRfY29udGVudCBcIiRmaWxlXCIgXCIzXCIgfHwgc3RhdHVzPTFcbiBcbi1cdExJTUlUPSQoKE1BWF9ESUdJVFMpKVxuLVx0VEVTVF9TVFI9XCI0XCJcbi1cdChwZXJsIC1lICdwcmludCBcIiBcIiB4ICckTElNSVQnOyc7IGVjaG8gXCIke1RFU1RfU1RSfVwiKSB8IFxcXG4tXHRcdGRkIG9mPVwiJHtUQVJHRVR9XCIgMlx1MDAzZS9kZXYvbnVsbFxuK1x0cHJpbnRmICclcycgXCIkYmFzZWxpbmVcIiBcdTAwM2UgXCIkZmlsZVwiXG4rXHR3cml0ZV9wYWRkZWRfZGlnaXRzIFwiJGZpbGVcIiBcIiRNQVhfRElHSVRTXCIgXCI0XCJcbitcdGFzc2VydF9jb250ZW50X3JlamVjdGVkIFwiJGZpbGVcIiBcIjRcIiB8fCBzdGF0dXM9MVxuIFxuLVx0aWYgdmVyaWZ5IFwiJHtUQVJHRVR9XCI7IHRoZW5cbi1cdFx0ZWNobyBcIkZBSUxcIiBcdTAwM2VcdTAwMjYyXG4tXHRcdHJjPTFcbi1cdGVsc2Vcbi1cdFx0ZWNobyBcIk9LXCJcbi1cdGZpXG4tXHR0ZXN0X3JjXG4rXHRyZXR1cm4gXCIkc3RhdHVzXCJcbiB9XG4gXG4tIyBZb3UgYXJlIHVzaW5nIGFuIGludFxuLXJ1bl9saW1pdF9kaWdpdF9pbnQoKVxuKyMgcHJvY19kb2ludHZlYygpLXNwZWNpZmljIHJhbmdlIGNoZWNrczogSU5UX01BWCBtdXN0IGJlIGFjY2VwdGVkLCBJTlRfTUFYKzFcbisjIG11c3QgYmUgcmVqZWN0ZWQsIGFuZCBuZWdhdGl2ZSB2YWx1ZXMgbXVzdCBiZSBhY2NlcHRlZC5cbithc3NlcnRfaW50X3JhbmdlKCkgICMgXHUwMDNjZmlsZVx1MDAzZSBcdTAwM2NiYXNlbGluZVx1MDAzZVxuIHtcbi1cdGVjaG8gLW4gXCJUZXN0aW5nIElOVF9NQVggd29ya3MgLi4uIFwiXG4tXHRyZXNldF92YWxzXG4tXHRURVNUX1NUUj1cIiRJTlRfTUFYXCJcbi1cdGVjaG8gLW4gJFRFU1RfU1RSIFx1MDAzZSAkVEFSR0VUXG4tXG4tXHRpZiAhIHZlcmlmeSBcIiR7VEFSR0VUfVwiOyB0aGVuXG4tXHRcdGVjaG8gXCJGQUlMXCIgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRlbHNlXG4tXHRcdGVjaG8gXCJPS1wiXG4tXHRmaVxuLVx0dGVzdF9yY1xuK1x0bG9jYWwgZmlsZT0kMSBiYXNlbGluZT0kMiBzdGF0dXM9MFxuIFxuLVx0ZWNobyAtbiBcIlRlc3RpbmcgSU5UX01BWCArIDEgd2lsbCBmYWlsIGFzIGV4cGVjdGVkIC4uLiBcIlxuLVx0cmVzZXRfdmFsc1xuLVx0bGV0IFRFU1RfU1RSPSRJTlRfTUFYKzFcbi1cdGVjaG8gLW4gJFRFU1RfU1RSIFx1MDAzZSAkVEFSR0VUIDJcdTAwM2UgL2Rldi9udWxsXG4rXHRwcmludGYgJyVzJyBcIiRiYXNlbGluZVwiIFx1MDAzZSBcIiRmaWxlXCJcbitcdHByaW50ZiAnJXMnIFwiJElOVF9NQVhcIiBcdTAwM2UgXCIkZmlsZVwiXG4rXHRhc3NlcnRfY29udGVudCBcIiRmaWxlXCIgXCIkSU5UX01BWFwiIHx8IHN0YXR1cz0xXG4gXG4tXHRpZiB2ZXJpZnkgXCIke1RBUkdFVH1cIjsgdGhlblxuLVx0XHRlY2hvIFwiRkFJTFwiIFx1MDAzZVx1MDAyNjJcbi1cdFx0cmM9MVxuLVx0ZWxzZVxuLVx0XHRlY2hvIFwiT0tcIlxuLVx0Zmlcbi1cdHRlc3RfcmNcbi1cbi1cdGVjaG8gLW4gXCJUZXN0aW5nIG5lZ2F0aXZlIHZhbHVlcyB3aWxsIHdvcmsgYXMgZXhwZWN0ZWQgLi4uIFwiXG4tXHRyZXNldF92YWxzXG4tXHRURVNUX1NUUj1cIi0zXCJcbi1cdGVjaG8gLW4gJFRFU1RfU1RSIFx1MDAzZSAkVEFSR0VUIDJcdTAwM2UgL2Rldi9udWxsXG4tXHRpZiAhIHZlcmlmeSBcIiR7VEFSR0VUfVwiOyB0aGVuXG4tXHRcdGVjaG8gXCJGQUlMXCIgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRlbHNlXG4tXHRcdGVjaG8gXCJPS1wiXG4tXHRmaVxuLVx0dGVzdF9yY1xuLX1cbitcdGFzc2VydF9ub19wYXJ0aWFsX3VwZGF0ZSBcIiRmaWxlXCIgXCIkYmFzZWxpbmVcIiBcIiQoKElOVF9NQVggKyAxKSlcIiB8fCBzdGF0dXM9MVxuIFxuLSMgWW91IHVzZWQgYW4gaW50IGFycmF5XG4tcnVuX2xpbWl0X2RpZ2l0X2ludF9hcnJheSgpXG4te1xuLVx0ZWNobyAtbiBcIlRlc3RpbmcgYXJyYXkgd29ya3MgYXMgZXhwZWN0ZWQgLi4uIFwiXG4tXHRURVNUX1NUUj1cIjQgMyAyIDFcIlxuLVx0ZWNobyAtbiAkVEVTVF9TVFIgXHUwMDNlICRUQVJHRVRcbitcdHByaW50ZiAnJXMnIFwiJGJhc2VsaW5lXCIgXHUwMDNlIFwiJGZpbGVcIlxuK1x0cHJpbnRmICclcycgXCItM1wiIFx1MDAzZSBcIiRmaWxlXCIgMlx1MDAzZS9kZXYvbnVsbFxuK1x0YXNzZXJ0X2NvbnRlbnQgXCIkZmlsZVwiIFwiLTNcIiB8fCBzdGF0dXM9MVxuIFxuLVx0aWYgISB2ZXJpZnlfZGlmZl93IFwiJHtUQVJHRVR9XCI7IHRoZW5cbi1cdFx0ZWNobyBcIkZBSUxcIiBcdTAwM2VcdTAwMjYyXG4tXHRcdHJjPTFcbi1cdGVsc2Vcbi1cdFx0ZWNobyBcIk9LXCJcbi1cdGZpXG4tXHR0ZXN0X3JjXG4tXG4tXHRlY2hvIC1uIFwiVGVzdGluZyBza2lwcGluZyB0cmFpbGluZyBhcnJheSBlbGVtZW50cyB3b3JrcyAuLi4gXCJcbi1cdCMgRG8gbm90IHJlc2V0X3ZhbHMsIGNhcnJ5IG9uIHRoZSB2YWx1ZXMgZnJvbSB0aGUgbGFzdCB0ZXN0LlxuLVx0IyBJZiB3ZSBvbmx5IGVjaG8gaW4gdHdvIGRpZ2l0cyB0aGUgbGFzdCB0d28gYXJlIGxlZnQgaW50YWN0XG4tXHRURVNUX1NUUj1cIjEwMCAxMDFcIlxuLVx0ZWNobyAtbiAkVEVTVF9TVFIgXHUwMDNlICRUQVJHRVRcbi1cdCMgQWZ0ZXIgd2UgZWNobyBpbiwgdG8gaGVscCBkaWZmIHdlIG5lZWQgdG8gc2V0IG9uIFRFU1RfU1RSIHdoYXRcbi1cdCMgd2UgZXhwZWN0IHRoZSByZXN1bHQgdG8gYmUuXG4tXHRURVNUX1NUUj1cIjEwMCAxMDEgMiAxXCJcbi1cbi1cdGlmICEgdmVyaWZ5X2RpZmZfdyBcIiR7VEFSR0VUfVwiOyB0aGVuXG4tXHRcdGVjaG8gXCJGQUlMXCIgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRlbHNlXG4tXHRcdGVjaG8gXCJPS1wiXG4tXHRmaVxuLVx0dGVzdF9yY1xuLVxuLVx0ZWNobyAtbiBcIlRlc3RpbmcgUEFHRV9TSVpFIGxpbWl0IG9uIGFycmF5IHdvcmtzIC4uLiBcIlxuLVx0IyBEbyBub3QgcmVzZXRfdmFscywgY2Fycnkgb24gdGhlIHZhbHVlcyBmcm9tIHRoZSBsYXN0IHRlc3QuXG4tXHQjIEV2ZW4gaWYgeW91IHVzZSBhbiBpbnQgYXJyYXksIHlvdSBhcmUgc3RpbGwgcmVzdHJpY3RlZCB0b1xuLVx0IyBNQVhfRElHSVRTLCB0aGlzIGlzIGEga25vd24gbGltaXRhdGlvbi4gVGVzdCBsaW1pdCB3b3Jrcy5cbi1cdExJTUlUPSQoKE1BWF9ESUdJVFMgLTEpKVxuLVx0VEVTVF9TVFI9XCI5XCJcbi1cdChwZXJsIC1lICdwcmludCBcIiBcIiB4ICckTElNSVQnOyc7IGVjaG8gXCIke1RFU1RfU1RSfVwiKSB8IFxcXG4tXHRcdGRkIG9mPVwiJHtUQVJHRVR9XCIgMlx1MDAzZS9kZXYvbnVsbFxuLVxuLVx0VEVTVF9TVFI9XCI5IDEwMSAyIDFcIlxuLVx0aWYgISB2ZXJpZnlfZGlmZl93IFwiJHtUQVJHRVR9XCI7IHRoZW5cbi1cdFx0ZWNobyBcIkZBSUxcIiBcdTAwM2VcdTAwMjYyXG4tXHRcdHJjPTFcbi1cdGVsc2Vcbi1cdFx0ZWNobyBcIk9LXCJcbi1cdGZpXG4tXHR0ZXN0X3JjXG4tXG4tXHRlY2hvIC1uIFwiVGVzdGluZyBleGNlZWRpbmcgUEFHRV9TSVpFIGxpbWl0IGZhaWxzIGFzIGV4cGVjdGVkIC4uLiBcIlxuLVx0IyBEbyBub3QgcmVzZXRfdmFscywgY2Fycnkgb24gdGhlIHZhbHVlcyBmcm9tIHRoZSBsYXN0IHRlc3QuXG4tXHQjIE5vdyBnbyBvdmVyIGxpbWl0LlxuLVx0TElNSVQ9JCgoTUFYX0RJR0lUUykpXG4tXHRURVNUX1NUUj1cIjdcIlxuLVx0KHBlcmwgLWUgJ3ByaW50IFwiIFwiIHggJyRMSU1JVCc7JzsgZWNobyBcIiR7VEVTVF9TVFJ9XCIpIHwgXFxcbi1cdFx0ZGQgb2Y9XCIke1RBUkdFVH1cIiAyXHUwMDNlL2Rldi9udWxsXG4tXG4tXHRURVNUX1NUUj1cIjcgMTAxIDIgMVwiXG4tXHRpZiB2ZXJpZnlfZGlmZl93IFwiJHtUQVJHRVR9XCI7IHRoZW5cbi1cdFx0ZWNobyBcIkZBSUxcIiBcdTAwM2VcdTAwMjYyXG4tXHRcdHJjPTFcbi1cdGVsc2Vcbi1cdFx0ZWNobyBcIk9LXCJcbi1cdGZpXG4tXHR0ZXN0X3JjXG4rXHRyZXR1cm4gXCIkc3RhdHVzXCJcbiB9XG4gXG4tIyBZb3UgdXNlZCBhbiBpbnQgYXJyYXkgYW5kIG9uZSBvZiB0aGUgZWxlbWVudHMgaXMgbm90IGFjY2VwdGFibGVcbi1ydW5faW50X2FycmF5X25vX3BhcnRpYWxfdXBkYXRlKClcbisjIHByb2NfZG91aW50dmVjKCktc3BlY2lmaWMgcmFuZ2UgY2hlY2tzOiBVSU5UX01BWCBtdXN0IGJlIGFjY2VwdGVkLFxuKyMgVUlOVF9NQVgrMSBtdXN0IGJlIHJlamVjdGVkLCBhbmQgbmVnYXRpdmUgdmFsdWVzIG11c3QgYmUgcmVqZWN0ZWQgdG9vLlxuK2Fzc2VydF91aW50X3JhbmdlKCkgICMgXHUwMDNjZmlsZVx1MDAzZSBcdTAwM2NiYXNlbGluZVx1MDAzZVxuIHtcbi1cdGVjaG8gLW4gXCJUZXN0aW5nIGludmFsaWQgYXJyYXkgZWxlbWVudCBkb2VzIG5vdCBwYXJ0aWFsbHkgdXBkYXRlIC4uLiBcIlxuLVx0IyBFeHBlY3QgZmFpbHVyZSBiZWNhdXNlIG9mIDNyZCBlbGVtZW50IChhYmMpLlxuLVx0aWYgISB2ZXJpZnlfbm9fcGFydGlhbF91cGRhdGUgXCIxIDIgMyA0XCIgXCIxMCAyMCBhYmMgNDBcIjsgdGhlblxuLVx0XHRlY2hvIFwiRkFJTFwiIFx1MDAzZVx1MDAyNjJcbi1cdFx0cmM9MVxuLVx0ZWxzZVxuLVx0XHRlY2hvIFwiT0tcIlxuLVx0Zmlcbi1cdHRlc3RfcmNcbitcdGxvY2FsIGZpbGU9JDEgYmFzZWxpbmU9JDIgc3RhdHVzPTBcbiBcbi1cdGVjaG8gLW4gXCJUZXN0aW5nIG91dCBvZiByYW5nZSBhcnJheSBlbGVtZW50IGRvZXMgbm90IHBhcnRpYWxseSB1cGRhdGUgLi4uIFwiXG4tXHQjIEV4cGVjdCBmYWlsdXJlIGJlY2F1c2Ugb2YgM3JkIGVsZW1lbnQgKGdyZWF0ZXIgdGhhbiBpbnQpXG4tXHRpZiAhIHZlcmlmeV9ub19wYXJ0aWFsX3VwZGF0ZSBcIjEgMiAzIDRcIiBcIjEwIDIwICQoKElOVF9NQVggKyAxKSkgNDBcIjsgdGhlblxuLVx0XHRlY2hvIFwiRkFJTFwiIFx1MDAzZVx1MDAyNjJcbi1cdFx0cmM9MVxuLVx0ZWxzZVxuLVx0XHRlY2hvIFwiT0tcIlxuLVx0Zmlcbi1cdHRlc3RfcmNcbitcdHByaW50ZiAnJXMnIFwiJGJhc2VsaW5lXCIgXHUwMDNlIFwiJGZpbGVcIlxuK1x0cHJpbnRmICclcycgXCIkVUlOVF9NQVhcIiBcdTAwM2UgXCIkZmlsZVwiXG4rXHRhc3NlcnRfY29udGVudCBcIiRmaWxlXCIgXCIkVUlOVF9NQVhcIiB8fCBzdGF0dXM9MVxuIFxuLVx0ZWNobyAtbiBcIlRlc3RpbmcgaW52YWxpZCBmaXJzdCBhcnJheSBlbGVtZW50IGRvZXMgbm90IHVwZGF0ZSAuLi4gXCJcbi1cdCMgRXhwZWN0IGZhaWx1cmUgb2YgMXN0IGVsZW1lbnRcbi1cdGlmICEgdmVyaWZ5X25vX3BhcnRpYWxfdXBkYXRlIFwiMSAyIDMgNFwiIFwiYWJjIDIwIDMwIDQwXCI7IHRoZW5cbi1cdFx0ZWNobyBcIkZBSUxcIiBcdTAwM2VcdTAwMjYyXG4tXHRcdHJjPTFcbi1cdGVsc2Vcbi1cdFx0ZWNobyBcIk9LXCJcbi1cdGZpXG4tXHR0ZXN0X3JjXG4rXHRhc3NlcnRfbm9fcGFydGlhbF91cGRhdGUgXCIkZmlsZVwiIFwiJGJhc2VsaW5lXCIgXCIkKChVSU5UX01BWCArIDEpKVwiIHx8IHN0YXR1cz0xXG4rXHRhc3NlcnRfbm9fcGFydGlhbF91cGRhdGUgXCIkZmlsZVwiIFwiJGJhc2VsaW5lXCIgXCItM1wiIHx8IHN0YXR1cz0xXG4rXG4rXHRyZXR1cm4gXCIkc3RhdHVzXCJcbiB9XG4gXG4tIyBZb3UgYXJlIHVzaW5nIGFuIHVuc2lnbmVkIGludFxuLXJ1bl9saW1pdF9kaWdpdF91aW50KClcbit0ZXN0X2ludF9taW5tYXgoKVxuIHtcbi1cdGVjaG8gLW4gXCJUZXN0aW5nIFVJTlRfTUFYIHdvcmtzIC4uLiBcIlxuLVx0cmVzZXRfdmFsc1xuLVx0VEVTVF9TVFI9XCIkVUlOVF9NQVhcIlxuLVx0ZWNobyAtbiAkVEVTVF9TVFIgXHUwMDNlICRUQVJHRVRcbi1cbi1cdGlmICEgdmVyaWZ5IFwiJHtUQVJHRVR9XCI7IHRoZW5cbi1cdFx0ZWNobyBcIkZBSUxcIiBcdTAwM2VcdTAwMjYyXG4tXHRcdHJjPTFcbi1cdGVsc2Vcbi1cdFx0ZWNobyBcIk9LXCJcbi1cdGZpXG4tXHR0ZXN0X3JjXG4tXG4tXHRlY2hvIC1uIFwiVGVzdGluZyBVSU5UX01BWCArIDEgd2lsbCBmYWlsIGFzIGV4cGVjdGVkIC4uLiBcIlxuLVx0cmVzZXRfdmFsc1xuLVx0VEVTVF9TVFI9JCgoJFVJTlRfTUFYKzEpKVxuLVx0ZWNobyAtbiAkVEVTVF9TVFIgXHUwMDNlICRUQVJHRVQgMlx1MDAzZSAvZGV2L251bGxcbitcdGxvY2FsIHQ9XCIke1NZU0NUTH0vaW50XzAwMDFcIlxuK1x0bG9jYWwgYmFzZWxpbmU9XCI2MFwiIHZhbD1cIjYxXCJcbiBcbi1cdGlmIHZlcmlmeSBcIiR7VEFSR0VUfVwiOyB0aGVuXG4tXHRcdGVjaG8gXCJGQUlMXCIgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRlbHNlXG4tXHRcdGVjaG8gXCJPS1wiXG4tXHRmaVxuLVx0dGVzdF9yY1xuK1x0W1sgLWYgXCIkdFwiIF1dIHx8IHsgUkVUPSRLU0ZUX1NLSVA7IHJldHVybjsgfVxuIFxuLVx0ZWNobyAtbiBcIlRlc3RpbmcgbmVnYXRpdmUgdmFsdWVzIHdpbGwgbm90IHdvcmsgYXMgZXhwZWN0ZWQgLi4uIFwiXG4tXHRyZXNldF92YWxzXG4tXHRURVNUX1NUUj1cIi0zXCJcbi1cdGVjaG8gLW4gJFRFU1RfU1RSIFx1MDAzZSAkVEFSR0VUIDJcdTAwM2UgL2Rldi9udWxsXG4tXG4tXHRpZiB2ZXJpZnkgXCIke1RBUkdFVH1cIjsgdGhlblxuLVx0XHRlY2hvIFwiRkFJTFwiIFx1MDAzZVx1MDAyNjJcbi1cdFx0cmM9MVxuLVx0ZWxzZVxuLVx0XHRlY2hvIFwiT0tcIlxuLVx0Zmlcbi1cdHRlc3RfcmNcbitcdGFzc2VydF93cml0ZV9wYXR0ZXJucyBcIiR0XCIgXCIkYmFzZWxpbmVcIiBcIiR2YWxcIiB8fCBSRVQ9JEtTRlRfRkFJTFxuK1x0YXNzZXJ0X3dpZGVpbnRfd3JpdGVzX3JlamVjdGVkIFwiJHRcIiBcIiRiYXNlbGluZVwiIHx8IFJFVD0kS1NGVF9GQUlMXG4rXHRhc3NlcnRfZGlnaXRfbGltaXQgXCIkdFwiIFwiJGJhc2VsaW5lXCIgfHwgUkVUPSRLU0ZUX0ZBSUxcbiB9XG4gXG4tcnVuX3N0cmluZ3Rlc3RzKClcbit0ZXN0X2ludF9wbGFpbigpXG4ge1xuLVx0ZWNobyAtbiBcIldyaXRpbmcgZW50aXJlIHN5c2N0bCBpbiBzaG9ydCB3cml0ZXMgLi4uIFwiXG4tXHRzZXRfb3JpZ1xuLVx0ZGQgaWY9XCIke1RFU1RfRklMRX1cIiBvZj1cIiR7VEFSR0VUfVwiIGJzPTEgMlx1MDAzZS9kZXYvbnVsbFxuLVx0aWYgISB2ZXJpZnkgXCIke1RBUkdFVH1cIjsgdGhlblxuLVx0XHRlY2hvIFwiRkFJTFwiIFx1MDAzZVx1MDAyNjJcbi1cdFx0cmM9MVxuLVx0ZWxzZVxuLVx0XHRlY2hvIFwiT0tcIlxuLVx0ZmlcbitcdGxvY2FsIHQ9XCIke1NZU0NUTH0vaW50XzAwMDJcIlxuK1x0bG9jYWwgYmFzZWxpbmU9XCIxXCIgdmFsPVwiMlwiXG4gXG4tXHRlY2hvIC1uIFwiV3JpdGluZyBtaWRkbGUgb2Ygc3lzY3RsIGFmdGVyIHVuc3luY2hyb25pemVkIHNlZWsgLi4uIFwiXG4tXHRzZXRfdGVzdFxuLVx0ZGQgaWY9XCIke1RFU1RfRklMRX1cIiBvZj1cIiR7VEFSR0VUfVwiIGJzPTEgc2Vlaz0xIDJcdTAwM2UvZGV2L251bGxcbi1cdGlmIHZlcmlmeSBcIiR7VEFSR0VUfVwiOyB0aGVuXG4tXHRcdGVjaG8gXCJGQUlMXCIgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRlbHNlXG4tXHRcdGVjaG8gXCJPS1wiXG4tXHRmaVxuK1x0W1sgLWYgXCIkdFwiIF1dIHx8IHsgUkVUPSRLU0ZUX1NLSVA7IHJldHVybjsgfVxuIFxuLVx0ZWNobyAtbiBcIkNoZWNraW5nIHN5c2N0bCBtYXhsZW4gaXMgYXQgbGVhc3QgJE1BWExFTiAuLi4gXCJcbi1cdHNldF9vcmlnXG4tXHRwZXJsIC1lICdwcmludCBcIkFcIiB4ICgnXCIke01BWExFTn1cIictMiksIFwiQlwiOycgfCBcXFxuLVx0XHRkZCBvZj1cIiR7VEFSR0VUfVwiIGJzPVwiJHtNQVhMRU59XCIgMlx1MDAzZS9kZXYvbnVsbFxuLVx0aWYgISBncmVwIC1xIEIgXCIke1RBUkdFVH1cIjsgdGhlblxuLVx0XHRlY2hvIFwiRkFJTFwiIFx1MDAzZVx1MDAyNjJcbi1cdFx0cmM9MVxuLVx0ZWxzZVxuLVx0XHRlY2hvIFwiT0tcIlxuLVx0Zmlcbi1cbi1cdGVjaG8gLW4gXCJDaGVja2luZyBzeXNjdGwga2VlcHMgb3JpZ2luYWwgc3RyaW5nIG9uIG92ZXJmbG93IGFwcGVuZCAuLi4gXCJcbi1cdHNldF9vcmlnXG4tXHRwZXJsIC1lICdwcmludCBcIkFcIiB4ICgnXCIke01BWExFTn1cIictMSksIFwiQlwiOycgfCBcXFxuLVx0XHRkZCBvZj1cIiR7VEFSR0VUfVwiIGJzPSQoKCBNQVhMRU4gLSAxICkpIDJcdTAwM2UvZGV2L251bGxcbi1cdGlmIGdyZXAgLXEgQiBcIiR7VEFSR0VUfVwiOyB0aGVuXG4tXHRcdGVjaG8gXCJGQUlMXCIgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRlbHNlXG4tXHRcdGVjaG8gXCJPS1wiXG4tXHRmaVxuLVxuLVx0ZWNobyAtbiBcIkNoZWNraW5nIHN5c2N0bCBzdGF5cyBOVUxMIHRlcm1pbmF0ZWQgb24gd3JpdGUgLi4uIFwiXG4tXHRzZXRfb3JpZ1xuLVx0cGVybCAtZSAncHJpbnQgXCJBXCIgeCAoJ1wiJHtNQVhMRU59XCInLTEpLCBcIkJcIjsnIHwgXFxcbi1cdFx0ZGQgb2Y9XCIke1RBUkdFVH1cIiBicz1cIiR7TUFYTEVOfVwiIDJcdTAwM2UvZGV2L251bGxcbi1cdGlmIGdyZXAgLXEgQiBcIiR7VEFSR0VUfVwiOyB0aGVuXG4tXHRcdGVjaG8gXCJGQUlMXCIgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRlbHNlXG4tXHRcdGVjaG8gXCJPS1wiXG4tXHRmaVxuLVxuLVx0ZWNobyAtbiBcIkNoZWNraW5nIHN5c2N0bCBzdGF5cyBOVUxMIHRlcm1pbmF0ZWQgb24gb3ZlcndyaXRlIC4uLiBcIlxuLVx0c2V0X29yaWdcbi1cdHBlcmwgLWUgJ3ByaW50IFwiQVwiIHggKCdcIiR7TUFYTEVOfVwiJy0xKSwgXCJCQlwiOycgfCBcXFxuLVx0XHRkZCBvZj1cIiR7VEFSR0VUfVwiIGJzPSQoKCAkTUFYTEVOICsgMSApKSAyXHUwMDNlL2Rldi9udWxsXG4tXHRpZiBncmVwIC1xIEIgXCIke1RBUkdFVH1cIjsgdGhlblxuLVx0XHRlY2hvIFwiRkFJTFwiIFx1MDAzZVx1MDAyNjJcbi1cdFx0cmM9MVxuLVx0ZWxzZVxuLVx0XHRlY2hvIFwiT0tcIlxuLVx0Zmlcbi1cbi1cdHRlc3RfcmNcbitcdGFzc2VydF93cml0ZV9wYXR0ZXJucyBcIiR0XCIgXCIkYmFzZWxpbmVcIiBcIiR2YWxcIiB8fCBSRVQ9JEtTRlRfRkFJTFxuK1x0YXNzZXJ0X3dpZGVpbnRfd3JpdGVzX3JlamVjdGVkIFwiJHRcIiBcIiRiYXNlbGluZVwiIHx8IFJFVD0kS1NGVF9GQUlMXG4rXHRhc3NlcnRfZGlnaXRfbGltaXQgXCIkdFwiIFwiJGJhc2VsaW5lXCIgfHwgUkVUPSRLU0ZUX0ZBSUxcbitcdGFzc2VydF9pbnRfcmFuZ2UgXCIkdFwiIFwiJGJhc2VsaW5lXCIgfHwgUkVUPSRLU0ZUX0ZBSUxcbiB9XG4gXG4tdGFyZ2V0X2V4aXN0cygpXG4rdGVzdF91aW50X3BsYWluKClcbiB7XG4tXHRUQVJHRVQ9XCIke1NZU0NUTH0vJDFcIlxuLVx0VEVTVF9JRD1cIiQyXCJcbitcdGxvY2FsIHQ9XCIke1NZU0NUTH0vdWludF8wMDAxXCJcbitcdGxvY2FsIGJhc2VsaW5lPVwiMzE0XCIgdmFsPVwiMzE1XCJcbiBcbi1cdGlmIFsgISAtZiAke1RBUkdFVH0gXSA7IHRoZW5cbi1cdFx0cmV0dXJuIDBcbi1cdGZpXG4tXHRyZXR1cm4gMVxuLX1cbitcdFtbIC1mIFwiJHRcIiBdXSB8fCB7IFJFVD0kS1NGVF9TS0lQOyByZXR1cm47IH1cbiBcbi1ydW5fYml0bWFwdGVzdCgpIHtcbi1cdCMgVG90YWwgbGVuZ3RoIG9mIGJpdG1hcHMgc3RyaW5nIHRvIHVzZSwgYSBiaXQgdW5kZXJcbi1cdCMgdGhlIG1heGltdW0gaW5wdXQgc2l6ZSBvZiB0aGUgdGVzdCBub2RlXG4tXHRMRU5HVEg9JCgoUkFORE9NICUgNjUwMDApKVxuK1x0YXNzZXJ0X3dyaXRlX3BhdHRlcm5zIFwiJHRcIiBcIiRiYXNlbGluZVwiIFwiJHZhbFwiIHx8IFJFVD0kS1NGVF9GQUlMXG4rXHRhc3NlcnRfd2lkZWludF93cml0ZXNfcmVqZWN0ZWQgXCIkdFwiIFwiJGJhc2VsaW5lXCIgfHwgUkVUPSRLU0ZUX0ZBSUxcbitcdGFzc2VydF9kaWdpdF9saW1pdCBcIiR0XCIgXCIkYmFzZWxpbmVcIiB8fCBSRVQ9JEtTRlRfRkFJTFxuK1x0YXNzZXJ0X3VpbnRfcmFuZ2UgXCIkdFwiIFwiJGJhc2VsaW5lXCIgfHwgUkVUPSRLU0ZUX0ZBSUxcbit9XG4gXG4tXHQjIEZpcnN0IGJpdCB0byBzZXRcbi1cdEJJVD0kKChSQU5ET00gJSAxMDI0KSlcbisjIHByb2NfZG9zdHJpbmcoKS1zcGVjaWZpYyB3cml0ZSBwYXR0ZXJuc1xuK2Fzc2VydF9zdHJpbmdfd3JpdGVfcGF0dGVybnMoKSAgIyBcdTAwM2NmaWxlXHUwMDNlIFx1MDAzY2Jhc2VsaW5lXHUwMDNlIFx1MDAzY3ZhbFx1MDAzZSBcdTAwM2NtYXhsZW5cdTAwM2Vcbit7XG4rXHRsb2NhbCBmaWxlPSQxIGJhc2VsaW5lPSQyIHZhbD0kMyBtYXhsZW49JDQgc3RhdHVzPTBcbiBcbi1cdCMgU3RyaW5nIGNvbnRhaW5pbmcgb3VyIGxpc3Qgb2YgYml0cyB0byBzZXRcbi1cdFRFU1RfU1RSPSRCSVRcbitcdHByaW50ZiAnJXMnIFwiJGJhc2VsaW5lXCIgXHUwMDNlIFwiJGZpbGVcIlxuK1x0d3JpdGVfaW5fY2h1bmtzIFwiJGZpbGVcIiBcIiR2YWxcIiAxXG4rXHRhc3NlcnRfY29udGVudCBcIiRmaWxlXCIgXCIkdmFsXCIgfHwgc3RhdHVzPTFcbiBcbi1cdCMgYnVpbGQgdXAgdGhlIHN0cmluZ1xuLVx0d2hpbGUgWyBcIiR7I1RFU1RfU1RSfVwiIC1sZSBcIiRMRU5HVEhcIiBdOyBkb1xuLVx0XHQjIE1ha2Ugc3VyZSBuZXh0IGVudHJ5IGlzIGRpc2NvbnRpZ3VvdXMsXG4tXHRcdCMgc2tpcCBhaGVhZCBhdCBsZWFzdCAyXG4tXHRcdEJJVD0kKChCSVQgKyAkKCgyICsgUkFORE9NICUgMTApKSkpXG4rXHRwcmludGYgJyVzJyBcIiR2YWxcIiBcdTAwM2UgXCIkZmlsZVwiXG4rXHR3cml0ZV9hdF9vZmZzZXQgXCIkZmlsZVwiIFwiJHZhbFwiIDEgMVxuK1x0YXNzZXJ0X2NvbnRlbnRfcmVqZWN0ZWQgXCIkZmlsZVwiIFwiJHZhbFwiIHx8IHN0YXR1cz0xXG4gXG4tXHRcdCMgQWRkIG5ldyBiaXQgdG8gdGhlIGxpc3Rcbi1cdFx0VEVTVF9TVFI9XCIke1RFU1RfU1RSfSwke0JJVH1cIlxuK1x0IyBzeXNjdGwgbWF4bGVuIGlzIGF0IGxlYXN0ICRtYXhsZW5cbitcdHByaW50ZiAnJXMnIFwiJGJhc2VsaW5lXCIgXHUwMDNlIFwiJGZpbGVcIlxuK1x0d3JpdGVfb3ZlcmxvbmcgXCIkZmlsZVwiIFwiJCgobWF4bGVuIC0gMikpXCIgXCJCXCIgXCIkbWF4bGVuXCJcbitcdGFzc2VydF9ncmVwIFwiJGZpbGVcIiBcIkJcIiB8fCBzdGF0dXM9MVxuIFxuLVx0XHQjIFJhbmRvbWx5IG1ha2UgaXQgYSByYW5nZVxuLVx0XHRpZiBbIFwiJCgoUkFORE9NICUgMikpXCIgLWVxIFwiMVwiIF07IHRoZW5cbi1cdFx0XHRSQU5HRV9FTkQ9JCgoQklUICsgJCgoMSArIFJBTkRPTSAlIDEwKSkpKVxuLVx0XHRcdFRFU1RfU1RSPVwiJHtURVNUX1NUUn0tJHtSQU5HRV9FTkR9XCJcbi1cdFx0XHRCSVQ9JFJBTkdFX0VORFxuLVx0XHRmaVxuLVx0ZG9uZVxuK1x0IyBrZWVwIG9yaWdpbmFsIHN0cmluZyBvbiBvdmVyZmxvdyBhcHBlbmRcbitcdHByaW50ZiAnJXMnIFwiJGJhc2VsaW5lXCIgXHUwMDNlIFwiJGZpbGVcIlxuK1x0d3JpdGVfb3ZlcmxvbmcgXCIkZmlsZVwiIFwiJCgobWF4bGVuIC0gMSkpXCIgXCJCXCIgXCIkKChtYXhsZW4gLSAxKSlcIlxuK1x0YXNzZXJ0X2dyZXBfYWJzZW50IFwiJGZpbGVcIiBcIkJcIiB8fCBzdGF0dXM9MVxuIFxuLVx0ZWNobyAtbiBcIkNoZWNraW5nIGJpdG1hcCBoYW5kbGVyIC4uLiBcIlxuLVx0VEVTVF9GSUxFPSQobWt0ZW1wKVxuLVx0ZWNobyAtbiBcIiRURVNUX1NUUlwiIFx1MDAzZSAkVEVTVF9GSUxFXG4rXHQjIHN5c2N0bCBzdGF5cyBOVUxMIHRlcm1pbmF0ZWQgb24gd3JpdGVcbitcdHByaW50ZiAnJXMnIFwiJGJhc2VsaW5lXCIgXHUwMDNlIFwiJGZpbGVcIlxuK1x0d3JpdGVfb3ZlcmxvbmcgXCIkZmlsZVwiIFwiJCgobWF4bGVuIC0gMSkpXCIgXCJCXCIgXCIkbWF4bGVuXCJcbitcdGFzc2VydF9ncmVwX2Fic2VudCBcIiRmaWxlXCIgXCJCXCIgfHwgc3RhdHVzPTFcbiBcbi1cdGNhdCAkVEVTVF9GSUxFIFx1MDAzZSAkVEFSR0VUIDJcdTAwM2UgL2Rldi9udWxsXG4tXHRpZiBbICQ/IC1uZSAwIF07IHRoZW5cbi1cdFx0ZWNobyBcIkZBSUxcIiBcdTAwM2VcdTAwMjYyXG4tXHRcdHJjPTFcbi1cdFx0dGVzdF9yY1xuLVx0ZmlcbitcdCMgc3lzY3RsIHN0YXlzIE5VTEwgdGVybWluYXRlZCBvbiBvdmVyd3JpdGVcbitcdHByaW50ZiAnJXMnIFwiJGJhc2VsaW5lXCIgXHUwMDNlIFwiJGZpbGVcIlxuK1x0d3JpdGVfb3ZlcmxvbmcgXCIkZmlsZVwiIFwiJCgobWF4bGVuIC0gMSkpXCIgXCJCQlwiIFwiJCgobWF4bGVuICsgMSkpXCJcbitcdGFzc2VydF9ncmVwX2Fic2VudCBcIiRmaWxlXCIgXCJCXCIgfHwgc3RhdHVzPTFcbiBcbi1cdGlmICEgdmVyaWZ5X2RpZmZfcHJvY19maWxlIFwiJFRBUkdFVFwiIFwiJFRFU1RfRklMRVwiOyB0aGVuXG4tXHRcdGVjaG8gXCJGQUlMXCIgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRlbHNlXG4tXHRcdGVjaG8gXCJPS1wiXG4tXHRcdHJjPTBcbi1cdGZpXG4tXHR0ZXN0X3JjXG4rXHRyZXR1cm4gXCIkc3RhdHVzXCJcbiB9XG4gXG4tc3lzY3RsX3Rlc3RfMDAwMSgpXG4rdGVzdF9zdHJpbmdfZG9zdHJpbmcoKVxuIHtcbi1cdFRBUkdFVD1cIiR7U1lTQ1RMfS8kKGdldF90ZXN0X3RhcmdldCAwMDAxKVwiXG4tXHRyZXNldF92YWxzXG4tXHRPUklHPSQoY2F0IFwiJHtUQVJHRVR9XCIpXG4tXHRURVNUX1NUUj0kKCggJE9SSUcgKyAxICkpXG4tXG4tXHRydW5fbnVtZXJpY3Rlc3RzXG4tXHRydW5fd2lkZWludF90ZXN0c1xuLVx0cnVuX2xpbWl0X2RpZ2l0XG4tfVxuK1x0bG9jYWwgdD1cIiR7U1lTQ1RMfS9zdHJpbmdfMDAwMVwiXG4rXHRsb2NhbCBiYXNlbGluZT1cIihub25lKVwiIHZhbD1cIlRlc3Rpbmcgc3lzY3RsXCIgbWF4bGVuPTY1XG4gXG4tc3lzY3RsX3Rlc3RfMDAwMigpXG4te1xuLVx0VEFSR0VUPVwiJHtTWVNDVEx9LyQoZ2V0X3Rlc3RfdGFyZ2V0IDAwMDIpXCJcbi1cdHJlc2V0X3ZhbHNcbi1cdE9SSUc9JChjYXQgXCIke1RBUkdFVH1cIilcbi1cdFRFU1RfU1RSPVwiVGVzdGluZyBzeXNjdGxcIlxuLVx0IyBPbmx5IHN0cmluZyBzeXNjdGxzIHN1cHBvcnQgc2Vla2luZy9hcHBlbmRpbmcuXG4tXHRNQVhMRU49NjVcbi1cbi1cdHJ1bl9udW1lcmljdGVzdHNcbi1cdHJ1bl9zdHJpbmd0ZXN0c1xuLX1cbitcdFtbIC1mIFwiJHRcIiBdXSB8fCB7IFJFVD0kS1NGVF9TS0lQOyByZXR1cm47IH1cbiBcbi1zeXNjdGxfdGVzdF8wMDAzKClcbi17XG4tXHRUQVJHRVQ9XCIke1NZU0NUTH0vJChnZXRfdGVzdF90YXJnZXQgMDAwMylcIlxuLVx0cmVzZXRfdmFsc1xuLVx0T1JJRz0kKGNhdCBcIiR7VEFSR0VUfVwiKVxuLVx0VEVTVF9TVFI9JCgoICRPUklHICsgMSApKVxuLVxuLVx0cnVuX251bWVyaWN0ZXN0c1xuLVx0cnVuX3dpZGVpbnRfdGVzdHNcbi1cdHJ1bl9saW1pdF9kaWdpdFxuLVx0cnVuX2xpbWl0X2RpZ2l0X2ludFxuK1x0YXNzZXJ0X3dyaXRlX3BhdHRlcm5zIFwiJHRcIiBcIiRiYXNlbGluZVwiIFwiJHZhbFwiIHx8IFJFVD0kS1NGVF9GQUlMXG4rXHRhc3NlcnRfc3RyaW5nX3dyaXRlX3BhdHRlcm5zIFwiJHRcIiBcIiRiYXNlbGluZVwiIFwiJHZhbFwiIFwiJG1heGxlblwiIHx8IFJFVD0kS1NGVF9GQUlMXG4gfVxuIFxuLXN5c2N0bF90ZXN0XzAwMDQoKVxuKyMgRW1pdCBhIHJhbmRvbSBzeXNjdGwgYml0IG1hcFxuK3JhbmRvbV9iaXRtYXBfc3BlYygpXG4ge1xuLVx0VEFSR0VUPVwiJHtTWVNDVEx9LyQoZ2V0X3Rlc3RfdGFyZ2V0IDAwMDQpXCJcbi1cdHJlc2V0X3ZhbHNcbi1cdE9SSUc9JChjYXQgXCIke1RBUkdFVH1cIilcbi1cdFRFU1RfU1RSPSQoKCAkT1JJRyArIDEgKSlcbi1cbi1cdHJ1bl9udW1lcmljdGVzdHNcbi1cdHJ1bl93aWRlaW50X3Rlc3RzXG4tXHRydW5fbGltaXRfZGlnaXRcbi1cdHJ1bl9saW1pdF9kaWdpdF91aW50XG4tfVxuK1x0bG9jYWwgbGVuZ3RoPSQoKFJBTkRPTSAlIDY1MDAwKSlcbitcdGxvY2FsIGJpdD0kKChSQU5ET00gJSAxMDI0KSlcbitcdGxvY2FsIHNwZWM9JGJpdFxuK1x0bG9jYWwgcmFuZ2VfZW5kXG4gXG4tc3lzY3RsX3Rlc3RfMDAwNSgpXG4te1xuLVx0VEFSR0VUPVwiJHtTWVNDVEx9LyQoZ2V0X3Rlc3RfdGFyZ2V0IDAwMDUpXCJcbi1cdHJlc2V0X3ZhbHNcbi1cdE9SSUc9JChjYXQgXCIke1RBUkdFVH1cIilcbitcdHdoaWxlIFsgXCIkeyNzcGVjfVwiIC1sZSBcIiRsZW5ndGhcIiBdOyBkb1xuK1x0XHQjIEtlZXAgZW50cmllcyBkaXNjb250aWd1b3VzLCBza2lwIGFoZWFkIGJ5IGF0IGxlYXN0IDIuXG4rXHRcdGJpdD0kKChiaXQgKyAyICsgUkFORE9NICUgMTApKVxuK1x0XHRzcGVjPVwiJHtzcGVjfSwke2JpdH1cIlxuIFxuLVx0cnVuX2xpbWl0X2RpZ2l0X2ludF9hcnJheVxuLX1cbitcdFx0aWYgWyBcIiQoKFJBTkRPTSAlIDIpKVwiIC1lcSAxIF07IHRoZW5cbitcdFx0XHRyYW5nZV9lbmQ9JCgoYml0ICsgMSArIFJBTkRPTSAlIDEwKSlcbitcdFx0XHRzcGVjPVwiJHtzcGVjfS0ke3JhbmdlX2VuZH1cIlxuK1x0XHRcdGJpdD0kcmFuZ2VfZW5kXG4rXHRcdGZpXG4rXHRkb25lXG4gXG4tc3lzY3RsX3Rlc3RfMDAwNigpXG4te1xuLVx0VEFSR0VUPVwiJHtTWVNDVEx9LyQoZ2V0X3Rlc3RfdGFyZ2V0IDAwMDYpXCJcbi1cdHJlc2V0X3ZhbHNcbi1cdE9SSUc9XCJcIlxuLVx0cnVuX2JpdG1hcHRlc3RcbitcdGVjaG8gLW4gXCIkc3BlY1wiXG4gfVxuIFxuLXN5c2N0bF90ZXN0XzAwMDcoKVxuKyMgRG8gKm5vdCogcHJlZml4IHdpdGggXCJ0ZXN0X1wiLiBBbGwgYXV0b2dlbmVyYXRlIGJpdG1hcCB0ZXN0cyBjYWxsIHRoaXMgaGVscGVyXG4rYml0bWFwX3JhbmdlX2NoZWNrX29uY2UoKSAgIyBcdTAwM2NpdGVyXHUwMDNlXG4ge1xuLVx0VEFSR0VUPVwiJHtTWVNDVEx9LyQoZ2V0X3Rlc3RfdGFyZ2V0IDAwMDcpXCJcbi1cdGVjaG8gLW4gXCJUZXN0aW5nIGlmICRUQVJHRVQgaXMgc2V0IHRvIDEgLi4uIFwiXG4rXHRsb2NhbCB0PVwiJHtTWVNDVEx9L2JpdG1hcF8wMDAxXCJcbitcdGxvY2FsIHNwZWNfZmlsZSBzZWVkXG4gXG4tXHRpZiBbICEgLWYgJFRBUkdFVCBdOyB0aGVuXG4tXHRcdGVjaG8gLWUgXCJTS0lQUElOR1xcbiRUQVJHRVQgaXMgbm90IHByZXNlbnRcIlxuLVx0XHRyZXR1cm4gJGtzZnRfc2tpcFxuLVx0Zmlcbi1cbi1cdGlmIFsgLWQgJERJUiBdOyB0aGVuXG4tXHRcdGVjaG8gLWUgXCJTS0lQUElOR1xcblRlc3Qgb25seSBwb3NzaWJsZSBpZiBzeXNjdGxfdGVzdCBpcyBidWlsdC1pbiwgbm90IG1vZHVsZTpcIlxuLVx0XHRjYXQgJFRFU1RfRElSL2NvbmZpZyBcdTAwM2VcdTAwMjYyXG4tXHRcdHJldHVybiAka3NmdF9za2lwXG4tXHRmaVxuK1x0W1sgLWYgXCIkdFwiIF1dIHx8IHsgUkVUPSRLU0ZUX1NLSVA7IHJldHVybjsgfVxuIFxuLVx0T1JJRz0kKGNhdCBcIiR7VEFSR0VUfVwiKVxuK1x0c2VlZD0kKChCSVRNQVBfU0VFRCArICQxKSlcbitcdFJBTkRPTT0kc2VlZFxuIFxuLVx0aWYgWyB4JE9SSUcgPSBcIngxXCIgXTsgdGhlblxuLVx0XHRlY2hvIFwiT0tcIlxuLVx0XHRyZXR1cm4gMFxuLVx0ZmlcbitcdHNwZWNfZmlsZT0kKG1rdGVtcClcbitcdHJhbmRvbV9iaXRtYXBfc3BlYyBcdTAwM2UgXCIkc3BlY19maWxlXCJcbiBcbi1cdGlmIFsgISAtZiAvcHJvYy9jbWRsaW5lIF07IHRoZW5cbi1cdFx0ZWNobyAtZSBcIlNLSVBQSU5HXFxuVGhlcmUgaXMgbm8gL3Byb2MvY21kbGluZSB0byBjaGVjayBmb3IgcGFyYW1ldGVyXCJcbi1cdFx0cmV0dXJuICRrc2Z0X3NraXBcbitcdGlmICEgY2F0IFwiJHNwZWNfZmlsZVwiIFx1MDAzZSBcIiR0XCIgMlx1MDAzZS9kZXYvbnVsbDsgdGhlblxuK1x0XHRrdGFwX3ByaW50X21zZyBcIiR0OiB3cml0ZSBvZiByYW5kb20gYml0bWFwIHNwZWMgcmVqZWN0ZWQgKHNlZWQgJHNlZWQpXCJcbitcdFx0UkVUPSRLU0ZUX0ZBSUxcbitcdGVsaWYgISBhc3NlcnRfZGlmZl9wcm9jX2ZpbGUgXCIkdFwiIFwiJHNwZWNfZmlsZVwiOyB0aGVuXG4rXHRcdGt0YXBfcHJpbnRfbXNnIFwiJHQ6IHJlYWRiYWNrIG1pc21hdGNoIChzZWVkICRzZWVkKVwiXG4rXHRcdFJFVD0kS1NGVF9GQUlMXG4gXHRmaVxuIFxuLVx0Rk9VTkQ9JChncmVwIC1jIFwic3lzY3RsWy4vXWRlYnVnWy4vXXRlc3Rfc3lzY3RsWy4vXWJvb3RfaW50PTFcIiAvcHJvYy9jbWRsaW5lKVxuLVx0aWYgWyAkRk9VTkQgPSBcIjFcIiBdOyB0aGVuXG4tXHRcdGVjaG8gLWUgXCJGQUlMXFxuS2VybmVsIHBhcmFtIGZvdW5kIGJ1dCAkVEFSR0VUIGlzIG5vdCAxLlwiIFx1MDAzZVx1MDAyNjJcbi1cdFx0cmM9MVxuLVx0XHR0ZXN0X3JjXG4tXHRmaVxuLVxuLVx0ZWNobyAtZSBcIlNLSVBQSU5HXFxuRXhwZWN0ZWQga2VybmVsIHBhcmFtZXRlciBtaXNzaW5nLlwiXG4tXHRlY2hvIFwiS2VybmVsIG11c3QgYmUgYm9vdGVkIHdpdGggcGFyYW1ldGVyOiBzeXNjdGwuZGVidWcudGVzdF9zeXNjdGwuYm9vdF9pbnQ9MVwiXG4tXHRyZXR1cm4gJGtzZnRfc2tpcFxuK1x0cm0gLWYgXCIkc3BlY19maWxlXCJcbiB9XG4gXG4tc3lzY3RsX3Rlc3RfMDAwOCgpXG4rdGVzdF91bnJlZ2lzdGVyX3JlbW92ZXNfZGlyKClcbiB7XG4tXHRUQVJHRVQ9XCIke1NZU0NUTH0vJChnZXRfdGVzdF90YXJnZXQgMDAwOClcIlxuLVx0ZWNobyAtbiBcIlRlc3RpbmcgaWYgJFRBUkdFVCBpcyBtYXRjaGVkIGluIGtlcm5lbCAuLi4gXCJcbitcdGxvY2FsIHQ9XCIke1NZU0NUTH0vdW5yZWdpc3Rlcl9lcnJvclwiXG4gXG4tXHRpZiBbICEgLWYgJFRBUkdFVCBdOyB0aGVuXG4tXHRcdGVjaG8gLWUgXCJTS0lQUElOR1xcbiRUQVJHRVQgaXMgbm90IHByZXNlbnRcIlxuLVx0XHRyZXR1cm4gJGtzZnRfc2tpcFxuK1x0aWYgW1sgLWQgXCIkdFwiIF1dOyB0aGVuXG4rXHRcdGt0YXBfcHJpbnRfbXNnIFwiJHQ6IGRpcmVjdG9yeSBzdGlsbCBleGlzdHMsIGV4cGVjdGVkIGl0IHRvIGJlIHVucmVnaXN0ZXJlZFwiXG4rXHRcdFJFVD0kS1NGVF9GQUlMXG4gXHRmaVxuK31cbiBcbi1cdE9SSUdfVkFMVUU9JChjYXQgXCIke1RBUkdFVH1cIilcbit0ZXN0X21vdW50X3BvaW50X2Vycm9yKClcbit7XG4rXHRsb2NhbCB0PVwiJHtTWVNDVEx9L21udC9tbnRfZXJyb3JcIlxuIFxuLVx0aWYgWyAkT1JJR19WQUxVRSAtbmUgMSBdOyB0aGVuXG4tXHRcdGVjaG8gXCJGQUlMXCIgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRcdHRlc3RfcmNcbitcdGlmIFtbIC1kIFwiJHRcIiBdXTsgdGhlblxuK1x0XHRrdGFwX3ByaW50X21zZyBcIiR0OiBkaXJlY3RvcnkgdW5leHBlY3RlZGx5IGNyZWF0ZWRcIlxuK1x0XHRSRVQ9JEtTRlRfRkFJTFxuIFx0Zmlcbi1cbi1cdGVjaG8gXCJPS1wiXG4tXHRyZXR1cm4gMFxuIH1cbiBcbi1zeXNjdGxfdGVzdF8wMDA5KClcbit0ZXN0X2VtcHR5X2Rpcl9yZWdpc3RyYXRpb24oKVxuIHtcbi1cdFRBUkdFVD1cIiR7U1lTQ1RMfS8kKGdldF90ZXN0X3RhcmdldCAwMDA5KVwiXG4tXHRlY2hvIC1uIFwiVGVzdGluZyBpZiAkVEFSR0VUIHVucmVnaXN0ZXJlZCBjb3JyZWN0bHkgLi4uIFwiXG4tXHRpZiBbIC1kICRUQVJHRVQgXTsgdGhlblxuLVx0XHRlY2hvIFwiRkFJTFwiIFx1MDAzZVx1MDAyNjJcbi1cdFx0cmM9MVxuLVx0XHR0ZXN0X3JjXG4tXHRmaVxuK1x0bG9jYWwgdD1cIiR7U1lTQ1RMfS9lbXB0eV9hZGRcIlxuIFxuLVx0ZWNobyBcIk9LXCJcbi1cdHJldHVybiAwXG4rXHRpZiBbWyAhIC1kIFwiJHRcIiBdXTsgdGhlblxuK1x0XHRrdGFwX3ByaW50X21zZyBcIiR0OiBkaXJlY3Rvcnkgd2FzIG5vdCBjcmVhdGVkXCJcbitcdFx0UkVUPSRLU0ZUX0ZBSUxcbitcdFx0cmV0dXJuXG4rXHRmaVxuK1x0aWYgW1sgISAtZCBcIiR0L2VtcHR5XCIgXV07IHRoZW5cbitcdFx0a3RhcF9wcmludF9tc2cgXCIkdC9lbXB0eTogZGlyZWN0b3J5IHdhcyBub3QgY3JlYXRlZFwiXG4rXHRcdFJFVD0kS1NGVF9GQUlMXG4rXHRmaVxuIH1cbiBcbi1zeXNjdGxfdGVzdF8wMDEwKClcbit0ZXN0X3U4X3JhbmdlX2NoZWNrKClcbiB7XG4tXHRUQVJHRVQ9XCIke1NZU0NUTH0vJChnZXRfdGVzdF90YXJnZXQgMDAxMClcIlxuLVx0ZWNobyAtbiBcIlRlc3RpbmcgdGhhdCAkVEFSR0VUIHdhcyBub3QgY3JlYXRlZCAuLi4gXCJcbi1cdGlmIFsgLWQgJFRBUkdFVCBdOyB0aGVuXG4tXHRcdGVjaG8gXCJGQUlMXCIgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRcdHRlc3RfcmNcbitcdGxvY2FsIHQ9XCIke1NZU0NUTH0vdThfdmFsaWRcIlxuK1xuK1x0aWYgW1sgISAtZiBcIiR0XCIgXV07IHRoZW5cbitcdFx0a3RhcF9wcmludF9tc2cgXCIkdDogZmlsZSB3YXMgbm90IGNyZWF0ZWRcIlxuK1x0XHRSRVQ9JEtTRlRfRkFJTFxuK1x0XHRyZXR1cm5cbiBcdGZpXG4gXG4tXHRlY2hvIFwiT0tcIlxuLVx0cmV0dXJuIDBcbitcdGFzc2VydF9kbWVzZ19jb3VudCBcInU4X292ZXIgcmFuZ2UgdmFsdWVcIiAxIHx8IFJFVD0kS1NGVF9GQUlMXG4rXHRhc3NlcnRfZG1lc2dfY291bnQgXCJ1OF91bmRlciByYW5nZSB2YWx1ZVwiIDEgfHwgUkVUPSRLU0ZUX0ZBSUxcbiB9XG4gXG4tc3lzY3RsX3Rlc3RfMDAxMSgpXG4rdGVzdF9ib290X3BhcmFtX2ludCgpXG4ge1xuLVx0VEFSR0VUPVwiJHtTWVNDVEx9LyQoZ2V0X3Rlc3RfdGFyZ2V0IDAwMTEpXCJcbi1cdGVjaG8gLW4gXCJUZXN0aW5nIGVtcHR5IGRpciBoYW5kbGluZyBpbiAke1RBUkdFVH0gLi4uIFwiXG4tXHRpZiBbICEgLWQgJHtUQVJHRVR9IF07IHRoZW5cbi1cdFx0ZWNobyAtZSBcIkZBSUxcXG5Db3VsZCBub3QgY3JlYXRlICR7VEFSR0VUfVwiIFx1MDAzZVx1MDAyNjJcbi1cdFx0cmM9MVxuLVx0XHR0ZXN0X3JjXG4tXHRmaVxuK1x0bG9jYWwgdD1cIiR7U1lTQ1RMfS9ib290X2ludFwiXG4rXHRsb2NhbCBvcmlnIGZvdW5kXG4gXG4tXHRUQVJHRVQyPVwiJHtUQVJHRVR9L2VtcHR5XCJcbi1cdGlmIFsgISAtZCAke1RBUkdFVDJ9IF07IHRoZW5cbi1cdFx0ZWNobyAtZSBcIkZBSUxcXG5Db3VsZCBub3QgY3JlYXRlICR7VEFSR0VUMn1cIiBcdTAwM2VcdTAwMjYyXG4tXHRcdHJjPTFcbi1cdFx0dGVzdF9yY1xuLVx0ZmlcbitcdFtbIC1mIFwiJHRcIiBdXSB8fCB7IFJFVD0kS1NGVF9TS0lQOyByZXR1cm47IH1cbiBcbi1cdGVjaG8gXCJPS1wiXG4tXHRyZXR1cm4gMFxuLX1cbitcdCMgQm9vdCBjbWRsaW5lIHBhcmFtcyBvbmx5IGFwcGx5IHdoZW4gdGVzdF9zeXNjdGwgaXMgYnVpbHQgaW4sIG5vdFxuK1x0IyBsb2FkZWQgYXMgYSBtb2R1bGUuXG4rXHRpZiBbWyAtZCBcIiRNT0RVTEVfRElSXCIgXV07IHRoZW5cbitcdFx0a3RhcF9wcmludF9tc2cgXCIkdDogdGVzdCBvbmx5IHBvc3NpYmxlIGlmIHRlc3Rfc3lzY3RsIGlzIGJ1aWx0LWluLCBub3QgYSBtb2R1bGVcIlxuK1x0XHRSRVQ9JEtTRlRfU0tJUFxuK1x0XHRyZXR1cm5cbitcdGZpXG4gXG4tc3lzY3RsX3Rlc3RfMDAxMigpXG4te1xuLVx0VEFSR0VUPVwiJHtTWVNDVEx9LyQoZ2V0X3Rlc3RfdGFyZ2V0IDAwMTIpXCJcbi1cdGVjaG8gLW4gXCJUZXN0aW5nIHU4IHJhbmdlIGNoZWNrIGluIHN5c2N0bCB0YWJsZSBjaGVjayBpbiAke1RBUkdFVH0gLi4uIFwiXG4tXHRpZiBbICEgLWYgJHtUQVJHRVR9IF07IHRoZW5cbi1cdFx0ZWNobyAtZSBcIkZBSUxcXG5Db3VsZCBub3QgY3JlYXRlICR7VEFSR0VUfVwiIFx1MDAzZVx1MDAyNjJcbi1cdFx0cmM9MVxuLVx0XHR0ZXN0X3JjXG4rXHRvcmlnPSQoY2F0IFwiJHRcIilcbitcdGlmIFtbIFwiJG9yaWdcIiA9PSBcIjFcIiBdXTsgdGhlblxuK1x0XHRyZXR1cm5cbiBcdGZpXG4gXG4tXHRsb2NhbCB1OG92ZXJfbXNnPSQoZG1lc2cgfCBncmVwIFwidThfb3ZlciByYW5nZSB2YWx1ZVwiIHwgd2MgLWwpXG4tXHRpZiBbICEgJHt1OG92ZXJfbXNnfSAtZXEgMSBdOyB0aGVuXG4tXHRcdGVjaG8gLWUgXCJGQUlMXFxudTggb3ZlcmZsb3cgbm90IGRldGVjdGVkXCIgXHUwMDNlXHUwMDI2MlxuLVx0XHRyYz0xXG4tXHRcdHRlc3RfcmNcbitcdGlmIFtbICEgLWYgL3Byb2MvY21kbGluZSBdXTsgdGhlblxuK1x0XHRrdGFwX3ByaW50X21zZyBcIiR0OiBubyAvcHJvYy9jbWRsaW5lIHRvIGNoZWNrIGZvciB0aGUgYm9vdCBwYXJhbWV0ZXJcIlxuK1x0XHRSRVQ9JEtTRlRfU0tJUFxuK1x0XHRyZXR1cm5cbiBcdGZpXG4gXG4tXHRsb2NhbCB1OHVuZGVyX21zZz0kKGRtZXNnIHwgZ3JlcCBcInU4X3VuZGVyIHJhbmdlIHZhbHVlXCIgfCB3YyAtbClcbi1cdGlmIFsgISAke3U4dW5kZXJfbXNnfSAtZXEgMSBdOyB0aGVuXG4tXHRcdGVjaG8gLWUgXCJGQUlMXFxudTggdW5kZXJmbG93IG5vdCBkZXRlY3RlZFwiIFx1MDAzZVx1MDAyNjJcbi1cdFx0cmM9MVxuLVx0XHR0ZXN0X3JjXG4rXHRmb3VuZD0kKGdyZXAgLWMgXCJzeXNjdGxbLi9dZGVidWdbLi9ddGVzdF9zeXNjdGxbLi9dYm9vdF9pbnQ9MVwiIC9wcm9jL2NtZGxpbmUpXG4rXHRpZiBbWyBcIiRmb3VuZFwiID09IFwiMVwiIF1dOyB0aGVuXG4rXHRcdGt0YXBfcHJpbnRfbXNnIFwiJHQ6IGtlcm5lbCBwYXJhbSBmb3VuZCBvbiBjbWRsaW5lIGJ1dCB2YWx1ZSBpcyBub3QgMVwiXG4rXHRcdFJFVD0kS1NGVF9GQUlMXG4rXHRcdHJldHVyblxuIFx0ZmlcbiBcbi1cdGVjaG8gXCJPS1wiXG4tXHRyZXR1cm4gMFxuK1x0a3RhcF9wcmludF9tc2cgXCIkdDoga2VybmVsIG5vdCBib290ZWQgd2l0aCBzeXNjdGwuZGVidWcudGVzdF9zeXNjdGwuYm9vdF9pbnQ9MVwiXG4rXHRSRVQ9JEtTRlRfU0tJUFxuIH1cbiBcbi1zeXNjdGxfdGVzdF8wMDEzKClcbit0ZXN0X3N5c2N0bF9tYWNyb19tYXRjaCgpXG4ge1xuLVx0VEFSR0VUPVwiJHtTWVNDVEx9LyQoZ2V0X3Rlc3RfdGFyZ2V0IDAwMTMpXCJcbi1cdHJlc2V0X3ZhbHNcbitcdGxvY2FsIHQ9XCIke1NZU0NUTH0vbWF0Y2hfaW50XCJcbitcbitcdFtbIC1mIFwiJHRcIiBdXSB8fCB7IFJFVD0kS1NGVF9TS0lQOyByZXR1cm47IH1cbiBcbi1cdHJ1bl9pbnRfYXJyYXlfbm9fcGFydGlhbF91cGRhdGVcbitcdGFzc2VydF9jb250ZW50IFwiJHRcIiBcIjFcIiB8fCBSRVQ9JEtTRlRfRkFJTFxuIH1cbiBcbi1saXN0X3Rlc3RzKClcbitydW5fb25lKClcbiB7XG4tXHRlY2hvIFwiVGVzdCBJRCBsaXN0OlwiXG4tXHRlY2hvXG4tXHRlY2hvIFwiVEVTVF9JRCB4IE5VTV9URVNUXCJcbi1cdGVjaG8gXCJURVNUX0lEOiAgIFRlc3QgSURcIlxuLVx0ZWNobyBcIk5VTV9URVNUUzogUmVjb21tZW5kZWQgbnVtYmVyIG9mIHRpbWVzIHRvIHJ1biB0aGUgdGVzdFwiXG4tXHRlY2hvXG4tXHRlY2hvIFwiMDAwMSB4ICQoZ2V0X3Rlc3RfY291bnQgMDAwMSkgLSB0ZXN0cyBwcm9jX2RvaW50dmVjX21pbm1heCgpXCJcbi1cdGVjaG8gXCIwMDAyIHggJChnZXRfdGVzdF9jb3VudCAwMDAyKSAtIHRlc3RzIHByb2NfZG9zdHJpbmcoKVwiXG4tXHRlY2hvIFwiMDAwMyB4ICQoZ2V0X3Rlc3RfY291bnQgMDAwMykgLSB0ZXN0cyBwcm9jX2RvaW50dmVjKClcIlxuLVx0ZWNobyBcIjAwMDQgeCAkKGdldF90ZXN0X2NvdW50IDAwMDQpIC0gdGVzdHMgcHJvY19kb3VpbnR2ZWMoKVwiXG4tXHRlY2hvIFwiMDAwNSB4ICQoZ2V0X3Rlc3RfY291bnQgMDAwNSkgLSB0ZXN0cyBwcm9jX2RvdWludHZlYygpIGFycmF5XCJcbi1cdGVjaG8gXCIwMDA2IHggJChnZXRfdGVzdF9jb3VudCAwMDA2KSAtIHRlc3RzIHByb2NfZG9fbGFyZ2VfYml0bWFwKClcIlxuLVx0ZWNobyBcIjAwMDcgeCAkKGdldF90ZXN0X2NvdW50IDAwMDcpIC0gdGVzdHMgc2V0dGluZyBzeXNjdGwgZnJvbSBrZXJuZWwgYm9vdCBwYXJhbVwiXG4tXHRlY2hvIFwiMDAwOCB4ICQoZ2V0X3Rlc3RfY291bnQgMDAwOCkgLSB0ZXN0cyBzeXNjdGwgbWFjcm8gdmFsdWVzIG1hdGNoXCJcbi1cdGVjaG8gXCIwMDA5IHggJChnZXRfdGVzdF9jb3VudCAwMDA5KSAtIHRlc3RzIHN5c2N0IHVucmVnaXN0ZXJcIlxuLVx0ZWNobyBcIjAwMTAgeCAkKGdldF90ZXN0X2NvdW50IDAwMTApIC0gdGVzdHMgc3lzY3QgbW91bnQgcG9pbnRcIlxuLVx0ZWNobyBcIjAwMTEgeCAkKGdldF90ZXN0X2NvdW50IDAwMTEpIC0gdGVzdHMgZW1wdHkgZGlyZWN0b3JpZXNcIlxuLVx0ZWNobyBcIjAwMTIgeCAkKGdldF90ZXN0X2NvdW50IDAwMTIpIC0gdGVzdHMgcmFuZ2UgY2hlY2sgZm9yIHU4IHByb2NfaGFuZGxlclwiXG4tXHRlY2hvIFwiMDAxMyB4ICQoZ2V0X3Rlc3RfY291bnQgMDAxMykgLSB0ZXN0cyBwYXJ0aWFsbHkgdXBkYXRlIHZlY3RvcnMgb24gZXJyb3JcIlxuK1x0bG9jYWwgbmFtZT0kMVxuK1xuK1x0IyBTdWJzaGVsbDogYSB0ZXN0IGNhbm5vdCBsZWFrIHZhcnMvY3dkL3RyYXBzIGludG8gdGhlIG5leHQgb25lLCBhbmQgYW5cbitcdCMgYWNjaWRlbnRhbCBgZXhpdGAgaW5zaWRlIGEgdGVzdCBraWxscyBvbmx5IGl0cyBvd24gc3Vic2hlbGwuXG4rXHQoIFJFVD0kS1NGVF9QQVNTOyBcIiRuYW1lXCI7IGV4aXQgJFJFVCApXG4rXG4rXHRjYXNlICQ/IGluXG4rXHRcIiRLU0ZUX1BBU1NcIikga3RhcF90ZXN0X3Bhc3MgXCIkbmFtZVwiIDs7XG4rXHRcIiRLU0ZUX1NLSVBcIikga3RhcF90ZXN0X3NraXAgXCIkbmFtZVwiIDs7XG4rXHQqKSAgICAgICAgICBrdGFwX3Rlc3RfZmFpbCBcIiRuYW1lXCIgOztcbitcdGVzYWNcbiB9XG4gXG4gdXNhZ2UoKVxuIHtcbi1cdE5VTV9URVNUUz0kKGdyZXAgLW8gJyAnIFx1MDAzY1x1MDAzY1x1MDAzY1wiJEFMTF9URVNUU1wiIHwgZ3JlcCAtYyAuKVxuLVx0bGV0IE5VTV9URVNUUz0kTlVNX1RFU1RTKzFcbi1cdE1BWF9URVNUPSQocHJpbnRmIFwiJTA0ZFxcblwiICROVU1fVEVTVFMpXG4tXHRlY2hvIFwiVXNhZ2U6ICQwIFsgLXQgXHUwMDNjNC1udW1iZXItZGlnaXRcdTAwM2UgXSB8IFsgLXcgXHUwMDNjNC1udW1iZXItZGlnaXRcdTAwM2UgXSB8XCJcbi1cdGVjaG8gXCJcdFx0IFsgLXMgXHUwMDNjNC1udW1iZXItZGlnaXRcdTAwM2UgXSB8IFsgLWMgXHUwMDNjNC1udW1iZXItZGlnaXRcdTAwM2UgXHUwMDNjdGVzdC0gY291bnRcdTAwM2VcIlxuLVx0ZWNobyBcIiAgICAgICAgICAgWyBhbGwgXSBbIC1oIHwgLS1oZWxwIF0gWyAtbCBdXCJcbi1cdGVjaG8gXCJcIlxuLVx0ZWNobyBcIlZhbGlkIHRlc3RzOiAwMDAxLSRNQVhfVEVTVFwiXG4tXHRlY2hvIFwiXCJcbi1cdGVjaG8gXCIgICAgYWxsICAgICBSdW5zIGFsbCB0ZXN0cyAoZGVmYXVsdClcIlxuLVx0ZWNobyBcIiAgICAtdCAgICAgIFJ1biB0ZXN0IElEIHRoZSByZWNvbW1lbmRlZCBudW1iZXIgb2YgdGltZXNcIlxuLVx0ZWNobyBcIiAgICAtdyAgICAgIFdhdGNoIHRlc3QgSUQgcnVuIHVudGlsIGl0IHJ1bnMgaW50byBhbiBlcnJvclwiXG4tXHRlY2hvIFwiICAgIC1jICAgICAgUnVuIHRlc3QgSUQgb25jZVwiXG4tXHRlY2hvIFwiICAgIC1zICAgICAgUnVuIHRlc3QgSUQgeCB0ZXN0LWNvdW50IG51bWJlciBvZiB0aW1lc1wiXG4tXHRlY2hvIFwiICAgIC1sICAgICAgTGlzdCBhbGwgdGVzdCBJRCBsaXN0XCJcbi1cdGVjaG8gXCIgLWh8LS1oZWxwICBIZWxwXCJcbi1cdGVjaG9cbi1cdGVjaG8gXCJJZiBhbiBlcnJvciBldmVyeSBvY2N1cnMgZXhlY3V0aW9uIHdpbGwgaW1tZWRpYXRlbHkgdGVybWluYXRlLlwiXG4tXHRlY2hvIFwiSWYgeW91IGFyZSBhZGRpbmcgYSBuZXcgdGVzdCB0cnkgdXNpbmcgLXcgXHUwMDNjdGVzdC1JRFx1MDAzZSBmaXJzdCB0b1wiXG4tXHRlY2hvIFwibWFrZSBzdXJlIHRoZSB0ZXN0IHBhc3NlcyBhIHNlcmllcyBvZiB0ZXN0cy5cIlxuLVx0ZWNob1xuLVx0ZWNobyBFeGFtcGxlIHVzZXM6XG4tXHRlY2hvXG4tXHRlY2hvIFwiJFRFU1RfTkFNRS5zaCAgICAgICAgICAgIC0tIGV4ZWN1dGVzIGFsbCB0ZXN0c1wiXG4tXHRlY2hvIFwiJFRFU1RfTkFNRS5zaCAtdCAwMDAyICAgIC0tIEV4ZWN1dGVzIHRlc3QgSUQgMDAwMiB0aGUgcmVjb21tZW5kZWQgbnVtYmVyIG9mIHRpbWVzXCJcbi1cdGVjaG8gXCIkVEVTVF9OQU1FLnNoIC13IDAwMDIgICAgLS0gV2F0Y2ggdGVzdCBJRCAwMDAyIHJ1biB1bnRpbCBhbiBlcnJvciBvY2N1cnNcIlxuLVx0ZWNobyBcIiRURVNUX05BTUUuc2ggLXMgMDAwMiAgICAtLSBSdW4gdGVzdCBJRCAwMDAyIG9uY2VcIlxuLVx0ZWNobyBcIiRURVNUX05BTUUuc2ggLWMgMDAwMiAzICAtLSBSdW4gdGVzdCBJRCAwMDAyIHRocmVlIHRpbWVzXCJcbi1cdGVjaG9cbi1cdGxpc3RfdGVzdHNcbi1cdGV4aXQgMVxuLX1cbitcdGNhdCBcdTAwM2NcdTAwM2MtRU9GXG4rXHRVc2FnZTogJDAgWy1yIE5dIFstbF0gWy10IFRdIFstcyBOXSBbLWh8LS1oZWxwXVxuIFxuLWZ1bmN0aW9uIHRlc3RfbnVtKClcbi17XG4tXHRyZT0nXlswLTldKyQnXG4tXHRpZiAhIFtbICQxID1+ICRyZSBdXTsgdGhlblxuLVx0XHR1c2FnZVxuLVx0Zmlcbi19XG4tZnVuY3Rpb24gcmVtb3ZlX2xlYWRpbmdfemVyb3MoKVxuLXtcbi1cdGVjaG8gJDEgfCBzZWQgJ3MvXjAqLy8nXG4tfVxuK1x0UnVucyBldmVyeSBhdXRvLWRpc2NvdmVyZWQgdGVzdF8qIGZ1bmN0aW9uLiBTZXR0aW5nIFNZU0NUTF9URVNUUyB3aWxsXG4rXHRvdmVycmlkZSB0aGUgZGVmYXVsdCBhbmQgcGFzc2luZyAtdCB3aWxsIG92ZXJyaWRlIGJvdGggZW52IHZhciBhbmQgdGhlXG4rXHRkZWZhdWx0LlxuIFxuLWZ1bmN0aW9uIGdldF90ZXN0X2NvdW50KClcbi17XG4tXHR0ZXN0X251bSAkMVxuLVx0YXdrX2ZpZWxkPSQocmVtb3ZlX2xlYWRpbmdfemVyb3MgJDEpXG4tXHRURVNUX0RBVEE9JChlY2hvICRBTExfVEVTVFMgfCBhd2sgJ3twcmludCAkJyRhd2tfZmllbGQnfScpXG4tXHRlY2hvICR7VEVTVF9EQVRBfSB8IGF3ayAtRlwiOlwiICd7cHJpbnQgJDJ9J1xuLX1cbitcdCAgICAtciBOICAgICAgICAgIHJlcGVhdCBzZWxlY3RlZCB0ZXN0cyBOIHRpbWVzIChkZWZhdWx0IDEpXG4rXHQgICAgLWwgICAgICAgICAgICBsaXN0IGRpc2NvdmVyZWQgdGVzdHNcbitcdCAgICAtdCBUICAgICAgICAgIHNwYWNlIHNlcGFyYXRlZCB0ZXN0cyBsaXN0LiBGb3IgZXhhbXBsZSBcInRlc3RfMSB0ZXN0XzJcIlxuK1x0ICAgIC1zIE4gICAgICAgICAgYmFzZSBzZWVkIGZvciB0aGUgcmFuZG9taXplZCBiaXRtYXAgaXRlcmF0aW9ucy5cbitcdCAgICAtaCwgLS1oZWxwICAgIGhlbHBcbiBcbi1mdW5jdGlvbiBnZXRfdGVzdF9lbmFibGVkKClcbi17XG4tXHR0ZXN0X251bSAkMVxuLVx0YXdrX2ZpZWxkPSQocmVtb3ZlX2xlYWRpbmdfemVyb3MgJDEpXG4tXHRURVNUX0RBVEE9JChlY2hvICRBTExfVEVTVFMgfCBhd2sgJ3twcmludCAkJyRhd2tfZmllbGQnfScpXG4tXHRlY2hvICR7VEVTVF9EQVRBfSB8IGF3ayAtRlwiOlwiICd7cHJpbnQgJDN9J1xuK1x0ICAgIFNZU0NUTF9URVNUUz0ndGVzdF8xIHRlc3RfMicgJDAgIHJ1biBvbmx5IHRoZSBuYW1lZCB0ZXN0c1xuK1x0RU9GXG4gfVxuIFxuLWZ1bmN0aW9uIGdldF90ZXN0X3RhcmdldCgpXG4rbGlzdF90ZXN0cygpXG4ge1xuLVx0dGVzdF9udW0gJDFcbi1cdGF3a19maWVsZD0kKHJlbW92ZV9sZWFkaW5nX3plcm9zICQxKVxuLVx0VEVTVF9EQVRBPSQoZWNobyAkQUxMX1RFU1RTIHwgYXdrICd7cHJpbnQgJCckYXdrX2ZpZWxkJ30nKVxuLVx0ZWNobyAke1RFU1RfREFUQX0gfCBhd2sgLUZcIjpcIiAne3ByaW50ICQ0fSdcbitcdGVjaG8gXCJEaXNjb3ZlcmVkIHRlc3RzOlwiXG4rXHRsb2NhbCB0XG4rXHRmb3IgdCBpbiAkQUxMX1RFU1RTOyBkb1xuK1x0XHRlY2hvIFwiICAkdFwiXG4rXHRkb25lXG4gfVxuIFxuLWZ1bmN0aW9uIGdldF90ZXN0X3NraXBfbm9fdGFyZ2V0KClcbitjaGVja19yZXFzKClcbiB7XG4tXHR0ZXN0X251bSAkMVxuLVx0YXdrX2ZpZWxkPSQocmVtb3ZlX2xlYWRpbmdfemVyb3MgJDEpXG4tXHRURVNUX0RBVEE9JChlY2hvICRBTExfVEVTVFMgfCBhd2sgJ3twcmludCAkJyRhd2tfZmllbGQnfScpXG4tXHRlY2hvICR7VEVTVF9EQVRBfSB8IGF3ayAtRlwiOlwiICd7cHJpbnQgJDV9J1xuLX1cbitcdGxvY2FsIHVpZFxuK1x0dWlkPSQoaWQgLXUpXG4gXG4tZnVuY3Rpb24gc2tpcF90ZXN0KClcbi17XG4tXHRURVNUX0lEPSQxXG4tXHRURVNUX1RBUkdFVD0kMlxuLVx0aWYgdGFyZ2V0X2V4aXN0cyAkVEVTVF9UQVJHRVQgJFRFU1RfSUQ7IHRoZW5cbi1cdFx0VEVTVF9TS0lQPSQoZ2V0X3Rlc3Rfc2tpcF9ub190YXJnZXQgJFRFU1RfSUQpXG4tXHRcdGlmIFtbICRURVNUX1NLSVAgLWVxIFwiMVwiIF1dOyB0aGVuXG4tXHRcdFx0ZWNobyBcIlRhcmdldCAkVEVTVF9UQVJHRVQgZm9yIHRlc3QgJFRFU1RfSUQgZG9lcyBub3QgZXhpc3QgLi4uIFNLSVBQSU5HXCJcbi1cdFx0XHRyZXR1cm4gMFxuLVx0XHRmaVxuK1x0aWYgWyBcIiR1aWRcIiAtbmUgMCBdOyB0aGVuXG4rXHRcdGt0YXBfc2tpcF9hbGwgXCJtdXN0IGJlIHJ1biBhcyByb290XCJcbitcdFx0ZXhpdCBcIiRLU0ZUX1NLSVBcIlxuK1x0ZmlcbitcbitcdGlmICEgd2hpY2ggZ2V0Y29uZiBcdTAwM2UgL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxOyB0aGVuXG4rXHRcdGt0YXBfc2tpcF9hbGwgXCIkMDogWW91IG5lZWQgZ2V0Y29uZiBpbnN0YWxsZWRcIlxuK1x0XHRleGl0IFwiJEtTRlRfU0tJUFwiXG4rXHRmaVxuK1xuK1x0aWYgISB3aGljaCBkaWZmIFx1MDAzZSAvZGV2L251bGwgMlx1MDAzZVx1MDAyNjE7IHRoZW5cbitcdFx0a3RhcF9za2lwX2FsbCBcIiQwOiBZb3UgbmVlZCBkaWZmIGluc3RhbGxlZFwiXG4rXHRcdGV4aXQgXCIkS1NGVF9TS0lQXCJcbiBcdGZpXG4tXHRyZXR1cm4gMVxuIH1cbiBcbi1mdW5jdGlvbiBydW5fYWxsX3Rlc3RzKClcbitjaGVja19hcmdzKCkgICMgXHUwMDNjcmVwZWF0XHUwMDNlIFx1MDAzY3NlbGVjdGVkXHUwMDNlIFx1MDAzY3NlZWRcdTAwM2VcbiB7XG4tXHRmb3IgaSBpbiAkQUxMX1RFU1RTIDsgZG9cbi1cdFx0VEVTVF9JRD0ke2klOio6KjoqOip9XG4tXHRcdEVOQUJMRUQ9JChnZXRfdGVzdF9lbmFibGVkICRURVNUX0lEKVxuLVx0XHRURVNUX0NPVU5UPSQoZ2V0X3Rlc3RfY291bnQgJFRFU1RfSUQpXG4tXHRcdFRFU1RfVEFSR0VUPSQoZ2V0X3Rlc3RfdGFyZ2V0ICRURVNUX0lEKVxuLVxuLVx0XHRpZiBbWyAkRU5BQkxFRCAtZXEgXCIxXCIgXV07IHRoZW5cbi1cdFx0XHR0ZXN0X2Nhc2UgJFRFU1RfSUQgJFRFU1RfQ09VTlQgJFRFU1RfVEFSR0VUXG4rXHRsb2NhbCByZXBlYXRfYXJnPVwiJDFcIlxuK1x0bG9jYWwgc2VsZWN0ZWRfYXJnPVwiJDJcIlxuK1x0bG9jYWwgc2VlZF9hcmc9XCIkM1wiXG4rXHRsb2NhbCB0XG4rXG4rXHRpZiBbIC16IFwiJHNlbGVjdGVkX2FyZ1wiIF07IHRoZW5cbitcdFx0a3RhcF9leGl0X2ZhaWxfbXNnIFwibm8gdGVzdCBzZWxlY3RlZFwiXG4rXHRmaVxuK1xuK1x0aWYgISBbWyBcIiRyZXBlYXRfYXJnXCIgPX4gXlswLTldKyQgXV07IHRoZW5cbitcdFx0a3RhcF9leGl0X2ZhaWxfbXNnIFwicmVwZWF0IGFyZ3VtZW50ICckcmVwZWF0X2FyZycgaXMgbm90IGEgbnVtYmVyXCJcbitcdGZpXG4rXG4rXHRpZiAhIFtbIFwiJHNlZWRfYXJnXCIgPX4gXlswLTldKyQgXV07IHRoZW5cbitcdFx0a3RhcF9leGl0X2ZhaWxfbXNnIFwic2VlZCBhcmd1bWVudCAnJHNlZWRfYXJnJyBpcyBub3QgYSBudW1iZXJcIlxuK1x0ZmlcbitcbitcdGZvciB0IGluICRzZWxlY3RlZF9hcmc7IGRvXG4rXHRcdGlmICEgZGVjbGFyZSAtRiBcIiR0XCIgXHUwMDNlIC9kZXYvbnVsbDsgdGhlblxuK1x0XHRcdGt0YXBfZXhpdF9mYWlsX21zZyBcInVua25vd24gc2VsZWN0ZWQgdGVzdCAnJHQnXCJcbiBcdFx0ZmlcbiBcdGRvbmVcbiB9XG4gXG4tZnVuY3Rpb24gd2F0Y2hfbG9nKClcbithbGxvd191c2VyX2RlZmF1bHRzKClcbiB7XG4tXHRpZiBbICQjIC1uZSAzIF07IHRoZW5cbi1cdFx0Y2xlYXJcbitcdGlmIFsgLXogXCIke01PRFVMRV9ESVJ9XCIgXTsgdGhlblxuK1x0XHRNT0RVTEVfRElSPVwiL3N5cy9tb2R1bGUvdGVzdF9zeXNjdGwvXCJcbitcdGZpXG4rXHRpZiBbIC16IFwiJHtTWVNDVEx9XCIgXTsgdGhlblxuK1x0XHRTWVNDVEw9XCIvcHJvYy9zeXMvZGVidWcvdGVzdF9zeXNjdGxcIlxuK1x0ZmlcbitcdGlmIFsgLXogXCIke1BST0RfU1lTQ1RMfVwiIF07IHRoZW5cbitcdFx0UFJPRF9TWVNDVEw9XCIvcHJvYy9zeXNcIlxuK1x0ZmlcbitcdGlmIFsgLXogXCIke1dSSVRFU19TVFJJQ1R9XCIgXTsgdGhlblxuK1x0XHRXUklURVNfU1RSSUNUPVwiJHtQUk9EX1NZU0NUTH0va2VybmVsL3N5c2N0bF93cml0ZXNfc3RyaWN0XCJcbitcdGZpXG4rXHRpZiBbIC16IFwiJHtCSVRNQVBfSVRFUkFUSU9OU31cIiBdOyB0aGVuXG4rXHRcdEJJVE1BUF9JVEVSQVRJT05TPTUwXG4rXHRmaVxuK1x0IyBTZXQgc2VlZCBmb3IgYml0bWFwIHJhbmRvbSB0ZXN0c1xuK1x0aWYgWyAteiBcIiR7QklUTUFQX1NFRUR9XCIgXTsgdGhlblxuK1x0XHRCSVRNQVBfU0VFRD0kUkFORE9NXG4gXHRmaVxuLVx0ZGF0ZVxuLVx0ZWNobyBcIlJ1bm5pbmcgdGVzdDogJDIgLSBydW4gIyQxXCJcbiB9XG4gXG4tZnVuY3Rpb24gd2F0Y2hfY2FzZSgpXG4rY2hlY2tfcHJvZHVjdGlvbl9zeXNjdGxfd3JpdGVzX3N0cmljdCgpXG4ge1xuLVx0aT0wXG4tXHR3aGlsZSBbIDEgXTsgZG9cbi1cbi1cdFx0aWYgWyAkIyAtZXEgMSBdOyB0aGVuXG4tXHRcdFx0dGVzdF9udW0gJDFcbi1cdFx0XHR3YXRjaF9sb2cgJGkgJHtURVNUX05BTUV9X3Rlc3RfJDFcbi1cdFx0XHQke1RFU1RfTkFNRX1fdGVzdF8kMVxuLVx0XHRlbHNlXG4tXHRcdFx0d2F0Y2hfbG9nICRpIGFsbFxuLVx0XHRcdHJ1bl9hbGxfdGVzdHNcbitcdGlmIFsgISAtZSBcIiR7V1JJVEVTX1NUUklDVH1cIiBdOyB0aGVuXG4rXHRcdGt0YXBfcHJpbnRfbXNnIFwiJHtXUklURVNfU1RSSUNUfSBtaXNzaW5nLCBza2lwcGluZyBzdHJpY3Qgd3JpdGUgY2hlY2sgKG9sZCBrZXJuZWw/KVwiXG4rXHRlbHNlXG4rXHRcdG9sZF9zdHJpY3Q9JChjYXQgXCIke1dSSVRFU19TVFJJQ1R9XCIpXG4rXHRcdGlmIFsgXCIkb2xkX3N0cmljdFwiICE9IFwiMVwiIF07IHRoZW5cbitcdFx0XHRrdGFwX3ByaW50X21zZyBcImZvcmNpbmcgJHtXUklURVNfU1RSSUNUfSB0byAxICh3YXMgJHtvbGRfc3RyaWN0fSlcIlxuK1x0XHRcdGVjaG8gXCIxXCIgXHUwMDNlIFwiJHtXUklURVNfU1RSSUNUfVwiXG4gXHRcdGZpXG4tXHRcdGxldCBpPSRpKzFcbi1cdGRvbmVcbitcdGZpXG4rXG4rXHRpZiBbIC16IFwiJHtQQUdFX1NJWkV9XCIgXTsgdGhlblxuK1x0XHRQQUdFX1NJWkU9JChnZXRjb25mIFBBR0VTSVpFKVxuK1x0ZmlcbitcdGlmIFsgLXogXCIke01BWF9ESUdJVFN9XCIgXTsgdGhlblxuK1x0XHRNQVhfRElHSVRTPSQoKFBBR0VfU0laRSAvIDgpKVxuK1x0ZmlcbitcdGlmIFsgLXogXCIke0lOVF9NQVh9XCIgXTsgdGhlblxuK1x0XHRJTlRfTUFYPSQoZ2V0Y29uZiBJTlRfTUFYKVxuK1x0ZmlcbitcdGlmIFsgLXogXCIke1VJTlRfTUFYfVwiIF07IHRoZW5cbitcdFx0VUlOVF9NQVg9JChnZXRjb25mIFVJTlRfTUFYKVxuK1x0ZmlcbiB9XG4gXG4tZnVuY3Rpb24gdGVzdF9jYXNlKClcbitsb2FkX3JlcV9tb2QoKVxuIHtcbi1cdFRFU1RfSUQ9JDFcbi1cdE5VTV9URVNUUz0kMlxuLVx0VEFSR0VUPSQzXG4tXG4tXHRpZiBza2lwX3Rlc3QgJFRFU1RfSUQgJFRBUkdFVDsgdGhlblxuLVx0XHRyZXR1cm5cbitcdGlmIFsgISAtZCBcIiR7U1lTQ1RMfVwiIF07IHRoZW5cbitcdFx0aWYgISBtb2Rwcm9iZSAtcSAtbiBcIiR7VEVTVF9EUklWRVJ9XCI7IHRoZW5cbitcdFx0XHRrdGFwX3NraXBfYWxsIFwibW9kdWxlICR7VEVTVF9EUklWRVJ9IG5vdCBmb3VuZC4gXFxcbitcdFx0XHRcdFlvdSBtdXN0IHNldCBDT05GSUdfVEVTVF9TWVNDVEw9bSBpbiB5b3VyIGtlcm5lbFwiXG4rXHRcdFx0ZXhpdCBcIiRLU0ZUX1NLSVBcIlxuK1x0XHRmaVxuK1x0XHRpZiAhIG1vZHByb2JlIFwiJHtURVNUX0RSSVZFUn1cIjsgdGhlblxuK1x0XHRcdGt0YXBfZXhpdF9mYWlsX21zZyBcIm1vZHByb2JlICR7VEVTVF9EUklWRVJ9IGZhaWxlZFwiXG4rXHRcdGZpXG4gXHRmaVxuLVxuLVx0aT0wXG4tXHR3aGlsZSBbICRpIC1sdCAkTlVNX1RFU1RTIF07IGRvXG4tXHRcdHRlc3RfbnVtICRURVNUX0lEXG4tXHRcdHdhdGNoX2xvZyAkaSAke1RFU1RfTkFNRX1fdGVzdF8ke1RFU1RfSUR9IG5vY2xlYXJcbi1cdFx0UlVOX1RFU1Q9JHtURVNUX05BTUV9X3Rlc3RfJHtURVNUX0lEfVxuLVx0XHQkUlVOX1RFU1Rcbi1cdFx0bGV0IGk9JGkrMVxuLVx0ZG9uZVxuIH1cbiBcbi1mdW5jdGlvbiBwYXJzZV9hcmdzKClcbisjIENsZWFudXAgb25seSEgRG8gbm90IGNhbGwgZXhpdCBoZXJlIG9yIGl0IHdpbGwgc2lsZW50bHkgb3ZlcnJpZGUgS1RBUCBleGl0IHN0YXR1c1xuK3Jlc3RvcmVfc3lzY3RsX3dyaXRlc19zdHJpY3QoKVxuIHtcbi1cdGlmIFsgJCMgLWVxIDAgXTsgdGhlblxuLVx0XHRydW5fYWxsX3Rlc3RzXG4tXHRlbHNlXG4tXHRcdGlmIFtbIFwiJDFcIiA9IFwiYWxsXCIgXV07IHRoZW5cbi1cdFx0XHRydW5fYWxsX3Rlc3RzXG4tXHRcdGVsaWYgW1sgXCIkMVwiID0gXCItd1wiIF1dOyB0aGVuXG4tXHRcdFx0c2hpZnRcbi1cdFx0XHR3YXRjaF9jYXNlICRAXG4tXHRcdGVsaWYgW1sgXCIkMVwiID0gXCItdFwiIF1dOyB0aGVuXG4tXHRcdFx0c2hpZnRcbi1cdFx0XHR0ZXN0X251bSAkMVxuLVx0XHRcdHRlc3RfY2FzZSAkMSAkKGdldF90ZXN0X2NvdW50ICQxKSAkKGdldF90ZXN0X3RhcmdldCAkMSlcbi1cdFx0ZWxpZiBbWyBcIiQxXCIgPSBcIi1jXCIgXV07IHRoZW5cbi1cdFx0XHRzaGlmdFxuLVx0XHRcdHRlc3RfbnVtICQxXG4tXHRcdFx0dGVzdF9udW0gJDJcbi1cdFx0XHR0ZXN0X2Nhc2UgJDEgJDIgJChnZXRfdGVzdF90YXJnZXQgJDEpXG4tXHRcdGVsaWYgW1sgXCIkMVwiID0gXCItc1wiIF1dOyB0aGVuXG4tXHRcdFx0c2hpZnRcbi1cdFx0XHR0ZXN0X2Nhc2UgJDEgMSAkKGdldF90ZXN0X3RhcmdldCAkMSlcbi1cdFx0ZWxpZiBbWyBcIiQxXCIgPSBcIi1sXCIgXV07IHRoZW5cbi1cdFx0XHRsaXN0X3Rlc3RzXG4tXHRcdGVsaWYgW1sgXCIkMVwiID0gXCItaFwiIHx8IFwiJDFcIiA9IFwiLS1oZWxwXCIgXV07IHRoZW5cbi1cdFx0XHR1c2FnZVxuLVx0XHRlbHNlXG4tXHRcdFx0dXNhZ2Vcbi1cdFx0ZmlcbitcdGlmIFsgLW4gXCIke29sZF9zdHJpY3R9XCIgXTsgdGhlblxuK1x0XHRlY2hvIFwiJHtvbGRfc3RyaWN0fVwiIFx1MDAzZSBcIiR7V1JJVEVTX1NUUklDVH1cIlxuIFx0ZmlcbiB9XG4gXG4tdGVzdF9yZXFzXG4gYWxsb3dfdXNlcl9kZWZhdWx0c1xuK1xuKyMgRWFjaCBiaXRtYXAgaXRlcmF0aW9uIGlzIG9uZSBmdW5jdGlvbiB0byBnZW5lcmF0ZSBvbmUgS1RBUCByZXBvcnQgcGVyIGl0ZXJhdGlvblxuK2ZvciBpIGluICQoc2VxIDEgXCIkQklUTUFQX0lURVJBVElPTlNcIik7IGRvXG4rXHRldmFsIFwidGVzdF9iaXRtYXBfcmFuZ2VfY2hlY2tfJChwcmludGYgJyUwMmQnIFwiJGlcIikoKSBcXFxuK1x0XHR7IFxcXG4rXHRcdFx0Yml0bWFwX3JhbmdlX2NoZWNrX29uY2UgJGk7IFxcXG4rXHRcdH1cIlxuK2RvbmVcbitcbisjIERpc2NvdmVyIHRlc3RfKiBmdW5jdGlvbnMgYWJvdmUgdGhpcyBsaW5lXG4rQUxMX1RFU1RTPSQoZGVjbGFyZSAtRiB8IGF3ayAne3ByaW50ICQzfScgfCBncmVwICdedGVzdF8nIHwgc29ydClcbitcbitSRVBFQVQ9MVxuK3doaWxlIFsgJCMgLWd0IDAgXTsgZG9cbitcdGNhc2UgXCIkMVwiIGluXG4rXHQtciApXG4rXHRcdHNoaWZ0XG4rXHRcdFJFUEVBVD0kMVxuK1x0XHQ7O1xuK1x0LWwgKVxuK1x0XHRsaXN0X3Rlc3RzXG4rXHRcdGV4aXQgMFxuK1x0XHQ7O1xuK1x0LWggfCAtLWhlbHAgKVxuK1x0XHR1c2FnZVxuK1x0XHRleGl0IDBcbitcdFx0OztcbitcdC10IClcbitcdFx0c2hpZnRcbitcdFx0U1lTQ1RMX1RFU1RTPVwiJDFcIlxuK1x0XHQ7O1xuK1x0LXMgKVxuK1x0XHRzaGlmdFxuK1x0XHRCSVRNQVBfU0VFRD1cIiQxXCJcbitcdFx0OztcbitcdCogKVxuK1x0XHR1c2FnZVxuK1x0XHRleGl0IDFcbitcdFx0OztcbitcdGVzYWNcbitcdHNoaWZ0XG4rZG9uZVxuK1xuK1NFTEVDVEVEPSR7U1lTQ1RMX1RFU1RTLSRBTExfVEVTVFN9XG4rXG4ra3RhcF9wcmludF9oZWFkZXJcbit0cmFwIHJlc3RvcmVfc3lzY3RsX3dyaXRlc19zdHJpY3QgRVhJVFxuK2NoZWNrX2FyZ3MgXCIkUkVQRUFUXCIgXCIkU0VMRUNURURcIiBcIiRCSVRNQVBfU0VFRFwiXG4rY2hlY2tfcmVxc1xuIGNoZWNrX3Byb2R1Y3Rpb25fc3lzY3RsX3dyaXRlc19zdHJpY3RcbiBsb2FkX3JlcV9tb2RcbiBcbi10cmFwIFwidGVzdF9maW5pc2hcIiBFWElUXG4ra3RhcF9wcmludF9tc2cgXCJiaXRtYXAgYmFzZSBzZWVkOiAkQklUTUFQX1NFRUQgKHJlcGxheSB3aXRoIC1zICRCSVRNQVBfU0VFRClcIlxuIFxuLXBhcnNlX2FyZ3MgJEBcbitrdGFwX3NldF9wbGFuIFwiJCgoICQod2MgLXcgXHUwMDNjXHUwMDNjXHUwMDNjIFwiJFNFTEVDVEVEXCIpICogUkVQRUFUICkpXCJcbitcbitmb3IgKChpID0gMDsgaSBcdTAwM2MgUkVQRUFUOyBpKyspKTsgZG9cbitcdGZvciB0IGluICRTRUxFQ1RFRDsgZG9cbitcdFx0cnVuX29uZSBcIiR0XCJcbitcdGRvbmVcbitkb25lXG4gXG4tZXhpdCAwXG4ra3RhcF9maW5pc2hlZFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6Mzk6MDcuNTM1MDY1MDg3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDE2MjIwOTc4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEV2YWx1YXRpb246IFF1aWNrIERlY2lzaW9uKipcblxuT2theSwgbGV0J3MgYXNzZXNzIHRoaXMgcGF0Y2ggc2VyaWVzIGZvciBzeXprYWxsZXIgZnV6emluZyBwb3RlbnRpYWwuIFRoZSBkaWZmIGlzIGZvY3VzZWQsIG9ubHkgdG91Y2hpbmcgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2N0bC9zeXNjdGwuc2hgLiBUaW1lIHRvIGFwcGx5IHRoZSBjcml0ZXJpYS4gQWNjb3JkaW5nIHRvIHRoZSBndWlkZWxpbmVzLCBtb2RpZmljYXRpb25zIHN0cmljdGx5IHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYCBmYWxsIHVuZGVyIHRoZSBcIk5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXNcIiBjYXRlZ29yeS4gVGhpcyBzcGVjaWZpY2FsbHkgbWVhbnMgdGhlIGNoYW5nZXMgZG9uJ3QgYWZmZWN0IHRoZSBrZXJuZWwgaW1hZ2Ugb3IgbW9kdWxlcy4gVGhlcmVmb3JlLCBpdCdzIGEgY2xlYXIgXCJXb3J0aEZ1enppbmcgPSBmYWxzZVwiIHNpdHVhdGlvbi4gTm8gbmVlZCB0byBkZWx2ZSBmdXJ0aGVyIOKAkyB0aGUgc2NyaXB0IGlzIHVzZXItc3BhY2Ugc2VsZnRlc3Qgb25seS4gSSdsbCBjb25maXJtIHdpdGggYSBxdWljayBkb3VibGUtY2hlY2sgdXNpbmcgYGdpdCBkaWZmYCAob3IgdGhlIHByb3ZpZGVkIGRpZmYgZGV0YWlscykganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGJ1dCBteSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgZmlybS5cblxuSSBjYW4gY29uZmlkZW50bHkgY29uY2x1ZGU6XG5cbiogICBgV29ydGhGdXp6aW5nID0gZmFsc2VgXG4qICAgYEZvY3VzU3ltYm9scyA9IFtdYFxuKiAgIGBFbmFibGVDb25maWdzID0gW11gXG5cblRoZSByZWFzb25pbmcgaGVyZSBpcyBjcnlzdGFsIGNsZWFyOiB0aGlzIHBhdGNoIGlzIGxpbWl0ZWQgdG8gbW9kaWZ5aW5nIGEgc2VsZnRlc3Qgc2NyaXB0IGluIHVzZXIgc3BhY2UsIGFuZCB0aHVzIGRvZXNuJ3QgaW1wYWN0IGFueSBrZXJuZWwgY29kZS4gUmVhZHkgdG8gcGFzcyB0aGlzIGluZm9ybWF0aW9uIGFsb25nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDc5MywiT3V0cHV0VG9rZW5zIjo5NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjM5OjExLjY5NzI4NjYwNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB0aGUgdXNlci1zcGFjZSBzZWxmdGVzdCBzY3JpcHQgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc3lzY3RsL3N5c2N0bC5zaCB0byBtb2Rlcm5pemUgaXQgYW5kIHVzZSBrdGFwX2hlbHBlcnMuIEl0IGRvZXMgbm90IHRvdWNoIGFueSBrZXJuZWwgc291cmNlIGNvZGUsIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCksIG9yIGtlcm5lbCBtb2R1bGVzLCBzbyBpdCBpcyBub3Qgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG9ubHkgdGhlIHVzZXItc3BhY2Ugc2VsZnRlc3Qgc2NyaXB0IHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3N5c2N0bC9zeXNjdGwuc2ggdG8gbW9kZXJuaXplIGl0IGFuZCB1c2Uga3RhcF9oZWxwZXJzLiBJdCBkb2VzIG5vdCB0b3VjaCBhbnkga2VybmVsIHNvdXJjZSBjb2RlLCBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpLCBvciBrZXJuZWwgbW9kdWxlcywgc28gaXQgaXMgbm90IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzozOToxMS42OTczMTczMjVaIiwiU2VxIjo1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkvqqt[1] Phase: Running StartedAt: 2026-09-14 13:39:23 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvqqt[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-14 13:39:23 +0000 UTC FinishedAt: 2026-09-14 13:39:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}