Name: series-workflowxtmxh Phase: Failed StartedAt: 2026-07-25 03:49:20 +0000 UTC FinishedAt: 2026-07-25 04:16:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxtmxh[0] Phase: Succeeded StartedAt: 2026-07-25 03:49:20 +0000 UTC FinishedAt: 2026-07-25 04:15:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxtmxh[0].run-triage Phase: Succeeded StartedAt: 2026-07-25 03:49:20 +0000 UTC FinishedAt: 2026-07-25 04:15:47 +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+CgkJCTx0ZD4yMDI2LzA3LzI1IDA0OjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHRlc3Qgc2NyaXB0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA0OjE1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTllNmIwNzBiNjZhNzRkYWEzZDRiNGMxYTgwMWY3YmNlMzM3YTY5OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDI1IDA0OjE1OjIzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZ1xuaW5kZXggMjA3MGU4OTBlMDY0ZTUuLmYzOTMzY2YzZTZiZTYxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9jb25maWdcbkBAIC00LDggJiM0Mzs0LDExIEBAIENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTPW5cbiBDT05GSUdfSU5FVF9QU1A9eVxuIENPTkZJR19JUFY2PXlcbiBDT05GSUdfTUFDU0VDPW1cbiYjNDM7Q09ORklHX05FVF9BQ1RfU0tCRURJVD1tXG4gQ09ORklHX05FVF9DTFNfQUNUPXlcbiBDT05GSUdfTkVUX0NMU19CUEY9eVxuJiM0MztDT05GSUdfTkVUX0NMU19GTE9XRVI9bVxuJiM0MztDT05GSUdfTkVUX0NMU19NQVRDSEFMTD1tXG4gQ09ORklHX05FVENPTlNPTEU9bVxuIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUM9eVxuIENPTkZJR19ORVRDT05TT0xFX0VYVEVOREVEX0xPRz15XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbGliL3B5L2Vudi5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2xpYi9weS9lbnYucHlcbmluZGV4IGU0YWNmM2Q4MzMzZmQwLi5iMWM2ZjZjZWY3ZGQyNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2xpYi9weS9lbnYucHlcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2xpYi9weS9lbnYucHlcbkBAIC0xMTQsMTAgJiM0MzsxMTQsMTEgQEAgY2xhc3MgTmV0RHJ2RXBFbnYoTmV0RHJ2RW52QmFzZSk6XG4gICAgIG5zaW1fdjRfcGZ4ID0gXCYjMzQ7MTkyLjAuMi5cJiMzNDtcbiAgICAgbnNpbV92Nl9wZnggPSBcJiMzNDsyMDAxOmRiODo6XCYjMzQ7XG4gXG4tICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzcmNfcGF0aCwgbnNpbV90ZXN0PU5vbmUpOlxuJiM0MzsgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNyY19wYXRoLCBuc2ltX3Rlc3Q9Tm9uZSwgcXVldWVfY291bnQ9Tm9uZSk6XG4gICAgICAgICBzdXBlcigpLl9faW5pdF9fKHNyY19wYXRoKVxuIFxuICAgICAgICAgc2VsZi5fc3RhdHNfc2V0dGxlX3RpbWUgPSBOb25lXG4mIzQzOyAgICAgICAgc2VsZi5fcXVldWVfY291bnQgPSBxdWV1ZV9jb3VudFxuIFxuICAgICAgICAgIyBUaGluZ3Mgd2UgdHJ5IHRvIGRlc3Ryb3lcbiAgICAgICAgIHNlbGYucmVtb3RlID0gTm9uZVxuQEAgLTE3Myw5ICYjNDM7MTc0LDEzIEBAIGNsYXNzIE5ldERydkVwRW52KE5ldERydkVudkJhc2UpOlxuICAgICAgICAgc2VsZi5fcmVxdWlyZWRfY21kID0ge31cbiBcbiAgICAgZGVmIGNyZWF0ZV9sb2NhbChzZWxmKTpcbiYjNDM7ICAgICAgICBuc2ltX2t3YXJncyA9IHt9XG4mIzQzOyAgICAgICAgaWYgc2VsZi5fcXVldWVfY291bnQ6XG4mIzQzOyAgICAgICAgICAgIG5zaW1fa3dhcmdzW1wmIzM0O3F1ZXVlX2NvdW50XCYjMzQ7XSA9IHNlbGYuX3F1ZXVlX2NvdW50XG4mIzQzO1xuICAgICAgICAgc2VsZi5fbmV0bnMgPSBOZXROUygpXG4tICAgICAgICBzZWxmLl9ucyA9IE5ldGRldlNpbURldigpXG4tICAgICAgICBzZWxmLl9uc19wZWVyID0gTmV0ZGV2U2ltRGV2KG5zPXNlbGYuX25ldG5zKVxuJiM0MzsgICAgICAgIHNlbGYuX25zID0gTmV0ZGV2U2ltRGV2KCoqbnNpbV9rd2FyZ3MpXG4mIzQzOyAgICAgICAgc2VsZi5fbnNfcGVlciA9IE5ldGRldlNpbURldihucz1zZWxmLl9uZXRucywgKipuc2ltX2t3YXJncylcbiBcbiAgICAgICAgIHdpdGggb3BlbihcJiMzNDsvcHJvYy9zZWxmL25zL25ldFwmIzM0OykgYXMgbnNmZDAsIFxcXG4gICAgICAgICAgICAgIG9wZW4oXCYjMzQ7L3Zhci9ydW4vbmV0bnMvXCYjMzQ7ICYjNDM7IHNlbGYuX25ldG5zLm5hbWUpIGFzIG5zZmQxOlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3JpbmdfcmVjb25maWcucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9yaW5nX3JlY29uZmlnLnB5XG5pbmRleCBmOTUzMGE4YjA4NTY3Zi4uYTVhMmRlZmM0ZmIxM2MgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9yaW5nX3JlY29uZmlnLnB5XG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9yaW5nX3JlY29uZmlnLnB5XG5AQCAtNSwxMCAmIzQzOzUsMjEgQEBcbiBUZXN0IGNoYW5uZWwgYW5kIHJpbmcgc2l6ZSBjb25maWd1cmF0aW9uIHZpYSBldGh0b29sICgtTCAvIC1HKS5cbiBcJiMzNDtcJiMzNDtcJiMzNDtcbiBcbiYjNDM7aW1wb3J0IHNvY2tldFxuJiM0MztpbXBvcnQgc3RydWN0XG4mIzQzO2ltcG9ydCB0aW1lXG4mIzQzO1xuIGZyb20gbGliLnB5IGltcG9ydCBrc2Z0X3J1biwga3NmdF9leGl0LCBrc2Z0X3ByXG4gZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfZXFcbiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IEtzZnRTa2lwRXgsIEtzZnRGYWlsRXhcbiBmcm9tIGxpYi5weSBpbXBvcnQgTmV0RHJ2RXBFbnYsIEV0aHRvb2xGYW1pbHksIEdlbmVyYXRlVHJhZmZpY1xuLWZyb20gbGliLnB5IGltcG9ydCBkZWZlciwgTmxFcnJvclxuJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQgY21kLCBkZWZlciwgcmFuZF9wb3J0LCB0YywgTmxFcnJvclxuJiM0MztcbiYjNDM7IyBBZGRlZCBpbiBQeXRob24gMy4xMzsgZmFsbGJhY2sgdG8gNjEgZm9yIHg4Ni9BUk0vTUlQU1xuJiM0MztTT19UWFRJTUUgPSBnZXRhdHRyKHNvY2tldCwgXCYjMzQ7U09fVFhUSU1FXCYjMzQ7LCA2MSlcbiYjNDM7XG4mIzQzOyMgVFggcmluZyBzaXplIHRoZSB0ZXN0IHNocmlua3MgdG8gc28gdGhlIHJpbmcgZmlsbHMgcXVpY2tseS5cbiYjNDM7TUlOX1RYX1JJTkcgPSA2NFxuIFxuIFxuIGRlZiBjaGFubmVscyhjZmcpIC1cdTAwM2UgTm9uZTpcbkBAIC0xNTEsMTQgJiM0MzsxNjIsMjA0IEBAIGRlZiByaW5ncGFyYW0oY2ZnKSAtXHUwMDNlIE5vbmU6XG4gICAgICAgICBHZW5lcmF0ZVRyYWZmaWMoY2ZnKS53YWl0X3BrdHNfYW5kX3N0b3AoMTAwMDApXG4gXG4gXG4mIzQzO2RlZiBfd3JpdGVfZmlsZShwYXRoLCB2YWwpOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7V3JpdGUgdmFsIHRvIGEgZmlsZS5cJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7ICAgIHdpdGggb3BlbihwYXRoLCBcJiMzNDt3XCYjMzQ7LCBlbmNvZGluZz1cJiMzNDt1dGYtOFwmIzM0OykgYXMgZnA6XG4mIzQzOyAgICAgICAgZnAud3JpdGUoc3RyKHZhbCkpXG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIF93cml0ZV9zeXNmcyhwYXRoLCB2YWwpOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7V3JpdGUgdmFsIHRvIGEgc3lzZnMgZmlsZSwgcmVzdG9yaW5nIHRoZSBvcmlnaW5hbCB2YWx1ZSBvbiBleGl0LlwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgd2l0aCBvcGVuKHBhdGgsIFwmIzM0O3JcJiMzNDssIGVuY29kaW5nPVwmIzM0O3V0Zi04XCYjMzQ7KSBhcyBmcDpcbiYjNDM7ICAgICAgICBvcmlnX3ZhbCA9IGZwLnJlYWQoKS5zdHJpcCgpXG4mIzQzOyAgICBpZiBzdHIodmFsKSA9PSBvcmlnX3ZhbDpcbiYjNDM7ICAgICAgICByZXR1cm5cbiYjNDM7ICAgIF93cml0ZV9maWxlKHBhdGgsIHZhbClcbiYjNDM7ICAgIGRlZmVyKF93cml0ZV9maWxlLCBwYXRoLCBvcmlnX3ZhbClcbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgX2dldF9xZGlzY19iYWNrbG9nKGNmZywgbXFfaGFuZGxlLCBxdWV1ZSk6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtSZXR1cm4gdGhlIHFkaXNjIGJhY2tsb2cgKGJ5dGVzKSBmb3IgdGhlIGdpdmVuIFRYIHF1ZXVlJiMzOTtzIGxlYWYuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzOyAgICB0YXJnZXRfcGFyZW50ID0gZlwmIzM0O3ttcV9oYW5kbGV9e3F1ZXVlICYjNDM7IDE6eH1cJiMzNDtcbiYjNDM7ICAgIGZvciBxIGluIHRjKGZcJiMzNDstcyBxZGlzYyBzaG93IGRldiB7Y2ZnLmlmbmFtZX1cJiMzNDssIGpzb249VHJ1ZSk6XG4mIzQzOyAgICAgICAgaWYgcS5nZXQoXCYjMzQ7cGFyZW50XCYjMzQ7LCBcJiMzNDtcJiMzNDspID09IHRhcmdldF9wYXJlbnQ6XG4mIzQzOyAgICAgICAgICAgIHJldHVybiBxLmdldChcJiMzNDtiYWNrbG9nXCYjMzQ7KSBvciAwXG4mIzQzOyAgICByZXR1cm4gMFxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiBfc2V0dXBfZnFfcWRpc2MoY2ZnLCBwb3J0LCB0YXJnZXRfcXVldWUsIG90aGVyX3F1ZXVlKTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1B1dCBhbiBmcSBxZGlzYyBvbiB0YXJnZXRfcXVldWUmIzM5O3MgbGVhZiBhbmQgcmV0dXJuIHRoZSBtcSBoYW5kbGUgaW4gdXNlLlxuJiM0MztcbiYjNDM7ICAgIFdlIG11c3Qgbm90IGRpc3R1cmIgdGhlIGRldmljZSYjMzk7cyBleGlzdGluZyBUWC9SWCBxZGlzYyBwb2xpY3kuIE9uIGEgcmVhbFxuJiM0MzsgICAgTklDIHRoZSByb290IG1xIGFscmVhZHkgaGFzIGFuIGFkZHJlc3NhYmxlIGhhbmRsZSwgc28gd2UgbGVhdmUgdGhlIHJvb3RcbiYjNDM7ICAgIGFuZCBldmVyeSBvdGhlciBxdWV1ZSBhbG9uZSBhbmQgb25seSBzd2FwIHRoaXMgb25lIGxlYWYsIHJlc3RvcmluZyBpdHNcbiYjNDM7ICAgIG9yaWdpbmFsIHFkaXNjIGFmdGVyd2FyZHMuXG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7ICAgIHFkaXNjcyA9IHRjKGZcJiMzNDtxZGlzYyBzaG93IGRldiB7Y2ZnLmlmbmFtZX1cJiMzNDssIGpzb249VHJ1ZSlcbiYjNDM7ICAgIHJvb3QgPSBuZXh0KChxIGZvciBxIGluIHFkaXNjcyBpZiBxLmdldChcJiMzNDtyb290XCYjMzQ7KSksIE5vbmUpXG4mIzQzO1xuJiM0MzsgICAgaWYgcm9vdCBhbmQgcm9vdFtcJiMzNDtraW5kXCYjMzQ7XSA9PSBcJiMzNDttcVwmIzM0OyBhbmQgcm9vdFtcJiMzNDtoYW5kbGVcJiMzNDtdICE9IFwmIzM0OzA6XCYjMzQ7OlxuJiM0MzsgICAgICAgICMgQWRkcmVzc2FibGUgbXEgKHByZXZpb3VzbHktY29uZmlndXJlZCk6IHRvdWNoIG9ubHkgdGhlIHRhcmdldCBxdWV1ZSYjMzk7c1xuJiM0MzsgICAgICAgICMgbGVhZiBhbmQgcmVzdG9yZSBpdHMgb3JpZ2luYWwgcWRpc2MgYWZ0ZXJ3YXJkcy5cbiYjNDM7ICAgICAgICBtcV9oYW5kbGUgPSByb290W1wmIzM0O2hhbmRsZVwmIzM0O11cbiYjNDM7ICAgICAgICBwYXJlbnQgPSBmXCYjMzQ7e21xX2hhbmRsZX17dGFyZ2V0X3F1ZXVlICYjNDM7IDE6eH1cJiMzNDtcbiYjNDM7ICAgICAgICBvcmlnID0gbmV4dCgocSBmb3IgcSBpbiBxZGlzY3MgaWYgcS5nZXQoXCYjMzQ7cGFyZW50XCYjMzQ7KSA9PSBwYXJlbnQpLCBOb25lKVxuJiM0MzsgICAgICAgIG9yaWdfa2luZCA9IG9yaWdbXCYjMzQ7a2luZFwmIzM0O10gaWYgb3JpZyBlbHNlIFxcXG4mIzQzOyAgICAgICAgICAgIGNtZChcJiMzNDtzeXNjdGwgLW4gbmV0LmNvcmUuZGVmYXVsdF9xZGlzY1wmIzM0Oykuc3Rkb3V0LnN0cmlwKClcbiYjNDM7ICAgICAgICBkZWZlcih0YywgZlwmIzM0O3FkaXNjIHJlcGxhY2UgZGV2IHtjZmcuaWZuYW1lfSBwYXJlbnQge3BhcmVudH0ge29yaWdfa2luZH1cJiMzNDspXG4mIzQzOyAgICBlbGlmIHJvb3QgaXMgTm9uZSBvciByb290W1wmIzM0O2tpbmRcJiMzNDtdIGluIChcJiMzNDttcVwmIzM0OywgXCYjMzQ7bm9xdWV1ZVwmIzM0Oyk6XG4mIzQzOyAgICAgICAgIyBUaGUgYXV0by1hdHRhY2hlZCByb290IG1xIGhhcyBoYW5kbGUgMDogb24gYW55IGRldmljZSAocmVhbCBvciBzaW0pLFxuJiM0MzsgICAgICAgICMgd2hpY2ggdGhlIGtlcm5lbCByZWplY3RzIGFzIGEgcWRpc2MgcGFyZW50LiBBIDA6IGhhbmRsZSBtZWFucyB0aGUgbXFcbiYjNDM7ICAgICAgICAjIGlzIHRoZSB1bnRvdWNoZWQga2VybmVsIGRlZmF1bHQgLSBubyBjdXN0b20gY2hpbGQgcWRpc2NzIGNhbiBoYW5nIG9mZlxuJiM0MzsgICAgICAgICMgYW4gdW5hZGRyZXNzYWJsZSBwYXJlbnQgLSBzbyBpbnN0YWxsaW5nIGEgcmVhbCBoYW5kbGUgYW5kIHJlc3RvcmluZ1xuJiM0MzsgICAgICAgICMgdGhlIGRlZmF1bHQgbXEgb24gZXhpdCBwcmVzZXJ2ZXMgdGhlIGRldmljZSYjMzk7cyBlZmZlY3RpdmUgcG9saWN5LlxuJiM0MzsgICAgICAgIG1xX2hhbmRsZSA9IFwmIzM0OzE6XCYjMzQ7XG4mIzQzOyAgICAgICAgdGMoZlwmIzM0O3FkaXNjIHJlcGxhY2UgZGV2IHtjZmcuaWZuYW1lfSByb290IGhhbmRsZSB7bXFfaGFuZGxlfSBtcVwmIzM0OylcbiYjNDM7ICAgICAgICBkZWZlcih0YywgZlwmIzM0O3FkaXNjIHJlcGxhY2UgZGV2IHtjZmcuaWZuYW1lfSByb290IG1xXCYjMzQ7KVxuJiM0MzsgICAgICAgIHBhcmVudCA9IGZcJiMzNDt7bXFfaGFuZGxlfXt0YXJnZXRfcXVldWUgJiM0MzsgMTp4fVwmIzM0O1xuJiM0MzsgICAgZWxzZTpcbiYjNDM7ICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KGZcJiMzNDtyb290IHFkaXNjICYjMzk7e3Jvb3RbJiMzOTtraW5kJiMzOTtdfSYjMzk7IGlzIG5vdCBtcTsgXCYjMzQ7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICBcJiMzNDtyZWZ1c2luZyB0byBkaXN0dXJiIGV4aXN0aW5nIHFkaXNjIHBvbGljeVwmIzM0OylcbiYjNDM7XG4mIzQzOyAgICB0cnk6XG4mIzQzOyAgICAgICAgdGMoZlwmIzM0O3FkaXNjIHJlcGxhY2UgZGV2IHtjZmcuaWZuYW1lfSBwYXJlbnQge3BhcmVudH0gZnFcJiMzNDspXG4mIzQzOyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzpcbiYjNDM7ICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFxuJiM0MzsgICAgICAgICAgICBmXCYjMzQ7ZnEgbm90IGF2YWlsYWJsZSAoQ09ORklHX05FVF9TQ0hfRlEpOiB7ZXhjfVwmIzM0OykgZnJvbSBleGNcbiYjNDM7XG4mIzQzOyAgICBxZGlzY19qID0gdGMoZlwmIzM0O3FkaXNjIHNob3cgZGV2IHtjZmcuaWZuYW1lfVwmIzM0OywganNvbj1UcnVlKVxuJiM0MzsgICAgaGFzX2Nsc2FjdCA9IGFueShxWyYjMzk7a2luZCYjMzk7XSA9PSAmIzM5O2Nsc2FjdCYjMzk7IGZvciBxIGluIHFkaXNjX2opXG4mIzQzOyAgICBpZiBub3QgaGFzX2Nsc2FjdDpcbiYjNDM7ICAgICAgICB0YyhmXCYjMzQ7cWRpc2MgYWRkIGRldiB7Y2ZnLmlmbmFtZX0gY2xzYWN0XCYjMzQ7KVxuJiM0MzsgICAgICAgIGRlZmVyKHRjLCBmXCYjMzQ7cWRpc2MgZGVsIGRldiB7Y2ZnLmlmbmFtZX0gY2xzYWN0XCYjMzQ7KVxuJiM0MztcbiYjNDM7ICAgIHByb3RvID0gXCYjMzQ7aXB2NlwmIzM0OyBpZiBpbnQoY2ZnLmFkZHJfaXB2ZXIpID09IDYgZWxzZSBcJiMzNDtpcFwmIzM0O1xuJiM0MzsgICAgdHJ5OlxuJiM0MzsgICAgICAgIHRjKGZcJiMzNDtmaWx0ZXIgYWRkIGRldiB7Y2ZnLmlmbmFtZX0gZWdyZXNzIHByb3RvY29sIHtwcm90b30gXCYjMzQ7XG4mIzQzOyAgICAgICAgICAgZlwmIzM0O3ByZWYgMSBmbG93ZXIgaXBfcHJvdG8gdWRwIGRzdF9wb3J0IHtwb3J0fSBcJiMzNDtcbiYjNDM7ICAgICAgICAgICBmXCYjMzQ7YWN0aW9uIHNrYmVkaXQgcXVldWVfbWFwcGluZyB7dGFyZ2V0X3F1ZXVlfVwmIzM0OylcbiYjNDM7ICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOlxuJiM0MzsgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXCYjMzQ7dGMgZmxvd2VyL2FjdF9za2JlZGl0IG5vdCBhdmFpbGFibGVcJiMzNDspIGZyb20gZXhjXG4mIzQzOyAgICBkZWZlcih0YywgZlwmIzM0O2ZpbHRlciBkZWwgZGV2IHtjZmcuaWZuYW1lfSBlZ3Jlc3MgcHJlZiAxXCYjMzQ7KVxuJiM0MztcbiYjNDM7ICAgIHRjKGZcJiMzNDtmaWx0ZXIgYWRkIGRldiB7Y2ZnLmlmbmFtZX0gZWdyZXNzIHByZWYgMTAwIFwmIzM0O1xuJiM0MzsgICAgICAgZlwmIzM0O21hdGNoYWxsIGFjdGlvbiBza2JlZGl0IHF1ZXVlX21hcHBpbmcge290aGVyX3F1ZXVlfVwmIzM0OylcbiYjNDM7ICAgIGRlZmVyKHRjLCBmXCYjMzQ7ZmlsdGVyIGRlbCBkZXYge2NmZy5pZm5hbWV9IGVncmVzcyBwcmVmIDEwMFwmIzM0OylcbiYjNDM7XG4mIzQzOyAgICByZXR1cm4gbXFfaGFuZGxlXG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIF9jcmVhdGVfc290eHRpbWVfc29ja2V0KGNmZyk6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtDcmVhdGUgYSBVRFAgc29ja2V0IHdpdGggU09fVFhUSU1FIGVuYWJsZWQsIGJvdW5kIHRvIHRoZSB0ZXN0IGRldmljZS5cJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7ICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNiBpZiBjZmcuYWRkcl9pcHZlciA9PSBcJiMzNDs2XCYjMzQ7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19ER1JBTSlcbiYjNDM7ICAgIHRyeTpcbiYjNDM7ICAgICAgICBzb2NrLnNldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsIFNPX1RYVElNRSwgc3RydWN0LnBhY2soXCYjMzQ7SWlcJiMzNDssIDEsIDApKVxuJiM0MzsgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOlxuJiM0MzsgICAgICAgIHNvY2suY2xvc2UoKVxuJiM0MzsgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXCYjMzQ7U09fVFhUSU1FIG5vdCBzdXBwb3J0ZWRcJiMzNDspIGZyb20gZXhjXG4mIzQzOyAgICBzb2NrLnNldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19CSU5EVE9ERVZJQ0UsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgY2ZnLmlmbmFtZS5lbmNvZGUoKSlcbiYjNDM7ICAgIHJldHVybiBzb2NrXG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIF9zZW5kX3NvdHh0aW1lX2J1cnN0KGNmZywgc29jaywgcG9ydCwgY291bnQsIGRlbGF5X25zKTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1NlbmQgY291bnQgVURQIHBhY2tldHMgc2NoZWR1bGVkIGRlbGF5X25zIGFoZWFkIHVzaW5nIFNPX1RYVElNRS5cJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7ICAgIHBheWxvYWQgPSBiJiMzOTtcXHgwMCYjMzk7ICogMTQwMFxuJiM0MzsgICAgdHh0aW1lX25zID0gdGltZS5jbG9ja19nZXR0aW1lX25zKHRpbWUuQ0xPQ0tfTU9OT1RPTklDKSAmIzQzOyBkZWxheV9uc1xuJiM0MztcbiYjNDM7ICAgIGFuY2RhdGEgPSBbKHNvY2tldC5TT0xfU09DS0VULCBTT19UWFRJTUUsIHN0cnVjdC5wYWNrKFwmIzM0O1FcJiMzNDssIHR4dGltZV9ucykpXVxuJiM0MzsgICAgaWYgaW50KGNmZy5hZGRyX2lwdmVyKSA9PSA2OlxuJiM0MzsgICAgICAgIGRlc3QgPSAoY2ZnLnJlbW90ZV9hZGRyLCBwb3J0LCAwLCAwKVxuJiM0MzsgICAgZWxzZTpcbiYjNDM7ICAgICAgICBkZXN0ID0gKGNmZy5yZW1vdGVfYWRkciwgcG9ydClcbiYjNDM7ICAgIGZvciBfIGluIHJhbmdlKGNvdW50KTpcbiYjNDM7ICAgICAgICBzb2NrLnNlbmRtc2coW3BheWxvYWRdLCBhbmNkYXRhLCAwLCBkZXN0KVxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiByZWNvbmZpZ190eF9zdGFsbChjZmcpIC1cdTAwM2UgTm9uZTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1Rlc3QgdGhhdCBxZGlzYyBiYWNrbG9nIGRyYWlucyBhZnRlciByaW5nIHJlY29uZmlndXJhdGlvbi5cJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7ICAgIHRhcmdldF9xdWV1ZSA9IDFcbiYjNDM7ICAgIG90aGVyX3F1ZXVlID0gMFxuJiM0MztcbiYjNDM7ICAgIGVoZHIgPSB7JiMzOTtoZWFkZXImIzM5OzogeyYjMzk7ZGV2LWluZGV4JiMzOTs6IGNmZy5pZmluZGV4fX1cbiYjNDM7ICAgIGNoYW5zID0gY2ZnLmV0aC5jaGFubmVsc19nZXQoZWhkcilcbiYjNDM7XG4mIzQzOyAgICBpZiBcJiMzNDtjb21iaW5lZC1tYXhcJiMzNDsgbm90IGluIGNoYW5zOlxuJiM0MzsgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXCYjMzQ7ZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgY29tYmluZWQgY2hhbm5lbHNcJiMzNDspXG4mIzQzOyAgICBpZiBjaGFucy5nZXQoXCYjMzQ7Y29tYmluZWQtbWF4XCYjMzQ7LCAwKSBcdTAwM2MgMjpcbiYjNDM7ICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFwmIzM0O2RldmljZSBkb2VzIG5vdCBzdXBwb3J0IDImIzQzOyBjb21iaW5lZCBjaGFubmVsc1wmIzM0OylcbiYjNDM7ICAgIGlmIGNoYW5zW1wmIzM0O2NvbWJpbmVkLWNvdW50XCYjMzQ7XSBcdTAwM2MgMjpcbiYjNDM7ICAgICAgICBkZWZlcihjZmcuZXRoLmNoYW5uZWxzX3NldCxcbiYjNDM7ICAgICAgICAgICAgICBlaGRyIHwge1wmIzM0O2NvbWJpbmVkLWNvdW50XCYjMzQ7OiBjaGFuc1tcJiMzNDtjb21iaW5lZC1jb3VudFwmIzM0O119KVxuJiM0MzsgICAgICAgIGNmZy5ldGguY2hhbm5lbHNfc2V0KGVoZHIgfCB7XCYjMzQ7Y29tYmluZWQtY291bnRcJiMzNDs6IDJ9KVxuJiM0MztcbiYjNDM7ICAgIHJpbmdzID0gY2ZnLmV0aC5yaW5nc19nZXQoZWhkcilcbiYjNDM7ICAgIGlmICYjMzk7cngmIzM5OyBub3QgaW4gcmluZ3Mgb3IgJiMzOTt0eCYjMzk7IG5vdCBpbiByaW5nczpcbiYjNDM7ICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFwmIzM0O2RldmljZSBkb2VzIG5vdCBleHBvc2UgcngvdHggcmluZyBwYXJhbXNcJiMzNDspXG4mIzQzOyAgICB0eF9jdXIgPSByaW5nc1smIzM5O3R4JiMzOTtdXG4mIzQzOyAgICBpZiB0eF9jdXIgXHUwMDNjPSBNSU5fVFhfUklORzpcbiYjNDM7ICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFwmIzM0O3R4IHJpbmcgc2l6ZSBhbHJlYWR5IGF0IG1pbmltdW1cJiMzNDspXG4mIzQzOyAgICBkZWZlcihjZmcuZXRoLnJpbmdzX3NldCwgZWhkciB8IHsmIzM5O3R4JiMzOTs6IHR4X2N1cn0pXG4mIzQzO1xuJiM0MzsgICAgY2ZnLmV0aC5yaW5nc19zZXQoZWhkciB8IHsmIzM5O3R4JiMzOTs6IE1JTl9UWF9SSU5HfSlcbiYjNDM7XG4mIzQzOyAgICAjIFNsb3cgY29tcGxldGlvbnMgc28gdGhlIHJpbmcgc3RheXMgZnVsbCBhZnRlciBGUSByZWxlYXNlcyBwYWNrZXRzXG4mIzQzOyAgICBuYXBpX2RlZmVyID0gZlwmIzM0Oy9zeXMvY2xhc3MvbmV0L3tjZmcuaWZuYW1lfS9uYXBpX2RlZmVyX2hhcmRfaXJxc1wmIzM0O1xuJiM0MzsgICAgZ3JvX3RpbWVvdXQgPSBmXCYjMzQ7L3N5cy9jbGFzcy9uZXQve2NmZy5pZm5hbWV9L2dyb19mbHVzaF90aW1lb3V0XCYjMzQ7XG4mIzQzOyAgICBfd3JpdGVfc3lzZnMobmFwaV9kZWZlciwgMTAwKVxuJiM0MzsgICAgX3dyaXRlX3N5c2ZzKGdyb190aW1lb3V0LCAxMDAwMDAwMDAwKVxuJiM0MztcbiYjNDM7ICAgIHBvcnQgPSByYW5kX3BvcnQoKVxuJiM0MzsgICAgbXFfaGFuZGxlID0gX3NldHVwX2ZxX3FkaXNjKGNmZywgcG9ydCwgdGFyZ2V0X3F1ZXVlLCBvdGhlcl9xdWV1ZSlcbiYjNDM7XG4mIzQzOyAgICBzb2NrID0gX2NyZWF0ZV9zb3R4dGltZV9zb2NrZXQoY2ZnKVxuJiM0MzsgICAgZGVmZXIoc29jay5jbG9zZSlcbiYjNDM7XG4mIzQzOyAgICBwa3RfY291bnQgPSBNSU5fVFhfUklORyAqIDJcbiYjNDM7XG4mIzQzOyAgICBmb3IgZGVsYXlfbXMgaW4gWzEwMCwgMjAwLCA1MDBdOlxuJiM0MzsgICAgICAgIF9zZW5kX3NvdHh0aW1lX2J1cnN0KGNmZywgc29jaywgcG9ydCwgcGt0X2NvdW50LFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5X21zICogMV8wMDBfMDAwKVxuJiM0MzsgICAgICAgIGtzZnRfcHIoZlwmIzM0O1NlbnQge3BrdF9jb3VudH0gU09fVFhUSU1FIHBhY2tldHMgKCYjNDM7e2RlbGF5X21zfW1zKVwmIzM0OylcbiYjNDM7ICAgICAgICB0aW1lLnNsZWVwKGRlbGF5X21zIC8gMTAwMCAmIzQzOyAwLjMpXG4mIzQzO1xuJiM0MzsgICAgICAgIGJhY2tsb2cgPSBfZ2V0X3FkaXNjX2JhY2tsb2coY2ZnLCBtcV9oYW5kbGUsIHRhcmdldF9xdWV1ZSlcbiYjNDM7ICAgICAgICBpZiBiYWNrbG9nOlxuJiM0MzsgICAgICAgICAgICBicmVha1xuJiM0MzsgICAgZWxzZTpcbiYjNDM7ICAgICAgICByYWlzZSBLc2Z0RmFpbEV4KFwmIzM0O2ZhaWxlZCB0byBidWlsZCBxZGlzYyBiYWNrbG9nXCYjMzQ7KVxuJiM0MztcbiYjNDM7ICAgIGtzZnRfcHIoZlwmIzM0O0JhY2tsb2cgYmVmb3JlIHJlY29uZmlnOiB7YmFja2xvZ30gYnl0ZXNcJiMzNDspXG4mIzQzO1xuJiM0MzsgICAgIyBUcmlnZ2VyIHJpbmcgcmVjb25maWcg4oCUIGRyaXZlciBzaG91bGQgY2FsbCB3YWtlLCBub3QganVzdCBzdGFydFxuJiM0MzsgICAgY2ZnLmV0aC5yaW5nc19zZXQoZWhkciB8IHsmIzM5O3R4JiMzOTs6IHR4X2N1cn0pXG4mIzQzO1xuJiM0MzsgICAgIyBMZXQgY29tcGxldGlvbnMgcHJvY2VlZCBub3JtYWxseVxuJiM0MzsgICAgX3dyaXRlX3N5c2ZzKG5hcGlfZGVmZXIsIDApXG4mIzQzOyAgICBfd3JpdGVfc3lzZnMoZ3JvX3RpbWVvdXQsIDApXG4mIzQzO1xuJiM0MzsgICAgIyBQb2xsIGZvciBiYWNrbG9nIHRvIGRyYWluXG4mIzQzOyAgICBmb3IgXyBpbiByYW5nZSgxMDApOlxuJiM0MzsgICAgICAgIGJhY2tsb2cgPSBfZ2V0X3FkaXNjX2JhY2tsb2coY2ZnLCBtcV9oYW5kbGUsIHRhcmdldF9xdWV1ZSlcbiYjNDM7ICAgICAgICBpZiBub3QgYmFja2xvZzpcbiYjNDM7ICAgICAgICAgICAgYnJlYWtcbiYjNDM7ICAgICAgICB0aW1lLnNsZWVwKDAuMSlcbiYjNDM7XG4mIzQzOyAgICBrc2Z0X2VxKDAsIGJhY2tsb2csXG4mIzQzOyAgICAgICAgICAgIGNvbW1lbnQ9ZlwmIzM0O3FkaXNjIGJhY2tsb2cgc3R1Y2sgb24gcXVldWUge3RhcmdldF9xdWV1ZX0gXCYjMzQ7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgZlwmIzM0O2FmdGVyIHJpbmcgcmVjb25maWdcJiMzNDspXG4mIzQzO1xuJiM0MztcbiBkZWYgbWFpbigpIC1cdTAwM2UgTm9uZTpcbiAgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7IEtzZnQgYm9pbGVyIHBsYXRlIG1haW4gXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4gXG4tICAgIHdpdGggTmV0RHJ2RXBFbnYoX19maWxlX18pIGFzIGNmZzpcbiYjNDM7ICAgIHdpdGggTmV0RHJ2RXBFbnYoX19maWxlX18sIHF1ZXVlX2NvdW50PTIpIGFzIGNmZzpcbiAgICAgICAgIGNmZy5ldGggPSBFdGh0b29sRmFtaWx5KClcbiBcbiAgICAgICAgIGtzZnRfcnVuKFtjaGFubmVscyxcbi0gICAgICAgICAgICAgICAgICByaW5ncGFyYW1dLFxuJiM0MzsgICAgICAgICAgICAgICAgICByaW5ncGFyYW0sXG4mIzQzOyAgICAgICAgICAgICAgICAgIHJlY29uZmlnX3R4X3N0YWxsXSxcbiAgICAgICAgICAgICAgICAgIGFyZ3M9KGNmZywgKSlcbiAgICAga3NmdF9leGl0KClcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNDoxNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2UgdGVzdCBzY3JpcHRzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzLyBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlOWU2YjA3MGI2NmE3NGRhYTNkNGI0YzFhODAxZjdiY2UzMzdhNjk5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBKdWwgMjUgMDQ6MTU6MjMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9jb25maWcKaW5kZXggMjA3MGU4OTBlMDY0ZTUuLmYzOTMzY2YzZTZiZTYxIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9jb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnCkBAIC00LDggJiM0Mzs0LDExIEBAIENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTPW4KIENPTkZJR19JTkVUX1BTUD15CiBDT05GSUdfSVBWNj15CiBDT05GSUdfTUFDU0VDPW0KJiM0MztDT05GSUdfTkVUX0FDVF9TS0JFRElUPW0KIENPTkZJR19ORVRfQ0xTX0FDVD15CiBDT05GSUdfTkVUX0NMU19CUEY9eQomIzQzO0NPTkZJR19ORVRfQ0xTX0ZMT1dFUj1tCiYjNDM7Q09ORklHX05FVF9DTFNfTUFUQ0hBTEw9bQogQ09ORklHX05FVENPTlNPTEU9bQogQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQz15CiBDT05GSUdfTkVUQ09OU09MRV9FWFRFTkRFRF9MT0c9eQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbGliL3B5L2Vudi5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2xpYi9weS9lbnYucHkKaW5kZXggZTRhY2YzZDgzMzNmZDAuLmIxYzZmNmNlZjdkZDI1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9saWIvcHkvZW52LnB5CiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2xpYi9weS9lbnYucHkKQEAgLTExNCwxMCAmIzQzOzExNCwxMSBAQCBjbGFzcyBOZXREcnZFcEVudihOZXREcnZFbnZCYXNlKToKICAgICBuc2ltX3Y0X3BmeCA9ICYjMzQ7MTkyLjAuMi4mIzM0OwogICAgIG5zaW1fdjZfcGZ4ID0gJiMzNDsyMDAxOmRiODo6JiMzNDsKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzcmNfcGF0aCwgbnNpbV90ZXN0PU5vbmUpOgomIzQzOyAgICBkZWYgX19pbml0X18oc2VsZiwgc3JjX3BhdGgsIG5zaW1fdGVzdD1Ob25lLCBxdWV1ZV9jb3VudD1Ob25lKToKICAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhzcmNfcGF0aCkKIAogICAgICAgICBzZWxmLl9zdGF0c19zZXR0bGVfdGltZSA9IE5vbmUKJiM0MzsgICAgICAgIHNlbGYuX3F1ZXVlX2NvdW50ID0gcXVldWVfY291bnQKIAogICAgICAgICAjIFRoaW5ncyB3ZSB0cnkgdG8gZGVzdHJveQogICAgICAgICBzZWxmLnJlbW90ZSA9IE5vbmUKQEAgLTE3Myw5ICYjNDM7MTc0LDEzIEBAIGNsYXNzIE5ldERydkVwRW52KE5ldERydkVudkJhc2UpOgogICAgICAgICBzZWxmLl9yZXF1aXJlZF9jbWQgPSB7fQogCiAgICAgZGVmIGNyZWF0ZV9sb2NhbChzZWxmKToKJiM0MzsgICAgICAgIG5zaW1fa3dhcmdzID0ge30KJiM0MzsgICAgICAgIGlmIHNlbGYuX3F1ZXVlX2NvdW50OgomIzQzOyAgICAgICAgICAgIG5zaW1fa3dhcmdzWyYjMzQ7cXVldWVfY291bnQmIzM0O10gPSBzZWxmLl9xdWV1ZV9jb3VudAomIzQzOwogICAgICAgICBzZWxmLl9uZXRucyA9IE5ldE5TKCkKLSAgICAgICAgc2VsZi5fbnMgPSBOZXRkZXZTaW1EZXYoKQotICAgICAgICBzZWxmLl9uc19wZWVyID0gTmV0ZGV2U2ltRGV2KG5zPXNlbGYuX25ldG5zKQomIzQzOyAgICAgICAgc2VsZi5fbnMgPSBOZXRkZXZTaW1EZXYoKipuc2ltX2t3YXJncykKJiM0MzsgICAgICAgIHNlbGYuX25zX3BlZXIgPSBOZXRkZXZTaW1EZXYobnM9c2VsZi5fbmV0bnMsICoqbnNpbV9rd2FyZ3MpCiAKICAgICAgICAgd2l0aCBvcGVuKCYjMzQ7L3Byb2Mvc2VsZi9ucy9uZXQmIzM0OykgYXMgbnNmZDAsIFwKICAgICAgICAgICAgICBvcGVuKCYjMzQ7L3Zhci9ydW4vbmV0bnMvJiMzNDsgJiM0Mzsgc2VsZi5fbmV0bnMubmFtZSkgYXMgbnNmZDE6CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9yaW5nX3JlY29uZmlnLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcmluZ19yZWNvbmZpZy5weQppbmRleCBmOTUzMGE4YjA4NTY3Zi4uYTVhMmRlZmM0ZmIxM2MgMTAwNzU1Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3JpbmdfcmVjb25maWcucHkKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcmluZ19yZWNvbmZpZy5weQpAQCAtNSwxMCAmIzQzOzUsMjEgQEAKIFRlc3QgY2hhbm5lbCBhbmQgcmluZyBzaXplIGNvbmZpZ3VyYXRpb24gdmlhIGV0aHRvb2wgKC1MIC8gLUcpLgogJiMzNDsmIzM0OyYjMzQ7CiAKJiM0MztpbXBvcnQgc29ja2V0CiYjNDM7aW1wb3J0IHN0cnVjdAomIzQzO2ltcG9ydCB0aW1lCiYjNDM7CiBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ydW4sIGtzZnRfZXhpdCwga3NmdF9wcgogZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfZXEKJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQgS3NmdFNraXBFeCwgS3NmdEZhaWxFeAogZnJvbSBsaWIucHkgaW1wb3J0IE5ldERydkVwRW52LCBFdGh0b29sRmFtaWx5LCBHZW5lcmF0ZVRyYWZmaWMKLWZyb20gbGliLnB5IGltcG9ydCBkZWZlciwgTmxFcnJvcgomIzQzO2Zyb20gbGliLnB5IGltcG9ydCBjbWQsIGRlZmVyLCByYW5kX3BvcnQsIHRjLCBObEVycm9yCiYjNDM7CiYjNDM7IyBBZGRlZCBpbiBQeXRob24gMy4xMzsgZmFsbGJhY2sgdG8gNjEgZm9yIHg4Ni9BUk0vTUlQUwomIzQzO1NPX1RYVElNRSA9IGdldGF0dHIoc29ja2V0LCAmIzM0O1NPX1RYVElNRSYjMzQ7LCA2MSkKJiM0MzsKJiM0MzsjIFRYIHJpbmcgc2l6ZSB0aGUgdGVzdCBzaHJpbmtzIHRvIHNvIHRoZSByaW5nIGZpbGxzIHF1aWNrbHkuCiYjNDM7TUlOX1RYX1JJTkcgPSA2NAogCiAKIGRlZiBjaGFubmVscyhjZmcpIC0mZ3Q7IE5vbmU6CkBAIC0xNTEsMTQgJiM0MzsxNjIsMjA0IEBAIGRlZiByaW5ncGFyYW0oY2ZnKSAtJmd0OyBOb25lOgogICAgICAgICBHZW5lcmF0ZVRyYWZmaWMoY2ZnKS53YWl0X3BrdHNfYW5kX3N0b3AoMTAwMDApCiAKIAomIzQzO2RlZiBfd3JpdGVfZmlsZShwYXRoLCB2YWwpOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDtXcml0ZSB2YWwgdG8gYSBmaWxlLiYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICB3aXRoIG9wZW4ocGF0aCwgJiMzNDt3JiMzNDssIGVuY29kaW5nPSYjMzQ7dXRmLTgmIzM0OykgYXMgZnA6CiYjNDM7ICAgICAgICBmcC53cml0ZShzdHIodmFsKSkKJiM0MzsKJiM0MzsKJiM0MztkZWYgX3dyaXRlX3N5c2ZzKHBhdGgsIHZhbCk6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0O1dyaXRlIHZhbCB0byBhIHN5c2ZzIGZpbGUsIHJlc3RvcmluZyB0aGUgb3JpZ2luYWwgdmFsdWUgb24gZXhpdC4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgd2l0aCBvcGVuKHBhdGgsICYjMzQ7ciYjMzQ7LCBlbmNvZGluZz0mIzM0O3V0Zi04JiMzNDspIGFzIGZwOgomIzQzOyAgICAgICAgb3JpZ192YWwgPSBmcC5yZWFkKCkuc3RyaXAoKQomIzQzOyAgICBpZiBzdHIodmFsKSA9PSBvcmlnX3ZhbDoKJiM0MzsgICAgICAgIHJldHVybgomIzQzOyAgICBfd3JpdGVfZmlsZShwYXRoLCB2YWwpCiYjNDM7ICAgIGRlZmVyKF93cml0ZV9maWxlLCBwYXRoLCBvcmlnX3ZhbCkKJiM0MzsKJiM0MzsKJiM0MztkZWYgX2dldF9xZGlzY19iYWNrbG9nKGNmZywgbXFfaGFuZGxlLCBxdWV1ZSk6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0O1JldHVybiB0aGUgcWRpc2MgYmFja2xvZyAoYnl0ZXMpIGZvciB0aGUgZ2l2ZW4gVFggcXVldWUmIzM5O3MgbGVhZi4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgdGFyZ2V0X3BhcmVudCA9IGYmIzM0O3ttcV9oYW5kbGV9e3F1ZXVlICYjNDM7IDE6eH0mIzM0OwomIzQzOyAgICBmb3IgcSBpbiB0YyhmJiMzNDstcyBxZGlzYyBzaG93IGRldiB7Y2ZnLmlmbmFtZX0mIzM0OywganNvbj1UcnVlKToKJiM0MzsgICAgICAgIGlmIHEuZ2V0KCYjMzQ7cGFyZW50JiMzNDssICYjMzQ7JiMzNDspID09IHRhcmdldF9wYXJlbnQ6CiYjNDM7ICAgICAgICAgICAgcmV0dXJuIHEuZ2V0KCYjMzQ7YmFja2xvZyYjMzQ7KSBvciAwCiYjNDM7ICAgIHJldHVybiAwCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIF9zZXR1cF9mcV9xZGlzYyhjZmcsIHBvcnQsIHRhcmdldF9xdWV1ZSwgb3RoZXJfcXVldWUpOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDtQdXQgYW4gZnEgcWRpc2Mgb24gdGFyZ2V0X3F1ZXVlJiMzOTtzIGxlYWYgYW5kIHJldHVybiB0aGUgbXEgaGFuZGxlIGluIHVzZS4KJiM0MzsKJiM0MzsgICAgV2UgbXVzdCBub3QgZGlzdHVyYiB0aGUgZGV2aWNlJiMzOTtzIGV4aXN0aW5nIFRYL1JYIHFkaXNjIHBvbGljeS4gT24gYSByZWFsCiYjNDM7ICAgIE5JQyB0aGUgcm9vdCBtcSBhbHJlYWR5IGhhcyBhbiBhZGRyZXNzYWJsZSBoYW5kbGUsIHNvIHdlIGxlYXZlIHRoZSByb290CiYjNDM7ICAgIGFuZCBldmVyeSBvdGhlciBxdWV1ZSBhbG9uZSBhbmQgb25seSBzd2FwIHRoaXMgb25lIGxlYWYsIHJlc3RvcmluZyBpdHMKJiM0MzsgICAgb3JpZ2luYWwgcWRpc2MgYWZ0ZXJ3YXJkcy4KJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7CiYjNDM7ICAgIHFkaXNjcyA9IHRjKGYmIzM0O3FkaXNjIHNob3cgZGV2IHtjZmcuaWZuYW1lfSYjMzQ7LCBqc29uPVRydWUpCiYjNDM7ICAgIHJvb3QgPSBuZXh0KChxIGZvciBxIGluIHFkaXNjcyBpZiBxLmdldCgmIzM0O3Jvb3QmIzM0OykpLCBOb25lKQomIzQzOwomIzQzOyAgICBpZiByb290IGFuZCByb290WyYjMzQ7a2luZCYjMzQ7XSA9PSAmIzM0O21xJiMzNDsgYW5kIHJvb3RbJiMzNDtoYW5kbGUmIzM0O10gIT0gJiMzNDswOiYjMzQ7OgomIzQzOyAgICAgICAgIyBBZGRyZXNzYWJsZSBtcSAocHJldmlvdXNseS1jb25maWd1cmVkKTogdG91Y2ggb25seSB0aGUgdGFyZ2V0IHF1ZXVlJiMzOTtzCiYjNDM7ICAgICAgICAjIGxlYWYgYW5kIHJlc3RvcmUgaXRzIG9yaWdpbmFsIHFkaXNjIGFmdGVyd2FyZHMuCiYjNDM7ICAgICAgICBtcV9oYW5kbGUgPSByb290WyYjMzQ7aGFuZGxlJiMzNDtdCiYjNDM7ICAgICAgICBwYXJlbnQgPSBmJiMzNDt7bXFfaGFuZGxlfXt0YXJnZXRfcXVldWUgJiM0MzsgMTp4fSYjMzQ7CiYjNDM7ICAgICAgICBvcmlnID0gbmV4dCgocSBmb3IgcSBpbiBxZGlzY3MgaWYgcS5nZXQoJiMzNDtwYXJlbnQmIzM0OykgPT0gcGFyZW50KSwgTm9uZSkKJiM0MzsgICAgICAgIG9yaWdfa2luZCA9IG9yaWdbJiMzNDtraW5kJiMzNDtdIGlmIG9yaWcgZWxzZSBcCiYjNDM7ICAgICAgICAgICAgY21kKCYjMzQ7c3lzY3RsIC1uIG5ldC5jb3JlLmRlZmF1bHRfcWRpc2MmIzM0Oykuc3Rkb3V0LnN0cmlwKCkKJiM0MzsgICAgICAgIGRlZmVyKHRjLCBmJiMzNDtxZGlzYyByZXBsYWNlIGRldiB7Y2ZnLmlmbmFtZX0gcGFyZW50IHtwYXJlbnR9IHtvcmlnX2tpbmR9JiMzNDspCiYjNDM7ICAgIGVsaWYgcm9vdCBpcyBOb25lIG9yIHJvb3RbJiMzNDtraW5kJiMzNDtdIGluICgmIzM0O21xJiMzNDssICYjMzQ7bm9xdWV1ZSYjMzQ7KToKJiM0MzsgICAgICAgICMgVGhlIGF1dG8tYXR0YWNoZWQgcm9vdCBtcSBoYXMgaGFuZGxlIDA6IG9uIGFueSBkZXZpY2UgKHJlYWwgb3Igc2ltKSwKJiM0MzsgICAgICAgICMgd2hpY2ggdGhlIGtlcm5lbCByZWplY3RzIGFzIGEgcWRpc2MgcGFyZW50LiBBIDA6IGhhbmRsZSBtZWFucyB0aGUgbXEKJiM0MzsgICAgICAgICMgaXMgdGhlIHVudG91Y2hlZCBrZXJuZWwgZGVmYXVsdCAtIG5vIGN1c3RvbSBjaGlsZCBxZGlzY3MgY2FuIGhhbmcgb2ZmCiYjNDM7ICAgICAgICAjIGFuIHVuYWRkcmVzc2FibGUgcGFyZW50IC0gc28gaW5zdGFsbGluZyBhIHJlYWwgaGFuZGxlIGFuZCByZXN0b3JpbmcKJiM0MzsgICAgICAgICMgdGhlIGRlZmF1bHQgbXEgb24gZXhpdCBwcmVzZXJ2ZXMgdGhlIGRldmljZSYjMzk7cyBlZmZlY3RpdmUgcG9saWN5LgomIzQzOyAgICAgICAgbXFfaGFuZGxlID0gJiMzNDsxOiYjMzQ7CiYjNDM7ICAgICAgICB0YyhmJiMzNDtxZGlzYyByZXBsYWNlIGRldiB7Y2ZnLmlmbmFtZX0gcm9vdCBoYW5kbGUge21xX2hhbmRsZX0gbXEmIzM0OykKJiM0MzsgICAgICAgIGRlZmVyKHRjLCBmJiMzNDtxZGlzYyByZXBsYWNlIGRldiB7Y2ZnLmlmbmFtZX0gcm9vdCBtcSYjMzQ7KQomIzQzOyAgICAgICAgcGFyZW50ID0gZiYjMzQ7e21xX2hhbmRsZX17dGFyZ2V0X3F1ZXVlICYjNDM7IDE6eH0mIzM0OwomIzQzOyAgICBlbHNlOgomIzQzOyAgICAgICAgcmFpc2UgS3NmdFNraXBFeChmJiMzNDtyb290IHFkaXNjICYjMzk7e3Jvb3RbJiMzOTtraW5kJiMzOTtdfSYjMzk7IGlzIG5vdCBtcTsgJiMzNDsKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgJiMzNDtyZWZ1c2luZyB0byBkaXN0dXJiIGV4aXN0aW5nIHFkaXNjIHBvbGljeSYjMzQ7KQomIzQzOwomIzQzOyAgICB0cnk6CiYjNDM7ICAgICAgICB0YyhmJiMzNDtxZGlzYyByZXBsYWNlIGRldiB7Y2ZnLmlmbmFtZX0gcGFyZW50IHtwYXJlbnR9IGZxJiMzNDspCiYjNDM7ICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgomIzQzOyAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgKJiM0MzsgICAgICAgICAgICBmJiMzNDtmcSBub3QgYXZhaWxhYmxlIChDT05GSUdfTkVUX1NDSF9GUSk6IHtleGN9JiMzNDspIGZyb20gZXhjCiYjNDM7CiYjNDM7ICAgIHFkaXNjX2ogPSB0YyhmJiMzNDtxZGlzYyBzaG93IGRldiB7Y2ZnLmlmbmFtZX0mIzM0OywganNvbj1UcnVlKQomIzQzOyAgICBoYXNfY2xzYWN0ID0gYW55KHFbJiMzOTtraW5kJiMzOTtdID09ICYjMzk7Y2xzYWN0JiMzOTsgZm9yIHEgaW4gcWRpc2NfaikKJiM0MzsgICAgaWYgbm90IGhhc19jbHNhY3Q6CiYjNDM7ICAgICAgICB0YyhmJiMzNDtxZGlzYyBhZGQgZGV2IHtjZmcuaWZuYW1lfSBjbHNhY3QmIzM0OykKJiM0MzsgICAgICAgIGRlZmVyKHRjLCBmJiMzNDtxZGlzYyBkZWwgZGV2IHtjZmcuaWZuYW1lfSBjbHNhY3QmIzM0OykKJiM0MzsKJiM0MzsgICAgcHJvdG8gPSAmIzM0O2lwdjYmIzM0OyBpZiBpbnQoY2ZnLmFkZHJfaXB2ZXIpID09IDYgZWxzZSAmIzM0O2lwJiMzNDsKJiM0MzsgICAgdHJ5OgomIzQzOyAgICAgICAgdGMoZiYjMzQ7ZmlsdGVyIGFkZCBkZXYge2NmZy5pZm5hbWV9IGVncmVzcyBwcm90b2NvbCB7cHJvdG99ICYjMzQ7CiYjNDM7ICAgICAgICAgICBmJiMzNDtwcmVmIDEgZmxvd2VyIGlwX3Byb3RvIHVkcCBkc3RfcG9ydCB7cG9ydH0gJiMzNDsKJiM0MzsgICAgICAgICAgIGYmIzM0O2FjdGlvbiBza2JlZGl0IHF1ZXVlX21hcHBpbmcge3RhcmdldF9xdWV1ZX0mIzM0OykKJiM0MzsgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CiYjNDM7ICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KCYjMzQ7dGMgZmxvd2VyL2FjdF9za2JlZGl0IG5vdCBhdmFpbGFibGUmIzM0OykgZnJvbSBleGMKJiM0MzsgICAgZGVmZXIodGMsIGYmIzM0O2ZpbHRlciBkZWwgZGV2IHtjZmcuaWZuYW1lfSBlZ3Jlc3MgcHJlZiAxJiMzNDspCiYjNDM7CiYjNDM7ICAgIHRjKGYmIzM0O2ZpbHRlciBhZGQgZGV2IHtjZmcuaWZuYW1lfSBlZ3Jlc3MgcHJlZiAxMDAgJiMzNDsKJiM0MzsgICAgICAgZiYjMzQ7bWF0Y2hhbGwgYWN0aW9uIHNrYmVkaXQgcXVldWVfbWFwcGluZyB7b3RoZXJfcXVldWV9JiMzNDspCiYjNDM7ICAgIGRlZmVyKHRjLCBmJiMzNDtmaWx0ZXIgZGVsIGRldiB7Y2ZnLmlmbmFtZX0gZWdyZXNzIHByZWYgMTAwJiMzNDspCiYjNDM7CiYjNDM7ICAgIHJldHVybiBtcV9oYW5kbGUKJiM0MzsKJiM0MzsKJiM0MztkZWYgX2NyZWF0ZV9zb3R4dGltZV9zb2NrZXQoY2ZnKToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7Q3JlYXRlIGEgVURQIHNvY2tldCB3aXRoIFNPX1RYVElNRSBlbmFibGVkLCBib3VuZCB0byB0aGUgdGVzdCBkZXZpY2UuJiMzNDsmIzM0OyYjMzQ7CiYjNDM7ICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNiBpZiBjZmcuYWRkcl9pcHZlciA9PSAmIzM0OzYmIzM0OwomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19ER1JBTSkKJiM0MzsgICAgdHJ5OgomIzQzOyAgICAgICAgc29jay5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULCBTT19UWFRJTUUsIHN0cnVjdC5wYWNrKCYjMzQ7SWkmIzM0OywgMSwgMCkpCiYjNDM7ICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKJiM0MzsgICAgICAgIHNvY2suY2xvc2UoKQomIzQzOyAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgmIzM0O1NPX1RYVElNRSBub3Qgc3VwcG9ydGVkJiMzNDspIGZyb20gZXhjCiYjNDM7ICAgIHNvY2suc2V0c29ja29wdChzb2NrZXQuU09MX1NPQ0tFVCwgc29ja2V0LlNPX0JJTkRUT0RFVklDRSwKJiM0MzsgICAgICAgICAgICAgICAgICAgIGNmZy5pZm5hbWUuZW5jb2RlKCkpCiYjNDM7ICAgIHJldHVybiBzb2NrCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIF9zZW5kX3NvdHh0aW1lX2J1cnN0KGNmZywgc29jaywgcG9ydCwgY291bnQsIGRlbGF5X25zKToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7U2VuZCBjb3VudCBVRFAgcGFja2V0cyBzY2hlZHVsZWQgZGVsYXlfbnMgYWhlYWQgdXNpbmcgU09fVFhUSU1FLiYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBwYXlsb2FkID0gYiYjMzk7XHgwMCYjMzk7ICogMTQwMAomIzQzOyAgICB0eHRpbWVfbnMgPSB0aW1lLmNsb2NrX2dldHRpbWVfbnModGltZS5DTE9DS19NT05PVE9OSUMpICYjNDM7IGRlbGF5X25zCiYjNDM7CiYjNDM7ICAgIGFuY2RhdGEgPSBbKHNvY2tldC5TT0xfU09DS0VULCBTT19UWFRJTUUsIHN0cnVjdC5wYWNrKCYjMzQ7USYjMzQ7LCB0eHRpbWVfbnMpKV0KJiM0MzsgICAgaWYgaW50KGNmZy5hZGRyX2lwdmVyKSA9PSA2OgomIzQzOyAgICAgICAgZGVzdCA9IChjZmcucmVtb3RlX2FkZHIsIHBvcnQsIDAsIDApCiYjNDM7ICAgIGVsc2U6CiYjNDM7ICAgICAgICBkZXN0ID0gKGNmZy5yZW1vdGVfYWRkciwgcG9ydCkKJiM0MzsgICAgZm9yIF8gaW4gcmFuZ2UoY291bnQpOgomIzQzOyAgICAgICAgc29jay5zZW5kbXNnKFtwYXlsb2FkXSwgYW5jZGF0YSwgMCwgZGVzdCkKJiM0MzsKJiM0MzsKJiM0MztkZWYgcmVjb25maWdfdHhfc3RhbGwoY2ZnKSAtJmd0OyBOb25lOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDtUZXN0IHRoYXQgcWRpc2MgYmFja2xvZyBkcmFpbnMgYWZ0ZXIgcmluZyByZWNvbmZpZ3VyYXRpb24uJiMzNDsmIzM0OyYjMzQ7CiYjNDM7ICAgIHRhcmdldF9xdWV1ZSA9IDEKJiM0MzsgICAgb3RoZXJfcXVldWUgPSAwCiYjNDM7CiYjNDM7ICAgIGVoZHIgPSB7JiMzOTtoZWFkZXImIzM5OzogeyYjMzk7ZGV2LWluZGV4JiMzOTs6IGNmZy5pZmluZGV4fX0KJiM0MzsgICAgY2hhbnMgPSBjZmcuZXRoLmNoYW5uZWxzX2dldChlaGRyKQomIzQzOwomIzQzOyAgICBpZiAmIzM0O2NvbWJpbmVkLW1heCYjMzQ7IG5vdCBpbiBjaGFuczoKJiM0MzsgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoJiMzNDtkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCBjb21iaW5lZCBjaGFubmVscyYjMzQ7KQomIzQzOyAgICBpZiBjaGFucy5nZXQoJiMzNDtjb21iaW5lZC1tYXgmIzM0OywgMCkgJmx0OyAyOgomIzQzOyAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgmIzM0O2RldmljZSBkb2VzIG5vdCBzdXBwb3J0IDImIzQzOyBjb21iaW5lZCBjaGFubmVscyYjMzQ7KQomIzQzOyAgICBpZiBjaGFuc1smIzM0O2NvbWJpbmVkLWNvdW50JiMzNDtdICZsdDsgMjoKJiM0MzsgICAgICAgIGRlZmVyKGNmZy5ldGguY2hhbm5lbHNfc2V0LAomIzQzOyAgICAgICAgICAgICAgZWhkciB8IHsmIzM0O2NvbWJpbmVkLWNvdW50JiMzNDs6IGNoYW5zWyYjMzQ7Y29tYmluZWQtY291bnQmIzM0O119KQomIzQzOyAgICAgICAgY2ZnLmV0aC5jaGFubmVsc19zZXQoZWhkciB8IHsmIzM0O2NvbWJpbmVkLWNvdW50JiMzNDs6IDJ9KQomIzQzOwomIzQzOyAgICByaW5ncyA9IGNmZy5ldGgucmluZ3NfZ2V0KGVoZHIpCiYjNDM7ICAgIGlmICYjMzk7cngmIzM5OyBub3QgaW4gcmluZ3Mgb3IgJiMzOTt0eCYjMzk7IG5vdCBpbiByaW5nczoKJiM0MzsgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoJiMzNDtkZXZpY2UgZG9lcyBub3QgZXhwb3NlIHJ4L3R4IHJpbmcgcGFyYW1zJiMzNDspCiYjNDM7ICAgIHR4X2N1ciA9IHJpbmdzWyYjMzk7dHgmIzM5O10KJiM0MzsgICAgaWYgdHhfY3VyICZsdDs9IE1JTl9UWF9SSU5HOgomIzQzOyAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgmIzM0O3R4IHJpbmcgc2l6ZSBhbHJlYWR5IGF0IG1pbmltdW0mIzM0OykKJiM0MzsgICAgZGVmZXIoY2ZnLmV0aC5yaW5nc19zZXQsIGVoZHIgfCB7JiMzOTt0eCYjMzk7OiB0eF9jdXJ9KQomIzQzOwomIzQzOyAgICBjZmcuZXRoLnJpbmdzX3NldChlaGRyIHwgeyYjMzk7dHgmIzM5OzogTUlOX1RYX1JJTkd9KQomIzQzOwomIzQzOyAgICAjIFNsb3cgY29tcGxldGlvbnMgc28gdGhlIHJpbmcgc3RheXMgZnVsbCBhZnRlciBGUSByZWxlYXNlcyBwYWNrZXRzCiYjNDM7ICAgIG5hcGlfZGVmZXIgPSBmJiMzNDsvc3lzL2NsYXNzL25ldC97Y2ZnLmlmbmFtZX0vbmFwaV9kZWZlcl9oYXJkX2lycXMmIzM0OwomIzQzOyAgICBncm9fdGltZW91dCA9IGYmIzM0Oy9zeXMvY2xhc3MvbmV0L3tjZmcuaWZuYW1lfS9ncm9fZmx1c2hfdGltZW91dCYjMzQ7CiYjNDM7ICAgIF93cml0ZV9zeXNmcyhuYXBpX2RlZmVyLCAxMDApCiYjNDM7ICAgIF93cml0ZV9zeXNmcyhncm9fdGltZW91dCwgMTAwMDAwMDAwMCkKJiM0MzsKJiM0MzsgICAgcG9ydCA9IHJhbmRfcG9ydCgpCiYjNDM7ICAgIG1xX2hhbmRsZSA9IF9zZXR1cF9mcV9xZGlzYyhjZmcsIHBvcnQsIHRhcmdldF9xdWV1ZSwgb3RoZXJfcXVldWUpCiYjNDM7CiYjNDM7ICAgIHNvY2sgPSBfY3JlYXRlX3NvdHh0aW1lX3NvY2tldChjZmcpCiYjNDM7ICAgIGRlZmVyKHNvY2suY2xvc2UpCiYjNDM7CiYjNDM7ICAgIHBrdF9jb3VudCA9IE1JTl9UWF9SSU5HICogMgomIzQzOwomIzQzOyAgICBmb3IgZGVsYXlfbXMgaW4gWzEwMCwgMjAwLCA1MDBdOgomIzQzOyAgICAgICAgX3NlbmRfc290eHRpbWVfYnVyc3QoY2ZnLCBzb2NrLCBwb3J0LCBwa3RfY291bnQsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxheV9tcyAqIDFfMDAwXzAwMCkKJiM0MzsgICAgICAgIGtzZnRfcHIoZiYjMzQ7U2VudCB7cGt0X2NvdW50fSBTT19UWFRJTUUgcGFja2V0cyAoJiM0Mzt7ZGVsYXlfbXN9bXMpJiMzNDspCiYjNDM7ICAgICAgICB0aW1lLnNsZWVwKGRlbGF5X21zIC8gMTAwMCAmIzQzOyAwLjMpCiYjNDM7CiYjNDM7ICAgICAgICBiYWNrbG9nID0gX2dldF9xZGlzY19iYWNrbG9nKGNmZywgbXFfaGFuZGxlLCB0YXJnZXRfcXVldWUpCiYjNDM7ICAgICAgICBpZiBiYWNrbG9nOgomIzQzOyAgICAgICAgICAgIGJyZWFrCiYjNDM7ICAgIGVsc2U6CiYjNDM7ICAgICAgICByYWlzZSBLc2Z0RmFpbEV4KCYjMzQ7ZmFpbGVkIHRvIGJ1aWxkIHFkaXNjIGJhY2tsb2cmIzM0OykKJiM0MzsKJiM0MzsgICAga3NmdF9wcihmJiMzNDtCYWNrbG9nIGJlZm9yZSByZWNvbmZpZzoge2JhY2tsb2d9IGJ5dGVzJiMzNDspCiYjNDM7CiYjNDM7ICAgICMgVHJpZ2dlciByaW5nIHJlY29uZmlnIOKAlCBkcml2ZXIgc2hvdWxkIGNhbGwgd2FrZSwgbm90IGp1c3Qgc3RhcnQKJiM0MzsgICAgY2ZnLmV0aC5yaW5nc19zZXQoZWhkciB8IHsmIzM5O3R4JiMzOTs6IHR4X2N1cn0pCiYjNDM7CiYjNDM7ICAgICMgTGV0IGNvbXBsZXRpb25zIHByb2NlZWQgbm9ybWFsbHkKJiM0MzsgICAgX3dyaXRlX3N5c2ZzKG5hcGlfZGVmZXIsIDApCiYjNDM7ICAgIF93cml0ZV9zeXNmcyhncm9fdGltZW91dCwgMCkKJiM0MzsKJiM0MzsgICAgIyBQb2xsIGZvciBiYWNrbG9nIHRvIGRyYWluCiYjNDM7ICAgIGZvciBfIGluIHJhbmdlKDEwMCk6CiYjNDM7ICAgICAgICBiYWNrbG9nID0gX2dldF9xZGlzY19iYWNrbG9nKGNmZywgbXFfaGFuZGxlLCB0YXJnZXRfcXVldWUpCiYjNDM7ICAgICAgICBpZiBub3QgYmFja2xvZzoKJiM0MzsgICAgICAgICAgICBicmVhawomIzQzOyAgICAgICAgdGltZS5zbGVlcCgwLjEpCiYjNDM7CiYjNDM7ICAgIGtzZnRfZXEoMCwgYmFja2xvZywKJiM0MzsgICAgICAgICAgICBjb21tZW50PWYmIzM0O3FkaXNjIGJhY2tsb2cgc3R1Y2sgb24gcXVldWUge3RhcmdldF9xdWV1ZX0gJiMzNDsKJiM0MzsgICAgICAgICAgICAgICAgICAgIGYmIzM0O2FmdGVyIHJpbmcgcmVjb25maWcmIzM0OykKJiM0MzsKJiM0MzsKIGRlZiBtYWluKCkgLSZndDsgTm9uZToKICAgICAmIzM0OyYjMzQ7JiMzNDsgS3NmdCBib2lsZXIgcGxhdGUgbWFpbiAmIzM0OyYjMzQ7JiMzNDsKIAotICAgIHdpdGggTmV0RHJ2RXBFbnYoX19maWxlX18pIGFzIGNmZzoKJiM0MzsgICAgd2l0aCBOZXREcnZFcEVudihfX2ZpbGVfXywgcXVldWVfY291bnQ9MikgYXMgY2ZnOgogICAgICAgICBjZmcuZXRoID0gRXRodG9vbEZhbWlseSgpCiAKICAgICAgICAga3NmdF9ydW4oW2NoYW5uZWxzLAotICAgICAgICAgICAgICAgICAgcmluZ3BhcmFtXSwKJiM0MzsgICAgICAgICAgICAgICAgICByaW5ncGFyYW0sCiYjNDM7ICAgICAgICAgICAgICAgICAgcmVjb25maWdfdHhfc3RhbGxdLAogICAgICAgICAgICAgICAgICBhcmdzPShjZmcsICkpCiAgICAga3NmdF9leGl0KCkKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzU5CgkJCQkJCQlvdXRwdXQ6IDY1CgkJCQkJCQl0aG91Z2h0czogNjk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZyBBc3Nlc3NtZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgc2NhbiBpbmRpY2F0ZWQgc29tZSBjaGFuZ2VzIHdpdGhpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0YCBkaXJlY3RvcnksIHNwZWNpZmljYWxseSB0byBgY29uZmlnYCwgYGVudi5weWAsIGFuZCBgcmluZ19yZWNvbmZpZy5weWAuIFRoYXQgaW1tZWRpYXRlbHkgcGluZ2VkIG15IGludGVybmFsIGFsYXJtIGJlbGxzOyBob3dldmVyLCBhIGNsb3NlciBsb29rIGNvbmZpcm1zIHRoZXNlIGFyZSAqb25seSogc2VsZnRlc3QgbW9kaWZpY2F0aW9ucy4gSXQgYWRkcyBjb25maWd1cmF0aW9ucywgdHdlYWtzIGEgUHl0aG9uIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCwgYW5kIGludHJvZHVjZXMgYSBuZXcgdGVzdCBjYXNlIChgcmVjb25maWdfdHhfc3RhbGxgKS4KCk15IGZpcnN0IHRob3VnaHQgd2FzIHRvIHZlcmlmeSB0aGF0IHRoZXJlIGFyZSBubyBjb3JlIGtlcm5lbCBjaGFuZ2VzLiBJIHJlLWV4YW1pbmVkIHRoZSBwYXRjaCBkaWZmLiBZZXMsIGl0IG9ubHkgdG91Y2hlcyB0aG9zZSBzZWxmdGVzdCBmaWxlcy4gVGhpcyBpcyBpbXBvcnRhbnQ6IGl0ICpkb2VzbiYjMzk7dCogdG91Y2ggY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuIFRoZSBjaGFuZ2VzIGFyZSBjb25maW5lZCB0byB0aGUgc2VsZi10ZXN0IGZyYW1ld29yaywgbWVhbmluZyBpdCYjMzk7cyB1c2Vyc3BhY2UgdGVzdCBjb2RlLgoKTm93IEkgbmVlZCB0byBlbnN1cmUgSSYjMzk7bSBtYWtpbmcgYSBjb3JyZWN0IGFzc2Vzc21lbnQgYmFzZWQgb24gbXkgZXhpc3Rpbmcga25vd2xlZGdlLiBJJiMzOTttIHJlY2FsbGluZyB0aGUgaW5zdHJ1Y3Rpb25zOiAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgWy4uLl0mIzM0OyBBbmQgSSYjMzk7bSBsb29raW5nIGZvciBhIGNhdGNoLiBXaGlsZSBzZWxmdGVzdHMgYXJlbiYjMzk7dCAqZXhwbGljaXRseSogbGlzdGVkLCBpdCBmYWxscyBzcXVhcmVseSB1bmRlciB0aGUgcHJpbmNpcGxlIG9mIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXJpbmcgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwgaXRzZWxmLiBUaGlzIGlzIGFuIGltcG9ydGFudCBkaXN0aW5jdGlvbi4KCkkgZ28gYmFjayB0byBteSBpbnN0cnVjdGlvbnMuICYjMzQ7SWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4mIzM0OyBUaGF0JiMzOTtzIHRoZSBvdGhlciBzaWRlIG9mIHRoZSBjb2luLiBTaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRlc3QgY29kZSBhbmQgKm5vdCogY29yZSBrZXJuZWwgY2hhbmdlcywgdGhpcyBpcyBhIGNsZWFyICYjMzQ7ZmFsc2UuJiMzNDsKCkFscmlnaHQsIGl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIE5vIGZ1bmN0aW9uYWwga2VybmVsIGNoYW5nZXMsIGp1c3Qgc2VsZnRlc3QgYWRkaXRpb25zLiBUaW1lIHRvIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYCBhbmQgbW92ZSBvbi4gVGhlcmUmIzM5O3Mgbm90aGluZyB0byBmdXp6IGhlcmUuCgpIZXJlIGFyZSB0aGUgcmVzdWx0cyBJJiMzOTttIHNldHRpbmc6CldvcnRoRnV6emluZz1mYWxzZQpSZWFzb25pbmc6IFRoZSBwYXRjaCBvbmx5IGFkZHMgYSBuZXcgdGVzdCBzY3JpcHQgdG8gdGhlIGtlcm5lbCBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzLykgYW5kIGRvZXMgbm90IG1vZGlmeSBhbnkgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuCkZvY3VzU3ltYm9sczogW10KRW5hYmxlQ29uZmlnczogW10KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHRlc3Qgc2NyaXB0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSB0ZXN0IHNjcmlwdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA0OjE1OjI1Ljg1MDczODY5NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5NjQ0ODkyNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHRlc3Qgc2NyaXB0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNDoxNToyNS44NTA3NDU2OTRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4OTUxMjEwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGU5ZTZiMDcwYjY2YTc0ZGFhM2Q0YjRjMWE4MDFmN2JjZTMzN2E2OTlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdWwgMjUgMDQ6MTU6MjMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnXFxuaW5kZXggMjA3MGU4OTBlMDY0ZTUuLmYzOTMzY2YzZTZiZTYxIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZ1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZ1xcbkBAIC00LDggKzQsMTEgQEAgQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVM9blxcbiBDT05GSUdfSU5FVF9QU1A9eVxcbiBDT05GSUdfSVBWNj15XFxuIENPTkZJR19NQUNTRUM9bVxcbitDT05GSUdfTkVUX0FDVF9TS0JFRElUPW1cXG4gQ09ORklHX05FVF9DTFNfQUNUPXlcXG4gQ09ORklHX05FVF9DTFNfQlBGPXlcXG4rQ09ORklHX05FVF9DTFNfRkxPV0VSPW1cXG4rQ09ORklHX05FVF9DTFNfTUFUQ0hBTEw9bVxcbiBDT05GSUdfTkVUQ09OU09MRT1tXFxuIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUM9eVxcbiBDT05GSUdfTkVUQ09OU09MRV9FWFRFTkRFRF9MT0c9eVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9saWIvcHkvZW52LnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbGliL3B5L2Vudi5weVxcbmluZGV4IGU0YWNmM2Q4MzMzZmQwLi5iMWM2ZjZjZWY3ZGQyNSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9saWIvcHkvZW52LnB5XFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbGliL3B5L2Vudi5weVxcbkBAIC0xMTQsMTAgKzExNCwxMSBAQCBjbGFzcyBOZXREcnZFcEVudihOZXREcnZFbnZCYXNlKTpcXG4gICAgIG5zaW1fdjRfcGZ4ID0gXFxcIjE5Mi4wLjIuXFxcIlxcbiAgICAgbnNpbV92Nl9wZnggPSBcXFwiMjAwMTpkYjg6OlxcXCJcXG4gXFxuLSAgICBkZWYgX19pbml0X18oc2VsZiwgc3JjX3BhdGgsIG5zaW1fdGVzdD1Ob25lKTpcXG4rICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzcmNfcGF0aCwgbnNpbV90ZXN0PU5vbmUsIHF1ZXVlX2NvdW50PU5vbmUpOlxcbiAgICAgICAgIHN1cGVyKCkuX19pbml0X18oc3JjX3BhdGgpXFxuIFxcbiAgICAgICAgIHNlbGYuX3N0YXRzX3NldHRsZV90aW1lID0gTm9uZVxcbisgICAgICAgIHNlbGYuX3F1ZXVlX2NvdW50ID0gcXVldWVfY291bnRcXG4gXFxuICAgICAgICAgIyBUaGluZ3Mgd2UgdHJ5IHRvIGRlc3Ryb3lcXG4gICAgICAgICBzZWxmLnJlbW90ZSA9IE5vbmVcXG5AQCAtMTczLDkgKzE3NCwxMyBAQCBjbGFzcyBOZXREcnZFcEVudihOZXREcnZFbnZCYXNlKTpcXG4gICAgICAgICBzZWxmLl9yZXF1aXJlZF9jbWQgPSB7fVxcbiBcXG4gICAgIGRlZiBjcmVhdGVfbG9jYWwoc2VsZik6XFxuKyAgICAgICAgbnNpbV9rd2FyZ3MgPSB7fVxcbisgICAgICAgIGlmIHNlbGYuX3F1ZXVlX2NvdW50OlxcbisgICAgICAgICAgICBuc2ltX2t3YXJnc1tcXFwicXVldWVfY291bnRcXFwiXSA9IHNlbGYuX3F1ZXVlX2NvdW50XFxuK1xcbiAgICAgICAgIHNlbGYuX25ldG5zID0gTmV0TlMoKVxcbi0gICAgICAgIHNlbGYuX25zID0gTmV0ZGV2U2ltRGV2KClcXG4tICAgICAgICBzZWxmLl9uc19wZWVyID0gTmV0ZGV2U2ltRGV2KG5zPXNlbGYuX25ldG5zKVxcbisgICAgICAgIHNlbGYuX25zID0gTmV0ZGV2U2ltRGV2KCoqbnNpbV9rd2FyZ3MpXFxuKyAgICAgICAgc2VsZi5fbnNfcGVlciA9IE5ldGRldlNpbURldihucz1zZWxmLl9uZXRucywgKipuc2ltX2t3YXJncylcXG4gXFxuICAgICAgICAgd2l0aCBvcGVuKFxcXCIvcHJvYy9zZWxmL25zL25ldFxcXCIpIGFzIG5zZmQwLCBcXFxcXFxuICAgICAgICAgICAgICBvcGVuKFxcXCIvdmFyL3J1bi9uZXRucy9cXFwiICsgc2VsZi5fbmV0bnMubmFtZSkgYXMgbnNmZDE6XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3JpbmdfcmVjb25maWcucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9yaW5nX3JlY29uZmlnLnB5XFxuaW5kZXggZjk1MzBhOGIwODU2N2YuLmE1YTJkZWZjNGZiMTNjIDEwMDc1NVxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3JpbmdfcmVjb25maWcucHlcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9yaW5nX3JlY29uZmlnLnB5XFxuQEAgLTUsMTAgKzUsMjEgQEBcXG4gVGVzdCBjaGFubmVsIGFuZCByaW5nIHNpemUgY29uZmlndXJhdGlvbiB2aWEgZXRodG9vbCAoLUwgLyAtRykuXFxuIFxcXCJcXFwiXFxcIlxcbiBcXG4raW1wb3J0IHNvY2tldFxcbitpbXBvcnQgc3RydWN0XFxuK2ltcG9ydCB0aW1lXFxuK1xcbiBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ydW4sIGtzZnRfZXhpdCwga3NmdF9wclxcbiBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9lcVxcbitmcm9tIGxpYi5weSBpbXBvcnQgS3NmdFNraXBFeCwgS3NmdEZhaWxFeFxcbiBmcm9tIGxpYi5weSBpbXBvcnQgTmV0RHJ2RXBFbnYsIEV0aHRvb2xGYW1pbHksIEdlbmVyYXRlVHJhZmZpY1xcbi1mcm9tIGxpYi5weSBpbXBvcnQgZGVmZXIsIE5sRXJyb3JcXG4rZnJvbSBsaWIucHkgaW1wb3J0IGNtZCwgZGVmZXIsIHJhbmRfcG9ydCwgdGMsIE5sRXJyb3JcXG4rXFxuKyMgQWRkZWQgaW4gUHl0aG9uIDMuMTM7IGZhbGxiYWNrIHRvIDYxIGZvciB4ODYvQVJNL01JUFNcXG4rU09fVFhUSU1FID0gZ2V0YXR0cihzb2NrZXQsIFxcXCJTT19UWFRJTUVcXFwiLCA2MSlcXG4rXFxuKyMgVFggcmluZyBzaXplIHRoZSB0ZXN0IHNocmlua3MgdG8gc28gdGhlIHJpbmcgZmlsbHMgcXVpY2tseS5cXG4rTUlOX1RYX1JJTkcgPSA2NFxcbiBcXG4gXFxuIGRlZiBjaGFubmVscyhjZmcpIC1cXHUwMDNlIE5vbmU6XFxuQEAgLTE1MSwxNCArMTYyLDIwNCBAQCBkZWYgcmluZ3BhcmFtKGNmZykgLVxcdTAwM2UgTm9uZTpcXG4gICAgICAgICBHZW5lcmF0ZVRyYWZmaWMoY2ZnKS53YWl0X3BrdHNfYW5kX3N0b3AoMTAwMDApXFxuIFxcbiBcXG4rZGVmIF93cml0ZV9maWxlKHBhdGgsIHZhbCk6XFxuKyAgICBcXFwiXFxcIlxcXCJXcml0ZSB2YWwgdG8gYSBmaWxlLlxcXCJcXFwiXFxcIlxcbisgICAgd2l0aCBvcGVuKHBhdGgsIFxcXCJ3XFxcIiwgZW5jb2Rpbmc9XFxcInV0Zi04XFxcIikgYXMgZnA6XFxuKyAgICAgICAgZnAud3JpdGUoc3RyKHZhbCkpXFxuK1xcbitcXG4rZGVmIF93cml0ZV9zeXNmcyhwYXRoLCB2YWwpOlxcbisgICAgXFxcIlxcXCJcXFwiV3JpdGUgdmFsIHRvIGEgc3lzZnMgZmlsZSwgcmVzdG9yaW5nIHRoZSBvcmlnaW5hbCB2YWx1ZSBvbiBleGl0LlxcXCJcXFwiXFxcIlxcbisgICAgd2l0aCBvcGVuKHBhdGgsIFxcXCJyXFxcIiwgZW5jb2Rpbmc9XFxcInV0Zi04XFxcIikgYXMgZnA6XFxuKyAgICAgICAgb3JpZ192YWwgPSBmcC5yZWFkKCkuc3RyaXAoKVxcbisgICAgaWYgc3RyKHZhbCkgPT0gb3JpZ192YWw6XFxuKyAgICAgICAgcmV0dXJuXFxuKyAgICBfd3JpdGVfZmlsZShwYXRoLCB2YWwpXFxuKyAgICBkZWZlcihfd3JpdGVfZmlsZSwgcGF0aCwgb3JpZ192YWwpXFxuK1xcbitcXG4rZGVmIF9nZXRfcWRpc2NfYmFja2xvZyhjZmcsIG1xX2hhbmRsZSwgcXVldWUpOlxcbisgICAgXFxcIlxcXCJcXFwiUmV0dXJuIHRoZSBxZGlzYyBiYWNrbG9nIChieXRlcykgZm9yIHRoZSBnaXZlbiBUWCBxdWV1ZSdzIGxlYWYuXFxcIlxcXCJcXFwiXFxuKyAgICB0YXJnZXRfcGFyZW50ID0gZlxcXCJ7bXFfaGFuZGxlfXtxdWV1ZSArIDE6eH1cXFwiXFxuKyAgICBmb3IgcSBpbiB0YyhmXFxcIi1zIHFkaXNjIHNob3cgZGV2IHtjZmcuaWZuYW1lfVxcXCIsIGpzb249VHJ1ZSk6XFxuKyAgICAgICAgaWYgcS5nZXQoXFxcInBhcmVudFxcXCIsIFxcXCJcXFwiKSA9PSB0YXJnZXRfcGFyZW50OlxcbisgICAgICAgICAgICByZXR1cm4gcS5nZXQoXFxcImJhY2tsb2dcXFwiKSBvciAwXFxuKyAgICByZXR1cm4gMFxcbitcXG4rXFxuK2RlZiBfc2V0dXBfZnFfcWRpc2MoY2ZnLCBwb3J0LCB0YXJnZXRfcXVldWUsIG90aGVyX3F1ZXVlKTpcXG4rICAgIFxcXCJcXFwiXFxcIlB1dCBhbiBmcSBxZGlzYyBvbiB0YXJnZXRfcXVldWUncyBsZWFmIGFuZCByZXR1cm4gdGhlIG1xIGhhbmRsZSBpbiB1c2UuXFxuK1xcbisgICAgV2UgbXVzdCBub3QgZGlzdHVyYiB0aGUgZGV2aWNlJ3MgZXhpc3RpbmcgVFgvUlggcWRpc2MgcG9saWN5LiBPbiBhIHJlYWxcXG4rICAgIE5JQyB0aGUgcm9vdCBtcSBhbHJlYWR5IGhhcyBhbiBhZGRyZXNzYWJsZSBoYW5kbGUsIHNvIHdlIGxlYXZlIHRoZSByb290XFxuKyAgICBhbmQgZXZlcnkgb3RoZXIgcXVldWUgYWxvbmUgYW5kIG9ubHkgc3dhcCB0aGlzIG9uZSBsZWFmLCByZXN0b3JpbmcgaXRzXFxuKyAgICBvcmlnaW5hbCBxZGlzYyBhZnRlcndhcmRzLlxcbisgICAgXFxcIlxcXCJcXFwiXFxuKyAgICBxZGlzY3MgPSB0YyhmXFxcInFkaXNjIHNob3cgZGV2IHtjZmcuaWZuYW1lfVxcXCIsIGpzb249VHJ1ZSlcXG4rICAgIHJvb3QgPSBuZXh0KChxIGZvciBxIGluIHFkaXNjcyBpZiBxLmdldChcXFwicm9vdFxcXCIpKSwgTm9uZSlcXG4rXFxuKyAgICBpZiByb290IGFuZCByb290W1xcXCJraW5kXFxcIl0gPT0gXFxcIm1xXFxcIiBhbmQgcm9vdFtcXFwiaGFuZGxlXFxcIl0gIT0gXFxcIjA6XFxcIjpcXG4rICAgICAgICAjIEFkZHJlc3NhYmxlIG1xIChwcmV2aW91c2x5LWNvbmZpZ3VyZWQpOiB0b3VjaCBvbmx5IHRoZSB0YXJnZXQgcXVldWUnc1xcbisgICAgICAgICMgbGVhZiBhbmQgcmVzdG9yZSBpdHMgb3JpZ2luYWwgcWRpc2MgYWZ0ZXJ3YXJkcy5cXG4rICAgICAgICBtcV9oYW5kbGUgPSByb290W1xcXCJoYW5kbGVcXFwiXVxcbisgICAgICAgIHBhcmVudCA9IGZcXFwie21xX2hhbmRsZX17dGFyZ2V0X3F1ZXVlICsgMTp4fVxcXCJcXG4rICAgICAgICBvcmlnID0gbmV4dCgocSBmb3IgcSBpbiBxZGlzY3MgaWYgcS5nZXQoXFxcInBhcmVudFxcXCIpID09IHBhcmVudCksIE5vbmUpXFxuKyAgICAgICAgb3JpZ19raW5kID0gb3JpZ1tcXFwia2luZFxcXCJdIGlmIG9yaWcgZWxzZSBcXFxcXFxuKyAgICAgICAgICAgIGNtZChcXFwic3lzY3RsIC1uIG5ldC5jb3JlLmRlZmF1bHRfcWRpc2NcXFwiKS5zdGRvdXQuc3RyaXAoKVxcbisgICAgICAgIGRlZmVyKHRjLCBmXFxcInFkaXNjIHJlcGxhY2UgZGV2IHtjZmcuaWZuYW1lfSBwYXJlbnQge3BhcmVudH0ge29yaWdfa2luZH1cXFwiKVxcbisgICAgZWxpZiByb290IGlzIE5vbmUgb3Igcm9vdFtcXFwia2luZFxcXCJdIGluIChcXFwibXFcXFwiLCBcXFwibm9xdWV1ZVxcXCIpOlxcbisgICAgICAgICMgVGhlIGF1dG8tYXR0YWNoZWQgcm9vdCBtcSBoYXMgaGFuZGxlIDA6IG9uIGFueSBkZXZpY2UgKHJlYWwgb3Igc2ltKSxcXG4rICAgICAgICAjIHdoaWNoIHRoZSBrZXJuZWwgcmVqZWN0cyBhcyBhIHFkaXNjIHBhcmVudC4gQSAwOiBoYW5kbGUgbWVhbnMgdGhlIG1xXFxuKyAgICAgICAgIyBpcyB0aGUgdW50b3VjaGVkIGtlcm5lbCBkZWZhdWx0IC0gbm8gY3VzdG9tIGNoaWxkIHFkaXNjcyBjYW4gaGFuZyBvZmZcXG4rICAgICAgICAjIGFuIHVuYWRkcmVzc2FibGUgcGFyZW50IC0gc28gaW5zdGFsbGluZyBhIHJlYWwgaGFuZGxlIGFuZCByZXN0b3JpbmdcXG4rICAgICAgICAjIHRoZSBkZWZhdWx0IG1xIG9uIGV4aXQgcHJlc2VydmVzIHRoZSBkZXZpY2UncyBlZmZlY3RpdmUgcG9saWN5LlxcbisgICAgICAgIG1xX2hhbmRsZSA9IFxcXCIxOlxcXCJcXG4rICAgICAgICB0YyhmXFxcInFkaXNjIHJlcGxhY2UgZGV2IHtjZmcuaWZuYW1lfSByb290IGhhbmRsZSB7bXFfaGFuZGxlfSBtcVxcXCIpXFxuKyAgICAgICAgZGVmZXIodGMsIGZcXFwicWRpc2MgcmVwbGFjZSBkZXYge2NmZy5pZm5hbWV9IHJvb3QgbXFcXFwiKVxcbisgICAgICAgIHBhcmVudCA9IGZcXFwie21xX2hhbmRsZX17dGFyZ2V0X3F1ZXVlICsgMTp4fVxcXCJcXG4rICAgIGVsc2U6XFxuKyAgICAgICAgcmFpc2UgS3NmdFNraXBFeChmXFxcInJvb3QgcWRpc2MgJ3tyb290WydraW5kJ119JyBpcyBub3QgbXE7IFxcXCJcXG4rICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJyZWZ1c2luZyB0byBkaXN0dXJiIGV4aXN0aW5nIHFkaXNjIHBvbGljeVxcXCIpXFxuK1xcbisgICAgdHJ5OlxcbisgICAgICAgIHRjKGZcXFwicWRpc2MgcmVwbGFjZSBkZXYge2NmZy5pZm5hbWV9IHBhcmVudCB7cGFyZW50fSBmcVxcXCIpXFxuKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzpcXG4rICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFxcbisgICAgICAgICAgICBmXFxcImZxIG5vdCBhdmFpbGFibGUgKENPTkZJR19ORVRfU0NIX0ZRKToge2V4Y31cXFwiKSBmcm9tIGV4Y1xcbitcXG4rICAgIHFkaXNjX2ogPSB0YyhmXFxcInFkaXNjIHNob3cgZGV2IHtjZmcuaWZuYW1lfVxcXCIsIGpzb249VHJ1ZSlcXG4rICAgIGhhc19jbHNhY3QgPSBhbnkocVsna2luZCddID09ICdjbHNhY3QnIGZvciBxIGluIHFkaXNjX2opXFxuKyAgICBpZiBub3QgaGFzX2Nsc2FjdDpcXG4rICAgICAgICB0YyhmXFxcInFkaXNjIGFkZCBkZXYge2NmZy5pZm5hbWV9IGNsc2FjdFxcXCIpXFxuKyAgICAgICAgZGVmZXIodGMsIGZcXFwicWRpc2MgZGVsIGRldiB7Y2ZnLmlmbmFtZX0gY2xzYWN0XFxcIilcXG4rXFxuKyAgICBwcm90byA9IFxcXCJpcHY2XFxcIiBpZiBpbnQoY2ZnLmFkZHJfaXB2ZXIpID09IDYgZWxzZSBcXFwiaXBcXFwiXFxuKyAgICB0cnk6XFxuKyAgICAgICAgdGMoZlxcXCJmaWx0ZXIgYWRkIGRldiB7Y2ZnLmlmbmFtZX0gZWdyZXNzIHByb3RvY29sIHtwcm90b30gXFxcIlxcbisgICAgICAgICAgIGZcXFwicHJlZiAxIGZsb3dlciBpcF9wcm90byB1ZHAgZHN0X3BvcnQge3BvcnR9IFxcXCJcXG4rICAgICAgICAgICBmXFxcImFjdGlvbiBza2JlZGl0IHF1ZXVlX21hcHBpbmcge3RhcmdldF9xdWV1ZX1cXFwiKVxcbisgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6XFxuKyAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcXFwidGMgZmxvd2VyL2FjdF9za2JlZGl0IG5vdCBhdmFpbGFibGVcXFwiKSBmcm9tIGV4Y1xcbisgICAgZGVmZXIodGMsIGZcXFwiZmlsdGVyIGRlbCBkZXYge2NmZy5pZm5hbWV9IGVncmVzcyBwcmVmIDFcXFwiKVxcbitcXG4rICAgIHRjKGZcXFwiZmlsdGVyIGFkZCBkZXYge2NmZy5pZm5hbWV9IGVncmVzcyBwcmVmIDEwMCBcXFwiXFxuKyAgICAgICBmXFxcIm1hdGNoYWxsIGFjdGlvbiBza2JlZGl0IHF1ZXVlX21hcHBpbmcge290aGVyX3F1ZXVlfVxcXCIpXFxuKyAgICBkZWZlcih0YywgZlxcXCJmaWx0ZXIgZGVsIGRldiB7Y2ZnLmlmbmFtZX0gZWdyZXNzIHByZWYgMTAwXFxcIilcXG4rXFxuKyAgICByZXR1cm4gbXFfaGFuZGxlXFxuK1xcbitcXG4rZGVmIF9jcmVhdGVfc290eHRpbWVfc29ja2V0KGNmZyk6XFxuKyAgICBcXFwiXFxcIlxcXCJDcmVhdGUgYSBVRFAgc29ja2V0IHdpdGggU09fVFhUSU1FIGVuYWJsZWQsIGJvdW5kIHRvIHRoZSB0ZXN0IGRldmljZS5cXFwiXFxcIlxcXCJcXG4rICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNiBpZiBjZmcuYWRkcl9pcHZlciA9PSBcXFwiNlxcXCJcXG4rICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ugc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX0RHUkFNKVxcbisgICAgdHJ5OlxcbisgICAgICAgIHNvY2suc2V0c29ja29wdChzb2NrZXQuU09MX1NPQ0tFVCwgU09fVFhUSU1FLCBzdHJ1Y3QucGFjayhcXFwiSWlcXFwiLCAxLCAwKSlcXG4rICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzpcXG4rICAgICAgICBzb2NrLmNsb3NlKClcXG4rICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFxcXCJTT19UWFRJTUUgbm90IHN1cHBvcnRlZFxcXCIpIGZyb20gZXhjXFxuKyAgICBzb2NrLnNldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19CSU5EVE9ERVZJQ0UsXFxuKyAgICAgICAgICAgICAgICAgICAgY2ZnLmlmbmFtZS5lbmNvZGUoKSlcXG4rICAgIHJldHVybiBzb2NrXFxuK1xcbitcXG4rZGVmIF9zZW5kX3NvdHh0aW1lX2J1cnN0KGNmZywgc29jaywgcG9ydCwgY291bnQsIGRlbGF5X25zKTpcXG4rICAgIFxcXCJcXFwiXFxcIlNlbmQgY291bnQgVURQIHBhY2tldHMgc2NoZWR1bGVkIGRlbGF5X25zIGFoZWFkIHVzaW5nIFNPX1RYVElNRS5cXFwiXFxcIlxcXCJcXG4rICAgIHBheWxvYWQgPSBiJ1xcXFx4MDAnICogMTQwMFxcbisgICAgdHh0aW1lX25zID0gdGltZS5jbG9ja19nZXR0aW1lX25zKHRpbWUuQ0xPQ0tfTU9OT1RPTklDKSArIGRlbGF5X25zXFxuK1xcbisgICAgYW5jZGF0YSA9IFsoc29ja2V0LlNPTF9TT0NLRVQsIFNPX1RYVElNRSwgc3RydWN0LnBhY2soXFxcIlFcXFwiLCB0eHRpbWVfbnMpKV1cXG4rICAgIGlmIGludChjZmcuYWRkcl9pcHZlcikgPT0gNjpcXG4rICAgICAgICBkZXN0ID0gKGNmZy5yZW1vdGVfYWRkciwgcG9ydCwgMCwgMClcXG4rICAgIGVsc2U6XFxuKyAgICAgICAgZGVzdCA9IChjZmcucmVtb3RlX2FkZHIsIHBvcnQpXFxuKyAgICBmb3IgXyBpbiByYW5nZShjb3VudCk6XFxuKyAgICAgICAgc29jay5zZW5kbXNnKFtwYXlsb2FkXSwgYW5jZGF0YSwgMCwgZGVzdClcXG4rXFxuK1xcbitkZWYgcmVjb25maWdfdHhfc3RhbGwoY2ZnKSAtXFx1MDAzZSBOb25lOlxcbisgICAgXFxcIlxcXCJcXFwiVGVzdCB0aGF0IHFkaXNjIGJhY2tsb2cgZHJhaW5zIGFmdGVyIHJpbmcgcmVjb25maWd1cmF0aW9uLlxcXCJcXFwiXFxcIlxcbisgICAgdGFyZ2V0X3F1ZXVlID0gMVxcbisgICAgb3RoZXJfcXVldWUgPSAwXFxuK1xcbisgICAgZWhkciA9IHsnaGVhZGVyJzogeydkZXYtaW5kZXgnOiBjZmcuaWZpbmRleH19XFxuKyAgICBjaGFucyA9IGNmZy5ldGguY2hhbm5lbHNfZ2V0KGVoZHIpXFxuK1xcbisgICAgaWYgXFxcImNvbWJpbmVkLW1heFxcXCIgbm90IGluIGNoYW5zOlxcbisgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXFxcImRldmljZSBkb2VzIG5vdCBzdXBwb3J0IGNvbWJpbmVkIGNoYW5uZWxzXFxcIilcXG4rICAgIGlmIGNoYW5zLmdldChcXFwiY29tYmluZWQtbWF4XFxcIiwgMCkgXFx1MDAzYyAyOlxcbisgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXFxcImRldmljZSBkb2VzIG5vdCBzdXBwb3J0IDIrIGNvbWJpbmVkIGNoYW5uZWxzXFxcIilcXG4rICAgIGlmIGNoYW5zW1xcXCJjb21iaW5lZC1jb3VudFxcXCJdIFxcdTAwM2MgMjpcXG4rICAgICAgICBkZWZlcihjZmcuZXRoLmNoYW5uZWxzX3NldCxcXG4rICAgICAgICAgICAgICBlaGRyIHwge1xcXCJjb21iaW5lZC1jb3VudFxcXCI6IGNoYW5zW1xcXCJjb21iaW5lZC1jb3VudFxcXCJdfSlcXG4rICAgICAgICBjZmcuZXRoLmNoYW5uZWxzX3NldChlaGRyIHwge1xcXCJjb21iaW5lZC1jb3VudFxcXCI6IDJ9KVxcbitcXG4rICAgIHJpbmdzID0gY2ZnLmV0aC5yaW5nc19nZXQoZWhkcilcXG4rICAgIGlmICdyeCcgbm90IGluIHJpbmdzIG9yICd0eCcgbm90IGluIHJpbmdzOlxcbisgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXFxcImRldmljZSBkb2VzIG5vdCBleHBvc2UgcngvdHggcmluZyBwYXJhbXNcXFwiKVxcbisgICAgdHhfY3VyID0gcmluZ3NbJ3R4J11cXG4rICAgIGlmIHR4X2N1ciBcXHUwMDNjPSBNSU5fVFhfUklORzpcXG4rICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFxcXCJ0eCByaW5nIHNpemUgYWxyZWFkeSBhdCBtaW5pbXVtXFxcIilcXG4rICAgIGRlZmVyKGNmZy5ldGgucmluZ3Nfc2V0LCBlaGRyIHwgeyd0eCc6IHR4X2N1cn0pXFxuK1xcbisgICAgY2ZnLmV0aC5yaW5nc19zZXQoZWhkciB8IHsndHgnOiBNSU5fVFhfUklOR30pXFxuK1xcbisgICAgIyBTbG93IGNvbXBsZXRpb25zIHNvIHRoZSByaW5nIHN0YXlzIGZ1bGwgYWZ0ZXIgRlEgcmVsZWFzZXMgcGFja2V0c1xcbisgICAgbmFwaV9kZWZlciA9IGZcXFwiL3N5cy9jbGFzcy9uZXQve2NmZy5pZm5hbWV9L25hcGlfZGVmZXJfaGFyZF9pcnFzXFxcIlxcbisgICAgZ3JvX3RpbWVvdXQgPSBmXFxcIi9zeXMvY2xhc3MvbmV0L3tjZmcuaWZuYW1lfS9ncm9fZmx1c2hfdGltZW91dFxcXCJcXG4rICAgIF93cml0ZV9zeXNmcyhuYXBpX2RlZmVyLCAxMDApXFxuKyAgICBfd3JpdGVfc3lzZnMoZ3JvX3RpbWVvdXQsIDEwMDAwMDAwMDApXFxuK1xcbisgICAgcG9ydCA9IHJhbmRfcG9ydCgpXFxuKyAgICBtcV9oYW5kbGUgPSBfc2V0dXBfZnFfcWRpc2MoY2ZnLCBwb3J0LCB0YXJnZXRfcXVldWUsIG90aGVyX3F1ZXVlKVxcbitcXG4rICAgIHNvY2sgPSBfY3JlYXRlX3NvdHh0aW1lX3NvY2tldChjZmcpXFxuKyAgICBkZWZlcihzb2NrLmNsb3NlKVxcbitcXG4rICAgIHBrdF9jb3VudCA9IE1JTl9UWF9SSU5HICogMlxcbitcXG4rICAgIGZvciBkZWxheV9tcyBpbiBbMTAwLCAyMDAsIDUwMF06XFxuKyAgICAgICAgX3NlbmRfc290eHRpbWVfYnVyc3QoY2ZnLCBzb2NrLCBwb3J0LCBwa3RfY291bnQsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXlfbXMgKiAxXzAwMF8wMDApXFxuKyAgICAgICAga3NmdF9wcihmXFxcIlNlbnQge3BrdF9jb3VudH0gU09fVFhUSU1FIHBhY2tldHMgKCt7ZGVsYXlfbXN9bXMpXFxcIilcXG4rICAgICAgICB0aW1lLnNsZWVwKGRlbGF5X21zIC8gMTAwMCArIDAuMylcXG4rXFxuKyAgICAgICAgYmFja2xvZyA9IF9nZXRfcWRpc2NfYmFja2xvZyhjZmcsIG1xX2hhbmRsZSwgdGFyZ2V0X3F1ZXVlKVxcbisgICAgICAgIGlmIGJhY2tsb2c6XFxuKyAgICAgICAgICAgIGJyZWFrXFxuKyAgICBlbHNlOlxcbisgICAgICAgIHJhaXNlIEtzZnRGYWlsRXgoXFxcImZhaWxlZCB0byBidWlsZCBxZGlzYyBiYWNrbG9nXFxcIilcXG4rXFxuKyAgICBrc2Z0X3ByKGZcXFwiQmFja2xvZyBiZWZvcmUgcmVjb25maWc6IHtiYWNrbG9nfSBieXRlc1xcXCIpXFxuK1xcbisgICAgIyBUcmlnZ2VyIHJpbmcgcmVjb25maWcg4oCUIGRyaXZlciBzaG91bGQgY2FsbCB3YWtlLCBub3QganVzdCBzdGFydFxcbisgICAgY2ZnLmV0aC5yaW5nc19zZXQoZWhkciB8IHsndHgnOiB0eF9jdXJ9KVxcbitcXG4rICAgICMgTGV0IGNvbXBsZXRpb25zIHByb2NlZWQgbm9ybWFsbHlcXG4rICAgIF93cml0ZV9zeXNmcyhuYXBpX2RlZmVyLCAwKVxcbisgICAgX3dyaXRlX3N5c2ZzKGdyb190aW1lb3V0LCAwKVxcbitcXG4rICAgICMgUG9sbCBmb3IgYmFja2xvZyB0byBkcmFpblxcbisgICAgZm9yIF8gaW4gcmFuZ2UoMTAwKTpcXG4rICAgICAgICBiYWNrbG9nID0gX2dldF9xZGlzY19iYWNrbG9nKGNmZywgbXFfaGFuZGxlLCB0YXJnZXRfcXVldWUpXFxuKyAgICAgICAgaWYgbm90IGJhY2tsb2c6XFxuKyAgICAgICAgICAgIGJyZWFrXFxuKyAgICAgICAgdGltZS5zbGVlcCgwLjEpXFxuK1xcbisgICAga3NmdF9lcSgwLCBiYWNrbG9nLFxcbisgICAgICAgICAgICBjb21tZW50PWZcXFwicWRpc2MgYmFja2xvZyBzdHVjayBvbiBxdWV1ZSB7dGFyZ2V0X3F1ZXVlfSBcXFwiXFxuKyAgICAgICAgICAgICAgICAgICAgZlxcXCJhZnRlciByaW5nIHJlY29uZmlnXFxcIilcXG4rXFxuK1xcbiBkZWYgbWFpbigpIC1cXHUwMDNlIE5vbmU6XFxuICAgICBcXFwiXFxcIlxcXCIgS3NmdCBib2lsZXIgcGxhdGUgbWFpbiBcXFwiXFxcIlxcXCJcXG4gXFxuLSAgICB3aXRoIE5ldERydkVwRW52KF9fZmlsZV9fKSBhcyBjZmc6XFxuKyAgICB3aXRoIE5ldERydkVwRW52KF9fZmlsZV9fLCBxdWV1ZV9jb3VudD0yKSBhcyBjZmc6XFxuICAgICAgICAgY2ZnLmV0aCA9IEV0aHRvb2xGYW1pbHkoKVxcbiBcXG4gICAgICAgICBrc2Z0X3J1bihbY2hhbm5lbHMsXFxuLSAgICAgICAgICAgICAgICAgIHJpbmdwYXJhbV0sXFxuKyAgICAgICAgICAgICAgICAgIHJpbmdwYXJhbSxcXG4rICAgICAgICAgICAgICAgICAgcmVjb25maWdfdHhfc3RhbGxdLFxcbiAgICAgICAgICAgICAgICAgIGFyZ3M9KGNmZywgKSlcXG4gICAgIGtzZnRfZXhpdCgpXFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNDoxNToyNi42NDEyNTE0MzJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5MTczOTY3MTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSB0ZXN0IHNjcmlwdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTllNmIwNzBiNjZhNzRkYWEzZDRiNGMxYTgwMWY3YmNlMzM3YTY5OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDI1IDA0OjE1OjIzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnXG5pbmRleCAyMDcwZTg5MGUwNjRlNS4uZjM5MzNjZjNlNmJlNjEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9jb25maWdcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZ1xuQEAgLTQsOCArNCwxMSBAQCBDT05GSUdfREVCVUdfSU5GT19CVEZfTU9EVUxFUz1uXG4gQ09ORklHX0lORVRfUFNQPXlcbiBDT05GSUdfSVBWNj15XG4gQ09ORklHX01BQ1NFQz1tXG4rQ09ORklHX05FVF9BQ1RfU0tCRURJVD1tXG4gQ09ORklHX05FVF9DTFNfQUNUPXlcbiBDT05GSUdfTkVUX0NMU19CUEY9eVxuK0NPTkZJR19ORVRfQ0xTX0ZMT1dFUj1tXG4rQ09ORklHX05FVF9DTFNfTUFUQ0hBTEw9bVxuIENPTkZJR19ORVRDT05TT0xFPW1cbiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDPXlcbiBDT05GSUdfTkVUQ09OU09MRV9FWFRFTkRFRF9MT0c9eVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2xpYi9weS9lbnYucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9saWIvcHkvZW52LnB5XG5pbmRleCBlNGFjZjNkODMzM2ZkMC4uYjFjNmY2Y2VmN2RkMjUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9saWIvcHkvZW52LnB5XG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9saWIvcHkvZW52LnB5XG5AQCAtMTE0LDEwICsxMTQsMTEgQEAgY2xhc3MgTmV0RHJ2RXBFbnYoTmV0RHJ2RW52QmFzZSk6XG4gICAgIG5zaW1fdjRfcGZ4ID0gXCIxOTIuMC4yLlwiXG4gICAgIG5zaW1fdjZfcGZ4ID0gXCIyMDAxOmRiODo6XCJcbiBcbi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHNyY19wYXRoLCBuc2ltX3Rlc3Q9Tm9uZSk6XG4rICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzcmNfcGF0aCwgbnNpbV90ZXN0PU5vbmUsIHF1ZXVlX2NvdW50PU5vbmUpOlxuICAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhzcmNfcGF0aClcbiBcbiAgICAgICAgIHNlbGYuX3N0YXRzX3NldHRsZV90aW1lID0gTm9uZVxuKyAgICAgICAgc2VsZi5fcXVldWVfY291bnQgPSBxdWV1ZV9jb3VudFxuIFxuICAgICAgICAgIyBUaGluZ3Mgd2UgdHJ5IHRvIGRlc3Ryb3lcbiAgICAgICAgIHNlbGYucmVtb3RlID0gTm9uZVxuQEAgLTE3Myw5ICsxNzQsMTMgQEAgY2xhc3MgTmV0RHJ2RXBFbnYoTmV0RHJ2RW52QmFzZSk6XG4gICAgICAgICBzZWxmLl9yZXF1aXJlZF9jbWQgPSB7fVxuIFxuICAgICBkZWYgY3JlYXRlX2xvY2FsKHNlbGYpOlxuKyAgICAgICAgbnNpbV9rd2FyZ3MgPSB7fVxuKyAgICAgICAgaWYgc2VsZi5fcXVldWVfY291bnQ6XG4rICAgICAgICAgICAgbnNpbV9rd2FyZ3NbXCJxdWV1ZV9jb3VudFwiXSA9IHNlbGYuX3F1ZXVlX2NvdW50XG4rXG4gICAgICAgICBzZWxmLl9uZXRucyA9IE5ldE5TKClcbi0gICAgICAgIHNlbGYuX25zID0gTmV0ZGV2U2ltRGV2KClcbi0gICAgICAgIHNlbGYuX25zX3BlZXIgPSBOZXRkZXZTaW1EZXYobnM9c2VsZi5fbmV0bnMpXG4rICAgICAgICBzZWxmLl9ucyA9IE5ldGRldlNpbURldigqKm5zaW1fa3dhcmdzKVxuKyAgICAgICAgc2VsZi5fbnNfcGVlciA9IE5ldGRldlNpbURldihucz1zZWxmLl9uZXRucywgKipuc2ltX2t3YXJncylcbiBcbiAgICAgICAgIHdpdGggb3BlbihcIi9wcm9jL3NlbGYvbnMvbmV0XCIpIGFzIG5zZmQwLCBcXFxuICAgICAgICAgICAgICBvcGVuKFwiL3Zhci9ydW4vbmV0bnMvXCIgKyBzZWxmLl9uZXRucy5uYW1lKSBhcyBuc2ZkMTpcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9yaW5nX3JlY29uZmlnLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcmluZ19yZWNvbmZpZy5weVxuaW5kZXggZjk1MzBhOGIwODU2N2YuLmE1YTJkZWZjNGZiMTNjIDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcmluZ19yZWNvbmZpZy5weVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcmluZ19yZWNvbmZpZy5weVxuQEAgLTUsMTAgKzUsMjEgQEBcbiBUZXN0IGNoYW5uZWwgYW5kIHJpbmcgc2l6ZSBjb25maWd1cmF0aW9uIHZpYSBldGh0b29sICgtTCAvIC1HKS5cbiBcIlwiXCJcbiBcbitpbXBvcnQgc29ja2V0XG4raW1wb3J0IHN0cnVjdFxuK2ltcG9ydCB0aW1lXG4rXG4gZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfcnVuLCBrc2Z0X2V4aXQsIGtzZnRfcHJcbiBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9lcVxuK2Zyb20gbGliLnB5IGltcG9ydCBLc2Z0U2tpcEV4LCBLc2Z0RmFpbEV4XG4gZnJvbSBsaWIucHkgaW1wb3J0IE5ldERydkVwRW52LCBFdGh0b29sRmFtaWx5LCBHZW5lcmF0ZVRyYWZmaWNcbi1mcm9tIGxpYi5weSBpbXBvcnQgZGVmZXIsIE5sRXJyb3Jcbitmcm9tIGxpYi5weSBpbXBvcnQgY21kLCBkZWZlciwgcmFuZF9wb3J0LCB0YywgTmxFcnJvclxuK1xuKyMgQWRkZWQgaW4gUHl0aG9uIDMuMTM7IGZhbGxiYWNrIHRvIDYxIGZvciB4ODYvQVJNL01JUFNcbitTT19UWFRJTUUgPSBnZXRhdHRyKHNvY2tldCwgXCJTT19UWFRJTUVcIiwgNjEpXG4rXG4rIyBUWCByaW5nIHNpemUgdGhlIHRlc3Qgc2hyaW5rcyB0byBzbyB0aGUgcmluZyBmaWxscyBxdWlja2x5LlxuK01JTl9UWF9SSU5HID0gNjRcbiBcbiBcbiBkZWYgY2hhbm5lbHMoY2ZnKSAtXHUwMDNlIE5vbmU6XG5AQCAtMTUxLDE0ICsxNjIsMjA0IEBAIGRlZiByaW5ncGFyYW0oY2ZnKSAtXHUwMDNlIE5vbmU6XG4gICAgICAgICBHZW5lcmF0ZVRyYWZmaWMoY2ZnKS53YWl0X3BrdHNfYW5kX3N0b3AoMTAwMDApXG4gXG4gXG4rZGVmIF93cml0ZV9maWxlKHBhdGgsIHZhbCk6XG4rICAgIFwiXCJcIldyaXRlIHZhbCB0byBhIGZpbGUuXCJcIlwiXG4rICAgIHdpdGggb3BlbihwYXRoLCBcIndcIiwgZW5jb2Rpbmc9XCJ1dGYtOFwiKSBhcyBmcDpcbisgICAgICAgIGZwLndyaXRlKHN0cih2YWwpKVxuK1xuK1xuK2RlZiBfd3JpdGVfc3lzZnMocGF0aCwgdmFsKTpcbisgICAgXCJcIlwiV3JpdGUgdmFsIHRvIGEgc3lzZnMgZmlsZSwgcmVzdG9yaW5nIHRoZSBvcmlnaW5hbCB2YWx1ZSBvbiBleGl0LlwiXCJcIlxuKyAgICB3aXRoIG9wZW4ocGF0aCwgXCJyXCIsIGVuY29kaW5nPVwidXRmLThcIikgYXMgZnA6XG4rICAgICAgICBvcmlnX3ZhbCA9IGZwLnJlYWQoKS5zdHJpcCgpXG4rICAgIGlmIHN0cih2YWwpID09IG9yaWdfdmFsOlxuKyAgICAgICAgcmV0dXJuXG4rICAgIF93cml0ZV9maWxlKHBhdGgsIHZhbClcbisgICAgZGVmZXIoX3dyaXRlX2ZpbGUsIHBhdGgsIG9yaWdfdmFsKVxuK1xuK1xuK2RlZiBfZ2V0X3FkaXNjX2JhY2tsb2coY2ZnLCBtcV9oYW5kbGUsIHF1ZXVlKTpcbisgICAgXCJcIlwiUmV0dXJuIHRoZSBxZGlzYyBiYWNrbG9nIChieXRlcykgZm9yIHRoZSBnaXZlbiBUWCBxdWV1ZSdzIGxlYWYuXCJcIlwiXG4rICAgIHRhcmdldF9wYXJlbnQgPSBmXCJ7bXFfaGFuZGxlfXtxdWV1ZSArIDE6eH1cIlxuKyAgICBmb3IgcSBpbiB0YyhmXCItcyBxZGlzYyBzaG93IGRldiB7Y2ZnLmlmbmFtZX1cIiwganNvbj1UcnVlKTpcbisgICAgICAgIGlmIHEuZ2V0KFwicGFyZW50XCIsIFwiXCIpID09IHRhcmdldF9wYXJlbnQ6XG4rICAgICAgICAgICAgcmV0dXJuIHEuZ2V0KFwiYmFja2xvZ1wiKSBvciAwXG4rICAgIHJldHVybiAwXG4rXG4rXG4rZGVmIF9zZXR1cF9mcV9xZGlzYyhjZmcsIHBvcnQsIHRhcmdldF9xdWV1ZSwgb3RoZXJfcXVldWUpOlxuKyAgICBcIlwiXCJQdXQgYW4gZnEgcWRpc2Mgb24gdGFyZ2V0X3F1ZXVlJ3MgbGVhZiBhbmQgcmV0dXJuIHRoZSBtcSBoYW5kbGUgaW4gdXNlLlxuK1xuKyAgICBXZSBtdXN0IG5vdCBkaXN0dXJiIHRoZSBkZXZpY2UncyBleGlzdGluZyBUWC9SWCBxZGlzYyBwb2xpY3kuIE9uIGEgcmVhbFxuKyAgICBOSUMgdGhlIHJvb3QgbXEgYWxyZWFkeSBoYXMgYW4gYWRkcmVzc2FibGUgaGFuZGxlLCBzbyB3ZSBsZWF2ZSB0aGUgcm9vdFxuKyAgICBhbmQgZXZlcnkgb3RoZXIgcXVldWUgYWxvbmUgYW5kIG9ubHkgc3dhcCB0aGlzIG9uZSBsZWFmLCByZXN0b3JpbmcgaXRzXG4rICAgIG9yaWdpbmFsIHFkaXNjIGFmdGVyd2FyZHMuXG4rICAgIFwiXCJcIlxuKyAgICBxZGlzY3MgPSB0YyhmXCJxZGlzYyBzaG93IGRldiB7Y2ZnLmlmbmFtZX1cIiwganNvbj1UcnVlKVxuKyAgICByb290ID0gbmV4dCgocSBmb3IgcSBpbiBxZGlzY3MgaWYgcS5nZXQoXCJyb290XCIpKSwgTm9uZSlcbitcbisgICAgaWYgcm9vdCBhbmQgcm9vdFtcImtpbmRcIl0gPT0gXCJtcVwiIGFuZCByb290W1wiaGFuZGxlXCJdICE9IFwiMDpcIjpcbisgICAgICAgICMgQWRkcmVzc2FibGUgbXEgKHByZXZpb3VzbHktY29uZmlndXJlZCk6IHRvdWNoIG9ubHkgdGhlIHRhcmdldCBxdWV1ZSdzXG4rICAgICAgICAjIGxlYWYgYW5kIHJlc3RvcmUgaXRzIG9yaWdpbmFsIHFkaXNjIGFmdGVyd2FyZHMuXG4rICAgICAgICBtcV9oYW5kbGUgPSByb290W1wiaGFuZGxlXCJdXG4rICAgICAgICBwYXJlbnQgPSBmXCJ7bXFfaGFuZGxlfXt0YXJnZXRfcXVldWUgKyAxOnh9XCJcbisgICAgICAgIG9yaWcgPSBuZXh0KChxIGZvciBxIGluIHFkaXNjcyBpZiBxLmdldChcInBhcmVudFwiKSA9PSBwYXJlbnQpLCBOb25lKVxuKyAgICAgICAgb3JpZ19raW5kID0gb3JpZ1tcImtpbmRcIl0gaWYgb3JpZyBlbHNlIFxcXG4rICAgICAgICAgICAgY21kKFwic3lzY3RsIC1uIG5ldC5jb3JlLmRlZmF1bHRfcWRpc2NcIikuc3Rkb3V0LnN0cmlwKClcbisgICAgICAgIGRlZmVyKHRjLCBmXCJxZGlzYyByZXBsYWNlIGRldiB7Y2ZnLmlmbmFtZX0gcGFyZW50IHtwYXJlbnR9IHtvcmlnX2tpbmR9XCIpXG4rICAgIGVsaWYgcm9vdCBpcyBOb25lIG9yIHJvb3RbXCJraW5kXCJdIGluIChcIm1xXCIsIFwibm9xdWV1ZVwiKTpcbisgICAgICAgICMgVGhlIGF1dG8tYXR0YWNoZWQgcm9vdCBtcSBoYXMgaGFuZGxlIDA6IG9uIGFueSBkZXZpY2UgKHJlYWwgb3Igc2ltKSxcbisgICAgICAgICMgd2hpY2ggdGhlIGtlcm5lbCByZWplY3RzIGFzIGEgcWRpc2MgcGFyZW50LiBBIDA6IGhhbmRsZSBtZWFucyB0aGUgbXFcbisgICAgICAgICMgaXMgdGhlIHVudG91Y2hlZCBrZXJuZWwgZGVmYXVsdCAtIG5vIGN1c3RvbSBjaGlsZCBxZGlzY3MgY2FuIGhhbmcgb2ZmXG4rICAgICAgICAjIGFuIHVuYWRkcmVzc2FibGUgcGFyZW50IC0gc28gaW5zdGFsbGluZyBhIHJlYWwgaGFuZGxlIGFuZCByZXN0b3JpbmdcbisgICAgICAgICMgdGhlIGRlZmF1bHQgbXEgb24gZXhpdCBwcmVzZXJ2ZXMgdGhlIGRldmljZSdzIGVmZmVjdGl2ZSBwb2xpY3kuXG4rICAgICAgICBtcV9oYW5kbGUgPSBcIjE6XCJcbisgICAgICAgIHRjKGZcInFkaXNjIHJlcGxhY2UgZGV2IHtjZmcuaWZuYW1lfSByb290IGhhbmRsZSB7bXFfaGFuZGxlfSBtcVwiKVxuKyAgICAgICAgZGVmZXIodGMsIGZcInFkaXNjIHJlcGxhY2UgZGV2IHtjZmcuaWZuYW1lfSByb290IG1xXCIpXG4rICAgICAgICBwYXJlbnQgPSBmXCJ7bXFfaGFuZGxlfXt0YXJnZXRfcXVldWUgKyAxOnh9XCJcbisgICAgZWxzZTpcbisgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoZlwicm9vdCBxZGlzYyAne3Jvb3RbJ2tpbmQnXX0nIGlzIG5vdCBtcTsgXCJcbisgICAgICAgICAgICAgICAgICAgICAgICAgXCJyZWZ1c2luZyB0byBkaXN0dXJiIGV4aXN0aW5nIHFkaXNjIHBvbGljeVwiKVxuK1xuKyAgICB0cnk6XG4rICAgICAgICB0YyhmXCJxZGlzYyByZXBsYWNlIGRldiB7Y2ZnLmlmbmFtZX0gcGFyZW50IHtwYXJlbnR9IGZxXCIpXG4rICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOlxuKyAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcbisgICAgICAgICAgICBmXCJmcSBub3QgYXZhaWxhYmxlIChDT05GSUdfTkVUX1NDSF9GUSk6IHtleGN9XCIpIGZyb20gZXhjXG4rXG4rICAgIHFkaXNjX2ogPSB0YyhmXCJxZGlzYyBzaG93IGRldiB7Y2ZnLmlmbmFtZX1cIiwganNvbj1UcnVlKVxuKyAgICBoYXNfY2xzYWN0ID0gYW55KHFbJ2tpbmQnXSA9PSAnY2xzYWN0JyBmb3IgcSBpbiBxZGlzY19qKVxuKyAgICBpZiBub3QgaGFzX2Nsc2FjdDpcbisgICAgICAgIHRjKGZcInFkaXNjIGFkZCBkZXYge2NmZy5pZm5hbWV9IGNsc2FjdFwiKVxuKyAgICAgICAgZGVmZXIodGMsIGZcInFkaXNjIGRlbCBkZXYge2NmZy5pZm5hbWV9IGNsc2FjdFwiKVxuK1xuKyAgICBwcm90byA9IFwiaXB2NlwiIGlmIGludChjZmcuYWRkcl9pcHZlcikgPT0gNiBlbHNlIFwiaXBcIlxuKyAgICB0cnk6XG4rICAgICAgICB0YyhmXCJmaWx0ZXIgYWRkIGRldiB7Y2ZnLmlmbmFtZX0gZWdyZXNzIHByb3RvY29sIHtwcm90b30gXCJcbisgICAgICAgICAgIGZcInByZWYgMSBmbG93ZXIgaXBfcHJvdG8gdWRwIGRzdF9wb3J0IHtwb3J0fSBcIlxuKyAgICAgICAgICAgZlwiYWN0aW9uIHNrYmVkaXQgcXVldWVfbWFwcGluZyB7dGFyZ2V0X3F1ZXVlfVwiKVxuKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzpcbisgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXCJ0YyBmbG93ZXIvYWN0X3NrYmVkaXQgbm90IGF2YWlsYWJsZVwiKSBmcm9tIGV4Y1xuKyAgICBkZWZlcih0YywgZlwiZmlsdGVyIGRlbCBkZXYge2NmZy5pZm5hbWV9IGVncmVzcyBwcmVmIDFcIilcbitcbisgICAgdGMoZlwiZmlsdGVyIGFkZCBkZXYge2NmZy5pZm5hbWV9IGVncmVzcyBwcmVmIDEwMCBcIlxuKyAgICAgICBmXCJtYXRjaGFsbCBhY3Rpb24gc2tiZWRpdCBxdWV1ZV9tYXBwaW5nIHtvdGhlcl9xdWV1ZX1cIilcbisgICAgZGVmZXIodGMsIGZcImZpbHRlciBkZWwgZGV2IHtjZmcuaWZuYW1lfSBlZ3Jlc3MgcHJlZiAxMDBcIilcbitcbisgICAgcmV0dXJuIG1xX2hhbmRsZVxuK1xuK1xuK2RlZiBfY3JlYXRlX3NvdHh0aW1lX3NvY2tldChjZmcpOlxuKyAgICBcIlwiXCJDcmVhdGUgYSBVRFAgc29ja2V0IHdpdGggU09fVFhUSU1FIGVuYWJsZWQsIGJvdW5kIHRvIHRoZSB0ZXN0IGRldmljZS5cIlwiXCJcbisgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQ2IGlmIGNmZy5hZGRyX2lwdmVyID09IFwiNlwiXG4rICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ugc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX0RHUkFNKVxuKyAgICB0cnk6XG4rICAgICAgICBzb2NrLnNldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsIFNPX1RYVElNRSwgc3RydWN0LnBhY2soXCJJaVwiLCAxLCAwKSlcbisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOlxuKyAgICAgICAgc29jay5jbG9zZSgpXG4rICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFwiU09fVFhUSU1FIG5vdCBzdXBwb3J0ZWRcIikgZnJvbSBleGNcbisgICAgc29jay5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU09fQklORFRPREVWSUNFLFxuKyAgICAgICAgICAgICAgICAgICAgY2ZnLmlmbmFtZS5lbmNvZGUoKSlcbisgICAgcmV0dXJuIHNvY2tcbitcbitcbitkZWYgX3NlbmRfc290eHRpbWVfYnVyc3QoY2ZnLCBzb2NrLCBwb3J0LCBjb3VudCwgZGVsYXlfbnMpOlxuKyAgICBcIlwiXCJTZW5kIGNvdW50IFVEUCBwYWNrZXRzIHNjaGVkdWxlZCBkZWxheV9ucyBhaGVhZCB1c2luZyBTT19UWFRJTUUuXCJcIlwiXG4rICAgIHBheWxvYWQgPSBiJ1xceDAwJyAqIDE0MDBcbisgICAgdHh0aW1lX25zID0gdGltZS5jbG9ja19nZXR0aW1lX25zKHRpbWUuQ0xPQ0tfTU9OT1RPTklDKSArIGRlbGF5X25zXG4rXG4rICAgIGFuY2RhdGEgPSBbKHNvY2tldC5TT0xfU09DS0VULCBTT19UWFRJTUUsIHN0cnVjdC5wYWNrKFwiUVwiLCB0eHRpbWVfbnMpKV1cbisgICAgaWYgaW50KGNmZy5hZGRyX2lwdmVyKSA9PSA2OlxuKyAgICAgICAgZGVzdCA9IChjZmcucmVtb3RlX2FkZHIsIHBvcnQsIDAsIDApXG4rICAgIGVsc2U6XG4rICAgICAgICBkZXN0ID0gKGNmZy5yZW1vdGVfYWRkciwgcG9ydClcbisgICAgZm9yIF8gaW4gcmFuZ2UoY291bnQpOlxuKyAgICAgICAgc29jay5zZW5kbXNnKFtwYXlsb2FkXSwgYW5jZGF0YSwgMCwgZGVzdClcbitcbitcbitkZWYgcmVjb25maWdfdHhfc3RhbGwoY2ZnKSAtXHUwMDNlIE5vbmU6XG4rICAgIFwiXCJcIlRlc3QgdGhhdCBxZGlzYyBiYWNrbG9nIGRyYWlucyBhZnRlciByaW5nIHJlY29uZmlndXJhdGlvbi5cIlwiXCJcbisgICAgdGFyZ2V0X3F1ZXVlID0gMVxuKyAgICBvdGhlcl9xdWV1ZSA9IDBcbitcbisgICAgZWhkciA9IHsnaGVhZGVyJzogeydkZXYtaW5kZXgnOiBjZmcuaWZpbmRleH19XG4rICAgIGNoYW5zID0gY2ZnLmV0aC5jaGFubmVsc19nZXQoZWhkcilcbitcbisgICAgaWYgXCJjb21iaW5lZC1tYXhcIiBub3QgaW4gY2hhbnM6XG4rICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFwiZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgY29tYmluZWQgY2hhbm5lbHNcIilcbisgICAgaWYgY2hhbnMuZ2V0KFwiY29tYmluZWQtbWF4XCIsIDApIFx1MDAzYyAyOlxuKyAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcImRldmljZSBkb2VzIG5vdCBzdXBwb3J0IDIrIGNvbWJpbmVkIGNoYW5uZWxzXCIpXG4rICAgIGlmIGNoYW5zW1wiY29tYmluZWQtY291bnRcIl0gXHUwMDNjIDI6XG4rICAgICAgICBkZWZlcihjZmcuZXRoLmNoYW5uZWxzX3NldCxcbisgICAgICAgICAgICAgIGVoZHIgfCB7XCJjb21iaW5lZC1jb3VudFwiOiBjaGFuc1tcImNvbWJpbmVkLWNvdW50XCJdfSlcbisgICAgICAgIGNmZy5ldGguY2hhbm5lbHNfc2V0KGVoZHIgfCB7XCJjb21iaW5lZC1jb3VudFwiOiAyfSlcbitcbisgICAgcmluZ3MgPSBjZmcuZXRoLnJpbmdzX2dldChlaGRyKVxuKyAgICBpZiAncngnIG5vdCBpbiByaW5ncyBvciAndHgnIG5vdCBpbiByaW5nczpcbisgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXCJkZXZpY2UgZG9lcyBub3QgZXhwb3NlIHJ4L3R4IHJpbmcgcGFyYW1zXCIpXG4rICAgIHR4X2N1ciA9IHJpbmdzWyd0eCddXG4rICAgIGlmIHR4X2N1ciBcdTAwM2M9IE1JTl9UWF9SSU5HOlxuKyAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcInR4IHJpbmcgc2l6ZSBhbHJlYWR5IGF0IG1pbmltdW1cIilcbisgICAgZGVmZXIoY2ZnLmV0aC5yaW5nc19zZXQsIGVoZHIgfCB7J3R4JzogdHhfY3VyfSlcbitcbisgICAgY2ZnLmV0aC5yaW5nc19zZXQoZWhkciB8IHsndHgnOiBNSU5fVFhfUklOR30pXG4rXG4rICAgICMgU2xvdyBjb21wbGV0aW9ucyBzbyB0aGUgcmluZyBzdGF5cyBmdWxsIGFmdGVyIEZRIHJlbGVhc2VzIHBhY2tldHNcbisgICAgbmFwaV9kZWZlciA9IGZcIi9zeXMvY2xhc3MvbmV0L3tjZmcuaWZuYW1lfS9uYXBpX2RlZmVyX2hhcmRfaXJxc1wiXG4rICAgIGdyb190aW1lb3V0ID0gZlwiL3N5cy9jbGFzcy9uZXQve2NmZy5pZm5hbWV9L2dyb19mbHVzaF90aW1lb3V0XCJcbisgICAgX3dyaXRlX3N5c2ZzKG5hcGlfZGVmZXIsIDEwMClcbisgICAgX3dyaXRlX3N5c2ZzKGdyb190aW1lb3V0LCAxMDAwMDAwMDAwKVxuK1xuKyAgICBwb3J0ID0gcmFuZF9wb3J0KClcbisgICAgbXFfaGFuZGxlID0gX3NldHVwX2ZxX3FkaXNjKGNmZywgcG9ydCwgdGFyZ2V0X3F1ZXVlLCBvdGhlcl9xdWV1ZSlcbitcbisgICAgc29jayA9IF9jcmVhdGVfc290eHRpbWVfc29ja2V0KGNmZylcbisgICAgZGVmZXIoc29jay5jbG9zZSlcbitcbisgICAgcGt0X2NvdW50ID0gTUlOX1RYX1JJTkcgKiAyXG4rXG4rICAgIGZvciBkZWxheV9tcyBpbiBbMTAwLCAyMDAsIDUwMF06XG4rICAgICAgICBfc2VuZF9zb3R4dGltZV9idXJzdChjZmcsIHNvY2ssIHBvcnQsIHBrdF9jb3VudCxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5X21zICogMV8wMDBfMDAwKVxuKyAgICAgICAga3NmdF9wcihmXCJTZW50IHtwa3RfY291bnR9IFNPX1RYVElNRSBwYWNrZXRzICgre2RlbGF5X21zfW1zKVwiKVxuKyAgICAgICAgdGltZS5zbGVlcChkZWxheV9tcyAvIDEwMDAgKyAwLjMpXG4rXG4rICAgICAgICBiYWNrbG9nID0gX2dldF9xZGlzY19iYWNrbG9nKGNmZywgbXFfaGFuZGxlLCB0YXJnZXRfcXVldWUpXG4rICAgICAgICBpZiBiYWNrbG9nOlxuKyAgICAgICAgICAgIGJyZWFrXG4rICAgIGVsc2U6XG4rICAgICAgICByYWlzZSBLc2Z0RmFpbEV4KFwiZmFpbGVkIHRvIGJ1aWxkIHFkaXNjIGJhY2tsb2dcIilcbitcbisgICAga3NmdF9wcihmXCJCYWNrbG9nIGJlZm9yZSByZWNvbmZpZzoge2JhY2tsb2d9IGJ5dGVzXCIpXG4rXG4rICAgICMgVHJpZ2dlciByaW5nIHJlY29uZmlnIOKAlCBkcml2ZXIgc2hvdWxkIGNhbGwgd2FrZSwgbm90IGp1c3Qgc3RhcnRcbisgICAgY2ZnLmV0aC5yaW5nc19zZXQoZWhkciB8IHsndHgnOiB0eF9jdXJ9KVxuK1xuKyAgICAjIExldCBjb21wbGV0aW9ucyBwcm9jZWVkIG5vcm1hbGx5XG4rICAgIF93cml0ZV9zeXNmcyhuYXBpX2RlZmVyLCAwKVxuKyAgICBfd3JpdGVfc3lzZnMoZ3JvX3RpbWVvdXQsIDApXG4rXG4rICAgICMgUG9sbCBmb3IgYmFja2xvZyB0byBkcmFpblxuKyAgICBmb3IgXyBpbiByYW5nZSgxMDApOlxuKyAgICAgICAgYmFja2xvZyA9IF9nZXRfcWRpc2NfYmFja2xvZyhjZmcsIG1xX2hhbmRsZSwgdGFyZ2V0X3F1ZXVlKVxuKyAgICAgICAgaWYgbm90IGJhY2tsb2c6XG4rICAgICAgICAgICAgYnJlYWtcbisgICAgICAgIHRpbWUuc2xlZXAoMC4xKVxuK1xuKyAgICBrc2Z0X2VxKDAsIGJhY2tsb2csXG4rICAgICAgICAgICAgY29tbWVudD1mXCJxZGlzYyBiYWNrbG9nIHN0dWNrIG9uIHF1ZXVlIHt0YXJnZXRfcXVldWV9IFwiXG4rICAgICAgICAgICAgICAgICAgICBmXCJhZnRlciByaW5nIHJlY29uZmlnXCIpXG4rXG4rXG4gZGVmIG1haW4oKSAtXHUwMDNlIE5vbmU6XG4gICAgIFwiXCJcIiBLc2Z0IGJvaWxlciBwbGF0ZSBtYWluIFwiXCJcIlxuIFxuLSAgICB3aXRoIE5ldERydkVwRW52KF9fZmlsZV9fKSBhcyBjZmc6XG4rICAgIHdpdGggTmV0RHJ2RXBFbnYoX19maWxlX18sIHF1ZXVlX2NvdW50PTIpIGFzIGNmZzpcbiAgICAgICAgIGNmZy5ldGggPSBFdGh0b29sRmFtaWx5KClcbiBcbiAgICAgICAgIGtzZnRfcnVuKFtjaGFubmVscyxcbi0gICAgICAgICAgICAgICAgICByaW5ncGFyYW1dLFxuKyAgICAgICAgICAgICAgICAgIHJpbmdwYXJhbSxcbisgICAgICAgICAgICAgICAgICByZWNvbmZpZ190eF9zdGFsbF0sXG4gICAgICAgICAgICAgICAgICBhcmdzPShjZmcsICkpXG4gICAgIGtzZnRfZXhpdCgpXG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNDoxNToyNi42NDEyNTM2MjJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MTczOTI3NzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBc3Nlc3NtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gaW5kaWNhdGVkIHNvbWUgY2hhbmdlcyB3aXRoaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldGAgZGlyZWN0b3J5LCBzcGVjaWZpY2FsbHkgdG8gYGNvbmZpZ2AsIGBlbnYucHlgLCBhbmQgYHJpbmdfcmVjb25maWcucHlgLiBUaGF0IGltbWVkaWF0ZWx5IHBpbmdlZCBteSBpbnRlcm5hbCBhbGFybSBiZWxsczsgaG93ZXZlciwgYSBjbG9zZXIgbG9vayBjb25maXJtcyB0aGVzZSBhcmUgKm9ubHkqIHNlbGZ0ZXN0IG1vZGlmaWNhdGlvbnMuIEl0IGFkZHMgY29uZmlndXJhdGlvbnMsIHR3ZWFrcyBhIFB5dGhvbiBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQsIGFuZCBpbnRyb2R1Y2VzIGEgbmV3IHRlc3QgY2FzZSAoYHJlY29uZmlnX3R4X3N0YWxsYCkuXG5cbk15IGZpcnN0IHRob3VnaHQgd2FzIHRvIHZlcmlmeSB0aGF0IHRoZXJlIGFyZSBubyBjb3JlIGtlcm5lbCBjaGFuZ2VzLiBJIHJlLWV4YW1pbmVkIHRoZSBwYXRjaCBkaWZmLiBZZXMsIGl0IG9ubHkgdG91Y2hlcyB0aG9zZSBzZWxmdGVzdCBmaWxlcy4gVGhpcyBpcyBpbXBvcnRhbnQ6IGl0ICpkb2Vzbid0KiB0b3VjaCBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4gVGhlIGNoYW5nZXMgYXJlIGNvbmZpbmVkIHRvIHRoZSBzZWxmLXRlc3QgZnJhbWV3b3JrLCBtZWFuaW5nIGl0J3MgdXNlcnNwYWNlIHRlc3QgY29kZS5cblxuTm93IEkgbmVlZCB0byBlbnN1cmUgSSdtIG1ha2luZyBhIGNvcnJlY3QgYXNzZXNzbWVudCBiYXNlZCBvbiBteSBleGlzdGluZyBrbm93bGVkZ2UuIEknbSByZWNhbGxpbmcgdGhlIGluc3RydWN0aW9uczogXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIFsuLi5dXCIgQW5kIEknbSBsb29raW5nIGZvciBhIGNhdGNoLiBXaGlsZSBzZWxmdGVzdHMgYXJlbid0ICpleHBsaWNpdGx5KiBsaXN0ZWQsIGl0IGZhbGxzIHNxdWFyZWx5IHVuZGVyIHRoZSBwcmluY2lwbGUgb2Ygbm90IGZ1bmN0aW9uYWxseSBhbHRlcmluZyB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIGtlcm5lbCBpdHNlbGYuIFRoaXMgaXMgYW4gaW1wb3J0YW50IGRpc3RpbmN0aW9uLlxuXG5JIGdvIGJhY2sgdG8gbXkgaW5zdHJ1Y3Rpb25zLiBcIklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXCIgVGhhdCdzIHRoZSBvdGhlciBzaWRlIG9mIHRoZSBjb2luLiBTaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggdGVzdCBjb2RlIGFuZCAqbm90KiBjb3JlIGtlcm5lbCBjaGFuZ2VzLCB0aGlzIGlzIGEgY2xlYXIgXCJmYWxzZS5cIlxuXG5BbHJpZ2h0LCBpdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIE5vIGZ1bmN0aW9uYWwga2VybmVsIGNoYW5nZXMsIGp1c3Qgc2VsZnRlc3QgYWRkaXRpb25zLiBUaW1lIHRvIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYCBhbmQgbW92ZSBvbi4gVGhlcmUncyBub3RoaW5nIHRvIGZ1enogaGVyZS5cblxuSGVyZSBhcmUgdGhlIHJlc3VsdHMgSSdtIHNldHRpbmc6XG5Xb3J0aEZ1enppbmc9ZmFsc2VcblJlYXNvbmluZzogVGhlIHBhdGNoIG9ubHkgYWRkcyBhIG5ldyB0ZXN0IHNjcmlwdCB0byB0aGUga2VybmVsIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvKSBhbmQgZG9lcyBub3QgbW9kaWZ5IGFueSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy5cbkZvY3VzU3ltYm9sczogW11cbkVuYWJsZUNvbmZpZ3M6IFtdXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NTksIk91dHB1dFRva2VucyI6NjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNDoxNTozNS44MTUxODU1MDdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHRlc3Qgc2NyaXB0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSB0ZXN0IHNjcmlwdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxtmxh[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-25 03:49:20 +0000 UTC FinishedAt: 2026-07-25 04:15:36 +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+CgkJCTx0ZD4yMDI2LzA3LzI1IDA0OjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHRlc3Qgc2NyaXB0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA0OjE1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTllNmIwNzBiNjZhNzRkYWEzZDRiNGMxYTgwMWY3YmNlMzM3YTY5OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDI1IDA0OjE1OjIzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZ1xuaW5kZXggMjA3MGU4OTBlMDY0ZTUuLmYzOTMzY2YzZTZiZTYxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9jb25maWdcbkBAIC00LDggJiM0Mzs0LDExIEBAIENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTPW5cbiBDT05GSUdfSU5FVF9QU1A9eVxuIENPTkZJR19JUFY2PXlcbiBDT05GSUdfTUFDU0VDPW1cbiYjNDM7Q09ORklHX05FVF9BQ1RfU0tCRURJVD1tXG4gQ09ORklHX05FVF9DTFNfQUNUPXlcbiBDT05GSUdfTkVUX0NMU19CUEY9eVxuJiM0MztDT05GSUdfTkVUX0NMU19GTE9XRVI9bVxuJiM0MztDT05GSUdfTkVUX0NMU19NQVRDSEFMTD1tXG4gQ09ORklHX05FVENPTlNPTEU9bVxuIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUM9eVxuIENPTkZJR19ORVRDT05TT0xFX0VYVEVOREVEX0xPRz15XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbGliL3B5L2Vudi5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2xpYi9weS9lbnYucHlcbmluZGV4IGU0YWNmM2Q4MzMzZmQwLi5iMWM2ZjZjZWY3ZGQyNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2xpYi9weS9lbnYucHlcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2xpYi9weS9lbnYucHlcbkBAIC0xMTQsMTAgJiM0MzsxMTQsMTEgQEAgY2xhc3MgTmV0RHJ2RXBFbnYoTmV0RHJ2RW52QmFzZSk6XG4gICAgIG5zaW1fdjRfcGZ4ID0gXCYjMzQ7MTkyLjAuMi5cJiMzNDtcbiAgICAgbnNpbV92Nl9wZnggPSBcJiMzNDsyMDAxOmRiODo6XCYjMzQ7XG4gXG4tICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzcmNfcGF0aCwgbnNpbV90ZXN0PU5vbmUpOlxuJiM0MzsgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNyY19wYXRoLCBuc2ltX3Rlc3Q9Tm9uZSwgcXVldWVfY291bnQ9Tm9uZSk6XG4gICAgICAgICBzdXBlcigpLl9faW5pdF9fKHNyY19wYXRoKVxuIFxuICAgICAgICAgc2VsZi5fc3RhdHNfc2V0dGxlX3RpbWUgPSBOb25lXG4mIzQzOyAgICAgICAgc2VsZi5fcXVldWVfY291bnQgPSBxdWV1ZV9jb3VudFxuIFxuICAgICAgICAgIyBUaGluZ3Mgd2UgdHJ5IHRvIGRlc3Ryb3lcbiAgICAgICAgIHNlbGYucmVtb3RlID0gTm9uZVxuQEAgLTE3Myw5ICYjNDM7MTc0LDEzIEBAIGNsYXNzIE5ldERydkVwRW52KE5ldERydkVudkJhc2UpOlxuICAgICAgICAgc2VsZi5fcmVxdWlyZWRfY21kID0ge31cbiBcbiAgICAgZGVmIGNyZWF0ZV9sb2NhbChzZWxmKTpcbiYjNDM7ICAgICAgICBuc2ltX2t3YXJncyA9IHt9XG4mIzQzOyAgICAgICAgaWYgc2VsZi5fcXVldWVfY291bnQ6XG4mIzQzOyAgICAgICAgICAgIG5zaW1fa3dhcmdzW1wmIzM0O3F1ZXVlX2NvdW50XCYjMzQ7XSA9IHNlbGYuX3F1ZXVlX2NvdW50XG4mIzQzO1xuICAgICAgICAgc2VsZi5fbmV0bnMgPSBOZXROUygpXG4tICAgICAgICBzZWxmLl9ucyA9IE5ldGRldlNpbURldigpXG4tICAgICAgICBzZWxmLl9uc19wZWVyID0gTmV0ZGV2U2ltRGV2KG5zPXNlbGYuX25ldG5zKVxuJiM0MzsgICAgICAgIHNlbGYuX25zID0gTmV0ZGV2U2ltRGV2KCoqbnNpbV9rd2FyZ3MpXG4mIzQzOyAgICAgICAgc2VsZi5fbnNfcGVlciA9IE5ldGRldlNpbURldihucz1zZWxmLl9uZXRucywgKipuc2ltX2t3YXJncylcbiBcbiAgICAgICAgIHdpdGggb3BlbihcJiMzNDsvcHJvYy9zZWxmL25zL25ldFwmIzM0OykgYXMgbnNmZDAsIFxcXG4gICAgICAgICAgICAgIG9wZW4oXCYjMzQ7L3Zhci9ydW4vbmV0bnMvXCYjMzQ7ICYjNDM7IHNlbGYuX25ldG5zLm5hbWUpIGFzIG5zZmQxOlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3JpbmdfcmVjb25maWcucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9yaW5nX3JlY29uZmlnLnB5XG5pbmRleCBmOTUzMGE4YjA4NTY3Zi4uYTVhMmRlZmM0ZmIxM2MgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9yaW5nX3JlY29uZmlnLnB5XG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9yaW5nX3JlY29uZmlnLnB5XG5AQCAtNSwxMCAmIzQzOzUsMjEgQEBcbiBUZXN0IGNoYW5uZWwgYW5kIHJpbmcgc2l6ZSBjb25maWd1cmF0aW9uIHZpYSBldGh0b29sICgtTCAvIC1HKS5cbiBcJiMzNDtcJiMzNDtcJiMzNDtcbiBcbiYjNDM7aW1wb3J0IHNvY2tldFxuJiM0MztpbXBvcnQgc3RydWN0XG4mIzQzO2ltcG9ydCB0aW1lXG4mIzQzO1xuIGZyb20gbGliLnB5IGltcG9ydCBrc2Z0X3J1biwga3NmdF9leGl0LCBrc2Z0X3ByXG4gZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfZXFcbiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IEtzZnRTa2lwRXgsIEtzZnRGYWlsRXhcbiBmcm9tIGxpYi5weSBpbXBvcnQgTmV0RHJ2RXBFbnYsIEV0aHRvb2xGYW1pbHksIEdlbmVyYXRlVHJhZmZpY1xuLWZyb20gbGliLnB5IGltcG9ydCBkZWZlciwgTmxFcnJvclxuJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQgY21kLCBkZWZlciwgcmFuZF9wb3J0LCB0YywgTmxFcnJvclxuJiM0MztcbiYjNDM7IyBBZGRlZCBpbiBQeXRob24gMy4xMzsgZmFsbGJhY2sgdG8gNjEgZm9yIHg4Ni9BUk0vTUlQU1xuJiM0MztTT19UWFRJTUUgPSBnZXRhdHRyKHNvY2tldCwgXCYjMzQ7U09fVFhUSU1FXCYjMzQ7LCA2MSlcbiYjNDM7XG4mIzQzOyMgVFggcmluZyBzaXplIHRoZSB0ZXN0IHNocmlua3MgdG8gc28gdGhlIHJpbmcgZmlsbHMgcXVpY2tseS5cbiYjNDM7TUlOX1RYX1JJTkcgPSA2NFxuIFxuIFxuIGRlZiBjaGFubmVscyhjZmcpIC1cdTAwM2UgTm9uZTpcbkBAIC0xNTEsMTQgJiM0MzsxNjIsMjA0IEBAIGRlZiByaW5ncGFyYW0oY2ZnKSAtXHUwMDNlIE5vbmU6XG4gICAgICAgICBHZW5lcmF0ZVRyYWZmaWMoY2ZnKS53YWl0X3BrdHNfYW5kX3N0b3AoMTAwMDApXG4gXG4gXG4mIzQzO2RlZiBfd3JpdGVfZmlsZShwYXRoLCB2YWwpOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7V3JpdGUgdmFsIHRvIGEgZmlsZS5cJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7ICAgIHdpdGggb3BlbihwYXRoLCBcJiMzNDt3XCYjMzQ7LCBlbmNvZGluZz1cJiMzNDt1dGYtOFwmIzM0OykgYXMgZnA6XG4mIzQzOyAgICAgICAgZnAud3JpdGUoc3RyKHZhbCkpXG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIF93cml0ZV9zeXNmcyhwYXRoLCB2YWwpOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7V3JpdGUgdmFsIHRvIGEgc3lzZnMgZmlsZSwgcmVzdG9yaW5nIHRoZSBvcmlnaW5hbCB2YWx1ZSBvbiBleGl0LlwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgd2l0aCBvcGVuKHBhdGgsIFwmIzM0O3JcJiMzNDssIGVuY29kaW5nPVwmIzM0O3V0Zi04XCYjMzQ7KSBhcyBmcDpcbiYjNDM7ICAgICAgICBvcmlnX3ZhbCA9IGZwLnJlYWQoKS5zdHJpcCgpXG4mIzQzOyAgICBpZiBzdHIodmFsKSA9PSBvcmlnX3ZhbDpcbiYjNDM7ICAgICAgICByZXR1cm5cbiYjNDM7ICAgIF93cml0ZV9maWxlKHBhdGgsIHZhbClcbiYjNDM7ICAgIGRlZmVyKF93cml0ZV9maWxlLCBwYXRoLCBvcmlnX3ZhbClcbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgX2dldF9xZGlzY19iYWNrbG9nKGNmZywgbXFfaGFuZGxlLCBxdWV1ZSk6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtSZXR1cm4gdGhlIHFkaXNjIGJhY2tsb2cgKGJ5dGVzKSBmb3IgdGhlIGdpdmVuIFRYIHF1ZXVlJiMzOTtzIGxlYWYuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzOyAgICB0YXJnZXRfcGFyZW50ID0gZlwmIzM0O3ttcV9oYW5kbGV9e3F1ZXVlICYjNDM7IDE6eH1cJiMzNDtcbiYjNDM7ICAgIGZvciBxIGluIHRjKGZcJiMzNDstcyBxZGlzYyBzaG93IGRldiB7Y2ZnLmlmbmFtZX1cJiMzNDssIGpzb249VHJ1ZSk6XG4mIzQzOyAgICAgICAgaWYgcS5nZXQoXCYjMzQ7cGFyZW50XCYjMzQ7LCBcJiMzNDtcJiMzNDspID09IHRhcmdldF9wYXJlbnQ6XG4mIzQzOyAgICAgICAgICAgIHJldHVybiBxLmdldChcJiMzNDtiYWNrbG9nXCYjMzQ7KSBvciAwXG4mIzQzOyAgICByZXR1cm4gMFxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiBfc2V0dXBfZnFfcWRpc2MoY2ZnLCBwb3J0LCB0YXJnZXRfcXVldWUsIG90aGVyX3F1ZXVlKTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1B1dCBhbiBmcSBxZGlzYyBvbiB0YXJnZXRfcXVldWUmIzM5O3MgbGVhZiBhbmQgcmV0dXJuIHRoZSBtcSBoYW5kbGUgaW4gdXNlLlxuJiM0MztcbiYjNDM7ICAgIFdlIG11c3Qgbm90IGRpc3R1cmIgdGhlIGRldmljZSYjMzk7cyBleGlzdGluZyBUWC9SWCBxZGlzYyBwb2xpY3kuIE9uIGEgcmVhbFxuJiM0MzsgICAgTklDIHRoZSByb290IG1xIGFscmVhZHkgaGFzIGFuIGFkZHJlc3NhYmxlIGhhbmRsZSwgc28gd2UgbGVhdmUgdGhlIHJvb3RcbiYjNDM7ICAgIGFuZCBldmVyeSBvdGhlciBxdWV1ZSBhbG9uZSBhbmQgb25seSBzd2FwIHRoaXMgb25lIGxlYWYsIHJlc3RvcmluZyBpdHNcbiYjNDM7ICAgIG9yaWdpbmFsIHFkaXNjIGFmdGVyd2FyZHMuXG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7ICAgIHFkaXNjcyA9IHRjKGZcJiMzNDtxZGlzYyBzaG93IGRldiB7Y2ZnLmlmbmFtZX1cJiMzNDssIGpzb249VHJ1ZSlcbiYjNDM7ICAgIHJvb3QgPSBuZXh0KChxIGZvciBxIGluIHFkaXNjcyBpZiBxLmdldChcJiMzNDtyb290XCYjMzQ7KSksIE5vbmUpXG4mIzQzO1xuJiM0MzsgICAgaWYgcm9vdCBhbmQgcm9vdFtcJiMzNDtraW5kXCYjMzQ7XSA9PSBcJiMzNDttcVwmIzM0OyBhbmQgcm9vdFtcJiMzNDtoYW5kbGVcJiMzNDtdICE9IFwmIzM0OzA6XCYjMzQ7OlxuJiM0MzsgICAgICAgICMgQWRkcmVzc2FibGUgbXEgKHByZXZpb3VzbHktY29uZmlndXJlZCk6IHRvdWNoIG9ubHkgdGhlIHRhcmdldCBxdWV1ZSYjMzk7c1xuJiM0MzsgICAgICAgICMgbGVhZiBhbmQgcmVzdG9yZSBpdHMgb3JpZ2luYWwgcWRpc2MgYWZ0ZXJ3YXJkcy5cbiYjNDM7ICAgICAgICBtcV9oYW5kbGUgPSByb290W1wmIzM0O2hhbmRsZVwmIzM0O11cbiYjNDM7ICAgICAgICBwYXJlbnQgPSBmXCYjMzQ7e21xX2hhbmRsZX17dGFyZ2V0X3F1ZXVlICYjNDM7IDE6eH1cJiMzNDtcbiYjNDM7ICAgICAgICBvcmlnID0gbmV4dCgocSBmb3IgcSBpbiBxZGlzY3MgaWYgcS5nZXQoXCYjMzQ7cGFyZW50XCYjMzQ7KSA9PSBwYXJlbnQpLCBOb25lKVxuJiM0MzsgICAgICAgIG9yaWdfa2luZCA9IG9yaWdbXCYjMzQ7a2luZFwmIzM0O10gaWYgb3JpZyBlbHNlIFxcXG4mIzQzOyAgICAgICAgICAgIGNtZChcJiMzNDtzeXNjdGwgLW4gbmV0LmNvcmUuZGVmYXVsdF9xZGlzY1wmIzM0Oykuc3Rkb3V0LnN0cmlwKClcbiYjNDM7ICAgICAgICBkZWZlcih0YywgZlwmIzM0O3FkaXNjIHJlcGxhY2UgZGV2IHtjZmcuaWZuYW1lfSBwYXJlbnQge3BhcmVudH0ge29yaWdfa2luZH1cJiMzNDspXG4mIzQzOyAgICBlbGlmIHJvb3QgaXMgTm9uZSBvciByb290W1wmIzM0O2tpbmRcJiMzNDtdIGluIChcJiMzNDttcVwmIzM0OywgXCYjMzQ7bm9xdWV1ZVwmIzM0Oyk6XG4mIzQzOyAgICAgICAgIyBUaGUgYXV0by1hdHRhY2hlZCByb290IG1xIGhhcyBoYW5kbGUgMDogb24gYW55IGRldmljZSAocmVhbCBvciBzaW0pLFxuJiM0MzsgICAgICAgICMgd2hpY2ggdGhlIGtlcm5lbCByZWplY3RzIGFzIGEgcWRpc2MgcGFyZW50LiBBIDA6IGhhbmRsZSBtZWFucyB0aGUgbXFcbiYjNDM7ICAgICAgICAjIGlzIHRoZSB1bnRvdWNoZWQga2VybmVsIGRlZmF1bHQgLSBubyBjdXN0b20gY2hpbGQgcWRpc2NzIGNhbiBoYW5nIG9mZlxuJiM0MzsgICAgICAgICMgYW4gdW5hZGRyZXNzYWJsZSBwYXJlbnQgLSBzbyBpbnN0YWxsaW5nIGEgcmVhbCBoYW5kbGUgYW5kIHJlc3RvcmluZ1xuJiM0MzsgICAgICAgICMgdGhlIGRlZmF1bHQgbXEgb24gZXhpdCBwcmVzZXJ2ZXMgdGhlIGRldmljZSYjMzk7cyBlZmZlY3RpdmUgcG9saWN5LlxuJiM0MzsgICAgICAgIG1xX2hhbmRsZSA9IFwmIzM0OzE6XCYjMzQ7XG4mIzQzOyAgICAgICAgdGMoZlwmIzM0O3FkaXNjIHJlcGxhY2UgZGV2IHtjZmcuaWZuYW1lfSByb290IGhhbmRsZSB7bXFfaGFuZGxlfSBtcVwmIzM0OylcbiYjNDM7ICAgICAgICBkZWZlcih0YywgZlwmIzM0O3FkaXNjIHJlcGxhY2UgZGV2IHtjZmcuaWZuYW1lfSByb290IG1xXCYjMzQ7KVxuJiM0MzsgICAgICAgIHBhcmVudCA9IGZcJiMzNDt7bXFfaGFuZGxlfXt0YXJnZXRfcXVldWUgJiM0MzsgMTp4fVwmIzM0O1xuJiM0MzsgICAgZWxzZTpcbiYjNDM7ICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KGZcJiMzNDtyb290IHFkaXNjICYjMzk7e3Jvb3RbJiMzOTtraW5kJiMzOTtdfSYjMzk7IGlzIG5vdCBtcTsgXCYjMzQ7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICBcJiMzNDtyZWZ1c2luZyB0byBkaXN0dXJiIGV4aXN0aW5nIHFkaXNjIHBvbGljeVwmIzM0OylcbiYjNDM7XG4mIzQzOyAgICB0cnk6XG4mIzQzOyAgICAgICAgdGMoZlwmIzM0O3FkaXNjIHJlcGxhY2UgZGV2IHtjZmcuaWZuYW1lfSBwYXJlbnQge3BhcmVudH0gZnFcJiMzNDspXG4mIzQzOyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzpcbiYjNDM7ICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFxuJiM0MzsgICAgICAgICAgICBmXCYjMzQ7ZnEgbm90IGF2YWlsYWJsZSAoQ09ORklHX05FVF9TQ0hfRlEpOiB7ZXhjfVwmIzM0OykgZnJvbSBleGNcbiYjNDM7XG4mIzQzOyAgICBxZGlzY19qID0gdGMoZlwmIzM0O3FkaXNjIHNob3cgZGV2IHtjZmcuaWZuYW1lfVwmIzM0OywganNvbj1UcnVlKVxuJiM0MzsgICAgaGFzX2Nsc2FjdCA9IGFueShxWyYjMzk7a2luZCYjMzk7XSA9PSAmIzM5O2Nsc2FjdCYjMzk7IGZvciBxIGluIHFkaXNjX2opXG4mIzQzOyAgICBpZiBub3QgaGFzX2Nsc2FjdDpcbiYjNDM7ICAgICAgICB0YyhmXCYjMzQ7cWRpc2MgYWRkIGRldiB7Y2ZnLmlmbmFtZX0gY2xzYWN0XCYjMzQ7KVxuJiM0MzsgICAgICAgIGRlZmVyKHRjLCBmXCYjMzQ7cWRpc2MgZGVsIGRldiB7Y2ZnLmlmbmFtZX0gY2xzYWN0XCYjMzQ7KVxuJiM0MztcbiYjNDM7ICAgIHByb3RvID0gXCYjMzQ7aXB2NlwmIzM0OyBpZiBpbnQoY2ZnLmFkZHJfaXB2ZXIpID09IDYgZWxzZSBcJiMzNDtpcFwmIzM0O1xuJiM0MzsgICAgdHJ5OlxuJiM0MzsgICAgICAgIHRjKGZcJiMzNDtmaWx0ZXIgYWRkIGRldiB7Y2ZnLmlmbmFtZX0gZWdyZXNzIHByb3RvY29sIHtwcm90b30gXCYjMzQ7XG4mIzQzOyAgICAgICAgICAgZlwmIzM0O3ByZWYgMSBmbG93ZXIgaXBfcHJvdG8gdWRwIGRzdF9wb3J0IHtwb3J0fSBcJiMzNDtcbiYjNDM7ICAgICAgICAgICBmXCYjMzQ7YWN0aW9uIHNrYmVkaXQgcXVldWVfbWFwcGluZyB7dGFyZ2V0X3F1ZXVlfVwmIzM0OylcbiYjNDM7ICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOlxuJiM0MzsgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXCYjMzQ7dGMgZmxvd2VyL2FjdF9za2JlZGl0IG5vdCBhdmFpbGFibGVcJiMzNDspIGZyb20gZXhjXG4mIzQzOyAgICBkZWZlcih0YywgZlwmIzM0O2ZpbHRlciBkZWwgZGV2IHtjZmcuaWZuYW1lfSBlZ3Jlc3MgcHJlZiAxXCYjMzQ7KVxuJiM0MztcbiYjNDM7ICAgIHRjKGZcJiMzNDtmaWx0ZXIgYWRkIGRldiB7Y2ZnLmlmbmFtZX0gZWdyZXNzIHByZWYgMTAwIFwmIzM0O1xuJiM0MzsgICAgICAgZlwmIzM0O21hdGNoYWxsIGFjdGlvbiBza2JlZGl0IHF1ZXVlX21hcHBpbmcge290aGVyX3F1ZXVlfVwmIzM0OylcbiYjNDM7ICAgIGRlZmVyKHRjLCBmXCYjMzQ7ZmlsdGVyIGRlbCBkZXYge2NmZy5pZm5hbWV9IGVncmVzcyBwcmVmIDEwMFwmIzM0OylcbiYjNDM7XG4mIzQzOyAgICByZXR1cm4gbXFfaGFuZGxlXG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIF9jcmVhdGVfc290eHRpbWVfc29ja2V0KGNmZyk6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtDcmVhdGUgYSBVRFAgc29ja2V0IHdpdGggU09fVFhUSU1FIGVuYWJsZWQsIGJvdW5kIHRvIHRoZSB0ZXN0IGRldmljZS5cJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7ICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNiBpZiBjZmcuYWRkcl9pcHZlciA9PSBcJiMzNDs2XCYjMzQ7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19ER1JBTSlcbiYjNDM7ICAgIHRyeTpcbiYjNDM7ICAgICAgICBzb2NrLnNldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsIFNPX1RYVElNRSwgc3RydWN0LnBhY2soXCYjMzQ7SWlcJiMzNDssIDEsIDApKVxuJiM0MzsgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOlxuJiM0MzsgICAgICAgIHNvY2suY2xvc2UoKVxuJiM0MzsgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXCYjMzQ7U09fVFhUSU1FIG5vdCBzdXBwb3J0ZWRcJiMzNDspIGZyb20gZXhjXG4mIzQzOyAgICBzb2NrLnNldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19CSU5EVE9ERVZJQ0UsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgY2ZnLmlmbmFtZS5lbmNvZGUoKSlcbiYjNDM7ICAgIHJldHVybiBzb2NrXG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIF9zZW5kX3NvdHh0aW1lX2J1cnN0KGNmZywgc29jaywgcG9ydCwgY291bnQsIGRlbGF5X25zKTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1NlbmQgY291bnQgVURQIHBhY2tldHMgc2NoZWR1bGVkIGRlbGF5X25zIGFoZWFkIHVzaW5nIFNPX1RYVElNRS5cJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7ICAgIHBheWxvYWQgPSBiJiMzOTtcXHgwMCYjMzk7ICogMTQwMFxuJiM0MzsgICAgdHh0aW1lX25zID0gdGltZS5jbG9ja19nZXR0aW1lX25zKHRpbWUuQ0xPQ0tfTU9OT1RPTklDKSAmIzQzOyBkZWxheV9uc1xuJiM0MztcbiYjNDM7ICAgIGFuY2RhdGEgPSBbKHNvY2tldC5TT0xfU09DS0VULCBTT19UWFRJTUUsIHN0cnVjdC5wYWNrKFwmIzM0O1FcJiMzNDssIHR4dGltZV9ucykpXVxuJiM0MzsgICAgaWYgaW50KGNmZy5hZGRyX2lwdmVyKSA9PSA2OlxuJiM0MzsgICAgICAgIGRlc3QgPSAoY2ZnLnJlbW90ZV9hZGRyLCBwb3J0LCAwLCAwKVxuJiM0MzsgICAgZWxzZTpcbiYjNDM7ICAgICAgICBkZXN0ID0gKGNmZy5yZW1vdGVfYWRkciwgcG9ydClcbiYjNDM7ICAgIGZvciBfIGluIHJhbmdlKGNvdW50KTpcbiYjNDM7ICAgICAgICBzb2NrLnNlbmRtc2coW3BheWxvYWRdLCBhbmNkYXRhLCAwLCBkZXN0KVxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiByZWNvbmZpZ190eF9zdGFsbChjZmcpIC1cdTAwM2UgTm9uZTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1Rlc3QgdGhhdCBxZGlzYyBiYWNrbG9nIGRyYWlucyBhZnRlciByaW5nIHJlY29uZmlndXJhdGlvbi5cJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7ICAgIHRhcmdldF9xdWV1ZSA9IDFcbiYjNDM7ICAgIG90aGVyX3F1ZXVlID0gMFxuJiM0MztcbiYjNDM7ICAgIGVoZHIgPSB7JiMzOTtoZWFkZXImIzM5OzogeyYjMzk7ZGV2LWluZGV4JiMzOTs6IGNmZy5pZmluZGV4fX1cbiYjNDM7ICAgIGNoYW5zID0gY2ZnLmV0aC5jaGFubmVsc19nZXQoZWhkcilcbiYjNDM7XG4mIzQzOyAgICBpZiBcJiMzNDtjb21iaW5lZC1tYXhcJiMzNDsgbm90IGluIGNoYW5zOlxuJiM0MzsgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXCYjMzQ7ZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgY29tYmluZWQgY2hhbm5lbHNcJiMzNDspXG4mIzQzOyAgICBpZiBjaGFucy5nZXQoXCYjMzQ7Y29tYmluZWQtbWF4XCYjMzQ7LCAwKSBcdTAwM2MgMjpcbiYjNDM7ICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFwmIzM0O2RldmljZSBkb2VzIG5vdCBzdXBwb3J0IDImIzQzOyBjb21iaW5lZCBjaGFubmVsc1wmIzM0OylcbiYjNDM7ICAgIGlmIGNoYW5zW1wmIzM0O2NvbWJpbmVkLWNvdW50XCYjMzQ7XSBcdTAwM2MgMjpcbiYjNDM7ICAgICAgICBkZWZlcihjZmcuZXRoLmNoYW5uZWxzX3NldCxcbiYjNDM7ICAgICAgICAgICAgICBlaGRyIHwge1wmIzM0O2NvbWJpbmVkLWNvdW50XCYjMzQ7OiBjaGFuc1tcJiMzNDtjb21iaW5lZC1jb3VudFwmIzM0O119KVxuJiM0MzsgICAgICAgIGNmZy5ldGguY2hhbm5lbHNfc2V0KGVoZHIgfCB7XCYjMzQ7Y29tYmluZWQtY291bnRcJiMzNDs6IDJ9KVxuJiM0MztcbiYjNDM7ICAgIHJpbmdzID0gY2ZnLmV0aC5yaW5nc19nZXQoZWhkcilcbiYjNDM7ICAgIGlmICYjMzk7cngmIzM5OyBub3QgaW4gcmluZ3Mgb3IgJiMzOTt0eCYjMzk7IG5vdCBpbiByaW5nczpcbiYjNDM7ICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFwmIzM0O2RldmljZSBkb2VzIG5vdCBleHBvc2UgcngvdHggcmluZyBwYXJhbXNcJiMzNDspXG4mIzQzOyAgICB0eF9jdXIgPSByaW5nc1smIzM5O3R4JiMzOTtdXG4mIzQzOyAgICBpZiB0eF9jdXIgXHUwMDNjPSBNSU5fVFhfUklORzpcbiYjNDM7ICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFwmIzM0O3R4IHJpbmcgc2l6ZSBhbHJlYWR5IGF0IG1pbmltdW1cJiMzNDspXG4mIzQzOyAgICBkZWZlcihjZmcuZXRoLnJpbmdzX3NldCwgZWhkciB8IHsmIzM5O3R4JiMzOTs6IHR4X2N1cn0pXG4mIzQzO1xuJiM0MzsgICAgY2ZnLmV0aC5yaW5nc19zZXQoZWhkciB8IHsmIzM5O3R4JiMzOTs6IE1JTl9UWF9SSU5HfSlcbiYjNDM7XG4mIzQzOyAgICAjIFNsb3cgY29tcGxldGlvbnMgc28gdGhlIHJpbmcgc3RheXMgZnVsbCBhZnRlciBGUSByZWxlYXNlcyBwYWNrZXRzXG4mIzQzOyAgICBuYXBpX2RlZmVyID0gZlwmIzM0Oy9zeXMvY2xhc3MvbmV0L3tjZmcuaWZuYW1lfS9uYXBpX2RlZmVyX2hhcmRfaXJxc1wmIzM0O1xuJiM0MzsgICAgZ3JvX3RpbWVvdXQgPSBmXCYjMzQ7L3N5cy9jbGFzcy9uZXQve2NmZy5pZm5hbWV9L2dyb19mbHVzaF90aW1lb3V0XCYjMzQ7XG4mIzQzOyAgICBfd3JpdGVfc3lzZnMobmFwaV9kZWZlciwgMTAwKVxuJiM0MzsgICAgX3dyaXRlX3N5c2ZzKGdyb190aW1lb3V0LCAxMDAwMDAwMDAwKVxuJiM0MztcbiYjNDM7ICAgIHBvcnQgPSByYW5kX3BvcnQoKVxuJiM0MzsgICAgbXFfaGFuZGxlID0gX3NldHVwX2ZxX3FkaXNjKGNmZywgcG9ydCwgdGFyZ2V0X3F1ZXVlLCBvdGhlcl9xdWV1ZSlcbiYjNDM7XG4mIzQzOyAgICBzb2NrID0gX2NyZWF0ZV9zb3R4dGltZV9zb2NrZXQoY2ZnKVxuJiM0MzsgICAgZGVmZXIoc29jay5jbG9zZSlcbiYjNDM7XG4mIzQzOyAgICBwa3RfY291bnQgPSBNSU5fVFhfUklORyAqIDJcbiYjNDM7XG4mIzQzOyAgICBmb3IgZGVsYXlfbXMgaW4gWzEwMCwgMjAwLCA1MDBdOlxuJiM0MzsgICAgICAgIF9zZW5kX3NvdHh0aW1lX2J1cnN0KGNmZywgc29jaywgcG9ydCwgcGt0X2NvdW50LFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5X21zICogMV8wMDBfMDAwKVxuJiM0MzsgICAgICAgIGtzZnRfcHIoZlwmIzM0O1NlbnQge3BrdF9jb3VudH0gU09fVFhUSU1FIHBhY2tldHMgKCYjNDM7e2RlbGF5X21zfW1zKVwmIzM0OylcbiYjNDM7ICAgICAgICB0aW1lLnNsZWVwKGRlbGF5X21zIC8gMTAwMCAmIzQzOyAwLjMpXG4mIzQzO1xuJiM0MzsgICAgICAgIGJhY2tsb2cgPSBfZ2V0X3FkaXNjX2JhY2tsb2coY2ZnLCBtcV9oYW5kbGUsIHRhcmdldF9xdWV1ZSlcbiYjNDM7ICAgICAgICBpZiBiYWNrbG9nOlxuJiM0MzsgICAgICAgICAgICBicmVha1xuJiM0MzsgICAgZWxzZTpcbiYjNDM7ICAgICAgICByYWlzZSBLc2Z0RmFpbEV4KFwmIzM0O2ZhaWxlZCB0byBidWlsZCBxZGlzYyBiYWNrbG9nXCYjMzQ7KVxuJiM0MztcbiYjNDM7ICAgIGtzZnRfcHIoZlwmIzM0O0JhY2tsb2cgYmVmb3JlIHJlY29uZmlnOiB7YmFja2xvZ30gYnl0ZXNcJiMzNDspXG4mIzQzO1xuJiM0MzsgICAgIyBUcmlnZ2VyIHJpbmcgcmVjb25maWcg4oCUIGRyaXZlciBzaG91bGQgY2FsbCB3YWtlLCBub3QganVzdCBzdGFydFxuJiM0MzsgICAgY2ZnLmV0aC5yaW5nc19zZXQoZWhkciB8IHsmIzM5O3R4JiMzOTs6IHR4X2N1cn0pXG4mIzQzO1xuJiM0MzsgICAgIyBMZXQgY29tcGxldGlvbnMgcHJvY2VlZCBub3JtYWxseVxuJiM0MzsgICAgX3dyaXRlX3N5c2ZzKG5hcGlfZGVmZXIsIDApXG4mIzQzOyAgICBfd3JpdGVfc3lzZnMoZ3JvX3RpbWVvdXQsIDApXG4mIzQzO1xuJiM0MzsgICAgIyBQb2xsIGZvciBiYWNrbG9nIHRvIGRyYWluXG4mIzQzOyAgICBmb3IgXyBpbiByYW5nZSgxMDApOlxuJiM0MzsgICAgICAgIGJhY2tsb2cgPSBfZ2V0X3FkaXNjX2JhY2tsb2coY2ZnLCBtcV9oYW5kbGUsIHRhcmdldF9xdWV1ZSlcbiYjNDM7ICAgICAgICBpZiBub3QgYmFja2xvZzpcbiYjNDM7ICAgICAgICAgICAgYnJlYWtcbiYjNDM7ICAgICAgICB0aW1lLnNsZWVwKDAuMSlcbiYjNDM7XG4mIzQzOyAgICBrc2Z0X2VxKDAsIGJhY2tsb2csXG4mIzQzOyAgICAgICAgICAgIGNvbW1lbnQ9ZlwmIzM0O3FkaXNjIGJhY2tsb2cgc3R1Y2sgb24gcXVldWUge3RhcmdldF9xdWV1ZX0gXCYjMzQ7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgZlwmIzM0O2FmdGVyIHJpbmcgcmVjb25maWdcJiMzNDspXG4mIzQzO1xuJiM0MztcbiBkZWYgbWFpbigpIC1cdTAwM2UgTm9uZTpcbiAgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7IEtzZnQgYm9pbGVyIHBsYXRlIG1haW4gXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4gXG4tICAgIHdpdGggTmV0RHJ2RXBFbnYoX19maWxlX18pIGFzIGNmZzpcbiYjNDM7ICAgIHdpdGggTmV0RHJ2RXBFbnYoX19maWxlX18sIHF1ZXVlX2NvdW50PTIpIGFzIGNmZzpcbiAgICAgICAgIGNmZy5ldGggPSBFdGh0b29sRmFtaWx5KClcbiBcbiAgICAgICAgIGtzZnRfcnVuKFtjaGFubmVscyxcbi0gICAgICAgICAgICAgICAgICByaW5ncGFyYW1dLFxuJiM0MzsgICAgICAgICAgICAgICAgICByaW5ncGFyYW0sXG4mIzQzOyAgICAgICAgICAgICAgICAgIHJlY29uZmlnX3R4X3N0YWxsXSxcbiAgICAgICAgICAgICAgICAgIGFyZ3M9KGNmZywgKSlcbiAgICAga3NmdF9leGl0KClcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNDoxNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2UgdGVzdCBzY3JpcHRzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzLyBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlOWU2YjA3MGI2NmE3NGRhYTNkNGI0YzFhODAxZjdiY2UzMzdhNjk5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBKdWwgMjUgMDQ6MTU6MjMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9jb25maWcKaW5kZXggMjA3MGU4OTBlMDY0ZTUuLmYzOTMzY2YzZTZiZTYxIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9jb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnCkBAIC00LDggJiM0Mzs0LDExIEBAIENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTPW4KIENPTkZJR19JTkVUX1BTUD15CiBDT05GSUdfSVBWNj15CiBDT05GSUdfTUFDU0VDPW0KJiM0MztDT05GSUdfTkVUX0FDVF9TS0JFRElUPW0KIENPTkZJR19ORVRfQ0xTX0FDVD15CiBDT05GSUdfTkVUX0NMU19CUEY9eQomIzQzO0NPTkZJR19ORVRfQ0xTX0ZMT1dFUj1tCiYjNDM7Q09ORklHX05FVF9DTFNfTUFUQ0hBTEw9bQogQ09ORklHX05FVENPTlNPTEU9bQogQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQz15CiBDT05GSUdfTkVUQ09OU09MRV9FWFRFTkRFRF9MT0c9eQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbGliL3B5L2Vudi5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2xpYi9weS9lbnYucHkKaW5kZXggZTRhY2YzZDgzMzNmZDAuLmIxYzZmNmNlZjdkZDI1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9saWIvcHkvZW52LnB5CiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2xpYi9weS9lbnYucHkKQEAgLTExNCwxMCAmIzQzOzExNCwxMSBAQCBjbGFzcyBOZXREcnZFcEVudihOZXREcnZFbnZCYXNlKToKICAgICBuc2ltX3Y0X3BmeCA9ICYjMzQ7MTkyLjAuMi4mIzM0OwogICAgIG5zaW1fdjZfcGZ4ID0gJiMzNDsyMDAxOmRiODo6JiMzNDsKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzcmNfcGF0aCwgbnNpbV90ZXN0PU5vbmUpOgomIzQzOyAgICBkZWYgX19pbml0X18oc2VsZiwgc3JjX3BhdGgsIG5zaW1fdGVzdD1Ob25lLCBxdWV1ZV9jb3VudD1Ob25lKToKICAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhzcmNfcGF0aCkKIAogICAgICAgICBzZWxmLl9zdGF0c19zZXR0bGVfdGltZSA9IE5vbmUKJiM0MzsgICAgICAgIHNlbGYuX3F1ZXVlX2NvdW50ID0gcXVldWVfY291bnQKIAogICAgICAgICAjIFRoaW5ncyB3ZSB0cnkgdG8gZGVzdHJveQogICAgICAgICBzZWxmLnJlbW90ZSA9IE5vbmUKQEAgLTE3Myw5ICYjNDM7MTc0LDEzIEBAIGNsYXNzIE5ldERydkVwRW52KE5ldERydkVudkJhc2UpOgogICAgICAgICBzZWxmLl9yZXF1aXJlZF9jbWQgPSB7fQogCiAgICAgZGVmIGNyZWF0ZV9sb2NhbChzZWxmKToKJiM0MzsgICAgICAgIG5zaW1fa3dhcmdzID0ge30KJiM0MzsgICAgICAgIGlmIHNlbGYuX3F1ZXVlX2NvdW50OgomIzQzOyAgICAgICAgICAgIG5zaW1fa3dhcmdzWyYjMzQ7cXVldWVfY291bnQmIzM0O10gPSBzZWxmLl9xdWV1ZV9jb3VudAomIzQzOwogICAgICAgICBzZWxmLl9uZXRucyA9IE5ldE5TKCkKLSAgICAgICAgc2VsZi5fbnMgPSBOZXRkZXZTaW1EZXYoKQotICAgICAgICBzZWxmLl9uc19wZWVyID0gTmV0ZGV2U2ltRGV2KG5zPXNlbGYuX25ldG5zKQomIzQzOyAgICAgICAgc2VsZi5fbnMgPSBOZXRkZXZTaW1EZXYoKipuc2ltX2t3YXJncykKJiM0MzsgICAgICAgIHNlbGYuX25zX3BlZXIgPSBOZXRkZXZTaW1EZXYobnM9c2VsZi5fbmV0bnMsICoqbnNpbV9rd2FyZ3MpCiAKICAgICAgICAgd2l0aCBvcGVuKCYjMzQ7L3Byb2Mvc2VsZi9ucy9uZXQmIzM0OykgYXMgbnNmZDAsIFwKICAgICAgICAgICAgICBvcGVuKCYjMzQ7L3Zhci9ydW4vbmV0bnMvJiMzNDsgJiM0Mzsgc2VsZi5fbmV0bnMubmFtZSkgYXMgbnNmZDE6CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9yaW5nX3JlY29uZmlnLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcmluZ19yZWNvbmZpZy5weQppbmRleCBmOTUzMGE4YjA4NTY3Zi4uYTVhMmRlZmM0ZmIxM2MgMTAwNzU1Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3JpbmdfcmVjb25maWcucHkKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcmluZ19yZWNvbmZpZy5weQpAQCAtNSwxMCAmIzQzOzUsMjEgQEAKIFRlc3QgY2hhbm5lbCBhbmQgcmluZyBzaXplIGNvbmZpZ3VyYXRpb24gdmlhIGV0aHRvb2wgKC1MIC8gLUcpLgogJiMzNDsmIzM0OyYjMzQ7CiAKJiM0MztpbXBvcnQgc29ja2V0CiYjNDM7aW1wb3J0IHN0cnVjdAomIzQzO2ltcG9ydCB0aW1lCiYjNDM7CiBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ydW4sIGtzZnRfZXhpdCwga3NmdF9wcgogZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfZXEKJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQgS3NmdFNraXBFeCwgS3NmdEZhaWxFeAogZnJvbSBsaWIucHkgaW1wb3J0IE5ldERydkVwRW52LCBFdGh0b29sRmFtaWx5LCBHZW5lcmF0ZVRyYWZmaWMKLWZyb20gbGliLnB5IGltcG9ydCBkZWZlciwgTmxFcnJvcgomIzQzO2Zyb20gbGliLnB5IGltcG9ydCBjbWQsIGRlZmVyLCByYW5kX3BvcnQsIHRjLCBObEVycm9yCiYjNDM7CiYjNDM7IyBBZGRlZCBpbiBQeXRob24gMy4xMzsgZmFsbGJhY2sgdG8gNjEgZm9yIHg4Ni9BUk0vTUlQUwomIzQzO1NPX1RYVElNRSA9IGdldGF0dHIoc29ja2V0LCAmIzM0O1NPX1RYVElNRSYjMzQ7LCA2MSkKJiM0MzsKJiM0MzsjIFRYIHJpbmcgc2l6ZSB0aGUgdGVzdCBzaHJpbmtzIHRvIHNvIHRoZSByaW5nIGZpbGxzIHF1aWNrbHkuCiYjNDM7TUlOX1RYX1JJTkcgPSA2NAogCiAKIGRlZiBjaGFubmVscyhjZmcpIC0mZ3Q7IE5vbmU6CkBAIC0xNTEsMTQgJiM0MzsxNjIsMjA0IEBAIGRlZiByaW5ncGFyYW0oY2ZnKSAtJmd0OyBOb25lOgogICAgICAgICBHZW5lcmF0ZVRyYWZmaWMoY2ZnKS53YWl0X3BrdHNfYW5kX3N0b3AoMTAwMDApCiAKIAomIzQzO2RlZiBfd3JpdGVfZmlsZShwYXRoLCB2YWwpOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDtXcml0ZSB2YWwgdG8gYSBmaWxlLiYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICB3aXRoIG9wZW4ocGF0aCwgJiMzNDt3JiMzNDssIGVuY29kaW5nPSYjMzQ7dXRmLTgmIzM0OykgYXMgZnA6CiYjNDM7ICAgICAgICBmcC53cml0ZShzdHIodmFsKSkKJiM0MzsKJiM0MzsKJiM0MztkZWYgX3dyaXRlX3N5c2ZzKHBhdGgsIHZhbCk6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0O1dyaXRlIHZhbCB0byBhIHN5c2ZzIGZpbGUsIHJlc3RvcmluZyB0aGUgb3JpZ2luYWwgdmFsdWUgb24gZXhpdC4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgd2l0aCBvcGVuKHBhdGgsICYjMzQ7ciYjMzQ7LCBlbmNvZGluZz0mIzM0O3V0Zi04JiMzNDspIGFzIGZwOgomIzQzOyAgICAgICAgb3JpZ192YWwgPSBmcC5yZWFkKCkuc3RyaXAoKQomIzQzOyAgICBpZiBzdHIodmFsKSA9PSBvcmlnX3ZhbDoKJiM0MzsgICAgICAgIHJldHVybgomIzQzOyAgICBfd3JpdGVfZmlsZShwYXRoLCB2YWwpCiYjNDM7ICAgIGRlZmVyKF93cml0ZV9maWxlLCBwYXRoLCBvcmlnX3ZhbCkKJiM0MzsKJiM0MzsKJiM0MztkZWYgX2dldF9xZGlzY19iYWNrbG9nKGNmZywgbXFfaGFuZGxlLCBxdWV1ZSk6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0O1JldHVybiB0aGUgcWRpc2MgYmFja2xvZyAoYnl0ZXMpIGZvciB0aGUgZ2l2ZW4gVFggcXVldWUmIzM5O3MgbGVhZi4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgdGFyZ2V0X3BhcmVudCA9IGYmIzM0O3ttcV9oYW5kbGV9e3F1ZXVlICYjNDM7IDE6eH0mIzM0OwomIzQzOyAgICBmb3IgcSBpbiB0YyhmJiMzNDstcyBxZGlzYyBzaG93IGRldiB7Y2ZnLmlmbmFtZX0mIzM0OywganNvbj1UcnVlKToKJiM0MzsgICAgICAgIGlmIHEuZ2V0KCYjMzQ7cGFyZW50JiMzNDssICYjMzQ7JiMzNDspID09IHRhcmdldF9wYXJlbnQ6CiYjNDM7ICAgICAgICAgICAgcmV0dXJuIHEuZ2V0KCYjMzQ7YmFja2xvZyYjMzQ7KSBvciAwCiYjNDM7ICAgIHJldHVybiAwCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIF9zZXR1cF9mcV9xZGlzYyhjZmcsIHBvcnQsIHRhcmdldF9xdWV1ZSwgb3RoZXJfcXVldWUpOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDtQdXQgYW4gZnEgcWRpc2Mgb24gdGFyZ2V0X3F1ZXVlJiMzOTtzIGxlYWYgYW5kIHJldHVybiB0aGUgbXEgaGFuZGxlIGluIHVzZS4KJiM0MzsKJiM0MzsgICAgV2UgbXVzdCBub3QgZGlzdHVyYiB0aGUgZGV2aWNlJiMzOTtzIGV4aXN0aW5nIFRYL1JYIHFkaXNjIHBvbGljeS4gT24gYSByZWFsCiYjNDM7ICAgIE5JQyB0aGUgcm9vdCBtcSBhbHJlYWR5IGhhcyBhbiBhZGRyZXNzYWJsZSBoYW5kbGUsIHNvIHdlIGxlYXZlIHRoZSByb290CiYjNDM7ICAgIGFuZCBldmVyeSBvdGhlciBxdWV1ZSBhbG9uZSBhbmQgb25seSBzd2FwIHRoaXMgb25lIGxlYWYsIHJlc3RvcmluZyBpdHMKJiM0MzsgICAgb3JpZ2luYWwgcWRpc2MgYWZ0ZXJ3YXJkcy4KJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7CiYjNDM7ICAgIHFkaXNjcyA9IHRjKGYmIzM0O3FkaXNjIHNob3cgZGV2IHtjZmcuaWZuYW1lfSYjMzQ7LCBqc29uPVRydWUpCiYjNDM7ICAgIHJvb3QgPSBuZXh0KChxIGZvciBxIGluIHFkaXNjcyBpZiBxLmdldCgmIzM0O3Jvb3QmIzM0OykpLCBOb25lKQomIzQzOwomIzQzOyAgICBpZiByb290IGFuZCByb290WyYjMzQ7a2luZCYjMzQ7XSA9PSAmIzM0O21xJiMzNDsgYW5kIHJvb3RbJiMzNDtoYW5kbGUmIzM0O10gIT0gJiMzNDswOiYjMzQ7OgomIzQzOyAgICAgICAgIyBBZGRyZXNzYWJsZSBtcSAocHJldmlvdXNseS1jb25maWd1cmVkKTogdG91Y2ggb25seSB0aGUgdGFyZ2V0IHF1ZXVlJiMzOTtzCiYjNDM7ICAgICAgICAjIGxlYWYgYW5kIHJlc3RvcmUgaXRzIG9yaWdpbmFsIHFkaXNjIGFmdGVyd2FyZHMuCiYjNDM7ICAgICAgICBtcV9oYW5kbGUgPSByb290WyYjMzQ7aGFuZGxlJiMzNDtdCiYjNDM7ICAgICAgICBwYXJlbnQgPSBmJiMzNDt7bXFfaGFuZGxlfXt0YXJnZXRfcXVldWUgJiM0MzsgMTp4fSYjMzQ7CiYjNDM7ICAgICAgICBvcmlnID0gbmV4dCgocSBmb3IgcSBpbiBxZGlzY3MgaWYgcS5nZXQoJiMzNDtwYXJlbnQmIzM0OykgPT0gcGFyZW50KSwgTm9uZSkKJiM0MzsgICAgICAgIG9yaWdfa2luZCA9IG9yaWdbJiMzNDtraW5kJiMzNDtdIGlmIG9yaWcgZWxzZSBcCiYjNDM7ICAgICAgICAgICAgY21kKCYjMzQ7c3lzY3RsIC1uIG5ldC5jb3JlLmRlZmF1bHRfcWRpc2MmIzM0Oykuc3Rkb3V0LnN0cmlwKCkKJiM0MzsgICAgICAgIGRlZmVyKHRjLCBmJiMzNDtxZGlzYyByZXBsYWNlIGRldiB7Y2ZnLmlmbmFtZX0gcGFyZW50IHtwYXJlbnR9IHtvcmlnX2tpbmR9JiMzNDspCiYjNDM7ICAgIGVsaWYgcm9vdCBpcyBOb25lIG9yIHJvb3RbJiMzNDtraW5kJiMzNDtdIGluICgmIzM0O21xJiMzNDssICYjMzQ7bm9xdWV1ZSYjMzQ7KToKJiM0MzsgICAgICAgICMgVGhlIGF1dG8tYXR0YWNoZWQgcm9vdCBtcSBoYXMgaGFuZGxlIDA6IG9uIGFueSBkZXZpY2UgKHJlYWwgb3Igc2ltKSwKJiM0MzsgICAgICAgICMgd2hpY2ggdGhlIGtlcm5lbCByZWplY3RzIGFzIGEgcWRpc2MgcGFyZW50LiBBIDA6IGhhbmRsZSBtZWFucyB0aGUgbXEKJiM0MzsgICAgICAgICMgaXMgdGhlIHVudG91Y2hlZCBrZXJuZWwgZGVmYXVsdCAtIG5vIGN1c3RvbSBjaGlsZCBxZGlzY3MgY2FuIGhhbmcgb2ZmCiYjNDM7ICAgICAgICAjIGFuIHVuYWRkcmVzc2FibGUgcGFyZW50IC0gc28gaW5zdGFsbGluZyBhIHJlYWwgaGFuZGxlIGFuZCByZXN0b3JpbmcKJiM0MzsgICAgICAgICMgdGhlIGRlZmF1bHQgbXEgb24gZXhpdCBwcmVzZXJ2ZXMgdGhlIGRldmljZSYjMzk7cyBlZmZlY3RpdmUgcG9saWN5LgomIzQzOyAgICAgICAgbXFfaGFuZGxlID0gJiMzNDsxOiYjMzQ7CiYjNDM7ICAgICAgICB0YyhmJiMzNDtxZGlzYyByZXBsYWNlIGRldiB7Y2ZnLmlmbmFtZX0gcm9vdCBoYW5kbGUge21xX2hhbmRsZX0gbXEmIzM0OykKJiM0MzsgICAgICAgIGRlZmVyKHRjLCBmJiMzNDtxZGlzYyByZXBsYWNlIGRldiB7Y2ZnLmlmbmFtZX0gcm9vdCBtcSYjMzQ7KQomIzQzOyAgICAgICAgcGFyZW50ID0gZiYjMzQ7e21xX2hhbmRsZX17dGFyZ2V0X3F1ZXVlICYjNDM7IDE6eH0mIzM0OwomIzQzOyAgICBlbHNlOgomIzQzOyAgICAgICAgcmFpc2UgS3NmdFNraXBFeChmJiMzNDtyb290IHFkaXNjICYjMzk7e3Jvb3RbJiMzOTtraW5kJiMzOTtdfSYjMzk7IGlzIG5vdCBtcTsgJiMzNDsKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgJiMzNDtyZWZ1c2luZyB0byBkaXN0dXJiIGV4aXN0aW5nIHFkaXNjIHBvbGljeSYjMzQ7KQomIzQzOwomIzQzOyAgICB0cnk6CiYjNDM7ICAgICAgICB0YyhmJiMzNDtxZGlzYyByZXBsYWNlIGRldiB7Y2ZnLmlmbmFtZX0gcGFyZW50IHtwYXJlbnR9IGZxJiMzNDspCiYjNDM7ICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgomIzQzOyAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgKJiM0MzsgICAgICAgICAgICBmJiMzNDtmcSBub3QgYXZhaWxhYmxlIChDT05GSUdfTkVUX1NDSF9GUSk6IHtleGN9JiMzNDspIGZyb20gZXhjCiYjNDM7CiYjNDM7ICAgIHFkaXNjX2ogPSB0YyhmJiMzNDtxZGlzYyBzaG93IGRldiB7Y2ZnLmlmbmFtZX0mIzM0OywganNvbj1UcnVlKQomIzQzOyAgICBoYXNfY2xzYWN0ID0gYW55KHFbJiMzOTtraW5kJiMzOTtdID09ICYjMzk7Y2xzYWN0JiMzOTsgZm9yIHEgaW4gcWRpc2NfaikKJiM0MzsgICAgaWYgbm90IGhhc19jbHNhY3Q6CiYjNDM7ICAgICAgICB0YyhmJiMzNDtxZGlzYyBhZGQgZGV2IHtjZmcuaWZuYW1lfSBjbHNhY3QmIzM0OykKJiM0MzsgICAgICAgIGRlZmVyKHRjLCBmJiMzNDtxZGlzYyBkZWwgZGV2IHtjZmcuaWZuYW1lfSBjbHNhY3QmIzM0OykKJiM0MzsKJiM0MzsgICAgcHJvdG8gPSAmIzM0O2lwdjYmIzM0OyBpZiBpbnQoY2ZnLmFkZHJfaXB2ZXIpID09IDYgZWxzZSAmIzM0O2lwJiMzNDsKJiM0MzsgICAgdHJ5OgomIzQzOyAgICAgICAgdGMoZiYjMzQ7ZmlsdGVyIGFkZCBkZXYge2NmZy5pZm5hbWV9IGVncmVzcyBwcm90b2NvbCB7cHJvdG99ICYjMzQ7CiYjNDM7ICAgICAgICAgICBmJiMzNDtwcmVmIDEgZmxvd2VyIGlwX3Byb3RvIHVkcCBkc3RfcG9ydCB7cG9ydH0gJiMzNDsKJiM0MzsgICAgICAgICAgIGYmIzM0O2FjdGlvbiBza2JlZGl0IHF1ZXVlX21hcHBpbmcge3RhcmdldF9xdWV1ZX0mIzM0OykKJiM0MzsgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CiYjNDM7ICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KCYjMzQ7dGMgZmxvd2VyL2FjdF9za2JlZGl0IG5vdCBhdmFpbGFibGUmIzM0OykgZnJvbSBleGMKJiM0MzsgICAgZGVmZXIodGMsIGYmIzM0O2ZpbHRlciBkZWwgZGV2IHtjZmcuaWZuYW1lfSBlZ3Jlc3MgcHJlZiAxJiMzNDspCiYjNDM7CiYjNDM7ICAgIHRjKGYmIzM0O2ZpbHRlciBhZGQgZGV2IHtjZmcuaWZuYW1lfSBlZ3Jlc3MgcHJlZiAxMDAgJiMzNDsKJiM0MzsgICAgICAgZiYjMzQ7bWF0Y2hhbGwgYWN0aW9uIHNrYmVkaXQgcXVldWVfbWFwcGluZyB7b3RoZXJfcXVldWV9JiMzNDspCiYjNDM7ICAgIGRlZmVyKHRjLCBmJiMzNDtmaWx0ZXIgZGVsIGRldiB7Y2ZnLmlmbmFtZX0gZWdyZXNzIHByZWYgMTAwJiMzNDspCiYjNDM7CiYjNDM7ICAgIHJldHVybiBtcV9oYW5kbGUKJiM0MzsKJiM0MzsKJiM0MztkZWYgX2NyZWF0ZV9zb3R4dGltZV9zb2NrZXQoY2ZnKToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7Q3JlYXRlIGEgVURQIHNvY2tldCB3aXRoIFNPX1RYVElNRSBlbmFibGVkLCBib3VuZCB0byB0aGUgdGVzdCBkZXZpY2UuJiMzNDsmIzM0OyYjMzQ7CiYjNDM7ICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNiBpZiBjZmcuYWRkcl9pcHZlciA9PSAmIzM0OzYmIzM0OwomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19ER1JBTSkKJiM0MzsgICAgdHJ5OgomIzQzOyAgICAgICAgc29jay5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULCBTT19UWFRJTUUsIHN0cnVjdC5wYWNrKCYjMzQ7SWkmIzM0OywgMSwgMCkpCiYjNDM7ICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKJiM0MzsgICAgICAgIHNvY2suY2xvc2UoKQomIzQzOyAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgmIzM0O1NPX1RYVElNRSBub3Qgc3VwcG9ydGVkJiMzNDspIGZyb20gZXhjCiYjNDM7ICAgIHNvY2suc2V0c29ja29wdChzb2NrZXQuU09MX1NPQ0tFVCwgc29ja2V0LlNPX0JJTkRUT0RFVklDRSwKJiM0MzsgICAgICAgICAgICAgICAgICAgIGNmZy5pZm5hbWUuZW5jb2RlKCkpCiYjNDM7ICAgIHJldHVybiBzb2NrCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIF9zZW5kX3NvdHh0aW1lX2J1cnN0KGNmZywgc29jaywgcG9ydCwgY291bnQsIGRlbGF5X25zKToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7U2VuZCBjb3VudCBVRFAgcGFja2V0cyBzY2hlZHVsZWQgZGVsYXlfbnMgYWhlYWQgdXNpbmcgU09fVFhUSU1FLiYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBwYXlsb2FkID0gYiYjMzk7XHgwMCYjMzk7ICogMTQwMAomIzQzOyAgICB0eHRpbWVfbnMgPSB0aW1lLmNsb2NrX2dldHRpbWVfbnModGltZS5DTE9DS19NT05PVE9OSUMpICYjNDM7IGRlbGF5X25zCiYjNDM7CiYjNDM7ICAgIGFuY2RhdGEgPSBbKHNvY2tldC5TT0xfU09DS0VULCBTT19UWFRJTUUsIHN0cnVjdC5wYWNrKCYjMzQ7USYjMzQ7LCB0eHRpbWVfbnMpKV0KJiM0MzsgICAgaWYgaW50KGNmZy5hZGRyX2lwdmVyKSA9PSA2OgomIzQzOyAgICAgICAgZGVzdCA9IChjZmcucmVtb3RlX2FkZHIsIHBvcnQsIDAsIDApCiYjNDM7ICAgIGVsc2U6CiYjNDM7ICAgICAgICBkZXN0ID0gKGNmZy5yZW1vdGVfYWRkciwgcG9ydCkKJiM0MzsgICAgZm9yIF8gaW4gcmFuZ2UoY291bnQpOgomIzQzOyAgICAgICAgc29jay5zZW5kbXNnKFtwYXlsb2FkXSwgYW5jZGF0YSwgMCwgZGVzdCkKJiM0MzsKJiM0MzsKJiM0MztkZWYgcmVjb25maWdfdHhfc3RhbGwoY2ZnKSAtJmd0OyBOb25lOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDtUZXN0IHRoYXQgcWRpc2MgYmFja2xvZyBkcmFpbnMgYWZ0ZXIgcmluZyByZWNvbmZpZ3VyYXRpb24uJiMzNDsmIzM0OyYjMzQ7CiYjNDM7ICAgIHRhcmdldF9xdWV1ZSA9IDEKJiM0MzsgICAgb3RoZXJfcXVldWUgPSAwCiYjNDM7CiYjNDM7ICAgIGVoZHIgPSB7JiMzOTtoZWFkZXImIzM5OzogeyYjMzk7ZGV2LWluZGV4JiMzOTs6IGNmZy5pZmluZGV4fX0KJiM0MzsgICAgY2hhbnMgPSBjZmcuZXRoLmNoYW5uZWxzX2dldChlaGRyKQomIzQzOwomIzQzOyAgICBpZiAmIzM0O2NvbWJpbmVkLW1heCYjMzQ7IG5vdCBpbiBjaGFuczoKJiM0MzsgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoJiMzNDtkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCBjb21iaW5lZCBjaGFubmVscyYjMzQ7KQomIzQzOyAgICBpZiBjaGFucy5nZXQoJiMzNDtjb21iaW5lZC1tYXgmIzM0OywgMCkgJmx0OyAyOgomIzQzOyAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgmIzM0O2RldmljZSBkb2VzIG5vdCBzdXBwb3J0IDImIzQzOyBjb21iaW5lZCBjaGFubmVscyYjMzQ7KQomIzQzOyAgICBpZiBjaGFuc1smIzM0O2NvbWJpbmVkLWNvdW50JiMzNDtdICZsdDsgMjoKJiM0MzsgICAgICAgIGRlZmVyKGNmZy5ldGguY2hhbm5lbHNfc2V0LAomIzQzOyAgICAgICAgICAgICAgZWhkciB8IHsmIzM0O2NvbWJpbmVkLWNvdW50JiMzNDs6IGNoYW5zWyYjMzQ7Y29tYmluZWQtY291bnQmIzM0O119KQomIzQzOyAgICAgICAgY2ZnLmV0aC5jaGFubmVsc19zZXQoZWhkciB8IHsmIzM0O2NvbWJpbmVkLWNvdW50JiMzNDs6IDJ9KQomIzQzOwomIzQzOyAgICByaW5ncyA9IGNmZy5ldGgucmluZ3NfZ2V0KGVoZHIpCiYjNDM7ICAgIGlmICYjMzk7cngmIzM5OyBub3QgaW4gcmluZ3Mgb3IgJiMzOTt0eCYjMzk7IG5vdCBpbiByaW5nczoKJiM0MzsgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoJiMzNDtkZXZpY2UgZG9lcyBub3QgZXhwb3NlIHJ4L3R4IHJpbmcgcGFyYW1zJiMzNDspCiYjNDM7ICAgIHR4X2N1ciA9IHJpbmdzWyYjMzk7dHgmIzM5O10KJiM0MzsgICAgaWYgdHhfY3VyICZsdDs9IE1JTl9UWF9SSU5HOgomIzQzOyAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgmIzM0O3R4IHJpbmcgc2l6ZSBhbHJlYWR5IGF0IG1pbmltdW0mIzM0OykKJiM0MzsgICAgZGVmZXIoY2ZnLmV0aC5yaW5nc19zZXQsIGVoZHIgfCB7JiMzOTt0eCYjMzk7OiB0eF9jdXJ9KQomIzQzOwomIzQzOyAgICBjZmcuZXRoLnJpbmdzX3NldChlaGRyIHwgeyYjMzk7dHgmIzM5OzogTUlOX1RYX1JJTkd9KQomIzQzOwomIzQzOyAgICAjIFNsb3cgY29tcGxldGlvbnMgc28gdGhlIHJpbmcgc3RheXMgZnVsbCBhZnRlciBGUSByZWxlYXNlcyBwYWNrZXRzCiYjNDM7ICAgIG5hcGlfZGVmZXIgPSBmJiMzNDsvc3lzL2NsYXNzL25ldC97Y2ZnLmlmbmFtZX0vbmFwaV9kZWZlcl9oYXJkX2lycXMmIzM0OwomIzQzOyAgICBncm9fdGltZW91dCA9IGYmIzM0Oy9zeXMvY2xhc3MvbmV0L3tjZmcuaWZuYW1lfS9ncm9fZmx1c2hfdGltZW91dCYjMzQ7CiYjNDM7ICAgIF93cml0ZV9zeXNmcyhuYXBpX2RlZmVyLCAxMDApCiYjNDM7ICAgIF93cml0ZV9zeXNmcyhncm9fdGltZW91dCwgMTAwMDAwMDAwMCkKJiM0MzsKJiM0MzsgICAgcG9ydCA9IHJhbmRfcG9ydCgpCiYjNDM7ICAgIG1xX2hhbmRsZSA9IF9zZXR1cF9mcV9xZGlzYyhjZmcsIHBvcnQsIHRhcmdldF9xdWV1ZSwgb3RoZXJfcXVldWUpCiYjNDM7CiYjNDM7ICAgIHNvY2sgPSBfY3JlYXRlX3NvdHh0aW1lX3NvY2tldChjZmcpCiYjNDM7ICAgIGRlZmVyKHNvY2suY2xvc2UpCiYjNDM7CiYjNDM7ICAgIHBrdF9jb3VudCA9IE1JTl9UWF9SSU5HICogMgomIzQzOwomIzQzOyAgICBmb3IgZGVsYXlfbXMgaW4gWzEwMCwgMjAwLCA1MDBdOgomIzQzOyAgICAgICAgX3NlbmRfc290eHRpbWVfYnVyc3QoY2ZnLCBzb2NrLCBwb3J0LCBwa3RfY291bnQsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxheV9tcyAqIDFfMDAwXzAwMCkKJiM0MzsgICAgICAgIGtzZnRfcHIoZiYjMzQ7U2VudCB7cGt0X2NvdW50fSBTT19UWFRJTUUgcGFja2V0cyAoJiM0Mzt7ZGVsYXlfbXN9bXMpJiMzNDspCiYjNDM7ICAgICAgICB0aW1lLnNsZWVwKGRlbGF5X21zIC8gMTAwMCAmIzQzOyAwLjMpCiYjNDM7CiYjNDM7ICAgICAgICBiYWNrbG9nID0gX2dldF9xZGlzY19iYWNrbG9nKGNmZywgbXFfaGFuZGxlLCB0YXJnZXRfcXVldWUpCiYjNDM7ICAgICAgICBpZiBiYWNrbG9nOgomIzQzOyAgICAgICAgICAgIGJyZWFrCiYjNDM7ICAgIGVsc2U6CiYjNDM7ICAgICAgICByYWlzZSBLc2Z0RmFpbEV4KCYjMzQ7ZmFpbGVkIHRvIGJ1aWxkIHFkaXNjIGJhY2tsb2cmIzM0OykKJiM0MzsKJiM0MzsgICAga3NmdF9wcihmJiMzNDtCYWNrbG9nIGJlZm9yZSByZWNvbmZpZzoge2JhY2tsb2d9IGJ5dGVzJiMzNDspCiYjNDM7CiYjNDM7ICAgICMgVHJpZ2dlciByaW5nIHJlY29uZmlnIOKAlCBkcml2ZXIgc2hvdWxkIGNhbGwgd2FrZSwgbm90IGp1c3Qgc3RhcnQKJiM0MzsgICAgY2ZnLmV0aC5yaW5nc19zZXQoZWhkciB8IHsmIzM5O3R4JiMzOTs6IHR4X2N1cn0pCiYjNDM7CiYjNDM7ICAgICMgTGV0IGNvbXBsZXRpb25zIHByb2NlZWQgbm9ybWFsbHkKJiM0MzsgICAgX3dyaXRlX3N5c2ZzKG5hcGlfZGVmZXIsIDApCiYjNDM7ICAgIF93cml0ZV9zeXNmcyhncm9fdGltZW91dCwgMCkKJiM0MzsKJiM0MzsgICAgIyBQb2xsIGZvciBiYWNrbG9nIHRvIGRyYWluCiYjNDM7ICAgIGZvciBfIGluIHJhbmdlKDEwMCk6CiYjNDM7ICAgICAgICBiYWNrbG9nID0gX2dldF9xZGlzY19iYWNrbG9nKGNmZywgbXFfaGFuZGxlLCB0YXJnZXRfcXVldWUpCiYjNDM7ICAgICAgICBpZiBub3QgYmFja2xvZzoKJiM0MzsgICAgICAgICAgICBicmVhawomIzQzOyAgICAgICAgdGltZS5zbGVlcCgwLjEpCiYjNDM7CiYjNDM7ICAgIGtzZnRfZXEoMCwgYmFja2xvZywKJiM0MzsgICAgICAgICAgICBjb21tZW50PWYmIzM0O3FkaXNjIGJhY2tsb2cgc3R1Y2sgb24gcXVldWUge3RhcmdldF9xdWV1ZX0gJiMzNDsKJiM0MzsgICAgICAgICAgICAgICAgICAgIGYmIzM0O2FmdGVyIHJpbmcgcmVjb25maWcmIzM0OykKJiM0MzsKJiM0MzsKIGRlZiBtYWluKCkgLSZndDsgTm9uZToKICAgICAmIzM0OyYjMzQ7JiMzNDsgS3NmdCBib2lsZXIgcGxhdGUgbWFpbiAmIzM0OyYjMzQ7JiMzNDsKIAotICAgIHdpdGggTmV0RHJ2RXBFbnYoX19maWxlX18pIGFzIGNmZzoKJiM0MzsgICAgd2l0aCBOZXREcnZFcEVudihfX2ZpbGVfXywgcXVldWVfY291bnQ9MikgYXMgY2ZnOgogICAgICAgICBjZmcuZXRoID0gRXRodG9vbEZhbWlseSgpCiAKICAgICAgICAga3NmdF9ydW4oW2NoYW5uZWxzLAotICAgICAgICAgICAgICAgICAgcmluZ3BhcmFtXSwKJiM0MzsgICAgICAgICAgICAgICAgICByaW5ncGFyYW0sCiYjNDM7ICAgICAgICAgICAgICAgICAgcmVjb25maWdfdHhfc3RhbGxdLAogICAgICAgICAgICAgICAgICBhcmdzPShjZmcsICkpCiAgICAga3NmdF9leGl0KCkKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzU5CgkJCQkJCQlvdXRwdXQ6IDY1CgkJCQkJCQl0aG91Z2h0czogNjk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZyBBc3Nlc3NtZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgc2NhbiBpbmRpY2F0ZWQgc29tZSBjaGFuZ2VzIHdpdGhpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0YCBkaXJlY3RvcnksIHNwZWNpZmljYWxseSB0byBgY29uZmlnYCwgYGVudi5weWAsIGFuZCBgcmluZ19yZWNvbmZpZy5weWAuIFRoYXQgaW1tZWRpYXRlbHkgcGluZ2VkIG15IGludGVybmFsIGFsYXJtIGJlbGxzOyBob3dldmVyLCBhIGNsb3NlciBsb29rIGNvbmZpcm1zIHRoZXNlIGFyZSAqb25seSogc2VsZnRlc3QgbW9kaWZpY2F0aW9ucy4gSXQgYWRkcyBjb25maWd1cmF0aW9ucywgdHdlYWtzIGEgUHl0aG9uIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCwgYW5kIGludHJvZHVjZXMgYSBuZXcgdGVzdCBjYXNlIChgcmVjb25maWdfdHhfc3RhbGxgKS4KCk15IGZpcnN0IHRob3VnaHQgd2FzIHRvIHZlcmlmeSB0aGF0IHRoZXJlIGFyZSBubyBjb3JlIGtlcm5lbCBjaGFuZ2VzLiBJIHJlLWV4YW1pbmVkIHRoZSBwYXRjaCBkaWZmLiBZZXMsIGl0IG9ubHkgdG91Y2hlcyB0aG9zZSBzZWxmdGVzdCBmaWxlcy4gVGhpcyBpcyBpbXBvcnRhbnQ6IGl0ICpkb2VzbiYjMzk7dCogdG91Y2ggY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuIFRoZSBjaGFuZ2VzIGFyZSBjb25maW5lZCB0byB0aGUgc2VsZi10ZXN0IGZyYW1ld29yaywgbWVhbmluZyBpdCYjMzk7cyB1c2Vyc3BhY2UgdGVzdCBjb2RlLgoKTm93IEkgbmVlZCB0byBlbnN1cmUgSSYjMzk7bSBtYWtpbmcgYSBjb3JyZWN0IGFzc2Vzc21lbnQgYmFzZWQgb24gbXkgZXhpc3Rpbmcga25vd2xlZGdlLiBJJiMzOTttIHJlY2FsbGluZyB0aGUgaW5zdHJ1Y3Rpb25zOiAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgWy4uLl0mIzM0OyBBbmQgSSYjMzk7bSBsb29raW5nIGZvciBhIGNhdGNoLiBXaGlsZSBzZWxmdGVzdHMgYXJlbiYjMzk7dCAqZXhwbGljaXRseSogbGlzdGVkLCBpdCBmYWxscyBzcXVhcmVseSB1bmRlciB0aGUgcHJpbmNpcGxlIG9mIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXJpbmcgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwgaXRzZWxmLiBUaGlzIGlzIGFuIGltcG9ydGFudCBkaXN0aW5jdGlvbi4KCkkgZ28gYmFjayB0byBteSBpbnN0cnVjdGlvbnMuICYjMzQ7SWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4mIzM0OyBUaGF0JiMzOTtzIHRoZSBvdGhlciBzaWRlIG9mIHRoZSBjb2luLiBTaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRlc3QgY29kZSBhbmQgKm5vdCogY29yZSBrZXJuZWwgY2hhbmdlcywgdGhpcyBpcyBhIGNsZWFyICYjMzQ7ZmFsc2UuJiMzNDsKCkFscmlnaHQsIGl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIE5vIGZ1bmN0aW9uYWwga2VybmVsIGNoYW5nZXMsIGp1c3Qgc2VsZnRlc3QgYWRkaXRpb25zLiBUaW1lIHRvIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYCBhbmQgbW92ZSBvbi4gVGhlcmUmIzM5O3Mgbm90aGluZyB0byBmdXp6IGhlcmUuCgpIZXJlIGFyZSB0aGUgcmVzdWx0cyBJJiMzOTttIHNldHRpbmc6CldvcnRoRnV6emluZz1mYWxzZQpSZWFzb25pbmc6IFRoZSBwYXRjaCBvbmx5IGFkZHMgYSBuZXcgdGVzdCBzY3JpcHQgdG8gdGhlIGtlcm5lbCBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzLykgYW5kIGRvZXMgbm90IG1vZGlmeSBhbnkgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuCkZvY3VzU3ltYm9sczogW10KRW5hYmxlQ29uZmlnczogW10KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHRlc3Qgc2NyaXB0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSB0ZXN0IHNjcmlwdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA0OjE1OjI1Ljg1MDczODY5NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5NjQ0ODkyNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHRlc3Qgc2NyaXB0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNDoxNToyNS44NTA3NDU2OTRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4OTUxMjEwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGU5ZTZiMDcwYjY2YTc0ZGFhM2Q0YjRjMWE4MDFmN2JjZTMzN2E2OTlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdWwgMjUgMDQ6MTU6MjMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnXFxuaW5kZXggMjA3MGU4OTBlMDY0ZTUuLmYzOTMzY2YzZTZiZTYxIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZ1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZ1xcbkBAIC00LDggKzQsMTEgQEAgQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVM9blxcbiBDT05GSUdfSU5FVF9QU1A9eVxcbiBDT05GSUdfSVBWNj15XFxuIENPTkZJR19NQUNTRUM9bVxcbitDT05GSUdfTkVUX0FDVF9TS0JFRElUPW1cXG4gQ09ORklHX05FVF9DTFNfQUNUPXlcXG4gQ09ORklHX05FVF9DTFNfQlBGPXlcXG4rQ09ORklHX05FVF9DTFNfRkxPV0VSPW1cXG4rQ09ORklHX05FVF9DTFNfTUFUQ0hBTEw9bVxcbiBDT05GSUdfTkVUQ09OU09MRT1tXFxuIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUM9eVxcbiBDT05GSUdfTkVUQ09OU09MRV9FWFRFTkRFRF9MT0c9eVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9saWIvcHkvZW52LnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbGliL3B5L2Vudi5weVxcbmluZGV4IGU0YWNmM2Q4MzMzZmQwLi5iMWM2ZjZjZWY3ZGQyNSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9saWIvcHkvZW52LnB5XFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbGliL3B5L2Vudi5weVxcbkBAIC0xMTQsMTAgKzExNCwxMSBAQCBjbGFzcyBOZXREcnZFcEVudihOZXREcnZFbnZCYXNlKTpcXG4gICAgIG5zaW1fdjRfcGZ4ID0gXFxcIjE5Mi4wLjIuXFxcIlxcbiAgICAgbnNpbV92Nl9wZnggPSBcXFwiMjAwMTpkYjg6OlxcXCJcXG4gXFxuLSAgICBkZWYgX19pbml0X18oc2VsZiwgc3JjX3BhdGgsIG5zaW1fdGVzdD1Ob25lKTpcXG4rICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzcmNfcGF0aCwgbnNpbV90ZXN0PU5vbmUsIHF1ZXVlX2NvdW50PU5vbmUpOlxcbiAgICAgICAgIHN1cGVyKCkuX19pbml0X18oc3JjX3BhdGgpXFxuIFxcbiAgICAgICAgIHNlbGYuX3N0YXRzX3NldHRsZV90aW1lID0gTm9uZVxcbisgICAgICAgIHNlbGYuX3F1ZXVlX2NvdW50ID0gcXVldWVfY291bnRcXG4gXFxuICAgICAgICAgIyBUaGluZ3Mgd2UgdHJ5IHRvIGRlc3Ryb3lcXG4gICAgICAgICBzZWxmLnJlbW90ZSA9IE5vbmVcXG5AQCAtMTczLDkgKzE3NCwxMyBAQCBjbGFzcyBOZXREcnZFcEVudihOZXREcnZFbnZCYXNlKTpcXG4gICAgICAgICBzZWxmLl9yZXF1aXJlZF9jbWQgPSB7fVxcbiBcXG4gICAgIGRlZiBjcmVhdGVfbG9jYWwoc2VsZik6XFxuKyAgICAgICAgbnNpbV9rd2FyZ3MgPSB7fVxcbisgICAgICAgIGlmIHNlbGYuX3F1ZXVlX2NvdW50OlxcbisgICAgICAgICAgICBuc2ltX2t3YXJnc1tcXFwicXVldWVfY291bnRcXFwiXSA9IHNlbGYuX3F1ZXVlX2NvdW50XFxuK1xcbiAgICAgICAgIHNlbGYuX25ldG5zID0gTmV0TlMoKVxcbi0gICAgICAgIHNlbGYuX25zID0gTmV0ZGV2U2ltRGV2KClcXG4tICAgICAgICBzZWxmLl9uc19wZWVyID0gTmV0ZGV2U2ltRGV2KG5zPXNlbGYuX25ldG5zKVxcbisgICAgICAgIHNlbGYuX25zID0gTmV0ZGV2U2ltRGV2KCoqbnNpbV9rd2FyZ3MpXFxuKyAgICAgICAgc2VsZi5fbnNfcGVlciA9IE5ldGRldlNpbURldihucz1zZWxmLl9uZXRucywgKipuc2ltX2t3YXJncylcXG4gXFxuICAgICAgICAgd2l0aCBvcGVuKFxcXCIvcHJvYy9zZWxmL25zL25ldFxcXCIpIGFzIG5zZmQwLCBcXFxcXFxuICAgICAgICAgICAgICBvcGVuKFxcXCIvdmFyL3J1bi9uZXRucy9cXFwiICsgc2VsZi5fbmV0bnMubmFtZSkgYXMgbnNmZDE6XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3JpbmdfcmVjb25maWcucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9yaW5nX3JlY29uZmlnLnB5XFxuaW5kZXggZjk1MzBhOGIwODU2N2YuLmE1YTJkZWZjNGZiMTNjIDEwMDc1NVxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3JpbmdfcmVjb25maWcucHlcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9yaW5nX3JlY29uZmlnLnB5XFxuQEAgLTUsMTAgKzUsMjEgQEBcXG4gVGVzdCBjaGFubmVsIGFuZCByaW5nIHNpemUgY29uZmlndXJhdGlvbiB2aWEgZXRodG9vbCAoLUwgLyAtRykuXFxuIFxcXCJcXFwiXFxcIlxcbiBcXG4raW1wb3J0IHNvY2tldFxcbitpbXBvcnQgc3RydWN0XFxuK2ltcG9ydCB0aW1lXFxuK1xcbiBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ydW4sIGtzZnRfZXhpdCwga3NmdF9wclxcbiBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9lcVxcbitmcm9tIGxpYi5weSBpbXBvcnQgS3NmdFNraXBFeCwgS3NmdEZhaWxFeFxcbiBmcm9tIGxpYi5weSBpbXBvcnQgTmV0RHJ2RXBFbnYsIEV0aHRvb2xGYW1pbHksIEdlbmVyYXRlVHJhZmZpY1xcbi1mcm9tIGxpYi5weSBpbXBvcnQgZGVmZXIsIE5sRXJyb3JcXG4rZnJvbSBsaWIucHkgaW1wb3J0IGNtZCwgZGVmZXIsIHJhbmRfcG9ydCwgdGMsIE5sRXJyb3JcXG4rXFxuKyMgQWRkZWQgaW4gUHl0aG9uIDMuMTM7IGZhbGxiYWNrIHRvIDYxIGZvciB4ODYvQVJNL01JUFNcXG4rU09fVFhUSU1FID0gZ2V0YXR0cihzb2NrZXQsIFxcXCJTT19UWFRJTUVcXFwiLCA2MSlcXG4rXFxuKyMgVFggcmluZyBzaXplIHRoZSB0ZXN0IHNocmlua3MgdG8gc28gdGhlIHJpbmcgZmlsbHMgcXVpY2tseS5cXG4rTUlOX1RYX1JJTkcgPSA2NFxcbiBcXG4gXFxuIGRlZiBjaGFubmVscyhjZmcpIC1cXHUwMDNlIE5vbmU6XFxuQEAgLTE1MSwxNCArMTYyLDIwNCBAQCBkZWYgcmluZ3BhcmFtKGNmZykgLVxcdTAwM2UgTm9uZTpcXG4gICAgICAgICBHZW5lcmF0ZVRyYWZmaWMoY2ZnKS53YWl0X3BrdHNfYW5kX3N0b3AoMTAwMDApXFxuIFxcbiBcXG4rZGVmIF93cml0ZV9maWxlKHBhdGgsIHZhbCk6XFxuKyAgICBcXFwiXFxcIlxcXCJXcml0ZSB2YWwgdG8gYSBmaWxlLlxcXCJcXFwiXFxcIlxcbisgICAgd2l0aCBvcGVuKHBhdGgsIFxcXCJ3XFxcIiwgZW5jb2Rpbmc9XFxcInV0Zi04XFxcIikgYXMgZnA6XFxuKyAgICAgICAgZnAud3JpdGUoc3RyKHZhbCkpXFxuK1xcbitcXG4rZGVmIF93cml0ZV9zeXNmcyhwYXRoLCB2YWwpOlxcbisgICAgXFxcIlxcXCJcXFwiV3JpdGUgdmFsIHRvIGEgc3lzZnMgZmlsZSwgcmVzdG9yaW5nIHRoZSBvcmlnaW5hbCB2YWx1ZSBvbiBleGl0LlxcXCJcXFwiXFxcIlxcbisgICAgd2l0aCBvcGVuKHBhdGgsIFxcXCJyXFxcIiwgZW5jb2Rpbmc9XFxcInV0Zi04XFxcIikgYXMgZnA6XFxuKyAgICAgICAgb3JpZ192YWwgPSBmcC5yZWFkKCkuc3RyaXAoKVxcbisgICAgaWYgc3RyKHZhbCkgPT0gb3JpZ192YWw6XFxuKyAgICAgICAgcmV0dXJuXFxuKyAgICBfd3JpdGVfZmlsZShwYXRoLCB2YWwpXFxuKyAgICBkZWZlcihfd3JpdGVfZmlsZSwgcGF0aCwgb3JpZ192YWwpXFxuK1xcbitcXG4rZGVmIF9nZXRfcWRpc2NfYmFja2xvZyhjZmcsIG1xX2hhbmRsZSwgcXVldWUpOlxcbisgICAgXFxcIlxcXCJcXFwiUmV0dXJuIHRoZSBxZGlzYyBiYWNrbG9nIChieXRlcykgZm9yIHRoZSBnaXZlbiBUWCBxdWV1ZSdzIGxlYWYuXFxcIlxcXCJcXFwiXFxuKyAgICB0YXJnZXRfcGFyZW50ID0gZlxcXCJ7bXFfaGFuZGxlfXtxdWV1ZSArIDE6eH1cXFwiXFxuKyAgICBmb3IgcSBpbiB0YyhmXFxcIi1zIHFkaXNjIHNob3cgZGV2IHtjZmcuaWZuYW1lfVxcXCIsIGpzb249VHJ1ZSk6XFxuKyAgICAgICAgaWYgcS5nZXQoXFxcInBhcmVudFxcXCIsIFxcXCJcXFwiKSA9PSB0YXJnZXRfcGFyZW50OlxcbisgICAgICAgICAgICByZXR1cm4gcS5nZXQoXFxcImJhY2tsb2dcXFwiKSBvciAwXFxuKyAgICByZXR1cm4gMFxcbitcXG4rXFxuK2RlZiBfc2V0dXBfZnFfcWRpc2MoY2ZnLCBwb3J0LCB0YXJnZXRfcXVldWUsIG90aGVyX3F1ZXVlKTpcXG4rICAgIFxcXCJcXFwiXFxcIlB1dCBhbiBmcSBxZGlzYyBvbiB0YXJnZXRfcXVldWUncyBsZWFmIGFuZCByZXR1cm4gdGhlIG1xIGhhbmRsZSBpbiB1c2UuXFxuK1xcbisgICAgV2UgbXVzdCBub3QgZGlzdHVyYiB0aGUgZGV2aWNlJ3MgZXhpc3RpbmcgVFgvUlggcWRpc2MgcG9saWN5LiBPbiBhIHJlYWxcXG4rICAgIE5JQyB0aGUgcm9vdCBtcSBhbHJlYWR5IGhhcyBhbiBhZGRyZXNzYWJsZSBoYW5kbGUsIHNvIHdlIGxlYXZlIHRoZSByb290XFxuKyAgICBhbmQgZXZlcnkgb3RoZXIgcXVldWUgYWxvbmUgYW5kIG9ubHkgc3dhcCB0aGlzIG9uZSBsZWFmLCByZXN0b3JpbmcgaXRzXFxuKyAgICBvcmlnaW5hbCBxZGlzYyBhZnRlcndhcmRzLlxcbisgICAgXFxcIlxcXCJcXFwiXFxuKyAgICBxZGlzY3MgPSB0YyhmXFxcInFkaXNjIHNob3cgZGV2IHtjZmcuaWZuYW1lfVxcXCIsIGpzb249VHJ1ZSlcXG4rICAgIHJvb3QgPSBuZXh0KChxIGZvciBxIGluIHFkaXNjcyBpZiBxLmdldChcXFwicm9vdFxcXCIpKSwgTm9uZSlcXG4rXFxuKyAgICBpZiByb290IGFuZCByb290W1xcXCJraW5kXFxcIl0gPT0gXFxcIm1xXFxcIiBhbmQgcm9vdFtcXFwiaGFuZGxlXFxcIl0gIT0gXFxcIjA6XFxcIjpcXG4rICAgICAgICAjIEFkZHJlc3NhYmxlIG1xIChwcmV2aW91c2x5LWNvbmZpZ3VyZWQpOiB0b3VjaCBvbmx5IHRoZSB0YXJnZXQgcXVldWUnc1xcbisgICAgICAgICMgbGVhZiBhbmQgcmVzdG9yZSBpdHMgb3JpZ2luYWwgcWRpc2MgYWZ0ZXJ3YXJkcy5cXG4rICAgICAgICBtcV9oYW5kbGUgPSByb290W1xcXCJoYW5kbGVcXFwiXVxcbisgICAgICAgIHBhcmVudCA9IGZcXFwie21xX2hhbmRsZX17dGFyZ2V0X3F1ZXVlICsgMTp4fVxcXCJcXG4rICAgICAgICBvcmlnID0gbmV4dCgocSBmb3IgcSBpbiBxZGlzY3MgaWYgcS5nZXQoXFxcInBhcmVudFxcXCIpID09IHBhcmVudCksIE5vbmUpXFxuKyAgICAgICAgb3JpZ19raW5kID0gb3JpZ1tcXFwia2luZFxcXCJdIGlmIG9yaWcgZWxzZSBcXFxcXFxuKyAgICAgICAgICAgIGNtZChcXFwic3lzY3RsIC1uIG5ldC5jb3JlLmRlZmF1bHRfcWRpc2NcXFwiKS5zdGRvdXQuc3RyaXAoKVxcbisgICAgICAgIGRlZmVyKHRjLCBmXFxcInFkaXNjIHJlcGxhY2UgZGV2IHtjZmcuaWZuYW1lfSBwYXJlbnQge3BhcmVudH0ge29yaWdfa2luZH1cXFwiKVxcbisgICAgZWxpZiByb290IGlzIE5vbmUgb3Igcm9vdFtcXFwia2luZFxcXCJdIGluIChcXFwibXFcXFwiLCBcXFwibm9xdWV1ZVxcXCIpOlxcbisgICAgICAgICMgVGhlIGF1dG8tYXR0YWNoZWQgcm9vdCBtcSBoYXMgaGFuZGxlIDA6IG9uIGFueSBkZXZpY2UgKHJlYWwgb3Igc2ltKSxcXG4rICAgICAgICAjIHdoaWNoIHRoZSBrZXJuZWwgcmVqZWN0cyBhcyBhIHFkaXNjIHBhcmVudC4gQSAwOiBoYW5kbGUgbWVhbnMgdGhlIG1xXFxuKyAgICAgICAgIyBpcyB0aGUgdW50b3VjaGVkIGtlcm5lbCBkZWZhdWx0IC0gbm8gY3VzdG9tIGNoaWxkIHFkaXNjcyBjYW4gaGFuZyBvZmZcXG4rICAgICAgICAjIGFuIHVuYWRkcmVzc2FibGUgcGFyZW50IC0gc28gaW5zdGFsbGluZyBhIHJlYWwgaGFuZGxlIGFuZCByZXN0b3JpbmdcXG4rICAgICAgICAjIHRoZSBkZWZhdWx0IG1xIG9uIGV4aXQgcHJlc2VydmVzIHRoZSBkZXZpY2UncyBlZmZlY3RpdmUgcG9saWN5LlxcbisgICAgICAgIG1xX2hhbmRsZSA9IFxcXCIxOlxcXCJcXG4rICAgICAgICB0YyhmXFxcInFkaXNjIHJlcGxhY2UgZGV2IHtjZmcuaWZuYW1lfSByb290IGhhbmRsZSB7bXFfaGFuZGxlfSBtcVxcXCIpXFxuKyAgICAgICAgZGVmZXIodGMsIGZcXFwicWRpc2MgcmVwbGFjZSBkZXYge2NmZy5pZm5hbWV9IHJvb3QgbXFcXFwiKVxcbisgICAgICAgIHBhcmVudCA9IGZcXFwie21xX2hhbmRsZX17dGFyZ2V0X3F1ZXVlICsgMTp4fVxcXCJcXG4rICAgIGVsc2U6XFxuKyAgICAgICAgcmFpc2UgS3NmdFNraXBFeChmXFxcInJvb3QgcWRpc2MgJ3tyb290WydraW5kJ119JyBpcyBub3QgbXE7IFxcXCJcXG4rICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJyZWZ1c2luZyB0byBkaXN0dXJiIGV4aXN0aW5nIHFkaXNjIHBvbGljeVxcXCIpXFxuK1xcbisgICAgdHJ5OlxcbisgICAgICAgIHRjKGZcXFwicWRpc2MgcmVwbGFjZSBkZXYge2NmZy5pZm5hbWV9IHBhcmVudCB7cGFyZW50fSBmcVxcXCIpXFxuKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzpcXG4rICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFxcbisgICAgICAgICAgICBmXFxcImZxIG5vdCBhdmFpbGFibGUgKENPTkZJR19ORVRfU0NIX0ZRKToge2V4Y31cXFwiKSBmcm9tIGV4Y1xcbitcXG4rICAgIHFkaXNjX2ogPSB0YyhmXFxcInFkaXNjIHNob3cgZGV2IHtjZmcuaWZuYW1lfVxcXCIsIGpzb249VHJ1ZSlcXG4rICAgIGhhc19jbHNhY3QgPSBhbnkocVsna2luZCddID09ICdjbHNhY3QnIGZvciBxIGluIHFkaXNjX2opXFxuKyAgICBpZiBub3QgaGFzX2Nsc2FjdDpcXG4rICAgICAgICB0YyhmXFxcInFkaXNjIGFkZCBkZXYge2NmZy5pZm5hbWV9IGNsc2FjdFxcXCIpXFxuKyAgICAgICAgZGVmZXIodGMsIGZcXFwicWRpc2MgZGVsIGRldiB7Y2ZnLmlmbmFtZX0gY2xzYWN0XFxcIilcXG4rXFxuKyAgICBwcm90byA9IFxcXCJpcHY2XFxcIiBpZiBpbnQoY2ZnLmFkZHJfaXB2ZXIpID09IDYgZWxzZSBcXFwiaXBcXFwiXFxuKyAgICB0cnk6XFxuKyAgICAgICAgdGMoZlxcXCJmaWx0ZXIgYWRkIGRldiB7Y2ZnLmlmbmFtZX0gZWdyZXNzIHByb3RvY29sIHtwcm90b30gXFxcIlxcbisgICAgICAgICAgIGZcXFwicHJlZiAxIGZsb3dlciBpcF9wcm90byB1ZHAgZHN0X3BvcnQge3BvcnR9IFxcXCJcXG4rICAgICAgICAgICBmXFxcImFjdGlvbiBza2JlZGl0IHF1ZXVlX21hcHBpbmcge3RhcmdldF9xdWV1ZX1cXFwiKVxcbisgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6XFxuKyAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcXFwidGMgZmxvd2VyL2FjdF9za2JlZGl0IG5vdCBhdmFpbGFibGVcXFwiKSBmcm9tIGV4Y1xcbisgICAgZGVmZXIodGMsIGZcXFwiZmlsdGVyIGRlbCBkZXYge2NmZy5pZm5hbWV9IGVncmVzcyBwcmVmIDFcXFwiKVxcbitcXG4rICAgIHRjKGZcXFwiZmlsdGVyIGFkZCBkZXYge2NmZy5pZm5hbWV9IGVncmVzcyBwcmVmIDEwMCBcXFwiXFxuKyAgICAgICBmXFxcIm1hdGNoYWxsIGFjdGlvbiBza2JlZGl0IHF1ZXVlX21hcHBpbmcge290aGVyX3F1ZXVlfVxcXCIpXFxuKyAgICBkZWZlcih0YywgZlxcXCJmaWx0ZXIgZGVsIGRldiB7Y2ZnLmlmbmFtZX0gZWdyZXNzIHByZWYgMTAwXFxcIilcXG4rXFxuKyAgICByZXR1cm4gbXFfaGFuZGxlXFxuK1xcbitcXG4rZGVmIF9jcmVhdGVfc290eHRpbWVfc29ja2V0KGNmZyk6XFxuKyAgICBcXFwiXFxcIlxcXCJDcmVhdGUgYSBVRFAgc29ja2V0IHdpdGggU09fVFhUSU1FIGVuYWJsZWQsIGJvdW5kIHRvIHRoZSB0ZXN0IGRldmljZS5cXFwiXFxcIlxcXCJcXG4rICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNiBpZiBjZmcuYWRkcl9pcHZlciA9PSBcXFwiNlxcXCJcXG4rICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ugc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX0RHUkFNKVxcbisgICAgdHJ5OlxcbisgICAgICAgIHNvY2suc2V0c29ja29wdChzb2NrZXQuU09MX1NPQ0tFVCwgU09fVFhUSU1FLCBzdHJ1Y3QucGFjayhcXFwiSWlcXFwiLCAxLCAwKSlcXG4rICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzpcXG4rICAgICAgICBzb2NrLmNsb3NlKClcXG4rICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFxcXCJTT19UWFRJTUUgbm90IHN1cHBvcnRlZFxcXCIpIGZyb20gZXhjXFxuKyAgICBzb2NrLnNldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19CSU5EVE9ERVZJQ0UsXFxuKyAgICAgICAgICAgICAgICAgICAgY2ZnLmlmbmFtZS5lbmNvZGUoKSlcXG4rICAgIHJldHVybiBzb2NrXFxuK1xcbitcXG4rZGVmIF9zZW5kX3NvdHh0aW1lX2J1cnN0KGNmZywgc29jaywgcG9ydCwgY291bnQsIGRlbGF5X25zKTpcXG4rICAgIFxcXCJcXFwiXFxcIlNlbmQgY291bnQgVURQIHBhY2tldHMgc2NoZWR1bGVkIGRlbGF5X25zIGFoZWFkIHVzaW5nIFNPX1RYVElNRS5cXFwiXFxcIlxcXCJcXG4rICAgIHBheWxvYWQgPSBiJ1xcXFx4MDAnICogMTQwMFxcbisgICAgdHh0aW1lX25zID0gdGltZS5jbG9ja19nZXR0aW1lX25zKHRpbWUuQ0xPQ0tfTU9OT1RPTklDKSArIGRlbGF5X25zXFxuK1xcbisgICAgYW5jZGF0YSA9IFsoc29ja2V0LlNPTF9TT0NLRVQsIFNPX1RYVElNRSwgc3RydWN0LnBhY2soXFxcIlFcXFwiLCB0eHRpbWVfbnMpKV1cXG4rICAgIGlmIGludChjZmcuYWRkcl9pcHZlcikgPT0gNjpcXG4rICAgICAgICBkZXN0ID0gKGNmZy5yZW1vdGVfYWRkciwgcG9ydCwgMCwgMClcXG4rICAgIGVsc2U6XFxuKyAgICAgICAgZGVzdCA9IChjZmcucmVtb3RlX2FkZHIsIHBvcnQpXFxuKyAgICBmb3IgXyBpbiByYW5nZShjb3VudCk6XFxuKyAgICAgICAgc29jay5zZW5kbXNnKFtwYXlsb2FkXSwgYW5jZGF0YSwgMCwgZGVzdClcXG4rXFxuK1xcbitkZWYgcmVjb25maWdfdHhfc3RhbGwoY2ZnKSAtXFx1MDAzZSBOb25lOlxcbisgICAgXFxcIlxcXCJcXFwiVGVzdCB0aGF0IHFkaXNjIGJhY2tsb2cgZHJhaW5zIGFmdGVyIHJpbmcgcmVjb25maWd1cmF0aW9uLlxcXCJcXFwiXFxcIlxcbisgICAgdGFyZ2V0X3F1ZXVlID0gMVxcbisgICAgb3RoZXJfcXVldWUgPSAwXFxuK1xcbisgICAgZWhkciA9IHsnaGVhZGVyJzogeydkZXYtaW5kZXgnOiBjZmcuaWZpbmRleH19XFxuKyAgICBjaGFucyA9IGNmZy5ldGguY2hhbm5lbHNfZ2V0KGVoZHIpXFxuK1xcbisgICAgaWYgXFxcImNvbWJpbmVkLW1heFxcXCIgbm90IGluIGNoYW5zOlxcbisgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXFxcImRldmljZSBkb2VzIG5vdCBzdXBwb3J0IGNvbWJpbmVkIGNoYW5uZWxzXFxcIilcXG4rICAgIGlmIGNoYW5zLmdldChcXFwiY29tYmluZWQtbWF4XFxcIiwgMCkgXFx1MDAzYyAyOlxcbisgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXFxcImRldmljZSBkb2VzIG5vdCBzdXBwb3J0IDIrIGNvbWJpbmVkIGNoYW5uZWxzXFxcIilcXG4rICAgIGlmIGNoYW5zW1xcXCJjb21iaW5lZC1jb3VudFxcXCJdIFxcdTAwM2MgMjpcXG4rICAgICAgICBkZWZlcihjZmcuZXRoLmNoYW5uZWxzX3NldCxcXG4rICAgICAgICAgICAgICBlaGRyIHwge1xcXCJjb21iaW5lZC1jb3VudFxcXCI6IGNoYW5zW1xcXCJjb21iaW5lZC1jb3VudFxcXCJdfSlcXG4rICAgICAgICBjZmcuZXRoLmNoYW5uZWxzX3NldChlaGRyIHwge1xcXCJjb21iaW5lZC1jb3VudFxcXCI6IDJ9KVxcbitcXG4rICAgIHJpbmdzID0gY2ZnLmV0aC5yaW5nc19nZXQoZWhkcilcXG4rICAgIGlmICdyeCcgbm90IGluIHJpbmdzIG9yICd0eCcgbm90IGluIHJpbmdzOlxcbisgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXFxcImRldmljZSBkb2VzIG5vdCBleHBvc2UgcngvdHggcmluZyBwYXJhbXNcXFwiKVxcbisgICAgdHhfY3VyID0gcmluZ3NbJ3R4J11cXG4rICAgIGlmIHR4X2N1ciBcXHUwMDNjPSBNSU5fVFhfUklORzpcXG4rICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFxcXCJ0eCByaW5nIHNpemUgYWxyZWFkeSBhdCBtaW5pbXVtXFxcIilcXG4rICAgIGRlZmVyKGNmZy5ldGgucmluZ3Nfc2V0LCBlaGRyIHwgeyd0eCc6IHR4X2N1cn0pXFxuK1xcbisgICAgY2ZnLmV0aC5yaW5nc19zZXQoZWhkciB8IHsndHgnOiBNSU5fVFhfUklOR30pXFxuK1xcbisgICAgIyBTbG93IGNvbXBsZXRpb25zIHNvIHRoZSByaW5nIHN0YXlzIGZ1bGwgYWZ0ZXIgRlEgcmVsZWFzZXMgcGFja2V0c1xcbisgICAgbmFwaV9kZWZlciA9IGZcXFwiL3N5cy9jbGFzcy9uZXQve2NmZy5pZm5hbWV9L25hcGlfZGVmZXJfaGFyZF9pcnFzXFxcIlxcbisgICAgZ3JvX3RpbWVvdXQgPSBmXFxcIi9zeXMvY2xhc3MvbmV0L3tjZmcuaWZuYW1lfS9ncm9fZmx1c2hfdGltZW91dFxcXCJcXG4rICAgIF93cml0ZV9zeXNmcyhuYXBpX2RlZmVyLCAxMDApXFxuKyAgICBfd3JpdGVfc3lzZnMoZ3JvX3RpbWVvdXQsIDEwMDAwMDAwMDApXFxuK1xcbisgICAgcG9ydCA9IHJhbmRfcG9ydCgpXFxuKyAgICBtcV9oYW5kbGUgPSBfc2V0dXBfZnFfcWRpc2MoY2ZnLCBwb3J0LCB0YXJnZXRfcXVldWUsIG90aGVyX3F1ZXVlKVxcbitcXG4rICAgIHNvY2sgPSBfY3JlYXRlX3NvdHh0aW1lX3NvY2tldChjZmcpXFxuKyAgICBkZWZlcihzb2NrLmNsb3NlKVxcbitcXG4rICAgIHBrdF9jb3VudCA9IE1JTl9UWF9SSU5HICogMlxcbitcXG4rICAgIGZvciBkZWxheV9tcyBpbiBbMTAwLCAyMDAsIDUwMF06XFxuKyAgICAgICAgX3NlbmRfc290eHRpbWVfYnVyc3QoY2ZnLCBzb2NrLCBwb3J0LCBwa3RfY291bnQsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXlfbXMgKiAxXzAwMF8wMDApXFxuKyAgICAgICAga3NmdF9wcihmXFxcIlNlbnQge3BrdF9jb3VudH0gU09fVFhUSU1FIHBhY2tldHMgKCt7ZGVsYXlfbXN9bXMpXFxcIilcXG4rICAgICAgICB0aW1lLnNsZWVwKGRlbGF5X21zIC8gMTAwMCArIDAuMylcXG4rXFxuKyAgICAgICAgYmFja2xvZyA9IF9nZXRfcWRpc2NfYmFja2xvZyhjZmcsIG1xX2hhbmRsZSwgdGFyZ2V0X3F1ZXVlKVxcbisgICAgICAgIGlmIGJhY2tsb2c6XFxuKyAgICAgICAgICAgIGJyZWFrXFxuKyAgICBlbHNlOlxcbisgICAgICAgIHJhaXNlIEtzZnRGYWlsRXgoXFxcImZhaWxlZCB0byBidWlsZCBxZGlzYyBiYWNrbG9nXFxcIilcXG4rXFxuKyAgICBrc2Z0X3ByKGZcXFwiQmFja2xvZyBiZWZvcmUgcmVjb25maWc6IHtiYWNrbG9nfSBieXRlc1xcXCIpXFxuK1xcbisgICAgIyBUcmlnZ2VyIHJpbmcgcmVjb25maWcg4oCUIGRyaXZlciBzaG91bGQgY2FsbCB3YWtlLCBub3QganVzdCBzdGFydFxcbisgICAgY2ZnLmV0aC5yaW5nc19zZXQoZWhkciB8IHsndHgnOiB0eF9jdXJ9KVxcbitcXG4rICAgICMgTGV0IGNvbXBsZXRpb25zIHByb2NlZWQgbm9ybWFsbHlcXG4rICAgIF93cml0ZV9zeXNmcyhuYXBpX2RlZmVyLCAwKVxcbisgICAgX3dyaXRlX3N5c2ZzKGdyb190aW1lb3V0LCAwKVxcbitcXG4rICAgICMgUG9sbCBmb3IgYmFja2xvZyB0byBkcmFpblxcbisgICAgZm9yIF8gaW4gcmFuZ2UoMTAwKTpcXG4rICAgICAgICBiYWNrbG9nID0gX2dldF9xZGlzY19iYWNrbG9nKGNmZywgbXFfaGFuZGxlLCB0YXJnZXRfcXVldWUpXFxuKyAgICAgICAgaWYgbm90IGJhY2tsb2c6XFxuKyAgICAgICAgICAgIGJyZWFrXFxuKyAgICAgICAgdGltZS5zbGVlcCgwLjEpXFxuK1xcbisgICAga3NmdF9lcSgwLCBiYWNrbG9nLFxcbisgICAgICAgICAgICBjb21tZW50PWZcXFwicWRpc2MgYmFja2xvZyBzdHVjayBvbiBxdWV1ZSB7dGFyZ2V0X3F1ZXVlfSBcXFwiXFxuKyAgICAgICAgICAgICAgICAgICAgZlxcXCJhZnRlciByaW5nIHJlY29uZmlnXFxcIilcXG4rXFxuK1xcbiBkZWYgbWFpbigpIC1cXHUwMDNlIE5vbmU6XFxuICAgICBcXFwiXFxcIlxcXCIgS3NmdCBib2lsZXIgcGxhdGUgbWFpbiBcXFwiXFxcIlxcXCJcXG4gXFxuLSAgICB3aXRoIE5ldERydkVwRW52KF9fZmlsZV9fKSBhcyBjZmc6XFxuKyAgICB3aXRoIE5ldERydkVwRW52KF9fZmlsZV9fLCBxdWV1ZV9jb3VudD0yKSBhcyBjZmc6XFxuICAgICAgICAgY2ZnLmV0aCA9IEV0aHRvb2xGYW1pbHkoKVxcbiBcXG4gICAgICAgICBrc2Z0X3J1bihbY2hhbm5lbHMsXFxuLSAgICAgICAgICAgICAgICAgIHJpbmdwYXJhbV0sXFxuKyAgICAgICAgICAgICAgICAgIHJpbmdwYXJhbSxcXG4rICAgICAgICAgICAgICAgICAgcmVjb25maWdfdHhfc3RhbGxdLFxcbiAgICAgICAgICAgICAgICAgIGFyZ3M9KGNmZywgKSlcXG4gICAgIGtzZnRfZXhpdCgpXFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNDoxNToyNi42NDEyNTE0MzJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5MTczOTY3MTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSB0ZXN0IHNjcmlwdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTllNmIwNzBiNjZhNzRkYWEzZDRiNGMxYTgwMWY3YmNlMzM3YTY5OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDI1IDA0OjE1OjIzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnXG5pbmRleCAyMDcwZTg5MGUwNjRlNS4uZjM5MzNjZjNlNmJlNjEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9jb25maWdcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZ1xuQEAgLTQsOCArNCwxMSBAQCBDT05GSUdfREVCVUdfSU5GT19CVEZfTU9EVUxFUz1uXG4gQ09ORklHX0lORVRfUFNQPXlcbiBDT05GSUdfSVBWNj15XG4gQ09ORklHX01BQ1NFQz1tXG4rQ09ORklHX05FVF9BQ1RfU0tCRURJVD1tXG4gQ09ORklHX05FVF9DTFNfQUNUPXlcbiBDT05GSUdfTkVUX0NMU19CUEY9eVxuK0NPTkZJR19ORVRfQ0xTX0ZMT1dFUj1tXG4rQ09ORklHX05FVF9DTFNfTUFUQ0hBTEw9bVxuIENPTkZJR19ORVRDT05TT0xFPW1cbiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDPXlcbiBDT05GSUdfTkVUQ09OU09MRV9FWFRFTkRFRF9MT0c9eVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2xpYi9weS9lbnYucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9saWIvcHkvZW52LnB5XG5pbmRleCBlNGFjZjNkODMzM2ZkMC4uYjFjNmY2Y2VmN2RkMjUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9saWIvcHkvZW52LnB5XG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9saWIvcHkvZW52LnB5XG5AQCAtMTE0LDEwICsxMTQsMTEgQEAgY2xhc3MgTmV0RHJ2RXBFbnYoTmV0RHJ2RW52QmFzZSk6XG4gICAgIG5zaW1fdjRfcGZ4ID0gXCIxOTIuMC4yLlwiXG4gICAgIG5zaW1fdjZfcGZ4ID0gXCIyMDAxOmRiODo6XCJcbiBcbi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHNyY19wYXRoLCBuc2ltX3Rlc3Q9Tm9uZSk6XG4rICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzcmNfcGF0aCwgbnNpbV90ZXN0PU5vbmUsIHF1ZXVlX2NvdW50PU5vbmUpOlxuICAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhzcmNfcGF0aClcbiBcbiAgICAgICAgIHNlbGYuX3N0YXRzX3NldHRsZV90aW1lID0gTm9uZVxuKyAgICAgICAgc2VsZi5fcXVldWVfY291bnQgPSBxdWV1ZV9jb3VudFxuIFxuICAgICAgICAgIyBUaGluZ3Mgd2UgdHJ5IHRvIGRlc3Ryb3lcbiAgICAgICAgIHNlbGYucmVtb3RlID0gTm9uZVxuQEAgLTE3Myw5ICsxNzQsMTMgQEAgY2xhc3MgTmV0RHJ2RXBFbnYoTmV0RHJ2RW52QmFzZSk6XG4gICAgICAgICBzZWxmLl9yZXF1aXJlZF9jbWQgPSB7fVxuIFxuICAgICBkZWYgY3JlYXRlX2xvY2FsKHNlbGYpOlxuKyAgICAgICAgbnNpbV9rd2FyZ3MgPSB7fVxuKyAgICAgICAgaWYgc2VsZi5fcXVldWVfY291bnQ6XG4rICAgICAgICAgICAgbnNpbV9rd2FyZ3NbXCJxdWV1ZV9jb3VudFwiXSA9IHNlbGYuX3F1ZXVlX2NvdW50XG4rXG4gICAgICAgICBzZWxmLl9uZXRucyA9IE5ldE5TKClcbi0gICAgICAgIHNlbGYuX25zID0gTmV0ZGV2U2ltRGV2KClcbi0gICAgICAgIHNlbGYuX25zX3BlZXIgPSBOZXRkZXZTaW1EZXYobnM9c2VsZi5fbmV0bnMpXG4rICAgICAgICBzZWxmLl9ucyA9IE5ldGRldlNpbURldigqKm5zaW1fa3dhcmdzKVxuKyAgICAgICAgc2VsZi5fbnNfcGVlciA9IE5ldGRldlNpbURldihucz1zZWxmLl9uZXRucywgKipuc2ltX2t3YXJncylcbiBcbiAgICAgICAgIHdpdGggb3BlbihcIi9wcm9jL3NlbGYvbnMvbmV0XCIpIGFzIG5zZmQwLCBcXFxuICAgICAgICAgICAgICBvcGVuKFwiL3Zhci9ydW4vbmV0bnMvXCIgKyBzZWxmLl9uZXRucy5uYW1lKSBhcyBuc2ZkMTpcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9yaW5nX3JlY29uZmlnLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcmluZ19yZWNvbmZpZy5weVxuaW5kZXggZjk1MzBhOGIwODU2N2YuLmE1YTJkZWZjNGZiMTNjIDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcmluZ19yZWNvbmZpZy5weVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcmluZ19yZWNvbmZpZy5weVxuQEAgLTUsMTAgKzUsMjEgQEBcbiBUZXN0IGNoYW5uZWwgYW5kIHJpbmcgc2l6ZSBjb25maWd1cmF0aW9uIHZpYSBldGh0b29sICgtTCAvIC1HKS5cbiBcIlwiXCJcbiBcbitpbXBvcnQgc29ja2V0XG4raW1wb3J0IHN0cnVjdFxuK2ltcG9ydCB0aW1lXG4rXG4gZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfcnVuLCBrc2Z0X2V4aXQsIGtzZnRfcHJcbiBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9lcVxuK2Zyb20gbGliLnB5IGltcG9ydCBLc2Z0U2tpcEV4LCBLc2Z0RmFpbEV4XG4gZnJvbSBsaWIucHkgaW1wb3J0IE5ldERydkVwRW52LCBFdGh0b29sRmFtaWx5LCBHZW5lcmF0ZVRyYWZmaWNcbi1mcm9tIGxpYi5weSBpbXBvcnQgZGVmZXIsIE5sRXJyb3Jcbitmcm9tIGxpYi5weSBpbXBvcnQgY21kLCBkZWZlciwgcmFuZF9wb3J0LCB0YywgTmxFcnJvclxuK1xuKyMgQWRkZWQgaW4gUHl0aG9uIDMuMTM7IGZhbGxiYWNrIHRvIDYxIGZvciB4ODYvQVJNL01JUFNcbitTT19UWFRJTUUgPSBnZXRhdHRyKHNvY2tldCwgXCJTT19UWFRJTUVcIiwgNjEpXG4rXG4rIyBUWCByaW5nIHNpemUgdGhlIHRlc3Qgc2hyaW5rcyB0byBzbyB0aGUgcmluZyBmaWxscyBxdWlja2x5LlxuK01JTl9UWF9SSU5HID0gNjRcbiBcbiBcbiBkZWYgY2hhbm5lbHMoY2ZnKSAtXHUwMDNlIE5vbmU6XG5AQCAtMTUxLDE0ICsxNjIsMjA0IEBAIGRlZiByaW5ncGFyYW0oY2ZnKSAtXHUwMDNlIE5vbmU6XG4gICAgICAgICBHZW5lcmF0ZVRyYWZmaWMoY2ZnKS53YWl0X3BrdHNfYW5kX3N0b3AoMTAwMDApXG4gXG4gXG4rZGVmIF93cml0ZV9maWxlKHBhdGgsIHZhbCk6XG4rICAgIFwiXCJcIldyaXRlIHZhbCB0byBhIGZpbGUuXCJcIlwiXG4rICAgIHdpdGggb3BlbihwYXRoLCBcIndcIiwgZW5jb2Rpbmc9XCJ1dGYtOFwiKSBhcyBmcDpcbisgICAgICAgIGZwLndyaXRlKHN0cih2YWwpKVxuK1xuK1xuK2RlZiBfd3JpdGVfc3lzZnMocGF0aCwgdmFsKTpcbisgICAgXCJcIlwiV3JpdGUgdmFsIHRvIGEgc3lzZnMgZmlsZSwgcmVzdG9yaW5nIHRoZSBvcmlnaW5hbCB2YWx1ZSBvbiBleGl0LlwiXCJcIlxuKyAgICB3aXRoIG9wZW4ocGF0aCwgXCJyXCIsIGVuY29kaW5nPVwidXRmLThcIikgYXMgZnA6XG4rICAgICAgICBvcmlnX3ZhbCA9IGZwLnJlYWQoKS5zdHJpcCgpXG4rICAgIGlmIHN0cih2YWwpID09IG9yaWdfdmFsOlxuKyAgICAgICAgcmV0dXJuXG4rICAgIF93cml0ZV9maWxlKHBhdGgsIHZhbClcbisgICAgZGVmZXIoX3dyaXRlX2ZpbGUsIHBhdGgsIG9yaWdfdmFsKVxuK1xuK1xuK2RlZiBfZ2V0X3FkaXNjX2JhY2tsb2coY2ZnLCBtcV9oYW5kbGUsIHF1ZXVlKTpcbisgICAgXCJcIlwiUmV0dXJuIHRoZSBxZGlzYyBiYWNrbG9nIChieXRlcykgZm9yIHRoZSBnaXZlbiBUWCBxdWV1ZSdzIGxlYWYuXCJcIlwiXG4rICAgIHRhcmdldF9wYXJlbnQgPSBmXCJ7bXFfaGFuZGxlfXtxdWV1ZSArIDE6eH1cIlxuKyAgICBmb3IgcSBpbiB0YyhmXCItcyBxZGlzYyBzaG93IGRldiB7Y2ZnLmlmbmFtZX1cIiwganNvbj1UcnVlKTpcbisgICAgICAgIGlmIHEuZ2V0KFwicGFyZW50XCIsIFwiXCIpID09IHRhcmdldF9wYXJlbnQ6XG4rICAgICAgICAgICAgcmV0dXJuIHEuZ2V0KFwiYmFja2xvZ1wiKSBvciAwXG4rICAgIHJldHVybiAwXG4rXG4rXG4rZGVmIF9zZXR1cF9mcV9xZGlzYyhjZmcsIHBvcnQsIHRhcmdldF9xdWV1ZSwgb3RoZXJfcXVldWUpOlxuKyAgICBcIlwiXCJQdXQgYW4gZnEgcWRpc2Mgb24gdGFyZ2V0X3F1ZXVlJ3MgbGVhZiBhbmQgcmV0dXJuIHRoZSBtcSBoYW5kbGUgaW4gdXNlLlxuK1xuKyAgICBXZSBtdXN0IG5vdCBkaXN0dXJiIHRoZSBkZXZpY2UncyBleGlzdGluZyBUWC9SWCBxZGlzYyBwb2xpY3kuIE9uIGEgcmVhbFxuKyAgICBOSUMgdGhlIHJvb3QgbXEgYWxyZWFkeSBoYXMgYW4gYWRkcmVzc2FibGUgaGFuZGxlLCBzbyB3ZSBsZWF2ZSB0aGUgcm9vdFxuKyAgICBhbmQgZXZlcnkgb3RoZXIgcXVldWUgYWxvbmUgYW5kIG9ubHkgc3dhcCB0aGlzIG9uZSBsZWFmLCByZXN0b3JpbmcgaXRzXG4rICAgIG9yaWdpbmFsIHFkaXNjIGFmdGVyd2FyZHMuXG4rICAgIFwiXCJcIlxuKyAgICBxZGlzY3MgPSB0YyhmXCJxZGlzYyBzaG93IGRldiB7Y2ZnLmlmbmFtZX1cIiwganNvbj1UcnVlKVxuKyAgICByb290ID0gbmV4dCgocSBmb3IgcSBpbiBxZGlzY3MgaWYgcS5nZXQoXCJyb290XCIpKSwgTm9uZSlcbitcbisgICAgaWYgcm9vdCBhbmQgcm9vdFtcImtpbmRcIl0gPT0gXCJtcVwiIGFuZCByb290W1wiaGFuZGxlXCJdICE9IFwiMDpcIjpcbisgICAgICAgICMgQWRkcmVzc2FibGUgbXEgKHByZXZpb3VzbHktY29uZmlndXJlZCk6IHRvdWNoIG9ubHkgdGhlIHRhcmdldCBxdWV1ZSdzXG4rICAgICAgICAjIGxlYWYgYW5kIHJlc3RvcmUgaXRzIG9yaWdpbmFsIHFkaXNjIGFmdGVyd2FyZHMuXG4rICAgICAgICBtcV9oYW5kbGUgPSByb290W1wiaGFuZGxlXCJdXG4rICAgICAgICBwYXJlbnQgPSBmXCJ7bXFfaGFuZGxlfXt0YXJnZXRfcXVldWUgKyAxOnh9XCJcbisgICAgICAgIG9yaWcgPSBuZXh0KChxIGZvciBxIGluIHFkaXNjcyBpZiBxLmdldChcInBhcmVudFwiKSA9PSBwYXJlbnQpLCBOb25lKVxuKyAgICAgICAgb3JpZ19raW5kID0gb3JpZ1tcImtpbmRcIl0gaWYgb3JpZyBlbHNlIFxcXG4rICAgICAgICAgICAgY21kKFwic3lzY3RsIC1uIG5ldC5jb3JlLmRlZmF1bHRfcWRpc2NcIikuc3Rkb3V0LnN0cmlwKClcbisgICAgICAgIGRlZmVyKHRjLCBmXCJxZGlzYyByZXBsYWNlIGRldiB7Y2ZnLmlmbmFtZX0gcGFyZW50IHtwYXJlbnR9IHtvcmlnX2tpbmR9XCIpXG4rICAgIGVsaWYgcm9vdCBpcyBOb25lIG9yIHJvb3RbXCJraW5kXCJdIGluIChcIm1xXCIsIFwibm9xdWV1ZVwiKTpcbisgICAgICAgICMgVGhlIGF1dG8tYXR0YWNoZWQgcm9vdCBtcSBoYXMgaGFuZGxlIDA6IG9uIGFueSBkZXZpY2UgKHJlYWwgb3Igc2ltKSxcbisgICAgICAgICMgd2hpY2ggdGhlIGtlcm5lbCByZWplY3RzIGFzIGEgcWRpc2MgcGFyZW50LiBBIDA6IGhhbmRsZSBtZWFucyB0aGUgbXFcbisgICAgICAgICMgaXMgdGhlIHVudG91Y2hlZCBrZXJuZWwgZGVmYXVsdCAtIG5vIGN1c3RvbSBjaGlsZCBxZGlzY3MgY2FuIGhhbmcgb2ZmXG4rICAgICAgICAjIGFuIHVuYWRkcmVzc2FibGUgcGFyZW50IC0gc28gaW5zdGFsbGluZyBhIHJlYWwgaGFuZGxlIGFuZCByZXN0b3JpbmdcbisgICAgICAgICMgdGhlIGRlZmF1bHQgbXEgb24gZXhpdCBwcmVzZXJ2ZXMgdGhlIGRldmljZSdzIGVmZmVjdGl2ZSBwb2xpY3kuXG4rICAgICAgICBtcV9oYW5kbGUgPSBcIjE6XCJcbisgICAgICAgIHRjKGZcInFkaXNjIHJlcGxhY2UgZGV2IHtjZmcuaWZuYW1lfSByb290IGhhbmRsZSB7bXFfaGFuZGxlfSBtcVwiKVxuKyAgICAgICAgZGVmZXIodGMsIGZcInFkaXNjIHJlcGxhY2UgZGV2IHtjZmcuaWZuYW1lfSByb290IG1xXCIpXG4rICAgICAgICBwYXJlbnQgPSBmXCJ7bXFfaGFuZGxlfXt0YXJnZXRfcXVldWUgKyAxOnh9XCJcbisgICAgZWxzZTpcbisgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoZlwicm9vdCBxZGlzYyAne3Jvb3RbJ2tpbmQnXX0nIGlzIG5vdCBtcTsgXCJcbisgICAgICAgICAgICAgICAgICAgICAgICAgXCJyZWZ1c2luZyB0byBkaXN0dXJiIGV4aXN0aW5nIHFkaXNjIHBvbGljeVwiKVxuK1xuKyAgICB0cnk6XG4rICAgICAgICB0YyhmXCJxZGlzYyByZXBsYWNlIGRldiB7Y2ZnLmlmbmFtZX0gcGFyZW50IHtwYXJlbnR9IGZxXCIpXG4rICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOlxuKyAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcbisgICAgICAgICAgICBmXCJmcSBub3QgYXZhaWxhYmxlIChDT05GSUdfTkVUX1NDSF9GUSk6IHtleGN9XCIpIGZyb20gZXhjXG4rXG4rICAgIHFkaXNjX2ogPSB0YyhmXCJxZGlzYyBzaG93IGRldiB7Y2ZnLmlmbmFtZX1cIiwganNvbj1UcnVlKVxuKyAgICBoYXNfY2xzYWN0ID0gYW55KHFbJ2tpbmQnXSA9PSAnY2xzYWN0JyBmb3IgcSBpbiBxZGlzY19qKVxuKyAgICBpZiBub3QgaGFzX2Nsc2FjdDpcbisgICAgICAgIHRjKGZcInFkaXNjIGFkZCBkZXYge2NmZy5pZm5hbWV9IGNsc2FjdFwiKVxuKyAgICAgICAgZGVmZXIodGMsIGZcInFkaXNjIGRlbCBkZXYge2NmZy5pZm5hbWV9IGNsc2FjdFwiKVxuK1xuKyAgICBwcm90byA9IFwiaXB2NlwiIGlmIGludChjZmcuYWRkcl9pcHZlcikgPT0gNiBlbHNlIFwiaXBcIlxuKyAgICB0cnk6XG4rICAgICAgICB0YyhmXCJmaWx0ZXIgYWRkIGRldiB7Y2ZnLmlmbmFtZX0gZWdyZXNzIHByb3RvY29sIHtwcm90b30gXCJcbisgICAgICAgICAgIGZcInByZWYgMSBmbG93ZXIgaXBfcHJvdG8gdWRwIGRzdF9wb3J0IHtwb3J0fSBcIlxuKyAgICAgICAgICAgZlwiYWN0aW9uIHNrYmVkaXQgcXVldWVfbWFwcGluZyB7dGFyZ2V0X3F1ZXVlfVwiKVxuKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzpcbisgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXCJ0YyBmbG93ZXIvYWN0X3NrYmVkaXQgbm90IGF2YWlsYWJsZVwiKSBmcm9tIGV4Y1xuKyAgICBkZWZlcih0YywgZlwiZmlsdGVyIGRlbCBkZXYge2NmZy5pZm5hbWV9IGVncmVzcyBwcmVmIDFcIilcbitcbisgICAgdGMoZlwiZmlsdGVyIGFkZCBkZXYge2NmZy5pZm5hbWV9IGVncmVzcyBwcmVmIDEwMCBcIlxuKyAgICAgICBmXCJtYXRjaGFsbCBhY3Rpb24gc2tiZWRpdCBxdWV1ZV9tYXBwaW5nIHtvdGhlcl9xdWV1ZX1cIilcbisgICAgZGVmZXIodGMsIGZcImZpbHRlciBkZWwgZGV2IHtjZmcuaWZuYW1lfSBlZ3Jlc3MgcHJlZiAxMDBcIilcbitcbisgICAgcmV0dXJuIG1xX2hhbmRsZVxuK1xuK1xuK2RlZiBfY3JlYXRlX3NvdHh0aW1lX3NvY2tldChjZmcpOlxuKyAgICBcIlwiXCJDcmVhdGUgYSBVRFAgc29ja2V0IHdpdGggU09fVFhUSU1FIGVuYWJsZWQsIGJvdW5kIHRvIHRoZSB0ZXN0IGRldmljZS5cIlwiXCJcbisgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQ2IGlmIGNmZy5hZGRyX2lwdmVyID09IFwiNlwiXG4rICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ugc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX0RHUkFNKVxuKyAgICB0cnk6XG4rICAgICAgICBzb2NrLnNldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsIFNPX1RYVElNRSwgc3RydWN0LnBhY2soXCJJaVwiLCAxLCAwKSlcbisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOlxuKyAgICAgICAgc29jay5jbG9zZSgpXG4rICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFwiU09fVFhUSU1FIG5vdCBzdXBwb3J0ZWRcIikgZnJvbSBleGNcbisgICAgc29jay5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU09fQklORFRPREVWSUNFLFxuKyAgICAgICAgICAgICAgICAgICAgY2ZnLmlmbmFtZS5lbmNvZGUoKSlcbisgICAgcmV0dXJuIHNvY2tcbitcbitcbitkZWYgX3NlbmRfc290eHRpbWVfYnVyc3QoY2ZnLCBzb2NrLCBwb3J0LCBjb3VudCwgZGVsYXlfbnMpOlxuKyAgICBcIlwiXCJTZW5kIGNvdW50IFVEUCBwYWNrZXRzIHNjaGVkdWxlZCBkZWxheV9ucyBhaGVhZCB1c2luZyBTT19UWFRJTUUuXCJcIlwiXG4rICAgIHBheWxvYWQgPSBiJ1xceDAwJyAqIDE0MDBcbisgICAgdHh0aW1lX25zID0gdGltZS5jbG9ja19nZXR0aW1lX25zKHRpbWUuQ0xPQ0tfTU9OT1RPTklDKSArIGRlbGF5X25zXG4rXG4rICAgIGFuY2RhdGEgPSBbKHNvY2tldC5TT0xfU09DS0VULCBTT19UWFRJTUUsIHN0cnVjdC5wYWNrKFwiUVwiLCB0eHRpbWVfbnMpKV1cbisgICAgaWYgaW50KGNmZy5hZGRyX2lwdmVyKSA9PSA2OlxuKyAgICAgICAgZGVzdCA9IChjZmcucmVtb3RlX2FkZHIsIHBvcnQsIDAsIDApXG4rICAgIGVsc2U6XG4rICAgICAgICBkZXN0ID0gKGNmZy5yZW1vdGVfYWRkciwgcG9ydClcbisgICAgZm9yIF8gaW4gcmFuZ2UoY291bnQpOlxuKyAgICAgICAgc29jay5zZW5kbXNnKFtwYXlsb2FkXSwgYW5jZGF0YSwgMCwgZGVzdClcbitcbitcbitkZWYgcmVjb25maWdfdHhfc3RhbGwoY2ZnKSAtXHUwMDNlIE5vbmU6XG4rICAgIFwiXCJcIlRlc3QgdGhhdCBxZGlzYyBiYWNrbG9nIGRyYWlucyBhZnRlciByaW5nIHJlY29uZmlndXJhdGlvbi5cIlwiXCJcbisgICAgdGFyZ2V0X3F1ZXVlID0gMVxuKyAgICBvdGhlcl9xdWV1ZSA9IDBcbitcbisgICAgZWhkciA9IHsnaGVhZGVyJzogeydkZXYtaW5kZXgnOiBjZmcuaWZpbmRleH19XG4rICAgIGNoYW5zID0gY2ZnLmV0aC5jaGFubmVsc19nZXQoZWhkcilcbitcbisgICAgaWYgXCJjb21iaW5lZC1tYXhcIiBub3QgaW4gY2hhbnM6XG4rICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFwiZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgY29tYmluZWQgY2hhbm5lbHNcIilcbisgICAgaWYgY2hhbnMuZ2V0KFwiY29tYmluZWQtbWF4XCIsIDApIFx1MDAzYyAyOlxuKyAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcImRldmljZSBkb2VzIG5vdCBzdXBwb3J0IDIrIGNvbWJpbmVkIGNoYW5uZWxzXCIpXG4rICAgIGlmIGNoYW5zW1wiY29tYmluZWQtY291bnRcIl0gXHUwMDNjIDI6XG4rICAgICAgICBkZWZlcihjZmcuZXRoLmNoYW5uZWxzX3NldCxcbisgICAgICAgICAgICAgIGVoZHIgfCB7XCJjb21iaW5lZC1jb3VudFwiOiBjaGFuc1tcImNvbWJpbmVkLWNvdW50XCJdfSlcbisgICAgICAgIGNmZy5ldGguY2hhbm5lbHNfc2V0KGVoZHIgfCB7XCJjb21iaW5lZC1jb3VudFwiOiAyfSlcbitcbisgICAgcmluZ3MgPSBjZmcuZXRoLnJpbmdzX2dldChlaGRyKVxuKyAgICBpZiAncngnIG5vdCBpbiByaW5ncyBvciAndHgnIG5vdCBpbiByaW5nczpcbisgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXCJkZXZpY2UgZG9lcyBub3QgZXhwb3NlIHJ4L3R4IHJpbmcgcGFyYW1zXCIpXG4rICAgIHR4X2N1ciA9IHJpbmdzWyd0eCddXG4rICAgIGlmIHR4X2N1ciBcdTAwM2M9IE1JTl9UWF9SSU5HOlxuKyAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcInR4IHJpbmcgc2l6ZSBhbHJlYWR5IGF0IG1pbmltdW1cIilcbisgICAgZGVmZXIoY2ZnLmV0aC5yaW5nc19zZXQsIGVoZHIgfCB7J3R4JzogdHhfY3VyfSlcbitcbisgICAgY2ZnLmV0aC5yaW5nc19zZXQoZWhkciB8IHsndHgnOiBNSU5fVFhfUklOR30pXG4rXG4rICAgICMgU2xvdyBjb21wbGV0aW9ucyBzbyB0aGUgcmluZyBzdGF5cyBmdWxsIGFmdGVyIEZRIHJlbGVhc2VzIHBhY2tldHNcbisgICAgbmFwaV9kZWZlciA9IGZcIi9zeXMvY2xhc3MvbmV0L3tjZmcuaWZuYW1lfS9uYXBpX2RlZmVyX2hhcmRfaXJxc1wiXG4rICAgIGdyb190aW1lb3V0ID0gZlwiL3N5cy9jbGFzcy9uZXQve2NmZy5pZm5hbWV9L2dyb19mbHVzaF90aW1lb3V0XCJcbisgICAgX3dyaXRlX3N5c2ZzKG5hcGlfZGVmZXIsIDEwMClcbisgICAgX3dyaXRlX3N5c2ZzKGdyb190aW1lb3V0LCAxMDAwMDAwMDAwKVxuK1xuKyAgICBwb3J0ID0gcmFuZF9wb3J0KClcbisgICAgbXFfaGFuZGxlID0gX3NldHVwX2ZxX3FkaXNjKGNmZywgcG9ydCwgdGFyZ2V0X3F1ZXVlLCBvdGhlcl9xdWV1ZSlcbitcbisgICAgc29jayA9IF9jcmVhdGVfc290eHRpbWVfc29ja2V0KGNmZylcbisgICAgZGVmZXIoc29jay5jbG9zZSlcbitcbisgICAgcGt0X2NvdW50ID0gTUlOX1RYX1JJTkcgKiAyXG4rXG4rICAgIGZvciBkZWxheV9tcyBpbiBbMTAwLCAyMDAsIDUwMF06XG4rICAgICAgICBfc2VuZF9zb3R4dGltZV9idXJzdChjZmcsIHNvY2ssIHBvcnQsIHBrdF9jb3VudCxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5X21zICogMV8wMDBfMDAwKVxuKyAgICAgICAga3NmdF9wcihmXCJTZW50IHtwa3RfY291bnR9IFNPX1RYVElNRSBwYWNrZXRzICgre2RlbGF5X21zfW1zKVwiKVxuKyAgICAgICAgdGltZS5zbGVlcChkZWxheV9tcyAvIDEwMDAgKyAwLjMpXG4rXG4rICAgICAgICBiYWNrbG9nID0gX2dldF9xZGlzY19iYWNrbG9nKGNmZywgbXFfaGFuZGxlLCB0YXJnZXRfcXVldWUpXG4rICAgICAgICBpZiBiYWNrbG9nOlxuKyAgICAgICAgICAgIGJyZWFrXG4rICAgIGVsc2U6XG4rICAgICAgICByYWlzZSBLc2Z0RmFpbEV4KFwiZmFpbGVkIHRvIGJ1aWxkIHFkaXNjIGJhY2tsb2dcIilcbitcbisgICAga3NmdF9wcihmXCJCYWNrbG9nIGJlZm9yZSByZWNvbmZpZzoge2JhY2tsb2d9IGJ5dGVzXCIpXG4rXG4rICAgICMgVHJpZ2dlciByaW5nIHJlY29uZmlnIOKAlCBkcml2ZXIgc2hvdWxkIGNhbGwgd2FrZSwgbm90IGp1c3Qgc3RhcnRcbisgICAgY2ZnLmV0aC5yaW5nc19zZXQoZWhkciB8IHsndHgnOiB0eF9jdXJ9KVxuK1xuKyAgICAjIExldCBjb21wbGV0aW9ucyBwcm9jZWVkIG5vcm1hbGx5XG4rICAgIF93cml0ZV9zeXNmcyhuYXBpX2RlZmVyLCAwKVxuKyAgICBfd3JpdGVfc3lzZnMoZ3JvX3RpbWVvdXQsIDApXG4rXG4rICAgICMgUG9sbCBmb3IgYmFja2xvZyB0byBkcmFpblxuKyAgICBmb3IgXyBpbiByYW5nZSgxMDApOlxuKyAgICAgICAgYmFja2xvZyA9IF9nZXRfcWRpc2NfYmFja2xvZyhjZmcsIG1xX2hhbmRsZSwgdGFyZ2V0X3F1ZXVlKVxuKyAgICAgICAgaWYgbm90IGJhY2tsb2c6XG4rICAgICAgICAgICAgYnJlYWtcbisgICAgICAgIHRpbWUuc2xlZXAoMC4xKVxuK1xuKyAgICBrc2Z0X2VxKDAsIGJhY2tsb2csXG4rICAgICAgICAgICAgY29tbWVudD1mXCJxZGlzYyBiYWNrbG9nIHN0dWNrIG9uIHF1ZXVlIHt0YXJnZXRfcXVldWV9IFwiXG4rICAgICAgICAgICAgICAgICAgICBmXCJhZnRlciByaW5nIHJlY29uZmlnXCIpXG4rXG4rXG4gZGVmIG1haW4oKSAtXHUwMDNlIE5vbmU6XG4gICAgIFwiXCJcIiBLc2Z0IGJvaWxlciBwbGF0ZSBtYWluIFwiXCJcIlxuIFxuLSAgICB3aXRoIE5ldERydkVwRW52KF9fZmlsZV9fKSBhcyBjZmc6XG4rICAgIHdpdGggTmV0RHJ2RXBFbnYoX19maWxlX18sIHF1ZXVlX2NvdW50PTIpIGFzIGNmZzpcbiAgICAgICAgIGNmZy5ldGggPSBFdGh0b29sRmFtaWx5KClcbiBcbiAgICAgICAgIGtzZnRfcnVuKFtjaGFubmVscyxcbi0gICAgICAgICAgICAgICAgICByaW5ncGFyYW1dLFxuKyAgICAgICAgICAgICAgICAgIHJpbmdwYXJhbSxcbisgICAgICAgICAgICAgICAgICByZWNvbmZpZ190eF9zdGFsbF0sXG4gICAgICAgICAgICAgICAgICBhcmdzPShjZmcsICkpXG4gICAgIGtzZnRfZXhpdCgpXG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNDoxNToyNi42NDEyNTM2MjJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MTczOTI3NzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBc3Nlc3NtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gaW5kaWNhdGVkIHNvbWUgY2hhbmdlcyB3aXRoaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldGAgZGlyZWN0b3J5LCBzcGVjaWZpY2FsbHkgdG8gYGNvbmZpZ2AsIGBlbnYucHlgLCBhbmQgYHJpbmdfcmVjb25maWcucHlgLiBUaGF0IGltbWVkaWF0ZWx5IHBpbmdlZCBteSBpbnRlcm5hbCBhbGFybSBiZWxsczsgaG93ZXZlciwgYSBjbG9zZXIgbG9vayBjb25maXJtcyB0aGVzZSBhcmUgKm9ubHkqIHNlbGZ0ZXN0IG1vZGlmaWNhdGlvbnMuIEl0IGFkZHMgY29uZmlndXJhdGlvbnMsIHR3ZWFrcyBhIFB5dGhvbiBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQsIGFuZCBpbnRyb2R1Y2VzIGEgbmV3IHRlc3QgY2FzZSAoYHJlY29uZmlnX3R4X3N0YWxsYCkuXG5cbk15IGZpcnN0IHRob3VnaHQgd2FzIHRvIHZlcmlmeSB0aGF0IHRoZXJlIGFyZSBubyBjb3JlIGtlcm5lbCBjaGFuZ2VzLiBJIHJlLWV4YW1pbmVkIHRoZSBwYXRjaCBkaWZmLiBZZXMsIGl0IG9ubHkgdG91Y2hlcyB0aG9zZSBzZWxmdGVzdCBmaWxlcy4gVGhpcyBpcyBpbXBvcnRhbnQ6IGl0ICpkb2Vzbid0KiB0b3VjaCBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4gVGhlIGNoYW5nZXMgYXJlIGNvbmZpbmVkIHRvIHRoZSBzZWxmLXRlc3QgZnJhbWV3b3JrLCBtZWFuaW5nIGl0J3MgdXNlcnNwYWNlIHRlc3QgY29kZS5cblxuTm93IEkgbmVlZCB0byBlbnN1cmUgSSdtIG1ha2luZyBhIGNvcnJlY3QgYXNzZXNzbWVudCBiYXNlZCBvbiBteSBleGlzdGluZyBrbm93bGVkZ2UuIEknbSByZWNhbGxpbmcgdGhlIGluc3RydWN0aW9uczogXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIFsuLi5dXCIgQW5kIEknbSBsb29raW5nIGZvciBhIGNhdGNoLiBXaGlsZSBzZWxmdGVzdHMgYXJlbid0ICpleHBsaWNpdGx5KiBsaXN0ZWQsIGl0IGZhbGxzIHNxdWFyZWx5IHVuZGVyIHRoZSBwcmluY2lwbGUgb2Ygbm90IGZ1bmN0aW9uYWxseSBhbHRlcmluZyB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIGtlcm5lbCBpdHNlbGYuIFRoaXMgaXMgYW4gaW1wb3J0YW50IGRpc3RpbmN0aW9uLlxuXG5JIGdvIGJhY2sgdG8gbXkgaW5zdHJ1Y3Rpb25zLiBcIklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXCIgVGhhdCdzIHRoZSBvdGhlciBzaWRlIG9mIHRoZSBjb2luLiBTaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggdGVzdCBjb2RlIGFuZCAqbm90KiBjb3JlIGtlcm5lbCBjaGFuZ2VzLCB0aGlzIGlzIGEgY2xlYXIgXCJmYWxzZS5cIlxuXG5BbHJpZ2h0LCBpdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIE5vIGZ1bmN0aW9uYWwga2VybmVsIGNoYW5nZXMsIGp1c3Qgc2VsZnRlc3QgYWRkaXRpb25zLiBUaW1lIHRvIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYCBhbmQgbW92ZSBvbi4gVGhlcmUncyBub3RoaW5nIHRvIGZ1enogaGVyZS5cblxuSGVyZSBhcmUgdGhlIHJlc3VsdHMgSSdtIHNldHRpbmc6XG5Xb3J0aEZ1enppbmc9ZmFsc2VcblJlYXNvbmluZzogVGhlIHBhdGNoIG9ubHkgYWRkcyBhIG5ldyB0ZXN0IHNjcmlwdCB0byB0aGUga2VybmVsIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvKSBhbmQgZG9lcyBub3QgbW9kaWZ5IGFueSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy5cbkZvY3VzU3ltYm9sczogW11cbkVuYWJsZUNvbmZpZ3M6IFtdXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NTksIk91dHB1dFRva2VucyI6NjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNDoxNTozNS44MTUxODU1MDdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHRlc3Qgc2NyaXB0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSB0ZXN0IHNjcmlwdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxtmxh[1] Phase: Running StartedAt: 2026-07-25 04:15:47 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxtmxh[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-25 04:15:47 +0000 UTC FinishedAt: 2026-07-25 04:16:10 +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,}