Name: series-workflowv79sr Phase: Succeeded StartedAt: 2026-07-31 13:00:42 +0000 UTC FinishedAt: 2026-07-31 16:52:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv79sr[0] Phase: Succeeded StartedAt: 2026-07-31 13:00:42 +0000 UTC FinishedAt: 2026-07-31 13:05:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv79sr[0].run-triage Phase: Succeeded StartedAt: 2026-07-31 13:00:42 +0000 UTC FinishedAt: 2026-07-31 13:05:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "89d8006259b81dd25c962f6cc8d7ab268d6ea426", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "RDS", "RDS_RDMA", "INFINIBAND", "INFINIBAND_ADDR_TRANS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "89d8006259b81dd25c962f6cc8d7ab268d6ea426", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "RDS", "RDS_RDMA", "INFINIBAND", "INFINIBAND_ADDR_TRANS" ], "series_id": "72bebfc3-471b-4386-871c-5d7a54c5e2ec" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rds_sendmsg", "rds_message_put", "rds_cmsg_rdma_args", "rds_cmsg_atomic", "rds_rdma_free_op", "rds_atomic_free_op", "rds_rdma_op_unpin_pages", "rds_atomic_op_unpin_page", "__rds_put_mr_final", "rds_get_mr", "rds_free_mr", "rds_send_xmit", "__rds_ib_teardown_mr", "rds_rdma_unuse" ], "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+CgkJCTx0ZD4yMDI2LzA3LzMxIDEzOjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JEUyYjMzQ7LAogICAgJiMzNDtSRFNfUkRNQSYjMzQ7LAogICAgJiMzNDtJTkZJTklCQU5EJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkRfQUREUl9UUkFOUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Jkc19zZW5kbXNnJiMzNDssCiAgICAmIzM0O3Jkc19tZXNzYWdlX3B1dCYjMzQ7LAogICAgJiMzNDtyZHNfY21zZ19yZG1hX2FyZ3MmIzM0OywKICAgICYjMzQ7cmRzX2Ntc2dfYXRvbWljJiMzNDssCiAgICAmIzM0O3Jkc19yZG1hX2ZyZWVfb3AmIzM0OywKICAgICYjMzQ7cmRzX2F0b21pY19mcmVlX29wJiMzNDssCiAgICAmIzM0O3Jkc19yZG1hX29wX3VucGluX3BhZ2VzJiMzNDssCiAgICAmIzM0O3Jkc19hdG9taWNfb3BfdW5waW5fcGFnZSYjMzQ7LAogICAgJiMzNDtfX3Jkc19wdXRfbXJfZmluYWwmIzM0OywKICAgICYjMzQ7cmRzX2dldF9tciYjMzQ7LAogICAgJiMzNDtyZHNfZnJlZV9tciYjMzQ7LAogICAgJiMzNDtyZHNfc2VuZF94bWl0JiMzNDssCiAgICAmIzM0O19fcmRzX2liX3RlYXJkb3duX21yJiMzNDssCiAgICAmIzM0O3Jkc19yZG1hX3VudXNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSRFMgKFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMpIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGhvdyBtZW1vcnkgcmVnaW9ucyAoTVIpIGFuZCBSRE1BIG9wZXJhdGlvbnMgYXJlIGhhbmRsZWQuIEl0IGRlZmVycyB0aGUgdW5waW5uaW5nIG9mIHVzZXIgcGFnZXMgdG8gYSB3b3JrcXVldWUgaWYgdGhlIGZpbmFsIHB1dCBoYXBwZW5zIGluIGF0b21pYyBjb250ZXh0LCBmaXhpbmcgcG90ZW50aWFsIHNsZWVwLWluLWF0b21pYyBidWdzLiBJdCBhbHNvIGFkZHMgYSBzb2NrZXQgcmVmZXJlbmNlIGhvbGQgd2hlbiBhbiBNUiBpcyBjcmVhdGVkIHRvIGVuc3VyZSB0aGUgc29ja2V0IG91dGxpdmVzIHRoZSBNUiwgZml4aW5nIGEgdXNlLWFmdGVyLWZyZWUuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBSRFMgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTM6MDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3OWE2M2Y2MjJjNWRjMTVlMThiY2ZmNTE4OTZlNjkzNjEwNWQ1ZTg5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMzEgMTM6MDI6MjggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYl9yZG1hLmMgYi9uZXQvcmRzL2liX3JkbWEuY1xuaW5kZXggOTU5NGVhMjQ1ZjdmZS4uZGI3ZTkyZTdiZDI5ZiAxMDA2NDRcbi0tLSBhL25ldC9yZHMvaWJfcmRtYS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL2liX3JkbWEuY1xuQEAgLTI1MSw5ICYjNDM7MjUxLDcgQEAgdm9pZCBfX3Jkc19pYl90ZWFyZG93bl9tcihzdHJ1Y3QgcmRzX2liX21yICppYm1yKVxuIFxuIFx0XHRcdC8qIEZJWE1FIHdlIG5lZWQgYSB3YXkgdG8gdGVsbCBhIHIvdyBNUlxuIFx0XHRcdCAqIGZyb20gYSByL28gTVIgKi9cbi1cdFx0XHRXQVJOX09OKCFwYWdlLVx1MDAzZW1hcHBpbmcgXHUwMDI2XHUwMDI2IGlycXNfZGlzYWJsZWQoKSk7XG4tXHRcdFx0c2V0X3BhZ2VfZGlydHkocGFnZSk7XG4tXHRcdFx0cHV0X3BhZ2UocGFnZSk7XG4mIzQzO1x0XHRcdHVucGluX3VzZXJfcGFnZXNfZGlydHlfbG9jayhcdTAwMjZwYWdlLCAxLCB0cnVlKTtcbiBcdFx0fVxuIFx0XHRrZnJlZShpYm1yLVx1MDAzZXNnKTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvcmRzL21lc3NhZ2UuYyBiL25ldC9yZHMvbWVzc2FnZS5jXG5pbmRleCA3ZmViMGViNjUzN2RiLi5mMjVmMjU5MjU4NmY3IDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9tZXNzYWdlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvbWVzc2FnZS5jXG5AQCAtMTgyLDYgJiM0MzsxODIsMTkgQEAgc3RhdGljIHZvaWQgcmRzX21lc3NhZ2VfcHVyZ2Uoc3RydWN0IHJkc19tZXNzYWdlICpybSlcbiBcdFx0a3JlZl9wdXQoXHUwMDI2cm0tXHUwMDNlYXRvbWljLm9wX3JkbWFfbXItXHUwMDNlcl9rcmVmLCBfX3Jkc19wdXRfbXJfZmluYWwpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgcmRzX21lc3NhZ2VfdW5waW5fd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByZHNfbWVzc2FnZSAqcm0gPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJkc19tZXNzYWdlLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgbV91bnBpbl93b3JrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJtLVx1MDAzZXJkbWEub3BfdW5waW5fZGVmZXJyZWQpXG4mIzQzO1x0XHRyZHNfcmRtYV9vcF91bnBpbl9wYWdlcyhcdTAwMjZybS1cdTAwM2VyZG1hKTtcbiYjNDM7XHRpZiAocm0tXHUwMDNlYXRvbWljLm9wX3VucGluX2RlZmVycmVkKVxuJiM0MztcdFx0cmRzX2F0b21pY19vcF91bnBpbl9wYWdlKFx1MDAyNnJtLVx1MDAzZWF0b21pYyk7XG4mIzQzO1xuJiM0MztcdGtmcmVlKHJtKTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIHJkc19tZXNzYWdlX3B1dChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKVxuIHtcbiBcdHJkc2RlYnVnKFwmIzM0O3B1dCBybSAlcCByZWYgJWRcXG5cJiMzNDssIHJtLCByZWZjb3VudF9yZWFkKFx1MDAyNnJtLVx1MDAzZW1fcmVmY291bnQpKTtcbkBAIC0xODksOCAmIzQzOzIwMiwyMSBAQCB2b2lkIHJkc19tZXNzYWdlX3B1dChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKVxuIFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZybS1cdTAwM2VtX3JlZmNvdW50KSkge1xuIFx0XHRCVUdfT04oIWxpc3RfZW1wdHkoXHUwMDI2cm0tXHUwMDNlbV9zb2NrX2l0ZW0pKTtcbiBcdFx0QlVHX09OKCFsaXN0X2VtcHR5KFx1MDAyNnJtLVx1MDAzZW1fY29ubl9pdGVtKSk7XG4mIzQzO1xuIFx0XHRyZHNfbWVzc2FnZV9wdXJnZShybSk7XG4gXG4mIzQzO1x0XHQvKiBBIGZpbmFsIHB1dCBpbiBhdG9taWMgY29udGV4dCBjYW5ub3QgZGlydHkgdGhlIG9wcyYjMzk7XG4mIzQzO1x0XHQgKiB1c2VyIHBhZ2VzIG9uIHVucGluLCBzbyByZHNfcmRtYV9mcmVlX29wKCkgYW5kXG4mIzQzO1x0XHQgKiByZHNfYXRvbWljX2ZyZWVfb3AoKSBkZWZlcnJlZCBpdC4gIEZpbmlzaCB0aGUgdW5waW4sXG4mIzQzO1x0XHQgKiBhbmQgdGhlIGZyZWUsIGZyb20gcHJvY2VzcyBjb250ZXh0LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAocm0tXHUwMDNlcmRtYS5vcF91bnBpbl9kZWZlcnJlZCB8fFxuJiM0MztcdFx0ICAgIHJtLVx1MDAzZWF0b21pYy5vcF91bnBpbl9kZWZlcnJlZCkge1xuJiM0MztcdFx0XHRJTklUX1dPUksoXHUwMDI2cm0tXHUwMDNlbV91bnBpbl93b3JrLCByZHNfbWVzc2FnZV91bnBpbl93b3JrZXIpO1xuJiM0MztcdFx0XHRxdWV1ZV93b3JrKHJkc193cSwgXHUwMDI2cm0tXHUwMDNlbV91bnBpbl93b3JrKTtcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0a2ZyZWUocm0pO1xuIFx0fVxuIH1cbmRpZmYgLS1naXQgYS9uZXQvcmRzL3JkbWEuYyBiL25ldC9yZHMvcmRtYS5jXG5pbmRleCA2MWZiNmU0NTI4MWJmLi4wNzgwOTBkMjkyZmEzIDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9yZG1hLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvcmRtYS5jXG5AQCAtMTE3LDYgJiM0MzsxMTcsNyBAQCB2b2lkIF9fcmRzX3B1dF9tcl9maW5hbChzdHJ1Y3Qga3JlZiAqa3JlZilcbiBcdHN0cnVjdCByZHNfbXIgKm1yID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCByZHNfbXIsIHJfa3JlZik7XG4gXG4gXHRyZHNfZGVzdHJveV9tcihtcik7XG4mIzQzO1x0c29ja19wdXQocmRzX3JzX3RvX3NrKG1yLVx1MDAzZXJfc29jaykpO1xuIFx0a2ZyZWUobXIpO1xuIH1cbiBcbkBAIC0yNDMsNyAmIzQzOzI0NCwxMSBAQCBzdGF0aWMgaW50IF9fcmRzX3JkbWFfbWFwKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfZ2V0X21yX2FyZ3MgKmFyZ3MsXG4gXHRrcmVmX2luaXQoXHUwMDI2bXItXHUwMDNlcl9rcmVmKTtcbiBcdFJCX0NMRUFSX05PREUoXHUwMDI2bXItXHUwMDNlcl9yYl9ub2RlKTtcbiBcdG1yLVx1MDAzZXJfdHJhbnMgPSBycy1cdTAwM2Vyc190cmFuc3BvcnQ7XG4mIzQzO1x0LyogVGhlIE1SIGNhbiBvdXRsaXZlIGl0cyBzb2NrZXQ6IGEgc29ja2V0IHJlZmVyZW5jZSBpcyBoZWxkXG4mIzQzO1x0ICogdW50aWwgdGhlIGZpbmFsIGtyZWYgaXMgZHJvcHBlZCBpbiBfX3Jkc19wdXRfbXJfZmluYWwoKS5cbiYjNDM7XHQgKi9cbiBcdG1yLVx1MDAzZXJfc29jayA9IHJzO1xuJiM0MztcdHNvY2tfaG9sZChyZHNfcnNfdG9fc2socnMpKTtcbiBcbiBcdGlmIChhcmdzLVx1MDAzZWZsYWdzIFx1MDAyNiBSRFNfUkRNQV9VU0VfT05DRSlcbiBcdFx0bXItXHUwMDNlcl91c2Vfb25jZSA9IDE7XG5AQCAtNDgzLDIyICYjNDM7NDg4LDM2IEBAIHZvaWQgcmRzX3JkbWFfdW51c2Uoc3RydWN0IHJkc19zb2NrICpycywgdTMyIHJfa2V5LCBpbnQgZm9yY2UpXG4gXHRcdGtyZWZfcHV0KFx1MDAyNm1yLVx1MDAzZXJfa3JlZiwgX19yZHNfcHV0X21yX2ZpbmFsKTtcbiB9XG4gXG4tdm9pZCByZHNfcmRtYV9mcmVlX29wKHN0cnVjdCBybV9yZG1hX29wICpybylcbiYjNDM7dm9pZCByZHNfcmRtYV9vcF91bnBpbl9wYWdlcyhzdHJ1Y3Qgcm1fcmRtYV9vcCAqcm8pXG4ge1xuIFx0dW5zaWduZWQgaW50IGk7XG4gXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgcm8tXHUwMDNlb3BfbmVudHM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHNnX3BhZ2UoXHUwMDI2cm8tXHUwMDNlb3Bfc2dbaV0pO1xuJiM0MztcbiYjNDM7XHRcdC8qIE1hcmsgcGFnZSBkaXJ0eSBpZiBpdCB3YXMgcG9zc2libHkgbW9kaWZpZWQsIHdoaWNoXG4mIzQzO1x0XHQgKiBpcyB0aGUgY2FzZSBmb3IgYSBSRE1BX1JFQUQgd2hpY2ggY29waWVzIGZyb20gcmVtb3RlXG4mIzQzO1x0XHQgKiB0byBsb2NhbCBtZW1vcnlcbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0dW5waW5fdXNlcl9wYWdlc19kaXJ0eV9sb2NrKFx1MDAyNnBhZ2UsIDEsICFyby1cdTAwM2VvcF93cml0ZSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHJkc19yZG1hX2ZyZWVfb3Aoc3RydWN0IHJtX3JkbWFfb3AgKnJvKVxuJiM0Mzt7XG4gXHRpZiAocm8tXHUwMDNlb3Bfb2RwX21yKSB7XG4gXHRcdGtyZWZfcHV0KFx1MDAyNnJvLVx1MDAzZW9wX29kcF9tci1cdTAwM2VyX2tyZWYsIF9fcmRzX3B1dF9tcl9maW5hbCk7XG4mIzQzO1x0fSBlbHNlIGlmIChpbl90YXNrKCkgfHwgcm8tXHUwMDNlb3Bfd3JpdGUpIHtcbiYjNDM7XHRcdC8qIEFuIFJETUEgd3JpdGUmIzM5O3MgcGFnZXMgYXJlIG9ubHkgcmVhZCBieSB0aGUgcmVtb3RlXG4mIzQzO1x0XHQgKiBzaWRlOyB1bnBpbm5pbmcgd2l0aG91dCBkaXJ0eWluZyBkb2VzIG5vdCBzbGVlcC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cmRzX3JkbWFfb3BfdW5waW5fcGFnZXMocm8pO1xuIFx0fSBlbHNlIHtcbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgcm8tXHUwMDNlb3BfbmVudHM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBzZ19wYWdlKFx1MDAyNnJvLVx1MDAzZW9wX3NnW2ldKTtcbi1cbi1cdFx0XHQvKiBNYXJrIHBhZ2UgZGlydHkgaWYgaXQgd2FzIHBvc3NpYmx5IG1vZGlmaWVkLCB3aGljaFxuLVx0XHRcdCAqIGlzIHRoZSBjYXNlIGZvciBhIFJETUFfUkVBRCB3aGljaCBjb3BpZXMgZnJvbSByZW1vdGVcbi1cdFx0XHQgKiB0byBsb2NhbCBtZW1vcnlcbi1cdFx0XHQgKi9cbi1cdFx0XHR1bnBpbl91c2VyX3BhZ2VzX2RpcnR5X2xvY2soXHUwMDI2cGFnZSwgMSwgIXJvLVx1MDAzZW9wX3dyaXRlKTtcbi1cdFx0fVxuJiM0MztcdFx0LyogRGlydHlpbmcgdGhlIHBhZ2VzIG9uIHVucGluIGNhbiBzbGVlcDsgbGVhdmUgdGhlbVxuJiM0MztcdFx0ICogcGlubmVkIGFuZCBoYXZlIHJkc19tZXNzYWdlX3B1dCgpIGZpbmlzaCB0aGUgdW5waW5cbiYjNDM7XHRcdCAqIGZyb20gcHJvY2VzcyBjb250ZXh0LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyby1cdTAwM2VvcF91bnBpbl9kZWZlcnJlZCA9IDE7XG4gXHR9XG4gXG4gXHRrZnJlZShyby1cdTAwM2VvcF9ub3RpZmllcik7XG5AQCAtNTA3LDcgJiM0Mzs1MjYsNyBAQCB2b2lkIHJkc19yZG1hX2ZyZWVfb3Aoc3RydWN0IHJtX3JkbWFfb3AgKnJvKVxuIFx0cm8tXHUwMDNlb3Bfb2RwX21yID0gTlVMTDtcbiB9XG4gXG4tdm9pZCByZHNfYXRvbWljX2ZyZWVfb3Aoc3RydWN0IHJtX2F0b21pY19vcCAqYW8pXG4mIzQzO3ZvaWQgcmRzX2F0b21pY19vcF91bnBpbl9wYWdlKHN0cnVjdCBybV9hdG9taWNfb3AgKmFvKVxuIHtcbiBcdHN0cnVjdCBwYWdlICpwYWdlID0gc2dfcGFnZShhby1cdTAwM2VvcF9zZyk7XG4gXG5AQCAtNTE1LDYgJiM0Mzs1MzQsMTkgQEAgdm9pZCByZHNfYXRvbWljX2ZyZWVfb3Aoc3RydWN0IHJtX2F0b21pY19vcCAqYW8pXG4gXHQgKiBpcyB0aGUgY2FzZSBmb3IgYSBSRE1BX1JFQUQgd2hpY2ggY29waWVzIGZyb20gcmVtb3RlXG4gXHQgKiB0byBsb2NhbCBtZW1vcnkgKi9cbiBcdHVucGluX3VzZXJfcGFnZXNfZGlydHlfbG9jayhcdTAwMjZwYWdlLCAxLCB0cnVlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCByZHNfYXRvbWljX2ZyZWVfb3Aoc3RydWN0IHJtX2F0b21pY19vcCAqYW8pXG4mIzQzO3tcbiYjNDM7XHRpZiAoaW5fdGFzaygpKSB7XG4mIzQzO1x0XHRyZHNfYXRvbWljX29wX3VucGluX3BhZ2UoYW8pO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKiBEaXJ0eWluZyB0aGUgcGFnZSBvbiB1bnBpbiBjYW4gc2xlZXA7IGxlYXZlIGl0XG4mIzQzO1x0XHQgKiBwaW5uZWQgYW5kIGhhdmUgcmRzX21lc3NhZ2VfcHV0KCkgZmluaXNoIHRoZSB1bnBpblxuJiM0MztcdFx0ICogZnJvbSBwcm9jZXNzIGNvbnRleHQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGFvLVx1MDAzZW9wX3VucGluX2RlZmVycmVkID0gMTtcbiYjNDM7XHR9XG4gXG4gXHRrZnJlZShhby1cdTAwM2VvcF9ub3RpZmllcik7XG4gXHRhby1cdTAwM2VvcF9ub3RpZmllciA9IE5VTEw7XG5AQCAtNzMyLDcgJiM0Mzs3NjQsMTIgQEAgaW50IHJkc19jbXNnX3JkbWFfYXJncyhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLFxuIFx0XHRcdFJCX0NMRUFSX05PREUoXHUwMDI2bG9jYWxfb2RwX21yLVx1MDAzZXJfcmJfbm9kZSk7XG4gXHRcdFx0a3JlZl9pbml0KFx1MDAyNmxvY2FsX29kcF9tci1cdTAwM2VyX2tyZWYpO1xuIFx0XHRcdGxvY2FsX29kcF9tci1cdTAwM2VyX3RyYW5zID0gcnMtXHUwMDNlcnNfdHJhbnNwb3J0O1xuJiM0MztcdFx0XHQvKiBUaGUgTVIgY2FuIG91dGxpdmUgaXRzIHNvY2tldDogYSBzb2NrZXRcbiYjNDM7XHRcdFx0ICogcmVmZXJlbmNlIGlzIGhlbGQgdW50aWwgdGhlIGZpbmFsIGtyZWYgaXNcbiYjNDM7XHRcdFx0ICogZHJvcHBlZCBpbiBfX3Jkc19wdXRfbXJfZmluYWwoKS5cbiYjNDM7XHRcdFx0ICovXG4gXHRcdFx0bG9jYWxfb2RwX21yLVx1MDAzZXJfc29jayA9IHJzO1xuJiM0MztcdFx0XHRzb2NrX2hvbGQocmRzX3JzX3RvX3NrKHJzKSk7XG4gXHRcdFx0bG9jYWxfb2RwX21yLVx1MDAzZXJfdHJhbnNfcHJpdmF0ZSA9XG4gXHRcdFx0XHRycy1cdTAwM2Vyc190cmFuc3BvcnQtXHUwMDNlZ2V0X21yKFxuIFx0XHRcdFx0XHROVUxMLCAwLCBycywgXHUwMDI2bG9jYWxfb2RwX21yLVx1MDAzZXJfa2V5LCBOVUxMLFxuQEAgLTc0MSw3ICYjNDM7Nzc4LDkgQEAgaW50IHJkc19jbXNnX3JkbWFfYXJncyhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLFxuIFx0XHRcdFx0cmV0ID0gUFRSX0VSUihsb2NhbF9vZHBfbXItXHUwMDNlcl90cmFuc19wcml2YXRlKTtcbiBcdFx0XHRcdHJkc2RlYnVnKFwmIzM0O2dldF9tciByZXQgJWQgJXBcXFwmIzM0O1wmIzM0OywgcmV0LFxuIFx0XHRcdFx0XHQgbG9jYWxfb2RwX21yLVx1MDAzZXJfdHJhbnNfcHJpdmF0ZSk7XG4tXHRcdFx0XHRrZnJlZShsb2NhbF9vZHBfbXIpO1xuJiM0MztcdFx0XHRcdGxvY2FsX29kcF9tci1cdTAwM2VyX3RyYW5zX3ByaXZhdGUgPSBOVUxMO1xuJiM0MztcdFx0XHRcdGtyZWZfcHV0KFx1MDAyNmxvY2FsX29kcF9tci1cdTAwM2VyX2tyZWYsXG4mIzQzO1x0XHRcdFx0XHQgX19yZHNfcHV0X21yX2ZpbmFsKTtcbiBcdFx0XHRcdHJldCA9IC1FT1BOT1RTVVBQO1xuIFx0XHRcdFx0Z290byBvdXRfcGFnZXM7XG4gXHRcdFx0fVxuZGlmZiAtLWdpdCBhL25ldC9yZHMvcmRzLmggYi9uZXQvcmRzL3Jkcy5oXG5pbmRleCA2ZTA3OTBlNGI1NzAzLi4yZGI0OTU3M2RhY2Q1IDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9yZHMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Jkcy9yZHMuaFxuQEAgLTMyMCw3ICYjNDM7MzIwLDEwIEBAIHN0cnVjdCByZHNfbXIge1xuIFx0dW5zaWduZWQgaW50XHRcdHJfaW52YWxpZGF0ZToxO1xuIFx0dW5zaWduZWQgaW50XHRcdHJfd3JpdGU6MTtcbiBcbi1cdHN0cnVjdCByZHNfc29ja1x0XHQqcl9zb2NrOyAvKiBiYWNrIHBvaW50ZXIgdG8gdGhlIHNvY2tldCB0aGF0IG93bnMgdXMgKi9cbiYjNDM7XHRzdHJ1Y3QgcmRzX3NvY2tcdFx0KnJfc29jazsgLyogc29ja2V0IHRoYXQgb3ducyB1czsgY291bnRlZFxuJiM0MztcdFx0XHRcdFx0ICAqIHJlZmVyZW5jZSwgZHJvcHBlZCBieVxuJiM0MztcdFx0XHRcdFx0ICAqIF9fcmRzX3B1dF9tcl9maW5hbCgpXG4mIzQzO1x0XHRcdFx0XHQgICovXG4gXHRzdHJ1Y3QgcmRzX3RyYW5zcG9ydFx0KnJfdHJhbnM7XG4gXHR2b2lkXHRcdFx0KnJfdHJhbnNfcHJpdmF0ZTtcbiB9O1xuQEAgLTQ0NSw2ICYjNDM7NDQ4LDEyIEBAIHN0cnVjdCByZHNfbWVzc2FnZSB7XG4gXG4gXHR2b2lkXHRcdFx0Km1fZmluYWxfb3A7XG4gXG4mIzQzO1x0LyogVW5waW5zIHRoZSBvcHMmIzM5OyB1c2VyIHBhZ2VzIGFuZCBmcmVlcyB0aGUgbWVzc2FnZSBmcm9tXG4mIzQzO1x0ICogcHJvY2VzcyBjb250ZXh0IHdoZW4gdGhlIGZpbmFsIHB1dCBoYXBwZW5zIGluIGF0b21pY1xuJiM0MztcdCAqIGNvbnRleHQ6IGRpcnR5aW5nIHRoZSBwYWdlcyBvbiB1bnBpbiBjYW4gc2xlZXAuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3RydWN0IHdvcmtfc3RydWN0XHRtX3VucGluX3dvcms7XG4mIzQzO1xuIFx0c3RydWN0IHtcbiBcdFx0c3RydWN0IHJtX2F0b21pY19vcCB7XG4gXHRcdFx0aW50XHRcdFx0b3BfdHlwZTtcbkBAIC00NjgsNiAmIzQzOzQ3Nyw3IEBAIHN0cnVjdCByZHNfbWVzc2FnZSB7XG4gXHRcdFx0dW5zaWduZWQgaW50XHRcdG9wX21hcHBlZDoxO1xuIFx0XHRcdHVuc2lnbmVkIGludFx0XHRvcF9zaWxlbnQ6MTtcbiBcdFx0XHR1bnNpZ25lZCBpbnRcdFx0b3BfYWN0aXZlOjE7XG4mIzQzO1x0XHRcdHVuc2lnbmVkIGludFx0XHRvcF91bnBpbl9kZWZlcnJlZDoxO1xuIFx0XHRcdHN0cnVjdCBzY2F0dGVybGlzdFx0Km9wX3NnO1xuIFx0XHRcdHN0cnVjdCByZHNfbm90aWZpZXJcdCpvcF9ub3RpZmllcjtcbiBcbkBAIC00ODMsNiAmIzQzOzQ5Myw3IEBAIHN0cnVjdCByZHNfbWVzc2FnZSB7XG4gXHRcdFx0dW5zaWduZWQgaW50XHRcdG9wX21hcHBlZDoxO1xuIFx0XHRcdHVuc2lnbmVkIGludFx0XHRvcF9zaWxlbnQ6MTtcbiBcdFx0XHR1bnNpZ25lZCBpbnRcdFx0b3BfYWN0aXZlOjE7XG4mIzQzO1x0XHRcdHVuc2lnbmVkIGludFx0XHRvcF91bnBpbl9kZWZlcnJlZDoxO1xuIFx0XHRcdHVuc2lnbmVkIGludFx0XHRvcF9ieXRlcztcbiBcdFx0XHR1bnNpZ25lZCBpbnRcdFx0b3BfbmVudHM7XG4gXHRcdFx0dW5zaWduZWQgaW50XHRcdG9wX2NvdW50O1xuQEAgLTk3Miw2ICYjNDM7OTgzLDggQEAgaW50IHJkc19jbXNnX3JkbWFfbWFwKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sXG4gXHRcdFx0ICBzdHJ1Y3QgY21zZ2hkciAqY21zZyk7XG4gdm9pZCByZHNfcmRtYV9mcmVlX29wKHN0cnVjdCBybV9yZG1hX29wICpybyk7XG4gdm9pZCByZHNfYXRvbWljX2ZyZWVfb3Aoc3RydWN0IHJtX2F0b21pY19vcCAqYW8pO1xuJiM0Mzt2b2lkIHJkc19yZG1hX29wX3VucGluX3BhZ2VzKHN0cnVjdCBybV9yZG1hX29wICpybyk7XG4mIzQzO3ZvaWQgcmRzX2F0b21pY19vcF91bnBpbl9wYWdlKHN0cnVjdCBybV9hdG9taWNfb3AgKmFvKTtcbiB2b2lkIHJkc19yZG1hX3NlbmRfY29tcGxldGUoc3RydWN0IHJkc19tZXNzYWdlICpybSwgaW50IHdjX3N0YXR1cyk7XG4gdm9pZCByZHNfYXRvbWljX3NlbmRfY29tcGxldGUoc3RydWN0IHJkc19tZXNzYWdlICpybSwgaW50IHdjX3N0YXR1cyk7XG4gaW50IHJkc19jbXNnX2F0b21pYyhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLFxuZGlmZiAtLWdpdCBhL25ldC9yZHMvc2VuZC5jIGIvbmV0L3Jkcy9zZW5kLmNcbmluZGV4IDY4YmUxYmYwZTBhZGYuLjdlNDhmNjRkZmFhNjcgMTAwNjQ0XG4tLS0gYS9uZXQvcmRzL3NlbmQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Jkcy9zZW5kLmNcbkBAIC0zMzksOSAmIzQzOzMzOSwyMSBAQCBpbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXG4gXHRcdFx0ICAgIChybS1cdTAwM2VyZG1hLm9wX2FjdGl2ZSBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICAgdGVzdF9iaXQoUkRTX01TR19SRVRSQU5TTUlUVEVELCBcdTAwMjZybS1cdTAwM2VtX2ZsYWdzKSkpIHtcbiBcdFx0XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmNwLVx1MDAzZWNwX2xvY2ssIGZsYWdzKTtcbi1cdFx0XHRcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUkRTX01TR19PTl9DT05OLCBcdTAwMjZybS1cdTAwM2VtX2ZsYWdzKSlcbi1cdFx0XHRcdFx0bGlzdF9tb3ZlKFx1MDAyNnJtLVx1MDAzZW1fY29ubl9pdGVtLCBcdTAwMjZ0b19iZV9kcm9wcGVkKTtcbi1cdFx0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Y3AtXHUwMDNlY3BfbG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0XHRcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUkRTX01TR19PTl9DT05OLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgXHUwMDI2cm0tXHUwMDNlbV9mbGFncykpIHtcbiYjNDM7XHRcdFx0XHRcdC8qIG91ciByZWYgaXMgcHV0IGFmdGVyIHRoZSBiYXRjaCAqL1xuJiM0MztcdFx0XHRcdFx0bGlzdF9tb3ZlKFx1MDAyNnJtLVx1MDAzZW1fY29ubl9pdGVtLFxuJiM0MztcdFx0XHRcdFx0XHQgIFx1MDAyNnRvX2JlX2Ryb3BwZWQpO1xuJiM0MztcdFx0XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZjcC1cdTAwM2VjcF9sb2NrLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICAgICBmbGFncyk7XG4mIzQzO1x0XHRcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0XHRcdC8qIGFscmVhZHkgb2ZmIHRoZSBjb25uIGxpc3Q7IGRyb3BcbiYjNDM7XHRcdFx0XHRcdCAqIHRoZSByZWYgdGFrZW4gYWJvdmUgb3Vyc2VsdmVzXG4mIzQzO1x0XHRcdFx0XHQgKi9cbiYjNDM7XHRcdFx0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Y3AtXHUwMDNlY3BfbG9jayxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgICAgZmxhZ3MpO1xuJiM0MztcdFx0XHRcdFx0cmRzX21lc3NhZ2VfcHV0KHJtKTtcbiYjNDM7XHRcdFx0XHR9XG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHR9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTM6MDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JEUyYjMzQ7LAogICAgJiMzNDtSRFNfUkRNQSYjMzQ7LAogICAgJiMzNDtJTkZJTklCQU5EJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkRfQUREUl9UUkFOUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Jkc19zZW5kbXNnJiMzNDssCiAgICAmIzM0O3Jkc19tZXNzYWdlX3B1dCYjMzQ7LAogICAgJiMzNDtyZHNfY21zZ19yZG1hX2FyZ3MmIzM0OywKICAgICYjMzQ7cmRzX2Ntc2dfYXRvbWljJiMzNDssCiAgICAmIzM0O3Jkc19yZG1hX2ZyZWVfb3AmIzM0OywKICAgICYjMzQ7cmRzX2F0b21pY19mcmVlX29wJiMzNDssCiAgICAmIzM0O3Jkc19yZG1hX29wX3VucGluX3BhZ2VzJiMzNDssCiAgICAmIzM0O3Jkc19hdG9taWNfb3BfdW5waW5fcGFnZSYjMzQ7LAogICAgJiMzNDtfX3Jkc19wdXRfbXJfZmluYWwmIzM0OywKICAgICYjMzQ7cmRzX2dldF9tciYjMzQ7LAogICAgJiMzNDtyZHNfZnJlZV9tciYjMzQ7LAogICAgJiMzNDtyZHNfc2VuZF94bWl0JiMzNDssCiAgICAmIzM0O19fcmRzX2liX3RlYXJkb3duX21yJiMzNDssCiAgICAmIzM0O3Jkc19yZG1hX3VudXNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSRFMgKFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMpIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGhvdyBtZW1vcnkgcmVnaW9ucyAoTVIpIGFuZCBSRE1BIG9wZXJhdGlvbnMgYXJlIGhhbmRsZWQuIEl0IGRlZmVycyB0aGUgdW5waW5uaW5nIG9mIHVzZXIgcGFnZXMgdG8gYSB3b3JrcXVldWUgaWYgdGhlIGZpbmFsIHB1dCBoYXBwZW5zIGluIGF0b21pYyBjb250ZXh0LCBmaXhpbmcgcG90ZW50aWFsIHNsZWVwLWluLWF0b21pYyBidWdzLiBJdCBhbHNvIGFkZHMgYSBzb2NrZXQgcmVmZXJlbmNlIGhvbGQgd2hlbiBhbiBNUiBpcyBjcmVhdGVkIHRvIGVuc3VyZSB0aGUgc29ja2V0IG91dGxpdmVzIHRoZSBNUiwgZml4aW5nIGEgdXNlLWFmdGVyLWZyZWUuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBSRFMgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3OWE2M2Y2MjJjNWRjMTVlMThiY2ZmNTE4OTZlNjkzNjEwNWQ1ZTg5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMzEgMTM6MDI6MjggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvcmRzL2liX3JkbWEuYyBiL25ldC9yZHMvaWJfcmRtYS5jCmluZGV4IDk1OTRlYTI0NWY3ZmUuLmRiN2U5MmU3YmQyOWYgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvaWJfcmRtYS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvaWJfcmRtYS5jCkBAIC0yNTEsOSAmIzQzOzI1MSw3IEBAIHZvaWQgX19yZHNfaWJfdGVhcmRvd25fbXIoc3RydWN0IHJkc19pYl9tciAqaWJtcikKIAogCQkJLyogRklYTUUgd2UgbmVlZCBhIHdheSB0byB0ZWxsIGEgci93IE1SCiAJCQkgKiBmcm9tIGEgci9vIE1SICovCi0JCQlXQVJOX09OKCFwYWdlLSZndDttYXBwaW5nICZhbXA7JmFtcDsgaXJxc19kaXNhYmxlZCgpKTsKLQkJCXNldF9wYWdlX2RpcnR5KHBhZ2UpOwotCQkJcHV0X3BhZ2UocGFnZSk7CiYjNDM7CQkJdW5waW5fdXNlcl9wYWdlc19kaXJ0eV9sb2NrKCZhbXA7cGFnZSwgMSwgdHJ1ZSk7CiAJCX0KIAkJa2ZyZWUoaWJtci0mZ3Q7c2cpOwogCmRpZmYgLS1naXQgYS9uZXQvcmRzL21lc3NhZ2UuYyBiL25ldC9yZHMvbWVzc2FnZS5jCmluZGV4IDdmZWIwZWI2NTM3ZGIuLmYyNWYyNTkyNTg2ZjcgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvbWVzc2FnZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvbWVzc2FnZS5jCkBAIC0xODIsNiAmIzQzOzE4MiwxOSBAQCBzdGF0aWMgdm9pZCByZHNfbWVzc2FnZV9wdXJnZShzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKQogCQlrcmVmX3B1dCgmYW1wO3JtLSZndDthdG9taWMub3BfcmRtYV9tci0mZ3Q7cl9rcmVmLCBfX3Jkc19wdXRfbXJfZmluYWwpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgcmRzX21lc3NhZ2VfdW5waW5fd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCByZHNfbWVzc2FnZSAqcm0gPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJkc19tZXNzYWdlLAomIzQzOwkJCQkJICAgICAgbV91bnBpbl93b3JrKTsKJiM0MzsKJiM0MzsJaWYgKHJtLSZndDtyZG1hLm9wX3VucGluX2RlZmVycmVkKQomIzQzOwkJcmRzX3JkbWFfb3BfdW5waW5fcGFnZXMoJmFtcDtybS0mZ3Q7cmRtYSk7CiYjNDM7CWlmIChybS0mZ3Q7YXRvbWljLm9wX3VucGluX2RlZmVycmVkKQomIzQzOwkJcmRzX2F0b21pY19vcF91bnBpbl9wYWdlKCZhbXA7cm0tJmd0O2F0b21pYyk7CiYjNDM7CiYjNDM7CWtmcmVlKHJtKTsKJiM0Mzt9CiYjNDM7CiB2b2lkIHJkc19tZXNzYWdlX3B1dChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKQogewogCXJkc2RlYnVnKCYjMzQ7cHV0IHJtICVwIHJlZiAlZFxuJiMzNDssIHJtLCByZWZjb3VudF9yZWFkKCZhbXA7cm0tJmd0O21fcmVmY291bnQpKTsKQEAgLTE4OSw4ICYjNDM7MjAyLDIxIEBAIHZvaWQgcmRzX21lc3NhZ2VfcHV0KHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pCiAJaWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO3JtLSZndDttX3JlZmNvdW50KSkgewogCQlCVUdfT04oIWxpc3RfZW1wdHkoJmFtcDtybS0mZ3Q7bV9zb2NrX2l0ZW0pKTsKIAkJQlVHX09OKCFsaXN0X2VtcHR5KCZhbXA7cm0tJmd0O21fY29ubl9pdGVtKSk7CiYjNDM7CiAJCXJkc19tZXNzYWdlX3B1cmdlKHJtKTsKIAomIzQzOwkJLyogQSBmaW5hbCBwdXQgaW4gYXRvbWljIGNvbnRleHQgY2Fubm90IGRpcnR5IHRoZSBvcHMmIzM5OwomIzQzOwkJICogdXNlciBwYWdlcyBvbiB1bnBpbiwgc28gcmRzX3JkbWFfZnJlZV9vcCgpIGFuZAomIzQzOwkJICogcmRzX2F0b21pY19mcmVlX29wKCkgZGVmZXJyZWQgaXQuICBGaW5pc2ggdGhlIHVucGluLAomIzQzOwkJICogYW5kIHRoZSBmcmVlLCBmcm9tIHByb2Nlc3MgY29udGV4dC4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHJtLSZndDtyZG1hLm9wX3VucGluX2RlZmVycmVkIHx8CiYjNDM7CQkgICAgcm0tJmd0O2F0b21pYy5vcF91bnBpbl9kZWZlcnJlZCkgewomIzQzOwkJCUlOSVRfV09SSygmYW1wO3JtLSZndDttX3VucGluX3dvcmssIHJkc19tZXNzYWdlX3VucGluX3dvcmtlcik7CiYjNDM7CQkJcXVldWVfd29yayhyZHNfd3EsICZhbXA7cm0tJmd0O21fdW5waW5fd29yayk7CiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJfQomIzQzOwogCQlrZnJlZShybSk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9yZG1hLmMgYi9uZXQvcmRzL3JkbWEuYwppbmRleCA2MWZiNmU0NTI4MWJmLi4wNzgwOTBkMjkyZmEzIDEwMDY0NAotLS0gYS9uZXQvcmRzL3JkbWEuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL3JkbWEuYwpAQCAtMTE3LDYgJiM0MzsxMTcsNyBAQCB2b2lkIF9fcmRzX3B1dF9tcl9maW5hbChzdHJ1Y3Qga3JlZiAqa3JlZikKIAlzdHJ1Y3QgcmRzX21yICptciA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgcmRzX21yLCByX2tyZWYpOwogCiAJcmRzX2Rlc3Ryb3lfbXIobXIpOwomIzQzOwlzb2NrX3B1dChyZHNfcnNfdG9fc2sobXItJmd0O3Jfc29jaykpOwogCWtmcmVlKG1yKTsKIH0KIApAQCAtMjQzLDcgJiM0MzsyNDQsMTEgQEAgc3RhdGljIGludCBfX3Jkc19yZG1hX21hcChzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX2dldF9tcl9hcmdzICphcmdzLAogCWtyZWZfaW5pdCgmYW1wO21yLSZndDtyX2tyZWYpOwogCVJCX0NMRUFSX05PREUoJmFtcDttci0mZ3Q7cl9yYl9ub2RlKTsKIAltci0mZ3Q7cl90cmFucyA9IHJzLSZndDtyc190cmFuc3BvcnQ7CiYjNDM7CS8qIFRoZSBNUiBjYW4gb3V0bGl2ZSBpdHMgc29ja2V0OiBhIHNvY2tldCByZWZlcmVuY2UgaXMgaGVsZAomIzQzOwkgKiB1bnRpbCB0aGUgZmluYWwga3JlZiBpcyBkcm9wcGVkIGluIF9fcmRzX3B1dF9tcl9maW5hbCgpLgomIzQzOwkgKi8KIAltci0mZ3Q7cl9zb2NrID0gcnM7CiYjNDM7CXNvY2tfaG9sZChyZHNfcnNfdG9fc2socnMpKTsKIAogCWlmIChhcmdzLSZndDtmbGFncyAmYW1wOyBSRFNfUkRNQV9VU0VfT05DRSkKIAkJbXItJmd0O3JfdXNlX29uY2UgPSAxOwpAQCAtNDgzLDIyICYjNDM7NDg4LDM2IEBAIHZvaWQgcmRzX3JkbWFfdW51c2Uoc3RydWN0IHJkc19zb2NrICpycywgdTMyIHJfa2V5LCBpbnQgZm9yY2UpCiAJCWtyZWZfcHV0KCZhbXA7bXItJmd0O3Jfa3JlZiwgX19yZHNfcHV0X21yX2ZpbmFsKTsKIH0KIAotdm9pZCByZHNfcmRtYV9mcmVlX29wKHN0cnVjdCBybV9yZG1hX29wICpybykKJiM0Mzt2b2lkIHJkc19yZG1hX29wX3VucGluX3BhZ2VzKHN0cnVjdCBybV9yZG1hX29wICpybykKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcm8tJmd0O29wX25lbnRzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBzZ19wYWdlKCZhbXA7cm8tJmd0O29wX3NnW2ldKTsKJiM0MzsKJiM0MzsJCS8qIE1hcmsgcGFnZSBkaXJ0eSBpZiBpdCB3YXMgcG9zc2libHkgbW9kaWZpZWQsIHdoaWNoCiYjNDM7CQkgKiBpcyB0aGUgY2FzZSBmb3IgYSBSRE1BX1JFQUQgd2hpY2ggY29waWVzIGZyb20gcmVtb3RlCiYjNDM7CQkgKiB0byBsb2NhbCBtZW1vcnkKJiM0MzsJCSAqLwomIzQzOwkJdW5waW5fdXNlcl9wYWdlc19kaXJ0eV9sb2NrKCZhbXA7cGFnZSwgMSwgIXJvLSZndDtvcF93cml0ZSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCByZHNfcmRtYV9mcmVlX29wKHN0cnVjdCBybV9yZG1hX29wICpybykKJiM0Mzt7CiAJaWYgKHJvLSZndDtvcF9vZHBfbXIpIHsKIAkJa3JlZl9wdXQoJmFtcDtyby0mZ3Q7b3Bfb2RwX21yLSZndDtyX2tyZWYsIF9fcmRzX3B1dF9tcl9maW5hbCk7CiYjNDM7CX0gZWxzZSBpZiAoaW5fdGFzaygpIHx8IHJvLSZndDtvcF93cml0ZSkgewomIzQzOwkJLyogQW4gUkRNQSB3cml0ZSYjMzk7cyBwYWdlcyBhcmUgb25seSByZWFkIGJ5IHRoZSByZW1vdGUKJiM0MzsJCSAqIHNpZGU7IHVucGlubmluZyB3aXRob3V0IGRpcnR5aW5nIGRvZXMgbm90IHNsZWVwLgomIzQzOwkJICovCiYjNDM7CQlyZHNfcmRtYV9vcF91bnBpbl9wYWdlcyhybyk7CiAJfSBlbHNlIHsKLQkJZm9yIChpID0gMDsgaSAmbHQ7IHJvLSZndDtvcF9uZW50czsgaSYjNDM7JiM0MzspIHsKLQkJCXN0cnVjdCBwYWdlICpwYWdlID0gc2dfcGFnZSgmYW1wO3JvLSZndDtvcF9zZ1tpXSk7Ci0KLQkJCS8qIE1hcmsgcGFnZSBkaXJ0eSBpZiBpdCB3YXMgcG9zc2libHkgbW9kaWZpZWQsIHdoaWNoCi0JCQkgKiBpcyB0aGUgY2FzZSBmb3IgYSBSRE1BX1JFQUQgd2hpY2ggY29waWVzIGZyb20gcmVtb3RlCi0JCQkgKiB0byBsb2NhbCBtZW1vcnkKLQkJCSAqLwotCQkJdW5waW5fdXNlcl9wYWdlc19kaXJ0eV9sb2NrKCZhbXA7cGFnZSwgMSwgIXJvLSZndDtvcF93cml0ZSk7Ci0JCX0KJiM0MzsJCS8qIERpcnR5aW5nIHRoZSBwYWdlcyBvbiB1bnBpbiBjYW4gc2xlZXA7IGxlYXZlIHRoZW0KJiM0MzsJCSAqIHBpbm5lZCBhbmQgaGF2ZSByZHNfbWVzc2FnZV9wdXQoKSBmaW5pc2ggdGhlIHVucGluCiYjNDM7CQkgKiBmcm9tIHByb2Nlc3MgY29udGV4dC4KJiM0MzsJCSAqLwomIzQzOwkJcm8tJmd0O29wX3VucGluX2RlZmVycmVkID0gMTsKIAl9CiAKIAlrZnJlZShyby0mZ3Q7b3Bfbm90aWZpZXIpOwpAQCAtNTA3LDcgJiM0Mzs1MjYsNyBAQCB2b2lkIHJkc19yZG1hX2ZyZWVfb3Aoc3RydWN0IHJtX3JkbWFfb3AgKnJvKQogCXJvLSZndDtvcF9vZHBfbXIgPSBOVUxMOwogfQogCi12b2lkIHJkc19hdG9taWNfZnJlZV9vcChzdHJ1Y3Qgcm1fYXRvbWljX29wICphbykKJiM0Mzt2b2lkIHJkc19hdG9taWNfb3BfdW5waW5fcGFnZShzdHJ1Y3Qgcm1fYXRvbWljX29wICphbykKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHNnX3BhZ2UoYW8tJmd0O29wX3NnKTsKIApAQCAtNTE1LDYgJiM0Mzs1MzQsMTkgQEAgdm9pZCByZHNfYXRvbWljX2ZyZWVfb3Aoc3RydWN0IHJtX2F0b21pY19vcCAqYW8pCiAJICogaXMgdGhlIGNhc2UgZm9yIGEgUkRNQV9SRUFEIHdoaWNoIGNvcGllcyBmcm9tIHJlbW90ZQogCSAqIHRvIGxvY2FsIG1lbW9yeSAqLwogCXVucGluX3VzZXJfcGFnZXNfZGlydHlfbG9jaygmYW1wO3BhZ2UsIDEsIHRydWUpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHJkc19hdG9taWNfZnJlZV9vcChzdHJ1Y3Qgcm1fYXRvbWljX29wICphbykKJiM0Mzt7CiYjNDM7CWlmIChpbl90YXNrKCkpIHsKJiM0MzsJCXJkc19hdG9taWNfb3BfdW5waW5fcGFnZShhbyk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKiBEaXJ0eWluZyB0aGUgcGFnZSBvbiB1bnBpbiBjYW4gc2xlZXA7IGxlYXZlIGl0CiYjNDM7CQkgKiBwaW5uZWQgYW5kIGhhdmUgcmRzX21lc3NhZ2VfcHV0KCkgZmluaXNoIHRoZSB1bnBpbgomIzQzOwkJICogZnJvbSBwcm9jZXNzIGNvbnRleHQuCiYjNDM7CQkgKi8KJiM0MzsJCWFvLSZndDtvcF91bnBpbl9kZWZlcnJlZCA9IDE7CiYjNDM7CX0KIAogCWtmcmVlKGFvLSZndDtvcF9ub3RpZmllcik7CiAJYW8tJmd0O29wX25vdGlmaWVyID0gTlVMTDsKQEAgLTczMiw3ICYjNDM7NzY0LDEyIEBAIGludCByZHNfY21zZ19yZG1hX2FyZ3Moc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSwKIAkJCVJCX0NMRUFSX05PREUoJmFtcDtsb2NhbF9vZHBfbXItJmd0O3JfcmJfbm9kZSk7CiAJCQlrcmVmX2luaXQoJmFtcDtsb2NhbF9vZHBfbXItJmd0O3Jfa3JlZik7CiAJCQlsb2NhbF9vZHBfbXItJmd0O3JfdHJhbnMgPSBycy0mZ3Q7cnNfdHJhbnNwb3J0OwomIzQzOwkJCS8qIFRoZSBNUiBjYW4gb3V0bGl2ZSBpdHMgc29ja2V0OiBhIHNvY2tldAomIzQzOwkJCSAqIHJlZmVyZW5jZSBpcyBoZWxkIHVudGlsIHRoZSBmaW5hbCBrcmVmIGlzCiYjNDM7CQkJICogZHJvcHBlZCBpbiBfX3Jkc19wdXRfbXJfZmluYWwoKS4KJiM0MzsJCQkgKi8KIAkJCWxvY2FsX29kcF9tci0mZ3Q7cl9zb2NrID0gcnM7CiYjNDM7CQkJc29ja19ob2xkKHJkc19yc190b19zayhycykpOwogCQkJbG9jYWxfb2RwX21yLSZndDtyX3RyYW5zX3ByaXZhdGUgPQogCQkJCXJzLSZndDtyc190cmFuc3BvcnQtJmd0O2dldF9tcigKIAkJCQkJTlVMTCwgMCwgcnMsICZhbXA7bG9jYWxfb2RwX21yLSZndDtyX2tleSwgTlVMTCwKQEAgLTc0MSw3ICYjNDM7Nzc4LDkgQEAgaW50IHJkc19jbXNnX3JkbWFfYXJncyhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLAogCQkJCXJldCA9IFBUUl9FUlIobG9jYWxfb2RwX21yLSZndDtyX3RyYW5zX3ByaXZhdGUpOwogCQkJCXJkc2RlYnVnKCYjMzQ7Z2V0X21yIHJldCAlZCAlcFwmIzM0OyYjMzQ7LCByZXQsCiAJCQkJCSBsb2NhbF9vZHBfbXItJmd0O3JfdHJhbnNfcHJpdmF0ZSk7Ci0JCQkJa2ZyZWUobG9jYWxfb2RwX21yKTsKJiM0MzsJCQkJbG9jYWxfb2RwX21yLSZndDtyX3RyYW5zX3ByaXZhdGUgPSBOVUxMOwomIzQzOwkJCQlrcmVmX3B1dCgmYW1wO2xvY2FsX29kcF9tci0mZ3Q7cl9rcmVmLAomIzQzOwkJCQkJIF9fcmRzX3B1dF9tcl9maW5hbCk7CiAJCQkJcmV0ID0gLUVPUE5PVFNVUFA7CiAJCQkJZ290byBvdXRfcGFnZXM7CiAJCQl9CmRpZmYgLS1naXQgYS9uZXQvcmRzL3Jkcy5oIGIvbmV0L3Jkcy9yZHMuaAppbmRleCA2ZTA3OTBlNGI1NzAzLi4yZGI0OTU3M2RhY2Q1IDEwMDY0NAotLS0gYS9uZXQvcmRzL3Jkcy5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvcmRzLmgKQEAgLTMyMCw3ICYjNDM7MzIwLDEwIEBAIHN0cnVjdCByZHNfbXIgewogCXVuc2lnbmVkIGludAkJcl9pbnZhbGlkYXRlOjE7CiAJdW5zaWduZWQgaW50CQlyX3dyaXRlOjE7CiAKLQlzdHJ1Y3QgcmRzX3NvY2sJCSpyX3NvY2s7IC8qIGJhY2sgcG9pbnRlciB0byB0aGUgc29ja2V0IHRoYXQgb3ducyB1cyAqLwomIzQzOwlzdHJ1Y3QgcmRzX3NvY2sJCSpyX3NvY2s7IC8qIHNvY2tldCB0aGF0IG93bnMgdXM7IGNvdW50ZWQKJiM0MzsJCQkJCSAgKiByZWZlcmVuY2UsIGRyb3BwZWQgYnkKJiM0MzsJCQkJCSAgKiBfX3Jkc19wdXRfbXJfZmluYWwoKQomIzQzOwkJCQkJICAqLwogCXN0cnVjdCByZHNfdHJhbnNwb3J0CSpyX3RyYW5zOwogCXZvaWQJCQkqcl90cmFuc19wcml2YXRlOwogfTsKQEAgLTQ0NSw2ICYjNDM7NDQ4LDEyIEBAIHN0cnVjdCByZHNfbWVzc2FnZSB7CiAKIAl2b2lkCQkJKm1fZmluYWxfb3A7CiAKJiM0MzsJLyogVW5waW5zIHRoZSBvcHMmIzM5OyB1c2VyIHBhZ2VzIGFuZCBmcmVlcyB0aGUgbWVzc2FnZSBmcm9tCiYjNDM7CSAqIHByb2Nlc3MgY29udGV4dCB3aGVuIHRoZSBmaW5hbCBwdXQgaGFwcGVucyBpbiBhdG9taWMKJiM0MzsJICogY29udGV4dDogZGlydHlpbmcgdGhlIHBhZ2VzIG9uIHVucGluIGNhbiBzbGVlcC4KJiM0MzsJICovCiYjNDM7CXN0cnVjdCB3b3JrX3N0cnVjdAltX3VucGluX3dvcms7CiYjNDM7CiAJc3RydWN0IHsKIAkJc3RydWN0IHJtX2F0b21pY19vcCB7CiAJCQlpbnQJCQlvcF90eXBlOwpAQCAtNDY4LDYgJiM0Mzs0NzcsNyBAQCBzdHJ1Y3QgcmRzX21lc3NhZ2UgewogCQkJdW5zaWduZWQgaW50CQlvcF9tYXBwZWQ6MTsKIAkJCXVuc2lnbmVkIGludAkJb3Bfc2lsZW50OjE7CiAJCQl1bnNpZ25lZCBpbnQJCW9wX2FjdGl2ZToxOwomIzQzOwkJCXVuc2lnbmVkIGludAkJb3BfdW5waW5fZGVmZXJyZWQ6MTsKIAkJCXN0cnVjdCBzY2F0dGVybGlzdAkqb3Bfc2c7CiAJCQlzdHJ1Y3QgcmRzX25vdGlmaWVyCSpvcF9ub3RpZmllcjsKIApAQCAtNDgzLDYgJiM0Mzs0OTMsNyBAQCBzdHJ1Y3QgcmRzX21lc3NhZ2UgewogCQkJdW5zaWduZWQgaW50CQlvcF9tYXBwZWQ6MTsKIAkJCXVuc2lnbmVkIGludAkJb3Bfc2lsZW50OjE7CiAJCQl1bnNpZ25lZCBpbnQJCW9wX2FjdGl2ZToxOwomIzQzOwkJCXVuc2lnbmVkIGludAkJb3BfdW5waW5fZGVmZXJyZWQ6MTsKIAkJCXVuc2lnbmVkIGludAkJb3BfYnl0ZXM7CiAJCQl1bnNpZ25lZCBpbnQJCW9wX25lbnRzOwogCQkJdW5zaWduZWQgaW50CQlvcF9jb3VudDsKQEAgLTk3Miw2ICYjNDM7OTgzLDggQEAgaW50IHJkc19jbXNnX3JkbWFfbWFwKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sCiAJCQkgIHN0cnVjdCBjbXNnaGRyICpjbXNnKTsKIHZvaWQgcmRzX3JkbWFfZnJlZV9vcChzdHJ1Y3Qgcm1fcmRtYV9vcCAqcm8pOwogdm9pZCByZHNfYXRvbWljX2ZyZWVfb3Aoc3RydWN0IHJtX2F0b21pY19vcCAqYW8pOwomIzQzO3ZvaWQgcmRzX3JkbWFfb3BfdW5waW5fcGFnZXMoc3RydWN0IHJtX3JkbWFfb3AgKnJvKTsKJiM0Mzt2b2lkIHJkc19hdG9taWNfb3BfdW5waW5fcGFnZShzdHJ1Y3Qgcm1fYXRvbWljX29wICphbyk7CiB2b2lkIHJkc19yZG1hX3NlbmRfY29tcGxldGUoc3RydWN0IHJkc19tZXNzYWdlICpybSwgaW50IHdjX3N0YXR1cyk7CiB2b2lkIHJkc19hdG9taWNfc2VuZF9jb21wbGV0ZShzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLCBpbnQgd2Nfc3RhdHVzKTsKIGludCByZHNfY21zZ19hdG9taWMoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSwKZGlmZiAtLWdpdCBhL25ldC9yZHMvc2VuZC5jIGIvbmV0L3Jkcy9zZW5kLmMKaW5kZXggNjhiZTFiZjBlMGFkZi4uN2U0OGY2NGRmYWE2NyAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9zZW5kLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Jkcy9zZW5kLmMKQEAgLTMzOSw5ICYjNDM7MzM5LDIxIEBAIGludCByZHNfc2VuZF94bWl0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCkKIAkJCSAgICAocm0tJmd0O3JkbWEub3BfYWN0aXZlICZhbXA7JmFtcDsKIAkJCSAgICB0ZXN0X2JpdChSRFNfTVNHX1JFVFJBTlNNSVRURUQsICZhbXA7cm0tJmd0O21fZmxhZ3MpKSkgewogCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7Y3AtJmd0O2NwX2xvY2ssIGZsYWdzKTsKLQkJCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFJEU19NU0dfT05fQ09OTiwgJmFtcDtybS0mZ3Q7bV9mbGFncykpCi0JCQkJCWxpc3RfbW92ZSgmYW1wO3JtLSZndDttX2Nvbm5faXRlbSwgJmFtcDt0b19iZV9kcm9wcGVkKTsKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Y3AtJmd0O2NwX2xvY2ssIGZsYWdzKTsKJiM0MzsJCQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSRFNfTVNHX09OX0NPTk4sCiYjNDM7CQkJCQkJICAgICAgICZhbXA7cm0tJmd0O21fZmxhZ3MpKSB7CiYjNDM7CQkJCQkvKiBvdXIgcmVmIGlzIHB1dCBhZnRlciB0aGUgYmF0Y2ggKi8KJiM0MzsJCQkJCWxpc3RfbW92ZSgmYW1wO3JtLSZndDttX2Nvbm5faXRlbSwKJiM0MzsJCQkJCQkgICZhbXA7dG9fYmVfZHJvcHBlZCk7CiYjNDM7CQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Y3AtJmd0O2NwX2xvY2ssCiYjNDM7CQkJCQkJCSAgICAgICBmbGFncyk7CiYjNDM7CQkJCX0gZWxzZSB7CiYjNDM7CQkJCQkvKiBhbHJlYWR5IG9mZiB0aGUgY29ubiBsaXN0OyBkcm9wCiYjNDM7CQkJCQkgKiB0aGUgcmVmIHRha2VuIGFib3ZlIG91cnNlbHZlcwomIzQzOwkJCQkJICovCiYjNDM7CQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Y3AtJmd0O2NwX2xvY2ssCiYjNDM7CQkJCQkJCSAgICAgICBmbGFncyk7CiYjNDM7CQkJCQlyZHNfbWVzc2FnZV9wdXQocm0pOwomIzQzOwkJCQl9CiAJCQkJY29udGludWU7CiAJCQl9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTM6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY0OAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDY1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFJEUyBQYXRjaGVzOiBBIFRhcmdldGVkIEFwcHJvYWNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGFmZmVjdGluZyB0aGUgUkRTIHN1YnN5c3RlbSBpbiB0aGUgTGludXgga2VybmVsLCBzcGVjaWZpY2FsbHkgdHdlYWtpbmcgaG93IG1lbW9yeSByZWdpb25zIChNUnMpIGFuZCBSRE1BIG9wZXJhdGlvbnMgYXJlIG1hbmFnZWQuICBUaGUga2V5IGNoYW5nZSBoZXJlIHNlZW1zIHRvIGJlIGRlZmVycmluZyB1c2VyIHBhZ2UgdW5waW5uaW5nIHRvIGEgd29ya3F1ZXVlIHdoZW4gdGhlIGZpbmFsICYjMzQ7cHV0JiMzNDsgaGFwcGVucyBhdG9taWNhbGx5LiBUaGlzIGlzIGltcG9ydGFudCB0byBub3RlIHNpbmNlIGRpcnR5aW5nIHBhZ2VzIG9uIHVucGluIGNhbiBjYXVzZSBzbGVlcGluZywgd2hpY2ggaXMgYSBiaWcgbm8tbm8gaW4gYXRvbWljIGNvbnRleHRzLiBUaGV5JiMzOTt2ZSBhbHNvIGFkZGVkIGEgc29ja2V0IHJlZmVyZW5jZSBob2xkIHdoZW4gYW4gTVIgaXMgY3JlYXRlZCB0byBtYWtlIHN1cmUgdGhlIHNvY2tldCBvdXRsaXZlcyB0aGUgTVIgLSBzbWFydC4KCk5vdywgc2hvdWxkIHdlIGJvdGhlciBmdXp6aW5nIHRoaXM/IERlZmluaXRlbHkuIFRoZSBwYXRjaCB0b3VjaGVzIGNyaXRpY2FsIFJEUyBjb2RlOiBgbmV0L3Jkcy9pYl9yZG1hLmNgLCBgbmV0L3Jkcy9tZXNzYWdlLmNgLCBgbmV0L3Jkcy9yZG1hLmNgLCBgbmV0L3Jkcy9yZHMuaGAsIGFuZCBgbmV0L3Jkcy9zZW5kLmNgLiAgV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgY29yZSBSRE1BIGhhbmRsaW5nIGFuZCBhdG9taWMgb3BlcmF0aW9ucyDigJMgZnVuZGFtZW50YWwgc3R1ZmYuICBSRFMgaXMgYWxzbyBhIG5ldHdvcmsgcHJvdG9jb2wgKEFGX1JEUykgdGhhdCYjMzk7cyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgaXQgYSBwcmltZSB0YXJnZXQuICBTbywgYFdvcnRoRnV6emluZz10cnVlYC4KCk5leHQsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgZnVuY3Rpb25zIHRvIGZvY3VzIG91ciBmdXp6aW5nIGVmZm9ydHMgb24uICBUaGUgcGF0Y2ggaGFzIG1vZGlmaWVkIHF1aXRlIGEgZmV3LCBidXQgYSBmZXcgc3RhbmQgb3V0IGFzIGdvb2QgY2FuZGlkYXRlcyBmb3IgdGFyZ2V0ZWQgZnV6emluZzoKCiogICBgX19yZHNfaWJfdGVhcmRvd25fbXJgCiogICBgcmRzX21lc3NhZ2VfcHVyZ2VgCiogICBgcmRzX21lc3NhZ2VfdW5waW5fd29ya2VyYCAodGhpcyBpcyBuZXcsIHNvIGRlZmluaXRlbHkgd29ydGggYSBsb29rKQoqICAgYHJkc19tZXNzYWdlX3B1dGAKKiAgIGBfX3Jkc19wdXRfbXJfZmluYWxgCiogICBgX19yZHNfcmRtYV9tYXBgCiogICBgcmRzX3JkbWFfdW51c2VgCiogICBgcmRzX3JkbWFfb3BfdW5waW5fcGFnZXNgICh0aGlzIGlzIGFsc28gbmV3LCBzbyB3b3J0aCBhIGxvb2spCiogICBgcmRzX3JkbWFfZnJlZV9vcGAKKiAgIGByZHNfYXRvbWljX29wX3VucGluX3BhZ2VgIChhZ2FpbiwgdGhpcyBpcyBuZXcpCiogICBgcmRzX2F0b21pY19mcmVlX29wYAoqICAgYHJkc19jbXNnX3JkbWFfYXJnc2AKKiAgIGByZHNfc2VuZF94bWl0YAoKSSB3YW50IHRvIHByaW9yaXRpemUgZWl0aGVyIGVudHJ5IHBvaW50cyBvciBtYWpvciBmdW5jdGlvbnMgYWZmZWN0ZWQgYnkgdGhpcyBwYXRjaC4gV2hpbGUgYHJkc19tZXNzYWdlX3B1dGAgaXMgaW4gdGhlIGxpc3QsIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGEgdG9uIG9mIHBsYWNlcywgc28gSSBuZWVkIHRvIGJlIG1vcmUgc3RyYXRlZ2ljLiBgcmRzX3NlbmRtc2dgIGlzIGxpa2VseSB0aGUga2V5IGVudHJ5IHBvaW50IGZvciBtZXNzYWdlIHNlbmRpbmcsIGNyZWF0aW5nIGFuZCBtYXBwaW5nIHRoZXNlIFJETUEgb3BlcmF0aW9ucy4gIGByZHNfY21zZ19yZG1hX2FyZ3NgIGFuZCBgcmRzX2Ntc2dfcmRtYV9tYXBgIGFyZSBhbHNvIGNyaXRpY2FsLCBhcyB0aGV5JiMzOTtyZSBjYWxsZWQgZnJvbSBgcmRzX3NlbmRtc2dgIHRvIGhhbmRsZSBjb250cm9sIG1lc3NhZ2VzLiBgcmRzX3NlbmRfeG1pdGAgaXMgYWxzbyB3b3J0aCBhIGxvb2sgc2luY2UgaXQmIzM5O3MgdGhlIHRyYW5zbWl0IHdvcmtlci4gQWRkaXRpb25hbGx5LCBgcmRzX3JkbWFfZnJlZV9vcGAgYW5kIGByZHNfYXRvbWljX2ZyZWVfb3BgIGFyZSBjYWxsZWQgZHVyaW5nIG1lc3NhZ2UgcHVyZ2Ugc28gdGhleSYjMzk7cmUgaW1wb3J0YW50IGZvciBjbGVhbnVwIGFuZCBtZW1vcnkgaGFuZGxpbmcgYW5kIGFyZSBpbXBvcnRhbnQuIGBfX3Jkc19yZG1hX21hcGAgaXMgYWxzbyBhIGtleSBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIGZyb20gYHJkc19jbXNnX3JkbWFfbWFwYCBhbmQgYHJkc19nZXRfbXJgLiBGaW5hbGx5LCBgcmRzX2dldF9tcmAgYW5kIGByZHNfZnJlZV9tcmAgYXJlIGJvdGggZW50cnkgcG9pbnRzIHZpYSBgc2V0c29ja29wdGAgY2FsbHMuCgpRdWljayBjaGVjayBvZiBgbmV0L3Jkcy9LY29uZmlnYCBjb25maXJtcyB0aGF0IFJEUyAoYENPTkZJR19SRFNgKSwgUkRNQSAoYENPTkZJR19SRFNfUkRNQWApLCBUQ1AgKGBDT05GSUdfUkRTX1RDUGApLCBhbmQgZGVidWcgKGBDT05GSUdfUkRTX0RFQlVHYCkgYXJlIGFsbCBlbmFibGVkLiAgR29vZCwgaXQmIzM5O3MgYWxsIHRoZXJlLgoKQWxyaWdodCwgdGltZSB0byBkZXBsb3kgdGhlIGZ1enppbmcgdG9vbHMgYW5kIGdldCBzdGFydGVkLiBUaGlzIGxvb2tzIGxpa2UgYSBwcm9taXNpbmcgdGFyZ2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDEzOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBSRFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcmRzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9LY29uZmlnLTItXG5uZXQvcmRzL0tjb25maWc6Mzpjb25maWcgUkRTXG5uZXQvcmRzL0tjb25maWctNC1cdHRyaXN0YXRlIFwmIzM0O1RoZSBSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzIFByb3RvY29sXCYjMzQ7XG4tLVxubmV0L3Jkcy9LY29uZmlnLTktXG5uZXQvcmRzL0tjb25maWc6MTA6Y29uZmlnIFJEU19SRE1BXG5uZXQvcmRzL0tjb25maWctMTEtXHR0cmlzdGF0ZSBcJiMzNDtSRFMgb3ZlciBJbmZpbmliYW5kXCYjMzQ7XG4tLVxubmV0L3Jkcy9LY29uZmlnLTE2LVxubmV0L3Jkcy9LY29uZmlnOjE3OmNvbmZpZyBSRFNfVENQXG5uZXQvcmRzL0tjb25maWctMTgtXHR0cmlzdGF0ZSBcJiMzNDtSRFMgb3ZlciBUQ1BcJiMzNDtcbi0tXG5uZXQvcmRzL0tjb25maWctMjQtXG5uZXQvcmRzL0tjb25maWc6MjU6Y29uZmlnIFJEU19ERUJVR1xubmV0L3Jkcy9LY29uZmlnLTI2LVx0Ym9vbCBcJiMzNDtSRFMgZGVidWdnaW5nIG1lc3NhZ2VzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTM6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM0MAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgUkRTIGFuZCBSRE1BIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBSRFNgIGFuZCBhbHNvIG5lZWQgdG8gY29uc2lkZXIgYFJEU19SRE1BYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZXNlIHR3bywgZXNwZWNpYWxseSBzaW5jZSB0aGUgY29kZSByZWZlcmVuY2VzIGBuZXQvcmRzL2liX3JkbWEuY2AsIHdoaWNoIGRpcmVjdGx5IHRpZXMgaW50byBSRE1BIGxvZ2ljLiBJdCBsb29rcyBsaWtlIGBuZXQvcmRzL2liX3JkbWEuY2AgaXMgb25seSBjb21waWxlZCB3aGVuIGBDT05GSUdfUkRTX1JETUFgIGlzIGFjdGl2ZSwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3cgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBgbmV0L3Jkcy9NYWtlZmlsZWAgdG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBhbmQgZGVwZW5kZW5jaWVzLiBUaGF0IHdpbGwgbGlrZWx5IGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTM6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWJfcmRtYSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yZHMvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9NYWtlZmlsZT04PXJkc19yZG1hLXkgOj1cdHJkbWFfdHJhbnNwb3J0Lm8gXFxcbm5ldC9yZHMvTWFrZWZpbGUtOS1cdFx0XHRpYi5vIGliX2NtLm8gaWJfcmVjdi5vIGliX3JpbmcubyBpYl9zZW5kLm8gaWJfc3RhdHMubyBcXFxubmV0L3Jkcy9NYWtlZmlsZToxMDpcdFx0XHRpYl9zeXNjdGwubyBpYl9yZG1hLm8gaWJfZnJtci5vXG5uZXQvcmRzL01ha2VmaWxlLTExLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDEzOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3MDIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0LgoKKipBbmFseXppbmcgdGhlIFJEUy1SRE1BIEJ1aWxkIFByb2Nlc3MqKgoKUmlnaHQsIHNvIGByZHNfcmRtYS15YCBpcyBkZWZpbml0ZWx5IG9ubHkgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkIGlmIGBDT05GSUdfUkRTX1JETUFgIGlzIHNldC4gVGhhdCYjMzk7cyBnb29kLCBwcmVkaWN0YWJsZSBiZWhhdmlvci4gTm93LCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gYW5kIHNlZSBob3cgaXQmIzM5O3MgYWxsIGhvb2tlZCB0b2dldGhlciwgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBgbmV0L3Jkcy9NYWtlZmlsZWAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG1hZ2ljIHVzdWFsbHkgaGFwcGVucyBmb3IgdGhpcyBraW5kIG9mIHRoaW5nIHdpdGhpbiB0aGUgUkRTIGNvZGViYXNlLiBJJiMzOTttIGFzc3VtaW5nIGl0JiMzOTtsbCBoYXZlIHRoZSBzdGFuZGFyZCBgb2JqLSQoQ09ORklHX1JEU19SRE1BKSAmIzQzOz0gcmRzX3JkbWEub2AgdHlwZSBvZiBsaW5lLCBidXQgYSBxdWljayBsb29rIGlzIGFsd2F5cyBwcnVkZW50LiBOZWVkIHRvIGNvbmZpcm0gdGhhdCYjMzk7cyB0aGUgb25seSBkZXBlbmRlbmNlIGFzIHdlbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTM6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmRzX3JkbWEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcmRzL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yZHMvTWFrZWZpbGU9Mz1yZHMteSA6PVx0YWZfcmRzLm8gYmluZC5vIGNvbmcubyBjb25uZWN0aW9uLm8gaW5mby5vIG1lc3NhZ2UubyAgIFxcXG4tLVxubmV0L3Jkcy9NYWtlZmlsZS02LVxubmV0L3Jkcy9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19SRFNfUkRNQSkgJiM0Mzs9IHJkc19yZG1hLm9cbm5ldC9yZHMvTWFrZWZpbGU6ODpyZHNfcmRtYS15IDo9XHRyZG1hX3RyYW5zcG9ydC5vIFxcXG5uZXQvcmRzL01ha2VmaWxlLTktXHRcdFx0aWIubyBpYl9jbS5vIGliX3JlY3YubyBpYl9yaW5nLm8gaWJfc2VuZC5vIGliX3N0YXRzLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDg3CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJEUyBSRE1BIENvbmZpZ3VyYXRpb24gQXNzZXNzbWVudCoqCgpPa2F5LCBzbyB0aGUgcGF0Y2ggSSYjMzk7bSBsb29raW5nIGF0IHJlcXVpcmVzIGBDT05GSUdfUkRTX1JETUFgLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZSwgbm8gc3VycHJpc2VzIHRoZXJlLiBCdXQsIEkgbmVlZCB0byBjb25zaWRlciBgQ09ORklHX1JEU19UQ1BgLiBJdCYjMzk7cyBnZW5lcmFsbHkgYSBnb29kIHByYWN0aWNlIHRvIGhhdmUgdGhlIFRDUCBvcHRpb24gZW5hYmxlZCwgZXNwZWNpYWxseSBmb3IgdGVzdGluZyBSRFMgb3ZlciBUQ1AgYXMgYW4gYWx0ZXJuYXRpdmUgdHJhbnNwb3J0LiBIb3dldmVyLCB0aGlzIHBhdGNoIHNwZWNpZmljYWxseSBpbnRlcmFjdHMgd2l0aCBgaWJfcmRtYS5jYCwgd2hpY2ggaXMgY2xlYXJseSBwYXJ0IG9mIHRoZSBgUkRTX1JETUFgIGNvbmZpZ3VyYXRpb24uCgpMZXQmIzM5O3MgcXVpY2tseSB2ZXJpZnkgbXkgdW5kZXJzdGFuZGluZzogZmlsZXMgbGlrZSBgbmV0L3Jkcy9tZXNzYWdlLmNgLCBgbmV0L3Jkcy9yZG1hLmNgLCBhbmQgYG5ldC9yZHMvc2VuZC5jYCBhcmUgYnVpbHQgYXMgcGFydCBvZiBgcmRzLXlgLCB3aGljaCBmYWxscyB1bmRlciB0aGUgdW1icmVsbGEgb2YgYENPTkZJR19SRFNgLiBHb29kLCB0aGF0IG1ha2VzIHNlbnNlLiBTbywgYFJEU2AgaXMgYWx3YXlzIGVuYWJsZWQgd2hlbiB3ZSBhcmUgbG9va2luZyBhdCBhbnkgb2YgdGhvc2UgZmlsZXMuCgpOb3csIGxldCBtZSBqdXN0IGRvdWJsZSBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIGZvciBgUkRTX1JETUFgIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Jkcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yZHMvS2NvbmZpZz0zPWNvbmZpZyBSRFNcbm5ldC9yZHMvS2NvbmZpZy00LVx0dHJpc3RhdGUgXCYjMzQ7VGhlIFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgUHJvdG9jb2xcJiMzNDtcbm5ldC9yZHMvS2NvbmZpZzo1Olx0ZGVwZW5kcyBvbiBJTkVUXG5uZXQvcmRzL0tjb25maWctNi1cdGhlbHBcbi0tXG5uZXQvcmRzL0tjb25maWc9MTA9Y29uZmlnIFJEU19SRE1BXG5uZXQvcmRzL0tjb25maWctMTEtXHR0cmlzdGF0ZSBcJiMzNDtSRFMgb3ZlciBJbmZpbmliYW5kXCYjMzQ7XG5uZXQvcmRzL0tjb25maWc6MTI6XHRkZXBlbmRzIG9uIFJEUyBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORCBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORF9BRERSX1RSQU5TXG5uZXQvcmRzL0tjb25maWctMTMtXHRoZWxwXG4tLVxubmV0L3Jkcy9LY29uZmlnPTE3PWNvbmZpZyBSRFNfVENQXG5uZXQvcmRzL0tjb25maWctMTgtXHR0cmlzdGF0ZSBcJiMzNDtSRFMgb3ZlciBUQ1BcJiMzNDtcbm5ldC9yZHMvS2NvbmZpZzoxOTpcdGRlcGVuZHMgb24gUkRTXG5uZXQvcmRzL0tjb25maWc6MjA6XHRkZXBlbmRzIG9uIElQVjYgfHwgIUlQVjZcbm5ldC9yZHMvS2NvbmZpZy0yMS1cdGhlbHBcbi0tXG5uZXQvcmRzL0tjb25maWc9MjU9Y29uZmlnIFJEU19ERUJVR1xubmV0L3Jkcy9LY29uZmlnLTI2LVx0Ym9vbCBcJiMzNDtSRFMgZGVidWdnaW5nIG1lc3NhZ2VzXCYjMzQ7XG5uZXQvcmRzL0tjb25maWc6Mjc6XHRkZXBlbmRzIG9uIFJEU1xubmV0L3Jkcy9LY29uZmlnLTI4LVx0ZGVmYXVsdCBuXG4tLVxubmV0L3Jkcy9LY29uZmlnPTMwPWNvbmZpZyBHQ09WX1BST0ZJTEVfUkRTXG5uZXQvcmRzL0tjb25maWctMzEtXHRib29sIFwmIzM0O0VuYWJsZSBHQ09WIHByb2ZpbGluZyBvbiBSRFNcJiMzNDtcbm5ldC9yZHMvS2NvbmZpZzozMjpcdGRlcGVuZHMgb24gR0NPVl9LRVJORUxcbm5ldC9yZHMvS2NvbmZpZy0zMy1cdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTM6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODgzNgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDM1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFuYWx5c2lzIG9mIHRoZSBSRFNfUkRNQSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgc2VlIHRoZSBkZXBlbmRlbmNpZXM6IGBSRFNfUkRNQWAgcmVsaWVzIGhlYXZpbHkgb24gYFJEU2AsIGBJTkZJTklCQU5EYCwgYW5kIGBJTkZJTklCQU5EX0FERFJfVFJBTlNgLiBMb2dpY2FsbHksIEkgbmVlZCB0byBpbmNsdWRlIGFsbCB0aG9zZSBpbiBteSBhbmFseXNpcywgc28gSSYjMzk7bGwgYmUgc3VyZSB0byBrZWVwIHRoZW0gaW4gbWluZC4KCk5vdywgdGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBpbnZvbHZlIGEgc2VyaWVzIG9mIGZ1bmN0aW9ucyB0aGF0IGFyZSBiZWluZyBtb2RpZmllZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHJlbGF0ZSB0byBlYWNoIG90aGVyIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgaG93IHRoZXkgbWlnaHQgYmUgdnVsbmVyYWJsZS4gRnJvbSBhIHF1aWNrIGdsYW5jZSwgdGhlIGZ1bmN0aW9ucyBiZWluZyBtb2RpZmllZCBhcmU6IGBfX3Jkc19pYl90ZWFyZG93bl9tcmAsIGByZHNfbWVzc2FnZV9wdXJnZWAsIGByZHNfbWVzc2FnZV91bnBpbl93b3JrZXJgLCBgcmRzX21lc3NhZ2VfcHV0YCwgYF9fcmRzX3B1dF9tcl9maW5hbGAsIGBfX3Jkc19yZG1hX21hcGAsIGByZHNfcmRtYV91bnVzZWAsIGByZHNfcmRtYV9vcF91bnBpbl9wYWdlc2AsIGByZHNfcmRtYV9mcmVlX29wYCwgYHJkc19hdG9taWNfb3BfdW5waW5fcGFnZWAsIGByZHNfYXRvbWljX2ZyZWVfb3BgLCBgcmRzX2Ntc2dfcmRtYV9hcmdzYCwgYW5kIGByZHNfc2VuZF94bWl0YC4gVGhhdCYjMzk7cyBhIGxvdCBvZiB0b3VjaCBwb2ludHMsIGFuZCB0aGV5IGFsbCBsb29rIGNyaXRpY2FsLgoKVGltZSB0byBjb25zaWRlciBlbnRyeSBwb2ludHMgZm9yIGZ1enppbmcuIGByZHNfc2VuZG1zZ2AgbG9va3MgcHJvbWlzaW5nIHNpbmNlIGl0IGNhbGxzIGByZHNfY21zZ19yZG1hX2FyZ3NgIGFuZCBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgbWVzc2FnZXMuIFRoZW4gdGhlcmUmIzM5O3MgYHJkc19yZWN2bXNnYDsgaXQgY291bGQgcG90ZW50aWFsbHkgdHJpZ2dlciBgbWVzc2FnZV9wdXRgIGxvZ2ljLiBgcmRzX3NldHNvY2tvcHRgIHNlZW1zIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IGhhbmRsZXMgTVIgKE1lbW9yeSBSZWdpb24pIGNyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGggb3B0aW9ucyBsaWtlIGBSRFNfR0VUX01SYCBhbmQgYFJEU19GUkVFX01SYC4gVGhpcyBpcyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBtZW1vcnkuIEZpbmFsbHksIGByZHNfc2VuZF94bWl0YCBhcHBlYXJzIHRvIGJlIGEga2V5IGZ1bmN0aW9uIGluIHRoZSB0cmFuc21pdCBwYXRoLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYHJkc19zZXRzb2Nrb3B0YCBkaXJlY3RseS4gSSBuZWVkIHRvIGNvbmZpcm0gaXRzIHJvbGUgaW4gTVIgbWFuYWdlbWVudCwgYW5kIEkmIzM5O2xsIGZpbmQgaXQgaW4gZWl0aGVyIGBuZXQvcmRzL2FmX3Jkcy5jYCBvciBgbmV0L3Jkcy9iaW5kLmNgLiBJJiMzOTttIHN0YXJ0aW5nIHRvIGdldCBhIGdvb2QgcGljdHVyZSBvZiB3aGVyZSBJIHNob3VsZCBmb2N1cyBteSBhdHRlbnRpb24sIGdpdmVuIG15IGV4cGVydGlzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTM6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmRzX3NldHNvY2tvcHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcmRzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcmRzL2FmX3Jkcy5jPTQwOT1zdGF0aWMgaW50IHJkc19yZWN2X3RyYWNrX2xhdGVuY3koc3RydWN0IHJkc19zb2NrICpycywgc29ja3B0cl90IG9wdHZhbCxcbi0tXG5uZXQvcmRzL2FmX3Jkcy5jLTQzNS1cbm5ldC9yZHMvYWZfcmRzLmM6NDM2OnN0YXRpYyBpbnQgcmRzX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbm5ldC9yZHMvYWZfcmRzLmMtNDM3LVx0XHRcdCAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcbi0tXG5uZXQvcmRzL2FmX3Jkcy5jPTY0Nj1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyByZHNfcHJvdG9fb3BzID0ge1xuLS1cbm5ldC9yZHMvYWZfcmRzLmMtNjU4LVx0LnNodXRkb3duID1cdHNvY2tfbm9fc2h1dGRvd24sXG5uZXQvcmRzL2FmX3Jkcy5jOjY1OTpcdC5zZXRzb2Nrb3B0ID1cdHJkc19zZXRzb2Nrb3B0LFxubmV0L3Jkcy9hZl9yZHMuYy02NjAtXHQuZ2V0c29ja29wdF9pdGVyID1cdHJkc19nZXRzb2Nrb3B0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTYxCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkFuYWx5emluZyB0aGUgYHJkc19zZXRzb2Nrb3B0YCBJbXBsZW1lbnRhdGlvbioqCgpSaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgY3JpdGljYWwgbG9vayBhdCB0aGUgYHJkc19zZXRzb2Nrb3B0YCBpbXBsZW1lbnRhdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgKG9yIHBvdGVudGlhbCBwcm9ibGVtcykgaGFwcGVuIHdoZW4gY29uZmlndXJpbmcgc29ja2V0IG9wdGlvbnMgd2l0aGluIHRoZSBSRFMgcHJvdG9jb2wgc3RhY2suIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBkZXNpZ25lZCwgd2hhdCBvcHRpb25zIGFyZSBoYW5kbGVkLCBob3cgdGhleSYjMzk7cmUgdmFsaWRhdGVkLCBhbmQgd2hhdCBpbXBhY3QgdGhleSBoYXZlIG9uIHRoZSB1bmRlcmx5aW5nIFJEUyBjb21tdW5pY2F0aW9uLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoaXMgaXMgb2Z0ZW4gYSBkZWxpY2F0ZSBhcmVhIHdoZXJlIHN1YnRsZSBidWdzIGNhbiBsZWFkIHRvIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIG9yIGV2ZW4gc3lzdGVtIGluc3RhYmlsaXR5LiBJJiMzOTtsbCBiZSBwYXJ0aWN1bGFybHkgZm9jdXNlZCBvbiByZXNvdXJjZSBtYW5hZ2VtZW50LCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBhbmQgZXJyb3IgaGFuZGxpbmcuIEkmIzM5O2xsIG5lZWQgdG8gZGlzc2VjdCB0aGUgY29kZSBjYXJlZnVsbHksIGNvbnNpZGVyIHRoZSBjb250ZXh0IG9mIHRoZSBjYWxsaW5nIGVudmlyb25tZW50LCBhbmQgbG9vayBmb3IgYW55IGFzc3VtcHRpb25zIHRoYXQgbWlnaHQgYnJlYWsgZG93biB1bmRlciB1bnVzdWFsIGNpcmN1bXN0YW5jZXMuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDEzOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1JEU19HRVRfTVImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcmRzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcmRzL2FmX3Jkcy5jPTQzNj1zdGF0aWMgaW50IHJkc19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tLVxubmV0L3Jkcy9hZl9yZHMuYy00NTEtXHRcdGJyZWFrO1xubmV0L3Jkcy9hZl9yZHMuYzo0NTI6XHRjYXNlIFJEU19HRVRfTVI6XG5uZXQvcmRzL2FmX3Jkcy5jLTQ1My1cdFx0cmV0ID0gcmRzX2dldF9tcihycywgb3B0dmFsLCBvcHRsZW4pO1xubmV0L3Jkcy9hZl9yZHMuYy00NTQtXHRcdGJyZWFrO1xubmV0L3Jkcy9hZl9yZHMuYzo0NTU6XHRjYXNlIFJEU19HRVRfTVJfRk9SX0RFU1Q6XG5uZXQvcmRzL2FmX3Jkcy5jLTQ1Ni1cdFx0cmV0ID0gcmRzX2dldF9tcl9mb3JfZGVzdChycywgb3B0dmFsLCBvcHRsZW4pO1xuLS1cbm5ldC9yZHMvaWJfZnJtci5jPTQwNT1zdHJ1Y3QgcmRzX2liX21yICpyZHNfaWJfcmVnX2ZybXIoc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldixcbi0tXG5uZXQvcmRzL2liX2ZybXIuYy00MTQtXHRpZiAoIWljKSB7XG5uZXQvcmRzL2liX2ZybXIuYzo0MTU6XHRcdC8qIFRPRE86IEFkZCBGUldSIHN1cHBvcnQgZm9yIFJEU19HRVRfTVIgdXNpbmcgcHJveHkgcXAqL1xubmV0L3Jkcy9pYl9mcm1yLmMtNDE2LVx0XHRyZXR1cm4gRVJSX1BUUigtRU9QTk9UU1VQUCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDEzOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTUwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBzeW1ib2xzLCBmb2N1c2luZyBvbiB0aGVpciBpbXBvcnRhbmNlOgoKKipNeSBNZW50YWwgUm9hZG1hcCBmb3IgTWVtb3J5IFJlZ2lvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIFJETUEgZnVuY3Rpb24gY2FsbHMgYW5kLCBmcm9tIGEgbWVtb3J5IG1hbmFnZW1lbnQgcGVyc3BlY3RpdmUsIGByZHNfZ2V0X21yYCBhbmQgYHJkc19nZXRfbXJfZm9yX2Rlc3RgIGFyZSBkZWZpbml0ZWx5IGp1bXBpbmcgb3V0IGFzIGNydWNpYWwuIFRoZXkgYXJlIG15IHByaW1hcnkgZm9jdXMuIFRoZXkgYXJlIHRoZSBpbml0aWFsIHN0ZXBzIGZvciByZWdpc3RlcmluZyBtZW1vcnkgYW5kIG9idGFpbmluZyBNZW1vcnkgUmVnaW9uIChNUikgaGFuZGxlcy4gVGhleSYjMzk7cmUgd2hlcmUgaXQgYWxsICpzdGFydHMqLiBJIG5lZWQgdG8gdGhvcm91Z2hseSB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgYWxsb2NhdGUsIG1hcCwgYW5kIHNlY3VyZSB0aGVzZSBNUnMuIFRoZSBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlLCBzZWN1cml0eSBhbmQgY29uY3VycmVuY3kgYXJlIGltbWVkaWF0ZWx5IGFwcGFyZW50LgoKQW5kIG5hdHVyYWxseSwgYHJkc19mcmVlX21yYCBpcyBlcXVhbGx5IGltcG9ydGFudCwgYnV0IG9uIHRoZSBvdGhlciBlbmQgb2YgdGhlIHRyYW5zYWN0aW9uLiBJdCYjMzk7cyB0aGUgY3JpdGljYWwgc3RlcCBmb3IgKnJlbGVhc2luZyogdGhlIE1SLiBJZiBJIGRvbiYjMzk7dCBnZXQgdGhlIG1lbW9yeSBkZWFsbG9jYXRpb24gcGFydCByaWdodCwgSSYjMzk7bGwgaGF2ZSBhbGwga2luZHMgb2YgcHJvYmxlbXM6IHJlc291cmNlIGxlYWtzLCBmcmFnbWVudGF0aW9uLCBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIGlmIHRoZXNlIHJlc291cmNlcyBhcmUgbm90IGNvcnJlY3RseSB6ZXJvZWQvY2xlYW5lZCB1cCwgeW91IG5hbWUgaXQuCgpTbywgYHJkc19nZXRfbXJgLCBgcmRzX2dldF9tcl9mb3JfZGVzdGAsIGFuZCBgcmRzX2ZyZWVfbXJgIGFyZSBteSBrZXkgZm9jdXMgcG9pbnRzLiBUaGVpciBiZWhhdmlvciBhbmQgaW50ZXJhY3Rpb25zIGRpY3RhdGUgdGhlIGludGVncml0eSBhbmQgZWZmaWNpZW5jeSBvZiB0aGUgZW50aXJlIG1lbW9yeSBtYW5hZ2VtZW50IGxheWVyIG9mIHRoaXMgUkRNQSBpbXBsZW1lbnRhdGlvbi4gVGhvc2UgYXJlIHRoZSBmdW5jdGlvbnMgdGhhdCB3aWxsIHRlbGwgbWUgaG93IHRvIGJ1aWxkIHNvbWV0aGluZyByb2J1c3QsIHBlcmZvcm1hbnQsIGFuZCBzZWN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDEzOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1JEU19GUkVFX01SJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Jkcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9hZl9yZHMuYz00MzY9c3RhdGljIGludCByZHNfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9yZHMvYWZfcmRzLmMtNDU3LVx0XHRicmVhaztcbm5ldC9yZHMvYWZfcmRzLmM6NDU4Olx0Y2FzZSBSRFNfRlJFRV9NUjpcbm5ldC9yZHMvYWZfcmRzLmMtNDU5LVx0XHRyZXQgPSByZHNfZnJlZV9tcihycywgb3B0dmFsLCBvcHRsZW4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTAzNAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLgoKKipBZGRpbmcgUkRNQSBNZW1vcnkgUmVnaW9uIEZ1bmN0aW9ucyB0byB0aGUgVG9vbGtpdCoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gaW50ZWdyYXRlIHRoZXNlIFJETUEgZnVuY3Rpb25zLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGludHJvZHVjZSB0aGUgY29yZSBmdW5jdGlvbnM6IGByZHNfZ2V0X21yYCwgYHJkc19nZXRfbXJfZm9yX2Rlc3RgLCBgcmRzX2ZyZWVfbXJgLCBgcmRzX3NlbmRtc2dgLCBhbmQgYHJkc19yZWN2bXNnYC4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUsIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3MuCgpOb3csIGhvbGQgb24uLi4gd2hhdCBhYm91dCBgcmRzX2Ntc2dfcmRtYV9hcmdzYD8gV2hlcmUgZG9lcyB0aGF0IGZpdCBpbj8gQWgsIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGByZHNfc2VuZG1zZ2AuIE9rYXksIHRoYXQmIzM5O3MgY3J1Y2lhbDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBjb25uZWN0aW9uIGNsZWFybHkuIEnigJlkIGJldHRlciB0aG9yb3VnaGx5IGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgcmRzX3NlbmRtc2dgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBzbyBpdCYjMzk7cyB0aGUgcmlnaHQgcGxhY2UgdG8gYmVnaW4uIFRpbWUgdG8gZGlnIGluIGFuZCBlbnN1cmUgSSYjMzk7dmUgZ290IGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZHNfc2VuZG1zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yZHMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yZHMvYWZfcmRzLmM9NjQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHJkc19wcm90b19vcHMgPSB7XG4tLVxubmV0L3Jkcy9hZl9yZHMuYy02NjAtXHQuZ2V0c29ja29wdF9pdGVyID1cdHJkc19nZXRzb2Nrb3B0LFxubmV0L3Jkcy9hZl9yZHMuYzo2NjE6XHQuc2VuZG1zZyA9XHRyZHNfc2VuZG1zZyxcbm5ldC9yZHMvYWZfcmRzLmMtNjYyLVx0LnJlY3Ztc2cgPVx0cmRzX3JlY3Ztc2csXG4tLVxubmV0L3Jkcy9yZHMuaD02Mjk9c3RydWN0IHJkc19zb2NrIHtcbi0tXG5uZXQvcmRzL3Jkcy5oLTY1MS1cdC8qXG5uZXQvcmRzL3Jkcy5oOjY1MjpcdCAqIHJkc19zZW5kbXNnIGNhY2hlcyB0aGUgY29ubiBpdCB1c2VkIHRoZSBsYXN0IHRpbWUgYXJvdW5kLlxubmV0L3Jkcy9yZHMuaC02NTMtXHQgKiBUaGlzIGhlbHBzIGF2b2lkIGNvc3RseSBsb29rdXBzLlxuLS1cbm5ldC9yZHMvcmRzLmg9OTUwPXZvaWQgcmRzNl9pbmNfaW5mb19jb3B5KHN0cnVjdCByZHNfaW5jb21pbmcgKmluYyxcbi0tXG5uZXQvcmRzL3Jkcy5oLTk1NS0vKiBzZW5kLmMgKi9cbm5ldC9yZHMvcmRzLmg6OTU2OmludCByZHNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBwYXlsb2FkX2xlbik7XG5uZXQvcmRzL3Jkcy5oLTk1Ny12b2lkIHJkc19zZW5kX3BhdGhfcmVzZXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNvbm4pO1xuLS1cbm5ldC9yZHMvcmVjdi5jPTE5OT1zdGF0aWMgdm9pZCByZHNfcmVjdl9oc19leHRoZHJzKHN0cnVjdCByZHNfaGVhZGVyICpoZHIsXG4tLVxubmV0L3Jkcy9yZWN2LmMtMjcwLSAqXG5uZXQvcmRzL3JlY3YuYzoyNzE6ICogMS4gcmRzX3NlbmRtc2cgb24gZmlyc3QgY29ubmVjdCBhdHRlbXB0IHNlbmRzIHRoZSBwcm9iZSBwaW5nLCB3aXRoIHRoZVxubmV0L3Jkcy9yZWN2LmMtMjcyLSAqICAgIHNlbmRlciYjMzk7cyBucGF0aHMgKHNfbnBhdGhzKVxuLS1cbm5ldC9yZHMvc2VuZC5jPTExMTg9c3RhdGljIGludCByZHNfcmRtYV9ieXRlcyhzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCAqcmRtYV9ieXRlcylcbi0tXG5uZXQvcmRzL3NlbmQuYy0xMTQwLVxubmV0L3Jkcy9zZW5kLmM6MTE0MTppbnQgcmRzX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgcGF5bG9hZF9sZW4pXG5uZXQvcmRzL3NlbmQuYy0xMTQyLXtcbi0tXG5uZXQvcmRzL3NlbmQuYy0xMTY2LVxubmV0L3Jkcy9zZW5kLmM6MTE2NzpcdC8qIGV4cGVjdCAxIFJETUEgQ01TRyBwZXIgcmRzX3NlbmRtc2cuIGNhbiBzdGlsbCBncm93IGlmIG1vcmUgbmVlZGVkLiAqL1xubmV0L3Jkcy9zZW5kLmMtMTE2OC1cdHZjdC5pbmNyID0gMTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTM6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5ODcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucywgcHV0dGluZyBteXNlbGYgaW4gdGhlIHJvbGUgb2YgdGhpbmtpbmcgdGhyb3VnaCB0aGVpciBzaWduaWZpY2FuY2U6CgoqKktleSBGdW5jdGlvbiBTcG90bGlnaHQ6IGByZHNfc2VuZG1zZ2AgYW5kIGByZHNfc2VuZF94bWl0YCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbiBvbiBhIGNvdXBsZSBvZiBjcnVjaWFsIHBvaW50cyBpbiB0aGUgUmVtb3RlIERpcmVjdCBEYXRhIFRyYW5zZmVyIChSRE1BKSBjb21tdW5pY2F0aW9uIHBhdGguIEkmIzM5O3ZlIGJlZW4gZ2l2aW5nIHNvbWUgdGhvdWdodCB0byB0aGUgZnVuZGFtZW50YWwgcGllY2VzLCBhbmQgYHJkc19zZW5kbXNnYCBhbmQgYHJkc19zZW5kX3htaXRgIGFyZSBkZWZpbml0ZWx5IHN0YW5kaW5nIG91dCBhcyBnb29kIGZvY3VzIHN5bWJvbHMuIFRoZXkgc2VlbSB0byBiZSByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhlIHNlbmQgcHJvY2Vzcy4gS25vd2luZyBob3cgdGhlc2Ugd29yayBpcyBrZXkuCgpgcmRzX3NlbmRtc2dgIHBhcnRpY3VsYXJseSBsb29rcyBpbnRlcmVzdGluZyBhcyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkmIzM5O20gaW1hZ2luaW5nIGl0JiMzOTtzIHRoZSBpbnRlcmZhY2UsIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIGFwcGxpY2F0aW9uIHRvIGluaXRpYXRlIGEgc2VuZCBvcGVyYXRpb24uIEl0JiMzOTtzIHRoZSAmIzM0O2Zyb250IGRvb3IsJiMzNDsgc28gdG8gc3BlYWsuIFRoZW4sIGZyb20gdGhhdCBwb2ludCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcuIGByZHNfc2VuZF94bWl0YCBvbiB0aGUgb3RoZXIgaGFuZCBsaWtlbHkgaGFuZGxlcyB0aGUgYWN0dWFsIHRyYW5zbWlzc2lvbiBvZiB0aGUgZGF0YS4gVGhhdCBzZWVtcyBsaWtlIHRoZSBoZWF2eSBsaWZ0aW5nIHBhcnQgb2YgdGhlIHByb2Nlc3MgYW5kIHVuZGVyc3RhbmRpbmcgdGhlIGZsb3cgb2YgdGhpcyBmdW5jdGlvbiBpcyBnb2luZyB0byBnaXZlIG1lIGRlZXAgaW5zaWdodCBpbnRvIHRoZSBlZmZpY2llbmN5IG9mIFJETUEgdHJhbnNmZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZHNfc2VuZF94bWl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Jkcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9jb25nLmM9MjE3PXZvaWQgcmRzX2NvbmdfcXVldWVfdXBkYXRlcyhzdHJ1Y3QgcmRzX2NvbmdfbWFwICptYXApXG4tLVxubmV0L3Jkcy9jb25nLmMtMjMwLVx0XHRcdHJkc19zdGF0c19pbmMoc19jb25nX3VwZGF0ZV9xdWV1ZWQpO1xubmV0L3Jkcy9jb25nLmM6MjMxOlx0XHRcdC8qIFdlIGNhbm5vdCBpbmxpbmUgdGhlIGNhbGwgdG8gcmRzX3NlbmRfeG1pdCgpIGhlcmVcbm5ldC9yZHMvY29uZy5jLTIzMi1cdFx0XHQgKiBmb3IgdHdvIHJlYXNvbnMgKGJvdGggcGVydGFpbmluZyB0byBhIFRDUCB0cmFuc3BvcnQpOlxuLS1cbm5ldC9yZHMvaWJfY20uYz0yODI9c3RhdGljIHZvaWQgcmRzX2liX3Rhc2tsZXRfZm5fc2VuZCh1bnNpZ25lZCBsb25nIGRhdGEpXG4tLVxubmV0L3Jkcy9pYl9jbS5jLTI5OS1cdCAgICB0ZXN0X2JpdCgwLCBcdTAwMjZjb25uLVx1MDAzZWNfbWFwX3F1ZXVlZCkpKVxubmV0L3Jkcy9pYl9jbS5jOjMwMDpcdFx0cmRzX3NlbmRfeG1pdChcdTAwMjZpYy1cdTAwM2Vjb25uLVx1MDAzZWNfcGF0aFswXSk7XG5uZXQvcmRzL2liX2NtLmMtMzAxLX1cbi0tXG5uZXQvcmRzL2liX3NlbmQuYz0yNDU9dm9pZCByZHNfaWJfc2VuZF9jcWVfaGFuZGxlcihzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljLCBzdHJ1Y3QgaWJfd2MgKndjKVxuLS1cbm5ldC9yZHMvaWJfc2VuZC5jLTMzNS0gKlxubmV0L3Jkcy9pYl9zZW5kLmM6MzM2OiAqIFRoZSBSRFMgc2VuZCBjb2RlIGlzIGVzc2VudGlhbGx5IHNpbmdsZS10aHJlYWRlZDsgcmRzX3NlbmRfeG1pdFxubmV0L3Jkcy9pYl9zZW5kLmMtMzM3LSAqIHNldHMgUkRTX0lOX1hNSVQgdG8gZW5zdXJlIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gdGhlIHNlbmQgcmluZy5cbi0tXG5uZXQvcmRzL2xvb3AuYz0yMzE9dm9pZCByZHNfbG9vcF9uZXRfZXhpdCh2b2lkKVxuLS1cbm5ldC9yZHMvbG9vcC5jLTIzNy0gKiBUaGlzIGlzIG1pc3NpbmcgLnhtaXRfKiBiZWNhdXNlIGxvb3AgZG9lc24mIzM5O3QgZ28gdGhyb3VnaCBnZW5lcmljXG5uZXQvcmRzL2xvb3AuYzoyMzg6ICogcmRzX3NlbmRfeG1pdCgpIGFuZCBkb2VzbiYjMzk7dCBjYWxsIHJkc19yZWN2X2luY29taW5nKCkuICAubGlzdGVuX3N0b3AgYW5kXG5uZXQvcmRzL2xvb3AuYy0yMzktICogLmxhZGRyX2NoZWNrIGFyZSBtaXNzaW5nIGJlY2F1c2UgdHJhbnNwb3J0LmMgZG9lc24mIzM5O3QgaXRlcmF0ZSBvdmVyXG4tLVxubmV0L3Jkcy9yZHMuaD01NDA9c3RydWN0IHJkc190cmFuc3BvcnQge1xuLS1cbm5ldC9yZHMvcmRzLmgtNTgwLVx0Lypcbm5ldC9yZHMvcmRzLmg6NTgxOlx0ICogLnhtaXQgaXMgY2FsbGVkIGJ5IHJkc19zZW5kX3htaXQoKSB0byB0ZWxsIHRoZSB0cmFuc3BvcnQgdG8gc2VuZFxubmV0L3Jkcy9yZHMuaC01ODItXHQgKiBwYXJ0IG9mIGEgbWVzc2FnZS4gIFRoZSBjYWxsZXIgc2VyaWFsaXplcyBvbiB0aGUgc2VuZF9zZW0gc28gdGhpc1xuLS1cbm5ldC9yZHMvcmRzLmg9OTU3PXZvaWQgcmRzX3NlbmRfcGF0aF9yZXNldChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY29ubik7XG5uZXQvcmRzL3Jkcy5oOjk1ODppbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApO1xubmV0L3Jkcy9yZHMuaC05NTktc3RydWN0IHNvY2thZGRyX2luO1xuLS1cbm5ldC9yZHMvc2VuZC5jLTQ0LVxubmV0L3Jkcy9zZW5kLmM6NDU6LyogV2hlbiB0cmFuc21pdHRpbmcgbWVzc2FnZXMgaW4gcmRzX3NlbmRfeG1pdCwgd2UgbmVlZCB0byBlbWVyZ2UgZnJvbVxubmV0L3Jkcy9zZW5kLmMtNDYtICogdGltZSB0byB0aW1lIGFuZCBicmllZmx5IHJlbGVhc2UgdGhlIENQVS4gT3RoZXJ3aXNlIHRoZSBzb2Z0bG9jayB3YXRjaGRvZ1xuLS1cbm5ldC9yZHMvc2VuZC5jPTU5PXN0YXRpYyB2b2lkIHJkc19zZW5kX3JlbW92ZV9mcm9tX3NvY2soc3RydWN0IGxpc3RfaGVhZCAqbWVzc2FnZXMsIGludCBzdGF0dXMpO1xuLS1cbm5ldC9yZHMvc2VuZC5jLTYyLSAqIFJlc2V0IHRoZSBzZW5kIHN0YXRlLiAgQ2FsbGVycyBtdXN0IGVuc3VyZSB0aGF0IHRoaXMgZG9lc24mIzM5O3QgcmFjZSB3aXRoXG5uZXQvcmRzL3NlbmQuYzo2MzogKiByZHNfc2VuZF94bWl0KCkuXG5uZXQvcmRzL3NlbmQuYy02NC0gKi9cbi0tXG5uZXQvcmRzL3NlbmQuYz0xMjg9c3RhdGljIGJvb2wgcmRzX21wcmRzX2NwMF9jYXRjaHVwKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubilcbi0tXG5uZXQvcmRzL3NlbmQuYy0xODYtICovXG5uZXQvcmRzL3NlbmQuYzoxODc6aW50IHJkc19zZW5kX3htaXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxubmV0L3Jkcy9zZW5kLmMtMTg4LXtcbi0tXG5uZXQvcmRzL3NlbmQuYy01NDEtfVxubmV0L3Jkcy9zZW5kLmM6NTQyOkVYUE9SVF9TWU1CT0xfR1BMKHJkc19zZW5kX3htaXQpO1xubmV0L3Jkcy9zZW5kLmMtNTQzLVxuLS1cbm5ldC9yZHMvc2VuZC5jPTY3Nj1zdGF0aWMgdm9pZCByZHNfc2VuZF9yZW1vdmVfZnJvbV9zb2NrKHN0cnVjdCBsaXN0X2hlYWQgKm1lc3NhZ2VzLCBpbnQgc3RhdHVzKVxuLS1cbm5ldC9yZHMvc2VuZC5jLTc1MS0gKiBtZXNzYWdlcyB1cCB0bywgYW5kIGluY2x1ZGluZywgdGhlIGdpdmVuIHNlcXVlbmNlIG51bWJlci4gIE1lc3NhZ2VzIGFyZVxubmV0L3Jkcy9zZW5kLmM6NzUyOiAqIG1vdmVkIHRvIHRoZSByZXRyYW5zIHF1ZXVlIHdoZW4gcmRzX3NlbmRfeG1pdCBwaWNrcyB0aGVtIG9mZiB0aGUgc2VuZFxubmV0L3Jkcy9zZW5kLmMtNzUzLSAqIHF1ZXVlLiBUaGlzIG1lYW5zIHRoYXQgaW4gdGhlIFRDUCBjYXNlLCB0aGUgbWVzc2FnZSBtYXkgbm90IGhhdmUgYmVlblxuLS1cbm5ldC9yZHMvc2VuZC5jPTExNDE9aW50IHJkc19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHBheWxvYWRfbGVuKVxuLS1cbm5ldC9yZHMvc2VuZC5jLTE0MzgtXG5uZXQvcmRzL3NlbmQuYzoxNDM5Olx0cmV0ID0gcmRzX3NlbmRfeG1pdChjcGF0aCk7XG5uZXQvcmRzL3NlbmQuYy0xNDQwLVx0aWYgKHJldCA9PSAtRU5PTUVNIHx8IHJldCA9PSAtRUFHQUlOKSB7XG4tLVxubmV0L3Jkcy90Y3AuYz0xMjY9dm9pZCByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuLS1cbm5ldC9yZHMvdGNwLmMtMTQwLVx0ICogY3Bfc3RhdGUgdG8gc29tZXRoaW5nIG90aGVyIHRoYW4gUkRTX0NPTk5fVVAsIGFuZCB0aGVuXG5uZXQvcmRzL3RjcC5jOjE0MTpcdCAqIHdhaXRpbmcgZm9yIGFueSBleGlzdGluZyB0aHJlYWRzIGluIHJkc19zZW5kX3htaXQgdG9cbm5ldC9yZHMvdGNwLmMtMTQyLVx0ICogY29tcGxldGUgcmVsZWFzZV9pbl94bWl0KCkuIChTdWJzZXF1ZW50IHRocmVhZHMgZW50ZXJpbmdcbm5ldC9yZHMvdGNwLmM6MTQzOlx0ICogcmRzX3NlbmRfeG1pdCgpIHdpbGwgYmFpbCBvbiAhcmRzX2Nvbm5fdXAoKS5cbm5ldC9yZHMvdGNwLmMtMTQ0LVx0ICpcbi0tXG5uZXQvcmRzL3RocmVhZHMuYz0xOTE9dm9pZCByZHNfc2VuZF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9yZHMvdGhyZWFkcy5jLTE5OS1cdFx0Y2xlYXJfYml0KFJEU19MTF9TRU5EX0ZVTEwsIFx1MDAyNmNwLVx1MDAzZWNwX2ZsYWdzKTtcbm5ldC9yZHMvdGhyZWFkcy5jOjIwMDpcdFx0cmV0ID0gcmRzX3NlbmRfeG1pdChjcCk7XG5uZXQvcmRzL3RocmVhZHMuYy0yMDEtXHRcdGNvbmRfcmVzY2hlZCgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzgzNwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkRpZ2dpbmcgaW50byB0aGUgUkRTIENvZGUqKgoKUmlnaHQsIHNvIEkmIzM5O20gaG9uaW5nIGluIG9uIHRoZSBjcnVjaWFsIHRyYW5zbWlzc2lvbiBwYXRoIGhlcmUuIGByZHNfc2VuZF94bWl0YCBzZWVtcyBsaWtlIGEgZ29vZCBmb2NhbCBwb2ludCDigJMgaXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24gaW4gZ2V0dGluZyB0aGUgZGF0YSBvdXQgdGhlIGRvb3IuIEkgc2hvdWxkIHByb2JhYmx5IHN0YXJ0IHRoZXJlLgoKQnV0IGJlZm9yZSBJIGdldCB0b28gZGVlcCBpbiB0aGF0IHBhcnRpY3VsYXIgYml0IG9mIGNvZGUsIGl0IG1pZ2h0IGJlIGJlbmVmaWNpYWwgdG8gY2hlY2sgdGhlIGZ1bmN0aW9uIHRoYXQgZmVlZHMgYHJkc19zZW5kX3htaXRgIGl0cyBkYXRhOiBgcmRzX21lc3NhZ2VfcHV0YC4gVGhpcyBmdW5jdGlvbiBsaWtlbHkgaGFuZGxlcyBwcmVwYXJpbmcgYW5kIHF1ZXVpbmcgdGhlIG1lc3NhZ2VzIGZvciB0cmFuc21pc3Npb24sIHNvIHVuZGVyc3RhbmRpbmcgaXRzIHJvbGUgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IGByZHNfc2VuZF94bWl0YCBpbnRlcmFjdHMgd2l0aCB0aGUgaGlnaGVyIGxldmVsIG1lc3NhZ2luZyBsb2dpYy4gSXQgc2hvdWxkIGFsc28gcHJvdmlkZSB2YWx1YWJsZSBjb250ZXh0LCBhcyB3ZWxsIGFzIGVuc3VyZSB0aGF0IEkmIzM5O20gdGFraW5nIGEgdG9wLWRvd24gYXBwcm9hY2guIEkgc2hvdWxkIHN0YXJ0IHRoZXJlIGFuZCB0aGVuIG1vdmUgdG8gYHJkc19zZW5kX3htaXRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZHNfbWVzc2FnZV9wdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcmRzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcmRzL2Nvbm5lY3Rpb24uYz00Njg9c3RhdGljIHZvaWQgcmRzX2Nvbm5fcGF0aF9kZXN0cm95KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbi0tXG5uZXQvcmRzL2Nvbm5lY3Rpb24uYy00ODctXHRcdEJVR19PTighbGlzdF9lbXB0eShcdTAwMjZybS1cdTAwM2VtX3NvY2tfaXRlbSkpO1xubmV0L3Jkcy9jb25uZWN0aW9uLmM6NDg4Olx0XHRyZHNfbWVzc2FnZV9wdXQocm0pO1xubmV0L3Jkcy9jb25uZWN0aW9uLmMtNDg5LVx0fVxubmV0L3Jkcy9jb25uZWN0aW9uLmMtNDkwLVx0aWYgKGNwLVx1MDAzZWNwX3htaXRfcm0pXG5uZXQvcmRzL2Nvbm5lY3Rpb24uYzo0OTE6XHRcdHJkc19tZXNzYWdlX3B1dChjcC1cdTAwM2VjcF94bWl0X3JtKTtcbm5ldC9yZHMvY29ubmVjdGlvbi5jLTQ5Mi1cbi0tXG5uZXQvcmRzL2liX2NtLmM9MTA2ND12b2lkIHJkc19pYl9jb25uX3BhdGhfc2h1dGRvd24oc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxuLS1cbm5ldC9yZHMvaWJfY20uYy0xMTg1LVx0XHRybSA9IGNvbnRhaW5lcl9vZihpYy1cdTAwM2VpX2RhdGFfb3AsIHN0cnVjdCByZHNfbWVzc2FnZSwgZGF0YSk7XG5uZXQvcmRzL2liX2NtLmM6MTE4NjpcdFx0cmRzX21lc3NhZ2VfcHV0KHJtKTtcbm5ldC9yZHMvaWJfY20uYy0xMTg3LVx0XHRpYy1cdTAwM2VpX2RhdGFfb3AgPSBOVUxMO1xuLS1cbm5ldC9yZHMvaWJfc2VuZC5jPTI0NT12b2lkIHJkc19pYl9zZW5kX2NxZV9oYW5kbGVyKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMsIHN0cnVjdCBpYl93YyAqd2MpXG4tLVxubmV0L3Jkcy9pYl9zZW5kLmMtMjg5LVx0XHRcdH1cbm5ldC9yZHMvaWJfc2VuZC5jOjI5MDpcdFx0XHRyZHNfbWVzc2FnZV9wdXQocm0pO1xubmV0L3Jkcy9pYl9zZW5kLmMtMjkxLVx0XHRcdHNlbmQtXHUwMDNlc19vcCA9IE5VTEw7XG4tLVxubmV0L3Jkcy9sb29wLmM9MTExPXN0YXRpYyB2b2lkIHJkc19sb29wX2luY19mcmVlKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYylcbi0tXG5uZXQvcmRzL2xvb3AuYy0xMTQtXG5uZXQvcmRzL2xvb3AuYzoxMTU6XHRyZHNfbWVzc2FnZV9wdXQocm0pO1xubmV0L3Jkcy9sb29wLmMtMTE2LX1cbi0tXG5uZXQvcmRzL21lc3NhZ2UuYz0xODU9c3RhdGljIHZvaWQgcmRzX21lc3NhZ2VfdW5waW5fd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvcmRzL21lc3NhZ2UuYy0xOTctXG5uZXQvcmRzL21lc3NhZ2UuYzoxOTg6dm9pZCByZHNfbWVzc2FnZV9wdXQoc3RydWN0IHJkc19tZXNzYWdlICpybSlcbm5ldC9yZHMvbWVzc2FnZS5jLTE5OS17XG4tLVxubmV0L3Jkcy9tZXNzYWdlLmMtMjIyLX1cbm5ldC9yZHMvbWVzc2FnZS5jOjIyMzpFWFBPUlRfU1lNQk9MX0dQTChyZHNfbWVzc2FnZV9wdXQpO1xubmV0L3Jkcy9tZXNzYWdlLmMtMjI0LVxuLS1cbm5ldC9yZHMvbWVzc2FnZS5jPTQxMD1zdHJ1Y3QgcmRzX21lc3NhZ2UgKnJkc19tZXNzYWdlX21hcF9wYWdlcyh1bnNpZ25lZCBsb25nICpwYWdlX2FkZHJzLCB1bnNpZ25lZCBpbnQgdG90YWxfbGVuKVxuLS1cbm5ldC9yZHMvbWVzc2FnZS5jLTQyNi1cdFx0dm9pZCAqZXJyID0gRVJSX0NBU1Qocm0tXHUwMDNlZGF0YS5vcF9zZyk7XG5uZXQvcmRzL21lc3NhZ2UuYzo0Mjc6XHRcdHJkc19tZXNzYWdlX3B1dChybSk7XG5uZXQvcmRzL21lc3NhZ2UuYy00MjgtXHRcdHJldHVybiBlcnI7XG4tLVxubmV0L3Jkcy9yZG1hLmM9NTA2PXZvaWQgcmRzX3JkbWFfZnJlZV9vcChzdHJ1Y3Qgcm1fcmRtYV9vcCAqcm8pXG4tLVxubmV0L3Jkcy9yZG1hLmMtNTE2LVx0XHQvKiBEaXJ0eWluZyB0aGUgcGFnZXMgb24gdW5waW4gY2FuIHNsZWVwOyBsZWF2ZSB0aGVtXG5uZXQvcmRzL3JkbWEuYzo1MTc6XHRcdCAqIHBpbm5lZCBhbmQgaGF2ZSByZHNfbWVzc2FnZV9wdXQoKSBmaW5pc2ggdGhlIHVucGluXG5uZXQvcmRzL3JkbWEuYy01MTgtXHRcdCAqIGZyb20gcHJvY2VzcyBjb250ZXh0LlxuLS1cbm5ldC9yZHMvcmRtYS5jPTUzOT12b2lkIHJkc19hdG9taWNfZnJlZV9vcChzdHJ1Y3Qgcm1fYXRvbWljX29wICphbylcbi0tXG5uZXQvcmRzL3JkbWEuYy01NDQtXHRcdC8qIERpcnR5aW5nIHRoZSBwYWdlIG9uIHVucGluIGNhbiBzbGVlcDsgbGVhdmUgaXRcbm5ldC9yZHMvcmRtYS5jOjU0NTpcdFx0ICogcGlubmVkIGFuZCBoYXZlIHJkc19tZXNzYWdlX3B1dCgpIGZpbmlzaCB0aGUgdW5waW5cbm5ldC9yZHMvcmRtYS5jLTU0Ni1cdFx0ICogZnJvbSBwcm9jZXNzIGNvbnRleHQuXG4tLVxubmV0L3Jkcy9yZHMuaD05MTE9dm9pZCByZHNfbWVzc2FnZV9hZGRyZWYoc3RydWN0IHJkc19tZXNzYWdlICpybSk7XG5uZXQvcmRzL3Jkcy5oOjkxMjp2b2lkIHJkc19tZXNzYWdlX3B1dChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKTtcbm5ldC9yZHMvcmRzLmgtOTEzLXZvaWQgcmRzX21lc3NhZ2Vfd2FpdChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKTtcbi0tXG5uZXQvcmRzL3NlbmQuYz02NT12b2lkIHJkc19zZW5kX3BhdGhfcmVzZXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxuLS1cbm5ldC9yZHMvc2VuZC5jLTc3LVx0XHRyZHNfbWVzc2FnZV91bm1hcHBlZChybSk7XG5uZXQvcmRzL3NlbmQuYzo3ODpcdFx0cmRzX21lc3NhZ2VfcHV0KHJtKTtcbm5ldC9yZHMvc2VuZC5jLTc5LVx0fVxuLS1cbm5ldC9yZHMvc2VuZC5jPTE4Nz1pbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXG4tLVxubmV0L3Jkcy9zZW5kLmMtMzU0LVx0XHRcdFx0XHRcdFx0ICAgICAgIGZsYWdzKTtcbm5ldC9yZHMvc2VuZC5jOjM1NTpcdFx0XHRcdFx0cmRzX21lc3NhZ2VfcHV0KHJtKTtcbm5ldC9yZHMvc2VuZC5jLTM1Ni1cdFx0XHRcdH1cbi0tXG5uZXQvcmRzL3NlbmQuYy00ODUtXG5uZXQvcmRzL3NlbmQuYzo0ODY6XHRcdFx0cmRzX21lc3NhZ2VfcHV0KHJtKTtcbm5ldC9yZHMvc2VuZC5jLTQ4Ny1cdFx0fVxuLS1cbm5ldC9yZHMvc2VuZC5jLTQ5OC1cdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShybSwgXHUwMDI2dG9fYmVfZHJvcHBlZCwgbV9jb25uX2l0ZW0pXG5uZXQvcmRzL3NlbmQuYzo0OTk6XHRcdFx0cmRzX21lc3NhZ2VfcHV0KHJtKTtcbm5ldC9yZHMvc2VuZC5jLTUwMC1cdFx0cmRzX3NlbmRfcmVtb3ZlX2Zyb21fc29jayhcdTAwMjZ0b19iZV9kcm9wcGVkLCBSRFNfUkRNQV9EUk9QUEVEKTtcbi0tXG5uZXQvcmRzL3NlbmQuYz02NzY9c3RhdGljIHZvaWQgcmRzX3NlbmRfcmVtb3ZlX2Zyb21fc29jayhzdHJ1Y3QgbGlzdF9oZWFkICptZXNzYWdlcywgaW50IHN0YXR1cylcbi0tXG5uZXQvcmRzL3NlbmQuYy03MzctXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cm0tXHUwMDNlbV9yc19sb2NrLCBmbGFncyk7XG5uZXQvcmRzL3NlbmQuYzo3Mzg6XHRcdHJkc19tZXNzYWdlX3B1dChybSk7XG5uZXQvcmRzL3NlbmQuYy03MzktXHRcdGlmICh3YXNfb25fc29jaylcbm5ldC9yZHMvc2VuZC5jOjc0MDpcdFx0XHRyZHNfbWVzc2FnZV9wdXQocm0pO1xubmV0L3Jkcy9zZW5kLmMtNzQxLVx0fVxuLS1cbm5ldC9yZHMvc2VuZC5jPTc5Mz12b2lkIHJkc19zZW5kX2Ryb3BfdG8oc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHNvY2thZGRyX2luNiAqZGVzdClcbi0tXG5uZXQvcmRzL3NlbmQuYy04NTYtXG5uZXQvcmRzL3NlbmQuYzo4NTc6XHRcdHJkc19tZXNzYWdlX3B1dChybSk7XG5uZXQvcmRzL3NlbmQuYy04NTgtXHR9XG4tLVxubmV0L3Jkcy9zZW5kLmMtODc5LVxubmV0L3Jkcy9zZW5kLmM6ODgwOlx0XHRyZHNfbWVzc2FnZV9wdXQocm0pO1xubmV0L3Jkcy9zZW5kLmMtODgxLVx0fVxuLS1cbm5ldC9yZHMvc2VuZC5jPTExNDE9aW50IHJkc19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHBheWxvYWRfbGVuKVxuLS1cbm5ldC9yZHMvc2VuZC5jLTE0NTItXG5uZXQvcmRzL3NlbmQuYzoxNDUzOlx0cmRzX21lc3NhZ2VfcHV0KHJtKTtcbm5ldC9yZHMvc2VuZC5jLTE0NTQtXG4tLVxubmV0L3Jkcy9zZW5kLmMtMTQ3Mi1cdGlmIChybSlcbm5ldC9yZHMvc2VuZC5jOjE0NzM6XHRcdHJkc19tZXNzYWdlX3B1dChybSk7XG5uZXQvcmRzL3NlbmQuYy0xNDc0LVx0cmV0dXJuIHJldDtcbi0tXG5uZXQvcmRzL3NlbmQuYz0xNDg2PXJkc19zZW5kX3Byb2JlKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCwgX19iZTE2IHNwb3J0LFxuLS1cbm5ldC9yZHMvc2VuZC5jLTE1NDUtXG5uZXQvcmRzL3NlbmQuYzoxNTQ2Olx0cmRzX21lc3NhZ2VfcHV0KHJtKTtcbm5ldC9yZHMvc2VuZC5jLTE1NDctXHRyZXR1cm4gMDtcbi0tXG5uZXQvcmRzL3NlbmQuYy0xNTUwLVx0aWYgKHJtKVxubmV0L3Jkcy9zZW5kLmM6MTU1MTpcdFx0cmRzX21lc3NhZ2VfcHV0KHJtKTtcbm5ldC9yZHMvc2VuZC5jLTE1NTItXHRyZXR1cm4gcmV0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjEzMwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHJkc19tZXNzYWdlX3B1dGAgVXNhZ2UgYW5kIFJlbGF0ZWQgQ2hhbmdlcyoqCgpPa2F5LCBzbyBgcmRzX21lc3NhZ2VfcHV0YCBpcyBhIGhlYXZpbHkgdXRpbGl6ZWQgZnVuY3Rpb24gd2l0aGluIHRoaXMgc3lzdGVtIOKAkyB0aGF0JiMzOTtzIHRoZSBmaXJzdCB0aGluZyBJIG5vdGljZS4gVGhpcyBwYXRjaCwgc3BlY2lmaWNhbGx5LCBpbnRyb2R1Y2VzIGEgbmV3IHdvcmtxdWV1ZSBmdW5jdGlvbiwgYHJkc19tZXNzYWdlX3VucGluX3dvcmtlcmAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doeSB0aGUgd29ya3F1ZXVlPyYjMzQ7IEl0IGltcGxpZXMgc29tZSBraW5kIG9mIGRlZmVycmVkIG9wZXJhdGlvbiwgbGlrZWx5IHJlbGF0ZWQgdG8gcmVzb3VyY2UgbWFuYWdlbWVudCBvciBzeW5jaHJvbml6YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB1bnBpbm5pbmcgYW5kIHRoZSBtZXNzYWdlIGxpZmVjeWNsZS4KClRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgYHJkc19yZG1hX2ZyZWVfb3BgIGFuZCBgcmRzX2F0b21pY19mcmVlX29wYC4gV2hlbmV2ZXIgSSBzZWUgY2hhbmdlcyB0aGF0IGltcGFjdCBmdW5jdGlvbnMgZGVhbGluZyB3aXRoIFJETUEgYW5kIGF0b21pY3MsIG15IGFudGVubmEgZ28gdXAuIFRob3NlIGFyZSBwb3RlbnRpYWwgYXJlYXMgZm9yIHN1YnRsZSBidWdzIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBHaXZlbiB0aGF0IGByZHNfbWVzc2FnZV9wdXRgIGlzIHNvIGNlbnRyYWwsIEkmIzM5O2xsIHN0YXJ0IGJ5IGZvY3VzaW5nIG9uIGByZHNfcmRtYV9mcmVlX29wYC4gSSB3YW50IHRvIHNlZSBob3cgdGhlIFJETUEgcmVzb3VyY2VzIGFyZSBiZWluZyBoYW5kbGVkIGluIHJlbGF0aW9uIHRvIHRoaXMgdW5waW5uaW5nIHByb2Nlc3MuIElzIHRoaXMgY2hhbmdlIHJlbGF0ZWQgdG8gYnVmZmVyIHJlLXVzZSwgUkRNQSBjb21wbGV0aW9uIGhhbmRsaW5nLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQSBxdWljayBjaGVjayBzaG91bGQgZ2l2ZSBtZSBhbiBpZGVhIGFib3V0IGhvdyB0aGlzIGFsbCBmaXRzIHRvZ2V0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZHNfcmRtYV9mcmVlX29wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Jkcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9tZXNzYWdlLmM9MTMyPXN0YXRpYyB2b2lkIHJkc19tZXNzYWdlX3B1cmdlKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pXG4tLVxubmV0L3Jkcy9tZXNzYWdlLmMtMTc0LVx0aWYgKHJtLVx1MDAzZXJkbWEub3BfYWN0aXZlKVxubmV0L3Jkcy9tZXNzYWdlLmM6MTc1Olx0XHRyZHNfcmRtYV9mcmVlX29wKFx1MDAyNnJtLVx1MDAzZXJkbWEpO1xubmV0L3Jkcy9tZXNzYWdlLmMtMTc2LVx0aWYgKHJtLVx1MDAzZXJkbWEub3BfcmRtYV9tcilcbi0tXG5uZXQvcmRzL21lc3NhZ2UuYz0xOTg9dm9pZCByZHNfbWVzc2FnZV9wdXQoc3RydWN0IHJkc19tZXNzYWdlICpybSlcbi0tXG5uZXQvcmRzL21lc3NhZ2UuYy0yMDgtXHRcdC8qIEEgZmluYWwgcHV0IGluIGF0b21pYyBjb250ZXh0IGNhbm5vdCBkaXJ0eSB0aGUgb3BzJiMzOTtcbm5ldC9yZHMvbWVzc2FnZS5jOjIwOTpcdFx0ICogdXNlciBwYWdlcyBvbiB1bnBpbiwgc28gcmRzX3JkbWFfZnJlZV9vcCgpIGFuZFxubmV0L3Jkcy9tZXNzYWdlLmMtMjEwLVx0XHQgKiByZHNfYXRvbWljX2ZyZWVfb3AoKSBkZWZlcnJlZCBpdC4gIEZpbmlzaCB0aGUgdW5waW4sXG4tLVxubmV0L3Jkcy9yZG1hLmM9NDkxPXZvaWQgcmRzX3JkbWFfb3BfdW5waW5fcGFnZXMoc3RydWN0IHJtX3JkbWFfb3AgKnJvKVxuLS1cbm5ldC9yZHMvcmRtYS5jLTUwNS1cbm5ldC9yZHMvcmRtYS5jOjUwNjp2b2lkIHJkc19yZG1hX2ZyZWVfb3Aoc3RydWN0IHJtX3JkbWFfb3AgKnJvKVxubmV0L3Jkcy9yZG1hLmMtNTA3LXtcbi0tXG5uZXQvcmRzL3JkbWEuYz02Mzc9aW50IHJkc19jbXNnX3JkbWFfYXJncyhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLFxuLS1cbm5ldC9yZHMvcmRtYS5jLTgzMS1cdGlmIChyZXQpXG5uZXQvcmRzL3JkbWEuYzo4MzI6XHRcdHJkc19yZG1hX2ZyZWVfb3Aob3ApO1xubmV0L3Jkcy9yZG1hLmMtODMzLVx0ZWxzZVxuLS1cbm5ldC9yZHMvcmRzLmg9OTgyPWludCByZHNfY21zZ19yZG1hX21hcChzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLFxubmV0L3Jkcy9yZHMuaC05ODMtXHRcdFx0ICBzdHJ1Y3QgY21zZ2hkciAqY21zZyk7XG5uZXQvcmRzL3Jkcy5oOjk4NDp2b2lkIHJkc19yZG1hX2ZyZWVfb3Aoc3RydWN0IHJtX3JkbWFfb3AgKnJvKTtcbm5ldC9yZHMvcmRzLmgtOTg1LXZvaWQgcmRzX2F0b21pY19mcmVlX29wKHN0cnVjdCBybV9hdG9taWNfb3AgKmFvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTM6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwODIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIHVuZGVyc3RhbmQgdGhlIHNpdHVhdGlvbjoKCioqUkRTIFJETUEgTWVtb3J5IE1hbmFnZW1lbnQgQ29udGV4dHVhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBSRE1BIG1lbW9yeSBpcyBtYW5hZ2VkIHdpdGhpbiB0aGUgUkRTIHByb3RvY29sIHN0YWNrLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYHJkc19yZG1hX2ZyZWVfb3BgLiBJIHNlZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhcyBwYXJ0IG9mIGEgY2hhaW46IGZyb20gYHJkc19tZXNzYWdlX3B1cmdlYCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgZnJvbSBgcmRzX21lc3NhZ2VfcHV0YC4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBsaWZlY3ljbGUgb2YgbWVzc2FnZXMgYW5kIGhvdyB0aGVpciBhc3NvY2lhdGVkIFJETUEgcmVzb3VyY2VzIGFyZSByZWxlYXNlZC4gVGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBhIHN1YnRsZSBjaGFuZ2UsIGVmZmVjdGl2ZWx5IGRlZmVycmluZyB0aGUgdW5waW5uaW5nIG9mIG1lbW9yeSB0byBhIHdvcmtxdWV1ZSwgYnV0ICpvbmx5KiBpZiB0aGUgY2FsbCB0byBgcmRzX3JkbWFfZnJlZV9vcGAgaGFwcGVucyBmcm9tIGFuIGF0b21pYyBjb250ZXh0LiBUaGlzIGlzIGEgY3J1Y2lhbCBmdW5jdGlvbmFsIHNoaWZ0IGluIGhvdyBtZW1vcnkgaXMgaGFuZGxlZCB3aXRoaW4gUkRTLiBJdCBtZWFucyB3ZSYjMzk7cmUgdHJ5aW5nIHRvIHByZXZlbnQgYmxvY2tpbmcgaW4gY3JpdGljYWwgc2VjdGlvbnMuIE5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBkZWZlcnJhbC4gTGV0IG1lIHN0YXJ0IGJ5IGxvb2tpbmcgaW50byBgX19yZHNfcHV0X21yX2ZpbmFsYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTM6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19yZHNfcHV0X21yX2ZpbmFsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Jkcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9tZXNzYWdlLmM9MTMyPXN0YXRpYyB2b2lkIHJkc19tZXNzYWdlX3B1cmdlKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pXG4tLVxubmV0L3Jkcy9tZXNzYWdlLmMtMTc2LVx0aWYgKHJtLVx1MDAzZXJkbWEub3BfcmRtYV9tcilcbm5ldC9yZHMvbWVzc2FnZS5jOjE3NzpcdFx0a3JlZl9wdXQoXHUwMDI2cm0tXHUwMDNlcmRtYS5vcF9yZG1hX21yLVx1MDAzZXJfa3JlZiwgX19yZHNfcHV0X21yX2ZpbmFsKTtcbm5ldC9yZHMvbWVzc2FnZS5jLTE3OC1cbi0tXG5uZXQvcmRzL21lc3NhZ2UuYy0xODEtXHRpZiAocm0tXHUwMDNlYXRvbWljLm9wX3JkbWFfbXIpXG5uZXQvcmRzL21lc3NhZ2UuYzoxODI6XHRcdGtyZWZfcHV0KFx1MDAyNnJtLVx1MDAzZWF0b21pYy5vcF9yZG1hX21yLVx1MDAzZXJfa3JlZiwgX19yZHNfcHV0X21yX2ZpbmFsKTtcbm5ldC9yZHMvbWVzc2FnZS5jLTE4My19XG4tLVxubmV0L3Jkcy9yZG1hLmM9OTU9c3RhdGljIHZvaWQgcmRzX2Rlc3Ryb3lfbXIoc3RydWN0IHJkc19tciAqbXIpXG4tLVxubmV0L3Jkcy9yZG1hLmMtMTE0LVxubmV0L3Jkcy9yZG1hLmM6MTE1OnZvaWQgX19yZHNfcHV0X21yX2ZpbmFsKHN0cnVjdCBrcmVmICprcmVmKVxubmV0L3Jkcy9yZG1hLmMtMTE2LXtcbi0tXG5uZXQvcmRzL3JkbWEuYz0xMjg9dm9pZCByZHNfcmRtYV9kcm9wX2tleXMoc3RydWN0IHJkc19zb2NrICpycylcbi0tXG5uZXQvcmRzL3JkbWEuYy0xNDItXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cnMtXHUwMDNlcnNfcmRtYV9sb2NrLCBmbGFncyk7XG5uZXQvcmRzL3JkbWEuYzoxNDM6XHRcdGtyZWZfcHV0KFx1MDAyNm1yLVx1MDAzZXJfa3JlZiwgX19yZHNfcHV0X21yX2ZpbmFsKTtcbm5ldC9yZHMvcmRtYS5jLTE0NC1cdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cnMtXHUwMDNlcnNfcmRtYV9sb2NrLCBmbGFncyk7XG4tLVxubmV0L3Jkcy9yZG1hLmM9MTczPXN0YXRpYyBpbnQgX19yZHNfcmRtYV9tYXAoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19nZXRfbXJfYXJncyAqYXJncyxcbi0tXG5uZXQvcmRzL3JkbWEuYy0yNDctXHQvKiBUaGUgTVIgY2FuIG91dGxpdmUgaXRzIHNvY2tldDogYSBzb2NrZXQgcmVmZXJlbmNlIGlzIGhlbGRcbm5ldC9yZHMvcmRtYS5jOjI0ODpcdCAqIHVudGlsIHRoZSBmaW5hbCBrcmVmIGlzIGRyb3BwZWQgaW4gX19yZHNfcHV0X21yX2ZpbmFsKCkuXG5uZXQvcmRzL3JkbWEuYy0yNDktXHQgKi9cbi0tXG5uZXQvcmRzL3JkbWEuYy0zNTUtXHRpZiAobXIpXG5uZXQvcmRzL3JkbWEuYzozNTY6XHRcdGtyZWZfcHV0KFx1MDAyNm1yLVx1MDAzZXJfa3JlZiwgX19yZHNfcHV0X21yX2ZpbmFsKTtcbm5ldC9yZHMvcmRtYS5jLTM1Ny1cdHJldHVybiByZXQ7XG4tLVxubmV0L3Jkcy9yZG1hLmM9NDAwPWludCByZHNfZnJlZV9tcihzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxuLS1cbm5ldC9yZHMvcmRtYS5jLTQzNi1cbm5ldC9yZHMvcmRtYS5jOjQzNzpcdGtyZWZfcHV0KFx1MDAyNm1yLVx1MDAzZXJfa3JlZiwgX19yZHNfcHV0X21yX2ZpbmFsKTtcbm5ldC9yZHMvcmRtYS5jLTQzOC1cdHJldHVybiAwO1xuLS1cbm5ldC9yZHMvcmRtYS5jPTQ0Nj12b2lkIHJkc19yZG1hX3VudXNlKHN0cnVjdCByZHNfc29jayAqcnMsIHUzMiByX2tleSwgaW50IGZvcmNlKVxuLS1cbm5ldC9yZHMvcmRtYS5jLTQ4Mi1cdC8qIFJlbGVhc2UgdGhlIHJlZmVyZW5jZSBoZWxkIGFib3ZlLiAqL1xubmV0L3Jkcy9yZG1hLmM6NDgzOlx0a3JlZl9wdXQoXHUwMDI2bXItXHUwMDNlcl9rcmVmLCBfX3Jkc19wdXRfbXJfZmluYWwpO1xubmV0L3Jkcy9yZG1hLmMtNDg0LVxuLS1cbm5ldC9yZHMvcmRtYS5jLTQ4Ny1cdGlmICh6b3RfbWUpXG5uZXQvcmRzL3JkbWEuYzo0ODg6XHRcdGtyZWZfcHV0KFx1MDAyNm1yLVx1MDAzZXJfa3JlZiwgX19yZHNfcHV0X21yX2ZpbmFsKTtcbm5ldC9yZHMvcmRtYS5jLTQ4OS19XG4tLVxubmV0L3Jkcy9yZG1hLmM9NTA2PXZvaWQgcmRzX3JkbWFfZnJlZV9vcChzdHJ1Y3Qgcm1fcmRtYV9vcCAqcm8pXG4tLVxubmV0L3Jkcy9yZG1hLmMtNTA4LVx0aWYgKHJvLVx1MDAzZW9wX29kcF9tcikge1xubmV0L3Jkcy9yZG1hLmM6NTA5Olx0XHRrcmVmX3B1dChcdTAwMjZyby1cdTAwM2VvcF9vZHBfbXItXHUwMDNlcl9rcmVmLCBfX3Jkc19wdXRfbXJfZmluYWwpO1xubmV0L3Jkcy9yZG1hLmMtNTEwLVx0fSBlbHNlIGlmIChpbl90YXNrKCkgfHwgcm8tXHUwMDNlb3Bfd3JpdGUpIHtcbi0tXG5uZXQvcmRzL3JkbWEuYz02Mzc9aW50IHJkc19jbXNnX3JkbWFfYXJncyhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLFxuLS1cbm5ldC9yZHMvcmRtYS5jLTc2OC1cdFx0XHQgKiByZWZlcmVuY2UgaXMgaGVsZCB1bnRpbCB0aGUgZmluYWwga3JlZiBpc1xubmV0L3Jkcy9yZG1hLmM6NzY5Olx0XHRcdCAqIGRyb3BwZWQgaW4gX19yZHNfcHV0X21yX2ZpbmFsKCkuXG5uZXQvcmRzL3JkbWEuYy03NzAtXHRcdFx0ICovXG4tLVxubmV0L3Jkcy9yZG1hLmMtNzgyLVx0XHRcdFx0a3JlZl9wdXQoXHUwMDI2bG9jYWxfb2RwX21yLVx1MDAzZXJfa3JlZixcbm5ldC9yZHMvcmRtYS5jOjc4MzpcdFx0XHRcdFx0IF9fcmRzX3B1dF9tcl9maW5hbCk7XG5uZXQvcmRzL3JkbWEuYy03ODQtXHRcdFx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvcmRzL3Jkcy5oPTMxMz1zdHJ1Y3QgcmRzX21yIHtcbi0tXG5uZXQvcmRzL3Jkcy5oLTMyNC1cdFx0XHRcdFx0ICAqIHJlZmVyZW5jZSwgZHJvcHBlZCBieVxubmV0L3Jkcy9yZHMuaDozMjU6XHRcdFx0XHRcdCAgKiBfX3Jkc19wdXRfbXJfZmluYWwoKVxubmV0L3Jkcy9yZHMuaC0zMjYtXHRcdFx0XHRcdCAgKi9cbi0tXG5uZXQvcmRzL3Jkcy5oPTk5MD1pbnQgcmRzX2Ntc2dfYXRvbWljKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sXG4tLVxubmV0L3Jkcy9yZHMuaC05OTItXG5uZXQvcmRzL3Jkcy5oOjk5Mzp2b2lkIF9fcmRzX3B1dF9tcl9maW5hbChzdHJ1Y3Qga3JlZiAqa3JlZik7XG5uZXQvcmRzL3Jkcy5oLTk5NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTM6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg4ODIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSRFMgTWVtb3J5IFJlZ2lvbiBMaWZlY3ljbGUqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgbmFzdHkgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0eSwgc3BlY2lmaWNhbGx5IHdoZXJlIGEgTWVtb3J5IFJlZ2lvbiAoTVIpIGluIHRoZSBSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzIChSRFMpIHByb3RvY29sIHN1cnZpdmVzIHRoZSBzb2NrZXQgaXQmIzM5O3MgYXNzb2NpYXRlZCB3aXRoLiBUaGUgZml4IGl0c2VsZiBzZWVtcyBzdHJhaWdodGZvcndhcmQ6IGBzb2NrX3B1dGAgaXMgYmVpbmcgYWRkZWQgdG8gYF9fcmRzX3B1dF9tcl9maW5hbGAgYW5kIGBzb2NrX2hvbGRgIHRvIGBfX3Jkc19yZG1hX21hcGAgYW5kIGByZHNfY21zZ19yZG1hX2FyZ3NgLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSDigJMgY3JpdGljYWwsIGluIGZhY3QuCgpOb3csIGxldCBtZSBtZW50YWxseSBydW4gdGhyb3VnaCB0aGUgY29yZSBjb21wb25lbnRzIGludm9sdmVkLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCB0aGUgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgb2YgTVJzLCBzbyBJIG5lZWQgdG8ga2VlcCB0aGUgbWFqb3IgcGxheWVycyB0b3Atb2YtbWluZDogYHJkc19zZW5kbXNnYCwgYHJkc19yZWN2bXNnYCwgYHJkc19nZXRfbXJgLCBgcmRzX2dldF9tcl9mb3JfZGVzdGAsIGByZHNfZnJlZV9tcmAsIGFuZCBgcmRzX3NlbmRfeG1pdGAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY2VudHJhbCB0byBob3cgUkRTIGludGVyYWN0cyB3aXRoIFJETUEgYW5kIG1hbmFnZXMgaXRzIG1lbW9yeS4KCkkmIzM5O20gZ2V0dGluZyBhIGxpdHRsZSBjdXJpb3VzIGFzIHRvIHdoZXRoZXIgb3Igbm90IGByZHNfZ2V0X21yYCBhbmQgYHJkc19mcmVlX21yYCBhcmUgc3RhdGljLCBnaXZlbiB0aGVpciBsb3ctbGV2ZWwgbmF0dXJlLiBJ4oCZbGwgbWFrZSBzdXJlIHRvIGRvdWJsZS1jaGVjayB0aGVpciBzY29wZSB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlaXIgaW50ZW5kZWQgdXNhZ2UuIFRoaXMgZGV0YWlsIGNvdWxkIHByb3ZpZGUgaW5zaWdodCBpbnRvIHBvdGVudGlhbCBmdXR1cmUgbWFpbnRlbmFuY2UgY29uc2lkZXJhdGlvbnMsIHNvIEkmIzM5O2xsIHB1dCBhIHBpbiBpbiB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZHNfZ2V0X21yJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Jkcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9hZl9yZHMuYz00MzY9c3RhdGljIGludCByZHNfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9yZHMvYWZfcmRzLmMtNDUyLVx0Y2FzZSBSRFNfR0VUX01SOlxubmV0L3Jkcy9hZl9yZHMuYzo0NTM6XHRcdHJldCA9IHJkc19nZXRfbXIocnMsIG9wdHZhbCwgb3B0bGVuKTtcbm5ldC9yZHMvYWZfcmRzLmMtNDU0LVx0XHRicmVhaztcbm5ldC9yZHMvYWZfcmRzLmMtNDU1LVx0Y2FzZSBSRFNfR0VUX01SX0ZPUl9ERVNUOlxubmV0L3Jkcy9hZl9yZHMuYzo0NTY6XHRcdHJldCA9IHJkc19nZXRfbXJfZm9yX2Rlc3QocnMsIG9wdHZhbCwgb3B0bGVuKTtcbm5ldC9yZHMvYWZfcmRzLmMtNDU3LVx0XHRicmVhaztcbi0tXG5uZXQvcmRzL3JkbWEuYz0xNTU9c3RhdGljIGludCByZHNfcGluX3BhZ2VzKHVuc2lnbmVkIGxvbmcgdXNlcl9hZGRyLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXG4tLVxubmV0L3Jkcy9yZG1hLmMtMTcyLVxubmV0L3Jkcy9yZG1hLmM6MTczOnN0YXRpYyBpbnQgX19yZHNfcmRtYV9tYXAoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19nZXRfbXJfYXJncyAqYXJncyxcbm5ldC9yZHMvcmRtYS5jLTE3NC1cdFx0XHQgIHU2NCAqY29va2llX3JldCwgc3RydWN0IHJkc19tciAqKm1yX3JldCxcbi0tXG5uZXQvcmRzL3JkbWEuYy0zNTktXG5uZXQvcmRzL3JkbWEuYzozNjA6aW50IHJkc19nZXRfbXIoc3RydWN0IHJkc19zb2NrICpycywgc29ja3B0cl90IG9wdHZhbCwgaW50IG9wdGxlbilcbm5ldC9yZHMvcmRtYS5jLTM2MS17XG5uZXQvcmRzL3JkbWEuYzozNjI6XHRzdHJ1Y3QgcmRzX2dldF9tcl9hcmdzIGFyZ3M7XG5uZXQvcmRzL3JkbWEuYy0zNjMtXG5uZXQvcmRzL3JkbWEuYzozNjQ6XHRpZiAob3B0bGVuICE9IHNpemVvZihzdHJ1Y3QgcmRzX2dldF9tcl9hcmdzKSlcbm5ldC9yZHMvcmRtYS5jLTM2NS1cdFx0cmV0dXJuIC1FSU5WQUw7XG5uZXQvcmRzL3JkbWEuYy0zNjYtXG5uZXQvcmRzL3JkbWEuYzozNjc6XHRpZiAoY29weV9mcm9tX3NvY2twdHIoXHUwMDI2YXJncywgb3B0dmFsLCBzaXplb2Yoc3RydWN0IHJkc19nZXRfbXJfYXJncykpKVxubmV0L3Jkcy9yZG1hLmMtMzY4LVx0XHRyZXR1cm4gLUVGQVVMVDtcbi0tXG5uZXQvcmRzL3JkbWEuYy0zNzItXG5uZXQvcmRzL3JkbWEuYzozNzM6aW50IHJkc19nZXRfbXJfZm9yX2Rlc3Qoc3RydWN0IHJkc19zb2NrICpycywgc29ja3B0cl90IG9wdHZhbCwgaW50IG9wdGxlbilcbm5ldC9yZHMvcmRtYS5jLTM3NC17XG5uZXQvcmRzL3JkbWEuYzozNzU6XHRzdHJ1Y3QgcmRzX2dldF9tcl9mb3JfZGVzdF9hcmdzIGFyZ3M7XG5uZXQvcmRzL3JkbWEuYzozNzY6XHRzdHJ1Y3QgcmRzX2dldF9tcl9hcmdzIG5ld19hcmdzO1xubmV0L3Jkcy9yZG1hLmMtMzc3LVxubmV0L3Jkcy9yZG1hLmM6Mzc4Olx0aWYgKG9wdGxlbiAhPSBzaXplb2Yoc3RydWN0IHJkc19nZXRfbXJfZm9yX2Rlc3RfYXJncykpXG5uZXQvcmRzL3JkbWEuYy0zNzktXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC9yZHMvcmRtYS5jLTM4MS1cdGlmIChjb3B5X2Zyb21fc29ja3B0cihcdTAwMjZhcmdzLCBvcHR2YWwsXG5uZXQvcmRzL3JkbWEuYzozODI6XHRcdFx0ICAgc2l6ZW9mKHN0cnVjdCByZHNfZ2V0X21yX2Zvcl9kZXN0X2FyZ3MpKSlcbm5ldC9yZHMvcmRtYS5jLTM4My1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4tLVxubmV0L3Jkcy9yZG1hLmM9ODg2PWludCByZHNfY21zZ19yZG1hX21hcChzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLFxuLS1cbm5ldC9yZHMvcmRtYS5jLTg4OC17XG5uZXQvcmRzL3JkbWEuYzo4ODk6XHRpZiAoY21zZy1cdTAwM2VjbXNnX2xlbiBcdTAwM2MgQ01TR19MRU4oc2l6ZW9mKHN0cnVjdCByZHNfZ2V0X21yX2FyZ3MpKSB8fFxubmV0L3Jkcy9yZG1hLmMtODkwLVx0ICAgIHJtLVx1MDAzZW1fcmRtYV9jb29raWUgIT0gMClcbi0tXG5uZXQvcmRzL3Jkcy5oPTk3MD12b2lkIHJkc19yZG1hX3VudXNlKHN0cnVjdCByZHNfc29jayAqcnMsIHUzMiByX2tleSwgaW50IGZvcmNlKTtcbm5ldC9yZHMvcmRzLmg6OTcxOmludCByZHNfZ2V0X21yKHN0cnVjdCByZHNfc29jayAqcnMsIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pO1xubmV0L3Jkcy9yZHMuaDo5NzI6aW50IHJkc19nZXRfbXJfZm9yX2Rlc3Qoc3RydWN0IHJkc19zb2NrICpycywgc29ja3B0cl90IG9wdHZhbCwgaW50IG9wdGxlbik7XG5uZXQvcmRzL3Jkcy5oLTk3My1pbnQgcmRzX2ZyZWVfbXIoc3RydWN0IHJkc19zb2NrICpycywgc29ja3B0cl90IG9wdHZhbCwgaW50IG9wdGxlbik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDEzOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNTU2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFBvdGVudGlhbCBGb2N1cyBTeW1ib2xzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZXNlIFJEUyBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSB3aXRoIGFuIGV5ZSB0b3dhcmRzIHdoZXJlIFJETUEgb3BlcmF0aW9ucyBhcmUgaGFuZGxlZCBhbmQgcG90ZW50aWFsbHkgb3B0aW1pemVkLiBJJiMzOTt2ZSBhbHJlYWR5IGNvbmZpcm1lZCB0aGF0IGByZHNfZ2V0X21yYCwgYHJkc19nZXRfbXJfZm9yX2Rlc3RgLCBhbmQgYHJkc19mcmVlX21yYCBhcmUgbm9uLXN0YXRpYyDigJMgdGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgbGV0JiMzOTtzIHNlZS4uLiBJJiMzOTttIGFsc28gc2VlaW5nIHRoYXQgYHJkc19tZXNzYWdlX3B1dGAgaXMgZXhwb3J0ZWQuIFRoYXQgZ2V0cyBteSBhdHRlbnRpb24gYmVjYXVzZSBpdCYjMzk7cyBzbyBmdW5kYW1lbnRhbCB0byBtZXNzYWdlIGxpZmVjeWNsZSBtYW5hZ2VtZW50LgoKSW5pdGlhbGx5LCBJIGhhdmUgc29tZSBkb3VidHMsIGByZHNfbWVzc2FnZV9wdXRgIGlzIGV4ZWN1dGVkIGV2ZXJ5IHRpbWUgYSBtZXNzYWdlIGlzIGZyZWVkLCBzbyBjb3VsZCBiZSB0b28gaG90IG9mIGEgc3ltYm9sIHRvIGJlIHRoYXQgaW1wb3J0YW50LiBIb3dldmVyLCB0aGUgcGF0Y2ggaW4gcXVlc3Rpb24gaXMgbW9kaWZ5aW5nIHRoaXMgZnVuY3Rpb24gKnNwZWNpZmljYWxseSogd2hlbiBgcm0tJmd0O3JkbWEub3BfdW5waW5fZGVmZXJyZWRgIG9yIGBybS0mZ3Q7YXRvbWljLm9wX3VucGluX2RlZmVycmVkYCBhcmUgc2V0LiBUaGF0IG1ha2VzIGByZHNfbWVzc2FnZV9wdXRgIGEgdmVyeSByZWxldmFudCBjYW5kaWRhdGUuIFRoZSBiZWhhdmlvciBvZiB0aGlzIHN5bWJvbCBzZWVtcyBsaWtlIGl0IHdvdWxkIGJlIG9mIGludGVyZXN0IHRvIG1lLgoKTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHNvbWUgb3RoZXIgc3ltYm9scywgc3VjaCBhcyBgcmRzX3JkbWFfZnJlZV9vcGAsIGByZHNfYXRvbWljX2ZyZWVfb3BgLCBgcmRzX3JkbWFfb3BfdW5waW5fcGFnZXNgLCBhbmQgYHJkc19hdG9taWNfb3BfdW5waW5fcGFnZWAsIGFzIHRoZXkgYXJlIGFsc28gbm9uLXN0YXRpYywgc28gY291bGQgYmUgYSBjYW5kaWRhdGUuCgpOb3csIGxldCYjMzk7cyB6b29tIG91dCBhIGJpdC4gYHJkc19zZW5kbXNnYCBoYXMgdG8gYmUgYSBjcml0aWNhbCBlbnRyeSBwb2ludC4gSXQmIzM5O3MgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBhY3R1YWxseSBzZW5kaW5nIHRoZSBtZXNzYWdlcywgd2hpY2ggbWVhbnMgaXQmIzM5O3Mgd2hlcmUgUkRNQSBvcGVyYXRpb25zIGFyZSAqY3JlYXRlZCogYW5kIGF0dGFjaGVkIHRvIG1lc3NhZ2VzLiBUaGlzIG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBpbnZlc3RpZ2F0aW9uLgoKRmluYWxseSwgSSYjMzk7bGwgcXVpY2tseSBjaGVjayBgcmRzX2Ntc2dfcmRtYV9hcmdzYC4gSXQmIzM5O3MgY2FsbGVkIGZyb20gYHJkc19zZW5kbXNnYCB0byBwYXJzZSBSRE1BIGNvbnRyb2wgbWVzc2FnZXMuIEl0JiMzOTtzIG5vbi1zdGF0aWMsIHNvIHRoYXQgaW5kaWNhdGVzIGl0JiMzOTtzIGFjY2Vzc2libGUgYW5kIGltcG9ydGFudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTM6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmRzX2Ntc2dfcmRtYV9hcmdzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Jkcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9yZG1hLmM9NTg1PWludCByZHNfcmRtYV9leHRyYV9zaXplKHN0cnVjdCByZHNfcmRtYV9hcmdzICphcmdzLFxuLS1cbm5ldC9yZHMvcmRtYS5jLTYzNi0gKi9cbm5ldC9yZHMvcmRtYS5jOjYzNzppbnQgcmRzX2Ntc2dfcmRtYV9hcmdzKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sXG5uZXQvcmRzL3JkbWEuYy02MzgtXHRcdCAgICAgICBzdHJ1Y3QgY21zZ2hkciAqY21zZyxcbi0tXG5uZXQvcmRzL3Jkcy5oPTk3Nz1pbnQgcmRzX2Ntc2dfcmRtYV9kZXN0KHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sXG5uZXQvcmRzL3Jkcy5oLTk3OC1cdFx0XHQgIHN0cnVjdCBjbXNnaGRyICpjbXNnKTtcbm5ldC9yZHMvcmRzLmg6OTc5OmludCByZHNfY21zZ19yZG1hX2FyZ3Moc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcbm5ldC9yZHMvcmRzLmgtOTgwLVx0XHRcdCAgc3RydWN0IGNtc2doZHIgKmNtc2csXG4tLVxubmV0L3Jkcy9zZW5kLmM9MTA1Nz1zdGF0aWMgaW50IHJkc19jbXNnX3NlbmQoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcbi0tXG5uZXQvcmRzL3NlbmQuYy0xMDc3LVx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG5uZXQvcmRzL3NlbmQuYzoxMDc4Olx0XHRcdHJldCA9IHJkc19jbXNnX3JkbWFfYXJncyhycywgcm0sIGNtc2csIFx1MDAyNnZjdC1cdTAwM2V2ZWNbaW5kXSk7XG5uZXQvcmRzL3NlbmQuYy0xMDc5LVx0XHRcdGluZCYjNDM7JiM0Mzs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDEzOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNzAzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeToKCioqQW5hbHl6aW5nIFJETUEgQXJndW1lbnQgU2NvcGUqKgoKQWxyaWdodCwgc28gdGhlIGNvcmUgcXVlc3Rpb24gaGVyZSByZXZvbHZlcyBhcm91bmQgdGhlIHNjb3BlIG9mIGByZHNfY21zZ19yZG1hX2FyZ3NgLiBJIHF1aWNrbHkgdmVyaWZpZWQgdGhhdCwgeWVzLCBpdCYjMzk7cyBkZWZpbml0aXZlbHkgKm5vbi1zdGF0aWMqLiBUaGlzIG1lYW5zIGl0JiMzOTtzIGFjY2Vzc2libGUgb3V0c2lkZSB0aGUgaW1tZWRpYXRlIHNjb3BlIHdoZXJlIGl0JiMzOTtzIGRlZmluZWQg4oCTIG5vIHN1cnByaXNlcyB0aGVyZSwgZ2l2ZW4gaXRzIHJvbGUuCgpOb3csIG15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCBgcmRzX2Ntc2dfYXRvbWljYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBSRE1BIGFyZ3VtZW50cywgYW5kIHRoZWlyIGFjY2Vzc2liaWxpdHksIGludGVycGxheSB3aXRoIHRoZSBhdG9taWMgb3BlcmF0aW9ucyBjb250ZXh0LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBvZiB0aGVzZSBmdW5jdGlvbnMsIGFuZCBob3cgdGhlIGRhdGEgZmxvd3MgYmV0d2VlbiB0aGVtLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhvc2UgdHdvIGRlZmluaXRpb25zIGRpcmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZHNfY21zZ19hdG9taWMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcmRzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcmRzL3JkbWEuYz04ODY9aW50IHJkc19jbXNnX3JkbWFfbWFwKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sXG4tLVxubmV0L3Jkcy9yZG1hLmMtODk5LSAqL1xubmV0L3Jkcy9yZG1hLmM6OTAwOmludCByZHNfY21zZ19hdG9taWMoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcbm5ldC9yZHMvcmRtYS5jLTkwMS1cdFx0ICAgIHN0cnVjdCBjbXNnaGRyICpjbXNnKVxuLS1cbm5ldC9yZHMvcmRzLmg9OTg5PXZvaWQgcmRzX2F0b21pY19zZW5kX2NvbXBsZXRlKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sIGludCB3Y19zdGF0dXMpO1xubmV0L3Jkcy9yZHMuaDo5OTA6aW50IHJkc19jbXNnX2F0b21pYyhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLFxubmV0L3Jkcy9yZHMuaC05OTEtXHRcdCAgICBzdHJ1Y3QgY21zZ2hkciAqY21zZyk7XG4tLVxubmV0L3Jkcy9zZW5kLmM9MTA1Nz1zdGF0aWMgaW50IHJkc19jbXNnX3NlbmQoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcbi0tXG5uZXQvcmRzL3NlbmQuYy0xMDk5LVx0XHRjYXNlIFJEU19DTVNHX01BU0tFRF9BVE9NSUNfRkFERDpcbm5ldC9yZHMvc2VuZC5jOjExMDA6XHRcdFx0cmV0ID0gcmRzX2Ntc2dfYXRvbWljKHJzLCBybSwgY21zZyk7XG5uZXQvcmRzL3NlbmQuYy0xMTAxLVx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjI5NAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJZGVudGlmeWluZyBLZXkgU3ltYm9scyBmb3IgUmV2aWV3KioKCk9rYXksIHNvIEkmIzM5O20gZ29pbmcgdGhyb3VnaCB0aGlzIGNvZGUsIGZvY3VzaW5nIG9uIHN5bWJvbCB2aXNpYmlsaXR5LiBSaWdodCwgYHJkc19jbXNnX2F0b21pY2AgaXMgZGVmaW5pdGl2ZWx5IG5vdCBzdGF0aWMsIGdvb2QuIExldCYjMzk7cyBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBvYnZpb3VzIGluIHRoZSByZWxhdGVkIGNvZGUuIFJpZ2h0LCBjaGVja2luZyBgcmRzX3JkbWFfZnJlZV9vcGAgYW5kIGByZHNfYXRvbWljX2ZyZWVfb3BgLi4uIHRob3NlIGFyZW4mIzM5O3Qgc3RhdGljIGVpdGhlci4gTW92aW5nIG9uLCB3aGF0IGFib3V0IGByZHNfcmRtYV9vcF91bnBpbl9wYWdlc2AgYW5kIGByZHNfYXRvbWljX29wX3VucGluX3BhZ2VgPyBOb3BlLCBub24tc3RhdGljIGFzIHdlbGwuIEFuZCwgZGlnZ2luZyBmdXJ0aGVyLCBgX19yZHNfcHV0X21yX2ZpbmFsYCBpcyBhbHNvIG5vbi1zdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLgoKTm93LCBsZXQgbWUgbWFrZSBzdXJlIEkmIzM5O20gZ2V0dGluZyBldmVyeXRoaW5nLiBPa2F5LCBmaW5hbGx5LCBgcmRzX21lc3NhZ2VfdW5waW5fd29ya2VyYCBpcyBzdGF0aWMuIEFscmlnaHQsIHRoYXQmIzM5O3Mgd2hhdCBJIG5lZWRlZCB0byBjb25maXJtLgoKU28sIGJhc2VkIG9uIHRoaXMgcXVpY2sgc2NhbiwgdGhlIGNvcmUgc3ltYm9scyBJIG5lZWQgdG8gZm9jdXMgb24gYXJlOgoKKiAgIGByZHNfc2VuZG1zZ2AKKiAgIGByZHNfbWVzc2FnZV9wdXRgCiogICBgcmRzX2Ntc2dfcmRtYV9hcmdzYAoqICAgYHJkc19jbXNnX2F0b21pY2AKKiAgIGByZHNfcmRtYV9mcmVlX29wYAoqICAgYHJkc19hdG9taWNfZnJlZV9vcGAKKiAgIGByZHNfcmRtYV9vcF91bnBpbl9wYWdlc2AKKiAgIGByZHNfYXRvbWljX29wX3VucGluX3BhZ2VgCiogICBgX19yZHNfcHV0X21yX2ZpbmFsYAoqICAgYHJkc19nZXRfbXJgCiogICBgcmRzX2ZyZWVfbXJgCgpPaCwgd2FpdCBhIG1pbnV0ZSwgSSBmb3Jnb3QgYWJvdXQgYHJkc19zZW5kX3htaXRgIGlzIGFsc28gbW9kaWZpZWQuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdG9vLiBBbHJpZ2h0LCBsZXQmIzM5O3MgZ28gY2hlY2sgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTM6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmRzX3NlbmRfeG1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yZHMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yZHMvY29uZy5jPTIxNz12b2lkIHJkc19jb25nX3F1ZXVlX3VwZGF0ZXMoc3RydWN0IHJkc19jb25nX21hcCAqbWFwKVxuLS1cbm5ldC9yZHMvY29uZy5jLTIzMC1cdFx0XHRyZHNfc3RhdHNfaW5jKHNfY29uZ191cGRhdGVfcXVldWVkKTtcbm5ldC9yZHMvY29uZy5jOjIzMTpcdFx0XHQvKiBXZSBjYW5ub3QgaW5saW5lIHRoZSBjYWxsIHRvIHJkc19zZW5kX3htaXQoKSBoZXJlXG5uZXQvcmRzL2NvbmcuYy0yMzItXHRcdFx0ICogZm9yIHR3byByZWFzb25zIChib3RoIHBlcnRhaW5pbmcgdG8gYSBUQ1AgdHJhbnNwb3J0KTpcbi0tXG5uZXQvcmRzL2liX2NtLmM9MjgyPXN0YXRpYyB2b2lkIHJkc19pYl90YXNrbGV0X2ZuX3NlbmQodW5zaWduZWQgbG9uZyBkYXRhKVxuLS1cbm5ldC9yZHMvaWJfY20uYy0yOTktXHQgICAgdGVzdF9iaXQoMCwgXHUwMDI2Y29ubi1cdTAwM2VjX21hcF9xdWV1ZWQpKSlcbm5ldC9yZHMvaWJfY20uYzozMDA6XHRcdHJkc19zZW5kX3htaXQoXHUwMDI2aWMtXHUwMDNlY29ubi1cdTAwM2VjX3BhdGhbMF0pO1xubmV0L3Jkcy9pYl9jbS5jLTMwMS19XG4tLVxubmV0L3Jkcy9pYl9zZW5kLmM9MjQ1PXZvaWQgcmRzX2liX3NlbmRfY3FlX2hhbmRsZXIoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywgc3RydWN0IGliX3djICp3Yylcbi0tXG5uZXQvcmRzL2liX3NlbmQuYy0zMzUtICpcbm5ldC9yZHMvaWJfc2VuZC5jOjMzNjogKiBUaGUgUkRTIHNlbmQgY29kZSBpcyBlc3NlbnRpYWxseSBzaW5nbGUtdGhyZWFkZWQ7IHJkc19zZW5kX3htaXRcbm5ldC9yZHMvaWJfc2VuZC5jLTMzNy0gKiBzZXRzIFJEU19JTl9YTUlUIHRvIGVuc3VyZSBleGNsdXNpdmUgYWNjZXNzIHRvIHRoZSBzZW5kIHJpbmcuXG4tLVxubmV0L3Jkcy9sb29wLmM9MjMxPXZvaWQgcmRzX2xvb3BfbmV0X2V4aXQodm9pZClcbi0tXG5uZXQvcmRzL2xvb3AuYy0yMzctICogVGhpcyBpcyBtaXNzaW5nIC54bWl0XyogYmVjYXVzZSBsb29wIGRvZXNuJiMzOTt0IGdvIHRocm91Z2ggZ2VuZXJpY1xubmV0L3Jkcy9sb29wLmM6MjM4OiAqIHJkc19zZW5kX3htaXQoKSBhbmQgZG9lc24mIzM5O3QgY2FsbCByZHNfcmVjdl9pbmNvbWluZygpLiAgLmxpc3Rlbl9zdG9wIGFuZFxubmV0L3Jkcy9sb29wLmMtMjM5LSAqIC5sYWRkcl9jaGVjayBhcmUgbWlzc2luZyBiZWNhdXNlIHRyYW5zcG9ydC5jIGRvZXNuJiMzOTt0IGl0ZXJhdGUgb3ZlclxuLS1cbm5ldC9yZHMvcmRzLmg9NTQwPXN0cnVjdCByZHNfdHJhbnNwb3J0IHtcbi0tXG5uZXQvcmRzL3Jkcy5oLTU4MC1cdC8qXG5uZXQvcmRzL3Jkcy5oOjU4MTpcdCAqIC54bWl0IGlzIGNhbGxlZCBieSByZHNfc2VuZF94bWl0KCkgdG8gdGVsbCB0aGUgdHJhbnNwb3J0IHRvIHNlbmRcbm5ldC9yZHMvcmRzLmgtNTgyLVx0ICogcGFydCBvZiBhIG1lc3NhZ2UuICBUaGUgY2FsbGVyIHNlcmlhbGl6ZXMgb24gdGhlIHNlbmRfc2VtIHNvIHRoaXNcbi0tXG5uZXQvcmRzL3Jkcy5oPTk1Nz12b2lkIHJkc19zZW5kX3BhdGhfcmVzZXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNvbm4pO1xubmV0L3Jkcy9yZHMuaDo5NTg6aW50IHJkc19zZW5kX3htaXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKTtcbm5ldC9yZHMvcmRzLmgtOTU5LXN0cnVjdCBzb2NrYWRkcl9pbjtcbi0tXG5uZXQvcmRzL3NlbmQuYy00NC1cbm5ldC9yZHMvc2VuZC5jOjQ1Oi8qIFdoZW4gdHJhbnNtaXR0aW5nIG1lc3NhZ2VzIGluIHJkc19zZW5kX3htaXQsIHdlIG5lZWQgdG8gZW1lcmdlIGZyb21cbm5ldC9yZHMvc2VuZC5jLTQ2LSAqIHRpbWUgdG8gdGltZSBhbmQgYnJpZWZseSByZWxlYXNlIHRoZSBDUFUuIE90aGVyd2lzZSB0aGUgc29mdGxvY2sgd2F0Y2hkb2dcbi0tXG5uZXQvcmRzL3NlbmQuYz01OT1zdGF0aWMgdm9pZCByZHNfc2VuZF9yZW1vdmVfZnJvbV9zb2NrKHN0cnVjdCBsaXN0X2hlYWQgKm1lc3NhZ2VzLCBpbnQgc3RhdHVzKTtcbi0tXG5uZXQvcmRzL3NlbmQuYy02Mi0gKiBSZXNldCB0aGUgc2VuZCBzdGF0ZS4gIENhbGxlcnMgbXVzdCBlbnN1cmUgdGhhdCB0aGlzIGRvZXNuJiMzOTt0IHJhY2Ugd2l0aFxubmV0L3Jkcy9zZW5kLmM6NjM6ICogcmRzX3NlbmRfeG1pdCgpLlxubmV0L3Jkcy9zZW5kLmMtNjQtICovXG4tLVxubmV0L3Jkcy9zZW5kLmM9MTI4PXN0YXRpYyBib29sIHJkc19tcHJkc19jcDBfY2F0Y2h1cChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pXG4tLVxubmV0L3Jkcy9zZW5kLmMtMTg2LSAqL1xubmV0L3Jkcy9zZW5kLmM6MTg3OmludCByZHNfc2VuZF94bWl0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbm5ldC9yZHMvc2VuZC5jLTE4OC17XG4tLVxubmV0L3Jkcy9zZW5kLmMtNTQxLX1cbm5ldC9yZHMvc2VuZC5jOjU0MjpFWFBPUlRfU1lNQk9MX0dQTChyZHNfc2VuZF94bWl0KTtcbm5ldC9yZHMvc2VuZC5jLTU0My1cbi0tXG5uZXQvcmRzL3NlbmQuYz02NzY9c3RhdGljIHZvaWQgcmRzX3NlbmRfcmVtb3ZlX2Zyb21fc29jayhzdHJ1Y3QgbGlzdF9oZWFkICptZXNzYWdlcywgaW50IHN0YXR1cylcbi0tXG5uZXQvcmRzL3NlbmQuYy03NTEtICogbWVzc2FnZXMgdXAgdG8sIGFuZCBpbmNsdWRpbmcsIHRoZSBnaXZlbiBzZXF1ZW5jZSBudW1iZXIuICBNZXNzYWdlcyBhcmVcbm5ldC9yZHMvc2VuZC5jOjc1MjogKiBtb3ZlZCB0byB0aGUgcmV0cmFucyBxdWV1ZSB3aGVuIHJkc19zZW5kX3htaXQgcGlja3MgdGhlbSBvZmYgdGhlIHNlbmRcbm5ldC9yZHMvc2VuZC5jLTc1My0gKiBxdWV1ZS4gVGhpcyBtZWFucyB0aGF0IGluIHRoZSBUQ1AgY2FzZSwgdGhlIG1lc3NhZ2UgbWF5IG5vdCBoYXZlIGJlZW5cbi0tXG5uZXQvcmRzL3NlbmQuYz0xMTQxPWludCByZHNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBwYXlsb2FkX2xlbilcbi0tXG5uZXQvcmRzL3NlbmQuYy0xNDM4LVxubmV0L3Jkcy9zZW5kLmM6MTQzOTpcdHJldCA9IHJkc19zZW5kX3htaXQoY3BhdGgpO1xubmV0L3Jkcy9zZW5kLmMtMTQ0MC1cdGlmIChyZXQgPT0gLUVOT01FTSB8fCByZXQgPT0gLUVBR0FJTikge1xuLS1cbm5ldC9yZHMvdGNwLmM9MTI2PXZvaWQgcmRzX3RjcF9yZXNldF9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jayxcbi0tXG5uZXQvcmRzL3RjcC5jLTE0MC1cdCAqIGNwX3N0YXRlIHRvIHNvbWV0aGluZyBvdGhlciB0aGFuIFJEU19DT05OX1VQLCBhbmQgdGhlblxubmV0L3Jkcy90Y3AuYzoxNDE6XHQgKiB3YWl0aW5nIGZvciBhbnkgZXhpc3RpbmcgdGhyZWFkcyBpbiByZHNfc2VuZF94bWl0IHRvXG5uZXQvcmRzL3RjcC5jLTE0Mi1cdCAqIGNvbXBsZXRlIHJlbGVhc2VfaW5feG1pdCgpLiAoU3Vic2VxdWVudCB0aHJlYWRzIGVudGVyaW5nXG5uZXQvcmRzL3RjcC5jOjE0MzpcdCAqIHJkc19zZW5kX3htaXQoKSB3aWxsIGJhaWwgb24gIXJkc19jb25uX3VwKCkuXG5uZXQvcmRzL3RjcC5jLTE0NC1cdCAqXG4tLVxubmV0L3Jkcy90aHJlYWRzLmM9MTkxPXZvaWQgcmRzX3NlbmRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvcmRzL3RocmVhZHMuYy0xOTktXHRcdGNsZWFyX2JpdChSRFNfTExfU0VORF9GVUxMLCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncyk7XG5uZXQvcmRzL3RocmVhZHMuYzoyMDA6XHRcdHJldCA9IHJkc19zZW5kX3htaXQoY3ApO1xubmV0L3Jkcy90aHJlYWRzLmMtMjAxLVx0XHRjb25kX3Jlc2NoZWQoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTM6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ1NTIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgdGhlIE5vbi1TdGF0aWMgTmF0dXJlIG9mIHJkc1xfc2VuZFxfeG1pdCBhbmQgUmV2aWV3aW5nIFxfXF9yZHNcX2liXF90ZWFyZG93blxfbXIqKgoKUmlnaHQsIGByZHNfc2VuZF94bWl0YCBpcyBjb25maXJtZWQgYXMgbm9uLXN0YXRpYywgd2hpY2ggaXMgd2hhdCBJIHN1c3BlY3RlZC4gTWFrZXMgc2Vuc2UgZ2l2ZW4gaXRzIGxpa2VseSB1c2UgYWNyb3NzIGRpZmZlcmVudCBjb21wb25lbnRzIG9yIG1vZHVsZXMgd2l0aGluIHRoZSBSRFMgZnJhbWV3b3JrLiBOb3csIGxldCYjMzk7cyBqdXN0IHF1aWNrbHkgcGl2b3QgYW5kIHJldmlzaXQgdGhlIGxvZ2ljIHdpdGhpbiBgX19yZHNfaWJfdGVhcmRvd25fbXJgLiBOZWVkIHRvIGJlIHN1cmUgb2YgaG93IHRob3NlIG1lbW9yeSByZWdpc3RyYXRpb25zIGFyZSBiZWluZyBoYW5kbGVkIGR1cmluZyB0ZWFyZG93biwgZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byB0aGUgbm9uLXN0YXRpYyBuYXR1cmUgb2YgYHJkc19zZW5kX3htaXRgLiBUaGVyZSBtaWdodCBiZSBhIHN1YnRsZSBpbnRlcmFjdGlvbiB0aGVyZSB0aGF0IHdhcnJhbnRzIGEgZG91YmxlLWNoZWNrIHRvIG1ha2Ugc3VyZSBhbGwgbWVtb3J5IGlzIGJlaW5nIHJlbGVhc2VkIGdyYWNlZnVsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDEzOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fcmRzX2liX3RlYXJkb3duX21yJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Jkcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9pYl9mcm1yLmM9MzYxPXZvaWQgcmRzX2liX3VucmVnX2ZybXIoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgdW5zaWduZWQgaW50ICpuZnJlZWQsXG4tLVxubmV0L3Jkcy9pYl9mcm1yLmMtMzg0LVx0XHRmcm1yID0gXHUwMDI2aWJtci1cdTAwM2V1LmZybXI7XG5uZXQvcmRzL2liX2ZybXIuYzozODU6XHRcdF9fcmRzX2liX3RlYXJkb3duX21yKGlibXIpO1xubmV0L3Jkcy9pYl9mcm1yLmMtMzg2LVx0XHRpZiAoZnJlZWQgXHUwMDNjIGdvYWwgfHwgZnJtci1cdTAwM2Vmcl9zdGF0ZSA9PSBGUk1SX0lTX1NUQUxFKSB7XG4tLVxubmV0L3Jkcy9pYl9tci5oPTEyOD11MzIgcmRzX2liX2dldF9sa2V5KHZvaWQgKnRyYW5zX3ByaXZhdGUpO1xubmV0L3Jkcy9pYl9tci5oLTEyOS1cbm5ldC9yZHMvaWJfbXIuaDoxMzA6dm9pZCBfX3Jkc19pYl90ZWFyZG93bl9tcihzdHJ1Y3QgcmRzX2liX21yICopO1xubmV0L3Jkcy9pYl9tci5oLTEzMS12b2lkIHJkc19pYl90ZWFyZG93bl9tcihzdHJ1Y3QgcmRzX2liX21yICopO1xuLS1cbm5ldC9yZHMvaWJfcmRtYS5jPTIxND12b2lkIHJkc19pYl9zeW5jX21yKHZvaWQgKnRyYW5zX3ByaXZhdGUsIGludCBkaXJlY3Rpb24pXG4tLVxubmV0L3Jkcy9pYl9yZG1hLmMtMjMzLVxubmV0L3Jkcy9pYl9yZG1hLmM6MjM0OnZvaWQgX19yZHNfaWJfdGVhcmRvd25fbXIoc3RydWN0IHJkc19pYl9tciAqaWJtcilcbm5ldC9yZHMvaWJfcmRtYS5jLTIzNS17XG4tLVxubmV0L3Jkcy9pYl9yZG1hLmM9MjYzPXZvaWQgcmRzX2liX3RlYXJkb3duX21yKHN0cnVjdCByZHNfaWJfbXIgKmlibXIpXG4tLVxubmV0L3Jkcy9pYl9yZG1hLmMtMjY2LVxubmV0L3Jkcy9pYl9yZG1hLmM6MjY3Olx0X19yZHNfaWJfdGVhcmRvd25fbXIoaWJtcik7XG5uZXQvcmRzL2liX3JkbWEuYy0yNjgtXHRpZiAocGlubmVkKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDEzOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MjkyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmluaW5nIHRoZSBSRE1BIFN5bWJvbCBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgX19yZHNfaWJfdGVhcmRvd25fbXJgIGlzIGluZGVlZCBhIG5vbi1zdGF0aWMgc3ltYm9sLiBUaGF0JiMzOTtzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLiBOb3csIGJhc2VkIG9uIHRoaXMsIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZSBmb2xsb3dpbmcgc3ltYm9scy4gSSYjMzk7bSBhaW1pbmcgZm9yIGEgY29uY2lzZSBsaXN0IHRoYXQgY292ZXJzIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgcmVsYXRlZCB0byBSRE1BIGluIHRoZSBSRFMgcHJvdG9jb2wuIEl0IGxvb2tzIGxpa2UgdGhlIHJlbGV2YW50IHN5bWJvbHMgYXJlOgoKKiAgIGByZHNfc2VuZG1zZ2AKKiAgIGByZHNfbWVzc2FnZV9wdXRgCiogICBgcmRzX2Ntc2dfcmRtYV9hcmdzYAoqICAgYHJkc19jbXNnX2F0b21pY2AKKiAgIGByZHNfcmRtYV9mcmVlX29wYAoqICAgYHJkc19hdG9taWNfZnJlZV9vcGAKKiAgIGByZHNfcmRtYV9vcF91bnBpbl9wYWdlc2AKKiAgIGByZHNfYXRvbWljX29wX3VucGluX3BhZ2VgCiogICBgX19yZHNfcHV0X21yX2ZpbmFsYAoqICAgYHJkc19nZXRfbXJgCiogICBgcmRzX2ZyZWVfbXJgCiogICBgcmRzX3NlbmRfeG1pdGAKKiAgIGBfX3Jkc19pYl90ZWFyZG93bl9tcmAKClRoYXQmIzM5O3MgYSB0b3RhbCBvZiAxMyBzeW1ib2xzLiBJdCBzZWVtcyB0byBiZSBhIGNvbXByZWhlbnNpdmUsIHlldCBtYW5hZ2VhYmxlLCBzZXQgdG8gYW5hbHl6ZS4KCk5vdywgYXMgSSB1bmRlcnN0YW5kIGl0LCB0aGUgY3J1Y2lhbCBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIHRoaXMgYXJlIGxpa2VseSB0byBiZToKCiogICBgUkRTYAoqICAgYFJEU19SRE1BYAoqICAgYElORklOSUJBTkRgCiogICBgSU5GSU5JQkFORF9BRERSX1RSQU5TYAoKTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZG91YmxlLWNoZWNrIGlmIGBSRFNfUkRNQWAgaGFzIGFueSBvdGhlciBoaWRkZW4gZGVwZW5kZW5jaWVzLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcgdGhhdCBjb3VsZCBpbXBhY3QgdGhlIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUkRTX1JETUEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcmRzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9LY29uZmlnPTM9Y29uZmlnIFJEU1xuLS1cbm5ldC9yZHMvS2NvbmZpZy05LVxubmV0L3Jkcy9LY29uZmlnOjEwOmNvbmZpZyBSRFNfUkRNQVxubmV0L3Jkcy9LY29uZmlnLTExLVx0dHJpc3RhdGUgXCYjMzQ7UkRTIG92ZXIgSW5maW5pYmFuZFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjE0NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkluaXRpYWwgQXNzZXNzbWVudDogSW5maW5pYmFuZCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHdlJiMzOTt2ZSB0aWNrZWQgb2ZmIHNvbWUgaW5pdGlhbCBkZXBlbmRlbmN5IGNoZWNrcyDigJMgd2Uga25vdyBgUkRTYCwgYElORklOSUJBTkRgLCBhbmQgYElORklOSUJBTkRfQUREUl9UUkFOU2AgYXJlIGhhbmRsZWQuIEJ1dCwgd2l0aCBzb21ldGhpbmcgbGlrZSBJbmZpbmliYW5kLCBJJiMzOTttIGFsd2F5cyBhIGxpdHRsZSBwYXJhbm9pZC4gSXQmIzM5O3MgYSBjcml0aWNhbCBjb21wb25lbnQsIGFuZCBzdWJ0bGUgbWlzY29uZmlndXJhdGlvbnMgY2FuIGxlYWQgdG8gc29tZSB0cnVseSBiYWZmbGluZyBpc3N1ZXMgZG93bnN0cmVhbS4KClNvLCBsZXQmIzM5O3MganVzdCBtYWtlICphYnNvbHV0ZWx5KiBzdXJlIHRoYXQgYElORklOSUJBTkRfQUREUl9UUkFOU2AgaXMgYmVoYXZpbmcgYXMgZXhwZWN0ZWQsIGFuZCB0aGF0IGl0JiMzOTtzIGNvcnJlY3RseSBkZWZpbmVkIHdpdGhpbiB0aGUgZHJpdmVyJiMzOTtzIEtjb25maWcgZmlsZS4gSSYjMzk7bGwgcHVsbCB1cCBgZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWdgIGFuZCBnaXZlIGl0IGEgcXVpY2sgc2Nhbi4gVGhpcyBpcyBtb3JlIG9mIGEgc2FuaXR5IGNoZWNrIHRoYW4gYW55dGhpbmcsIGJ1dCBpdCYjMzk7cyB0aW1lIHdlbGwgc3BlbnQgd2hlbiBkZWFsaW5nIHdpdGggc29tZXRoaW5nIGFzIGNydWNpYWwgYXMgdGhpcy4gSXQmIzM5O3MgYWJvdXQgYmVpbmcgdGhvcm91Z2ggYW5kIG5vdCB0YWtpbmcgYW55dGhpbmcgZm9yIGdyYW50ZWQsIGVzcGVjaWFsbHkgd2l0aCBsb3ctbGV2ZWwgbmV0d29ya2luZyBjb21wb25lbnRzIGxpa2UgSW5maW5pYmFuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTM6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElORklOSUJBTkRfQUREUl9UUkFOUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnPTUxPWNvbmZpZyBJTkZJTklCQU5EX09OX0RFTUFORF9QQUdJTkdcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy02My1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjY0OmNvbmZpZyBJTkZJTklCQU5EX0FERFJfVFJBTlNcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTY1LVx0Ym9vbCBcJiMzNDtSRE1BL0NNXCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNzEtXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo3Mjpjb25maWcgSU5GSU5JQkFORF9BRERSX1RSQU5TX0NPTkZJR0ZTXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy03My1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY2MDQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA0NjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ29uZmlndXJhdGlvbiBhbmQgU3ltYm9sIFZlcmlmaWNhdGlvbiBmb3IgUkRNQSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIHByZXR0eSBzdXJlIGBJTkZJTklCQU5EX0FERFJfVFJBTlNgIGlzIGEgY29uZmlnIG9wdGlvbiByZWxldmFudCB0byB0aGlzLiBKdXN0IHRvIGJlIHRob3JvdWdoLCBJJiMzOTttIHF1aWNrbHkgdmVyaWZ5aW5nIGBSRFNfVENQYCB0b28sIGV2ZW4gdGhvdWdoIGl0IGlzbiYjMzk7dCAqc3RyaWN0bHkqIHJlcXVpcmVkIGZvciB0aGlzIHBhcnRpY3VsYXIgcGF0Y2g7IGVuYWJsaW5nIGl0IGlzIGdlbmVyYWxseSBhIGdvb2QgcHJhY3RpY2UuIFNpbmNlIHRoZSBwYXRjaCB0b3VjaGVzIGBuZXQvcmRzL2liX3JkbWEuY2AsIEkmIzM5O20gZG91YmxlLWNoZWNraW5nIHRoYXQgYENPTkZJR19SRFNfUkRNQWAgaXMsIG9mIGNvdXJzZSwgYSBoYXJkIHJlcXVpcmVtZW50LgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgdmlzaWJpbGl0eSBvZiBhIGZldyBzeW1ib2xzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGByZHNfcmRtYV9vcF91bnBpbl9wYWdlc2AgYW5kIGByZHNfYXRvbWljX29wX3VucGluX3BhZ2VgIGFyZSBhY2Nlc3NpYmxlLiBBaCwgdGhleSYjMzk7cmUgbm9uLXN0YXRpYywgZGVmaW5lZCBpbiBgbmV0L3Jkcy9yZG1hLmNgIGFuZCBkZWNsYXJlZCBpbiBgbmV0L3Jkcy9yZHMuaGAsIHNvIHdlIGFyZSBnb29kIHRoZXJlLiBUaGV5IGRvbiYjMzk7dCB1c2UgYEVYUE9SVF9TWU1CT0xgLCBidXQgdGhlaXIgbm9uLXN0YXRpYyBuYXR1cmUgbWVhbnMgdGhleSYjMzk7cmUgcHJvcGVybHkgc3ltYm9sLWRlZmluZWQuCgpOZXh0LCBJIGNoZWNrZWQgYHJkc19tZXNzYWdlX3VucGluX3dvcmtlcmAsIGJ1dCBpdCYjMzk7cyBzdGF0aWMsIHNvIHdlIGRvbiYjMzk7dCBuZWVkIHRvIGJlIGNvbmNlcm5lZCB3aXRoIGl0LiBBbmQgYHVucGluX3VzZXJfcGFnZXNfZGlydHlfbG9ja2AgaXMgYSBjb3JlIE1NIGZ1bmN0aW9uLCBzbyB3ZSBkb24mIzM5O3QgbmVlZCBpdCBlaXRoZXIuCgpMZXQmIzM5O3MgZG8gYSBmaW5hbCByZXZpZXcgb2YgdGhlIGNvcmUgc3ltYm9scyBJJiMzOTttIGZvY3VzaW5nIG9uOiBgcmRzX3NlbmRtc2dgLCBgcmRzX21lc3NhZ2VfcHV0YCwgYHJkc19jbXNnX3JkbWFfYXJnc2AsIGByZHNfY21zZ19hdG9taWNgLCBgcmRzX3JkbWFfZnJlZV9vcGAsIGByZHNfYXRvbWljX2ZyZWVfb3BgLCBgcmRzX3JkbWFfb3BfdW5waW5fcGFnZXNgLCBgcmRzX2F0b21pY19vcF91bnBpbl9wYWdlYCwgYF9fcmRzX3B1dF9tcl9maW5hbGAsIGByZHNfZ2V0X21yYCwgYHJkc19mcmVlX21yYCwgYHJkc19zZW5kX3htaXRgLCBhbmQgYF9fcmRzX2liX3RlYXJkb3duX21yYC4KCkFscmlnaHQsIGV2ZXJ5dGhpbmcgYXBwZWFycyB0byBiZSBpbiBvcmRlci4KCkp1c3QgYSBsYXN0IHF1aWNrIGNoZWNrIG9uIGBfX3Jkc19pYl90ZWFyZG93bl9tcmAgYW5kIGl0JiMzOTtzIGluIHRoZSBleHBlY3RlZCBsb2NhdGlvbiwgYG5ldC9yZHMvaWJfcmRtYS5jYC4gQWxsIGdvb2QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDEzOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fcmRzX2liX3RlYXJkb3duX21yJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Jkcy9pYl9yZG1hLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9pYl9yZG1hLmM9MjE0PXZvaWQgcmRzX2liX3N5bmNfbXIodm9pZCAqdHJhbnNfcHJpdmF0ZSwgaW50IGRpcmVjdGlvbilcbi0tXG5uZXQvcmRzL2liX3JkbWEuYy0yMzMtXG5uZXQvcmRzL2liX3JkbWEuYzoyMzQ6dm9pZCBfX3Jkc19pYl90ZWFyZG93bl9tcihzdHJ1Y3QgcmRzX2liX21yICppYm1yKVxubmV0L3Jkcy9pYl9yZG1hLmMtMjM1LXtcbi0tXG5uZXQvcmRzL2liX3JkbWEuYz0yNjM9dm9pZCByZHNfaWJfdGVhcmRvd25fbXIoc3RydWN0IHJkc19pYl9tciAqaWJtcilcbi0tXG5uZXQvcmRzL2liX3JkbWEuYy0yNjYtXG5uZXQvcmRzL2liX3JkbWEuYzoyNjc6XHRfX3Jkc19pYl90ZWFyZG93bl9tcihpYm1yKTtcbm5ldC9yZHMvaWJfcmRtYS5jLTI2OC1cdGlmIChwaW5uZWQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc4MjMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqQW5hbHl6aW5nIEZ1bmN0aW9uIFZpc2liaWxpdHkqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggZnVuY3Rpb24gc2NvcGUgaGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGNvbmZpcm1lZDogdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGlzIGRlZmluaXRlbHkgbm9uLXN0YXRpYy4gVGhlIGtleSBxdWVzdGlvbiBub3cgYmVjb21lcywgYXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgaW4gdGhpcyBhcmVhIHRoYXQgbWlnaHQgaGF2ZSB1bmRlcmdvbmUgY2hhbmdlcz8gQSBxdWljayBzY2FuIG9mIHJlbGF0ZWQgZnVuY3Rpb25zIGlzIGluIG9yZGVyIHRvIGJlIGNlcnRhaW4gb2YgdGhlIHNjb3BlIG9mIHRoZXNlIGNoYW5nZXMuCgpBbHJpZ2h0LCBjaGVja2luZyB0aGVzZSBzcGVjaWZpYyBmdW5jdGlvbnM6IGByZHNfbWVzc2FnZV9wdXJnZWAsIHRoYXQmIzM5O3Mgc3RhdGljLiBgcmRzX21lc3NhZ2VfdW5waW5fd29ya2VyYCBhbHNvIHN0YXRpYy4gQW5kIGBfX3Jkc19yZG1hX21hcGAsIHRoYXQgb25lIGlzIGFsc28gc3RhdGljLiBIb3dldmVyLCBgcmRzX3JkbWFfdW51c2VgIGlzIHRoZSBvbmUgdGhhdCYjMzk7cyAqbm90KiBzdGF0aWMuIEdvb2QuIFRoaXMgaXMgdGhlIGRpZmZlcmVuY2UgSSB3YXMgbG9va2luZyBmb3IuIE5vdyBJIGNhbiBwaW5wb2ludCBleGFjdGx5IHdoYXQmIzM5O3MgYmVlbiBjaGFuZ2VkIGFuZCB3aHksIGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGNoYW5nZSBtaWdodCBiZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTM6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmRzX3JkbWFfdW51c2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcmRzL3JkbWEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcmRzL3JkbWEuYz00MDA9aW50IHJkc19mcmVlX21yKHN0cnVjdCByZHNfc29jayAqcnMsIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXG4tLVxubmV0L3Jkcy9yZG1hLmMtNDIxLVx0ICogc28gbm9ib2R5IGVsc2UgZmluZHMgaXQuXG5uZXQvcmRzL3JkbWEuYzo0MjI6XHQgKiBUaGlzIHNob3VsZCBhbHNvIHByZXZlbnQgcmFjZXMgd2l0aCByZHNfcmRtYV91bnVzZS5cbm5ldC9yZHMvcmRtYS5jLTQyMy1cdCAqL1xuLS1cbm5ldC9yZHMvcmRtYS5jLTQ0NS0gKi9cbm5ldC9yZHMvcmRtYS5jOjQ0Njp2b2lkIHJkc19yZG1hX3VudXNlKHN0cnVjdCByZHNfc29jayAqcnMsIHUzMiByX2tleSwgaW50IGZvcmNlKVxubmV0L3Jkcy9yZG1hLmMtNDQ3LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgzMTMKCQkJCQkJCW91dHB1dDogMzA2CgkJCQkJCQl0aG91Z2h0czogMzMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEN1cnJlbnQgVGhpbmtpbmc6IFJEUyBSRE1BIE9wdGltaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgaW5jb3Jwb3JhdGUgYHJkc19yZG1hX3VudXNlYCBpbnRvIHRoZSBsaXN0IG9mIGNyaXRpY2FsIHN5bWJvbHMgd2UmIzM5O3JlIHRyYWNraW5nLiBJIHdhbnQgdG8gaGF2ZSBhIGNvbXByZWhlbnNpdmUgb3ZlcnZpZXcgb2YgdGhlIGtleSBjb21wb25lbnRzIGludm9sdmVkIGluIHRoaXMgUkRTIFJETUEgbW9kaWZpY2F0aW9uLgoKU28sIHRoZSBkZWZpbml0aXZlIGxpc3Qgb2Ygc3ltYm9scyBJJiMzOTttIGZvY3VzaW5nIG9uIGluY2x1ZGVzOgoqICAgYHJkc19zZW5kbXNnYAoqICAgYHJkc19tZXNzYWdlX3B1dGAKKiAgIGByZHNfY21zZ19yZG1hX2FyZ3NgCiogICBgcmRzX2Ntc2dfYXRvbWljYAoqICAgYHJkc19yZG1hX2ZyZWVfb3BgCiogICBgcmRzX2F0b21pY19mcmVlX29wYAoqICAgYHJkc19yZG1hX29wX3VucGluX3BhZ2VzYAoqICAgYHJkc19hdG9taWNfb3BfdW5waW5fcGFnZWAKKiAgIGBfX3Jkc19wdXRfbXJfZmluYWxgCiogICBgcmRzX2dldF9tcmAKKiAgIGByZHNfZnJlZV9tcmAKKiAgIGByZHNfc2VuZF94bWl0YAoqICAgYF9fcmRzX2liX3RlYXJkb3duX21yYAoqICAgYHJkc19yZG1hX3VudXNlYAoKQW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSBlc3NlbnRpYWwgZm9yIGNvbnRleHQgYXJlOgoqICAgYFJEU2AKKiAgIGBSRFNfUkRNQWAKKiAgIGBJTkZJTklCQU5EYAoqICAgYElORklOSUJBTkRfQUREUl9UUkFOU2AKCkZyb20gd2hhdCBJIGdhdGhlciwgdGhpcyBwYXRjaCBhZGRyZXNzZXMgdGhlIHdheSB0aGUgUkRTIHN1YnN5c3RlbSBkZWFscyB3aXRoIE1lbW9yeSBSZWdpb25zIChNUnMpIGFuZCBSRE1BIG9wZXJhdGlvbnMuIENydWNpYWxseSwgaXQmIzM5O3MgZGVmZXJyaW5nIHRoZSB1bnBpbm5pbmcgb2YgdXNlciBwYWdlcyB0byBhIHdvcmtxdWV1ZSB3aGVuIHRoZSBmaW5hbCAmIzM0O3B1dCYjMzQ7IGhhcHBlbnMgaW4gYW4gYXRvbWljIGNvbnRleHQuIFRoaXMgaXMgYSB2ZXJ5IHRhcmdldGVkIGZpeCwgYWRkcmVzc2luZyBwb3RlbnRpYWwgc2xlZXAtaW4tYXRvbWljIGlzc3VlcywgYSB3ZWxsLWtub3duIHZ1bG5lcmFiaWxpdHkuIFRoZSBpbXBsZW1lbnRhdGlvbiBhbHNvIGVuc3VyZXMgc29ja2V0IHJlZmVyZW5jZXMgYXJlIGhlbGQgd2hlbiBNUnMgYXJlIGNyZWF0ZWQsIHByZXZlbnRpbmcgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcy4KClRoaXMgaXMgYSBmdW5kYW1lbnRhbCBzaGlmdCBpbiB0aGUgY29yZSBSRFMgbG9naWMsIHdoaWNoIEkga25vdyBpcyBhY2Nlc3NpYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSXQgaXMgYSBmdW5jdGlvbmFsIHBhdGNoIHRoYXQgY291bGQgaGF2ZSBmYXItcmVhY2hpbmcgaW1wYWN0cy4KCkkgYW0gcmVhZHkgdG8gbW92ZSBmb3J3YXJkLCBhbmQgSSB3aWxsIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTM6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JEUyYjMzQ7LAogICAgJiMzNDtSRFNfUkRNQSYjMzQ7LAogICAgJiMzNDtJTkZJTklCQU5EJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkRfQUREUl9UUkFOUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Jkc19zZW5kbXNnJiMzNDssCiAgICAmIzM0O3Jkc19tZXNzYWdlX3B1dCYjMzQ7LAogICAgJiMzNDtyZHNfY21zZ19yZG1hX2FyZ3MmIzM0OywKICAgICYjMzQ7cmRzX2Ntc2dfYXRvbWljJiMzNDssCiAgICAmIzM0O3Jkc19yZG1hX2ZyZWVfb3AmIzM0OywKICAgICYjMzQ7cmRzX2F0b21pY19mcmVlX29wJiMzNDssCiAgICAmIzM0O3Jkc19yZG1hX29wX3VucGluX3BhZ2VzJiMzNDssCiAgICAmIzM0O3Jkc19hdG9taWNfb3BfdW5waW5fcGFnZSYjMzQ7LAogICAgJiMzNDtfX3Jkc19wdXRfbXJfZmluYWwmIzM0OywKICAgICYjMzQ7cmRzX2dldF9tciYjMzQ7LAogICAgJiMzNDtyZHNfZnJlZV9tciYjMzQ7LAogICAgJiMzNDtyZHNfc2VuZF94bWl0JiMzNDssCiAgICAmIzM0O19fcmRzX2liX3RlYXJkb3duX21yJiMzNDssCiAgICAmIzM0O3Jkc19yZG1hX3VudXNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSRFMgKFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMpIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGhvdyBtZW1vcnkgcmVnaW9ucyAoTVIpIGFuZCBSRE1BIG9wZXJhdGlvbnMgYXJlIGhhbmRsZWQuIEl0IGRlZmVycyB0aGUgdW5waW5uaW5nIG9mIHVzZXIgcGFnZXMgdG8gYSB3b3JrcXVldWUgaWYgdGhlIGZpbmFsIHB1dCBoYXBwZW5zIGluIGF0b21pYyBjb250ZXh0LCBmaXhpbmcgcG90ZW50aWFsIHNsZWVwLWluLWF0b21pYyBidWdzLiBJdCBhbHNvIGFkZHMgYSBzb2NrZXQgcmVmZXJlbmNlIGhvbGQgd2hlbiBhbiBNUiBpcyBjcmVhdGVkIHRvIGVuc3VyZSB0aGUgc29ja2V0IG91dGxpdmVzIHRoZSBNUiwgZml4aW5nIGEgdXNlLWFmdGVyLWZyZWUuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBSRFMgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JEUyYjMzQ7LAogICAgJiMzNDtSRFNfUkRNQSYjMzQ7LAogICAgJiMzNDtJTkZJTklCQU5EJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkRfQUREUl9UUkFOUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Jkc19zZW5kbXNnJiMzNDssCiAgICAmIzM0O3Jkc19tZXNzYWdlX3B1dCYjMzQ7LAogICAgJiMzNDtyZHNfY21zZ19yZG1hX2FyZ3MmIzM0OywKICAgICYjMzQ7cmRzX2Ntc2dfYXRvbWljJiMzNDssCiAgICAmIzM0O3Jkc19yZG1hX2ZyZWVfb3AmIzM0OywKICAgICYjMzQ7cmRzX2F0b21pY19mcmVlX29wJiMzNDssCiAgICAmIzM0O3Jkc19yZG1hX29wX3VucGluX3BhZ2VzJiMzNDssCiAgICAmIzM0O3Jkc19hdG9taWNfb3BfdW5waW5fcGFnZSYjMzQ7LAogICAgJiMzNDtfX3Jkc19wdXRfbXJfZmluYWwmIzM0OywKICAgICYjMzQ7cmRzX2dldF9tciYjMzQ7LAogICAgJiMzNDtyZHNfZnJlZV9tciYjMzQ7LAogICAgJiMzNDtyZHNfc2VuZF94bWl0JiMzNDssCiAgICAmIzM0O19fcmRzX2liX3RlYXJkb3duX21yJiMzNDssCiAgICAmIzM0O3Jkc19yZG1hX3VudXNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSRFMgKFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMpIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGhvdyBtZW1vcnkgcmVnaW9ucyAoTVIpIGFuZCBSRE1BIG9wZXJhdGlvbnMgYXJlIGhhbmRsZWQuIEl0IGRlZmVycyB0aGUgdW5waW5uaW5nIG9mIHVzZXIgcGFnZXMgdG8gYSB3b3JrcXVldWUgaWYgdGhlIGZpbmFsIHB1dCBoYXBwZW5zIGluIGF0b21pYyBjb250ZXh0LCBmaXhpbmcgcG90ZW50aWFsIHNsZWVwLWluLWF0b21pYyBidWdzLiBJdCBhbHNvIGFkZHMgYSBzb2NrZXQgcmVmZXJlbmNlIGhvbGQgd2hlbiBhbiBNUiBpcyBjcmVhdGVkIHRvIGVuc3VyZSB0aGUgc29ja2V0IG91dGxpdmVzIHRoZSBNUiwgZml4aW5nIGEgdXNlLWFmdGVyLWZyZWUuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBSRFMgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzowMjoyOS40NTc1MDc5OThaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzUzNTgyODMyNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUkRTXCIsXG4gICAgXCJSRFNfUkRNQVwiLFxuICAgIFwiSU5GSU5JQkFORFwiLFxuICAgIFwiSU5GSU5JQkFORF9BRERSX1RSQU5TXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmRzX3NlbmRtc2dcIixcbiAgICBcInJkc19tZXNzYWdlX3B1dFwiLFxuICAgIFwicmRzX2Ntc2dfcmRtYV9hcmdzXCIsXG4gICAgXCJyZHNfY21zZ19hdG9taWNcIixcbiAgICBcInJkc19yZG1hX2ZyZWVfb3BcIixcbiAgICBcInJkc19hdG9taWNfZnJlZV9vcFwiLFxuICAgIFwicmRzX3JkbWFfb3BfdW5waW5fcGFnZXNcIixcbiAgICBcInJkc19hdG9taWNfb3BfdW5waW5fcGFnZVwiLFxuICAgIFwiX19yZHNfcHV0X21yX2ZpbmFsXCIsXG4gICAgXCJyZHNfZ2V0X21yXCIsXG4gICAgXCJyZHNfZnJlZV9tclwiLFxuICAgIFwicmRzX3NlbmRfeG1pdFwiLFxuICAgIFwiX19yZHNfaWJfdGVhcmRvd25fbXJcIixcbiAgICBcInJkc19yZG1hX3VudXNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJEUyAoUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cykgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgaG93IG1lbW9yeSByZWdpb25zIChNUikgYW5kIFJETUEgb3BlcmF0aW9ucyBhcmUgaGFuZGxlZC4gSXQgZGVmZXJzIHRoZSB1bnBpbm5pbmcgb2YgdXNlciBwYWdlcyB0byBhIHdvcmtxdWV1ZSBpZiB0aGUgZmluYWwgcHV0IGhhcHBlbnMgaW4gYXRvbWljIGNvbnRleHQsIGZpeGluZyBwb3RlbnRpYWwgc2xlZXAtaW4tYXRvbWljIGJ1Z3MuIEl0IGFsc28gYWRkcyBhIHNvY2tldCByZWZlcmVuY2UgaG9sZCB3aGVuIGFuIE1SIGlzIGNyZWF0ZWQgdG8gZW5zdXJlIHRoZSBzb2NrZXQgb3V0bGl2ZXMgdGhlIE1SLCBmaXhpbmcgYSB1c2UtYWZ0ZXItZnJlZS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIFJEUyBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTM6MDI6MjkuNDU3NTEzODE4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njk5Mzk5OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3OWE2M2Y2MjJjNWRjMTVlMThiY2ZmNTE4OTZlNjkzNjEwNWQ1ZTg5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDMxIDEzOjAyOjI4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9yZHMvaWJfcmRtYS5jIGIvbmV0L3Jkcy9pYl9yZG1hLmNcXG5pbmRleCA5NTk0ZWEyNDVmN2ZlLi5kYjdlOTJlN2JkMjlmIDEwMDY0NFxcbi0tLSBhL25ldC9yZHMvaWJfcmRtYS5jXFxuKysrIGIvbmV0L3Jkcy9pYl9yZG1hLmNcXG5AQCAtMjUxLDkgKzI1MSw3IEBAIHZvaWQgX19yZHNfaWJfdGVhcmRvd25fbXIoc3RydWN0IHJkc19pYl9tciAqaWJtcilcXG4gXFxuIFxcdFxcdFxcdC8qIEZJWE1FIHdlIG5lZWQgYSB3YXkgdG8gdGVsbCBhIHIvdyBNUlxcbiBcXHRcXHRcXHQgKiBmcm9tIGEgci9vIE1SICovXFxuLVxcdFxcdFxcdFdBUk5fT04oIXBhZ2UtXFx1MDAzZW1hcHBpbmcgXFx1MDAyNlxcdTAwMjYgaXJxc19kaXNhYmxlZCgpKTtcXG4tXFx0XFx0XFx0c2V0X3BhZ2VfZGlydHkocGFnZSk7XFxuLVxcdFxcdFxcdHB1dF9wYWdlKHBhZ2UpO1xcbitcXHRcXHRcXHR1bnBpbl91c2VyX3BhZ2VzX2RpcnR5X2xvY2soXFx1MDAyNnBhZ2UsIDEsIHRydWUpO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGtmcmVlKGlibXItXFx1MDAzZXNnKTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9yZHMvbWVzc2FnZS5jIGIvbmV0L3Jkcy9tZXNzYWdlLmNcXG5pbmRleCA3ZmViMGViNjUzN2RiLi5mMjVmMjU5MjU4NmY3IDEwMDY0NFxcbi0tLSBhL25ldC9yZHMvbWVzc2FnZS5jXFxuKysrIGIvbmV0L3Jkcy9tZXNzYWdlLmNcXG5AQCAtMTgyLDYgKzE4MiwxOSBAQCBzdGF0aWMgdm9pZCByZHNfbWVzc2FnZV9wdXJnZShzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKVxcbiBcXHRcXHRrcmVmX3B1dChcXHUwMDI2cm0tXFx1MDAzZWF0b21pYy5vcF9yZG1hX21yLVxcdTAwM2VyX2tyZWYsIF9fcmRzX3B1dF9tcl9maW5hbCk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHJkc19tZXNzYWdlX3VucGluX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuK3tcXG4rXFx0c3RydWN0IHJkc19tZXNzYWdlICpybSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcmRzX21lc3NhZ2UsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIG1fdW5waW5fd29yayk7XFxuK1xcbitcXHRpZiAocm0tXFx1MDAzZXJkbWEub3BfdW5waW5fZGVmZXJyZWQpXFxuK1xcdFxcdHJkc19yZG1hX29wX3VucGluX3BhZ2VzKFxcdTAwMjZybS1cXHUwMDNlcmRtYSk7XFxuK1xcdGlmIChybS1cXHUwMDNlYXRvbWljLm9wX3VucGluX2RlZmVycmVkKVxcbitcXHRcXHRyZHNfYXRvbWljX29wX3VucGluX3BhZ2UoXFx1MDAyNnJtLVxcdTAwM2VhdG9taWMpO1xcbitcXG4rXFx0a2ZyZWUocm0pO1xcbit9XFxuK1xcbiB2b2lkIHJkc19tZXNzYWdlX3B1dChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKVxcbiB7XFxuIFxcdHJkc2RlYnVnKFxcXCJwdXQgcm0gJXAgcmVmICVkXFxcXG5cXFwiLCBybSwgcmVmY291bnRfcmVhZChcXHUwMDI2cm0tXFx1MDAzZW1fcmVmY291bnQpKTtcXG5AQCAtMTg5LDggKzIwMiwyMSBAQCB2b2lkIHJkc19tZXNzYWdlX3B1dChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKVxcbiBcXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZybS1cXHUwMDNlbV9yZWZjb3VudCkpIHtcXG4gXFx0XFx0QlVHX09OKCFsaXN0X2VtcHR5KFxcdTAwMjZybS1cXHUwMDNlbV9zb2NrX2l0ZW0pKTtcXG4gXFx0XFx0QlVHX09OKCFsaXN0X2VtcHR5KFxcdTAwMjZybS1cXHUwMDNlbV9jb25uX2l0ZW0pKTtcXG4rXFxuIFxcdFxcdHJkc19tZXNzYWdlX3B1cmdlKHJtKTtcXG4gXFxuK1xcdFxcdC8qIEEgZmluYWwgcHV0IGluIGF0b21pYyBjb250ZXh0IGNhbm5vdCBkaXJ0eSB0aGUgb3BzJ1xcbitcXHRcXHQgKiB1c2VyIHBhZ2VzIG9uIHVucGluLCBzbyByZHNfcmRtYV9mcmVlX29wKCkgYW5kXFxuK1xcdFxcdCAqIHJkc19hdG9taWNfZnJlZV9vcCgpIGRlZmVycmVkIGl0LiAgRmluaXNoIHRoZSB1bnBpbixcXG4rXFx0XFx0ICogYW5kIHRoZSBmcmVlLCBmcm9tIHByb2Nlc3MgY29udGV4dC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChybS1cXHUwMDNlcmRtYS5vcF91bnBpbl9kZWZlcnJlZCB8fFxcbitcXHRcXHQgICAgcm0tXFx1MDAzZWF0b21pYy5vcF91bnBpbl9kZWZlcnJlZCkge1xcbitcXHRcXHRcXHRJTklUX1dPUksoXFx1MDAyNnJtLVxcdTAwM2VtX3VucGluX3dvcmssIHJkc19tZXNzYWdlX3VucGluX3dvcmtlcik7XFxuK1xcdFxcdFxcdHF1ZXVlX3dvcmsocmRzX3dxLCBcXHUwMDI2cm0tXFx1MDAzZW1fdW5waW5fd29yayk7XFxuK1xcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0a2ZyZWUocm0pO1xcbiBcXHR9XFxuIH1cXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9yZG1hLmMgYi9uZXQvcmRzL3JkbWEuY1xcbmluZGV4IDYxZmI2ZTQ1MjgxYmYuLjA3ODA5MGQyOTJmYTMgMTAwNjQ0XFxuLS0tIGEvbmV0L3Jkcy9yZG1hLmNcXG4rKysgYi9uZXQvcmRzL3JkbWEuY1xcbkBAIC0xMTcsNiArMTE3LDcgQEAgdm9pZCBfX3Jkc19wdXRfbXJfZmluYWwoc3RydWN0IGtyZWYgKmtyZWYpXFxuIFxcdHN0cnVjdCByZHNfbXIgKm1yID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCByZHNfbXIsIHJfa3JlZik7XFxuIFxcbiBcXHRyZHNfZGVzdHJveV9tcihtcik7XFxuK1xcdHNvY2tfcHV0KHJkc19yc190b19zayhtci1cXHUwMDNlcl9zb2NrKSk7XFxuIFxcdGtmcmVlKG1yKTtcXG4gfVxcbiBcXG5AQCAtMjQzLDcgKzI0NCwxMSBAQCBzdGF0aWMgaW50IF9fcmRzX3JkbWFfbWFwKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfZ2V0X21yX2FyZ3MgKmFyZ3MsXFxuIFxcdGtyZWZfaW5pdChcXHUwMDI2bXItXFx1MDAzZXJfa3JlZik7XFxuIFxcdFJCX0NMRUFSX05PREUoXFx1MDAyNm1yLVxcdTAwM2VyX3JiX25vZGUpO1xcbiBcXHRtci1cXHUwMDNlcl90cmFucyA9IHJzLVxcdTAwM2Vyc190cmFuc3BvcnQ7XFxuK1xcdC8qIFRoZSBNUiBjYW4gb3V0bGl2ZSBpdHMgc29ja2V0OiBhIHNvY2tldCByZWZlcmVuY2UgaXMgaGVsZFxcbitcXHQgKiB1bnRpbCB0aGUgZmluYWwga3JlZiBpcyBkcm9wcGVkIGluIF9fcmRzX3B1dF9tcl9maW5hbCgpLlxcbitcXHQgKi9cXG4gXFx0bXItXFx1MDAzZXJfc29jayA9IHJzO1xcbitcXHRzb2NrX2hvbGQocmRzX3JzX3RvX3NrKHJzKSk7XFxuIFxcbiBcXHRpZiAoYXJncy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBSRFNfUkRNQV9VU0VfT05DRSlcXG4gXFx0XFx0bXItXFx1MDAzZXJfdXNlX29uY2UgPSAxO1xcbkBAIC00ODMsMjIgKzQ4OCwzNiBAQCB2b2lkIHJkc19yZG1hX3VudXNlKHN0cnVjdCByZHNfc29jayAqcnMsIHUzMiByX2tleSwgaW50IGZvcmNlKVxcbiBcXHRcXHRrcmVmX3B1dChcXHUwMDI2bXItXFx1MDAzZXJfa3JlZiwgX19yZHNfcHV0X21yX2ZpbmFsKTtcXG4gfVxcbiBcXG4tdm9pZCByZHNfcmRtYV9mcmVlX29wKHN0cnVjdCBybV9yZG1hX29wICpybylcXG4rdm9pZCByZHNfcmRtYV9vcF91bnBpbl9wYWdlcyhzdHJ1Y3Qgcm1fcmRtYV9vcCAqcm8pXFxuIHtcXG4gXFx0dW5zaWduZWQgaW50IGk7XFxuIFxcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgcm8tXFx1MDAzZW9wX25lbnRzOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBzZ19wYWdlKFxcdTAwMjZyby1cXHUwMDNlb3Bfc2dbaV0pO1xcbitcXG4rXFx0XFx0LyogTWFyayBwYWdlIGRpcnR5IGlmIGl0IHdhcyBwb3NzaWJseSBtb2RpZmllZCwgd2hpY2hcXG4rXFx0XFx0ICogaXMgdGhlIGNhc2UgZm9yIGEgUkRNQV9SRUFEIHdoaWNoIGNvcGllcyBmcm9tIHJlbW90ZVxcbitcXHRcXHQgKiB0byBsb2NhbCBtZW1vcnlcXG4rXFx0XFx0ICovXFxuK1xcdFxcdHVucGluX3VzZXJfcGFnZXNfZGlydHlfbG9jayhcXHUwMDI2cGFnZSwgMSwgIXJvLVxcdTAwM2VvcF93cml0ZSk7XFxuK1xcdH1cXG4rfVxcbitcXG4rdm9pZCByZHNfcmRtYV9mcmVlX29wKHN0cnVjdCBybV9yZG1hX29wICpybylcXG4re1xcbiBcXHRpZiAocm8tXFx1MDAzZW9wX29kcF9tcikge1xcbiBcXHRcXHRrcmVmX3B1dChcXHUwMDI2cm8tXFx1MDAzZW9wX29kcF9tci1cXHUwMDNlcl9rcmVmLCBfX3Jkc19wdXRfbXJfZmluYWwpO1xcbitcXHR9IGVsc2UgaWYgKGluX3Rhc2soKSB8fCByby1cXHUwMDNlb3Bfd3JpdGUpIHtcXG4rXFx0XFx0LyogQW4gUkRNQSB3cml0ZSdzIHBhZ2VzIGFyZSBvbmx5IHJlYWQgYnkgdGhlIHJlbW90ZVxcbitcXHRcXHQgKiBzaWRlOyB1bnBpbm5pbmcgd2l0aG91dCBkaXJ0eWluZyBkb2VzIG5vdCBzbGVlcC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJkc19yZG1hX29wX3VucGluX3BhZ2VzKHJvKTtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHJvLVxcdTAwM2VvcF9uZW50czsgaSsrKSB7XFxuLVxcdFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gc2dfcGFnZShcXHUwMDI2cm8tXFx1MDAzZW9wX3NnW2ldKTtcXG4tXFxuLVxcdFxcdFxcdC8qIE1hcmsgcGFnZSBkaXJ0eSBpZiBpdCB3YXMgcG9zc2libHkgbW9kaWZpZWQsIHdoaWNoXFxuLVxcdFxcdFxcdCAqIGlzIHRoZSBjYXNlIGZvciBhIFJETUFfUkVBRCB3aGljaCBjb3BpZXMgZnJvbSByZW1vdGVcXG4tXFx0XFx0XFx0ICogdG8gbG9jYWwgbWVtb3J5XFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHR1bnBpbl91c2VyX3BhZ2VzX2RpcnR5X2xvY2soXFx1MDAyNnBhZ2UsIDEsICFyby1cXHUwMDNlb3Bfd3JpdGUpO1xcbi1cXHRcXHR9XFxuK1xcdFxcdC8qIERpcnR5aW5nIHRoZSBwYWdlcyBvbiB1bnBpbiBjYW4gc2xlZXA7IGxlYXZlIHRoZW1cXG4rXFx0XFx0ICogcGlubmVkIGFuZCBoYXZlIHJkc19tZXNzYWdlX3B1dCgpIGZpbmlzaCB0aGUgdW5waW5cXG4rXFx0XFx0ICogZnJvbSBwcm9jZXNzIGNvbnRleHQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRyby1cXHUwMDNlb3BfdW5waW5fZGVmZXJyZWQgPSAxO1xcbiBcXHR9XFxuIFxcbiBcXHRrZnJlZShyby1cXHUwMDNlb3Bfbm90aWZpZXIpO1xcbkBAIC01MDcsNyArNTI2LDcgQEAgdm9pZCByZHNfcmRtYV9mcmVlX29wKHN0cnVjdCBybV9yZG1hX29wICpybylcXG4gXFx0cm8tXFx1MDAzZW9wX29kcF9tciA9IE5VTEw7XFxuIH1cXG4gXFxuLXZvaWQgcmRzX2F0b21pY19mcmVlX29wKHN0cnVjdCBybV9hdG9taWNfb3AgKmFvKVxcbit2b2lkIHJkc19hdG9taWNfb3BfdW5waW5fcGFnZShzdHJ1Y3Qgcm1fYXRvbWljX29wICphbylcXG4ge1xcbiBcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHNnX3BhZ2UoYW8tXFx1MDAzZW9wX3NnKTtcXG4gXFxuQEAgLTUxNSw2ICs1MzQsMTkgQEAgdm9pZCByZHNfYXRvbWljX2ZyZWVfb3Aoc3RydWN0IHJtX2F0b21pY19vcCAqYW8pXFxuIFxcdCAqIGlzIHRoZSBjYXNlIGZvciBhIFJETUFfUkVBRCB3aGljaCBjb3BpZXMgZnJvbSByZW1vdGVcXG4gXFx0ICogdG8gbG9jYWwgbWVtb3J5ICovXFxuIFxcdHVucGluX3VzZXJfcGFnZXNfZGlydHlfbG9jayhcXHUwMDI2cGFnZSwgMSwgdHJ1ZSk7XFxuK31cXG4rXFxuK3ZvaWQgcmRzX2F0b21pY19mcmVlX29wKHN0cnVjdCBybV9hdG9taWNfb3AgKmFvKVxcbit7XFxuK1xcdGlmIChpbl90YXNrKCkpIHtcXG4rXFx0XFx0cmRzX2F0b21pY19vcF91bnBpbl9wYWdlKGFvKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogRGlydHlpbmcgdGhlIHBhZ2Ugb24gdW5waW4gY2FuIHNsZWVwOyBsZWF2ZSBpdFxcbitcXHRcXHQgKiBwaW5uZWQgYW5kIGhhdmUgcmRzX21lc3NhZ2VfcHV0KCkgZmluaXNoIHRoZSB1bnBpblxcbitcXHRcXHQgKiBmcm9tIHByb2Nlc3MgY29udGV4dC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGFvLVxcdTAwM2VvcF91bnBpbl9kZWZlcnJlZCA9IDE7XFxuK1xcdH1cXG4gXFxuIFxcdGtmcmVlKGFvLVxcdTAwM2VvcF9ub3RpZmllcik7XFxuIFxcdGFvLVxcdTAwM2VvcF9ub3RpZmllciA9IE5VTEw7XFxuQEAgLTczMiw3ICs3NjQsMTIgQEAgaW50IHJkc19jbXNnX3JkbWFfYXJncyhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLFxcbiBcXHRcXHRcXHRSQl9DTEVBUl9OT0RFKFxcdTAwMjZsb2NhbF9vZHBfbXItXFx1MDAzZXJfcmJfbm9kZSk7XFxuIFxcdFxcdFxcdGtyZWZfaW5pdChcXHUwMDI2bG9jYWxfb2RwX21yLVxcdTAwM2VyX2tyZWYpO1xcbiBcXHRcXHRcXHRsb2NhbF9vZHBfbXItXFx1MDAzZXJfdHJhbnMgPSBycy1cXHUwMDNlcnNfdHJhbnNwb3J0O1xcbitcXHRcXHRcXHQvKiBUaGUgTVIgY2FuIG91dGxpdmUgaXRzIHNvY2tldDogYSBzb2NrZXRcXG4rXFx0XFx0XFx0ICogcmVmZXJlbmNlIGlzIGhlbGQgdW50aWwgdGhlIGZpbmFsIGtyZWYgaXNcXG4rXFx0XFx0XFx0ICogZHJvcHBlZCBpbiBfX3Jkc19wdXRfbXJfZmluYWwoKS5cXG4rXFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdGxvY2FsX29kcF9tci1cXHUwMDNlcl9zb2NrID0gcnM7XFxuK1xcdFxcdFxcdHNvY2tfaG9sZChyZHNfcnNfdG9fc2socnMpKTtcXG4gXFx0XFx0XFx0bG9jYWxfb2RwX21yLVxcdTAwM2VyX3RyYW5zX3ByaXZhdGUgPVxcbiBcXHRcXHRcXHRcXHRycy1cXHUwMDNlcnNfdHJhbnNwb3J0LVxcdTAwM2VnZXRfbXIoXFxuIFxcdFxcdFxcdFxcdFxcdE5VTEwsIDAsIHJzLCBcXHUwMDI2bG9jYWxfb2RwX21yLVxcdTAwM2VyX2tleSwgTlVMTCxcXG5AQCAtNzQxLDcgKzc3OCw5IEBAIGludCByZHNfY21zZ19yZG1hX2FyZ3Moc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcXG4gXFx0XFx0XFx0XFx0cmV0ID0gUFRSX0VSUihsb2NhbF9vZHBfbXItXFx1MDAzZXJfdHJhbnNfcHJpdmF0ZSk7XFxuIFxcdFxcdFxcdFxcdHJkc2RlYnVnKFxcXCJnZXRfbXIgcmV0ICVkICVwXFxcXFxcXCJcXFwiLCByZXQsXFxuIFxcdFxcdFxcdFxcdFxcdCBsb2NhbF9vZHBfbXItXFx1MDAzZXJfdHJhbnNfcHJpdmF0ZSk7XFxuLVxcdFxcdFxcdFxcdGtmcmVlKGxvY2FsX29kcF9tcik7XFxuK1xcdFxcdFxcdFxcdGxvY2FsX29kcF9tci1cXHUwMDNlcl90cmFuc19wcml2YXRlID0gTlVMTDtcXG4rXFx0XFx0XFx0XFx0a3JlZl9wdXQoXFx1MDAyNmxvY2FsX29kcF9tci1cXHUwMDNlcl9rcmVmLFxcbitcXHRcXHRcXHRcXHRcXHQgX19yZHNfcHV0X21yX2ZpbmFsKTtcXG4gXFx0XFx0XFx0XFx0cmV0ID0gLUVPUE5PVFNVUFA7XFxuIFxcdFxcdFxcdFxcdGdvdG8gb3V0X3BhZ2VzO1xcbiBcXHRcXHRcXHR9XFxuZGlmZiAtLWdpdCBhL25ldC9yZHMvcmRzLmggYi9uZXQvcmRzL3Jkcy5oXFxuaW5kZXggNmUwNzkwZTRiNTcwMy4uMmRiNDk1NzNkYWNkNSAxMDA2NDRcXG4tLS0gYS9uZXQvcmRzL3Jkcy5oXFxuKysrIGIvbmV0L3Jkcy9yZHMuaFxcbkBAIC0zMjAsNyArMzIwLDEwIEBAIHN0cnVjdCByZHNfbXIge1xcbiBcXHR1bnNpZ25lZCBpbnRcXHRcXHRyX2ludmFsaWRhdGU6MTtcXG4gXFx0dW5zaWduZWQgaW50XFx0XFx0cl93cml0ZToxO1xcbiBcXG4tXFx0c3RydWN0IHJkc19zb2NrXFx0XFx0KnJfc29jazsgLyogYmFjayBwb2ludGVyIHRvIHRoZSBzb2NrZXQgdGhhdCBvd25zIHVzICovXFxuK1xcdHN0cnVjdCByZHNfc29ja1xcdFxcdCpyX3NvY2s7IC8qIHNvY2tldCB0aGF0IG93bnMgdXM7IGNvdW50ZWRcXG4rXFx0XFx0XFx0XFx0XFx0ICAqIHJlZmVyZW5jZSwgZHJvcHBlZCBieVxcbitcXHRcXHRcXHRcXHRcXHQgICogX19yZHNfcHV0X21yX2ZpbmFsKClcXG4rXFx0XFx0XFx0XFx0XFx0ICAqL1xcbiBcXHRzdHJ1Y3QgcmRzX3RyYW5zcG9ydFxcdCpyX3RyYW5zO1xcbiBcXHR2b2lkXFx0XFx0XFx0KnJfdHJhbnNfcHJpdmF0ZTtcXG4gfTtcXG5AQCAtNDQ1LDYgKzQ0OCwxMiBAQCBzdHJ1Y3QgcmRzX21lc3NhZ2Uge1xcbiBcXG4gXFx0dm9pZFxcdFxcdFxcdCptX2ZpbmFsX29wO1xcbiBcXG4rXFx0LyogVW5waW5zIHRoZSBvcHMnIHVzZXIgcGFnZXMgYW5kIGZyZWVzIHRoZSBtZXNzYWdlIGZyb21cXG4rXFx0ICogcHJvY2VzcyBjb250ZXh0IHdoZW4gdGhlIGZpbmFsIHB1dCBoYXBwZW5zIGluIGF0b21pY1xcbitcXHQgKiBjb250ZXh0OiBkaXJ0eWluZyB0aGUgcGFnZXMgb24gdW5waW4gY2FuIHNsZWVwLlxcbitcXHQgKi9cXG4rXFx0c3RydWN0IHdvcmtfc3RydWN0XFx0bV91bnBpbl93b3JrO1xcbitcXG4gXFx0c3RydWN0IHtcXG4gXFx0XFx0c3RydWN0IHJtX2F0b21pY19vcCB7XFxuIFxcdFxcdFxcdGludFxcdFxcdFxcdG9wX3R5cGU7XFxuQEAgLTQ2OCw2ICs0NzcsNyBAQCBzdHJ1Y3QgcmRzX21lc3NhZ2Uge1xcbiBcXHRcXHRcXHR1bnNpZ25lZCBpbnRcXHRcXHRvcF9tYXBwZWQ6MTtcXG4gXFx0XFx0XFx0dW5zaWduZWQgaW50XFx0XFx0b3Bfc2lsZW50OjE7XFxuIFxcdFxcdFxcdHVuc2lnbmVkIGludFxcdFxcdG9wX2FjdGl2ZToxO1xcbitcXHRcXHRcXHR1bnNpZ25lZCBpbnRcXHRcXHRvcF91bnBpbl9kZWZlcnJlZDoxO1xcbiBcXHRcXHRcXHRzdHJ1Y3Qgc2NhdHRlcmxpc3RcXHQqb3Bfc2c7XFxuIFxcdFxcdFxcdHN0cnVjdCByZHNfbm90aWZpZXJcXHQqb3Bfbm90aWZpZXI7XFxuIFxcbkBAIC00ODMsNiArNDkzLDcgQEAgc3RydWN0IHJkc19tZXNzYWdlIHtcXG4gXFx0XFx0XFx0dW5zaWduZWQgaW50XFx0XFx0b3BfbWFwcGVkOjE7XFxuIFxcdFxcdFxcdHVuc2lnbmVkIGludFxcdFxcdG9wX3NpbGVudDoxO1xcbiBcXHRcXHRcXHR1bnNpZ25lZCBpbnRcXHRcXHRvcF9hY3RpdmU6MTtcXG4rXFx0XFx0XFx0dW5zaWduZWQgaW50XFx0XFx0b3BfdW5waW5fZGVmZXJyZWQ6MTtcXG4gXFx0XFx0XFx0dW5zaWduZWQgaW50XFx0XFx0b3BfYnl0ZXM7XFxuIFxcdFxcdFxcdHVuc2lnbmVkIGludFxcdFxcdG9wX25lbnRzO1xcbiBcXHRcXHRcXHR1bnNpZ25lZCBpbnRcXHRcXHRvcF9jb3VudDtcXG5AQCAtOTcyLDYgKzk4Myw4IEBAIGludCByZHNfY21zZ19yZG1hX21hcChzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLFxcbiBcXHRcXHRcXHQgIHN0cnVjdCBjbXNnaGRyICpjbXNnKTtcXG4gdm9pZCByZHNfcmRtYV9mcmVlX29wKHN0cnVjdCBybV9yZG1hX29wICpybyk7XFxuIHZvaWQgcmRzX2F0b21pY19mcmVlX29wKHN0cnVjdCBybV9hdG9taWNfb3AgKmFvKTtcXG4rdm9pZCByZHNfcmRtYV9vcF91bnBpbl9wYWdlcyhzdHJ1Y3Qgcm1fcmRtYV9vcCAqcm8pO1xcbit2b2lkIHJkc19hdG9taWNfb3BfdW5waW5fcGFnZShzdHJ1Y3Qgcm1fYXRvbWljX29wICphbyk7XFxuIHZvaWQgcmRzX3JkbWFfc2VuZF9jb21wbGV0ZShzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLCBpbnQgd2Nfc3RhdHVzKTtcXG4gdm9pZCByZHNfYXRvbWljX3NlbmRfY29tcGxldGUoc3RydWN0IHJkc19tZXNzYWdlICpybSwgaW50IHdjX3N0YXR1cyk7XFxuIGludCByZHNfY21zZ19hdG9taWMoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9zZW5kLmMgYi9uZXQvcmRzL3NlbmQuY1xcbmluZGV4IDY4YmUxYmYwZTBhZGYuLjdlNDhmNjRkZmFhNjcgMTAwNjQ0XFxuLS0tIGEvbmV0L3Jkcy9zZW5kLmNcXG4rKysgYi9uZXQvcmRzL3NlbmQuY1xcbkBAIC0zMzksOSArMzM5LDIxIEBAIGludCByZHNfc2VuZF94bWl0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcXG4gXFx0XFx0XFx0ICAgIChybS1cXHUwMDNlcmRtYS5vcF9hY3RpdmUgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0XFx0ICAgIHRlc3RfYml0KFJEU19NU0dfUkVUUkFOU01JVFRFRCwgXFx1MDAyNnJtLVxcdTAwM2VtX2ZsYWdzKSkpIHtcXG4gXFx0XFx0XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmNwLVxcdTAwM2VjcF9sb2NrLCBmbGFncyk7XFxuLVxcdFxcdFxcdFxcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUkRTX01TR19PTl9DT05OLCBcXHUwMDI2cm0tXFx1MDAzZW1fZmxhZ3MpKVxcbi1cXHRcXHRcXHRcXHRcXHRsaXN0X21vdmUoXFx1MDAyNnJtLVxcdTAwM2VtX2Nvbm5faXRlbSwgXFx1MDAyNnRvX2JlX2Ryb3BwZWQpO1xcbi1cXHRcXHRcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZjcC1cXHUwMDNlY3BfbG9jaywgZmxhZ3MpO1xcbitcXHRcXHRcXHRcXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KFJEU19NU0dfT05fQ09OTixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZybS1cXHUwMDNlbV9mbGFncykpIHtcXG4rXFx0XFx0XFx0XFx0XFx0Lyogb3VyIHJlZiBpcyBwdXQgYWZ0ZXIgdGhlIGJhdGNoICovXFxuK1xcdFxcdFxcdFxcdFxcdGxpc3RfbW92ZShcXHUwMDI2cm0tXFx1MDAzZW1fY29ubl9pdGVtLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZ0b19iZV9kcm9wcGVkKTtcXG4rXFx0XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2Y3AtXFx1MDAzZWNwX2xvY2ssXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBmbGFncyk7XFxuK1xcdFxcdFxcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdFxcdFxcdC8qIGFscmVhZHkgb2ZmIHRoZSBjb25uIGxpc3Q7IGRyb3BcXG4rXFx0XFx0XFx0XFx0XFx0ICogdGhlIHJlZiB0YWtlbiBhYm92ZSBvdXJzZWx2ZXNcXG4rXFx0XFx0XFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmNwLVxcdTAwM2VjcF9sb2NrLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgZmxhZ3MpO1xcbitcXHRcXHRcXHRcXHRcXHRyZHNfbWVzc2FnZV9wdXQocm0pO1xcbitcXHRcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRcXHR9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzowMjoyOS45MjgzODI0MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEzNDg4NzM5OTk3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJSRFNcIixcbiAgICBcIlJEU19SRE1BXCIsXG4gICAgXCJJTkZJTklCQU5EXCIsXG4gICAgXCJJTkZJTklCQU5EX0FERFJfVFJBTlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZHNfc2VuZG1zZ1wiLFxuICAgIFwicmRzX21lc3NhZ2VfcHV0XCIsXG4gICAgXCJyZHNfY21zZ19yZG1hX2FyZ3NcIixcbiAgICBcInJkc19jbXNnX2F0b21pY1wiLFxuICAgIFwicmRzX3JkbWFfZnJlZV9vcFwiLFxuICAgIFwicmRzX2F0b21pY19mcmVlX29wXCIsXG4gICAgXCJyZHNfcmRtYV9vcF91bnBpbl9wYWdlc1wiLFxuICAgIFwicmRzX2F0b21pY19vcF91bnBpbl9wYWdlXCIsXG4gICAgXCJfX3Jkc19wdXRfbXJfZmluYWxcIixcbiAgICBcInJkc19nZXRfbXJcIixcbiAgICBcInJkc19mcmVlX21yXCIsXG4gICAgXCJyZHNfc2VuZF94bWl0XCIsXG4gICAgXCJfX3Jkc19pYl90ZWFyZG93bl9tclwiLFxuICAgIFwicmRzX3JkbWFfdW51c2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgUkRTIChSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzKSBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBob3cgbWVtb3J5IHJlZ2lvbnMgKE1SKSBhbmQgUkRNQSBvcGVyYXRpb25zIGFyZSBoYW5kbGVkLiBJdCBkZWZlcnMgdGhlIHVucGlubmluZyBvZiB1c2VyIHBhZ2VzIHRvIGEgd29ya3F1ZXVlIGlmIHRoZSBmaW5hbCBwdXQgaGFwcGVucyBpbiBhdG9taWMgY29udGV4dCwgZml4aW5nIHBvdGVudGlhbCBzbGVlcC1pbi1hdG9taWMgYnVncy4gSXQgYWxzbyBhZGRzIGEgc29ja2V0IHJlZmVyZW5jZSBob2xkIHdoZW4gYW4gTVIgaXMgY3JlYXRlZCB0byBlbnN1cmUgdGhlIHNvY2tldCBvdXRsaXZlcyB0aGUgTVIsIGZpeGluZyBhIHVzZS1hZnRlci1mcmVlLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgUkRTIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3OWE2M2Y2MjJjNWRjMTVlMThiY2ZmNTE4OTZlNjkzNjEwNWQ1ZTg5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMzEgMTM6MDI6MjggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvcmRzL2liX3JkbWEuYyBiL25ldC9yZHMvaWJfcmRtYS5jXG5pbmRleCA5NTk0ZWEyNDVmN2ZlLi5kYjdlOTJlN2JkMjlmIDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9pYl9yZG1hLmNcbisrKyBiL25ldC9yZHMvaWJfcmRtYS5jXG5AQCAtMjUxLDkgKzI1MSw3IEBAIHZvaWQgX19yZHNfaWJfdGVhcmRvd25fbXIoc3RydWN0IHJkc19pYl9tciAqaWJtcilcbiBcbiBcdFx0XHQvKiBGSVhNRSB3ZSBuZWVkIGEgd2F5IHRvIHRlbGwgYSByL3cgTVJcbiBcdFx0XHQgKiBmcm9tIGEgci9vIE1SICovXG4tXHRcdFx0V0FSTl9PTighcGFnZS1cdTAwM2VtYXBwaW5nIFx1MDAyNlx1MDAyNiBpcnFzX2Rpc2FibGVkKCkpO1xuLVx0XHRcdHNldF9wYWdlX2RpcnR5KHBhZ2UpO1xuLVx0XHRcdHB1dF9wYWdlKHBhZ2UpO1xuK1x0XHRcdHVucGluX3VzZXJfcGFnZXNfZGlydHlfbG9jayhcdTAwMjZwYWdlLCAxLCB0cnVlKTtcbiBcdFx0fVxuIFx0XHRrZnJlZShpYm1yLVx1MDAzZXNnKTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvcmRzL21lc3NhZ2UuYyBiL25ldC9yZHMvbWVzc2FnZS5jXG5pbmRleCA3ZmViMGViNjUzN2RiLi5mMjVmMjU5MjU4NmY3IDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9tZXNzYWdlLmNcbisrKyBiL25ldC9yZHMvbWVzc2FnZS5jXG5AQCAtMTgyLDYgKzE4MiwxOSBAQCBzdGF0aWMgdm9pZCByZHNfbWVzc2FnZV9wdXJnZShzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKVxuIFx0XHRrcmVmX3B1dChcdTAwMjZybS1cdTAwM2VhdG9taWMub3BfcmRtYV9tci1cdTAwM2VyX2tyZWYsIF9fcmRzX3B1dF9tcl9maW5hbCk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHJkc19tZXNzYWdlX3VucGluX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4re1xuK1x0c3RydWN0IHJkc19tZXNzYWdlICpybSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcmRzX21lc3NhZ2UsXG4rXHRcdFx0XHRcdCAgICAgIG1fdW5waW5fd29yayk7XG4rXG4rXHRpZiAocm0tXHUwMDNlcmRtYS5vcF91bnBpbl9kZWZlcnJlZClcbitcdFx0cmRzX3JkbWFfb3BfdW5waW5fcGFnZXMoXHUwMDI2cm0tXHUwMDNlcmRtYSk7XG4rXHRpZiAocm0tXHUwMDNlYXRvbWljLm9wX3VucGluX2RlZmVycmVkKVxuK1x0XHRyZHNfYXRvbWljX29wX3VucGluX3BhZ2UoXHUwMDI2cm0tXHUwMDNlYXRvbWljKTtcbitcbitcdGtmcmVlKHJtKTtcbit9XG4rXG4gdm9pZCByZHNfbWVzc2FnZV9wdXQoc3RydWN0IHJkc19tZXNzYWdlICpybSlcbiB7XG4gXHRyZHNkZWJ1ZyhcInB1dCBybSAlcCByZWYgJWRcXG5cIiwgcm0sIHJlZmNvdW50X3JlYWQoXHUwMDI2cm0tXHUwMDNlbV9yZWZjb3VudCkpO1xuQEAgLTE4OSw4ICsyMDIsMjEgQEAgdm9pZCByZHNfbWVzc2FnZV9wdXQoc3RydWN0IHJkc19tZXNzYWdlICpybSlcbiBcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2cm0tXHUwMDNlbV9yZWZjb3VudCkpIHtcbiBcdFx0QlVHX09OKCFsaXN0X2VtcHR5KFx1MDAyNnJtLVx1MDAzZW1fc29ja19pdGVtKSk7XG4gXHRcdEJVR19PTighbGlzdF9lbXB0eShcdTAwMjZybS1cdTAwM2VtX2Nvbm5faXRlbSkpO1xuK1xuIFx0XHRyZHNfbWVzc2FnZV9wdXJnZShybSk7XG4gXG4rXHRcdC8qIEEgZmluYWwgcHV0IGluIGF0b21pYyBjb250ZXh0IGNhbm5vdCBkaXJ0eSB0aGUgb3BzJ1xuK1x0XHQgKiB1c2VyIHBhZ2VzIG9uIHVucGluLCBzbyByZHNfcmRtYV9mcmVlX29wKCkgYW5kXG4rXHRcdCAqIHJkc19hdG9taWNfZnJlZV9vcCgpIGRlZmVycmVkIGl0LiAgRmluaXNoIHRoZSB1bnBpbixcbitcdFx0ICogYW5kIHRoZSBmcmVlLCBmcm9tIHByb2Nlc3MgY29udGV4dC5cbitcdFx0ICovXG4rXHRcdGlmIChybS1cdTAwM2VyZG1hLm9wX3VucGluX2RlZmVycmVkIHx8XG4rXHRcdCAgICBybS1cdTAwM2VhdG9taWMub3BfdW5waW5fZGVmZXJyZWQpIHtcbitcdFx0XHRJTklUX1dPUksoXHUwMDI2cm0tXHUwMDNlbV91bnBpbl93b3JrLCByZHNfbWVzc2FnZV91bnBpbl93b3JrZXIpO1xuK1x0XHRcdHF1ZXVlX3dvcmsocmRzX3dxLCBcdTAwMjZybS1cdTAwM2VtX3VucGluX3dvcmspO1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuK1xuIFx0XHRrZnJlZShybSk7XG4gXHR9XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9yZHMvcmRtYS5jIGIvbmV0L3Jkcy9yZG1hLmNcbmluZGV4IDYxZmI2ZTQ1MjgxYmYuLjA3ODA5MGQyOTJmYTMgMTAwNjQ0XG4tLS0gYS9uZXQvcmRzL3JkbWEuY1xuKysrIGIvbmV0L3Jkcy9yZG1hLmNcbkBAIC0xMTcsNiArMTE3LDcgQEAgdm9pZCBfX3Jkc19wdXRfbXJfZmluYWwoc3RydWN0IGtyZWYgKmtyZWYpXG4gXHRzdHJ1Y3QgcmRzX21yICptciA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgcmRzX21yLCByX2tyZWYpO1xuIFxuIFx0cmRzX2Rlc3Ryb3lfbXIobXIpO1xuK1x0c29ja19wdXQocmRzX3JzX3RvX3NrKG1yLVx1MDAzZXJfc29jaykpO1xuIFx0a2ZyZWUobXIpO1xuIH1cbiBcbkBAIC0yNDMsNyArMjQ0LDExIEBAIHN0YXRpYyBpbnQgX19yZHNfcmRtYV9tYXAoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19nZXRfbXJfYXJncyAqYXJncyxcbiBcdGtyZWZfaW5pdChcdTAwMjZtci1cdTAwM2VyX2tyZWYpO1xuIFx0UkJfQ0xFQVJfTk9ERShcdTAwMjZtci1cdTAwM2VyX3JiX25vZGUpO1xuIFx0bXItXHUwMDNlcl90cmFucyA9IHJzLVx1MDAzZXJzX3RyYW5zcG9ydDtcbitcdC8qIFRoZSBNUiBjYW4gb3V0bGl2ZSBpdHMgc29ja2V0OiBhIHNvY2tldCByZWZlcmVuY2UgaXMgaGVsZFxuK1x0ICogdW50aWwgdGhlIGZpbmFsIGtyZWYgaXMgZHJvcHBlZCBpbiBfX3Jkc19wdXRfbXJfZmluYWwoKS5cbitcdCAqL1xuIFx0bXItXHUwMDNlcl9zb2NrID0gcnM7XG4rXHRzb2NrX2hvbGQocmRzX3JzX3RvX3NrKHJzKSk7XG4gXG4gXHRpZiAoYXJncy1cdTAwM2VmbGFncyBcdTAwMjYgUkRTX1JETUFfVVNFX09OQ0UpXG4gXHRcdG1yLVx1MDAzZXJfdXNlX29uY2UgPSAxO1xuQEAgLTQ4MywyMiArNDg4LDM2IEBAIHZvaWQgcmRzX3JkbWFfdW51c2Uoc3RydWN0IHJkc19zb2NrICpycywgdTMyIHJfa2V5LCBpbnQgZm9yY2UpXG4gXHRcdGtyZWZfcHV0KFx1MDAyNm1yLVx1MDAzZXJfa3JlZiwgX19yZHNfcHV0X21yX2ZpbmFsKTtcbiB9XG4gXG4tdm9pZCByZHNfcmRtYV9mcmVlX29wKHN0cnVjdCBybV9yZG1hX29wICpybylcbit2b2lkIHJkc19yZG1hX29wX3VucGluX3BhZ2VzKHN0cnVjdCBybV9yZG1hX29wICpybylcbiB7XG4gXHR1bnNpZ25lZCBpbnQgaTtcbiBcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHJvLVx1MDAzZW9wX25lbnRzOyBpKyspIHtcbitcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBzZ19wYWdlKFx1MDAyNnJvLVx1MDAzZW9wX3NnW2ldKTtcbitcbitcdFx0LyogTWFyayBwYWdlIGRpcnR5IGlmIGl0IHdhcyBwb3NzaWJseSBtb2RpZmllZCwgd2hpY2hcbitcdFx0ICogaXMgdGhlIGNhc2UgZm9yIGEgUkRNQV9SRUFEIHdoaWNoIGNvcGllcyBmcm9tIHJlbW90ZVxuK1x0XHQgKiB0byBsb2NhbCBtZW1vcnlcbitcdFx0ICovXG4rXHRcdHVucGluX3VzZXJfcGFnZXNfZGlydHlfbG9jayhcdTAwMjZwYWdlLCAxLCAhcm8tXHUwMDNlb3Bfd3JpdGUpO1xuK1x0fVxuK31cbitcbit2b2lkIHJkc19yZG1hX2ZyZWVfb3Aoc3RydWN0IHJtX3JkbWFfb3AgKnJvKVxuK3tcbiBcdGlmIChyby1cdTAwM2VvcF9vZHBfbXIpIHtcbiBcdFx0a3JlZl9wdXQoXHUwMDI2cm8tXHUwMDNlb3Bfb2RwX21yLVx1MDAzZXJfa3JlZiwgX19yZHNfcHV0X21yX2ZpbmFsKTtcbitcdH0gZWxzZSBpZiAoaW5fdGFzaygpIHx8IHJvLVx1MDAzZW9wX3dyaXRlKSB7XG4rXHRcdC8qIEFuIFJETUEgd3JpdGUncyBwYWdlcyBhcmUgb25seSByZWFkIGJ5IHRoZSByZW1vdGVcbitcdFx0ICogc2lkZTsgdW5waW5uaW5nIHdpdGhvdXQgZGlydHlpbmcgZG9lcyBub3Qgc2xlZXAuXG4rXHRcdCAqL1xuK1x0XHRyZHNfcmRtYV9vcF91bnBpbl9wYWdlcyhybyk7XG4gXHR9IGVsc2Uge1xuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyByby1cdTAwM2VvcF9uZW50czsgaSsrKSB7XG4tXHRcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBzZ19wYWdlKFx1MDAyNnJvLVx1MDAzZW9wX3NnW2ldKTtcbi1cbi1cdFx0XHQvKiBNYXJrIHBhZ2UgZGlydHkgaWYgaXQgd2FzIHBvc3NpYmx5IG1vZGlmaWVkLCB3aGljaFxuLVx0XHRcdCAqIGlzIHRoZSBjYXNlIGZvciBhIFJETUFfUkVBRCB3aGljaCBjb3BpZXMgZnJvbSByZW1vdGVcbi1cdFx0XHQgKiB0byBsb2NhbCBtZW1vcnlcbi1cdFx0XHQgKi9cbi1cdFx0XHR1bnBpbl91c2VyX3BhZ2VzX2RpcnR5X2xvY2soXHUwMDI2cGFnZSwgMSwgIXJvLVx1MDAzZW9wX3dyaXRlKTtcbi1cdFx0fVxuK1x0XHQvKiBEaXJ0eWluZyB0aGUgcGFnZXMgb24gdW5waW4gY2FuIHNsZWVwOyBsZWF2ZSB0aGVtXG4rXHRcdCAqIHBpbm5lZCBhbmQgaGF2ZSByZHNfbWVzc2FnZV9wdXQoKSBmaW5pc2ggdGhlIHVucGluXG4rXHRcdCAqIGZyb20gcHJvY2VzcyBjb250ZXh0LlxuK1x0XHQgKi9cbitcdFx0cm8tXHUwMDNlb3BfdW5waW5fZGVmZXJyZWQgPSAxO1xuIFx0fVxuIFxuIFx0a2ZyZWUocm8tXHUwMDNlb3Bfbm90aWZpZXIpO1xuQEAgLTUwNyw3ICs1MjYsNyBAQCB2b2lkIHJkc19yZG1hX2ZyZWVfb3Aoc3RydWN0IHJtX3JkbWFfb3AgKnJvKVxuIFx0cm8tXHUwMDNlb3Bfb2RwX21yID0gTlVMTDtcbiB9XG4gXG4tdm9pZCByZHNfYXRvbWljX2ZyZWVfb3Aoc3RydWN0IHJtX2F0b21pY19vcCAqYW8pXG4rdm9pZCByZHNfYXRvbWljX29wX3VucGluX3BhZ2Uoc3RydWN0IHJtX2F0b21pY19vcCAqYW8pXG4ge1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBzZ19wYWdlKGFvLVx1MDAzZW9wX3NnKTtcbiBcbkBAIC01MTUsNiArNTM0LDE5IEBAIHZvaWQgcmRzX2F0b21pY19mcmVlX29wKHN0cnVjdCBybV9hdG9taWNfb3AgKmFvKVxuIFx0ICogaXMgdGhlIGNhc2UgZm9yIGEgUkRNQV9SRUFEIHdoaWNoIGNvcGllcyBmcm9tIHJlbW90ZVxuIFx0ICogdG8gbG9jYWwgbWVtb3J5ICovXG4gXHR1bnBpbl91c2VyX3BhZ2VzX2RpcnR5X2xvY2soXHUwMDI2cGFnZSwgMSwgdHJ1ZSk7XG4rfVxuK1xuK3ZvaWQgcmRzX2F0b21pY19mcmVlX29wKHN0cnVjdCBybV9hdG9taWNfb3AgKmFvKVxuK3tcbitcdGlmIChpbl90YXNrKCkpIHtcbitcdFx0cmRzX2F0b21pY19vcF91bnBpbl9wYWdlKGFvKTtcbitcdH0gZWxzZSB7XG4rXHRcdC8qIERpcnR5aW5nIHRoZSBwYWdlIG9uIHVucGluIGNhbiBzbGVlcDsgbGVhdmUgaXRcbitcdFx0ICogcGlubmVkIGFuZCBoYXZlIHJkc19tZXNzYWdlX3B1dCgpIGZpbmlzaCB0aGUgdW5waW5cbitcdFx0ICogZnJvbSBwcm9jZXNzIGNvbnRleHQuXG4rXHRcdCAqL1xuK1x0XHRhby1cdTAwM2VvcF91bnBpbl9kZWZlcnJlZCA9IDE7XG4rXHR9XG4gXG4gXHRrZnJlZShhby1cdTAwM2VvcF9ub3RpZmllcik7XG4gXHRhby1cdTAwM2VvcF9ub3RpZmllciA9IE5VTEw7XG5AQCAtNzMyLDcgKzc2NCwxMiBAQCBpbnQgcmRzX2Ntc2dfcmRtYV9hcmdzKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sXG4gXHRcdFx0UkJfQ0xFQVJfTk9ERShcdTAwMjZsb2NhbF9vZHBfbXItXHUwMDNlcl9yYl9ub2RlKTtcbiBcdFx0XHRrcmVmX2luaXQoXHUwMDI2bG9jYWxfb2RwX21yLVx1MDAzZXJfa3JlZik7XG4gXHRcdFx0bG9jYWxfb2RwX21yLVx1MDAzZXJfdHJhbnMgPSBycy1cdTAwM2Vyc190cmFuc3BvcnQ7XG4rXHRcdFx0LyogVGhlIE1SIGNhbiBvdXRsaXZlIGl0cyBzb2NrZXQ6IGEgc29ja2V0XG4rXHRcdFx0ICogcmVmZXJlbmNlIGlzIGhlbGQgdW50aWwgdGhlIGZpbmFsIGtyZWYgaXNcbitcdFx0XHQgKiBkcm9wcGVkIGluIF9fcmRzX3B1dF9tcl9maW5hbCgpLlxuK1x0XHRcdCAqL1xuIFx0XHRcdGxvY2FsX29kcF9tci1cdTAwM2VyX3NvY2sgPSBycztcbitcdFx0XHRzb2NrX2hvbGQocmRzX3JzX3RvX3NrKHJzKSk7XG4gXHRcdFx0bG9jYWxfb2RwX21yLVx1MDAzZXJfdHJhbnNfcHJpdmF0ZSA9XG4gXHRcdFx0XHRycy1cdTAwM2Vyc190cmFuc3BvcnQtXHUwMDNlZ2V0X21yKFxuIFx0XHRcdFx0XHROVUxMLCAwLCBycywgXHUwMDI2bG9jYWxfb2RwX21yLVx1MDAzZXJfa2V5LCBOVUxMLFxuQEAgLTc0MSw3ICs3NzgsOSBAQCBpbnQgcmRzX2Ntc2dfcmRtYV9hcmdzKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sXG4gXHRcdFx0XHRyZXQgPSBQVFJfRVJSKGxvY2FsX29kcF9tci1cdTAwM2VyX3RyYW5zX3ByaXZhdGUpO1xuIFx0XHRcdFx0cmRzZGVidWcoXCJnZXRfbXIgcmV0ICVkICVwXFxcIlwiLCByZXQsXG4gXHRcdFx0XHRcdCBsb2NhbF9vZHBfbXItXHUwMDNlcl90cmFuc19wcml2YXRlKTtcbi1cdFx0XHRcdGtmcmVlKGxvY2FsX29kcF9tcik7XG4rXHRcdFx0XHRsb2NhbF9vZHBfbXItXHUwMDNlcl90cmFuc19wcml2YXRlID0gTlVMTDtcbitcdFx0XHRcdGtyZWZfcHV0KFx1MDAyNmxvY2FsX29kcF9tci1cdTAwM2VyX2tyZWYsXG4rXHRcdFx0XHRcdCBfX3Jkc19wdXRfbXJfZmluYWwpO1xuIFx0XHRcdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG4gXHRcdFx0XHRnb3RvIG91dF9wYWdlcztcbiBcdFx0XHR9XG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9yZHMuaCBiL25ldC9yZHMvcmRzLmhcbmluZGV4IDZlMDc5MGU0YjU3MDMuLjJkYjQ5NTczZGFjZDUgMTAwNjQ0XG4tLS0gYS9uZXQvcmRzL3Jkcy5oXG4rKysgYi9uZXQvcmRzL3Jkcy5oXG5AQCAtMzIwLDcgKzMyMCwxMCBAQCBzdHJ1Y3QgcmRzX21yIHtcbiBcdHVuc2lnbmVkIGludFx0XHRyX2ludmFsaWRhdGU6MTtcbiBcdHVuc2lnbmVkIGludFx0XHRyX3dyaXRlOjE7XG4gXG4tXHRzdHJ1Y3QgcmRzX3NvY2tcdFx0KnJfc29jazsgLyogYmFjayBwb2ludGVyIHRvIHRoZSBzb2NrZXQgdGhhdCBvd25zIHVzICovXG4rXHRzdHJ1Y3QgcmRzX3NvY2tcdFx0KnJfc29jazsgLyogc29ja2V0IHRoYXQgb3ducyB1czsgY291bnRlZFxuK1x0XHRcdFx0XHQgICogcmVmZXJlbmNlLCBkcm9wcGVkIGJ5XG4rXHRcdFx0XHRcdCAgKiBfX3Jkc19wdXRfbXJfZmluYWwoKVxuK1x0XHRcdFx0XHQgICovXG4gXHRzdHJ1Y3QgcmRzX3RyYW5zcG9ydFx0KnJfdHJhbnM7XG4gXHR2b2lkXHRcdFx0KnJfdHJhbnNfcHJpdmF0ZTtcbiB9O1xuQEAgLTQ0NSw2ICs0NDgsMTIgQEAgc3RydWN0IHJkc19tZXNzYWdlIHtcbiBcbiBcdHZvaWRcdFx0XHQqbV9maW5hbF9vcDtcbiBcbitcdC8qIFVucGlucyB0aGUgb3BzJyB1c2VyIHBhZ2VzIGFuZCBmcmVlcyB0aGUgbWVzc2FnZSBmcm9tXG4rXHQgKiBwcm9jZXNzIGNvbnRleHQgd2hlbiB0aGUgZmluYWwgcHV0IGhhcHBlbnMgaW4gYXRvbWljXG4rXHQgKiBjb250ZXh0OiBkaXJ0eWluZyB0aGUgcGFnZXMgb24gdW5waW4gY2FuIHNsZWVwLlxuK1x0ICovXG4rXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdG1fdW5waW5fd29yaztcbitcbiBcdHN0cnVjdCB7XG4gXHRcdHN0cnVjdCBybV9hdG9taWNfb3Age1xuIFx0XHRcdGludFx0XHRcdG9wX3R5cGU7XG5AQCAtNDY4LDYgKzQ3Nyw3IEBAIHN0cnVjdCByZHNfbWVzc2FnZSB7XG4gXHRcdFx0dW5zaWduZWQgaW50XHRcdG9wX21hcHBlZDoxO1xuIFx0XHRcdHVuc2lnbmVkIGludFx0XHRvcF9zaWxlbnQ6MTtcbiBcdFx0XHR1bnNpZ25lZCBpbnRcdFx0b3BfYWN0aXZlOjE7XG4rXHRcdFx0dW5zaWduZWQgaW50XHRcdG9wX3VucGluX2RlZmVycmVkOjE7XG4gXHRcdFx0c3RydWN0IHNjYXR0ZXJsaXN0XHQqb3Bfc2c7XG4gXHRcdFx0c3RydWN0IHJkc19ub3RpZmllclx0Km9wX25vdGlmaWVyO1xuIFxuQEAgLTQ4Myw2ICs0OTMsNyBAQCBzdHJ1Y3QgcmRzX21lc3NhZ2Uge1xuIFx0XHRcdHVuc2lnbmVkIGludFx0XHRvcF9tYXBwZWQ6MTtcbiBcdFx0XHR1bnNpZ25lZCBpbnRcdFx0b3Bfc2lsZW50OjE7XG4gXHRcdFx0dW5zaWduZWQgaW50XHRcdG9wX2FjdGl2ZToxO1xuK1x0XHRcdHVuc2lnbmVkIGludFx0XHRvcF91bnBpbl9kZWZlcnJlZDoxO1xuIFx0XHRcdHVuc2lnbmVkIGludFx0XHRvcF9ieXRlcztcbiBcdFx0XHR1bnNpZ25lZCBpbnRcdFx0b3BfbmVudHM7XG4gXHRcdFx0dW5zaWduZWQgaW50XHRcdG9wX2NvdW50O1xuQEAgLTk3Miw2ICs5ODMsOCBAQCBpbnQgcmRzX2Ntc2dfcmRtYV9tYXAoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcbiBcdFx0XHQgIHN0cnVjdCBjbXNnaGRyICpjbXNnKTtcbiB2b2lkIHJkc19yZG1hX2ZyZWVfb3Aoc3RydWN0IHJtX3JkbWFfb3AgKnJvKTtcbiB2b2lkIHJkc19hdG9taWNfZnJlZV9vcChzdHJ1Y3Qgcm1fYXRvbWljX29wICphbyk7XG4rdm9pZCByZHNfcmRtYV9vcF91bnBpbl9wYWdlcyhzdHJ1Y3Qgcm1fcmRtYV9vcCAqcm8pO1xuK3ZvaWQgcmRzX2F0b21pY19vcF91bnBpbl9wYWdlKHN0cnVjdCBybV9hdG9taWNfb3AgKmFvKTtcbiB2b2lkIHJkc19yZG1hX3NlbmRfY29tcGxldGUoc3RydWN0IHJkc19tZXNzYWdlICpybSwgaW50IHdjX3N0YXR1cyk7XG4gdm9pZCByZHNfYXRvbWljX3NlbmRfY29tcGxldGUoc3RydWN0IHJkc19tZXNzYWdlICpybSwgaW50IHdjX3N0YXR1cyk7XG4gaW50IHJkc19jbXNnX2F0b21pYyhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLFxuZGlmZiAtLWdpdCBhL25ldC9yZHMvc2VuZC5jIGIvbmV0L3Jkcy9zZW5kLmNcbmluZGV4IDY4YmUxYmYwZTBhZGYuLjdlNDhmNjRkZmFhNjcgMTAwNjQ0XG4tLS0gYS9uZXQvcmRzL3NlbmQuY1xuKysrIGIvbmV0L3Jkcy9zZW5kLmNcbkBAIC0zMzksOSArMzM5LDIxIEBAIGludCByZHNfc2VuZF94bWl0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiBcdFx0XHQgICAgKHJtLVx1MDAzZXJkbWEub3BfYWN0aXZlIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICB0ZXN0X2JpdChSRFNfTVNHX1JFVFJBTlNNSVRURUQsIFx1MDAyNnJtLVx1MDAzZW1fZmxhZ3MpKSkge1xuIFx0XHRcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2Y3AtXHUwMDNlY3BfbG9jaywgZmxhZ3MpO1xuLVx0XHRcdFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSRFNfTVNHX09OX0NPTk4sIFx1MDAyNnJtLVx1MDAzZW1fZmxhZ3MpKVxuLVx0XHRcdFx0XHRsaXN0X21vdmUoXHUwMDI2cm0tXHUwMDNlbV9jb25uX2l0ZW0sIFx1MDAyNnRvX2JlX2Ryb3BwZWQpO1xuLVx0XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZjcC1cdTAwM2VjcF9sb2NrLCBmbGFncyk7XG4rXHRcdFx0XHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KFJEU19NU0dfT05fQ09OTixcbitcdFx0XHRcdFx0XHQgICAgICAgXHUwMDI2cm0tXHUwMDNlbV9mbGFncykpIHtcbitcdFx0XHRcdFx0Lyogb3VyIHJlZiBpcyBwdXQgYWZ0ZXIgdGhlIGJhdGNoICovXG4rXHRcdFx0XHRcdGxpc3RfbW92ZShcdTAwMjZybS1cdTAwM2VtX2Nvbm5faXRlbSxcbitcdFx0XHRcdFx0XHQgIFx1MDAyNnRvX2JlX2Ryb3BwZWQpO1xuK1x0XHRcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmNwLVx1MDAzZWNwX2xvY2ssXG4rXHRcdFx0XHRcdFx0XHQgICAgICAgZmxhZ3MpO1xuK1x0XHRcdFx0fSBlbHNlIHtcbitcdFx0XHRcdFx0LyogYWxyZWFkeSBvZmYgdGhlIGNvbm4gbGlzdDsgZHJvcFxuK1x0XHRcdFx0XHQgKiB0aGUgcmVmIHRha2VuIGFib3ZlIG91cnNlbHZlc1xuK1x0XHRcdFx0XHQgKi9cbitcdFx0XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZjcC1cdTAwM2VjcF9sb2NrLFxuK1x0XHRcdFx0XHRcdFx0ICAgICAgIGZsYWdzKTtcbitcdFx0XHRcdFx0cmRzX21lc3NhZ2VfcHV0KHJtKTtcbitcdFx0XHRcdH1cbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEzOjAyOjI5LjkyODM4NDE0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTA5MjE4MTgzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFJEUyBQYXRjaGVzOiBBIFRhcmdldGVkIEFwcHJvYWNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBhZmZlY3RpbmcgdGhlIFJEUyBzdWJzeXN0ZW0gaW4gdGhlIExpbnV4IGtlcm5lbCwgc3BlY2lmaWNhbGx5IHR3ZWFraW5nIGhvdyBtZW1vcnkgcmVnaW9ucyAoTVJzKSBhbmQgUkRNQSBvcGVyYXRpb25zIGFyZSBtYW5hZ2VkLiAgVGhlIGtleSBjaGFuZ2UgaGVyZSBzZWVtcyB0byBiZSBkZWZlcnJpbmcgdXNlciBwYWdlIHVucGlubmluZyB0byBhIHdvcmtxdWV1ZSB3aGVuIHRoZSBmaW5hbCBcInB1dFwiIGhhcHBlbnMgYXRvbWljYWxseS4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gbm90ZSBzaW5jZSBkaXJ0eWluZyBwYWdlcyBvbiB1bnBpbiBjYW4gY2F1c2Ugc2xlZXBpbmcsIHdoaWNoIGlzIGEgYmlnIG5vLW5vIGluIGF0b21pYyBjb250ZXh0cy4gVGhleSd2ZSBhbHNvIGFkZGVkIGEgc29ja2V0IHJlZmVyZW5jZSBob2xkIHdoZW4gYW4gTVIgaXMgY3JlYXRlZCB0byBtYWtlIHN1cmUgdGhlIHNvY2tldCBvdXRsaXZlcyB0aGUgTVIgLSBzbWFydC5cblxuTm93LCBzaG91bGQgd2UgYm90aGVyIGZ1enppbmcgdGhpcz8gRGVmaW5pdGVseS4gVGhlIHBhdGNoIHRvdWNoZXMgY3JpdGljYWwgUkRTIGNvZGU6IGBuZXQvcmRzL2liX3JkbWEuY2AsIGBuZXQvcmRzL21lc3NhZ2UuY2AsIGBuZXQvcmRzL3JkbWEuY2AsIGBuZXQvcmRzL3Jkcy5oYCwgYW5kIGBuZXQvcmRzL3NlbmQuY2AuICBXZSdyZSB0YWxraW5nIGFib3V0IGNvcmUgUkRNQSBoYW5kbGluZyBhbmQgYXRvbWljIG9wZXJhdGlvbnMg4oCTIGZ1bmRhbWVudGFsIHN0dWZmLiAgUkRTIGlzIGFsc28gYSBuZXR3b3JrIHByb3RvY29sIChBRl9SRFMpIHRoYXQncyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgaXQgYSBwcmltZSB0YXJnZXQuICBTbywgYFdvcnRoRnV6emluZz10cnVlYC5cblxuTmV4dCwgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBmdW5jdGlvbnMgdG8gZm9jdXMgb3VyIGZ1enppbmcgZWZmb3J0cyBvbi4gIFRoZSBwYXRjaCBoYXMgbW9kaWZpZWQgcXVpdGUgYSBmZXcsIGJ1dCBhIGZldyBzdGFuZCBvdXQgYXMgZ29vZCBjYW5kaWRhdGVzIGZvciB0YXJnZXRlZCBmdXp6aW5nOlxuXG4qICAgYF9fcmRzX2liX3RlYXJkb3duX21yYFxuKiAgIGByZHNfbWVzc2FnZV9wdXJnZWBcbiogICBgcmRzX21lc3NhZ2VfdW5waW5fd29ya2VyYCAodGhpcyBpcyBuZXcsIHNvIGRlZmluaXRlbHkgd29ydGggYSBsb29rKVxuKiAgIGByZHNfbWVzc2FnZV9wdXRgXG4qICAgYF9fcmRzX3B1dF9tcl9maW5hbGBcbiogICBgX19yZHNfcmRtYV9tYXBgXG4qICAgYHJkc19yZG1hX3VudXNlYFxuKiAgIGByZHNfcmRtYV9vcF91bnBpbl9wYWdlc2AgKHRoaXMgaXMgYWxzbyBuZXcsIHNvIHdvcnRoIGEgbG9vaylcbiogICBgcmRzX3JkbWFfZnJlZV9vcGBcbiogICBgcmRzX2F0b21pY19vcF91bnBpbl9wYWdlYCAoYWdhaW4sIHRoaXMgaXMgbmV3KVxuKiAgIGByZHNfYXRvbWljX2ZyZWVfb3BgXG4qICAgYHJkc19jbXNnX3JkbWFfYXJnc2BcbiogICBgcmRzX3NlbmRfeG1pdGBcblxuSSB3YW50IHRvIHByaW9yaXRpemUgZWl0aGVyIGVudHJ5IHBvaW50cyBvciBtYWpvciBmdW5jdGlvbnMgYWZmZWN0ZWQgYnkgdGhpcyBwYXRjaC4gV2hpbGUgYHJkc19tZXNzYWdlX3B1dGAgaXMgaW4gdGhlIGxpc3QsIGl0J3MgY2FsbGVkIGZyb20gYSB0b24gb2YgcGxhY2VzLCBzbyBJIG5lZWQgdG8gYmUgbW9yZSBzdHJhdGVnaWMuIGByZHNfc2VuZG1zZ2AgaXMgbGlrZWx5IHRoZSBrZXkgZW50cnkgcG9pbnQgZm9yIG1lc3NhZ2Ugc2VuZGluZywgY3JlYXRpbmcgYW5kIG1hcHBpbmcgdGhlc2UgUkRNQSBvcGVyYXRpb25zLiAgYHJkc19jbXNnX3JkbWFfYXJnc2AgYW5kIGByZHNfY21zZ19yZG1hX21hcGAgYXJlIGFsc28gY3JpdGljYWwsIGFzIHRoZXkncmUgY2FsbGVkIGZyb20gYHJkc19zZW5kbXNnYCB0byBoYW5kbGUgY29udHJvbCBtZXNzYWdlcy4gYHJkc19zZW5kX3htaXRgIGlzIGFsc28gd29ydGggYSBsb29rIHNpbmNlIGl0J3MgdGhlIHRyYW5zbWl0IHdvcmtlci4gQWRkaXRpb25hbGx5LCBgcmRzX3JkbWFfZnJlZV9vcGAgYW5kIGByZHNfYXRvbWljX2ZyZWVfb3BgIGFyZSBjYWxsZWQgZHVyaW5nIG1lc3NhZ2UgcHVyZ2Ugc28gdGhleSdyZSBpbXBvcnRhbnQgZm9yIGNsZWFudXAgYW5kIG1lbW9yeSBoYW5kbGluZyBhbmQgYXJlIGltcG9ydGFudC4gYF9fcmRzX3JkbWFfbWFwYCBpcyBhbHNvIGEga2V5IGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZnJvbSBgcmRzX2Ntc2dfcmRtYV9tYXBgIGFuZCBgcmRzX2dldF9tcmAuIEZpbmFsbHksIGByZHNfZ2V0X21yYCBhbmQgYHJkc19mcmVlX21yYCBhcmUgYm90aCBlbnRyeSBwb2ludHMgdmlhIGBzZXRzb2Nrb3B0YCBjYWxscy5cblxuUXVpY2sgY2hlY2sgb2YgYG5ldC9yZHMvS2NvbmZpZ2AgY29uZmlybXMgdGhhdCBSRFMgKGBDT05GSUdfUkRTYCksIFJETUEgKGBDT05GSUdfUkRTX1JETUFgKSwgVENQIChgQ09ORklHX1JEU19UQ1BgKSwgYW5kIGRlYnVnIChgQ09ORklHX1JEU19ERUJVR2ApIGFyZSBhbGwgZW5hYmxlZC4gIEdvb2QsIGl0J3MgYWxsIHRoZXJlLlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRlcGxveSB0aGUgZnV6emluZyB0b29scyBhbmQgZ2V0IHN0YXJ0ZWQuIFRoaXMgbG9va3MgbGlrZSBhIHByb21pc2luZyB0YXJnZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2NDgsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NTEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzowMjozOS4wMjA1Njg3NDRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODEzMTI1ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFJEU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcmRzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Jkcy9LY29uZmlnLTItXFxubmV0L3Jkcy9LY29uZmlnOjM6Y29uZmlnIFJEU1xcbm5ldC9yZHMvS2NvbmZpZy00LVxcdHRyaXN0YXRlIFxcXCJUaGUgUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cyBQcm90b2NvbFxcXCJcXG4tLVxcbm5ldC9yZHMvS2NvbmZpZy05LVxcbm5ldC9yZHMvS2NvbmZpZzoxMDpjb25maWcgUkRTX1JETUFcXG5uZXQvcmRzL0tjb25maWctMTEtXFx0dHJpc3RhdGUgXFxcIlJEUyBvdmVyIEluZmluaWJhbmRcXFwiXFxuLS1cXG5uZXQvcmRzL0tjb25maWctMTYtXFxubmV0L3Jkcy9LY29uZmlnOjE3OmNvbmZpZyBSRFNfVENQXFxubmV0L3Jkcy9LY29uZmlnLTE4LVxcdHRyaXN0YXRlIFxcXCJSRFMgb3ZlciBUQ1BcXFwiXFxuLS1cXG5uZXQvcmRzL0tjb25maWctMjQtXFxubmV0L3Jkcy9LY29uZmlnOjI1OmNvbmZpZyBSRFNfREVCVUdcXG5uZXQvcmRzL0tjb25maWctMjYtXFx0Ym9vbCBcXFwiUkRTIGRlYnVnZ2luZyBtZXNzYWdlc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTM6MDI6MzkuMTAxODg3NjAzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcyMjc2MjQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIFJEUyBhbmQgUkRNQSBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggYFJEU2AgYW5kIGFsc28gbmVlZCB0byBjb25zaWRlciBgUkRTX1JETUFgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlc2UgdHdvLCBlc3BlY2lhbGx5IHNpbmNlIHRoZSBjb2RlIHJlZmVyZW5jZXMgYG5ldC9yZHMvaWJfcmRtYS5jYCwgd2hpY2ggZGlyZWN0bHkgdGllcyBpbnRvIFJETUEgbG9naWMuIEl0IGxvb2tzIGxpa2UgYG5ldC9yZHMvaWJfcmRtYS5jYCBpcyBvbmx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19SRFNfUkRNQWAgaXMgYWN0aXZlLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdyBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIGBuZXQvcmRzL01ha2VmaWxlYCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGFuZCBkZXBlbmRlbmNpZXMuIFRoYXQgd2lsbCBsaWtlbHkgZ2l2ZSBtZSBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NzM0MCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEzOjAyOjQyLjgyNDY1MjYxNFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg4MDU5NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWJfcmRtYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcmRzL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yZHMvTWFrZWZpbGU9OD1yZHNfcmRtYS15IDo9XFx0cmRtYV90cmFuc3BvcnQubyBcXFxcXFxubmV0L3Jkcy9NYWtlZmlsZS05LVxcdFxcdFxcdGliLm8gaWJfY20ubyBpYl9yZWN2Lm8gaWJfcmluZy5vIGliX3NlbmQubyBpYl9zdGF0cy5vIFxcXFxcXG5uZXQvcmRzL01ha2VmaWxlOjEwOlxcdFxcdFxcdGliX3N5c2N0bC5vIGliX3JkbWEubyBpYl9mcm1yLm9cXG5uZXQvcmRzL01ha2VmaWxlLTExLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzowMjo0Mi45NDM0NjM4ODJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjQ5OTU4NDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdC5cblxuKipBbmFseXppbmcgdGhlIFJEUy1SRE1BIEJ1aWxkIFByb2Nlc3MqKlxuXG5SaWdodCwgc28gYHJkc19yZG1hLXlgIGlzIGRlZmluaXRlbHkgb25seSBpbmNsdWRlZCBpbiB0aGUgYnVpbGQgaWYgYENPTkZJR19SRFNfUkRNQWAgaXMgc2V0LiBUaGF0J3MgZ29vZCwgcHJlZGljdGFibGUgYmVoYXZpb3IuIE5vdywgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIGFuZCBzZWUgaG93IGl0J3MgYWxsIGhvb2tlZCB0b2dldGhlciwgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBgbmV0L3Jkcy9NYWtlZmlsZWAuIFRoYXQncyB3aGVyZSB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gbWFnaWMgdXN1YWxseSBoYXBwZW5zIGZvciB0aGlzIGtpbmQgb2YgdGhpbmcgd2l0aGluIHRoZSBSRFMgY29kZWJhc2UuIEknbSBhc3N1bWluZyBpdCdsbCBoYXZlIHRoZSBzdGFuZGFyZCBgb2JqLSQoQ09ORklHX1JEU19SRE1BKSArPSByZHNfcmRtYS5vYCB0eXBlIG9mIGxpbmUsIGJ1dCBhIHF1aWNrIGxvb2sgaXMgYWx3YXlzIHBydWRlbnQuIE5lZWQgdG8gY29uZmlybSB0aGF0J3MgdGhlIG9ubHkgZGVwZW5kZW5jZSBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzAyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTM6MDI6NDYuMTkzNDI1NTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0MjE0OTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJkc19yZG1hXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yZHMvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Jkcy9NYWtlZmlsZT0zPXJkcy15IDo9XFx0YWZfcmRzLm8gYmluZC5vIGNvbmcubyBjb25uZWN0aW9uLm8gaW5mby5vIG1lc3NhZ2UubyAgIFxcXFxcXG4tLVxcbm5ldC9yZHMvTWFrZWZpbGUtNi1cXG5uZXQvcmRzL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX1JEU19SRE1BKSArPSByZHNfcmRtYS5vXFxubmV0L3Jkcy9NYWtlZmlsZTo4OnJkc19yZG1hLXkgOj1cXHRyZG1hX3RyYW5zcG9ydC5vIFxcXFxcXG5uZXQvcmRzL01ha2VmaWxlLTktXFx0XFx0XFx0aWIubyBpYl9jbS5vIGliX3JlY3YubyBpYl9yaW5nLm8gaWJfc2VuZC5vIGliX3N0YXRzLm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzowMjo0Ni4yOTc2NDk2NjhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzc2NTg2MTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJEUyBSRE1BIENvbmZpZ3VyYXRpb24gQXNzZXNzbWVudCoqXG5cbk9rYXksIHNvIHRoZSBwYXRjaCBJJ20gbG9va2luZyBhdCByZXF1aXJlcyBgQ09ORklHX1JEU19SRE1BYC4gVGhhdCdzIHRoZSBiYXNlbGluZSwgbm8gc3VycHJpc2VzIHRoZXJlLiBCdXQsIEkgbmVlZCB0byBjb25zaWRlciBgQ09ORklHX1JEU19UQ1BgLiBJdCdzIGdlbmVyYWxseSBhIGdvb2QgcHJhY3RpY2UgdG8gaGF2ZSB0aGUgVENQIG9wdGlvbiBlbmFibGVkLCBlc3BlY2lhbGx5IGZvciB0ZXN0aW5nIFJEUyBvdmVyIFRDUCBhcyBhbiBhbHRlcm5hdGl2ZSB0cmFuc3BvcnQuIEhvd2V2ZXIsIHRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IGludGVyYWN0cyB3aXRoIGBpYl9yZG1hLmNgLCB3aGljaCBpcyBjbGVhcmx5IHBhcnQgb2YgdGhlIGBSRFNfUkRNQWAgY29uZmlndXJhdGlvbi5cblxuTGV0J3MgcXVpY2tseSB2ZXJpZnkgbXkgdW5kZXJzdGFuZGluZzogZmlsZXMgbGlrZSBgbmV0L3Jkcy9tZXNzYWdlLmNgLCBgbmV0L3Jkcy9yZG1hLmNgLCBhbmQgYG5ldC9yZHMvc2VuZC5jYCBhcmUgYnVpbHQgYXMgcGFydCBvZiBgcmRzLXlgLCB3aGljaCBmYWxscyB1bmRlciB0aGUgdW1icmVsbGEgb2YgYENPTkZJR19SRFNgLiBHb29kLCB0aGF0IG1ha2VzIHNlbnNlLiBTbywgYFJEU2AgaXMgYWx3YXlzIGVuYWJsZWQgd2hlbiB3ZSBhcmUgbG9va2luZyBhdCBhbnkgb2YgdGhvc2UgZmlsZXMuXG5cbk5vdywgbGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBSRFNfUkRNQWAgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwODcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTM6MDI6NTAuNjc0MjM5NTM5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTQ1Nzg2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yZHMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcmRzL0tjb25maWc9Mz1jb25maWcgUkRTXFxubmV0L3Jkcy9LY29uZmlnLTQtXFx0dHJpc3RhdGUgXFxcIlRoZSBSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzIFByb3RvY29sXFxcIlxcbm5ldC9yZHMvS2NvbmZpZzo1OlxcdGRlcGVuZHMgb24gSU5FVFxcbm5ldC9yZHMvS2NvbmZpZy02LVxcdGhlbHBcXG4tLVxcbm5ldC9yZHMvS2NvbmZpZz0xMD1jb25maWcgUkRTX1JETUFcXG5uZXQvcmRzL0tjb25maWctMTEtXFx0dHJpc3RhdGUgXFxcIlJEUyBvdmVyIEluZmluaWJhbmRcXFwiXFxubmV0L3Jkcy9LY29uZmlnOjEyOlxcdGRlcGVuZHMgb24gUkRTIFxcdTAwMjZcXHUwMDI2IElORklOSUJBTkQgXFx1MDAyNlxcdTAwMjYgSU5GSU5JQkFORF9BRERSX1RSQU5TXFxubmV0L3Jkcy9LY29uZmlnLTEzLVxcdGhlbHBcXG4tLVxcbm5ldC9yZHMvS2NvbmZpZz0xNz1jb25maWcgUkRTX1RDUFxcbm5ldC9yZHMvS2NvbmZpZy0xOC1cXHR0cmlzdGF0ZSBcXFwiUkRTIG92ZXIgVENQXFxcIlxcbm5ldC9yZHMvS2NvbmZpZzoxOTpcXHRkZXBlbmRzIG9uIFJEU1xcbm5ldC9yZHMvS2NvbmZpZzoyMDpcXHRkZXBlbmRzIG9uIElQVjYgfHwgIUlQVjZcXG5uZXQvcmRzL0tjb25maWctMjEtXFx0aGVscFxcbi0tXFxubmV0L3Jkcy9LY29uZmlnPTI1PWNvbmZpZyBSRFNfREVCVUdcXG5uZXQvcmRzL0tjb25maWctMjYtXFx0Ym9vbCBcXFwiUkRTIGRlYnVnZ2luZyBtZXNzYWdlc1xcXCJcXG5uZXQvcmRzL0tjb25maWc6Mjc6XFx0ZGVwZW5kcyBvbiBSRFNcXG5uZXQvcmRzL0tjb25maWctMjgtXFx0ZGVmYXVsdCBuXFxuLS1cXG5uZXQvcmRzL0tjb25maWc9MzA9Y29uZmlnIEdDT1ZfUFJPRklMRV9SRFNcXG5uZXQvcmRzL0tjb25maWctMzEtXFx0Ym9vbCBcXFwiRW5hYmxlIEdDT1YgcHJvZmlsaW5nIG9uIFJEU1xcXCJcXG5uZXQvcmRzL0tjb25maWc6MzI6XFx0ZGVwZW5kcyBvbiBHQ09WX0tFUk5FTFxcbm5ldC9yZHMvS2NvbmZpZy0zMy1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEzOjAyOjUwLjcyMzcwOTA2OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzIzNTUyNDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQW5hbHlzaXMgb2YgdGhlIFJEU19SRE1BIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgc2VlIHRoZSBkZXBlbmRlbmNpZXM6IGBSRFNfUkRNQWAgcmVsaWVzIGhlYXZpbHkgb24gYFJEU2AsIGBJTkZJTklCQU5EYCwgYW5kIGBJTkZJTklCQU5EX0FERFJfVFJBTlNgLiBMb2dpY2FsbHksIEkgbmVlZCB0byBpbmNsdWRlIGFsbCB0aG9zZSBpbiBteSBhbmFseXNpcywgc28gSSdsbCBiZSBzdXJlIHRvIGtlZXAgdGhlbSBpbiBtaW5kLlxuXG5Ob3csIHRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gaW52b2x2ZSBhIHNlcmllcyBvZiBmdW5jdGlvbnMgdGhhdCBhcmUgYmVpbmcgbW9kaWZpZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSByZWxhdGUgdG8gZWFjaCBvdGhlciBhbmQsIG1vcmUgaW1wb3J0YW50bHksIGhvdyB0aGV5IG1pZ2h0IGJlIHZ1bG5lcmFibGUuIEZyb20gYSBxdWljayBnbGFuY2UsIHRoZSBmdW5jdGlvbnMgYmVpbmcgbW9kaWZpZWQgYXJlOiBgX19yZHNfaWJfdGVhcmRvd25fbXJgLCBgcmRzX21lc3NhZ2VfcHVyZ2VgLCBgcmRzX21lc3NhZ2VfdW5waW5fd29ya2VyYCwgYHJkc19tZXNzYWdlX3B1dGAsIGBfX3Jkc19wdXRfbXJfZmluYWxgLCBgX19yZHNfcmRtYV9tYXBgLCBgcmRzX3JkbWFfdW51c2VgLCBgcmRzX3JkbWFfb3BfdW5waW5fcGFnZXNgLCBgcmRzX3JkbWFfZnJlZV9vcGAsIGByZHNfYXRvbWljX29wX3VucGluX3BhZ2VgLCBgcmRzX2F0b21pY19mcmVlX29wYCwgYHJkc19jbXNnX3JkbWFfYXJnc2AsIGFuZCBgcmRzX3NlbmRfeG1pdGAuIFRoYXQncyBhIGxvdCBvZiB0b3VjaCBwb2ludHMsIGFuZCB0aGV5IGFsbCBsb29rIGNyaXRpY2FsLlxuXG5UaW1lIHRvIGNvbnNpZGVyIGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy4gYHJkc19zZW5kbXNnYCBsb29rcyBwcm9taXNpbmcgc2luY2UgaXQgY2FsbHMgYHJkc19jbXNnX3JkbWFfYXJnc2AgYW5kIGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyBtZXNzYWdlcy4gVGhlbiB0aGVyZSdzIGByZHNfcmVjdm1zZ2A7IGl0IGNvdWxkIHBvdGVudGlhbGx5IHRyaWdnZXIgYG1lc3NhZ2VfcHV0YCBsb2dpYy4gYHJkc19zZXRzb2Nrb3B0YCBzZWVtcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCBoYW5kbGVzIE1SIChNZW1vcnkgUmVnaW9uKSBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24sIHNwZWNpZmljYWxseSB3aXRoIG9wdGlvbnMgbGlrZSBgUkRTX0dFVF9NUmAgYW5kIGBSRFNfRlJFRV9NUmAuIFRoaXMgaXMgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBtZW1vcnkuIEZpbmFsbHksIGByZHNfc2VuZF94bWl0YCBhcHBlYXJzIHRvIGJlIGEga2V5IGZ1bmN0aW9uIGluIHRoZSB0cmFuc21pdCBwYXRoLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBgcmRzX3NldHNvY2tvcHRgIGRpcmVjdGx5LiBJIG5lZWQgdG8gY29uZmlybSBpdHMgcm9sZSBpbiBNUiBtYW5hZ2VtZW50LCBhbmQgSSdsbCBmaW5kIGl0IGluIGVpdGhlciBgbmV0L3Jkcy9hZl9yZHMuY2Agb3IgYG5ldC9yZHMvYmluZC5jYC4gSSdtIHN0YXJ0aW5nIHRvIGdldCBhIGdvb2QgcGljdHVyZSBvZiB3aGVyZSBJIHNob3VsZCBmb2N1cyBteSBhdHRlbnRpb24sIGdpdmVuIG15IGV4cGVydGlzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODgzNiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzowMjo1Ny40NDcyNzc4OTFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMzkwOTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJkc19zZXRzb2Nrb3B0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yZHMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yZHMvYWZfcmRzLmM9NDA5PXN0YXRpYyBpbnQgcmRzX3JlY3ZfdHJhY2tfbGF0ZW5jeShzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzb2NrcHRyX3Qgb3B0dmFsLFxcbi0tXFxubmV0L3Jkcy9hZl9yZHMuYy00MzUtXFxubmV0L3Jkcy9hZl9yZHMuYzo0MzY6c3RhdGljIGludCByZHNfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbm5ldC9yZHMvYWZfcmRzLmMtNDM3LVxcdFxcdFxcdCAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcXG4tLVxcbm5ldC9yZHMvYWZfcmRzLmM9NjQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHJkc19wcm90b19vcHMgPSB7XFxuLS1cXG5uZXQvcmRzL2FmX3Jkcy5jLTY1OC1cXHQuc2h1dGRvd24gPVxcdHNvY2tfbm9fc2h1dGRvd24sXFxubmV0L3Jkcy9hZl9yZHMuYzo2NTk6XFx0LnNldHNvY2tvcHQgPVxcdHJkc19zZXRzb2Nrb3B0LFxcbm5ldC9yZHMvYWZfcmRzLmMtNjYwLVxcdC5nZXRzb2Nrb3B0X2l0ZXIgPVxcdHJkc19nZXRzb2Nrb3B0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzowMjo1Ny41MTA2NzM1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMzI3OTE0NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSdyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBgcmRzX3NldHNvY2tvcHRgIEltcGxlbWVudGF0aW9uKipcblxuUmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdGFrZSBhIGNyaXRpY2FsIGxvb2sgYXQgdGhlIGByZHNfc2V0c29ja29wdGAgaW1wbGVtZW50YXRpb24uIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIChvciBwb3RlbnRpYWwgcHJvYmxlbXMpIGhhcHBlbiB3aGVuIGNvbmZpZ3VyaW5nIHNvY2tldCBvcHRpb25zIHdpdGhpbiB0aGUgUkRTIHByb3RvY29sIHN0YWNrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBkZXNpZ25lZCwgd2hhdCBvcHRpb25zIGFyZSBoYW5kbGVkLCBob3cgdGhleSdyZSB2YWxpZGF0ZWQsIGFuZCB3aGF0IGltcGFjdCB0aGV5IGhhdmUgb24gdGhlIHVuZGVybHlpbmcgUkRTIGNvbW11bmljYXRpb24uIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhpcyBpcyBvZnRlbiBhIGRlbGljYXRlIGFyZWEgd2hlcmUgc3VidGxlIGJ1Z3MgY2FuIGxlYWQgdG8gc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcywgb3IgZXZlbiBzeXN0ZW0gaW5zdGFiaWxpdHkuIEknbGwgYmUgcGFydGljdWxhcmx5IGZvY3VzZWQgb24gcmVzb3VyY2UgbWFuYWdlbWVudCwgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgYW5kIGVycm9yIGhhbmRsaW5nLiBJJ2xsIG5lZWQgdG8gZGlzc2VjdCB0aGUgY29kZSBjYXJlZnVsbHksIGNvbnNpZGVyIHRoZSBjb250ZXh0IG9mIHRoZSBjYWxsaW5nIGVudmlyb25tZW50LCBhbmQgbG9vayBmb3IgYW55IGFzc3VtcHRpb25zIHRoYXQgbWlnaHQgYnJlYWsgZG93biB1bmRlciB1bnVzdWFsIGNpcmN1bXN0YW5jZXMuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5NjEsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzowMzowMC44NDM0Njc1MjdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMDEwMDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlJEU19HRVRfTVJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Jkcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Jkcy9hZl9yZHMuYz00MzY9c3RhdGljIGludCByZHNfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L3Jkcy9hZl9yZHMuYy00NTEtXFx0XFx0YnJlYWs7XFxubmV0L3Jkcy9hZl9yZHMuYzo0NTI6XFx0Y2FzZSBSRFNfR0VUX01SOlxcbm5ldC9yZHMvYWZfcmRzLmMtNDUzLVxcdFxcdHJldCA9IHJkc19nZXRfbXIocnMsIG9wdHZhbCwgb3B0bGVuKTtcXG5uZXQvcmRzL2FmX3Jkcy5jLTQ1NC1cXHRcXHRicmVhaztcXG5uZXQvcmRzL2FmX3Jkcy5jOjQ1NTpcXHRjYXNlIFJEU19HRVRfTVJfRk9SX0RFU1Q6XFxubmV0L3Jkcy9hZl9yZHMuYy00NTYtXFx0XFx0cmV0ID0gcmRzX2dldF9tcl9mb3JfZGVzdChycywgb3B0dmFsLCBvcHRsZW4pO1xcbi0tXFxubmV0L3Jkcy9pYl9mcm1yLmM9NDA1PXN0cnVjdCByZHNfaWJfbXIgKnJkc19pYl9yZWdfZnJtcihzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2LFxcbi0tXFxubmV0L3Jkcy9pYl9mcm1yLmMtNDE0LVxcdGlmICghaWMpIHtcXG5uZXQvcmRzL2liX2ZybXIuYzo0MTU6XFx0XFx0LyogVE9ETzogQWRkIEZSV1Igc3VwcG9ydCBmb3IgUkRTX0dFVF9NUiB1c2luZyBwcm94eSBxcCovXFxubmV0L3Jkcy9pYl9mcm1yLmMtNDE2LVxcdFxcdHJldHVybiBFUlJfUFRSKC1FT1BOT1RTVVBQKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTM6MDM6MDAuOTA2NDgyNjY2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNjIyMDI0MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHN5bWJvbHMsIGZvY3VzaW5nIG9uIHRoZWlyIGltcG9ydGFuY2U6XG5cbioqTXkgTWVudGFsIFJvYWRtYXAgZm9yIE1lbW9yeSBSZWdpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgUkRNQSBmdW5jdGlvbiBjYWxscyBhbmQsIGZyb20gYSBtZW1vcnkgbWFuYWdlbWVudCBwZXJzcGVjdGl2ZSwgYHJkc19nZXRfbXJgIGFuZCBgcmRzX2dldF9tcl9mb3JfZGVzdGAgYXJlIGRlZmluaXRlbHkganVtcGluZyBvdXQgYXMgY3J1Y2lhbC4gVGhleSBhcmUgbXkgcHJpbWFyeSBmb2N1cy4gVGhleSBhcmUgdGhlIGluaXRpYWwgc3RlcHMgZm9yIHJlZ2lzdGVyaW5nIG1lbW9yeSBhbmQgb2J0YWluaW5nIE1lbW9yeSBSZWdpb24gKE1SKSBoYW5kbGVzLiBUaGV5J3JlIHdoZXJlIGl0IGFsbCAqc3RhcnRzKi4gSSBuZWVkIHRvIHRob3JvdWdobHkgdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBvZiBob3cgdGhlc2UgZnVuY3Rpb25zIGFsbG9jYXRlLCBtYXAsIGFuZCBzZWN1cmUgdGhlc2UgTVJzLiBUaGUgaW1wbGljYXRpb25zIGZvciBwZXJmb3JtYW5jZSwgc2VjdXJpdHkgYW5kIGNvbmN1cnJlbmN5IGFyZSBpbW1lZGlhdGVseSBhcHBhcmVudC5cblxuQW5kIG5hdHVyYWxseSwgYHJkc19mcmVlX21yYCBpcyBlcXVhbGx5IGltcG9ydGFudCwgYnV0IG9uIHRoZSBvdGhlciBlbmQgb2YgdGhlIHRyYW5zYWN0aW9uLiBJdCdzIHRoZSBjcml0aWNhbCBzdGVwIGZvciAqcmVsZWFzaW5nKiB0aGUgTVIuIElmIEkgZG9uJ3QgZ2V0IHRoZSBtZW1vcnkgZGVhbGxvY2F0aW9uIHBhcnQgcmlnaHQsIEknbGwgaGF2ZSBhbGwga2luZHMgb2YgcHJvYmxlbXM6IHJlc291cmNlIGxlYWtzLCBmcmFnbWVudGF0aW9uLCBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIGlmIHRoZXNlIHJlc291cmNlcyBhcmUgbm90IGNvcnJlY3RseSB6ZXJvZWQvY2xlYW5lZCB1cCwgeW91IG5hbWUgaXQuXG5cblNvLCBgcmRzX2dldF9tcmAsIGByZHNfZ2V0X21yX2Zvcl9kZXN0YCwgYW5kIGByZHNfZnJlZV9tcmAgYXJlIG15IGtleSBmb2N1cyBwb2ludHMuIFRoZWlyIGJlaGF2aW9yIGFuZCBpbnRlcmFjdGlvbnMgZGljdGF0ZSB0aGUgaW50ZWdyaXR5IGFuZCBlZmZpY2llbmN5IG9mIHRoZSBlbnRpcmUgbWVtb3J5IG1hbmFnZW1lbnQgbGF5ZXIgb2YgdGhpcyBSRE1BIGltcGxlbWVudGF0aW9uLiBUaG9zZSBhcmUgdGhlIGZ1bmN0aW9ucyB0aGF0IHdpbGwgdGVsbCBtZSBob3cgdG8gYnVpbGQgc29tZXRoaW5nIHJvYnVzdCwgcGVyZm9ybWFudCwgYW5kIHNlY3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1NTAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzowMzowNS4xNjg2ODg5MThaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NzYxMjM5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJSRFNfRlJFRV9NUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcmRzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcmRzL2FmX3Jkcy5jPTQzNj1zdGF0aWMgaW50IHJkc19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvcmRzL2FmX3Jkcy5jLTQ1Ny1cXHRcXHRicmVhaztcXG5uZXQvcmRzL2FmX3Jkcy5jOjQ1ODpcXHRjYXNlIFJEU19GUkVFX01SOlxcbm5ldC9yZHMvYWZfcmRzLmMtNDU5LVxcdFxcdHJldCA9IHJkc19mcmVlX21yKHJzLCBvcHR2YWwsIG9wdGxlbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEzOjAzOjA1LjUxNjMwNTI5MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzE3NTgzNDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMuXG5cbioqQWRkaW5nIFJETUEgTWVtb3J5IFJlZ2lvbiBGdW5jdGlvbnMgdG8gdGhlIFRvb2xraXQqKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBpbnRlZ3JhdGUgdGhlc2UgUkRNQSBmdW5jdGlvbnMuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gaW50cm9kdWNlIHRoZSBjb3JlIGZ1bmN0aW9uczogYHJkc19nZXRfbXJgLCBgcmRzX2dldF9tcl9mb3JfZGVzdGAsIGByZHNfZnJlZV9tcmAsIGByZHNfc2VuZG1zZ2AsIGFuZCBgcmRzX3JlY3Ztc2dgLiBUaGF0J3MgdGhlIGJhc2VsaW5lLCB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzLlxuXG5Ob3csIGhvbGQgb24uLi4gd2hhdCBhYm91dCBgcmRzX2Ntc2dfcmRtYV9hcmdzYD8gV2hlcmUgZG9lcyB0aGF0IGZpdCBpbj8gQWgsIGl0J3MgY2FsbGVkIGZyb20gYHJkc19zZW5kbXNnYC4gT2theSwgdGhhdCdzIGNydWNpYWw7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgY29ubmVjdGlvbiBjbGVhcmx5LiBJ4oCZZCBiZXR0ZXIgdGhvcm91Z2hseSBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHJkc19zZW5kbXNnYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgc28gaXQncyB0aGUgcmlnaHQgcGxhY2UgdG8gYmVnaW4uIFRpbWUgdG8gZGlnIGluIGFuZCBlbnN1cmUgSSd2ZSBnb3QgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDM0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTM6MDM6MDkuODMzODkxNDUzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDE5MDE1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZHNfc2VuZG1zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcmRzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcmRzL2FmX3Jkcy5jPTY0Nj1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyByZHNfcHJvdG9fb3BzID0ge1xcbi0tXFxubmV0L3Jkcy9hZl9yZHMuYy02NjAtXFx0LmdldHNvY2tvcHRfaXRlciA9XFx0cmRzX2dldHNvY2tvcHQsXFxubmV0L3Jkcy9hZl9yZHMuYzo2NjE6XFx0LnNlbmRtc2cgPVxcdHJkc19zZW5kbXNnLFxcbm5ldC9yZHMvYWZfcmRzLmMtNjYyLVxcdC5yZWN2bXNnID1cXHRyZHNfcmVjdm1zZyxcXG4tLVxcbm5ldC9yZHMvcmRzLmg9NjI5PXN0cnVjdCByZHNfc29jayB7XFxuLS1cXG5uZXQvcmRzL3Jkcy5oLTY1MS1cXHQvKlxcbm5ldC9yZHMvcmRzLmg6NjUyOlxcdCAqIHJkc19zZW5kbXNnIGNhY2hlcyB0aGUgY29ubiBpdCB1c2VkIHRoZSBsYXN0IHRpbWUgYXJvdW5kLlxcbm5ldC9yZHMvcmRzLmgtNjUzLVxcdCAqIFRoaXMgaGVscHMgYXZvaWQgY29zdGx5IGxvb2t1cHMuXFxuLS1cXG5uZXQvcmRzL3Jkcy5oPTk1MD12b2lkIHJkczZfaW5jX2luZm9fY29weShzdHJ1Y3QgcmRzX2luY29taW5nICppbmMsXFxuLS1cXG5uZXQvcmRzL3Jkcy5oLTk1NS0vKiBzZW5kLmMgKi9cXG5uZXQvcmRzL3Jkcy5oOjk1NjppbnQgcmRzX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgcGF5bG9hZF9sZW4pO1xcbm5ldC9yZHMvcmRzLmgtOTU3LXZvaWQgcmRzX3NlbmRfcGF0aF9yZXNldChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY29ubik7XFxuLS1cXG5uZXQvcmRzL3JlY3YuYz0xOTk9c3RhdGljIHZvaWQgcmRzX3JlY3ZfaHNfZXh0aGRycyhzdHJ1Y3QgcmRzX2hlYWRlciAqaGRyLFxcbi0tXFxubmV0L3Jkcy9yZWN2LmMtMjcwLSAqXFxubmV0L3Jkcy9yZWN2LmM6MjcxOiAqIDEuIHJkc19zZW5kbXNnIG9uIGZpcnN0IGNvbm5lY3QgYXR0ZW1wdCBzZW5kcyB0aGUgcHJvYmUgcGluZywgd2l0aCB0aGVcXG5uZXQvcmRzL3JlY3YuYy0yNzItICogICAgc2VuZGVyJ3MgbnBhdGhzIChzX25wYXRocylcXG4tLVxcbm5ldC9yZHMvc2VuZC5jPTExMTg9c3RhdGljIGludCByZHNfcmRtYV9ieXRlcyhzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCAqcmRtYV9ieXRlcylcXG4tLVxcbm5ldC9yZHMvc2VuZC5jLTExNDAtXFxubmV0L3Jkcy9zZW5kLmM6MTE0MTppbnQgcmRzX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgcGF5bG9hZF9sZW4pXFxubmV0L3Jkcy9zZW5kLmMtMTE0Mi17XFxuLS1cXG5uZXQvcmRzL3NlbmQuYy0xMTY2LVxcbm5ldC9yZHMvc2VuZC5jOjExNjc6XFx0LyogZXhwZWN0IDEgUkRNQSBDTVNHIHBlciByZHNfc2VuZG1zZy4gY2FuIHN0aWxsIGdyb3cgaWYgbW9yZSBuZWVkZWQuICovXFxubmV0L3Jkcy9zZW5kLmMtMTE2OC1cXHR2Y3QuaW5jciA9IDE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEzOjAzOjA5LjkxNDA4NzA1MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDYwNjcxMTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMsIHB1dHRpbmcgbXlzZWxmIGluIHRoZSByb2xlIG9mIHRoaW5raW5nIHRocm91Z2ggdGhlaXIgc2lnbmlmaWNhbmNlOlxuXG4qKktleSBGdW5jdGlvbiBTcG90bGlnaHQ6IGByZHNfc2VuZG1zZ2AgYW5kIGByZHNfc2VuZF94bWl0YCoqXG5cbkFscmlnaHQsIGxldCdzIHplcm8gaW4gb24gYSBjb3VwbGUgb2YgY3J1Y2lhbCBwb2ludHMgaW4gdGhlIFJlbW90ZSBEaXJlY3QgRGF0YSBUcmFuc2ZlciAoUkRNQSkgY29tbXVuaWNhdGlvbiBwYXRoLiBJJ3ZlIGJlZW4gZ2l2aW5nIHNvbWUgdGhvdWdodCB0byB0aGUgZnVuZGFtZW50YWwgcGllY2VzLCBhbmQgYHJkc19zZW5kbXNnYCBhbmQgYHJkc19zZW5kX3htaXRgIGFyZSBkZWZpbml0ZWx5IHN0YW5kaW5nIG91dCBhcyBnb29kIGZvY3VzIHN5bWJvbHMuIFRoZXkgc2VlbSB0byBiZSByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhlIHNlbmQgcHJvY2Vzcy4gS25vd2luZyBob3cgdGhlc2Ugd29yayBpcyBrZXkuXG5cbmByZHNfc2VuZG1zZ2AgcGFydGljdWxhcmx5IGxvb2tzIGludGVyZXN0aW5nIGFzIHRoZSBzdGFydGluZyBwb2ludC4gSSdtIGltYWdpbmluZyBpdCdzIHRoZSBpbnRlcmZhY2UsIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIGFwcGxpY2F0aW9uIHRvIGluaXRpYXRlIGEgc2VuZCBvcGVyYXRpb24uIEl0J3MgdGhlIFwiZnJvbnQgZG9vcixcIiBzbyB0byBzcGVhay4gVGhlbiwgZnJvbSB0aGF0IHBvaW50LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nLiBgcmRzX3NlbmRfeG1pdGAgb24gdGhlIG90aGVyIGhhbmQgbGlrZWx5IGhhbmRsZXMgdGhlIGFjdHVhbCB0cmFuc21pc3Npb24gb2YgdGhlIGRhdGEuIFRoYXQgc2VlbXMgbGlrZSB0aGUgaGVhdnkgbGlmdGluZyBwYXJ0IG9mIHRoZSBwcm9jZXNzIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSBmbG93IG9mIHRoaXMgZnVuY3Rpb24gaXMgZ29pbmcgdG8gZ2l2ZSBtZSBkZWVwIGluc2lnaHQgaW50byB0aGUgZWZmaWNpZW5jeSBvZiBSRE1BIHRyYW5zZmVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5ODcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzowMzoxNC45NzQ3NjE5MTFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNzEzMzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJkc19zZW5kX3htaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Jkcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Jkcy9jb25nLmM9MjE3PXZvaWQgcmRzX2NvbmdfcXVldWVfdXBkYXRlcyhzdHJ1Y3QgcmRzX2NvbmdfbWFwICptYXApXFxuLS1cXG5uZXQvcmRzL2NvbmcuYy0yMzAtXFx0XFx0XFx0cmRzX3N0YXRzX2luYyhzX2NvbmdfdXBkYXRlX3F1ZXVlZCk7XFxubmV0L3Jkcy9jb25nLmM6MjMxOlxcdFxcdFxcdC8qIFdlIGNhbm5vdCBpbmxpbmUgdGhlIGNhbGwgdG8gcmRzX3NlbmRfeG1pdCgpIGhlcmVcXG5uZXQvcmRzL2NvbmcuYy0yMzItXFx0XFx0XFx0ICogZm9yIHR3byByZWFzb25zIChib3RoIHBlcnRhaW5pbmcgdG8gYSBUQ1AgdHJhbnNwb3J0KTpcXG4tLVxcbm5ldC9yZHMvaWJfY20uYz0yODI9c3RhdGljIHZvaWQgcmRzX2liX3Rhc2tsZXRfZm5fc2VuZCh1bnNpZ25lZCBsb25nIGRhdGEpXFxuLS1cXG5uZXQvcmRzL2liX2NtLmMtMjk5LVxcdCAgICB0ZXN0X2JpdCgwLCBcXHUwMDI2Y29ubi1cXHUwMDNlY19tYXBfcXVldWVkKSkpXFxubmV0L3Jkcy9pYl9jbS5jOjMwMDpcXHRcXHRyZHNfc2VuZF94bWl0KFxcdTAwMjZpYy1cXHUwMDNlY29ubi1cXHUwMDNlY19wYXRoWzBdKTtcXG5uZXQvcmRzL2liX2NtLmMtMzAxLX1cXG4tLVxcbm5ldC9yZHMvaWJfc2VuZC5jPTI0NT12b2lkIHJkc19pYl9zZW5kX2NxZV9oYW5kbGVyKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMsIHN0cnVjdCBpYl93YyAqd2MpXFxuLS1cXG5uZXQvcmRzL2liX3NlbmQuYy0zMzUtICpcXG5uZXQvcmRzL2liX3NlbmQuYzozMzY6ICogVGhlIFJEUyBzZW5kIGNvZGUgaXMgZXNzZW50aWFsbHkgc2luZ2xlLXRocmVhZGVkOyByZHNfc2VuZF94bWl0XFxubmV0L3Jkcy9pYl9zZW5kLmMtMzM3LSAqIHNldHMgUkRTX0lOX1hNSVQgdG8gZW5zdXJlIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gdGhlIHNlbmQgcmluZy5cXG4tLVxcbm5ldC9yZHMvbG9vcC5jPTIzMT12b2lkIHJkc19sb29wX25ldF9leGl0KHZvaWQpXFxuLS1cXG5uZXQvcmRzL2xvb3AuYy0yMzctICogVGhpcyBpcyBtaXNzaW5nIC54bWl0XyogYmVjYXVzZSBsb29wIGRvZXNuJ3QgZ28gdGhyb3VnaCBnZW5lcmljXFxubmV0L3Jkcy9sb29wLmM6MjM4OiAqIHJkc19zZW5kX3htaXQoKSBhbmQgZG9lc24ndCBjYWxsIHJkc19yZWN2X2luY29taW5nKCkuICAubGlzdGVuX3N0b3AgYW5kXFxubmV0L3Jkcy9sb29wLmMtMjM5LSAqIC5sYWRkcl9jaGVjayBhcmUgbWlzc2luZyBiZWNhdXNlIHRyYW5zcG9ydC5jIGRvZXNuJ3QgaXRlcmF0ZSBvdmVyXFxuLS1cXG5uZXQvcmRzL3Jkcy5oPTU0MD1zdHJ1Y3QgcmRzX3RyYW5zcG9ydCB7XFxuLS1cXG5uZXQvcmRzL3Jkcy5oLTU4MC1cXHQvKlxcbm5ldC9yZHMvcmRzLmg6NTgxOlxcdCAqIC54bWl0IGlzIGNhbGxlZCBieSByZHNfc2VuZF94bWl0KCkgdG8gdGVsbCB0aGUgdHJhbnNwb3J0IHRvIHNlbmRcXG5uZXQvcmRzL3Jkcy5oLTU4Mi1cXHQgKiBwYXJ0IG9mIGEgbWVzc2FnZS4gIFRoZSBjYWxsZXIgc2VyaWFsaXplcyBvbiB0aGUgc2VuZF9zZW0gc28gdGhpc1xcbi0tXFxubmV0L3Jkcy9yZHMuaD05NTc9dm9pZCByZHNfc2VuZF9wYXRoX3Jlc2V0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjb25uKTtcXG5uZXQvcmRzL3Jkcy5oOjk1ODppbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApO1xcbm5ldC9yZHMvcmRzLmgtOTU5LXN0cnVjdCBzb2NrYWRkcl9pbjtcXG4tLVxcbm5ldC9yZHMvc2VuZC5jLTQ0LVxcbm5ldC9yZHMvc2VuZC5jOjQ1Oi8qIFdoZW4gdHJhbnNtaXR0aW5nIG1lc3NhZ2VzIGluIHJkc19zZW5kX3htaXQsIHdlIG5lZWQgdG8gZW1lcmdlIGZyb21cXG5uZXQvcmRzL3NlbmQuYy00Ni0gKiB0aW1lIHRvIHRpbWUgYW5kIGJyaWVmbHkgcmVsZWFzZSB0aGUgQ1BVLiBPdGhlcndpc2UgdGhlIHNvZnRsb2NrIHdhdGNoZG9nXFxuLS1cXG5uZXQvcmRzL3NlbmQuYz01OT1zdGF0aWMgdm9pZCByZHNfc2VuZF9yZW1vdmVfZnJvbV9zb2NrKHN0cnVjdCBsaXN0X2hlYWQgKm1lc3NhZ2VzLCBpbnQgc3RhdHVzKTtcXG4tLVxcbm5ldC9yZHMvc2VuZC5jLTYyLSAqIFJlc2V0IHRoZSBzZW5kIHN0YXRlLiAgQ2FsbGVycyBtdXN0IGVuc3VyZSB0aGF0IHRoaXMgZG9lc24ndCByYWNlIHdpdGhcXG5uZXQvcmRzL3NlbmQuYzo2MzogKiByZHNfc2VuZF94bWl0KCkuXFxubmV0L3Jkcy9zZW5kLmMtNjQtICovXFxuLS1cXG5uZXQvcmRzL3NlbmQuYz0xMjg9c3RhdGljIGJvb2wgcmRzX21wcmRzX2NwMF9jYXRjaHVwKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubilcXG4tLVxcbm5ldC9yZHMvc2VuZC5jLTE4Ni0gKi9cXG5uZXQvcmRzL3NlbmQuYzoxODc6aW50IHJkc19zZW5kX3htaXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxcbm5ldC9yZHMvc2VuZC5jLTE4OC17XFxuLS1cXG5uZXQvcmRzL3NlbmQuYy01NDEtfVxcbm5ldC9yZHMvc2VuZC5jOjU0MjpFWFBPUlRfU1lNQk9MX0dQTChyZHNfc2VuZF94bWl0KTtcXG5uZXQvcmRzL3NlbmQuYy01NDMtXFxuLS1cXG5uZXQvcmRzL3NlbmQuYz02NzY9c3RhdGljIHZvaWQgcmRzX3NlbmRfcmVtb3ZlX2Zyb21fc29jayhzdHJ1Y3QgbGlzdF9oZWFkICptZXNzYWdlcywgaW50IHN0YXR1cylcXG4tLVxcbm5ldC9yZHMvc2VuZC5jLTc1MS0gKiBtZXNzYWdlcyB1cCB0bywgYW5kIGluY2x1ZGluZywgdGhlIGdpdmVuIHNlcXVlbmNlIG51bWJlci4gIE1lc3NhZ2VzIGFyZVxcbm5ldC9yZHMvc2VuZC5jOjc1MjogKiBtb3ZlZCB0byB0aGUgcmV0cmFucyBxdWV1ZSB3aGVuIHJkc19zZW5kX3htaXQgcGlja3MgdGhlbSBvZmYgdGhlIHNlbmRcXG5uZXQvcmRzL3NlbmQuYy03NTMtICogcXVldWUuIFRoaXMgbWVhbnMgdGhhdCBpbiB0aGUgVENQIGNhc2UsIHRoZSBtZXNzYWdlIG1heSBub3QgaGF2ZSBiZWVuXFxuLS1cXG5uZXQvcmRzL3NlbmQuYz0xMTQxPWludCByZHNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBwYXlsb2FkX2xlbilcXG4tLVxcbm5ldC9yZHMvc2VuZC5jLTE0MzgtXFxubmV0L3Jkcy9zZW5kLmM6MTQzOTpcXHRyZXQgPSByZHNfc2VuZF94bWl0KGNwYXRoKTtcXG5uZXQvcmRzL3NlbmQuYy0xNDQwLVxcdGlmIChyZXQgPT0gLUVOT01FTSB8fCByZXQgPT0gLUVBR0FJTikge1xcbi0tXFxubmV0L3Jkcy90Y3AuYz0xMjY9dm9pZCByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbi0tXFxubmV0L3Jkcy90Y3AuYy0xNDAtXFx0ICogY3Bfc3RhdGUgdG8gc29tZXRoaW5nIG90aGVyIHRoYW4gUkRTX0NPTk5fVVAsIGFuZCB0aGVuXFxubmV0L3Jkcy90Y3AuYzoxNDE6XFx0ICogd2FpdGluZyBmb3IgYW55IGV4aXN0aW5nIHRocmVhZHMgaW4gcmRzX3NlbmRfeG1pdCB0b1xcbm5ldC9yZHMvdGNwLmMtMTQyLVxcdCAqIGNvbXBsZXRlIHJlbGVhc2VfaW5feG1pdCgpLiAoU3Vic2VxdWVudCB0aHJlYWRzIGVudGVyaW5nXFxubmV0L3Jkcy90Y3AuYzoxNDM6XFx0ICogcmRzX3NlbmRfeG1pdCgpIHdpbGwgYmFpbCBvbiAhcmRzX2Nvbm5fdXAoKS5cXG5uZXQvcmRzL3RjcC5jLTE0NC1cXHQgKlxcbi0tXFxubmV0L3Jkcy90aHJlYWRzLmM9MTkxPXZvaWQgcmRzX3NlbmRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9yZHMvdGhyZWFkcy5jLTE5OS1cXHRcXHRjbGVhcl9iaXQoUkRTX0xMX1NFTkRfRlVMTCwgXFx1MDAyNmNwLVxcdTAwM2VjcF9mbGFncyk7XFxubmV0L3Jkcy90aHJlYWRzLmM6MjAwOlxcdFxcdHJldCA9IHJkc19zZW5kX3htaXQoY3ApO1xcbm5ldC9yZHMvdGhyZWFkcy5jLTIwMS1cXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTM6MDM6MTUuMDM1NDgxNTFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMyNzkyNTU5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBSRFMgQ29kZSoqXG5cblJpZ2h0LCBzbyBJJ20gaG9uaW5nIGluIG9uIHRoZSBjcnVjaWFsIHRyYW5zbWlzc2lvbiBwYXRoIGhlcmUuIGByZHNfc2VuZF94bWl0YCBzZWVtcyBsaWtlIGEgZ29vZCBmb2NhbCBwb2ludCDigJMgaXQncyBhIGtleSBmdW5jdGlvbiBpbiBnZXR0aW5nIHRoZSBkYXRhIG91dCB0aGUgZG9vci4gSSBzaG91bGQgcHJvYmFibHkgc3RhcnQgdGhlcmUuXG5cbkJ1dCBiZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW4gdGhhdCBwYXJ0aWN1bGFyIGJpdCBvZiBjb2RlLCBpdCBtaWdodCBiZSBiZW5lZmljaWFsIHRvIGNoZWNrIHRoZSBmdW5jdGlvbiB0aGF0IGZlZWRzIGByZHNfc2VuZF94bWl0YCBpdHMgZGF0YTogYHJkc19tZXNzYWdlX3B1dGAuIFRoaXMgZnVuY3Rpb24gbGlrZWx5IGhhbmRsZXMgcHJlcGFyaW5nIGFuZCBxdWV1aW5nIHRoZSBtZXNzYWdlcyBmb3IgdHJhbnNtaXNzaW9uLCBzbyB1bmRlcnN0YW5kaW5nIGl0cyByb2xlIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgcmRzX3NlbmRfeG1pdGAgaW50ZXJhY3RzIHdpdGggdGhlIGhpZ2hlciBsZXZlbCBtZXNzYWdpbmcgbG9naWMuIEl0IHNob3VsZCBhbHNvIHByb3ZpZGUgdmFsdWFibGUgY29udGV4dCwgYXMgd2VsbCBhcyBlbnN1cmUgdGhhdCBJJ20gdGFraW5nIGEgdG9wLWRvd24gYXBwcm9hY2guIEkgc2hvdWxkIHN0YXJ0IHRoZXJlIGFuZCB0aGVuIG1vdmUgdG8gYHJkc19zZW5kX3htaXRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzgzNywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEzOjAzOjIwLjM2MzQxMDkzNVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY3MDQ1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmRzX21lc3NhZ2VfcHV0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yZHMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yZHMvY29ubmVjdGlvbi5jPTQ2OD1zdGF0aWMgdm9pZCByZHNfY29ubl9wYXRoX2Rlc3Ryb3koc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxcbi0tXFxubmV0L3Jkcy9jb25uZWN0aW9uLmMtNDg3LVxcdFxcdEJVR19PTighbGlzdF9lbXB0eShcXHUwMDI2cm0tXFx1MDAzZW1fc29ja19pdGVtKSk7XFxubmV0L3Jkcy9jb25uZWN0aW9uLmM6NDg4OlxcdFxcdHJkc19tZXNzYWdlX3B1dChybSk7XFxubmV0L3Jkcy9jb25uZWN0aW9uLmMtNDg5LVxcdH1cXG5uZXQvcmRzL2Nvbm5lY3Rpb24uYy00OTAtXFx0aWYgKGNwLVxcdTAwM2VjcF94bWl0X3JtKVxcbm5ldC9yZHMvY29ubmVjdGlvbi5jOjQ5MTpcXHRcXHRyZHNfbWVzc2FnZV9wdXQoY3AtXFx1MDAzZWNwX3htaXRfcm0pO1xcbm5ldC9yZHMvY29ubmVjdGlvbi5jLTQ5Mi1cXG4tLVxcbm5ldC9yZHMvaWJfY20uYz0xMDY0PXZvaWQgcmRzX2liX2Nvbm5fcGF0aF9zaHV0ZG93bihzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXFxuLS1cXG5uZXQvcmRzL2liX2NtLmMtMTE4NS1cXHRcXHRybSA9IGNvbnRhaW5lcl9vZihpYy1cXHUwMDNlaV9kYXRhX29wLCBzdHJ1Y3QgcmRzX21lc3NhZ2UsIGRhdGEpO1xcbm5ldC9yZHMvaWJfY20uYzoxMTg2OlxcdFxcdHJkc19tZXNzYWdlX3B1dChybSk7XFxubmV0L3Jkcy9pYl9jbS5jLTExODctXFx0XFx0aWMtXFx1MDAzZWlfZGF0YV9vcCA9IE5VTEw7XFxuLS1cXG5uZXQvcmRzL2liX3NlbmQuYz0yNDU9dm9pZCByZHNfaWJfc2VuZF9jcWVfaGFuZGxlcihzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljLCBzdHJ1Y3QgaWJfd2MgKndjKVxcbi0tXFxubmV0L3Jkcy9pYl9zZW5kLmMtMjg5LVxcdFxcdFxcdH1cXG5uZXQvcmRzL2liX3NlbmQuYzoyOTA6XFx0XFx0XFx0cmRzX21lc3NhZ2VfcHV0KHJtKTtcXG5uZXQvcmRzL2liX3NlbmQuYy0yOTEtXFx0XFx0XFx0c2VuZC1cXHUwMDNlc19vcCA9IE5VTEw7XFxuLS1cXG5uZXQvcmRzL2xvb3AuYz0xMTE9c3RhdGljIHZvaWQgcmRzX2xvb3BfaW5jX2ZyZWUoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKVxcbi0tXFxubmV0L3Jkcy9sb29wLmMtMTE0LVxcbm5ldC9yZHMvbG9vcC5jOjExNTpcXHRyZHNfbWVzc2FnZV9wdXQocm0pO1xcbm5ldC9yZHMvbG9vcC5jLTExNi19XFxuLS1cXG5uZXQvcmRzL21lc3NhZ2UuYz0xODU9c3RhdGljIHZvaWQgcmRzX21lc3NhZ2VfdW5waW5fd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9yZHMvbWVzc2FnZS5jLTE5Ny1cXG5uZXQvcmRzL21lc3NhZ2UuYzoxOTg6dm9pZCByZHNfbWVzc2FnZV9wdXQoc3RydWN0IHJkc19tZXNzYWdlICpybSlcXG5uZXQvcmRzL21lc3NhZ2UuYy0xOTkte1xcbi0tXFxubmV0L3Jkcy9tZXNzYWdlLmMtMjIyLX1cXG5uZXQvcmRzL21lc3NhZ2UuYzoyMjM6RVhQT1JUX1NZTUJPTF9HUEwocmRzX21lc3NhZ2VfcHV0KTtcXG5uZXQvcmRzL21lc3NhZ2UuYy0yMjQtXFxuLS1cXG5uZXQvcmRzL21lc3NhZ2UuYz00MTA9c3RydWN0IHJkc19tZXNzYWdlICpyZHNfbWVzc2FnZV9tYXBfcGFnZXModW5zaWduZWQgbG9uZyAqcGFnZV9hZGRycywgdW5zaWduZWQgaW50IHRvdGFsX2xlbilcXG4tLVxcbm5ldC9yZHMvbWVzc2FnZS5jLTQyNi1cXHRcXHR2b2lkICplcnIgPSBFUlJfQ0FTVChybS1cXHUwMDNlZGF0YS5vcF9zZyk7XFxubmV0L3Jkcy9tZXNzYWdlLmM6NDI3OlxcdFxcdHJkc19tZXNzYWdlX3B1dChybSk7XFxubmV0L3Jkcy9tZXNzYWdlLmMtNDI4LVxcdFxcdHJldHVybiBlcnI7XFxuLS1cXG5uZXQvcmRzL3JkbWEuYz01MDY9dm9pZCByZHNfcmRtYV9mcmVlX29wKHN0cnVjdCBybV9yZG1hX29wICpybylcXG4tLVxcbm5ldC9yZHMvcmRtYS5jLTUxNi1cXHRcXHQvKiBEaXJ0eWluZyB0aGUgcGFnZXMgb24gdW5waW4gY2FuIHNsZWVwOyBsZWF2ZSB0aGVtXFxubmV0L3Jkcy9yZG1hLmM6NTE3OlxcdFxcdCAqIHBpbm5lZCBhbmQgaGF2ZSByZHNfbWVzc2FnZV9wdXQoKSBmaW5pc2ggdGhlIHVucGluXFxubmV0L3Jkcy9yZG1hLmMtNTE4LVxcdFxcdCAqIGZyb20gcHJvY2VzcyBjb250ZXh0Llxcbi0tXFxubmV0L3Jkcy9yZG1hLmM9NTM5PXZvaWQgcmRzX2F0b21pY19mcmVlX29wKHN0cnVjdCBybV9hdG9taWNfb3AgKmFvKVxcbi0tXFxubmV0L3Jkcy9yZG1hLmMtNTQ0LVxcdFxcdC8qIERpcnR5aW5nIHRoZSBwYWdlIG9uIHVucGluIGNhbiBzbGVlcDsgbGVhdmUgaXRcXG5uZXQvcmRzL3JkbWEuYzo1NDU6XFx0XFx0ICogcGlubmVkIGFuZCBoYXZlIHJkc19tZXNzYWdlX3B1dCgpIGZpbmlzaCB0aGUgdW5waW5cXG5uZXQvcmRzL3JkbWEuYy01NDYtXFx0XFx0ICogZnJvbSBwcm9jZXNzIGNvbnRleHQuXFxuLS1cXG5uZXQvcmRzL3Jkcy5oPTkxMT12b2lkIHJkc19tZXNzYWdlX2FkZHJlZihzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKTtcXG5uZXQvcmRzL3Jkcy5oOjkxMjp2b2lkIHJkc19tZXNzYWdlX3B1dChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKTtcXG5uZXQvcmRzL3Jkcy5oLTkxMy12b2lkIHJkc19tZXNzYWdlX3dhaXQoc3RydWN0IHJkc19tZXNzYWdlICpybSk7XFxuLS1cXG5uZXQvcmRzL3NlbmQuYz02NT12b2lkIHJkc19zZW5kX3BhdGhfcmVzZXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxcbi0tXFxubmV0L3Jkcy9zZW5kLmMtNzctXFx0XFx0cmRzX21lc3NhZ2VfdW5tYXBwZWQocm0pO1xcbm5ldC9yZHMvc2VuZC5jOjc4OlxcdFxcdHJkc19tZXNzYWdlX3B1dChybSk7XFxubmV0L3Jkcy9zZW5kLmMtNzktXFx0fVxcbi0tXFxubmV0L3Jkcy9zZW5kLmM9MTg3PWludCByZHNfc2VuZF94bWl0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcXG4tLVxcbm5ldC9yZHMvc2VuZC5jLTM1NC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgZmxhZ3MpO1xcbm5ldC9yZHMvc2VuZC5jOjM1NTpcXHRcXHRcXHRcXHRcXHRyZHNfbWVzc2FnZV9wdXQocm0pO1xcbm5ldC9yZHMvc2VuZC5jLTM1Ni1cXHRcXHRcXHRcXHR9XFxuLS1cXG5uZXQvcmRzL3NlbmQuYy00ODUtXFxubmV0L3Jkcy9zZW5kLmM6NDg2OlxcdFxcdFxcdHJkc19tZXNzYWdlX3B1dChybSk7XFxubmV0L3Jkcy9zZW5kLmMtNDg3LVxcdFxcdH1cXG4tLVxcbm5ldC9yZHMvc2VuZC5jLTQ5OC1cXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHJtLCBcXHUwMDI2dG9fYmVfZHJvcHBlZCwgbV9jb25uX2l0ZW0pXFxubmV0L3Jkcy9zZW5kLmM6NDk5OlxcdFxcdFxcdHJkc19tZXNzYWdlX3B1dChybSk7XFxubmV0L3Jkcy9zZW5kLmMtNTAwLVxcdFxcdHJkc19zZW5kX3JlbW92ZV9mcm9tX3NvY2soXFx1MDAyNnRvX2JlX2Ryb3BwZWQsIFJEU19SRE1BX0RST1BQRUQpO1xcbi0tXFxubmV0L3Jkcy9zZW5kLmM9Njc2PXN0YXRpYyB2b2lkIHJkc19zZW5kX3JlbW92ZV9mcm9tX3NvY2soc3RydWN0IGxpc3RfaGVhZCAqbWVzc2FnZXMsIGludCBzdGF0dXMpXFxuLS1cXG5uZXQvcmRzL3NlbmQuYy03MzctXFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cm0tXFx1MDAzZW1fcnNfbG9jaywgZmxhZ3MpO1xcbm5ldC9yZHMvc2VuZC5jOjczODpcXHRcXHRyZHNfbWVzc2FnZV9wdXQocm0pO1xcbm5ldC9yZHMvc2VuZC5jLTczOS1cXHRcXHRpZiAod2FzX29uX3NvY2spXFxubmV0L3Jkcy9zZW5kLmM6NzQwOlxcdFxcdFxcdHJkc19tZXNzYWdlX3B1dChybSk7XFxubmV0L3Jkcy9zZW5kLmMtNzQxLVxcdH1cXG4tLVxcbm5ldC9yZHMvc2VuZC5jPTc5Mz12b2lkIHJkc19zZW5kX2Ryb3BfdG8oc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHNvY2thZGRyX2luNiAqZGVzdClcXG4tLVxcbm5ldC9yZHMvc2VuZC5jLTg1Ni1cXG5uZXQvcmRzL3NlbmQuYzo4NTc6XFx0XFx0cmRzX21lc3NhZ2VfcHV0KHJtKTtcXG5uZXQvcmRzL3NlbmQuYy04NTgtXFx0fVxcbi0tXFxubmV0L3Jkcy9zZW5kLmMtODc5LVxcbm5ldC9yZHMvc2VuZC5jOjg4MDpcXHRcXHRyZHNfbWVzc2FnZV9wdXQocm0pO1xcbm5ldC9yZHMvc2VuZC5jLTg4MS1cXHR9XFxuLS1cXG5uZXQvcmRzL3NlbmQuYz0xMTQxPWludCByZHNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBwYXlsb2FkX2xlbilcXG4tLVxcbm5ldC9yZHMvc2VuZC5jLTE0NTItXFxubmV0L3Jkcy9zZW5kLmM6MTQ1MzpcXHRyZHNfbWVzc2FnZV9wdXQocm0pO1xcbm5ldC9yZHMvc2VuZC5jLTE0NTQtXFxuLS1cXG5uZXQvcmRzL3NlbmQuYy0xNDcyLVxcdGlmIChybSlcXG5uZXQvcmRzL3NlbmQuYzoxNDczOlxcdFxcdHJkc19tZXNzYWdlX3B1dChybSk7XFxubmV0L3Jkcy9zZW5kLmMtMTQ3NC1cXHRyZXR1cm4gcmV0O1xcbi0tXFxubmV0L3Jkcy9zZW5kLmM9MTQ4Nj1yZHNfc2VuZF9wcm9iZShzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3AsIF9fYmUxNiBzcG9ydCxcXG4tLVxcbm5ldC9yZHMvc2VuZC5jLTE1NDUtXFxubmV0L3Jkcy9zZW5kLmM6MTU0NjpcXHRyZHNfbWVzc2FnZV9wdXQocm0pO1xcbm5ldC9yZHMvc2VuZC5jLTE1NDctXFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvcmRzL3NlbmQuYy0xNTUwLVxcdGlmIChybSlcXG5uZXQvcmRzL3NlbmQuYzoxNTUxOlxcdFxcdHJkc19tZXNzYWdlX3B1dChybSk7XFxubmV0L3Jkcy9zZW5kLmMtMTU1Mi1cXHRyZXR1cm4gcmV0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzowMzoyMC40MjAxMTk5MTRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAzODY0MTU0MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgcmRzX21lc3NhZ2VfcHV0YCBVc2FnZSBhbmQgUmVsYXRlZCBDaGFuZ2VzKipcblxuT2theSwgc28gYHJkc19tZXNzYWdlX3B1dGAgaXMgYSBoZWF2aWx5IHV0aWxpemVkIGZ1bmN0aW9uIHdpdGhpbiB0aGlzIHN5c3RlbSDigJMgdGhhdCdzIHRoZSBmaXJzdCB0aGluZyBJIG5vdGljZS4gVGhpcyBwYXRjaCwgc3BlY2lmaWNhbGx5LCBpbnRyb2R1Y2VzIGEgbmV3IHdvcmtxdWV1ZSBmdW5jdGlvbiwgYHJkc19tZXNzYWdlX3VucGluX3dvcmtlcmAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoeSB0aGUgd29ya3F1ZXVlP1wiIEl0IGltcGxpZXMgc29tZSBraW5kIG9mIGRlZmVycmVkIG9wZXJhdGlvbiwgbGlrZWx5IHJlbGF0ZWQgdG8gcmVzb3VyY2UgbWFuYWdlbWVudCBvciBzeW5jaHJvbml6YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB1bnBpbm5pbmcgYW5kIHRoZSBtZXNzYWdlIGxpZmVjeWNsZS5cblxuVGhlIHBhdGNoIGFsc28gdG91Y2hlcyBgcmRzX3JkbWFfZnJlZV9vcGAgYW5kIGByZHNfYXRvbWljX2ZyZWVfb3BgLiBXaGVuZXZlciBJIHNlZSBjaGFuZ2VzIHRoYXQgaW1wYWN0IGZ1bmN0aW9ucyBkZWFsaW5nIHdpdGggUkRNQSBhbmQgYXRvbWljcywgbXkgYW50ZW5uYSBnbyB1cC4gVGhvc2UgYXJlIHBvdGVudGlhbCBhcmVhcyBmb3Igc3VidGxlIGJ1Z3Mgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuIEdpdmVuIHRoYXQgYHJkc19tZXNzYWdlX3B1dGAgaXMgc28gY2VudHJhbCwgSSdsbCBzdGFydCBieSBmb2N1c2luZyBvbiBgcmRzX3JkbWFfZnJlZV9vcGAuIEkgd2FudCB0byBzZWUgaG93IHRoZSBSRE1BIHJlc291cmNlcyBhcmUgYmVpbmcgaGFuZGxlZCBpbiByZWxhdGlvbiB0byB0aGlzIHVucGlubmluZyBwcm9jZXNzLiBJcyB0aGlzIGNoYW5nZSByZWxhdGVkIHRvIGJ1ZmZlciByZS11c2UsIFJETUEgY29tcGxldGlvbiBoYW5kbGluZywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEEgcXVpY2sgY2hlY2sgc2hvdWxkIGdpdmUgbWUgYW4gaWRlYSBhYm91dCBob3cgdGhpcyBhbGwgZml0cyB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxMzMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzowMzozMC44MDY1Mzc1MTdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxOTI5ODk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJkc19yZG1hX2ZyZWVfb3BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Jkcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Jkcy9tZXNzYWdlLmM9MTMyPXN0YXRpYyB2b2lkIHJkc19tZXNzYWdlX3B1cmdlKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pXFxuLS1cXG5uZXQvcmRzL21lc3NhZ2UuYy0xNzQtXFx0aWYgKHJtLVxcdTAwM2VyZG1hLm9wX2FjdGl2ZSlcXG5uZXQvcmRzL21lc3NhZ2UuYzoxNzU6XFx0XFx0cmRzX3JkbWFfZnJlZV9vcChcXHUwMDI2cm0tXFx1MDAzZXJkbWEpO1xcbm5ldC9yZHMvbWVzc2FnZS5jLTE3Ni1cXHRpZiAocm0tXFx1MDAzZXJkbWEub3BfcmRtYV9tcilcXG4tLVxcbm5ldC9yZHMvbWVzc2FnZS5jPTE5OD12b2lkIHJkc19tZXNzYWdlX3B1dChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKVxcbi0tXFxubmV0L3Jkcy9tZXNzYWdlLmMtMjA4LVxcdFxcdC8qIEEgZmluYWwgcHV0IGluIGF0b21pYyBjb250ZXh0IGNhbm5vdCBkaXJ0eSB0aGUgb3BzJ1xcbm5ldC9yZHMvbWVzc2FnZS5jOjIwOTpcXHRcXHQgKiB1c2VyIHBhZ2VzIG9uIHVucGluLCBzbyByZHNfcmRtYV9mcmVlX29wKCkgYW5kXFxubmV0L3Jkcy9tZXNzYWdlLmMtMjEwLVxcdFxcdCAqIHJkc19hdG9taWNfZnJlZV9vcCgpIGRlZmVycmVkIGl0LiAgRmluaXNoIHRoZSB1bnBpbixcXG4tLVxcbm5ldC9yZHMvcmRtYS5jPTQ5MT12b2lkIHJkc19yZG1hX29wX3VucGluX3BhZ2VzKHN0cnVjdCBybV9yZG1hX29wICpybylcXG4tLVxcbm5ldC9yZHMvcmRtYS5jLTUwNS1cXG5uZXQvcmRzL3JkbWEuYzo1MDY6dm9pZCByZHNfcmRtYV9mcmVlX29wKHN0cnVjdCBybV9yZG1hX29wICpybylcXG5uZXQvcmRzL3JkbWEuYy01MDcte1xcbi0tXFxubmV0L3Jkcy9yZG1hLmM9NjM3PWludCByZHNfY21zZ19yZG1hX2FyZ3Moc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcXG4tLVxcbm5ldC9yZHMvcmRtYS5jLTgzMS1cXHRpZiAocmV0KVxcbm5ldC9yZHMvcmRtYS5jOjgzMjpcXHRcXHRyZHNfcmRtYV9mcmVlX29wKG9wKTtcXG5uZXQvcmRzL3JkbWEuYy04MzMtXFx0ZWxzZVxcbi0tXFxubmV0L3Jkcy9yZHMuaD05ODI9aW50IHJkc19jbXNnX3JkbWFfbWFwKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sXFxubmV0L3Jkcy9yZHMuaC05ODMtXFx0XFx0XFx0ICBzdHJ1Y3QgY21zZ2hkciAqY21zZyk7XFxubmV0L3Jkcy9yZHMuaDo5ODQ6dm9pZCByZHNfcmRtYV9mcmVlX29wKHN0cnVjdCBybV9yZG1hX29wICpybyk7XFxubmV0L3Jkcy9yZHMuaC05ODUtdm9pZCByZHNfYXRvbWljX2ZyZWVfb3Aoc3RydWN0IHJtX2F0b21pY19vcCAqYW8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzowMzozMC44ODg0NzI3MzZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA4NDcyNDU5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIEkgdW5kZXJzdGFuZCB0aGUgc2l0dWF0aW9uOlxuXG4qKlJEUyBSRE1BIE1lbW9yeSBNYW5hZ2VtZW50IENvbnRleHR1YWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IFJETUEgbWVtb3J5IGlzIG1hbmFnZWQgd2l0aGluIHRoZSBSRFMgcHJvdG9jb2wgc3RhY2ssIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgcmRzX3JkbWFfZnJlZV9vcGAuIEkgc2VlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFzIHBhcnQgb2YgYSBjaGFpbjogZnJvbSBgcmRzX21lc3NhZ2VfcHVyZ2VgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBmcm9tIGByZHNfbWVzc2FnZV9wdXRgLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgbGlmZWN5Y2xlIG9mIG1lc3NhZ2VzIGFuZCBob3cgdGhlaXIgYXNzb2NpYXRlZCBSRE1BIHJlc291cmNlcyBhcmUgcmVsZWFzZWQuIFRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYSBzdWJ0bGUgY2hhbmdlLCBlZmZlY3RpdmVseSBkZWZlcnJpbmcgdGhlIHVucGlubmluZyBvZiBtZW1vcnkgdG8gYSB3b3JrcXVldWUsIGJ1dCAqb25seSogaWYgdGhlIGNhbGwgdG8gYHJkc19yZG1hX2ZyZWVfb3BgIGhhcHBlbnMgZnJvbSBhbiBhdG9taWMgY29udGV4dC4gVGhpcyBpcyBhIGNydWNpYWwgZnVuY3Rpb25hbCBzaGlmdCBpbiBob3cgbWVtb3J5IGlzIGhhbmRsZWQgd2l0aGluIFJEUy4gSXQgbWVhbnMgd2UncmUgdHJ5aW5nIHRvIHByZXZlbnQgYmxvY2tpbmcgaW4gY3JpdGljYWwgc2VjdGlvbnMuIE5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBkZWZlcnJhbC4gTGV0IG1lIHN0YXJ0IGJ5IGxvb2tpbmcgaW50byBgX19yZHNfcHV0X21yX2ZpbmFsYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcwODIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzowMzozNC45NzMxOTk4NVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUxMTE4NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19yZHNfcHV0X21yX2ZpbmFsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yZHMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yZHMvbWVzc2FnZS5jPTEzMj1zdGF0aWMgdm9pZCByZHNfbWVzc2FnZV9wdXJnZShzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKVxcbi0tXFxubmV0L3Jkcy9tZXNzYWdlLmMtMTc2LVxcdGlmIChybS1cXHUwMDNlcmRtYS5vcF9yZG1hX21yKVxcbm5ldC9yZHMvbWVzc2FnZS5jOjE3NzpcXHRcXHRrcmVmX3B1dChcXHUwMDI2cm0tXFx1MDAzZXJkbWEub3BfcmRtYV9tci1cXHUwMDNlcl9rcmVmLCBfX3Jkc19wdXRfbXJfZmluYWwpO1xcbm5ldC9yZHMvbWVzc2FnZS5jLTE3OC1cXG4tLVxcbm5ldC9yZHMvbWVzc2FnZS5jLTE4MS1cXHRpZiAocm0tXFx1MDAzZWF0b21pYy5vcF9yZG1hX21yKVxcbm5ldC9yZHMvbWVzc2FnZS5jOjE4MjpcXHRcXHRrcmVmX3B1dChcXHUwMDI2cm0tXFx1MDAzZWF0b21pYy5vcF9yZG1hX21yLVxcdTAwM2VyX2tyZWYsIF9fcmRzX3B1dF9tcl9maW5hbCk7XFxubmV0L3Jkcy9tZXNzYWdlLmMtMTgzLX1cXG4tLVxcbm5ldC9yZHMvcmRtYS5jPTk1PXN0YXRpYyB2b2lkIHJkc19kZXN0cm95X21yKHN0cnVjdCByZHNfbXIgKm1yKVxcbi0tXFxubmV0L3Jkcy9yZG1hLmMtMTE0LVxcbm5ldC9yZHMvcmRtYS5jOjExNTp2b2lkIF9fcmRzX3B1dF9tcl9maW5hbChzdHJ1Y3Qga3JlZiAqa3JlZilcXG5uZXQvcmRzL3JkbWEuYy0xMTYte1xcbi0tXFxubmV0L3Jkcy9yZG1hLmM9MTI4PXZvaWQgcmRzX3JkbWFfZHJvcF9rZXlzKHN0cnVjdCByZHNfc29jayAqcnMpXFxuLS1cXG5uZXQvcmRzL3JkbWEuYy0xNDItXFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cnMtXFx1MDAzZXJzX3JkbWFfbG9jaywgZmxhZ3MpO1xcbm5ldC9yZHMvcmRtYS5jOjE0MzpcXHRcXHRrcmVmX3B1dChcXHUwMDI2bXItXFx1MDAzZXJfa3JlZiwgX19yZHNfcHV0X21yX2ZpbmFsKTtcXG5uZXQvcmRzL3JkbWEuYy0xNDQtXFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnJzLVxcdTAwM2Vyc19yZG1hX2xvY2ssIGZsYWdzKTtcXG4tLVxcbm5ldC9yZHMvcmRtYS5jPTE3Mz1zdGF0aWMgaW50IF9fcmRzX3JkbWFfbWFwKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfZ2V0X21yX2FyZ3MgKmFyZ3MsXFxuLS1cXG5uZXQvcmRzL3JkbWEuYy0yNDctXFx0LyogVGhlIE1SIGNhbiBvdXRsaXZlIGl0cyBzb2NrZXQ6IGEgc29ja2V0IHJlZmVyZW5jZSBpcyBoZWxkXFxubmV0L3Jkcy9yZG1hLmM6MjQ4OlxcdCAqIHVudGlsIHRoZSBmaW5hbCBrcmVmIGlzIGRyb3BwZWQgaW4gX19yZHNfcHV0X21yX2ZpbmFsKCkuXFxubmV0L3Jkcy9yZG1hLmMtMjQ5LVxcdCAqL1xcbi0tXFxubmV0L3Jkcy9yZG1hLmMtMzU1LVxcdGlmIChtcilcXG5uZXQvcmRzL3JkbWEuYzozNTY6XFx0XFx0a3JlZl9wdXQoXFx1MDAyNm1yLVxcdTAwM2VyX2tyZWYsIF9fcmRzX3B1dF9tcl9maW5hbCk7XFxubmV0L3Jkcy9yZG1hLmMtMzU3LVxcdHJldHVybiByZXQ7XFxuLS1cXG5uZXQvcmRzL3JkbWEuYz00MDA9aW50IHJkc19mcmVlX21yKHN0cnVjdCByZHNfc29jayAqcnMsIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXFxuLS1cXG5uZXQvcmRzL3JkbWEuYy00MzYtXFxubmV0L3Jkcy9yZG1hLmM6NDM3OlxcdGtyZWZfcHV0KFxcdTAwMjZtci1cXHUwMDNlcl9rcmVmLCBfX3Jkc19wdXRfbXJfZmluYWwpO1xcbm5ldC9yZHMvcmRtYS5jLTQzOC1cXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9yZHMvcmRtYS5jPTQ0Nj12b2lkIHJkc19yZG1hX3VudXNlKHN0cnVjdCByZHNfc29jayAqcnMsIHUzMiByX2tleSwgaW50IGZvcmNlKVxcbi0tXFxubmV0L3Jkcy9yZG1hLmMtNDgyLVxcdC8qIFJlbGVhc2UgdGhlIHJlZmVyZW5jZSBoZWxkIGFib3ZlLiAqL1xcbm5ldC9yZHMvcmRtYS5jOjQ4MzpcXHRrcmVmX3B1dChcXHUwMDI2bXItXFx1MDAzZXJfa3JlZiwgX19yZHNfcHV0X21yX2ZpbmFsKTtcXG5uZXQvcmRzL3JkbWEuYy00ODQtXFxuLS1cXG5uZXQvcmRzL3JkbWEuYy00ODctXFx0aWYgKHpvdF9tZSlcXG5uZXQvcmRzL3JkbWEuYzo0ODg6XFx0XFx0a3JlZl9wdXQoXFx1MDAyNm1yLVxcdTAwM2VyX2tyZWYsIF9fcmRzX3B1dF9tcl9maW5hbCk7XFxubmV0L3Jkcy9yZG1hLmMtNDg5LX1cXG4tLVxcbm5ldC9yZHMvcmRtYS5jPTUwNj12b2lkIHJkc19yZG1hX2ZyZWVfb3Aoc3RydWN0IHJtX3JkbWFfb3AgKnJvKVxcbi0tXFxubmV0L3Jkcy9yZG1hLmMtNTA4LVxcdGlmIChyby1cXHUwMDNlb3Bfb2RwX21yKSB7XFxubmV0L3Jkcy9yZG1hLmM6NTA5OlxcdFxcdGtyZWZfcHV0KFxcdTAwMjZyby1cXHUwMDNlb3Bfb2RwX21yLVxcdTAwM2VyX2tyZWYsIF9fcmRzX3B1dF9tcl9maW5hbCk7XFxubmV0L3Jkcy9yZG1hLmMtNTEwLVxcdH0gZWxzZSBpZiAoaW5fdGFzaygpIHx8IHJvLVxcdTAwM2VvcF93cml0ZSkge1xcbi0tXFxubmV0L3Jkcy9yZG1hLmM9NjM3PWludCByZHNfY21zZ19yZG1hX2FyZ3Moc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcXG4tLVxcbm5ldC9yZHMvcmRtYS5jLTc2OC1cXHRcXHRcXHQgKiByZWZlcmVuY2UgaXMgaGVsZCB1bnRpbCB0aGUgZmluYWwga3JlZiBpc1xcbm5ldC9yZHMvcmRtYS5jOjc2OTpcXHRcXHRcXHQgKiBkcm9wcGVkIGluIF9fcmRzX3B1dF9tcl9maW5hbCgpLlxcbm5ldC9yZHMvcmRtYS5jLTc3MC1cXHRcXHRcXHQgKi9cXG4tLVxcbm5ldC9yZHMvcmRtYS5jLTc4Mi1cXHRcXHRcXHRcXHRrcmVmX3B1dChcXHUwMDI2bG9jYWxfb2RwX21yLVxcdTAwM2VyX2tyZWYsXFxubmV0L3Jkcy9yZG1hLmM6NzgzOlxcdFxcdFxcdFxcdFxcdCBfX3Jkc19wdXRfbXJfZmluYWwpO1xcbm5ldC9yZHMvcmRtYS5jLTc4NC1cXHRcXHRcXHRcXHRyZXQgPSAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9yZHMvcmRzLmg9MzEzPXN0cnVjdCByZHNfbXIge1xcbi0tXFxubmV0L3Jkcy9yZHMuaC0zMjQtXFx0XFx0XFx0XFx0XFx0ICAqIHJlZmVyZW5jZSwgZHJvcHBlZCBieVxcbm5ldC9yZHMvcmRzLmg6MzI1OlxcdFxcdFxcdFxcdFxcdCAgKiBfX3Jkc19wdXRfbXJfZmluYWwoKVxcbm5ldC9yZHMvcmRzLmgtMzI2LVxcdFxcdFxcdFxcdFxcdCAgKi9cXG4tLVxcbm5ldC9yZHMvcmRzLmg9OTkwPWludCByZHNfY21zZ19hdG9taWMoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcXG4tLVxcbm5ldC9yZHMvcmRzLmgtOTkyLVxcbm5ldC9yZHMvcmRzLmg6OTkzOnZvaWQgX19yZHNfcHV0X21yX2ZpbmFsKHN0cnVjdCBrcmVmICprcmVmKTtcXG5uZXQvcmRzL3Jkcy5oLTk5NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTM6MDM6MzUuMDI4MzE3NTQ5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3NjczMDUzNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSRFMgTWVtb3J5IFJlZ2lvbiBMaWZlY3ljbGUqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBuYXN0eSB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5LCBzcGVjaWZpY2FsbHkgd2hlcmUgYSBNZW1vcnkgUmVnaW9uIChNUikgaW4gdGhlIFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgKFJEUykgcHJvdG9jb2wgc3Vydml2ZXMgdGhlIHNvY2tldCBpdCdzIGFzc29jaWF0ZWQgd2l0aC4gVGhlIGZpeCBpdHNlbGYgc2VlbXMgc3RyYWlnaHRmb3J3YXJkOiBgc29ja19wdXRgIGlzIGJlaW5nIGFkZGVkIHRvIGBfX3Jkc19wdXRfbXJfZmluYWxgIGFuZCBgc29ja19ob2xkYCB0byBgX19yZHNfcmRtYV9tYXBgIGFuZCBgcmRzX2Ntc2dfcmRtYV9hcmdzYC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGNyaXRpY2FsLCBpbiBmYWN0LlxuXG5Ob3csIGxldCBtZSBtZW50YWxseSBydW4gdGhyb3VnaCB0aGUgY29yZSBjb21wb25lbnRzIGludm9sdmVkLiBXZSdyZSB0YWxraW5nIGFib3V0IHRoZSBsaWZlY3ljbGUgbWFuYWdlbWVudCBvZiBNUnMsIHNvIEkgbmVlZCB0byBrZWVwIHRoZSBtYWpvciBwbGF5ZXJzIHRvcC1vZi1taW5kOiBgcmRzX3NlbmRtc2dgLCBgcmRzX3JlY3Ztc2dgLCBgcmRzX2dldF9tcmAsIGByZHNfZ2V0X21yX2Zvcl9kZXN0YCwgYHJkc19mcmVlX21yYCwgYW5kIGByZHNfc2VuZF94bWl0YC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjZW50cmFsIHRvIGhvdyBSRFMgaW50ZXJhY3RzIHdpdGggUkRNQSBhbmQgbWFuYWdlcyBpdHMgbWVtb3J5LlxuXG5JJ20gZ2V0dGluZyBhIGxpdHRsZSBjdXJpb3VzIGFzIHRvIHdoZXRoZXIgb3Igbm90IGByZHNfZ2V0X21yYCBhbmQgYHJkc19mcmVlX21yYCBhcmUgc3RhdGljLCBnaXZlbiB0aGVpciBsb3ctbGV2ZWwgbmF0dXJlLiBJ4oCZbGwgbWFrZSBzdXJlIHRvIGRvdWJsZS1jaGVjayB0aGVpciBzY29wZSB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlaXIgaW50ZW5kZWQgdXNhZ2UuIFRoaXMgZGV0YWlsIGNvdWxkIHByb3ZpZGUgaW5zaWdodCBpbnRvIHBvdGVudGlhbCBmdXR1cmUgbWFpbnRlbmFuY2UgY29uc2lkZXJhdGlvbnMsIHNvIEknbGwgcHV0IGEgcGluIGluIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4ODgyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEzOjAzOjQwLjc5NTYyNTg0N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY4NTAxMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmRzX2dldF9tclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcmRzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcmRzL2FmX3Jkcy5jPTQzNj1zdGF0aWMgaW50IHJkc19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvcmRzL2FmX3Jkcy5jLTQ1Mi1cXHRjYXNlIFJEU19HRVRfTVI6XFxubmV0L3Jkcy9hZl9yZHMuYzo0NTM6XFx0XFx0cmV0ID0gcmRzX2dldF9tcihycywgb3B0dmFsLCBvcHRsZW4pO1xcbm5ldC9yZHMvYWZfcmRzLmMtNDU0LVxcdFxcdGJyZWFrO1xcbm5ldC9yZHMvYWZfcmRzLmMtNDU1LVxcdGNhc2UgUkRTX0dFVF9NUl9GT1JfREVTVDpcXG5uZXQvcmRzL2FmX3Jkcy5jOjQ1NjpcXHRcXHRyZXQgPSByZHNfZ2V0X21yX2Zvcl9kZXN0KHJzLCBvcHR2YWwsIG9wdGxlbik7XFxubmV0L3Jkcy9hZl9yZHMuYy00NTctXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvcmRzL3JkbWEuYz0xNTU9c3RhdGljIGludCByZHNfcGluX3BhZ2VzKHVuc2lnbmVkIGxvbmcgdXNlcl9hZGRyLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXFxuLS1cXG5uZXQvcmRzL3JkbWEuYy0xNzItXFxubmV0L3Jkcy9yZG1hLmM6MTczOnN0YXRpYyBpbnQgX19yZHNfcmRtYV9tYXAoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19nZXRfbXJfYXJncyAqYXJncyxcXG5uZXQvcmRzL3JkbWEuYy0xNzQtXFx0XFx0XFx0ICB1NjQgKmNvb2tpZV9yZXQsIHN0cnVjdCByZHNfbXIgKiptcl9yZXQsXFxuLS1cXG5uZXQvcmRzL3JkbWEuYy0zNTktXFxubmV0L3Jkcy9yZG1hLmM6MzYwOmludCByZHNfZ2V0X21yKHN0cnVjdCByZHNfc29jayAqcnMsIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXFxubmV0L3Jkcy9yZG1hLmMtMzYxLXtcXG5uZXQvcmRzL3JkbWEuYzozNjI6XFx0c3RydWN0IHJkc19nZXRfbXJfYXJncyBhcmdzO1xcbm5ldC9yZHMvcmRtYS5jLTM2My1cXG5uZXQvcmRzL3JkbWEuYzozNjQ6XFx0aWYgKG9wdGxlbiAhPSBzaXplb2Yoc3RydWN0IHJkc19nZXRfbXJfYXJncykpXFxubmV0L3Jkcy9yZG1hLmMtMzY1LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbm5ldC9yZHMvcmRtYS5jLTM2Ni1cXG5uZXQvcmRzL3JkbWEuYzozNjc6XFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFxcdTAwMjZhcmdzLCBvcHR2YWwsIHNpemVvZihzdHJ1Y3QgcmRzX2dldF9tcl9hcmdzKSkpXFxubmV0L3Jkcy9yZG1hLmMtMzY4LVxcdFxcdHJldHVybiAtRUZBVUxUO1xcbi0tXFxubmV0L3Jkcy9yZG1hLmMtMzcyLVxcbm5ldC9yZHMvcmRtYS5jOjM3MzppbnQgcmRzX2dldF9tcl9mb3JfZGVzdChzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxcbm5ldC9yZHMvcmRtYS5jLTM3NC17XFxubmV0L3Jkcy9yZG1hLmM6Mzc1OlxcdHN0cnVjdCByZHNfZ2V0X21yX2Zvcl9kZXN0X2FyZ3MgYXJncztcXG5uZXQvcmRzL3JkbWEuYzozNzY6XFx0c3RydWN0IHJkc19nZXRfbXJfYXJncyBuZXdfYXJncztcXG5uZXQvcmRzL3JkbWEuYy0zNzctXFxubmV0L3Jkcy9yZG1hLmM6Mzc4OlxcdGlmIChvcHRsZW4gIT0gc2l6ZW9mKHN0cnVjdCByZHNfZ2V0X21yX2Zvcl9kZXN0X2FyZ3MpKVxcbm5ldC9yZHMvcmRtYS5jLTM3OS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm5ldC9yZHMvcmRtYS5jLTM4MS1cXHRpZiAoY29weV9mcm9tX3NvY2twdHIoXFx1MDAyNmFyZ3MsIG9wdHZhbCxcXG5uZXQvcmRzL3JkbWEuYzozODI6XFx0XFx0XFx0ICAgc2l6ZW9mKHN0cnVjdCByZHNfZ2V0X21yX2Zvcl9kZXN0X2FyZ3MpKSlcXG5uZXQvcmRzL3JkbWEuYy0zODMtXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuLS1cXG5uZXQvcmRzL3JkbWEuYz04ODY9aW50IHJkc19jbXNnX3JkbWFfbWFwKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sXFxuLS1cXG5uZXQvcmRzL3JkbWEuYy04ODgte1xcbm5ldC9yZHMvcmRtYS5jOjg4OTpcXHRpZiAoY21zZy1cXHUwMDNlY21zZ19sZW4gXFx1MDAzYyBDTVNHX0xFTihzaXplb2Yoc3RydWN0IHJkc19nZXRfbXJfYXJncykpIHx8XFxubmV0L3Jkcy9yZG1hLmMtODkwLVxcdCAgICBybS1cXHUwMDNlbV9yZG1hX2Nvb2tpZSAhPSAwKVxcbi0tXFxubmV0L3Jkcy9yZHMuaD05NzA9dm9pZCByZHNfcmRtYV91bnVzZShzdHJ1Y3QgcmRzX3NvY2sgKnJzLCB1MzIgcl9rZXksIGludCBmb3JjZSk7XFxubmV0L3Jkcy9yZHMuaDo5NzE6aW50IHJkc19nZXRfbXIoc3RydWN0IHJkc19zb2NrICpycywgc29ja3B0cl90IG9wdHZhbCwgaW50IG9wdGxlbik7XFxubmV0L3Jkcy9yZHMuaDo5NzI6aW50IHJkc19nZXRfbXJfZm9yX2Rlc3Qoc3RydWN0IHJkc19zb2NrICpycywgc29ja3B0cl90IG9wdHZhbCwgaW50IG9wdGxlbik7XFxubmV0L3Jkcy9yZHMuaC05NzMtaW50IHJkc19mcmVlX21yKHN0cnVjdCByZHNfc29jayAqcnMsIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzowMzo0MC44NzI0ODExOTZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njc5ODE0ODcwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBQb3RlbnRpYWwgRm9jdXMgU3ltYm9scyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhlc2UgUkRTIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IHdpdGggYW4gZXllIHRvd2FyZHMgd2hlcmUgUkRNQSBvcGVyYXRpb25zIGFyZSBoYW5kbGVkIGFuZCBwb3RlbnRpYWxseSBvcHRpbWl6ZWQuIEkndmUgYWxyZWFkeSBjb25maXJtZWQgdGhhdCBgcmRzX2dldF9tcmAsIGByZHNfZ2V0X21yX2Zvcl9kZXN0YCwgYW5kIGByZHNfZnJlZV9tcmAgYXJlIG5vbi1zdGF0aWMg4oCTIHRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgbGV0J3Mgc2VlLi4uIEknbSBhbHNvIHNlZWluZyB0aGF0IGByZHNfbWVzc2FnZV9wdXRgIGlzIGV4cG9ydGVkLiBUaGF0IGdldHMgbXkgYXR0ZW50aW9uIGJlY2F1c2UgaXQncyBzbyBmdW5kYW1lbnRhbCB0byBtZXNzYWdlIGxpZmVjeWNsZSBtYW5hZ2VtZW50LlxuXG5Jbml0aWFsbHksIEkgaGF2ZSBzb21lIGRvdWJ0cywgYHJkc19tZXNzYWdlX3B1dGAgaXMgZXhlY3V0ZWQgZXZlcnkgdGltZSBhIG1lc3NhZ2UgaXMgZnJlZWQsIHNvIGNvdWxkIGJlIHRvbyBob3Qgb2YgYSBzeW1ib2wgdG8gYmUgdGhhdCBpbXBvcnRhbnQuIEhvd2V2ZXIsIHRoZSBwYXRjaCBpbiBxdWVzdGlvbiBpcyBtb2RpZnlpbmcgdGhpcyBmdW5jdGlvbiAqc3BlY2lmaWNhbGx5KiB3aGVuIGBybS1cdTAwM2VyZG1hLm9wX3VucGluX2RlZmVycmVkYCBvciBgcm0tXHUwMDNlYXRvbWljLm9wX3VucGluX2RlZmVycmVkYCBhcmUgc2V0LiBUaGF0IG1ha2VzIGByZHNfbWVzc2FnZV9wdXRgIGEgdmVyeSByZWxldmFudCBjYW5kaWRhdGUuIFRoZSBiZWhhdmlvciBvZiB0aGlzIHN5bWJvbCBzZWVtcyBsaWtlIGl0IHdvdWxkIGJlIG9mIGludGVyZXN0IHRvIG1lLlxuXG5OZXh0LCBJIG5lZWQgdG8gY2hlY2sgc29tZSBvdGhlciBzeW1ib2xzLCBzdWNoIGFzIGByZHNfcmRtYV9mcmVlX29wYCwgYHJkc19hdG9taWNfZnJlZV9vcGAsIGByZHNfcmRtYV9vcF91bnBpbl9wYWdlc2AsIGFuZCBgcmRzX2F0b21pY19vcF91bnBpbl9wYWdlYCwgYXMgdGhleSBhcmUgYWxzbyBub24tc3RhdGljLCBzbyBjb3VsZCBiZSBhIGNhbmRpZGF0ZS5cblxuTm93LCBsZXQncyB6b29tIG91dCBhIGJpdC4gYHJkc19zZW5kbXNnYCBoYXMgdG8gYmUgYSBjcml0aWNhbCBlbnRyeSBwb2ludC4gSXQncyB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGFjdHVhbGx5IHNlbmRpbmcgdGhlIG1lc3NhZ2VzLCB3aGljaCBtZWFucyBpdCdzIHdoZXJlIFJETUEgb3BlcmF0aW9ucyBhcmUgKmNyZWF0ZWQqIGFuZCBhdHRhY2hlZCB0byBtZXNzYWdlcy4gVGhpcyBtYWtlcyBpdCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgaW52ZXN0aWdhdGlvbi5cblxuRmluYWxseSwgSSdsbCBxdWlja2x5IGNoZWNrIGByZHNfY21zZ19yZG1hX2FyZ3NgLiBJdCdzIGNhbGxlZCBmcm9tIGByZHNfc2VuZG1zZ2AgdG8gcGFyc2UgUkRNQSBjb250cm9sIG1lc3NhZ2VzLiBJdCdzIG5vbi1zdGF0aWMsIHNvIHRoYXQgaW5kaWNhdGVzIGl0J3MgYWNjZXNzaWJsZSBhbmQgaW1wb3J0YW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDU1NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzowMzo0Ny42NzA2MzMzNDdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NTY4NjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJkc19jbXNnX3JkbWFfYXJnc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcmRzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcmRzL3JkbWEuYz01ODU9aW50IHJkc19yZG1hX2V4dHJhX3NpemUoc3RydWN0IHJkc19yZG1hX2FyZ3MgKmFyZ3MsXFxuLS1cXG5uZXQvcmRzL3JkbWEuYy02MzYtICovXFxubmV0L3Jkcy9yZG1hLmM6NjM3OmludCByZHNfY21zZ19yZG1hX2FyZ3Moc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcXG5uZXQvcmRzL3JkbWEuYy02MzgtXFx0XFx0ICAgICAgIHN0cnVjdCBjbXNnaGRyICpjbXNnLFxcbi0tXFxubmV0L3Jkcy9yZHMuaD05Nzc9aW50IHJkc19jbXNnX3JkbWFfZGVzdChzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLFxcbm5ldC9yZHMvcmRzLmgtOTc4LVxcdFxcdFxcdCAgc3RydWN0IGNtc2doZHIgKmNtc2cpO1xcbm5ldC9yZHMvcmRzLmg6OTc5OmludCByZHNfY21zZ19yZG1hX2FyZ3Moc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcXG5uZXQvcmRzL3Jkcy5oLTk4MC1cXHRcXHRcXHQgIHN0cnVjdCBjbXNnaGRyICpjbXNnLFxcbi0tXFxubmV0L3Jkcy9zZW5kLmM9MTA1Nz1zdGF0aWMgaW50IHJkc19jbXNnX3NlbmQoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcXG4tLVxcbm5ldC9yZHMvc2VuZC5jLTEwNzctXFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxubmV0L3Jkcy9zZW5kLmM6MTA3ODpcXHRcXHRcXHRyZXQgPSByZHNfY21zZ19yZG1hX2FyZ3MocnMsIHJtLCBjbXNnLCBcXHUwMDI2dmN0LVxcdTAwM2V2ZWNbaW5kXSk7XFxubmV0L3Jkcy9zZW5kLmMtMTA3OS1cXHRcXHRcXHRpbmQrKztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTM6MDM6NDcuNzI1MjExODY2WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0OTE0ODU0OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OlxuXG4qKkFuYWx5emluZyBSRE1BIEFyZ3VtZW50IFNjb3BlKipcblxuQWxyaWdodCwgc28gdGhlIGNvcmUgcXVlc3Rpb24gaGVyZSByZXZvbHZlcyBhcm91bmQgdGhlIHNjb3BlIG9mIGByZHNfY21zZ19yZG1hX2FyZ3NgLiBJIHF1aWNrbHkgdmVyaWZpZWQgdGhhdCwgeWVzLCBpdCdzIGRlZmluaXRpdmVseSAqbm9uLXN0YXRpYyouIFRoaXMgbWVhbnMgaXQncyBhY2Nlc3NpYmxlIG91dHNpZGUgdGhlIGltbWVkaWF0ZSBzY29wZSB3aGVyZSBpdCdzIGRlZmluZWQg4oCTIG5vIHN1cnByaXNlcyB0aGVyZSwgZ2l2ZW4gaXRzIHJvbGUuXG5cbk5vdywgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIGByZHNfY21zZ19hdG9taWNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIFJETUEgYXJndW1lbnRzLCBhbmQgdGhlaXIgYWNjZXNzaWJpbGl0eSwgaW50ZXJwbGF5IHdpdGggdGhlIGF0b21pYyBvcGVyYXRpb25zIGNvbnRleHQuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIG9mIHRoZXNlIGZ1bmN0aW9ucywgYW5kIGhvdyB0aGUgZGF0YSBmbG93cyBiZXR3ZWVuIHRoZW0uIEknbSB0aGlua2luZyBJJ2xsIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhvc2UgdHdvIGRlZmluaXRpb25zIGRpcmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTcwMywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEzOjAzOjUzLjIxNjY5OTgyOFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTUzNzI4NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmRzX2Ntc2dfYXRvbWljXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yZHMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yZHMvcmRtYS5jPTg4Nj1pbnQgcmRzX2Ntc2dfcmRtYV9tYXAoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcXG4tLVxcbm5ldC9yZHMvcmRtYS5jLTg5OS0gKi9cXG5uZXQvcmRzL3JkbWEuYzo5MDA6aW50IHJkc19jbXNnX2F0b21pYyhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLFxcbm5ldC9yZHMvcmRtYS5jLTkwMS1cXHRcXHQgICAgc3RydWN0IGNtc2doZHIgKmNtc2cpXFxuLS1cXG5uZXQvcmRzL3Jkcy5oPTk4OT12b2lkIHJkc19hdG9taWNfc2VuZF9jb21wbGV0ZShzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLCBpbnQgd2Nfc3RhdHVzKTtcXG5uZXQvcmRzL3Jkcy5oOjk5MDppbnQgcmRzX2Ntc2dfYXRvbWljKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sXFxubmV0L3Jkcy9yZHMuaC05OTEtXFx0XFx0ICAgIHN0cnVjdCBjbXNnaGRyICpjbXNnKTtcXG4tLVxcbm5ldC9yZHMvc2VuZC5jPTEwNTc9c3RhdGljIGludCByZHNfY21zZ19zZW5kKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sXFxuLS1cXG5uZXQvcmRzL3NlbmQuYy0xMDk5LVxcdFxcdGNhc2UgUkRTX0NNU0dfTUFTS0VEX0FUT01JQ19GQUREOlxcbm5ldC9yZHMvc2VuZC5jOjExMDA6XFx0XFx0XFx0cmV0ID0gcmRzX2Ntc2dfYXRvbWljKHJzLCBybSwgY21zZyk7XFxubmV0L3Jkcy9zZW5kLmMtMTEwMS1cXHRcXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTM6MDM6NTMuMzEyMDc2NzE2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNzY0OTA1MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSWRlbnRpZnlpbmcgS2V5IFN5bWJvbHMgZm9yIFJldmlldyoqXG5cbk9rYXksIHNvIEknbSBnb2luZyB0aHJvdWdoIHRoaXMgY29kZSwgZm9jdXNpbmcgb24gc3ltYm9sIHZpc2liaWxpdHkuIFJpZ2h0LCBgcmRzX2Ntc2dfYXRvbWljYCBpcyBkZWZpbml0aXZlbHkgbm90IHN0YXRpYywgZ29vZC4gTGV0J3MgbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyBvYnZpb3VzIGluIHRoZSByZWxhdGVkIGNvZGUuIFJpZ2h0LCBjaGVja2luZyBgcmRzX3JkbWFfZnJlZV9vcGAgYW5kIGByZHNfYXRvbWljX2ZyZWVfb3BgLi4uIHRob3NlIGFyZW4ndCBzdGF0aWMgZWl0aGVyLiBNb3Zpbmcgb24sIHdoYXQgYWJvdXQgYHJkc19yZG1hX29wX3VucGluX3BhZ2VzYCBhbmQgYHJkc19hdG9taWNfb3BfdW5waW5fcGFnZWA/IE5vcGUsIG5vbi1zdGF0aWMgYXMgd2VsbC4gQW5kLCBkaWdnaW5nIGZ1cnRoZXIsIGBfX3Jkc19wdXRfbXJfZmluYWxgIGlzIGFsc28gbm9uLXN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuXG5cbk5vdywgbGV0IG1lIG1ha2Ugc3VyZSBJJ20gZ2V0dGluZyBldmVyeXRoaW5nLiBPa2F5LCBmaW5hbGx5LCBgcmRzX21lc3NhZ2VfdW5waW5fd29ya2VyYCBpcyBzdGF0aWMuIEFscmlnaHQsIHRoYXQncyB3aGF0IEkgbmVlZGVkIHRvIGNvbmZpcm0uXG5cblNvLCBiYXNlZCBvbiB0aGlzIHF1aWNrIHNjYW4sIHRoZSBjb3JlIHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZTpcblxuKiAgIGByZHNfc2VuZG1zZ2BcbiogICBgcmRzX21lc3NhZ2VfcHV0YFxuKiAgIGByZHNfY21zZ19yZG1hX2FyZ3NgXG4qICAgYHJkc19jbXNnX2F0b21pY2BcbiogICBgcmRzX3JkbWFfZnJlZV9vcGBcbiogICBgcmRzX2F0b21pY19mcmVlX29wYFxuKiAgIGByZHNfcmRtYV9vcF91bnBpbl9wYWdlc2BcbiogICBgcmRzX2F0b21pY19vcF91bnBpbl9wYWdlYFxuKiAgIGBfX3Jkc19wdXRfbXJfZmluYWxgXG4qICAgYHJkc19nZXRfbXJgXG4qICAgYHJkc19mcmVlX21yYFxuXG5PaCwgd2FpdCBhIG1pbnV0ZSwgSSBmb3Jnb3QgYWJvdXQgYHJkc19zZW5kX3htaXRgIGlzIGFsc28gbW9kaWZpZWQuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCB0b28uIEFscmlnaHQsIGxldCdzIGdvIGNoZWNrIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMjk0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEzOjAzOjU5LjY4ODU2OTk3NFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU5OTE2ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmRzX3NlbmRfeG1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcmRzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcmRzL2NvbmcuYz0yMTc9dm9pZCByZHNfY29uZ19xdWV1ZV91cGRhdGVzKHN0cnVjdCByZHNfY29uZ19tYXAgKm1hcClcXG4tLVxcbm5ldC9yZHMvY29uZy5jLTIzMC1cXHRcXHRcXHRyZHNfc3RhdHNfaW5jKHNfY29uZ191cGRhdGVfcXVldWVkKTtcXG5uZXQvcmRzL2NvbmcuYzoyMzE6XFx0XFx0XFx0LyogV2UgY2Fubm90IGlubGluZSB0aGUgY2FsbCB0byByZHNfc2VuZF94bWl0KCkgaGVyZVxcbm5ldC9yZHMvY29uZy5jLTIzMi1cXHRcXHRcXHQgKiBmb3IgdHdvIHJlYXNvbnMgKGJvdGggcGVydGFpbmluZyB0byBhIFRDUCB0cmFuc3BvcnQpOlxcbi0tXFxubmV0L3Jkcy9pYl9jbS5jPTI4Mj1zdGF0aWMgdm9pZCByZHNfaWJfdGFza2xldF9mbl9zZW5kKHVuc2lnbmVkIGxvbmcgZGF0YSlcXG4tLVxcbm5ldC9yZHMvaWJfY20uYy0yOTktXFx0ICAgIHRlc3RfYml0KDAsIFxcdTAwMjZjb25uLVxcdTAwM2VjX21hcF9xdWV1ZWQpKSlcXG5uZXQvcmRzL2liX2NtLmM6MzAwOlxcdFxcdHJkc19zZW5kX3htaXQoXFx1MDAyNmljLVxcdTAwM2Vjb25uLVxcdTAwM2VjX3BhdGhbMF0pO1xcbm5ldC9yZHMvaWJfY20uYy0zMDEtfVxcbi0tXFxubmV0L3Jkcy9pYl9zZW5kLmM9MjQ1PXZvaWQgcmRzX2liX3NlbmRfY3FlX2hhbmRsZXIoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywgc3RydWN0IGliX3djICp3YylcXG4tLVxcbm5ldC9yZHMvaWJfc2VuZC5jLTMzNS0gKlxcbm5ldC9yZHMvaWJfc2VuZC5jOjMzNjogKiBUaGUgUkRTIHNlbmQgY29kZSBpcyBlc3NlbnRpYWxseSBzaW5nbGUtdGhyZWFkZWQ7IHJkc19zZW5kX3htaXRcXG5uZXQvcmRzL2liX3NlbmQuYy0zMzctICogc2V0cyBSRFNfSU5fWE1JVCB0byBlbnN1cmUgZXhjbHVzaXZlIGFjY2VzcyB0byB0aGUgc2VuZCByaW5nLlxcbi0tXFxubmV0L3Jkcy9sb29wLmM9MjMxPXZvaWQgcmRzX2xvb3BfbmV0X2V4aXQodm9pZClcXG4tLVxcbm5ldC9yZHMvbG9vcC5jLTIzNy0gKiBUaGlzIGlzIG1pc3NpbmcgLnhtaXRfKiBiZWNhdXNlIGxvb3AgZG9lc24ndCBnbyB0aHJvdWdoIGdlbmVyaWNcXG5uZXQvcmRzL2xvb3AuYzoyMzg6ICogcmRzX3NlbmRfeG1pdCgpIGFuZCBkb2Vzbid0IGNhbGwgcmRzX3JlY3ZfaW5jb21pbmcoKS4gIC5saXN0ZW5fc3RvcCBhbmRcXG5uZXQvcmRzL2xvb3AuYy0yMzktICogLmxhZGRyX2NoZWNrIGFyZSBtaXNzaW5nIGJlY2F1c2UgdHJhbnNwb3J0LmMgZG9lc24ndCBpdGVyYXRlIG92ZXJcXG4tLVxcbm5ldC9yZHMvcmRzLmg9NTQwPXN0cnVjdCByZHNfdHJhbnNwb3J0IHtcXG4tLVxcbm5ldC9yZHMvcmRzLmgtNTgwLVxcdC8qXFxubmV0L3Jkcy9yZHMuaDo1ODE6XFx0ICogLnhtaXQgaXMgY2FsbGVkIGJ5IHJkc19zZW5kX3htaXQoKSB0byB0ZWxsIHRoZSB0cmFuc3BvcnQgdG8gc2VuZFxcbm5ldC9yZHMvcmRzLmgtNTgyLVxcdCAqIHBhcnQgb2YgYSBtZXNzYWdlLiAgVGhlIGNhbGxlciBzZXJpYWxpemVzIG9uIHRoZSBzZW5kX3NlbSBzbyB0aGlzXFxuLS1cXG5uZXQvcmRzL3Jkcy5oPTk1Nz12b2lkIHJkc19zZW5kX3BhdGhfcmVzZXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNvbm4pO1xcbm5ldC9yZHMvcmRzLmg6OTU4OmludCByZHNfc2VuZF94bWl0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCk7XFxubmV0L3Jkcy9yZHMuaC05NTktc3RydWN0IHNvY2thZGRyX2luO1xcbi0tXFxubmV0L3Jkcy9zZW5kLmMtNDQtXFxubmV0L3Jkcy9zZW5kLmM6NDU6LyogV2hlbiB0cmFuc21pdHRpbmcgbWVzc2FnZXMgaW4gcmRzX3NlbmRfeG1pdCwgd2UgbmVlZCB0byBlbWVyZ2UgZnJvbVxcbm5ldC9yZHMvc2VuZC5jLTQ2LSAqIHRpbWUgdG8gdGltZSBhbmQgYnJpZWZseSByZWxlYXNlIHRoZSBDUFUuIE90aGVyd2lzZSB0aGUgc29mdGxvY2sgd2F0Y2hkb2dcXG4tLVxcbm5ldC9yZHMvc2VuZC5jPTU5PXN0YXRpYyB2b2lkIHJkc19zZW5kX3JlbW92ZV9mcm9tX3NvY2soc3RydWN0IGxpc3RfaGVhZCAqbWVzc2FnZXMsIGludCBzdGF0dXMpO1xcbi0tXFxubmV0L3Jkcy9zZW5kLmMtNjItICogUmVzZXQgdGhlIHNlbmQgc3RhdGUuICBDYWxsZXJzIG11c3QgZW5zdXJlIHRoYXQgdGhpcyBkb2Vzbid0IHJhY2Ugd2l0aFxcbm5ldC9yZHMvc2VuZC5jOjYzOiAqIHJkc19zZW5kX3htaXQoKS5cXG5uZXQvcmRzL3NlbmQuYy02NC0gKi9cXG4tLVxcbm5ldC9yZHMvc2VuZC5jPTEyOD1zdGF0aWMgYm9vbCByZHNfbXByZHNfY3AwX2NhdGNodXAoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKVxcbi0tXFxubmV0L3Jkcy9zZW5kLmMtMTg2LSAqL1xcbm5ldC9yZHMvc2VuZC5jOjE4NzppbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXFxubmV0L3Jkcy9zZW5kLmMtMTg4LXtcXG4tLVxcbm5ldC9yZHMvc2VuZC5jLTU0MS19XFxubmV0L3Jkcy9zZW5kLmM6NTQyOkVYUE9SVF9TWU1CT0xfR1BMKHJkc19zZW5kX3htaXQpO1xcbm5ldC9yZHMvc2VuZC5jLTU0My1cXG4tLVxcbm5ldC9yZHMvc2VuZC5jPTY3Nj1zdGF0aWMgdm9pZCByZHNfc2VuZF9yZW1vdmVfZnJvbV9zb2NrKHN0cnVjdCBsaXN0X2hlYWQgKm1lc3NhZ2VzLCBpbnQgc3RhdHVzKVxcbi0tXFxubmV0L3Jkcy9zZW5kLmMtNzUxLSAqIG1lc3NhZ2VzIHVwIHRvLCBhbmQgaW5jbHVkaW5nLCB0aGUgZ2l2ZW4gc2VxdWVuY2UgbnVtYmVyLiAgTWVzc2FnZXMgYXJlXFxubmV0L3Jkcy9zZW5kLmM6NzUyOiAqIG1vdmVkIHRvIHRoZSByZXRyYW5zIHF1ZXVlIHdoZW4gcmRzX3NlbmRfeG1pdCBwaWNrcyB0aGVtIG9mZiB0aGUgc2VuZFxcbm5ldC9yZHMvc2VuZC5jLTc1My0gKiBxdWV1ZS4gVGhpcyBtZWFucyB0aGF0IGluIHRoZSBUQ1AgY2FzZSwgdGhlIG1lc3NhZ2UgbWF5IG5vdCBoYXZlIGJlZW5cXG4tLVxcbm5ldC9yZHMvc2VuZC5jPTExNDE9aW50IHJkc19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHBheWxvYWRfbGVuKVxcbi0tXFxubmV0L3Jkcy9zZW5kLmMtMTQzOC1cXG5uZXQvcmRzL3NlbmQuYzoxNDM5OlxcdHJldCA9IHJkc19zZW5kX3htaXQoY3BhdGgpO1xcbm5ldC9yZHMvc2VuZC5jLTE0NDAtXFx0aWYgKHJldCA9PSAtRU5PTUVNIHx8IHJldCA9PSAtRUFHQUlOKSB7XFxuLS1cXG5uZXQvcmRzL3RjcC5jPTEyNj12b2lkIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuLS1cXG5uZXQvcmRzL3RjcC5jLTE0MC1cXHQgKiBjcF9zdGF0ZSB0byBzb21ldGhpbmcgb3RoZXIgdGhhbiBSRFNfQ09OTl9VUCwgYW5kIHRoZW5cXG5uZXQvcmRzL3RjcC5jOjE0MTpcXHQgKiB3YWl0aW5nIGZvciBhbnkgZXhpc3RpbmcgdGhyZWFkcyBpbiByZHNfc2VuZF94bWl0IHRvXFxubmV0L3Jkcy90Y3AuYy0xNDItXFx0ICogY29tcGxldGUgcmVsZWFzZV9pbl94bWl0KCkuIChTdWJzZXF1ZW50IHRocmVhZHMgZW50ZXJpbmdcXG5uZXQvcmRzL3RjcC5jOjE0MzpcXHQgKiByZHNfc2VuZF94bWl0KCkgd2lsbCBiYWlsIG9uICFyZHNfY29ubl91cCgpLlxcbm5ldC9yZHMvdGNwLmMtMTQ0LVxcdCAqXFxuLS1cXG5uZXQvcmRzL3RocmVhZHMuYz0xOTE9dm9pZCByZHNfc2VuZF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3Jkcy90aHJlYWRzLmMtMTk5LVxcdFxcdGNsZWFyX2JpdChSRFNfTExfU0VORF9GVUxMLCBcXHUwMDI2Y3AtXFx1MDAzZWNwX2ZsYWdzKTtcXG5uZXQvcmRzL3RocmVhZHMuYzoyMDA6XFx0XFx0cmV0ID0gcmRzX3NlbmRfeG1pdChjcCk7XFxubmV0L3Jkcy90aHJlYWRzLmMtMjAxLVxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzowMzo1OS43NTQ1NjkyNTNaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE0NzU3NjYxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgdGhlIE5vbi1TdGF0aWMgTmF0dXJlIG9mIHJkc1xcX3NlbmRcXF94bWl0IGFuZCBSZXZpZXdpbmcgXFxfXFxfcmRzXFxfaWJcXF90ZWFyZG93blxcX21yKipcblxuUmlnaHQsIGByZHNfc2VuZF94bWl0YCBpcyBjb25maXJtZWQgYXMgbm9uLXN0YXRpYywgd2hpY2ggaXMgd2hhdCBJIHN1c3BlY3RlZC4gTWFrZXMgc2Vuc2UgZ2l2ZW4gaXRzIGxpa2VseSB1c2UgYWNyb3NzIGRpZmZlcmVudCBjb21wb25lbnRzIG9yIG1vZHVsZXMgd2l0aGluIHRoZSBSRFMgZnJhbWV3b3JrLiBOb3csIGxldCdzIGp1c3QgcXVpY2tseSBwaXZvdCBhbmQgcmV2aXNpdCB0aGUgbG9naWMgd2l0aGluIGBfX3Jkc19pYl90ZWFyZG93bl9tcmAuIE5lZWQgdG8gYmUgc3VyZSBvZiBob3cgdGhvc2UgbWVtb3J5IHJlZ2lzdHJhdGlvbnMgYXJlIGJlaW5nIGhhbmRsZWQgZHVyaW5nIHRlYXJkb3duLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIHRoZSBub24tc3RhdGljIG5hdHVyZSBvZiBgcmRzX3NlbmRfeG1pdGAuIFRoZXJlIG1pZ2h0IGJlIGEgc3VidGxlIGludGVyYWN0aW9uIHRoZXJlIHRoYXQgd2FycmFudHMgYSBkb3VibGUtY2hlY2sgdG8gbWFrZSBzdXJlIGFsbCBtZW1vcnkgaXMgYmVpbmcgcmVsZWFzZWQgZ3JhY2VmdWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ1NTIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzowNDowMy45MDIxNDgyNTdaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTc3ODc2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3Jkc19pYl90ZWFyZG93bl9tclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcmRzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcmRzL2liX2ZybXIuYz0zNjE9dm9pZCByZHNfaWJfdW5yZWdfZnJtcihzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCB1bnNpZ25lZCBpbnQgKm5mcmVlZCxcXG4tLVxcbm5ldC9yZHMvaWJfZnJtci5jLTM4NC1cXHRcXHRmcm1yID0gXFx1MDAyNmlibXItXFx1MDAzZXUuZnJtcjtcXG5uZXQvcmRzL2liX2ZybXIuYzozODU6XFx0XFx0X19yZHNfaWJfdGVhcmRvd25fbXIoaWJtcik7XFxubmV0L3Jkcy9pYl9mcm1yLmMtMzg2LVxcdFxcdGlmIChmcmVlZCBcXHUwMDNjIGdvYWwgfHwgZnJtci1cXHUwMDNlZnJfc3RhdGUgPT0gRlJNUl9JU19TVEFMRSkge1xcbi0tXFxubmV0L3Jkcy9pYl9tci5oPTEyOD11MzIgcmRzX2liX2dldF9sa2V5KHZvaWQgKnRyYW5zX3ByaXZhdGUpO1xcbm5ldC9yZHMvaWJfbXIuaC0xMjktXFxubmV0L3Jkcy9pYl9tci5oOjEzMDp2b2lkIF9fcmRzX2liX3RlYXJkb3duX21yKHN0cnVjdCByZHNfaWJfbXIgKik7XFxubmV0L3Jkcy9pYl9tci5oLTEzMS12b2lkIHJkc19pYl90ZWFyZG93bl9tcihzdHJ1Y3QgcmRzX2liX21yICopO1xcbi0tXFxubmV0L3Jkcy9pYl9yZG1hLmM9MjE0PXZvaWQgcmRzX2liX3N5bmNfbXIodm9pZCAqdHJhbnNfcHJpdmF0ZSwgaW50IGRpcmVjdGlvbilcXG4tLVxcbm5ldC9yZHMvaWJfcmRtYS5jLTIzMy1cXG5uZXQvcmRzL2liX3JkbWEuYzoyMzQ6dm9pZCBfX3Jkc19pYl90ZWFyZG93bl9tcihzdHJ1Y3QgcmRzX2liX21yICppYm1yKVxcbm5ldC9yZHMvaWJfcmRtYS5jLTIzNS17XFxuLS1cXG5uZXQvcmRzL2liX3JkbWEuYz0yNjM9dm9pZCByZHNfaWJfdGVhcmRvd25fbXIoc3RydWN0IHJkc19pYl9tciAqaWJtcilcXG4tLVxcbm5ldC9yZHMvaWJfcmRtYS5jLTI2Ni1cXG5uZXQvcmRzL2liX3JkbWEuYzoyNjc6XFx0X19yZHNfaWJfdGVhcmRvd25fbXIoaWJtcik7XFxubmV0L3Jkcy9pYl9yZG1hLmMtMjY4LVxcdGlmIChwaW5uZWQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTM6MDQ6MDQuMDExOTMyNzM1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0MTM0OTkxODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmaW5pbmcgdGhlIFJETUEgU3ltYm9sIEFuYWx5c2lzKipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgX19yZHNfaWJfdGVhcmRvd25fbXJgIGlzIGluZGVlZCBhIG5vbi1zdGF0aWMgc3ltYm9sLiBUaGF0J3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24uIE5vdywgYmFzZWQgb24gdGhpcywgSSdtIGdvaW5nIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aGUgZm9sbG93aW5nIHN5bWJvbHMuIEknbSBhaW1pbmcgZm9yIGEgY29uY2lzZSBsaXN0IHRoYXQgY292ZXJzIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgcmVsYXRlZCB0byBSRE1BIGluIHRoZSBSRFMgcHJvdG9jb2wuIEl0IGxvb2tzIGxpa2UgdGhlIHJlbGV2YW50IHN5bWJvbHMgYXJlOlxuXG4qICAgYHJkc19zZW5kbXNnYFxuKiAgIGByZHNfbWVzc2FnZV9wdXRgXG4qICAgYHJkc19jbXNnX3JkbWFfYXJnc2BcbiogICBgcmRzX2Ntc2dfYXRvbWljYFxuKiAgIGByZHNfcmRtYV9mcmVlX29wYFxuKiAgIGByZHNfYXRvbWljX2ZyZWVfb3BgXG4qICAgYHJkc19yZG1hX29wX3VucGluX3BhZ2VzYFxuKiAgIGByZHNfYXRvbWljX29wX3VucGluX3BhZ2VgXG4qICAgYF9fcmRzX3B1dF9tcl9maW5hbGBcbiogICBgcmRzX2dldF9tcmBcbiogICBgcmRzX2ZyZWVfbXJgXG4qICAgYHJkc19zZW5kX3htaXRgXG4qICAgYF9fcmRzX2liX3RlYXJkb3duX21yYFxuXG5UaGF0J3MgYSB0b3RhbCBvZiAxMyBzeW1ib2xzLiBJdCBzZWVtcyB0byBiZSBhIGNvbXByZWhlbnNpdmUsIHlldCBtYW5hZ2VhYmxlLCBzZXQgdG8gYW5hbHl6ZS5cblxuTm93LCBhcyBJIHVuZGVyc3RhbmQgaXQsIHRoZSBjcnVjaWFsIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gdGhpcyBhcmUgbGlrZWx5IHRvIGJlOlxuXG4qICAgYFJEU2BcbiogICBgUkRTX1JETUFgXG4qICAgYElORklOSUJBTkRgXG4qICAgYElORklOSUJBTkRfQUREUl9UUkFOU2BcblxuTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZG91YmxlLWNoZWNrIGlmIGBSRFNfUkRNQWAgaGFzIGFueSBvdGhlciBoaWRkZW4gZGVwZW5kZW5jaWVzLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBhbnl0aGluZyB0aGF0IGNvdWxkIGltcGFjdCB0aGUgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MjkyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEzOjA0OjEwLjQyNTQzNTQ1M1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYwODYwODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFJEU19SRE1BXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yZHMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcmRzL0tjb25maWc9Mz1jb25maWcgUkRTXFxuLS1cXG5uZXQvcmRzL0tjb25maWctOS1cXG5uZXQvcmRzL0tjb25maWc6MTA6Y29uZmlnIFJEU19SRE1BXFxubmV0L3Jkcy9LY29uZmlnLTExLVxcdHRyaXN0YXRlIFxcXCJSRFMgb3ZlciBJbmZpbmliYW5kXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzowNDoxMC41MDE1Mjc5MzJaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTE3Mzg4NTM3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBJbmZpbmliYW5kIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCB3ZSd2ZSB0aWNrZWQgb2ZmIHNvbWUgaW5pdGlhbCBkZXBlbmRlbmN5IGNoZWNrcyDigJMgd2Uga25vdyBgUkRTYCwgYElORklOSUJBTkRgLCBhbmQgYElORklOSUJBTkRfQUREUl9UUkFOU2AgYXJlIGhhbmRsZWQuIEJ1dCwgd2l0aCBzb21ldGhpbmcgbGlrZSBJbmZpbmliYW5kLCBJJ20gYWx3YXlzIGEgbGl0dGxlIHBhcmFub2lkLiBJdCdzIGEgY3JpdGljYWwgY29tcG9uZW50LCBhbmQgc3VidGxlIG1pc2NvbmZpZ3VyYXRpb25zIGNhbiBsZWFkIHRvIHNvbWUgdHJ1bHkgYmFmZmxpbmcgaXNzdWVzIGRvd25zdHJlYW0uXG5cblNvLCBsZXQncyBqdXN0IG1ha2UgKmFic29sdXRlbHkqIHN1cmUgdGhhdCBgSU5GSU5JQkFORF9BRERSX1RSQU5TYCBpcyBiZWhhdmluZyBhcyBleHBlY3RlZCwgYW5kIHRoYXQgaXQncyBjb3JyZWN0bHkgZGVmaW5lZCB3aXRoaW4gdGhlIGRyaXZlcidzIEtjb25maWcgZmlsZS4gSSdsbCBwdWxsIHVwIGBkcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZ2AgYW5kIGdpdmUgaXQgYSBxdWljayBzY2FuLiBUaGlzIGlzIG1vcmUgb2YgYSBzYW5pdHkgY2hlY2sgdGhhbiBhbnl0aGluZywgYnV0IGl0J3MgdGltZSB3ZWxsIHNwZW50IHdoZW4gZGVhbGluZyB3aXRoIHNvbWV0aGluZyBhcyBjcnVjaWFsIGFzIHRoaXMuIEl0J3MgYWJvdXQgYmVpbmcgdGhvcm91Z2ggYW5kIG5vdCB0YWtpbmcgYW55dGhpbmcgZm9yIGdyYW50ZWQsIGVzcGVjaWFsbHkgd2l0aCBsb3ctbGV2ZWwgbmV0d29ya2luZyBjb21wb25lbnRzIGxpa2UgSW5maW5pYmFuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYxNDYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzowNDoxOS42NzU0MTYwNjZaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNzcyNDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJTkZJTklCQU5EX0FERFJfVFJBTlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc9NTE9Y29uZmlnIElORklOSUJBTkRfT05fREVNQU5EX1BBR0lOR1xcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNjMtXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NjQ6Y29uZmlnIElORklOSUJBTkRfQUREUl9UUkFOU1xcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTY1LVxcdGJvb2wgXFxcIlJETUEvQ01cXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy03MS1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo3Mjpjb25maWcgSU5GSU5JQkFORF9BRERSX1RSQU5TX0NPTkZJR0ZTXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNzMtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzowNDoxOS43MjkxOTQ3NDVaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA2NzIzNzg1OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uZmlndXJhdGlvbiBhbmQgU3ltYm9sIFZlcmlmaWNhdGlvbiBmb3IgUkRNQSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBwcmV0dHkgc3VyZSBgSU5GSU5JQkFORF9BRERSX1RSQU5TYCBpcyBhIGNvbmZpZyBvcHRpb24gcmVsZXZhbnQgdG8gdGhpcy4gSnVzdCB0byBiZSB0aG9yb3VnaCwgSSdtIHF1aWNrbHkgdmVyaWZ5aW5nIGBSRFNfVENQYCB0b28sIGV2ZW4gdGhvdWdoIGl0IGlzbid0ICpzdHJpY3RseSogcmVxdWlyZWQgZm9yIHRoaXMgcGFydGljdWxhciBwYXRjaDsgZW5hYmxpbmcgaXQgaXMgZ2VuZXJhbGx5IGEgZ29vZCBwcmFjdGljZS4gU2luY2UgdGhlIHBhdGNoIHRvdWNoZXMgYG5ldC9yZHMvaWJfcmRtYS5jYCwgSSdtIGRvdWJsZS1jaGVja2luZyB0aGF0IGBDT05GSUdfUkRTX1JETUFgIGlzLCBvZiBjb3Vyc2UsIGEgaGFyZCByZXF1aXJlbWVudC5cblxuTm93LCBsZXQncyBjb25maXJtIHRoZSB2aXNpYmlsaXR5IG9mIGEgZmV3IHN5bWJvbHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgYHJkc19yZG1hX29wX3VucGluX3BhZ2VzYCBhbmQgYHJkc19hdG9taWNfb3BfdW5waW5fcGFnZWAgYXJlIGFjY2Vzc2libGUuIEFoLCB0aGV5J3JlIG5vbi1zdGF0aWMsIGRlZmluZWQgaW4gYG5ldC9yZHMvcmRtYS5jYCBhbmQgZGVjbGFyZWQgaW4gYG5ldC9yZHMvcmRzLmhgLCBzbyB3ZSBhcmUgZ29vZCB0aGVyZS4gVGhleSBkb24ndCB1c2UgYEVYUE9SVF9TWU1CT0xgLCBidXQgdGhlaXIgbm9uLXN0YXRpYyBuYXR1cmUgbWVhbnMgdGhleSdyZSBwcm9wZXJseSBzeW1ib2wtZGVmaW5lZC5cblxuTmV4dCwgSSBjaGVja2VkIGByZHNfbWVzc2FnZV91bnBpbl93b3JrZXJgLCBidXQgaXQncyBzdGF0aWMsIHNvIHdlIGRvbid0IG5lZWQgdG8gYmUgY29uY2VybmVkIHdpdGggaXQuIEFuZCBgdW5waW5fdXNlcl9wYWdlc19kaXJ0eV9sb2NrYCBpcyBhIGNvcmUgTU0gZnVuY3Rpb24sIHNvIHdlIGRvbid0IG5lZWQgaXQgZWl0aGVyLlxuXG5MZXQncyBkbyBhIGZpbmFsIHJldmlldyBvZiB0aGUgY29yZSBzeW1ib2xzIEknbSBmb2N1c2luZyBvbjogYHJkc19zZW5kbXNnYCwgYHJkc19tZXNzYWdlX3B1dGAsIGByZHNfY21zZ19yZG1hX2FyZ3NgLCBgcmRzX2Ntc2dfYXRvbWljYCwgYHJkc19yZG1hX2ZyZWVfb3BgLCBgcmRzX2F0b21pY19mcmVlX29wYCwgYHJkc19yZG1hX29wX3VucGluX3BhZ2VzYCwgYHJkc19hdG9taWNfb3BfdW5waW5fcGFnZWAsIGBfX3Jkc19wdXRfbXJfZmluYWxgLCBgcmRzX2dldF9tcmAsIGByZHNfZnJlZV9tcmAsIGByZHNfc2VuZF94bWl0YCwgYW5kIGBfX3Jkc19pYl90ZWFyZG93bl9tcmAuXG5cbkFscmlnaHQsIGV2ZXJ5dGhpbmcgYXBwZWFycyB0byBiZSBpbiBvcmRlci5cblxuSnVzdCBhIGxhc3QgcXVpY2sgY2hlY2sgb24gYF9fcmRzX2liX3RlYXJkb3duX21yYCBhbmQgaXQncyBpbiB0aGUgZXhwZWN0ZWQgbG9jYXRpb24sIGBuZXQvcmRzL2liX3JkbWEuY2AuIEFsbCBnb29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjYwNCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzowNDozMC40MDE1NzUxOTVaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzI0OTExOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3Jkc19pYl90ZWFyZG93bl9tclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcmRzL2liX3JkbWEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcmRzL2liX3JkbWEuYz0yMTQ9dm9pZCByZHNfaWJfc3luY19tcih2b2lkICp0cmFuc19wcml2YXRlLCBpbnQgZGlyZWN0aW9uKVxcbi0tXFxubmV0L3Jkcy9pYl9yZG1hLmMtMjMzLVxcbm5ldC9yZHMvaWJfcmRtYS5jOjIzNDp2b2lkIF9fcmRzX2liX3RlYXJkb3duX21yKHN0cnVjdCByZHNfaWJfbXIgKmlibXIpXFxubmV0L3Jkcy9pYl9yZG1hLmMtMjM1LXtcXG4tLVxcbm5ldC9yZHMvaWJfcmRtYS5jPTI2Mz12b2lkIHJkc19pYl90ZWFyZG93bl9tcihzdHJ1Y3QgcmRzX2liX21yICppYm1yKVxcbi0tXFxubmV0L3Jkcy9pYl9yZG1hLmMtMjY2LVxcbm5ldC9yZHMvaWJfcmRtYS5jOjI2NzpcXHRfX3Jkc19pYl90ZWFyZG93bl9tcihpYm1yKTtcXG5uZXQvcmRzL2liX3JkbWEuYy0yNjgtXFx0aWYgKHBpbm5lZCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzowNDozMC41MDg4MzMyNDNaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTIzOTAxNzE1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyBGdW5jdGlvbiBWaXNpYmlsaXR5KipcblxuUmlnaHQsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBmdW5jdGlvbiBzY29wZSBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgY29uZmlybWVkOiB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gaXMgZGVmaW5pdGVseSBub24tc3RhdGljLiBUaGUga2V5IHF1ZXN0aW9uIG5vdyBiZWNvbWVzLCBhcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9ucyBpbiB0aGlzIGFyZWEgdGhhdCBtaWdodCBoYXZlIHVuZGVyZ29uZSBjaGFuZ2VzPyBBIHF1aWNrIHNjYW4gb2YgcmVsYXRlZCBmdW5jdGlvbnMgaXMgaW4gb3JkZXIgdG8gYmUgY2VydGFpbiBvZiB0aGUgc2NvcGUgb2YgdGhlc2UgY2hhbmdlcy5cblxuQWxyaWdodCwgY2hlY2tpbmcgdGhlc2Ugc3BlY2lmaWMgZnVuY3Rpb25zOiBgcmRzX21lc3NhZ2VfcHVyZ2VgLCB0aGF0J3Mgc3RhdGljLiBgcmRzX21lc3NhZ2VfdW5waW5fd29ya2VyYCBhbHNvIHN0YXRpYy4gQW5kIGBfX3Jkc19yZG1hX21hcGAsIHRoYXQgb25lIGlzIGFsc28gc3RhdGljLiBIb3dldmVyLCBgcmRzX3JkbWFfdW51c2VgIGlzIHRoZSBvbmUgdGhhdCdzICpub3QqIHN0YXRpYy4gR29vZC4gVGhpcyBpcyB0aGUgZGlmZmVyZW5jZSBJIHdhcyBsb29raW5nIGZvci4gTm93IEkgY2FuIHBpbnBvaW50IGV4YWN0bHkgd2hhdCdzIGJlZW4gY2hhbmdlZCBhbmQgd2h5LCBhbmQgd2hhdCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBjaGFuZ2UgbWlnaHQgYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3ODIzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTM6MDQ6MzUuNzQ3ODUzMVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI4ODc5MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmRzX3JkbWFfdW51c2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Jkcy9yZG1hLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Jkcy9yZG1hLmM9NDAwPWludCByZHNfZnJlZV9tcihzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L3Jkcy9yZG1hLmMtNDIxLVxcdCAqIHNvIG5vYm9keSBlbHNlIGZpbmRzIGl0Llxcbm5ldC9yZHMvcmRtYS5jOjQyMjpcXHQgKiBUaGlzIHNob3VsZCBhbHNvIHByZXZlbnQgcmFjZXMgd2l0aCByZHNfcmRtYV91bnVzZS5cXG5uZXQvcmRzL3JkbWEuYy00MjMtXFx0ICovXFxuLS1cXG5uZXQvcmRzL3JkbWEuYy00NDUtICovXFxubmV0L3Jkcy9yZG1hLmM6NDQ2OnZvaWQgcmRzX3JkbWFfdW51c2Uoc3RydWN0IHJkc19zb2NrICpycywgdTMyIHJfa2V5LCBpbnQgZm9yY2UpXFxubmV0L3Jkcy9yZG1hLmMtNDQ3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTM6MDQ6MzUuODEwNzQ1MjQ5WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg4Njc4OTAxMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBUaGlua2luZzogUkRTIFJETUEgT3B0aW1pemF0aW9uKipcblxuT2theSwgbGV0J3MgaW5jb3Jwb3JhdGUgYHJkc19yZG1hX3VudXNlYCBpbnRvIHRoZSBsaXN0IG9mIGNyaXRpY2FsIHN5bWJvbHMgd2UncmUgdHJhY2tpbmcuIEkgd2FudCB0byBoYXZlIGEgY29tcHJlaGVuc2l2ZSBvdmVydmlldyBvZiB0aGUga2V5IGNvbXBvbmVudHMgaW52b2x2ZWQgaW4gdGhpcyBSRFMgUkRNQSBtb2RpZmljYXRpb24uXG5cblNvLCB0aGUgZGVmaW5pdGl2ZSBsaXN0IG9mIHN5bWJvbHMgSSdtIGZvY3VzaW5nIG9uIGluY2x1ZGVzOlxuKiAgIGByZHNfc2VuZG1zZ2BcbiogICBgcmRzX21lc3NhZ2VfcHV0YFxuKiAgIGByZHNfY21zZ19yZG1hX2FyZ3NgXG4qICAgYHJkc19jbXNnX2F0b21pY2BcbiogICBgcmRzX3JkbWFfZnJlZV9vcGBcbiogICBgcmRzX2F0b21pY19mcmVlX29wYFxuKiAgIGByZHNfcmRtYV9vcF91bnBpbl9wYWdlc2BcbiogICBgcmRzX2F0b21pY19vcF91bnBpbl9wYWdlYFxuKiAgIGBfX3Jkc19wdXRfbXJfZmluYWxgXG4qICAgYHJkc19nZXRfbXJgXG4qICAgYHJkc19mcmVlX21yYFxuKiAgIGByZHNfc2VuZF94bWl0YFxuKiAgIGBfX3Jkc19pYl90ZWFyZG93bl9tcmBcbiogICBgcmRzX3JkbWFfdW51c2VgXG5cbkFuZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgZXNzZW50aWFsIGZvciBjb250ZXh0IGFyZTpcbiogICBgUkRTYFxuKiAgIGBSRFNfUkRNQWBcbiogICBgSU5GSU5JQkFORGBcbiogICBgSU5GSU5JQkFORF9BRERSX1RSQU5TYFxuXG5Gcm9tIHdoYXQgSSBnYXRoZXIsIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIHRoZSB3YXkgdGhlIFJEUyBzdWJzeXN0ZW0gZGVhbHMgd2l0aCBNZW1vcnkgUmVnaW9ucyAoTVJzKSBhbmQgUkRNQSBvcGVyYXRpb25zLiBDcnVjaWFsbHksIGl0J3MgZGVmZXJyaW5nIHRoZSB1bnBpbm5pbmcgb2YgdXNlciBwYWdlcyB0byBhIHdvcmtxdWV1ZSB3aGVuIHRoZSBmaW5hbCBcInB1dFwiIGhhcHBlbnMgaW4gYW4gYXRvbWljIGNvbnRleHQuIFRoaXMgaXMgYSB2ZXJ5IHRhcmdldGVkIGZpeCwgYWRkcmVzc2luZyBwb3RlbnRpYWwgc2xlZXAtaW4tYXRvbWljIGlzc3VlcywgYSB3ZWxsLWtub3duIHZ1bG5lcmFiaWxpdHkuIFRoZSBpbXBsZW1lbnRhdGlvbiBhbHNvIGVuc3VyZXMgc29ja2V0IHJlZmVyZW5jZXMgYXJlIGhlbGQgd2hlbiBNUnMgYXJlIGNyZWF0ZWQsIHByZXZlbnRpbmcgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcy5cblxuVGhpcyBpcyBhIGZ1bmRhbWVudGFsIHNoaWZ0IGluIHRoZSBjb3JlIFJEUyBsb2dpYywgd2hpY2ggSSBrbm93IGlzIGFjY2Vzc2libGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJdCBpcyBhIGZ1bmN0aW9uYWwgcGF0Y2ggdGhhdCBjb3VsZCBoYXZlIGZhci1yZWFjaGluZyBpbXBhY3RzLlxuXG5JIGFtIHJlYWR5IHRvIG1vdmUgZm9yd2FyZCwgYW5kIEkgd2lsbCBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MzEzLCJPdXRwdXRUb2tlbnMiOjMwNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzowNDo0NC42Nzg2Mzc3MDZaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzcxNDEyNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlJEU1wiLFxuICAgIFwiUkRTX1JETUFcIixcbiAgICBcIklORklOSUJBTkRcIixcbiAgICBcIklORklOSUJBTkRfQUREUl9UUkFOU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJkc19zZW5kbXNnXCIsXG4gICAgXCJyZHNfbWVzc2FnZV9wdXRcIixcbiAgICBcInJkc19jbXNnX3JkbWFfYXJnc1wiLFxuICAgIFwicmRzX2Ntc2dfYXRvbWljXCIsXG4gICAgXCJyZHNfcmRtYV9mcmVlX29wXCIsXG4gICAgXCJyZHNfYXRvbWljX2ZyZWVfb3BcIixcbiAgICBcInJkc19yZG1hX29wX3VucGluX3BhZ2VzXCIsXG4gICAgXCJyZHNfYXRvbWljX29wX3VucGluX3BhZ2VcIixcbiAgICBcIl9fcmRzX3B1dF9tcl9maW5hbFwiLFxuICAgIFwicmRzX2dldF9tclwiLFxuICAgIFwicmRzX2ZyZWVfbXJcIixcbiAgICBcInJkc19zZW5kX3htaXRcIixcbiAgICBcIl9fcmRzX2liX3RlYXJkb3duX21yXCIsXG4gICAgXCJyZHNfcmRtYV91bnVzZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSRFMgKFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMpIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGhvdyBtZW1vcnkgcmVnaW9ucyAoTVIpIGFuZCBSRE1BIG9wZXJhdGlvbnMgYXJlIGhhbmRsZWQuIEl0IGRlZmVycyB0aGUgdW5waW5uaW5nIG9mIHVzZXIgcGFnZXMgdG8gYSB3b3JrcXVldWUgaWYgdGhlIGZpbmFsIHB1dCBoYXBwZW5zIGluIGF0b21pYyBjb250ZXh0LCBmaXhpbmcgcG90ZW50aWFsIHNsZWVwLWluLWF0b21pYyBidWdzLiBJdCBhbHNvIGFkZHMgYSBzb2NrZXQgcmVmZXJlbmNlIGhvbGQgd2hlbiBhbiBNUiBpcyBjcmVhdGVkIHRvIGVuc3VyZSB0aGUgc29ja2V0IG91dGxpdmVzIHRoZSBNUiwgZml4aW5nIGEgdXNlLWFmdGVyLWZyZWUuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBSRFMgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUkRTXCIsXG4gICAgXCJSRFNfUkRNQVwiLFxuICAgIFwiSU5GSU5JQkFORFwiLFxuICAgIFwiSU5GSU5JQkFORF9BRERSX1RSQU5TXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmRzX3NlbmRtc2dcIixcbiAgICBcInJkc19tZXNzYWdlX3B1dFwiLFxuICAgIFwicmRzX2Ntc2dfcmRtYV9hcmdzXCIsXG4gICAgXCJyZHNfY21zZ19hdG9taWNcIixcbiAgICBcInJkc19yZG1hX2ZyZWVfb3BcIixcbiAgICBcInJkc19hdG9taWNfZnJlZV9vcFwiLFxuICAgIFwicmRzX3JkbWFfb3BfdW5waW5fcGFnZXNcIixcbiAgICBcInJkc19hdG9taWNfb3BfdW5waW5fcGFnZVwiLFxuICAgIFwiX19yZHNfcHV0X21yX2ZpbmFsXCIsXG4gICAgXCJyZHNfZ2V0X21yXCIsXG4gICAgXCJyZHNfZnJlZV9tclwiLFxuICAgIFwicmRzX3NlbmRfeG1pdFwiLFxuICAgIFwiX19yZHNfaWJfdGVhcmRvd25fbXJcIixcbiAgICBcInJkc19yZG1hX3VudXNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJEUyAoUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cykgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgaG93IG1lbW9yeSByZWdpb25zIChNUikgYW5kIFJETUEgb3BlcmF0aW9ucyBhcmUgaGFuZGxlZC4gSXQgZGVmZXJzIHRoZSB1bnBpbm5pbmcgb2YgdXNlciBwYWdlcyB0byBhIHdvcmtxdWV1ZSBpZiB0aGUgZmluYWwgcHV0IGhhcHBlbnMgaW4gYXRvbWljIGNvbnRleHQsIGZpeGluZyBwb3RlbnRpYWwgc2xlZXAtaW4tYXRvbWljIGJ1Z3MuIEl0IGFsc28gYWRkcyBhIHNvY2tldCByZWZlcmVuY2UgaG9sZCB3aGVuIGFuIE1SIGlzIGNyZWF0ZWQgdG8gZW5zdXJlIHRoZSBzb2NrZXQgb3V0bGl2ZXMgdGhlIE1SLCBmaXhpbmcgYSB1c2UtYWZ0ZXItZnJlZS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIFJEUyBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowv79sr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-31 13:00:43 +0000 UTC FinishedAt: 2026-07-31 13:04:46 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "89d8006259b81dd25c962f6cc8d7ab268d6ea426", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "RDS", "RDS_RDMA", "INFINIBAND", "INFINIBAND_ADDR_TRANS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "89d8006259b81dd25c962f6cc8d7ab268d6ea426", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "RDS", "RDS_RDMA", "INFINIBAND", "INFINIBAND_ADDR_TRANS" ], "series_id": "72bebfc3-471b-4386-871c-5d7a54c5e2ec" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rds_sendmsg", "rds_message_put", "rds_cmsg_rdma_args", "rds_cmsg_atomic", "rds_rdma_free_op", "rds_atomic_free_op", "rds_rdma_op_unpin_pages", "rds_atomic_op_unpin_page", "__rds_put_mr_final", "rds_get_mr", "rds_free_mr", "rds_send_xmit", "__rds_ib_teardown_mr", "rds_rdma_unuse" ], "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+CgkJCTx0ZD4yMDI2LzA3LzMxIDEzOjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JEUyYjMzQ7LAogICAgJiMzNDtSRFNfUkRNQSYjMzQ7LAogICAgJiMzNDtJTkZJTklCQU5EJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkRfQUREUl9UUkFOUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Jkc19zZW5kbXNnJiMzNDssCiAgICAmIzM0O3Jkc19tZXNzYWdlX3B1dCYjMzQ7LAogICAgJiMzNDtyZHNfY21zZ19yZG1hX2FyZ3MmIzM0OywKICAgICYjMzQ7cmRzX2Ntc2dfYXRvbWljJiMzNDssCiAgICAmIzM0O3Jkc19yZG1hX2ZyZWVfb3AmIzM0OywKICAgICYjMzQ7cmRzX2F0b21pY19mcmVlX29wJiMzNDssCiAgICAmIzM0O3Jkc19yZG1hX29wX3VucGluX3BhZ2VzJiMzNDssCiAgICAmIzM0O3Jkc19hdG9taWNfb3BfdW5waW5fcGFnZSYjMzQ7LAogICAgJiMzNDtfX3Jkc19wdXRfbXJfZmluYWwmIzM0OywKICAgICYjMzQ7cmRzX2dldF9tciYjMzQ7LAogICAgJiMzNDtyZHNfZnJlZV9tciYjMzQ7LAogICAgJiMzNDtyZHNfc2VuZF94bWl0JiMzNDssCiAgICAmIzM0O19fcmRzX2liX3RlYXJkb3duX21yJiMzNDssCiAgICAmIzM0O3Jkc19yZG1hX3VudXNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSRFMgKFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMpIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGhvdyBtZW1vcnkgcmVnaW9ucyAoTVIpIGFuZCBSRE1BIG9wZXJhdGlvbnMgYXJlIGhhbmRsZWQuIEl0IGRlZmVycyB0aGUgdW5waW5uaW5nIG9mIHVzZXIgcGFnZXMgdG8gYSB3b3JrcXVldWUgaWYgdGhlIGZpbmFsIHB1dCBoYXBwZW5zIGluIGF0b21pYyBjb250ZXh0LCBmaXhpbmcgcG90ZW50aWFsIHNsZWVwLWluLWF0b21pYyBidWdzLiBJdCBhbHNvIGFkZHMgYSBzb2NrZXQgcmVmZXJlbmNlIGhvbGQgd2hlbiBhbiBNUiBpcyBjcmVhdGVkIHRvIGVuc3VyZSB0aGUgc29ja2V0IG91dGxpdmVzIHRoZSBNUiwgZml4aW5nIGEgdXNlLWFmdGVyLWZyZWUuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBSRFMgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTM6MDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3OWE2M2Y2MjJjNWRjMTVlMThiY2ZmNTE4OTZlNjkzNjEwNWQ1ZTg5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMzEgMTM6MDI6MjggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYl9yZG1hLmMgYi9uZXQvcmRzL2liX3JkbWEuY1xuaW5kZXggOTU5NGVhMjQ1ZjdmZS4uZGI3ZTkyZTdiZDI5ZiAxMDA2NDRcbi0tLSBhL25ldC9yZHMvaWJfcmRtYS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL2liX3JkbWEuY1xuQEAgLTI1MSw5ICYjNDM7MjUxLDcgQEAgdm9pZCBfX3Jkc19pYl90ZWFyZG93bl9tcihzdHJ1Y3QgcmRzX2liX21yICppYm1yKVxuIFxuIFx0XHRcdC8qIEZJWE1FIHdlIG5lZWQgYSB3YXkgdG8gdGVsbCBhIHIvdyBNUlxuIFx0XHRcdCAqIGZyb20gYSByL28gTVIgKi9cbi1cdFx0XHRXQVJOX09OKCFwYWdlLVx1MDAzZW1hcHBpbmcgXHUwMDI2XHUwMDI2IGlycXNfZGlzYWJsZWQoKSk7XG4tXHRcdFx0c2V0X3BhZ2VfZGlydHkocGFnZSk7XG4tXHRcdFx0cHV0X3BhZ2UocGFnZSk7XG4mIzQzO1x0XHRcdHVucGluX3VzZXJfcGFnZXNfZGlydHlfbG9jayhcdTAwMjZwYWdlLCAxLCB0cnVlKTtcbiBcdFx0fVxuIFx0XHRrZnJlZShpYm1yLVx1MDAzZXNnKTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvcmRzL21lc3NhZ2UuYyBiL25ldC9yZHMvbWVzc2FnZS5jXG5pbmRleCA3ZmViMGViNjUzN2RiLi5mMjVmMjU5MjU4NmY3IDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9tZXNzYWdlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvbWVzc2FnZS5jXG5AQCAtMTgyLDYgJiM0MzsxODIsMTkgQEAgc3RhdGljIHZvaWQgcmRzX21lc3NhZ2VfcHVyZ2Uoc3RydWN0IHJkc19tZXNzYWdlICpybSlcbiBcdFx0a3JlZl9wdXQoXHUwMDI2cm0tXHUwMDNlYXRvbWljLm9wX3JkbWFfbXItXHUwMDNlcl9rcmVmLCBfX3Jkc19wdXRfbXJfZmluYWwpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgcmRzX21lc3NhZ2VfdW5waW5fd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByZHNfbWVzc2FnZSAqcm0gPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJkc19tZXNzYWdlLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgbV91bnBpbl93b3JrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJtLVx1MDAzZXJkbWEub3BfdW5waW5fZGVmZXJyZWQpXG4mIzQzO1x0XHRyZHNfcmRtYV9vcF91bnBpbl9wYWdlcyhcdTAwMjZybS1cdTAwM2VyZG1hKTtcbiYjNDM7XHRpZiAocm0tXHUwMDNlYXRvbWljLm9wX3VucGluX2RlZmVycmVkKVxuJiM0MztcdFx0cmRzX2F0b21pY19vcF91bnBpbl9wYWdlKFx1MDAyNnJtLVx1MDAzZWF0b21pYyk7XG4mIzQzO1xuJiM0MztcdGtmcmVlKHJtKTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIHJkc19tZXNzYWdlX3B1dChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKVxuIHtcbiBcdHJkc2RlYnVnKFwmIzM0O3B1dCBybSAlcCByZWYgJWRcXG5cJiMzNDssIHJtLCByZWZjb3VudF9yZWFkKFx1MDAyNnJtLVx1MDAzZW1fcmVmY291bnQpKTtcbkBAIC0xODksOCAmIzQzOzIwMiwyMSBAQCB2b2lkIHJkc19tZXNzYWdlX3B1dChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKVxuIFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZybS1cdTAwM2VtX3JlZmNvdW50KSkge1xuIFx0XHRCVUdfT04oIWxpc3RfZW1wdHkoXHUwMDI2cm0tXHUwMDNlbV9zb2NrX2l0ZW0pKTtcbiBcdFx0QlVHX09OKCFsaXN0X2VtcHR5KFx1MDAyNnJtLVx1MDAzZW1fY29ubl9pdGVtKSk7XG4mIzQzO1xuIFx0XHRyZHNfbWVzc2FnZV9wdXJnZShybSk7XG4gXG4mIzQzO1x0XHQvKiBBIGZpbmFsIHB1dCBpbiBhdG9taWMgY29udGV4dCBjYW5ub3QgZGlydHkgdGhlIG9wcyYjMzk7XG4mIzQzO1x0XHQgKiB1c2VyIHBhZ2VzIG9uIHVucGluLCBzbyByZHNfcmRtYV9mcmVlX29wKCkgYW5kXG4mIzQzO1x0XHQgKiByZHNfYXRvbWljX2ZyZWVfb3AoKSBkZWZlcnJlZCBpdC4gIEZpbmlzaCB0aGUgdW5waW4sXG4mIzQzO1x0XHQgKiBhbmQgdGhlIGZyZWUsIGZyb20gcHJvY2VzcyBjb250ZXh0LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAocm0tXHUwMDNlcmRtYS5vcF91bnBpbl9kZWZlcnJlZCB8fFxuJiM0MztcdFx0ICAgIHJtLVx1MDAzZWF0b21pYy5vcF91bnBpbl9kZWZlcnJlZCkge1xuJiM0MztcdFx0XHRJTklUX1dPUksoXHUwMDI2cm0tXHUwMDNlbV91bnBpbl93b3JrLCByZHNfbWVzc2FnZV91bnBpbl93b3JrZXIpO1xuJiM0MztcdFx0XHRxdWV1ZV93b3JrKHJkc193cSwgXHUwMDI2cm0tXHUwMDNlbV91bnBpbl93b3JrKTtcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0a2ZyZWUocm0pO1xuIFx0fVxuIH1cbmRpZmYgLS1naXQgYS9uZXQvcmRzL3JkbWEuYyBiL25ldC9yZHMvcmRtYS5jXG5pbmRleCA2MWZiNmU0NTI4MWJmLi4wNzgwOTBkMjkyZmEzIDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9yZG1hLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvcmRtYS5jXG5AQCAtMTE3LDYgJiM0MzsxMTcsNyBAQCB2b2lkIF9fcmRzX3B1dF9tcl9maW5hbChzdHJ1Y3Qga3JlZiAqa3JlZilcbiBcdHN0cnVjdCByZHNfbXIgKm1yID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCByZHNfbXIsIHJfa3JlZik7XG4gXG4gXHRyZHNfZGVzdHJveV9tcihtcik7XG4mIzQzO1x0c29ja19wdXQocmRzX3JzX3RvX3NrKG1yLVx1MDAzZXJfc29jaykpO1xuIFx0a2ZyZWUobXIpO1xuIH1cbiBcbkBAIC0yNDMsNyAmIzQzOzI0NCwxMSBAQCBzdGF0aWMgaW50IF9fcmRzX3JkbWFfbWFwKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfZ2V0X21yX2FyZ3MgKmFyZ3MsXG4gXHRrcmVmX2luaXQoXHUwMDI2bXItXHUwMDNlcl9rcmVmKTtcbiBcdFJCX0NMRUFSX05PREUoXHUwMDI2bXItXHUwMDNlcl9yYl9ub2RlKTtcbiBcdG1yLVx1MDAzZXJfdHJhbnMgPSBycy1cdTAwM2Vyc190cmFuc3BvcnQ7XG4mIzQzO1x0LyogVGhlIE1SIGNhbiBvdXRsaXZlIGl0cyBzb2NrZXQ6IGEgc29ja2V0IHJlZmVyZW5jZSBpcyBoZWxkXG4mIzQzO1x0ICogdW50aWwgdGhlIGZpbmFsIGtyZWYgaXMgZHJvcHBlZCBpbiBfX3Jkc19wdXRfbXJfZmluYWwoKS5cbiYjNDM7XHQgKi9cbiBcdG1yLVx1MDAzZXJfc29jayA9IHJzO1xuJiM0MztcdHNvY2tfaG9sZChyZHNfcnNfdG9fc2socnMpKTtcbiBcbiBcdGlmIChhcmdzLVx1MDAzZWZsYWdzIFx1MDAyNiBSRFNfUkRNQV9VU0VfT05DRSlcbiBcdFx0bXItXHUwMDNlcl91c2Vfb25jZSA9IDE7XG5AQCAtNDgzLDIyICYjNDM7NDg4LDM2IEBAIHZvaWQgcmRzX3JkbWFfdW51c2Uoc3RydWN0IHJkc19zb2NrICpycywgdTMyIHJfa2V5LCBpbnQgZm9yY2UpXG4gXHRcdGtyZWZfcHV0KFx1MDAyNm1yLVx1MDAzZXJfa3JlZiwgX19yZHNfcHV0X21yX2ZpbmFsKTtcbiB9XG4gXG4tdm9pZCByZHNfcmRtYV9mcmVlX29wKHN0cnVjdCBybV9yZG1hX29wICpybylcbiYjNDM7dm9pZCByZHNfcmRtYV9vcF91bnBpbl9wYWdlcyhzdHJ1Y3Qgcm1fcmRtYV9vcCAqcm8pXG4ge1xuIFx0dW5zaWduZWQgaW50IGk7XG4gXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgcm8tXHUwMDNlb3BfbmVudHM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHNnX3BhZ2UoXHUwMDI2cm8tXHUwMDNlb3Bfc2dbaV0pO1xuJiM0MztcbiYjNDM7XHRcdC8qIE1hcmsgcGFnZSBkaXJ0eSBpZiBpdCB3YXMgcG9zc2libHkgbW9kaWZpZWQsIHdoaWNoXG4mIzQzO1x0XHQgKiBpcyB0aGUgY2FzZSBmb3IgYSBSRE1BX1JFQUQgd2hpY2ggY29waWVzIGZyb20gcmVtb3RlXG4mIzQzO1x0XHQgKiB0byBsb2NhbCBtZW1vcnlcbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0dW5waW5fdXNlcl9wYWdlc19kaXJ0eV9sb2NrKFx1MDAyNnBhZ2UsIDEsICFyby1cdTAwM2VvcF93cml0ZSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHJkc19yZG1hX2ZyZWVfb3Aoc3RydWN0IHJtX3JkbWFfb3AgKnJvKVxuJiM0Mzt7XG4gXHRpZiAocm8tXHUwMDNlb3Bfb2RwX21yKSB7XG4gXHRcdGtyZWZfcHV0KFx1MDAyNnJvLVx1MDAzZW9wX29kcF9tci1cdTAwM2VyX2tyZWYsIF9fcmRzX3B1dF9tcl9maW5hbCk7XG4mIzQzO1x0fSBlbHNlIGlmIChpbl90YXNrKCkgfHwgcm8tXHUwMDNlb3Bfd3JpdGUpIHtcbiYjNDM7XHRcdC8qIEFuIFJETUEgd3JpdGUmIzM5O3MgcGFnZXMgYXJlIG9ubHkgcmVhZCBieSB0aGUgcmVtb3RlXG4mIzQzO1x0XHQgKiBzaWRlOyB1bnBpbm5pbmcgd2l0aG91dCBkaXJ0eWluZyBkb2VzIG5vdCBzbGVlcC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cmRzX3JkbWFfb3BfdW5waW5fcGFnZXMocm8pO1xuIFx0fSBlbHNlIHtcbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgcm8tXHUwMDNlb3BfbmVudHM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBzZ19wYWdlKFx1MDAyNnJvLVx1MDAzZW9wX3NnW2ldKTtcbi1cbi1cdFx0XHQvKiBNYXJrIHBhZ2UgZGlydHkgaWYgaXQgd2FzIHBvc3NpYmx5IG1vZGlmaWVkLCB3aGljaFxuLVx0XHRcdCAqIGlzIHRoZSBjYXNlIGZvciBhIFJETUFfUkVBRCB3aGljaCBjb3BpZXMgZnJvbSByZW1vdGVcbi1cdFx0XHQgKiB0byBsb2NhbCBtZW1vcnlcbi1cdFx0XHQgKi9cbi1cdFx0XHR1bnBpbl91c2VyX3BhZ2VzX2RpcnR5X2xvY2soXHUwMDI2cGFnZSwgMSwgIXJvLVx1MDAzZW9wX3dyaXRlKTtcbi1cdFx0fVxuJiM0MztcdFx0LyogRGlydHlpbmcgdGhlIHBhZ2VzIG9uIHVucGluIGNhbiBzbGVlcDsgbGVhdmUgdGhlbVxuJiM0MztcdFx0ICogcGlubmVkIGFuZCBoYXZlIHJkc19tZXNzYWdlX3B1dCgpIGZpbmlzaCB0aGUgdW5waW5cbiYjNDM7XHRcdCAqIGZyb20gcHJvY2VzcyBjb250ZXh0LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyby1cdTAwM2VvcF91bnBpbl9kZWZlcnJlZCA9IDE7XG4gXHR9XG4gXG4gXHRrZnJlZShyby1cdTAwM2VvcF9ub3RpZmllcik7XG5AQCAtNTA3LDcgJiM0Mzs1MjYsNyBAQCB2b2lkIHJkc19yZG1hX2ZyZWVfb3Aoc3RydWN0IHJtX3JkbWFfb3AgKnJvKVxuIFx0cm8tXHUwMDNlb3Bfb2RwX21yID0gTlVMTDtcbiB9XG4gXG4tdm9pZCByZHNfYXRvbWljX2ZyZWVfb3Aoc3RydWN0IHJtX2F0b21pY19vcCAqYW8pXG4mIzQzO3ZvaWQgcmRzX2F0b21pY19vcF91bnBpbl9wYWdlKHN0cnVjdCBybV9hdG9taWNfb3AgKmFvKVxuIHtcbiBcdHN0cnVjdCBwYWdlICpwYWdlID0gc2dfcGFnZShhby1cdTAwM2VvcF9zZyk7XG4gXG5AQCAtNTE1LDYgJiM0Mzs1MzQsMTkgQEAgdm9pZCByZHNfYXRvbWljX2ZyZWVfb3Aoc3RydWN0IHJtX2F0b21pY19vcCAqYW8pXG4gXHQgKiBpcyB0aGUgY2FzZSBmb3IgYSBSRE1BX1JFQUQgd2hpY2ggY29waWVzIGZyb20gcmVtb3RlXG4gXHQgKiB0byBsb2NhbCBtZW1vcnkgKi9cbiBcdHVucGluX3VzZXJfcGFnZXNfZGlydHlfbG9jayhcdTAwMjZwYWdlLCAxLCB0cnVlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCByZHNfYXRvbWljX2ZyZWVfb3Aoc3RydWN0IHJtX2F0b21pY19vcCAqYW8pXG4mIzQzO3tcbiYjNDM7XHRpZiAoaW5fdGFzaygpKSB7XG4mIzQzO1x0XHRyZHNfYXRvbWljX29wX3VucGluX3BhZ2UoYW8pO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKiBEaXJ0eWluZyB0aGUgcGFnZSBvbiB1bnBpbiBjYW4gc2xlZXA7IGxlYXZlIGl0XG4mIzQzO1x0XHQgKiBwaW5uZWQgYW5kIGhhdmUgcmRzX21lc3NhZ2VfcHV0KCkgZmluaXNoIHRoZSB1bnBpblxuJiM0MztcdFx0ICogZnJvbSBwcm9jZXNzIGNvbnRleHQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGFvLVx1MDAzZW9wX3VucGluX2RlZmVycmVkID0gMTtcbiYjNDM7XHR9XG4gXG4gXHRrZnJlZShhby1cdTAwM2VvcF9ub3RpZmllcik7XG4gXHRhby1cdTAwM2VvcF9ub3RpZmllciA9IE5VTEw7XG5AQCAtNzMyLDcgJiM0Mzs3NjQsMTIgQEAgaW50IHJkc19jbXNnX3JkbWFfYXJncyhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLFxuIFx0XHRcdFJCX0NMRUFSX05PREUoXHUwMDI2bG9jYWxfb2RwX21yLVx1MDAzZXJfcmJfbm9kZSk7XG4gXHRcdFx0a3JlZl9pbml0KFx1MDAyNmxvY2FsX29kcF9tci1cdTAwM2VyX2tyZWYpO1xuIFx0XHRcdGxvY2FsX29kcF9tci1cdTAwM2VyX3RyYW5zID0gcnMtXHUwMDNlcnNfdHJhbnNwb3J0O1xuJiM0MztcdFx0XHQvKiBUaGUgTVIgY2FuIG91dGxpdmUgaXRzIHNvY2tldDogYSBzb2NrZXRcbiYjNDM7XHRcdFx0ICogcmVmZXJlbmNlIGlzIGhlbGQgdW50aWwgdGhlIGZpbmFsIGtyZWYgaXNcbiYjNDM7XHRcdFx0ICogZHJvcHBlZCBpbiBfX3Jkc19wdXRfbXJfZmluYWwoKS5cbiYjNDM7XHRcdFx0ICovXG4gXHRcdFx0bG9jYWxfb2RwX21yLVx1MDAzZXJfc29jayA9IHJzO1xuJiM0MztcdFx0XHRzb2NrX2hvbGQocmRzX3JzX3RvX3NrKHJzKSk7XG4gXHRcdFx0bG9jYWxfb2RwX21yLVx1MDAzZXJfdHJhbnNfcHJpdmF0ZSA9XG4gXHRcdFx0XHRycy1cdTAwM2Vyc190cmFuc3BvcnQtXHUwMDNlZ2V0X21yKFxuIFx0XHRcdFx0XHROVUxMLCAwLCBycywgXHUwMDI2bG9jYWxfb2RwX21yLVx1MDAzZXJfa2V5LCBOVUxMLFxuQEAgLTc0MSw3ICYjNDM7Nzc4LDkgQEAgaW50IHJkc19jbXNnX3JkbWFfYXJncyhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLFxuIFx0XHRcdFx0cmV0ID0gUFRSX0VSUihsb2NhbF9vZHBfbXItXHUwMDNlcl90cmFuc19wcml2YXRlKTtcbiBcdFx0XHRcdHJkc2RlYnVnKFwmIzM0O2dldF9tciByZXQgJWQgJXBcXFwmIzM0O1wmIzM0OywgcmV0LFxuIFx0XHRcdFx0XHQgbG9jYWxfb2RwX21yLVx1MDAzZXJfdHJhbnNfcHJpdmF0ZSk7XG4tXHRcdFx0XHRrZnJlZShsb2NhbF9vZHBfbXIpO1xuJiM0MztcdFx0XHRcdGxvY2FsX29kcF9tci1cdTAwM2VyX3RyYW5zX3ByaXZhdGUgPSBOVUxMO1xuJiM0MztcdFx0XHRcdGtyZWZfcHV0KFx1MDAyNmxvY2FsX29kcF9tci1cdTAwM2VyX2tyZWYsXG4mIzQzO1x0XHRcdFx0XHQgX19yZHNfcHV0X21yX2ZpbmFsKTtcbiBcdFx0XHRcdHJldCA9IC1FT1BOT1RTVVBQO1xuIFx0XHRcdFx0Z290byBvdXRfcGFnZXM7XG4gXHRcdFx0fVxuZGlmZiAtLWdpdCBhL25ldC9yZHMvcmRzLmggYi9uZXQvcmRzL3Jkcy5oXG5pbmRleCA2ZTA3OTBlNGI1NzAzLi4yZGI0OTU3M2RhY2Q1IDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9yZHMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Jkcy9yZHMuaFxuQEAgLTMyMCw3ICYjNDM7MzIwLDEwIEBAIHN0cnVjdCByZHNfbXIge1xuIFx0dW5zaWduZWQgaW50XHRcdHJfaW52YWxpZGF0ZToxO1xuIFx0dW5zaWduZWQgaW50XHRcdHJfd3JpdGU6MTtcbiBcbi1cdHN0cnVjdCByZHNfc29ja1x0XHQqcl9zb2NrOyAvKiBiYWNrIHBvaW50ZXIgdG8gdGhlIHNvY2tldCB0aGF0IG93bnMgdXMgKi9cbiYjNDM7XHRzdHJ1Y3QgcmRzX3NvY2tcdFx0KnJfc29jazsgLyogc29ja2V0IHRoYXQgb3ducyB1czsgY291bnRlZFxuJiM0MztcdFx0XHRcdFx0ICAqIHJlZmVyZW5jZSwgZHJvcHBlZCBieVxuJiM0MztcdFx0XHRcdFx0ICAqIF9fcmRzX3B1dF9tcl9maW5hbCgpXG4mIzQzO1x0XHRcdFx0XHQgICovXG4gXHRzdHJ1Y3QgcmRzX3RyYW5zcG9ydFx0KnJfdHJhbnM7XG4gXHR2b2lkXHRcdFx0KnJfdHJhbnNfcHJpdmF0ZTtcbiB9O1xuQEAgLTQ0NSw2ICYjNDM7NDQ4LDEyIEBAIHN0cnVjdCByZHNfbWVzc2FnZSB7XG4gXG4gXHR2b2lkXHRcdFx0Km1fZmluYWxfb3A7XG4gXG4mIzQzO1x0LyogVW5waW5zIHRoZSBvcHMmIzM5OyB1c2VyIHBhZ2VzIGFuZCBmcmVlcyB0aGUgbWVzc2FnZSBmcm9tXG4mIzQzO1x0ICogcHJvY2VzcyBjb250ZXh0IHdoZW4gdGhlIGZpbmFsIHB1dCBoYXBwZW5zIGluIGF0b21pY1xuJiM0MztcdCAqIGNvbnRleHQ6IGRpcnR5aW5nIHRoZSBwYWdlcyBvbiB1bnBpbiBjYW4gc2xlZXAuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3RydWN0IHdvcmtfc3RydWN0XHRtX3VucGluX3dvcms7XG4mIzQzO1xuIFx0c3RydWN0IHtcbiBcdFx0c3RydWN0IHJtX2F0b21pY19vcCB7XG4gXHRcdFx0aW50XHRcdFx0b3BfdHlwZTtcbkBAIC00NjgsNiAmIzQzOzQ3Nyw3IEBAIHN0cnVjdCByZHNfbWVzc2FnZSB7XG4gXHRcdFx0dW5zaWduZWQgaW50XHRcdG9wX21hcHBlZDoxO1xuIFx0XHRcdHVuc2lnbmVkIGludFx0XHRvcF9zaWxlbnQ6MTtcbiBcdFx0XHR1bnNpZ25lZCBpbnRcdFx0b3BfYWN0aXZlOjE7XG4mIzQzO1x0XHRcdHVuc2lnbmVkIGludFx0XHRvcF91bnBpbl9kZWZlcnJlZDoxO1xuIFx0XHRcdHN0cnVjdCBzY2F0dGVybGlzdFx0Km9wX3NnO1xuIFx0XHRcdHN0cnVjdCByZHNfbm90aWZpZXJcdCpvcF9ub3RpZmllcjtcbiBcbkBAIC00ODMsNiAmIzQzOzQ5Myw3IEBAIHN0cnVjdCByZHNfbWVzc2FnZSB7XG4gXHRcdFx0dW5zaWduZWQgaW50XHRcdG9wX21hcHBlZDoxO1xuIFx0XHRcdHVuc2lnbmVkIGludFx0XHRvcF9zaWxlbnQ6MTtcbiBcdFx0XHR1bnNpZ25lZCBpbnRcdFx0b3BfYWN0aXZlOjE7XG4mIzQzO1x0XHRcdHVuc2lnbmVkIGludFx0XHRvcF91bnBpbl9kZWZlcnJlZDoxO1xuIFx0XHRcdHVuc2lnbmVkIGludFx0XHRvcF9ieXRlcztcbiBcdFx0XHR1bnNpZ25lZCBpbnRcdFx0b3BfbmVudHM7XG4gXHRcdFx0dW5zaWduZWQgaW50XHRcdG9wX2NvdW50O1xuQEAgLTk3Miw2ICYjNDM7OTgzLDggQEAgaW50IHJkc19jbXNnX3JkbWFfbWFwKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sXG4gXHRcdFx0ICBzdHJ1Y3QgY21zZ2hkciAqY21zZyk7XG4gdm9pZCByZHNfcmRtYV9mcmVlX29wKHN0cnVjdCBybV9yZG1hX29wICpybyk7XG4gdm9pZCByZHNfYXRvbWljX2ZyZWVfb3Aoc3RydWN0IHJtX2F0b21pY19vcCAqYW8pO1xuJiM0Mzt2b2lkIHJkc19yZG1hX29wX3VucGluX3BhZ2VzKHN0cnVjdCBybV9yZG1hX29wICpybyk7XG4mIzQzO3ZvaWQgcmRzX2F0b21pY19vcF91bnBpbl9wYWdlKHN0cnVjdCBybV9hdG9taWNfb3AgKmFvKTtcbiB2b2lkIHJkc19yZG1hX3NlbmRfY29tcGxldGUoc3RydWN0IHJkc19tZXNzYWdlICpybSwgaW50IHdjX3N0YXR1cyk7XG4gdm9pZCByZHNfYXRvbWljX3NlbmRfY29tcGxldGUoc3RydWN0IHJkc19tZXNzYWdlICpybSwgaW50IHdjX3N0YXR1cyk7XG4gaW50IHJkc19jbXNnX2F0b21pYyhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLFxuZGlmZiAtLWdpdCBhL25ldC9yZHMvc2VuZC5jIGIvbmV0L3Jkcy9zZW5kLmNcbmluZGV4IDY4YmUxYmYwZTBhZGYuLjdlNDhmNjRkZmFhNjcgMTAwNjQ0XG4tLS0gYS9uZXQvcmRzL3NlbmQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Jkcy9zZW5kLmNcbkBAIC0zMzksOSAmIzQzOzMzOSwyMSBAQCBpbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXG4gXHRcdFx0ICAgIChybS1cdTAwM2VyZG1hLm9wX2FjdGl2ZSBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICAgdGVzdF9iaXQoUkRTX01TR19SRVRSQU5TTUlUVEVELCBcdTAwMjZybS1cdTAwM2VtX2ZsYWdzKSkpIHtcbiBcdFx0XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmNwLVx1MDAzZWNwX2xvY2ssIGZsYWdzKTtcbi1cdFx0XHRcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUkRTX01TR19PTl9DT05OLCBcdTAwMjZybS1cdTAwM2VtX2ZsYWdzKSlcbi1cdFx0XHRcdFx0bGlzdF9tb3ZlKFx1MDAyNnJtLVx1MDAzZW1fY29ubl9pdGVtLCBcdTAwMjZ0b19iZV9kcm9wcGVkKTtcbi1cdFx0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Y3AtXHUwMDNlY3BfbG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0XHRcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUkRTX01TR19PTl9DT05OLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgXHUwMDI2cm0tXHUwMDNlbV9mbGFncykpIHtcbiYjNDM7XHRcdFx0XHRcdC8qIG91ciByZWYgaXMgcHV0IGFmdGVyIHRoZSBiYXRjaCAqL1xuJiM0MztcdFx0XHRcdFx0bGlzdF9tb3ZlKFx1MDAyNnJtLVx1MDAzZW1fY29ubl9pdGVtLFxuJiM0MztcdFx0XHRcdFx0XHQgIFx1MDAyNnRvX2JlX2Ryb3BwZWQpO1xuJiM0MztcdFx0XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZjcC1cdTAwM2VjcF9sb2NrLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICAgICBmbGFncyk7XG4mIzQzO1x0XHRcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0XHRcdC8qIGFscmVhZHkgb2ZmIHRoZSBjb25uIGxpc3Q7IGRyb3BcbiYjNDM7XHRcdFx0XHRcdCAqIHRoZSByZWYgdGFrZW4gYWJvdmUgb3Vyc2VsdmVzXG4mIzQzO1x0XHRcdFx0XHQgKi9cbiYjNDM7XHRcdFx0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Y3AtXHUwMDNlY3BfbG9jayxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgICAgZmxhZ3MpO1xuJiM0MztcdFx0XHRcdFx0cmRzX21lc3NhZ2VfcHV0KHJtKTtcbiYjNDM7XHRcdFx0XHR9XG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHR9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTM6MDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JEUyYjMzQ7LAogICAgJiMzNDtSRFNfUkRNQSYjMzQ7LAogICAgJiMzNDtJTkZJTklCQU5EJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkRfQUREUl9UUkFOUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Jkc19zZW5kbXNnJiMzNDssCiAgICAmIzM0O3Jkc19tZXNzYWdlX3B1dCYjMzQ7LAogICAgJiMzNDtyZHNfY21zZ19yZG1hX2FyZ3MmIzM0OywKICAgICYjMzQ7cmRzX2Ntc2dfYXRvbWljJiMzNDssCiAgICAmIzM0O3Jkc19yZG1hX2ZyZWVfb3AmIzM0OywKICAgICYjMzQ7cmRzX2F0b21pY19mcmVlX29wJiMzNDssCiAgICAmIzM0O3Jkc19yZG1hX29wX3VucGluX3BhZ2VzJiMzNDssCiAgICAmIzM0O3Jkc19hdG9taWNfb3BfdW5waW5fcGFnZSYjMzQ7LAogICAgJiMzNDtfX3Jkc19wdXRfbXJfZmluYWwmIzM0OywKICAgICYjMzQ7cmRzX2dldF9tciYjMzQ7LAogICAgJiMzNDtyZHNfZnJlZV9tciYjMzQ7LAogICAgJiMzNDtyZHNfc2VuZF94bWl0JiMzNDssCiAgICAmIzM0O19fcmRzX2liX3RlYXJkb3duX21yJiMzNDssCiAgICAmIzM0O3Jkc19yZG1hX3VudXNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSRFMgKFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMpIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGhvdyBtZW1vcnkgcmVnaW9ucyAoTVIpIGFuZCBSRE1BIG9wZXJhdGlvbnMgYXJlIGhhbmRsZWQuIEl0IGRlZmVycyB0aGUgdW5waW5uaW5nIG9mIHVzZXIgcGFnZXMgdG8gYSB3b3JrcXVldWUgaWYgdGhlIGZpbmFsIHB1dCBoYXBwZW5zIGluIGF0b21pYyBjb250ZXh0LCBmaXhpbmcgcG90ZW50aWFsIHNsZWVwLWluLWF0b21pYyBidWdzLiBJdCBhbHNvIGFkZHMgYSBzb2NrZXQgcmVmZXJlbmNlIGhvbGQgd2hlbiBhbiBNUiBpcyBjcmVhdGVkIHRvIGVuc3VyZSB0aGUgc29ja2V0IG91dGxpdmVzIHRoZSBNUiwgZml4aW5nIGEgdXNlLWFmdGVyLWZyZWUuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBSRFMgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3OWE2M2Y2MjJjNWRjMTVlMThiY2ZmNTE4OTZlNjkzNjEwNWQ1ZTg5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMzEgMTM6MDI6MjggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvcmRzL2liX3JkbWEuYyBiL25ldC9yZHMvaWJfcmRtYS5jCmluZGV4IDk1OTRlYTI0NWY3ZmUuLmRiN2U5MmU3YmQyOWYgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvaWJfcmRtYS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvaWJfcmRtYS5jCkBAIC0yNTEsOSAmIzQzOzI1MSw3IEBAIHZvaWQgX19yZHNfaWJfdGVhcmRvd25fbXIoc3RydWN0IHJkc19pYl9tciAqaWJtcikKIAogCQkJLyogRklYTUUgd2UgbmVlZCBhIHdheSB0byB0ZWxsIGEgci93IE1SCiAJCQkgKiBmcm9tIGEgci9vIE1SICovCi0JCQlXQVJOX09OKCFwYWdlLSZndDttYXBwaW5nICZhbXA7JmFtcDsgaXJxc19kaXNhYmxlZCgpKTsKLQkJCXNldF9wYWdlX2RpcnR5KHBhZ2UpOwotCQkJcHV0X3BhZ2UocGFnZSk7CiYjNDM7CQkJdW5waW5fdXNlcl9wYWdlc19kaXJ0eV9sb2NrKCZhbXA7cGFnZSwgMSwgdHJ1ZSk7CiAJCX0KIAkJa2ZyZWUoaWJtci0mZ3Q7c2cpOwogCmRpZmYgLS1naXQgYS9uZXQvcmRzL21lc3NhZ2UuYyBiL25ldC9yZHMvbWVzc2FnZS5jCmluZGV4IDdmZWIwZWI2NTM3ZGIuLmYyNWYyNTkyNTg2ZjcgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvbWVzc2FnZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvbWVzc2FnZS5jCkBAIC0xODIsNiAmIzQzOzE4MiwxOSBAQCBzdGF0aWMgdm9pZCByZHNfbWVzc2FnZV9wdXJnZShzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKQogCQlrcmVmX3B1dCgmYW1wO3JtLSZndDthdG9taWMub3BfcmRtYV9tci0mZ3Q7cl9rcmVmLCBfX3Jkc19wdXRfbXJfZmluYWwpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgcmRzX21lc3NhZ2VfdW5waW5fd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCByZHNfbWVzc2FnZSAqcm0gPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJkc19tZXNzYWdlLAomIzQzOwkJCQkJICAgICAgbV91bnBpbl93b3JrKTsKJiM0MzsKJiM0MzsJaWYgKHJtLSZndDtyZG1hLm9wX3VucGluX2RlZmVycmVkKQomIzQzOwkJcmRzX3JkbWFfb3BfdW5waW5fcGFnZXMoJmFtcDtybS0mZ3Q7cmRtYSk7CiYjNDM7CWlmIChybS0mZ3Q7YXRvbWljLm9wX3VucGluX2RlZmVycmVkKQomIzQzOwkJcmRzX2F0b21pY19vcF91bnBpbl9wYWdlKCZhbXA7cm0tJmd0O2F0b21pYyk7CiYjNDM7CiYjNDM7CWtmcmVlKHJtKTsKJiM0Mzt9CiYjNDM7CiB2b2lkIHJkc19tZXNzYWdlX3B1dChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKQogewogCXJkc2RlYnVnKCYjMzQ7cHV0IHJtICVwIHJlZiAlZFxuJiMzNDssIHJtLCByZWZjb3VudF9yZWFkKCZhbXA7cm0tJmd0O21fcmVmY291bnQpKTsKQEAgLTE4OSw4ICYjNDM7MjAyLDIxIEBAIHZvaWQgcmRzX21lc3NhZ2VfcHV0KHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pCiAJaWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO3JtLSZndDttX3JlZmNvdW50KSkgewogCQlCVUdfT04oIWxpc3RfZW1wdHkoJmFtcDtybS0mZ3Q7bV9zb2NrX2l0ZW0pKTsKIAkJQlVHX09OKCFsaXN0X2VtcHR5KCZhbXA7cm0tJmd0O21fY29ubl9pdGVtKSk7CiYjNDM7CiAJCXJkc19tZXNzYWdlX3B1cmdlKHJtKTsKIAomIzQzOwkJLyogQSBmaW5hbCBwdXQgaW4gYXRvbWljIGNvbnRleHQgY2Fubm90IGRpcnR5IHRoZSBvcHMmIzM5OwomIzQzOwkJICogdXNlciBwYWdlcyBvbiB1bnBpbiwgc28gcmRzX3JkbWFfZnJlZV9vcCgpIGFuZAomIzQzOwkJICogcmRzX2F0b21pY19mcmVlX29wKCkgZGVmZXJyZWQgaXQuICBGaW5pc2ggdGhlIHVucGluLAomIzQzOwkJICogYW5kIHRoZSBmcmVlLCBmcm9tIHByb2Nlc3MgY29udGV4dC4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHJtLSZndDtyZG1hLm9wX3VucGluX2RlZmVycmVkIHx8CiYjNDM7CQkgICAgcm0tJmd0O2F0b21pYy5vcF91bnBpbl9kZWZlcnJlZCkgewomIzQzOwkJCUlOSVRfV09SSygmYW1wO3JtLSZndDttX3VucGluX3dvcmssIHJkc19tZXNzYWdlX3VucGluX3dvcmtlcik7CiYjNDM7CQkJcXVldWVfd29yayhyZHNfd3EsICZhbXA7cm0tJmd0O21fdW5waW5fd29yayk7CiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJfQomIzQzOwogCQlrZnJlZShybSk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9yZG1hLmMgYi9uZXQvcmRzL3JkbWEuYwppbmRleCA2MWZiNmU0NTI4MWJmLi4wNzgwOTBkMjkyZmEzIDEwMDY0NAotLS0gYS9uZXQvcmRzL3JkbWEuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL3JkbWEuYwpAQCAtMTE3LDYgJiM0MzsxMTcsNyBAQCB2b2lkIF9fcmRzX3B1dF9tcl9maW5hbChzdHJ1Y3Qga3JlZiAqa3JlZikKIAlzdHJ1Y3QgcmRzX21yICptciA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgcmRzX21yLCByX2tyZWYpOwogCiAJcmRzX2Rlc3Ryb3lfbXIobXIpOwomIzQzOwlzb2NrX3B1dChyZHNfcnNfdG9fc2sobXItJmd0O3Jfc29jaykpOwogCWtmcmVlKG1yKTsKIH0KIApAQCAtMjQzLDcgJiM0MzsyNDQsMTEgQEAgc3RhdGljIGludCBfX3Jkc19yZG1hX21hcChzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX2dldF9tcl9hcmdzICphcmdzLAogCWtyZWZfaW5pdCgmYW1wO21yLSZndDtyX2tyZWYpOwogCVJCX0NMRUFSX05PREUoJmFtcDttci0mZ3Q7cl9yYl9ub2RlKTsKIAltci0mZ3Q7cl90cmFucyA9IHJzLSZndDtyc190cmFuc3BvcnQ7CiYjNDM7CS8qIFRoZSBNUiBjYW4gb3V0bGl2ZSBpdHMgc29ja2V0OiBhIHNvY2tldCByZWZlcmVuY2UgaXMgaGVsZAomIzQzOwkgKiB1bnRpbCB0aGUgZmluYWwga3JlZiBpcyBkcm9wcGVkIGluIF9fcmRzX3B1dF9tcl9maW5hbCgpLgomIzQzOwkgKi8KIAltci0mZ3Q7cl9zb2NrID0gcnM7CiYjNDM7CXNvY2tfaG9sZChyZHNfcnNfdG9fc2socnMpKTsKIAogCWlmIChhcmdzLSZndDtmbGFncyAmYW1wOyBSRFNfUkRNQV9VU0VfT05DRSkKIAkJbXItJmd0O3JfdXNlX29uY2UgPSAxOwpAQCAtNDgzLDIyICYjNDM7NDg4LDM2IEBAIHZvaWQgcmRzX3JkbWFfdW51c2Uoc3RydWN0IHJkc19zb2NrICpycywgdTMyIHJfa2V5LCBpbnQgZm9yY2UpCiAJCWtyZWZfcHV0KCZhbXA7bXItJmd0O3Jfa3JlZiwgX19yZHNfcHV0X21yX2ZpbmFsKTsKIH0KIAotdm9pZCByZHNfcmRtYV9mcmVlX29wKHN0cnVjdCBybV9yZG1hX29wICpybykKJiM0Mzt2b2lkIHJkc19yZG1hX29wX3VucGluX3BhZ2VzKHN0cnVjdCBybV9yZG1hX29wICpybykKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcm8tJmd0O29wX25lbnRzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBzZ19wYWdlKCZhbXA7cm8tJmd0O29wX3NnW2ldKTsKJiM0MzsKJiM0MzsJCS8qIE1hcmsgcGFnZSBkaXJ0eSBpZiBpdCB3YXMgcG9zc2libHkgbW9kaWZpZWQsIHdoaWNoCiYjNDM7CQkgKiBpcyB0aGUgY2FzZSBmb3IgYSBSRE1BX1JFQUQgd2hpY2ggY29waWVzIGZyb20gcmVtb3RlCiYjNDM7CQkgKiB0byBsb2NhbCBtZW1vcnkKJiM0MzsJCSAqLwomIzQzOwkJdW5waW5fdXNlcl9wYWdlc19kaXJ0eV9sb2NrKCZhbXA7cGFnZSwgMSwgIXJvLSZndDtvcF93cml0ZSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCByZHNfcmRtYV9mcmVlX29wKHN0cnVjdCBybV9yZG1hX29wICpybykKJiM0Mzt7CiAJaWYgKHJvLSZndDtvcF9vZHBfbXIpIHsKIAkJa3JlZl9wdXQoJmFtcDtyby0mZ3Q7b3Bfb2RwX21yLSZndDtyX2tyZWYsIF9fcmRzX3B1dF9tcl9maW5hbCk7CiYjNDM7CX0gZWxzZSBpZiAoaW5fdGFzaygpIHx8IHJvLSZndDtvcF93cml0ZSkgewomIzQzOwkJLyogQW4gUkRNQSB3cml0ZSYjMzk7cyBwYWdlcyBhcmUgb25seSByZWFkIGJ5IHRoZSByZW1vdGUKJiM0MzsJCSAqIHNpZGU7IHVucGlubmluZyB3aXRob3V0IGRpcnR5aW5nIGRvZXMgbm90IHNsZWVwLgomIzQzOwkJICovCiYjNDM7CQlyZHNfcmRtYV9vcF91bnBpbl9wYWdlcyhybyk7CiAJfSBlbHNlIHsKLQkJZm9yIChpID0gMDsgaSAmbHQ7IHJvLSZndDtvcF9uZW50czsgaSYjNDM7JiM0MzspIHsKLQkJCXN0cnVjdCBwYWdlICpwYWdlID0gc2dfcGFnZSgmYW1wO3JvLSZndDtvcF9zZ1tpXSk7Ci0KLQkJCS8qIE1hcmsgcGFnZSBkaXJ0eSBpZiBpdCB3YXMgcG9zc2libHkgbW9kaWZpZWQsIHdoaWNoCi0JCQkgKiBpcyB0aGUgY2FzZSBmb3IgYSBSRE1BX1JFQUQgd2hpY2ggY29waWVzIGZyb20gcmVtb3RlCi0JCQkgKiB0byBsb2NhbCBtZW1vcnkKLQkJCSAqLwotCQkJdW5waW5fdXNlcl9wYWdlc19kaXJ0eV9sb2NrKCZhbXA7cGFnZSwgMSwgIXJvLSZndDtvcF93cml0ZSk7Ci0JCX0KJiM0MzsJCS8qIERpcnR5aW5nIHRoZSBwYWdlcyBvbiB1bnBpbiBjYW4gc2xlZXA7IGxlYXZlIHRoZW0KJiM0MzsJCSAqIHBpbm5lZCBhbmQgaGF2ZSByZHNfbWVzc2FnZV9wdXQoKSBmaW5pc2ggdGhlIHVucGluCiYjNDM7CQkgKiBmcm9tIHByb2Nlc3MgY29udGV4dC4KJiM0MzsJCSAqLwomIzQzOwkJcm8tJmd0O29wX3VucGluX2RlZmVycmVkID0gMTsKIAl9CiAKIAlrZnJlZShyby0mZ3Q7b3Bfbm90aWZpZXIpOwpAQCAtNTA3LDcgJiM0Mzs1MjYsNyBAQCB2b2lkIHJkc19yZG1hX2ZyZWVfb3Aoc3RydWN0IHJtX3JkbWFfb3AgKnJvKQogCXJvLSZndDtvcF9vZHBfbXIgPSBOVUxMOwogfQogCi12b2lkIHJkc19hdG9taWNfZnJlZV9vcChzdHJ1Y3Qgcm1fYXRvbWljX29wICphbykKJiM0Mzt2b2lkIHJkc19hdG9taWNfb3BfdW5waW5fcGFnZShzdHJ1Y3Qgcm1fYXRvbWljX29wICphbykKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHNnX3BhZ2UoYW8tJmd0O29wX3NnKTsKIApAQCAtNTE1LDYgJiM0Mzs1MzQsMTkgQEAgdm9pZCByZHNfYXRvbWljX2ZyZWVfb3Aoc3RydWN0IHJtX2F0b21pY19vcCAqYW8pCiAJICogaXMgdGhlIGNhc2UgZm9yIGEgUkRNQV9SRUFEIHdoaWNoIGNvcGllcyBmcm9tIHJlbW90ZQogCSAqIHRvIGxvY2FsIG1lbW9yeSAqLwogCXVucGluX3VzZXJfcGFnZXNfZGlydHlfbG9jaygmYW1wO3BhZ2UsIDEsIHRydWUpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHJkc19hdG9taWNfZnJlZV9vcChzdHJ1Y3Qgcm1fYXRvbWljX29wICphbykKJiM0Mzt7CiYjNDM7CWlmIChpbl90YXNrKCkpIHsKJiM0MzsJCXJkc19hdG9taWNfb3BfdW5waW5fcGFnZShhbyk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKiBEaXJ0eWluZyB0aGUgcGFnZSBvbiB1bnBpbiBjYW4gc2xlZXA7IGxlYXZlIGl0CiYjNDM7CQkgKiBwaW5uZWQgYW5kIGhhdmUgcmRzX21lc3NhZ2VfcHV0KCkgZmluaXNoIHRoZSB1bnBpbgomIzQzOwkJICogZnJvbSBwcm9jZXNzIGNvbnRleHQuCiYjNDM7CQkgKi8KJiM0MzsJCWFvLSZndDtvcF91bnBpbl9kZWZlcnJlZCA9IDE7CiYjNDM7CX0KIAogCWtmcmVlKGFvLSZndDtvcF9ub3RpZmllcik7CiAJYW8tJmd0O29wX25vdGlmaWVyID0gTlVMTDsKQEAgLTczMiw3ICYjNDM7NzY0LDEyIEBAIGludCByZHNfY21zZ19yZG1hX2FyZ3Moc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSwKIAkJCVJCX0NMRUFSX05PREUoJmFtcDtsb2NhbF9vZHBfbXItJmd0O3JfcmJfbm9kZSk7CiAJCQlrcmVmX2luaXQoJmFtcDtsb2NhbF9vZHBfbXItJmd0O3Jfa3JlZik7CiAJCQlsb2NhbF9vZHBfbXItJmd0O3JfdHJhbnMgPSBycy0mZ3Q7cnNfdHJhbnNwb3J0OwomIzQzOwkJCS8qIFRoZSBNUiBjYW4gb3V0bGl2ZSBpdHMgc29ja2V0OiBhIHNvY2tldAomIzQzOwkJCSAqIHJlZmVyZW5jZSBpcyBoZWxkIHVudGlsIHRoZSBmaW5hbCBrcmVmIGlzCiYjNDM7CQkJICogZHJvcHBlZCBpbiBfX3Jkc19wdXRfbXJfZmluYWwoKS4KJiM0MzsJCQkgKi8KIAkJCWxvY2FsX29kcF9tci0mZ3Q7cl9zb2NrID0gcnM7CiYjNDM7CQkJc29ja19ob2xkKHJkc19yc190b19zayhycykpOwogCQkJbG9jYWxfb2RwX21yLSZndDtyX3RyYW5zX3ByaXZhdGUgPQogCQkJCXJzLSZndDtyc190cmFuc3BvcnQtJmd0O2dldF9tcigKIAkJCQkJTlVMTCwgMCwgcnMsICZhbXA7bG9jYWxfb2RwX21yLSZndDtyX2tleSwgTlVMTCwKQEAgLTc0MSw3ICYjNDM7Nzc4LDkgQEAgaW50IHJkc19jbXNnX3JkbWFfYXJncyhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLAogCQkJCXJldCA9IFBUUl9FUlIobG9jYWxfb2RwX21yLSZndDtyX3RyYW5zX3ByaXZhdGUpOwogCQkJCXJkc2RlYnVnKCYjMzQ7Z2V0X21yIHJldCAlZCAlcFwmIzM0OyYjMzQ7LCByZXQsCiAJCQkJCSBsb2NhbF9vZHBfbXItJmd0O3JfdHJhbnNfcHJpdmF0ZSk7Ci0JCQkJa2ZyZWUobG9jYWxfb2RwX21yKTsKJiM0MzsJCQkJbG9jYWxfb2RwX21yLSZndDtyX3RyYW5zX3ByaXZhdGUgPSBOVUxMOwomIzQzOwkJCQlrcmVmX3B1dCgmYW1wO2xvY2FsX29kcF9tci0mZ3Q7cl9rcmVmLAomIzQzOwkJCQkJIF9fcmRzX3B1dF9tcl9maW5hbCk7CiAJCQkJcmV0ID0gLUVPUE5PVFNVUFA7CiAJCQkJZ290byBvdXRfcGFnZXM7CiAJCQl9CmRpZmYgLS1naXQgYS9uZXQvcmRzL3Jkcy5oIGIvbmV0L3Jkcy9yZHMuaAppbmRleCA2ZTA3OTBlNGI1NzAzLi4yZGI0OTU3M2RhY2Q1IDEwMDY0NAotLS0gYS9uZXQvcmRzL3Jkcy5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvcmRzLmgKQEAgLTMyMCw3ICYjNDM7MzIwLDEwIEBAIHN0cnVjdCByZHNfbXIgewogCXVuc2lnbmVkIGludAkJcl9pbnZhbGlkYXRlOjE7CiAJdW5zaWduZWQgaW50CQlyX3dyaXRlOjE7CiAKLQlzdHJ1Y3QgcmRzX3NvY2sJCSpyX3NvY2s7IC8qIGJhY2sgcG9pbnRlciB0byB0aGUgc29ja2V0IHRoYXQgb3ducyB1cyAqLwomIzQzOwlzdHJ1Y3QgcmRzX3NvY2sJCSpyX3NvY2s7IC8qIHNvY2tldCB0aGF0IG93bnMgdXM7IGNvdW50ZWQKJiM0MzsJCQkJCSAgKiByZWZlcmVuY2UsIGRyb3BwZWQgYnkKJiM0MzsJCQkJCSAgKiBfX3Jkc19wdXRfbXJfZmluYWwoKQomIzQzOwkJCQkJICAqLwogCXN0cnVjdCByZHNfdHJhbnNwb3J0CSpyX3RyYW5zOwogCXZvaWQJCQkqcl90cmFuc19wcml2YXRlOwogfTsKQEAgLTQ0NSw2ICYjNDM7NDQ4LDEyIEBAIHN0cnVjdCByZHNfbWVzc2FnZSB7CiAKIAl2b2lkCQkJKm1fZmluYWxfb3A7CiAKJiM0MzsJLyogVW5waW5zIHRoZSBvcHMmIzM5OyB1c2VyIHBhZ2VzIGFuZCBmcmVlcyB0aGUgbWVzc2FnZSBmcm9tCiYjNDM7CSAqIHByb2Nlc3MgY29udGV4dCB3aGVuIHRoZSBmaW5hbCBwdXQgaGFwcGVucyBpbiBhdG9taWMKJiM0MzsJICogY29udGV4dDogZGlydHlpbmcgdGhlIHBhZ2VzIG9uIHVucGluIGNhbiBzbGVlcC4KJiM0MzsJICovCiYjNDM7CXN0cnVjdCB3b3JrX3N0cnVjdAltX3VucGluX3dvcms7CiYjNDM7CiAJc3RydWN0IHsKIAkJc3RydWN0IHJtX2F0b21pY19vcCB7CiAJCQlpbnQJCQlvcF90eXBlOwpAQCAtNDY4LDYgJiM0Mzs0NzcsNyBAQCBzdHJ1Y3QgcmRzX21lc3NhZ2UgewogCQkJdW5zaWduZWQgaW50CQlvcF9tYXBwZWQ6MTsKIAkJCXVuc2lnbmVkIGludAkJb3Bfc2lsZW50OjE7CiAJCQl1bnNpZ25lZCBpbnQJCW9wX2FjdGl2ZToxOwomIzQzOwkJCXVuc2lnbmVkIGludAkJb3BfdW5waW5fZGVmZXJyZWQ6MTsKIAkJCXN0cnVjdCBzY2F0dGVybGlzdAkqb3Bfc2c7CiAJCQlzdHJ1Y3QgcmRzX25vdGlmaWVyCSpvcF9ub3RpZmllcjsKIApAQCAtNDgzLDYgJiM0Mzs0OTMsNyBAQCBzdHJ1Y3QgcmRzX21lc3NhZ2UgewogCQkJdW5zaWduZWQgaW50CQlvcF9tYXBwZWQ6MTsKIAkJCXVuc2lnbmVkIGludAkJb3Bfc2lsZW50OjE7CiAJCQl1bnNpZ25lZCBpbnQJCW9wX2FjdGl2ZToxOwomIzQzOwkJCXVuc2lnbmVkIGludAkJb3BfdW5waW5fZGVmZXJyZWQ6MTsKIAkJCXVuc2lnbmVkIGludAkJb3BfYnl0ZXM7CiAJCQl1bnNpZ25lZCBpbnQJCW9wX25lbnRzOwogCQkJdW5zaWduZWQgaW50CQlvcF9jb3VudDsKQEAgLTk3Miw2ICYjNDM7OTgzLDggQEAgaW50IHJkc19jbXNnX3JkbWFfbWFwKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sCiAJCQkgIHN0cnVjdCBjbXNnaGRyICpjbXNnKTsKIHZvaWQgcmRzX3JkbWFfZnJlZV9vcChzdHJ1Y3Qgcm1fcmRtYV9vcCAqcm8pOwogdm9pZCByZHNfYXRvbWljX2ZyZWVfb3Aoc3RydWN0IHJtX2F0b21pY19vcCAqYW8pOwomIzQzO3ZvaWQgcmRzX3JkbWFfb3BfdW5waW5fcGFnZXMoc3RydWN0IHJtX3JkbWFfb3AgKnJvKTsKJiM0Mzt2b2lkIHJkc19hdG9taWNfb3BfdW5waW5fcGFnZShzdHJ1Y3Qgcm1fYXRvbWljX29wICphbyk7CiB2b2lkIHJkc19yZG1hX3NlbmRfY29tcGxldGUoc3RydWN0IHJkc19tZXNzYWdlICpybSwgaW50IHdjX3N0YXR1cyk7CiB2b2lkIHJkc19hdG9taWNfc2VuZF9jb21wbGV0ZShzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLCBpbnQgd2Nfc3RhdHVzKTsKIGludCByZHNfY21zZ19hdG9taWMoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSwKZGlmZiAtLWdpdCBhL25ldC9yZHMvc2VuZC5jIGIvbmV0L3Jkcy9zZW5kLmMKaW5kZXggNjhiZTFiZjBlMGFkZi4uN2U0OGY2NGRmYWE2NyAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9zZW5kLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Jkcy9zZW5kLmMKQEAgLTMzOSw5ICYjNDM7MzM5LDIxIEBAIGludCByZHNfc2VuZF94bWl0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCkKIAkJCSAgICAocm0tJmd0O3JkbWEub3BfYWN0aXZlICZhbXA7JmFtcDsKIAkJCSAgICB0ZXN0X2JpdChSRFNfTVNHX1JFVFJBTlNNSVRURUQsICZhbXA7cm0tJmd0O21fZmxhZ3MpKSkgewogCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7Y3AtJmd0O2NwX2xvY2ssIGZsYWdzKTsKLQkJCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFJEU19NU0dfT05fQ09OTiwgJmFtcDtybS0mZ3Q7bV9mbGFncykpCi0JCQkJCWxpc3RfbW92ZSgmYW1wO3JtLSZndDttX2Nvbm5faXRlbSwgJmFtcDt0b19iZV9kcm9wcGVkKTsKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Y3AtJmd0O2NwX2xvY2ssIGZsYWdzKTsKJiM0MzsJCQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSRFNfTVNHX09OX0NPTk4sCiYjNDM7CQkJCQkJICAgICAgICZhbXA7cm0tJmd0O21fZmxhZ3MpKSB7CiYjNDM7CQkJCQkvKiBvdXIgcmVmIGlzIHB1dCBhZnRlciB0aGUgYmF0Y2ggKi8KJiM0MzsJCQkJCWxpc3RfbW92ZSgmYW1wO3JtLSZndDttX2Nvbm5faXRlbSwKJiM0MzsJCQkJCQkgICZhbXA7dG9fYmVfZHJvcHBlZCk7CiYjNDM7CQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Y3AtJmd0O2NwX2xvY2ssCiYjNDM7CQkJCQkJCSAgICAgICBmbGFncyk7CiYjNDM7CQkJCX0gZWxzZSB7CiYjNDM7CQkJCQkvKiBhbHJlYWR5IG9mZiB0aGUgY29ubiBsaXN0OyBkcm9wCiYjNDM7CQkJCQkgKiB0aGUgcmVmIHRha2VuIGFib3ZlIG91cnNlbHZlcwomIzQzOwkJCQkJICovCiYjNDM7CQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Y3AtJmd0O2NwX2xvY2ssCiYjNDM7CQkJCQkJCSAgICAgICBmbGFncyk7CiYjNDM7CQkJCQlyZHNfbWVzc2FnZV9wdXQocm0pOwomIzQzOwkJCQl9CiAJCQkJY29udGludWU7CiAJCQl9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTM6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY0OAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDY1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFJEUyBQYXRjaGVzOiBBIFRhcmdldGVkIEFwcHJvYWNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGFmZmVjdGluZyB0aGUgUkRTIHN1YnN5c3RlbSBpbiB0aGUgTGludXgga2VybmVsLCBzcGVjaWZpY2FsbHkgdHdlYWtpbmcgaG93IG1lbW9yeSByZWdpb25zIChNUnMpIGFuZCBSRE1BIG9wZXJhdGlvbnMgYXJlIG1hbmFnZWQuICBUaGUga2V5IGNoYW5nZSBoZXJlIHNlZW1zIHRvIGJlIGRlZmVycmluZyB1c2VyIHBhZ2UgdW5waW5uaW5nIHRvIGEgd29ya3F1ZXVlIHdoZW4gdGhlIGZpbmFsICYjMzQ7cHV0JiMzNDsgaGFwcGVucyBhdG9taWNhbGx5LiBUaGlzIGlzIGltcG9ydGFudCB0byBub3RlIHNpbmNlIGRpcnR5aW5nIHBhZ2VzIG9uIHVucGluIGNhbiBjYXVzZSBzbGVlcGluZywgd2hpY2ggaXMgYSBiaWcgbm8tbm8gaW4gYXRvbWljIGNvbnRleHRzLiBUaGV5JiMzOTt2ZSBhbHNvIGFkZGVkIGEgc29ja2V0IHJlZmVyZW5jZSBob2xkIHdoZW4gYW4gTVIgaXMgY3JlYXRlZCB0byBtYWtlIHN1cmUgdGhlIHNvY2tldCBvdXRsaXZlcyB0aGUgTVIgLSBzbWFydC4KCk5vdywgc2hvdWxkIHdlIGJvdGhlciBmdXp6aW5nIHRoaXM/IERlZmluaXRlbHkuIFRoZSBwYXRjaCB0b3VjaGVzIGNyaXRpY2FsIFJEUyBjb2RlOiBgbmV0L3Jkcy9pYl9yZG1hLmNgLCBgbmV0L3Jkcy9tZXNzYWdlLmNgLCBgbmV0L3Jkcy9yZG1hLmNgLCBgbmV0L3Jkcy9yZHMuaGAsIGFuZCBgbmV0L3Jkcy9zZW5kLmNgLiAgV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgY29yZSBSRE1BIGhhbmRsaW5nIGFuZCBhdG9taWMgb3BlcmF0aW9ucyDigJMgZnVuZGFtZW50YWwgc3R1ZmYuICBSRFMgaXMgYWxzbyBhIG5ldHdvcmsgcHJvdG9jb2wgKEFGX1JEUykgdGhhdCYjMzk7cyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgaXQgYSBwcmltZSB0YXJnZXQuICBTbywgYFdvcnRoRnV6emluZz10cnVlYC4KCk5leHQsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgZnVuY3Rpb25zIHRvIGZvY3VzIG91ciBmdXp6aW5nIGVmZm9ydHMgb24uICBUaGUgcGF0Y2ggaGFzIG1vZGlmaWVkIHF1aXRlIGEgZmV3LCBidXQgYSBmZXcgc3RhbmQgb3V0IGFzIGdvb2QgY2FuZGlkYXRlcyBmb3IgdGFyZ2V0ZWQgZnV6emluZzoKCiogICBgX19yZHNfaWJfdGVhcmRvd25fbXJgCiogICBgcmRzX21lc3NhZ2VfcHVyZ2VgCiogICBgcmRzX21lc3NhZ2VfdW5waW5fd29ya2VyYCAodGhpcyBpcyBuZXcsIHNvIGRlZmluaXRlbHkgd29ydGggYSBsb29rKQoqICAgYHJkc19tZXNzYWdlX3B1dGAKKiAgIGBfX3Jkc19wdXRfbXJfZmluYWxgCiogICBgX19yZHNfcmRtYV9tYXBgCiogICBgcmRzX3JkbWFfdW51c2VgCiogICBgcmRzX3JkbWFfb3BfdW5waW5fcGFnZXNgICh0aGlzIGlzIGFsc28gbmV3LCBzbyB3b3J0aCBhIGxvb2spCiogICBgcmRzX3JkbWFfZnJlZV9vcGAKKiAgIGByZHNfYXRvbWljX29wX3VucGluX3BhZ2VgIChhZ2FpbiwgdGhpcyBpcyBuZXcpCiogICBgcmRzX2F0b21pY19mcmVlX29wYAoqICAgYHJkc19jbXNnX3JkbWFfYXJnc2AKKiAgIGByZHNfc2VuZF94bWl0YAoKSSB3YW50IHRvIHByaW9yaXRpemUgZWl0aGVyIGVudHJ5IHBvaW50cyBvciBtYWpvciBmdW5jdGlvbnMgYWZmZWN0ZWQgYnkgdGhpcyBwYXRjaC4gV2hpbGUgYHJkc19tZXNzYWdlX3B1dGAgaXMgaW4gdGhlIGxpc3QsIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGEgdG9uIG9mIHBsYWNlcywgc28gSSBuZWVkIHRvIGJlIG1vcmUgc3RyYXRlZ2ljLiBgcmRzX3NlbmRtc2dgIGlzIGxpa2VseSB0aGUga2V5IGVudHJ5IHBvaW50IGZvciBtZXNzYWdlIHNlbmRpbmcsIGNyZWF0aW5nIGFuZCBtYXBwaW5nIHRoZXNlIFJETUEgb3BlcmF0aW9ucy4gIGByZHNfY21zZ19yZG1hX2FyZ3NgIGFuZCBgcmRzX2Ntc2dfcmRtYV9tYXBgIGFyZSBhbHNvIGNyaXRpY2FsLCBhcyB0aGV5JiMzOTtyZSBjYWxsZWQgZnJvbSBgcmRzX3NlbmRtc2dgIHRvIGhhbmRsZSBjb250cm9sIG1lc3NhZ2VzLiBgcmRzX3NlbmRfeG1pdGAgaXMgYWxzbyB3b3J0aCBhIGxvb2sgc2luY2UgaXQmIzM5O3MgdGhlIHRyYW5zbWl0IHdvcmtlci4gQWRkaXRpb25hbGx5LCBgcmRzX3JkbWFfZnJlZV9vcGAgYW5kIGByZHNfYXRvbWljX2ZyZWVfb3BgIGFyZSBjYWxsZWQgZHVyaW5nIG1lc3NhZ2UgcHVyZ2Ugc28gdGhleSYjMzk7cmUgaW1wb3J0YW50IGZvciBjbGVhbnVwIGFuZCBtZW1vcnkgaGFuZGxpbmcgYW5kIGFyZSBpbXBvcnRhbnQuIGBfX3Jkc19yZG1hX21hcGAgaXMgYWxzbyBhIGtleSBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIGZyb20gYHJkc19jbXNnX3JkbWFfbWFwYCBhbmQgYHJkc19nZXRfbXJgLiBGaW5hbGx5LCBgcmRzX2dldF9tcmAgYW5kIGByZHNfZnJlZV9tcmAgYXJlIGJvdGggZW50cnkgcG9pbnRzIHZpYSBgc2V0c29ja29wdGAgY2FsbHMuCgpRdWljayBjaGVjayBvZiBgbmV0L3Jkcy9LY29uZmlnYCBjb25maXJtcyB0aGF0IFJEUyAoYENPTkZJR19SRFNgKSwgUkRNQSAoYENPTkZJR19SRFNfUkRNQWApLCBUQ1AgKGBDT05GSUdfUkRTX1RDUGApLCBhbmQgZGVidWcgKGBDT05GSUdfUkRTX0RFQlVHYCkgYXJlIGFsbCBlbmFibGVkLiAgR29vZCwgaXQmIzM5O3MgYWxsIHRoZXJlLgoKQWxyaWdodCwgdGltZSB0byBkZXBsb3kgdGhlIGZ1enppbmcgdG9vbHMgYW5kIGdldCBzdGFydGVkLiBUaGlzIGxvb2tzIGxpa2UgYSBwcm9taXNpbmcgdGFyZ2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDEzOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBSRFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcmRzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9LY29uZmlnLTItXG5uZXQvcmRzL0tjb25maWc6Mzpjb25maWcgUkRTXG5uZXQvcmRzL0tjb25maWctNC1cdHRyaXN0YXRlIFwmIzM0O1RoZSBSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzIFByb3RvY29sXCYjMzQ7XG4tLVxubmV0L3Jkcy9LY29uZmlnLTktXG5uZXQvcmRzL0tjb25maWc6MTA6Y29uZmlnIFJEU19SRE1BXG5uZXQvcmRzL0tjb25maWctMTEtXHR0cmlzdGF0ZSBcJiMzNDtSRFMgb3ZlciBJbmZpbmliYW5kXCYjMzQ7XG4tLVxubmV0L3Jkcy9LY29uZmlnLTE2LVxubmV0L3Jkcy9LY29uZmlnOjE3OmNvbmZpZyBSRFNfVENQXG5uZXQvcmRzL0tjb25maWctMTgtXHR0cmlzdGF0ZSBcJiMzNDtSRFMgb3ZlciBUQ1BcJiMzNDtcbi0tXG5uZXQvcmRzL0tjb25maWctMjQtXG5uZXQvcmRzL0tjb25maWc6MjU6Y29uZmlnIFJEU19ERUJVR1xubmV0L3Jkcy9LY29uZmlnLTI2LVx0Ym9vbCBcJiMzNDtSRFMgZGVidWdnaW5nIG1lc3NhZ2VzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTM6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM0MAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgUkRTIGFuZCBSRE1BIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBSRFNgIGFuZCBhbHNvIG5lZWQgdG8gY29uc2lkZXIgYFJEU19SRE1BYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZXNlIHR3bywgZXNwZWNpYWxseSBzaW5jZSB0aGUgY29kZSByZWZlcmVuY2VzIGBuZXQvcmRzL2liX3JkbWEuY2AsIHdoaWNoIGRpcmVjdGx5IHRpZXMgaW50byBSRE1BIGxvZ2ljLiBJdCBsb29rcyBsaWtlIGBuZXQvcmRzL2liX3JkbWEuY2AgaXMgb25seSBjb21waWxlZCB3aGVuIGBDT05GSUdfUkRTX1JETUFgIGlzIGFjdGl2ZSwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3cgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBgbmV0L3Jkcy9NYWtlZmlsZWAgdG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBhbmQgZGVwZW5kZW5jaWVzLiBUaGF0IHdpbGwgbGlrZWx5IGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTM6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWJfcmRtYSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yZHMvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9NYWtlZmlsZT04PXJkc19yZG1hLXkgOj1cdHJkbWFfdHJhbnNwb3J0Lm8gXFxcbm5ldC9yZHMvTWFrZWZpbGUtOS1cdFx0XHRpYi5vIGliX2NtLm8gaWJfcmVjdi5vIGliX3JpbmcubyBpYl9zZW5kLm8gaWJfc3RhdHMubyBcXFxubmV0L3Jkcy9NYWtlZmlsZToxMDpcdFx0XHRpYl9zeXNjdGwubyBpYl9yZG1hLm8gaWJfZnJtci5vXG5uZXQvcmRzL01ha2VmaWxlLTExLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDEzOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3MDIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0LgoKKipBbmFseXppbmcgdGhlIFJEUy1SRE1BIEJ1aWxkIFByb2Nlc3MqKgoKUmlnaHQsIHNvIGByZHNfcmRtYS15YCBpcyBkZWZpbml0ZWx5IG9ubHkgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkIGlmIGBDT05GSUdfUkRTX1JETUFgIGlzIHNldC4gVGhhdCYjMzk7cyBnb29kLCBwcmVkaWN0YWJsZSBiZWhhdmlvci4gTm93LCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gYW5kIHNlZSBob3cgaXQmIzM5O3MgYWxsIGhvb2tlZCB0b2dldGhlciwgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBgbmV0L3Jkcy9NYWtlZmlsZWAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG1hZ2ljIHVzdWFsbHkgaGFwcGVucyBmb3IgdGhpcyBraW5kIG9mIHRoaW5nIHdpdGhpbiB0aGUgUkRTIGNvZGViYXNlLiBJJiMzOTttIGFzc3VtaW5nIGl0JiMzOTtsbCBoYXZlIHRoZSBzdGFuZGFyZCBgb2JqLSQoQ09ORklHX1JEU19SRE1BKSAmIzQzOz0gcmRzX3JkbWEub2AgdHlwZSBvZiBsaW5lLCBidXQgYSBxdWljayBsb29rIGlzIGFsd2F5cyBwcnVkZW50LiBOZWVkIHRvIGNvbmZpcm0gdGhhdCYjMzk7cyB0aGUgb25seSBkZXBlbmRlbmNlIGFzIHdlbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTM6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmRzX3JkbWEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcmRzL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yZHMvTWFrZWZpbGU9Mz1yZHMteSA6PVx0YWZfcmRzLm8gYmluZC5vIGNvbmcubyBjb25uZWN0aW9uLm8gaW5mby5vIG1lc3NhZ2UubyAgIFxcXG4tLVxubmV0L3Jkcy9NYWtlZmlsZS02LVxubmV0L3Jkcy9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19SRFNfUkRNQSkgJiM0Mzs9IHJkc19yZG1hLm9cbm5ldC9yZHMvTWFrZWZpbGU6ODpyZHNfcmRtYS15IDo9XHRyZG1hX3RyYW5zcG9ydC5vIFxcXG5uZXQvcmRzL01ha2VmaWxlLTktXHRcdFx0aWIubyBpYl9jbS5vIGliX3JlY3YubyBpYl9yaW5nLm8gaWJfc2VuZC5vIGliX3N0YXRzLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDg3CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJEUyBSRE1BIENvbmZpZ3VyYXRpb24gQXNzZXNzbWVudCoqCgpPa2F5LCBzbyB0aGUgcGF0Y2ggSSYjMzk7bSBsb29raW5nIGF0IHJlcXVpcmVzIGBDT05GSUdfUkRTX1JETUFgLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZSwgbm8gc3VycHJpc2VzIHRoZXJlLiBCdXQsIEkgbmVlZCB0byBjb25zaWRlciBgQ09ORklHX1JEU19UQ1BgLiBJdCYjMzk7cyBnZW5lcmFsbHkgYSBnb29kIHByYWN0aWNlIHRvIGhhdmUgdGhlIFRDUCBvcHRpb24gZW5hYmxlZCwgZXNwZWNpYWxseSBmb3IgdGVzdGluZyBSRFMgb3ZlciBUQ1AgYXMgYW4gYWx0ZXJuYXRpdmUgdHJhbnNwb3J0LiBIb3dldmVyLCB0aGlzIHBhdGNoIHNwZWNpZmljYWxseSBpbnRlcmFjdHMgd2l0aCBgaWJfcmRtYS5jYCwgd2hpY2ggaXMgY2xlYXJseSBwYXJ0IG9mIHRoZSBgUkRTX1JETUFgIGNvbmZpZ3VyYXRpb24uCgpMZXQmIzM5O3MgcXVpY2tseSB2ZXJpZnkgbXkgdW5kZXJzdGFuZGluZzogZmlsZXMgbGlrZSBgbmV0L3Jkcy9tZXNzYWdlLmNgLCBgbmV0L3Jkcy9yZG1hLmNgLCBhbmQgYG5ldC9yZHMvc2VuZC5jYCBhcmUgYnVpbHQgYXMgcGFydCBvZiBgcmRzLXlgLCB3aGljaCBmYWxscyB1bmRlciB0aGUgdW1icmVsbGEgb2YgYENPTkZJR19SRFNgLiBHb29kLCB0aGF0IG1ha2VzIHNlbnNlLiBTbywgYFJEU2AgaXMgYWx3YXlzIGVuYWJsZWQgd2hlbiB3ZSBhcmUgbG9va2luZyBhdCBhbnkgb2YgdGhvc2UgZmlsZXMuCgpOb3csIGxldCBtZSBqdXN0IGRvdWJsZSBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIGZvciBgUkRTX1JETUFgIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Jkcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yZHMvS2NvbmZpZz0zPWNvbmZpZyBSRFNcbm5ldC9yZHMvS2NvbmZpZy00LVx0dHJpc3RhdGUgXCYjMzQ7VGhlIFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgUHJvdG9jb2xcJiMzNDtcbm5ldC9yZHMvS2NvbmZpZzo1Olx0ZGVwZW5kcyBvbiBJTkVUXG5uZXQvcmRzL0tjb25maWctNi1cdGhlbHBcbi0tXG5uZXQvcmRzL0tjb25maWc9MTA9Y29uZmlnIFJEU19SRE1BXG5uZXQvcmRzL0tjb25maWctMTEtXHR0cmlzdGF0ZSBcJiMzNDtSRFMgb3ZlciBJbmZpbmliYW5kXCYjMzQ7XG5uZXQvcmRzL0tjb25maWc6MTI6XHRkZXBlbmRzIG9uIFJEUyBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORCBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORF9BRERSX1RSQU5TXG5uZXQvcmRzL0tjb25maWctMTMtXHRoZWxwXG4tLVxubmV0L3Jkcy9LY29uZmlnPTE3PWNvbmZpZyBSRFNfVENQXG5uZXQvcmRzL0tjb25maWctMTgtXHR0cmlzdGF0ZSBcJiMzNDtSRFMgb3ZlciBUQ1BcJiMzNDtcbm5ldC9yZHMvS2NvbmZpZzoxOTpcdGRlcGVuZHMgb24gUkRTXG5uZXQvcmRzL0tjb25maWc6MjA6XHRkZXBlbmRzIG9uIElQVjYgfHwgIUlQVjZcbm5ldC9yZHMvS2NvbmZpZy0yMS1cdGhlbHBcbi0tXG5uZXQvcmRzL0tjb25maWc9MjU9Y29uZmlnIFJEU19ERUJVR1xubmV0L3Jkcy9LY29uZmlnLTI2LVx0Ym9vbCBcJiMzNDtSRFMgZGVidWdnaW5nIG1lc3NhZ2VzXCYjMzQ7XG5uZXQvcmRzL0tjb25maWc6Mjc6XHRkZXBlbmRzIG9uIFJEU1xubmV0L3Jkcy9LY29uZmlnLTI4LVx0ZGVmYXVsdCBuXG4tLVxubmV0L3Jkcy9LY29uZmlnPTMwPWNvbmZpZyBHQ09WX1BST0ZJTEVfUkRTXG5uZXQvcmRzL0tjb25maWctMzEtXHRib29sIFwmIzM0O0VuYWJsZSBHQ09WIHByb2ZpbGluZyBvbiBSRFNcJiMzNDtcbm5ldC9yZHMvS2NvbmZpZzozMjpcdGRlcGVuZHMgb24gR0NPVl9LRVJORUxcbm5ldC9yZHMvS2NvbmZpZy0zMy1cdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTM6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODgzNgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDM1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFuYWx5c2lzIG9mIHRoZSBSRFNfUkRNQSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgc2VlIHRoZSBkZXBlbmRlbmNpZXM6IGBSRFNfUkRNQWAgcmVsaWVzIGhlYXZpbHkgb24gYFJEU2AsIGBJTkZJTklCQU5EYCwgYW5kIGBJTkZJTklCQU5EX0FERFJfVFJBTlNgLiBMb2dpY2FsbHksIEkgbmVlZCB0byBpbmNsdWRlIGFsbCB0aG9zZSBpbiBteSBhbmFseXNpcywgc28gSSYjMzk7bGwgYmUgc3VyZSB0byBrZWVwIHRoZW0gaW4gbWluZC4KCk5vdywgdGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBpbnZvbHZlIGEgc2VyaWVzIG9mIGZ1bmN0aW9ucyB0aGF0IGFyZSBiZWluZyBtb2RpZmllZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHJlbGF0ZSB0byBlYWNoIG90aGVyIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgaG93IHRoZXkgbWlnaHQgYmUgdnVsbmVyYWJsZS4gRnJvbSBhIHF1aWNrIGdsYW5jZSwgdGhlIGZ1bmN0aW9ucyBiZWluZyBtb2RpZmllZCBhcmU6IGBfX3Jkc19pYl90ZWFyZG93bl9tcmAsIGByZHNfbWVzc2FnZV9wdXJnZWAsIGByZHNfbWVzc2FnZV91bnBpbl93b3JrZXJgLCBgcmRzX21lc3NhZ2VfcHV0YCwgYF9fcmRzX3B1dF9tcl9maW5hbGAsIGBfX3Jkc19yZG1hX21hcGAsIGByZHNfcmRtYV91bnVzZWAsIGByZHNfcmRtYV9vcF91bnBpbl9wYWdlc2AsIGByZHNfcmRtYV9mcmVlX29wYCwgYHJkc19hdG9taWNfb3BfdW5waW5fcGFnZWAsIGByZHNfYXRvbWljX2ZyZWVfb3BgLCBgcmRzX2Ntc2dfcmRtYV9hcmdzYCwgYW5kIGByZHNfc2VuZF94bWl0YC4gVGhhdCYjMzk7cyBhIGxvdCBvZiB0b3VjaCBwb2ludHMsIGFuZCB0aGV5IGFsbCBsb29rIGNyaXRpY2FsLgoKVGltZSB0byBjb25zaWRlciBlbnRyeSBwb2ludHMgZm9yIGZ1enppbmcuIGByZHNfc2VuZG1zZ2AgbG9va3MgcHJvbWlzaW5nIHNpbmNlIGl0IGNhbGxzIGByZHNfY21zZ19yZG1hX2FyZ3NgIGFuZCBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgbWVzc2FnZXMuIFRoZW4gdGhlcmUmIzM5O3MgYHJkc19yZWN2bXNnYDsgaXQgY291bGQgcG90ZW50aWFsbHkgdHJpZ2dlciBgbWVzc2FnZV9wdXRgIGxvZ2ljLiBgcmRzX3NldHNvY2tvcHRgIHNlZW1zIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IGhhbmRsZXMgTVIgKE1lbW9yeSBSZWdpb24pIGNyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGggb3B0aW9ucyBsaWtlIGBSRFNfR0VUX01SYCBhbmQgYFJEU19GUkVFX01SYC4gVGhpcyBpcyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBtZW1vcnkuIEZpbmFsbHksIGByZHNfc2VuZF94bWl0YCBhcHBlYXJzIHRvIGJlIGEga2V5IGZ1bmN0aW9uIGluIHRoZSB0cmFuc21pdCBwYXRoLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYHJkc19zZXRzb2Nrb3B0YCBkaXJlY3RseS4gSSBuZWVkIHRvIGNvbmZpcm0gaXRzIHJvbGUgaW4gTVIgbWFuYWdlbWVudCwgYW5kIEkmIzM5O2xsIGZpbmQgaXQgaW4gZWl0aGVyIGBuZXQvcmRzL2FmX3Jkcy5jYCBvciBgbmV0L3Jkcy9iaW5kLmNgLiBJJiMzOTttIHN0YXJ0aW5nIHRvIGdldCBhIGdvb2QgcGljdHVyZSBvZiB3aGVyZSBJIHNob3VsZCBmb2N1cyBteSBhdHRlbnRpb24sIGdpdmVuIG15IGV4cGVydGlzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTM6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmRzX3NldHNvY2tvcHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcmRzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcmRzL2FmX3Jkcy5jPTQwOT1zdGF0aWMgaW50IHJkc19yZWN2X3RyYWNrX2xhdGVuY3koc3RydWN0IHJkc19zb2NrICpycywgc29ja3B0cl90IG9wdHZhbCxcbi0tXG5uZXQvcmRzL2FmX3Jkcy5jLTQzNS1cbm5ldC9yZHMvYWZfcmRzLmM6NDM2OnN0YXRpYyBpbnQgcmRzX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbm5ldC9yZHMvYWZfcmRzLmMtNDM3LVx0XHRcdCAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcbi0tXG5uZXQvcmRzL2FmX3Jkcy5jPTY0Nj1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyByZHNfcHJvdG9fb3BzID0ge1xuLS1cbm5ldC9yZHMvYWZfcmRzLmMtNjU4LVx0LnNodXRkb3duID1cdHNvY2tfbm9fc2h1dGRvd24sXG5uZXQvcmRzL2FmX3Jkcy5jOjY1OTpcdC5zZXRzb2Nrb3B0ID1cdHJkc19zZXRzb2Nrb3B0LFxubmV0L3Jkcy9hZl9yZHMuYy02NjAtXHQuZ2V0c29ja29wdF9pdGVyID1cdHJkc19nZXRzb2Nrb3B0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTYxCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkFuYWx5emluZyB0aGUgYHJkc19zZXRzb2Nrb3B0YCBJbXBsZW1lbnRhdGlvbioqCgpSaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgY3JpdGljYWwgbG9vayBhdCB0aGUgYHJkc19zZXRzb2Nrb3B0YCBpbXBsZW1lbnRhdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgKG9yIHBvdGVudGlhbCBwcm9ibGVtcykgaGFwcGVuIHdoZW4gY29uZmlndXJpbmcgc29ja2V0IG9wdGlvbnMgd2l0aGluIHRoZSBSRFMgcHJvdG9jb2wgc3RhY2suIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBkZXNpZ25lZCwgd2hhdCBvcHRpb25zIGFyZSBoYW5kbGVkLCBob3cgdGhleSYjMzk7cmUgdmFsaWRhdGVkLCBhbmQgd2hhdCBpbXBhY3QgdGhleSBoYXZlIG9uIHRoZSB1bmRlcmx5aW5nIFJEUyBjb21tdW5pY2F0aW9uLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoaXMgaXMgb2Z0ZW4gYSBkZWxpY2F0ZSBhcmVhIHdoZXJlIHN1YnRsZSBidWdzIGNhbiBsZWFkIHRvIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIG9yIGV2ZW4gc3lzdGVtIGluc3RhYmlsaXR5LiBJJiMzOTtsbCBiZSBwYXJ0aWN1bGFybHkgZm9jdXNlZCBvbiByZXNvdXJjZSBtYW5hZ2VtZW50LCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBhbmQgZXJyb3IgaGFuZGxpbmcuIEkmIzM5O2xsIG5lZWQgdG8gZGlzc2VjdCB0aGUgY29kZSBjYXJlZnVsbHksIGNvbnNpZGVyIHRoZSBjb250ZXh0IG9mIHRoZSBjYWxsaW5nIGVudmlyb25tZW50LCBhbmQgbG9vayBmb3IgYW55IGFzc3VtcHRpb25zIHRoYXQgbWlnaHQgYnJlYWsgZG93biB1bmRlciB1bnVzdWFsIGNpcmN1bXN0YW5jZXMuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDEzOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1JEU19HRVRfTVImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcmRzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcmRzL2FmX3Jkcy5jPTQzNj1zdGF0aWMgaW50IHJkc19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tLVxubmV0L3Jkcy9hZl9yZHMuYy00NTEtXHRcdGJyZWFrO1xubmV0L3Jkcy9hZl9yZHMuYzo0NTI6XHRjYXNlIFJEU19HRVRfTVI6XG5uZXQvcmRzL2FmX3Jkcy5jLTQ1My1cdFx0cmV0ID0gcmRzX2dldF9tcihycywgb3B0dmFsLCBvcHRsZW4pO1xubmV0L3Jkcy9hZl9yZHMuYy00NTQtXHRcdGJyZWFrO1xubmV0L3Jkcy9hZl9yZHMuYzo0NTU6XHRjYXNlIFJEU19HRVRfTVJfRk9SX0RFU1Q6XG5uZXQvcmRzL2FmX3Jkcy5jLTQ1Ni1cdFx0cmV0ID0gcmRzX2dldF9tcl9mb3JfZGVzdChycywgb3B0dmFsLCBvcHRsZW4pO1xuLS1cbm5ldC9yZHMvaWJfZnJtci5jPTQwNT1zdHJ1Y3QgcmRzX2liX21yICpyZHNfaWJfcmVnX2ZybXIoc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldixcbi0tXG5uZXQvcmRzL2liX2ZybXIuYy00MTQtXHRpZiAoIWljKSB7XG5uZXQvcmRzL2liX2ZybXIuYzo0MTU6XHRcdC8qIFRPRE86IEFkZCBGUldSIHN1cHBvcnQgZm9yIFJEU19HRVRfTVIgdXNpbmcgcHJveHkgcXAqL1xubmV0L3Jkcy9pYl9mcm1yLmMtNDE2LVx0XHRyZXR1cm4gRVJSX1BUUigtRU9QTk9UU1VQUCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDEzOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTUwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBzeW1ib2xzLCBmb2N1c2luZyBvbiB0aGVpciBpbXBvcnRhbmNlOgoKKipNeSBNZW50YWwgUm9hZG1hcCBmb3IgTWVtb3J5IFJlZ2lvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIFJETUEgZnVuY3Rpb24gY2FsbHMgYW5kLCBmcm9tIGEgbWVtb3J5IG1hbmFnZW1lbnQgcGVyc3BlY3RpdmUsIGByZHNfZ2V0X21yYCBhbmQgYHJkc19nZXRfbXJfZm9yX2Rlc3RgIGFyZSBkZWZpbml0ZWx5IGp1bXBpbmcgb3V0IGFzIGNydWNpYWwuIFRoZXkgYXJlIG15IHByaW1hcnkgZm9jdXMuIFRoZXkgYXJlIHRoZSBpbml0aWFsIHN0ZXBzIGZvciByZWdpc3RlcmluZyBtZW1vcnkgYW5kIG9idGFpbmluZyBNZW1vcnkgUmVnaW9uIChNUikgaGFuZGxlcy4gVGhleSYjMzk7cmUgd2hlcmUgaXQgYWxsICpzdGFydHMqLiBJIG5lZWQgdG8gdGhvcm91Z2hseSB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgYWxsb2NhdGUsIG1hcCwgYW5kIHNlY3VyZSB0aGVzZSBNUnMuIFRoZSBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlLCBzZWN1cml0eSBhbmQgY29uY3VycmVuY3kgYXJlIGltbWVkaWF0ZWx5IGFwcGFyZW50LgoKQW5kIG5hdHVyYWxseSwgYHJkc19mcmVlX21yYCBpcyBlcXVhbGx5IGltcG9ydGFudCwgYnV0IG9uIHRoZSBvdGhlciBlbmQgb2YgdGhlIHRyYW5zYWN0aW9uLiBJdCYjMzk7cyB0aGUgY3JpdGljYWwgc3RlcCBmb3IgKnJlbGVhc2luZyogdGhlIE1SLiBJZiBJIGRvbiYjMzk7dCBnZXQgdGhlIG1lbW9yeSBkZWFsbG9jYXRpb24gcGFydCByaWdodCwgSSYjMzk7bGwgaGF2ZSBhbGwga2luZHMgb2YgcHJvYmxlbXM6IHJlc291cmNlIGxlYWtzLCBmcmFnbWVudGF0aW9uLCBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIGlmIHRoZXNlIHJlc291cmNlcyBhcmUgbm90IGNvcnJlY3RseSB6ZXJvZWQvY2xlYW5lZCB1cCwgeW91IG5hbWUgaXQuCgpTbywgYHJkc19nZXRfbXJgLCBgcmRzX2dldF9tcl9mb3JfZGVzdGAsIGFuZCBgcmRzX2ZyZWVfbXJgIGFyZSBteSBrZXkgZm9jdXMgcG9pbnRzLiBUaGVpciBiZWhhdmlvciBhbmQgaW50ZXJhY3Rpb25zIGRpY3RhdGUgdGhlIGludGVncml0eSBhbmQgZWZmaWNpZW5jeSBvZiB0aGUgZW50aXJlIG1lbW9yeSBtYW5hZ2VtZW50IGxheWVyIG9mIHRoaXMgUkRNQSBpbXBsZW1lbnRhdGlvbi4gVGhvc2UgYXJlIHRoZSBmdW5jdGlvbnMgdGhhdCB3aWxsIHRlbGwgbWUgaG93IHRvIGJ1aWxkIHNvbWV0aGluZyByb2J1c3QsIHBlcmZvcm1hbnQsIGFuZCBzZWN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDEzOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1JEU19GUkVFX01SJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Jkcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9hZl9yZHMuYz00MzY9c3RhdGljIGludCByZHNfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9yZHMvYWZfcmRzLmMtNDU3LVx0XHRicmVhaztcbm5ldC9yZHMvYWZfcmRzLmM6NDU4Olx0Y2FzZSBSRFNfRlJFRV9NUjpcbm5ldC9yZHMvYWZfcmRzLmMtNDU5LVx0XHRyZXQgPSByZHNfZnJlZV9tcihycywgb3B0dmFsLCBvcHRsZW4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTAzNAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLgoKKipBZGRpbmcgUkRNQSBNZW1vcnkgUmVnaW9uIEZ1bmN0aW9ucyB0byB0aGUgVG9vbGtpdCoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gaW50ZWdyYXRlIHRoZXNlIFJETUEgZnVuY3Rpb25zLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGludHJvZHVjZSB0aGUgY29yZSBmdW5jdGlvbnM6IGByZHNfZ2V0X21yYCwgYHJkc19nZXRfbXJfZm9yX2Rlc3RgLCBgcmRzX2ZyZWVfbXJgLCBgcmRzX3NlbmRtc2dgLCBhbmQgYHJkc19yZWN2bXNnYC4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUsIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3MuCgpOb3csIGhvbGQgb24uLi4gd2hhdCBhYm91dCBgcmRzX2Ntc2dfcmRtYV9hcmdzYD8gV2hlcmUgZG9lcyB0aGF0IGZpdCBpbj8gQWgsIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGByZHNfc2VuZG1zZ2AuIE9rYXksIHRoYXQmIzM5O3MgY3J1Y2lhbDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBjb25uZWN0aW9uIGNsZWFybHkuIEnigJlkIGJldHRlciB0aG9yb3VnaGx5IGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgcmRzX3NlbmRtc2dgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBzbyBpdCYjMzk7cyB0aGUgcmlnaHQgcGxhY2UgdG8gYmVnaW4uIFRpbWUgdG8gZGlnIGluIGFuZCBlbnN1cmUgSSYjMzk7dmUgZ290IGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZHNfc2VuZG1zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yZHMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yZHMvYWZfcmRzLmM9NjQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHJkc19wcm90b19vcHMgPSB7XG4tLVxubmV0L3Jkcy9hZl9yZHMuYy02NjAtXHQuZ2V0c29ja29wdF9pdGVyID1cdHJkc19nZXRzb2Nrb3B0LFxubmV0L3Jkcy9hZl9yZHMuYzo2NjE6XHQuc2VuZG1zZyA9XHRyZHNfc2VuZG1zZyxcbm5ldC9yZHMvYWZfcmRzLmMtNjYyLVx0LnJlY3Ztc2cgPVx0cmRzX3JlY3Ztc2csXG4tLVxubmV0L3Jkcy9yZHMuaD02Mjk9c3RydWN0IHJkc19zb2NrIHtcbi0tXG5uZXQvcmRzL3Jkcy5oLTY1MS1cdC8qXG5uZXQvcmRzL3Jkcy5oOjY1MjpcdCAqIHJkc19zZW5kbXNnIGNhY2hlcyB0aGUgY29ubiBpdCB1c2VkIHRoZSBsYXN0IHRpbWUgYXJvdW5kLlxubmV0L3Jkcy9yZHMuaC02NTMtXHQgKiBUaGlzIGhlbHBzIGF2b2lkIGNvc3RseSBsb29rdXBzLlxuLS1cbm5ldC9yZHMvcmRzLmg9OTUwPXZvaWQgcmRzNl9pbmNfaW5mb19jb3B5KHN0cnVjdCByZHNfaW5jb21pbmcgKmluYyxcbi0tXG5uZXQvcmRzL3Jkcy5oLTk1NS0vKiBzZW5kLmMgKi9cbm5ldC9yZHMvcmRzLmg6OTU2OmludCByZHNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBwYXlsb2FkX2xlbik7XG5uZXQvcmRzL3Jkcy5oLTk1Ny12b2lkIHJkc19zZW5kX3BhdGhfcmVzZXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNvbm4pO1xuLS1cbm5ldC9yZHMvcmVjdi5jPTE5OT1zdGF0aWMgdm9pZCByZHNfcmVjdl9oc19leHRoZHJzKHN0cnVjdCByZHNfaGVhZGVyICpoZHIsXG4tLVxubmV0L3Jkcy9yZWN2LmMtMjcwLSAqXG5uZXQvcmRzL3JlY3YuYzoyNzE6ICogMS4gcmRzX3NlbmRtc2cgb24gZmlyc3QgY29ubmVjdCBhdHRlbXB0IHNlbmRzIHRoZSBwcm9iZSBwaW5nLCB3aXRoIHRoZVxubmV0L3Jkcy9yZWN2LmMtMjcyLSAqICAgIHNlbmRlciYjMzk7cyBucGF0aHMgKHNfbnBhdGhzKVxuLS1cbm5ldC9yZHMvc2VuZC5jPTExMTg9c3RhdGljIGludCByZHNfcmRtYV9ieXRlcyhzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCAqcmRtYV9ieXRlcylcbi0tXG5uZXQvcmRzL3NlbmQuYy0xMTQwLVxubmV0L3Jkcy9zZW5kLmM6MTE0MTppbnQgcmRzX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgcGF5bG9hZF9sZW4pXG5uZXQvcmRzL3NlbmQuYy0xMTQyLXtcbi0tXG5uZXQvcmRzL3NlbmQuYy0xMTY2LVxubmV0L3Jkcy9zZW5kLmM6MTE2NzpcdC8qIGV4cGVjdCAxIFJETUEgQ01TRyBwZXIgcmRzX3NlbmRtc2cuIGNhbiBzdGlsbCBncm93IGlmIG1vcmUgbmVlZGVkLiAqL1xubmV0L3Jkcy9zZW5kLmMtMTE2OC1cdHZjdC5pbmNyID0gMTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTM6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5ODcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucywgcHV0dGluZyBteXNlbGYgaW4gdGhlIHJvbGUgb2YgdGhpbmtpbmcgdGhyb3VnaCB0aGVpciBzaWduaWZpY2FuY2U6CgoqKktleSBGdW5jdGlvbiBTcG90bGlnaHQ6IGByZHNfc2VuZG1zZ2AgYW5kIGByZHNfc2VuZF94bWl0YCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbiBvbiBhIGNvdXBsZSBvZiBjcnVjaWFsIHBvaW50cyBpbiB0aGUgUmVtb3RlIERpcmVjdCBEYXRhIFRyYW5zZmVyIChSRE1BKSBjb21tdW5pY2F0aW9uIHBhdGguIEkmIzM5O3ZlIGJlZW4gZ2l2aW5nIHNvbWUgdGhvdWdodCB0byB0aGUgZnVuZGFtZW50YWwgcGllY2VzLCBhbmQgYHJkc19zZW5kbXNnYCBhbmQgYHJkc19zZW5kX3htaXRgIGFyZSBkZWZpbml0ZWx5IHN0YW5kaW5nIG91dCBhcyBnb29kIGZvY3VzIHN5bWJvbHMuIFRoZXkgc2VlbSB0byBiZSByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhlIHNlbmQgcHJvY2Vzcy4gS25vd2luZyBob3cgdGhlc2Ugd29yayBpcyBrZXkuCgpgcmRzX3NlbmRtc2dgIHBhcnRpY3VsYXJseSBsb29rcyBpbnRlcmVzdGluZyBhcyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkmIzM5O20gaW1hZ2luaW5nIGl0JiMzOTtzIHRoZSBpbnRlcmZhY2UsIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIGFwcGxpY2F0aW9uIHRvIGluaXRpYXRlIGEgc2VuZCBvcGVyYXRpb24uIEl0JiMzOTtzIHRoZSAmIzM0O2Zyb250IGRvb3IsJiMzNDsgc28gdG8gc3BlYWsuIFRoZW4sIGZyb20gdGhhdCBwb2ludCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcuIGByZHNfc2VuZF94bWl0YCBvbiB0aGUgb3RoZXIgaGFuZCBsaWtlbHkgaGFuZGxlcyB0aGUgYWN0dWFsIHRyYW5zbWlzc2lvbiBvZiB0aGUgZGF0YS4gVGhhdCBzZWVtcyBsaWtlIHRoZSBoZWF2eSBsaWZ0aW5nIHBhcnQgb2YgdGhlIHByb2Nlc3MgYW5kIHVuZGVyc3RhbmRpbmcgdGhlIGZsb3cgb2YgdGhpcyBmdW5jdGlvbiBpcyBnb2luZyB0byBnaXZlIG1lIGRlZXAgaW5zaWdodCBpbnRvIHRoZSBlZmZpY2llbmN5IG9mIFJETUEgdHJhbnNmZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZHNfc2VuZF94bWl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Jkcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9jb25nLmM9MjE3PXZvaWQgcmRzX2NvbmdfcXVldWVfdXBkYXRlcyhzdHJ1Y3QgcmRzX2NvbmdfbWFwICptYXApXG4tLVxubmV0L3Jkcy9jb25nLmMtMjMwLVx0XHRcdHJkc19zdGF0c19pbmMoc19jb25nX3VwZGF0ZV9xdWV1ZWQpO1xubmV0L3Jkcy9jb25nLmM6MjMxOlx0XHRcdC8qIFdlIGNhbm5vdCBpbmxpbmUgdGhlIGNhbGwgdG8gcmRzX3NlbmRfeG1pdCgpIGhlcmVcbm5ldC9yZHMvY29uZy5jLTIzMi1cdFx0XHQgKiBmb3IgdHdvIHJlYXNvbnMgKGJvdGggcGVydGFpbmluZyB0byBhIFRDUCB0cmFuc3BvcnQpOlxuLS1cbm5ldC9yZHMvaWJfY20uYz0yODI9c3RhdGljIHZvaWQgcmRzX2liX3Rhc2tsZXRfZm5fc2VuZCh1bnNpZ25lZCBsb25nIGRhdGEpXG4tLVxubmV0L3Jkcy9pYl9jbS5jLTI5OS1cdCAgICB0ZXN0X2JpdCgwLCBcdTAwMjZjb25uLVx1MDAzZWNfbWFwX3F1ZXVlZCkpKVxubmV0L3Jkcy9pYl9jbS5jOjMwMDpcdFx0cmRzX3NlbmRfeG1pdChcdTAwMjZpYy1cdTAwM2Vjb25uLVx1MDAzZWNfcGF0aFswXSk7XG5uZXQvcmRzL2liX2NtLmMtMzAxLX1cbi0tXG5uZXQvcmRzL2liX3NlbmQuYz0yNDU9dm9pZCByZHNfaWJfc2VuZF9jcWVfaGFuZGxlcihzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljLCBzdHJ1Y3QgaWJfd2MgKndjKVxuLS1cbm5ldC9yZHMvaWJfc2VuZC5jLTMzNS0gKlxubmV0L3Jkcy9pYl9zZW5kLmM6MzM2OiAqIFRoZSBSRFMgc2VuZCBjb2RlIGlzIGVzc2VudGlhbGx5IHNpbmdsZS10aHJlYWRlZDsgcmRzX3NlbmRfeG1pdFxubmV0L3Jkcy9pYl9zZW5kLmMtMzM3LSAqIHNldHMgUkRTX0lOX1hNSVQgdG8gZW5zdXJlIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gdGhlIHNlbmQgcmluZy5cbi0tXG5uZXQvcmRzL2xvb3AuYz0yMzE9dm9pZCByZHNfbG9vcF9uZXRfZXhpdCh2b2lkKVxuLS1cbm5ldC9yZHMvbG9vcC5jLTIzNy0gKiBUaGlzIGlzIG1pc3NpbmcgLnhtaXRfKiBiZWNhdXNlIGxvb3AgZG9lc24mIzM5O3QgZ28gdGhyb3VnaCBnZW5lcmljXG5uZXQvcmRzL2xvb3AuYzoyMzg6ICogcmRzX3NlbmRfeG1pdCgpIGFuZCBkb2VzbiYjMzk7dCBjYWxsIHJkc19yZWN2X2luY29taW5nKCkuICAubGlzdGVuX3N0b3AgYW5kXG5uZXQvcmRzL2xvb3AuYy0yMzktICogLmxhZGRyX2NoZWNrIGFyZSBtaXNzaW5nIGJlY2F1c2UgdHJhbnNwb3J0LmMgZG9lc24mIzM5O3QgaXRlcmF0ZSBvdmVyXG4tLVxubmV0L3Jkcy9yZHMuaD01NDA9c3RydWN0IHJkc190cmFuc3BvcnQge1xuLS1cbm5ldC9yZHMvcmRzLmgtNTgwLVx0Lypcbm5ldC9yZHMvcmRzLmg6NTgxOlx0ICogLnhtaXQgaXMgY2FsbGVkIGJ5IHJkc19zZW5kX3htaXQoKSB0byB0ZWxsIHRoZSB0cmFuc3BvcnQgdG8gc2VuZFxubmV0L3Jkcy9yZHMuaC01ODItXHQgKiBwYXJ0IG9mIGEgbWVzc2FnZS4gIFRoZSBjYWxsZXIgc2VyaWFsaXplcyBvbiB0aGUgc2VuZF9zZW0gc28gdGhpc1xuLS1cbm5ldC9yZHMvcmRzLmg9OTU3PXZvaWQgcmRzX3NlbmRfcGF0aF9yZXNldChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY29ubik7XG5uZXQvcmRzL3Jkcy5oOjk1ODppbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApO1xubmV0L3Jkcy9yZHMuaC05NTktc3RydWN0IHNvY2thZGRyX2luO1xuLS1cbm5ldC9yZHMvc2VuZC5jLTQ0LVxubmV0L3Jkcy9zZW5kLmM6NDU6LyogV2hlbiB0cmFuc21pdHRpbmcgbWVzc2FnZXMgaW4gcmRzX3NlbmRfeG1pdCwgd2UgbmVlZCB0byBlbWVyZ2UgZnJvbVxubmV0L3Jkcy9zZW5kLmMtNDYtICogdGltZSB0byB0aW1lIGFuZCBicmllZmx5IHJlbGVhc2UgdGhlIENQVS4gT3RoZXJ3aXNlIHRoZSBzb2Z0bG9jayB3YXRjaGRvZ1xuLS1cbm5ldC9yZHMvc2VuZC5jPTU5PXN0YXRpYyB2b2lkIHJkc19zZW5kX3JlbW92ZV9mcm9tX3NvY2soc3RydWN0IGxpc3RfaGVhZCAqbWVzc2FnZXMsIGludCBzdGF0dXMpO1xuLS1cbm5ldC9yZHMvc2VuZC5jLTYyLSAqIFJlc2V0IHRoZSBzZW5kIHN0YXRlLiAgQ2FsbGVycyBtdXN0IGVuc3VyZSB0aGF0IHRoaXMgZG9lc24mIzM5O3QgcmFjZSB3aXRoXG5uZXQvcmRzL3NlbmQuYzo2MzogKiByZHNfc2VuZF94bWl0KCkuXG5uZXQvcmRzL3NlbmQuYy02NC0gKi9cbi0tXG5uZXQvcmRzL3NlbmQuYz0xMjg9c3RhdGljIGJvb2wgcmRzX21wcmRzX2NwMF9jYXRjaHVwKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubilcbi0tXG5uZXQvcmRzL3NlbmQuYy0xODYtICovXG5uZXQvcmRzL3NlbmQuYzoxODc6aW50IHJkc19zZW5kX3htaXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxubmV0L3Jkcy9zZW5kLmMtMTg4LXtcbi0tXG5uZXQvcmRzL3NlbmQuYy01NDEtfVxubmV0L3Jkcy9zZW5kLmM6NTQyOkVYUE9SVF9TWU1CT0xfR1BMKHJkc19zZW5kX3htaXQpO1xubmV0L3Jkcy9zZW5kLmMtNTQzLVxuLS1cbm5ldC9yZHMvc2VuZC5jPTY3Nj1zdGF0aWMgdm9pZCByZHNfc2VuZF9yZW1vdmVfZnJvbV9zb2NrKHN0cnVjdCBsaXN0X2hlYWQgKm1lc3NhZ2VzLCBpbnQgc3RhdHVzKVxuLS1cbm5ldC9yZHMvc2VuZC5jLTc1MS0gKiBtZXNzYWdlcyB1cCB0bywgYW5kIGluY2x1ZGluZywgdGhlIGdpdmVuIHNlcXVlbmNlIG51bWJlci4gIE1lc3NhZ2VzIGFyZVxubmV0L3Jkcy9zZW5kLmM6NzUyOiAqIG1vdmVkIHRvIHRoZSByZXRyYW5zIHF1ZXVlIHdoZW4gcmRzX3NlbmRfeG1pdCBwaWNrcyB0aGVtIG9mZiB0aGUgc2VuZFxubmV0L3Jkcy9zZW5kLmMtNzUzLSAqIHF1ZXVlLiBUaGlzIG1lYW5zIHRoYXQgaW4gdGhlIFRDUCBjYXNlLCB0aGUgbWVzc2FnZSBtYXkgbm90IGhhdmUgYmVlblxuLS1cbm5ldC9yZHMvc2VuZC5jPTExNDE9aW50IHJkc19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHBheWxvYWRfbGVuKVxuLS1cbm5ldC9yZHMvc2VuZC5jLTE0MzgtXG5uZXQvcmRzL3NlbmQuYzoxNDM5Olx0cmV0ID0gcmRzX3NlbmRfeG1pdChjcGF0aCk7XG5uZXQvcmRzL3NlbmQuYy0xNDQwLVx0aWYgKHJldCA9PSAtRU5PTUVNIHx8IHJldCA9PSAtRUFHQUlOKSB7XG4tLVxubmV0L3Jkcy90Y3AuYz0xMjY9dm9pZCByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuLS1cbm5ldC9yZHMvdGNwLmMtMTQwLVx0ICogY3Bfc3RhdGUgdG8gc29tZXRoaW5nIG90aGVyIHRoYW4gUkRTX0NPTk5fVVAsIGFuZCB0aGVuXG5uZXQvcmRzL3RjcC5jOjE0MTpcdCAqIHdhaXRpbmcgZm9yIGFueSBleGlzdGluZyB0aHJlYWRzIGluIHJkc19zZW5kX3htaXQgdG9cbm5ldC9yZHMvdGNwLmMtMTQyLVx0ICogY29tcGxldGUgcmVsZWFzZV9pbl94bWl0KCkuIChTdWJzZXF1ZW50IHRocmVhZHMgZW50ZXJpbmdcbm5ldC9yZHMvdGNwLmM6MTQzOlx0ICogcmRzX3NlbmRfeG1pdCgpIHdpbGwgYmFpbCBvbiAhcmRzX2Nvbm5fdXAoKS5cbm5ldC9yZHMvdGNwLmMtMTQ0LVx0ICpcbi0tXG5uZXQvcmRzL3RocmVhZHMuYz0xOTE9dm9pZCByZHNfc2VuZF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9yZHMvdGhyZWFkcy5jLTE5OS1cdFx0Y2xlYXJfYml0KFJEU19MTF9TRU5EX0ZVTEwsIFx1MDAyNmNwLVx1MDAzZWNwX2ZsYWdzKTtcbm5ldC9yZHMvdGhyZWFkcy5jOjIwMDpcdFx0cmV0ID0gcmRzX3NlbmRfeG1pdChjcCk7XG5uZXQvcmRzL3RocmVhZHMuYy0yMDEtXHRcdGNvbmRfcmVzY2hlZCgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzgzNwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkRpZ2dpbmcgaW50byB0aGUgUkRTIENvZGUqKgoKUmlnaHQsIHNvIEkmIzM5O20gaG9uaW5nIGluIG9uIHRoZSBjcnVjaWFsIHRyYW5zbWlzc2lvbiBwYXRoIGhlcmUuIGByZHNfc2VuZF94bWl0YCBzZWVtcyBsaWtlIGEgZ29vZCBmb2NhbCBwb2ludCDigJMgaXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24gaW4gZ2V0dGluZyB0aGUgZGF0YSBvdXQgdGhlIGRvb3IuIEkgc2hvdWxkIHByb2JhYmx5IHN0YXJ0IHRoZXJlLgoKQnV0IGJlZm9yZSBJIGdldCB0b28gZGVlcCBpbiB0aGF0IHBhcnRpY3VsYXIgYml0IG9mIGNvZGUsIGl0IG1pZ2h0IGJlIGJlbmVmaWNpYWwgdG8gY2hlY2sgdGhlIGZ1bmN0aW9uIHRoYXQgZmVlZHMgYHJkc19zZW5kX3htaXRgIGl0cyBkYXRhOiBgcmRzX21lc3NhZ2VfcHV0YC4gVGhpcyBmdW5jdGlvbiBsaWtlbHkgaGFuZGxlcyBwcmVwYXJpbmcgYW5kIHF1ZXVpbmcgdGhlIG1lc3NhZ2VzIGZvciB0cmFuc21pc3Npb24sIHNvIHVuZGVyc3RhbmRpbmcgaXRzIHJvbGUgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IGByZHNfc2VuZF94bWl0YCBpbnRlcmFjdHMgd2l0aCB0aGUgaGlnaGVyIGxldmVsIG1lc3NhZ2luZyBsb2dpYy4gSXQgc2hvdWxkIGFsc28gcHJvdmlkZSB2YWx1YWJsZSBjb250ZXh0LCBhcyB3ZWxsIGFzIGVuc3VyZSB0aGF0IEkmIzM5O20gdGFraW5nIGEgdG9wLWRvd24gYXBwcm9hY2guIEkgc2hvdWxkIHN0YXJ0IHRoZXJlIGFuZCB0aGVuIG1vdmUgdG8gYHJkc19zZW5kX3htaXRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZHNfbWVzc2FnZV9wdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcmRzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcmRzL2Nvbm5lY3Rpb24uYz00Njg9c3RhdGljIHZvaWQgcmRzX2Nvbm5fcGF0aF9kZXN0cm95KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbi0tXG5uZXQvcmRzL2Nvbm5lY3Rpb24uYy00ODctXHRcdEJVR19PTighbGlzdF9lbXB0eShcdTAwMjZybS1cdTAwM2VtX3NvY2tfaXRlbSkpO1xubmV0L3Jkcy9jb25uZWN0aW9uLmM6NDg4Olx0XHRyZHNfbWVzc2FnZV9wdXQocm0pO1xubmV0L3Jkcy9jb25uZWN0aW9uLmMtNDg5LVx0fVxubmV0L3Jkcy9jb25uZWN0aW9uLmMtNDkwLVx0aWYgKGNwLVx1MDAzZWNwX3htaXRfcm0pXG5uZXQvcmRzL2Nvbm5lY3Rpb24uYzo0OTE6XHRcdHJkc19tZXNzYWdlX3B1dChjcC1cdTAwM2VjcF94bWl0X3JtKTtcbm5ldC9yZHMvY29ubmVjdGlvbi5jLTQ5Mi1cbi0tXG5uZXQvcmRzL2liX2NtLmM9MTA2ND12b2lkIHJkc19pYl9jb25uX3BhdGhfc2h1dGRvd24oc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxuLS1cbm5ldC9yZHMvaWJfY20uYy0xMTg1LVx0XHRybSA9IGNvbnRhaW5lcl9vZihpYy1cdTAwM2VpX2RhdGFfb3AsIHN0cnVjdCByZHNfbWVzc2FnZSwgZGF0YSk7XG5uZXQvcmRzL2liX2NtLmM6MTE4NjpcdFx0cmRzX21lc3NhZ2VfcHV0KHJtKTtcbm5ldC9yZHMvaWJfY20uYy0xMTg3LVx0XHRpYy1cdTAwM2VpX2RhdGFfb3AgPSBOVUxMO1xuLS1cbm5ldC9yZHMvaWJfc2VuZC5jPTI0NT12b2lkIHJkc19pYl9zZW5kX2NxZV9oYW5kbGVyKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMsIHN0cnVjdCBpYl93YyAqd2MpXG4tLVxubmV0L3Jkcy9pYl9zZW5kLmMtMjg5LVx0XHRcdH1cbm5ldC9yZHMvaWJfc2VuZC5jOjI5MDpcdFx0XHRyZHNfbWVzc2FnZV9wdXQocm0pO1xubmV0L3Jkcy9pYl9zZW5kLmMtMjkxLVx0XHRcdHNlbmQtXHUwMDNlc19vcCA9IE5VTEw7XG4tLVxubmV0L3Jkcy9sb29wLmM9MTExPXN0YXRpYyB2b2lkIHJkc19sb29wX2luY19mcmVlKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYylcbi0tXG5uZXQvcmRzL2xvb3AuYy0xMTQtXG5uZXQvcmRzL2xvb3AuYzoxMTU6XHRyZHNfbWVzc2FnZV9wdXQocm0pO1xubmV0L3Jkcy9sb29wLmMtMTE2LX1cbi0tXG5uZXQvcmRzL21lc3NhZ2UuYz0xODU9c3RhdGljIHZvaWQgcmRzX21lc3NhZ2VfdW5waW5fd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvcmRzL21lc3NhZ2UuYy0xOTctXG5uZXQvcmRzL21lc3NhZ2UuYzoxOTg6dm9pZCByZHNfbWVzc2FnZV9wdXQoc3RydWN0IHJkc19tZXNzYWdlICpybSlcbm5ldC9yZHMvbWVzc2FnZS5jLTE5OS17XG4tLVxubmV0L3Jkcy9tZXNzYWdlLmMtMjIyLX1cbm5ldC9yZHMvbWVzc2FnZS5jOjIyMzpFWFBPUlRfU1lNQk9MX0dQTChyZHNfbWVzc2FnZV9wdXQpO1xubmV0L3Jkcy9tZXNzYWdlLmMtMjI0LVxuLS1cbm5ldC9yZHMvbWVzc2FnZS5jPTQxMD1zdHJ1Y3QgcmRzX21lc3NhZ2UgKnJkc19tZXNzYWdlX21hcF9wYWdlcyh1bnNpZ25lZCBsb25nICpwYWdlX2FkZHJzLCB1bnNpZ25lZCBpbnQgdG90YWxfbGVuKVxuLS1cbm5ldC9yZHMvbWVzc2FnZS5jLTQyNi1cdFx0dm9pZCAqZXJyID0gRVJSX0NBU1Qocm0tXHUwMDNlZGF0YS5vcF9zZyk7XG5uZXQvcmRzL21lc3NhZ2UuYzo0Mjc6XHRcdHJkc19tZXNzYWdlX3B1dChybSk7XG5uZXQvcmRzL21lc3NhZ2UuYy00MjgtXHRcdHJldHVybiBlcnI7XG4tLVxubmV0L3Jkcy9yZG1hLmM9NTA2PXZvaWQgcmRzX3JkbWFfZnJlZV9vcChzdHJ1Y3Qgcm1fcmRtYV9vcCAqcm8pXG4tLVxubmV0L3Jkcy9yZG1hLmMtNTE2LVx0XHQvKiBEaXJ0eWluZyB0aGUgcGFnZXMgb24gdW5waW4gY2FuIHNsZWVwOyBsZWF2ZSB0aGVtXG5uZXQvcmRzL3JkbWEuYzo1MTc6XHRcdCAqIHBpbm5lZCBhbmQgaGF2ZSByZHNfbWVzc2FnZV9wdXQoKSBmaW5pc2ggdGhlIHVucGluXG5uZXQvcmRzL3JkbWEuYy01MTgtXHRcdCAqIGZyb20gcHJvY2VzcyBjb250ZXh0LlxuLS1cbm5ldC9yZHMvcmRtYS5jPTUzOT12b2lkIHJkc19hdG9taWNfZnJlZV9vcChzdHJ1Y3Qgcm1fYXRvbWljX29wICphbylcbi0tXG5uZXQvcmRzL3JkbWEuYy01NDQtXHRcdC8qIERpcnR5aW5nIHRoZSBwYWdlIG9uIHVucGluIGNhbiBzbGVlcDsgbGVhdmUgaXRcbm5ldC9yZHMvcmRtYS5jOjU0NTpcdFx0ICogcGlubmVkIGFuZCBoYXZlIHJkc19tZXNzYWdlX3B1dCgpIGZpbmlzaCB0aGUgdW5waW5cbm5ldC9yZHMvcmRtYS5jLTU0Ni1cdFx0ICogZnJvbSBwcm9jZXNzIGNvbnRleHQuXG4tLVxubmV0L3Jkcy9yZHMuaD05MTE9dm9pZCByZHNfbWVzc2FnZV9hZGRyZWYoc3RydWN0IHJkc19tZXNzYWdlICpybSk7XG5uZXQvcmRzL3Jkcy5oOjkxMjp2b2lkIHJkc19tZXNzYWdlX3B1dChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKTtcbm5ldC9yZHMvcmRzLmgtOTEzLXZvaWQgcmRzX21lc3NhZ2Vfd2FpdChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKTtcbi0tXG5uZXQvcmRzL3NlbmQuYz02NT12b2lkIHJkc19zZW5kX3BhdGhfcmVzZXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxuLS1cbm5ldC9yZHMvc2VuZC5jLTc3LVx0XHRyZHNfbWVzc2FnZV91bm1hcHBlZChybSk7XG5uZXQvcmRzL3NlbmQuYzo3ODpcdFx0cmRzX21lc3NhZ2VfcHV0KHJtKTtcbm5ldC9yZHMvc2VuZC5jLTc5LVx0fVxuLS1cbm5ldC9yZHMvc2VuZC5jPTE4Nz1pbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXG4tLVxubmV0L3Jkcy9zZW5kLmMtMzU0LVx0XHRcdFx0XHRcdFx0ICAgICAgIGZsYWdzKTtcbm5ldC9yZHMvc2VuZC5jOjM1NTpcdFx0XHRcdFx0cmRzX21lc3NhZ2VfcHV0KHJtKTtcbm5ldC9yZHMvc2VuZC5jLTM1Ni1cdFx0XHRcdH1cbi0tXG5uZXQvcmRzL3NlbmQuYy00ODUtXG5uZXQvcmRzL3NlbmQuYzo0ODY6XHRcdFx0cmRzX21lc3NhZ2VfcHV0KHJtKTtcbm5ldC9yZHMvc2VuZC5jLTQ4Ny1cdFx0fVxuLS1cbm5ldC9yZHMvc2VuZC5jLTQ5OC1cdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShybSwgXHUwMDI2dG9fYmVfZHJvcHBlZCwgbV9jb25uX2l0ZW0pXG5uZXQvcmRzL3NlbmQuYzo0OTk6XHRcdFx0cmRzX21lc3NhZ2VfcHV0KHJtKTtcbm5ldC9yZHMvc2VuZC5jLTUwMC1cdFx0cmRzX3NlbmRfcmVtb3ZlX2Zyb21fc29jayhcdTAwMjZ0b19iZV9kcm9wcGVkLCBSRFNfUkRNQV9EUk9QUEVEKTtcbi0tXG5uZXQvcmRzL3NlbmQuYz02NzY9c3RhdGljIHZvaWQgcmRzX3NlbmRfcmVtb3ZlX2Zyb21fc29jayhzdHJ1Y3QgbGlzdF9oZWFkICptZXNzYWdlcywgaW50IHN0YXR1cylcbi0tXG5uZXQvcmRzL3NlbmQuYy03MzctXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cm0tXHUwMDNlbV9yc19sb2NrLCBmbGFncyk7XG5uZXQvcmRzL3NlbmQuYzo3Mzg6XHRcdHJkc19tZXNzYWdlX3B1dChybSk7XG5uZXQvcmRzL3NlbmQuYy03MzktXHRcdGlmICh3YXNfb25fc29jaylcbm5ldC9yZHMvc2VuZC5jOjc0MDpcdFx0XHRyZHNfbWVzc2FnZV9wdXQocm0pO1xubmV0L3Jkcy9zZW5kLmMtNzQxLVx0fVxuLS1cbm5ldC9yZHMvc2VuZC5jPTc5Mz12b2lkIHJkc19zZW5kX2Ryb3BfdG8oc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHNvY2thZGRyX2luNiAqZGVzdClcbi0tXG5uZXQvcmRzL3NlbmQuYy04NTYtXG5uZXQvcmRzL3NlbmQuYzo4NTc6XHRcdHJkc19tZXNzYWdlX3B1dChybSk7XG5uZXQvcmRzL3NlbmQuYy04NTgtXHR9XG4tLVxubmV0L3Jkcy9zZW5kLmMtODc5LVxubmV0L3Jkcy9zZW5kLmM6ODgwOlx0XHRyZHNfbWVzc2FnZV9wdXQocm0pO1xubmV0L3Jkcy9zZW5kLmMtODgxLVx0fVxuLS1cbm5ldC9yZHMvc2VuZC5jPTExNDE9aW50IHJkc19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHBheWxvYWRfbGVuKVxuLS1cbm5ldC9yZHMvc2VuZC5jLTE0NTItXG5uZXQvcmRzL3NlbmQuYzoxNDUzOlx0cmRzX21lc3NhZ2VfcHV0KHJtKTtcbm5ldC9yZHMvc2VuZC5jLTE0NTQtXG4tLVxubmV0L3Jkcy9zZW5kLmMtMTQ3Mi1cdGlmIChybSlcbm5ldC9yZHMvc2VuZC5jOjE0NzM6XHRcdHJkc19tZXNzYWdlX3B1dChybSk7XG5uZXQvcmRzL3NlbmQuYy0xNDc0LVx0cmV0dXJuIHJldDtcbi0tXG5uZXQvcmRzL3NlbmQuYz0xNDg2PXJkc19zZW5kX3Byb2JlKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCwgX19iZTE2IHNwb3J0LFxuLS1cbm5ldC9yZHMvc2VuZC5jLTE1NDUtXG5uZXQvcmRzL3NlbmQuYzoxNTQ2Olx0cmRzX21lc3NhZ2VfcHV0KHJtKTtcbm5ldC9yZHMvc2VuZC5jLTE1NDctXHRyZXR1cm4gMDtcbi0tXG5uZXQvcmRzL3NlbmQuYy0xNTUwLVx0aWYgKHJtKVxubmV0L3Jkcy9zZW5kLmM6MTU1MTpcdFx0cmRzX21lc3NhZ2VfcHV0KHJtKTtcbm5ldC9yZHMvc2VuZC5jLTE1NTItXHRyZXR1cm4gcmV0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjEzMwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHJkc19tZXNzYWdlX3B1dGAgVXNhZ2UgYW5kIFJlbGF0ZWQgQ2hhbmdlcyoqCgpPa2F5LCBzbyBgcmRzX21lc3NhZ2VfcHV0YCBpcyBhIGhlYXZpbHkgdXRpbGl6ZWQgZnVuY3Rpb24gd2l0aGluIHRoaXMgc3lzdGVtIOKAkyB0aGF0JiMzOTtzIHRoZSBmaXJzdCB0aGluZyBJIG5vdGljZS4gVGhpcyBwYXRjaCwgc3BlY2lmaWNhbGx5LCBpbnRyb2R1Y2VzIGEgbmV3IHdvcmtxdWV1ZSBmdW5jdGlvbiwgYHJkc19tZXNzYWdlX3VucGluX3dvcmtlcmAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doeSB0aGUgd29ya3F1ZXVlPyYjMzQ7IEl0IGltcGxpZXMgc29tZSBraW5kIG9mIGRlZmVycmVkIG9wZXJhdGlvbiwgbGlrZWx5IHJlbGF0ZWQgdG8gcmVzb3VyY2UgbWFuYWdlbWVudCBvciBzeW5jaHJvbml6YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB1bnBpbm5pbmcgYW5kIHRoZSBtZXNzYWdlIGxpZmVjeWNsZS4KClRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgYHJkc19yZG1hX2ZyZWVfb3BgIGFuZCBgcmRzX2F0b21pY19mcmVlX29wYC4gV2hlbmV2ZXIgSSBzZWUgY2hhbmdlcyB0aGF0IGltcGFjdCBmdW5jdGlvbnMgZGVhbGluZyB3aXRoIFJETUEgYW5kIGF0b21pY3MsIG15IGFudGVubmEgZ28gdXAuIFRob3NlIGFyZSBwb3RlbnRpYWwgYXJlYXMgZm9yIHN1YnRsZSBidWdzIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBHaXZlbiB0aGF0IGByZHNfbWVzc2FnZV9wdXRgIGlzIHNvIGNlbnRyYWwsIEkmIzM5O2xsIHN0YXJ0IGJ5IGZvY3VzaW5nIG9uIGByZHNfcmRtYV9mcmVlX29wYC4gSSB3YW50IHRvIHNlZSBob3cgdGhlIFJETUEgcmVzb3VyY2VzIGFyZSBiZWluZyBoYW5kbGVkIGluIHJlbGF0aW9uIHRvIHRoaXMgdW5waW5uaW5nIHByb2Nlc3MuIElzIHRoaXMgY2hhbmdlIHJlbGF0ZWQgdG8gYnVmZmVyIHJlLXVzZSwgUkRNQSBjb21wbGV0aW9uIGhhbmRsaW5nLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQSBxdWljayBjaGVjayBzaG91bGQgZ2l2ZSBtZSBhbiBpZGVhIGFib3V0IGhvdyB0aGlzIGFsbCBmaXRzIHRvZ2V0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZHNfcmRtYV9mcmVlX29wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Jkcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9tZXNzYWdlLmM9MTMyPXN0YXRpYyB2b2lkIHJkc19tZXNzYWdlX3B1cmdlKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pXG4tLVxubmV0L3Jkcy9tZXNzYWdlLmMtMTc0LVx0aWYgKHJtLVx1MDAzZXJkbWEub3BfYWN0aXZlKVxubmV0L3Jkcy9tZXNzYWdlLmM6MTc1Olx0XHRyZHNfcmRtYV9mcmVlX29wKFx1MDAyNnJtLVx1MDAzZXJkbWEpO1xubmV0L3Jkcy9tZXNzYWdlLmMtMTc2LVx0aWYgKHJtLVx1MDAzZXJkbWEub3BfcmRtYV9tcilcbi0tXG5uZXQvcmRzL21lc3NhZ2UuYz0xOTg9dm9pZCByZHNfbWVzc2FnZV9wdXQoc3RydWN0IHJkc19tZXNzYWdlICpybSlcbi0tXG5uZXQvcmRzL21lc3NhZ2UuYy0yMDgtXHRcdC8qIEEgZmluYWwgcHV0IGluIGF0b21pYyBjb250ZXh0IGNhbm5vdCBkaXJ0eSB0aGUgb3BzJiMzOTtcbm5ldC9yZHMvbWVzc2FnZS5jOjIwOTpcdFx0ICogdXNlciBwYWdlcyBvbiB1bnBpbiwgc28gcmRzX3JkbWFfZnJlZV9vcCgpIGFuZFxubmV0L3Jkcy9tZXNzYWdlLmMtMjEwLVx0XHQgKiByZHNfYXRvbWljX2ZyZWVfb3AoKSBkZWZlcnJlZCBpdC4gIEZpbmlzaCB0aGUgdW5waW4sXG4tLVxubmV0L3Jkcy9yZG1hLmM9NDkxPXZvaWQgcmRzX3JkbWFfb3BfdW5waW5fcGFnZXMoc3RydWN0IHJtX3JkbWFfb3AgKnJvKVxuLS1cbm5ldC9yZHMvcmRtYS5jLTUwNS1cbm5ldC9yZHMvcmRtYS5jOjUwNjp2b2lkIHJkc19yZG1hX2ZyZWVfb3Aoc3RydWN0IHJtX3JkbWFfb3AgKnJvKVxubmV0L3Jkcy9yZG1hLmMtNTA3LXtcbi0tXG5uZXQvcmRzL3JkbWEuYz02Mzc9aW50IHJkc19jbXNnX3JkbWFfYXJncyhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLFxuLS1cbm5ldC9yZHMvcmRtYS5jLTgzMS1cdGlmIChyZXQpXG5uZXQvcmRzL3JkbWEuYzo4MzI6XHRcdHJkc19yZG1hX2ZyZWVfb3Aob3ApO1xubmV0L3Jkcy9yZG1hLmMtODMzLVx0ZWxzZVxuLS1cbm5ldC9yZHMvcmRzLmg9OTgyPWludCByZHNfY21zZ19yZG1hX21hcChzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLFxubmV0L3Jkcy9yZHMuaC05ODMtXHRcdFx0ICBzdHJ1Y3QgY21zZ2hkciAqY21zZyk7XG5uZXQvcmRzL3Jkcy5oOjk4NDp2b2lkIHJkc19yZG1hX2ZyZWVfb3Aoc3RydWN0IHJtX3JkbWFfb3AgKnJvKTtcbm5ldC9yZHMvcmRzLmgtOTg1LXZvaWQgcmRzX2F0b21pY19mcmVlX29wKHN0cnVjdCBybV9hdG9taWNfb3AgKmFvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTM6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwODIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIHVuZGVyc3RhbmQgdGhlIHNpdHVhdGlvbjoKCioqUkRTIFJETUEgTWVtb3J5IE1hbmFnZW1lbnQgQ29udGV4dHVhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBSRE1BIG1lbW9yeSBpcyBtYW5hZ2VkIHdpdGhpbiB0aGUgUkRTIHByb3RvY29sIHN0YWNrLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYHJkc19yZG1hX2ZyZWVfb3BgLiBJIHNlZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhcyBwYXJ0IG9mIGEgY2hhaW46IGZyb20gYHJkc19tZXNzYWdlX3B1cmdlYCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgZnJvbSBgcmRzX21lc3NhZ2VfcHV0YC4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBsaWZlY3ljbGUgb2YgbWVzc2FnZXMgYW5kIGhvdyB0aGVpciBhc3NvY2lhdGVkIFJETUEgcmVzb3VyY2VzIGFyZSByZWxlYXNlZC4gVGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBhIHN1YnRsZSBjaGFuZ2UsIGVmZmVjdGl2ZWx5IGRlZmVycmluZyB0aGUgdW5waW5uaW5nIG9mIG1lbW9yeSB0byBhIHdvcmtxdWV1ZSwgYnV0ICpvbmx5KiBpZiB0aGUgY2FsbCB0byBgcmRzX3JkbWFfZnJlZV9vcGAgaGFwcGVucyBmcm9tIGFuIGF0b21pYyBjb250ZXh0LiBUaGlzIGlzIGEgY3J1Y2lhbCBmdW5jdGlvbmFsIHNoaWZ0IGluIGhvdyBtZW1vcnkgaXMgaGFuZGxlZCB3aXRoaW4gUkRTLiBJdCBtZWFucyB3ZSYjMzk7cmUgdHJ5aW5nIHRvIHByZXZlbnQgYmxvY2tpbmcgaW4gY3JpdGljYWwgc2VjdGlvbnMuIE5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBkZWZlcnJhbC4gTGV0IG1lIHN0YXJ0IGJ5IGxvb2tpbmcgaW50byBgX19yZHNfcHV0X21yX2ZpbmFsYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTM6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19yZHNfcHV0X21yX2ZpbmFsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Jkcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9tZXNzYWdlLmM9MTMyPXN0YXRpYyB2b2lkIHJkc19tZXNzYWdlX3B1cmdlKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pXG4tLVxubmV0L3Jkcy9tZXNzYWdlLmMtMTc2LVx0aWYgKHJtLVx1MDAzZXJkbWEub3BfcmRtYV9tcilcbm5ldC9yZHMvbWVzc2FnZS5jOjE3NzpcdFx0a3JlZl9wdXQoXHUwMDI2cm0tXHUwMDNlcmRtYS5vcF9yZG1hX21yLVx1MDAzZXJfa3JlZiwgX19yZHNfcHV0X21yX2ZpbmFsKTtcbm5ldC9yZHMvbWVzc2FnZS5jLTE3OC1cbi0tXG5uZXQvcmRzL21lc3NhZ2UuYy0xODEtXHRpZiAocm0tXHUwMDNlYXRvbWljLm9wX3JkbWFfbXIpXG5uZXQvcmRzL21lc3NhZ2UuYzoxODI6XHRcdGtyZWZfcHV0KFx1MDAyNnJtLVx1MDAzZWF0b21pYy5vcF9yZG1hX21yLVx1MDAzZXJfa3JlZiwgX19yZHNfcHV0X21yX2ZpbmFsKTtcbm5ldC9yZHMvbWVzc2FnZS5jLTE4My19XG4tLVxubmV0L3Jkcy9yZG1hLmM9OTU9c3RhdGljIHZvaWQgcmRzX2Rlc3Ryb3lfbXIoc3RydWN0IHJkc19tciAqbXIpXG4tLVxubmV0L3Jkcy9yZG1hLmMtMTE0LVxubmV0L3Jkcy9yZG1hLmM6MTE1OnZvaWQgX19yZHNfcHV0X21yX2ZpbmFsKHN0cnVjdCBrcmVmICprcmVmKVxubmV0L3Jkcy9yZG1hLmMtMTE2LXtcbi0tXG5uZXQvcmRzL3JkbWEuYz0xMjg9dm9pZCByZHNfcmRtYV9kcm9wX2tleXMoc3RydWN0IHJkc19zb2NrICpycylcbi0tXG5uZXQvcmRzL3JkbWEuYy0xNDItXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cnMtXHUwMDNlcnNfcmRtYV9sb2NrLCBmbGFncyk7XG5uZXQvcmRzL3JkbWEuYzoxNDM6XHRcdGtyZWZfcHV0KFx1MDAyNm1yLVx1MDAzZXJfa3JlZiwgX19yZHNfcHV0X21yX2ZpbmFsKTtcbm5ldC9yZHMvcmRtYS5jLTE0NC1cdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cnMtXHUwMDNlcnNfcmRtYV9sb2NrLCBmbGFncyk7XG4tLVxubmV0L3Jkcy9yZG1hLmM9MTczPXN0YXRpYyBpbnQgX19yZHNfcmRtYV9tYXAoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19nZXRfbXJfYXJncyAqYXJncyxcbi0tXG5uZXQvcmRzL3JkbWEuYy0yNDctXHQvKiBUaGUgTVIgY2FuIG91dGxpdmUgaXRzIHNvY2tldDogYSBzb2NrZXQgcmVmZXJlbmNlIGlzIGhlbGRcbm5ldC9yZHMvcmRtYS5jOjI0ODpcdCAqIHVudGlsIHRoZSBmaW5hbCBrcmVmIGlzIGRyb3BwZWQgaW4gX19yZHNfcHV0X21yX2ZpbmFsKCkuXG5uZXQvcmRzL3JkbWEuYy0yNDktXHQgKi9cbi0tXG5uZXQvcmRzL3JkbWEuYy0zNTUtXHRpZiAobXIpXG5uZXQvcmRzL3JkbWEuYzozNTY6XHRcdGtyZWZfcHV0KFx1MDAyNm1yLVx1MDAzZXJfa3JlZiwgX19yZHNfcHV0X21yX2ZpbmFsKTtcbm5ldC9yZHMvcmRtYS5jLTM1Ny1cdHJldHVybiByZXQ7XG4tLVxubmV0L3Jkcy9yZG1hLmM9NDAwPWludCByZHNfZnJlZV9tcihzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxuLS1cbm5ldC9yZHMvcmRtYS5jLTQzNi1cbm5ldC9yZHMvcmRtYS5jOjQzNzpcdGtyZWZfcHV0KFx1MDAyNm1yLVx1MDAzZXJfa3JlZiwgX19yZHNfcHV0X21yX2ZpbmFsKTtcbm5ldC9yZHMvcmRtYS5jLTQzOC1cdHJldHVybiAwO1xuLS1cbm5ldC9yZHMvcmRtYS5jPTQ0Nj12b2lkIHJkc19yZG1hX3VudXNlKHN0cnVjdCByZHNfc29jayAqcnMsIHUzMiByX2tleSwgaW50IGZvcmNlKVxuLS1cbm5ldC9yZHMvcmRtYS5jLTQ4Mi1cdC8qIFJlbGVhc2UgdGhlIHJlZmVyZW5jZSBoZWxkIGFib3ZlLiAqL1xubmV0L3Jkcy9yZG1hLmM6NDgzOlx0a3JlZl9wdXQoXHUwMDI2bXItXHUwMDNlcl9rcmVmLCBfX3Jkc19wdXRfbXJfZmluYWwpO1xubmV0L3Jkcy9yZG1hLmMtNDg0LVxuLS1cbm5ldC9yZHMvcmRtYS5jLTQ4Ny1cdGlmICh6b3RfbWUpXG5uZXQvcmRzL3JkbWEuYzo0ODg6XHRcdGtyZWZfcHV0KFx1MDAyNm1yLVx1MDAzZXJfa3JlZiwgX19yZHNfcHV0X21yX2ZpbmFsKTtcbm5ldC9yZHMvcmRtYS5jLTQ4OS19XG4tLVxubmV0L3Jkcy9yZG1hLmM9NTA2PXZvaWQgcmRzX3JkbWFfZnJlZV9vcChzdHJ1Y3Qgcm1fcmRtYV9vcCAqcm8pXG4tLVxubmV0L3Jkcy9yZG1hLmMtNTA4LVx0aWYgKHJvLVx1MDAzZW9wX29kcF9tcikge1xubmV0L3Jkcy9yZG1hLmM6NTA5Olx0XHRrcmVmX3B1dChcdTAwMjZyby1cdTAwM2VvcF9vZHBfbXItXHUwMDNlcl9rcmVmLCBfX3Jkc19wdXRfbXJfZmluYWwpO1xubmV0L3Jkcy9yZG1hLmMtNTEwLVx0fSBlbHNlIGlmIChpbl90YXNrKCkgfHwgcm8tXHUwMDNlb3Bfd3JpdGUpIHtcbi0tXG5uZXQvcmRzL3JkbWEuYz02Mzc9aW50IHJkc19jbXNnX3JkbWFfYXJncyhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLFxuLS1cbm5ldC9yZHMvcmRtYS5jLTc2OC1cdFx0XHQgKiByZWZlcmVuY2UgaXMgaGVsZCB1bnRpbCB0aGUgZmluYWwga3JlZiBpc1xubmV0L3Jkcy9yZG1hLmM6NzY5Olx0XHRcdCAqIGRyb3BwZWQgaW4gX19yZHNfcHV0X21yX2ZpbmFsKCkuXG5uZXQvcmRzL3JkbWEuYy03NzAtXHRcdFx0ICovXG4tLVxubmV0L3Jkcy9yZG1hLmMtNzgyLVx0XHRcdFx0a3JlZl9wdXQoXHUwMDI2bG9jYWxfb2RwX21yLVx1MDAzZXJfa3JlZixcbm5ldC9yZHMvcmRtYS5jOjc4MzpcdFx0XHRcdFx0IF9fcmRzX3B1dF9tcl9maW5hbCk7XG5uZXQvcmRzL3JkbWEuYy03ODQtXHRcdFx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvcmRzL3Jkcy5oPTMxMz1zdHJ1Y3QgcmRzX21yIHtcbi0tXG5uZXQvcmRzL3Jkcy5oLTMyNC1cdFx0XHRcdFx0ICAqIHJlZmVyZW5jZSwgZHJvcHBlZCBieVxubmV0L3Jkcy9yZHMuaDozMjU6XHRcdFx0XHRcdCAgKiBfX3Jkc19wdXRfbXJfZmluYWwoKVxubmV0L3Jkcy9yZHMuaC0zMjYtXHRcdFx0XHRcdCAgKi9cbi0tXG5uZXQvcmRzL3Jkcy5oPTk5MD1pbnQgcmRzX2Ntc2dfYXRvbWljKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sXG4tLVxubmV0L3Jkcy9yZHMuaC05OTItXG5uZXQvcmRzL3Jkcy5oOjk5Mzp2b2lkIF9fcmRzX3B1dF9tcl9maW5hbChzdHJ1Y3Qga3JlZiAqa3JlZik7XG5uZXQvcmRzL3Jkcy5oLTk5NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTM6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg4ODIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSRFMgTWVtb3J5IFJlZ2lvbiBMaWZlY3ljbGUqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgbmFzdHkgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0eSwgc3BlY2lmaWNhbGx5IHdoZXJlIGEgTWVtb3J5IFJlZ2lvbiAoTVIpIGluIHRoZSBSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzIChSRFMpIHByb3RvY29sIHN1cnZpdmVzIHRoZSBzb2NrZXQgaXQmIzM5O3MgYXNzb2NpYXRlZCB3aXRoLiBUaGUgZml4IGl0c2VsZiBzZWVtcyBzdHJhaWdodGZvcndhcmQ6IGBzb2NrX3B1dGAgaXMgYmVpbmcgYWRkZWQgdG8gYF9fcmRzX3B1dF9tcl9maW5hbGAgYW5kIGBzb2NrX2hvbGRgIHRvIGBfX3Jkc19yZG1hX21hcGAgYW5kIGByZHNfY21zZ19yZG1hX2FyZ3NgLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSDigJMgY3JpdGljYWwsIGluIGZhY3QuCgpOb3csIGxldCBtZSBtZW50YWxseSBydW4gdGhyb3VnaCB0aGUgY29yZSBjb21wb25lbnRzIGludm9sdmVkLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCB0aGUgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgb2YgTVJzLCBzbyBJIG5lZWQgdG8ga2VlcCB0aGUgbWFqb3IgcGxheWVycyB0b3Atb2YtbWluZDogYHJkc19zZW5kbXNnYCwgYHJkc19yZWN2bXNnYCwgYHJkc19nZXRfbXJgLCBgcmRzX2dldF9tcl9mb3JfZGVzdGAsIGByZHNfZnJlZV9tcmAsIGFuZCBgcmRzX3NlbmRfeG1pdGAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY2VudHJhbCB0byBob3cgUkRTIGludGVyYWN0cyB3aXRoIFJETUEgYW5kIG1hbmFnZXMgaXRzIG1lbW9yeS4KCkkmIzM5O20gZ2V0dGluZyBhIGxpdHRsZSBjdXJpb3VzIGFzIHRvIHdoZXRoZXIgb3Igbm90IGByZHNfZ2V0X21yYCBhbmQgYHJkc19mcmVlX21yYCBhcmUgc3RhdGljLCBnaXZlbiB0aGVpciBsb3ctbGV2ZWwgbmF0dXJlLiBJ4oCZbGwgbWFrZSBzdXJlIHRvIGRvdWJsZS1jaGVjayB0aGVpciBzY29wZSB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlaXIgaW50ZW5kZWQgdXNhZ2UuIFRoaXMgZGV0YWlsIGNvdWxkIHByb3ZpZGUgaW5zaWdodCBpbnRvIHBvdGVudGlhbCBmdXR1cmUgbWFpbnRlbmFuY2UgY29uc2lkZXJhdGlvbnMsIHNvIEkmIzM5O2xsIHB1dCBhIHBpbiBpbiB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZHNfZ2V0X21yJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Jkcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9hZl9yZHMuYz00MzY9c3RhdGljIGludCByZHNfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9yZHMvYWZfcmRzLmMtNDUyLVx0Y2FzZSBSRFNfR0VUX01SOlxubmV0L3Jkcy9hZl9yZHMuYzo0NTM6XHRcdHJldCA9IHJkc19nZXRfbXIocnMsIG9wdHZhbCwgb3B0bGVuKTtcbm5ldC9yZHMvYWZfcmRzLmMtNDU0LVx0XHRicmVhaztcbm5ldC9yZHMvYWZfcmRzLmMtNDU1LVx0Y2FzZSBSRFNfR0VUX01SX0ZPUl9ERVNUOlxubmV0L3Jkcy9hZl9yZHMuYzo0NTY6XHRcdHJldCA9IHJkc19nZXRfbXJfZm9yX2Rlc3QocnMsIG9wdHZhbCwgb3B0bGVuKTtcbm5ldC9yZHMvYWZfcmRzLmMtNDU3LVx0XHRicmVhaztcbi0tXG5uZXQvcmRzL3JkbWEuYz0xNTU9c3RhdGljIGludCByZHNfcGluX3BhZ2VzKHVuc2lnbmVkIGxvbmcgdXNlcl9hZGRyLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXG4tLVxubmV0L3Jkcy9yZG1hLmMtMTcyLVxubmV0L3Jkcy9yZG1hLmM6MTczOnN0YXRpYyBpbnQgX19yZHNfcmRtYV9tYXAoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19nZXRfbXJfYXJncyAqYXJncyxcbm5ldC9yZHMvcmRtYS5jLTE3NC1cdFx0XHQgIHU2NCAqY29va2llX3JldCwgc3RydWN0IHJkc19tciAqKm1yX3JldCxcbi0tXG5uZXQvcmRzL3JkbWEuYy0zNTktXG5uZXQvcmRzL3JkbWEuYzozNjA6aW50IHJkc19nZXRfbXIoc3RydWN0IHJkc19zb2NrICpycywgc29ja3B0cl90IG9wdHZhbCwgaW50IG9wdGxlbilcbm5ldC9yZHMvcmRtYS5jLTM2MS17XG5uZXQvcmRzL3JkbWEuYzozNjI6XHRzdHJ1Y3QgcmRzX2dldF9tcl9hcmdzIGFyZ3M7XG5uZXQvcmRzL3JkbWEuYy0zNjMtXG5uZXQvcmRzL3JkbWEuYzozNjQ6XHRpZiAob3B0bGVuICE9IHNpemVvZihzdHJ1Y3QgcmRzX2dldF9tcl9hcmdzKSlcbm5ldC9yZHMvcmRtYS5jLTM2NS1cdFx0cmV0dXJuIC1FSU5WQUw7XG5uZXQvcmRzL3JkbWEuYy0zNjYtXG5uZXQvcmRzL3JkbWEuYzozNjc6XHRpZiAoY29weV9mcm9tX3NvY2twdHIoXHUwMDI2YXJncywgb3B0dmFsLCBzaXplb2Yoc3RydWN0IHJkc19nZXRfbXJfYXJncykpKVxubmV0L3Jkcy9yZG1hLmMtMzY4LVx0XHRyZXR1cm4gLUVGQVVMVDtcbi0tXG5uZXQvcmRzL3JkbWEuYy0zNzItXG5uZXQvcmRzL3JkbWEuYzozNzM6aW50IHJkc19nZXRfbXJfZm9yX2Rlc3Qoc3RydWN0IHJkc19zb2NrICpycywgc29ja3B0cl90IG9wdHZhbCwgaW50IG9wdGxlbilcbm5ldC9yZHMvcmRtYS5jLTM3NC17XG5uZXQvcmRzL3JkbWEuYzozNzU6XHRzdHJ1Y3QgcmRzX2dldF9tcl9mb3JfZGVzdF9hcmdzIGFyZ3M7XG5uZXQvcmRzL3JkbWEuYzozNzY6XHRzdHJ1Y3QgcmRzX2dldF9tcl9hcmdzIG5ld19hcmdzO1xubmV0L3Jkcy9yZG1hLmMtMzc3LVxubmV0L3Jkcy9yZG1hLmM6Mzc4Olx0aWYgKG9wdGxlbiAhPSBzaXplb2Yoc3RydWN0IHJkc19nZXRfbXJfZm9yX2Rlc3RfYXJncykpXG5uZXQvcmRzL3JkbWEuYy0zNzktXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC9yZHMvcmRtYS5jLTM4MS1cdGlmIChjb3B5X2Zyb21fc29ja3B0cihcdTAwMjZhcmdzLCBvcHR2YWwsXG5uZXQvcmRzL3JkbWEuYzozODI6XHRcdFx0ICAgc2l6ZW9mKHN0cnVjdCByZHNfZ2V0X21yX2Zvcl9kZXN0X2FyZ3MpKSlcbm5ldC9yZHMvcmRtYS5jLTM4My1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4tLVxubmV0L3Jkcy9yZG1hLmM9ODg2PWludCByZHNfY21zZ19yZG1hX21hcChzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLFxuLS1cbm5ldC9yZHMvcmRtYS5jLTg4OC17XG5uZXQvcmRzL3JkbWEuYzo4ODk6XHRpZiAoY21zZy1cdTAwM2VjbXNnX2xlbiBcdTAwM2MgQ01TR19MRU4oc2l6ZW9mKHN0cnVjdCByZHNfZ2V0X21yX2FyZ3MpKSB8fFxubmV0L3Jkcy9yZG1hLmMtODkwLVx0ICAgIHJtLVx1MDAzZW1fcmRtYV9jb29raWUgIT0gMClcbi0tXG5uZXQvcmRzL3Jkcy5oPTk3MD12b2lkIHJkc19yZG1hX3VudXNlKHN0cnVjdCByZHNfc29jayAqcnMsIHUzMiByX2tleSwgaW50IGZvcmNlKTtcbm5ldC9yZHMvcmRzLmg6OTcxOmludCByZHNfZ2V0X21yKHN0cnVjdCByZHNfc29jayAqcnMsIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pO1xubmV0L3Jkcy9yZHMuaDo5NzI6aW50IHJkc19nZXRfbXJfZm9yX2Rlc3Qoc3RydWN0IHJkc19zb2NrICpycywgc29ja3B0cl90IG9wdHZhbCwgaW50IG9wdGxlbik7XG5uZXQvcmRzL3Jkcy5oLTk3My1pbnQgcmRzX2ZyZWVfbXIoc3RydWN0IHJkc19zb2NrICpycywgc29ja3B0cl90IG9wdHZhbCwgaW50IG9wdGxlbik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDEzOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNTU2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFBvdGVudGlhbCBGb2N1cyBTeW1ib2xzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZXNlIFJEUyBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSB3aXRoIGFuIGV5ZSB0b3dhcmRzIHdoZXJlIFJETUEgb3BlcmF0aW9ucyBhcmUgaGFuZGxlZCBhbmQgcG90ZW50aWFsbHkgb3B0aW1pemVkLiBJJiMzOTt2ZSBhbHJlYWR5IGNvbmZpcm1lZCB0aGF0IGByZHNfZ2V0X21yYCwgYHJkc19nZXRfbXJfZm9yX2Rlc3RgLCBhbmQgYHJkc19mcmVlX21yYCBhcmUgbm9uLXN0YXRpYyDigJMgdGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgbGV0JiMzOTtzIHNlZS4uLiBJJiMzOTttIGFsc28gc2VlaW5nIHRoYXQgYHJkc19tZXNzYWdlX3B1dGAgaXMgZXhwb3J0ZWQuIFRoYXQgZ2V0cyBteSBhdHRlbnRpb24gYmVjYXVzZSBpdCYjMzk7cyBzbyBmdW5kYW1lbnRhbCB0byBtZXNzYWdlIGxpZmVjeWNsZSBtYW5hZ2VtZW50LgoKSW5pdGlhbGx5LCBJIGhhdmUgc29tZSBkb3VidHMsIGByZHNfbWVzc2FnZV9wdXRgIGlzIGV4ZWN1dGVkIGV2ZXJ5IHRpbWUgYSBtZXNzYWdlIGlzIGZyZWVkLCBzbyBjb3VsZCBiZSB0b28gaG90IG9mIGEgc3ltYm9sIHRvIGJlIHRoYXQgaW1wb3J0YW50LiBIb3dldmVyLCB0aGUgcGF0Y2ggaW4gcXVlc3Rpb24gaXMgbW9kaWZ5aW5nIHRoaXMgZnVuY3Rpb24gKnNwZWNpZmljYWxseSogd2hlbiBgcm0tJmd0O3JkbWEub3BfdW5waW5fZGVmZXJyZWRgIG9yIGBybS0mZ3Q7YXRvbWljLm9wX3VucGluX2RlZmVycmVkYCBhcmUgc2V0LiBUaGF0IG1ha2VzIGByZHNfbWVzc2FnZV9wdXRgIGEgdmVyeSByZWxldmFudCBjYW5kaWRhdGUuIFRoZSBiZWhhdmlvciBvZiB0aGlzIHN5bWJvbCBzZWVtcyBsaWtlIGl0IHdvdWxkIGJlIG9mIGludGVyZXN0IHRvIG1lLgoKTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHNvbWUgb3RoZXIgc3ltYm9scywgc3VjaCBhcyBgcmRzX3JkbWFfZnJlZV9vcGAsIGByZHNfYXRvbWljX2ZyZWVfb3BgLCBgcmRzX3JkbWFfb3BfdW5waW5fcGFnZXNgLCBhbmQgYHJkc19hdG9taWNfb3BfdW5waW5fcGFnZWAsIGFzIHRoZXkgYXJlIGFsc28gbm9uLXN0YXRpYywgc28gY291bGQgYmUgYSBjYW5kaWRhdGUuCgpOb3csIGxldCYjMzk7cyB6b29tIG91dCBhIGJpdC4gYHJkc19zZW5kbXNnYCBoYXMgdG8gYmUgYSBjcml0aWNhbCBlbnRyeSBwb2ludC4gSXQmIzM5O3MgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBhY3R1YWxseSBzZW5kaW5nIHRoZSBtZXNzYWdlcywgd2hpY2ggbWVhbnMgaXQmIzM5O3Mgd2hlcmUgUkRNQSBvcGVyYXRpb25zIGFyZSAqY3JlYXRlZCogYW5kIGF0dGFjaGVkIHRvIG1lc3NhZ2VzLiBUaGlzIG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBpbnZlc3RpZ2F0aW9uLgoKRmluYWxseSwgSSYjMzk7bGwgcXVpY2tseSBjaGVjayBgcmRzX2Ntc2dfcmRtYV9hcmdzYC4gSXQmIzM5O3MgY2FsbGVkIGZyb20gYHJkc19zZW5kbXNnYCB0byBwYXJzZSBSRE1BIGNvbnRyb2wgbWVzc2FnZXMuIEl0JiMzOTtzIG5vbi1zdGF0aWMsIHNvIHRoYXQgaW5kaWNhdGVzIGl0JiMzOTtzIGFjY2Vzc2libGUgYW5kIGltcG9ydGFudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTM6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmRzX2Ntc2dfcmRtYV9hcmdzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Jkcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9yZG1hLmM9NTg1PWludCByZHNfcmRtYV9leHRyYV9zaXplKHN0cnVjdCByZHNfcmRtYV9hcmdzICphcmdzLFxuLS1cbm5ldC9yZHMvcmRtYS5jLTYzNi0gKi9cbm5ldC9yZHMvcmRtYS5jOjYzNzppbnQgcmRzX2Ntc2dfcmRtYV9hcmdzKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sXG5uZXQvcmRzL3JkbWEuYy02MzgtXHRcdCAgICAgICBzdHJ1Y3QgY21zZ2hkciAqY21zZyxcbi0tXG5uZXQvcmRzL3Jkcy5oPTk3Nz1pbnQgcmRzX2Ntc2dfcmRtYV9kZXN0KHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sXG5uZXQvcmRzL3Jkcy5oLTk3OC1cdFx0XHQgIHN0cnVjdCBjbXNnaGRyICpjbXNnKTtcbm5ldC9yZHMvcmRzLmg6OTc5OmludCByZHNfY21zZ19yZG1hX2FyZ3Moc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcbm5ldC9yZHMvcmRzLmgtOTgwLVx0XHRcdCAgc3RydWN0IGNtc2doZHIgKmNtc2csXG4tLVxubmV0L3Jkcy9zZW5kLmM9MTA1Nz1zdGF0aWMgaW50IHJkc19jbXNnX3NlbmQoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcbi0tXG5uZXQvcmRzL3NlbmQuYy0xMDc3LVx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG5uZXQvcmRzL3NlbmQuYzoxMDc4Olx0XHRcdHJldCA9IHJkc19jbXNnX3JkbWFfYXJncyhycywgcm0sIGNtc2csIFx1MDAyNnZjdC1cdTAwM2V2ZWNbaW5kXSk7XG5uZXQvcmRzL3NlbmQuYy0xMDc5LVx0XHRcdGluZCYjNDM7JiM0Mzs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDEzOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNzAzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeToKCioqQW5hbHl6aW5nIFJETUEgQXJndW1lbnQgU2NvcGUqKgoKQWxyaWdodCwgc28gdGhlIGNvcmUgcXVlc3Rpb24gaGVyZSByZXZvbHZlcyBhcm91bmQgdGhlIHNjb3BlIG9mIGByZHNfY21zZ19yZG1hX2FyZ3NgLiBJIHF1aWNrbHkgdmVyaWZpZWQgdGhhdCwgeWVzLCBpdCYjMzk7cyBkZWZpbml0aXZlbHkgKm5vbi1zdGF0aWMqLiBUaGlzIG1lYW5zIGl0JiMzOTtzIGFjY2Vzc2libGUgb3V0c2lkZSB0aGUgaW1tZWRpYXRlIHNjb3BlIHdoZXJlIGl0JiMzOTtzIGRlZmluZWQg4oCTIG5vIHN1cnByaXNlcyB0aGVyZSwgZ2l2ZW4gaXRzIHJvbGUuCgpOb3csIG15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCBgcmRzX2Ntc2dfYXRvbWljYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBSRE1BIGFyZ3VtZW50cywgYW5kIHRoZWlyIGFjY2Vzc2liaWxpdHksIGludGVycGxheSB3aXRoIHRoZSBhdG9taWMgb3BlcmF0aW9ucyBjb250ZXh0LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBvZiB0aGVzZSBmdW5jdGlvbnMsIGFuZCBob3cgdGhlIGRhdGEgZmxvd3MgYmV0d2VlbiB0aGVtLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhvc2UgdHdvIGRlZmluaXRpb25zIGRpcmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZHNfY21zZ19hdG9taWMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcmRzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcmRzL3JkbWEuYz04ODY9aW50IHJkc19jbXNnX3JkbWFfbWFwKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sXG4tLVxubmV0L3Jkcy9yZG1hLmMtODk5LSAqL1xubmV0L3Jkcy9yZG1hLmM6OTAwOmludCByZHNfY21zZ19hdG9taWMoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcbm5ldC9yZHMvcmRtYS5jLTkwMS1cdFx0ICAgIHN0cnVjdCBjbXNnaGRyICpjbXNnKVxuLS1cbm5ldC9yZHMvcmRzLmg9OTg5PXZvaWQgcmRzX2F0b21pY19zZW5kX2NvbXBsZXRlKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sIGludCB3Y19zdGF0dXMpO1xubmV0L3Jkcy9yZHMuaDo5OTA6aW50IHJkc19jbXNnX2F0b21pYyhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLFxubmV0L3Jkcy9yZHMuaC05OTEtXHRcdCAgICBzdHJ1Y3QgY21zZ2hkciAqY21zZyk7XG4tLVxubmV0L3Jkcy9zZW5kLmM9MTA1Nz1zdGF0aWMgaW50IHJkc19jbXNnX3NlbmQoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcbi0tXG5uZXQvcmRzL3NlbmQuYy0xMDk5LVx0XHRjYXNlIFJEU19DTVNHX01BU0tFRF9BVE9NSUNfRkFERDpcbm5ldC9yZHMvc2VuZC5jOjExMDA6XHRcdFx0cmV0ID0gcmRzX2Ntc2dfYXRvbWljKHJzLCBybSwgY21zZyk7XG5uZXQvcmRzL3NlbmQuYy0xMTAxLVx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjI5NAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJZGVudGlmeWluZyBLZXkgU3ltYm9scyBmb3IgUmV2aWV3KioKCk9rYXksIHNvIEkmIzM5O20gZ29pbmcgdGhyb3VnaCB0aGlzIGNvZGUsIGZvY3VzaW5nIG9uIHN5bWJvbCB2aXNpYmlsaXR5LiBSaWdodCwgYHJkc19jbXNnX2F0b21pY2AgaXMgZGVmaW5pdGl2ZWx5IG5vdCBzdGF0aWMsIGdvb2QuIExldCYjMzk7cyBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBvYnZpb3VzIGluIHRoZSByZWxhdGVkIGNvZGUuIFJpZ2h0LCBjaGVja2luZyBgcmRzX3JkbWFfZnJlZV9vcGAgYW5kIGByZHNfYXRvbWljX2ZyZWVfb3BgLi4uIHRob3NlIGFyZW4mIzM5O3Qgc3RhdGljIGVpdGhlci4gTW92aW5nIG9uLCB3aGF0IGFib3V0IGByZHNfcmRtYV9vcF91bnBpbl9wYWdlc2AgYW5kIGByZHNfYXRvbWljX29wX3VucGluX3BhZ2VgPyBOb3BlLCBub24tc3RhdGljIGFzIHdlbGwuIEFuZCwgZGlnZ2luZyBmdXJ0aGVyLCBgX19yZHNfcHV0X21yX2ZpbmFsYCBpcyBhbHNvIG5vbi1zdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLgoKTm93LCBsZXQgbWUgbWFrZSBzdXJlIEkmIzM5O20gZ2V0dGluZyBldmVyeXRoaW5nLiBPa2F5LCBmaW5hbGx5LCBgcmRzX21lc3NhZ2VfdW5waW5fd29ya2VyYCBpcyBzdGF0aWMuIEFscmlnaHQsIHRoYXQmIzM5O3Mgd2hhdCBJIG5lZWRlZCB0byBjb25maXJtLgoKU28sIGJhc2VkIG9uIHRoaXMgcXVpY2sgc2NhbiwgdGhlIGNvcmUgc3ltYm9scyBJIG5lZWQgdG8gZm9jdXMgb24gYXJlOgoKKiAgIGByZHNfc2VuZG1zZ2AKKiAgIGByZHNfbWVzc2FnZV9wdXRgCiogICBgcmRzX2Ntc2dfcmRtYV9hcmdzYAoqICAgYHJkc19jbXNnX2F0b21pY2AKKiAgIGByZHNfcmRtYV9mcmVlX29wYAoqICAgYHJkc19hdG9taWNfZnJlZV9vcGAKKiAgIGByZHNfcmRtYV9vcF91bnBpbl9wYWdlc2AKKiAgIGByZHNfYXRvbWljX29wX3VucGluX3BhZ2VgCiogICBgX19yZHNfcHV0X21yX2ZpbmFsYAoqICAgYHJkc19nZXRfbXJgCiogICBgcmRzX2ZyZWVfbXJgCgpPaCwgd2FpdCBhIG1pbnV0ZSwgSSBmb3Jnb3QgYWJvdXQgYHJkc19zZW5kX3htaXRgIGlzIGFsc28gbW9kaWZpZWQuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdG9vLiBBbHJpZ2h0LCBsZXQmIzM5O3MgZ28gY2hlY2sgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTM6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmRzX3NlbmRfeG1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yZHMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yZHMvY29uZy5jPTIxNz12b2lkIHJkc19jb25nX3F1ZXVlX3VwZGF0ZXMoc3RydWN0IHJkc19jb25nX21hcCAqbWFwKVxuLS1cbm5ldC9yZHMvY29uZy5jLTIzMC1cdFx0XHRyZHNfc3RhdHNfaW5jKHNfY29uZ191cGRhdGVfcXVldWVkKTtcbm5ldC9yZHMvY29uZy5jOjIzMTpcdFx0XHQvKiBXZSBjYW5ub3QgaW5saW5lIHRoZSBjYWxsIHRvIHJkc19zZW5kX3htaXQoKSBoZXJlXG5uZXQvcmRzL2NvbmcuYy0yMzItXHRcdFx0ICogZm9yIHR3byByZWFzb25zIChib3RoIHBlcnRhaW5pbmcgdG8gYSBUQ1AgdHJhbnNwb3J0KTpcbi0tXG5uZXQvcmRzL2liX2NtLmM9MjgyPXN0YXRpYyB2b2lkIHJkc19pYl90YXNrbGV0X2ZuX3NlbmQodW5zaWduZWQgbG9uZyBkYXRhKVxuLS1cbm5ldC9yZHMvaWJfY20uYy0yOTktXHQgICAgdGVzdF9iaXQoMCwgXHUwMDI2Y29ubi1cdTAwM2VjX21hcF9xdWV1ZWQpKSlcbm5ldC9yZHMvaWJfY20uYzozMDA6XHRcdHJkc19zZW5kX3htaXQoXHUwMDI2aWMtXHUwMDNlY29ubi1cdTAwM2VjX3BhdGhbMF0pO1xubmV0L3Jkcy9pYl9jbS5jLTMwMS19XG4tLVxubmV0L3Jkcy9pYl9zZW5kLmM9MjQ1PXZvaWQgcmRzX2liX3NlbmRfY3FlX2hhbmRsZXIoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywgc3RydWN0IGliX3djICp3Yylcbi0tXG5uZXQvcmRzL2liX3NlbmQuYy0zMzUtICpcbm5ldC9yZHMvaWJfc2VuZC5jOjMzNjogKiBUaGUgUkRTIHNlbmQgY29kZSBpcyBlc3NlbnRpYWxseSBzaW5nbGUtdGhyZWFkZWQ7IHJkc19zZW5kX3htaXRcbm5ldC9yZHMvaWJfc2VuZC5jLTMzNy0gKiBzZXRzIFJEU19JTl9YTUlUIHRvIGVuc3VyZSBleGNsdXNpdmUgYWNjZXNzIHRvIHRoZSBzZW5kIHJpbmcuXG4tLVxubmV0L3Jkcy9sb29wLmM9MjMxPXZvaWQgcmRzX2xvb3BfbmV0X2V4aXQodm9pZClcbi0tXG5uZXQvcmRzL2xvb3AuYy0yMzctICogVGhpcyBpcyBtaXNzaW5nIC54bWl0XyogYmVjYXVzZSBsb29wIGRvZXNuJiMzOTt0IGdvIHRocm91Z2ggZ2VuZXJpY1xubmV0L3Jkcy9sb29wLmM6MjM4OiAqIHJkc19zZW5kX3htaXQoKSBhbmQgZG9lc24mIzM5O3QgY2FsbCByZHNfcmVjdl9pbmNvbWluZygpLiAgLmxpc3Rlbl9zdG9wIGFuZFxubmV0L3Jkcy9sb29wLmMtMjM5LSAqIC5sYWRkcl9jaGVjayBhcmUgbWlzc2luZyBiZWNhdXNlIHRyYW5zcG9ydC5jIGRvZXNuJiMzOTt0IGl0ZXJhdGUgb3ZlclxuLS1cbm5ldC9yZHMvcmRzLmg9NTQwPXN0cnVjdCByZHNfdHJhbnNwb3J0IHtcbi0tXG5uZXQvcmRzL3Jkcy5oLTU4MC1cdC8qXG5uZXQvcmRzL3Jkcy5oOjU4MTpcdCAqIC54bWl0IGlzIGNhbGxlZCBieSByZHNfc2VuZF94bWl0KCkgdG8gdGVsbCB0aGUgdHJhbnNwb3J0IHRvIHNlbmRcbm5ldC9yZHMvcmRzLmgtNTgyLVx0ICogcGFydCBvZiBhIG1lc3NhZ2UuICBUaGUgY2FsbGVyIHNlcmlhbGl6ZXMgb24gdGhlIHNlbmRfc2VtIHNvIHRoaXNcbi0tXG5uZXQvcmRzL3Jkcy5oPTk1Nz12b2lkIHJkc19zZW5kX3BhdGhfcmVzZXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNvbm4pO1xubmV0L3Jkcy9yZHMuaDo5NTg6aW50IHJkc19zZW5kX3htaXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKTtcbm5ldC9yZHMvcmRzLmgtOTU5LXN0cnVjdCBzb2NrYWRkcl9pbjtcbi0tXG5uZXQvcmRzL3NlbmQuYy00NC1cbm5ldC9yZHMvc2VuZC5jOjQ1Oi8qIFdoZW4gdHJhbnNtaXR0aW5nIG1lc3NhZ2VzIGluIHJkc19zZW5kX3htaXQsIHdlIG5lZWQgdG8gZW1lcmdlIGZyb21cbm5ldC9yZHMvc2VuZC5jLTQ2LSAqIHRpbWUgdG8gdGltZSBhbmQgYnJpZWZseSByZWxlYXNlIHRoZSBDUFUuIE90aGVyd2lzZSB0aGUgc29mdGxvY2sgd2F0Y2hkb2dcbi0tXG5uZXQvcmRzL3NlbmQuYz01OT1zdGF0aWMgdm9pZCByZHNfc2VuZF9yZW1vdmVfZnJvbV9zb2NrKHN0cnVjdCBsaXN0X2hlYWQgKm1lc3NhZ2VzLCBpbnQgc3RhdHVzKTtcbi0tXG5uZXQvcmRzL3NlbmQuYy02Mi0gKiBSZXNldCB0aGUgc2VuZCBzdGF0ZS4gIENhbGxlcnMgbXVzdCBlbnN1cmUgdGhhdCB0aGlzIGRvZXNuJiMzOTt0IHJhY2Ugd2l0aFxubmV0L3Jkcy9zZW5kLmM6NjM6ICogcmRzX3NlbmRfeG1pdCgpLlxubmV0L3Jkcy9zZW5kLmMtNjQtICovXG4tLVxubmV0L3Jkcy9zZW5kLmM9MTI4PXN0YXRpYyBib29sIHJkc19tcHJkc19jcDBfY2F0Y2h1cChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pXG4tLVxubmV0L3Jkcy9zZW5kLmMtMTg2LSAqL1xubmV0L3Jkcy9zZW5kLmM6MTg3OmludCByZHNfc2VuZF94bWl0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbm5ldC9yZHMvc2VuZC5jLTE4OC17XG4tLVxubmV0L3Jkcy9zZW5kLmMtNTQxLX1cbm5ldC9yZHMvc2VuZC5jOjU0MjpFWFBPUlRfU1lNQk9MX0dQTChyZHNfc2VuZF94bWl0KTtcbm5ldC9yZHMvc2VuZC5jLTU0My1cbi0tXG5uZXQvcmRzL3NlbmQuYz02NzY9c3RhdGljIHZvaWQgcmRzX3NlbmRfcmVtb3ZlX2Zyb21fc29jayhzdHJ1Y3QgbGlzdF9oZWFkICptZXNzYWdlcywgaW50IHN0YXR1cylcbi0tXG5uZXQvcmRzL3NlbmQuYy03NTEtICogbWVzc2FnZXMgdXAgdG8sIGFuZCBpbmNsdWRpbmcsIHRoZSBnaXZlbiBzZXF1ZW5jZSBudW1iZXIuICBNZXNzYWdlcyBhcmVcbm5ldC9yZHMvc2VuZC5jOjc1MjogKiBtb3ZlZCB0byB0aGUgcmV0cmFucyBxdWV1ZSB3aGVuIHJkc19zZW5kX3htaXQgcGlja3MgdGhlbSBvZmYgdGhlIHNlbmRcbm5ldC9yZHMvc2VuZC5jLTc1My0gKiBxdWV1ZS4gVGhpcyBtZWFucyB0aGF0IGluIHRoZSBUQ1AgY2FzZSwgdGhlIG1lc3NhZ2UgbWF5IG5vdCBoYXZlIGJlZW5cbi0tXG5uZXQvcmRzL3NlbmQuYz0xMTQxPWludCByZHNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBwYXlsb2FkX2xlbilcbi0tXG5uZXQvcmRzL3NlbmQuYy0xNDM4LVxubmV0L3Jkcy9zZW5kLmM6MTQzOTpcdHJldCA9IHJkc19zZW5kX3htaXQoY3BhdGgpO1xubmV0L3Jkcy9zZW5kLmMtMTQ0MC1cdGlmIChyZXQgPT0gLUVOT01FTSB8fCByZXQgPT0gLUVBR0FJTikge1xuLS1cbm5ldC9yZHMvdGNwLmM9MTI2PXZvaWQgcmRzX3RjcF9yZXNldF9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jayxcbi0tXG5uZXQvcmRzL3RjcC5jLTE0MC1cdCAqIGNwX3N0YXRlIHRvIHNvbWV0aGluZyBvdGhlciB0aGFuIFJEU19DT05OX1VQLCBhbmQgdGhlblxubmV0L3Jkcy90Y3AuYzoxNDE6XHQgKiB3YWl0aW5nIGZvciBhbnkgZXhpc3RpbmcgdGhyZWFkcyBpbiByZHNfc2VuZF94bWl0IHRvXG5uZXQvcmRzL3RjcC5jLTE0Mi1cdCAqIGNvbXBsZXRlIHJlbGVhc2VfaW5feG1pdCgpLiAoU3Vic2VxdWVudCB0aHJlYWRzIGVudGVyaW5nXG5uZXQvcmRzL3RjcC5jOjE0MzpcdCAqIHJkc19zZW5kX3htaXQoKSB3aWxsIGJhaWwgb24gIXJkc19jb25uX3VwKCkuXG5uZXQvcmRzL3RjcC5jLTE0NC1cdCAqXG4tLVxubmV0L3Jkcy90aHJlYWRzLmM9MTkxPXZvaWQgcmRzX3NlbmRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvcmRzL3RocmVhZHMuYy0xOTktXHRcdGNsZWFyX2JpdChSRFNfTExfU0VORF9GVUxMLCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncyk7XG5uZXQvcmRzL3RocmVhZHMuYzoyMDA6XHRcdHJldCA9IHJkc19zZW5kX3htaXQoY3ApO1xubmV0L3Jkcy90aHJlYWRzLmMtMjAxLVx0XHRjb25kX3Jlc2NoZWQoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTM6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ1NTIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgdGhlIE5vbi1TdGF0aWMgTmF0dXJlIG9mIHJkc1xfc2VuZFxfeG1pdCBhbmQgUmV2aWV3aW5nIFxfXF9yZHNcX2liXF90ZWFyZG93blxfbXIqKgoKUmlnaHQsIGByZHNfc2VuZF94bWl0YCBpcyBjb25maXJtZWQgYXMgbm9uLXN0YXRpYywgd2hpY2ggaXMgd2hhdCBJIHN1c3BlY3RlZC4gTWFrZXMgc2Vuc2UgZ2l2ZW4gaXRzIGxpa2VseSB1c2UgYWNyb3NzIGRpZmZlcmVudCBjb21wb25lbnRzIG9yIG1vZHVsZXMgd2l0aGluIHRoZSBSRFMgZnJhbWV3b3JrLiBOb3csIGxldCYjMzk7cyBqdXN0IHF1aWNrbHkgcGl2b3QgYW5kIHJldmlzaXQgdGhlIGxvZ2ljIHdpdGhpbiBgX19yZHNfaWJfdGVhcmRvd25fbXJgLiBOZWVkIHRvIGJlIHN1cmUgb2YgaG93IHRob3NlIG1lbW9yeSByZWdpc3RyYXRpb25zIGFyZSBiZWluZyBoYW5kbGVkIGR1cmluZyB0ZWFyZG93biwgZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byB0aGUgbm9uLXN0YXRpYyBuYXR1cmUgb2YgYHJkc19zZW5kX3htaXRgLiBUaGVyZSBtaWdodCBiZSBhIHN1YnRsZSBpbnRlcmFjdGlvbiB0aGVyZSB0aGF0IHdhcnJhbnRzIGEgZG91YmxlLWNoZWNrIHRvIG1ha2Ugc3VyZSBhbGwgbWVtb3J5IGlzIGJlaW5nIHJlbGVhc2VkIGdyYWNlZnVsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDEzOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fcmRzX2liX3RlYXJkb3duX21yJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Jkcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9pYl9mcm1yLmM9MzYxPXZvaWQgcmRzX2liX3VucmVnX2ZybXIoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgdW5zaWduZWQgaW50ICpuZnJlZWQsXG4tLVxubmV0L3Jkcy9pYl9mcm1yLmMtMzg0LVx0XHRmcm1yID0gXHUwMDI2aWJtci1cdTAwM2V1LmZybXI7XG5uZXQvcmRzL2liX2ZybXIuYzozODU6XHRcdF9fcmRzX2liX3RlYXJkb3duX21yKGlibXIpO1xubmV0L3Jkcy9pYl9mcm1yLmMtMzg2LVx0XHRpZiAoZnJlZWQgXHUwMDNjIGdvYWwgfHwgZnJtci1cdTAwM2Vmcl9zdGF0ZSA9PSBGUk1SX0lTX1NUQUxFKSB7XG4tLVxubmV0L3Jkcy9pYl9tci5oPTEyOD11MzIgcmRzX2liX2dldF9sa2V5KHZvaWQgKnRyYW5zX3ByaXZhdGUpO1xubmV0L3Jkcy9pYl9tci5oLTEyOS1cbm5ldC9yZHMvaWJfbXIuaDoxMzA6dm9pZCBfX3Jkc19pYl90ZWFyZG93bl9tcihzdHJ1Y3QgcmRzX2liX21yICopO1xubmV0L3Jkcy9pYl9tci5oLTEzMS12b2lkIHJkc19pYl90ZWFyZG93bl9tcihzdHJ1Y3QgcmRzX2liX21yICopO1xuLS1cbm5ldC9yZHMvaWJfcmRtYS5jPTIxND12b2lkIHJkc19pYl9zeW5jX21yKHZvaWQgKnRyYW5zX3ByaXZhdGUsIGludCBkaXJlY3Rpb24pXG4tLVxubmV0L3Jkcy9pYl9yZG1hLmMtMjMzLVxubmV0L3Jkcy9pYl9yZG1hLmM6MjM0OnZvaWQgX19yZHNfaWJfdGVhcmRvd25fbXIoc3RydWN0IHJkc19pYl9tciAqaWJtcilcbm5ldC9yZHMvaWJfcmRtYS5jLTIzNS17XG4tLVxubmV0L3Jkcy9pYl9yZG1hLmM9MjYzPXZvaWQgcmRzX2liX3RlYXJkb3duX21yKHN0cnVjdCByZHNfaWJfbXIgKmlibXIpXG4tLVxubmV0L3Jkcy9pYl9yZG1hLmMtMjY2LVxubmV0L3Jkcy9pYl9yZG1hLmM6MjY3Olx0X19yZHNfaWJfdGVhcmRvd25fbXIoaWJtcik7XG5uZXQvcmRzL2liX3JkbWEuYy0yNjgtXHRpZiAocGlubmVkKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDEzOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MjkyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmluaW5nIHRoZSBSRE1BIFN5bWJvbCBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgX19yZHNfaWJfdGVhcmRvd25fbXJgIGlzIGluZGVlZCBhIG5vbi1zdGF0aWMgc3ltYm9sLiBUaGF0JiMzOTtzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLiBOb3csIGJhc2VkIG9uIHRoaXMsIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZSBmb2xsb3dpbmcgc3ltYm9scy4gSSYjMzk7bSBhaW1pbmcgZm9yIGEgY29uY2lzZSBsaXN0IHRoYXQgY292ZXJzIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgcmVsYXRlZCB0byBSRE1BIGluIHRoZSBSRFMgcHJvdG9jb2wuIEl0IGxvb2tzIGxpa2UgdGhlIHJlbGV2YW50IHN5bWJvbHMgYXJlOgoKKiAgIGByZHNfc2VuZG1zZ2AKKiAgIGByZHNfbWVzc2FnZV9wdXRgCiogICBgcmRzX2Ntc2dfcmRtYV9hcmdzYAoqICAgYHJkc19jbXNnX2F0b21pY2AKKiAgIGByZHNfcmRtYV9mcmVlX29wYAoqICAgYHJkc19hdG9taWNfZnJlZV9vcGAKKiAgIGByZHNfcmRtYV9vcF91bnBpbl9wYWdlc2AKKiAgIGByZHNfYXRvbWljX29wX3VucGluX3BhZ2VgCiogICBgX19yZHNfcHV0X21yX2ZpbmFsYAoqICAgYHJkc19nZXRfbXJgCiogICBgcmRzX2ZyZWVfbXJgCiogICBgcmRzX3NlbmRfeG1pdGAKKiAgIGBfX3Jkc19pYl90ZWFyZG93bl9tcmAKClRoYXQmIzM5O3MgYSB0b3RhbCBvZiAxMyBzeW1ib2xzLiBJdCBzZWVtcyB0byBiZSBhIGNvbXByZWhlbnNpdmUsIHlldCBtYW5hZ2VhYmxlLCBzZXQgdG8gYW5hbHl6ZS4KCk5vdywgYXMgSSB1bmRlcnN0YW5kIGl0LCB0aGUgY3J1Y2lhbCBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIHRoaXMgYXJlIGxpa2VseSB0byBiZToKCiogICBgUkRTYAoqICAgYFJEU19SRE1BYAoqICAgYElORklOSUJBTkRgCiogICBgSU5GSU5JQkFORF9BRERSX1RSQU5TYAoKTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZG91YmxlLWNoZWNrIGlmIGBSRFNfUkRNQWAgaGFzIGFueSBvdGhlciBoaWRkZW4gZGVwZW5kZW5jaWVzLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcgdGhhdCBjb3VsZCBpbXBhY3QgdGhlIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUkRTX1JETUEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcmRzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9LY29uZmlnPTM9Y29uZmlnIFJEU1xuLS1cbm5ldC9yZHMvS2NvbmZpZy05LVxubmV0L3Jkcy9LY29uZmlnOjEwOmNvbmZpZyBSRFNfUkRNQVxubmV0L3Jkcy9LY29uZmlnLTExLVx0dHJpc3RhdGUgXCYjMzQ7UkRTIG92ZXIgSW5maW5pYmFuZFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjE0NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkluaXRpYWwgQXNzZXNzbWVudDogSW5maW5pYmFuZCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHdlJiMzOTt2ZSB0aWNrZWQgb2ZmIHNvbWUgaW5pdGlhbCBkZXBlbmRlbmN5IGNoZWNrcyDigJMgd2Uga25vdyBgUkRTYCwgYElORklOSUJBTkRgLCBhbmQgYElORklOSUJBTkRfQUREUl9UUkFOU2AgYXJlIGhhbmRsZWQuIEJ1dCwgd2l0aCBzb21ldGhpbmcgbGlrZSBJbmZpbmliYW5kLCBJJiMzOTttIGFsd2F5cyBhIGxpdHRsZSBwYXJhbm9pZC4gSXQmIzM5O3MgYSBjcml0aWNhbCBjb21wb25lbnQsIGFuZCBzdWJ0bGUgbWlzY29uZmlndXJhdGlvbnMgY2FuIGxlYWQgdG8gc29tZSB0cnVseSBiYWZmbGluZyBpc3N1ZXMgZG93bnN0cmVhbS4KClNvLCBsZXQmIzM5O3MganVzdCBtYWtlICphYnNvbHV0ZWx5KiBzdXJlIHRoYXQgYElORklOSUJBTkRfQUREUl9UUkFOU2AgaXMgYmVoYXZpbmcgYXMgZXhwZWN0ZWQsIGFuZCB0aGF0IGl0JiMzOTtzIGNvcnJlY3RseSBkZWZpbmVkIHdpdGhpbiB0aGUgZHJpdmVyJiMzOTtzIEtjb25maWcgZmlsZS4gSSYjMzk7bGwgcHVsbCB1cCBgZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWdgIGFuZCBnaXZlIGl0IGEgcXVpY2sgc2Nhbi4gVGhpcyBpcyBtb3JlIG9mIGEgc2FuaXR5IGNoZWNrIHRoYW4gYW55dGhpbmcsIGJ1dCBpdCYjMzk7cyB0aW1lIHdlbGwgc3BlbnQgd2hlbiBkZWFsaW5nIHdpdGggc29tZXRoaW5nIGFzIGNydWNpYWwgYXMgdGhpcy4gSXQmIzM5O3MgYWJvdXQgYmVpbmcgdGhvcm91Z2ggYW5kIG5vdCB0YWtpbmcgYW55dGhpbmcgZm9yIGdyYW50ZWQsIGVzcGVjaWFsbHkgd2l0aCBsb3ctbGV2ZWwgbmV0d29ya2luZyBjb21wb25lbnRzIGxpa2UgSW5maW5pYmFuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTM6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElORklOSUJBTkRfQUREUl9UUkFOUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnPTUxPWNvbmZpZyBJTkZJTklCQU5EX09OX0RFTUFORF9QQUdJTkdcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy02My1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjY0OmNvbmZpZyBJTkZJTklCQU5EX0FERFJfVFJBTlNcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTY1LVx0Ym9vbCBcJiMzNDtSRE1BL0NNXCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNzEtXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo3Mjpjb25maWcgSU5GSU5JQkFORF9BRERSX1RSQU5TX0NPTkZJR0ZTXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy03My1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY2MDQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA0NjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ29uZmlndXJhdGlvbiBhbmQgU3ltYm9sIFZlcmlmaWNhdGlvbiBmb3IgUkRNQSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIHByZXR0eSBzdXJlIGBJTkZJTklCQU5EX0FERFJfVFJBTlNgIGlzIGEgY29uZmlnIG9wdGlvbiByZWxldmFudCB0byB0aGlzLiBKdXN0IHRvIGJlIHRob3JvdWdoLCBJJiMzOTttIHF1aWNrbHkgdmVyaWZ5aW5nIGBSRFNfVENQYCB0b28sIGV2ZW4gdGhvdWdoIGl0IGlzbiYjMzk7dCAqc3RyaWN0bHkqIHJlcXVpcmVkIGZvciB0aGlzIHBhcnRpY3VsYXIgcGF0Y2g7IGVuYWJsaW5nIGl0IGlzIGdlbmVyYWxseSBhIGdvb2QgcHJhY3RpY2UuIFNpbmNlIHRoZSBwYXRjaCB0b3VjaGVzIGBuZXQvcmRzL2liX3JkbWEuY2AsIEkmIzM5O20gZG91YmxlLWNoZWNraW5nIHRoYXQgYENPTkZJR19SRFNfUkRNQWAgaXMsIG9mIGNvdXJzZSwgYSBoYXJkIHJlcXVpcmVtZW50LgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgdmlzaWJpbGl0eSBvZiBhIGZldyBzeW1ib2xzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGByZHNfcmRtYV9vcF91bnBpbl9wYWdlc2AgYW5kIGByZHNfYXRvbWljX29wX3VucGluX3BhZ2VgIGFyZSBhY2Nlc3NpYmxlLiBBaCwgdGhleSYjMzk7cmUgbm9uLXN0YXRpYywgZGVmaW5lZCBpbiBgbmV0L3Jkcy9yZG1hLmNgIGFuZCBkZWNsYXJlZCBpbiBgbmV0L3Jkcy9yZHMuaGAsIHNvIHdlIGFyZSBnb29kIHRoZXJlLiBUaGV5IGRvbiYjMzk7dCB1c2UgYEVYUE9SVF9TWU1CT0xgLCBidXQgdGhlaXIgbm9uLXN0YXRpYyBuYXR1cmUgbWVhbnMgdGhleSYjMzk7cmUgcHJvcGVybHkgc3ltYm9sLWRlZmluZWQuCgpOZXh0LCBJIGNoZWNrZWQgYHJkc19tZXNzYWdlX3VucGluX3dvcmtlcmAsIGJ1dCBpdCYjMzk7cyBzdGF0aWMsIHNvIHdlIGRvbiYjMzk7dCBuZWVkIHRvIGJlIGNvbmNlcm5lZCB3aXRoIGl0LiBBbmQgYHVucGluX3VzZXJfcGFnZXNfZGlydHlfbG9ja2AgaXMgYSBjb3JlIE1NIGZ1bmN0aW9uLCBzbyB3ZSBkb24mIzM5O3QgbmVlZCBpdCBlaXRoZXIuCgpMZXQmIzM5O3MgZG8gYSBmaW5hbCByZXZpZXcgb2YgdGhlIGNvcmUgc3ltYm9scyBJJiMzOTttIGZvY3VzaW5nIG9uOiBgcmRzX3NlbmRtc2dgLCBgcmRzX21lc3NhZ2VfcHV0YCwgYHJkc19jbXNnX3JkbWFfYXJnc2AsIGByZHNfY21zZ19hdG9taWNgLCBgcmRzX3JkbWFfZnJlZV9vcGAsIGByZHNfYXRvbWljX2ZyZWVfb3BgLCBgcmRzX3JkbWFfb3BfdW5waW5fcGFnZXNgLCBgcmRzX2F0b21pY19vcF91bnBpbl9wYWdlYCwgYF9fcmRzX3B1dF9tcl9maW5hbGAsIGByZHNfZ2V0X21yYCwgYHJkc19mcmVlX21yYCwgYHJkc19zZW5kX3htaXRgLCBhbmQgYF9fcmRzX2liX3RlYXJkb3duX21yYC4KCkFscmlnaHQsIGV2ZXJ5dGhpbmcgYXBwZWFycyB0byBiZSBpbiBvcmRlci4KCkp1c3QgYSBsYXN0IHF1aWNrIGNoZWNrIG9uIGBfX3Jkc19pYl90ZWFyZG93bl9tcmAgYW5kIGl0JiMzOTtzIGluIHRoZSBleHBlY3RlZCBsb2NhdGlvbiwgYG5ldC9yZHMvaWJfcmRtYS5jYC4gQWxsIGdvb2QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDEzOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fcmRzX2liX3RlYXJkb3duX21yJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Jkcy9pYl9yZG1hLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9pYl9yZG1hLmM9MjE0PXZvaWQgcmRzX2liX3N5bmNfbXIodm9pZCAqdHJhbnNfcHJpdmF0ZSwgaW50IGRpcmVjdGlvbilcbi0tXG5uZXQvcmRzL2liX3JkbWEuYy0yMzMtXG5uZXQvcmRzL2liX3JkbWEuYzoyMzQ6dm9pZCBfX3Jkc19pYl90ZWFyZG93bl9tcihzdHJ1Y3QgcmRzX2liX21yICppYm1yKVxubmV0L3Jkcy9pYl9yZG1hLmMtMjM1LXtcbi0tXG5uZXQvcmRzL2liX3JkbWEuYz0yNjM9dm9pZCByZHNfaWJfdGVhcmRvd25fbXIoc3RydWN0IHJkc19pYl9tciAqaWJtcilcbi0tXG5uZXQvcmRzL2liX3JkbWEuYy0yNjYtXG5uZXQvcmRzL2liX3JkbWEuYzoyNjc6XHRfX3Jkc19pYl90ZWFyZG93bl9tcihpYm1yKTtcbm5ldC9yZHMvaWJfcmRtYS5jLTI2OC1cdGlmIChwaW5uZWQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc4MjMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqQW5hbHl6aW5nIEZ1bmN0aW9uIFZpc2liaWxpdHkqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggZnVuY3Rpb24gc2NvcGUgaGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGNvbmZpcm1lZDogdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGlzIGRlZmluaXRlbHkgbm9uLXN0YXRpYy4gVGhlIGtleSBxdWVzdGlvbiBub3cgYmVjb21lcywgYXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgaW4gdGhpcyBhcmVhIHRoYXQgbWlnaHQgaGF2ZSB1bmRlcmdvbmUgY2hhbmdlcz8gQSBxdWljayBzY2FuIG9mIHJlbGF0ZWQgZnVuY3Rpb25zIGlzIGluIG9yZGVyIHRvIGJlIGNlcnRhaW4gb2YgdGhlIHNjb3BlIG9mIHRoZXNlIGNoYW5nZXMuCgpBbHJpZ2h0LCBjaGVja2luZyB0aGVzZSBzcGVjaWZpYyBmdW5jdGlvbnM6IGByZHNfbWVzc2FnZV9wdXJnZWAsIHRoYXQmIzM5O3Mgc3RhdGljLiBgcmRzX21lc3NhZ2VfdW5waW5fd29ya2VyYCBhbHNvIHN0YXRpYy4gQW5kIGBfX3Jkc19yZG1hX21hcGAsIHRoYXQgb25lIGlzIGFsc28gc3RhdGljLiBIb3dldmVyLCBgcmRzX3JkbWFfdW51c2VgIGlzIHRoZSBvbmUgdGhhdCYjMzk7cyAqbm90KiBzdGF0aWMuIEdvb2QuIFRoaXMgaXMgdGhlIGRpZmZlcmVuY2UgSSB3YXMgbG9va2luZyBmb3IuIE5vdyBJIGNhbiBwaW5wb2ludCBleGFjdGx5IHdoYXQmIzM5O3MgYmVlbiBjaGFuZ2VkIGFuZCB3aHksIGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGNoYW5nZSBtaWdodCBiZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTM6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmRzX3JkbWFfdW51c2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcmRzL3JkbWEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcmRzL3JkbWEuYz00MDA9aW50IHJkc19mcmVlX21yKHN0cnVjdCByZHNfc29jayAqcnMsIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXG4tLVxubmV0L3Jkcy9yZG1hLmMtNDIxLVx0ICogc28gbm9ib2R5IGVsc2UgZmluZHMgaXQuXG5uZXQvcmRzL3JkbWEuYzo0MjI6XHQgKiBUaGlzIHNob3VsZCBhbHNvIHByZXZlbnQgcmFjZXMgd2l0aCByZHNfcmRtYV91bnVzZS5cbm5ldC9yZHMvcmRtYS5jLTQyMy1cdCAqL1xuLS1cbm5ldC9yZHMvcmRtYS5jLTQ0NS0gKi9cbm5ldC9yZHMvcmRtYS5jOjQ0Njp2b2lkIHJkc19yZG1hX3VudXNlKHN0cnVjdCByZHNfc29jayAqcnMsIHUzMiByX2tleSwgaW50IGZvcmNlKVxubmV0L3Jkcy9yZG1hLmMtNDQ3LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgzMTMKCQkJCQkJCW91dHB1dDogMzA2CgkJCQkJCQl0aG91Z2h0czogMzMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEN1cnJlbnQgVGhpbmtpbmc6IFJEUyBSRE1BIE9wdGltaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgaW5jb3Jwb3JhdGUgYHJkc19yZG1hX3VudXNlYCBpbnRvIHRoZSBsaXN0IG9mIGNyaXRpY2FsIHN5bWJvbHMgd2UmIzM5O3JlIHRyYWNraW5nLiBJIHdhbnQgdG8gaGF2ZSBhIGNvbXByZWhlbnNpdmUgb3ZlcnZpZXcgb2YgdGhlIGtleSBjb21wb25lbnRzIGludm9sdmVkIGluIHRoaXMgUkRTIFJETUEgbW9kaWZpY2F0aW9uLgoKU28sIHRoZSBkZWZpbml0aXZlIGxpc3Qgb2Ygc3ltYm9scyBJJiMzOTttIGZvY3VzaW5nIG9uIGluY2x1ZGVzOgoqICAgYHJkc19zZW5kbXNnYAoqICAgYHJkc19tZXNzYWdlX3B1dGAKKiAgIGByZHNfY21zZ19yZG1hX2FyZ3NgCiogICBgcmRzX2Ntc2dfYXRvbWljYAoqICAgYHJkc19yZG1hX2ZyZWVfb3BgCiogICBgcmRzX2F0b21pY19mcmVlX29wYAoqICAgYHJkc19yZG1hX29wX3VucGluX3BhZ2VzYAoqICAgYHJkc19hdG9taWNfb3BfdW5waW5fcGFnZWAKKiAgIGBfX3Jkc19wdXRfbXJfZmluYWxgCiogICBgcmRzX2dldF9tcmAKKiAgIGByZHNfZnJlZV9tcmAKKiAgIGByZHNfc2VuZF94bWl0YAoqICAgYF9fcmRzX2liX3RlYXJkb3duX21yYAoqICAgYHJkc19yZG1hX3VudXNlYAoKQW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSBlc3NlbnRpYWwgZm9yIGNvbnRleHQgYXJlOgoqICAgYFJEU2AKKiAgIGBSRFNfUkRNQWAKKiAgIGBJTkZJTklCQU5EYAoqICAgYElORklOSUJBTkRfQUREUl9UUkFOU2AKCkZyb20gd2hhdCBJIGdhdGhlciwgdGhpcyBwYXRjaCBhZGRyZXNzZXMgdGhlIHdheSB0aGUgUkRTIHN1YnN5c3RlbSBkZWFscyB3aXRoIE1lbW9yeSBSZWdpb25zIChNUnMpIGFuZCBSRE1BIG9wZXJhdGlvbnMuIENydWNpYWxseSwgaXQmIzM5O3MgZGVmZXJyaW5nIHRoZSB1bnBpbm5pbmcgb2YgdXNlciBwYWdlcyB0byBhIHdvcmtxdWV1ZSB3aGVuIHRoZSBmaW5hbCAmIzM0O3B1dCYjMzQ7IGhhcHBlbnMgaW4gYW4gYXRvbWljIGNvbnRleHQuIFRoaXMgaXMgYSB2ZXJ5IHRhcmdldGVkIGZpeCwgYWRkcmVzc2luZyBwb3RlbnRpYWwgc2xlZXAtaW4tYXRvbWljIGlzc3VlcywgYSB3ZWxsLWtub3duIHZ1bG5lcmFiaWxpdHkuIFRoZSBpbXBsZW1lbnRhdGlvbiBhbHNvIGVuc3VyZXMgc29ja2V0IHJlZmVyZW5jZXMgYXJlIGhlbGQgd2hlbiBNUnMgYXJlIGNyZWF0ZWQsIHByZXZlbnRpbmcgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcy4KClRoaXMgaXMgYSBmdW5kYW1lbnRhbCBzaGlmdCBpbiB0aGUgY29yZSBSRFMgbG9naWMsIHdoaWNoIEkga25vdyBpcyBhY2Nlc3NpYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSXQgaXMgYSBmdW5jdGlvbmFsIHBhdGNoIHRoYXQgY291bGQgaGF2ZSBmYXItcmVhY2hpbmcgaW1wYWN0cy4KCkkgYW0gcmVhZHkgdG8gbW92ZSBmb3J3YXJkLCBhbmQgSSB3aWxsIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTM6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JEUyYjMzQ7LAogICAgJiMzNDtSRFNfUkRNQSYjMzQ7LAogICAgJiMzNDtJTkZJTklCQU5EJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkRfQUREUl9UUkFOUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Jkc19zZW5kbXNnJiMzNDssCiAgICAmIzM0O3Jkc19tZXNzYWdlX3B1dCYjMzQ7LAogICAgJiMzNDtyZHNfY21zZ19yZG1hX2FyZ3MmIzM0OywKICAgICYjMzQ7cmRzX2Ntc2dfYXRvbWljJiMzNDssCiAgICAmIzM0O3Jkc19yZG1hX2ZyZWVfb3AmIzM0OywKICAgICYjMzQ7cmRzX2F0b21pY19mcmVlX29wJiMzNDssCiAgICAmIzM0O3Jkc19yZG1hX29wX3VucGluX3BhZ2VzJiMzNDssCiAgICAmIzM0O3Jkc19hdG9taWNfb3BfdW5waW5fcGFnZSYjMzQ7LAogICAgJiMzNDtfX3Jkc19wdXRfbXJfZmluYWwmIzM0OywKICAgICYjMzQ7cmRzX2dldF9tciYjMzQ7LAogICAgJiMzNDtyZHNfZnJlZV9tciYjMzQ7LAogICAgJiMzNDtyZHNfc2VuZF94bWl0JiMzNDssCiAgICAmIzM0O19fcmRzX2liX3RlYXJkb3duX21yJiMzNDssCiAgICAmIzM0O3Jkc19yZG1hX3VudXNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSRFMgKFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMpIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGhvdyBtZW1vcnkgcmVnaW9ucyAoTVIpIGFuZCBSRE1BIG9wZXJhdGlvbnMgYXJlIGhhbmRsZWQuIEl0IGRlZmVycyB0aGUgdW5waW5uaW5nIG9mIHVzZXIgcGFnZXMgdG8gYSB3b3JrcXVldWUgaWYgdGhlIGZpbmFsIHB1dCBoYXBwZW5zIGluIGF0b21pYyBjb250ZXh0LCBmaXhpbmcgcG90ZW50aWFsIHNsZWVwLWluLWF0b21pYyBidWdzLiBJdCBhbHNvIGFkZHMgYSBzb2NrZXQgcmVmZXJlbmNlIGhvbGQgd2hlbiBhbiBNUiBpcyBjcmVhdGVkIHRvIGVuc3VyZSB0aGUgc29ja2V0IG91dGxpdmVzIHRoZSBNUiwgZml4aW5nIGEgdXNlLWFmdGVyLWZyZWUuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBSRFMgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JEUyYjMzQ7LAogICAgJiMzNDtSRFNfUkRNQSYjMzQ7LAogICAgJiMzNDtJTkZJTklCQU5EJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkRfQUREUl9UUkFOUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Jkc19zZW5kbXNnJiMzNDssCiAgICAmIzM0O3Jkc19tZXNzYWdlX3B1dCYjMzQ7LAogICAgJiMzNDtyZHNfY21zZ19yZG1hX2FyZ3MmIzM0OywKICAgICYjMzQ7cmRzX2Ntc2dfYXRvbWljJiMzNDssCiAgICAmIzM0O3Jkc19yZG1hX2ZyZWVfb3AmIzM0OywKICAgICYjMzQ7cmRzX2F0b21pY19mcmVlX29wJiMzNDssCiAgICAmIzM0O3Jkc19yZG1hX29wX3VucGluX3BhZ2VzJiMzNDssCiAgICAmIzM0O3Jkc19hdG9taWNfb3BfdW5waW5fcGFnZSYjMzQ7LAogICAgJiMzNDtfX3Jkc19wdXRfbXJfZmluYWwmIzM0OywKICAgICYjMzQ7cmRzX2dldF9tciYjMzQ7LAogICAgJiMzNDtyZHNfZnJlZV9tciYjMzQ7LAogICAgJiMzNDtyZHNfc2VuZF94bWl0JiMzNDssCiAgICAmIzM0O19fcmRzX2liX3RlYXJkb3duX21yJiMzNDssCiAgICAmIzM0O3Jkc19yZG1hX3VudXNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSRFMgKFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMpIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGhvdyBtZW1vcnkgcmVnaW9ucyAoTVIpIGFuZCBSRE1BIG9wZXJhdGlvbnMgYXJlIGhhbmRsZWQuIEl0IGRlZmVycyB0aGUgdW5waW5uaW5nIG9mIHVzZXIgcGFnZXMgdG8gYSB3b3JrcXVldWUgaWYgdGhlIGZpbmFsIHB1dCBoYXBwZW5zIGluIGF0b21pYyBjb250ZXh0LCBmaXhpbmcgcG90ZW50aWFsIHNsZWVwLWluLWF0b21pYyBidWdzLiBJdCBhbHNvIGFkZHMgYSBzb2NrZXQgcmVmZXJlbmNlIGhvbGQgd2hlbiBhbiBNUiBpcyBjcmVhdGVkIHRvIGVuc3VyZSB0aGUgc29ja2V0IG91dGxpdmVzIHRoZSBNUiwgZml4aW5nIGEgdXNlLWFmdGVyLWZyZWUuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBSRFMgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzowMjoyOS40NTc1MDc5OThaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzUzNTgyODMyNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUkRTXCIsXG4gICAgXCJSRFNfUkRNQVwiLFxuICAgIFwiSU5GSU5JQkFORFwiLFxuICAgIFwiSU5GSU5JQkFORF9BRERSX1RSQU5TXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmRzX3NlbmRtc2dcIixcbiAgICBcInJkc19tZXNzYWdlX3B1dFwiLFxuICAgIFwicmRzX2Ntc2dfcmRtYV9hcmdzXCIsXG4gICAgXCJyZHNfY21zZ19hdG9taWNcIixcbiAgICBcInJkc19yZG1hX2ZyZWVfb3BcIixcbiAgICBcInJkc19hdG9taWNfZnJlZV9vcFwiLFxuICAgIFwicmRzX3JkbWFfb3BfdW5waW5fcGFnZXNcIixcbiAgICBcInJkc19hdG9taWNfb3BfdW5waW5fcGFnZVwiLFxuICAgIFwiX19yZHNfcHV0X21yX2ZpbmFsXCIsXG4gICAgXCJyZHNfZ2V0X21yXCIsXG4gICAgXCJyZHNfZnJlZV9tclwiLFxuICAgIFwicmRzX3NlbmRfeG1pdFwiLFxuICAgIFwiX19yZHNfaWJfdGVhcmRvd25fbXJcIixcbiAgICBcInJkc19yZG1hX3VudXNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJEUyAoUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cykgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgaG93IG1lbW9yeSByZWdpb25zIChNUikgYW5kIFJETUEgb3BlcmF0aW9ucyBhcmUgaGFuZGxlZC4gSXQgZGVmZXJzIHRoZSB1bnBpbm5pbmcgb2YgdXNlciBwYWdlcyB0byBhIHdvcmtxdWV1ZSBpZiB0aGUgZmluYWwgcHV0IGhhcHBlbnMgaW4gYXRvbWljIGNvbnRleHQsIGZpeGluZyBwb3RlbnRpYWwgc2xlZXAtaW4tYXRvbWljIGJ1Z3MuIEl0IGFsc28gYWRkcyBhIHNvY2tldCByZWZlcmVuY2UgaG9sZCB3aGVuIGFuIE1SIGlzIGNyZWF0ZWQgdG8gZW5zdXJlIHRoZSBzb2NrZXQgb3V0bGl2ZXMgdGhlIE1SLCBmaXhpbmcgYSB1c2UtYWZ0ZXItZnJlZS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIFJEUyBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTM6MDI6MjkuNDU3NTEzODE4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njk5Mzk5OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3OWE2M2Y2MjJjNWRjMTVlMThiY2ZmNTE4OTZlNjkzNjEwNWQ1ZTg5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDMxIDEzOjAyOjI4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9yZHMvaWJfcmRtYS5jIGIvbmV0L3Jkcy9pYl9yZG1hLmNcXG5pbmRleCA5NTk0ZWEyNDVmN2ZlLi5kYjdlOTJlN2JkMjlmIDEwMDY0NFxcbi0tLSBhL25ldC9yZHMvaWJfcmRtYS5jXFxuKysrIGIvbmV0L3Jkcy9pYl9yZG1hLmNcXG5AQCAtMjUxLDkgKzI1MSw3IEBAIHZvaWQgX19yZHNfaWJfdGVhcmRvd25fbXIoc3RydWN0IHJkc19pYl9tciAqaWJtcilcXG4gXFxuIFxcdFxcdFxcdC8qIEZJWE1FIHdlIG5lZWQgYSB3YXkgdG8gdGVsbCBhIHIvdyBNUlxcbiBcXHRcXHRcXHQgKiBmcm9tIGEgci9vIE1SICovXFxuLVxcdFxcdFxcdFdBUk5fT04oIXBhZ2UtXFx1MDAzZW1hcHBpbmcgXFx1MDAyNlxcdTAwMjYgaXJxc19kaXNhYmxlZCgpKTtcXG4tXFx0XFx0XFx0c2V0X3BhZ2VfZGlydHkocGFnZSk7XFxuLVxcdFxcdFxcdHB1dF9wYWdlKHBhZ2UpO1xcbitcXHRcXHRcXHR1bnBpbl91c2VyX3BhZ2VzX2RpcnR5X2xvY2soXFx1MDAyNnBhZ2UsIDEsIHRydWUpO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGtmcmVlKGlibXItXFx1MDAzZXNnKTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9yZHMvbWVzc2FnZS5jIGIvbmV0L3Jkcy9tZXNzYWdlLmNcXG5pbmRleCA3ZmViMGViNjUzN2RiLi5mMjVmMjU5MjU4NmY3IDEwMDY0NFxcbi0tLSBhL25ldC9yZHMvbWVzc2FnZS5jXFxuKysrIGIvbmV0L3Jkcy9tZXNzYWdlLmNcXG5AQCAtMTgyLDYgKzE4MiwxOSBAQCBzdGF0aWMgdm9pZCByZHNfbWVzc2FnZV9wdXJnZShzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKVxcbiBcXHRcXHRrcmVmX3B1dChcXHUwMDI2cm0tXFx1MDAzZWF0b21pYy5vcF9yZG1hX21yLVxcdTAwM2VyX2tyZWYsIF9fcmRzX3B1dF9tcl9maW5hbCk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHJkc19tZXNzYWdlX3VucGluX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuK3tcXG4rXFx0c3RydWN0IHJkc19tZXNzYWdlICpybSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcmRzX21lc3NhZ2UsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIG1fdW5waW5fd29yayk7XFxuK1xcbitcXHRpZiAocm0tXFx1MDAzZXJkbWEub3BfdW5waW5fZGVmZXJyZWQpXFxuK1xcdFxcdHJkc19yZG1hX29wX3VucGluX3BhZ2VzKFxcdTAwMjZybS1cXHUwMDNlcmRtYSk7XFxuK1xcdGlmIChybS1cXHUwMDNlYXRvbWljLm9wX3VucGluX2RlZmVycmVkKVxcbitcXHRcXHRyZHNfYXRvbWljX29wX3VucGluX3BhZ2UoXFx1MDAyNnJtLVxcdTAwM2VhdG9taWMpO1xcbitcXG4rXFx0a2ZyZWUocm0pO1xcbit9XFxuK1xcbiB2b2lkIHJkc19tZXNzYWdlX3B1dChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKVxcbiB7XFxuIFxcdHJkc2RlYnVnKFxcXCJwdXQgcm0gJXAgcmVmICVkXFxcXG5cXFwiLCBybSwgcmVmY291bnRfcmVhZChcXHUwMDI2cm0tXFx1MDAzZW1fcmVmY291bnQpKTtcXG5AQCAtMTg5LDggKzIwMiwyMSBAQCB2b2lkIHJkc19tZXNzYWdlX3B1dChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKVxcbiBcXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZybS1cXHUwMDNlbV9yZWZjb3VudCkpIHtcXG4gXFx0XFx0QlVHX09OKCFsaXN0X2VtcHR5KFxcdTAwMjZybS1cXHUwMDNlbV9zb2NrX2l0ZW0pKTtcXG4gXFx0XFx0QlVHX09OKCFsaXN0X2VtcHR5KFxcdTAwMjZybS1cXHUwMDNlbV9jb25uX2l0ZW0pKTtcXG4rXFxuIFxcdFxcdHJkc19tZXNzYWdlX3B1cmdlKHJtKTtcXG4gXFxuK1xcdFxcdC8qIEEgZmluYWwgcHV0IGluIGF0b21pYyBjb250ZXh0IGNhbm5vdCBkaXJ0eSB0aGUgb3BzJ1xcbitcXHRcXHQgKiB1c2VyIHBhZ2VzIG9uIHVucGluLCBzbyByZHNfcmRtYV9mcmVlX29wKCkgYW5kXFxuK1xcdFxcdCAqIHJkc19hdG9taWNfZnJlZV9vcCgpIGRlZmVycmVkIGl0LiAgRmluaXNoIHRoZSB1bnBpbixcXG4rXFx0XFx0ICogYW5kIHRoZSBmcmVlLCBmcm9tIHByb2Nlc3MgY29udGV4dC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChybS1cXHUwMDNlcmRtYS5vcF91bnBpbl9kZWZlcnJlZCB8fFxcbitcXHRcXHQgICAgcm0tXFx1MDAzZWF0b21pYy5vcF91bnBpbl9kZWZlcnJlZCkge1xcbitcXHRcXHRcXHRJTklUX1dPUksoXFx1MDAyNnJtLVxcdTAwM2VtX3VucGluX3dvcmssIHJkc19tZXNzYWdlX3VucGluX3dvcmtlcik7XFxuK1xcdFxcdFxcdHF1ZXVlX3dvcmsocmRzX3dxLCBcXHUwMDI2cm0tXFx1MDAzZW1fdW5waW5fd29yayk7XFxuK1xcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0a2ZyZWUocm0pO1xcbiBcXHR9XFxuIH1cXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9yZG1hLmMgYi9uZXQvcmRzL3JkbWEuY1xcbmluZGV4IDYxZmI2ZTQ1MjgxYmYuLjA3ODA5MGQyOTJmYTMgMTAwNjQ0XFxuLS0tIGEvbmV0L3Jkcy9yZG1hLmNcXG4rKysgYi9uZXQvcmRzL3JkbWEuY1xcbkBAIC0xMTcsNiArMTE3LDcgQEAgdm9pZCBfX3Jkc19wdXRfbXJfZmluYWwoc3RydWN0IGtyZWYgKmtyZWYpXFxuIFxcdHN0cnVjdCByZHNfbXIgKm1yID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCByZHNfbXIsIHJfa3JlZik7XFxuIFxcbiBcXHRyZHNfZGVzdHJveV9tcihtcik7XFxuK1xcdHNvY2tfcHV0KHJkc19yc190b19zayhtci1cXHUwMDNlcl9zb2NrKSk7XFxuIFxcdGtmcmVlKG1yKTtcXG4gfVxcbiBcXG5AQCAtMjQzLDcgKzI0NCwxMSBAQCBzdGF0aWMgaW50IF9fcmRzX3JkbWFfbWFwKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfZ2V0X21yX2FyZ3MgKmFyZ3MsXFxuIFxcdGtyZWZfaW5pdChcXHUwMDI2bXItXFx1MDAzZXJfa3JlZik7XFxuIFxcdFJCX0NMRUFSX05PREUoXFx1MDAyNm1yLVxcdTAwM2VyX3JiX25vZGUpO1xcbiBcXHRtci1cXHUwMDNlcl90cmFucyA9IHJzLVxcdTAwM2Vyc190cmFuc3BvcnQ7XFxuK1xcdC8qIFRoZSBNUiBjYW4gb3V0bGl2ZSBpdHMgc29ja2V0OiBhIHNvY2tldCByZWZlcmVuY2UgaXMgaGVsZFxcbitcXHQgKiB1bnRpbCB0aGUgZmluYWwga3JlZiBpcyBkcm9wcGVkIGluIF9fcmRzX3B1dF9tcl9maW5hbCgpLlxcbitcXHQgKi9cXG4gXFx0bXItXFx1MDAzZXJfc29jayA9IHJzO1xcbitcXHRzb2NrX2hvbGQocmRzX3JzX3RvX3NrKHJzKSk7XFxuIFxcbiBcXHRpZiAoYXJncy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBSRFNfUkRNQV9VU0VfT05DRSlcXG4gXFx0XFx0bXItXFx1MDAzZXJfdXNlX29uY2UgPSAxO1xcbkBAIC00ODMsMjIgKzQ4OCwzNiBAQCB2b2lkIHJkc19yZG1hX3VudXNlKHN0cnVjdCByZHNfc29jayAqcnMsIHUzMiByX2tleSwgaW50IGZvcmNlKVxcbiBcXHRcXHRrcmVmX3B1dChcXHUwMDI2bXItXFx1MDAzZXJfa3JlZiwgX19yZHNfcHV0X21yX2ZpbmFsKTtcXG4gfVxcbiBcXG4tdm9pZCByZHNfcmRtYV9mcmVlX29wKHN0cnVjdCBybV9yZG1hX29wICpybylcXG4rdm9pZCByZHNfcmRtYV9vcF91bnBpbl9wYWdlcyhzdHJ1Y3Qgcm1fcmRtYV9vcCAqcm8pXFxuIHtcXG4gXFx0dW5zaWduZWQgaW50IGk7XFxuIFxcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgcm8tXFx1MDAzZW9wX25lbnRzOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBzZ19wYWdlKFxcdTAwMjZyby1cXHUwMDNlb3Bfc2dbaV0pO1xcbitcXG4rXFx0XFx0LyogTWFyayBwYWdlIGRpcnR5IGlmIGl0IHdhcyBwb3NzaWJseSBtb2RpZmllZCwgd2hpY2hcXG4rXFx0XFx0ICogaXMgdGhlIGNhc2UgZm9yIGEgUkRNQV9SRUFEIHdoaWNoIGNvcGllcyBmcm9tIHJlbW90ZVxcbitcXHRcXHQgKiB0byBsb2NhbCBtZW1vcnlcXG4rXFx0XFx0ICovXFxuK1xcdFxcdHVucGluX3VzZXJfcGFnZXNfZGlydHlfbG9jayhcXHUwMDI2cGFnZSwgMSwgIXJvLVxcdTAwM2VvcF93cml0ZSk7XFxuK1xcdH1cXG4rfVxcbitcXG4rdm9pZCByZHNfcmRtYV9mcmVlX29wKHN0cnVjdCBybV9yZG1hX29wICpybylcXG4re1xcbiBcXHRpZiAocm8tXFx1MDAzZW9wX29kcF9tcikge1xcbiBcXHRcXHRrcmVmX3B1dChcXHUwMDI2cm8tXFx1MDAzZW9wX29kcF9tci1cXHUwMDNlcl9rcmVmLCBfX3Jkc19wdXRfbXJfZmluYWwpO1xcbitcXHR9IGVsc2UgaWYgKGluX3Rhc2soKSB8fCByby1cXHUwMDNlb3Bfd3JpdGUpIHtcXG4rXFx0XFx0LyogQW4gUkRNQSB3cml0ZSdzIHBhZ2VzIGFyZSBvbmx5IHJlYWQgYnkgdGhlIHJlbW90ZVxcbitcXHRcXHQgKiBzaWRlOyB1bnBpbm5pbmcgd2l0aG91dCBkaXJ0eWluZyBkb2VzIG5vdCBzbGVlcC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJkc19yZG1hX29wX3VucGluX3BhZ2VzKHJvKTtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHJvLVxcdTAwM2VvcF9uZW50czsgaSsrKSB7XFxuLVxcdFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gc2dfcGFnZShcXHUwMDI2cm8tXFx1MDAzZW9wX3NnW2ldKTtcXG4tXFxuLVxcdFxcdFxcdC8qIE1hcmsgcGFnZSBkaXJ0eSBpZiBpdCB3YXMgcG9zc2libHkgbW9kaWZpZWQsIHdoaWNoXFxuLVxcdFxcdFxcdCAqIGlzIHRoZSBjYXNlIGZvciBhIFJETUFfUkVBRCB3aGljaCBjb3BpZXMgZnJvbSByZW1vdGVcXG4tXFx0XFx0XFx0ICogdG8gbG9jYWwgbWVtb3J5XFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHR1bnBpbl91c2VyX3BhZ2VzX2RpcnR5X2xvY2soXFx1MDAyNnBhZ2UsIDEsICFyby1cXHUwMDNlb3Bfd3JpdGUpO1xcbi1cXHRcXHR9XFxuK1xcdFxcdC8qIERpcnR5aW5nIHRoZSBwYWdlcyBvbiB1bnBpbiBjYW4gc2xlZXA7IGxlYXZlIHRoZW1cXG4rXFx0XFx0ICogcGlubmVkIGFuZCBoYXZlIHJkc19tZXNzYWdlX3B1dCgpIGZpbmlzaCB0aGUgdW5waW5cXG4rXFx0XFx0ICogZnJvbSBwcm9jZXNzIGNvbnRleHQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRyby1cXHUwMDNlb3BfdW5waW5fZGVmZXJyZWQgPSAxO1xcbiBcXHR9XFxuIFxcbiBcXHRrZnJlZShyby1cXHUwMDNlb3Bfbm90aWZpZXIpO1xcbkBAIC01MDcsNyArNTI2LDcgQEAgdm9pZCByZHNfcmRtYV9mcmVlX29wKHN0cnVjdCBybV9yZG1hX29wICpybylcXG4gXFx0cm8tXFx1MDAzZW9wX29kcF9tciA9IE5VTEw7XFxuIH1cXG4gXFxuLXZvaWQgcmRzX2F0b21pY19mcmVlX29wKHN0cnVjdCBybV9hdG9taWNfb3AgKmFvKVxcbit2b2lkIHJkc19hdG9taWNfb3BfdW5waW5fcGFnZShzdHJ1Y3Qgcm1fYXRvbWljX29wICphbylcXG4ge1xcbiBcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHNnX3BhZ2UoYW8tXFx1MDAzZW9wX3NnKTtcXG4gXFxuQEAgLTUxNSw2ICs1MzQsMTkgQEAgdm9pZCByZHNfYXRvbWljX2ZyZWVfb3Aoc3RydWN0IHJtX2F0b21pY19vcCAqYW8pXFxuIFxcdCAqIGlzIHRoZSBjYXNlIGZvciBhIFJETUFfUkVBRCB3aGljaCBjb3BpZXMgZnJvbSByZW1vdGVcXG4gXFx0ICogdG8gbG9jYWwgbWVtb3J5ICovXFxuIFxcdHVucGluX3VzZXJfcGFnZXNfZGlydHlfbG9jayhcXHUwMDI2cGFnZSwgMSwgdHJ1ZSk7XFxuK31cXG4rXFxuK3ZvaWQgcmRzX2F0b21pY19mcmVlX29wKHN0cnVjdCBybV9hdG9taWNfb3AgKmFvKVxcbit7XFxuK1xcdGlmIChpbl90YXNrKCkpIHtcXG4rXFx0XFx0cmRzX2F0b21pY19vcF91bnBpbl9wYWdlKGFvKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogRGlydHlpbmcgdGhlIHBhZ2Ugb24gdW5waW4gY2FuIHNsZWVwOyBsZWF2ZSBpdFxcbitcXHRcXHQgKiBwaW5uZWQgYW5kIGhhdmUgcmRzX21lc3NhZ2VfcHV0KCkgZmluaXNoIHRoZSB1bnBpblxcbitcXHRcXHQgKiBmcm9tIHByb2Nlc3MgY29udGV4dC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGFvLVxcdTAwM2VvcF91bnBpbl9kZWZlcnJlZCA9IDE7XFxuK1xcdH1cXG4gXFxuIFxcdGtmcmVlKGFvLVxcdTAwM2VvcF9ub3RpZmllcik7XFxuIFxcdGFvLVxcdTAwM2VvcF9ub3RpZmllciA9IE5VTEw7XFxuQEAgLTczMiw3ICs3NjQsMTIgQEAgaW50IHJkc19jbXNnX3JkbWFfYXJncyhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLFxcbiBcXHRcXHRcXHRSQl9DTEVBUl9OT0RFKFxcdTAwMjZsb2NhbF9vZHBfbXItXFx1MDAzZXJfcmJfbm9kZSk7XFxuIFxcdFxcdFxcdGtyZWZfaW5pdChcXHUwMDI2bG9jYWxfb2RwX21yLVxcdTAwM2VyX2tyZWYpO1xcbiBcXHRcXHRcXHRsb2NhbF9vZHBfbXItXFx1MDAzZXJfdHJhbnMgPSBycy1cXHUwMDNlcnNfdHJhbnNwb3J0O1xcbitcXHRcXHRcXHQvKiBUaGUgTVIgY2FuIG91dGxpdmUgaXRzIHNvY2tldDogYSBzb2NrZXRcXG4rXFx0XFx0XFx0ICogcmVmZXJlbmNlIGlzIGhlbGQgdW50aWwgdGhlIGZpbmFsIGtyZWYgaXNcXG4rXFx0XFx0XFx0ICogZHJvcHBlZCBpbiBfX3Jkc19wdXRfbXJfZmluYWwoKS5cXG4rXFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdGxvY2FsX29kcF9tci1cXHUwMDNlcl9zb2NrID0gcnM7XFxuK1xcdFxcdFxcdHNvY2tfaG9sZChyZHNfcnNfdG9fc2socnMpKTtcXG4gXFx0XFx0XFx0bG9jYWxfb2RwX21yLVxcdTAwM2VyX3RyYW5zX3ByaXZhdGUgPVxcbiBcXHRcXHRcXHRcXHRycy1cXHUwMDNlcnNfdHJhbnNwb3J0LVxcdTAwM2VnZXRfbXIoXFxuIFxcdFxcdFxcdFxcdFxcdE5VTEwsIDAsIHJzLCBcXHUwMDI2bG9jYWxfb2RwX21yLVxcdTAwM2VyX2tleSwgTlVMTCxcXG5AQCAtNzQxLDcgKzc3OCw5IEBAIGludCByZHNfY21zZ19yZG1hX2FyZ3Moc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcXG4gXFx0XFx0XFx0XFx0cmV0ID0gUFRSX0VSUihsb2NhbF9vZHBfbXItXFx1MDAzZXJfdHJhbnNfcHJpdmF0ZSk7XFxuIFxcdFxcdFxcdFxcdHJkc2RlYnVnKFxcXCJnZXRfbXIgcmV0ICVkICVwXFxcXFxcXCJcXFwiLCByZXQsXFxuIFxcdFxcdFxcdFxcdFxcdCBsb2NhbF9vZHBfbXItXFx1MDAzZXJfdHJhbnNfcHJpdmF0ZSk7XFxuLVxcdFxcdFxcdFxcdGtmcmVlKGxvY2FsX29kcF9tcik7XFxuK1xcdFxcdFxcdFxcdGxvY2FsX29kcF9tci1cXHUwMDNlcl90cmFuc19wcml2YXRlID0gTlVMTDtcXG4rXFx0XFx0XFx0XFx0a3JlZl9wdXQoXFx1MDAyNmxvY2FsX29kcF9tci1cXHUwMDNlcl9rcmVmLFxcbitcXHRcXHRcXHRcXHRcXHQgX19yZHNfcHV0X21yX2ZpbmFsKTtcXG4gXFx0XFx0XFx0XFx0cmV0ID0gLUVPUE5PVFNVUFA7XFxuIFxcdFxcdFxcdFxcdGdvdG8gb3V0X3BhZ2VzO1xcbiBcXHRcXHRcXHR9XFxuZGlmZiAtLWdpdCBhL25ldC9yZHMvcmRzLmggYi9uZXQvcmRzL3Jkcy5oXFxuaW5kZXggNmUwNzkwZTRiNTcwMy4uMmRiNDk1NzNkYWNkNSAxMDA2NDRcXG4tLS0gYS9uZXQvcmRzL3Jkcy5oXFxuKysrIGIvbmV0L3Jkcy9yZHMuaFxcbkBAIC0zMjAsNyArMzIwLDEwIEBAIHN0cnVjdCByZHNfbXIge1xcbiBcXHR1bnNpZ25lZCBpbnRcXHRcXHRyX2ludmFsaWRhdGU6MTtcXG4gXFx0dW5zaWduZWQgaW50XFx0XFx0cl93cml0ZToxO1xcbiBcXG4tXFx0c3RydWN0IHJkc19zb2NrXFx0XFx0KnJfc29jazsgLyogYmFjayBwb2ludGVyIHRvIHRoZSBzb2NrZXQgdGhhdCBvd25zIHVzICovXFxuK1xcdHN0cnVjdCByZHNfc29ja1xcdFxcdCpyX3NvY2s7IC8qIHNvY2tldCB0aGF0IG93bnMgdXM7IGNvdW50ZWRcXG4rXFx0XFx0XFx0XFx0XFx0ICAqIHJlZmVyZW5jZSwgZHJvcHBlZCBieVxcbitcXHRcXHRcXHRcXHRcXHQgICogX19yZHNfcHV0X21yX2ZpbmFsKClcXG4rXFx0XFx0XFx0XFx0XFx0ICAqL1xcbiBcXHRzdHJ1Y3QgcmRzX3RyYW5zcG9ydFxcdCpyX3RyYW5zO1xcbiBcXHR2b2lkXFx0XFx0XFx0KnJfdHJhbnNfcHJpdmF0ZTtcXG4gfTtcXG5AQCAtNDQ1LDYgKzQ0OCwxMiBAQCBzdHJ1Y3QgcmRzX21lc3NhZ2Uge1xcbiBcXG4gXFx0dm9pZFxcdFxcdFxcdCptX2ZpbmFsX29wO1xcbiBcXG4rXFx0LyogVW5waW5zIHRoZSBvcHMnIHVzZXIgcGFnZXMgYW5kIGZyZWVzIHRoZSBtZXNzYWdlIGZyb21cXG4rXFx0ICogcHJvY2VzcyBjb250ZXh0IHdoZW4gdGhlIGZpbmFsIHB1dCBoYXBwZW5zIGluIGF0b21pY1xcbitcXHQgKiBjb250ZXh0OiBkaXJ0eWluZyB0aGUgcGFnZXMgb24gdW5waW4gY2FuIHNsZWVwLlxcbitcXHQgKi9cXG4rXFx0c3RydWN0IHdvcmtfc3RydWN0XFx0bV91bnBpbl93b3JrO1xcbitcXG4gXFx0c3RydWN0IHtcXG4gXFx0XFx0c3RydWN0IHJtX2F0b21pY19vcCB7XFxuIFxcdFxcdFxcdGludFxcdFxcdFxcdG9wX3R5cGU7XFxuQEAgLTQ2OCw2ICs0NzcsNyBAQCBzdHJ1Y3QgcmRzX21lc3NhZ2Uge1xcbiBcXHRcXHRcXHR1bnNpZ25lZCBpbnRcXHRcXHRvcF9tYXBwZWQ6MTtcXG4gXFx0XFx0XFx0dW5zaWduZWQgaW50XFx0XFx0b3Bfc2lsZW50OjE7XFxuIFxcdFxcdFxcdHVuc2lnbmVkIGludFxcdFxcdG9wX2FjdGl2ZToxO1xcbitcXHRcXHRcXHR1bnNpZ25lZCBpbnRcXHRcXHRvcF91bnBpbl9kZWZlcnJlZDoxO1xcbiBcXHRcXHRcXHRzdHJ1Y3Qgc2NhdHRlcmxpc3RcXHQqb3Bfc2c7XFxuIFxcdFxcdFxcdHN0cnVjdCByZHNfbm90aWZpZXJcXHQqb3Bfbm90aWZpZXI7XFxuIFxcbkBAIC00ODMsNiArNDkzLDcgQEAgc3RydWN0IHJkc19tZXNzYWdlIHtcXG4gXFx0XFx0XFx0dW5zaWduZWQgaW50XFx0XFx0b3BfbWFwcGVkOjE7XFxuIFxcdFxcdFxcdHVuc2lnbmVkIGludFxcdFxcdG9wX3NpbGVudDoxO1xcbiBcXHRcXHRcXHR1bnNpZ25lZCBpbnRcXHRcXHRvcF9hY3RpdmU6MTtcXG4rXFx0XFx0XFx0dW5zaWduZWQgaW50XFx0XFx0b3BfdW5waW5fZGVmZXJyZWQ6MTtcXG4gXFx0XFx0XFx0dW5zaWduZWQgaW50XFx0XFx0b3BfYnl0ZXM7XFxuIFxcdFxcdFxcdHVuc2lnbmVkIGludFxcdFxcdG9wX25lbnRzO1xcbiBcXHRcXHRcXHR1bnNpZ25lZCBpbnRcXHRcXHRvcF9jb3VudDtcXG5AQCAtOTcyLDYgKzk4Myw4IEBAIGludCByZHNfY21zZ19yZG1hX21hcChzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLFxcbiBcXHRcXHRcXHQgIHN0cnVjdCBjbXNnaGRyICpjbXNnKTtcXG4gdm9pZCByZHNfcmRtYV9mcmVlX29wKHN0cnVjdCBybV9yZG1hX29wICpybyk7XFxuIHZvaWQgcmRzX2F0b21pY19mcmVlX29wKHN0cnVjdCBybV9hdG9taWNfb3AgKmFvKTtcXG4rdm9pZCByZHNfcmRtYV9vcF91bnBpbl9wYWdlcyhzdHJ1Y3Qgcm1fcmRtYV9vcCAqcm8pO1xcbit2b2lkIHJkc19hdG9taWNfb3BfdW5waW5fcGFnZShzdHJ1Y3Qgcm1fYXRvbWljX29wICphbyk7XFxuIHZvaWQgcmRzX3JkbWFfc2VuZF9jb21wbGV0ZShzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLCBpbnQgd2Nfc3RhdHVzKTtcXG4gdm9pZCByZHNfYXRvbWljX3NlbmRfY29tcGxldGUoc3RydWN0IHJkc19tZXNzYWdlICpybSwgaW50IHdjX3N0YXR1cyk7XFxuIGludCByZHNfY21zZ19hdG9taWMoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9zZW5kLmMgYi9uZXQvcmRzL3NlbmQuY1xcbmluZGV4IDY4YmUxYmYwZTBhZGYuLjdlNDhmNjRkZmFhNjcgMTAwNjQ0XFxuLS0tIGEvbmV0L3Jkcy9zZW5kLmNcXG4rKysgYi9uZXQvcmRzL3NlbmQuY1xcbkBAIC0zMzksOSArMzM5LDIxIEBAIGludCByZHNfc2VuZF94bWl0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcXG4gXFx0XFx0XFx0ICAgIChybS1cXHUwMDNlcmRtYS5vcF9hY3RpdmUgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0XFx0ICAgIHRlc3RfYml0KFJEU19NU0dfUkVUUkFOU01JVFRFRCwgXFx1MDAyNnJtLVxcdTAwM2VtX2ZsYWdzKSkpIHtcXG4gXFx0XFx0XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmNwLVxcdTAwM2VjcF9sb2NrLCBmbGFncyk7XFxuLVxcdFxcdFxcdFxcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUkRTX01TR19PTl9DT05OLCBcXHUwMDI2cm0tXFx1MDAzZW1fZmxhZ3MpKVxcbi1cXHRcXHRcXHRcXHRcXHRsaXN0X21vdmUoXFx1MDAyNnJtLVxcdTAwM2VtX2Nvbm5faXRlbSwgXFx1MDAyNnRvX2JlX2Ryb3BwZWQpO1xcbi1cXHRcXHRcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZjcC1cXHUwMDNlY3BfbG9jaywgZmxhZ3MpO1xcbitcXHRcXHRcXHRcXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KFJEU19NU0dfT05fQ09OTixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZybS1cXHUwMDNlbV9mbGFncykpIHtcXG4rXFx0XFx0XFx0XFx0XFx0Lyogb3VyIHJlZiBpcyBwdXQgYWZ0ZXIgdGhlIGJhdGNoICovXFxuK1xcdFxcdFxcdFxcdFxcdGxpc3RfbW92ZShcXHUwMDI2cm0tXFx1MDAzZW1fY29ubl9pdGVtLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZ0b19iZV9kcm9wcGVkKTtcXG4rXFx0XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2Y3AtXFx1MDAzZWNwX2xvY2ssXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBmbGFncyk7XFxuK1xcdFxcdFxcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdFxcdFxcdC8qIGFscmVhZHkgb2ZmIHRoZSBjb25uIGxpc3Q7IGRyb3BcXG4rXFx0XFx0XFx0XFx0XFx0ICogdGhlIHJlZiB0YWtlbiBhYm92ZSBvdXJzZWx2ZXNcXG4rXFx0XFx0XFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmNwLVxcdTAwM2VjcF9sb2NrLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgZmxhZ3MpO1xcbitcXHRcXHRcXHRcXHRcXHRyZHNfbWVzc2FnZV9wdXQocm0pO1xcbitcXHRcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRcXHR9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzowMjoyOS45MjgzODI0MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEzNDg4NzM5OTk3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJSRFNcIixcbiAgICBcIlJEU19SRE1BXCIsXG4gICAgXCJJTkZJTklCQU5EXCIsXG4gICAgXCJJTkZJTklCQU5EX0FERFJfVFJBTlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZHNfc2VuZG1zZ1wiLFxuICAgIFwicmRzX21lc3NhZ2VfcHV0XCIsXG4gICAgXCJyZHNfY21zZ19yZG1hX2FyZ3NcIixcbiAgICBcInJkc19jbXNnX2F0b21pY1wiLFxuICAgIFwicmRzX3JkbWFfZnJlZV9vcFwiLFxuICAgIFwicmRzX2F0b21pY19mcmVlX29wXCIsXG4gICAgXCJyZHNfcmRtYV9vcF91bnBpbl9wYWdlc1wiLFxuICAgIFwicmRzX2F0b21pY19vcF91bnBpbl9wYWdlXCIsXG4gICAgXCJfX3Jkc19wdXRfbXJfZmluYWxcIixcbiAgICBcInJkc19nZXRfbXJcIixcbiAgICBcInJkc19mcmVlX21yXCIsXG4gICAgXCJyZHNfc2VuZF94bWl0XCIsXG4gICAgXCJfX3Jkc19pYl90ZWFyZG93bl9tclwiLFxuICAgIFwicmRzX3JkbWFfdW51c2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgUkRTIChSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzKSBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBob3cgbWVtb3J5IHJlZ2lvbnMgKE1SKSBhbmQgUkRNQSBvcGVyYXRpb25zIGFyZSBoYW5kbGVkLiBJdCBkZWZlcnMgdGhlIHVucGlubmluZyBvZiB1c2VyIHBhZ2VzIHRvIGEgd29ya3F1ZXVlIGlmIHRoZSBmaW5hbCBwdXQgaGFwcGVucyBpbiBhdG9taWMgY29udGV4dCwgZml4aW5nIHBvdGVudGlhbCBzbGVlcC1pbi1hdG9taWMgYnVncy4gSXQgYWxzbyBhZGRzIGEgc29ja2V0IHJlZmVyZW5jZSBob2xkIHdoZW4gYW4gTVIgaXMgY3JlYXRlZCB0byBlbnN1cmUgdGhlIHNvY2tldCBvdXRsaXZlcyB0aGUgTVIsIGZpeGluZyBhIHVzZS1hZnRlci1mcmVlLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgUkRTIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3OWE2M2Y2MjJjNWRjMTVlMThiY2ZmNTE4OTZlNjkzNjEwNWQ1ZTg5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMzEgMTM6MDI6MjggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvcmRzL2liX3JkbWEuYyBiL25ldC9yZHMvaWJfcmRtYS5jXG5pbmRleCA5NTk0ZWEyNDVmN2ZlLi5kYjdlOTJlN2JkMjlmIDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9pYl9yZG1hLmNcbisrKyBiL25ldC9yZHMvaWJfcmRtYS5jXG5AQCAtMjUxLDkgKzI1MSw3IEBAIHZvaWQgX19yZHNfaWJfdGVhcmRvd25fbXIoc3RydWN0IHJkc19pYl9tciAqaWJtcilcbiBcbiBcdFx0XHQvKiBGSVhNRSB3ZSBuZWVkIGEgd2F5IHRvIHRlbGwgYSByL3cgTVJcbiBcdFx0XHQgKiBmcm9tIGEgci9vIE1SICovXG4tXHRcdFx0V0FSTl9PTighcGFnZS1cdTAwM2VtYXBwaW5nIFx1MDAyNlx1MDAyNiBpcnFzX2Rpc2FibGVkKCkpO1xuLVx0XHRcdHNldF9wYWdlX2RpcnR5KHBhZ2UpO1xuLVx0XHRcdHB1dF9wYWdlKHBhZ2UpO1xuK1x0XHRcdHVucGluX3VzZXJfcGFnZXNfZGlydHlfbG9jayhcdTAwMjZwYWdlLCAxLCB0cnVlKTtcbiBcdFx0fVxuIFx0XHRrZnJlZShpYm1yLVx1MDAzZXNnKTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvcmRzL21lc3NhZ2UuYyBiL25ldC9yZHMvbWVzc2FnZS5jXG5pbmRleCA3ZmViMGViNjUzN2RiLi5mMjVmMjU5MjU4NmY3IDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9tZXNzYWdlLmNcbisrKyBiL25ldC9yZHMvbWVzc2FnZS5jXG5AQCAtMTgyLDYgKzE4MiwxOSBAQCBzdGF0aWMgdm9pZCByZHNfbWVzc2FnZV9wdXJnZShzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKVxuIFx0XHRrcmVmX3B1dChcdTAwMjZybS1cdTAwM2VhdG9taWMub3BfcmRtYV9tci1cdTAwM2VyX2tyZWYsIF9fcmRzX3B1dF9tcl9maW5hbCk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHJkc19tZXNzYWdlX3VucGluX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4re1xuK1x0c3RydWN0IHJkc19tZXNzYWdlICpybSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcmRzX21lc3NhZ2UsXG4rXHRcdFx0XHRcdCAgICAgIG1fdW5waW5fd29yayk7XG4rXG4rXHRpZiAocm0tXHUwMDNlcmRtYS5vcF91bnBpbl9kZWZlcnJlZClcbitcdFx0cmRzX3JkbWFfb3BfdW5waW5fcGFnZXMoXHUwMDI2cm0tXHUwMDNlcmRtYSk7XG4rXHRpZiAocm0tXHUwMDNlYXRvbWljLm9wX3VucGluX2RlZmVycmVkKVxuK1x0XHRyZHNfYXRvbWljX29wX3VucGluX3BhZ2UoXHUwMDI2cm0tXHUwMDNlYXRvbWljKTtcbitcbitcdGtmcmVlKHJtKTtcbit9XG4rXG4gdm9pZCByZHNfbWVzc2FnZV9wdXQoc3RydWN0IHJkc19tZXNzYWdlICpybSlcbiB7XG4gXHRyZHNkZWJ1ZyhcInB1dCBybSAlcCByZWYgJWRcXG5cIiwgcm0sIHJlZmNvdW50X3JlYWQoXHUwMDI2cm0tXHUwMDNlbV9yZWZjb3VudCkpO1xuQEAgLTE4OSw4ICsyMDIsMjEgQEAgdm9pZCByZHNfbWVzc2FnZV9wdXQoc3RydWN0IHJkc19tZXNzYWdlICpybSlcbiBcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2cm0tXHUwMDNlbV9yZWZjb3VudCkpIHtcbiBcdFx0QlVHX09OKCFsaXN0X2VtcHR5KFx1MDAyNnJtLVx1MDAzZW1fc29ja19pdGVtKSk7XG4gXHRcdEJVR19PTighbGlzdF9lbXB0eShcdTAwMjZybS1cdTAwM2VtX2Nvbm5faXRlbSkpO1xuK1xuIFx0XHRyZHNfbWVzc2FnZV9wdXJnZShybSk7XG4gXG4rXHRcdC8qIEEgZmluYWwgcHV0IGluIGF0b21pYyBjb250ZXh0IGNhbm5vdCBkaXJ0eSB0aGUgb3BzJ1xuK1x0XHQgKiB1c2VyIHBhZ2VzIG9uIHVucGluLCBzbyByZHNfcmRtYV9mcmVlX29wKCkgYW5kXG4rXHRcdCAqIHJkc19hdG9taWNfZnJlZV9vcCgpIGRlZmVycmVkIGl0LiAgRmluaXNoIHRoZSB1bnBpbixcbitcdFx0ICogYW5kIHRoZSBmcmVlLCBmcm9tIHByb2Nlc3MgY29udGV4dC5cbitcdFx0ICovXG4rXHRcdGlmIChybS1cdTAwM2VyZG1hLm9wX3VucGluX2RlZmVycmVkIHx8XG4rXHRcdCAgICBybS1cdTAwM2VhdG9taWMub3BfdW5waW5fZGVmZXJyZWQpIHtcbitcdFx0XHRJTklUX1dPUksoXHUwMDI2cm0tXHUwMDNlbV91bnBpbl93b3JrLCByZHNfbWVzc2FnZV91bnBpbl93b3JrZXIpO1xuK1x0XHRcdHF1ZXVlX3dvcmsocmRzX3dxLCBcdTAwMjZybS1cdTAwM2VtX3VucGluX3dvcmspO1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuK1xuIFx0XHRrZnJlZShybSk7XG4gXHR9XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9yZHMvcmRtYS5jIGIvbmV0L3Jkcy9yZG1hLmNcbmluZGV4IDYxZmI2ZTQ1MjgxYmYuLjA3ODA5MGQyOTJmYTMgMTAwNjQ0XG4tLS0gYS9uZXQvcmRzL3JkbWEuY1xuKysrIGIvbmV0L3Jkcy9yZG1hLmNcbkBAIC0xMTcsNiArMTE3LDcgQEAgdm9pZCBfX3Jkc19wdXRfbXJfZmluYWwoc3RydWN0IGtyZWYgKmtyZWYpXG4gXHRzdHJ1Y3QgcmRzX21yICptciA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgcmRzX21yLCByX2tyZWYpO1xuIFxuIFx0cmRzX2Rlc3Ryb3lfbXIobXIpO1xuK1x0c29ja19wdXQocmRzX3JzX3RvX3NrKG1yLVx1MDAzZXJfc29jaykpO1xuIFx0a2ZyZWUobXIpO1xuIH1cbiBcbkBAIC0yNDMsNyArMjQ0LDExIEBAIHN0YXRpYyBpbnQgX19yZHNfcmRtYV9tYXAoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19nZXRfbXJfYXJncyAqYXJncyxcbiBcdGtyZWZfaW5pdChcdTAwMjZtci1cdTAwM2VyX2tyZWYpO1xuIFx0UkJfQ0xFQVJfTk9ERShcdTAwMjZtci1cdTAwM2VyX3JiX25vZGUpO1xuIFx0bXItXHUwMDNlcl90cmFucyA9IHJzLVx1MDAzZXJzX3RyYW5zcG9ydDtcbitcdC8qIFRoZSBNUiBjYW4gb3V0bGl2ZSBpdHMgc29ja2V0OiBhIHNvY2tldCByZWZlcmVuY2UgaXMgaGVsZFxuK1x0ICogdW50aWwgdGhlIGZpbmFsIGtyZWYgaXMgZHJvcHBlZCBpbiBfX3Jkc19wdXRfbXJfZmluYWwoKS5cbitcdCAqL1xuIFx0bXItXHUwMDNlcl9zb2NrID0gcnM7XG4rXHRzb2NrX2hvbGQocmRzX3JzX3RvX3NrKHJzKSk7XG4gXG4gXHRpZiAoYXJncy1cdTAwM2VmbGFncyBcdTAwMjYgUkRTX1JETUFfVVNFX09OQ0UpXG4gXHRcdG1yLVx1MDAzZXJfdXNlX29uY2UgPSAxO1xuQEAgLTQ4MywyMiArNDg4LDM2IEBAIHZvaWQgcmRzX3JkbWFfdW51c2Uoc3RydWN0IHJkc19zb2NrICpycywgdTMyIHJfa2V5LCBpbnQgZm9yY2UpXG4gXHRcdGtyZWZfcHV0KFx1MDAyNm1yLVx1MDAzZXJfa3JlZiwgX19yZHNfcHV0X21yX2ZpbmFsKTtcbiB9XG4gXG4tdm9pZCByZHNfcmRtYV9mcmVlX29wKHN0cnVjdCBybV9yZG1hX29wICpybylcbit2b2lkIHJkc19yZG1hX29wX3VucGluX3BhZ2VzKHN0cnVjdCBybV9yZG1hX29wICpybylcbiB7XG4gXHR1bnNpZ25lZCBpbnQgaTtcbiBcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHJvLVx1MDAzZW9wX25lbnRzOyBpKyspIHtcbitcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBzZ19wYWdlKFx1MDAyNnJvLVx1MDAzZW9wX3NnW2ldKTtcbitcbitcdFx0LyogTWFyayBwYWdlIGRpcnR5IGlmIGl0IHdhcyBwb3NzaWJseSBtb2RpZmllZCwgd2hpY2hcbitcdFx0ICogaXMgdGhlIGNhc2UgZm9yIGEgUkRNQV9SRUFEIHdoaWNoIGNvcGllcyBmcm9tIHJlbW90ZVxuK1x0XHQgKiB0byBsb2NhbCBtZW1vcnlcbitcdFx0ICovXG4rXHRcdHVucGluX3VzZXJfcGFnZXNfZGlydHlfbG9jayhcdTAwMjZwYWdlLCAxLCAhcm8tXHUwMDNlb3Bfd3JpdGUpO1xuK1x0fVxuK31cbitcbit2b2lkIHJkc19yZG1hX2ZyZWVfb3Aoc3RydWN0IHJtX3JkbWFfb3AgKnJvKVxuK3tcbiBcdGlmIChyby1cdTAwM2VvcF9vZHBfbXIpIHtcbiBcdFx0a3JlZl9wdXQoXHUwMDI2cm8tXHUwMDNlb3Bfb2RwX21yLVx1MDAzZXJfa3JlZiwgX19yZHNfcHV0X21yX2ZpbmFsKTtcbitcdH0gZWxzZSBpZiAoaW5fdGFzaygpIHx8IHJvLVx1MDAzZW9wX3dyaXRlKSB7XG4rXHRcdC8qIEFuIFJETUEgd3JpdGUncyBwYWdlcyBhcmUgb25seSByZWFkIGJ5IHRoZSByZW1vdGVcbitcdFx0ICogc2lkZTsgdW5waW5uaW5nIHdpdGhvdXQgZGlydHlpbmcgZG9lcyBub3Qgc2xlZXAuXG4rXHRcdCAqL1xuK1x0XHRyZHNfcmRtYV9vcF91bnBpbl9wYWdlcyhybyk7XG4gXHR9IGVsc2Uge1xuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyByby1cdTAwM2VvcF9uZW50czsgaSsrKSB7XG4tXHRcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBzZ19wYWdlKFx1MDAyNnJvLVx1MDAzZW9wX3NnW2ldKTtcbi1cbi1cdFx0XHQvKiBNYXJrIHBhZ2UgZGlydHkgaWYgaXQgd2FzIHBvc3NpYmx5IG1vZGlmaWVkLCB3aGljaFxuLVx0XHRcdCAqIGlzIHRoZSBjYXNlIGZvciBhIFJETUFfUkVBRCB3aGljaCBjb3BpZXMgZnJvbSByZW1vdGVcbi1cdFx0XHQgKiB0byBsb2NhbCBtZW1vcnlcbi1cdFx0XHQgKi9cbi1cdFx0XHR1bnBpbl91c2VyX3BhZ2VzX2RpcnR5X2xvY2soXHUwMDI2cGFnZSwgMSwgIXJvLVx1MDAzZW9wX3dyaXRlKTtcbi1cdFx0fVxuK1x0XHQvKiBEaXJ0eWluZyB0aGUgcGFnZXMgb24gdW5waW4gY2FuIHNsZWVwOyBsZWF2ZSB0aGVtXG4rXHRcdCAqIHBpbm5lZCBhbmQgaGF2ZSByZHNfbWVzc2FnZV9wdXQoKSBmaW5pc2ggdGhlIHVucGluXG4rXHRcdCAqIGZyb20gcHJvY2VzcyBjb250ZXh0LlxuK1x0XHQgKi9cbitcdFx0cm8tXHUwMDNlb3BfdW5waW5fZGVmZXJyZWQgPSAxO1xuIFx0fVxuIFxuIFx0a2ZyZWUocm8tXHUwMDNlb3Bfbm90aWZpZXIpO1xuQEAgLTUwNyw3ICs1MjYsNyBAQCB2b2lkIHJkc19yZG1hX2ZyZWVfb3Aoc3RydWN0IHJtX3JkbWFfb3AgKnJvKVxuIFx0cm8tXHUwMDNlb3Bfb2RwX21yID0gTlVMTDtcbiB9XG4gXG4tdm9pZCByZHNfYXRvbWljX2ZyZWVfb3Aoc3RydWN0IHJtX2F0b21pY19vcCAqYW8pXG4rdm9pZCByZHNfYXRvbWljX29wX3VucGluX3BhZ2Uoc3RydWN0IHJtX2F0b21pY19vcCAqYW8pXG4ge1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBzZ19wYWdlKGFvLVx1MDAzZW9wX3NnKTtcbiBcbkBAIC01MTUsNiArNTM0LDE5IEBAIHZvaWQgcmRzX2F0b21pY19mcmVlX29wKHN0cnVjdCBybV9hdG9taWNfb3AgKmFvKVxuIFx0ICogaXMgdGhlIGNhc2UgZm9yIGEgUkRNQV9SRUFEIHdoaWNoIGNvcGllcyBmcm9tIHJlbW90ZVxuIFx0ICogdG8gbG9jYWwgbWVtb3J5ICovXG4gXHR1bnBpbl91c2VyX3BhZ2VzX2RpcnR5X2xvY2soXHUwMDI2cGFnZSwgMSwgdHJ1ZSk7XG4rfVxuK1xuK3ZvaWQgcmRzX2F0b21pY19mcmVlX29wKHN0cnVjdCBybV9hdG9taWNfb3AgKmFvKVxuK3tcbitcdGlmIChpbl90YXNrKCkpIHtcbitcdFx0cmRzX2F0b21pY19vcF91bnBpbl9wYWdlKGFvKTtcbitcdH0gZWxzZSB7XG4rXHRcdC8qIERpcnR5aW5nIHRoZSBwYWdlIG9uIHVucGluIGNhbiBzbGVlcDsgbGVhdmUgaXRcbitcdFx0ICogcGlubmVkIGFuZCBoYXZlIHJkc19tZXNzYWdlX3B1dCgpIGZpbmlzaCB0aGUgdW5waW5cbitcdFx0ICogZnJvbSBwcm9jZXNzIGNvbnRleHQuXG4rXHRcdCAqL1xuK1x0XHRhby1cdTAwM2VvcF91bnBpbl9kZWZlcnJlZCA9IDE7XG4rXHR9XG4gXG4gXHRrZnJlZShhby1cdTAwM2VvcF9ub3RpZmllcik7XG4gXHRhby1cdTAwM2VvcF9ub3RpZmllciA9IE5VTEw7XG5AQCAtNzMyLDcgKzc2NCwxMiBAQCBpbnQgcmRzX2Ntc2dfcmRtYV9hcmdzKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sXG4gXHRcdFx0UkJfQ0xFQVJfTk9ERShcdTAwMjZsb2NhbF9vZHBfbXItXHUwMDNlcl9yYl9ub2RlKTtcbiBcdFx0XHRrcmVmX2luaXQoXHUwMDI2bG9jYWxfb2RwX21yLVx1MDAzZXJfa3JlZik7XG4gXHRcdFx0bG9jYWxfb2RwX21yLVx1MDAzZXJfdHJhbnMgPSBycy1cdTAwM2Vyc190cmFuc3BvcnQ7XG4rXHRcdFx0LyogVGhlIE1SIGNhbiBvdXRsaXZlIGl0cyBzb2NrZXQ6IGEgc29ja2V0XG4rXHRcdFx0ICogcmVmZXJlbmNlIGlzIGhlbGQgdW50aWwgdGhlIGZpbmFsIGtyZWYgaXNcbitcdFx0XHQgKiBkcm9wcGVkIGluIF9fcmRzX3B1dF9tcl9maW5hbCgpLlxuK1x0XHRcdCAqL1xuIFx0XHRcdGxvY2FsX29kcF9tci1cdTAwM2VyX3NvY2sgPSBycztcbitcdFx0XHRzb2NrX2hvbGQocmRzX3JzX3RvX3NrKHJzKSk7XG4gXHRcdFx0bG9jYWxfb2RwX21yLVx1MDAzZXJfdHJhbnNfcHJpdmF0ZSA9XG4gXHRcdFx0XHRycy1cdTAwM2Vyc190cmFuc3BvcnQtXHUwMDNlZ2V0X21yKFxuIFx0XHRcdFx0XHROVUxMLCAwLCBycywgXHUwMDI2bG9jYWxfb2RwX21yLVx1MDAzZXJfa2V5LCBOVUxMLFxuQEAgLTc0MSw3ICs3NzgsOSBAQCBpbnQgcmRzX2Ntc2dfcmRtYV9hcmdzKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sXG4gXHRcdFx0XHRyZXQgPSBQVFJfRVJSKGxvY2FsX29kcF9tci1cdTAwM2VyX3RyYW5zX3ByaXZhdGUpO1xuIFx0XHRcdFx0cmRzZGVidWcoXCJnZXRfbXIgcmV0ICVkICVwXFxcIlwiLCByZXQsXG4gXHRcdFx0XHRcdCBsb2NhbF9vZHBfbXItXHUwMDNlcl90cmFuc19wcml2YXRlKTtcbi1cdFx0XHRcdGtmcmVlKGxvY2FsX29kcF9tcik7XG4rXHRcdFx0XHRsb2NhbF9vZHBfbXItXHUwMDNlcl90cmFuc19wcml2YXRlID0gTlVMTDtcbitcdFx0XHRcdGtyZWZfcHV0KFx1MDAyNmxvY2FsX29kcF9tci1cdTAwM2VyX2tyZWYsXG4rXHRcdFx0XHRcdCBfX3Jkc19wdXRfbXJfZmluYWwpO1xuIFx0XHRcdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG4gXHRcdFx0XHRnb3RvIG91dF9wYWdlcztcbiBcdFx0XHR9XG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9yZHMuaCBiL25ldC9yZHMvcmRzLmhcbmluZGV4IDZlMDc5MGU0YjU3MDMuLjJkYjQ5NTczZGFjZDUgMTAwNjQ0XG4tLS0gYS9uZXQvcmRzL3Jkcy5oXG4rKysgYi9uZXQvcmRzL3Jkcy5oXG5AQCAtMzIwLDcgKzMyMCwxMCBAQCBzdHJ1Y3QgcmRzX21yIHtcbiBcdHVuc2lnbmVkIGludFx0XHRyX2ludmFsaWRhdGU6MTtcbiBcdHVuc2lnbmVkIGludFx0XHRyX3dyaXRlOjE7XG4gXG4tXHRzdHJ1Y3QgcmRzX3NvY2tcdFx0KnJfc29jazsgLyogYmFjayBwb2ludGVyIHRvIHRoZSBzb2NrZXQgdGhhdCBvd25zIHVzICovXG4rXHRzdHJ1Y3QgcmRzX3NvY2tcdFx0KnJfc29jazsgLyogc29ja2V0IHRoYXQgb3ducyB1czsgY291bnRlZFxuK1x0XHRcdFx0XHQgICogcmVmZXJlbmNlLCBkcm9wcGVkIGJ5XG4rXHRcdFx0XHRcdCAgKiBfX3Jkc19wdXRfbXJfZmluYWwoKVxuK1x0XHRcdFx0XHQgICovXG4gXHRzdHJ1Y3QgcmRzX3RyYW5zcG9ydFx0KnJfdHJhbnM7XG4gXHR2b2lkXHRcdFx0KnJfdHJhbnNfcHJpdmF0ZTtcbiB9O1xuQEAgLTQ0NSw2ICs0NDgsMTIgQEAgc3RydWN0IHJkc19tZXNzYWdlIHtcbiBcbiBcdHZvaWRcdFx0XHQqbV9maW5hbF9vcDtcbiBcbitcdC8qIFVucGlucyB0aGUgb3BzJyB1c2VyIHBhZ2VzIGFuZCBmcmVlcyB0aGUgbWVzc2FnZSBmcm9tXG4rXHQgKiBwcm9jZXNzIGNvbnRleHQgd2hlbiB0aGUgZmluYWwgcHV0IGhhcHBlbnMgaW4gYXRvbWljXG4rXHQgKiBjb250ZXh0OiBkaXJ0eWluZyB0aGUgcGFnZXMgb24gdW5waW4gY2FuIHNsZWVwLlxuK1x0ICovXG4rXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdG1fdW5waW5fd29yaztcbitcbiBcdHN0cnVjdCB7XG4gXHRcdHN0cnVjdCBybV9hdG9taWNfb3Age1xuIFx0XHRcdGludFx0XHRcdG9wX3R5cGU7XG5AQCAtNDY4LDYgKzQ3Nyw3IEBAIHN0cnVjdCByZHNfbWVzc2FnZSB7XG4gXHRcdFx0dW5zaWduZWQgaW50XHRcdG9wX21hcHBlZDoxO1xuIFx0XHRcdHVuc2lnbmVkIGludFx0XHRvcF9zaWxlbnQ6MTtcbiBcdFx0XHR1bnNpZ25lZCBpbnRcdFx0b3BfYWN0aXZlOjE7XG4rXHRcdFx0dW5zaWduZWQgaW50XHRcdG9wX3VucGluX2RlZmVycmVkOjE7XG4gXHRcdFx0c3RydWN0IHNjYXR0ZXJsaXN0XHQqb3Bfc2c7XG4gXHRcdFx0c3RydWN0IHJkc19ub3RpZmllclx0Km9wX25vdGlmaWVyO1xuIFxuQEAgLTQ4Myw2ICs0OTMsNyBAQCBzdHJ1Y3QgcmRzX21lc3NhZ2Uge1xuIFx0XHRcdHVuc2lnbmVkIGludFx0XHRvcF9tYXBwZWQ6MTtcbiBcdFx0XHR1bnNpZ25lZCBpbnRcdFx0b3Bfc2lsZW50OjE7XG4gXHRcdFx0dW5zaWduZWQgaW50XHRcdG9wX2FjdGl2ZToxO1xuK1x0XHRcdHVuc2lnbmVkIGludFx0XHRvcF91bnBpbl9kZWZlcnJlZDoxO1xuIFx0XHRcdHVuc2lnbmVkIGludFx0XHRvcF9ieXRlcztcbiBcdFx0XHR1bnNpZ25lZCBpbnRcdFx0b3BfbmVudHM7XG4gXHRcdFx0dW5zaWduZWQgaW50XHRcdG9wX2NvdW50O1xuQEAgLTk3Miw2ICs5ODMsOCBAQCBpbnQgcmRzX2Ntc2dfcmRtYV9tYXAoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcbiBcdFx0XHQgIHN0cnVjdCBjbXNnaGRyICpjbXNnKTtcbiB2b2lkIHJkc19yZG1hX2ZyZWVfb3Aoc3RydWN0IHJtX3JkbWFfb3AgKnJvKTtcbiB2b2lkIHJkc19hdG9taWNfZnJlZV9vcChzdHJ1Y3Qgcm1fYXRvbWljX29wICphbyk7XG4rdm9pZCByZHNfcmRtYV9vcF91bnBpbl9wYWdlcyhzdHJ1Y3Qgcm1fcmRtYV9vcCAqcm8pO1xuK3ZvaWQgcmRzX2F0b21pY19vcF91bnBpbl9wYWdlKHN0cnVjdCBybV9hdG9taWNfb3AgKmFvKTtcbiB2b2lkIHJkc19yZG1hX3NlbmRfY29tcGxldGUoc3RydWN0IHJkc19tZXNzYWdlICpybSwgaW50IHdjX3N0YXR1cyk7XG4gdm9pZCByZHNfYXRvbWljX3NlbmRfY29tcGxldGUoc3RydWN0IHJkc19tZXNzYWdlICpybSwgaW50IHdjX3N0YXR1cyk7XG4gaW50IHJkc19jbXNnX2F0b21pYyhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLFxuZGlmZiAtLWdpdCBhL25ldC9yZHMvc2VuZC5jIGIvbmV0L3Jkcy9zZW5kLmNcbmluZGV4IDY4YmUxYmYwZTBhZGYuLjdlNDhmNjRkZmFhNjcgMTAwNjQ0XG4tLS0gYS9uZXQvcmRzL3NlbmQuY1xuKysrIGIvbmV0L3Jkcy9zZW5kLmNcbkBAIC0zMzksOSArMzM5LDIxIEBAIGludCByZHNfc2VuZF94bWl0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiBcdFx0XHQgICAgKHJtLVx1MDAzZXJkbWEub3BfYWN0aXZlIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICB0ZXN0X2JpdChSRFNfTVNHX1JFVFJBTlNNSVRURUQsIFx1MDAyNnJtLVx1MDAzZW1fZmxhZ3MpKSkge1xuIFx0XHRcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2Y3AtXHUwMDNlY3BfbG9jaywgZmxhZ3MpO1xuLVx0XHRcdFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSRFNfTVNHX09OX0NPTk4sIFx1MDAyNnJtLVx1MDAzZW1fZmxhZ3MpKVxuLVx0XHRcdFx0XHRsaXN0X21vdmUoXHUwMDI2cm0tXHUwMDNlbV9jb25uX2l0ZW0sIFx1MDAyNnRvX2JlX2Ryb3BwZWQpO1xuLVx0XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZjcC1cdTAwM2VjcF9sb2NrLCBmbGFncyk7XG4rXHRcdFx0XHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KFJEU19NU0dfT05fQ09OTixcbitcdFx0XHRcdFx0XHQgICAgICAgXHUwMDI2cm0tXHUwMDNlbV9mbGFncykpIHtcbitcdFx0XHRcdFx0Lyogb3VyIHJlZiBpcyBwdXQgYWZ0ZXIgdGhlIGJhdGNoICovXG4rXHRcdFx0XHRcdGxpc3RfbW92ZShcdTAwMjZybS1cdTAwM2VtX2Nvbm5faXRlbSxcbitcdFx0XHRcdFx0XHQgIFx1MDAyNnRvX2JlX2Ryb3BwZWQpO1xuK1x0XHRcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmNwLVx1MDAzZWNwX2xvY2ssXG4rXHRcdFx0XHRcdFx0XHQgICAgICAgZmxhZ3MpO1xuK1x0XHRcdFx0fSBlbHNlIHtcbitcdFx0XHRcdFx0LyogYWxyZWFkeSBvZmYgdGhlIGNvbm4gbGlzdDsgZHJvcFxuK1x0XHRcdFx0XHQgKiB0aGUgcmVmIHRha2VuIGFib3ZlIG91cnNlbHZlc1xuK1x0XHRcdFx0XHQgKi9cbitcdFx0XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZjcC1cdTAwM2VjcF9sb2NrLFxuK1x0XHRcdFx0XHRcdFx0ICAgICAgIGZsYWdzKTtcbitcdFx0XHRcdFx0cmRzX21lc3NhZ2VfcHV0KHJtKTtcbitcdFx0XHRcdH1cbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEzOjAyOjI5LjkyODM4NDE0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTA5MjE4MTgzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFJEUyBQYXRjaGVzOiBBIFRhcmdldGVkIEFwcHJvYWNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBhZmZlY3RpbmcgdGhlIFJEUyBzdWJzeXN0ZW0gaW4gdGhlIExpbnV4IGtlcm5lbCwgc3BlY2lmaWNhbGx5IHR3ZWFraW5nIGhvdyBtZW1vcnkgcmVnaW9ucyAoTVJzKSBhbmQgUkRNQSBvcGVyYXRpb25zIGFyZSBtYW5hZ2VkLiAgVGhlIGtleSBjaGFuZ2UgaGVyZSBzZWVtcyB0byBiZSBkZWZlcnJpbmcgdXNlciBwYWdlIHVucGlubmluZyB0byBhIHdvcmtxdWV1ZSB3aGVuIHRoZSBmaW5hbCBcInB1dFwiIGhhcHBlbnMgYXRvbWljYWxseS4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gbm90ZSBzaW5jZSBkaXJ0eWluZyBwYWdlcyBvbiB1bnBpbiBjYW4gY2F1c2Ugc2xlZXBpbmcsIHdoaWNoIGlzIGEgYmlnIG5vLW5vIGluIGF0b21pYyBjb250ZXh0cy4gVGhleSd2ZSBhbHNvIGFkZGVkIGEgc29ja2V0IHJlZmVyZW5jZSBob2xkIHdoZW4gYW4gTVIgaXMgY3JlYXRlZCB0byBtYWtlIHN1cmUgdGhlIHNvY2tldCBvdXRsaXZlcyB0aGUgTVIgLSBzbWFydC5cblxuTm93LCBzaG91bGQgd2UgYm90aGVyIGZ1enppbmcgdGhpcz8gRGVmaW5pdGVseS4gVGhlIHBhdGNoIHRvdWNoZXMgY3JpdGljYWwgUkRTIGNvZGU6IGBuZXQvcmRzL2liX3JkbWEuY2AsIGBuZXQvcmRzL21lc3NhZ2UuY2AsIGBuZXQvcmRzL3JkbWEuY2AsIGBuZXQvcmRzL3Jkcy5oYCwgYW5kIGBuZXQvcmRzL3NlbmQuY2AuICBXZSdyZSB0YWxraW5nIGFib3V0IGNvcmUgUkRNQSBoYW5kbGluZyBhbmQgYXRvbWljIG9wZXJhdGlvbnMg4oCTIGZ1bmRhbWVudGFsIHN0dWZmLiAgUkRTIGlzIGFsc28gYSBuZXR3b3JrIHByb3RvY29sIChBRl9SRFMpIHRoYXQncyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgaXQgYSBwcmltZSB0YXJnZXQuICBTbywgYFdvcnRoRnV6emluZz10cnVlYC5cblxuTmV4dCwgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBmdW5jdGlvbnMgdG8gZm9jdXMgb3VyIGZ1enppbmcgZWZmb3J0cyBvbi4gIFRoZSBwYXRjaCBoYXMgbW9kaWZpZWQgcXVpdGUgYSBmZXcsIGJ1dCBhIGZldyBzdGFuZCBvdXQgYXMgZ29vZCBjYW5kaWRhdGVzIGZvciB0YXJnZXRlZCBmdXp6aW5nOlxuXG4qICAgYF9fcmRzX2liX3RlYXJkb3duX21yYFxuKiAgIGByZHNfbWVzc2FnZV9wdXJnZWBcbiogICBgcmRzX21lc3NhZ2VfdW5waW5fd29ya2VyYCAodGhpcyBpcyBuZXcsIHNvIGRlZmluaXRlbHkgd29ydGggYSBsb29rKVxuKiAgIGByZHNfbWVzc2FnZV9wdXRgXG4qICAgYF9fcmRzX3B1dF9tcl9maW5hbGBcbiogICBgX19yZHNfcmRtYV9tYXBgXG4qICAgYHJkc19yZG1hX3VudXNlYFxuKiAgIGByZHNfcmRtYV9vcF91bnBpbl9wYWdlc2AgKHRoaXMgaXMgYWxzbyBuZXcsIHNvIHdvcnRoIGEgbG9vaylcbiogICBgcmRzX3JkbWFfZnJlZV9vcGBcbiogICBgcmRzX2F0b21pY19vcF91bnBpbl9wYWdlYCAoYWdhaW4sIHRoaXMgaXMgbmV3KVxuKiAgIGByZHNfYXRvbWljX2ZyZWVfb3BgXG4qICAgYHJkc19jbXNnX3JkbWFfYXJnc2BcbiogICBgcmRzX3NlbmRfeG1pdGBcblxuSSB3YW50IHRvIHByaW9yaXRpemUgZWl0aGVyIGVudHJ5IHBvaW50cyBvciBtYWpvciBmdW5jdGlvbnMgYWZmZWN0ZWQgYnkgdGhpcyBwYXRjaC4gV2hpbGUgYHJkc19tZXNzYWdlX3B1dGAgaXMgaW4gdGhlIGxpc3QsIGl0J3MgY2FsbGVkIGZyb20gYSB0b24gb2YgcGxhY2VzLCBzbyBJIG5lZWQgdG8gYmUgbW9yZSBzdHJhdGVnaWMuIGByZHNfc2VuZG1zZ2AgaXMgbGlrZWx5IHRoZSBrZXkgZW50cnkgcG9pbnQgZm9yIG1lc3NhZ2Ugc2VuZGluZywgY3JlYXRpbmcgYW5kIG1hcHBpbmcgdGhlc2UgUkRNQSBvcGVyYXRpb25zLiAgYHJkc19jbXNnX3JkbWFfYXJnc2AgYW5kIGByZHNfY21zZ19yZG1hX21hcGAgYXJlIGFsc28gY3JpdGljYWwsIGFzIHRoZXkncmUgY2FsbGVkIGZyb20gYHJkc19zZW5kbXNnYCB0byBoYW5kbGUgY29udHJvbCBtZXNzYWdlcy4gYHJkc19zZW5kX3htaXRgIGlzIGFsc28gd29ydGggYSBsb29rIHNpbmNlIGl0J3MgdGhlIHRyYW5zbWl0IHdvcmtlci4gQWRkaXRpb25hbGx5LCBgcmRzX3JkbWFfZnJlZV9vcGAgYW5kIGByZHNfYXRvbWljX2ZyZWVfb3BgIGFyZSBjYWxsZWQgZHVyaW5nIG1lc3NhZ2UgcHVyZ2Ugc28gdGhleSdyZSBpbXBvcnRhbnQgZm9yIGNsZWFudXAgYW5kIG1lbW9yeSBoYW5kbGluZyBhbmQgYXJlIGltcG9ydGFudC4gYF9fcmRzX3JkbWFfbWFwYCBpcyBhbHNvIGEga2V5IGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZnJvbSBgcmRzX2Ntc2dfcmRtYV9tYXBgIGFuZCBgcmRzX2dldF9tcmAuIEZpbmFsbHksIGByZHNfZ2V0X21yYCBhbmQgYHJkc19mcmVlX21yYCBhcmUgYm90aCBlbnRyeSBwb2ludHMgdmlhIGBzZXRzb2Nrb3B0YCBjYWxscy5cblxuUXVpY2sgY2hlY2sgb2YgYG5ldC9yZHMvS2NvbmZpZ2AgY29uZmlybXMgdGhhdCBSRFMgKGBDT05GSUdfUkRTYCksIFJETUEgKGBDT05GSUdfUkRTX1JETUFgKSwgVENQIChgQ09ORklHX1JEU19UQ1BgKSwgYW5kIGRlYnVnIChgQ09ORklHX1JEU19ERUJVR2ApIGFyZSBhbGwgZW5hYmxlZC4gIEdvb2QsIGl0J3MgYWxsIHRoZXJlLlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRlcGxveSB0aGUgZnV6emluZyB0b29scyBhbmQgZ2V0IHN0YXJ0ZWQuIFRoaXMgbG9va3MgbGlrZSBhIHByb21pc2luZyB0YXJnZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2NDgsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NTEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzowMjozOS4wMjA1Njg3NDRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODEzMTI1ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFJEU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcmRzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Jkcy9LY29uZmlnLTItXFxubmV0L3Jkcy9LY29uZmlnOjM6Y29uZmlnIFJEU1xcbm5ldC9yZHMvS2NvbmZpZy00LVxcdHRyaXN0YXRlIFxcXCJUaGUgUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cyBQcm90b2NvbFxcXCJcXG4tLVxcbm5ldC9yZHMvS2NvbmZpZy05LVxcbm5ldC9yZHMvS2NvbmZpZzoxMDpjb25maWcgUkRTX1JETUFcXG5uZXQvcmRzL0tjb25maWctMTEtXFx0dHJpc3RhdGUgXFxcIlJEUyBvdmVyIEluZmluaWJhbmRcXFwiXFxuLS1cXG5uZXQvcmRzL0tjb25maWctMTYtXFxubmV0L3Jkcy9LY29uZmlnOjE3OmNvbmZpZyBSRFNfVENQXFxubmV0L3Jkcy9LY29uZmlnLTE4LVxcdHRyaXN0YXRlIFxcXCJSRFMgb3ZlciBUQ1BcXFwiXFxuLS1cXG5uZXQvcmRzL0tjb25maWctMjQtXFxubmV0L3Jkcy9LY29uZmlnOjI1OmNvbmZpZyBSRFNfREVCVUdcXG5uZXQvcmRzL0tjb25maWctMjYtXFx0Ym9vbCBcXFwiUkRTIGRlYnVnZ2luZyBtZXNzYWdlc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTM6MDI6MzkuMTAxODg3NjAzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcyMjc2MjQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIFJEUyBhbmQgUkRNQSBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggYFJEU2AgYW5kIGFsc28gbmVlZCB0byBjb25zaWRlciBgUkRTX1JETUFgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlc2UgdHdvLCBlc3BlY2lhbGx5IHNpbmNlIHRoZSBjb2RlIHJlZmVyZW5jZXMgYG5ldC9yZHMvaWJfcmRtYS5jYCwgd2hpY2ggZGlyZWN0bHkgdGllcyBpbnRvIFJETUEgbG9naWMuIEl0IGxvb2tzIGxpa2UgYG5ldC9yZHMvaWJfcmRtYS5jYCBpcyBvbmx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19SRFNfUkRNQWAgaXMgYWN0aXZlLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdyBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIGBuZXQvcmRzL01ha2VmaWxlYCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGFuZCBkZXBlbmRlbmNpZXMuIFRoYXQgd2lsbCBsaWtlbHkgZ2l2ZSBtZSBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NzM0MCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEzOjAyOjQyLjgyNDY1MjYxNFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg4MDU5NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWJfcmRtYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcmRzL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yZHMvTWFrZWZpbGU9OD1yZHNfcmRtYS15IDo9XFx0cmRtYV90cmFuc3BvcnQubyBcXFxcXFxubmV0L3Jkcy9NYWtlZmlsZS05LVxcdFxcdFxcdGliLm8gaWJfY20ubyBpYl9yZWN2Lm8gaWJfcmluZy5vIGliX3NlbmQubyBpYl9zdGF0cy5vIFxcXFxcXG5uZXQvcmRzL01ha2VmaWxlOjEwOlxcdFxcdFxcdGliX3N5c2N0bC5vIGliX3JkbWEubyBpYl9mcm1yLm9cXG5uZXQvcmRzL01ha2VmaWxlLTExLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzowMjo0Mi45NDM0NjM4ODJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjQ5OTU4NDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdC5cblxuKipBbmFseXppbmcgdGhlIFJEUy1SRE1BIEJ1aWxkIFByb2Nlc3MqKlxuXG5SaWdodCwgc28gYHJkc19yZG1hLXlgIGlzIGRlZmluaXRlbHkgb25seSBpbmNsdWRlZCBpbiB0aGUgYnVpbGQgaWYgYENPTkZJR19SRFNfUkRNQWAgaXMgc2V0LiBUaGF0J3MgZ29vZCwgcHJlZGljdGFibGUgYmVoYXZpb3IuIE5vdywgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIGFuZCBzZWUgaG93IGl0J3MgYWxsIGhvb2tlZCB0b2dldGhlciwgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBgbmV0L3Jkcy9NYWtlZmlsZWAuIFRoYXQncyB3aGVyZSB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gbWFnaWMgdXN1YWxseSBoYXBwZW5zIGZvciB0aGlzIGtpbmQgb2YgdGhpbmcgd2l0aGluIHRoZSBSRFMgY29kZWJhc2UuIEknbSBhc3N1bWluZyBpdCdsbCBoYXZlIHRoZSBzdGFuZGFyZCBgb2JqLSQoQ09ORklHX1JEU19SRE1BKSArPSByZHNfcmRtYS5vYCB0eXBlIG9mIGxpbmUsIGJ1dCBhIHF1aWNrIGxvb2sgaXMgYWx3YXlzIHBydWRlbnQuIE5lZWQgdG8gY29uZmlybSB0aGF0J3MgdGhlIG9ubHkgZGVwZW5kZW5jZSBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzAyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTM6MDI6NDYuMTkzNDI1NTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0MjE0OTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJkc19yZG1hXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yZHMvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Jkcy9NYWtlZmlsZT0zPXJkcy15IDo9XFx0YWZfcmRzLm8gYmluZC5vIGNvbmcubyBjb25uZWN0aW9uLm8gaW5mby5vIG1lc3NhZ2UubyAgIFxcXFxcXG4tLVxcbm5ldC9yZHMvTWFrZWZpbGUtNi1cXG5uZXQvcmRzL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX1JEU19SRE1BKSArPSByZHNfcmRtYS5vXFxubmV0L3Jkcy9NYWtlZmlsZTo4OnJkc19yZG1hLXkgOj1cXHRyZG1hX3RyYW5zcG9ydC5vIFxcXFxcXG5uZXQvcmRzL01ha2VmaWxlLTktXFx0XFx0XFx0aWIubyBpYl9jbS5vIGliX3JlY3YubyBpYl9yaW5nLm8gaWJfc2VuZC5vIGliX3N0YXRzLm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzowMjo0Ni4yOTc2NDk2NjhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzc2NTg2MTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJEUyBSRE1BIENvbmZpZ3VyYXRpb24gQXNzZXNzbWVudCoqXG5cbk9rYXksIHNvIHRoZSBwYXRjaCBJJ20gbG9va2luZyBhdCByZXF1aXJlcyBgQ09ORklHX1JEU19SRE1BYC4gVGhhdCdzIHRoZSBiYXNlbGluZSwgbm8gc3VycHJpc2VzIHRoZXJlLiBCdXQsIEkgbmVlZCB0byBjb25zaWRlciBgQ09ORklHX1JEU19UQ1BgLiBJdCdzIGdlbmVyYWxseSBhIGdvb2QgcHJhY3RpY2UgdG8gaGF2ZSB0aGUgVENQIG9wdGlvbiBlbmFibGVkLCBlc3BlY2lhbGx5IGZvciB0ZXN0aW5nIFJEUyBvdmVyIFRDUCBhcyBhbiBhbHRlcm5hdGl2ZSB0cmFuc3BvcnQuIEhvd2V2ZXIsIHRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IGludGVyYWN0cyB3aXRoIGBpYl9yZG1hLmNgLCB3aGljaCBpcyBjbGVhcmx5IHBhcnQgb2YgdGhlIGBSRFNfUkRNQWAgY29uZmlndXJhdGlvbi5cblxuTGV0J3MgcXVpY2tseSB2ZXJpZnkgbXkgdW5kZXJzdGFuZGluZzogZmlsZXMgbGlrZSBgbmV0L3Jkcy9tZXNzYWdlLmNgLCBgbmV0L3Jkcy9yZG1hLmNgLCBhbmQgYG5ldC9yZHMvc2VuZC5jYCBhcmUgYnVpbHQgYXMgcGFydCBvZiBgcmRzLXlgLCB3aGljaCBmYWxscyB1bmRlciB0aGUgdW1icmVsbGEgb2YgYENPTkZJR19SRFNgLiBHb29kLCB0aGF0IG1ha2VzIHNlbnNlLiBTbywgYFJEU2AgaXMgYWx3YXlzIGVuYWJsZWQgd2hlbiB3ZSBhcmUgbG9va2luZyBhdCBhbnkgb2YgdGhvc2UgZmlsZXMuXG5cbk5vdywgbGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBSRFNfUkRNQWAgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwODcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTM6MDI6NTAuNjc0MjM5NTM5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTQ1Nzg2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yZHMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcmRzL0tjb25maWc9Mz1jb25maWcgUkRTXFxubmV0L3Jkcy9LY29uZmlnLTQtXFx0dHJpc3RhdGUgXFxcIlRoZSBSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzIFByb3RvY29sXFxcIlxcbm5ldC9yZHMvS2NvbmZpZzo1OlxcdGRlcGVuZHMgb24gSU5FVFxcbm5ldC9yZHMvS2NvbmZpZy02LVxcdGhlbHBcXG4tLVxcbm5ldC9yZHMvS2NvbmZpZz0xMD1jb25maWcgUkRTX1JETUFcXG5uZXQvcmRzL0tjb25maWctMTEtXFx0dHJpc3RhdGUgXFxcIlJEUyBvdmVyIEluZmluaWJhbmRcXFwiXFxubmV0L3Jkcy9LY29uZmlnOjEyOlxcdGRlcGVuZHMgb24gUkRTIFxcdTAwMjZcXHUwMDI2IElORklOSUJBTkQgXFx1MDAyNlxcdTAwMjYgSU5GSU5JQkFORF9BRERSX1RSQU5TXFxubmV0L3Jkcy9LY29uZmlnLTEzLVxcdGhlbHBcXG4tLVxcbm5ldC9yZHMvS2NvbmZpZz0xNz1jb25maWcgUkRTX1RDUFxcbm5ldC9yZHMvS2NvbmZpZy0xOC1cXHR0cmlzdGF0ZSBcXFwiUkRTIG92ZXIgVENQXFxcIlxcbm5ldC9yZHMvS2NvbmZpZzoxOTpcXHRkZXBlbmRzIG9uIFJEU1xcbm5ldC9yZHMvS2NvbmZpZzoyMDpcXHRkZXBlbmRzIG9uIElQVjYgfHwgIUlQVjZcXG5uZXQvcmRzL0tjb25maWctMjEtXFx0aGVscFxcbi0tXFxubmV0L3Jkcy9LY29uZmlnPTI1PWNvbmZpZyBSRFNfREVCVUdcXG5uZXQvcmRzL0tjb25maWctMjYtXFx0Ym9vbCBcXFwiUkRTIGRlYnVnZ2luZyBtZXNzYWdlc1xcXCJcXG5uZXQvcmRzL0tjb25maWc6Mjc6XFx0ZGVwZW5kcyBvbiBSRFNcXG5uZXQvcmRzL0tjb25maWctMjgtXFx0ZGVmYXVsdCBuXFxuLS1cXG5uZXQvcmRzL0tjb25maWc9MzA9Y29uZmlnIEdDT1ZfUFJPRklMRV9SRFNcXG5uZXQvcmRzL0tjb25maWctMzEtXFx0Ym9vbCBcXFwiRW5hYmxlIEdDT1YgcHJvZmlsaW5nIG9uIFJEU1xcXCJcXG5uZXQvcmRzL0tjb25maWc6MzI6XFx0ZGVwZW5kcyBvbiBHQ09WX0tFUk5FTFxcbm5ldC9yZHMvS2NvbmZpZy0zMy1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEzOjAyOjUwLjcyMzcwOTA2OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzIzNTUyNDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQW5hbHlzaXMgb2YgdGhlIFJEU19SRE1BIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgc2VlIHRoZSBkZXBlbmRlbmNpZXM6IGBSRFNfUkRNQWAgcmVsaWVzIGhlYXZpbHkgb24gYFJEU2AsIGBJTkZJTklCQU5EYCwgYW5kIGBJTkZJTklCQU5EX0FERFJfVFJBTlNgLiBMb2dpY2FsbHksIEkgbmVlZCB0byBpbmNsdWRlIGFsbCB0aG9zZSBpbiBteSBhbmFseXNpcywgc28gSSdsbCBiZSBzdXJlIHRvIGtlZXAgdGhlbSBpbiBtaW5kLlxuXG5Ob3csIHRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gaW52b2x2ZSBhIHNlcmllcyBvZiBmdW5jdGlvbnMgdGhhdCBhcmUgYmVpbmcgbW9kaWZpZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSByZWxhdGUgdG8gZWFjaCBvdGhlciBhbmQsIG1vcmUgaW1wb3J0YW50bHksIGhvdyB0aGV5IG1pZ2h0IGJlIHZ1bG5lcmFibGUuIEZyb20gYSBxdWljayBnbGFuY2UsIHRoZSBmdW5jdGlvbnMgYmVpbmcgbW9kaWZpZWQgYXJlOiBgX19yZHNfaWJfdGVhcmRvd25fbXJgLCBgcmRzX21lc3NhZ2VfcHVyZ2VgLCBgcmRzX21lc3NhZ2VfdW5waW5fd29ya2VyYCwgYHJkc19tZXNzYWdlX3B1dGAsIGBfX3Jkc19wdXRfbXJfZmluYWxgLCBgX19yZHNfcmRtYV9tYXBgLCBgcmRzX3JkbWFfdW51c2VgLCBgcmRzX3JkbWFfb3BfdW5waW5fcGFnZXNgLCBgcmRzX3JkbWFfZnJlZV9vcGAsIGByZHNfYXRvbWljX29wX3VucGluX3BhZ2VgLCBgcmRzX2F0b21pY19mcmVlX29wYCwgYHJkc19jbXNnX3JkbWFfYXJnc2AsIGFuZCBgcmRzX3NlbmRfeG1pdGAuIFRoYXQncyBhIGxvdCBvZiB0b3VjaCBwb2ludHMsIGFuZCB0aGV5IGFsbCBsb29rIGNyaXRpY2FsLlxuXG5UaW1lIHRvIGNvbnNpZGVyIGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy4gYHJkc19zZW5kbXNnYCBsb29rcyBwcm9taXNpbmcgc2luY2UgaXQgY2FsbHMgYHJkc19jbXNnX3JkbWFfYXJnc2AgYW5kIGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyBtZXNzYWdlcy4gVGhlbiB0aGVyZSdzIGByZHNfcmVjdm1zZ2A7IGl0IGNvdWxkIHBvdGVudGlhbGx5IHRyaWdnZXIgYG1lc3NhZ2VfcHV0YCBsb2dpYy4gYHJkc19zZXRzb2Nrb3B0YCBzZWVtcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCBoYW5kbGVzIE1SIChNZW1vcnkgUmVnaW9uKSBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24sIHNwZWNpZmljYWxseSB3aXRoIG9wdGlvbnMgbGlrZSBgUkRTX0dFVF9NUmAgYW5kIGBSRFNfRlJFRV9NUmAuIFRoaXMgaXMgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBtZW1vcnkuIEZpbmFsbHksIGByZHNfc2VuZF94bWl0YCBhcHBlYXJzIHRvIGJlIGEga2V5IGZ1bmN0aW9uIGluIHRoZSB0cmFuc21pdCBwYXRoLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBgcmRzX3NldHNvY2tvcHRgIGRpcmVjdGx5LiBJIG5lZWQgdG8gY29uZmlybSBpdHMgcm9sZSBpbiBNUiBtYW5hZ2VtZW50LCBhbmQgSSdsbCBmaW5kIGl0IGluIGVpdGhlciBgbmV0L3Jkcy9hZl9yZHMuY2Agb3IgYG5ldC9yZHMvYmluZC5jYC4gSSdtIHN0YXJ0aW5nIHRvIGdldCBhIGdvb2QgcGljdHVyZSBvZiB3aGVyZSBJIHNob3VsZCBmb2N1cyBteSBhdHRlbnRpb24sIGdpdmVuIG15IGV4cGVydGlzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODgzNiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzowMjo1Ny40NDcyNzc4OTFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMzkwOTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJkc19zZXRzb2Nrb3B0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yZHMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yZHMvYWZfcmRzLmM9NDA5PXN0YXRpYyBpbnQgcmRzX3JlY3ZfdHJhY2tfbGF0ZW5jeShzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzb2NrcHRyX3Qgb3B0dmFsLFxcbi0tXFxubmV0L3Jkcy9hZl9yZHMuYy00MzUtXFxubmV0L3Jkcy9hZl9yZHMuYzo0MzY6c3RhdGljIGludCByZHNfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbm5ldC9yZHMvYWZfcmRzLmMtNDM3LVxcdFxcdFxcdCAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcXG4tLVxcbm5ldC9yZHMvYWZfcmRzLmM9NjQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHJkc19wcm90b19vcHMgPSB7XFxuLS1cXG5uZXQvcmRzL2FmX3Jkcy5jLTY1OC1cXHQuc2h1dGRvd24gPVxcdHNvY2tfbm9fc2h1dGRvd24sXFxubmV0L3Jkcy9hZl9yZHMuYzo2NTk6XFx0LnNldHNvY2tvcHQgPVxcdHJkc19zZXRzb2Nrb3B0LFxcbm5ldC9yZHMvYWZfcmRzLmMtNjYwLVxcdC5nZXRzb2Nrb3B0X2l0ZXIgPVxcdHJkc19nZXRzb2Nrb3B0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzowMjo1Ny41MTA2NzM1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMzI3OTE0NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSdyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBgcmRzX3NldHNvY2tvcHRgIEltcGxlbWVudGF0aW9uKipcblxuUmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdGFrZSBhIGNyaXRpY2FsIGxvb2sgYXQgdGhlIGByZHNfc2V0c29ja29wdGAgaW1wbGVtZW50YXRpb24uIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIChvciBwb3RlbnRpYWwgcHJvYmxlbXMpIGhhcHBlbiB3aGVuIGNvbmZpZ3VyaW5nIHNvY2tldCBvcHRpb25zIHdpdGhpbiB0aGUgUkRTIHByb3RvY29sIHN0YWNrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBkZXNpZ25lZCwgd2hhdCBvcHRpb25zIGFyZSBoYW5kbGVkLCBob3cgdGhleSdyZSB2YWxpZGF0ZWQsIGFuZCB3aGF0IGltcGFjdCB0aGV5IGhhdmUgb24gdGhlIHVuZGVybHlpbmcgUkRTIGNvbW11bmljYXRpb24uIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhpcyBpcyBvZnRlbiBhIGRlbGljYXRlIGFyZWEgd2hlcmUgc3VidGxlIGJ1Z3MgY2FuIGxlYWQgdG8gc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcywgb3IgZXZlbiBzeXN0ZW0gaW5zdGFiaWxpdHkuIEknbGwgYmUgcGFydGljdWxhcmx5IGZvY3VzZWQgb24gcmVzb3VyY2UgbWFuYWdlbWVudCwgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgYW5kIGVycm9yIGhhbmRsaW5nLiBJJ2xsIG5lZWQgdG8gZGlzc2VjdCB0aGUgY29kZSBjYXJlZnVsbHksIGNvbnNpZGVyIHRoZSBjb250ZXh0IG9mIHRoZSBjYWxsaW5nIGVudmlyb25tZW50LCBhbmQgbG9vayBmb3IgYW55IGFzc3VtcHRpb25zIHRoYXQgbWlnaHQgYnJlYWsgZG93biB1bmRlciB1bnVzdWFsIGNpcmN1bXN0YW5jZXMuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5NjEsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzowMzowMC44NDM0Njc1MjdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMDEwMDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlJEU19HRVRfTVJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Jkcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Jkcy9hZl9yZHMuYz00MzY9c3RhdGljIGludCByZHNfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L3Jkcy9hZl9yZHMuYy00NTEtXFx0XFx0YnJlYWs7XFxubmV0L3Jkcy9hZl9yZHMuYzo0NTI6XFx0Y2FzZSBSRFNfR0VUX01SOlxcbm5ldC9yZHMvYWZfcmRzLmMtNDUzLVxcdFxcdHJldCA9IHJkc19nZXRfbXIocnMsIG9wdHZhbCwgb3B0bGVuKTtcXG5uZXQvcmRzL2FmX3Jkcy5jLTQ1NC1cXHRcXHRicmVhaztcXG5uZXQvcmRzL2FmX3Jkcy5jOjQ1NTpcXHRjYXNlIFJEU19HRVRfTVJfRk9SX0RFU1Q6XFxubmV0L3Jkcy9hZl9yZHMuYy00NTYtXFx0XFx0cmV0ID0gcmRzX2dldF9tcl9mb3JfZGVzdChycywgb3B0dmFsLCBvcHRsZW4pO1xcbi0tXFxubmV0L3Jkcy9pYl9mcm1yLmM9NDA1PXN0cnVjdCByZHNfaWJfbXIgKnJkc19pYl9yZWdfZnJtcihzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2LFxcbi0tXFxubmV0L3Jkcy9pYl9mcm1yLmMtNDE0LVxcdGlmICghaWMpIHtcXG5uZXQvcmRzL2liX2ZybXIuYzo0MTU6XFx0XFx0LyogVE9ETzogQWRkIEZSV1Igc3VwcG9ydCBmb3IgUkRTX0dFVF9NUiB1c2luZyBwcm94eSBxcCovXFxubmV0L3Jkcy9pYl9mcm1yLmMtNDE2LVxcdFxcdHJldHVybiBFUlJfUFRSKC1FT1BOT1RTVVBQKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTM6MDM6MDAuOTA2NDgyNjY2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNjIyMDI0MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHN5bWJvbHMsIGZvY3VzaW5nIG9uIHRoZWlyIGltcG9ydGFuY2U6XG5cbioqTXkgTWVudGFsIFJvYWRtYXAgZm9yIE1lbW9yeSBSZWdpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgUkRNQSBmdW5jdGlvbiBjYWxscyBhbmQsIGZyb20gYSBtZW1vcnkgbWFuYWdlbWVudCBwZXJzcGVjdGl2ZSwgYHJkc19nZXRfbXJgIGFuZCBgcmRzX2dldF9tcl9mb3JfZGVzdGAgYXJlIGRlZmluaXRlbHkganVtcGluZyBvdXQgYXMgY3J1Y2lhbC4gVGhleSBhcmUgbXkgcHJpbWFyeSBmb2N1cy4gVGhleSBhcmUgdGhlIGluaXRpYWwgc3RlcHMgZm9yIHJlZ2lzdGVyaW5nIG1lbW9yeSBhbmQgb2J0YWluaW5nIE1lbW9yeSBSZWdpb24gKE1SKSBoYW5kbGVzLiBUaGV5J3JlIHdoZXJlIGl0IGFsbCAqc3RhcnRzKi4gSSBuZWVkIHRvIHRob3JvdWdobHkgdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBvZiBob3cgdGhlc2UgZnVuY3Rpb25zIGFsbG9jYXRlLCBtYXAsIGFuZCBzZWN1cmUgdGhlc2UgTVJzLiBUaGUgaW1wbGljYXRpb25zIGZvciBwZXJmb3JtYW5jZSwgc2VjdXJpdHkgYW5kIGNvbmN1cnJlbmN5IGFyZSBpbW1lZGlhdGVseSBhcHBhcmVudC5cblxuQW5kIG5hdHVyYWxseSwgYHJkc19mcmVlX21yYCBpcyBlcXVhbGx5IGltcG9ydGFudCwgYnV0IG9uIHRoZSBvdGhlciBlbmQgb2YgdGhlIHRyYW5zYWN0aW9uLiBJdCdzIHRoZSBjcml0aWNhbCBzdGVwIGZvciAqcmVsZWFzaW5nKiB0aGUgTVIuIElmIEkgZG9uJ3QgZ2V0IHRoZSBtZW1vcnkgZGVhbGxvY2F0aW9uIHBhcnQgcmlnaHQsIEknbGwgaGF2ZSBhbGwga2luZHMgb2YgcHJvYmxlbXM6IHJlc291cmNlIGxlYWtzLCBmcmFnbWVudGF0aW9uLCBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIGlmIHRoZXNlIHJlc291cmNlcyBhcmUgbm90IGNvcnJlY3RseSB6ZXJvZWQvY2xlYW5lZCB1cCwgeW91IG5hbWUgaXQuXG5cblNvLCBgcmRzX2dldF9tcmAsIGByZHNfZ2V0X21yX2Zvcl9kZXN0YCwgYW5kIGByZHNfZnJlZV9tcmAgYXJlIG15IGtleSBmb2N1cyBwb2ludHMuIFRoZWlyIGJlaGF2aW9yIGFuZCBpbnRlcmFjdGlvbnMgZGljdGF0ZSB0aGUgaW50ZWdyaXR5IGFuZCBlZmZpY2llbmN5IG9mIHRoZSBlbnRpcmUgbWVtb3J5IG1hbmFnZW1lbnQgbGF5ZXIgb2YgdGhpcyBSRE1BIGltcGxlbWVudGF0aW9uLiBUaG9zZSBhcmUgdGhlIGZ1bmN0aW9ucyB0aGF0IHdpbGwgdGVsbCBtZSBob3cgdG8gYnVpbGQgc29tZXRoaW5nIHJvYnVzdCwgcGVyZm9ybWFudCwgYW5kIHNlY3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1NTAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzowMzowNS4xNjg2ODg5MThaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NzYxMjM5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJSRFNfRlJFRV9NUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcmRzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcmRzL2FmX3Jkcy5jPTQzNj1zdGF0aWMgaW50IHJkc19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvcmRzL2FmX3Jkcy5jLTQ1Ny1cXHRcXHRicmVhaztcXG5uZXQvcmRzL2FmX3Jkcy5jOjQ1ODpcXHRjYXNlIFJEU19GUkVFX01SOlxcbm5ldC9yZHMvYWZfcmRzLmMtNDU5LVxcdFxcdHJldCA9IHJkc19mcmVlX21yKHJzLCBvcHR2YWwsIG9wdGxlbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEzOjAzOjA1LjUxNjMwNTI5MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzE3NTgzNDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMuXG5cbioqQWRkaW5nIFJETUEgTWVtb3J5IFJlZ2lvbiBGdW5jdGlvbnMgdG8gdGhlIFRvb2xraXQqKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBpbnRlZ3JhdGUgdGhlc2UgUkRNQSBmdW5jdGlvbnMuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gaW50cm9kdWNlIHRoZSBjb3JlIGZ1bmN0aW9uczogYHJkc19nZXRfbXJgLCBgcmRzX2dldF9tcl9mb3JfZGVzdGAsIGByZHNfZnJlZV9tcmAsIGByZHNfc2VuZG1zZ2AsIGFuZCBgcmRzX3JlY3Ztc2dgLiBUaGF0J3MgdGhlIGJhc2VsaW5lLCB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzLlxuXG5Ob3csIGhvbGQgb24uLi4gd2hhdCBhYm91dCBgcmRzX2Ntc2dfcmRtYV9hcmdzYD8gV2hlcmUgZG9lcyB0aGF0IGZpdCBpbj8gQWgsIGl0J3MgY2FsbGVkIGZyb20gYHJkc19zZW5kbXNnYC4gT2theSwgdGhhdCdzIGNydWNpYWw7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgY29ubmVjdGlvbiBjbGVhcmx5LiBJ4oCZZCBiZXR0ZXIgdGhvcm91Z2hseSBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHJkc19zZW5kbXNnYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgc28gaXQncyB0aGUgcmlnaHQgcGxhY2UgdG8gYmVnaW4uIFRpbWUgdG8gZGlnIGluIGFuZCBlbnN1cmUgSSd2ZSBnb3QgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDM0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTM6MDM6MDkuODMzODkxNDUzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDE5MDE1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZHNfc2VuZG1zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcmRzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcmRzL2FmX3Jkcy5jPTY0Nj1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyByZHNfcHJvdG9fb3BzID0ge1xcbi0tXFxubmV0L3Jkcy9hZl9yZHMuYy02NjAtXFx0LmdldHNvY2tvcHRfaXRlciA9XFx0cmRzX2dldHNvY2tvcHQsXFxubmV0L3Jkcy9hZl9yZHMuYzo2NjE6XFx0LnNlbmRtc2cgPVxcdHJkc19zZW5kbXNnLFxcbm5ldC9yZHMvYWZfcmRzLmMtNjYyLVxcdC5yZWN2bXNnID1cXHRyZHNfcmVjdm1zZyxcXG4tLVxcbm5ldC9yZHMvcmRzLmg9NjI5PXN0cnVjdCByZHNfc29jayB7XFxuLS1cXG5uZXQvcmRzL3Jkcy5oLTY1MS1cXHQvKlxcbm5ldC9yZHMvcmRzLmg6NjUyOlxcdCAqIHJkc19zZW5kbXNnIGNhY2hlcyB0aGUgY29ubiBpdCB1c2VkIHRoZSBsYXN0IHRpbWUgYXJvdW5kLlxcbm5ldC9yZHMvcmRzLmgtNjUzLVxcdCAqIFRoaXMgaGVscHMgYXZvaWQgY29zdGx5IGxvb2t1cHMuXFxuLS1cXG5uZXQvcmRzL3Jkcy5oPTk1MD12b2lkIHJkczZfaW5jX2luZm9fY29weShzdHJ1Y3QgcmRzX2luY29taW5nICppbmMsXFxuLS1cXG5uZXQvcmRzL3Jkcy5oLTk1NS0vKiBzZW5kLmMgKi9cXG5uZXQvcmRzL3Jkcy5oOjk1NjppbnQgcmRzX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgcGF5bG9hZF9sZW4pO1xcbm5ldC9yZHMvcmRzLmgtOTU3LXZvaWQgcmRzX3NlbmRfcGF0aF9yZXNldChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY29ubik7XFxuLS1cXG5uZXQvcmRzL3JlY3YuYz0xOTk9c3RhdGljIHZvaWQgcmRzX3JlY3ZfaHNfZXh0aGRycyhzdHJ1Y3QgcmRzX2hlYWRlciAqaGRyLFxcbi0tXFxubmV0L3Jkcy9yZWN2LmMtMjcwLSAqXFxubmV0L3Jkcy9yZWN2LmM6MjcxOiAqIDEuIHJkc19zZW5kbXNnIG9uIGZpcnN0IGNvbm5lY3QgYXR0ZW1wdCBzZW5kcyB0aGUgcHJvYmUgcGluZywgd2l0aCB0aGVcXG5uZXQvcmRzL3JlY3YuYy0yNzItICogICAgc2VuZGVyJ3MgbnBhdGhzIChzX25wYXRocylcXG4tLVxcbm5ldC9yZHMvc2VuZC5jPTExMTg9c3RhdGljIGludCByZHNfcmRtYV9ieXRlcyhzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCAqcmRtYV9ieXRlcylcXG4tLVxcbm5ldC9yZHMvc2VuZC5jLTExNDAtXFxubmV0L3Jkcy9zZW5kLmM6MTE0MTppbnQgcmRzX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgcGF5bG9hZF9sZW4pXFxubmV0L3Jkcy9zZW5kLmMtMTE0Mi17XFxuLS1cXG5uZXQvcmRzL3NlbmQuYy0xMTY2LVxcbm5ldC9yZHMvc2VuZC5jOjExNjc6XFx0LyogZXhwZWN0IDEgUkRNQSBDTVNHIHBlciByZHNfc2VuZG1zZy4gY2FuIHN0aWxsIGdyb3cgaWYgbW9yZSBuZWVkZWQuICovXFxubmV0L3Jkcy9zZW5kLmMtMTE2OC1cXHR2Y3QuaW5jciA9IDE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEzOjAzOjA5LjkxNDA4NzA1MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDYwNjcxMTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMsIHB1dHRpbmcgbXlzZWxmIGluIHRoZSByb2xlIG9mIHRoaW5raW5nIHRocm91Z2ggdGhlaXIgc2lnbmlmaWNhbmNlOlxuXG4qKktleSBGdW5jdGlvbiBTcG90bGlnaHQ6IGByZHNfc2VuZG1zZ2AgYW5kIGByZHNfc2VuZF94bWl0YCoqXG5cbkFscmlnaHQsIGxldCdzIHplcm8gaW4gb24gYSBjb3VwbGUgb2YgY3J1Y2lhbCBwb2ludHMgaW4gdGhlIFJlbW90ZSBEaXJlY3QgRGF0YSBUcmFuc2ZlciAoUkRNQSkgY29tbXVuaWNhdGlvbiBwYXRoLiBJJ3ZlIGJlZW4gZ2l2aW5nIHNvbWUgdGhvdWdodCB0byB0aGUgZnVuZGFtZW50YWwgcGllY2VzLCBhbmQgYHJkc19zZW5kbXNnYCBhbmQgYHJkc19zZW5kX3htaXRgIGFyZSBkZWZpbml0ZWx5IHN0YW5kaW5nIG91dCBhcyBnb29kIGZvY3VzIHN5bWJvbHMuIFRoZXkgc2VlbSB0byBiZSByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhlIHNlbmQgcHJvY2Vzcy4gS25vd2luZyBob3cgdGhlc2Ugd29yayBpcyBrZXkuXG5cbmByZHNfc2VuZG1zZ2AgcGFydGljdWxhcmx5IGxvb2tzIGludGVyZXN0aW5nIGFzIHRoZSBzdGFydGluZyBwb2ludC4gSSdtIGltYWdpbmluZyBpdCdzIHRoZSBpbnRlcmZhY2UsIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIGFwcGxpY2F0aW9uIHRvIGluaXRpYXRlIGEgc2VuZCBvcGVyYXRpb24uIEl0J3MgdGhlIFwiZnJvbnQgZG9vcixcIiBzbyB0byBzcGVhay4gVGhlbiwgZnJvbSB0aGF0IHBvaW50LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nLiBgcmRzX3NlbmRfeG1pdGAgb24gdGhlIG90aGVyIGhhbmQgbGlrZWx5IGhhbmRsZXMgdGhlIGFjdHVhbCB0cmFuc21pc3Npb24gb2YgdGhlIGRhdGEuIFRoYXQgc2VlbXMgbGlrZSB0aGUgaGVhdnkgbGlmdGluZyBwYXJ0IG9mIHRoZSBwcm9jZXNzIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSBmbG93IG9mIHRoaXMgZnVuY3Rpb24gaXMgZ29pbmcgdG8gZ2l2ZSBtZSBkZWVwIGluc2lnaHQgaW50byB0aGUgZWZmaWNpZW5jeSBvZiBSRE1BIHRyYW5zZmVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5ODcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzowMzoxNC45NzQ3NjE5MTFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNzEzMzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJkc19zZW5kX3htaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Jkcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Jkcy9jb25nLmM9MjE3PXZvaWQgcmRzX2NvbmdfcXVldWVfdXBkYXRlcyhzdHJ1Y3QgcmRzX2NvbmdfbWFwICptYXApXFxuLS1cXG5uZXQvcmRzL2NvbmcuYy0yMzAtXFx0XFx0XFx0cmRzX3N0YXRzX2luYyhzX2NvbmdfdXBkYXRlX3F1ZXVlZCk7XFxubmV0L3Jkcy9jb25nLmM6MjMxOlxcdFxcdFxcdC8qIFdlIGNhbm5vdCBpbmxpbmUgdGhlIGNhbGwgdG8gcmRzX3NlbmRfeG1pdCgpIGhlcmVcXG5uZXQvcmRzL2NvbmcuYy0yMzItXFx0XFx0XFx0ICogZm9yIHR3byByZWFzb25zIChib3RoIHBlcnRhaW5pbmcgdG8gYSBUQ1AgdHJhbnNwb3J0KTpcXG4tLVxcbm5ldC9yZHMvaWJfY20uYz0yODI9c3RhdGljIHZvaWQgcmRzX2liX3Rhc2tsZXRfZm5fc2VuZCh1bnNpZ25lZCBsb25nIGRhdGEpXFxuLS1cXG5uZXQvcmRzL2liX2NtLmMtMjk5LVxcdCAgICB0ZXN0X2JpdCgwLCBcXHUwMDI2Y29ubi1cXHUwMDNlY19tYXBfcXVldWVkKSkpXFxubmV0L3Jkcy9pYl9jbS5jOjMwMDpcXHRcXHRyZHNfc2VuZF94bWl0KFxcdTAwMjZpYy1cXHUwMDNlY29ubi1cXHUwMDNlY19wYXRoWzBdKTtcXG5uZXQvcmRzL2liX2NtLmMtMzAxLX1cXG4tLVxcbm5ldC9yZHMvaWJfc2VuZC5jPTI0NT12b2lkIHJkc19pYl9zZW5kX2NxZV9oYW5kbGVyKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMsIHN0cnVjdCBpYl93YyAqd2MpXFxuLS1cXG5uZXQvcmRzL2liX3NlbmQuYy0zMzUtICpcXG5uZXQvcmRzL2liX3NlbmQuYzozMzY6ICogVGhlIFJEUyBzZW5kIGNvZGUgaXMgZXNzZW50aWFsbHkgc2luZ2xlLXRocmVhZGVkOyByZHNfc2VuZF94bWl0XFxubmV0L3Jkcy9pYl9zZW5kLmMtMzM3LSAqIHNldHMgUkRTX0lOX1hNSVQgdG8gZW5zdXJlIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gdGhlIHNlbmQgcmluZy5cXG4tLVxcbm5ldC9yZHMvbG9vcC5jPTIzMT12b2lkIHJkc19sb29wX25ldF9leGl0KHZvaWQpXFxuLS1cXG5uZXQvcmRzL2xvb3AuYy0yMzctICogVGhpcyBpcyBtaXNzaW5nIC54bWl0XyogYmVjYXVzZSBsb29wIGRvZXNuJ3QgZ28gdGhyb3VnaCBnZW5lcmljXFxubmV0L3Jkcy9sb29wLmM6MjM4OiAqIHJkc19zZW5kX3htaXQoKSBhbmQgZG9lc24ndCBjYWxsIHJkc19yZWN2X2luY29taW5nKCkuICAubGlzdGVuX3N0b3AgYW5kXFxubmV0L3Jkcy9sb29wLmMtMjM5LSAqIC5sYWRkcl9jaGVjayBhcmUgbWlzc2luZyBiZWNhdXNlIHRyYW5zcG9ydC5jIGRvZXNuJ3QgaXRlcmF0ZSBvdmVyXFxuLS1cXG5uZXQvcmRzL3Jkcy5oPTU0MD1zdHJ1Y3QgcmRzX3RyYW5zcG9ydCB7XFxuLS1cXG5uZXQvcmRzL3Jkcy5oLTU4MC1cXHQvKlxcbm5ldC9yZHMvcmRzLmg6NTgxOlxcdCAqIC54bWl0IGlzIGNhbGxlZCBieSByZHNfc2VuZF94bWl0KCkgdG8gdGVsbCB0aGUgdHJhbnNwb3J0IHRvIHNlbmRcXG5uZXQvcmRzL3Jkcy5oLTU4Mi1cXHQgKiBwYXJ0IG9mIGEgbWVzc2FnZS4gIFRoZSBjYWxsZXIgc2VyaWFsaXplcyBvbiB0aGUgc2VuZF9zZW0gc28gdGhpc1xcbi0tXFxubmV0L3Jkcy9yZHMuaD05NTc9dm9pZCByZHNfc2VuZF9wYXRoX3Jlc2V0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjb25uKTtcXG5uZXQvcmRzL3Jkcy5oOjk1ODppbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApO1xcbm5ldC9yZHMvcmRzLmgtOTU5LXN0cnVjdCBzb2NrYWRkcl9pbjtcXG4tLVxcbm5ldC9yZHMvc2VuZC5jLTQ0LVxcbm5ldC9yZHMvc2VuZC5jOjQ1Oi8qIFdoZW4gdHJhbnNtaXR0aW5nIG1lc3NhZ2VzIGluIHJkc19zZW5kX3htaXQsIHdlIG5lZWQgdG8gZW1lcmdlIGZyb21cXG5uZXQvcmRzL3NlbmQuYy00Ni0gKiB0aW1lIHRvIHRpbWUgYW5kIGJyaWVmbHkgcmVsZWFzZSB0aGUgQ1BVLiBPdGhlcndpc2UgdGhlIHNvZnRsb2NrIHdhdGNoZG9nXFxuLS1cXG5uZXQvcmRzL3NlbmQuYz01OT1zdGF0aWMgdm9pZCByZHNfc2VuZF9yZW1vdmVfZnJvbV9zb2NrKHN0cnVjdCBsaXN0X2hlYWQgKm1lc3NhZ2VzLCBpbnQgc3RhdHVzKTtcXG4tLVxcbm5ldC9yZHMvc2VuZC5jLTYyLSAqIFJlc2V0IHRoZSBzZW5kIHN0YXRlLiAgQ2FsbGVycyBtdXN0IGVuc3VyZSB0aGF0IHRoaXMgZG9lc24ndCByYWNlIHdpdGhcXG5uZXQvcmRzL3NlbmQuYzo2MzogKiByZHNfc2VuZF94bWl0KCkuXFxubmV0L3Jkcy9zZW5kLmMtNjQtICovXFxuLS1cXG5uZXQvcmRzL3NlbmQuYz0xMjg9c3RhdGljIGJvb2wgcmRzX21wcmRzX2NwMF9jYXRjaHVwKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubilcXG4tLVxcbm5ldC9yZHMvc2VuZC5jLTE4Ni0gKi9cXG5uZXQvcmRzL3NlbmQuYzoxODc6aW50IHJkc19zZW5kX3htaXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxcbm5ldC9yZHMvc2VuZC5jLTE4OC17XFxuLS1cXG5uZXQvcmRzL3NlbmQuYy01NDEtfVxcbm5ldC9yZHMvc2VuZC5jOjU0MjpFWFBPUlRfU1lNQk9MX0dQTChyZHNfc2VuZF94bWl0KTtcXG5uZXQvcmRzL3NlbmQuYy01NDMtXFxuLS1cXG5uZXQvcmRzL3NlbmQuYz02NzY9c3RhdGljIHZvaWQgcmRzX3NlbmRfcmVtb3ZlX2Zyb21fc29jayhzdHJ1Y3QgbGlzdF9oZWFkICptZXNzYWdlcywgaW50IHN0YXR1cylcXG4tLVxcbm5ldC9yZHMvc2VuZC5jLTc1MS0gKiBtZXNzYWdlcyB1cCB0bywgYW5kIGluY2x1ZGluZywgdGhlIGdpdmVuIHNlcXVlbmNlIG51bWJlci4gIE1lc3NhZ2VzIGFyZVxcbm5ldC9yZHMvc2VuZC5jOjc1MjogKiBtb3ZlZCB0byB0aGUgcmV0cmFucyBxdWV1ZSB3aGVuIHJkc19zZW5kX3htaXQgcGlja3MgdGhlbSBvZmYgdGhlIHNlbmRcXG5uZXQvcmRzL3NlbmQuYy03NTMtICogcXVldWUuIFRoaXMgbWVhbnMgdGhhdCBpbiB0aGUgVENQIGNhc2UsIHRoZSBtZXNzYWdlIG1heSBub3QgaGF2ZSBiZWVuXFxuLS1cXG5uZXQvcmRzL3NlbmQuYz0xMTQxPWludCByZHNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBwYXlsb2FkX2xlbilcXG4tLVxcbm5ldC9yZHMvc2VuZC5jLTE0MzgtXFxubmV0L3Jkcy9zZW5kLmM6MTQzOTpcXHRyZXQgPSByZHNfc2VuZF94bWl0KGNwYXRoKTtcXG5uZXQvcmRzL3NlbmQuYy0xNDQwLVxcdGlmIChyZXQgPT0gLUVOT01FTSB8fCByZXQgPT0gLUVBR0FJTikge1xcbi0tXFxubmV0L3Jkcy90Y3AuYz0xMjY9dm9pZCByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbi0tXFxubmV0L3Jkcy90Y3AuYy0xNDAtXFx0ICogY3Bfc3RhdGUgdG8gc29tZXRoaW5nIG90aGVyIHRoYW4gUkRTX0NPTk5fVVAsIGFuZCB0aGVuXFxubmV0L3Jkcy90Y3AuYzoxNDE6XFx0ICogd2FpdGluZyBmb3IgYW55IGV4aXN0aW5nIHRocmVhZHMgaW4gcmRzX3NlbmRfeG1pdCB0b1xcbm5ldC9yZHMvdGNwLmMtMTQyLVxcdCAqIGNvbXBsZXRlIHJlbGVhc2VfaW5feG1pdCgpLiAoU3Vic2VxdWVudCB0aHJlYWRzIGVudGVyaW5nXFxubmV0L3Jkcy90Y3AuYzoxNDM6XFx0ICogcmRzX3NlbmRfeG1pdCgpIHdpbGwgYmFpbCBvbiAhcmRzX2Nvbm5fdXAoKS5cXG5uZXQvcmRzL3RjcC5jLTE0NC1cXHQgKlxcbi0tXFxubmV0L3Jkcy90aHJlYWRzLmM9MTkxPXZvaWQgcmRzX3NlbmRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9yZHMvdGhyZWFkcy5jLTE5OS1cXHRcXHRjbGVhcl9iaXQoUkRTX0xMX1NFTkRfRlVMTCwgXFx1MDAyNmNwLVxcdTAwM2VjcF9mbGFncyk7XFxubmV0L3Jkcy90aHJlYWRzLmM6MjAwOlxcdFxcdHJldCA9IHJkc19zZW5kX3htaXQoY3ApO1xcbm5ldC9yZHMvdGhyZWFkcy5jLTIwMS1cXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTM6MDM6MTUuMDM1NDgxNTFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMyNzkyNTU5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBSRFMgQ29kZSoqXG5cblJpZ2h0LCBzbyBJJ20gaG9uaW5nIGluIG9uIHRoZSBjcnVjaWFsIHRyYW5zbWlzc2lvbiBwYXRoIGhlcmUuIGByZHNfc2VuZF94bWl0YCBzZWVtcyBsaWtlIGEgZ29vZCBmb2NhbCBwb2ludCDigJMgaXQncyBhIGtleSBmdW5jdGlvbiBpbiBnZXR0aW5nIHRoZSBkYXRhIG91dCB0aGUgZG9vci4gSSBzaG91bGQgcHJvYmFibHkgc3RhcnQgdGhlcmUuXG5cbkJ1dCBiZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW4gdGhhdCBwYXJ0aWN1bGFyIGJpdCBvZiBjb2RlLCBpdCBtaWdodCBiZSBiZW5lZmljaWFsIHRvIGNoZWNrIHRoZSBmdW5jdGlvbiB0aGF0IGZlZWRzIGByZHNfc2VuZF94bWl0YCBpdHMgZGF0YTogYHJkc19tZXNzYWdlX3B1dGAuIFRoaXMgZnVuY3Rpb24gbGlrZWx5IGhhbmRsZXMgcHJlcGFyaW5nIGFuZCBxdWV1aW5nIHRoZSBtZXNzYWdlcyBmb3IgdHJhbnNtaXNzaW9uLCBzbyB1bmRlcnN0YW5kaW5nIGl0cyByb2xlIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgcmRzX3NlbmRfeG1pdGAgaW50ZXJhY3RzIHdpdGggdGhlIGhpZ2hlciBsZXZlbCBtZXNzYWdpbmcgbG9naWMuIEl0IHNob3VsZCBhbHNvIHByb3ZpZGUgdmFsdWFibGUgY29udGV4dCwgYXMgd2VsbCBhcyBlbnN1cmUgdGhhdCBJJ20gdGFraW5nIGEgdG9wLWRvd24gYXBwcm9hY2guIEkgc2hvdWxkIHN0YXJ0IHRoZXJlIGFuZCB0aGVuIG1vdmUgdG8gYHJkc19zZW5kX3htaXRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzgzNywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEzOjAzOjIwLjM2MzQxMDkzNVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY3MDQ1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmRzX21lc3NhZ2VfcHV0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yZHMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yZHMvY29ubmVjdGlvbi5jPTQ2OD1zdGF0aWMgdm9pZCByZHNfY29ubl9wYXRoX2Rlc3Ryb3koc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxcbi0tXFxubmV0L3Jkcy9jb25uZWN0aW9uLmMtNDg3LVxcdFxcdEJVR19PTighbGlzdF9lbXB0eShcXHUwMDI2cm0tXFx1MDAzZW1fc29ja19pdGVtKSk7XFxubmV0L3Jkcy9jb25uZWN0aW9uLmM6NDg4OlxcdFxcdHJkc19tZXNzYWdlX3B1dChybSk7XFxubmV0L3Jkcy9jb25uZWN0aW9uLmMtNDg5LVxcdH1cXG5uZXQvcmRzL2Nvbm5lY3Rpb24uYy00OTAtXFx0aWYgKGNwLVxcdTAwM2VjcF94bWl0X3JtKVxcbm5ldC9yZHMvY29ubmVjdGlvbi5jOjQ5MTpcXHRcXHRyZHNfbWVzc2FnZV9wdXQoY3AtXFx1MDAzZWNwX3htaXRfcm0pO1xcbm5ldC9yZHMvY29ubmVjdGlvbi5jLTQ5Mi1cXG4tLVxcbm5ldC9yZHMvaWJfY20uYz0xMDY0PXZvaWQgcmRzX2liX2Nvbm5fcGF0aF9zaHV0ZG93bihzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXFxuLS1cXG5uZXQvcmRzL2liX2NtLmMtMTE4NS1cXHRcXHRybSA9IGNvbnRhaW5lcl9vZihpYy1cXHUwMDNlaV9kYXRhX29wLCBzdHJ1Y3QgcmRzX21lc3NhZ2UsIGRhdGEpO1xcbm5ldC9yZHMvaWJfY20uYzoxMTg2OlxcdFxcdHJkc19tZXNzYWdlX3B1dChybSk7XFxubmV0L3Jkcy9pYl9jbS5jLTExODctXFx0XFx0aWMtXFx1MDAzZWlfZGF0YV9vcCA9IE5VTEw7XFxuLS1cXG5uZXQvcmRzL2liX3NlbmQuYz0yNDU9dm9pZCByZHNfaWJfc2VuZF9jcWVfaGFuZGxlcihzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljLCBzdHJ1Y3QgaWJfd2MgKndjKVxcbi0tXFxubmV0L3Jkcy9pYl9zZW5kLmMtMjg5LVxcdFxcdFxcdH1cXG5uZXQvcmRzL2liX3NlbmQuYzoyOTA6XFx0XFx0XFx0cmRzX21lc3NhZ2VfcHV0KHJtKTtcXG5uZXQvcmRzL2liX3NlbmQuYy0yOTEtXFx0XFx0XFx0c2VuZC1cXHUwMDNlc19vcCA9IE5VTEw7XFxuLS1cXG5uZXQvcmRzL2xvb3AuYz0xMTE9c3RhdGljIHZvaWQgcmRzX2xvb3BfaW5jX2ZyZWUoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKVxcbi0tXFxubmV0L3Jkcy9sb29wLmMtMTE0LVxcbm5ldC9yZHMvbG9vcC5jOjExNTpcXHRyZHNfbWVzc2FnZV9wdXQocm0pO1xcbm5ldC9yZHMvbG9vcC5jLTExNi19XFxuLS1cXG5uZXQvcmRzL21lc3NhZ2UuYz0xODU9c3RhdGljIHZvaWQgcmRzX21lc3NhZ2VfdW5waW5fd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9yZHMvbWVzc2FnZS5jLTE5Ny1cXG5uZXQvcmRzL21lc3NhZ2UuYzoxOTg6dm9pZCByZHNfbWVzc2FnZV9wdXQoc3RydWN0IHJkc19tZXNzYWdlICpybSlcXG5uZXQvcmRzL21lc3NhZ2UuYy0xOTkte1xcbi0tXFxubmV0L3Jkcy9tZXNzYWdlLmMtMjIyLX1cXG5uZXQvcmRzL21lc3NhZ2UuYzoyMjM6RVhQT1JUX1NZTUJPTF9HUEwocmRzX21lc3NhZ2VfcHV0KTtcXG5uZXQvcmRzL21lc3NhZ2UuYy0yMjQtXFxuLS1cXG5uZXQvcmRzL21lc3NhZ2UuYz00MTA9c3RydWN0IHJkc19tZXNzYWdlICpyZHNfbWVzc2FnZV9tYXBfcGFnZXModW5zaWduZWQgbG9uZyAqcGFnZV9hZGRycywgdW5zaWduZWQgaW50IHRvdGFsX2xlbilcXG4tLVxcbm5ldC9yZHMvbWVzc2FnZS5jLTQyNi1cXHRcXHR2b2lkICplcnIgPSBFUlJfQ0FTVChybS1cXHUwMDNlZGF0YS5vcF9zZyk7XFxubmV0L3Jkcy9tZXNzYWdlLmM6NDI3OlxcdFxcdHJkc19tZXNzYWdlX3B1dChybSk7XFxubmV0L3Jkcy9tZXNzYWdlLmMtNDI4LVxcdFxcdHJldHVybiBlcnI7XFxuLS1cXG5uZXQvcmRzL3JkbWEuYz01MDY9dm9pZCByZHNfcmRtYV9mcmVlX29wKHN0cnVjdCBybV9yZG1hX29wICpybylcXG4tLVxcbm5ldC9yZHMvcmRtYS5jLTUxNi1cXHRcXHQvKiBEaXJ0eWluZyB0aGUgcGFnZXMgb24gdW5waW4gY2FuIHNsZWVwOyBsZWF2ZSB0aGVtXFxubmV0L3Jkcy9yZG1hLmM6NTE3OlxcdFxcdCAqIHBpbm5lZCBhbmQgaGF2ZSByZHNfbWVzc2FnZV9wdXQoKSBmaW5pc2ggdGhlIHVucGluXFxubmV0L3Jkcy9yZG1hLmMtNTE4LVxcdFxcdCAqIGZyb20gcHJvY2VzcyBjb250ZXh0Llxcbi0tXFxubmV0L3Jkcy9yZG1hLmM9NTM5PXZvaWQgcmRzX2F0b21pY19mcmVlX29wKHN0cnVjdCBybV9hdG9taWNfb3AgKmFvKVxcbi0tXFxubmV0L3Jkcy9yZG1hLmMtNTQ0LVxcdFxcdC8qIERpcnR5aW5nIHRoZSBwYWdlIG9uIHVucGluIGNhbiBzbGVlcDsgbGVhdmUgaXRcXG5uZXQvcmRzL3JkbWEuYzo1NDU6XFx0XFx0ICogcGlubmVkIGFuZCBoYXZlIHJkc19tZXNzYWdlX3B1dCgpIGZpbmlzaCB0aGUgdW5waW5cXG5uZXQvcmRzL3JkbWEuYy01NDYtXFx0XFx0ICogZnJvbSBwcm9jZXNzIGNvbnRleHQuXFxuLS1cXG5uZXQvcmRzL3Jkcy5oPTkxMT12b2lkIHJkc19tZXNzYWdlX2FkZHJlZihzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKTtcXG5uZXQvcmRzL3Jkcy5oOjkxMjp2b2lkIHJkc19tZXNzYWdlX3B1dChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKTtcXG5uZXQvcmRzL3Jkcy5oLTkxMy12b2lkIHJkc19tZXNzYWdlX3dhaXQoc3RydWN0IHJkc19tZXNzYWdlICpybSk7XFxuLS1cXG5uZXQvcmRzL3NlbmQuYz02NT12b2lkIHJkc19zZW5kX3BhdGhfcmVzZXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxcbi0tXFxubmV0L3Jkcy9zZW5kLmMtNzctXFx0XFx0cmRzX21lc3NhZ2VfdW5tYXBwZWQocm0pO1xcbm5ldC9yZHMvc2VuZC5jOjc4OlxcdFxcdHJkc19tZXNzYWdlX3B1dChybSk7XFxubmV0L3Jkcy9zZW5kLmMtNzktXFx0fVxcbi0tXFxubmV0L3Jkcy9zZW5kLmM9MTg3PWludCByZHNfc2VuZF94bWl0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcXG4tLVxcbm5ldC9yZHMvc2VuZC5jLTM1NC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgZmxhZ3MpO1xcbm5ldC9yZHMvc2VuZC5jOjM1NTpcXHRcXHRcXHRcXHRcXHRyZHNfbWVzc2FnZV9wdXQocm0pO1xcbm5ldC9yZHMvc2VuZC5jLTM1Ni1cXHRcXHRcXHRcXHR9XFxuLS1cXG5uZXQvcmRzL3NlbmQuYy00ODUtXFxubmV0L3Jkcy9zZW5kLmM6NDg2OlxcdFxcdFxcdHJkc19tZXNzYWdlX3B1dChybSk7XFxubmV0L3Jkcy9zZW5kLmMtNDg3LVxcdFxcdH1cXG4tLVxcbm5ldC9yZHMvc2VuZC5jLTQ5OC1cXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHJtLCBcXHUwMDI2dG9fYmVfZHJvcHBlZCwgbV9jb25uX2l0ZW0pXFxubmV0L3Jkcy9zZW5kLmM6NDk5OlxcdFxcdFxcdHJkc19tZXNzYWdlX3B1dChybSk7XFxubmV0L3Jkcy9zZW5kLmMtNTAwLVxcdFxcdHJkc19zZW5kX3JlbW92ZV9mcm9tX3NvY2soXFx1MDAyNnRvX2JlX2Ryb3BwZWQsIFJEU19SRE1BX0RST1BQRUQpO1xcbi0tXFxubmV0L3Jkcy9zZW5kLmM9Njc2PXN0YXRpYyB2b2lkIHJkc19zZW5kX3JlbW92ZV9mcm9tX3NvY2soc3RydWN0IGxpc3RfaGVhZCAqbWVzc2FnZXMsIGludCBzdGF0dXMpXFxuLS1cXG5uZXQvcmRzL3NlbmQuYy03MzctXFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cm0tXFx1MDAzZW1fcnNfbG9jaywgZmxhZ3MpO1xcbm5ldC9yZHMvc2VuZC5jOjczODpcXHRcXHRyZHNfbWVzc2FnZV9wdXQocm0pO1xcbm5ldC9yZHMvc2VuZC5jLTczOS1cXHRcXHRpZiAod2FzX29uX3NvY2spXFxubmV0L3Jkcy9zZW5kLmM6NzQwOlxcdFxcdFxcdHJkc19tZXNzYWdlX3B1dChybSk7XFxubmV0L3Jkcy9zZW5kLmMtNzQxLVxcdH1cXG4tLVxcbm5ldC9yZHMvc2VuZC5jPTc5Mz12b2lkIHJkc19zZW5kX2Ryb3BfdG8oc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHNvY2thZGRyX2luNiAqZGVzdClcXG4tLVxcbm5ldC9yZHMvc2VuZC5jLTg1Ni1cXG5uZXQvcmRzL3NlbmQuYzo4NTc6XFx0XFx0cmRzX21lc3NhZ2VfcHV0KHJtKTtcXG5uZXQvcmRzL3NlbmQuYy04NTgtXFx0fVxcbi0tXFxubmV0L3Jkcy9zZW5kLmMtODc5LVxcbm5ldC9yZHMvc2VuZC5jOjg4MDpcXHRcXHRyZHNfbWVzc2FnZV9wdXQocm0pO1xcbm5ldC9yZHMvc2VuZC5jLTg4MS1cXHR9XFxuLS1cXG5uZXQvcmRzL3NlbmQuYz0xMTQxPWludCByZHNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBwYXlsb2FkX2xlbilcXG4tLVxcbm5ldC9yZHMvc2VuZC5jLTE0NTItXFxubmV0L3Jkcy9zZW5kLmM6MTQ1MzpcXHRyZHNfbWVzc2FnZV9wdXQocm0pO1xcbm5ldC9yZHMvc2VuZC5jLTE0NTQtXFxuLS1cXG5uZXQvcmRzL3NlbmQuYy0xNDcyLVxcdGlmIChybSlcXG5uZXQvcmRzL3NlbmQuYzoxNDczOlxcdFxcdHJkc19tZXNzYWdlX3B1dChybSk7XFxubmV0L3Jkcy9zZW5kLmMtMTQ3NC1cXHRyZXR1cm4gcmV0O1xcbi0tXFxubmV0L3Jkcy9zZW5kLmM9MTQ4Nj1yZHNfc2VuZF9wcm9iZShzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3AsIF9fYmUxNiBzcG9ydCxcXG4tLVxcbm5ldC9yZHMvc2VuZC5jLTE1NDUtXFxubmV0L3Jkcy9zZW5kLmM6MTU0NjpcXHRyZHNfbWVzc2FnZV9wdXQocm0pO1xcbm5ldC9yZHMvc2VuZC5jLTE1NDctXFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvcmRzL3NlbmQuYy0xNTUwLVxcdGlmIChybSlcXG5uZXQvcmRzL3NlbmQuYzoxNTUxOlxcdFxcdHJkc19tZXNzYWdlX3B1dChybSk7XFxubmV0L3Jkcy9zZW5kLmMtMTU1Mi1cXHRyZXR1cm4gcmV0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzowMzoyMC40MjAxMTk5MTRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAzODY0MTU0MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgcmRzX21lc3NhZ2VfcHV0YCBVc2FnZSBhbmQgUmVsYXRlZCBDaGFuZ2VzKipcblxuT2theSwgc28gYHJkc19tZXNzYWdlX3B1dGAgaXMgYSBoZWF2aWx5IHV0aWxpemVkIGZ1bmN0aW9uIHdpdGhpbiB0aGlzIHN5c3RlbSDigJMgdGhhdCdzIHRoZSBmaXJzdCB0aGluZyBJIG5vdGljZS4gVGhpcyBwYXRjaCwgc3BlY2lmaWNhbGx5LCBpbnRyb2R1Y2VzIGEgbmV3IHdvcmtxdWV1ZSBmdW5jdGlvbiwgYHJkc19tZXNzYWdlX3VucGluX3dvcmtlcmAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoeSB0aGUgd29ya3F1ZXVlP1wiIEl0IGltcGxpZXMgc29tZSBraW5kIG9mIGRlZmVycmVkIG9wZXJhdGlvbiwgbGlrZWx5IHJlbGF0ZWQgdG8gcmVzb3VyY2UgbWFuYWdlbWVudCBvciBzeW5jaHJvbml6YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB1bnBpbm5pbmcgYW5kIHRoZSBtZXNzYWdlIGxpZmVjeWNsZS5cblxuVGhlIHBhdGNoIGFsc28gdG91Y2hlcyBgcmRzX3JkbWFfZnJlZV9vcGAgYW5kIGByZHNfYXRvbWljX2ZyZWVfb3BgLiBXaGVuZXZlciBJIHNlZSBjaGFuZ2VzIHRoYXQgaW1wYWN0IGZ1bmN0aW9ucyBkZWFsaW5nIHdpdGggUkRNQSBhbmQgYXRvbWljcywgbXkgYW50ZW5uYSBnbyB1cC4gVGhvc2UgYXJlIHBvdGVudGlhbCBhcmVhcyBmb3Igc3VidGxlIGJ1Z3Mgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuIEdpdmVuIHRoYXQgYHJkc19tZXNzYWdlX3B1dGAgaXMgc28gY2VudHJhbCwgSSdsbCBzdGFydCBieSBmb2N1c2luZyBvbiBgcmRzX3JkbWFfZnJlZV9vcGAuIEkgd2FudCB0byBzZWUgaG93IHRoZSBSRE1BIHJlc291cmNlcyBhcmUgYmVpbmcgaGFuZGxlZCBpbiByZWxhdGlvbiB0byB0aGlzIHVucGlubmluZyBwcm9jZXNzLiBJcyB0aGlzIGNoYW5nZSByZWxhdGVkIHRvIGJ1ZmZlciByZS11c2UsIFJETUEgY29tcGxldGlvbiBoYW5kbGluZywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEEgcXVpY2sgY2hlY2sgc2hvdWxkIGdpdmUgbWUgYW4gaWRlYSBhYm91dCBob3cgdGhpcyBhbGwgZml0cyB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxMzMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzowMzozMC44MDY1Mzc1MTdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxOTI5ODk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJkc19yZG1hX2ZyZWVfb3BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Jkcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Jkcy9tZXNzYWdlLmM9MTMyPXN0YXRpYyB2b2lkIHJkc19tZXNzYWdlX3B1cmdlKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pXFxuLS1cXG5uZXQvcmRzL21lc3NhZ2UuYy0xNzQtXFx0aWYgKHJtLVxcdTAwM2VyZG1hLm9wX2FjdGl2ZSlcXG5uZXQvcmRzL21lc3NhZ2UuYzoxNzU6XFx0XFx0cmRzX3JkbWFfZnJlZV9vcChcXHUwMDI2cm0tXFx1MDAzZXJkbWEpO1xcbm5ldC9yZHMvbWVzc2FnZS5jLTE3Ni1cXHRpZiAocm0tXFx1MDAzZXJkbWEub3BfcmRtYV9tcilcXG4tLVxcbm5ldC9yZHMvbWVzc2FnZS5jPTE5OD12b2lkIHJkc19tZXNzYWdlX3B1dChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKVxcbi0tXFxubmV0L3Jkcy9tZXNzYWdlLmMtMjA4LVxcdFxcdC8qIEEgZmluYWwgcHV0IGluIGF0b21pYyBjb250ZXh0IGNhbm5vdCBkaXJ0eSB0aGUgb3BzJ1xcbm5ldC9yZHMvbWVzc2FnZS5jOjIwOTpcXHRcXHQgKiB1c2VyIHBhZ2VzIG9uIHVucGluLCBzbyByZHNfcmRtYV9mcmVlX29wKCkgYW5kXFxubmV0L3Jkcy9tZXNzYWdlLmMtMjEwLVxcdFxcdCAqIHJkc19hdG9taWNfZnJlZV9vcCgpIGRlZmVycmVkIGl0LiAgRmluaXNoIHRoZSB1bnBpbixcXG4tLVxcbm5ldC9yZHMvcmRtYS5jPTQ5MT12b2lkIHJkc19yZG1hX29wX3VucGluX3BhZ2VzKHN0cnVjdCBybV9yZG1hX29wICpybylcXG4tLVxcbm5ldC9yZHMvcmRtYS5jLTUwNS1cXG5uZXQvcmRzL3JkbWEuYzo1MDY6dm9pZCByZHNfcmRtYV9mcmVlX29wKHN0cnVjdCBybV9yZG1hX29wICpybylcXG5uZXQvcmRzL3JkbWEuYy01MDcte1xcbi0tXFxubmV0L3Jkcy9yZG1hLmM9NjM3PWludCByZHNfY21zZ19yZG1hX2FyZ3Moc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcXG4tLVxcbm5ldC9yZHMvcmRtYS5jLTgzMS1cXHRpZiAocmV0KVxcbm5ldC9yZHMvcmRtYS5jOjgzMjpcXHRcXHRyZHNfcmRtYV9mcmVlX29wKG9wKTtcXG5uZXQvcmRzL3JkbWEuYy04MzMtXFx0ZWxzZVxcbi0tXFxubmV0L3Jkcy9yZHMuaD05ODI9aW50IHJkc19jbXNnX3JkbWFfbWFwKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sXFxubmV0L3Jkcy9yZHMuaC05ODMtXFx0XFx0XFx0ICBzdHJ1Y3QgY21zZ2hkciAqY21zZyk7XFxubmV0L3Jkcy9yZHMuaDo5ODQ6dm9pZCByZHNfcmRtYV9mcmVlX29wKHN0cnVjdCBybV9yZG1hX29wICpybyk7XFxubmV0L3Jkcy9yZHMuaC05ODUtdm9pZCByZHNfYXRvbWljX2ZyZWVfb3Aoc3RydWN0IHJtX2F0b21pY19vcCAqYW8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzowMzozMC44ODg0NzI3MzZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA4NDcyNDU5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIEkgdW5kZXJzdGFuZCB0aGUgc2l0dWF0aW9uOlxuXG4qKlJEUyBSRE1BIE1lbW9yeSBNYW5hZ2VtZW50IENvbnRleHR1YWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IFJETUEgbWVtb3J5IGlzIG1hbmFnZWQgd2l0aGluIHRoZSBSRFMgcHJvdG9jb2wgc3RhY2ssIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgcmRzX3JkbWFfZnJlZV9vcGAuIEkgc2VlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFzIHBhcnQgb2YgYSBjaGFpbjogZnJvbSBgcmRzX21lc3NhZ2VfcHVyZ2VgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBmcm9tIGByZHNfbWVzc2FnZV9wdXRgLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgbGlmZWN5Y2xlIG9mIG1lc3NhZ2VzIGFuZCBob3cgdGhlaXIgYXNzb2NpYXRlZCBSRE1BIHJlc291cmNlcyBhcmUgcmVsZWFzZWQuIFRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYSBzdWJ0bGUgY2hhbmdlLCBlZmZlY3RpdmVseSBkZWZlcnJpbmcgdGhlIHVucGlubmluZyBvZiBtZW1vcnkgdG8gYSB3b3JrcXVldWUsIGJ1dCAqb25seSogaWYgdGhlIGNhbGwgdG8gYHJkc19yZG1hX2ZyZWVfb3BgIGhhcHBlbnMgZnJvbSBhbiBhdG9taWMgY29udGV4dC4gVGhpcyBpcyBhIGNydWNpYWwgZnVuY3Rpb25hbCBzaGlmdCBpbiBob3cgbWVtb3J5IGlzIGhhbmRsZWQgd2l0aGluIFJEUy4gSXQgbWVhbnMgd2UncmUgdHJ5aW5nIHRvIHByZXZlbnQgYmxvY2tpbmcgaW4gY3JpdGljYWwgc2VjdGlvbnMuIE5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBkZWZlcnJhbC4gTGV0IG1lIHN0YXJ0IGJ5IGxvb2tpbmcgaW50byBgX19yZHNfcHV0X21yX2ZpbmFsYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcwODIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzowMzozNC45NzMxOTk4NVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUxMTE4NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19yZHNfcHV0X21yX2ZpbmFsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yZHMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yZHMvbWVzc2FnZS5jPTEzMj1zdGF0aWMgdm9pZCByZHNfbWVzc2FnZV9wdXJnZShzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKVxcbi0tXFxubmV0L3Jkcy9tZXNzYWdlLmMtMTc2LVxcdGlmIChybS1cXHUwMDNlcmRtYS5vcF9yZG1hX21yKVxcbm5ldC9yZHMvbWVzc2FnZS5jOjE3NzpcXHRcXHRrcmVmX3B1dChcXHUwMDI2cm0tXFx1MDAzZXJkbWEub3BfcmRtYV9tci1cXHUwMDNlcl9rcmVmLCBfX3Jkc19wdXRfbXJfZmluYWwpO1xcbm5ldC9yZHMvbWVzc2FnZS5jLTE3OC1cXG4tLVxcbm5ldC9yZHMvbWVzc2FnZS5jLTE4MS1cXHRpZiAocm0tXFx1MDAzZWF0b21pYy5vcF9yZG1hX21yKVxcbm5ldC9yZHMvbWVzc2FnZS5jOjE4MjpcXHRcXHRrcmVmX3B1dChcXHUwMDI2cm0tXFx1MDAzZWF0b21pYy5vcF9yZG1hX21yLVxcdTAwM2VyX2tyZWYsIF9fcmRzX3B1dF9tcl9maW5hbCk7XFxubmV0L3Jkcy9tZXNzYWdlLmMtMTgzLX1cXG4tLVxcbm5ldC9yZHMvcmRtYS5jPTk1PXN0YXRpYyB2b2lkIHJkc19kZXN0cm95X21yKHN0cnVjdCByZHNfbXIgKm1yKVxcbi0tXFxubmV0L3Jkcy9yZG1hLmMtMTE0LVxcbm5ldC9yZHMvcmRtYS5jOjExNTp2b2lkIF9fcmRzX3B1dF9tcl9maW5hbChzdHJ1Y3Qga3JlZiAqa3JlZilcXG5uZXQvcmRzL3JkbWEuYy0xMTYte1xcbi0tXFxubmV0L3Jkcy9yZG1hLmM9MTI4PXZvaWQgcmRzX3JkbWFfZHJvcF9rZXlzKHN0cnVjdCByZHNfc29jayAqcnMpXFxuLS1cXG5uZXQvcmRzL3JkbWEuYy0xNDItXFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cnMtXFx1MDAzZXJzX3JkbWFfbG9jaywgZmxhZ3MpO1xcbm5ldC9yZHMvcmRtYS5jOjE0MzpcXHRcXHRrcmVmX3B1dChcXHUwMDI2bXItXFx1MDAzZXJfa3JlZiwgX19yZHNfcHV0X21yX2ZpbmFsKTtcXG5uZXQvcmRzL3JkbWEuYy0xNDQtXFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnJzLVxcdTAwM2Vyc19yZG1hX2xvY2ssIGZsYWdzKTtcXG4tLVxcbm5ldC9yZHMvcmRtYS5jPTE3Mz1zdGF0aWMgaW50IF9fcmRzX3JkbWFfbWFwKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfZ2V0X21yX2FyZ3MgKmFyZ3MsXFxuLS1cXG5uZXQvcmRzL3JkbWEuYy0yNDctXFx0LyogVGhlIE1SIGNhbiBvdXRsaXZlIGl0cyBzb2NrZXQ6IGEgc29ja2V0IHJlZmVyZW5jZSBpcyBoZWxkXFxubmV0L3Jkcy9yZG1hLmM6MjQ4OlxcdCAqIHVudGlsIHRoZSBmaW5hbCBrcmVmIGlzIGRyb3BwZWQgaW4gX19yZHNfcHV0X21yX2ZpbmFsKCkuXFxubmV0L3Jkcy9yZG1hLmMtMjQ5LVxcdCAqL1xcbi0tXFxubmV0L3Jkcy9yZG1hLmMtMzU1LVxcdGlmIChtcilcXG5uZXQvcmRzL3JkbWEuYzozNTY6XFx0XFx0a3JlZl9wdXQoXFx1MDAyNm1yLVxcdTAwM2VyX2tyZWYsIF9fcmRzX3B1dF9tcl9maW5hbCk7XFxubmV0L3Jkcy9yZG1hLmMtMzU3LVxcdHJldHVybiByZXQ7XFxuLS1cXG5uZXQvcmRzL3JkbWEuYz00MDA9aW50IHJkc19mcmVlX21yKHN0cnVjdCByZHNfc29jayAqcnMsIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXFxuLS1cXG5uZXQvcmRzL3JkbWEuYy00MzYtXFxubmV0L3Jkcy9yZG1hLmM6NDM3OlxcdGtyZWZfcHV0KFxcdTAwMjZtci1cXHUwMDNlcl9rcmVmLCBfX3Jkc19wdXRfbXJfZmluYWwpO1xcbm5ldC9yZHMvcmRtYS5jLTQzOC1cXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9yZHMvcmRtYS5jPTQ0Nj12b2lkIHJkc19yZG1hX3VudXNlKHN0cnVjdCByZHNfc29jayAqcnMsIHUzMiByX2tleSwgaW50IGZvcmNlKVxcbi0tXFxubmV0L3Jkcy9yZG1hLmMtNDgyLVxcdC8qIFJlbGVhc2UgdGhlIHJlZmVyZW5jZSBoZWxkIGFib3ZlLiAqL1xcbm5ldC9yZHMvcmRtYS5jOjQ4MzpcXHRrcmVmX3B1dChcXHUwMDI2bXItXFx1MDAzZXJfa3JlZiwgX19yZHNfcHV0X21yX2ZpbmFsKTtcXG5uZXQvcmRzL3JkbWEuYy00ODQtXFxuLS1cXG5uZXQvcmRzL3JkbWEuYy00ODctXFx0aWYgKHpvdF9tZSlcXG5uZXQvcmRzL3JkbWEuYzo0ODg6XFx0XFx0a3JlZl9wdXQoXFx1MDAyNm1yLVxcdTAwM2VyX2tyZWYsIF9fcmRzX3B1dF9tcl9maW5hbCk7XFxubmV0L3Jkcy9yZG1hLmMtNDg5LX1cXG4tLVxcbm5ldC9yZHMvcmRtYS5jPTUwNj12b2lkIHJkc19yZG1hX2ZyZWVfb3Aoc3RydWN0IHJtX3JkbWFfb3AgKnJvKVxcbi0tXFxubmV0L3Jkcy9yZG1hLmMtNTA4LVxcdGlmIChyby1cXHUwMDNlb3Bfb2RwX21yKSB7XFxubmV0L3Jkcy9yZG1hLmM6NTA5OlxcdFxcdGtyZWZfcHV0KFxcdTAwMjZyby1cXHUwMDNlb3Bfb2RwX21yLVxcdTAwM2VyX2tyZWYsIF9fcmRzX3B1dF9tcl9maW5hbCk7XFxubmV0L3Jkcy9yZG1hLmMtNTEwLVxcdH0gZWxzZSBpZiAoaW5fdGFzaygpIHx8IHJvLVxcdTAwM2VvcF93cml0ZSkge1xcbi0tXFxubmV0L3Jkcy9yZG1hLmM9NjM3PWludCByZHNfY21zZ19yZG1hX2FyZ3Moc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcXG4tLVxcbm5ldC9yZHMvcmRtYS5jLTc2OC1cXHRcXHRcXHQgKiByZWZlcmVuY2UgaXMgaGVsZCB1bnRpbCB0aGUgZmluYWwga3JlZiBpc1xcbm5ldC9yZHMvcmRtYS5jOjc2OTpcXHRcXHRcXHQgKiBkcm9wcGVkIGluIF9fcmRzX3B1dF9tcl9maW5hbCgpLlxcbm5ldC9yZHMvcmRtYS5jLTc3MC1cXHRcXHRcXHQgKi9cXG4tLVxcbm5ldC9yZHMvcmRtYS5jLTc4Mi1cXHRcXHRcXHRcXHRrcmVmX3B1dChcXHUwMDI2bG9jYWxfb2RwX21yLVxcdTAwM2VyX2tyZWYsXFxubmV0L3Jkcy9yZG1hLmM6NzgzOlxcdFxcdFxcdFxcdFxcdCBfX3Jkc19wdXRfbXJfZmluYWwpO1xcbm5ldC9yZHMvcmRtYS5jLTc4NC1cXHRcXHRcXHRcXHRyZXQgPSAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9yZHMvcmRzLmg9MzEzPXN0cnVjdCByZHNfbXIge1xcbi0tXFxubmV0L3Jkcy9yZHMuaC0zMjQtXFx0XFx0XFx0XFx0XFx0ICAqIHJlZmVyZW5jZSwgZHJvcHBlZCBieVxcbm5ldC9yZHMvcmRzLmg6MzI1OlxcdFxcdFxcdFxcdFxcdCAgKiBfX3Jkc19wdXRfbXJfZmluYWwoKVxcbm5ldC9yZHMvcmRzLmgtMzI2LVxcdFxcdFxcdFxcdFxcdCAgKi9cXG4tLVxcbm5ldC9yZHMvcmRzLmg9OTkwPWludCByZHNfY21zZ19hdG9taWMoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcXG4tLVxcbm5ldC9yZHMvcmRzLmgtOTkyLVxcbm5ldC9yZHMvcmRzLmg6OTkzOnZvaWQgX19yZHNfcHV0X21yX2ZpbmFsKHN0cnVjdCBrcmVmICprcmVmKTtcXG5uZXQvcmRzL3Jkcy5oLTk5NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTM6MDM6MzUuMDI4MzE3NTQ5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3NjczMDUzNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSRFMgTWVtb3J5IFJlZ2lvbiBMaWZlY3ljbGUqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBuYXN0eSB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5LCBzcGVjaWZpY2FsbHkgd2hlcmUgYSBNZW1vcnkgUmVnaW9uIChNUikgaW4gdGhlIFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgKFJEUykgcHJvdG9jb2wgc3Vydml2ZXMgdGhlIHNvY2tldCBpdCdzIGFzc29jaWF0ZWQgd2l0aC4gVGhlIGZpeCBpdHNlbGYgc2VlbXMgc3RyYWlnaHRmb3J3YXJkOiBgc29ja19wdXRgIGlzIGJlaW5nIGFkZGVkIHRvIGBfX3Jkc19wdXRfbXJfZmluYWxgIGFuZCBgc29ja19ob2xkYCB0byBgX19yZHNfcmRtYV9tYXBgIGFuZCBgcmRzX2Ntc2dfcmRtYV9hcmdzYC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGNyaXRpY2FsLCBpbiBmYWN0LlxuXG5Ob3csIGxldCBtZSBtZW50YWxseSBydW4gdGhyb3VnaCB0aGUgY29yZSBjb21wb25lbnRzIGludm9sdmVkLiBXZSdyZSB0YWxraW5nIGFib3V0IHRoZSBsaWZlY3ljbGUgbWFuYWdlbWVudCBvZiBNUnMsIHNvIEkgbmVlZCB0byBrZWVwIHRoZSBtYWpvciBwbGF5ZXJzIHRvcC1vZi1taW5kOiBgcmRzX3NlbmRtc2dgLCBgcmRzX3JlY3Ztc2dgLCBgcmRzX2dldF9tcmAsIGByZHNfZ2V0X21yX2Zvcl9kZXN0YCwgYHJkc19mcmVlX21yYCwgYW5kIGByZHNfc2VuZF94bWl0YC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjZW50cmFsIHRvIGhvdyBSRFMgaW50ZXJhY3RzIHdpdGggUkRNQSBhbmQgbWFuYWdlcyBpdHMgbWVtb3J5LlxuXG5JJ20gZ2V0dGluZyBhIGxpdHRsZSBjdXJpb3VzIGFzIHRvIHdoZXRoZXIgb3Igbm90IGByZHNfZ2V0X21yYCBhbmQgYHJkc19mcmVlX21yYCBhcmUgc3RhdGljLCBnaXZlbiB0aGVpciBsb3ctbGV2ZWwgbmF0dXJlLiBJ4oCZbGwgbWFrZSBzdXJlIHRvIGRvdWJsZS1jaGVjayB0aGVpciBzY29wZSB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlaXIgaW50ZW5kZWQgdXNhZ2UuIFRoaXMgZGV0YWlsIGNvdWxkIHByb3ZpZGUgaW5zaWdodCBpbnRvIHBvdGVudGlhbCBmdXR1cmUgbWFpbnRlbmFuY2UgY29uc2lkZXJhdGlvbnMsIHNvIEknbGwgcHV0IGEgcGluIGluIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4ODgyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEzOjAzOjQwLjc5NTYyNTg0N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY4NTAxMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmRzX2dldF9tclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcmRzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcmRzL2FmX3Jkcy5jPTQzNj1zdGF0aWMgaW50IHJkc19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvcmRzL2FmX3Jkcy5jLTQ1Mi1cXHRjYXNlIFJEU19HRVRfTVI6XFxubmV0L3Jkcy9hZl9yZHMuYzo0NTM6XFx0XFx0cmV0ID0gcmRzX2dldF9tcihycywgb3B0dmFsLCBvcHRsZW4pO1xcbm5ldC9yZHMvYWZfcmRzLmMtNDU0LVxcdFxcdGJyZWFrO1xcbm5ldC9yZHMvYWZfcmRzLmMtNDU1LVxcdGNhc2UgUkRTX0dFVF9NUl9GT1JfREVTVDpcXG5uZXQvcmRzL2FmX3Jkcy5jOjQ1NjpcXHRcXHRyZXQgPSByZHNfZ2V0X21yX2Zvcl9kZXN0KHJzLCBvcHR2YWwsIG9wdGxlbik7XFxubmV0L3Jkcy9hZl9yZHMuYy00NTctXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvcmRzL3JkbWEuYz0xNTU9c3RhdGljIGludCByZHNfcGluX3BhZ2VzKHVuc2lnbmVkIGxvbmcgdXNlcl9hZGRyLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXFxuLS1cXG5uZXQvcmRzL3JkbWEuYy0xNzItXFxubmV0L3Jkcy9yZG1hLmM6MTczOnN0YXRpYyBpbnQgX19yZHNfcmRtYV9tYXAoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19nZXRfbXJfYXJncyAqYXJncyxcXG5uZXQvcmRzL3JkbWEuYy0xNzQtXFx0XFx0XFx0ICB1NjQgKmNvb2tpZV9yZXQsIHN0cnVjdCByZHNfbXIgKiptcl9yZXQsXFxuLS1cXG5uZXQvcmRzL3JkbWEuYy0zNTktXFxubmV0L3Jkcy9yZG1hLmM6MzYwOmludCByZHNfZ2V0X21yKHN0cnVjdCByZHNfc29jayAqcnMsIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXFxubmV0L3Jkcy9yZG1hLmMtMzYxLXtcXG5uZXQvcmRzL3JkbWEuYzozNjI6XFx0c3RydWN0IHJkc19nZXRfbXJfYXJncyBhcmdzO1xcbm5ldC9yZHMvcmRtYS5jLTM2My1cXG5uZXQvcmRzL3JkbWEuYzozNjQ6XFx0aWYgKG9wdGxlbiAhPSBzaXplb2Yoc3RydWN0IHJkc19nZXRfbXJfYXJncykpXFxubmV0L3Jkcy9yZG1hLmMtMzY1LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbm5ldC9yZHMvcmRtYS5jLTM2Ni1cXG5uZXQvcmRzL3JkbWEuYzozNjc6XFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFxcdTAwMjZhcmdzLCBvcHR2YWwsIHNpemVvZihzdHJ1Y3QgcmRzX2dldF9tcl9hcmdzKSkpXFxubmV0L3Jkcy9yZG1hLmMtMzY4LVxcdFxcdHJldHVybiAtRUZBVUxUO1xcbi0tXFxubmV0L3Jkcy9yZG1hLmMtMzcyLVxcbm5ldC9yZHMvcmRtYS5jOjM3MzppbnQgcmRzX2dldF9tcl9mb3JfZGVzdChzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxcbm5ldC9yZHMvcmRtYS5jLTM3NC17XFxubmV0L3Jkcy9yZG1hLmM6Mzc1OlxcdHN0cnVjdCByZHNfZ2V0X21yX2Zvcl9kZXN0X2FyZ3MgYXJncztcXG5uZXQvcmRzL3JkbWEuYzozNzY6XFx0c3RydWN0IHJkc19nZXRfbXJfYXJncyBuZXdfYXJncztcXG5uZXQvcmRzL3JkbWEuYy0zNzctXFxubmV0L3Jkcy9yZG1hLmM6Mzc4OlxcdGlmIChvcHRsZW4gIT0gc2l6ZW9mKHN0cnVjdCByZHNfZ2V0X21yX2Zvcl9kZXN0X2FyZ3MpKVxcbm5ldC9yZHMvcmRtYS5jLTM3OS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm5ldC9yZHMvcmRtYS5jLTM4MS1cXHRpZiAoY29weV9mcm9tX3NvY2twdHIoXFx1MDAyNmFyZ3MsIG9wdHZhbCxcXG5uZXQvcmRzL3JkbWEuYzozODI6XFx0XFx0XFx0ICAgc2l6ZW9mKHN0cnVjdCByZHNfZ2V0X21yX2Zvcl9kZXN0X2FyZ3MpKSlcXG5uZXQvcmRzL3JkbWEuYy0zODMtXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuLS1cXG5uZXQvcmRzL3JkbWEuYz04ODY9aW50IHJkc19jbXNnX3JkbWFfbWFwKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sXFxuLS1cXG5uZXQvcmRzL3JkbWEuYy04ODgte1xcbm5ldC9yZHMvcmRtYS5jOjg4OTpcXHRpZiAoY21zZy1cXHUwMDNlY21zZ19sZW4gXFx1MDAzYyBDTVNHX0xFTihzaXplb2Yoc3RydWN0IHJkc19nZXRfbXJfYXJncykpIHx8XFxubmV0L3Jkcy9yZG1hLmMtODkwLVxcdCAgICBybS1cXHUwMDNlbV9yZG1hX2Nvb2tpZSAhPSAwKVxcbi0tXFxubmV0L3Jkcy9yZHMuaD05NzA9dm9pZCByZHNfcmRtYV91bnVzZShzdHJ1Y3QgcmRzX3NvY2sgKnJzLCB1MzIgcl9rZXksIGludCBmb3JjZSk7XFxubmV0L3Jkcy9yZHMuaDo5NzE6aW50IHJkc19nZXRfbXIoc3RydWN0IHJkc19zb2NrICpycywgc29ja3B0cl90IG9wdHZhbCwgaW50IG9wdGxlbik7XFxubmV0L3Jkcy9yZHMuaDo5NzI6aW50IHJkc19nZXRfbXJfZm9yX2Rlc3Qoc3RydWN0IHJkc19zb2NrICpycywgc29ja3B0cl90IG9wdHZhbCwgaW50IG9wdGxlbik7XFxubmV0L3Jkcy9yZHMuaC05NzMtaW50IHJkc19mcmVlX21yKHN0cnVjdCByZHNfc29jayAqcnMsIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzowMzo0MC44NzI0ODExOTZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njc5ODE0ODcwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBQb3RlbnRpYWwgRm9jdXMgU3ltYm9scyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhlc2UgUkRTIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IHdpdGggYW4gZXllIHRvd2FyZHMgd2hlcmUgUkRNQSBvcGVyYXRpb25zIGFyZSBoYW5kbGVkIGFuZCBwb3RlbnRpYWxseSBvcHRpbWl6ZWQuIEkndmUgYWxyZWFkeSBjb25maXJtZWQgdGhhdCBgcmRzX2dldF9tcmAsIGByZHNfZ2V0X21yX2Zvcl9kZXN0YCwgYW5kIGByZHNfZnJlZV9tcmAgYXJlIG5vbi1zdGF0aWMg4oCTIHRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgbGV0J3Mgc2VlLi4uIEknbSBhbHNvIHNlZWluZyB0aGF0IGByZHNfbWVzc2FnZV9wdXRgIGlzIGV4cG9ydGVkLiBUaGF0IGdldHMgbXkgYXR0ZW50aW9uIGJlY2F1c2UgaXQncyBzbyBmdW5kYW1lbnRhbCB0byBtZXNzYWdlIGxpZmVjeWNsZSBtYW5hZ2VtZW50LlxuXG5Jbml0aWFsbHksIEkgaGF2ZSBzb21lIGRvdWJ0cywgYHJkc19tZXNzYWdlX3B1dGAgaXMgZXhlY3V0ZWQgZXZlcnkgdGltZSBhIG1lc3NhZ2UgaXMgZnJlZWQsIHNvIGNvdWxkIGJlIHRvbyBob3Qgb2YgYSBzeW1ib2wgdG8gYmUgdGhhdCBpbXBvcnRhbnQuIEhvd2V2ZXIsIHRoZSBwYXRjaCBpbiBxdWVzdGlvbiBpcyBtb2RpZnlpbmcgdGhpcyBmdW5jdGlvbiAqc3BlY2lmaWNhbGx5KiB3aGVuIGBybS1cdTAwM2VyZG1hLm9wX3VucGluX2RlZmVycmVkYCBvciBgcm0tXHUwMDNlYXRvbWljLm9wX3VucGluX2RlZmVycmVkYCBhcmUgc2V0LiBUaGF0IG1ha2VzIGByZHNfbWVzc2FnZV9wdXRgIGEgdmVyeSByZWxldmFudCBjYW5kaWRhdGUuIFRoZSBiZWhhdmlvciBvZiB0aGlzIHN5bWJvbCBzZWVtcyBsaWtlIGl0IHdvdWxkIGJlIG9mIGludGVyZXN0IHRvIG1lLlxuXG5OZXh0LCBJIG5lZWQgdG8gY2hlY2sgc29tZSBvdGhlciBzeW1ib2xzLCBzdWNoIGFzIGByZHNfcmRtYV9mcmVlX29wYCwgYHJkc19hdG9taWNfZnJlZV9vcGAsIGByZHNfcmRtYV9vcF91bnBpbl9wYWdlc2AsIGFuZCBgcmRzX2F0b21pY19vcF91bnBpbl9wYWdlYCwgYXMgdGhleSBhcmUgYWxzbyBub24tc3RhdGljLCBzbyBjb3VsZCBiZSBhIGNhbmRpZGF0ZS5cblxuTm93LCBsZXQncyB6b29tIG91dCBhIGJpdC4gYHJkc19zZW5kbXNnYCBoYXMgdG8gYmUgYSBjcml0aWNhbCBlbnRyeSBwb2ludC4gSXQncyB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGFjdHVhbGx5IHNlbmRpbmcgdGhlIG1lc3NhZ2VzLCB3aGljaCBtZWFucyBpdCdzIHdoZXJlIFJETUEgb3BlcmF0aW9ucyBhcmUgKmNyZWF0ZWQqIGFuZCBhdHRhY2hlZCB0byBtZXNzYWdlcy4gVGhpcyBtYWtlcyBpdCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgaW52ZXN0aWdhdGlvbi5cblxuRmluYWxseSwgSSdsbCBxdWlja2x5IGNoZWNrIGByZHNfY21zZ19yZG1hX2FyZ3NgLiBJdCdzIGNhbGxlZCBmcm9tIGByZHNfc2VuZG1zZ2AgdG8gcGFyc2UgUkRNQSBjb250cm9sIG1lc3NhZ2VzLiBJdCdzIG5vbi1zdGF0aWMsIHNvIHRoYXQgaW5kaWNhdGVzIGl0J3MgYWNjZXNzaWJsZSBhbmQgaW1wb3J0YW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDU1NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzowMzo0Ny42NzA2MzMzNDdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NTY4NjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJkc19jbXNnX3JkbWFfYXJnc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcmRzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcmRzL3JkbWEuYz01ODU9aW50IHJkc19yZG1hX2V4dHJhX3NpemUoc3RydWN0IHJkc19yZG1hX2FyZ3MgKmFyZ3MsXFxuLS1cXG5uZXQvcmRzL3JkbWEuYy02MzYtICovXFxubmV0L3Jkcy9yZG1hLmM6NjM3OmludCByZHNfY21zZ19yZG1hX2FyZ3Moc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcXG5uZXQvcmRzL3JkbWEuYy02MzgtXFx0XFx0ICAgICAgIHN0cnVjdCBjbXNnaGRyICpjbXNnLFxcbi0tXFxubmV0L3Jkcy9yZHMuaD05Nzc9aW50IHJkc19jbXNnX3JkbWFfZGVzdChzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLFxcbm5ldC9yZHMvcmRzLmgtOTc4LVxcdFxcdFxcdCAgc3RydWN0IGNtc2doZHIgKmNtc2cpO1xcbm5ldC9yZHMvcmRzLmg6OTc5OmludCByZHNfY21zZ19yZG1hX2FyZ3Moc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcXG5uZXQvcmRzL3Jkcy5oLTk4MC1cXHRcXHRcXHQgIHN0cnVjdCBjbXNnaGRyICpjbXNnLFxcbi0tXFxubmV0L3Jkcy9zZW5kLmM9MTA1Nz1zdGF0aWMgaW50IHJkc19jbXNnX3NlbmQoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcXG4tLVxcbm5ldC9yZHMvc2VuZC5jLTEwNzctXFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxubmV0L3Jkcy9zZW5kLmM6MTA3ODpcXHRcXHRcXHRyZXQgPSByZHNfY21zZ19yZG1hX2FyZ3MocnMsIHJtLCBjbXNnLCBcXHUwMDI2dmN0LVxcdTAwM2V2ZWNbaW5kXSk7XFxubmV0L3Jkcy9zZW5kLmMtMTA3OS1cXHRcXHRcXHRpbmQrKztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTM6MDM6NDcuNzI1MjExODY2WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0OTE0ODU0OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OlxuXG4qKkFuYWx5emluZyBSRE1BIEFyZ3VtZW50IFNjb3BlKipcblxuQWxyaWdodCwgc28gdGhlIGNvcmUgcXVlc3Rpb24gaGVyZSByZXZvbHZlcyBhcm91bmQgdGhlIHNjb3BlIG9mIGByZHNfY21zZ19yZG1hX2FyZ3NgLiBJIHF1aWNrbHkgdmVyaWZpZWQgdGhhdCwgeWVzLCBpdCdzIGRlZmluaXRpdmVseSAqbm9uLXN0YXRpYyouIFRoaXMgbWVhbnMgaXQncyBhY2Nlc3NpYmxlIG91dHNpZGUgdGhlIGltbWVkaWF0ZSBzY29wZSB3aGVyZSBpdCdzIGRlZmluZWQg4oCTIG5vIHN1cnByaXNlcyB0aGVyZSwgZ2l2ZW4gaXRzIHJvbGUuXG5cbk5vdywgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIGByZHNfY21zZ19hdG9taWNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIFJETUEgYXJndW1lbnRzLCBhbmQgdGhlaXIgYWNjZXNzaWJpbGl0eSwgaW50ZXJwbGF5IHdpdGggdGhlIGF0b21pYyBvcGVyYXRpb25zIGNvbnRleHQuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIG9mIHRoZXNlIGZ1bmN0aW9ucywgYW5kIGhvdyB0aGUgZGF0YSBmbG93cyBiZXR3ZWVuIHRoZW0uIEknbSB0aGlua2luZyBJJ2xsIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhvc2UgdHdvIGRlZmluaXRpb25zIGRpcmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTcwMywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEzOjAzOjUzLjIxNjY5OTgyOFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTUzNzI4NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmRzX2Ntc2dfYXRvbWljXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yZHMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yZHMvcmRtYS5jPTg4Nj1pbnQgcmRzX2Ntc2dfcmRtYV9tYXAoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSxcXG4tLVxcbm5ldC9yZHMvcmRtYS5jLTg5OS0gKi9cXG5uZXQvcmRzL3JkbWEuYzo5MDA6aW50IHJkc19jbXNnX2F0b21pYyhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLFxcbm5ldC9yZHMvcmRtYS5jLTkwMS1cXHRcXHQgICAgc3RydWN0IGNtc2doZHIgKmNtc2cpXFxuLS1cXG5uZXQvcmRzL3Jkcy5oPTk4OT12b2lkIHJkc19hdG9taWNfc2VuZF9jb21wbGV0ZShzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLCBpbnQgd2Nfc3RhdHVzKTtcXG5uZXQvcmRzL3Jkcy5oOjk5MDppbnQgcmRzX2Ntc2dfYXRvbWljKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sXFxubmV0L3Jkcy9yZHMuaC05OTEtXFx0XFx0ICAgIHN0cnVjdCBjbXNnaGRyICpjbXNnKTtcXG4tLVxcbm5ldC9yZHMvc2VuZC5jPTEwNTc9c3RhdGljIGludCByZHNfY21zZ19zZW5kKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sXFxuLS1cXG5uZXQvcmRzL3NlbmQuYy0xMDk5LVxcdFxcdGNhc2UgUkRTX0NNU0dfTUFTS0VEX0FUT01JQ19GQUREOlxcbm5ldC9yZHMvc2VuZC5jOjExMDA6XFx0XFx0XFx0cmV0ID0gcmRzX2Ntc2dfYXRvbWljKHJzLCBybSwgY21zZyk7XFxubmV0L3Jkcy9zZW5kLmMtMTEwMS1cXHRcXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTM6MDM6NTMuMzEyMDc2NzE2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNzY0OTA1MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSWRlbnRpZnlpbmcgS2V5IFN5bWJvbHMgZm9yIFJldmlldyoqXG5cbk9rYXksIHNvIEknbSBnb2luZyB0aHJvdWdoIHRoaXMgY29kZSwgZm9jdXNpbmcgb24gc3ltYm9sIHZpc2liaWxpdHkuIFJpZ2h0LCBgcmRzX2Ntc2dfYXRvbWljYCBpcyBkZWZpbml0aXZlbHkgbm90IHN0YXRpYywgZ29vZC4gTGV0J3MgbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyBvYnZpb3VzIGluIHRoZSByZWxhdGVkIGNvZGUuIFJpZ2h0LCBjaGVja2luZyBgcmRzX3JkbWFfZnJlZV9vcGAgYW5kIGByZHNfYXRvbWljX2ZyZWVfb3BgLi4uIHRob3NlIGFyZW4ndCBzdGF0aWMgZWl0aGVyLiBNb3Zpbmcgb24sIHdoYXQgYWJvdXQgYHJkc19yZG1hX29wX3VucGluX3BhZ2VzYCBhbmQgYHJkc19hdG9taWNfb3BfdW5waW5fcGFnZWA/IE5vcGUsIG5vbi1zdGF0aWMgYXMgd2VsbC4gQW5kLCBkaWdnaW5nIGZ1cnRoZXIsIGBfX3Jkc19wdXRfbXJfZmluYWxgIGlzIGFsc28gbm9uLXN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuXG5cbk5vdywgbGV0IG1lIG1ha2Ugc3VyZSBJJ20gZ2V0dGluZyBldmVyeXRoaW5nLiBPa2F5LCBmaW5hbGx5LCBgcmRzX21lc3NhZ2VfdW5waW5fd29ya2VyYCBpcyBzdGF0aWMuIEFscmlnaHQsIHRoYXQncyB3aGF0IEkgbmVlZGVkIHRvIGNvbmZpcm0uXG5cblNvLCBiYXNlZCBvbiB0aGlzIHF1aWNrIHNjYW4sIHRoZSBjb3JlIHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZTpcblxuKiAgIGByZHNfc2VuZG1zZ2BcbiogICBgcmRzX21lc3NhZ2VfcHV0YFxuKiAgIGByZHNfY21zZ19yZG1hX2FyZ3NgXG4qICAgYHJkc19jbXNnX2F0b21pY2BcbiogICBgcmRzX3JkbWFfZnJlZV9vcGBcbiogICBgcmRzX2F0b21pY19mcmVlX29wYFxuKiAgIGByZHNfcmRtYV9vcF91bnBpbl9wYWdlc2BcbiogICBgcmRzX2F0b21pY19vcF91bnBpbl9wYWdlYFxuKiAgIGBfX3Jkc19wdXRfbXJfZmluYWxgXG4qICAgYHJkc19nZXRfbXJgXG4qICAgYHJkc19mcmVlX21yYFxuXG5PaCwgd2FpdCBhIG1pbnV0ZSwgSSBmb3Jnb3QgYWJvdXQgYHJkc19zZW5kX3htaXRgIGlzIGFsc28gbW9kaWZpZWQuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCB0b28uIEFscmlnaHQsIGxldCdzIGdvIGNoZWNrIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMjk0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEzOjAzOjU5LjY4ODU2OTk3NFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU5OTE2ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmRzX3NlbmRfeG1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcmRzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcmRzL2NvbmcuYz0yMTc9dm9pZCByZHNfY29uZ19xdWV1ZV91cGRhdGVzKHN0cnVjdCByZHNfY29uZ19tYXAgKm1hcClcXG4tLVxcbm5ldC9yZHMvY29uZy5jLTIzMC1cXHRcXHRcXHRyZHNfc3RhdHNfaW5jKHNfY29uZ191cGRhdGVfcXVldWVkKTtcXG5uZXQvcmRzL2NvbmcuYzoyMzE6XFx0XFx0XFx0LyogV2UgY2Fubm90IGlubGluZSB0aGUgY2FsbCB0byByZHNfc2VuZF94bWl0KCkgaGVyZVxcbm5ldC9yZHMvY29uZy5jLTIzMi1cXHRcXHRcXHQgKiBmb3IgdHdvIHJlYXNvbnMgKGJvdGggcGVydGFpbmluZyB0byBhIFRDUCB0cmFuc3BvcnQpOlxcbi0tXFxubmV0L3Jkcy9pYl9jbS5jPTI4Mj1zdGF0aWMgdm9pZCByZHNfaWJfdGFza2xldF9mbl9zZW5kKHVuc2lnbmVkIGxvbmcgZGF0YSlcXG4tLVxcbm5ldC9yZHMvaWJfY20uYy0yOTktXFx0ICAgIHRlc3RfYml0KDAsIFxcdTAwMjZjb25uLVxcdTAwM2VjX21hcF9xdWV1ZWQpKSlcXG5uZXQvcmRzL2liX2NtLmM6MzAwOlxcdFxcdHJkc19zZW5kX3htaXQoXFx1MDAyNmljLVxcdTAwM2Vjb25uLVxcdTAwM2VjX3BhdGhbMF0pO1xcbm5ldC9yZHMvaWJfY20uYy0zMDEtfVxcbi0tXFxubmV0L3Jkcy9pYl9zZW5kLmM9MjQ1PXZvaWQgcmRzX2liX3NlbmRfY3FlX2hhbmRsZXIoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywgc3RydWN0IGliX3djICp3YylcXG4tLVxcbm5ldC9yZHMvaWJfc2VuZC5jLTMzNS0gKlxcbm5ldC9yZHMvaWJfc2VuZC5jOjMzNjogKiBUaGUgUkRTIHNlbmQgY29kZSBpcyBlc3NlbnRpYWxseSBzaW5nbGUtdGhyZWFkZWQ7IHJkc19zZW5kX3htaXRcXG5uZXQvcmRzL2liX3NlbmQuYy0zMzctICogc2V0cyBSRFNfSU5fWE1JVCB0byBlbnN1cmUgZXhjbHVzaXZlIGFjY2VzcyB0byB0aGUgc2VuZCByaW5nLlxcbi0tXFxubmV0L3Jkcy9sb29wLmM9MjMxPXZvaWQgcmRzX2xvb3BfbmV0X2V4aXQodm9pZClcXG4tLVxcbm5ldC9yZHMvbG9vcC5jLTIzNy0gKiBUaGlzIGlzIG1pc3NpbmcgLnhtaXRfKiBiZWNhdXNlIGxvb3AgZG9lc24ndCBnbyB0aHJvdWdoIGdlbmVyaWNcXG5uZXQvcmRzL2xvb3AuYzoyMzg6ICogcmRzX3NlbmRfeG1pdCgpIGFuZCBkb2Vzbid0IGNhbGwgcmRzX3JlY3ZfaW5jb21pbmcoKS4gIC5saXN0ZW5fc3RvcCBhbmRcXG5uZXQvcmRzL2xvb3AuYy0yMzktICogLmxhZGRyX2NoZWNrIGFyZSBtaXNzaW5nIGJlY2F1c2UgdHJhbnNwb3J0LmMgZG9lc24ndCBpdGVyYXRlIG92ZXJcXG4tLVxcbm5ldC9yZHMvcmRzLmg9NTQwPXN0cnVjdCByZHNfdHJhbnNwb3J0IHtcXG4tLVxcbm5ldC9yZHMvcmRzLmgtNTgwLVxcdC8qXFxubmV0L3Jkcy9yZHMuaDo1ODE6XFx0ICogLnhtaXQgaXMgY2FsbGVkIGJ5IHJkc19zZW5kX3htaXQoKSB0byB0ZWxsIHRoZSB0cmFuc3BvcnQgdG8gc2VuZFxcbm5ldC9yZHMvcmRzLmgtNTgyLVxcdCAqIHBhcnQgb2YgYSBtZXNzYWdlLiAgVGhlIGNhbGxlciBzZXJpYWxpemVzIG9uIHRoZSBzZW5kX3NlbSBzbyB0aGlzXFxuLS1cXG5uZXQvcmRzL3Jkcy5oPTk1Nz12b2lkIHJkc19zZW5kX3BhdGhfcmVzZXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNvbm4pO1xcbm5ldC9yZHMvcmRzLmg6OTU4OmludCByZHNfc2VuZF94bWl0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCk7XFxubmV0L3Jkcy9yZHMuaC05NTktc3RydWN0IHNvY2thZGRyX2luO1xcbi0tXFxubmV0L3Jkcy9zZW5kLmMtNDQtXFxubmV0L3Jkcy9zZW5kLmM6NDU6LyogV2hlbiB0cmFuc21pdHRpbmcgbWVzc2FnZXMgaW4gcmRzX3NlbmRfeG1pdCwgd2UgbmVlZCB0byBlbWVyZ2UgZnJvbVxcbm5ldC9yZHMvc2VuZC5jLTQ2LSAqIHRpbWUgdG8gdGltZSBhbmQgYnJpZWZseSByZWxlYXNlIHRoZSBDUFUuIE90aGVyd2lzZSB0aGUgc29mdGxvY2sgd2F0Y2hkb2dcXG4tLVxcbm5ldC9yZHMvc2VuZC5jPTU5PXN0YXRpYyB2b2lkIHJkc19zZW5kX3JlbW92ZV9mcm9tX3NvY2soc3RydWN0IGxpc3RfaGVhZCAqbWVzc2FnZXMsIGludCBzdGF0dXMpO1xcbi0tXFxubmV0L3Jkcy9zZW5kLmMtNjItICogUmVzZXQgdGhlIHNlbmQgc3RhdGUuICBDYWxsZXJzIG11c3QgZW5zdXJlIHRoYXQgdGhpcyBkb2Vzbid0IHJhY2Ugd2l0aFxcbm5ldC9yZHMvc2VuZC5jOjYzOiAqIHJkc19zZW5kX3htaXQoKS5cXG5uZXQvcmRzL3NlbmQuYy02NC0gKi9cXG4tLVxcbm5ldC9yZHMvc2VuZC5jPTEyOD1zdGF0aWMgYm9vbCByZHNfbXByZHNfY3AwX2NhdGNodXAoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKVxcbi0tXFxubmV0L3Jkcy9zZW5kLmMtMTg2LSAqL1xcbm5ldC9yZHMvc2VuZC5jOjE4NzppbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXFxubmV0L3Jkcy9zZW5kLmMtMTg4LXtcXG4tLVxcbm5ldC9yZHMvc2VuZC5jLTU0MS19XFxubmV0L3Jkcy9zZW5kLmM6NTQyOkVYUE9SVF9TWU1CT0xfR1BMKHJkc19zZW5kX3htaXQpO1xcbm5ldC9yZHMvc2VuZC5jLTU0My1cXG4tLVxcbm5ldC9yZHMvc2VuZC5jPTY3Nj1zdGF0aWMgdm9pZCByZHNfc2VuZF9yZW1vdmVfZnJvbV9zb2NrKHN0cnVjdCBsaXN0X2hlYWQgKm1lc3NhZ2VzLCBpbnQgc3RhdHVzKVxcbi0tXFxubmV0L3Jkcy9zZW5kLmMtNzUxLSAqIG1lc3NhZ2VzIHVwIHRvLCBhbmQgaW5jbHVkaW5nLCB0aGUgZ2l2ZW4gc2VxdWVuY2UgbnVtYmVyLiAgTWVzc2FnZXMgYXJlXFxubmV0L3Jkcy9zZW5kLmM6NzUyOiAqIG1vdmVkIHRvIHRoZSByZXRyYW5zIHF1ZXVlIHdoZW4gcmRzX3NlbmRfeG1pdCBwaWNrcyB0aGVtIG9mZiB0aGUgc2VuZFxcbm5ldC9yZHMvc2VuZC5jLTc1My0gKiBxdWV1ZS4gVGhpcyBtZWFucyB0aGF0IGluIHRoZSBUQ1AgY2FzZSwgdGhlIG1lc3NhZ2UgbWF5IG5vdCBoYXZlIGJlZW5cXG4tLVxcbm5ldC9yZHMvc2VuZC5jPTExNDE9aW50IHJkc19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHBheWxvYWRfbGVuKVxcbi0tXFxubmV0L3Jkcy9zZW5kLmMtMTQzOC1cXG5uZXQvcmRzL3NlbmQuYzoxNDM5OlxcdHJldCA9IHJkc19zZW5kX3htaXQoY3BhdGgpO1xcbm5ldC9yZHMvc2VuZC5jLTE0NDAtXFx0aWYgKHJldCA9PSAtRU5PTUVNIHx8IHJldCA9PSAtRUFHQUlOKSB7XFxuLS1cXG5uZXQvcmRzL3RjcC5jPTEyNj12b2lkIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuLS1cXG5uZXQvcmRzL3RjcC5jLTE0MC1cXHQgKiBjcF9zdGF0ZSB0byBzb21ldGhpbmcgb3RoZXIgdGhhbiBSRFNfQ09OTl9VUCwgYW5kIHRoZW5cXG5uZXQvcmRzL3RjcC5jOjE0MTpcXHQgKiB3YWl0aW5nIGZvciBhbnkgZXhpc3RpbmcgdGhyZWFkcyBpbiByZHNfc2VuZF94bWl0IHRvXFxubmV0L3Jkcy90Y3AuYy0xNDItXFx0ICogY29tcGxldGUgcmVsZWFzZV9pbl94bWl0KCkuIChTdWJzZXF1ZW50IHRocmVhZHMgZW50ZXJpbmdcXG5uZXQvcmRzL3RjcC5jOjE0MzpcXHQgKiByZHNfc2VuZF94bWl0KCkgd2lsbCBiYWlsIG9uICFyZHNfY29ubl91cCgpLlxcbm5ldC9yZHMvdGNwLmMtMTQ0LVxcdCAqXFxuLS1cXG5uZXQvcmRzL3RocmVhZHMuYz0xOTE9dm9pZCByZHNfc2VuZF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3Jkcy90aHJlYWRzLmMtMTk5LVxcdFxcdGNsZWFyX2JpdChSRFNfTExfU0VORF9GVUxMLCBcXHUwMDI2Y3AtXFx1MDAzZWNwX2ZsYWdzKTtcXG5uZXQvcmRzL3RocmVhZHMuYzoyMDA6XFx0XFx0cmV0ID0gcmRzX3NlbmRfeG1pdChjcCk7XFxubmV0L3Jkcy90aHJlYWRzLmMtMjAxLVxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzowMzo1OS43NTQ1NjkyNTNaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE0NzU3NjYxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgdGhlIE5vbi1TdGF0aWMgTmF0dXJlIG9mIHJkc1xcX3NlbmRcXF94bWl0IGFuZCBSZXZpZXdpbmcgXFxfXFxfcmRzXFxfaWJcXF90ZWFyZG93blxcX21yKipcblxuUmlnaHQsIGByZHNfc2VuZF94bWl0YCBpcyBjb25maXJtZWQgYXMgbm9uLXN0YXRpYywgd2hpY2ggaXMgd2hhdCBJIHN1c3BlY3RlZC4gTWFrZXMgc2Vuc2UgZ2l2ZW4gaXRzIGxpa2VseSB1c2UgYWNyb3NzIGRpZmZlcmVudCBjb21wb25lbnRzIG9yIG1vZHVsZXMgd2l0aGluIHRoZSBSRFMgZnJhbWV3b3JrLiBOb3csIGxldCdzIGp1c3QgcXVpY2tseSBwaXZvdCBhbmQgcmV2aXNpdCB0aGUgbG9naWMgd2l0aGluIGBfX3Jkc19pYl90ZWFyZG93bl9tcmAuIE5lZWQgdG8gYmUgc3VyZSBvZiBob3cgdGhvc2UgbWVtb3J5IHJlZ2lzdHJhdGlvbnMgYXJlIGJlaW5nIGhhbmRsZWQgZHVyaW5nIHRlYXJkb3duLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIHRoZSBub24tc3RhdGljIG5hdHVyZSBvZiBgcmRzX3NlbmRfeG1pdGAuIFRoZXJlIG1pZ2h0IGJlIGEgc3VidGxlIGludGVyYWN0aW9uIHRoZXJlIHRoYXQgd2FycmFudHMgYSBkb3VibGUtY2hlY2sgdG8gbWFrZSBzdXJlIGFsbCBtZW1vcnkgaXMgYmVpbmcgcmVsZWFzZWQgZ3JhY2VmdWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ1NTIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzowNDowMy45MDIxNDgyNTdaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTc3ODc2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3Jkc19pYl90ZWFyZG93bl9tclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcmRzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcmRzL2liX2ZybXIuYz0zNjE9dm9pZCByZHNfaWJfdW5yZWdfZnJtcihzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCB1bnNpZ25lZCBpbnQgKm5mcmVlZCxcXG4tLVxcbm5ldC9yZHMvaWJfZnJtci5jLTM4NC1cXHRcXHRmcm1yID0gXFx1MDAyNmlibXItXFx1MDAzZXUuZnJtcjtcXG5uZXQvcmRzL2liX2ZybXIuYzozODU6XFx0XFx0X19yZHNfaWJfdGVhcmRvd25fbXIoaWJtcik7XFxubmV0L3Jkcy9pYl9mcm1yLmMtMzg2LVxcdFxcdGlmIChmcmVlZCBcXHUwMDNjIGdvYWwgfHwgZnJtci1cXHUwMDNlZnJfc3RhdGUgPT0gRlJNUl9JU19TVEFMRSkge1xcbi0tXFxubmV0L3Jkcy9pYl9tci5oPTEyOD11MzIgcmRzX2liX2dldF9sa2V5KHZvaWQgKnRyYW5zX3ByaXZhdGUpO1xcbm5ldC9yZHMvaWJfbXIuaC0xMjktXFxubmV0L3Jkcy9pYl9tci5oOjEzMDp2b2lkIF9fcmRzX2liX3RlYXJkb3duX21yKHN0cnVjdCByZHNfaWJfbXIgKik7XFxubmV0L3Jkcy9pYl9tci5oLTEzMS12b2lkIHJkc19pYl90ZWFyZG93bl9tcihzdHJ1Y3QgcmRzX2liX21yICopO1xcbi0tXFxubmV0L3Jkcy9pYl9yZG1hLmM9MjE0PXZvaWQgcmRzX2liX3N5bmNfbXIodm9pZCAqdHJhbnNfcHJpdmF0ZSwgaW50IGRpcmVjdGlvbilcXG4tLVxcbm5ldC9yZHMvaWJfcmRtYS5jLTIzMy1cXG5uZXQvcmRzL2liX3JkbWEuYzoyMzQ6dm9pZCBfX3Jkc19pYl90ZWFyZG93bl9tcihzdHJ1Y3QgcmRzX2liX21yICppYm1yKVxcbm5ldC9yZHMvaWJfcmRtYS5jLTIzNS17XFxuLS1cXG5uZXQvcmRzL2liX3JkbWEuYz0yNjM9dm9pZCByZHNfaWJfdGVhcmRvd25fbXIoc3RydWN0IHJkc19pYl9tciAqaWJtcilcXG4tLVxcbm5ldC9yZHMvaWJfcmRtYS5jLTI2Ni1cXG5uZXQvcmRzL2liX3JkbWEuYzoyNjc6XFx0X19yZHNfaWJfdGVhcmRvd25fbXIoaWJtcik7XFxubmV0L3Jkcy9pYl9yZG1hLmMtMjY4LVxcdGlmIChwaW5uZWQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTM6MDQ6MDQuMDExOTMyNzM1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0MTM0OTkxODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmaW5pbmcgdGhlIFJETUEgU3ltYm9sIEFuYWx5c2lzKipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgX19yZHNfaWJfdGVhcmRvd25fbXJgIGlzIGluZGVlZCBhIG5vbi1zdGF0aWMgc3ltYm9sLiBUaGF0J3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24uIE5vdywgYmFzZWQgb24gdGhpcywgSSdtIGdvaW5nIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aGUgZm9sbG93aW5nIHN5bWJvbHMuIEknbSBhaW1pbmcgZm9yIGEgY29uY2lzZSBsaXN0IHRoYXQgY292ZXJzIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgcmVsYXRlZCB0byBSRE1BIGluIHRoZSBSRFMgcHJvdG9jb2wuIEl0IGxvb2tzIGxpa2UgdGhlIHJlbGV2YW50IHN5bWJvbHMgYXJlOlxuXG4qICAgYHJkc19zZW5kbXNnYFxuKiAgIGByZHNfbWVzc2FnZV9wdXRgXG4qICAgYHJkc19jbXNnX3JkbWFfYXJnc2BcbiogICBgcmRzX2Ntc2dfYXRvbWljYFxuKiAgIGByZHNfcmRtYV9mcmVlX29wYFxuKiAgIGByZHNfYXRvbWljX2ZyZWVfb3BgXG4qICAgYHJkc19yZG1hX29wX3VucGluX3BhZ2VzYFxuKiAgIGByZHNfYXRvbWljX29wX3VucGluX3BhZ2VgXG4qICAgYF9fcmRzX3B1dF9tcl9maW5hbGBcbiogICBgcmRzX2dldF9tcmBcbiogICBgcmRzX2ZyZWVfbXJgXG4qICAgYHJkc19zZW5kX3htaXRgXG4qICAgYF9fcmRzX2liX3RlYXJkb3duX21yYFxuXG5UaGF0J3MgYSB0b3RhbCBvZiAxMyBzeW1ib2xzLiBJdCBzZWVtcyB0byBiZSBhIGNvbXByZWhlbnNpdmUsIHlldCBtYW5hZ2VhYmxlLCBzZXQgdG8gYW5hbHl6ZS5cblxuTm93LCBhcyBJIHVuZGVyc3RhbmQgaXQsIHRoZSBjcnVjaWFsIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gdGhpcyBhcmUgbGlrZWx5IHRvIGJlOlxuXG4qICAgYFJEU2BcbiogICBgUkRTX1JETUFgXG4qICAgYElORklOSUJBTkRgXG4qICAgYElORklOSUJBTkRfQUREUl9UUkFOU2BcblxuTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZG91YmxlLWNoZWNrIGlmIGBSRFNfUkRNQWAgaGFzIGFueSBvdGhlciBoaWRkZW4gZGVwZW5kZW5jaWVzLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBhbnl0aGluZyB0aGF0IGNvdWxkIGltcGFjdCB0aGUgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MjkyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEzOjA0OjEwLjQyNTQzNTQ1M1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYwODYwODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFJEU19SRE1BXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yZHMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcmRzL0tjb25maWc9Mz1jb25maWcgUkRTXFxuLS1cXG5uZXQvcmRzL0tjb25maWctOS1cXG5uZXQvcmRzL0tjb25maWc6MTA6Y29uZmlnIFJEU19SRE1BXFxubmV0L3Jkcy9LY29uZmlnLTExLVxcdHRyaXN0YXRlIFxcXCJSRFMgb3ZlciBJbmZpbmliYW5kXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzowNDoxMC41MDE1Mjc5MzJaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTE3Mzg4NTM3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBJbmZpbmliYW5kIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCB3ZSd2ZSB0aWNrZWQgb2ZmIHNvbWUgaW5pdGlhbCBkZXBlbmRlbmN5IGNoZWNrcyDigJMgd2Uga25vdyBgUkRTYCwgYElORklOSUJBTkRgLCBhbmQgYElORklOSUJBTkRfQUREUl9UUkFOU2AgYXJlIGhhbmRsZWQuIEJ1dCwgd2l0aCBzb21ldGhpbmcgbGlrZSBJbmZpbmliYW5kLCBJJ20gYWx3YXlzIGEgbGl0dGxlIHBhcmFub2lkLiBJdCdzIGEgY3JpdGljYWwgY29tcG9uZW50LCBhbmQgc3VidGxlIG1pc2NvbmZpZ3VyYXRpb25zIGNhbiBsZWFkIHRvIHNvbWUgdHJ1bHkgYmFmZmxpbmcgaXNzdWVzIGRvd25zdHJlYW0uXG5cblNvLCBsZXQncyBqdXN0IG1ha2UgKmFic29sdXRlbHkqIHN1cmUgdGhhdCBgSU5GSU5JQkFORF9BRERSX1RSQU5TYCBpcyBiZWhhdmluZyBhcyBleHBlY3RlZCwgYW5kIHRoYXQgaXQncyBjb3JyZWN0bHkgZGVmaW5lZCB3aXRoaW4gdGhlIGRyaXZlcidzIEtjb25maWcgZmlsZS4gSSdsbCBwdWxsIHVwIGBkcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZ2AgYW5kIGdpdmUgaXQgYSBxdWljayBzY2FuLiBUaGlzIGlzIG1vcmUgb2YgYSBzYW5pdHkgY2hlY2sgdGhhbiBhbnl0aGluZywgYnV0IGl0J3MgdGltZSB3ZWxsIHNwZW50IHdoZW4gZGVhbGluZyB3aXRoIHNvbWV0aGluZyBhcyBjcnVjaWFsIGFzIHRoaXMuIEl0J3MgYWJvdXQgYmVpbmcgdGhvcm91Z2ggYW5kIG5vdCB0YWtpbmcgYW55dGhpbmcgZm9yIGdyYW50ZWQsIGVzcGVjaWFsbHkgd2l0aCBsb3ctbGV2ZWwgbmV0d29ya2luZyBjb21wb25lbnRzIGxpa2UgSW5maW5pYmFuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYxNDYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzowNDoxOS42NzU0MTYwNjZaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNzcyNDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJTkZJTklCQU5EX0FERFJfVFJBTlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc9NTE9Y29uZmlnIElORklOSUJBTkRfT05fREVNQU5EX1BBR0lOR1xcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNjMtXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NjQ6Y29uZmlnIElORklOSUJBTkRfQUREUl9UUkFOU1xcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTY1LVxcdGJvb2wgXFxcIlJETUEvQ01cXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy03MS1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo3Mjpjb25maWcgSU5GSU5JQkFORF9BRERSX1RSQU5TX0NPTkZJR0ZTXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNzMtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzowNDoxOS43MjkxOTQ3NDVaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA2NzIzNzg1OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uZmlndXJhdGlvbiBhbmQgU3ltYm9sIFZlcmlmaWNhdGlvbiBmb3IgUkRNQSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBwcmV0dHkgc3VyZSBgSU5GSU5JQkFORF9BRERSX1RSQU5TYCBpcyBhIGNvbmZpZyBvcHRpb24gcmVsZXZhbnQgdG8gdGhpcy4gSnVzdCB0byBiZSB0aG9yb3VnaCwgSSdtIHF1aWNrbHkgdmVyaWZ5aW5nIGBSRFNfVENQYCB0b28sIGV2ZW4gdGhvdWdoIGl0IGlzbid0ICpzdHJpY3RseSogcmVxdWlyZWQgZm9yIHRoaXMgcGFydGljdWxhciBwYXRjaDsgZW5hYmxpbmcgaXQgaXMgZ2VuZXJhbGx5IGEgZ29vZCBwcmFjdGljZS4gU2luY2UgdGhlIHBhdGNoIHRvdWNoZXMgYG5ldC9yZHMvaWJfcmRtYS5jYCwgSSdtIGRvdWJsZS1jaGVja2luZyB0aGF0IGBDT05GSUdfUkRTX1JETUFgIGlzLCBvZiBjb3Vyc2UsIGEgaGFyZCByZXF1aXJlbWVudC5cblxuTm93LCBsZXQncyBjb25maXJtIHRoZSB2aXNpYmlsaXR5IG9mIGEgZmV3IHN5bWJvbHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgYHJkc19yZG1hX29wX3VucGluX3BhZ2VzYCBhbmQgYHJkc19hdG9taWNfb3BfdW5waW5fcGFnZWAgYXJlIGFjY2Vzc2libGUuIEFoLCB0aGV5J3JlIG5vbi1zdGF0aWMsIGRlZmluZWQgaW4gYG5ldC9yZHMvcmRtYS5jYCBhbmQgZGVjbGFyZWQgaW4gYG5ldC9yZHMvcmRzLmhgLCBzbyB3ZSBhcmUgZ29vZCB0aGVyZS4gVGhleSBkb24ndCB1c2UgYEVYUE9SVF9TWU1CT0xgLCBidXQgdGhlaXIgbm9uLXN0YXRpYyBuYXR1cmUgbWVhbnMgdGhleSdyZSBwcm9wZXJseSBzeW1ib2wtZGVmaW5lZC5cblxuTmV4dCwgSSBjaGVja2VkIGByZHNfbWVzc2FnZV91bnBpbl93b3JrZXJgLCBidXQgaXQncyBzdGF0aWMsIHNvIHdlIGRvbid0IG5lZWQgdG8gYmUgY29uY2VybmVkIHdpdGggaXQuIEFuZCBgdW5waW5fdXNlcl9wYWdlc19kaXJ0eV9sb2NrYCBpcyBhIGNvcmUgTU0gZnVuY3Rpb24sIHNvIHdlIGRvbid0IG5lZWQgaXQgZWl0aGVyLlxuXG5MZXQncyBkbyBhIGZpbmFsIHJldmlldyBvZiB0aGUgY29yZSBzeW1ib2xzIEknbSBmb2N1c2luZyBvbjogYHJkc19zZW5kbXNnYCwgYHJkc19tZXNzYWdlX3B1dGAsIGByZHNfY21zZ19yZG1hX2FyZ3NgLCBgcmRzX2Ntc2dfYXRvbWljYCwgYHJkc19yZG1hX2ZyZWVfb3BgLCBgcmRzX2F0b21pY19mcmVlX29wYCwgYHJkc19yZG1hX29wX3VucGluX3BhZ2VzYCwgYHJkc19hdG9taWNfb3BfdW5waW5fcGFnZWAsIGBfX3Jkc19wdXRfbXJfZmluYWxgLCBgcmRzX2dldF9tcmAsIGByZHNfZnJlZV9tcmAsIGByZHNfc2VuZF94bWl0YCwgYW5kIGBfX3Jkc19pYl90ZWFyZG93bl9tcmAuXG5cbkFscmlnaHQsIGV2ZXJ5dGhpbmcgYXBwZWFycyB0byBiZSBpbiBvcmRlci5cblxuSnVzdCBhIGxhc3QgcXVpY2sgY2hlY2sgb24gYF9fcmRzX2liX3RlYXJkb3duX21yYCBhbmQgaXQncyBpbiB0aGUgZXhwZWN0ZWQgbG9jYXRpb24sIGBuZXQvcmRzL2liX3JkbWEuY2AuIEFsbCBnb29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjYwNCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzowNDozMC40MDE1NzUxOTVaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzI0OTExOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3Jkc19pYl90ZWFyZG93bl9tclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcmRzL2liX3JkbWEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcmRzL2liX3JkbWEuYz0yMTQ9dm9pZCByZHNfaWJfc3luY19tcih2b2lkICp0cmFuc19wcml2YXRlLCBpbnQgZGlyZWN0aW9uKVxcbi0tXFxubmV0L3Jkcy9pYl9yZG1hLmMtMjMzLVxcbm5ldC9yZHMvaWJfcmRtYS5jOjIzNDp2b2lkIF9fcmRzX2liX3RlYXJkb3duX21yKHN0cnVjdCByZHNfaWJfbXIgKmlibXIpXFxubmV0L3Jkcy9pYl9yZG1hLmMtMjM1LXtcXG4tLVxcbm5ldC9yZHMvaWJfcmRtYS5jPTI2Mz12b2lkIHJkc19pYl90ZWFyZG93bl9tcihzdHJ1Y3QgcmRzX2liX21yICppYm1yKVxcbi0tXFxubmV0L3Jkcy9pYl9yZG1hLmMtMjY2LVxcbm5ldC9yZHMvaWJfcmRtYS5jOjI2NzpcXHRfX3Jkc19pYl90ZWFyZG93bl9tcihpYm1yKTtcXG5uZXQvcmRzL2liX3JkbWEuYy0yNjgtXFx0aWYgKHBpbm5lZCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzowNDozMC41MDg4MzMyNDNaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTIzOTAxNzE1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyBGdW5jdGlvbiBWaXNpYmlsaXR5KipcblxuUmlnaHQsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBmdW5jdGlvbiBzY29wZSBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgY29uZmlybWVkOiB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gaXMgZGVmaW5pdGVseSBub24tc3RhdGljLiBUaGUga2V5IHF1ZXN0aW9uIG5vdyBiZWNvbWVzLCBhcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9ucyBpbiB0aGlzIGFyZWEgdGhhdCBtaWdodCBoYXZlIHVuZGVyZ29uZSBjaGFuZ2VzPyBBIHF1aWNrIHNjYW4gb2YgcmVsYXRlZCBmdW5jdGlvbnMgaXMgaW4gb3JkZXIgdG8gYmUgY2VydGFpbiBvZiB0aGUgc2NvcGUgb2YgdGhlc2UgY2hhbmdlcy5cblxuQWxyaWdodCwgY2hlY2tpbmcgdGhlc2Ugc3BlY2lmaWMgZnVuY3Rpb25zOiBgcmRzX21lc3NhZ2VfcHVyZ2VgLCB0aGF0J3Mgc3RhdGljLiBgcmRzX21lc3NhZ2VfdW5waW5fd29ya2VyYCBhbHNvIHN0YXRpYy4gQW5kIGBfX3Jkc19yZG1hX21hcGAsIHRoYXQgb25lIGlzIGFsc28gc3RhdGljLiBIb3dldmVyLCBgcmRzX3JkbWFfdW51c2VgIGlzIHRoZSBvbmUgdGhhdCdzICpub3QqIHN0YXRpYy4gR29vZC4gVGhpcyBpcyB0aGUgZGlmZmVyZW5jZSBJIHdhcyBsb29raW5nIGZvci4gTm93IEkgY2FuIHBpbnBvaW50IGV4YWN0bHkgd2hhdCdzIGJlZW4gY2hhbmdlZCBhbmQgd2h5LCBhbmQgd2hhdCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBjaGFuZ2UgbWlnaHQgYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3ODIzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTM6MDQ6MzUuNzQ3ODUzMVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI4ODc5MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmRzX3JkbWFfdW51c2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Jkcy9yZG1hLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Jkcy9yZG1hLmM9NDAwPWludCByZHNfZnJlZV9tcihzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L3Jkcy9yZG1hLmMtNDIxLVxcdCAqIHNvIG5vYm9keSBlbHNlIGZpbmRzIGl0Llxcbm5ldC9yZHMvcmRtYS5jOjQyMjpcXHQgKiBUaGlzIHNob3VsZCBhbHNvIHByZXZlbnQgcmFjZXMgd2l0aCByZHNfcmRtYV91bnVzZS5cXG5uZXQvcmRzL3JkbWEuYy00MjMtXFx0ICovXFxuLS1cXG5uZXQvcmRzL3JkbWEuYy00NDUtICovXFxubmV0L3Jkcy9yZG1hLmM6NDQ2OnZvaWQgcmRzX3JkbWFfdW51c2Uoc3RydWN0IHJkc19zb2NrICpycywgdTMyIHJfa2V5LCBpbnQgZm9yY2UpXFxubmV0L3Jkcy9yZG1hLmMtNDQ3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTM6MDQ6MzUuODEwNzQ1MjQ5WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg4Njc4OTAxMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBUaGlua2luZzogUkRTIFJETUEgT3B0aW1pemF0aW9uKipcblxuT2theSwgbGV0J3MgaW5jb3Jwb3JhdGUgYHJkc19yZG1hX3VudXNlYCBpbnRvIHRoZSBsaXN0IG9mIGNyaXRpY2FsIHN5bWJvbHMgd2UncmUgdHJhY2tpbmcuIEkgd2FudCB0byBoYXZlIGEgY29tcHJlaGVuc2l2ZSBvdmVydmlldyBvZiB0aGUga2V5IGNvbXBvbmVudHMgaW52b2x2ZWQgaW4gdGhpcyBSRFMgUkRNQSBtb2RpZmljYXRpb24uXG5cblNvLCB0aGUgZGVmaW5pdGl2ZSBsaXN0IG9mIHN5bWJvbHMgSSdtIGZvY3VzaW5nIG9uIGluY2x1ZGVzOlxuKiAgIGByZHNfc2VuZG1zZ2BcbiogICBgcmRzX21lc3NhZ2VfcHV0YFxuKiAgIGByZHNfY21zZ19yZG1hX2FyZ3NgXG4qICAgYHJkc19jbXNnX2F0b21pY2BcbiogICBgcmRzX3JkbWFfZnJlZV9vcGBcbiogICBgcmRzX2F0b21pY19mcmVlX29wYFxuKiAgIGByZHNfcmRtYV9vcF91bnBpbl9wYWdlc2BcbiogICBgcmRzX2F0b21pY19vcF91bnBpbl9wYWdlYFxuKiAgIGBfX3Jkc19wdXRfbXJfZmluYWxgXG4qICAgYHJkc19nZXRfbXJgXG4qICAgYHJkc19mcmVlX21yYFxuKiAgIGByZHNfc2VuZF94bWl0YFxuKiAgIGBfX3Jkc19pYl90ZWFyZG93bl9tcmBcbiogICBgcmRzX3JkbWFfdW51c2VgXG5cbkFuZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgZXNzZW50aWFsIGZvciBjb250ZXh0IGFyZTpcbiogICBgUkRTYFxuKiAgIGBSRFNfUkRNQWBcbiogICBgSU5GSU5JQkFORGBcbiogICBgSU5GSU5JQkFORF9BRERSX1RSQU5TYFxuXG5Gcm9tIHdoYXQgSSBnYXRoZXIsIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIHRoZSB3YXkgdGhlIFJEUyBzdWJzeXN0ZW0gZGVhbHMgd2l0aCBNZW1vcnkgUmVnaW9ucyAoTVJzKSBhbmQgUkRNQSBvcGVyYXRpb25zLiBDcnVjaWFsbHksIGl0J3MgZGVmZXJyaW5nIHRoZSB1bnBpbm5pbmcgb2YgdXNlciBwYWdlcyB0byBhIHdvcmtxdWV1ZSB3aGVuIHRoZSBmaW5hbCBcInB1dFwiIGhhcHBlbnMgaW4gYW4gYXRvbWljIGNvbnRleHQuIFRoaXMgaXMgYSB2ZXJ5IHRhcmdldGVkIGZpeCwgYWRkcmVzc2luZyBwb3RlbnRpYWwgc2xlZXAtaW4tYXRvbWljIGlzc3VlcywgYSB3ZWxsLWtub3duIHZ1bG5lcmFiaWxpdHkuIFRoZSBpbXBsZW1lbnRhdGlvbiBhbHNvIGVuc3VyZXMgc29ja2V0IHJlZmVyZW5jZXMgYXJlIGhlbGQgd2hlbiBNUnMgYXJlIGNyZWF0ZWQsIHByZXZlbnRpbmcgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcy5cblxuVGhpcyBpcyBhIGZ1bmRhbWVudGFsIHNoaWZ0IGluIHRoZSBjb3JlIFJEUyBsb2dpYywgd2hpY2ggSSBrbm93IGlzIGFjY2Vzc2libGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJdCBpcyBhIGZ1bmN0aW9uYWwgcGF0Y2ggdGhhdCBjb3VsZCBoYXZlIGZhci1yZWFjaGluZyBpbXBhY3RzLlxuXG5JIGFtIHJlYWR5IHRvIG1vdmUgZm9yd2FyZCwgYW5kIEkgd2lsbCBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MzEzLCJPdXRwdXRUb2tlbnMiOjMwNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzowNDo0NC42Nzg2Mzc3MDZaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzcxNDEyNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlJEU1wiLFxuICAgIFwiUkRTX1JETUFcIixcbiAgICBcIklORklOSUJBTkRcIixcbiAgICBcIklORklOSUJBTkRfQUREUl9UUkFOU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJkc19zZW5kbXNnXCIsXG4gICAgXCJyZHNfbWVzc2FnZV9wdXRcIixcbiAgICBcInJkc19jbXNnX3JkbWFfYXJnc1wiLFxuICAgIFwicmRzX2Ntc2dfYXRvbWljXCIsXG4gICAgXCJyZHNfcmRtYV9mcmVlX29wXCIsXG4gICAgXCJyZHNfYXRvbWljX2ZyZWVfb3BcIixcbiAgICBcInJkc19yZG1hX29wX3VucGluX3BhZ2VzXCIsXG4gICAgXCJyZHNfYXRvbWljX29wX3VucGluX3BhZ2VcIixcbiAgICBcIl9fcmRzX3B1dF9tcl9maW5hbFwiLFxuICAgIFwicmRzX2dldF9tclwiLFxuICAgIFwicmRzX2ZyZWVfbXJcIixcbiAgICBcInJkc19zZW5kX3htaXRcIixcbiAgICBcIl9fcmRzX2liX3RlYXJkb3duX21yXCIsXG4gICAgXCJyZHNfcmRtYV91bnVzZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSRFMgKFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMpIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGhvdyBtZW1vcnkgcmVnaW9ucyAoTVIpIGFuZCBSRE1BIG9wZXJhdGlvbnMgYXJlIGhhbmRsZWQuIEl0IGRlZmVycyB0aGUgdW5waW5uaW5nIG9mIHVzZXIgcGFnZXMgdG8gYSB3b3JrcXVldWUgaWYgdGhlIGZpbmFsIHB1dCBoYXBwZW5zIGluIGF0b21pYyBjb250ZXh0LCBmaXhpbmcgcG90ZW50aWFsIHNsZWVwLWluLWF0b21pYyBidWdzLiBJdCBhbHNvIGFkZHMgYSBzb2NrZXQgcmVmZXJlbmNlIGhvbGQgd2hlbiBhbiBNUiBpcyBjcmVhdGVkIHRvIGVuc3VyZSB0aGUgc29ja2V0IG91dGxpdmVzIHRoZSBNUiwgZml4aW5nIGEgdXNlLWFmdGVyLWZyZWUuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBSRFMgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUkRTXCIsXG4gICAgXCJSRFNfUkRNQVwiLFxuICAgIFwiSU5GSU5JQkFORFwiLFxuICAgIFwiSU5GSU5JQkFORF9BRERSX1RSQU5TXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmRzX3NlbmRtc2dcIixcbiAgICBcInJkc19tZXNzYWdlX3B1dFwiLFxuICAgIFwicmRzX2Ntc2dfcmRtYV9hcmdzXCIsXG4gICAgXCJyZHNfY21zZ19hdG9taWNcIixcbiAgICBcInJkc19yZG1hX2ZyZWVfb3BcIixcbiAgICBcInJkc19hdG9taWNfZnJlZV9vcFwiLFxuICAgIFwicmRzX3JkbWFfb3BfdW5waW5fcGFnZXNcIixcbiAgICBcInJkc19hdG9taWNfb3BfdW5waW5fcGFnZVwiLFxuICAgIFwiX19yZHNfcHV0X21yX2ZpbmFsXCIsXG4gICAgXCJyZHNfZ2V0X21yXCIsXG4gICAgXCJyZHNfZnJlZV9tclwiLFxuICAgIFwicmRzX3NlbmRfeG1pdFwiLFxuICAgIFwiX19yZHNfaWJfdGVhcmRvd25fbXJcIixcbiAgICBcInJkc19yZG1hX3VudXNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJEUyAoUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cykgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgaG93IG1lbW9yeSByZWdpb25zIChNUikgYW5kIFJETUEgb3BlcmF0aW9ucyBhcmUgaGFuZGxlZC4gSXQgZGVmZXJzIHRoZSB1bnBpbm5pbmcgb2YgdXNlciBwYWdlcyB0byBhIHdvcmtxdWV1ZSBpZiB0aGUgZmluYWwgcHV0IGhhcHBlbnMgaW4gYXRvbWljIGNvbnRleHQsIGZpeGluZyBwb3RlbnRpYWwgc2xlZXAtaW4tYXRvbWljIGJ1Z3MuIEl0IGFsc28gYWRkcyBhIHNvY2tldCByZWZlcmVuY2UgaG9sZCB3aGVuIGFuIE1SIGlzIGNyZWF0ZWQgdG8gZW5zdXJlIHRoZSBzb2NrZXQgb3V0bGl2ZXMgdGhlIE1SLCBmaXhpbmcgYSB1c2UtYWZ0ZXItZnJlZS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIFJEUyBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowv79sr[1] Phase: Succeeded StartedAt: 2026-07-31 13:05:10 +0000 UTC FinishedAt: 2026-07-31 13:05:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv79sr[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-31 13:05:10 +0000 UTC FinishedAt: 2026-07-31 13:05:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv79sr[2] Phase: Succeeded StartedAt: 2026-07-31 13:05:10 +0000 UTC FinishedAt: 2026-07-31 16:52:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv79sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_sendmsg","rds_message_put","rds_cmsg_rdma_args","rds_cmsg_atomic","rds_rdma_free_op","rds_atomic_free_op","rds_rdma_op_unpin_pages","rds_atomic_op_unpin_page","__rds_put_mr_final","rds_get_mr","rds_free_mr","rds_send_xmit","__rds_ib_teardown_mr","rds_rdma_unuse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"72bebfc3-471b-4386-871c-5d7a54c5e2ec","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-31 13:05:10 +0000 UTC FinishedAt: 2026-07-31 16:52:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_sendmsg","rds_message_put","rds_cmsg_rdma_args","rds_cmsg_atomic","rds_rdma_free_op","rds_atomic_free_op","rds_rdma_op_unpin_pages","rds_atomic_op_unpin_page","__rds_put_mr_final","rds_get_mr","rds_free_mr","rds_send_xmit","__rds_ib_teardown_mr","rds_rdma_unuse"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"72bebfc3-471b-4386-871c-5d7a54c5e2ec","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowv79sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_sendmsg","rds_message_put","rds_cmsg_rdma_args","rds_cmsg_atomic","rds_rdma_free_op","rds_atomic_free_op","rds_rdma_op_unpin_pages","rds_atomic_op_unpin_page","__rds_put_mr_final","rds_get_mr","rds_free_mr","rds_send_xmit","__rds_ib_teardown_mr","rds_rdma_unuse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"72bebfc3-471b-4386-871c-5d7a54c5e2ec","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-31 13:05:10 +0000 UTC FinishedAt: 2026-07-31 13:05:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv79sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_sendmsg","rds_message_put","rds_cmsg_rdma_args","rds_cmsg_atomic","rds_rdma_free_op","rds_atomic_free_op","rds_rdma_op_unpin_pages","rds_atomic_op_unpin_page","__rds_put_mr_final","rds_get_mr","rds_free_mr","rds_send_xmit","__rds_ib_teardown_mr","rds_rdma_unuse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"72bebfc3-471b-4386-871c-5d7a54c5e2ec","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-31 13:05:10 +0000 UTC FinishedAt: 2026-07-31 13:05:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowv79sr/series-workflowv79sr-convert-artifact-2573627661/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv79sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_sendmsg","rds_message_put","rds_cmsg_rdma_args","rds_cmsg_atomic","rds_rdma_free_op","rds_atomic_free_op","rds_rdma_op_unpin_pages","rds_atomic_op_unpin_page","__rds_put_mr_final","rds_get_mr","rds_free_mr","rds_send_xmit","__rds_ib_teardown_mr","rds_rdma_unuse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"72bebfc3-471b-4386-871c-5d7a54c5e2ec","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-31 13:05:51 +0000 UTC FinishedAt: 2026-07-31 13:23:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv79sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_sendmsg","rds_message_put","rds_cmsg_rdma_args","rds_cmsg_atomic","rds_rdma_free_op","rds_atomic_free_op","rds_rdma_op_unpin_pages","rds_atomic_op_unpin_page","__rds_put_mr_final","rds_get_mr","rds_free_mr","rds_send_xmit","__rds_ib_teardown_mr","rds_rdma_unuse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"72bebfc3-471b-4386-871c-5d7a54c5e2ec","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-31 13:05:51 +0000 UTC FinishedAt: 2026-07-31 13:23:13 +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:*df717d0e-6a13-43a4-b8ba-3bc6fd67d23a,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-workflowv79sr/series-workflowv79sr-convert-artifact-2573627661/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": "2ea716e6-909b-4b7d-ac52-5aee3bc5d3b0", "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-workflowv79sr/series-workflowv79sr-build-action-2317208707/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv79sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_sendmsg","rds_message_put","rds_cmsg_rdma_args","rds_cmsg_atomic","rds_rdma_free_op","rds_atomic_free_op","rds_rdma_op_unpin_pages","rds_atomic_op_unpin_page","__rds_put_mr_final","rds_get_mr","rds_free_mr","rds_send_xmit","__rds_ib_teardown_mr","rds_rdma_unuse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"72bebfc3-471b-4386-871c-5d7a54c5e2ec","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-31 13:05:51 +0000 UTC FinishedAt: 2026-07-31 13:23:03 +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:*df717d0e-6a13-43a4-b8ba-3bc6fd67d23a,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-workflowv79sr/series-workflowv79sr-convert-artifact-2573627661/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": "2ea716e6-909b-4b7d-ac52-5aee3bc5d3b0", "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-workflowv79sr/series-workflowv79sr-build-action-2317208707/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv79sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_sendmsg","rds_message_put","rds_cmsg_rdma_args","rds_cmsg_atomic","rds_rdma_free_op","rds_atomic_free_op","rds_rdma_op_unpin_pages","rds_atomic_op_unpin_page","__rds_put_mr_final","rds_get_mr","rds_free_mr","rds_send_xmit","__rds_ib_teardown_mr","rds_rdma_unuse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"72bebfc3-471b-4386-871c-5d7a54c5e2ec","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-31 13:23:13 +0000 UTC FinishedAt: 2026-07-31 13:23:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv79sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_sendmsg","rds_message_put","rds_cmsg_rdma_args","rds_cmsg_atomic","rds_rdma_free_op","rds_atomic_free_op","rds_rdma_op_unpin_pages","rds_atomic_op_unpin_page","__rds_put_mr_final","rds_get_mr","rds_free_mr","rds_send_xmit","__rds_ib_teardown_mr","rds_rdma_unuse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"72bebfc3-471b-4386-871c-5d7a54c5e2ec","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-31 13:23:13 +0000 UTC FinishedAt: 2026-07-31 13:23:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv79sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_sendmsg","rds_message_put","rds_cmsg_rdma_args","rds_cmsg_atomic","rds_rdma_free_op","rds_atomic_free_op","rds_rdma_op_unpin_pages","rds_atomic_op_unpin_page","__rds_put_mr_final","rds_get_mr","rds_free_mr","rds_send_xmit","__rds_ib_teardown_mr","rds_rdma_unuse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"72bebfc3-471b-4386-871c-5d7a54c5e2ec","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-31 13:23:13 +0000 UTC FinishedAt: 2026-07-31 13:23:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv79sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_sendmsg","rds_message_put","rds_cmsg_rdma_args","rds_cmsg_atomic","rds_rdma_free_op","rds_atomic_free_op","rds_rdma_op_unpin_pages","rds_atomic_op_unpin_page","__rds_put_mr_final","rds_get_mr","rds_free_mr","rds_send_xmit","__rds_ib_teardown_mr","rds_rdma_unuse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"72bebfc3-471b-4386-871c-5d7a54c5e2ec","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-31 13:23:13 +0000 UTC FinishedAt: 2026-07-31 13:23:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"72bebfc3-471b-4386-871c-5d7a54c5e2ec","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowv79sr/series-workflowv79sr-convert-artifact-2660734824/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv79sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_sendmsg","rds_message_put","rds_cmsg_rdma_args","rds_cmsg_atomic","rds_rdma_free_op","rds_atomic_free_op","rds_rdma_op_unpin_pages","rds_atomic_op_unpin_page","__rds_put_mr_final","rds_get_mr","rds_free_mr","rds_send_xmit","__rds_ib_teardown_mr","rds_rdma_unuse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"72bebfc3-471b-4386-871c-5d7a54c5e2ec","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-31 13:23:23 +0000 UTC FinishedAt: 2026-07-31 13:25:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv79sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_sendmsg","rds_message_put","rds_cmsg_rdma_args","rds_cmsg_atomic","rds_rdma_free_op","rds_atomic_free_op","rds_rdma_op_unpin_pages","rds_atomic_op_unpin_page","__rds_put_mr_final","rds_get_mr","rds_free_mr","rds_send_xmit","__rds_ib_teardown_mr","rds_rdma_unuse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"72bebfc3-471b-4386-871c-5d7a54c5e2ec","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-31 13:23:23 +0000 UTC FinishedAt: 2026-07-31 13:25:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2ea716e6-909b-4b7d-ac52-5aee3bc5d3b0,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-workflowv79sr/series-workflowv79sr-build-action-2317208707/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-workflowv79sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_sendmsg","rds_message_put","rds_cmsg_rdma_args","rds_cmsg_atomic","rds_rdma_free_op","rds_atomic_free_op","rds_rdma_op_unpin_pages","rds_atomic_op_unpin_page","__rds_put_mr_final","rds_get_mr","rds_free_mr","rds_send_xmit","__rds_ib_teardown_mr","rds_rdma_unuse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"72bebfc3-471b-4386-871c-5d7a54c5e2ec","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-31 13:25:29 +0000 UTC FinishedAt: 2026-07-31 13:25:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv79sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_sendmsg","rds_message_put","rds_cmsg_rdma_args","rds_cmsg_atomic","rds_rdma_free_op","rds_atomic_free_op","rds_rdma_op_unpin_pages","rds_atomic_op_unpin_page","__rds_put_mr_final","rds_get_mr","rds_free_mr","rds_send_xmit","__rds_ib_teardown_mr","rds_rdma_unuse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"72bebfc3-471b-4386-871c-5d7a54c5e2ec","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-31 13:25:29 +0000 UTC FinishedAt: 2026-07-31 13:25:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv79sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_sendmsg","rds_message_put","rds_cmsg_rdma_args","rds_cmsg_atomic","rds_rdma_free_op","rds_atomic_free_op","rds_rdma_op_unpin_pages","rds_atomic_op_unpin_page","__rds_put_mr_final","rds_get_mr","rds_free_mr","rds_send_xmit","__rds_ib_teardown_mr","rds_rdma_unuse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"72bebfc3-471b-4386-871c-5d7a54c5e2ec","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-31 13:25:29 +0000 UTC FinishedAt: 2026-07-31 13:45:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv79sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_sendmsg","rds_message_put","rds_cmsg_rdma_args","rds_cmsg_atomic","rds_rdma_free_op","rds_atomic_free_op","rds_rdma_op_unpin_pages","rds_atomic_op_unpin_page","__rds_put_mr_final","rds_get_mr","rds_free_mr","rds_send_xmit","__rds_ib_teardown_mr","rds_rdma_unuse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"72bebfc3-471b-4386-871c-5d7a54c5e2ec","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-31 13:25:29 +0000 UTC FinishedAt: 2026-07-31 13:45:53 +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:*df717d0e-6a13-43a4-b8ba-3bc6fd67d23a,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-workflowv79sr/series-workflowv79sr-convert-artifact-2660734824/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": "1603586a-dde5-4a11-9e89-e10fac80f703", "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-workflowv79sr/series-workflowv79sr-build-action-3330559764/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv79sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_sendmsg","rds_message_put","rds_cmsg_rdma_args","rds_cmsg_atomic","rds_rdma_free_op","rds_atomic_free_op","rds_rdma_op_unpin_pages","rds_atomic_op_unpin_page","__rds_put_mr_final","rds_get_mr","rds_free_mr","rds_send_xmit","__rds_ib_teardown_mr","rds_rdma_unuse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"72bebfc3-471b-4386-871c-5d7a54c5e2ec","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-31 13:25:29 +0000 UTC FinishedAt: 2026-07-31 13:45:32 +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:*df717d0e-6a13-43a4-b8ba-3bc6fd67d23a,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-workflowv79sr/series-workflowv79sr-convert-artifact-2660734824/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": "1603586a-dde5-4a11-9e89-e10fac80f703", "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-workflowv79sr/series-workflowv79sr-build-action-3330559764/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv79sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_sendmsg","rds_message_put","rds_cmsg_rdma_args","rds_cmsg_atomic","rds_rdma_free_op","rds_atomic_free_op","rds_rdma_op_unpin_pages","rds_atomic_op_unpin_page","__rds_put_mr_final","rds_get_mr","rds_free_mr","rds_send_xmit","__rds_ib_teardown_mr","rds_rdma_unuse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"72bebfc3-471b-4386-871c-5d7a54c5e2ec","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-31 13:45:53 +0000 UTC FinishedAt: 2026-07-31 13:45:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv79sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_sendmsg","rds_message_put","rds_cmsg_rdma_args","rds_cmsg_atomic","rds_rdma_free_op","rds_atomic_free_op","rds_rdma_op_unpin_pages","rds_atomic_op_unpin_page","__rds_put_mr_final","rds_get_mr","rds_free_mr","rds_send_xmit","__rds_ib_teardown_mr","rds_rdma_unuse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"72bebfc3-471b-4386-871c-5d7a54c5e2ec","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-31 13:45:53 +0000 UTC FinishedAt: 2026-07-31 13:45:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv79sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_sendmsg","rds_message_put","rds_cmsg_rdma_args","rds_cmsg_atomic","rds_rdma_free_op","rds_atomic_free_op","rds_rdma_op_unpin_pages","rds_atomic_op_unpin_page","__rds_put_mr_final","rds_get_mr","rds_free_mr","rds_send_xmit","__rds_ib_teardown_mr","rds_rdma_unuse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"72bebfc3-471b-4386-871c-5d7a54c5e2ec","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-31 13:45:53 +0000 UTC FinishedAt: 2026-07-31 13:47:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv79sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_sendmsg","rds_message_put","rds_cmsg_rdma_args","rds_cmsg_atomic","rds_rdma_free_op","rds_atomic_free_op","rds_rdma_op_unpin_pages","rds_atomic_op_unpin_page","__rds_put_mr_final","rds_get_mr","rds_free_mr","rds_send_xmit","__rds_ib_teardown_mr","rds_rdma_unuse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"72bebfc3-471b-4386-871c-5d7a54c5e2ec","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-31 13:45:53 +0000 UTC FinishedAt: 2026-07-31 13:47:43 +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:*1603586a-dde5-4a11-9e89-e10fac80f703,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-workflowv79sr/series-workflowv79sr-build-action-3330559764/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-workflowv79sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_sendmsg","rds_message_put","rds_cmsg_rdma_args","rds_cmsg_atomic","rds_rdma_free_op","rds_atomic_free_op","rds_rdma_op_unpin_pages","rds_atomic_op_unpin_page","__rds_put_mr_final","rds_get_mr","rds_free_mr","rds_send_xmit","__rds_ib_teardown_mr","rds_rdma_unuse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"72bebfc3-471b-4386-871c-5d7a54c5e2ec","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-31 13:47:53 +0000 UTC FinishedAt: 2026-07-31 16:52:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv79sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_sendmsg","rds_message_put","rds_cmsg_rdma_args","rds_cmsg_atomic","rds_rdma_free_op","rds_atomic_free_op","rds_rdma_op_unpin_pages","rds_atomic_op_unpin_page","__rds_put_mr_final","rds_get_mr","rds_free_mr","rds_send_xmit","__rds_ib_teardown_mr","rds_rdma_unuse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"72bebfc3-471b-4386-871c-5d7a54c5e2ec","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-31 13:47:53 +0000 UTC FinishedAt: 2026-07-31 16:52:33 +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":["rds_sendmsg","rds_message_put","rds_cmsg_rdma_args","rds_cmsg_atomic","rds_rdma_free_op","rds_atomic_free_op","rds_rdma_op_unpin_pages","rds_atomic_op_unpin_page","__rds_put_mr_final","rds_get_mr","rds_free_mr","rds_send_xmit","__rds_ib_teardown_mr","rds_rdma_unuse"],"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:*2ea716e6-909b-4b7d-ac52-5aee3bc5d3b0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1603586a-dde5-4a11-9e89-e10fac80f703,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-workflowv79sr/series-workflowv79sr-build-action-2317208707/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-workflowv79sr/series-workflowv79sr-build-action-3330559764/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowv79sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_sendmsg","rds_message_put","rds_cmsg_rdma_args","rds_cmsg_atomic","rds_rdma_free_op","rds_atomic_free_op","rds_rdma_op_unpin_pages","rds_atomic_op_unpin_page","__rds_put_mr_final","rds_get_mr","rds_free_mr","rds_send_xmit","__rds_ib_teardown_mr","rds_rdma_unuse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"72bebfc3-471b-4386-871c-5d7a54c5e2ec","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-31 13:47:53 +0000 UTC FinishedAt: 2026-07-31 13:48:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv79sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_sendmsg","rds_message_put","rds_cmsg_rdma_args","rds_cmsg_atomic","rds_rdma_free_op","rds_atomic_free_op","rds_rdma_op_unpin_pages","rds_atomic_op_unpin_page","__rds_put_mr_final","rds_get_mr","rds_free_mr","rds_send_xmit","__rds_ib_teardown_mr","rds_rdma_unuse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"72bebfc3-471b-4386-871c-5d7a54c5e2ec","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-31 13:47:53 +0000 UTC FinishedAt: 2026-07-31 13:47:57 +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":["rds_sendmsg","rds_message_put","rds_cmsg_rdma_args","rds_cmsg_atomic","rds_rdma_free_op","rds_atomic_free_op","rds_rdma_op_unpin_pages","rds_atomic_op_unpin_page","__rds_put_mr_final","rds_get_mr","rds_free_mr","rds_send_xmit","__rds_ib_teardown_mr","rds_rdma_unuse"],"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-workflowv79sr/series-workflowv79sr-convert-artifact-197550753/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv79sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_sendmsg","rds_message_put","rds_cmsg_rdma_args","rds_cmsg_atomic","rds_rdma_free_op","rds_atomic_free_op","rds_rdma_op_unpin_pages","rds_atomic_op_unpin_page","__rds_put_mr_final","rds_get_mr","rds_free_mr","rds_send_xmit","__rds_ib_teardown_mr","rds_rdma_unuse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"72bebfc3-471b-4386-871c-5d7a54c5e2ec","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-31 13:47:53 +0000 UTC FinishedAt: 2026-07-31 13:47:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv79sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_sendmsg","rds_message_put","rds_cmsg_rdma_args","rds_cmsg_atomic","rds_rdma_free_op","rds_atomic_free_op","rds_rdma_op_unpin_pages","rds_atomic_op_unpin_page","__rds_put_mr_final","rds_get_mr","rds_free_mr","rds_send_xmit","__rds_ib_teardown_mr","rds_rdma_unuse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"72bebfc3-471b-4386-871c-5d7a54c5e2ec","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-31 13:47:53 +0000 UTC FinishedAt: 2026-07-31 13:47:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv79sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_sendmsg","rds_message_put","rds_cmsg_rdma_args","rds_cmsg_atomic","rds_rdma_free_op","rds_atomic_free_op","rds_rdma_op_unpin_pages","rds_atomic_op_unpin_page","__rds_put_mr_final","rds_get_mr","rds_free_mr","rds_send_xmit","__rds_ib_teardown_mr","rds_rdma_unuse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"72bebfc3-471b-4386-871c-5d7a54c5e2ec","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-31 13:47:53 +0000 UTC FinishedAt: 2026-07-31 13:47:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv79sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_sendmsg","rds_message_put","rds_cmsg_rdma_args","rds_cmsg_atomic","rds_rdma_free_op","rds_atomic_free_op","rds_rdma_op_unpin_pages","rds_atomic_op_unpin_page","__rds_put_mr_final","rds_get_mr","rds_free_mr","rds_send_xmit","__rds_ib_teardown_mr","rds_rdma_unuse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"72bebfc3-471b-4386-871c-5d7a54c5e2ec","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-31 13:48:03 +0000 UTC FinishedAt: 2026-07-31 16:52:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv79sr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_sendmsg","rds_message_put","rds_cmsg_rdma_args","rds_cmsg_atomic","rds_rdma_free_op","rds_atomic_free_op","rds_rdma_op_unpin_pages","rds_atomic_op_unpin_page","__rds_put_mr_final","rds_get_mr","rds_free_mr","rds_send_xmit","__rds_ib_teardown_mr","rds_rdma_unuse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"72bebfc3-471b-4386-871c-5d7a54c5e2ec","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-31 13:48:03 +0000 UTC FinishedAt: 2026-07-31 16:52:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2ea716e6-909b-4b7d-ac52-5aee3bc5d3b0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1603586a-dde5-4a11-9e89-e10fac80f703,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-workflowv79sr/series-workflowv79sr-build-action-2317208707/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-workflowv79sr/series-workflowv79sr-build-action-3330559764/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-workflowv79sr/series-workflowv79sr-convert-artifact-197550753/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,}