Name: series-workflow9mtbn Phase: Succeeded StartedAt: 2026-09-08 01:44:39 +0000 UTC FinishedAt: 2026-09-08 05:52:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mtbn[0] Phase: Succeeded StartedAt: 2026-09-08 01:44:39 +0000 UTC FinishedAt: 2026-09-08 02:15:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mtbn[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 01:44:39 +0000 UTC FinishedAt: 2026-09-08 02:15:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET" ], "series_id": "515cc98b-5a85-4bc3-b743-5f6faac1fb5d" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "neightbl_dump_info", "neightbl_set", "neigh_proc_dointvec_ms_jiffies_positive" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25laWdodGJsX2R1bXBfaW5mbyYjMzQ7LAogICAgJiMzNDtuZWlnaHRibF9zZXQmIzM0OywKICAgICYjMzQ7bmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGlucHV0IHZhbGlkYXRpb24gYW5kIG5ldGxpbmsgZHVtcCByZXN1bXB0aW9uIGxvZ2ljIGluIG5ldC9jb3JlL25laWdoYm91ci5jOlxuMS4gSXQgYWRkcyBhbiB1cHBlciBib3VuZCB2YWxpZGF0aW9uIChgTlRCTF9QQVJNX01TX01BWGApIGZvciBgTkRUUEFfSU5URVJWQUxfUFJPQkVfVElNRV9NU2AgdmlhIG5ldGxpbmsgcG9saWN5IGFuZCBzeXNjdGwgKGBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVgKS5cbjIuIEl0IGZpeGVzIHRhYmxlIGFuZCBwYXJhbWV0ZXIgZHVtcGluZyBpbiBgbmVpZ2h0YmxfZHVtcF9pbmZvYCBhY3Jvc3MgbXVsdGktcGFydCBuZXRsaW5rIGR1bXBzIGJ5IHRyYWNraW5nIGBkZWZhdWx0X3NraXBgIGluIGBjYi1cdTAwM2VhcmdzWzJdYCwgcHJvcGVybHkgY29udGludWluZyBsaXN0IGl0ZXJhdGlvbiwgYW5kIHNraXBwaW5nIGBibGFja2hvbGVfbmV0ZGV2YC5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgbm9yIGRvIHRoZXkgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmcgb3IgYnVmZmVyIGNvbnRlbnRzIHRvIHVzZXJzcGFjZS4gQWxsIHZhcmlhYmxlcyAoYG1pbmAsIGBtYXhgLCBgZGVmYXVsdF9za2lwYCwgYGNiLVx1MDAzZWFyZ3NgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQuIEFueSBwb3RlbnRpYWwgbG9naWMgZXJyb3JzIG9yIG91dC1vZi1ib3VuZHMgaXNzdWVzIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vZGVidWdnaW5nIGJ1aWxkcy4gSGVuY2UsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgbmVpZ2hib3VyIHRhYmxlIG1hbmFnZW1lbnQgaW4gbmV0L2NvcmUvbmVpZ2hib3VyLmMuIFNwZWNpZmljYWxseSwgaXQgZml4ZXMgbmV0bGluayBkdW1wIHBhZ2luYXRpb24gYW5kIGZpbHRlcmluZyAoaGFuZGxpbmcgYmxhY2tob2xlIG5ldGRldikgaW4gbmVpZ2h0YmxfZHVtcF9pbmZvKCksIGFkZHMgdXBwZXIgYm91bmQgcmFuZ2UgdmFsaWRhdGlvbiBmb3IgaW50ZXJ2YWxfcHJvYmVfdGltZV9tcyBpbiBubF9udGJsX3Bhcm1fcG9saWN5ICh1c2VkIGluIG5laWdodGJsX3NldCgpKSwgYW5kIHNldHMgYW4gdXBwZXIgYm91bmQgb24gc3lzY3RsIHdyaXRlcyB2aWEgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlKCkuIFRoZXNlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgdmlhIHJ0bmV0bGluayAoUlRNX0dFVE5FSUdIVEJMLCBSVE1fU0VUTkVJR0hUQkwpIGFuZCBwcm9jZnMgc3lzY3RsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjEzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNmJmYTRiYTY3NTY2MzBmMDc5ZmNiNWJkOWJiNDYxM2FhYjI4NTI2YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMDI6MTM6MDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmVpZ2hib3VyLmMgYi9uZXQvY29yZS9uZWlnaGJvdXIuY1xuaW5kZXggMTM0OWMwZWVkYjY0Mi4uMTVlZWRhZWY2NTc4MSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL25laWdoYm91ci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9uZWlnaGJvdXIuY1xuQEAgLTIzNTksNiAmIzQzOzIzNTksMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5sX25laWdodGJsX3BvbGljeVtORFRBX01BWCYjNDM7MV0gPSB7XG4gXHRbTkRUQV9QQVJNU11cdFx0PSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxuIH07XG4gXG4mIzQzOyNkZWZpbmUgTlRCTF9QQVJNX01TX01BWFx0KDI0ICogNjAgKiA2MCAqIE1TRUNfUEVSX1NFQylcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0bGlua19yYW5nZV92YWxpZGF0aW9uIG5sX250YmxfcGFybV9tc19yYW5nZSA9IHtcbiYjNDM7XHQubWluID0gMSxcbiYjNDM7XHQubWF4ID0gTlRCTF9QQVJNX01TX01BWCxcbiYjNDM7fTtcbiYjNDM7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5sX250YmxfcGFybV9wb2xpY3lbTkRUUEFfTUFYJiM0MzsxXSA9IHtcbiBcdFtORFRQQV9JRklOREVYXVx0XHRcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbiBcdFtORFRQQV9RVUVVRV9MRU5dXHRcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbkBAIC0yMzc1LDcgJiM0MzsyMzgyLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5sX250YmxfcGFybV9wb2xpY3lbTkRUUEFfTUFYJiM0MzsxXSA9IHtcbiBcdFtORFRQQV9BTllDQVNUX0RFTEFZXVx0XHQ9IHsgLnR5cGUgPSBOTEFfVTY0IH0sXG4gXHRbTkRUUEFfUFJPWFlfREVMQVldXHRcdD0geyAudHlwZSA9IE5MQV9VNjQgfSxcbiBcdFtORFRQQV9MT0NLVElNRV1cdFx0PSB7IC50eXBlID0gTkxBX1U2NCB9LFxuLVx0W05EVFBBX0lOVEVSVkFMX1BST0JFX1RJTUVfTVNdXHQ9IHsgLnR5cGUgPSBOTEFfVTY0LCAubWluID0gMSB9LFxuJiM0MztcdFtORFRQQV9JTlRFUlZBTF9QUk9CRV9USU1FX01TXVx0PSBOTEFfUE9MSUNZX0ZVTExfUkFOR0UoTkxBX1U2NCxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdFx1MDAyNm5sX250YmxfcGFybV9tc19yYW5nZSksXG4gfTtcbiBcbiBzdGF0aWMgaW50IG5laWdodGJsX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbkBAIC0yNTc5LDkgJiM0MzsyNTg3LDEwIEBAIHN0YXRpYyBpbnQgbmVpZ2h0YmxfZHVtcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiB7XG4gXHRjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCA9IGNiLVx1MDAzZW5saDtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cdTAwM2Vzayk7XG4mIzQzO1x0aW50IGRlZmF1bHRfc2tpcCA9IGNiLVx1MDAzZWFyZ3NbMl07XG4mIzQzO1x0aW50IG5laWdoX3NraXAgPSBjYi1cdTAwM2VhcmdzWzFdO1xuIFx0aW50IGZhbWlseSwgdGlkeCwgbmlkeCA9IDA7XG4gXHRpbnQgdGJsX3NraXAgPSBjYi1cdTAwM2VhcmdzWzBdO1xuLVx0aW50IG5laWdoX3NraXAgPSBjYi1cdTAwM2VhcmdzWzFdO1xuIFx0c3RydWN0IG5laWdoX3RhYmxlICp0Ymw7XG4gXG4gXHRpZiAoY2ItXHUwMDNlc3RyaWN0X2NoZWNrKSB7XG5AQCAtMjYwNSwxNyAmIzQzOzI2MTQsMjIgQEAgc3RhdGljIGludCBuZWlnaHRibF9kdW1wX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0XHRpZiAodGlkeCBcdTAwM2MgdGJsX3NraXAgfHwgKGZhbWlseSBcdTAwMjZcdTAwMjYgdGJsLVx1MDAzZWZhbWlseSAhPSBmYW1pbHkpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRpZiAobmVpZ2h0YmxfZmlsbF9pbmZvKHNrYiwgdGJsLCBORVRMSU5LX0NCKGNiLVx1MDAzZXNrYikucG9ydGlkLFxuJiM0MztcdFx0aWYgKCFkZWZhdWx0X3NraXAgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgbmVpZ2h0YmxfZmlsbF9pbmZvKHNrYiwgdGJsLCBORVRMSU5LX0NCKGNiLVx1MDAzZXNrYikucG9ydGlkLFxuIFx0XHRcdFx0ICAgICAgIG5saC1cdTAwM2VubG1zZ19zZXEsIFJUTV9ORVdORUlHSFRCTCxcbiBcdFx0XHRcdCAgICAgICBOTE1fRl9NVUxUSSkgXHUwMDNjIDApXG4gXHRcdFx0YnJlYWs7XG4gXG4tXHRcdG5pZHggPSAwO1xuLVx0XHRwID0gbGlzdF9uZXh0X2VudHJ5KFx1MDAyNnRibC1cdTAwM2VwYXJtcywgbGlzdCk7XG4tXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfZnJvbV9yY3UocCwgXHUwMDI2dGJsLVx1MDAzZXBhcm1zX2xpc3QsIGxpc3QpIHtcbiYjNDM7XHRcdGRlZmF1bHRfc2tpcCA9IDE7XG4mIzQzO1xuJiM0MztcdFx0cCA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2dGJsLVx1MDAzZXBhcm1zX2xpc3QsIHN0cnVjdCBuZWlnaF9wYXJtcywgbGlzdCk7XG4mIzQzO1x0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShwLCBcdTAwMjZ0YmwtXHUwMDNlcGFybXNfbGlzdCwgbGlzdCkge1xuIFx0XHRcdGlmICghbmV0X2VxKG5laWdoX3Bhcm1zX25ldChwKSwgbmV0KSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuJiM0MztcdFx0XHRpZiAocC1cdTAwM2VkZXYgPT0gYmxhY2tob2xlX25ldGRldilcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4gXHRcdFx0aWYgKG5pZHggXHUwMDNjIG5laWdoX3NraXApXG4gXHRcdFx0XHRnb3RvIG5leHQ7XG4gXG5AQCAtMjYzMCwxMiAmIzQzOzI2NDQsMTUgQEAgc3RhdGljIGludCBuZWlnaHRibF9kdW1wX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0XHR9XG4gXG4gXHRcdG5laWdoX3NraXAgPSAwO1xuJiM0MztcdFx0bmlkeCA9IDA7XG4mIzQzO1x0XHRkZWZhdWx0X3NraXAgPSAwO1xuIFx0fVxuIG91dDpcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0Y2ItXHUwMDNlYXJnc1swXSA9IHRpZHg7XG4gXHRjYi1cdTAwM2VhcmdzWzFdID0gbmlkeDtcbiYjNDM7XHRjYi1cdTAwM2VhcmdzWzJdID0gZGVmYXVsdF9za2lwO1xuIFxuIFx0cmV0dXJuIHNrYi1cdTAwM2VsZW47XG4gfVxuQEAgLTM2NjksMTIgJiM0MzszNjg2LDEzIEBAIHN0YXRpYyBpbnQgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCxcbiBcdFx0XHRcdFx0XHQgICB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKVxuIHtcbiBcdHN0cnVjdCBjdGxfdGFibGUgdG1wID0gKmN0bDtcbi1cdGludCByZXQ7XG4mIzQzO1x0aW50IHJldCwgbWluLCBtYXg7XG4gXG4tXHRpbnQgbWluID0gbXNlY3NfdG9famlmZmllcygxKTtcbiYjNDM7XHRtaW4gPSBtc2Vjc190b19qaWZmaWVzKDEpO1xuJiM0MztcdG1heCA9IG1zZWNzX3RvX2ppZmZpZXMoTlRCTF9QQVJNX01TX01BWCk7XG4gXG4gXHR0bXAuZXh0cmExID0gXHUwMDI2bWluO1xuLVx0dG1wLmV4dHJhMiA9IE5VTEw7XG4mIzQzO1x0dG1wLmV4dHJhMiA9IFx1MDAyNm1heDtcbiBcbiBcdHJldCA9IHByb2NfZG9pbnR2ZWNfbXNfamlmZmllc19taW5tYXgoXHUwMDI2dG1wLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTtcbiBcdG5laWdoX3Byb2NfdXBkYXRlKGN0bCwgd3JpdGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjEzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25laWdodGJsX2R1bXBfaW5mbyYjMzQ7LAogICAgJiMzNDtuZWlnaHRibF9zZXQmIzM0OywKICAgICYjMzQ7bmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBuZWlnaGJvdXIgdGFibGUgbWFuYWdlbWVudCBpbiBuZXQvY29yZS9uZWlnaGJvdXIuYy4gU3BlY2lmaWNhbGx5LCBpdCBmaXhlcyBuZXRsaW5rIGR1bXAgcGFnaW5hdGlvbiBhbmQgZmlsdGVyaW5nIChoYW5kbGluZyBibGFja2hvbGUgbmV0ZGV2KSBpbiBuZWlnaHRibF9kdW1wX2luZm8oKSwgYWRkcyB1cHBlciBib3VuZCByYW5nZSB2YWxpZGF0aW9uIGZvciBpbnRlcnZhbF9wcm9iZV90aW1lX21zIGluIG5sX250YmxfcGFybV9wb2xpY3kgKHVzZWQgaW4gbmVpZ2h0Ymxfc2V0KCkpLCBhbmQgc2V0cyBhbiB1cHBlciBib3VuZCBvbiBzeXNjdGwgd3JpdGVzIHZpYSBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmUoKS4gVGhlc2UgcGF0aHMgYXJlIGRpcmVjdGx5IHJlYWNoYWJsZSB2aWEgcnRuZXRsaW5rIChSVE1fR0VUTkVJR0hUQkwsIFJUTV9TRVRORUlHSFRCTCkgYW5kIHByb2NmcyBzeXNjdGwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2YmZhNGJhNjc1NjYzMGYwNzlmY2I1YmQ5YmI0NjEzYWFiMjg1MjZiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgOCAwMjoxMzowMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25laWdoYm91ci5jIGIvbmV0L2NvcmUvbmVpZ2hib3VyLmMKaW5kZXggMTM0OWMwZWVkYjY0Mi4uMTVlZWRhZWY2NTc4MSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbmVpZ2hib3VyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvbmVpZ2hib3VyLmMKQEAgLTIzNTksNiAmIzQzOzIzNTksMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5sX25laWdodGJsX3BvbGljeVtORFRBX01BWCYjNDM7MV0gPSB7CiAJW05EVEFfUEFSTVNdCQk9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sCiB9OwogCiYjNDM7I2RlZmluZSBOVEJMX1BBUk1fTVNfTUFYCSgyNCAqIDYwICogNjAgKiBNU0VDX1BFUl9TRUMpCiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRsaW5rX3JhbmdlX3ZhbGlkYXRpb24gbmxfbnRibF9wYXJtX21zX3JhbmdlID0gewomIzQzOwkubWluID0gMSwKJiM0MzsJLm1heCA9IE5UQkxfUEFSTV9NU19NQVgsCiYjNDM7fTsKJiM0MzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBubF9udGJsX3Bhcm1fcG9saWN5W05EVFBBX01BWCYjNDM7MV0gPSB7CiAJW05EVFBBX0lGSU5ERVhdCQkJPSB7IC50eXBlID0gTkxBX1UzMiB9LAogCVtORFRQQV9RVUVVRV9MRU5dCQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCkBAIC0yMzc1LDcgJiM0MzsyMzgyLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5sX250YmxfcGFybV9wb2xpY3lbTkRUUEFfTUFYJiM0MzsxXSA9IHsKIAlbTkRUUEFfQU5ZQ0FTVF9ERUxBWV0JCT0geyAudHlwZSA9IE5MQV9VNjQgfSwKIAlbTkRUUEFfUFJPWFlfREVMQVldCQk9IHsgLnR5cGUgPSBOTEFfVTY0IH0sCiAJW05EVFBBX0xPQ0tUSU1FXQkJPSB7IC50eXBlID0gTkxBX1U2NCB9LAotCVtORFRQQV9JTlRFUlZBTF9QUk9CRV9USU1FX01TXQk9IHsgLnR5cGUgPSBOTEFfVTY0LCAubWluID0gMSB9LAomIzQzOwlbTkRUUEFfSU5URVJWQUxfUFJPQkVfVElNRV9NU10JPSBOTEFfUE9MSUNZX0ZVTExfUkFOR0UoTkxBX1U2NCwKJiM0MzsJCQkJCQkJCSZhbXA7bmxfbnRibF9wYXJtX21zX3JhbmdlKSwKIH07CiAKIHN0YXRpYyBpbnQgbmVpZ2h0Ymxfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLApAQCAtMjU3OSw5ICYjNDM7MjU4NywxMCBAQCBzdGF0aWMgaW50IG5laWdodGJsX2R1bXBfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiB7CiAJY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGggPSBjYi0mZ3Q7bmxoOwogCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0mZ3Q7c2spOwomIzQzOwlpbnQgZGVmYXVsdF9za2lwID0gY2ItJmd0O2FyZ3NbMl07CiYjNDM7CWludCBuZWlnaF9za2lwID0gY2ItJmd0O2FyZ3NbMV07CiAJaW50IGZhbWlseSwgdGlkeCwgbmlkeCA9IDA7CiAJaW50IHRibF9za2lwID0gY2ItJmd0O2FyZ3NbMF07Ci0JaW50IG5laWdoX3NraXAgPSBjYi0mZ3Q7YXJnc1sxXTsKIAlzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibDsKIAogCWlmIChjYi0mZ3Q7c3RyaWN0X2NoZWNrKSB7CkBAIC0yNjA1LDE3ICYjNDM7MjYxNCwyMiBAQCBzdGF0aWMgaW50IG5laWdodGJsX2R1bXBfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiAJCWlmICh0aWR4ICZsdDsgdGJsX3NraXAgfHwgKGZhbWlseSAmYW1wOyZhbXA7IHRibC0mZ3Q7ZmFtaWx5ICE9IGZhbWlseSkpCiAJCQljb250aW51ZTsKIAotCQlpZiAobmVpZ2h0YmxfZmlsbF9pbmZvKHNrYiwgdGJsLCBORVRMSU5LX0NCKGNiLSZndDtza2IpLnBvcnRpZCwKJiM0MzsJCWlmICghZGVmYXVsdF9za2lwICZhbXA7JmFtcDsKJiM0MzsJCSAgICBuZWlnaHRibF9maWxsX2luZm8oc2tiLCB0YmwsIE5FVExJTktfQ0IoY2ItJmd0O3NrYikucG9ydGlkLAogCQkJCSAgICAgICBubGgtJmd0O25sbXNnX3NlcSwgUlRNX05FV05FSUdIVEJMLAogCQkJCSAgICAgICBOTE1fRl9NVUxUSSkgJmx0OyAwKQogCQkJYnJlYWs7CiAKLQkJbmlkeCA9IDA7Ci0JCXAgPSBsaXN0X25leHRfZW50cnkoJmFtcDt0YmwtJmd0O3Bhcm1zLCBsaXN0KTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tX3JjdShwLCAmYW1wO3RibC0mZ3Q7cGFybXNfbGlzdCwgbGlzdCkgewomIzQzOwkJZGVmYXVsdF9za2lwID0gMTsKJiM0MzsKJiM0MzsJCXAgPSBsaXN0X2ZpcnN0X2VudHJ5KCZhbXA7dGJsLSZndDtwYXJtc19saXN0LCBzdHJ1Y3QgbmVpZ2hfcGFybXMsIGxpc3QpOwomIzQzOwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yY3UocCwgJmFtcDt0YmwtJmd0O3Bhcm1zX2xpc3QsIGxpc3QpIHsKIAkJCWlmICghbmV0X2VxKG5laWdoX3Bhcm1zX25ldChwKSwgbmV0KSkKIAkJCQljb250aW51ZTsKIAomIzQzOwkJCWlmIChwLSZndDtkZXYgPT0gYmxhY2tob2xlX25ldGRldikKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CiAJCQlpZiAobmlkeCAmbHQ7IG5laWdoX3NraXApCiAJCQkJZ290byBuZXh0OwogCkBAIC0yNjMwLDEyICYjNDM7MjY0NCwxNSBAQCBzdGF0aWMgaW50IG5laWdodGJsX2R1bXBfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiAJCX0KIAogCQluZWlnaF9za2lwID0gMDsKJiM0MzsJCW5pZHggPSAwOwomIzQzOwkJZGVmYXVsdF9za2lwID0gMDsKIAl9CiBvdXQ6CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAljYi0mZ3Q7YXJnc1swXSA9IHRpZHg7CiAJY2ItJmd0O2FyZ3NbMV0gPSBuaWR4OwomIzQzOwljYi0mZ3Q7YXJnc1syXSA9IGRlZmF1bHRfc2tpcDsKIAogCXJldHVybiBza2ItJmd0O2xlbjsKIH0KQEAgLTM2NjksMTIgJiM0MzszNjg2LDEzIEBAIHN0YXRpYyBpbnQgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwKIAkJCQkJCSAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IGN0bF90YWJsZSB0bXAgPSAqY3RsOwotCWludCByZXQ7CiYjNDM7CWludCByZXQsIG1pbiwgbWF4OwogCi0JaW50IG1pbiA9IG1zZWNzX3RvX2ppZmZpZXMoMSk7CiYjNDM7CW1pbiA9IG1zZWNzX3RvX2ppZmZpZXMoMSk7CiYjNDM7CW1heCA9IG1zZWNzX3RvX2ppZmZpZXMoTlRCTF9QQVJNX01TX01BWCk7CiAKIAl0bXAuZXh0cmExID0gJmFtcDttaW47Ci0JdG1wLmV4dHJhMiA9IE5VTEw7CiYjNDM7CXRtcC5leHRyYTIgPSAmYW1wO21heDsKIAogCXJldCA9IHByb2NfZG9pbnR2ZWNfbXNfamlmZmllc19taW5tYXgoJmFtcDt0bXAsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpOwogCW5laWdoX3Byb2NfdXBkYXRlKGN0bCwgd3JpdGUpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTQ5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmVpZ2hib3VyIFN1YnN5c3RlbSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBiZWVuIHR3ZWFrZWQgaW4gdGhlIG5ldHdvcmsgbmVpZ2hib3IgZGlzY292ZXJ5IGNvZGUsIHNwZWNpZmljYWxseSB3aXRoaW4gYG5ldC9jb3JlL25laWdoYm91ci5jYC4gTXkgaW5pdGlhbCBzY2FuIHN1Z2dlc3RzIGEgZmV3IGludGVyZXN0aW5nIGFyZWFzIG9mIGZvY3VzLgoKRmlyc3QsIHRoZSBgbmxfbnRibF9wYXJtX3BvbGljeWAgZGVmaW5pdGlvbiBpcyBiZWluZyBhZGp1c3RlZC4gV2UmIzM5O3JlIHNldHRpbmcgdGhlIHBvbGljeSBmb3IgYE5EVFBBX0lOVEVSVkFMX1BST0JFX1RJTUVfTVNgIHRvIGEgZnVsbC1yYW5nZSB1bnNpZ25lZCA2NC1iaXQgaW50ZWdlciAoYE5MQV9VNjRgKSB3aXRoaW4gc3BlY2lmaWMgbGltaXRzLiBUaGUgbWF4aW11bSB2YWx1ZSwgZGVmaW5lZCBieSBgTlRCTF9QQVJNX01TX01BWGAsIGlzIGEgcmF0aGVyIGhlZnR5IDI0IGhvdXJzIGluIG1pbGxpc2Vjb25kcy4gVGhpcyBsaWtlbHkgaW5mbHVlbmNlcyBob3cgZnJlcXVlbnRseSBuZWlnaGJvciBwcm9iZXMgYXJlIHNlbnQsIHNvIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4KClRoZW4sIHRoZXJlJiMzOTtzIHNvbWUgYWN0aXZpdHkgd2l0aGluIGBuZWlnaHRibF9kdW1wX2luZm9gLCB3aGljaCBoYW5kbGVzIGR1bXBpbmcgbmVpZ2hib3IgdGFibGUgaW5mb3JtYXRpb24sIHByb2JhYmx5IGZvciBkZWJ1Z2dpbmcgb3IgbW9uaXRvcmluZy4gSSBzZWUgYSBjb3VwbGUgb2Ygbm90YWJsZSBtb2RpZmljYXRpb25zIGhlcmUuIFRoZSBwYWdpbmF0aW9uIGFuZCBkdW1waW5nIGxvZ2ljIGFwcGVhcnMgdG8gYmUgZ2V0dGluZyBmaW5lLXR1bmVkLCBhbmQgYGRlZmF1bHRfc2tpcCA9IGNiLSZndDthcmdzWzJdYCBpcyB1c2VkLiBNb3JlIHNpZ25pZmljYW50bHksIHRoZSBpdGVyYXRpb24gdGhyb3VnaCBgdGJsLSZndDtwYXJtc19saXN0YCBpcyBiZWluZyByZXdvcmtlZC4gVGhlIGNvZGUgaXMgY2hhbmdpbmcgZnJvbSBgbGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tX3JjdWAgdG8gYSBjb21iaW5hdGlvbiBvZiBgbGlzdF9maXJzdF9lbnRyeWAgYW5kIGBsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdWAuIFRoaXMgbGlrZWx5IHN1Z2dlc3RzIHRoZXkmIzM5O3JlIG9wdGltaXppbmcgaG93IHRoZSBsaXN0IGlzIHRyYXZlcnNlZCwgcG90ZW50aWFsbHkgaW1wcm92aW5nIHBlcmZvcm1hbmNlIG9yIGNvbmN1cnJlbmN5LCBlc3BlY2lhbGx5IHdpdGhpbiBhIFJDVSBjb250ZXh0LiBJdCYjMzk7cyBnb29kIHRvIHNlZSB0aGlzIGF0dGVudGlvbiB0byBkZXRhaWwuIEkgYWxzbyBzcG90IGEgY2hlY2s6IGBpZiAocC0mZ3Q7ZGV2ID09IGJsYWNraG9sZV9uZXRkZXYpIGNvbnRpbnVlO2AuIFRoaXMgcHJvYmFibHkgZXhjbHVkZXMgZW50cmllcyBhc3NvY2lhdGVkIHdpdGggdGhlIGJsYWNraG9sZSBkZXZpY2UgZnJvbSB0aGUgZHVtcCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEZpbmFsbHksIHRoZXJlJiMzOTtzIGEgZml4IHRvIHJlc2V0IGNlcnRhaW4gdmFyaWFibGVzLCB3aGljaCBjb3VsZCBhZGRyZXNzIGEgc3VidGxlIGJ1ZyBvciBhbiBpc3N1ZSB3aGVyZSB2YXJpYWJsZXMgYXJlbiYjMzk7dCBpbml0aWFsaXplZCBhcHByb3ByaWF0ZWx5IGluIHNvbWUgc2NlbmFyaW9zLgoKTGFzdGx5LCBgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlYCBpcyBnZXR0aW5nIHVwZGF0ZWQsIHNwZWNpZmljYWxseSBzZXR0aW5nIGB0bXAuZXh0cmEyYCB0byBhIG1heGltdW0gdmFsdWUsIGBtYXhgLCBjb252ZXJ0ZWQgZnJvbSBgTlRCTF9QQVJNX01TX01BWGAgdG8gamlmZmllcy4gVGhpcyByZWluZm9yY2VzIHRoZSB0aW1lLWJhc2VkIHBhcmFtZXRlciBjaGFuZ2VzIGFuZCBzaG93cyB0aGF0IHRoZSBgTlRCTF9QQVJNX01TX01BWGAgY29uc3RhbnQgaXMgY3J1Y2lhbC4KClRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgb3ZlcmFsbCBpbXBhY3QgYW5kIHdoeSB0aGVzZSBjaGFuZ2VzIGFyZSBiZWluZyBtYWRlLCBJJiMzOTttIGdvaW5nIHRvIHJlYWNoIGZvciBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgcmlnaHQgYXdheSB0byBleHBsb3JlIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBUaGF0IHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcyBhbmQgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBpbiB0aGUgbGFyZ2VyIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL25laWdoYm91ci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjU4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNTgwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjU4MTpcdFx0fVxuMjU4MjpcdFxuMjU4MzpcdFx0cmV0dXJuIDA7XG4yNTg0Olx0fVxuMjU4NTpcdFxuMjU4NjpcdHN0YXRpYyBpbnQgbmVpZ2h0YmxfZHVtcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbjI1ODc6XHR7XG4yNTg4Olx0XHRjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCA9IGNiLVx1MDAzZW5saDtcbjI1ODk6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cdTAwM2Vzayk7XG4yNTkwOlx0XHRpbnQgZGVmYXVsdF9za2lwID0gY2ItXHUwMDNlYXJnc1syXTtcbjI1OTE6XHRcdGludCBuZWlnaF9za2lwID0gY2ItXHUwMDNlYXJnc1sxXTtcbjI1OTI6XHRcdGludCBmYW1pbHksIHRpZHgsIG5pZHggPSAwO1xuMjU5MzpcdFx0aW50IHRibF9za2lwID0gY2ItXHUwMDNlYXJnc1swXTtcbjI1OTQ6XHRcdHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsO1xuMjU5NTpcdFxuMjU5NjpcdFx0aWYgKGNiLVx1MDAzZXN0cmljdF9jaGVjaykge1xuMjU5NzpcdFx0XHRpbnQgZXJyID0gbmVpZ2h0YmxfdmFsaWRfZHVtcF9pbmZvKG5saCwgY2ItXHUwMDNlZXh0YWNrKTtcbjI1OTg6XHRcbjI1OTk6XHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbjI2MDA6XHRcdFx0XHRyZXR1cm4gZXJyO1xuMjYwMTpcdFx0fVxuMjYwMjpcdFxuMjYwMzpcdFx0ZmFtaWx5ID0gKChzdHJ1Y3QgcnRnZW5tc2cgKilubG1zZ19kYXRhKG5saCkpLVx1MDAzZXJ0Z2VuX2ZhbWlseTtcbjI2MDQ6XHRcbjI2MDU6XHRcdHJjdV9yZWFkX2xvY2soKTtcbjI2MDY6XHRcbjI2MDc6XHRcdGZvciAodGlkeCA9IDA7IHRpZHggXHUwMDNjIE5FSUdIX05SX1RBQkxFUzsgdGlkeCYjNDM7JiM0MzspIHtcbjI2MDg6XHRcdFx0c3RydWN0IG5laWdoX3Bhcm1zICpwO1xuMjYwOTpcdFxuMjYxMDpcdFx0XHR0YmwgPSByY3VfZGVyZWZlcmVuY2UobmVpZ2hfdGFibGVzW3RpZHhdKTtcbjI2MTE6XHRcdFx0aWYgKCF0YmwpXG4yNjEyOlx0XHRcdFx0Y29udGludWU7XG4yNjEzOlx0XG4yNjE0Olx0XHRcdGlmICh0aWR4IFx1MDAzYyB0Ymxfc2tpcCB8fCAoZmFtaWx5IFx1MDAyNlx1MDAyNiB0YmwtXHUwMDNlZmFtaWx5ICE9IGZhbWlseSkpXG4yNjE1Olx0XHRcdFx0Y29udGludWU7XG4yNjE2Olx0XG4yNjE3Olx0XHRcdGlmICghZGVmYXVsdF9za2lwIFx1MDAyNlx1MDAyNlxuMjYxODpcdFx0XHQgICAgbmVpZ2h0YmxfZmlsbF9pbmZvKHNrYiwgdGJsLCBORVRMSU5LX0NCKGNiLVx1MDAzZXNrYikucG9ydGlkLFxuMjYxOTpcdFx0XHRcdFx0ICAgICAgIG5saC1cdTAwM2VubG1zZ19zZXEsIFJUTV9ORVdORUlHSFRCTCxcbjI2MjA6XHRcdFx0XHRcdCAgICAgICBOTE1fRl9NVUxUSSkgXHUwMDNjIDApXG4yNjIxOlx0XHRcdFx0YnJlYWs7XG4yNjIyOlx0XG4yNjIzOlx0XHRcdGRlZmF1bHRfc2tpcCA9IDE7XG4yNjI0Olx0XG4yNjI1Olx0XHRcdHAgPSBsaXN0X2ZpcnN0X2VudHJ5KFx1MDAyNnRibC1cdTAwM2VwYXJtc19saXN0LCBzdHJ1Y3QgbmVpZ2hfcGFybXMsIGxpc3QpO1xuMjYyNjpcdFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShwLCBcdTAwMjZ0YmwtXHUwMDNlcGFybXNfbGlzdCwgbGlzdCkge1xuMjYyNzpcdFx0XHRcdGlmICghbmV0X2VxKG5laWdoX3Bhcm1zX25ldChwKSwgbmV0KSlcbjI2Mjg6XHRcdFx0XHRcdGNvbnRpbnVlO1xuMjYyOTpcdFxuMjYzMDpcdFx0XHRcdGlmIChwLVx1MDAzZWRldiA9PSBibGFja2hvbGVfbmV0ZGV2KVxuMjYzMTpcdFx0XHRcdFx0Y29udGludWU7XG4yNjMyOlx0XG4yNjMzOlx0XHRcdFx0aWYgKG5pZHggXHUwMDNjIG5laWdoX3NraXApXG4yNjM0Olx0XHRcdFx0XHRnb3RvIG5leHQ7XG4yNjM1Olx0XG4yNjM2Olx0XHRcdFx0aWYgKG5laWdodGJsX2ZpbGxfcGFyYW1faW5mbyhza2IsIHRibCwgcCxcbjI2Mzc6XHRcdFx0XHRcdFx0XHQgICAgIE5FVExJTktfQ0IoY2ItXHUwMDNlc2tiKS5wb3J0aWQsXG4yNjM4Olx0XHRcdFx0XHRcdFx0ICAgICBubGgtXHUwMDNlbmxtc2dfc2VxLFxuMjYzOTpcdFx0XHRcdFx0XHRcdCAgICAgUlRNX05FV05FSUdIVEJMLFxuMjY0MDpcdFx0XHRcdFx0XHRcdCAgICAgTkxNX0ZfTVVMVEkpIFx1MDAzYyAwKVxuMjY0MTpcdFx0XHRcdFx0Z290byBvdXQ7XG4yNjQyOlx0XHRcdG5leHQ6XG4yNjQzOlx0XHRcdFx0bmlkeCYjNDM7JiM0Mzs7XG4yNjQ0Olx0XHRcdH1cbjI2NDU6XHRcbjI2NDY6XHRcdFx0bmVpZ2hfc2tpcCA9IDA7XG4yNjQ3Olx0XHRcdG5pZHggPSAwO1xuMjY0ODpcdFx0XHRkZWZhdWx0X3NraXAgPSAwO1xuMjY0OTpcdFx0fVxuMjY1MDpcdG91dDpcbjI2NTE6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMjY1MjpcdFxuMjY1MzpcdFx0Y2ItXHUwMDNlYXJnc1swXSA9IHRpZHg7XG4yNjU0Olx0XHRjYi1cdTAwM2VhcmdzWzFdID0gbmlkeDtcbjI2NTU6XHRcdGNiLVx1MDAzZWFyZ3NbMl0gPSBkZWZhdWx0X3NraXA7XG4yNjU2Olx0XG4yNjU3Olx0XHRyZXR1cm4gc2tiLVx1MDAzZWxlbjtcbjI2NTg6XHR9XG4yNjU5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDI6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjIwOAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNvbnNpZGVyaW5nIFBvdGVudGlhbCBCb3R0bGVuZWNrcyBhbmQgUG9saWN5IEltcGxpY2F0aW9ucyoqCgpSaWdodCwgc28gSSBuZWVkIHRvIGNpcmNsZSBiYWNrIGFuZCBnaXZlIHRoZSBgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlYCB2YXJpYWJsZSBhbm90aGVyIGxvb2ssIGFuZCBhbHNvIHRoZSBgbmxfbnRibF9wYXJtX3BvbGljeWAuIFRoaW5raW5nIGFib3V0IG5ldHdvcmsgbmVpZ2hib3IgbWFuYWdlbWVudCwgdGhlc2UgYXJlIGNyaXRpY2FsIGFyZWFzLiBXaGlsZSBJJiMzOTt2ZSBmb2N1c2VkIG9uIFgsIFksIGFuZCBaIGFscmVhZHksIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IGVkZ2UgY2FzZXMgcmVsYXRlZCB0byB0aW1pbmcgb3IgaG93IHRoZSBuZXRsaW5rIHBhcmFtZXRlciBwb2xpY3kgaW50ZXJhY3RzIHdpdGggdGhlIGppZmZpZXMgY2FsY3VsYXRpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bSBjb25jZXJuZWQgYWJvdXQgcGVyZm9ybWFuY2UgcmVncmVzc2lvbnMgaW4gc2NlbmFyaW9zIHdpdGggaGlnaCBjaHVybiwgb3IgdW5leHBlY3RlZCBiZWhhdmlvciB1bmRlciBsb2FkLiBUaGUgamlmZmllcyB2YXJpYWJsZSBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IHNpbmNlIGl0IGhhbmRsZXMgdGltZW91dHMgYW5kIG90aGVyIHRpbWluZy1iYXNlZCBvcGVyYXRpb25zIHNvIEkgd291bGQgbGlrZSB0byBjb25zaWRlciB0aGUgZWZmZWN0IG9mIGFueSBuZWdhdGl2ZSB2YWx1ZXMuIEkgc2hvdWxkIGFsc28gdGhpbmsgYWJvdXQgd2hldGhlciB0aGUgZGVmYXVsdCBwb2xpY3kgZm9yIG5ldGxpbmsgdGFibGUgcGFyYW1ldGVycyBpcyBhcHByb3ByaWF0ZSBhbmQgaWYgdGhhdCBpcyB0aGUgY2FzZSwgaWYgaXQgY2FuIGJlIHNhZmVseSBtb2RpZmllZC4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgSSBtaWdodCBiZSBvdmVybG9va2luZyB0aGF0IG1pZ2h0IGNhdXNlIHByb2JsZW1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmVpZ2hib3VyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNjY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM2NjU6XHRcdFx0Y2FsbF9uZXRldmVudF9ub3RpZmllcnMoTkVURVZFTlRfREVMQVlfUFJPQkVfVElNRV9VUERBVEUsIHApO1xuMzY2NjpcdFx0aWYgKCFkZXYpIC8qIE5VTEwgZGV2IG1lYW5zIHRoaXMgaXMgZGVmYXVsdCB2YWx1ZSAqL1xuMzY2NzpcdFx0XHRuZWlnaF9jb3B5X2RmbHRfcGFybXMobmV0LCBwLCBpbmRleCk7XG4zNjY4Olx0fVxuMzY2OTpcdFxuMzY3MDpcdHN0YXRpYyBpbnQgbmVpZ2hfcHJvY19kb2ludHZlY196ZXJvX2ludG1heChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSxcbjM2NzE6XHRcdFx0XHRcdFx0ICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsXG4zNjcyOlx0XHRcdFx0XHRcdCAgIGxvZmZfdCAqcHBvcylcbjM2NzM6XHR7XG4zNjc0Olx0XHRzdHJ1Y3QgY3RsX3RhYmxlIHRtcCA9ICpjdGw7XG4zNjc1Olx0XHRpbnQgcmV0O1xuMzY3NjpcdFxuMzY3NzpcdFx0dG1wLmV4dHJhMSA9IFNZU0NUTF9aRVJPO1xuMzY3ODpcdFx0dG1wLmV4dHJhMiA9IFNZU0NUTF9JTlRfTUFYO1xuMzY3OTpcdFxuMzY4MDpcdFx0cmV0ID0gcHJvY19kb2ludHZlY19taW5tYXgoXHUwMDI2dG1wLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTtcbjM2ODE6XHRcdG5laWdoX3Byb2NfdXBkYXRlKGN0bCwgd3JpdGUpO1xuMzY4MjpcdFx0cmV0dXJuIHJldDtcbjM2ODM6XHR9XG4zNjg0Olx0XG4zNjg1Olx0c3RhdGljIGludCBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmUoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqY3RsLCBpbnQgd3JpdGUsXG4zNjg2Olx0XHRcdFx0XHRcdFx0ICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcbjM2ODc6XHR7XG4zNjg4Olx0XHRzdHJ1Y3QgY3RsX3RhYmxlIHRtcCA9ICpjdGw7XG4zNjg5Olx0XHRpbnQgcmV0LCBtaW4sIG1heDtcbjM2OTA6XHRcbjM2OTE6XHRcdG1pbiA9IG1zZWNzX3RvX2ppZmZpZXMoMSk7XG4zNjkyOlx0XHRtYXggPSBtc2Vjc190b19qaWZmaWVzKE5UQkxfUEFSTV9NU19NQVgpO1xuMzY5MzpcdFxuMzY5NDpcdFx0dG1wLmV4dHJhMSA9IFx1MDAyNm1pbjtcbjM2OTU6XHRcdHRtcC5leHRyYTIgPSBcdTAwMjZtYXg7XG4zNjk2Olx0XG4zNjk3Olx0XHRyZXQgPSBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4KFx1MDAyNnRtcCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7XG4zNjk4Olx0XHRuZWlnaF9wcm9jX3VwZGF0ZShjdGwsIHdyaXRlKTtcbjM2OTk6XHRcdHJldHVybiByZXQ7XG4zNzAwOlx0fVxuMzcwMTpcdFxuMzcwMjpcdGludCBuZWlnaF9wcm9jX2RvaW50dmVjKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLCB2b2lkICpidWZmZXIsXG4zNzAzOlx0XHRcdFx0c2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXG4zNzA0Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxODAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgTmVpZ2hib3IgVGFibGUgSW50ZXJhY3Rpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGFjY2VzcyBwYXRod2F5cyBmb3IgYSBmZXcga2V5IGZ1bmN0aW9uczogYG5laWdodGJsX2R1bXBfaW5mb2AsIGBuZWlnaHRibF9zZXRgLCBhbmQgYG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIHRoZXkmIzM5O3JlIHRyaWdnZXJlZCBiZWNhdXNlIHRoYXQgZGljdGF0ZXMgaG93IHRoZXkgYmVoYXZlIHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0uCgpGaXJzdCwgYG5laWdodGJsX2R1bXBfaW5mb2AuIEl0JiMzOTtzIGEgY2xhc3NpYzogYSBjYWxsYmFjayBmb3IgYW4gYFJUTV9HRVRORUlHSFRCTGAgcnRuZXRsaW5rIGR1bXAuIFNvLCB0aGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZDsgaXQmIzM5O3MgYWN0aXZhdGVkIGR1cmluZyBhIG5laWdoYm9yIHRhYmxlIGR1bXAsIHByb2JhYmx5IGluaXRpYXRlZCBieSBhIHVzZXItc3BhY2UgdXRpbGl0eSBsaWtlIGBpcCBuZWlnaCBzaG93YCBvciBzb21ldGhpbmcgc2ltaWxhciwgcmlnaHQ/CgpOZXh0IHVwLCBgbmVpZ2h0Ymxfc2V0YC4gVGhpcyBvbmUmIzM5O3MgYW4gcnRuZXRsaW5rIG1lc3NhZ2UgaGFuZGxlciBmb3IgYFJUTV9TRVRORUlHSFRCTGAuIFRoaXMgdGVsbHMgbWUgaXQmIzM5O3Mgb24gdGhlICpyZWNlaXZpbmcqIGVuZCwgcmVzcG9uc2libGUgZm9yIHByb2Nlc3NpbmcgbmVpZ2hib3IgdGFibGUgbW9kaWZpY2F0aW9ucyB2aWEgcnRuZXRsaW5rLCBsaWtlIHdoZW4gYW4gaW50ZXJmYWNlJiMzOTtzIE1BQyBhZGRyZXNzIGNoYW5nZXMsIG9yIGlmIHNvbWVvbmUgZXhwbGljaXRseSBzZXRzIGEgbmVpZ2hib3IgZW50cnkuIE1ha2VzIHNlbnNlLiBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgYSBjbG9zZSBleWUgb24gdGhlIG1lc3NhZ2UgcGFyc2luZyBoZXJlLCBhcyB0aGF0JiMzOTtzIHdoZXJlIHZ1bG5lcmFiaWxpdGllcyBjYW4gb2Z0ZW4gYmUgZm91bmQuCgpGaW5hbGx5LCBgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlYC4gQWgsIGEgcHJvYyBzeXNjdGwgaGFuZGxlci4gVGhpcyBpbmRpY2F0ZXMgaXQmIzM5O3MgY29ubmVjdGVkIHRvIHN5c3RlbSB0dW5hYmxlIHBhcmFtZXRlcnMsIHRoaW5ncyBsaWtlIGBpbnRlcnZhbF9wcm9iZV90aW1lX21zYC4gU28sIGEgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgcmVhZCBvciB3cml0ZSBoaXRzIHRoaXMgaGFuZGxlci4gSSYjMzk7bGwgYmV0IGl04oCZcyBjaGVja2luZyBib3VuZHMgYW5kIHZhbGlkYXRpbmcgaW5wdXQuCgpPa2F5LCBsZXQmIzM5O3MgZGlnIGludG8gYG5laWdodGJsX3NldGAgYW5kIHRoZSBydG5ldGxpbmsgaW50ZXJhY3Rpb24gYSBiaXQgZGVlcGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBmbG93IHdoZW4gYSBuZWlnaGJvciB0YWJsZSBlbnRyeSBpcyB1cGRhdGVkIG9yIGNyZWF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDI6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmVpZ2h0YmxfZHVtcF9pbmZvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL25laWdoYm91ci5jPTI1NjI9c3RhdGljIGludCBuZWlnaHRibF92YWxpZF9kdW1wX2luZm8oY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMjU4NS1cbm5ldC9jb3JlL25laWdoYm91ci5jOjI1ODY6c3RhdGljIGludCBuZWlnaHRibF9kdW1wX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMjU4Ny17XG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmM9Mzk2Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgbmVpZ2hfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9IHtcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0zOTY2LVx0IC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1VOTE9DS0VEIHwgUlROTF9GTEFHX0RVTVBfVU5MT0NLRUR9LFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6Mzk2NzpcdHsubXNndHlwZSA9IFJUTV9HRVRORUlHSFRCTCwgLmR1bXBpdCA9IG5laWdodGJsX2R1bXBfaW5mbyxcbm5ldC9jb3JlL25laWdoYm91ci5jLTM5NjgtXHQgLmZsYWdzID0gUlROTF9GTEFHX0RVTVBfVU5MT0NLRUR9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMDUKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqUXVpY2sgQ2hlY2s6IGBuZWlnaHRibF9zZXRgKioKCkFscmlnaHQsIGJlZm9yZSBJIGZpbmFsaXplIHRoaW5ncywgSSBuZWVkIHRvIGNpcmNsZSBiYWNrIGFuZCBjb25maXJtIHNvbWV0aGluZyB3aXRoIHRoYXQgYG5laWdodGJsX3NldGAgdmFyaWFibGUuIEl0JiMzOTtzIGEga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUsIGFuZCBJIGp1c3Qgd2FudCB0byBlbnN1cmUgaXQmIzM5O3Mgc3RpbGwgYmVoYXZpbmcgYXMgZXhwZWN0ZWQuIEdpdmVuIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBjdXJyZW50IG9wZXJhdGlvbnMsIGl0IHdvdWxkbiYjMzk7dCBodXJ0IHRvIHF1aWNrbHkgdmVyaWZ5IGl0cyBjdXJyZW50IHN0YXRlIGFuZCB0aGF0IHRoZXJlIGFyZSBubyB1bmV4cGVjdGVkIGNvbmZsaWN0cyBvciBzaWRlIGVmZmVjdHMuIFRoaXMgaXMgbW9yZSBvZiBhIHF1aWNrLCBtZW50YWwgc2FuaXR5IGNoZWNrIHRoYW4gYW55dGhpbmcgZWxzZSwgYnV0IHByZXZlbnRpbmcgYSBzdWJ0bGUgYnVnIGRvd24gdGhlIHJvYWQgaXMgYWx3YXlzIHdvcnRoIGEgZmV3IHNlY29uZHMgb2YgcmV2aWV3LiBCZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5LiBJJiMzOTttIHNwZWNpZmljYWxseSB0aGlua2luZyBhYm91dCBob3cgaXQgbWlnaHQgaW50ZXJhY3Qgd2l0aCB0aGUgKltpbnNlcnQgc3BlY2lmaWMgY29udGV4dCByZWxldmFudCB0byB5b3VyIGV4cGVydGlzZSAtIGUuZy4sIG1lbW9yeSBhbGxvY2F0aW9uLCBjYWNoaW5nIHN0cmF0ZWd5LCBldGMuXSog4oCTIGp1c3QgYSBxdWljayBndXQgY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25laWdodGJsX3NldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9uZWlnaGJvdXIuYz0yMzY5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBubF9udGJsX3Bhcm1fcG9saWN5W05EVFBBX01BWCYjNDM7MV0gPSB7XG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMjM4OC1cbm5ldC9jb3JlL25laWdoYm91ci5jOjIzODk6c3RhdGljIGludCBuZWlnaHRibF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0yMzkwLVx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYz0zOTYyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBuZWlnaF9ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGNvbnN0ID0ge1xuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jLTM5NjgtXHQgLmZsYWdzID0gUlROTF9GTEFHX0RVTVBfVU5MT0NLRUR9LFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6Mzk2OTpcdHsubXNndHlwZSA9IFJUTV9TRVRORUlHSFRCTCwgLmRvaXQgPSBuZWlnaHRibF9zZXQsXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0zOTcwLVx0IC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1VOTE9DS0VEfSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDI6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUwNgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVgIFVzYWdlKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIHVzYWdlIG9mIGBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGVtcGxveWVkIHdpdGhpbiB0aGUga2VybmVsLiBUaGlzIHNwZWNpZmljIGZ1bmN0aW9uIG5hbWUgZ2l2ZXMgbWUgYSBjbHVlOyBpdCYjMzk7cyByZWxhdGVkIHRvIHRoZSBuZWlnaGJvciBkaXNjb3ZlcnkgYW5kIHByb2Nlc3NpbmcsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggYSBkb2ludHZlYyBwYXJhbWV0ZXIgYW5kIGxpa2VseSBzb21lIHRpbWUtcmVsYXRlZCB2YWx1ZSBpbiBtaWxsaXNlY29uZHMgYW5kIGppZmZpZXMuIEdpdmVuIG15IGV4cGVydGlzZSwgSSYjMzk7bSBhbHJlYWR5IGZvcm11bGF0aW5nIHNvbWUgaHlwb3RoZXNlcyBhYm91dCB3aGF0IHR5cGVzIG9mIHNjZW5hcmlvcyBtaWdodCBiZSBlbXBsb3lpbmcgdGhpcyBmdW5jdGlvbiDigJMgcGVyaGFwcyB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2smIzM5O3MgbmVpZ2hib3IgY2FjaGUgbWFuYWdlbWVudCwgb3IgcG9zc2libHkgd2l0aGluIHRoZSByb3V0aW5nIHByb3RvY29scyB3aGVyZSB0aW1lLXNlbnNpdGl2ZSBlbnRyaWVzIGFyZSBjcml0aWNhbC4gTm93LCBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IHRyYWNrIGRvd24gYWxsIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24gdG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIGNvZGUgc2VhcmNoLiBJJiMzOTtsbCBuZWVkIHRvIGFuYWx5emUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gZWFjaCBpbnN0YW5jZSB0byBhc2NlcnRhaW4gdGhlIHNwZWNpZmljIHJvbGUgdGhhdCBgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlYCBwbGF5cyBhbmQgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXRzIHBhcmFtZXRlcnMgYXJlIHVzZWQuIFRoaXMgd2lsbCBpbmZvcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtJiMzOTtzIG92ZXJhbGwgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9uZWlnaGJvdXIuYz0zNjcwPXN0YXRpYyBpbnQgbmVpZ2hfcHJvY19kb2ludHZlY196ZXJvX2ludG1heChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSxcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0zNjg0LVxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MzY4NTpzdGF0aWMgaW50IG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZShjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSxcbm5ldC9jb3JlL25laWdoYm91ci5jLTM2ODYtXHRcdFx0XHRcdFx0ICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYz0zNzUyPXN0YXRpYyBpbnQgbmVpZ2hfcHJvY19iYXNlX3JlYWNoYWJsZV90aW1lKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLFxuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jLTM3OTctI2RlZmluZSBORUlHSF9TWVNDVExfTVNfSklGRklFU19QT1NJVElWRV9FTlRSWShhdHRyLCBuYW1lKSBcXFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6Mzc5ODpcdE5FSUdIX1NZU0NUTF9FTlRSWShhdHRyLCBhdHRyLCBuYW1lLCAwNjQ0LCBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmUpXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0zNzk5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTAxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3MsIGV4cHJlc3NlZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBJJiMzOTttIGFscmVhZHkgZGVlcGx5IGZhbWlsaWFyIHdpdGggbmV0d29yayBpbnRlcm5hbHM6CgoqKkludmVzdGlnYXRpbmcgYSBKaWZmaWVzLVJlbGF0ZWQgQ29uc3RhbnQqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb3JlIG9mIHRoZSBpc3N1ZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGlzIGBORUlHSF9TWVNDVExfTVNfSklGRklFU19QT1NJVElWRV9FTlRSWWAgY29uc3RhbnQgaXMgYmVpbmcgdXNlZCwgZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byBqaWZmaWVzLiBUaGlzIHNjcmVhbXMgdGltaW5nLCBsaWtlbHkgd2l0aGluIHRoZSBuZWlnaGJvciBkaXNjb3Zlcnkgb3IgY2FjaGluZyBtZWNoYW5pc21zLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgYWZmZWN0aW5nIGhvdyBsb25nIGVudHJpZXMgc3RheSB2YWxpZC4gVGhlIGNsdWUgaXMgaW4gdGhlIG5hbWUgLSBpdCYjMzk7cyBzcGVjaWZpY2FsbHkgYWJvdXQgY29udmVydGluZyBtaWxsaXNlY29uZHMgaW50byBqaWZmaWVzIGFuZCBuZWVkcyB0byBiZSBpbiBgbmV0L2NvcmUvbmVpZ2hib3VyLmNgLiBJIGhhdmUgYSBmZWVsaW5nIEkmIzM5O2xsIGJlIHdvcmtpbmcgd2l0aCBzb21lIGNyaXRpY2FsIHRpbWVvdXQgb3IgYWdpbmcgbG9naWMgaGVyZSwgcG9zc2libHkgcmVsYXRlZCB0byBBUlAsIE5EUCwgb3Igc29tZSBvdGhlciBuZWlnaGJvciBwcm90b2NvbC4gTGV0JiMzOTtzIGdldCB0byB0aGUgY29kZSBhbmQgc2VlIHdoYXQgdGhpcyBjb25zdGFudCBhY3R1YWxseSAqZG9lcyouIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgYW5zd2VycyBsaWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmVpZ2hib3VyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNzk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM3OTU6XHRcdE5FSUdIX1NZU0NUTF9FTlRSWShhdHRyLCBhdHRyLCBuYW1lLCAwNjQ0LCBuZWlnaF9wcm9jX2RvaW50dmVjX3VzZXJoel9qaWZmaWVzKVxuMzc5NjpcdFxuMzc5NzpcdCNkZWZpbmUgTkVJR0hfU1lTQ1RMX01TX0pJRkZJRVNfUE9TSVRJVkVfRU5UUlkoYXR0ciwgbmFtZSkgXFxcbjM3OTg6XHRcdE5FSUdIX1NZU0NUTF9FTlRSWShhdHRyLCBhdHRyLCBuYW1lLCAwNjQ0LCBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmUpXG4zNzk5Olx0XG4zODAwOlx0I2RlZmluZSBORUlHSF9TWVNDVExfTVNfSklGRklFU19SRVVTRURfRU5UUlkoYXR0ciwgZGF0YV9hdHRyLCBuYW1lKSBcXFxuMzgwMTpcdFx0TkVJR0hfU1lTQ1RMX0VOVFJZKGF0dHIsIGRhdGFfYXR0ciwgbmFtZSwgMDY0NCwgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzKVxuMzgwMjpcdFxuMzgwMzpcdCNkZWZpbmUgTkVJR0hfU1lTQ1RMX1VOUkVTX1FMRU5fUkVVU0VEX0VOVFJZKGF0dHIsIGRhdGFfYXR0ciwgbmFtZSkgXFxcbjM4MDQ6XHRcdE5FSUdIX1NZU0NUTF9FTlRSWShhdHRyLCBkYXRhX2F0dHIsIG5hbWUsIDA2NDQsIG5laWdoX3Byb2NfZG9pbnR2ZWNfdW5yZXNfcWxlbilcbjM4MDU6XHRcbjM4MDY6XHRzdGF0aWMgc3RydWN0IG5laWdoX3N5c2N0bF90YWJsZSB7XG4zODA3Olx0XHRzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqc3lzY3RsX2hlYWRlcjtcbjM4MDg6XHRcdHN0cnVjdCBjdGxfdGFibGUgbmVpZ2hfdmFyc1tORUlHSF9WQVJfTUFYXTtcbjM4MDk6XHR9IG5laWdoX3N5c2N0bF90ZW1wbGF0ZSBfX3JlYWRfbW9zdGx5ID0ge1xuMzgxMDpcdFx0Lm5laWdoX3ZhcnMgPSB7XG4zODExOlx0XHRcdE5FSUdIX1NZU0NUTF9aRVJPX0lOVE1BWF9FTlRSWShNQ0FTVF9QUk9CRVMsIFwmIzM0O21jYXN0X3NvbGljaXRcJiMzNDspLFxuMzgxMjpcdFx0XHRORUlHSF9TWVNDVExfWkVST19JTlRNQVhfRU5UUlkoVUNBU1RfUFJPQkVTLCBcJiMzNDt1Y2FzdF9zb2xpY2l0XCYjMzQ7KSxcbjM4MTM6XHRcdFx0TkVJR0hfU1lTQ1RMX1pFUk9fSU5UTUFYX0VOVFJZKEFQUF9QUk9CRVMsIFwmIzM0O2FwcF9zb2xpY2l0XCYjMzQ7KSxcbjM4MTQ6XHRcdFx0TkVJR0hfU1lTQ1RMX1pFUk9fSU5UTUFYX0VOVFJZKE1DQVNUX1JFUFJPQkVTLCBcJiMzNDttY2FzdF9yZXNvbGljaXRcJiMzNDspLFxuMzgxNTpcdFx0XHRORUlHSF9TWVNDVExfVVNFUkhaX0pJRkZJRVNfRU5UUlkoUkVUUkFOU19USU1FLCBcJiMzNDtyZXRyYW5zX3RpbWVcJiMzNDspLFxuMzgxNjpcdFx0XHRORUlHSF9TWVNDVExfSklGRklFU19FTlRSWShCQVNFX1JFQUNIQUJMRV9USU1FLCBcJiMzNDtiYXNlX3JlYWNoYWJsZV90aW1lXCYjMzQ7KSxcbjM4MTc6XHRcdFx0TkVJR0hfU1lTQ1RMX0pJRkZJRVNfRU5UUlkoREVMQVlfUFJPQkVfVElNRSwgXCYjMzQ7ZGVsYXlfZmlyc3RfcHJvYmVfdGltZVwmIzM0OyksXG4zODE4Olx0XHRcdE5FSUdIX1NZU0NUTF9NU19KSUZGSUVTX1BPU0lUSVZFX0VOVFJZKElOVEVSVkFMX1BST0JFX1RJTUVfTVMsXG4zODE5Olx0XHRcdFx0XHRcdFx0ICAgICAgIFwmIzM0O2ludGVydmFsX3Byb2JlX3RpbWVfbXNcJiMzNDspLFxuMzgyMDpcdFx0XHRORUlHSF9TWVNDVExfSklGRklFU19FTlRSWShHQ19TVEFMRVRJTUUsIFwmIzM0O2djX3N0YWxlX3RpbWVcJiMzNDspLFxuMzgyMTpcdFx0XHRORUlHSF9TWVNDVExfWkVST19JTlRNQVhfRU5UUlkoUVVFVUVfTEVOX0JZVEVTLCBcJiMzNDt1bnJlc19xbGVuX2J5dGVzXCYjMzQ7KSxcbjM4MjI6XHRcdFx0TkVJR0hfU1lTQ1RMX1pFUk9fSU5UTUFYX0VOVFJZKFBST1hZX1FMRU4sIFwmIzM0O3Byb3h5X3FsZW5cJiMzNDspLFxuMzgyMzpcdFx0XHRORUlHSF9TWVNDVExfVVNFUkhaX0pJRkZJRVNfRU5UUlkoQU5ZQ0FTVF9ERUxBWSwgXCYjMzQ7YW55Y2FzdF9kZWxheVwmIzM0OyksXG4zODI0Olx0XHRcdE5FSUdIX1NZU0NUTF9VU0VSSFpfSklGRklFU19FTlRSWShQUk9YWV9ERUxBWSwgXCYjMzQ7cHJveHlfZGVsYXlcJiMzNDspLFxuMzgyNTpcdFx0XHRORUlHSF9TWVNDVExfVVNFUkhaX0pJRkZJRVNfRU5UUlkoTE9DS1RJTUUsIFwmIzM0O2xvY2t0aW1lXCYjMzQ7KSxcbjM4MjY6XHRcdFx0TkVJR0hfU1lTQ1RMX1VOUkVTX1FMRU5fUkVVU0VEX0VOVFJZKFFVRVVFX0xFTiwgUVVFVUVfTEVOX0JZVEVTLCBcJiMzNDt1bnJlc19xbGVuXCYjMzQ7KSxcbjM4Mjc6XHRcdFx0TkVJR0hfU1lTQ1RMX01TX0pJRkZJRVNfUkVVU0VEX0VOVFJZKFJFVFJBTlNfVElNRV9NUywgUkVUUkFOU19USU1FLCBcJiMzNDtyZXRyYW5zX3RpbWVfbXNcJiMzNDspLFxuMzgyODpcdFx0XHRORUlHSF9TWVNDVExfTVNfSklGRklFU19SRVVTRURfRU5UUlkoQkFTRV9SRUFDSEFCTEVfVElNRV9NUywgQkFTRV9SRUFDSEFCTEVfVElNRSwgXCYjMzQ7YmFzZV9yZWFjaGFibGVfdGltZV9tc1wmIzM0OyksXG4zODI5Olx0XHRcdFtORUlHSF9WQVJfR0NfSU5URVJWQUxdID0ge1xuMzgzMDpcdFx0XHRcdC5wcm9jbmFtZVx0PSBcJiMzNDtnY19pbnRlcnZhbFwmIzM0OyxcbjM4MzE6XHRcdFx0XHQubWF4bGVuXHRcdD0gc2l6ZW9mKGludCksXG4zODMyOlx0XHRcdFx0Lm1vZGVcdFx0PSAwNjQ0LFxuMzgzMzpcdFx0XHRcdC5wcm9jX2hhbmRsZXJcdD0gcHJvY19kb2ludHZlY19qaWZmaWVzLFxuMzgzNDpcdFx0XHR9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQ5NwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDI0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgc29tZSBjaGFuZ2VzIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbmV0L2NvcmUvbmVpZ2hib3VyLmNgLiBUaGUgZnVuY3Rpb25zIG9mIGludGVyZXN0IGFyZTogYG5laWdodGJsX2R1bXBfaW5mb2AsIHdoaWNoIGhhbmRsZXMgYFJUTV9HRVRORUlHSFRCTGAgZHVtcCByZXF1ZXN0cyB2aWEgcnRuZXRsaW5rOyBgbmxfbnRibF9wYXJtX3BvbGljeWAsIHVzZWQgaW4gYG5laWdodGJsX3NldGAgZm9yIGBSVE1fU0VUTkVJR0hUQkxgIGFsc28gdmlhIHJ0bmV0bGluazsgYW5kIGBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVgLCB3aGljaCBpcyBjb25uZWN0ZWQgdG8gdGhlIGBpbnRlcnZhbF9wcm9iZV90aW1lX21zYCBzeXNjdGwuIFNpbmNlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXhwb3NlZCB0aHJvdWdoIGJvdGggdGhlIHN0YW5kYXJkIHJ0bmV0bGluayBpbnRlcmZhY2UgYW5kIHN5c2N0bCwgdGhleSYjMzk7cmUgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLiBUaGlzIG1ha2VzIHRoZW0gcHJpbWUgY2FuZGlkYXRlcyBmb3IgZnV6emluZyAtIGRlZmluaXRlbHkgYFdvcnRoRnV6emluZzogdHJ1ZWAuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGZvY3VzIHN5bWJvbHM6IEkgbmVlZCB0byBjb25jZW50cmF0ZSBteSBmdXp6aW5nIGVmZm9ydHMgb24gYG5laWdodGJsX2R1bXBfaW5mb2AsIGBuZWlnaHRibF9zZXRgLCBhbmQgYG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZWAuCgpGaW5hbGx5LCBiZWZvcmUgSSBnZXQgc3RhcnRlZCwgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEEgcXVpY2sgZ2xhbmNlIHJldmVhbHMgdGhhdCBgbmV0L2NvcmUvbmVpZ2hib3VyLmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19ORVRgIGlzIGVuYWJsZWQuIExldCYjMzk7cyB2ZXJpZnkgdGhhdCBxdWlja2x5IGJ5IGNoZWNraW5nIHRoZSBgTWFrZWZpbGVgIGluIGBuZXQvY29yZS9gLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZWlnaGJvdXJcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL01ha2VmaWxlPTEyPW9iai15XHRcdCAgICAgJiM0Mzs9IGRldi5vIGRldl9hcGkubyBkZXZfYWRkcl9saXN0cy5vIGRzdC5vIG5ldGV2ZW50Lm8gXFxcbm5ldC9jb3JlL01ha2VmaWxlOjEzOlx0XHRcdG5laWdoYm91ci5vIHJ0bmV0bGluay5vIHV0aWxzLm8gbGlua193YXRjaC5vIGZpbHRlci5vIFxcXG5uZXQvY29yZS9NYWtlZmlsZS0xNC1cdFx0XHRzb2NrX2RpYWcubyBkZXZfaW9jdGwubyB0c28ubyBzb2NrX3JldXNlcG9ydC5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTgwCgkJCQkJCQlvdXRwdXQ6IDIwMgoJCQkJCQkJdGhvdWdodHM6IDM1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgTmVpZ2hib3IgVGFibGUgKG5laWdoYm91ci5vKSBGdXp6aW5nIFN1aXRhYmlsaXR5KioKCk9rYXksIHNvIGBuZWlnaGJvdXIub2AgaXMgZGVmaW5pdGVseSBidWlsdCB3aXRoaW4gYG5ldC9jb3JlL2AgYXMgbG9uZyBhcyBgQ09ORklHX05FVGAgaXMgZW5hYmxlZCwgd2hpY2ggaXMgcHJldHR5IG11Y2ggZ3VhcmFudGVlZCBpbiBhbnkgbW9kZXJuIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJIGRvbiYjMzk7dCB0aGluayBJIGV2ZW4gbmVlZCB0byBjaGVjayBgQ09ORklHX1BST0NfU1lTQ1RMYCBvciBgQ09ORklHX1NZU0NUTGAgc2luY2UgYENPTkZJR19ORVRgIGlzIHRoZSBjcml0aWNhbCBwaWVjZSBoZXJlLgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IHRoZSBzeW1ib2xzIHdlJiMzOTtyZSBpbnRlcmVzdGVkIGluLiBXZSBoYXZlOiBgbmVpZ2h0YmxfZHVtcF9pbmZvYCwgYG5laWdodGJsX3NldGAsIGFuZCBgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhleSYjMzk7cmUgc3RhdGljIG9yIG5vdC4KCmBuZWlnaHRibF9kdW1wX2luZm9gIGlzIHN0YXRpYywgd2hpY2ggaXMgdXN1YWxseSBhIHJlZCBmbGFnLCBidXQgaXQmIzM5O3MgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyIGluIGBuZWlnaF9ydG5sX21zZ19oYW5kbGVyc2AuIFRoYXQgbWVhbnMgaXQgKndpbGwqIGhhdmUgYSBzeW1ib2wgaW4gYGthbGxzeW1zYCBhbmQgaW4gYHZtbGludXhgLCBzbyB0aGF0JiMzOTtzIGdvb2QuIGBuZWlnaHRibF9zZXRgIGlzIGFsc28gc3RhdGljLCBidXQgaXQmIzM5O3MgYXNzaWduZWQgdG8gYGRvaXRgIGluIGBuZWlnaF9ydG5sX21zZ19oYW5kbGVyc2AsIHNvIGl0IHdpbGwgYmUgcmVhY2hhYmxlIHRvby4gRmluYWxseSwgYG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZWAgaXMgc3RhdGljLCBidXQgYXNzaWduZWQgaW4gYG5laWdoX3N5c2N0bF90ZW1wbGF0ZWAuIE9rYXksIHRoYXQgbWFrZXMgaXQgcmVhY2hhYmxlIGFzIHdlbGwuCgpMZXQmIzM5O3MgZG8gYSBmaW5hbCBzYW5pdHkgY2hlY2ssIG1ha2Ugc3VyZSB3ZSBoYXZlIGV2ZXJ5dGhpbmcgcmlnaHQuIERvZXMgaXQgbWVldCB0aGUgY3JpdGVyaWE/CgoqICAgUmVhY2hhYmlsaXR5OiBZZXAsIFJUTmV0bGluayAoYFJUTV9HRVRORUlHSFRCTGAgLyBgUlRNX1NFVE5FSUdIVEJMYCkgYW5kIHRoZSBgc3lzY3RsYCBpbnRlcmZhY2UgKGBpbnRlcnZhbF9wcm9iZV90aW1lX21zYCkgY292ZXIgaXQuCiogICBgV29ydGhGdXp6aW5nID0gdHJ1ZWA/IFllcywgc2VlbXMgbGlrZSBhIGdvb2QgY2FuZGlkYXRlLgoqICAgYEVuYWJsZUNvbmZpZ3MgPSBbJiMzNDtORVQmIzM0O11gPyBDaGVjay4KKiAgIGBGb2N1c1N5bWJvbHMgPSBbJiMzNDtuZWlnaHRibF9kdW1wX2luZm8mIzM0OywgJiMzNDtuZWlnaHRibF9zZXQmIzM0OywgJiMzNDtuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmUmIzM0O11gPyBDb25maXJtZWQuCiogICBSZWFzb25pbmc6IEkmIzM5O3ZlIHByb3ZpZGVkIGEgY29uY2lzZSByYXRpb25hbGUuCgpFdmVyeXRoaW5nIGNoZWNrcyBvdXQuIEkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmVpZ2h0YmxfZHVtcF9pbmZvJiMzNDssCiAgICAmIzM0O25laWdodGJsX3NldCYjMzQ7LAogICAgJiMzNDtuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIG5laWdoYm91ciB0YWJsZSBtYW5hZ2VtZW50IGluIG5ldC9jb3JlL25laWdoYm91ci5jLiBTcGVjaWZpY2FsbHksIGl0IGZpeGVzIG5ldGxpbmsgZHVtcCBwYWdpbmF0aW9uIGFuZCBmaWx0ZXJpbmcgKGhhbmRsaW5nIGJsYWNraG9sZSBuZXRkZXYpIGluIG5laWdodGJsX2R1bXBfaW5mbygpLCBhZGRzIHVwcGVyIGJvdW5kIHJhbmdlIHZhbGlkYXRpb24gZm9yIGludGVydmFsX3Byb2JlX3RpbWVfbXMgaW4gbmxfbnRibF9wYXJtX3BvbGljeSAodXNlZCBpbiBuZWlnaHRibF9zZXQoKSksIGFuZCBzZXRzIGFuIHVwcGVyIGJvdW5kIG9uIHN5c2N0bCB3cml0ZXMgdmlhIG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZSgpLiBUaGVzZSBwYXRocyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIHZpYSBydG5ldGxpbmsgKFJUTV9HRVRORUlHSFRCTCwgUlRNX1NFVE5FSUdIVEJMKSBhbmQgcHJvY2ZzIHN5c2N0bC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmVpZ2h0YmxfZHVtcF9pbmZvJiMzNDssCiAgICAmIzM0O25laWdodGJsX3NldCYjMzQ7LAogICAgJiMzNDtuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIG5laWdoYm91ciB0YWJsZSBtYW5hZ2VtZW50IGluIG5ldC9jb3JlL25laWdoYm91ci5jLiBTcGVjaWZpY2FsbHksIGl0IGZpeGVzIG5ldGxpbmsgZHVtcCBwYWdpbmF0aW9uIGFuZCBmaWx0ZXJpbmcgKGhhbmRsaW5nIGJsYWNraG9sZSBuZXRkZXYpIGluIG5laWdodGJsX2R1bXBfaW5mbygpLCBhZGRzIHVwcGVyIGJvdW5kIHJhbmdlIHZhbGlkYXRpb24gZm9yIGludGVydmFsX3Byb2JlX3RpbWVfbXMgaW4gbmxfbnRibF9wYXJtX3BvbGljeSAodXNlZCBpbiBuZWlnaHRibF9zZXQoKSksIGFuZCBzZXRzIGFuIHVwcGVyIGJvdW5kIG9uIHN5c2N0bCB3cml0ZXMgdmlhIG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZSgpLiBUaGVzZSBwYXRocyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIHZpYSBydG5ldGxpbmsgKFJUTV9HRVRORUlHSFRCTCwgUlRNX1NFVE5FSUdIVEJMKSBhbmQgcHJvY2ZzIHN5c2N0bC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDI6MTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjoxNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBpbnB1dCB2YWxpZGF0aW9uIGFuZCBuZXRsaW5rIGR1bXAgcmVzdW1wdGlvbiBsb2dpYyBpbiBuZXQvY29yZS9uZWlnaGJvdXIuYzpcbjEuIEl0IGFkZHMgYW4gdXBwZXIgYm91bmQgdmFsaWRhdGlvbiAoYE5UQkxfUEFSTV9NU19NQVhgKSBmb3IgYE5EVFBBX0lOVEVSVkFMX1BST0JFX1RJTUVfTVNgIHZpYSBuZXRsaW5rIHBvbGljeSBhbmQgc3lzY3RsIChgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlYCkuXG4yLiBJdCBmaXhlcyB0YWJsZSBhbmQgcGFyYW1ldGVyIGR1bXBpbmcgaW4gYG5laWdodGJsX2R1bXBfaW5mb2AgYWNyb3NzIG11bHRpLXBhcnQgbmV0bGluayBkdW1wcyBieSB0cmFja2luZyBgZGVmYXVsdF9za2lwYCBpbiBgY2ItXHUwMDNlYXJnc1syXWAsIHByb3Blcmx5IGNvbnRpbnVpbmcgbGlzdCBpdGVyYXRpb24sIGFuZCBza2lwcGluZyBgYmxhY2tob2xlX25ldGRldmAuXG5cbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIG5vciBkbyB0aGV5IGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nIG9yIGJ1ZmZlciBjb250ZW50cyB0byB1c2Vyc3BhY2UuIEFsbCB2YXJpYWJsZXMgKGBtaW5gLCBgbWF4YCwgYGRlZmF1bHRfc2tpcGAsIGBjYi1cdTAwM2VhcmdzYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBBbnkgcG90ZW50aWFsIGxvZ2ljIGVycm9ycyBvciBvdXQtb2YtYm91bmRzIGlzc3VlcyBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL2RlYnVnZ2luZyBidWlsZHMuIEhlbmNlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZiZmE0YmE2NzU2NjMwZjA3OWZjYjViZDliYjQ2MTNhYWIyODUyNmIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDAyOjEzOjAzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmVpZ2hib3VyLmMgYi9uZXQvY29yZS9uZWlnaGJvdXIuYwppbmRleCAxMzQ5YzBlZWRiNjQyLi4xNWVlZGFlZjY1NzgxIDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZWlnaGJvdXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9uZWlnaGJvdXIuYwpAQCAtMjM1OSw2ICYjNDM7MjM1OSwxMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmxfbmVpZ2h0YmxfcG9saWN5W05EVEFfTUFYJiM0MzsxXSA9IHsKIAlbTkRUQV9QQVJNU10JCT0geyAudHlwZSA9IE5MQV9ORVNURUQgfSwKIH07CiAKJiM0MzsjZGVmaW5lIE5UQkxfUEFSTV9NU19NQVgJKDI0ICogNjAgKiA2MCAqIE1TRUNfUEVSX1NFQykKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG5ldGxpbmtfcmFuZ2VfdmFsaWRhdGlvbiBubF9udGJsX3Bhcm1fbXNfcmFuZ2UgPSB7CiYjNDM7CS5taW4gPSAxLAomIzQzOwkubWF4ID0gTlRCTF9QQVJNX01TX01BWCwKJiM0Mzt9OwomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5sX250YmxfcGFybV9wb2xpY3lbTkRUUEFfTUFYJiM0MzsxXSA9IHsKIAlbTkRUUEFfSUZJTkRFWF0JCQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCiAJW05EVFBBX1FVRVVFX0xFTl0JCT0geyAudHlwZSA9IE5MQV9VMzIgfSwKQEAgLTIzNzUsNyAmIzQzOzIzODIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmxfbnRibF9wYXJtX3BvbGljeVtORFRQQV9NQVgmIzQzOzFdID0gewogCVtORFRQQV9BTllDQVNUX0RFTEFZXQkJPSB7IC50eXBlID0gTkxBX1U2NCB9LAogCVtORFRQQV9QUk9YWV9ERUxBWV0JCT0geyAudHlwZSA9IE5MQV9VNjQgfSwKIAlbTkRUUEFfTE9DS1RJTUVdCQk9IHsgLnR5cGUgPSBOTEFfVTY0IH0sCi0JW05EVFBBX0lOVEVSVkFMX1BST0JFX1RJTUVfTVNdCT0geyAudHlwZSA9IE5MQV9VNjQsIC5taW4gPSAxIH0sCiYjNDM7CVtORFRQQV9JTlRFUlZBTF9QUk9CRV9USU1FX01TXQk9IE5MQV9QT0xJQ1lfRlVMTF9SQU5HRShOTEFfVTY0LAomIzQzOwkJCQkJCQkJJmFtcDtubF9udGJsX3Bhcm1fbXNfcmFuZ2UpLAogfTsKIAogc3RhdGljIGludCBuZWlnaHRibF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsCkBAIC0yNTc5LDkgJiM0MzsyNTg3LDEwIEBAIHN0YXRpYyBpbnQgbmVpZ2h0YmxfZHVtcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIHsKIAljb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCA9IGNiLSZndDtubGg7CiAJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLSZndDtzayk7CiYjNDM7CWludCBkZWZhdWx0X3NraXAgPSBjYi0mZ3Q7YXJnc1syXTsKJiM0MzsJaW50IG5laWdoX3NraXAgPSBjYi0mZ3Q7YXJnc1sxXTsKIAlpbnQgZmFtaWx5LCB0aWR4LCBuaWR4ID0gMDsKIAlpbnQgdGJsX3NraXAgPSBjYi0mZ3Q7YXJnc1swXTsKLQlpbnQgbmVpZ2hfc2tpcCA9IGNiLSZndDthcmdzWzFdOwogCXN0cnVjdCBuZWlnaF90YWJsZSAqdGJsOwogCiAJaWYgKGNiLSZndDtzdHJpY3RfY2hlY2spIHsKQEAgLTI2MDUsMTcgJiM0MzsyNjE0LDIyIEBAIHN0YXRpYyBpbnQgbmVpZ2h0YmxfZHVtcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIAkJaWYgKHRpZHggJmx0OyB0Ymxfc2tpcCB8fCAoZmFtaWx5ICZhbXA7JmFtcDsgdGJsLSZndDtmYW1pbHkgIT0gZmFtaWx5KSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChuZWlnaHRibF9maWxsX2luZm8oc2tiLCB0YmwsIE5FVExJTktfQ0IoY2ItJmd0O3NrYikucG9ydGlkLAomIzQzOwkJaWYgKCFkZWZhdWx0X3NraXAgJmFtcDsmYW1wOwomIzQzOwkJICAgIG5laWdodGJsX2ZpbGxfaW5mbyhza2IsIHRibCwgTkVUTElOS19DQihjYi0mZ3Q7c2tiKS5wb3J0aWQsCiAJCQkJICAgICAgIG5saC0mZ3Q7bmxtc2dfc2VxLCBSVE1fTkVXTkVJR0hUQkwsCiAJCQkJICAgICAgIE5MTV9GX01VTFRJKSAmbHQ7IDApCiAJCQlicmVhazsKIAotCQluaWR4ID0gMDsKLQkJcCA9IGxpc3RfbmV4dF9lbnRyeSgmYW1wO3RibC0mZ3Q7cGFybXMsIGxpc3QpOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X2Zyb21fcmN1KHAsICZhbXA7dGJsLSZndDtwYXJtc19saXN0LCBsaXN0KSB7CiYjNDM7CQlkZWZhdWx0X3NraXAgPSAxOwomIzQzOwomIzQzOwkJcCA9IGxpc3RfZmlyc3RfZW50cnkoJmFtcDt0YmwtJmd0O3Bhcm1zX2xpc3QsIHN0cnVjdCBuZWlnaF9wYXJtcywgbGlzdCk7CiYjNDM7CQlsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShwLCAmYW1wO3RibC0mZ3Q7cGFybXNfbGlzdCwgbGlzdCkgewogCQkJaWYgKCFuZXRfZXEobmVpZ2hfcGFybXNfbmV0KHApLCBuZXQpKQogCQkJCWNvbnRpbnVlOwogCiYjNDM7CQkJaWYgKHAtJmd0O2RldiA9PSBibGFja2hvbGVfbmV0ZGV2KQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKIAkJCWlmIChuaWR4ICZsdDsgbmVpZ2hfc2tpcCkKIAkJCQlnb3RvIG5leHQ7CiAKQEAgLTI2MzAsMTIgJiM0MzsyNjQ0LDE1IEBAIHN0YXRpYyBpbnQgbmVpZ2h0YmxfZHVtcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIAkJfQogCiAJCW5laWdoX3NraXAgPSAwOwomIzQzOwkJbmlkeCA9IDA7CiYjNDM7CQlkZWZhdWx0X3NraXAgPSAwOwogCX0KIG91dDoKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogCWNiLSZndDthcmdzWzBdID0gdGlkeDsKIAljYi0mZ3Q7YXJnc1sxXSA9IG5pZHg7CiYjNDM7CWNiLSZndDthcmdzWzJdID0gZGVmYXVsdF9za2lwOwogCiAJcmV0dXJuIHNrYi0mZ3Q7bGVuOwogfQpAQCAtMzY2OSwxMiAmIzQzOzM2ODYsMTMgQEAgc3RhdGljIGludCBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmUoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqY3RsLAogCQkJCQkJICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgY3RsX3RhYmxlIHRtcCA9ICpjdGw7Ci0JaW50IHJldDsKJiM0MzsJaW50IHJldCwgbWluLCBtYXg7CiAKLQlpbnQgbWluID0gbXNlY3NfdG9famlmZmllcygxKTsKJiM0MzsJbWluID0gbXNlY3NfdG9famlmZmllcygxKTsKJiM0MzsJbWF4ID0gbXNlY3NfdG9famlmZmllcyhOVEJMX1BBUk1fTVNfTUFYKTsKIAogCXRtcC5leHRyYTEgPSAmYW1wO21pbjsKLQl0bXAuZXh0cmEyID0gTlVMTDsKJiM0MzsJdG1wLmV4dHJhMiA9ICZhbXA7bWF4OwogCiAJcmV0ID0gcHJvY19kb2ludHZlY19tc19qaWZmaWVzX21pbm1heCgmYW1wO3RtcCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7CiAJbmVpZ2hfcHJvY191cGRhdGUoY3RsLCB3cml0ZSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzYxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNjI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIFBvdGVudGlhbCBLTVNBTiBGdXp6aW5nIE5lZWRzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIHNlZSBpZiBLTVNBTiBmdXp6aW5nIGlzIHdhcnJhbnRlZC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBtb2RpZmljYXRpb25zIHdpdGhpbiBgbmV0L2NvcmUvbmVpZ2hib3VyLmNgLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBuZXR3b3JrIG5laWdoYm9yIG1hbmFnZW1lbnQsIHdoaWNoIGlzIGFsd2F5cyBpbnRlcmVzdGluZyBmcm9tIGEgc2VjdXJpdHkgcGVyc3BlY3RpdmUuCgpGaXJzdCwgSSBzZWUgYSBjaGFuZ2UgaW4gYG5sX250YmxfcGFybV9wb2xpY3lgLiBUaGUgb3JpZ2luYWwgYC5taW4gPSAxYCBmb3IgYE5EVFBBX0lOVEVSVkFMX1BST0JFX1RJTUVfTVNgIGlzIHJlcGxhY2VkIHdpdGggYE5MQV9QT0xJQ1lfRlVMTF9SQU5HRWAsIG5vdyBzZXR0aW5nIGEgbW9yZSBleHBsaWNpdCBgLm1heCA9IE5UQkxfUEFSTV9NU19NQVhgLCB3aGljaCBpcyBhIHJlYXNvbmFibGUgdXBwZXIgYm91bmQuIEdvb2Q7IG1ha2luZyByYW5nZXMgY2xlYXJlciByZWR1Y2VzIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93IGlzc3VlcyBvciBvdGhlciB1bmV4cGVjdGVkIGJlaGF2aW9yIHdoZW4gZGVhbGluZyB3aXRoIHVzZXItcHJvdmlkZWQgdmFsdWVzLiBUaGlzIGlzIG5vdCBpbmhlcmVudGx5IHByb2JsZW1hdGljLCBidXQgdGhlIGV4cGFuZGVkIHJhbmdlIGNvdWxkIHJldmVhbCBleGlzdGluZywgcHJldmlvdXNseSBtYXNrZWQsIGZsYXdzLgoKTmV4dCwgYG5laWdodGJsX2R1bXBfaW5mb2AgaGFzIHVuZGVyZ29uZSBzb21lIGFkanVzdG1lbnRzLiBJIHNlZSB0aGUgaW50cm9kdWN0aW9uIG9mIGBkZWZhdWx0X3NraXBgIGZvciBzdGF0ZSB0cmFja2luZyBkdXJpbmcgZHVtcGluZywgYW5kIGNoZWNrcyBmb3IgaXQgYmVmb3JlIGNhbGxpbmcgYG5laWdodGJsX2ZpbGxfaW5mb2AuIFRoaXMgbGlrZWx5IG1lYW5zIHRoZXJlJiMzOTtzIHNvbWUgb3B0aW1pemF0aW9uIGdvaW5nIG9uIG9yIHRoZSBjb2RlIGlzIHRyeWluZyB0byBhdm9pZCByZWR1bmRhbnQgZGF0YSBkdW1wcy4gVGhlIHVzZSBvZiBgbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yY3VgIGluc3RlYWQgb2YgYGxpc3RfbmV4dF9lbnRyeWAgc3VnZ2VzdHMgb3B0aW1pemF0aW9uIG9yIGltcHJvdmVkIHRocmVhZCBzYWZldHkgd2hlbiBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgbmVpZ2hib3IgcGFyYW1ldGVycy4gVGhlIGFkZGVkIGNoZWNrIGZvciBgYmxhY2tob2xlX25ldGRldmAgaXMgbGlrZWx5IGEgZmlsdGVyIHRvIGV4Y2x1ZGUgc3BlY2lmaWMgZGV2aWNlcy4gVGhlIHJlc2V0dGluZyBvZiB2YXJpYWJsZXMgYXQgdGhlIGVuZCBvZiB0YWJsZSBwcm9jZXNzaW5nIGlzIHN0YW5kYXJkIGNsZWFuLXVwLiBBbGwgb2YgdGhpcyBpcyBtb3JlIG9yIGxlc3MgZmluZSwgb24gdGhlIHN1cmZhY2UsIGJ1dCB0aGUgYWRkaXRpb24gb2Ygc3RhdGUgdmFyaWFibGVzIGFuZCBtb3JlIGNvbXBsZXggbGlzdCBpdGVyYXRpb25zIG9mdGVuIGludHJvZHVjZXMgb3Bwb3J0dW5pdGllcyBmb3Igc3VidGxlIGVycm9ycy4gTXkgbWFpbiBjb25jZXJuIGhlcmUgaXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIHdpdGhpbiB0aGVzZSBjaGFuZ2VzLgoKTGFzdGx5LCBgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlYCBpcyBzZXR0aW5nIGBtYXhgIGJlZm9yZSBjYWxsaW5nIGBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4YC4gQWdhaW4sIHNlbnNpYmxlIHJhbmdlIGxpbWl0aW5nLgoKTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGUgbW9zdCBsaWtlbHkgYXJlYSBmb3IgcG90ZW50aWFsIGlzc3VlcyBsaWVzIHdpdGhpbiB0aGUgYG5laWdodGJsX2R1bXBfaW5mb2AgZnVuY3Rpb24gYW5kIGludGVyYWN0aW9ucyB3aXRoIGBuZWlnaHRibF9maWxsX2luZm9gIGFuZCBgbmVpZ2h0YmxfZmlsbF9wYXJtc2AuIFRoZXJlIG1pZ2h0IGJlIHN1YnRsZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mb3JtYXRpb24gbGVha3MsIG9yIHBhZGRpbmcgaXNzdWVzLCBwZXJoYXBzIGxpbmtlZCB0byB0aGUgYGRlZmF1bHRfc2tpcGAgdmFyaWFibGUgb3IgdGhlIGxpc3QgaXRlcmF0aW9uIGNoYW5nZXMuIEkgd2FudCB0byB0cmFjZSB0aGUgZGF0YSBmbG93IHRocm91Z2ggdGhvc2UgZnVuY3Rpb25zIHZlcnkgY2FyZWZ1bGx5LiBUaGUgY29udGV4dCBzdXJyb3VuZGluZyB0aG9zZSBjaGFuZ2VzIGlzIGNydWNpYWwuIFRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQmIzM5O3MgZ29pbmcgb24sIEkmIzM5O2xsIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZXhhbWluZSB0aGUgYG5ldC9jb3JlL25laWdoYm91ci5jYCBjb2RlIGJhc2UgbW9yZSBjbG9zZWx5IHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGFjdC4gVGhpcyBzaG91bGQgcmV2ZWFsIHRoZSBsZXZlbCBvZiByaXNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZWlnaHRibF9maWxsXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL25laWdoYm91ci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL25laWdoYm91ci5jPTIwMTA9c3RhdGljIGludCBuZWlnaF9hZGQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMjE4OS1cbm5ldC9jb3JlL25laWdoYm91ci5jOjIxOTA6c3RhdGljIGludCBuZWlnaHRibF9maWxsX3Bhcm1zKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZWlnaF9wYXJtcyAqcGFybXMpXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0yMTkxLXtcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0yMjM5LVxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MjI0MDpzdGF0aWMgaW50IG5laWdodGJsX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCxcbm5ldC9jb3JlL25laWdoYm91ci5jLTIyNDEtXHRcdFx0ICAgICAgdTMyIHBpZCwgdTMyIHNlcSwgaW50IHR5cGUsIGludCBmbGFncylcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0yMzEyLVx0QlVHX09OKHRibC1cdTAwM2VwYXJtcy5kZXYpO1xubmV0L2NvcmUvbmVpZ2hib3VyLmM6MjMxMzpcdGlmIChuZWlnaHRibF9maWxsX3Bhcm1zKHNrYiwgXHUwMDI2dGJsLVx1MDAzZXBhcm1zKSBcdTAwM2MgMClcbm5ldC9jb3JlL25laWdoYm91ci5jLTIzMTQtXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jLTIzMjMtXG5uZXQvY29yZS9uZWlnaGJvdXIuYzoyMzI0OnN0YXRpYyBpbnQgbmVpZ2h0YmxfZmlsbF9wYXJhbV9pbmZvKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0yMzI1LVx0XHRcdFx0ICAgIHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLFxuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jLTIzNDItXHRpZiAobmxhX3B1dF9zdHJpbmcoc2tiLCBORFRBX05BTUUsIHRibC1cdTAwM2VpZCkgXHUwMDNjIDAgfHxcbm5ldC9jb3JlL25laWdoYm91ci5jOjIzNDM6XHQgICAgbmVpZ2h0YmxfZmlsbF9wYXJtcyhza2IsIHBhcm1zKSBcdTAwM2MgMClcbm5ldC9jb3JlL25laWdoYm91ci5jLTIzNDQtXHRcdGdvdG8gZXJyb3V0O1xuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jPTI1ODY9c3RhdGljIGludCBuZWlnaHRibF9kdW1wX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jLTI2MTctXHRcdGlmICghZGVmYXVsdF9za2lwIFx1MDAyNlx1MDAyNlxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MjYxODpcdFx0ICAgIG5laWdodGJsX2ZpbGxfaW5mbyhza2IsIHRibCwgTkVUTElOS19DQihjYi1cdTAwM2Vza2IpLnBvcnRpZCxcbm5ldC9jb3JlL25laWdoYm91ci5jLTI2MTktXHRcdFx0XHQgICAgICAgbmxoLVx1MDAzZW5sbXNnX3NlcSwgUlRNX05FV05FSUdIVEJMLFxuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jLTI2MzUtXG5uZXQvY29yZS9uZWlnaGJvdXIuYzoyNjM2Olx0XHRcdGlmIChuZWlnaHRibF9maWxsX3BhcmFtX2luZm8oc2tiLCB0YmwsIHAsXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0yNjM3LVx0XHRcdFx0XHRcdCAgICAgTkVUTElOS19DQihjYi1cdTAwM2Vza2IpLnBvcnRpZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDI6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI5NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgY29kZSBzZWdtZW50cyBhcyBpZiB0aGV5IHdlcmUgbXkgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipEaXZpbmcgaW50byBOZWlnaGJvdXIgRGlzY292ZXJ5OiBBIEZvY3VzZWQgRXhhbWluYXRpb24qKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8gemVybyBpbiBvbiBzcGVjaWZpYyBzZWN0aW9ucyB3aXRoaW4gYG5ldC9jb3JlL25laWdoYm91ci5jYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdGFrZSBhIGNsb3NlIGxvb2sgYXQgbGluZXMgMjE5MCB0byAyMjYwIGFuZCB0aGVuIGp1bXAgdG8gbGluZXMgMjU4MCB0byAyNjYwLiBUaGUgZmlyc3QgYmxvY2sgbGlrZWx5IGRlYWxzIHdpdGggc29tZSBjcml0aWNhbCBhc3BlY3Qgb2YgbmVpZ2hib3VyIGRpc2NvdmVyeSDigJMgbWF5YmUgc29tZSBraW5kIG9mIGNhY2hlIG1hbmFnZW1lbnQsIGEgc3BlY2lmaWMgc3RhdGUgdHJhbnNpdGlvbiwgb3IgcGVyaGFwcyB0aGUgaGFuZGxpbmcgb2YgYSBwYXJ0aWN1bGFyIHByb2JlIG1lY2hhbmlzbS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBjb2RlIGlzIGhhbmRsaW5nIHRoZXNlIGV2ZW50cy4gVGhlbiBJJiMzOTtsbCBjaGVjayB0aGUgc2Vjb25kIGJsb2NrIGFzIGl0JiMzOTtzIGxpa2VseSBwYXJ0IG9mIHRoZSBzYW1lIGZ1bmN0aW9uLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgcGFydCBwcm9iYWJseSBoYW5kbGVzIGEgZGlmZmVyZW50IGFzcGVjdCBvZiB0aGlzIHByb2Nlc3Mgc3VjaCBhcyBhIHJldHJ5LCBvciB0aW1lb3V0LiBQZXJoYXBzIGl0JiMzOTtzIGV2ZW4gcmVsYXRlZCB0byBoYW5kbGluZyBkaWZmZXJlbnQgYWRkcmVzcyBmYW1pbGllcyBvciBwcm90b2NvbCBpbnRlcmFjdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGlmIG15IGh5cG90aGVzZXMgYWJvdXQgdGhlc2Ugc2VjdGlvbnMgYXJlIG9uIHRhcmdldC4gSSYjMzk7bSBjdXJpb3VzIHRvIHNlZSB3aGF0IG51YW5jZXMgYXJlIGNvbnRhaW5lZCBpbiB0aGlzIGNvZGUuIFRpbWUgdG8gZGlnIGluIGFuZCBtYWtlIHN1cmUgdGhpcyBpcyB3aGF0IEkgYmVsaWV2ZSBpdCBpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDI6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9uZWlnaGJvdXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjU4MDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjI1ODE6XHRcdH1cbjI1ODI6XHRcbjI1ODM6XHRcdHJldHVybiAwO1xuMjU4NDpcdH1cbjI1ODU6XHRcbjI1ODY6XHRzdGF0aWMgaW50IG5laWdodGJsX2R1bXBfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4yNTg3Olx0e1xuMjU4ODpcdFx0Y29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGggPSBjYi1cdTAwM2VubGg7XG4yNTg5Olx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spO1xuMjU5MDpcdFx0aW50IGRlZmF1bHRfc2tpcCA9IGNiLVx1MDAzZWFyZ3NbMl07XG4yNTkxOlx0XHRpbnQgbmVpZ2hfc2tpcCA9IGNiLVx1MDAzZWFyZ3NbMV07XG4yNTkyOlx0XHRpbnQgZmFtaWx5LCB0aWR4LCBuaWR4ID0gMDtcbjI1OTM6XHRcdGludCB0Ymxfc2tpcCA9IGNiLVx1MDAzZWFyZ3NbMF07XG4yNTk0Olx0XHRzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibDtcbjI1OTU6XHRcbjI1OTY6XHRcdGlmIChjYi1cdTAwM2VzdHJpY3RfY2hlY2spIHtcbjI1OTc6XHRcdFx0aW50IGVyciA9IG5laWdodGJsX3ZhbGlkX2R1bXBfaW5mbyhubGgsIGNiLVx1MDAzZWV4dGFjayk7XG4yNTk4Olx0XG4yNTk5Olx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4yNjAwOlx0XHRcdFx0cmV0dXJuIGVycjtcbjI2MDE6XHRcdH1cbjI2MDI6XHRcbjI2MDM6XHRcdGZhbWlseSA9ICgoc3RydWN0IHJ0Z2VubXNnICopbmxtc2dfZGF0YShubGgpKS1cdTAwM2VydGdlbl9mYW1pbHk7XG4yNjA0Olx0XG4yNjA1Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4yNjA2Olx0XG4yNjA3Olx0XHRmb3IgKHRpZHggPSAwOyB0aWR4IFx1MDAzYyBORUlHSF9OUl9UQUJMRVM7IHRpZHgmIzQzOyYjNDM7KSB7XG4yNjA4Olx0XHRcdHN0cnVjdCBuZWlnaF9wYXJtcyAqcDtcbjI2MDk6XHRcbjI2MTA6XHRcdFx0dGJsID0gcmN1X2RlcmVmZXJlbmNlKG5laWdoX3RhYmxlc1t0aWR4XSk7XG4yNjExOlx0XHRcdGlmICghdGJsKVxuMjYxMjpcdFx0XHRcdGNvbnRpbnVlO1xuMjYxMzpcdFxuMjYxNDpcdFx0XHRpZiAodGlkeCBcdTAwM2MgdGJsX3NraXAgfHwgKGZhbWlseSBcdTAwMjZcdTAwMjYgdGJsLVx1MDAzZWZhbWlseSAhPSBmYW1pbHkpKVxuMjYxNTpcdFx0XHRcdGNvbnRpbnVlO1xuMjYxNjpcdFxuMjYxNzpcdFx0XHRpZiAoIWRlZmF1bHRfc2tpcCBcdTAwMjZcdTAwMjZcbjI2MTg6XHRcdFx0ICAgIG5laWdodGJsX2ZpbGxfaW5mbyhza2IsIHRibCwgTkVUTElOS19DQihjYi1cdTAwM2Vza2IpLnBvcnRpZCxcbjI2MTk6XHRcdFx0XHRcdCAgICAgICBubGgtXHUwMDNlbmxtc2dfc2VxLCBSVE1fTkVXTkVJR0hUQkwsXG4yNjIwOlx0XHRcdFx0XHQgICAgICAgTkxNX0ZfTVVMVEkpIFx1MDAzYyAwKVxuMjYyMTpcdFx0XHRcdGJyZWFrO1xuMjYyMjpcdFxuMjYyMzpcdFx0XHRkZWZhdWx0X3NraXAgPSAxO1xuMjYyNDpcdFxuMjYyNTpcdFx0XHRwID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZ0YmwtXHUwMDNlcGFybXNfbGlzdCwgc3RydWN0IG5laWdoX3Bhcm1zLCBsaXN0KTtcbjI2MjY6XHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yY3UocCwgXHUwMDI2dGJsLVx1MDAzZXBhcm1zX2xpc3QsIGxpc3QpIHtcbjI2Mjc6XHRcdFx0XHRpZiAoIW5ldF9lcShuZWlnaF9wYXJtc19uZXQocCksIG5ldCkpXG4yNjI4Olx0XHRcdFx0XHRjb250aW51ZTtcbjI2Mjk6XHRcbjI2MzA6XHRcdFx0XHRpZiAocC1cdTAwM2VkZXYgPT0gYmxhY2tob2xlX25ldGRldilcbjI2MzE6XHRcdFx0XHRcdGNvbnRpbnVlO1xuMjYzMjpcdFxuMjYzMzpcdFx0XHRcdGlmIChuaWR4IFx1MDAzYyBuZWlnaF9za2lwKVxuMjYzNDpcdFx0XHRcdFx0Z290byBuZXh0O1xuMjYzNTpcdFxuMjYzNjpcdFx0XHRcdGlmIChuZWlnaHRibF9maWxsX3BhcmFtX2luZm8oc2tiLCB0YmwsIHAsXG4yNjM3Olx0XHRcdFx0XHRcdFx0ICAgICBORVRMSU5LX0NCKGNiLVx1MDAzZXNrYikucG9ydGlkLFxuMjYzODpcdFx0XHRcdFx0XHRcdCAgICAgbmxoLVx1MDAzZW5sbXNnX3NlcSxcbjI2Mzk6XHRcdFx0XHRcdFx0XHQgICAgIFJUTV9ORVdORUlHSFRCTCxcbjI2NDA6XHRcdFx0XHRcdFx0XHQgICAgIE5MTV9GX01VTFRJKSBcdTAwM2MgMClcbjI2NDE6XHRcdFx0XHRcdGdvdG8gb3V0O1xuMjY0MjpcdFx0XHRuZXh0OlxuMjY0MzpcdFx0XHRcdG5pZHgmIzQzOyYjNDM7O1xuMjY0NDpcdFx0XHR9XG4yNjQ1Olx0XG4yNjQ2Olx0XHRcdG5laWdoX3NraXAgPSAwO1xuMjY0NzpcdFx0XHRuaWR4ID0gMDtcbjI2NDg6XHRcdFx0ZGVmYXVsdF9za2lwID0gMDtcbjI2NDk6XHRcdH1cbjI2NTA6XHRvdXQ6XG4yNjUxOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjI2NTI6XHRcbjI2NTM6XHRcdGNiLVx1MDAzZWFyZ3NbMF0gPSB0aWR4O1xuMjY1NDpcdFx0Y2ItXHUwMDNlYXJnc1sxXSA9IG5pZHg7XG4yNjU1Olx0XHRjYi1cdTAwM2VhcmdzWzJdID0gZGVmYXVsdF9za2lwO1xuMjY1NjpcdFxuMjY1NzpcdFx0cmV0dXJuIHNrYi1cdTAwM2VsZW47XG4yNjU4Olx0fVxuMjY1OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzYxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGFuZCB0aGlzIGlzIHBhcnQgb2YgYSBkZWJ1Z2dpbmcvYW5hbHlzaXMgcHJvY2VzczoKCioqRGl2aW5nIERlZXBlciBpbnRvIHRoZSBKaWZmaWVzIENhbGN1bGF0aW9uKioKCk9rYXksIEkmIzM5O3ZlIGdvdCBhIGh1bmNoIGFib3V0IHRoZSBpc3N1ZSwgYW5kIEkgdGhpbmsgSSBrbm93IHdoZXJlIHRvIGZvY3VzIG15IGF0dGVudGlvbi4gSXQmIzM5O3MgdGltZSB0byBkb3VibGUtY2hlY2sgdGhlIGBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVgIGZ1bmN0aW9uLiBJIHJlbWVtYmVyIHRoaXMgb25lIGRlYWxpbmcgd2l0aCBob3cgd2UgY29udmVydCB0aGUgbWlsbGlzZWNvbmRzIHZhbHVlIHRvIGppZmZpZXMgYW5kIGVuc3VyaW5nIHRoZSBvdXRjb21lIGlzIGFsd2F5cyBwb3NpdGl2ZS4gQSBwb3RlbnRpYWwgbmVnYXRpdmUgamlmZmllcyB2YWx1ZSBpcyBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBjYXVzZWQgYnkgYW4gaW50ZWdlciBvdmVyZmxvdy4gSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgb3ZlcmZsb3cgaXNzdWUgaXNuJiMzOTt0IHdoZXJlIHRoaW5ncyBhcmUgZmFsbGluZyBvdmVyLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBsb2dpYyBhbmQgc2VlIGlmIGFueXRoaW5nIGp1bXBzIG91dC4gSSB3aWxsIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXRzIGhhbmRsaW5nIG9mIHBvdGVudGlhbCBuZWdhdGl2ZSB2YWx1ZXMgaXMgc291bmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmVpZ2hib3VyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNjcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM2NzA6XHRzdGF0aWMgaW50IG5laWdoX3Byb2NfZG9pbnR2ZWNfemVyb19pbnRtYXgoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqY3RsLCBpbnQgd3JpdGUsXG4zNjcxOlx0XHRcdFx0XHRcdCAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLFxuMzY3MjpcdFx0XHRcdFx0XHQgICBsb2ZmX3QgKnBwb3MpXG4zNjczOlx0e1xuMzY3NDpcdFx0c3RydWN0IGN0bF90YWJsZSB0bXAgPSAqY3RsO1xuMzY3NTpcdFx0aW50IHJldDtcbjM2NzY6XHRcbjM2Nzc6XHRcdHRtcC5leHRyYTEgPSBTWVNDVExfWkVSTztcbjM2Nzg6XHRcdHRtcC5leHRyYTIgPSBTWVNDVExfSU5UX01BWDtcbjM2Nzk6XHRcbjM2ODA6XHRcdHJldCA9IHByb2NfZG9pbnR2ZWNfbWlubWF4KFx1MDAyNnRtcCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7XG4zNjgxOlx0XHRuZWlnaF9wcm9jX3VwZGF0ZShjdGwsIHdyaXRlKTtcbjM2ODI6XHRcdHJldHVybiByZXQ7XG4zNjgzOlx0fVxuMzY4NDpcdFxuMzY4NTpcdHN0YXRpYyBpbnQgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLFxuMzY4NjpcdFx0XHRcdFx0XHRcdCAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXG4zNjg3Olx0e1xuMzY4ODpcdFx0c3RydWN0IGN0bF90YWJsZSB0bXAgPSAqY3RsO1xuMzY4OTpcdFx0aW50IHJldCwgbWluLCBtYXg7XG4zNjkwOlx0XG4zNjkxOlx0XHRtaW4gPSBtc2Vjc190b19qaWZmaWVzKDEpO1xuMzY5MjpcdFx0bWF4ID0gbXNlY3NfdG9famlmZmllcyhOVEJMX1BBUk1fTVNfTUFYKTtcbjM2OTM6XHRcbjM2OTQ6XHRcdHRtcC5leHRyYTEgPSBcdTAwMjZtaW47XG4zNjk1Olx0XHR0bXAuZXh0cmEyID0gXHUwMDI2bWF4O1xuMzY5NjpcdFxuMzY5NzpcdFx0cmV0ID0gcHJvY19kb2ludHZlY19tc19qaWZmaWVzX21pbm1heChcdTAwMjZ0bXAsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpO1xuMzY5ODpcdFx0bmVpZ2hfcHJvY191cGRhdGUoY3RsLCB3cml0ZSk7XG4zNjk5Olx0XHRyZXR1cm4gcmV0O1xuMzcwMDpcdH1cbjM3MDE6XHRcbjM3MDI6XHRpbnQgbmVpZ2hfcHJvY19kb2ludHZlYyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSwgdm9pZCAqYnVmZmVyLFxuMzcwMzpcdFx0XHRcdHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKVxuMzcwNDpcdHtcbjM3MDU6XHRcdGludCByZXQgPSBwcm9jX2RvaW50dmVjKGN0bCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7XG4zNzA2Olx0XG4zNzA3Olx0XHRuZWlnaF9wcm9jX3VwZGF0ZShjdGwsIHdyaXRlKTtcbjM3MDg6XHRcdHJldHVybiByZXQ7XG4zNzA5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjUwCgkJCQkJCQlvdXRwdXQ6IDI0OQoJCQkJCQkJdGhvdWdodHM6IDkzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBbmFseXNpcyBvZiBOZXRsaW5rIE5laWdoYm9yIFRhYmxlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCBwcmltYXJpbHkgdG91Y2hlcyBvbiB0aHJlZSBhcmVhcyB3aXRoaW4gdGhlIG5laWdoYm9yIHRhYmxlIG5ldGxpbmsgaW50ZXJhY3Rpb246IGVuZm9yY2luZyBhIG1heGltdW0gcmFuZ2Ugb24gYE5EVFBBX0lOVEVSVkFMX1BST0JFX1RJTUVfTVNgLCBmaXhpbmcgYSBkdW1waW5nIHJlc3VtcHRpb24gYnVnLCBhbmQgc2V0dGluZyBhIG1heGltdW0gdmFsdWUgZm9yIGEgc3lzY3RsIHZhcmlhYmxlLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGFueSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSB2dWxuZXJhYmlsaXRpZXMgcmVsZXZhbnQgdG8gS01TQU4uCgpGaXJzdCwgdGhlIGlucHV0IHZhbGlkYXRpb246IGBubF9udGJsX3Bhcm1fcG9saWN5YCBhZGRzIGEgc2FuaXR5IGNoZWNrIG9uIGEgbmV0bGluayBhdHRyaWJ1dGUuIFRoaXMgaXMgZ29vZDsgaXQmIzM5O3MgcHJldmVudGluZyB1c2VyLXNwYWNlIGZyb20gc2VuZGluZyBhcmJpdHJhcmlseSBsYXJnZSB2YWx1ZXMuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdGhpcyBpcyBqdXN0IGEgcmFuZ2UgcmVzdHJpY3Rpb24g4oCTIHdlbGwtZGVmaW5lZCwgYW5kIHRoZSB2YWxpZGF0aW9uIGl0c2VsZiBzaG91bGRuJiMzOTt0IHRyaWdnZXIgYW55IEtNU0FOIGNvbmNlcm5zLiBJdCYjMzk7cyBzaW1wbHkgYm91bmRpbmcgdGhlIHZhbHVlIHdpdGhpbiBhY2NlcHRhYmxlIGxpbWl0cyBkZWZpbmVkIGJ5IGBOVEJMX1BBUk1fTVNfTUFYYC4KCk5leHQsIHRoZSBuZXRsaW5rIGR1bXAgZml4IChgbmVpZ2h0YmxfZHVtcF9pbmZvYCkuIFRoaXMgaXMgbW9yZSBpbnZvbHZlZC4gVGhlIGNvcmUgaXNzdWUgd2FzIHdpdGggcmVzdGFydGluZyBkdW1wcyBjb3JyZWN0bHksIHNwZWNpZmljYWxseSByZWdhcmRpbmcgdGhlIGRlZmF1bHQgdGFibGUgcGFyYW1ldGVycy4gVGhlIHBhdGNoIHN0b3JlcyBhICYjMzQ7c2tpcCYjMzQ7IGZsYWcgdG8gZW5zdXJlIHRob3NlIHBhcmFtZXRlcnMgYXJlbiYjMzk7dCByZXBlYXRlZGx5IGR1bXBlZCBhY3Jvc3MgaXRlcmF0aW9ucy4gSSYjMzk7dmUgZ290IHRvIGVuc3VyZSB0aGUgbG9naWMgZGVhbGluZyB3aXRoIHRoYXQgZmxhZyBpcyBjbGVhbi4gTHVja2lseSwgaXQmIzM5O3MgbGV2ZXJhZ2luZyBgY2ItJmd0O2FyZ3NgLCB3aGljaCBpcyBpbml0aWFsaXplZCBieSB0aGUgbmV0bGluayBkdW1wIHN1YnN5c3RlbS4gVGhhdCYjMzk7cyByZWFzc3VyaW5nLiBJIHNlZSB0aHJlZSB2YXJpYWJsZXMgZnJvbSB0aGUgYGNiLSZndDthcmdzYCBhcnJheSB0aGF0IGFyZSB1c2VkOiBgZGVmYXVsdF9za2lwYCwgYG5laWdoX3NraXBgLCBhbmQgYHRibF9za2lwYC4gU2luY2UgdGhpcyBpcyBhIHN0YW5kYXJkIG5ldGxpbmsgZmxvdywgYW5kIHRoZSB2YXJpYWJsZXMgYXJlIGFsbCBpbml0aWFsaXplZCB0byB6ZXJvIGF0IHRoZSBzdGFydCBvZiB0aGUgZHVtcCwgdGhlbiB0aGUgZHVtcCBzeXN0ZW0gbWFuYWdlcyB0aGUgc3RhdGUgYW5kIEkgZG9uJiMzOTt0IHNlZSBhbnkgdW5pbml0aWFsaXplZCByZWFkIG9yIGxlYWthZ2UgaXNzdWVzLiBBbHNvLCBJJiMzOTttIG5vdGluZyB0aGF0IHRoZSBkdW1wIHNraXBzIGBibGFja2hvbGVfbmV0ZGV2YCBub3cuIFRoYXQmIzM5O3MgYSBsb2dpYyBjaGFuZ2UsIGJ1dCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWNjZXNzIGNvbmNlcm5zLiBJIHNob3VsZCBiZSBhd2FyZSBvZiB0aGlzIGNoYW5nZSwgYnV0IGl0JiMzOTtzIG5vdCBhIEtNU0FOIGNvbmNlcm4uCgpUaGlyZCwgYG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZWAuIFRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgc3lzY3RsIHNldHRpbmcuIFRoZSBwYXRjaCBzZXRzIGEgYG1heGAgdmFsdWUgZm9yIHRoZSBzeXNjdGwsIGFuZCB0aGVuIHBhc3NlcyBib3RoIGBtaW5gIGFuZCBgbWF4YCAod2hpY2ggYXJlIGJvdGggZXhwbGljaXRseSBpbml0aWFsaXplZCkgdG8gdGhlIHN0YW5kYXJkIGBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4YCBmdW5jdGlvbi4gSXQgc2VlbXMgdGhlcmUgaXMgbm8gS01TQU4gaXNzdWUgaGVyZS4KCk5vdywgbGV0JiMzOTtzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgcG90ZW50aWFsIEtNU0FOIGNvbmNlcm5zLiBJJiMzOTttIGZvY3VzaW5nIG9uIGZvdXIgY29yZSBhcmVhczogMSkgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlOyAyKSBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlczsgMykgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbjsgYW5kIDQpIGJvdW5kcyBjaGVja3MgcG90ZW50aWFsbHkgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpMb29raW5nIGF0IHRoZSBjb2RlLCBpdCYjMzk7cyBhbGwgYmFzZWQgb24gdGhlIGNvbW1vbiBuZXRsaW5rIHN0cnVjdHVyZSBvZiB0aGUgbmV0bGluayBwcm90b2NvbCBhbmQgYG5sYV9wdXRfKmAgZnVuY3Rpb25zLiBXZSYjMzk7cmUgbm90IGNvcHlpbmcgYW55IG5ldyBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UuIEl0JiMzOTtzIGFsbCBhYm91dCBkdW1wIGZsb3cgbG9naWMgYW5kIHZhbGlkYXRpb24gcmFuZ2VzIGluIG5ldGxpbmsgYXR0cmlidXRlcy4gTm8gZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBjb25zdHJ1Y3RlZCwgZmlsbGVkIHdpdGggbmV3IHZhbHVlcywgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIEZ1cnRoZXJtb3JlLCBhbGwgdGhlIGNvbnRyb2wgZmxvdyB2YXJpYWJsZXMgbGlrZSBgY2ItJmd0O2FyZ3NgIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZC4gV2UgYXJlIG5vdCBtb2RpZnlpbmcgYW55IGRhdGEgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlciBzcGFjZS4gQW5kIGZpbmFsbHksIHN0YW5kYXJkIG5ldGxpbmsgaXRlcmF0aW9uIGFuZCBzeXNjdGwgYm91bmRzIGFyZSBoYW5kbGVkLCBzbyB0aGVyZSBhcmUgbm8gYnVncy4KCk15IGNvbmNsdXNpb24gaXM6ICoqTmVlZHNLTVNBTiA9IGZhbHNlKiouIFRoZSBwYXRjaCBtb2RpZmllcyBleGlzdGluZyBuZXRsaW5rIGludGVyYWN0aW9ucywgYnV0IGl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGFyZWFzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcywgY29udHJvbCBmbG93IGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLCB1bnNhZmUgZGF0YSBzdHJ1Y3R1cmUgbWFuaXB1bGF0aW9uLCBvciBhbnkgbmV3IGJvdW5kcy1jaGVjayByZWxhdGVkIGlzc3Vlcy4gVGhpcyBpcyBwdXJlbHkgYSBidWcgZml4IGFuZCBpbXByb3ZlbWVudCB0byBhbiBleGlzdGluZywgc2FmZSBjb2RlIHBhdGgsIGZyb20gYSBLTVNBTiBwZXJzcGVjdGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDI6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGlucHV0IHZhbGlkYXRpb24gYW5kIG5ldGxpbmsgZHVtcCByZXN1bXB0aW9uIGxvZ2ljIGluIG5ldC9jb3JlL25laWdoYm91ci5jOlxuMS4gSXQgYWRkcyBhbiB1cHBlciBib3VuZCB2YWxpZGF0aW9uIChgTlRCTF9QQVJNX01TX01BWGApIGZvciBgTkRUUEFfSU5URVJWQUxfUFJPQkVfVElNRV9NU2AgdmlhIG5ldGxpbmsgcG9saWN5IGFuZCBzeXNjdGwgKGBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVgKS5cbjIuIEl0IGZpeGVzIHRhYmxlIGFuZCBwYXJhbWV0ZXIgZHVtcGluZyBpbiBgbmVpZ2h0YmxfZHVtcF9pbmZvYCBhY3Jvc3MgbXVsdGktcGFydCBuZXRsaW5rIGR1bXBzIGJ5IHRyYWNraW5nIGBkZWZhdWx0X3NraXBgIGluIGBjYi1cdTAwM2VhcmdzWzJdYCwgcHJvcGVybHkgY29udGludWluZyBsaXN0IGl0ZXJhdGlvbiwgYW5kIHNraXBwaW5nIGBibGFja2hvbGVfbmV0ZGV2YC5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgbm9yIGRvIHRoZXkgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmcgb3IgYnVmZmVyIGNvbnRlbnRzIHRvIHVzZXJzcGFjZS4gQWxsIHZhcmlhYmxlcyAoYG1pbmAsIGBtYXhgLCBgZGVmYXVsdF9za2lwYCwgYGNiLVx1MDAzZWFyZ3NgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQuIEFueSBwb3RlbnRpYWwgbG9naWMgZXJyb3JzIG9yIG91dC1vZi1ib3VuZHMgaXNzdWVzIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vZGVidWdnaW5nIGJ1aWxkcy4gSGVuY2UsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGlucHV0IHZhbGlkYXRpb24gYW5kIG5ldGxpbmsgZHVtcCByZXN1bXB0aW9uIGxvZ2ljIGluIG5ldC9jb3JlL25laWdoYm91ci5jOlxuMS4gSXQgYWRkcyBhbiB1cHBlciBib3VuZCB2YWxpZGF0aW9uIChgTlRCTF9QQVJNX01TX01BWGApIGZvciBgTkRUUEFfSU5URVJWQUxfUFJPQkVfVElNRV9NU2AgdmlhIG5ldGxpbmsgcG9saWN5IGFuZCBzeXNjdGwgKGBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVgKS5cbjIuIEl0IGZpeGVzIHRhYmxlIGFuZCBwYXJhbWV0ZXIgZHVtcGluZyBpbiBgbmVpZ2h0YmxfZHVtcF9pbmZvYCBhY3Jvc3MgbXVsdGktcGFydCBuZXRsaW5rIGR1bXBzIGJ5IHRyYWNraW5nIGBkZWZhdWx0X3NraXBgIGluIGBjYi1cdTAwM2VhcmdzWzJdYCwgcHJvcGVybHkgY29udGludWluZyBsaXN0IGl0ZXJhdGlvbiwgYW5kIHNraXBwaW5nIGBibGFja2hvbGVfbmV0ZGV2YC5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgbm9yIGRvIHRoZXkgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmcgb3IgYnVmZmVyIGNvbnRlbnRzIHRvIHVzZXJzcGFjZS4gQWxsIHZhcmlhYmxlcyAoYG1pbmAsIGBtYXhgLCBgZGVmYXVsdF9za2lwYCwgYGNiLVx1MDAzZWFyZ3NgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQuIEFueSBwb3RlbnRpYWwgbG9naWMgZXJyb3JzIG9yIG91dC1vZi1ib3VuZHMgaXNzdWVzIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vZGVidWdnaW5nIGJ1aWxkcy4gSGVuY2UsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjoxMzowNC4zNzYzMzE0OTJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTYyODUzMjI5MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmVpZ2h0YmxfZHVtcF9pbmZvXCIsXG4gICAgXCJuZWlnaHRibF9zZXRcIixcbiAgICBcIm5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGlucHV0IHZhbGlkYXRpb24gYW5kIG5ldGxpbmsgZHVtcCByZXN1bXB0aW9uIGxvZ2ljIGluIG5ldC9jb3JlL25laWdoYm91ci5jOlxcbjEuIEl0IGFkZHMgYW4gdXBwZXIgYm91bmQgdmFsaWRhdGlvbiAoYE5UQkxfUEFSTV9NU19NQVhgKSBmb3IgYE5EVFBBX0lOVEVSVkFMX1BST0JFX1RJTUVfTVNgIHZpYSBuZXRsaW5rIHBvbGljeSBhbmQgc3lzY3RsIChgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlYCkuXFxuMi4gSXQgZml4ZXMgdGFibGUgYW5kIHBhcmFtZXRlciBkdW1waW5nIGluIGBuZWlnaHRibF9kdW1wX2luZm9gIGFjcm9zcyBtdWx0aS1wYXJ0IG5ldGxpbmsgZHVtcHMgYnkgdHJhY2tpbmcgYGRlZmF1bHRfc2tpcGAgaW4gYGNiLVxcdTAwM2VhcmdzWzJdYCwgcHJvcGVybHkgY29udGludWluZyBsaXN0IGl0ZXJhdGlvbiwgYW5kIHNraXBwaW5nIGBibGFja2hvbGVfbmV0ZGV2YC5cXG5cXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgYWxsb2NhdGUgb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBub3IgZG8gdGhleSBleHBvc2UgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZyBvciBidWZmZXIgY29udGVudHMgdG8gdXNlcnNwYWNlLiBBbGwgdmFyaWFibGVzIChgbWluYCwgYG1heGAsIGBkZWZhdWx0X3NraXBgLCBgY2ItXFx1MDAzZWFyZ3NgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQuIEFueSBwb3RlbnRpYWwgbG9naWMgZXJyb3JzIG9yIG91dC1vZi1ib3VuZHMgaXNzdWVzIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vZGVidWdnaW5nIGJ1aWxkcy4gSGVuY2UsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBuZWlnaGJvdXIgdGFibGUgbWFuYWdlbWVudCBpbiBuZXQvY29yZS9uZWlnaGJvdXIuYy4gU3BlY2lmaWNhbGx5LCBpdCBmaXhlcyBuZXRsaW5rIGR1bXAgcGFnaW5hdGlvbiBhbmQgZmlsdGVyaW5nIChoYW5kbGluZyBibGFja2hvbGUgbmV0ZGV2KSBpbiBuZWlnaHRibF9kdW1wX2luZm8oKSwgYWRkcyB1cHBlciBib3VuZCByYW5nZSB2YWxpZGF0aW9uIGZvciBpbnRlcnZhbF9wcm9iZV90aW1lX21zIGluIG5sX250YmxfcGFybV9wb2xpY3kgKHVzZWQgaW4gbmVpZ2h0Ymxfc2V0KCkpLCBhbmQgc2V0cyBhbiB1cHBlciBib3VuZCBvbiBzeXNjdGwgd3JpdGVzIHZpYSBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmUoKS4gVGhlc2UgcGF0aHMgYXJlIGRpcmVjdGx5IHJlYWNoYWJsZSB2aWEgcnRuZXRsaW5rIChSVE1fR0VUTkVJR0hUQkwsIFJUTV9TRVRORUlHSFRCTCkgYW5kIHByb2NmcyBzeXNjdGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjEzOjA0LjM3NjMzNzc1MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg0NDc3MTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNmJmYTRiYTY3NTY2MzBmMDc5ZmNiNWJkOWJiNDYxM2FhYjI4NTI2YlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCA4IDAyOjEzOjAzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL25laWdoYm91ci5jIGIvbmV0L2NvcmUvbmVpZ2hib3VyLmNcXG5pbmRleCAxMzQ5YzBlZWRiNjQyLi4xNWVlZGFlZjY1NzgxIDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL25laWdoYm91ci5jXFxuKysrIGIvbmV0L2NvcmUvbmVpZ2hib3VyLmNcXG5AQCAtMjM1OSw2ICsyMzU5LDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBubF9uZWlnaHRibF9wb2xpY3lbTkRUQV9NQVgrMV0gPSB7XFxuIFxcdFtORFRBX1BBUk1TXVxcdFxcdD0geyAudHlwZSA9IE5MQV9ORVNURUQgfSxcXG4gfTtcXG4gXFxuKyNkZWZpbmUgTlRCTF9QQVJNX01TX01BWFxcdCgyNCAqIDYwICogNjAgKiBNU0VDX1BFUl9TRUMpXFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldGxpbmtfcmFuZ2VfdmFsaWRhdGlvbiBubF9udGJsX3Bhcm1fbXNfcmFuZ2UgPSB7XFxuK1xcdC5taW4gPSAxLFxcbitcXHQubWF4ID0gTlRCTF9QQVJNX01TX01BWCxcXG4rfTtcXG4rXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBubF9udGJsX3Bhcm1fcG9saWN5W05EVFBBX01BWCsxXSA9IHtcXG4gXFx0W05EVFBBX0lGSU5ERVhdXFx0XFx0XFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxcbiBcXHRbTkRUUEFfUVVFVUVfTEVOXVxcdFxcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcXG5AQCAtMjM3NSw3ICsyMzgyLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5sX250YmxfcGFybV9wb2xpY3lbTkRUUEFfTUFYKzFdID0ge1xcbiBcXHRbTkRUUEFfQU5ZQ0FTVF9ERUxBWV1cXHRcXHQ9IHsgLnR5cGUgPSBOTEFfVTY0IH0sXFxuIFxcdFtORFRQQV9QUk9YWV9ERUxBWV1cXHRcXHQ9IHsgLnR5cGUgPSBOTEFfVTY0IH0sXFxuIFxcdFtORFRQQV9MT0NLVElNRV1cXHRcXHQ9IHsgLnR5cGUgPSBOTEFfVTY0IH0sXFxuLVxcdFtORFRQQV9JTlRFUlZBTF9QUk9CRV9USU1FX01TXVxcdD0geyAudHlwZSA9IE5MQV9VNjQsIC5taW4gPSAxIH0sXFxuK1xcdFtORFRQQV9JTlRFUlZBTF9QUk9CRV9USU1FX01TXVxcdD0gTkxBX1BPTElDWV9GVUxMX1JBTkdFKE5MQV9VNjQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZubF9udGJsX3Bhcm1fbXNfcmFuZ2UpLFxcbiB9O1xcbiBcXG4gc3RhdGljIGludCBuZWlnaHRibF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuQEAgLTI1NzksOSArMjU4NywxMCBAQCBzdGF0aWMgaW50IG5laWdodGJsX2R1bXBfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGggPSBjYi1cXHUwMDNlbmxoO1xcbiBcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXFx1MDAzZXNrKTtcXG4rXFx0aW50IGRlZmF1bHRfc2tpcCA9IGNiLVxcdTAwM2VhcmdzWzJdO1xcbitcXHRpbnQgbmVpZ2hfc2tpcCA9IGNiLVxcdTAwM2VhcmdzWzFdO1xcbiBcXHRpbnQgZmFtaWx5LCB0aWR4LCBuaWR4ID0gMDtcXG4gXFx0aW50IHRibF9za2lwID0gY2ItXFx1MDAzZWFyZ3NbMF07XFxuLVxcdGludCBuZWlnaF9za2lwID0gY2ItXFx1MDAzZWFyZ3NbMV07XFxuIFxcdHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsO1xcbiBcXG4gXFx0aWYgKGNiLVxcdTAwM2VzdHJpY3RfY2hlY2spIHtcXG5AQCAtMjYwNSwxNyArMjYxNCwyMiBAQCBzdGF0aWMgaW50IG5laWdodGJsX2R1bXBfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuIFxcdFxcdGlmICh0aWR4IFxcdTAwM2MgdGJsX3NraXAgfHwgKGZhbWlseSBcXHUwMDI2XFx1MDAyNiB0YmwtXFx1MDAzZWZhbWlseSAhPSBmYW1pbHkpKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdGlmIChuZWlnaHRibF9maWxsX2luZm8oc2tiLCB0YmwsIE5FVExJTktfQ0IoY2ItXFx1MDAzZXNrYikucG9ydGlkLFxcbitcXHRcXHRpZiAoIWRlZmF1bHRfc2tpcCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgbmVpZ2h0YmxfZmlsbF9pbmZvKHNrYiwgdGJsLCBORVRMSU5LX0NCKGNiLVxcdTAwM2Vza2IpLnBvcnRpZCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIG5saC1cXHUwMDNlbmxtc2dfc2VxLCBSVE1fTkVXTkVJR0hUQkwsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBOTE1fRl9NVUxUSSkgXFx1MDAzYyAwKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFxuLVxcdFxcdG5pZHggPSAwO1xcbi1cXHRcXHRwID0gbGlzdF9uZXh0X2VudHJ5KFxcdTAwMjZ0YmwtXFx1MDAzZXBhcm1zLCBsaXN0KTtcXG4tXFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tX3JjdShwLCBcXHUwMDI2dGJsLVxcdTAwM2VwYXJtc19saXN0LCBsaXN0KSB7XFxuK1xcdFxcdGRlZmF1bHRfc2tpcCA9IDE7XFxuK1xcbitcXHRcXHRwID0gbGlzdF9maXJzdF9lbnRyeShcXHUwMDI2dGJsLVxcdTAwM2VwYXJtc19saXN0LCBzdHJ1Y3QgbmVpZ2hfcGFybXMsIGxpc3QpO1xcbitcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShwLCBcXHUwMDI2dGJsLVxcdTAwM2VwYXJtc19saXN0LCBsaXN0KSB7XFxuIFxcdFxcdFxcdGlmICghbmV0X2VxKG5laWdoX3Bhcm1zX25ldChwKSwgbmV0KSlcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcbitcXHRcXHRcXHRpZiAocC1cXHUwMDNlZGV2ID09IGJsYWNraG9sZV9uZXRkZXYpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4gXFx0XFx0XFx0aWYgKG5pZHggXFx1MDAzYyBuZWlnaF9za2lwKVxcbiBcXHRcXHRcXHRcXHRnb3RvIG5leHQ7XFxuIFxcbkBAIC0yNjMwLDEyICsyNjQ0LDE1IEBAIHN0YXRpYyBpbnQgbmVpZ2h0YmxfZHVtcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0bmVpZ2hfc2tpcCA9IDA7XFxuK1xcdFxcdG5pZHggPSAwO1xcbitcXHRcXHRkZWZhdWx0X3NraXAgPSAwO1xcbiBcXHR9XFxuIG91dDpcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcbiBcXHRjYi1cXHUwMDNlYXJnc1swXSA9IHRpZHg7XFxuIFxcdGNiLVxcdTAwM2VhcmdzWzFdID0gbmlkeDtcXG4rXFx0Y2ItXFx1MDAzZWFyZ3NbMl0gPSBkZWZhdWx0X3NraXA7XFxuIFxcbiBcXHRyZXR1cm4gc2tiLVxcdTAwM2VsZW47XFxuIH1cXG5AQCAtMzY2OSwxMiArMzY4NiwxMyBAQCBzdGF0aWMgaW50IG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZShjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXFxuIHtcXG4gXFx0c3RydWN0IGN0bF90YWJsZSB0bXAgPSAqY3RsO1xcbi1cXHRpbnQgcmV0O1xcbitcXHRpbnQgcmV0LCBtaW4sIG1heDtcXG4gXFxuLVxcdGludCBtaW4gPSBtc2Vjc190b19qaWZmaWVzKDEpO1xcbitcXHRtaW4gPSBtc2Vjc190b19qaWZmaWVzKDEpO1xcbitcXHRtYXggPSBtc2Vjc190b19qaWZmaWVzKE5UQkxfUEFSTV9NU19NQVgpO1xcbiBcXG4gXFx0dG1wLmV4dHJhMSA9IFxcdTAwMjZtaW47XFxuLVxcdHRtcC5leHRyYTIgPSBOVUxMO1xcbitcXHR0bXAuZXh0cmEyID0gXFx1MDAyNm1heDtcXG4gXFxuIFxcdHJldCA9IHByb2NfZG9pbnR2ZWNfbXNfamlmZmllc19taW5tYXgoXFx1MDAyNnRtcCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7XFxuIFxcdG5laWdoX3Byb2NfdXBkYXRlKGN0bCwgd3JpdGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjoxMzowNS4wNjE4NDc4NjJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjkzNzQxMTQ2NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5laWdodGJsX2R1bXBfaW5mb1wiLFxuICAgIFwibmVpZ2h0Ymxfc2V0XCIsXG4gICAgXCJuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgbmVpZ2hib3VyIHRhYmxlIG1hbmFnZW1lbnQgaW4gbmV0L2NvcmUvbmVpZ2hib3VyLmMuIFNwZWNpZmljYWxseSwgaXQgZml4ZXMgbmV0bGluayBkdW1wIHBhZ2luYXRpb24gYW5kIGZpbHRlcmluZyAoaGFuZGxpbmcgYmxhY2tob2xlIG5ldGRldikgaW4gbmVpZ2h0YmxfZHVtcF9pbmZvKCksIGFkZHMgdXBwZXIgYm91bmQgcmFuZ2UgdmFsaWRhdGlvbiBmb3IgaW50ZXJ2YWxfcHJvYmVfdGltZV9tcyBpbiBubF9udGJsX3Bhcm1fcG9saWN5ICh1c2VkIGluIG5laWdodGJsX3NldCgpKSwgYW5kIHNldHMgYW4gdXBwZXIgYm91bmQgb24gc3lzY3RsIHdyaXRlcyB2aWEgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlKCkuIFRoZXNlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgdmlhIHJ0bmV0bGluayAoUlRNX0dFVE5FSUdIVEJMLCBSVE1fU0VUTkVJR0hUQkwpIGFuZCBwcm9jZnMgc3lzY3RsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZiZmE0YmE2NzU2NjMwZjA3OWZjYjViZDliYjQ2MTNhYWIyODUyNmJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDAyOjEzOjAzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmVpZ2hib3VyLmMgYi9uZXQvY29yZS9uZWlnaGJvdXIuY1xuaW5kZXggMTM0OWMwZWVkYjY0Mi4uMTVlZWRhZWY2NTc4MSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL25laWdoYm91ci5jXG4rKysgYi9uZXQvY29yZS9uZWlnaGJvdXIuY1xuQEAgLTIzNTksNiArMjM1OSwxMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmxfbmVpZ2h0YmxfcG9saWN5W05EVEFfTUFYKzFdID0ge1xuIFx0W05EVEFfUEFSTVNdXHRcdD0geyAudHlwZSA9IE5MQV9ORVNURUQgfSxcbiB9O1xuIFxuKyNkZWZpbmUgTlRCTF9QQVJNX01TX01BWFx0KDI0ICogNjAgKiA2MCAqIE1TRUNfUEVSX1NFQylcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldGxpbmtfcmFuZ2VfdmFsaWRhdGlvbiBubF9udGJsX3Bhcm1fbXNfcmFuZ2UgPSB7XG4rXHQubWluID0gMSxcbitcdC5tYXggPSBOVEJMX1BBUk1fTVNfTUFYLFxuK307XG4rXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5sX250YmxfcGFybV9wb2xpY3lbTkRUUEFfTUFYKzFdID0ge1xuIFx0W05EVFBBX0lGSU5ERVhdXHRcdFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuIFx0W05EVFBBX1FVRVVFX0xFTl1cdFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuQEAgLTIzNzUsNyArMjM4Miw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBubF9udGJsX3Bhcm1fcG9saWN5W05EVFBBX01BWCsxXSA9IHtcbiBcdFtORFRQQV9BTllDQVNUX0RFTEFZXVx0XHQ9IHsgLnR5cGUgPSBOTEFfVTY0IH0sXG4gXHRbTkRUUEFfUFJPWFlfREVMQVldXHRcdD0geyAudHlwZSA9IE5MQV9VNjQgfSxcbiBcdFtORFRQQV9MT0NLVElNRV1cdFx0PSB7IC50eXBlID0gTkxBX1U2NCB9LFxuLVx0W05EVFBBX0lOVEVSVkFMX1BST0JFX1RJTUVfTVNdXHQ9IHsgLnR5cGUgPSBOTEFfVTY0LCAubWluID0gMSB9LFxuK1x0W05EVFBBX0lOVEVSVkFMX1BST0JFX1RJTUVfTVNdXHQ9IE5MQV9QT0xJQ1lfRlVMTF9SQU5HRShOTEFfVTY0LFxuK1x0XHRcdFx0XHRcdFx0XHRcdTAwMjZubF9udGJsX3Bhcm1fbXNfcmFuZ2UpLFxuIH07XG4gXG4gc3RhdGljIGludCBuZWlnaHRibF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG5AQCAtMjU3OSw5ICsyNTg3LDEwIEBAIHN0YXRpYyBpbnQgbmVpZ2h0YmxfZHVtcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiB7XG4gXHRjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCA9IGNiLVx1MDAzZW5saDtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cdTAwM2Vzayk7XG4rXHRpbnQgZGVmYXVsdF9za2lwID0gY2ItXHUwMDNlYXJnc1syXTtcbitcdGludCBuZWlnaF9za2lwID0gY2ItXHUwMDNlYXJnc1sxXTtcbiBcdGludCBmYW1pbHksIHRpZHgsIG5pZHggPSAwO1xuIFx0aW50IHRibF9za2lwID0gY2ItXHUwMDNlYXJnc1swXTtcbi1cdGludCBuZWlnaF9za2lwID0gY2ItXHUwMDNlYXJnc1sxXTtcbiBcdHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsO1xuIFxuIFx0aWYgKGNiLVx1MDAzZXN0cmljdF9jaGVjaykge1xuQEAgLTI2MDUsMTcgKzI2MTQsMjIgQEAgc3RhdGljIGludCBuZWlnaHRibF9kdW1wX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0XHRpZiAodGlkeCBcdTAwM2MgdGJsX3NraXAgfHwgKGZhbWlseSBcdTAwMjZcdTAwMjYgdGJsLVx1MDAzZWZhbWlseSAhPSBmYW1pbHkpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRpZiAobmVpZ2h0YmxfZmlsbF9pbmZvKHNrYiwgdGJsLCBORVRMSU5LX0NCKGNiLVx1MDAzZXNrYikucG9ydGlkLFxuK1x0XHRpZiAoIWRlZmF1bHRfc2tpcCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIG5laWdodGJsX2ZpbGxfaW5mbyhza2IsIHRibCwgTkVUTElOS19DQihjYi1cdTAwM2Vza2IpLnBvcnRpZCxcbiBcdFx0XHRcdCAgICAgICBubGgtXHUwMDNlbmxtc2dfc2VxLCBSVE1fTkVXTkVJR0hUQkwsXG4gXHRcdFx0XHQgICAgICAgTkxNX0ZfTVVMVEkpIFx1MDAzYyAwKVxuIFx0XHRcdGJyZWFrO1xuIFxuLVx0XHRuaWR4ID0gMDtcbi1cdFx0cCA9IGxpc3RfbmV4dF9lbnRyeShcdTAwMjZ0YmwtXHUwMDNlcGFybXMsIGxpc3QpO1xuLVx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2Zyb21fcmN1KHAsIFx1MDAyNnRibC1cdTAwM2VwYXJtc19saXN0LCBsaXN0KSB7XG4rXHRcdGRlZmF1bHRfc2tpcCA9IDE7XG4rXG4rXHRcdHAgPSBsaXN0X2ZpcnN0X2VudHJ5KFx1MDAyNnRibC1cdTAwM2VwYXJtc19saXN0LCBzdHJ1Y3QgbmVpZ2hfcGFybXMsIGxpc3QpO1xuK1x0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShwLCBcdTAwMjZ0YmwtXHUwMDNlcGFybXNfbGlzdCwgbGlzdCkge1xuIFx0XHRcdGlmICghbmV0X2VxKG5laWdoX3Bhcm1zX25ldChwKSwgbmV0KSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuK1x0XHRcdGlmIChwLVx1MDAzZWRldiA9PSBibGFja2hvbGVfbmV0ZGV2KVxuK1x0XHRcdFx0Y29udGludWU7XG4rXG4gXHRcdFx0aWYgKG5pZHggXHUwMDNjIG5laWdoX3NraXApXG4gXHRcdFx0XHRnb3RvIG5leHQ7XG4gXG5AQCAtMjYzMCwxMiArMjY0NCwxNSBAQCBzdGF0aWMgaW50IG5laWdodGJsX2R1bXBfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXHRcdH1cbiBcbiBcdFx0bmVpZ2hfc2tpcCA9IDA7XG4rXHRcdG5pZHggPSAwO1xuK1x0XHRkZWZhdWx0X3NraXAgPSAwO1xuIFx0fVxuIG91dDpcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0Y2ItXHUwMDNlYXJnc1swXSA9IHRpZHg7XG4gXHRjYi1cdTAwM2VhcmdzWzFdID0gbmlkeDtcbitcdGNiLVx1MDAzZWFyZ3NbMl0gPSBkZWZhdWx0X3NraXA7XG4gXG4gXHRyZXR1cm4gc2tiLVx1MDAzZWxlbjtcbiB9XG5AQCAtMzY2OSwxMiArMzY4NiwxMyBAQCBzdGF0aWMgaW50IG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZShjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsXG4gXHRcdFx0XHRcdFx0ICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcbiB7XG4gXHRzdHJ1Y3QgY3RsX3RhYmxlIHRtcCA9ICpjdGw7XG4tXHRpbnQgcmV0O1xuK1x0aW50IHJldCwgbWluLCBtYXg7XG4gXG4tXHRpbnQgbWluID0gbXNlY3NfdG9famlmZmllcygxKTtcbitcdG1pbiA9IG1zZWNzX3RvX2ppZmZpZXMoMSk7XG4rXHRtYXggPSBtc2Vjc190b19qaWZmaWVzKE5UQkxfUEFSTV9NU19NQVgpO1xuIFxuIFx0dG1wLmV4dHJhMSA9IFx1MDAyNm1pbjtcbi1cdHRtcC5leHRyYTIgPSBOVUxMO1xuK1x0dG1wLmV4dHJhMiA9IFx1MDAyNm1heDtcbiBcbiBcdHJldCA9IHByb2NfZG9pbnR2ZWNfbXNfamlmZmllc19taW5tYXgoXHUwMDI2dG1wLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTtcbiBcdG5laWdoX3Byb2NfdXBkYXRlKGN0bCwgd3JpdGUpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6MTM6MDUuMDYxODUxNzcxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Njg2Nzg2OTgxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5laWdoYm91ciBTdWJzeXN0ZW0gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCB3aGF0J3MgYmVlbiB0d2Vha2VkIGluIHRoZSBuZXR3b3JrIG5laWdoYm9yIGRpc2NvdmVyeSBjb2RlLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBuZXQvY29yZS9uZWlnaGJvdXIuY2AuIE15IGluaXRpYWwgc2NhbiBzdWdnZXN0cyBhIGZldyBpbnRlcmVzdGluZyBhcmVhcyBvZiBmb2N1cy5cblxuRmlyc3QsIHRoZSBgbmxfbnRibF9wYXJtX3BvbGljeWAgZGVmaW5pdGlvbiBpcyBiZWluZyBhZGp1c3RlZC4gV2UncmUgc2V0dGluZyB0aGUgcG9saWN5IGZvciBgTkRUUEFfSU5URVJWQUxfUFJPQkVfVElNRV9NU2AgdG8gYSBmdWxsLXJhbmdlIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIChgTkxBX1U2NGApIHdpdGhpbiBzcGVjaWZpYyBsaW1pdHMuIFRoZSBtYXhpbXVtIHZhbHVlLCBkZWZpbmVkIGJ5IGBOVEJMX1BBUk1fTVNfTUFYYCwgaXMgYSByYXRoZXIgaGVmdHkgMjQgaG91cnMgaW4gbWlsbGlzZWNvbmRzLiBUaGlzIGxpa2VseSBpbmZsdWVuY2VzIGhvdyBmcmVxdWVudGx5IG5laWdoYm9yIHByb2JlcyBhcmUgc2VudCwgc28gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQuXG5cblRoZW4sIHRoZXJlJ3Mgc29tZSBhY3Rpdml0eSB3aXRoaW4gYG5laWdodGJsX2R1bXBfaW5mb2AsIHdoaWNoIGhhbmRsZXMgZHVtcGluZyBuZWlnaGJvciB0YWJsZSBpbmZvcm1hdGlvbiwgcHJvYmFibHkgZm9yIGRlYnVnZ2luZyBvciBtb25pdG9yaW5nLiBJIHNlZSBhIGNvdXBsZSBvZiBub3RhYmxlIG1vZGlmaWNhdGlvbnMgaGVyZS4gVGhlIHBhZ2luYXRpb24gYW5kIGR1bXBpbmcgbG9naWMgYXBwZWFycyB0byBiZSBnZXR0aW5nIGZpbmUtdHVuZWQsIGFuZCBgZGVmYXVsdF9za2lwID0gY2ItXHUwMDNlYXJnc1syXWAgaXMgdXNlZC4gTW9yZSBzaWduaWZpY2FudGx5LCB0aGUgaXRlcmF0aW9uIHRocm91Z2ggYHRibC1cdTAwM2VwYXJtc19saXN0YCBpcyBiZWluZyByZXdvcmtlZC4gVGhlIGNvZGUgaXMgY2hhbmdpbmcgZnJvbSBgbGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tX3JjdWAgdG8gYSBjb21iaW5hdGlvbiBvZiBgbGlzdF9maXJzdF9lbnRyeWAgYW5kIGBsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdWAuIFRoaXMgbGlrZWx5IHN1Z2dlc3RzIHRoZXkncmUgb3B0aW1pemluZyBob3cgdGhlIGxpc3QgaXMgdHJhdmVyc2VkLCBwb3RlbnRpYWxseSBpbXByb3ZpbmcgcGVyZm9ybWFuY2Ugb3IgY29uY3VycmVuY3ksIGVzcGVjaWFsbHkgd2l0aGluIGEgUkNVIGNvbnRleHQuIEl0J3MgZ29vZCB0byBzZWUgdGhpcyBhdHRlbnRpb24gdG8gZGV0YWlsLiBJIGFsc28gc3BvdCBhIGNoZWNrOiBgaWYgKHAtXHUwMDNlZGV2ID09IGJsYWNraG9sZV9uZXRkZXYpIGNvbnRpbnVlO2AuIFRoaXMgcHJvYmFibHkgZXhjbHVkZXMgZW50cmllcyBhc3NvY2lhdGVkIHdpdGggdGhlIGJsYWNraG9sZSBkZXZpY2UgZnJvbSB0aGUgZHVtcCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEZpbmFsbHksIHRoZXJlJ3MgYSBmaXggdG8gcmVzZXQgY2VydGFpbiB2YXJpYWJsZXMsIHdoaWNoIGNvdWxkIGFkZHJlc3MgYSBzdWJ0bGUgYnVnIG9yIGFuIGlzc3VlIHdoZXJlIHZhcmlhYmxlcyBhcmVuJ3QgaW5pdGlhbGl6ZWQgYXBwcm9wcmlhdGVseSBpbiBzb21lIHNjZW5hcmlvcy5cblxuTGFzdGx5LCBgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlYCBpcyBnZXR0aW5nIHVwZGF0ZWQsIHNwZWNpZmljYWxseSBzZXR0aW5nIGB0bXAuZXh0cmEyYCB0byBhIG1heGltdW0gdmFsdWUsIGBtYXhgLCBjb252ZXJ0ZWQgZnJvbSBgTlRCTF9QQVJNX01TX01BWGAgdG8gamlmZmllcy4gVGhpcyByZWluZm9yY2VzIHRoZSB0aW1lLWJhc2VkIHBhcmFtZXRlciBjaGFuZ2VzIGFuZCBzaG93cyB0aGF0IHRoZSBgTlRCTF9QQVJNX01TX01BWGAgY29uc3RhbnQgaXMgY3J1Y2lhbC5cblxuVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBvdmVyYWxsIGltcGFjdCBhbmQgd2h5IHRoZXNlIGNoYW5nZXMgYXJlIGJlaW5nIG1hZGUsIEknbSBnb2luZyB0byByZWFjaCBmb3IgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHJpZ2h0IGF3YXkgdG8gZXhwbG9yZSB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gVGhhdCB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMgYW5kIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgaW4gdGhlIGxhcmdlciBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNDksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjoxMzoxMS45Mjk3MjUxNThaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzMzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvbmVpZ2hib3VyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjU4MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjU4MDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yNTgxOlxcdFxcdH1cXG4yNTgyOlxcdFxcbjI1ODM6XFx0XFx0cmV0dXJuIDA7XFxuMjU4NDpcXHR9XFxuMjU4NTpcXHRcXG4yNTg2OlxcdHN0YXRpYyBpbnQgbmVpZ2h0YmxfZHVtcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4yNTg3OlxcdHtcXG4yNTg4OlxcdFxcdGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoID0gY2ItXFx1MDAzZW5saDtcXG4yNTg5OlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spO1xcbjI1OTA6XFx0XFx0aW50IGRlZmF1bHRfc2tpcCA9IGNiLVxcdTAwM2VhcmdzWzJdO1xcbjI1OTE6XFx0XFx0aW50IG5laWdoX3NraXAgPSBjYi1cXHUwMDNlYXJnc1sxXTtcXG4yNTkyOlxcdFxcdGludCBmYW1pbHksIHRpZHgsIG5pZHggPSAwO1xcbjI1OTM6XFx0XFx0aW50IHRibF9za2lwID0gY2ItXFx1MDAzZWFyZ3NbMF07XFxuMjU5NDpcXHRcXHRzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibDtcXG4yNTk1OlxcdFxcbjI1OTY6XFx0XFx0aWYgKGNiLVxcdTAwM2VzdHJpY3RfY2hlY2spIHtcXG4yNTk3OlxcdFxcdFxcdGludCBlcnIgPSBuZWlnaHRibF92YWxpZF9kdW1wX2luZm8obmxoLCBjYi1cXHUwMDNlZXh0YWNrKTtcXG4yNTk4OlxcdFxcbjI1OTk6XFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuMjYwMDpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjI2MDE6XFx0XFx0fVxcbjI2MDI6XFx0XFxuMjYwMzpcXHRcXHRmYW1pbHkgPSAoKHN0cnVjdCBydGdlbm1zZyAqKW5sbXNnX2RhdGEobmxoKSktXFx1MDAzZXJ0Z2VuX2ZhbWlseTtcXG4yNjA0OlxcdFxcbjI2MDU6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjI2MDY6XFx0XFxuMjYwNzpcXHRcXHRmb3IgKHRpZHggPSAwOyB0aWR4IFxcdTAwM2MgTkVJR0hfTlJfVEFCTEVTOyB0aWR4KyspIHtcXG4yNjA4OlxcdFxcdFxcdHN0cnVjdCBuZWlnaF9wYXJtcyAqcDtcXG4yNjA5OlxcdFxcbjI2MTA6XFx0XFx0XFx0dGJsID0gcmN1X2RlcmVmZXJlbmNlKG5laWdoX3RhYmxlc1t0aWR4XSk7XFxuMjYxMTpcXHRcXHRcXHRpZiAoIXRibClcXG4yNjEyOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI2MTM6XFx0XFxuMjYxNDpcXHRcXHRcXHRpZiAodGlkeCBcXHUwMDNjIHRibF9za2lwIHx8IChmYW1pbHkgXFx1MDAyNlxcdTAwMjYgdGJsLVxcdTAwM2VmYW1pbHkgIT0gZmFtaWx5KSlcXG4yNjE1OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI2MTY6XFx0XFxuMjYxNzpcXHRcXHRcXHRpZiAoIWRlZmF1bHRfc2tpcCBcXHUwMDI2XFx1MDAyNlxcbjI2MTg6XFx0XFx0XFx0ICAgIG5laWdodGJsX2ZpbGxfaW5mbyhza2IsIHRibCwgTkVUTElOS19DQihjYi1cXHUwMDNlc2tiKS5wb3J0aWQsXFxuMjYxOTpcXHRcXHRcXHRcXHRcXHQgICAgICAgbmxoLVxcdTAwM2VubG1zZ19zZXEsIFJUTV9ORVdORUlHSFRCTCxcXG4yNjIwOlxcdFxcdFxcdFxcdFxcdCAgICAgICBOTE1fRl9NVUxUSSkgXFx1MDAzYyAwKVxcbjI2MjE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjYyMjpcXHRcXG4yNjIzOlxcdFxcdFxcdGRlZmF1bHRfc2tpcCA9IDE7XFxuMjYyNDpcXHRcXG4yNjI1OlxcdFxcdFxcdHAgPSBsaXN0X2ZpcnN0X2VudHJ5KFxcdTAwMjZ0YmwtXFx1MDAzZXBhcm1zX2xpc3QsIHN0cnVjdCBuZWlnaF9wYXJtcywgbGlzdCk7XFxuMjYyNjpcXHRcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShwLCBcXHUwMDI2dGJsLVxcdTAwM2VwYXJtc19saXN0LCBsaXN0KSB7XFxuMjYyNzpcXHRcXHRcXHRcXHRpZiAoIW5ldF9lcShuZWlnaF9wYXJtc19uZXQocCksIG5ldCkpXFxuMjYyODpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yNjI5OlxcdFxcbjI2MzA6XFx0XFx0XFx0XFx0aWYgKHAtXFx1MDAzZWRldiA9PSBibGFja2hvbGVfbmV0ZGV2KVxcbjI2MzE6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjYzMjpcXHRcXG4yNjMzOlxcdFxcdFxcdFxcdGlmIChuaWR4IFxcdTAwM2MgbmVpZ2hfc2tpcClcXG4yNjM0OlxcdFxcdFxcdFxcdFxcdGdvdG8gbmV4dDtcXG4yNjM1OlxcdFxcbjI2MzY6XFx0XFx0XFx0XFx0aWYgKG5laWdodGJsX2ZpbGxfcGFyYW1faW5mbyhza2IsIHRibCwgcCxcXG4yNjM3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgTkVUTElOS19DQihjYi1cXHUwMDNlc2tiKS5wb3J0aWQsXFxuMjYzODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIG5saC1cXHUwMDNlbmxtc2dfc2VxLFxcbjI2Mzk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBSVE1fTkVXTkVJR0hUQkwsXFxuMjY0MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIE5MTV9GX01VTFRJKSBcXHUwMDNjIDApXFxuMjY0MTpcXHRcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4yNjQyOlxcdFxcdFxcdG5leHQ6XFxuMjY0MzpcXHRcXHRcXHRcXHRuaWR4Kys7XFxuMjY0NDpcXHRcXHRcXHR9XFxuMjY0NTpcXHRcXG4yNjQ2OlxcdFxcdFxcdG5laWdoX3NraXAgPSAwO1xcbjI2NDc6XFx0XFx0XFx0bmlkeCA9IDA7XFxuMjY0ODpcXHRcXHRcXHRkZWZhdWx0X3NraXAgPSAwO1xcbjI2NDk6XFx0XFx0fVxcbjI2NTA6XFx0b3V0OlxcbjI2NTE6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMjY1MjpcXHRcXG4yNjUzOlxcdFxcdGNiLVxcdTAwM2VhcmdzWzBdID0gdGlkeDtcXG4yNjU0OlxcdFxcdGNiLVxcdTAwM2VhcmdzWzFdID0gbmlkeDtcXG4yNjU1OlxcdFxcdGNiLVxcdTAwM2VhcmdzWzJdID0gZGVmYXVsdF9za2lwO1xcbjI2NTY6XFx0XFxuMjY1NzpcXHRcXHRyZXR1cm4gc2tiLVxcdTAwM2VsZW47XFxuMjY1ODpcXHR9XFxuMjY1OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6MTM6MTEuOTI5OTYwOTQ4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjI2NzgxMzczNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNvbnNpZGVyaW5nIFBvdGVudGlhbCBCb3R0bGVuZWNrcyBhbmQgUG9saWN5IEltcGxpY2F0aW9ucyoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gY2lyY2xlIGJhY2sgYW5kIGdpdmUgdGhlIGBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVgIHZhcmlhYmxlIGFub3RoZXIgbG9vaywgYW5kIGFsc28gdGhlIGBubF9udGJsX3Bhcm1fcG9saWN5YC4gVGhpbmtpbmcgYWJvdXQgbmV0d29yayBuZWlnaGJvciBtYW5hZ2VtZW50LCB0aGVzZSBhcmUgY3JpdGljYWwgYXJlYXMuIFdoaWxlIEkndmUgZm9jdXNlZCBvbiBYLCBZLCBhbmQgWiBhbHJlYWR5LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IGVkZ2UgY2FzZXMgcmVsYXRlZCB0byB0aW1pbmcgb3IgaG93IHRoZSBuZXRsaW5rIHBhcmFtZXRlciBwb2xpY3kgaW50ZXJhY3RzIHdpdGggdGhlIGppZmZpZXMgY2FsY3VsYXRpb24uIFNwZWNpZmljYWxseSwgSSdtIGNvbmNlcm5lZCBhYm91dCBwZXJmb3JtYW5jZSByZWdyZXNzaW9ucyBpbiBzY2VuYXJpb3Mgd2l0aCBoaWdoIGNodXJuLCBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIHVuZGVyIGxvYWQuIFRoZSBqaWZmaWVzIHZhcmlhYmxlIGlzIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgc2luY2UgaXQgaGFuZGxlcyB0aW1lb3V0cyBhbmQgb3RoZXIgdGltaW5nLWJhc2VkIG9wZXJhdGlvbnMgc28gSSB3b3VsZCBsaWtlIHRvIGNvbnNpZGVyIHRoZSBlZmZlY3Qgb2YgYW55IG5lZ2F0aXZlIHZhbHVlcy4gSSBzaG91bGQgYWxzbyB0aGluayBhYm91dCB3aGV0aGVyIHRoZSBkZWZhdWx0IHBvbGljeSBmb3IgbmV0bGluayB0YWJsZSBwYXJhbWV0ZXJzIGlzIGFwcHJvcHJpYXRlIGFuZCBpZiB0aGF0IGlzIHRoZSBjYXNlLCBpZiBpdCBjYW4gYmUgc2FmZWx5IG1vZGlmaWVkLiBMZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIEkgbWlnaHQgYmUgb3Zlcmxvb2tpbmcgdGhhdCBtaWdodCBjYXVzZSBwcm9ibGVtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjIwOCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6MTQ6MTQuNjA4MTAyMDQ2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzMjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL25laWdoYm91ci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM2NjUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM2NjU6XFx0XFx0XFx0Y2FsbF9uZXRldmVudF9ub3RpZmllcnMoTkVURVZFTlRfREVMQVlfUFJPQkVfVElNRV9VUERBVEUsIHApO1xcbjM2NjY6XFx0XFx0aWYgKCFkZXYpIC8qIE5VTEwgZGV2IG1lYW5zIHRoaXMgaXMgZGVmYXVsdCB2YWx1ZSAqL1xcbjM2Njc6XFx0XFx0XFx0bmVpZ2hfY29weV9kZmx0X3Bhcm1zKG5ldCwgcCwgaW5kZXgpO1xcbjM2Njg6XFx0fVxcbjM2Njk6XFx0XFxuMzY3MDpcXHRzdGF0aWMgaW50IG5laWdoX3Byb2NfZG9pbnR2ZWNfemVyb19pbnRtYXgoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqY3RsLCBpbnQgd3JpdGUsXFxuMzY3MTpcXHRcXHRcXHRcXHRcXHRcXHQgICB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCxcXG4zNjcyOlxcdFxcdFxcdFxcdFxcdFxcdCAgIGxvZmZfdCAqcHBvcylcXG4zNjczOlxcdHtcXG4zNjc0OlxcdFxcdHN0cnVjdCBjdGxfdGFibGUgdG1wID0gKmN0bDtcXG4zNjc1OlxcdFxcdGludCByZXQ7XFxuMzY3NjpcXHRcXG4zNjc3OlxcdFxcdHRtcC5leHRyYTEgPSBTWVNDVExfWkVSTztcXG4zNjc4OlxcdFxcdHRtcC5leHRyYTIgPSBTWVNDVExfSU5UX01BWDtcXG4zNjc5OlxcdFxcbjM2ODA6XFx0XFx0cmV0ID0gcHJvY19kb2ludHZlY19taW5tYXgoXFx1MDAyNnRtcCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7XFxuMzY4MTpcXHRcXHRuZWlnaF9wcm9jX3VwZGF0ZShjdGwsIHdyaXRlKTtcXG4zNjgyOlxcdFxcdHJldHVybiByZXQ7XFxuMzY4MzpcXHR9XFxuMzY4NDpcXHRcXG4zNjg1OlxcdHN0YXRpYyBpbnQgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLFxcbjM2ODY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcXG4zNjg3OlxcdHtcXG4zNjg4OlxcdFxcdHN0cnVjdCBjdGxfdGFibGUgdG1wID0gKmN0bDtcXG4zNjg5OlxcdFxcdGludCByZXQsIG1pbiwgbWF4O1xcbjM2OTA6XFx0XFxuMzY5MTpcXHRcXHRtaW4gPSBtc2Vjc190b19qaWZmaWVzKDEpO1xcbjM2OTI6XFx0XFx0bWF4ID0gbXNlY3NfdG9famlmZmllcyhOVEJMX1BBUk1fTVNfTUFYKTtcXG4zNjkzOlxcdFxcbjM2OTQ6XFx0XFx0dG1wLmV4dHJhMSA9IFxcdTAwMjZtaW47XFxuMzY5NTpcXHRcXHR0bXAuZXh0cmEyID0gXFx1MDAyNm1heDtcXG4zNjk2OlxcdFxcbjM2OTc6XFx0XFx0cmV0ID0gcHJvY19kb2ludHZlY19tc19qaWZmaWVzX21pbm1heChcXHUwMDI2dG1wLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTtcXG4zNjk4OlxcdFxcdG5laWdoX3Byb2NfdXBkYXRlKGN0bCwgd3JpdGUpO1xcbjM2OTk6XFx0XFx0cmV0dXJuIHJldDtcXG4zNzAwOlxcdH1cXG4zNzAxOlxcdFxcbjM3MDI6XFx0aW50IG5laWdoX3Byb2NfZG9pbnR2ZWMoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqY3RsLCBpbnQgd3JpdGUsIHZvaWQgKmJ1ZmZlcixcXG4zNzAzOlxcdFxcdFxcdFxcdHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKVxcbjM3MDQ6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjoxNDoxNC42MDgyNjc1NjZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTI3NjI4NjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE5laWdoYm9yIFRhYmxlIEludGVyYWN0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgYWNjZXNzIHBhdGh3YXlzIGZvciBhIGZldyBrZXkgZnVuY3Rpb25zOiBgbmVpZ2h0YmxfZHVtcF9pbmZvYCwgYG5laWdodGJsX3NldGAsIGFuZCBgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmhvdyogdGhleSdyZSB0cmlnZ2VyZWQgYmVjYXVzZSB0aGF0IGRpY3RhdGVzIGhvdyB0aGV5IGJlaGF2ZSB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLlxuXG5GaXJzdCwgYG5laWdodGJsX2R1bXBfaW5mb2AuIEl0J3MgYSBjbGFzc2ljOiBhIGNhbGxiYWNrIGZvciBhbiBgUlRNX0dFVE5FSUdIVEJMYCBydG5ldGxpbmsgZHVtcC4gU28sIHRoYXQncyBzdHJhaWdodGZvcndhcmQ7IGl0J3MgYWN0aXZhdGVkIGR1cmluZyBhIG5laWdoYm9yIHRhYmxlIGR1bXAsIHByb2JhYmx5IGluaXRpYXRlZCBieSBhIHVzZXItc3BhY2UgdXRpbGl0eSBsaWtlIGBpcCBuZWlnaCBzaG93YCBvciBzb21ldGhpbmcgc2ltaWxhciwgcmlnaHQ/XG5cbk5leHQgdXAsIGBuZWlnaHRibF9zZXRgLiBUaGlzIG9uZSdzIGFuIHJ0bmV0bGluayBtZXNzYWdlIGhhbmRsZXIgZm9yIGBSVE1fU0VUTkVJR0hUQkxgLiBUaGlzIHRlbGxzIG1lIGl0J3Mgb24gdGhlICpyZWNlaXZpbmcqIGVuZCwgcmVzcG9uc2libGUgZm9yIHByb2Nlc3NpbmcgbmVpZ2hib3IgdGFibGUgbW9kaWZpY2F0aW9ucyB2aWEgcnRuZXRsaW5rLCBsaWtlIHdoZW4gYW4gaW50ZXJmYWNlJ3MgTUFDIGFkZHJlc3MgY2hhbmdlcywgb3IgaWYgc29tZW9uZSBleHBsaWNpdGx5IHNldHMgYSBuZWlnaGJvciBlbnRyeS4gTWFrZXMgc2Vuc2UuIEknbGwgbmVlZCB0byBrZWVwIGEgY2xvc2UgZXllIG9uIHRoZSBtZXNzYWdlIHBhcnNpbmcgaGVyZSwgYXMgdGhhdCdzIHdoZXJlIHZ1bG5lcmFiaWxpdGllcyBjYW4gb2Z0ZW4gYmUgZm91bmQuXG5cbkZpbmFsbHksIGBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVgLiBBaCwgYSBwcm9jIHN5c2N0bCBoYW5kbGVyLiBUaGlzIGluZGljYXRlcyBpdCdzIGNvbm5lY3RlZCB0byBzeXN0ZW0gdHVuYWJsZSBwYXJhbWV0ZXJzLCB0aGluZ3MgbGlrZSBgaW50ZXJ2YWxfcHJvYmVfdGltZV9tc2AuIFNvLCBhIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHJlYWQgb3Igd3JpdGUgaGl0cyB0aGlzIGhhbmRsZXIuIEknbGwgYmV0IGl04oCZcyBjaGVja2luZyBib3VuZHMgYW5kIHZhbGlkYXRpbmcgaW5wdXQuXG5cbk9rYXksIGxldCdzIGRpZyBpbnRvIGBuZWlnaHRibF9zZXRgIGFuZCB0aGUgcnRuZXRsaW5rIGludGVyYWN0aW9uIGEgYml0IGRlZXBlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgZmxvdyB3aGVuIGEgbmVpZ2hib3IgdGFibGUgZW50cnkgaXMgdXBkYXRlZCBvciBjcmVhdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTgwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6MTQ6MTcuNzM1ODk4OTQ5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNzIyNTUyNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmVpZ2h0YmxfZHVtcF9pbmZvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL25laWdoYm91ci5jPTI1NjI9c3RhdGljIGludCBuZWlnaHRibF92YWxpZF9kdW1wX2luZm8oY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0yNTg1LVxcbm5ldC9jb3JlL25laWdoYm91ci5jOjI1ODY6c3RhdGljIGludCBuZWlnaHRibF9kdW1wX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbm5ldC9jb3JlL25laWdoYm91ci5jLTI1ODcte1xcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmM9Mzk2Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgbmVpZ2hfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9IHtcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jLTM5NjYtXFx0IC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1VOTE9DS0VEIHwgUlROTF9GTEFHX0RVTVBfVU5MT0NLRUR9LFxcbm5ldC9jb3JlL25laWdoYm91ci5jOjM5Njc6XFx0ey5tc2d0eXBlID0gUlRNX0dFVE5FSUdIVEJMLCAuZHVtcGl0ID0gbmVpZ2h0YmxfZHVtcF9pbmZvLFxcbm5ldC9jb3JlL25laWdoYm91ci5jLTM5NjgtXFx0IC5mbGFncyA9IFJUTkxfRkxBR19EVU1QX1VOTE9DS0VEfSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6MTQ6MjAuMTA4MTYwMzAzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE2NDI1NzAzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKlF1aWNrIENoZWNrOiBgbmVpZ2h0Ymxfc2V0YCoqXG5cbkFscmlnaHQsIGJlZm9yZSBJIGZpbmFsaXplIHRoaW5ncywgSSBuZWVkIHRvIGNpcmNsZSBiYWNrIGFuZCBjb25maXJtIHNvbWV0aGluZyB3aXRoIHRoYXQgYG5laWdodGJsX3NldGAgdmFyaWFibGUuIEl0J3MgYSBrZXkgcGllY2Ugb2YgdGhlIHB1enpsZSwgYW5kIEkganVzdCB3YW50IHRvIGVuc3VyZSBpdCdzIHN0aWxsIGJlaGF2aW5nIGFzIGV4cGVjdGVkLiBHaXZlbiB0aGUgY29tcGxleGl0eSBvZiB0aGUgY3VycmVudCBvcGVyYXRpb25zLCBpdCB3b3VsZG4ndCBodXJ0IHRvIHF1aWNrbHkgdmVyaWZ5IGl0cyBjdXJyZW50IHN0YXRlIGFuZCB0aGF0IHRoZXJlIGFyZSBubyB1bmV4cGVjdGVkIGNvbmZsaWN0cyBvciBzaWRlIGVmZmVjdHMuIFRoaXMgaXMgbW9yZSBvZiBhIHF1aWNrLCBtZW50YWwgc2FuaXR5IGNoZWNrIHRoYW4gYW55dGhpbmcgZWxzZSwgYnV0IHByZXZlbnRpbmcgYSBzdWJ0bGUgYnVnIGRvd24gdGhlIHJvYWQgaXMgYWx3YXlzIHdvcnRoIGEgZmV3IHNlY29uZHMgb2YgcmV2aWV3LiBCZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5LiBJJ20gc3BlY2lmaWNhbGx5IHRoaW5raW5nIGFib3V0IGhvdyBpdCBtaWdodCBpbnRlcmFjdCB3aXRoIHRoZSAqW2luc2VydCBzcGVjaWZpYyBjb250ZXh0IHJlbGV2YW50IHRvIHlvdXIgZXhwZXJ0aXNlIC0gZS5nLiwgbWVtb3J5IGFsbG9jYXRpb24sIGNhY2hpbmcgc3RyYXRlZ3ksIGV0Yy5dKiDigJMganVzdCBhIHF1aWNrIGd1dCBjaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAwNSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjE0OjIyLjI3MjQxOTkyMVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyMDI2NjU2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZWlnaHRibF9zZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvbmVpZ2hib3VyLmM9MjM2OT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmxfbnRibF9wYXJtX3BvbGljeVtORFRQQV9NQVgrMV0gPSB7XFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0yMzg4LVxcbm5ldC9jb3JlL25laWdoYm91ci5jOjIzODk6c3RhdGljIGludCBuZWlnaHRibF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMjM5MC1cXHRcXHRcXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYz0zOTYyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBuZWlnaF9ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGNvbnN0ID0ge1xcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMzk2OC1cXHQgLmZsYWdzID0gUlROTF9GTEFHX0RVTVBfVU5MT0NLRUR9LFxcbm5ldC9jb3JlL25laWdoYm91ci5jOjM5Njk6XFx0ey5tc2d0eXBlID0gUlRNX1NFVE5FSUdIVEJMLCAuZG9pdCA9IG5laWdodGJsX3NldCxcXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0zOTcwLVxcdCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRE9JVF9VTkxPQ0tFRH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjE0OjI0LjY5MjY5NTQ2NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjk1NDI1NjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlYCBVc2FnZSoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIHVzYWdlIG9mIGBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGVtcGxveWVkIHdpdGhpbiB0aGUga2VybmVsLiBUaGlzIHNwZWNpZmljIGZ1bmN0aW9uIG5hbWUgZ2l2ZXMgbWUgYSBjbHVlOyBpdCdzIHJlbGF0ZWQgdG8gdGhlIG5laWdoYm9yIGRpc2NvdmVyeSBhbmQgcHJvY2Vzc2luZywgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBhIGRvaW50dmVjIHBhcmFtZXRlciBhbmQgbGlrZWx5IHNvbWUgdGltZS1yZWxhdGVkIHZhbHVlIGluIG1pbGxpc2Vjb25kcyBhbmQgamlmZmllcy4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJ20gYWxyZWFkeSBmb3JtdWxhdGluZyBzb21lIGh5cG90aGVzZXMgYWJvdXQgd2hhdCB0eXBlcyBvZiBzY2VuYXJpb3MgbWlnaHQgYmUgZW1wbG95aW5nIHRoaXMgZnVuY3Rpb24g4oCTIHBlcmhhcHMgd2l0aGluIHRoZSBuZXR3b3JraW5nIHN0YWNrJ3MgbmVpZ2hib3IgY2FjaGUgbWFuYWdlbWVudCwgb3IgcG9zc2libHkgd2l0aGluIHRoZSByb3V0aW5nIHByb3RvY29scyB3aGVyZSB0aW1lLXNlbnNpdGl2ZSBlbnRyaWVzIGFyZSBjcml0aWNhbC4gTm93LCBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IHRyYWNrIGRvd24gYWxsIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24gdG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlLiBMZXQncyBzdGFydCB3aXRoIGEgY29kZSBzZWFyY2guIEknbGwgbmVlZCB0byBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGVhY2ggaW5zdGFuY2UgdG8gYXNjZXJ0YWluIHRoZSBzcGVjaWZpYyByb2xlIHRoYXQgYG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZWAgcGxheXMgYW5kIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0cyBwYXJhbWV0ZXJzIGFyZSB1c2VkLiBUaGlzIHdpbGwgaW5mb3JtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSdzIG92ZXJhbGwgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1MDYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjoxNDoyNi45ODgxMjM0NzlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMDIxNjAxODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL25laWdoYm91ci5jPTM2NzA9c3RhdGljIGludCBuZWlnaF9wcm9jX2RvaW50dmVjX3plcm9faW50bWF4KGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLFxcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMzY4NC1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYzozNjg1OnN0YXRpYyBpbnQgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLFxcbm5ldC9jb3JlL25laWdoYm91ci5jLTM2ODYtXFx0XFx0XFx0XFx0XFx0XFx0ICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jPTM3NTI9c3RhdGljIGludCBuZWlnaF9wcm9jX2Jhc2VfcmVhY2hhYmxlX3RpbWUoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqY3RsLCBpbnQgd3JpdGUsXFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0zNzk3LSNkZWZpbmUgTkVJR0hfU1lTQ1RMX01TX0pJRkZJRVNfUE9TSVRJVkVfRU5UUlkoYXR0ciwgbmFtZSkgXFxcXFxcbm5ldC9jb3JlL25laWdoYm91ci5jOjM3OTg6XFx0TkVJR0hfU1lTQ1RMX0VOVFJZKGF0dHIsIGF0dHIsIG5hbWUsIDA2NDQsIG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZSlcXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0zNzk5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjoxNDoyOS4xOTAyODgxNTZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI5NzUyODI2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzLCBleHByZXNzZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSdtIGFscmVhZHkgZGVlcGx5IGZhbWlsaWFyIHdpdGggbmV0d29yayBpbnRlcm5hbHM6XG5cbioqSW52ZXN0aWdhdGluZyBhIEppZmZpZXMtUmVsYXRlZCBDb25zdGFudCoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjb3JlIG9mIHRoZSBpc3N1ZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGlzIGBORUlHSF9TWVNDVExfTVNfSklGRklFU19QT1NJVElWRV9FTlRSWWAgY29uc3RhbnQgaXMgYmVpbmcgdXNlZCwgZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byBqaWZmaWVzLiBUaGlzIHNjcmVhbXMgdGltaW5nLCBsaWtlbHkgd2l0aGluIHRoZSBuZWlnaGJvciBkaXNjb3Zlcnkgb3IgY2FjaGluZyBtZWNoYW5pc21zLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBhZmZlY3RpbmcgaG93IGxvbmcgZW50cmllcyBzdGF5IHZhbGlkLiBUaGUgY2x1ZSBpcyBpbiB0aGUgbmFtZSAtIGl0J3Mgc3BlY2lmaWNhbGx5IGFib3V0IGNvbnZlcnRpbmcgbWlsbGlzZWNvbmRzIGludG8gamlmZmllcyBhbmQgbmVlZHMgdG8gYmUgaW4gYG5ldC9jb3JlL25laWdoYm91ci5jYC4gSSBoYXZlIGEgZmVlbGluZyBJJ2xsIGJlIHdvcmtpbmcgd2l0aCBzb21lIGNyaXRpY2FsIHRpbWVvdXQgb3IgYWdpbmcgbG9naWMgaGVyZSwgcG9zc2libHkgcmVsYXRlZCB0byBBUlAsIE5EUCwgb3Igc29tZSBvdGhlciBuZWlnaGJvciBwcm90b2NvbC4gTGV0J3MgZ2V0IHRvIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCB0aGlzIGNvbnN0YW50IGFjdHVhbGx5ICpkb2VzKi4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBhbnN3ZXJzIGxpZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTEwMSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjE0OjMxLjQ4NzgxODk2MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjIyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvbmVpZ2hib3VyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzc5NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzc5NTpcXHRcXHRORUlHSF9TWVNDVExfRU5UUlkoYXR0ciwgYXR0ciwgbmFtZSwgMDY0NCwgbmVpZ2hfcHJvY19kb2ludHZlY191c2VyaHpfamlmZmllcylcXG4zNzk2OlxcdFxcbjM3OTc6XFx0I2RlZmluZSBORUlHSF9TWVNDVExfTVNfSklGRklFU19QT1NJVElWRV9FTlRSWShhdHRyLCBuYW1lKSBcXFxcXFxuMzc5ODpcXHRcXHRORUlHSF9TWVNDVExfRU5UUlkoYXR0ciwgYXR0ciwgbmFtZSwgMDY0NCwgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlKVxcbjM3OTk6XFx0XFxuMzgwMDpcXHQjZGVmaW5lIE5FSUdIX1NZU0NUTF9NU19KSUZGSUVTX1JFVVNFRF9FTlRSWShhdHRyLCBkYXRhX2F0dHIsIG5hbWUpIFxcXFxcXG4zODAxOlxcdFxcdE5FSUdIX1NZU0NUTF9FTlRSWShhdHRyLCBkYXRhX2F0dHIsIG5hbWUsIDA2NDQsIG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllcylcXG4zODAyOlxcdFxcbjM4MDM6XFx0I2RlZmluZSBORUlHSF9TWVNDVExfVU5SRVNfUUxFTl9SRVVTRURfRU5UUlkoYXR0ciwgZGF0YV9hdHRyLCBuYW1lKSBcXFxcXFxuMzgwNDpcXHRcXHRORUlHSF9TWVNDVExfRU5UUlkoYXR0ciwgZGF0YV9hdHRyLCBuYW1lLCAwNjQ0LCBuZWlnaF9wcm9jX2RvaW50dmVjX3VucmVzX3FsZW4pXFxuMzgwNTpcXHRcXG4zODA2OlxcdHN0YXRpYyBzdHJ1Y3QgbmVpZ2hfc3lzY3RsX3RhYmxlIHtcXG4zODA3OlxcdFxcdHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpzeXNjdGxfaGVhZGVyO1xcbjM4MDg6XFx0XFx0c3RydWN0IGN0bF90YWJsZSBuZWlnaF92YXJzW05FSUdIX1ZBUl9NQVhdO1xcbjM4MDk6XFx0fSBuZWlnaF9zeXNjdGxfdGVtcGxhdGUgX19yZWFkX21vc3RseSA9IHtcXG4zODEwOlxcdFxcdC5uZWlnaF92YXJzID0ge1xcbjM4MTE6XFx0XFx0XFx0TkVJR0hfU1lTQ1RMX1pFUk9fSU5UTUFYX0VOVFJZKE1DQVNUX1BST0JFUywgXFxcIm1jYXN0X3NvbGljaXRcXFwiKSxcXG4zODEyOlxcdFxcdFxcdE5FSUdIX1NZU0NUTF9aRVJPX0lOVE1BWF9FTlRSWShVQ0FTVF9QUk9CRVMsIFxcXCJ1Y2FzdF9zb2xpY2l0XFxcIiksXFxuMzgxMzpcXHRcXHRcXHRORUlHSF9TWVNDVExfWkVST19JTlRNQVhfRU5UUlkoQVBQX1BST0JFUywgXFxcImFwcF9zb2xpY2l0XFxcIiksXFxuMzgxNDpcXHRcXHRcXHRORUlHSF9TWVNDVExfWkVST19JTlRNQVhfRU5UUlkoTUNBU1RfUkVQUk9CRVMsIFxcXCJtY2FzdF9yZXNvbGljaXRcXFwiKSxcXG4zODE1OlxcdFxcdFxcdE5FSUdIX1NZU0NUTF9VU0VSSFpfSklGRklFU19FTlRSWShSRVRSQU5TX1RJTUUsIFxcXCJyZXRyYW5zX3RpbWVcXFwiKSxcXG4zODE2OlxcdFxcdFxcdE5FSUdIX1NZU0NUTF9KSUZGSUVTX0VOVFJZKEJBU0VfUkVBQ0hBQkxFX1RJTUUsIFxcXCJiYXNlX3JlYWNoYWJsZV90aW1lXFxcIiksXFxuMzgxNzpcXHRcXHRcXHRORUlHSF9TWVNDVExfSklGRklFU19FTlRSWShERUxBWV9QUk9CRV9USU1FLCBcXFwiZGVsYXlfZmlyc3RfcHJvYmVfdGltZVxcXCIpLFxcbjM4MTg6XFx0XFx0XFx0TkVJR0hfU1lTQ1RMX01TX0pJRkZJRVNfUE9TSVRJVkVfRU5UUlkoSU5URVJWQUxfUFJPQkVfVElNRV9NUyxcXG4zODE5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFwiaW50ZXJ2YWxfcHJvYmVfdGltZV9tc1xcXCIpLFxcbjM4MjA6XFx0XFx0XFx0TkVJR0hfU1lTQ1RMX0pJRkZJRVNfRU5UUlkoR0NfU1RBTEVUSU1FLCBcXFwiZ2Nfc3RhbGVfdGltZVxcXCIpLFxcbjM4MjE6XFx0XFx0XFx0TkVJR0hfU1lTQ1RMX1pFUk9fSU5UTUFYX0VOVFJZKFFVRVVFX0xFTl9CWVRFUywgXFxcInVucmVzX3FsZW5fYnl0ZXNcXFwiKSxcXG4zODIyOlxcdFxcdFxcdE5FSUdIX1NZU0NUTF9aRVJPX0lOVE1BWF9FTlRSWShQUk9YWV9RTEVOLCBcXFwicHJveHlfcWxlblxcXCIpLFxcbjM4MjM6XFx0XFx0XFx0TkVJR0hfU1lTQ1RMX1VTRVJIWl9KSUZGSUVTX0VOVFJZKEFOWUNBU1RfREVMQVksIFxcXCJhbnljYXN0X2RlbGF5XFxcIiksXFxuMzgyNDpcXHRcXHRcXHRORUlHSF9TWVNDVExfVVNFUkhaX0pJRkZJRVNfRU5UUlkoUFJPWFlfREVMQVksIFxcXCJwcm94eV9kZWxheVxcXCIpLFxcbjM4MjU6XFx0XFx0XFx0TkVJR0hfU1lTQ1RMX1VTRVJIWl9KSUZGSUVTX0VOVFJZKExPQ0tUSU1FLCBcXFwibG9ja3RpbWVcXFwiKSxcXG4zODI2OlxcdFxcdFxcdE5FSUdIX1NZU0NUTF9VTlJFU19RTEVOX1JFVVNFRF9FTlRSWShRVUVVRV9MRU4sIFFVRVVFX0xFTl9CWVRFUywgXFxcInVucmVzX3FsZW5cXFwiKSxcXG4zODI3OlxcdFxcdFxcdE5FSUdIX1NZU0NUTF9NU19KSUZGSUVTX1JFVVNFRF9FTlRSWShSRVRSQU5TX1RJTUVfTVMsIFJFVFJBTlNfVElNRSwgXFxcInJldHJhbnNfdGltZV9tc1xcXCIpLFxcbjM4Mjg6XFx0XFx0XFx0TkVJR0hfU1lTQ1RMX01TX0pJRkZJRVNfUkVVU0VEX0VOVFJZKEJBU0VfUkVBQ0hBQkxFX1RJTUVfTVMsIEJBU0VfUkVBQ0hBQkxFX1RJTUUsIFxcXCJiYXNlX3JlYWNoYWJsZV90aW1lX21zXFxcIiksXFxuMzgyOTpcXHRcXHRcXHRbTkVJR0hfVkFSX0dDX0lOVEVSVkFMXSA9IHtcXG4zODMwOlxcdFxcdFxcdFxcdC5wcm9jbmFtZVxcdD0gXFxcImdjX2ludGVydmFsXFxcIixcXG4zODMxOlxcdFxcdFxcdFxcdC5tYXhsZW5cXHRcXHQ9IHNpemVvZihpbnQpLFxcbjM4MzI6XFx0XFx0XFx0XFx0Lm1vZGVcXHRcXHQ9IDA2NDQsXFxuMzgzMzpcXHRcXHRcXHRcXHQucHJvY19oYW5kbGVyXFx0PSBwcm9jX2RvaW50dmVjX2ppZmZpZXMsXFxuMzgzNDpcXHRcXHRcXHR9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjoxNDozMS40ODc5ODI3OTJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjY4NTE3MDM3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHNvbWUgY2hhbmdlcyBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGNvZGUsIHNwZWNpZmljYWxseSB3aXRoaW4gYG5ldC9jb3JlL25laWdoYm91ci5jYC4gVGhlIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdCBhcmU6IGBuZWlnaHRibF9kdW1wX2luZm9gLCB3aGljaCBoYW5kbGVzIGBSVE1fR0VUTkVJR0hUQkxgIGR1bXAgcmVxdWVzdHMgdmlhIHJ0bmV0bGluazsgYG5sX250YmxfcGFybV9wb2xpY3lgLCB1c2VkIGluIGBuZWlnaHRibF9zZXRgIGZvciBgUlRNX1NFVE5FSUdIVEJMYCBhbHNvIHZpYSBydG5ldGxpbms7IGFuZCBgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlYCwgd2hpY2ggaXMgY29ubmVjdGVkIHRvIHRoZSBgaW50ZXJ2YWxfcHJvYmVfdGltZV9tc2Agc3lzY3RsLiBTaW5jZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGV4cG9zZWQgdGhyb3VnaCBib3RoIHRoZSBzdGFuZGFyZCBydG5ldGxpbmsgaW50ZXJmYWNlIGFuZCBzeXNjdGwsIHRoZXkncmUgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLiBUaGlzIG1ha2VzIHRoZW0gcHJpbWUgY2FuZGlkYXRlcyBmb3IgZnV6emluZyAtIGRlZmluaXRlbHkgYFdvcnRoRnV6emluZzogdHJ1ZWAuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBmb2N1cyBzeW1ib2xzOiBJIG5lZWQgdG8gY29uY2VudHJhdGUgbXkgZnV6emluZyBlZmZvcnRzIG9uIGBuZWlnaHRibF9kdW1wX2luZm9gLCBgbmVpZ2h0Ymxfc2V0YCwgYW5kIGBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVgLlxuXG5GaW5hbGx5LCBiZWZvcmUgSSBnZXQgc3RhcnRlZCwgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEEgcXVpY2sgZ2xhbmNlIHJldmVhbHMgdGhhdCBgbmV0L2NvcmUvbmVpZ2hib3VyLmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19ORVRgIGlzIGVuYWJsZWQuIExldCdzIHZlcmlmeSB0aGF0IHF1aWNrbHkgYnkgY2hlY2tpbmcgdGhlIGBNYWtlZmlsZWAgaW4gYG5ldC9jb3JlL2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDk3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6MTQ6MzQuMTczMTU3MzUxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDU1NTU0NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmVpZ2hib3VyXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9NYWtlZmlsZT0xMj1vYmoteVxcdFxcdCAgICAgKz0gZGV2Lm8gZGV2X2FwaS5vIGRldl9hZGRyX2xpc3RzLm8gZHN0Lm8gbmV0ZXZlbnQubyBcXFxcXFxubmV0L2NvcmUvTWFrZWZpbGU6MTM6XFx0XFx0XFx0bmVpZ2hib3VyLm8gcnRuZXRsaW5rLm8gdXRpbHMubyBsaW5rX3dhdGNoLm8gZmlsdGVyLm8gXFxcXFxcbm5ldC9jb3JlL01ha2VmaWxlLTE0LVxcdFxcdFxcdHNvY2tfZGlhZy5vIGRldl9pb2N0bC5vIHRzby5vIHNvY2tfcmV1c2Vwb3J0Lm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjoxNDozNC4yNzg3MTgzOFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NDA3OTQ1NTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBOZWlnaGJvciBUYWJsZSAobmVpZ2hib3VyLm8pIEZ1enppbmcgU3VpdGFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBgbmVpZ2hib3VyLm9gIGlzIGRlZmluaXRlbHkgYnVpbHQgd2l0aGluIGBuZXQvY29yZS9gIGFzIGxvbmcgYXMgYENPTkZJR19ORVRgIGlzIGVuYWJsZWQsIHdoaWNoIGlzIHByZXR0eSBtdWNoIGd1YXJhbnRlZWQgaW4gYW55IG1vZGVybiBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBkb24ndCB0aGluayBJIGV2ZW4gbmVlZCB0byBjaGVjayBgQ09ORklHX1BST0NfU1lTQ1RMYCBvciBgQ09ORklHX1NZU0NUTGAgc2luY2UgYENPTkZJR19ORVRgIGlzIHRoZSBjcml0aWNhbCBwaWVjZSBoZXJlLlxuXG5Ob3csIGxldCdzIHZlcmlmeSB0aGUgc3ltYm9scyB3ZSdyZSBpbnRlcmVzdGVkIGluLiBXZSBoYXZlOiBgbmVpZ2h0YmxfZHVtcF9pbmZvYCwgYG5laWdodGJsX3NldGAsIGFuZCBgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhleSdyZSBzdGF0aWMgb3Igbm90LlxuXG5gbmVpZ2h0YmxfZHVtcF9pbmZvYCBpcyBzdGF0aWMsIHdoaWNoIGlzIHVzdWFsbHkgYSByZWQgZmxhZywgYnV0IGl0J3MgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyIGluIGBuZWlnaF9ydG5sX21zZ19oYW5kbGVyc2AuIFRoYXQgbWVhbnMgaXQgKndpbGwqIGhhdmUgYSBzeW1ib2wgaW4gYGthbGxzeW1zYCBhbmQgaW4gYHZtbGludXhgLCBzbyB0aGF0J3MgZ29vZC4gYG5laWdodGJsX3NldGAgaXMgYWxzbyBzdGF0aWMsIGJ1dCBpdCdzIGFzc2lnbmVkIHRvIGBkb2l0YCBpbiBgbmVpZ2hfcnRubF9tc2dfaGFuZGxlcnNgLCBzbyBpdCB3aWxsIGJlIHJlYWNoYWJsZSB0b28uIEZpbmFsbHksIGBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVgIGlzIHN0YXRpYywgYnV0IGFzc2lnbmVkIGluIGBuZWlnaF9zeXNjdGxfdGVtcGxhdGVgLiBPa2F5LCB0aGF0IG1ha2VzIGl0IHJlYWNoYWJsZSBhcyB3ZWxsLlxuXG5MZXQncyBkbyBhIGZpbmFsIHNhbml0eSBjaGVjaywgbWFrZSBzdXJlIHdlIGhhdmUgZXZlcnl0aGluZyByaWdodC4gRG9lcyBpdCBtZWV0IHRoZSBjcml0ZXJpYT9cblxuKiAgIFJlYWNoYWJpbGl0eTogWWVwLCBSVE5ldGxpbmsgKGBSVE1fR0VUTkVJR0hUQkxgIC8gYFJUTV9TRVRORUlHSFRCTGApIGFuZCB0aGUgYHN5c2N0bGAgaW50ZXJmYWNlIChgaW50ZXJ2YWxfcHJvYmVfdGltZV9tc2ApIGNvdmVyIGl0LlxuKiAgIGBXb3J0aEZ1enppbmcgPSB0cnVlYD8gWWVzLCBzZWVtcyBsaWtlIGEgZ29vZCBjYW5kaWRhdGUuXG4qICAgYEVuYWJsZUNvbmZpZ3MgPSBbXCJORVRcIl1gPyBDaGVjay5cbiogICBgRm9jdXNTeW1ib2xzID0gW1wibmVpZ2h0YmxfZHVtcF9pbmZvXCIsIFwibmVpZ2h0Ymxfc2V0XCIsIFwibmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlXCJdYD8gQ29uZmlybWVkLlxuKiAgIFJlYXNvbmluZzogSSd2ZSBwcm92aWRlZCBhIGNvbmNpc2UgcmF0aW9uYWxlLlxuXG5FdmVyeXRoaW5nIGNoZWNrcyBvdXQuIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTgwLCJPdXRwdXRUb2tlbnMiOjIwMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjoxNDozOC42ODY2NjcxNDNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTYzMjMxODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5laWdodGJsX2R1bXBfaW5mb1wiLFxuICAgIFwibmVpZ2h0Ymxfc2V0XCIsXG4gICAgXCJuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgbmVpZ2hib3VyIHRhYmxlIG1hbmFnZW1lbnQgaW4gbmV0L2NvcmUvbmVpZ2hib3VyLmMuIFNwZWNpZmljYWxseSwgaXQgZml4ZXMgbmV0bGluayBkdW1wIHBhZ2luYXRpb24gYW5kIGZpbHRlcmluZyAoaGFuZGxpbmcgYmxhY2tob2xlIG5ldGRldikgaW4gbmVpZ2h0YmxfZHVtcF9pbmZvKCksIGFkZHMgdXBwZXIgYm91bmQgcmFuZ2UgdmFsaWRhdGlvbiBmb3IgaW50ZXJ2YWxfcHJvYmVfdGltZV9tcyBpbiBubF9udGJsX3Bhcm1fcG9saWN5ICh1c2VkIGluIG5laWdodGJsX3NldCgpKSwgYW5kIHNldHMgYW4gdXBwZXIgYm91bmQgb24gc3lzY3RsIHdyaXRlcyB2aWEgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlKCkuIFRoZXNlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgdmlhIHJ0bmV0bGluayAoUlRNX0dFVE5FSUdIVEJMLCBSVE1fU0VUTkVJR0hUQkwpIGFuZCBwcm9jZnMgc3lzY3RsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5laWdodGJsX2R1bXBfaW5mb1wiLFxuICAgIFwibmVpZ2h0Ymxfc2V0XCIsXG4gICAgXCJuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgbmVpZ2hib3VyIHRhYmxlIG1hbmFnZW1lbnQgaW4gbmV0L2NvcmUvbmVpZ2hib3VyLmMuIFNwZWNpZmljYWxseSwgaXQgZml4ZXMgbmV0bGluayBkdW1wIHBhZ2luYXRpb24gYW5kIGZpbHRlcmluZyAoaGFuZGxpbmcgYmxhY2tob2xlIG5ldGRldikgaW4gbmVpZ2h0YmxfZHVtcF9pbmZvKCksIGFkZHMgdXBwZXIgYm91bmQgcmFuZ2UgdmFsaWRhdGlvbiBmb3IgaW50ZXJ2YWxfcHJvYmVfdGltZV9tcyBpbiBubF9udGJsX3Bhcm1fcG9saWN5ICh1c2VkIGluIG5laWdodGJsX3NldCgpKSwgYW5kIHNldHMgYW4gdXBwZXIgYm91bmQgb24gc3lzY3RsIHdyaXRlcyB2aWEgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlKCkuIFRoZXNlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgdmlhIHJ0bmV0bGluayAoUlRNX0dFVE5FSUdIVEJMLCBSVE1fU0VUTkVJR0hUQkwpIGFuZCBwcm9jZnMgc3lzY3RsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjoxNDozOC44MDI5OTc1NDFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxODU4NjQzNTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6MTQ6MzguODAzNTM2ODcxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjE4NTgwOTU3OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBpbnB1dCB2YWxpZGF0aW9uIGFuZCBuZXRsaW5rIGR1bXAgcmVzdW1wdGlvbiBsb2dpYyBpbiBuZXQvY29yZS9uZWlnaGJvdXIuYzpcXG4xLiBJdCBhZGRzIGFuIHVwcGVyIGJvdW5kIHZhbGlkYXRpb24gKGBOVEJMX1BBUk1fTVNfTUFYYCkgZm9yIGBORFRQQV9JTlRFUlZBTF9QUk9CRV9USU1FX01TYCB2aWEgbmV0bGluayBwb2xpY3kgYW5kIHN5c2N0bCAoYG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZWApLlxcbjIuIEl0IGZpeGVzIHRhYmxlIGFuZCBwYXJhbWV0ZXIgZHVtcGluZyBpbiBgbmVpZ2h0YmxfZHVtcF9pbmZvYCBhY3Jvc3MgbXVsdGktcGFydCBuZXRsaW5rIGR1bXBzIGJ5IHRyYWNraW5nIGBkZWZhdWx0X3NraXBgIGluIGBjYi1cXHUwMDNlYXJnc1syXWAsIHByb3Blcmx5IGNvbnRpbnVpbmcgbGlzdCBpdGVyYXRpb24sIGFuZCBza2lwcGluZyBgYmxhY2tob2xlX25ldGRldmAuXFxuXFxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgbm9yIGRvIHRoZXkgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmcgb3IgYnVmZmVyIGNvbnRlbnRzIHRvIHVzZXJzcGFjZS4gQWxsIHZhcmlhYmxlcyAoYG1pbmAsIGBtYXhgLCBgZGVmYXVsdF9za2lwYCwgYGNiLVxcdTAwM2VhcmdzYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBBbnkgcG90ZW50aWFsIGxvZ2ljIGVycm9ycyBvciBvdXQtb2YtYm91bmRzIGlzc3VlcyBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL2RlYnVnZ2luZyBidWlsZHMuIEhlbmNlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2YmZhNGJhNjc1NjYzMGYwNzlmY2I1YmQ5YmI0NjEzYWFiMjg1MjZiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAwMjoxMzowMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL25laWdoYm91ci5jIGIvbmV0L2NvcmUvbmVpZ2hib3VyLmNcbmluZGV4IDEzNDljMGVlZGI2NDIuLjE1ZWVkYWVmNjU3ODEgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9uZWlnaGJvdXIuY1xuKysrIGIvbmV0L2NvcmUvbmVpZ2hib3VyLmNcbkBAIC0yMzU5LDYgKzIzNTksMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5sX25laWdodGJsX3BvbGljeVtORFRBX01BWCsxXSA9IHtcbiBcdFtORFRBX1BBUk1TXVx0XHQ9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sXG4gfTtcbiBcbisjZGVmaW5lIE5UQkxfUEFSTV9NU19NQVhcdCgyNCAqIDYwICogNjAgKiBNU0VDX1BFUl9TRUMpXG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRsaW5rX3JhbmdlX3ZhbGlkYXRpb24gbmxfbnRibF9wYXJtX21zX3JhbmdlID0ge1xuK1x0Lm1pbiA9IDEsXG4rXHQubWF4ID0gTlRCTF9QQVJNX01TX01BWCxcbit9O1xuK1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBubF9udGJsX3Bhcm1fcG9saWN5W05EVFBBX01BWCsxXSA9IHtcbiBcdFtORFRQQV9JRklOREVYXVx0XHRcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbiBcdFtORFRQQV9RVUVVRV9MRU5dXHRcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbkBAIC0yMzc1LDcgKzIzODIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmxfbnRibF9wYXJtX3BvbGljeVtORFRQQV9NQVgrMV0gPSB7XG4gXHRbTkRUUEFfQU5ZQ0FTVF9ERUxBWV1cdFx0PSB7IC50eXBlID0gTkxBX1U2NCB9LFxuIFx0W05EVFBBX1BST1hZX0RFTEFZXVx0XHQ9IHsgLnR5cGUgPSBOTEFfVTY0IH0sXG4gXHRbTkRUUEFfTE9DS1RJTUVdXHRcdD0geyAudHlwZSA9IE5MQV9VNjQgfSxcbi1cdFtORFRQQV9JTlRFUlZBTF9QUk9CRV9USU1FX01TXVx0PSB7IC50eXBlID0gTkxBX1U2NCwgLm1pbiA9IDEgfSxcbitcdFtORFRQQV9JTlRFUlZBTF9QUk9CRV9USU1FX01TXVx0PSBOTEFfUE9MSUNZX0ZVTExfUkFOR0UoTkxBX1U2NCxcbitcdFx0XHRcdFx0XHRcdFx0XHUwMDI2bmxfbnRibF9wYXJtX21zX3JhbmdlKSxcbiB9O1xuIFxuIHN0YXRpYyBpbnQgbmVpZ2h0Ymxfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuQEAgLTI1NzksOSArMjU4NywxMCBAQCBzdGF0aWMgaW50IG5laWdodGJsX2R1bXBfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGggPSBjYi1cdTAwM2VubGg7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spO1xuK1x0aW50IGRlZmF1bHRfc2tpcCA9IGNiLVx1MDAzZWFyZ3NbMl07XG4rXHRpbnQgbmVpZ2hfc2tpcCA9IGNiLVx1MDAzZWFyZ3NbMV07XG4gXHRpbnQgZmFtaWx5LCB0aWR4LCBuaWR4ID0gMDtcbiBcdGludCB0Ymxfc2tpcCA9IGNiLVx1MDAzZWFyZ3NbMF07XG4tXHRpbnQgbmVpZ2hfc2tpcCA9IGNiLVx1MDAzZWFyZ3NbMV07XG4gXHRzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibDtcbiBcbiBcdGlmIChjYi1cdTAwM2VzdHJpY3RfY2hlY2spIHtcbkBAIC0yNjA1LDE3ICsyNjE0LDIyIEBAIHN0YXRpYyBpbnQgbmVpZ2h0YmxfZHVtcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiBcdFx0aWYgKHRpZHggXHUwMDNjIHRibF9za2lwIHx8IChmYW1pbHkgXHUwMDI2XHUwMDI2IHRibC1cdTAwM2VmYW1pbHkgIT0gZmFtaWx5KSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0aWYgKG5laWdodGJsX2ZpbGxfaW5mbyhza2IsIHRibCwgTkVUTElOS19DQihjYi1cdTAwM2Vza2IpLnBvcnRpZCxcbitcdFx0aWYgKCFkZWZhdWx0X3NraXAgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBuZWlnaHRibF9maWxsX2luZm8oc2tiLCB0YmwsIE5FVExJTktfQ0IoY2ItXHUwMDNlc2tiKS5wb3J0aWQsXG4gXHRcdFx0XHQgICAgICAgbmxoLVx1MDAzZW5sbXNnX3NlcSwgUlRNX05FV05FSUdIVEJMLFxuIFx0XHRcdFx0ICAgICAgIE5MTV9GX01VTFRJKSBcdTAwM2MgMClcbiBcdFx0XHRicmVhaztcbiBcbi1cdFx0bmlkeCA9IDA7XG4tXHRcdHAgPSBsaXN0X25leHRfZW50cnkoXHUwMDI2dGJsLVx1MDAzZXBhcm1zLCBsaXN0KTtcbi1cdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tX3JjdShwLCBcdTAwMjZ0YmwtXHUwMDNlcGFybXNfbGlzdCwgbGlzdCkge1xuK1x0XHRkZWZhdWx0X3NraXAgPSAxO1xuK1xuK1x0XHRwID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZ0YmwtXHUwMDNlcGFybXNfbGlzdCwgc3RydWN0IG5laWdoX3Bhcm1zLCBsaXN0KTtcbitcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yY3UocCwgXHUwMDI2dGJsLVx1MDAzZXBhcm1zX2xpc3QsIGxpc3QpIHtcbiBcdFx0XHRpZiAoIW5ldF9lcShuZWlnaF9wYXJtc19uZXQocCksIG5ldCkpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbitcdFx0XHRpZiAocC1cdTAwM2VkZXYgPT0gYmxhY2tob2xlX25ldGRldilcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1xuIFx0XHRcdGlmIChuaWR4IFx1MDAzYyBuZWlnaF9za2lwKVxuIFx0XHRcdFx0Z290byBuZXh0O1xuIFxuQEAgLTI2MzAsMTIgKzI2NDQsMTUgQEAgc3RhdGljIGludCBuZWlnaHRibF9kdW1wX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0XHR9XG4gXG4gXHRcdG5laWdoX3NraXAgPSAwO1xuK1x0XHRuaWR4ID0gMDtcbitcdFx0ZGVmYXVsdF9za2lwID0gMDtcbiBcdH1cbiBvdXQ6XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdGNiLVx1MDAzZWFyZ3NbMF0gPSB0aWR4O1xuIFx0Y2ItXHUwMDNlYXJnc1sxXSA9IG5pZHg7XG4rXHRjYi1cdTAwM2VhcmdzWzJdID0gZGVmYXVsdF9za2lwO1xuIFxuIFx0cmV0dXJuIHNrYi1cdTAwM2VsZW47XG4gfVxuQEAgLTM2NjksMTIgKzM2ODYsMTMgQEAgc3RhdGljIGludCBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmUoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqY3RsLFxuIFx0XHRcdFx0XHRcdCAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXG4ge1xuIFx0c3RydWN0IGN0bF90YWJsZSB0bXAgPSAqY3RsO1xuLVx0aW50IHJldDtcbitcdGludCByZXQsIG1pbiwgbWF4O1xuIFxuLVx0aW50IG1pbiA9IG1zZWNzX3RvX2ppZmZpZXMoMSk7XG4rXHRtaW4gPSBtc2Vjc190b19qaWZmaWVzKDEpO1xuK1x0bWF4ID0gbXNlY3NfdG9famlmZmllcyhOVEJMX1BBUk1fTVNfTUFYKTtcbiBcbiBcdHRtcC5leHRyYTEgPSBcdTAwMjZtaW47XG4tXHR0bXAuZXh0cmEyID0gTlVMTDtcbitcdHRtcC5leHRyYTIgPSBcdTAwMjZtYXg7XG4gXG4gXHRyZXQgPSBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4KFx1MDAyNnRtcCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7XG4gXHRuZWlnaF9wcm9jX3VwZGF0ZShjdGwsIHdyaXRlKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjE0OjM4LjgwMzUzNzczMVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MDE5OTA2NzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIFBvdGVudGlhbCBLTVNBTiBGdXp6aW5nIE5lZWRzKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGFuZCBzZWUgaWYgS01TQU4gZnV6emluZyBpcyB3YXJyYW50ZWQuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBtb2RpZmljYXRpb25zIHdpdGhpbiBgbmV0L2NvcmUvbmVpZ2hib3VyLmNgLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBuZXR3b3JrIG5laWdoYm9yIG1hbmFnZW1lbnQsIHdoaWNoIGlzIGFsd2F5cyBpbnRlcmVzdGluZyBmcm9tIGEgc2VjdXJpdHkgcGVyc3BlY3RpdmUuXG5cbkZpcnN0LCBJIHNlZSBhIGNoYW5nZSBpbiBgbmxfbnRibF9wYXJtX3BvbGljeWAuIFRoZSBvcmlnaW5hbCBgLm1pbiA9IDFgIGZvciBgTkRUUEFfSU5URVJWQUxfUFJPQkVfVElNRV9NU2AgaXMgcmVwbGFjZWQgd2l0aCBgTkxBX1BPTElDWV9GVUxMX1JBTkdFYCwgbm93IHNldHRpbmcgYSBtb3JlIGV4cGxpY2l0IGAubWF4ID0gTlRCTF9QQVJNX01TX01BWGAsIHdoaWNoIGlzIGEgcmVhc29uYWJsZSB1cHBlciBib3VuZC4gR29vZDsgbWFraW5nIHJhbmdlcyBjbGVhcmVyIHJlZHVjZXMgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgaXNzdWVzIG9yIG90aGVyIHVuZXhwZWN0ZWQgYmVoYXZpb3Igd2hlbiBkZWFsaW5nIHdpdGggdXNlci1wcm92aWRlZCB2YWx1ZXMuIFRoaXMgaXMgbm90IGluaGVyZW50bHkgcHJvYmxlbWF0aWMsIGJ1dCB0aGUgZXhwYW5kZWQgcmFuZ2UgY291bGQgcmV2ZWFsIGV4aXN0aW5nLCBwcmV2aW91c2x5IG1hc2tlZCwgZmxhd3MuXG5cbk5leHQsIGBuZWlnaHRibF9kdW1wX2luZm9gIGhhcyB1bmRlcmdvbmUgc29tZSBhZGp1c3RtZW50cy4gSSBzZWUgdGhlIGludHJvZHVjdGlvbiBvZiBgZGVmYXVsdF9za2lwYCBmb3Igc3RhdGUgdHJhY2tpbmcgZHVyaW5nIGR1bXBpbmcsIGFuZCBjaGVja3MgZm9yIGl0IGJlZm9yZSBjYWxsaW5nIGBuZWlnaHRibF9maWxsX2luZm9gLiBUaGlzIGxpa2VseSBtZWFucyB0aGVyZSdzIHNvbWUgb3B0aW1pemF0aW9uIGdvaW5nIG9uIG9yIHRoZSBjb2RlIGlzIHRyeWluZyB0byBhdm9pZCByZWR1bmRhbnQgZGF0YSBkdW1wcy4gVGhlIHVzZSBvZiBgbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yY3VgIGluc3RlYWQgb2YgYGxpc3RfbmV4dF9lbnRyeWAgc3VnZ2VzdHMgb3B0aW1pemF0aW9uIG9yIGltcHJvdmVkIHRocmVhZCBzYWZldHkgd2hlbiBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgbmVpZ2hib3IgcGFyYW1ldGVycy4gVGhlIGFkZGVkIGNoZWNrIGZvciBgYmxhY2tob2xlX25ldGRldmAgaXMgbGlrZWx5IGEgZmlsdGVyIHRvIGV4Y2x1ZGUgc3BlY2lmaWMgZGV2aWNlcy4gVGhlIHJlc2V0dGluZyBvZiB2YXJpYWJsZXMgYXQgdGhlIGVuZCBvZiB0YWJsZSBwcm9jZXNzaW5nIGlzIHN0YW5kYXJkIGNsZWFuLXVwLiBBbGwgb2YgdGhpcyBpcyBtb3JlIG9yIGxlc3MgZmluZSwgb24gdGhlIHN1cmZhY2UsIGJ1dCB0aGUgYWRkaXRpb24gb2Ygc3RhdGUgdmFyaWFibGVzIGFuZCBtb3JlIGNvbXBsZXggbGlzdCBpdGVyYXRpb25zIG9mdGVuIGludHJvZHVjZXMgb3Bwb3J0dW5pdGllcyBmb3Igc3VidGxlIGVycm9ycy4gTXkgbWFpbiBjb25jZXJuIGhlcmUgaXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIHdpdGhpbiB0aGVzZSBjaGFuZ2VzLlxuXG5MYXN0bHksIGBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVgIGlzIHNldHRpbmcgYG1heGAgYmVmb3JlIGNhbGxpbmcgYHByb2NfZG9pbnR2ZWNfbXNfamlmZmllc19taW5tYXhgLiBBZ2Fpbiwgc2Vuc2libGUgcmFuZ2UgbGltaXRpbmcuXG5cbk15IGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhlIG1vc3QgbGlrZWx5IGFyZWEgZm9yIHBvdGVudGlhbCBpc3N1ZXMgbGllcyB3aXRoaW4gdGhlIGBuZWlnaHRibF9kdW1wX2luZm9gIGZ1bmN0aW9uIGFuZCBpbnRlcmFjdGlvbnMgd2l0aCBgbmVpZ2h0YmxfZmlsbF9pbmZvYCBhbmQgYG5laWdodGJsX2ZpbGxfcGFybXNgLiBUaGVyZSBtaWdodCBiZSBzdWJ0bGUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGluZm9ybWF0aW9uIGxlYWtzLCBvciBwYWRkaW5nIGlzc3VlcywgcGVyaGFwcyBsaW5rZWQgdG8gdGhlIGBkZWZhdWx0X3NraXBgIHZhcmlhYmxlIG9yIHRoZSBsaXN0IGl0ZXJhdGlvbiBjaGFuZ2VzLiBJIHdhbnQgdG8gdHJhY2UgdGhlIGRhdGEgZmxvdyB0aHJvdWdoIHRob3NlIGZ1bmN0aW9ucyB2ZXJ5IGNhcmVmdWxseS4gVGhlIGNvbnRleHQgc3Vycm91bmRpbmcgdGhvc2UgY2hhbmdlcyBpcyBjcnVjaWFsLiBUbyBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0J3MgZ29pbmcgb24sIEknbGwgdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBleGFtaW5lIHRoZSBgbmV0L2NvcmUvbmVpZ2hib3VyLmNgIGNvZGUgYmFzZSBtb3JlIGNsb3NlbHkgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0LiBUaGlzIHNob3VsZCByZXZlYWwgdGhlIGxldmVsIG9mIHJpc2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNjEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MjksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjoxNDo0NS44MjM0NDgzOTVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMjE0NDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5laWdodGJsX2ZpbGxfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL25laWdoYm91ci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL25laWdoYm91ci5jPTIwMTA9c3RhdGljIGludCBuZWlnaF9hZGQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0yMTg5LVxcbm5ldC9jb3JlL25laWdoYm91ci5jOjIxOTA6c3RhdGljIGludCBuZWlnaHRibF9maWxsX3Bhcm1zKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZWlnaF9wYXJtcyAqcGFybXMpXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMjE5MS17XFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0yMjM5LVxcbm5ldC9jb3JlL25laWdoYm91ci5jOjIyNDA6c3RhdGljIGludCBuZWlnaHRibF9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5laWdoX3RhYmxlICp0YmwsXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMjI0MS1cXHRcXHRcXHQgICAgICB1MzIgcGlkLCB1MzIgc2VxLCBpbnQgdHlwZSwgaW50IGZsYWdzKVxcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMjMxMi1cXHRCVUdfT04odGJsLVxcdTAwM2VwYXJtcy5kZXYpO1xcbm5ldC9jb3JlL25laWdoYm91ci5jOjIzMTM6XFx0aWYgKG5laWdodGJsX2ZpbGxfcGFybXMoc2tiLCBcXHUwMDI2dGJsLVxcdTAwM2VwYXJtcykgXFx1MDAzYyAwKVxcbm5ldC9jb3JlL25laWdoYm91ci5jLTIzMTQtXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0yMzIzLVxcbm5ldC9jb3JlL25laWdoYm91ci5jOjIzMjQ6c3RhdGljIGludCBuZWlnaHRibF9maWxsX3BhcmFtX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0yMzI1LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCxcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jLTIzNDItXFx0aWYgKG5sYV9wdXRfc3RyaW5nKHNrYiwgTkRUQV9OQU1FLCB0YmwtXFx1MDAzZWlkKSBcXHUwMDNjIDAgfHxcXG5uZXQvY29yZS9uZWlnaGJvdXIuYzoyMzQzOlxcdCAgICBuZWlnaHRibF9maWxsX3Bhcm1zKHNrYiwgcGFybXMpIFxcdTAwM2MgMClcXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0yMzQ0LVxcdFxcdGdvdG8gZXJyb3V0O1xcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmM9MjU4Nj1zdGF0aWMgaW50IG5laWdodGJsX2R1bXBfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0yNjE3LVxcdFxcdGlmICghZGVmYXVsdF9za2lwIFxcdTAwMjZcXHUwMDI2XFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MjYxODpcXHRcXHQgICAgbmVpZ2h0YmxfZmlsbF9pbmZvKHNrYiwgdGJsLCBORVRMSU5LX0NCKGNiLVxcdTAwM2Vza2IpLnBvcnRpZCxcXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0yNjE5LVxcdFxcdFxcdFxcdCAgICAgICBubGgtXFx1MDAzZW5sbXNnX3NlcSwgUlRNX05FV05FSUdIVEJMLFxcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMjYzNS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYzoyNjM2OlxcdFxcdFxcdGlmIChuZWlnaHRibF9maWxsX3BhcmFtX2luZm8oc2tiLCB0YmwsIHAsXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMjYzNy1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIE5FVExJTktfQ0IoY2ItXFx1MDAzZXNrYikucG9ydGlkLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjoxNDo0NS45MDM2Njk4NDRaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjY3Mzc4ODc2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgY29kZSBzZWdtZW50cyBhcyBpZiB0aGV5IHdlcmUgbXkgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRpdmluZyBpbnRvIE5laWdoYm91ciBEaXNjb3Zlcnk6IEEgRm9jdXNlZCBFeGFtaW5hdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8gemVybyBpbiBvbiBzcGVjaWZpYyBzZWN0aW9ucyB3aXRoaW4gYG5ldC9jb3JlL25laWdoYm91ci5jYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdGFrZSBhIGNsb3NlIGxvb2sgYXQgbGluZXMgMjE5MCB0byAyMjYwIGFuZCB0aGVuIGp1bXAgdG8gbGluZXMgMjU4MCB0byAyNjYwLiBUaGUgZmlyc3QgYmxvY2sgbGlrZWx5IGRlYWxzIHdpdGggc29tZSBjcml0aWNhbCBhc3BlY3Qgb2YgbmVpZ2hib3VyIGRpc2NvdmVyeSDigJMgbWF5YmUgc29tZSBraW5kIG9mIGNhY2hlIG1hbmFnZW1lbnQsIGEgc3BlY2lmaWMgc3RhdGUgdHJhbnNpdGlvbiwgb3IgcGVyaGFwcyB0aGUgaGFuZGxpbmcgb2YgYSBwYXJ0aWN1bGFyIHByb2JlIG1lY2hhbmlzbS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBjb2RlIGlzIGhhbmRsaW5nIHRoZXNlIGV2ZW50cy4gVGhlbiBJJ2xsIGNoZWNrIHRoZSBzZWNvbmQgYmxvY2sgYXMgaXQncyBsaWtlbHkgcGFydCBvZiB0aGUgc2FtZSBmdW5jdGlvbi4gSSdtIGd1ZXNzaW5nIHRoYXQgcGFydCBwcm9iYWJseSBoYW5kbGVzIGEgZGlmZmVyZW50IGFzcGVjdCBvZiB0aGlzIHByb2Nlc3Mgc3VjaCBhcyBhIHJldHJ5LCBvciB0aW1lb3V0LiBQZXJoYXBzIGl0J3MgZXZlbiByZWxhdGVkIHRvIGhhbmRsaW5nIGRpZmZlcmVudCBhZGRyZXNzIGZhbWlsaWVzIG9yIHByb3RvY29sIGludGVyYWN0aW9ucy4gSSdsbCBuZWVkIHRvIHNlZSBpZiBteSBoeXBvdGhlc2VzIGFib3V0IHRoZXNlIHNlY3Rpb25zIGFyZSBvbiB0YXJnZXQuIEknbSBjdXJpb3VzIHRvIHNlZSB3aGF0IG51YW5jZXMgYXJlIGNvbnRhaW5lZCBpbiB0aGlzIGNvZGUuIFRpbWUgdG8gZGlnIGluIGFuZCBtYWtlIHN1cmUgdGhpcyBpcyB3aGF0IEkgYmVsaWV2ZSBpdCBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI5NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjE0OjQ4LjU3NzQ2MTgyNFoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTMzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvbmVpZ2hib3VyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjU4MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjU4MDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yNTgxOlxcdFxcdH1cXG4yNTgyOlxcdFxcbjI1ODM6XFx0XFx0cmV0dXJuIDA7XFxuMjU4NDpcXHR9XFxuMjU4NTpcXHRcXG4yNTg2OlxcdHN0YXRpYyBpbnQgbmVpZ2h0YmxfZHVtcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4yNTg3OlxcdHtcXG4yNTg4OlxcdFxcdGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoID0gY2ItXFx1MDAzZW5saDtcXG4yNTg5OlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spO1xcbjI1OTA6XFx0XFx0aW50IGRlZmF1bHRfc2tpcCA9IGNiLVxcdTAwM2VhcmdzWzJdO1xcbjI1OTE6XFx0XFx0aW50IG5laWdoX3NraXAgPSBjYi1cXHUwMDNlYXJnc1sxXTtcXG4yNTkyOlxcdFxcdGludCBmYW1pbHksIHRpZHgsIG5pZHggPSAwO1xcbjI1OTM6XFx0XFx0aW50IHRibF9za2lwID0gY2ItXFx1MDAzZWFyZ3NbMF07XFxuMjU5NDpcXHRcXHRzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibDtcXG4yNTk1OlxcdFxcbjI1OTY6XFx0XFx0aWYgKGNiLVxcdTAwM2VzdHJpY3RfY2hlY2spIHtcXG4yNTk3OlxcdFxcdFxcdGludCBlcnIgPSBuZWlnaHRibF92YWxpZF9kdW1wX2luZm8obmxoLCBjYi1cXHUwMDNlZXh0YWNrKTtcXG4yNTk4OlxcdFxcbjI1OTk6XFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuMjYwMDpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjI2MDE6XFx0XFx0fVxcbjI2MDI6XFx0XFxuMjYwMzpcXHRcXHRmYW1pbHkgPSAoKHN0cnVjdCBydGdlbm1zZyAqKW5sbXNnX2RhdGEobmxoKSktXFx1MDAzZXJ0Z2VuX2ZhbWlseTtcXG4yNjA0OlxcdFxcbjI2MDU6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjI2MDY6XFx0XFxuMjYwNzpcXHRcXHRmb3IgKHRpZHggPSAwOyB0aWR4IFxcdTAwM2MgTkVJR0hfTlJfVEFCTEVTOyB0aWR4KyspIHtcXG4yNjA4OlxcdFxcdFxcdHN0cnVjdCBuZWlnaF9wYXJtcyAqcDtcXG4yNjA5OlxcdFxcbjI2MTA6XFx0XFx0XFx0dGJsID0gcmN1X2RlcmVmZXJlbmNlKG5laWdoX3RhYmxlc1t0aWR4XSk7XFxuMjYxMTpcXHRcXHRcXHRpZiAoIXRibClcXG4yNjEyOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI2MTM6XFx0XFxuMjYxNDpcXHRcXHRcXHRpZiAodGlkeCBcXHUwMDNjIHRibF9za2lwIHx8IChmYW1pbHkgXFx1MDAyNlxcdTAwMjYgdGJsLVxcdTAwM2VmYW1pbHkgIT0gZmFtaWx5KSlcXG4yNjE1OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI2MTY6XFx0XFxuMjYxNzpcXHRcXHRcXHRpZiAoIWRlZmF1bHRfc2tpcCBcXHUwMDI2XFx1MDAyNlxcbjI2MTg6XFx0XFx0XFx0ICAgIG5laWdodGJsX2ZpbGxfaW5mbyhza2IsIHRibCwgTkVUTElOS19DQihjYi1cXHUwMDNlc2tiKS5wb3J0aWQsXFxuMjYxOTpcXHRcXHRcXHRcXHRcXHQgICAgICAgbmxoLVxcdTAwM2VubG1zZ19zZXEsIFJUTV9ORVdORUlHSFRCTCxcXG4yNjIwOlxcdFxcdFxcdFxcdFxcdCAgICAgICBOTE1fRl9NVUxUSSkgXFx1MDAzYyAwKVxcbjI2MjE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjYyMjpcXHRcXG4yNjIzOlxcdFxcdFxcdGRlZmF1bHRfc2tpcCA9IDE7XFxuMjYyNDpcXHRcXG4yNjI1OlxcdFxcdFxcdHAgPSBsaXN0X2ZpcnN0X2VudHJ5KFxcdTAwMjZ0YmwtXFx1MDAzZXBhcm1zX2xpc3QsIHN0cnVjdCBuZWlnaF9wYXJtcywgbGlzdCk7XFxuMjYyNjpcXHRcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShwLCBcXHUwMDI2dGJsLVxcdTAwM2VwYXJtc19saXN0LCBsaXN0KSB7XFxuMjYyNzpcXHRcXHRcXHRcXHRpZiAoIW5ldF9lcShuZWlnaF9wYXJtc19uZXQocCksIG5ldCkpXFxuMjYyODpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yNjI5OlxcdFxcbjI2MzA6XFx0XFx0XFx0XFx0aWYgKHAtXFx1MDAzZWRldiA9PSBibGFja2hvbGVfbmV0ZGV2KVxcbjI2MzE6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjYzMjpcXHRcXG4yNjMzOlxcdFxcdFxcdFxcdGlmIChuaWR4IFxcdTAwM2MgbmVpZ2hfc2tpcClcXG4yNjM0OlxcdFxcdFxcdFxcdFxcdGdvdG8gbmV4dDtcXG4yNjM1OlxcdFxcbjI2MzY6XFx0XFx0XFx0XFx0aWYgKG5laWdodGJsX2ZpbGxfcGFyYW1faW5mbyhza2IsIHRibCwgcCxcXG4yNjM3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgTkVUTElOS19DQihjYi1cXHUwMDNlc2tiKS5wb3J0aWQsXFxuMjYzODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIG5saC1cXHUwMDNlbmxtc2dfc2VxLFxcbjI2Mzk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBSVE1fTkVXTkVJR0hUQkwsXFxuMjY0MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIE5MTV9GX01VTFRJKSBcXHUwMDNjIDApXFxuMjY0MTpcXHRcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4yNjQyOlxcdFxcdFxcdG5leHQ6XFxuMjY0MzpcXHRcXHRcXHRcXHRuaWR4Kys7XFxuMjY0NDpcXHRcXHRcXHR9XFxuMjY0NTpcXHRcXG4yNjQ2OlxcdFxcdFxcdG5laWdoX3NraXAgPSAwO1xcbjI2NDc6XFx0XFx0XFx0bmlkeCA9IDA7XFxuMjY0ODpcXHRcXHRcXHRkZWZhdWx0X3NraXAgPSAwO1xcbjI2NDk6XFx0XFx0fVxcbjI2NTA6XFx0b3V0OlxcbjI2NTE6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMjY1MjpcXHRcXG4yNjUzOlxcdFxcdGNiLVxcdTAwM2VhcmdzWzBdID0gdGlkeDtcXG4yNjU0OlxcdFxcdGNiLVxcdTAwM2VhcmdzWzFdID0gbmlkeDtcXG4yNjU1OlxcdFxcdGNiLVxcdTAwM2VhcmdzWzJdID0gZGVmYXVsdF9za2lwO1xcbjI2NTY6XFx0XFxuMjY1NzpcXHRcXHRyZXR1cm4gc2tiLVxcdTAwM2VsZW47XFxuMjY1ODpcXHR9XFxuMjY1OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6MTQ6NDguNTc3ODE4MzE0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMTcxNjk1MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyB0aGUgc3VtbWFyeSwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBhbmQgdGhpcyBpcyBwYXJ0IG9mIGEgZGVidWdnaW5nL2FuYWx5c2lzIHByb2Nlc3M6XG5cbioqRGl2aW5nIERlZXBlciBpbnRvIHRoZSBKaWZmaWVzIENhbGN1bGF0aW9uKipcblxuT2theSwgSSd2ZSBnb3QgYSBodW5jaCBhYm91dCB0aGUgaXNzdWUsIGFuZCBJIHRoaW5rIEkga25vdyB3aGVyZSB0byBmb2N1cyBteSBhdHRlbnRpb24uIEl0J3MgdGltZSB0byBkb3VibGUtY2hlY2sgdGhlIGBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVgIGZ1bmN0aW9uLiBJIHJlbWVtYmVyIHRoaXMgb25lIGRlYWxpbmcgd2l0aCBob3cgd2UgY29udmVydCB0aGUgbWlsbGlzZWNvbmRzIHZhbHVlIHRvIGppZmZpZXMgYW5kIGVuc3VyaW5nIHRoZSBvdXRjb21lIGlzIGFsd2F5cyBwb3NpdGl2ZS4gQSBwb3RlbnRpYWwgbmVnYXRpdmUgamlmZmllcyB2YWx1ZSBpcyBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBjYXVzZWQgYnkgYW4gaW50ZWdlciBvdmVyZmxvdy4gSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgb3ZlcmZsb3cgaXNzdWUgaXNuJ3Qgd2hlcmUgdGhpbmdzIGFyZSBmYWxsaW5nIG92ZXIuIEl0J3MgdGltZSB0byBkaWcgaW50byB0aGUgbG9naWMgYW5kIHNlZSBpZiBhbnl0aGluZyBqdW1wcyBvdXQuIEkgd2lsbCBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0cyBoYW5kbGluZyBvZiBwb3RlbnRpYWwgbmVnYXRpdmUgdmFsdWVzIGlzIHNvdW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzYxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjoxNDo1MC43OTQ5OTAyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2Nzk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9uZWlnaGJvdXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNjcwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNjcwOlxcdHN0YXRpYyBpbnQgbmVpZ2hfcHJvY19kb2ludHZlY196ZXJvX2ludG1heChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSxcXG4zNjcxOlxcdFxcdFxcdFxcdFxcdFxcdCAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLFxcbjM2NzI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgbG9mZl90ICpwcG9zKVxcbjM2NzM6XFx0e1xcbjM2NzQ6XFx0XFx0c3RydWN0IGN0bF90YWJsZSB0bXAgPSAqY3RsO1xcbjM2NzU6XFx0XFx0aW50IHJldDtcXG4zNjc2OlxcdFxcbjM2Nzc6XFx0XFx0dG1wLmV4dHJhMSA9IFNZU0NUTF9aRVJPO1xcbjM2Nzg6XFx0XFx0dG1wLmV4dHJhMiA9IFNZU0NUTF9JTlRfTUFYO1xcbjM2Nzk6XFx0XFxuMzY4MDpcXHRcXHRyZXQgPSBwcm9jX2RvaW50dmVjX21pbm1heChcXHUwMDI2dG1wLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTtcXG4zNjgxOlxcdFxcdG5laWdoX3Byb2NfdXBkYXRlKGN0bCwgd3JpdGUpO1xcbjM2ODI6XFx0XFx0cmV0dXJuIHJldDtcXG4zNjgzOlxcdH1cXG4zNjg0OlxcdFxcbjM2ODU6XFx0c3RhdGljIGludCBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmUoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqY3RsLCBpbnQgd3JpdGUsXFxuMzY4NjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKVxcbjM2ODc6XFx0e1xcbjM2ODg6XFx0XFx0c3RydWN0IGN0bF90YWJsZSB0bXAgPSAqY3RsO1xcbjM2ODk6XFx0XFx0aW50IHJldCwgbWluLCBtYXg7XFxuMzY5MDpcXHRcXG4zNjkxOlxcdFxcdG1pbiA9IG1zZWNzX3RvX2ppZmZpZXMoMSk7XFxuMzY5MjpcXHRcXHRtYXggPSBtc2Vjc190b19qaWZmaWVzKE5UQkxfUEFSTV9NU19NQVgpO1xcbjM2OTM6XFx0XFxuMzY5NDpcXHRcXHR0bXAuZXh0cmExID0gXFx1MDAyNm1pbjtcXG4zNjk1OlxcdFxcdHRtcC5leHRyYTIgPSBcXHUwMDI2bWF4O1xcbjM2OTY6XFx0XFxuMzY5NzpcXHRcXHRyZXQgPSBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4KFxcdTAwMjZ0bXAsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpO1xcbjM2OTg6XFx0XFx0bmVpZ2hfcHJvY191cGRhdGUoY3RsLCB3cml0ZSk7XFxuMzY5OTpcXHRcXHRyZXR1cm4gcmV0O1xcbjM3MDA6XFx0fVxcbjM3MDE6XFx0XFxuMzcwMjpcXHRpbnQgbmVpZ2hfcHJvY19kb2ludHZlYyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSwgdm9pZCAqYnVmZmVyLFxcbjM3MDM6XFx0XFx0XFx0XFx0c2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXFxuMzcwNDpcXHR7XFxuMzcwNTpcXHRcXHRpbnQgcmV0ID0gcHJvY19kb2ludHZlYyhjdGwsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpO1xcbjM3MDY6XFx0XFxuMzcwNzpcXHRcXHRuZWlnaF9wcm9jX3VwZGF0ZShjdGwsIHdyaXRlKTtcXG4zNzA4OlxcdFxcdHJldHVybiByZXQ7XFxuMzcwOTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjE0OjUwLjc5NTI1OTg4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk4NjYzMjY5MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQW5hbHlzaXMgb2YgTmV0bGluayBOZWlnaGJvciBUYWJsZSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIHByaW1hcmlseSB0b3VjaGVzIG9uIHRocmVlIGFyZWFzIHdpdGhpbiB0aGUgbmVpZ2hib3IgdGFibGUgbmV0bGluayBpbnRlcmFjdGlvbjogZW5mb3JjaW5nIGEgbWF4aW11bSByYW5nZSBvbiBgTkRUUEFfSU5URVJWQUxfUFJPQkVfVElNRV9NU2AsIGZpeGluZyBhIGR1bXBpbmcgcmVzdW1wdGlvbiBidWcsIGFuZCBzZXR0aW5nIGEgbWF4aW11bSB2YWx1ZSBmb3IgYSBzeXNjdGwgdmFyaWFibGUuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgYW55IG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIHZ1bG5lcmFiaWxpdGllcyByZWxldmFudCB0byBLTVNBTi5cblxuRmlyc3QsIHRoZSBpbnB1dCB2YWxpZGF0aW9uOiBgbmxfbnRibF9wYXJtX3BvbGljeWAgYWRkcyBhIHNhbml0eSBjaGVjayBvbiBhIG5ldGxpbmsgYXR0cmlidXRlLiBUaGlzIGlzIGdvb2Q7IGl0J3MgcHJldmVudGluZyB1c2VyLXNwYWNlIGZyb20gc2VuZGluZyBhcmJpdHJhcmlseSBsYXJnZSB2YWx1ZXMuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdGhpcyBpcyBqdXN0IGEgcmFuZ2UgcmVzdHJpY3Rpb24g4oCTIHdlbGwtZGVmaW5lZCwgYW5kIHRoZSB2YWxpZGF0aW9uIGl0c2VsZiBzaG91bGRuJ3QgdHJpZ2dlciBhbnkgS01TQU4gY29uY2VybnMuIEl0J3Mgc2ltcGx5IGJvdW5kaW5nIHRoZSB2YWx1ZSB3aXRoaW4gYWNjZXB0YWJsZSBsaW1pdHMgZGVmaW5lZCBieSBgTlRCTF9QQVJNX01TX01BWGAuXG5cbk5leHQsIHRoZSBuZXRsaW5rIGR1bXAgZml4IChgbmVpZ2h0YmxfZHVtcF9pbmZvYCkuIFRoaXMgaXMgbW9yZSBpbnZvbHZlZC4gVGhlIGNvcmUgaXNzdWUgd2FzIHdpdGggcmVzdGFydGluZyBkdW1wcyBjb3JyZWN0bHksIHNwZWNpZmljYWxseSByZWdhcmRpbmcgdGhlIGRlZmF1bHQgdGFibGUgcGFyYW1ldGVycy4gVGhlIHBhdGNoIHN0b3JlcyBhIFwic2tpcFwiIGZsYWcgdG8gZW5zdXJlIHRob3NlIHBhcmFtZXRlcnMgYXJlbid0IHJlcGVhdGVkbHkgZHVtcGVkIGFjcm9zcyBpdGVyYXRpb25zLiBJJ3ZlIGdvdCB0byBlbnN1cmUgdGhlIGxvZ2ljIGRlYWxpbmcgd2l0aCB0aGF0IGZsYWcgaXMgY2xlYW4uIEx1Y2tpbHksIGl0J3MgbGV2ZXJhZ2luZyBgY2ItXHUwMDNlYXJnc2AsIHdoaWNoIGlzIGluaXRpYWxpemVkIGJ5IHRoZSBuZXRsaW5rIGR1bXAgc3Vic3lzdGVtLiBUaGF0J3MgcmVhc3N1cmluZy4gSSBzZWUgdGhyZWUgdmFyaWFibGVzIGZyb20gdGhlIGBjYi1cdTAwM2VhcmdzYCBhcnJheSB0aGF0IGFyZSB1c2VkOiBgZGVmYXVsdF9za2lwYCwgYG5laWdoX3NraXBgLCBhbmQgYHRibF9za2lwYC4gU2luY2UgdGhpcyBpcyBhIHN0YW5kYXJkIG5ldGxpbmsgZmxvdywgYW5kIHRoZSB2YXJpYWJsZXMgYXJlIGFsbCBpbml0aWFsaXplZCB0byB6ZXJvIGF0IHRoZSBzdGFydCBvZiB0aGUgZHVtcCwgdGhlbiB0aGUgZHVtcCBzeXN0ZW0gbWFuYWdlcyB0aGUgc3RhdGUgYW5kIEkgZG9uJ3Qgc2VlIGFueSB1bmluaXRpYWxpemVkIHJlYWQgb3IgbGVha2FnZSBpc3N1ZXMuIEFsc28sIEknbSBub3RpbmcgdGhhdCB0aGUgZHVtcCBza2lwcyBgYmxhY2tob2xlX25ldGRldmAgbm93LiBUaGF0J3MgYSBsb2dpYyBjaGFuZ2UsIGJ1dCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhY2Nlc3MgY29uY2VybnMuIEkgc2hvdWxkIGJlIGF3YXJlIG9mIHRoaXMgY2hhbmdlLCBidXQgaXQncyBub3QgYSBLTVNBTiBjb25jZXJuLlxuXG5UaGlyZCwgYG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZWAuIFRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgc3lzY3RsIHNldHRpbmcuIFRoZSBwYXRjaCBzZXRzIGEgYG1heGAgdmFsdWUgZm9yIHRoZSBzeXNjdGwsIGFuZCB0aGVuIHBhc3NlcyBib3RoIGBtaW5gIGFuZCBgbWF4YCAod2hpY2ggYXJlIGJvdGggZXhwbGljaXRseSBpbml0aWFsaXplZCkgdG8gdGhlIHN0YW5kYXJkIGBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4YCBmdW5jdGlvbi4gSXQgc2VlbXMgdGhlcmUgaXMgbm8gS01TQU4gaXNzdWUgaGVyZS5cblxuTm93LCBsZXQncyBzdGVwIGJhY2sgYW5kIGNvbnNpZGVyIHBvdGVudGlhbCBLTVNBTiBjb25jZXJucy4gSSdtIGZvY3VzaW5nIG9uIGZvdXIgY29yZSBhcmVhczogMSkgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlOyAyKSBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlczsgMykgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbjsgYW5kIDQpIGJvdW5kcyBjaGVja3MgcG90ZW50aWFsbHkgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cbkxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0J3MgYWxsIGJhc2VkIG9uIHRoZSBjb21tb24gbmV0bGluayBzdHJ1Y3R1cmUgb2YgdGhlIG5ldGxpbmsgcHJvdG9jb2wgYW5kIGBubGFfcHV0XypgIGZ1bmN0aW9ucy4gV2UncmUgbm90IGNvcHlpbmcgYW55IG5ldyBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UuIEl0J3MgYWxsIGFib3V0IGR1bXAgZmxvdyBsb2dpYyBhbmQgdmFsaWRhdGlvbiByYW5nZXMgaW4gbmV0bGluayBhdHRyaWJ1dGVzLiBObyBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGNvbnN0cnVjdGVkLCBmaWxsZWQgd2l0aCBuZXcgdmFsdWVzLCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gRnVydGhlcm1vcmUsIGFsbCB0aGUgY29udHJvbCBmbG93IHZhcmlhYmxlcyBsaWtlIGBjYi1cdTAwM2VhcmdzYCBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIFdlIGFyZSBub3QgbW9kaWZ5aW5nIGFueSBkYXRhIHN0cnVjdHVyZXMgcGFzc2VkIHRvIHVzZXIgc3BhY2UuIEFuZCBmaW5hbGx5LCBzdGFuZGFyZCBuZXRsaW5rIGl0ZXJhdGlvbiBhbmQgc3lzY3RsIGJvdW5kcyBhcmUgaGFuZGxlZCwgc28gdGhlcmUgYXJlIG5vIGJ1Z3MuXG5cbk15IGNvbmNsdXNpb24gaXM6ICoqTmVlZHNLTVNBTiA9IGZhbHNlKiouIFRoZSBwYXRjaCBtb2RpZmllcyBleGlzdGluZyBuZXRsaW5rIGludGVyYWN0aW9ucywgYnV0IGl0IGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgYXJlYXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLCBjb250cm9sIGZsb3cgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YWx1ZXMsIHVuc2FmZSBkYXRhIHN0cnVjdHVyZSBtYW5pcHVsYXRpb24sIG9yIGFueSBuZXcgYm91bmRzLWNoZWNrIHJlbGF0ZWQgaXNzdWVzLiBUaGlzIGlzIHB1cmVseSBhIGJ1ZyBmaXggYW5kIGltcHJvdmVtZW50IHRvIGFuIGV4aXN0aW5nLCBzYWZlIGNvZGUgcGF0aCwgZnJvbSBhIEtNU0FOIHBlcnNwZWN0aXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjUwLCJPdXRwdXRUb2tlbnMiOjI0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkzMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjE1OjAwLjY2MTU5NjY3MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGlucHV0IHZhbGlkYXRpb24gYW5kIG5ldGxpbmsgZHVtcCByZXN1bXB0aW9uIGxvZ2ljIGluIG5ldC9jb3JlL25laWdoYm91ci5jOlxcbjEuIEl0IGFkZHMgYW4gdXBwZXIgYm91bmQgdmFsaWRhdGlvbiAoYE5UQkxfUEFSTV9NU19NQVhgKSBmb3IgYE5EVFBBX0lOVEVSVkFMX1BST0JFX1RJTUVfTVNgIHZpYSBuZXRsaW5rIHBvbGljeSBhbmQgc3lzY3RsIChgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlYCkuXFxuMi4gSXQgZml4ZXMgdGFibGUgYW5kIHBhcmFtZXRlciBkdW1waW5nIGluIGBuZWlnaHRibF9kdW1wX2luZm9gIGFjcm9zcyBtdWx0aS1wYXJ0IG5ldGxpbmsgZHVtcHMgYnkgdHJhY2tpbmcgYGRlZmF1bHRfc2tpcGAgaW4gYGNiLVxcdTAwM2VhcmdzWzJdYCwgcHJvcGVybHkgY29udGludWluZyBsaXN0IGl0ZXJhdGlvbiwgYW5kIHNraXBwaW5nIGBibGFja2hvbGVfbmV0ZGV2YC5cXG5cXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgYWxsb2NhdGUgb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBub3IgZG8gdGhleSBleHBvc2UgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZyBvciBidWZmZXIgY29udGVudHMgdG8gdXNlcnNwYWNlLiBBbGwgdmFyaWFibGVzIChgbWluYCwgYG1heGAsIGBkZWZhdWx0X3NraXBgLCBgY2ItXFx1MDAzZWFyZ3NgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQuIEFueSBwb3RlbnRpYWwgbG9naWMgZXJyb3JzIG9yIG91dC1vZi1ib3VuZHMgaXNzdWVzIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vZGVidWdnaW5nIGJ1aWxkcy4gSGVuY2UsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBpbnB1dCB2YWxpZGF0aW9uIGFuZCBuZXRsaW5rIGR1bXAgcmVzdW1wdGlvbiBsb2dpYyBpbiBuZXQvY29yZS9uZWlnaGJvdXIuYzpcXG4xLiBJdCBhZGRzIGFuIHVwcGVyIGJvdW5kIHZhbGlkYXRpb24gKGBOVEJMX1BBUk1fTVNfTUFYYCkgZm9yIGBORFRQQV9JTlRFUlZBTF9QUk9CRV9USU1FX01TYCB2aWEgbmV0bGluayBwb2xpY3kgYW5kIHN5c2N0bCAoYG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZWApLlxcbjIuIEl0IGZpeGVzIHRhYmxlIGFuZCBwYXJhbWV0ZXIgZHVtcGluZyBpbiBgbmVpZ2h0YmxfZHVtcF9pbmZvYCBhY3Jvc3MgbXVsdGktcGFydCBuZXRsaW5rIGR1bXBzIGJ5IHRyYWNraW5nIGBkZWZhdWx0X3NraXBgIGluIGBjYi1cXHUwMDNlYXJnc1syXWAsIHByb3Blcmx5IGNvbnRpbnVpbmcgbGlzdCBpdGVyYXRpb24sIGFuZCBza2lwcGluZyBgYmxhY2tob2xlX25ldGRldmAuXFxuXFxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgbm9yIGRvIHRoZXkgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmcgb3IgYnVmZmVyIGNvbnRlbnRzIHRvIHVzZXJzcGFjZS4gQWxsIHZhcmlhYmxlcyAoYG1pbmAsIGBtYXhgLCBgZGVmYXVsdF9za2lwYCwgYGNiLVxcdTAwM2VhcmdzYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBBbnkgcG90ZW50aWFsIGxvZ2ljIGVycm9ycyBvciBvdXQtb2YtYm91bmRzIGlzc3VlcyBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL2RlYnVnZ2luZyBidWlsZHMuIEhlbmNlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9mtbn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 01:44:39 +0000 UTC FinishedAt: 2026-09-08 02:15:01 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET" ], "series_id": "515cc98b-5a85-4bc3-b743-5f6faac1fb5d" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "neightbl_dump_info", "neightbl_set", "neigh_proc_dointvec_ms_jiffies_positive" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25laWdodGJsX2R1bXBfaW5mbyYjMzQ7LAogICAgJiMzNDtuZWlnaHRibF9zZXQmIzM0OywKICAgICYjMzQ7bmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGlucHV0IHZhbGlkYXRpb24gYW5kIG5ldGxpbmsgZHVtcCByZXN1bXB0aW9uIGxvZ2ljIGluIG5ldC9jb3JlL25laWdoYm91ci5jOlxuMS4gSXQgYWRkcyBhbiB1cHBlciBib3VuZCB2YWxpZGF0aW9uIChgTlRCTF9QQVJNX01TX01BWGApIGZvciBgTkRUUEFfSU5URVJWQUxfUFJPQkVfVElNRV9NU2AgdmlhIG5ldGxpbmsgcG9saWN5IGFuZCBzeXNjdGwgKGBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVgKS5cbjIuIEl0IGZpeGVzIHRhYmxlIGFuZCBwYXJhbWV0ZXIgZHVtcGluZyBpbiBgbmVpZ2h0YmxfZHVtcF9pbmZvYCBhY3Jvc3MgbXVsdGktcGFydCBuZXRsaW5rIGR1bXBzIGJ5IHRyYWNraW5nIGBkZWZhdWx0X3NraXBgIGluIGBjYi1cdTAwM2VhcmdzWzJdYCwgcHJvcGVybHkgY29udGludWluZyBsaXN0IGl0ZXJhdGlvbiwgYW5kIHNraXBwaW5nIGBibGFja2hvbGVfbmV0ZGV2YC5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgbm9yIGRvIHRoZXkgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmcgb3IgYnVmZmVyIGNvbnRlbnRzIHRvIHVzZXJzcGFjZS4gQWxsIHZhcmlhYmxlcyAoYG1pbmAsIGBtYXhgLCBgZGVmYXVsdF9za2lwYCwgYGNiLVx1MDAzZWFyZ3NgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQuIEFueSBwb3RlbnRpYWwgbG9naWMgZXJyb3JzIG9yIG91dC1vZi1ib3VuZHMgaXNzdWVzIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vZGVidWdnaW5nIGJ1aWxkcy4gSGVuY2UsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgbmVpZ2hib3VyIHRhYmxlIG1hbmFnZW1lbnQgaW4gbmV0L2NvcmUvbmVpZ2hib3VyLmMuIFNwZWNpZmljYWxseSwgaXQgZml4ZXMgbmV0bGluayBkdW1wIHBhZ2luYXRpb24gYW5kIGZpbHRlcmluZyAoaGFuZGxpbmcgYmxhY2tob2xlIG5ldGRldikgaW4gbmVpZ2h0YmxfZHVtcF9pbmZvKCksIGFkZHMgdXBwZXIgYm91bmQgcmFuZ2UgdmFsaWRhdGlvbiBmb3IgaW50ZXJ2YWxfcHJvYmVfdGltZV9tcyBpbiBubF9udGJsX3Bhcm1fcG9saWN5ICh1c2VkIGluIG5laWdodGJsX3NldCgpKSwgYW5kIHNldHMgYW4gdXBwZXIgYm91bmQgb24gc3lzY3RsIHdyaXRlcyB2aWEgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlKCkuIFRoZXNlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgdmlhIHJ0bmV0bGluayAoUlRNX0dFVE5FSUdIVEJMLCBSVE1fU0VUTkVJR0hUQkwpIGFuZCBwcm9jZnMgc3lzY3RsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjEzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNmJmYTRiYTY3NTY2MzBmMDc5ZmNiNWJkOWJiNDYxM2FhYjI4NTI2YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMDI6MTM6MDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmVpZ2hib3VyLmMgYi9uZXQvY29yZS9uZWlnaGJvdXIuY1xuaW5kZXggMTM0OWMwZWVkYjY0Mi4uMTVlZWRhZWY2NTc4MSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL25laWdoYm91ci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9uZWlnaGJvdXIuY1xuQEAgLTIzNTksNiAmIzQzOzIzNTksMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5sX25laWdodGJsX3BvbGljeVtORFRBX01BWCYjNDM7MV0gPSB7XG4gXHRbTkRUQV9QQVJNU11cdFx0PSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxuIH07XG4gXG4mIzQzOyNkZWZpbmUgTlRCTF9QQVJNX01TX01BWFx0KDI0ICogNjAgKiA2MCAqIE1TRUNfUEVSX1NFQylcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0bGlua19yYW5nZV92YWxpZGF0aW9uIG5sX250YmxfcGFybV9tc19yYW5nZSA9IHtcbiYjNDM7XHQubWluID0gMSxcbiYjNDM7XHQubWF4ID0gTlRCTF9QQVJNX01TX01BWCxcbiYjNDM7fTtcbiYjNDM7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5sX250YmxfcGFybV9wb2xpY3lbTkRUUEFfTUFYJiM0MzsxXSA9IHtcbiBcdFtORFRQQV9JRklOREVYXVx0XHRcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbiBcdFtORFRQQV9RVUVVRV9MRU5dXHRcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbkBAIC0yMzc1LDcgJiM0MzsyMzgyLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5sX250YmxfcGFybV9wb2xpY3lbTkRUUEFfTUFYJiM0MzsxXSA9IHtcbiBcdFtORFRQQV9BTllDQVNUX0RFTEFZXVx0XHQ9IHsgLnR5cGUgPSBOTEFfVTY0IH0sXG4gXHRbTkRUUEFfUFJPWFlfREVMQVldXHRcdD0geyAudHlwZSA9IE5MQV9VNjQgfSxcbiBcdFtORFRQQV9MT0NLVElNRV1cdFx0PSB7IC50eXBlID0gTkxBX1U2NCB9LFxuLVx0W05EVFBBX0lOVEVSVkFMX1BST0JFX1RJTUVfTVNdXHQ9IHsgLnR5cGUgPSBOTEFfVTY0LCAubWluID0gMSB9LFxuJiM0MztcdFtORFRQQV9JTlRFUlZBTF9QUk9CRV9USU1FX01TXVx0PSBOTEFfUE9MSUNZX0ZVTExfUkFOR0UoTkxBX1U2NCxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdFx1MDAyNm5sX250YmxfcGFybV9tc19yYW5nZSksXG4gfTtcbiBcbiBzdGF0aWMgaW50IG5laWdodGJsX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbkBAIC0yNTc5LDkgJiM0MzsyNTg3LDEwIEBAIHN0YXRpYyBpbnQgbmVpZ2h0YmxfZHVtcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiB7XG4gXHRjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCA9IGNiLVx1MDAzZW5saDtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cdTAwM2Vzayk7XG4mIzQzO1x0aW50IGRlZmF1bHRfc2tpcCA9IGNiLVx1MDAzZWFyZ3NbMl07XG4mIzQzO1x0aW50IG5laWdoX3NraXAgPSBjYi1cdTAwM2VhcmdzWzFdO1xuIFx0aW50IGZhbWlseSwgdGlkeCwgbmlkeCA9IDA7XG4gXHRpbnQgdGJsX3NraXAgPSBjYi1cdTAwM2VhcmdzWzBdO1xuLVx0aW50IG5laWdoX3NraXAgPSBjYi1cdTAwM2VhcmdzWzFdO1xuIFx0c3RydWN0IG5laWdoX3RhYmxlICp0Ymw7XG4gXG4gXHRpZiAoY2ItXHUwMDNlc3RyaWN0X2NoZWNrKSB7XG5AQCAtMjYwNSwxNyAmIzQzOzI2MTQsMjIgQEAgc3RhdGljIGludCBuZWlnaHRibF9kdW1wX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0XHRpZiAodGlkeCBcdTAwM2MgdGJsX3NraXAgfHwgKGZhbWlseSBcdTAwMjZcdTAwMjYgdGJsLVx1MDAzZWZhbWlseSAhPSBmYW1pbHkpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRpZiAobmVpZ2h0YmxfZmlsbF9pbmZvKHNrYiwgdGJsLCBORVRMSU5LX0NCKGNiLVx1MDAzZXNrYikucG9ydGlkLFxuJiM0MztcdFx0aWYgKCFkZWZhdWx0X3NraXAgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgbmVpZ2h0YmxfZmlsbF9pbmZvKHNrYiwgdGJsLCBORVRMSU5LX0NCKGNiLVx1MDAzZXNrYikucG9ydGlkLFxuIFx0XHRcdFx0ICAgICAgIG5saC1cdTAwM2VubG1zZ19zZXEsIFJUTV9ORVdORUlHSFRCTCxcbiBcdFx0XHRcdCAgICAgICBOTE1fRl9NVUxUSSkgXHUwMDNjIDApXG4gXHRcdFx0YnJlYWs7XG4gXG4tXHRcdG5pZHggPSAwO1xuLVx0XHRwID0gbGlzdF9uZXh0X2VudHJ5KFx1MDAyNnRibC1cdTAwM2VwYXJtcywgbGlzdCk7XG4tXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfZnJvbV9yY3UocCwgXHUwMDI2dGJsLVx1MDAzZXBhcm1zX2xpc3QsIGxpc3QpIHtcbiYjNDM7XHRcdGRlZmF1bHRfc2tpcCA9IDE7XG4mIzQzO1xuJiM0MztcdFx0cCA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2dGJsLVx1MDAzZXBhcm1zX2xpc3QsIHN0cnVjdCBuZWlnaF9wYXJtcywgbGlzdCk7XG4mIzQzO1x0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShwLCBcdTAwMjZ0YmwtXHUwMDNlcGFybXNfbGlzdCwgbGlzdCkge1xuIFx0XHRcdGlmICghbmV0X2VxKG5laWdoX3Bhcm1zX25ldChwKSwgbmV0KSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuJiM0MztcdFx0XHRpZiAocC1cdTAwM2VkZXYgPT0gYmxhY2tob2xlX25ldGRldilcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4gXHRcdFx0aWYgKG5pZHggXHUwMDNjIG5laWdoX3NraXApXG4gXHRcdFx0XHRnb3RvIG5leHQ7XG4gXG5AQCAtMjYzMCwxMiAmIzQzOzI2NDQsMTUgQEAgc3RhdGljIGludCBuZWlnaHRibF9kdW1wX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0XHR9XG4gXG4gXHRcdG5laWdoX3NraXAgPSAwO1xuJiM0MztcdFx0bmlkeCA9IDA7XG4mIzQzO1x0XHRkZWZhdWx0X3NraXAgPSAwO1xuIFx0fVxuIG91dDpcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0Y2ItXHUwMDNlYXJnc1swXSA9IHRpZHg7XG4gXHRjYi1cdTAwM2VhcmdzWzFdID0gbmlkeDtcbiYjNDM7XHRjYi1cdTAwM2VhcmdzWzJdID0gZGVmYXVsdF9za2lwO1xuIFxuIFx0cmV0dXJuIHNrYi1cdTAwM2VsZW47XG4gfVxuQEAgLTM2NjksMTIgJiM0MzszNjg2LDEzIEBAIHN0YXRpYyBpbnQgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCxcbiBcdFx0XHRcdFx0XHQgICB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKVxuIHtcbiBcdHN0cnVjdCBjdGxfdGFibGUgdG1wID0gKmN0bDtcbi1cdGludCByZXQ7XG4mIzQzO1x0aW50IHJldCwgbWluLCBtYXg7XG4gXG4tXHRpbnQgbWluID0gbXNlY3NfdG9famlmZmllcygxKTtcbiYjNDM7XHRtaW4gPSBtc2Vjc190b19qaWZmaWVzKDEpO1xuJiM0MztcdG1heCA9IG1zZWNzX3RvX2ppZmZpZXMoTlRCTF9QQVJNX01TX01BWCk7XG4gXG4gXHR0bXAuZXh0cmExID0gXHUwMDI2bWluO1xuLVx0dG1wLmV4dHJhMiA9IE5VTEw7XG4mIzQzO1x0dG1wLmV4dHJhMiA9IFx1MDAyNm1heDtcbiBcbiBcdHJldCA9IHByb2NfZG9pbnR2ZWNfbXNfamlmZmllc19taW5tYXgoXHUwMDI2dG1wLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTtcbiBcdG5laWdoX3Byb2NfdXBkYXRlKGN0bCwgd3JpdGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjEzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25laWdodGJsX2R1bXBfaW5mbyYjMzQ7LAogICAgJiMzNDtuZWlnaHRibF9zZXQmIzM0OywKICAgICYjMzQ7bmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBuZWlnaGJvdXIgdGFibGUgbWFuYWdlbWVudCBpbiBuZXQvY29yZS9uZWlnaGJvdXIuYy4gU3BlY2lmaWNhbGx5LCBpdCBmaXhlcyBuZXRsaW5rIGR1bXAgcGFnaW5hdGlvbiBhbmQgZmlsdGVyaW5nIChoYW5kbGluZyBibGFja2hvbGUgbmV0ZGV2KSBpbiBuZWlnaHRibF9kdW1wX2luZm8oKSwgYWRkcyB1cHBlciBib3VuZCByYW5nZSB2YWxpZGF0aW9uIGZvciBpbnRlcnZhbF9wcm9iZV90aW1lX21zIGluIG5sX250YmxfcGFybV9wb2xpY3kgKHVzZWQgaW4gbmVpZ2h0Ymxfc2V0KCkpLCBhbmQgc2V0cyBhbiB1cHBlciBib3VuZCBvbiBzeXNjdGwgd3JpdGVzIHZpYSBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmUoKS4gVGhlc2UgcGF0aHMgYXJlIGRpcmVjdGx5IHJlYWNoYWJsZSB2aWEgcnRuZXRsaW5rIChSVE1fR0VUTkVJR0hUQkwsIFJUTV9TRVRORUlHSFRCTCkgYW5kIHByb2NmcyBzeXNjdGwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2YmZhNGJhNjc1NjYzMGYwNzlmY2I1YmQ5YmI0NjEzYWFiMjg1MjZiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgOCAwMjoxMzowMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25laWdoYm91ci5jIGIvbmV0L2NvcmUvbmVpZ2hib3VyLmMKaW5kZXggMTM0OWMwZWVkYjY0Mi4uMTVlZWRhZWY2NTc4MSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbmVpZ2hib3VyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvbmVpZ2hib3VyLmMKQEAgLTIzNTksNiAmIzQzOzIzNTksMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5sX25laWdodGJsX3BvbGljeVtORFRBX01BWCYjNDM7MV0gPSB7CiAJW05EVEFfUEFSTVNdCQk9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sCiB9OwogCiYjNDM7I2RlZmluZSBOVEJMX1BBUk1fTVNfTUFYCSgyNCAqIDYwICogNjAgKiBNU0VDX1BFUl9TRUMpCiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRsaW5rX3JhbmdlX3ZhbGlkYXRpb24gbmxfbnRibF9wYXJtX21zX3JhbmdlID0gewomIzQzOwkubWluID0gMSwKJiM0MzsJLm1heCA9IE5UQkxfUEFSTV9NU19NQVgsCiYjNDM7fTsKJiM0MzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBubF9udGJsX3Bhcm1fcG9saWN5W05EVFBBX01BWCYjNDM7MV0gPSB7CiAJW05EVFBBX0lGSU5ERVhdCQkJPSB7IC50eXBlID0gTkxBX1UzMiB9LAogCVtORFRQQV9RVUVVRV9MRU5dCQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCkBAIC0yMzc1LDcgJiM0MzsyMzgyLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5sX250YmxfcGFybV9wb2xpY3lbTkRUUEFfTUFYJiM0MzsxXSA9IHsKIAlbTkRUUEFfQU5ZQ0FTVF9ERUxBWV0JCT0geyAudHlwZSA9IE5MQV9VNjQgfSwKIAlbTkRUUEFfUFJPWFlfREVMQVldCQk9IHsgLnR5cGUgPSBOTEFfVTY0IH0sCiAJW05EVFBBX0xPQ0tUSU1FXQkJPSB7IC50eXBlID0gTkxBX1U2NCB9LAotCVtORFRQQV9JTlRFUlZBTF9QUk9CRV9USU1FX01TXQk9IHsgLnR5cGUgPSBOTEFfVTY0LCAubWluID0gMSB9LAomIzQzOwlbTkRUUEFfSU5URVJWQUxfUFJPQkVfVElNRV9NU10JPSBOTEFfUE9MSUNZX0ZVTExfUkFOR0UoTkxBX1U2NCwKJiM0MzsJCQkJCQkJCSZhbXA7bmxfbnRibF9wYXJtX21zX3JhbmdlKSwKIH07CiAKIHN0YXRpYyBpbnQgbmVpZ2h0Ymxfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLApAQCAtMjU3OSw5ICYjNDM7MjU4NywxMCBAQCBzdGF0aWMgaW50IG5laWdodGJsX2R1bXBfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiB7CiAJY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGggPSBjYi0mZ3Q7bmxoOwogCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0mZ3Q7c2spOwomIzQzOwlpbnQgZGVmYXVsdF9za2lwID0gY2ItJmd0O2FyZ3NbMl07CiYjNDM7CWludCBuZWlnaF9za2lwID0gY2ItJmd0O2FyZ3NbMV07CiAJaW50IGZhbWlseSwgdGlkeCwgbmlkeCA9IDA7CiAJaW50IHRibF9za2lwID0gY2ItJmd0O2FyZ3NbMF07Ci0JaW50IG5laWdoX3NraXAgPSBjYi0mZ3Q7YXJnc1sxXTsKIAlzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibDsKIAogCWlmIChjYi0mZ3Q7c3RyaWN0X2NoZWNrKSB7CkBAIC0yNjA1LDE3ICYjNDM7MjYxNCwyMiBAQCBzdGF0aWMgaW50IG5laWdodGJsX2R1bXBfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiAJCWlmICh0aWR4ICZsdDsgdGJsX3NraXAgfHwgKGZhbWlseSAmYW1wOyZhbXA7IHRibC0mZ3Q7ZmFtaWx5ICE9IGZhbWlseSkpCiAJCQljb250aW51ZTsKIAotCQlpZiAobmVpZ2h0YmxfZmlsbF9pbmZvKHNrYiwgdGJsLCBORVRMSU5LX0NCKGNiLSZndDtza2IpLnBvcnRpZCwKJiM0MzsJCWlmICghZGVmYXVsdF9za2lwICZhbXA7JmFtcDsKJiM0MzsJCSAgICBuZWlnaHRibF9maWxsX2luZm8oc2tiLCB0YmwsIE5FVExJTktfQ0IoY2ItJmd0O3NrYikucG9ydGlkLAogCQkJCSAgICAgICBubGgtJmd0O25sbXNnX3NlcSwgUlRNX05FV05FSUdIVEJMLAogCQkJCSAgICAgICBOTE1fRl9NVUxUSSkgJmx0OyAwKQogCQkJYnJlYWs7CiAKLQkJbmlkeCA9IDA7Ci0JCXAgPSBsaXN0X25leHRfZW50cnkoJmFtcDt0YmwtJmd0O3Bhcm1zLCBsaXN0KTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tX3JjdShwLCAmYW1wO3RibC0mZ3Q7cGFybXNfbGlzdCwgbGlzdCkgewomIzQzOwkJZGVmYXVsdF9za2lwID0gMTsKJiM0MzsKJiM0MzsJCXAgPSBsaXN0X2ZpcnN0X2VudHJ5KCZhbXA7dGJsLSZndDtwYXJtc19saXN0LCBzdHJ1Y3QgbmVpZ2hfcGFybXMsIGxpc3QpOwomIzQzOwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yY3UocCwgJmFtcDt0YmwtJmd0O3Bhcm1zX2xpc3QsIGxpc3QpIHsKIAkJCWlmICghbmV0X2VxKG5laWdoX3Bhcm1zX25ldChwKSwgbmV0KSkKIAkJCQljb250aW51ZTsKIAomIzQzOwkJCWlmIChwLSZndDtkZXYgPT0gYmxhY2tob2xlX25ldGRldikKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CiAJCQlpZiAobmlkeCAmbHQ7IG5laWdoX3NraXApCiAJCQkJZ290byBuZXh0OwogCkBAIC0yNjMwLDEyICYjNDM7MjY0NCwxNSBAQCBzdGF0aWMgaW50IG5laWdodGJsX2R1bXBfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiAJCX0KIAogCQluZWlnaF9za2lwID0gMDsKJiM0MzsJCW5pZHggPSAwOwomIzQzOwkJZGVmYXVsdF9za2lwID0gMDsKIAl9CiBvdXQ6CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAljYi0mZ3Q7YXJnc1swXSA9IHRpZHg7CiAJY2ItJmd0O2FyZ3NbMV0gPSBuaWR4OwomIzQzOwljYi0mZ3Q7YXJnc1syXSA9IGRlZmF1bHRfc2tpcDsKIAogCXJldHVybiBza2ItJmd0O2xlbjsKIH0KQEAgLTM2NjksMTIgJiM0MzszNjg2LDEzIEBAIHN0YXRpYyBpbnQgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwKIAkJCQkJCSAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IGN0bF90YWJsZSB0bXAgPSAqY3RsOwotCWludCByZXQ7CiYjNDM7CWludCByZXQsIG1pbiwgbWF4OwogCi0JaW50IG1pbiA9IG1zZWNzX3RvX2ppZmZpZXMoMSk7CiYjNDM7CW1pbiA9IG1zZWNzX3RvX2ppZmZpZXMoMSk7CiYjNDM7CW1heCA9IG1zZWNzX3RvX2ppZmZpZXMoTlRCTF9QQVJNX01TX01BWCk7CiAKIAl0bXAuZXh0cmExID0gJmFtcDttaW47Ci0JdG1wLmV4dHJhMiA9IE5VTEw7CiYjNDM7CXRtcC5leHRyYTIgPSAmYW1wO21heDsKIAogCXJldCA9IHByb2NfZG9pbnR2ZWNfbXNfamlmZmllc19taW5tYXgoJmFtcDt0bXAsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpOwogCW5laWdoX3Byb2NfdXBkYXRlKGN0bCwgd3JpdGUpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTQ5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmVpZ2hib3VyIFN1YnN5c3RlbSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBiZWVuIHR3ZWFrZWQgaW4gdGhlIG5ldHdvcmsgbmVpZ2hib3IgZGlzY292ZXJ5IGNvZGUsIHNwZWNpZmljYWxseSB3aXRoaW4gYG5ldC9jb3JlL25laWdoYm91ci5jYC4gTXkgaW5pdGlhbCBzY2FuIHN1Z2dlc3RzIGEgZmV3IGludGVyZXN0aW5nIGFyZWFzIG9mIGZvY3VzLgoKRmlyc3QsIHRoZSBgbmxfbnRibF9wYXJtX3BvbGljeWAgZGVmaW5pdGlvbiBpcyBiZWluZyBhZGp1c3RlZC4gV2UmIzM5O3JlIHNldHRpbmcgdGhlIHBvbGljeSBmb3IgYE5EVFBBX0lOVEVSVkFMX1BST0JFX1RJTUVfTVNgIHRvIGEgZnVsbC1yYW5nZSB1bnNpZ25lZCA2NC1iaXQgaW50ZWdlciAoYE5MQV9VNjRgKSB3aXRoaW4gc3BlY2lmaWMgbGltaXRzLiBUaGUgbWF4aW11bSB2YWx1ZSwgZGVmaW5lZCBieSBgTlRCTF9QQVJNX01TX01BWGAsIGlzIGEgcmF0aGVyIGhlZnR5IDI0IGhvdXJzIGluIG1pbGxpc2Vjb25kcy4gVGhpcyBsaWtlbHkgaW5mbHVlbmNlcyBob3cgZnJlcXVlbnRseSBuZWlnaGJvciBwcm9iZXMgYXJlIHNlbnQsIHNvIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4KClRoZW4sIHRoZXJlJiMzOTtzIHNvbWUgYWN0aXZpdHkgd2l0aGluIGBuZWlnaHRibF9kdW1wX2luZm9gLCB3aGljaCBoYW5kbGVzIGR1bXBpbmcgbmVpZ2hib3IgdGFibGUgaW5mb3JtYXRpb24sIHByb2JhYmx5IGZvciBkZWJ1Z2dpbmcgb3IgbW9uaXRvcmluZy4gSSBzZWUgYSBjb3VwbGUgb2Ygbm90YWJsZSBtb2RpZmljYXRpb25zIGhlcmUuIFRoZSBwYWdpbmF0aW9uIGFuZCBkdW1waW5nIGxvZ2ljIGFwcGVhcnMgdG8gYmUgZ2V0dGluZyBmaW5lLXR1bmVkLCBhbmQgYGRlZmF1bHRfc2tpcCA9IGNiLSZndDthcmdzWzJdYCBpcyB1c2VkLiBNb3JlIHNpZ25pZmljYW50bHksIHRoZSBpdGVyYXRpb24gdGhyb3VnaCBgdGJsLSZndDtwYXJtc19saXN0YCBpcyBiZWluZyByZXdvcmtlZC4gVGhlIGNvZGUgaXMgY2hhbmdpbmcgZnJvbSBgbGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tX3JjdWAgdG8gYSBjb21iaW5hdGlvbiBvZiBgbGlzdF9maXJzdF9lbnRyeWAgYW5kIGBsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdWAuIFRoaXMgbGlrZWx5IHN1Z2dlc3RzIHRoZXkmIzM5O3JlIG9wdGltaXppbmcgaG93IHRoZSBsaXN0IGlzIHRyYXZlcnNlZCwgcG90ZW50aWFsbHkgaW1wcm92aW5nIHBlcmZvcm1hbmNlIG9yIGNvbmN1cnJlbmN5LCBlc3BlY2lhbGx5IHdpdGhpbiBhIFJDVSBjb250ZXh0LiBJdCYjMzk7cyBnb29kIHRvIHNlZSB0aGlzIGF0dGVudGlvbiB0byBkZXRhaWwuIEkgYWxzbyBzcG90IGEgY2hlY2s6IGBpZiAocC0mZ3Q7ZGV2ID09IGJsYWNraG9sZV9uZXRkZXYpIGNvbnRpbnVlO2AuIFRoaXMgcHJvYmFibHkgZXhjbHVkZXMgZW50cmllcyBhc3NvY2lhdGVkIHdpdGggdGhlIGJsYWNraG9sZSBkZXZpY2UgZnJvbSB0aGUgZHVtcCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEZpbmFsbHksIHRoZXJlJiMzOTtzIGEgZml4IHRvIHJlc2V0IGNlcnRhaW4gdmFyaWFibGVzLCB3aGljaCBjb3VsZCBhZGRyZXNzIGEgc3VidGxlIGJ1ZyBvciBhbiBpc3N1ZSB3aGVyZSB2YXJpYWJsZXMgYXJlbiYjMzk7dCBpbml0aWFsaXplZCBhcHByb3ByaWF0ZWx5IGluIHNvbWUgc2NlbmFyaW9zLgoKTGFzdGx5LCBgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlYCBpcyBnZXR0aW5nIHVwZGF0ZWQsIHNwZWNpZmljYWxseSBzZXR0aW5nIGB0bXAuZXh0cmEyYCB0byBhIG1heGltdW0gdmFsdWUsIGBtYXhgLCBjb252ZXJ0ZWQgZnJvbSBgTlRCTF9QQVJNX01TX01BWGAgdG8gamlmZmllcy4gVGhpcyByZWluZm9yY2VzIHRoZSB0aW1lLWJhc2VkIHBhcmFtZXRlciBjaGFuZ2VzIGFuZCBzaG93cyB0aGF0IHRoZSBgTlRCTF9QQVJNX01TX01BWGAgY29uc3RhbnQgaXMgY3J1Y2lhbC4KClRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgb3ZlcmFsbCBpbXBhY3QgYW5kIHdoeSB0aGVzZSBjaGFuZ2VzIGFyZSBiZWluZyBtYWRlLCBJJiMzOTttIGdvaW5nIHRvIHJlYWNoIGZvciBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgcmlnaHQgYXdheSB0byBleHBsb3JlIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBUaGF0IHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcyBhbmQgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBpbiB0aGUgbGFyZ2VyIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL25laWdoYm91ci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjU4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNTgwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjU4MTpcdFx0fVxuMjU4MjpcdFxuMjU4MzpcdFx0cmV0dXJuIDA7XG4yNTg0Olx0fVxuMjU4NTpcdFxuMjU4NjpcdHN0YXRpYyBpbnQgbmVpZ2h0YmxfZHVtcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbjI1ODc6XHR7XG4yNTg4Olx0XHRjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCA9IGNiLVx1MDAzZW5saDtcbjI1ODk6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cdTAwM2Vzayk7XG4yNTkwOlx0XHRpbnQgZGVmYXVsdF9za2lwID0gY2ItXHUwMDNlYXJnc1syXTtcbjI1OTE6XHRcdGludCBuZWlnaF9za2lwID0gY2ItXHUwMDNlYXJnc1sxXTtcbjI1OTI6XHRcdGludCBmYW1pbHksIHRpZHgsIG5pZHggPSAwO1xuMjU5MzpcdFx0aW50IHRibF9za2lwID0gY2ItXHUwMDNlYXJnc1swXTtcbjI1OTQ6XHRcdHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsO1xuMjU5NTpcdFxuMjU5NjpcdFx0aWYgKGNiLVx1MDAzZXN0cmljdF9jaGVjaykge1xuMjU5NzpcdFx0XHRpbnQgZXJyID0gbmVpZ2h0YmxfdmFsaWRfZHVtcF9pbmZvKG5saCwgY2ItXHUwMDNlZXh0YWNrKTtcbjI1OTg6XHRcbjI1OTk6XHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbjI2MDA6XHRcdFx0XHRyZXR1cm4gZXJyO1xuMjYwMTpcdFx0fVxuMjYwMjpcdFxuMjYwMzpcdFx0ZmFtaWx5ID0gKChzdHJ1Y3QgcnRnZW5tc2cgKilubG1zZ19kYXRhKG5saCkpLVx1MDAzZXJ0Z2VuX2ZhbWlseTtcbjI2MDQ6XHRcbjI2MDU6XHRcdHJjdV9yZWFkX2xvY2soKTtcbjI2MDY6XHRcbjI2MDc6XHRcdGZvciAodGlkeCA9IDA7IHRpZHggXHUwMDNjIE5FSUdIX05SX1RBQkxFUzsgdGlkeCYjNDM7JiM0MzspIHtcbjI2MDg6XHRcdFx0c3RydWN0IG5laWdoX3Bhcm1zICpwO1xuMjYwOTpcdFxuMjYxMDpcdFx0XHR0YmwgPSByY3VfZGVyZWZlcmVuY2UobmVpZ2hfdGFibGVzW3RpZHhdKTtcbjI2MTE6XHRcdFx0aWYgKCF0YmwpXG4yNjEyOlx0XHRcdFx0Y29udGludWU7XG4yNjEzOlx0XG4yNjE0Olx0XHRcdGlmICh0aWR4IFx1MDAzYyB0Ymxfc2tpcCB8fCAoZmFtaWx5IFx1MDAyNlx1MDAyNiB0YmwtXHUwMDNlZmFtaWx5ICE9IGZhbWlseSkpXG4yNjE1Olx0XHRcdFx0Y29udGludWU7XG4yNjE2Olx0XG4yNjE3Olx0XHRcdGlmICghZGVmYXVsdF9za2lwIFx1MDAyNlx1MDAyNlxuMjYxODpcdFx0XHQgICAgbmVpZ2h0YmxfZmlsbF9pbmZvKHNrYiwgdGJsLCBORVRMSU5LX0NCKGNiLVx1MDAzZXNrYikucG9ydGlkLFxuMjYxOTpcdFx0XHRcdFx0ICAgICAgIG5saC1cdTAwM2VubG1zZ19zZXEsIFJUTV9ORVdORUlHSFRCTCxcbjI2MjA6XHRcdFx0XHRcdCAgICAgICBOTE1fRl9NVUxUSSkgXHUwMDNjIDApXG4yNjIxOlx0XHRcdFx0YnJlYWs7XG4yNjIyOlx0XG4yNjIzOlx0XHRcdGRlZmF1bHRfc2tpcCA9IDE7XG4yNjI0Olx0XG4yNjI1Olx0XHRcdHAgPSBsaXN0X2ZpcnN0X2VudHJ5KFx1MDAyNnRibC1cdTAwM2VwYXJtc19saXN0LCBzdHJ1Y3QgbmVpZ2hfcGFybXMsIGxpc3QpO1xuMjYyNjpcdFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShwLCBcdTAwMjZ0YmwtXHUwMDNlcGFybXNfbGlzdCwgbGlzdCkge1xuMjYyNzpcdFx0XHRcdGlmICghbmV0X2VxKG5laWdoX3Bhcm1zX25ldChwKSwgbmV0KSlcbjI2Mjg6XHRcdFx0XHRcdGNvbnRpbnVlO1xuMjYyOTpcdFxuMjYzMDpcdFx0XHRcdGlmIChwLVx1MDAzZWRldiA9PSBibGFja2hvbGVfbmV0ZGV2KVxuMjYzMTpcdFx0XHRcdFx0Y29udGludWU7XG4yNjMyOlx0XG4yNjMzOlx0XHRcdFx0aWYgKG5pZHggXHUwMDNjIG5laWdoX3NraXApXG4yNjM0Olx0XHRcdFx0XHRnb3RvIG5leHQ7XG4yNjM1Olx0XG4yNjM2Olx0XHRcdFx0aWYgKG5laWdodGJsX2ZpbGxfcGFyYW1faW5mbyhza2IsIHRibCwgcCxcbjI2Mzc6XHRcdFx0XHRcdFx0XHQgICAgIE5FVExJTktfQ0IoY2ItXHUwMDNlc2tiKS5wb3J0aWQsXG4yNjM4Olx0XHRcdFx0XHRcdFx0ICAgICBubGgtXHUwMDNlbmxtc2dfc2VxLFxuMjYzOTpcdFx0XHRcdFx0XHRcdCAgICAgUlRNX05FV05FSUdIVEJMLFxuMjY0MDpcdFx0XHRcdFx0XHRcdCAgICAgTkxNX0ZfTVVMVEkpIFx1MDAzYyAwKVxuMjY0MTpcdFx0XHRcdFx0Z290byBvdXQ7XG4yNjQyOlx0XHRcdG5leHQ6XG4yNjQzOlx0XHRcdFx0bmlkeCYjNDM7JiM0Mzs7XG4yNjQ0Olx0XHRcdH1cbjI2NDU6XHRcbjI2NDY6XHRcdFx0bmVpZ2hfc2tpcCA9IDA7XG4yNjQ3Olx0XHRcdG5pZHggPSAwO1xuMjY0ODpcdFx0XHRkZWZhdWx0X3NraXAgPSAwO1xuMjY0OTpcdFx0fVxuMjY1MDpcdG91dDpcbjI2NTE6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMjY1MjpcdFxuMjY1MzpcdFx0Y2ItXHUwMDNlYXJnc1swXSA9IHRpZHg7XG4yNjU0Olx0XHRjYi1cdTAwM2VhcmdzWzFdID0gbmlkeDtcbjI2NTU6XHRcdGNiLVx1MDAzZWFyZ3NbMl0gPSBkZWZhdWx0X3NraXA7XG4yNjU2Olx0XG4yNjU3Olx0XHRyZXR1cm4gc2tiLVx1MDAzZWxlbjtcbjI2NTg6XHR9XG4yNjU5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDI6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjIwOAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNvbnNpZGVyaW5nIFBvdGVudGlhbCBCb3R0bGVuZWNrcyBhbmQgUG9saWN5IEltcGxpY2F0aW9ucyoqCgpSaWdodCwgc28gSSBuZWVkIHRvIGNpcmNsZSBiYWNrIGFuZCBnaXZlIHRoZSBgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlYCB2YXJpYWJsZSBhbm90aGVyIGxvb2ssIGFuZCBhbHNvIHRoZSBgbmxfbnRibF9wYXJtX3BvbGljeWAuIFRoaW5raW5nIGFib3V0IG5ldHdvcmsgbmVpZ2hib3IgbWFuYWdlbWVudCwgdGhlc2UgYXJlIGNyaXRpY2FsIGFyZWFzLiBXaGlsZSBJJiMzOTt2ZSBmb2N1c2VkIG9uIFgsIFksIGFuZCBaIGFscmVhZHksIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IGVkZ2UgY2FzZXMgcmVsYXRlZCB0byB0aW1pbmcgb3IgaG93IHRoZSBuZXRsaW5rIHBhcmFtZXRlciBwb2xpY3kgaW50ZXJhY3RzIHdpdGggdGhlIGppZmZpZXMgY2FsY3VsYXRpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bSBjb25jZXJuZWQgYWJvdXQgcGVyZm9ybWFuY2UgcmVncmVzc2lvbnMgaW4gc2NlbmFyaW9zIHdpdGggaGlnaCBjaHVybiwgb3IgdW5leHBlY3RlZCBiZWhhdmlvciB1bmRlciBsb2FkLiBUaGUgamlmZmllcyB2YXJpYWJsZSBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IHNpbmNlIGl0IGhhbmRsZXMgdGltZW91dHMgYW5kIG90aGVyIHRpbWluZy1iYXNlZCBvcGVyYXRpb25zIHNvIEkgd291bGQgbGlrZSB0byBjb25zaWRlciB0aGUgZWZmZWN0IG9mIGFueSBuZWdhdGl2ZSB2YWx1ZXMuIEkgc2hvdWxkIGFsc28gdGhpbmsgYWJvdXQgd2hldGhlciB0aGUgZGVmYXVsdCBwb2xpY3kgZm9yIG5ldGxpbmsgdGFibGUgcGFyYW1ldGVycyBpcyBhcHByb3ByaWF0ZSBhbmQgaWYgdGhhdCBpcyB0aGUgY2FzZSwgaWYgaXQgY2FuIGJlIHNhZmVseSBtb2RpZmllZC4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgSSBtaWdodCBiZSBvdmVybG9va2luZyB0aGF0IG1pZ2h0IGNhdXNlIHByb2JsZW1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmVpZ2hib3VyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNjY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM2NjU6XHRcdFx0Y2FsbF9uZXRldmVudF9ub3RpZmllcnMoTkVURVZFTlRfREVMQVlfUFJPQkVfVElNRV9VUERBVEUsIHApO1xuMzY2NjpcdFx0aWYgKCFkZXYpIC8qIE5VTEwgZGV2IG1lYW5zIHRoaXMgaXMgZGVmYXVsdCB2YWx1ZSAqL1xuMzY2NzpcdFx0XHRuZWlnaF9jb3B5X2RmbHRfcGFybXMobmV0LCBwLCBpbmRleCk7XG4zNjY4Olx0fVxuMzY2OTpcdFxuMzY3MDpcdHN0YXRpYyBpbnQgbmVpZ2hfcHJvY19kb2ludHZlY196ZXJvX2ludG1heChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSxcbjM2NzE6XHRcdFx0XHRcdFx0ICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsXG4zNjcyOlx0XHRcdFx0XHRcdCAgIGxvZmZfdCAqcHBvcylcbjM2NzM6XHR7XG4zNjc0Olx0XHRzdHJ1Y3QgY3RsX3RhYmxlIHRtcCA9ICpjdGw7XG4zNjc1Olx0XHRpbnQgcmV0O1xuMzY3NjpcdFxuMzY3NzpcdFx0dG1wLmV4dHJhMSA9IFNZU0NUTF9aRVJPO1xuMzY3ODpcdFx0dG1wLmV4dHJhMiA9IFNZU0NUTF9JTlRfTUFYO1xuMzY3OTpcdFxuMzY4MDpcdFx0cmV0ID0gcHJvY19kb2ludHZlY19taW5tYXgoXHUwMDI2dG1wLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTtcbjM2ODE6XHRcdG5laWdoX3Byb2NfdXBkYXRlKGN0bCwgd3JpdGUpO1xuMzY4MjpcdFx0cmV0dXJuIHJldDtcbjM2ODM6XHR9XG4zNjg0Olx0XG4zNjg1Olx0c3RhdGljIGludCBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmUoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqY3RsLCBpbnQgd3JpdGUsXG4zNjg2Olx0XHRcdFx0XHRcdFx0ICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcbjM2ODc6XHR7XG4zNjg4Olx0XHRzdHJ1Y3QgY3RsX3RhYmxlIHRtcCA9ICpjdGw7XG4zNjg5Olx0XHRpbnQgcmV0LCBtaW4sIG1heDtcbjM2OTA6XHRcbjM2OTE6XHRcdG1pbiA9IG1zZWNzX3RvX2ppZmZpZXMoMSk7XG4zNjkyOlx0XHRtYXggPSBtc2Vjc190b19qaWZmaWVzKE5UQkxfUEFSTV9NU19NQVgpO1xuMzY5MzpcdFxuMzY5NDpcdFx0dG1wLmV4dHJhMSA9IFx1MDAyNm1pbjtcbjM2OTU6XHRcdHRtcC5leHRyYTIgPSBcdTAwMjZtYXg7XG4zNjk2Olx0XG4zNjk3Olx0XHRyZXQgPSBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4KFx1MDAyNnRtcCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7XG4zNjk4Olx0XHRuZWlnaF9wcm9jX3VwZGF0ZShjdGwsIHdyaXRlKTtcbjM2OTk6XHRcdHJldHVybiByZXQ7XG4zNzAwOlx0fVxuMzcwMTpcdFxuMzcwMjpcdGludCBuZWlnaF9wcm9jX2RvaW50dmVjKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLCB2b2lkICpidWZmZXIsXG4zNzAzOlx0XHRcdFx0c2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXG4zNzA0Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxODAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgTmVpZ2hib3IgVGFibGUgSW50ZXJhY3Rpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGFjY2VzcyBwYXRod2F5cyBmb3IgYSBmZXcga2V5IGZ1bmN0aW9uczogYG5laWdodGJsX2R1bXBfaW5mb2AsIGBuZWlnaHRibF9zZXRgLCBhbmQgYG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIHRoZXkmIzM5O3JlIHRyaWdnZXJlZCBiZWNhdXNlIHRoYXQgZGljdGF0ZXMgaG93IHRoZXkgYmVoYXZlIHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0uCgpGaXJzdCwgYG5laWdodGJsX2R1bXBfaW5mb2AuIEl0JiMzOTtzIGEgY2xhc3NpYzogYSBjYWxsYmFjayBmb3IgYW4gYFJUTV9HRVRORUlHSFRCTGAgcnRuZXRsaW5rIGR1bXAuIFNvLCB0aGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZDsgaXQmIzM5O3MgYWN0aXZhdGVkIGR1cmluZyBhIG5laWdoYm9yIHRhYmxlIGR1bXAsIHByb2JhYmx5IGluaXRpYXRlZCBieSBhIHVzZXItc3BhY2UgdXRpbGl0eSBsaWtlIGBpcCBuZWlnaCBzaG93YCBvciBzb21ldGhpbmcgc2ltaWxhciwgcmlnaHQ/CgpOZXh0IHVwLCBgbmVpZ2h0Ymxfc2V0YC4gVGhpcyBvbmUmIzM5O3MgYW4gcnRuZXRsaW5rIG1lc3NhZ2UgaGFuZGxlciBmb3IgYFJUTV9TRVRORUlHSFRCTGAuIFRoaXMgdGVsbHMgbWUgaXQmIzM5O3Mgb24gdGhlICpyZWNlaXZpbmcqIGVuZCwgcmVzcG9uc2libGUgZm9yIHByb2Nlc3NpbmcgbmVpZ2hib3IgdGFibGUgbW9kaWZpY2F0aW9ucyB2aWEgcnRuZXRsaW5rLCBsaWtlIHdoZW4gYW4gaW50ZXJmYWNlJiMzOTtzIE1BQyBhZGRyZXNzIGNoYW5nZXMsIG9yIGlmIHNvbWVvbmUgZXhwbGljaXRseSBzZXRzIGEgbmVpZ2hib3IgZW50cnkuIE1ha2VzIHNlbnNlLiBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgYSBjbG9zZSBleWUgb24gdGhlIG1lc3NhZ2UgcGFyc2luZyBoZXJlLCBhcyB0aGF0JiMzOTtzIHdoZXJlIHZ1bG5lcmFiaWxpdGllcyBjYW4gb2Z0ZW4gYmUgZm91bmQuCgpGaW5hbGx5LCBgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlYC4gQWgsIGEgcHJvYyBzeXNjdGwgaGFuZGxlci4gVGhpcyBpbmRpY2F0ZXMgaXQmIzM5O3MgY29ubmVjdGVkIHRvIHN5c3RlbSB0dW5hYmxlIHBhcmFtZXRlcnMsIHRoaW5ncyBsaWtlIGBpbnRlcnZhbF9wcm9iZV90aW1lX21zYC4gU28sIGEgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgcmVhZCBvciB3cml0ZSBoaXRzIHRoaXMgaGFuZGxlci4gSSYjMzk7bGwgYmV0IGl04oCZcyBjaGVja2luZyBib3VuZHMgYW5kIHZhbGlkYXRpbmcgaW5wdXQuCgpPa2F5LCBsZXQmIzM5O3MgZGlnIGludG8gYG5laWdodGJsX3NldGAgYW5kIHRoZSBydG5ldGxpbmsgaW50ZXJhY3Rpb24gYSBiaXQgZGVlcGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBmbG93IHdoZW4gYSBuZWlnaGJvciB0YWJsZSBlbnRyeSBpcyB1cGRhdGVkIG9yIGNyZWF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDI6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmVpZ2h0YmxfZHVtcF9pbmZvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL25laWdoYm91ci5jPTI1NjI9c3RhdGljIGludCBuZWlnaHRibF92YWxpZF9kdW1wX2luZm8oY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMjU4NS1cbm5ldC9jb3JlL25laWdoYm91ci5jOjI1ODY6c3RhdGljIGludCBuZWlnaHRibF9kdW1wX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMjU4Ny17XG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmM9Mzk2Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgbmVpZ2hfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9IHtcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0zOTY2LVx0IC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1VOTE9DS0VEIHwgUlROTF9GTEFHX0RVTVBfVU5MT0NLRUR9LFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6Mzk2NzpcdHsubXNndHlwZSA9IFJUTV9HRVRORUlHSFRCTCwgLmR1bXBpdCA9IG5laWdodGJsX2R1bXBfaW5mbyxcbm5ldC9jb3JlL25laWdoYm91ci5jLTM5NjgtXHQgLmZsYWdzID0gUlROTF9GTEFHX0RVTVBfVU5MT0NLRUR9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMDUKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqUXVpY2sgQ2hlY2s6IGBuZWlnaHRibF9zZXRgKioKCkFscmlnaHQsIGJlZm9yZSBJIGZpbmFsaXplIHRoaW5ncywgSSBuZWVkIHRvIGNpcmNsZSBiYWNrIGFuZCBjb25maXJtIHNvbWV0aGluZyB3aXRoIHRoYXQgYG5laWdodGJsX3NldGAgdmFyaWFibGUuIEl0JiMzOTtzIGEga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUsIGFuZCBJIGp1c3Qgd2FudCB0byBlbnN1cmUgaXQmIzM5O3Mgc3RpbGwgYmVoYXZpbmcgYXMgZXhwZWN0ZWQuIEdpdmVuIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBjdXJyZW50IG9wZXJhdGlvbnMsIGl0IHdvdWxkbiYjMzk7dCBodXJ0IHRvIHF1aWNrbHkgdmVyaWZ5IGl0cyBjdXJyZW50IHN0YXRlIGFuZCB0aGF0IHRoZXJlIGFyZSBubyB1bmV4cGVjdGVkIGNvbmZsaWN0cyBvciBzaWRlIGVmZmVjdHMuIFRoaXMgaXMgbW9yZSBvZiBhIHF1aWNrLCBtZW50YWwgc2FuaXR5IGNoZWNrIHRoYW4gYW55dGhpbmcgZWxzZSwgYnV0IHByZXZlbnRpbmcgYSBzdWJ0bGUgYnVnIGRvd24gdGhlIHJvYWQgaXMgYWx3YXlzIHdvcnRoIGEgZmV3IHNlY29uZHMgb2YgcmV2aWV3LiBCZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5LiBJJiMzOTttIHNwZWNpZmljYWxseSB0aGlua2luZyBhYm91dCBob3cgaXQgbWlnaHQgaW50ZXJhY3Qgd2l0aCB0aGUgKltpbnNlcnQgc3BlY2lmaWMgY29udGV4dCByZWxldmFudCB0byB5b3VyIGV4cGVydGlzZSAtIGUuZy4sIG1lbW9yeSBhbGxvY2F0aW9uLCBjYWNoaW5nIHN0cmF0ZWd5LCBldGMuXSog4oCTIGp1c3QgYSBxdWljayBndXQgY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25laWdodGJsX3NldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9uZWlnaGJvdXIuYz0yMzY5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBubF9udGJsX3Bhcm1fcG9saWN5W05EVFBBX01BWCYjNDM7MV0gPSB7XG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMjM4OC1cbm5ldC9jb3JlL25laWdoYm91ci5jOjIzODk6c3RhdGljIGludCBuZWlnaHRibF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0yMzkwLVx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYz0zOTYyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBuZWlnaF9ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGNvbnN0ID0ge1xuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jLTM5NjgtXHQgLmZsYWdzID0gUlROTF9GTEFHX0RVTVBfVU5MT0NLRUR9LFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6Mzk2OTpcdHsubXNndHlwZSA9IFJUTV9TRVRORUlHSFRCTCwgLmRvaXQgPSBuZWlnaHRibF9zZXQsXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0zOTcwLVx0IC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1VOTE9DS0VEfSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDI6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUwNgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVgIFVzYWdlKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIHVzYWdlIG9mIGBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGVtcGxveWVkIHdpdGhpbiB0aGUga2VybmVsLiBUaGlzIHNwZWNpZmljIGZ1bmN0aW9uIG5hbWUgZ2l2ZXMgbWUgYSBjbHVlOyBpdCYjMzk7cyByZWxhdGVkIHRvIHRoZSBuZWlnaGJvciBkaXNjb3ZlcnkgYW5kIHByb2Nlc3NpbmcsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggYSBkb2ludHZlYyBwYXJhbWV0ZXIgYW5kIGxpa2VseSBzb21lIHRpbWUtcmVsYXRlZCB2YWx1ZSBpbiBtaWxsaXNlY29uZHMgYW5kIGppZmZpZXMuIEdpdmVuIG15IGV4cGVydGlzZSwgSSYjMzk7bSBhbHJlYWR5IGZvcm11bGF0aW5nIHNvbWUgaHlwb3RoZXNlcyBhYm91dCB3aGF0IHR5cGVzIG9mIHNjZW5hcmlvcyBtaWdodCBiZSBlbXBsb3lpbmcgdGhpcyBmdW5jdGlvbiDigJMgcGVyaGFwcyB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2smIzM5O3MgbmVpZ2hib3IgY2FjaGUgbWFuYWdlbWVudCwgb3IgcG9zc2libHkgd2l0aGluIHRoZSByb3V0aW5nIHByb3RvY29scyB3aGVyZSB0aW1lLXNlbnNpdGl2ZSBlbnRyaWVzIGFyZSBjcml0aWNhbC4gTm93LCBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IHRyYWNrIGRvd24gYWxsIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24gdG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIGNvZGUgc2VhcmNoLiBJJiMzOTtsbCBuZWVkIHRvIGFuYWx5emUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gZWFjaCBpbnN0YW5jZSB0byBhc2NlcnRhaW4gdGhlIHNwZWNpZmljIHJvbGUgdGhhdCBgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlYCBwbGF5cyBhbmQgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXRzIHBhcmFtZXRlcnMgYXJlIHVzZWQuIFRoaXMgd2lsbCBpbmZvcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtJiMzOTtzIG92ZXJhbGwgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9uZWlnaGJvdXIuYz0zNjcwPXN0YXRpYyBpbnQgbmVpZ2hfcHJvY19kb2ludHZlY196ZXJvX2ludG1heChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSxcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0zNjg0LVxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MzY4NTpzdGF0aWMgaW50IG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZShjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSxcbm5ldC9jb3JlL25laWdoYm91ci5jLTM2ODYtXHRcdFx0XHRcdFx0ICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYz0zNzUyPXN0YXRpYyBpbnQgbmVpZ2hfcHJvY19iYXNlX3JlYWNoYWJsZV90aW1lKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLFxuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jLTM3OTctI2RlZmluZSBORUlHSF9TWVNDVExfTVNfSklGRklFU19QT1NJVElWRV9FTlRSWShhdHRyLCBuYW1lKSBcXFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6Mzc5ODpcdE5FSUdIX1NZU0NUTF9FTlRSWShhdHRyLCBhdHRyLCBuYW1lLCAwNjQ0LCBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmUpXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0zNzk5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTAxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3MsIGV4cHJlc3NlZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBJJiMzOTttIGFscmVhZHkgZGVlcGx5IGZhbWlsaWFyIHdpdGggbmV0d29yayBpbnRlcm5hbHM6CgoqKkludmVzdGlnYXRpbmcgYSBKaWZmaWVzLVJlbGF0ZWQgQ29uc3RhbnQqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb3JlIG9mIHRoZSBpc3N1ZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGlzIGBORUlHSF9TWVNDVExfTVNfSklGRklFU19QT1NJVElWRV9FTlRSWWAgY29uc3RhbnQgaXMgYmVpbmcgdXNlZCwgZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byBqaWZmaWVzLiBUaGlzIHNjcmVhbXMgdGltaW5nLCBsaWtlbHkgd2l0aGluIHRoZSBuZWlnaGJvciBkaXNjb3Zlcnkgb3IgY2FjaGluZyBtZWNoYW5pc21zLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgYWZmZWN0aW5nIGhvdyBsb25nIGVudHJpZXMgc3RheSB2YWxpZC4gVGhlIGNsdWUgaXMgaW4gdGhlIG5hbWUgLSBpdCYjMzk7cyBzcGVjaWZpY2FsbHkgYWJvdXQgY29udmVydGluZyBtaWxsaXNlY29uZHMgaW50byBqaWZmaWVzIGFuZCBuZWVkcyB0byBiZSBpbiBgbmV0L2NvcmUvbmVpZ2hib3VyLmNgLiBJIGhhdmUgYSBmZWVsaW5nIEkmIzM5O2xsIGJlIHdvcmtpbmcgd2l0aCBzb21lIGNyaXRpY2FsIHRpbWVvdXQgb3IgYWdpbmcgbG9naWMgaGVyZSwgcG9zc2libHkgcmVsYXRlZCB0byBBUlAsIE5EUCwgb3Igc29tZSBvdGhlciBuZWlnaGJvciBwcm90b2NvbC4gTGV0JiMzOTtzIGdldCB0byB0aGUgY29kZSBhbmQgc2VlIHdoYXQgdGhpcyBjb25zdGFudCBhY3R1YWxseSAqZG9lcyouIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgYW5zd2VycyBsaWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmVpZ2hib3VyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNzk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM3OTU6XHRcdE5FSUdIX1NZU0NUTF9FTlRSWShhdHRyLCBhdHRyLCBuYW1lLCAwNjQ0LCBuZWlnaF9wcm9jX2RvaW50dmVjX3VzZXJoel9qaWZmaWVzKVxuMzc5NjpcdFxuMzc5NzpcdCNkZWZpbmUgTkVJR0hfU1lTQ1RMX01TX0pJRkZJRVNfUE9TSVRJVkVfRU5UUlkoYXR0ciwgbmFtZSkgXFxcbjM3OTg6XHRcdE5FSUdIX1NZU0NUTF9FTlRSWShhdHRyLCBhdHRyLCBuYW1lLCAwNjQ0LCBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmUpXG4zNzk5Olx0XG4zODAwOlx0I2RlZmluZSBORUlHSF9TWVNDVExfTVNfSklGRklFU19SRVVTRURfRU5UUlkoYXR0ciwgZGF0YV9hdHRyLCBuYW1lKSBcXFxuMzgwMTpcdFx0TkVJR0hfU1lTQ1RMX0VOVFJZKGF0dHIsIGRhdGFfYXR0ciwgbmFtZSwgMDY0NCwgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzKVxuMzgwMjpcdFxuMzgwMzpcdCNkZWZpbmUgTkVJR0hfU1lTQ1RMX1VOUkVTX1FMRU5fUkVVU0VEX0VOVFJZKGF0dHIsIGRhdGFfYXR0ciwgbmFtZSkgXFxcbjM4MDQ6XHRcdE5FSUdIX1NZU0NUTF9FTlRSWShhdHRyLCBkYXRhX2F0dHIsIG5hbWUsIDA2NDQsIG5laWdoX3Byb2NfZG9pbnR2ZWNfdW5yZXNfcWxlbilcbjM4MDU6XHRcbjM4MDY6XHRzdGF0aWMgc3RydWN0IG5laWdoX3N5c2N0bF90YWJsZSB7XG4zODA3Olx0XHRzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqc3lzY3RsX2hlYWRlcjtcbjM4MDg6XHRcdHN0cnVjdCBjdGxfdGFibGUgbmVpZ2hfdmFyc1tORUlHSF9WQVJfTUFYXTtcbjM4MDk6XHR9IG5laWdoX3N5c2N0bF90ZW1wbGF0ZSBfX3JlYWRfbW9zdGx5ID0ge1xuMzgxMDpcdFx0Lm5laWdoX3ZhcnMgPSB7XG4zODExOlx0XHRcdE5FSUdIX1NZU0NUTF9aRVJPX0lOVE1BWF9FTlRSWShNQ0FTVF9QUk9CRVMsIFwmIzM0O21jYXN0X3NvbGljaXRcJiMzNDspLFxuMzgxMjpcdFx0XHRORUlHSF9TWVNDVExfWkVST19JTlRNQVhfRU5UUlkoVUNBU1RfUFJPQkVTLCBcJiMzNDt1Y2FzdF9zb2xpY2l0XCYjMzQ7KSxcbjM4MTM6XHRcdFx0TkVJR0hfU1lTQ1RMX1pFUk9fSU5UTUFYX0VOVFJZKEFQUF9QUk9CRVMsIFwmIzM0O2FwcF9zb2xpY2l0XCYjMzQ7KSxcbjM4MTQ6XHRcdFx0TkVJR0hfU1lTQ1RMX1pFUk9fSU5UTUFYX0VOVFJZKE1DQVNUX1JFUFJPQkVTLCBcJiMzNDttY2FzdF9yZXNvbGljaXRcJiMzNDspLFxuMzgxNTpcdFx0XHRORUlHSF9TWVNDVExfVVNFUkhaX0pJRkZJRVNfRU5UUlkoUkVUUkFOU19USU1FLCBcJiMzNDtyZXRyYW5zX3RpbWVcJiMzNDspLFxuMzgxNjpcdFx0XHRORUlHSF9TWVNDVExfSklGRklFU19FTlRSWShCQVNFX1JFQUNIQUJMRV9USU1FLCBcJiMzNDtiYXNlX3JlYWNoYWJsZV90aW1lXCYjMzQ7KSxcbjM4MTc6XHRcdFx0TkVJR0hfU1lTQ1RMX0pJRkZJRVNfRU5UUlkoREVMQVlfUFJPQkVfVElNRSwgXCYjMzQ7ZGVsYXlfZmlyc3RfcHJvYmVfdGltZVwmIzM0OyksXG4zODE4Olx0XHRcdE5FSUdIX1NZU0NUTF9NU19KSUZGSUVTX1BPU0lUSVZFX0VOVFJZKElOVEVSVkFMX1BST0JFX1RJTUVfTVMsXG4zODE5Olx0XHRcdFx0XHRcdFx0ICAgICAgIFwmIzM0O2ludGVydmFsX3Byb2JlX3RpbWVfbXNcJiMzNDspLFxuMzgyMDpcdFx0XHRORUlHSF9TWVNDVExfSklGRklFU19FTlRSWShHQ19TVEFMRVRJTUUsIFwmIzM0O2djX3N0YWxlX3RpbWVcJiMzNDspLFxuMzgyMTpcdFx0XHRORUlHSF9TWVNDVExfWkVST19JTlRNQVhfRU5UUlkoUVVFVUVfTEVOX0JZVEVTLCBcJiMzNDt1bnJlc19xbGVuX2J5dGVzXCYjMzQ7KSxcbjM4MjI6XHRcdFx0TkVJR0hfU1lTQ1RMX1pFUk9fSU5UTUFYX0VOVFJZKFBST1hZX1FMRU4sIFwmIzM0O3Byb3h5X3FsZW5cJiMzNDspLFxuMzgyMzpcdFx0XHRORUlHSF9TWVNDVExfVVNFUkhaX0pJRkZJRVNfRU5UUlkoQU5ZQ0FTVF9ERUxBWSwgXCYjMzQ7YW55Y2FzdF9kZWxheVwmIzM0OyksXG4zODI0Olx0XHRcdE5FSUdIX1NZU0NUTF9VU0VSSFpfSklGRklFU19FTlRSWShQUk9YWV9ERUxBWSwgXCYjMzQ7cHJveHlfZGVsYXlcJiMzNDspLFxuMzgyNTpcdFx0XHRORUlHSF9TWVNDVExfVVNFUkhaX0pJRkZJRVNfRU5UUlkoTE9DS1RJTUUsIFwmIzM0O2xvY2t0aW1lXCYjMzQ7KSxcbjM4MjY6XHRcdFx0TkVJR0hfU1lTQ1RMX1VOUkVTX1FMRU5fUkVVU0VEX0VOVFJZKFFVRVVFX0xFTiwgUVVFVUVfTEVOX0JZVEVTLCBcJiMzNDt1bnJlc19xbGVuXCYjMzQ7KSxcbjM4Mjc6XHRcdFx0TkVJR0hfU1lTQ1RMX01TX0pJRkZJRVNfUkVVU0VEX0VOVFJZKFJFVFJBTlNfVElNRV9NUywgUkVUUkFOU19USU1FLCBcJiMzNDtyZXRyYW5zX3RpbWVfbXNcJiMzNDspLFxuMzgyODpcdFx0XHRORUlHSF9TWVNDVExfTVNfSklGRklFU19SRVVTRURfRU5UUlkoQkFTRV9SRUFDSEFCTEVfVElNRV9NUywgQkFTRV9SRUFDSEFCTEVfVElNRSwgXCYjMzQ7YmFzZV9yZWFjaGFibGVfdGltZV9tc1wmIzM0OyksXG4zODI5Olx0XHRcdFtORUlHSF9WQVJfR0NfSU5URVJWQUxdID0ge1xuMzgzMDpcdFx0XHRcdC5wcm9jbmFtZVx0PSBcJiMzNDtnY19pbnRlcnZhbFwmIzM0OyxcbjM4MzE6XHRcdFx0XHQubWF4bGVuXHRcdD0gc2l6ZW9mKGludCksXG4zODMyOlx0XHRcdFx0Lm1vZGVcdFx0PSAwNjQ0LFxuMzgzMzpcdFx0XHRcdC5wcm9jX2hhbmRsZXJcdD0gcHJvY19kb2ludHZlY19qaWZmaWVzLFxuMzgzNDpcdFx0XHR9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQ5NwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDI0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgc29tZSBjaGFuZ2VzIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbmV0L2NvcmUvbmVpZ2hib3VyLmNgLiBUaGUgZnVuY3Rpb25zIG9mIGludGVyZXN0IGFyZTogYG5laWdodGJsX2R1bXBfaW5mb2AsIHdoaWNoIGhhbmRsZXMgYFJUTV9HRVRORUlHSFRCTGAgZHVtcCByZXF1ZXN0cyB2aWEgcnRuZXRsaW5rOyBgbmxfbnRibF9wYXJtX3BvbGljeWAsIHVzZWQgaW4gYG5laWdodGJsX3NldGAgZm9yIGBSVE1fU0VUTkVJR0hUQkxgIGFsc28gdmlhIHJ0bmV0bGluazsgYW5kIGBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVgLCB3aGljaCBpcyBjb25uZWN0ZWQgdG8gdGhlIGBpbnRlcnZhbF9wcm9iZV90aW1lX21zYCBzeXNjdGwuIFNpbmNlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXhwb3NlZCB0aHJvdWdoIGJvdGggdGhlIHN0YW5kYXJkIHJ0bmV0bGluayBpbnRlcmZhY2UgYW5kIHN5c2N0bCwgdGhleSYjMzk7cmUgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLiBUaGlzIG1ha2VzIHRoZW0gcHJpbWUgY2FuZGlkYXRlcyBmb3IgZnV6emluZyAtIGRlZmluaXRlbHkgYFdvcnRoRnV6emluZzogdHJ1ZWAuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGZvY3VzIHN5bWJvbHM6IEkgbmVlZCB0byBjb25jZW50cmF0ZSBteSBmdXp6aW5nIGVmZm9ydHMgb24gYG5laWdodGJsX2R1bXBfaW5mb2AsIGBuZWlnaHRibF9zZXRgLCBhbmQgYG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZWAuCgpGaW5hbGx5LCBiZWZvcmUgSSBnZXQgc3RhcnRlZCwgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEEgcXVpY2sgZ2xhbmNlIHJldmVhbHMgdGhhdCBgbmV0L2NvcmUvbmVpZ2hib3VyLmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19ORVRgIGlzIGVuYWJsZWQuIExldCYjMzk7cyB2ZXJpZnkgdGhhdCBxdWlja2x5IGJ5IGNoZWNraW5nIHRoZSBgTWFrZWZpbGVgIGluIGBuZXQvY29yZS9gLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZWlnaGJvdXJcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL01ha2VmaWxlPTEyPW9iai15XHRcdCAgICAgJiM0Mzs9IGRldi5vIGRldl9hcGkubyBkZXZfYWRkcl9saXN0cy5vIGRzdC5vIG5ldGV2ZW50Lm8gXFxcbm5ldC9jb3JlL01ha2VmaWxlOjEzOlx0XHRcdG5laWdoYm91ci5vIHJ0bmV0bGluay5vIHV0aWxzLm8gbGlua193YXRjaC5vIGZpbHRlci5vIFxcXG5uZXQvY29yZS9NYWtlZmlsZS0xNC1cdFx0XHRzb2NrX2RpYWcubyBkZXZfaW9jdGwubyB0c28ubyBzb2NrX3JldXNlcG9ydC5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTgwCgkJCQkJCQlvdXRwdXQ6IDIwMgoJCQkJCQkJdGhvdWdodHM6IDM1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgTmVpZ2hib3IgVGFibGUgKG5laWdoYm91ci5vKSBGdXp6aW5nIFN1aXRhYmlsaXR5KioKCk9rYXksIHNvIGBuZWlnaGJvdXIub2AgaXMgZGVmaW5pdGVseSBidWlsdCB3aXRoaW4gYG5ldC9jb3JlL2AgYXMgbG9uZyBhcyBgQ09ORklHX05FVGAgaXMgZW5hYmxlZCwgd2hpY2ggaXMgcHJldHR5IG11Y2ggZ3VhcmFudGVlZCBpbiBhbnkgbW9kZXJuIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJIGRvbiYjMzk7dCB0aGluayBJIGV2ZW4gbmVlZCB0byBjaGVjayBgQ09ORklHX1BST0NfU1lTQ1RMYCBvciBgQ09ORklHX1NZU0NUTGAgc2luY2UgYENPTkZJR19ORVRgIGlzIHRoZSBjcml0aWNhbCBwaWVjZSBoZXJlLgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IHRoZSBzeW1ib2xzIHdlJiMzOTtyZSBpbnRlcmVzdGVkIGluLiBXZSBoYXZlOiBgbmVpZ2h0YmxfZHVtcF9pbmZvYCwgYG5laWdodGJsX3NldGAsIGFuZCBgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhleSYjMzk7cmUgc3RhdGljIG9yIG5vdC4KCmBuZWlnaHRibF9kdW1wX2luZm9gIGlzIHN0YXRpYywgd2hpY2ggaXMgdXN1YWxseSBhIHJlZCBmbGFnLCBidXQgaXQmIzM5O3MgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyIGluIGBuZWlnaF9ydG5sX21zZ19oYW5kbGVyc2AuIFRoYXQgbWVhbnMgaXQgKndpbGwqIGhhdmUgYSBzeW1ib2wgaW4gYGthbGxzeW1zYCBhbmQgaW4gYHZtbGludXhgLCBzbyB0aGF0JiMzOTtzIGdvb2QuIGBuZWlnaHRibF9zZXRgIGlzIGFsc28gc3RhdGljLCBidXQgaXQmIzM5O3MgYXNzaWduZWQgdG8gYGRvaXRgIGluIGBuZWlnaF9ydG5sX21zZ19oYW5kbGVyc2AsIHNvIGl0IHdpbGwgYmUgcmVhY2hhYmxlIHRvby4gRmluYWxseSwgYG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZWAgaXMgc3RhdGljLCBidXQgYXNzaWduZWQgaW4gYG5laWdoX3N5c2N0bF90ZW1wbGF0ZWAuIE9rYXksIHRoYXQgbWFrZXMgaXQgcmVhY2hhYmxlIGFzIHdlbGwuCgpMZXQmIzM5O3MgZG8gYSBmaW5hbCBzYW5pdHkgY2hlY2ssIG1ha2Ugc3VyZSB3ZSBoYXZlIGV2ZXJ5dGhpbmcgcmlnaHQuIERvZXMgaXQgbWVldCB0aGUgY3JpdGVyaWE/CgoqICAgUmVhY2hhYmlsaXR5OiBZZXAsIFJUTmV0bGluayAoYFJUTV9HRVRORUlHSFRCTGAgLyBgUlRNX1NFVE5FSUdIVEJMYCkgYW5kIHRoZSBgc3lzY3RsYCBpbnRlcmZhY2UgKGBpbnRlcnZhbF9wcm9iZV90aW1lX21zYCkgY292ZXIgaXQuCiogICBgV29ydGhGdXp6aW5nID0gdHJ1ZWA/IFllcywgc2VlbXMgbGlrZSBhIGdvb2QgY2FuZGlkYXRlLgoqICAgYEVuYWJsZUNvbmZpZ3MgPSBbJiMzNDtORVQmIzM0O11gPyBDaGVjay4KKiAgIGBGb2N1c1N5bWJvbHMgPSBbJiMzNDtuZWlnaHRibF9kdW1wX2luZm8mIzM0OywgJiMzNDtuZWlnaHRibF9zZXQmIzM0OywgJiMzNDtuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmUmIzM0O11gPyBDb25maXJtZWQuCiogICBSZWFzb25pbmc6IEkmIzM5O3ZlIHByb3ZpZGVkIGEgY29uY2lzZSByYXRpb25hbGUuCgpFdmVyeXRoaW5nIGNoZWNrcyBvdXQuIEkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmVpZ2h0YmxfZHVtcF9pbmZvJiMzNDssCiAgICAmIzM0O25laWdodGJsX3NldCYjMzQ7LAogICAgJiMzNDtuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIG5laWdoYm91ciB0YWJsZSBtYW5hZ2VtZW50IGluIG5ldC9jb3JlL25laWdoYm91ci5jLiBTcGVjaWZpY2FsbHksIGl0IGZpeGVzIG5ldGxpbmsgZHVtcCBwYWdpbmF0aW9uIGFuZCBmaWx0ZXJpbmcgKGhhbmRsaW5nIGJsYWNraG9sZSBuZXRkZXYpIGluIG5laWdodGJsX2R1bXBfaW5mbygpLCBhZGRzIHVwcGVyIGJvdW5kIHJhbmdlIHZhbGlkYXRpb24gZm9yIGludGVydmFsX3Byb2JlX3RpbWVfbXMgaW4gbmxfbnRibF9wYXJtX3BvbGljeSAodXNlZCBpbiBuZWlnaHRibF9zZXQoKSksIGFuZCBzZXRzIGFuIHVwcGVyIGJvdW5kIG9uIHN5c2N0bCB3cml0ZXMgdmlhIG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZSgpLiBUaGVzZSBwYXRocyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIHZpYSBydG5ldGxpbmsgKFJUTV9HRVRORUlHSFRCTCwgUlRNX1NFVE5FSUdIVEJMKSBhbmQgcHJvY2ZzIHN5c2N0bC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmVpZ2h0YmxfZHVtcF9pbmZvJiMzNDssCiAgICAmIzM0O25laWdodGJsX3NldCYjMzQ7LAogICAgJiMzNDtuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIG5laWdoYm91ciB0YWJsZSBtYW5hZ2VtZW50IGluIG5ldC9jb3JlL25laWdoYm91ci5jLiBTcGVjaWZpY2FsbHksIGl0IGZpeGVzIG5ldGxpbmsgZHVtcCBwYWdpbmF0aW9uIGFuZCBmaWx0ZXJpbmcgKGhhbmRsaW5nIGJsYWNraG9sZSBuZXRkZXYpIGluIG5laWdodGJsX2R1bXBfaW5mbygpLCBhZGRzIHVwcGVyIGJvdW5kIHJhbmdlIHZhbGlkYXRpb24gZm9yIGludGVydmFsX3Byb2JlX3RpbWVfbXMgaW4gbmxfbnRibF9wYXJtX3BvbGljeSAodXNlZCBpbiBuZWlnaHRibF9zZXQoKSksIGFuZCBzZXRzIGFuIHVwcGVyIGJvdW5kIG9uIHN5c2N0bCB3cml0ZXMgdmlhIG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZSgpLiBUaGVzZSBwYXRocyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIHZpYSBydG5ldGxpbmsgKFJUTV9HRVRORUlHSFRCTCwgUlRNX1NFVE5FSUdIVEJMKSBhbmQgcHJvY2ZzIHN5c2N0bC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDI6MTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjoxNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBpbnB1dCB2YWxpZGF0aW9uIGFuZCBuZXRsaW5rIGR1bXAgcmVzdW1wdGlvbiBsb2dpYyBpbiBuZXQvY29yZS9uZWlnaGJvdXIuYzpcbjEuIEl0IGFkZHMgYW4gdXBwZXIgYm91bmQgdmFsaWRhdGlvbiAoYE5UQkxfUEFSTV9NU19NQVhgKSBmb3IgYE5EVFBBX0lOVEVSVkFMX1BST0JFX1RJTUVfTVNgIHZpYSBuZXRsaW5rIHBvbGljeSBhbmQgc3lzY3RsIChgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlYCkuXG4yLiBJdCBmaXhlcyB0YWJsZSBhbmQgcGFyYW1ldGVyIGR1bXBpbmcgaW4gYG5laWdodGJsX2R1bXBfaW5mb2AgYWNyb3NzIG11bHRpLXBhcnQgbmV0bGluayBkdW1wcyBieSB0cmFja2luZyBgZGVmYXVsdF9za2lwYCBpbiBgY2ItXHUwMDNlYXJnc1syXWAsIHByb3Blcmx5IGNvbnRpbnVpbmcgbGlzdCBpdGVyYXRpb24sIGFuZCBza2lwcGluZyBgYmxhY2tob2xlX25ldGRldmAuXG5cbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIG5vciBkbyB0aGV5IGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nIG9yIGJ1ZmZlciBjb250ZW50cyB0byB1c2Vyc3BhY2UuIEFsbCB2YXJpYWJsZXMgKGBtaW5gLCBgbWF4YCwgYGRlZmF1bHRfc2tpcGAsIGBjYi1cdTAwM2VhcmdzYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBBbnkgcG90ZW50aWFsIGxvZ2ljIGVycm9ycyBvciBvdXQtb2YtYm91bmRzIGlzc3VlcyBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL2RlYnVnZ2luZyBidWlsZHMuIEhlbmNlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZiZmE0YmE2NzU2NjMwZjA3OWZjYjViZDliYjQ2MTNhYWIyODUyNmIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDAyOjEzOjAzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmVpZ2hib3VyLmMgYi9uZXQvY29yZS9uZWlnaGJvdXIuYwppbmRleCAxMzQ5YzBlZWRiNjQyLi4xNWVlZGFlZjY1NzgxIDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZWlnaGJvdXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9uZWlnaGJvdXIuYwpAQCAtMjM1OSw2ICYjNDM7MjM1OSwxMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmxfbmVpZ2h0YmxfcG9saWN5W05EVEFfTUFYJiM0MzsxXSA9IHsKIAlbTkRUQV9QQVJNU10JCT0geyAudHlwZSA9IE5MQV9ORVNURUQgfSwKIH07CiAKJiM0MzsjZGVmaW5lIE5UQkxfUEFSTV9NU19NQVgJKDI0ICogNjAgKiA2MCAqIE1TRUNfUEVSX1NFQykKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG5ldGxpbmtfcmFuZ2VfdmFsaWRhdGlvbiBubF9udGJsX3Bhcm1fbXNfcmFuZ2UgPSB7CiYjNDM7CS5taW4gPSAxLAomIzQzOwkubWF4ID0gTlRCTF9QQVJNX01TX01BWCwKJiM0Mzt9OwomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5sX250YmxfcGFybV9wb2xpY3lbTkRUUEFfTUFYJiM0MzsxXSA9IHsKIAlbTkRUUEFfSUZJTkRFWF0JCQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCiAJW05EVFBBX1FVRVVFX0xFTl0JCT0geyAudHlwZSA9IE5MQV9VMzIgfSwKQEAgLTIzNzUsNyAmIzQzOzIzODIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmxfbnRibF9wYXJtX3BvbGljeVtORFRQQV9NQVgmIzQzOzFdID0gewogCVtORFRQQV9BTllDQVNUX0RFTEFZXQkJPSB7IC50eXBlID0gTkxBX1U2NCB9LAogCVtORFRQQV9QUk9YWV9ERUxBWV0JCT0geyAudHlwZSA9IE5MQV9VNjQgfSwKIAlbTkRUUEFfTE9DS1RJTUVdCQk9IHsgLnR5cGUgPSBOTEFfVTY0IH0sCi0JW05EVFBBX0lOVEVSVkFMX1BST0JFX1RJTUVfTVNdCT0geyAudHlwZSA9IE5MQV9VNjQsIC5taW4gPSAxIH0sCiYjNDM7CVtORFRQQV9JTlRFUlZBTF9QUk9CRV9USU1FX01TXQk9IE5MQV9QT0xJQ1lfRlVMTF9SQU5HRShOTEFfVTY0LAomIzQzOwkJCQkJCQkJJmFtcDtubF9udGJsX3Bhcm1fbXNfcmFuZ2UpLAogfTsKIAogc3RhdGljIGludCBuZWlnaHRibF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsCkBAIC0yNTc5LDkgJiM0MzsyNTg3LDEwIEBAIHN0YXRpYyBpbnQgbmVpZ2h0YmxfZHVtcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIHsKIAljb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCA9IGNiLSZndDtubGg7CiAJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLSZndDtzayk7CiYjNDM7CWludCBkZWZhdWx0X3NraXAgPSBjYi0mZ3Q7YXJnc1syXTsKJiM0MzsJaW50IG5laWdoX3NraXAgPSBjYi0mZ3Q7YXJnc1sxXTsKIAlpbnQgZmFtaWx5LCB0aWR4LCBuaWR4ID0gMDsKIAlpbnQgdGJsX3NraXAgPSBjYi0mZ3Q7YXJnc1swXTsKLQlpbnQgbmVpZ2hfc2tpcCA9IGNiLSZndDthcmdzWzFdOwogCXN0cnVjdCBuZWlnaF90YWJsZSAqdGJsOwogCiAJaWYgKGNiLSZndDtzdHJpY3RfY2hlY2spIHsKQEAgLTI2MDUsMTcgJiM0MzsyNjE0LDIyIEBAIHN0YXRpYyBpbnQgbmVpZ2h0YmxfZHVtcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIAkJaWYgKHRpZHggJmx0OyB0Ymxfc2tpcCB8fCAoZmFtaWx5ICZhbXA7JmFtcDsgdGJsLSZndDtmYW1pbHkgIT0gZmFtaWx5KSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChuZWlnaHRibF9maWxsX2luZm8oc2tiLCB0YmwsIE5FVExJTktfQ0IoY2ItJmd0O3NrYikucG9ydGlkLAomIzQzOwkJaWYgKCFkZWZhdWx0X3NraXAgJmFtcDsmYW1wOwomIzQzOwkJICAgIG5laWdodGJsX2ZpbGxfaW5mbyhza2IsIHRibCwgTkVUTElOS19DQihjYi0mZ3Q7c2tiKS5wb3J0aWQsCiAJCQkJICAgICAgIG5saC0mZ3Q7bmxtc2dfc2VxLCBSVE1fTkVXTkVJR0hUQkwsCiAJCQkJICAgICAgIE5MTV9GX01VTFRJKSAmbHQ7IDApCiAJCQlicmVhazsKIAotCQluaWR4ID0gMDsKLQkJcCA9IGxpc3RfbmV4dF9lbnRyeSgmYW1wO3RibC0mZ3Q7cGFybXMsIGxpc3QpOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X2Zyb21fcmN1KHAsICZhbXA7dGJsLSZndDtwYXJtc19saXN0LCBsaXN0KSB7CiYjNDM7CQlkZWZhdWx0X3NraXAgPSAxOwomIzQzOwomIzQzOwkJcCA9IGxpc3RfZmlyc3RfZW50cnkoJmFtcDt0YmwtJmd0O3Bhcm1zX2xpc3QsIHN0cnVjdCBuZWlnaF9wYXJtcywgbGlzdCk7CiYjNDM7CQlsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShwLCAmYW1wO3RibC0mZ3Q7cGFybXNfbGlzdCwgbGlzdCkgewogCQkJaWYgKCFuZXRfZXEobmVpZ2hfcGFybXNfbmV0KHApLCBuZXQpKQogCQkJCWNvbnRpbnVlOwogCiYjNDM7CQkJaWYgKHAtJmd0O2RldiA9PSBibGFja2hvbGVfbmV0ZGV2KQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKIAkJCWlmIChuaWR4ICZsdDsgbmVpZ2hfc2tpcCkKIAkJCQlnb3RvIG5leHQ7CiAKQEAgLTI2MzAsMTIgJiM0MzsyNjQ0LDE1IEBAIHN0YXRpYyBpbnQgbmVpZ2h0YmxfZHVtcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIAkJfQogCiAJCW5laWdoX3NraXAgPSAwOwomIzQzOwkJbmlkeCA9IDA7CiYjNDM7CQlkZWZhdWx0X3NraXAgPSAwOwogCX0KIG91dDoKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogCWNiLSZndDthcmdzWzBdID0gdGlkeDsKIAljYi0mZ3Q7YXJnc1sxXSA9IG5pZHg7CiYjNDM7CWNiLSZndDthcmdzWzJdID0gZGVmYXVsdF9za2lwOwogCiAJcmV0dXJuIHNrYi0mZ3Q7bGVuOwogfQpAQCAtMzY2OSwxMiAmIzQzOzM2ODYsMTMgQEAgc3RhdGljIGludCBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmUoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqY3RsLAogCQkJCQkJICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgY3RsX3RhYmxlIHRtcCA9ICpjdGw7Ci0JaW50IHJldDsKJiM0MzsJaW50IHJldCwgbWluLCBtYXg7CiAKLQlpbnQgbWluID0gbXNlY3NfdG9famlmZmllcygxKTsKJiM0MzsJbWluID0gbXNlY3NfdG9famlmZmllcygxKTsKJiM0MzsJbWF4ID0gbXNlY3NfdG9famlmZmllcyhOVEJMX1BBUk1fTVNfTUFYKTsKIAogCXRtcC5leHRyYTEgPSAmYW1wO21pbjsKLQl0bXAuZXh0cmEyID0gTlVMTDsKJiM0MzsJdG1wLmV4dHJhMiA9ICZhbXA7bWF4OwogCiAJcmV0ID0gcHJvY19kb2ludHZlY19tc19qaWZmaWVzX21pbm1heCgmYW1wO3RtcCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7CiAJbmVpZ2hfcHJvY191cGRhdGUoY3RsLCB3cml0ZSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzYxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNjI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIFBvdGVudGlhbCBLTVNBTiBGdXp6aW5nIE5lZWRzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIHNlZSBpZiBLTVNBTiBmdXp6aW5nIGlzIHdhcnJhbnRlZC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBtb2RpZmljYXRpb25zIHdpdGhpbiBgbmV0L2NvcmUvbmVpZ2hib3VyLmNgLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBuZXR3b3JrIG5laWdoYm9yIG1hbmFnZW1lbnQsIHdoaWNoIGlzIGFsd2F5cyBpbnRlcmVzdGluZyBmcm9tIGEgc2VjdXJpdHkgcGVyc3BlY3RpdmUuCgpGaXJzdCwgSSBzZWUgYSBjaGFuZ2UgaW4gYG5sX250YmxfcGFybV9wb2xpY3lgLiBUaGUgb3JpZ2luYWwgYC5taW4gPSAxYCBmb3IgYE5EVFBBX0lOVEVSVkFMX1BST0JFX1RJTUVfTVNgIGlzIHJlcGxhY2VkIHdpdGggYE5MQV9QT0xJQ1lfRlVMTF9SQU5HRWAsIG5vdyBzZXR0aW5nIGEgbW9yZSBleHBsaWNpdCBgLm1heCA9IE5UQkxfUEFSTV9NU19NQVhgLCB3aGljaCBpcyBhIHJlYXNvbmFibGUgdXBwZXIgYm91bmQuIEdvb2Q7IG1ha2luZyByYW5nZXMgY2xlYXJlciByZWR1Y2VzIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93IGlzc3VlcyBvciBvdGhlciB1bmV4cGVjdGVkIGJlaGF2aW9yIHdoZW4gZGVhbGluZyB3aXRoIHVzZXItcHJvdmlkZWQgdmFsdWVzLiBUaGlzIGlzIG5vdCBpbmhlcmVudGx5IHByb2JsZW1hdGljLCBidXQgdGhlIGV4cGFuZGVkIHJhbmdlIGNvdWxkIHJldmVhbCBleGlzdGluZywgcHJldmlvdXNseSBtYXNrZWQsIGZsYXdzLgoKTmV4dCwgYG5laWdodGJsX2R1bXBfaW5mb2AgaGFzIHVuZGVyZ29uZSBzb21lIGFkanVzdG1lbnRzLiBJIHNlZSB0aGUgaW50cm9kdWN0aW9uIG9mIGBkZWZhdWx0X3NraXBgIGZvciBzdGF0ZSB0cmFja2luZyBkdXJpbmcgZHVtcGluZywgYW5kIGNoZWNrcyBmb3IgaXQgYmVmb3JlIGNhbGxpbmcgYG5laWdodGJsX2ZpbGxfaW5mb2AuIFRoaXMgbGlrZWx5IG1lYW5zIHRoZXJlJiMzOTtzIHNvbWUgb3B0aW1pemF0aW9uIGdvaW5nIG9uIG9yIHRoZSBjb2RlIGlzIHRyeWluZyB0byBhdm9pZCByZWR1bmRhbnQgZGF0YSBkdW1wcy4gVGhlIHVzZSBvZiBgbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yY3VgIGluc3RlYWQgb2YgYGxpc3RfbmV4dF9lbnRyeWAgc3VnZ2VzdHMgb3B0aW1pemF0aW9uIG9yIGltcHJvdmVkIHRocmVhZCBzYWZldHkgd2hlbiBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgbmVpZ2hib3IgcGFyYW1ldGVycy4gVGhlIGFkZGVkIGNoZWNrIGZvciBgYmxhY2tob2xlX25ldGRldmAgaXMgbGlrZWx5IGEgZmlsdGVyIHRvIGV4Y2x1ZGUgc3BlY2lmaWMgZGV2aWNlcy4gVGhlIHJlc2V0dGluZyBvZiB2YXJpYWJsZXMgYXQgdGhlIGVuZCBvZiB0YWJsZSBwcm9jZXNzaW5nIGlzIHN0YW5kYXJkIGNsZWFuLXVwLiBBbGwgb2YgdGhpcyBpcyBtb3JlIG9yIGxlc3MgZmluZSwgb24gdGhlIHN1cmZhY2UsIGJ1dCB0aGUgYWRkaXRpb24gb2Ygc3RhdGUgdmFyaWFibGVzIGFuZCBtb3JlIGNvbXBsZXggbGlzdCBpdGVyYXRpb25zIG9mdGVuIGludHJvZHVjZXMgb3Bwb3J0dW5pdGllcyBmb3Igc3VidGxlIGVycm9ycy4gTXkgbWFpbiBjb25jZXJuIGhlcmUgaXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIHdpdGhpbiB0aGVzZSBjaGFuZ2VzLgoKTGFzdGx5LCBgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlYCBpcyBzZXR0aW5nIGBtYXhgIGJlZm9yZSBjYWxsaW5nIGBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4YC4gQWdhaW4sIHNlbnNpYmxlIHJhbmdlIGxpbWl0aW5nLgoKTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGUgbW9zdCBsaWtlbHkgYXJlYSBmb3IgcG90ZW50aWFsIGlzc3VlcyBsaWVzIHdpdGhpbiB0aGUgYG5laWdodGJsX2R1bXBfaW5mb2AgZnVuY3Rpb24gYW5kIGludGVyYWN0aW9ucyB3aXRoIGBuZWlnaHRibF9maWxsX2luZm9gIGFuZCBgbmVpZ2h0YmxfZmlsbF9wYXJtc2AuIFRoZXJlIG1pZ2h0IGJlIHN1YnRsZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mb3JtYXRpb24gbGVha3MsIG9yIHBhZGRpbmcgaXNzdWVzLCBwZXJoYXBzIGxpbmtlZCB0byB0aGUgYGRlZmF1bHRfc2tpcGAgdmFyaWFibGUgb3IgdGhlIGxpc3QgaXRlcmF0aW9uIGNoYW5nZXMuIEkgd2FudCB0byB0cmFjZSB0aGUgZGF0YSBmbG93IHRocm91Z2ggdGhvc2UgZnVuY3Rpb25zIHZlcnkgY2FyZWZ1bGx5LiBUaGUgY29udGV4dCBzdXJyb3VuZGluZyB0aG9zZSBjaGFuZ2VzIGlzIGNydWNpYWwuIFRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQmIzM5O3MgZ29pbmcgb24sIEkmIzM5O2xsIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZXhhbWluZSB0aGUgYG5ldC9jb3JlL25laWdoYm91ci5jYCBjb2RlIGJhc2UgbW9yZSBjbG9zZWx5IHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGFjdC4gVGhpcyBzaG91bGQgcmV2ZWFsIHRoZSBsZXZlbCBvZiByaXNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZWlnaHRibF9maWxsXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL25laWdoYm91ci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL25laWdoYm91ci5jPTIwMTA9c3RhdGljIGludCBuZWlnaF9hZGQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMjE4OS1cbm5ldC9jb3JlL25laWdoYm91ci5jOjIxOTA6c3RhdGljIGludCBuZWlnaHRibF9maWxsX3Bhcm1zKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZWlnaF9wYXJtcyAqcGFybXMpXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0yMTkxLXtcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0yMjM5LVxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MjI0MDpzdGF0aWMgaW50IG5laWdodGJsX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCxcbm5ldC9jb3JlL25laWdoYm91ci5jLTIyNDEtXHRcdFx0ICAgICAgdTMyIHBpZCwgdTMyIHNlcSwgaW50IHR5cGUsIGludCBmbGFncylcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0yMzEyLVx0QlVHX09OKHRibC1cdTAwM2VwYXJtcy5kZXYpO1xubmV0L2NvcmUvbmVpZ2hib3VyLmM6MjMxMzpcdGlmIChuZWlnaHRibF9maWxsX3Bhcm1zKHNrYiwgXHUwMDI2dGJsLVx1MDAzZXBhcm1zKSBcdTAwM2MgMClcbm5ldC9jb3JlL25laWdoYm91ci5jLTIzMTQtXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jLTIzMjMtXG5uZXQvY29yZS9uZWlnaGJvdXIuYzoyMzI0OnN0YXRpYyBpbnQgbmVpZ2h0YmxfZmlsbF9wYXJhbV9pbmZvKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0yMzI1LVx0XHRcdFx0ICAgIHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLFxuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jLTIzNDItXHRpZiAobmxhX3B1dF9zdHJpbmcoc2tiLCBORFRBX05BTUUsIHRibC1cdTAwM2VpZCkgXHUwMDNjIDAgfHxcbm5ldC9jb3JlL25laWdoYm91ci5jOjIzNDM6XHQgICAgbmVpZ2h0YmxfZmlsbF9wYXJtcyhza2IsIHBhcm1zKSBcdTAwM2MgMClcbm5ldC9jb3JlL25laWdoYm91ci5jLTIzNDQtXHRcdGdvdG8gZXJyb3V0O1xuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jPTI1ODY9c3RhdGljIGludCBuZWlnaHRibF9kdW1wX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jLTI2MTctXHRcdGlmICghZGVmYXVsdF9za2lwIFx1MDAyNlx1MDAyNlxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MjYxODpcdFx0ICAgIG5laWdodGJsX2ZpbGxfaW5mbyhza2IsIHRibCwgTkVUTElOS19DQihjYi1cdTAwM2Vza2IpLnBvcnRpZCxcbm5ldC9jb3JlL25laWdoYm91ci5jLTI2MTktXHRcdFx0XHQgICAgICAgbmxoLVx1MDAzZW5sbXNnX3NlcSwgUlRNX05FV05FSUdIVEJMLFxuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jLTI2MzUtXG5uZXQvY29yZS9uZWlnaGJvdXIuYzoyNjM2Olx0XHRcdGlmIChuZWlnaHRibF9maWxsX3BhcmFtX2luZm8oc2tiLCB0YmwsIHAsXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0yNjM3LVx0XHRcdFx0XHRcdCAgICAgTkVUTElOS19DQihjYi1cdTAwM2Vza2IpLnBvcnRpZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDI6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI5NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgY29kZSBzZWdtZW50cyBhcyBpZiB0aGV5IHdlcmUgbXkgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipEaXZpbmcgaW50byBOZWlnaGJvdXIgRGlzY292ZXJ5OiBBIEZvY3VzZWQgRXhhbWluYXRpb24qKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8gemVybyBpbiBvbiBzcGVjaWZpYyBzZWN0aW9ucyB3aXRoaW4gYG5ldC9jb3JlL25laWdoYm91ci5jYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdGFrZSBhIGNsb3NlIGxvb2sgYXQgbGluZXMgMjE5MCB0byAyMjYwIGFuZCB0aGVuIGp1bXAgdG8gbGluZXMgMjU4MCB0byAyNjYwLiBUaGUgZmlyc3QgYmxvY2sgbGlrZWx5IGRlYWxzIHdpdGggc29tZSBjcml0aWNhbCBhc3BlY3Qgb2YgbmVpZ2hib3VyIGRpc2NvdmVyeSDigJMgbWF5YmUgc29tZSBraW5kIG9mIGNhY2hlIG1hbmFnZW1lbnQsIGEgc3BlY2lmaWMgc3RhdGUgdHJhbnNpdGlvbiwgb3IgcGVyaGFwcyB0aGUgaGFuZGxpbmcgb2YgYSBwYXJ0aWN1bGFyIHByb2JlIG1lY2hhbmlzbS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBjb2RlIGlzIGhhbmRsaW5nIHRoZXNlIGV2ZW50cy4gVGhlbiBJJiMzOTtsbCBjaGVjayB0aGUgc2Vjb25kIGJsb2NrIGFzIGl0JiMzOTtzIGxpa2VseSBwYXJ0IG9mIHRoZSBzYW1lIGZ1bmN0aW9uLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgcGFydCBwcm9iYWJseSBoYW5kbGVzIGEgZGlmZmVyZW50IGFzcGVjdCBvZiB0aGlzIHByb2Nlc3Mgc3VjaCBhcyBhIHJldHJ5LCBvciB0aW1lb3V0LiBQZXJoYXBzIGl0JiMzOTtzIGV2ZW4gcmVsYXRlZCB0byBoYW5kbGluZyBkaWZmZXJlbnQgYWRkcmVzcyBmYW1pbGllcyBvciBwcm90b2NvbCBpbnRlcmFjdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGlmIG15IGh5cG90aGVzZXMgYWJvdXQgdGhlc2Ugc2VjdGlvbnMgYXJlIG9uIHRhcmdldC4gSSYjMzk7bSBjdXJpb3VzIHRvIHNlZSB3aGF0IG51YW5jZXMgYXJlIGNvbnRhaW5lZCBpbiB0aGlzIGNvZGUuIFRpbWUgdG8gZGlnIGluIGFuZCBtYWtlIHN1cmUgdGhpcyBpcyB3aGF0IEkgYmVsaWV2ZSBpdCBpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDI6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9uZWlnaGJvdXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjU4MDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjI1ODE6XHRcdH1cbjI1ODI6XHRcbjI1ODM6XHRcdHJldHVybiAwO1xuMjU4NDpcdH1cbjI1ODU6XHRcbjI1ODY6XHRzdGF0aWMgaW50IG5laWdodGJsX2R1bXBfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4yNTg3Olx0e1xuMjU4ODpcdFx0Y29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGggPSBjYi1cdTAwM2VubGg7XG4yNTg5Olx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spO1xuMjU5MDpcdFx0aW50IGRlZmF1bHRfc2tpcCA9IGNiLVx1MDAzZWFyZ3NbMl07XG4yNTkxOlx0XHRpbnQgbmVpZ2hfc2tpcCA9IGNiLVx1MDAzZWFyZ3NbMV07XG4yNTkyOlx0XHRpbnQgZmFtaWx5LCB0aWR4LCBuaWR4ID0gMDtcbjI1OTM6XHRcdGludCB0Ymxfc2tpcCA9IGNiLVx1MDAzZWFyZ3NbMF07XG4yNTk0Olx0XHRzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibDtcbjI1OTU6XHRcbjI1OTY6XHRcdGlmIChjYi1cdTAwM2VzdHJpY3RfY2hlY2spIHtcbjI1OTc6XHRcdFx0aW50IGVyciA9IG5laWdodGJsX3ZhbGlkX2R1bXBfaW5mbyhubGgsIGNiLVx1MDAzZWV4dGFjayk7XG4yNTk4Olx0XG4yNTk5Olx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4yNjAwOlx0XHRcdFx0cmV0dXJuIGVycjtcbjI2MDE6XHRcdH1cbjI2MDI6XHRcbjI2MDM6XHRcdGZhbWlseSA9ICgoc3RydWN0IHJ0Z2VubXNnICopbmxtc2dfZGF0YShubGgpKS1cdTAwM2VydGdlbl9mYW1pbHk7XG4yNjA0Olx0XG4yNjA1Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4yNjA2Olx0XG4yNjA3Olx0XHRmb3IgKHRpZHggPSAwOyB0aWR4IFx1MDAzYyBORUlHSF9OUl9UQUJMRVM7IHRpZHgmIzQzOyYjNDM7KSB7XG4yNjA4Olx0XHRcdHN0cnVjdCBuZWlnaF9wYXJtcyAqcDtcbjI2MDk6XHRcbjI2MTA6XHRcdFx0dGJsID0gcmN1X2RlcmVmZXJlbmNlKG5laWdoX3RhYmxlc1t0aWR4XSk7XG4yNjExOlx0XHRcdGlmICghdGJsKVxuMjYxMjpcdFx0XHRcdGNvbnRpbnVlO1xuMjYxMzpcdFxuMjYxNDpcdFx0XHRpZiAodGlkeCBcdTAwM2MgdGJsX3NraXAgfHwgKGZhbWlseSBcdTAwMjZcdTAwMjYgdGJsLVx1MDAzZWZhbWlseSAhPSBmYW1pbHkpKVxuMjYxNTpcdFx0XHRcdGNvbnRpbnVlO1xuMjYxNjpcdFxuMjYxNzpcdFx0XHRpZiAoIWRlZmF1bHRfc2tpcCBcdTAwMjZcdTAwMjZcbjI2MTg6XHRcdFx0ICAgIG5laWdodGJsX2ZpbGxfaW5mbyhza2IsIHRibCwgTkVUTElOS19DQihjYi1cdTAwM2Vza2IpLnBvcnRpZCxcbjI2MTk6XHRcdFx0XHRcdCAgICAgICBubGgtXHUwMDNlbmxtc2dfc2VxLCBSVE1fTkVXTkVJR0hUQkwsXG4yNjIwOlx0XHRcdFx0XHQgICAgICAgTkxNX0ZfTVVMVEkpIFx1MDAzYyAwKVxuMjYyMTpcdFx0XHRcdGJyZWFrO1xuMjYyMjpcdFxuMjYyMzpcdFx0XHRkZWZhdWx0X3NraXAgPSAxO1xuMjYyNDpcdFxuMjYyNTpcdFx0XHRwID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZ0YmwtXHUwMDNlcGFybXNfbGlzdCwgc3RydWN0IG5laWdoX3Bhcm1zLCBsaXN0KTtcbjI2MjY6XHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yY3UocCwgXHUwMDI2dGJsLVx1MDAzZXBhcm1zX2xpc3QsIGxpc3QpIHtcbjI2Mjc6XHRcdFx0XHRpZiAoIW5ldF9lcShuZWlnaF9wYXJtc19uZXQocCksIG5ldCkpXG4yNjI4Olx0XHRcdFx0XHRjb250aW51ZTtcbjI2Mjk6XHRcbjI2MzA6XHRcdFx0XHRpZiAocC1cdTAwM2VkZXYgPT0gYmxhY2tob2xlX25ldGRldilcbjI2MzE6XHRcdFx0XHRcdGNvbnRpbnVlO1xuMjYzMjpcdFxuMjYzMzpcdFx0XHRcdGlmIChuaWR4IFx1MDAzYyBuZWlnaF9za2lwKVxuMjYzNDpcdFx0XHRcdFx0Z290byBuZXh0O1xuMjYzNTpcdFxuMjYzNjpcdFx0XHRcdGlmIChuZWlnaHRibF9maWxsX3BhcmFtX2luZm8oc2tiLCB0YmwsIHAsXG4yNjM3Olx0XHRcdFx0XHRcdFx0ICAgICBORVRMSU5LX0NCKGNiLVx1MDAzZXNrYikucG9ydGlkLFxuMjYzODpcdFx0XHRcdFx0XHRcdCAgICAgbmxoLVx1MDAzZW5sbXNnX3NlcSxcbjI2Mzk6XHRcdFx0XHRcdFx0XHQgICAgIFJUTV9ORVdORUlHSFRCTCxcbjI2NDA6XHRcdFx0XHRcdFx0XHQgICAgIE5MTV9GX01VTFRJKSBcdTAwM2MgMClcbjI2NDE6XHRcdFx0XHRcdGdvdG8gb3V0O1xuMjY0MjpcdFx0XHRuZXh0OlxuMjY0MzpcdFx0XHRcdG5pZHgmIzQzOyYjNDM7O1xuMjY0NDpcdFx0XHR9XG4yNjQ1Olx0XG4yNjQ2Olx0XHRcdG5laWdoX3NraXAgPSAwO1xuMjY0NzpcdFx0XHRuaWR4ID0gMDtcbjI2NDg6XHRcdFx0ZGVmYXVsdF9za2lwID0gMDtcbjI2NDk6XHRcdH1cbjI2NTA6XHRvdXQ6XG4yNjUxOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjI2NTI6XHRcbjI2NTM6XHRcdGNiLVx1MDAzZWFyZ3NbMF0gPSB0aWR4O1xuMjY1NDpcdFx0Y2ItXHUwMDNlYXJnc1sxXSA9IG5pZHg7XG4yNjU1Olx0XHRjYi1cdTAwM2VhcmdzWzJdID0gZGVmYXVsdF9za2lwO1xuMjY1NjpcdFxuMjY1NzpcdFx0cmV0dXJuIHNrYi1cdTAwM2VsZW47XG4yNjU4Olx0fVxuMjY1OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzYxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGFuZCB0aGlzIGlzIHBhcnQgb2YgYSBkZWJ1Z2dpbmcvYW5hbHlzaXMgcHJvY2VzczoKCioqRGl2aW5nIERlZXBlciBpbnRvIHRoZSBKaWZmaWVzIENhbGN1bGF0aW9uKioKCk9rYXksIEkmIzM5O3ZlIGdvdCBhIGh1bmNoIGFib3V0IHRoZSBpc3N1ZSwgYW5kIEkgdGhpbmsgSSBrbm93IHdoZXJlIHRvIGZvY3VzIG15IGF0dGVudGlvbi4gSXQmIzM5O3MgdGltZSB0byBkb3VibGUtY2hlY2sgdGhlIGBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVgIGZ1bmN0aW9uLiBJIHJlbWVtYmVyIHRoaXMgb25lIGRlYWxpbmcgd2l0aCBob3cgd2UgY29udmVydCB0aGUgbWlsbGlzZWNvbmRzIHZhbHVlIHRvIGppZmZpZXMgYW5kIGVuc3VyaW5nIHRoZSBvdXRjb21lIGlzIGFsd2F5cyBwb3NpdGl2ZS4gQSBwb3RlbnRpYWwgbmVnYXRpdmUgamlmZmllcyB2YWx1ZSBpcyBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBjYXVzZWQgYnkgYW4gaW50ZWdlciBvdmVyZmxvdy4gSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgb3ZlcmZsb3cgaXNzdWUgaXNuJiMzOTt0IHdoZXJlIHRoaW5ncyBhcmUgZmFsbGluZyBvdmVyLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBsb2dpYyBhbmQgc2VlIGlmIGFueXRoaW5nIGp1bXBzIG91dC4gSSB3aWxsIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXRzIGhhbmRsaW5nIG9mIHBvdGVudGlhbCBuZWdhdGl2ZSB2YWx1ZXMgaXMgc291bmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmVpZ2hib3VyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNjcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM2NzA6XHRzdGF0aWMgaW50IG5laWdoX3Byb2NfZG9pbnR2ZWNfemVyb19pbnRtYXgoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqY3RsLCBpbnQgd3JpdGUsXG4zNjcxOlx0XHRcdFx0XHRcdCAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLFxuMzY3MjpcdFx0XHRcdFx0XHQgICBsb2ZmX3QgKnBwb3MpXG4zNjczOlx0e1xuMzY3NDpcdFx0c3RydWN0IGN0bF90YWJsZSB0bXAgPSAqY3RsO1xuMzY3NTpcdFx0aW50IHJldDtcbjM2NzY6XHRcbjM2Nzc6XHRcdHRtcC5leHRyYTEgPSBTWVNDVExfWkVSTztcbjM2Nzg6XHRcdHRtcC5leHRyYTIgPSBTWVNDVExfSU5UX01BWDtcbjM2Nzk6XHRcbjM2ODA6XHRcdHJldCA9IHByb2NfZG9pbnR2ZWNfbWlubWF4KFx1MDAyNnRtcCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7XG4zNjgxOlx0XHRuZWlnaF9wcm9jX3VwZGF0ZShjdGwsIHdyaXRlKTtcbjM2ODI6XHRcdHJldHVybiByZXQ7XG4zNjgzOlx0fVxuMzY4NDpcdFxuMzY4NTpcdHN0YXRpYyBpbnQgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLFxuMzY4NjpcdFx0XHRcdFx0XHRcdCAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXG4zNjg3Olx0e1xuMzY4ODpcdFx0c3RydWN0IGN0bF90YWJsZSB0bXAgPSAqY3RsO1xuMzY4OTpcdFx0aW50IHJldCwgbWluLCBtYXg7XG4zNjkwOlx0XG4zNjkxOlx0XHRtaW4gPSBtc2Vjc190b19qaWZmaWVzKDEpO1xuMzY5MjpcdFx0bWF4ID0gbXNlY3NfdG9famlmZmllcyhOVEJMX1BBUk1fTVNfTUFYKTtcbjM2OTM6XHRcbjM2OTQ6XHRcdHRtcC5leHRyYTEgPSBcdTAwMjZtaW47XG4zNjk1Olx0XHR0bXAuZXh0cmEyID0gXHUwMDI2bWF4O1xuMzY5NjpcdFxuMzY5NzpcdFx0cmV0ID0gcHJvY19kb2ludHZlY19tc19qaWZmaWVzX21pbm1heChcdTAwMjZ0bXAsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpO1xuMzY5ODpcdFx0bmVpZ2hfcHJvY191cGRhdGUoY3RsLCB3cml0ZSk7XG4zNjk5Olx0XHRyZXR1cm4gcmV0O1xuMzcwMDpcdH1cbjM3MDE6XHRcbjM3MDI6XHRpbnQgbmVpZ2hfcHJvY19kb2ludHZlYyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSwgdm9pZCAqYnVmZmVyLFxuMzcwMzpcdFx0XHRcdHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKVxuMzcwNDpcdHtcbjM3MDU6XHRcdGludCByZXQgPSBwcm9jX2RvaW50dmVjKGN0bCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7XG4zNzA2Olx0XG4zNzA3Olx0XHRuZWlnaF9wcm9jX3VwZGF0ZShjdGwsIHdyaXRlKTtcbjM3MDg6XHRcdHJldHVybiByZXQ7XG4zNzA5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjUwCgkJCQkJCQlvdXRwdXQ6IDI0OQoJCQkJCQkJdGhvdWdodHM6IDkzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBbmFseXNpcyBvZiBOZXRsaW5rIE5laWdoYm9yIFRhYmxlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCBwcmltYXJpbHkgdG91Y2hlcyBvbiB0aHJlZSBhcmVhcyB3aXRoaW4gdGhlIG5laWdoYm9yIHRhYmxlIG5ldGxpbmsgaW50ZXJhY3Rpb246IGVuZm9yY2luZyBhIG1heGltdW0gcmFuZ2Ugb24gYE5EVFBBX0lOVEVSVkFMX1BST0JFX1RJTUVfTVNgLCBmaXhpbmcgYSBkdW1waW5nIHJlc3VtcHRpb24gYnVnLCBhbmQgc2V0dGluZyBhIG1heGltdW0gdmFsdWUgZm9yIGEgc3lzY3RsIHZhcmlhYmxlLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGFueSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSB2dWxuZXJhYmlsaXRpZXMgcmVsZXZhbnQgdG8gS01TQU4uCgpGaXJzdCwgdGhlIGlucHV0IHZhbGlkYXRpb246IGBubF9udGJsX3Bhcm1fcG9saWN5YCBhZGRzIGEgc2FuaXR5IGNoZWNrIG9uIGEgbmV0bGluayBhdHRyaWJ1dGUuIFRoaXMgaXMgZ29vZDsgaXQmIzM5O3MgcHJldmVudGluZyB1c2VyLXNwYWNlIGZyb20gc2VuZGluZyBhcmJpdHJhcmlseSBsYXJnZSB2YWx1ZXMuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdGhpcyBpcyBqdXN0IGEgcmFuZ2UgcmVzdHJpY3Rpb24g4oCTIHdlbGwtZGVmaW5lZCwgYW5kIHRoZSB2YWxpZGF0aW9uIGl0c2VsZiBzaG91bGRuJiMzOTt0IHRyaWdnZXIgYW55IEtNU0FOIGNvbmNlcm5zLiBJdCYjMzk7cyBzaW1wbHkgYm91bmRpbmcgdGhlIHZhbHVlIHdpdGhpbiBhY2NlcHRhYmxlIGxpbWl0cyBkZWZpbmVkIGJ5IGBOVEJMX1BBUk1fTVNfTUFYYC4KCk5leHQsIHRoZSBuZXRsaW5rIGR1bXAgZml4IChgbmVpZ2h0YmxfZHVtcF9pbmZvYCkuIFRoaXMgaXMgbW9yZSBpbnZvbHZlZC4gVGhlIGNvcmUgaXNzdWUgd2FzIHdpdGggcmVzdGFydGluZyBkdW1wcyBjb3JyZWN0bHksIHNwZWNpZmljYWxseSByZWdhcmRpbmcgdGhlIGRlZmF1bHQgdGFibGUgcGFyYW1ldGVycy4gVGhlIHBhdGNoIHN0b3JlcyBhICYjMzQ7c2tpcCYjMzQ7IGZsYWcgdG8gZW5zdXJlIHRob3NlIHBhcmFtZXRlcnMgYXJlbiYjMzk7dCByZXBlYXRlZGx5IGR1bXBlZCBhY3Jvc3MgaXRlcmF0aW9ucy4gSSYjMzk7dmUgZ290IHRvIGVuc3VyZSB0aGUgbG9naWMgZGVhbGluZyB3aXRoIHRoYXQgZmxhZyBpcyBjbGVhbi4gTHVja2lseSwgaXQmIzM5O3MgbGV2ZXJhZ2luZyBgY2ItJmd0O2FyZ3NgLCB3aGljaCBpcyBpbml0aWFsaXplZCBieSB0aGUgbmV0bGluayBkdW1wIHN1YnN5c3RlbS4gVGhhdCYjMzk7cyByZWFzc3VyaW5nLiBJIHNlZSB0aHJlZSB2YXJpYWJsZXMgZnJvbSB0aGUgYGNiLSZndDthcmdzYCBhcnJheSB0aGF0IGFyZSB1c2VkOiBgZGVmYXVsdF9za2lwYCwgYG5laWdoX3NraXBgLCBhbmQgYHRibF9za2lwYC4gU2luY2UgdGhpcyBpcyBhIHN0YW5kYXJkIG5ldGxpbmsgZmxvdywgYW5kIHRoZSB2YXJpYWJsZXMgYXJlIGFsbCBpbml0aWFsaXplZCB0byB6ZXJvIGF0IHRoZSBzdGFydCBvZiB0aGUgZHVtcCwgdGhlbiB0aGUgZHVtcCBzeXN0ZW0gbWFuYWdlcyB0aGUgc3RhdGUgYW5kIEkgZG9uJiMzOTt0IHNlZSBhbnkgdW5pbml0aWFsaXplZCByZWFkIG9yIGxlYWthZ2UgaXNzdWVzLiBBbHNvLCBJJiMzOTttIG5vdGluZyB0aGF0IHRoZSBkdW1wIHNraXBzIGBibGFja2hvbGVfbmV0ZGV2YCBub3cuIFRoYXQmIzM5O3MgYSBsb2dpYyBjaGFuZ2UsIGJ1dCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWNjZXNzIGNvbmNlcm5zLiBJIHNob3VsZCBiZSBhd2FyZSBvZiB0aGlzIGNoYW5nZSwgYnV0IGl0JiMzOTtzIG5vdCBhIEtNU0FOIGNvbmNlcm4uCgpUaGlyZCwgYG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZWAuIFRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgc3lzY3RsIHNldHRpbmcuIFRoZSBwYXRjaCBzZXRzIGEgYG1heGAgdmFsdWUgZm9yIHRoZSBzeXNjdGwsIGFuZCB0aGVuIHBhc3NlcyBib3RoIGBtaW5gIGFuZCBgbWF4YCAod2hpY2ggYXJlIGJvdGggZXhwbGljaXRseSBpbml0aWFsaXplZCkgdG8gdGhlIHN0YW5kYXJkIGBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4YCBmdW5jdGlvbi4gSXQgc2VlbXMgdGhlcmUgaXMgbm8gS01TQU4gaXNzdWUgaGVyZS4KCk5vdywgbGV0JiMzOTtzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgcG90ZW50aWFsIEtNU0FOIGNvbmNlcm5zLiBJJiMzOTttIGZvY3VzaW5nIG9uIGZvdXIgY29yZSBhcmVhczogMSkgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlOyAyKSBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlczsgMykgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbjsgYW5kIDQpIGJvdW5kcyBjaGVja3MgcG90ZW50aWFsbHkgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpMb29raW5nIGF0IHRoZSBjb2RlLCBpdCYjMzk7cyBhbGwgYmFzZWQgb24gdGhlIGNvbW1vbiBuZXRsaW5rIHN0cnVjdHVyZSBvZiB0aGUgbmV0bGluayBwcm90b2NvbCBhbmQgYG5sYV9wdXRfKmAgZnVuY3Rpb25zLiBXZSYjMzk7cmUgbm90IGNvcHlpbmcgYW55IG5ldyBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UuIEl0JiMzOTtzIGFsbCBhYm91dCBkdW1wIGZsb3cgbG9naWMgYW5kIHZhbGlkYXRpb24gcmFuZ2VzIGluIG5ldGxpbmsgYXR0cmlidXRlcy4gTm8gZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBjb25zdHJ1Y3RlZCwgZmlsbGVkIHdpdGggbmV3IHZhbHVlcywgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIEZ1cnRoZXJtb3JlLCBhbGwgdGhlIGNvbnRyb2wgZmxvdyB2YXJpYWJsZXMgbGlrZSBgY2ItJmd0O2FyZ3NgIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZC4gV2UgYXJlIG5vdCBtb2RpZnlpbmcgYW55IGRhdGEgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlciBzcGFjZS4gQW5kIGZpbmFsbHksIHN0YW5kYXJkIG5ldGxpbmsgaXRlcmF0aW9uIGFuZCBzeXNjdGwgYm91bmRzIGFyZSBoYW5kbGVkLCBzbyB0aGVyZSBhcmUgbm8gYnVncy4KCk15IGNvbmNsdXNpb24gaXM6ICoqTmVlZHNLTVNBTiA9IGZhbHNlKiouIFRoZSBwYXRjaCBtb2RpZmllcyBleGlzdGluZyBuZXRsaW5rIGludGVyYWN0aW9ucywgYnV0IGl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGFyZWFzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcywgY29udHJvbCBmbG93IGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLCB1bnNhZmUgZGF0YSBzdHJ1Y3R1cmUgbWFuaXB1bGF0aW9uLCBvciBhbnkgbmV3IGJvdW5kcy1jaGVjayByZWxhdGVkIGlzc3Vlcy4gVGhpcyBpcyBwdXJlbHkgYSBidWcgZml4IGFuZCBpbXByb3ZlbWVudCB0byBhbiBleGlzdGluZywgc2FmZSBjb2RlIHBhdGgsIGZyb20gYSBLTVNBTiBwZXJzcGVjdGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDI6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGlucHV0IHZhbGlkYXRpb24gYW5kIG5ldGxpbmsgZHVtcCByZXN1bXB0aW9uIGxvZ2ljIGluIG5ldC9jb3JlL25laWdoYm91ci5jOlxuMS4gSXQgYWRkcyBhbiB1cHBlciBib3VuZCB2YWxpZGF0aW9uIChgTlRCTF9QQVJNX01TX01BWGApIGZvciBgTkRUUEFfSU5URVJWQUxfUFJPQkVfVElNRV9NU2AgdmlhIG5ldGxpbmsgcG9saWN5IGFuZCBzeXNjdGwgKGBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVgKS5cbjIuIEl0IGZpeGVzIHRhYmxlIGFuZCBwYXJhbWV0ZXIgZHVtcGluZyBpbiBgbmVpZ2h0YmxfZHVtcF9pbmZvYCBhY3Jvc3MgbXVsdGktcGFydCBuZXRsaW5rIGR1bXBzIGJ5IHRyYWNraW5nIGBkZWZhdWx0X3NraXBgIGluIGBjYi1cdTAwM2VhcmdzWzJdYCwgcHJvcGVybHkgY29udGludWluZyBsaXN0IGl0ZXJhdGlvbiwgYW5kIHNraXBwaW5nIGBibGFja2hvbGVfbmV0ZGV2YC5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgbm9yIGRvIHRoZXkgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmcgb3IgYnVmZmVyIGNvbnRlbnRzIHRvIHVzZXJzcGFjZS4gQWxsIHZhcmlhYmxlcyAoYG1pbmAsIGBtYXhgLCBgZGVmYXVsdF9za2lwYCwgYGNiLVx1MDAzZWFyZ3NgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQuIEFueSBwb3RlbnRpYWwgbG9naWMgZXJyb3JzIG9yIG91dC1vZi1ib3VuZHMgaXNzdWVzIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vZGVidWdnaW5nIGJ1aWxkcy4gSGVuY2UsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGlucHV0IHZhbGlkYXRpb24gYW5kIG5ldGxpbmsgZHVtcCByZXN1bXB0aW9uIGxvZ2ljIGluIG5ldC9jb3JlL25laWdoYm91ci5jOlxuMS4gSXQgYWRkcyBhbiB1cHBlciBib3VuZCB2YWxpZGF0aW9uIChgTlRCTF9QQVJNX01TX01BWGApIGZvciBgTkRUUEFfSU5URVJWQUxfUFJPQkVfVElNRV9NU2AgdmlhIG5ldGxpbmsgcG9saWN5IGFuZCBzeXNjdGwgKGBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVgKS5cbjIuIEl0IGZpeGVzIHRhYmxlIGFuZCBwYXJhbWV0ZXIgZHVtcGluZyBpbiBgbmVpZ2h0YmxfZHVtcF9pbmZvYCBhY3Jvc3MgbXVsdGktcGFydCBuZXRsaW5rIGR1bXBzIGJ5IHRyYWNraW5nIGBkZWZhdWx0X3NraXBgIGluIGBjYi1cdTAwM2VhcmdzWzJdYCwgcHJvcGVybHkgY29udGludWluZyBsaXN0IGl0ZXJhdGlvbiwgYW5kIHNraXBwaW5nIGBibGFja2hvbGVfbmV0ZGV2YC5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgbm9yIGRvIHRoZXkgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmcgb3IgYnVmZmVyIGNvbnRlbnRzIHRvIHVzZXJzcGFjZS4gQWxsIHZhcmlhYmxlcyAoYG1pbmAsIGBtYXhgLCBgZGVmYXVsdF9za2lwYCwgYGNiLVx1MDAzZWFyZ3NgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQuIEFueSBwb3RlbnRpYWwgbG9naWMgZXJyb3JzIG9yIG91dC1vZi1ib3VuZHMgaXNzdWVzIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vZGVidWdnaW5nIGJ1aWxkcy4gSGVuY2UsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjoxMzowNC4zNzYzMzE0OTJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTYyODUzMjI5MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmVpZ2h0YmxfZHVtcF9pbmZvXCIsXG4gICAgXCJuZWlnaHRibF9zZXRcIixcbiAgICBcIm5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGlucHV0IHZhbGlkYXRpb24gYW5kIG5ldGxpbmsgZHVtcCByZXN1bXB0aW9uIGxvZ2ljIGluIG5ldC9jb3JlL25laWdoYm91ci5jOlxcbjEuIEl0IGFkZHMgYW4gdXBwZXIgYm91bmQgdmFsaWRhdGlvbiAoYE5UQkxfUEFSTV9NU19NQVhgKSBmb3IgYE5EVFBBX0lOVEVSVkFMX1BST0JFX1RJTUVfTVNgIHZpYSBuZXRsaW5rIHBvbGljeSBhbmQgc3lzY3RsIChgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlYCkuXFxuMi4gSXQgZml4ZXMgdGFibGUgYW5kIHBhcmFtZXRlciBkdW1waW5nIGluIGBuZWlnaHRibF9kdW1wX2luZm9gIGFjcm9zcyBtdWx0aS1wYXJ0IG5ldGxpbmsgZHVtcHMgYnkgdHJhY2tpbmcgYGRlZmF1bHRfc2tpcGAgaW4gYGNiLVxcdTAwM2VhcmdzWzJdYCwgcHJvcGVybHkgY29udGludWluZyBsaXN0IGl0ZXJhdGlvbiwgYW5kIHNraXBwaW5nIGBibGFja2hvbGVfbmV0ZGV2YC5cXG5cXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgYWxsb2NhdGUgb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBub3IgZG8gdGhleSBleHBvc2UgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZyBvciBidWZmZXIgY29udGVudHMgdG8gdXNlcnNwYWNlLiBBbGwgdmFyaWFibGVzIChgbWluYCwgYG1heGAsIGBkZWZhdWx0X3NraXBgLCBgY2ItXFx1MDAzZWFyZ3NgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQuIEFueSBwb3RlbnRpYWwgbG9naWMgZXJyb3JzIG9yIG91dC1vZi1ib3VuZHMgaXNzdWVzIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vZGVidWdnaW5nIGJ1aWxkcy4gSGVuY2UsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBuZWlnaGJvdXIgdGFibGUgbWFuYWdlbWVudCBpbiBuZXQvY29yZS9uZWlnaGJvdXIuYy4gU3BlY2lmaWNhbGx5LCBpdCBmaXhlcyBuZXRsaW5rIGR1bXAgcGFnaW5hdGlvbiBhbmQgZmlsdGVyaW5nIChoYW5kbGluZyBibGFja2hvbGUgbmV0ZGV2KSBpbiBuZWlnaHRibF9kdW1wX2luZm8oKSwgYWRkcyB1cHBlciBib3VuZCByYW5nZSB2YWxpZGF0aW9uIGZvciBpbnRlcnZhbF9wcm9iZV90aW1lX21zIGluIG5sX250YmxfcGFybV9wb2xpY3kgKHVzZWQgaW4gbmVpZ2h0Ymxfc2V0KCkpLCBhbmQgc2V0cyBhbiB1cHBlciBib3VuZCBvbiBzeXNjdGwgd3JpdGVzIHZpYSBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmUoKS4gVGhlc2UgcGF0aHMgYXJlIGRpcmVjdGx5IHJlYWNoYWJsZSB2aWEgcnRuZXRsaW5rIChSVE1fR0VUTkVJR0hUQkwsIFJUTV9TRVRORUlHSFRCTCkgYW5kIHByb2NmcyBzeXNjdGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjEzOjA0LjM3NjMzNzc1MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg0NDc3MTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNmJmYTRiYTY3NTY2MzBmMDc5ZmNiNWJkOWJiNDYxM2FhYjI4NTI2YlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCA4IDAyOjEzOjAzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL25laWdoYm91ci5jIGIvbmV0L2NvcmUvbmVpZ2hib3VyLmNcXG5pbmRleCAxMzQ5YzBlZWRiNjQyLi4xNWVlZGFlZjY1NzgxIDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL25laWdoYm91ci5jXFxuKysrIGIvbmV0L2NvcmUvbmVpZ2hib3VyLmNcXG5AQCAtMjM1OSw2ICsyMzU5LDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBubF9uZWlnaHRibF9wb2xpY3lbTkRUQV9NQVgrMV0gPSB7XFxuIFxcdFtORFRBX1BBUk1TXVxcdFxcdD0geyAudHlwZSA9IE5MQV9ORVNURUQgfSxcXG4gfTtcXG4gXFxuKyNkZWZpbmUgTlRCTF9QQVJNX01TX01BWFxcdCgyNCAqIDYwICogNjAgKiBNU0VDX1BFUl9TRUMpXFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldGxpbmtfcmFuZ2VfdmFsaWRhdGlvbiBubF9udGJsX3Bhcm1fbXNfcmFuZ2UgPSB7XFxuK1xcdC5taW4gPSAxLFxcbitcXHQubWF4ID0gTlRCTF9QQVJNX01TX01BWCxcXG4rfTtcXG4rXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBubF9udGJsX3Bhcm1fcG9saWN5W05EVFBBX01BWCsxXSA9IHtcXG4gXFx0W05EVFBBX0lGSU5ERVhdXFx0XFx0XFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxcbiBcXHRbTkRUUEFfUVVFVUVfTEVOXVxcdFxcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcXG5AQCAtMjM3NSw3ICsyMzgyLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5sX250YmxfcGFybV9wb2xpY3lbTkRUUEFfTUFYKzFdID0ge1xcbiBcXHRbTkRUUEFfQU5ZQ0FTVF9ERUxBWV1cXHRcXHQ9IHsgLnR5cGUgPSBOTEFfVTY0IH0sXFxuIFxcdFtORFRQQV9QUk9YWV9ERUxBWV1cXHRcXHQ9IHsgLnR5cGUgPSBOTEFfVTY0IH0sXFxuIFxcdFtORFRQQV9MT0NLVElNRV1cXHRcXHQ9IHsgLnR5cGUgPSBOTEFfVTY0IH0sXFxuLVxcdFtORFRQQV9JTlRFUlZBTF9QUk9CRV9USU1FX01TXVxcdD0geyAudHlwZSA9IE5MQV9VNjQsIC5taW4gPSAxIH0sXFxuK1xcdFtORFRQQV9JTlRFUlZBTF9QUk9CRV9USU1FX01TXVxcdD0gTkxBX1BPTElDWV9GVUxMX1JBTkdFKE5MQV9VNjQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZubF9udGJsX3Bhcm1fbXNfcmFuZ2UpLFxcbiB9O1xcbiBcXG4gc3RhdGljIGludCBuZWlnaHRibF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuQEAgLTI1NzksOSArMjU4NywxMCBAQCBzdGF0aWMgaW50IG5laWdodGJsX2R1bXBfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGggPSBjYi1cXHUwMDNlbmxoO1xcbiBcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXFx1MDAzZXNrKTtcXG4rXFx0aW50IGRlZmF1bHRfc2tpcCA9IGNiLVxcdTAwM2VhcmdzWzJdO1xcbitcXHRpbnQgbmVpZ2hfc2tpcCA9IGNiLVxcdTAwM2VhcmdzWzFdO1xcbiBcXHRpbnQgZmFtaWx5LCB0aWR4LCBuaWR4ID0gMDtcXG4gXFx0aW50IHRibF9za2lwID0gY2ItXFx1MDAzZWFyZ3NbMF07XFxuLVxcdGludCBuZWlnaF9za2lwID0gY2ItXFx1MDAzZWFyZ3NbMV07XFxuIFxcdHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsO1xcbiBcXG4gXFx0aWYgKGNiLVxcdTAwM2VzdHJpY3RfY2hlY2spIHtcXG5AQCAtMjYwNSwxNyArMjYxNCwyMiBAQCBzdGF0aWMgaW50IG5laWdodGJsX2R1bXBfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuIFxcdFxcdGlmICh0aWR4IFxcdTAwM2MgdGJsX3NraXAgfHwgKGZhbWlseSBcXHUwMDI2XFx1MDAyNiB0YmwtXFx1MDAzZWZhbWlseSAhPSBmYW1pbHkpKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdGlmIChuZWlnaHRibF9maWxsX2luZm8oc2tiLCB0YmwsIE5FVExJTktfQ0IoY2ItXFx1MDAzZXNrYikucG9ydGlkLFxcbitcXHRcXHRpZiAoIWRlZmF1bHRfc2tpcCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgbmVpZ2h0YmxfZmlsbF9pbmZvKHNrYiwgdGJsLCBORVRMSU5LX0NCKGNiLVxcdTAwM2Vza2IpLnBvcnRpZCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIG5saC1cXHUwMDNlbmxtc2dfc2VxLCBSVE1fTkVXTkVJR0hUQkwsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBOTE1fRl9NVUxUSSkgXFx1MDAzYyAwKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFxuLVxcdFxcdG5pZHggPSAwO1xcbi1cXHRcXHRwID0gbGlzdF9uZXh0X2VudHJ5KFxcdTAwMjZ0YmwtXFx1MDAzZXBhcm1zLCBsaXN0KTtcXG4tXFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tX3JjdShwLCBcXHUwMDI2dGJsLVxcdTAwM2VwYXJtc19saXN0LCBsaXN0KSB7XFxuK1xcdFxcdGRlZmF1bHRfc2tpcCA9IDE7XFxuK1xcbitcXHRcXHRwID0gbGlzdF9maXJzdF9lbnRyeShcXHUwMDI2dGJsLVxcdTAwM2VwYXJtc19saXN0LCBzdHJ1Y3QgbmVpZ2hfcGFybXMsIGxpc3QpO1xcbitcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShwLCBcXHUwMDI2dGJsLVxcdTAwM2VwYXJtc19saXN0LCBsaXN0KSB7XFxuIFxcdFxcdFxcdGlmICghbmV0X2VxKG5laWdoX3Bhcm1zX25ldChwKSwgbmV0KSlcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcbitcXHRcXHRcXHRpZiAocC1cXHUwMDNlZGV2ID09IGJsYWNraG9sZV9uZXRkZXYpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4gXFx0XFx0XFx0aWYgKG5pZHggXFx1MDAzYyBuZWlnaF9za2lwKVxcbiBcXHRcXHRcXHRcXHRnb3RvIG5leHQ7XFxuIFxcbkBAIC0yNjMwLDEyICsyNjQ0LDE1IEBAIHN0YXRpYyBpbnQgbmVpZ2h0YmxfZHVtcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0bmVpZ2hfc2tpcCA9IDA7XFxuK1xcdFxcdG5pZHggPSAwO1xcbitcXHRcXHRkZWZhdWx0X3NraXAgPSAwO1xcbiBcXHR9XFxuIG91dDpcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcbiBcXHRjYi1cXHUwMDNlYXJnc1swXSA9IHRpZHg7XFxuIFxcdGNiLVxcdTAwM2VhcmdzWzFdID0gbmlkeDtcXG4rXFx0Y2ItXFx1MDAzZWFyZ3NbMl0gPSBkZWZhdWx0X3NraXA7XFxuIFxcbiBcXHRyZXR1cm4gc2tiLVxcdTAwM2VsZW47XFxuIH1cXG5AQCAtMzY2OSwxMiArMzY4NiwxMyBAQCBzdGF0aWMgaW50IG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZShjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXFxuIHtcXG4gXFx0c3RydWN0IGN0bF90YWJsZSB0bXAgPSAqY3RsO1xcbi1cXHRpbnQgcmV0O1xcbitcXHRpbnQgcmV0LCBtaW4sIG1heDtcXG4gXFxuLVxcdGludCBtaW4gPSBtc2Vjc190b19qaWZmaWVzKDEpO1xcbitcXHRtaW4gPSBtc2Vjc190b19qaWZmaWVzKDEpO1xcbitcXHRtYXggPSBtc2Vjc190b19qaWZmaWVzKE5UQkxfUEFSTV9NU19NQVgpO1xcbiBcXG4gXFx0dG1wLmV4dHJhMSA9IFxcdTAwMjZtaW47XFxuLVxcdHRtcC5leHRyYTIgPSBOVUxMO1xcbitcXHR0bXAuZXh0cmEyID0gXFx1MDAyNm1heDtcXG4gXFxuIFxcdHJldCA9IHByb2NfZG9pbnR2ZWNfbXNfamlmZmllc19taW5tYXgoXFx1MDAyNnRtcCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7XFxuIFxcdG5laWdoX3Byb2NfdXBkYXRlKGN0bCwgd3JpdGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjoxMzowNS4wNjE4NDc4NjJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjkzNzQxMTQ2NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5laWdodGJsX2R1bXBfaW5mb1wiLFxuICAgIFwibmVpZ2h0Ymxfc2V0XCIsXG4gICAgXCJuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgbmVpZ2hib3VyIHRhYmxlIG1hbmFnZW1lbnQgaW4gbmV0L2NvcmUvbmVpZ2hib3VyLmMuIFNwZWNpZmljYWxseSwgaXQgZml4ZXMgbmV0bGluayBkdW1wIHBhZ2luYXRpb24gYW5kIGZpbHRlcmluZyAoaGFuZGxpbmcgYmxhY2tob2xlIG5ldGRldikgaW4gbmVpZ2h0YmxfZHVtcF9pbmZvKCksIGFkZHMgdXBwZXIgYm91bmQgcmFuZ2UgdmFsaWRhdGlvbiBmb3IgaW50ZXJ2YWxfcHJvYmVfdGltZV9tcyBpbiBubF9udGJsX3Bhcm1fcG9saWN5ICh1c2VkIGluIG5laWdodGJsX3NldCgpKSwgYW5kIHNldHMgYW4gdXBwZXIgYm91bmQgb24gc3lzY3RsIHdyaXRlcyB2aWEgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlKCkuIFRoZXNlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgdmlhIHJ0bmV0bGluayAoUlRNX0dFVE5FSUdIVEJMLCBSVE1fU0VUTkVJR0hUQkwpIGFuZCBwcm9jZnMgc3lzY3RsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZiZmE0YmE2NzU2NjMwZjA3OWZjYjViZDliYjQ2MTNhYWIyODUyNmJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDAyOjEzOjAzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmVpZ2hib3VyLmMgYi9uZXQvY29yZS9uZWlnaGJvdXIuY1xuaW5kZXggMTM0OWMwZWVkYjY0Mi4uMTVlZWRhZWY2NTc4MSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL25laWdoYm91ci5jXG4rKysgYi9uZXQvY29yZS9uZWlnaGJvdXIuY1xuQEAgLTIzNTksNiArMjM1OSwxMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmxfbmVpZ2h0YmxfcG9saWN5W05EVEFfTUFYKzFdID0ge1xuIFx0W05EVEFfUEFSTVNdXHRcdD0geyAudHlwZSA9IE5MQV9ORVNURUQgfSxcbiB9O1xuIFxuKyNkZWZpbmUgTlRCTF9QQVJNX01TX01BWFx0KDI0ICogNjAgKiA2MCAqIE1TRUNfUEVSX1NFQylcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldGxpbmtfcmFuZ2VfdmFsaWRhdGlvbiBubF9udGJsX3Bhcm1fbXNfcmFuZ2UgPSB7XG4rXHQubWluID0gMSxcbitcdC5tYXggPSBOVEJMX1BBUk1fTVNfTUFYLFxuK307XG4rXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5sX250YmxfcGFybV9wb2xpY3lbTkRUUEFfTUFYKzFdID0ge1xuIFx0W05EVFBBX0lGSU5ERVhdXHRcdFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuIFx0W05EVFBBX1FVRVVFX0xFTl1cdFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuQEAgLTIzNzUsNyArMjM4Miw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBubF9udGJsX3Bhcm1fcG9saWN5W05EVFBBX01BWCsxXSA9IHtcbiBcdFtORFRQQV9BTllDQVNUX0RFTEFZXVx0XHQ9IHsgLnR5cGUgPSBOTEFfVTY0IH0sXG4gXHRbTkRUUEFfUFJPWFlfREVMQVldXHRcdD0geyAudHlwZSA9IE5MQV9VNjQgfSxcbiBcdFtORFRQQV9MT0NLVElNRV1cdFx0PSB7IC50eXBlID0gTkxBX1U2NCB9LFxuLVx0W05EVFBBX0lOVEVSVkFMX1BST0JFX1RJTUVfTVNdXHQ9IHsgLnR5cGUgPSBOTEFfVTY0LCAubWluID0gMSB9LFxuK1x0W05EVFBBX0lOVEVSVkFMX1BST0JFX1RJTUVfTVNdXHQ9IE5MQV9QT0xJQ1lfRlVMTF9SQU5HRShOTEFfVTY0LFxuK1x0XHRcdFx0XHRcdFx0XHRcdTAwMjZubF9udGJsX3Bhcm1fbXNfcmFuZ2UpLFxuIH07XG4gXG4gc3RhdGljIGludCBuZWlnaHRibF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG5AQCAtMjU3OSw5ICsyNTg3LDEwIEBAIHN0YXRpYyBpbnQgbmVpZ2h0YmxfZHVtcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiB7XG4gXHRjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCA9IGNiLVx1MDAzZW5saDtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cdTAwM2Vzayk7XG4rXHRpbnQgZGVmYXVsdF9za2lwID0gY2ItXHUwMDNlYXJnc1syXTtcbitcdGludCBuZWlnaF9za2lwID0gY2ItXHUwMDNlYXJnc1sxXTtcbiBcdGludCBmYW1pbHksIHRpZHgsIG5pZHggPSAwO1xuIFx0aW50IHRibF9za2lwID0gY2ItXHUwMDNlYXJnc1swXTtcbi1cdGludCBuZWlnaF9za2lwID0gY2ItXHUwMDNlYXJnc1sxXTtcbiBcdHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsO1xuIFxuIFx0aWYgKGNiLVx1MDAzZXN0cmljdF9jaGVjaykge1xuQEAgLTI2MDUsMTcgKzI2MTQsMjIgQEAgc3RhdGljIGludCBuZWlnaHRibF9kdW1wX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0XHRpZiAodGlkeCBcdTAwM2MgdGJsX3NraXAgfHwgKGZhbWlseSBcdTAwMjZcdTAwMjYgdGJsLVx1MDAzZWZhbWlseSAhPSBmYW1pbHkpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRpZiAobmVpZ2h0YmxfZmlsbF9pbmZvKHNrYiwgdGJsLCBORVRMSU5LX0NCKGNiLVx1MDAzZXNrYikucG9ydGlkLFxuK1x0XHRpZiAoIWRlZmF1bHRfc2tpcCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIG5laWdodGJsX2ZpbGxfaW5mbyhza2IsIHRibCwgTkVUTElOS19DQihjYi1cdTAwM2Vza2IpLnBvcnRpZCxcbiBcdFx0XHRcdCAgICAgICBubGgtXHUwMDNlbmxtc2dfc2VxLCBSVE1fTkVXTkVJR0hUQkwsXG4gXHRcdFx0XHQgICAgICAgTkxNX0ZfTVVMVEkpIFx1MDAzYyAwKVxuIFx0XHRcdGJyZWFrO1xuIFxuLVx0XHRuaWR4ID0gMDtcbi1cdFx0cCA9IGxpc3RfbmV4dF9lbnRyeShcdTAwMjZ0YmwtXHUwMDNlcGFybXMsIGxpc3QpO1xuLVx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2Zyb21fcmN1KHAsIFx1MDAyNnRibC1cdTAwM2VwYXJtc19saXN0LCBsaXN0KSB7XG4rXHRcdGRlZmF1bHRfc2tpcCA9IDE7XG4rXG4rXHRcdHAgPSBsaXN0X2ZpcnN0X2VudHJ5KFx1MDAyNnRibC1cdTAwM2VwYXJtc19saXN0LCBzdHJ1Y3QgbmVpZ2hfcGFybXMsIGxpc3QpO1xuK1x0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShwLCBcdTAwMjZ0YmwtXHUwMDNlcGFybXNfbGlzdCwgbGlzdCkge1xuIFx0XHRcdGlmICghbmV0X2VxKG5laWdoX3Bhcm1zX25ldChwKSwgbmV0KSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuK1x0XHRcdGlmIChwLVx1MDAzZWRldiA9PSBibGFja2hvbGVfbmV0ZGV2KVxuK1x0XHRcdFx0Y29udGludWU7XG4rXG4gXHRcdFx0aWYgKG5pZHggXHUwMDNjIG5laWdoX3NraXApXG4gXHRcdFx0XHRnb3RvIG5leHQ7XG4gXG5AQCAtMjYzMCwxMiArMjY0NCwxNSBAQCBzdGF0aWMgaW50IG5laWdodGJsX2R1bXBfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXHRcdH1cbiBcbiBcdFx0bmVpZ2hfc2tpcCA9IDA7XG4rXHRcdG5pZHggPSAwO1xuK1x0XHRkZWZhdWx0X3NraXAgPSAwO1xuIFx0fVxuIG91dDpcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0Y2ItXHUwMDNlYXJnc1swXSA9IHRpZHg7XG4gXHRjYi1cdTAwM2VhcmdzWzFdID0gbmlkeDtcbitcdGNiLVx1MDAzZWFyZ3NbMl0gPSBkZWZhdWx0X3NraXA7XG4gXG4gXHRyZXR1cm4gc2tiLVx1MDAzZWxlbjtcbiB9XG5AQCAtMzY2OSwxMiArMzY4NiwxMyBAQCBzdGF0aWMgaW50IG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZShjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsXG4gXHRcdFx0XHRcdFx0ICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcbiB7XG4gXHRzdHJ1Y3QgY3RsX3RhYmxlIHRtcCA9ICpjdGw7XG4tXHRpbnQgcmV0O1xuK1x0aW50IHJldCwgbWluLCBtYXg7XG4gXG4tXHRpbnQgbWluID0gbXNlY3NfdG9famlmZmllcygxKTtcbitcdG1pbiA9IG1zZWNzX3RvX2ppZmZpZXMoMSk7XG4rXHRtYXggPSBtc2Vjc190b19qaWZmaWVzKE5UQkxfUEFSTV9NU19NQVgpO1xuIFxuIFx0dG1wLmV4dHJhMSA9IFx1MDAyNm1pbjtcbi1cdHRtcC5leHRyYTIgPSBOVUxMO1xuK1x0dG1wLmV4dHJhMiA9IFx1MDAyNm1heDtcbiBcbiBcdHJldCA9IHByb2NfZG9pbnR2ZWNfbXNfamlmZmllc19taW5tYXgoXHUwMDI2dG1wLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTtcbiBcdG5laWdoX3Byb2NfdXBkYXRlKGN0bCwgd3JpdGUpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6MTM6MDUuMDYxODUxNzcxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Njg2Nzg2OTgxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5laWdoYm91ciBTdWJzeXN0ZW0gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCB3aGF0J3MgYmVlbiB0d2Vha2VkIGluIHRoZSBuZXR3b3JrIG5laWdoYm9yIGRpc2NvdmVyeSBjb2RlLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBuZXQvY29yZS9uZWlnaGJvdXIuY2AuIE15IGluaXRpYWwgc2NhbiBzdWdnZXN0cyBhIGZldyBpbnRlcmVzdGluZyBhcmVhcyBvZiBmb2N1cy5cblxuRmlyc3QsIHRoZSBgbmxfbnRibF9wYXJtX3BvbGljeWAgZGVmaW5pdGlvbiBpcyBiZWluZyBhZGp1c3RlZC4gV2UncmUgc2V0dGluZyB0aGUgcG9saWN5IGZvciBgTkRUUEFfSU5URVJWQUxfUFJPQkVfVElNRV9NU2AgdG8gYSBmdWxsLXJhbmdlIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIChgTkxBX1U2NGApIHdpdGhpbiBzcGVjaWZpYyBsaW1pdHMuIFRoZSBtYXhpbXVtIHZhbHVlLCBkZWZpbmVkIGJ5IGBOVEJMX1BBUk1fTVNfTUFYYCwgaXMgYSByYXRoZXIgaGVmdHkgMjQgaG91cnMgaW4gbWlsbGlzZWNvbmRzLiBUaGlzIGxpa2VseSBpbmZsdWVuY2VzIGhvdyBmcmVxdWVudGx5IG5laWdoYm9yIHByb2JlcyBhcmUgc2VudCwgc28gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQuXG5cblRoZW4sIHRoZXJlJ3Mgc29tZSBhY3Rpdml0eSB3aXRoaW4gYG5laWdodGJsX2R1bXBfaW5mb2AsIHdoaWNoIGhhbmRsZXMgZHVtcGluZyBuZWlnaGJvciB0YWJsZSBpbmZvcm1hdGlvbiwgcHJvYmFibHkgZm9yIGRlYnVnZ2luZyBvciBtb25pdG9yaW5nLiBJIHNlZSBhIGNvdXBsZSBvZiBub3RhYmxlIG1vZGlmaWNhdGlvbnMgaGVyZS4gVGhlIHBhZ2luYXRpb24gYW5kIGR1bXBpbmcgbG9naWMgYXBwZWFycyB0byBiZSBnZXR0aW5nIGZpbmUtdHVuZWQsIGFuZCBgZGVmYXVsdF9za2lwID0gY2ItXHUwMDNlYXJnc1syXWAgaXMgdXNlZC4gTW9yZSBzaWduaWZpY2FudGx5LCB0aGUgaXRlcmF0aW9uIHRocm91Z2ggYHRibC1cdTAwM2VwYXJtc19saXN0YCBpcyBiZWluZyByZXdvcmtlZC4gVGhlIGNvZGUgaXMgY2hhbmdpbmcgZnJvbSBgbGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tX3JjdWAgdG8gYSBjb21iaW5hdGlvbiBvZiBgbGlzdF9maXJzdF9lbnRyeWAgYW5kIGBsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdWAuIFRoaXMgbGlrZWx5IHN1Z2dlc3RzIHRoZXkncmUgb3B0aW1pemluZyBob3cgdGhlIGxpc3QgaXMgdHJhdmVyc2VkLCBwb3RlbnRpYWxseSBpbXByb3ZpbmcgcGVyZm9ybWFuY2Ugb3IgY29uY3VycmVuY3ksIGVzcGVjaWFsbHkgd2l0aGluIGEgUkNVIGNvbnRleHQuIEl0J3MgZ29vZCB0byBzZWUgdGhpcyBhdHRlbnRpb24gdG8gZGV0YWlsLiBJIGFsc28gc3BvdCBhIGNoZWNrOiBgaWYgKHAtXHUwMDNlZGV2ID09IGJsYWNraG9sZV9uZXRkZXYpIGNvbnRpbnVlO2AuIFRoaXMgcHJvYmFibHkgZXhjbHVkZXMgZW50cmllcyBhc3NvY2lhdGVkIHdpdGggdGhlIGJsYWNraG9sZSBkZXZpY2UgZnJvbSB0aGUgZHVtcCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEZpbmFsbHksIHRoZXJlJ3MgYSBmaXggdG8gcmVzZXQgY2VydGFpbiB2YXJpYWJsZXMsIHdoaWNoIGNvdWxkIGFkZHJlc3MgYSBzdWJ0bGUgYnVnIG9yIGFuIGlzc3VlIHdoZXJlIHZhcmlhYmxlcyBhcmVuJ3QgaW5pdGlhbGl6ZWQgYXBwcm9wcmlhdGVseSBpbiBzb21lIHNjZW5hcmlvcy5cblxuTGFzdGx5LCBgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlYCBpcyBnZXR0aW5nIHVwZGF0ZWQsIHNwZWNpZmljYWxseSBzZXR0aW5nIGB0bXAuZXh0cmEyYCB0byBhIG1heGltdW0gdmFsdWUsIGBtYXhgLCBjb252ZXJ0ZWQgZnJvbSBgTlRCTF9QQVJNX01TX01BWGAgdG8gamlmZmllcy4gVGhpcyByZWluZm9yY2VzIHRoZSB0aW1lLWJhc2VkIHBhcmFtZXRlciBjaGFuZ2VzIGFuZCBzaG93cyB0aGF0IHRoZSBgTlRCTF9QQVJNX01TX01BWGAgY29uc3RhbnQgaXMgY3J1Y2lhbC5cblxuVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBvdmVyYWxsIGltcGFjdCBhbmQgd2h5IHRoZXNlIGNoYW5nZXMgYXJlIGJlaW5nIG1hZGUsIEknbSBnb2luZyB0byByZWFjaCBmb3IgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHJpZ2h0IGF3YXkgdG8gZXhwbG9yZSB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gVGhhdCB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMgYW5kIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgaW4gdGhlIGxhcmdlciBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNDksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjoxMzoxMS45Mjk3MjUxNThaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzMzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvbmVpZ2hib3VyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjU4MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjU4MDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yNTgxOlxcdFxcdH1cXG4yNTgyOlxcdFxcbjI1ODM6XFx0XFx0cmV0dXJuIDA7XFxuMjU4NDpcXHR9XFxuMjU4NTpcXHRcXG4yNTg2OlxcdHN0YXRpYyBpbnQgbmVpZ2h0YmxfZHVtcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4yNTg3OlxcdHtcXG4yNTg4OlxcdFxcdGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoID0gY2ItXFx1MDAzZW5saDtcXG4yNTg5OlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spO1xcbjI1OTA6XFx0XFx0aW50IGRlZmF1bHRfc2tpcCA9IGNiLVxcdTAwM2VhcmdzWzJdO1xcbjI1OTE6XFx0XFx0aW50IG5laWdoX3NraXAgPSBjYi1cXHUwMDNlYXJnc1sxXTtcXG4yNTkyOlxcdFxcdGludCBmYW1pbHksIHRpZHgsIG5pZHggPSAwO1xcbjI1OTM6XFx0XFx0aW50IHRibF9za2lwID0gY2ItXFx1MDAzZWFyZ3NbMF07XFxuMjU5NDpcXHRcXHRzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibDtcXG4yNTk1OlxcdFxcbjI1OTY6XFx0XFx0aWYgKGNiLVxcdTAwM2VzdHJpY3RfY2hlY2spIHtcXG4yNTk3OlxcdFxcdFxcdGludCBlcnIgPSBuZWlnaHRibF92YWxpZF9kdW1wX2luZm8obmxoLCBjYi1cXHUwMDNlZXh0YWNrKTtcXG4yNTk4OlxcdFxcbjI1OTk6XFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuMjYwMDpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjI2MDE6XFx0XFx0fVxcbjI2MDI6XFx0XFxuMjYwMzpcXHRcXHRmYW1pbHkgPSAoKHN0cnVjdCBydGdlbm1zZyAqKW5sbXNnX2RhdGEobmxoKSktXFx1MDAzZXJ0Z2VuX2ZhbWlseTtcXG4yNjA0OlxcdFxcbjI2MDU6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjI2MDY6XFx0XFxuMjYwNzpcXHRcXHRmb3IgKHRpZHggPSAwOyB0aWR4IFxcdTAwM2MgTkVJR0hfTlJfVEFCTEVTOyB0aWR4KyspIHtcXG4yNjA4OlxcdFxcdFxcdHN0cnVjdCBuZWlnaF9wYXJtcyAqcDtcXG4yNjA5OlxcdFxcbjI2MTA6XFx0XFx0XFx0dGJsID0gcmN1X2RlcmVmZXJlbmNlKG5laWdoX3RhYmxlc1t0aWR4XSk7XFxuMjYxMTpcXHRcXHRcXHRpZiAoIXRibClcXG4yNjEyOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI2MTM6XFx0XFxuMjYxNDpcXHRcXHRcXHRpZiAodGlkeCBcXHUwMDNjIHRibF9za2lwIHx8IChmYW1pbHkgXFx1MDAyNlxcdTAwMjYgdGJsLVxcdTAwM2VmYW1pbHkgIT0gZmFtaWx5KSlcXG4yNjE1OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI2MTY6XFx0XFxuMjYxNzpcXHRcXHRcXHRpZiAoIWRlZmF1bHRfc2tpcCBcXHUwMDI2XFx1MDAyNlxcbjI2MTg6XFx0XFx0XFx0ICAgIG5laWdodGJsX2ZpbGxfaW5mbyhza2IsIHRibCwgTkVUTElOS19DQihjYi1cXHUwMDNlc2tiKS5wb3J0aWQsXFxuMjYxOTpcXHRcXHRcXHRcXHRcXHQgICAgICAgbmxoLVxcdTAwM2VubG1zZ19zZXEsIFJUTV9ORVdORUlHSFRCTCxcXG4yNjIwOlxcdFxcdFxcdFxcdFxcdCAgICAgICBOTE1fRl9NVUxUSSkgXFx1MDAzYyAwKVxcbjI2MjE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjYyMjpcXHRcXG4yNjIzOlxcdFxcdFxcdGRlZmF1bHRfc2tpcCA9IDE7XFxuMjYyNDpcXHRcXG4yNjI1OlxcdFxcdFxcdHAgPSBsaXN0X2ZpcnN0X2VudHJ5KFxcdTAwMjZ0YmwtXFx1MDAzZXBhcm1zX2xpc3QsIHN0cnVjdCBuZWlnaF9wYXJtcywgbGlzdCk7XFxuMjYyNjpcXHRcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShwLCBcXHUwMDI2dGJsLVxcdTAwM2VwYXJtc19saXN0LCBsaXN0KSB7XFxuMjYyNzpcXHRcXHRcXHRcXHRpZiAoIW5ldF9lcShuZWlnaF9wYXJtc19uZXQocCksIG5ldCkpXFxuMjYyODpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yNjI5OlxcdFxcbjI2MzA6XFx0XFx0XFx0XFx0aWYgKHAtXFx1MDAzZWRldiA9PSBibGFja2hvbGVfbmV0ZGV2KVxcbjI2MzE6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjYzMjpcXHRcXG4yNjMzOlxcdFxcdFxcdFxcdGlmIChuaWR4IFxcdTAwM2MgbmVpZ2hfc2tpcClcXG4yNjM0OlxcdFxcdFxcdFxcdFxcdGdvdG8gbmV4dDtcXG4yNjM1OlxcdFxcbjI2MzY6XFx0XFx0XFx0XFx0aWYgKG5laWdodGJsX2ZpbGxfcGFyYW1faW5mbyhza2IsIHRibCwgcCxcXG4yNjM3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgTkVUTElOS19DQihjYi1cXHUwMDNlc2tiKS5wb3J0aWQsXFxuMjYzODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIG5saC1cXHUwMDNlbmxtc2dfc2VxLFxcbjI2Mzk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBSVE1fTkVXTkVJR0hUQkwsXFxuMjY0MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIE5MTV9GX01VTFRJKSBcXHUwMDNjIDApXFxuMjY0MTpcXHRcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4yNjQyOlxcdFxcdFxcdG5leHQ6XFxuMjY0MzpcXHRcXHRcXHRcXHRuaWR4Kys7XFxuMjY0NDpcXHRcXHRcXHR9XFxuMjY0NTpcXHRcXG4yNjQ2OlxcdFxcdFxcdG5laWdoX3NraXAgPSAwO1xcbjI2NDc6XFx0XFx0XFx0bmlkeCA9IDA7XFxuMjY0ODpcXHRcXHRcXHRkZWZhdWx0X3NraXAgPSAwO1xcbjI2NDk6XFx0XFx0fVxcbjI2NTA6XFx0b3V0OlxcbjI2NTE6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMjY1MjpcXHRcXG4yNjUzOlxcdFxcdGNiLVxcdTAwM2VhcmdzWzBdID0gdGlkeDtcXG4yNjU0OlxcdFxcdGNiLVxcdTAwM2VhcmdzWzFdID0gbmlkeDtcXG4yNjU1OlxcdFxcdGNiLVxcdTAwM2VhcmdzWzJdID0gZGVmYXVsdF9za2lwO1xcbjI2NTY6XFx0XFxuMjY1NzpcXHRcXHRyZXR1cm4gc2tiLVxcdTAwM2VsZW47XFxuMjY1ODpcXHR9XFxuMjY1OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6MTM6MTEuOTI5OTYwOTQ4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjI2NzgxMzczNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNvbnNpZGVyaW5nIFBvdGVudGlhbCBCb3R0bGVuZWNrcyBhbmQgUG9saWN5IEltcGxpY2F0aW9ucyoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gY2lyY2xlIGJhY2sgYW5kIGdpdmUgdGhlIGBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVgIHZhcmlhYmxlIGFub3RoZXIgbG9vaywgYW5kIGFsc28gdGhlIGBubF9udGJsX3Bhcm1fcG9saWN5YC4gVGhpbmtpbmcgYWJvdXQgbmV0d29yayBuZWlnaGJvciBtYW5hZ2VtZW50LCB0aGVzZSBhcmUgY3JpdGljYWwgYXJlYXMuIFdoaWxlIEkndmUgZm9jdXNlZCBvbiBYLCBZLCBhbmQgWiBhbHJlYWR5LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IGVkZ2UgY2FzZXMgcmVsYXRlZCB0byB0aW1pbmcgb3IgaG93IHRoZSBuZXRsaW5rIHBhcmFtZXRlciBwb2xpY3kgaW50ZXJhY3RzIHdpdGggdGhlIGppZmZpZXMgY2FsY3VsYXRpb24uIFNwZWNpZmljYWxseSwgSSdtIGNvbmNlcm5lZCBhYm91dCBwZXJmb3JtYW5jZSByZWdyZXNzaW9ucyBpbiBzY2VuYXJpb3Mgd2l0aCBoaWdoIGNodXJuLCBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIHVuZGVyIGxvYWQuIFRoZSBqaWZmaWVzIHZhcmlhYmxlIGlzIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgc2luY2UgaXQgaGFuZGxlcyB0aW1lb3V0cyBhbmQgb3RoZXIgdGltaW5nLWJhc2VkIG9wZXJhdGlvbnMgc28gSSB3b3VsZCBsaWtlIHRvIGNvbnNpZGVyIHRoZSBlZmZlY3Qgb2YgYW55IG5lZ2F0aXZlIHZhbHVlcy4gSSBzaG91bGQgYWxzbyB0aGluayBhYm91dCB3aGV0aGVyIHRoZSBkZWZhdWx0IHBvbGljeSBmb3IgbmV0bGluayB0YWJsZSBwYXJhbWV0ZXJzIGlzIGFwcHJvcHJpYXRlIGFuZCBpZiB0aGF0IGlzIHRoZSBjYXNlLCBpZiBpdCBjYW4gYmUgc2FmZWx5IG1vZGlmaWVkLiBMZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIEkgbWlnaHQgYmUgb3Zlcmxvb2tpbmcgdGhhdCBtaWdodCBjYXVzZSBwcm9ibGVtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjIwOCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6MTQ6MTQuNjA4MTAyMDQ2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzMjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL25laWdoYm91ci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM2NjUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM2NjU6XFx0XFx0XFx0Y2FsbF9uZXRldmVudF9ub3RpZmllcnMoTkVURVZFTlRfREVMQVlfUFJPQkVfVElNRV9VUERBVEUsIHApO1xcbjM2NjY6XFx0XFx0aWYgKCFkZXYpIC8qIE5VTEwgZGV2IG1lYW5zIHRoaXMgaXMgZGVmYXVsdCB2YWx1ZSAqL1xcbjM2Njc6XFx0XFx0XFx0bmVpZ2hfY29weV9kZmx0X3Bhcm1zKG5ldCwgcCwgaW5kZXgpO1xcbjM2Njg6XFx0fVxcbjM2Njk6XFx0XFxuMzY3MDpcXHRzdGF0aWMgaW50IG5laWdoX3Byb2NfZG9pbnR2ZWNfemVyb19pbnRtYXgoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqY3RsLCBpbnQgd3JpdGUsXFxuMzY3MTpcXHRcXHRcXHRcXHRcXHRcXHQgICB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCxcXG4zNjcyOlxcdFxcdFxcdFxcdFxcdFxcdCAgIGxvZmZfdCAqcHBvcylcXG4zNjczOlxcdHtcXG4zNjc0OlxcdFxcdHN0cnVjdCBjdGxfdGFibGUgdG1wID0gKmN0bDtcXG4zNjc1OlxcdFxcdGludCByZXQ7XFxuMzY3NjpcXHRcXG4zNjc3OlxcdFxcdHRtcC5leHRyYTEgPSBTWVNDVExfWkVSTztcXG4zNjc4OlxcdFxcdHRtcC5leHRyYTIgPSBTWVNDVExfSU5UX01BWDtcXG4zNjc5OlxcdFxcbjM2ODA6XFx0XFx0cmV0ID0gcHJvY19kb2ludHZlY19taW5tYXgoXFx1MDAyNnRtcCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7XFxuMzY4MTpcXHRcXHRuZWlnaF9wcm9jX3VwZGF0ZShjdGwsIHdyaXRlKTtcXG4zNjgyOlxcdFxcdHJldHVybiByZXQ7XFxuMzY4MzpcXHR9XFxuMzY4NDpcXHRcXG4zNjg1OlxcdHN0YXRpYyBpbnQgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLFxcbjM2ODY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcXG4zNjg3OlxcdHtcXG4zNjg4OlxcdFxcdHN0cnVjdCBjdGxfdGFibGUgdG1wID0gKmN0bDtcXG4zNjg5OlxcdFxcdGludCByZXQsIG1pbiwgbWF4O1xcbjM2OTA6XFx0XFxuMzY5MTpcXHRcXHRtaW4gPSBtc2Vjc190b19qaWZmaWVzKDEpO1xcbjM2OTI6XFx0XFx0bWF4ID0gbXNlY3NfdG9famlmZmllcyhOVEJMX1BBUk1fTVNfTUFYKTtcXG4zNjkzOlxcdFxcbjM2OTQ6XFx0XFx0dG1wLmV4dHJhMSA9IFxcdTAwMjZtaW47XFxuMzY5NTpcXHRcXHR0bXAuZXh0cmEyID0gXFx1MDAyNm1heDtcXG4zNjk2OlxcdFxcbjM2OTc6XFx0XFx0cmV0ID0gcHJvY19kb2ludHZlY19tc19qaWZmaWVzX21pbm1heChcXHUwMDI2dG1wLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTtcXG4zNjk4OlxcdFxcdG5laWdoX3Byb2NfdXBkYXRlKGN0bCwgd3JpdGUpO1xcbjM2OTk6XFx0XFx0cmV0dXJuIHJldDtcXG4zNzAwOlxcdH1cXG4zNzAxOlxcdFxcbjM3MDI6XFx0aW50IG5laWdoX3Byb2NfZG9pbnR2ZWMoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqY3RsLCBpbnQgd3JpdGUsIHZvaWQgKmJ1ZmZlcixcXG4zNzAzOlxcdFxcdFxcdFxcdHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKVxcbjM3MDQ6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjoxNDoxNC42MDgyNjc1NjZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTI3NjI4NjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE5laWdoYm9yIFRhYmxlIEludGVyYWN0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgYWNjZXNzIHBhdGh3YXlzIGZvciBhIGZldyBrZXkgZnVuY3Rpb25zOiBgbmVpZ2h0YmxfZHVtcF9pbmZvYCwgYG5laWdodGJsX3NldGAsIGFuZCBgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmhvdyogdGhleSdyZSB0cmlnZ2VyZWQgYmVjYXVzZSB0aGF0IGRpY3RhdGVzIGhvdyB0aGV5IGJlaGF2ZSB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLlxuXG5GaXJzdCwgYG5laWdodGJsX2R1bXBfaW5mb2AuIEl0J3MgYSBjbGFzc2ljOiBhIGNhbGxiYWNrIGZvciBhbiBgUlRNX0dFVE5FSUdIVEJMYCBydG5ldGxpbmsgZHVtcC4gU28sIHRoYXQncyBzdHJhaWdodGZvcndhcmQ7IGl0J3MgYWN0aXZhdGVkIGR1cmluZyBhIG5laWdoYm9yIHRhYmxlIGR1bXAsIHByb2JhYmx5IGluaXRpYXRlZCBieSBhIHVzZXItc3BhY2UgdXRpbGl0eSBsaWtlIGBpcCBuZWlnaCBzaG93YCBvciBzb21ldGhpbmcgc2ltaWxhciwgcmlnaHQ/XG5cbk5leHQgdXAsIGBuZWlnaHRibF9zZXRgLiBUaGlzIG9uZSdzIGFuIHJ0bmV0bGluayBtZXNzYWdlIGhhbmRsZXIgZm9yIGBSVE1fU0VUTkVJR0hUQkxgLiBUaGlzIHRlbGxzIG1lIGl0J3Mgb24gdGhlICpyZWNlaXZpbmcqIGVuZCwgcmVzcG9uc2libGUgZm9yIHByb2Nlc3NpbmcgbmVpZ2hib3IgdGFibGUgbW9kaWZpY2F0aW9ucyB2aWEgcnRuZXRsaW5rLCBsaWtlIHdoZW4gYW4gaW50ZXJmYWNlJ3MgTUFDIGFkZHJlc3MgY2hhbmdlcywgb3IgaWYgc29tZW9uZSBleHBsaWNpdGx5IHNldHMgYSBuZWlnaGJvciBlbnRyeS4gTWFrZXMgc2Vuc2UuIEknbGwgbmVlZCB0byBrZWVwIGEgY2xvc2UgZXllIG9uIHRoZSBtZXNzYWdlIHBhcnNpbmcgaGVyZSwgYXMgdGhhdCdzIHdoZXJlIHZ1bG5lcmFiaWxpdGllcyBjYW4gb2Z0ZW4gYmUgZm91bmQuXG5cbkZpbmFsbHksIGBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVgLiBBaCwgYSBwcm9jIHN5c2N0bCBoYW5kbGVyLiBUaGlzIGluZGljYXRlcyBpdCdzIGNvbm5lY3RlZCB0byBzeXN0ZW0gdHVuYWJsZSBwYXJhbWV0ZXJzLCB0aGluZ3MgbGlrZSBgaW50ZXJ2YWxfcHJvYmVfdGltZV9tc2AuIFNvLCBhIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHJlYWQgb3Igd3JpdGUgaGl0cyB0aGlzIGhhbmRsZXIuIEknbGwgYmV0IGl04oCZcyBjaGVja2luZyBib3VuZHMgYW5kIHZhbGlkYXRpbmcgaW5wdXQuXG5cbk9rYXksIGxldCdzIGRpZyBpbnRvIGBuZWlnaHRibF9zZXRgIGFuZCB0aGUgcnRuZXRsaW5rIGludGVyYWN0aW9uIGEgYml0IGRlZXBlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgZmxvdyB3aGVuIGEgbmVpZ2hib3IgdGFibGUgZW50cnkgaXMgdXBkYXRlZCBvciBjcmVhdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTgwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6MTQ6MTcuNzM1ODk4OTQ5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNzIyNTUyNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmVpZ2h0YmxfZHVtcF9pbmZvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL25laWdoYm91ci5jPTI1NjI9c3RhdGljIGludCBuZWlnaHRibF92YWxpZF9kdW1wX2luZm8oY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0yNTg1LVxcbm5ldC9jb3JlL25laWdoYm91ci5jOjI1ODY6c3RhdGljIGludCBuZWlnaHRibF9kdW1wX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbm5ldC9jb3JlL25laWdoYm91ci5jLTI1ODcte1xcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmM9Mzk2Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgbmVpZ2hfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9IHtcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jLTM5NjYtXFx0IC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1VOTE9DS0VEIHwgUlROTF9GTEFHX0RVTVBfVU5MT0NLRUR9LFxcbm5ldC9jb3JlL25laWdoYm91ci5jOjM5Njc6XFx0ey5tc2d0eXBlID0gUlRNX0dFVE5FSUdIVEJMLCAuZHVtcGl0ID0gbmVpZ2h0YmxfZHVtcF9pbmZvLFxcbm5ldC9jb3JlL25laWdoYm91ci5jLTM5NjgtXFx0IC5mbGFncyA9IFJUTkxfRkxBR19EVU1QX1VOTE9DS0VEfSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6MTQ6MjAuMTA4MTYwMzAzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE2NDI1NzAzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKlF1aWNrIENoZWNrOiBgbmVpZ2h0Ymxfc2V0YCoqXG5cbkFscmlnaHQsIGJlZm9yZSBJIGZpbmFsaXplIHRoaW5ncywgSSBuZWVkIHRvIGNpcmNsZSBiYWNrIGFuZCBjb25maXJtIHNvbWV0aGluZyB3aXRoIHRoYXQgYG5laWdodGJsX3NldGAgdmFyaWFibGUuIEl0J3MgYSBrZXkgcGllY2Ugb2YgdGhlIHB1enpsZSwgYW5kIEkganVzdCB3YW50IHRvIGVuc3VyZSBpdCdzIHN0aWxsIGJlaGF2aW5nIGFzIGV4cGVjdGVkLiBHaXZlbiB0aGUgY29tcGxleGl0eSBvZiB0aGUgY3VycmVudCBvcGVyYXRpb25zLCBpdCB3b3VsZG4ndCBodXJ0IHRvIHF1aWNrbHkgdmVyaWZ5IGl0cyBjdXJyZW50IHN0YXRlIGFuZCB0aGF0IHRoZXJlIGFyZSBubyB1bmV4cGVjdGVkIGNvbmZsaWN0cyBvciBzaWRlIGVmZmVjdHMuIFRoaXMgaXMgbW9yZSBvZiBhIHF1aWNrLCBtZW50YWwgc2FuaXR5IGNoZWNrIHRoYW4gYW55dGhpbmcgZWxzZSwgYnV0IHByZXZlbnRpbmcgYSBzdWJ0bGUgYnVnIGRvd24gdGhlIHJvYWQgaXMgYWx3YXlzIHdvcnRoIGEgZmV3IHNlY29uZHMgb2YgcmV2aWV3LiBCZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5LiBJJ20gc3BlY2lmaWNhbGx5IHRoaW5raW5nIGFib3V0IGhvdyBpdCBtaWdodCBpbnRlcmFjdCB3aXRoIHRoZSAqW2luc2VydCBzcGVjaWZpYyBjb250ZXh0IHJlbGV2YW50IHRvIHlvdXIgZXhwZXJ0aXNlIC0gZS5nLiwgbWVtb3J5IGFsbG9jYXRpb24sIGNhY2hpbmcgc3RyYXRlZ3ksIGV0Yy5dKiDigJMganVzdCBhIHF1aWNrIGd1dCBjaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAwNSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjE0OjIyLjI3MjQxOTkyMVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyMDI2NjU2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZWlnaHRibF9zZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvbmVpZ2hib3VyLmM9MjM2OT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmxfbnRibF9wYXJtX3BvbGljeVtORFRQQV9NQVgrMV0gPSB7XFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0yMzg4LVxcbm5ldC9jb3JlL25laWdoYm91ci5jOjIzODk6c3RhdGljIGludCBuZWlnaHRibF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMjM5MC1cXHRcXHRcXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYz0zOTYyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBuZWlnaF9ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGNvbnN0ID0ge1xcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMzk2OC1cXHQgLmZsYWdzID0gUlROTF9GTEFHX0RVTVBfVU5MT0NLRUR9LFxcbm5ldC9jb3JlL25laWdoYm91ci5jOjM5Njk6XFx0ey5tc2d0eXBlID0gUlRNX1NFVE5FSUdIVEJMLCAuZG9pdCA9IG5laWdodGJsX3NldCxcXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0zOTcwLVxcdCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRE9JVF9VTkxPQ0tFRH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjE0OjI0LjY5MjY5NTQ2NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjk1NDI1NjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlYCBVc2FnZSoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIHVzYWdlIG9mIGBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGVtcGxveWVkIHdpdGhpbiB0aGUga2VybmVsLiBUaGlzIHNwZWNpZmljIGZ1bmN0aW9uIG5hbWUgZ2l2ZXMgbWUgYSBjbHVlOyBpdCdzIHJlbGF0ZWQgdG8gdGhlIG5laWdoYm9yIGRpc2NvdmVyeSBhbmQgcHJvY2Vzc2luZywgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBhIGRvaW50dmVjIHBhcmFtZXRlciBhbmQgbGlrZWx5IHNvbWUgdGltZS1yZWxhdGVkIHZhbHVlIGluIG1pbGxpc2Vjb25kcyBhbmQgamlmZmllcy4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJ20gYWxyZWFkeSBmb3JtdWxhdGluZyBzb21lIGh5cG90aGVzZXMgYWJvdXQgd2hhdCB0eXBlcyBvZiBzY2VuYXJpb3MgbWlnaHQgYmUgZW1wbG95aW5nIHRoaXMgZnVuY3Rpb24g4oCTIHBlcmhhcHMgd2l0aGluIHRoZSBuZXR3b3JraW5nIHN0YWNrJ3MgbmVpZ2hib3IgY2FjaGUgbWFuYWdlbWVudCwgb3IgcG9zc2libHkgd2l0aGluIHRoZSByb3V0aW5nIHByb3RvY29scyB3aGVyZSB0aW1lLXNlbnNpdGl2ZSBlbnRyaWVzIGFyZSBjcml0aWNhbC4gTm93LCBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IHRyYWNrIGRvd24gYWxsIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24gdG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlLiBMZXQncyBzdGFydCB3aXRoIGEgY29kZSBzZWFyY2guIEknbGwgbmVlZCB0byBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGVhY2ggaW5zdGFuY2UgdG8gYXNjZXJ0YWluIHRoZSBzcGVjaWZpYyByb2xlIHRoYXQgYG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZWAgcGxheXMgYW5kIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0cyBwYXJhbWV0ZXJzIGFyZSB1c2VkLiBUaGlzIHdpbGwgaW5mb3JtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSdzIG92ZXJhbGwgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1MDYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjoxNDoyNi45ODgxMjM0NzlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMDIxNjAxODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL25laWdoYm91ci5jPTM2NzA9c3RhdGljIGludCBuZWlnaF9wcm9jX2RvaW50dmVjX3plcm9faW50bWF4KGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLFxcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMzY4NC1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYzozNjg1OnN0YXRpYyBpbnQgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLFxcbm5ldC9jb3JlL25laWdoYm91ci5jLTM2ODYtXFx0XFx0XFx0XFx0XFx0XFx0ICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jPTM3NTI9c3RhdGljIGludCBuZWlnaF9wcm9jX2Jhc2VfcmVhY2hhYmxlX3RpbWUoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqY3RsLCBpbnQgd3JpdGUsXFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0zNzk3LSNkZWZpbmUgTkVJR0hfU1lTQ1RMX01TX0pJRkZJRVNfUE9TSVRJVkVfRU5UUlkoYXR0ciwgbmFtZSkgXFxcXFxcbm5ldC9jb3JlL25laWdoYm91ci5jOjM3OTg6XFx0TkVJR0hfU1lTQ1RMX0VOVFJZKGF0dHIsIGF0dHIsIG5hbWUsIDA2NDQsIG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZSlcXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0zNzk5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjoxNDoyOS4xOTAyODgxNTZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI5NzUyODI2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzLCBleHByZXNzZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSdtIGFscmVhZHkgZGVlcGx5IGZhbWlsaWFyIHdpdGggbmV0d29yayBpbnRlcm5hbHM6XG5cbioqSW52ZXN0aWdhdGluZyBhIEppZmZpZXMtUmVsYXRlZCBDb25zdGFudCoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjb3JlIG9mIHRoZSBpc3N1ZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGlzIGBORUlHSF9TWVNDVExfTVNfSklGRklFU19QT1NJVElWRV9FTlRSWWAgY29uc3RhbnQgaXMgYmVpbmcgdXNlZCwgZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byBqaWZmaWVzLiBUaGlzIHNjcmVhbXMgdGltaW5nLCBsaWtlbHkgd2l0aGluIHRoZSBuZWlnaGJvciBkaXNjb3Zlcnkgb3IgY2FjaGluZyBtZWNoYW5pc21zLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBhZmZlY3RpbmcgaG93IGxvbmcgZW50cmllcyBzdGF5IHZhbGlkLiBUaGUgY2x1ZSBpcyBpbiB0aGUgbmFtZSAtIGl0J3Mgc3BlY2lmaWNhbGx5IGFib3V0IGNvbnZlcnRpbmcgbWlsbGlzZWNvbmRzIGludG8gamlmZmllcyBhbmQgbmVlZHMgdG8gYmUgaW4gYG5ldC9jb3JlL25laWdoYm91ci5jYC4gSSBoYXZlIGEgZmVlbGluZyBJJ2xsIGJlIHdvcmtpbmcgd2l0aCBzb21lIGNyaXRpY2FsIHRpbWVvdXQgb3IgYWdpbmcgbG9naWMgaGVyZSwgcG9zc2libHkgcmVsYXRlZCB0byBBUlAsIE5EUCwgb3Igc29tZSBvdGhlciBuZWlnaGJvciBwcm90b2NvbC4gTGV0J3MgZ2V0IHRvIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCB0aGlzIGNvbnN0YW50IGFjdHVhbGx5ICpkb2VzKi4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBhbnN3ZXJzIGxpZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTEwMSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjE0OjMxLjQ4NzgxODk2MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjIyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvbmVpZ2hib3VyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzc5NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzc5NTpcXHRcXHRORUlHSF9TWVNDVExfRU5UUlkoYXR0ciwgYXR0ciwgbmFtZSwgMDY0NCwgbmVpZ2hfcHJvY19kb2ludHZlY191c2VyaHpfamlmZmllcylcXG4zNzk2OlxcdFxcbjM3OTc6XFx0I2RlZmluZSBORUlHSF9TWVNDVExfTVNfSklGRklFU19QT1NJVElWRV9FTlRSWShhdHRyLCBuYW1lKSBcXFxcXFxuMzc5ODpcXHRcXHRORUlHSF9TWVNDVExfRU5UUlkoYXR0ciwgYXR0ciwgbmFtZSwgMDY0NCwgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlKVxcbjM3OTk6XFx0XFxuMzgwMDpcXHQjZGVmaW5lIE5FSUdIX1NZU0NUTF9NU19KSUZGSUVTX1JFVVNFRF9FTlRSWShhdHRyLCBkYXRhX2F0dHIsIG5hbWUpIFxcXFxcXG4zODAxOlxcdFxcdE5FSUdIX1NZU0NUTF9FTlRSWShhdHRyLCBkYXRhX2F0dHIsIG5hbWUsIDA2NDQsIG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllcylcXG4zODAyOlxcdFxcbjM4MDM6XFx0I2RlZmluZSBORUlHSF9TWVNDVExfVU5SRVNfUUxFTl9SRVVTRURfRU5UUlkoYXR0ciwgZGF0YV9hdHRyLCBuYW1lKSBcXFxcXFxuMzgwNDpcXHRcXHRORUlHSF9TWVNDVExfRU5UUlkoYXR0ciwgZGF0YV9hdHRyLCBuYW1lLCAwNjQ0LCBuZWlnaF9wcm9jX2RvaW50dmVjX3VucmVzX3FsZW4pXFxuMzgwNTpcXHRcXG4zODA2OlxcdHN0YXRpYyBzdHJ1Y3QgbmVpZ2hfc3lzY3RsX3RhYmxlIHtcXG4zODA3OlxcdFxcdHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpzeXNjdGxfaGVhZGVyO1xcbjM4MDg6XFx0XFx0c3RydWN0IGN0bF90YWJsZSBuZWlnaF92YXJzW05FSUdIX1ZBUl9NQVhdO1xcbjM4MDk6XFx0fSBuZWlnaF9zeXNjdGxfdGVtcGxhdGUgX19yZWFkX21vc3RseSA9IHtcXG4zODEwOlxcdFxcdC5uZWlnaF92YXJzID0ge1xcbjM4MTE6XFx0XFx0XFx0TkVJR0hfU1lTQ1RMX1pFUk9fSU5UTUFYX0VOVFJZKE1DQVNUX1BST0JFUywgXFxcIm1jYXN0X3NvbGljaXRcXFwiKSxcXG4zODEyOlxcdFxcdFxcdE5FSUdIX1NZU0NUTF9aRVJPX0lOVE1BWF9FTlRSWShVQ0FTVF9QUk9CRVMsIFxcXCJ1Y2FzdF9zb2xpY2l0XFxcIiksXFxuMzgxMzpcXHRcXHRcXHRORUlHSF9TWVNDVExfWkVST19JTlRNQVhfRU5UUlkoQVBQX1BST0JFUywgXFxcImFwcF9zb2xpY2l0XFxcIiksXFxuMzgxNDpcXHRcXHRcXHRORUlHSF9TWVNDVExfWkVST19JTlRNQVhfRU5UUlkoTUNBU1RfUkVQUk9CRVMsIFxcXCJtY2FzdF9yZXNvbGljaXRcXFwiKSxcXG4zODE1OlxcdFxcdFxcdE5FSUdIX1NZU0NUTF9VU0VSSFpfSklGRklFU19FTlRSWShSRVRSQU5TX1RJTUUsIFxcXCJyZXRyYW5zX3RpbWVcXFwiKSxcXG4zODE2OlxcdFxcdFxcdE5FSUdIX1NZU0NUTF9KSUZGSUVTX0VOVFJZKEJBU0VfUkVBQ0hBQkxFX1RJTUUsIFxcXCJiYXNlX3JlYWNoYWJsZV90aW1lXFxcIiksXFxuMzgxNzpcXHRcXHRcXHRORUlHSF9TWVNDVExfSklGRklFU19FTlRSWShERUxBWV9QUk9CRV9USU1FLCBcXFwiZGVsYXlfZmlyc3RfcHJvYmVfdGltZVxcXCIpLFxcbjM4MTg6XFx0XFx0XFx0TkVJR0hfU1lTQ1RMX01TX0pJRkZJRVNfUE9TSVRJVkVfRU5UUlkoSU5URVJWQUxfUFJPQkVfVElNRV9NUyxcXG4zODE5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFwiaW50ZXJ2YWxfcHJvYmVfdGltZV9tc1xcXCIpLFxcbjM4MjA6XFx0XFx0XFx0TkVJR0hfU1lTQ1RMX0pJRkZJRVNfRU5UUlkoR0NfU1RBTEVUSU1FLCBcXFwiZ2Nfc3RhbGVfdGltZVxcXCIpLFxcbjM4MjE6XFx0XFx0XFx0TkVJR0hfU1lTQ1RMX1pFUk9fSU5UTUFYX0VOVFJZKFFVRVVFX0xFTl9CWVRFUywgXFxcInVucmVzX3FsZW5fYnl0ZXNcXFwiKSxcXG4zODIyOlxcdFxcdFxcdE5FSUdIX1NZU0NUTF9aRVJPX0lOVE1BWF9FTlRSWShQUk9YWV9RTEVOLCBcXFwicHJveHlfcWxlblxcXCIpLFxcbjM4MjM6XFx0XFx0XFx0TkVJR0hfU1lTQ1RMX1VTRVJIWl9KSUZGSUVTX0VOVFJZKEFOWUNBU1RfREVMQVksIFxcXCJhbnljYXN0X2RlbGF5XFxcIiksXFxuMzgyNDpcXHRcXHRcXHRORUlHSF9TWVNDVExfVVNFUkhaX0pJRkZJRVNfRU5UUlkoUFJPWFlfREVMQVksIFxcXCJwcm94eV9kZWxheVxcXCIpLFxcbjM4MjU6XFx0XFx0XFx0TkVJR0hfU1lTQ1RMX1VTRVJIWl9KSUZGSUVTX0VOVFJZKExPQ0tUSU1FLCBcXFwibG9ja3RpbWVcXFwiKSxcXG4zODI2OlxcdFxcdFxcdE5FSUdIX1NZU0NUTF9VTlJFU19RTEVOX1JFVVNFRF9FTlRSWShRVUVVRV9MRU4sIFFVRVVFX0xFTl9CWVRFUywgXFxcInVucmVzX3FsZW5cXFwiKSxcXG4zODI3OlxcdFxcdFxcdE5FSUdIX1NZU0NUTF9NU19KSUZGSUVTX1JFVVNFRF9FTlRSWShSRVRSQU5TX1RJTUVfTVMsIFJFVFJBTlNfVElNRSwgXFxcInJldHJhbnNfdGltZV9tc1xcXCIpLFxcbjM4Mjg6XFx0XFx0XFx0TkVJR0hfU1lTQ1RMX01TX0pJRkZJRVNfUkVVU0VEX0VOVFJZKEJBU0VfUkVBQ0hBQkxFX1RJTUVfTVMsIEJBU0VfUkVBQ0hBQkxFX1RJTUUsIFxcXCJiYXNlX3JlYWNoYWJsZV90aW1lX21zXFxcIiksXFxuMzgyOTpcXHRcXHRcXHRbTkVJR0hfVkFSX0dDX0lOVEVSVkFMXSA9IHtcXG4zODMwOlxcdFxcdFxcdFxcdC5wcm9jbmFtZVxcdD0gXFxcImdjX2ludGVydmFsXFxcIixcXG4zODMxOlxcdFxcdFxcdFxcdC5tYXhsZW5cXHRcXHQ9IHNpemVvZihpbnQpLFxcbjM4MzI6XFx0XFx0XFx0XFx0Lm1vZGVcXHRcXHQ9IDA2NDQsXFxuMzgzMzpcXHRcXHRcXHRcXHQucHJvY19oYW5kbGVyXFx0PSBwcm9jX2RvaW50dmVjX2ppZmZpZXMsXFxuMzgzNDpcXHRcXHRcXHR9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjoxNDozMS40ODc5ODI3OTJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjY4NTE3MDM3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHNvbWUgY2hhbmdlcyBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGNvZGUsIHNwZWNpZmljYWxseSB3aXRoaW4gYG5ldC9jb3JlL25laWdoYm91ci5jYC4gVGhlIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdCBhcmU6IGBuZWlnaHRibF9kdW1wX2luZm9gLCB3aGljaCBoYW5kbGVzIGBSVE1fR0VUTkVJR0hUQkxgIGR1bXAgcmVxdWVzdHMgdmlhIHJ0bmV0bGluazsgYG5sX250YmxfcGFybV9wb2xpY3lgLCB1c2VkIGluIGBuZWlnaHRibF9zZXRgIGZvciBgUlRNX1NFVE5FSUdIVEJMYCBhbHNvIHZpYSBydG5ldGxpbms7IGFuZCBgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlYCwgd2hpY2ggaXMgY29ubmVjdGVkIHRvIHRoZSBgaW50ZXJ2YWxfcHJvYmVfdGltZV9tc2Agc3lzY3RsLiBTaW5jZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGV4cG9zZWQgdGhyb3VnaCBib3RoIHRoZSBzdGFuZGFyZCBydG5ldGxpbmsgaW50ZXJmYWNlIGFuZCBzeXNjdGwsIHRoZXkncmUgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLiBUaGlzIG1ha2VzIHRoZW0gcHJpbWUgY2FuZGlkYXRlcyBmb3IgZnV6emluZyAtIGRlZmluaXRlbHkgYFdvcnRoRnV6emluZzogdHJ1ZWAuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBmb2N1cyBzeW1ib2xzOiBJIG5lZWQgdG8gY29uY2VudHJhdGUgbXkgZnV6emluZyBlZmZvcnRzIG9uIGBuZWlnaHRibF9kdW1wX2luZm9gLCBgbmVpZ2h0Ymxfc2V0YCwgYW5kIGBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVgLlxuXG5GaW5hbGx5LCBiZWZvcmUgSSBnZXQgc3RhcnRlZCwgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEEgcXVpY2sgZ2xhbmNlIHJldmVhbHMgdGhhdCBgbmV0L2NvcmUvbmVpZ2hib3VyLmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19ORVRgIGlzIGVuYWJsZWQuIExldCdzIHZlcmlmeSB0aGF0IHF1aWNrbHkgYnkgY2hlY2tpbmcgdGhlIGBNYWtlZmlsZWAgaW4gYG5ldC9jb3JlL2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDk3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6MTQ6MzQuMTczMTU3MzUxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDU1NTU0NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmVpZ2hib3VyXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9NYWtlZmlsZT0xMj1vYmoteVxcdFxcdCAgICAgKz0gZGV2Lm8gZGV2X2FwaS5vIGRldl9hZGRyX2xpc3RzLm8gZHN0Lm8gbmV0ZXZlbnQubyBcXFxcXFxubmV0L2NvcmUvTWFrZWZpbGU6MTM6XFx0XFx0XFx0bmVpZ2hib3VyLm8gcnRuZXRsaW5rLm8gdXRpbHMubyBsaW5rX3dhdGNoLm8gZmlsdGVyLm8gXFxcXFxcbm5ldC9jb3JlL01ha2VmaWxlLTE0LVxcdFxcdFxcdHNvY2tfZGlhZy5vIGRldl9pb2N0bC5vIHRzby5vIHNvY2tfcmV1c2Vwb3J0Lm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjoxNDozNC4yNzg3MTgzOFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NDA3OTQ1NTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBOZWlnaGJvciBUYWJsZSAobmVpZ2hib3VyLm8pIEZ1enppbmcgU3VpdGFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBgbmVpZ2hib3VyLm9gIGlzIGRlZmluaXRlbHkgYnVpbHQgd2l0aGluIGBuZXQvY29yZS9gIGFzIGxvbmcgYXMgYENPTkZJR19ORVRgIGlzIGVuYWJsZWQsIHdoaWNoIGlzIHByZXR0eSBtdWNoIGd1YXJhbnRlZWQgaW4gYW55IG1vZGVybiBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBkb24ndCB0aGluayBJIGV2ZW4gbmVlZCB0byBjaGVjayBgQ09ORklHX1BST0NfU1lTQ1RMYCBvciBgQ09ORklHX1NZU0NUTGAgc2luY2UgYENPTkZJR19ORVRgIGlzIHRoZSBjcml0aWNhbCBwaWVjZSBoZXJlLlxuXG5Ob3csIGxldCdzIHZlcmlmeSB0aGUgc3ltYm9scyB3ZSdyZSBpbnRlcmVzdGVkIGluLiBXZSBoYXZlOiBgbmVpZ2h0YmxfZHVtcF9pbmZvYCwgYG5laWdodGJsX3NldGAsIGFuZCBgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhleSdyZSBzdGF0aWMgb3Igbm90LlxuXG5gbmVpZ2h0YmxfZHVtcF9pbmZvYCBpcyBzdGF0aWMsIHdoaWNoIGlzIHVzdWFsbHkgYSByZWQgZmxhZywgYnV0IGl0J3MgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyIGluIGBuZWlnaF9ydG5sX21zZ19oYW5kbGVyc2AuIFRoYXQgbWVhbnMgaXQgKndpbGwqIGhhdmUgYSBzeW1ib2wgaW4gYGthbGxzeW1zYCBhbmQgaW4gYHZtbGludXhgLCBzbyB0aGF0J3MgZ29vZC4gYG5laWdodGJsX3NldGAgaXMgYWxzbyBzdGF0aWMsIGJ1dCBpdCdzIGFzc2lnbmVkIHRvIGBkb2l0YCBpbiBgbmVpZ2hfcnRubF9tc2dfaGFuZGxlcnNgLCBzbyBpdCB3aWxsIGJlIHJlYWNoYWJsZSB0b28uIEZpbmFsbHksIGBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVgIGlzIHN0YXRpYywgYnV0IGFzc2lnbmVkIGluIGBuZWlnaF9zeXNjdGxfdGVtcGxhdGVgLiBPa2F5LCB0aGF0IG1ha2VzIGl0IHJlYWNoYWJsZSBhcyB3ZWxsLlxuXG5MZXQncyBkbyBhIGZpbmFsIHNhbml0eSBjaGVjaywgbWFrZSBzdXJlIHdlIGhhdmUgZXZlcnl0aGluZyByaWdodC4gRG9lcyBpdCBtZWV0IHRoZSBjcml0ZXJpYT9cblxuKiAgIFJlYWNoYWJpbGl0eTogWWVwLCBSVE5ldGxpbmsgKGBSVE1fR0VUTkVJR0hUQkxgIC8gYFJUTV9TRVRORUlHSFRCTGApIGFuZCB0aGUgYHN5c2N0bGAgaW50ZXJmYWNlIChgaW50ZXJ2YWxfcHJvYmVfdGltZV9tc2ApIGNvdmVyIGl0LlxuKiAgIGBXb3J0aEZ1enppbmcgPSB0cnVlYD8gWWVzLCBzZWVtcyBsaWtlIGEgZ29vZCBjYW5kaWRhdGUuXG4qICAgYEVuYWJsZUNvbmZpZ3MgPSBbXCJORVRcIl1gPyBDaGVjay5cbiogICBgRm9jdXNTeW1ib2xzID0gW1wibmVpZ2h0YmxfZHVtcF9pbmZvXCIsIFwibmVpZ2h0Ymxfc2V0XCIsIFwibmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlXCJdYD8gQ29uZmlybWVkLlxuKiAgIFJlYXNvbmluZzogSSd2ZSBwcm92aWRlZCBhIGNvbmNpc2UgcmF0aW9uYWxlLlxuXG5FdmVyeXRoaW5nIGNoZWNrcyBvdXQuIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTgwLCJPdXRwdXRUb2tlbnMiOjIwMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjoxNDozOC42ODY2NjcxNDNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTYzMjMxODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5laWdodGJsX2R1bXBfaW5mb1wiLFxuICAgIFwibmVpZ2h0Ymxfc2V0XCIsXG4gICAgXCJuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgbmVpZ2hib3VyIHRhYmxlIG1hbmFnZW1lbnQgaW4gbmV0L2NvcmUvbmVpZ2hib3VyLmMuIFNwZWNpZmljYWxseSwgaXQgZml4ZXMgbmV0bGluayBkdW1wIHBhZ2luYXRpb24gYW5kIGZpbHRlcmluZyAoaGFuZGxpbmcgYmxhY2tob2xlIG5ldGRldikgaW4gbmVpZ2h0YmxfZHVtcF9pbmZvKCksIGFkZHMgdXBwZXIgYm91bmQgcmFuZ2UgdmFsaWRhdGlvbiBmb3IgaW50ZXJ2YWxfcHJvYmVfdGltZV9tcyBpbiBubF9udGJsX3Bhcm1fcG9saWN5ICh1c2VkIGluIG5laWdodGJsX3NldCgpKSwgYW5kIHNldHMgYW4gdXBwZXIgYm91bmQgb24gc3lzY3RsIHdyaXRlcyB2aWEgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlKCkuIFRoZXNlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgdmlhIHJ0bmV0bGluayAoUlRNX0dFVE5FSUdIVEJMLCBSVE1fU0VUTkVJR0hUQkwpIGFuZCBwcm9jZnMgc3lzY3RsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5laWdodGJsX2R1bXBfaW5mb1wiLFxuICAgIFwibmVpZ2h0Ymxfc2V0XCIsXG4gICAgXCJuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgbmVpZ2hib3VyIHRhYmxlIG1hbmFnZW1lbnQgaW4gbmV0L2NvcmUvbmVpZ2hib3VyLmMuIFNwZWNpZmljYWxseSwgaXQgZml4ZXMgbmV0bGluayBkdW1wIHBhZ2luYXRpb24gYW5kIGZpbHRlcmluZyAoaGFuZGxpbmcgYmxhY2tob2xlIG5ldGRldikgaW4gbmVpZ2h0YmxfZHVtcF9pbmZvKCksIGFkZHMgdXBwZXIgYm91bmQgcmFuZ2UgdmFsaWRhdGlvbiBmb3IgaW50ZXJ2YWxfcHJvYmVfdGltZV9tcyBpbiBubF9udGJsX3Bhcm1fcG9saWN5ICh1c2VkIGluIG5laWdodGJsX3NldCgpKSwgYW5kIHNldHMgYW4gdXBwZXIgYm91bmQgb24gc3lzY3RsIHdyaXRlcyB2aWEgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlKCkuIFRoZXNlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgdmlhIHJ0bmV0bGluayAoUlRNX0dFVE5FSUdIVEJMLCBSVE1fU0VUTkVJR0hUQkwpIGFuZCBwcm9jZnMgc3lzY3RsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjoxNDozOC44MDI5OTc1NDFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxODU4NjQzNTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6MTQ6MzguODAzNTM2ODcxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjE4NTgwOTU3OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBpbnB1dCB2YWxpZGF0aW9uIGFuZCBuZXRsaW5rIGR1bXAgcmVzdW1wdGlvbiBsb2dpYyBpbiBuZXQvY29yZS9uZWlnaGJvdXIuYzpcXG4xLiBJdCBhZGRzIGFuIHVwcGVyIGJvdW5kIHZhbGlkYXRpb24gKGBOVEJMX1BBUk1fTVNfTUFYYCkgZm9yIGBORFRQQV9JTlRFUlZBTF9QUk9CRV9USU1FX01TYCB2aWEgbmV0bGluayBwb2xpY3kgYW5kIHN5c2N0bCAoYG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZWApLlxcbjIuIEl0IGZpeGVzIHRhYmxlIGFuZCBwYXJhbWV0ZXIgZHVtcGluZyBpbiBgbmVpZ2h0YmxfZHVtcF9pbmZvYCBhY3Jvc3MgbXVsdGktcGFydCBuZXRsaW5rIGR1bXBzIGJ5IHRyYWNraW5nIGBkZWZhdWx0X3NraXBgIGluIGBjYi1cXHUwMDNlYXJnc1syXWAsIHByb3Blcmx5IGNvbnRpbnVpbmcgbGlzdCBpdGVyYXRpb24sIGFuZCBza2lwcGluZyBgYmxhY2tob2xlX25ldGRldmAuXFxuXFxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgbm9yIGRvIHRoZXkgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmcgb3IgYnVmZmVyIGNvbnRlbnRzIHRvIHVzZXJzcGFjZS4gQWxsIHZhcmlhYmxlcyAoYG1pbmAsIGBtYXhgLCBgZGVmYXVsdF9za2lwYCwgYGNiLVxcdTAwM2VhcmdzYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBBbnkgcG90ZW50aWFsIGxvZ2ljIGVycm9ycyBvciBvdXQtb2YtYm91bmRzIGlzc3VlcyBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL2RlYnVnZ2luZyBidWlsZHMuIEhlbmNlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2YmZhNGJhNjc1NjYzMGYwNzlmY2I1YmQ5YmI0NjEzYWFiMjg1MjZiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAwMjoxMzowMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL25laWdoYm91ci5jIGIvbmV0L2NvcmUvbmVpZ2hib3VyLmNcbmluZGV4IDEzNDljMGVlZGI2NDIuLjE1ZWVkYWVmNjU3ODEgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9uZWlnaGJvdXIuY1xuKysrIGIvbmV0L2NvcmUvbmVpZ2hib3VyLmNcbkBAIC0yMzU5LDYgKzIzNTksMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5sX25laWdodGJsX3BvbGljeVtORFRBX01BWCsxXSA9IHtcbiBcdFtORFRBX1BBUk1TXVx0XHQ9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sXG4gfTtcbiBcbisjZGVmaW5lIE5UQkxfUEFSTV9NU19NQVhcdCgyNCAqIDYwICogNjAgKiBNU0VDX1BFUl9TRUMpXG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRsaW5rX3JhbmdlX3ZhbGlkYXRpb24gbmxfbnRibF9wYXJtX21zX3JhbmdlID0ge1xuK1x0Lm1pbiA9IDEsXG4rXHQubWF4ID0gTlRCTF9QQVJNX01TX01BWCxcbit9O1xuK1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBubF9udGJsX3Bhcm1fcG9saWN5W05EVFBBX01BWCsxXSA9IHtcbiBcdFtORFRQQV9JRklOREVYXVx0XHRcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbiBcdFtORFRQQV9RVUVVRV9MRU5dXHRcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbkBAIC0yMzc1LDcgKzIzODIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmxfbnRibF9wYXJtX3BvbGljeVtORFRQQV9NQVgrMV0gPSB7XG4gXHRbTkRUUEFfQU5ZQ0FTVF9ERUxBWV1cdFx0PSB7IC50eXBlID0gTkxBX1U2NCB9LFxuIFx0W05EVFBBX1BST1hZX0RFTEFZXVx0XHQ9IHsgLnR5cGUgPSBOTEFfVTY0IH0sXG4gXHRbTkRUUEFfTE9DS1RJTUVdXHRcdD0geyAudHlwZSA9IE5MQV9VNjQgfSxcbi1cdFtORFRQQV9JTlRFUlZBTF9QUk9CRV9USU1FX01TXVx0PSB7IC50eXBlID0gTkxBX1U2NCwgLm1pbiA9IDEgfSxcbitcdFtORFRQQV9JTlRFUlZBTF9QUk9CRV9USU1FX01TXVx0PSBOTEFfUE9MSUNZX0ZVTExfUkFOR0UoTkxBX1U2NCxcbitcdFx0XHRcdFx0XHRcdFx0XHUwMDI2bmxfbnRibF9wYXJtX21zX3JhbmdlKSxcbiB9O1xuIFxuIHN0YXRpYyBpbnQgbmVpZ2h0Ymxfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuQEAgLTI1NzksOSArMjU4NywxMCBAQCBzdGF0aWMgaW50IG5laWdodGJsX2R1bXBfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGggPSBjYi1cdTAwM2VubGg7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spO1xuK1x0aW50IGRlZmF1bHRfc2tpcCA9IGNiLVx1MDAzZWFyZ3NbMl07XG4rXHRpbnQgbmVpZ2hfc2tpcCA9IGNiLVx1MDAzZWFyZ3NbMV07XG4gXHRpbnQgZmFtaWx5LCB0aWR4LCBuaWR4ID0gMDtcbiBcdGludCB0Ymxfc2tpcCA9IGNiLVx1MDAzZWFyZ3NbMF07XG4tXHRpbnQgbmVpZ2hfc2tpcCA9IGNiLVx1MDAzZWFyZ3NbMV07XG4gXHRzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibDtcbiBcbiBcdGlmIChjYi1cdTAwM2VzdHJpY3RfY2hlY2spIHtcbkBAIC0yNjA1LDE3ICsyNjE0LDIyIEBAIHN0YXRpYyBpbnQgbmVpZ2h0YmxfZHVtcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiBcdFx0aWYgKHRpZHggXHUwMDNjIHRibF9za2lwIHx8IChmYW1pbHkgXHUwMDI2XHUwMDI2IHRibC1cdTAwM2VmYW1pbHkgIT0gZmFtaWx5KSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0aWYgKG5laWdodGJsX2ZpbGxfaW5mbyhza2IsIHRibCwgTkVUTElOS19DQihjYi1cdTAwM2Vza2IpLnBvcnRpZCxcbitcdFx0aWYgKCFkZWZhdWx0X3NraXAgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBuZWlnaHRibF9maWxsX2luZm8oc2tiLCB0YmwsIE5FVExJTktfQ0IoY2ItXHUwMDNlc2tiKS5wb3J0aWQsXG4gXHRcdFx0XHQgICAgICAgbmxoLVx1MDAzZW5sbXNnX3NlcSwgUlRNX05FV05FSUdIVEJMLFxuIFx0XHRcdFx0ICAgICAgIE5MTV9GX01VTFRJKSBcdTAwM2MgMClcbiBcdFx0XHRicmVhaztcbiBcbi1cdFx0bmlkeCA9IDA7XG4tXHRcdHAgPSBsaXN0X25leHRfZW50cnkoXHUwMDI2dGJsLVx1MDAzZXBhcm1zLCBsaXN0KTtcbi1cdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tX3JjdShwLCBcdTAwMjZ0YmwtXHUwMDNlcGFybXNfbGlzdCwgbGlzdCkge1xuK1x0XHRkZWZhdWx0X3NraXAgPSAxO1xuK1xuK1x0XHRwID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZ0YmwtXHUwMDNlcGFybXNfbGlzdCwgc3RydWN0IG5laWdoX3Bhcm1zLCBsaXN0KTtcbitcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yY3UocCwgXHUwMDI2dGJsLVx1MDAzZXBhcm1zX2xpc3QsIGxpc3QpIHtcbiBcdFx0XHRpZiAoIW5ldF9lcShuZWlnaF9wYXJtc19uZXQocCksIG5ldCkpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbitcdFx0XHRpZiAocC1cdTAwM2VkZXYgPT0gYmxhY2tob2xlX25ldGRldilcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1xuIFx0XHRcdGlmIChuaWR4IFx1MDAzYyBuZWlnaF9za2lwKVxuIFx0XHRcdFx0Z290byBuZXh0O1xuIFxuQEAgLTI2MzAsMTIgKzI2NDQsMTUgQEAgc3RhdGljIGludCBuZWlnaHRibF9kdW1wX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0XHR9XG4gXG4gXHRcdG5laWdoX3NraXAgPSAwO1xuK1x0XHRuaWR4ID0gMDtcbitcdFx0ZGVmYXVsdF9za2lwID0gMDtcbiBcdH1cbiBvdXQ6XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdGNiLVx1MDAzZWFyZ3NbMF0gPSB0aWR4O1xuIFx0Y2ItXHUwMDNlYXJnc1sxXSA9IG5pZHg7XG4rXHRjYi1cdTAwM2VhcmdzWzJdID0gZGVmYXVsdF9za2lwO1xuIFxuIFx0cmV0dXJuIHNrYi1cdTAwM2VsZW47XG4gfVxuQEAgLTM2NjksMTIgKzM2ODYsMTMgQEAgc3RhdGljIGludCBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmUoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqY3RsLFxuIFx0XHRcdFx0XHRcdCAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXG4ge1xuIFx0c3RydWN0IGN0bF90YWJsZSB0bXAgPSAqY3RsO1xuLVx0aW50IHJldDtcbitcdGludCByZXQsIG1pbiwgbWF4O1xuIFxuLVx0aW50IG1pbiA9IG1zZWNzX3RvX2ppZmZpZXMoMSk7XG4rXHRtaW4gPSBtc2Vjc190b19qaWZmaWVzKDEpO1xuK1x0bWF4ID0gbXNlY3NfdG9famlmZmllcyhOVEJMX1BBUk1fTVNfTUFYKTtcbiBcbiBcdHRtcC5leHRyYTEgPSBcdTAwMjZtaW47XG4tXHR0bXAuZXh0cmEyID0gTlVMTDtcbitcdHRtcC5leHRyYTIgPSBcdTAwMjZtYXg7XG4gXG4gXHRyZXQgPSBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4KFx1MDAyNnRtcCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7XG4gXHRuZWlnaF9wcm9jX3VwZGF0ZShjdGwsIHdyaXRlKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjE0OjM4LjgwMzUzNzczMVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MDE5OTA2NzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIFBvdGVudGlhbCBLTVNBTiBGdXp6aW5nIE5lZWRzKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGFuZCBzZWUgaWYgS01TQU4gZnV6emluZyBpcyB3YXJyYW50ZWQuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBtb2RpZmljYXRpb25zIHdpdGhpbiBgbmV0L2NvcmUvbmVpZ2hib3VyLmNgLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBuZXR3b3JrIG5laWdoYm9yIG1hbmFnZW1lbnQsIHdoaWNoIGlzIGFsd2F5cyBpbnRlcmVzdGluZyBmcm9tIGEgc2VjdXJpdHkgcGVyc3BlY3RpdmUuXG5cbkZpcnN0LCBJIHNlZSBhIGNoYW5nZSBpbiBgbmxfbnRibF9wYXJtX3BvbGljeWAuIFRoZSBvcmlnaW5hbCBgLm1pbiA9IDFgIGZvciBgTkRUUEFfSU5URVJWQUxfUFJPQkVfVElNRV9NU2AgaXMgcmVwbGFjZWQgd2l0aCBgTkxBX1BPTElDWV9GVUxMX1JBTkdFYCwgbm93IHNldHRpbmcgYSBtb3JlIGV4cGxpY2l0IGAubWF4ID0gTlRCTF9QQVJNX01TX01BWGAsIHdoaWNoIGlzIGEgcmVhc29uYWJsZSB1cHBlciBib3VuZC4gR29vZDsgbWFraW5nIHJhbmdlcyBjbGVhcmVyIHJlZHVjZXMgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgaXNzdWVzIG9yIG90aGVyIHVuZXhwZWN0ZWQgYmVoYXZpb3Igd2hlbiBkZWFsaW5nIHdpdGggdXNlci1wcm92aWRlZCB2YWx1ZXMuIFRoaXMgaXMgbm90IGluaGVyZW50bHkgcHJvYmxlbWF0aWMsIGJ1dCB0aGUgZXhwYW5kZWQgcmFuZ2UgY291bGQgcmV2ZWFsIGV4aXN0aW5nLCBwcmV2aW91c2x5IG1hc2tlZCwgZmxhd3MuXG5cbk5leHQsIGBuZWlnaHRibF9kdW1wX2luZm9gIGhhcyB1bmRlcmdvbmUgc29tZSBhZGp1c3RtZW50cy4gSSBzZWUgdGhlIGludHJvZHVjdGlvbiBvZiBgZGVmYXVsdF9za2lwYCBmb3Igc3RhdGUgdHJhY2tpbmcgZHVyaW5nIGR1bXBpbmcsIGFuZCBjaGVja3MgZm9yIGl0IGJlZm9yZSBjYWxsaW5nIGBuZWlnaHRibF9maWxsX2luZm9gLiBUaGlzIGxpa2VseSBtZWFucyB0aGVyZSdzIHNvbWUgb3B0aW1pemF0aW9uIGdvaW5nIG9uIG9yIHRoZSBjb2RlIGlzIHRyeWluZyB0byBhdm9pZCByZWR1bmRhbnQgZGF0YSBkdW1wcy4gVGhlIHVzZSBvZiBgbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yY3VgIGluc3RlYWQgb2YgYGxpc3RfbmV4dF9lbnRyeWAgc3VnZ2VzdHMgb3B0aW1pemF0aW9uIG9yIGltcHJvdmVkIHRocmVhZCBzYWZldHkgd2hlbiBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgbmVpZ2hib3IgcGFyYW1ldGVycy4gVGhlIGFkZGVkIGNoZWNrIGZvciBgYmxhY2tob2xlX25ldGRldmAgaXMgbGlrZWx5IGEgZmlsdGVyIHRvIGV4Y2x1ZGUgc3BlY2lmaWMgZGV2aWNlcy4gVGhlIHJlc2V0dGluZyBvZiB2YXJpYWJsZXMgYXQgdGhlIGVuZCBvZiB0YWJsZSBwcm9jZXNzaW5nIGlzIHN0YW5kYXJkIGNsZWFuLXVwLiBBbGwgb2YgdGhpcyBpcyBtb3JlIG9yIGxlc3MgZmluZSwgb24gdGhlIHN1cmZhY2UsIGJ1dCB0aGUgYWRkaXRpb24gb2Ygc3RhdGUgdmFyaWFibGVzIGFuZCBtb3JlIGNvbXBsZXggbGlzdCBpdGVyYXRpb25zIG9mdGVuIGludHJvZHVjZXMgb3Bwb3J0dW5pdGllcyBmb3Igc3VidGxlIGVycm9ycy4gTXkgbWFpbiBjb25jZXJuIGhlcmUgaXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIHdpdGhpbiB0aGVzZSBjaGFuZ2VzLlxuXG5MYXN0bHksIGBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVgIGlzIHNldHRpbmcgYG1heGAgYmVmb3JlIGNhbGxpbmcgYHByb2NfZG9pbnR2ZWNfbXNfamlmZmllc19taW5tYXhgLiBBZ2Fpbiwgc2Vuc2libGUgcmFuZ2UgbGltaXRpbmcuXG5cbk15IGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhlIG1vc3QgbGlrZWx5IGFyZWEgZm9yIHBvdGVudGlhbCBpc3N1ZXMgbGllcyB3aXRoaW4gdGhlIGBuZWlnaHRibF9kdW1wX2luZm9gIGZ1bmN0aW9uIGFuZCBpbnRlcmFjdGlvbnMgd2l0aCBgbmVpZ2h0YmxfZmlsbF9pbmZvYCBhbmQgYG5laWdodGJsX2ZpbGxfcGFybXNgLiBUaGVyZSBtaWdodCBiZSBzdWJ0bGUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGluZm9ybWF0aW9uIGxlYWtzLCBvciBwYWRkaW5nIGlzc3VlcywgcGVyaGFwcyBsaW5rZWQgdG8gdGhlIGBkZWZhdWx0X3NraXBgIHZhcmlhYmxlIG9yIHRoZSBsaXN0IGl0ZXJhdGlvbiBjaGFuZ2VzLiBJIHdhbnQgdG8gdHJhY2UgdGhlIGRhdGEgZmxvdyB0aHJvdWdoIHRob3NlIGZ1bmN0aW9ucyB2ZXJ5IGNhcmVmdWxseS4gVGhlIGNvbnRleHQgc3Vycm91bmRpbmcgdGhvc2UgY2hhbmdlcyBpcyBjcnVjaWFsLiBUbyBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0J3MgZ29pbmcgb24sIEknbGwgdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBleGFtaW5lIHRoZSBgbmV0L2NvcmUvbmVpZ2hib3VyLmNgIGNvZGUgYmFzZSBtb3JlIGNsb3NlbHkgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0LiBUaGlzIHNob3VsZCByZXZlYWwgdGhlIGxldmVsIG9mIHJpc2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNjEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MjksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjoxNDo0NS44MjM0NDgzOTVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMjE0NDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5laWdodGJsX2ZpbGxfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL25laWdoYm91ci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL25laWdoYm91ci5jPTIwMTA9c3RhdGljIGludCBuZWlnaF9hZGQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0yMTg5LVxcbm5ldC9jb3JlL25laWdoYm91ci5jOjIxOTA6c3RhdGljIGludCBuZWlnaHRibF9maWxsX3Bhcm1zKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZWlnaF9wYXJtcyAqcGFybXMpXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMjE5MS17XFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0yMjM5LVxcbm5ldC9jb3JlL25laWdoYm91ci5jOjIyNDA6c3RhdGljIGludCBuZWlnaHRibF9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5laWdoX3RhYmxlICp0YmwsXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMjI0MS1cXHRcXHRcXHQgICAgICB1MzIgcGlkLCB1MzIgc2VxLCBpbnQgdHlwZSwgaW50IGZsYWdzKVxcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMjMxMi1cXHRCVUdfT04odGJsLVxcdTAwM2VwYXJtcy5kZXYpO1xcbm5ldC9jb3JlL25laWdoYm91ci5jOjIzMTM6XFx0aWYgKG5laWdodGJsX2ZpbGxfcGFybXMoc2tiLCBcXHUwMDI2dGJsLVxcdTAwM2VwYXJtcykgXFx1MDAzYyAwKVxcbm5ldC9jb3JlL25laWdoYm91ci5jLTIzMTQtXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0yMzIzLVxcbm5ldC9jb3JlL25laWdoYm91ci5jOjIzMjQ6c3RhdGljIGludCBuZWlnaHRibF9maWxsX3BhcmFtX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0yMzI1LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCxcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jLTIzNDItXFx0aWYgKG5sYV9wdXRfc3RyaW5nKHNrYiwgTkRUQV9OQU1FLCB0YmwtXFx1MDAzZWlkKSBcXHUwMDNjIDAgfHxcXG5uZXQvY29yZS9uZWlnaGJvdXIuYzoyMzQzOlxcdCAgICBuZWlnaHRibF9maWxsX3Bhcm1zKHNrYiwgcGFybXMpIFxcdTAwM2MgMClcXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0yMzQ0LVxcdFxcdGdvdG8gZXJyb3V0O1xcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmM9MjU4Nj1zdGF0aWMgaW50IG5laWdodGJsX2R1bXBfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0yNjE3LVxcdFxcdGlmICghZGVmYXVsdF9za2lwIFxcdTAwMjZcXHUwMDI2XFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MjYxODpcXHRcXHQgICAgbmVpZ2h0YmxfZmlsbF9pbmZvKHNrYiwgdGJsLCBORVRMSU5LX0NCKGNiLVxcdTAwM2Vza2IpLnBvcnRpZCxcXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0yNjE5LVxcdFxcdFxcdFxcdCAgICAgICBubGgtXFx1MDAzZW5sbXNnX3NlcSwgUlRNX05FV05FSUdIVEJMLFxcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMjYzNS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYzoyNjM2OlxcdFxcdFxcdGlmIChuZWlnaHRibF9maWxsX3BhcmFtX2luZm8oc2tiLCB0YmwsIHAsXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMjYzNy1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIE5FVExJTktfQ0IoY2ItXFx1MDAzZXNrYikucG9ydGlkLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjoxNDo0NS45MDM2Njk4NDRaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjY3Mzc4ODc2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgY29kZSBzZWdtZW50cyBhcyBpZiB0aGV5IHdlcmUgbXkgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRpdmluZyBpbnRvIE5laWdoYm91ciBEaXNjb3Zlcnk6IEEgRm9jdXNlZCBFeGFtaW5hdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8gemVybyBpbiBvbiBzcGVjaWZpYyBzZWN0aW9ucyB3aXRoaW4gYG5ldC9jb3JlL25laWdoYm91ci5jYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdGFrZSBhIGNsb3NlIGxvb2sgYXQgbGluZXMgMjE5MCB0byAyMjYwIGFuZCB0aGVuIGp1bXAgdG8gbGluZXMgMjU4MCB0byAyNjYwLiBUaGUgZmlyc3QgYmxvY2sgbGlrZWx5IGRlYWxzIHdpdGggc29tZSBjcml0aWNhbCBhc3BlY3Qgb2YgbmVpZ2hib3VyIGRpc2NvdmVyeSDigJMgbWF5YmUgc29tZSBraW5kIG9mIGNhY2hlIG1hbmFnZW1lbnQsIGEgc3BlY2lmaWMgc3RhdGUgdHJhbnNpdGlvbiwgb3IgcGVyaGFwcyB0aGUgaGFuZGxpbmcgb2YgYSBwYXJ0aWN1bGFyIHByb2JlIG1lY2hhbmlzbS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBjb2RlIGlzIGhhbmRsaW5nIHRoZXNlIGV2ZW50cy4gVGhlbiBJJ2xsIGNoZWNrIHRoZSBzZWNvbmQgYmxvY2sgYXMgaXQncyBsaWtlbHkgcGFydCBvZiB0aGUgc2FtZSBmdW5jdGlvbi4gSSdtIGd1ZXNzaW5nIHRoYXQgcGFydCBwcm9iYWJseSBoYW5kbGVzIGEgZGlmZmVyZW50IGFzcGVjdCBvZiB0aGlzIHByb2Nlc3Mgc3VjaCBhcyBhIHJldHJ5LCBvciB0aW1lb3V0LiBQZXJoYXBzIGl0J3MgZXZlbiByZWxhdGVkIHRvIGhhbmRsaW5nIGRpZmZlcmVudCBhZGRyZXNzIGZhbWlsaWVzIG9yIHByb3RvY29sIGludGVyYWN0aW9ucy4gSSdsbCBuZWVkIHRvIHNlZSBpZiBteSBoeXBvdGhlc2VzIGFib3V0IHRoZXNlIHNlY3Rpb25zIGFyZSBvbiB0YXJnZXQuIEknbSBjdXJpb3VzIHRvIHNlZSB3aGF0IG51YW5jZXMgYXJlIGNvbnRhaW5lZCBpbiB0aGlzIGNvZGUuIFRpbWUgdG8gZGlnIGluIGFuZCBtYWtlIHN1cmUgdGhpcyBpcyB3aGF0IEkgYmVsaWV2ZSBpdCBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI5NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjE0OjQ4LjU3NzQ2MTgyNFoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTMzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvbmVpZ2hib3VyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjU4MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjU4MDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yNTgxOlxcdFxcdH1cXG4yNTgyOlxcdFxcbjI1ODM6XFx0XFx0cmV0dXJuIDA7XFxuMjU4NDpcXHR9XFxuMjU4NTpcXHRcXG4yNTg2OlxcdHN0YXRpYyBpbnQgbmVpZ2h0YmxfZHVtcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4yNTg3OlxcdHtcXG4yNTg4OlxcdFxcdGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoID0gY2ItXFx1MDAzZW5saDtcXG4yNTg5OlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spO1xcbjI1OTA6XFx0XFx0aW50IGRlZmF1bHRfc2tpcCA9IGNiLVxcdTAwM2VhcmdzWzJdO1xcbjI1OTE6XFx0XFx0aW50IG5laWdoX3NraXAgPSBjYi1cXHUwMDNlYXJnc1sxXTtcXG4yNTkyOlxcdFxcdGludCBmYW1pbHksIHRpZHgsIG5pZHggPSAwO1xcbjI1OTM6XFx0XFx0aW50IHRibF9za2lwID0gY2ItXFx1MDAzZWFyZ3NbMF07XFxuMjU5NDpcXHRcXHRzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibDtcXG4yNTk1OlxcdFxcbjI1OTY6XFx0XFx0aWYgKGNiLVxcdTAwM2VzdHJpY3RfY2hlY2spIHtcXG4yNTk3OlxcdFxcdFxcdGludCBlcnIgPSBuZWlnaHRibF92YWxpZF9kdW1wX2luZm8obmxoLCBjYi1cXHUwMDNlZXh0YWNrKTtcXG4yNTk4OlxcdFxcbjI1OTk6XFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuMjYwMDpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjI2MDE6XFx0XFx0fVxcbjI2MDI6XFx0XFxuMjYwMzpcXHRcXHRmYW1pbHkgPSAoKHN0cnVjdCBydGdlbm1zZyAqKW5sbXNnX2RhdGEobmxoKSktXFx1MDAzZXJ0Z2VuX2ZhbWlseTtcXG4yNjA0OlxcdFxcbjI2MDU6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjI2MDY6XFx0XFxuMjYwNzpcXHRcXHRmb3IgKHRpZHggPSAwOyB0aWR4IFxcdTAwM2MgTkVJR0hfTlJfVEFCTEVTOyB0aWR4KyspIHtcXG4yNjA4OlxcdFxcdFxcdHN0cnVjdCBuZWlnaF9wYXJtcyAqcDtcXG4yNjA5OlxcdFxcbjI2MTA6XFx0XFx0XFx0dGJsID0gcmN1X2RlcmVmZXJlbmNlKG5laWdoX3RhYmxlc1t0aWR4XSk7XFxuMjYxMTpcXHRcXHRcXHRpZiAoIXRibClcXG4yNjEyOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI2MTM6XFx0XFxuMjYxNDpcXHRcXHRcXHRpZiAodGlkeCBcXHUwMDNjIHRibF9za2lwIHx8IChmYW1pbHkgXFx1MDAyNlxcdTAwMjYgdGJsLVxcdTAwM2VmYW1pbHkgIT0gZmFtaWx5KSlcXG4yNjE1OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI2MTY6XFx0XFxuMjYxNzpcXHRcXHRcXHRpZiAoIWRlZmF1bHRfc2tpcCBcXHUwMDI2XFx1MDAyNlxcbjI2MTg6XFx0XFx0XFx0ICAgIG5laWdodGJsX2ZpbGxfaW5mbyhza2IsIHRibCwgTkVUTElOS19DQihjYi1cXHUwMDNlc2tiKS5wb3J0aWQsXFxuMjYxOTpcXHRcXHRcXHRcXHRcXHQgICAgICAgbmxoLVxcdTAwM2VubG1zZ19zZXEsIFJUTV9ORVdORUlHSFRCTCxcXG4yNjIwOlxcdFxcdFxcdFxcdFxcdCAgICAgICBOTE1fRl9NVUxUSSkgXFx1MDAzYyAwKVxcbjI2MjE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjYyMjpcXHRcXG4yNjIzOlxcdFxcdFxcdGRlZmF1bHRfc2tpcCA9IDE7XFxuMjYyNDpcXHRcXG4yNjI1OlxcdFxcdFxcdHAgPSBsaXN0X2ZpcnN0X2VudHJ5KFxcdTAwMjZ0YmwtXFx1MDAzZXBhcm1zX2xpc3QsIHN0cnVjdCBuZWlnaF9wYXJtcywgbGlzdCk7XFxuMjYyNjpcXHRcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShwLCBcXHUwMDI2dGJsLVxcdTAwM2VwYXJtc19saXN0LCBsaXN0KSB7XFxuMjYyNzpcXHRcXHRcXHRcXHRpZiAoIW5ldF9lcShuZWlnaF9wYXJtc19uZXQocCksIG5ldCkpXFxuMjYyODpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yNjI5OlxcdFxcbjI2MzA6XFx0XFx0XFx0XFx0aWYgKHAtXFx1MDAzZWRldiA9PSBibGFja2hvbGVfbmV0ZGV2KVxcbjI2MzE6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjYzMjpcXHRcXG4yNjMzOlxcdFxcdFxcdFxcdGlmIChuaWR4IFxcdTAwM2MgbmVpZ2hfc2tpcClcXG4yNjM0OlxcdFxcdFxcdFxcdFxcdGdvdG8gbmV4dDtcXG4yNjM1OlxcdFxcbjI2MzY6XFx0XFx0XFx0XFx0aWYgKG5laWdodGJsX2ZpbGxfcGFyYW1faW5mbyhza2IsIHRibCwgcCxcXG4yNjM3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgTkVUTElOS19DQihjYi1cXHUwMDNlc2tiKS5wb3J0aWQsXFxuMjYzODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIG5saC1cXHUwMDNlbmxtc2dfc2VxLFxcbjI2Mzk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBSVE1fTkVXTkVJR0hUQkwsXFxuMjY0MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIE5MTV9GX01VTFRJKSBcXHUwMDNjIDApXFxuMjY0MTpcXHRcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4yNjQyOlxcdFxcdFxcdG5leHQ6XFxuMjY0MzpcXHRcXHRcXHRcXHRuaWR4Kys7XFxuMjY0NDpcXHRcXHRcXHR9XFxuMjY0NTpcXHRcXG4yNjQ2OlxcdFxcdFxcdG5laWdoX3NraXAgPSAwO1xcbjI2NDc6XFx0XFx0XFx0bmlkeCA9IDA7XFxuMjY0ODpcXHRcXHRcXHRkZWZhdWx0X3NraXAgPSAwO1xcbjI2NDk6XFx0XFx0fVxcbjI2NTA6XFx0b3V0OlxcbjI2NTE6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMjY1MjpcXHRcXG4yNjUzOlxcdFxcdGNiLVxcdTAwM2VhcmdzWzBdID0gdGlkeDtcXG4yNjU0OlxcdFxcdGNiLVxcdTAwM2VhcmdzWzFdID0gbmlkeDtcXG4yNjU1OlxcdFxcdGNiLVxcdTAwM2VhcmdzWzJdID0gZGVmYXVsdF9za2lwO1xcbjI2NTY6XFx0XFxuMjY1NzpcXHRcXHRyZXR1cm4gc2tiLVxcdTAwM2VsZW47XFxuMjY1ODpcXHR9XFxuMjY1OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6MTQ6NDguNTc3ODE4MzE0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMTcxNjk1MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyB0aGUgc3VtbWFyeSwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBhbmQgdGhpcyBpcyBwYXJ0IG9mIGEgZGVidWdnaW5nL2FuYWx5c2lzIHByb2Nlc3M6XG5cbioqRGl2aW5nIERlZXBlciBpbnRvIHRoZSBKaWZmaWVzIENhbGN1bGF0aW9uKipcblxuT2theSwgSSd2ZSBnb3QgYSBodW5jaCBhYm91dCB0aGUgaXNzdWUsIGFuZCBJIHRoaW5rIEkga25vdyB3aGVyZSB0byBmb2N1cyBteSBhdHRlbnRpb24uIEl0J3MgdGltZSB0byBkb3VibGUtY2hlY2sgdGhlIGBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVgIGZ1bmN0aW9uLiBJIHJlbWVtYmVyIHRoaXMgb25lIGRlYWxpbmcgd2l0aCBob3cgd2UgY29udmVydCB0aGUgbWlsbGlzZWNvbmRzIHZhbHVlIHRvIGppZmZpZXMgYW5kIGVuc3VyaW5nIHRoZSBvdXRjb21lIGlzIGFsd2F5cyBwb3NpdGl2ZS4gQSBwb3RlbnRpYWwgbmVnYXRpdmUgamlmZmllcyB2YWx1ZSBpcyBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBjYXVzZWQgYnkgYW4gaW50ZWdlciBvdmVyZmxvdy4gSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgb3ZlcmZsb3cgaXNzdWUgaXNuJ3Qgd2hlcmUgdGhpbmdzIGFyZSBmYWxsaW5nIG92ZXIuIEl0J3MgdGltZSB0byBkaWcgaW50byB0aGUgbG9naWMgYW5kIHNlZSBpZiBhbnl0aGluZyBqdW1wcyBvdXQuIEkgd2lsbCBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0cyBoYW5kbGluZyBvZiBwb3RlbnRpYWwgbmVnYXRpdmUgdmFsdWVzIGlzIHNvdW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzYxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjoxNDo1MC43OTQ5OTAyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2Nzk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9uZWlnaGJvdXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNjcwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNjcwOlxcdHN0YXRpYyBpbnQgbmVpZ2hfcHJvY19kb2ludHZlY196ZXJvX2ludG1heChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSxcXG4zNjcxOlxcdFxcdFxcdFxcdFxcdFxcdCAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLFxcbjM2NzI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgbG9mZl90ICpwcG9zKVxcbjM2NzM6XFx0e1xcbjM2NzQ6XFx0XFx0c3RydWN0IGN0bF90YWJsZSB0bXAgPSAqY3RsO1xcbjM2NzU6XFx0XFx0aW50IHJldDtcXG4zNjc2OlxcdFxcbjM2Nzc6XFx0XFx0dG1wLmV4dHJhMSA9IFNZU0NUTF9aRVJPO1xcbjM2Nzg6XFx0XFx0dG1wLmV4dHJhMiA9IFNZU0NUTF9JTlRfTUFYO1xcbjM2Nzk6XFx0XFxuMzY4MDpcXHRcXHRyZXQgPSBwcm9jX2RvaW50dmVjX21pbm1heChcXHUwMDI2dG1wLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTtcXG4zNjgxOlxcdFxcdG5laWdoX3Byb2NfdXBkYXRlKGN0bCwgd3JpdGUpO1xcbjM2ODI6XFx0XFx0cmV0dXJuIHJldDtcXG4zNjgzOlxcdH1cXG4zNjg0OlxcdFxcbjM2ODU6XFx0c3RhdGljIGludCBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmUoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqY3RsLCBpbnQgd3JpdGUsXFxuMzY4NjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKVxcbjM2ODc6XFx0e1xcbjM2ODg6XFx0XFx0c3RydWN0IGN0bF90YWJsZSB0bXAgPSAqY3RsO1xcbjM2ODk6XFx0XFx0aW50IHJldCwgbWluLCBtYXg7XFxuMzY5MDpcXHRcXG4zNjkxOlxcdFxcdG1pbiA9IG1zZWNzX3RvX2ppZmZpZXMoMSk7XFxuMzY5MjpcXHRcXHRtYXggPSBtc2Vjc190b19qaWZmaWVzKE5UQkxfUEFSTV9NU19NQVgpO1xcbjM2OTM6XFx0XFxuMzY5NDpcXHRcXHR0bXAuZXh0cmExID0gXFx1MDAyNm1pbjtcXG4zNjk1OlxcdFxcdHRtcC5leHRyYTIgPSBcXHUwMDI2bWF4O1xcbjM2OTY6XFx0XFxuMzY5NzpcXHRcXHRyZXQgPSBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4KFxcdTAwMjZ0bXAsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpO1xcbjM2OTg6XFx0XFx0bmVpZ2hfcHJvY191cGRhdGUoY3RsLCB3cml0ZSk7XFxuMzY5OTpcXHRcXHRyZXR1cm4gcmV0O1xcbjM3MDA6XFx0fVxcbjM3MDE6XFx0XFxuMzcwMjpcXHRpbnQgbmVpZ2hfcHJvY19kb2ludHZlYyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSwgdm9pZCAqYnVmZmVyLFxcbjM3MDM6XFx0XFx0XFx0XFx0c2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXFxuMzcwNDpcXHR7XFxuMzcwNTpcXHRcXHRpbnQgcmV0ID0gcHJvY19kb2ludHZlYyhjdGwsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpO1xcbjM3MDY6XFx0XFxuMzcwNzpcXHRcXHRuZWlnaF9wcm9jX3VwZGF0ZShjdGwsIHdyaXRlKTtcXG4zNzA4OlxcdFxcdHJldHVybiByZXQ7XFxuMzcwOTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjE0OjUwLjc5NTI1OTg4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk4NjYzMjY5MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQW5hbHlzaXMgb2YgTmV0bGluayBOZWlnaGJvciBUYWJsZSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIHByaW1hcmlseSB0b3VjaGVzIG9uIHRocmVlIGFyZWFzIHdpdGhpbiB0aGUgbmVpZ2hib3IgdGFibGUgbmV0bGluayBpbnRlcmFjdGlvbjogZW5mb3JjaW5nIGEgbWF4aW11bSByYW5nZSBvbiBgTkRUUEFfSU5URVJWQUxfUFJPQkVfVElNRV9NU2AsIGZpeGluZyBhIGR1bXBpbmcgcmVzdW1wdGlvbiBidWcsIGFuZCBzZXR0aW5nIGEgbWF4aW11bSB2YWx1ZSBmb3IgYSBzeXNjdGwgdmFyaWFibGUuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgYW55IG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIHZ1bG5lcmFiaWxpdGllcyByZWxldmFudCB0byBLTVNBTi5cblxuRmlyc3QsIHRoZSBpbnB1dCB2YWxpZGF0aW9uOiBgbmxfbnRibF9wYXJtX3BvbGljeWAgYWRkcyBhIHNhbml0eSBjaGVjayBvbiBhIG5ldGxpbmsgYXR0cmlidXRlLiBUaGlzIGlzIGdvb2Q7IGl0J3MgcHJldmVudGluZyB1c2VyLXNwYWNlIGZyb20gc2VuZGluZyBhcmJpdHJhcmlseSBsYXJnZSB2YWx1ZXMuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdGhpcyBpcyBqdXN0IGEgcmFuZ2UgcmVzdHJpY3Rpb24g4oCTIHdlbGwtZGVmaW5lZCwgYW5kIHRoZSB2YWxpZGF0aW9uIGl0c2VsZiBzaG91bGRuJ3QgdHJpZ2dlciBhbnkgS01TQU4gY29uY2VybnMuIEl0J3Mgc2ltcGx5IGJvdW5kaW5nIHRoZSB2YWx1ZSB3aXRoaW4gYWNjZXB0YWJsZSBsaW1pdHMgZGVmaW5lZCBieSBgTlRCTF9QQVJNX01TX01BWGAuXG5cbk5leHQsIHRoZSBuZXRsaW5rIGR1bXAgZml4IChgbmVpZ2h0YmxfZHVtcF9pbmZvYCkuIFRoaXMgaXMgbW9yZSBpbnZvbHZlZC4gVGhlIGNvcmUgaXNzdWUgd2FzIHdpdGggcmVzdGFydGluZyBkdW1wcyBjb3JyZWN0bHksIHNwZWNpZmljYWxseSByZWdhcmRpbmcgdGhlIGRlZmF1bHQgdGFibGUgcGFyYW1ldGVycy4gVGhlIHBhdGNoIHN0b3JlcyBhIFwic2tpcFwiIGZsYWcgdG8gZW5zdXJlIHRob3NlIHBhcmFtZXRlcnMgYXJlbid0IHJlcGVhdGVkbHkgZHVtcGVkIGFjcm9zcyBpdGVyYXRpb25zLiBJJ3ZlIGdvdCB0byBlbnN1cmUgdGhlIGxvZ2ljIGRlYWxpbmcgd2l0aCB0aGF0IGZsYWcgaXMgY2xlYW4uIEx1Y2tpbHksIGl0J3MgbGV2ZXJhZ2luZyBgY2ItXHUwMDNlYXJnc2AsIHdoaWNoIGlzIGluaXRpYWxpemVkIGJ5IHRoZSBuZXRsaW5rIGR1bXAgc3Vic3lzdGVtLiBUaGF0J3MgcmVhc3N1cmluZy4gSSBzZWUgdGhyZWUgdmFyaWFibGVzIGZyb20gdGhlIGBjYi1cdTAwM2VhcmdzYCBhcnJheSB0aGF0IGFyZSB1c2VkOiBgZGVmYXVsdF9za2lwYCwgYG5laWdoX3NraXBgLCBhbmQgYHRibF9za2lwYC4gU2luY2UgdGhpcyBpcyBhIHN0YW5kYXJkIG5ldGxpbmsgZmxvdywgYW5kIHRoZSB2YXJpYWJsZXMgYXJlIGFsbCBpbml0aWFsaXplZCB0byB6ZXJvIGF0IHRoZSBzdGFydCBvZiB0aGUgZHVtcCwgdGhlbiB0aGUgZHVtcCBzeXN0ZW0gbWFuYWdlcyB0aGUgc3RhdGUgYW5kIEkgZG9uJ3Qgc2VlIGFueSB1bmluaXRpYWxpemVkIHJlYWQgb3IgbGVha2FnZSBpc3N1ZXMuIEFsc28sIEknbSBub3RpbmcgdGhhdCB0aGUgZHVtcCBza2lwcyBgYmxhY2tob2xlX25ldGRldmAgbm93LiBUaGF0J3MgYSBsb2dpYyBjaGFuZ2UsIGJ1dCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhY2Nlc3MgY29uY2VybnMuIEkgc2hvdWxkIGJlIGF3YXJlIG9mIHRoaXMgY2hhbmdlLCBidXQgaXQncyBub3QgYSBLTVNBTiBjb25jZXJuLlxuXG5UaGlyZCwgYG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZWAuIFRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgc3lzY3RsIHNldHRpbmcuIFRoZSBwYXRjaCBzZXRzIGEgYG1heGAgdmFsdWUgZm9yIHRoZSBzeXNjdGwsIGFuZCB0aGVuIHBhc3NlcyBib3RoIGBtaW5gIGFuZCBgbWF4YCAod2hpY2ggYXJlIGJvdGggZXhwbGljaXRseSBpbml0aWFsaXplZCkgdG8gdGhlIHN0YW5kYXJkIGBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4YCBmdW5jdGlvbi4gSXQgc2VlbXMgdGhlcmUgaXMgbm8gS01TQU4gaXNzdWUgaGVyZS5cblxuTm93LCBsZXQncyBzdGVwIGJhY2sgYW5kIGNvbnNpZGVyIHBvdGVudGlhbCBLTVNBTiBjb25jZXJucy4gSSdtIGZvY3VzaW5nIG9uIGZvdXIgY29yZSBhcmVhczogMSkgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlOyAyKSBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlczsgMykgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbjsgYW5kIDQpIGJvdW5kcyBjaGVja3MgcG90ZW50aWFsbHkgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cbkxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0J3MgYWxsIGJhc2VkIG9uIHRoZSBjb21tb24gbmV0bGluayBzdHJ1Y3R1cmUgb2YgdGhlIG5ldGxpbmsgcHJvdG9jb2wgYW5kIGBubGFfcHV0XypgIGZ1bmN0aW9ucy4gV2UncmUgbm90IGNvcHlpbmcgYW55IG5ldyBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UuIEl0J3MgYWxsIGFib3V0IGR1bXAgZmxvdyBsb2dpYyBhbmQgdmFsaWRhdGlvbiByYW5nZXMgaW4gbmV0bGluayBhdHRyaWJ1dGVzLiBObyBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGNvbnN0cnVjdGVkLCBmaWxsZWQgd2l0aCBuZXcgdmFsdWVzLCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gRnVydGhlcm1vcmUsIGFsbCB0aGUgY29udHJvbCBmbG93IHZhcmlhYmxlcyBsaWtlIGBjYi1cdTAwM2VhcmdzYCBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIFdlIGFyZSBub3QgbW9kaWZ5aW5nIGFueSBkYXRhIHN0cnVjdHVyZXMgcGFzc2VkIHRvIHVzZXIgc3BhY2UuIEFuZCBmaW5hbGx5LCBzdGFuZGFyZCBuZXRsaW5rIGl0ZXJhdGlvbiBhbmQgc3lzY3RsIGJvdW5kcyBhcmUgaGFuZGxlZCwgc28gdGhlcmUgYXJlIG5vIGJ1Z3MuXG5cbk15IGNvbmNsdXNpb24gaXM6ICoqTmVlZHNLTVNBTiA9IGZhbHNlKiouIFRoZSBwYXRjaCBtb2RpZmllcyBleGlzdGluZyBuZXRsaW5rIGludGVyYWN0aW9ucywgYnV0IGl0IGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgYXJlYXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLCBjb250cm9sIGZsb3cgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YWx1ZXMsIHVuc2FmZSBkYXRhIHN0cnVjdHVyZSBtYW5pcHVsYXRpb24sIG9yIGFueSBuZXcgYm91bmRzLWNoZWNrIHJlbGF0ZWQgaXNzdWVzLiBUaGlzIGlzIHB1cmVseSBhIGJ1ZyBmaXggYW5kIGltcHJvdmVtZW50IHRvIGFuIGV4aXN0aW5nLCBzYWZlIGNvZGUgcGF0aCwgZnJvbSBhIEtNU0FOIHBlcnNwZWN0aXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjUwLCJPdXRwdXRUb2tlbnMiOjI0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkzMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjE1OjAwLjY2MTU5NjY3MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGlucHV0IHZhbGlkYXRpb24gYW5kIG5ldGxpbmsgZHVtcCByZXN1bXB0aW9uIGxvZ2ljIGluIG5ldC9jb3JlL25laWdoYm91ci5jOlxcbjEuIEl0IGFkZHMgYW4gdXBwZXIgYm91bmQgdmFsaWRhdGlvbiAoYE5UQkxfUEFSTV9NU19NQVhgKSBmb3IgYE5EVFBBX0lOVEVSVkFMX1BST0JFX1RJTUVfTVNgIHZpYSBuZXRsaW5rIHBvbGljeSBhbmQgc3lzY3RsIChgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlYCkuXFxuMi4gSXQgZml4ZXMgdGFibGUgYW5kIHBhcmFtZXRlciBkdW1waW5nIGluIGBuZWlnaHRibF9kdW1wX2luZm9gIGFjcm9zcyBtdWx0aS1wYXJ0IG5ldGxpbmsgZHVtcHMgYnkgdHJhY2tpbmcgYGRlZmF1bHRfc2tpcGAgaW4gYGNiLVxcdTAwM2VhcmdzWzJdYCwgcHJvcGVybHkgY29udGludWluZyBsaXN0IGl0ZXJhdGlvbiwgYW5kIHNraXBwaW5nIGBibGFja2hvbGVfbmV0ZGV2YC5cXG5cXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgYWxsb2NhdGUgb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBub3IgZG8gdGhleSBleHBvc2UgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZyBvciBidWZmZXIgY29udGVudHMgdG8gdXNlcnNwYWNlLiBBbGwgdmFyaWFibGVzIChgbWluYCwgYG1heGAsIGBkZWZhdWx0X3NraXBgLCBgY2ItXFx1MDAzZWFyZ3NgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQuIEFueSBwb3RlbnRpYWwgbG9naWMgZXJyb3JzIG9yIG91dC1vZi1ib3VuZHMgaXNzdWVzIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vZGVidWdnaW5nIGJ1aWxkcy4gSGVuY2UsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBpbnB1dCB2YWxpZGF0aW9uIGFuZCBuZXRsaW5rIGR1bXAgcmVzdW1wdGlvbiBsb2dpYyBpbiBuZXQvY29yZS9uZWlnaGJvdXIuYzpcXG4xLiBJdCBhZGRzIGFuIHVwcGVyIGJvdW5kIHZhbGlkYXRpb24gKGBOVEJMX1BBUk1fTVNfTUFYYCkgZm9yIGBORFRQQV9JTlRFUlZBTF9QUk9CRV9USU1FX01TYCB2aWEgbmV0bGluayBwb2xpY3kgYW5kIHN5c2N0bCAoYG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZWApLlxcbjIuIEl0IGZpeGVzIHRhYmxlIGFuZCBwYXJhbWV0ZXIgZHVtcGluZyBpbiBgbmVpZ2h0YmxfZHVtcF9pbmZvYCBhY3Jvc3MgbXVsdGktcGFydCBuZXRsaW5rIGR1bXBzIGJ5IHRyYWNraW5nIGBkZWZhdWx0X3NraXBgIGluIGBjYi1cXHUwMDNlYXJnc1syXWAsIHByb3Blcmx5IGNvbnRpbnVpbmcgbGlzdCBpdGVyYXRpb24sIGFuZCBza2lwcGluZyBgYmxhY2tob2xlX25ldGRldmAuXFxuXFxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgbm9yIGRvIHRoZXkgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmcgb3IgYnVmZmVyIGNvbnRlbnRzIHRvIHVzZXJzcGFjZS4gQWxsIHZhcmlhYmxlcyAoYG1pbmAsIGBtYXhgLCBgZGVmYXVsdF9za2lwYCwgYGNiLVxcdTAwM2VhcmdzYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBBbnkgcG90ZW50aWFsIGxvZ2ljIGVycm9ycyBvciBvdXQtb2YtYm91bmRzIGlzc3VlcyBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL2RlYnVnZ2luZyBidWlsZHMuIEhlbmNlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9mtbn[1] Phase: Succeeded StartedAt: 2026-09-08 02:15:11 +0000 UTC FinishedAt: 2026-09-08 02:15:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mtbn[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-08 02:15:11 +0000 UTC FinishedAt: 2026-09-08 02:15:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mtbn[2] Phase: Succeeded StartedAt: 2026-09-08 02:15:11 +0000 UTC FinishedAt: 2026-09-08 05:52:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mtbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"515cc98b-5a85-4bc3-b743-5f6faac1fb5d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-08 02:15:11 +0000 UTC FinishedAt: 2026-09-08 05:52:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"515cc98b-5a85-4bc3-b743-5f6faac1fb5d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow9mtbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"515cc98b-5a85-4bc3-b743-5f6faac1fb5d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-08 02:15:11 +0000 UTC FinishedAt: 2026-09-08 02:15:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mtbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"515cc98b-5a85-4bc3-b743-5f6faac1fb5d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-08 02:15:11 +0000 UTC FinishedAt: 2026-09-08 02:15:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9mtbn/series-workflow9mtbn-convert-artifact-3555723322/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9mtbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"515cc98b-5a85-4bc3-b743-5f6faac1fb5d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-08 02:15:22 +0000 UTC FinishedAt: 2026-09-08 02:31:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mtbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"515cc98b-5a85-4bc3-b743-5f6faac1fb5d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-08 02:15:22 +0000 UTC FinishedAt: 2026-09-08 02:31:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*9deb1738-c9f8-4fa1-adaf-88ba79eda577,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9mtbn/series-workflow9mtbn-convert-artifact-3555723322/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "c5f8d9cf-325b-4abc-bedc-f835b77f32b3", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9mtbn/series-workflow9mtbn-build-action-237845992/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9mtbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"515cc98b-5a85-4bc3-b743-5f6faac1fb5d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-08 02:15:22 +0000 UTC FinishedAt: 2026-09-08 02:31:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*9deb1738-c9f8-4fa1-adaf-88ba79eda577,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9mtbn/series-workflow9mtbn-convert-artifact-3555723322/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "c5f8d9cf-325b-4abc-bedc-f835b77f32b3", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9mtbn/series-workflow9mtbn-build-action-237845992/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9mtbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"515cc98b-5a85-4bc3-b743-5f6faac1fb5d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-08 02:31:18 +0000 UTC FinishedAt: 2026-09-08 02:31:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mtbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"515cc98b-5a85-4bc3-b743-5f6faac1fb5d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-08 02:31:18 +0000 UTC FinishedAt: 2026-09-08 02:31:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mtbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"515cc98b-5a85-4bc3-b743-5f6faac1fb5d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-08 02:31:18 +0000 UTC FinishedAt: 2026-09-08 02:31:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mtbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"515cc98b-5a85-4bc3-b743-5f6faac1fb5d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-08 02:31:18 +0000 UTC FinishedAt: 2026-09-08 02:31:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"515cc98b-5a85-4bc3-b743-5f6faac1fb5d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9mtbn/series-workflow9mtbn-convert-artifact-305400469/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9mtbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"515cc98b-5a85-4bc3-b743-5f6faac1fb5d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-08 02:31:28 +0000 UTC FinishedAt: 2026-09-08 02:33:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mtbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"515cc98b-5a85-4bc3-b743-5f6faac1fb5d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-08 02:31:28 +0000 UTC FinishedAt: 2026-09-08 02:33:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c5f8d9cf-325b-4abc-bedc-f835b77f32b3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9mtbn/series-workflow9mtbn-build-action-237845992/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflow9mtbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"515cc98b-5a85-4bc3-b743-5f6faac1fb5d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-08 02:33:19 +0000 UTC FinishedAt: 2026-09-08 02:33:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mtbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"515cc98b-5a85-4bc3-b743-5f6faac1fb5d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-08 02:33:19 +0000 UTC FinishedAt: 2026-09-08 02:33:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mtbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"515cc98b-5a85-4bc3-b743-5f6faac1fb5d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-08 02:33:19 +0000 UTC FinishedAt: 2026-09-08 02:49:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mtbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"515cc98b-5a85-4bc3-b743-5f6faac1fb5d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-08 02:33:19 +0000 UTC FinishedAt: 2026-09-08 02:49:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*9deb1738-c9f8-4fa1-adaf-88ba79eda577,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9mtbn/series-workflow9mtbn-convert-artifact-305400469/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "f6e642c7-21e4-4195-98fe-ded8964581a0", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9mtbn/series-workflow9mtbn-build-action-419606817/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9mtbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"515cc98b-5a85-4bc3-b743-5f6faac1fb5d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-08 02:33:19 +0000 UTC FinishedAt: 2026-09-08 02:49:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*9deb1738-c9f8-4fa1-adaf-88ba79eda577,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9mtbn/series-workflow9mtbn-convert-artifact-305400469/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "f6e642c7-21e4-4195-98fe-ded8964581a0", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9mtbn/series-workflow9mtbn-build-action-419606817/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9mtbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"515cc98b-5a85-4bc3-b743-5f6faac1fb5d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-08 02:49:11 +0000 UTC FinishedAt: 2026-09-08 02:49:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mtbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"515cc98b-5a85-4bc3-b743-5f6faac1fb5d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-08 02:49:11 +0000 UTC FinishedAt: 2026-09-08 02:49:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mtbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"515cc98b-5a85-4bc3-b743-5f6faac1fb5d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-08 02:49:11 +0000 UTC FinishedAt: 2026-09-08 02:51:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mtbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"515cc98b-5a85-4bc3-b743-5f6faac1fb5d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-08 02:49:11 +0000 UTC FinishedAt: 2026-09-08 02:51:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f6e642c7-21e4-4195-98fe-ded8964581a0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9mtbn/series-workflow9mtbn-build-action-419606817/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflow9mtbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"515cc98b-5a85-4bc3-b743-5f6faac1fb5d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-08 02:51:12 +0000 UTC FinishedAt: 2026-09-08 05:52:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mtbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"515cc98b-5a85-4bc3-b743-5f6faac1fb5d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-08 02:51:12 +0000 UTC FinishedAt: 2026-09-08 05:52:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*c5f8d9cf-325b-4abc-bedc-f835b77f32b3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f6e642c7-21e4-4195-98fe-ded8964581a0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9mtbn/series-workflow9mtbn-build-action-237845992/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9mtbn/series-workflow9mtbn-build-action-419606817/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow9mtbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"515cc98b-5a85-4bc3-b743-5f6faac1fb5d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-08 02:51:12 +0000 UTC FinishedAt: 2026-09-08 02:51:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mtbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"515cc98b-5a85-4bc3-b743-5f6faac1fb5d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-08 02:51:12 +0000 UTC FinishedAt: 2026-09-08 02:51:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9mtbn/series-workflow9mtbn-convert-artifact-1907503482/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9mtbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"515cc98b-5a85-4bc3-b743-5f6faac1fb5d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-08 02:51:12 +0000 UTC FinishedAt: 2026-09-08 02:51:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mtbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"515cc98b-5a85-4bc3-b743-5f6faac1fb5d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-08 02:51:12 +0000 UTC FinishedAt: 2026-09-08 02:51:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mtbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"515cc98b-5a85-4bc3-b743-5f6faac1fb5d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-08 02:51:12 +0000 UTC FinishedAt: 2026-09-08 02:51:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mtbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"515cc98b-5a85-4bc3-b743-5f6faac1fb5d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-08 02:51:22 +0000 UTC FinishedAt: 2026-09-08 05:52:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mtbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"515cc98b-5a85-4bc3-b743-5f6faac1fb5d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-08 02:51:22 +0000 UTC FinishedAt: 2026-09-08 05:52:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c5f8d9cf-325b-4abc-bedc-f835b77f32b3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f6e642c7-21e4-4195-98fe-ded8964581a0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9mtbn/series-workflow9mtbn-build-action-237845992/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9mtbn/series-workflow9mtbn-build-action-419606817/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9mtbn/series-workflow9mtbn-convert-artifact-1907503482/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}