Name: series-workflowszlb8 Phase: Failed StartedAt: 2026-09-08 08:25:33 +0000 UTC FinishedAt: 2026-09-08 08:48:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowszlb8[0] Phase: Succeeded StartedAt: 2026-09-08 08:25:33 +0000 UTC FinishedAt: 2026-09-08 08:47:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowszlb8[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 08:25:33 +0000 UTC FinishedAt: 2026-09-08 08:47:52 +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+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdhbmd4dW4gRXRoZXJuZXQgY29tbW9uIGxpYnJhcnkgKGxpYnd4KSB1c2VkIGJ5IFdhbmd4dW4gUENJZSBuZXR3b3JrIGRyaXZlcnMgKG5nYmUsIHR4Z2JlKS4gVGhlc2UgZHJpdmVycyB0YXJnZXQgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgTklDcyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODo0NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGJkZDk4MjE2MDk3ODkxNWMxN2MwNDgzZmYwMGJhMmFkMjE4Yjc1MzdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDA4OjQ3OjE5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xuaW5kZXggMTIyYzQ5NTJkMjAzZi4uMTEzNTUyNTg2YmU3MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXG5AQCAtMjUxOCw2ICYjNDM7MjUxOCw3IEBAIGludCB3eF9zd19pbml0KHN0cnVjdCB3eCAqd3gpXG4gXHR9XG4gXG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZ3eC1cdTAwM2Vod19zdGF0c19sb2NrKTtcbiYjNDM7XHRzcGluX2xvY2tfaW5pdChcdTAwMjZ3eC1cdTAwM2VwdHBfdHhfbG9jayk7XG4gXHRtdXRleF9pbml0KFx1MDAyNnd4LVx1MDAzZXJlc2V0X2xvY2spO1xuIFx0Yml0bWFwX3plcm8od3gtXHUwMDNlc3RhdGUsIFdYX1NUQVRFX05CSVRTKTtcbiBcdGJpdG1hcF96ZXJvKHd4LVx1MDAzZWZsYWdzLCBXWF9QRl9GTEFHU19OQklUUyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcbmluZGV4IGVkNWFhZDc4NTdiZDkuLjkxMTg4MTMzMzRhOWUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXG5AQCAtMTYxMiw2ICYjNDM7MTYxMiw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCB3eF94bWl0X2ZyYW1lX3Jpbmcoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiB7XG4gXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYodHhfcmluZy1cdTAwM2VuZXRkZXYpO1xuIFx0dTE2IGNvdW50ID0gVFhEX1VTRV9DT1VOVChza2JfaGVhZGxlbihza2IpKTtcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqcHRwX3R4X3NrYiA9IE5VTEw7XG4gXHRzdHJ1Y3Qgd3hfdHhfYnVmZmVyICpmaXJzdDtcbiBcdHU4IGhkcl9sZW4gPSAwLCBwdHlwZTtcbiBcdHVuc2lnbmVkIHNob3J0IGY7XG5AQCAtMTY0OSw2ICYjNDM7MTY1MCw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCB3eF94bWl0X2ZyYW1lX3Jpbmcoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBcdGlmICh1bmxpa2VseShza2Jfc2hpbmZvKHNrYiktXHUwMDNldHhfZmxhZ3MgXHUwMDI2IFNLQlRYX0hXX1RTVEFNUCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgd3gtXHUwMDNlcHRwX2Nsb2NrKSB7XG4mIzQzO1x0XHRzcGluX2xvY2tfYmgoXHUwMDI2d3gtXHUwMDNlcHRwX3R4X2xvY2spO1xuIFx0XHRpZiAod3gtXHUwMDNldHN0YW1wX2NvbmZpZy50eF90eXBlID09IEhXVFNUQU1QX1RYX09OIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgIXRlc3RfYW5kX3NldF9iaXRfbG9jayhXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsXG4gXHRcdFx0XHRcdCAgIHd4LVx1MDAzZXN0YXRlKSkge1xuQEAgLTE2NTksNiAmIzQzOzE2NjEsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3Qgd3hfeG1pdF9mcmFtZV9yaW5nKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0d3gtXHUwMDNldHhfaHd0c3RhbXBfc2tpcHBlZCYjNDM7JiM0Mzs7XG4gXHRcdH1cbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnd4LVx1MDAzZXB0cF90eF9sb2NrKTtcbiBcdH1cbiBcbiBcdC8qIHJlY29yZCBpbml0aWFsIGZsYWdzIGFuZCBwcm90b2NvbCAqL1xuQEAgLTE2ODUsMTAgJiM0MzsxNjg4LDE3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCB3eF94bWl0X2ZyYW1lX3Jpbmcoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGZpcnN0LVx1MDAzZXNrYiA9IE5VTEw7XG4gY2xlYW51cF90eF90c3RhbXA6XG4gXHRpZiAodW5saWtlbHkodHhfZmxhZ3MgXHUwMDI2IFdYX1RYX0ZMQUdTX1RTVEFNUCkpIHtcbi1cdFx0ZGV2X2tmcmVlX3NrYl9hbnkod3gtXHUwMDNlcHRwX3R4X3NrYik7XG4tXHRcdHd4LVx1MDAzZXB0cF90eF9za2IgPSBOVUxMO1xuJiM0MztcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnd4LVx1MDAzZXB0cF90eF9sb2NrKTtcbiYjNDM7XHRcdGlmICh3eC1cdTAwM2VwdHBfdHhfc2tiID09IHNrYikge1xuJiM0MztcdFx0XHRwdHBfdHhfc2tiID0gd3gtXHUwMDNlcHRwX3R4X3NrYjtcbiYjNDM7XHRcdFx0d3gtXHUwMDNlcHRwX3R4X3NrYiA9IE5VTEw7XG4mIzQzO1x0XHRcdGNsZWFyX2JpdF91bmxvY2soV1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLFxuJiM0MztcdFx0XHRcdFx0IHd4LVx1MDAzZXN0YXRlKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnd4LVx1MDAzZXB0cF90eF9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0XHRkZXZfa2ZyZWVfc2tiX2FueShwdHBfdHhfc2tiKTtcbiBcdFx0d3gtXHUwMDNldHhfaHd0c3RhbXBfZXJyb3JzJiM0MzsmIzQzOztcbi1cdFx0Y2xlYXJfYml0X3VubG9jayhXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsIHd4LVx1MDAzZXN0YXRlKTtcbiBcdH1cbiBcbiBcdHJldHVybiBORVRERVZfVFhfT0s7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmNcbmluZGV4IDQ3MDhlN2YzOTU4ZjcuLmEwOTI5YjQ4NDRlOGQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXG5AQCAtMTM5LDEyICYjNDM7MTM5LDE2IEBAIHN0YXRpYyBpbnQgd3hfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCxcbiAgKi9cbiBzdGF0aWMgdm9pZCB3eF9wdHBfY2xlYXJfdHhfdGltZXN0YW1wKHN0cnVjdCB3eCAqd3gpXG4ge1xuJiM0MztcdHN0cnVjdCBza19idWZmICpza2I7XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZ3eC1cdTAwM2VwdHBfdHhfbG9jayk7XG4gXHRyZDMycHRwKHd4LCBXWF9UU0NfMTU4OF9TVE1QSCk7XG4tXHRpZiAod3gtXHUwMDNlcHRwX3R4X3NrYikge1xuLVx0XHRkZXZfa2ZyZWVfc2tiX2FueSh3eC1cdTAwM2VwdHBfdHhfc2tiKTtcbi1cdFx0d3gtXHUwMDNlcHRwX3R4X3NrYiA9IE5VTEw7XG4tXHR9XG4mIzQzO1x0c2tiID0gd3gtXHUwMDNlcHRwX3R4X3NrYjtcbiYjNDM7XHR3eC1cdTAwM2VwdHBfdHhfc2tiID0gTlVMTDtcbiBcdGNsZWFyX2JpdF91bmxvY2soV1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLCB3eC1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2d3gtXHUwMDNlcHRwX3R4X2xvY2spO1xuJiM0MztcbiYjNDM7XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuIH1cbiBcbiAvKipcbkBAIC0xNzQsNTAgJiM0MzsxNzgsNDMgQEAgc3RhdGljIHZvaWQgd3hfcHRwX2NvbnZlcnRfdG9faHd0c3RhbXAoc3RydWN0IHd4ICp3eCxcbiBcdGh3dHN0YW1wLVx1MDAzZWh3dHN0YW1wID0gbnNfdG9fa3RpbWUobnMpO1xuIH1cbiBcbi0vKipcbi0gKiB3eF9wdHBfdHhfaHd0c3RhbXAgLSB1dGlsaXR5IGZ1bmN0aW9uIHdoaWNoIGNoZWNrcyBmb3IgVFggdGltZSBzdGFtcFxuLSAqIEB3eDogdGhlIHByaXZhdGUgYm9hcmQgc3RydWN0XG4tICpcbi0gKiBpZiB0aGUgdGltZXN0YW1wIGlzIHZhbGlkLCB3ZSBjb252ZXJ0IGl0IGludG8gdGhlIHRpbWVjb3VudGVyIG5zXG4tICogdmFsdWUsIHRoZW4gc3RvcmUgdGhhdCByZXN1bHQgaW50byB0aGUgc2hod3RzdGFtcHMgc3RydWN0dXJlIHdoaWNoXG4tICogaXMgcGFzc2VkIHVwIHRoZSBuZXR3b3JrIHN0YWNrXG4tICovXG4tc3RhdGljIHZvaWQgd3hfcHRwX3R4X2h3dHN0YW1wKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3N0YXRpYyBpbnQgd3hfcHRwX3R4X2h3dHN0YW1wX3dvcmsoc3RydWN0IHd4ICp3eClcbiB7XG4gXHRzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMgc2hod3RzdGFtcHM7XG4tXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gd3gtXHUwMDNlcHRwX3R4X3NrYjtcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuJiM0MztcdHUzMiB0c3luY3R4Y3RsO1xuIFx0dTY0IHJlZ3ZhbCA9IDA7XG4gXG4tXHRyZWd2YWwgfD0gKHU2NClyZDMycHRwKHd4LCBXWF9UU0NfMTU4OF9TVE1QTCk7XG4tXHRyZWd2YWwgfD0gKHU2NClyZDMycHRwKHd4LCBXWF9UU0NfMTU4OF9TVE1QSCkgXHUwMDNjXHUwMDNjIDMyO1xuLVxuLVx0d3hfcHRwX2NvbnZlcnRfdG9faHd0c3RhbXAod3gsIFx1MDAyNnNoaHd0c3RhbXBzLCByZWd2YWwpO1xuLVxuLVx0d3gtXHUwMDNlcHRwX3R4X3NrYiA9IE5VTEw7XG4tXHRjbGVhcl9iaXRfdW5sb2NrKFdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUywgd3gtXHUwMDNlc3RhdGUpO1xuLVx0c2tiX3RzdGFtcF90eChza2IsIFx1MDAyNnNoaHd0c3RhbXBzKTtcbi1cdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4tXHR3eC1cdTAwM2V0eF9od3RzdGFtcF9wa3RzJiM0MzsmIzQzOztcbi19XG4tXG4tc3RhdGljIGludCB3eF9wdHBfdHhfaHd0c3RhbXBfd29yayhzdHJ1Y3Qgd3ggKnd4KVxuLXtcbi1cdHUzMiB0c3luY3R4Y3RsO1xuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZ3eC1cdTAwM2VwdHBfdHhfbG9jayk7XG4gXG4gXHQvKiB3ZSBoYXZlIHRvIGhhdmUgYSB2YWxpZCBza2IgdG8gcG9sbCBmb3IgYSB0aW1lc3RhbXAgKi9cbiBcdGlmICghd3gtXHUwMDNlcHRwX3R4X3NrYikge1xuLVx0XHR3eF9wdHBfY2xlYXJfdHhfdGltZXN0YW1wKHd4KTtcbiYjNDM7XHRcdHJkMzJwdHAod3gsIFdYX1RTQ18xNTg4X1NUTVBIKTtcbiYjNDM7XHRcdGNsZWFyX2JpdF91bmxvY2soV1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLCB3eC1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZ3eC1cdTAwM2VwdHBfdHhfbG9jayk7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuIFx0Lyogc3RvcCBwb2xsaW5nIG9uY2Ugd2UgaGF2ZSBhIHZhbGlkIHRpbWVzdGFtcCAqL1xuIFx0dHN5bmN0eGN0bCA9IHJkMzJwdHAod3gsIFdYX1RTQ18xNTg4X0NUTCk7XG4tXHRpZiAodHN5bmN0eGN0bCBcdTAwMjYgV1hfVFNDXzE1ODhfQ1RMX1ZBTElEKSB7XG4tXHRcdHd4X3B0cF90eF9od3RzdGFtcCh3eCk7XG4tXHRcdHJldHVybiAwO1xuJiM0MztcdGlmICghKHRzeW5jdHhjdGwgXHUwMDI2IFdYX1RTQ18xNTg4X0NUTF9WQUxJRCkpIHtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnd4LVx1MDAzZXB0cF90eF9sb2NrKTtcbiYjNDM7XHRcdHJldHVybiAtMTtcbiBcdH1cbiBcbi1cdHJldHVybiAtMTtcbiYjNDM7XHRyZWd2YWwgfD0gKHU2NClyZDMycHRwKHd4LCBXWF9UU0NfMTU4OF9TVE1QTCk7XG4mIzQzO1x0cmVndmFsIHw9ICh1NjQpcmQzMnB0cCh3eCwgV1hfVFNDXzE1ODhfU1RNUEgpIFx1MDAzY1x1MDAzYyAzMjtcbiYjNDM7XHR3eF9wdHBfY29udmVydF90b19od3RzdGFtcCh3eCwgXHUwMDI2c2hod3RzdGFtcHMsIHJlZ3ZhbCk7XG4mIzQzO1x0c2tiID0gd3gtXHUwMDNlcHRwX3R4X3NrYjtcbiYjNDM7XHR3eC1cdTAwM2VwdHBfdHhfc2tiID0gTlVMTDtcbiYjNDM7XHRjbGVhcl9iaXRfdW5sb2NrKFdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUywgd3gtXHUwMDNlc3RhdGUpO1xuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnd4LVx1MDAzZXB0cF90eF9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0c2tiX3RzdGFtcF90eChza2IsIFx1MDAyNnNoaHd0c3RhbXBzKTtcbiYjNDM7XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuJiM0MztcdHd4LVx1MDAzZXR4X2h3dHN0YW1wX3BrdHMmIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gLyoqXG5AQCAtMjk2LDI0ICYjNDM7MjkzLDMwIEBAIHN0YXRpYyB2b2lkIHd4X3B0cF9yeF9oYW5nKHN0cnVjdCB3eCAqd3gpXG4gICovXG4gc3RhdGljIHZvaWQgd3hfcHRwX3R4X2hhbmcoc3RydWN0IHd4ICp3eClcbiB7XG4tXHRib29sIHRpbWVvdXQgPSB0aW1lX2lzX2JlZm9yZV9qaWZmaWVzKHd4LVx1MDAzZXB0cF90eF9zdGFydCAmIzQzO1xuLVx0XHRcdFx0XHQgICAgICBXWF9QVFBfVFhfVElNRU9VVCk7XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7XG4gXG4tXHRpZiAoIXd4LVx1MDAzZXB0cF90eF9za2IpXG4tXHRcdHJldHVybjtcbi1cbi1cdGlmICghdGVzdF9iaXQoV1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLCB3eC1cdTAwM2VzdGF0ZSkpXG4tXHRcdHJldHVybjtcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2d3gtXHUwMDNlcHRwX3R4X2xvY2spO1xuIFxuIFx0LyogSWYgd2UgaGF2ZW4mIzM5O3QgcmVjZWl2ZWQgYSB0aW1lc3RhbXAgd2l0aGluIHRoZSB0aW1lb3V0LCBpdCBpc1xuIFx0ICogcmVhc29uYWJsZSB0byBhc3N1bWUgdGhhdCBpdCB3aWxsIG5ldmVyIG9jY3VyLCBzbyB3ZSBjYW4gdW5sb2NrIHRoZVxuIFx0ICogdGltZXN0YW1wIGJpdCB3aGVuIHRoaXMgb2NjdXJzLlxuIFx0ICovXG4tXHRpZiAodGltZW91dCkge1xuLVx0XHR3eF9wdHBfY2xlYXJfdHhfdGltZXN0YW1wKHd4KTtcbi1cdFx0d3gtXHUwMDNldHhfaHd0c3RhbXBfdGltZW91dHMmIzQzOyYjNDM7O1xuLVx0XHRkZXZfd2FybihcdTAwMjZ3eC1cdTAwM2VwZGV2LVx1MDAzZWRldiwgXCYjMzQ7Y2xlYXJpbmcgVHggdGltZXN0YW1wIGhhbmdcXG5cJiMzNDspO1xuJiM0MztcdGlmICh3eC1cdTAwM2VwdHBfdHhfc2tiIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsIHd4LVx1MDAzZXN0YXRlKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgdGltZV9pc19iZWZvcmVfamlmZmllcyh3eC1cdTAwM2VwdHBfdHhfc3RhcnQgJiM0MzsgV1hfUFRQX1RYX1RJTUVPVVQpKSB7XG4mIzQzO1x0XHRyZDMycHRwKHd4LCBXWF9UU0NfMTU4OF9TVE1QSCk7XG4mIzQzO1x0XHRza2IgPSB3eC1cdTAwM2VwdHBfdHhfc2tiO1xuJiM0MztcdFx0d3gtXHUwMDNlcHRwX3R4X3NrYiA9IE5VTEw7XG4mIzQzO1x0XHRjbGVhcl9iaXRfdW5sb2NrKFdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUywgd3gtXHUwMDNlc3RhdGUpO1xuIFx0fVxuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnd4LVx1MDAzZXB0cF90eF9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFza2IpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4mIzQzO1x0d3gtXHUwMDNldHhfaHd0c3RhbXBfdGltZW91dHMmIzQzOyYjNDM7O1xuJiM0MztcdGRldl93YXJuKFx1MDAyNnd4LVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBcJiMzNDtjbGVhcmluZyBUeCB0aW1lc3RhbXAgaGFuZ1xcblwmIzM0Oyk7XG4gfVxuIFxuIHN0YXRpYyBsb25nIHd4X3B0cF9kb19hdXhfd29yayhzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cClcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXG5pbmRleCA5NDU0ZTkwMjU4ZDhlLi42Yjk0NjAxNDdjYTkzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXG5AQCAtMTQzMCw2ICYjNDM7MTQzMCw3IEBAIHN0cnVjdCB3eCB7XG4gXHR1bnNpZ25lZCBsb25nIGxhc3Rfb3ZlcmZsb3dfY2hlY2s7XG4gXHR1bnNpZ25lZCBsb25nIGxhc3RfcnhfcHRwX2NoZWNrO1xuIFx0dW5zaWduZWQgbG9uZyBwdHBfdHhfc3RhcnQ7XG4mIzQzO1x0c3BpbmxvY2tfdCBwdHBfdHhfbG9jazsgLyogcHJvdGVjdHMgcHRwX3R4X3NrYiBhbmQgcHRwX3R4X3N0YXJ0ICovXG4gXHRzZXFsb2NrX3QgaHdfdGNfbG9jazsgLyogc2VxbG9jayBmb3IgcHRwICovXG4gXHRzdHJ1Y3QgY3ljbGVjb3VudGVyIGh3X2NjO1xuIFx0c3RydWN0IHRpbWVjb3VudGVyIGh3X3RjO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjQ3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXYW5neHVuIEV0aGVybmV0IGNvbW1vbiBsaWJyYXJ5IChsaWJ3eCkgdXNlZCBieSBXYW5neHVuIFBDSWUgbmV0d29yayBkcml2ZXJzIChuZ2JlLCB0eGdiZSkuIFRoZXNlIGRyaXZlcnMgdGFyZ2V0IHZlbmRvci1zcGVjaWZpYyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIE5JQ3MgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIHN5emthbGxlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiZGQ5ODIxNjA5Nzg5MTVjMTdjMDQ4M2ZmMDBiYTJhZDIxOGI3NTM3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgOCAwODo0NzoxOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuYwppbmRleCAxMjJjNDk1MmQyMDNmLi4xMTM1NTI1ODZiZTcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jCkBAIC0yNTE4LDYgJiM0MzsyNTE4LDcgQEAgaW50IHd4X3N3X2luaXQoc3RydWN0IHd4ICp3eCkKIAl9CiAKIAlzcGluX2xvY2tfaW5pdCgmYW1wO3d4LSZndDtod19zdGF0c19sb2NrKTsKJiM0MzsJc3Bpbl9sb2NrX2luaXQoJmFtcDt3eC0mZ3Q7cHRwX3R4X2xvY2spOwogCW11dGV4X2luaXQoJmFtcDt3eC0mZ3Q7cmVzZXRfbG9jayk7CiAJYml0bWFwX3plcm8od3gtJmd0O3N0YXRlLCBXWF9TVEFURV9OQklUUyk7CiAJYml0bWFwX3plcm8od3gtJmd0O2ZsYWdzLCBXWF9QRl9GTEFHU19OQklUUyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuYwppbmRleCBlZDVhYWQ3ODU3YmQ5Li45MTE4ODEzMzM0YTllIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMKQEAgLTE2MTIsNiAmIzQzOzE2MTIsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3Qgd3hfeG1pdF9mcmFtZV9yaW5nKHN0cnVjdCBza19idWZmICpza2IsCiB7CiAJc3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KHR4X3JpbmctJmd0O25ldGRldik7CiAJdTE2IGNvdW50ID0gVFhEX1VTRV9DT1VOVChza2JfaGVhZGxlbihza2IpKTsKJiM0MzsJc3RydWN0IHNrX2J1ZmYgKnB0cF90eF9za2IgPSBOVUxMOwogCXN0cnVjdCB3eF90eF9idWZmZXIgKmZpcnN0OwogCXU4IGhkcl9sZW4gPSAwLCBwdHlwZTsKIAl1bnNpZ25lZCBzaG9ydCBmOwpAQCAtMTY0OSw2ICYjNDM7MTY1MCw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCB3eF94bWl0X2ZyYW1lX3Jpbmcoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAogCWlmICh1bmxpa2VseShza2Jfc2hpbmZvKHNrYiktJmd0O3R4X2ZsYWdzICZhbXA7IFNLQlRYX0hXX1RTVEFNUCkgJmFtcDsmYW1wOwogCSAgICB3eC0mZ3Q7cHRwX2Nsb2NrKSB7CiYjNDM7CQlzcGluX2xvY2tfYmgoJmFtcDt3eC0mZ3Q7cHRwX3R4X2xvY2spOwogCQlpZiAod3gtJmd0O3RzdGFtcF9jb25maWcudHhfdHlwZSA9PSBIV1RTVEFNUF9UWF9PTiAmYW1wOyZhbXA7CiAJCSAgICAhdGVzdF9hbmRfc2V0X2JpdF9sb2NrKFdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUywKIAkJCQkJICAgd3gtJmd0O3N0YXRlKSkgewpAQCAtMTY1OSw2ICYjNDM7MTY2MSw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCB3eF94bWl0X2ZyYW1lX3Jpbmcoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJfSBlbHNlIHsKIAkJCXd4LSZndDt0eF9od3RzdGFtcF9za2lwcGVkJiM0MzsmIzQzOzsKIAkJfQomIzQzOwkJc3Bpbl91bmxvY2tfYmgoJmFtcDt3eC0mZ3Q7cHRwX3R4X2xvY2spOwogCX0KIAogCS8qIHJlY29yZCBpbml0aWFsIGZsYWdzIGFuZCBwcm90b2NvbCAqLwpAQCAtMTY4NSwxMCAmIzQzOzE2ODgsMTcgQEAgc3RhdGljIG5ldGRldl90eF90IHd4X3htaXRfZnJhbWVfcmluZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWZpcnN0LSZndDtza2IgPSBOVUxMOwogY2xlYW51cF90eF90c3RhbXA6CiAJaWYgKHVubGlrZWx5KHR4X2ZsYWdzICZhbXA7IFdYX1RYX0ZMQUdTX1RTVEFNUCkpIHsKLQkJZGV2X2tmcmVlX3NrYl9hbnkod3gtJmd0O3B0cF90eF9za2IpOwotCQl3eC0mZ3Q7cHRwX3R4X3NrYiA9IE5VTEw7CiYjNDM7CQlzcGluX2xvY2tfYmgoJmFtcDt3eC0mZ3Q7cHRwX3R4X2xvY2spOwomIzQzOwkJaWYgKHd4LSZndDtwdHBfdHhfc2tiID09IHNrYikgewomIzQzOwkJCXB0cF90eF9za2IgPSB3eC0mZ3Q7cHRwX3R4X3NrYjsKJiM0MzsJCQl3eC0mZ3Q7cHRwX3R4X3NrYiA9IE5VTEw7CiYjNDM7CQkJY2xlYXJfYml0X3VubG9jayhXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsCiYjNDM7CQkJCQkgd3gtJmd0O3N0YXRlKTsKJiM0MzsJCX0KJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7d3gtJmd0O3B0cF90eF9sb2NrKTsKJiM0MzsKJiM0MzsJCWRldl9rZnJlZV9za2JfYW55KHB0cF90eF9za2IpOwogCQl3eC0mZ3Q7dHhfaHd0c3RhbXBfZXJyb3JzJiM0MzsmIzQzOzsKLQkJY2xlYXJfYml0X3VubG9jayhXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsIHd4LSZndDtzdGF0ZSk7CiAJfQogCiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jCmluZGV4IDQ3MDhlN2YzOTU4ZjcuLmEwOTI5YjQ4NDRlOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuYwpAQCAtMTM5LDEyICYjNDM7MTM5LDE2IEBAIHN0YXRpYyBpbnQgd3hfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwKICAqLwogc3RhdGljIHZvaWQgd3hfcHRwX2NsZWFyX3R4X3RpbWVzdGFtcChzdHJ1Y3Qgd3ggKnd4KQogewomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwomIzQzOwomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDt3eC0mZ3Q7cHRwX3R4X2xvY2spOwogCXJkMzJwdHAod3gsIFdYX1RTQ18xNTg4X1NUTVBIKTsKLQlpZiAod3gtJmd0O3B0cF90eF9za2IpIHsKLQkJZGV2X2tmcmVlX3NrYl9hbnkod3gtJmd0O3B0cF90eF9za2IpOwotCQl3eC0mZ3Q7cHRwX3R4X3NrYiA9IE5VTEw7Ci0JfQomIzQzOwlza2IgPSB3eC0mZ3Q7cHRwX3R4X3NrYjsKJiM0MzsJd3gtJmd0O3B0cF90eF9za2IgPSBOVUxMOwogCWNsZWFyX2JpdF91bmxvY2soV1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLCB3eC0mZ3Q7c3RhdGUpOwomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO3d4LSZndDtwdHBfdHhfbG9jayk7CiYjNDM7CiYjNDM7CWRldl9rZnJlZV9za2JfYW55KHNrYik7CiB9CiAKIC8qKgpAQCAtMTc0LDUwICYjNDM7MTc4LDQzIEBAIHN0YXRpYyB2b2lkIHd4X3B0cF9jb252ZXJ0X3RvX2h3dHN0YW1wKHN0cnVjdCB3eCAqd3gsCiAJaHd0c3RhbXAtJmd0O2h3dHN0YW1wID0gbnNfdG9fa3RpbWUobnMpOwogfQogCi0vKioKLSAqIHd4X3B0cF90eF9od3RzdGFtcCAtIHV0aWxpdHkgZnVuY3Rpb24gd2hpY2ggY2hlY2tzIGZvciBUWCB0aW1lIHN0YW1wCi0gKiBAd3g6IHRoZSBwcml2YXRlIGJvYXJkIHN0cnVjdAotICoKLSAqIGlmIHRoZSB0aW1lc3RhbXAgaXMgdmFsaWQsIHdlIGNvbnZlcnQgaXQgaW50byB0aGUgdGltZWNvdW50ZXIgbnMKLSAqIHZhbHVlLCB0aGVuIHN0b3JlIHRoYXQgcmVzdWx0IGludG8gdGhlIHNoaHd0c3RhbXBzIHN0cnVjdHVyZSB3aGljaAotICogaXMgcGFzc2VkIHVwIHRoZSBuZXR3b3JrIHN0YWNrCi0gKi8KLXN0YXRpYyB2b2lkIHd4X3B0cF90eF9od3RzdGFtcChzdHJ1Y3Qgd3ggKnd4KQomIzQzO3N0YXRpYyBpbnQgd3hfcHRwX3R4X2h3dHN0YW1wX3dvcmsoc3RydWN0IHd4ICp3eCkKIHsKIAlzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMgc2hod3RzdGFtcHM7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHd4LSZndDtwdHBfdHhfc2tiOwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwomIzQzOwl1MzIgdHN5bmN0eGN0bDsKIAl1NjQgcmVndmFsID0gMDsKIAotCXJlZ3ZhbCB8PSAodTY0KXJkMzJwdHAod3gsIFdYX1RTQ18xNTg4X1NUTVBMKTsKLQlyZWd2YWwgfD0gKHU2NClyZDMycHRwKHd4LCBXWF9UU0NfMTU4OF9TVE1QSCkgJmx0OyZsdDsgMzI7Ci0KLQl3eF9wdHBfY29udmVydF90b19od3RzdGFtcCh3eCwgJmFtcDtzaGh3dHN0YW1wcywgcmVndmFsKTsKLQotCXd4LSZndDtwdHBfdHhfc2tiID0gTlVMTDsKLQljbGVhcl9iaXRfdW5sb2NrKFdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUywgd3gtJmd0O3N0YXRlKTsKLQlza2JfdHN0YW1wX3R4KHNrYiwgJmFtcDtzaGh3dHN0YW1wcyk7Ci0JZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQl3eC0mZ3Q7dHhfaHd0c3RhbXBfcGt0cyYjNDM7JiM0Mzs7Ci19Ci0KLXN0YXRpYyBpbnQgd3hfcHRwX3R4X2h3dHN0YW1wX3dvcmsoc3RydWN0IHd4ICp3eCkKLXsKLQl1MzIgdHN5bmN0eGN0bDsKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7d3gtJmd0O3B0cF90eF9sb2NrKTsKIAogCS8qIHdlIGhhdmUgdG8gaGF2ZSBhIHZhbGlkIHNrYiB0byBwb2xsIGZvciBhIHRpbWVzdGFtcCAqLwogCWlmICghd3gtJmd0O3B0cF90eF9za2IpIHsKLQkJd3hfcHRwX2NsZWFyX3R4X3RpbWVzdGFtcCh3eCk7CiYjNDM7CQlyZDMycHRwKHd4LCBXWF9UU0NfMTU4OF9TVE1QSCk7CiYjNDM7CQljbGVhcl9iaXRfdW5sb2NrKFdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUywgd3gtJmd0O3N0YXRlKTsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7d3gtJmd0O3B0cF90eF9sb2NrKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJLyogc3RvcCBwb2xsaW5nIG9uY2Ugd2UgaGF2ZSBhIHZhbGlkIHRpbWVzdGFtcCAqLwogCXRzeW5jdHhjdGwgPSByZDMycHRwKHd4LCBXWF9UU0NfMTU4OF9DVEwpOwotCWlmICh0c3luY3R4Y3RsICZhbXA7IFdYX1RTQ18xNTg4X0NUTF9WQUxJRCkgewotCQl3eF9wdHBfdHhfaHd0c3RhbXAod3gpOwotCQlyZXR1cm4gMDsKJiM0MzsJaWYgKCEodHN5bmN0eGN0bCAmYW1wOyBXWF9UU0NfMTU4OF9DVExfVkFMSUQpKSB7CiYjNDM7CQlzcGluX3VubG9ja19iaCgmYW1wO3d4LSZndDtwdHBfdHhfbG9jayk7CiYjNDM7CQlyZXR1cm4gLTE7CiAJfQogCi0JcmV0dXJuIC0xOwomIzQzOwlyZWd2YWwgfD0gKHU2NClyZDMycHRwKHd4LCBXWF9UU0NfMTU4OF9TVE1QTCk7CiYjNDM7CXJlZ3ZhbCB8PSAodTY0KXJkMzJwdHAod3gsIFdYX1RTQ18xNTg4X1NUTVBIKSAmbHQ7Jmx0OyAzMjsKJiM0MzsJd3hfcHRwX2NvbnZlcnRfdG9faHd0c3RhbXAod3gsICZhbXA7c2hod3RzdGFtcHMsIHJlZ3ZhbCk7CiYjNDM7CXNrYiA9IHd4LSZndDtwdHBfdHhfc2tiOwomIzQzOwl3eC0mZ3Q7cHRwX3R4X3NrYiA9IE5VTEw7CiYjNDM7CWNsZWFyX2JpdF91bmxvY2soV1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLCB3eC0mZ3Q7c3RhdGUpOwomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO3d4LSZndDtwdHBfdHhfbG9jayk7CiYjNDM7CiYjNDM7CXNrYl90c3RhbXBfdHgoc2tiLCAmYW1wO3NoaHd0c3RhbXBzKTsKJiM0MzsJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKJiM0MzsJd3gtJmd0O3R4X2h3dHN0YW1wX3BrdHMmIzQzOyYjNDM7OwomIzQzOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC0yOTYsMjQgJiM0MzsyOTMsMzAgQEAgc3RhdGljIHZvaWQgd3hfcHRwX3J4X2hhbmcoc3RydWN0IHd4ICp3eCkKICAqLwogc3RhdGljIHZvaWQgd3hfcHRwX3R4X2hhbmcoc3RydWN0IHd4ICp3eCkKIHsKLQlib29sIHRpbWVvdXQgPSB0aW1lX2lzX2JlZm9yZV9qaWZmaWVzKHd4LSZndDtwdHBfdHhfc3RhcnQgJiM0MzsKLQkJCQkJICAgICAgV1hfUFRQX1RYX1RJTUVPVVQpOwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKIAotCWlmICghd3gtJmd0O3B0cF90eF9za2IpCi0JCXJldHVybjsKLQotCWlmICghdGVzdF9iaXQoV1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLCB3eC0mZ3Q7c3RhdGUpKQotCQlyZXR1cm47CiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO3d4LSZndDtwdHBfdHhfbG9jayk7CiAKIAkvKiBJZiB3ZSBoYXZlbiYjMzk7dCByZWNlaXZlZCBhIHRpbWVzdGFtcCB3aXRoaW4gdGhlIHRpbWVvdXQsIGl0IGlzCiAJICogcmVhc29uYWJsZSB0byBhc3N1bWUgdGhhdCBpdCB3aWxsIG5ldmVyIG9jY3VyLCBzbyB3ZSBjYW4gdW5sb2NrIHRoZQogCSAqIHRpbWVzdGFtcCBiaXQgd2hlbiB0aGlzIG9jY3Vycy4KIAkgKi8KLQlpZiAodGltZW91dCkgewotCQl3eF9wdHBfY2xlYXJfdHhfdGltZXN0YW1wKHd4KTsKLQkJd3gtJmd0O3R4X2h3dHN0YW1wX3RpbWVvdXRzJiM0MzsmIzQzOzsKLQkJZGV2X3dhcm4oJmFtcDt3eC0mZ3Q7cGRldi0mZ3Q7ZGV2LCAmIzM0O2NsZWFyaW5nIFR4IHRpbWVzdGFtcCBoYW5nXG4mIzM0Oyk7CiYjNDM7CWlmICh3eC0mZ3Q7cHRwX3R4X3NrYiAmYW1wOyZhbXA7CiYjNDM7CSAgICB0ZXN0X2JpdChXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsIHd4LSZndDtzdGF0ZSkgJmFtcDsmYW1wOwomIzQzOwkgICAgdGltZV9pc19iZWZvcmVfamlmZmllcyh3eC0mZ3Q7cHRwX3R4X3N0YXJ0ICYjNDM7IFdYX1BUUF9UWF9USU1FT1VUKSkgewomIzQzOwkJcmQzMnB0cCh3eCwgV1hfVFNDXzE1ODhfU1RNUEgpOwomIzQzOwkJc2tiID0gd3gtJmd0O3B0cF90eF9za2I7CiYjNDM7CQl3eC0mZ3Q7cHRwX3R4X3NrYiA9IE5VTEw7CiYjNDM7CQljbGVhcl9iaXRfdW5sb2NrKFdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUywgd3gtJmd0O3N0YXRlKTsKIAl9CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7d3gtJmd0O3B0cF90eF9sb2NrKTsKJiM0MzsKJiM0MzsJaWYgKCFza2IpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWRldl9rZnJlZV9za2JfYW55KHNrYik7CiYjNDM7CXd4LSZndDt0eF9od3RzdGFtcF90aW1lb3V0cyYjNDM7JiM0Mzs7CiYjNDM7CWRldl93YXJuKCZhbXA7d3gtJmd0O3BkZXYtJmd0O2RldiwgJiMzNDtjbGVhcmluZyBUeCB0aW1lc3RhbXAgaGFuZ1xuJiMzNDspOwogfQogCiBzdGF0aWMgbG9uZyB3eF9wdHBfZG9fYXV4X3dvcmsoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHApCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oCmluZGV4IDk0NTRlOTAyNThkOGUuLjZiOTQ2MDE0N2NhOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oCkBAIC0xNDMwLDYgJiM0MzsxNDMwLDcgQEAgc3RydWN0IHd4IHsKIAl1bnNpZ25lZCBsb25nIGxhc3Rfb3ZlcmZsb3dfY2hlY2s7CiAJdW5zaWduZWQgbG9uZyBsYXN0X3J4X3B0cF9jaGVjazsKIAl1bnNpZ25lZCBsb25nIHB0cF90eF9zdGFydDsKJiM0MzsJc3BpbmxvY2tfdCBwdHBfdHhfbG9jazsgLyogcHJvdGVjdHMgcHRwX3R4X3NrYiBhbmQgcHRwX3R4X3N0YXJ0ICovCiAJc2VxbG9ja190IGh3X3RjX2xvY2s7IC8qIHNlcWxvY2sgZm9yIHB0cCAqLwogCXN0cnVjdCBjeWNsZWNvdW50ZXIgaHdfY2M7CiAJc3RydWN0IHRpbWVjb3VudGVyIGh3X3RjOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDM5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV2YWx1YXRpbmcgdGhlIFBhdGNoJiMzOTtzIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gYXNrZWQgdG8gYXNzZXNzIGlmIHRoaXMgcGF0Y2ggaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgU3l6a2FsbGVyIGZ1enppbmcuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRoaXM6IGxldCYjMzk7cyBkaXZlIGluLiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGJlaW5nIGNoYW5nZWQuIFRoZSBwYXRjaCB0b3VjaGVzIHRoZXNlIGZpbGVzOiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jYCwgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNgLCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY2AsIGFuZCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmhgLiBUaGF0IHRlbGxzIG1lIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCB0aGUgbmV0d29yayBzdGFjaywgc3BlY2lmaWNhbGx5IHNvbWUgYHdhbmd4dW5gIGV0aGVybmV0IGRyaXZlci4gVGhlIGZhY3QgaXQgdG91Y2hlcyBib3RoIGAuY2AgYW5kIGAuaGAgZmlsZXMgaXMgYSBnb29kIHNpZ24sIGFuZCB0aGUgZmFjdCB0aGF0IGl0cyBpbiB0aGUgZHJpdmVycyBzZWN0aW9uIGlzIGV2ZW4gYmV0dGVyLiBUaGlzIHN1Z2dlc3RzIHRoZSBjaGFuZ2UgaXMgYWRkaW5nIG9yIG1vZGlmeWluZyBmdW5jdGlvbmFsaXR5IHJlbGF0ZWQgdG8gaGFyZHdhcmUgaW50ZXJhY3Rpb24gYW5kIGRhdGEgc3RydWN0dXJlcy4KCk5vdywgbXkgbmV4dCBxdWVzdGlvbiBpczogd2hhdCAqaXMqIHRoaXMgYHdhbmd4dW5gIGRyaXZlcj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsIGFuZCB0aGUgaGFyZHdhcmUuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIGVpdGhlciBncmVwcGVyLCBvciBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcywgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZS4gVGhpcyBjb250ZXh0IGlzIGNyaXRpY2FsIGZvciBkZWNpZGluZyBpZiB0aGVyZSBhcmUgbGlrZWx5IHRvIGJlIGludGVyZXN0aW5nIGFuZCBmdXp6ZXItYWNjZXNzaWJsZSBjb2RlIHBhdGhzIGluIHRoZSBjaGFuZ2VzLiBJZiBpdCBpcyBpbnRlcmVzdGluZywgdGhlbiBJJiMzOTtsbCBkZWx2ZSBkZWVwZXIgYW5kIHNlZSBpZiB0aGUgY2hhbmdlcyBhcmUgaW1wb3J0YW50IGZvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZy4qV1gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz0xNz1pZiBORVRfVkVORE9SX1dBTkdYVU5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0xOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzoxOTpjb25maWcgTElCV1hcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0yMC1cdHRyaXN0YXRlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9zcmlvdi5jPTE0OT1zdGF0aWMgaW50IHd4X3BjaV9zcmlvdl9lbmFibGUoc3RydWN0IHBjaV9kZXYgKmRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3NyaW92LmMtMTY2LVx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3ZmczsgaSYjNDM7JiM0MzspXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3NyaW92LmM6MTY3Olx0XHR3eF92Zl9jb25maWd1cmF0aW9uKGRldiwgKGkgfCBXWF9WRl9FTkFCTEUpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfc3Jpb3YuYy0xNjgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjgyMwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWdgIGZpbGU6CgoqKkRpdmluZyBpbnRvIHRoZSBXYW5neHVuIEV0aGVybmV0IERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYEtjb25maWdgIGZvciB0aGUgV2FuZ3h1biBFdGhlcm5ldCBkcml2ZXIuIEl0JiMzOTtzIGEga2V5IHBpZWNlLCBvYnZpb3VzbHksIGRlZmluaW5nIGhvdyB0aGlzIHBhcnRpY3VsYXIgZHJpdmVyIGdldHMgY29uZmlndXJlZCB3aXRoaW4gdGhlIGxhcmdlciBrZXJuZWwgYnVpbGQgcHJvY2Vzcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvcHRpb25zIGFyZSBleHBvc2VkLCB0aGVpciBkZXBlbmRlbmNpZXMsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgY2FwYWJpbGl0aWVzLgoKRmlyc3QsIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBgY29uZmlnYCBzdGF0ZW1lbnRzIHRoYXQgZGVmaW5lIHRoZSBvcHRpb25zIHRoZW1zZWx2ZXMuIEkgd2FudCB0byBzZWUgd2hpY2ggZmVhdHVyZXMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQsIGFuZCB3aGF0IHRob3NlIGZlYXR1cmVzIGFyZSwgZm9yIGV4YW1wbGUsIHRoaW5ncyBsaWtlIGp1bWJvIGZyYW1lIHN1cHBvcnQsIGZsb3cgY29udHJvbCwgb3IgVkxBTiB0YWdnaW5nLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgdGhlIGhlbHAgdGV4dCBhc3NvY2lhdGVkIHdpdGggZWFjaCBvcHRpb24gdG8gdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiB0aGVzZSBmZWF0dXJlcywgd2hhdCB0aGV5IGRvLCBhbmQgd2hhdCB0aGUgdXNlciBuZWVkcyB0byBjb25zaWRlciB3aGVuIGVuYWJsaW5nIHRoZW0uIElzIHRoZXJlIGFueSBkZXRhaWwgdGhhdCBpbXBsaWVzIGhhcmR3YXJlIHJldmlzaW9uPwoKVGhlbiwgdGhlIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzIGFyZSBjcnVjaWFsLiBJJiMzOTttIGdvaW5nIHRvIGZvbGxvdyB0aGUgZGVwZW5kZW5jeSBjaGFpbnMuIEFyZSB0aGVyZSBkZXBlbmRlbmNpZXMgb24gc3BlY2lmaWMgaGFyZHdhcmUgYXJjaGl0ZWN0dXJlcywgb3RoZXIgZHJpdmVycywgb3Iga2VybmVsIGZlYXR1cmVzPyBBcmUgdGhlcmUgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgbmV0d29yayBzdWJzeXN0ZW1zPyBUaGlzIGlzIHdoZXJlIEkgY2FuIHN0YXJ0IHRvIHBpZWNlIHRvZ2V0aGVyIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoaXMgZHJpdmVyIHdpbGwgZXZlbiBiZSBjb25zaWRlcmVkIGZvciBpbmNsdXNpb24uCgpOZXh0LCBJJiMzOTtsbCBiZSBmb2N1c2VkIG9uIGBkZWZhdWx0YCB2YWx1ZXMuIFdoYXQgYXJlIHRoZSBzZW5zaWJsZSBzdGFydGluZyBwb2ludHMgZm9yIHRoZSBkcml2ZXImIzM5O3MgY29uZmlndXJhdGlvbj8gQXJlIHRoZXkgY29uc2VydmF0aXZlIGRlZmF1bHRzPyBEbyB0aGV5IHN1Z2dlc3QgY29tbW9uIHVzZSBjYXNlcz8gQXJlIHRoZSBkZWZhdWx0cyBwbGF0Zm9ybS1zcGVjaWZpYz8gVGhlIGRlZmF1bHRzIHRoZW1zZWx2ZXMgZ2l2ZSBhIGh1Z2UgY2x1ZSBhcyB0byBob3cgdGhlIGRldmVsb3BlcnMgZXhwZWN0IHRoaXMgZHJpdmVyIHRvIGJlIHVzZWQgb3Igd2hhdCBhc3N1bXB0aW9ucyB0aGV5IG1hZGUgZHVyaW5nIGRldmVsb3BtZW50LgoKRmluYWxseSwgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGBzZWxlY3RgIHN0YXRlbWVudHMsIHdoaWNoIGFyZSB1c2VkIHRvIGltcGxpY2l0bHkgZW5hYmxlIG90aGVyIHN5bWJvbHMgd2hlbiBhbiBvcHRpb24gaXMgY2hvc2VuLiBUaGlzIGlzIHdoZXJlIEkgbWlnaHQgZGlzY292ZXIgc2lkZSBlZmZlY3RzIG9yIGRlcGVuZGVuY2llcyB0aGF0IGFyZW4mIzM5O3QgaW1tZWRpYXRlbHkgb2J2aW91cywgc3VjaCBhcyBlbmFibGluZyBkZWJ1ZyBmbGFncyBvciBvdGhlciBzdXBwb3J0IGZlYXR1cmVzLgoKT3ZlcmFsbCwgSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGEgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4gSXQmIzM5O3MgYSBzdGFuZGFyZCBuZXR3b3JrIGRyaXZlciwgc28gaXQgc2hvdWxkIGZvbGxvdyBlc3RhYmxpc2hlZCBjb252ZW50aW9ucy4gSSYjMzk7bSBsb29raW5nIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gc3BhY2UsIGhvdyB0aGUgZHJpdmVyIGludGVncmF0ZXMgd2l0aCB0aGUgbGFyZ2VyIGtlcm5lbCwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgcXVpcmtzIG9yIHBsYXRmb3JtLXNwZWNpZmljIGNvbnNpZGVyYXRpb25zIEkgbmVlZCB0byBrZWVwIGluIG1pbmQuIExldCYjMzk7cyBzZWUgd2hhdCBpdCBob2xkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFdhbmd4dW4gbmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgTkVUX1ZFTkRPUl9XQU5HWFVOXG4gICA3Olx0XHRib29sIFwmIzM0O1dhbmd4dW4gZGV2aWNlc1wmIzM0O1xuICAgODpcdFx0ZGVmYXVsdCB5XG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIElmIHlvdSBoYXZlIGEgbmV0d29yayAoRXRoZXJuZXQpIGNhcmQgZnJvbSBXYW5neHVuKFIpLCBzYXkgWS5cbiAgMTE6XHRcbiAgMTI6XHRcdCAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiBkb2VzbiYjMzk7dCBkaXJlY3RseSBhZmZlY3QgdGhlXG4gIDEzOlx0XHQgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGxcbiAgMTQ6XHRcdCAgdGhlIHF1ZXN0aW9ucyBhYm91dCBXYW5neHVuKFIpIGNhcmRzLiBJZiB5b3Ugc2F5IFksIHlvdSB3aWxsXG4gIDE1Olx0XHQgIGJlIGFza2VkIGZvciB5b3VyIHNwZWNpZmljIGNhcmQgaW4gdGhlIGZvbGxvd2luZyBxdWVzdGlvbnMuXG4gIDE2Olx0XG4gIDE3Olx0aWYgTkVUX1ZFTkRPUl9XQU5HWFVOXG4gIDE4Olx0XG4gIDE5Olx0Y29uZmlnIExJQldYXG4gIDIwOlx0XHR0cmlzdGF0ZVxuICAyMTpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuICAyMjpcdFx0c2VsZWN0IFBBR0VfUE9PTFxuICAyMzpcdFx0c2VsZWN0IERJTUxJQlxuICAyNDpcdFx0c2VsZWN0IFBIWUxJTktcbiAgMjU6XHRcdGhlbHBcbiAgMjY6XHRcdENvbW1vbiBsaWJyYXJ5IGZvciBXYW5neHVuKFIpIEV0aGVybmV0IGRyaXZlcnMuXG4gIDI3Olx0XG4gIDI4Olx0Y29uZmlnIE5HQkVcbiAgMjk6XHRcdHRyaXN0YXRlIFwmIzM0O1dhbmd4dW4oUikgR2JFIFBDSSBFeHByZXNzIGFkYXB0ZXJzIHN1cHBvcnRcJiMzNDtcbiAgMzA6XHRcdGRlcGVuZHMgb24gUENJXG4gIDMxOlx0XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG4gIDMyOlx0XHRzZWxlY3QgTElCV1hcbiAgMzM6XHRcdGhlbHBcbiAgMzQ6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgV2FuZ3h1bihSKSBHYkUgUENJIEV4cHJlc3MgZmFtaWx5IG9mXG4gIDM1Olx0XHQgIGFkYXB0ZXJzLlxuICAzNjpcdFxuICAzNzpcdFx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cbiAgMzg6XHRcdCAgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlLnJzdFx1MDAzZS5cbiAgMzk6XHRcbiAgNDA6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxuICA0MTpcdFx0ICB3aWxsIGJlIGNhbGxlZCBuZ2JlLlxuICA0MjpcdFxuICA0MzpcdGNvbmZpZyBUWEdCRVxuICA0NDpcdFx0dHJpc3RhdGUgXCYjMzQ7V2FuZ3h1bihSKSAxMC8yNS80MEdiRSBQQ0kgRXhwcmVzcyBhZGFwdGVycyBzdXBwb3J0XCYjMzQ7XG4gIDQ1Olx0XHRkZXBlbmRzIG9uIFBDSVxuICA0NjpcdFx0ZGVwZW5kcyBvbiBDT01NT05fQ0xLXG4gIDQ3Olx0XHRkZXBlbmRzIG9uIEkyQ19ERVNJR05XQVJFX1BMQVRGT1JNXG4gIDQ4Olx0XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG4gIDQ5Olx0XHRzZWxlY3QgTUFSVkVMTF8xMEdfUEhZXG4gIDUwOlx0XHRzZWxlY3QgUkVHTUFQXG4gIDUxOlx0XHRzZWxlY3QgSFdNT04gaWYgVFhHQkU9eVxuICA1MjpcdFx0c2VsZWN0IFNGUFxuICA1MzpcdFx0c2VsZWN0IEdQSU9MSUJcbiAgNTQ6XHRcdHNlbGVjdCBHUElPTElCX0lSUUNISVBcbiAgNTU6XHRcdHNlbGVjdCBQQ1NfWFBDU1xuICA1NjpcdFx0c2VsZWN0IExJQldYXG4gIDU3Olx0XHRoZWxwXG4gIDU4Olx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIFdhbmd4dW4oUikgMTAvMjUvNDBHYkUgUENJIEV4cHJlc3MgZmFtaWx5IG9mXG4gIDU5Olx0XHQgIGFkYXB0ZXJzLlxuICA2MDpcdFxuICA2MTpcdFx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cbiAgNjI6XHRcdCAgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS5yc3RcdTAwM2UuXG4gIDYzOlx0XG4gIDY0Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGVcbiAgNjU6XHRcdCAgd2lsbCBiZSBjYWxsZWQgdHhnYmUuXG4gIDY2Olx0XG4gIDY3Olx0Y29uZmlnIFRYR0JFVkZcbiAgNjg6XHRcdHRyaXN0YXRlIFwmIzM0O1dhbmd4dW4oUikgMTAvMjUvNDBHIFZpcnR1YWwgRnVuY3Rpb24gRXRoZXJuZXQgc3VwcG9ydFwmIzM0O1xuICA2OTpcdFx0ZGVwZW5kcyBvbiBQQ0lcbiAgNzA6XHRcdGRlcGVuZHMgb24gUENJX01TSVxuICA3MTpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuICA3MjpcdFx0c2VsZWN0IExJQldYXG4gIDczOlx0XHRoZWxwXG4gIDc0Olx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHZpcnR1YWwgZnVuY3Rpb25zIGZvciBTUDEwMDBBLCBXWDE4MjBBTCxcbiAgNzU6XHRcdCAgV1g1WFhYLCBXWDVYWFhBTC5cbiAgNzY6XHRcbiAgNzc6XHRcdCAgVGhpcyBkcml2ZXIgd2FzIGZvcm1lcmx5IG5hbWVkIHR4Z2JldmYuXG4gIDc4Olx0XG4gIDc5Olx0XHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxuICA4MDpcdFx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYucnN0XHUwMDNlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0NjUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhY2hhYmlsaXR5IGFuZCBIYXJkd2FyZSBEcml2ZXIgQ29uc2lkZXJhdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gYWRoZXJpbmcgdG8gdGhlIHJ1bGVzIHJlZ2FyZGluZyByZWFjaGFiaWxpdHksIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIGhhcmR3YXJlIGRyaXZlcnMuIFRoZSBndWlkZWxpbmVzIGFyZSBjbGVhcjogYSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIHVuZGVyIHNwZWNpZmljIG5lZ2F0aXZlIGNyaXRlcmlhLiBOb3RhYmx5LCB0aGlzIGFwcGxpZXMgdG8gc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLCBsaWtlIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzICh0aGluayBtbHhzdywgcGRzX2NvcmUsIHFlZCwgaW9uaWMsIGFtZGdwdSkgdGhhdCAqYWJzb2x1dGVseSogcmVxdWlyZSBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgdGhhdCBhcmVuJiMzOTt0IHByb3Blcmx5IGVtdWxhdGVkIGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudC4gQWxzbywgYW55dGhpbmcgdGhhdCBpbnZvbHZlcyB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMsIHN1Y2ggYXMgZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyBsaWtlIGAucmVtb3ZlYCwgYC5zaHV0ZG93bmAsIG9yIGBwY2lfdW5yZWdpc3Rlcl9kcml2ZXJgIHRoYXQgYXJlIHRyaWdnZXJlZCBvbmx5IGJ5IHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nIGlzIG9mZiB0aGUgdGFibGUuIFBhdGhzIHNwZWNpZmljIHRvIGFuIGFyY2hpdGVjdHVyZSBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGZhbGwgaW50byB0aGlzIGNhdGVnb3J5IGFzIHdlbGwuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBJcyB0aGlzIFdhbmd4dW4gRXRoZXJuZXTigJRzcGVjaWZpY2FsbHksIHRoZSBMSUJXWCwgTkdCRSwgVFhHQkUsIGFuZCBUWEdCRVZGIGRyaXZlcnPigJQgY29uc2lkZXJlZCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBOSUMgaGFyZHdhcmU/IFRoaXMgaXMgdGhlIGNydXggb2YgdGhlIG1hdHRlci4gSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGVzZSBkcml2ZXJzIHJlbHkgb24gcGh5c2ljYWwgUENJIGhhcmR3YXJlIHRoYXQgaXNuJiMzOTt0IHJlcGxpY2F0ZWQgZWZmZWN0aXZlbHkgaW4gUUVNVS4gVG8gZG8gdGhpcywgSSBuZWVkIHRvIGNoZWNrIHRoZSBQQ0kgSURzIG9mIGBOR0JFYCwgYFRYR0JFYCwgYW5kIGBUWEdCRVZGYCBhbmQgc2VlIHdoYXQgdGhleSB0ZWxsIG1lIGFib3V0IHRoZSBoYXJkd2FyZSBkZXBlbmRlbmNpZXMuIFRoYXQgc2hvdWxkIHBvaW50IG1lIGluIHRoZSByaWdodCBkaXJlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtQQ0lfREVWSUNFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1biYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA2MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSBkZWVwIGluIHRoZSB3ZWVkcyBvZiB0aGlzIHN1YmplY3Q6CgoqKkRpZ2dpbmcgaW50byB3YW5neHVuJiMzOTtzIGBwY2lfZHJpdmVyYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7TGV0JiMzOTtzIHplcm8gaW4gb24gdGhlIGBwY2lfZHJpdmVyYCB3aXRoaW4gd2FuZ3h1bi4mIzM0OyBUaGlzIG1lYW5zIEkmIzM5O20gcHJvYmFibHkgdHJvdWJsZXNob290aW5nIHNvbWV0aGluZywgb3IgcGVyaGFwcyByZXZpZXdpbmcgdGhlIGRyaXZlciYjMzk7cyBpbXBsZW1lbnRhdGlvbiBhcyBwYXJ0IG9mIGEgbGFyZ2VyIHByb2plY3QuIEkmIzM5O20gbGlrZWx5IHRhcmdldGluZyB0aGlzIHNwZWNpZmljIGFyZWEgYmVjYXVzZSBpdCYjMzk7cyBlaXRoZXIgY2F1c2luZyBhIHByb2JsZW0sIG5lZWRzIG9wdGltaXphdGlvbiwgb3IgaXMgY3JpdGljYWwgdG8gYSBzeXN0ZW0gSSYjMzk7bSB3b3JraW5nIG9uLiBUaGUgJiMzNDt3YW5neHVuJiMzNDsgcGFydCB0ZWxscyBtZSB0aGUgc2NvcGU7IEkmIzM5O20gZGVhbGluZyB3aXRoIGEgZHJpdmVyIHdpdGhpbiBhIHBhcnRpY3VsYXIgZnJhbWV3b3JrIG9yIHN5c3RlbS4gTXkgZm9jdXMgaXMgbm93IG5hcnJvd2luZzsgdGltZSB0byBkaXZlIGludG8gdGhhdCBzcGVjaWZpYyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwY2lfZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1biYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM9OTUzPXN0YXRpYyBpbnQgbmdiZV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTk4Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzo5ODM6c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG5nYmVfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTk4NC1cdC5uYW1lICAgICA9IG5nYmVfZHJpdmVyX25hbWUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTk5NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzo5OTU6bW9kdWxlX3BjaV9kcml2ZXIobmdiZV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTk5Ni1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jPTI0OT1zdGF0aWMgREVGSU5FX1NJTVBMRV9ERVZfUE1fT1BTKG5nYmV2Zl9wbV9vcHMsIHd4dmZfc3VzcGVuZCwgd3h2Zl9yZXN1bWUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYy0yNTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjI1MTpzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmdiZXZmX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmMtMjUyLVx0Lm5hbWUgICAgID0gS0JVSUxEX01PRE5BTUUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYy0yNjAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjI2MTptb2R1bGVfcGNpX2RyaXZlcihuZ2JldmZfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmMtMjYyLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jPTk5MT1zdGF0aWMgdm9pZCB0eGdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmMtMTAyMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jOjEwMjE6c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JlX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jLTEwMjItXHQubmFtZSAgICAgPSB0eGdiZV9kcml2ZXJfbmFtZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYy0xMDMwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmM6MTAzMTptb2R1bGVfcGNpX2RyaXZlcih0eGdiZV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmMtMTAzMi1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYvdHhnYmV2Zl9tYWluLmM9MzE0PXN0YXRpYyBERUZJTkVfU0lNUExFX0RFVl9QTV9PUFModHhnYmV2Zl9wbV9vcHMsIHd4dmZfc3VzcGVuZCwgd3h2Zl9yZXN1bWUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jLTMxNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYzozMTY6c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JldmZfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jLTMxNy1cdC5uYW1lICAgICA9IEtCVUlMRF9NT0ROQU1FLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYy0zMjUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYvdHhnYmV2Zl9tYWluLmM6MzI2Om1vZHVsZV9wY2lfZHJpdmVyKHR4Z2JldmZfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYy0zMjctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzU0CgkJCQkJCQlvdXRwdXQ6IDk5CgkJCQkJCQl0aG91Z2h0czogNTY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQ6IFdhbmd4dW4gRHJpdmVyIEZ1enphYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuIFdlJiMzOTtyZSBsb29raW5nIGF0IHRoZSBXYW5neHVuIGZhbWlseSBvZiBFdGhlcm5ldCBkcml2ZXJzIOKAkyBsaWJ3eCwgbmdiZSwgdHhnYmUsIGFuZCB0aGUgVkYgdmVyc2lvbnMuIFRoZXNlIGFyZSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVycyBmb3IgKnBoeXNpY2FsKiBXYW5neHVuIFBDSWUgbmV0d29yayBhZGFwdGVycy4gVGhpcyBpc24mIzM5O3QgeW91ciBzdGFuZGFyZCB2aXJ0aW8gb3IgZTEwMDAsIG9yIGV2ZW4gc29tZXRoaW5nIGVtdWxhdGVkIHdpdGhpbiBRRU1VLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCByZWFsIGhhcmR3YXJlLCBzcGVjaWZpY2FsbHkgV2FuZ3h1biYjMzk7cyBHYkUgLyAxMC8yNS80MEdiRSBQQ0llIGNhcmRzLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgZnV6emluZyB0aGlzIGNvZGUgaXMgdmlhYmxlLgoKTG9va2luZyBhdCB0aGUgY29kZSwgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIGNvbmNlbnRyYXRlZCB3aXRoaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvYC4gVGhpcyBpcyB0aGUgY29yZSBsaWJyYXJ5LCBgbGlid3hgLCBzaGFyZWQgYnkgYWxsIHRob3NlIFdhbmd4dW4gZHJpdmVycy4gVGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0b3VjaGVkIOKAkyBgd3hfc3dfaW5pdGAsIGB3eF94bWl0X2ZyYW1lX3JpbmdgLCBgd3hfcHRwX2NsZWFyX3R4X3RpbWVzdGFtcGAsIGB3eF9wdHBfdHhfaHd0c3RhbXBfd29ya2AsIGFuZCBgd3hfcHRwX3R4X2hhbmdgIOKAkyBhbGwgcmVsYXRlIHRvIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBkcml2ZXIgYW5kIHRoZSBwaHlzaWNhbCBoYXJkd2FyZS4KClRoZSBrZXkgcG9pbnQgaXMgdGhhdCB0aGUgKm9ubHkqIHdheSB0byBhY3R1YWxseSBleGVyY2lzZSB0aGVzZSBmdW5jdGlvbnMgaXMgd2l0aCBhIHBoeXNpY2FsIFdhbmd4dW4gUENJZSBOSUMuIEl0JiMzOTtzIG5vdCBnb2luZyB0byBydW4gaW4gYSB0eXBpY2FsIFFFTVUgaW5zdGFuY2Ugb3IgYW55IG9mIHRoZSBzdGFuZGFyZCB2aXJ0dWFsaXplZCB0ZXN0IGVudmlyb25tZW50cy4gVGhlIEFTSUMvUENJZSBjYXJkIGlzIGVzc2VudGlhbCB0byBleGVjdXRlIHRoZSBjb2RlLgoKVGhlcmVmb3JlLCBnaXZlbiB0aGUgc3RydWN0dXJhbCBsaW1pdGF0aW9ucywgYFdvcnRoRnV6emluZ2AgaXMgZGVmaW5pdGl2ZWx5IGBmYWxzZWAuCgpGb3IgdGhlIHJlc3VsdHMsIEkmIzM5O2xsIG5lZWQgdG8gc3BlY2lmeSB0aGUgcmVhc29uaW5nOgoKKiAgIGBXb3J0aEZ1enppbmdgOiBgZmFsc2VgCiogICBgUmVhc29uaW5nYDogVGhlIGNoYW5nZXMgYXJlIHdpdGhpbiB0aGUgV2FuZ3h1biBFdGhlcm5ldCBkcml2ZXIgbGlicmFyeSAoYGRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvYCkuIFRoaXMgbGlicmFyeSBpbnRlcmZhY2VzIHdpdGggdmVuZG9yLXNwZWNpZmljIFBDSWUgTklDIGhhcmR3YXJlIG1hbnVmYWN0dXJlZCBieSBXYW5neHVuIChuZ2JlLCB0eGdiZSwgZXRjLiksIHJlcXVpcmluZyBwaHlzaWNhbCBXYW5neHVuIEFTSUMvUENJZSBjYXJkcyBmb3IgcHJvcGVyIG9wZXJhdGlvbi4gVGhlc2UgY2FyZHMgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIG90aGVyIGNvbW1vbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoaXMgc3RydWN0dXJhbGx5IG1ha2VzIHRoZSBjb2RlIHVucmVhY2hhYmxlIGZvciBhbnkgc3RhbmRhcmQgZnV6emluZyBzZXR1cC4KKiAgIGBFbmFibGVDb25maWdzYDogYFtdYAoqICAgYEZvY3VzU3ltYm9sc2A6IGBbXWAKCkFuZCBmaW5hbGx5LCBJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2FuZ3h1biBFdGhlcm5ldCBjb21tb24gbGlicmFyeSAobGlid3gpIHVzZWQgYnkgV2FuZ3h1biBQQ0llIG5ldHdvcmsgZHJpdmVycyAobmdiZSwgdHhnYmUpLiBUaGVzZSBkcml2ZXJzIHRhcmdldCB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBOSUNzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2FuZ3h1biBFdGhlcm5ldCBjb21tb24gbGlicmFyeSAobGlid3gpIHVzZWQgYnkgV2FuZ3h1biBQQ0llIG5ldHdvcmsgZHJpdmVycyAobmdiZSwgdHhnYmUpLiBUaGVzZSBkcml2ZXJzIHRhcmdldCB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBOSUNzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODo0NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6NDc6MjAuODA0ODI1MDU5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAwMjgyMTQxMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2FuZ3h1biBFdGhlcm5ldCBjb21tb24gbGlicmFyeSAobGlid3gpIHVzZWQgYnkgV2FuZ3h1biBQQ0llIG5ldHdvcmsgZHJpdmVycyAobmdiZSwgdHhnYmUpLiBUaGVzZSBkcml2ZXJzIHRhcmdldCB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBOSUNzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODo0NzoyMC44MDQ4Mjk3OTlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNTMzNjUzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGJkZDk4MjE2MDk3ODkxNWMxN2MwNDgzZmYwMGJhMmFkMjE4Yjc1MzdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgOCAwODo0NzoxOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmNcXG5pbmRleCAxMjJjNDk1MmQyMDNmLi4xMTM1NTI1ODZiZTcwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xcbkBAIC0yNTE4LDYgKzI1MTgsNyBAQCBpbnQgd3hfc3dfaW5pdChzdHJ1Y3Qgd3ggKnd4KVxcbiBcXHR9XFxuIFxcbiBcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2d3gtXFx1MDAzZWh3X3N0YXRzX2xvY2spO1xcbitcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2d3gtXFx1MDAzZXB0cF90eF9sb2NrKTtcXG4gXFx0bXV0ZXhfaW5pdChcXHUwMDI2d3gtXFx1MDAzZXJlc2V0X2xvY2spO1xcbiBcXHRiaXRtYXBfemVybyh3eC1cXHUwMDNlc3RhdGUsIFdYX1NUQVRFX05CSVRTKTtcXG4gXFx0Yml0bWFwX3plcm8od3gtXFx1MDAzZWZsYWdzLCBXWF9QRl9GTEFHU19OQklUUyk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXFxuaW5kZXggZWQ1YWFkNzg1N2JkOS4uOTExODgxMzMzNGE5ZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xcbkBAIC0xNjEyLDYgKzE2MTIsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3Qgd3hfeG1pdF9mcmFtZV9yaW5nKHN0cnVjdCBza19idWZmICpza2IsXFxuIHtcXG4gXFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KHR4X3JpbmctXFx1MDAzZW5ldGRldik7XFxuIFxcdHUxNiBjb3VudCA9IFRYRF9VU0VfQ09VTlQoc2tiX2hlYWRsZW4oc2tiKSk7XFxuK1xcdHN0cnVjdCBza19idWZmICpwdHBfdHhfc2tiID0gTlVMTDtcXG4gXFx0c3RydWN0IHd4X3R4X2J1ZmZlciAqZmlyc3Q7XFxuIFxcdHU4IGhkcl9sZW4gPSAwLCBwdHlwZTtcXG4gXFx0dW5zaWduZWQgc2hvcnQgZjtcXG5AQCAtMTY0OSw2ICsxNjUwLDcgQEAgc3RhdGljIG5ldGRldl90eF90IHd4X3htaXRfZnJhbWVfcmluZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXG4gXFx0aWYgKHVubGlrZWx5KHNrYl9zaGluZm8oc2tiKS1cXHUwMDNldHhfZmxhZ3MgXFx1MDAyNiBTS0JUWF9IV19UU1RBTVApIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICB3eC1cXHUwMDNlcHRwX2Nsb2NrKSB7XFxuK1xcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2d3gtXFx1MDAzZXB0cF90eF9sb2NrKTtcXG4gXFx0XFx0aWYgKHd4LVxcdTAwM2V0c3RhbXBfY29uZmlnLnR4X3R5cGUgPT0gSFdUU1RBTVBfVFhfT04gXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgICF0ZXN0X2FuZF9zZXRfYml0X2xvY2soV1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLFxcbiBcXHRcXHRcXHRcXHRcXHQgICB3eC1cXHUwMDNlc3RhdGUpKSB7XFxuQEAgLTE2NTksNiArMTY2MSw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCB3eF94bWl0X2ZyYW1lX3Jpbmcoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0d3gtXFx1MDAzZXR4X2h3dHN0YW1wX3NraXBwZWQrKztcXG4gXFx0XFx0fVxcbitcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2d3gtXFx1MDAzZXB0cF90eF9sb2NrKTtcXG4gXFx0fVxcbiBcXG4gXFx0LyogcmVjb3JkIGluaXRpYWwgZmxhZ3MgYW5kIHByb3RvY29sICovXFxuQEAgLTE2ODUsMTAgKzE2ODgsMTcgQEAgc3RhdGljIG5ldGRldl90eF90IHd4X3htaXRfZnJhbWVfcmluZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRmaXJzdC1cXHUwMDNlc2tiID0gTlVMTDtcXG4gY2xlYW51cF90eF90c3RhbXA6XFxuIFxcdGlmICh1bmxpa2VseSh0eF9mbGFncyBcXHUwMDI2IFdYX1RYX0ZMQUdTX1RTVEFNUCkpIHtcXG4tXFx0XFx0ZGV2X2tmcmVlX3NrYl9hbnkod3gtXFx1MDAzZXB0cF90eF9za2IpO1xcbi1cXHRcXHR3eC1cXHUwMDNlcHRwX3R4X3NrYiA9IE5VTEw7XFxuK1xcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2d3gtXFx1MDAzZXB0cF90eF9sb2NrKTtcXG4rXFx0XFx0aWYgKHd4LVxcdTAwM2VwdHBfdHhfc2tiID09IHNrYikge1xcbitcXHRcXHRcXHRwdHBfdHhfc2tiID0gd3gtXFx1MDAzZXB0cF90eF9za2I7XFxuK1xcdFxcdFxcdHd4LVxcdTAwM2VwdHBfdHhfc2tiID0gTlVMTDtcXG4rXFx0XFx0XFx0Y2xlYXJfYml0X3VubG9jayhXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsXFxuK1xcdFxcdFxcdFxcdFxcdCB3eC1cXHUwMDNlc3RhdGUpO1xcbitcXHRcXHR9XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ3eC1cXHUwMDNlcHRwX3R4X2xvY2spO1xcbitcXG4rXFx0XFx0ZGV2X2tmcmVlX3NrYl9hbnkocHRwX3R4X3NrYik7XFxuIFxcdFxcdHd4LVxcdTAwM2V0eF9od3RzdGFtcF9lcnJvcnMrKztcXG4tXFx0XFx0Y2xlYXJfYml0X3VubG9jayhXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsIHd4LVxcdTAwM2VzdGF0ZSk7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiBORVRERVZfVFhfT0s7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXFxuaW5kZXggNDcwOGU3ZjM5NThmNy4uYTA5MjliNDg0NGU4ZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xcbkBAIC0xMzksMTIgKzEzOSwxNiBAQCBzdGF0aWMgaW50IHd4X3B0cF9zZXR0aW1lNjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsXFxuICAqL1xcbiBzdGF0aWMgdm9pZCB3eF9wdHBfY2xlYXJfdHhfdGltZXN0YW1wKHN0cnVjdCB3eCAqd3gpXFxuIHtcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4rXFxuK1xcdHNwaW5fbG9ja19iaChcXHUwMDI2d3gtXFx1MDAzZXB0cF90eF9sb2NrKTtcXG4gXFx0cmQzMnB0cCh3eCwgV1hfVFNDXzE1ODhfU1RNUEgpO1xcbi1cXHRpZiAod3gtXFx1MDAzZXB0cF90eF9za2IpIHtcXG4tXFx0XFx0ZGV2X2tmcmVlX3NrYl9hbnkod3gtXFx1MDAzZXB0cF90eF9za2IpO1xcbi1cXHRcXHR3eC1cXHUwMDNlcHRwX3R4X3NrYiA9IE5VTEw7XFxuLVxcdH1cXG4rXFx0c2tiID0gd3gtXFx1MDAzZXB0cF90eF9za2I7XFxuK1xcdHd4LVxcdTAwM2VwdHBfdHhfc2tiID0gTlVMTDtcXG4gXFx0Y2xlYXJfYml0X3VubG9jayhXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsIHd4LVxcdTAwM2VzdGF0ZSk7XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ3eC1cXHUwMDNlcHRwX3R4X2xvY2spO1xcbitcXG4rXFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTE3NCw1MCArMTc4LDQzIEBAIHN0YXRpYyB2b2lkIHd4X3B0cF9jb252ZXJ0X3RvX2h3dHN0YW1wKHN0cnVjdCB3eCAqd3gsXFxuIFxcdGh3dHN0YW1wLVxcdTAwM2Vod3RzdGFtcCA9IG5zX3RvX2t0aW1lKG5zKTtcXG4gfVxcbiBcXG4tLyoqXFxuLSAqIHd4X3B0cF90eF9od3RzdGFtcCAtIHV0aWxpdHkgZnVuY3Rpb24gd2hpY2ggY2hlY2tzIGZvciBUWCB0aW1lIHN0YW1wXFxuLSAqIEB3eDogdGhlIHByaXZhdGUgYm9hcmQgc3RydWN0XFxuLSAqXFxuLSAqIGlmIHRoZSB0aW1lc3RhbXAgaXMgdmFsaWQsIHdlIGNvbnZlcnQgaXQgaW50byB0aGUgdGltZWNvdW50ZXIgbnNcXG4tICogdmFsdWUsIHRoZW4gc3RvcmUgdGhhdCByZXN1bHQgaW50byB0aGUgc2hod3RzdGFtcHMgc3RydWN0dXJlIHdoaWNoXFxuLSAqIGlzIHBhc3NlZCB1cCB0aGUgbmV0d29yayBzdGFja1xcbi0gKi9cXG4tc3RhdGljIHZvaWQgd3hfcHRwX3R4X2h3dHN0YW1wKHN0cnVjdCB3eCAqd3gpXFxuK3N0YXRpYyBpbnQgd3hfcHRwX3R4X2h3dHN0YW1wX3dvcmsoc3RydWN0IHd4ICp3eClcXG4ge1xcbiBcXHRzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMgc2hod3RzdGFtcHM7XFxuLVxcdHN0cnVjdCBza19idWZmICpza2IgPSB3eC1cXHUwMDNlcHRwX3R4X3NrYjtcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4rXFx0dTMyIHRzeW5jdHhjdGw7XFxuIFxcdHU2NCByZWd2YWwgPSAwO1xcbiBcXG4tXFx0cmVndmFsIHw9ICh1NjQpcmQzMnB0cCh3eCwgV1hfVFNDXzE1ODhfU1RNUEwpO1xcbi1cXHRyZWd2YWwgfD0gKHU2NClyZDMycHRwKHd4LCBXWF9UU0NfMTU4OF9TVE1QSCkgXFx1MDAzY1xcdTAwM2MgMzI7XFxuLVxcbi1cXHR3eF9wdHBfY29udmVydF90b19od3RzdGFtcCh3eCwgXFx1MDAyNnNoaHd0c3RhbXBzLCByZWd2YWwpO1xcbi1cXG4tXFx0d3gtXFx1MDAzZXB0cF90eF9za2IgPSBOVUxMO1xcbi1cXHRjbGVhcl9iaXRfdW5sb2NrKFdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUywgd3gtXFx1MDAzZXN0YXRlKTtcXG4tXFx0c2tiX3RzdGFtcF90eChza2IsIFxcdTAwMjZzaGh3dHN0YW1wcyk7XFxuLVxcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XFxuLVxcdHd4LVxcdTAwM2V0eF9od3RzdGFtcF9wa3RzKys7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgd3hfcHRwX3R4X2h3dHN0YW1wX3dvcmsoc3RydWN0IHd4ICp3eClcXG4te1xcbi1cXHR1MzIgdHN5bmN0eGN0bDtcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ3eC1cXHUwMDNlcHRwX3R4X2xvY2spO1xcbiBcXG4gXFx0Lyogd2UgaGF2ZSB0byBoYXZlIGEgdmFsaWQgc2tiIHRvIHBvbGwgZm9yIGEgdGltZXN0YW1wICovXFxuIFxcdGlmICghd3gtXFx1MDAzZXB0cF90eF9za2IpIHtcXG4tXFx0XFx0d3hfcHRwX2NsZWFyX3R4X3RpbWVzdGFtcCh3eCk7XFxuK1xcdFxcdHJkMzJwdHAod3gsIFdYX1RTQ18xNTg4X1NUTVBIKTtcXG4rXFx0XFx0Y2xlYXJfYml0X3VubG9jayhXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsIHd4LVxcdTAwM2VzdGF0ZSk7XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ3eC1cXHUwMDNlcHRwX3R4X2xvY2spO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXG4gXFx0Lyogc3RvcCBwb2xsaW5nIG9uY2Ugd2UgaGF2ZSBhIHZhbGlkIHRpbWVzdGFtcCAqL1xcbiBcXHR0c3luY3R4Y3RsID0gcmQzMnB0cCh3eCwgV1hfVFNDXzE1ODhfQ1RMKTtcXG4tXFx0aWYgKHRzeW5jdHhjdGwgXFx1MDAyNiBXWF9UU0NfMTU4OF9DVExfVkFMSUQpIHtcXG4tXFx0XFx0d3hfcHRwX3R4X2h3dHN0YW1wKHd4KTtcXG4tXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGlmICghKHRzeW5jdHhjdGwgXFx1MDAyNiBXWF9UU0NfMTU4OF9DVExfVkFMSUQpKSB7XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ3eC1cXHUwMDNlcHRwX3R4X2xvY2spO1xcbitcXHRcXHRyZXR1cm4gLTE7XFxuIFxcdH1cXG4gXFxuLVxcdHJldHVybiAtMTtcXG4rXFx0cmVndmFsIHw9ICh1NjQpcmQzMnB0cCh3eCwgV1hfVFNDXzE1ODhfU1RNUEwpO1xcbitcXHRyZWd2YWwgfD0gKHU2NClyZDMycHRwKHd4LCBXWF9UU0NfMTU4OF9TVE1QSCkgXFx1MDAzY1xcdTAwM2MgMzI7XFxuK1xcdHd4X3B0cF9jb252ZXJ0X3RvX2h3dHN0YW1wKHd4LCBcXHUwMDI2c2hod3RzdGFtcHMsIHJlZ3ZhbCk7XFxuK1xcdHNrYiA9IHd4LVxcdTAwM2VwdHBfdHhfc2tiO1xcbitcXHR3eC1cXHUwMDNlcHRwX3R4X3NrYiA9IE5VTEw7XFxuK1xcdGNsZWFyX2JpdF91bmxvY2soV1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLCB3eC1cXHUwMDNlc3RhdGUpO1xcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2d3gtXFx1MDAzZXB0cF90eF9sb2NrKTtcXG4rXFxuK1xcdHNrYl90c3RhbXBfdHgoc2tiLCBcXHUwMDI2c2hod3RzdGFtcHMpO1xcbitcXHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xcbitcXHR3eC1cXHUwMDNldHhfaHd0c3RhbXBfcGt0cysrO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC0yOTYsMjQgKzI5MywzMCBAQCBzdGF0aWMgdm9pZCB3eF9wdHBfcnhfaGFuZyhzdHJ1Y3Qgd3ggKnd4KVxcbiAgKi9cXG4gc3RhdGljIHZvaWQgd3hfcHRwX3R4X2hhbmcoc3RydWN0IHd4ICp3eClcXG4ge1xcbi1cXHRib29sIHRpbWVvdXQgPSB0aW1lX2lzX2JlZm9yZV9qaWZmaWVzKHd4LVxcdTAwM2VwdHBfdHhfc3RhcnQgK1xcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBXWF9QVFBfVFhfVElNRU9VVCk7XFxuK1xcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xcbiBcXG4tXFx0aWYgKCF3eC1cXHUwMDNlcHRwX3R4X3NrYilcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4tXFx0aWYgKCF0ZXN0X2JpdChXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuLVxcdFxcdHJldHVybjtcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ3eC1cXHUwMDNlcHRwX3R4X2xvY2spO1xcbiBcXG4gXFx0LyogSWYgd2UgaGF2ZW4ndCByZWNlaXZlZCBhIHRpbWVzdGFtcCB3aXRoaW4gdGhlIHRpbWVvdXQsIGl0IGlzXFxuIFxcdCAqIHJlYXNvbmFibGUgdG8gYXNzdW1lIHRoYXQgaXQgd2lsbCBuZXZlciBvY2N1ciwgc28gd2UgY2FuIHVubG9jayB0aGVcXG4gXFx0ICogdGltZXN0YW1wIGJpdCB3aGVuIHRoaXMgb2NjdXJzLlxcbiBcXHQgKi9cXG4tXFx0aWYgKHRpbWVvdXQpIHtcXG4tXFx0XFx0d3hfcHRwX2NsZWFyX3R4X3RpbWVzdGFtcCh3eCk7XFxuLVxcdFxcdHd4LVxcdTAwM2V0eF9od3RzdGFtcF90aW1lb3V0cysrO1xcbi1cXHRcXHRkZXZfd2FybihcXHUwMDI2d3gtXFx1MDAzZXBkZXYtXFx1MDAzZWRldiwgXFxcImNsZWFyaW5nIFR4IHRpbWVzdGFtcCBoYW5nXFxcXG5cXFwiKTtcXG4rXFx0aWYgKHd4LVxcdTAwM2VwdHBfdHhfc2tiIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsIHd4LVxcdTAwM2VzdGF0ZSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHRpbWVfaXNfYmVmb3JlX2ppZmZpZXMod3gtXFx1MDAzZXB0cF90eF9zdGFydCArIFdYX1BUUF9UWF9USU1FT1VUKSkge1xcbitcXHRcXHRyZDMycHRwKHd4LCBXWF9UU0NfMTU4OF9TVE1QSCk7XFxuK1xcdFxcdHNrYiA9IHd4LVxcdTAwM2VwdHBfdHhfc2tiO1xcbitcXHRcXHR3eC1cXHUwMDNlcHRwX3R4X3NrYiA9IE5VTEw7XFxuK1xcdFxcdGNsZWFyX2JpdF91bmxvY2soV1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLCB3eC1cXHUwMDNlc3RhdGUpO1xcbiBcXHR9XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ3eC1cXHUwMDNlcHRwX3R4X2xvY2spO1xcbitcXG4rXFx0aWYgKCFza2IpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XFxuK1xcdHd4LVxcdTAwM2V0eF9od3RzdGFtcF90aW1lb3V0cysrO1xcbitcXHRkZXZfd2FybihcXHUwMDI2d3gtXFx1MDAzZXBkZXYtXFx1MDAzZWRldiwgXFxcImNsZWFyaW5nIFR4IHRpbWVzdGFtcCBoYW5nXFxcXG5cXFwiKTtcXG4gfVxcbiBcXG4gc3RhdGljIGxvbmcgd3hfcHRwX2RvX2F1eF93b3JrKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwKVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXFxuaW5kZXggOTQ1NGU5MDI1OGQ4ZS4uNmI5NDYwMTQ3Y2E5MyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXFxuQEAgLTE0MzAsNiArMTQzMCw3IEBAIHN0cnVjdCB3eCB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbGFzdF9vdmVyZmxvd19jaGVjaztcXG4gXFx0dW5zaWduZWQgbG9uZyBsYXN0X3J4X3B0cF9jaGVjaztcXG4gXFx0dW5zaWduZWQgbG9uZyBwdHBfdHhfc3RhcnQ7XFxuK1xcdHNwaW5sb2NrX3QgcHRwX3R4X2xvY2s7IC8qIHByb3RlY3RzIHB0cF90eF9za2IgYW5kIHB0cF90eF9zdGFydCAqL1xcbiBcXHRzZXFsb2NrX3QgaHdfdGNfbG9jazsgLyogc2VxbG9jayBmb3IgcHRwICovXFxuIFxcdHN0cnVjdCBjeWNsZWNvdW50ZXIgaHdfY2M7XFxuIFxcdHN0cnVjdCB0aW1lY291bnRlciBod190YztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6NDc6MjEuNDEwNzgwMzk5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxOTQyMjIyODA4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdhbmd4dW4gRXRoZXJuZXQgY29tbW9uIGxpYnJhcnkgKGxpYnd4KSB1c2VkIGJ5IFdhbmd4dW4gUENJZSBuZXR3b3JrIGRyaXZlcnMgKG5nYmUsIHR4Z2JlKS4gVGhlc2UgZHJpdmVycyB0YXJnZXQgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgTklDcyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiZGQ5ODIxNjA5Nzg5MTVjMTdjMDQ4M2ZmMDBiYTJhZDIxOGI3NTM3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAwODo0NzoxOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xuaW5kZXggMTIyYzQ5NTJkMjAzZi4uMTEzNTUyNTg2YmU3MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXG5AQCAtMjUxOCw2ICsyNTE4LDcgQEAgaW50IHd4X3N3X2luaXQoc3RydWN0IHd4ICp3eClcbiBcdH1cbiBcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNnd4LVx1MDAzZWh3X3N0YXRzX2xvY2spO1xuK1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2d3gtXHUwMDNlcHRwX3R4X2xvY2spO1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZ3eC1cdTAwM2VyZXNldF9sb2NrKTtcbiBcdGJpdG1hcF96ZXJvKHd4LVx1MDAzZXN0YXRlLCBXWF9TVEFURV9OQklUUyk7XG4gXHRiaXRtYXBfemVybyh3eC1cdTAwM2VmbGFncywgV1hfUEZfRkxBR1NfTkJJVFMpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXG5pbmRleCBlZDVhYWQ3ODU3YmQ5Li45MTE4ODEzMzM0YTllIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xuQEAgLTE2MTIsNiArMTYxMiw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCB3eF94bWl0X2ZyYW1lX3Jpbmcoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiB7XG4gXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYodHhfcmluZy1cdTAwM2VuZXRkZXYpO1xuIFx0dTE2IGNvdW50ID0gVFhEX1VTRV9DT1VOVChza2JfaGVhZGxlbihza2IpKTtcbitcdHN0cnVjdCBza19idWZmICpwdHBfdHhfc2tiID0gTlVMTDtcbiBcdHN0cnVjdCB3eF90eF9idWZmZXIgKmZpcnN0O1xuIFx0dTggaGRyX2xlbiA9IDAsIHB0eXBlO1xuIFx0dW5zaWduZWQgc2hvcnQgZjtcbkBAIC0xNjQ5LDYgKzE2NTAsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3Qgd3hfeG1pdF9mcmFtZV9yaW5nKHN0cnVjdCBza19idWZmICpza2IsXG4gXG4gXHRpZiAodW5saWtlbHkoc2tiX3NoaW5mbyhza2IpLVx1MDAzZXR4X2ZsYWdzIFx1MDAyNiBTS0JUWF9IV19UU1RBTVApIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHd4LVx1MDAzZXB0cF9jbG9jaykge1xuK1x0XHRzcGluX2xvY2tfYmgoXHUwMDI2d3gtXHUwMDNlcHRwX3R4X2xvY2spO1xuIFx0XHRpZiAod3gtXHUwMDNldHN0YW1wX2NvbmZpZy50eF90eXBlID09IEhXVFNUQU1QX1RYX09OIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgIXRlc3RfYW5kX3NldF9iaXRfbG9jayhXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsXG4gXHRcdFx0XHRcdCAgIHd4LVx1MDAzZXN0YXRlKSkge1xuQEAgLTE2NTksNiArMTY2MSw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCB3eF94bWl0X2ZyYW1lX3Jpbmcoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHR3eC1cdTAwM2V0eF9od3RzdGFtcF9za2lwcGVkKys7XG4gXHRcdH1cbitcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2d3gtXHUwMDNlcHRwX3R4X2xvY2spO1xuIFx0fVxuIFxuIFx0LyogcmVjb3JkIGluaXRpYWwgZmxhZ3MgYW5kIHByb3RvY29sICovXG5AQCAtMTY4NSwxMCArMTY4OCwxNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3Qgd3hfeG1pdF9mcmFtZV9yaW5nKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRmaXJzdC1cdTAwM2Vza2IgPSBOVUxMO1xuIGNsZWFudXBfdHhfdHN0YW1wOlxuIFx0aWYgKHVubGlrZWx5KHR4X2ZsYWdzIFx1MDAyNiBXWF9UWF9GTEFHU19UU1RBTVApKSB7XG4tXHRcdGRldl9rZnJlZV9za2JfYW55KHd4LVx1MDAzZXB0cF90eF9za2IpO1xuLVx0XHR3eC1cdTAwM2VwdHBfdHhfc2tiID0gTlVMTDtcbitcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnd4LVx1MDAzZXB0cF90eF9sb2NrKTtcbitcdFx0aWYgKHd4LVx1MDAzZXB0cF90eF9za2IgPT0gc2tiKSB7XG4rXHRcdFx0cHRwX3R4X3NrYiA9IHd4LVx1MDAzZXB0cF90eF9za2I7XG4rXHRcdFx0d3gtXHUwMDNlcHRwX3R4X3NrYiA9IE5VTEw7XG4rXHRcdFx0Y2xlYXJfYml0X3VubG9jayhXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsXG4rXHRcdFx0XHRcdCB3eC1cdTAwM2VzdGF0ZSk7XG4rXHRcdH1cbitcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2d3gtXHUwMDNlcHRwX3R4X2xvY2spO1xuK1xuK1x0XHRkZXZfa2ZyZWVfc2tiX2FueShwdHBfdHhfc2tiKTtcbiBcdFx0d3gtXHUwMDNldHhfaHd0c3RhbXBfZXJyb3JzKys7XG4tXHRcdGNsZWFyX2JpdF91bmxvY2soV1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLCB3eC1cdTAwM2VzdGF0ZSk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gTkVUREVWX1RYX09LO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXG5pbmRleCA0NzA4ZTdmMzk1OGY3Li5hMDkyOWI0ODQ0ZThkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xuQEAgLTEzOSwxMiArMTM5LDE2IEBAIHN0YXRpYyBpbnQgd3hfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCxcbiAgKi9cbiBzdGF0aWMgdm9pZCB3eF9wdHBfY2xlYXJfdHhfdGltZXN0YW1wKHN0cnVjdCB3eCAqd3gpXG4ge1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbitcbitcdHNwaW5fbG9ja19iaChcdTAwMjZ3eC1cdTAwM2VwdHBfdHhfbG9jayk7XG4gXHRyZDMycHRwKHd4LCBXWF9UU0NfMTU4OF9TVE1QSCk7XG4tXHRpZiAod3gtXHUwMDNlcHRwX3R4X3NrYikge1xuLVx0XHRkZXZfa2ZyZWVfc2tiX2FueSh3eC1cdTAwM2VwdHBfdHhfc2tiKTtcbi1cdFx0d3gtXHUwMDNlcHRwX3R4X3NrYiA9IE5VTEw7XG4tXHR9XG4rXHRza2IgPSB3eC1cdTAwM2VwdHBfdHhfc2tiO1xuK1x0d3gtXHUwMDNlcHRwX3R4X3NrYiA9IE5VTEw7XG4gXHRjbGVhcl9iaXRfdW5sb2NrKFdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUywgd3gtXHUwMDNlc3RhdGUpO1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2d3gtXHUwMDNlcHRwX3R4X2xvY2spO1xuK1xuK1x0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiB9XG4gXG4gLyoqXG5AQCAtMTc0LDUwICsxNzgsNDMgQEAgc3RhdGljIHZvaWQgd3hfcHRwX2NvbnZlcnRfdG9faHd0c3RhbXAoc3RydWN0IHd4ICp3eCxcbiBcdGh3dHN0YW1wLVx1MDAzZWh3dHN0YW1wID0gbnNfdG9fa3RpbWUobnMpO1xuIH1cbiBcbi0vKipcbi0gKiB3eF9wdHBfdHhfaHd0c3RhbXAgLSB1dGlsaXR5IGZ1bmN0aW9uIHdoaWNoIGNoZWNrcyBmb3IgVFggdGltZSBzdGFtcFxuLSAqIEB3eDogdGhlIHByaXZhdGUgYm9hcmQgc3RydWN0XG4tICpcbi0gKiBpZiB0aGUgdGltZXN0YW1wIGlzIHZhbGlkLCB3ZSBjb252ZXJ0IGl0IGludG8gdGhlIHRpbWVjb3VudGVyIG5zXG4tICogdmFsdWUsIHRoZW4gc3RvcmUgdGhhdCByZXN1bHQgaW50byB0aGUgc2hod3RzdGFtcHMgc3RydWN0dXJlIHdoaWNoXG4tICogaXMgcGFzc2VkIHVwIHRoZSBuZXR3b3JrIHN0YWNrXG4tICovXG4tc3RhdGljIHZvaWQgd3hfcHRwX3R4X2h3dHN0YW1wKHN0cnVjdCB3eCAqd3gpXG4rc3RhdGljIGludCB3eF9wdHBfdHhfaHd0c3RhbXBfd29yayhzdHJ1Y3Qgd3ggKnd4KVxuIHtcbiBcdHN0cnVjdCBza2Jfc2hhcmVkX2h3dHN0YW1wcyBzaGh3dHN0YW1wcztcbi1cdHN0cnVjdCBza19idWZmICpza2IgPSB3eC1cdTAwM2VwdHBfdHhfc2tiO1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbitcdHUzMiB0c3luY3R4Y3RsO1xuIFx0dTY0IHJlZ3ZhbCA9IDA7XG4gXG4tXHRyZWd2YWwgfD0gKHU2NClyZDMycHRwKHd4LCBXWF9UU0NfMTU4OF9TVE1QTCk7XG4tXHRyZWd2YWwgfD0gKHU2NClyZDMycHRwKHd4LCBXWF9UU0NfMTU4OF9TVE1QSCkgXHUwMDNjXHUwMDNjIDMyO1xuLVxuLVx0d3hfcHRwX2NvbnZlcnRfdG9faHd0c3RhbXAod3gsIFx1MDAyNnNoaHd0c3RhbXBzLCByZWd2YWwpO1xuLVxuLVx0d3gtXHUwMDNlcHRwX3R4X3NrYiA9IE5VTEw7XG4tXHRjbGVhcl9iaXRfdW5sb2NrKFdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUywgd3gtXHUwMDNlc3RhdGUpO1xuLVx0c2tiX3RzdGFtcF90eChza2IsIFx1MDAyNnNoaHd0c3RhbXBzKTtcbi1cdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4tXHR3eC1cdTAwM2V0eF9od3RzdGFtcF9wa3RzKys7XG4tfVxuLVxuLXN0YXRpYyBpbnQgd3hfcHRwX3R4X2h3dHN0YW1wX3dvcmsoc3RydWN0IHd4ICp3eClcbi17XG4tXHR1MzIgdHN5bmN0eGN0bDtcbitcdHNwaW5fbG9ja19iaChcdTAwMjZ3eC1cdTAwM2VwdHBfdHhfbG9jayk7XG4gXG4gXHQvKiB3ZSBoYXZlIHRvIGhhdmUgYSB2YWxpZCBza2IgdG8gcG9sbCBmb3IgYSB0aW1lc3RhbXAgKi9cbiBcdGlmICghd3gtXHUwMDNlcHRwX3R4X3NrYikge1xuLVx0XHR3eF9wdHBfY2xlYXJfdHhfdGltZXN0YW1wKHd4KTtcbitcdFx0cmQzMnB0cCh3eCwgV1hfVFNDXzE1ODhfU1RNUEgpO1xuK1x0XHRjbGVhcl9iaXRfdW5sb2NrKFdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUywgd3gtXHUwMDNlc3RhdGUpO1xuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZ3eC1cdTAwM2VwdHBfdHhfbG9jayk7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuIFx0Lyogc3RvcCBwb2xsaW5nIG9uY2Ugd2UgaGF2ZSBhIHZhbGlkIHRpbWVzdGFtcCAqL1xuIFx0dHN5bmN0eGN0bCA9IHJkMzJwdHAod3gsIFdYX1RTQ18xNTg4X0NUTCk7XG4tXHRpZiAodHN5bmN0eGN0bCBcdTAwMjYgV1hfVFNDXzE1ODhfQ1RMX1ZBTElEKSB7XG4tXHRcdHd4X3B0cF90eF9od3RzdGFtcCh3eCk7XG4tXHRcdHJldHVybiAwO1xuK1x0aWYgKCEodHN5bmN0eGN0bCBcdTAwMjYgV1hfVFNDXzE1ODhfQ1RMX1ZBTElEKSkge1xuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZ3eC1cdTAwM2VwdHBfdHhfbG9jayk7XG4rXHRcdHJldHVybiAtMTtcbiBcdH1cbiBcbi1cdHJldHVybiAtMTtcbitcdHJlZ3ZhbCB8PSAodTY0KXJkMzJwdHAod3gsIFdYX1RTQ18xNTg4X1NUTVBMKTtcbitcdHJlZ3ZhbCB8PSAodTY0KXJkMzJwdHAod3gsIFdYX1RTQ18xNTg4X1NUTVBIKSBcdTAwM2NcdTAwM2MgMzI7XG4rXHR3eF9wdHBfY29udmVydF90b19od3RzdGFtcCh3eCwgXHUwMDI2c2hod3RzdGFtcHMsIHJlZ3ZhbCk7XG4rXHRza2IgPSB3eC1cdTAwM2VwdHBfdHhfc2tiO1xuK1x0d3gtXHUwMDNlcHRwX3R4X3NrYiA9IE5VTEw7XG4rXHRjbGVhcl9iaXRfdW5sb2NrKFdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUywgd3gtXHUwMDNlc3RhdGUpO1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2d3gtXHUwMDNlcHRwX3R4X2xvY2spO1xuK1xuK1x0c2tiX3RzdGFtcF90eChza2IsIFx1MDAyNnNoaHd0c3RhbXBzKTtcbitcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4rXHR3eC1cdTAwM2V0eF9od3RzdGFtcF9wa3RzKys7XG4rXG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gLyoqXG5AQCAtMjk2LDI0ICsyOTMsMzAgQEAgc3RhdGljIHZvaWQgd3hfcHRwX3J4X2hhbmcoc3RydWN0IHd4ICp3eClcbiAgKi9cbiBzdGF0aWMgdm9pZCB3eF9wdHBfdHhfaGFuZyhzdHJ1Y3Qgd3ggKnd4KVxuIHtcbi1cdGJvb2wgdGltZW91dCA9IHRpbWVfaXNfYmVmb3JlX2ppZmZpZXMod3gtXHUwMDNlcHRwX3R4X3N0YXJ0ICtcbi1cdFx0XHRcdFx0ICAgICAgV1hfUFRQX1RYX1RJTUVPVVQpO1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7XG4gXG4tXHRpZiAoIXd4LVx1MDAzZXB0cF90eF9za2IpXG4tXHRcdHJldHVybjtcbi1cbi1cdGlmICghdGVzdF9iaXQoV1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLCB3eC1cdTAwM2VzdGF0ZSkpXG4tXHRcdHJldHVybjtcbitcdHNwaW5fbG9ja19iaChcdTAwMjZ3eC1cdTAwM2VwdHBfdHhfbG9jayk7XG4gXG4gXHQvKiBJZiB3ZSBoYXZlbid0IHJlY2VpdmVkIGEgdGltZXN0YW1wIHdpdGhpbiB0aGUgdGltZW91dCwgaXQgaXNcbiBcdCAqIHJlYXNvbmFibGUgdG8gYXNzdW1lIHRoYXQgaXQgd2lsbCBuZXZlciBvY2N1ciwgc28gd2UgY2FuIHVubG9jayB0aGVcbiBcdCAqIHRpbWVzdGFtcCBiaXQgd2hlbiB0aGlzIG9jY3Vycy5cbiBcdCAqL1xuLVx0aWYgKHRpbWVvdXQpIHtcbi1cdFx0d3hfcHRwX2NsZWFyX3R4X3RpbWVzdGFtcCh3eCk7XG4tXHRcdHd4LVx1MDAzZXR4X2h3dHN0YW1wX3RpbWVvdXRzKys7XG4tXHRcdGRldl93YXJuKFx1MDAyNnd4LVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBcImNsZWFyaW5nIFR4IHRpbWVzdGFtcCBoYW5nXFxuXCIpO1xuK1x0aWYgKHd4LVx1MDAzZXB0cF90eF9za2IgXHUwMDI2XHUwMDI2XG4rXHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLCB3eC1cdTAwM2VzdGF0ZSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgdGltZV9pc19iZWZvcmVfamlmZmllcyh3eC1cdTAwM2VwdHBfdHhfc3RhcnQgKyBXWF9QVFBfVFhfVElNRU9VVCkpIHtcbitcdFx0cmQzMnB0cCh3eCwgV1hfVFNDXzE1ODhfU1RNUEgpO1xuK1x0XHRza2IgPSB3eC1cdTAwM2VwdHBfdHhfc2tiO1xuK1x0XHR3eC1cdTAwM2VwdHBfdHhfc2tiID0gTlVMTDtcbitcdFx0Y2xlYXJfYml0X3VubG9jayhXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsIHd4LVx1MDAzZXN0YXRlKTtcbiBcdH1cbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnd4LVx1MDAzZXB0cF90eF9sb2NrKTtcbitcbitcdGlmICghc2tiKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuK1x0d3gtXHUwMDNldHhfaHd0c3RhbXBfdGltZW91dHMrKztcbitcdGRldl93YXJuKFx1MDAyNnd4LVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBcImNsZWFyaW5nIFR4IHRpbWVzdGFtcCBoYW5nXFxuXCIpO1xuIH1cbiBcbiBzdGF0aWMgbG9uZyB3eF9wdHBfZG9fYXV4X3dvcmsoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHApXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxuaW5kZXggOTQ1NGU5MDI1OGQ4ZS4uNmI5NDYwMTQ3Y2E5MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxuQEAgLTE0MzAsNiArMTQzMCw3IEBAIHN0cnVjdCB3eCB7XG4gXHR1bnNpZ25lZCBsb25nIGxhc3Rfb3ZlcmZsb3dfY2hlY2s7XG4gXHR1bnNpZ25lZCBsb25nIGxhc3RfcnhfcHRwX2NoZWNrO1xuIFx0dW5zaWduZWQgbG9uZyBwdHBfdHhfc3RhcnQ7XG4rXHRzcGlubG9ja190IHB0cF90eF9sb2NrOyAvKiBwcm90ZWN0cyBwdHBfdHhfc2tiIGFuZCBwdHBfdHhfc3RhcnQgKi9cbiBcdHNlcWxvY2tfdCBod190Y19sb2NrOyAvKiBzZXFsb2NrIGZvciBwdHAgKi9cbiBcdHN0cnVjdCBjeWNsZWNvdW50ZXIgaHdfY2M7XG4gXHRzdHJ1Y3QgdGltZWNvdW50ZXIgaHdfdGM7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODo0NzoyMS40MTA3ODE3NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2MDAyMjY3MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXZhbHVhdGluZyB0aGUgUGF0Y2gncyBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBhc2tlZCB0byBhc3Nlc3MgaWYgdGhpcyBwYXRjaCBpcyBhIGdvb2QgY2FuZGlkYXRlIGZvciBTeXprYWxsZXIgZnV6emluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdGhpczogbGV0J3MgZGl2ZSBpbi4gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGJlaW5nIGNoYW5nZWQuIFRoZSBwYXRjaCB0b3VjaGVzIHRoZXNlIGZpbGVzOiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jYCwgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNgLCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY2AsIGFuZCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmhgLiBUaGF0IHRlbGxzIG1lIGl0J3MgZGVhbGluZyB3aXRoIHRoZSBuZXR3b3JrIHN0YWNrLCBzcGVjaWZpY2FsbHkgc29tZSBgd2FuZ3h1bmAgZXRoZXJuZXQgZHJpdmVyLiBUaGUgZmFjdCBpdCB0b3VjaGVzIGJvdGggYC5jYCBhbmQgYC5oYCBmaWxlcyBpcyBhIGdvb2Qgc2lnbiwgYW5kIHRoZSBmYWN0IHRoYXQgaXRzIGluIHRoZSBkcml2ZXJzIHNlY3Rpb24gaXMgZXZlbiBiZXR0ZXIuIFRoaXMgc3VnZ2VzdHMgdGhlIGNoYW5nZSBpcyBhZGRpbmcgb3IgbW9kaWZ5aW5nIGZ1bmN0aW9uYWxpdHkgcmVsYXRlZCB0byBoYXJkd2FyZSBpbnRlcmFjdGlvbiBhbmQgZGF0YSBzdHJ1Y3R1cmVzLlxuXG5Ob3csIG15IG5leHQgcXVlc3Rpb24gaXM6IHdoYXQgKmlzKiB0aGlzIGB3YW5neHVuYCBkcml2ZXI/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGtlcm5lbCBhbmQgdGhlIGhhcmR3YXJlLiBJJ2xsIG5lZWQgdG8gdXNlIGVpdGhlciBncmVwcGVyLCBvciBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcywgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZS4gVGhpcyBjb250ZXh0IGlzIGNyaXRpY2FsIGZvciBkZWNpZGluZyBpZiB0aGVyZSBhcmUgbGlrZWx5IHRvIGJlIGludGVyZXN0aW5nIGFuZCBmdXp6ZXItYWNjZXNzaWJsZSBjb2RlIHBhdGhzIGluIHRoZSBjaGFuZ2VzLiBJZiBpdCBpcyBpbnRlcmVzdGluZywgdGhlbiBJJ2xsIGRlbHZlIGRlZXBlciBhbmQgc2VlIGlmIHRoZSBjaGFuZ2VzIGFyZSBpbXBvcnRhbnQgZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwMzksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODo0NzoyNi4wMTEwMTEyNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjI2NTAyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcuKldYXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTE3PWlmIE5FVF9WRU5ET1JfV0FOR1hVTlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0xOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6MTk6Y29uZmlnIExJQldYXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTIwLVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3NyaW92LmM9MTQ5PXN0YXRpYyBpbnQgd3hfcGNpX3NyaW92X2VuYWJsZShzdHJ1Y3QgcGNpX2RldiAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9zcmlvdi5jLTE2Ni1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV92ZnM7IGkrKylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3NyaW92LmM6MTY3OlxcdFxcdHd4X3ZmX2NvbmZpZ3VyYXRpb24oZGV2LCAoaSB8IFdYX1ZGX0VOQUJMRSkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfc3Jpb3YuYy0xNjgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjQ3OjI2LjA1NzI4MDYwOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzMjIwMjUwODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnYCBmaWxlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBXYW5neHVuIEV0aGVybmV0IERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGBLY29uZmlnYCBmb3IgdGhlIFdhbmd4dW4gRXRoZXJuZXQgZHJpdmVyLiBJdCdzIGEga2V5IHBpZWNlLCBvYnZpb3VzbHksIGRlZmluaW5nIGhvdyB0aGlzIHBhcnRpY3VsYXIgZHJpdmVyIGdldHMgY29uZmlndXJlZCB3aXRoaW4gdGhlIGxhcmdlciBrZXJuZWwgYnVpbGQgcHJvY2Vzcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvcHRpb25zIGFyZSBleHBvc2VkLCB0aGVpciBkZXBlbmRlbmNpZXMsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgY2FwYWJpbGl0aWVzLlxuXG5GaXJzdCwgSSdsbCBiZSBsb29raW5nIGZvciB0aGUgYGNvbmZpZ2Agc3RhdGVtZW50cyB0aGF0IGRlZmluZSB0aGUgb3B0aW9ucyB0aGVtc2VsdmVzLiBJIHdhbnQgdG8gc2VlIHdoaWNoIGZlYXR1cmVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkLCBhbmQgd2hhdCB0aG9zZSBmZWF0dXJlcyBhcmUsIGZvciBleGFtcGxlLCB0aGluZ3MgbGlrZSBqdW1ibyBmcmFtZSBzdXBwb3J0LCBmbG93IGNvbnRyb2wsIG9yIFZMQU4gdGFnZ2luZy4gSSdtIGdvaW5nIHRvIGxvb2sgYXQgdGhlIGhlbHAgdGV4dCBhc3NvY2lhdGVkIHdpdGggZWFjaCBvcHRpb24gdG8gdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiB0aGVzZSBmZWF0dXJlcywgd2hhdCB0aGV5IGRvLCBhbmQgd2hhdCB0aGUgdXNlciBuZWVkcyB0byBjb25zaWRlciB3aGVuIGVuYWJsaW5nIHRoZW0uIElzIHRoZXJlIGFueSBkZXRhaWwgdGhhdCBpbXBsaWVzIGhhcmR3YXJlIHJldmlzaW9uP1xuXG5UaGVuLCB0aGUgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMgYXJlIGNydWNpYWwuIEknbSBnb2luZyB0byBmb2xsb3cgdGhlIGRlcGVuZGVuY3kgY2hhaW5zLiBBcmUgdGhlcmUgZGVwZW5kZW5jaWVzIG9uIHNwZWNpZmljIGhhcmR3YXJlIGFyY2hpdGVjdHVyZXMsIG90aGVyIGRyaXZlcnMsIG9yIGtlcm5lbCBmZWF0dXJlcz8gQXJlIHRoZXJlIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIG5ldHdvcmsgc3Vic3lzdGVtcz8gVGhpcyBpcyB3aGVyZSBJIGNhbiBzdGFydCB0byBwaWVjZSB0b2dldGhlciB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIGRyaXZlciB3aWxsIGV2ZW4gYmUgY29uc2lkZXJlZCBmb3IgaW5jbHVzaW9uLlxuXG5OZXh0LCBJJ2xsIGJlIGZvY3VzZWQgb24gYGRlZmF1bHRgIHZhbHVlcy4gV2hhdCBhcmUgdGhlIHNlbnNpYmxlIHN0YXJ0aW5nIHBvaW50cyBmb3IgdGhlIGRyaXZlcidzIGNvbmZpZ3VyYXRpb24/IEFyZSB0aGV5IGNvbnNlcnZhdGl2ZSBkZWZhdWx0cz8gRG8gdGhleSBzdWdnZXN0IGNvbW1vbiB1c2UgY2FzZXM/IEFyZSB0aGUgZGVmYXVsdHMgcGxhdGZvcm0tc3BlY2lmaWM/IFRoZSBkZWZhdWx0cyB0aGVtc2VsdmVzIGdpdmUgYSBodWdlIGNsdWUgYXMgdG8gaG93IHRoZSBkZXZlbG9wZXJzIGV4cGVjdCB0aGlzIGRyaXZlciB0byBiZSB1c2VkIG9yIHdoYXQgYXNzdW1wdGlvbnMgdGhleSBtYWRlIGR1cmluZyBkZXZlbG9wbWVudC5cblxuRmluYWxseSwgSSdsbCBiZSBsb29raW5nIGZvciBhbnkgYHNlbGVjdGAgc3RhdGVtZW50cywgd2hpY2ggYXJlIHVzZWQgdG8gaW1wbGljaXRseSBlbmFibGUgb3RoZXIgc3ltYm9scyB3aGVuIGFuIG9wdGlvbiBpcyBjaG9zZW4uIFRoaXMgaXMgd2hlcmUgSSBtaWdodCBkaXNjb3ZlciBzaWRlIGVmZmVjdHMgb3IgZGVwZW5kZW5jaWVzIHRoYXQgYXJlbid0IGltbWVkaWF0ZWx5IG9idmlvdXMsIHN1Y2ggYXMgZW5hYmxpbmcgZGVidWcgZmxhZ3Mgb3Igb3RoZXIgc3VwcG9ydCBmZWF0dXJlcy5cblxuT3ZlcmFsbCwgSSdtIGV4cGVjdGluZyB0byBzZWUgYSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLiBJdCdzIGEgc3RhbmRhcmQgbmV0d29yayBkcml2ZXIsIHNvIGl0IHNob3VsZCBmb2xsb3cgZXN0YWJsaXNoZWQgY29udmVudGlvbnMuIEknbSBsb29raW5nIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gc3BhY2UsIGhvdyB0aGUgZHJpdmVyIGludGVncmF0ZXMgd2l0aCB0aGUgbGFyZ2VyIGtlcm5lbCwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgcXVpcmtzIG9yIHBsYXRmb3JtLXNwZWNpZmljIGNvbnNpZGVyYXRpb25zIEkgbmVlZCB0byBrZWVwIGluIG1pbmQuIExldCdzIHNlZSB3aGF0IGl0IGhvbGRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODIzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6NDc6MjkuMzc5MzA4OTY5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg2ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFdhbmd4dW4gbmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgTkVUX1ZFTkRPUl9XQU5HWFVOXFxuICAgNzpcXHRcXHRib29sIFxcXCJXYW5neHVuIGRldmljZXNcXFwiXFxuICAgODpcXHRcXHRkZWZhdWx0IHlcXG4gICA5OlxcdFxcdGhlbHBcXG4gIDEwOlxcdFxcdCAgSWYgeW91IGhhdmUgYSBuZXR3b3JrIChFdGhlcm5ldCkgY2FyZCBmcm9tIFdhbmd4dW4oUiksIHNheSBZLlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIE5vdGUgdGhhdCB0aGUgYW5zd2VyIHRvIHRoaXMgcXVlc3Rpb24gZG9lc24ndCBkaXJlY3RseSBhZmZlY3QgdGhlXFxuICAxMzpcXHRcXHQgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGxcXG4gIDE0OlxcdFxcdCAgdGhlIHF1ZXN0aW9ucyBhYm91dCBXYW5neHVuKFIpIGNhcmRzLiBJZiB5b3Ugc2F5IFksIHlvdSB3aWxsXFxuICAxNTpcXHRcXHQgIGJlIGFza2VkIGZvciB5b3VyIHNwZWNpZmljIGNhcmQgaW4gdGhlIGZvbGxvd2luZyBxdWVzdGlvbnMuXFxuICAxNjpcXHRcXG4gIDE3OlxcdGlmIE5FVF9WRU5ET1JfV0FOR1hVTlxcbiAgMTg6XFx0XFxuICAxOTpcXHRjb25maWcgTElCV1hcXG4gIDIwOlxcdFxcdHRyaXN0YXRlXFxuICAyMTpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuICAyMjpcXHRcXHRzZWxlY3QgUEFHRV9QT09MXFxuICAyMzpcXHRcXHRzZWxlY3QgRElNTElCXFxuICAyNDpcXHRcXHRzZWxlY3QgUEhZTElOS1xcbiAgMjU6XFx0XFx0aGVscFxcbiAgMjY6XFx0XFx0Q29tbW9uIGxpYnJhcnkgZm9yIFdhbmd4dW4oUikgRXRoZXJuZXQgZHJpdmVycy5cXG4gIDI3OlxcdFxcbiAgMjg6XFx0Y29uZmlnIE5HQkVcXG4gIDI5OlxcdFxcdHRyaXN0YXRlIFxcXCJXYW5neHVuKFIpIEdiRSBQQ0kgRXhwcmVzcyBhZGFwdGVycyBzdXBwb3J0XFxcIlxcbiAgMzA6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lcXG4gIDMxOlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG4gIDMyOlxcdFxcdHNlbGVjdCBMSUJXWFxcbiAgMzM6XFx0XFx0aGVscFxcbiAgMzQ6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBXYW5neHVuKFIpIEdiRSBQQ0kgRXhwcmVzcyBmYW1pbHkgb2ZcXG4gIDM1OlxcdFxcdCAgYWRhcHRlcnMuXFxuICAzNjpcXHRcXG4gIDM3OlxcdFxcdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXFxuICAzODpcXHRcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL25nYmUucnN0XFx1MDAzZS5cXG4gIDM5OlxcdFxcbiAgNDA6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlXFxuICA0MTpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIG5nYmUuXFxuICA0MjpcXHRcXG4gIDQzOlxcdGNvbmZpZyBUWEdCRVxcbiAgNDQ6XFx0XFx0dHJpc3RhdGUgXFxcIldhbmd4dW4oUikgMTAvMjUvNDBHYkUgUENJIEV4cHJlc3MgYWRhcHRlcnMgc3VwcG9ydFxcXCJcXG4gIDQ1OlxcdFxcdGRlcGVuZHMgb24gUENJXFxuICA0NjpcXHRcXHRkZXBlbmRzIG9uIENPTU1PTl9DTEtcXG4gIDQ3OlxcdFxcdGRlcGVuZHMgb24gSTJDX0RFU0lHTldBUkVfUExBVEZPUk1cXG4gIDQ4OlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG4gIDQ5OlxcdFxcdHNlbGVjdCBNQVJWRUxMXzEwR19QSFlcXG4gIDUwOlxcdFxcdHNlbGVjdCBSRUdNQVBcXG4gIDUxOlxcdFxcdHNlbGVjdCBIV01PTiBpZiBUWEdCRT15XFxuICA1MjpcXHRcXHRzZWxlY3QgU0ZQXFxuICA1MzpcXHRcXHRzZWxlY3QgR1BJT0xJQlxcbiAgNTQ6XFx0XFx0c2VsZWN0IEdQSU9MSUJfSVJRQ0hJUFxcbiAgNTU6XFx0XFx0c2VsZWN0IFBDU19YUENTXFxuICA1NjpcXHRcXHRzZWxlY3QgTElCV1hcXG4gIDU3OlxcdFxcdGhlbHBcXG4gIDU4OlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgV2FuZ3h1bihSKSAxMC8yNS80MEdiRSBQQ0kgRXhwcmVzcyBmYW1pbHkgb2ZcXG4gIDU5OlxcdFxcdCAgYWRhcHRlcnMuXFxuICA2MDpcXHRcXG4gIDYxOlxcdFxcdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXFxuICA2MjpcXHRcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL3R4Z2JlLnJzdFxcdTAwM2UuXFxuICA2MzpcXHRcXG4gIDY0OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxcbiAgNjU6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCB0eGdiZS5cXG4gIDY2OlxcdFxcbiAgNjc6XFx0Y29uZmlnIFRYR0JFVkZcXG4gIDY4OlxcdFxcdHRyaXN0YXRlIFxcXCJXYW5neHVuKFIpIDEwLzI1LzQwRyBWaXJ0dWFsIEZ1bmN0aW9uIEV0aGVybmV0IHN1cHBvcnRcXFwiXFxuICA2OTpcXHRcXHRkZXBlbmRzIG9uIFBDSVxcbiAgNzA6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lfTVNJXFxuICA3MTpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuICA3MjpcXHRcXHRzZWxlY3QgTElCV1hcXG4gIDczOlxcdFxcdGhlbHBcXG4gIDc0OlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdmlydHVhbCBmdW5jdGlvbnMgZm9yIFNQMTAwMEEsIFdYMTgyMEFMLFxcbiAgNzU6XFx0XFx0ICBXWDVYWFgsIFdYNVhYWEFMLlxcbiAgNzY6XFx0XFxuICA3NzpcXHRcXHQgIFRoaXMgZHJpdmVyIHdhcyBmb3JtZXJseSBuYW1lZCB0eGdiZXZmLlxcbiAgNzg6XFx0XFxuICA3OTpcXHRcXHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxcbiAgODA6XFx0XFx0ICBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmLnJzdFxcdTAwM2UuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjQ3OjI5LjM3OTM3OTc4OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzMDAxMzc4NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhY2hhYmlsaXR5IGFuZCBIYXJkd2FyZSBEcml2ZXIgQ29uc2lkZXJhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gYWRoZXJpbmcgdG8gdGhlIHJ1bGVzIHJlZ2FyZGluZyByZWFjaGFiaWxpdHksIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIGhhcmR3YXJlIGRyaXZlcnMuIFRoZSBndWlkZWxpbmVzIGFyZSBjbGVhcjogYSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIHVuZGVyIHNwZWNpZmljIG5lZ2F0aXZlIGNyaXRlcmlhLiBOb3RhYmx5LCB0aGlzIGFwcGxpZXMgdG8gc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLCBsaWtlIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzICh0aGluayBtbHhzdywgcGRzX2NvcmUsIHFlZCwgaW9uaWMsIGFtZGdwdSkgdGhhdCAqYWJzb2x1dGVseSogcmVxdWlyZSBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgdGhhdCBhcmVuJ3QgcHJvcGVybHkgZW11bGF0ZWQgaW4gYSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LiBBbHNvLCBhbnl0aGluZyB0aGF0IGludm9sdmVzIHVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRocywgc3VjaCBhcyBkcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIGxpa2UgYC5yZW1vdmVgLCBgLnNodXRkb3duYCwgb3IgYHBjaV91bnJlZ2lzdGVyX2RyaXZlcmAgdGhhdCBhcmUgdHJpZ2dlcmVkIG9ubHkgYnkgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcgaXMgb2ZmIHRoZSB0YWJsZS4gUGF0aHMgc3BlY2lmaWMgdG8gYW4gYXJjaGl0ZWN0dXJlIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgZmFsbCBpbnRvIHRoaXMgY2F0ZWdvcnkgYXMgd2VsbC5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogSXMgdGhpcyBXYW5neHVuIEV0aGVybmV04oCUc3BlY2lmaWNhbGx5LCB0aGUgTElCV1gsIE5HQkUsIFRYR0JFLCBhbmQgVFhHQkVWRiBkcml2ZXJz4oCUIGNvbnNpZGVyZWQgdmVuZG9yLXNwZWNpZmljIFBDSWUgTklDIGhhcmR3YXJlPyBUaGlzIGlzIHRoZSBjcnV4IG9mIHRoZSBtYXR0ZXIuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhlc2UgZHJpdmVycyByZWx5IG9uIHBoeXNpY2FsIFBDSSBoYXJkd2FyZSB0aGF0IGlzbid0IHJlcGxpY2F0ZWQgZWZmZWN0aXZlbHkgaW4gUUVNVS4gVG8gZG8gdGhpcywgSSBuZWVkIHRvIGNoZWNrIHRoZSBQQ0kgSURzIG9mIGBOR0JFYCwgYFRYR0JFYCwgYW5kIGBUWEdCRVZGYCBhbmQgc2VlIHdoYXQgdGhleSB0ZWxsIG1lIGFib3V0IHRoZSBoYXJkd2FyZSBkZXBlbmRlbmNpZXMuIFRoYXQgc2hvdWxkIHBvaW50IG1lIGluIHRoZSByaWdodCBkaXJlY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0NjUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODo0NzozMy42Nzk1MjA3ODNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc2MzM5NzksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlBDSV9ERVZJQ0VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1blwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6NDc6MzMuNzI3MTYyOTYyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ2MDk2NjA2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEknbSBhbHJlYWR5IGRlZXAgaW4gdGhlIHdlZWRzIG9mIHRoaXMgc3ViamVjdDpcblxuKipEaWdnaW5nIGludG8gd2FuZ3h1bidzIGBwY2lfZHJpdmVyYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJMZXQncyB6ZXJvIGluIG9uIHRoZSBgcGNpX2RyaXZlcmAgd2l0aGluIHdhbmd4dW4uXCIgVGhpcyBtZWFucyBJJ20gcHJvYmFibHkgdHJvdWJsZXNob290aW5nIHNvbWV0aGluZywgb3IgcGVyaGFwcyByZXZpZXdpbmcgdGhlIGRyaXZlcidzIGltcGxlbWVudGF0aW9uIGFzIHBhcnQgb2YgYSBsYXJnZXIgcHJvamVjdC4gSSdtIGxpa2VseSB0YXJnZXRpbmcgdGhpcyBzcGVjaWZpYyBhcmVhIGJlY2F1c2UgaXQncyBlaXRoZXIgY2F1c2luZyBhIHByb2JsZW0sIG5lZWRzIG9wdGltaXphdGlvbiwgb3IgaXMgY3JpdGljYWwgdG8gYSBzeXN0ZW0gSSdtIHdvcmtpbmcgb24uIFRoZSBcIndhbmd4dW5cIiBwYXJ0IHRlbGxzIG1lIHRoZSBzY29wZTsgSSdtIGRlYWxpbmcgd2l0aCBhIGRyaXZlciB3aXRoaW4gYSBwYXJ0aWN1bGFyIGZyYW1ld29yayBvciBzeXN0ZW0uIE15IGZvY3VzIGlzIG5vdyBuYXJyb3dpbmc7IHRpbWUgdG8gZGl2ZSBpbnRvIHRoYXQgc3BlY2lmaWMgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA2MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjQ3OjM2LjE4ODEzMzI0NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwMTg4NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGNpX2RyaXZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYz05NTM9c3RhdGljIGludCBuZ2JlX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy05ODItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjk4MzpzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmdiZV9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTk4NC1cXHQubmFtZSAgICAgPSBuZ2JlX2RyaXZlcl9uYW1lLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTk5NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6OTk1Om1vZHVsZV9wY2lfZHJpdmVyKG5nYmVfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtOTk2LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYz0yNDk9c3RhdGljIERFRklORV9TSU1QTEVfREVWX1BNX09QUyhuZ2JldmZfcG1fb3BzLCB3eHZmX3N1c3BlbmQsIHd4dmZfcmVzdW1lKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jLTI1MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjI1MTpzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmdiZXZmX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jLTI1Mi1cXHQubmFtZSAgICAgPSBLQlVJTERfTU9ETkFNRSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmMtMjYwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6MjYxOm1vZHVsZV9wY2lfZHJpdmVyKG5nYmV2Zl9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmMtMjYyLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmM9OTkxPXN0YXRpYyB2b2lkIHR4Z2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jLTEwMjAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmM6MTAyMTpzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdHhnYmVfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jLTEwMjItXFx0Lm5hbWUgICAgID0gdHhnYmVfZHJpdmVyX25hbWUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYy0xMDMwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jOjEwMzE6bW9kdWxlX3BjaV9kcml2ZXIodHhnYmVfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYy0xMDMyLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jPTMxND1zdGF0aWMgREVGSU5FX1NJTVBMRV9ERVZfUE1fT1BTKHR4Z2JldmZfcG1fb3BzLCB3eHZmX3N1c3BlbmQsIHd4dmZfcmVzdW1lKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYvdHhnYmV2Zl9tYWluLmMtMzE1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYzozMTY6c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JldmZfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYy0zMTctXFx0Lm5hbWUgICAgID0gS0JVSUxEX01PRE5BTUUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYvdHhnYmV2Zl9tYWluLmMtMzI1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYzozMjY6bW9kdWxlX3BjaV9kcml2ZXIodHhnYmV2Zl9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYy0zMjctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjQ3OjM2LjIzNjE1ODQ5NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTk2ODI0MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQ6IFdhbmd4dW4gRHJpdmVyIEZ1enphYmlsaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBXZSdyZSBsb29raW5nIGF0IHRoZSBXYW5neHVuIGZhbWlseSBvZiBFdGhlcm5ldCBkcml2ZXJzIOKAkyBsaWJ3eCwgbmdiZSwgdHhnYmUsIGFuZCB0aGUgVkYgdmVyc2lvbnMuIFRoZXNlIGFyZSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVycyBmb3IgKnBoeXNpY2FsKiBXYW5neHVuIFBDSWUgbmV0d29yayBhZGFwdGVycy4gVGhpcyBpc24ndCB5b3VyIHN0YW5kYXJkIHZpcnRpbyBvciBlMTAwMCwgb3IgZXZlbiBzb21ldGhpbmcgZW11bGF0ZWQgd2l0aGluIFFFTVUuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgcmVhbCBoYXJkd2FyZSwgc3BlY2lmaWNhbGx5IFdhbmd4dW4ncyBHYkUgLyAxMC8yNS80MEdiRSBQQ0llIGNhcmRzLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiBmdXp6aW5nIHRoaXMgY29kZSBpcyB2aWFibGUuXG5cbkxvb2tpbmcgYXQgdGhlIGNvZGUsIHRoZSBtb2RpZmljYXRpb25zIGFyZSBjb25jZW50cmF0ZWQgd2l0aGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L2AuIFRoaXMgaXMgdGhlIGNvcmUgbGlicmFyeSwgYGxpYnd4YCwgc2hhcmVkIGJ5IGFsbCB0aG9zZSBXYW5neHVuIGRyaXZlcnMuIFRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdG91Y2hlZCDigJMgYHd4X3N3X2luaXRgLCBgd3hfeG1pdF9mcmFtZV9yaW5nYCwgYHd4X3B0cF9jbGVhcl90eF90aW1lc3RhbXBgLCBgd3hfcHRwX3R4X2h3dHN0YW1wX3dvcmtgLCBhbmQgYHd4X3B0cF90eF9oYW5nYCDigJMgYWxsIHJlbGF0ZSB0byB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgZHJpdmVyIGFuZCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUuXG5cblRoZSBrZXkgcG9pbnQgaXMgdGhhdCB0aGUgKm9ubHkqIHdheSB0byBhY3R1YWxseSBleGVyY2lzZSB0aGVzZSBmdW5jdGlvbnMgaXMgd2l0aCBhIHBoeXNpY2FsIFdhbmd4dW4gUENJZSBOSUMuIEl0J3Mgbm90IGdvaW5nIHRvIHJ1biBpbiBhIHR5cGljYWwgUUVNVSBpbnN0YW5jZSBvciBhbnkgb2YgdGhlIHN0YW5kYXJkIHZpcnR1YWxpemVkIHRlc3QgZW52aXJvbm1lbnRzLiBUaGUgQVNJQy9QQ0llIGNhcmQgaXMgZXNzZW50aWFsIHRvIGV4ZWN1dGUgdGhlIGNvZGUuXG5cblRoZXJlZm9yZSwgZ2l2ZW4gdGhlIHN0cnVjdHVyYWwgbGltaXRhdGlvbnMsIGBXb3J0aEZ1enppbmdgIGlzIGRlZmluaXRpdmVseSBgZmFsc2VgLlxuXG5Gb3IgdGhlIHJlc3VsdHMsIEknbGwgbmVlZCB0byBzcGVjaWZ5IHRoZSByZWFzb25pbmc6XG5cbiogICBgV29ydGhGdXp6aW5nYDogYGZhbHNlYFxuKiAgIGBSZWFzb25pbmdgOiBUaGUgY2hhbmdlcyBhcmUgd2l0aGluIHRoZSBXYW5neHVuIEV0aGVybmV0IGRyaXZlciBsaWJyYXJ5IChgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9gKS4gVGhpcyBsaWJyYXJ5IGludGVyZmFjZXMgd2l0aCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBOSUMgaGFyZHdhcmUgbWFudWZhY3R1cmVkIGJ5IFdhbmd4dW4gKG5nYmUsIHR4Z2JlLCBldGMuKSwgcmVxdWlyaW5nIHBoeXNpY2FsIFdhbmd4dW4gQVNJQy9QQ0llIGNhcmRzIGZvciBwcm9wZXIgb3BlcmF0aW9uLiBUaGVzZSBjYXJkcyBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3Igb3RoZXIgY29tbW9uIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhpcyBzdHJ1Y3R1cmFsbHkgbWFrZXMgdGhlIGNvZGUgdW5yZWFjaGFibGUgZm9yIGFueSBzdGFuZGFyZCBmdXp6aW5nIHNldHVwLlxuKiAgIGBFbmFibGVDb25maWdzYDogYFtdYFxuKiAgIGBGb2N1c1N5bWJvbHNgOiBgW11gXG5cbkFuZCBmaW5hbGx5LCBJJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM1NCwiT3V0cHV0VG9rZW5zIjo5OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODo0Nzo0MC44MzI5ODUwMzRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2FuZ3h1biBFdGhlcm5ldCBjb21tb24gbGlicmFyeSAobGlid3gpIHVzZWQgYnkgV2FuZ3h1biBQQ0llIG5ldHdvcmsgZHJpdmVycyAobmdiZSwgdHhnYmUpLiBUaGVzZSBkcml2ZXJzIHRhcmdldCB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBOSUNzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2FuZ3h1biBFdGhlcm5ldCBjb21tb24gbGlicmFyeSAobGlid3gpIHVzZWQgYnkgV2FuZ3h1biBQQ0llIG5ldHdvcmsgZHJpdmVycyAobmdiZSwgdHhnYmUpLiBUaGVzZSBkcml2ZXJzIHRhcmdldCB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBOSUNzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODo0Nzo0MC44MzMwMTAzMzRaIiwiU2VxIjoxMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowszlb8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 08:25:33 +0000 UTC FinishedAt: 2026-09-08 08:47:42 +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+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdhbmd4dW4gRXRoZXJuZXQgY29tbW9uIGxpYnJhcnkgKGxpYnd4KSB1c2VkIGJ5IFdhbmd4dW4gUENJZSBuZXR3b3JrIGRyaXZlcnMgKG5nYmUsIHR4Z2JlKS4gVGhlc2UgZHJpdmVycyB0YXJnZXQgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgTklDcyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODo0NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGJkZDk4MjE2MDk3ODkxNWMxN2MwNDgzZmYwMGJhMmFkMjE4Yjc1MzdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDA4OjQ3OjE5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xuaW5kZXggMTIyYzQ5NTJkMjAzZi4uMTEzNTUyNTg2YmU3MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXG5AQCAtMjUxOCw2ICYjNDM7MjUxOCw3IEBAIGludCB3eF9zd19pbml0KHN0cnVjdCB3eCAqd3gpXG4gXHR9XG4gXG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZ3eC1cdTAwM2Vod19zdGF0c19sb2NrKTtcbiYjNDM7XHRzcGluX2xvY2tfaW5pdChcdTAwMjZ3eC1cdTAwM2VwdHBfdHhfbG9jayk7XG4gXHRtdXRleF9pbml0KFx1MDAyNnd4LVx1MDAzZXJlc2V0X2xvY2spO1xuIFx0Yml0bWFwX3plcm8od3gtXHUwMDNlc3RhdGUsIFdYX1NUQVRFX05CSVRTKTtcbiBcdGJpdG1hcF96ZXJvKHd4LVx1MDAzZWZsYWdzLCBXWF9QRl9GTEFHU19OQklUUyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcbmluZGV4IGVkNWFhZDc4NTdiZDkuLjkxMTg4MTMzMzRhOWUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXG5AQCAtMTYxMiw2ICYjNDM7MTYxMiw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCB3eF94bWl0X2ZyYW1lX3Jpbmcoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiB7XG4gXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYodHhfcmluZy1cdTAwM2VuZXRkZXYpO1xuIFx0dTE2IGNvdW50ID0gVFhEX1VTRV9DT1VOVChza2JfaGVhZGxlbihza2IpKTtcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqcHRwX3R4X3NrYiA9IE5VTEw7XG4gXHRzdHJ1Y3Qgd3hfdHhfYnVmZmVyICpmaXJzdDtcbiBcdHU4IGhkcl9sZW4gPSAwLCBwdHlwZTtcbiBcdHVuc2lnbmVkIHNob3J0IGY7XG5AQCAtMTY0OSw2ICYjNDM7MTY1MCw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCB3eF94bWl0X2ZyYW1lX3Jpbmcoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBcdGlmICh1bmxpa2VseShza2Jfc2hpbmZvKHNrYiktXHUwMDNldHhfZmxhZ3MgXHUwMDI2IFNLQlRYX0hXX1RTVEFNUCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgd3gtXHUwMDNlcHRwX2Nsb2NrKSB7XG4mIzQzO1x0XHRzcGluX2xvY2tfYmgoXHUwMDI2d3gtXHUwMDNlcHRwX3R4X2xvY2spO1xuIFx0XHRpZiAod3gtXHUwMDNldHN0YW1wX2NvbmZpZy50eF90eXBlID09IEhXVFNUQU1QX1RYX09OIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgIXRlc3RfYW5kX3NldF9iaXRfbG9jayhXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsXG4gXHRcdFx0XHRcdCAgIHd4LVx1MDAzZXN0YXRlKSkge1xuQEAgLTE2NTksNiAmIzQzOzE2NjEsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3Qgd3hfeG1pdF9mcmFtZV9yaW5nKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0d3gtXHUwMDNldHhfaHd0c3RhbXBfc2tpcHBlZCYjNDM7JiM0Mzs7XG4gXHRcdH1cbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnd4LVx1MDAzZXB0cF90eF9sb2NrKTtcbiBcdH1cbiBcbiBcdC8qIHJlY29yZCBpbml0aWFsIGZsYWdzIGFuZCBwcm90b2NvbCAqL1xuQEAgLTE2ODUsMTAgJiM0MzsxNjg4LDE3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCB3eF94bWl0X2ZyYW1lX3Jpbmcoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGZpcnN0LVx1MDAzZXNrYiA9IE5VTEw7XG4gY2xlYW51cF90eF90c3RhbXA6XG4gXHRpZiAodW5saWtlbHkodHhfZmxhZ3MgXHUwMDI2IFdYX1RYX0ZMQUdTX1RTVEFNUCkpIHtcbi1cdFx0ZGV2X2tmcmVlX3NrYl9hbnkod3gtXHUwMDNlcHRwX3R4X3NrYik7XG4tXHRcdHd4LVx1MDAzZXB0cF90eF9za2IgPSBOVUxMO1xuJiM0MztcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnd4LVx1MDAzZXB0cF90eF9sb2NrKTtcbiYjNDM7XHRcdGlmICh3eC1cdTAwM2VwdHBfdHhfc2tiID09IHNrYikge1xuJiM0MztcdFx0XHRwdHBfdHhfc2tiID0gd3gtXHUwMDNlcHRwX3R4X3NrYjtcbiYjNDM7XHRcdFx0d3gtXHUwMDNlcHRwX3R4X3NrYiA9IE5VTEw7XG4mIzQzO1x0XHRcdGNsZWFyX2JpdF91bmxvY2soV1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLFxuJiM0MztcdFx0XHRcdFx0IHd4LVx1MDAzZXN0YXRlKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnd4LVx1MDAzZXB0cF90eF9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0XHRkZXZfa2ZyZWVfc2tiX2FueShwdHBfdHhfc2tiKTtcbiBcdFx0d3gtXHUwMDNldHhfaHd0c3RhbXBfZXJyb3JzJiM0MzsmIzQzOztcbi1cdFx0Y2xlYXJfYml0X3VubG9jayhXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsIHd4LVx1MDAzZXN0YXRlKTtcbiBcdH1cbiBcbiBcdHJldHVybiBORVRERVZfVFhfT0s7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmNcbmluZGV4IDQ3MDhlN2YzOTU4ZjcuLmEwOTI5YjQ4NDRlOGQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXG5AQCAtMTM5LDEyICYjNDM7MTM5LDE2IEBAIHN0YXRpYyBpbnQgd3hfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCxcbiAgKi9cbiBzdGF0aWMgdm9pZCB3eF9wdHBfY2xlYXJfdHhfdGltZXN0YW1wKHN0cnVjdCB3eCAqd3gpXG4ge1xuJiM0MztcdHN0cnVjdCBza19idWZmICpza2I7XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZ3eC1cdTAwM2VwdHBfdHhfbG9jayk7XG4gXHRyZDMycHRwKHd4LCBXWF9UU0NfMTU4OF9TVE1QSCk7XG4tXHRpZiAod3gtXHUwMDNlcHRwX3R4X3NrYikge1xuLVx0XHRkZXZfa2ZyZWVfc2tiX2FueSh3eC1cdTAwM2VwdHBfdHhfc2tiKTtcbi1cdFx0d3gtXHUwMDNlcHRwX3R4X3NrYiA9IE5VTEw7XG4tXHR9XG4mIzQzO1x0c2tiID0gd3gtXHUwMDNlcHRwX3R4X3NrYjtcbiYjNDM7XHR3eC1cdTAwM2VwdHBfdHhfc2tiID0gTlVMTDtcbiBcdGNsZWFyX2JpdF91bmxvY2soV1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLCB3eC1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2d3gtXHUwMDNlcHRwX3R4X2xvY2spO1xuJiM0MztcbiYjNDM7XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuIH1cbiBcbiAvKipcbkBAIC0xNzQsNTAgJiM0MzsxNzgsNDMgQEAgc3RhdGljIHZvaWQgd3hfcHRwX2NvbnZlcnRfdG9faHd0c3RhbXAoc3RydWN0IHd4ICp3eCxcbiBcdGh3dHN0YW1wLVx1MDAzZWh3dHN0YW1wID0gbnNfdG9fa3RpbWUobnMpO1xuIH1cbiBcbi0vKipcbi0gKiB3eF9wdHBfdHhfaHd0c3RhbXAgLSB1dGlsaXR5IGZ1bmN0aW9uIHdoaWNoIGNoZWNrcyBmb3IgVFggdGltZSBzdGFtcFxuLSAqIEB3eDogdGhlIHByaXZhdGUgYm9hcmQgc3RydWN0XG4tICpcbi0gKiBpZiB0aGUgdGltZXN0YW1wIGlzIHZhbGlkLCB3ZSBjb252ZXJ0IGl0IGludG8gdGhlIHRpbWVjb3VudGVyIG5zXG4tICogdmFsdWUsIHRoZW4gc3RvcmUgdGhhdCByZXN1bHQgaW50byB0aGUgc2hod3RzdGFtcHMgc3RydWN0dXJlIHdoaWNoXG4tICogaXMgcGFzc2VkIHVwIHRoZSBuZXR3b3JrIHN0YWNrXG4tICovXG4tc3RhdGljIHZvaWQgd3hfcHRwX3R4X2h3dHN0YW1wKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3N0YXRpYyBpbnQgd3hfcHRwX3R4X2h3dHN0YW1wX3dvcmsoc3RydWN0IHd4ICp3eClcbiB7XG4gXHRzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMgc2hod3RzdGFtcHM7XG4tXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gd3gtXHUwMDNlcHRwX3R4X3NrYjtcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuJiM0MztcdHUzMiB0c3luY3R4Y3RsO1xuIFx0dTY0IHJlZ3ZhbCA9IDA7XG4gXG4tXHRyZWd2YWwgfD0gKHU2NClyZDMycHRwKHd4LCBXWF9UU0NfMTU4OF9TVE1QTCk7XG4tXHRyZWd2YWwgfD0gKHU2NClyZDMycHRwKHd4LCBXWF9UU0NfMTU4OF9TVE1QSCkgXHUwMDNjXHUwMDNjIDMyO1xuLVxuLVx0d3hfcHRwX2NvbnZlcnRfdG9faHd0c3RhbXAod3gsIFx1MDAyNnNoaHd0c3RhbXBzLCByZWd2YWwpO1xuLVxuLVx0d3gtXHUwMDNlcHRwX3R4X3NrYiA9IE5VTEw7XG4tXHRjbGVhcl9iaXRfdW5sb2NrKFdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUywgd3gtXHUwMDNlc3RhdGUpO1xuLVx0c2tiX3RzdGFtcF90eChza2IsIFx1MDAyNnNoaHd0c3RhbXBzKTtcbi1cdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4tXHR3eC1cdTAwM2V0eF9od3RzdGFtcF9wa3RzJiM0MzsmIzQzOztcbi19XG4tXG4tc3RhdGljIGludCB3eF9wdHBfdHhfaHd0c3RhbXBfd29yayhzdHJ1Y3Qgd3ggKnd4KVxuLXtcbi1cdHUzMiB0c3luY3R4Y3RsO1xuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZ3eC1cdTAwM2VwdHBfdHhfbG9jayk7XG4gXG4gXHQvKiB3ZSBoYXZlIHRvIGhhdmUgYSB2YWxpZCBza2IgdG8gcG9sbCBmb3IgYSB0aW1lc3RhbXAgKi9cbiBcdGlmICghd3gtXHUwMDNlcHRwX3R4X3NrYikge1xuLVx0XHR3eF9wdHBfY2xlYXJfdHhfdGltZXN0YW1wKHd4KTtcbiYjNDM7XHRcdHJkMzJwdHAod3gsIFdYX1RTQ18xNTg4X1NUTVBIKTtcbiYjNDM7XHRcdGNsZWFyX2JpdF91bmxvY2soV1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLCB3eC1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZ3eC1cdTAwM2VwdHBfdHhfbG9jayk7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuIFx0Lyogc3RvcCBwb2xsaW5nIG9uY2Ugd2UgaGF2ZSBhIHZhbGlkIHRpbWVzdGFtcCAqL1xuIFx0dHN5bmN0eGN0bCA9IHJkMzJwdHAod3gsIFdYX1RTQ18xNTg4X0NUTCk7XG4tXHRpZiAodHN5bmN0eGN0bCBcdTAwMjYgV1hfVFNDXzE1ODhfQ1RMX1ZBTElEKSB7XG4tXHRcdHd4X3B0cF90eF9od3RzdGFtcCh3eCk7XG4tXHRcdHJldHVybiAwO1xuJiM0MztcdGlmICghKHRzeW5jdHhjdGwgXHUwMDI2IFdYX1RTQ18xNTg4X0NUTF9WQUxJRCkpIHtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnd4LVx1MDAzZXB0cF90eF9sb2NrKTtcbiYjNDM7XHRcdHJldHVybiAtMTtcbiBcdH1cbiBcbi1cdHJldHVybiAtMTtcbiYjNDM7XHRyZWd2YWwgfD0gKHU2NClyZDMycHRwKHd4LCBXWF9UU0NfMTU4OF9TVE1QTCk7XG4mIzQzO1x0cmVndmFsIHw9ICh1NjQpcmQzMnB0cCh3eCwgV1hfVFNDXzE1ODhfU1RNUEgpIFx1MDAzY1x1MDAzYyAzMjtcbiYjNDM7XHR3eF9wdHBfY29udmVydF90b19od3RzdGFtcCh3eCwgXHUwMDI2c2hod3RzdGFtcHMsIHJlZ3ZhbCk7XG4mIzQzO1x0c2tiID0gd3gtXHUwMDNlcHRwX3R4X3NrYjtcbiYjNDM7XHR3eC1cdTAwM2VwdHBfdHhfc2tiID0gTlVMTDtcbiYjNDM7XHRjbGVhcl9iaXRfdW5sb2NrKFdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUywgd3gtXHUwMDNlc3RhdGUpO1xuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnd4LVx1MDAzZXB0cF90eF9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0c2tiX3RzdGFtcF90eChza2IsIFx1MDAyNnNoaHd0c3RhbXBzKTtcbiYjNDM7XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuJiM0MztcdHd4LVx1MDAzZXR4X2h3dHN0YW1wX3BrdHMmIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gLyoqXG5AQCAtMjk2LDI0ICYjNDM7MjkzLDMwIEBAIHN0YXRpYyB2b2lkIHd4X3B0cF9yeF9oYW5nKHN0cnVjdCB3eCAqd3gpXG4gICovXG4gc3RhdGljIHZvaWQgd3hfcHRwX3R4X2hhbmcoc3RydWN0IHd4ICp3eClcbiB7XG4tXHRib29sIHRpbWVvdXQgPSB0aW1lX2lzX2JlZm9yZV9qaWZmaWVzKHd4LVx1MDAzZXB0cF90eF9zdGFydCAmIzQzO1xuLVx0XHRcdFx0XHQgICAgICBXWF9QVFBfVFhfVElNRU9VVCk7XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7XG4gXG4tXHRpZiAoIXd4LVx1MDAzZXB0cF90eF9za2IpXG4tXHRcdHJldHVybjtcbi1cbi1cdGlmICghdGVzdF9iaXQoV1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLCB3eC1cdTAwM2VzdGF0ZSkpXG4tXHRcdHJldHVybjtcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2d3gtXHUwMDNlcHRwX3R4X2xvY2spO1xuIFxuIFx0LyogSWYgd2UgaGF2ZW4mIzM5O3QgcmVjZWl2ZWQgYSB0aW1lc3RhbXAgd2l0aGluIHRoZSB0aW1lb3V0LCBpdCBpc1xuIFx0ICogcmVhc29uYWJsZSB0byBhc3N1bWUgdGhhdCBpdCB3aWxsIG5ldmVyIG9jY3VyLCBzbyB3ZSBjYW4gdW5sb2NrIHRoZVxuIFx0ICogdGltZXN0YW1wIGJpdCB3aGVuIHRoaXMgb2NjdXJzLlxuIFx0ICovXG4tXHRpZiAodGltZW91dCkge1xuLVx0XHR3eF9wdHBfY2xlYXJfdHhfdGltZXN0YW1wKHd4KTtcbi1cdFx0d3gtXHUwMDNldHhfaHd0c3RhbXBfdGltZW91dHMmIzQzOyYjNDM7O1xuLVx0XHRkZXZfd2FybihcdTAwMjZ3eC1cdTAwM2VwZGV2LVx1MDAzZWRldiwgXCYjMzQ7Y2xlYXJpbmcgVHggdGltZXN0YW1wIGhhbmdcXG5cJiMzNDspO1xuJiM0MztcdGlmICh3eC1cdTAwM2VwdHBfdHhfc2tiIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsIHd4LVx1MDAzZXN0YXRlKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgdGltZV9pc19iZWZvcmVfamlmZmllcyh3eC1cdTAwM2VwdHBfdHhfc3RhcnQgJiM0MzsgV1hfUFRQX1RYX1RJTUVPVVQpKSB7XG4mIzQzO1x0XHRyZDMycHRwKHd4LCBXWF9UU0NfMTU4OF9TVE1QSCk7XG4mIzQzO1x0XHRza2IgPSB3eC1cdTAwM2VwdHBfdHhfc2tiO1xuJiM0MztcdFx0d3gtXHUwMDNlcHRwX3R4X3NrYiA9IE5VTEw7XG4mIzQzO1x0XHRjbGVhcl9iaXRfdW5sb2NrKFdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUywgd3gtXHUwMDNlc3RhdGUpO1xuIFx0fVxuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnd4LVx1MDAzZXB0cF90eF9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFza2IpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4mIzQzO1x0d3gtXHUwMDNldHhfaHd0c3RhbXBfdGltZW91dHMmIzQzOyYjNDM7O1xuJiM0MztcdGRldl93YXJuKFx1MDAyNnd4LVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBcJiMzNDtjbGVhcmluZyBUeCB0aW1lc3RhbXAgaGFuZ1xcblwmIzM0Oyk7XG4gfVxuIFxuIHN0YXRpYyBsb25nIHd4X3B0cF9kb19hdXhfd29yayhzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cClcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXG5pbmRleCA5NDU0ZTkwMjU4ZDhlLi42Yjk0NjAxNDdjYTkzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXG5AQCAtMTQzMCw2ICYjNDM7MTQzMCw3IEBAIHN0cnVjdCB3eCB7XG4gXHR1bnNpZ25lZCBsb25nIGxhc3Rfb3ZlcmZsb3dfY2hlY2s7XG4gXHR1bnNpZ25lZCBsb25nIGxhc3RfcnhfcHRwX2NoZWNrO1xuIFx0dW5zaWduZWQgbG9uZyBwdHBfdHhfc3RhcnQ7XG4mIzQzO1x0c3BpbmxvY2tfdCBwdHBfdHhfbG9jazsgLyogcHJvdGVjdHMgcHRwX3R4X3NrYiBhbmQgcHRwX3R4X3N0YXJ0ICovXG4gXHRzZXFsb2NrX3QgaHdfdGNfbG9jazsgLyogc2VxbG9jayBmb3IgcHRwICovXG4gXHRzdHJ1Y3QgY3ljbGVjb3VudGVyIGh3X2NjO1xuIFx0c3RydWN0IHRpbWVjb3VudGVyIGh3X3RjO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjQ3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXYW5neHVuIEV0aGVybmV0IGNvbW1vbiBsaWJyYXJ5IChsaWJ3eCkgdXNlZCBieSBXYW5neHVuIFBDSWUgbmV0d29yayBkcml2ZXJzIChuZ2JlLCB0eGdiZSkuIFRoZXNlIGRyaXZlcnMgdGFyZ2V0IHZlbmRvci1zcGVjaWZpYyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIE5JQ3MgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIHN5emthbGxlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiZGQ5ODIxNjA5Nzg5MTVjMTdjMDQ4M2ZmMDBiYTJhZDIxOGI3NTM3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgOCAwODo0NzoxOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuYwppbmRleCAxMjJjNDk1MmQyMDNmLi4xMTM1NTI1ODZiZTcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jCkBAIC0yNTE4LDYgJiM0MzsyNTE4LDcgQEAgaW50IHd4X3N3X2luaXQoc3RydWN0IHd4ICp3eCkKIAl9CiAKIAlzcGluX2xvY2tfaW5pdCgmYW1wO3d4LSZndDtod19zdGF0c19sb2NrKTsKJiM0MzsJc3Bpbl9sb2NrX2luaXQoJmFtcDt3eC0mZ3Q7cHRwX3R4X2xvY2spOwogCW11dGV4X2luaXQoJmFtcDt3eC0mZ3Q7cmVzZXRfbG9jayk7CiAJYml0bWFwX3plcm8od3gtJmd0O3N0YXRlLCBXWF9TVEFURV9OQklUUyk7CiAJYml0bWFwX3plcm8od3gtJmd0O2ZsYWdzLCBXWF9QRl9GTEFHU19OQklUUyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuYwppbmRleCBlZDVhYWQ3ODU3YmQ5Li45MTE4ODEzMzM0YTllIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMKQEAgLTE2MTIsNiAmIzQzOzE2MTIsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3Qgd3hfeG1pdF9mcmFtZV9yaW5nKHN0cnVjdCBza19idWZmICpza2IsCiB7CiAJc3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KHR4X3JpbmctJmd0O25ldGRldik7CiAJdTE2IGNvdW50ID0gVFhEX1VTRV9DT1VOVChza2JfaGVhZGxlbihza2IpKTsKJiM0MzsJc3RydWN0IHNrX2J1ZmYgKnB0cF90eF9za2IgPSBOVUxMOwogCXN0cnVjdCB3eF90eF9idWZmZXIgKmZpcnN0OwogCXU4IGhkcl9sZW4gPSAwLCBwdHlwZTsKIAl1bnNpZ25lZCBzaG9ydCBmOwpAQCAtMTY0OSw2ICYjNDM7MTY1MCw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCB3eF94bWl0X2ZyYW1lX3Jpbmcoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAogCWlmICh1bmxpa2VseShza2Jfc2hpbmZvKHNrYiktJmd0O3R4X2ZsYWdzICZhbXA7IFNLQlRYX0hXX1RTVEFNUCkgJmFtcDsmYW1wOwogCSAgICB3eC0mZ3Q7cHRwX2Nsb2NrKSB7CiYjNDM7CQlzcGluX2xvY2tfYmgoJmFtcDt3eC0mZ3Q7cHRwX3R4X2xvY2spOwogCQlpZiAod3gtJmd0O3RzdGFtcF9jb25maWcudHhfdHlwZSA9PSBIV1RTVEFNUF9UWF9PTiAmYW1wOyZhbXA7CiAJCSAgICAhdGVzdF9hbmRfc2V0X2JpdF9sb2NrKFdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUywKIAkJCQkJICAgd3gtJmd0O3N0YXRlKSkgewpAQCAtMTY1OSw2ICYjNDM7MTY2MSw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCB3eF94bWl0X2ZyYW1lX3Jpbmcoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJfSBlbHNlIHsKIAkJCXd4LSZndDt0eF9od3RzdGFtcF9za2lwcGVkJiM0MzsmIzQzOzsKIAkJfQomIzQzOwkJc3Bpbl91bmxvY2tfYmgoJmFtcDt3eC0mZ3Q7cHRwX3R4X2xvY2spOwogCX0KIAogCS8qIHJlY29yZCBpbml0aWFsIGZsYWdzIGFuZCBwcm90b2NvbCAqLwpAQCAtMTY4NSwxMCAmIzQzOzE2ODgsMTcgQEAgc3RhdGljIG5ldGRldl90eF90IHd4X3htaXRfZnJhbWVfcmluZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWZpcnN0LSZndDtza2IgPSBOVUxMOwogY2xlYW51cF90eF90c3RhbXA6CiAJaWYgKHVubGlrZWx5KHR4X2ZsYWdzICZhbXA7IFdYX1RYX0ZMQUdTX1RTVEFNUCkpIHsKLQkJZGV2X2tmcmVlX3NrYl9hbnkod3gtJmd0O3B0cF90eF9za2IpOwotCQl3eC0mZ3Q7cHRwX3R4X3NrYiA9IE5VTEw7CiYjNDM7CQlzcGluX2xvY2tfYmgoJmFtcDt3eC0mZ3Q7cHRwX3R4X2xvY2spOwomIzQzOwkJaWYgKHd4LSZndDtwdHBfdHhfc2tiID09IHNrYikgewomIzQzOwkJCXB0cF90eF9za2IgPSB3eC0mZ3Q7cHRwX3R4X3NrYjsKJiM0MzsJCQl3eC0mZ3Q7cHRwX3R4X3NrYiA9IE5VTEw7CiYjNDM7CQkJY2xlYXJfYml0X3VubG9jayhXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsCiYjNDM7CQkJCQkgd3gtJmd0O3N0YXRlKTsKJiM0MzsJCX0KJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7d3gtJmd0O3B0cF90eF9sb2NrKTsKJiM0MzsKJiM0MzsJCWRldl9rZnJlZV9za2JfYW55KHB0cF90eF9za2IpOwogCQl3eC0mZ3Q7dHhfaHd0c3RhbXBfZXJyb3JzJiM0MzsmIzQzOzsKLQkJY2xlYXJfYml0X3VubG9jayhXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsIHd4LSZndDtzdGF0ZSk7CiAJfQogCiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jCmluZGV4IDQ3MDhlN2YzOTU4ZjcuLmEwOTI5YjQ4NDRlOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuYwpAQCAtMTM5LDEyICYjNDM7MTM5LDE2IEBAIHN0YXRpYyBpbnQgd3hfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwKICAqLwogc3RhdGljIHZvaWQgd3hfcHRwX2NsZWFyX3R4X3RpbWVzdGFtcChzdHJ1Y3Qgd3ggKnd4KQogewomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwomIzQzOwomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDt3eC0mZ3Q7cHRwX3R4X2xvY2spOwogCXJkMzJwdHAod3gsIFdYX1RTQ18xNTg4X1NUTVBIKTsKLQlpZiAod3gtJmd0O3B0cF90eF9za2IpIHsKLQkJZGV2X2tmcmVlX3NrYl9hbnkod3gtJmd0O3B0cF90eF9za2IpOwotCQl3eC0mZ3Q7cHRwX3R4X3NrYiA9IE5VTEw7Ci0JfQomIzQzOwlza2IgPSB3eC0mZ3Q7cHRwX3R4X3NrYjsKJiM0MzsJd3gtJmd0O3B0cF90eF9za2IgPSBOVUxMOwogCWNsZWFyX2JpdF91bmxvY2soV1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLCB3eC0mZ3Q7c3RhdGUpOwomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO3d4LSZndDtwdHBfdHhfbG9jayk7CiYjNDM7CiYjNDM7CWRldl9rZnJlZV9za2JfYW55KHNrYik7CiB9CiAKIC8qKgpAQCAtMTc0LDUwICYjNDM7MTc4LDQzIEBAIHN0YXRpYyB2b2lkIHd4X3B0cF9jb252ZXJ0X3RvX2h3dHN0YW1wKHN0cnVjdCB3eCAqd3gsCiAJaHd0c3RhbXAtJmd0O2h3dHN0YW1wID0gbnNfdG9fa3RpbWUobnMpOwogfQogCi0vKioKLSAqIHd4X3B0cF90eF9od3RzdGFtcCAtIHV0aWxpdHkgZnVuY3Rpb24gd2hpY2ggY2hlY2tzIGZvciBUWCB0aW1lIHN0YW1wCi0gKiBAd3g6IHRoZSBwcml2YXRlIGJvYXJkIHN0cnVjdAotICoKLSAqIGlmIHRoZSB0aW1lc3RhbXAgaXMgdmFsaWQsIHdlIGNvbnZlcnQgaXQgaW50byB0aGUgdGltZWNvdW50ZXIgbnMKLSAqIHZhbHVlLCB0aGVuIHN0b3JlIHRoYXQgcmVzdWx0IGludG8gdGhlIHNoaHd0c3RhbXBzIHN0cnVjdHVyZSB3aGljaAotICogaXMgcGFzc2VkIHVwIHRoZSBuZXR3b3JrIHN0YWNrCi0gKi8KLXN0YXRpYyB2b2lkIHd4X3B0cF90eF9od3RzdGFtcChzdHJ1Y3Qgd3ggKnd4KQomIzQzO3N0YXRpYyBpbnQgd3hfcHRwX3R4X2h3dHN0YW1wX3dvcmsoc3RydWN0IHd4ICp3eCkKIHsKIAlzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMgc2hod3RzdGFtcHM7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHd4LSZndDtwdHBfdHhfc2tiOwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwomIzQzOwl1MzIgdHN5bmN0eGN0bDsKIAl1NjQgcmVndmFsID0gMDsKIAotCXJlZ3ZhbCB8PSAodTY0KXJkMzJwdHAod3gsIFdYX1RTQ18xNTg4X1NUTVBMKTsKLQlyZWd2YWwgfD0gKHU2NClyZDMycHRwKHd4LCBXWF9UU0NfMTU4OF9TVE1QSCkgJmx0OyZsdDsgMzI7Ci0KLQl3eF9wdHBfY29udmVydF90b19od3RzdGFtcCh3eCwgJmFtcDtzaGh3dHN0YW1wcywgcmVndmFsKTsKLQotCXd4LSZndDtwdHBfdHhfc2tiID0gTlVMTDsKLQljbGVhcl9iaXRfdW5sb2NrKFdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUywgd3gtJmd0O3N0YXRlKTsKLQlza2JfdHN0YW1wX3R4KHNrYiwgJmFtcDtzaGh3dHN0YW1wcyk7Ci0JZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQl3eC0mZ3Q7dHhfaHd0c3RhbXBfcGt0cyYjNDM7JiM0Mzs7Ci19Ci0KLXN0YXRpYyBpbnQgd3hfcHRwX3R4X2h3dHN0YW1wX3dvcmsoc3RydWN0IHd4ICp3eCkKLXsKLQl1MzIgdHN5bmN0eGN0bDsKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7d3gtJmd0O3B0cF90eF9sb2NrKTsKIAogCS8qIHdlIGhhdmUgdG8gaGF2ZSBhIHZhbGlkIHNrYiB0byBwb2xsIGZvciBhIHRpbWVzdGFtcCAqLwogCWlmICghd3gtJmd0O3B0cF90eF9za2IpIHsKLQkJd3hfcHRwX2NsZWFyX3R4X3RpbWVzdGFtcCh3eCk7CiYjNDM7CQlyZDMycHRwKHd4LCBXWF9UU0NfMTU4OF9TVE1QSCk7CiYjNDM7CQljbGVhcl9iaXRfdW5sb2NrKFdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUywgd3gtJmd0O3N0YXRlKTsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7d3gtJmd0O3B0cF90eF9sb2NrKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJLyogc3RvcCBwb2xsaW5nIG9uY2Ugd2UgaGF2ZSBhIHZhbGlkIHRpbWVzdGFtcCAqLwogCXRzeW5jdHhjdGwgPSByZDMycHRwKHd4LCBXWF9UU0NfMTU4OF9DVEwpOwotCWlmICh0c3luY3R4Y3RsICZhbXA7IFdYX1RTQ18xNTg4X0NUTF9WQUxJRCkgewotCQl3eF9wdHBfdHhfaHd0c3RhbXAod3gpOwotCQlyZXR1cm4gMDsKJiM0MzsJaWYgKCEodHN5bmN0eGN0bCAmYW1wOyBXWF9UU0NfMTU4OF9DVExfVkFMSUQpKSB7CiYjNDM7CQlzcGluX3VubG9ja19iaCgmYW1wO3d4LSZndDtwdHBfdHhfbG9jayk7CiYjNDM7CQlyZXR1cm4gLTE7CiAJfQogCi0JcmV0dXJuIC0xOwomIzQzOwlyZWd2YWwgfD0gKHU2NClyZDMycHRwKHd4LCBXWF9UU0NfMTU4OF9TVE1QTCk7CiYjNDM7CXJlZ3ZhbCB8PSAodTY0KXJkMzJwdHAod3gsIFdYX1RTQ18xNTg4X1NUTVBIKSAmbHQ7Jmx0OyAzMjsKJiM0MzsJd3hfcHRwX2NvbnZlcnRfdG9faHd0c3RhbXAod3gsICZhbXA7c2hod3RzdGFtcHMsIHJlZ3ZhbCk7CiYjNDM7CXNrYiA9IHd4LSZndDtwdHBfdHhfc2tiOwomIzQzOwl3eC0mZ3Q7cHRwX3R4X3NrYiA9IE5VTEw7CiYjNDM7CWNsZWFyX2JpdF91bmxvY2soV1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLCB3eC0mZ3Q7c3RhdGUpOwomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO3d4LSZndDtwdHBfdHhfbG9jayk7CiYjNDM7CiYjNDM7CXNrYl90c3RhbXBfdHgoc2tiLCAmYW1wO3NoaHd0c3RhbXBzKTsKJiM0MzsJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKJiM0MzsJd3gtJmd0O3R4X2h3dHN0YW1wX3BrdHMmIzQzOyYjNDM7OwomIzQzOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC0yOTYsMjQgJiM0MzsyOTMsMzAgQEAgc3RhdGljIHZvaWQgd3hfcHRwX3J4X2hhbmcoc3RydWN0IHd4ICp3eCkKICAqLwogc3RhdGljIHZvaWQgd3hfcHRwX3R4X2hhbmcoc3RydWN0IHd4ICp3eCkKIHsKLQlib29sIHRpbWVvdXQgPSB0aW1lX2lzX2JlZm9yZV9qaWZmaWVzKHd4LSZndDtwdHBfdHhfc3RhcnQgJiM0MzsKLQkJCQkJICAgICAgV1hfUFRQX1RYX1RJTUVPVVQpOwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKIAotCWlmICghd3gtJmd0O3B0cF90eF9za2IpCi0JCXJldHVybjsKLQotCWlmICghdGVzdF9iaXQoV1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLCB3eC0mZ3Q7c3RhdGUpKQotCQlyZXR1cm47CiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO3d4LSZndDtwdHBfdHhfbG9jayk7CiAKIAkvKiBJZiB3ZSBoYXZlbiYjMzk7dCByZWNlaXZlZCBhIHRpbWVzdGFtcCB3aXRoaW4gdGhlIHRpbWVvdXQsIGl0IGlzCiAJICogcmVhc29uYWJsZSB0byBhc3N1bWUgdGhhdCBpdCB3aWxsIG5ldmVyIG9jY3VyLCBzbyB3ZSBjYW4gdW5sb2NrIHRoZQogCSAqIHRpbWVzdGFtcCBiaXQgd2hlbiB0aGlzIG9jY3Vycy4KIAkgKi8KLQlpZiAodGltZW91dCkgewotCQl3eF9wdHBfY2xlYXJfdHhfdGltZXN0YW1wKHd4KTsKLQkJd3gtJmd0O3R4X2h3dHN0YW1wX3RpbWVvdXRzJiM0MzsmIzQzOzsKLQkJZGV2X3dhcm4oJmFtcDt3eC0mZ3Q7cGRldi0mZ3Q7ZGV2LCAmIzM0O2NsZWFyaW5nIFR4IHRpbWVzdGFtcCBoYW5nXG4mIzM0Oyk7CiYjNDM7CWlmICh3eC0mZ3Q7cHRwX3R4X3NrYiAmYW1wOyZhbXA7CiYjNDM7CSAgICB0ZXN0X2JpdChXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsIHd4LSZndDtzdGF0ZSkgJmFtcDsmYW1wOwomIzQzOwkgICAgdGltZV9pc19iZWZvcmVfamlmZmllcyh3eC0mZ3Q7cHRwX3R4X3N0YXJ0ICYjNDM7IFdYX1BUUF9UWF9USU1FT1VUKSkgewomIzQzOwkJcmQzMnB0cCh3eCwgV1hfVFNDXzE1ODhfU1RNUEgpOwomIzQzOwkJc2tiID0gd3gtJmd0O3B0cF90eF9za2I7CiYjNDM7CQl3eC0mZ3Q7cHRwX3R4X3NrYiA9IE5VTEw7CiYjNDM7CQljbGVhcl9iaXRfdW5sb2NrKFdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUywgd3gtJmd0O3N0YXRlKTsKIAl9CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7d3gtJmd0O3B0cF90eF9sb2NrKTsKJiM0MzsKJiM0MzsJaWYgKCFza2IpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWRldl9rZnJlZV9za2JfYW55KHNrYik7CiYjNDM7CXd4LSZndDt0eF9od3RzdGFtcF90aW1lb3V0cyYjNDM7JiM0Mzs7CiYjNDM7CWRldl93YXJuKCZhbXA7d3gtJmd0O3BkZXYtJmd0O2RldiwgJiMzNDtjbGVhcmluZyBUeCB0aW1lc3RhbXAgaGFuZ1xuJiMzNDspOwogfQogCiBzdGF0aWMgbG9uZyB3eF9wdHBfZG9fYXV4X3dvcmsoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHApCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oCmluZGV4IDk0NTRlOTAyNThkOGUuLjZiOTQ2MDE0N2NhOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oCkBAIC0xNDMwLDYgJiM0MzsxNDMwLDcgQEAgc3RydWN0IHd4IHsKIAl1bnNpZ25lZCBsb25nIGxhc3Rfb3ZlcmZsb3dfY2hlY2s7CiAJdW5zaWduZWQgbG9uZyBsYXN0X3J4X3B0cF9jaGVjazsKIAl1bnNpZ25lZCBsb25nIHB0cF90eF9zdGFydDsKJiM0MzsJc3BpbmxvY2tfdCBwdHBfdHhfbG9jazsgLyogcHJvdGVjdHMgcHRwX3R4X3NrYiBhbmQgcHRwX3R4X3N0YXJ0ICovCiAJc2VxbG9ja190IGh3X3RjX2xvY2s7IC8qIHNlcWxvY2sgZm9yIHB0cCAqLwogCXN0cnVjdCBjeWNsZWNvdW50ZXIgaHdfY2M7CiAJc3RydWN0IHRpbWVjb3VudGVyIGh3X3RjOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDM5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV2YWx1YXRpbmcgdGhlIFBhdGNoJiMzOTtzIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gYXNrZWQgdG8gYXNzZXNzIGlmIHRoaXMgcGF0Y2ggaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgU3l6a2FsbGVyIGZ1enppbmcuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRoaXM6IGxldCYjMzk7cyBkaXZlIGluLiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGJlaW5nIGNoYW5nZWQuIFRoZSBwYXRjaCB0b3VjaGVzIHRoZXNlIGZpbGVzOiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jYCwgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNgLCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY2AsIGFuZCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmhgLiBUaGF0IHRlbGxzIG1lIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCB0aGUgbmV0d29yayBzdGFjaywgc3BlY2lmaWNhbGx5IHNvbWUgYHdhbmd4dW5gIGV0aGVybmV0IGRyaXZlci4gVGhlIGZhY3QgaXQgdG91Y2hlcyBib3RoIGAuY2AgYW5kIGAuaGAgZmlsZXMgaXMgYSBnb29kIHNpZ24sIGFuZCB0aGUgZmFjdCB0aGF0IGl0cyBpbiB0aGUgZHJpdmVycyBzZWN0aW9uIGlzIGV2ZW4gYmV0dGVyLiBUaGlzIHN1Z2dlc3RzIHRoZSBjaGFuZ2UgaXMgYWRkaW5nIG9yIG1vZGlmeWluZyBmdW5jdGlvbmFsaXR5IHJlbGF0ZWQgdG8gaGFyZHdhcmUgaW50ZXJhY3Rpb24gYW5kIGRhdGEgc3RydWN0dXJlcy4KCk5vdywgbXkgbmV4dCBxdWVzdGlvbiBpczogd2hhdCAqaXMqIHRoaXMgYHdhbmd4dW5gIGRyaXZlcj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsIGFuZCB0aGUgaGFyZHdhcmUuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIGVpdGhlciBncmVwcGVyLCBvciBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcywgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZS4gVGhpcyBjb250ZXh0IGlzIGNyaXRpY2FsIGZvciBkZWNpZGluZyBpZiB0aGVyZSBhcmUgbGlrZWx5IHRvIGJlIGludGVyZXN0aW5nIGFuZCBmdXp6ZXItYWNjZXNzaWJsZSBjb2RlIHBhdGhzIGluIHRoZSBjaGFuZ2VzLiBJZiBpdCBpcyBpbnRlcmVzdGluZywgdGhlbiBJJiMzOTtsbCBkZWx2ZSBkZWVwZXIgYW5kIHNlZSBpZiB0aGUgY2hhbmdlcyBhcmUgaW1wb3J0YW50IGZvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZy4qV1gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz0xNz1pZiBORVRfVkVORE9SX1dBTkdYVU5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0xOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzoxOTpjb25maWcgTElCV1hcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0yMC1cdHRyaXN0YXRlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9zcmlvdi5jPTE0OT1zdGF0aWMgaW50IHd4X3BjaV9zcmlvdl9lbmFibGUoc3RydWN0IHBjaV9kZXYgKmRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3NyaW92LmMtMTY2LVx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3ZmczsgaSYjNDM7JiM0MzspXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3NyaW92LmM6MTY3Olx0XHR3eF92Zl9jb25maWd1cmF0aW9uKGRldiwgKGkgfCBXWF9WRl9FTkFCTEUpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfc3Jpb3YuYy0xNjgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjgyMwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWdgIGZpbGU6CgoqKkRpdmluZyBpbnRvIHRoZSBXYW5neHVuIEV0aGVybmV0IERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYEtjb25maWdgIGZvciB0aGUgV2FuZ3h1biBFdGhlcm5ldCBkcml2ZXIuIEl0JiMzOTtzIGEga2V5IHBpZWNlLCBvYnZpb3VzbHksIGRlZmluaW5nIGhvdyB0aGlzIHBhcnRpY3VsYXIgZHJpdmVyIGdldHMgY29uZmlndXJlZCB3aXRoaW4gdGhlIGxhcmdlciBrZXJuZWwgYnVpbGQgcHJvY2Vzcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvcHRpb25zIGFyZSBleHBvc2VkLCB0aGVpciBkZXBlbmRlbmNpZXMsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgY2FwYWJpbGl0aWVzLgoKRmlyc3QsIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBgY29uZmlnYCBzdGF0ZW1lbnRzIHRoYXQgZGVmaW5lIHRoZSBvcHRpb25zIHRoZW1zZWx2ZXMuIEkgd2FudCB0byBzZWUgd2hpY2ggZmVhdHVyZXMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQsIGFuZCB3aGF0IHRob3NlIGZlYXR1cmVzIGFyZSwgZm9yIGV4YW1wbGUsIHRoaW5ncyBsaWtlIGp1bWJvIGZyYW1lIHN1cHBvcnQsIGZsb3cgY29udHJvbCwgb3IgVkxBTiB0YWdnaW5nLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgdGhlIGhlbHAgdGV4dCBhc3NvY2lhdGVkIHdpdGggZWFjaCBvcHRpb24gdG8gdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiB0aGVzZSBmZWF0dXJlcywgd2hhdCB0aGV5IGRvLCBhbmQgd2hhdCB0aGUgdXNlciBuZWVkcyB0byBjb25zaWRlciB3aGVuIGVuYWJsaW5nIHRoZW0uIElzIHRoZXJlIGFueSBkZXRhaWwgdGhhdCBpbXBsaWVzIGhhcmR3YXJlIHJldmlzaW9uPwoKVGhlbiwgdGhlIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzIGFyZSBjcnVjaWFsLiBJJiMzOTttIGdvaW5nIHRvIGZvbGxvdyB0aGUgZGVwZW5kZW5jeSBjaGFpbnMuIEFyZSB0aGVyZSBkZXBlbmRlbmNpZXMgb24gc3BlY2lmaWMgaGFyZHdhcmUgYXJjaGl0ZWN0dXJlcywgb3RoZXIgZHJpdmVycywgb3Iga2VybmVsIGZlYXR1cmVzPyBBcmUgdGhlcmUgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgbmV0d29yayBzdWJzeXN0ZW1zPyBUaGlzIGlzIHdoZXJlIEkgY2FuIHN0YXJ0IHRvIHBpZWNlIHRvZ2V0aGVyIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoaXMgZHJpdmVyIHdpbGwgZXZlbiBiZSBjb25zaWRlcmVkIGZvciBpbmNsdXNpb24uCgpOZXh0LCBJJiMzOTtsbCBiZSBmb2N1c2VkIG9uIGBkZWZhdWx0YCB2YWx1ZXMuIFdoYXQgYXJlIHRoZSBzZW5zaWJsZSBzdGFydGluZyBwb2ludHMgZm9yIHRoZSBkcml2ZXImIzM5O3MgY29uZmlndXJhdGlvbj8gQXJlIHRoZXkgY29uc2VydmF0aXZlIGRlZmF1bHRzPyBEbyB0aGV5IHN1Z2dlc3QgY29tbW9uIHVzZSBjYXNlcz8gQXJlIHRoZSBkZWZhdWx0cyBwbGF0Zm9ybS1zcGVjaWZpYz8gVGhlIGRlZmF1bHRzIHRoZW1zZWx2ZXMgZ2l2ZSBhIGh1Z2UgY2x1ZSBhcyB0byBob3cgdGhlIGRldmVsb3BlcnMgZXhwZWN0IHRoaXMgZHJpdmVyIHRvIGJlIHVzZWQgb3Igd2hhdCBhc3N1bXB0aW9ucyB0aGV5IG1hZGUgZHVyaW5nIGRldmVsb3BtZW50LgoKRmluYWxseSwgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGBzZWxlY3RgIHN0YXRlbWVudHMsIHdoaWNoIGFyZSB1c2VkIHRvIGltcGxpY2l0bHkgZW5hYmxlIG90aGVyIHN5bWJvbHMgd2hlbiBhbiBvcHRpb24gaXMgY2hvc2VuLiBUaGlzIGlzIHdoZXJlIEkgbWlnaHQgZGlzY292ZXIgc2lkZSBlZmZlY3RzIG9yIGRlcGVuZGVuY2llcyB0aGF0IGFyZW4mIzM5O3QgaW1tZWRpYXRlbHkgb2J2aW91cywgc3VjaCBhcyBlbmFibGluZyBkZWJ1ZyBmbGFncyBvciBvdGhlciBzdXBwb3J0IGZlYXR1cmVzLgoKT3ZlcmFsbCwgSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGEgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4gSXQmIzM5O3MgYSBzdGFuZGFyZCBuZXR3b3JrIGRyaXZlciwgc28gaXQgc2hvdWxkIGZvbGxvdyBlc3RhYmxpc2hlZCBjb252ZW50aW9ucy4gSSYjMzk7bSBsb29raW5nIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gc3BhY2UsIGhvdyB0aGUgZHJpdmVyIGludGVncmF0ZXMgd2l0aCB0aGUgbGFyZ2VyIGtlcm5lbCwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgcXVpcmtzIG9yIHBsYXRmb3JtLXNwZWNpZmljIGNvbnNpZGVyYXRpb25zIEkgbmVlZCB0byBrZWVwIGluIG1pbmQuIExldCYjMzk7cyBzZWUgd2hhdCBpdCBob2xkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFdhbmd4dW4gbmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgTkVUX1ZFTkRPUl9XQU5HWFVOXG4gICA3Olx0XHRib29sIFwmIzM0O1dhbmd4dW4gZGV2aWNlc1wmIzM0O1xuICAgODpcdFx0ZGVmYXVsdCB5XG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIElmIHlvdSBoYXZlIGEgbmV0d29yayAoRXRoZXJuZXQpIGNhcmQgZnJvbSBXYW5neHVuKFIpLCBzYXkgWS5cbiAgMTE6XHRcbiAgMTI6XHRcdCAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiBkb2VzbiYjMzk7dCBkaXJlY3RseSBhZmZlY3QgdGhlXG4gIDEzOlx0XHQgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGxcbiAgMTQ6XHRcdCAgdGhlIHF1ZXN0aW9ucyBhYm91dCBXYW5neHVuKFIpIGNhcmRzLiBJZiB5b3Ugc2F5IFksIHlvdSB3aWxsXG4gIDE1Olx0XHQgIGJlIGFza2VkIGZvciB5b3VyIHNwZWNpZmljIGNhcmQgaW4gdGhlIGZvbGxvd2luZyBxdWVzdGlvbnMuXG4gIDE2Olx0XG4gIDE3Olx0aWYgTkVUX1ZFTkRPUl9XQU5HWFVOXG4gIDE4Olx0XG4gIDE5Olx0Y29uZmlnIExJQldYXG4gIDIwOlx0XHR0cmlzdGF0ZVxuICAyMTpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuICAyMjpcdFx0c2VsZWN0IFBBR0VfUE9PTFxuICAyMzpcdFx0c2VsZWN0IERJTUxJQlxuICAyNDpcdFx0c2VsZWN0IFBIWUxJTktcbiAgMjU6XHRcdGhlbHBcbiAgMjY6XHRcdENvbW1vbiBsaWJyYXJ5IGZvciBXYW5neHVuKFIpIEV0aGVybmV0IGRyaXZlcnMuXG4gIDI3Olx0XG4gIDI4Olx0Y29uZmlnIE5HQkVcbiAgMjk6XHRcdHRyaXN0YXRlIFwmIzM0O1dhbmd4dW4oUikgR2JFIFBDSSBFeHByZXNzIGFkYXB0ZXJzIHN1cHBvcnRcJiMzNDtcbiAgMzA6XHRcdGRlcGVuZHMgb24gUENJXG4gIDMxOlx0XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG4gIDMyOlx0XHRzZWxlY3QgTElCV1hcbiAgMzM6XHRcdGhlbHBcbiAgMzQ6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgV2FuZ3h1bihSKSBHYkUgUENJIEV4cHJlc3MgZmFtaWx5IG9mXG4gIDM1Olx0XHQgIGFkYXB0ZXJzLlxuICAzNjpcdFxuICAzNzpcdFx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cbiAgMzg6XHRcdCAgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlLnJzdFx1MDAzZS5cbiAgMzk6XHRcbiAgNDA6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxuICA0MTpcdFx0ICB3aWxsIGJlIGNhbGxlZCBuZ2JlLlxuICA0MjpcdFxuICA0MzpcdGNvbmZpZyBUWEdCRVxuICA0NDpcdFx0dHJpc3RhdGUgXCYjMzQ7V2FuZ3h1bihSKSAxMC8yNS80MEdiRSBQQ0kgRXhwcmVzcyBhZGFwdGVycyBzdXBwb3J0XCYjMzQ7XG4gIDQ1Olx0XHRkZXBlbmRzIG9uIFBDSVxuICA0NjpcdFx0ZGVwZW5kcyBvbiBDT01NT05fQ0xLXG4gIDQ3Olx0XHRkZXBlbmRzIG9uIEkyQ19ERVNJR05XQVJFX1BMQVRGT1JNXG4gIDQ4Olx0XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG4gIDQ5Olx0XHRzZWxlY3QgTUFSVkVMTF8xMEdfUEhZXG4gIDUwOlx0XHRzZWxlY3QgUkVHTUFQXG4gIDUxOlx0XHRzZWxlY3QgSFdNT04gaWYgVFhHQkU9eVxuICA1MjpcdFx0c2VsZWN0IFNGUFxuICA1MzpcdFx0c2VsZWN0IEdQSU9MSUJcbiAgNTQ6XHRcdHNlbGVjdCBHUElPTElCX0lSUUNISVBcbiAgNTU6XHRcdHNlbGVjdCBQQ1NfWFBDU1xuICA1NjpcdFx0c2VsZWN0IExJQldYXG4gIDU3Olx0XHRoZWxwXG4gIDU4Olx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIFdhbmd4dW4oUikgMTAvMjUvNDBHYkUgUENJIEV4cHJlc3MgZmFtaWx5IG9mXG4gIDU5Olx0XHQgIGFkYXB0ZXJzLlxuICA2MDpcdFxuICA2MTpcdFx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cbiAgNjI6XHRcdCAgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS5yc3RcdTAwM2UuXG4gIDYzOlx0XG4gIDY0Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGVcbiAgNjU6XHRcdCAgd2lsbCBiZSBjYWxsZWQgdHhnYmUuXG4gIDY2Olx0XG4gIDY3Olx0Y29uZmlnIFRYR0JFVkZcbiAgNjg6XHRcdHRyaXN0YXRlIFwmIzM0O1dhbmd4dW4oUikgMTAvMjUvNDBHIFZpcnR1YWwgRnVuY3Rpb24gRXRoZXJuZXQgc3VwcG9ydFwmIzM0O1xuICA2OTpcdFx0ZGVwZW5kcyBvbiBQQ0lcbiAgNzA6XHRcdGRlcGVuZHMgb24gUENJX01TSVxuICA3MTpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuICA3MjpcdFx0c2VsZWN0IExJQldYXG4gIDczOlx0XHRoZWxwXG4gIDc0Olx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHZpcnR1YWwgZnVuY3Rpb25zIGZvciBTUDEwMDBBLCBXWDE4MjBBTCxcbiAgNzU6XHRcdCAgV1g1WFhYLCBXWDVYWFhBTC5cbiAgNzY6XHRcbiAgNzc6XHRcdCAgVGhpcyBkcml2ZXIgd2FzIGZvcm1lcmx5IG5hbWVkIHR4Z2JldmYuXG4gIDc4Olx0XG4gIDc5Olx0XHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxuICA4MDpcdFx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYucnN0XHUwMDNlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0NjUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhY2hhYmlsaXR5IGFuZCBIYXJkd2FyZSBEcml2ZXIgQ29uc2lkZXJhdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gYWRoZXJpbmcgdG8gdGhlIHJ1bGVzIHJlZ2FyZGluZyByZWFjaGFiaWxpdHksIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIGhhcmR3YXJlIGRyaXZlcnMuIFRoZSBndWlkZWxpbmVzIGFyZSBjbGVhcjogYSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIHVuZGVyIHNwZWNpZmljIG5lZ2F0aXZlIGNyaXRlcmlhLiBOb3RhYmx5LCB0aGlzIGFwcGxpZXMgdG8gc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLCBsaWtlIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzICh0aGluayBtbHhzdywgcGRzX2NvcmUsIHFlZCwgaW9uaWMsIGFtZGdwdSkgdGhhdCAqYWJzb2x1dGVseSogcmVxdWlyZSBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgdGhhdCBhcmVuJiMzOTt0IHByb3Blcmx5IGVtdWxhdGVkIGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudC4gQWxzbywgYW55dGhpbmcgdGhhdCBpbnZvbHZlcyB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMsIHN1Y2ggYXMgZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyBsaWtlIGAucmVtb3ZlYCwgYC5zaHV0ZG93bmAsIG9yIGBwY2lfdW5yZWdpc3Rlcl9kcml2ZXJgIHRoYXQgYXJlIHRyaWdnZXJlZCBvbmx5IGJ5IHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nIGlzIG9mZiB0aGUgdGFibGUuIFBhdGhzIHNwZWNpZmljIHRvIGFuIGFyY2hpdGVjdHVyZSBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGZhbGwgaW50byB0aGlzIGNhdGVnb3J5IGFzIHdlbGwuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBJcyB0aGlzIFdhbmd4dW4gRXRoZXJuZXTigJRzcGVjaWZpY2FsbHksIHRoZSBMSUJXWCwgTkdCRSwgVFhHQkUsIGFuZCBUWEdCRVZGIGRyaXZlcnPigJQgY29uc2lkZXJlZCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBOSUMgaGFyZHdhcmU/IFRoaXMgaXMgdGhlIGNydXggb2YgdGhlIG1hdHRlci4gSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGVzZSBkcml2ZXJzIHJlbHkgb24gcGh5c2ljYWwgUENJIGhhcmR3YXJlIHRoYXQgaXNuJiMzOTt0IHJlcGxpY2F0ZWQgZWZmZWN0aXZlbHkgaW4gUUVNVS4gVG8gZG8gdGhpcywgSSBuZWVkIHRvIGNoZWNrIHRoZSBQQ0kgSURzIG9mIGBOR0JFYCwgYFRYR0JFYCwgYW5kIGBUWEdCRVZGYCBhbmQgc2VlIHdoYXQgdGhleSB0ZWxsIG1lIGFib3V0IHRoZSBoYXJkd2FyZSBkZXBlbmRlbmNpZXMuIFRoYXQgc2hvdWxkIHBvaW50IG1lIGluIHRoZSByaWdodCBkaXJlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtQQ0lfREVWSUNFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1biYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA2MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSBkZWVwIGluIHRoZSB3ZWVkcyBvZiB0aGlzIHN1YmplY3Q6CgoqKkRpZ2dpbmcgaW50byB3YW5neHVuJiMzOTtzIGBwY2lfZHJpdmVyYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7TGV0JiMzOTtzIHplcm8gaW4gb24gdGhlIGBwY2lfZHJpdmVyYCB3aXRoaW4gd2FuZ3h1bi4mIzM0OyBUaGlzIG1lYW5zIEkmIzM5O20gcHJvYmFibHkgdHJvdWJsZXNob290aW5nIHNvbWV0aGluZywgb3IgcGVyaGFwcyByZXZpZXdpbmcgdGhlIGRyaXZlciYjMzk7cyBpbXBsZW1lbnRhdGlvbiBhcyBwYXJ0IG9mIGEgbGFyZ2VyIHByb2plY3QuIEkmIzM5O20gbGlrZWx5IHRhcmdldGluZyB0aGlzIHNwZWNpZmljIGFyZWEgYmVjYXVzZSBpdCYjMzk7cyBlaXRoZXIgY2F1c2luZyBhIHByb2JsZW0sIG5lZWRzIG9wdGltaXphdGlvbiwgb3IgaXMgY3JpdGljYWwgdG8gYSBzeXN0ZW0gSSYjMzk7bSB3b3JraW5nIG9uLiBUaGUgJiMzNDt3YW5neHVuJiMzNDsgcGFydCB0ZWxscyBtZSB0aGUgc2NvcGU7IEkmIzM5O20gZGVhbGluZyB3aXRoIGEgZHJpdmVyIHdpdGhpbiBhIHBhcnRpY3VsYXIgZnJhbWV3b3JrIG9yIHN5c3RlbS4gTXkgZm9jdXMgaXMgbm93IG5hcnJvd2luZzsgdGltZSB0byBkaXZlIGludG8gdGhhdCBzcGVjaWZpYyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwY2lfZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1biYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM9OTUzPXN0YXRpYyBpbnQgbmdiZV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTk4Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzo5ODM6c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG5nYmVfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTk4NC1cdC5uYW1lICAgICA9IG5nYmVfZHJpdmVyX25hbWUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTk5NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzo5OTU6bW9kdWxlX3BjaV9kcml2ZXIobmdiZV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTk5Ni1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jPTI0OT1zdGF0aWMgREVGSU5FX1NJTVBMRV9ERVZfUE1fT1BTKG5nYmV2Zl9wbV9vcHMsIHd4dmZfc3VzcGVuZCwgd3h2Zl9yZXN1bWUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYy0yNTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjI1MTpzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmdiZXZmX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmMtMjUyLVx0Lm5hbWUgICAgID0gS0JVSUxEX01PRE5BTUUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYy0yNjAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjI2MTptb2R1bGVfcGNpX2RyaXZlcihuZ2JldmZfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmMtMjYyLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jPTk5MT1zdGF0aWMgdm9pZCB0eGdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmMtMTAyMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jOjEwMjE6c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JlX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jLTEwMjItXHQubmFtZSAgICAgPSB0eGdiZV9kcml2ZXJfbmFtZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYy0xMDMwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmM6MTAzMTptb2R1bGVfcGNpX2RyaXZlcih0eGdiZV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmMtMTAzMi1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYvdHhnYmV2Zl9tYWluLmM9MzE0PXN0YXRpYyBERUZJTkVfU0lNUExFX0RFVl9QTV9PUFModHhnYmV2Zl9wbV9vcHMsIHd4dmZfc3VzcGVuZCwgd3h2Zl9yZXN1bWUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jLTMxNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYzozMTY6c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JldmZfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jLTMxNy1cdC5uYW1lICAgICA9IEtCVUlMRF9NT0ROQU1FLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYy0zMjUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYvdHhnYmV2Zl9tYWluLmM6MzI2Om1vZHVsZV9wY2lfZHJpdmVyKHR4Z2JldmZfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYy0zMjctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzU0CgkJCQkJCQlvdXRwdXQ6IDk5CgkJCQkJCQl0aG91Z2h0czogNTY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQ6IFdhbmd4dW4gRHJpdmVyIEZ1enphYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuIFdlJiMzOTtyZSBsb29raW5nIGF0IHRoZSBXYW5neHVuIGZhbWlseSBvZiBFdGhlcm5ldCBkcml2ZXJzIOKAkyBsaWJ3eCwgbmdiZSwgdHhnYmUsIGFuZCB0aGUgVkYgdmVyc2lvbnMuIFRoZXNlIGFyZSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVycyBmb3IgKnBoeXNpY2FsKiBXYW5neHVuIFBDSWUgbmV0d29yayBhZGFwdGVycy4gVGhpcyBpc24mIzM5O3QgeW91ciBzdGFuZGFyZCB2aXJ0aW8gb3IgZTEwMDAsIG9yIGV2ZW4gc29tZXRoaW5nIGVtdWxhdGVkIHdpdGhpbiBRRU1VLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCByZWFsIGhhcmR3YXJlLCBzcGVjaWZpY2FsbHkgV2FuZ3h1biYjMzk7cyBHYkUgLyAxMC8yNS80MEdiRSBQQ0llIGNhcmRzLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgZnV6emluZyB0aGlzIGNvZGUgaXMgdmlhYmxlLgoKTG9va2luZyBhdCB0aGUgY29kZSwgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIGNvbmNlbnRyYXRlZCB3aXRoaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvYC4gVGhpcyBpcyB0aGUgY29yZSBsaWJyYXJ5LCBgbGlid3hgLCBzaGFyZWQgYnkgYWxsIHRob3NlIFdhbmd4dW4gZHJpdmVycy4gVGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0b3VjaGVkIOKAkyBgd3hfc3dfaW5pdGAsIGB3eF94bWl0X2ZyYW1lX3JpbmdgLCBgd3hfcHRwX2NsZWFyX3R4X3RpbWVzdGFtcGAsIGB3eF9wdHBfdHhfaHd0c3RhbXBfd29ya2AsIGFuZCBgd3hfcHRwX3R4X2hhbmdgIOKAkyBhbGwgcmVsYXRlIHRvIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBkcml2ZXIgYW5kIHRoZSBwaHlzaWNhbCBoYXJkd2FyZS4KClRoZSBrZXkgcG9pbnQgaXMgdGhhdCB0aGUgKm9ubHkqIHdheSB0byBhY3R1YWxseSBleGVyY2lzZSB0aGVzZSBmdW5jdGlvbnMgaXMgd2l0aCBhIHBoeXNpY2FsIFdhbmd4dW4gUENJZSBOSUMuIEl0JiMzOTtzIG5vdCBnb2luZyB0byBydW4gaW4gYSB0eXBpY2FsIFFFTVUgaW5zdGFuY2Ugb3IgYW55IG9mIHRoZSBzdGFuZGFyZCB2aXJ0dWFsaXplZCB0ZXN0IGVudmlyb25tZW50cy4gVGhlIEFTSUMvUENJZSBjYXJkIGlzIGVzc2VudGlhbCB0byBleGVjdXRlIHRoZSBjb2RlLgoKVGhlcmVmb3JlLCBnaXZlbiB0aGUgc3RydWN0dXJhbCBsaW1pdGF0aW9ucywgYFdvcnRoRnV6emluZ2AgaXMgZGVmaW5pdGl2ZWx5IGBmYWxzZWAuCgpGb3IgdGhlIHJlc3VsdHMsIEkmIzM5O2xsIG5lZWQgdG8gc3BlY2lmeSB0aGUgcmVhc29uaW5nOgoKKiAgIGBXb3J0aEZ1enppbmdgOiBgZmFsc2VgCiogICBgUmVhc29uaW5nYDogVGhlIGNoYW5nZXMgYXJlIHdpdGhpbiB0aGUgV2FuZ3h1biBFdGhlcm5ldCBkcml2ZXIgbGlicmFyeSAoYGRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvYCkuIFRoaXMgbGlicmFyeSBpbnRlcmZhY2VzIHdpdGggdmVuZG9yLXNwZWNpZmljIFBDSWUgTklDIGhhcmR3YXJlIG1hbnVmYWN0dXJlZCBieSBXYW5neHVuIChuZ2JlLCB0eGdiZSwgZXRjLiksIHJlcXVpcmluZyBwaHlzaWNhbCBXYW5neHVuIEFTSUMvUENJZSBjYXJkcyBmb3IgcHJvcGVyIG9wZXJhdGlvbi4gVGhlc2UgY2FyZHMgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIG90aGVyIGNvbW1vbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoaXMgc3RydWN0dXJhbGx5IG1ha2VzIHRoZSBjb2RlIHVucmVhY2hhYmxlIGZvciBhbnkgc3RhbmRhcmQgZnV6emluZyBzZXR1cC4KKiAgIGBFbmFibGVDb25maWdzYDogYFtdYAoqICAgYEZvY3VzU3ltYm9sc2A6IGBbXWAKCkFuZCBmaW5hbGx5LCBJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2FuZ3h1biBFdGhlcm5ldCBjb21tb24gbGlicmFyeSAobGlid3gpIHVzZWQgYnkgV2FuZ3h1biBQQ0llIG5ldHdvcmsgZHJpdmVycyAobmdiZSwgdHhnYmUpLiBUaGVzZSBkcml2ZXJzIHRhcmdldCB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBOSUNzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2FuZ3h1biBFdGhlcm5ldCBjb21tb24gbGlicmFyeSAobGlid3gpIHVzZWQgYnkgV2FuZ3h1biBQQ0llIG5ldHdvcmsgZHJpdmVycyAobmdiZSwgdHhnYmUpLiBUaGVzZSBkcml2ZXJzIHRhcmdldCB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBOSUNzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODo0NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6NDc6MjAuODA0ODI1MDU5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAwMjgyMTQxMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2FuZ3h1biBFdGhlcm5ldCBjb21tb24gbGlicmFyeSAobGlid3gpIHVzZWQgYnkgV2FuZ3h1biBQQ0llIG5ldHdvcmsgZHJpdmVycyAobmdiZSwgdHhnYmUpLiBUaGVzZSBkcml2ZXJzIHRhcmdldCB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBOSUNzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODo0NzoyMC44MDQ4Mjk3OTlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNTMzNjUzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGJkZDk4MjE2MDk3ODkxNWMxN2MwNDgzZmYwMGJhMmFkMjE4Yjc1MzdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgOCAwODo0NzoxOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmNcXG5pbmRleCAxMjJjNDk1MmQyMDNmLi4xMTM1NTI1ODZiZTcwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xcbkBAIC0yNTE4LDYgKzI1MTgsNyBAQCBpbnQgd3hfc3dfaW5pdChzdHJ1Y3Qgd3ggKnd4KVxcbiBcXHR9XFxuIFxcbiBcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2d3gtXFx1MDAzZWh3X3N0YXRzX2xvY2spO1xcbitcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2d3gtXFx1MDAzZXB0cF90eF9sb2NrKTtcXG4gXFx0bXV0ZXhfaW5pdChcXHUwMDI2d3gtXFx1MDAzZXJlc2V0X2xvY2spO1xcbiBcXHRiaXRtYXBfemVybyh3eC1cXHUwMDNlc3RhdGUsIFdYX1NUQVRFX05CSVRTKTtcXG4gXFx0Yml0bWFwX3plcm8od3gtXFx1MDAzZWZsYWdzLCBXWF9QRl9GTEFHU19OQklUUyk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXFxuaW5kZXggZWQ1YWFkNzg1N2JkOS4uOTExODgxMzMzNGE5ZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xcbkBAIC0xNjEyLDYgKzE2MTIsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3Qgd3hfeG1pdF9mcmFtZV9yaW5nKHN0cnVjdCBza19idWZmICpza2IsXFxuIHtcXG4gXFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KHR4X3JpbmctXFx1MDAzZW5ldGRldik7XFxuIFxcdHUxNiBjb3VudCA9IFRYRF9VU0VfQ09VTlQoc2tiX2hlYWRsZW4oc2tiKSk7XFxuK1xcdHN0cnVjdCBza19idWZmICpwdHBfdHhfc2tiID0gTlVMTDtcXG4gXFx0c3RydWN0IHd4X3R4X2J1ZmZlciAqZmlyc3Q7XFxuIFxcdHU4IGhkcl9sZW4gPSAwLCBwdHlwZTtcXG4gXFx0dW5zaWduZWQgc2hvcnQgZjtcXG5AQCAtMTY0OSw2ICsxNjUwLDcgQEAgc3RhdGljIG5ldGRldl90eF90IHd4X3htaXRfZnJhbWVfcmluZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXG4gXFx0aWYgKHVubGlrZWx5KHNrYl9zaGluZm8oc2tiKS1cXHUwMDNldHhfZmxhZ3MgXFx1MDAyNiBTS0JUWF9IV19UU1RBTVApIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICB3eC1cXHUwMDNlcHRwX2Nsb2NrKSB7XFxuK1xcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2d3gtXFx1MDAzZXB0cF90eF9sb2NrKTtcXG4gXFx0XFx0aWYgKHd4LVxcdTAwM2V0c3RhbXBfY29uZmlnLnR4X3R5cGUgPT0gSFdUU1RBTVBfVFhfT04gXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgICF0ZXN0X2FuZF9zZXRfYml0X2xvY2soV1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLFxcbiBcXHRcXHRcXHRcXHRcXHQgICB3eC1cXHUwMDNlc3RhdGUpKSB7XFxuQEAgLTE2NTksNiArMTY2MSw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCB3eF94bWl0X2ZyYW1lX3Jpbmcoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0d3gtXFx1MDAzZXR4X2h3dHN0YW1wX3NraXBwZWQrKztcXG4gXFx0XFx0fVxcbitcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2d3gtXFx1MDAzZXB0cF90eF9sb2NrKTtcXG4gXFx0fVxcbiBcXG4gXFx0LyogcmVjb3JkIGluaXRpYWwgZmxhZ3MgYW5kIHByb3RvY29sICovXFxuQEAgLTE2ODUsMTAgKzE2ODgsMTcgQEAgc3RhdGljIG5ldGRldl90eF90IHd4X3htaXRfZnJhbWVfcmluZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRmaXJzdC1cXHUwMDNlc2tiID0gTlVMTDtcXG4gY2xlYW51cF90eF90c3RhbXA6XFxuIFxcdGlmICh1bmxpa2VseSh0eF9mbGFncyBcXHUwMDI2IFdYX1RYX0ZMQUdTX1RTVEFNUCkpIHtcXG4tXFx0XFx0ZGV2X2tmcmVlX3NrYl9hbnkod3gtXFx1MDAzZXB0cF90eF9za2IpO1xcbi1cXHRcXHR3eC1cXHUwMDNlcHRwX3R4X3NrYiA9IE5VTEw7XFxuK1xcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2d3gtXFx1MDAzZXB0cF90eF9sb2NrKTtcXG4rXFx0XFx0aWYgKHd4LVxcdTAwM2VwdHBfdHhfc2tiID09IHNrYikge1xcbitcXHRcXHRcXHRwdHBfdHhfc2tiID0gd3gtXFx1MDAzZXB0cF90eF9za2I7XFxuK1xcdFxcdFxcdHd4LVxcdTAwM2VwdHBfdHhfc2tiID0gTlVMTDtcXG4rXFx0XFx0XFx0Y2xlYXJfYml0X3VubG9jayhXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsXFxuK1xcdFxcdFxcdFxcdFxcdCB3eC1cXHUwMDNlc3RhdGUpO1xcbitcXHRcXHR9XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ3eC1cXHUwMDNlcHRwX3R4X2xvY2spO1xcbitcXG4rXFx0XFx0ZGV2X2tmcmVlX3NrYl9hbnkocHRwX3R4X3NrYik7XFxuIFxcdFxcdHd4LVxcdTAwM2V0eF9od3RzdGFtcF9lcnJvcnMrKztcXG4tXFx0XFx0Y2xlYXJfYml0X3VubG9jayhXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsIHd4LVxcdTAwM2VzdGF0ZSk7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiBORVRERVZfVFhfT0s7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXFxuaW5kZXggNDcwOGU3ZjM5NThmNy4uYTA5MjliNDg0NGU4ZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xcbkBAIC0xMzksMTIgKzEzOSwxNiBAQCBzdGF0aWMgaW50IHd4X3B0cF9zZXR0aW1lNjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsXFxuICAqL1xcbiBzdGF0aWMgdm9pZCB3eF9wdHBfY2xlYXJfdHhfdGltZXN0YW1wKHN0cnVjdCB3eCAqd3gpXFxuIHtcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4rXFxuK1xcdHNwaW5fbG9ja19iaChcXHUwMDI2d3gtXFx1MDAzZXB0cF90eF9sb2NrKTtcXG4gXFx0cmQzMnB0cCh3eCwgV1hfVFNDXzE1ODhfU1RNUEgpO1xcbi1cXHRpZiAod3gtXFx1MDAzZXB0cF90eF9za2IpIHtcXG4tXFx0XFx0ZGV2X2tmcmVlX3NrYl9hbnkod3gtXFx1MDAzZXB0cF90eF9za2IpO1xcbi1cXHRcXHR3eC1cXHUwMDNlcHRwX3R4X3NrYiA9IE5VTEw7XFxuLVxcdH1cXG4rXFx0c2tiID0gd3gtXFx1MDAzZXB0cF90eF9za2I7XFxuK1xcdHd4LVxcdTAwM2VwdHBfdHhfc2tiID0gTlVMTDtcXG4gXFx0Y2xlYXJfYml0X3VubG9jayhXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsIHd4LVxcdTAwM2VzdGF0ZSk7XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ3eC1cXHUwMDNlcHRwX3R4X2xvY2spO1xcbitcXG4rXFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTE3NCw1MCArMTc4LDQzIEBAIHN0YXRpYyB2b2lkIHd4X3B0cF9jb252ZXJ0X3RvX2h3dHN0YW1wKHN0cnVjdCB3eCAqd3gsXFxuIFxcdGh3dHN0YW1wLVxcdTAwM2Vod3RzdGFtcCA9IG5zX3RvX2t0aW1lKG5zKTtcXG4gfVxcbiBcXG4tLyoqXFxuLSAqIHd4X3B0cF90eF9od3RzdGFtcCAtIHV0aWxpdHkgZnVuY3Rpb24gd2hpY2ggY2hlY2tzIGZvciBUWCB0aW1lIHN0YW1wXFxuLSAqIEB3eDogdGhlIHByaXZhdGUgYm9hcmQgc3RydWN0XFxuLSAqXFxuLSAqIGlmIHRoZSB0aW1lc3RhbXAgaXMgdmFsaWQsIHdlIGNvbnZlcnQgaXQgaW50byB0aGUgdGltZWNvdW50ZXIgbnNcXG4tICogdmFsdWUsIHRoZW4gc3RvcmUgdGhhdCByZXN1bHQgaW50byB0aGUgc2hod3RzdGFtcHMgc3RydWN0dXJlIHdoaWNoXFxuLSAqIGlzIHBhc3NlZCB1cCB0aGUgbmV0d29yayBzdGFja1xcbi0gKi9cXG4tc3RhdGljIHZvaWQgd3hfcHRwX3R4X2h3dHN0YW1wKHN0cnVjdCB3eCAqd3gpXFxuK3N0YXRpYyBpbnQgd3hfcHRwX3R4X2h3dHN0YW1wX3dvcmsoc3RydWN0IHd4ICp3eClcXG4ge1xcbiBcXHRzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMgc2hod3RzdGFtcHM7XFxuLVxcdHN0cnVjdCBza19idWZmICpza2IgPSB3eC1cXHUwMDNlcHRwX3R4X3NrYjtcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4rXFx0dTMyIHRzeW5jdHhjdGw7XFxuIFxcdHU2NCByZWd2YWwgPSAwO1xcbiBcXG4tXFx0cmVndmFsIHw9ICh1NjQpcmQzMnB0cCh3eCwgV1hfVFNDXzE1ODhfU1RNUEwpO1xcbi1cXHRyZWd2YWwgfD0gKHU2NClyZDMycHRwKHd4LCBXWF9UU0NfMTU4OF9TVE1QSCkgXFx1MDAzY1xcdTAwM2MgMzI7XFxuLVxcbi1cXHR3eF9wdHBfY29udmVydF90b19od3RzdGFtcCh3eCwgXFx1MDAyNnNoaHd0c3RhbXBzLCByZWd2YWwpO1xcbi1cXG4tXFx0d3gtXFx1MDAzZXB0cF90eF9za2IgPSBOVUxMO1xcbi1cXHRjbGVhcl9iaXRfdW5sb2NrKFdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUywgd3gtXFx1MDAzZXN0YXRlKTtcXG4tXFx0c2tiX3RzdGFtcF90eChza2IsIFxcdTAwMjZzaGh3dHN0YW1wcyk7XFxuLVxcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XFxuLVxcdHd4LVxcdTAwM2V0eF9od3RzdGFtcF9wa3RzKys7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgd3hfcHRwX3R4X2h3dHN0YW1wX3dvcmsoc3RydWN0IHd4ICp3eClcXG4te1xcbi1cXHR1MzIgdHN5bmN0eGN0bDtcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ3eC1cXHUwMDNlcHRwX3R4X2xvY2spO1xcbiBcXG4gXFx0Lyogd2UgaGF2ZSB0byBoYXZlIGEgdmFsaWQgc2tiIHRvIHBvbGwgZm9yIGEgdGltZXN0YW1wICovXFxuIFxcdGlmICghd3gtXFx1MDAzZXB0cF90eF9za2IpIHtcXG4tXFx0XFx0d3hfcHRwX2NsZWFyX3R4X3RpbWVzdGFtcCh3eCk7XFxuK1xcdFxcdHJkMzJwdHAod3gsIFdYX1RTQ18xNTg4X1NUTVBIKTtcXG4rXFx0XFx0Y2xlYXJfYml0X3VubG9jayhXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsIHd4LVxcdTAwM2VzdGF0ZSk7XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ3eC1cXHUwMDNlcHRwX3R4X2xvY2spO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXG4gXFx0Lyogc3RvcCBwb2xsaW5nIG9uY2Ugd2UgaGF2ZSBhIHZhbGlkIHRpbWVzdGFtcCAqL1xcbiBcXHR0c3luY3R4Y3RsID0gcmQzMnB0cCh3eCwgV1hfVFNDXzE1ODhfQ1RMKTtcXG4tXFx0aWYgKHRzeW5jdHhjdGwgXFx1MDAyNiBXWF9UU0NfMTU4OF9DVExfVkFMSUQpIHtcXG4tXFx0XFx0d3hfcHRwX3R4X2h3dHN0YW1wKHd4KTtcXG4tXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGlmICghKHRzeW5jdHhjdGwgXFx1MDAyNiBXWF9UU0NfMTU4OF9DVExfVkFMSUQpKSB7XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ3eC1cXHUwMDNlcHRwX3R4X2xvY2spO1xcbitcXHRcXHRyZXR1cm4gLTE7XFxuIFxcdH1cXG4gXFxuLVxcdHJldHVybiAtMTtcXG4rXFx0cmVndmFsIHw9ICh1NjQpcmQzMnB0cCh3eCwgV1hfVFNDXzE1ODhfU1RNUEwpO1xcbitcXHRyZWd2YWwgfD0gKHU2NClyZDMycHRwKHd4LCBXWF9UU0NfMTU4OF9TVE1QSCkgXFx1MDAzY1xcdTAwM2MgMzI7XFxuK1xcdHd4X3B0cF9jb252ZXJ0X3RvX2h3dHN0YW1wKHd4LCBcXHUwMDI2c2hod3RzdGFtcHMsIHJlZ3ZhbCk7XFxuK1xcdHNrYiA9IHd4LVxcdTAwM2VwdHBfdHhfc2tiO1xcbitcXHR3eC1cXHUwMDNlcHRwX3R4X3NrYiA9IE5VTEw7XFxuK1xcdGNsZWFyX2JpdF91bmxvY2soV1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLCB3eC1cXHUwMDNlc3RhdGUpO1xcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2d3gtXFx1MDAzZXB0cF90eF9sb2NrKTtcXG4rXFxuK1xcdHNrYl90c3RhbXBfdHgoc2tiLCBcXHUwMDI2c2hod3RzdGFtcHMpO1xcbitcXHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xcbitcXHR3eC1cXHUwMDNldHhfaHd0c3RhbXBfcGt0cysrO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC0yOTYsMjQgKzI5MywzMCBAQCBzdGF0aWMgdm9pZCB3eF9wdHBfcnhfaGFuZyhzdHJ1Y3Qgd3ggKnd4KVxcbiAgKi9cXG4gc3RhdGljIHZvaWQgd3hfcHRwX3R4X2hhbmcoc3RydWN0IHd4ICp3eClcXG4ge1xcbi1cXHRib29sIHRpbWVvdXQgPSB0aW1lX2lzX2JlZm9yZV9qaWZmaWVzKHd4LVxcdTAwM2VwdHBfdHhfc3RhcnQgK1xcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBXWF9QVFBfVFhfVElNRU9VVCk7XFxuK1xcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xcbiBcXG4tXFx0aWYgKCF3eC1cXHUwMDNlcHRwX3R4X3NrYilcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4tXFx0aWYgKCF0ZXN0X2JpdChXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuLVxcdFxcdHJldHVybjtcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ3eC1cXHUwMDNlcHRwX3R4X2xvY2spO1xcbiBcXG4gXFx0LyogSWYgd2UgaGF2ZW4ndCByZWNlaXZlZCBhIHRpbWVzdGFtcCB3aXRoaW4gdGhlIHRpbWVvdXQsIGl0IGlzXFxuIFxcdCAqIHJlYXNvbmFibGUgdG8gYXNzdW1lIHRoYXQgaXQgd2lsbCBuZXZlciBvY2N1ciwgc28gd2UgY2FuIHVubG9jayB0aGVcXG4gXFx0ICogdGltZXN0YW1wIGJpdCB3aGVuIHRoaXMgb2NjdXJzLlxcbiBcXHQgKi9cXG4tXFx0aWYgKHRpbWVvdXQpIHtcXG4tXFx0XFx0d3hfcHRwX2NsZWFyX3R4X3RpbWVzdGFtcCh3eCk7XFxuLVxcdFxcdHd4LVxcdTAwM2V0eF9od3RzdGFtcF90aW1lb3V0cysrO1xcbi1cXHRcXHRkZXZfd2FybihcXHUwMDI2d3gtXFx1MDAzZXBkZXYtXFx1MDAzZWRldiwgXFxcImNsZWFyaW5nIFR4IHRpbWVzdGFtcCBoYW5nXFxcXG5cXFwiKTtcXG4rXFx0aWYgKHd4LVxcdTAwM2VwdHBfdHhfc2tiIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsIHd4LVxcdTAwM2VzdGF0ZSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHRpbWVfaXNfYmVmb3JlX2ppZmZpZXMod3gtXFx1MDAzZXB0cF90eF9zdGFydCArIFdYX1BUUF9UWF9USU1FT1VUKSkge1xcbitcXHRcXHRyZDMycHRwKHd4LCBXWF9UU0NfMTU4OF9TVE1QSCk7XFxuK1xcdFxcdHNrYiA9IHd4LVxcdTAwM2VwdHBfdHhfc2tiO1xcbitcXHRcXHR3eC1cXHUwMDNlcHRwX3R4X3NrYiA9IE5VTEw7XFxuK1xcdFxcdGNsZWFyX2JpdF91bmxvY2soV1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLCB3eC1cXHUwMDNlc3RhdGUpO1xcbiBcXHR9XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ3eC1cXHUwMDNlcHRwX3R4X2xvY2spO1xcbitcXG4rXFx0aWYgKCFza2IpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XFxuK1xcdHd4LVxcdTAwM2V0eF9od3RzdGFtcF90aW1lb3V0cysrO1xcbitcXHRkZXZfd2FybihcXHUwMDI2d3gtXFx1MDAzZXBkZXYtXFx1MDAzZWRldiwgXFxcImNsZWFyaW5nIFR4IHRpbWVzdGFtcCBoYW5nXFxcXG5cXFwiKTtcXG4gfVxcbiBcXG4gc3RhdGljIGxvbmcgd3hfcHRwX2RvX2F1eF93b3JrKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwKVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXFxuaW5kZXggOTQ1NGU5MDI1OGQ4ZS4uNmI5NDYwMTQ3Y2E5MyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXFxuQEAgLTE0MzAsNiArMTQzMCw3IEBAIHN0cnVjdCB3eCB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbGFzdF9vdmVyZmxvd19jaGVjaztcXG4gXFx0dW5zaWduZWQgbG9uZyBsYXN0X3J4X3B0cF9jaGVjaztcXG4gXFx0dW5zaWduZWQgbG9uZyBwdHBfdHhfc3RhcnQ7XFxuK1xcdHNwaW5sb2NrX3QgcHRwX3R4X2xvY2s7IC8qIHByb3RlY3RzIHB0cF90eF9za2IgYW5kIHB0cF90eF9zdGFydCAqL1xcbiBcXHRzZXFsb2NrX3QgaHdfdGNfbG9jazsgLyogc2VxbG9jayBmb3IgcHRwICovXFxuIFxcdHN0cnVjdCBjeWNsZWNvdW50ZXIgaHdfY2M7XFxuIFxcdHN0cnVjdCB0aW1lY291bnRlciBod190YztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6NDc6MjEuNDEwNzgwMzk5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxOTQyMjIyODA4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdhbmd4dW4gRXRoZXJuZXQgY29tbW9uIGxpYnJhcnkgKGxpYnd4KSB1c2VkIGJ5IFdhbmd4dW4gUENJZSBuZXR3b3JrIGRyaXZlcnMgKG5nYmUsIHR4Z2JlKS4gVGhlc2UgZHJpdmVycyB0YXJnZXQgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgTklDcyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiZGQ5ODIxNjA5Nzg5MTVjMTdjMDQ4M2ZmMDBiYTJhZDIxOGI3NTM3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAwODo0NzoxOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xuaW5kZXggMTIyYzQ5NTJkMjAzZi4uMTEzNTUyNTg2YmU3MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXG5AQCAtMjUxOCw2ICsyNTE4LDcgQEAgaW50IHd4X3N3X2luaXQoc3RydWN0IHd4ICp3eClcbiBcdH1cbiBcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNnd4LVx1MDAzZWh3X3N0YXRzX2xvY2spO1xuK1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2d3gtXHUwMDNlcHRwX3R4X2xvY2spO1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZ3eC1cdTAwM2VyZXNldF9sb2NrKTtcbiBcdGJpdG1hcF96ZXJvKHd4LVx1MDAzZXN0YXRlLCBXWF9TVEFURV9OQklUUyk7XG4gXHRiaXRtYXBfemVybyh3eC1cdTAwM2VmbGFncywgV1hfUEZfRkxBR1NfTkJJVFMpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXG5pbmRleCBlZDVhYWQ3ODU3YmQ5Li45MTE4ODEzMzM0YTllIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xuQEAgLTE2MTIsNiArMTYxMiw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCB3eF94bWl0X2ZyYW1lX3Jpbmcoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiB7XG4gXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYodHhfcmluZy1cdTAwM2VuZXRkZXYpO1xuIFx0dTE2IGNvdW50ID0gVFhEX1VTRV9DT1VOVChza2JfaGVhZGxlbihza2IpKTtcbitcdHN0cnVjdCBza19idWZmICpwdHBfdHhfc2tiID0gTlVMTDtcbiBcdHN0cnVjdCB3eF90eF9idWZmZXIgKmZpcnN0O1xuIFx0dTggaGRyX2xlbiA9IDAsIHB0eXBlO1xuIFx0dW5zaWduZWQgc2hvcnQgZjtcbkBAIC0xNjQ5LDYgKzE2NTAsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3Qgd3hfeG1pdF9mcmFtZV9yaW5nKHN0cnVjdCBza19idWZmICpza2IsXG4gXG4gXHRpZiAodW5saWtlbHkoc2tiX3NoaW5mbyhza2IpLVx1MDAzZXR4X2ZsYWdzIFx1MDAyNiBTS0JUWF9IV19UU1RBTVApIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHd4LVx1MDAzZXB0cF9jbG9jaykge1xuK1x0XHRzcGluX2xvY2tfYmgoXHUwMDI2d3gtXHUwMDNlcHRwX3R4X2xvY2spO1xuIFx0XHRpZiAod3gtXHUwMDNldHN0YW1wX2NvbmZpZy50eF90eXBlID09IEhXVFNUQU1QX1RYX09OIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgIXRlc3RfYW5kX3NldF9iaXRfbG9jayhXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsXG4gXHRcdFx0XHRcdCAgIHd4LVx1MDAzZXN0YXRlKSkge1xuQEAgLTE2NTksNiArMTY2MSw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCB3eF94bWl0X2ZyYW1lX3Jpbmcoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHR3eC1cdTAwM2V0eF9od3RzdGFtcF9za2lwcGVkKys7XG4gXHRcdH1cbitcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2d3gtXHUwMDNlcHRwX3R4X2xvY2spO1xuIFx0fVxuIFxuIFx0LyogcmVjb3JkIGluaXRpYWwgZmxhZ3MgYW5kIHByb3RvY29sICovXG5AQCAtMTY4NSwxMCArMTY4OCwxNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3Qgd3hfeG1pdF9mcmFtZV9yaW5nKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRmaXJzdC1cdTAwM2Vza2IgPSBOVUxMO1xuIGNsZWFudXBfdHhfdHN0YW1wOlxuIFx0aWYgKHVubGlrZWx5KHR4X2ZsYWdzIFx1MDAyNiBXWF9UWF9GTEFHU19UU1RBTVApKSB7XG4tXHRcdGRldl9rZnJlZV9za2JfYW55KHd4LVx1MDAzZXB0cF90eF9za2IpO1xuLVx0XHR3eC1cdTAwM2VwdHBfdHhfc2tiID0gTlVMTDtcbitcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnd4LVx1MDAzZXB0cF90eF9sb2NrKTtcbitcdFx0aWYgKHd4LVx1MDAzZXB0cF90eF9za2IgPT0gc2tiKSB7XG4rXHRcdFx0cHRwX3R4X3NrYiA9IHd4LVx1MDAzZXB0cF90eF9za2I7XG4rXHRcdFx0d3gtXHUwMDNlcHRwX3R4X3NrYiA9IE5VTEw7XG4rXHRcdFx0Y2xlYXJfYml0X3VubG9jayhXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsXG4rXHRcdFx0XHRcdCB3eC1cdTAwM2VzdGF0ZSk7XG4rXHRcdH1cbitcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2d3gtXHUwMDNlcHRwX3R4X2xvY2spO1xuK1xuK1x0XHRkZXZfa2ZyZWVfc2tiX2FueShwdHBfdHhfc2tiKTtcbiBcdFx0d3gtXHUwMDNldHhfaHd0c3RhbXBfZXJyb3JzKys7XG4tXHRcdGNsZWFyX2JpdF91bmxvY2soV1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLCB3eC1cdTAwM2VzdGF0ZSk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gTkVUREVWX1RYX09LO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXG5pbmRleCA0NzA4ZTdmMzk1OGY3Li5hMDkyOWI0ODQ0ZThkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xuQEAgLTEzOSwxMiArMTM5LDE2IEBAIHN0YXRpYyBpbnQgd3hfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCxcbiAgKi9cbiBzdGF0aWMgdm9pZCB3eF9wdHBfY2xlYXJfdHhfdGltZXN0YW1wKHN0cnVjdCB3eCAqd3gpXG4ge1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbitcbitcdHNwaW5fbG9ja19iaChcdTAwMjZ3eC1cdTAwM2VwdHBfdHhfbG9jayk7XG4gXHRyZDMycHRwKHd4LCBXWF9UU0NfMTU4OF9TVE1QSCk7XG4tXHRpZiAod3gtXHUwMDNlcHRwX3R4X3NrYikge1xuLVx0XHRkZXZfa2ZyZWVfc2tiX2FueSh3eC1cdTAwM2VwdHBfdHhfc2tiKTtcbi1cdFx0d3gtXHUwMDNlcHRwX3R4X3NrYiA9IE5VTEw7XG4tXHR9XG4rXHRza2IgPSB3eC1cdTAwM2VwdHBfdHhfc2tiO1xuK1x0d3gtXHUwMDNlcHRwX3R4X3NrYiA9IE5VTEw7XG4gXHRjbGVhcl9iaXRfdW5sb2NrKFdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUywgd3gtXHUwMDNlc3RhdGUpO1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2d3gtXHUwMDNlcHRwX3R4X2xvY2spO1xuK1xuK1x0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiB9XG4gXG4gLyoqXG5AQCAtMTc0LDUwICsxNzgsNDMgQEAgc3RhdGljIHZvaWQgd3hfcHRwX2NvbnZlcnRfdG9faHd0c3RhbXAoc3RydWN0IHd4ICp3eCxcbiBcdGh3dHN0YW1wLVx1MDAzZWh3dHN0YW1wID0gbnNfdG9fa3RpbWUobnMpO1xuIH1cbiBcbi0vKipcbi0gKiB3eF9wdHBfdHhfaHd0c3RhbXAgLSB1dGlsaXR5IGZ1bmN0aW9uIHdoaWNoIGNoZWNrcyBmb3IgVFggdGltZSBzdGFtcFxuLSAqIEB3eDogdGhlIHByaXZhdGUgYm9hcmQgc3RydWN0XG4tICpcbi0gKiBpZiB0aGUgdGltZXN0YW1wIGlzIHZhbGlkLCB3ZSBjb252ZXJ0IGl0IGludG8gdGhlIHRpbWVjb3VudGVyIG5zXG4tICogdmFsdWUsIHRoZW4gc3RvcmUgdGhhdCByZXN1bHQgaW50byB0aGUgc2hod3RzdGFtcHMgc3RydWN0dXJlIHdoaWNoXG4tICogaXMgcGFzc2VkIHVwIHRoZSBuZXR3b3JrIHN0YWNrXG4tICovXG4tc3RhdGljIHZvaWQgd3hfcHRwX3R4X2h3dHN0YW1wKHN0cnVjdCB3eCAqd3gpXG4rc3RhdGljIGludCB3eF9wdHBfdHhfaHd0c3RhbXBfd29yayhzdHJ1Y3Qgd3ggKnd4KVxuIHtcbiBcdHN0cnVjdCBza2Jfc2hhcmVkX2h3dHN0YW1wcyBzaGh3dHN0YW1wcztcbi1cdHN0cnVjdCBza19idWZmICpza2IgPSB3eC1cdTAwM2VwdHBfdHhfc2tiO1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbitcdHUzMiB0c3luY3R4Y3RsO1xuIFx0dTY0IHJlZ3ZhbCA9IDA7XG4gXG4tXHRyZWd2YWwgfD0gKHU2NClyZDMycHRwKHd4LCBXWF9UU0NfMTU4OF9TVE1QTCk7XG4tXHRyZWd2YWwgfD0gKHU2NClyZDMycHRwKHd4LCBXWF9UU0NfMTU4OF9TVE1QSCkgXHUwMDNjXHUwMDNjIDMyO1xuLVxuLVx0d3hfcHRwX2NvbnZlcnRfdG9faHd0c3RhbXAod3gsIFx1MDAyNnNoaHd0c3RhbXBzLCByZWd2YWwpO1xuLVxuLVx0d3gtXHUwMDNlcHRwX3R4X3NrYiA9IE5VTEw7XG4tXHRjbGVhcl9iaXRfdW5sb2NrKFdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUywgd3gtXHUwMDNlc3RhdGUpO1xuLVx0c2tiX3RzdGFtcF90eChza2IsIFx1MDAyNnNoaHd0c3RhbXBzKTtcbi1cdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4tXHR3eC1cdTAwM2V0eF9od3RzdGFtcF9wa3RzKys7XG4tfVxuLVxuLXN0YXRpYyBpbnQgd3hfcHRwX3R4X2h3dHN0YW1wX3dvcmsoc3RydWN0IHd4ICp3eClcbi17XG4tXHR1MzIgdHN5bmN0eGN0bDtcbitcdHNwaW5fbG9ja19iaChcdTAwMjZ3eC1cdTAwM2VwdHBfdHhfbG9jayk7XG4gXG4gXHQvKiB3ZSBoYXZlIHRvIGhhdmUgYSB2YWxpZCBza2IgdG8gcG9sbCBmb3IgYSB0aW1lc3RhbXAgKi9cbiBcdGlmICghd3gtXHUwMDNlcHRwX3R4X3NrYikge1xuLVx0XHR3eF9wdHBfY2xlYXJfdHhfdGltZXN0YW1wKHd4KTtcbitcdFx0cmQzMnB0cCh3eCwgV1hfVFNDXzE1ODhfU1RNUEgpO1xuK1x0XHRjbGVhcl9iaXRfdW5sb2NrKFdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUywgd3gtXHUwMDNlc3RhdGUpO1xuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZ3eC1cdTAwM2VwdHBfdHhfbG9jayk7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuIFx0Lyogc3RvcCBwb2xsaW5nIG9uY2Ugd2UgaGF2ZSBhIHZhbGlkIHRpbWVzdGFtcCAqL1xuIFx0dHN5bmN0eGN0bCA9IHJkMzJwdHAod3gsIFdYX1RTQ18xNTg4X0NUTCk7XG4tXHRpZiAodHN5bmN0eGN0bCBcdTAwMjYgV1hfVFNDXzE1ODhfQ1RMX1ZBTElEKSB7XG4tXHRcdHd4X3B0cF90eF9od3RzdGFtcCh3eCk7XG4tXHRcdHJldHVybiAwO1xuK1x0aWYgKCEodHN5bmN0eGN0bCBcdTAwMjYgV1hfVFNDXzE1ODhfQ1RMX1ZBTElEKSkge1xuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZ3eC1cdTAwM2VwdHBfdHhfbG9jayk7XG4rXHRcdHJldHVybiAtMTtcbiBcdH1cbiBcbi1cdHJldHVybiAtMTtcbitcdHJlZ3ZhbCB8PSAodTY0KXJkMzJwdHAod3gsIFdYX1RTQ18xNTg4X1NUTVBMKTtcbitcdHJlZ3ZhbCB8PSAodTY0KXJkMzJwdHAod3gsIFdYX1RTQ18xNTg4X1NUTVBIKSBcdTAwM2NcdTAwM2MgMzI7XG4rXHR3eF9wdHBfY29udmVydF90b19od3RzdGFtcCh3eCwgXHUwMDI2c2hod3RzdGFtcHMsIHJlZ3ZhbCk7XG4rXHRza2IgPSB3eC1cdTAwM2VwdHBfdHhfc2tiO1xuK1x0d3gtXHUwMDNlcHRwX3R4X3NrYiA9IE5VTEw7XG4rXHRjbGVhcl9iaXRfdW5sb2NrKFdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUywgd3gtXHUwMDNlc3RhdGUpO1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2d3gtXHUwMDNlcHRwX3R4X2xvY2spO1xuK1xuK1x0c2tiX3RzdGFtcF90eChza2IsIFx1MDAyNnNoaHd0c3RhbXBzKTtcbitcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4rXHR3eC1cdTAwM2V0eF9od3RzdGFtcF9wa3RzKys7XG4rXG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gLyoqXG5AQCAtMjk2LDI0ICsyOTMsMzAgQEAgc3RhdGljIHZvaWQgd3hfcHRwX3J4X2hhbmcoc3RydWN0IHd4ICp3eClcbiAgKi9cbiBzdGF0aWMgdm9pZCB3eF9wdHBfdHhfaGFuZyhzdHJ1Y3Qgd3ggKnd4KVxuIHtcbi1cdGJvb2wgdGltZW91dCA9IHRpbWVfaXNfYmVmb3JlX2ppZmZpZXMod3gtXHUwMDNlcHRwX3R4X3N0YXJ0ICtcbi1cdFx0XHRcdFx0ICAgICAgV1hfUFRQX1RYX1RJTUVPVVQpO1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7XG4gXG4tXHRpZiAoIXd4LVx1MDAzZXB0cF90eF9za2IpXG4tXHRcdHJldHVybjtcbi1cbi1cdGlmICghdGVzdF9iaXQoV1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLCB3eC1cdTAwM2VzdGF0ZSkpXG4tXHRcdHJldHVybjtcbitcdHNwaW5fbG9ja19iaChcdTAwMjZ3eC1cdTAwM2VwdHBfdHhfbG9jayk7XG4gXG4gXHQvKiBJZiB3ZSBoYXZlbid0IHJlY2VpdmVkIGEgdGltZXN0YW1wIHdpdGhpbiB0aGUgdGltZW91dCwgaXQgaXNcbiBcdCAqIHJlYXNvbmFibGUgdG8gYXNzdW1lIHRoYXQgaXQgd2lsbCBuZXZlciBvY2N1ciwgc28gd2UgY2FuIHVubG9jayB0aGVcbiBcdCAqIHRpbWVzdGFtcCBiaXQgd2hlbiB0aGlzIG9jY3Vycy5cbiBcdCAqL1xuLVx0aWYgKHRpbWVvdXQpIHtcbi1cdFx0d3hfcHRwX2NsZWFyX3R4X3RpbWVzdGFtcCh3eCk7XG4tXHRcdHd4LVx1MDAzZXR4X2h3dHN0YW1wX3RpbWVvdXRzKys7XG4tXHRcdGRldl93YXJuKFx1MDAyNnd4LVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBcImNsZWFyaW5nIFR4IHRpbWVzdGFtcCBoYW5nXFxuXCIpO1xuK1x0aWYgKHd4LVx1MDAzZXB0cF90eF9za2IgXHUwMDI2XHUwMDI2XG4rXHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLCB3eC1cdTAwM2VzdGF0ZSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgdGltZV9pc19iZWZvcmVfamlmZmllcyh3eC1cdTAwM2VwdHBfdHhfc3RhcnQgKyBXWF9QVFBfVFhfVElNRU9VVCkpIHtcbitcdFx0cmQzMnB0cCh3eCwgV1hfVFNDXzE1ODhfU1RNUEgpO1xuK1x0XHRza2IgPSB3eC1cdTAwM2VwdHBfdHhfc2tiO1xuK1x0XHR3eC1cdTAwM2VwdHBfdHhfc2tiID0gTlVMTDtcbitcdFx0Y2xlYXJfYml0X3VubG9jayhXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsIHd4LVx1MDAzZXN0YXRlKTtcbiBcdH1cbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnd4LVx1MDAzZXB0cF90eF9sb2NrKTtcbitcbitcdGlmICghc2tiKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuK1x0d3gtXHUwMDNldHhfaHd0c3RhbXBfdGltZW91dHMrKztcbitcdGRldl93YXJuKFx1MDAyNnd4LVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBcImNsZWFyaW5nIFR4IHRpbWVzdGFtcCBoYW5nXFxuXCIpO1xuIH1cbiBcbiBzdGF0aWMgbG9uZyB3eF9wdHBfZG9fYXV4X3dvcmsoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHApXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxuaW5kZXggOTQ1NGU5MDI1OGQ4ZS4uNmI5NDYwMTQ3Y2E5MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxuQEAgLTE0MzAsNiArMTQzMCw3IEBAIHN0cnVjdCB3eCB7XG4gXHR1bnNpZ25lZCBsb25nIGxhc3Rfb3ZlcmZsb3dfY2hlY2s7XG4gXHR1bnNpZ25lZCBsb25nIGxhc3RfcnhfcHRwX2NoZWNrO1xuIFx0dW5zaWduZWQgbG9uZyBwdHBfdHhfc3RhcnQ7XG4rXHRzcGlubG9ja190IHB0cF90eF9sb2NrOyAvKiBwcm90ZWN0cyBwdHBfdHhfc2tiIGFuZCBwdHBfdHhfc3RhcnQgKi9cbiBcdHNlcWxvY2tfdCBod190Y19sb2NrOyAvKiBzZXFsb2NrIGZvciBwdHAgKi9cbiBcdHN0cnVjdCBjeWNsZWNvdW50ZXIgaHdfY2M7XG4gXHRzdHJ1Y3QgdGltZWNvdW50ZXIgaHdfdGM7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODo0NzoyMS40MTA3ODE3NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2MDAyMjY3MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXZhbHVhdGluZyB0aGUgUGF0Y2gncyBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBhc2tlZCB0byBhc3Nlc3MgaWYgdGhpcyBwYXRjaCBpcyBhIGdvb2QgY2FuZGlkYXRlIGZvciBTeXprYWxsZXIgZnV6emluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdGhpczogbGV0J3MgZGl2ZSBpbi4gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGJlaW5nIGNoYW5nZWQuIFRoZSBwYXRjaCB0b3VjaGVzIHRoZXNlIGZpbGVzOiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jYCwgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNgLCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY2AsIGFuZCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmhgLiBUaGF0IHRlbGxzIG1lIGl0J3MgZGVhbGluZyB3aXRoIHRoZSBuZXR3b3JrIHN0YWNrLCBzcGVjaWZpY2FsbHkgc29tZSBgd2FuZ3h1bmAgZXRoZXJuZXQgZHJpdmVyLiBUaGUgZmFjdCBpdCB0b3VjaGVzIGJvdGggYC5jYCBhbmQgYC5oYCBmaWxlcyBpcyBhIGdvb2Qgc2lnbiwgYW5kIHRoZSBmYWN0IHRoYXQgaXRzIGluIHRoZSBkcml2ZXJzIHNlY3Rpb24gaXMgZXZlbiBiZXR0ZXIuIFRoaXMgc3VnZ2VzdHMgdGhlIGNoYW5nZSBpcyBhZGRpbmcgb3IgbW9kaWZ5aW5nIGZ1bmN0aW9uYWxpdHkgcmVsYXRlZCB0byBoYXJkd2FyZSBpbnRlcmFjdGlvbiBhbmQgZGF0YSBzdHJ1Y3R1cmVzLlxuXG5Ob3csIG15IG5leHQgcXVlc3Rpb24gaXM6IHdoYXQgKmlzKiB0aGlzIGB3YW5neHVuYCBkcml2ZXI/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGtlcm5lbCBhbmQgdGhlIGhhcmR3YXJlLiBJJ2xsIG5lZWQgdG8gdXNlIGVpdGhlciBncmVwcGVyLCBvciBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcywgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZS4gVGhpcyBjb250ZXh0IGlzIGNyaXRpY2FsIGZvciBkZWNpZGluZyBpZiB0aGVyZSBhcmUgbGlrZWx5IHRvIGJlIGludGVyZXN0aW5nIGFuZCBmdXp6ZXItYWNjZXNzaWJsZSBjb2RlIHBhdGhzIGluIHRoZSBjaGFuZ2VzLiBJZiBpdCBpcyBpbnRlcmVzdGluZywgdGhlbiBJJ2xsIGRlbHZlIGRlZXBlciBhbmQgc2VlIGlmIHRoZSBjaGFuZ2VzIGFyZSBpbXBvcnRhbnQgZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwMzksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODo0NzoyNi4wMTEwMTEyNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjI2NTAyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcuKldYXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTE3PWlmIE5FVF9WRU5ET1JfV0FOR1hVTlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0xOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6MTk6Y29uZmlnIExJQldYXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTIwLVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3NyaW92LmM9MTQ5PXN0YXRpYyBpbnQgd3hfcGNpX3NyaW92X2VuYWJsZShzdHJ1Y3QgcGNpX2RldiAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9zcmlvdi5jLTE2Ni1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV92ZnM7IGkrKylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3NyaW92LmM6MTY3OlxcdFxcdHd4X3ZmX2NvbmZpZ3VyYXRpb24oZGV2LCAoaSB8IFdYX1ZGX0VOQUJMRSkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfc3Jpb3YuYy0xNjgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjQ3OjI2LjA1NzI4MDYwOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzMjIwMjUwODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnYCBmaWxlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBXYW5neHVuIEV0aGVybmV0IERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGBLY29uZmlnYCBmb3IgdGhlIFdhbmd4dW4gRXRoZXJuZXQgZHJpdmVyLiBJdCdzIGEga2V5IHBpZWNlLCBvYnZpb3VzbHksIGRlZmluaW5nIGhvdyB0aGlzIHBhcnRpY3VsYXIgZHJpdmVyIGdldHMgY29uZmlndXJlZCB3aXRoaW4gdGhlIGxhcmdlciBrZXJuZWwgYnVpbGQgcHJvY2Vzcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvcHRpb25zIGFyZSBleHBvc2VkLCB0aGVpciBkZXBlbmRlbmNpZXMsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgY2FwYWJpbGl0aWVzLlxuXG5GaXJzdCwgSSdsbCBiZSBsb29raW5nIGZvciB0aGUgYGNvbmZpZ2Agc3RhdGVtZW50cyB0aGF0IGRlZmluZSB0aGUgb3B0aW9ucyB0aGVtc2VsdmVzLiBJIHdhbnQgdG8gc2VlIHdoaWNoIGZlYXR1cmVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkLCBhbmQgd2hhdCB0aG9zZSBmZWF0dXJlcyBhcmUsIGZvciBleGFtcGxlLCB0aGluZ3MgbGlrZSBqdW1ibyBmcmFtZSBzdXBwb3J0LCBmbG93IGNvbnRyb2wsIG9yIFZMQU4gdGFnZ2luZy4gSSdtIGdvaW5nIHRvIGxvb2sgYXQgdGhlIGhlbHAgdGV4dCBhc3NvY2lhdGVkIHdpdGggZWFjaCBvcHRpb24gdG8gdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiB0aGVzZSBmZWF0dXJlcywgd2hhdCB0aGV5IGRvLCBhbmQgd2hhdCB0aGUgdXNlciBuZWVkcyB0byBjb25zaWRlciB3aGVuIGVuYWJsaW5nIHRoZW0uIElzIHRoZXJlIGFueSBkZXRhaWwgdGhhdCBpbXBsaWVzIGhhcmR3YXJlIHJldmlzaW9uP1xuXG5UaGVuLCB0aGUgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMgYXJlIGNydWNpYWwuIEknbSBnb2luZyB0byBmb2xsb3cgdGhlIGRlcGVuZGVuY3kgY2hhaW5zLiBBcmUgdGhlcmUgZGVwZW5kZW5jaWVzIG9uIHNwZWNpZmljIGhhcmR3YXJlIGFyY2hpdGVjdHVyZXMsIG90aGVyIGRyaXZlcnMsIG9yIGtlcm5lbCBmZWF0dXJlcz8gQXJlIHRoZXJlIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIG5ldHdvcmsgc3Vic3lzdGVtcz8gVGhpcyBpcyB3aGVyZSBJIGNhbiBzdGFydCB0byBwaWVjZSB0b2dldGhlciB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIGRyaXZlciB3aWxsIGV2ZW4gYmUgY29uc2lkZXJlZCBmb3IgaW5jbHVzaW9uLlxuXG5OZXh0LCBJJ2xsIGJlIGZvY3VzZWQgb24gYGRlZmF1bHRgIHZhbHVlcy4gV2hhdCBhcmUgdGhlIHNlbnNpYmxlIHN0YXJ0aW5nIHBvaW50cyBmb3IgdGhlIGRyaXZlcidzIGNvbmZpZ3VyYXRpb24/IEFyZSB0aGV5IGNvbnNlcnZhdGl2ZSBkZWZhdWx0cz8gRG8gdGhleSBzdWdnZXN0IGNvbW1vbiB1c2UgY2FzZXM/IEFyZSB0aGUgZGVmYXVsdHMgcGxhdGZvcm0tc3BlY2lmaWM/IFRoZSBkZWZhdWx0cyB0aGVtc2VsdmVzIGdpdmUgYSBodWdlIGNsdWUgYXMgdG8gaG93IHRoZSBkZXZlbG9wZXJzIGV4cGVjdCB0aGlzIGRyaXZlciB0byBiZSB1c2VkIG9yIHdoYXQgYXNzdW1wdGlvbnMgdGhleSBtYWRlIGR1cmluZyBkZXZlbG9wbWVudC5cblxuRmluYWxseSwgSSdsbCBiZSBsb29raW5nIGZvciBhbnkgYHNlbGVjdGAgc3RhdGVtZW50cywgd2hpY2ggYXJlIHVzZWQgdG8gaW1wbGljaXRseSBlbmFibGUgb3RoZXIgc3ltYm9scyB3aGVuIGFuIG9wdGlvbiBpcyBjaG9zZW4uIFRoaXMgaXMgd2hlcmUgSSBtaWdodCBkaXNjb3ZlciBzaWRlIGVmZmVjdHMgb3IgZGVwZW5kZW5jaWVzIHRoYXQgYXJlbid0IGltbWVkaWF0ZWx5IG9idmlvdXMsIHN1Y2ggYXMgZW5hYmxpbmcgZGVidWcgZmxhZ3Mgb3Igb3RoZXIgc3VwcG9ydCBmZWF0dXJlcy5cblxuT3ZlcmFsbCwgSSdtIGV4cGVjdGluZyB0byBzZWUgYSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLiBJdCdzIGEgc3RhbmRhcmQgbmV0d29yayBkcml2ZXIsIHNvIGl0IHNob3VsZCBmb2xsb3cgZXN0YWJsaXNoZWQgY29udmVudGlvbnMuIEknbSBsb29raW5nIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gc3BhY2UsIGhvdyB0aGUgZHJpdmVyIGludGVncmF0ZXMgd2l0aCB0aGUgbGFyZ2VyIGtlcm5lbCwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgcXVpcmtzIG9yIHBsYXRmb3JtLXNwZWNpZmljIGNvbnNpZGVyYXRpb25zIEkgbmVlZCB0byBrZWVwIGluIG1pbmQuIExldCdzIHNlZSB3aGF0IGl0IGhvbGRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODIzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6NDc6MjkuMzc5MzA4OTY5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg2ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFdhbmd4dW4gbmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgTkVUX1ZFTkRPUl9XQU5HWFVOXFxuICAgNzpcXHRcXHRib29sIFxcXCJXYW5neHVuIGRldmljZXNcXFwiXFxuICAgODpcXHRcXHRkZWZhdWx0IHlcXG4gICA5OlxcdFxcdGhlbHBcXG4gIDEwOlxcdFxcdCAgSWYgeW91IGhhdmUgYSBuZXR3b3JrIChFdGhlcm5ldCkgY2FyZCBmcm9tIFdhbmd4dW4oUiksIHNheSBZLlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIE5vdGUgdGhhdCB0aGUgYW5zd2VyIHRvIHRoaXMgcXVlc3Rpb24gZG9lc24ndCBkaXJlY3RseSBhZmZlY3QgdGhlXFxuICAxMzpcXHRcXHQgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGxcXG4gIDE0OlxcdFxcdCAgdGhlIHF1ZXN0aW9ucyBhYm91dCBXYW5neHVuKFIpIGNhcmRzLiBJZiB5b3Ugc2F5IFksIHlvdSB3aWxsXFxuICAxNTpcXHRcXHQgIGJlIGFza2VkIGZvciB5b3VyIHNwZWNpZmljIGNhcmQgaW4gdGhlIGZvbGxvd2luZyBxdWVzdGlvbnMuXFxuICAxNjpcXHRcXG4gIDE3OlxcdGlmIE5FVF9WRU5ET1JfV0FOR1hVTlxcbiAgMTg6XFx0XFxuICAxOTpcXHRjb25maWcgTElCV1hcXG4gIDIwOlxcdFxcdHRyaXN0YXRlXFxuICAyMTpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuICAyMjpcXHRcXHRzZWxlY3QgUEFHRV9QT09MXFxuICAyMzpcXHRcXHRzZWxlY3QgRElNTElCXFxuICAyNDpcXHRcXHRzZWxlY3QgUEhZTElOS1xcbiAgMjU6XFx0XFx0aGVscFxcbiAgMjY6XFx0XFx0Q29tbW9uIGxpYnJhcnkgZm9yIFdhbmd4dW4oUikgRXRoZXJuZXQgZHJpdmVycy5cXG4gIDI3OlxcdFxcbiAgMjg6XFx0Y29uZmlnIE5HQkVcXG4gIDI5OlxcdFxcdHRyaXN0YXRlIFxcXCJXYW5neHVuKFIpIEdiRSBQQ0kgRXhwcmVzcyBhZGFwdGVycyBzdXBwb3J0XFxcIlxcbiAgMzA6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lcXG4gIDMxOlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG4gIDMyOlxcdFxcdHNlbGVjdCBMSUJXWFxcbiAgMzM6XFx0XFx0aGVscFxcbiAgMzQ6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBXYW5neHVuKFIpIEdiRSBQQ0kgRXhwcmVzcyBmYW1pbHkgb2ZcXG4gIDM1OlxcdFxcdCAgYWRhcHRlcnMuXFxuICAzNjpcXHRcXG4gIDM3OlxcdFxcdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXFxuICAzODpcXHRcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL25nYmUucnN0XFx1MDAzZS5cXG4gIDM5OlxcdFxcbiAgNDA6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlXFxuICA0MTpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIG5nYmUuXFxuICA0MjpcXHRcXG4gIDQzOlxcdGNvbmZpZyBUWEdCRVxcbiAgNDQ6XFx0XFx0dHJpc3RhdGUgXFxcIldhbmd4dW4oUikgMTAvMjUvNDBHYkUgUENJIEV4cHJlc3MgYWRhcHRlcnMgc3VwcG9ydFxcXCJcXG4gIDQ1OlxcdFxcdGRlcGVuZHMgb24gUENJXFxuICA0NjpcXHRcXHRkZXBlbmRzIG9uIENPTU1PTl9DTEtcXG4gIDQ3OlxcdFxcdGRlcGVuZHMgb24gSTJDX0RFU0lHTldBUkVfUExBVEZPUk1cXG4gIDQ4OlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG4gIDQ5OlxcdFxcdHNlbGVjdCBNQVJWRUxMXzEwR19QSFlcXG4gIDUwOlxcdFxcdHNlbGVjdCBSRUdNQVBcXG4gIDUxOlxcdFxcdHNlbGVjdCBIV01PTiBpZiBUWEdCRT15XFxuICA1MjpcXHRcXHRzZWxlY3QgU0ZQXFxuICA1MzpcXHRcXHRzZWxlY3QgR1BJT0xJQlxcbiAgNTQ6XFx0XFx0c2VsZWN0IEdQSU9MSUJfSVJRQ0hJUFxcbiAgNTU6XFx0XFx0c2VsZWN0IFBDU19YUENTXFxuICA1NjpcXHRcXHRzZWxlY3QgTElCV1hcXG4gIDU3OlxcdFxcdGhlbHBcXG4gIDU4OlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgV2FuZ3h1bihSKSAxMC8yNS80MEdiRSBQQ0kgRXhwcmVzcyBmYW1pbHkgb2ZcXG4gIDU5OlxcdFxcdCAgYWRhcHRlcnMuXFxuICA2MDpcXHRcXG4gIDYxOlxcdFxcdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXFxuICA2MjpcXHRcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL3R4Z2JlLnJzdFxcdTAwM2UuXFxuICA2MzpcXHRcXG4gIDY0OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxcbiAgNjU6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCB0eGdiZS5cXG4gIDY2OlxcdFxcbiAgNjc6XFx0Y29uZmlnIFRYR0JFVkZcXG4gIDY4OlxcdFxcdHRyaXN0YXRlIFxcXCJXYW5neHVuKFIpIDEwLzI1LzQwRyBWaXJ0dWFsIEZ1bmN0aW9uIEV0aGVybmV0IHN1cHBvcnRcXFwiXFxuICA2OTpcXHRcXHRkZXBlbmRzIG9uIFBDSVxcbiAgNzA6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lfTVNJXFxuICA3MTpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuICA3MjpcXHRcXHRzZWxlY3QgTElCV1hcXG4gIDczOlxcdFxcdGhlbHBcXG4gIDc0OlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdmlydHVhbCBmdW5jdGlvbnMgZm9yIFNQMTAwMEEsIFdYMTgyMEFMLFxcbiAgNzU6XFx0XFx0ICBXWDVYWFgsIFdYNVhYWEFMLlxcbiAgNzY6XFx0XFxuICA3NzpcXHRcXHQgIFRoaXMgZHJpdmVyIHdhcyBmb3JtZXJseSBuYW1lZCB0eGdiZXZmLlxcbiAgNzg6XFx0XFxuICA3OTpcXHRcXHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxcbiAgODA6XFx0XFx0ICBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmLnJzdFxcdTAwM2UuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjQ3OjI5LjM3OTM3OTc4OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzMDAxMzc4NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhY2hhYmlsaXR5IGFuZCBIYXJkd2FyZSBEcml2ZXIgQ29uc2lkZXJhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gYWRoZXJpbmcgdG8gdGhlIHJ1bGVzIHJlZ2FyZGluZyByZWFjaGFiaWxpdHksIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIGhhcmR3YXJlIGRyaXZlcnMuIFRoZSBndWlkZWxpbmVzIGFyZSBjbGVhcjogYSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIHVuZGVyIHNwZWNpZmljIG5lZ2F0aXZlIGNyaXRlcmlhLiBOb3RhYmx5LCB0aGlzIGFwcGxpZXMgdG8gc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLCBsaWtlIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzICh0aGluayBtbHhzdywgcGRzX2NvcmUsIHFlZCwgaW9uaWMsIGFtZGdwdSkgdGhhdCAqYWJzb2x1dGVseSogcmVxdWlyZSBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgdGhhdCBhcmVuJ3QgcHJvcGVybHkgZW11bGF0ZWQgaW4gYSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LiBBbHNvLCBhbnl0aGluZyB0aGF0IGludm9sdmVzIHVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRocywgc3VjaCBhcyBkcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIGxpa2UgYC5yZW1vdmVgLCBgLnNodXRkb3duYCwgb3IgYHBjaV91bnJlZ2lzdGVyX2RyaXZlcmAgdGhhdCBhcmUgdHJpZ2dlcmVkIG9ubHkgYnkgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcgaXMgb2ZmIHRoZSB0YWJsZS4gUGF0aHMgc3BlY2lmaWMgdG8gYW4gYXJjaGl0ZWN0dXJlIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgZmFsbCBpbnRvIHRoaXMgY2F0ZWdvcnkgYXMgd2VsbC5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogSXMgdGhpcyBXYW5neHVuIEV0aGVybmV04oCUc3BlY2lmaWNhbGx5LCB0aGUgTElCV1gsIE5HQkUsIFRYR0JFLCBhbmQgVFhHQkVWRiBkcml2ZXJz4oCUIGNvbnNpZGVyZWQgdmVuZG9yLXNwZWNpZmljIFBDSWUgTklDIGhhcmR3YXJlPyBUaGlzIGlzIHRoZSBjcnV4IG9mIHRoZSBtYXR0ZXIuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhlc2UgZHJpdmVycyByZWx5IG9uIHBoeXNpY2FsIFBDSSBoYXJkd2FyZSB0aGF0IGlzbid0IHJlcGxpY2F0ZWQgZWZmZWN0aXZlbHkgaW4gUUVNVS4gVG8gZG8gdGhpcywgSSBuZWVkIHRvIGNoZWNrIHRoZSBQQ0kgSURzIG9mIGBOR0JFYCwgYFRYR0JFYCwgYW5kIGBUWEdCRVZGYCBhbmQgc2VlIHdoYXQgdGhleSB0ZWxsIG1lIGFib3V0IHRoZSBoYXJkd2FyZSBkZXBlbmRlbmNpZXMuIFRoYXQgc2hvdWxkIHBvaW50IG1lIGluIHRoZSByaWdodCBkaXJlY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0NjUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODo0NzozMy42Nzk1MjA3ODNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc2MzM5NzksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlBDSV9ERVZJQ0VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1blwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6NDc6MzMuNzI3MTYyOTYyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ2MDk2NjA2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEknbSBhbHJlYWR5IGRlZXAgaW4gdGhlIHdlZWRzIG9mIHRoaXMgc3ViamVjdDpcblxuKipEaWdnaW5nIGludG8gd2FuZ3h1bidzIGBwY2lfZHJpdmVyYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJMZXQncyB6ZXJvIGluIG9uIHRoZSBgcGNpX2RyaXZlcmAgd2l0aGluIHdhbmd4dW4uXCIgVGhpcyBtZWFucyBJJ20gcHJvYmFibHkgdHJvdWJsZXNob290aW5nIHNvbWV0aGluZywgb3IgcGVyaGFwcyByZXZpZXdpbmcgdGhlIGRyaXZlcidzIGltcGxlbWVudGF0aW9uIGFzIHBhcnQgb2YgYSBsYXJnZXIgcHJvamVjdC4gSSdtIGxpa2VseSB0YXJnZXRpbmcgdGhpcyBzcGVjaWZpYyBhcmVhIGJlY2F1c2UgaXQncyBlaXRoZXIgY2F1c2luZyBhIHByb2JsZW0sIG5lZWRzIG9wdGltaXphdGlvbiwgb3IgaXMgY3JpdGljYWwgdG8gYSBzeXN0ZW0gSSdtIHdvcmtpbmcgb24uIFRoZSBcIndhbmd4dW5cIiBwYXJ0IHRlbGxzIG1lIHRoZSBzY29wZTsgSSdtIGRlYWxpbmcgd2l0aCBhIGRyaXZlciB3aXRoaW4gYSBwYXJ0aWN1bGFyIGZyYW1ld29yayBvciBzeXN0ZW0uIE15IGZvY3VzIGlzIG5vdyBuYXJyb3dpbmc7IHRpbWUgdG8gZGl2ZSBpbnRvIHRoYXQgc3BlY2lmaWMgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA2MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjQ3OjM2LjE4ODEzMzI0NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwMTg4NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGNpX2RyaXZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYz05NTM9c3RhdGljIGludCBuZ2JlX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy05ODItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjk4MzpzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmdiZV9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTk4NC1cXHQubmFtZSAgICAgPSBuZ2JlX2RyaXZlcl9uYW1lLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTk5NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6OTk1Om1vZHVsZV9wY2lfZHJpdmVyKG5nYmVfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtOTk2LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYz0yNDk9c3RhdGljIERFRklORV9TSU1QTEVfREVWX1BNX09QUyhuZ2JldmZfcG1fb3BzLCB3eHZmX3N1c3BlbmQsIHd4dmZfcmVzdW1lKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jLTI1MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjI1MTpzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmdiZXZmX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jLTI1Mi1cXHQubmFtZSAgICAgPSBLQlVJTERfTU9ETkFNRSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmMtMjYwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6MjYxOm1vZHVsZV9wY2lfZHJpdmVyKG5nYmV2Zl9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmMtMjYyLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmM9OTkxPXN0YXRpYyB2b2lkIHR4Z2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jLTEwMjAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmM6MTAyMTpzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdHhnYmVfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jLTEwMjItXFx0Lm5hbWUgICAgID0gdHhnYmVfZHJpdmVyX25hbWUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYy0xMDMwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jOjEwMzE6bW9kdWxlX3BjaV9kcml2ZXIodHhnYmVfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYy0xMDMyLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jPTMxND1zdGF0aWMgREVGSU5FX1NJTVBMRV9ERVZfUE1fT1BTKHR4Z2JldmZfcG1fb3BzLCB3eHZmX3N1c3BlbmQsIHd4dmZfcmVzdW1lKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYvdHhnYmV2Zl9tYWluLmMtMzE1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYzozMTY6c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JldmZfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYy0zMTctXFx0Lm5hbWUgICAgID0gS0JVSUxEX01PRE5BTUUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYvdHhnYmV2Zl9tYWluLmMtMzI1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYzozMjY6bW9kdWxlX3BjaV9kcml2ZXIodHhnYmV2Zl9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYy0zMjctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjQ3OjM2LjIzNjE1ODQ5NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTk2ODI0MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQ6IFdhbmd4dW4gRHJpdmVyIEZ1enphYmlsaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBXZSdyZSBsb29raW5nIGF0IHRoZSBXYW5neHVuIGZhbWlseSBvZiBFdGhlcm5ldCBkcml2ZXJzIOKAkyBsaWJ3eCwgbmdiZSwgdHhnYmUsIGFuZCB0aGUgVkYgdmVyc2lvbnMuIFRoZXNlIGFyZSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVycyBmb3IgKnBoeXNpY2FsKiBXYW5neHVuIFBDSWUgbmV0d29yayBhZGFwdGVycy4gVGhpcyBpc24ndCB5b3VyIHN0YW5kYXJkIHZpcnRpbyBvciBlMTAwMCwgb3IgZXZlbiBzb21ldGhpbmcgZW11bGF0ZWQgd2l0aGluIFFFTVUuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgcmVhbCBoYXJkd2FyZSwgc3BlY2lmaWNhbGx5IFdhbmd4dW4ncyBHYkUgLyAxMC8yNS80MEdiRSBQQ0llIGNhcmRzLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiBmdXp6aW5nIHRoaXMgY29kZSBpcyB2aWFibGUuXG5cbkxvb2tpbmcgYXQgdGhlIGNvZGUsIHRoZSBtb2RpZmljYXRpb25zIGFyZSBjb25jZW50cmF0ZWQgd2l0aGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L2AuIFRoaXMgaXMgdGhlIGNvcmUgbGlicmFyeSwgYGxpYnd4YCwgc2hhcmVkIGJ5IGFsbCB0aG9zZSBXYW5neHVuIGRyaXZlcnMuIFRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdG91Y2hlZCDigJMgYHd4X3N3X2luaXRgLCBgd3hfeG1pdF9mcmFtZV9yaW5nYCwgYHd4X3B0cF9jbGVhcl90eF90aW1lc3RhbXBgLCBgd3hfcHRwX3R4X2h3dHN0YW1wX3dvcmtgLCBhbmQgYHd4X3B0cF90eF9oYW5nYCDigJMgYWxsIHJlbGF0ZSB0byB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgZHJpdmVyIGFuZCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUuXG5cblRoZSBrZXkgcG9pbnQgaXMgdGhhdCB0aGUgKm9ubHkqIHdheSB0byBhY3R1YWxseSBleGVyY2lzZSB0aGVzZSBmdW5jdGlvbnMgaXMgd2l0aCBhIHBoeXNpY2FsIFdhbmd4dW4gUENJZSBOSUMuIEl0J3Mgbm90IGdvaW5nIHRvIHJ1biBpbiBhIHR5cGljYWwgUUVNVSBpbnN0YW5jZSBvciBhbnkgb2YgdGhlIHN0YW5kYXJkIHZpcnR1YWxpemVkIHRlc3QgZW52aXJvbm1lbnRzLiBUaGUgQVNJQy9QQ0llIGNhcmQgaXMgZXNzZW50aWFsIHRvIGV4ZWN1dGUgdGhlIGNvZGUuXG5cblRoZXJlZm9yZSwgZ2l2ZW4gdGhlIHN0cnVjdHVyYWwgbGltaXRhdGlvbnMsIGBXb3J0aEZ1enppbmdgIGlzIGRlZmluaXRpdmVseSBgZmFsc2VgLlxuXG5Gb3IgdGhlIHJlc3VsdHMsIEknbGwgbmVlZCB0byBzcGVjaWZ5IHRoZSByZWFzb25pbmc6XG5cbiogICBgV29ydGhGdXp6aW5nYDogYGZhbHNlYFxuKiAgIGBSZWFzb25pbmdgOiBUaGUgY2hhbmdlcyBhcmUgd2l0aGluIHRoZSBXYW5neHVuIEV0aGVybmV0IGRyaXZlciBsaWJyYXJ5IChgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9gKS4gVGhpcyBsaWJyYXJ5IGludGVyZmFjZXMgd2l0aCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBOSUMgaGFyZHdhcmUgbWFudWZhY3R1cmVkIGJ5IFdhbmd4dW4gKG5nYmUsIHR4Z2JlLCBldGMuKSwgcmVxdWlyaW5nIHBoeXNpY2FsIFdhbmd4dW4gQVNJQy9QQ0llIGNhcmRzIGZvciBwcm9wZXIgb3BlcmF0aW9uLiBUaGVzZSBjYXJkcyBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3Igb3RoZXIgY29tbW9uIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhpcyBzdHJ1Y3R1cmFsbHkgbWFrZXMgdGhlIGNvZGUgdW5yZWFjaGFibGUgZm9yIGFueSBzdGFuZGFyZCBmdXp6aW5nIHNldHVwLlxuKiAgIGBFbmFibGVDb25maWdzYDogYFtdYFxuKiAgIGBGb2N1c1N5bWJvbHNgOiBgW11gXG5cbkFuZCBmaW5hbGx5LCBJJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM1NCwiT3V0cHV0VG9rZW5zIjo5OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODo0Nzo0MC44MzI5ODUwMzRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2FuZ3h1biBFdGhlcm5ldCBjb21tb24gbGlicmFyeSAobGlid3gpIHVzZWQgYnkgV2FuZ3h1biBQQ0llIG5ldHdvcmsgZHJpdmVycyAobmdiZSwgdHhnYmUpLiBUaGVzZSBkcml2ZXJzIHRhcmdldCB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBOSUNzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2FuZ3h1biBFdGhlcm5ldCBjb21tb24gbGlicmFyeSAobGlid3gpIHVzZWQgYnkgV2FuZ3h1biBQQ0llIG5ldHdvcmsgZHJpdmVycyAobmdiZSwgdHhnYmUpLiBUaGVzZSBkcml2ZXJzIHRhcmdldCB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBOSUNzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODo0Nzo0MC44MzMwMTAzMzRaIiwiU2VxIjoxMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowszlb8[1] Phase: Running StartedAt: 2026-09-08 08:47:52 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowszlb8[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-08 08:47:52 +0000 UTC FinishedAt: 2026-09-08 08:47:57 +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,}