Name: series-workflow66trk Phase: Succeeded StartedAt: 2026-08-31 10:58:22 +0000 UTC FinishedAt: 2026-08-31 15:13:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow66trk[0] Phase: Succeeded StartedAt: 2026-08-31 10:58:22 +0000 UTC FinishedAt: 2026-08-31 11:33:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow66trk[0].run-triage Phase: Succeeded StartedAt: 2026-08-31 10:58:22 +0000 UTC FinishedAt: 2026-08-31 11:33:06 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "a8455260b2e9c024d1872ac1c094793d55a7e537", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "a8455260b2e9c024d1872ac1c094793d55a7e537", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET" ], "series_id": "c88bf0bb-3f1f-4718-b25b-ff63f757264c" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "pskb_expand_head", "pskb_extract" ], "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+CgkJCTx0ZD4yMDI2LzA4LzMxIDExOjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Bza2JfZXhwYW5kX2hlYWQmIzM0OywKICAgICYjMzQ7cHNrYl9leHRyYWN0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBgc2tiX2RhdGFyZWZfYmlhcygpYCBhbmQgYHNrYl9kYXRhX2lzX3NoYXJlZCgpYCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgZGF0YSBidWZmZXIgLyBzaGFyZWQgaW5mbyBvZiBhbiBza19idWZmIGlzIGFjdGl2ZWx5IHNoYXJlZCBieSBvdGhlciBjbG9uZXMgZHVyaW5nIGhlYWQgcmVhbGxvY2F0aW9uIChgcHNrYl9leHBhbmRfaGVhZGAgYW5kIGBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXJgKS5cblxuS01TQU4gdnMgS0FTQU4gYW5hbHlzaXM6XG4tIEtNU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBrZXJuZWwgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMsIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBkYXRhIGxlbmd0aCAvIGJvdW5kcyBjYWxjdWxhdGlvbnMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBidWZmZXIgbWVtb3J5LiBUaGUgZmllbGRzIGFjY2Vzc2VkIChgc2tiLVx1MDAzZWNsb25lZGAsIGBza2ItXHUwMDNlbm9oZHJgLCBhbmQgYHNoaW5mby1cdTAwM2VkYXRhcmVmYCkgYXJlIHdlbGwtZGVmaW5lZCBhbmQgaW5pdGlhbGl6ZWQgc2tiIG1ldGFkYXRhLlxuLSBLQVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoZXNlIHJlZmNvdW50IGFuZCBzaGFyaW5nIGNoZWNrIG1vZGlmaWNhdGlvbnMgcmVsYXRlIHRvIHNrYiBkYXRhIG93bmVyc2hpcCwgc3VjaCBhcyBwcmVtYXR1cmUgaGVhZCBmcmVlaW5nIG9yIGltcHJvcGVyIGZyYWcgcmVmY291bnRpbmcgbGVhZGluZyB0byBVc2UtQWZ0ZXItRnJlZSAoVUFGKSBvciBEb3VibGUtRnJlZSBlcnJvcnMuIFRoZXNlIG1lbW9yeSBzYWZldHkgaXNzdWVzIGFyZSBkaXJlY3RseSBkZXRlY3RlZCBieSBLQVNBTi5cblxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYHNrYl9kYXRhcmVmX2JpYXMoKWAgYW5kIGBza2JfZGF0YV9pc19zaGFyZWQoKWAgdG8gZml4IGRhdGEgc2hhcmluZyBkZXRlY3Rpb24gZm9yIHNrX2J1ZmZzIHdoZW4gYHNrYi1cdTAwM2Vub2hkcmAgaXMgc2V0LCB1cGRhdGluZyBgcHNrYl9leHBhbmRfaGVhZGAgYW5kIGBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXJgIHRvIHVzZSBgc2tiX2RhdGFfaXNfc2hhcmVkYCByYXRoZXIgdGhhbiBgc2tiX2Nsb25lZGAuIFRoaXMgbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGJ1ZmZlciBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDExOjI2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNjNiMTQ2MGEwNDIwNjcwMjM1MTc3NjUzNzY1YmEzM2EwNDA5ZTkwOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDExOjI2OjMyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2tidWZmLmggYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXG5pbmRleCA0MjFmNmZjNDU0NTExLi5lZmVlZjE0OGUxYmE1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxuQEAgLTEyOTUsNiAmIzQzOzEyOTUsMTEgQEAgc3RhdGljIGlubGluZSBib29sIHNrYl91bnJlZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGludCBza2JfZGF0YXJlZl9iaWFzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gc2tiLVx1MDAzZW5vaGRyID8gKDEgXHUwMDNjXHUwMDNjIFNLQl9EQVRBUkVGX1NISUZUKSAmIzQzOyAxIDogMTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIGJvb2wgc2tiX2RhdGFfdW5yZWYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdCAgc3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqc2hpbmZvKVxuIHtcbkBAIC0xMzAzLDcgJiM0MzsxMzA4LDcgQEAgc3RhdGljIGlubGluZSBib29sIHNrYl9kYXRhX3VucmVmKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoIXNrYi1cdTAwM2VjbG9uZWQpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuLVx0YmlhcyA9IHNrYi1cdTAwM2Vub2hkciA/ICgxIFx1MDAzY1x1MDAzYyBTS0JfREFUQVJFRl9TSElGVCkgJiM0MzsgMSA6IDE7XG4mIzQzO1x0YmlhcyA9IHNrYl9kYXRhcmVmX2JpYXMoc2tiKTtcbiBcbiBcdGlmIChhdG9taWNfcmVhZChcdTAwMjZzaGluZm8tXHUwMDNlZGF0YXJlZikgPT0gYmlhcylcbiBcdFx0c21wX3JtYigpO1xuQEAgLTIwMTksNiAmIzQzOzIwMjQsMTIgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuICAqIElmIHVzZXJzID09IDEsIHdlIGFyZSB0aGUgb25seSBvd25lciBhbmQgY2FuIGF2b2lkIHJlZHVuZGFudCBhdG9taWMgY2hhbmdlcy5cbiAgKi9cbiBcbiYjNDM7c3RhdGljIGlubGluZSBib29sIHNrYl9kYXRhX2lzX3NoYXJlZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHNrYi1cdTAwM2VjbG9uZWQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIGF0b21pY19yZWFkKFx1MDAyNnNrYl9zaGluZm8oc2tiKS1cdTAwM2VkYXRhcmVmKSAhPSBza2JfZGF0YXJlZl9iaWFzKHNrYik7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICpcdHNrYl9jbG9uZWQgLSBpcyB0aGUgYnVmZmVyIGEgY2xvbmVcbiAgKlx0QHNrYjogYnVmZmVyIHRvIGNoZWNrXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuY1xuaW5kZXggOTY2YWYzYmVlZDk0ZC4uZjRjMDY0NWY5OGQzZiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NrYnVmZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9za2J1ZmYuY1xuQEAgLTIzMzEsNyAmIzQzOzIzMzEsNyBAQCBpbnQgcHNrYl9leHBhbmRfaGVhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmhlYWQsIGludCBudGFpbCxcbiBcdCAqIGlzIG5vdCB3ZSBjYW4ganVzdCBkcm9wIHRoZSBvbGQgaGVhZCBhbmQgbGV0IHRoZSBleGlzdGluZyByZWZjb3VudFxuIFx0ICogYmUgc2luY2UgYWxsIHdlIGRpZCBpcyByZWxvY2F0ZSB0aGUgdmFsdWVzXG4gXHQgKi9cbi1cdGlmIChza2JfY2xvbmVkKHNrYikpIHtcbiYjNDM7XHRpZiAoc2tiX2RhdGFfaXNfc2hhcmVkKHNrYikpIHtcbiBcdFx0aWYgKHNrYl9vcnBoYW5fZnJhZ3Moc2tiLCBnZnBfbWFzaykpXG4gXHRcdFx0Z290byBub2ZyYWdzO1xuIFx0XHRpZiAoc2tiX3pjb3B5KHNrYikpXG5AQCAtNjg1NSw3ICYjNDM7Njg1NSw3IEBAIHN0YXRpYyBpbnQgcHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHUzMiBvZmYsXG4gXHQgICAgICAgc2tiX3NoaW5mbyhza2IpLFxuIFx0ICAgICAgIG9mZnNldG9mKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8sXG4gXHRcdFx0ZnJhZ3Nbc2tiX3NoaW5mbyhza2IpLVx1MDAzZW5yX2ZyYWdzXSkpO1xuLVx0aWYgKHNrYl9jbG9uZWQoc2tiKSkge1xuJiM0MztcdGlmIChza2JfZGF0YV9pc19zaGFyZWQoc2tiKSkge1xuIFx0XHQvKiBkcm9wIHRoZSBvbGQgaGVhZCBncmFjZWZ1bGx5ICovXG4gXHRcdGlmIChza2Jfb3JwaGFuX2ZyYWdzKHNrYiwgZ2ZwX21hc2spKSB7XG4gXHRcdFx0c2tiX2tmcmVlX2hlYWQoZGF0YSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTE6MjY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cHNrYl9leHBhbmRfaGVhZCYjMzQ7LAogICAgJiMzNDtwc2tiX2V4dHJhY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBgc2tiX2RhdGFyZWZfYmlhcygpYCBhbmQgYHNrYl9kYXRhX2lzX3NoYXJlZCgpYCB0byBmaXggZGF0YSBzaGFyaW5nIGRldGVjdGlvbiBmb3Igc2tfYnVmZnMgd2hlbiBgc2tiLVx1MDAzZW5vaGRyYCBpcyBzZXQsIHVwZGF0aW5nIGBwc2tiX2V4cGFuZF9oZWFkYCBhbmQgYHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcmAgdG8gdXNlIGBza2JfZGF0YV9pc19zaGFyZWRgIHJhdGhlciB0aGFuIGBza2JfY2xvbmVkYC4gVGhpcyBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgYnVmZmVyIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCByZWZlcmVuY2UgY291bnRpbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2M2IxNDYwYTA0MjA2NzAyMzUxNzc2NTM3NjViYTMzYTA0MDllOTA4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMTE6MjY6MzIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaAppbmRleCA0MjFmNmZjNDU0NTExLi5lZmVlZjE0OGUxYmE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKQEAgLTEyOTUsNiAmIzQzOzEyOTUsMTEgQEAgc3RhdGljIGlubGluZSBib29sIHNrYl91bnJlZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXJldHVybiB0cnVlOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2tiX2RhdGFyZWZfYmlhcyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJcmV0dXJuIHNrYi0mZ3Q7bm9oZHIgPyAoMSAmbHQ7Jmx0OyBTS0JfREFUQVJFRl9TSElGVCkgJiM0MzsgMSA6IDE7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBib29sIHNrYl9kYXRhX3VucmVmKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICBzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaGluZm8pCiB7CkBAIC0xMzAzLDcgJiM0MzsxMzA4LDcgQEAgc3RhdGljIGlubGluZSBib29sIHNrYl9kYXRhX3VucmVmKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJaWYgKCFza2ItJmd0O2Nsb25lZCkKIAkJcmV0dXJuIHRydWU7CiAKLQliaWFzID0gc2tiLSZndDtub2hkciA/ICgxICZsdDsmbHQ7IFNLQl9EQVRBUkVGX1NISUZUKSAmIzQzOyAxIDogMTsKJiM0MzsJYmlhcyA9IHNrYl9kYXRhcmVmX2JpYXMoc2tiKTsKIAogCWlmIChhdG9taWNfcmVhZCgmYW1wO3NoaW5mby0mZ3Q7ZGF0YXJlZikgPT0gYmlhcykKIAkJc21wX3JtYigpOwpAQCAtMjAxOSw2ICYjNDM7MjAyNCwxMiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpza2JfZ2V0KHN0cnVjdCBza19idWZmICpza2IpCiAgKiBJZiB1c2VycyA9PSAxLCB3ZSBhcmUgdGhlIG9ubHkgb3duZXIgYW5kIGNhbiBhdm9pZCByZWR1bmRhbnQgYXRvbWljIGNoYW5nZXMuCiAgKi8KIAomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBza2JfZGF0YV9pc19zaGFyZWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXJldHVybiBza2ItJmd0O2Nsb25lZCAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICBhdG9taWNfcmVhZCgmYW1wO3NrYl9zaGluZm8oc2tiKS0mZ3Q7ZGF0YXJlZikgIT0gc2tiX2RhdGFyZWZfYmlhcyhza2IpOwomIzQzO30KJiM0MzsKIC8qKgogICoJc2tiX2Nsb25lZCAtIGlzIHRoZSBidWZmZXIgYSBjbG9uZQogICoJQHNrYjogYnVmZmVyIHRvIGNoZWNrCmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jCmluZGV4IDk2NmFmM2JlZWQ5NGQuLmY0YzA2NDVmOThkM2YgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NrYnVmZi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NrYnVmZi5jCkBAIC0yMzMxLDcgJiM0MzsyMzMxLDcgQEAgaW50IHBza2JfZXhwYW5kX2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5oZWFkLCBpbnQgbnRhaWwsCiAJICogaXMgbm90IHdlIGNhbiBqdXN0IGRyb3AgdGhlIG9sZCBoZWFkIGFuZCBsZXQgdGhlIGV4aXN0aW5nIHJlZmNvdW50CiAJICogYmUgc2luY2UgYWxsIHdlIGRpZCBpcyByZWxvY2F0ZSB0aGUgdmFsdWVzCiAJICovCi0JaWYgKHNrYl9jbG9uZWQoc2tiKSkgewomIzQzOwlpZiAoc2tiX2RhdGFfaXNfc2hhcmVkKHNrYikpIHsKIAkJaWYgKHNrYl9vcnBoYW5fZnJhZ3Moc2tiLCBnZnBfbWFzaykpCiAJCQlnb3RvIG5vZnJhZ3M7CiAJCWlmIChza2JfemNvcHkoc2tiKSkKQEAgLTY4NTUsNyAmIzQzOzY4NTUsNyBAQCBzdGF0aWMgaW50IHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1MzIgb2ZmLAogCSAgICAgICBza2Jfc2hpbmZvKHNrYiksCiAJICAgICAgIG9mZnNldG9mKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8sCiAJCQlmcmFnc1tza2Jfc2hpbmZvKHNrYiktJmd0O25yX2ZyYWdzXSkpOwotCWlmIChza2JfY2xvbmVkKHNrYikpIHsKJiM0MzsJaWYgKHNrYl9kYXRhX2lzX3NoYXJlZChza2IpKSB7CiAJCS8qIGRyb3AgdGhlIG9sZCBoZWFkIGdyYWNlZnVsbHkgKi8KIAkJaWYgKHNrYl9vcnBoYW5fZnJhZ3Moc2tiLCBnZnBfbWFzaykpIHsKIAkJCXNrYl9rZnJlZV9oZWFkKGRhdGEpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzk1CgkJCQkJCQlvdXRwdXQ6IDc0CgkJCQkJCQl0aG91Z2h0czogOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4KCioqQW5hbHl6aW5nIHRoZSBTS0IgTW9kaWZpY2F0aW9uKioKClJpZ2h0LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGJvdGggYGluY2x1ZGUvbGludXgvc2tidWZmLmhgIGFuZCBgbmV0L2NvcmUvc2tidWZmLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB3ZSYjMzk7cmUgbGlrZWx5IGRlYWxpbmcgd2l0aCBhIGNvcmUgU0tCIHN0cnVjdHVyZSBjaGFuZ2Ugb3IgYW4gdXBkYXRlIHRvIGl0cyBjb3JlIG1hbmFnZW1lbnQuIEdpdmVuIHRoYXQsIGxldCYjMzk7cyBnbyBzdHJhaWdodCB0byB0aGUgcmVsZXZhbnQgZmlsZXMgYW5kIHBpbnBvaW50IHRoZSBhcmVhcyBvZiB0aGUgY2hhbmdlcyB0byBxdWlja2x5IGdldCBhIHNlbnNlIG9mIHdoYXQmIzM5O3MgaGFwcGVuaW5nLgoKSSYjMzk7bGwgdXNlIGByZWFkLWZpbGVgIG5vdy4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbiBgbmV0L2NvcmUvc2tidWZmLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDIzMzEgYW5kIDY4NTUuIFRob3NlIGxpbmUgbnVtYmVycyBnaXZlIGEgZ29vZCByZWZlcmVuY2UgcG9pbnQgZm9yIHRoZSBpbXBvcnRhbnQgcGFydHMgb2YgdGhlIGNvZGUuIFRoZW4gSSYjMzk7bGwgY2hlY2sgYGluY2x1ZGUvbGludXgvc2tidWZmLmhgIHRvIHNlZSBob3cgdGhlIGRhdGEgc3RydWN0dXJlcyBtaWdodCBoYXZlIGNoYW5nZWQuIFdpdGggbXkga25vd2xlZGdlLCBJIGNhbiBxdWlja2x5IG1hcCB0aGUgY2hhbmdlcyBmcm9tIHRoZSBoZWFkZXIgaW50byB0aGUga2VybmVsJiMzOTtzIGZ1bmN0aW9ucyB0aGF0IG9wZXJhdGUgb24gdGhlIFNLQi4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgc28gSSBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTE6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjMyMDpcdFx0LyogQ29weSBvbmx5IHJlYWwgZGF0YS4uLiBhbmQsIGFsYXMsIGhlYWRlci4gVGhpcyBzaG91bGQgYmVcbjIzMjE6XHRcdCAqIG9wdGltaXplZCBmb3IgdGhlIGNhc2VzIHdoZW4gaGVhZGVyIGlzIHZvaWQuXG4yMzIyOlx0XHQgKi9cbjIzMjM6XHRcdG1lbWNweShkYXRhICYjNDM7IG5oZWFkLCBza2ItXHUwMDNlaGVhZCwgc2tiX3RhaWxfcG9pbnRlcihza2IpIC0gc2tiLVx1MDAzZWhlYWQpO1xuMjMyNDpcdFxuMjMyNTpcdFx0bWVtY3B5KChzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICopKGRhdGEgJiM0Mzsgc2l6ZSksXG4yMzI2Olx0XHQgICAgICAgc2tiX3NoaW5mbyhza2IpLFxuMjMyNzpcdFx0ICAgICAgIG9mZnNldG9mKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8sIGZyYWdzW3NrYl9zaGluZm8oc2tiKS1cdTAwM2Vucl9mcmFnc10pKTtcbjIzMjg6XHRcbjIzMjk6XHRcdC8qXG4yMzMwOlx0XHQgKiBpZiBzaGluZm8gaXMgc2hhcmVkIHdlIG11c3QgZHJvcCB0aGUgb2xkIGhlYWQgZ3JhY2VmdWxseSwgYnV0IGlmIGl0XG4yMzMxOlx0XHQgKiBpcyBub3Qgd2UgY2FuIGp1c3QgZHJvcCB0aGUgb2xkIGhlYWQgYW5kIGxldCB0aGUgZXhpc3RpbmcgcmVmY291bnRcbjIzMzI6XHRcdCAqIGJlIHNpbmNlIGFsbCB3ZSBkaWQgaXMgcmVsb2NhdGUgdGhlIHZhbHVlc1xuMjMzMzpcdFx0ICovXG4yMzM0Olx0XHRpZiAoc2tiX2RhdGFfaXNfc2hhcmVkKHNrYikpIHtcbjIzMzU6XHRcdFx0aWYgKHNrYl9vcnBoYW5fZnJhZ3Moc2tiLCBnZnBfbWFzaykpXG4yMzM2Olx0XHRcdFx0Z290byBub2ZyYWdzO1xuMjMzNzpcdFx0XHRpZiAoc2tiX3pjb3B5KHNrYikpXG4yMzM4Olx0XHRcdFx0bmV0X3pjb3B5X2dldChza2JfdWFyZyhza2IpKTtcbjIzMzk6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2tiX3NoaW5mbyhza2IpLVx1MDAzZW5yX2ZyYWdzOyBpJiM0MzsmIzQzOylcbjIzNDA6XHRcdFx0XHRza2JfZnJhZ19yZWYoc2tiLCBpKTtcbjIzNDE6XHRcbjIzNDI6XHRcdFx0aWYgKHNrYl9oYXNfZnJhZ19saXN0KHNrYikpXG4yMzQzOlx0XHRcdFx0c2tiX2Nsb25lX2ZyYWdsaXN0KHNrYik7XG4yMzQ0Olx0XG4yMzQ1Olx0XHRcdHNrYl9yZWxlYXNlX2RhdGEoc2tiLCBTS0JfQ09OU1VNRUQpO1xuMjM0NjpcdFx0fSBlbHNlIHtcbjIzNDc6XHRcdFx0c2tiX2ZyZWVfaGVhZChza2IpO1xuMjM0ODpcdFx0fVxuMjM0OTpcdFx0b2ZmID0gKGRhdGEgJiM0MzsgbmhlYWQpIC0gc2tiLVx1MDAzZWhlYWQ7XG4yMzUwOlx0XG4yMzUxOlx0XHRza2ItXHUwMDNlaGVhZCAgICAgPSBkYXRhO1xuMjM1MjpcdFx0c2tiLVx1MDAzZWhlYWRfZnJhZyA9IDA7XG4yMzUzOlx0XHRza2ItXHUwMDNlZGF0YSAgICAmIzQzOz0gb2ZmO1xuMjM1NDpcdFxuMjM1NTpcdFx0c2tiX3NldF9lbmRfb2Zmc2V0KHNrYiwgc2l6ZSk7XG4yMzU2Olx0I2lmZGVmIE5FVF9TS0JVRkZfREFUQV9VU0VTX09GRlNFVFxuMjM1NzpcdFx0b2ZmICAgICAgICAgICA9IG5oZWFkO1xuMjM1ODpcdCNlbmRpZlxuMjM1OTpcdFx0c2tiLVx1MDAzZXRhaWxcdCAgICAgICYjNDM7PSBvZmY7XG4yMzYwOlx0XHRza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKHNrYiwgbmhlYWQpO1xuMjM2MTpcdFx0c2tiLVx1MDAzZWNsb25lZCAgID0gMDtcbjIzNjI6XHRcdHNrYi1cdTAwM2VoZHJfbGVuICA9IDA7XG4yMzYzOlx0XHRza2ItXHUwMDNlbm9oZHIgICAgPSAwO1xuMjM2NDpcdFx0YXRvbWljX3NldChcdTAwMjZza2Jfc2hpbmZvKHNrYiktXHUwMDNlZGF0YXJlZiwgMSk7XG4yMzY1Olx0XG4yMzY2Olx0XHQvKiBJdCBpcyBub3QgZ2VuZXJhbGx5IHNhZmUgdG8gY2hhbmdlIHNrYi1cdTAwM2V0cnVlc2l6ZS5cbjIzNjc6XHRcdCAqIEZvciB0aGUgbW9tZW50LCB3ZSByZWFsbHkgY2FyZSBvZiByeCBwYXRoLCBvclxuMjM2ODpcdFx0ICogd2hlbiBza2IgaXMgb3JwaGFuZWQgKG5vdCBhdHRhY2hlZCB0byBhIHNvY2tldCkuXG4yMzY5Olx0XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjg0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2ODQwOlx0XHRkYXRhID0ga21hbGxvY19yZXNlcnZlKFx1MDAyNnNpemUsIGdmcF9tYXNrLCBOVU1BX05PX05PREUsIE5VTEwpO1xuNjg0MTpcdFx0aWYgKCFkYXRhKVxuNjg0MjpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjY4NDM6XHRcdHNpemUgPSBTS0JfV0lUSF9PVkVSSEVBRChzaXplKTtcbjY4NDQ6XHRcbjY4NDU6XHRcdC8qIENvcHkgcmVhbCBkYXRhLCBhbmQgYWxsIGZyYWdzICovXG42ODQ2Olx0XHRza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhX29mZnNldChza2IsIG9mZiwgZGF0YSwgbmV3X2hsZW4pO1xuNjg0NzpcdFx0c2tiLVx1MDAzZWxlbiAtPSBvZmY7XG42ODQ4Olx0XG42ODQ5Olx0XHQvKiBSZW1vdmUgU0tCRkxfTUFOQUdFRF9GUkFHX1JFRlMgaW5zdGVhZCBvZiB0cnlpbmcgdG8gaG9ub3VyIGl0XG42ODUwOlx0XHQgKiB3aGlsZSByZWZjb3VudGluZyBmcmFncyBiZWxvdy5cbjY4NTE6XHRcdCAqL1xuNjg1MjpcdFx0c2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYik7XG42ODUzOlx0XG42ODU0Olx0XHRtZW1jcHkoKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKikoZGF0YSAmIzQzOyBzaXplKSxcbjY4NTU6XHRcdCAgICAgICBza2Jfc2hpbmZvKHNrYiksXG42ODU2Olx0XHQgICAgICAgb2Zmc2V0b2Yoc3RydWN0IHNrYl9zaGFyZWRfaW5mbyxcbjY4NTc6XHRcdFx0XHRmcmFnc1tza2Jfc2hpbmZvKHNrYiktXHUwMDNlbnJfZnJhZ3NdKSk7XG42ODU4Olx0XHRpZiAoc2tiX2RhdGFfaXNfc2hhcmVkKHNrYikpIHtcbjY4NTk6XHRcdFx0LyogZHJvcCB0aGUgb2xkIGhlYWQgZ3JhY2VmdWxseSAqL1xuNjg2MDpcdFx0XHRpZiAoc2tiX29ycGhhbl9mcmFncyhza2IsIGdmcF9tYXNrKSkge1xuNjg2MTpcdFx0XHRcdHNrYl9rZnJlZV9oZWFkKGRhdGEpO1xuNjg2MjpcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuNjg2MzpcdFx0XHR9XG42ODY0Olx0XHRcdGlmIChza2JfemNvcHkoc2tiKSlcbjY4NjU6XHRcdFx0XHRuZXRfemNvcHlfZ2V0KHNrYl91YXJnKHNrYikpO1xuNjg2NjpcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBza2Jfc2hpbmZvKHNrYiktXHUwMDNlbnJfZnJhZ3M7IGkmIzQzOyYjNDM7KVxuNjg2NzpcdFx0XHRcdHNrYl9mcmFnX3JlZihza2IsIGkpO1xuNjg2ODpcdFx0XHRpZiAoc2tiX2hhc19mcmFnX2xpc3Qoc2tiKSlcbjY4Njk6XHRcdFx0XHRza2JfY2xvbmVfZnJhZ2xpc3Qoc2tiKTtcbjY4NzA6XHRcdFx0c2tiX3JlbGVhc2VfZGF0YShza2IsIFNLQl9DT05TVU1FRCk7XG42ODcxOlx0XHR9IGVsc2Uge1xuNjg3MjpcdFx0XHQvKiB3ZSBjYW4gcmV1c2UgZXhpc3RpbmcgcmVjb3VudC0gYWxsIHdlIGRpZCB3YXNcbjY4NzM6XHRcdFx0ICogcmVsb2NhdGUgdmFsdWVzXG42ODc0Olx0XHRcdCAqL1xuNjg3NTpcdFx0XHRza2JfZnJlZV9oZWFkKHNrYik7XG42ODc2Olx0XHR9XG42ODc3Olx0XG42ODc4Olx0XHRza2ItXHUwMDNlaGVhZCA9IGRhdGE7XG42ODc5Olx0XHRza2ItXHUwMDNlZGF0YSA9IGRhdGE7XG42ODgwOlx0XHRza2ItXHUwMDNlaGVhZF9mcmFnID0gMDtcbjY4ODE6XHRcdHNrYl9zZXRfZW5kX29mZnNldChza2IsIHNpemUpO1xuNjg4MjpcdFx0c2tiX3NldF90YWlsX3BvaW50ZXIoc2tiLCBza2JfaGVhZGxlbihza2IpKTtcbjY4ODM6XHRcdHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUoc2tiLCAwKTtcbjY4ODQ6XHRcdHNrYi1cdTAwM2VjbG9uZWQgPSAwO1xuNjg4NTpcdFx0c2tiLVx1MDAzZWhkcl9sZW4gPSAwO1xuNjg4NjpcdFx0c2tiLVx1MDAzZW5vaGRyID0gMDtcbjY4ODc6XHRcdGF0b21pY19zZXQoXHUwMDI2c2tiX3NoaW5mbyhza2IpLVx1MDAzZWRhdGFyZWYsIDEpO1xuNjg4ODpcdFxuNjg4OTpcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTE6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDkxMwoJCQkJCQkJb3V0cHV0OiA3NAoJCQkJCQkJdGhvdWdodHM6IDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgcXVlc3Rpb25zOgoKKipBbmFseXppbmcgYHNrYl9kYXRhX2lzX3NoYXJlZGAgYW5kIHRoZSBgc2tiX2Nsb25lZGAgQ2hhbmdlKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvcmUgb2YgdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBgc2tiX2RhdGFfaXNfc2hhcmVkYCBhbmQsIHNwZWNpZmljYWxseSwgd2h5IHRoZSBgc2tiX2Nsb25lZChza2IpYCBjaGVjayB3YXMgbW9kaWZpZWQuIEkga25vdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBkYXRhIHNoYXJpbmcgYW5kIGNsb25pbmcgd2l0aGluIGBza19idWZmYCBzdHJ1Y3R1cmVzLgoKTXkgaW1tZWRpYXRlIHBsYW4gaXMgdG8gZXhhbWluZSB0aGUgcmVsZXZhbnQgZGVmaW5pdGlvbnMgd2l0aGluIGBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oYC4gSSYjMzk7bGwgZm9jdXMgb24gdGhlIHNlY3Rpb25zIGFyb3VuZCBsaW5lcyAxMjkwLTEzMjAgYW5kIDIwMTUtMjA0MC4gTXkgaHlwb3RoZXNpcyBpcyB0aGF0IHRoZSBjaGFuZ2UgbGlrZWx5IHJldm9sdmVzIGFyb3VuZCBvcHRpbWlzaW5nLCBzaW1wbGlmeWluZyBvciBjbGFyaWZ5aW5nIHRoZSBsb2dpYyByZWxhdGVkIHRvIHJlZmVyZW5jZSBjb3VudGluZywgZGF0YSBzaGFyaW5nLCBvciBwZXJoYXBzIGV2ZW4gaW4gdGhlIGhhbmRsaW5nIG9mIGZyYWdtZW50ZWQgc2ticywgcGFydGljdWxhcmx5IGluIHRoZSBjb250ZXh0IG9mIHJlY2VudCBuZXR3b3JrIHN0YWNrIGltcHJvdmVtZW50cyBvciBzZWN1cml0eSBjb25zaWRlcmF0aW9ucy4gSSB3aWxsIGJlIGxvb2tpbmcgZm9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9ucywgaW5saW5lIGZ1bmN0aW9ucywgYW5kIG1hY3JvIGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gZGF0YSBzaGFyaW5nIGFuZCBjbG9uaW5nLiBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSB1c2Ugb2YgYXRvbWljIG9wZXJhdGlvbnMgYW5kIG1lbW9yeSBiYXJyaWVycywgYmVjYXVzZSB0aGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIHN1YnRsZSBidXQgY3JpdGljYWwgcGVyZm9ybWFuY2UgYW5kIGNvbmN1cnJlbmN5IGlzc3VlcyBhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTE6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjkwOlx0XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0RFQlVHX05FVCkgXHUwMDI2XHUwMDI2IGxpa2VseShyZWZjb3VudF9yZWFkKFx1MDAyNnNrYi1cdTAwM2V1c2VycykgPT0gMSkpXG4xMjkxOlx0XHRcdHNtcF9ybWIoKTtcbjEyOTI6XHRcdGVsc2UgaWYgKGxpa2VseSghcmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNnNrYi1cdTAwM2V1c2VycykpKVxuMTI5MzpcdFx0XHRyZXR1cm4gZmFsc2U7XG4xMjk0Olx0XG4xMjk1Olx0XHRyZXR1cm4gdHJ1ZTtcbjEyOTY6XHR9XG4xMjk3Olx0XG4xMjk4Olx0c3RhdGljIGlubGluZSBpbnQgc2tiX2RhdGFyZWZfYmlhcyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuMTI5OTpcdHtcbjEzMDA6XHRcdHJldHVybiBza2ItXHUwMDNlbm9oZHIgPyAoMSBcdTAwM2NcdTAwM2MgU0tCX0RBVEFSRUZfU0hJRlQpICYjNDM7IDEgOiAxO1xuMTMwMTpcdH1cbjEzMDI6XHRcbjEzMDM6XHRzdGF0aWMgaW5saW5lIGJvb2wgc2tiX2RhdGFfdW5yZWYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbjEzMDQ6XHRcdFx0XHRcdCAgc3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqc2hpbmZvKVxuMTMwNTpcdHtcbjEzMDY6XHRcdGludCBiaWFzO1xuMTMwNzpcdFxuMTMwODpcdFx0aWYgKCFza2ItXHUwMDNlY2xvbmVkKVxuMTMwOTpcdFx0XHRyZXR1cm4gdHJ1ZTtcbjEzMTA6XHRcbjEzMTE6XHRcdGJpYXMgPSBza2JfZGF0YXJlZl9iaWFzKHNrYik7XG4xMzEyOlx0XG4xMzEzOlx0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2c2hpbmZvLVx1MDAzZWRhdGFyZWYpID09IGJpYXMpXG4xMzE0Olx0XHRcdHNtcF9ybWIoKTtcbjEzMTU6XHRcdGVsc2UgaWYgKGF0b21pY19zdWJfcmV0dXJuKGJpYXMsIFx1MDAyNnNoaW5mby1cdTAwM2VkYXRhcmVmKSlcbjEzMTY6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMTMxNzpcdFxuMTMxODpcdFx0cmV0dXJuIHRydWU7XG4xMzE5Olx0fVxuMTMyMDpcdFxuMTMyMTpcdHZvaWQgX19maXhfYWRkcmVzcyBza19za2JfcmVhc29uX2Ryb3AoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuMTMyMjpcdFx0XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbjEzMjM6XHRcdFx0XHRcdCAgICAgIGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbik7XG4xMzI0Olx0XG4xMzI1Olx0c3RhdGljIGlubGluZSB2b2lkXG4xMzI2Olx0a2ZyZWVfc2tiX3JlYXNvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pXG4xMzI3Olx0e1xuMTMyODpcdFx0c2tfc2tiX3JlYXNvbl9kcm9wKE5VTEwsIHNrYiwgcmVhc29uKTtcbjEzMjk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTE6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMDE1Olx0ICpcdHRvIHRoZSBidWZmZXIuXG4yMDE2Olx0ICovXG4yMDE3Olx0c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuMjAxODpcdHtcbjIwMTk6XHRcdHJlZmNvdW50X2luYyhcdTAwMjZza2ItXHUwMDNldXNlcnMpO1xuMjAyMDpcdFx0cmV0dXJuIHNrYjtcbjIwMjE6XHR9XG4yMDIyOlx0XG4yMDIzOlx0LypcbjIwMjQ6XHQgKiBJZiB1c2VycyA9PSAxLCB3ZSBhcmUgdGhlIG9ubHkgb3duZXIgYW5kIGNhbiBhdm9pZCByZWR1bmRhbnQgYXRvbWljIGNoYW5nZXMuXG4yMDI1Olx0ICovXG4yMDI2Olx0XG4yMDI3Olx0c3RhdGljIGlubGluZSBib29sIHNrYl9kYXRhX2lzX3NoYXJlZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuMjAyODpcdHtcbjIwMjk6XHRcdHJldHVybiBza2ItXHUwMDNlY2xvbmVkIFx1MDAyNlx1MDAyNlxuMjAzMDpcdFx0ICAgICAgIGF0b21pY19yZWFkKFx1MDAyNnNrYl9zaGluZm8oc2tiKS1cdTAwM2VkYXRhcmVmKSAhPSBza2JfZGF0YXJlZl9iaWFzKHNrYik7XG4yMDMxOlx0fVxuMjAzMjpcdFxuMjAzMzpcdC8qKlxuMjAzNDpcdCAqXHRza2JfY2xvbmVkIC0gaXMgdGhlIGJ1ZmZlciBhIGNsb25lXG4yMDM1Olx0ICpcdEBza2I6IGJ1ZmZlciB0byBjaGVja1xuMjAzNjpcdCAqXG4yMDM3Olx0ICpcdFJldHVybnMgdHJ1ZSBpZiB0aGUgYnVmZmVyIHdhcyBnZW5lcmF0ZWQgd2l0aCBza2JfY2xvbmUoKSBhbmQgaXNcbjIwMzg6XHQgKlx0b25lIG9mIG11bHRpcGxlIHNoYXJlZCBjb3BpZXMgb2YgdGhlIGJ1ZmZlci4gQ2xvbmVkIGJ1ZmZlcnMgYXJlXG4yMDM5Olx0ICpcdHNoYXJlZCBkYXRhIHNvIG11c3Qgbm90IGJlIHdyaXR0ZW4gdG8gdW5kZXIgbm9ybWFsIGNpcmN1bXN0YW5jZXMuXG4yMDQwOlx0ICovXG4yMDQxOlx0c3RhdGljIGlubGluZSBpbnQgc2tiX2Nsb25lZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuMjA0MjpcdHtcbjIwNDM6XHRcdHJldHVybiBza2ItXHUwMDNlY2xvbmVkIFx1MDAyNlx1MDAyNlxuMjA0NDpcdFx0ICAgICAgIChhdG9taWNfcmVhZChcdTAwMjZza2Jfc2hpbmZvKHNrYiktXHUwMDNlZGF0YXJlZikgXHUwMDI2IFNLQl9EQVRBUkVGX01BU0spICE9IDE7XG4yMDQ1Olx0fVxuMjA0NjpcdFxuMjA0NzpcdHN0YXRpYyBpbmxpbmUgaW50IHNrYl91bmNsb25lKHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IHByaSlcbjIwNDg6XHR7XG4yMDQ5Olx0XHRtaWdodF9zbGVlcF9pZihnZnBmbGFnc19hbGxvd19ibG9ja2luZyhwcmkpKTtcbjIwNTA6XHRcbjIwNTE6XHRcdGlmIChza2JfY2xvbmVkKHNrYikpXG4yMDUyOlx0XHRcdHJldHVybiBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgMCwgcHJpKTtcbjIwNTM6XHRcbjIwNTQ6XHRcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDExOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1MzcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDbG9uZWQgU0tCIENvbmRpdGlvbioqCgpPa2F5LCBoZXJlIHdlIGdvLCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29kZSYjMzk7cyB1c2luZyBgc2tiX2Nsb25lZChza2IpYCB0byBkZXRlcm1pbmUgaWYgYSBzb2NrZXQgYnVmZmVyIChza2IpIGlzIGEgY2xvbmUsIHJpZ2h0PyBBbmQgaXQgZG9lcyB0aGF0IGJ5IGNoZWNraW5nIGAoYXRvbWljX3JlYWQoJmFtcDtza2Jfc2hpbmZvKHNrYiktJmd0O2RhdGFyZWYpICZhbXA7IFNLQl9EQVRBUkVGX01BU0spICE9IDFgLiBCdXQsIGhlcmUmIzM5O3MgdGhlIGtpY2tlcjogd2hlbiBgc2tiLSZndDtub2hkcmAgaXMgc2V0IOKAkyB3aGljaCBoYXBwZW5zIGluIHBsYWNlcyBsaWtlIGBza2JfaGVhZGVyX3JlbGVhc2VgIHdoZXJlIHdlICphZGQqIGAoMSAmbHQ7Jmx0OyBTS0JfREFUQVJFRl9TSElGVClgIHRvIHRoZSBkYXRhcmVmIC0gdGhpcyBjaGVjayAqb25seSogbG9va3MgYXQgYCZhbXA7IFNLQl9EQVRBUkVGX01BU0sgIT0gMWAuIFRoYXQgZmVlbHMuLi4gaW5jb21wbGV0ZS4KCk15IGNvbmNlcm4gaXMgd2hhdCBoYXBwZW5zIGlmIGRhdGFyZWYgaXMgYCgxICZsdDsmbHQ7IFNLQl9EQVRBUkVGX1NISUZUKSAmIzQzOyAxYD8gIEJlY2F1c2UgdGhlbiB0aGUgQU5EIG9wZXJhdGlvbiB3aXRoIGBTS0JfREFUQVJFRl9NQVNLYCByZXN1bHRzIGluIGAxYC4gV2hpY2ggbWVhbnMgYHNrYl9jbG9uZWQoc2tiKWAgd291bGQgcmV0dXJuIGAwYCAoZmFsc2UpIGV2ZW4gdGhvdWdoIHdlIGhhdmUgYSBjbG9uZSAob3IgaGVhZGVyIGNsb25lKSBhbmQgYHNrYi0mZ3Q7bm9oZHJgIGlzIHRydWUuIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBlZGdlIGNhc2UuIFRoaXMgY2FuJiMzOTt0IGJlIHJpZ2h0ISBXaGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhlIGRhdGFyZWYgaW4gdGhhdCBzaXR1YXRpb24/CgpTbywgaWYgYHNrYi0mZ3Q7bm9oZHJgIGlzIHRydWUsIGFuZCB3ZSAqZG8qIGhhdmUgYSBjbG9uZSBvciBhIGhlYWRlciBjbG9uZSwgd2hhdCBleGFjdGx5IGlzIGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZD8gSXQgc2VlbXMgbGlrZSB0aGlzIHNpdHVhdGlvbiBpcyBpbmNvcnJlY3RseSBldmFsdWF0ZWQgYnkgdGhpcyBjaGVjay4gTGV0JiMzOTtzIGRpZyBkZWVwZXIuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZXhhbWluaW5nIGBza2JfaGVhZGVyX3JlbGVhc2VgIGFuZCB0aGUgYG5vaGRyYCBmbGFnJiMzOTtzIHVzYWdlIGluIGBza2J1ZmYuY2AgYW5kIGVsc2V3aGVyZS4gIEEgcXVpY2sgc2VhcmNoIGZvciBgbm9oZHJgIGFuZCBgU0tCX0RBVEFSRUZfU0hJRlRgIHdpbGwgaG9wZWZ1bGx5IGlsbHVtaW5hdGUgdGhlIGNvbnRyb2wgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTE6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U0tCX0RBVEFSRUZfU0hJRlR8bm9oZHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfbWRiLmM9NzA9aW50IGJyX3Jwb3J0c19maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvYnJpZGdlL2JyX21kYi5jLTEwOS1cbm5ldC9icmlkZ2UvYnJfbWRiLmM6MTEwOlx0XHRpZiAobmxhX3B1dF9ub2hkcihza2IsIHNpemVvZih1MzIpLCBcdTAwMjZwLVx1MDAzZWRldi1cdTAwM2VpZmluZGV4KSB8fFxubmV0L2JyaWRnZS9icl9tZGIuYy0xMTEtXHRcdCAgICBubGFfcHV0X3UzMihza2IsIE1EQkFfUk9VVEVSX1BBVFRSX1RJTUVSLFxuLS1cbm5ldC9icmlkZ2UvYnJfbWRiLmM9MjMyPXN0YXRpYyBpbnQgX19tZGJfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYy0yNzEtXG5uZXQvYnJpZGdlL2JyX21kYi5jOjI3MjpcdGlmIChubGFfcHV0X25vaGRyKHNrYiwgc2l6ZW9mKGUpLCBcdTAwMjZlKSB8fFxubmV0L2JyaWRnZS9icl9tZGIuYy0yNzMtXHQgICAgbmxhX3B1dF91MzIoc2tiLFxuLS1cbm5ldC9icmlkZ2UvYnJfbWRiLmM9NTY1PXN0YXRpYyBpbnQgbmxtc2dfcG9wdWxhdGVfcnRyX2ZpbGwoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvYnJpZGdlL2JyX21kYi5jLTU4OC1cdFx0Z290byBlbmQ7XG5uZXQvYnJpZGdlL2JyX21kYi5jOjU4OTpcdGlmIChubGFfcHV0X25vaGRyKHNrYiwgc2l6ZW9mKHUzMiksIFx1MDAyNmlmaW5kZXgpKSB7XG5uZXQvYnJpZGdlL2JyX21kYi5jLTU5MC1cdFx0bmxhX25lc3RfY2FuY2VsKHNrYiwgcG9ydF9uZXN0KTtcbi0tXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYz0yMTY9c3RhdGljIHZvaWQgdHJhY2VfZHJvcF9jb21tb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqbG9jYXRpb24pXG4tLVxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtMjUwLVx0ICovXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYzoyNTE6XHRfX25sYV9yZXNlcnZlX25vaGRyKGRza2IsIHNpemVvZihzdHJ1Y3QgbmV0X2RtX2Ryb3BfcG9pbnQpKTtcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTI1Mi1cdG5sYS1cdTAwM2VubGFfbGVuICYjNDM7PSBOTEFfQUxJR04oc2l6ZW9mKHN0cnVjdCBuZXRfZG1fZHJvcF9wb2ludCkpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTE2MTA9c3RhdGljIHN0cnVjdCBza19idWZmICpfX3NrYl9jbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xNjIwLVx0QyhtYWNfbGVuKTtcbm5ldC9jb3JlL3NrYnVmZi5jOjE2MjE6XHRuLVx1MDAzZWhkcl9sZW4gPSBza2ItXHUwMDNlbm9oZHIgPyBza2JfaGVhZHJvb20oc2tiKSA6IHNrYi1cdTAwM2VoZHJfbGVuO1xubmV0L2NvcmUvc2tidWZmLmMtMTYyMi1cdG4tXHUwMDNlY2xvbmVkID0gMTtcbm5ldC9jb3JlL3NrYnVmZi5jOjE2MjM6XHRuLVx1MDAzZW5vaGRyID0gMDtcbm5ldC9jb3JlL3NrYnVmZi5jLTE2MjQtXHRuLVx1MDAzZXBlZWtlZCA9IDA7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MjI5Nz1pbnQgcHNrYl9leHBhbmRfaGVhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmhlYWQsIGludCBudGFpbCxcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0yMzYyLVx0c2tiLVx1MDAzZWhkcl9sZW4gID0gMDtcbm5ldC9jb3JlL3NrYnVmZi5jOjIzNjM6XHRza2ItXHUwMDNlbm9oZHIgICAgPSAwO1xubmV0L2NvcmUvc2tidWZmLmMtMjM2NC1cdGF0b21pY19zZXQoXHUwMDI2c2tiX3NoaW5mbyhza2IpLVx1MDAzZWRhdGFyZWYsIDEpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTY4Mjk9c3RhdGljIGludCBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTMyIG9mZixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy02ODg1LVx0c2tiLVx1MDAzZWhkcl9sZW4gPSAwO1xubmV0L2NvcmUvc2tidWZmLmM6Njg4NjpcdHNrYi1cdTAwM2Vub2hkciA9IDA7XG5uZXQvY29yZS9za2J1ZmYuYy02ODg3LVx0YXRvbWljX3NldChcdTAwMjZza2Jfc2hpbmZvKHNrYiktXHUwMDNlZGF0YXJlZiwgMSk7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9Njk1MD1zdGF0aWMgaW50IHBza2JfY2FydmVfaW5zaWRlX25vbmxpbmVhcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1MzIgb2ZmLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTcwMjUtXHRza2ItXHUwMDNlaGRyX2xlbiAgPSAwO1xubmV0L2NvcmUvc2tidWZmLmM6NzAyNjpcdHNrYi1cdTAwM2Vub2hkciAgICA9IDA7XG5uZXQvY29yZS9za2J1ZmYuYy03MDI3LVx0c2tiLVx1MDAzZWxlbiAtPSBvZmY7XG4tLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jPTE2NzY9aW50IGZpYl9hZGRfbmV4dGhvcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgZmliX25oX2NvbW1vbiAqbmhjLFxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xNjgyLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jOjE2ODM6XHRydG5oID0gbmxhX3Jlc2VydmVfbm9oZHIoc2tiLCBzaXplb2YoKnJ0bmgpKTtcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xNjg0LVx0aWYgKCFydG5oKVxuLS1cbm5ldC9pcHY0L2lwbXJfYmFzZS5jPTIxNj1pbnQgbXJfZmlsbF9tcm91dGUoc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvaXBtcl9iYXNlLmMtMjUzLVxubmV0L2lwdjQvaXBtcl9iYXNlLmM6MjU0Olx0XHRcdG5ocCA9IG5sYV9yZXNlcnZlX25vaGRyKHNrYiwgc2l6ZW9mKCpuaHApKTtcbm5ldC9pcHY0L2lwbXJfYmFzZS5jLTI1NS1cdFx0XHRpZiAoIW5ocCkge1xuLS1cbm5ldC9tcGxzL2FmX21wbHMuYz0yMDM4PXN0YXRpYyBpbnQgbXBsc19kdW1wX3JvdXRlKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwb3J0aWQsIHUzMiBzZXEsIGludCBldmVudCxcbi0tXG5uZXQvbXBscy9hZl9tcGxzLmMtMjEwMy1cbm5ldC9tcGxzL2FmX21wbHMuYzoyMTA0Olx0XHRcdHJ0bmggPSBubGFfcmVzZXJ2ZV9ub2hkcihza2IsIHNpemVvZigqcnRuaCkpO1xubmV0L21wbHMvYWZfbXBscy5jLTIxMDUtXHRcdFx0aWYgKCFydG5oKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz0xNzY2PXN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF9kZWZhdWx0X2xpbWl0KHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbyxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTc3My1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxNzc0Olx0cmV0dXJuIG5sYV9wdXRfbm9oZHIocmVwbHksIHNpemVvZih6b25lX2xpbWl0KSwgXHUwMDI2em9uZV9saW1pdCk7XG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTc3NS19XG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTE3Nzc9c3RhdGljIGludCBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE3OTEtXHRcdFx0XHRcdFx0ICBcdTAwMjZjb25uY291bnRfa2V5KTtcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxNzkyOlx0cmV0dXJuIG5sYV9wdXRfbm9oZHIocmVwbHksIHNpemVvZih6b25lX2xpbWl0KSwgXHUwMDI2em9uZV9saW1pdCk7XG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTc5My19XG4tLVxubmV0L3BhY2tldC9kaWFnLmM9Mzg9c3RhdGljIGludCBwZGlhZ19wdXRfbWNsaXN0KGNvbnN0IHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBza19idWZmICpubHNrYilcbi0tXG5uZXQvcGFja2V0L2RpYWcuYy01MC1cbm5ldC9wYWNrZXQvZGlhZy5jOjUxOlx0XHRkbWwgPSBubGFfcmVzZXJ2ZV9ub2hkcihubHNrYiwgc2l6ZW9mKCpkbWwpKTtcbm5ldC9wYWNrZXQvZGlhZy5jLTUyLVx0XHRpZiAoIWRtbCkge1xuLS1cbm5ldC9zY2hlZC9lbV9jYW5pZC5jPTE5Mz1zdGF0aWMgaW50IGVtX2NhbmlkX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjZl9lbWF0Y2ggKm0pXG4tLVxubmV0L3NjaGVkL2VtX2NhbmlkLmMtMjAwLVx0ICovXG5uZXQvc2NoZWQvZW1fY2FuaWQuYzoyMDE6XHRpZiAobmxhX3B1dF9ub2hkcihza2IsIHNpemVvZihzdHJ1Y3QgY2FuX2ZpbHRlcikgKiBjbS1cdTAwM2VydWxlc19jb3VudCxcbm5ldC9zY2hlZC9lbV9jYW5pZC5jLTIwMi1cdCAgICBcdTAwMjZjbS1cdTAwM2VydWxlc19yYXcpIFx1MDAzYyAwKVxuLS1cbm5ldC9zY2hlZC9lbV90ZXh0LmM9MTEzPXN0YXRpYyBpbnQgZW1fdGV4dF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y2ZfZW1hdGNoICptKVxuLS1cbm5ldC9zY2hlZC9lbV90ZXh0LmMtMTI1LVxubmV0L3NjaGVkL2VtX3RleHQuYzoxMjY6XHRpZiAobmxhX3B1dF9ub2hkcihza2IsIHNpemVvZihjb25mKSwgXHUwMDI2Y29uZikgXHUwMDNjIDApXG5uZXQvc2NoZWQvZW1fdGV4dC5jLTEyNy1cdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4tLVxubmV0L3NjaGVkL2VtYXRjaC5jPTQzNz1pbnQgdGNmX2VtX3RyZWVfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNmX2VtYXRjaF90cmVlICp0cmVlLCBpbnQgdGx2KVxuLS1cbm5ldC9zY2hlZC9lbWF0Y2guYy00NzItXHRcdFx0dTMyIHUgPSBlbS1cdTAwM2VkYXRhO1xubmV0L3NjaGVkL2VtYXRjaC5jOjQ3MzpcdFx0XHRubGFfcHV0X25vaGRyKHNrYiwgc2l6ZW9mKHUpLCBcdTAwMjZ1KTtcbm5ldC9zY2hlZC9lbWF0Y2guYy00NzQtXHRcdH0gZWxzZSBpZiAoZW0tXHUwMDNlZGF0YWxlbiBcdTAwM2UgMClcbm5ldC9zY2hlZC9lbWF0Y2guYzo0NzU6XHRcdFx0bmxhX3B1dF9ub2hkcihza2IsIGVtLVx1MDAzZWRhdGFsZW4sICh2b2lkICopIGVtLVx1MDAzZWRhdGEpO1xubmV0L3NjaGVkL2VtYXRjaC5jLTQ3Ni1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTE6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTUyNQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gYHNrYl9oZWFkZXJfcmVsZWFzZWAqKgoKT2theSwgbGV0JiMzOTtzIHB1bGwgdXAgdGhlIGRlZmluaXRpb24gb2YgYHNrYl9oZWFkZXJfcmVsZWFzZWAuIEkga25vdyBpdCYjMzk7cyBpbiBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAsIHNvIGxldCYjMzk7cyBnZXQgdGhhdCBmaWxlIG9wZW4uIEkmIzM5O20gcHJpbWFyaWx5IGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgYHNrYmAgKHNvY2tldCBidWZmZXIpIHN0cnVjdHVyZSBhbmQgaXRzIGhlYWRlci4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRyaWNhY2llcyBvZiBoZWFkZXIgbWFuYWdlbWVudCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBuZXR3b3JrIHN0YWNrLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBzZWUgaG93IG1lbW9yeSBpcyBkZWFsbG9jYXRlZCBhbmQsIGFuZCB1bmRlciB3aGF0IGNpcmN1bXN0YW5jZXMgdGhlIGRhdGEgYnVmZmVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgc29ja2V0IGJ1ZmZlciBpcyB1cGRhdGVkIHRvIHBvaW50IHRvIHRoZSBuZXcgZGF0YS4gSSBhbHNvIHdhbnQgdG8gbWFrZSBzdXJlIEkgYW0gZnVsbHkgdXAgdG8gc3BlZWQgb24gd2hlbiB0aGlzIGlzIGNhbGxlZCwgYW5kIHdoYXQgdGhlIGVmZmVjdCBpcyBvbiByZWZlcmVuY2VzIHRvIHRoZSBidWZmZXIsIHRvIGF2b2lkIGRvdWJsZSBmcmVlaW5nLiBUaGUgaW50ZW50aW9uIGlzIHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCBtZW1vcnkgbGVha3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDExOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrYl9oZWFkZXJfcmVsZWFzZXxTS0JfREFUQVJFRiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2tidWZmLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaD01OTM9c3RydWN0IHNrYl9zaGFyZWRfaW5mbyB7XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC02NDEtICogVGhlIGNyZWF0b3Igb2YgdGhlIHNrYiAoZS5nLiBUQ1ApIG1hcmtzIGl0cyBza2IgYXMgXHUwMDI2c2tfYnVmZi5ub2hkclxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo2NDI6ICogKHZpYSBfX3NrYl9oZWFkZXJfcmVsZWFzZSgpKS4gQW55IGNsb25lIGNyZWF0ZWQgZnJvbSBtYXJrZWQgc2tiIHdpbGwgZ2V0XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTY0My0gKiBcdTAwMjZza19idWZmLmhkcl9sZW4gcG9wdWxhdGVkIHdpdGggdGhlIGF2YWlsYWJsZSBoZWFkcm9vbS5cbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTY0OC0gKiAgc2tiX3Jlc2VydmUoKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo2NDk6ICogIF9fc2tiX2hlYWRlcl9yZWxlYXNlKClcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNjUwLSAqICBza2JfY2xvbmUoKVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNjU3LSAqL1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo2NTg6I2RlZmluZSBTS0JfREFUQVJFRl9TSElGVCAxNlxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo2NTk6I2RlZmluZSBTS0JfREFUQVJFRl9NQVNLICgoMSBcdTAwM2NcdTAwM2MgU0tCX0RBVEFSRUZfU0hJRlQpIC0gMSlcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNjYwLVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MTI5OD1zdGF0aWMgaW5saW5lIGludCBza2JfZGF0YXJlZl9iaWFzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTEyOTkte1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxMzAwOlx0cmV0dXJuIHNrYi1cdTAwM2Vub2hkciA/ICgxIFx1MDAzY1x1MDAzYyBTS0JfREFUQVJFRl9TSElGVCkgJiM0MzsgMSA6IDE7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTEzMDEtfVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MjA0MT1zdGF0aWMgaW5saW5lIGludCBza2JfY2xvbmVkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0yMDQzLVx0cmV0dXJuIHNrYi1cdTAwM2VjbG9uZWQgXHUwMDI2XHUwMDI2XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjIwNDQ6XHQgICAgICAgKGF0b21pY19yZWFkKFx1MDAyNnNrYl9zaGluZm8oc2tiKS1cdTAwM2VkYXRhcmVmKSBcdTAwMjYgU0tCX0RBVEFSRUZfTUFTSykgIT0gMTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMjA0NS19XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0yMDgwPXN0YXRpYyBpbmxpbmUgaW50IHNrYl9oZWFkZXJfY2xvbmVkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0yMDg3LVx0ZGF0YXJlZiA9IGF0b21pY19yZWFkKFx1MDAyNnNrYl9zaGluZm8oc2tiKS1cdTAwM2VkYXRhcmVmKTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MjA4ODpcdGRhdGFyZWYgPSAoZGF0YXJlZiBcdTAwMjYgU0tCX0RBVEFSRUZfTUFTSykgLSAoZGF0YXJlZiBcdTAwM2VcdTAwM2UgU0tCX0RBVEFSRUZfU0hJRlQpO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0yMDg5LVx0cmV0dXJuIGRhdGFyZWYgIT0gMTtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTIwOTI9c3RhdGljIGlubGluZSBpbnQgc2tiX2hlYWRlcl91bmNsb25lKHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IHByaSlcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTIxMDItLyoqXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjIxMDM6ICogX19za2JfaGVhZGVyX3JlbGVhc2UoKSAtIGFsbG93IGNsb25lcyB0byB1c2UgdGhlIGhlYWRyb29tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTIxMDQtICogQHNrYjogYnVmZmVyIHRvIG9wZXJhdGUgb25cbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTIxMDctICovXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjIxMDg6c3RhdGljIGlubGluZSB2b2lkIF9fc2tiX2hlYWRlcl9yZWxlYXNlKHN0cnVjdCBza19idWZmICpza2IpXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTIxMDkte1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0yMTEwLVx0c2tiLVx1MDAzZW5vaGRyID0gMTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MjExMTpcdGF0b21pY19zZXQoXHUwMDI2c2tiX3NoaW5mbyhza2IpLVx1MDAzZWRhdGFyZWYsIDEgJiM0MzsgKDEgXHUwMDNjXHUwMDNjIFNLQl9EQVRBUkVGX1NISUZUKSk7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTIxMTItfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDczNQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU0tCIENsb25pbmcgYW5kIERhdGEgUmVmZXJlbmNlcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBjb2RlJiMzOTtzIGNoZWNraW5nIGlmIGEgU29ja2V0IEJ1ZmZlciAoU0tCKSBpcyBjbG9uZWQgdXNpbmcgYHNrYl9jbG9uZWQoc2tiKWAuIE5vdywgSSB3YW50IHRvIHNlZSBob3cgdGhlIGRhdGEgcmVmZXJlbmNlIGNvdW50IHBsYXlzIGludG8gdGhlIHdob2xlIGNsb25pbmcgcHJvY2Vzcy4gTXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgd2hlbiBgX19za2JfaGVhZGVyX3JlbGVhc2VgIGlzIGNhbGxlZCwgYHNrYi0mZ3Q7bm9oZHJgIGlzIHNldCwgYW5kIGBkYXRhcmVmYCBnZXRzIGluaXRpYWxpemVkIHRvIGAxICYjNDM7ICgxICZsdDsmbHQ7IFNLQl9EQVRBUkVGX1NISUZUKWAuIFRoYXQgbWFrZXMgc2Vuc2UsIGVzdGFibGlzaGVzIHRoZSBpbml0aWFsIHJlZmVyZW5jZS4gVGhlIGNyaXRpY2FsIHBvaW50IGlzLCBob3cgZG9lcyB0aGlzIGNvdW50IGNoYW5nZSB1cG9uIGNsb25pbmc/IEl0IHNlZW1zIHRoZSBjb2RlIGluY3JlbWVudHMgYGRhdGFyZWZgIGJ5IDEsIHdpdGggdGhlIGFjdHVhbCBtZWNoYW5pc20gYmVpbmcgYGF0b21pY19pbmMoJmFtcDtza2Jfc2hpbmZvKHNrYiktJmd0O2RhdGFyZWYpYC4KCkkgd2FudCB0byBjb25maXJtIHRoaXMgYnkgZ29pbmcgdGhyb3VnaCBgX19za2JfY2xvbmVgIGluIGBuZXQvY29yZS9za2J1ZmYuY2AuIExldCBtZSByZXZpZXcgdGhhdCBjb2RlIGFuZCB0aGUgZXhhY3QgbWVjaGFuaWNzIHRoYXQgYGF0b21pY19pbmNgIGFuZCB0aGUgU0tCIHN0cnVjdCB1c2Ugd2hlbiB0aGUgU0tCIGlzIGNsb25lZC4gVGhpcyYjMzk7bGwgaGVscCBjZW1lbnQgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGF0YSByZWZlcmVuY2UgY291bnQgYW5kIGl0cyBpbXBhY3Qgb24gYnVmZmVyIHNoYXJpbmcgaW4gdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTE6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19za2JfY2xvbmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYz0xNTU5PXN0YXRpYyB2b2lkIF9fY29weV9za2JfaGVhZGVyKHN0cnVjdCBza19idWZmICpuZXcsIGNvbnN0IHN0cnVjdCBza19idWZmICpvbGQpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMTYwOS0gKi9cbm5ldC9jb3JlL3NrYnVmZi5jOjE2MTA6c3RhdGljIHN0cnVjdCBza19idWZmICpfX3NrYl9jbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9jb3JlL3NrYnVmZi5jLTE2MTEte1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTE2Nzg9c3RydWN0IHNrX2J1ZmYgKnNrYl9tb3JwaChzdHJ1Y3Qgc2tfYnVmZiAqZHN0LCBzdHJ1Y3Qgc2tfYnVmZiAqc3JjKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTE2ODAtXHRza2JfcmVsZWFzZV9hbGwoZHN0LCBTS0JfQ09OU1VNRUQpO1xubmV0L2NvcmUvc2tidWZmLmM6MTY4MTpcdHJldHVybiBfX3NrYl9jbG9uZShkc3QsIHNyYyk7XG5uZXQvY29yZS9za2J1ZmYuYy0xNjgyLX1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0yMTAwPXN0cnVjdCBza19idWZmICpza2JfY2xvbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZ2ZwX21hc2spXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMjEyNS1cbm5ldC9jb3JlL3NrYnVmZi5jOjIxMjY6XHRyZXR1cm4gX19za2JfY2xvbmUobiwgc2tiKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTIxMjctfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTUxMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgYW5kIHRoaW5raW5nIGFib3V0IHRoZSBjb2RlOgoKKipEaXZpbmcgaW50byBgX19za2JfY2xvbmVgIGluIGBuZXQvY29yZS9za2J1ZmYuY2AqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBgX19za2JfY2xvbmVgLiAgSSBrbm93IGl0JiMzOTtzIGEgZnVuZGFtZW50YWwgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIG5ldyBza2JzIGZyb20gZXhpc3Rpbmcgb25lcywgYnV0IEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIGFuZCBzZWUgaWYgYW55dGhpbmcganVtcHMgb3V0LiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5IGhhbmRsZSB0aGUgZGF0YSBjb3B5IGFuZCB0aGUgcmVmZXJlbmNlIGNvdW50aW5nLiBJIGV4cGVjdCBpdCYjMzk7bGwgYmUgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCwgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcHV6emxlIGZvciBwZXJmb3JtYW5jZSwgYW5kIG9idmlvdXNseSwgY29ycmVjdG5lc3MgaXMgcGFyYW1vdW50IGhlcmUuIEkmIzM5O20gbG9va2luZyBmb3IgcG90ZW50aWFsIGFyZWFzIHRoYXQgbWlnaHQgaW50cm9kdWNlIGNvbnRlbnRpb24gb3Igb3ZlcmhlYWQsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIGZyZXF1ZW50IGNsb25pbmcgd2Ugc2VlIGluIGhpZ2gtcGVyZm9ybWFuY2UgbmV0d29ya2luZyBzY2VuYXJpb3MuIExldCYjMzk7cyBzZWUgaG93IHRoZXkgbWFuYWdlIHRoZSBzaGFyZWQgZGF0YSBidWZmZXIgYW5kIG1ldGFkYXRhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTYxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNjEwOlx0c3RhdGljIHN0cnVjdCBza19idWZmICpfX3NrYl9jbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjE2MTE6XHR7XG4xNjEyOlx0I2RlZmluZSBDKHgpIG4tXHUwMDNleCA9IHNrYi1cdTAwM2V4XG4xNjEzOlx0XG4xNjE0Olx0XHRuLVx1MDAzZW5leHQgPSBuLVx1MDAzZXByZXYgPSBOVUxMO1xuMTYxNTpcdFx0bi1cdTAwM2VzayA9IE5VTEw7XG4xNjE2Olx0XHRfX2NvcHlfc2tiX2hlYWRlcihuLCBza2IpO1xuMTYxNzpcdFxuMTYxODpcdFx0QyhsZW4pO1xuMTYxOTpcdFx0QyhkYXRhX2xlbik7XG4xNjIwOlx0XHRDKG1hY19sZW4pO1xuMTYyMTpcdFx0bi1cdTAwM2VoZHJfbGVuID0gc2tiLVx1MDAzZW5vaGRyID8gc2tiX2hlYWRyb29tKHNrYikgOiBza2ItXHUwMDNlaGRyX2xlbjtcbjE2MjI6XHRcdG4tXHUwMDNlY2xvbmVkID0gMTtcbjE2MjM6XHRcdG4tXHUwMDNlbm9oZHIgPSAwO1xuMTYyNDpcdFx0bi1cdTAwM2VwZWVrZWQgPSAwO1xuMTYyNTpcdFx0QyhwZm1lbWFsbG9jKTtcbjE2MjY6XHRcdEMocHBfcmVjeWNsZSk7XG4xNjI3Olx0XHRuLVx1MDAzZWRlc3RydWN0b3IgPSBOVUxMO1xuMTYyODpcdFx0Qyh0YWlsKTtcbjE2Mjk6XHRcdEMoZW5kKTtcbjE2MzA6XHRcdEMoaGVhZCk7XG4xNjMxOlx0XHRDKGhlYWRfZnJhZyk7XG4xNjMyOlx0XHRDKGRhdGEpO1xuMTYzMzpcdFx0Qyh0cnVlc2l6ZSk7XG4xNjM0Olx0XHRyZWZjb3VudF9zZXQoXHUwMDI2bi1cdTAwM2V1c2VycywgMSk7XG4xNjM1Olx0XG4xNjM2Olx0XHRhdG9taWNfaW5jKFx1MDAyNihza2Jfc2hpbmZvKHNrYiktXHUwMDNlZGF0YXJlZikpO1xuMTYzNzpcdFx0c2tiLVx1MDAzZWNsb25lZCA9IDE7XG4xNjM4Olx0XG4xNjM5Olx0XHRyZXR1cm4gbjtcbjE2NDA6XHQjdW5kZWYgQ1xuMTY0MTpcdH1cbjE2NDI6XHRcbjE2NDM6XHQvKipcbjE2NDQ6XHQgKiBhbGxvY19za2JfZm9yX21zZygpIC0gYWxsb2NhdGUgc2tfYnVmZiB0byB3cmFwIGZyYWcgbGlzdCBmb3JtaW5nIGEgbXNnXG4xNjQ1Olx0ICogQGZpcnN0OiBmaXJzdCBza19idWZmIG9mIHRoZSBtc2dcbjE2NDY6XHQgKi9cbjE2NDc6XHRzdHJ1Y3Qgc2tfYnVmZiAqYWxsb2Nfc2tiX2Zvcl9tc2coc3RydWN0IHNrX2J1ZmYgKmZpcnN0KVxuMTY0ODpcdHtcbjE2NDk6XHRcdHN0cnVjdCBza19idWZmICpuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjMzNAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE3MDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgU0tCIERhdGEgU2hhcmluZyBhbmQgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgd2UgaGF2ZSBhIHRyaWNreSBzaXR1YXRpb24gd2l0aCBTS0JzLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBob3cgZGF0YSByZWZlcmVuY2VzIGFuZCBjbG9uaW5nIGludGVyYWN0IHdpdGggYHBza2JfZXhwYW5kX2hlYWRgIGFuZCBgcHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyYC4gSSYjMzk7bSBzZWVpbmcgYSBwb3RlbnRpYWwgZmxhdyBpbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiwgcGFydGljdWxhcmx5IHdoZW4gYSBjbG9uZWQgU0tCIGlzIGZyZWVkLCB3aGljaCBjb3VsZCBsZWFkIHRvIGRhdGEgY29ycnVwdGlvbiBvciBpbmNvcnJlY3QgcmVmZXJlbmNlIGNvdW50aW5nLgoKSW5pdGlhbGx5LCB3aGVuIGBfX3NrYl9oZWFkZXJfcmVsZWFzZWAgaXMgY2FsbGVkLCB3ZSBzZXQgYHNrYi0mZ3Q7bm9oZHJgIHRvIDEsIGFuZCB0aGUgZGF0YXJlZiBpcyBgMSAmIzQzOyAoMSAmbHQ7Jmx0OyBTS0JfREFUQVJFRl9TSElGVClgLiBUaGVuLCB3aGVuIGFuIFNLQiBpcyBjbG9uZWQsIGJvdGggdGhlIG9yaWdpbmFsIGFuZCB0aGUgY2xvbmUmIzM5O3MgYGNsb25lZGAgZmxhZyBpcyBzZXQsIGFuZCB0aGUgYGRhdGFyZWZgIGJlY29tZXMgYDIgJiM0MzsgKDEgJmx0OyZsdDsgU0tCX0RBVEFSRUZfU0hJRlQpYC4KClRoZSBjb3JlIGlzc3VlIGxpZXMgaW4gd2hhdCBoYXBwZW5zIHdoZW4gYSBjbG9uZSBpcyBmcmVlZC4gVGhlIGBza2JfZGF0YV91bnJlZmAgZnVuY3Rpb24gcmVkdWNlcyBgZGF0YXJlZmAgYmFzZWQgb24gdGhlIGBza2JfZGF0YXJlZl9iaWFzYCwgd2hpY2ggZGVwZW5kcyBvbiBgc2tiLSZndDtub2hkcmAuICBJZiB0aGUgb3JpZ2luYWwgaXMgc3RpbGwgYXJvdW5kIGFuZCBgc2tiLSZndDtub2hkcmAgaXMgMSwgYSBiaWFzIG9mIGAxICYjNDM7ICgxICZsdDsmbHQ7IFNLQl9EQVRBUkVGX1NISUZUKWAgaXMgaW50cm9kdWNlZC4gVGhlIG9sZCBjb2RlIGhhZCBhIHByb2JsZW0gd2hlbiBhbiBTS0Igd2FzIGNsb25lZCwgdGhlbiB0aGUgY2xvbmUgd2FzIGZyZWVkLCBidXQgdGhlIG9yaWdpbmFsIHdhcyBzdGlsbCBhcm91bmQuICBJbiB0aGlzIHNjZW5hcmlvIHRoZSB2YWx1ZSBvZiB0aGUgYHNrYl9jbG9uZWRgIGZ1bmN0aW9uIHdpbGwgbWlzaW50ZXJwcmV0IHdoZXRoZXIgZGF0YSBpcyBzaGFyZWQgKGluY29ycmVjdGx5IGFzc3VtaW5nIGl0IGlzIG5vdCBzaGFyZWQpLCBhbmQgYHBza2JfZXhwYW5kX2hlYWRgIGFuZCBgcHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyYCB3aWxsIG1pc3Rha2VubHkgZnJlZSB0aGUgZGF0YSwgb3IgY29ycnVwdCB0aGUgcmVmY291bnQuICBUaGUgYHNrYl9kYXRhX2lzX3NoYXJlZGAgZnVuY3Rpb24gd2lsbCByZXR1cm4gVFJVRSwgbWVhbmluZyB0aGF0IHRoaXMgZGF0YSBpcyBhY3R1YWxseSBzaGFyZWQsIGFuZCBuZWVkcyB0byBiZSBoYW5kbGVkIGFwcHJvcHJpYXRlbHkuICAKClRoZSByb290IGNhdXNlIGFwcGVhcnMgdG8gYmUgdGhlIGBza2JfY2xvbmVkYCBtYWNybyBub3QgcHJvcGVybHkgYWNjb3VudGluZyBmb3IgdGhlIGBub2hkcmAgYml0IGluIGl0cyBjYWxjdWxhdGlvbiBvZiBzaGFyZWQgZGF0YSwgd2hpY2ggcmVzdWx0cyBpbiBgcHNrYl9leHBhbmRfaGVhZGAgcG90ZW50aWFsbHkgZnJlZWluZyBzaGFyZWQgZGF0YSBwcmVtYXR1cmVseS4gIFRoaXMgY291bGQgY2F1c2UgZGF0YSBjb3JydXB0aW9uLCBvciByZWZlcmVuY2UgY291bnQgaXNzdWVzLiBUaGUgYHNrYl9jbG9uZWRgIG9ubHkgbWFza2VkIG91dCB0aGUgaGlnaGVyIGJpdHMsIHdoaWNoIGluZGljYXRlZCB3aGV0aGVyIGBub2hkcmAgd2FzIHNldCBvciBub3QsIHNvIGBza2JfY2xvbmVkYCB3cm9uZ2x5IHRob3VnaHQgYG5gIHdhcyB0aGUgc29sZSBvd25lci4KCk5vdywgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGlzIGlzIGZ1enplci13b3J0aHkuIEdpdmVuIHRoYXQgdGhpcyBkaXJlY3RseSBpbXBhY3RzIGNvcmUga2VybmVsIGxvZ2ljIHdpdGhpbiBgbmV0L2NvcmUvc2tidWZmLmNgIGFuZCBwb3RlbnRpYWxseSBpbmNsdWRlcyBgcHNrYl9leHBhbmRfaGVhZGAgYW5kIGBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXJgIHdoaWNoIGFyZSB3aWRlbHkgdXNlZCwgSSYjMzk7ZCBzYXkgdGhpcyBuZWVkcyB0byBiZSBpbnZlc3RpZ2F0ZWQgZnVydGhlci4gIFRoaXMgZGlyZWN0bHkgYWZmZWN0cyBtZW1vcnkgbWFuYWdlbWVudCB3aXRoIGBza2JgIGNsb25lcywgYW5kIHNvIEkgc2hvdWxkIGNvbnNpZGVyIHNldHRpbmcgYFdvcnRoRnV6emluZz10cnVlYC4KCkZvciB0aGUgZm9jdXMgc3ltYm9scywgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY2FsbCBzaXRlcyBmb3IgYHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcmAgc2luY2UgaXQmIzM5O3MgYHN0YXRpY2AuICBIb3dldmVyLCBgcHNrYl9leHBhbmRfaGVhZGAgaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgYEZvY3VzU3ltYm9sc2AsIGFzIGlzIHRoZSBub24tc3RhdGljIGFuZCBub24taW5saW5lIGBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXJgIGNhbGxzaXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXJ8cHNrYl9leHBhbmRfaGVhZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvZnJhZ21lbnRhdGlvbi5jPTI2MT1iYXRhZHZfZnJhZ19tZXJnZV9wYWNrZXRzKHN0cnVjdCBobGlzdF9oZWFkICpjaGFpbilcbi0tXG5uZXQvYmF0bWFuLWFkdi9mcmFnbWVudGF0aW9uLmMtMjgxLVx0LyogTWFrZSByb29tIGZvciB0aGUgcmVzdCBvZiB0aGUgZnJhZ21lbnRzLiAqL1xubmV0L2JhdG1hbi1hZHYvZnJhZ21lbnRhdGlvbi5jOjI4MjpcdGlmIChwc2tiX2V4cGFuZF9oZWFkKHNrYl9vdXQsIDAsIHNpemUgLSBza2Jfb3V0LVx1MDAzZWxlbiwgR0ZQX0FUT01JQykgXHUwMDNjIDApIHtcbm5ldC9iYXRtYW4tYWR2L2ZyYWdtZW50YXRpb24uYy0yODMtXHRcdGtmcmVlX3NrYihza2Jfb3V0KTtcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmM9MTAzNT1pbnQgYnBmX3Byb2dfdGVzdF9ydW5fc2tiKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmthdHRyLFxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy0xMjMxLVxubmV0L2JwZi90ZXN0X3J1bi5jOjEyMzI6XHRcdFx0aWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCBuaGVhZCwgMCwgR0ZQX1VTRVIpKSB7XG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTIzMy1cdFx0XHRcdHJldCA9IC1FTk9NRU07XG4tLVxubmV0L2NvcmUvZGV2LmM9NTYxMz1uZXRpZl9za2JfY2hlY2tfZm9yX3hkcChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9kZXYuYy01NjI0LVx0LyogSW4gY2FzZSB3ZSBoYXZlIHRvIGdvIGRvd24gdGhlIHBhdGggYW5kIGFsc28gbGluZWFyaXplLFxubmV0L2NvcmUvZGV2LmM6NTYyNTpcdCAqIHRoZW4gbGV0cyBkbyB0aGUgcHNrYl9leHBhbmRfaGVhZCgpIHdvcmsganVzdCBvbmNlIGhlcmUuXG5uZXQvY29yZS9kZXYuYy01NjI2LVx0ICovXG4tLVxubmV0L2NvcmUvZGV2LmMtNTYyOC1cdHRyb29tID0gc2tiLVx1MDAzZXRhaWwgJiM0Mzsgc2tiLVx1MDAzZWRhdGFfbGVuIC0gc2tiLVx1MDAzZWVuZDtcbm5ldC9jb3JlL2Rldi5jOjU2Mjk6XHRlcnIgPSBwc2tiX2V4cGFuZF9oZWFkKHNrYixcbm5ldC9jb3JlL2Rldi5jLTU2MzAtXHRcdFx0ICAgICAgIGhyb29tIFx1MDAzZSAwID8gQUxJR04oaHJvb20sIE5FVF9TS0JfUEFEKSA6IDAsXG4tLVxubmV0L2NvcmUvbHd0X2JwZi5jPTE3MD1zdGF0aWMgaW50IHhtaXRfY2hlY2tfaGVhZHJvb20oc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGhyb29tKVxuLS1cbm5ldC9jb3JlL2x3dF9icGYuYy0xNzQtXG5uZXQvY29yZS9sd3RfYnBmLmM6MTc1Olx0XHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIG5oZWFkLCAwLCBHRlBfQVRPTUlDKSlcbm5ldC9jb3JlL2x3dF9icGYuYy0xNzYtXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4tLVxubmV0L2NvcmUvcGt0Z2VuLmM9Mjc1OT1zdGF0aWMgaW50IHByb2Nlc3NfaXBzZWMoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYsXG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtMjc3Mi1cdFx0XHRpZiAobmhlYWQgXHUwMDNlIDApIHtcbm5ldC9jb3JlL3BrdGdlbi5jOjI3NzM6XHRcdFx0XHRyZXQgPSBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgbmhlYWQsIDAsIEdGUF9BVE9NSUMpO1xubmV0L2NvcmUvcGt0Z2VuLmMtMjc3NC1cdFx0XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5uZXQvY29yZS9za2JfZmF1bHRfaW5qZWN0aW9uLmM9MzM9dm9pZCBza2JfbWlnaHRfcmVhbGxvYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL3NrYl9mYXVsdF9pbmplY3Rpb24uYy0zNy1cbm5ldC9jb3JlL3NrYl9mYXVsdF9pbmplY3Rpb24uYzozODpcdHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCAwLCBHRlBfQVRPTUlDKTtcbm5ldC9jb3JlL3NrYl9mYXVsdF9pbmplY3Rpb24uYy0zOS19XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MjI3NT1FWFBPUlRfU1lNQk9MKF9fcHNrYl9jb3B5X2ZjbG9uZSk7XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMjI3Ny0vKipcbm5ldC9jb3JlL3NrYnVmZi5jOjIyNzg6ICpcdHBza2JfZXhwYW5kX2hlYWQgLSByZWFsbG9jYXRlIGhlYWRlciBvZiBcdTAwMjZza19idWZmXG5uZXQvY29yZS9za2J1ZmYuYy0yMjc5LSAqXHRAc2tiOiBidWZmZXIgdG8gcmVhbGxvY2F0ZVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTIyOTYtXG5uZXQvY29yZS9za2J1ZmYuYzoyMjk3OmludCBwc2tiX2V4cGFuZF9oZWFkKHN0cnVjdCBza19idWZmICpza2IsIGludCBuaGVhZCwgaW50IG50YWlsLFxubmV0L2NvcmUvc2tidWZmLmMtMjI5OC1cdFx0ICAgICBnZnBfdCBnZnBfbWFzaylcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0yMzc5LX1cbm5ldC9jb3JlL3NrYnVmZi5jOjIzODA6RVhQT1JUX1NZTUJPTChwc2tiX2V4cGFuZF9oZWFkKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTIzODEtXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MjM4ND1zdHJ1Y3Qgc2tfYnVmZiAqc2tiX3JlYWxsb2NfaGVhZHJvb20oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhlYWRyb29tKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTIzOTItXHRcdHNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcbm5ldC9jb3JlL3NrYnVmZi5jOjIzOTM6XHRcdGlmIChza2IyIFx1MDAyNlx1MDAyNiBwc2tiX2V4cGFuZF9oZWFkKHNrYjIsIFNLQl9EQVRBX0FMSUdOKGRlbHRhKSwgMCxcbm5ldC9jb3JlL3NrYnVmZi5jLTIzOTQtXHRcdFx0XHRcdCAgICAgR0ZQX0FUT01JQykpIHtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0yNDA0PWludCBfX3NrYl91bmNsb25lX2tlZXB0cnVlc2l6ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBwcmkpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMjQxMi1cbm5ldC9jb3JlL3NrYnVmZi5jOjI0MTM6XHRyZXMgPSBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgMCwgcHJpKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTI0MTQtXHRpZiAocmVzKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTI0NDg9c3RydWN0IHNrX2J1ZmYgKnNrYl9leHBhbmRfaGVhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaGVhZHJvb20pXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMjQ1OC1cdGRlbHRhID0gU0tCX0RBVEFfQUxJR04oZGVsdGEpO1xubmV0L2NvcmUvc2tidWZmLmM6MjQ1OTpcdC8qIHBza2JfZXhwYW5kX2hlYWQoKSBtaWdodCBjcmFzaCwgaWYgc2tiIGlzIHNoYXJlZC4gKi9cbm5ldC9jb3JlL3NrYnVmZi5jLTI0NjAtXHRpZiAoc2tiX3NoYXJlZChza2IpIHx8ICFpc19za2Jfd21lbShza2IpKSB7XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMjQ3MC1cdH1cbm5ldC9jb3JlL3NrYnVmZi5jOjI0NzE6XHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIGRlbHRhLCAwLCBHRlBfQVRPTUlDKSlcbm5ldC9jb3JlL3NrYnVmZi5jLTI0NzItXHRcdGdvdG8gZmFpbDtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0yNTY3PWludCBfX3NrYl9wYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHBhZCwgYm9vbCBmcmVlX29uX2Vycm9yKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTI1NzktXHRpZiAobGlrZWx5KHNrYl9jbG9uZWQoc2tiKSB8fCBudGFpbCBcdTAwM2UgMCkpIHtcbm5ldC9jb3JlL3NrYnVmZi5jOjI1ODA6XHRcdGVyciA9IHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCBudGFpbCwgR0ZQX0FUT01JQyk7XG5uZXQvY29yZS9za2J1ZmYuYy0yNTgxLVx0XHRpZiAodW5saWtlbHkoZXJyKSlcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0yNzI0PWludCBfX19wc2tiX3RyaW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbilcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0yNzMzLVx0aWYgKHNrYl9jbG9uZWQoc2tiKSBcdTAwMjZcdTAwMjZcbm5ldC9jb3JlL3NrYnVmZi5jOjI3MzQ6XHQgICAgdW5saWtlbHkoKGVyciA9IHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCAwLCBHRlBfQVRPTUlDKSkpKVxubmV0L2NvcmUvc2tidWZmLmMtMjczNS1cdFx0cmV0dXJuIGVycjtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0yODc4PXZvaWQgKl9fcHNrYl9wdWxsX3RhaWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGRlbHRhKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTI4ODktXHRpZiAoZWF0IFx1MDAzZSAwIHx8IHNrYl9jbG9uZWQoc2tiKSkge1xubmV0L2NvcmUvc2tidWZmLmM6Mjg5MDpcdFx0aWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCBlYXQgXHUwMDNlIDAgPyBlYXQgJiM0MzsgMTI4IDogMCxcbm5ldC9jb3JlL3NrYnVmZi5jLTI4OTEtXHRcdFx0XHQgICAgIEdGUF9BVE9NSUMpKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTUzODM9aW50IHNrYl9jb3dfZGF0YShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGFpbGJpdHMsIHN0cnVjdCBza19idWZmICoqdHJhaWxlcilcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy01NDA0LVx0XHRpZiAoc2tiX3RhaWxyb29tKHNrYikgXHUwMDNjIHRhaWxiaXRzIFx1MDAyNlx1MDAyNlxubmV0L2NvcmUvc2tidWZmLmM6NTQwNTpcdFx0ICAgIHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCB0YWlsYml0cy1za2JfdGFpbHJvb20oc2tiKSYjNDM7MTI4LCBHRlBfQVRPTUlDKSlcbm5ldC9jb3JlL3NrYnVmZi5jLTU0MDYtXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NjM4Mz1pbnQgc2tiX2Vuc3VyZV93cml0YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgd3JpdGVfbGVuKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTYzOTAtXG5uZXQvY29yZS9za2J1ZmYuYzo2MzkxOlx0cmV0dXJuIHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCAwLCBHRlBfQVRPTUlDKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTYzOTItfVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTYzOTU9aW50IHNrYl9lbnN1cmVfd3JpdGFibGVfaGVhZF90YWlsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNjQxNC1cbm5ldC9jb3JlL3NrYnVmZi5jOjY0MTU6XHRyZXR1cm4gcHNrYl9leHBhbmRfaGVhZChza2IsIG5lZWRlZF9oZWFkcm9vbSwgbmVlZGVkX3RhaWxyb29tLFxubmV0L2NvcmUvc2tidWZmLmMtNjQxNi1cdFx0XHRcdEdGUF9BVE9NSUMpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTY4MjY9RVhQT1JUX1NZTUJPTChhbGxvY19za2Jfd2l0aF9mcmFncyk7XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNjgyOC0vKiBjYXJ2ZSBvdXQgdGhlIGZpcnN0IG9mZiBieXRlcyBmcm9tIHNrYiB3aGVuIG9mZiBcdTAwM2MgaGVhZGxlbiAqL1xubmV0L2NvcmUvc2tidWZmLmM6NjgyOTpzdGF0aWMgaW50IHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1MzIgb2ZmLFxubmV0L2NvcmUvc2tidWZmLmMtNjgzMC1cdFx0XHRcdCAgICBjb25zdCBpbnQgaGVhZGxlbiwgZ2ZwX3QgZ2ZwX21hc2spXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NzAzND1zdGF0aWMgaW50IHBza2JfY2FydmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTMyIGxlbiwgZ2ZwX3QgZ2ZwKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTcwMzgtXHRpZiAobGVuIFx1MDAzYyBoZWFkbGVuKVxubmV0L2NvcmUvc2tidWZmLmM6NzAzOTpcdFx0cmV0dXJuIHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcihza2IsIGxlbiwgaGVhZGxlbiwgZ2ZwKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTcwNDAtXHRlbHNlXG4tLVxubmV0L2lwdjQvaWNtcC5jPTczOT1pY21wX2V4dF9hcHBlbmQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luLCBzdHJ1Y3QgaWNtcGhkciAqaWNtcGgsXG4tLVxubmV0L2lwdjQvaWNtcC5jLTc3OC1cbm5ldC9pcHY0L2ljbXAuYzo3Nzk6XHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIDAsIGV4dF9tYXhfbGVuLCBHRlBfQVRPTUlDKSlcbm5ldC9pcHY0L2ljbXAuYy03ODAtXHRcdGdvdG8gZnJlZV9za2I7XG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmM9MjA5PWludCBpbmV0X3NrX2RpYWdfZmlsbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayxcbi0tXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy0zNzgtXHRcdGlmIChjYi1cdTAwM2VtaW5fZHVtcF9hbGxvYyBcdTAwM2UgcHJldl9taW5fZHVtcF9hbGxvYylcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjM3OTpcdFx0XHQvKiBSZXRyeSB3aXRoIHBza2JfZXhwYW5kX2hlYWQoKSB3aXRoXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy0zODAtXHRcdFx0ICogX19HRlBfRElSRUNUX1JFQ0xBSU1cbi0tXG5uZXQvaXB2NC9pbmV0X2RpYWcuYz04MDk9c3RhdGljIGludCBfX2luZXRfZGlhZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbi0tXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy04MzEtXHRpZiAoIXNrYi1cdTAwM2VsZW4gXHUwMDI2XHUwMDI2IGNiLVx1MDAzZW1pbl9kdW1wX2FsbG9jIFx1MDAzZSBwcmV2X21pbl9kdW1wX2FsbG9jKSB7XG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo4MzI6XHRcdGVyciA9IHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCBjYi1cdTAwM2VtaW5fZHVtcF9hbGxvYywgR0ZQX0tFUk5FTCk7XG5uZXQvaXB2NC9pbmV0X2RpYWcuYy04MzMtXHRcdGlmICghZXJyKVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTg5ND1zdGF0aWMgaW50IGlwZ3JlX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTkwNC1cdGlmIChza2JfaGVhZHJvb20oc2tiKSBcdTAwM2MgbmVlZGVkIFx1MDAyNlx1MDAyNlxubmV0L2lwdjQvaXBfZ3JlLmM6OTA1Olx0ICAgIHBza2JfZXhwYW5kX2hlYWQoc2tiLCBISF9EQVRBX0FMSUdOKG5lZWRlZCAtIHNrYl9oZWFkcm9vbShza2IpKSxcbm5ldC9pcHY0L2lwX2dyZS5jLTkwNi1cdFx0XHQgICAgIDAsIEdGUF9BVE9NSUMpKVxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci5jPTIyPWludCBpcF9yb3V0ZV9tZV9oYXJkZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBhZGRyX3R5cGUpXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyLmMtODItXHRpZiAoc2tiX2hlYWRyb29tKHNrYikgXHUwMDNjIGhoX2xlbiBcdTAwMjZcdTAwMjZcbm5ldC9pcHY0L25ldGZpbHRlci5jOjgzOlx0ICAgIHBza2JfZXhwYW5kX2hlYWQoc2tiLCBISF9EQVRBX0FMSUdOKGhoX2xlbiAtIHNrYl9oZWFkcm9vbShza2IpKSxcbm5ldC9pcHY0L25ldGZpbHRlci5jLTg0LVx0XHRcdFx0MCwgR0ZQX0FUT01JQykpXG4tLVxubmV0L2lwdjYvZXh0aGRycy5jPTIzMj1zdGF0aWMgYm9vbCBpcHY2X2Rlc3RfaGFvKHN0cnVjdCBza19idWZmICpza2IsIGludCBvcHRvZmYpXG4tLVxubmV0L2lwdjYvZXh0aGRycy5jLTI3MC1cdGlmIChza2JfY2xvbmVkKHNrYikpIHtcbm5ldC9pcHY2L2V4dGhkcnMuYzoyNzE6XHRcdGlmIChwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgMCwgR0ZQX0FUT01JQykpXG5uZXQvaXB2Ni9leHRoZHJzLmMtMjcyLVx0XHRcdGdvdG8gZGlzY2FyZDtcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmM9MzcxPXN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXG4tLVxubmV0L2lwdjYvZXh0aGRycy5jLTQzNC1cdGlmIChza2JfY2xvbmVkKHNrYikpIHtcbm5ldC9pcHY2L2V4dGhkcnMuYzo0MzU6XHRcdGlmIChwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgMCwgR0ZQX0FUT01JQykpIHtcbm5ldC9pcHY2L2V4dGhkcnMuYy00MzYtXHRcdFx0X19JUDZfSU5DX1NUQVRTKG5ldCwgaXA2X2RzdF9pZGV2KHNrYl9kc3Qoc2tiKSksXG4tLVxubmV0L2lwdjYvZXh0aGRycy5jPTQ4MT1zdGF0aWMgaW50IGlwdjZfcnBsX3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtNTg5LVx0XHQgICAgIHNrYl9oZWFkcm9vbShza2IpIFx1MDAzYyBjaGRyX2xlbiAmIzQzOyBza2ItXHUwMDNlbWFjX2xlbikpIHtcbm5ldC9pcHY2L2V4dGhkcnMuYzo1OTA6XHRcdGlmIChwc2tiX2V4cGFuZF9oZWFkKHNrYiwgY2hkcl9sZW4gJiM0Mzsgc2tiLVx1MDAzZW1hY19sZW4sIDAsXG5uZXQvaXB2Ni9leHRoZHJzLmMtNTkxLVx0XHRcdFx0ICAgICBHRlBfQVRPTUlDKSkge1xuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYz02NDU9c3RhdGljIGludCBpcHY2X3J0aGRyX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYy03NTgtXHRcdC8qIHRoZSBjb3B5IGlzIGEgZm9yd2FyZGVkIHBhY2tldCAqL1xubmV0L2lwdjYvZXh0aGRycy5jOjc1OTpcdFx0aWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCAwLCBHRlBfQVRPTUlDKSkge1xubmV0L2lwdjYvZXh0aGRycy5jLTc2MC1cdFx0XHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpcDZfZHN0X2lkZXYoc2tiX2RzdChza2IpKSxcbi0tXG5uZXQvaXB2Ni9pY21wLmM9NTYyPWljbXA2X2V4dF9hcHBlbmQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luLFxuLS1cbm5ldC9pcHY2L2ljbXAuYy02MDgtXG5uZXQvaXB2Ni9pY21wLmM6NjA5Olx0aWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCBleHRfbWF4X2xlbiwgR0ZQX0FUT01JQykpXG5uZXQvaXB2Ni9pY21wLmMtNjEwLVx0XHRnb3RvIGZyZWVfc2tiO1xuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYz0xMzYzPXN0YXRpYyBpbnQgaXA2Z3JlX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYy0xMzczLVx0aWYgKHNrYl9oZWFkcm9vbShza2IpIFx1MDAzYyBuZWVkZWQgXHUwMDI2XHUwMDI2XG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MTM3NDpcdCAgICBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgSEhfREFUQV9BTElHTihuZWVkZWQgLSBza2JfaGVhZHJvb20oc2tiKSksXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTM3NS1cdFx0XHQgICAgIDAsIEdGUF9BVE9NSUMpKVxuLS1cbm5ldC9pcHY2L25ldGZpbHRlci5jPTI0PWludCBpcDZfcm91dGVfbWVfaGFyZGVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrX3BhcnRpYWwsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyLmMtODAtXHRpZiAoc2tiX2hlYWRyb29tKHNrYikgXHUwMDNjIGhoX2xlbiBcdTAwMjZcdTAwMjZcbm5ldC9pcHY2L25ldGZpbHRlci5jOjgxOlx0ICAgIHBza2JfZXhwYW5kX2hlYWQoc2tiLCBISF9EQVRBX0FMSUdOKGhoX2xlbiAtIHNrYl9oZWFkcm9vbShza2IpKSxcbm5ldC9pcHY2L25ldGZpbHRlci5jLTgyLVx0XHRcdCAgICAgMCwgR0ZQX0FUT01JQykpXG4tLVxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jPTM5OD1zdGF0aWMgaW50IHNlZzZfZG9fc3JoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBkc3RfZW50cnkgKmNhY2hlX2RzdClcbi0tXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtNDQ4LVxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jOjQ0OTpcdFx0aWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCBza2ItXHUwMDNlbWFjX2xlbiwgMCwgR0ZQX0FUT01JQykgXHUwMDNjIDApXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtNDUwLVx0XHRcdHJldHVybiAtRU5PTUVNO1xuLS1cbm5ldC9pcHY2L3VkcF9vZmZsb2FkLmM9MTk9c3RhdGljIHN0cnVjdCBza19idWZmICp1ZHA2X3Vmb19mcmFnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY2L3VkcF9vZmZsb2FkLmMtNzgtXHRcdGlmIChza2ItXHUwMDNlbWFjX2hlYWRlciBcdTAwM2MgKHRubF9obGVuICYjNDM7IGZyYWdfaGRyX3N6KSkge1xubmV0L2lwdjYvdWRwX29mZmxvYWQuYzo3OTpcdFx0XHRpZiAoZ3NvX3Bza2JfZXhwYW5kX2hlYWQoc2tiLCB0bmxfaGxlbiAmIzQzOyBmcmFnX2hkcl9zeikpXG5uZXQvaXB2Ni91ZHBfb2ZmbG9hZC5jLTgwLVx0XHRcdFx0Z290byBvdXQ7XG4tLVxubmV0L21hYzgwMjExL3J4LmM9NzQyPWllZWU4MDIxMV9tYWtlX21vbml0b3Jfc2tiKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxuLS1cbm5ldC9tYWM4MDIxMS9yeC5jLTc2Ny1cdFx0aWYgKHNrYl9oZWFkcm9vbShza2IpIFx1MDAzYyBuZWVkZWRfaGVhZHJvb20gXHUwMDI2XHUwMDI2XG5uZXQvbWFjODAyMTEvcnguYzo3Njg6XHRcdCAgICBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgbmVlZGVkX2hlYWRyb29tLCAwLCBHRlBfQVRPTUlDKSkge1xubmV0L21hYzgwMjExL3J4LmMtNzY5LVx0XHRcdGRldl9rZnJlZV9za2Ioc2tiKTtcbi0tXG5uZXQvbWFjODAyMTEvcnguYz0yMzczPWllZWU4MDIxMV9yeF9oX2RlZnJhZ21lbnQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeClcbi0tXG5uZXQvbWFjODAyMTEvcnguYy0yNTEyLVx0XHRJODAyX0RFQlVHX0lOQyhyeC1cdTAwM2Vsb2NhbC1cdTAwM2VyeF9leHBhbmRfc2tiX2hlYWRfZGVmcmFnKTtcbm5ldC9tYWM4MDIxMS9yeC5jOjI1MTM6XHRcdGlmICh1bmxpa2VseShwc2tiX2V4cGFuZF9oZWFkKHJ4LVx1MDAzZXNrYiwgMCwgZW50cnktXHUwMDNlZXh0cmFfbGVuLFxubmV0L21hYzgwMjExL3J4LmMtMjUxNC1cdFx0XHRcdFx0ICAgICAgR0ZQX0FUT01JQykpKSB7XG4tLVxubmV0L21hYzgwMjExL3R4LmM9MjAwND1zdGF0aWMgaW50IGllZWU4MDIxMV9za2JfcmVzaXplKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTIwMzEtXG5uZXQvbWFjODAyMTEvdHguYzoyMDMyOlx0aWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCBoZWFkX25lZWQsIHRhaWxfbmVlZCwgR0ZQX0FUT01JQykpIHtcbm5ldC9tYWM4MDIxMS90eC5jLTIwMzMtXHRcdHdpcGh5X2RlYnVnKGxvY2FsLVx1MDAzZWh3LndpcGh5LFxuLS1cbm5ldC9tYWM4MDIxMS90eC5jPTMzODc9c3RhdGljIGJvb2wgaWVlZTgwMjExX2Ftc2R1X3JlYWxsb2NfcGFkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTMzOTItXG5uZXQvbWFjODAyMTEvdHguYzozMzkzOlx0XHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIGhlYWRyb29tLCAwLCBHRlBfQVRPTUlDKSkge1xubmV0L21hYzgwMjExL3R4LmMtMzM5NC1cdFx0XHR3aXBoeV9kZWJ1Zyhsb2NhbC1cdTAwM2Vody53aXBoeSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9oZWxwZXIuYz02Nz1zdGF0aWMgYm9vbCBlbmxhcmdlX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZXh0cmEpXG4tLVxubmV0L25ldGZpbHRlci9uZl9uYXRfaGVscGVyLmMtNzEtXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9oZWxwZXIuYzo3MjpcdGlmIChwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgZXh0cmEgLSBza2JfdGFpbHJvb20oc2tiKSwgR0ZQX0FUT01JQykpXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9oZWxwZXIuYy03My1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvLmM9NjAxPXN0YXRpYyBpbnQgbmZfeGZybV9tZV9oYXJkZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZmFtaWx5KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvLmMtNjMxLVx0aWYgKHNrYl9oZWFkcm9vbShza2IpIFx1MDAzYyBoaF9sZW4gXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90by5jOjYzMjpcdCAgICBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgaGhfbGVuIC0gc2tiX2hlYWRyb29tKHNrYiksIDAsIEdGUF9BVE9NSUMpKVxubmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG8uYy02MzMtXHRcdHJldHVybiAtRU5PTUVNO1xuLS1cbm5ldC9uZXRmaWx0ZXIveHRfVENQTVNTLmM9NzE9dGNwbXNzX21hbmdsZV9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X1RDUE1TUy5jLTE1NC1cdGlmIChza2JfdGFpbHJvb20oc2tiKSBcdTAwM2MgVENQT0xFTl9NU1MpIHtcbm5ldC9uZXRmaWx0ZXIveHRfVENQTVNTLmM6MTU1Olx0XHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIDAsXG5uZXQvbmV0ZmlsdGVyL3h0X1RDUE1TUy5jLTE1Ni1cdFx0XHRcdCAgICAgVENQT0xFTl9NU1MgLSBza2JfdGFpbHJvb20oc2tiKSxcbi0tXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmM9MTI4Mj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm5ldGxpbmtfdHJpbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBhbGxvY2F0aW9uKVxuLS1cbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYy0xMjk5LVxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jOjEzMDA6XHRwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgLWRlbHRhLFxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jLTEzMDEtXHRcdFx0IChhbGxvY2F0aW9uIFx1MDAyNiB+X19HRlBfRElSRUNUX1JFQ0xBSU0pIHxcbi0tXG5uZXQvdGlwYy9iZWFyZXIuYz00OTc9aW50IHRpcGNfbDJfc2VuZF9tc2coc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC90aXBjL2JlYXJlci5jLTUwNy1cdGRlbHRhID0gU0tCX0RBVEFfQUxJR04oZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiAtIHNrYl9oZWFkcm9vbShza2IpKTtcbm5ldC90aXBjL2JlYXJlci5jOjUwODpcdGlmICgoZGVsdGEgXHUwMDNlIDApIFx1MDAyNlx1MDAyNiBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgZGVsdGEsIDAsIEdGUF9BVE9NSUMpKSB7XG5uZXQvdGlwYy9iZWFyZXIuYy01MDktXHRcdGtmcmVlX3NrYihza2IpO1xuLS1cbm5ldC90aXBjL2JlYXJlci5jPTc2ND12b2lkIHRpcGNfY2xvbmVfdG9fbG9vcGJhY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpwa3RzKVxuLS1cbm5ldC90aXBjL2JlYXJlci5jLTc3NS1cdFx0ZXhwID0gU0tCX0RBVEFfQUxJR04oZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiAtIHNrYl9oZWFkcm9vbShza2IpKTtcbm5ldC90aXBjL2JlYXJlci5jOjc3NjpcdFx0aWYgKGV4cCBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgcHNrYl9leHBhbmRfaGVhZChza2IsIGV4cCwgMCwgR0ZQX0FUT01JQykpIHtcbm5ldC90aXBjL2JlYXJlci5jLTc3Ny1cdFx0XHRrZnJlZV9za2Ioc2tiKTtcbi0tXG5uZXQvdGlwYy9tc2cuYz01MzI9Ym9vbCB0aXBjX21zZ190cnlfYnVuZGxlKHN0cnVjdCBza19idWZmICp0c2tiLCBzdHJ1Y3Qgc2tfYnVmZiAqKnNrYiwgdTMyIG1zcyxcbi0tXG5uZXQvdGlwYy9tc2cuYy01NjItXHRcdHJldHVybiB0cnVlO1xubmV0L3RpcGMvbXNnLmM6NTYzOlx0aWYgKHVubGlrZWx5KHBza2JfZXhwYW5kX2hlYWQodHNrYiwgSU5UX0hfU0laRSwgbXNzIC0gdHN6IC0gSU5UX0hfU0laRSxcbm5ldC90aXBjL21zZy5jLTU2NC1cdFx0XHRcdCAgICAgIEdGUF9BVE9NSUMpKSlcbi0tXG5uZXQvdGlwYy91ZHBfbWVkaWEuYz0yMzc9c3RhdGljIGludCB0aXBjX3VkcF9zZW5kX21zZyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3RpcGMvdWRwX21lZGlhLmMtMjQ3LVx0aWYgKHNrYl9oZWFkcm9vbShza2IpIFx1MDAzYyBVRFBfTUlOX0hFQURST09NKSB7XG5uZXQvdGlwYy91ZHBfbWVkaWEuYzoyNDg6XHRcdGVyciA9IHBza2JfZXhwYW5kX2hlYWQoc2tiLCBVRFBfTUlOX0hFQURST09NLCAwLCBHRlBfQVRPTUlDKTtcbm5ldC90aXBjL3VkcF9tZWRpYS5jLTI0OS1cdFx0aWYgKGVycilcbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jPTMwPXN0YXRpYyBpbnQgeGZybV9za2JfY2hlY2tfc3BhY2Uoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTQzLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo0NDpcdHJldHVybiBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgbmhlYWQsIG50YWlsLCBHRlBfQVRPTUlDKTtcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNDUtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTM1OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipJbnZlc3RpZ2F0aW5nIGBwc2tiX2NhcnZlYCBhbmQgYHBza2JfZXh0cmFjdGAgVXNhZ2UqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgYSBoYW5kbGUgb24gd2hlcmUgdGhlc2UgZnVuY3Rpb25zLCBgcHNrYl9jYXJ2ZWAgYW5kIGBwc2tiX2V4dHJhY3RgLCBhcmUgYWN0dWFsbHkgYmVpbmcgdXRpbGl6ZWQuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiB0aGVpciBuYW1lIGFuZCBsaWtlbHkgcmVsYXRpb24gdG8gcGFja2V0IGJ1ZmZlciBtYW5pcHVsYXRpb24sIGlzIHRvIHplcm8gaW4gb24gdGhlIG5ldHdvcmsgY29yZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGV4YW1pbmluZyBgbmV0L2NvcmUvc2tidWZmLmNgLiBUaGF0JiMzOTtzIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4gZGlnZ2luZywgYXMgaXQmIzM5O3MgdGhlIGhlYXJ0IG9mIGhvdyB0aGVzZSBgc2tfYnVmZmAgc3RydWN0dXJlcyBhcmUgY3JlYXRlZCwgbWFuYWdlZCwgYW5kIG1hbmlwdWxhdGVkLiBJdCYjMzk7cyBhIGtleSBzcG90IHRvIGV4cGVjdCB0byBmaW5kIHRoZW0gaW52b2x2ZWQgaW4gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBlcmhhcHMsIG9wdGltaXphdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwc2tiX2NhcnZlfHBza2JfZXh0cmFjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jPTY4MjY9RVhQT1JUX1NZTUJPTChhbGxvY19za2Jfd2l0aF9mcmFncyk7XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNjgyOC0vKiBjYXJ2ZSBvdXQgdGhlIGZpcnN0IG9mZiBieXRlcyBmcm9tIHNrYiB3aGVuIG9mZiBcdTAwM2MgaGVhZGxlbiAqL1xubmV0L2NvcmUvc2tidWZmLmM6NjgyOTpzdGF0aWMgaW50IHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1MzIgb2ZmLFxubmV0L2NvcmUvc2tidWZmLmMtNjgzMC1cdFx0XHRcdCAgICBjb25zdCBpbnQgaGVhZGxlbiwgZ2ZwX3QgZ2ZwX21hc2spXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNjg5MS1cbm5ldC9jb3JlL3NrYnVmZi5jOjY4OTI6c3RhdGljIGludCBwc2tiX2NhcnZlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHUzMiBvZmYsIGdmcF90IGdmcCk7XG5uZXQvY29yZS9za2J1ZmYuYy02ODkzLVxubmV0L2NvcmUvc2tidWZmLmMtNjg5NC0vKiBjYXJ2ZSBvdXQgdGhlIGZpcnN0IGVhdCBieXRlcyBmcm9tIHNrYiYjMzk7cyBmcmFnX2xpc3QuIE1heSByZWN1cnNlIGludG9cbm5ldC9jb3JlL3NrYnVmZi5jOjY4OTU6ICogcHNrYl9jYXJ2ZSgpXG5uZXQvY29yZS9za2J1ZmYuYy02ODk2LSAqL1xubmV0L2NvcmUvc2tidWZmLmM6Njg5NzpzdGF0aWMgaW50IHBza2JfY2FydmVfZnJhZ19saXN0KHN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKnNoaW5mbywgaW50IGVhdCxcbm5ldC9jb3JlL3NrYnVmZi5jLTY4OTgtXHRcdFx0XHRnZnBfdCBnZnBfbWFzaylcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy02OTI1LVx0XHRcdH1cbm5ldC9jb3JlL3NrYnVmZi5jOjY5MjY6XHRcdFx0aWYgKHBza2JfY2FydmUobGlzdCwgZWF0LCBnZnBfbWFzaykgXHUwMDNjIDApIHtcbm5ldC9jb3JlL3NrYnVmZi5jLTY5MjctXHRcdFx0XHRrZnJlZV9za2IoY2xvbmUpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTY5NDktICovXG5uZXQvY29yZS9za2J1ZmYuYzo2OTUwOnN0YXRpYyBpbnQgcHNrYl9jYXJ2ZV9pbnNpZGVfbm9ubGluZWFyKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHUzMiBvZmYsXG5uZXQvY29yZS9za2J1ZmYuYy02OTUxLVx0XHRcdFx0ICAgICAgIGludCBwb3MsIGdmcF90IGdmcF9tYXNrKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTcwMDYtXHQvKiBzcGxpdCBsaW5lIGlzIGluIGZyYWcgbGlzdCAqL1xubmV0L2NvcmUvc2tidWZmLmM6NzAwNzpcdGlmIChrID09IDAgXHUwMDI2XHUwMDI2IHBza2JfY2FydmVfZnJhZ19saXN0KHNoaW5mbywgb2ZmIC0gcG9zLCBnZnBfbWFzaykpIHtcbm5ldC9jb3JlL3NrYnVmZi5jLTcwMDgtXHRcdC8qIHNrYl9mcmFnX3VucmVmKCkgaXMgbm90IG5lZWRlZCBoZXJlIGFzIHNoaW5mby1cdTAwM2Vucl9mcmFncyA9IDAuICovXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNzAzMy0vKiByZW1vdmUgbGVuIGJ5dGVzIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgc2tiICovXG5uZXQvY29yZS9za2J1ZmYuYzo3MDM0OnN0YXRpYyBpbnQgcHNrYl9jYXJ2ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1MzIgbGVuLCBnZnBfdCBnZnApXG5uZXQvY29yZS9za2J1ZmYuYy03MDM1LXtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy03MDM4LVx0aWYgKGxlbiBcdTAwM2MgaGVhZGxlbilcbm5ldC9jb3JlL3NrYnVmZi5jOjcwMzk6XHRcdHJldHVybiBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXIoc2tiLCBsZW4sIGhlYWRsZW4sIGdmcCk7XG5uZXQvY29yZS9za2J1ZmYuYy03MDQwLVx0ZWxzZVxubmV0L2NvcmUvc2tidWZmLmM6NzA0MTpcdFx0cmV0dXJuIHBza2JfY2FydmVfaW5zaWRlX25vbmxpbmVhcihza2IsIGxlbiwgaGVhZGxlbiwgZ2ZwKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTcwNDItfVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTcwNDYtICovXG5uZXQvY29yZS9za2J1ZmYuYzo3MDQ3OnN0cnVjdCBza19idWZmICpwc2tiX2V4dHJhY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZixcbm5ldC9jb3JlL3NrYnVmZi5jLTcwNDgtXHRcdFx0ICAgICBpbnQgdG9fY29weSwgZ2ZwX3QgZ2ZwKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTcwNTQtXG5uZXQvY29yZS9za2J1ZmYuYzo3MDU1Olx0aWYgKHBza2JfY2FydmUoY2xvbmUsIG9mZiwgZ2ZwKSBcdTAwM2MgMCB8fFxubmV0L2NvcmUvc2tidWZmLmMtNzA1Ni1cdCAgICBwc2tiX3RyaW0oY2xvbmUsIHRvX2NvcHkpKSB7XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNzA2MS19XG5uZXQvY29yZS9za2J1ZmYuYzo3MDYyOkVYUE9SVF9TWU1CT0wocHNrYl9leHRyYWN0KTtcbm5ldC9jb3JlL3NrYnVmZi5jLTcwNjMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDExOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNzE1CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHVuZGVyc3RhbmRpbmcgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIGBwc2tiX2V4dHJhY3RgOgoKKipUaGlua2luZyBUaHJvdWdoIGBwc2tiX2V4dHJhY3RgJiMzOTtzIFVzZXMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBwcmVzZW50ZWQgd2l0aCBgcHNrYl9leHRyYWN0YC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcyBpczogKldoYXQgZXhhY3RseSBpcyB0aGlzIHRvb2wgb3IgZnVuY3Rpb24gc3VwcG9zZWQgdG8gYmUgZG9pbmc/KiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29yZSBwdXJwb3NlLiBJcyBpdCBmb3IgcGFyc2luZyBkYXRhPyBJcyBpdCBmb3IgZXh0cmFjdGluZyBzcGVjaWZpYyBpbmZvcm1hdGlvbiBmcm9tIGEgcGFydGljdWxhciBmb3JtYXQ/IElzIGl0IHBhcnQgb2YgYSBsYXJnZXIgc3lzdGVtIG9yIHdvcmtmbG93PyBUaGUgbmFtZSBpdHNlbGYgZ2l2ZXMgYSB2YWd1ZSBoaW50LCBidXQgSSBuZWVkIHNwZWNpZmljcy4KCk15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIGdlbmVyYXRpbmcgcXVlc3Rpb25zOgoKKiAgIFdoYXQga2luZHMgb2YgaW5wdXRzIGRvZXMgaXQgYWNjZXB0PyBJcyBpdCBmaWxlLWJhc2VkLCBvciBkb2VzIGl0IHRha2UgZGF0YSBzdHJlYW1zPyBEb2VzIGl0IHdvcmsgd2l0aCBkaWZmZXJlbnQgZmlsZSBmb3JtYXRzIChlLmcuLCB0ZXh0LCBKU09OLCBYTUwsIGJpbmFyeSk/CiogICBXaGF0IG91dHB1dHMgZG9lcyBpdCBwcm9kdWNlPyBEb2VzIGl0IGdlbmVyYXRlIG5ldyBmaWxlcywgcHJpbnQgdG8gdGhlIGNvbnNvbGUsIG9yIHJldHVybiBzdHJ1Y3R1cmVkIGRhdGEgdG8gYW5vdGhlciBwcm9ncmFtPwoqICAgV2hhdCBpcyBpdHMgaW50ZW5kZWQgdXNlIGNhc2U/IElzIGl0IGEgZ2VuZXJhbC1wdXJwb3NlIGV4dHJhY3RvciBvciBkZXNpZ25lZCBmb3IgYSBzcGVjaWZpYyBkb21haW4gKGUuZy4sIGJpb2luZm9ybWF0aWNzLCBuZXR3b3JrIGFuYWx5c2lzLCBsb2cgcHJvY2Vzc2luZyk/CiogICBIb3cgaXMgaXQgaW50ZWdyYXRlZCBpbnRvIGV4aXN0aW5nIHByb2Nlc3Nlcz8gSXMgaXQgYSBzdGFuZGFsb25lIHRvb2wgb3IgcGFydCBvZiBhIGxhcmdlciBwaXBlbGluZT8KCkkmIzM5O2xsIGJlIHRoaW5raW5nIGluIHRlcm1zIG9mIGhvdyBJIGNhbiB1c2UgdGhpcyBpbiBteSBvd24gd29yayAtIHdoYXQgcHJvYmxlbXMgaXQgY2FuIHNvbHZlLiBBcmUgdGhlcmUgb3Bwb3J0dW5pdGllcyB0byB1c2UgdGhlIG91dHB1dCBvZiBgcHNrYl9leHRyYWN0YCBpbiBteSBjdXJyZW50IHByb2plY3RzPyBDYW4gSSBpbnRlZ3JhdGUgaXQgYXMgYSBjb21wb25lbnQgdG8gbWFrZSBteSB3b3JrIG1vcmUgZWZmaWNpZW50LCBvciBlbmhhbmNlIGl0PwoKTmV4dCwgSSYjMzk7bGwgZ28gYmV5b25kIHRoZSBxdWVzdGlvbnMgLSBJIHdpbGwgYmVnaW4gdG8gdmlzdWFsaXplIHRoZSBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIHRoaW5rIGFib3V0IHRoZSBjb2RlJiMzOTtzIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIGFuZCBsb29rIGZvciBkb2N1bWVudGF0aW9uLiBJIHdpbGwgYW5hbHl6ZSBpdHMgYWxnb3JpdGhtcyB0byBrbm93IHRoZSBpbnRlcm5hbCBtZWNoYW5pc20uIEkgaGF2ZSB0byBsb29rIGZvciBleGFtcGxlIHVzYWdlIGluIG9yZGVyIHRvIHNlZSBob3cgaXQgaXMgdXNlZCBpbiBhIHJlYWwgc2NlbmFyaW8uIElmIEkgaGF2ZSB0aGUgc291cmNlIGNvZGUsIEkgd2lsbCB1c2UgdGhhdCB0byBmb3JtIG15IHVuZGVyc3RhbmRpbmcuIEkgaGF2ZSB0byBzZWUgaG93IGl0IGNhbiBiZSB1c2VkIGZvciBteSBhcmVhIG9mIGV4cGVydGlzZS4KCkluIGVzc2VuY2UsIEkmIzM5O20gdHJ5aW5nIHRvIHF1aWNrbHkgYnVpbGQgYSBtZW50YWwgbW9kZWwgb2YgYHBza2JfZXh0cmFjdGAgYW5kIGl0cyByb2xlIHdpdGhpbiBhIGJyb2FkZXIgY29udGV4dC4gVGhhdCB3YXksIEkgY2FuIGRldGVybWluZSBpdHMgcmVsZXZhbmNlIGFuZCBwb3RlbnRpYWwgdXNlZnVsbmVzcyB0byBtZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTE6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHNrYl9leHRyYWN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYz03MDM0PXN0YXRpYyBpbnQgcHNrYl9jYXJ2ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1MzIgbGVuLCBnZnBfdCBnZnApXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNzA0Ni0gKi9cbm5ldC9jb3JlL3NrYnVmZi5jOjcwNDc6c3RydWN0IHNrX2J1ZmYgKnBza2JfZXh0cmFjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2ZmLFxubmV0L2NvcmUvc2tidWZmLmMtNzA0OC1cdFx0XHQgICAgIGludCB0b19jb3B5LCBnZnBfdCBnZnApXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNzA2MS19XG5uZXQvY29yZS9za2J1ZmYuYzo3MDYyOkVYUE9SVF9TWU1CT0wocHNrYl9leHRyYWN0KTtcbm5ldC9jb3JlL3NrYnVmZi5jLTcwNjMtXG4tLVxubmV0L3Jkcy90Y3BfcmVjdi5jPTE1NT1zdGF0aWMgaW50IHJkc190Y3BfZGF0YV9yZWN2KHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9yZHMvdGNwX3JlY3YuYy0yMTgtXG5uZXQvcmRzL3RjcF9yZWN2LmM6MjE5Olx0XHRcdGNsb25lID0gcHNrYl9leHRyYWN0KHNrYiwgb2Zmc2V0LCB0b19jb3B5LCBhcmctXHUwMDNlZ2ZwKTtcbm5ldC9yZHMvdGNwX3JlY3YuYy0yMjAtXHRcdFx0aWYgKCFjbG9uZSkge1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz01MzM9aXB0ZnNfcHNrYl9hZGRfZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKnRwbCwgc3RydWN0IGlwdGZzX3NrYl9mcmFnX3dhbGsgKndhbGssXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTU2MS0vKipcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo1NjI6ICogaXB0ZnNfcHNrYl9leHRyYWN0X3NlcSgpIC0gQ3JlYXRlIGFuZCBsb2FkIGRhdGEgaW50byBhIG5ldyBza19idWZmLlxubmV0L3hmcm0veGZybV9pcHRmcy5jLTU2My0gKiBAc2tibGVuOiB0aGUgdG90YWwgZGF0YSBzaXplIGZvciBgc2tiYC5cbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9NTc3PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NTc4OmlwdGZzX3Bza2JfZXh0cmFjdF9zZXEodTMyIHNrYmxlbiwgc3RydWN0IHNrYl9zZXFfc3RhdGUgKnN0LCB1MzIgb2ZmLCBpbnQgbGVuKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTU3OS17XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTk0Mz1zdGF0aWMgYm9vbCBfX2lucHV0X3Byb2Nlc3NfcGF5bG9hZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgdTMyIGRhdGEsXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTExMzEtXHRcdFx0XHRcdFx0XHQgc2tic2VxLCBpcGhsZW4pKSkge1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjExMzI6XHRcdFx0XHRza2IgPSBpcHRmc19wc2tiX2V4dHJhY3Rfc2VxKGlwbGVuLCBza2JzZXEsIGRhdGEsIGNhcHR1cmVsZW4pO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTExMzMtXHRcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzkyMAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgbmV0d29ya2luZyBjb3JlIHNpdHVhdGlvbi4KCioqTmV0d29yayBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gemVybyBpbiBvbiB3aGF0IEtjb25maWcgb3B0aW9ucyBzcGVjaWZpY2FsbHkgcGVydGFpbiB0byB0aGUgbmV0d29ya2luZyBjb3JlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW52ZXN0aWdhdGUgZnVuY3Rpb25zIGxpa2UgYHBza2JfZXhwYW5kX2hlYWRgIGFuZCB0aGUgZmlsZSBgc2tidWZmLmNgLiBJIGJlbGlldmUgdGhlc2UgYXJlIGZ1bmRhbWVudGFsIHBpZWNlcywgc3Ryb25nbHkgc3VnZ2VzdGluZyBhIGNvbm5lY3Rpb24gdG8gdGhlIHByaW1hcnkgYENPTkZJR19ORVRgIG9wdGlvbi4gVG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhlc2Ugc3VzcGljaW9ucy4gSSBzaG91bGQgZXhhbWluZSB0aGUgYG5ldC9jb3JlL01ha2VmaWxlYCBhbmQgYG5ldC9LY29uZmlnYCBmaWxlcyBkaXJlY3RseSB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbmZpZ3VyYXRpb25zIGludm9sdmVkLiBUaGlzIGxldmVsIG9mIGRldGFpbCBpcyBjcnVjaWFsIGZvciBhbnkgbW9kaWZpY2F0aW9ucyBvciBkZWVwZXIgYW5hbHlzaXMgd2l0aGluIHRoZSBuZXR3b3JraW5nIHN0YWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza2J1ZmYubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGUtNS1cbm5ldC9jb3JlL01ha2VmaWxlOjY6b2JqLXkgOj0gc29jay5vIHNrYnVmZi5vIGRhdGFncmFtLm8gc3RyZWFtLm8gc2NtLm8gXFxcbm5ldC9jb3JlL01ha2VmaWxlLTctXHQgZ2VuX3N0YXRzLm8gZ2VuX2VzdGltYXRvci5vIG5ldF9uYW1lc3BhY2UubyBzZWN1cmVfc2VxLm8gXFxcbi0tXG5uZXQvY29yZS9mbG93X2Rpc3NlY3Rvci5jPTEwMzM9c3RhdGljIGJvb2wgaXNfcHBwb2Vfc2VzX2hkcl92YWxpZChjb25zdCBzdHJ1Y3QgcHBwb2VfaGRyICpoZHIpXG4tLVxubmV0L2NvcmUvZmxvd19kaXNzZWN0b3IuYy0xMDUxLSAqIFRoZSBmdW5jdGlvbiB3aWxsIHRyeSB0byByZXRyaWV2ZSBpbmRpdmlkdWFsIGtleXMgaW50byB0YXJnZXQgc3BlY2lmaWVkXG5uZXQvY29yZS9mbG93X2Rpc3NlY3Rvci5jOjEwNTI6ICogYnkgZmxvd19kaXNzZWN0b3IgZnJvbSBlaXRoZXIgdGhlIHNrYnVmZiBvciBhIHJhdyBidWZmZXIgc3BlY2lmaWVkIGJ5IHRoZVxubmV0L2NvcmUvZmxvd19kaXNzZWN0b3IuYy0xMDUzLSAqIHJlc3QgcGFyYW1ldGVycy5cbi0tXG5uZXQvaXB2Ni9jYWxpcHNvLmM9MTI0Nj1zdGF0aWMgdm9pZCBjYWxpcHNvX3JlcV9kZWxhdHRyKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbi0tXG5uZXQvaXB2Ni9jYWxpcHNvLmMtMTI3OC0vKipcbm5ldC9pcHY2L2NhbGlwc28uYzoxMjc5OiAqIGNhbGlwc29fc2tidWZmX29wdHB0ciAtIEZpbmQgdGhlIENBTElQU08gb3B0aW9uIGluIHRoZSBwYWNrZXRcbm5ldC9pcHY2L2NhbGlwc28uYy0xMjgwLSAqIEBza2I6IHRoZSBwYWNrZXRcbi0tXG5uZXQvaXB2Ni9jYWxpcHNvLmMtMTI4Ni0gKi9cbm5ldC9pcHY2L2NhbGlwc28uYzoxMjg3OnN0YXRpYyB1bnNpZ25lZCBjaGFyICpjYWxpcHNvX3NrYnVmZl9vcHRwdHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY2L2NhbGlwc28uYy0xMjg4LXtcbi0tXG5uZXQvaXB2Ni9jYWxpcHNvLmM9MTM4OT1zdGF0aWMgaW50IGNhbGlwc29fc2tidWZmX2RlbGF0dHIoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9jYWxpcHNvLmMtMTM5NS1cbm5ldC9pcHY2L2NhbGlwc28uYzoxMzk2Olx0aWYgKCFjYWxpcHNvX3NrYnVmZl9vcHRwdHIoc2tiKSlcbm5ldC9pcHY2L2NhbGlwc28uYy0xMzk3LVx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvaXB2Ni9jYWxpcHNvLmM9MTQzNj1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldGxibF9jYWxpcHNvX29wcyBvcHMgPSB7XG4tLVxubmV0L2lwdjYvY2FsaXBzby5jLTE0NDgtXHQub3B0X2dldGF0dHIgICAgICA9IGNhbGlwc29fb3B0X2dldGF0dHIsXG5uZXQvaXB2Ni9jYWxpcHNvLmM6MTQ0OTpcdC5za2J1ZmZfb3B0cHRyICAgID0gY2FsaXBzb19za2J1ZmZfb3B0cHRyLFxubmV0L2lwdjYvY2FsaXBzby5jLTE0NTAtXHQuc2tidWZmX3NldGF0dHIgICA9IGNhbGlwc29fc2tidWZmX3NldGF0dHIsXG4tLVxubmV0L25ldGxhYmVsL25ldGxhYmVsX2NhbGlwc28uYz02MjY9dW5zaWduZWQgY2hhciAqY2FsaXBzb19vcHRwdHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbmV0bGFiZWwvbmV0bGFiZWxfY2FsaXBzby5jLTYzMS1cdGlmIChvcHMpXG5uZXQvbmV0bGFiZWwvbmV0bGFiZWxfY2FsaXBzby5jOjYzMjpcdFx0cmV0X3ZhbCA9IG9wcy1cdTAwM2Vza2J1ZmZfb3B0cHRyKHNrYik7XG5uZXQvbmV0bGFiZWwvbmV0bGFiZWxfY2FsaXBzby5jLTYzMy1cdHJldHVybiByZXRfdmFsO1xuLS1cbm5ldC9yeHJwYy9NYWtlZmlsZT04PXJ4cnBjLXkgOj0gXFxcbi0tXG5uZXQvcnhycGMvTWFrZWZpbGUtMzUtXHRzZXJ2ZXJfa2V5Lm8gXFxcbm5ldC9yeHJwYy9NYWtlZmlsZTozNjpcdHNrYnVmZi5vIFxcXG5uZXQvcnhycGMvTWFrZWZpbGUtMzctXHR0eGJ1Zi5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDExOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0OTg3CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIE5ldHdvcmsgQ29yZSBCdWlsZCBQcm9jZXNzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYG5ldC9jb3JlL01ha2VmaWxlYCBhbmQgaXQmIzM5O3MgY2xlYXIgdGhhdCBgc2tidWZmLm9gIGdldHMgYnVpbHQgYmFzZWQgb24gdGhlIGBDT05GSUdfTkVUYCBvcHRpb24uIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LCBhIHNvbGlkIGZvdW5kYXRpb25hbCBkZXBlbmRlbmN5LiBOb3csIHRvIGdldCBhIGJpZ2dlciBwaWN0dXJlIG9mIGhvdyB0aGlzIGVudGlyZSBuZXR3b3JraW5nIHN1YnN5c3RlbSBpcyBwdXQgdG9nZXRoZXIsIEkgbmVlZCB0byBjaGVjayBvdXQgdGhlIHBhcmVudCBgbmV0L01ha2VmaWxlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBDT05GSUdfTkVUYCBpdHNlbGYgaXMgZGVmaW5lZCBhbmQgdXNlZCwgYW5kIGhvdyBldmVyeXRoaW5nIGluIHRoZSBgbmV0YCBkaXJlY3RvcnkgaXMgb3JjaGVzdHJhdGVkIGZyb20gYSBidWlsZCBwZXJzcGVjdGl2ZS4gR290dGEgdHJhY2UgdGhpcyB0aHJvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IG5ldHdvcmtpbmcuXG4gICA0Olx0I1xuICAgNTpcdCMgMiBTZXAgMjAwMCwgQ2hyaXN0b3BoIEhlbGx3aWcgXHUwMDNjaGNoQGluZnJhZGVhZC5vcmdcdTAwM2VcbiAgIDY6XHQjIFJld3JpdHRlbiB0byB1c2UgbGlzdHMgaW5zdGVhZCBvZiBpZi1zdGF0ZW1lbnRzLlxuICAgNzpcdCNcbiAgIDg6XHRcbiAgIDk6XHRvYmoteVx0XHRcdFx0Oj0gZGV2cmVzLm8gc29ja2V0Lm8gY29yZS9cbiAgMTA6XHRcbiAgMTE6XHRvYmotJChDT05GSUdfQ09NUEFUKVx0XHQmIzQzOz0gY29tcGF0Lm9cbiAgMTI6XHRcbiAgMTM6XHQjIExMQyBoYXMgdG8gYmUgbGlua2VkIGJlZm9yZSB0aGUgZmlsZXMgaW4gbmV0LzgwMi9cbiAgMTQ6XHRvYmotJChDT05GSUdfTExDKVx0XHQmIzQzOz0gbGxjL1xuICAxNTpcdG9iai15XHRcdFx0XHQmIzQzOz0gZXRoZXJuZXQvIDgwMi8gc2NoZWQvIG5ldGxpbmsvIGJwZi8gZXRodG9vbC9cbiAgMTY6XHRvYmotJChDT05GSUdfTkVURklMVEVSKVx0XHQmIzQzOz0gbmV0ZmlsdGVyL1xuICAxNzpcdG9iai0kKENPTkZJR19JTkVUKVx0XHQmIzQzOz0gaXB2NC9cbiAgMTg6XHRvYmotJChDT05GSUdfVExTKVx0XHQmIzQzOz0gdGxzL1xuICAxOTpcdG9iai0kKENPTkZJR19YRlJNKVx0XHQmIzQzOz0geGZybS9cbiAgMjA6XHRvYmotJChDT05GSUdfVU5JWClcdFx0JiM0Mzs9IHVuaXgvXG4gIDIxOlx0b2JqLSQoQ09ORklHX0lORVRfUFNQKVx0XHQmIzQzOz0gcHNwL1xuICAyMjpcdG9iai15XHRcdFx0XHQmIzQzOz0gaXB2Ni9cbiAgMjM6XHRvYmotJChDT05GSUdfUEFDS0VUKVx0XHQmIzQzOz0gcGFja2V0L1xuICAyNDpcdG9iai0kKENPTkZJR19ORVRfS0VZKVx0XHQmIzQzOz0ga2V5L1xuICAyNTpcdG9iai0kKENPTkZJR19CUklER0UpXHRcdCYjNDM7PSBicmlkZ2UvXG4gIDI2Olx0b2JqLSQoQ09ORklHX05FVF9ERVZMSU5LKVx0JiM0Mzs9IGRldmxpbmsvXG4gIDI3Olx0b2JqLXlcdFx0XHRcdCYjNDM7PSBkc2EvXG4gIDI4Olx0b2JqLSQoQ09ORklHX1gyNSlcdFx0JiM0Mzs9IHgyNS9cbiAgMjk6XHRvYmotJChDT05GSUdfTEFQQilcdFx0JiM0Mzs9IGxhcGIvXG4gIDMwOlx0b2JqLSQoQ09ORklHX0NBTilcdFx0JiM0Mzs9IGNhbi9cbiAgMzE6XHRvYmotJChDT05GSUdfQlQpXHRcdCYjNDM7PSBibHVldG9vdGgvXG4gIDMyOlx0b2JqLSQoQ09ORklHX1NVTlJQQylcdFx0JiM0Mzs9IHN1bnJwYy9cbiAgMzM6XHRvYmotJChDT05GSUdfQUZfUlhSUEMpXHRcdCYjNDM7PSByeHJwYy9cbiAgMzQ6XHRvYmotJChDT05GSUdfQUZfS0NNKVx0XHQmIzQzOz0ga2NtL1xuICAzNTpcdG9iai0kKENPTkZJR19TVFJFQU1fUEFSU0VSKVx0JiM0Mzs9IHN0cnBhcnNlci9cbiAgMzY6XHRvYmotJChDT05GSUdfQVRNKVx0XHQmIzQzOz0gYXRtL1xuICAzNzpcdG9iai0kKENPTkZJR19MMlRQKVx0XHQmIzQzOz0gbDJ0cC9cbiAgMzg6XHRvYmotJChDT05GSUdfUEhPTkVUKVx0XHQmIzQzOz0gcGhvbmV0L1xuICAzOTpcdGlmbmVxICgkKENPTkZJR19WTEFOXzgwMjFRKSwpXG4gIDQwOlx0b2JqLXlcdFx0XHRcdCYjNDM7PSA4MDIxcS9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTE6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU4ODcKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHRob3VnaCBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgdGhlIERlcGVuZGVuY3kgb2Ygc2tidWZmLmMgQ29tcGlsYXRpb24qKgoKT2theSwgc28gYG5ldC9jb3JlL3NrYnVmZi5jYCBpcyBiZWluZyBjb21waWxlZCwgd2hpY2ggaW1wbGllcyBgQ09ORklHX05FVGAgaXMgZW5hYmxlZCwgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoaXMuIFRoZSBsb2dpY2FsIG5leHQgc3RlcCBpcyB0byB0cmFjZSB0aGF0IGRlcGVuZGVuY3kgYmFjayB0byBpdHMgc291cmNlLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBgbmV0L0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbSBhcmUgZGVmaW5lZC4gSSYjMzk7bSBhc3N1bWluZyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIHJlbGV2YW50IGBjb25maWdgIHN0YXRlbWVudCwgcHJvYmFibHkgc29tZXRoaW5nIGxpa2UgYGNvbmZpZyBORVRgIG9yIHNpbWlsYXIgdGhhdCBlbmFibGVzIHRoZSBlbnRpcmUgbmV0d29ya2luZyBzdGFjay4gVGhlbiBJIGNhbiBjb25maXJtIGlmIHRoZXJlJiMzOTtzIGEgZGlyZWN0IG9yIGluZGlyZWN0IHJlbGF0aW9uc2hpcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTE6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVudWNvbmZpZyBORVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC85cC9LY29uZmlnLTUtXG5uZXQvOXAvS2NvbmZpZzo2Om1lbnVjb25maWcgTkVUXzlQXG5uZXQvOXAvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7UGxhbiA5IFJlc291cmNlIFNoYXJpbmcgU3VwcG9ydCAoOVAyMDAwKVwmIzM0O1xuLS1cbm5ldC9LY29uZmlnLTUtXG5uZXQvS2NvbmZpZzo2Om1lbnVjb25maWcgTkVUXG5uZXQvS2NvbmZpZy03LVx0Ym9vbCBcJiMzNDtOZXR3b3JraW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvS2NvbmZpZz0xNTQ9Y29uZmlnIE5FVFdPUktfUEhZX1RJTUVTVEFNUElOR1xuLS1cbm5ldC9LY29uZmlnLTE2NC1cbm5ldC9LY29uZmlnOjE2NTptZW51Y29uZmlnIE5FVEZJTFRFUlxubmV0L0tjb25maWctMTY2LVx0Ym9vbCBcJiMzNDtOZXR3b3JrIHBhY2tldCBmaWx0ZXJpbmcgZnJhbWV3b3JrIChOZXRmaWx0ZXIpXCYjMzQ7XG4tLVxubmV0L2RzYS9LY29uZmlnLTItXG5uZXQvZHNhL0tjb25maWc6MzptZW51Y29uZmlnIE5FVF9EU0Fcbm5ldC9kc2EvS2NvbmZpZy00LVx0dHJpc3RhdGUgXCYjMzQ7RGlzdHJpYnV0ZWQgU3dpdGNoIEFyY2hpdGVjdHVyZVwmIzM0O1xuLS1cbm5ldC9pZmUvS2NvbmZpZy01LVxubmV0L2lmZS9LY29uZmlnOjY6bWVudWNvbmZpZyBORVRfSUZFXG5uZXQvaWZlL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O0ludGVyLUZFIGJhc2VkIG9uIElFVEYgRm9yQ0VTIEludGVyRkUgTEZCXCYjMzQ7XG4tLVxubmV0L25zaC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvbnNoL0tjb25maWc6MjptZW51Y29uZmlnIE5FVF9OU0hcbm5ldC9uc2gvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7TmV0d29yayBTZXJ2aWNlIEhlYWRlciAoTlNIKSBwcm90b2NvbFwmIzM0O1xuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTUtXG5uZXQvc2NoZWQvS2NvbmZpZzo2Om1lbnVjb25maWcgTkVUX1NDSEVEXG5uZXQvc2NoZWQvS2NvbmZpZy03LVx0Ym9vbCBcJiMzNDtRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZz00MTg9Y29uZmlnIE5FVF9TQ0hfRFVBTFBJMlxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTQyOS1cbm5ldC9zY2hlZC9LY29uZmlnOjQzMDptZW51Y29uZmlnIE5FVF9TQ0hfREVGQVVMVFxubmV0L3NjaGVkL0tjb25maWctNDMxLVx0Ym9vbCBcJiMzNDtBbGxvdyBvdmVycmlkZSBkZWZhdWx0IHF1ZXVlIGRpc2NpcGxpbmVcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTE6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY1NzgKCQkJCQkJCW91dHB1dDogMTQ4CgkJCQkJCQl0aG91Z2h0czogNTg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFNLQiBNZW1vcnkgTWFuYWdlbWVudCBDaGFuZ2VzKioKCk9rYXksIGxldCYjMzk7cyBuYWlsIGRvd24gd2hhdCB3ZSYjMzk7cmUgZ29pbmcgdG8gZm9jdXMgb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBpbXBvcnRhbnQgc3ltYm9scyBmb3IgZnV6emluZywgYW5kIGJhc2VkIG9uIHRoZSBwYXRjaCwgaXQgc2VlbXMgbGlrZSBgcHNrYl9leHBhbmRfaGVhZGAgYW5kIGBwc2tiX2V4dHJhY3RgIGFyZSBrZXkuIEkgc2VlIHRoZXkmIzM5O3JlIGJvdGggZXhwb3J0ZWQgc3ltYm9scywgYW5kIGBwc2tiX2V4dHJhY3RgIGluZGlyZWN0bHkgY2FsbHMgYHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcmAuCgpXYWl0IGEgbWludXRlLCBhcmUgdGhvc2UgYHNrYl9kYXRhcmVmX2JpYXNgIGFuZCBgc2tiX2RhdGFfaXNfc2hhcmVkYCBmdW5jdGlvbnMgaW5saW5lZD8gWWVzLCB0aGV5JiMzOTtyZSBkZWZpbmVkIGFzIGBzdGF0aWMgaW5saW5lYCBpbiBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAsIHNvIHRoZXkgYXJlLiBBbmQgYHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcmAgaXMgYSBzdGF0aWMgZnVuY3Rpb24gaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgYWxzbyByZW1lbWJlciB0aGF0IGBwc2tiX2V4cGFuZF9oZWFkYCBpcyBhbiBBUEkgZW50cnlwb2ludC4KCk5vdywgbGV0IG1lIG1ha2Ugc3VyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IHVzZWQuIEEgcXVpY2sgY2hlY2sgc2hvd3MgdGhhdCBgcHNrYl9leHBhbmRfaGVhZGAgaXMgcHJldHR5IHViaXF1aXRvdXMsIGJlaW5nIHVzZWQgaW4gZnVuY3Rpb25zIGxpa2UgYHNrYl91bmNsb25lYCwgYHNrYl9yZWFsbG9jX2hlYWRyb29tYCwgYHNrYl9jb3dfZGF0YWAsIGFuZCBgX19fcHNrYl90cmltYC4gVGhhdCBjb25maXJtcyBteSBpbml0aWFsIGh1bmNoLiBTbywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGUgY29yZSBgRm9jdXNTeW1ib2xzYCBhcmUgYFsmIzM0O3Bza2JfZXhwYW5kX2hlYWQmIzM0OywgJiMzNDtwc2tiX2V4dHJhY3QmIzM0O11gLgoKUmVnYXJkaW5nIGBFbmFibGVDb25maWdzYCwgdGhlIHJlbGV2YW50IGZlYXR1cmUgc2V0IGlzIGRlZmluaXRlbHkgYE5FVGAuCgpPa2F5LCBsZXQmIzM5O3Mgc3VtbWFyaXplIHRoZSBgc2V0LXJlc3VsdHNgIHBhcmFtZXRlcnMuIFdlJiMzOTtyZSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZ2AgdG8gYHRydWVgIOKAkyBpdOKAmXMgYSBjcml0aWNhbCBjaGFuZ2UuIFRoZSBgUmVhc29uaW5nYCB3aWxsIGhpZ2hsaWdodCB0aGUgZmFjdCB0aGF0IHRoZSBwYXRjaCByZXBsYWNlcyBgc2tiX2Nsb25lZChza2IpYCB3aXRoIGBza2JfZGF0YV9pc19zaGFyZWQoc2tiKWAgaW4gYHBza2JfZXhwYW5kX2hlYWRgIGFuZCBgcHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyYCBhbmQgaW50cm9kdWNlcyBoZWxwZXIgZnVuY3Rpb25zIGBza2JfZGF0YXJlZl9iaWFzYCBhbmQgYHNrYl9kYXRhX2lzX3NoYXJlZGAgaW4gYGluY2x1ZGUvbGludXgvc2tidWZmLmhgIGZvciBoYW5kbGluZyBgc2tiLSZndDtub2hkcmAuIFRoaXMgY29yZSBsb2dpYyBzaGlmdCBpbXBhY3RzIFNLQiBtZW1vcnkgbWFuYWdlbWVudCwgY2xvbmluZywgYW5kIHVuc2hhcmluZyB0aHJvdWdob3V0IHRoZSBuZXR3b3JraW5nIHN0YWNrLiBUaGVyZWZvcmUsIHRoZSBjaGFuZ2UgaXMgcmVhY2hhYmxlLCBzaWduaWZpY2FudCwgYW5kIGRlc2VydmVzIGZvY3VzZWQgZnV6emluZy4gRmluYWxseSwgdGhlIGBGb2N1c1N5bWJvbHNgIHdpbGwgYmUgYFsmIzM0O3Bza2JfZXhwYW5kX2hlYWQmIzM0OywgJiMzNDtwc2tiX2V4dHJhY3QmIzM0O11gLCBhbmQgdGhlIGBFbmFibGVDb25maWdzYCB3aWxsIGJlIGBbJiMzNDtORVQmIzM0O11gLgoKTGV0JiMzOTtzIGRvIHRoaXMuIEkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cHNrYl9leHBhbmRfaGVhZCYjMzQ7LAogICAgJiMzNDtwc2tiX2V4dHJhY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBgc2tiX2RhdGFyZWZfYmlhcygpYCBhbmQgYHNrYl9kYXRhX2lzX3NoYXJlZCgpYCB0byBmaXggZGF0YSBzaGFyaW5nIGRldGVjdGlvbiBmb3Igc2tfYnVmZnMgd2hlbiBgc2tiLVx1MDAzZW5vaGRyYCBpcyBzZXQsIHVwZGF0aW5nIGBwc2tiX2V4cGFuZF9oZWFkYCBhbmQgYHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcmAgdG8gdXNlIGBza2JfZGF0YV9pc19zaGFyZWRgIHJhdGhlciB0aGFuIGBza2JfY2xvbmVkYC4gVGhpcyBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgYnVmZmVyIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCByZWZlcmVuY2UgY291bnRpbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Bza2JfZXhwYW5kX2hlYWQmIzM0OywKICAgICYjMzQ7cHNrYl9leHRyYWN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYHNrYl9kYXRhcmVmX2JpYXMoKWAgYW5kIGBza2JfZGF0YV9pc19zaGFyZWQoKWAgdG8gZml4IGRhdGEgc2hhcmluZyBkZXRlY3Rpb24gZm9yIHNrX2J1ZmZzIHdoZW4gYHNrYi1cdTAwM2Vub2hkcmAgaXMgc2V0LCB1cGRhdGluZyBgcHNrYl9leHBhbmRfaGVhZGAgYW5kIGBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXJgIHRvIHVzZSBgc2tiX2RhdGFfaXNfc2hhcmVkYCByYXRoZXIgdGhhbiBgc2tiX2Nsb25lZGAuIFRoaXMgbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGJ1ZmZlciBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMToyOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDExOjI5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBgc2tiX2RhdGFyZWZfYmlhcygpYCBhbmQgYHNrYl9kYXRhX2lzX3NoYXJlZCgpYCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgZGF0YSBidWZmZXIgLyBzaGFyZWQgaW5mbyBvZiBhbiBza19idWZmIGlzIGFjdGl2ZWx5IHNoYXJlZCBieSBvdGhlciBjbG9uZXMgZHVyaW5nIGhlYWQgcmVhbGxvY2F0aW9uIChgcHNrYl9leHBhbmRfaGVhZGAgYW5kIGBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXJgKS5cblxuS01TQU4gdnMgS0FTQU4gYW5hbHlzaXM6XG4tIEtNU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBrZXJuZWwgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMsIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBkYXRhIGxlbmd0aCAvIGJvdW5kcyBjYWxjdWxhdGlvbnMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBidWZmZXIgbWVtb3J5LiBUaGUgZmllbGRzIGFjY2Vzc2VkIChgc2tiLVx1MDAzZWNsb25lZGAsIGBza2ItXHUwMDNlbm9oZHJgLCBhbmQgYHNoaW5mby1cdTAwM2VkYXRhcmVmYCkgYXJlIHdlbGwtZGVmaW5lZCBhbmQgaW5pdGlhbGl6ZWQgc2tiIG1ldGFkYXRhLlxuLSBLQVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoZXNlIHJlZmNvdW50IGFuZCBzaGFyaW5nIGNoZWNrIG1vZGlmaWNhdGlvbnMgcmVsYXRlIHRvIHNrYiBkYXRhIG93bmVyc2hpcCwgc3VjaCBhcyBwcmVtYXR1cmUgaGVhZCBmcmVlaW5nIG9yIGltcHJvcGVyIGZyYWcgcmVmY291bnRpbmcgbGVhZGluZyB0byBVc2UtQWZ0ZXItRnJlZSAoVUFGKSBvciBEb3VibGUtRnJlZSBlcnJvcnMuIFRoZXNlIG1lbW9yeSBzYWZldHkgaXNzdWVzIGFyZSBkaXJlY3RseSBkZXRlY3RlZCBieSBLQVNBTi5cblxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDYzYjE0NjBhMDQyMDY3MDIzNTE3NzY1Mzc2NWJhMzNhMDQwOWU5MDgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAxMToyNjozMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2tidWZmLmggYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCmluZGV4IDQyMWY2ZmM0NTQ1MTEuLmVmZWVmMTQ4ZTFiYTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2tidWZmLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaApAQCAtMTI5NSw2ICYjNDM7MTI5NSwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2tiX3VucmVmKHN0cnVjdCBza19idWZmICpza2IpCiAJcmV0dXJuIHRydWU7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGludCBza2JfZGF0YXJlZl9iaWFzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7ewomIzQzOwlyZXR1cm4gc2tiLSZndDtub2hkciA/ICgxICZsdDsmbHQ7IFNLQl9EQVRBUkVGX1NISUZUKSAmIzQzOyAxIDogMTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIGJvb2wgc2tiX2RhdGFfdW5yZWYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgIHN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKnNoaW5mbykKIHsKQEAgLTEzMDMsNyAmIzQzOzEzMDgsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2tiX2RhdGFfdW5yZWYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlpZiAoIXNrYi0mZ3Q7Y2xvbmVkKQogCQlyZXR1cm4gdHJ1ZTsKIAotCWJpYXMgPSBza2ItJmd0O25vaGRyID8gKDEgJmx0OyZsdDsgU0tCX0RBVEFSRUZfU0hJRlQpICYjNDM7IDEgOiAxOwomIzQzOwliaWFzID0gc2tiX2RhdGFyZWZfYmlhcyhza2IpOwogCiAJaWYgKGF0b21pY19yZWFkKCZhbXA7c2hpbmZvLSZndDtkYXRhcmVmKSA9PSBiaWFzKQogCQlzbXBfcm1iKCk7CkBAIC0yMDE5LDYgJiM0MzsyMDI0LDEyIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnNrYl9nZXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKICAqIElmIHVzZXJzID09IDEsIHdlIGFyZSB0aGUgb25seSBvd25lciBhbmQgY2FuIGF2b2lkIHJlZHVuZGFudCBhdG9taWMgY2hhbmdlcy4KICAqLwogCiYjNDM7c3RhdGljIGlubGluZSBib29sIHNrYl9kYXRhX2lzX3NoYXJlZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJcmV0dXJuIHNrYi0mZ3Q7Y2xvbmVkICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIGF0b21pY19yZWFkKCZhbXA7c2tiX3NoaW5mbyhza2IpLSZndDtkYXRhcmVmKSAhPSBza2JfZGF0YXJlZl9iaWFzKHNrYik7CiYjNDM7fQomIzQzOwogLyoqCiAgKglza2JfY2xvbmVkIC0gaXMgdGhlIGJ1ZmZlciBhIGNsb25lCiAgKglAc2tiOiBidWZmZXIgdG8gY2hlY2sKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmMKaW5kZXggOTY2YWYzYmVlZDk0ZC4uZjRjMDY0NWY5OGQzZiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc2tidWZmLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc2tidWZmLmMKQEAgLTIzMzEsNyAmIzQzOzIzMzEsNyBAQCBpbnQgcHNrYl9leHBhbmRfaGVhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmhlYWQsIGludCBudGFpbCwKIAkgKiBpcyBub3Qgd2UgY2FuIGp1c3QgZHJvcCB0aGUgb2xkIGhlYWQgYW5kIGxldCB0aGUgZXhpc3RpbmcgcmVmY291bnQKIAkgKiBiZSBzaW5jZSBhbGwgd2UgZGlkIGlzIHJlbG9jYXRlIHRoZSB2YWx1ZXMKIAkgKi8KLQlpZiAoc2tiX2Nsb25lZChza2IpKSB7CiYjNDM7CWlmIChza2JfZGF0YV9pc19zaGFyZWQoc2tiKSkgewogCQlpZiAoc2tiX29ycGhhbl9mcmFncyhza2IsIGdmcF9tYXNrKSkKIAkJCWdvdG8gbm9mcmFnczsKIAkJaWYgKHNrYl96Y29weShza2IpKQpAQCAtNjg1NSw3ICYjNDM7Njg1NSw3IEBAIHN0YXRpYyBpbnQgcHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHUzMiBvZmYsCiAJICAgICAgIHNrYl9zaGluZm8oc2tiKSwKIAkgICAgICAgb2Zmc2V0b2Yoc3RydWN0IHNrYl9zaGFyZWRfaW5mbywKIAkJCWZyYWdzW3NrYl9zaGluZm8oc2tiKS0mZ3Q7bnJfZnJhZ3NdKSk7Ci0JaWYgKHNrYl9jbG9uZWQoc2tiKSkgewomIzQzOwlpZiAoc2tiX2RhdGFfaXNfc2hhcmVkKHNrYikpIHsKIAkJLyogZHJvcCB0aGUgb2xkIGhlYWQgZ3JhY2VmdWxseSAqLwogCQlpZiAoc2tiX29ycGhhbl9mcmFncyhza2IsIGdmcF9tYXNrKSkgewogCQkJc2tiX2tmcmVlX2hlYWQoZGF0YSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzkyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTI2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBFdmFsdWF0aW9uIGZvciBTS0IgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBzZXJpZXMsIHRvdWNoaW5nIGBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oYCBhbmQgYG5ldC9jb3JlL3NrYnVmZi5jYCwgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLCBvciBpZiBzdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50LiBJIG5lZWQgdG8gYXBwbHkgYSBzeXN0ZW1hdGljIGFwcHJvYWNoIGJhc2VkIG9uIHRob3NlIGNyaXRlcmlhLgoKRmlyc3QsIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIG9mIHRoZSBydWxlcy4gVGhlIHByaW1hcnkgY29uY2VybiBmb3IgS01TQU4gaXMgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIHBhcnRpY3VsYXJseSB3aGVuIGl0IGNvbWVzIHRvIGRhdGEgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlcnNwYWNlIG9yIHdoZW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW5mbHVlbmNlIGNvbnRyb2wgZmxvdy4gSSYjMzk7bSBhbHNvIGxvb2tpbmcgZm9yIGFueSBhbGxvY2F0aW9ucyBvciBpbml0aWFsaXphdGlvbnMgb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlci4gQ29udmVyc2VseSwgaWYgaXQmIzM5O3MgcHJpbWFyaWx5IGFib3V0IG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvdmVyZmxvd3MsIE5VTEwgZGVyZWZlcmVuY2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLCBLQVNBTiBpcyBsaWtlbHkgdGhlIHJpZ2h0IHRvb2wuCgpOb3csIGxldCYjMzk7cyBhbmFseXplIHRoZSBwYXRjaC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gaW52b2x2ZSBzb21lIGNoYW5nZXMgcmVsYXRlZCB0byBgc2tfYnVmZmAgKHNvY2tldCBidWZmZXIpIHJlZmVyZW5jZSBjb3VudGluZywgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiBkYXRhIHNoYXJpbmcgYW5kIGNsb25pbmcuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgYHNrYl9kYXRhcmVmX2JpYXNgIGZ1bmN0aW9uIGFuZCBgc2tiX2RhdGFfaXNfc2hhcmVkYCBmdW5jdGlvbi4gSXQgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byBvcHRpbWl6YXRpb25zIGFuZCByZWZhY3RvcmluZ3MgYXJvdW5kIGhvdyBTS0JzIGFyZSBoYW5kbGVkIGFuZCBjbG9uZWQuCgpTcGVjaWZpY2FsbHksIEkgc2VlIHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzIGBwc2tiX2V4cGFuZF9oZWFkYCBhbmQgYHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcmAuIEJvdGggYXJlIHJlbGF0ZWQgdG8gbW9kaWZ5aW5nIFNLQiBoZWFkZXJzL2RhdGEsIHBhcnRpY3VsYXJseSBpbiBjYXNlcyBvZiBjbG9uaW5nIGFuZCBzaGFyaW5nLiBHaXZlbiB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVsYXRlZCB0byBtZW1vcnkgbWFuaXB1bGF0aW9uIHdpdGhpbiB0aGUgU0tCIHN0cnVjdHVyZSBpdHNlbGYsIGFuZCBiYXNlZCBvbiB0aGUgZmFjdCB0aGF0IGBza2JfZGF0YV9pc19zaGFyZWRgIGlzIGJlaW5nIHVzZWQgaW4gdGhvc2UgdHdvIGZ1bmN0aW9ucywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aG9zZSBmdW5jdGlvbnMgZG8sIHdoYXQga2luZCBvZiBvcGVyYXRpb25zIHRoZXkgcGVyZm9ybSBvbiB0aGUgU0tCIGRhdGEsIGFuZCB0aGUgY29udGV4dCBpbiB3aGljaCB0aGV5JiMzOTtyZSBjYWxsZWQuIEkgc3VzcGVjdCB0aGF0IGJlY2F1c2Ugd2UmIzM5O3JlIGxvb2tpbmcgYXQgb3BlcmF0aW9ucyBvbiBTS0IgZGF0YSwgaXQmIzM5O3MgcG9zc2libGUgdGhhdCBkYXRhIGlzIHBvdGVudGlhbGx5IGJlaW5nIHJlbG9jYXRlZCwgd2hpY2ggbWlnaHQgYmUgYSBzY2VuYXJpbyB3aGVyZSB3ZSB3b3VsZCB3YW50IHRvIGNoZWNrIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gSSBhbHNvIGtub3cgdGhhdCBTS0JzIGFyZSBpbnZvbHZlZCBpbiBuZXR3b3JrIEkvTywgbWVhbmluZyB0aGF0IGRhdGEgY2FuIHRyYW5zaXQgZnJvbSBrZXJuZWwgc3BhY2UgdG8gdXNlciBzcGFjZSBhbmQgdmljZS12ZXJzYSwgd2hpY2ggY291bGQgYmUgYW5vdGhlciBzb3VyY2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpUbyBkZXRlcm1pbmUgdGhpcywgSSYjMzk7bGwgbmVlZCB0byBkbyBzb21lIGNvZGUgYXJjaGFlb2xvZ3kgYW5kIHNlZSB3aGF0IGZ1bmN0aW9ucyBjYWxsIGBwc2tiX2V4cGFuZF9oZWFkYCBhbmQgYHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcmAgYW5kIGhvdyBTS0IgZGF0YSBpcyBzdWJzZXF1ZW50bHkgdXNlZC4gVGhlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRob3NlIGZ1bmN0aW9ucyBpbiBjb250ZXh0LCBwcm9iYWJseSB1c2luZyBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgYW5kIHNlZSBob3cgdGhlIHBhdGNoIGltcGFjdHMgdGhlIGJlaGF2aW9yLiBUaGVuLCBJIGNhbiBtYWtlIGEgZGVjaXNpb24gYXMgdG8gd2hldGhlciBvciBub3QgdGhpcyB3YXJyYW50cyBLTVNBTi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHNrYl9leHBhbmRfaGVhZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jPTIyNzU9RVhQT1JUX1NZTUJPTChfX3Bza2JfY29weV9mY2xvbmUpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTIyNzctLyoqXG5uZXQvY29yZS9za2J1ZmYuYzoyMjc4OiAqXHRwc2tiX2V4cGFuZF9oZWFkIC0gcmVhbGxvY2F0ZSBoZWFkZXIgb2YgXHUwMDI2c2tfYnVmZlxubmV0L2NvcmUvc2tidWZmLmMtMjI3OS0gKlx0QHNrYjogYnVmZmVyIHRvIHJlYWxsb2NhdGVcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0yMjk2LVxubmV0L2NvcmUvc2tidWZmLmM6MjI5NzppbnQgcHNrYl9leHBhbmRfaGVhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmhlYWQsIGludCBudGFpbCxcbm5ldC9jb3JlL3NrYnVmZi5jLTIyOTgtXHRcdCAgICAgZ2ZwX3QgZ2ZwX21hc2spXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMjM3OS19XG5uZXQvY29yZS9za2J1ZmYuYzoyMzgwOkVYUE9SVF9TWU1CT0wocHNrYl9leHBhbmRfaGVhZCk7XG5uZXQvY29yZS9za2J1ZmYuYy0yMzgxLVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTIzODQ9c3RydWN0IHNrX2J1ZmYgKnNrYl9yZWFsbG9jX2hlYWRyb29tKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBoZWFkcm9vbSlcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0yMzkyLVx0XHRza2IyID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7XG5uZXQvY29yZS9za2J1ZmYuYzoyMzkzOlx0XHRpZiAoc2tiMiBcdTAwMjZcdTAwMjYgcHNrYl9leHBhbmRfaGVhZChza2IyLCBTS0JfREFUQV9BTElHTihkZWx0YSksIDAsXG5uZXQvY29yZS9za2J1ZmYuYy0yMzk0LVx0XHRcdFx0XHQgICAgIEdGUF9BVE9NSUMpKSB7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MjQwND1pbnQgX19za2JfdW5jbG9uZV9rZWVwdHJ1ZXNpemUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgcHJpKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTI0MTItXG5uZXQvY29yZS9za2J1ZmYuYzoyNDEzOlx0cmVzID0gcHNrYl9leHBhbmRfaGVhZChza2IsIDAsIDAsIHByaSk7XG5uZXQvY29yZS9za2J1ZmYuYy0yNDE0LVx0aWYgKHJlcylcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0yNDQ4PXN0cnVjdCBza19idWZmICpza2JfZXhwYW5kX2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhlYWRyb29tKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTI0NTgtXHRkZWx0YSA9IFNLQl9EQVRBX0FMSUdOKGRlbHRhKTtcbm5ldC9jb3JlL3NrYnVmZi5jOjI0NTk6XHQvKiBwc2tiX2V4cGFuZF9oZWFkKCkgbWlnaHQgY3Jhc2gsIGlmIHNrYiBpcyBzaGFyZWQuICovXG5uZXQvY29yZS9za2J1ZmYuYy0yNDYwLVx0aWYgKHNrYl9zaGFyZWQoc2tiKSB8fCAhaXNfc2tiX3dtZW0oc2tiKSkge1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTI0NzAtXHR9XG5uZXQvY29yZS9za2J1ZmYuYzoyNDcxOlx0aWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCBkZWx0YSwgMCwgR0ZQX0FUT01JQykpXG5uZXQvY29yZS9za2J1ZmYuYy0yNDcyLVx0XHRnb3RvIGZhaWw7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MjU2Nz1pbnQgX19za2JfcGFkKHN0cnVjdCBza19idWZmICpza2IsIGludCBwYWQsIGJvb2wgZnJlZV9vbl9lcnJvcilcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0yNTc5LVx0aWYgKGxpa2VseShza2JfY2xvbmVkKHNrYikgfHwgbnRhaWwgXHUwMDNlIDApKSB7XG5uZXQvY29yZS9za2J1ZmYuYzoyNTgwOlx0XHRlcnIgPSBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgbnRhaWwsIEdGUF9BVE9NSUMpO1xubmV0L2NvcmUvc2tidWZmLmMtMjU4MS1cdFx0aWYgKHVubGlrZWx5KGVycikpXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MjcyND1pbnQgX19fcHNrYl90cmltKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMjczMy1cdGlmIChza2JfY2xvbmVkKHNrYikgXHUwMDI2XHUwMDI2XG5uZXQvY29yZS9za2J1ZmYuYzoyNzM0Olx0ICAgIHVubGlrZWx5KChlcnIgPSBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgMCwgR0ZQX0FUT01JQykpKSlcbm5ldC9jb3JlL3NrYnVmZi5jLTI3MzUtXHRcdHJldHVybiBlcnI7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9Mjg3OD12b2lkICpfX3Bza2JfcHVsbF90YWlsKHN0cnVjdCBza19idWZmICpza2IsIGludCBkZWx0YSlcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0yODg5LVx0aWYgKGVhdCBcdTAwM2UgMCB8fCBza2JfY2xvbmVkKHNrYikpIHtcbm5ldC9jb3JlL3NrYnVmZi5jOjI4OTA6XHRcdGlmIChwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgZWF0IFx1MDAzZSAwID8gZWF0ICYjNDM7IDEyOCA6IDAsXG5uZXQvY29yZS9za2J1ZmYuYy0yODkxLVx0XHRcdFx0ICAgICBHRlBfQVRPTUlDKSlcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz01MzgzPWludCBza2JfY293X2RhdGEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRhaWxiaXRzLCBzdHJ1Y3Qgc2tfYnVmZiAqKnRyYWlsZXIpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNTQwNC1cdFx0aWYgKHNrYl90YWlscm9vbShza2IpIFx1MDAzYyB0YWlsYml0cyBcdTAwMjZcdTAwMjZcbm5ldC9jb3JlL3NrYnVmZi5jOjU0MDU6XHRcdCAgICBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgdGFpbGJpdHMtc2tiX3RhaWxyb29tKHNrYikmIzQzOzEyOCwgR0ZQX0FUT01JQykpXG5uZXQvY29yZS9za2J1ZmYuYy01NDA2LVx0XHRcdHJldHVybiAtRU5PTUVNO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTYzODM9aW50IHNrYl9lbnN1cmVfd3JpdGFibGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHdyaXRlX2xlbilcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy02MzkwLVxubmV0L2NvcmUvc2tidWZmLmM6NjM5MTpcdHJldHVybiBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgMCwgR0ZQX0FUT01JQyk7XG5uZXQvY29yZS9za2J1ZmYuYy02MzkyLX1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz02Mzk1PWludCBza2JfZW5zdXJlX3dyaXRhYmxlX2hlYWRfdGFpbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTY0MTQtXG5uZXQvY29yZS9za2J1ZmYuYzo2NDE1Olx0cmV0dXJuIHBza2JfZXhwYW5kX2hlYWQoc2tiLCBuZWVkZWRfaGVhZHJvb20sIG5lZWRlZF90YWlscm9vbSxcbm5ldC9jb3JlL3NrYnVmZi5jLTY0MTYtXHRcdFx0XHRHRlBfQVRPTUlDKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjIwNAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBwc2tiX2V4cGFuZF9oZWFkYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHBza2JfZXhwYW5kX2hlYWRgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGNvZGUgYXJvdW5kIGxpbmVzIDIyOTcgdG8gMjM4MC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGlzIGNodW5rIGhhbmRsZXMgcGFja2V0IGJ1ZmZlciBtYW5pcHVsYXRpb24uIEkmIzM5O20gcHJpbWFyaWx5IGludGVyZXN0ZWQgaW4gaG93IGl0JiMzOTtzIGV4cGFuZGluZyB0aGUgaGVhZCBvZiB0aGUgc2tiLiBXaGF0IGVkZ2UgY2FzZXMgYXJlIHRoZXkgY29uc2lkZXJpbmc/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvdyB2dWxuZXJhYmlsaXRpZXMgbHVya2luZyBpbiB0aGlzIHNlY3Rpb24/IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBpbmVmZmljaWVuY2llcyBvciBjbGV2ZXIgb3B0aW1pemF0aW9ucyBhcyB3ZWxsLiBTcGVjaWZpY2FsbHkgSSBuZWVkIHRvIGtub3cgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgYnVmZmVyIGNvcHkvbW92ZSBvcGVyYXRpb25zIGhhcHBlbmluZyBoZXJlLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kLiBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCBhIGJldHRlciBzZW5zZSBvZiBob3cgdGhlIHBhY2tldCBidWZmZXIgaXMgYmVpbmcgaGFuZGxlZCB3aXRoIHRoYXQgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjI5NTpcdCAqL1xuMjI5NjpcdFxuMjI5NzpcdGludCBwc2tiX2V4cGFuZF9oZWFkKHN0cnVjdCBza19idWZmICpza2IsIGludCBuaGVhZCwgaW50IG50YWlsLFxuMjI5ODpcdFx0XHQgICAgIGdmcF90IGdmcF9tYXNrKVxuMjI5OTpcdHtcbjIzMDA6XHRcdHVuc2lnbmVkIGludCBvc2l6ZSA9IHNrYl9lbmRfb2Zmc2V0KHNrYik7XG4yMzAxOlx0XHR1bnNpZ25lZCBpbnQgc2l6ZSA9IG9zaXplICYjNDM7IG5oZWFkICYjNDM7IG50YWlsO1xuMjMwMjpcdFx0bG9uZyBvZmY7XG4yMzAzOlx0XHR1OCAqZGF0YTtcbjIzMDQ6XHRcdGludCBpO1xuMjMwNTpcdFxuMjMwNjpcdFx0QlVHX09OKG5oZWFkIFx1MDAzYyAwKTtcbjIzMDc6XHRcbjIzMDg6XHRcdEJVR19PTihza2Jfc2hhcmVkKHNrYikpO1xuMjMwOTpcdFxuMjMxMDpcdFx0c2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYik7XG4yMzExOlx0XG4yMzEyOlx0XHRpZiAoc2tiX3BmbWVtYWxsb2Moc2tiKSlcbjIzMTM6XHRcdFx0Z2ZwX21hc2sgfD0gX19HRlBfTUVNQUxMT0M7XG4yMzE0Olx0XG4yMzE1Olx0XHRkYXRhID0ga21hbGxvY19yZXNlcnZlKFx1MDAyNnNpemUsIGdmcF9tYXNrLCBOVU1BX05PX05PREUsIE5VTEwpO1xuMjMxNjpcdFx0aWYgKCFkYXRhKVxuMjMxNzpcdFx0XHRnb3RvIG5vZGF0YTtcbjIzMTg6XHRcdHNpemUgPSBTS0JfV0lUSF9PVkVSSEVBRChzaXplKTtcbjIzMTk6XHRcbjIzMjA6XHRcdC8qIENvcHkgb25seSByZWFsIGRhdGEuLi4gYW5kLCBhbGFzLCBoZWFkZXIuIFRoaXMgc2hvdWxkIGJlXG4yMzIxOlx0XHQgKiBvcHRpbWl6ZWQgZm9yIHRoZSBjYXNlcyB3aGVuIGhlYWRlciBpcyB2b2lkLlxuMjMyMjpcdFx0ICovXG4yMzIzOlx0XHRtZW1jcHkoZGF0YSAmIzQzOyBuaGVhZCwgc2tiLVx1MDAzZWhlYWQsIHNrYl90YWlsX3BvaW50ZXIoc2tiKSAtIHNrYi1cdTAwM2VoZWFkKTtcbjIzMjQ6XHRcbjIzMjU6XHRcdG1lbWNweSgoc3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqKShkYXRhICYjNDM7IHNpemUpLFxuMjMyNjpcdFx0ICAgICAgIHNrYl9zaGluZm8oc2tiKSxcbjIzMjc6XHRcdCAgICAgICBvZmZzZXRvZihzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvLCBmcmFnc1tza2Jfc2hpbmZvKHNrYiktXHUwMDNlbnJfZnJhZ3NdKSk7XG4yMzI4Olx0XG4yMzI5Olx0XHQvKlxuMjMzMDpcdFx0ICogaWYgc2hpbmZvIGlzIHNoYXJlZCB3ZSBtdXN0IGRyb3AgdGhlIG9sZCBoZWFkIGdyYWNlZnVsbHksIGJ1dCBpZiBpdFxuMjMzMTpcdFx0ICogaXMgbm90IHdlIGNhbiBqdXN0IGRyb3AgdGhlIG9sZCBoZWFkIGFuZCBsZXQgdGhlIGV4aXN0aW5nIHJlZmNvdW50XG4yMzMyOlx0XHQgKiBiZSBzaW5jZSBhbGwgd2UgZGlkIGlzIHJlbG9jYXRlIHRoZSB2YWx1ZXNcbjIzMzM6XHRcdCAqL1xuMjMzNDpcdFx0aWYgKHNrYl9kYXRhX2lzX3NoYXJlZChza2IpKSB7XG4yMzM1Olx0XHRcdGlmIChza2Jfb3JwaGFuX2ZyYWdzKHNrYiwgZ2ZwX21hc2spKVxuMjMzNjpcdFx0XHRcdGdvdG8gbm9mcmFncztcbjIzMzc6XHRcdFx0aWYgKHNrYl96Y29weShza2IpKVxuMjMzODpcdFx0XHRcdG5ldF96Y29weV9nZXQoc2tiX3Vhcmcoc2tiKSk7XG4yMzM5Olx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vucl9mcmFnczsgaSYjNDM7JiM0MzspXG4yMzQwOlx0XHRcdFx0c2tiX2ZyYWdfcmVmKHNrYiwgaSk7XG4yMzQxOlx0XG4yMzQyOlx0XHRcdGlmIChza2JfaGFzX2ZyYWdfbGlzdChza2IpKVxuMjM0MzpcdFx0XHRcdHNrYl9jbG9uZV9mcmFnbGlzdChza2IpO1xuMjM0NDpcdFxuMjM0NTpcdFx0XHRza2JfcmVsZWFzZV9kYXRhKHNrYiwgU0tCX0NPTlNVTUVEKTtcbjIzNDY6XHRcdH0gZWxzZSB7XG4yMzQ3Olx0XHRcdHNrYl9mcmVlX2hlYWQoc2tiKTtcbjIzNDg6XHRcdH1cbjIzNDk6XHRcdG9mZiA9IChkYXRhICYjNDM7IG5oZWFkKSAtIHNrYi1cdTAwM2VoZWFkO1xuMjM1MDpcdFxuMjM1MTpcdFx0c2tiLVx1MDAzZWhlYWQgICAgID0gZGF0YTtcbjIzNTI6XHRcdHNrYi1cdTAwM2VoZWFkX2ZyYWcgPSAwO1xuMjM1MzpcdFx0c2tiLVx1MDAzZWRhdGEgICAgJiM0Mzs9IG9mZjtcbjIzNTQ6XHRcbjIzNTU6XHRcdHNrYl9zZXRfZW5kX29mZnNldChza2IsIHNpemUpO1xuMjM1NjpcdCNpZmRlZiBORVRfU0tCVUZGX0RBVEFfVVNFU19PRkZTRVRcbjIzNTc6XHRcdG9mZiAgICAgICAgICAgPSBuaGVhZDtcbjIzNTg6XHQjZW5kaWZcbjIzNTk6XHRcdHNrYi1cdTAwM2V0YWlsXHQgICAgICAmIzQzOz0gb2ZmO1xuMjM2MDpcdFx0c2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZShza2IsIG5oZWFkKTtcbjIzNjE6XHRcdHNrYi1cdTAwM2VjbG9uZWQgICA9IDA7XG4yMzYyOlx0XHRza2ItXHUwMDNlaGRyX2xlbiAgPSAwO1xuMjM2MzpcdFx0c2tiLVx1MDAzZW5vaGRyICAgID0gMDtcbjIzNjQ6XHRcdGF0b21pY19zZXQoXHUwMDI2c2tiX3NoaW5mbyhza2IpLVx1MDAzZWRhdGFyZWYsIDEpO1xuMjM2NTpcdFxuMjM2NjpcdFx0LyogSXQgaXMgbm90IGdlbmVyYWxseSBzYWZlIHRvIGNoYW5nZSBza2ItXHUwMDNldHJ1ZXNpemUuXG4yMzY3Olx0XHQgKiBGb3IgdGhlIG1vbWVudCwgd2UgcmVhbGx5IGNhcmUgb2YgcnggcGF0aCwgb3JcbjIzNjg6XHRcdCAqIHdoZW4gc2tiIGlzIG9ycGhhbmVkIChub3QgYXR0YWNoZWQgdG8gYSBzb2NrZXQpLlxuMjM2OTpcdFx0ICovXG4yMzcwOlx0XHRpZiAoIXNrYi1cdTAwM2VzayB8fCBza2ItXHUwMDNlZGVzdHJ1Y3RvciA9PSBzb2NrX2VkZW11eClcbjIzNzE6XHRcdFx0c2tiLVx1MDAzZXRydWVzaXplICYjNDM7PSBzaXplIC0gb3NpemU7XG4yMzcyOlx0XG4yMzczOlx0XHRyZXR1cm4gMDtcbjIzNzQ6XHRcbjIzNzU6XHRub2ZyYWdzOlxuMjM3NjpcdFx0c2tiX2tmcmVlX2hlYWQoZGF0YSk7XG4yMzc3Olx0bm9kYXRhOlxuMjM3ODpcdFx0cmV0dXJuIC1FTk9NRU07XG4yMzc5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMTozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Nzk3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcmAqKgoKT2theSwgbGV0JiMzOTtzIGNpcmNsZSBiYWNrIGFuZCBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcmAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA2ODU1LiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgaGFuZGxpbmcuLi4gbGV0IG1lIHNlZS4uLiBJJiMzOTttIGxvb2tpbmcgYXQgaXQgaW4gdGhlIGNvbnRleHQgb2YgW215IHNwZWNpZmljIGV4cGVydGlzZSAtIGUuZy4sIG1lbW9yeSBjYXJ2aW5nIHdpdGhpbiBhIHNwZWNpZmljIGZpbGUgZm9ybWF0XS4gSSBzdXNwZWN0IHRoaXMgc2VjdGlvbiBtaWdodCBiZSBjcml0aWNhbCBmb3IgW3NwZWNpZmljIGh5cG90aGVzaXMgYWJvdXQgaXRzIGZ1bmN0aW9uLCBmb3IgZXhhbXBsZTogaG93IHRoZSBoZWFkZXIgY2FydmluZyBpbnRlcmFjdHMgd2l0aCB0aGUgZGF0YSBzdHJ1Y3R1cmUmIzM5O3MgaW50ZXJuYWwgb2Zmc2V0IGNhbGN1bGF0aW9ucywgb3IgaG93IGl0IGFkZHJlc3NlcyBmcmFnbWVudGF0aW9uXS4gVW5kZXJzdGFuZGluZyB0aGUgbG9naWMgaGVyZSBpcyBsaWtlbHkga2V5IHRvIFthY2hpZXZpbmcgbXkgb3ZlcmFsbCBnb2FsLCBlLmcuLCBpbXByb3ZpbmcgdGhlIGVmZmljaWVuY3kgb3IgYWNjdXJhY3kgb2YgbXkgY2FydmluZyBhbGdvcml0aG0sIGlkZW50aWZ5aW5nIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHksIG9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzdHJ1Y3R1cmUgaXMgdXNlZF0uIFRpbWUgdG8gcHVsbCB1cCB0aGUgY29kZSBhbmQgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjg0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2ODQwOlx0XHRkYXRhID0ga21hbGxvY19yZXNlcnZlKFx1MDAyNnNpemUsIGdmcF9tYXNrLCBOVU1BX05PX05PREUsIE5VTEwpO1xuNjg0MTpcdFx0aWYgKCFkYXRhKVxuNjg0MjpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjY4NDM6XHRcdHNpemUgPSBTS0JfV0lUSF9PVkVSSEVBRChzaXplKTtcbjY4NDQ6XHRcbjY4NDU6XHRcdC8qIENvcHkgcmVhbCBkYXRhLCBhbmQgYWxsIGZyYWdzICovXG42ODQ2Olx0XHRza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhX29mZnNldChza2IsIG9mZiwgZGF0YSwgbmV3X2hsZW4pO1xuNjg0NzpcdFx0c2tiLVx1MDAzZWxlbiAtPSBvZmY7XG42ODQ4Olx0XG42ODQ5Olx0XHQvKiBSZW1vdmUgU0tCRkxfTUFOQUdFRF9GUkFHX1JFRlMgaW5zdGVhZCBvZiB0cnlpbmcgdG8gaG9ub3VyIGl0XG42ODUwOlx0XHQgKiB3aGlsZSByZWZjb3VudGluZyBmcmFncyBiZWxvdy5cbjY4NTE6XHRcdCAqL1xuNjg1MjpcdFx0c2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYik7XG42ODUzOlx0XG42ODU0Olx0XHRtZW1jcHkoKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKikoZGF0YSAmIzQzOyBzaXplKSxcbjY4NTU6XHRcdCAgICAgICBza2Jfc2hpbmZvKHNrYiksXG42ODU2Olx0XHQgICAgICAgb2Zmc2V0b2Yoc3RydWN0IHNrYl9zaGFyZWRfaW5mbyxcbjY4NTc6XHRcdFx0XHRmcmFnc1tza2Jfc2hpbmZvKHNrYiktXHUwMDNlbnJfZnJhZ3NdKSk7XG42ODU4Olx0XHRpZiAoc2tiX2RhdGFfaXNfc2hhcmVkKHNrYikpIHtcbjY4NTk6XHRcdFx0LyogZHJvcCB0aGUgb2xkIGhlYWQgZ3JhY2VmdWxseSAqL1xuNjg2MDpcdFx0XHRpZiAoc2tiX29ycGhhbl9mcmFncyhza2IsIGdmcF9tYXNrKSkge1xuNjg2MTpcdFx0XHRcdHNrYl9rZnJlZV9oZWFkKGRhdGEpO1xuNjg2MjpcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuNjg2MzpcdFx0XHR9XG42ODY0Olx0XHRcdGlmIChza2JfemNvcHkoc2tiKSlcbjY4NjU6XHRcdFx0XHRuZXRfemNvcHlfZ2V0KHNrYl91YXJnKHNrYikpO1xuNjg2NjpcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBza2Jfc2hpbmZvKHNrYiktXHUwMDNlbnJfZnJhZ3M7IGkmIzQzOyYjNDM7KVxuNjg2NzpcdFx0XHRcdHNrYl9mcmFnX3JlZihza2IsIGkpO1xuNjg2ODpcdFx0XHRpZiAoc2tiX2hhc19mcmFnX2xpc3Qoc2tiKSlcbjY4Njk6XHRcdFx0XHRza2JfY2xvbmVfZnJhZ2xpc3Qoc2tiKTtcbjY4NzA6XHRcdFx0c2tiX3JlbGVhc2VfZGF0YShza2IsIFNLQl9DT05TVU1FRCk7XG42ODcxOlx0XHR9IGVsc2Uge1xuNjg3MjpcdFx0XHQvKiB3ZSBjYW4gcmV1c2UgZXhpc3RpbmcgcmVjb3VudC0gYWxsIHdlIGRpZCB3YXNcbjY4NzM6XHRcdFx0ICogcmVsb2NhdGUgdmFsdWVzXG42ODc0Olx0XHRcdCAqL1xuNjg3NTpcdFx0XHRza2JfZnJlZV9oZWFkKHNrYik7XG42ODc2Olx0XHR9XG42ODc3Olx0XG42ODc4Olx0XHRza2ItXHUwMDNlaGVhZCA9IGRhdGE7XG42ODc5Olx0XHRza2ItXHUwMDNlZGF0YSA9IGRhdGE7XG42ODgwOlx0XHRza2ItXHUwMDNlaGVhZF9mcmFnID0gMDtcbjY4ODE6XHRcdHNrYl9zZXRfZW5kX29mZnNldChza2IsIHNpemUpO1xuNjg4MjpcdFx0c2tiX3NldF90YWlsX3BvaW50ZXIoc2tiLCBza2JfaGVhZGxlbihza2IpKTtcbjY4ODM6XHRcdHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUoc2tiLCAwKTtcbjY4ODQ6XHRcdHNrYi1cdTAwM2VjbG9uZWQgPSAwO1xuNjg4NTpcdFx0c2tiLVx1MDAzZWhkcl9sZW4gPSAwO1xuNjg4NjpcdFx0c2tiLVx1MDAzZW5vaGRyID0gMDtcbjY4ODc6XHRcdGF0b21pY19zZXQoXHUwMDI2c2tiX3NoaW5mbyhza2IpLVx1MDAzZWRhdGFyZWYsIDEpO1xuNjg4ODpcdFxuNjg4OTpcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDExOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5MTkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIHRoZSBza2J1ZmYuaCBEZXRhaWxzKioKCk9rYXksIHRpbWUgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludHJpY2FjaWVzIG9mIHRoZSBgc2tidWZmYCBzdHJ1Y3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgc2tiX2RhdGFfdW5yZWZgLCBgc2tiX2RhdGFyZWZfYmlhc2AsIGFuZCBgc2tiX2Nsb25lZGAuIFRoZXNlIGFyZSBjcnVjaWFsIGZvciBwcm9wZXIgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHJlZmVyZW5jZSBjb3VudGluZyB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBuZXR3b3JraW5nIHN0YWNrLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgcmlnaHQgaW50byBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAsIHNwZWNpZmljYWxseSBsaW5lcyAxMjkwIHRocm91Z2ggMTMyMC4gVGhpcyBzZWN0aW9uIHNob3VsZCBnaXZlIG1lIHRoZSBjb3JlIGRlZmluaXRpb25zIGFuZCBjb250ZXh0IEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgYW5kIGZsYWdzIGludGVycmVsYXRlLiBIb3BlZnVsbHksIHRoaXMgcmVmcmVzaCB3aWxsIG1ha2UgbWUgbW9yZSBlZmZpY2llbnQgd2hlbiBkZWJ1Z2dpbmcgdGhvc2UgbmV0d29yayBwZXJmb3JtYW5jZSBpc3N1ZXMgYWdhaW4uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2tidWZmLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyOTA6XHRcdGlmICghSVNfRU5BQkxFRChDT05GSUdfREVCVUdfTkVUKSBcdTAwMjZcdTAwMjYgbGlrZWx5KHJlZmNvdW50X3JlYWQoXHUwMDI2c2tiLVx1MDAzZXVzZXJzKSA9PSAxKSlcbjEyOTE6XHRcdFx0c21wX3JtYigpO1xuMTI5MjpcdFx0ZWxzZSBpZiAobGlrZWx5KCFyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2c2tiLVx1MDAzZXVzZXJzKSkpXG4xMjkzOlx0XHRcdHJldHVybiBmYWxzZTtcbjEyOTQ6XHRcbjEyOTU6XHRcdHJldHVybiB0cnVlO1xuMTI5NjpcdH1cbjEyOTc6XHRcbjEyOTg6XHRzdGF0aWMgaW5saW5lIGludCBza2JfZGF0YXJlZl9iaWFzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4xMjk5Olx0e1xuMTMwMDpcdFx0cmV0dXJuIHNrYi1cdTAwM2Vub2hkciA/ICgxIFx1MDAzY1x1MDAzYyBTS0JfREFUQVJFRl9TSElGVCkgJiM0MzsgMSA6IDE7XG4xMzAxOlx0fVxuMTMwMjpcdFxuMTMwMzpcdHN0YXRpYyBpbmxpbmUgYm9vbCBza2JfZGF0YV91bnJlZihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuMTMwNDpcdFx0XHRcdFx0ICBzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaGluZm8pXG4xMzA1Olx0e1xuMTMwNjpcdFx0aW50IGJpYXM7XG4xMzA3Olx0XG4xMzA4Olx0XHRpZiAoIXNrYi1cdTAwM2VjbG9uZWQpXG4xMzA5Olx0XHRcdHJldHVybiB0cnVlO1xuMTMxMDpcdFxuMTMxMTpcdFx0YmlhcyA9IHNrYl9kYXRhcmVmX2JpYXMoc2tiKTtcbjEzMTI6XHRcbjEzMTM6XHRcdGlmIChhdG9taWNfcmVhZChcdTAwMjZzaGluZm8tXHUwMDNlZGF0YXJlZikgPT0gYmlhcylcbjEzMTQ6XHRcdFx0c21wX3JtYigpO1xuMTMxNTpcdFx0ZWxzZSBpZiAoYXRvbWljX3N1Yl9yZXR1cm4oYmlhcywgXHUwMDI2c2hpbmZvLVx1MDAzZWRhdGFyZWYpKVxuMTMxNjpcdFx0XHRyZXR1cm4gZmFsc2U7XG4xMzE3Olx0XG4xMzE4Olx0XHRyZXR1cm4gdHJ1ZTtcbjEzMTk6XHR9XG4xMzIwOlx0XG4xMzIxOlx0dm9pZCBfX2ZpeF9hZGRyZXNzIHNrX3NrYl9yZWFzb25fZHJvcChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4xMzIyOlx0XHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuMTMyMzpcdFx0XHRcdFx0ICAgICAgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKTtcbjEzMjQ6XHRcbjEzMjU6XHRzdGF0aWMgaW5saW5lIHZvaWRcbjEzMjY6XHRrZnJlZV9za2JfcmVhc29uKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbilcbjEzMjc6XHR7XG4xMzI4Olx0XHRza19za2JfcmVhc29uX2Ryb3AoTlVMTCwgc2tiLCByZWFzb24pO1xuMTMyOTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTE6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTgwNgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgYHNrYl9jbG9uZWRgIGZsYWcgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYHNrYnVmZmAgc3RydWN0dXJlLiBNeSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiB0aGUgYGluY2x1ZGUvbGludXgvc2tidWZmLmhgIGhlYWRlciBmaWxlLiBJIG5lZWQgdG8gZXhhbWluZSBsaW5lcyAyMDIwIHRocm91Z2ggMjA1MCB0byBnYWluIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHNpZ25pZmljYW5jZS4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgcHJlY2lzZSBkZWZpbml0aW9uLCBhbnkgdXNhZ2UgZXhhbXBsZXMgb3IgcmVsYXRlZCBjb25kaXRpb25hbCBsb2dpYyBzdXJyb3VuZGluZyB0aGlzIGZsYWcuIFRoaXMgc2hvdWxkIGdpdmUgbWUgaW5zaWdodCBvbiB0aGUgY2lyY3Vtc3RhbmNlcyB0aGF0IGRldGVybWluZSB3aGVuIHRoZSBgc2tiX2Nsb25lZGAgZmxhZyBpcyBzZXQgb3IgY2xlYXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTE6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMDIwOlx0XHRyZXR1cm4gc2tiO1xuMjAyMTpcdH1cbjIwMjI6XHRcbjIwMjM6XHQvKlxuMjAyNDpcdCAqIElmIHVzZXJzID09IDEsIHdlIGFyZSB0aGUgb25seSBvd25lciBhbmQgY2FuIGF2b2lkIHJlZHVuZGFudCBhdG9taWMgY2hhbmdlcy5cbjIwMjU6XHQgKi9cbjIwMjY6XHRcbjIwMjc6XHRzdGF0aWMgaW5saW5lIGJvb2wgc2tiX2RhdGFfaXNfc2hhcmVkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4yMDI4Olx0e1xuMjAyOTpcdFx0cmV0dXJuIHNrYi1cdTAwM2VjbG9uZWQgXHUwMDI2XHUwMDI2XG4yMDMwOlx0XHQgICAgICAgYXRvbWljX3JlYWQoXHUwMDI2c2tiX3NoaW5mbyhza2IpLVx1MDAzZWRhdGFyZWYpICE9IHNrYl9kYXRhcmVmX2JpYXMoc2tiKTtcbjIwMzE6XHR9XG4yMDMyOlx0XG4yMDMzOlx0LyoqXG4yMDM0Olx0ICpcdHNrYl9jbG9uZWQgLSBpcyB0aGUgYnVmZmVyIGEgY2xvbmVcbjIwMzU6XHQgKlx0QHNrYjogYnVmZmVyIHRvIGNoZWNrXG4yMDM2Olx0ICpcbjIwMzc6XHQgKlx0UmV0dXJucyB0cnVlIGlmIHRoZSBidWZmZXIgd2FzIGdlbmVyYXRlZCB3aXRoIHNrYl9jbG9uZSgpIGFuZCBpc1xuMjAzODpcdCAqXHRvbmUgb2YgbXVsdGlwbGUgc2hhcmVkIGNvcGllcyBvZiB0aGUgYnVmZmVyLiBDbG9uZWQgYnVmZmVycyBhcmVcbjIwMzk6XHQgKlx0c2hhcmVkIGRhdGEgc28gbXVzdCBub3QgYmUgd3JpdHRlbiB0byB1bmRlciBub3JtYWwgY2lyY3Vtc3RhbmNlcy5cbjIwNDA6XHQgKi9cbjIwNDE6XHRzdGF0aWMgaW5saW5lIGludCBza2JfY2xvbmVkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4yMDQyOlx0e1xuMjA0MzpcdFx0cmV0dXJuIHNrYi1cdTAwM2VjbG9uZWQgXHUwMDI2XHUwMDI2XG4yMDQ0Olx0XHQgICAgICAgKGF0b21pY19yZWFkKFx1MDAyNnNrYl9zaGluZm8oc2tiKS1cdTAwM2VkYXRhcmVmKSBcdTAwMjYgU0tCX0RBVEFSRUZfTUFTSykgIT0gMTtcbjIwNDU6XHR9XG4yMDQ2Olx0XG4yMDQ3Olx0c3RhdGljIGlubGluZSBpbnQgc2tiX3VuY2xvbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgcHJpKVxuMjA0ODpcdHtcbjIwNDk6XHRcdG1pZ2h0X3NsZWVwX2lmKGdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKHByaSkpO1xuMjA1MDpcdFxuMjA1MTpcdFx0aWYgKHNrYl9jbG9uZWQoc2tiKSlcbjIwNTI6XHRcdFx0cmV0dXJuIHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCAwLCBwcmkpO1xuMjA1MzpcdFxuMjA1NDpcdFx0cmV0dXJuIDA7XG4yMDU1Olx0fVxuMjA1NjpcdFxuMjA1NzpcdC8qIFRoaXMgdmFyaWFudCBvZiBza2JfdW5jbG9uZSgpIG1ha2VzIHN1cmUgc2tiLVx1MDAzZXRydWVzaXplXG4yMDU4Olx0ICogYW5kIHNrYl9lbmRfb2Zmc2V0KCkgYXJlIG5vdCBjaGFuZ2VkLCB3aGVuZXZlciBhIG5ldyBza2ItXHUwMDNlaGVhZCBpcyBuZWVkZWQuXG4yMDU5Olx0ICpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTE6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2NDUKCQkJCQkJCW91dHB1dDogMjYwCgkJCQkJCQl0aG91Z2h0czogMTQwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgU0tCIERhdGEgU2hhcmluZyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgaG93IHdlIGhhbmRsZSBTS0IgZGF0YSByZWZlcmVuY2VzLCBzcGVjaWZpY2FsbHkgd2hlbiBjbG9uaW5nIGFuZCBwb3RlbnRpYWxseSBmcmVlaW5nIHNoYXJlZCBkYXRhLiBJdCBpbnRyb2R1Y2VzIGBza2JfZGF0YXJlZl9iaWFzYCB3aGljaCBjbGV2ZXJseSBleHRyYWN0cyB0aGUgYmlhcyB2YWx1ZSByZWxhdGVkIHRvIHRoZSBgZGF0YXJlZmAgY291bnRlciBmb3Igbm9oZHIgU0tCcyBhbmQgdGhlIG5ldyBoZWxwZXIgYHNrYl9kYXRhX2lzX3NoYXJlZGAgZnVuY3Rpb24sIHdoaWNoIGRldGVybWluZXMgaWYgYW4gU0tCJiMzOTtzIGRhdGEgaXMgdHJ1bHkgc2hhcmVkIGFtb25nc3QgbXVsdGlwbGUgY2xvbmVzLCBvciBpcyB0aGUgc29sZSBvd25lciBvZiB0aGUgZGF0YS4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBsaWVzIGluIHJlcGxhY2luZyB0aGUgb2xkZXIgYHNrYl9jbG9uZWQoc2tiKWAgY2hlY2sgd2l0aCB0aGUgbmV3IGBza2JfZGF0YV9pc19zaGFyZWQoc2tiKWAgd2l0aGluIGBwc2tiX2V4cGFuZF9oZWFkYCBhbmQgYHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcmAuCgpUaGUgcmF0aW9uYWxlIGlzIGNsZWFyLiBUaGUgb2xkIGBza2JfY2xvbmVkKHNrYilgIGNoZWNrIHdhc24mIzM5O3QgYWNjdXJhdGVseSBoYW5kbGluZyBzY2VuYXJpb3Mgd2hlcmUgYW4gU0tCIG1pZ2h0ICphcHBlYXIqIGNsb25lZCAoZHVlIHRvIHRoZSBgY2xvbmVkYCBmbGFnIGJlaW5nIHNldCksIGJ1dCBhY3R1YWxseSBiZSB0aGUgKm9ubHkqIG93bmVyIG9mIGl0cyBkYXRhIGJlY2F1c2Ugb3RoZXIgY2xvbmVzIGhhdmUgYmVlbiBmcmVlZCBvciBpdCYjMzk7cyBhIG5vaGRyIHNrYiB3aXRoIGEgYmlhcy4gIFRoZSBgZGF0YXJlZmAgY291bnRlciwgaW4gdGhlc2UgY2FzZXMsIGNvdWxkIGJlIGVxdWFsIHRvIHRoZSBiaWFzLCBpbmRpY2F0aW5nIHRoYXQgd2UgY2FuIHNhZmVseSBmcmVlIHRoZSBoZWFkIHdpdGhvdXQgZXh0cmEgc3RlcHMuIFRoaXMgcGF0Y2ggZXNzZW50aWFsbHkgb3B0aW1pemVzIHRoZSByZWZjb3VudGluZyBsb2dpYywgZXNwZWNpYWxseSBmb3Igbm9oZHIgU0tCcywgYXZvaWRpbmcgdW5uZWNlc3Nhcnkgb3ZlcmhlYWQuIFRoZSBwcmltYXJ5IGZvY3VzIGlzIG1ha2luZyByZWZjb3VudGluZyBtb3JlIHByZWNpc2Ugd2hlbiBkZWFsaW5nIHdpdGggY2xvbmVkIFNLQnMsIHByZXZlbnRpbmcgdW5uZWNlc3Nhcnkgb3BlcmF0aW9ucyBsaWtlIGBza2Jfb3JwaGFuX2ZyYWdzYCwgZXRjLiBpZiB0aGUgZGF0YSBpcyBubyBsb25nZXIgc2hhcmVkLCB3aGljaCByZXN1bHRzIGluIGBza2JfZnJlZV9oZWFkYCBiZWluZyBjYWxsZWQsIGluc3RlYWQgb2YgdGhlIHNsb3dlciBvcGVyYXRpb24gb2YgcmVmY291bnRpbmcgYW5kIG9ycGhhbiBmcmFnbGlzdCBtYW5pcHVsYXRpb25zLgoKVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIG5vdyBpcywgd2hhdCBraW5kIG9mIGJ1Z3MgY2FuIHRoaXMgaW50cm9kdWNlPyAgV2VsbCwgdGhlIHByaW1hcnkgcmlza3MgYXJlIHJlZmNvdW50aW5nIGltYmFsYW5jZXMsIHdoaWNoIGNvdWxkIGxlYWQgdG8gdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyAoaWYgdGhlIGRhdGEgaXMgcHJlbWF0dXJlbHkgZnJlZWQgYmVjYXVzZSBgc2tiX2RhdGFfaXNfc2hhcmVkYCBpbmNvcnJlY3RseSByZXBvcnRzIHRoYXQgdGhlIGRhdGEgaXNuJiMzOTt0IHNoYXJlZCksIG1lbW9yeSBsZWFrcyAoaWYgd2UgaW5jb3JyZWN0bHkgYXNzdW1lIGRhdGEgaXMgbm90IHRoZSBzb2xlIG93bmVyIGFuZCB0aHVzIHJlZmNvdW50IGlzIG5vdCBmdWxseSBoYW5kbGVkKSwgb3IsIGNvbnZlcnNlbHksIGRvdWJsZS1mcmVlcyAoaWYgdGhlIGRhdGEgaXMgZnJlZWQgbXVsdGlwbGUgdGltZXMgZHVlIHRvIGEgbWlzdW5kZXJzdGFuZGluZyBvZiBvd25lcnNoaXApLiBLQVNBTiBpcyB0aGUga2V5IGhlcmUuIEFueSBpbmNvcnJlY3QgcmVmY291bnRpbmcgcmVzdWx0aW5nIGZyb20gdGhpcyBjaGFuZ2UgKndpbGwqIGJlIGRldGVjdGVkIGJ5IEtBU0FOIGFzIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIGVycm9ycy4KCkxldCYjMzk7cyBjYXJlZnVsbHkgYXNzZXNzIEtNU0FOIGFwcGxpY2FiaWxpdHkuICBXZSBuZWVkIHRvIHNlZSBpZiB3ZSYjMzk7cmUgY3JlYXRpbmcgb3IgbW9kaWZ5aW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS4gIExvb2tpbmcgY2xvc2VseSwgd2UmIzM5O3JlICpub3QqIGludHJvZHVjaW5nIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHMgdGhhdCBhcmUgdGhlbiBwYXNzZWQgdG8gdXNlcnNwYWNlICh3aGljaCB3b3VsZCB0cmlnZ2VyIGEgS01TQU4gY29uY2VybikuIFRoZSBjaGVja3MgcmVseSBvbiBzdGFuZGFyZCBTS0IgZmllbGRzIChgc2tiLSZndDtjbG9uZWRgLCBgc2tiLSZndDtub2hkcmAsIGBza2Jfc2hpbmZvKHNrYiktJmd0O2RhdGFyZWZgKSwgd2hpY2ggYXJlIGluaXRpYWxpemVkIGR1cmluZyBTS0IgY3JlYXRpb24gb3IgY2xvbmluZy4gVGhlcmUmIzM5O3Mgbm8gY29uZGl0aW9uYWwgbG9naWMgdGhhdCBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGlzIGFsc28gZG9lc24mIzM5O3QgYWZmZWN0IGFsbG9jYXRpb25zIG9yIGluaXRpYWxpemF0aW9uIG9mIG1vcmUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYW5kIHRoZXJlIGFyZSBubyBib3VuZGFyeSBtb2RpZmljYXRpb25zIHRoYXQgd291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIGJ5dGUgcmVhZHMuIFRoZSBwYXRjaCBmb2N1c2VzIG9uIG9wdGltaXppbmcgaG93IHNoYXJlZCBkYXRhIGlzIHJlY29nbml6ZWQsIGFuZCBob3cgdG8gZGVhbCB3aXRoIHRoZSByZWZlcmVuY2UgY291bnRpbmcgYXNzb2NpYXRlZCB3aXRoIHNoYXJlZCBkYXRhLiBXZSYjMzk7cmUgbm90IGNyZWF0aW5nIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBzZW5kaW5nIHRoaXMgZGF0YSB0byB1c2Vyc3BhY2UuCgpJbiBlc3NlbmNlLCB3ZSYjMzk7cmUgcmVmYWN0b3Jpbmcgc29tZSBpbnRlcm5hbCBsb2dpYyAoYHNrYl9kYXRhcmVmX2JpYXNgKSwgaW50cm9kdWNpbmcgYSBuZXcgZnVuY3Rpb24gKGBza2JfZGF0YV9pc19zaGFyZWRgKSwgYW5kIHJlcGxhY2luZyBhIGNoZWNrLiAgVGhlIGVudGlyZSBwYXRjaCBpcyBhcm91bmQgU0tCIGRhdGEgb3duZXJzaGlwIGFuZCByZWZjb3VudGluZy4gVGhlIGJ1Z3MgdGhhdCBjb3VsZCBhcmlzZSBoZXJlIGFyZSBlbnRpcmVseSByZWxhdGVkIHRvIHJlZmNvdW50IGVycm9ycy4gVGhlIHJlZmNvdW50aW5nIGJ1Z3MgYXJlIGRldGVjdGFibGUgYnkgS0FTQU4uCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBXZSBjYW4gYmUgY29uZmlkZW50IHRoYXQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2VycywgcGFydGljdWxhcmx5IEtBU0FOLCBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCBiZWNhdXNlLCBhcyBkZXRhaWxlZCBhYm92ZSwgYW55IGltcHJvcGVyIHJlZmNvdW50aW5nIHdpbGwgcmVzdWx0IGluIEtBU0FOIGRldGVjdGluZyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIG9yIG1lbW9yeSBsZWFrIGlzc3Vlcy4KCkxldCYjMzk7cyBtYWtlIHN1cmUgb3VyIHRvb2xpbmcgaXMgaGFwcHkgd2l0aCB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGBza2JfZGF0YXJlZl9iaWFzKClgIGFuZCBgc2tiX2RhdGFfaXNfc2hhcmVkKClgIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBkYXRhIGJ1ZmZlciAvIHNoYXJlZCBpbmZvIG9mIGFuIHNrX2J1ZmYgaXMgYWN0aXZlbHkgc2hhcmVkIGJ5IG90aGVyIGNsb25lcyBkdXJpbmcgaGVhZCByZWFsbG9jYXRpb24gKGBwc2tiX2V4cGFuZF9oZWFkYCBhbmQgYHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcmApLlxuXG5LTVNBTiB2cyBLQVNBTiBhbmFseXNpczpcbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGRhdGEgbGVuZ3RoIC8gYm91bmRzIGNhbGN1bGF0aW9ucyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGJ1ZmZlciBtZW1vcnkuIFRoZSBmaWVsZHMgYWNjZXNzZWQgKGBza2ItXHUwMDNlY2xvbmVkYCwgYHNrYi1cdTAwM2Vub2hkcmAsIGFuZCBgc2hpbmZvLVx1MDAzZWRhdGFyZWZgKSBhcmUgd2VsbC1kZWZpbmVkIGFuZCBpbml0aWFsaXplZCBza2IgbWV0YWRhdGEuXG4tIEtBU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSByaXNrcyBhc3NvY2lhdGVkIHdpdGggdGhlc2UgcmVmY291bnQgYW5kIHNoYXJpbmcgY2hlY2sgbW9kaWZpY2F0aW9ucyByZWxhdGUgdG8gc2tiIGRhdGEgb3duZXJzaGlwLCBzdWNoIGFzIHByZW1hdHVyZSBoZWFkIGZyZWVpbmcgb3IgaW1wcm9wZXIgZnJhZyByZWZjb3VudGluZyBsZWFkaW5nIHRvIFVzZS1BZnRlci1GcmVlIChVQUYpIG9yIERvdWJsZS1GcmVlIGVycm9ycy4gVGhlc2UgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgYXJlIGRpcmVjdGx5IGRldGVjdGVkIGJ5IEtBU0FOLlxuXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYHNrYl9kYXRhcmVmX2JpYXMoKWAgYW5kIGBza2JfZGF0YV9pc19zaGFyZWQoKWAgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGRhdGEgYnVmZmVyIC8gc2hhcmVkIGluZm8gb2YgYW4gc2tfYnVmZiBpcyBhY3RpdmVseSBzaGFyZWQgYnkgb3RoZXIgY2xvbmVzIGR1cmluZyBoZWFkIHJlYWxsb2NhdGlvbiAoYHBza2JfZXhwYW5kX2hlYWRgIGFuZCBgcHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyYCkuXG5cbktNU0FOIHZzIEtBU0FOIGFuYWx5c2lzOlxuLSBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkga2VybmVsIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZGF0YSBsZW5ndGggLyBib3VuZHMgY2FsY3VsYXRpb25zIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIG1lbW9yeS4gVGhlIGZpZWxkcyBhY2Nlc3NlZCAoYHNrYi1cdTAwM2VjbG9uZWRgLCBgc2tiLVx1MDAzZW5vaGRyYCwgYW5kIGBzaGluZm8tXHUwMDNlZGF0YXJlZmApIGFyZSB3ZWxsLWRlZmluZWQgYW5kIGluaXRpYWxpemVkIHNrYiBtZXRhZGF0YS5cbi0gS0FTQU4gYXBwbGljYWJpbGl0eTogVGhlIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCB0aGVzZSByZWZjb3VudCBhbmQgc2hhcmluZyBjaGVjayBtb2RpZmljYXRpb25zIHJlbGF0ZSB0byBza2IgZGF0YSBvd25lcnNoaXAsIHN1Y2ggYXMgcHJlbWF0dXJlIGhlYWQgZnJlZWluZyBvciBpbXByb3BlciBmcmFnIHJlZmNvdW50aW5nIGxlYWRpbmcgdG8gVXNlLUFmdGVyLUZyZWUgKFVBRikgb3IgRG91YmxlLUZyZWUgZXJyb3JzLiBUaGVzZSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBhcmUgZGlyZWN0bHkgZGV0ZWN0ZWQgYnkgS0FTQU4uXG5cblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMToyNjozMy40MjYwMTYwMzhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODEzNDY4MzIxMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHNrYl9leHBhbmRfaGVhZFwiLFxuICAgIFwicHNrYl9leHRyYWN0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBza2JfZGF0YXJlZl9iaWFzKClgIGFuZCBgc2tiX2RhdGFfaXNfc2hhcmVkKClgIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBkYXRhIGJ1ZmZlciAvIHNoYXJlZCBpbmZvIG9mIGFuIHNrX2J1ZmYgaXMgYWN0aXZlbHkgc2hhcmVkIGJ5IG90aGVyIGNsb25lcyBkdXJpbmcgaGVhZCByZWFsbG9jYXRpb24gKGBwc2tiX2V4cGFuZF9oZWFkYCBhbmQgYHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcmApLlxcblxcbktNU0FOIHZzIEtBU0FOIGFuYWx5c2lzOlxcbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGRhdGEgbGVuZ3RoIC8gYm91bmRzIGNhbGN1bGF0aW9ucyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGJ1ZmZlciBtZW1vcnkuIFRoZSBmaWVsZHMgYWNjZXNzZWQgKGBza2ItXFx1MDAzZWNsb25lZGAsIGBza2ItXFx1MDAzZW5vaGRyYCwgYW5kIGBzaGluZm8tXFx1MDAzZWRhdGFyZWZgKSBhcmUgd2VsbC1kZWZpbmVkIGFuZCBpbml0aWFsaXplZCBza2IgbWV0YWRhdGEuXFxuLSBLQVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoZXNlIHJlZmNvdW50IGFuZCBzaGFyaW5nIGNoZWNrIG1vZGlmaWNhdGlvbnMgcmVsYXRlIHRvIHNrYiBkYXRhIG93bmVyc2hpcCwgc3VjaCBhcyBwcmVtYXR1cmUgaGVhZCBmcmVlaW5nIG9yIGltcHJvcGVyIGZyYWcgcmVmY291bnRpbmcgbGVhZGluZyB0byBVc2UtQWZ0ZXItRnJlZSAoVUFGKSBvciBEb3VibGUtRnJlZSBlcnJvcnMuIFRoZXNlIG1lbW9yeSBzYWZldHkgaXNzdWVzIGFyZSBkaXJlY3RseSBkZXRlY3RlZCBieSBLQVNBTi5cXG5cXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBza2JfZGF0YXJlZl9iaWFzKClgIGFuZCBgc2tiX2RhdGFfaXNfc2hhcmVkKClgIHRvIGZpeCBkYXRhIHNoYXJpbmcgZGV0ZWN0aW9uIGZvciBza19idWZmcyB3aGVuIGBza2ItXFx1MDAzZW5vaGRyYCBpcyBzZXQsIHVwZGF0aW5nIGBwc2tiX2V4cGFuZF9oZWFkYCBhbmQgYHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcmAgdG8gdXNlIGBza2JfZGF0YV9pc19zaGFyZWRgIHJhdGhlciB0aGFuIGBza2JfY2xvbmVkYC4gVGhpcyBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgYnVmZmVyIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCByZWZlcmVuY2UgY291bnRpbmcgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDExOjI2OjMzLjQyNjAyMzAzOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1OTU4MTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNjNiMTQ2MGEwNDIwNjcwMjM1MTc3NjUzNzY1YmEzM2EwNDA5ZTkwOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxMToyNjozMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxcbmluZGV4IDQyMWY2ZmM0NTQ1MTEuLmVmZWVmMTQ4ZTFiYTUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc2tidWZmLmhcXG5AQCAtMTI5NSw2ICsxMjk1LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBza2JfdW5yZWYoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgaW50IHNrYl9kYXRhcmVmX2JpYXMoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRyZXR1cm4gc2tiLVxcdTAwM2Vub2hkciA/ICgxIFxcdTAwM2NcXHUwMDNjIFNLQl9EQVRBUkVGX1NISUZUKSArIDEgOiAxO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIGJvb2wgc2tiX2RhdGFfdW5yZWYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaGluZm8pXFxuIHtcXG5AQCAtMTMwMyw3ICsxMzA4LDcgQEAgc3RhdGljIGlubGluZSBib29sIHNrYl9kYXRhX3VucmVmKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGlmICghc2tiLVxcdTAwM2VjbG9uZWQpXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXG4tXFx0YmlhcyA9IHNrYi1cXHUwMDNlbm9oZHIgPyAoMSBcXHUwMDNjXFx1MDAzYyBTS0JfREFUQVJFRl9TSElGVCkgKyAxIDogMTtcXG4rXFx0YmlhcyA9IHNrYl9kYXRhcmVmX2JpYXMoc2tiKTtcXG4gXFxuIFxcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2c2hpbmZvLVxcdTAwM2VkYXRhcmVmKSA9PSBiaWFzKVxcbiBcXHRcXHRzbXBfcm1iKCk7XFxuQEAgLTIwMTksNiArMjAyNCwxMiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpza2JfZ2V0KHN0cnVjdCBza19idWZmICpza2IpXFxuICAqIElmIHVzZXJzID09IDEsIHdlIGFyZSB0aGUgb25seSBvd25lciBhbmQgY2FuIGF2b2lkIHJlZHVuZGFudCBhdG9taWMgY2hhbmdlcy5cXG4gICovXFxuIFxcbitzdGF0aWMgaW5saW5lIGJvb2wgc2tiX2RhdGFfaXNfc2hhcmVkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuK3tcXG4rXFx0cmV0dXJuIHNrYi1cXHUwMDNlY2xvbmVkIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgICBhdG9taWNfcmVhZChcXHUwMDI2c2tiX3NoaW5mbyhza2IpLVxcdTAwM2VkYXRhcmVmKSAhPSBza2JfZGF0YXJlZl9iaWFzKHNrYik7XFxuK31cXG4rXFxuIC8qKlxcbiAgKlxcdHNrYl9jbG9uZWQgLSBpcyB0aGUgYnVmZmVyIGEgY2xvbmVcXG4gICpcXHRAc2tiOiBidWZmZXIgdG8gY2hlY2tcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuY1xcbmluZGV4IDk2NmFmM2JlZWQ5NGQuLmY0YzA2NDVmOThkM2YgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvc2tidWZmLmNcXG4rKysgYi9uZXQvY29yZS9za2J1ZmYuY1xcbkBAIC0yMzMxLDcgKzIzMzEsNyBAQCBpbnQgcHNrYl9leHBhbmRfaGVhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmhlYWQsIGludCBudGFpbCxcXG4gXFx0ICogaXMgbm90IHdlIGNhbiBqdXN0IGRyb3AgdGhlIG9sZCBoZWFkIGFuZCBsZXQgdGhlIGV4aXN0aW5nIHJlZmNvdW50XFxuIFxcdCAqIGJlIHNpbmNlIGFsbCB3ZSBkaWQgaXMgcmVsb2NhdGUgdGhlIHZhbHVlc1xcbiBcXHQgKi9cXG4tXFx0aWYgKHNrYl9jbG9uZWQoc2tiKSkge1xcbitcXHRpZiAoc2tiX2RhdGFfaXNfc2hhcmVkKHNrYikpIHtcXG4gXFx0XFx0aWYgKHNrYl9vcnBoYW5fZnJhZ3Moc2tiLCBnZnBfbWFzaykpXFxuIFxcdFxcdFxcdGdvdG8gbm9mcmFncztcXG4gXFx0XFx0aWYgKHNrYl96Y29weShza2IpKVxcbkBAIC02ODU1LDcgKzY4NTUsNyBAQCBzdGF0aWMgaW50IHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1MzIgb2ZmLFxcbiBcXHQgICAgICAgc2tiX3NoaW5mbyhza2IpLFxcbiBcXHQgICAgICAgb2Zmc2V0b2Yoc3RydWN0IHNrYl9zaGFyZWRfaW5mbyxcXG4gXFx0XFx0XFx0ZnJhZ3Nbc2tiX3NoaW5mbyhza2IpLVxcdTAwM2Vucl9mcmFnc10pKTtcXG4tXFx0aWYgKHNrYl9jbG9uZWQoc2tiKSkge1xcbitcXHRpZiAoc2tiX2RhdGFfaXNfc2hhcmVkKHNrYikpIHtcXG4gXFx0XFx0LyogZHJvcCB0aGUgb2xkIGhlYWQgZ3JhY2VmdWxseSAqL1xcbiBcXHRcXHRpZiAoc2tiX29ycGhhbl9mcmFncyhza2IsIGdmcF9tYXNrKSkge1xcbiBcXHRcXHRcXHRza2Jfa2ZyZWVfaGVhZChkYXRhKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTE6MjY6MzMuODgyNzkwMDU0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNjk0OTE0OTA0MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHNrYl9leHBhbmRfaGVhZFwiLFxuICAgIFwicHNrYl9leHRyYWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBgc2tiX2RhdGFyZWZfYmlhcygpYCBhbmQgYHNrYl9kYXRhX2lzX3NoYXJlZCgpYCB0byBmaXggZGF0YSBzaGFyaW5nIGRldGVjdGlvbiBmb3Igc2tfYnVmZnMgd2hlbiBgc2tiLVxcdTAwM2Vub2hkcmAgaXMgc2V0LCB1cGRhdGluZyBgcHNrYl9leHBhbmRfaGVhZGAgYW5kIGBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXJgIHRvIHVzZSBgc2tiX2RhdGFfaXNfc2hhcmVkYCByYXRoZXIgdGhhbiBgc2tiX2Nsb25lZGAuIFRoaXMgbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGJ1ZmZlciBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2M2IxNDYwYTA0MjA2NzAyMzUxNzc2NTM3NjViYTMzYTA0MDllOTA4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMTE6MjY6MzIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxuaW5kZXggNDIxZjZmYzQ1NDUxMS4uZWZlZWYxNDhlMWJhNSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2tidWZmLmhcbisrKyBiL2luY2x1ZGUvbGludXgvc2tidWZmLmhcbkBAIC0xMjk1LDYgKzEyOTUsMTEgQEAgc3RhdGljIGlubGluZSBib29sIHNrYl91bnJlZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgaW50IHNrYl9kYXRhcmVmX2JpYXMoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbit7XG4rXHRyZXR1cm4gc2tiLVx1MDAzZW5vaGRyID8gKDEgXHUwMDNjXHUwMDNjIFNLQl9EQVRBUkVGX1NISUZUKSArIDEgOiAxO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIGJvb2wgc2tiX2RhdGFfdW5yZWYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdCAgc3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqc2hpbmZvKVxuIHtcbkBAIC0xMzAzLDcgKzEzMDgsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2tiX2RhdGFfdW5yZWYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmICghc2tiLVx1MDAzZWNsb25lZClcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4tXHRiaWFzID0gc2tiLVx1MDAzZW5vaGRyID8gKDEgXHUwMDNjXHUwMDNjIFNLQl9EQVRBUkVGX1NISUZUKSArIDEgOiAxO1xuK1x0YmlhcyA9IHNrYl9kYXRhcmVmX2JpYXMoc2tiKTtcbiBcbiBcdGlmIChhdG9taWNfcmVhZChcdTAwMjZzaGluZm8tXHUwMDNlZGF0YXJlZikgPT0gYmlhcylcbiBcdFx0c21wX3JtYigpO1xuQEAgLTIwMTksNiArMjAyNCwxMiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpza2JfZ2V0KHN0cnVjdCBza19idWZmICpza2IpXG4gICogSWYgdXNlcnMgPT0gMSwgd2UgYXJlIHRoZSBvbmx5IG93bmVyIGFuZCBjYW4gYXZvaWQgcmVkdW5kYW50IGF0b21pYyBjaGFuZ2VzLlxuICAqL1xuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBza2JfZGF0YV9pc19zaGFyZWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbit7XG4rXHRyZXR1cm4gc2tiLVx1MDAzZWNsb25lZCBcdTAwMjZcdTAwMjZcbitcdCAgICAgICBhdG9taWNfcmVhZChcdTAwMjZza2Jfc2hpbmZvKHNrYiktXHUwMDNlZGF0YXJlZikgIT0gc2tiX2RhdGFyZWZfYmlhcyhza2IpO1xuK31cbitcbiAvKipcbiAgKlx0c2tiX2Nsb25lZCAtIGlzIHRoZSBidWZmZXIgYSBjbG9uZVxuICAqXHRAc2tiOiBidWZmZXIgdG8gY2hlY2tcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jXG5pbmRleCA5NjZhZjNiZWVkOTRkLi5mNGMwNjQ1Zjk4ZDNmIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc2tidWZmLmNcbisrKyBiL25ldC9jb3JlL3NrYnVmZi5jXG5AQCAtMjMzMSw3ICsyMzMxLDcgQEAgaW50IHBza2JfZXhwYW5kX2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5oZWFkLCBpbnQgbnRhaWwsXG4gXHQgKiBpcyBub3Qgd2UgY2FuIGp1c3QgZHJvcCB0aGUgb2xkIGhlYWQgYW5kIGxldCB0aGUgZXhpc3RpbmcgcmVmY291bnRcbiBcdCAqIGJlIHNpbmNlIGFsbCB3ZSBkaWQgaXMgcmVsb2NhdGUgdGhlIHZhbHVlc1xuIFx0ICovXG4tXHRpZiAoc2tiX2Nsb25lZChza2IpKSB7XG4rXHRpZiAoc2tiX2RhdGFfaXNfc2hhcmVkKHNrYikpIHtcbiBcdFx0aWYgKHNrYl9vcnBoYW5fZnJhZ3Moc2tiLCBnZnBfbWFzaykpXG4gXHRcdFx0Z290byBub2ZyYWdzO1xuIFx0XHRpZiAoc2tiX3pjb3B5KHNrYikpXG5AQCAtNjg1NSw3ICs2ODU1LDcgQEAgc3RhdGljIGludCBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTMyIG9mZixcbiBcdCAgICAgICBza2Jfc2hpbmZvKHNrYiksXG4gXHQgICAgICAgb2Zmc2V0b2Yoc3RydWN0IHNrYl9zaGFyZWRfaW5mbyxcbiBcdFx0XHRmcmFnc1tza2Jfc2hpbmZvKHNrYiktXHUwMDNlbnJfZnJhZ3NdKSk7XG4tXHRpZiAoc2tiX2Nsb25lZChza2IpKSB7XG4rXHRpZiAoc2tiX2RhdGFfaXNfc2hhcmVkKHNrYikpIHtcbiBcdFx0LyogZHJvcCB0aGUgb2xkIGhlYWQgZ3JhY2VmdWxseSAqL1xuIFx0XHRpZiAoc2tiX29ycGhhbl9mcmFncyhza2IsIGdmcF9tYXNrKSkge1xuIFx0XHRcdHNrYl9rZnJlZV9oZWFkKGRhdGEpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTE6MjY6MzMuODgyNzkxNTg0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjE5NzQxNTMzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guXG5cbioqQW5hbHl6aW5nIHRoZSBTS0IgTW9kaWZpY2F0aW9uKipcblxuUmlnaHQsIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYm90aCBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAgYW5kIGBuZXQvY29yZS9za2J1ZmYuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHdlJ3JlIGxpa2VseSBkZWFsaW5nIHdpdGggYSBjb3JlIFNLQiBzdHJ1Y3R1cmUgY2hhbmdlIG9yIGFuIHVwZGF0ZSB0byBpdHMgY29yZSBtYW5hZ2VtZW50LiBHaXZlbiB0aGF0LCBsZXQncyBnbyBzdHJhaWdodCB0byB0aGUgcmVsZXZhbnQgZmlsZXMgYW5kIHBpbnBvaW50IHRoZSBhcmVhcyBvZiB0aGUgY2hhbmdlcyB0byBxdWlja2x5IGdldCBhIHNlbnNlIG9mIHdoYXQncyBoYXBwZW5pbmcuXG5cbkknbGwgdXNlIGByZWFkLWZpbGVgIG5vdy4gSSdtIGdvaW5nIHRvIGZvY3VzIG9uIGBuZXQvY29yZS9za2J1ZmYuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZXMgMjMzMSBhbmQgNjg1NS4gVGhvc2UgbGluZSBudW1iZXJzIGdpdmUgYSBnb29kIHJlZmVyZW5jZSBwb2ludCBmb3IgdGhlIGltcG9ydGFudCBwYXJ0cyBvZiB0aGUgY29kZS4gVGhlbiBJJ2xsIGNoZWNrIGBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oYCB0byBzZWUgaG93IHRoZSBkYXRhIHN0cnVjdHVyZXMgbWlnaHQgaGF2ZSBjaGFuZ2VkLiBXaXRoIG15IGtub3dsZWRnZSwgSSBjYW4gcXVpY2tseSBtYXAgdGhlIGNoYW5nZXMgZnJvbSB0aGUgaGVhZGVyIGludG8gdGhlIGtlcm5lbCdzIGZ1bmN0aW9ucyB0aGF0IG9wZXJhdGUgb24gdGhlIFNLQi4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgc28gSSBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3OTUsIk91dHB1dFRva2VucyI6NzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDExOjI2OjQwLjA4MDIwODU5MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMjAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMzIwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMzIwOlxcdFxcdC8qIENvcHkgb25seSByZWFsIGRhdGEuLi4gYW5kLCBhbGFzLCBoZWFkZXIuIFRoaXMgc2hvdWxkIGJlXFxuMjMyMTpcXHRcXHQgKiBvcHRpbWl6ZWQgZm9yIHRoZSBjYXNlcyB3aGVuIGhlYWRlciBpcyB2b2lkLlxcbjIzMjI6XFx0XFx0ICovXFxuMjMyMzpcXHRcXHRtZW1jcHkoZGF0YSArIG5oZWFkLCBza2ItXFx1MDAzZWhlYWQsIHNrYl90YWlsX3BvaW50ZXIoc2tiKSAtIHNrYi1cXHUwMDNlaGVhZCk7XFxuMjMyNDpcXHRcXG4yMzI1OlxcdFxcdG1lbWNweSgoc3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqKShkYXRhICsgc2l6ZSksXFxuMjMyNjpcXHRcXHQgICAgICAgc2tiX3NoaW5mbyhza2IpLFxcbjIzMjc6XFx0XFx0ICAgICAgIG9mZnNldG9mKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8sIGZyYWdzW3NrYl9zaGluZm8oc2tiKS1cXHUwMDNlbnJfZnJhZ3NdKSk7XFxuMjMyODpcXHRcXG4yMzI5OlxcdFxcdC8qXFxuMjMzMDpcXHRcXHQgKiBpZiBzaGluZm8gaXMgc2hhcmVkIHdlIG11c3QgZHJvcCB0aGUgb2xkIGhlYWQgZ3JhY2VmdWxseSwgYnV0IGlmIGl0XFxuMjMzMTpcXHRcXHQgKiBpcyBub3Qgd2UgY2FuIGp1c3QgZHJvcCB0aGUgb2xkIGhlYWQgYW5kIGxldCB0aGUgZXhpc3RpbmcgcmVmY291bnRcXG4yMzMyOlxcdFxcdCAqIGJlIHNpbmNlIGFsbCB3ZSBkaWQgaXMgcmVsb2NhdGUgdGhlIHZhbHVlc1xcbjIzMzM6XFx0XFx0ICovXFxuMjMzNDpcXHRcXHRpZiAoc2tiX2RhdGFfaXNfc2hhcmVkKHNrYikpIHtcXG4yMzM1OlxcdFxcdFxcdGlmIChza2Jfb3JwaGFuX2ZyYWdzKHNrYiwgZ2ZwX21hc2spKVxcbjIzMzY6XFx0XFx0XFx0XFx0Z290byBub2ZyYWdzO1xcbjIzMzc6XFx0XFx0XFx0aWYgKHNrYl96Y29weShza2IpKVxcbjIzMzg6XFx0XFx0XFx0XFx0bmV0X3pjb3B5X2dldChza2JfdWFyZyhza2IpKTtcXG4yMzM5OlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBza2Jfc2hpbmZvKHNrYiktXFx1MDAzZW5yX2ZyYWdzOyBpKyspXFxuMjM0MDpcXHRcXHRcXHRcXHRza2JfZnJhZ19yZWYoc2tiLCBpKTtcXG4yMzQxOlxcdFxcbjIzNDI6XFx0XFx0XFx0aWYgKHNrYl9oYXNfZnJhZ19saXN0KHNrYikpXFxuMjM0MzpcXHRcXHRcXHRcXHRza2JfY2xvbmVfZnJhZ2xpc3Qoc2tiKTtcXG4yMzQ0OlxcdFxcbjIzNDU6XFx0XFx0XFx0c2tiX3JlbGVhc2VfZGF0YShza2IsIFNLQl9DT05TVU1FRCk7XFxuMjM0NjpcXHRcXHR9IGVsc2Uge1xcbjIzNDc6XFx0XFx0XFx0c2tiX2ZyZWVfaGVhZChza2IpO1xcbjIzNDg6XFx0XFx0fVxcbjIzNDk6XFx0XFx0b2ZmID0gKGRhdGEgKyBuaGVhZCkgLSBza2ItXFx1MDAzZWhlYWQ7XFxuMjM1MDpcXHRcXG4yMzUxOlxcdFxcdHNrYi1cXHUwMDNlaGVhZCAgICAgPSBkYXRhO1xcbjIzNTI6XFx0XFx0c2tiLVxcdTAwM2VoZWFkX2ZyYWcgPSAwO1xcbjIzNTM6XFx0XFx0c2tiLVxcdTAwM2VkYXRhICAgICs9IG9mZjtcXG4yMzU0OlxcdFxcbjIzNTU6XFx0XFx0c2tiX3NldF9lbmRfb2Zmc2V0KHNrYiwgc2l6ZSk7XFxuMjM1NjpcXHQjaWZkZWYgTkVUX1NLQlVGRl9EQVRBX1VTRVNfT0ZGU0VUXFxuMjM1NzpcXHRcXHRvZmYgICAgICAgICAgID0gbmhlYWQ7XFxuMjM1ODpcXHQjZW5kaWZcXG4yMzU5OlxcdFxcdHNrYi1cXHUwMDNldGFpbFxcdCAgICAgICs9IG9mZjtcXG4yMzYwOlxcdFxcdHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUoc2tiLCBuaGVhZCk7XFxuMjM2MTpcXHRcXHRza2ItXFx1MDAzZWNsb25lZCAgID0gMDtcXG4yMzYyOlxcdFxcdHNrYi1cXHUwMDNlaGRyX2xlbiAgPSAwO1xcbjIzNjM6XFx0XFx0c2tiLVxcdTAwM2Vub2hkciAgICA9IDA7XFxuMjM2NDpcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWRhdGFyZWYsIDEpO1xcbjIzNjU6XFx0XFxuMjM2NjpcXHRcXHQvKiBJdCBpcyBub3QgZ2VuZXJhbGx5IHNhZmUgdG8gY2hhbmdlIHNrYi1cXHUwMDNldHJ1ZXNpemUuXFxuMjM2NzpcXHRcXHQgKiBGb3IgdGhlIG1vbWVudCwgd2UgcmVhbGx5IGNhcmUgb2YgcnggcGF0aCwgb3JcXG4yMzY4OlxcdFxcdCAqIHdoZW4gc2tiIGlzIG9ycGhhbmVkIChub3QgYXR0YWNoZWQgdG8gYSBzb2NrZXQpLlxcbjIzNjk6XFx0XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDExOjI2OjQwLjA4MDUxMTczMloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMzc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2ODQwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2ODQwOlxcdFxcdGRhdGEgPSBrbWFsbG9jX3Jlc2VydmUoXFx1MDAyNnNpemUsIGdmcF9tYXNrLCBOVU1BX05PX05PREUsIE5VTEwpO1xcbjY4NDE6XFx0XFx0aWYgKCFkYXRhKVxcbjY4NDI6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuNjg0MzpcXHRcXHRzaXplID0gU0tCX1dJVEhfT1ZFUkhFQUQoc2l6ZSk7XFxuNjg0NDpcXHRcXG42ODQ1OlxcdFxcdC8qIENvcHkgcmVhbCBkYXRhLCBhbmQgYWxsIGZyYWdzICovXFxuNjg0NjpcXHRcXHRza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhX29mZnNldChza2IsIG9mZiwgZGF0YSwgbmV3X2hsZW4pO1xcbjY4NDc6XFx0XFx0c2tiLVxcdTAwM2VsZW4gLT0gb2ZmO1xcbjY4NDg6XFx0XFxuNjg0OTpcXHRcXHQvKiBSZW1vdmUgU0tCRkxfTUFOQUdFRF9GUkFHX1JFRlMgaW5zdGVhZCBvZiB0cnlpbmcgdG8gaG9ub3VyIGl0XFxuNjg1MDpcXHRcXHQgKiB3aGlsZSByZWZjb3VudGluZyBmcmFncyBiZWxvdy5cXG42ODUxOlxcdFxcdCAqL1xcbjY4NTI6XFx0XFx0c2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYik7XFxuNjg1MzpcXHRcXG42ODU0OlxcdFxcdG1lbWNweSgoc3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqKShkYXRhICsgc2l6ZSksXFxuNjg1NTpcXHRcXHQgICAgICAgc2tiX3NoaW5mbyhza2IpLFxcbjY4NTY6XFx0XFx0ICAgICAgIG9mZnNldG9mKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8sXFxuNjg1NzpcXHRcXHRcXHRcXHRmcmFnc1tza2Jfc2hpbmZvKHNrYiktXFx1MDAzZW5yX2ZyYWdzXSkpO1xcbjY4NTg6XFx0XFx0aWYgKHNrYl9kYXRhX2lzX3NoYXJlZChza2IpKSB7XFxuNjg1OTpcXHRcXHRcXHQvKiBkcm9wIHRoZSBvbGQgaGVhZCBncmFjZWZ1bGx5ICovXFxuNjg2MDpcXHRcXHRcXHRpZiAoc2tiX29ycGhhbl9mcmFncyhza2IsIGdmcF9tYXNrKSkge1xcbjY4NjE6XFx0XFx0XFx0XFx0c2tiX2tmcmVlX2hlYWQoZGF0YSk7XFxuNjg2MjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG42ODYzOlxcdFxcdFxcdH1cXG42ODY0OlxcdFxcdFxcdGlmIChza2JfemNvcHkoc2tiKSlcXG42ODY1OlxcdFxcdFxcdFxcdG5ldF96Y29weV9nZXQoc2tiX3Vhcmcoc2tiKSk7XFxuNjg2NjpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc2tiX3NoaW5mbyhza2IpLVxcdTAwM2Vucl9mcmFnczsgaSsrKVxcbjY4Njc6XFx0XFx0XFx0XFx0c2tiX2ZyYWdfcmVmKHNrYiwgaSk7XFxuNjg2ODpcXHRcXHRcXHRpZiAoc2tiX2hhc19mcmFnX2xpc3Qoc2tiKSlcXG42ODY5OlxcdFxcdFxcdFxcdHNrYl9jbG9uZV9mcmFnbGlzdChza2IpO1xcbjY4NzA6XFx0XFx0XFx0c2tiX3JlbGVhc2VfZGF0YShza2IsIFNLQl9DT05TVU1FRCk7XFxuNjg3MTpcXHRcXHR9IGVsc2Uge1xcbjY4NzI6XFx0XFx0XFx0Lyogd2UgY2FuIHJldXNlIGV4aXN0aW5nIHJlY291bnQtIGFsbCB3ZSBkaWQgd2FzXFxuNjg3MzpcXHRcXHRcXHQgKiByZWxvY2F0ZSB2YWx1ZXNcXG42ODc0OlxcdFxcdFxcdCAqL1xcbjY4NzU6XFx0XFx0XFx0c2tiX2ZyZWVfaGVhZChza2IpO1xcbjY4NzY6XFx0XFx0fVxcbjY4Nzc6XFx0XFxuNjg3ODpcXHRcXHRza2ItXFx1MDAzZWhlYWQgPSBkYXRhO1xcbjY4Nzk6XFx0XFx0c2tiLVxcdTAwM2VkYXRhID0gZGF0YTtcXG42ODgwOlxcdFxcdHNrYi1cXHUwMDNlaGVhZF9mcmFnID0gMDtcXG42ODgxOlxcdFxcdHNrYl9zZXRfZW5kX29mZnNldChza2IsIHNpemUpO1xcbjY4ODI6XFx0XFx0c2tiX3NldF90YWlsX3BvaW50ZXIoc2tiLCBza2JfaGVhZGxlbihza2IpKTtcXG42ODgzOlxcdFxcdHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUoc2tiLCAwKTtcXG42ODg0OlxcdFxcdHNrYi1cXHUwMDNlY2xvbmVkID0gMDtcXG42ODg1OlxcdFxcdHNrYi1cXHUwMDNlaGRyX2xlbiA9IDA7XFxuNjg4NjpcXHRcXHRza2ItXFx1MDAzZW5vaGRyID0gMDtcXG42ODg3OlxcdFxcdGF0b21pY19zZXQoXFx1MDAyNnNrYl9zaGluZm8oc2tiKS1cXHUwMDNlZGF0YXJlZiwgMSk7XFxuNjg4ODpcXHRcXG42ODg5OlxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMToyNjo0MC4wODA4MTY2NDJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDM4NDA0NzA4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgcXVlc3Rpb25zOlxuXG4qKkFuYWx5emluZyBgc2tiX2RhdGFfaXNfc2hhcmVkYCBhbmQgdGhlIGBza2JfY2xvbmVkYCBDaGFuZ2UqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGNvcmUgb2YgdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBgc2tiX2RhdGFfaXNfc2hhcmVkYCBhbmQsIHNwZWNpZmljYWxseSwgd2h5IHRoZSBgc2tiX2Nsb25lZChza2IpYCBjaGVjayB3YXMgbW9kaWZpZWQuIEkga25vdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBkYXRhIHNoYXJpbmcgYW5kIGNsb25pbmcgd2l0aGluIGBza19idWZmYCBzdHJ1Y3R1cmVzLlxuXG5NeSBpbW1lZGlhdGUgcGxhbiBpcyB0byBleGFtaW5lIHRoZSByZWxldmFudCBkZWZpbml0aW9ucyB3aXRoaW4gYGluY2x1ZGUvbGludXgvc2tidWZmLmhgLiBJJ2xsIGZvY3VzIG9uIHRoZSBzZWN0aW9ucyBhcm91bmQgbGluZXMgMTI5MC0xMzIwIGFuZCAyMDE1LTIwNDAuIE15IGh5cG90aGVzaXMgaXMgdGhhdCB0aGUgY2hhbmdlIGxpa2VseSByZXZvbHZlcyBhcm91bmQgb3B0aW1pc2luZywgc2ltcGxpZnlpbmcgb3IgY2xhcmlmeWluZyB0aGUgbG9naWMgcmVsYXRlZCB0byByZWZlcmVuY2UgY291bnRpbmcsIGRhdGEgc2hhcmluZywgb3IgcGVyaGFwcyBldmVuIGluIHRoZSBoYW5kbGluZyBvZiBmcmFnbWVudGVkIHNrYnMsIHBhcnRpY3VsYXJseSBpbiB0aGUgY29udGV4dCBvZiByZWNlbnQgbmV0d29yayBzdGFjayBpbXByb3ZlbWVudHMgb3Igc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMuIEkgd2lsbCBiZSBsb29raW5nIGZvciBjb25kaXRpb25hbCBjb21waWxhdGlvbnMsIGlubGluZSBmdW5jdGlvbnMsIGFuZCBtYWNybyBkZWZpbml0aW9ucyByZWxhdGVkIHRvIGRhdGEgc2hhcmluZyBhbmQgY2xvbmluZy4gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSB1c2Ugb2YgYXRvbWljIG9wZXJhdGlvbnMgYW5kIG1lbW9yeSBiYXJyaWVycywgYmVjYXVzZSB0aGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgc3VidGxlIGJ1dCBjcml0aWNhbCBwZXJmb3JtYW5jZSBhbmQgY29uY3VycmVuY3kgaXNzdWVzIGFyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDkxMywiT3V0cHV0VG9rZW5zIjo3NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTE6MjY6NTAuNDY0ODY2MDY5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEyMTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvc2tidWZmLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTI5MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI5MDpcXHRcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0RFQlVHX05FVCkgXFx1MDAyNlxcdTAwMjYgbGlrZWx5KHJlZmNvdW50X3JlYWQoXFx1MDAyNnNrYi1cXHUwMDNldXNlcnMpID09IDEpKVxcbjEyOTE6XFx0XFx0XFx0c21wX3JtYigpO1xcbjEyOTI6XFx0XFx0ZWxzZSBpZiAobGlrZWx5KCFyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNnNrYi1cXHUwMDNldXNlcnMpKSlcXG4xMjkzOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4xMjk0OlxcdFxcbjEyOTU6XFx0XFx0cmV0dXJuIHRydWU7XFxuMTI5NjpcXHR9XFxuMTI5NzpcXHRcXG4xMjk4OlxcdHN0YXRpYyBpbmxpbmUgaW50IHNrYl9kYXRhcmVmX2JpYXMoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xMjk5OlxcdHtcXG4xMzAwOlxcdFxcdHJldHVybiBza2ItXFx1MDAzZW5vaGRyID8gKDEgXFx1MDAzY1xcdTAwM2MgU0tCX0RBVEFSRUZfU0hJRlQpICsgMSA6IDE7XFxuMTMwMTpcXHR9XFxuMTMwMjpcXHRcXG4xMzAzOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBza2JfZGF0YV91bnJlZihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbjEzMDQ6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaGluZm8pXFxuMTMwNTpcXHR7XFxuMTMwNjpcXHRcXHRpbnQgYmlhcztcXG4xMzA3OlxcdFxcbjEzMDg6XFx0XFx0aWYgKCFza2ItXFx1MDAzZWNsb25lZClcXG4xMzA5OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjEzMTA6XFx0XFxuMTMxMTpcXHRcXHRiaWFzID0gc2tiX2RhdGFyZWZfYmlhcyhza2IpO1xcbjEzMTI6XFx0XFxuMTMxMzpcXHRcXHRpZiAoYXRvbWljX3JlYWQoXFx1MDAyNnNoaW5mby1cXHUwMDNlZGF0YXJlZikgPT0gYmlhcylcXG4xMzE0OlxcdFxcdFxcdHNtcF9ybWIoKTtcXG4xMzE1OlxcdFxcdGVsc2UgaWYgKGF0b21pY19zdWJfcmV0dXJuKGJpYXMsIFxcdTAwMjZzaGluZm8tXFx1MDAzZWRhdGFyZWYpKVxcbjEzMTY6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjEzMTc6XFx0XFxuMTMxODpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4xMzE5OlxcdH1cXG4xMzIwOlxcdFxcbjEzMjE6XFx0dm9pZCBfX2ZpeF9hZGRyZXNzIHNrX3NrYl9yZWFzb25fZHJvcChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuMTMyMjpcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbjEzMjM6XFx0XFx0XFx0XFx0XFx0ICAgICAgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKTtcXG4xMzI0OlxcdFxcbjEzMjU6XFx0c3RhdGljIGlubGluZSB2b2lkXFxuMTMyNjpcXHRrZnJlZV9za2JfcmVhc29uKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbilcXG4xMzI3OlxcdHtcXG4xMzI4OlxcdFxcdHNrX3NrYl9yZWFzb25fZHJvcChOVUxMLCBza2IsIHJlYXNvbik7XFxuMTMyOTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDExOjI2OjUwLjQ2NTA3OTc5OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3Mzk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwMTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIwMTU6XFx0ICpcXHR0byB0aGUgYnVmZmVyLlxcbjIwMTY6XFx0ICovXFxuMjAxNzpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpza2JfZ2V0KHN0cnVjdCBza19idWZmICpza2IpXFxuMjAxODpcXHR7XFxuMjAxOTpcXHRcXHRyZWZjb3VudF9pbmMoXFx1MDAyNnNrYi1cXHUwMDNldXNlcnMpO1xcbjIwMjA6XFx0XFx0cmV0dXJuIHNrYjtcXG4yMDIxOlxcdH1cXG4yMDIyOlxcdFxcbjIwMjM6XFx0LypcXG4yMDI0OlxcdCAqIElmIHVzZXJzID09IDEsIHdlIGFyZSB0aGUgb25seSBvd25lciBhbmQgY2FuIGF2b2lkIHJlZHVuZGFudCBhdG9taWMgY2hhbmdlcy5cXG4yMDI1OlxcdCAqL1xcbjIwMjY6XFx0XFxuMjAyNzpcXHRzdGF0aWMgaW5saW5lIGJvb2wgc2tiX2RhdGFfaXNfc2hhcmVkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuMjAyODpcXHR7XFxuMjAyOTpcXHRcXHRyZXR1cm4gc2tiLVxcdTAwM2VjbG9uZWQgXFx1MDAyNlxcdTAwMjZcXG4yMDMwOlxcdFxcdCAgICAgICBhdG9taWNfcmVhZChcXHUwMDI2c2tiX3NoaW5mbyhza2IpLVxcdTAwM2VkYXRhcmVmKSAhPSBza2JfZGF0YXJlZl9iaWFzKHNrYik7XFxuMjAzMTpcXHR9XFxuMjAzMjpcXHRcXG4yMDMzOlxcdC8qKlxcbjIwMzQ6XFx0ICpcXHRza2JfY2xvbmVkIC0gaXMgdGhlIGJ1ZmZlciBhIGNsb25lXFxuMjAzNTpcXHQgKlxcdEBza2I6IGJ1ZmZlciB0byBjaGVja1xcbjIwMzY6XFx0ICpcXG4yMDM3OlxcdCAqXFx0UmV0dXJucyB0cnVlIGlmIHRoZSBidWZmZXIgd2FzIGdlbmVyYXRlZCB3aXRoIHNrYl9jbG9uZSgpIGFuZCBpc1xcbjIwMzg6XFx0ICpcXHRvbmUgb2YgbXVsdGlwbGUgc2hhcmVkIGNvcGllcyBvZiB0aGUgYnVmZmVyLiBDbG9uZWQgYnVmZmVycyBhcmVcXG4yMDM5OlxcdCAqXFx0c2hhcmVkIGRhdGEgc28gbXVzdCBub3QgYmUgd3JpdHRlbiB0byB1bmRlciBub3JtYWwgY2lyY3Vtc3RhbmNlcy5cXG4yMDQwOlxcdCAqL1xcbjIwNDE6XFx0c3RhdGljIGlubGluZSBpbnQgc2tiX2Nsb25lZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjIwNDI6XFx0e1xcbjIwNDM6XFx0XFx0cmV0dXJuIHNrYi1cXHUwMDNlY2xvbmVkIFxcdTAwMjZcXHUwMDI2XFxuMjA0NDpcXHRcXHQgICAgICAgKGF0b21pY19yZWFkKFxcdTAwMjZza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWRhdGFyZWYpIFxcdTAwMjYgU0tCX0RBVEFSRUZfTUFTSykgIT0gMTtcXG4yMDQ1OlxcdH1cXG4yMDQ2OlxcdFxcbjIwNDc6XFx0c3RhdGljIGlubGluZSBpbnQgc2tiX3VuY2xvbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgcHJpKVxcbjIwNDg6XFx0e1xcbjIwNDk6XFx0XFx0bWlnaHRfc2xlZXBfaWYoZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcocHJpKSk7XFxuMjA1MDpcXHRcXG4yMDUxOlxcdFxcdGlmIChza2JfY2xvbmVkKHNrYikpXFxuMjA1MjpcXHRcXHRcXHRyZXR1cm4gcHNrYl9leHBhbmRfaGVhZChza2IsIDAsIDAsIHByaSk7XFxuMjA1MzpcXHRcXG4yMDU0OlxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMToyNjo1MC40NjUzNTU2MDlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjk4NjAzNTg2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENsb25lZCBTS0IgQ29uZGl0aW9uKipcblxuT2theSwgaGVyZSB3ZSBnbywgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29kZSdzIHVzaW5nIGBza2JfY2xvbmVkKHNrYilgIHRvIGRldGVybWluZSBpZiBhIHNvY2tldCBidWZmZXIgKHNrYikgaXMgYSBjbG9uZSwgcmlnaHQ/IEFuZCBpdCBkb2VzIHRoYXQgYnkgY2hlY2tpbmcgYChhdG9taWNfcmVhZChcdTAwMjZza2Jfc2hpbmZvKHNrYiktXHUwMDNlZGF0YXJlZikgXHUwMDI2IFNLQl9EQVRBUkVGX01BU0spICE9IDFgLiBCdXQsIGhlcmUncyB0aGUga2lja2VyOiB3aGVuIGBza2ItXHUwMDNlbm9oZHJgIGlzIHNldCDigJMgd2hpY2ggaGFwcGVucyBpbiBwbGFjZXMgbGlrZSBgc2tiX2hlYWRlcl9yZWxlYXNlYCB3aGVyZSB3ZSAqYWRkKiBgKDEgXHUwMDNjXHUwMDNjIFNLQl9EQVRBUkVGX1NISUZUKWAgdG8gdGhlIGRhdGFyZWYgLSB0aGlzIGNoZWNrICpvbmx5KiBsb29rcyBhdCBgXHUwMDI2IFNLQl9EQVRBUkVGX01BU0sgIT0gMWAuIFRoYXQgZmVlbHMuLi4gaW5jb21wbGV0ZS5cblxuTXkgY29uY2VybiBpcyB3aGF0IGhhcHBlbnMgaWYgZGF0YXJlZiBpcyBgKDEgXHUwMDNjXHUwMDNjIFNLQl9EQVRBUkVGX1NISUZUKSArIDFgPyAgQmVjYXVzZSB0aGVuIHRoZSBBTkQgb3BlcmF0aW9uIHdpdGggYFNLQl9EQVRBUkVGX01BU0tgIHJlc3VsdHMgaW4gYDFgLiBXaGljaCBtZWFucyBgc2tiX2Nsb25lZChza2IpYCB3b3VsZCByZXR1cm4gYDBgIChmYWxzZSkgZXZlbiB0aG91Z2ggd2UgaGF2ZSBhIGNsb25lIChvciBoZWFkZXIgY2xvbmUpIGFuZCBgc2tiLVx1MDAzZW5vaGRyYCBpcyB0cnVlLiBUaGF0J3MgYSBkZWZpbml0ZSBlZGdlIGNhc2UuIFRoaXMgY2FuJ3QgYmUgcmlnaHQhIFdoYXQncyBnb2luZyBvbiB3aXRoIHRoZSBkYXRhcmVmIGluIHRoYXQgc2l0dWF0aW9uP1xuXG5TbywgaWYgYHNrYi1cdTAwM2Vub2hkcmAgaXMgdHJ1ZSwgYW5kIHdlICpkbyogaGF2ZSBhIGNsb25lIG9yIGEgaGVhZGVyIGNsb25lLCB3aGF0IGV4YWN0bHkgaXMgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kPyBJdCBzZWVtcyBsaWtlIHRoaXMgc2l0dWF0aW9uIGlzIGluY29ycmVjdGx5IGV2YWx1YXRlZCBieSB0aGlzIGNoZWNrLiBMZXQncyBkaWcgZGVlcGVyLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZXhhbWluaW5nIGBza2JfaGVhZGVyX3JlbGVhc2VgIGFuZCB0aGUgYG5vaGRyYCBmbGFnJ3MgdXNhZ2UgaW4gYHNrYnVmZi5jYCBhbmQgZWxzZXdoZXJlLiAgQSBxdWljayBzZWFyY2ggZm9yIGBub2hkcmAgYW5kIGBTS0JfREFUQVJFRl9TSElGVGAgd2lsbCBob3BlZnVsbHkgaWxsdW1pbmF0ZSB0aGUgY29udHJvbCBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTM3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTE6Mjc6MDMuNDUxMzkzNDUxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjQzNzk5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJTS0JfREFUQVJFRl9TSElGVHxub2hkclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfbWRiLmM9NzA9aW50IGJyX3Jwb3J0c19maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTA5LVxcbm5ldC9icmlkZ2UvYnJfbWRiLmM6MTEwOlxcdFxcdGlmIChubGFfcHV0X25vaGRyKHNrYiwgc2l6ZW9mKHUzMiksIFxcdTAwMjZwLVxcdTAwM2VkZXYtXFx1MDAzZWlmaW5kZXgpIHx8XFxubmV0L2JyaWRnZS9icl9tZGIuYy0xMTEtXFx0XFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgTURCQV9ST1VURVJfUEFUVFJfVElNRVIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jPTIzMj1zdGF0aWMgaW50IF9fbWRiX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tZGIuYy0yNzEtXFxubmV0L2JyaWRnZS9icl9tZGIuYzoyNzI6XFx0aWYgKG5sYV9wdXRfbm9oZHIoc2tiLCBzaXplb2YoZSksIFxcdTAwMjZlKSB8fFxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMjczLVxcdCAgICBubGFfcHV0X3UzMihza2IsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jPTU2NT1zdGF0aWMgaW50IG5sbXNnX3BvcHVsYXRlX3J0cl9maWxsKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jLTU4OC1cXHRcXHRnb3RvIGVuZDtcXG5uZXQvYnJpZGdlL2JyX21kYi5jOjU4OTpcXHRpZiAobmxhX3B1dF9ub2hkcihza2IsIHNpemVvZih1MzIpLCBcXHUwMDI2aWZpbmRleCkpIHtcXG5uZXQvYnJpZGdlL2JyX21kYi5jLTU5MC1cXHRcXHRubGFfbmVzdF9jYW5jZWwoc2tiLCBwb3J0X25lc3QpO1xcbi0tXFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM9MjE2PXN0YXRpYyB2b2lkIHRyYWNlX2Ryb3BfY29tbW9uKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmxvY2F0aW9uKVxcbi0tXFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtMjUwLVxcdCAqL1xcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jOjI1MTpcXHRfX25sYV9yZXNlcnZlX25vaGRyKGRza2IsIHNpemVvZihzdHJ1Y3QgbmV0X2RtX2Ryb3BfcG9pbnQpKTtcXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy0yNTItXFx0bmxhLVxcdTAwM2VubGFfbGVuICs9IE5MQV9BTElHTihzaXplb2Yoc3RydWN0IG5ldF9kbV9kcm9wX3BvaW50KSk7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0xNjEwPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqX19za2JfY2xvbmUoc3RydWN0IHNrX2J1ZmYgKm4sIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0xNjIwLVxcdEMobWFjX2xlbik7XFxubmV0L2NvcmUvc2tidWZmLmM6MTYyMTpcXHRuLVxcdTAwM2VoZHJfbGVuID0gc2tiLVxcdTAwM2Vub2hkciA/IHNrYl9oZWFkcm9vbShza2IpIDogc2tiLVxcdTAwM2VoZHJfbGVuO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTE2MjItXFx0bi1cXHUwMDNlY2xvbmVkID0gMTtcXG5uZXQvY29yZS9za2J1ZmYuYzoxNjIzOlxcdG4tXFx1MDAzZW5vaGRyID0gMDtcXG5uZXQvY29yZS9za2J1ZmYuYy0xNjI0LVxcdG4tXFx1MDAzZXBlZWtlZCA9IDA7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0yMjk3PWludCBwc2tiX2V4cGFuZF9oZWFkKHN0cnVjdCBza19idWZmICpza2IsIGludCBuaGVhZCwgaW50IG50YWlsLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjM2Mi1cXHRza2ItXFx1MDAzZWhkcl9sZW4gID0gMDtcXG5uZXQvY29yZS9za2J1ZmYuYzoyMzYzOlxcdHNrYi1cXHUwMDNlbm9oZHIgICAgPSAwO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTIzNjQtXFx0YXRvbWljX3NldChcXHUwMDI2c2tiX3NoaW5mbyhza2IpLVxcdTAwM2VkYXRhcmVmLCAxKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTY4Mjk9c3RhdGljIGludCBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTMyIG9mZixcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTY4ODUtXFx0c2tiLVxcdTAwM2VoZHJfbGVuID0gMDtcXG5uZXQvY29yZS9za2J1ZmYuYzo2ODg2OlxcdHNrYi1cXHUwMDNlbm9oZHIgPSAwO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTY4ODctXFx0YXRvbWljX3NldChcXHUwMDI2c2tiX3NoaW5mbyhza2IpLVxcdTAwM2VkYXRhcmVmLCAxKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTY5NTA9c3RhdGljIGludCBwc2tiX2NhcnZlX2luc2lkZV9ub25saW5lYXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTMyIG9mZixcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTcwMjUtXFx0c2tiLVxcdTAwM2VoZHJfbGVuICA9IDA7XFxubmV0L2NvcmUvc2tidWZmLmM6NzAyNjpcXHRza2ItXFx1MDAzZW5vaGRyICAgID0gMDtcXG5uZXQvY29yZS9za2J1ZmYuYy03MDI3LVxcdHNrYi1cXHUwMDNlbGVuIC09IG9mZjtcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0xNjc2PWludCBmaWJfYWRkX25leHRob3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IGZpYl9uaF9jb21tb24gKm5oYyxcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xNjgyLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoxNjgzOlxcdHJ0bmggPSBubGFfcmVzZXJ2ZV9ub2hkcihza2IsIHNpemVvZigqcnRuaCkpO1xcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xNjg0LVxcdGlmICghcnRuaClcXG4tLVxcbm5ldC9pcHY0L2lwbXJfYmFzZS5jPTIxNj1pbnQgbXJfZmlsbF9tcm91dGUoc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9pcG1yX2Jhc2UuYy0yNTMtXFxubmV0L2lwdjQvaXBtcl9iYXNlLmM6MjU0OlxcdFxcdFxcdG5ocCA9IG5sYV9yZXNlcnZlX25vaGRyKHNrYiwgc2l6ZW9mKCpuaHApKTtcXG5uZXQvaXB2NC9pcG1yX2Jhc2UuYy0yNTUtXFx0XFx0XFx0aWYgKCFuaHApIHtcXG4tLVxcbm5ldC9tcGxzL2FmX21wbHMuYz0yMDM4PXN0YXRpYyBpbnQgbXBsc19kdW1wX3JvdXRlKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwb3J0aWQsIHUzMiBzZXEsIGludCBldmVudCxcXG4tLVxcbm5ldC9tcGxzL2FmX21wbHMuYy0yMTAzLVxcbm5ldC9tcGxzL2FmX21wbHMuYzoyMTA0OlxcdFxcdFxcdHJ0bmggPSBubGFfcmVzZXJ2ZV9ub2hkcihza2IsIHNpemVvZigqcnRuaCkpO1xcbm5ldC9tcGxzL2FmX21wbHMuYy0yMTA1LVxcdFxcdFxcdGlmICghcnRuaClcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz0xNzY2PXN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF9kZWZhdWx0X2xpbWl0KHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbyxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xNzczLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxNzc0OlxcdHJldHVybiBubGFfcHV0X25vaGRyKHJlcGx5LCBzaXplb2Yoem9uZV9saW1pdCksIFxcdTAwMjZ6b25lX2xpbWl0KTtcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTc3NS19XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MTc3Nz1zdGF0aWMgaW50IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xNzkxLVxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmNvbm5jb3VudF9rZXkpO1xcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxNzkyOlxcdHJldHVybiBubGFfcHV0X25vaGRyKHJlcGx5LCBzaXplb2Yoem9uZV9saW1pdCksIFxcdTAwMjZ6b25lX2xpbWl0KTtcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTc5My19XFxuLS1cXG5uZXQvcGFja2V0L2RpYWcuYz0zOD1zdGF0aWMgaW50IHBkaWFnX3B1dF9tY2xpc3QoY29uc3Qgc3RydWN0IHBhY2tldF9zb2NrICpwbywgc3RydWN0IHNrX2J1ZmYgKm5sc2tiKVxcbi0tXFxubmV0L3BhY2tldC9kaWFnLmMtNTAtXFxubmV0L3BhY2tldC9kaWFnLmM6NTE6XFx0XFx0ZG1sID0gbmxhX3Jlc2VydmVfbm9oZHIobmxza2IsIHNpemVvZigqZG1sKSk7XFxubmV0L3BhY2tldC9kaWFnLmMtNTItXFx0XFx0aWYgKCFkbWwpIHtcXG4tLVxcbm5ldC9zY2hlZC9lbV9jYW5pZC5jPTE5Mz1zdGF0aWMgaW50IGVtX2NhbmlkX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjZl9lbWF0Y2ggKm0pXFxuLS1cXG5uZXQvc2NoZWQvZW1fY2FuaWQuYy0yMDAtXFx0ICovXFxubmV0L3NjaGVkL2VtX2NhbmlkLmM6MjAxOlxcdGlmIChubGFfcHV0X25vaGRyKHNrYiwgc2l6ZW9mKHN0cnVjdCBjYW5fZmlsdGVyKSAqIGNtLVxcdTAwM2VydWxlc19jb3VudCxcXG5uZXQvc2NoZWQvZW1fY2FuaWQuYy0yMDItXFx0ICAgIFxcdTAwMjZjbS1cXHUwMDNlcnVsZXNfcmF3KSBcXHUwMDNjIDApXFxuLS1cXG5uZXQvc2NoZWQvZW1fdGV4dC5jPTExMz1zdGF0aWMgaW50IGVtX3RleHRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNmX2VtYXRjaCAqbSlcXG4tLVxcbm5ldC9zY2hlZC9lbV90ZXh0LmMtMTI1LVxcbm5ldC9zY2hlZC9lbV90ZXh0LmM6MTI2OlxcdGlmIChubGFfcHV0X25vaGRyKHNrYiwgc2l6ZW9mKGNvbmYpLCBcXHUwMDI2Y29uZikgXFx1MDAzYyAwKVxcbm5ldC9zY2hlZC9lbV90ZXh0LmMtMTI3LVxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbi0tXFxubmV0L3NjaGVkL2VtYXRjaC5jPTQzNz1pbnQgdGNmX2VtX3RyZWVfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNmX2VtYXRjaF90cmVlICp0cmVlLCBpbnQgdGx2KVxcbi0tXFxubmV0L3NjaGVkL2VtYXRjaC5jLTQ3Mi1cXHRcXHRcXHR1MzIgdSA9IGVtLVxcdTAwM2VkYXRhO1xcbm5ldC9zY2hlZC9lbWF0Y2guYzo0NzM6XFx0XFx0XFx0bmxhX3B1dF9ub2hkcihza2IsIHNpemVvZih1KSwgXFx1MDAyNnUpO1xcbm5ldC9zY2hlZC9lbWF0Y2guYy00NzQtXFx0XFx0fSBlbHNlIGlmIChlbS1cXHUwMDNlZGF0YWxlbiBcXHUwMDNlIDApXFxubmV0L3NjaGVkL2VtYXRjaC5jOjQ3NTpcXHRcXHRcXHRubGFfcHV0X25vaGRyKHNrYiwgZW0tXFx1MDAzZWRhdGFsZW4sICh2b2lkICopIGVtLVxcdTAwM2VkYXRhKTtcXG5uZXQvc2NoZWQvZW1hdGNoLmMtNDc2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMToyNzowMy41Mzc4MzY0MzVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDIzNjgxOTYwOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gYHNrYl9oZWFkZXJfcmVsZWFzZWAqKlxuXG5Pa2F5LCBsZXQncyBwdWxsIHVwIHRoZSBkZWZpbml0aW9uIG9mIGBza2JfaGVhZGVyX3JlbGVhc2VgLiBJIGtub3cgaXQncyBpbiBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAsIHNvIGxldCdzIGdldCB0aGF0IGZpbGUgb3Blbi4gSSdtIHByaW1hcmlseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIGBza2JgIChzb2NrZXQgYnVmZmVyKSBzdHJ1Y3R1cmUgYW5kIGl0cyBoZWFkZXIuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50cmljYWNpZXMgb2YgaGVhZGVyIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBrZXJuZWwncyBuZXR3b3JrIHN0YWNrLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBzZWUgaG93IG1lbW9yeSBpcyBkZWFsbG9jYXRlZCBhbmQsIGFuZCB1bmRlciB3aGF0IGNpcmN1bXN0YW5jZXMgdGhlIGRhdGEgYnVmZmVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgc29ja2V0IGJ1ZmZlciBpcyB1cGRhdGVkIHRvIHBvaW50IHRvIHRoZSBuZXcgZGF0YS4gSSBhbHNvIHdhbnQgdG8gbWFrZSBzdXJlIEkgYW0gZnVsbHkgdXAgdG8gc3BlZWQgb24gd2hlbiB0aGlzIGlzIGNhbGxlZCwgYW5kIHdoYXQgdGhlIGVmZmVjdCBpcyBvbiByZWZlcmVuY2VzIHRvIHRoZSBidWZmZXIsIHRvIGF2b2lkIGRvdWJsZSBmcmVlaW5nLiBUaGUgaW50ZW50aW9uIGlzIHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCBtZW1vcnkgbGVha3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1MjUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMToyNzo0NS45MDYwMzU1NjlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3ODIzMTAyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza2JfaGVhZGVyX3JlbGVhc2V8U0tCX0RBVEFSRUZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9za2J1ZmYuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTU5Mz1zdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNjQxLSAqIFRoZSBjcmVhdG9yIG9mIHRoZSBza2IgKGUuZy4gVENQKSBtYXJrcyBpdHMgc2tiIGFzIFxcdTAwMjZza19idWZmLm5vaGRyXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo2NDI6ICogKHZpYSBfX3NrYl9oZWFkZXJfcmVsZWFzZSgpKS4gQW55IGNsb25lIGNyZWF0ZWQgZnJvbSBtYXJrZWQgc2tiIHdpbGwgZ2V0XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC02NDMtICogXFx1MDAyNnNrX2J1ZmYuaGRyX2xlbiBwb3B1bGF0ZWQgd2l0aCB0aGUgYXZhaWxhYmxlIGhlYWRyb29tLlxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC02NDgtICogIHNrYl9yZXNlcnZlKClcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjY0OTogKiAgX19za2JfaGVhZGVyX3JlbGVhc2UoKVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNjUwLSAqICBza2JfY2xvbmUoKVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC02NTctICovXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo2NTg6I2RlZmluZSBTS0JfREFUQVJFRl9TSElGVCAxNlxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NjU5OiNkZWZpbmUgU0tCX0RBVEFSRUZfTUFTSyAoKDEgXFx1MDAzY1xcdTAwM2MgU0tCX0RBVEFSRUZfU0hJRlQpIC0gMSlcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTY2MC1cXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MTI5OD1zdGF0aWMgaW5saW5lIGludCBza2JfZGF0YXJlZl9iaWFzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xMjk5LXtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjEzMDA6XFx0cmV0dXJuIHNrYi1cXHUwMDNlbm9oZHIgPyAoMSBcXHUwMDNjXFx1MDAzYyBTS0JfREFUQVJFRl9TSElGVCkgKyAxIDogMTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTEzMDEtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0yMDQxPXN0YXRpYyBpbmxpbmUgaW50IHNrYl9jbG9uZWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMjA0My1cXHRyZXR1cm4gc2tiLVxcdTAwM2VjbG9uZWQgXFx1MDAyNlxcdTAwMjZcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjIwNDQ6XFx0ICAgICAgIChhdG9taWNfcmVhZChcXHUwMDI2c2tiX3NoaW5mbyhza2IpLVxcdTAwM2VkYXRhcmVmKSBcXHUwMDI2IFNLQl9EQVRBUkVGX01BU0spICE9IDE7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0yMDQ1LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MjA4MD1zdGF0aWMgaW5saW5lIGludCBza2JfaGVhZGVyX2Nsb25lZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0yMDg3LVxcdGRhdGFyZWYgPSBhdG9taWNfcmVhZChcXHUwMDI2c2tiX3NoaW5mbyhza2IpLVxcdTAwM2VkYXRhcmVmKTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjIwODg6XFx0ZGF0YXJlZiA9IChkYXRhcmVmIFxcdTAwMjYgU0tCX0RBVEFSRUZfTUFTSykgLSAoZGF0YXJlZiBcXHUwMDNlXFx1MDAzZSBTS0JfREFUQVJFRl9TSElGVCk7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0yMDg5LVxcdHJldHVybiBkYXRhcmVmICE9IDE7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTIwOTI9c3RhdGljIGlubGluZSBpbnQgc2tiX2hlYWRlcl91bmNsb25lKHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IHByaSlcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMjEwMi0vKipcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjIxMDM6ICogX19za2JfaGVhZGVyX3JlbGVhc2UoKSAtIGFsbG93IGNsb25lcyB0byB1c2UgdGhlIGhlYWRyb29tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0yMTA0LSAqIEBza2I6IGJ1ZmZlciB0byBvcGVyYXRlIG9uXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTIxMDctICovXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoyMTA4OnN0YXRpYyBpbmxpbmUgdm9pZCBfX3NrYl9oZWFkZXJfcmVsZWFzZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMjEwOS17XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0yMTEwLVxcdHNrYi1cXHUwMDNlbm9oZHIgPSAxO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MjExMTpcXHRhdG9taWNfc2V0KFxcdTAwMjZza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWRhdGFyZWYsIDEgKyAoMSBcXHUwMDNjXFx1MDAzYyBTS0JfREFUQVJFRl9TSElGVCkpO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMjExMi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDExOjI3OjQ2LjI4NDI3NjkwMVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODE3MjI2OTk0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU0tCIENsb25pbmcgYW5kIERhdGEgUmVmZXJlbmNlcyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgY29kZSdzIGNoZWNraW5nIGlmIGEgU29ja2V0IEJ1ZmZlciAoU0tCKSBpcyBjbG9uZWQgdXNpbmcgYHNrYl9jbG9uZWQoc2tiKWAuIE5vdywgSSB3YW50IHRvIHNlZSBob3cgdGhlIGRhdGEgcmVmZXJlbmNlIGNvdW50IHBsYXlzIGludG8gdGhlIHdob2xlIGNsb25pbmcgcHJvY2Vzcy4gTXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgd2hlbiBgX19za2JfaGVhZGVyX3JlbGVhc2VgIGlzIGNhbGxlZCwgYHNrYi1cdTAwM2Vub2hkcmAgaXMgc2V0LCBhbmQgYGRhdGFyZWZgIGdldHMgaW5pdGlhbGl6ZWQgdG8gYDEgKyAoMSBcdTAwM2NcdTAwM2MgU0tCX0RBVEFSRUZfU0hJRlQpYC4gVGhhdCBtYWtlcyBzZW5zZSwgZXN0YWJsaXNoZXMgdGhlIGluaXRpYWwgcmVmZXJlbmNlLiBUaGUgY3JpdGljYWwgcG9pbnQgaXMsIGhvdyBkb2VzIHRoaXMgY291bnQgY2hhbmdlIHVwb24gY2xvbmluZz8gSXQgc2VlbXMgdGhlIGNvZGUgaW5jcmVtZW50cyBgZGF0YXJlZmAgYnkgMSwgd2l0aCB0aGUgYWN0dWFsIG1lY2hhbmlzbSBiZWluZyBgYXRvbWljX2luYyhcdTAwMjZza2Jfc2hpbmZvKHNrYiktXHUwMDNlZGF0YXJlZilgLlxuXG5JIHdhbnQgdG8gY29uZmlybSB0aGlzIGJ5IGdvaW5nIHRocm91Z2ggYF9fc2tiX2Nsb25lYCBpbiBgbmV0L2NvcmUvc2tidWZmLmNgLiBMZXQgbWUgcmV2aWV3IHRoYXQgY29kZSBhbmQgdGhlIGV4YWN0IG1lY2hhbmljcyB0aGF0IGBhdG9taWNfaW5jYCBhbmQgdGhlIFNLQiBzdHJ1Y3QgdXNlIHdoZW4gdGhlIFNLQiBpcyBjbG9uZWQuIFRoaXMnbGwgaGVscCBjZW1lbnQgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGF0YSByZWZlcmVuY2UgY291bnQgYW5kIGl0cyBpbXBhY3Qgb24gYnVmZmVyIHNoYXJpbmcgaW4gdGhlIGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3MzUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTE6Mjg6MTQuNDU2NTQ4OTYyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDUzNDk3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3NrYl9jbG9uZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za2J1ZmYuYz0xNTU5PXN0YXRpYyB2b2lkIF9fY29weV9za2JfaGVhZGVyKHN0cnVjdCBza19idWZmICpuZXcsIGNvbnN0IHN0cnVjdCBza19idWZmICpvbGQpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0xNjA5LSAqL1xcbm5ldC9jb3JlL3NrYnVmZi5jOjE2MTA6c3RhdGljIHN0cnVjdCBza19idWZmICpfX3NrYl9jbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvY29yZS9za2J1ZmYuYy0xNjExLXtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTE2Nzg9c3RydWN0IHNrX2J1ZmYgKnNrYl9tb3JwaChzdHJ1Y3Qgc2tfYnVmZiAqZHN0LCBzdHJ1Y3Qgc2tfYnVmZiAqc3JjKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMTY4MC1cXHRza2JfcmVsZWFzZV9hbGwoZHN0LCBTS0JfQ09OU1VNRUQpO1xcbm5ldC9jb3JlL3NrYnVmZi5jOjE2ODE6XFx0cmV0dXJuIF9fc2tiX2Nsb25lKGRzdCwgc3JjKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0xNjgyLX1cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTIxMDA9c3RydWN0IHNrX2J1ZmYgKnNrYl9jbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBnZnBfbWFzaylcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTIxMjUtXFxubmV0L2NvcmUvc2tidWZmLmM6MjEyNjpcXHRyZXR1cm4gX19za2JfY2xvbmUobiwgc2tiKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0yMTI3LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTE6Mjg6MTQuNTI3MDkwODY3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNDY3MjE0OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHJlYWRpbmcgYW5kIHRoaW5raW5nIGFib3V0IHRoZSBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIGBfX3NrYl9jbG9uZWAgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYF9fc2tiX2Nsb25lYC4gIEkga25vdyBpdCdzIGEgZnVuZGFtZW50YWwgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIG5ldyBza2JzIGZyb20gZXhpc3Rpbmcgb25lcywgYnV0IEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIGFuZCBzZWUgaWYgYW55dGhpbmcganVtcHMgb3V0LiBMZXQncyBzZWUgaG93IHRoZXkgaGFuZGxlIHRoZSBkYXRhIGNvcHkgYW5kIHRoZSByZWZlcmVuY2UgY291bnRpbmcuIEkgZXhwZWN0IGl0J2xsIGJlIGZhaXJseSBzdHJhaWdodGZvcndhcmQsIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZSBmb3IgcGVyZm9ybWFuY2UsIGFuZCBvYnZpb3VzbHksIGNvcnJlY3RuZXNzIGlzIHBhcmFtb3VudCBoZXJlLiBJJ20gbG9va2luZyBmb3IgcG90ZW50aWFsIGFyZWFzIHRoYXQgbWlnaHQgaW50cm9kdWNlIGNvbnRlbnRpb24gb3Igb3ZlcmhlYWQsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIGZyZXF1ZW50IGNsb25pbmcgd2Ugc2VlIGluIGhpZ2gtcGVyZm9ybWFuY2UgbmV0d29ya2luZyBzY2VuYXJpb3MuIExldCdzIHNlZSBob3cgdGhleSBtYW5hZ2UgdGhlIHNoYXJlZCBkYXRhIGJ1ZmZlciBhbmQgbWV0YWRhdGEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTExLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTE6Mjg6MTYuNTczODE1MjQ0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MTQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjEwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjEwOlxcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqX19za2JfY2xvbmUoc3RydWN0IHNrX2J1ZmYgKm4sIHN0cnVjdCBza19idWZmICpza2IpXFxuMTYxMTpcXHR7XFxuMTYxMjpcXHQjZGVmaW5lIEMoeCkgbi1cXHUwMDNleCA9IHNrYi1cXHUwMDNleFxcbjE2MTM6XFx0XFxuMTYxNDpcXHRcXHRuLVxcdTAwM2VuZXh0ID0gbi1cXHUwMDNlcHJldiA9IE5VTEw7XFxuMTYxNTpcXHRcXHRuLVxcdTAwM2VzayA9IE5VTEw7XFxuMTYxNjpcXHRcXHRfX2NvcHlfc2tiX2hlYWRlcihuLCBza2IpO1xcbjE2MTc6XFx0XFxuMTYxODpcXHRcXHRDKGxlbik7XFxuMTYxOTpcXHRcXHRDKGRhdGFfbGVuKTtcXG4xNjIwOlxcdFxcdEMobWFjX2xlbik7XFxuMTYyMTpcXHRcXHRuLVxcdTAwM2VoZHJfbGVuID0gc2tiLVxcdTAwM2Vub2hkciA/IHNrYl9oZWFkcm9vbShza2IpIDogc2tiLVxcdTAwM2VoZHJfbGVuO1xcbjE2MjI6XFx0XFx0bi1cXHUwMDNlY2xvbmVkID0gMTtcXG4xNjIzOlxcdFxcdG4tXFx1MDAzZW5vaGRyID0gMDtcXG4xNjI0OlxcdFxcdG4tXFx1MDAzZXBlZWtlZCA9IDA7XFxuMTYyNTpcXHRcXHRDKHBmbWVtYWxsb2MpO1xcbjE2MjY6XFx0XFx0QyhwcF9yZWN5Y2xlKTtcXG4xNjI3OlxcdFxcdG4tXFx1MDAzZWRlc3RydWN0b3IgPSBOVUxMO1xcbjE2Mjg6XFx0XFx0Qyh0YWlsKTtcXG4xNjI5OlxcdFxcdEMoZW5kKTtcXG4xNjMwOlxcdFxcdEMoaGVhZCk7XFxuMTYzMTpcXHRcXHRDKGhlYWRfZnJhZyk7XFxuMTYzMjpcXHRcXHRDKGRhdGEpO1xcbjE2MzM6XFx0XFx0Qyh0cnVlc2l6ZSk7XFxuMTYzNDpcXHRcXHRyZWZjb3VudF9zZXQoXFx1MDAyNm4tXFx1MDAzZXVzZXJzLCAxKTtcXG4xNjM1OlxcdFxcbjE2MzY6XFx0XFx0YXRvbWljX2luYyhcXHUwMDI2KHNrYl9zaGluZm8oc2tiKS1cXHUwMDNlZGF0YXJlZikpO1xcbjE2Mzc6XFx0XFx0c2tiLVxcdTAwM2VjbG9uZWQgPSAxO1xcbjE2Mzg6XFx0XFxuMTYzOTpcXHRcXHRyZXR1cm4gbjtcXG4xNjQwOlxcdCN1bmRlZiBDXFxuMTY0MTpcXHR9XFxuMTY0MjpcXHRcXG4xNjQzOlxcdC8qKlxcbjE2NDQ6XFx0ICogYWxsb2Nfc2tiX2Zvcl9tc2coKSAtIGFsbG9jYXRlIHNrX2J1ZmYgdG8gd3JhcCBmcmFnIGxpc3QgZm9ybWluZyBhIG1zZ1xcbjE2NDU6XFx0ICogQGZpcnN0OiBmaXJzdCBza19idWZmIG9mIHRoZSBtc2dcXG4xNjQ2OlxcdCAqL1xcbjE2NDc6XFx0c3RydWN0IHNrX2J1ZmYgKmFsbG9jX3NrYl9mb3JfbXNnKHN0cnVjdCBza19idWZmICpmaXJzdClcXG4xNjQ4OlxcdHtcXG4xNjQ5OlxcdFxcdHN0cnVjdCBza19idWZmICpuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMToyODoxNi41NzQwNTg0ODRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA2NjE3NzgyNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgU0tCIERhdGEgU2hhcmluZyBhbmQgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHdlIGhhdmUgYSB0cmlja3kgc2l0dWF0aW9uIHdpdGggU0tCcywgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgaG93IGRhdGEgcmVmZXJlbmNlcyBhbmQgY2xvbmluZyBpbnRlcmFjdCB3aXRoIGBwc2tiX2V4cGFuZF9oZWFkYCBhbmQgYHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcmAuIEknbSBzZWVpbmcgYSBwb3RlbnRpYWwgZmxhdyBpbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiwgcGFydGljdWxhcmx5IHdoZW4gYSBjbG9uZWQgU0tCIGlzIGZyZWVkLCB3aGljaCBjb3VsZCBsZWFkIHRvIGRhdGEgY29ycnVwdGlvbiBvciBpbmNvcnJlY3QgcmVmZXJlbmNlIGNvdW50aW5nLlxuXG5Jbml0aWFsbHksIHdoZW4gYF9fc2tiX2hlYWRlcl9yZWxlYXNlYCBpcyBjYWxsZWQsIHdlIHNldCBgc2tiLVx1MDAzZW5vaGRyYCB0byAxLCBhbmQgdGhlIGRhdGFyZWYgaXMgYDEgKyAoMSBcdTAwM2NcdTAwM2MgU0tCX0RBVEFSRUZfU0hJRlQpYC4gVGhlbiwgd2hlbiBhbiBTS0IgaXMgY2xvbmVkLCBib3RoIHRoZSBvcmlnaW5hbCBhbmQgdGhlIGNsb25lJ3MgYGNsb25lZGAgZmxhZyBpcyBzZXQsIGFuZCB0aGUgYGRhdGFyZWZgIGJlY29tZXMgYDIgKyAoMSBcdTAwM2NcdTAwM2MgU0tCX0RBVEFSRUZfU0hJRlQpYC5cblxuVGhlIGNvcmUgaXNzdWUgbGllcyBpbiB3aGF0IGhhcHBlbnMgd2hlbiBhIGNsb25lIGlzIGZyZWVkLiBUaGUgYHNrYl9kYXRhX3VucmVmYCBmdW5jdGlvbiByZWR1Y2VzIGBkYXRhcmVmYCBiYXNlZCBvbiB0aGUgYHNrYl9kYXRhcmVmX2JpYXNgLCB3aGljaCBkZXBlbmRzIG9uIGBza2ItXHUwMDNlbm9oZHJgLiAgSWYgdGhlIG9yaWdpbmFsIGlzIHN0aWxsIGFyb3VuZCBhbmQgYHNrYi1cdTAwM2Vub2hkcmAgaXMgMSwgYSBiaWFzIG9mIGAxICsgKDEgXHUwMDNjXHUwMDNjIFNLQl9EQVRBUkVGX1NISUZUKWAgaXMgaW50cm9kdWNlZC4gVGhlIG9sZCBjb2RlIGhhZCBhIHByb2JsZW0gd2hlbiBhbiBTS0Igd2FzIGNsb25lZCwgdGhlbiB0aGUgY2xvbmUgd2FzIGZyZWVkLCBidXQgdGhlIG9yaWdpbmFsIHdhcyBzdGlsbCBhcm91bmQuICBJbiB0aGlzIHNjZW5hcmlvIHRoZSB2YWx1ZSBvZiB0aGUgYHNrYl9jbG9uZWRgIGZ1bmN0aW9uIHdpbGwgbWlzaW50ZXJwcmV0IHdoZXRoZXIgZGF0YSBpcyBzaGFyZWQgKGluY29ycmVjdGx5IGFzc3VtaW5nIGl0IGlzIG5vdCBzaGFyZWQpLCBhbmQgYHBza2JfZXhwYW5kX2hlYWRgIGFuZCBgcHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyYCB3aWxsIG1pc3Rha2VubHkgZnJlZSB0aGUgZGF0YSwgb3IgY29ycnVwdCB0aGUgcmVmY291bnQuICBUaGUgYHNrYl9kYXRhX2lzX3NoYXJlZGAgZnVuY3Rpb24gd2lsbCByZXR1cm4gVFJVRSwgbWVhbmluZyB0aGF0IHRoaXMgZGF0YSBpcyBhY3R1YWxseSBzaGFyZWQsIGFuZCBuZWVkcyB0byBiZSBoYW5kbGVkIGFwcHJvcHJpYXRlbHkuICBcblxuVGhlIHJvb3QgY2F1c2UgYXBwZWFycyB0byBiZSB0aGUgYHNrYl9jbG9uZWRgIG1hY3JvIG5vdCBwcm9wZXJseSBhY2NvdW50aW5nIGZvciB0aGUgYG5vaGRyYCBiaXQgaW4gaXRzIGNhbGN1bGF0aW9uIG9mIHNoYXJlZCBkYXRhLCB3aGljaCByZXN1bHRzIGluIGBwc2tiX2V4cGFuZF9oZWFkYCBwb3RlbnRpYWxseSBmcmVlaW5nIHNoYXJlZCBkYXRhIHByZW1hdHVyZWx5LiAgVGhpcyBjb3VsZCBjYXVzZSBkYXRhIGNvcnJ1cHRpb24sIG9yIHJlZmVyZW5jZSBjb3VudCBpc3N1ZXMuIFRoZSBgc2tiX2Nsb25lZGAgb25seSBtYXNrZWQgb3V0IHRoZSBoaWdoZXIgYml0cywgd2hpY2ggaW5kaWNhdGVkIHdoZXRoZXIgYG5vaGRyYCB3YXMgc2V0IG9yIG5vdCwgc28gYHNrYl9jbG9uZWRgIHdyb25nbHkgdGhvdWdodCBgbmAgd2FzIHRoZSBzb2xlIG93bmVyLlxuXG5Ob3csIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhpcyBpcyBmdXp6ZXItd29ydGh5LiBHaXZlbiB0aGF0IHRoaXMgZGlyZWN0bHkgaW1wYWN0cyBjb3JlIGtlcm5lbCBsb2dpYyB3aXRoaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCBhbmQgcG90ZW50aWFsbHkgaW5jbHVkZXMgYHBza2JfZXhwYW5kX2hlYWRgIGFuZCBgcHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyYCB3aGljaCBhcmUgd2lkZWx5IHVzZWQsIEknZCBzYXkgdGhpcyBuZWVkcyB0byBiZSBpbnZlc3RpZ2F0ZWQgZnVydGhlci4gIFRoaXMgZGlyZWN0bHkgYWZmZWN0cyBtZW1vcnkgbWFuYWdlbWVudCB3aXRoIGBza2JgIGNsb25lcywgYW5kIHNvIEkgc2hvdWxkIGNvbnNpZGVyIHNldHRpbmcgYFdvcnRoRnV6emluZz10cnVlYC5cblxuRm9yIHRoZSBmb2N1cyBzeW1ib2xzLCBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGwgc2l0ZXMgZm9yIGBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXJgIHNpbmNlIGl0J3MgYHN0YXRpY2AuICBIb3dldmVyLCBgcHNrYl9leHBhbmRfaGVhZGAgaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgYEZvY3VzU3ltYm9sc2AsIGFzIGlzIHRoZSBub24tc3RhdGljIGFuZCBub24taW5saW5lIGBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXJgIGNhbGxzaXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjMzNCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMToyODoyNy4yMzU4NDAzNloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ4ODI1ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyfHBza2JfZXhwYW5kX2hlYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYmF0bWFuLWFkdi9mcmFnbWVudGF0aW9uLmM9MjYxPWJhdGFkdl9mcmFnX21lcmdlX3BhY2tldHMoc3RydWN0IGhsaXN0X2hlYWQgKmNoYWluKVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvZnJhZ21lbnRhdGlvbi5jLTI4MS1cXHQvKiBNYWtlIHJvb20gZm9yIHRoZSByZXN0IG9mIHRoZSBmcmFnbWVudHMuICovXFxubmV0L2JhdG1hbi1hZHYvZnJhZ21lbnRhdGlvbi5jOjI4MjpcXHRpZiAocHNrYl9leHBhbmRfaGVhZChza2Jfb3V0LCAwLCBzaXplIC0gc2tiX291dC1cXHUwMDNlbGVuLCBHRlBfQVRPTUlDKSBcXHUwMDNjIDApIHtcXG5uZXQvYmF0bWFuLWFkdi9mcmFnbWVudGF0aW9uLmMtMjgzLVxcdFxcdGtmcmVlX3NrYihza2Jfb3V0KTtcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYz0xMDM1PWludCBicGZfcHJvZ190ZXN0X3J1bl9za2Ioc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTIzMS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTIzMjpcXHRcXHRcXHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIG5oZWFkLCAwLCBHRlBfVVNFUikpIHtcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTIzMy1cXHRcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9NTYxMz1uZXRpZl9za2JfY2hlY2tfZm9yX3hkcChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTU2MjQtXFx0LyogSW4gY2FzZSB3ZSBoYXZlIHRvIGdvIGRvd24gdGhlIHBhdGggYW5kIGFsc28gbGluZWFyaXplLFxcbm5ldC9jb3JlL2Rldi5jOjU2MjU6XFx0ICogdGhlbiBsZXRzIGRvIHRoZSBwc2tiX2V4cGFuZF9oZWFkKCkgd29yayBqdXN0IG9uY2UgaGVyZS5cXG5uZXQvY29yZS9kZXYuYy01NjI2LVxcdCAqL1xcbi0tXFxubmV0L2NvcmUvZGV2LmMtNTYyOC1cXHR0cm9vbSA9IHNrYi1cXHUwMDNldGFpbCArIHNrYi1cXHUwMDNlZGF0YV9sZW4gLSBza2ItXFx1MDAzZWVuZDtcXG5uZXQvY29yZS9kZXYuYzo1NjI5OlxcdGVyciA9IHBza2JfZXhwYW5kX2hlYWQoc2tiLFxcbm5ldC9jb3JlL2Rldi5jLTU2MzAtXFx0XFx0XFx0ICAgICAgIGhyb29tIFxcdTAwM2UgMCA/IEFMSUdOKGhyb29tLCBORVRfU0tCX1BBRCkgOiAwLFxcbi0tXFxubmV0L2NvcmUvbHd0X2JwZi5jPTE3MD1zdGF0aWMgaW50IHhtaXRfY2hlY2tfaGVhZHJvb20oc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGhyb29tKVxcbi0tXFxubmV0L2NvcmUvbHd0X2JwZi5jLTE3NC1cXG5uZXQvY29yZS9sd3RfYnBmLmM6MTc1OlxcdFxcdGlmIChwc2tiX2V4cGFuZF9oZWFkKHNrYiwgbmhlYWQsIDAsIEdGUF9BVE9NSUMpKVxcbm5ldC9jb3JlL2x3dF9icGYuYy0xNzYtXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYz0yNzU5PXN0YXRpYyBpbnQgcHJvY2Vzc19pcHNlYyhzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldixcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTI3NzItXFx0XFx0XFx0aWYgKG5oZWFkIFxcdTAwM2UgMCkge1xcbm5ldC9jb3JlL3BrdGdlbi5jOjI3NzM6XFx0XFx0XFx0XFx0cmV0ID0gcHNrYl9leHBhbmRfaGVhZChza2IsIG5oZWFkLCAwLCBHRlBfQVRPTUlDKTtcXG5uZXQvY29yZS9wa3RnZW4uYy0yNzc0LVxcdFxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5uZXQvY29yZS9za2JfZmF1bHRfaW5qZWN0aW9uLmM9MzM9dm9pZCBza2JfbWlnaHRfcmVhbGxvYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvc2tiX2ZhdWx0X2luamVjdGlvbi5jLTM3LVxcbm5ldC9jb3JlL3NrYl9mYXVsdF9pbmplY3Rpb24uYzozODpcXHRwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgMCwgR0ZQX0FUT01JQyk7XFxubmV0L2NvcmUvc2tiX2ZhdWx0X2luamVjdGlvbi5jLTM5LX1cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTIyNzU9RVhQT1JUX1NZTUJPTChfX3Bza2JfY29weV9mY2xvbmUpO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjI3Ny0vKipcXG5uZXQvY29yZS9za2J1ZmYuYzoyMjc4OiAqXFx0cHNrYl9leHBhbmRfaGVhZCAtIHJlYWxsb2NhdGUgaGVhZGVyIG9mIFxcdTAwMjZza19idWZmXFxubmV0L2NvcmUvc2tidWZmLmMtMjI3OS0gKlxcdEBza2I6IGJ1ZmZlciB0byByZWFsbG9jYXRlXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0yMjk2LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjIyOTc6aW50IHBza2JfZXhwYW5kX2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5oZWFkLCBpbnQgbnRhaWwsXFxubmV0L2NvcmUvc2tidWZmLmMtMjI5OC1cXHRcXHQgICAgIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjM3OS19XFxubmV0L2NvcmUvc2tidWZmLmM6MjM4MDpFWFBPUlRfU1lNQk9MKHBza2JfZXhwYW5kX2hlYWQpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTIzODEtXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0yMzg0PXN0cnVjdCBza19idWZmICpza2JfcmVhbGxvY19oZWFkcm9vbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaGVhZHJvb20pXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0yMzkyLVxcdFxcdHNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcXG5uZXQvY29yZS9za2J1ZmYuYzoyMzkzOlxcdFxcdGlmIChza2IyIFxcdTAwMjZcXHUwMDI2IHBza2JfZXhwYW5kX2hlYWQoc2tiMiwgU0tCX0RBVEFfQUxJR04oZGVsdGEpLCAwLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTIzOTQtXFx0XFx0XFx0XFx0XFx0ICAgICBHRlBfQVRPTUlDKSkge1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MjQwND1pbnQgX19za2JfdW5jbG9uZV9rZWVwdHJ1ZXNpemUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgcHJpKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjQxMi1cXG5uZXQvY29yZS9za2J1ZmYuYzoyNDEzOlxcdHJlcyA9IHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCAwLCBwcmkpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTI0MTQtXFx0aWYgKHJlcylcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTI0NDg9c3RydWN0IHNrX2J1ZmYgKnNrYl9leHBhbmRfaGVhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaGVhZHJvb20pXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0yNDU4LVxcdGRlbHRhID0gU0tCX0RBVEFfQUxJR04oZGVsdGEpO1xcbm5ldC9jb3JlL3NrYnVmZi5jOjI0NTk6XFx0LyogcHNrYl9leHBhbmRfaGVhZCgpIG1pZ2h0IGNyYXNoLCBpZiBza2IgaXMgc2hhcmVkLiAqL1xcbm5ldC9jb3JlL3NrYnVmZi5jLTI0NjAtXFx0aWYgKHNrYl9zaGFyZWQoc2tiKSB8fCAhaXNfc2tiX3dtZW0oc2tiKSkge1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjQ3MC1cXHR9XFxubmV0L2NvcmUvc2tidWZmLmM6MjQ3MTpcXHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIGRlbHRhLCAwLCBHRlBfQVRPTUlDKSlcXG5uZXQvY29yZS9za2J1ZmYuYy0yNDcyLVxcdFxcdGdvdG8gZmFpbDtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTI1Njc9aW50IF9fc2tiX3BhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcGFkLCBib29sIGZyZWVfb25fZXJyb3IpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0yNTc5LVxcdGlmIChsaWtlbHkoc2tiX2Nsb25lZChza2IpIHx8IG50YWlsIFxcdTAwM2UgMCkpIHtcXG5uZXQvY29yZS9za2J1ZmYuYzoyNTgwOlxcdFxcdGVyciA9IHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCBudGFpbCwgR0ZQX0FUT01JQyk7XFxubmV0L2NvcmUvc2tidWZmLmMtMjU4MS1cXHRcXHRpZiAodW5saWtlbHkoZXJyKSlcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTI3MjQ9aW50IF9fX3Bza2JfdHJpbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjczMy1cXHRpZiAoc2tiX2Nsb25lZChza2IpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2NvcmUvc2tidWZmLmM6MjczNDpcXHQgICAgdW5saWtlbHkoKGVyciA9IHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCAwLCBHRlBfQVRPTUlDKSkpKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTI3MzUtXFx0XFx0cmV0dXJuIGVycjtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTI4Nzg9dm9pZCAqX19wc2tiX3B1bGxfdGFpbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZGVsdGEpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0yODg5LVxcdGlmIChlYXQgXFx1MDAzZSAwIHx8IHNrYl9jbG9uZWQoc2tiKSkge1xcbm5ldC9jb3JlL3NrYnVmZi5jOjI4OTA6XFx0XFx0aWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCBlYXQgXFx1MDAzZSAwID8gZWF0ICsgMTI4IDogMCxcXG5uZXQvY29yZS9za2J1ZmYuYy0yODkxLVxcdFxcdFxcdFxcdCAgICAgR0ZQX0FUT01JQykpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz01MzgzPWludCBza2JfY293X2RhdGEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRhaWxiaXRzLCBzdHJ1Y3Qgc2tfYnVmZiAqKnRyYWlsZXIpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy01NDA0LVxcdFxcdGlmIChza2JfdGFpbHJvb20oc2tiKSBcXHUwMDNjIHRhaWxiaXRzIFxcdTAwMjZcXHUwMDI2XFxubmV0L2NvcmUvc2tidWZmLmM6NTQwNTpcXHRcXHQgICAgcHNrYl9leHBhbmRfaGVhZChza2IsIDAsIHRhaWxiaXRzLXNrYl90YWlscm9vbShza2IpKzEyOCwgR0ZQX0FUT01JQykpXFxubmV0L2NvcmUvc2tidWZmLmMtNTQwNi1cXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTYzODM9aW50IHNrYl9lbnN1cmVfd3JpdGFibGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHdyaXRlX2xlbilcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTYzOTAtXFxubmV0L2NvcmUvc2tidWZmLmM6NjM5MTpcXHRyZXR1cm4gcHNrYl9leHBhbmRfaGVhZChza2IsIDAsIDAsIEdGUF9BVE9NSUMpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTYzOTItfVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NjM5NT1pbnQgc2tiX2Vuc3VyZV93cml0YWJsZV9oZWFkX3RhaWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTY0MTQtXFxubmV0L2NvcmUvc2tidWZmLmM6NjQxNTpcXHRyZXR1cm4gcHNrYl9leHBhbmRfaGVhZChza2IsIG5lZWRlZF9oZWFkcm9vbSwgbmVlZGVkX3RhaWxyb29tLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTY0MTYtXFx0XFx0XFx0XFx0R0ZQX0FUT01JQyk7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz02ODI2PUVYUE9SVF9TWU1CT0woYWxsb2Nfc2tiX3dpdGhfZnJhZ3MpO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNjgyOC0vKiBjYXJ2ZSBvdXQgdGhlIGZpcnN0IG9mZiBieXRlcyBmcm9tIHNrYiB3aGVuIG9mZiBcXHUwMDNjIGhlYWRsZW4gKi9cXG5uZXQvY29yZS9za2J1ZmYuYzo2ODI5OnN0YXRpYyBpbnQgcHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHUzMiBvZmYsXFxubmV0L2NvcmUvc2tidWZmLmMtNjgzMC1cXHRcXHRcXHRcXHQgICAgY29uc3QgaW50IGhlYWRsZW4sIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NzAzND1zdGF0aWMgaW50IHBza2JfY2FydmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTMyIGxlbiwgZ2ZwX3QgZ2ZwKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNzAzOC1cXHRpZiAobGVuIFxcdTAwM2MgaGVhZGxlbilcXG5uZXQvY29yZS9za2J1ZmYuYzo3MDM5OlxcdFxcdHJldHVybiBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXIoc2tiLCBsZW4sIGhlYWRsZW4sIGdmcCk7XFxubmV0L2NvcmUvc2tidWZmLmMtNzA0MC1cXHRlbHNlXFxuLS1cXG5uZXQvaXB2NC9pY21wLmM9NzM5PWljbXBfZXh0X2FwcGVuZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2JfaW4sIHN0cnVjdCBpY21waGRyICppY21waCxcXG4tLVxcbm5ldC9pcHY0L2ljbXAuYy03NzgtXFxubmV0L2lwdjQvaWNtcC5jOjc3OTpcXHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIDAsIGV4dF9tYXhfbGVuLCBHRlBfQVRPTUlDKSlcXG5uZXQvaXB2NC9pY21wLmMtNzgwLVxcdFxcdGdvdG8gZnJlZV9za2I7XFxuLS1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYz0yMDk9aW50IGluZXRfc2tfZGlhZ19maWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrLFxcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtMzc4LVxcdFxcdGlmIChjYi1cXHUwMDNlbWluX2R1bXBfYWxsb2MgXFx1MDAzZSBwcmV2X21pbl9kdW1wX2FsbG9jKVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjM3OTpcXHRcXHRcXHQvKiBSZXRyeSB3aXRoIHBza2JfZXhwYW5kX2hlYWQoKSB3aXRoXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtMzgwLVxcdFxcdFxcdCAqIF9fR0ZQX0RJUkVDVF9SRUNMQUlNXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYz04MDk9c3RhdGljIGludCBfX2luZXRfZGlhZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcXG4tLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTgzMS1cXHRpZiAoIXNrYi1cXHUwMDNlbGVuIFxcdTAwMjZcXHUwMDI2IGNiLVxcdTAwM2VtaW5fZHVtcF9hbGxvYyBcXHUwMDNlIHByZXZfbWluX2R1bXBfYWxsb2MpIHtcXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo4MzI6XFx0XFx0ZXJyID0gcHNrYl9leHBhbmRfaGVhZChza2IsIDAsIGNiLVxcdTAwM2VtaW5fZHVtcF9hbGxvYywgR0ZQX0tFUk5FTCk7XFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtODMzLVxcdFxcdGlmICghZXJyKVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9ODk0PXN0YXRpYyBpbnQgaXBncmVfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy05MDQtXFx0aWYgKHNrYl9oZWFkcm9vbShza2IpIFxcdTAwM2MgbmVlZGVkIFxcdTAwMjZcXHUwMDI2XFxubmV0L2lwdjQvaXBfZ3JlLmM6OTA1OlxcdCAgICBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgSEhfREFUQV9BTElHTihuZWVkZWQgLSBza2JfaGVhZHJvb20oc2tiKSksXFxubmV0L2lwdjQvaXBfZ3JlLmMtOTA2LVxcdFxcdFxcdCAgICAgMCwgR0ZQX0FUT01JQykpXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIuYz0yMj1pbnQgaXBfcm91dGVfbWVfaGFyZGVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgYWRkcl90eXBlKVxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyLmMtODItXFx0aWYgKHNrYl9oZWFkcm9vbShza2IpIFxcdTAwM2MgaGhfbGVuIFxcdTAwMjZcXHUwMDI2XFxubmV0L2lwdjQvbmV0ZmlsdGVyLmM6ODM6XFx0ICAgIHBza2JfZXhwYW5kX2hlYWQoc2tiLCBISF9EQVRBX0FMSUdOKGhoX2xlbiAtIHNrYl9oZWFkcm9vbShza2IpKSxcXG5uZXQvaXB2NC9uZXRmaWx0ZXIuYy04NC1cXHRcXHRcXHRcXHQwLCBHRlBfQVRPTUlDKSlcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYz0yMzI9c3RhdGljIGJvb2wgaXB2Nl9kZXN0X2hhbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb3B0b2ZmKVxcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTI3MC1cXHRpZiAoc2tiX2Nsb25lZChza2IpKSB7XFxubmV0L2lwdjYvZXh0aGRycy5jOjI3MTpcXHRcXHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIDAsIDAsIEdGUF9BVE9NSUMpKVxcbm5ldC9pcHY2L2V4dGhkcnMuYy0yNzItXFx0XFx0XFx0Z290byBkaXNjYXJkO1xcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jPTM3MT1zdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KVxcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTQzNC1cXHRpZiAoc2tiX2Nsb25lZChza2IpKSB7XFxubmV0L2lwdjYvZXh0aGRycy5jOjQzNTpcXHRcXHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIDAsIDAsIEdGUF9BVE9NSUMpKSB7XFxubmV0L2lwdjYvZXh0aGRycy5jLTQzNi1cXHRcXHRcXHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpcDZfZHN0X2lkZXYoc2tiX2RzdChza2IpKSxcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYz00ODE9c3RhdGljIGludCBpcHY2X3JwbF9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmMtNTg5LVxcdFxcdCAgICAgc2tiX2hlYWRyb29tKHNrYikgXFx1MDAzYyBjaGRyX2xlbiArIHNrYi1cXHUwMDNlbWFjX2xlbikpIHtcXG5uZXQvaXB2Ni9leHRoZHJzLmM6NTkwOlxcdFxcdGlmIChwc2tiX2V4cGFuZF9oZWFkKHNrYiwgY2hkcl9sZW4gKyBza2ItXFx1MDAzZW1hY19sZW4sIDAsXFxubmV0L2lwdjYvZXh0aGRycy5jLTU5MS1cXHRcXHRcXHRcXHQgICAgIEdGUF9BVE9NSUMpKSB7XFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmM9NjQ1PXN0YXRpYyBpbnQgaXB2Nl9ydGhkcl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYy03NTgtXFx0XFx0LyogdGhlIGNvcHkgaXMgYSBmb3J3YXJkZWQgcGFja2V0ICovXFxubmV0L2lwdjYvZXh0aGRycy5jOjc1OTpcXHRcXHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIDAsIDAsIEdGUF9BVE9NSUMpKSB7XFxubmV0L2lwdjYvZXh0aGRycy5jLTc2MC1cXHRcXHRcXHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpcDZfZHN0X2lkZXYoc2tiX2RzdChza2IpKSxcXG4tLVxcbm5ldC9pcHY2L2ljbXAuYz01NjI9aWNtcDZfZXh0X2FwcGVuZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2JfaW4sXFxuLS1cXG5uZXQvaXB2Ni9pY21wLmMtNjA4LVxcbm5ldC9pcHY2L2ljbXAuYzo2MDk6XFx0aWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCBleHRfbWF4X2xlbiwgR0ZQX0FUT01JQykpXFxubmV0L2lwdjYvaWNtcC5jLTYxMC1cXHRcXHRnb3RvIGZyZWVfc2tiO1xcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jPTEzNjM9c3RhdGljIGludCBpcDZncmVfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTM3My1cXHRpZiAoc2tiX2hlYWRyb29tKHNrYikgXFx1MDAzYyBuZWVkZWQgXFx1MDAyNlxcdTAwMjZcXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MTM3NDpcXHQgICAgcHNrYl9leHBhbmRfaGVhZChza2IsIEhIX0RBVEFfQUxJR04obmVlZGVkIC0gc2tiX2hlYWRyb29tKHNrYikpLFxcbm5ldC9pcHY2L2lwNl9ncmUuYy0xMzc1LVxcdFxcdFxcdCAgICAgMCwgR0ZQX0FUT01JQykpXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIuYz0yND1pbnQgaXA2X3JvdXRlX21lX2hhcmRlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpza19wYXJ0aWFsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyLmMtODAtXFx0aWYgKHNrYl9oZWFkcm9vbShza2IpIFxcdTAwM2MgaGhfbGVuIFxcdTAwMjZcXHUwMDI2XFxubmV0L2lwdjYvbmV0ZmlsdGVyLmM6ODE6XFx0ICAgIHBza2JfZXhwYW5kX2hlYWQoc2tiLCBISF9EQVRBX0FMSUdOKGhoX2xlbiAtIHNrYl9oZWFkcm9vbShza2IpKSxcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIuYy04Mi1cXHRcXHRcXHQgICAgIDAsIEdGUF9BVE9NSUMpKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jPTM5OD1zdGF0aWMgaW50IHNlZzZfZG9fc3JoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBkc3RfZW50cnkgKmNhY2hlX2RzdClcXG4tLVxcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYy00NDgtXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jOjQ0OTpcXHRcXHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIHNrYi1cXHUwMDNlbWFjX2xlbiwgMCwgR0ZQX0FUT01JQykgXFx1MDAzYyAwKVxcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYy00NTAtXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5uZXQvaXB2Ni91ZHBfb2ZmbG9hZC5jPTE5PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdWRwNl91Zm9fZnJhZ21lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L3VkcF9vZmZsb2FkLmMtNzgtXFx0XFx0aWYgKHNrYi1cXHUwMDNlbWFjX2hlYWRlciBcXHUwMDNjICh0bmxfaGxlbiArIGZyYWdfaGRyX3N6KSkge1xcbm5ldC9pcHY2L3VkcF9vZmZsb2FkLmM6Nzk6XFx0XFx0XFx0aWYgKGdzb19wc2tiX2V4cGFuZF9oZWFkKHNrYiwgdG5sX2hsZW4gKyBmcmFnX2hkcl9zeikpXFxubmV0L2lwdjYvdWRwX29mZmxvYWQuYy04MC1cXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4tLVxcbm5ldC9tYWM4MDIxMS9yeC5jPTc0Mj1pZWVlODAyMTFfbWFrZV9tb25pdG9yX3NrYihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcXG4tLVxcbm5ldC9tYWM4MDIxMS9yeC5jLTc2Ny1cXHRcXHRpZiAoc2tiX2hlYWRyb29tKHNrYikgXFx1MDAzYyBuZWVkZWRfaGVhZHJvb20gXFx1MDAyNlxcdTAwMjZcXG5uZXQvbWFjODAyMTEvcnguYzo3Njg6XFx0XFx0ICAgIHBza2JfZXhwYW5kX2hlYWQoc2tiLCBuZWVkZWRfaGVhZHJvb20sIDAsIEdGUF9BVE9NSUMpKSB7XFxubmV0L21hYzgwMjExL3J4LmMtNzY5LVxcdFxcdFxcdGRldl9rZnJlZV9za2Ioc2tiKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9yeC5jPTIzNzM9aWVlZTgwMjExX3J4X2hfZGVmcmFnbWVudChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KVxcbi0tXFxubmV0L21hYzgwMjExL3J4LmMtMjUxMi1cXHRcXHRJODAyX0RFQlVHX0lOQyhyeC1cXHUwMDNlbG9jYWwtXFx1MDAzZXJ4X2V4cGFuZF9za2JfaGVhZF9kZWZyYWcpO1xcbm5ldC9tYWM4MDIxMS9yeC5jOjI1MTM6XFx0XFx0aWYgKHVubGlrZWx5KHBza2JfZXhwYW5kX2hlYWQocngtXFx1MDAzZXNrYiwgMCwgZW50cnktXFx1MDAzZWV4dHJhX2xlbixcXG5uZXQvbWFjODAyMTEvcnguYy0yNTE0LVxcdFxcdFxcdFxcdFxcdCAgICAgIEdGUF9BVE9NSUMpKSkge1xcbi0tXFxubmV0L21hYzgwMjExL3R4LmM9MjAwND1zdGF0aWMgaW50IGllZWU4MDIxMV9za2JfcmVzaXplKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtMjAzMS1cXG5uZXQvbWFjODAyMTEvdHguYzoyMDMyOlxcdGlmIChwc2tiX2V4cGFuZF9oZWFkKHNrYiwgaGVhZF9uZWVkLCB0YWlsX25lZWQsIEdGUF9BVE9NSUMpKSB7XFxubmV0L21hYzgwMjExL3R4LmMtMjAzMy1cXHRcXHR3aXBoeV9kZWJ1Zyhsb2NhbC1cXHUwMDNlaHcud2lwaHksXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYz0zMzg3PXN0YXRpYyBib29sIGllZWU4MDIxMV9hbXNkdV9yZWFsbG9jX3BhZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jLTMzOTItXFxubmV0L21hYzgwMjExL3R4LmM6MzM5MzpcXHRcXHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIGhlYWRyb29tLCAwLCBHRlBfQVRPTUlDKSkge1xcbm5ldC9tYWM4MDIxMS90eC5jLTMzOTQtXFx0XFx0XFx0d2lwaHlfZGVidWcobG9jYWwtXFx1MDAzZWh3LndpcGh5LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9uYXRfaGVscGVyLmM9Njc9c3RhdGljIGJvb2wgZW5sYXJnZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGV4dHJhKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9uYXRfaGVscGVyLmMtNzEtXFxubmV0L25ldGZpbHRlci9uZl9uYXRfaGVscGVyLmM6NzI6XFx0aWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCBleHRyYSAtIHNrYl90YWlscm9vbShza2IpLCBHRlBfQVRPTUlDKSlcXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9oZWxwZXIuYy03My1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90by5jPTYwMT1zdGF0aWMgaW50IG5mX3hmcm1fbWVfaGFyZGVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGZhbWlseSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvLmMtNjMxLVxcdGlmIChza2JfaGVhZHJvb20oc2tiKSBcXHUwMDNjIGhoX2xlbiBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvLmM6NjMyOlxcdCAgICBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgaGhfbGVuIC0gc2tiX2hlYWRyb29tKHNrYiksIDAsIEdGUF9BVE9NSUMpKVxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvLmMtNjMzLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi0tXFxubmV0L25ldGZpbHRlci94dF9UQ1BNU1MuYz03MT10Y3Btc3NfbWFuZ2xlX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci94dF9UQ1BNU1MuYy0xNTQtXFx0aWYgKHNrYl90YWlscm9vbShza2IpIFxcdTAwM2MgVENQT0xFTl9NU1MpIHtcXG5uZXQvbmV0ZmlsdGVyL3h0X1RDUE1TUy5jOjE1NTpcXHRcXHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIDAsXFxubmV0L25ldGZpbHRlci94dF9UQ1BNU1MuYy0xNTYtXFx0XFx0XFx0XFx0ICAgICBUQ1BPTEVOX01TUyAtIHNrYl90YWlscm9vbShza2IpLFxcbi0tXFxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jPTEyODI9c3RhdGljIHN0cnVjdCBza19idWZmICpuZXRsaW5rX3RyaW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgYWxsb2NhdGlvbilcXG4tLVxcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYy0xMjk5LVxcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYzoxMzAwOlxcdHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCAtZGVsdGEsXFxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jLTEzMDEtXFx0XFx0XFx0IChhbGxvY2F0aW9uIFxcdTAwMjYgfl9fR0ZQX0RJUkVDVF9SRUNMQUlNKSB8XFxuLS1cXG5uZXQvdGlwYy9iZWFyZXIuYz00OTc9aW50IHRpcGNfbDJfc2VuZF9tc2coc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3RpcGMvYmVhcmVyLmMtNTA3LVxcdGRlbHRhID0gU0tCX0RBVEFfQUxJR04oZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gLSBza2JfaGVhZHJvb20oc2tiKSk7XFxubmV0L3RpcGMvYmVhcmVyLmM6NTA4OlxcdGlmICgoZGVsdGEgXFx1MDAzZSAwKSBcXHUwMDI2XFx1MDAyNiBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgZGVsdGEsIDAsIEdGUF9BVE9NSUMpKSB7XFxubmV0L3RpcGMvYmVhcmVyLmMtNTA5LVxcdFxcdGtmcmVlX3NrYihza2IpO1xcbi0tXFxubmV0L3RpcGMvYmVhcmVyLmM9NzY0PXZvaWQgdGlwY19jbG9uZV90b19sb29wYmFjayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKnBrdHMpXFxuLS1cXG5uZXQvdGlwYy9iZWFyZXIuYy03NzUtXFx0XFx0ZXhwID0gU0tCX0RBVEFfQUxJR04oZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gLSBza2JfaGVhZHJvb20oc2tiKSk7XFxubmV0L3RpcGMvYmVhcmVyLmM6Nzc2OlxcdFxcdGlmIChleHAgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IHBza2JfZXhwYW5kX2hlYWQoc2tiLCBleHAsIDAsIEdGUF9BVE9NSUMpKSB7XFxubmV0L3RpcGMvYmVhcmVyLmMtNzc3LVxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbi0tXFxubmV0L3RpcGMvbXNnLmM9NTMyPWJvb2wgdGlwY19tc2dfdHJ5X2J1bmRsZShzdHJ1Y3Qgc2tfYnVmZiAqdHNrYiwgc3RydWN0IHNrX2J1ZmYgKipza2IsIHUzMiBtc3MsXFxuLS1cXG5uZXQvdGlwYy9tc2cuYy01NjItXFx0XFx0cmV0dXJuIHRydWU7XFxubmV0L3RpcGMvbXNnLmM6NTYzOlxcdGlmICh1bmxpa2VseShwc2tiX2V4cGFuZF9oZWFkKHRza2IsIElOVF9IX1NJWkUsIG1zcyAtIHRzeiAtIElOVF9IX1NJWkUsXFxubmV0L3RpcGMvbXNnLmMtNTY0LVxcdFxcdFxcdFxcdCAgICAgIEdGUF9BVE9NSUMpKSlcXG4tLVxcbm5ldC90aXBjL3VkcF9tZWRpYS5jPTIzNz1zdGF0aWMgaW50IHRpcGNfdWRwX3NlbmRfbXNnKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC90aXBjL3VkcF9tZWRpYS5jLTI0Ny1cXHRpZiAoc2tiX2hlYWRyb29tKHNrYikgXFx1MDAzYyBVRFBfTUlOX0hFQURST09NKSB7XFxubmV0L3RpcGMvdWRwX21lZGlhLmM6MjQ4OlxcdFxcdGVyciA9IHBza2JfZXhwYW5kX2hlYWQoc2tiLCBVRFBfTUlOX0hFQURST09NLCAwLCBHRlBfQVRPTUlDKTtcXG5uZXQvdGlwYy91ZHBfbWVkaWEuYy0yNDktXFx0XFx0aWYgKGVycilcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM9MzA9c3RhdGljIGludCB4ZnJtX3NrYl9jaGVja19zcGFjZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy00My1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjQ0OlxcdHJldHVybiBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgbmhlYWQsIG50YWlsLCBHRlBfQVRPTUlDKTtcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTQ1LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTE6Mjg6MjcuMzEwNzI4NTE1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY2NDk3NTg3NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyBgcHNrYl9jYXJ2ZWAgYW5kIGBwc2tiX2V4dHJhY3RgIFVzYWdlKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgYSBoYW5kbGUgb24gd2hlcmUgdGhlc2UgZnVuY3Rpb25zLCBgcHNrYl9jYXJ2ZWAgYW5kIGBwc2tiX2V4dHJhY3RgLCBhcmUgYWN0dWFsbHkgYmVpbmcgdXRpbGl6ZWQuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiB0aGVpciBuYW1lIGFuZCBsaWtlbHkgcmVsYXRpb24gdG8gcGFja2V0IGJ1ZmZlciBtYW5pcHVsYXRpb24sIGlzIHRvIHplcm8gaW4gb24gdGhlIG5ldHdvcmsgY29yZS4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZXhhbWluaW5nIGBuZXQvY29yZS9za2J1ZmYuY2AuIFRoYXQncyB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGJlZ2luIGRpZ2dpbmcsIGFzIGl0J3MgdGhlIGhlYXJ0IG9mIGhvdyB0aGVzZSBgc2tfYnVmZmAgc3RydWN0dXJlcyBhcmUgY3JlYXRlZCwgbWFuYWdlZCwgYW5kIG1hbmlwdWxhdGVkLiBJdCdzIGEga2V5IHNwb3QgdG8gZXhwZWN0IHRvIGZpbmQgdGhlbSBpbnZvbHZlZCBpbiBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcGVyaGFwcywgb3B0aW1pemF0aW9uLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEzNTgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMToyODozMy45NjA0ODk1ODlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MjA5NzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBza2JfY2FydmV8cHNrYl9leHRyYWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jPTY4MjY9RVhQT1JUX1NZTUJPTChhbGxvY19za2Jfd2l0aF9mcmFncyk7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy02ODI4LS8qIGNhcnZlIG91dCB0aGUgZmlyc3Qgb2ZmIGJ5dGVzIGZyb20gc2tiIHdoZW4gb2ZmIFxcdTAwM2MgaGVhZGxlbiAqL1xcbm5ldC9jb3JlL3NrYnVmZi5jOjY4Mjk6c3RhdGljIGludCBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTMyIG9mZixcXG5uZXQvY29yZS9za2J1ZmYuYy02ODMwLVxcdFxcdFxcdFxcdCAgICBjb25zdCBpbnQgaGVhZGxlbiwgZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy02ODkxLVxcbm5ldC9jb3JlL3NrYnVmZi5jOjY4OTI6c3RhdGljIGludCBwc2tiX2NhcnZlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHUzMiBvZmYsIGdmcF90IGdmcCk7XFxubmV0L2NvcmUvc2tidWZmLmMtNjg5My1cXG5uZXQvY29yZS9za2J1ZmYuYy02ODk0LS8qIGNhcnZlIG91dCB0aGUgZmlyc3QgZWF0IGJ5dGVzIGZyb20gc2tiJ3MgZnJhZ19saXN0LiBNYXkgcmVjdXJzZSBpbnRvXFxubmV0L2NvcmUvc2tidWZmLmM6Njg5NTogKiBwc2tiX2NhcnZlKClcXG5uZXQvY29yZS9za2J1ZmYuYy02ODk2LSAqL1xcbm5ldC9jb3JlL3NrYnVmZi5jOjY4OTc6c3RhdGljIGludCBwc2tiX2NhcnZlX2ZyYWdfbGlzdChzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaGluZm8sIGludCBlYXQsXFxubmV0L2NvcmUvc2tidWZmLmMtNjg5OC1cXHRcXHRcXHRcXHRnZnBfdCBnZnBfbWFzaylcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTY5MjUtXFx0XFx0XFx0fVxcbm5ldC9jb3JlL3NrYnVmZi5jOjY5MjY6XFx0XFx0XFx0aWYgKHBza2JfY2FydmUobGlzdCwgZWF0LCBnZnBfbWFzaykgXFx1MDAzYyAwKSB7XFxubmV0L2NvcmUvc2tidWZmLmMtNjkyNy1cXHRcXHRcXHRcXHRrZnJlZV9za2IoY2xvbmUpO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNjk0OS0gKi9cXG5uZXQvY29yZS9za2J1ZmYuYzo2OTUwOnN0YXRpYyBpbnQgcHNrYl9jYXJ2ZV9pbnNpZGVfbm9ubGluZWFyKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHUzMiBvZmYsXFxubmV0L2NvcmUvc2tidWZmLmMtNjk1MS1cXHRcXHRcXHRcXHQgICAgICAgaW50IHBvcywgZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy03MDA2LVxcdC8qIHNwbGl0IGxpbmUgaXMgaW4gZnJhZyBsaXN0ICovXFxubmV0L2NvcmUvc2tidWZmLmM6NzAwNzpcXHRpZiAoayA9PSAwIFxcdTAwMjZcXHUwMDI2IHBza2JfY2FydmVfZnJhZ19saXN0KHNoaW5mbywgb2ZmIC0gcG9zLCBnZnBfbWFzaykpIHtcXG5uZXQvY29yZS9za2J1ZmYuYy03MDA4LVxcdFxcdC8qIHNrYl9mcmFnX3VucmVmKCkgaXMgbm90IG5lZWRlZCBoZXJlIGFzIHNoaW5mby1cXHUwMDNlbnJfZnJhZ3MgPSAwLiAqL1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNzAzMy0vKiByZW1vdmUgbGVuIGJ5dGVzIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgc2tiICovXFxubmV0L2NvcmUvc2tidWZmLmM6NzAzNDpzdGF0aWMgaW50IHBza2JfY2FydmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTMyIGxlbiwgZ2ZwX3QgZ2ZwKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTcwMzUte1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNzAzOC1cXHRpZiAobGVuIFxcdTAwM2MgaGVhZGxlbilcXG5uZXQvY29yZS9za2J1ZmYuYzo3MDM5OlxcdFxcdHJldHVybiBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXIoc2tiLCBsZW4sIGhlYWRsZW4sIGdmcCk7XFxubmV0L2NvcmUvc2tidWZmLmMtNzA0MC1cXHRlbHNlXFxubmV0L2NvcmUvc2tidWZmLmM6NzA0MTpcXHRcXHRyZXR1cm4gcHNrYl9jYXJ2ZV9pbnNpZGVfbm9ubGluZWFyKHNrYiwgbGVuLCBoZWFkbGVuLCBnZnApO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTcwNDItfVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNzA0Ni0gKi9cXG5uZXQvY29yZS9za2J1ZmYuYzo3MDQ3OnN0cnVjdCBza19idWZmICpwc2tiX2V4dHJhY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZixcXG5uZXQvY29yZS9za2J1ZmYuYy03MDQ4LVxcdFxcdFxcdCAgICAgaW50IHRvX2NvcHksIGdmcF90IGdmcClcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTcwNTQtXFxubmV0L2NvcmUvc2tidWZmLmM6NzA1NTpcXHRpZiAocHNrYl9jYXJ2ZShjbG9uZSwgb2ZmLCBnZnApIFxcdTAwM2MgMCB8fFxcbm5ldC9jb3JlL3NrYnVmZi5jLTcwNTYtXFx0ICAgIHBza2JfdHJpbShjbG9uZSwgdG9fY29weSkpIHtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTcwNjEtfVxcbm5ldC9jb3JlL3NrYnVmZi5jOjcwNjI6RVhQT1JUX1NZTUJPTChwc2tiX2V4dHJhY3QpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTcwNjMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDExOjI4OjM0LjAwOTcwNjIxNloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3Mzk2MDEzODY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdW5kZXJzdGFuZGluZyB3aGF0J3MgZ29pbmcgb24gd2l0aCBgcHNrYl9leHRyYWN0YDpcblxuKipUaGlua2luZyBUaHJvdWdoIGBwc2tiX2V4dHJhY3RgJ3MgVXNlcyoqXG5cbkFscmlnaHQsIHNvIEknbSBwcmVzZW50ZWQgd2l0aCBgcHNrYl9leHRyYWN0YC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcyBpczogKldoYXQgZXhhY3RseSBpcyB0aGlzIHRvb2wgb3IgZnVuY3Rpb24gc3VwcG9zZWQgdG8gYmUgZG9pbmc/KiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29yZSBwdXJwb3NlLiBJcyBpdCBmb3IgcGFyc2luZyBkYXRhPyBJcyBpdCBmb3IgZXh0cmFjdGluZyBzcGVjaWZpYyBpbmZvcm1hdGlvbiBmcm9tIGEgcGFydGljdWxhciBmb3JtYXQ/IElzIGl0IHBhcnQgb2YgYSBsYXJnZXIgc3lzdGVtIG9yIHdvcmtmbG93PyBUaGUgbmFtZSBpdHNlbGYgZ2l2ZXMgYSB2YWd1ZSBoaW50LCBidXQgSSBuZWVkIHNwZWNpZmljcy5cblxuTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgZ2VuZXJhdGluZyBxdWVzdGlvbnM6XG5cbiogICBXaGF0IGtpbmRzIG9mIGlucHV0cyBkb2VzIGl0IGFjY2VwdD8gSXMgaXQgZmlsZS1iYXNlZCwgb3IgZG9lcyBpdCB0YWtlIGRhdGEgc3RyZWFtcz8gRG9lcyBpdCB3b3JrIHdpdGggZGlmZmVyZW50IGZpbGUgZm9ybWF0cyAoZS5nLiwgdGV4dCwgSlNPTiwgWE1MLCBiaW5hcnkpP1xuKiAgIFdoYXQgb3V0cHV0cyBkb2VzIGl0IHByb2R1Y2U/IERvZXMgaXQgZ2VuZXJhdGUgbmV3IGZpbGVzLCBwcmludCB0byB0aGUgY29uc29sZSwgb3IgcmV0dXJuIHN0cnVjdHVyZWQgZGF0YSB0byBhbm90aGVyIHByb2dyYW0/XG4qICAgV2hhdCBpcyBpdHMgaW50ZW5kZWQgdXNlIGNhc2U/IElzIGl0IGEgZ2VuZXJhbC1wdXJwb3NlIGV4dHJhY3RvciBvciBkZXNpZ25lZCBmb3IgYSBzcGVjaWZpYyBkb21haW4gKGUuZy4sIGJpb2luZm9ybWF0aWNzLCBuZXR3b3JrIGFuYWx5c2lzLCBsb2cgcHJvY2Vzc2luZyk/XG4qICAgSG93IGlzIGl0IGludGVncmF0ZWQgaW50byBleGlzdGluZyBwcm9jZXNzZXM/IElzIGl0IGEgc3RhbmRhbG9uZSB0b29sIG9yIHBhcnQgb2YgYSBsYXJnZXIgcGlwZWxpbmU/XG5cbkknbGwgYmUgdGhpbmtpbmcgaW4gdGVybXMgb2YgaG93IEkgY2FuIHVzZSB0aGlzIGluIG15IG93biB3b3JrIC0gd2hhdCBwcm9ibGVtcyBpdCBjYW4gc29sdmUuIEFyZSB0aGVyZSBvcHBvcnR1bml0aWVzIHRvIHVzZSB0aGUgb3V0cHV0IG9mIGBwc2tiX2V4dHJhY3RgIGluIG15IGN1cnJlbnQgcHJvamVjdHM/IENhbiBJIGludGVncmF0ZSBpdCBhcyBhIGNvbXBvbmVudCB0byBtYWtlIG15IHdvcmsgbW9yZSBlZmZpY2llbnQsIG9yIGVuaGFuY2UgaXQ/XG5cbk5leHQsIEknbGwgZ28gYmV5b25kIHRoZSBxdWVzdGlvbnMgLSBJIHdpbGwgYmVnaW4gdG8gdmlzdWFsaXplIHRoZSBjb2RlLiBJJ2xsIG5lZWQgdG8gdGhpbmsgYWJvdXQgdGhlIGNvZGUncyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBhbmQgbG9vayBmb3IgZG9jdW1lbnRhdGlvbi4gSSB3aWxsIGFuYWx5emUgaXRzIGFsZ29yaXRobXMgdG8ga25vdyB0aGUgaW50ZXJuYWwgbWVjaGFuaXNtLiBJIGhhdmUgdG8gbG9vayBmb3IgZXhhbXBsZSB1c2FnZSBpbiBvcmRlciB0byBzZWUgaG93IGl0IGlzIHVzZWQgaW4gYSByZWFsIHNjZW5hcmlvLiBJZiBJIGhhdmUgdGhlIHNvdXJjZSBjb2RlLCBJIHdpbGwgdXNlIHRoYXQgdG8gZm9ybSBteSB1bmRlcnN0YW5kaW5nLiBJIGhhdmUgdG8gc2VlIGhvdyBpdCBjYW4gYmUgdXNlZCBmb3IgbXkgYXJlYSBvZiBleHBlcnRpc2UuXG5cbkluIGVzc2VuY2UsIEknbSB0cnlpbmcgdG8gcXVpY2tseSBidWlsZCBhIG1lbnRhbCBtb2RlbCBvZiBgcHNrYl9leHRyYWN0YCBhbmQgaXRzIHJvbGUgd2l0aGluIGEgYnJvYWRlciBjb250ZXh0LiBUaGF0IHdheSwgSSBjYW4gZGV0ZXJtaW5lIGl0cyByZWxldmFuY2UgYW5kIHBvdGVudGlhbCB1c2VmdWxuZXNzIHRvIG1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjcxNSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDExOjI4OjQxLjQwNTcyMjI1NVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA3OTkwODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHNrYl9leHRyYWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc2tidWZmLmM9NzAzND1zdGF0aWMgaW50IHBza2JfY2FydmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTMyIGxlbiwgZ2ZwX3QgZ2ZwKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNzA0Ni0gKi9cXG5uZXQvY29yZS9za2J1ZmYuYzo3MDQ3OnN0cnVjdCBza19idWZmICpwc2tiX2V4dHJhY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZixcXG5uZXQvY29yZS9za2J1ZmYuYy03MDQ4LVxcdFxcdFxcdCAgICAgaW50IHRvX2NvcHksIGdmcF90IGdmcClcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTcwNjEtfVxcbm5ldC9jb3JlL3NrYnVmZi5jOjcwNjI6RVhQT1JUX1NZTUJPTChwc2tiX2V4dHJhY3QpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTcwNjMtXFxuLS1cXG5uZXQvcmRzL3RjcF9yZWN2LmM9MTU1PXN0YXRpYyBpbnQgcmRzX3RjcF9kYXRhX3JlY3YocmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvcmRzL3RjcF9yZWN2LmMtMjE4LVxcbm5ldC9yZHMvdGNwX3JlY3YuYzoyMTk6XFx0XFx0XFx0Y2xvbmUgPSBwc2tiX2V4dHJhY3Qoc2tiLCBvZmZzZXQsIHRvX2NvcHksIGFyZy1cXHUwMDNlZ2ZwKTtcXG5uZXQvcmRzL3RjcF9yZWN2LmMtMjIwLVxcdFxcdFxcdGlmICghY2xvbmUpIHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz01MzM9aXB0ZnNfcHNrYl9hZGRfZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKnRwbCwgc3RydWN0IGlwdGZzX3NrYl9mcmFnX3dhbGsgKndhbGssXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTYxLS8qKlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo1NjI6ICogaXB0ZnNfcHNrYl9leHRyYWN0X3NlcSgpIC0gQ3JlYXRlIGFuZCBsb2FkIGRhdGEgaW50byBhIG5ldyBza19idWZmLlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy01NjMtICogQHNrYmxlbjogdGhlIHRvdGFsIGRhdGEgc2l6ZSBmb3IgYHNrYmAuXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9NTc3PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjU3ODppcHRmc19wc2tiX2V4dHJhY3Rfc2VxKHUzMiBza2JsZW4sIHN0cnVjdCBza2Jfc2VxX3N0YXRlICpzdCwgdTMyIG9mZiwgaW50IGxlbilcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTc5LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz05NDM9c3RhdGljIGJvb2wgX19pbnB1dF9wcm9jZXNzX3BheWxvYWQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHUzMiBkYXRhLFxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTExMzEtXFx0XFx0XFx0XFx0XFx0XFx0XFx0IHNrYnNlcSwgaXBobGVuKSkpIHtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTEzMjpcXHRcXHRcXHRcXHRza2IgPSBpcHRmc19wc2tiX2V4dHJhY3Rfc2VxKGlwbGVuLCBza2JzZXEsIGRhdGEsIGNhcHR1cmVsZW4pO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMTMzLVxcdFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTE6Mjg6NDEuNDc2NTI4NjY5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEzMDUwOTE1Mjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBuZXR3b3JraW5nIGNvcmUgc2l0dWF0aW9uLlxuXG4qKk5ldHdvcmsgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gemVybyBpbiBvbiB3aGF0IEtjb25maWcgb3B0aW9ucyBzcGVjaWZpY2FsbHkgcGVydGFpbiB0byB0aGUgbmV0d29ya2luZyBjb3JlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW52ZXN0aWdhdGUgZnVuY3Rpb25zIGxpa2UgYHBza2JfZXhwYW5kX2hlYWRgIGFuZCB0aGUgZmlsZSBgc2tidWZmLmNgLiBJIGJlbGlldmUgdGhlc2UgYXJlIGZ1bmRhbWVudGFsIHBpZWNlcywgc3Ryb25nbHkgc3VnZ2VzdGluZyBhIGNvbm5lY3Rpb24gdG8gdGhlIHByaW1hcnkgYENPTkZJR19ORVRgIG9wdGlvbi4gVG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGVzZSBzdXNwaWNpb25zLiBJIHNob3VsZCBleGFtaW5lIHRoZSBgbmV0L2NvcmUvTWFrZWZpbGVgIGFuZCBgbmV0L0tjb25maWdgIGZpbGVzIGRpcmVjdGx5IHRvIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRlcGVuZGVuY2llcyBhbmQgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQuIFRoaXMgbGV2ZWwgb2YgZGV0YWlsIGlzIGNydWNpYWwgZm9yIGFueSBtb2RpZmljYXRpb25zIG9yIGRlZXBlciBhbmFseXNpcyB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzOTIwLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTE6Mjg6NTQuNTI3NDQ2NTg3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjIwMzcxMTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tidWZmLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9NYWtlZmlsZS01LVxcbm5ldC9jb3JlL01ha2VmaWxlOjY6b2JqLXkgOj0gc29jay5vIHNrYnVmZi5vIGRhdGFncmFtLm8gc3RyZWFtLm8gc2NtLm8gXFxcXFxcbm5ldC9jb3JlL01ha2VmaWxlLTctXFx0IGdlbl9zdGF0cy5vIGdlbl9lc3RpbWF0b3IubyBuZXRfbmFtZXNwYWNlLm8gc2VjdXJlX3NlcS5vIFxcXFxcXG4tLVxcbm5ldC9jb3JlL2Zsb3dfZGlzc2VjdG9yLmM9MTAzMz1zdGF0aWMgYm9vbCBpc19wcHBvZV9zZXNfaGRyX3ZhbGlkKGNvbnN0IHN0cnVjdCBwcHBvZV9oZHIgKmhkcilcXG4tLVxcbm5ldC9jb3JlL2Zsb3dfZGlzc2VjdG9yLmMtMTA1MS0gKiBUaGUgZnVuY3Rpb24gd2lsbCB0cnkgdG8gcmV0cmlldmUgaW5kaXZpZHVhbCBrZXlzIGludG8gdGFyZ2V0IHNwZWNpZmllZFxcbm5ldC9jb3JlL2Zsb3dfZGlzc2VjdG9yLmM6MTA1MjogKiBieSBmbG93X2Rpc3NlY3RvciBmcm9tIGVpdGhlciB0aGUgc2tidWZmIG9yIGEgcmF3IGJ1ZmZlciBzcGVjaWZpZWQgYnkgdGhlXFxubmV0L2NvcmUvZmxvd19kaXNzZWN0b3IuYy0xMDUzLSAqIHJlc3QgcGFyYW1ldGVycy5cXG4tLVxcbm5ldC9pcHY2L2NhbGlwc28uYz0xMjQ2PXN0YXRpYyB2b2lkIGNhbGlwc29fcmVxX2RlbGF0dHIoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbi0tXFxubmV0L2lwdjYvY2FsaXBzby5jLTEyNzgtLyoqXFxubmV0L2lwdjYvY2FsaXBzby5jOjEyNzk6ICogY2FsaXBzb19za2J1ZmZfb3B0cHRyIC0gRmluZCB0aGUgQ0FMSVBTTyBvcHRpb24gaW4gdGhlIHBhY2tldFxcbm5ldC9pcHY2L2NhbGlwc28uYy0xMjgwLSAqIEBza2I6IHRoZSBwYWNrZXRcXG4tLVxcbm5ldC9pcHY2L2NhbGlwc28uYy0xMjg2LSAqL1xcbm5ldC9pcHY2L2NhbGlwc28uYzoxMjg3OnN0YXRpYyB1bnNpZ25lZCBjaGFyICpjYWxpcHNvX3NrYnVmZl9vcHRwdHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2Ni9jYWxpcHNvLmMtMTI4OC17XFxuLS1cXG5uZXQvaXB2Ni9jYWxpcHNvLmM9MTM4OT1zdGF0aWMgaW50IGNhbGlwc29fc2tidWZmX2RlbGF0dHIoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L2NhbGlwc28uYy0xMzk1LVxcbm5ldC9pcHY2L2NhbGlwc28uYzoxMzk2OlxcdGlmICghY2FsaXBzb19za2J1ZmZfb3B0cHRyKHNrYikpXFxubmV0L2lwdjYvY2FsaXBzby5jLTEzOTctXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvaXB2Ni9jYWxpcHNvLmM9MTQzNj1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldGxibF9jYWxpcHNvX29wcyBvcHMgPSB7XFxuLS1cXG5uZXQvaXB2Ni9jYWxpcHNvLmMtMTQ0OC1cXHQub3B0X2dldGF0dHIgICAgICA9IGNhbGlwc29fb3B0X2dldGF0dHIsXFxubmV0L2lwdjYvY2FsaXBzby5jOjE0NDk6XFx0LnNrYnVmZl9vcHRwdHIgICAgPSBjYWxpcHNvX3NrYnVmZl9vcHRwdHIsXFxubmV0L2lwdjYvY2FsaXBzby5jLTE0NTAtXFx0LnNrYnVmZl9zZXRhdHRyICAgPSBjYWxpcHNvX3NrYnVmZl9zZXRhdHRyLFxcbi0tXFxubmV0L25ldGxhYmVsL25ldGxhYmVsX2NhbGlwc28uYz02MjY9dW5zaWduZWQgY2hhciAqY2FsaXBzb19vcHRwdHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF9jYWxpcHNvLmMtNjMxLVxcdGlmIChvcHMpXFxubmV0L25ldGxhYmVsL25ldGxhYmVsX2NhbGlwc28uYzo2MzI6XFx0XFx0cmV0X3ZhbCA9IG9wcy1cXHUwMDNlc2tidWZmX29wdHB0cihza2IpO1xcbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF9jYWxpcHNvLmMtNjMzLVxcdHJldHVybiByZXRfdmFsO1xcbi0tXFxubmV0L3J4cnBjL01ha2VmaWxlPTg9cnhycGMteSA6PSBcXFxcXFxuLS1cXG5uZXQvcnhycGMvTWFrZWZpbGUtMzUtXFx0c2VydmVyX2tleS5vIFxcXFxcXG5uZXQvcnhycGMvTWFrZWZpbGU6MzY6XFx0c2tidWZmLm8gXFxcXFxcbm5ldC9yeHJwYy9NYWtlZmlsZS0zNy1cXHR0eGJ1Zi5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTE6Mjg6NTQuODg5NDkzODRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDk5OTgzOTAwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIE5ldHdvcmsgQ29yZSBCdWlsZCBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGBuZXQvY29yZS9NYWtlZmlsZWAgYW5kIGl0J3MgY2xlYXIgdGhhdCBgc2tidWZmLm9gIGdldHMgYnVpbHQgYmFzZWQgb24gdGhlIGBDT05GSUdfTkVUYCBvcHRpb24uIFRoYXQncyBnb29kIHRvIGtub3csIGEgc29saWQgZm91bmRhdGlvbmFsIGRlcGVuZGVuY3kuIE5vdywgdG8gZ2V0IGEgYmlnZ2VyIHBpY3R1cmUgb2YgaG93IHRoaXMgZW50aXJlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGlzIHB1dCB0b2dldGhlciwgSSBuZWVkIHRvIGNoZWNrIG91dCB0aGUgcGFyZW50IGBuZXQvTWFrZWZpbGVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYENPTkZJR19ORVRgIGl0c2VsZiBpcyBkZWZpbmVkIGFuZCB1c2VkLCBhbmQgaG93IGV2ZXJ5dGhpbmcgaW4gdGhlIGBuZXRgIGRpcmVjdG9yeSBpcyBvcmNoZXN0cmF0ZWQgZnJvbSBhIGJ1aWxkIHBlcnNwZWN0aXZlLiBHb3R0YSB0cmFjZSB0aGlzIHRocm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0OTg3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTE6Mjg6NTkuODg5MzM1Mjc4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzNDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBuZXR3b3JraW5nLlxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0IyAyIFNlcCAyMDAwLCBDaHJpc3RvcGggSGVsbHdpZyBcXHUwMDNjaGNoQGluZnJhZGVhZC5vcmdcXHUwMDNlXFxuICAgNjpcXHQjIFJld3JpdHRlbiB0byB1c2UgbGlzdHMgaW5zdGVhZCBvZiBpZi1zdGF0ZW1lbnRzLlxcbiAgIDc6XFx0I1xcbiAgIDg6XFx0XFxuICAgOTpcXHRvYmoteVxcdFxcdFxcdFxcdDo9IGRldnJlcy5vIHNvY2tldC5vIGNvcmUvXFxuICAxMDpcXHRcXG4gIDExOlxcdG9iai0kKENPTkZJR19DT01QQVQpXFx0XFx0Kz0gY29tcGF0Lm9cXG4gIDEyOlxcdFxcbiAgMTM6XFx0IyBMTEMgaGFzIHRvIGJlIGxpbmtlZCBiZWZvcmUgdGhlIGZpbGVzIGluIG5ldC84MDIvXFxuICAxNDpcXHRvYmotJChDT05GSUdfTExDKVxcdFxcdCs9IGxsYy9cXG4gIDE1OlxcdG9iai15XFx0XFx0XFx0XFx0Kz0gZXRoZXJuZXQvIDgwMi8gc2NoZWQvIG5ldGxpbmsvIGJwZi8gZXRodG9vbC9cXG4gIDE2OlxcdG9iai0kKENPTkZJR19ORVRGSUxURVIpXFx0XFx0Kz0gbmV0ZmlsdGVyL1xcbiAgMTc6XFx0b2JqLSQoQ09ORklHX0lORVQpXFx0XFx0Kz0gaXB2NC9cXG4gIDE4OlxcdG9iai0kKENPTkZJR19UTFMpXFx0XFx0Kz0gdGxzL1xcbiAgMTk6XFx0b2JqLSQoQ09ORklHX1hGUk0pXFx0XFx0Kz0geGZybS9cXG4gIDIwOlxcdG9iai0kKENPTkZJR19VTklYKVxcdFxcdCs9IHVuaXgvXFxuICAyMTpcXHRvYmotJChDT05GSUdfSU5FVF9QU1ApXFx0XFx0Kz0gcHNwL1xcbiAgMjI6XFx0b2JqLXlcXHRcXHRcXHRcXHQrPSBpcHY2L1xcbiAgMjM6XFx0b2JqLSQoQ09ORklHX1BBQ0tFVClcXHRcXHQrPSBwYWNrZXQvXFxuICAyNDpcXHRvYmotJChDT05GSUdfTkVUX0tFWSlcXHRcXHQrPSBrZXkvXFxuICAyNTpcXHRvYmotJChDT05GSUdfQlJJREdFKVxcdFxcdCs9IGJyaWRnZS9cXG4gIDI2OlxcdG9iai0kKENPTkZJR19ORVRfREVWTElOSylcXHQrPSBkZXZsaW5rL1xcbiAgMjc6XFx0b2JqLXlcXHRcXHRcXHRcXHQrPSBkc2EvXFxuICAyODpcXHRvYmotJChDT05GSUdfWDI1KVxcdFxcdCs9IHgyNS9cXG4gIDI5OlxcdG9iai0kKENPTkZJR19MQVBCKVxcdFxcdCs9IGxhcGIvXFxuICAzMDpcXHRvYmotJChDT05GSUdfQ0FOKVxcdFxcdCs9IGNhbi9cXG4gIDMxOlxcdG9iai0kKENPTkZJR19CVClcXHRcXHQrPSBibHVldG9vdGgvXFxuICAzMjpcXHRvYmotJChDT05GSUdfU1VOUlBDKVxcdFxcdCs9IHN1bnJwYy9cXG4gIDMzOlxcdG9iai0kKENPTkZJR19BRl9SWFJQQylcXHRcXHQrPSByeHJwYy9cXG4gIDM0OlxcdG9iai0kKENPTkZJR19BRl9LQ00pXFx0XFx0Kz0ga2NtL1xcbiAgMzU6XFx0b2JqLSQoQ09ORklHX1NUUkVBTV9QQVJTRVIpXFx0Kz0gc3RycGFyc2VyL1xcbiAgMzY6XFx0b2JqLSQoQ09ORklHX0FUTSlcXHRcXHQrPSBhdG0vXFxuICAzNzpcXHRvYmotJChDT05GSUdfTDJUUClcXHRcXHQrPSBsMnRwL1xcbiAgMzg6XFx0b2JqLSQoQ09ORklHX1BIT05FVClcXHRcXHQrPSBwaG9uZXQvXFxuICAzOTpcXHRpZm5lcSAoJChDT05GSUdfVkxBTl84MDIxUSksKVxcbiAgNDA6XFx0b2JqLXlcXHRcXHRcXHRcXHQrPSA4MDIxcS9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTE6Mjg6NTkuODg5NDAwMjI4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4MjM2MTk0MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHRob3VnaCBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgRGVwZW5kZW5jeSBvZiBza2J1ZmYuYyBDb21waWxhdGlvbioqXG5cbk9rYXksIHNvIGBuZXQvY29yZS9za2J1ZmYuY2AgaXMgYmVpbmcgY29tcGlsZWQsIHdoaWNoIGltcGxpZXMgYENPTkZJR19ORVRgIGlzIGVuYWJsZWQsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGlzLiBUaGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gdHJhY2UgdGhhdCBkZXBlbmRlbmN5IGJhY2sgdG8gaXRzIHNvdXJjZS4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBgbmV0L0tjb25maWdgIGZpbGUuIFRoYXQncyB3aGVyZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGFyZSBkZWZpbmVkLiBJJ20gYXNzdW1pbmcgdGhhdCdzIHdoZXJlIEknbGwgZmluZCB0aGUgcmVsZXZhbnQgYGNvbmZpZ2Agc3RhdGVtZW50LCBwcm9iYWJseSBzb21ldGhpbmcgbGlrZSBgY29uZmlnIE5FVGAgb3Igc2ltaWxhciB0aGF0IGVuYWJsZXMgdGhlIGVudGlyZSBuZXR3b3JraW5nIHN0YWNrLiBUaGVuIEkgY2FuIGNvbmZpcm0gaWYgdGhlcmUncyBhIGRpcmVjdCBvciBpbmRpcmVjdCByZWxhdGlvbnNoaXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1ODg3LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMToyOTowNC43MTMwMjIxNjlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2NTk1OTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbnVjb25maWcgTkVUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0LzlwL0tjb25maWctNS1cXG5uZXQvOXAvS2NvbmZpZzo2Om1lbnVjb25maWcgTkVUXzlQXFxubmV0LzlwL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiUGxhbiA5IFJlc291cmNlIFNoYXJpbmcgU3VwcG9ydCAoOVAyMDAwKVxcXCJcXG4tLVxcbm5ldC9LY29uZmlnLTUtXFxubmV0L0tjb25maWc6NjptZW51Y29uZmlnIE5FVFxcbm5ldC9LY29uZmlnLTctXFx0Ym9vbCBcXFwiTmV0d29ya2luZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L0tjb25maWc9MTU0PWNvbmZpZyBORVRXT1JLX1BIWV9USU1FU1RBTVBJTkdcXG4tLVxcbm5ldC9LY29uZmlnLTE2NC1cXG5uZXQvS2NvbmZpZzoxNjU6bWVudWNvbmZpZyBORVRGSUxURVJcXG5uZXQvS2NvbmZpZy0xNjYtXFx0Ym9vbCBcXFwiTmV0d29yayBwYWNrZXQgZmlsdGVyaW5nIGZyYW1ld29yayAoTmV0ZmlsdGVyKVxcXCJcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy0yLVxcbm5ldC9kc2EvS2NvbmZpZzozOm1lbnVjb25maWcgTkVUX0RTQVxcbm5ldC9kc2EvS2NvbmZpZy00LVxcdHRyaXN0YXRlIFxcXCJEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlXFxcIlxcbi0tXFxubmV0L2lmZS9LY29uZmlnLTUtXFxubmV0L2lmZS9LY29uZmlnOjY6bWVudWNvbmZpZyBORVRfSUZFXFxubmV0L2lmZS9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIkludGVyLUZFIGJhc2VkIG9uIElFVEYgRm9yQ0VTIEludGVyRkUgTEZCXFxcIlxcbi0tXFxubmV0L25zaC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L25zaC9LY29uZmlnOjI6bWVudWNvbmZpZyBORVRfTlNIXFxubmV0L25zaC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk5ldHdvcmsgU2VydmljZSBIZWFkZXIgKE5TSCkgcHJvdG9jb2xcXFwiXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy01LVxcbm5ldC9zY2hlZC9LY29uZmlnOjY6bWVudWNvbmZpZyBORVRfU0NIRURcXG5uZXQvc2NoZWQvS2NvbmZpZy03LVxcdGJvb2wgXFxcIlFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZ1xcXCJcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnPTQxOD1jb25maWcgTkVUX1NDSF9EVUFMUEkyXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy00MjktXFxubmV0L3NjaGVkL0tjb25maWc6NDMwOm1lbnVjb25maWcgTkVUX1NDSF9ERUZBVUxUXFxubmV0L3NjaGVkL0tjb25maWctNDMxLVxcdGJvb2wgXFxcIkFsbG93IG92ZXJyaWRlIGRlZmF1bHQgcXVldWUgZGlzY2lwbGluZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTE6Mjk6MDQuNzc5NjI0Mjg0WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4NTEzOTQ0MTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFNLQiBNZW1vcnkgTWFuYWdlbWVudCBDaGFuZ2VzKipcblxuT2theSwgbGV0J3MgbmFpbCBkb3duIHdoYXQgd2UncmUgZ29pbmcgdG8gZm9jdXMgb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBpbXBvcnRhbnQgc3ltYm9scyBmb3IgZnV6emluZywgYW5kIGJhc2VkIG9uIHRoZSBwYXRjaCwgaXQgc2VlbXMgbGlrZSBgcHNrYl9leHBhbmRfaGVhZGAgYW5kIGBwc2tiX2V4dHJhY3RgIGFyZSBrZXkuIEkgc2VlIHRoZXkncmUgYm90aCBleHBvcnRlZCBzeW1ib2xzLCBhbmQgYHBza2JfZXh0cmFjdGAgaW5kaXJlY3RseSBjYWxscyBgcHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyYC5cblxuV2FpdCBhIG1pbnV0ZSwgYXJlIHRob3NlIGBza2JfZGF0YXJlZl9iaWFzYCBhbmQgYHNrYl9kYXRhX2lzX3NoYXJlZGAgZnVuY3Rpb25zIGlubGluZWQ/IFllcywgdGhleSdyZSBkZWZpbmVkIGFzIGBzdGF0aWMgaW5saW5lYCBpbiBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAsIHNvIHRoZXkgYXJlLiBBbmQgYHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcmAgaXMgYSBzdGF0aWMgZnVuY3Rpb24gaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgYWxzbyByZW1lbWJlciB0aGF0IGBwc2tiX2V4cGFuZF9oZWFkYCBpcyBhbiBBUEkgZW50cnlwb2ludC5cblxuTm93LCBsZXQgbWUgbWFrZSBzdXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgdXNlZC4gQSBxdWljayBjaGVjayBzaG93cyB0aGF0IGBwc2tiX2V4cGFuZF9oZWFkYCBpcyBwcmV0dHkgdWJpcXVpdG91cywgYmVpbmcgdXNlZCBpbiBmdW5jdGlvbnMgbGlrZSBgc2tiX3VuY2xvbmVgLCBgc2tiX3JlYWxsb2NfaGVhZHJvb21gLCBgc2tiX2Nvd19kYXRhYCwgYW5kIGBfX19wc2tiX3RyaW1gLiBUaGF0IGNvbmZpcm1zIG15IGluaXRpYWwgaHVuY2guIFNvLCBJJ20gY29uZmlkZW50IHRoYXQgdGhlIGNvcmUgYEZvY3VzU3ltYm9sc2AgYXJlIGBbXCJwc2tiX2V4cGFuZF9oZWFkXCIsIFwicHNrYl9leHRyYWN0XCJdYC5cblxuUmVnYXJkaW5nIGBFbmFibGVDb25maWdzYCwgdGhlIHJlbGV2YW50IGZlYXR1cmUgc2V0IGlzIGRlZmluaXRlbHkgYE5FVGAuXG5cbk9rYXksIGxldCdzIHN1bW1hcml6ZSB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzLiBXZSdyZSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZ2AgdG8gYHRydWVgIOKAkyBpdOKAmXMgYSBjcml0aWNhbCBjaGFuZ2UuIFRoZSBgUmVhc29uaW5nYCB3aWxsIGhpZ2hsaWdodCB0aGUgZmFjdCB0aGF0IHRoZSBwYXRjaCByZXBsYWNlcyBgc2tiX2Nsb25lZChza2IpYCB3aXRoIGBza2JfZGF0YV9pc19zaGFyZWQoc2tiKWAgaW4gYHBza2JfZXhwYW5kX2hlYWRgIGFuZCBgcHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyYCBhbmQgaW50cm9kdWNlcyBoZWxwZXIgZnVuY3Rpb25zIGBza2JfZGF0YXJlZl9iaWFzYCBhbmQgYHNrYl9kYXRhX2lzX3NoYXJlZGAgaW4gYGluY2x1ZGUvbGludXgvc2tidWZmLmhgIGZvciBoYW5kbGluZyBgc2tiLVx1MDAzZW5vaGRyYC4gVGhpcyBjb3JlIGxvZ2ljIHNoaWZ0IGltcGFjdHMgU0tCIG1lbW9yeSBtYW5hZ2VtZW50LCBjbG9uaW5nLCBhbmQgdW5zaGFyaW5nIHRocm91Z2hvdXQgdGhlIG5ldHdvcmtpbmcgc3RhY2suIFRoZXJlZm9yZSwgdGhlIGNoYW5nZSBpcyByZWFjaGFibGUsIHNpZ25pZmljYW50LCBhbmQgZGVzZXJ2ZXMgZm9jdXNlZCBmdXp6aW5nLiBGaW5hbGx5LCB0aGUgYEZvY3VzU3ltYm9sc2Agd2lsbCBiZSBgW1wicHNrYl9leHBhbmRfaGVhZFwiLCBcInBza2JfZXh0cmFjdFwiXWAsIGFuZCB0aGUgYEVuYWJsZUNvbmZpZ3NgIHdpbGwgYmUgYFtcIk5FVFwiXWAuXG5cbkxldCdzIGRvIHRoaXMuIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NTc4LCJPdXRwdXRUb2tlbnMiOjE0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMToyOToyMy4yOTM1NzE4OTRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDcwNTA1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHNrYl9leHBhbmRfaGVhZFwiLFxuICAgIFwicHNrYl9leHRyYWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBgc2tiX2RhdGFyZWZfYmlhcygpYCBhbmQgYHNrYl9kYXRhX2lzX3NoYXJlZCgpYCB0byBmaXggZGF0YSBzaGFyaW5nIGRldGVjdGlvbiBmb3Igc2tfYnVmZnMgd2hlbiBgc2tiLVxcdTAwM2Vub2hkcmAgaXMgc2V0LCB1cGRhdGluZyBgcHNrYl9leHBhbmRfaGVhZGAgYW5kIGBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXJgIHRvIHVzZSBgc2tiX2RhdGFfaXNfc2hhcmVkYCByYXRoZXIgdGhhbiBgc2tiX2Nsb25lZGAuIFRoaXMgbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGJ1ZmZlciBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBza2JfZXhwYW5kX2hlYWRcIixcbiAgICBcInBza2JfZXh0cmFjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYHNrYl9kYXRhcmVmX2JpYXMoKWAgYW5kIGBza2JfZGF0YV9pc19zaGFyZWQoKWAgdG8gZml4IGRhdGEgc2hhcmluZyBkZXRlY3Rpb24gZm9yIHNrX2J1ZmZzIHdoZW4gYHNrYi1cXHUwMDNlbm9oZHJgIGlzIHNldCwgdXBkYXRpbmcgYHBza2JfZXhwYW5kX2hlYWRgIGFuZCBgcHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyYCB0byB1c2UgYHNrYl9kYXRhX2lzX3NoYXJlZGAgcmF0aGVyIHRoYW4gYHNrYl9jbG9uZWRgLiBUaGlzIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBidWZmZXIgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTE6Mjk6MjMuMzc0MjgzOTM5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTEzOTg1NTM5MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMToyOToyMy4zNzQ3NzE2MDhaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMTEzOTgwNjI3NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYHNrYl9kYXRhcmVmX2JpYXMoKWAgYW5kIGBza2JfZGF0YV9pc19zaGFyZWQoKWAgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGRhdGEgYnVmZmVyIC8gc2hhcmVkIGluZm8gb2YgYW4gc2tfYnVmZiBpcyBhY3RpdmVseSBzaGFyZWQgYnkgb3RoZXIgY2xvbmVzIGR1cmluZyBoZWFkIHJlYWxsb2NhdGlvbiAoYHBza2JfZXhwYW5kX2hlYWRgIGFuZCBgcHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyYCkuXFxuXFxuS01TQU4gdnMgS0FTQU4gYW5hbHlzaXM6XFxuLSBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkga2VybmVsIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZGF0YSBsZW5ndGggLyBib3VuZHMgY2FsY3VsYXRpb25zIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIG1lbW9yeS4gVGhlIGZpZWxkcyBhY2Nlc3NlZCAoYHNrYi1cXHUwMDNlY2xvbmVkYCwgYHNrYi1cXHUwMDNlbm9oZHJgLCBhbmQgYHNoaW5mby1cXHUwMDNlZGF0YXJlZmApIGFyZSB3ZWxsLWRlZmluZWQgYW5kIGluaXRpYWxpemVkIHNrYiBtZXRhZGF0YS5cXG4tIEtBU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSByaXNrcyBhc3NvY2lhdGVkIHdpdGggdGhlc2UgcmVmY291bnQgYW5kIHNoYXJpbmcgY2hlY2sgbW9kaWZpY2F0aW9ucyByZWxhdGUgdG8gc2tiIGRhdGEgb3duZXJzaGlwLCBzdWNoIGFzIHByZW1hdHVyZSBoZWFkIGZyZWVpbmcgb3IgaW1wcm9wZXIgZnJhZyByZWZjb3VudGluZyBsZWFkaW5nIHRvIFVzZS1BZnRlci1GcmVlIChVQUYpIG9yIERvdWJsZS1GcmVlIGVycm9ycy4gVGhlc2UgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgYXJlIGRpcmVjdGx5IGRldGVjdGVkIGJ5IEtBU0FOLlxcblxcblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDYzYjE0NjBhMDQyMDY3MDIzNTE3NzY1Mzc2NWJhMzNhMDQwOWU5MDhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxMToyNjozMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2tidWZmLmggYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXG5pbmRleCA0MjFmNmZjNDU0NTExLi5lZmVlZjE0OGUxYmE1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxuKysrIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxuQEAgLTEyOTUsNiArMTI5NSwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2tiX3VucmVmKHN0cnVjdCBza19idWZmICpza2IpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBpbnQgc2tiX2RhdGFyZWZfYmlhcyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3tcbitcdHJldHVybiBza2ItXHUwMDNlbm9oZHIgPyAoMSBcdTAwM2NcdTAwM2MgU0tCX0RBVEFSRUZfU0hJRlQpICsgMSA6IDE7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBza2JfZGF0YV91bnJlZihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0ICBzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaGluZm8pXG4ge1xuQEAgLTEzMDMsNyArMTMwOCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBza2JfZGF0YV91bnJlZihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKCFza2ItXHUwMDNlY2xvbmVkKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdGJpYXMgPSBza2ItXHUwMDNlbm9oZHIgPyAoMSBcdTAwM2NcdTAwM2MgU0tCX0RBVEFSRUZfU0hJRlQpICsgMSA6IDE7XG4rXHRiaWFzID0gc2tiX2RhdGFyZWZfYmlhcyhza2IpO1xuIFxuIFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNnNoaW5mby1cdTAwM2VkYXRhcmVmKSA9PSBiaWFzKVxuIFx0XHRzbXBfcm1iKCk7XG5AQCAtMjAxOSw2ICsyMDI0LDEyIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnNrYl9nZXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiAgKiBJZiB1c2VycyA9PSAxLCB3ZSBhcmUgdGhlIG9ubHkgb3duZXIgYW5kIGNhbiBhdm9pZCByZWR1bmRhbnQgYXRvbWljIGNoYW5nZXMuXG4gICovXG4gXG4rc3RhdGljIGlubGluZSBib29sIHNrYl9kYXRhX2lzX3NoYXJlZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3tcbitcdHJldHVybiBza2ItXHUwMDNlY2xvbmVkIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIGF0b21pY19yZWFkKFx1MDAyNnNrYl9zaGluZm8oc2tiKS1cdTAwM2VkYXRhcmVmKSAhPSBza2JfZGF0YXJlZl9iaWFzKHNrYik7XG4rfVxuK1xuIC8qKlxuICAqXHRza2JfY2xvbmVkIC0gaXMgdGhlIGJ1ZmZlciBhIGNsb25lXG4gICpcdEBza2I6IGJ1ZmZlciB0byBjaGVja1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmNcbmluZGV4IDk2NmFmM2JlZWQ5NGQuLmY0YzA2NDVmOThkM2YgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9za2J1ZmYuY1xuKysrIGIvbmV0L2NvcmUvc2tidWZmLmNcbkBAIC0yMzMxLDcgKzIzMzEsNyBAQCBpbnQgcHNrYl9leHBhbmRfaGVhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmhlYWQsIGludCBudGFpbCxcbiBcdCAqIGlzIG5vdCB3ZSBjYW4ganVzdCBkcm9wIHRoZSBvbGQgaGVhZCBhbmQgbGV0IHRoZSBleGlzdGluZyByZWZjb3VudFxuIFx0ICogYmUgc2luY2UgYWxsIHdlIGRpZCBpcyByZWxvY2F0ZSB0aGUgdmFsdWVzXG4gXHQgKi9cbi1cdGlmIChza2JfY2xvbmVkKHNrYikpIHtcbitcdGlmIChza2JfZGF0YV9pc19zaGFyZWQoc2tiKSkge1xuIFx0XHRpZiAoc2tiX29ycGhhbl9mcmFncyhza2IsIGdmcF9tYXNrKSlcbiBcdFx0XHRnb3RvIG5vZnJhZ3M7XG4gXHRcdGlmIChza2JfemNvcHkoc2tiKSlcbkBAIC02ODU1LDcgKzY4NTUsNyBAQCBzdGF0aWMgaW50IHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1MzIgb2ZmLFxuIFx0ICAgICAgIHNrYl9zaGluZm8oc2tiKSxcbiBcdCAgICAgICBvZmZzZXRvZihzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvLFxuIFx0XHRcdGZyYWdzW3NrYl9zaGluZm8oc2tiKS1cdTAwM2Vucl9mcmFnc10pKTtcbi1cdGlmIChza2JfY2xvbmVkKHNrYikpIHtcbitcdGlmIChza2JfZGF0YV9pc19zaGFyZWQoc2tiKSkge1xuIFx0XHQvKiBkcm9wIHRoZSBvbGQgaGVhZCBncmFjZWZ1bGx5ICovXG4gXHRcdGlmIChza2Jfb3JwaGFuX2ZyYWdzKHNrYiwgZ2ZwX21hc2spKSB7XG4gXHRcdFx0c2tiX2tmcmVlX2hlYWQoZGF0YSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMToyOToyMy4zNzQ3NzMwNDhaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTUxMDU0MzUyMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRXZhbHVhdGlvbiBmb3IgU0tCIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHNlcmllcywgdG91Y2hpbmcgYGluY2x1ZGUvbGludXgvc2tidWZmLmhgIGFuZCBgbmV0L2NvcmUvc2tidWZmLmNgLCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24sIG9yIGlmIHN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQuIEkgbmVlZCB0byBhcHBseSBhIHN5c3RlbWF0aWMgYXBwcm9hY2ggYmFzZWQgb24gdGhvc2UgY3JpdGVyaWEuXG5cbkZpcnN0LCBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiBvZiB0aGUgcnVsZXMuIFRoZSBwcmltYXJ5IGNvbmNlcm4gZm9yIEtNU0FOIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBwYXJ0aWN1bGFybHkgd2hlbiBpdCBjb21lcyB0byBkYXRhIHN0cnVjdHVyZXMgcGFzc2VkIHRvIHVzZXJzcGFjZSBvciB3aGVuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGluZmx1ZW5jZSBjb250cm9sIGZsb3cuIEknbSBhbHNvIGxvb2tpbmcgZm9yIGFueSBhbGxvY2F0aW9ucyBvciBpbml0aWFsaXphdGlvbnMgb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlci4gQ29udmVyc2VseSwgaWYgaXQncyBwcmltYXJpbHkgYWJvdXQgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIG92ZXJmbG93cywgTlVMTCBkZXJlZmVyZW5jZXMsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MsIEtBU0FOIGlzIGxpa2VseSB0aGUgcmlnaHQgdG9vbC5cblxuTm93LCBsZXQncyBhbmFseXplIHRoZSBwYXRjaC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gaW52b2x2ZSBzb21lIGNoYW5nZXMgcmVsYXRlZCB0byBgc2tfYnVmZmAgKHNvY2tldCBidWZmZXIpIHJlZmVyZW5jZSBjb3VudGluZywgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiBkYXRhIHNoYXJpbmcgYW5kIGNsb25pbmcuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgYHNrYl9kYXRhcmVmX2JpYXNgIGZ1bmN0aW9uIGFuZCBgc2tiX2RhdGFfaXNfc2hhcmVkYCBmdW5jdGlvbi4gSXQgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byBvcHRpbWl6YXRpb25zIGFuZCByZWZhY3RvcmluZ3MgYXJvdW5kIGhvdyBTS0JzIGFyZSBoYW5kbGVkIGFuZCBjbG9uZWQuXG5cblNwZWNpZmljYWxseSwgSSBzZWUgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgYHBza2JfZXhwYW5kX2hlYWRgIGFuZCBgcHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyYC4gQm90aCBhcmUgcmVsYXRlZCB0byBtb2RpZnlpbmcgU0tCIGhlYWRlcnMvZGF0YSwgcGFydGljdWxhcmx5IGluIGNhc2VzIG9mIGNsb25pbmcgYW5kIHNoYXJpbmcuIEdpdmVuIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSByZWxhdGVkIHRvIG1lbW9yeSBtYW5pcHVsYXRpb24gd2l0aGluIHRoZSBTS0Igc3RydWN0dXJlIGl0c2VsZiwgYW5kIGJhc2VkIG9uIHRoZSBmYWN0IHRoYXQgYHNrYl9kYXRhX2lzX3NoYXJlZGAgaXMgYmVpbmcgdXNlZCBpbiB0aG9zZSB0d28gZnVuY3Rpb25zLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRob3NlIGZ1bmN0aW9ucyBkbywgd2hhdCBraW5kIG9mIG9wZXJhdGlvbnMgdGhleSBwZXJmb3JtIG9uIHRoZSBTS0IgZGF0YSwgYW5kIHRoZSBjb250ZXh0IGluIHdoaWNoIHRoZXkncmUgY2FsbGVkLiBJIHN1c3BlY3QgdGhhdCBiZWNhdXNlIHdlJ3JlIGxvb2tpbmcgYXQgb3BlcmF0aW9ucyBvbiBTS0IgZGF0YSwgaXQncyBwb3NzaWJsZSB0aGF0IGRhdGEgaXMgcG90ZW50aWFsbHkgYmVpbmcgcmVsb2NhdGVkLCB3aGljaCBtaWdodCBiZSBhIHNjZW5hcmlvIHdoZXJlIHdlIHdvdWxkIHdhbnQgdG8gY2hlY2sgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBJIGFsc28ga25vdyB0aGF0IFNLQnMgYXJlIGludm9sdmVkIGluIG5ldHdvcmsgSS9PLCBtZWFuaW5nIHRoYXQgZGF0YSBjYW4gdHJhbnNpdCBmcm9tIGtlcm5lbCBzcGFjZSB0byB1c2VyIHNwYWNlIGFuZCB2aWNlLXZlcnNhLCB3aGljaCBjb3VsZCBiZSBhbm90aGVyIHNvdXJjZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuVG8gZGV0ZXJtaW5lIHRoaXMsIEknbGwgbmVlZCB0byBkbyBzb21lIGNvZGUgYXJjaGFlb2xvZ3kgYW5kIHNlZSB3aGF0IGZ1bmN0aW9ucyBjYWxsIGBwc2tiX2V4cGFuZF9oZWFkYCBhbmQgYHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcmAgYW5kIGhvdyBTS0IgZGF0YSBpcyBzdWJzZXF1ZW50bHkgdXNlZC4gVGhlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRob3NlIGZ1bmN0aW9ucyBpbiBjb250ZXh0LCBwcm9iYWJseSB1c2luZyBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgYW5kIHNlZSBob3cgdGhlIHBhdGNoIGltcGFjdHMgdGhlIGJlaGF2aW9yLiBUaGVuLCBJIGNhbiBtYWtlIGEgZGVjaXNpb24gYXMgdG8gd2hldGhlciBvciBub3QgdGhpcyB3YXJyYW50cyBLTVNBTi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc5MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMTozMDoxOC40ODAyMTIwNDNaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NzExODMzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwc2tiX2V4cGFuZF9oZWFkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jPTIyNzU9RVhQT1JUX1NZTUJPTChfX3Bza2JfY29weV9mY2xvbmUpO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjI3Ny0vKipcXG5uZXQvY29yZS9za2J1ZmYuYzoyMjc4OiAqXFx0cHNrYl9leHBhbmRfaGVhZCAtIHJlYWxsb2NhdGUgaGVhZGVyIG9mIFxcdTAwMjZza19idWZmXFxubmV0L2NvcmUvc2tidWZmLmMtMjI3OS0gKlxcdEBza2I6IGJ1ZmZlciB0byByZWFsbG9jYXRlXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0yMjk2LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjIyOTc6aW50IHBza2JfZXhwYW5kX2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5oZWFkLCBpbnQgbnRhaWwsXFxubmV0L2NvcmUvc2tidWZmLmMtMjI5OC1cXHRcXHQgICAgIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjM3OS19XFxubmV0L2NvcmUvc2tidWZmLmM6MjM4MDpFWFBPUlRfU1lNQk9MKHBza2JfZXhwYW5kX2hlYWQpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTIzODEtXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0yMzg0PXN0cnVjdCBza19idWZmICpza2JfcmVhbGxvY19oZWFkcm9vbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaGVhZHJvb20pXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0yMzkyLVxcdFxcdHNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcXG5uZXQvY29yZS9za2J1ZmYuYzoyMzkzOlxcdFxcdGlmIChza2IyIFxcdTAwMjZcXHUwMDI2IHBza2JfZXhwYW5kX2hlYWQoc2tiMiwgU0tCX0RBVEFfQUxJR04oZGVsdGEpLCAwLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTIzOTQtXFx0XFx0XFx0XFx0XFx0ICAgICBHRlBfQVRPTUlDKSkge1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MjQwND1pbnQgX19za2JfdW5jbG9uZV9rZWVwdHJ1ZXNpemUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgcHJpKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjQxMi1cXG5uZXQvY29yZS9za2J1ZmYuYzoyNDEzOlxcdHJlcyA9IHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCAwLCBwcmkpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTI0MTQtXFx0aWYgKHJlcylcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTI0NDg9c3RydWN0IHNrX2J1ZmYgKnNrYl9leHBhbmRfaGVhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaGVhZHJvb20pXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0yNDU4LVxcdGRlbHRhID0gU0tCX0RBVEFfQUxJR04oZGVsdGEpO1xcbm5ldC9jb3JlL3NrYnVmZi5jOjI0NTk6XFx0LyogcHNrYl9leHBhbmRfaGVhZCgpIG1pZ2h0IGNyYXNoLCBpZiBza2IgaXMgc2hhcmVkLiAqL1xcbm5ldC9jb3JlL3NrYnVmZi5jLTI0NjAtXFx0aWYgKHNrYl9zaGFyZWQoc2tiKSB8fCAhaXNfc2tiX3dtZW0oc2tiKSkge1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjQ3MC1cXHR9XFxubmV0L2NvcmUvc2tidWZmLmM6MjQ3MTpcXHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIGRlbHRhLCAwLCBHRlBfQVRPTUlDKSlcXG5uZXQvY29yZS9za2J1ZmYuYy0yNDcyLVxcdFxcdGdvdG8gZmFpbDtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTI1Njc9aW50IF9fc2tiX3BhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcGFkLCBib29sIGZyZWVfb25fZXJyb3IpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0yNTc5LVxcdGlmIChsaWtlbHkoc2tiX2Nsb25lZChza2IpIHx8IG50YWlsIFxcdTAwM2UgMCkpIHtcXG5uZXQvY29yZS9za2J1ZmYuYzoyNTgwOlxcdFxcdGVyciA9IHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCBudGFpbCwgR0ZQX0FUT01JQyk7XFxubmV0L2NvcmUvc2tidWZmLmMtMjU4MS1cXHRcXHRpZiAodW5saWtlbHkoZXJyKSlcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTI3MjQ9aW50IF9fX3Bza2JfdHJpbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjczMy1cXHRpZiAoc2tiX2Nsb25lZChza2IpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2NvcmUvc2tidWZmLmM6MjczNDpcXHQgICAgdW5saWtlbHkoKGVyciA9IHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCAwLCBHRlBfQVRPTUlDKSkpKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTI3MzUtXFx0XFx0cmV0dXJuIGVycjtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTI4Nzg9dm9pZCAqX19wc2tiX3B1bGxfdGFpbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZGVsdGEpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0yODg5LVxcdGlmIChlYXQgXFx1MDAzZSAwIHx8IHNrYl9jbG9uZWQoc2tiKSkge1xcbm5ldC9jb3JlL3NrYnVmZi5jOjI4OTA6XFx0XFx0aWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCBlYXQgXFx1MDAzZSAwID8gZWF0ICsgMTI4IDogMCxcXG5uZXQvY29yZS9za2J1ZmYuYy0yODkxLVxcdFxcdFxcdFxcdCAgICAgR0ZQX0FUT01JQykpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz01MzgzPWludCBza2JfY293X2RhdGEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRhaWxiaXRzLCBzdHJ1Y3Qgc2tfYnVmZiAqKnRyYWlsZXIpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy01NDA0LVxcdFxcdGlmIChza2JfdGFpbHJvb20oc2tiKSBcXHUwMDNjIHRhaWxiaXRzIFxcdTAwMjZcXHUwMDI2XFxubmV0L2NvcmUvc2tidWZmLmM6NTQwNTpcXHRcXHQgICAgcHNrYl9leHBhbmRfaGVhZChza2IsIDAsIHRhaWxiaXRzLXNrYl90YWlscm9vbShza2IpKzEyOCwgR0ZQX0FUT01JQykpXFxubmV0L2NvcmUvc2tidWZmLmMtNTQwNi1cXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTYzODM9aW50IHNrYl9lbnN1cmVfd3JpdGFibGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHdyaXRlX2xlbilcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTYzOTAtXFxubmV0L2NvcmUvc2tidWZmLmM6NjM5MTpcXHRyZXR1cm4gcHNrYl9leHBhbmRfaGVhZChza2IsIDAsIDAsIEdGUF9BVE9NSUMpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTYzOTItfVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NjM5NT1pbnQgc2tiX2Vuc3VyZV93cml0YWJsZV9oZWFkX3RhaWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTY0MTQtXFxubmV0L2NvcmUvc2tidWZmLmM6NjQxNTpcXHRyZXR1cm4gcHNrYl9leHBhbmRfaGVhZChza2IsIG5lZWRlZF9oZWFkcm9vbSwgbmVlZGVkX3RhaWxyb29tLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTY0MTYtXFx0XFx0XFx0XFx0R0ZQX0FUT01JQyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDExOjMwOjE4LjgyNzMzNjQxOFoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjcyMzI0OTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgcHNrYl9leHBhbmRfaGVhZGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgcHNrYl9leHBhbmRfaGVhZGAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgY29kZSBhcm91bmQgbGluZXMgMjI5NyB0byAyMzgwLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgY2h1bmsgaGFuZGxlcyBwYWNrZXQgYnVmZmVyIG1hbmlwdWxhdGlvbi4gSSdtIHByaW1hcmlseSBpbnRlcmVzdGVkIGluIGhvdyBpdCdzIGV4cGFuZGluZyB0aGUgaGVhZCBvZiB0aGUgc2tiLiBXaGF0IGVkZ2UgY2FzZXMgYXJlIHRoZXkgY29uc2lkZXJpbmc/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvdyB2dWxuZXJhYmlsaXRpZXMgbHVya2luZyBpbiB0aGlzIHNlY3Rpb24/IEknbGwgYmUgbG9va2luZyBmb3IgYW55IGluZWZmaWNpZW5jaWVzIG9yIGNsZXZlciBvcHRpbWl6YXRpb25zIGFzIHdlbGwuIFNwZWNpZmljYWxseSBJIG5lZWQgdG8ga25vdyB0aGUgaW1wbGljYXRpb25zIG9mIGFueSBidWZmZXIgY29weS9tb3ZlIG9wZXJhdGlvbnMgaGFwcGVuaW5nIGhlcmUuIEl0J3MgdGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kLiBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCBhIGJldHRlciBzZW5zZSBvZiBob3cgdGhlIHBhY2tldCBidWZmZXIgaXMgYmVpbmcgaGFuZGxlZCB3aXRoIHRoYXQgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjIwNCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDExOjMwOjIyLjA5OTY2MzQ5NFoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTEyOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjI5NSxcbiAgXCJMaW5lQ291bnRcIjogODVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjI5NTpcXHQgKi9cXG4yMjk2OlxcdFxcbjIyOTc6XFx0aW50IHBza2JfZXhwYW5kX2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5oZWFkLCBpbnQgbnRhaWwsXFxuMjI5ODpcXHRcXHRcXHQgICAgIGdmcF90IGdmcF9tYXNrKVxcbjIyOTk6XFx0e1xcbjIzMDA6XFx0XFx0dW5zaWduZWQgaW50IG9zaXplID0gc2tiX2VuZF9vZmZzZXQoc2tiKTtcXG4yMzAxOlxcdFxcdHVuc2lnbmVkIGludCBzaXplID0gb3NpemUgKyBuaGVhZCArIG50YWlsO1xcbjIzMDI6XFx0XFx0bG9uZyBvZmY7XFxuMjMwMzpcXHRcXHR1OCAqZGF0YTtcXG4yMzA0OlxcdFxcdGludCBpO1xcbjIzMDU6XFx0XFxuMjMwNjpcXHRcXHRCVUdfT04obmhlYWQgXFx1MDAzYyAwKTtcXG4yMzA3OlxcdFxcbjIzMDg6XFx0XFx0QlVHX09OKHNrYl9zaGFyZWQoc2tiKSk7XFxuMjMwOTpcXHRcXG4yMzEwOlxcdFxcdHNrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZChza2IpO1xcbjIzMTE6XFx0XFxuMjMxMjpcXHRcXHRpZiAoc2tiX3BmbWVtYWxsb2Moc2tiKSlcXG4yMzEzOlxcdFxcdFxcdGdmcF9tYXNrIHw9IF9fR0ZQX01FTUFMTE9DO1xcbjIzMTQ6XFx0XFxuMjMxNTpcXHRcXHRkYXRhID0ga21hbGxvY19yZXNlcnZlKFxcdTAwMjZzaXplLCBnZnBfbWFzaywgTlVNQV9OT19OT0RFLCBOVUxMKTtcXG4yMzE2OlxcdFxcdGlmICghZGF0YSlcXG4yMzE3OlxcdFxcdFxcdGdvdG8gbm9kYXRhO1xcbjIzMTg6XFx0XFx0c2l6ZSA9IFNLQl9XSVRIX09WRVJIRUFEKHNpemUpO1xcbjIzMTk6XFx0XFxuMjMyMDpcXHRcXHQvKiBDb3B5IG9ubHkgcmVhbCBkYXRhLi4uIGFuZCwgYWxhcywgaGVhZGVyLiBUaGlzIHNob3VsZCBiZVxcbjIzMjE6XFx0XFx0ICogb3B0aW1pemVkIGZvciB0aGUgY2FzZXMgd2hlbiBoZWFkZXIgaXMgdm9pZC5cXG4yMzIyOlxcdFxcdCAqL1xcbjIzMjM6XFx0XFx0bWVtY3B5KGRhdGEgKyBuaGVhZCwgc2tiLVxcdTAwM2VoZWFkLCBza2JfdGFpbF9wb2ludGVyKHNrYikgLSBza2ItXFx1MDAzZWhlYWQpO1xcbjIzMjQ6XFx0XFxuMjMyNTpcXHRcXHRtZW1jcHkoKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKikoZGF0YSArIHNpemUpLFxcbjIzMjY6XFx0XFx0ICAgICAgIHNrYl9zaGluZm8oc2tiKSxcXG4yMzI3OlxcdFxcdCAgICAgICBvZmZzZXRvZihzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvLCBmcmFnc1tza2Jfc2hpbmZvKHNrYiktXFx1MDAzZW5yX2ZyYWdzXSkpO1xcbjIzMjg6XFx0XFxuMjMyOTpcXHRcXHQvKlxcbjIzMzA6XFx0XFx0ICogaWYgc2hpbmZvIGlzIHNoYXJlZCB3ZSBtdXN0IGRyb3AgdGhlIG9sZCBoZWFkIGdyYWNlZnVsbHksIGJ1dCBpZiBpdFxcbjIzMzE6XFx0XFx0ICogaXMgbm90IHdlIGNhbiBqdXN0IGRyb3AgdGhlIG9sZCBoZWFkIGFuZCBsZXQgdGhlIGV4aXN0aW5nIHJlZmNvdW50XFxuMjMzMjpcXHRcXHQgKiBiZSBzaW5jZSBhbGwgd2UgZGlkIGlzIHJlbG9jYXRlIHRoZSB2YWx1ZXNcXG4yMzMzOlxcdFxcdCAqL1xcbjIzMzQ6XFx0XFx0aWYgKHNrYl9kYXRhX2lzX3NoYXJlZChza2IpKSB7XFxuMjMzNTpcXHRcXHRcXHRpZiAoc2tiX29ycGhhbl9mcmFncyhza2IsIGdmcF9tYXNrKSlcXG4yMzM2OlxcdFxcdFxcdFxcdGdvdG8gbm9mcmFncztcXG4yMzM3OlxcdFxcdFxcdGlmIChza2JfemNvcHkoc2tiKSlcXG4yMzM4OlxcdFxcdFxcdFxcdG5ldF96Y29weV9nZXQoc2tiX3Vhcmcoc2tiKSk7XFxuMjMzOTpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc2tiX3NoaW5mbyhza2IpLVxcdTAwM2Vucl9mcmFnczsgaSsrKVxcbjIzNDA6XFx0XFx0XFx0XFx0c2tiX2ZyYWdfcmVmKHNrYiwgaSk7XFxuMjM0MTpcXHRcXG4yMzQyOlxcdFxcdFxcdGlmIChza2JfaGFzX2ZyYWdfbGlzdChza2IpKVxcbjIzNDM6XFx0XFx0XFx0XFx0c2tiX2Nsb25lX2ZyYWdsaXN0KHNrYik7XFxuMjM0NDpcXHRcXG4yMzQ1OlxcdFxcdFxcdHNrYl9yZWxlYXNlX2RhdGEoc2tiLCBTS0JfQ09OU1VNRUQpO1xcbjIzNDY6XFx0XFx0fSBlbHNlIHtcXG4yMzQ3OlxcdFxcdFxcdHNrYl9mcmVlX2hlYWQoc2tiKTtcXG4yMzQ4OlxcdFxcdH1cXG4yMzQ5OlxcdFxcdG9mZiA9IChkYXRhICsgbmhlYWQpIC0gc2tiLVxcdTAwM2VoZWFkO1xcbjIzNTA6XFx0XFxuMjM1MTpcXHRcXHRza2ItXFx1MDAzZWhlYWQgICAgID0gZGF0YTtcXG4yMzUyOlxcdFxcdHNrYi1cXHUwMDNlaGVhZF9mcmFnID0gMDtcXG4yMzUzOlxcdFxcdHNrYi1cXHUwMDNlZGF0YSAgICArPSBvZmY7XFxuMjM1NDpcXHRcXG4yMzU1OlxcdFxcdHNrYl9zZXRfZW5kX29mZnNldChza2IsIHNpemUpO1xcbjIzNTY6XFx0I2lmZGVmIE5FVF9TS0JVRkZfREFUQV9VU0VTX09GRlNFVFxcbjIzNTc6XFx0XFx0b2ZmICAgICAgICAgICA9IG5oZWFkO1xcbjIzNTg6XFx0I2VuZGlmXFxuMjM1OTpcXHRcXHRza2ItXFx1MDAzZXRhaWxcXHQgICAgICArPSBvZmY7XFxuMjM2MDpcXHRcXHRza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKHNrYiwgbmhlYWQpO1xcbjIzNjE6XFx0XFx0c2tiLVxcdTAwM2VjbG9uZWQgICA9IDA7XFxuMjM2MjpcXHRcXHRza2ItXFx1MDAzZWhkcl9sZW4gID0gMDtcXG4yMzYzOlxcdFxcdHNrYi1cXHUwMDNlbm9oZHIgICAgPSAwO1xcbjIzNjQ6XFx0XFx0YXRvbWljX3NldChcXHUwMDI2c2tiX3NoaW5mbyhza2IpLVxcdTAwM2VkYXRhcmVmLCAxKTtcXG4yMzY1OlxcdFxcbjIzNjY6XFx0XFx0LyogSXQgaXMgbm90IGdlbmVyYWxseSBzYWZlIHRvIGNoYW5nZSBza2ItXFx1MDAzZXRydWVzaXplLlxcbjIzNjc6XFx0XFx0ICogRm9yIHRoZSBtb21lbnQsIHdlIHJlYWxseSBjYXJlIG9mIHJ4IHBhdGgsIG9yXFxuMjM2ODpcXHRcXHQgKiB3aGVuIHNrYiBpcyBvcnBoYW5lZCAobm90IGF0dGFjaGVkIHRvIGEgc29ja2V0KS5cXG4yMzY5OlxcdFxcdCAqL1xcbjIzNzA6XFx0XFx0aWYgKCFza2ItXFx1MDAzZXNrIHx8IHNrYi1cXHUwMDNlZGVzdHJ1Y3RvciA9PSBzb2NrX2VkZW11eClcXG4yMzcxOlxcdFxcdFxcdHNrYi1cXHUwMDNldHJ1ZXNpemUgKz0gc2l6ZSAtIG9zaXplO1xcbjIzNzI6XFx0XFxuMjM3MzpcXHRcXHRyZXR1cm4gMDtcXG4yMzc0OlxcdFxcbjIzNzU6XFx0bm9mcmFnczpcXG4yMzc2OlxcdFxcdHNrYl9rZnJlZV9oZWFkKGRhdGEpO1xcbjIzNzc6XFx0bm9kYXRhOlxcbjIzNzg6XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMjM3OTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDExOjMwOjIyLjEwMDA1Njc5NFoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODEwNTk0MTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgcHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyYCoqXG5cbk9rYXksIGxldCdzIGNpcmNsZSBiYWNrIGFuZCBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcmAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA2ODU1LiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBoYW5kbGluZy4uLiBsZXQgbWUgc2VlLi4uIEknbSBsb29raW5nIGF0IGl0IGluIHRoZSBjb250ZXh0IG9mIFtteSBzcGVjaWZpYyBleHBlcnRpc2UgLSBlLmcuLCBtZW1vcnkgY2FydmluZyB3aXRoaW4gYSBzcGVjaWZpYyBmaWxlIGZvcm1hdF0uIEkgc3VzcGVjdCB0aGlzIHNlY3Rpb24gbWlnaHQgYmUgY3JpdGljYWwgZm9yIFtzcGVjaWZpYyBoeXBvdGhlc2lzIGFib3V0IGl0cyBmdW5jdGlvbiwgZm9yIGV4YW1wbGU6IGhvdyB0aGUgaGVhZGVyIGNhcnZpbmcgaW50ZXJhY3RzIHdpdGggdGhlIGRhdGEgc3RydWN0dXJlJ3MgaW50ZXJuYWwgb2Zmc2V0IGNhbGN1bGF0aW9ucywgb3IgaG93IGl0IGFkZHJlc3NlcyBmcmFnbWVudGF0aW9uXS4gVW5kZXJzdGFuZGluZyB0aGUgbG9naWMgaGVyZSBpcyBsaWtlbHkga2V5IHRvIFthY2hpZXZpbmcgbXkgb3ZlcmFsbCBnb2FsLCBlLmcuLCBpbXByb3ZpbmcgdGhlIGVmZmljaWVuY3kgb3IgYWNjdXJhY3kgb2YgbXkgY2FydmluZyBhbGdvcml0aG0sIGlkZW50aWZ5aW5nIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHksIG9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzdHJ1Y3R1cmUgaXMgdXNlZF0uIFRpbWUgdG8gcHVsbCB1cCB0aGUgY29kZSBhbmQgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Nzk3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMTozMDoyNi45MTA2NTMzNzZaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzcwNDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY4NDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjY4NDA6XFx0XFx0ZGF0YSA9IGttYWxsb2NfcmVzZXJ2ZShcXHUwMDI2c2l6ZSwgZ2ZwX21hc2ssIE5VTUFfTk9fTk9ERSwgTlVMTCk7XFxuNjg0MTpcXHRcXHRpZiAoIWRhdGEpXFxuNjg0MjpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG42ODQzOlxcdFxcdHNpemUgPSBTS0JfV0lUSF9PVkVSSEVBRChzaXplKTtcXG42ODQ0OlxcdFxcbjY4NDU6XFx0XFx0LyogQ29weSByZWFsIGRhdGEsIGFuZCBhbGwgZnJhZ3MgKi9cXG42ODQ2OlxcdFxcdHNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGFfb2Zmc2V0KHNrYiwgb2ZmLCBkYXRhLCBuZXdfaGxlbik7XFxuNjg0NzpcXHRcXHRza2ItXFx1MDAzZWxlbiAtPSBvZmY7XFxuNjg0ODpcXHRcXG42ODQ5OlxcdFxcdC8qIFJlbW92ZSBTS0JGTF9NQU5BR0VEX0ZSQUdfUkVGUyBpbnN0ZWFkIG9mIHRyeWluZyB0byBob25vdXIgaXRcXG42ODUwOlxcdFxcdCAqIHdoaWxlIHJlZmNvdW50aW5nIGZyYWdzIGJlbG93LlxcbjY4NTE6XFx0XFx0ICovXFxuNjg1MjpcXHRcXHRza2JfemNvcHlfZG93bmdyYWRlX21hbmFnZWQoc2tiKTtcXG42ODUzOlxcdFxcbjY4NTQ6XFx0XFx0bWVtY3B5KChzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICopKGRhdGEgKyBzaXplKSxcXG42ODU1OlxcdFxcdCAgICAgICBza2Jfc2hpbmZvKHNrYiksXFxuNjg1NjpcXHRcXHQgICAgICAgb2Zmc2V0b2Yoc3RydWN0IHNrYl9zaGFyZWRfaW5mbyxcXG42ODU3OlxcdFxcdFxcdFxcdGZyYWdzW3NrYl9zaGluZm8oc2tiKS1cXHUwMDNlbnJfZnJhZ3NdKSk7XFxuNjg1ODpcXHRcXHRpZiAoc2tiX2RhdGFfaXNfc2hhcmVkKHNrYikpIHtcXG42ODU5OlxcdFxcdFxcdC8qIGRyb3AgdGhlIG9sZCBoZWFkIGdyYWNlZnVsbHkgKi9cXG42ODYwOlxcdFxcdFxcdGlmIChza2Jfb3JwaGFuX2ZyYWdzKHNrYiwgZ2ZwX21hc2spKSB7XFxuNjg2MTpcXHRcXHRcXHRcXHRza2Jfa2ZyZWVfaGVhZChkYXRhKTtcXG42ODYyOlxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjY4NjM6XFx0XFx0XFx0fVxcbjY4NjQ6XFx0XFx0XFx0aWYgKHNrYl96Y29weShza2IpKVxcbjY4NjU6XFx0XFx0XFx0XFx0bmV0X3pjb3B5X2dldChza2JfdWFyZyhza2IpKTtcXG42ODY2OlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBza2Jfc2hpbmZvKHNrYiktXFx1MDAzZW5yX2ZyYWdzOyBpKyspXFxuNjg2NzpcXHRcXHRcXHRcXHRza2JfZnJhZ19yZWYoc2tiLCBpKTtcXG42ODY4OlxcdFxcdFxcdGlmIChza2JfaGFzX2ZyYWdfbGlzdChza2IpKVxcbjY4Njk6XFx0XFx0XFx0XFx0c2tiX2Nsb25lX2ZyYWdsaXN0KHNrYik7XFxuNjg3MDpcXHRcXHRcXHRza2JfcmVsZWFzZV9kYXRhKHNrYiwgU0tCX0NPTlNVTUVEKTtcXG42ODcxOlxcdFxcdH0gZWxzZSB7XFxuNjg3MjpcXHRcXHRcXHQvKiB3ZSBjYW4gcmV1c2UgZXhpc3RpbmcgcmVjb3VudC0gYWxsIHdlIGRpZCB3YXNcXG42ODczOlxcdFxcdFxcdCAqIHJlbG9jYXRlIHZhbHVlc1xcbjY4NzQ6XFx0XFx0XFx0ICovXFxuNjg3NTpcXHRcXHRcXHRza2JfZnJlZV9oZWFkKHNrYik7XFxuNjg3NjpcXHRcXHR9XFxuNjg3NzpcXHRcXG42ODc4OlxcdFxcdHNrYi1cXHUwMDNlaGVhZCA9IGRhdGE7XFxuNjg3OTpcXHRcXHRza2ItXFx1MDAzZWRhdGEgPSBkYXRhO1xcbjY4ODA6XFx0XFx0c2tiLVxcdTAwM2VoZWFkX2ZyYWcgPSAwO1xcbjY4ODE6XFx0XFx0c2tiX3NldF9lbmRfb2Zmc2V0KHNrYiwgc2l6ZSk7XFxuNjg4MjpcXHRcXHRza2Jfc2V0X3RhaWxfcG9pbnRlcihza2IsIHNrYl9oZWFkbGVuKHNrYikpO1xcbjY4ODM6XFx0XFx0c2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZShza2IsIDApO1xcbjY4ODQ6XFx0XFx0c2tiLVxcdTAwM2VjbG9uZWQgPSAwO1xcbjY4ODU6XFx0XFx0c2tiLVxcdTAwM2VoZHJfbGVuID0gMDtcXG42ODg2OlxcdFxcdHNrYi1cXHUwMDNlbm9oZHIgPSAwO1xcbjY4ODc6XFx0XFx0YXRvbWljX3NldChcXHUwMDI2c2tiX3NoaW5mbyhza2IpLVxcdTAwM2VkYXRhcmVmLCAxKTtcXG42ODg4OlxcdFxcbjY4ODk6XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDExOjMwOjI2LjkxMTAyNTY3NVoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDQyMDUxMDU0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byB0aGUgc2tidWZmLmggRGV0YWlscyoqXG5cbk9rYXksIHRpbWUgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludHJpY2FjaWVzIG9mIHRoZSBgc2tidWZmYCBzdHJ1Y3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgc2tiX2RhdGFfdW5yZWZgLCBgc2tiX2RhdGFyZWZfYmlhc2AsIGFuZCBgc2tiX2Nsb25lZGAuIFRoZXNlIGFyZSBjcnVjaWFsIGZvciBwcm9wZXIgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHJlZmVyZW5jZSBjb3VudGluZyB3aXRoaW4gdGhlIGtlcm5lbCdzIG5ldHdvcmtpbmcgc3RhY2suIEknbSBnb2luZyB0byBqdW1wIHJpZ2h0IGludG8gYGluY2x1ZGUvbGludXgvc2tidWZmLmhgLCBzcGVjaWZpY2FsbHkgbGluZXMgMTI5MCB0aHJvdWdoIDEzMjAuIFRoaXMgc2VjdGlvbiBzaG91bGQgZ2l2ZSBtZSB0aGUgY29yZSBkZWZpbml0aW9ucyBhbmQgY29udGV4dCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhlc2UgZnVuY3Rpb25zIGFuZCBmbGFncyBpbnRlcnJlbGF0ZS4gSG9wZWZ1bGx5LCB0aGlzIHJlZnJlc2ggd2lsbCBtYWtlIG1lIG1vcmUgZWZmaWNpZW50IHdoZW4gZGVidWdnaW5nIHRob3NlIG5ldHdvcmsgcGVyZm9ybWFuY2UgaXNzdWVzIGFnYWluLiBMZXQncyBzZWUgd2hhdCdzIHdoYXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5MTksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDExOjMxOjA3LjMzMTUzODg1NVoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTczMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9za2J1ZmYuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxMjkwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjkwOlxcdFxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfREVCVUdfTkVUKSBcXHUwMDI2XFx1MDAyNiBsaWtlbHkocmVmY291bnRfcmVhZChcXHUwMDI2c2tiLVxcdTAwM2V1c2VycykgPT0gMSkpXFxuMTI5MTpcXHRcXHRcXHRzbXBfcm1iKCk7XFxuMTI5MjpcXHRcXHRlbHNlIGlmIChsaWtlbHkoIXJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2c2tiLVxcdTAwM2V1c2VycykpKVxcbjEyOTM6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjEyOTQ6XFx0XFxuMTI5NTpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4xMjk2OlxcdH1cXG4xMjk3OlxcdFxcbjEyOTg6XFx0c3RhdGljIGlubGluZSBpbnQgc2tiX2RhdGFyZWZfYmlhcyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjEyOTk6XFx0e1xcbjEzMDA6XFx0XFx0cmV0dXJuIHNrYi1cXHUwMDNlbm9oZHIgPyAoMSBcXHUwMDNjXFx1MDAzYyBTS0JfREFUQVJFRl9TSElGVCkgKyAxIDogMTtcXG4xMzAxOlxcdH1cXG4xMzAyOlxcdFxcbjEzMDM6XFx0c3RhdGljIGlubGluZSBib29sIHNrYl9kYXRhX3VucmVmKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuMTMwNDpcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKnNoaW5mbylcXG4xMzA1OlxcdHtcXG4xMzA2OlxcdFxcdGludCBiaWFzO1xcbjEzMDc6XFx0XFxuMTMwODpcXHRcXHRpZiAoIXNrYi1cXHUwMDNlY2xvbmVkKVxcbjEzMDk6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuMTMxMDpcXHRcXG4xMzExOlxcdFxcdGJpYXMgPSBza2JfZGF0YXJlZl9iaWFzKHNrYik7XFxuMTMxMjpcXHRcXG4xMzEzOlxcdFxcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2c2hpbmZvLVxcdTAwM2VkYXRhcmVmKSA9PSBiaWFzKVxcbjEzMTQ6XFx0XFx0XFx0c21wX3JtYigpO1xcbjEzMTU6XFx0XFx0ZWxzZSBpZiAoYXRvbWljX3N1Yl9yZXR1cm4oYmlhcywgXFx1MDAyNnNoaW5mby1cXHUwMDNlZGF0YXJlZikpXFxuMTMxNjpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTMxNzpcXHRcXG4xMzE4OlxcdFxcdHJldHVybiB0cnVlO1xcbjEzMTk6XFx0fVxcbjEzMjA6XFx0XFxuMTMyMTpcXHR2b2lkIF9fZml4X2FkZHJlc3Mgc2tfc2tiX3JlYXNvbl9kcm9wKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4xMzIyOlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IsXFxuMTMyMzpcXHRcXHRcXHRcXHRcXHQgICAgICBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pO1xcbjEzMjQ6XFx0XFxuMTMyNTpcXHRzdGF0aWMgaW5saW5lIHZvaWRcXG4xMzI2OlxcdGtmcmVlX3NrYl9yZWFzb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKVxcbjEzMjc6XFx0e1xcbjEzMjg6XFx0XFx0c2tfc2tiX3JlYXNvbl9kcm9wKE5VTEwsIHNrYiwgcmVhc29uKTtcXG4xMzI5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTE6MzE6MDcuMzMxODM4ODc1WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2MTU5MTQyNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIGBza2JfY2xvbmVkYCBmbGFnIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBza2J1ZmZgIHN0cnVjdHVyZS4gTXkgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gdGhlIGBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oYCBoZWFkZXIgZmlsZS4gSSBuZWVkIHRvIGV4YW1pbmUgbGluZXMgMjAyMCB0aHJvdWdoIDIwNTAgdG8gZ2FpbiBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGl0cyBzaWduaWZpY2FuY2UuIEknbSBsb29raW5nIGZvciB0aGUgcHJlY2lzZSBkZWZpbml0aW9uLCBhbnkgdXNhZ2UgZXhhbXBsZXMgb3IgcmVsYXRlZCBjb25kaXRpb25hbCBsb2dpYyBzdXJyb3VuZGluZyB0aGlzIGZsYWcuIFRoaXMgc2hvdWxkIGdpdmUgbWUgaW5zaWdodCBvbiB0aGUgY2lyY3Vtc3RhbmNlcyB0aGF0IGRldGVybWluZSB3aGVuIHRoZSBgc2tiX2Nsb25lZGAgZmxhZyBpcyBzZXQgb3IgY2xlYXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTgwNiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTE6MzE6MDkuOTQ3NzU2NjJaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY1OTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvc2tidWZmLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMjAyMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjAyMDpcXHRcXHRyZXR1cm4gc2tiO1xcbjIwMjE6XFx0fVxcbjIwMjI6XFx0XFxuMjAyMzpcXHQvKlxcbjIwMjQ6XFx0ICogSWYgdXNlcnMgPT0gMSwgd2UgYXJlIHRoZSBvbmx5IG93bmVyIGFuZCBjYW4gYXZvaWQgcmVkdW5kYW50IGF0b21pYyBjaGFuZ2VzLlxcbjIwMjU6XFx0ICovXFxuMjAyNjpcXHRcXG4yMDI3OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBza2JfZGF0YV9pc19zaGFyZWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4yMDI4OlxcdHtcXG4yMDI5OlxcdFxcdHJldHVybiBza2ItXFx1MDAzZWNsb25lZCBcXHUwMDI2XFx1MDAyNlxcbjIwMzA6XFx0XFx0ICAgICAgIGF0b21pY19yZWFkKFxcdTAwMjZza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWRhdGFyZWYpICE9IHNrYl9kYXRhcmVmX2JpYXMoc2tiKTtcXG4yMDMxOlxcdH1cXG4yMDMyOlxcdFxcbjIwMzM6XFx0LyoqXFxuMjAzNDpcXHQgKlxcdHNrYl9jbG9uZWQgLSBpcyB0aGUgYnVmZmVyIGEgY2xvbmVcXG4yMDM1OlxcdCAqXFx0QHNrYjogYnVmZmVyIHRvIGNoZWNrXFxuMjAzNjpcXHQgKlxcbjIwMzc6XFx0ICpcXHRSZXR1cm5zIHRydWUgaWYgdGhlIGJ1ZmZlciB3YXMgZ2VuZXJhdGVkIHdpdGggc2tiX2Nsb25lKCkgYW5kIGlzXFxuMjAzODpcXHQgKlxcdG9uZSBvZiBtdWx0aXBsZSBzaGFyZWQgY29waWVzIG9mIHRoZSBidWZmZXIuIENsb25lZCBidWZmZXJzIGFyZVxcbjIwMzk6XFx0ICpcXHRzaGFyZWQgZGF0YSBzbyBtdXN0IG5vdCBiZSB3cml0dGVuIHRvIHVuZGVyIG5vcm1hbCBjaXJjdW1zdGFuY2VzLlxcbjIwNDA6XFx0ICovXFxuMjA0MTpcXHRzdGF0aWMgaW5saW5lIGludCBza2JfY2xvbmVkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuMjA0MjpcXHR7XFxuMjA0MzpcXHRcXHRyZXR1cm4gc2tiLVxcdTAwM2VjbG9uZWQgXFx1MDAyNlxcdTAwMjZcXG4yMDQ0OlxcdFxcdCAgICAgICAoYXRvbWljX3JlYWQoXFx1MDAyNnNrYl9zaGluZm8oc2tiKS1cXHUwMDNlZGF0YXJlZikgXFx1MDAyNiBTS0JfREFUQVJFRl9NQVNLKSAhPSAxO1xcbjIwNDU6XFx0fVxcbjIwNDY6XFx0XFxuMjA0NzpcXHRzdGF0aWMgaW5saW5lIGludCBza2JfdW5jbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBwcmkpXFxuMjA0ODpcXHR7XFxuMjA0OTpcXHRcXHRtaWdodF9zbGVlcF9pZihnZnBmbGFnc19hbGxvd19ibG9ja2luZyhwcmkpKTtcXG4yMDUwOlxcdFxcbjIwNTE6XFx0XFx0aWYgKHNrYl9jbG9uZWQoc2tiKSlcXG4yMDUyOlxcdFxcdFxcdHJldHVybiBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgMCwgcHJpKTtcXG4yMDUzOlxcdFxcbjIwNTQ6XFx0XFx0cmV0dXJuIDA7XFxuMjA1NTpcXHR9XFxuMjA1NjpcXHRcXG4yMDU3OlxcdC8qIFRoaXMgdmFyaWFudCBvZiBza2JfdW5jbG9uZSgpIG1ha2VzIHN1cmUgc2tiLVxcdTAwM2V0cnVlc2l6ZVxcbjIwNTg6XFx0ICogYW5kIHNrYl9lbmRfb2Zmc2V0KCkgYXJlIG5vdCBjaGFuZ2VkLCB3aGVuZXZlciBhIG5ldyBza2ItXFx1MDAzZWhlYWQgaXMgbmVlZGVkLlxcbjIwNTk6XFx0ICpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTE6MzE6MDkuOTQ4MTI0NDVaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA0ODI0Njg4Mzk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBTS0IgRGF0YSBTaGFyaW5nIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgaG93IHdlIGhhbmRsZSBTS0IgZGF0YSByZWZlcmVuY2VzLCBzcGVjaWZpY2FsbHkgd2hlbiBjbG9uaW5nIGFuZCBwb3RlbnRpYWxseSBmcmVlaW5nIHNoYXJlZCBkYXRhLiBJdCBpbnRyb2R1Y2VzIGBza2JfZGF0YXJlZl9iaWFzYCB3aGljaCBjbGV2ZXJseSBleHRyYWN0cyB0aGUgYmlhcyB2YWx1ZSByZWxhdGVkIHRvIHRoZSBgZGF0YXJlZmAgY291bnRlciBmb3Igbm9oZHIgU0tCcyBhbmQgdGhlIG5ldyBoZWxwZXIgYHNrYl9kYXRhX2lzX3NoYXJlZGAgZnVuY3Rpb24sIHdoaWNoIGRldGVybWluZXMgaWYgYW4gU0tCJ3MgZGF0YSBpcyB0cnVseSBzaGFyZWQgYW1vbmdzdCBtdWx0aXBsZSBjbG9uZXMsIG9yIGlzIHRoZSBzb2xlIG93bmVyIG9mIHRoZSBkYXRhLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGxpZXMgaW4gcmVwbGFjaW5nIHRoZSBvbGRlciBgc2tiX2Nsb25lZChza2IpYCBjaGVjayB3aXRoIHRoZSBuZXcgYHNrYl9kYXRhX2lzX3NoYXJlZChza2IpYCB3aXRoaW4gYHBza2JfZXhwYW5kX2hlYWRgIGFuZCBgcHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyYC5cblxuVGhlIHJhdGlvbmFsZSBpcyBjbGVhci4gVGhlIG9sZCBgc2tiX2Nsb25lZChza2IpYCBjaGVjayB3YXNuJ3QgYWNjdXJhdGVseSBoYW5kbGluZyBzY2VuYXJpb3Mgd2hlcmUgYW4gU0tCIG1pZ2h0ICphcHBlYXIqIGNsb25lZCAoZHVlIHRvIHRoZSBgY2xvbmVkYCBmbGFnIGJlaW5nIHNldCksIGJ1dCBhY3R1YWxseSBiZSB0aGUgKm9ubHkqIG93bmVyIG9mIGl0cyBkYXRhIGJlY2F1c2Ugb3RoZXIgY2xvbmVzIGhhdmUgYmVlbiBmcmVlZCBvciBpdCdzIGEgbm9oZHIgc2tiIHdpdGggYSBiaWFzLiAgVGhlIGBkYXRhcmVmYCBjb3VudGVyLCBpbiB0aGVzZSBjYXNlcywgY291bGQgYmUgZXF1YWwgdG8gdGhlIGJpYXMsIGluZGljYXRpbmcgdGhhdCB3ZSBjYW4gc2FmZWx5IGZyZWUgdGhlIGhlYWQgd2l0aG91dCBleHRyYSBzdGVwcy4gVGhpcyBwYXRjaCBlc3NlbnRpYWxseSBvcHRpbWl6ZXMgdGhlIHJlZmNvdW50aW5nIGxvZ2ljLCBlc3BlY2lhbGx5IGZvciBub2hkciBTS0JzLCBhdm9pZGluZyB1bm5lY2Vzc2FyeSBvdmVyaGVhZC4gVGhlIHByaW1hcnkgZm9jdXMgaXMgbWFraW5nIHJlZmNvdW50aW5nIG1vcmUgcHJlY2lzZSB3aGVuIGRlYWxpbmcgd2l0aCBjbG9uZWQgU0tCcywgcHJldmVudGluZyB1bm5lY2Vzc2FyeSBvcGVyYXRpb25zIGxpa2UgYHNrYl9vcnBoYW5fZnJhZ3NgLCBldGMuIGlmIHRoZSBkYXRhIGlzIG5vIGxvbmdlciBzaGFyZWQsIHdoaWNoIHJlc3VsdHMgaW4gYHNrYl9mcmVlX2hlYWRgIGJlaW5nIGNhbGxlZCwgaW5zdGVhZCBvZiB0aGUgc2xvd2VyIG9wZXJhdGlvbiBvZiByZWZjb3VudGluZyBhbmQgb3JwaGFuIGZyYWdsaXN0IG1hbmlwdWxhdGlvbnMuXG5cblRoZSBjcml0aWNhbCBxdWVzdGlvbiBub3cgaXMsIHdoYXQga2luZCBvZiBidWdzIGNhbiB0aGlzIGludHJvZHVjZT8gIFdlbGwsIHRoZSBwcmltYXJ5IHJpc2tzIGFyZSByZWZjb3VudGluZyBpbWJhbGFuY2VzLCB3aGljaCBjb3VsZCBsZWFkIHRvIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgKGlmIHRoZSBkYXRhIGlzIHByZW1hdHVyZWx5IGZyZWVkIGJlY2F1c2UgYHNrYl9kYXRhX2lzX3NoYXJlZGAgaW5jb3JyZWN0bHkgcmVwb3J0cyB0aGF0IHRoZSBkYXRhIGlzbid0IHNoYXJlZCksIG1lbW9yeSBsZWFrcyAoaWYgd2UgaW5jb3JyZWN0bHkgYXNzdW1lIGRhdGEgaXMgbm90IHRoZSBzb2xlIG93bmVyIGFuZCB0aHVzIHJlZmNvdW50IGlzIG5vdCBmdWxseSBoYW5kbGVkKSwgb3IsIGNvbnZlcnNlbHksIGRvdWJsZS1mcmVlcyAoaWYgdGhlIGRhdGEgaXMgZnJlZWQgbXVsdGlwbGUgdGltZXMgZHVlIHRvIGEgbWlzdW5kZXJzdGFuZGluZyBvZiBvd25lcnNoaXApLiBLQVNBTiBpcyB0aGUga2V5IGhlcmUuIEFueSBpbmNvcnJlY3QgcmVmY291bnRpbmcgcmVzdWx0aW5nIGZyb20gdGhpcyBjaGFuZ2UgKndpbGwqIGJlIGRldGVjdGVkIGJ5IEtBU0FOIGFzIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIGVycm9ycy5cblxuTGV0J3MgY2FyZWZ1bGx5IGFzc2VzcyBLTVNBTiBhcHBsaWNhYmlsaXR5LiAgV2UgbmVlZCB0byBzZWUgaWYgd2UncmUgY3JlYXRpbmcgb3IgbW9kaWZ5aW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS4gIExvb2tpbmcgY2xvc2VseSwgd2UncmUgKm5vdCogaW50cm9kdWNpbmcgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcyB0aGF0IGFyZSB0aGVuIHBhc3NlZCB0byB1c2Vyc3BhY2UgKHdoaWNoIHdvdWxkIHRyaWdnZXIgYSBLTVNBTiBjb25jZXJuKS4gVGhlIGNoZWNrcyByZWx5IG9uIHN0YW5kYXJkIFNLQiBmaWVsZHMgKGBza2ItXHUwMDNlY2xvbmVkYCwgYHNrYi1cdTAwM2Vub2hkcmAsIGBza2Jfc2hpbmZvKHNrYiktXHUwMDNlZGF0YXJlZmApLCB3aGljaCBhcmUgaW5pdGlhbGl6ZWQgZHVyaW5nIFNLQiBjcmVhdGlvbiBvciBjbG9uaW5nLiBUaGVyZSdzIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhpcyBhbHNvIGRvZXNuJ3QgYWZmZWN0IGFsbG9jYXRpb25zIG9yIGluaXRpYWxpemF0aW9uIG9mIG1vcmUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYW5kIHRoZXJlIGFyZSBubyBib3VuZGFyeSBtb2RpZmljYXRpb25zIHRoYXQgd291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIGJ5dGUgcmVhZHMuIFRoZSBwYXRjaCBmb2N1c2VzIG9uIG9wdGltaXppbmcgaG93IHNoYXJlZCBkYXRhIGlzIHJlY29nbml6ZWQsIGFuZCBob3cgdG8gZGVhbCB3aXRoIHRoZSByZWZlcmVuY2UgY291bnRpbmcgYXNzb2NpYXRlZCB3aXRoIHNoYXJlZCBkYXRhLiBXZSdyZSBub3QgY3JlYXRpbmcgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHNlbmRpbmcgdGhpcyBkYXRhIHRvIHVzZXJzcGFjZS5cblxuSW4gZXNzZW5jZSwgd2UncmUgcmVmYWN0b3Jpbmcgc29tZSBpbnRlcm5hbCBsb2dpYyAoYHNrYl9kYXRhcmVmX2JpYXNgKSwgaW50cm9kdWNpbmcgYSBuZXcgZnVuY3Rpb24gKGBza2JfZGF0YV9pc19zaGFyZWRgKSwgYW5kIHJlcGxhY2luZyBhIGNoZWNrLiAgVGhlIGVudGlyZSBwYXRjaCBpcyBhcm91bmQgU0tCIGRhdGEgb3duZXJzaGlwIGFuZCByZWZjb3VudGluZy4gVGhlIGJ1Z3MgdGhhdCBjb3VsZCBhcmlzZSBoZXJlIGFyZSBlbnRpcmVseSByZWxhdGVkIHRvIHJlZmNvdW50IGVycm9ycy4gVGhlIHJlZmNvdW50aW5nIGJ1Z3MgYXJlIGRldGVjdGFibGUgYnkgS0FTQU4uXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU4gPSBmYWxzZWAuIFdlIGNhbiBiZSBjb25maWRlbnQgdGhhdCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzLCBwYXJ0aWN1bGFybHkgS0FTQU4sIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBpc3N1ZXMgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIGJlY2F1c2UsIGFzIGRldGFpbGVkIGFib3ZlLCBhbnkgaW1wcm9wZXIgcmVmY291bnRpbmcgd2lsbCByZXN1bHQgaW4gS0FTQU4gZGV0ZWN0aW5nIHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSwgb3IgbWVtb3J5IGxlYWsgaXNzdWVzLlxuXG5MZXQncyBtYWtlIHN1cmUgb3VyIHRvb2xpbmcgaXMgaGFwcHkgd2l0aCB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY0NSwiT3V0cHV0VG9rZW5zIjoyNjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDAzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTE6MzI6NTQuNzcyODE1ODM0WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcyNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBza2JfZGF0YXJlZl9iaWFzKClgIGFuZCBgc2tiX2RhdGFfaXNfc2hhcmVkKClgIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBkYXRhIGJ1ZmZlciAvIHNoYXJlZCBpbmZvIG9mIGFuIHNrX2J1ZmYgaXMgYWN0aXZlbHkgc2hhcmVkIGJ5IG90aGVyIGNsb25lcyBkdXJpbmcgaGVhZCByZWFsbG9jYXRpb24gKGBwc2tiX2V4cGFuZF9oZWFkYCBhbmQgYHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcmApLlxcblxcbktNU0FOIHZzIEtBU0FOIGFuYWx5c2lzOlxcbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGRhdGEgbGVuZ3RoIC8gYm91bmRzIGNhbGN1bGF0aW9ucyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGJ1ZmZlciBtZW1vcnkuIFRoZSBmaWVsZHMgYWNjZXNzZWQgKGBza2ItXFx1MDAzZWNsb25lZGAsIGBza2ItXFx1MDAzZW5vaGRyYCwgYW5kIGBzaGluZm8tXFx1MDAzZWRhdGFyZWZgKSBhcmUgd2VsbC1kZWZpbmVkIGFuZCBpbml0aWFsaXplZCBza2IgbWV0YWRhdGEuXFxuLSBLQVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoZXNlIHJlZmNvdW50IGFuZCBzaGFyaW5nIGNoZWNrIG1vZGlmaWNhdGlvbnMgcmVsYXRlIHRvIHNrYiBkYXRhIG93bmVyc2hpcCwgc3VjaCBhcyBwcmVtYXR1cmUgaGVhZCBmcmVlaW5nIG9yIGltcHJvcGVyIGZyYWcgcmVmY291bnRpbmcgbGVhZGluZyB0byBVc2UtQWZ0ZXItRnJlZSAoVUFGKSBvciBEb3VibGUtRnJlZSBlcnJvcnMuIFRoZXNlIG1lbW9yeSBzYWZldHkgaXNzdWVzIGFyZSBkaXJlY3RseSBkZXRlY3RlZCBieSBLQVNBTi5cXG5cXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBza2JfZGF0YXJlZl9iaWFzKClgIGFuZCBgc2tiX2RhdGFfaXNfc2hhcmVkKClgIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBkYXRhIGJ1ZmZlciAvIHNoYXJlZCBpbmZvIG9mIGFuIHNrX2J1ZmYgaXMgYWN0aXZlbHkgc2hhcmVkIGJ5IG90aGVyIGNsb25lcyBkdXJpbmcgaGVhZCByZWFsbG9jYXRpb24gKGBwc2tiX2V4cGFuZF9oZWFkYCBhbmQgYHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcmApLlxcblxcbktNU0FOIHZzIEtBU0FOIGFuYWx5c2lzOlxcbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGRhdGEgbGVuZ3RoIC8gYm91bmRzIGNhbGN1bGF0aW9ucyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGJ1ZmZlciBtZW1vcnkuIFRoZSBmaWVsZHMgYWNjZXNzZWQgKGBza2ItXFx1MDAzZWNsb25lZGAsIGBza2ItXFx1MDAzZW5vaGRyYCwgYW5kIGBzaGluZm8tXFx1MDAzZWRhdGFyZWZgKSBhcmUgd2VsbC1kZWZpbmVkIGFuZCBpbml0aWFsaXplZCBza2IgbWV0YWRhdGEuXFxuLSBLQVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoZXNlIHJlZmNvdW50IGFuZCBzaGFyaW5nIGNoZWNrIG1vZGlmaWNhdGlvbnMgcmVsYXRlIHRvIHNrYiBkYXRhIG93bmVyc2hpcCwgc3VjaCBhcyBwcmVtYXR1cmUgaGVhZCBmcmVlaW5nIG9yIGltcHJvcGVyIGZyYWcgcmVmY291bnRpbmcgbGVhZGluZyB0byBVc2UtQWZ0ZXItRnJlZSAoVUFGKSBvciBEb3VibGUtRnJlZSBlcnJvcnMuIFRoZXNlIG1lbW9yeSBzYWZldHkgaXNzdWVzIGFyZSBkaXJlY3RseSBkZXRlY3RlZCBieSBLQVNBTi5cXG5cXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow66trk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-31 10:58:22 +0000 UTC FinishedAt: 2026-08-31 11:32:56 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "a8455260b2e9c024d1872ac1c094793d55a7e537", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "a8455260b2e9c024d1872ac1c094793d55a7e537", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET" ], "series_id": "c88bf0bb-3f1f-4718-b25b-ff63f757264c" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "pskb_expand_head", "pskb_extract" ], "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+CgkJCTx0ZD4yMDI2LzA4LzMxIDExOjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Bza2JfZXhwYW5kX2hlYWQmIzM0OywKICAgICYjMzQ7cHNrYl9leHRyYWN0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBgc2tiX2RhdGFyZWZfYmlhcygpYCBhbmQgYHNrYl9kYXRhX2lzX3NoYXJlZCgpYCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgZGF0YSBidWZmZXIgLyBzaGFyZWQgaW5mbyBvZiBhbiBza19idWZmIGlzIGFjdGl2ZWx5IHNoYXJlZCBieSBvdGhlciBjbG9uZXMgZHVyaW5nIGhlYWQgcmVhbGxvY2F0aW9uIChgcHNrYl9leHBhbmRfaGVhZGAgYW5kIGBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXJgKS5cblxuS01TQU4gdnMgS0FTQU4gYW5hbHlzaXM6XG4tIEtNU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBrZXJuZWwgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMsIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBkYXRhIGxlbmd0aCAvIGJvdW5kcyBjYWxjdWxhdGlvbnMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBidWZmZXIgbWVtb3J5LiBUaGUgZmllbGRzIGFjY2Vzc2VkIChgc2tiLVx1MDAzZWNsb25lZGAsIGBza2ItXHUwMDNlbm9oZHJgLCBhbmQgYHNoaW5mby1cdTAwM2VkYXRhcmVmYCkgYXJlIHdlbGwtZGVmaW5lZCBhbmQgaW5pdGlhbGl6ZWQgc2tiIG1ldGFkYXRhLlxuLSBLQVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoZXNlIHJlZmNvdW50IGFuZCBzaGFyaW5nIGNoZWNrIG1vZGlmaWNhdGlvbnMgcmVsYXRlIHRvIHNrYiBkYXRhIG93bmVyc2hpcCwgc3VjaCBhcyBwcmVtYXR1cmUgaGVhZCBmcmVlaW5nIG9yIGltcHJvcGVyIGZyYWcgcmVmY291bnRpbmcgbGVhZGluZyB0byBVc2UtQWZ0ZXItRnJlZSAoVUFGKSBvciBEb3VibGUtRnJlZSBlcnJvcnMuIFRoZXNlIG1lbW9yeSBzYWZldHkgaXNzdWVzIGFyZSBkaXJlY3RseSBkZXRlY3RlZCBieSBLQVNBTi5cblxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYHNrYl9kYXRhcmVmX2JpYXMoKWAgYW5kIGBza2JfZGF0YV9pc19zaGFyZWQoKWAgdG8gZml4IGRhdGEgc2hhcmluZyBkZXRlY3Rpb24gZm9yIHNrX2J1ZmZzIHdoZW4gYHNrYi1cdTAwM2Vub2hkcmAgaXMgc2V0LCB1cGRhdGluZyBgcHNrYl9leHBhbmRfaGVhZGAgYW5kIGBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXJgIHRvIHVzZSBgc2tiX2RhdGFfaXNfc2hhcmVkYCByYXRoZXIgdGhhbiBgc2tiX2Nsb25lZGAuIFRoaXMgbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGJ1ZmZlciBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDExOjI2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNjNiMTQ2MGEwNDIwNjcwMjM1MTc3NjUzNzY1YmEzM2EwNDA5ZTkwOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDExOjI2OjMyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2tidWZmLmggYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXG5pbmRleCA0MjFmNmZjNDU0NTExLi5lZmVlZjE0OGUxYmE1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxuQEAgLTEyOTUsNiAmIzQzOzEyOTUsMTEgQEAgc3RhdGljIGlubGluZSBib29sIHNrYl91bnJlZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGludCBza2JfZGF0YXJlZl9iaWFzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gc2tiLVx1MDAzZW5vaGRyID8gKDEgXHUwMDNjXHUwMDNjIFNLQl9EQVRBUkVGX1NISUZUKSAmIzQzOyAxIDogMTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIGJvb2wgc2tiX2RhdGFfdW5yZWYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdCAgc3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqc2hpbmZvKVxuIHtcbkBAIC0xMzAzLDcgJiM0MzsxMzA4LDcgQEAgc3RhdGljIGlubGluZSBib29sIHNrYl9kYXRhX3VucmVmKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoIXNrYi1cdTAwM2VjbG9uZWQpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuLVx0YmlhcyA9IHNrYi1cdTAwM2Vub2hkciA/ICgxIFx1MDAzY1x1MDAzYyBTS0JfREFUQVJFRl9TSElGVCkgJiM0MzsgMSA6IDE7XG4mIzQzO1x0YmlhcyA9IHNrYl9kYXRhcmVmX2JpYXMoc2tiKTtcbiBcbiBcdGlmIChhdG9taWNfcmVhZChcdTAwMjZzaGluZm8tXHUwMDNlZGF0YXJlZikgPT0gYmlhcylcbiBcdFx0c21wX3JtYigpO1xuQEAgLTIwMTksNiAmIzQzOzIwMjQsMTIgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuICAqIElmIHVzZXJzID09IDEsIHdlIGFyZSB0aGUgb25seSBvd25lciBhbmQgY2FuIGF2b2lkIHJlZHVuZGFudCBhdG9taWMgY2hhbmdlcy5cbiAgKi9cbiBcbiYjNDM7c3RhdGljIGlubGluZSBib29sIHNrYl9kYXRhX2lzX3NoYXJlZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHNrYi1cdTAwM2VjbG9uZWQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIGF0b21pY19yZWFkKFx1MDAyNnNrYl9zaGluZm8oc2tiKS1cdTAwM2VkYXRhcmVmKSAhPSBza2JfZGF0YXJlZl9iaWFzKHNrYik7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICpcdHNrYl9jbG9uZWQgLSBpcyB0aGUgYnVmZmVyIGEgY2xvbmVcbiAgKlx0QHNrYjogYnVmZmVyIHRvIGNoZWNrXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuY1xuaW5kZXggOTY2YWYzYmVlZDk0ZC4uZjRjMDY0NWY5OGQzZiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NrYnVmZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9za2J1ZmYuY1xuQEAgLTIzMzEsNyAmIzQzOzIzMzEsNyBAQCBpbnQgcHNrYl9leHBhbmRfaGVhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmhlYWQsIGludCBudGFpbCxcbiBcdCAqIGlzIG5vdCB3ZSBjYW4ganVzdCBkcm9wIHRoZSBvbGQgaGVhZCBhbmQgbGV0IHRoZSBleGlzdGluZyByZWZjb3VudFxuIFx0ICogYmUgc2luY2UgYWxsIHdlIGRpZCBpcyByZWxvY2F0ZSB0aGUgdmFsdWVzXG4gXHQgKi9cbi1cdGlmIChza2JfY2xvbmVkKHNrYikpIHtcbiYjNDM7XHRpZiAoc2tiX2RhdGFfaXNfc2hhcmVkKHNrYikpIHtcbiBcdFx0aWYgKHNrYl9vcnBoYW5fZnJhZ3Moc2tiLCBnZnBfbWFzaykpXG4gXHRcdFx0Z290byBub2ZyYWdzO1xuIFx0XHRpZiAoc2tiX3pjb3B5KHNrYikpXG5AQCAtNjg1NSw3ICYjNDM7Njg1NSw3IEBAIHN0YXRpYyBpbnQgcHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHUzMiBvZmYsXG4gXHQgICAgICAgc2tiX3NoaW5mbyhza2IpLFxuIFx0ICAgICAgIG9mZnNldG9mKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8sXG4gXHRcdFx0ZnJhZ3Nbc2tiX3NoaW5mbyhza2IpLVx1MDAzZW5yX2ZyYWdzXSkpO1xuLVx0aWYgKHNrYl9jbG9uZWQoc2tiKSkge1xuJiM0MztcdGlmIChza2JfZGF0YV9pc19zaGFyZWQoc2tiKSkge1xuIFx0XHQvKiBkcm9wIHRoZSBvbGQgaGVhZCBncmFjZWZ1bGx5ICovXG4gXHRcdGlmIChza2Jfb3JwaGFuX2ZyYWdzKHNrYiwgZ2ZwX21hc2spKSB7XG4gXHRcdFx0c2tiX2tmcmVlX2hlYWQoZGF0YSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTE6MjY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cHNrYl9leHBhbmRfaGVhZCYjMzQ7LAogICAgJiMzNDtwc2tiX2V4dHJhY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBgc2tiX2RhdGFyZWZfYmlhcygpYCBhbmQgYHNrYl9kYXRhX2lzX3NoYXJlZCgpYCB0byBmaXggZGF0YSBzaGFyaW5nIGRldGVjdGlvbiBmb3Igc2tfYnVmZnMgd2hlbiBgc2tiLVx1MDAzZW5vaGRyYCBpcyBzZXQsIHVwZGF0aW5nIGBwc2tiX2V4cGFuZF9oZWFkYCBhbmQgYHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcmAgdG8gdXNlIGBza2JfZGF0YV9pc19zaGFyZWRgIHJhdGhlciB0aGFuIGBza2JfY2xvbmVkYC4gVGhpcyBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgYnVmZmVyIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCByZWZlcmVuY2UgY291bnRpbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2M2IxNDYwYTA0MjA2NzAyMzUxNzc2NTM3NjViYTMzYTA0MDllOTA4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMTE6MjY6MzIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaAppbmRleCA0MjFmNmZjNDU0NTExLi5lZmVlZjE0OGUxYmE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKQEAgLTEyOTUsNiAmIzQzOzEyOTUsMTEgQEAgc3RhdGljIGlubGluZSBib29sIHNrYl91bnJlZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXJldHVybiB0cnVlOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2tiX2RhdGFyZWZfYmlhcyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJcmV0dXJuIHNrYi0mZ3Q7bm9oZHIgPyAoMSAmbHQ7Jmx0OyBTS0JfREFUQVJFRl9TSElGVCkgJiM0MzsgMSA6IDE7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBib29sIHNrYl9kYXRhX3VucmVmKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICBzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaGluZm8pCiB7CkBAIC0xMzAzLDcgJiM0MzsxMzA4LDcgQEAgc3RhdGljIGlubGluZSBib29sIHNrYl9kYXRhX3VucmVmKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJaWYgKCFza2ItJmd0O2Nsb25lZCkKIAkJcmV0dXJuIHRydWU7CiAKLQliaWFzID0gc2tiLSZndDtub2hkciA/ICgxICZsdDsmbHQ7IFNLQl9EQVRBUkVGX1NISUZUKSAmIzQzOyAxIDogMTsKJiM0MzsJYmlhcyA9IHNrYl9kYXRhcmVmX2JpYXMoc2tiKTsKIAogCWlmIChhdG9taWNfcmVhZCgmYW1wO3NoaW5mby0mZ3Q7ZGF0YXJlZikgPT0gYmlhcykKIAkJc21wX3JtYigpOwpAQCAtMjAxOSw2ICYjNDM7MjAyNCwxMiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpza2JfZ2V0KHN0cnVjdCBza19idWZmICpza2IpCiAgKiBJZiB1c2VycyA9PSAxLCB3ZSBhcmUgdGhlIG9ubHkgb3duZXIgYW5kIGNhbiBhdm9pZCByZWR1bmRhbnQgYXRvbWljIGNoYW5nZXMuCiAgKi8KIAomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBza2JfZGF0YV9pc19zaGFyZWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXJldHVybiBza2ItJmd0O2Nsb25lZCAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICBhdG9taWNfcmVhZCgmYW1wO3NrYl9zaGluZm8oc2tiKS0mZ3Q7ZGF0YXJlZikgIT0gc2tiX2RhdGFyZWZfYmlhcyhza2IpOwomIzQzO30KJiM0MzsKIC8qKgogICoJc2tiX2Nsb25lZCAtIGlzIHRoZSBidWZmZXIgYSBjbG9uZQogICoJQHNrYjogYnVmZmVyIHRvIGNoZWNrCmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jCmluZGV4IDk2NmFmM2JlZWQ5NGQuLmY0YzA2NDVmOThkM2YgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NrYnVmZi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NrYnVmZi5jCkBAIC0yMzMxLDcgJiM0MzsyMzMxLDcgQEAgaW50IHBza2JfZXhwYW5kX2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5oZWFkLCBpbnQgbnRhaWwsCiAJICogaXMgbm90IHdlIGNhbiBqdXN0IGRyb3AgdGhlIG9sZCBoZWFkIGFuZCBsZXQgdGhlIGV4aXN0aW5nIHJlZmNvdW50CiAJICogYmUgc2luY2UgYWxsIHdlIGRpZCBpcyByZWxvY2F0ZSB0aGUgdmFsdWVzCiAJICovCi0JaWYgKHNrYl9jbG9uZWQoc2tiKSkgewomIzQzOwlpZiAoc2tiX2RhdGFfaXNfc2hhcmVkKHNrYikpIHsKIAkJaWYgKHNrYl9vcnBoYW5fZnJhZ3Moc2tiLCBnZnBfbWFzaykpCiAJCQlnb3RvIG5vZnJhZ3M7CiAJCWlmIChza2JfemNvcHkoc2tiKSkKQEAgLTY4NTUsNyAmIzQzOzY4NTUsNyBAQCBzdGF0aWMgaW50IHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1MzIgb2ZmLAogCSAgICAgICBza2Jfc2hpbmZvKHNrYiksCiAJICAgICAgIG9mZnNldG9mKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8sCiAJCQlmcmFnc1tza2Jfc2hpbmZvKHNrYiktJmd0O25yX2ZyYWdzXSkpOwotCWlmIChza2JfY2xvbmVkKHNrYikpIHsKJiM0MzsJaWYgKHNrYl9kYXRhX2lzX3NoYXJlZChza2IpKSB7CiAJCS8qIGRyb3AgdGhlIG9sZCBoZWFkIGdyYWNlZnVsbHkgKi8KIAkJaWYgKHNrYl9vcnBoYW5fZnJhZ3Moc2tiLCBnZnBfbWFzaykpIHsKIAkJCXNrYl9rZnJlZV9oZWFkKGRhdGEpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzk1CgkJCQkJCQlvdXRwdXQ6IDc0CgkJCQkJCQl0aG91Z2h0czogOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4KCioqQW5hbHl6aW5nIHRoZSBTS0IgTW9kaWZpY2F0aW9uKioKClJpZ2h0LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGJvdGggYGluY2x1ZGUvbGludXgvc2tidWZmLmhgIGFuZCBgbmV0L2NvcmUvc2tidWZmLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB3ZSYjMzk7cmUgbGlrZWx5IGRlYWxpbmcgd2l0aCBhIGNvcmUgU0tCIHN0cnVjdHVyZSBjaGFuZ2Ugb3IgYW4gdXBkYXRlIHRvIGl0cyBjb3JlIG1hbmFnZW1lbnQuIEdpdmVuIHRoYXQsIGxldCYjMzk7cyBnbyBzdHJhaWdodCB0byB0aGUgcmVsZXZhbnQgZmlsZXMgYW5kIHBpbnBvaW50IHRoZSBhcmVhcyBvZiB0aGUgY2hhbmdlcyB0byBxdWlja2x5IGdldCBhIHNlbnNlIG9mIHdoYXQmIzM5O3MgaGFwcGVuaW5nLgoKSSYjMzk7bGwgdXNlIGByZWFkLWZpbGVgIG5vdy4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbiBgbmV0L2NvcmUvc2tidWZmLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDIzMzEgYW5kIDY4NTUuIFRob3NlIGxpbmUgbnVtYmVycyBnaXZlIGEgZ29vZCByZWZlcmVuY2UgcG9pbnQgZm9yIHRoZSBpbXBvcnRhbnQgcGFydHMgb2YgdGhlIGNvZGUuIFRoZW4gSSYjMzk7bGwgY2hlY2sgYGluY2x1ZGUvbGludXgvc2tidWZmLmhgIHRvIHNlZSBob3cgdGhlIGRhdGEgc3RydWN0dXJlcyBtaWdodCBoYXZlIGNoYW5nZWQuIFdpdGggbXkga25vd2xlZGdlLCBJIGNhbiBxdWlja2x5IG1hcCB0aGUgY2hhbmdlcyBmcm9tIHRoZSBoZWFkZXIgaW50byB0aGUga2VybmVsJiMzOTtzIGZ1bmN0aW9ucyB0aGF0IG9wZXJhdGUgb24gdGhlIFNLQi4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgc28gSSBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTE6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjMyMDpcdFx0LyogQ29weSBvbmx5IHJlYWwgZGF0YS4uLiBhbmQsIGFsYXMsIGhlYWRlci4gVGhpcyBzaG91bGQgYmVcbjIzMjE6XHRcdCAqIG9wdGltaXplZCBmb3IgdGhlIGNhc2VzIHdoZW4gaGVhZGVyIGlzIHZvaWQuXG4yMzIyOlx0XHQgKi9cbjIzMjM6XHRcdG1lbWNweShkYXRhICYjNDM7IG5oZWFkLCBza2ItXHUwMDNlaGVhZCwgc2tiX3RhaWxfcG9pbnRlcihza2IpIC0gc2tiLVx1MDAzZWhlYWQpO1xuMjMyNDpcdFxuMjMyNTpcdFx0bWVtY3B5KChzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICopKGRhdGEgJiM0Mzsgc2l6ZSksXG4yMzI2Olx0XHQgICAgICAgc2tiX3NoaW5mbyhza2IpLFxuMjMyNzpcdFx0ICAgICAgIG9mZnNldG9mKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8sIGZyYWdzW3NrYl9zaGluZm8oc2tiKS1cdTAwM2Vucl9mcmFnc10pKTtcbjIzMjg6XHRcbjIzMjk6XHRcdC8qXG4yMzMwOlx0XHQgKiBpZiBzaGluZm8gaXMgc2hhcmVkIHdlIG11c3QgZHJvcCB0aGUgb2xkIGhlYWQgZ3JhY2VmdWxseSwgYnV0IGlmIGl0XG4yMzMxOlx0XHQgKiBpcyBub3Qgd2UgY2FuIGp1c3QgZHJvcCB0aGUgb2xkIGhlYWQgYW5kIGxldCB0aGUgZXhpc3RpbmcgcmVmY291bnRcbjIzMzI6XHRcdCAqIGJlIHNpbmNlIGFsbCB3ZSBkaWQgaXMgcmVsb2NhdGUgdGhlIHZhbHVlc1xuMjMzMzpcdFx0ICovXG4yMzM0Olx0XHRpZiAoc2tiX2RhdGFfaXNfc2hhcmVkKHNrYikpIHtcbjIzMzU6XHRcdFx0aWYgKHNrYl9vcnBoYW5fZnJhZ3Moc2tiLCBnZnBfbWFzaykpXG4yMzM2Olx0XHRcdFx0Z290byBub2ZyYWdzO1xuMjMzNzpcdFx0XHRpZiAoc2tiX3pjb3B5KHNrYikpXG4yMzM4Olx0XHRcdFx0bmV0X3pjb3B5X2dldChza2JfdWFyZyhza2IpKTtcbjIzMzk6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2tiX3NoaW5mbyhza2IpLVx1MDAzZW5yX2ZyYWdzOyBpJiM0MzsmIzQzOylcbjIzNDA6XHRcdFx0XHRza2JfZnJhZ19yZWYoc2tiLCBpKTtcbjIzNDE6XHRcbjIzNDI6XHRcdFx0aWYgKHNrYl9oYXNfZnJhZ19saXN0KHNrYikpXG4yMzQzOlx0XHRcdFx0c2tiX2Nsb25lX2ZyYWdsaXN0KHNrYik7XG4yMzQ0Olx0XG4yMzQ1Olx0XHRcdHNrYl9yZWxlYXNlX2RhdGEoc2tiLCBTS0JfQ09OU1VNRUQpO1xuMjM0NjpcdFx0fSBlbHNlIHtcbjIzNDc6XHRcdFx0c2tiX2ZyZWVfaGVhZChza2IpO1xuMjM0ODpcdFx0fVxuMjM0OTpcdFx0b2ZmID0gKGRhdGEgJiM0MzsgbmhlYWQpIC0gc2tiLVx1MDAzZWhlYWQ7XG4yMzUwOlx0XG4yMzUxOlx0XHRza2ItXHUwMDNlaGVhZCAgICAgPSBkYXRhO1xuMjM1MjpcdFx0c2tiLVx1MDAzZWhlYWRfZnJhZyA9IDA7XG4yMzUzOlx0XHRza2ItXHUwMDNlZGF0YSAgICAmIzQzOz0gb2ZmO1xuMjM1NDpcdFxuMjM1NTpcdFx0c2tiX3NldF9lbmRfb2Zmc2V0KHNrYiwgc2l6ZSk7XG4yMzU2Olx0I2lmZGVmIE5FVF9TS0JVRkZfREFUQV9VU0VTX09GRlNFVFxuMjM1NzpcdFx0b2ZmICAgICAgICAgICA9IG5oZWFkO1xuMjM1ODpcdCNlbmRpZlxuMjM1OTpcdFx0c2tiLVx1MDAzZXRhaWxcdCAgICAgICYjNDM7PSBvZmY7XG4yMzYwOlx0XHRza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKHNrYiwgbmhlYWQpO1xuMjM2MTpcdFx0c2tiLVx1MDAzZWNsb25lZCAgID0gMDtcbjIzNjI6XHRcdHNrYi1cdTAwM2VoZHJfbGVuICA9IDA7XG4yMzYzOlx0XHRza2ItXHUwMDNlbm9oZHIgICAgPSAwO1xuMjM2NDpcdFx0YXRvbWljX3NldChcdTAwMjZza2Jfc2hpbmZvKHNrYiktXHUwMDNlZGF0YXJlZiwgMSk7XG4yMzY1Olx0XG4yMzY2Olx0XHQvKiBJdCBpcyBub3QgZ2VuZXJhbGx5IHNhZmUgdG8gY2hhbmdlIHNrYi1cdTAwM2V0cnVlc2l6ZS5cbjIzNjc6XHRcdCAqIEZvciB0aGUgbW9tZW50LCB3ZSByZWFsbHkgY2FyZSBvZiByeCBwYXRoLCBvclxuMjM2ODpcdFx0ICogd2hlbiBza2IgaXMgb3JwaGFuZWQgKG5vdCBhdHRhY2hlZCB0byBhIHNvY2tldCkuXG4yMzY5Olx0XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjg0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2ODQwOlx0XHRkYXRhID0ga21hbGxvY19yZXNlcnZlKFx1MDAyNnNpemUsIGdmcF9tYXNrLCBOVU1BX05PX05PREUsIE5VTEwpO1xuNjg0MTpcdFx0aWYgKCFkYXRhKVxuNjg0MjpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjY4NDM6XHRcdHNpemUgPSBTS0JfV0lUSF9PVkVSSEVBRChzaXplKTtcbjY4NDQ6XHRcbjY4NDU6XHRcdC8qIENvcHkgcmVhbCBkYXRhLCBhbmQgYWxsIGZyYWdzICovXG42ODQ2Olx0XHRza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhX29mZnNldChza2IsIG9mZiwgZGF0YSwgbmV3X2hsZW4pO1xuNjg0NzpcdFx0c2tiLVx1MDAzZWxlbiAtPSBvZmY7XG42ODQ4Olx0XG42ODQ5Olx0XHQvKiBSZW1vdmUgU0tCRkxfTUFOQUdFRF9GUkFHX1JFRlMgaW5zdGVhZCBvZiB0cnlpbmcgdG8gaG9ub3VyIGl0XG42ODUwOlx0XHQgKiB3aGlsZSByZWZjb3VudGluZyBmcmFncyBiZWxvdy5cbjY4NTE6XHRcdCAqL1xuNjg1MjpcdFx0c2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYik7XG42ODUzOlx0XG42ODU0Olx0XHRtZW1jcHkoKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKikoZGF0YSAmIzQzOyBzaXplKSxcbjY4NTU6XHRcdCAgICAgICBza2Jfc2hpbmZvKHNrYiksXG42ODU2Olx0XHQgICAgICAgb2Zmc2V0b2Yoc3RydWN0IHNrYl9zaGFyZWRfaW5mbyxcbjY4NTc6XHRcdFx0XHRmcmFnc1tza2Jfc2hpbmZvKHNrYiktXHUwMDNlbnJfZnJhZ3NdKSk7XG42ODU4Olx0XHRpZiAoc2tiX2RhdGFfaXNfc2hhcmVkKHNrYikpIHtcbjY4NTk6XHRcdFx0LyogZHJvcCB0aGUgb2xkIGhlYWQgZ3JhY2VmdWxseSAqL1xuNjg2MDpcdFx0XHRpZiAoc2tiX29ycGhhbl9mcmFncyhza2IsIGdmcF9tYXNrKSkge1xuNjg2MTpcdFx0XHRcdHNrYl9rZnJlZV9oZWFkKGRhdGEpO1xuNjg2MjpcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuNjg2MzpcdFx0XHR9XG42ODY0Olx0XHRcdGlmIChza2JfemNvcHkoc2tiKSlcbjY4NjU6XHRcdFx0XHRuZXRfemNvcHlfZ2V0KHNrYl91YXJnKHNrYikpO1xuNjg2NjpcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBza2Jfc2hpbmZvKHNrYiktXHUwMDNlbnJfZnJhZ3M7IGkmIzQzOyYjNDM7KVxuNjg2NzpcdFx0XHRcdHNrYl9mcmFnX3JlZihza2IsIGkpO1xuNjg2ODpcdFx0XHRpZiAoc2tiX2hhc19mcmFnX2xpc3Qoc2tiKSlcbjY4Njk6XHRcdFx0XHRza2JfY2xvbmVfZnJhZ2xpc3Qoc2tiKTtcbjY4NzA6XHRcdFx0c2tiX3JlbGVhc2VfZGF0YShza2IsIFNLQl9DT05TVU1FRCk7XG42ODcxOlx0XHR9IGVsc2Uge1xuNjg3MjpcdFx0XHQvKiB3ZSBjYW4gcmV1c2UgZXhpc3RpbmcgcmVjb3VudC0gYWxsIHdlIGRpZCB3YXNcbjY4NzM6XHRcdFx0ICogcmVsb2NhdGUgdmFsdWVzXG42ODc0Olx0XHRcdCAqL1xuNjg3NTpcdFx0XHRza2JfZnJlZV9oZWFkKHNrYik7XG42ODc2Olx0XHR9XG42ODc3Olx0XG42ODc4Olx0XHRza2ItXHUwMDNlaGVhZCA9IGRhdGE7XG42ODc5Olx0XHRza2ItXHUwMDNlZGF0YSA9IGRhdGE7XG42ODgwOlx0XHRza2ItXHUwMDNlaGVhZF9mcmFnID0gMDtcbjY4ODE6XHRcdHNrYl9zZXRfZW5kX29mZnNldChza2IsIHNpemUpO1xuNjg4MjpcdFx0c2tiX3NldF90YWlsX3BvaW50ZXIoc2tiLCBza2JfaGVhZGxlbihza2IpKTtcbjY4ODM6XHRcdHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUoc2tiLCAwKTtcbjY4ODQ6XHRcdHNrYi1cdTAwM2VjbG9uZWQgPSAwO1xuNjg4NTpcdFx0c2tiLVx1MDAzZWhkcl9sZW4gPSAwO1xuNjg4NjpcdFx0c2tiLVx1MDAzZW5vaGRyID0gMDtcbjY4ODc6XHRcdGF0b21pY19zZXQoXHUwMDI2c2tiX3NoaW5mbyhza2IpLVx1MDAzZWRhdGFyZWYsIDEpO1xuNjg4ODpcdFxuNjg4OTpcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTE6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDkxMwoJCQkJCQkJb3V0cHV0OiA3NAoJCQkJCQkJdGhvdWdodHM6IDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgcXVlc3Rpb25zOgoKKipBbmFseXppbmcgYHNrYl9kYXRhX2lzX3NoYXJlZGAgYW5kIHRoZSBgc2tiX2Nsb25lZGAgQ2hhbmdlKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvcmUgb2YgdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBgc2tiX2RhdGFfaXNfc2hhcmVkYCBhbmQsIHNwZWNpZmljYWxseSwgd2h5IHRoZSBgc2tiX2Nsb25lZChza2IpYCBjaGVjayB3YXMgbW9kaWZpZWQuIEkga25vdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBkYXRhIHNoYXJpbmcgYW5kIGNsb25pbmcgd2l0aGluIGBza19idWZmYCBzdHJ1Y3R1cmVzLgoKTXkgaW1tZWRpYXRlIHBsYW4gaXMgdG8gZXhhbWluZSB0aGUgcmVsZXZhbnQgZGVmaW5pdGlvbnMgd2l0aGluIGBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oYC4gSSYjMzk7bGwgZm9jdXMgb24gdGhlIHNlY3Rpb25zIGFyb3VuZCBsaW5lcyAxMjkwLTEzMjAgYW5kIDIwMTUtMjA0MC4gTXkgaHlwb3RoZXNpcyBpcyB0aGF0IHRoZSBjaGFuZ2UgbGlrZWx5IHJldm9sdmVzIGFyb3VuZCBvcHRpbWlzaW5nLCBzaW1wbGlmeWluZyBvciBjbGFyaWZ5aW5nIHRoZSBsb2dpYyByZWxhdGVkIHRvIHJlZmVyZW5jZSBjb3VudGluZywgZGF0YSBzaGFyaW5nLCBvciBwZXJoYXBzIGV2ZW4gaW4gdGhlIGhhbmRsaW5nIG9mIGZyYWdtZW50ZWQgc2ticywgcGFydGljdWxhcmx5IGluIHRoZSBjb250ZXh0IG9mIHJlY2VudCBuZXR3b3JrIHN0YWNrIGltcHJvdmVtZW50cyBvciBzZWN1cml0eSBjb25zaWRlcmF0aW9ucy4gSSB3aWxsIGJlIGxvb2tpbmcgZm9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9ucywgaW5saW5lIGZ1bmN0aW9ucywgYW5kIG1hY3JvIGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gZGF0YSBzaGFyaW5nIGFuZCBjbG9uaW5nLiBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSB1c2Ugb2YgYXRvbWljIG9wZXJhdGlvbnMgYW5kIG1lbW9yeSBiYXJyaWVycywgYmVjYXVzZSB0aGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIHN1YnRsZSBidXQgY3JpdGljYWwgcGVyZm9ybWFuY2UgYW5kIGNvbmN1cnJlbmN5IGlzc3VlcyBhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTE6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjkwOlx0XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0RFQlVHX05FVCkgXHUwMDI2XHUwMDI2IGxpa2VseShyZWZjb3VudF9yZWFkKFx1MDAyNnNrYi1cdTAwM2V1c2VycykgPT0gMSkpXG4xMjkxOlx0XHRcdHNtcF9ybWIoKTtcbjEyOTI6XHRcdGVsc2UgaWYgKGxpa2VseSghcmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNnNrYi1cdTAwM2V1c2VycykpKVxuMTI5MzpcdFx0XHRyZXR1cm4gZmFsc2U7XG4xMjk0Olx0XG4xMjk1Olx0XHRyZXR1cm4gdHJ1ZTtcbjEyOTY6XHR9XG4xMjk3Olx0XG4xMjk4Olx0c3RhdGljIGlubGluZSBpbnQgc2tiX2RhdGFyZWZfYmlhcyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuMTI5OTpcdHtcbjEzMDA6XHRcdHJldHVybiBza2ItXHUwMDNlbm9oZHIgPyAoMSBcdTAwM2NcdTAwM2MgU0tCX0RBVEFSRUZfU0hJRlQpICYjNDM7IDEgOiAxO1xuMTMwMTpcdH1cbjEzMDI6XHRcbjEzMDM6XHRzdGF0aWMgaW5saW5lIGJvb2wgc2tiX2RhdGFfdW5yZWYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbjEzMDQ6XHRcdFx0XHRcdCAgc3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqc2hpbmZvKVxuMTMwNTpcdHtcbjEzMDY6XHRcdGludCBiaWFzO1xuMTMwNzpcdFxuMTMwODpcdFx0aWYgKCFza2ItXHUwMDNlY2xvbmVkKVxuMTMwOTpcdFx0XHRyZXR1cm4gdHJ1ZTtcbjEzMTA6XHRcbjEzMTE6XHRcdGJpYXMgPSBza2JfZGF0YXJlZl9iaWFzKHNrYik7XG4xMzEyOlx0XG4xMzEzOlx0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2c2hpbmZvLVx1MDAzZWRhdGFyZWYpID09IGJpYXMpXG4xMzE0Olx0XHRcdHNtcF9ybWIoKTtcbjEzMTU6XHRcdGVsc2UgaWYgKGF0b21pY19zdWJfcmV0dXJuKGJpYXMsIFx1MDAyNnNoaW5mby1cdTAwM2VkYXRhcmVmKSlcbjEzMTY6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMTMxNzpcdFxuMTMxODpcdFx0cmV0dXJuIHRydWU7XG4xMzE5Olx0fVxuMTMyMDpcdFxuMTMyMTpcdHZvaWQgX19maXhfYWRkcmVzcyBza19za2JfcmVhc29uX2Ryb3AoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuMTMyMjpcdFx0XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbjEzMjM6XHRcdFx0XHRcdCAgICAgIGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbik7XG4xMzI0Olx0XG4xMzI1Olx0c3RhdGljIGlubGluZSB2b2lkXG4xMzI2Olx0a2ZyZWVfc2tiX3JlYXNvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pXG4xMzI3Olx0e1xuMTMyODpcdFx0c2tfc2tiX3JlYXNvbl9kcm9wKE5VTEwsIHNrYiwgcmVhc29uKTtcbjEzMjk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTE6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMDE1Olx0ICpcdHRvIHRoZSBidWZmZXIuXG4yMDE2Olx0ICovXG4yMDE3Olx0c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuMjAxODpcdHtcbjIwMTk6XHRcdHJlZmNvdW50X2luYyhcdTAwMjZza2ItXHUwMDNldXNlcnMpO1xuMjAyMDpcdFx0cmV0dXJuIHNrYjtcbjIwMjE6XHR9XG4yMDIyOlx0XG4yMDIzOlx0LypcbjIwMjQ6XHQgKiBJZiB1c2VycyA9PSAxLCB3ZSBhcmUgdGhlIG9ubHkgb3duZXIgYW5kIGNhbiBhdm9pZCByZWR1bmRhbnQgYXRvbWljIGNoYW5nZXMuXG4yMDI1Olx0ICovXG4yMDI2Olx0XG4yMDI3Olx0c3RhdGljIGlubGluZSBib29sIHNrYl9kYXRhX2lzX3NoYXJlZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuMjAyODpcdHtcbjIwMjk6XHRcdHJldHVybiBza2ItXHUwMDNlY2xvbmVkIFx1MDAyNlx1MDAyNlxuMjAzMDpcdFx0ICAgICAgIGF0b21pY19yZWFkKFx1MDAyNnNrYl9zaGluZm8oc2tiKS1cdTAwM2VkYXRhcmVmKSAhPSBza2JfZGF0YXJlZl9iaWFzKHNrYik7XG4yMDMxOlx0fVxuMjAzMjpcdFxuMjAzMzpcdC8qKlxuMjAzNDpcdCAqXHRza2JfY2xvbmVkIC0gaXMgdGhlIGJ1ZmZlciBhIGNsb25lXG4yMDM1Olx0ICpcdEBza2I6IGJ1ZmZlciB0byBjaGVja1xuMjAzNjpcdCAqXG4yMDM3Olx0ICpcdFJldHVybnMgdHJ1ZSBpZiB0aGUgYnVmZmVyIHdhcyBnZW5lcmF0ZWQgd2l0aCBza2JfY2xvbmUoKSBhbmQgaXNcbjIwMzg6XHQgKlx0b25lIG9mIG11bHRpcGxlIHNoYXJlZCBjb3BpZXMgb2YgdGhlIGJ1ZmZlci4gQ2xvbmVkIGJ1ZmZlcnMgYXJlXG4yMDM5Olx0ICpcdHNoYXJlZCBkYXRhIHNvIG11c3Qgbm90IGJlIHdyaXR0ZW4gdG8gdW5kZXIgbm9ybWFsIGNpcmN1bXN0YW5jZXMuXG4yMDQwOlx0ICovXG4yMDQxOlx0c3RhdGljIGlubGluZSBpbnQgc2tiX2Nsb25lZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuMjA0MjpcdHtcbjIwNDM6XHRcdHJldHVybiBza2ItXHUwMDNlY2xvbmVkIFx1MDAyNlx1MDAyNlxuMjA0NDpcdFx0ICAgICAgIChhdG9taWNfcmVhZChcdTAwMjZza2Jfc2hpbmZvKHNrYiktXHUwMDNlZGF0YXJlZikgXHUwMDI2IFNLQl9EQVRBUkVGX01BU0spICE9IDE7XG4yMDQ1Olx0fVxuMjA0NjpcdFxuMjA0NzpcdHN0YXRpYyBpbmxpbmUgaW50IHNrYl91bmNsb25lKHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IHByaSlcbjIwNDg6XHR7XG4yMDQ5Olx0XHRtaWdodF9zbGVlcF9pZihnZnBmbGFnc19hbGxvd19ibG9ja2luZyhwcmkpKTtcbjIwNTA6XHRcbjIwNTE6XHRcdGlmIChza2JfY2xvbmVkKHNrYikpXG4yMDUyOlx0XHRcdHJldHVybiBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgMCwgcHJpKTtcbjIwNTM6XHRcbjIwNTQ6XHRcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDExOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1MzcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDbG9uZWQgU0tCIENvbmRpdGlvbioqCgpPa2F5LCBoZXJlIHdlIGdvLCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29kZSYjMzk7cyB1c2luZyBgc2tiX2Nsb25lZChza2IpYCB0byBkZXRlcm1pbmUgaWYgYSBzb2NrZXQgYnVmZmVyIChza2IpIGlzIGEgY2xvbmUsIHJpZ2h0PyBBbmQgaXQgZG9lcyB0aGF0IGJ5IGNoZWNraW5nIGAoYXRvbWljX3JlYWQoJmFtcDtza2Jfc2hpbmZvKHNrYiktJmd0O2RhdGFyZWYpICZhbXA7IFNLQl9EQVRBUkVGX01BU0spICE9IDFgLiBCdXQsIGhlcmUmIzM5O3MgdGhlIGtpY2tlcjogd2hlbiBgc2tiLSZndDtub2hkcmAgaXMgc2V0IOKAkyB3aGljaCBoYXBwZW5zIGluIHBsYWNlcyBsaWtlIGBza2JfaGVhZGVyX3JlbGVhc2VgIHdoZXJlIHdlICphZGQqIGAoMSAmbHQ7Jmx0OyBTS0JfREFUQVJFRl9TSElGVClgIHRvIHRoZSBkYXRhcmVmIC0gdGhpcyBjaGVjayAqb25seSogbG9va3MgYXQgYCZhbXA7IFNLQl9EQVRBUkVGX01BU0sgIT0gMWAuIFRoYXQgZmVlbHMuLi4gaW5jb21wbGV0ZS4KCk15IGNvbmNlcm4gaXMgd2hhdCBoYXBwZW5zIGlmIGRhdGFyZWYgaXMgYCgxICZsdDsmbHQ7IFNLQl9EQVRBUkVGX1NISUZUKSAmIzQzOyAxYD8gIEJlY2F1c2UgdGhlbiB0aGUgQU5EIG9wZXJhdGlvbiB3aXRoIGBTS0JfREFUQVJFRl9NQVNLYCByZXN1bHRzIGluIGAxYC4gV2hpY2ggbWVhbnMgYHNrYl9jbG9uZWQoc2tiKWAgd291bGQgcmV0dXJuIGAwYCAoZmFsc2UpIGV2ZW4gdGhvdWdoIHdlIGhhdmUgYSBjbG9uZSAob3IgaGVhZGVyIGNsb25lKSBhbmQgYHNrYi0mZ3Q7bm9oZHJgIGlzIHRydWUuIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBlZGdlIGNhc2UuIFRoaXMgY2FuJiMzOTt0IGJlIHJpZ2h0ISBXaGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhlIGRhdGFyZWYgaW4gdGhhdCBzaXR1YXRpb24/CgpTbywgaWYgYHNrYi0mZ3Q7bm9oZHJgIGlzIHRydWUsIGFuZCB3ZSAqZG8qIGhhdmUgYSBjbG9uZSBvciBhIGhlYWRlciBjbG9uZSwgd2hhdCBleGFjdGx5IGlzIGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZD8gSXQgc2VlbXMgbGlrZSB0aGlzIHNpdHVhdGlvbiBpcyBpbmNvcnJlY3RseSBldmFsdWF0ZWQgYnkgdGhpcyBjaGVjay4gTGV0JiMzOTtzIGRpZyBkZWVwZXIuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZXhhbWluaW5nIGBza2JfaGVhZGVyX3JlbGVhc2VgIGFuZCB0aGUgYG5vaGRyYCBmbGFnJiMzOTtzIHVzYWdlIGluIGBza2J1ZmYuY2AgYW5kIGVsc2V3aGVyZS4gIEEgcXVpY2sgc2VhcmNoIGZvciBgbm9oZHJgIGFuZCBgU0tCX0RBVEFSRUZfU0hJRlRgIHdpbGwgaG9wZWZ1bGx5IGlsbHVtaW5hdGUgdGhlIGNvbnRyb2wgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTE6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U0tCX0RBVEFSRUZfU0hJRlR8bm9oZHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfbWRiLmM9NzA9aW50IGJyX3Jwb3J0c19maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvYnJpZGdlL2JyX21kYi5jLTEwOS1cbm5ldC9icmlkZ2UvYnJfbWRiLmM6MTEwOlx0XHRpZiAobmxhX3B1dF9ub2hkcihza2IsIHNpemVvZih1MzIpLCBcdTAwMjZwLVx1MDAzZWRldi1cdTAwM2VpZmluZGV4KSB8fFxubmV0L2JyaWRnZS9icl9tZGIuYy0xMTEtXHRcdCAgICBubGFfcHV0X3UzMihza2IsIE1EQkFfUk9VVEVSX1BBVFRSX1RJTUVSLFxuLS1cbm5ldC9icmlkZ2UvYnJfbWRiLmM9MjMyPXN0YXRpYyBpbnQgX19tZGJfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYy0yNzEtXG5uZXQvYnJpZGdlL2JyX21kYi5jOjI3MjpcdGlmIChubGFfcHV0X25vaGRyKHNrYiwgc2l6ZW9mKGUpLCBcdTAwMjZlKSB8fFxubmV0L2JyaWRnZS9icl9tZGIuYy0yNzMtXHQgICAgbmxhX3B1dF91MzIoc2tiLFxuLS1cbm5ldC9icmlkZ2UvYnJfbWRiLmM9NTY1PXN0YXRpYyBpbnQgbmxtc2dfcG9wdWxhdGVfcnRyX2ZpbGwoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvYnJpZGdlL2JyX21kYi5jLTU4OC1cdFx0Z290byBlbmQ7XG5uZXQvYnJpZGdlL2JyX21kYi5jOjU4OTpcdGlmIChubGFfcHV0X25vaGRyKHNrYiwgc2l6ZW9mKHUzMiksIFx1MDAyNmlmaW5kZXgpKSB7XG5uZXQvYnJpZGdlL2JyX21kYi5jLTU5MC1cdFx0bmxhX25lc3RfY2FuY2VsKHNrYiwgcG9ydF9uZXN0KTtcbi0tXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYz0yMTY9c3RhdGljIHZvaWQgdHJhY2VfZHJvcF9jb21tb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqbG9jYXRpb24pXG4tLVxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtMjUwLVx0ICovXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYzoyNTE6XHRfX25sYV9yZXNlcnZlX25vaGRyKGRza2IsIHNpemVvZihzdHJ1Y3QgbmV0X2RtX2Ryb3BfcG9pbnQpKTtcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTI1Mi1cdG5sYS1cdTAwM2VubGFfbGVuICYjNDM7PSBOTEFfQUxJR04oc2l6ZW9mKHN0cnVjdCBuZXRfZG1fZHJvcF9wb2ludCkpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTE2MTA9c3RhdGljIHN0cnVjdCBza19idWZmICpfX3NrYl9jbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xNjIwLVx0QyhtYWNfbGVuKTtcbm5ldC9jb3JlL3NrYnVmZi5jOjE2MjE6XHRuLVx1MDAzZWhkcl9sZW4gPSBza2ItXHUwMDNlbm9oZHIgPyBza2JfaGVhZHJvb20oc2tiKSA6IHNrYi1cdTAwM2VoZHJfbGVuO1xubmV0L2NvcmUvc2tidWZmLmMtMTYyMi1cdG4tXHUwMDNlY2xvbmVkID0gMTtcbm5ldC9jb3JlL3NrYnVmZi5jOjE2MjM6XHRuLVx1MDAzZW5vaGRyID0gMDtcbm5ldC9jb3JlL3NrYnVmZi5jLTE2MjQtXHRuLVx1MDAzZXBlZWtlZCA9IDA7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MjI5Nz1pbnQgcHNrYl9leHBhbmRfaGVhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmhlYWQsIGludCBudGFpbCxcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0yMzYyLVx0c2tiLVx1MDAzZWhkcl9sZW4gID0gMDtcbm5ldC9jb3JlL3NrYnVmZi5jOjIzNjM6XHRza2ItXHUwMDNlbm9oZHIgICAgPSAwO1xubmV0L2NvcmUvc2tidWZmLmMtMjM2NC1cdGF0b21pY19zZXQoXHUwMDI2c2tiX3NoaW5mbyhza2IpLVx1MDAzZWRhdGFyZWYsIDEpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTY4Mjk9c3RhdGljIGludCBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTMyIG9mZixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy02ODg1LVx0c2tiLVx1MDAzZWhkcl9sZW4gPSAwO1xubmV0L2NvcmUvc2tidWZmLmM6Njg4NjpcdHNrYi1cdTAwM2Vub2hkciA9IDA7XG5uZXQvY29yZS9za2J1ZmYuYy02ODg3LVx0YXRvbWljX3NldChcdTAwMjZza2Jfc2hpbmZvKHNrYiktXHUwMDNlZGF0YXJlZiwgMSk7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9Njk1MD1zdGF0aWMgaW50IHBza2JfY2FydmVfaW5zaWRlX25vbmxpbmVhcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1MzIgb2ZmLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTcwMjUtXHRza2ItXHUwMDNlaGRyX2xlbiAgPSAwO1xubmV0L2NvcmUvc2tidWZmLmM6NzAyNjpcdHNrYi1cdTAwM2Vub2hkciAgICA9IDA7XG5uZXQvY29yZS9za2J1ZmYuYy03MDI3LVx0c2tiLVx1MDAzZWxlbiAtPSBvZmY7XG4tLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jPTE2NzY9aW50IGZpYl9hZGRfbmV4dGhvcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgZmliX25oX2NvbW1vbiAqbmhjLFxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xNjgyLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jOjE2ODM6XHRydG5oID0gbmxhX3Jlc2VydmVfbm9oZHIoc2tiLCBzaXplb2YoKnJ0bmgpKTtcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xNjg0LVx0aWYgKCFydG5oKVxuLS1cbm5ldC9pcHY0L2lwbXJfYmFzZS5jPTIxNj1pbnQgbXJfZmlsbF9tcm91dGUoc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvaXBtcl9iYXNlLmMtMjUzLVxubmV0L2lwdjQvaXBtcl9iYXNlLmM6MjU0Olx0XHRcdG5ocCA9IG5sYV9yZXNlcnZlX25vaGRyKHNrYiwgc2l6ZW9mKCpuaHApKTtcbm5ldC9pcHY0L2lwbXJfYmFzZS5jLTI1NS1cdFx0XHRpZiAoIW5ocCkge1xuLS1cbm5ldC9tcGxzL2FmX21wbHMuYz0yMDM4PXN0YXRpYyBpbnQgbXBsc19kdW1wX3JvdXRlKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwb3J0aWQsIHUzMiBzZXEsIGludCBldmVudCxcbi0tXG5uZXQvbXBscy9hZl9tcGxzLmMtMjEwMy1cbm5ldC9tcGxzL2FmX21wbHMuYzoyMTA0Olx0XHRcdHJ0bmggPSBubGFfcmVzZXJ2ZV9ub2hkcihza2IsIHNpemVvZigqcnRuaCkpO1xubmV0L21wbHMvYWZfbXBscy5jLTIxMDUtXHRcdFx0aWYgKCFydG5oKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz0xNzY2PXN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF9kZWZhdWx0X2xpbWl0KHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbyxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTc3My1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxNzc0Olx0cmV0dXJuIG5sYV9wdXRfbm9oZHIocmVwbHksIHNpemVvZih6b25lX2xpbWl0KSwgXHUwMDI2em9uZV9saW1pdCk7XG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTc3NS19XG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTE3Nzc9c3RhdGljIGludCBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE3OTEtXHRcdFx0XHRcdFx0ICBcdTAwMjZjb25uY291bnRfa2V5KTtcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxNzkyOlx0cmV0dXJuIG5sYV9wdXRfbm9oZHIocmVwbHksIHNpemVvZih6b25lX2xpbWl0KSwgXHUwMDI2em9uZV9saW1pdCk7XG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTc5My19XG4tLVxubmV0L3BhY2tldC9kaWFnLmM9Mzg9c3RhdGljIGludCBwZGlhZ19wdXRfbWNsaXN0KGNvbnN0IHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBza19idWZmICpubHNrYilcbi0tXG5uZXQvcGFja2V0L2RpYWcuYy01MC1cbm5ldC9wYWNrZXQvZGlhZy5jOjUxOlx0XHRkbWwgPSBubGFfcmVzZXJ2ZV9ub2hkcihubHNrYiwgc2l6ZW9mKCpkbWwpKTtcbm5ldC9wYWNrZXQvZGlhZy5jLTUyLVx0XHRpZiAoIWRtbCkge1xuLS1cbm5ldC9zY2hlZC9lbV9jYW5pZC5jPTE5Mz1zdGF0aWMgaW50IGVtX2NhbmlkX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjZl9lbWF0Y2ggKm0pXG4tLVxubmV0L3NjaGVkL2VtX2NhbmlkLmMtMjAwLVx0ICovXG5uZXQvc2NoZWQvZW1fY2FuaWQuYzoyMDE6XHRpZiAobmxhX3B1dF9ub2hkcihza2IsIHNpemVvZihzdHJ1Y3QgY2FuX2ZpbHRlcikgKiBjbS1cdTAwM2VydWxlc19jb3VudCxcbm5ldC9zY2hlZC9lbV9jYW5pZC5jLTIwMi1cdCAgICBcdTAwMjZjbS1cdTAwM2VydWxlc19yYXcpIFx1MDAzYyAwKVxuLS1cbm5ldC9zY2hlZC9lbV90ZXh0LmM9MTEzPXN0YXRpYyBpbnQgZW1fdGV4dF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y2ZfZW1hdGNoICptKVxuLS1cbm5ldC9zY2hlZC9lbV90ZXh0LmMtMTI1LVxubmV0L3NjaGVkL2VtX3RleHQuYzoxMjY6XHRpZiAobmxhX3B1dF9ub2hkcihza2IsIHNpemVvZihjb25mKSwgXHUwMDI2Y29uZikgXHUwMDNjIDApXG5uZXQvc2NoZWQvZW1fdGV4dC5jLTEyNy1cdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4tLVxubmV0L3NjaGVkL2VtYXRjaC5jPTQzNz1pbnQgdGNmX2VtX3RyZWVfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNmX2VtYXRjaF90cmVlICp0cmVlLCBpbnQgdGx2KVxuLS1cbm5ldC9zY2hlZC9lbWF0Y2guYy00NzItXHRcdFx0dTMyIHUgPSBlbS1cdTAwM2VkYXRhO1xubmV0L3NjaGVkL2VtYXRjaC5jOjQ3MzpcdFx0XHRubGFfcHV0X25vaGRyKHNrYiwgc2l6ZW9mKHUpLCBcdTAwMjZ1KTtcbm5ldC9zY2hlZC9lbWF0Y2guYy00NzQtXHRcdH0gZWxzZSBpZiAoZW0tXHUwMDNlZGF0YWxlbiBcdTAwM2UgMClcbm5ldC9zY2hlZC9lbWF0Y2guYzo0NzU6XHRcdFx0bmxhX3B1dF9ub2hkcihza2IsIGVtLVx1MDAzZWRhdGFsZW4sICh2b2lkICopIGVtLVx1MDAzZWRhdGEpO1xubmV0L3NjaGVkL2VtYXRjaC5jLTQ3Ni1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTE6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTUyNQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gYHNrYl9oZWFkZXJfcmVsZWFzZWAqKgoKT2theSwgbGV0JiMzOTtzIHB1bGwgdXAgdGhlIGRlZmluaXRpb24gb2YgYHNrYl9oZWFkZXJfcmVsZWFzZWAuIEkga25vdyBpdCYjMzk7cyBpbiBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAsIHNvIGxldCYjMzk7cyBnZXQgdGhhdCBmaWxlIG9wZW4uIEkmIzM5O20gcHJpbWFyaWx5IGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgYHNrYmAgKHNvY2tldCBidWZmZXIpIHN0cnVjdHVyZSBhbmQgaXRzIGhlYWRlci4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRyaWNhY2llcyBvZiBoZWFkZXIgbWFuYWdlbWVudCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBuZXR3b3JrIHN0YWNrLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBzZWUgaG93IG1lbW9yeSBpcyBkZWFsbG9jYXRlZCBhbmQsIGFuZCB1bmRlciB3aGF0IGNpcmN1bXN0YW5jZXMgdGhlIGRhdGEgYnVmZmVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgc29ja2V0IGJ1ZmZlciBpcyB1cGRhdGVkIHRvIHBvaW50IHRvIHRoZSBuZXcgZGF0YS4gSSBhbHNvIHdhbnQgdG8gbWFrZSBzdXJlIEkgYW0gZnVsbHkgdXAgdG8gc3BlZWQgb24gd2hlbiB0aGlzIGlzIGNhbGxlZCwgYW5kIHdoYXQgdGhlIGVmZmVjdCBpcyBvbiByZWZlcmVuY2VzIHRvIHRoZSBidWZmZXIsIHRvIGF2b2lkIGRvdWJsZSBmcmVlaW5nLiBUaGUgaW50ZW50aW9uIGlzIHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCBtZW1vcnkgbGVha3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDExOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrYl9oZWFkZXJfcmVsZWFzZXxTS0JfREFUQVJFRiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2tidWZmLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaD01OTM9c3RydWN0IHNrYl9zaGFyZWRfaW5mbyB7XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC02NDEtICogVGhlIGNyZWF0b3Igb2YgdGhlIHNrYiAoZS5nLiBUQ1ApIG1hcmtzIGl0cyBza2IgYXMgXHUwMDI2c2tfYnVmZi5ub2hkclxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo2NDI6ICogKHZpYSBfX3NrYl9oZWFkZXJfcmVsZWFzZSgpKS4gQW55IGNsb25lIGNyZWF0ZWQgZnJvbSBtYXJrZWQgc2tiIHdpbGwgZ2V0XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTY0My0gKiBcdTAwMjZza19idWZmLmhkcl9sZW4gcG9wdWxhdGVkIHdpdGggdGhlIGF2YWlsYWJsZSBoZWFkcm9vbS5cbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTY0OC0gKiAgc2tiX3Jlc2VydmUoKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo2NDk6ICogIF9fc2tiX2hlYWRlcl9yZWxlYXNlKClcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNjUwLSAqICBza2JfY2xvbmUoKVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNjU3LSAqL1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo2NTg6I2RlZmluZSBTS0JfREFUQVJFRl9TSElGVCAxNlxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo2NTk6I2RlZmluZSBTS0JfREFUQVJFRl9NQVNLICgoMSBcdTAwM2NcdTAwM2MgU0tCX0RBVEFSRUZfU0hJRlQpIC0gMSlcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNjYwLVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MTI5OD1zdGF0aWMgaW5saW5lIGludCBza2JfZGF0YXJlZl9iaWFzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTEyOTkte1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxMzAwOlx0cmV0dXJuIHNrYi1cdTAwM2Vub2hkciA/ICgxIFx1MDAzY1x1MDAzYyBTS0JfREFUQVJFRl9TSElGVCkgJiM0MzsgMSA6IDE7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTEzMDEtfVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MjA0MT1zdGF0aWMgaW5saW5lIGludCBza2JfY2xvbmVkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0yMDQzLVx0cmV0dXJuIHNrYi1cdTAwM2VjbG9uZWQgXHUwMDI2XHUwMDI2XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjIwNDQ6XHQgICAgICAgKGF0b21pY19yZWFkKFx1MDAyNnNrYl9zaGluZm8oc2tiKS1cdTAwM2VkYXRhcmVmKSBcdTAwMjYgU0tCX0RBVEFSRUZfTUFTSykgIT0gMTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMjA0NS19XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0yMDgwPXN0YXRpYyBpbmxpbmUgaW50IHNrYl9oZWFkZXJfY2xvbmVkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0yMDg3LVx0ZGF0YXJlZiA9IGF0b21pY19yZWFkKFx1MDAyNnNrYl9zaGluZm8oc2tiKS1cdTAwM2VkYXRhcmVmKTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MjA4ODpcdGRhdGFyZWYgPSAoZGF0YXJlZiBcdTAwMjYgU0tCX0RBVEFSRUZfTUFTSykgLSAoZGF0YXJlZiBcdTAwM2VcdTAwM2UgU0tCX0RBVEFSRUZfU0hJRlQpO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0yMDg5LVx0cmV0dXJuIGRhdGFyZWYgIT0gMTtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTIwOTI9c3RhdGljIGlubGluZSBpbnQgc2tiX2hlYWRlcl91bmNsb25lKHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IHByaSlcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTIxMDItLyoqXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjIxMDM6ICogX19za2JfaGVhZGVyX3JlbGVhc2UoKSAtIGFsbG93IGNsb25lcyB0byB1c2UgdGhlIGhlYWRyb29tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTIxMDQtICogQHNrYjogYnVmZmVyIHRvIG9wZXJhdGUgb25cbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTIxMDctICovXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjIxMDg6c3RhdGljIGlubGluZSB2b2lkIF9fc2tiX2hlYWRlcl9yZWxlYXNlKHN0cnVjdCBza19idWZmICpza2IpXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTIxMDkte1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0yMTEwLVx0c2tiLVx1MDAzZW5vaGRyID0gMTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MjExMTpcdGF0b21pY19zZXQoXHUwMDI2c2tiX3NoaW5mbyhza2IpLVx1MDAzZWRhdGFyZWYsIDEgJiM0MzsgKDEgXHUwMDNjXHUwMDNjIFNLQl9EQVRBUkVGX1NISUZUKSk7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTIxMTItfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDczNQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU0tCIENsb25pbmcgYW5kIERhdGEgUmVmZXJlbmNlcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBjb2RlJiMzOTtzIGNoZWNraW5nIGlmIGEgU29ja2V0IEJ1ZmZlciAoU0tCKSBpcyBjbG9uZWQgdXNpbmcgYHNrYl9jbG9uZWQoc2tiKWAuIE5vdywgSSB3YW50IHRvIHNlZSBob3cgdGhlIGRhdGEgcmVmZXJlbmNlIGNvdW50IHBsYXlzIGludG8gdGhlIHdob2xlIGNsb25pbmcgcHJvY2Vzcy4gTXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgd2hlbiBgX19za2JfaGVhZGVyX3JlbGVhc2VgIGlzIGNhbGxlZCwgYHNrYi0mZ3Q7bm9oZHJgIGlzIHNldCwgYW5kIGBkYXRhcmVmYCBnZXRzIGluaXRpYWxpemVkIHRvIGAxICYjNDM7ICgxICZsdDsmbHQ7IFNLQl9EQVRBUkVGX1NISUZUKWAuIFRoYXQgbWFrZXMgc2Vuc2UsIGVzdGFibGlzaGVzIHRoZSBpbml0aWFsIHJlZmVyZW5jZS4gVGhlIGNyaXRpY2FsIHBvaW50IGlzLCBob3cgZG9lcyB0aGlzIGNvdW50IGNoYW5nZSB1cG9uIGNsb25pbmc/IEl0IHNlZW1zIHRoZSBjb2RlIGluY3JlbWVudHMgYGRhdGFyZWZgIGJ5IDEsIHdpdGggdGhlIGFjdHVhbCBtZWNoYW5pc20gYmVpbmcgYGF0b21pY19pbmMoJmFtcDtza2Jfc2hpbmZvKHNrYiktJmd0O2RhdGFyZWYpYC4KCkkgd2FudCB0byBjb25maXJtIHRoaXMgYnkgZ29pbmcgdGhyb3VnaCBgX19za2JfY2xvbmVgIGluIGBuZXQvY29yZS9za2J1ZmYuY2AuIExldCBtZSByZXZpZXcgdGhhdCBjb2RlIGFuZCB0aGUgZXhhY3QgbWVjaGFuaWNzIHRoYXQgYGF0b21pY19pbmNgIGFuZCB0aGUgU0tCIHN0cnVjdCB1c2Ugd2hlbiB0aGUgU0tCIGlzIGNsb25lZC4gVGhpcyYjMzk7bGwgaGVscCBjZW1lbnQgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGF0YSByZWZlcmVuY2UgY291bnQgYW5kIGl0cyBpbXBhY3Qgb24gYnVmZmVyIHNoYXJpbmcgaW4gdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTE6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19za2JfY2xvbmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYz0xNTU5PXN0YXRpYyB2b2lkIF9fY29weV9za2JfaGVhZGVyKHN0cnVjdCBza19idWZmICpuZXcsIGNvbnN0IHN0cnVjdCBza19idWZmICpvbGQpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMTYwOS0gKi9cbm5ldC9jb3JlL3NrYnVmZi5jOjE2MTA6c3RhdGljIHN0cnVjdCBza19idWZmICpfX3NrYl9jbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9jb3JlL3NrYnVmZi5jLTE2MTEte1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTE2Nzg9c3RydWN0IHNrX2J1ZmYgKnNrYl9tb3JwaChzdHJ1Y3Qgc2tfYnVmZiAqZHN0LCBzdHJ1Y3Qgc2tfYnVmZiAqc3JjKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTE2ODAtXHRza2JfcmVsZWFzZV9hbGwoZHN0LCBTS0JfQ09OU1VNRUQpO1xubmV0L2NvcmUvc2tidWZmLmM6MTY4MTpcdHJldHVybiBfX3NrYl9jbG9uZShkc3QsIHNyYyk7XG5uZXQvY29yZS9za2J1ZmYuYy0xNjgyLX1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0yMTAwPXN0cnVjdCBza19idWZmICpza2JfY2xvbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZ2ZwX21hc2spXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMjEyNS1cbm5ldC9jb3JlL3NrYnVmZi5jOjIxMjY6XHRyZXR1cm4gX19za2JfY2xvbmUobiwgc2tiKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTIxMjctfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTUxMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgYW5kIHRoaW5raW5nIGFib3V0IHRoZSBjb2RlOgoKKipEaXZpbmcgaW50byBgX19za2JfY2xvbmVgIGluIGBuZXQvY29yZS9za2J1ZmYuY2AqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBgX19za2JfY2xvbmVgLiAgSSBrbm93IGl0JiMzOTtzIGEgZnVuZGFtZW50YWwgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIG5ldyBza2JzIGZyb20gZXhpc3Rpbmcgb25lcywgYnV0IEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIGFuZCBzZWUgaWYgYW55dGhpbmcganVtcHMgb3V0LiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5IGhhbmRsZSB0aGUgZGF0YSBjb3B5IGFuZCB0aGUgcmVmZXJlbmNlIGNvdW50aW5nLiBJIGV4cGVjdCBpdCYjMzk7bGwgYmUgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCwgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcHV6emxlIGZvciBwZXJmb3JtYW5jZSwgYW5kIG9idmlvdXNseSwgY29ycmVjdG5lc3MgaXMgcGFyYW1vdW50IGhlcmUuIEkmIzM5O20gbG9va2luZyBmb3IgcG90ZW50aWFsIGFyZWFzIHRoYXQgbWlnaHQgaW50cm9kdWNlIGNvbnRlbnRpb24gb3Igb3ZlcmhlYWQsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIGZyZXF1ZW50IGNsb25pbmcgd2Ugc2VlIGluIGhpZ2gtcGVyZm9ybWFuY2UgbmV0d29ya2luZyBzY2VuYXJpb3MuIExldCYjMzk7cyBzZWUgaG93IHRoZXkgbWFuYWdlIHRoZSBzaGFyZWQgZGF0YSBidWZmZXIgYW5kIG1ldGFkYXRhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTYxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNjEwOlx0c3RhdGljIHN0cnVjdCBza19idWZmICpfX3NrYl9jbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjE2MTE6XHR7XG4xNjEyOlx0I2RlZmluZSBDKHgpIG4tXHUwMDNleCA9IHNrYi1cdTAwM2V4XG4xNjEzOlx0XG4xNjE0Olx0XHRuLVx1MDAzZW5leHQgPSBuLVx1MDAzZXByZXYgPSBOVUxMO1xuMTYxNTpcdFx0bi1cdTAwM2VzayA9IE5VTEw7XG4xNjE2Olx0XHRfX2NvcHlfc2tiX2hlYWRlcihuLCBza2IpO1xuMTYxNzpcdFxuMTYxODpcdFx0QyhsZW4pO1xuMTYxOTpcdFx0QyhkYXRhX2xlbik7XG4xNjIwOlx0XHRDKG1hY19sZW4pO1xuMTYyMTpcdFx0bi1cdTAwM2VoZHJfbGVuID0gc2tiLVx1MDAzZW5vaGRyID8gc2tiX2hlYWRyb29tKHNrYikgOiBza2ItXHUwMDNlaGRyX2xlbjtcbjE2MjI6XHRcdG4tXHUwMDNlY2xvbmVkID0gMTtcbjE2MjM6XHRcdG4tXHUwMDNlbm9oZHIgPSAwO1xuMTYyNDpcdFx0bi1cdTAwM2VwZWVrZWQgPSAwO1xuMTYyNTpcdFx0QyhwZm1lbWFsbG9jKTtcbjE2MjY6XHRcdEMocHBfcmVjeWNsZSk7XG4xNjI3Olx0XHRuLVx1MDAzZWRlc3RydWN0b3IgPSBOVUxMO1xuMTYyODpcdFx0Qyh0YWlsKTtcbjE2Mjk6XHRcdEMoZW5kKTtcbjE2MzA6XHRcdEMoaGVhZCk7XG4xNjMxOlx0XHRDKGhlYWRfZnJhZyk7XG4xNjMyOlx0XHRDKGRhdGEpO1xuMTYzMzpcdFx0Qyh0cnVlc2l6ZSk7XG4xNjM0Olx0XHRyZWZjb3VudF9zZXQoXHUwMDI2bi1cdTAwM2V1c2VycywgMSk7XG4xNjM1Olx0XG4xNjM2Olx0XHRhdG9taWNfaW5jKFx1MDAyNihza2Jfc2hpbmZvKHNrYiktXHUwMDNlZGF0YXJlZikpO1xuMTYzNzpcdFx0c2tiLVx1MDAzZWNsb25lZCA9IDE7XG4xNjM4Olx0XG4xNjM5Olx0XHRyZXR1cm4gbjtcbjE2NDA6XHQjdW5kZWYgQ1xuMTY0MTpcdH1cbjE2NDI6XHRcbjE2NDM6XHQvKipcbjE2NDQ6XHQgKiBhbGxvY19za2JfZm9yX21zZygpIC0gYWxsb2NhdGUgc2tfYnVmZiB0byB3cmFwIGZyYWcgbGlzdCBmb3JtaW5nIGEgbXNnXG4xNjQ1Olx0ICogQGZpcnN0OiBmaXJzdCBza19idWZmIG9mIHRoZSBtc2dcbjE2NDY6XHQgKi9cbjE2NDc6XHRzdHJ1Y3Qgc2tfYnVmZiAqYWxsb2Nfc2tiX2Zvcl9tc2coc3RydWN0IHNrX2J1ZmYgKmZpcnN0KVxuMTY0ODpcdHtcbjE2NDk6XHRcdHN0cnVjdCBza19idWZmICpuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjMzNAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE3MDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgU0tCIERhdGEgU2hhcmluZyBhbmQgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgd2UgaGF2ZSBhIHRyaWNreSBzaXR1YXRpb24gd2l0aCBTS0JzLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBob3cgZGF0YSByZWZlcmVuY2VzIGFuZCBjbG9uaW5nIGludGVyYWN0IHdpdGggYHBza2JfZXhwYW5kX2hlYWRgIGFuZCBgcHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyYC4gSSYjMzk7bSBzZWVpbmcgYSBwb3RlbnRpYWwgZmxhdyBpbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiwgcGFydGljdWxhcmx5IHdoZW4gYSBjbG9uZWQgU0tCIGlzIGZyZWVkLCB3aGljaCBjb3VsZCBsZWFkIHRvIGRhdGEgY29ycnVwdGlvbiBvciBpbmNvcnJlY3QgcmVmZXJlbmNlIGNvdW50aW5nLgoKSW5pdGlhbGx5LCB3aGVuIGBfX3NrYl9oZWFkZXJfcmVsZWFzZWAgaXMgY2FsbGVkLCB3ZSBzZXQgYHNrYi0mZ3Q7bm9oZHJgIHRvIDEsIGFuZCB0aGUgZGF0YXJlZiBpcyBgMSAmIzQzOyAoMSAmbHQ7Jmx0OyBTS0JfREFUQVJFRl9TSElGVClgLiBUaGVuLCB3aGVuIGFuIFNLQiBpcyBjbG9uZWQsIGJvdGggdGhlIG9yaWdpbmFsIGFuZCB0aGUgY2xvbmUmIzM5O3MgYGNsb25lZGAgZmxhZyBpcyBzZXQsIGFuZCB0aGUgYGRhdGFyZWZgIGJlY29tZXMgYDIgJiM0MzsgKDEgJmx0OyZsdDsgU0tCX0RBVEFSRUZfU0hJRlQpYC4KClRoZSBjb3JlIGlzc3VlIGxpZXMgaW4gd2hhdCBoYXBwZW5zIHdoZW4gYSBjbG9uZSBpcyBmcmVlZC4gVGhlIGBza2JfZGF0YV91bnJlZmAgZnVuY3Rpb24gcmVkdWNlcyBgZGF0YXJlZmAgYmFzZWQgb24gdGhlIGBza2JfZGF0YXJlZl9iaWFzYCwgd2hpY2ggZGVwZW5kcyBvbiBgc2tiLSZndDtub2hkcmAuICBJZiB0aGUgb3JpZ2luYWwgaXMgc3RpbGwgYXJvdW5kIGFuZCBgc2tiLSZndDtub2hkcmAgaXMgMSwgYSBiaWFzIG9mIGAxICYjNDM7ICgxICZsdDsmbHQ7IFNLQl9EQVRBUkVGX1NISUZUKWAgaXMgaW50cm9kdWNlZC4gVGhlIG9sZCBjb2RlIGhhZCBhIHByb2JsZW0gd2hlbiBhbiBTS0Igd2FzIGNsb25lZCwgdGhlbiB0aGUgY2xvbmUgd2FzIGZyZWVkLCBidXQgdGhlIG9yaWdpbmFsIHdhcyBzdGlsbCBhcm91bmQuICBJbiB0aGlzIHNjZW5hcmlvIHRoZSB2YWx1ZSBvZiB0aGUgYHNrYl9jbG9uZWRgIGZ1bmN0aW9uIHdpbGwgbWlzaW50ZXJwcmV0IHdoZXRoZXIgZGF0YSBpcyBzaGFyZWQgKGluY29ycmVjdGx5IGFzc3VtaW5nIGl0IGlzIG5vdCBzaGFyZWQpLCBhbmQgYHBza2JfZXhwYW5kX2hlYWRgIGFuZCBgcHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyYCB3aWxsIG1pc3Rha2VubHkgZnJlZSB0aGUgZGF0YSwgb3IgY29ycnVwdCB0aGUgcmVmY291bnQuICBUaGUgYHNrYl9kYXRhX2lzX3NoYXJlZGAgZnVuY3Rpb24gd2lsbCByZXR1cm4gVFJVRSwgbWVhbmluZyB0aGF0IHRoaXMgZGF0YSBpcyBhY3R1YWxseSBzaGFyZWQsIGFuZCBuZWVkcyB0byBiZSBoYW5kbGVkIGFwcHJvcHJpYXRlbHkuICAKClRoZSByb290IGNhdXNlIGFwcGVhcnMgdG8gYmUgdGhlIGBza2JfY2xvbmVkYCBtYWNybyBub3QgcHJvcGVybHkgYWNjb3VudGluZyBmb3IgdGhlIGBub2hkcmAgYml0IGluIGl0cyBjYWxjdWxhdGlvbiBvZiBzaGFyZWQgZGF0YSwgd2hpY2ggcmVzdWx0cyBpbiBgcHNrYl9leHBhbmRfaGVhZGAgcG90ZW50aWFsbHkgZnJlZWluZyBzaGFyZWQgZGF0YSBwcmVtYXR1cmVseS4gIFRoaXMgY291bGQgY2F1c2UgZGF0YSBjb3JydXB0aW9uLCBvciByZWZlcmVuY2UgY291bnQgaXNzdWVzLiBUaGUgYHNrYl9jbG9uZWRgIG9ubHkgbWFza2VkIG91dCB0aGUgaGlnaGVyIGJpdHMsIHdoaWNoIGluZGljYXRlZCB3aGV0aGVyIGBub2hkcmAgd2FzIHNldCBvciBub3QsIHNvIGBza2JfY2xvbmVkYCB3cm9uZ2x5IHRob3VnaHQgYG5gIHdhcyB0aGUgc29sZSBvd25lci4KCk5vdywgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGlzIGlzIGZ1enplci13b3J0aHkuIEdpdmVuIHRoYXQgdGhpcyBkaXJlY3RseSBpbXBhY3RzIGNvcmUga2VybmVsIGxvZ2ljIHdpdGhpbiBgbmV0L2NvcmUvc2tidWZmLmNgIGFuZCBwb3RlbnRpYWxseSBpbmNsdWRlcyBgcHNrYl9leHBhbmRfaGVhZGAgYW5kIGBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXJgIHdoaWNoIGFyZSB3aWRlbHkgdXNlZCwgSSYjMzk7ZCBzYXkgdGhpcyBuZWVkcyB0byBiZSBpbnZlc3RpZ2F0ZWQgZnVydGhlci4gIFRoaXMgZGlyZWN0bHkgYWZmZWN0cyBtZW1vcnkgbWFuYWdlbWVudCB3aXRoIGBza2JgIGNsb25lcywgYW5kIHNvIEkgc2hvdWxkIGNvbnNpZGVyIHNldHRpbmcgYFdvcnRoRnV6emluZz10cnVlYC4KCkZvciB0aGUgZm9jdXMgc3ltYm9scywgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY2FsbCBzaXRlcyBmb3IgYHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcmAgc2luY2UgaXQmIzM5O3MgYHN0YXRpY2AuICBIb3dldmVyLCBgcHNrYl9leHBhbmRfaGVhZGAgaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgYEZvY3VzU3ltYm9sc2AsIGFzIGlzIHRoZSBub24tc3RhdGljIGFuZCBub24taW5saW5lIGBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXJgIGNhbGxzaXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXJ8cHNrYl9leHBhbmRfaGVhZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvZnJhZ21lbnRhdGlvbi5jPTI2MT1iYXRhZHZfZnJhZ19tZXJnZV9wYWNrZXRzKHN0cnVjdCBobGlzdF9oZWFkICpjaGFpbilcbi0tXG5uZXQvYmF0bWFuLWFkdi9mcmFnbWVudGF0aW9uLmMtMjgxLVx0LyogTWFrZSByb29tIGZvciB0aGUgcmVzdCBvZiB0aGUgZnJhZ21lbnRzLiAqL1xubmV0L2JhdG1hbi1hZHYvZnJhZ21lbnRhdGlvbi5jOjI4MjpcdGlmIChwc2tiX2V4cGFuZF9oZWFkKHNrYl9vdXQsIDAsIHNpemUgLSBza2Jfb3V0LVx1MDAzZWxlbiwgR0ZQX0FUT01JQykgXHUwMDNjIDApIHtcbm5ldC9iYXRtYW4tYWR2L2ZyYWdtZW50YXRpb24uYy0yODMtXHRcdGtmcmVlX3NrYihza2Jfb3V0KTtcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmM9MTAzNT1pbnQgYnBmX3Byb2dfdGVzdF9ydW5fc2tiKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmthdHRyLFxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy0xMjMxLVxubmV0L2JwZi90ZXN0X3J1bi5jOjEyMzI6XHRcdFx0aWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCBuaGVhZCwgMCwgR0ZQX1VTRVIpKSB7XG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTIzMy1cdFx0XHRcdHJldCA9IC1FTk9NRU07XG4tLVxubmV0L2NvcmUvZGV2LmM9NTYxMz1uZXRpZl9za2JfY2hlY2tfZm9yX3hkcChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9kZXYuYy01NjI0LVx0LyogSW4gY2FzZSB3ZSBoYXZlIHRvIGdvIGRvd24gdGhlIHBhdGggYW5kIGFsc28gbGluZWFyaXplLFxubmV0L2NvcmUvZGV2LmM6NTYyNTpcdCAqIHRoZW4gbGV0cyBkbyB0aGUgcHNrYl9leHBhbmRfaGVhZCgpIHdvcmsganVzdCBvbmNlIGhlcmUuXG5uZXQvY29yZS9kZXYuYy01NjI2LVx0ICovXG4tLVxubmV0L2NvcmUvZGV2LmMtNTYyOC1cdHRyb29tID0gc2tiLVx1MDAzZXRhaWwgJiM0Mzsgc2tiLVx1MDAzZWRhdGFfbGVuIC0gc2tiLVx1MDAzZWVuZDtcbm5ldC9jb3JlL2Rldi5jOjU2Mjk6XHRlcnIgPSBwc2tiX2V4cGFuZF9oZWFkKHNrYixcbm5ldC9jb3JlL2Rldi5jLTU2MzAtXHRcdFx0ICAgICAgIGhyb29tIFx1MDAzZSAwID8gQUxJR04oaHJvb20sIE5FVF9TS0JfUEFEKSA6IDAsXG4tLVxubmV0L2NvcmUvbHd0X2JwZi5jPTE3MD1zdGF0aWMgaW50IHhtaXRfY2hlY2tfaGVhZHJvb20oc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGhyb29tKVxuLS1cbm5ldC9jb3JlL2x3dF9icGYuYy0xNzQtXG5uZXQvY29yZS9sd3RfYnBmLmM6MTc1Olx0XHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIG5oZWFkLCAwLCBHRlBfQVRPTUlDKSlcbm5ldC9jb3JlL2x3dF9icGYuYy0xNzYtXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4tLVxubmV0L2NvcmUvcGt0Z2VuLmM9Mjc1OT1zdGF0aWMgaW50IHByb2Nlc3NfaXBzZWMoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYsXG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtMjc3Mi1cdFx0XHRpZiAobmhlYWQgXHUwMDNlIDApIHtcbm5ldC9jb3JlL3BrdGdlbi5jOjI3NzM6XHRcdFx0XHRyZXQgPSBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgbmhlYWQsIDAsIEdGUF9BVE9NSUMpO1xubmV0L2NvcmUvcGt0Z2VuLmMtMjc3NC1cdFx0XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5uZXQvY29yZS9za2JfZmF1bHRfaW5qZWN0aW9uLmM9MzM9dm9pZCBza2JfbWlnaHRfcmVhbGxvYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL3NrYl9mYXVsdF9pbmplY3Rpb24uYy0zNy1cbm5ldC9jb3JlL3NrYl9mYXVsdF9pbmplY3Rpb24uYzozODpcdHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCAwLCBHRlBfQVRPTUlDKTtcbm5ldC9jb3JlL3NrYl9mYXVsdF9pbmplY3Rpb24uYy0zOS19XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MjI3NT1FWFBPUlRfU1lNQk9MKF9fcHNrYl9jb3B5X2ZjbG9uZSk7XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMjI3Ny0vKipcbm5ldC9jb3JlL3NrYnVmZi5jOjIyNzg6ICpcdHBza2JfZXhwYW5kX2hlYWQgLSByZWFsbG9jYXRlIGhlYWRlciBvZiBcdTAwMjZza19idWZmXG5uZXQvY29yZS9za2J1ZmYuYy0yMjc5LSAqXHRAc2tiOiBidWZmZXIgdG8gcmVhbGxvY2F0ZVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTIyOTYtXG5uZXQvY29yZS9za2J1ZmYuYzoyMjk3OmludCBwc2tiX2V4cGFuZF9oZWFkKHN0cnVjdCBza19idWZmICpza2IsIGludCBuaGVhZCwgaW50IG50YWlsLFxubmV0L2NvcmUvc2tidWZmLmMtMjI5OC1cdFx0ICAgICBnZnBfdCBnZnBfbWFzaylcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0yMzc5LX1cbm5ldC9jb3JlL3NrYnVmZi5jOjIzODA6RVhQT1JUX1NZTUJPTChwc2tiX2V4cGFuZF9oZWFkKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTIzODEtXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MjM4ND1zdHJ1Y3Qgc2tfYnVmZiAqc2tiX3JlYWxsb2NfaGVhZHJvb20oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhlYWRyb29tKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTIzOTItXHRcdHNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcbm5ldC9jb3JlL3NrYnVmZi5jOjIzOTM6XHRcdGlmIChza2IyIFx1MDAyNlx1MDAyNiBwc2tiX2V4cGFuZF9oZWFkKHNrYjIsIFNLQl9EQVRBX0FMSUdOKGRlbHRhKSwgMCxcbm5ldC9jb3JlL3NrYnVmZi5jLTIzOTQtXHRcdFx0XHRcdCAgICAgR0ZQX0FUT01JQykpIHtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0yNDA0PWludCBfX3NrYl91bmNsb25lX2tlZXB0cnVlc2l6ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBwcmkpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMjQxMi1cbm5ldC9jb3JlL3NrYnVmZi5jOjI0MTM6XHRyZXMgPSBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgMCwgcHJpKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTI0MTQtXHRpZiAocmVzKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTI0NDg9c3RydWN0IHNrX2J1ZmYgKnNrYl9leHBhbmRfaGVhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaGVhZHJvb20pXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMjQ1OC1cdGRlbHRhID0gU0tCX0RBVEFfQUxJR04oZGVsdGEpO1xubmV0L2NvcmUvc2tidWZmLmM6MjQ1OTpcdC8qIHBza2JfZXhwYW5kX2hlYWQoKSBtaWdodCBjcmFzaCwgaWYgc2tiIGlzIHNoYXJlZC4gKi9cbm5ldC9jb3JlL3NrYnVmZi5jLTI0NjAtXHRpZiAoc2tiX3NoYXJlZChza2IpIHx8ICFpc19za2Jfd21lbShza2IpKSB7XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMjQ3MC1cdH1cbm5ldC9jb3JlL3NrYnVmZi5jOjI0NzE6XHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIGRlbHRhLCAwLCBHRlBfQVRPTUlDKSlcbm5ldC9jb3JlL3NrYnVmZi5jLTI0NzItXHRcdGdvdG8gZmFpbDtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0yNTY3PWludCBfX3NrYl9wYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHBhZCwgYm9vbCBmcmVlX29uX2Vycm9yKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTI1NzktXHRpZiAobGlrZWx5KHNrYl9jbG9uZWQoc2tiKSB8fCBudGFpbCBcdTAwM2UgMCkpIHtcbm5ldC9jb3JlL3NrYnVmZi5jOjI1ODA6XHRcdGVyciA9IHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCBudGFpbCwgR0ZQX0FUT01JQyk7XG5uZXQvY29yZS9za2J1ZmYuYy0yNTgxLVx0XHRpZiAodW5saWtlbHkoZXJyKSlcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0yNzI0PWludCBfX19wc2tiX3RyaW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbilcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0yNzMzLVx0aWYgKHNrYl9jbG9uZWQoc2tiKSBcdTAwMjZcdTAwMjZcbm5ldC9jb3JlL3NrYnVmZi5jOjI3MzQ6XHQgICAgdW5saWtlbHkoKGVyciA9IHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCAwLCBHRlBfQVRPTUlDKSkpKVxubmV0L2NvcmUvc2tidWZmLmMtMjczNS1cdFx0cmV0dXJuIGVycjtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0yODc4PXZvaWQgKl9fcHNrYl9wdWxsX3RhaWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGRlbHRhKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTI4ODktXHRpZiAoZWF0IFx1MDAzZSAwIHx8IHNrYl9jbG9uZWQoc2tiKSkge1xubmV0L2NvcmUvc2tidWZmLmM6Mjg5MDpcdFx0aWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCBlYXQgXHUwMDNlIDAgPyBlYXQgJiM0MzsgMTI4IDogMCxcbm5ldC9jb3JlL3NrYnVmZi5jLTI4OTEtXHRcdFx0XHQgICAgIEdGUF9BVE9NSUMpKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTUzODM9aW50IHNrYl9jb3dfZGF0YShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGFpbGJpdHMsIHN0cnVjdCBza19idWZmICoqdHJhaWxlcilcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy01NDA0LVx0XHRpZiAoc2tiX3RhaWxyb29tKHNrYikgXHUwMDNjIHRhaWxiaXRzIFx1MDAyNlx1MDAyNlxubmV0L2NvcmUvc2tidWZmLmM6NTQwNTpcdFx0ICAgIHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCB0YWlsYml0cy1za2JfdGFpbHJvb20oc2tiKSYjNDM7MTI4LCBHRlBfQVRPTUlDKSlcbm5ldC9jb3JlL3NrYnVmZi5jLTU0MDYtXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NjM4Mz1pbnQgc2tiX2Vuc3VyZV93cml0YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgd3JpdGVfbGVuKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTYzOTAtXG5uZXQvY29yZS9za2J1ZmYuYzo2MzkxOlx0cmV0dXJuIHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCAwLCBHRlBfQVRPTUlDKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTYzOTItfVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTYzOTU9aW50IHNrYl9lbnN1cmVfd3JpdGFibGVfaGVhZF90YWlsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNjQxNC1cbm5ldC9jb3JlL3NrYnVmZi5jOjY0MTU6XHRyZXR1cm4gcHNrYl9leHBhbmRfaGVhZChza2IsIG5lZWRlZF9oZWFkcm9vbSwgbmVlZGVkX3RhaWxyb29tLFxubmV0L2NvcmUvc2tidWZmLmMtNjQxNi1cdFx0XHRcdEdGUF9BVE9NSUMpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTY4MjY9RVhQT1JUX1NZTUJPTChhbGxvY19za2Jfd2l0aF9mcmFncyk7XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNjgyOC0vKiBjYXJ2ZSBvdXQgdGhlIGZpcnN0IG9mZiBieXRlcyBmcm9tIHNrYiB3aGVuIG9mZiBcdTAwM2MgaGVhZGxlbiAqL1xubmV0L2NvcmUvc2tidWZmLmM6NjgyOTpzdGF0aWMgaW50IHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1MzIgb2ZmLFxubmV0L2NvcmUvc2tidWZmLmMtNjgzMC1cdFx0XHRcdCAgICBjb25zdCBpbnQgaGVhZGxlbiwgZ2ZwX3QgZ2ZwX21hc2spXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NzAzND1zdGF0aWMgaW50IHBza2JfY2FydmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTMyIGxlbiwgZ2ZwX3QgZ2ZwKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTcwMzgtXHRpZiAobGVuIFx1MDAzYyBoZWFkbGVuKVxubmV0L2NvcmUvc2tidWZmLmM6NzAzOTpcdFx0cmV0dXJuIHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcihza2IsIGxlbiwgaGVhZGxlbiwgZ2ZwKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTcwNDAtXHRlbHNlXG4tLVxubmV0L2lwdjQvaWNtcC5jPTczOT1pY21wX2V4dF9hcHBlbmQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luLCBzdHJ1Y3QgaWNtcGhkciAqaWNtcGgsXG4tLVxubmV0L2lwdjQvaWNtcC5jLTc3OC1cbm5ldC9pcHY0L2ljbXAuYzo3Nzk6XHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIDAsIGV4dF9tYXhfbGVuLCBHRlBfQVRPTUlDKSlcbm5ldC9pcHY0L2ljbXAuYy03ODAtXHRcdGdvdG8gZnJlZV9za2I7XG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmM9MjA5PWludCBpbmV0X3NrX2RpYWdfZmlsbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayxcbi0tXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy0zNzgtXHRcdGlmIChjYi1cdTAwM2VtaW5fZHVtcF9hbGxvYyBcdTAwM2UgcHJldl9taW5fZHVtcF9hbGxvYylcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjM3OTpcdFx0XHQvKiBSZXRyeSB3aXRoIHBza2JfZXhwYW5kX2hlYWQoKSB3aXRoXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy0zODAtXHRcdFx0ICogX19HRlBfRElSRUNUX1JFQ0xBSU1cbi0tXG5uZXQvaXB2NC9pbmV0X2RpYWcuYz04MDk9c3RhdGljIGludCBfX2luZXRfZGlhZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbi0tXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy04MzEtXHRpZiAoIXNrYi1cdTAwM2VsZW4gXHUwMDI2XHUwMDI2IGNiLVx1MDAzZW1pbl9kdW1wX2FsbG9jIFx1MDAzZSBwcmV2X21pbl9kdW1wX2FsbG9jKSB7XG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo4MzI6XHRcdGVyciA9IHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCBjYi1cdTAwM2VtaW5fZHVtcF9hbGxvYywgR0ZQX0tFUk5FTCk7XG5uZXQvaXB2NC9pbmV0X2RpYWcuYy04MzMtXHRcdGlmICghZXJyKVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTg5ND1zdGF0aWMgaW50IGlwZ3JlX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTkwNC1cdGlmIChza2JfaGVhZHJvb20oc2tiKSBcdTAwM2MgbmVlZGVkIFx1MDAyNlx1MDAyNlxubmV0L2lwdjQvaXBfZ3JlLmM6OTA1Olx0ICAgIHBza2JfZXhwYW5kX2hlYWQoc2tiLCBISF9EQVRBX0FMSUdOKG5lZWRlZCAtIHNrYl9oZWFkcm9vbShza2IpKSxcbm5ldC9pcHY0L2lwX2dyZS5jLTkwNi1cdFx0XHQgICAgIDAsIEdGUF9BVE9NSUMpKVxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci5jPTIyPWludCBpcF9yb3V0ZV9tZV9oYXJkZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBhZGRyX3R5cGUpXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyLmMtODItXHRpZiAoc2tiX2hlYWRyb29tKHNrYikgXHUwMDNjIGhoX2xlbiBcdTAwMjZcdTAwMjZcbm5ldC9pcHY0L25ldGZpbHRlci5jOjgzOlx0ICAgIHBza2JfZXhwYW5kX2hlYWQoc2tiLCBISF9EQVRBX0FMSUdOKGhoX2xlbiAtIHNrYl9oZWFkcm9vbShza2IpKSxcbm5ldC9pcHY0L25ldGZpbHRlci5jLTg0LVx0XHRcdFx0MCwgR0ZQX0FUT01JQykpXG4tLVxubmV0L2lwdjYvZXh0aGRycy5jPTIzMj1zdGF0aWMgYm9vbCBpcHY2X2Rlc3RfaGFvKHN0cnVjdCBza19idWZmICpza2IsIGludCBvcHRvZmYpXG4tLVxubmV0L2lwdjYvZXh0aGRycy5jLTI3MC1cdGlmIChza2JfY2xvbmVkKHNrYikpIHtcbm5ldC9pcHY2L2V4dGhkcnMuYzoyNzE6XHRcdGlmIChwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgMCwgR0ZQX0FUT01JQykpXG5uZXQvaXB2Ni9leHRoZHJzLmMtMjcyLVx0XHRcdGdvdG8gZGlzY2FyZDtcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmM9MzcxPXN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXG4tLVxubmV0L2lwdjYvZXh0aGRycy5jLTQzNC1cdGlmIChza2JfY2xvbmVkKHNrYikpIHtcbm5ldC9pcHY2L2V4dGhkcnMuYzo0MzU6XHRcdGlmIChwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgMCwgR0ZQX0FUT01JQykpIHtcbm5ldC9pcHY2L2V4dGhkcnMuYy00MzYtXHRcdFx0X19JUDZfSU5DX1NUQVRTKG5ldCwgaXA2X2RzdF9pZGV2KHNrYl9kc3Qoc2tiKSksXG4tLVxubmV0L2lwdjYvZXh0aGRycy5jPTQ4MT1zdGF0aWMgaW50IGlwdjZfcnBsX3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtNTg5LVx0XHQgICAgIHNrYl9oZWFkcm9vbShza2IpIFx1MDAzYyBjaGRyX2xlbiAmIzQzOyBza2ItXHUwMDNlbWFjX2xlbikpIHtcbm5ldC9pcHY2L2V4dGhkcnMuYzo1OTA6XHRcdGlmIChwc2tiX2V4cGFuZF9oZWFkKHNrYiwgY2hkcl9sZW4gJiM0Mzsgc2tiLVx1MDAzZW1hY19sZW4sIDAsXG5uZXQvaXB2Ni9leHRoZHJzLmMtNTkxLVx0XHRcdFx0ICAgICBHRlBfQVRPTUlDKSkge1xuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYz02NDU9c3RhdGljIGludCBpcHY2X3J0aGRyX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYy03NTgtXHRcdC8qIHRoZSBjb3B5IGlzIGEgZm9yd2FyZGVkIHBhY2tldCAqL1xubmV0L2lwdjYvZXh0aGRycy5jOjc1OTpcdFx0aWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCAwLCBHRlBfQVRPTUlDKSkge1xubmV0L2lwdjYvZXh0aGRycy5jLTc2MC1cdFx0XHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpcDZfZHN0X2lkZXYoc2tiX2RzdChza2IpKSxcbi0tXG5uZXQvaXB2Ni9pY21wLmM9NTYyPWljbXA2X2V4dF9hcHBlbmQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luLFxuLS1cbm5ldC9pcHY2L2ljbXAuYy02MDgtXG5uZXQvaXB2Ni9pY21wLmM6NjA5Olx0aWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCBleHRfbWF4X2xlbiwgR0ZQX0FUT01JQykpXG5uZXQvaXB2Ni9pY21wLmMtNjEwLVx0XHRnb3RvIGZyZWVfc2tiO1xuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYz0xMzYzPXN0YXRpYyBpbnQgaXA2Z3JlX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYy0xMzczLVx0aWYgKHNrYl9oZWFkcm9vbShza2IpIFx1MDAzYyBuZWVkZWQgXHUwMDI2XHUwMDI2XG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MTM3NDpcdCAgICBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgSEhfREFUQV9BTElHTihuZWVkZWQgLSBza2JfaGVhZHJvb20oc2tiKSksXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTM3NS1cdFx0XHQgICAgIDAsIEdGUF9BVE9NSUMpKVxuLS1cbm5ldC9pcHY2L25ldGZpbHRlci5jPTI0PWludCBpcDZfcm91dGVfbWVfaGFyZGVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrX3BhcnRpYWwsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyLmMtODAtXHRpZiAoc2tiX2hlYWRyb29tKHNrYikgXHUwMDNjIGhoX2xlbiBcdTAwMjZcdTAwMjZcbm5ldC9pcHY2L25ldGZpbHRlci5jOjgxOlx0ICAgIHBza2JfZXhwYW5kX2hlYWQoc2tiLCBISF9EQVRBX0FMSUdOKGhoX2xlbiAtIHNrYl9oZWFkcm9vbShza2IpKSxcbm5ldC9pcHY2L25ldGZpbHRlci5jLTgyLVx0XHRcdCAgICAgMCwgR0ZQX0FUT01JQykpXG4tLVxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jPTM5OD1zdGF0aWMgaW50IHNlZzZfZG9fc3JoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBkc3RfZW50cnkgKmNhY2hlX2RzdClcbi0tXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtNDQ4LVxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jOjQ0OTpcdFx0aWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCBza2ItXHUwMDNlbWFjX2xlbiwgMCwgR0ZQX0FUT01JQykgXHUwMDNjIDApXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtNDUwLVx0XHRcdHJldHVybiAtRU5PTUVNO1xuLS1cbm5ldC9pcHY2L3VkcF9vZmZsb2FkLmM9MTk9c3RhdGljIHN0cnVjdCBza19idWZmICp1ZHA2X3Vmb19mcmFnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY2L3VkcF9vZmZsb2FkLmMtNzgtXHRcdGlmIChza2ItXHUwMDNlbWFjX2hlYWRlciBcdTAwM2MgKHRubF9obGVuICYjNDM7IGZyYWdfaGRyX3N6KSkge1xubmV0L2lwdjYvdWRwX29mZmxvYWQuYzo3OTpcdFx0XHRpZiAoZ3NvX3Bza2JfZXhwYW5kX2hlYWQoc2tiLCB0bmxfaGxlbiAmIzQzOyBmcmFnX2hkcl9zeikpXG5uZXQvaXB2Ni91ZHBfb2ZmbG9hZC5jLTgwLVx0XHRcdFx0Z290byBvdXQ7XG4tLVxubmV0L21hYzgwMjExL3J4LmM9NzQyPWllZWU4MDIxMV9tYWtlX21vbml0b3Jfc2tiKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxuLS1cbm5ldC9tYWM4MDIxMS9yeC5jLTc2Ny1cdFx0aWYgKHNrYl9oZWFkcm9vbShza2IpIFx1MDAzYyBuZWVkZWRfaGVhZHJvb20gXHUwMDI2XHUwMDI2XG5uZXQvbWFjODAyMTEvcnguYzo3Njg6XHRcdCAgICBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgbmVlZGVkX2hlYWRyb29tLCAwLCBHRlBfQVRPTUlDKSkge1xubmV0L21hYzgwMjExL3J4LmMtNzY5LVx0XHRcdGRldl9rZnJlZV9za2Ioc2tiKTtcbi0tXG5uZXQvbWFjODAyMTEvcnguYz0yMzczPWllZWU4MDIxMV9yeF9oX2RlZnJhZ21lbnQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeClcbi0tXG5uZXQvbWFjODAyMTEvcnguYy0yNTEyLVx0XHRJODAyX0RFQlVHX0lOQyhyeC1cdTAwM2Vsb2NhbC1cdTAwM2VyeF9leHBhbmRfc2tiX2hlYWRfZGVmcmFnKTtcbm5ldC9tYWM4MDIxMS9yeC5jOjI1MTM6XHRcdGlmICh1bmxpa2VseShwc2tiX2V4cGFuZF9oZWFkKHJ4LVx1MDAzZXNrYiwgMCwgZW50cnktXHUwMDNlZXh0cmFfbGVuLFxubmV0L21hYzgwMjExL3J4LmMtMjUxNC1cdFx0XHRcdFx0ICAgICAgR0ZQX0FUT01JQykpKSB7XG4tLVxubmV0L21hYzgwMjExL3R4LmM9MjAwND1zdGF0aWMgaW50IGllZWU4MDIxMV9za2JfcmVzaXplKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTIwMzEtXG5uZXQvbWFjODAyMTEvdHguYzoyMDMyOlx0aWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCBoZWFkX25lZWQsIHRhaWxfbmVlZCwgR0ZQX0FUT01JQykpIHtcbm5ldC9tYWM4MDIxMS90eC5jLTIwMzMtXHRcdHdpcGh5X2RlYnVnKGxvY2FsLVx1MDAzZWh3LndpcGh5LFxuLS1cbm5ldC9tYWM4MDIxMS90eC5jPTMzODc9c3RhdGljIGJvb2wgaWVlZTgwMjExX2Ftc2R1X3JlYWxsb2NfcGFkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTMzOTItXG5uZXQvbWFjODAyMTEvdHguYzozMzkzOlx0XHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIGhlYWRyb29tLCAwLCBHRlBfQVRPTUlDKSkge1xubmV0L21hYzgwMjExL3R4LmMtMzM5NC1cdFx0XHR3aXBoeV9kZWJ1Zyhsb2NhbC1cdTAwM2Vody53aXBoeSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9oZWxwZXIuYz02Nz1zdGF0aWMgYm9vbCBlbmxhcmdlX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZXh0cmEpXG4tLVxubmV0L25ldGZpbHRlci9uZl9uYXRfaGVscGVyLmMtNzEtXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9oZWxwZXIuYzo3MjpcdGlmIChwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgZXh0cmEgLSBza2JfdGFpbHJvb20oc2tiKSwgR0ZQX0FUT01JQykpXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9oZWxwZXIuYy03My1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvLmM9NjAxPXN0YXRpYyBpbnQgbmZfeGZybV9tZV9oYXJkZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZmFtaWx5KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvLmMtNjMxLVx0aWYgKHNrYl9oZWFkcm9vbShza2IpIFx1MDAzYyBoaF9sZW4gXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90by5jOjYzMjpcdCAgICBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgaGhfbGVuIC0gc2tiX2hlYWRyb29tKHNrYiksIDAsIEdGUF9BVE9NSUMpKVxubmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG8uYy02MzMtXHRcdHJldHVybiAtRU5PTUVNO1xuLS1cbm5ldC9uZXRmaWx0ZXIveHRfVENQTVNTLmM9NzE9dGNwbXNzX21hbmdsZV9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X1RDUE1TUy5jLTE1NC1cdGlmIChza2JfdGFpbHJvb20oc2tiKSBcdTAwM2MgVENQT0xFTl9NU1MpIHtcbm5ldC9uZXRmaWx0ZXIveHRfVENQTVNTLmM6MTU1Olx0XHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIDAsXG5uZXQvbmV0ZmlsdGVyL3h0X1RDUE1TUy5jLTE1Ni1cdFx0XHRcdCAgICAgVENQT0xFTl9NU1MgLSBza2JfdGFpbHJvb20oc2tiKSxcbi0tXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmM9MTI4Mj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm5ldGxpbmtfdHJpbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBhbGxvY2F0aW9uKVxuLS1cbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYy0xMjk5LVxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jOjEzMDA6XHRwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgLWRlbHRhLFxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jLTEzMDEtXHRcdFx0IChhbGxvY2F0aW9uIFx1MDAyNiB+X19HRlBfRElSRUNUX1JFQ0xBSU0pIHxcbi0tXG5uZXQvdGlwYy9iZWFyZXIuYz00OTc9aW50IHRpcGNfbDJfc2VuZF9tc2coc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC90aXBjL2JlYXJlci5jLTUwNy1cdGRlbHRhID0gU0tCX0RBVEFfQUxJR04oZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiAtIHNrYl9oZWFkcm9vbShza2IpKTtcbm5ldC90aXBjL2JlYXJlci5jOjUwODpcdGlmICgoZGVsdGEgXHUwMDNlIDApIFx1MDAyNlx1MDAyNiBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgZGVsdGEsIDAsIEdGUF9BVE9NSUMpKSB7XG5uZXQvdGlwYy9iZWFyZXIuYy01MDktXHRcdGtmcmVlX3NrYihza2IpO1xuLS1cbm5ldC90aXBjL2JlYXJlci5jPTc2ND12b2lkIHRpcGNfY2xvbmVfdG9fbG9vcGJhY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpwa3RzKVxuLS1cbm5ldC90aXBjL2JlYXJlci5jLTc3NS1cdFx0ZXhwID0gU0tCX0RBVEFfQUxJR04oZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiAtIHNrYl9oZWFkcm9vbShza2IpKTtcbm5ldC90aXBjL2JlYXJlci5jOjc3NjpcdFx0aWYgKGV4cCBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgcHNrYl9leHBhbmRfaGVhZChza2IsIGV4cCwgMCwgR0ZQX0FUT01JQykpIHtcbm5ldC90aXBjL2JlYXJlci5jLTc3Ny1cdFx0XHRrZnJlZV9za2Ioc2tiKTtcbi0tXG5uZXQvdGlwYy9tc2cuYz01MzI9Ym9vbCB0aXBjX21zZ190cnlfYnVuZGxlKHN0cnVjdCBza19idWZmICp0c2tiLCBzdHJ1Y3Qgc2tfYnVmZiAqKnNrYiwgdTMyIG1zcyxcbi0tXG5uZXQvdGlwYy9tc2cuYy01NjItXHRcdHJldHVybiB0cnVlO1xubmV0L3RpcGMvbXNnLmM6NTYzOlx0aWYgKHVubGlrZWx5KHBza2JfZXhwYW5kX2hlYWQodHNrYiwgSU5UX0hfU0laRSwgbXNzIC0gdHN6IC0gSU5UX0hfU0laRSxcbm5ldC90aXBjL21zZy5jLTU2NC1cdFx0XHRcdCAgICAgIEdGUF9BVE9NSUMpKSlcbi0tXG5uZXQvdGlwYy91ZHBfbWVkaWEuYz0yMzc9c3RhdGljIGludCB0aXBjX3VkcF9zZW5kX21zZyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3RpcGMvdWRwX21lZGlhLmMtMjQ3LVx0aWYgKHNrYl9oZWFkcm9vbShza2IpIFx1MDAzYyBVRFBfTUlOX0hFQURST09NKSB7XG5uZXQvdGlwYy91ZHBfbWVkaWEuYzoyNDg6XHRcdGVyciA9IHBza2JfZXhwYW5kX2hlYWQoc2tiLCBVRFBfTUlOX0hFQURST09NLCAwLCBHRlBfQVRPTUlDKTtcbm5ldC90aXBjL3VkcF9tZWRpYS5jLTI0OS1cdFx0aWYgKGVycilcbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jPTMwPXN0YXRpYyBpbnQgeGZybV9za2JfY2hlY2tfc3BhY2Uoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTQzLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo0NDpcdHJldHVybiBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgbmhlYWQsIG50YWlsLCBHRlBfQVRPTUlDKTtcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNDUtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTM1OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipJbnZlc3RpZ2F0aW5nIGBwc2tiX2NhcnZlYCBhbmQgYHBza2JfZXh0cmFjdGAgVXNhZ2UqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgYSBoYW5kbGUgb24gd2hlcmUgdGhlc2UgZnVuY3Rpb25zLCBgcHNrYl9jYXJ2ZWAgYW5kIGBwc2tiX2V4dHJhY3RgLCBhcmUgYWN0dWFsbHkgYmVpbmcgdXRpbGl6ZWQuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiB0aGVpciBuYW1lIGFuZCBsaWtlbHkgcmVsYXRpb24gdG8gcGFja2V0IGJ1ZmZlciBtYW5pcHVsYXRpb24sIGlzIHRvIHplcm8gaW4gb24gdGhlIG5ldHdvcmsgY29yZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGV4YW1pbmluZyBgbmV0L2NvcmUvc2tidWZmLmNgLiBUaGF0JiMzOTtzIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4gZGlnZ2luZywgYXMgaXQmIzM5O3MgdGhlIGhlYXJ0IG9mIGhvdyB0aGVzZSBgc2tfYnVmZmAgc3RydWN0dXJlcyBhcmUgY3JlYXRlZCwgbWFuYWdlZCwgYW5kIG1hbmlwdWxhdGVkLiBJdCYjMzk7cyBhIGtleSBzcG90IHRvIGV4cGVjdCB0byBmaW5kIHRoZW0gaW52b2x2ZWQgaW4gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBlcmhhcHMsIG9wdGltaXphdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwc2tiX2NhcnZlfHBza2JfZXh0cmFjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jPTY4MjY9RVhQT1JUX1NZTUJPTChhbGxvY19za2Jfd2l0aF9mcmFncyk7XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNjgyOC0vKiBjYXJ2ZSBvdXQgdGhlIGZpcnN0IG9mZiBieXRlcyBmcm9tIHNrYiB3aGVuIG9mZiBcdTAwM2MgaGVhZGxlbiAqL1xubmV0L2NvcmUvc2tidWZmLmM6NjgyOTpzdGF0aWMgaW50IHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1MzIgb2ZmLFxubmV0L2NvcmUvc2tidWZmLmMtNjgzMC1cdFx0XHRcdCAgICBjb25zdCBpbnQgaGVhZGxlbiwgZ2ZwX3QgZ2ZwX21hc2spXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNjg5MS1cbm5ldC9jb3JlL3NrYnVmZi5jOjY4OTI6c3RhdGljIGludCBwc2tiX2NhcnZlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHUzMiBvZmYsIGdmcF90IGdmcCk7XG5uZXQvY29yZS9za2J1ZmYuYy02ODkzLVxubmV0L2NvcmUvc2tidWZmLmMtNjg5NC0vKiBjYXJ2ZSBvdXQgdGhlIGZpcnN0IGVhdCBieXRlcyBmcm9tIHNrYiYjMzk7cyBmcmFnX2xpc3QuIE1heSByZWN1cnNlIGludG9cbm5ldC9jb3JlL3NrYnVmZi5jOjY4OTU6ICogcHNrYl9jYXJ2ZSgpXG5uZXQvY29yZS9za2J1ZmYuYy02ODk2LSAqL1xubmV0L2NvcmUvc2tidWZmLmM6Njg5NzpzdGF0aWMgaW50IHBza2JfY2FydmVfZnJhZ19saXN0KHN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKnNoaW5mbywgaW50IGVhdCxcbm5ldC9jb3JlL3NrYnVmZi5jLTY4OTgtXHRcdFx0XHRnZnBfdCBnZnBfbWFzaylcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy02OTI1LVx0XHRcdH1cbm5ldC9jb3JlL3NrYnVmZi5jOjY5MjY6XHRcdFx0aWYgKHBza2JfY2FydmUobGlzdCwgZWF0LCBnZnBfbWFzaykgXHUwMDNjIDApIHtcbm5ldC9jb3JlL3NrYnVmZi5jLTY5MjctXHRcdFx0XHRrZnJlZV9za2IoY2xvbmUpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTY5NDktICovXG5uZXQvY29yZS9za2J1ZmYuYzo2OTUwOnN0YXRpYyBpbnQgcHNrYl9jYXJ2ZV9pbnNpZGVfbm9ubGluZWFyKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHUzMiBvZmYsXG5uZXQvY29yZS9za2J1ZmYuYy02OTUxLVx0XHRcdFx0ICAgICAgIGludCBwb3MsIGdmcF90IGdmcF9tYXNrKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTcwMDYtXHQvKiBzcGxpdCBsaW5lIGlzIGluIGZyYWcgbGlzdCAqL1xubmV0L2NvcmUvc2tidWZmLmM6NzAwNzpcdGlmIChrID09IDAgXHUwMDI2XHUwMDI2IHBza2JfY2FydmVfZnJhZ19saXN0KHNoaW5mbywgb2ZmIC0gcG9zLCBnZnBfbWFzaykpIHtcbm5ldC9jb3JlL3NrYnVmZi5jLTcwMDgtXHRcdC8qIHNrYl9mcmFnX3VucmVmKCkgaXMgbm90IG5lZWRlZCBoZXJlIGFzIHNoaW5mby1cdTAwM2Vucl9mcmFncyA9IDAuICovXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNzAzMy0vKiByZW1vdmUgbGVuIGJ5dGVzIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgc2tiICovXG5uZXQvY29yZS9za2J1ZmYuYzo3MDM0OnN0YXRpYyBpbnQgcHNrYl9jYXJ2ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1MzIgbGVuLCBnZnBfdCBnZnApXG5uZXQvY29yZS9za2J1ZmYuYy03MDM1LXtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy03MDM4LVx0aWYgKGxlbiBcdTAwM2MgaGVhZGxlbilcbm5ldC9jb3JlL3NrYnVmZi5jOjcwMzk6XHRcdHJldHVybiBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXIoc2tiLCBsZW4sIGhlYWRsZW4sIGdmcCk7XG5uZXQvY29yZS9za2J1ZmYuYy03MDQwLVx0ZWxzZVxubmV0L2NvcmUvc2tidWZmLmM6NzA0MTpcdFx0cmV0dXJuIHBza2JfY2FydmVfaW5zaWRlX25vbmxpbmVhcihza2IsIGxlbiwgaGVhZGxlbiwgZ2ZwKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTcwNDItfVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTcwNDYtICovXG5uZXQvY29yZS9za2J1ZmYuYzo3MDQ3OnN0cnVjdCBza19idWZmICpwc2tiX2V4dHJhY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZixcbm5ldC9jb3JlL3NrYnVmZi5jLTcwNDgtXHRcdFx0ICAgICBpbnQgdG9fY29weSwgZ2ZwX3QgZ2ZwKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTcwNTQtXG5uZXQvY29yZS9za2J1ZmYuYzo3MDU1Olx0aWYgKHBza2JfY2FydmUoY2xvbmUsIG9mZiwgZ2ZwKSBcdTAwM2MgMCB8fFxubmV0L2NvcmUvc2tidWZmLmMtNzA1Ni1cdCAgICBwc2tiX3RyaW0oY2xvbmUsIHRvX2NvcHkpKSB7XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNzA2MS19XG5uZXQvY29yZS9za2J1ZmYuYzo3MDYyOkVYUE9SVF9TWU1CT0wocHNrYl9leHRyYWN0KTtcbm5ldC9jb3JlL3NrYnVmZi5jLTcwNjMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDExOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNzE1CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHVuZGVyc3RhbmRpbmcgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIGBwc2tiX2V4dHJhY3RgOgoKKipUaGlua2luZyBUaHJvdWdoIGBwc2tiX2V4dHJhY3RgJiMzOTtzIFVzZXMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBwcmVzZW50ZWQgd2l0aCBgcHNrYl9leHRyYWN0YC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcyBpczogKldoYXQgZXhhY3RseSBpcyB0aGlzIHRvb2wgb3IgZnVuY3Rpb24gc3VwcG9zZWQgdG8gYmUgZG9pbmc/KiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29yZSBwdXJwb3NlLiBJcyBpdCBmb3IgcGFyc2luZyBkYXRhPyBJcyBpdCBmb3IgZXh0cmFjdGluZyBzcGVjaWZpYyBpbmZvcm1hdGlvbiBmcm9tIGEgcGFydGljdWxhciBmb3JtYXQ/IElzIGl0IHBhcnQgb2YgYSBsYXJnZXIgc3lzdGVtIG9yIHdvcmtmbG93PyBUaGUgbmFtZSBpdHNlbGYgZ2l2ZXMgYSB2YWd1ZSBoaW50LCBidXQgSSBuZWVkIHNwZWNpZmljcy4KCk15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIGdlbmVyYXRpbmcgcXVlc3Rpb25zOgoKKiAgIFdoYXQga2luZHMgb2YgaW5wdXRzIGRvZXMgaXQgYWNjZXB0PyBJcyBpdCBmaWxlLWJhc2VkLCBvciBkb2VzIGl0IHRha2UgZGF0YSBzdHJlYW1zPyBEb2VzIGl0IHdvcmsgd2l0aCBkaWZmZXJlbnQgZmlsZSBmb3JtYXRzIChlLmcuLCB0ZXh0LCBKU09OLCBYTUwsIGJpbmFyeSk/CiogICBXaGF0IG91dHB1dHMgZG9lcyBpdCBwcm9kdWNlPyBEb2VzIGl0IGdlbmVyYXRlIG5ldyBmaWxlcywgcHJpbnQgdG8gdGhlIGNvbnNvbGUsIG9yIHJldHVybiBzdHJ1Y3R1cmVkIGRhdGEgdG8gYW5vdGhlciBwcm9ncmFtPwoqICAgV2hhdCBpcyBpdHMgaW50ZW5kZWQgdXNlIGNhc2U/IElzIGl0IGEgZ2VuZXJhbC1wdXJwb3NlIGV4dHJhY3RvciBvciBkZXNpZ25lZCBmb3IgYSBzcGVjaWZpYyBkb21haW4gKGUuZy4sIGJpb2luZm9ybWF0aWNzLCBuZXR3b3JrIGFuYWx5c2lzLCBsb2cgcHJvY2Vzc2luZyk/CiogICBIb3cgaXMgaXQgaW50ZWdyYXRlZCBpbnRvIGV4aXN0aW5nIHByb2Nlc3Nlcz8gSXMgaXQgYSBzdGFuZGFsb25lIHRvb2wgb3IgcGFydCBvZiBhIGxhcmdlciBwaXBlbGluZT8KCkkmIzM5O2xsIGJlIHRoaW5raW5nIGluIHRlcm1zIG9mIGhvdyBJIGNhbiB1c2UgdGhpcyBpbiBteSBvd24gd29yayAtIHdoYXQgcHJvYmxlbXMgaXQgY2FuIHNvbHZlLiBBcmUgdGhlcmUgb3Bwb3J0dW5pdGllcyB0byB1c2UgdGhlIG91dHB1dCBvZiBgcHNrYl9leHRyYWN0YCBpbiBteSBjdXJyZW50IHByb2plY3RzPyBDYW4gSSBpbnRlZ3JhdGUgaXQgYXMgYSBjb21wb25lbnQgdG8gbWFrZSBteSB3b3JrIG1vcmUgZWZmaWNpZW50LCBvciBlbmhhbmNlIGl0PwoKTmV4dCwgSSYjMzk7bGwgZ28gYmV5b25kIHRoZSBxdWVzdGlvbnMgLSBJIHdpbGwgYmVnaW4gdG8gdmlzdWFsaXplIHRoZSBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIHRoaW5rIGFib3V0IHRoZSBjb2RlJiMzOTtzIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIGFuZCBsb29rIGZvciBkb2N1bWVudGF0aW9uLiBJIHdpbGwgYW5hbHl6ZSBpdHMgYWxnb3JpdGhtcyB0byBrbm93IHRoZSBpbnRlcm5hbCBtZWNoYW5pc20uIEkgaGF2ZSB0byBsb29rIGZvciBleGFtcGxlIHVzYWdlIGluIG9yZGVyIHRvIHNlZSBob3cgaXQgaXMgdXNlZCBpbiBhIHJlYWwgc2NlbmFyaW8uIElmIEkgaGF2ZSB0aGUgc291cmNlIGNvZGUsIEkgd2lsbCB1c2UgdGhhdCB0byBmb3JtIG15IHVuZGVyc3RhbmRpbmcuIEkgaGF2ZSB0byBzZWUgaG93IGl0IGNhbiBiZSB1c2VkIGZvciBteSBhcmVhIG9mIGV4cGVydGlzZS4KCkluIGVzc2VuY2UsIEkmIzM5O20gdHJ5aW5nIHRvIHF1aWNrbHkgYnVpbGQgYSBtZW50YWwgbW9kZWwgb2YgYHBza2JfZXh0cmFjdGAgYW5kIGl0cyByb2xlIHdpdGhpbiBhIGJyb2FkZXIgY29udGV4dC4gVGhhdCB3YXksIEkgY2FuIGRldGVybWluZSBpdHMgcmVsZXZhbmNlIGFuZCBwb3RlbnRpYWwgdXNlZnVsbmVzcyB0byBtZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTE6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHNrYl9leHRyYWN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYz03MDM0PXN0YXRpYyBpbnQgcHNrYl9jYXJ2ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1MzIgbGVuLCBnZnBfdCBnZnApXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNzA0Ni0gKi9cbm5ldC9jb3JlL3NrYnVmZi5jOjcwNDc6c3RydWN0IHNrX2J1ZmYgKnBza2JfZXh0cmFjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2ZmLFxubmV0L2NvcmUvc2tidWZmLmMtNzA0OC1cdFx0XHQgICAgIGludCB0b19jb3B5LCBnZnBfdCBnZnApXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNzA2MS19XG5uZXQvY29yZS9za2J1ZmYuYzo3MDYyOkVYUE9SVF9TWU1CT0wocHNrYl9leHRyYWN0KTtcbm5ldC9jb3JlL3NrYnVmZi5jLTcwNjMtXG4tLVxubmV0L3Jkcy90Y3BfcmVjdi5jPTE1NT1zdGF0aWMgaW50IHJkc190Y3BfZGF0YV9yZWN2KHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9yZHMvdGNwX3JlY3YuYy0yMTgtXG5uZXQvcmRzL3RjcF9yZWN2LmM6MjE5Olx0XHRcdGNsb25lID0gcHNrYl9leHRyYWN0KHNrYiwgb2Zmc2V0LCB0b19jb3B5LCBhcmctXHUwMDNlZ2ZwKTtcbm5ldC9yZHMvdGNwX3JlY3YuYy0yMjAtXHRcdFx0aWYgKCFjbG9uZSkge1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz01MzM9aXB0ZnNfcHNrYl9hZGRfZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKnRwbCwgc3RydWN0IGlwdGZzX3NrYl9mcmFnX3dhbGsgKndhbGssXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTU2MS0vKipcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo1NjI6ICogaXB0ZnNfcHNrYl9leHRyYWN0X3NlcSgpIC0gQ3JlYXRlIGFuZCBsb2FkIGRhdGEgaW50byBhIG5ldyBza19idWZmLlxubmV0L3hmcm0veGZybV9pcHRmcy5jLTU2My0gKiBAc2tibGVuOiB0aGUgdG90YWwgZGF0YSBzaXplIGZvciBgc2tiYC5cbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9NTc3PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NTc4OmlwdGZzX3Bza2JfZXh0cmFjdF9zZXEodTMyIHNrYmxlbiwgc3RydWN0IHNrYl9zZXFfc3RhdGUgKnN0LCB1MzIgb2ZmLCBpbnQgbGVuKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTU3OS17XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTk0Mz1zdGF0aWMgYm9vbCBfX2lucHV0X3Byb2Nlc3NfcGF5bG9hZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgdTMyIGRhdGEsXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTExMzEtXHRcdFx0XHRcdFx0XHQgc2tic2VxLCBpcGhsZW4pKSkge1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjExMzI6XHRcdFx0XHRza2IgPSBpcHRmc19wc2tiX2V4dHJhY3Rfc2VxKGlwbGVuLCBza2JzZXEsIGRhdGEsIGNhcHR1cmVsZW4pO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTExMzMtXHRcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzkyMAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgbmV0d29ya2luZyBjb3JlIHNpdHVhdGlvbi4KCioqTmV0d29yayBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gemVybyBpbiBvbiB3aGF0IEtjb25maWcgb3B0aW9ucyBzcGVjaWZpY2FsbHkgcGVydGFpbiB0byB0aGUgbmV0d29ya2luZyBjb3JlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW52ZXN0aWdhdGUgZnVuY3Rpb25zIGxpa2UgYHBza2JfZXhwYW5kX2hlYWRgIGFuZCB0aGUgZmlsZSBgc2tidWZmLmNgLiBJIGJlbGlldmUgdGhlc2UgYXJlIGZ1bmRhbWVudGFsIHBpZWNlcywgc3Ryb25nbHkgc3VnZ2VzdGluZyBhIGNvbm5lY3Rpb24gdG8gdGhlIHByaW1hcnkgYENPTkZJR19ORVRgIG9wdGlvbi4gVG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhlc2Ugc3VzcGljaW9ucy4gSSBzaG91bGQgZXhhbWluZSB0aGUgYG5ldC9jb3JlL01ha2VmaWxlYCBhbmQgYG5ldC9LY29uZmlnYCBmaWxlcyBkaXJlY3RseSB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbmZpZ3VyYXRpb25zIGludm9sdmVkLiBUaGlzIGxldmVsIG9mIGRldGFpbCBpcyBjcnVjaWFsIGZvciBhbnkgbW9kaWZpY2F0aW9ucyBvciBkZWVwZXIgYW5hbHlzaXMgd2l0aGluIHRoZSBuZXR3b3JraW5nIHN0YWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza2J1ZmYubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGUtNS1cbm5ldC9jb3JlL01ha2VmaWxlOjY6b2JqLXkgOj0gc29jay5vIHNrYnVmZi5vIGRhdGFncmFtLm8gc3RyZWFtLm8gc2NtLm8gXFxcbm5ldC9jb3JlL01ha2VmaWxlLTctXHQgZ2VuX3N0YXRzLm8gZ2VuX2VzdGltYXRvci5vIG5ldF9uYW1lc3BhY2UubyBzZWN1cmVfc2VxLm8gXFxcbi0tXG5uZXQvY29yZS9mbG93X2Rpc3NlY3Rvci5jPTEwMzM9c3RhdGljIGJvb2wgaXNfcHBwb2Vfc2VzX2hkcl92YWxpZChjb25zdCBzdHJ1Y3QgcHBwb2VfaGRyICpoZHIpXG4tLVxubmV0L2NvcmUvZmxvd19kaXNzZWN0b3IuYy0xMDUxLSAqIFRoZSBmdW5jdGlvbiB3aWxsIHRyeSB0byByZXRyaWV2ZSBpbmRpdmlkdWFsIGtleXMgaW50byB0YXJnZXQgc3BlY2lmaWVkXG5uZXQvY29yZS9mbG93X2Rpc3NlY3Rvci5jOjEwNTI6ICogYnkgZmxvd19kaXNzZWN0b3IgZnJvbSBlaXRoZXIgdGhlIHNrYnVmZiBvciBhIHJhdyBidWZmZXIgc3BlY2lmaWVkIGJ5IHRoZVxubmV0L2NvcmUvZmxvd19kaXNzZWN0b3IuYy0xMDUzLSAqIHJlc3QgcGFyYW1ldGVycy5cbi0tXG5uZXQvaXB2Ni9jYWxpcHNvLmM9MTI0Nj1zdGF0aWMgdm9pZCBjYWxpcHNvX3JlcV9kZWxhdHRyKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbi0tXG5uZXQvaXB2Ni9jYWxpcHNvLmMtMTI3OC0vKipcbm5ldC9pcHY2L2NhbGlwc28uYzoxMjc5OiAqIGNhbGlwc29fc2tidWZmX29wdHB0ciAtIEZpbmQgdGhlIENBTElQU08gb3B0aW9uIGluIHRoZSBwYWNrZXRcbm5ldC9pcHY2L2NhbGlwc28uYy0xMjgwLSAqIEBza2I6IHRoZSBwYWNrZXRcbi0tXG5uZXQvaXB2Ni9jYWxpcHNvLmMtMTI4Ni0gKi9cbm5ldC9pcHY2L2NhbGlwc28uYzoxMjg3OnN0YXRpYyB1bnNpZ25lZCBjaGFyICpjYWxpcHNvX3NrYnVmZl9vcHRwdHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY2L2NhbGlwc28uYy0xMjg4LXtcbi0tXG5uZXQvaXB2Ni9jYWxpcHNvLmM9MTM4OT1zdGF0aWMgaW50IGNhbGlwc29fc2tidWZmX2RlbGF0dHIoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9jYWxpcHNvLmMtMTM5NS1cbm5ldC9pcHY2L2NhbGlwc28uYzoxMzk2Olx0aWYgKCFjYWxpcHNvX3NrYnVmZl9vcHRwdHIoc2tiKSlcbm5ldC9pcHY2L2NhbGlwc28uYy0xMzk3LVx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvaXB2Ni9jYWxpcHNvLmM9MTQzNj1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldGxibF9jYWxpcHNvX29wcyBvcHMgPSB7XG4tLVxubmV0L2lwdjYvY2FsaXBzby5jLTE0NDgtXHQub3B0X2dldGF0dHIgICAgICA9IGNhbGlwc29fb3B0X2dldGF0dHIsXG5uZXQvaXB2Ni9jYWxpcHNvLmM6MTQ0OTpcdC5za2J1ZmZfb3B0cHRyICAgID0gY2FsaXBzb19za2J1ZmZfb3B0cHRyLFxubmV0L2lwdjYvY2FsaXBzby5jLTE0NTAtXHQuc2tidWZmX3NldGF0dHIgICA9IGNhbGlwc29fc2tidWZmX3NldGF0dHIsXG4tLVxubmV0L25ldGxhYmVsL25ldGxhYmVsX2NhbGlwc28uYz02MjY9dW5zaWduZWQgY2hhciAqY2FsaXBzb19vcHRwdHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbmV0bGFiZWwvbmV0bGFiZWxfY2FsaXBzby5jLTYzMS1cdGlmIChvcHMpXG5uZXQvbmV0bGFiZWwvbmV0bGFiZWxfY2FsaXBzby5jOjYzMjpcdFx0cmV0X3ZhbCA9IG9wcy1cdTAwM2Vza2J1ZmZfb3B0cHRyKHNrYik7XG5uZXQvbmV0bGFiZWwvbmV0bGFiZWxfY2FsaXBzby5jLTYzMy1cdHJldHVybiByZXRfdmFsO1xuLS1cbm5ldC9yeHJwYy9NYWtlZmlsZT04PXJ4cnBjLXkgOj0gXFxcbi0tXG5uZXQvcnhycGMvTWFrZWZpbGUtMzUtXHRzZXJ2ZXJfa2V5Lm8gXFxcbm5ldC9yeHJwYy9NYWtlZmlsZTozNjpcdHNrYnVmZi5vIFxcXG5uZXQvcnhycGMvTWFrZWZpbGUtMzctXHR0eGJ1Zi5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDExOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0OTg3CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIE5ldHdvcmsgQ29yZSBCdWlsZCBQcm9jZXNzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYG5ldC9jb3JlL01ha2VmaWxlYCBhbmQgaXQmIzM5O3MgY2xlYXIgdGhhdCBgc2tidWZmLm9gIGdldHMgYnVpbHQgYmFzZWQgb24gdGhlIGBDT05GSUdfTkVUYCBvcHRpb24uIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LCBhIHNvbGlkIGZvdW5kYXRpb25hbCBkZXBlbmRlbmN5LiBOb3csIHRvIGdldCBhIGJpZ2dlciBwaWN0dXJlIG9mIGhvdyB0aGlzIGVudGlyZSBuZXR3b3JraW5nIHN1YnN5c3RlbSBpcyBwdXQgdG9nZXRoZXIsIEkgbmVlZCB0byBjaGVjayBvdXQgdGhlIHBhcmVudCBgbmV0L01ha2VmaWxlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBDT05GSUdfTkVUYCBpdHNlbGYgaXMgZGVmaW5lZCBhbmQgdXNlZCwgYW5kIGhvdyBldmVyeXRoaW5nIGluIHRoZSBgbmV0YCBkaXJlY3RvcnkgaXMgb3JjaGVzdHJhdGVkIGZyb20gYSBidWlsZCBwZXJzcGVjdGl2ZS4gR290dGEgdHJhY2UgdGhpcyB0aHJvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IG5ldHdvcmtpbmcuXG4gICA0Olx0I1xuICAgNTpcdCMgMiBTZXAgMjAwMCwgQ2hyaXN0b3BoIEhlbGx3aWcgXHUwMDNjaGNoQGluZnJhZGVhZC5vcmdcdTAwM2VcbiAgIDY6XHQjIFJld3JpdHRlbiB0byB1c2UgbGlzdHMgaW5zdGVhZCBvZiBpZi1zdGF0ZW1lbnRzLlxuICAgNzpcdCNcbiAgIDg6XHRcbiAgIDk6XHRvYmoteVx0XHRcdFx0Oj0gZGV2cmVzLm8gc29ja2V0Lm8gY29yZS9cbiAgMTA6XHRcbiAgMTE6XHRvYmotJChDT05GSUdfQ09NUEFUKVx0XHQmIzQzOz0gY29tcGF0Lm9cbiAgMTI6XHRcbiAgMTM6XHQjIExMQyBoYXMgdG8gYmUgbGlua2VkIGJlZm9yZSB0aGUgZmlsZXMgaW4gbmV0LzgwMi9cbiAgMTQ6XHRvYmotJChDT05GSUdfTExDKVx0XHQmIzQzOz0gbGxjL1xuICAxNTpcdG9iai15XHRcdFx0XHQmIzQzOz0gZXRoZXJuZXQvIDgwMi8gc2NoZWQvIG5ldGxpbmsvIGJwZi8gZXRodG9vbC9cbiAgMTY6XHRvYmotJChDT05GSUdfTkVURklMVEVSKVx0XHQmIzQzOz0gbmV0ZmlsdGVyL1xuICAxNzpcdG9iai0kKENPTkZJR19JTkVUKVx0XHQmIzQzOz0gaXB2NC9cbiAgMTg6XHRvYmotJChDT05GSUdfVExTKVx0XHQmIzQzOz0gdGxzL1xuICAxOTpcdG9iai0kKENPTkZJR19YRlJNKVx0XHQmIzQzOz0geGZybS9cbiAgMjA6XHRvYmotJChDT05GSUdfVU5JWClcdFx0JiM0Mzs9IHVuaXgvXG4gIDIxOlx0b2JqLSQoQ09ORklHX0lORVRfUFNQKVx0XHQmIzQzOz0gcHNwL1xuICAyMjpcdG9iai15XHRcdFx0XHQmIzQzOz0gaXB2Ni9cbiAgMjM6XHRvYmotJChDT05GSUdfUEFDS0VUKVx0XHQmIzQzOz0gcGFja2V0L1xuICAyNDpcdG9iai0kKENPTkZJR19ORVRfS0VZKVx0XHQmIzQzOz0ga2V5L1xuICAyNTpcdG9iai0kKENPTkZJR19CUklER0UpXHRcdCYjNDM7PSBicmlkZ2UvXG4gIDI2Olx0b2JqLSQoQ09ORklHX05FVF9ERVZMSU5LKVx0JiM0Mzs9IGRldmxpbmsvXG4gIDI3Olx0b2JqLXlcdFx0XHRcdCYjNDM7PSBkc2EvXG4gIDI4Olx0b2JqLSQoQ09ORklHX1gyNSlcdFx0JiM0Mzs9IHgyNS9cbiAgMjk6XHRvYmotJChDT05GSUdfTEFQQilcdFx0JiM0Mzs9IGxhcGIvXG4gIDMwOlx0b2JqLSQoQ09ORklHX0NBTilcdFx0JiM0Mzs9IGNhbi9cbiAgMzE6XHRvYmotJChDT05GSUdfQlQpXHRcdCYjNDM7PSBibHVldG9vdGgvXG4gIDMyOlx0b2JqLSQoQ09ORklHX1NVTlJQQylcdFx0JiM0Mzs9IHN1bnJwYy9cbiAgMzM6XHRvYmotJChDT05GSUdfQUZfUlhSUEMpXHRcdCYjNDM7PSByeHJwYy9cbiAgMzQ6XHRvYmotJChDT05GSUdfQUZfS0NNKVx0XHQmIzQzOz0ga2NtL1xuICAzNTpcdG9iai0kKENPTkZJR19TVFJFQU1fUEFSU0VSKVx0JiM0Mzs9IHN0cnBhcnNlci9cbiAgMzY6XHRvYmotJChDT05GSUdfQVRNKVx0XHQmIzQzOz0gYXRtL1xuICAzNzpcdG9iai0kKENPTkZJR19MMlRQKVx0XHQmIzQzOz0gbDJ0cC9cbiAgMzg6XHRvYmotJChDT05GSUdfUEhPTkVUKVx0XHQmIzQzOz0gcGhvbmV0L1xuICAzOTpcdGlmbmVxICgkKENPTkZJR19WTEFOXzgwMjFRKSwpXG4gIDQwOlx0b2JqLXlcdFx0XHRcdCYjNDM7PSA4MDIxcS9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTE6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU4ODcKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHRob3VnaCBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgdGhlIERlcGVuZGVuY3kgb2Ygc2tidWZmLmMgQ29tcGlsYXRpb24qKgoKT2theSwgc28gYG5ldC9jb3JlL3NrYnVmZi5jYCBpcyBiZWluZyBjb21waWxlZCwgd2hpY2ggaW1wbGllcyBgQ09ORklHX05FVGAgaXMgZW5hYmxlZCwgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoaXMuIFRoZSBsb2dpY2FsIG5leHQgc3RlcCBpcyB0byB0cmFjZSB0aGF0IGRlcGVuZGVuY3kgYmFjayB0byBpdHMgc291cmNlLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBgbmV0L0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbSBhcmUgZGVmaW5lZC4gSSYjMzk7bSBhc3N1bWluZyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIHJlbGV2YW50IGBjb25maWdgIHN0YXRlbWVudCwgcHJvYmFibHkgc29tZXRoaW5nIGxpa2UgYGNvbmZpZyBORVRgIG9yIHNpbWlsYXIgdGhhdCBlbmFibGVzIHRoZSBlbnRpcmUgbmV0d29ya2luZyBzdGFjay4gVGhlbiBJIGNhbiBjb25maXJtIGlmIHRoZXJlJiMzOTtzIGEgZGlyZWN0IG9yIGluZGlyZWN0IHJlbGF0aW9uc2hpcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTE6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVudWNvbmZpZyBORVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC85cC9LY29uZmlnLTUtXG5uZXQvOXAvS2NvbmZpZzo2Om1lbnVjb25maWcgTkVUXzlQXG5uZXQvOXAvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7UGxhbiA5IFJlc291cmNlIFNoYXJpbmcgU3VwcG9ydCAoOVAyMDAwKVwmIzM0O1xuLS1cbm5ldC9LY29uZmlnLTUtXG5uZXQvS2NvbmZpZzo2Om1lbnVjb25maWcgTkVUXG5uZXQvS2NvbmZpZy03LVx0Ym9vbCBcJiMzNDtOZXR3b3JraW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvS2NvbmZpZz0xNTQ9Y29uZmlnIE5FVFdPUktfUEhZX1RJTUVTVEFNUElOR1xuLS1cbm5ldC9LY29uZmlnLTE2NC1cbm5ldC9LY29uZmlnOjE2NTptZW51Y29uZmlnIE5FVEZJTFRFUlxubmV0L0tjb25maWctMTY2LVx0Ym9vbCBcJiMzNDtOZXR3b3JrIHBhY2tldCBmaWx0ZXJpbmcgZnJhbWV3b3JrIChOZXRmaWx0ZXIpXCYjMzQ7XG4tLVxubmV0L2RzYS9LY29uZmlnLTItXG5uZXQvZHNhL0tjb25maWc6MzptZW51Y29uZmlnIE5FVF9EU0Fcbm5ldC9kc2EvS2NvbmZpZy00LVx0dHJpc3RhdGUgXCYjMzQ7RGlzdHJpYnV0ZWQgU3dpdGNoIEFyY2hpdGVjdHVyZVwmIzM0O1xuLS1cbm5ldC9pZmUvS2NvbmZpZy01LVxubmV0L2lmZS9LY29uZmlnOjY6bWVudWNvbmZpZyBORVRfSUZFXG5uZXQvaWZlL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O0ludGVyLUZFIGJhc2VkIG9uIElFVEYgRm9yQ0VTIEludGVyRkUgTEZCXCYjMzQ7XG4tLVxubmV0L25zaC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvbnNoL0tjb25maWc6MjptZW51Y29uZmlnIE5FVF9OU0hcbm5ldC9uc2gvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7TmV0d29yayBTZXJ2aWNlIEhlYWRlciAoTlNIKSBwcm90b2NvbFwmIzM0O1xuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTUtXG5uZXQvc2NoZWQvS2NvbmZpZzo2Om1lbnVjb25maWcgTkVUX1NDSEVEXG5uZXQvc2NoZWQvS2NvbmZpZy03LVx0Ym9vbCBcJiMzNDtRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZz00MTg9Y29uZmlnIE5FVF9TQ0hfRFVBTFBJMlxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTQyOS1cbm5ldC9zY2hlZC9LY29uZmlnOjQzMDptZW51Y29uZmlnIE5FVF9TQ0hfREVGQVVMVFxubmV0L3NjaGVkL0tjb25maWctNDMxLVx0Ym9vbCBcJiMzNDtBbGxvdyBvdmVycmlkZSBkZWZhdWx0IHF1ZXVlIGRpc2NpcGxpbmVcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTE6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY1NzgKCQkJCQkJCW91dHB1dDogMTQ4CgkJCQkJCQl0aG91Z2h0czogNTg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFNLQiBNZW1vcnkgTWFuYWdlbWVudCBDaGFuZ2VzKioKCk9rYXksIGxldCYjMzk7cyBuYWlsIGRvd24gd2hhdCB3ZSYjMzk7cmUgZ29pbmcgdG8gZm9jdXMgb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBpbXBvcnRhbnQgc3ltYm9scyBmb3IgZnV6emluZywgYW5kIGJhc2VkIG9uIHRoZSBwYXRjaCwgaXQgc2VlbXMgbGlrZSBgcHNrYl9leHBhbmRfaGVhZGAgYW5kIGBwc2tiX2V4dHJhY3RgIGFyZSBrZXkuIEkgc2VlIHRoZXkmIzM5O3JlIGJvdGggZXhwb3J0ZWQgc3ltYm9scywgYW5kIGBwc2tiX2V4dHJhY3RgIGluZGlyZWN0bHkgY2FsbHMgYHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcmAuCgpXYWl0IGEgbWludXRlLCBhcmUgdGhvc2UgYHNrYl9kYXRhcmVmX2JpYXNgIGFuZCBgc2tiX2RhdGFfaXNfc2hhcmVkYCBmdW5jdGlvbnMgaW5saW5lZD8gWWVzLCB0aGV5JiMzOTtyZSBkZWZpbmVkIGFzIGBzdGF0aWMgaW5saW5lYCBpbiBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAsIHNvIHRoZXkgYXJlLiBBbmQgYHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcmAgaXMgYSBzdGF0aWMgZnVuY3Rpb24gaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgYWxzbyByZW1lbWJlciB0aGF0IGBwc2tiX2V4cGFuZF9oZWFkYCBpcyBhbiBBUEkgZW50cnlwb2ludC4KCk5vdywgbGV0IG1lIG1ha2Ugc3VyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IHVzZWQuIEEgcXVpY2sgY2hlY2sgc2hvd3MgdGhhdCBgcHNrYl9leHBhbmRfaGVhZGAgaXMgcHJldHR5IHViaXF1aXRvdXMsIGJlaW5nIHVzZWQgaW4gZnVuY3Rpb25zIGxpa2UgYHNrYl91bmNsb25lYCwgYHNrYl9yZWFsbG9jX2hlYWRyb29tYCwgYHNrYl9jb3dfZGF0YWAsIGFuZCBgX19fcHNrYl90cmltYC4gVGhhdCBjb25maXJtcyBteSBpbml0aWFsIGh1bmNoLiBTbywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGUgY29yZSBgRm9jdXNTeW1ib2xzYCBhcmUgYFsmIzM0O3Bza2JfZXhwYW5kX2hlYWQmIzM0OywgJiMzNDtwc2tiX2V4dHJhY3QmIzM0O11gLgoKUmVnYXJkaW5nIGBFbmFibGVDb25maWdzYCwgdGhlIHJlbGV2YW50IGZlYXR1cmUgc2V0IGlzIGRlZmluaXRlbHkgYE5FVGAuCgpPa2F5LCBsZXQmIzM5O3Mgc3VtbWFyaXplIHRoZSBgc2V0LXJlc3VsdHNgIHBhcmFtZXRlcnMuIFdlJiMzOTtyZSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZ2AgdG8gYHRydWVgIOKAkyBpdOKAmXMgYSBjcml0aWNhbCBjaGFuZ2UuIFRoZSBgUmVhc29uaW5nYCB3aWxsIGhpZ2hsaWdodCB0aGUgZmFjdCB0aGF0IHRoZSBwYXRjaCByZXBsYWNlcyBgc2tiX2Nsb25lZChza2IpYCB3aXRoIGBza2JfZGF0YV9pc19zaGFyZWQoc2tiKWAgaW4gYHBza2JfZXhwYW5kX2hlYWRgIGFuZCBgcHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyYCBhbmQgaW50cm9kdWNlcyBoZWxwZXIgZnVuY3Rpb25zIGBza2JfZGF0YXJlZl9iaWFzYCBhbmQgYHNrYl9kYXRhX2lzX3NoYXJlZGAgaW4gYGluY2x1ZGUvbGludXgvc2tidWZmLmhgIGZvciBoYW5kbGluZyBgc2tiLSZndDtub2hkcmAuIFRoaXMgY29yZSBsb2dpYyBzaGlmdCBpbXBhY3RzIFNLQiBtZW1vcnkgbWFuYWdlbWVudCwgY2xvbmluZywgYW5kIHVuc2hhcmluZyB0aHJvdWdob3V0IHRoZSBuZXR3b3JraW5nIHN0YWNrLiBUaGVyZWZvcmUsIHRoZSBjaGFuZ2UgaXMgcmVhY2hhYmxlLCBzaWduaWZpY2FudCwgYW5kIGRlc2VydmVzIGZvY3VzZWQgZnV6emluZy4gRmluYWxseSwgdGhlIGBGb2N1c1N5bWJvbHNgIHdpbGwgYmUgYFsmIzM0O3Bza2JfZXhwYW5kX2hlYWQmIzM0OywgJiMzNDtwc2tiX2V4dHJhY3QmIzM0O11gLCBhbmQgdGhlIGBFbmFibGVDb25maWdzYCB3aWxsIGJlIGBbJiMzNDtORVQmIzM0O11gLgoKTGV0JiMzOTtzIGRvIHRoaXMuIEkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cHNrYl9leHBhbmRfaGVhZCYjMzQ7LAogICAgJiMzNDtwc2tiX2V4dHJhY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBgc2tiX2RhdGFyZWZfYmlhcygpYCBhbmQgYHNrYl9kYXRhX2lzX3NoYXJlZCgpYCB0byBmaXggZGF0YSBzaGFyaW5nIGRldGVjdGlvbiBmb3Igc2tfYnVmZnMgd2hlbiBgc2tiLVx1MDAzZW5vaGRyYCBpcyBzZXQsIHVwZGF0aW5nIGBwc2tiX2V4cGFuZF9oZWFkYCBhbmQgYHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcmAgdG8gdXNlIGBza2JfZGF0YV9pc19zaGFyZWRgIHJhdGhlciB0aGFuIGBza2JfY2xvbmVkYC4gVGhpcyBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgYnVmZmVyIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCByZWZlcmVuY2UgY291bnRpbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Bza2JfZXhwYW5kX2hlYWQmIzM0OywKICAgICYjMzQ7cHNrYl9leHRyYWN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYHNrYl9kYXRhcmVmX2JpYXMoKWAgYW5kIGBza2JfZGF0YV9pc19zaGFyZWQoKWAgdG8gZml4IGRhdGEgc2hhcmluZyBkZXRlY3Rpb24gZm9yIHNrX2J1ZmZzIHdoZW4gYHNrYi1cdTAwM2Vub2hkcmAgaXMgc2V0LCB1cGRhdGluZyBgcHNrYl9leHBhbmRfaGVhZGAgYW5kIGBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXJgIHRvIHVzZSBgc2tiX2RhdGFfaXNfc2hhcmVkYCByYXRoZXIgdGhhbiBgc2tiX2Nsb25lZGAuIFRoaXMgbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGJ1ZmZlciBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMToyOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDExOjI5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBgc2tiX2RhdGFyZWZfYmlhcygpYCBhbmQgYHNrYl9kYXRhX2lzX3NoYXJlZCgpYCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgZGF0YSBidWZmZXIgLyBzaGFyZWQgaW5mbyBvZiBhbiBza19idWZmIGlzIGFjdGl2ZWx5IHNoYXJlZCBieSBvdGhlciBjbG9uZXMgZHVyaW5nIGhlYWQgcmVhbGxvY2F0aW9uIChgcHNrYl9leHBhbmRfaGVhZGAgYW5kIGBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXJgKS5cblxuS01TQU4gdnMgS0FTQU4gYW5hbHlzaXM6XG4tIEtNU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBrZXJuZWwgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMsIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBkYXRhIGxlbmd0aCAvIGJvdW5kcyBjYWxjdWxhdGlvbnMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBidWZmZXIgbWVtb3J5LiBUaGUgZmllbGRzIGFjY2Vzc2VkIChgc2tiLVx1MDAzZWNsb25lZGAsIGBza2ItXHUwMDNlbm9oZHJgLCBhbmQgYHNoaW5mby1cdTAwM2VkYXRhcmVmYCkgYXJlIHdlbGwtZGVmaW5lZCBhbmQgaW5pdGlhbGl6ZWQgc2tiIG1ldGFkYXRhLlxuLSBLQVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoZXNlIHJlZmNvdW50IGFuZCBzaGFyaW5nIGNoZWNrIG1vZGlmaWNhdGlvbnMgcmVsYXRlIHRvIHNrYiBkYXRhIG93bmVyc2hpcCwgc3VjaCBhcyBwcmVtYXR1cmUgaGVhZCBmcmVlaW5nIG9yIGltcHJvcGVyIGZyYWcgcmVmY291bnRpbmcgbGVhZGluZyB0byBVc2UtQWZ0ZXItRnJlZSAoVUFGKSBvciBEb3VibGUtRnJlZSBlcnJvcnMuIFRoZXNlIG1lbW9yeSBzYWZldHkgaXNzdWVzIGFyZSBkaXJlY3RseSBkZXRlY3RlZCBieSBLQVNBTi5cblxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDYzYjE0NjBhMDQyMDY3MDIzNTE3NzY1Mzc2NWJhMzNhMDQwOWU5MDgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAxMToyNjozMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2tidWZmLmggYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCmluZGV4IDQyMWY2ZmM0NTQ1MTEuLmVmZWVmMTQ4ZTFiYTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2tidWZmLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaApAQCAtMTI5NSw2ICYjNDM7MTI5NSwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2tiX3VucmVmKHN0cnVjdCBza19idWZmICpza2IpCiAJcmV0dXJuIHRydWU7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGludCBza2JfZGF0YXJlZl9iaWFzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7ewomIzQzOwlyZXR1cm4gc2tiLSZndDtub2hkciA/ICgxICZsdDsmbHQ7IFNLQl9EQVRBUkVGX1NISUZUKSAmIzQzOyAxIDogMTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIGJvb2wgc2tiX2RhdGFfdW5yZWYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgIHN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKnNoaW5mbykKIHsKQEAgLTEzMDMsNyAmIzQzOzEzMDgsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2tiX2RhdGFfdW5yZWYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlpZiAoIXNrYi0mZ3Q7Y2xvbmVkKQogCQlyZXR1cm4gdHJ1ZTsKIAotCWJpYXMgPSBza2ItJmd0O25vaGRyID8gKDEgJmx0OyZsdDsgU0tCX0RBVEFSRUZfU0hJRlQpICYjNDM7IDEgOiAxOwomIzQzOwliaWFzID0gc2tiX2RhdGFyZWZfYmlhcyhza2IpOwogCiAJaWYgKGF0b21pY19yZWFkKCZhbXA7c2hpbmZvLSZndDtkYXRhcmVmKSA9PSBiaWFzKQogCQlzbXBfcm1iKCk7CkBAIC0yMDE5LDYgJiM0MzsyMDI0LDEyIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnNrYl9nZXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKICAqIElmIHVzZXJzID09IDEsIHdlIGFyZSB0aGUgb25seSBvd25lciBhbmQgY2FuIGF2b2lkIHJlZHVuZGFudCBhdG9taWMgY2hhbmdlcy4KICAqLwogCiYjNDM7c3RhdGljIGlubGluZSBib29sIHNrYl9kYXRhX2lzX3NoYXJlZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJcmV0dXJuIHNrYi0mZ3Q7Y2xvbmVkICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIGF0b21pY19yZWFkKCZhbXA7c2tiX3NoaW5mbyhza2IpLSZndDtkYXRhcmVmKSAhPSBza2JfZGF0YXJlZl9iaWFzKHNrYik7CiYjNDM7fQomIzQzOwogLyoqCiAgKglza2JfY2xvbmVkIC0gaXMgdGhlIGJ1ZmZlciBhIGNsb25lCiAgKglAc2tiOiBidWZmZXIgdG8gY2hlY2sKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmMKaW5kZXggOTY2YWYzYmVlZDk0ZC4uZjRjMDY0NWY5OGQzZiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc2tidWZmLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc2tidWZmLmMKQEAgLTIzMzEsNyAmIzQzOzIzMzEsNyBAQCBpbnQgcHNrYl9leHBhbmRfaGVhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmhlYWQsIGludCBudGFpbCwKIAkgKiBpcyBub3Qgd2UgY2FuIGp1c3QgZHJvcCB0aGUgb2xkIGhlYWQgYW5kIGxldCB0aGUgZXhpc3RpbmcgcmVmY291bnQKIAkgKiBiZSBzaW5jZSBhbGwgd2UgZGlkIGlzIHJlbG9jYXRlIHRoZSB2YWx1ZXMKIAkgKi8KLQlpZiAoc2tiX2Nsb25lZChza2IpKSB7CiYjNDM7CWlmIChza2JfZGF0YV9pc19zaGFyZWQoc2tiKSkgewogCQlpZiAoc2tiX29ycGhhbl9mcmFncyhza2IsIGdmcF9tYXNrKSkKIAkJCWdvdG8gbm9mcmFnczsKIAkJaWYgKHNrYl96Y29weShza2IpKQpAQCAtNjg1NSw3ICYjNDM7Njg1NSw3IEBAIHN0YXRpYyBpbnQgcHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHUzMiBvZmYsCiAJICAgICAgIHNrYl9zaGluZm8oc2tiKSwKIAkgICAgICAgb2Zmc2V0b2Yoc3RydWN0IHNrYl9zaGFyZWRfaW5mbywKIAkJCWZyYWdzW3NrYl9zaGluZm8oc2tiKS0mZ3Q7bnJfZnJhZ3NdKSk7Ci0JaWYgKHNrYl9jbG9uZWQoc2tiKSkgewomIzQzOwlpZiAoc2tiX2RhdGFfaXNfc2hhcmVkKHNrYikpIHsKIAkJLyogZHJvcCB0aGUgb2xkIGhlYWQgZ3JhY2VmdWxseSAqLwogCQlpZiAoc2tiX29ycGhhbl9mcmFncyhza2IsIGdmcF9tYXNrKSkgewogCQkJc2tiX2tmcmVlX2hlYWQoZGF0YSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzkyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTI2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBFdmFsdWF0aW9uIGZvciBTS0IgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBzZXJpZXMsIHRvdWNoaW5nIGBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oYCBhbmQgYG5ldC9jb3JlL3NrYnVmZi5jYCwgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLCBvciBpZiBzdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50LiBJIG5lZWQgdG8gYXBwbHkgYSBzeXN0ZW1hdGljIGFwcHJvYWNoIGJhc2VkIG9uIHRob3NlIGNyaXRlcmlhLgoKRmlyc3QsIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIG9mIHRoZSBydWxlcy4gVGhlIHByaW1hcnkgY29uY2VybiBmb3IgS01TQU4gaXMgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIHBhcnRpY3VsYXJseSB3aGVuIGl0IGNvbWVzIHRvIGRhdGEgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlcnNwYWNlIG9yIHdoZW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW5mbHVlbmNlIGNvbnRyb2wgZmxvdy4gSSYjMzk7bSBhbHNvIGxvb2tpbmcgZm9yIGFueSBhbGxvY2F0aW9ucyBvciBpbml0aWFsaXphdGlvbnMgb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlci4gQ29udmVyc2VseSwgaWYgaXQmIzM5O3MgcHJpbWFyaWx5IGFib3V0IG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvdmVyZmxvd3MsIE5VTEwgZGVyZWZlcmVuY2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLCBLQVNBTiBpcyBsaWtlbHkgdGhlIHJpZ2h0IHRvb2wuCgpOb3csIGxldCYjMzk7cyBhbmFseXplIHRoZSBwYXRjaC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gaW52b2x2ZSBzb21lIGNoYW5nZXMgcmVsYXRlZCB0byBgc2tfYnVmZmAgKHNvY2tldCBidWZmZXIpIHJlZmVyZW5jZSBjb3VudGluZywgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiBkYXRhIHNoYXJpbmcgYW5kIGNsb25pbmcuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgYHNrYl9kYXRhcmVmX2JpYXNgIGZ1bmN0aW9uIGFuZCBgc2tiX2RhdGFfaXNfc2hhcmVkYCBmdW5jdGlvbi4gSXQgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byBvcHRpbWl6YXRpb25zIGFuZCByZWZhY3RvcmluZ3MgYXJvdW5kIGhvdyBTS0JzIGFyZSBoYW5kbGVkIGFuZCBjbG9uZWQuCgpTcGVjaWZpY2FsbHksIEkgc2VlIHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzIGBwc2tiX2V4cGFuZF9oZWFkYCBhbmQgYHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcmAuIEJvdGggYXJlIHJlbGF0ZWQgdG8gbW9kaWZ5aW5nIFNLQiBoZWFkZXJzL2RhdGEsIHBhcnRpY3VsYXJseSBpbiBjYXNlcyBvZiBjbG9uaW5nIGFuZCBzaGFyaW5nLiBHaXZlbiB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVsYXRlZCB0byBtZW1vcnkgbWFuaXB1bGF0aW9uIHdpdGhpbiB0aGUgU0tCIHN0cnVjdHVyZSBpdHNlbGYsIGFuZCBiYXNlZCBvbiB0aGUgZmFjdCB0aGF0IGBza2JfZGF0YV9pc19zaGFyZWRgIGlzIGJlaW5nIHVzZWQgaW4gdGhvc2UgdHdvIGZ1bmN0aW9ucywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aG9zZSBmdW5jdGlvbnMgZG8sIHdoYXQga2luZCBvZiBvcGVyYXRpb25zIHRoZXkgcGVyZm9ybSBvbiB0aGUgU0tCIGRhdGEsIGFuZCB0aGUgY29udGV4dCBpbiB3aGljaCB0aGV5JiMzOTtyZSBjYWxsZWQuIEkgc3VzcGVjdCB0aGF0IGJlY2F1c2Ugd2UmIzM5O3JlIGxvb2tpbmcgYXQgb3BlcmF0aW9ucyBvbiBTS0IgZGF0YSwgaXQmIzM5O3MgcG9zc2libGUgdGhhdCBkYXRhIGlzIHBvdGVudGlhbGx5IGJlaW5nIHJlbG9jYXRlZCwgd2hpY2ggbWlnaHQgYmUgYSBzY2VuYXJpbyB3aGVyZSB3ZSB3b3VsZCB3YW50IHRvIGNoZWNrIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gSSBhbHNvIGtub3cgdGhhdCBTS0JzIGFyZSBpbnZvbHZlZCBpbiBuZXR3b3JrIEkvTywgbWVhbmluZyB0aGF0IGRhdGEgY2FuIHRyYW5zaXQgZnJvbSBrZXJuZWwgc3BhY2UgdG8gdXNlciBzcGFjZSBhbmQgdmljZS12ZXJzYSwgd2hpY2ggY291bGQgYmUgYW5vdGhlciBzb3VyY2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpUbyBkZXRlcm1pbmUgdGhpcywgSSYjMzk7bGwgbmVlZCB0byBkbyBzb21lIGNvZGUgYXJjaGFlb2xvZ3kgYW5kIHNlZSB3aGF0IGZ1bmN0aW9ucyBjYWxsIGBwc2tiX2V4cGFuZF9oZWFkYCBhbmQgYHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcmAgYW5kIGhvdyBTS0IgZGF0YSBpcyBzdWJzZXF1ZW50bHkgdXNlZC4gVGhlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRob3NlIGZ1bmN0aW9ucyBpbiBjb250ZXh0LCBwcm9iYWJseSB1c2luZyBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgYW5kIHNlZSBob3cgdGhlIHBhdGNoIGltcGFjdHMgdGhlIGJlaGF2aW9yLiBUaGVuLCBJIGNhbiBtYWtlIGEgZGVjaXNpb24gYXMgdG8gd2hldGhlciBvciBub3QgdGhpcyB3YXJyYW50cyBLTVNBTi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHNrYl9leHBhbmRfaGVhZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jPTIyNzU9RVhQT1JUX1NZTUJPTChfX3Bza2JfY29weV9mY2xvbmUpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTIyNzctLyoqXG5uZXQvY29yZS9za2J1ZmYuYzoyMjc4OiAqXHRwc2tiX2V4cGFuZF9oZWFkIC0gcmVhbGxvY2F0ZSBoZWFkZXIgb2YgXHUwMDI2c2tfYnVmZlxubmV0L2NvcmUvc2tidWZmLmMtMjI3OS0gKlx0QHNrYjogYnVmZmVyIHRvIHJlYWxsb2NhdGVcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0yMjk2LVxubmV0L2NvcmUvc2tidWZmLmM6MjI5NzppbnQgcHNrYl9leHBhbmRfaGVhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmhlYWQsIGludCBudGFpbCxcbm5ldC9jb3JlL3NrYnVmZi5jLTIyOTgtXHRcdCAgICAgZ2ZwX3QgZ2ZwX21hc2spXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMjM3OS19XG5uZXQvY29yZS9za2J1ZmYuYzoyMzgwOkVYUE9SVF9TWU1CT0wocHNrYl9leHBhbmRfaGVhZCk7XG5uZXQvY29yZS9za2J1ZmYuYy0yMzgxLVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTIzODQ9c3RydWN0IHNrX2J1ZmYgKnNrYl9yZWFsbG9jX2hlYWRyb29tKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBoZWFkcm9vbSlcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0yMzkyLVx0XHRza2IyID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7XG5uZXQvY29yZS9za2J1ZmYuYzoyMzkzOlx0XHRpZiAoc2tiMiBcdTAwMjZcdTAwMjYgcHNrYl9leHBhbmRfaGVhZChza2IyLCBTS0JfREFUQV9BTElHTihkZWx0YSksIDAsXG5uZXQvY29yZS9za2J1ZmYuYy0yMzk0LVx0XHRcdFx0XHQgICAgIEdGUF9BVE9NSUMpKSB7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MjQwND1pbnQgX19za2JfdW5jbG9uZV9rZWVwdHJ1ZXNpemUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgcHJpKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTI0MTItXG5uZXQvY29yZS9za2J1ZmYuYzoyNDEzOlx0cmVzID0gcHNrYl9leHBhbmRfaGVhZChza2IsIDAsIDAsIHByaSk7XG5uZXQvY29yZS9za2J1ZmYuYy0yNDE0LVx0aWYgKHJlcylcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0yNDQ4PXN0cnVjdCBza19idWZmICpza2JfZXhwYW5kX2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhlYWRyb29tKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTI0NTgtXHRkZWx0YSA9IFNLQl9EQVRBX0FMSUdOKGRlbHRhKTtcbm5ldC9jb3JlL3NrYnVmZi5jOjI0NTk6XHQvKiBwc2tiX2V4cGFuZF9oZWFkKCkgbWlnaHQgY3Jhc2gsIGlmIHNrYiBpcyBzaGFyZWQuICovXG5uZXQvY29yZS9za2J1ZmYuYy0yNDYwLVx0aWYgKHNrYl9zaGFyZWQoc2tiKSB8fCAhaXNfc2tiX3dtZW0oc2tiKSkge1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTI0NzAtXHR9XG5uZXQvY29yZS9za2J1ZmYuYzoyNDcxOlx0aWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCBkZWx0YSwgMCwgR0ZQX0FUT01JQykpXG5uZXQvY29yZS9za2J1ZmYuYy0yNDcyLVx0XHRnb3RvIGZhaWw7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MjU2Nz1pbnQgX19za2JfcGFkKHN0cnVjdCBza19idWZmICpza2IsIGludCBwYWQsIGJvb2wgZnJlZV9vbl9lcnJvcilcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0yNTc5LVx0aWYgKGxpa2VseShza2JfY2xvbmVkKHNrYikgfHwgbnRhaWwgXHUwMDNlIDApKSB7XG5uZXQvY29yZS9za2J1ZmYuYzoyNTgwOlx0XHRlcnIgPSBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgbnRhaWwsIEdGUF9BVE9NSUMpO1xubmV0L2NvcmUvc2tidWZmLmMtMjU4MS1cdFx0aWYgKHVubGlrZWx5KGVycikpXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MjcyND1pbnQgX19fcHNrYl90cmltKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMjczMy1cdGlmIChza2JfY2xvbmVkKHNrYikgXHUwMDI2XHUwMDI2XG5uZXQvY29yZS9za2J1ZmYuYzoyNzM0Olx0ICAgIHVubGlrZWx5KChlcnIgPSBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgMCwgR0ZQX0FUT01JQykpKSlcbm5ldC9jb3JlL3NrYnVmZi5jLTI3MzUtXHRcdHJldHVybiBlcnI7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9Mjg3OD12b2lkICpfX3Bza2JfcHVsbF90YWlsKHN0cnVjdCBza19idWZmICpza2IsIGludCBkZWx0YSlcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0yODg5LVx0aWYgKGVhdCBcdTAwM2UgMCB8fCBza2JfY2xvbmVkKHNrYikpIHtcbm5ldC9jb3JlL3NrYnVmZi5jOjI4OTA6XHRcdGlmIChwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgZWF0IFx1MDAzZSAwID8gZWF0ICYjNDM7IDEyOCA6IDAsXG5uZXQvY29yZS9za2J1ZmYuYy0yODkxLVx0XHRcdFx0ICAgICBHRlBfQVRPTUlDKSlcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz01MzgzPWludCBza2JfY293X2RhdGEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRhaWxiaXRzLCBzdHJ1Y3Qgc2tfYnVmZiAqKnRyYWlsZXIpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNTQwNC1cdFx0aWYgKHNrYl90YWlscm9vbShza2IpIFx1MDAzYyB0YWlsYml0cyBcdTAwMjZcdTAwMjZcbm5ldC9jb3JlL3NrYnVmZi5jOjU0MDU6XHRcdCAgICBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgdGFpbGJpdHMtc2tiX3RhaWxyb29tKHNrYikmIzQzOzEyOCwgR0ZQX0FUT01JQykpXG5uZXQvY29yZS9za2J1ZmYuYy01NDA2LVx0XHRcdHJldHVybiAtRU5PTUVNO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTYzODM9aW50IHNrYl9lbnN1cmVfd3JpdGFibGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHdyaXRlX2xlbilcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy02MzkwLVxubmV0L2NvcmUvc2tidWZmLmM6NjM5MTpcdHJldHVybiBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgMCwgR0ZQX0FUT01JQyk7XG5uZXQvY29yZS9za2J1ZmYuYy02MzkyLX1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz02Mzk1PWludCBza2JfZW5zdXJlX3dyaXRhYmxlX2hlYWRfdGFpbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTY0MTQtXG5uZXQvY29yZS9za2J1ZmYuYzo2NDE1Olx0cmV0dXJuIHBza2JfZXhwYW5kX2hlYWQoc2tiLCBuZWVkZWRfaGVhZHJvb20sIG5lZWRlZF90YWlscm9vbSxcbm5ldC9jb3JlL3NrYnVmZi5jLTY0MTYtXHRcdFx0XHRHRlBfQVRPTUlDKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjIwNAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBwc2tiX2V4cGFuZF9oZWFkYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHBza2JfZXhwYW5kX2hlYWRgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGNvZGUgYXJvdW5kIGxpbmVzIDIyOTcgdG8gMjM4MC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGlzIGNodW5rIGhhbmRsZXMgcGFja2V0IGJ1ZmZlciBtYW5pcHVsYXRpb24uIEkmIzM5O20gcHJpbWFyaWx5IGludGVyZXN0ZWQgaW4gaG93IGl0JiMzOTtzIGV4cGFuZGluZyB0aGUgaGVhZCBvZiB0aGUgc2tiLiBXaGF0IGVkZ2UgY2FzZXMgYXJlIHRoZXkgY29uc2lkZXJpbmc/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvdyB2dWxuZXJhYmlsaXRpZXMgbHVya2luZyBpbiB0aGlzIHNlY3Rpb24/IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBpbmVmZmljaWVuY2llcyBvciBjbGV2ZXIgb3B0aW1pemF0aW9ucyBhcyB3ZWxsLiBTcGVjaWZpY2FsbHkgSSBuZWVkIHRvIGtub3cgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgYnVmZmVyIGNvcHkvbW92ZSBvcGVyYXRpb25zIGhhcHBlbmluZyBoZXJlLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kLiBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCBhIGJldHRlciBzZW5zZSBvZiBob3cgdGhlIHBhY2tldCBidWZmZXIgaXMgYmVpbmcgaGFuZGxlZCB3aXRoIHRoYXQgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjI5NTpcdCAqL1xuMjI5NjpcdFxuMjI5NzpcdGludCBwc2tiX2V4cGFuZF9oZWFkKHN0cnVjdCBza19idWZmICpza2IsIGludCBuaGVhZCwgaW50IG50YWlsLFxuMjI5ODpcdFx0XHQgICAgIGdmcF90IGdmcF9tYXNrKVxuMjI5OTpcdHtcbjIzMDA6XHRcdHVuc2lnbmVkIGludCBvc2l6ZSA9IHNrYl9lbmRfb2Zmc2V0KHNrYik7XG4yMzAxOlx0XHR1bnNpZ25lZCBpbnQgc2l6ZSA9IG9zaXplICYjNDM7IG5oZWFkICYjNDM7IG50YWlsO1xuMjMwMjpcdFx0bG9uZyBvZmY7XG4yMzAzOlx0XHR1OCAqZGF0YTtcbjIzMDQ6XHRcdGludCBpO1xuMjMwNTpcdFxuMjMwNjpcdFx0QlVHX09OKG5oZWFkIFx1MDAzYyAwKTtcbjIzMDc6XHRcbjIzMDg6XHRcdEJVR19PTihza2Jfc2hhcmVkKHNrYikpO1xuMjMwOTpcdFxuMjMxMDpcdFx0c2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYik7XG4yMzExOlx0XG4yMzEyOlx0XHRpZiAoc2tiX3BmbWVtYWxsb2Moc2tiKSlcbjIzMTM6XHRcdFx0Z2ZwX21hc2sgfD0gX19HRlBfTUVNQUxMT0M7XG4yMzE0Olx0XG4yMzE1Olx0XHRkYXRhID0ga21hbGxvY19yZXNlcnZlKFx1MDAyNnNpemUsIGdmcF9tYXNrLCBOVU1BX05PX05PREUsIE5VTEwpO1xuMjMxNjpcdFx0aWYgKCFkYXRhKVxuMjMxNzpcdFx0XHRnb3RvIG5vZGF0YTtcbjIzMTg6XHRcdHNpemUgPSBTS0JfV0lUSF9PVkVSSEVBRChzaXplKTtcbjIzMTk6XHRcbjIzMjA6XHRcdC8qIENvcHkgb25seSByZWFsIGRhdGEuLi4gYW5kLCBhbGFzLCBoZWFkZXIuIFRoaXMgc2hvdWxkIGJlXG4yMzIxOlx0XHQgKiBvcHRpbWl6ZWQgZm9yIHRoZSBjYXNlcyB3aGVuIGhlYWRlciBpcyB2b2lkLlxuMjMyMjpcdFx0ICovXG4yMzIzOlx0XHRtZW1jcHkoZGF0YSAmIzQzOyBuaGVhZCwgc2tiLVx1MDAzZWhlYWQsIHNrYl90YWlsX3BvaW50ZXIoc2tiKSAtIHNrYi1cdTAwM2VoZWFkKTtcbjIzMjQ6XHRcbjIzMjU6XHRcdG1lbWNweSgoc3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqKShkYXRhICYjNDM7IHNpemUpLFxuMjMyNjpcdFx0ICAgICAgIHNrYl9zaGluZm8oc2tiKSxcbjIzMjc6XHRcdCAgICAgICBvZmZzZXRvZihzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvLCBmcmFnc1tza2Jfc2hpbmZvKHNrYiktXHUwMDNlbnJfZnJhZ3NdKSk7XG4yMzI4Olx0XG4yMzI5Olx0XHQvKlxuMjMzMDpcdFx0ICogaWYgc2hpbmZvIGlzIHNoYXJlZCB3ZSBtdXN0IGRyb3AgdGhlIG9sZCBoZWFkIGdyYWNlZnVsbHksIGJ1dCBpZiBpdFxuMjMzMTpcdFx0ICogaXMgbm90IHdlIGNhbiBqdXN0IGRyb3AgdGhlIG9sZCBoZWFkIGFuZCBsZXQgdGhlIGV4aXN0aW5nIHJlZmNvdW50XG4yMzMyOlx0XHQgKiBiZSBzaW5jZSBhbGwgd2UgZGlkIGlzIHJlbG9jYXRlIHRoZSB2YWx1ZXNcbjIzMzM6XHRcdCAqL1xuMjMzNDpcdFx0aWYgKHNrYl9kYXRhX2lzX3NoYXJlZChza2IpKSB7XG4yMzM1Olx0XHRcdGlmIChza2Jfb3JwaGFuX2ZyYWdzKHNrYiwgZ2ZwX21hc2spKVxuMjMzNjpcdFx0XHRcdGdvdG8gbm9mcmFncztcbjIzMzc6XHRcdFx0aWYgKHNrYl96Y29weShza2IpKVxuMjMzODpcdFx0XHRcdG5ldF96Y29weV9nZXQoc2tiX3Vhcmcoc2tiKSk7XG4yMzM5Olx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vucl9mcmFnczsgaSYjNDM7JiM0MzspXG4yMzQwOlx0XHRcdFx0c2tiX2ZyYWdfcmVmKHNrYiwgaSk7XG4yMzQxOlx0XG4yMzQyOlx0XHRcdGlmIChza2JfaGFzX2ZyYWdfbGlzdChza2IpKVxuMjM0MzpcdFx0XHRcdHNrYl9jbG9uZV9mcmFnbGlzdChza2IpO1xuMjM0NDpcdFxuMjM0NTpcdFx0XHRza2JfcmVsZWFzZV9kYXRhKHNrYiwgU0tCX0NPTlNVTUVEKTtcbjIzNDY6XHRcdH0gZWxzZSB7XG4yMzQ3Olx0XHRcdHNrYl9mcmVlX2hlYWQoc2tiKTtcbjIzNDg6XHRcdH1cbjIzNDk6XHRcdG9mZiA9IChkYXRhICYjNDM7IG5oZWFkKSAtIHNrYi1cdTAwM2VoZWFkO1xuMjM1MDpcdFxuMjM1MTpcdFx0c2tiLVx1MDAzZWhlYWQgICAgID0gZGF0YTtcbjIzNTI6XHRcdHNrYi1cdTAwM2VoZWFkX2ZyYWcgPSAwO1xuMjM1MzpcdFx0c2tiLVx1MDAzZWRhdGEgICAgJiM0Mzs9IG9mZjtcbjIzNTQ6XHRcbjIzNTU6XHRcdHNrYl9zZXRfZW5kX29mZnNldChza2IsIHNpemUpO1xuMjM1NjpcdCNpZmRlZiBORVRfU0tCVUZGX0RBVEFfVVNFU19PRkZTRVRcbjIzNTc6XHRcdG9mZiAgICAgICAgICAgPSBuaGVhZDtcbjIzNTg6XHQjZW5kaWZcbjIzNTk6XHRcdHNrYi1cdTAwM2V0YWlsXHQgICAgICAmIzQzOz0gb2ZmO1xuMjM2MDpcdFx0c2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZShza2IsIG5oZWFkKTtcbjIzNjE6XHRcdHNrYi1cdTAwM2VjbG9uZWQgICA9IDA7XG4yMzYyOlx0XHRza2ItXHUwMDNlaGRyX2xlbiAgPSAwO1xuMjM2MzpcdFx0c2tiLVx1MDAzZW5vaGRyICAgID0gMDtcbjIzNjQ6XHRcdGF0b21pY19zZXQoXHUwMDI2c2tiX3NoaW5mbyhza2IpLVx1MDAzZWRhdGFyZWYsIDEpO1xuMjM2NTpcdFxuMjM2NjpcdFx0LyogSXQgaXMgbm90IGdlbmVyYWxseSBzYWZlIHRvIGNoYW5nZSBza2ItXHUwMDNldHJ1ZXNpemUuXG4yMzY3Olx0XHQgKiBGb3IgdGhlIG1vbWVudCwgd2UgcmVhbGx5IGNhcmUgb2YgcnggcGF0aCwgb3JcbjIzNjg6XHRcdCAqIHdoZW4gc2tiIGlzIG9ycGhhbmVkIChub3QgYXR0YWNoZWQgdG8gYSBzb2NrZXQpLlxuMjM2OTpcdFx0ICovXG4yMzcwOlx0XHRpZiAoIXNrYi1cdTAwM2VzayB8fCBza2ItXHUwMDNlZGVzdHJ1Y3RvciA9PSBzb2NrX2VkZW11eClcbjIzNzE6XHRcdFx0c2tiLVx1MDAzZXRydWVzaXplICYjNDM7PSBzaXplIC0gb3NpemU7XG4yMzcyOlx0XG4yMzczOlx0XHRyZXR1cm4gMDtcbjIzNzQ6XHRcbjIzNzU6XHRub2ZyYWdzOlxuMjM3NjpcdFx0c2tiX2tmcmVlX2hlYWQoZGF0YSk7XG4yMzc3Olx0bm9kYXRhOlxuMjM3ODpcdFx0cmV0dXJuIC1FTk9NRU07XG4yMzc5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMTozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Nzk3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcmAqKgoKT2theSwgbGV0JiMzOTtzIGNpcmNsZSBiYWNrIGFuZCBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcmAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA2ODU1LiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgaGFuZGxpbmcuLi4gbGV0IG1lIHNlZS4uLiBJJiMzOTttIGxvb2tpbmcgYXQgaXQgaW4gdGhlIGNvbnRleHQgb2YgW215IHNwZWNpZmljIGV4cGVydGlzZSAtIGUuZy4sIG1lbW9yeSBjYXJ2aW5nIHdpdGhpbiBhIHNwZWNpZmljIGZpbGUgZm9ybWF0XS4gSSBzdXNwZWN0IHRoaXMgc2VjdGlvbiBtaWdodCBiZSBjcml0aWNhbCBmb3IgW3NwZWNpZmljIGh5cG90aGVzaXMgYWJvdXQgaXRzIGZ1bmN0aW9uLCBmb3IgZXhhbXBsZTogaG93IHRoZSBoZWFkZXIgY2FydmluZyBpbnRlcmFjdHMgd2l0aCB0aGUgZGF0YSBzdHJ1Y3R1cmUmIzM5O3MgaW50ZXJuYWwgb2Zmc2V0IGNhbGN1bGF0aW9ucywgb3IgaG93IGl0IGFkZHJlc3NlcyBmcmFnbWVudGF0aW9uXS4gVW5kZXJzdGFuZGluZyB0aGUgbG9naWMgaGVyZSBpcyBsaWtlbHkga2V5IHRvIFthY2hpZXZpbmcgbXkgb3ZlcmFsbCBnb2FsLCBlLmcuLCBpbXByb3ZpbmcgdGhlIGVmZmljaWVuY3kgb3IgYWNjdXJhY3kgb2YgbXkgY2FydmluZyBhbGdvcml0aG0sIGlkZW50aWZ5aW5nIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHksIG9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzdHJ1Y3R1cmUgaXMgdXNlZF0uIFRpbWUgdG8gcHVsbCB1cCB0aGUgY29kZSBhbmQgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjg0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2ODQwOlx0XHRkYXRhID0ga21hbGxvY19yZXNlcnZlKFx1MDAyNnNpemUsIGdmcF9tYXNrLCBOVU1BX05PX05PREUsIE5VTEwpO1xuNjg0MTpcdFx0aWYgKCFkYXRhKVxuNjg0MjpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjY4NDM6XHRcdHNpemUgPSBTS0JfV0lUSF9PVkVSSEVBRChzaXplKTtcbjY4NDQ6XHRcbjY4NDU6XHRcdC8qIENvcHkgcmVhbCBkYXRhLCBhbmQgYWxsIGZyYWdzICovXG42ODQ2Olx0XHRza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhX29mZnNldChza2IsIG9mZiwgZGF0YSwgbmV3X2hsZW4pO1xuNjg0NzpcdFx0c2tiLVx1MDAzZWxlbiAtPSBvZmY7XG42ODQ4Olx0XG42ODQ5Olx0XHQvKiBSZW1vdmUgU0tCRkxfTUFOQUdFRF9GUkFHX1JFRlMgaW5zdGVhZCBvZiB0cnlpbmcgdG8gaG9ub3VyIGl0XG42ODUwOlx0XHQgKiB3aGlsZSByZWZjb3VudGluZyBmcmFncyBiZWxvdy5cbjY4NTE6XHRcdCAqL1xuNjg1MjpcdFx0c2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYik7XG42ODUzOlx0XG42ODU0Olx0XHRtZW1jcHkoKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKikoZGF0YSAmIzQzOyBzaXplKSxcbjY4NTU6XHRcdCAgICAgICBza2Jfc2hpbmZvKHNrYiksXG42ODU2Olx0XHQgICAgICAgb2Zmc2V0b2Yoc3RydWN0IHNrYl9zaGFyZWRfaW5mbyxcbjY4NTc6XHRcdFx0XHRmcmFnc1tza2Jfc2hpbmZvKHNrYiktXHUwMDNlbnJfZnJhZ3NdKSk7XG42ODU4Olx0XHRpZiAoc2tiX2RhdGFfaXNfc2hhcmVkKHNrYikpIHtcbjY4NTk6XHRcdFx0LyogZHJvcCB0aGUgb2xkIGhlYWQgZ3JhY2VmdWxseSAqL1xuNjg2MDpcdFx0XHRpZiAoc2tiX29ycGhhbl9mcmFncyhza2IsIGdmcF9tYXNrKSkge1xuNjg2MTpcdFx0XHRcdHNrYl9rZnJlZV9oZWFkKGRhdGEpO1xuNjg2MjpcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuNjg2MzpcdFx0XHR9XG42ODY0Olx0XHRcdGlmIChza2JfemNvcHkoc2tiKSlcbjY4NjU6XHRcdFx0XHRuZXRfemNvcHlfZ2V0KHNrYl91YXJnKHNrYikpO1xuNjg2NjpcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBza2Jfc2hpbmZvKHNrYiktXHUwMDNlbnJfZnJhZ3M7IGkmIzQzOyYjNDM7KVxuNjg2NzpcdFx0XHRcdHNrYl9mcmFnX3JlZihza2IsIGkpO1xuNjg2ODpcdFx0XHRpZiAoc2tiX2hhc19mcmFnX2xpc3Qoc2tiKSlcbjY4Njk6XHRcdFx0XHRza2JfY2xvbmVfZnJhZ2xpc3Qoc2tiKTtcbjY4NzA6XHRcdFx0c2tiX3JlbGVhc2VfZGF0YShza2IsIFNLQl9DT05TVU1FRCk7XG42ODcxOlx0XHR9IGVsc2Uge1xuNjg3MjpcdFx0XHQvKiB3ZSBjYW4gcmV1c2UgZXhpc3RpbmcgcmVjb3VudC0gYWxsIHdlIGRpZCB3YXNcbjY4NzM6XHRcdFx0ICogcmVsb2NhdGUgdmFsdWVzXG42ODc0Olx0XHRcdCAqL1xuNjg3NTpcdFx0XHRza2JfZnJlZV9oZWFkKHNrYik7XG42ODc2Olx0XHR9XG42ODc3Olx0XG42ODc4Olx0XHRza2ItXHUwMDNlaGVhZCA9IGRhdGE7XG42ODc5Olx0XHRza2ItXHUwMDNlZGF0YSA9IGRhdGE7XG42ODgwOlx0XHRza2ItXHUwMDNlaGVhZF9mcmFnID0gMDtcbjY4ODE6XHRcdHNrYl9zZXRfZW5kX29mZnNldChza2IsIHNpemUpO1xuNjg4MjpcdFx0c2tiX3NldF90YWlsX3BvaW50ZXIoc2tiLCBza2JfaGVhZGxlbihza2IpKTtcbjY4ODM6XHRcdHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUoc2tiLCAwKTtcbjY4ODQ6XHRcdHNrYi1cdTAwM2VjbG9uZWQgPSAwO1xuNjg4NTpcdFx0c2tiLVx1MDAzZWhkcl9sZW4gPSAwO1xuNjg4NjpcdFx0c2tiLVx1MDAzZW5vaGRyID0gMDtcbjY4ODc6XHRcdGF0b21pY19zZXQoXHUwMDI2c2tiX3NoaW5mbyhza2IpLVx1MDAzZWRhdGFyZWYsIDEpO1xuNjg4ODpcdFxuNjg4OTpcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDExOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5MTkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIHRoZSBza2J1ZmYuaCBEZXRhaWxzKioKCk9rYXksIHRpbWUgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludHJpY2FjaWVzIG9mIHRoZSBgc2tidWZmYCBzdHJ1Y3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgc2tiX2RhdGFfdW5yZWZgLCBgc2tiX2RhdGFyZWZfYmlhc2AsIGFuZCBgc2tiX2Nsb25lZGAuIFRoZXNlIGFyZSBjcnVjaWFsIGZvciBwcm9wZXIgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHJlZmVyZW5jZSBjb3VudGluZyB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBuZXR3b3JraW5nIHN0YWNrLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgcmlnaHQgaW50byBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAsIHNwZWNpZmljYWxseSBsaW5lcyAxMjkwIHRocm91Z2ggMTMyMC4gVGhpcyBzZWN0aW9uIHNob3VsZCBnaXZlIG1lIHRoZSBjb3JlIGRlZmluaXRpb25zIGFuZCBjb250ZXh0IEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgYW5kIGZsYWdzIGludGVycmVsYXRlLiBIb3BlZnVsbHksIHRoaXMgcmVmcmVzaCB3aWxsIG1ha2UgbWUgbW9yZSBlZmZpY2llbnQgd2hlbiBkZWJ1Z2dpbmcgdGhvc2UgbmV0d29yayBwZXJmb3JtYW5jZSBpc3N1ZXMgYWdhaW4uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2tidWZmLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyOTA6XHRcdGlmICghSVNfRU5BQkxFRChDT05GSUdfREVCVUdfTkVUKSBcdTAwMjZcdTAwMjYgbGlrZWx5KHJlZmNvdW50X3JlYWQoXHUwMDI2c2tiLVx1MDAzZXVzZXJzKSA9PSAxKSlcbjEyOTE6XHRcdFx0c21wX3JtYigpO1xuMTI5MjpcdFx0ZWxzZSBpZiAobGlrZWx5KCFyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2c2tiLVx1MDAzZXVzZXJzKSkpXG4xMjkzOlx0XHRcdHJldHVybiBmYWxzZTtcbjEyOTQ6XHRcbjEyOTU6XHRcdHJldHVybiB0cnVlO1xuMTI5NjpcdH1cbjEyOTc6XHRcbjEyOTg6XHRzdGF0aWMgaW5saW5lIGludCBza2JfZGF0YXJlZl9iaWFzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4xMjk5Olx0e1xuMTMwMDpcdFx0cmV0dXJuIHNrYi1cdTAwM2Vub2hkciA/ICgxIFx1MDAzY1x1MDAzYyBTS0JfREFUQVJFRl9TSElGVCkgJiM0MzsgMSA6IDE7XG4xMzAxOlx0fVxuMTMwMjpcdFxuMTMwMzpcdHN0YXRpYyBpbmxpbmUgYm9vbCBza2JfZGF0YV91bnJlZihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuMTMwNDpcdFx0XHRcdFx0ICBzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaGluZm8pXG4xMzA1Olx0e1xuMTMwNjpcdFx0aW50IGJpYXM7XG4xMzA3Olx0XG4xMzA4Olx0XHRpZiAoIXNrYi1cdTAwM2VjbG9uZWQpXG4xMzA5Olx0XHRcdHJldHVybiB0cnVlO1xuMTMxMDpcdFxuMTMxMTpcdFx0YmlhcyA9IHNrYl9kYXRhcmVmX2JpYXMoc2tiKTtcbjEzMTI6XHRcbjEzMTM6XHRcdGlmIChhdG9taWNfcmVhZChcdTAwMjZzaGluZm8tXHUwMDNlZGF0YXJlZikgPT0gYmlhcylcbjEzMTQ6XHRcdFx0c21wX3JtYigpO1xuMTMxNTpcdFx0ZWxzZSBpZiAoYXRvbWljX3N1Yl9yZXR1cm4oYmlhcywgXHUwMDI2c2hpbmZvLVx1MDAzZWRhdGFyZWYpKVxuMTMxNjpcdFx0XHRyZXR1cm4gZmFsc2U7XG4xMzE3Olx0XG4xMzE4Olx0XHRyZXR1cm4gdHJ1ZTtcbjEzMTk6XHR9XG4xMzIwOlx0XG4xMzIxOlx0dm9pZCBfX2ZpeF9hZGRyZXNzIHNrX3NrYl9yZWFzb25fZHJvcChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4xMzIyOlx0XHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuMTMyMzpcdFx0XHRcdFx0ICAgICAgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKTtcbjEzMjQ6XHRcbjEzMjU6XHRzdGF0aWMgaW5saW5lIHZvaWRcbjEzMjY6XHRrZnJlZV9za2JfcmVhc29uKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbilcbjEzMjc6XHR7XG4xMzI4Olx0XHRza19za2JfcmVhc29uX2Ryb3AoTlVMTCwgc2tiLCByZWFzb24pO1xuMTMyOTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTE6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTgwNgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgYHNrYl9jbG9uZWRgIGZsYWcgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYHNrYnVmZmAgc3RydWN0dXJlLiBNeSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiB0aGUgYGluY2x1ZGUvbGludXgvc2tidWZmLmhgIGhlYWRlciBmaWxlLiBJIG5lZWQgdG8gZXhhbWluZSBsaW5lcyAyMDIwIHRocm91Z2ggMjA1MCB0byBnYWluIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHNpZ25pZmljYW5jZS4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgcHJlY2lzZSBkZWZpbml0aW9uLCBhbnkgdXNhZ2UgZXhhbXBsZXMgb3IgcmVsYXRlZCBjb25kaXRpb25hbCBsb2dpYyBzdXJyb3VuZGluZyB0aGlzIGZsYWcuIFRoaXMgc2hvdWxkIGdpdmUgbWUgaW5zaWdodCBvbiB0aGUgY2lyY3Vtc3RhbmNlcyB0aGF0IGRldGVybWluZSB3aGVuIHRoZSBgc2tiX2Nsb25lZGAgZmxhZyBpcyBzZXQgb3IgY2xlYXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTE6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMDIwOlx0XHRyZXR1cm4gc2tiO1xuMjAyMTpcdH1cbjIwMjI6XHRcbjIwMjM6XHQvKlxuMjAyNDpcdCAqIElmIHVzZXJzID09IDEsIHdlIGFyZSB0aGUgb25seSBvd25lciBhbmQgY2FuIGF2b2lkIHJlZHVuZGFudCBhdG9taWMgY2hhbmdlcy5cbjIwMjU6XHQgKi9cbjIwMjY6XHRcbjIwMjc6XHRzdGF0aWMgaW5saW5lIGJvb2wgc2tiX2RhdGFfaXNfc2hhcmVkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4yMDI4Olx0e1xuMjAyOTpcdFx0cmV0dXJuIHNrYi1cdTAwM2VjbG9uZWQgXHUwMDI2XHUwMDI2XG4yMDMwOlx0XHQgICAgICAgYXRvbWljX3JlYWQoXHUwMDI2c2tiX3NoaW5mbyhza2IpLVx1MDAzZWRhdGFyZWYpICE9IHNrYl9kYXRhcmVmX2JpYXMoc2tiKTtcbjIwMzE6XHR9XG4yMDMyOlx0XG4yMDMzOlx0LyoqXG4yMDM0Olx0ICpcdHNrYl9jbG9uZWQgLSBpcyB0aGUgYnVmZmVyIGEgY2xvbmVcbjIwMzU6XHQgKlx0QHNrYjogYnVmZmVyIHRvIGNoZWNrXG4yMDM2Olx0ICpcbjIwMzc6XHQgKlx0UmV0dXJucyB0cnVlIGlmIHRoZSBidWZmZXIgd2FzIGdlbmVyYXRlZCB3aXRoIHNrYl9jbG9uZSgpIGFuZCBpc1xuMjAzODpcdCAqXHRvbmUgb2YgbXVsdGlwbGUgc2hhcmVkIGNvcGllcyBvZiB0aGUgYnVmZmVyLiBDbG9uZWQgYnVmZmVycyBhcmVcbjIwMzk6XHQgKlx0c2hhcmVkIGRhdGEgc28gbXVzdCBub3QgYmUgd3JpdHRlbiB0byB1bmRlciBub3JtYWwgY2lyY3Vtc3RhbmNlcy5cbjIwNDA6XHQgKi9cbjIwNDE6XHRzdGF0aWMgaW5saW5lIGludCBza2JfY2xvbmVkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4yMDQyOlx0e1xuMjA0MzpcdFx0cmV0dXJuIHNrYi1cdTAwM2VjbG9uZWQgXHUwMDI2XHUwMDI2XG4yMDQ0Olx0XHQgICAgICAgKGF0b21pY19yZWFkKFx1MDAyNnNrYl9zaGluZm8oc2tiKS1cdTAwM2VkYXRhcmVmKSBcdTAwMjYgU0tCX0RBVEFSRUZfTUFTSykgIT0gMTtcbjIwNDU6XHR9XG4yMDQ2Olx0XG4yMDQ3Olx0c3RhdGljIGlubGluZSBpbnQgc2tiX3VuY2xvbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgcHJpKVxuMjA0ODpcdHtcbjIwNDk6XHRcdG1pZ2h0X3NsZWVwX2lmKGdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKHByaSkpO1xuMjA1MDpcdFxuMjA1MTpcdFx0aWYgKHNrYl9jbG9uZWQoc2tiKSlcbjIwNTI6XHRcdFx0cmV0dXJuIHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCAwLCBwcmkpO1xuMjA1MzpcdFxuMjA1NDpcdFx0cmV0dXJuIDA7XG4yMDU1Olx0fVxuMjA1NjpcdFxuMjA1NzpcdC8qIFRoaXMgdmFyaWFudCBvZiBza2JfdW5jbG9uZSgpIG1ha2VzIHN1cmUgc2tiLVx1MDAzZXRydWVzaXplXG4yMDU4Olx0ICogYW5kIHNrYl9lbmRfb2Zmc2V0KCkgYXJlIG5vdCBjaGFuZ2VkLCB3aGVuZXZlciBhIG5ldyBza2ItXHUwMDNlaGVhZCBpcyBuZWVkZWQuXG4yMDU5Olx0ICpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTE6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2NDUKCQkJCQkJCW91dHB1dDogMjYwCgkJCQkJCQl0aG91Z2h0czogMTQwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgU0tCIERhdGEgU2hhcmluZyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgaG93IHdlIGhhbmRsZSBTS0IgZGF0YSByZWZlcmVuY2VzLCBzcGVjaWZpY2FsbHkgd2hlbiBjbG9uaW5nIGFuZCBwb3RlbnRpYWxseSBmcmVlaW5nIHNoYXJlZCBkYXRhLiBJdCBpbnRyb2R1Y2VzIGBza2JfZGF0YXJlZl9iaWFzYCB3aGljaCBjbGV2ZXJseSBleHRyYWN0cyB0aGUgYmlhcyB2YWx1ZSByZWxhdGVkIHRvIHRoZSBgZGF0YXJlZmAgY291bnRlciBmb3Igbm9oZHIgU0tCcyBhbmQgdGhlIG5ldyBoZWxwZXIgYHNrYl9kYXRhX2lzX3NoYXJlZGAgZnVuY3Rpb24sIHdoaWNoIGRldGVybWluZXMgaWYgYW4gU0tCJiMzOTtzIGRhdGEgaXMgdHJ1bHkgc2hhcmVkIGFtb25nc3QgbXVsdGlwbGUgY2xvbmVzLCBvciBpcyB0aGUgc29sZSBvd25lciBvZiB0aGUgZGF0YS4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBsaWVzIGluIHJlcGxhY2luZyB0aGUgb2xkZXIgYHNrYl9jbG9uZWQoc2tiKWAgY2hlY2sgd2l0aCB0aGUgbmV3IGBza2JfZGF0YV9pc19zaGFyZWQoc2tiKWAgd2l0aGluIGBwc2tiX2V4cGFuZF9oZWFkYCBhbmQgYHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcmAuCgpUaGUgcmF0aW9uYWxlIGlzIGNsZWFyLiBUaGUgb2xkIGBza2JfY2xvbmVkKHNrYilgIGNoZWNrIHdhc24mIzM5O3QgYWNjdXJhdGVseSBoYW5kbGluZyBzY2VuYXJpb3Mgd2hlcmUgYW4gU0tCIG1pZ2h0ICphcHBlYXIqIGNsb25lZCAoZHVlIHRvIHRoZSBgY2xvbmVkYCBmbGFnIGJlaW5nIHNldCksIGJ1dCBhY3R1YWxseSBiZSB0aGUgKm9ubHkqIG93bmVyIG9mIGl0cyBkYXRhIGJlY2F1c2Ugb3RoZXIgY2xvbmVzIGhhdmUgYmVlbiBmcmVlZCBvciBpdCYjMzk7cyBhIG5vaGRyIHNrYiB3aXRoIGEgYmlhcy4gIFRoZSBgZGF0YXJlZmAgY291bnRlciwgaW4gdGhlc2UgY2FzZXMsIGNvdWxkIGJlIGVxdWFsIHRvIHRoZSBiaWFzLCBpbmRpY2F0aW5nIHRoYXQgd2UgY2FuIHNhZmVseSBmcmVlIHRoZSBoZWFkIHdpdGhvdXQgZXh0cmEgc3RlcHMuIFRoaXMgcGF0Y2ggZXNzZW50aWFsbHkgb3B0aW1pemVzIHRoZSByZWZjb3VudGluZyBsb2dpYywgZXNwZWNpYWxseSBmb3Igbm9oZHIgU0tCcywgYXZvaWRpbmcgdW5uZWNlc3Nhcnkgb3ZlcmhlYWQuIFRoZSBwcmltYXJ5IGZvY3VzIGlzIG1ha2luZyByZWZjb3VudGluZyBtb3JlIHByZWNpc2Ugd2hlbiBkZWFsaW5nIHdpdGggY2xvbmVkIFNLQnMsIHByZXZlbnRpbmcgdW5uZWNlc3Nhcnkgb3BlcmF0aW9ucyBsaWtlIGBza2Jfb3JwaGFuX2ZyYWdzYCwgZXRjLiBpZiB0aGUgZGF0YSBpcyBubyBsb25nZXIgc2hhcmVkLCB3aGljaCByZXN1bHRzIGluIGBza2JfZnJlZV9oZWFkYCBiZWluZyBjYWxsZWQsIGluc3RlYWQgb2YgdGhlIHNsb3dlciBvcGVyYXRpb24gb2YgcmVmY291bnRpbmcgYW5kIG9ycGhhbiBmcmFnbGlzdCBtYW5pcHVsYXRpb25zLgoKVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIG5vdyBpcywgd2hhdCBraW5kIG9mIGJ1Z3MgY2FuIHRoaXMgaW50cm9kdWNlPyAgV2VsbCwgdGhlIHByaW1hcnkgcmlza3MgYXJlIHJlZmNvdW50aW5nIGltYmFsYW5jZXMsIHdoaWNoIGNvdWxkIGxlYWQgdG8gdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyAoaWYgdGhlIGRhdGEgaXMgcHJlbWF0dXJlbHkgZnJlZWQgYmVjYXVzZSBgc2tiX2RhdGFfaXNfc2hhcmVkYCBpbmNvcnJlY3RseSByZXBvcnRzIHRoYXQgdGhlIGRhdGEgaXNuJiMzOTt0IHNoYXJlZCksIG1lbW9yeSBsZWFrcyAoaWYgd2UgaW5jb3JyZWN0bHkgYXNzdW1lIGRhdGEgaXMgbm90IHRoZSBzb2xlIG93bmVyIGFuZCB0aHVzIHJlZmNvdW50IGlzIG5vdCBmdWxseSBoYW5kbGVkKSwgb3IsIGNvbnZlcnNlbHksIGRvdWJsZS1mcmVlcyAoaWYgdGhlIGRhdGEgaXMgZnJlZWQgbXVsdGlwbGUgdGltZXMgZHVlIHRvIGEgbWlzdW5kZXJzdGFuZGluZyBvZiBvd25lcnNoaXApLiBLQVNBTiBpcyB0aGUga2V5IGhlcmUuIEFueSBpbmNvcnJlY3QgcmVmY291bnRpbmcgcmVzdWx0aW5nIGZyb20gdGhpcyBjaGFuZ2UgKndpbGwqIGJlIGRldGVjdGVkIGJ5IEtBU0FOIGFzIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIGVycm9ycy4KCkxldCYjMzk7cyBjYXJlZnVsbHkgYXNzZXNzIEtNU0FOIGFwcGxpY2FiaWxpdHkuICBXZSBuZWVkIHRvIHNlZSBpZiB3ZSYjMzk7cmUgY3JlYXRpbmcgb3IgbW9kaWZ5aW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS4gIExvb2tpbmcgY2xvc2VseSwgd2UmIzM5O3JlICpub3QqIGludHJvZHVjaW5nIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHMgdGhhdCBhcmUgdGhlbiBwYXNzZWQgdG8gdXNlcnNwYWNlICh3aGljaCB3b3VsZCB0cmlnZ2VyIGEgS01TQU4gY29uY2VybikuIFRoZSBjaGVja3MgcmVseSBvbiBzdGFuZGFyZCBTS0IgZmllbGRzIChgc2tiLSZndDtjbG9uZWRgLCBgc2tiLSZndDtub2hkcmAsIGBza2Jfc2hpbmZvKHNrYiktJmd0O2RhdGFyZWZgKSwgd2hpY2ggYXJlIGluaXRpYWxpemVkIGR1cmluZyBTS0IgY3JlYXRpb24gb3IgY2xvbmluZy4gVGhlcmUmIzM5O3Mgbm8gY29uZGl0aW9uYWwgbG9naWMgdGhhdCBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGlzIGFsc28gZG9lc24mIzM5O3QgYWZmZWN0IGFsbG9jYXRpb25zIG9yIGluaXRpYWxpemF0aW9uIG9mIG1vcmUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYW5kIHRoZXJlIGFyZSBubyBib3VuZGFyeSBtb2RpZmljYXRpb25zIHRoYXQgd291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIGJ5dGUgcmVhZHMuIFRoZSBwYXRjaCBmb2N1c2VzIG9uIG9wdGltaXppbmcgaG93IHNoYXJlZCBkYXRhIGlzIHJlY29nbml6ZWQsIGFuZCBob3cgdG8gZGVhbCB3aXRoIHRoZSByZWZlcmVuY2UgY291bnRpbmcgYXNzb2NpYXRlZCB3aXRoIHNoYXJlZCBkYXRhLiBXZSYjMzk7cmUgbm90IGNyZWF0aW5nIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBzZW5kaW5nIHRoaXMgZGF0YSB0byB1c2Vyc3BhY2UuCgpJbiBlc3NlbmNlLCB3ZSYjMzk7cmUgcmVmYWN0b3Jpbmcgc29tZSBpbnRlcm5hbCBsb2dpYyAoYHNrYl9kYXRhcmVmX2JpYXNgKSwgaW50cm9kdWNpbmcgYSBuZXcgZnVuY3Rpb24gKGBza2JfZGF0YV9pc19zaGFyZWRgKSwgYW5kIHJlcGxhY2luZyBhIGNoZWNrLiAgVGhlIGVudGlyZSBwYXRjaCBpcyBhcm91bmQgU0tCIGRhdGEgb3duZXJzaGlwIGFuZCByZWZjb3VudGluZy4gVGhlIGJ1Z3MgdGhhdCBjb3VsZCBhcmlzZSBoZXJlIGFyZSBlbnRpcmVseSByZWxhdGVkIHRvIHJlZmNvdW50IGVycm9ycy4gVGhlIHJlZmNvdW50aW5nIGJ1Z3MgYXJlIGRldGVjdGFibGUgYnkgS0FTQU4uCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBXZSBjYW4gYmUgY29uZmlkZW50IHRoYXQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2VycywgcGFydGljdWxhcmx5IEtBU0FOLCBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCBiZWNhdXNlLCBhcyBkZXRhaWxlZCBhYm92ZSwgYW55IGltcHJvcGVyIHJlZmNvdW50aW5nIHdpbGwgcmVzdWx0IGluIEtBU0FOIGRldGVjdGluZyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIG9yIG1lbW9yeSBsZWFrIGlzc3Vlcy4KCkxldCYjMzk7cyBtYWtlIHN1cmUgb3VyIHRvb2xpbmcgaXMgaGFwcHkgd2l0aCB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGBza2JfZGF0YXJlZl9iaWFzKClgIGFuZCBgc2tiX2RhdGFfaXNfc2hhcmVkKClgIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBkYXRhIGJ1ZmZlciAvIHNoYXJlZCBpbmZvIG9mIGFuIHNrX2J1ZmYgaXMgYWN0aXZlbHkgc2hhcmVkIGJ5IG90aGVyIGNsb25lcyBkdXJpbmcgaGVhZCByZWFsbG9jYXRpb24gKGBwc2tiX2V4cGFuZF9oZWFkYCBhbmQgYHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcmApLlxuXG5LTVNBTiB2cyBLQVNBTiBhbmFseXNpczpcbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGRhdGEgbGVuZ3RoIC8gYm91bmRzIGNhbGN1bGF0aW9ucyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGJ1ZmZlciBtZW1vcnkuIFRoZSBmaWVsZHMgYWNjZXNzZWQgKGBza2ItXHUwMDNlY2xvbmVkYCwgYHNrYi1cdTAwM2Vub2hkcmAsIGFuZCBgc2hpbmZvLVx1MDAzZWRhdGFyZWZgKSBhcmUgd2VsbC1kZWZpbmVkIGFuZCBpbml0aWFsaXplZCBza2IgbWV0YWRhdGEuXG4tIEtBU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSByaXNrcyBhc3NvY2lhdGVkIHdpdGggdGhlc2UgcmVmY291bnQgYW5kIHNoYXJpbmcgY2hlY2sgbW9kaWZpY2F0aW9ucyByZWxhdGUgdG8gc2tiIGRhdGEgb3duZXJzaGlwLCBzdWNoIGFzIHByZW1hdHVyZSBoZWFkIGZyZWVpbmcgb3IgaW1wcm9wZXIgZnJhZyByZWZjb3VudGluZyBsZWFkaW5nIHRvIFVzZS1BZnRlci1GcmVlIChVQUYpIG9yIERvdWJsZS1GcmVlIGVycm9ycy4gVGhlc2UgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgYXJlIGRpcmVjdGx5IGRldGVjdGVkIGJ5IEtBU0FOLlxuXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYHNrYl9kYXRhcmVmX2JpYXMoKWAgYW5kIGBza2JfZGF0YV9pc19zaGFyZWQoKWAgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGRhdGEgYnVmZmVyIC8gc2hhcmVkIGluZm8gb2YgYW4gc2tfYnVmZiBpcyBhY3RpdmVseSBzaGFyZWQgYnkgb3RoZXIgY2xvbmVzIGR1cmluZyBoZWFkIHJlYWxsb2NhdGlvbiAoYHBza2JfZXhwYW5kX2hlYWRgIGFuZCBgcHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyYCkuXG5cbktNU0FOIHZzIEtBU0FOIGFuYWx5c2lzOlxuLSBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkga2VybmVsIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZGF0YSBsZW5ndGggLyBib3VuZHMgY2FsY3VsYXRpb25zIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIG1lbW9yeS4gVGhlIGZpZWxkcyBhY2Nlc3NlZCAoYHNrYi1cdTAwM2VjbG9uZWRgLCBgc2tiLVx1MDAzZW5vaGRyYCwgYW5kIGBzaGluZm8tXHUwMDNlZGF0YXJlZmApIGFyZSB3ZWxsLWRlZmluZWQgYW5kIGluaXRpYWxpemVkIHNrYiBtZXRhZGF0YS5cbi0gS0FTQU4gYXBwbGljYWJpbGl0eTogVGhlIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCB0aGVzZSByZWZjb3VudCBhbmQgc2hhcmluZyBjaGVjayBtb2RpZmljYXRpb25zIHJlbGF0ZSB0byBza2IgZGF0YSBvd25lcnNoaXAsIHN1Y2ggYXMgcHJlbWF0dXJlIGhlYWQgZnJlZWluZyBvciBpbXByb3BlciBmcmFnIHJlZmNvdW50aW5nIGxlYWRpbmcgdG8gVXNlLUFmdGVyLUZyZWUgKFVBRikgb3IgRG91YmxlLUZyZWUgZXJyb3JzLiBUaGVzZSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBhcmUgZGlyZWN0bHkgZGV0ZWN0ZWQgYnkgS0FTQU4uXG5cblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMToyNjozMy40MjYwMTYwMzhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODEzNDY4MzIxMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHNrYl9leHBhbmRfaGVhZFwiLFxuICAgIFwicHNrYl9leHRyYWN0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBza2JfZGF0YXJlZl9iaWFzKClgIGFuZCBgc2tiX2RhdGFfaXNfc2hhcmVkKClgIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBkYXRhIGJ1ZmZlciAvIHNoYXJlZCBpbmZvIG9mIGFuIHNrX2J1ZmYgaXMgYWN0aXZlbHkgc2hhcmVkIGJ5IG90aGVyIGNsb25lcyBkdXJpbmcgaGVhZCByZWFsbG9jYXRpb24gKGBwc2tiX2V4cGFuZF9oZWFkYCBhbmQgYHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcmApLlxcblxcbktNU0FOIHZzIEtBU0FOIGFuYWx5c2lzOlxcbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGRhdGEgbGVuZ3RoIC8gYm91bmRzIGNhbGN1bGF0aW9ucyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGJ1ZmZlciBtZW1vcnkuIFRoZSBmaWVsZHMgYWNjZXNzZWQgKGBza2ItXFx1MDAzZWNsb25lZGAsIGBza2ItXFx1MDAzZW5vaGRyYCwgYW5kIGBzaGluZm8tXFx1MDAzZWRhdGFyZWZgKSBhcmUgd2VsbC1kZWZpbmVkIGFuZCBpbml0aWFsaXplZCBza2IgbWV0YWRhdGEuXFxuLSBLQVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoZXNlIHJlZmNvdW50IGFuZCBzaGFyaW5nIGNoZWNrIG1vZGlmaWNhdGlvbnMgcmVsYXRlIHRvIHNrYiBkYXRhIG93bmVyc2hpcCwgc3VjaCBhcyBwcmVtYXR1cmUgaGVhZCBmcmVlaW5nIG9yIGltcHJvcGVyIGZyYWcgcmVmY291bnRpbmcgbGVhZGluZyB0byBVc2UtQWZ0ZXItRnJlZSAoVUFGKSBvciBEb3VibGUtRnJlZSBlcnJvcnMuIFRoZXNlIG1lbW9yeSBzYWZldHkgaXNzdWVzIGFyZSBkaXJlY3RseSBkZXRlY3RlZCBieSBLQVNBTi5cXG5cXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBza2JfZGF0YXJlZl9iaWFzKClgIGFuZCBgc2tiX2RhdGFfaXNfc2hhcmVkKClgIHRvIGZpeCBkYXRhIHNoYXJpbmcgZGV0ZWN0aW9uIGZvciBza19idWZmcyB3aGVuIGBza2ItXFx1MDAzZW5vaGRyYCBpcyBzZXQsIHVwZGF0aW5nIGBwc2tiX2V4cGFuZF9oZWFkYCBhbmQgYHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcmAgdG8gdXNlIGBza2JfZGF0YV9pc19zaGFyZWRgIHJhdGhlciB0aGFuIGBza2JfY2xvbmVkYC4gVGhpcyBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgYnVmZmVyIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCByZWZlcmVuY2UgY291bnRpbmcgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDExOjI2OjMzLjQyNjAyMzAzOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1OTU4MTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNjNiMTQ2MGEwNDIwNjcwMjM1MTc3NjUzNzY1YmEzM2EwNDA5ZTkwOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxMToyNjozMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxcbmluZGV4IDQyMWY2ZmM0NTQ1MTEuLmVmZWVmMTQ4ZTFiYTUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc2tidWZmLmhcXG5AQCAtMTI5NSw2ICsxMjk1LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBza2JfdW5yZWYoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgaW50IHNrYl9kYXRhcmVmX2JpYXMoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRyZXR1cm4gc2tiLVxcdTAwM2Vub2hkciA/ICgxIFxcdTAwM2NcXHUwMDNjIFNLQl9EQVRBUkVGX1NISUZUKSArIDEgOiAxO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIGJvb2wgc2tiX2RhdGFfdW5yZWYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaGluZm8pXFxuIHtcXG5AQCAtMTMwMyw3ICsxMzA4LDcgQEAgc3RhdGljIGlubGluZSBib29sIHNrYl9kYXRhX3VucmVmKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGlmICghc2tiLVxcdTAwM2VjbG9uZWQpXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXG4tXFx0YmlhcyA9IHNrYi1cXHUwMDNlbm9oZHIgPyAoMSBcXHUwMDNjXFx1MDAzYyBTS0JfREFUQVJFRl9TSElGVCkgKyAxIDogMTtcXG4rXFx0YmlhcyA9IHNrYl9kYXRhcmVmX2JpYXMoc2tiKTtcXG4gXFxuIFxcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2c2hpbmZvLVxcdTAwM2VkYXRhcmVmKSA9PSBiaWFzKVxcbiBcXHRcXHRzbXBfcm1iKCk7XFxuQEAgLTIwMTksNiArMjAyNCwxMiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpza2JfZ2V0KHN0cnVjdCBza19idWZmICpza2IpXFxuICAqIElmIHVzZXJzID09IDEsIHdlIGFyZSB0aGUgb25seSBvd25lciBhbmQgY2FuIGF2b2lkIHJlZHVuZGFudCBhdG9taWMgY2hhbmdlcy5cXG4gICovXFxuIFxcbitzdGF0aWMgaW5saW5lIGJvb2wgc2tiX2RhdGFfaXNfc2hhcmVkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuK3tcXG4rXFx0cmV0dXJuIHNrYi1cXHUwMDNlY2xvbmVkIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgICBhdG9taWNfcmVhZChcXHUwMDI2c2tiX3NoaW5mbyhza2IpLVxcdTAwM2VkYXRhcmVmKSAhPSBza2JfZGF0YXJlZl9iaWFzKHNrYik7XFxuK31cXG4rXFxuIC8qKlxcbiAgKlxcdHNrYl9jbG9uZWQgLSBpcyB0aGUgYnVmZmVyIGEgY2xvbmVcXG4gICpcXHRAc2tiOiBidWZmZXIgdG8gY2hlY2tcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuY1xcbmluZGV4IDk2NmFmM2JlZWQ5NGQuLmY0YzA2NDVmOThkM2YgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvc2tidWZmLmNcXG4rKysgYi9uZXQvY29yZS9za2J1ZmYuY1xcbkBAIC0yMzMxLDcgKzIzMzEsNyBAQCBpbnQgcHNrYl9leHBhbmRfaGVhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmhlYWQsIGludCBudGFpbCxcXG4gXFx0ICogaXMgbm90IHdlIGNhbiBqdXN0IGRyb3AgdGhlIG9sZCBoZWFkIGFuZCBsZXQgdGhlIGV4aXN0aW5nIHJlZmNvdW50XFxuIFxcdCAqIGJlIHNpbmNlIGFsbCB3ZSBkaWQgaXMgcmVsb2NhdGUgdGhlIHZhbHVlc1xcbiBcXHQgKi9cXG4tXFx0aWYgKHNrYl9jbG9uZWQoc2tiKSkge1xcbitcXHRpZiAoc2tiX2RhdGFfaXNfc2hhcmVkKHNrYikpIHtcXG4gXFx0XFx0aWYgKHNrYl9vcnBoYW5fZnJhZ3Moc2tiLCBnZnBfbWFzaykpXFxuIFxcdFxcdFxcdGdvdG8gbm9mcmFncztcXG4gXFx0XFx0aWYgKHNrYl96Y29weShza2IpKVxcbkBAIC02ODU1LDcgKzY4NTUsNyBAQCBzdGF0aWMgaW50IHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1MzIgb2ZmLFxcbiBcXHQgICAgICAgc2tiX3NoaW5mbyhza2IpLFxcbiBcXHQgICAgICAgb2Zmc2V0b2Yoc3RydWN0IHNrYl9zaGFyZWRfaW5mbyxcXG4gXFx0XFx0XFx0ZnJhZ3Nbc2tiX3NoaW5mbyhza2IpLVxcdTAwM2Vucl9mcmFnc10pKTtcXG4tXFx0aWYgKHNrYl9jbG9uZWQoc2tiKSkge1xcbitcXHRpZiAoc2tiX2RhdGFfaXNfc2hhcmVkKHNrYikpIHtcXG4gXFx0XFx0LyogZHJvcCB0aGUgb2xkIGhlYWQgZ3JhY2VmdWxseSAqL1xcbiBcXHRcXHRpZiAoc2tiX29ycGhhbl9mcmFncyhza2IsIGdmcF9tYXNrKSkge1xcbiBcXHRcXHRcXHRza2Jfa2ZyZWVfaGVhZChkYXRhKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTE6MjY6MzMuODgyNzkwMDU0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNjk0OTE0OTA0MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHNrYl9leHBhbmRfaGVhZFwiLFxuICAgIFwicHNrYl9leHRyYWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBgc2tiX2RhdGFyZWZfYmlhcygpYCBhbmQgYHNrYl9kYXRhX2lzX3NoYXJlZCgpYCB0byBmaXggZGF0YSBzaGFyaW5nIGRldGVjdGlvbiBmb3Igc2tfYnVmZnMgd2hlbiBgc2tiLVxcdTAwM2Vub2hkcmAgaXMgc2V0LCB1cGRhdGluZyBgcHNrYl9leHBhbmRfaGVhZGAgYW5kIGBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXJgIHRvIHVzZSBgc2tiX2RhdGFfaXNfc2hhcmVkYCByYXRoZXIgdGhhbiBgc2tiX2Nsb25lZGAuIFRoaXMgbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGJ1ZmZlciBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2M2IxNDYwYTA0MjA2NzAyMzUxNzc2NTM3NjViYTMzYTA0MDllOTA4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMTE6MjY6MzIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxuaW5kZXggNDIxZjZmYzQ1NDUxMS4uZWZlZWYxNDhlMWJhNSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2tidWZmLmhcbisrKyBiL2luY2x1ZGUvbGludXgvc2tidWZmLmhcbkBAIC0xMjk1LDYgKzEyOTUsMTEgQEAgc3RhdGljIGlubGluZSBib29sIHNrYl91bnJlZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgaW50IHNrYl9kYXRhcmVmX2JpYXMoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbit7XG4rXHRyZXR1cm4gc2tiLVx1MDAzZW5vaGRyID8gKDEgXHUwMDNjXHUwMDNjIFNLQl9EQVRBUkVGX1NISUZUKSArIDEgOiAxO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIGJvb2wgc2tiX2RhdGFfdW5yZWYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdCAgc3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqc2hpbmZvKVxuIHtcbkBAIC0xMzAzLDcgKzEzMDgsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2tiX2RhdGFfdW5yZWYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmICghc2tiLVx1MDAzZWNsb25lZClcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4tXHRiaWFzID0gc2tiLVx1MDAzZW5vaGRyID8gKDEgXHUwMDNjXHUwMDNjIFNLQl9EQVRBUkVGX1NISUZUKSArIDEgOiAxO1xuK1x0YmlhcyA9IHNrYl9kYXRhcmVmX2JpYXMoc2tiKTtcbiBcbiBcdGlmIChhdG9taWNfcmVhZChcdTAwMjZzaGluZm8tXHUwMDNlZGF0YXJlZikgPT0gYmlhcylcbiBcdFx0c21wX3JtYigpO1xuQEAgLTIwMTksNiArMjAyNCwxMiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpza2JfZ2V0KHN0cnVjdCBza19idWZmICpza2IpXG4gICogSWYgdXNlcnMgPT0gMSwgd2UgYXJlIHRoZSBvbmx5IG93bmVyIGFuZCBjYW4gYXZvaWQgcmVkdW5kYW50IGF0b21pYyBjaGFuZ2VzLlxuICAqL1xuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBza2JfZGF0YV9pc19zaGFyZWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbit7XG4rXHRyZXR1cm4gc2tiLVx1MDAzZWNsb25lZCBcdTAwMjZcdTAwMjZcbitcdCAgICAgICBhdG9taWNfcmVhZChcdTAwMjZza2Jfc2hpbmZvKHNrYiktXHUwMDNlZGF0YXJlZikgIT0gc2tiX2RhdGFyZWZfYmlhcyhza2IpO1xuK31cbitcbiAvKipcbiAgKlx0c2tiX2Nsb25lZCAtIGlzIHRoZSBidWZmZXIgYSBjbG9uZVxuICAqXHRAc2tiOiBidWZmZXIgdG8gY2hlY2tcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jXG5pbmRleCA5NjZhZjNiZWVkOTRkLi5mNGMwNjQ1Zjk4ZDNmIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc2tidWZmLmNcbisrKyBiL25ldC9jb3JlL3NrYnVmZi5jXG5AQCAtMjMzMSw3ICsyMzMxLDcgQEAgaW50IHBza2JfZXhwYW5kX2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5oZWFkLCBpbnQgbnRhaWwsXG4gXHQgKiBpcyBub3Qgd2UgY2FuIGp1c3QgZHJvcCB0aGUgb2xkIGhlYWQgYW5kIGxldCB0aGUgZXhpc3RpbmcgcmVmY291bnRcbiBcdCAqIGJlIHNpbmNlIGFsbCB3ZSBkaWQgaXMgcmVsb2NhdGUgdGhlIHZhbHVlc1xuIFx0ICovXG4tXHRpZiAoc2tiX2Nsb25lZChza2IpKSB7XG4rXHRpZiAoc2tiX2RhdGFfaXNfc2hhcmVkKHNrYikpIHtcbiBcdFx0aWYgKHNrYl9vcnBoYW5fZnJhZ3Moc2tiLCBnZnBfbWFzaykpXG4gXHRcdFx0Z290byBub2ZyYWdzO1xuIFx0XHRpZiAoc2tiX3pjb3B5KHNrYikpXG5AQCAtNjg1NSw3ICs2ODU1LDcgQEAgc3RhdGljIGludCBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTMyIG9mZixcbiBcdCAgICAgICBza2Jfc2hpbmZvKHNrYiksXG4gXHQgICAgICAgb2Zmc2V0b2Yoc3RydWN0IHNrYl9zaGFyZWRfaW5mbyxcbiBcdFx0XHRmcmFnc1tza2Jfc2hpbmZvKHNrYiktXHUwMDNlbnJfZnJhZ3NdKSk7XG4tXHRpZiAoc2tiX2Nsb25lZChza2IpKSB7XG4rXHRpZiAoc2tiX2RhdGFfaXNfc2hhcmVkKHNrYikpIHtcbiBcdFx0LyogZHJvcCB0aGUgb2xkIGhlYWQgZ3JhY2VmdWxseSAqL1xuIFx0XHRpZiAoc2tiX29ycGhhbl9mcmFncyhza2IsIGdmcF9tYXNrKSkge1xuIFx0XHRcdHNrYl9rZnJlZV9oZWFkKGRhdGEpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTE6MjY6MzMuODgyNzkxNTg0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjE5NzQxNTMzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guXG5cbioqQW5hbHl6aW5nIHRoZSBTS0IgTW9kaWZpY2F0aW9uKipcblxuUmlnaHQsIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYm90aCBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAgYW5kIGBuZXQvY29yZS9za2J1ZmYuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHdlJ3JlIGxpa2VseSBkZWFsaW5nIHdpdGggYSBjb3JlIFNLQiBzdHJ1Y3R1cmUgY2hhbmdlIG9yIGFuIHVwZGF0ZSB0byBpdHMgY29yZSBtYW5hZ2VtZW50LiBHaXZlbiB0aGF0LCBsZXQncyBnbyBzdHJhaWdodCB0byB0aGUgcmVsZXZhbnQgZmlsZXMgYW5kIHBpbnBvaW50IHRoZSBhcmVhcyBvZiB0aGUgY2hhbmdlcyB0byBxdWlja2x5IGdldCBhIHNlbnNlIG9mIHdoYXQncyBoYXBwZW5pbmcuXG5cbkknbGwgdXNlIGByZWFkLWZpbGVgIG5vdy4gSSdtIGdvaW5nIHRvIGZvY3VzIG9uIGBuZXQvY29yZS9za2J1ZmYuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZXMgMjMzMSBhbmQgNjg1NS4gVGhvc2UgbGluZSBudW1iZXJzIGdpdmUgYSBnb29kIHJlZmVyZW5jZSBwb2ludCBmb3IgdGhlIGltcG9ydGFudCBwYXJ0cyBvZiB0aGUgY29kZS4gVGhlbiBJJ2xsIGNoZWNrIGBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oYCB0byBzZWUgaG93IHRoZSBkYXRhIHN0cnVjdHVyZXMgbWlnaHQgaGF2ZSBjaGFuZ2VkLiBXaXRoIG15IGtub3dsZWRnZSwgSSBjYW4gcXVpY2tseSBtYXAgdGhlIGNoYW5nZXMgZnJvbSB0aGUgaGVhZGVyIGludG8gdGhlIGtlcm5lbCdzIGZ1bmN0aW9ucyB0aGF0IG9wZXJhdGUgb24gdGhlIFNLQi4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgc28gSSBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3OTUsIk91dHB1dFRva2VucyI6NzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDExOjI2OjQwLjA4MDIwODU5MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMjAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMzIwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMzIwOlxcdFxcdC8qIENvcHkgb25seSByZWFsIGRhdGEuLi4gYW5kLCBhbGFzLCBoZWFkZXIuIFRoaXMgc2hvdWxkIGJlXFxuMjMyMTpcXHRcXHQgKiBvcHRpbWl6ZWQgZm9yIHRoZSBjYXNlcyB3aGVuIGhlYWRlciBpcyB2b2lkLlxcbjIzMjI6XFx0XFx0ICovXFxuMjMyMzpcXHRcXHRtZW1jcHkoZGF0YSArIG5oZWFkLCBza2ItXFx1MDAzZWhlYWQsIHNrYl90YWlsX3BvaW50ZXIoc2tiKSAtIHNrYi1cXHUwMDNlaGVhZCk7XFxuMjMyNDpcXHRcXG4yMzI1OlxcdFxcdG1lbWNweSgoc3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqKShkYXRhICsgc2l6ZSksXFxuMjMyNjpcXHRcXHQgICAgICAgc2tiX3NoaW5mbyhza2IpLFxcbjIzMjc6XFx0XFx0ICAgICAgIG9mZnNldG9mKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8sIGZyYWdzW3NrYl9zaGluZm8oc2tiKS1cXHUwMDNlbnJfZnJhZ3NdKSk7XFxuMjMyODpcXHRcXG4yMzI5OlxcdFxcdC8qXFxuMjMzMDpcXHRcXHQgKiBpZiBzaGluZm8gaXMgc2hhcmVkIHdlIG11c3QgZHJvcCB0aGUgb2xkIGhlYWQgZ3JhY2VmdWxseSwgYnV0IGlmIGl0XFxuMjMzMTpcXHRcXHQgKiBpcyBub3Qgd2UgY2FuIGp1c3QgZHJvcCB0aGUgb2xkIGhlYWQgYW5kIGxldCB0aGUgZXhpc3RpbmcgcmVmY291bnRcXG4yMzMyOlxcdFxcdCAqIGJlIHNpbmNlIGFsbCB3ZSBkaWQgaXMgcmVsb2NhdGUgdGhlIHZhbHVlc1xcbjIzMzM6XFx0XFx0ICovXFxuMjMzNDpcXHRcXHRpZiAoc2tiX2RhdGFfaXNfc2hhcmVkKHNrYikpIHtcXG4yMzM1OlxcdFxcdFxcdGlmIChza2Jfb3JwaGFuX2ZyYWdzKHNrYiwgZ2ZwX21hc2spKVxcbjIzMzY6XFx0XFx0XFx0XFx0Z290byBub2ZyYWdzO1xcbjIzMzc6XFx0XFx0XFx0aWYgKHNrYl96Y29weShza2IpKVxcbjIzMzg6XFx0XFx0XFx0XFx0bmV0X3pjb3B5X2dldChza2JfdWFyZyhza2IpKTtcXG4yMzM5OlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBza2Jfc2hpbmZvKHNrYiktXFx1MDAzZW5yX2ZyYWdzOyBpKyspXFxuMjM0MDpcXHRcXHRcXHRcXHRza2JfZnJhZ19yZWYoc2tiLCBpKTtcXG4yMzQxOlxcdFxcbjIzNDI6XFx0XFx0XFx0aWYgKHNrYl9oYXNfZnJhZ19saXN0KHNrYikpXFxuMjM0MzpcXHRcXHRcXHRcXHRza2JfY2xvbmVfZnJhZ2xpc3Qoc2tiKTtcXG4yMzQ0OlxcdFxcbjIzNDU6XFx0XFx0XFx0c2tiX3JlbGVhc2VfZGF0YShza2IsIFNLQl9DT05TVU1FRCk7XFxuMjM0NjpcXHRcXHR9IGVsc2Uge1xcbjIzNDc6XFx0XFx0XFx0c2tiX2ZyZWVfaGVhZChza2IpO1xcbjIzNDg6XFx0XFx0fVxcbjIzNDk6XFx0XFx0b2ZmID0gKGRhdGEgKyBuaGVhZCkgLSBza2ItXFx1MDAzZWhlYWQ7XFxuMjM1MDpcXHRcXG4yMzUxOlxcdFxcdHNrYi1cXHUwMDNlaGVhZCAgICAgPSBkYXRhO1xcbjIzNTI6XFx0XFx0c2tiLVxcdTAwM2VoZWFkX2ZyYWcgPSAwO1xcbjIzNTM6XFx0XFx0c2tiLVxcdTAwM2VkYXRhICAgICs9IG9mZjtcXG4yMzU0OlxcdFxcbjIzNTU6XFx0XFx0c2tiX3NldF9lbmRfb2Zmc2V0KHNrYiwgc2l6ZSk7XFxuMjM1NjpcXHQjaWZkZWYgTkVUX1NLQlVGRl9EQVRBX1VTRVNfT0ZGU0VUXFxuMjM1NzpcXHRcXHRvZmYgICAgICAgICAgID0gbmhlYWQ7XFxuMjM1ODpcXHQjZW5kaWZcXG4yMzU5OlxcdFxcdHNrYi1cXHUwMDNldGFpbFxcdCAgICAgICs9IG9mZjtcXG4yMzYwOlxcdFxcdHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUoc2tiLCBuaGVhZCk7XFxuMjM2MTpcXHRcXHRza2ItXFx1MDAzZWNsb25lZCAgID0gMDtcXG4yMzYyOlxcdFxcdHNrYi1cXHUwMDNlaGRyX2xlbiAgPSAwO1xcbjIzNjM6XFx0XFx0c2tiLVxcdTAwM2Vub2hkciAgICA9IDA7XFxuMjM2NDpcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWRhdGFyZWYsIDEpO1xcbjIzNjU6XFx0XFxuMjM2NjpcXHRcXHQvKiBJdCBpcyBub3QgZ2VuZXJhbGx5IHNhZmUgdG8gY2hhbmdlIHNrYi1cXHUwMDNldHJ1ZXNpemUuXFxuMjM2NzpcXHRcXHQgKiBGb3IgdGhlIG1vbWVudCwgd2UgcmVhbGx5IGNhcmUgb2YgcnggcGF0aCwgb3JcXG4yMzY4OlxcdFxcdCAqIHdoZW4gc2tiIGlzIG9ycGhhbmVkIChub3QgYXR0YWNoZWQgdG8gYSBzb2NrZXQpLlxcbjIzNjk6XFx0XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDExOjI2OjQwLjA4MDUxMTczMloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMzc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2ODQwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2ODQwOlxcdFxcdGRhdGEgPSBrbWFsbG9jX3Jlc2VydmUoXFx1MDAyNnNpemUsIGdmcF9tYXNrLCBOVU1BX05PX05PREUsIE5VTEwpO1xcbjY4NDE6XFx0XFx0aWYgKCFkYXRhKVxcbjY4NDI6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuNjg0MzpcXHRcXHRzaXplID0gU0tCX1dJVEhfT1ZFUkhFQUQoc2l6ZSk7XFxuNjg0NDpcXHRcXG42ODQ1OlxcdFxcdC8qIENvcHkgcmVhbCBkYXRhLCBhbmQgYWxsIGZyYWdzICovXFxuNjg0NjpcXHRcXHRza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhX29mZnNldChza2IsIG9mZiwgZGF0YSwgbmV3X2hsZW4pO1xcbjY4NDc6XFx0XFx0c2tiLVxcdTAwM2VsZW4gLT0gb2ZmO1xcbjY4NDg6XFx0XFxuNjg0OTpcXHRcXHQvKiBSZW1vdmUgU0tCRkxfTUFOQUdFRF9GUkFHX1JFRlMgaW5zdGVhZCBvZiB0cnlpbmcgdG8gaG9ub3VyIGl0XFxuNjg1MDpcXHRcXHQgKiB3aGlsZSByZWZjb3VudGluZyBmcmFncyBiZWxvdy5cXG42ODUxOlxcdFxcdCAqL1xcbjY4NTI6XFx0XFx0c2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYik7XFxuNjg1MzpcXHRcXG42ODU0OlxcdFxcdG1lbWNweSgoc3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqKShkYXRhICsgc2l6ZSksXFxuNjg1NTpcXHRcXHQgICAgICAgc2tiX3NoaW5mbyhza2IpLFxcbjY4NTY6XFx0XFx0ICAgICAgIG9mZnNldG9mKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8sXFxuNjg1NzpcXHRcXHRcXHRcXHRmcmFnc1tza2Jfc2hpbmZvKHNrYiktXFx1MDAzZW5yX2ZyYWdzXSkpO1xcbjY4NTg6XFx0XFx0aWYgKHNrYl9kYXRhX2lzX3NoYXJlZChza2IpKSB7XFxuNjg1OTpcXHRcXHRcXHQvKiBkcm9wIHRoZSBvbGQgaGVhZCBncmFjZWZ1bGx5ICovXFxuNjg2MDpcXHRcXHRcXHRpZiAoc2tiX29ycGhhbl9mcmFncyhza2IsIGdmcF9tYXNrKSkge1xcbjY4NjE6XFx0XFx0XFx0XFx0c2tiX2tmcmVlX2hlYWQoZGF0YSk7XFxuNjg2MjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG42ODYzOlxcdFxcdFxcdH1cXG42ODY0OlxcdFxcdFxcdGlmIChza2JfemNvcHkoc2tiKSlcXG42ODY1OlxcdFxcdFxcdFxcdG5ldF96Y29weV9nZXQoc2tiX3Vhcmcoc2tiKSk7XFxuNjg2NjpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc2tiX3NoaW5mbyhza2IpLVxcdTAwM2Vucl9mcmFnczsgaSsrKVxcbjY4Njc6XFx0XFx0XFx0XFx0c2tiX2ZyYWdfcmVmKHNrYiwgaSk7XFxuNjg2ODpcXHRcXHRcXHRpZiAoc2tiX2hhc19mcmFnX2xpc3Qoc2tiKSlcXG42ODY5OlxcdFxcdFxcdFxcdHNrYl9jbG9uZV9mcmFnbGlzdChza2IpO1xcbjY4NzA6XFx0XFx0XFx0c2tiX3JlbGVhc2VfZGF0YShza2IsIFNLQl9DT05TVU1FRCk7XFxuNjg3MTpcXHRcXHR9IGVsc2Uge1xcbjY4NzI6XFx0XFx0XFx0Lyogd2UgY2FuIHJldXNlIGV4aXN0aW5nIHJlY291bnQtIGFsbCB3ZSBkaWQgd2FzXFxuNjg3MzpcXHRcXHRcXHQgKiByZWxvY2F0ZSB2YWx1ZXNcXG42ODc0OlxcdFxcdFxcdCAqL1xcbjY4NzU6XFx0XFx0XFx0c2tiX2ZyZWVfaGVhZChza2IpO1xcbjY4NzY6XFx0XFx0fVxcbjY4Nzc6XFx0XFxuNjg3ODpcXHRcXHRza2ItXFx1MDAzZWhlYWQgPSBkYXRhO1xcbjY4Nzk6XFx0XFx0c2tiLVxcdTAwM2VkYXRhID0gZGF0YTtcXG42ODgwOlxcdFxcdHNrYi1cXHUwMDNlaGVhZF9mcmFnID0gMDtcXG42ODgxOlxcdFxcdHNrYl9zZXRfZW5kX29mZnNldChza2IsIHNpemUpO1xcbjY4ODI6XFx0XFx0c2tiX3NldF90YWlsX3BvaW50ZXIoc2tiLCBza2JfaGVhZGxlbihza2IpKTtcXG42ODgzOlxcdFxcdHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUoc2tiLCAwKTtcXG42ODg0OlxcdFxcdHNrYi1cXHUwMDNlY2xvbmVkID0gMDtcXG42ODg1OlxcdFxcdHNrYi1cXHUwMDNlaGRyX2xlbiA9IDA7XFxuNjg4NjpcXHRcXHRza2ItXFx1MDAzZW5vaGRyID0gMDtcXG42ODg3OlxcdFxcdGF0b21pY19zZXQoXFx1MDAyNnNrYl9zaGluZm8oc2tiKS1cXHUwMDNlZGF0YXJlZiwgMSk7XFxuNjg4ODpcXHRcXG42ODg5OlxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMToyNjo0MC4wODA4MTY2NDJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDM4NDA0NzA4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgcXVlc3Rpb25zOlxuXG4qKkFuYWx5emluZyBgc2tiX2RhdGFfaXNfc2hhcmVkYCBhbmQgdGhlIGBza2JfY2xvbmVkYCBDaGFuZ2UqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGNvcmUgb2YgdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBgc2tiX2RhdGFfaXNfc2hhcmVkYCBhbmQsIHNwZWNpZmljYWxseSwgd2h5IHRoZSBgc2tiX2Nsb25lZChza2IpYCBjaGVjayB3YXMgbW9kaWZpZWQuIEkga25vdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBkYXRhIHNoYXJpbmcgYW5kIGNsb25pbmcgd2l0aGluIGBza19idWZmYCBzdHJ1Y3R1cmVzLlxuXG5NeSBpbW1lZGlhdGUgcGxhbiBpcyB0byBleGFtaW5lIHRoZSByZWxldmFudCBkZWZpbml0aW9ucyB3aXRoaW4gYGluY2x1ZGUvbGludXgvc2tidWZmLmhgLiBJJ2xsIGZvY3VzIG9uIHRoZSBzZWN0aW9ucyBhcm91bmQgbGluZXMgMTI5MC0xMzIwIGFuZCAyMDE1LTIwNDAuIE15IGh5cG90aGVzaXMgaXMgdGhhdCB0aGUgY2hhbmdlIGxpa2VseSByZXZvbHZlcyBhcm91bmQgb3B0aW1pc2luZywgc2ltcGxpZnlpbmcgb3IgY2xhcmlmeWluZyB0aGUgbG9naWMgcmVsYXRlZCB0byByZWZlcmVuY2UgY291bnRpbmcsIGRhdGEgc2hhcmluZywgb3IgcGVyaGFwcyBldmVuIGluIHRoZSBoYW5kbGluZyBvZiBmcmFnbWVudGVkIHNrYnMsIHBhcnRpY3VsYXJseSBpbiB0aGUgY29udGV4dCBvZiByZWNlbnQgbmV0d29yayBzdGFjayBpbXByb3ZlbWVudHMgb3Igc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMuIEkgd2lsbCBiZSBsb29raW5nIGZvciBjb25kaXRpb25hbCBjb21waWxhdGlvbnMsIGlubGluZSBmdW5jdGlvbnMsIGFuZCBtYWNybyBkZWZpbml0aW9ucyByZWxhdGVkIHRvIGRhdGEgc2hhcmluZyBhbmQgY2xvbmluZy4gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSB1c2Ugb2YgYXRvbWljIG9wZXJhdGlvbnMgYW5kIG1lbW9yeSBiYXJyaWVycywgYmVjYXVzZSB0aGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgc3VidGxlIGJ1dCBjcml0aWNhbCBwZXJmb3JtYW5jZSBhbmQgY29uY3VycmVuY3kgaXNzdWVzIGFyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDkxMywiT3V0cHV0VG9rZW5zIjo3NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTE6MjY6NTAuNDY0ODY2MDY5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEyMTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvc2tidWZmLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTI5MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI5MDpcXHRcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0RFQlVHX05FVCkgXFx1MDAyNlxcdTAwMjYgbGlrZWx5KHJlZmNvdW50X3JlYWQoXFx1MDAyNnNrYi1cXHUwMDNldXNlcnMpID09IDEpKVxcbjEyOTE6XFx0XFx0XFx0c21wX3JtYigpO1xcbjEyOTI6XFx0XFx0ZWxzZSBpZiAobGlrZWx5KCFyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNnNrYi1cXHUwMDNldXNlcnMpKSlcXG4xMjkzOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4xMjk0OlxcdFxcbjEyOTU6XFx0XFx0cmV0dXJuIHRydWU7XFxuMTI5NjpcXHR9XFxuMTI5NzpcXHRcXG4xMjk4OlxcdHN0YXRpYyBpbmxpbmUgaW50IHNrYl9kYXRhcmVmX2JpYXMoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xMjk5OlxcdHtcXG4xMzAwOlxcdFxcdHJldHVybiBza2ItXFx1MDAzZW5vaGRyID8gKDEgXFx1MDAzY1xcdTAwM2MgU0tCX0RBVEFSRUZfU0hJRlQpICsgMSA6IDE7XFxuMTMwMTpcXHR9XFxuMTMwMjpcXHRcXG4xMzAzOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBza2JfZGF0YV91bnJlZihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbjEzMDQ6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaGluZm8pXFxuMTMwNTpcXHR7XFxuMTMwNjpcXHRcXHRpbnQgYmlhcztcXG4xMzA3OlxcdFxcbjEzMDg6XFx0XFx0aWYgKCFza2ItXFx1MDAzZWNsb25lZClcXG4xMzA5OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjEzMTA6XFx0XFxuMTMxMTpcXHRcXHRiaWFzID0gc2tiX2RhdGFyZWZfYmlhcyhza2IpO1xcbjEzMTI6XFx0XFxuMTMxMzpcXHRcXHRpZiAoYXRvbWljX3JlYWQoXFx1MDAyNnNoaW5mby1cXHUwMDNlZGF0YXJlZikgPT0gYmlhcylcXG4xMzE0OlxcdFxcdFxcdHNtcF9ybWIoKTtcXG4xMzE1OlxcdFxcdGVsc2UgaWYgKGF0b21pY19zdWJfcmV0dXJuKGJpYXMsIFxcdTAwMjZzaGluZm8tXFx1MDAzZWRhdGFyZWYpKVxcbjEzMTY6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjEzMTc6XFx0XFxuMTMxODpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4xMzE5OlxcdH1cXG4xMzIwOlxcdFxcbjEzMjE6XFx0dm9pZCBfX2ZpeF9hZGRyZXNzIHNrX3NrYl9yZWFzb25fZHJvcChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuMTMyMjpcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbjEzMjM6XFx0XFx0XFx0XFx0XFx0ICAgICAgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKTtcXG4xMzI0OlxcdFxcbjEzMjU6XFx0c3RhdGljIGlubGluZSB2b2lkXFxuMTMyNjpcXHRrZnJlZV9za2JfcmVhc29uKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbilcXG4xMzI3OlxcdHtcXG4xMzI4OlxcdFxcdHNrX3NrYl9yZWFzb25fZHJvcChOVUxMLCBza2IsIHJlYXNvbik7XFxuMTMyOTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDExOjI2OjUwLjQ2NTA3OTc5OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3Mzk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwMTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIwMTU6XFx0ICpcXHR0byB0aGUgYnVmZmVyLlxcbjIwMTY6XFx0ICovXFxuMjAxNzpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpza2JfZ2V0KHN0cnVjdCBza19idWZmICpza2IpXFxuMjAxODpcXHR7XFxuMjAxOTpcXHRcXHRyZWZjb3VudF9pbmMoXFx1MDAyNnNrYi1cXHUwMDNldXNlcnMpO1xcbjIwMjA6XFx0XFx0cmV0dXJuIHNrYjtcXG4yMDIxOlxcdH1cXG4yMDIyOlxcdFxcbjIwMjM6XFx0LypcXG4yMDI0OlxcdCAqIElmIHVzZXJzID09IDEsIHdlIGFyZSB0aGUgb25seSBvd25lciBhbmQgY2FuIGF2b2lkIHJlZHVuZGFudCBhdG9taWMgY2hhbmdlcy5cXG4yMDI1OlxcdCAqL1xcbjIwMjY6XFx0XFxuMjAyNzpcXHRzdGF0aWMgaW5saW5lIGJvb2wgc2tiX2RhdGFfaXNfc2hhcmVkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuMjAyODpcXHR7XFxuMjAyOTpcXHRcXHRyZXR1cm4gc2tiLVxcdTAwM2VjbG9uZWQgXFx1MDAyNlxcdTAwMjZcXG4yMDMwOlxcdFxcdCAgICAgICBhdG9taWNfcmVhZChcXHUwMDI2c2tiX3NoaW5mbyhza2IpLVxcdTAwM2VkYXRhcmVmKSAhPSBza2JfZGF0YXJlZl9iaWFzKHNrYik7XFxuMjAzMTpcXHR9XFxuMjAzMjpcXHRcXG4yMDMzOlxcdC8qKlxcbjIwMzQ6XFx0ICpcXHRza2JfY2xvbmVkIC0gaXMgdGhlIGJ1ZmZlciBhIGNsb25lXFxuMjAzNTpcXHQgKlxcdEBza2I6IGJ1ZmZlciB0byBjaGVja1xcbjIwMzY6XFx0ICpcXG4yMDM3OlxcdCAqXFx0UmV0dXJucyB0cnVlIGlmIHRoZSBidWZmZXIgd2FzIGdlbmVyYXRlZCB3aXRoIHNrYl9jbG9uZSgpIGFuZCBpc1xcbjIwMzg6XFx0ICpcXHRvbmUgb2YgbXVsdGlwbGUgc2hhcmVkIGNvcGllcyBvZiB0aGUgYnVmZmVyLiBDbG9uZWQgYnVmZmVycyBhcmVcXG4yMDM5OlxcdCAqXFx0c2hhcmVkIGRhdGEgc28gbXVzdCBub3QgYmUgd3JpdHRlbiB0byB1bmRlciBub3JtYWwgY2lyY3Vtc3RhbmNlcy5cXG4yMDQwOlxcdCAqL1xcbjIwNDE6XFx0c3RhdGljIGlubGluZSBpbnQgc2tiX2Nsb25lZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjIwNDI6XFx0e1xcbjIwNDM6XFx0XFx0cmV0dXJuIHNrYi1cXHUwMDNlY2xvbmVkIFxcdTAwMjZcXHUwMDI2XFxuMjA0NDpcXHRcXHQgICAgICAgKGF0b21pY19yZWFkKFxcdTAwMjZza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWRhdGFyZWYpIFxcdTAwMjYgU0tCX0RBVEFSRUZfTUFTSykgIT0gMTtcXG4yMDQ1OlxcdH1cXG4yMDQ2OlxcdFxcbjIwNDc6XFx0c3RhdGljIGlubGluZSBpbnQgc2tiX3VuY2xvbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgcHJpKVxcbjIwNDg6XFx0e1xcbjIwNDk6XFx0XFx0bWlnaHRfc2xlZXBfaWYoZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcocHJpKSk7XFxuMjA1MDpcXHRcXG4yMDUxOlxcdFxcdGlmIChza2JfY2xvbmVkKHNrYikpXFxuMjA1MjpcXHRcXHRcXHRyZXR1cm4gcHNrYl9leHBhbmRfaGVhZChza2IsIDAsIDAsIHByaSk7XFxuMjA1MzpcXHRcXG4yMDU0OlxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMToyNjo1MC40NjUzNTU2MDlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjk4NjAzNTg2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENsb25lZCBTS0IgQ29uZGl0aW9uKipcblxuT2theSwgaGVyZSB3ZSBnbywgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29kZSdzIHVzaW5nIGBza2JfY2xvbmVkKHNrYilgIHRvIGRldGVybWluZSBpZiBhIHNvY2tldCBidWZmZXIgKHNrYikgaXMgYSBjbG9uZSwgcmlnaHQ/IEFuZCBpdCBkb2VzIHRoYXQgYnkgY2hlY2tpbmcgYChhdG9taWNfcmVhZChcdTAwMjZza2Jfc2hpbmZvKHNrYiktXHUwMDNlZGF0YXJlZikgXHUwMDI2IFNLQl9EQVRBUkVGX01BU0spICE9IDFgLiBCdXQsIGhlcmUncyB0aGUga2lja2VyOiB3aGVuIGBza2ItXHUwMDNlbm9oZHJgIGlzIHNldCDigJMgd2hpY2ggaGFwcGVucyBpbiBwbGFjZXMgbGlrZSBgc2tiX2hlYWRlcl9yZWxlYXNlYCB3aGVyZSB3ZSAqYWRkKiBgKDEgXHUwMDNjXHUwMDNjIFNLQl9EQVRBUkVGX1NISUZUKWAgdG8gdGhlIGRhdGFyZWYgLSB0aGlzIGNoZWNrICpvbmx5KiBsb29rcyBhdCBgXHUwMDI2IFNLQl9EQVRBUkVGX01BU0sgIT0gMWAuIFRoYXQgZmVlbHMuLi4gaW5jb21wbGV0ZS5cblxuTXkgY29uY2VybiBpcyB3aGF0IGhhcHBlbnMgaWYgZGF0YXJlZiBpcyBgKDEgXHUwMDNjXHUwMDNjIFNLQl9EQVRBUkVGX1NISUZUKSArIDFgPyAgQmVjYXVzZSB0aGVuIHRoZSBBTkQgb3BlcmF0aW9uIHdpdGggYFNLQl9EQVRBUkVGX01BU0tgIHJlc3VsdHMgaW4gYDFgLiBXaGljaCBtZWFucyBgc2tiX2Nsb25lZChza2IpYCB3b3VsZCByZXR1cm4gYDBgIChmYWxzZSkgZXZlbiB0aG91Z2ggd2UgaGF2ZSBhIGNsb25lIChvciBoZWFkZXIgY2xvbmUpIGFuZCBgc2tiLVx1MDAzZW5vaGRyYCBpcyB0cnVlLiBUaGF0J3MgYSBkZWZpbml0ZSBlZGdlIGNhc2UuIFRoaXMgY2FuJ3QgYmUgcmlnaHQhIFdoYXQncyBnb2luZyBvbiB3aXRoIHRoZSBkYXRhcmVmIGluIHRoYXQgc2l0dWF0aW9uP1xuXG5TbywgaWYgYHNrYi1cdTAwM2Vub2hkcmAgaXMgdHJ1ZSwgYW5kIHdlICpkbyogaGF2ZSBhIGNsb25lIG9yIGEgaGVhZGVyIGNsb25lLCB3aGF0IGV4YWN0bHkgaXMgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kPyBJdCBzZWVtcyBsaWtlIHRoaXMgc2l0dWF0aW9uIGlzIGluY29ycmVjdGx5IGV2YWx1YXRlZCBieSB0aGlzIGNoZWNrLiBMZXQncyBkaWcgZGVlcGVyLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZXhhbWluaW5nIGBza2JfaGVhZGVyX3JlbGVhc2VgIGFuZCB0aGUgYG5vaGRyYCBmbGFnJ3MgdXNhZ2UgaW4gYHNrYnVmZi5jYCBhbmQgZWxzZXdoZXJlLiAgQSBxdWljayBzZWFyY2ggZm9yIGBub2hkcmAgYW5kIGBTS0JfREFUQVJFRl9TSElGVGAgd2lsbCBob3BlZnVsbHkgaWxsdW1pbmF0ZSB0aGUgY29udHJvbCBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTM3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTE6Mjc6MDMuNDUxMzkzNDUxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjQzNzk5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJTS0JfREFUQVJFRl9TSElGVHxub2hkclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfbWRiLmM9NzA9aW50IGJyX3Jwb3J0c19maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTA5LVxcbm5ldC9icmlkZ2UvYnJfbWRiLmM6MTEwOlxcdFxcdGlmIChubGFfcHV0X25vaGRyKHNrYiwgc2l6ZW9mKHUzMiksIFxcdTAwMjZwLVxcdTAwM2VkZXYtXFx1MDAzZWlmaW5kZXgpIHx8XFxubmV0L2JyaWRnZS9icl9tZGIuYy0xMTEtXFx0XFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgTURCQV9ST1VURVJfUEFUVFJfVElNRVIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jPTIzMj1zdGF0aWMgaW50IF9fbWRiX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tZGIuYy0yNzEtXFxubmV0L2JyaWRnZS9icl9tZGIuYzoyNzI6XFx0aWYgKG5sYV9wdXRfbm9oZHIoc2tiLCBzaXplb2YoZSksIFxcdTAwMjZlKSB8fFxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMjczLVxcdCAgICBubGFfcHV0X3UzMihza2IsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jPTU2NT1zdGF0aWMgaW50IG5sbXNnX3BvcHVsYXRlX3J0cl9maWxsKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jLTU4OC1cXHRcXHRnb3RvIGVuZDtcXG5uZXQvYnJpZGdlL2JyX21kYi5jOjU4OTpcXHRpZiAobmxhX3B1dF9ub2hkcihza2IsIHNpemVvZih1MzIpLCBcXHUwMDI2aWZpbmRleCkpIHtcXG5uZXQvYnJpZGdlL2JyX21kYi5jLTU5MC1cXHRcXHRubGFfbmVzdF9jYW5jZWwoc2tiLCBwb3J0X25lc3QpO1xcbi0tXFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM9MjE2PXN0YXRpYyB2b2lkIHRyYWNlX2Ryb3BfY29tbW9uKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmxvY2F0aW9uKVxcbi0tXFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtMjUwLVxcdCAqL1xcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jOjI1MTpcXHRfX25sYV9yZXNlcnZlX25vaGRyKGRza2IsIHNpemVvZihzdHJ1Y3QgbmV0X2RtX2Ryb3BfcG9pbnQpKTtcXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy0yNTItXFx0bmxhLVxcdTAwM2VubGFfbGVuICs9IE5MQV9BTElHTihzaXplb2Yoc3RydWN0IG5ldF9kbV9kcm9wX3BvaW50KSk7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0xNjEwPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqX19za2JfY2xvbmUoc3RydWN0IHNrX2J1ZmYgKm4sIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0xNjIwLVxcdEMobWFjX2xlbik7XFxubmV0L2NvcmUvc2tidWZmLmM6MTYyMTpcXHRuLVxcdTAwM2VoZHJfbGVuID0gc2tiLVxcdTAwM2Vub2hkciA/IHNrYl9oZWFkcm9vbShza2IpIDogc2tiLVxcdTAwM2VoZHJfbGVuO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTE2MjItXFx0bi1cXHUwMDNlY2xvbmVkID0gMTtcXG5uZXQvY29yZS9za2J1ZmYuYzoxNjIzOlxcdG4tXFx1MDAzZW5vaGRyID0gMDtcXG5uZXQvY29yZS9za2J1ZmYuYy0xNjI0LVxcdG4tXFx1MDAzZXBlZWtlZCA9IDA7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0yMjk3PWludCBwc2tiX2V4cGFuZF9oZWFkKHN0cnVjdCBza19idWZmICpza2IsIGludCBuaGVhZCwgaW50IG50YWlsLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjM2Mi1cXHRza2ItXFx1MDAzZWhkcl9sZW4gID0gMDtcXG5uZXQvY29yZS9za2J1ZmYuYzoyMzYzOlxcdHNrYi1cXHUwMDNlbm9oZHIgICAgPSAwO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTIzNjQtXFx0YXRvbWljX3NldChcXHUwMDI2c2tiX3NoaW5mbyhza2IpLVxcdTAwM2VkYXRhcmVmLCAxKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTY4Mjk9c3RhdGljIGludCBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTMyIG9mZixcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTY4ODUtXFx0c2tiLVxcdTAwM2VoZHJfbGVuID0gMDtcXG5uZXQvY29yZS9za2J1ZmYuYzo2ODg2OlxcdHNrYi1cXHUwMDNlbm9oZHIgPSAwO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTY4ODctXFx0YXRvbWljX3NldChcXHUwMDI2c2tiX3NoaW5mbyhza2IpLVxcdTAwM2VkYXRhcmVmLCAxKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTY5NTA9c3RhdGljIGludCBwc2tiX2NhcnZlX2luc2lkZV9ub25saW5lYXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTMyIG9mZixcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTcwMjUtXFx0c2tiLVxcdTAwM2VoZHJfbGVuICA9IDA7XFxubmV0L2NvcmUvc2tidWZmLmM6NzAyNjpcXHRza2ItXFx1MDAzZW5vaGRyICAgID0gMDtcXG5uZXQvY29yZS9za2J1ZmYuYy03MDI3LVxcdHNrYi1cXHUwMDNlbGVuIC09IG9mZjtcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0xNjc2PWludCBmaWJfYWRkX25leHRob3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IGZpYl9uaF9jb21tb24gKm5oYyxcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xNjgyLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoxNjgzOlxcdHJ0bmggPSBubGFfcmVzZXJ2ZV9ub2hkcihza2IsIHNpemVvZigqcnRuaCkpO1xcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xNjg0LVxcdGlmICghcnRuaClcXG4tLVxcbm5ldC9pcHY0L2lwbXJfYmFzZS5jPTIxNj1pbnQgbXJfZmlsbF9tcm91dGUoc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9pcG1yX2Jhc2UuYy0yNTMtXFxubmV0L2lwdjQvaXBtcl9iYXNlLmM6MjU0OlxcdFxcdFxcdG5ocCA9IG5sYV9yZXNlcnZlX25vaGRyKHNrYiwgc2l6ZW9mKCpuaHApKTtcXG5uZXQvaXB2NC9pcG1yX2Jhc2UuYy0yNTUtXFx0XFx0XFx0aWYgKCFuaHApIHtcXG4tLVxcbm5ldC9tcGxzL2FmX21wbHMuYz0yMDM4PXN0YXRpYyBpbnQgbXBsc19kdW1wX3JvdXRlKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwb3J0aWQsIHUzMiBzZXEsIGludCBldmVudCxcXG4tLVxcbm5ldC9tcGxzL2FmX21wbHMuYy0yMTAzLVxcbm5ldC9tcGxzL2FmX21wbHMuYzoyMTA0OlxcdFxcdFxcdHJ0bmggPSBubGFfcmVzZXJ2ZV9ub2hkcihza2IsIHNpemVvZigqcnRuaCkpO1xcbm5ldC9tcGxzL2FmX21wbHMuYy0yMTA1LVxcdFxcdFxcdGlmICghcnRuaClcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz0xNzY2PXN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF9kZWZhdWx0X2xpbWl0KHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbyxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xNzczLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxNzc0OlxcdHJldHVybiBubGFfcHV0X25vaGRyKHJlcGx5LCBzaXplb2Yoem9uZV9saW1pdCksIFxcdTAwMjZ6b25lX2xpbWl0KTtcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTc3NS19XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MTc3Nz1zdGF0aWMgaW50IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xNzkxLVxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmNvbm5jb3VudF9rZXkpO1xcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxNzkyOlxcdHJldHVybiBubGFfcHV0X25vaGRyKHJlcGx5LCBzaXplb2Yoem9uZV9saW1pdCksIFxcdTAwMjZ6b25lX2xpbWl0KTtcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTc5My19XFxuLS1cXG5uZXQvcGFja2V0L2RpYWcuYz0zOD1zdGF0aWMgaW50IHBkaWFnX3B1dF9tY2xpc3QoY29uc3Qgc3RydWN0IHBhY2tldF9zb2NrICpwbywgc3RydWN0IHNrX2J1ZmYgKm5sc2tiKVxcbi0tXFxubmV0L3BhY2tldC9kaWFnLmMtNTAtXFxubmV0L3BhY2tldC9kaWFnLmM6NTE6XFx0XFx0ZG1sID0gbmxhX3Jlc2VydmVfbm9oZHIobmxza2IsIHNpemVvZigqZG1sKSk7XFxubmV0L3BhY2tldC9kaWFnLmMtNTItXFx0XFx0aWYgKCFkbWwpIHtcXG4tLVxcbm5ldC9zY2hlZC9lbV9jYW5pZC5jPTE5Mz1zdGF0aWMgaW50IGVtX2NhbmlkX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjZl9lbWF0Y2ggKm0pXFxuLS1cXG5uZXQvc2NoZWQvZW1fY2FuaWQuYy0yMDAtXFx0ICovXFxubmV0L3NjaGVkL2VtX2NhbmlkLmM6MjAxOlxcdGlmIChubGFfcHV0X25vaGRyKHNrYiwgc2l6ZW9mKHN0cnVjdCBjYW5fZmlsdGVyKSAqIGNtLVxcdTAwM2VydWxlc19jb3VudCxcXG5uZXQvc2NoZWQvZW1fY2FuaWQuYy0yMDItXFx0ICAgIFxcdTAwMjZjbS1cXHUwMDNlcnVsZXNfcmF3KSBcXHUwMDNjIDApXFxuLS1cXG5uZXQvc2NoZWQvZW1fdGV4dC5jPTExMz1zdGF0aWMgaW50IGVtX3RleHRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNmX2VtYXRjaCAqbSlcXG4tLVxcbm5ldC9zY2hlZC9lbV90ZXh0LmMtMTI1LVxcbm5ldC9zY2hlZC9lbV90ZXh0LmM6MTI2OlxcdGlmIChubGFfcHV0X25vaGRyKHNrYiwgc2l6ZW9mKGNvbmYpLCBcXHUwMDI2Y29uZikgXFx1MDAzYyAwKVxcbm5ldC9zY2hlZC9lbV90ZXh0LmMtMTI3LVxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbi0tXFxubmV0L3NjaGVkL2VtYXRjaC5jPTQzNz1pbnQgdGNmX2VtX3RyZWVfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNmX2VtYXRjaF90cmVlICp0cmVlLCBpbnQgdGx2KVxcbi0tXFxubmV0L3NjaGVkL2VtYXRjaC5jLTQ3Mi1cXHRcXHRcXHR1MzIgdSA9IGVtLVxcdTAwM2VkYXRhO1xcbm5ldC9zY2hlZC9lbWF0Y2guYzo0NzM6XFx0XFx0XFx0bmxhX3B1dF9ub2hkcihza2IsIHNpemVvZih1KSwgXFx1MDAyNnUpO1xcbm5ldC9zY2hlZC9lbWF0Y2guYy00NzQtXFx0XFx0fSBlbHNlIGlmIChlbS1cXHUwMDNlZGF0YWxlbiBcXHUwMDNlIDApXFxubmV0L3NjaGVkL2VtYXRjaC5jOjQ3NTpcXHRcXHRcXHRubGFfcHV0X25vaGRyKHNrYiwgZW0tXFx1MDAzZWRhdGFsZW4sICh2b2lkICopIGVtLVxcdTAwM2VkYXRhKTtcXG5uZXQvc2NoZWQvZW1hdGNoLmMtNDc2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMToyNzowMy41Mzc4MzY0MzVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDIzNjgxOTYwOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gYHNrYl9oZWFkZXJfcmVsZWFzZWAqKlxuXG5Pa2F5LCBsZXQncyBwdWxsIHVwIHRoZSBkZWZpbml0aW9uIG9mIGBza2JfaGVhZGVyX3JlbGVhc2VgLiBJIGtub3cgaXQncyBpbiBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAsIHNvIGxldCdzIGdldCB0aGF0IGZpbGUgb3Blbi4gSSdtIHByaW1hcmlseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIGBza2JgIChzb2NrZXQgYnVmZmVyKSBzdHJ1Y3R1cmUgYW5kIGl0cyBoZWFkZXIuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50cmljYWNpZXMgb2YgaGVhZGVyIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBrZXJuZWwncyBuZXR3b3JrIHN0YWNrLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBzZWUgaG93IG1lbW9yeSBpcyBkZWFsbG9jYXRlZCBhbmQsIGFuZCB1bmRlciB3aGF0IGNpcmN1bXN0YW5jZXMgdGhlIGRhdGEgYnVmZmVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgc29ja2V0IGJ1ZmZlciBpcyB1cGRhdGVkIHRvIHBvaW50IHRvIHRoZSBuZXcgZGF0YS4gSSBhbHNvIHdhbnQgdG8gbWFrZSBzdXJlIEkgYW0gZnVsbHkgdXAgdG8gc3BlZWQgb24gd2hlbiB0aGlzIGlzIGNhbGxlZCwgYW5kIHdoYXQgdGhlIGVmZmVjdCBpcyBvbiByZWZlcmVuY2VzIHRvIHRoZSBidWZmZXIsIHRvIGF2b2lkIGRvdWJsZSBmcmVlaW5nLiBUaGUgaW50ZW50aW9uIGlzIHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCBtZW1vcnkgbGVha3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1MjUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMToyNzo0NS45MDYwMzU1NjlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3ODIzMTAyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza2JfaGVhZGVyX3JlbGVhc2V8U0tCX0RBVEFSRUZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9za2J1ZmYuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTU5Mz1zdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNjQxLSAqIFRoZSBjcmVhdG9yIG9mIHRoZSBza2IgKGUuZy4gVENQKSBtYXJrcyBpdHMgc2tiIGFzIFxcdTAwMjZza19idWZmLm5vaGRyXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo2NDI6ICogKHZpYSBfX3NrYl9oZWFkZXJfcmVsZWFzZSgpKS4gQW55IGNsb25lIGNyZWF0ZWQgZnJvbSBtYXJrZWQgc2tiIHdpbGwgZ2V0XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC02NDMtICogXFx1MDAyNnNrX2J1ZmYuaGRyX2xlbiBwb3B1bGF0ZWQgd2l0aCB0aGUgYXZhaWxhYmxlIGhlYWRyb29tLlxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC02NDgtICogIHNrYl9yZXNlcnZlKClcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjY0OTogKiAgX19za2JfaGVhZGVyX3JlbGVhc2UoKVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNjUwLSAqICBza2JfY2xvbmUoKVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC02NTctICovXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo2NTg6I2RlZmluZSBTS0JfREFUQVJFRl9TSElGVCAxNlxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NjU5OiNkZWZpbmUgU0tCX0RBVEFSRUZfTUFTSyAoKDEgXFx1MDAzY1xcdTAwM2MgU0tCX0RBVEFSRUZfU0hJRlQpIC0gMSlcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTY2MC1cXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MTI5OD1zdGF0aWMgaW5saW5lIGludCBza2JfZGF0YXJlZl9iaWFzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xMjk5LXtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjEzMDA6XFx0cmV0dXJuIHNrYi1cXHUwMDNlbm9oZHIgPyAoMSBcXHUwMDNjXFx1MDAzYyBTS0JfREFUQVJFRl9TSElGVCkgKyAxIDogMTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTEzMDEtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0yMDQxPXN0YXRpYyBpbmxpbmUgaW50IHNrYl9jbG9uZWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMjA0My1cXHRyZXR1cm4gc2tiLVxcdTAwM2VjbG9uZWQgXFx1MDAyNlxcdTAwMjZcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjIwNDQ6XFx0ICAgICAgIChhdG9taWNfcmVhZChcXHUwMDI2c2tiX3NoaW5mbyhza2IpLVxcdTAwM2VkYXRhcmVmKSBcXHUwMDI2IFNLQl9EQVRBUkVGX01BU0spICE9IDE7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0yMDQ1LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MjA4MD1zdGF0aWMgaW5saW5lIGludCBza2JfaGVhZGVyX2Nsb25lZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0yMDg3LVxcdGRhdGFyZWYgPSBhdG9taWNfcmVhZChcXHUwMDI2c2tiX3NoaW5mbyhza2IpLVxcdTAwM2VkYXRhcmVmKTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjIwODg6XFx0ZGF0YXJlZiA9IChkYXRhcmVmIFxcdTAwMjYgU0tCX0RBVEFSRUZfTUFTSykgLSAoZGF0YXJlZiBcXHUwMDNlXFx1MDAzZSBTS0JfREFUQVJFRl9TSElGVCk7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0yMDg5LVxcdHJldHVybiBkYXRhcmVmICE9IDE7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTIwOTI9c3RhdGljIGlubGluZSBpbnQgc2tiX2hlYWRlcl91bmNsb25lKHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IHByaSlcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMjEwMi0vKipcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjIxMDM6ICogX19za2JfaGVhZGVyX3JlbGVhc2UoKSAtIGFsbG93IGNsb25lcyB0byB1c2UgdGhlIGhlYWRyb29tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0yMTA0LSAqIEBza2I6IGJ1ZmZlciB0byBvcGVyYXRlIG9uXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTIxMDctICovXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoyMTA4OnN0YXRpYyBpbmxpbmUgdm9pZCBfX3NrYl9oZWFkZXJfcmVsZWFzZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMjEwOS17XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0yMTEwLVxcdHNrYi1cXHUwMDNlbm9oZHIgPSAxO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MjExMTpcXHRhdG9taWNfc2V0KFxcdTAwMjZza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWRhdGFyZWYsIDEgKyAoMSBcXHUwMDNjXFx1MDAzYyBTS0JfREFUQVJFRl9TSElGVCkpO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMjExMi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDExOjI3OjQ2LjI4NDI3NjkwMVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODE3MjI2OTk0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU0tCIENsb25pbmcgYW5kIERhdGEgUmVmZXJlbmNlcyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgY29kZSdzIGNoZWNraW5nIGlmIGEgU29ja2V0IEJ1ZmZlciAoU0tCKSBpcyBjbG9uZWQgdXNpbmcgYHNrYl9jbG9uZWQoc2tiKWAuIE5vdywgSSB3YW50IHRvIHNlZSBob3cgdGhlIGRhdGEgcmVmZXJlbmNlIGNvdW50IHBsYXlzIGludG8gdGhlIHdob2xlIGNsb25pbmcgcHJvY2Vzcy4gTXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgd2hlbiBgX19za2JfaGVhZGVyX3JlbGVhc2VgIGlzIGNhbGxlZCwgYHNrYi1cdTAwM2Vub2hkcmAgaXMgc2V0LCBhbmQgYGRhdGFyZWZgIGdldHMgaW5pdGlhbGl6ZWQgdG8gYDEgKyAoMSBcdTAwM2NcdTAwM2MgU0tCX0RBVEFSRUZfU0hJRlQpYC4gVGhhdCBtYWtlcyBzZW5zZSwgZXN0YWJsaXNoZXMgdGhlIGluaXRpYWwgcmVmZXJlbmNlLiBUaGUgY3JpdGljYWwgcG9pbnQgaXMsIGhvdyBkb2VzIHRoaXMgY291bnQgY2hhbmdlIHVwb24gY2xvbmluZz8gSXQgc2VlbXMgdGhlIGNvZGUgaW5jcmVtZW50cyBgZGF0YXJlZmAgYnkgMSwgd2l0aCB0aGUgYWN0dWFsIG1lY2hhbmlzbSBiZWluZyBgYXRvbWljX2luYyhcdTAwMjZza2Jfc2hpbmZvKHNrYiktXHUwMDNlZGF0YXJlZilgLlxuXG5JIHdhbnQgdG8gY29uZmlybSB0aGlzIGJ5IGdvaW5nIHRocm91Z2ggYF9fc2tiX2Nsb25lYCBpbiBgbmV0L2NvcmUvc2tidWZmLmNgLiBMZXQgbWUgcmV2aWV3IHRoYXQgY29kZSBhbmQgdGhlIGV4YWN0IG1lY2hhbmljcyB0aGF0IGBhdG9taWNfaW5jYCBhbmQgdGhlIFNLQiBzdHJ1Y3QgdXNlIHdoZW4gdGhlIFNLQiBpcyBjbG9uZWQuIFRoaXMnbGwgaGVscCBjZW1lbnQgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGF0YSByZWZlcmVuY2UgY291bnQgYW5kIGl0cyBpbXBhY3Qgb24gYnVmZmVyIHNoYXJpbmcgaW4gdGhlIGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3MzUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTE6Mjg6MTQuNDU2NTQ4OTYyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDUzNDk3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3NrYl9jbG9uZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za2J1ZmYuYz0xNTU5PXN0YXRpYyB2b2lkIF9fY29weV9za2JfaGVhZGVyKHN0cnVjdCBza19idWZmICpuZXcsIGNvbnN0IHN0cnVjdCBza19idWZmICpvbGQpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0xNjA5LSAqL1xcbm5ldC9jb3JlL3NrYnVmZi5jOjE2MTA6c3RhdGljIHN0cnVjdCBza19idWZmICpfX3NrYl9jbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvY29yZS9za2J1ZmYuYy0xNjExLXtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTE2Nzg9c3RydWN0IHNrX2J1ZmYgKnNrYl9tb3JwaChzdHJ1Y3Qgc2tfYnVmZiAqZHN0LCBzdHJ1Y3Qgc2tfYnVmZiAqc3JjKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMTY4MC1cXHRza2JfcmVsZWFzZV9hbGwoZHN0LCBTS0JfQ09OU1VNRUQpO1xcbm5ldC9jb3JlL3NrYnVmZi5jOjE2ODE6XFx0cmV0dXJuIF9fc2tiX2Nsb25lKGRzdCwgc3JjKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0xNjgyLX1cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTIxMDA9c3RydWN0IHNrX2J1ZmYgKnNrYl9jbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBnZnBfbWFzaylcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTIxMjUtXFxubmV0L2NvcmUvc2tidWZmLmM6MjEyNjpcXHRyZXR1cm4gX19za2JfY2xvbmUobiwgc2tiKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0yMTI3LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTE6Mjg6MTQuNTI3MDkwODY3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNDY3MjE0OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHJlYWRpbmcgYW5kIHRoaW5raW5nIGFib3V0IHRoZSBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIGBfX3NrYl9jbG9uZWAgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYF9fc2tiX2Nsb25lYC4gIEkga25vdyBpdCdzIGEgZnVuZGFtZW50YWwgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIG5ldyBza2JzIGZyb20gZXhpc3Rpbmcgb25lcywgYnV0IEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIGFuZCBzZWUgaWYgYW55dGhpbmcganVtcHMgb3V0LiBMZXQncyBzZWUgaG93IHRoZXkgaGFuZGxlIHRoZSBkYXRhIGNvcHkgYW5kIHRoZSByZWZlcmVuY2UgY291bnRpbmcuIEkgZXhwZWN0IGl0J2xsIGJlIGZhaXJseSBzdHJhaWdodGZvcndhcmQsIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZSBmb3IgcGVyZm9ybWFuY2UsIGFuZCBvYnZpb3VzbHksIGNvcnJlY3RuZXNzIGlzIHBhcmFtb3VudCBoZXJlLiBJJ20gbG9va2luZyBmb3IgcG90ZW50aWFsIGFyZWFzIHRoYXQgbWlnaHQgaW50cm9kdWNlIGNvbnRlbnRpb24gb3Igb3ZlcmhlYWQsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIGZyZXF1ZW50IGNsb25pbmcgd2Ugc2VlIGluIGhpZ2gtcGVyZm9ybWFuY2UgbmV0d29ya2luZyBzY2VuYXJpb3MuIExldCdzIHNlZSBob3cgdGhleSBtYW5hZ2UgdGhlIHNoYXJlZCBkYXRhIGJ1ZmZlciBhbmQgbWV0YWRhdGEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTExLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTE6Mjg6MTYuNTczODE1MjQ0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MTQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjEwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjEwOlxcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqX19za2JfY2xvbmUoc3RydWN0IHNrX2J1ZmYgKm4sIHN0cnVjdCBza19idWZmICpza2IpXFxuMTYxMTpcXHR7XFxuMTYxMjpcXHQjZGVmaW5lIEMoeCkgbi1cXHUwMDNleCA9IHNrYi1cXHUwMDNleFxcbjE2MTM6XFx0XFxuMTYxNDpcXHRcXHRuLVxcdTAwM2VuZXh0ID0gbi1cXHUwMDNlcHJldiA9IE5VTEw7XFxuMTYxNTpcXHRcXHRuLVxcdTAwM2VzayA9IE5VTEw7XFxuMTYxNjpcXHRcXHRfX2NvcHlfc2tiX2hlYWRlcihuLCBza2IpO1xcbjE2MTc6XFx0XFxuMTYxODpcXHRcXHRDKGxlbik7XFxuMTYxOTpcXHRcXHRDKGRhdGFfbGVuKTtcXG4xNjIwOlxcdFxcdEMobWFjX2xlbik7XFxuMTYyMTpcXHRcXHRuLVxcdTAwM2VoZHJfbGVuID0gc2tiLVxcdTAwM2Vub2hkciA/IHNrYl9oZWFkcm9vbShza2IpIDogc2tiLVxcdTAwM2VoZHJfbGVuO1xcbjE2MjI6XFx0XFx0bi1cXHUwMDNlY2xvbmVkID0gMTtcXG4xNjIzOlxcdFxcdG4tXFx1MDAzZW5vaGRyID0gMDtcXG4xNjI0OlxcdFxcdG4tXFx1MDAzZXBlZWtlZCA9IDA7XFxuMTYyNTpcXHRcXHRDKHBmbWVtYWxsb2MpO1xcbjE2MjY6XFx0XFx0QyhwcF9yZWN5Y2xlKTtcXG4xNjI3OlxcdFxcdG4tXFx1MDAzZWRlc3RydWN0b3IgPSBOVUxMO1xcbjE2Mjg6XFx0XFx0Qyh0YWlsKTtcXG4xNjI5OlxcdFxcdEMoZW5kKTtcXG4xNjMwOlxcdFxcdEMoaGVhZCk7XFxuMTYzMTpcXHRcXHRDKGhlYWRfZnJhZyk7XFxuMTYzMjpcXHRcXHRDKGRhdGEpO1xcbjE2MzM6XFx0XFx0Qyh0cnVlc2l6ZSk7XFxuMTYzNDpcXHRcXHRyZWZjb3VudF9zZXQoXFx1MDAyNm4tXFx1MDAzZXVzZXJzLCAxKTtcXG4xNjM1OlxcdFxcbjE2MzY6XFx0XFx0YXRvbWljX2luYyhcXHUwMDI2KHNrYl9zaGluZm8oc2tiKS1cXHUwMDNlZGF0YXJlZikpO1xcbjE2Mzc6XFx0XFx0c2tiLVxcdTAwM2VjbG9uZWQgPSAxO1xcbjE2Mzg6XFx0XFxuMTYzOTpcXHRcXHRyZXR1cm4gbjtcXG4xNjQwOlxcdCN1bmRlZiBDXFxuMTY0MTpcXHR9XFxuMTY0MjpcXHRcXG4xNjQzOlxcdC8qKlxcbjE2NDQ6XFx0ICogYWxsb2Nfc2tiX2Zvcl9tc2coKSAtIGFsbG9jYXRlIHNrX2J1ZmYgdG8gd3JhcCBmcmFnIGxpc3QgZm9ybWluZyBhIG1zZ1xcbjE2NDU6XFx0ICogQGZpcnN0OiBmaXJzdCBza19idWZmIG9mIHRoZSBtc2dcXG4xNjQ2OlxcdCAqL1xcbjE2NDc6XFx0c3RydWN0IHNrX2J1ZmYgKmFsbG9jX3NrYl9mb3JfbXNnKHN0cnVjdCBza19idWZmICpmaXJzdClcXG4xNjQ4OlxcdHtcXG4xNjQ5OlxcdFxcdHN0cnVjdCBza19idWZmICpuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMToyODoxNi41NzQwNTg0ODRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA2NjE3NzgyNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgU0tCIERhdGEgU2hhcmluZyBhbmQgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHdlIGhhdmUgYSB0cmlja3kgc2l0dWF0aW9uIHdpdGggU0tCcywgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgaG93IGRhdGEgcmVmZXJlbmNlcyBhbmQgY2xvbmluZyBpbnRlcmFjdCB3aXRoIGBwc2tiX2V4cGFuZF9oZWFkYCBhbmQgYHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcmAuIEknbSBzZWVpbmcgYSBwb3RlbnRpYWwgZmxhdyBpbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiwgcGFydGljdWxhcmx5IHdoZW4gYSBjbG9uZWQgU0tCIGlzIGZyZWVkLCB3aGljaCBjb3VsZCBsZWFkIHRvIGRhdGEgY29ycnVwdGlvbiBvciBpbmNvcnJlY3QgcmVmZXJlbmNlIGNvdW50aW5nLlxuXG5Jbml0aWFsbHksIHdoZW4gYF9fc2tiX2hlYWRlcl9yZWxlYXNlYCBpcyBjYWxsZWQsIHdlIHNldCBgc2tiLVx1MDAzZW5vaGRyYCB0byAxLCBhbmQgdGhlIGRhdGFyZWYgaXMgYDEgKyAoMSBcdTAwM2NcdTAwM2MgU0tCX0RBVEFSRUZfU0hJRlQpYC4gVGhlbiwgd2hlbiBhbiBTS0IgaXMgY2xvbmVkLCBib3RoIHRoZSBvcmlnaW5hbCBhbmQgdGhlIGNsb25lJ3MgYGNsb25lZGAgZmxhZyBpcyBzZXQsIGFuZCB0aGUgYGRhdGFyZWZgIGJlY29tZXMgYDIgKyAoMSBcdTAwM2NcdTAwM2MgU0tCX0RBVEFSRUZfU0hJRlQpYC5cblxuVGhlIGNvcmUgaXNzdWUgbGllcyBpbiB3aGF0IGhhcHBlbnMgd2hlbiBhIGNsb25lIGlzIGZyZWVkLiBUaGUgYHNrYl9kYXRhX3VucmVmYCBmdW5jdGlvbiByZWR1Y2VzIGBkYXRhcmVmYCBiYXNlZCBvbiB0aGUgYHNrYl9kYXRhcmVmX2JpYXNgLCB3aGljaCBkZXBlbmRzIG9uIGBza2ItXHUwMDNlbm9oZHJgLiAgSWYgdGhlIG9yaWdpbmFsIGlzIHN0aWxsIGFyb3VuZCBhbmQgYHNrYi1cdTAwM2Vub2hkcmAgaXMgMSwgYSBiaWFzIG9mIGAxICsgKDEgXHUwMDNjXHUwMDNjIFNLQl9EQVRBUkVGX1NISUZUKWAgaXMgaW50cm9kdWNlZC4gVGhlIG9sZCBjb2RlIGhhZCBhIHByb2JsZW0gd2hlbiBhbiBTS0Igd2FzIGNsb25lZCwgdGhlbiB0aGUgY2xvbmUgd2FzIGZyZWVkLCBidXQgdGhlIG9yaWdpbmFsIHdhcyBzdGlsbCBhcm91bmQuICBJbiB0aGlzIHNjZW5hcmlvIHRoZSB2YWx1ZSBvZiB0aGUgYHNrYl9jbG9uZWRgIGZ1bmN0aW9uIHdpbGwgbWlzaW50ZXJwcmV0IHdoZXRoZXIgZGF0YSBpcyBzaGFyZWQgKGluY29ycmVjdGx5IGFzc3VtaW5nIGl0IGlzIG5vdCBzaGFyZWQpLCBhbmQgYHBza2JfZXhwYW5kX2hlYWRgIGFuZCBgcHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyYCB3aWxsIG1pc3Rha2VubHkgZnJlZSB0aGUgZGF0YSwgb3IgY29ycnVwdCB0aGUgcmVmY291bnQuICBUaGUgYHNrYl9kYXRhX2lzX3NoYXJlZGAgZnVuY3Rpb24gd2lsbCByZXR1cm4gVFJVRSwgbWVhbmluZyB0aGF0IHRoaXMgZGF0YSBpcyBhY3R1YWxseSBzaGFyZWQsIGFuZCBuZWVkcyB0byBiZSBoYW5kbGVkIGFwcHJvcHJpYXRlbHkuICBcblxuVGhlIHJvb3QgY2F1c2UgYXBwZWFycyB0byBiZSB0aGUgYHNrYl9jbG9uZWRgIG1hY3JvIG5vdCBwcm9wZXJseSBhY2NvdW50aW5nIGZvciB0aGUgYG5vaGRyYCBiaXQgaW4gaXRzIGNhbGN1bGF0aW9uIG9mIHNoYXJlZCBkYXRhLCB3aGljaCByZXN1bHRzIGluIGBwc2tiX2V4cGFuZF9oZWFkYCBwb3RlbnRpYWxseSBmcmVlaW5nIHNoYXJlZCBkYXRhIHByZW1hdHVyZWx5LiAgVGhpcyBjb3VsZCBjYXVzZSBkYXRhIGNvcnJ1cHRpb24sIG9yIHJlZmVyZW5jZSBjb3VudCBpc3N1ZXMuIFRoZSBgc2tiX2Nsb25lZGAgb25seSBtYXNrZWQgb3V0IHRoZSBoaWdoZXIgYml0cywgd2hpY2ggaW5kaWNhdGVkIHdoZXRoZXIgYG5vaGRyYCB3YXMgc2V0IG9yIG5vdCwgc28gYHNrYl9jbG9uZWRgIHdyb25nbHkgdGhvdWdodCBgbmAgd2FzIHRoZSBzb2xlIG93bmVyLlxuXG5Ob3csIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhpcyBpcyBmdXp6ZXItd29ydGh5LiBHaXZlbiB0aGF0IHRoaXMgZGlyZWN0bHkgaW1wYWN0cyBjb3JlIGtlcm5lbCBsb2dpYyB3aXRoaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCBhbmQgcG90ZW50aWFsbHkgaW5jbHVkZXMgYHBza2JfZXhwYW5kX2hlYWRgIGFuZCBgcHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyYCB3aGljaCBhcmUgd2lkZWx5IHVzZWQsIEknZCBzYXkgdGhpcyBuZWVkcyB0byBiZSBpbnZlc3RpZ2F0ZWQgZnVydGhlci4gIFRoaXMgZGlyZWN0bHkgYWZmZWN0cyBtZW1vcnkgbWFuYWdlbWVudCB3aXRoIGBza2JgIGNsb25lcywgYW5kIHNvIEkgc2hvdWxkIGNvbnNpZGVyIHNldHRpbmcgYFdvcnRoRnV6emluZz10cnVlYC5cblxuRm9yIHRoZSBmb2N1cyBzeW1ib2xzLCBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGwgc2l0ZXMgZm9yIGBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXJgIHNpbmNlIGl0J3MgYHN0YXRpY2AuICBIb3dldmVyLCBgcHNrYl9leHBhbmRfaGVhZGAgaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgYEZvY3VzU3ltYm9sc2AsIGFzIGlzIHRoZSBub24tc3RhdGljIGFuZCBub24taW5saW5lIGBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXJgIGNhbGxzaXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjMzNCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMToyODoyNy4yMzU4NDAzNloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ4ODI1ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyfHBza2JfZXhwYW5kX2hlYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYmF0bWFuLWFkdi9mcmFnbWVudGF0aW9uLmM9MjYxPWJhdGFkdl9mcmFnX21lcmdlX3BhY2tldHMoc3RydWN0IGhsaXN0X2hlYWQgKmNoYWluKVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvZnJhZ21lbnRhdGlvbi5jLTI4MS1cXHQvKiBNYWtlIHJvb20gZm9yIHRoZSByZXN0IG9mIHRoZSBmcmFnbWVudHMuICovXFxubmV0L2JhdG1hbi1hZHYvZnJhZ21lbnRhdGlvbi5jOjI4MjpcXHRpZiAocHNrYl9leHBhbmRfaGVhZChza2Jfb3V0LCAwLCBzaXplIC0gc2tiX291dC1cXHUwMDNlbGVuLCBHRlBfQVRPTUlDKSBcXHUwMDNjIDApIHtcXG5uZXQvYmF0bWFuLWFkdi9mcmFnbWVudGF0aW9uLmMtMjgzLVxcdFxcdGtmcmVlX3NrYihza2Jfb3V0KTtcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYz0xMDM1PWludCBicGZfcHJvZ190ZXN0X3J1bl9za2Ioc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTIzMS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTIzMjpcXHRcXHRcXHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIG5oZWFkLCAwLCBHRlBfVVNFUikpIHtcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTIzMy1cXHRcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9NTYxMz1uZXRpZl9za2JfY2hlY2tfZm9yX3hkcChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTU2MjQtXFx0LyogSW4gY2FzZSB3ZSBoYXZlIHRvIGdvIGRvd24gdGhlIHBhdGggYW5kIGFsc28gbGluZWFyaXplLFxcbm5ldC9jb3JlL2Rldi5jOjU2MjU6XFx0ICogdGhlbiBsZXRzIGRvIHRoZSBwc2tiX2V4cGFuZF9oZWFkKCkgd29yayBqdXN0IG9uY2UgaGVyZS5cXG5uZXQvY29yZS9kZXYuYy01NjI2LVxcdCAqL1xcbi0tXFxubmV0L2NvcmUvZGV2LmMtNTYyOC1cXHR0cm9vbSA9IHNrYi1cXHUwMDNldGFpbCArIHNrYi1cXHUwMDNlZGF0YV9sZW4gLSBza2ItXFx1MDAzZWVuZDtcXG5uZXQvY29yZS9kZXYuYzo1NjI5OlxcdGVyciA9IHBza2JfZXhwYW5kX2hlYWQoc2tiLFxcbm5ldC9jb3JlL2Rldi5jLTU2MzAtXFx0XFx0XFx0ICAgICAgIGhyb29tIFxcdTAwM2UgMCA/IEFMSUdOKGhyb29tLCBORVRfU0tCX1BBRCkgOiAwLFxcbi0tXFxubmV0L2NvcmUvbHd0X2JwZi5jPTE3MD1zdGF0aWMgaW50IHhtaXRfY2hlY2tfaGVhZHJvb20oc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGhyb29tKVxcbi0tXFxubmV0L2NvcmUvbHd0X2JwZi5jLTE3NC1cXG5uZXQvY29yZS9sd3RfYnBmLmM6MTc1OlxcdFxcdGlmIChwc2tiX2V4cGFuZF9oZWFkKHNrYiwgbmhlYWQsIDAsIEdGUF9BVE9NSUMpKVxcbm5ldC9jb3JlL2x3dF9icGYuYy0xNzYtXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYz0yNzU5PXN0YXRpYyBpbnQgcHJvY2Vzc19pcHNlYyhzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldixcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTI3NzItXFx0XFx0XFx0aWYgKG5oZWFkIFxcdTAwM2UgMCkge1xcbm5ldC9jb3JlL3BrdGdlbi5jOjI3NzM6XFx0XFx0XFx0XFx0cmV0ID0gcHNrYl9leHBhbmRfaGVhZChza2IsIG5oZWFkLCAwLCBHRlBfQVRPTUlDKTtcXG5uZXQvY29yZS9wa3RnZW4uYy0yNzc0LVxcdFxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5uZXQvY29yZS9za2JfZmF1bHRfaW5qZWN0aW9uLmM9MzM9dm9pZCBza2JfbWlnaHRfcmVhbGxvYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvc2tiX2ZhdWx0X2luamVjdGlvbi5jLTM3LVxcbm5ldC9jb3JlL3NrYl9mYXVsdF9pbmplY3Rpb24uYzozODpcXHRwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgMCwgR0ZQX0FUT01JQyk7XFxubmV0L2NvcmUvc2tiX2ZhdWx0X2luamVjdGlvbi5jLTM5LX1cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTIyNzU9RVhQT1JUX1NZTUJPTChfX3Bza2JfY29weV9mY2xvbmUpO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjI3Ny0vKipcXG5uZXQvY29yZS9za2J1ZmYuYzoyMjc4OiAqXFx0cHNrYl9leHBhbmRfaGVhZCAtIHJlYWxsb2NhdGUgaGVhZGVyIG9mIFxcdTAwMjZza19idWZmXFxubmV0L2NvcmUvc2tidWZmLmMtMjI3OS0gKlxcdEBza2I6IGJ1ZmZlciB0byByZWFsbG9jYXRlXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0yMjk2LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjIyOTc6aW50IHBza2JfZXhwYW5kX2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5oZWFkLCBpbnQgbnRhaWwsXFxubmV0L2NvcmUvc2tidWZmLmMtMjI5OC1cXHRcXHQgICAgIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjM3OS19XFxubmV0L2NvcmUvc2tidWZmLmM6MjM4MDpFWFBPUlRfU1lNQk9MKHBza2JfZXhwYW5kX2hlYWQpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTIzODEtXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0yMzg0PXN0cnVjdCBza19idWZmICpza2JfcmVhbGxvY19oZWFkcm9vbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaGVhZHJvb20pXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0yMzkyLVxcdFxcdHNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcXG5uZXQvY29yZS9za2J1ZmYuYzoyMzkzOlxcdFxcdGlmIChza2IyIFxcdTAwMjZcXHUwMDI2IHBza2JfZXhwYW5kX2hlYWQoc2tiMiwgU0tCX0RBVEFfQUxJR04oZGVsdGEpLCAwLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTIzOTQtXFx0XFx0XFx0XFx0XFx0ICAgICBHRlBfQVRPTUlDKSkge1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MjQwND1pbnQgX19za2JfdW5jbG9uZV9rZWVwdHJ1ZXNpemUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgcHJpKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjQxMi1cXG5uZXQvY29yZS9za2J1ZmYuYzoyNDEzOlxcdHJlcyA9IHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCAwLCBwcmkpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTI0MTQtXFx0aWYgKHJlcylcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTI0NDg9c3RydWN0IHNrX2J1ZmYgKnNrYl9leHBhbmRfaGVhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaGVhZHJvb20pXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0yNDU4LVxcdGRlbHRhID0gU0tCX0RBVEFfQUxJR04oZGVsdGEpO1xcbm5ldC9jb3JlL3NrYnVmZi5jOjI0NTk6XFx0LyogcHNrYl9leHBhbmRfaGVhZCgpIG1pZ2h0IGNyYXNoLCBpZiBza2IgaXMgc2hhcmVkLiAqL1xcbm5ldC9jb3JlL3NrYnVmZi5jLTI0NjAtXFx0aWYgKHNrYl9zaGFyZWQoc2tiKSB8fCAhaXNfc2tiX3dtZW0oc2tiKSkge1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjQ3MC1cXHR9XFxubmV0L2NvcmUvc2tidWZmLmM6MjQ3MTpcXHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIGRlbHRhLCAwLCBHRlBfQVRPTUlDKSlcXG5uZXQvY29yZS9za2J1ZmYuYy0yNDcyLVxcdFxcdGdvdG8gZmFpbDtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTI1Njc9aW50IF9fc2tiX3BhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcGFkLCBib29sIGZyZWVfb25fZXJyb3IpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0yNTc5LVxcdGlmIChsaWtlbHkoc2tiX2Nsb25lZChza2IpIHx8IG50YWlsIFxcdTAwM2UgMCkpIHtcXG5uZXQvY29yZS9za2J1ZmYuYzoyNTgwOlxcdFxcdGVyciA9IHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCBudGFpbCwgR0ZQX0FUT01JQyk7XFxubmV0L2NvcmUvc2tidWZmLmMtMjU4MS1cXHRcXHRpZiAodW5saWtlbHkoZXJyKSlcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTI3MjQ9aW50IF9fX3Bza2JfdHJpbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjczMy1cXHRpZiAoc2tiX2Nsb25lZChza2IpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2NvcmUvc2tidWZmLmM6MjczNDpcXHQgICAgdW5saWtlbHkoKGVyciA9IHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCAwLCBHRlBfQVRPTUlDKSkpKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTI3MzUtXFx0XFx0cmV0dXJuIGVycjtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTI4Nzg9dm9pZCAqX19wc2tiX3B1bGxfdGFpbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZGVsdGEpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0yODg5LVxcdGlmIChlYXQgXFx1MDAzZSAwIHx8IHNrYl9jbG9uZWQoc2tiKSkge1xcbm5ldC9jb3JlL3NrYnVmZi5jOjI4OTA6XFx0XFx0aWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCBlYXQgXFx1MDAzZSAwID8gZWF0ICsgMTI4IDogMCxcXG5uZXQvY29yZS9za2J1ZmYuYy0yODkxLVxcdFxcdFxcdFxcdCAgICAgR0ZQX0FUT01JQykpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz01MzgzPWludCBza2JfY293X2RhdGEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRhaWxiaXRzLCBzdHJ1Y3Qgc2tfYnVmZiAqKnRyYWlsZXIpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy01NDA0LVxcdFxcdGlmIChza2JfdGFpbHJvb20oc2tiKSBcXHUwMDNjIHRhaWxiaXRzIFxcdTAwMjZcXHUwMDI2XFxubmV0L2NvcmUvc2tidWZmLmM6NTQwNTpcXHRcXHQgICAgcHNrYl9leHBhbmRfaGVhZChza2IsIDAsIHRhaWxiaXRzLXNrYl90YWlscm9vbShza2IpKzEyOCwgR0ZQX0FUT01JQykpXFxubmV0L2NvcmUvc2tidWZmLmMtNTQwNi1cXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTYzODM9aW50IHNrYl9lbnN1cmVfd3JpdGFibGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHdyaXRlX2xlbilcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTYzOTAtXFxubmV0L2NvcmUvc2tidWZmLmM6NjM5MTpcXHRyZXR1cm4gcHNrYl9leHBhbmRfaGVhZChza2IsIDAsIDAsIEdGUF9BVE9NSUMpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTYzOTItfVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NjM5NT1pbnQgc2tiX2Vuc3VyZV93cml0YWJsZV9oZWFkX3RhaWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTY0MTQtXFxubmV0L2NvcmUvc2tidWZmLmM6NjQxNTpcXHRyZXR1cm4gcHNrYl9leHBhbmRfaGVhZChza2IsIG5lZWRlZF9oZWFkcm9vbSwgbmVlZGVkX3RhaWxyb29tLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTY0MTYtXFx0XFx0XFx0XFx0R0ZQX0FUT01JQyk7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz02ODI2PUVYUE9SVF9TWU1CT0woYWxsb2Nfc2tiX3dpdGhfZnJhZ3MpO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNjgyOC0vKiBjYXJ2ZSBvdXQgdGhlIGZpcnN0IG9mZiBieXRlcyBmcm9tIHNrYiB3aGVuIG9mZiBcXHUwMDNjIGhlYWRsZW4gKi9cXG5uZXQvY29yZS9za2J1ZmYuYzo2ODI5OnN0YXRpYyBpbnQgcHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHUzMiBvZmYsXFxubmV0L2NvcmUvc2tidWZmLmMtNjgzMC1cXHRcXHRcXHRcXHQgICAgY29uc3QgaW50IGhlYWRsZW4sIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NzAzND1zdGF0aWMgaW50IHBza2JfY2FydmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTMyIGxlbiwgZ2ZwX3QgZ2ZwKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNzAzOC1cXHRpZiAobGVuIFxcdTAwM2MgaGVhZGxlbilcXG5uZXQvY29yZS9za2J1ZmYuYzo3MDM5OlxcdFxcdHJldHVybiBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXIoc2tiLCBsZW4sIGhlYWRsZW4sIGdmcCk7XFxubmV0L2NvcmUvc2tidWZmLmMtNzA0MC1cXHRlbHNlXFxuLS1cXG5uZXQvaXB2NC9pY21wLmM9NzM5PWljbXBfZXh0X2FwcGVuZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2JfaW4sIHN0cnVjdCBpY21waGRyICppY21waCxcXG4tLVxcbm5ldC9pcHY0L2ljbXAuYy03NzgtXFxubmV0L2lwdjQvaWNtcC5jOjc3OTpcXHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIDAsIGV4dF9tYXhfbGVuLCBHRlBfQVRPTUlDKSlcXG5uZXQvaXB2NC9pY21wLmMtNzgwLVxcdFxcdGdvdG8gZnJlZV9za2I7XFxuLS1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYz0yMDk9aW50IGluZXRfc2tfZGlhZ19maWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrLFxcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtMzc4LVxcdFxcdGlmIChjYi1cXHUwMDNlbWluX2R1bXBfYWxsb2MgXFx1MDAzZSBwcmV2X21pbl9kdW1wX2FsbG9jKVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjM3OTpcXHRcXHRcXHQvKiBSZXRyeSB3aXRoIHBza2JfZXhwYW5kX2hlYWQoKSB3aXRoXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtMzgwLVxcdFxcdFxcdCAqIF9fR0ZQX0RJUkVDVF9SRUNMQUlNXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYz04MDk9c3RhdGljIGludCBfX2luZXRfZGlhZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcXG4tLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTgzMS1cXHRpZiAoIXNrYi1cXHUwMDNlbGVuIFxcdTAwMjZcXHUwMDI2IGNiLVxcdTAwM2VtaW5fZHVtcF9hbGxvYyBcXHUwMDNlIHByZXZfbWluX2R1bXBfYWxsb2MpIHtcXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo4MzI6XFx0XFx0ZXJyID0gcHNrYl9leHBhbmRfaGVhZChza2IsIDAsIGNiLVxcdTAwM2VtaW5fZHVtcF9hbGxvYywgR0ZQX0tFUk5FTCk7XFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtODMzLVxcdFxcdGlmICghZXJyKVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9ODk0PXN0YXRpYyBpbnQgaXBncmVfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy05MDQtXFx0aWYgKHNrYl9oZWFkcm9vbShza2IpIFxcdTAwM2MgbmVlZGVkIFxcdTAwMjZcXHUwMDI2XFxubmV0L2lwdjQvaXBfZ3JlLmM6OTA1OlxcdCAgICBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgSEhfREFUQV9BTElHTihuZWVkZWQgLSBza2JfaGVhZHJvb20oc2tiKSksXFxubmV0L2lwdjQvaXBfZ3JlLmMtOTA2LVxcdFxcdFxcdCAgICAgMCwgR0ZQX0FUT01JQykpXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIuYz0yMj1pbnQgaXBfcm91dGVfbWVfaGFyZGVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgYWRkcl90eXBlKVxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyLmMtODItXFx0aWYgKHNrYl9oZWFkcm9vbShza2IpIFxcdTAwM2MgaGhfbGVuIFxcdTAwMjZcXHUwMDI2XFxubmV0L2lwdjQvbmV0ZmlsdGVyLmM6ODM6XFx0ICAgIHBza2JfZXhwYW5kX2hlYWQoc2tiLCBISF9EQVRBX0FMSUdOKGhoX2xlbiAtIHNrYl9oZWFkcm9vbShza2IpKSxcXG5uZXQvaXB2NC9uZXRmaWx0ZXIuYy04NC1cXHRcXHRcXHRcXHQwLCBHRlBfQVRPTUlDKSlcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYz0yMzI9c3RhdGljIGJvb2wgaXB2Nl9kZXN0X2hhbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb3B0b2ZmKVxcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTI3MC1cXHRpZiAoc2tiX2Nsb25lZChza2IpKSB7XFxubmV0L2lwdjYvZXh0aGRycy5jOjI3MTpcXHRcXHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIDAsIDAsIEdGUF9BVE9NSUMpKVxcbm5ldC9pcHY2L2V4dGhkcnMuYy0yNzItXFx0XFx0XFx0Z290byBkaXNjYXJkO1xcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jPTM3MT1zdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KVxcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTQzNC1cXHRpZiAoc2tiX2Nsb25lZChza2IpKSB7XFxubmV0L2lwdjYvZXh0aGRycy5jOjQzNTpcXHRcXHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIDAsIDAsIEdGUF9BVE9NSUMpKSB7XFxubmV0L2lwdjYvZXh0aGRycy5jLTQzNi1cXHRcXHRcXHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpcDZfZHN0X2lkZXYoc2tiX2RzdChza2IpKSxcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYz00ODE9c3RhdGljIGludCBpcHY2X3JwbF9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmMtNTg5LVxcdFxcdCAgICAgc2tiX2hlYWRyb29tKHNrYikgXFx1MDAzYyBjaGRyX2xlbiArIHNrYi1cXHUwMDNlbWFjX2xlbikpIHtcXG5uZXQvaXB2Ni9leHRoZHJzLmM6NTkwOlxcdFxcdGlmIChwc2tiX2V4cGFuZF9oZWFkKHNrYiwgY2hkcl9sZW4gKyBza2ItXFx1MDAzZW1hY19sZW4sIDAsXFxubmV0L2lwdjYvZXh0aGRycy5jLTU5MS1cXHRcXHRcXHRcXHQgICAgIEdGUF9BVE9NSUMpKSB7XFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmM9NjQ1PXN0YXRpYyBpbnQgaXB2Nl9ydGhkcl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYy03NTgtXFx0XFx0LyogdGhlIGNvcHkgaXMgYSBmb3J3YXJkZWQgcGFja2V0ICovXFxubmV0L2lwdjYvZXh0aGRycy5jOjc1OTpcXHRcXHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIDAsIDAsIEdGUF9BVE9NSUMpKSB7XFxubmV0L2lwdjYvZXh0aGRycy5jLTc2MC1cXHRcXHRcXHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpcDZfZHN0X2lkZXYoc2tiX2RzdChza2IpKSxcXG4tLVxcbm5ldC9pcHY2L2ljbXAuYz01NjI9aWNtcDZfZXh0X2FwcGVuZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2JfaW4sXFxuLS1cXG5uZXQvaXB2Ni9pY21wLmMtNjA4LVxcbm5ldC9pcHY2L2ljbXAuYzo2MDk6XFx0aWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCBleHRfbWF4X2xlbiwgR0ZQX0FUT01JQykpXFxubmV0L2lwdjYvaWNtcC5jLTYxMC1cXHRcXHRnb3RvIGZyZWVfc2tiO1xcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jPTEzNjM9c3RhdGljIGludCBpcDZncmVfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTM3My1cXHRpZiAoc2tiX2hlYWRyb29tKHNrYikgXFx1MDAzYyBuZWVkZWQgXFx1MDAyNlxcdTAwMjZcXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MTM3NDpcXHQgICAgcHNrYl9leHBhbmRfaGVhZChza2IsIEhIX0RBVEFfQUxJR04obmVlZGVkIC0gc2tiX2hlYWRyb29tKHNrYikpLFxcbm5ldC9pcHY2L2lwNl9ncmUuYy0xMzc1LVxcdFxcdFxcdCAgICAgMCwgR0ZQX0FUT01JQykpXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIuYz0yND1pbnQgaXA2X3JvdXRlX21lX2hhcmRlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpza19wYXJ0aWFsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyLmMtODAtXFx0aWYgKHNrYl9oZWFkcm9vbShza2IpIFxcdTAwM2MgaGhfbGVuIFxcdTAwMjZcXHUwMDI2XFxubmV0L2lwdjYvbmV0ZmlsdGVyLmM6ODE6XFx0ICAgIHBza2JfZXhwYW5kX2hlYWQoc2tiLCBISF9EQVRBX0FMSUdOKGhoX2xlbiAtIHNrYl9oZWFkcm9vbShza2IpKSxcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIuYy04Mi1cXHRcXHRcXHQgICAgIDAsIEdGUF9BVE9NSUMpKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jPTM5OD1zdGF0aWMgaW50IHNlZzZfZG9fc3JoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBkc3RfZW50cnkgKmNhY2hlX2RzdClcXG4tLVxcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYy00NDgtXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jOjQ0OTpcXHRcXHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIHNrYi1cXHUwMDNlbWFjX2xlbiwgMCwgR0ZQX0FUT01JQykgXFx1MDAzYyAwKVxcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYy00NTAtXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5uZXQvaXB2Ni91ZHBfb2ZmbG9hZC5jPTE5PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdWRwNl91Zm9fZnJhZ21lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L3VkcF9vZmZsb2FkLmMtNzgtXFx0XFx0aWYgKHNrYi1cXHUwMDNlbWFjX2hlYWRlciBcXHUwMDNjICh0bmxfaGxlbiArIGZyYWdfaGRyX3N6KSkge1xcbm5ldC9pcHY2L3VkcF9vZmZsb2FkLmM6Nzk6XFx0XFx0XFx0aWYgKGdzb19wc2tiX2V4cGFuZF9oZWFkKHNrYiwgdG5sX2hsZW4gKyBmcmFnX2hkcl9zeikpXFxubmV0L2lwdjYvdWRwX29mZmxvYWQuYy04MC1cXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4tLVxcbm5ldC9tYWM4MDIxMS9yeC5jPTc0Mj1pZWVlODAyMTFfbWFrZV9tb25pdG9yX3NrYihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcXG4tLVxcbm5ldC9tYWM4MDIxMS9yeC5jLTc2Ny1cXHRcXHRpZiAoc2tiX2hlYWRyb29tKHNrYikgXFx1MDAzYyBuZWVkZWRfaGVhZHJvb20gXFx1MDAyNlxcdTAwMjZcXG5uZXQvbWFjODAyMTEvcnguYzo3Njg6XFx0XFx0ICAgIHBza2JfZXhwYW5kX2hlYWQoc2tiLCBuZWVkZWRfaGVhZHJvb20sIDAsIEdGUF9BVE9NSUMpKSB7XFxubmV0L21hYzgwMjExL3J4LmMtNzY5LVxcdFxcdFxcdGRldl9rZnJlZV9za2Ioc2tiKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9yeC5jPTIzNzM9aWVlZTgwMjExX3J4X2hfZGVmcmFnbWVudChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KVxcbi0tXFxubmV0L21hYzgwMjExL3J4LmMtMjUxMi1cXHRcXHRJODAyX0RFQlVHX0lOQyhyeC1cXHUwMDNlbG9jYWwtXFx1MDAzZXJ4X2V4cGFuZF9za2JfaGVhZF9kZWZyYWcpO1xcbm5ldC9tYWM4MDIxMS9yeC5jOjI1MTM6XFx0XFx0aWYgKHVubGlrZWx5KHBza2JfZXhwYW5kX2hlYWQocngtXFx1MDAzZXNrYiwgMCwgZW50cnktXFx1MDAzZWV4dHJhX2xlbixcXG5uZXQvbWFjODAyMTEvcnguYy0yNTE0LVxcdFxcdFxcdFxcdFxcdCAgICAgIEdGUF9BVE9NSUMpKSkge1xcbi0tXFxubmV0L21hYzgwMjExL3R4LmM9MjAwND1zdGF0aWMgaW50IGllZWU4MDIxMV9za2JfcmVzaXplKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtMjAzMS1cXG5uZXQvbWFjODAyMTEvdHguYzoyMDMyOlxcdGlmIChwc2tiX2V4cGFuZF9oZWFkKHNrYiwgaGVhZF9uZWVkLCB0YWlsX25lZWQsIEdGUF9BVE9NSUMpKSB7XFxubmV0L21hYzgwMjExL3R4LmMtMjAzMy1cXHRcXHR3aXBoeV9kZWJ1Zyhsb2NhbC1cXHUwMDNlaHcud2lwaHksXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYz0zMzg3PXN0YXRpYyBib29sIGllZWU4MDIxMV9hbXNkdV9yZWFsbG9jX3BhZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jLTMzOTItXFxubmV0L21hYzgwMjExL3R4LmM6MzM5MzpcXHRcXHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIGhlYWRyb29tLCAwLCBHRlBfQVRPTUlDKSkge1xcbm5ldC9tYWM4MDIxMS90eC5jLTMzOTQtXFx0XFx0XFx0d2lwaHlfZGVidWcobG9jYWwtXFx1MDAzZWh3LndpcGh5LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9uYXRfaGVscGVyLmM9Njc9c3RhdGljIGJvb2wgZW5sYXJnZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGV4dHJhKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9uYXRfaGVscGVyLmMtNzEtXFxubmV0L25ldGZpbHRlci9uZl9uYXRfaGVscGVyLmM6NzI6XFx0aWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCBleHRyYSAtIHNrYl90YWlscm9vbShza2IpLCBHRlBfQVRPTUlDKSlcXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9oZWxwZXIuYy03My1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90by5jPTYwMT1zdGF0aWMgaW50IG5mX3hmcm1fbWVfaGFyZGVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGZhbWlseSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvLmMtNjMxLVxcdGlmIChza2JfaGVhZHJvb20oc2tiKSBcXHUwMDNjIGhoX2xlbiBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvLmM6NjMyOlxcdCAgICBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgaGhfbGVuIC0gc2tiX2hlYWRyb29tKHNrYiksIDAsIEdGUF9BVE9NSUMpKVxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvLmMtNjMzLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi0tXFxubmV0L25ldGZpbHRlci94dF9UQ1BNU1MuYz03MT10Y3Btc3NfbWFuZ2xlX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci94dF9UQ1BNU1MuYy0xNTQtXFx0aWYgKHNrYl90YWlscm9vbShza2IpIFxcdTAwM2MgVENQT0xFTl9NU1MpIHtcXG5uZXQvbmV0ZmlsdGVyL3h0X1RDUE1TUy5jOjE1NTpcXHRcXHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIDAsXFxubmV0L25ldGZpbHRlci94dF9UQ1BNU1MuYy0xNTYtXFx0XFx0XFx0XFx0ICAgICBUQ1BPTEVOX01TUyAtIHNrYl90YWlscm9vbShza2IpLFxcbi0tXFxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jPTEyODI9c3RhdGljIHN0cnVjdCBza19idWZmICpuZXRsaW5rX3RyaW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgYWxsb2NhdGlvbilcXG4tLVxcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYy0xMjk5LVxcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYzoxMzAwOlxcdHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCAtZGVsdGEsXFxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jLTEzMDEtXFx0XFx0XFx0IChhbGxvY2F0aW9uIFxcdTAwMjYgfl9fR0ZQX0RJUkVDVF9SRUNMQUlNKSB8XFxuLS1cXG5uZXQvdGlwYy9iZWFyZXIuYz00OTc9aW50IHRpcGNfbDJfc2VuZF9tc2coc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3RpcGMvYmVhcmVyLmMtNTA3LVxcdGRlbHRhID0gU0tCX0RBVEFfQUxJR04oZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gLSBza2JfaGVhZHJvb20oc2tiKSk7XFxubmV0L3RpcGMvYmVhcmVyLmM6NTA4OlxcdGlmICgoZGVsdGEgXFx1MDAzZSAwKSBcXHUwMDI2XFx1MDAyNiBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgZGVsdGEsIDAsIEdGUF9BVE9NSUMpKSB7XFxubmV0L3RpcGMvYmVhcmVyLmMtNTA5LVxcdFxcdGtmcmVlX3NrYihza2IpO1xcbi0tXFxubmV0L3RpcGMvYmVhcmVyLmM9NzY0PXZvaWQgdGlwY19jbG9uZV90b19sb29wYmFjayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKnBrdHMpXFxuLS1cXG5uZXQvdGlwYy9iZWFyZXIuYy03NzUtXFx0XFx0ZXhwID0gU0tCX0RBVEFfQUxJR04oZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gLSBza2JfaGVhZHJvb20oc2tiKSk7XFxubmV0L3RpcGMvYmVhcmVyLmM6Nzc2OlxcdFxcdGlmIChleHAgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IHBza2JfZXhwYW5kX2hlYWQoc2tiLCBleHAsIDAsIEdGUF9BVE9NSUMpKSB7XFxubmV0L3RpcGMvYmVhcmVyLmMtNzc3LVxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbi0tXFxubmV0L3RpcGMvbXNnLmM9NTMyPWJvb2wgdGlwY19tc2dfdHJ5X2J1bmRsZShzdHJ1Y3Qgc2tfYnVmZiAqdHNrYiwgc3RydWN0IHNrX2J1ZmYgKipza2IsIHUzMiBtc3MsXFxuLS1cXG5uZXQvdGlwYy9tc2cuYy01NjItXFx0XFx0cmV0dXJuIHRydWU7XFxubmV0L3RpcGMvbXNnLmM6NTYzOlxcdGlmICh1bmxpa2VseShwc2tiX2V4cGFuZF9oZWFkKHRza2IsIElOVF9IX1NJWkUsIG1zcyAtIHRzeiAtIElOVF9IX1NJWkUsXFxubmV0L3RpcGMvbXNnLmMtNTY0LVxcdFxcdFxcdFxcdCAgICAgIEdGUF9BVE9NSUMpKSlcXG4tLVxcbm5ldC90aXBjL3VkcF9tZWRpYS5jPTIzNz1zdGF0aWMgaW50IHRpcGNfdWRwX3NlbmRfbXNnKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC90aXBjL3VkcF9tZWRpYS5jLTI0Ny1cXHRpZiAoc2tiX2hlYWRyb29tKHNrYikgXFx1MDAzYyBVRFBfTUlOX0hFQURST09NKSB7XFxubmV0L3RpcGMvdWRwX21lZGlhLmM6MjQ4OlxcdFxcdGVyciA9IHBza2JfZXhwYW5kX2hlYWQoc2tiLCBVRFBfTUlOX0hFQURST09NLCAwLCBHRlBfQVRPTUlDKTtcXG5uZXQvdGlwYy91ZHBfbWVkaWEuYy0yNDktXFx0XFx0aWYgKGVycilcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM9MzA9c3RhdGljIGludCB4ZnJtX3NrYl9jaGVja19zcGFjZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy00My1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjQ0OlxcdHJldHVybiBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgbmhlYWQsIG50YWlsLCBHRlBfQVRPTUlDKTtcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTQ1LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTE6Mjg6MjcuMzEwNzI4NTE1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY2NDk3NTg3NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyBgcHNrYl9jYXJ2ZWAgYW5kIGBwc2tiX2V4dHJhY3RgIFVzYWdlKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgYSBoYW5kbGUgb24gd2hlcmUgdGhlc2UgZnVuY3Rpb25zLCBgcHNrYl9jYXJ2ZWAgYW5kIGBwc2tiX2V4dHJhY3RgLCBhcmUgYWN0dWFsbHkgYmVpbmcgdXRpbGl6ZWQuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiB0aGVpciBuYW1lIGFuZCBsaWtlbHkgcmVsYXRpb24gdG8gcGFja2V0IGJ1ZmZlciBtYW5pcHVsYXRpb24sIGlzIHRvIHplcm8gaW4gb24gdGhlIG5ldHdvcmsgY29yZS4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZXhhbWluaW5nIGBuZXQvY29yZS9za2J1ZmYuY2AuIFRoYXQncyB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGJlZ2luIGRpZ2dpbmcsIGFzIGl0J3MgdGhlIGhlYXJ0IG9mIGhvdyB0aGVzZSBgc2tfYnVmZmAgc3RydWN0dXJlcyBhcmUgY3JlYXRlZCwgbWFuYWdlZCwgYW5kIG1hbmlwdWxhdGVkLiBJdCdzIGEga2V5IHNwb3QgdG8gZXhwZWN0IHRvIGZpbmQgdGhlbSBpbnZvbHZlZCBpbiBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcGVyaGFwcywgb3B0aW1pemF0aW9uLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEzNTgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMToyODozMy45NjA0ODk1ODlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MjA5NzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBza2JfY2FydmV8cHNrYl9leHRyYWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jPTY4MjY9RVhQT1JUX1NZTUJPTChhbGxvY19za2Jfd2l0aF9mcmFncyk7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy02ODI4LS8qIGNhcnZlIG91dCB0aGUgZmlyc3Qgb2ZmIGJ5dGVzIGZyb20gc2tiIHdoZW4gb2ZmIFxcdTAwM2MgaGVhZGxlbiAqL1xcbm5ldC9jb3JlL3NrYnVmZi5jOjY4Mjk6c3RhdGljIGludCBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTMyIG9mZixcXG5uZXQvY29yZS9za2J1ZmYuYy02ODMwLVxcdFxcdFxcdFxcdCAgICBjb25zdCBpbnQgaGVhZGxlbiwgZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy02ODkxLVxcbm5ldC9jb3JlL3NrYnVmZi5jOjY4OTI6c3RhdGljIGludCBwc2tiX2NhcnZlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHUzMiBvZmYsIGdmcF90IGdmcCk7XFxubmV0L2NvcmUvc2tidWZmLmMtNjg5My1cXG5uZXQvY29yZS9za2J1ZmYuYy02ODk0LS8qIGNhcnZlIG91dCB0aGUgZmlyc3QgZWF0IGJ5dGVzIGZyb20gc2tiJ3MgZnJhZ19saXN0LiBNYXkgcmVjdXJzZSBpbnRvXFxubmV0L2NvcmUvc2tidWZmLmM6Njg5NTogKiBwc2tiX2NhcnZlKClcXG5uZXQvY29yZS9za2J1ZmYuYy02ODk2LSAqL1xcbm5ldC9jb3JlL3NrYnVmZi5jOjY4OTc6c3RhdGljIGludCBwc2tiX2NhcnZlX2ZyYWdfbGlzdChzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaGluZm8sIGludCBlYXQsXFxubmV0L2NvcmUvc2tidWZmLmMtNjg5OC1cXHRcXHRcXHRcXHRnZnBfdCBnZnBfbWFzaylcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTY5MjUtXFx0XFx0XFx0fVxcbm5ldC9jb3JlL3NrYnVmZi5jOjY5MjY6XFx0XFx0XFx0aWYgKHBza2JfY2FydmUobGlzdCwgZWF0LCBnZnBfbWFzaykgXFx1MDAzYyAwKSB7XFxubmV0L2NvcmUvc2tidWZmLmMtNjkyNy1cXHRcXHRcXHRcXHRrZnJlZV9za2IoY2xvbmUpO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNjk0OS0gKi9cXG5uZXQvY29yZS9za2J1ZmYuYzo2OTUwOnN0YXRpYyBpbnQgcHNrYl9jYXJ2ZV9pbnNpZGVfbm9ubGluZWFyKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHUzMiBvZmYsXFxubmV0L2NvcmUvc2tidWZmLmMtNjk1MS1cXHRcXHRcXHRcXHQgICAgICAgaW50IHBvcywgZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy03MDA2LVxcdC8qIHNwbGl0IGxpbmUgaXMgaW4gZnJhZyBsaXN0ICovXFxubmV0L2NvcmUvc2tidWZmLmM6NzAwNzpcXHRpZiAoayA9PSAwIFxcdTAwMjZcXHUwMDI2IHBza2JfY2FydmVfZnJhZ19saXN0KHNoaW5mbywgb2ZmIC0gcG9zLCBnZnBfbWFzaykpIHtcXG5uZXQvY29yZS9za2J1ZmYuYy03MDA4LVxcdFxcdC8qIHNrYl9mcmFnX3VucmVmKCkgaXMgbm90IG5lZWRlZCBoZXJlIGFzIHNoaW5mby1cXHUwMDNlbnJfZnJhZ3MgPSAwLiAqL1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNzAzMy0vKiByZW1vdmUgbGVuIGJ5dGVzIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgc2tiICovXFxubmV0L2NvcmUvc2tidWZmLmM6NzAzNDpzdGF0aWMgaW50IHBza2JfY2FydmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTMyIGxlbiwgZ2ZwX3QgZ2ZwKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTcwMzUte1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNzAzOC1cXHRpZiAobGVuIFxcdTAwM2MgaGVhZGxlbilcXG5uZXQvY29yZS9za2J1ZmYuYzo3MDM5OlxcdFxcdHJldHVybiBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXIoc2tiLCBsZW4sIGhlYWRsZW4sIGdmcCk7XFxubmV0L2NvcmUvc2tidWZmLmMtNzA0MC1cXHRlbHNlXFxubmV0L2NvcmUvc2tidWZmLmM6NzA0MTpcXHRcXHRyZXR1cm4gcHNrYl9jYXJ2ZV9pbnNpZGVfbm9ubGluZWFyKHNrYiwgbGVuLCBoZWFkbGVuLCBnZnApO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTcwNDItfVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNzA0Ni0gKi9cXG5uZXQvY29yZS9za2J1ZmYuYzo3MDQ3OnN0cnVjdCBza19idWZmICpwc2tiX2V4dHJhY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZixcXG5uZXQvY29yZS9za2J1ZmYuYy03MDQ4LVxcdFxcdFxcdCAgICAgaW50IHRvX2NvcHksIGdmcF90IGdmcClcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTcwNTQtXFxubmV0L2NvcmUvc2tidWZmLmM6NzA1NTpcXHRpZiAocHNrYl9jYXJ2ZShjbG9uZSwgb2ZmLCBnZnApIFxcdTAwM2MgMCB8fFxcbm5ldC9jb3JlL3NrYnVmZi5jLTcwNTYtXFx0ICAgIHBza2JfdHJpbShjbG9uZSwgdG9fY29weSkpIHtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTcwNjEtfVxcbm5ldC9jb3JlL3NrYnVmZi5jOjcwNjI6RVhQT1JUX1NZTUJPTChwc2tiX2V4dHJhY3QpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTcwNjMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDExOjI4OjM0LjAwOTcwNjIxNloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3Mzk2MDEzODY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdW5kZXJzdGFuZGluZyB3aGF0J3MgZ29pbmcgb24gd2l0aCBgcHNrYl9leHRyYWN0YDpcblxuKipUaGlua2luZyBUaHJvdWdoIGBwc2tiX2V4dHJhY3RgJ3MgVXNlcyoqXG5cbkFscmlnaHQsIHNvIEknbSBwcmVzZW50ZWQgd2l0aCBgcHNrYl9leHRyYWN0YC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcyBpczogKldoYXQgZXhhY3RseSBpcyB0aGlzIHRvb2wgb3IgZnVuY3Rpb24gc3VwcG9zZWQgdG8gYmUgZG9pbmc/KiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29yZSBwdXJwb3NlLiBJcyBpdCBmb3IgcGFyc2luZyBkYXRhPyBJcyBpdCBmb3IgZXh0cmFjdGluZyBzcGVjaWZpYyBpbmZvcm1hdGlvbiBmcm9tIGEgcGFydGljdWxhciBmb3JtYXQ/IElzIGl0IHBhcnQgb2YgYSBsYXJnZXIgc3lzdGVtIG9yIHdvcmtmbG93PyBUaGUgbmFtZSBpdHNlbGYgZ2l2ZXMgYSB2YWd1ZSBoaW50LCBidXQgSSBuZWVkIHNwZWNpZmljcy5cblxuTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgZ2VuZXJhdGluZyBxdWVzdGlvbnM6XG5cbiogICBXaGF0IGtpbmRzIG9mIGlucHV0cyBkb2VzIGl0IGFjY2VwdD8gSXMgaXQgZmlsZS1iYXNlZCwgb3IgZG9lcyBpdCB0YWtlIGRhdGEgc3RyZWFtcz8gRG9lcyBpdCB3b3JrIHdpdGggZGlmZmVyZW50IGZpbGUgZm9ybWF0cyAoZS5nLiwgdGV4dCwgSlNPTiwgWE1MLCBiaW5hcnkpP1xuKiAgIFdoYXQgb3V0cHV0cyBkb2VzIGl0IHByb2R1Y2U/IERvZXMgaXQgZ2VuZXJhdGUgbmV3IGZpbGVzLCBwcmludCB0byB0aGUgY29uc29sZSwgb3IgcmV0dXJuIHN0cnVjdHVyZWQgZGF0YSB0byBhbm90aGVyIHByb2dyYW0/XG4qICAgV2hhdCBpcyBpdHMgaW50ZW5kZWQgdXNlIGNhc2U/IElzIGl0IGEgZ2VuZXJhbC1wdXJwb3NlIGV4dHJhY3RvciBvciBkZXNpZ25lZCBmb3IgYSBzcGVjaWZpYyBkb21haW4gKGUuZy4sIGJpb2luZm9ybWF0aWNzLCBuZXR3b3JrIGFuYWx5c2lzLCBsb2cgcHJvY2Vzc2luZyk/XG4qICAgSG93IGlzIGl0IGludGVncmF0ZWQgaW50byBleGlzdGluZyBwcm9jZXNzZXM/IElzIGl0IGEgc3RhbmRhbG9uZSB0b29sIG9yIHBhcnQgb2YgYSBsYXJnZXIgcGlwZWxpbmU/XG5cbkknbGwgYmUgdGhpbmtpbmcgaW4gdGVybXMgb2YgaG93IEkgY2FuIHVzZSB0aGlzIGluIG15IG93biB3b3JrIC0gd2hhdCBwcm9ibGVtcyBpdCBjYW4gc29sdmUuIEFyZSB0aGVyZSBvcHBvcnR1bml0aWVzIHRvIHVzZSB0aGUgb3V0cHV0IG9mIGBwc2tiX2V4dHJhY3RgIGluIG15IGN1cnJlbnQgcHJvamVjdHM/IENhbiBJIGludGVncmF0ZSBpdCBhcyBhIGNvbXBvbmVudCB0byBtYWtlIG15IHdvcmsgbW9yZSBlZmZpY2llbnQsIG9yIGVuaGFuY2UgaXQ/XG5cbk5leHQsIEknbGwgZ28gYmV5b25kIHRoZSBxdWVzdGlvbnMgLSBJIHdpbGwgYmVnaW4gdG8gdmlzdWFsaXplIHRoZSBjb2RlLiBJJ2xsIG5lZWQgdG8gdGhpbmsgYWJvdXQgdGhlIGNvZGUncyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBhbmQgbG9vayBmb3IgZG9jdW1lbnRhdGlvbi4gSSB3aWxsIGFuYWx5emUgaXRzIGFsZ29yaXRobXMgdG8ga25vdyB0aGUgaW50ZXJuYWwgbWVjaGFuaXNtLiBJIGhhdmUgdG8gbG9vayBmb3IgZXhhbXBsZSB1c2FnZSBpbiBvcmRlciB0byBzZWUgaG93IGl0IGlzIHVzZWQgaW4gYSByZWFsIHNjZW5hcmlvLiBJZiBJIGhhdmUgdGhlIHNvdXJjZSBjb2RlLCBJIHdpbGwgdXNlIHRoYXQgdG8gZm9ybSBteSB1bmRlcnN0YW5kaW5nLiBJIGhhdmUgdG8gc2VlIGhvdyBpdCBjYW4gYmUgdXNlZCBmb3IgbXkgYXJlYSBvZiBleHBlcnRpc2UuXG5cbkluIGVzc2VuY2UsIEknbSB0cnlpbmcgdG8gcXVpY2tseSBidWlsZCBhIG1lbnRhbCBtb2RlbCBvZiBgcHNrYl9leHRyYWN0YCBhbmQgaXRzIHJvbGUgd2l0aGluIGEgYnJvYWRlciBjb250ZXh0LiBUaGF0IHdheSwgSSBjYW4gZGV0ZXJtaW5lIGl0cyByZWxldmFuY2UgYW5kIHBvdGVudGlhbCB1c2VmdWxuZXNzIHRvIG1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjcxNSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDExOjI4OjQxLjQwNTcyMjI1NVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA3OTkwODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHNrYl9leHRyYWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc2tidWZmLmM9NzAzND1zdGF0aWMgaW50IHBza2JfY2FydmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTMyIGxlbiwgZ2ZwX3QgZ2ZwKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNzA0Ni0gKi9cXG5uZXQvY29yZS9za2J1ZmYuYzo3MDQ3OnN0cnVjdCBza19idWZmICpwc2tiX2V4dHJhY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZixcXG5uZXQvY29yZS9za2J1ZmYuYy03MDQ4LVxcdFxcdFxcdCAgICAgaW50IHRvX2NvcHksIGdmcF90IGdmcClcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTcwNjEtfVxcbm5ldC9jb3JlL3NrYnVmZi5jOjcwNjI6RVhQT1JUX1NZTUJPTChwc2tiX2V4dHJhY3QpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTcwNjMtXFxuLS1cXG5uZXQvcmRzL3RjcF9yZWN2LmM9MTU1PXN0YXRpYyBpbnQgcmRzX3RjcF9kYXRhX3JlY3YocmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvcmRzL3RjcF9yZWN2LmMtMjE4LVxcbm5ldC9yZHMvdGNwX3JlY3YuYzoyMTk6XFx0XFx0XFx0Y2xvbmUgPSBwc2tiX2V4dHJhY3Qoc2tiLCBvZmZzZXQsIHRvX2NvcHksIGFyZy1cXHUwMDNlZ2ZwKTtcXG5uZXQvcmRzL3RjcF9yZWN2LmMtMjIwLVxcdFxcdFxcdGlmICghY2xvbmUpIHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz01MzM9aXB0ZnNfcHNrYl9hZGRfZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKnRwbCwgc3RydWN0IGlwdGZzX3NrYl9mcmFnX3dhbGsgKndhbGssXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTYxLS8qKlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo1NjI6ICogaXB0ZnNfcHNrYl9leHRyYWN0X3NlcSgpIC0gQ3JlYXRlIGFuZCBsb2FkIGRhdGEgaW50byBhIG5ldyBza19idWZmLlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy01NjMtICogQHNrYmxlbjogdGhlIHRvdGFsIGRhdGEgc2l6ZSBmb3IgYHNrYmAuXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9NTc3PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjU3ODppcHRmc19wc2tiX2V4dHJhY3Rfc2VxKHUzMiBza2JsZW4sIHN0cnVjdCBza2Jfc2VxX3N0YXRlICpzdCwgdTMyIG9mZiwgaW50IGxlbilcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTc5LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz05NDM9c3RhdGljIGJvb2wgX19pbnB1dF9wcm9jZXNzX3BheWxvYWQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHUzMiBkYXRhLFxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTExMzEtXFx0XFx0XFx0XFx0XFx0XFx0XFx0IHNrYnNlcSwgaXBobGVuKSkpIHtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTEzMjpcXHRcXHRcXHRcXHRza2IgPSBpcHRmc19wc2tiX2V4dHJhY3Rfc2VxKGlwbGVuLCBza2JzZXEsIGRhdGEsIGNhcHR1cmVsZW4pO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMTMzLVxcdFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTE6Mjg6NDEuNDc2NTI4NjY5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEzMDUwOTE1Mjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBuZXR3b3JraW5nIGNvcmUgc2l0dWF0aW9uLlxuXG4qKk5ldHdvcmsgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gemVybyBpbiBvbiB3aGF0IEtjb25maWcgb3B0aW9ucyBzcGVjaWZpY2FsbHkgcGVydGFpbiB0byB0aGUgbmV0d29ya2luZyBjb3JlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW52ZXN0aWdhdGUgZnVuY3Rpb25zIGxpa2UgYHBza2JfZXhwYW5kX2hlYWRgIGFuZCB0aGUgZmlsZSBgc2tidWZmLmNgLiBJIGJlbGlldmUgdGhlc2UgYXJlIGZ1bmRhbWVudGFsIHBpZWNlcywgc3Ryb25nbHkgc3VnZ2VzdGluZyBhIGNvbm5lY3Rpb24gdG8gdGhlIHByaW1hcnkgYENPTkZJR19ORVRgIG9wdGlvbi4gVG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGVzZSBzdXNwaWNpb25zLiBJIHNob3VsZCBleGFtaW5lIHRoZSBgbmV0L2NvcmUvTWFrZWZpbGVgIGFuZCBgbmV0L0tjb25maWdgIGZpbGVzIGRpcmVjdGx5IHRvIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRlcGVuZGVuY2llcyBhbmQgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQuIFRoaXMgbGV2ZWwgb2YgZGV0YWlsIGlzIGNydWNpYWwgZm9yIGFueSBtb2RpZmljYXRpb25zIG9yIGRlZXBlciBhbmFseXNpcyB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzOTIwLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTE6Mjg6NTQuNTI3NDQ2NTg3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjIwMzcxMTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tidWZmLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9NYWtlZmlsZS01LVxcbm5ldC9jb3JlL01ha2VmaWxlOjY6b2JqLXkgOj0gc29jay5vIHNrYnVmZi5vIGRhdGFncmFtLm8gc3RyZWFtLm8gc2NtLm8gXFxcXFxcbm5ldC9jb3JlL01ha2VmaWxlLTctXFx0IGdlbl9zdGF0cy5vIGdlbl9lc3RpbWF0b3IubyBuZXRfbmFtZXNwYWNlLm8gc2VjdXJlX3NlcS5vIFxcXFxcXG4tLVxcbm5ldC9jb3JlL2Zsb3dfZGlzc2VjdG9yLmM9MTAzMz1zdGF0aWMgYm9vbCBpc19wcHBvZV9zZXNfaGRyX3ZhbGlkKGNvbnN0IHN0cnVjdCBwcHBvZV9oZHIgKmhkcilcXG4tLVxcbm5ldC9jb3JlL2Zsb3dfZGlzc2VjdG9yLmMtMTA1MS0gKiBUaGUgZnVuY3Rpb24gd2lsbCB0cnkgdG8gcmV0cmlldmUgaW5kaXZpZHVhbCBrZXlzIGludG8gdGFyZ2V0IHNwZWNpZmllZFxcbm5ldC9jb3JlL2Zsb3dfZGlzc2VjdG9yLmM6MTA1MjogKiBieSBmbG93X2Rpc3NlY3RvciBmcm9tIGVpdGhlciB0aGUgc2tidWZmIG9yIGEgcmF3IGJ1ZmZlciBzcGVjaWZpZWQgYnkgdGhlXFxubmV0L2NvcmUvZmxvd19kaXNzZWN0b3IuYy0xMDUzLSAqIHJlc3QgcGFyYW1ldGVycy5cXG4tLVxcbm5ldC9pcHY2L2NhbGlwc28uYz0xMjQ2PXN0YXRpYyB2b2lkIGNhbGlwc29fcmVxX2RlbGF0dHIoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbi0tXFxubmV0L2lwdjYvY2FsaXBzby5jLTEyNzgtLyoqXFxubmV0L2lwdjYvY2FsaXBzby5jOjEyNzk6ICogY2FsaXBzb19za2J1ZmZfb3B0cHRyIC0gRmluZCB0aGUgQ0FMSVBTTyBvcHRpb24gaW4gdGhlIHBhY2tldFxcbm5ldC9pcHY2L2NhbGlwc28uYy0xMjgwLSAqIEBza2I6IHRoZSBwYWNrZXRcXG4tLVxcbm5ldC9pcHY2L2NhbGlwc28uYy0xMjg2LSAqL1xcbm5ldC9pcHY2L2NhbGlwc28uYzoxMjg3OnN0YXRpYyB1bnNpZ25lZCBjaGFyICpjYWxpcHNvX3NrYnVmZl9vcHRwdHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2Ni9jYWxpcHNvLmMtMTI4OC17XFxuLS1cXG5uZXQvaXB2Ni9jYWxpcHNvLmM9MTM4OT1zdGF0aWMgaW50IGNhbGlwc29fc2tidWZmX2RlbGF0dHIoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L2NhbGlwc28uYy0xMzk1LVxcbm5ldC9pcHY2L2NhbGlwc28uYzoxMzk2OlxcdGlmICghY2FsaXBzb19za2J1ZmZfb3B0cHRyKHNrYikpXFxubmV0L2lwdjYvY2FsaXBzby5jLTEzOTctXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvaXB2Ni9jYWxpcHNvLmM9MTQzNj1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldGxibF9jYWxpcHNvX29wcyBvcHMgPSB7XFxuLS1cXG5uZXQvaXB2Ni9jYWxpcHNvLmMtMTQ0OC1cXHQub3B0X2dldGF0dHIgICAgICA9IGNhbGlwc29fb3B0X2dldGF0dHIsXFxubmV0L2lwdjYvY2FsaXBzby5jOjE0NDk6XFx0LnNrYnVmZl9vcHRwdHIgICAgPSBjYWxpcHNvX3NrYnVmZl9vcHRwdHIsXFxubmV0L2lwdjYvY2FsaXBzby5jLTE0NTAtXFx0LnNrYnVmZl9zZXRhdHRyICAgPSBjYWxpcHNvX3NrYnVmZl9zZXRhdHRyLFxcbi0tXFxubmV0L25ldGxhYmVsL25ldGxhYmVsX2NhbGlwc28uYz02MjY9dW5zaWduZWQgY2hhciAqY2FsaXBzb19vcHRwdHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF9jYWxpcHNvLmMtNjMxLVxcdGlmIChvcHMpXFxubmV0L25ldGxhYmVsL25ldGxhYmVsX2NhbGlwc28uYzo2MzI6XFx0XFx0cmV0X3ZhbCA9IG9wcy1cXHUwMDNlc2tidWZmX29wdHB0cihza2IpO1xcbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF9jYWxpcHNvLmMtNjMzLVxcdHJldHVybiByZXRfdmFsO1xcbi0tXFxubmV0L3J4cnBjL01ha2VmaWxlPTg9cnhycGMteSA6PSBcXFxcXFxuLS1cXG5uZXQvcnhycGMvTWFrZWZpbGUtMzUtXFx0c2VydmVyX2tleS5vIFxcXFxcXG5uZXQvcnhycGMvTWFrZWZpbGU6MzY6XFx0c2tidWZmLm8gXFxcXFxcbm5ldC9yeHJwYy9NYWtlZmlsZS0zNy1cXHR0eGJ1Zi5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTE6Mjg6NTQuODg5NDkzODRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDk5OTgzOTAwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIE5ldHdvcmsgQ29yZSBCdWlsZCBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGBuZXQvY29yZS9NYWtlZmlsZWAgYW5kIGl0J3MgY2xlYXIgdGhhdCBgc2tidWZmLm9gIGdldHMgYnVpbHQgYmFzZWQgb24gdGhlIGBDT05GSUdfTkVUYCBvcHRpb24uIFRoYXQncyBnb29kIHRvIGtub3csIGEgc29saWQgZm91bmRhdGlvbmFsIGRlcGVuZGVuY3kuIE5vdywgdG8gZ2V0IGEgYmlnZ2VyIHBpY3R1cmUgb2YgaG93IHRoaXMgZW50aXJlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGlzIHB1dCB0b2dldGhlciwgSSBuZWVkIHRvIGNoZWNrIG91dCB0aGUgcGFyZW50IGBuZXQvTWFrZWZpbGVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYENPTkZJR19ORVRgIGl0c2VsZiBpcyBkZWZpbmVkIGFuZCB1c2VkLCBhbmQgaG93IGV2ZXJ5dGhpbmcgaW4gdGhlIGBuZXRgIGRpcmVjdG9yeSBpcyBvcmNoZXN0cmF0ZWQgZnJvbSBhIGJ1aWxkIHBlcnNwZWN0aXZlLiBHb3R0YSB0cmFjZSB0aGlzIHRocm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0OTg3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTE6Mjg6NTkuODg5MzM1Mjc4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzNDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBuZXR3b3JraW5nLlxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0IyAyIFNlcCAyMDAwLCBDaHJpc3RvcGggSGVsbHdpZyBcXHUwMDNjaGNoQGluZnJhZGVhZC5vcmdcXHUwMDNlXFxuICAgNjpcXHQjIFJld3JpdHRlbiB0byB1c2UgbGlzdHMgaW5zdGVhZCBvZiBpZi1zdGF0ZW1lbnRzLlxcbiAgIDc6XFx0I1xcbiAgIDg6XFx0XFxuICAgOTpcXHRvYmoteVxcdFxcdFxcdFxcdDo9IGRldnJlcy5vIHNvY2tldC5vIGNvcmUvXFxuICAxMDpcXHRcXG4gIDExOlxcdG9iai0kKENPTkZJR19DT01QQVQpXFx0XFx0Kz0gY29tcGF0Lm9cXG4gIDEyOlxcdFxcbiAgMTM6XFx0IyBMTEMgaGFzIHRvIGJlIGxpbmtlZCBiZWZvcmUgdGhlIGZpbGVzIGluIG5ldC84MDIvXFxuICAxNDpcXHRvYmotJChDT05GSUdfTExDKVxcdFxcdCs9IGxsYy9cXG4gIDE1OlxcdG9iai15XFx0XFx0XFx0XFx0Kz0gZXRoZXJuZXQvIDgwMi8gc2NoZWQvIG5ldGxpbmsvIGJwZi8gZXRodG9vbC9cXG4gIDE2OlxcdG9iai0kKENPTkZJR19ORVRGSUxURVIpXFx0XFx0Kz0gbmV0ZmlsdGVyL1xcbiAgMTc6XFx0b2JqLSQoQ09ORklHX0lORVQpXFx0XFx0Kz0gaXB2NC9cXG4gIDE4OlxcdG9iai0kKENPTkZJR19UTFMpXFx0XFx0Kz0gdGxzL1xcbiAgMTk6XFx0b2JqLSQoQ09ORklHX1hGUk0pXFx0XFx0Kz0geGZybS9cXG4gIDIwOlxcdG9iai0kKENPTkZJR19VTklYKVxcdFxcdCs9IHVuaXgvXFxuICAyMTpcXHRvYmotJChDT05GSUdfSU5FVF9QU1ApXFx0XFx0Kz0gcHNwL1xcbiAgMjI6XFx0b2JqLXlcXHRcXHRcXHRcXHQrPSBpcHY2L1xcbiAgMjM6XFx0b2JqLSQoQ09ORklHX1BBQ0tFVClcXHRcXHQrPSBwYWNrZXQvXFxuICAyNDpcXHRvYmotJChDT05GSUdfTkVUX0tFWSlcXHRcXHQrPSBrZXkvXFxuICAyNTpcXHRvYmotJChDT05GSUdfQlJJREdFKVxcdFxcdCs9IGJyaWRnZS9cXG4gIDI2OlxcdG9iai0kKENPTkZJR19ORVRfREVWTElOSylcXHQrPSBkZXZsaW5rL1xcbiAgMjc6XFx0b2JqLXlcXHRcXHRcXHRcXHQrPSBkc2EvXFxuICAyODpcXHRvYmotJChDT05GSUdfWDI1KVxcdFxcdCs9IHgyNS9cXG4gIDI5OlxcdG9iai0kKENPTkZJR19MQVBCKVxcdFxcdCs9IGxhcGIvXFxuICAzMDpcXHRvYmotJChDT05GSUdfQ0FOKVxcdFxcdCs9IGNhbi9cXG4gIDMxOlxcdG9iai0kKENPTkZJR19CVClcXHRcXHQrPSBibHVldG9vdGgvXFxuICAzMjpcXHRvYmotJChDT05GSUdfU1VOUlBDKVxcdFxcdCs9IHN1bnJwYy9cXG4gIDMzOlxcdG9iai0kKENPTkZJR19BRl9SWFJQQylcXHRcXHQrPSByeHJwYy9cXG4gIDM0OlxcdG9iai0kKENPTkZJR19BRl9LQ00pXFx0XFx0Kz0ga2NtL1xcbiAgMzU6XFx0b2JqLSQoQ09ORklHX1NUUkVBTV9QQVJTRVIpXFx0Kz0gc3RycGFyc2VyL1xcbiAgMzY6XFx0b2JqLSQoQ09ORklHX0FUTSlcXHRcXHQrPSBhdG0vXFxuICAzNzpcXHRvYmotJChDT05GSUdfTDJUUClcXHRcXHQrPSBsMnRwL1xcbiAgMzg6XFx0b2JqLSQoQ09ORklHX1BIT05FVClcXHRcXHQrPSBwaG9uZXQvXFxuICAzOTpcXHRpZm5lcSAoJChDT05GSUdfVkxBTl84MDIxUSksKVxcbiAgNDA6XFx0b2JqLXlcXHRcXHRcXHRcXHQrPSA4MDIxcS9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTE6Mjg6NTkuODg5NDAwMjI4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4MjM2MTk0MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHRob3VnaCBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgRGVwZW5kZW5jeSBvZiBza2J1ZmYuYyBDb21waWxhdGlvbioqXG5cbk9rYXksIHNvIGBuZXQvY29yZS9za2J1ZmYuY2AgaXMgYmVpbmcgY29tcGlsZWQsIHdoaWNoIGltcGxpZXMgYENPTkZJR19ORVRgIGlzIGVuYWJsZWQsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGlzLiBUaGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gdHJhY2UgdGhhdCBkZXBlbmRlbmN5IGJhY2sgdG8gaXRzIHNvdXJjZS4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBgbmV0L0tjb25maWdgIGZpbGUuIFRoYXQncyB3aGVyZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGFyZSBkZWZpbmVkLiBJJ20gYXNzdW1pbmcgdGhhdCdzIHdoZXJlIEknbGwgZmluZCB0aGUgcmVsZXZhbnQgYGNvbmZpZ2Agc3RhdGVtZW50LCBwcm9iYWJseSBzb21ldGhpbmcgbGlrZSBgY29uZmlnIE5FVGAgb3Igc2ltaWxhciB0aGF0IGVuYWJsZXMgdGhlIGVudGlyZSBuZXR3b3JraW5nIHN0YWNrLiBUaGVuIEkgY2FuIGNvbmZpcm0gaWYgdGhlcmUncyBhIGRpcmVjdCBvciBpbmRpcmVjdCByZWxhdGlvbnNoaXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1ODg3LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMToyOTowNC43MTMwMjIxNjlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2NTk1OTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbnVjb25maWcgTkVUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0LzlwL0tjb25maWctNS1cXG5uZXQvOXAvS2NvbmZpZzo2Om1lbnVjb25maWcgTkVUXzlQXFxubmV0LzlwL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiUGxhbiA5IFJlc291cmNlIFNoYXJpbmcgU3VwcG9ydCAoOVAyMDAwKVxcXCJcXG4tLVxcbm5ldC9LY29uZmlnLTUtXFxubmV0L0tjb25maWc6NjptZW51Y29uZmlnIE5FVFxcbm5ldC9LY29uZmlnLTctXFx0Ym9vbCBcXFwiTmV0d29ya2luZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L0tjb25maWc9MTU0PWNvbmZpZyBORVRXT1JLX1BIWV9USU1FU1RBTVBJTkdcXG4tLVxcbm5ldC9LY29uZmlnLTE2NC1cXG5uZXQvS2NvbmZpZzoxNjU6bWVudWNvbmZpZyBORVRGSUxURVJcXG5uZXQvS2NvbmZpZy0xNjYtXFx0Ym9vbCBcXFwiTmV0d29yayBwYWNrZXQgZmlsdGVyaW5nIGZyYW1ld29yayAoTmV0ZmlsdGVyKVxcXCJcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZy0yLVxcbm5ldC9kc2EvS2NvbmZpZzozOm1lbnVjb25maWcgTkVUX0RTQVxcbm5ldC9kc2EvS2NvbmZpZy00LVxcdHRyaXN0YXRlIFxcXCJEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlXFxcIlxcbi0tXFxubmV0L2lmZS9LY29uZmlnLTUtXFxubmV0L2lmZS9LY29uZmlnOjY6bWVudWNvbmZpZyBORVRfSUZFXFxubmV0L2lmZS9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIkludGVyLUZFIGJhc2VkIG9uIElFVEYgRm9yQ0VTIEludGVyRkUgTEZCXFxcIlxcbi0tXFxubmV0L25zaC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L25zaC9LY29uZmlnOjI6bWVudWNvbmZpZyBORVRfTlNIXFxubmV0L25zaC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk5ldHdvcmsgU2VydmljZSBIZWFkZXIgKE5TSCkgcHJvdG9jb2xcXFwiXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy01LVxcbm5ldC9zY2hlZC9LY29uZmlnOjY6bWVudWNvbmZpZyBORVRfU0NIRURcXG5uZXQvc2NoZWQvS2NvbmZpZy03LVxcdGJvb2wgXFxcIlFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZ1xcXCJcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnPTQxOD1jb25maWcgTkVUX1NDSF9EVUFMUEkyXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy00MjktXFxubmV0L3NjaGVkL0tjb25maWc6NDMwOm1lbnVjb25maWcgTkVUX1NDSF9ERUZBVUxUXFxubmV0L3NjaGVkL0tjb25maWctNDMxLVxcdGJvb2wgXFxcIkFsbG93IG92ZXJyaWRlIGRlZmF1bHQgcXVldWUgZGlzY2lwbGluZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTE6Mjk6MDQuNzc5NjI0Mjg0WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4NTEzOTQ0MTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFNLQiBNZW1vcnkgTWFuYWdlbWVudCBDaGFuZ2VzKipcblxuT2theSwgbGV0J3MgbmFpbCBkb3duIHdoYXQgd2UncmUgZ29pbmcgdG8gZm9jdXMgb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBpbXBvcnRhbnQgc3ltYm9scyBmb3IgZnV6emluZywgYW5kIGJhc2VkIG9uIHRoZSBwYXRjaCwgaXQgc2VlbXMgbGlrZSBgcHNrYl9leHBhbmRfaGVhZGAgYW5kIGBwc2tiX2V4dHJhY3RgIGFyZSBrZXkuIEkgc2VlIHRoZXkncmUgYm90aCBleHBvcnRlZCBzeW1ib2xzLCBhbmQgYHBza2JfZXh0cmFjdGAgaW5kaXJlY3RseSBjYWxscyBgcHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyYC5cblxuV2FpdCBhIG1pbnV0ZSwgYXJlIHRob3NlIGBza2JfZGF0YXJlZl9iaWFzYCBhbmQgYHNrYl9kYXRhX2lzX3NoYXJlZGAgZnVuY3Rpb25zIGlubGluZWQ/IFllcywgdGhleSdyZSBkZWZpbmVkIGFzIGBzdGF0aWMgaW5saW5lYCBpbiBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAsIHNvIHRoZXkgYXJlLiBBbmQgYHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcmAgaXMgYSBzdGF0aWMgZnVuY3Rpb24gaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgYWxzbyByZW1lbWJlciB0aGF0IGBwc2tiX2V4cGFuZF9oZWFkYCBpcyBhbiBBUEkgZW50cnlwb2ludC5cblxuTm93LCBsZXQgbWUgbWFrZSBzdXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgdXNlZC4gQSBxdWljayBjaGVjayBzaG93cyB0aGF0IGBwc2tiX2V4cGFuZF9oZWFkYCBpcyBwcmV0dHkgdWJpcXVpdG91cywgYmVpbmcgdXNlZCBpbiBmdW5jdGlvbnMgbGlrZSBgc2tiX3VuY2xvbmVgLCBgc2tiX3JlYWxsb2NfaGVhZHJvb21gLCBgc2tiX2Nvd19kYXRhYCwgYW5kIGBfX19wc2tiX3RyaW1gLiBUaGF0IGNvbmZpcm1zIG15IGluaXRpYWwgaHVuY2guIFNvLCBJJ20gY29uZmlkZW50IHRoYXQgdGhlIGNvcmUgYEZvY3VzU3ltYm9sc2AgYXJlIGBbXCJwc2tiX2V4cGFuZF9oZWFkXCIsIFwicHNrYl9leHRyYWN0XCJdYC5cblxuUmVnYXJkaW5nIGBFbmFibGVDb25maWdzYCwgdGhlIHJlbGV2YW50IGZlYXR1cmUgc2V0IGlzIGRlZmluaXRlbHkgYE5FVGAuXG5cbk9rYXksIGxldCdzIHN1bW1hcml6ZSB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzLiBXZSdyZSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZ2AgdG8gYHRydWVgIOKAkyBpdOKAmXMgYSBjcml0aWNhbCBjaGFuZ2UuIFRoZSBgUmVhc29uaW5nYCB3aWxsIGhpZ2hsaWdodCB0aGUgZmFjdCB0aGF0IHRoZSBwYXRjaCByZXBsYWNlcyBgc2tiX2Nsb25lZChza2IpYCB3aXRoIGBza2JfZGF0YV9pc19zaGFyZWQoc2tiKWAgaW4gYHBza2JfZXhwYW5kX2hlYWRgIGFuZCBgcHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyYCBhbmQgaW50cm9kdWNlcyBoZWxwZXIgZnVuY3Rpb25zIGBza2JfZGF0YXJlZl9iaWFzYCBhbmQgYHNrYl9kYXRhX2lzX3NoYXJlZGAgaW4gYGluY2x1ZGUvbGludXgvc2tidWZmLmhgIGZvciBoYW5kbGluZyBgc2tiLVx1MDAzZW5vaGRyYC4gVGhpcyBjb3JlIGxvZ2ljIHNoaWZ0IGltcGFjdHMgU0tCIG1lbW9yeSBtYW5hZ2VtZW50LCBjbG9uaW5nLCBhbmQgdW5zaGFyaW5nIHRocm91Z2hvdXQgdGhlIG5ldHdvcmtpbmcgc3RhY2suIFRoZXJlZm9yZSwgdGhlIGNoYW5nZSBpcyByZWFjaGFibGUsIHNpZ25pZmljYW50LCBhbmQgZGVzZXJ2ZXMgZm9jdXNlZCBmdXp6aW5nLiBGaW5hbGx5LCB0aGUgYEZvY3VzU3ltYm9sc2Agd2lsbCBiZSBgW1wicHNrYl9leHBhbmRfaGVhZFwiLCBcInBza2JfZXh0cmFjdFwiXWAsIGFuZCB0aGUgYEVuYWJsZUNvbmZpZ3NgIHdpbGwgYmUgYFtcIk5FVFwiXWAuXG5cbkxldCdzIGRvIHRoaXMuIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NTc4LCJPdXRwdXRUb2tlbnMiOjE0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMToyOToyMy4yOTM1NzE4OTRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDcwNTA1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHNrYl9leHBhbmRfaGVhZFwiLFxuICAgIFwicHNrYl9leHRyYWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBgc2tiX2RhdGFyZWZfYmlhcygpYCBhbmQgYHNrYl9kYXRhX2lzX3NoYXJlZCgpYCB0byBmaXggZGF0YSBzaGFyaW5nIGRldGVjdGlvbiBmb3Igc2tfYnVmZnMgd2hlbiBgc2tiLVxcdTAwM2Vub2hkcmAgaXMgc2V0LCB1cGRhdGluZyBgcHNrYl9leHBhbmRfaGVhZGAgYW5kIGBwc2tiX2NhcnZlX2luc2lkZV9oZWFkZXJgIHRvIHVzZSBgc2tiX2RhdGFfaXNfc2hhcmVkYCByYXRoZXIgdGhhbiBgc2tiX2Nsb25lZGAuIFRoaXMgbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGJ1ZmZlciBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBza2JfZXhwYW5kX2hlYWRcIixcbiAgICBcInBza2JfZXh0cmFjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYHNrYl9kYXRhcmVmX2JpYXMoKWAgYW5kIGBza2JfZGF0YV9pc19zaGFyZWQoKWAgdG8gZml4IGRhdGEgc2hhcmluZyBkZXRlY3Rpb24gZm9yIHNrX2J1ZmZzIHdoZW4gYHNrYi1cXHUwMDNlbm9oZHJgIGlzIHNldCwgdXBkYXRpbmcgYHBza2JfZXhwYW5kX2hlYWRgIGFuZCBgcHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyYCB0byB1c2UgYHNrYl9kYXRhX2lzX3NoYXJlZGAgcmF0aGVyIHRoYW4gYHNrYl9jbG9uZWRgLiBUaGlzIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBidWZmZXIgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTE6Mjk6MjMuMzc0MjgzOTM5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTEzOTg1NTM5MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMToyOToyMy4zNzQ3NzE2MDhaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMTEzOTgwNjI3NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYHNrYl9kYXRhcmVmX2JpYXMoKWAgYW5kIGBza2JfZGF0YV9pc19zaGFyZWQoKWAgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGRhdGEgYnVmZmVyIC8gc2hhcmVkIGluZm8gb2YgYW4gc2tfYnVmZiBpcyBhY3RpdmVseSBzaGFyZWQgYnkgb3RoZXIgY2xvbmVzIGR1cmluZyBoZWFkIHJlYWxsb2NhdGlvbiAoYHBza2JfZXhwYW5kX2hlYWRgIGFuZCBgcHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyYCkuXFxuXFxuS01TQU4gdnMgS0FTQU4gYW5hbHlzaXM6XFxuLSBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkga2VybmVsIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZGF0YSBsZW5ndGggLyBib3VuZHMgY2FsY3VsYXRpb25zIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIG1lbW9yeS4gVGhlIGZpZWxkcyBhY2Nlc3NlZCAoYHNrYi1cXHUwMDNlY2xvbmVkYCwgYHNrYi1cXHUwMDNlbm9oZHJgLCBhbmQgYHNoaW5mby1cXHUwMDNlZGF0YXJlZmApIGFyZSB3ZWxsLWRlZmluZWQgYW5kIGluaXRpYWxpemVkIHNrYiBtZXRhZGF0YS5cXG4tIEtBU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSByaXNrcyBhc3NvY2lhdGVkIHdpdGggdGhlc2UgcmVmY291bnQgYW5kIHNoYXJpbmcgY2hlY2sgbW9kaWZpY2F0aW9ucyByZWxhdGUgdG8gc2tiIGRhdGEgb3duZXJzaGlwLCBzdWNoIGFzIHByZW1hdHVyZSBoZWFkIGZyZWVpbmcgb3IgaW1wcm9wZXIgZnJhZyByZWZjb3VudGluZyBsZWFkaW5nIHRvIFVzZS1BZnRlci1GcmVlIChVQUYpIG9yIERvdWJsZS1GcmVlIGVycm9ycy4gVGhlc2UgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgYXJlIGRpcmVjdGx5IGRldGVjdGVkIGJ5IEtBU0FOLlxcblxcblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDYzYjE0NjBhMDQyMDY3MDIzNTE3NzY1Mzc2NWJhMzNhMDQwOWU5MDhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxMToyNjozMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2tidWZmLmggYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXG5pbmRleCA0MjFmNmZjNDU0NTExLi5lZmVlZjE0OGUxYmE1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxuKysrIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxuQEAgLTEyOTUsNiArMTI5NSwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2tiX3VucmVmKHN0cnVjdCBza19idWZmICpza2IpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBpbnQgc2tiX2RhdGFyZWZfYmlhcyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3tcbitcdHJldHVybiBza2ItXHUwMDNlbm9oZHIgPyAoMSBcdTAwM2NcdTAwM2MgU0tCX0RBVEFSRUZfU0hJRlQpICsgMSA6IDE7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBza2JfZGF0YV91bnJlZihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0ICBzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaGluZm8pXG4ge1xuQEAgLTEzMDMsNyArMTMwOCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBza2JfZGF0YV91bnJlZihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKCFza2ItXHUwMDNlY2xvbmVkKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdGJpYXMgPSBza2ItXHUwMDNlbm9oZHIgPyAoMSBcdTAwM2NcdTAwM2MgU0tCX0RBVEFSRUZfU0hJRlQpICsgMSA6IDE7XG4rXHRiaWFzID0gc2tiX2RhdGFyZWZfYmlhcyhza2IpO1xuIFxuIFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNnNoaW5mby1cdTAwM2VkYXRhcmVmKSA9PSBiaWFzKVxuIFx0XHRzbXBfcm1iKCk7XG5AQCAtMjAxOSw2ICsyMDI0LDEyIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnNrYl9nZXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiAgKiBJZiB1c2VycyA9PSAxLCB3ZSBhcmUgdGhlIG9ubHkgb3duZXIgYW5kIGNhbiBhdm9pZCByZWR1bmRhbnQgYXRvbWljIGNoYW5nZXMuXG4gICovXG4gXG4rc3RhdGljIGlubGluZSBib29sIHNrYl9kYXRhX2lzX3NoYXJlZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3tcbitcdHJldHVybiBza2ItXHUwMDNlY2xvbmVkIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIGF0b21pY19yZWFkKFx1MDAyNnNrYl9zaGluZm8oc2tiKS1cdTAwM2VkYXRhcmVmKSAhPSBza2JfZGF0YXJlZl9iaWFzKHNrYik7XG4rfVxuK1xuIC8qKlxuICAqXHRza2JfY2xvbmVkIC0gaXMgdGhlIGJ1ZmZlciBhIGNsb25lXG4gICpcdEBza2I6IGJ1ZmZlciB0byBjaGVja1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmNcbmluZGV4IDk2NmFmM2JlZWQ5NGQuLmY0YzA2NDVmOThkM2YgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9za2J1ZmYuY1xuKysrIGIvbmV0L2NvcmUvc2tidWZmLmNcbkBAIC0yMzMxLDcgKzIzMzEsNyBAQCBpbnQgcHNrYl9leHBhbmRfaGVhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmhlYWQsIGludCBudGFpbCxcbiBcdCAqIGlzIG5vdCB3ZSBjYW4ganVzdCBkcm9wIHRoZSBvbGQgaGVhZCBhbmQgbGV0IHRoZSBleGlzdGluZyByZWZjb3VudFxuIFx0ICogYmUgc2luY2UgYWxsIHdlIGRpZCBpcyByZWxvY2F0ZSB0aGUgdmFsdWVzXG4gXHQgKi9cbi1cdGlmIChza2JfY2xvbmVkKHNrYikpIHtcbitcdGlmIChza2JfZGF0YV9pc19zaGFyZWQoc2tiKSkge1xuIFx0XHRpZiAoc2tiX29ycGhhbl9mcmFncyhza2IsIGdmcF9tYXNrKSlcbiBcdFx0XHRnb3RvIG5vZnJhZ3M7XG4gXHRcdGlmIChza2JfemNvcHkoc2tiKSlcbkBAIC02ODU1LDcgKzY4NTUsNyBAQCBzdGF0aWMgaW50IHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1MzIgb2ZmLFxuIFx0ICAgICAgIHNrYl9zaGluZm8oc2tiKSxcbiBcdCAgICAgICBvZmZzZXRvZihzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvLFxuIFx0XHRcdGZyYWdzW3NrYl9zaGluZm8oc2tiKS1cdTAwM2Vucl9mcmFnc10pKTtcbi1cdGlmIChza2JfY2xvbmVkKHNrYikpIHtcbitcdGlmIChza2JfZGF0YV9pc19zaGFyZWQoc2tiKSkge1xuIFx0XHQvKiBkcm9wIHRoZSBvbGQgaGVhZCBncmFjZWZ1bGx5ICovXG4gXHRcdGlmIChza2Jfb3JwaGFuX2ZyYWdzKHNrYiwgZ2ZwX21hc2spKSB7XG4gXHRcdFx0c2tiX2tmcmVlX2hlYWQoZGF0YSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMToyOToyMy4zNzQ3NzMwNDhaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTUxMDU0MzUyMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRXZhbHVhdGlvbiBmb3IgU0tCIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHNlcmllcywgdG91Y2hpbmcgYGluY2x1ZGUvbGludXgvc2tidWZmLmhgIGFuZCBgbmV0L2NvcmUvc2tidWZmLmNgLCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24sIG9yIGlmIHN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQuIEkgbmVlZCB0byBhcHBseSBhIHN5c3RlbWF0aWMgYXBwcm9hY2ggYmFzZWQgb24gdGhvc2UgY3JpdGVyaWEuXG5cbkZpcnN0LCBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiBvZiB0aGUgcnVsZXMuIFRoZSBwcmltYXJ5IGNvbmNlcm4gZm9yIEtNU0FOIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBwYXJ0aWN1bGFybHkgd2hlbiBpdCBjb21lcyB0byBkYXRhIHN0cnVjdHVyZXMgcGFzc2VkIHRvIHVzZXJzcGFjZSBvciB3aGVuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGluZmx1ZW5jZSBjb250cm9sIGZsb3cuIEknbSBhbHNvIGxvb2tpbmcgZm9yIGFueSBhbGxvY2F0aW9ucyBvciBpbml0aWFsaXphdGlvbnMgb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlci4gQ29udmVyc2VseSwgaWYgaXQncyBwcmltYXJpbHkgYWJvdXQgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIG92ZXJmbG93cywgTlVMTCBkZXJlZmVyZW5jZXMsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MsIEtBU0FOIGlzIGxpa2VseSB0aGUgcmlnaHQgdG9vbC5cblxuTm93LCBsZXQncyBhbmFseXplIHRoZSBwYXRjaC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gaW52b2x2ZSBzb21lIGNoYW5nZXMgcmVsYXRlZCB0byBgc2tfYnVmZmAgKHNvY2tldCBidWZmZXIpIHJlZmVyZW5jZSBjb3VudGluZywgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiBkYXRhIHNoYXJpbmcgYW5kIGNsb25pbmcuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgYHNrYl9kYXRhcmVmX2JpYXNgIGZ1bmN0aW9uIGFuZCBgc2tiX2RhdGFfaXNfc2hhcmVkYCBmdW5jdGlvbi4gSXQgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byBvcHRpbWl6YXRpb25zIGFuZCByZWZhY3RvcmluZ3MgYXJvdW5kIGhvdyBTS0JzIGFyZSBoYW5kbGVkIGFuZCBjbG9uZWQuXG5cblNwZWNpZmljYWxseSwgSSBzZWUgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgYHBza2JfZXhwYW5kX2hlYWRgIGFuZCBgcHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyYC4gQm90aCBhcmUgcmVsYXRlZCB0byBtb2RpZnlpbmcgU0tCIGhlYWRlcnMvZGF0YSwgcGFydGljdWxhcmx5IGluIGNhc2VzIG9mIGNsb25pbmcgYW5kIHNoYXJpbmcuIEdpdmVuIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSByZWxhdGVkIHRvIG1lbW9yeSBtYW5pcHVsYXRpb24gd2l0aGluIHRoZSBTS0Igc3RydWN0dXJlIGl0c2VsZiwgYW5kIGJhc2VkIG9uIHRoZSBmYWN0IHRoYXQgYHNrYl9kYXRhX2lzX3NoYXJlZGAgaXMgYmVpbmcgdXNlZCBpbiB0aG9zZSB0d28gZnVuY3Rpb25zLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRob3NlIGZ1bmN0aW9ucyBkbywgd2hhdCBraW5kIG9mIG9wZXJhdGlvbnMgdGhleSBwZXJmb3JtIG9uIHRoZSBTS0IgZGF0YSwgYW5kIHRoZSBjb250ZXh0IGluIHdoaWNoIHRoZXkncmUgY2FsbGVkLiBJIHN1c3BlY3QgdGhhdCBiZWNhdXNlIHdlJ3JlIGxvb2tpbmcgYXQgb3BlcmF0aW9ucyBvbiBTS0IgZGF0YSwgaXQncyBwb3NzaWJsZSB0aGF0IGRhdGEgaXMgcG90ZW50aWFsbHkgYmVpbmcgcmVsb2NhdGVkLCB3aGljaCBtaWdodCBiZSBhIHNjZW5hcmlvIHdoZXJlIHdlIHdvdWxkIHdhbnQgdG8gY2hlY2sgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBJIGFsc28ga25vdyB0aGF0IFNLQnMgYXJlIGludm9sdmVkIGluIG5ldHdvcmsgSS9PLCBtZWFuaW5nIHRoYXQgZGF0YSBjYW4gdHJhbnNpdCBmcm9tIGtlcm5lbCBzcGFjZSB0byB1c2VyIHNwYWNlIGFuZCB2aWNlLXZlcnNhLCB3aGljaCBjb3VsZCBiZSBhbm90aGVyIHNvdXJjZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuVG8gZGV0ZXJtaW5lIHRoaXMsIEknbGwgbmVlZCB0byBkbyBzb21lIGNvZGUgYXJjaGFlb2xvZ3kgYW5kIHNlZSB3aGF0IGZ1bmN0aW9ucyBjYWxsIGBwc2tiX2V4cGFuZF9oZWFkYCBhbmQgYHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcmAgYW5kIGhvdyBTS0IgZGF0YSBpcyBzdWJzZXF1ZW50bHkgdXNlZC4gVGhlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRob3NlIGZ1bmN0aW9ucyBpbiBjb250ZXh0LCBwcm9iYWJseSB1c2luZyBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgYW5kIHNlZSBob3cgdGhlIHBhdGNoIGltcGFjdHMgdGhlIGJlaGF2aW9yLiBUaGVuLCBJIGNhbiBtYWtlIGEgZGVjaXNpb24gYXMgdG8gd2hldGhlciBvciBub3QgdGhpcyB3YXJyYW50cyBLTVNBTi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc5MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMTozMDoxOC40ODAyMTIwNDNaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NzExODMzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwc2tiX2V4cGFuZF9oZWFkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jPTIyNzU9RVhQT1JUX1NZTUJPTChfX3Bza2JfY29weV9mY2xvbmUpO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjI3Ny0vKipcXG5uZXQvY29yZS9za2J1ZmYuYzoyMjc4OiAqXFx0cHNrYl9leHBhbmRfaGVhZCAtIHJlYWxsb2NhdGUgaGVhZGVyIG9mIFxcdTAwMjZza19idWZmXFxubmV0L2NvcmUvc2tidWZmLmMtMjI3OS0gKlxcdEBza2I6IGJ1ZmZlciB0byByZWFsbG9jYXRlXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0yMjk2LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjIyOTc6aW50IHBza2JfZXhwYW5kX2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5oZWFkLCBpbnQgbnRhaWwsXFxubmV0L2NvcmUvc2tidWZmLmMtMjI5OC1cXHRcXHQgICAgIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjM3OS19XFxubmV0L2NvcmUvc2tidWZmLmM6MjM4MDpFWFBPUlRfU1lNQk9MKHBza2JfZXhwYW5kX2hlYWQpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTIzODEtXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0yMzg0PXN0cnVjdCBza19idWZmICpza2JfcmVhbGxvY19oZWFkcm9vbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaGVhZHJvb20pXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0yMzkyLVxcdFxcdHNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcXG5uZXQvY29yZS9za2J1ZmYuYzoyMzkzOlxcdFxcdGlmIChza2IyIFxcdTAwMjZcXHUwMDI2IHBza2JfZXhwYW5kX2hlYWQoc2tiMiwgU0tCX0RBVEFfQUxJR04oZGVsdGEpLCAwLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTIzOTQtXFx0XFx0XFx0XFx0XFx0ICAgICBHRlBfQVRPTUlDKSkge1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MjQwND1pbnQgX19za2JfdW5jbG9uZV9rZWVwdHJ1ZXNpemUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgcHJpKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjQxMi1cXG5uZXQvY29yZS9za2J1ZmYuYzoyNDEzOlxcdHJlcyA9IHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCAwLCBwcmkpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTI0MTQtXFx0aWYgKHJlcylcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTI0NDg9c3RydWN0IHNrX2J1ZmYgKnNrYl9leHBhbmRfaGVhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaGVhZHJvb20pXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0yNDU4LVxcdGRlbHRhID0gU0tCX0RBVEFfQUxJR04oZGVsdGEpO1xcbm5ldC9jb3JlL3NrYnVmZi5jOjI0NTk6XFx0LyogcHNrYl9leHBhbmRfaGVhZCgpIG1pZ2h0IGNyYXNoLCBpZiBza2IgaXMgc2hhcmVkLiAqL1xcbm5ldC9jb3JlL3NrYnVmZi5jLTI0NjAtXFx0aWYgKHNrYl9zaGFyZWQoc2tiKSB8fCAhaXNfc2tiX3dtZW0oc2tiKSkge1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjQ3MC1cXHR9XFxubmV0L2NvcmUvc2tidWZmLmM6MjQ3MTpcXHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIGRlbHRhLCAwLCBHRlBfQVRPTUlDKSlcXG5uZXQvY29yZS9za2J1ZmYuYy0yNDcyLVxcdFxcdGdvdG8gZmFpbDtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTI1Njc9aW50IF9fc2tiX3BhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcGFkLCBib29sIGZyZWVfb25fZXJyb3IpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0yNTc5LVxcdGlmIChsaWtlbHkoc2tiX2Nsb25lZChza2IpIHx8IG50YWlsIFxcdTAwM2UgMCkpIHtcXG5uZXQvY29yZS9za2J1ZmYuYzoyNTgwOlxcdFxcdGVyciA9IHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCBudGFpbCwgR0ZQX0FUT01JQyk7XFxubmV0L2NvcmUvc2tidWZmLmMtMjU4MS1cXHRcXHRpZiAodW5saWtlbHkoZXJyKSlcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTI3MjQ9aW50IF9fX3Bza2JfdHJpbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjczMy1cXHRpZiAoc2tiX2Nsb25lZChza2IpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2NvcmUvc2tidWZmLmM6MjczNDpcXHQgICAgdW5saWtlbHkoKGVyciA9IHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCAwLCBHRlBfQVRPTUlDKSkpKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTI3MzUtXFx0XFx0cmV0dXJuIGVycjtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTI4Nzg9dm9pZCAqX19wc2tiX3B1bGxfdGFpbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZGVsdGEpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0yODg5LVxcdGlmIChlYXQgXFx1MDAzZSAwIHx8IHNrYl9jbG9uZWQoc2tiKSkge1xcbm5ldC9jb3JlL3NrYnVmZi5jOjI4OTA6XFx0XFx0aWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCBlYXQgXFx1MDAzZSAwID8gZWF0ICsgMTI4IDogMCxcXG5uZXQvY29yZS9za2J1ZmYuYy0yODkxLVxcdFxcdFxcdFxcdCAgICAgR0ZQX0FUT01JQykpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz01MzgzPWludCBza2JfY293X2RhdGEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRhaWxiaXRzLCBzdHJ1Y3Qgc2tfYnVmZiAqKnRyYWlsZXIpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy01NDA0LVxcdFxcdGlmIChza2JfdGFpbHJvb20oc2tiKSBcXHUwMDNjIHRhaWxiaXRzIFxcdTAwMjZcXHUwMDI2XFxubmV0L2NvcmUvc2tidWZmLmM6NTQwNTpcXHRcXHQgICAgcHNrYl9leHBhbmRfaGVhZChza2IsIDAsIHRhaWxiaXRzLXNrYl90YWlscm9vbShza2IpKzEyOCwgR0ZQX0FUT01JQykpXFxubmV0L2NvcmUvc2tidWZmLmMtNTQwNi1cXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTYzODM9aW50IHNrYl9lbnN1cmVfd3JpdGFibGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHdyaXRlX2xlbilcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTYzOTAtXFxubmV0L2NvcmUvc2tidWZmLmM6NjM5MTpcXHRyZXR1cm4gcHNrYl9leHBhbmRfaGVhZChza2IsIDAsIDAsIEdGUF9BVE9NSUMpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTYzOTItfVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NjM5NT1pbnQgc2tiX2Vuc3VyZV93cml0YWJsZV9oZWFkX3RhaWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTY0MTQtXFxubmV0L2NvcmUvc2tidWZmLmM6NjQxNTpcXHRyZXR1cm4gcHNrYl9leHBhbmRfaGVhZChza2IsIG5lZWRlZF9oZWFkcm9vbSwgbmVlZGVkX3RhaWxyb29tLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTY0MTYtXFx0XFx0XFx0XFx0R0ZQX0FUT01JQyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDExOjMwOjE4LjgyNzMzNjQxOFoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjcyMzI0OTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgcHNrYl9leHBhbmRfaGVhZGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgcHNrYl9leHBhbmRfaGVhZGAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgY29kZSBhcm91bmQgbGluZXMgMjI5NyB0byAyMzgwLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgY2h1bmsgaGFuZGxlcyBwYWNrZXQgYnVmZmVyIG1hbmlwdWxhdGlvbi4gSSdtIHByaW1hcmlseSBpbnRlcmVzdGVkIGluIGhvdyBpdCdzIGV4cGFuZGluZyB0aGUgaGVhZCBvZiB0aGUgc2tiLiBXaGF0IGVkZ2UgY2FzZXMgYXJlIHRoZXkgY29uc2lkZXJpbmc/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvdyB2dWxuZXJhYmlsaXRpZXMgbHVya2luZyBpbiB0aGlzIHNlY3Rpb24/IEknbGwgYmUgbG9va2luZyBmb3IgYW55IGluZWZmaWNpZW5jaWVzIG9yIGNsZXZlciBvcHRpbWl6YXRpb25zIGFzIHdlbGwuIFNwZWNpZmljYWxseSBJIG5lZWQgdG8ga25vdyB0aGUgaW1wbGljYXRpb25zIG9mIGFueSBidWZmZXIgY29weS9tb3ZlIG9wZXJhdGlvbnMgaGFwcGVuaW5nIGhlcmUuIEl0J3MgdGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kLiBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCBhIGJldHRlciBzZW5zZSBvZiBob3cgdGhlIHBhY2tldCBidWZmZXIgaXMgYmVpbmcgaGFuZGxlZCB3aXRoIHRoYXQgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjIwNCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDExOjMwOjIyLjA5OTY2MzQ5NFoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTEyOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjI5NSxcbiAgXCJMaW5lQ291bnRcIjogODVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjI5NTpcXHQgKi9cXG4yMjk2OlxcdFxcbjIyOTc6XFx0aW50IHBza2JfZXhwYW5kX2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5oZWFkLCBpbnQgbnRhaWwsXFxuMjI5ODpcXHRcXHRcXHQgICAgIGdmcF90IGdmcF9tYXNrKVxcbjIyOTk6XFx0e1xcbjIzMDA6XFx0XFx0dW5zaWduZWQgaW50IG9zaXplID0gc2tiX2VuZF9vZmZzZXQoc2tiKTtcXG4yMzAxOlxcdFxcdHVuc2lnbmVkIGludCBzaXplID0gb3NpemUgKyBuaGVhZCArIG50YWlsO1xcbjIzMDI6XFx0XFx0bG9uZyBvZmY7XFxuMjMwMzpcXHRcXHR1OCAqZGF0YTtcXG4yMzA0OlxcdFxcdGludCBpO1xcbjIzMDU6XFx0XFxuMjMwNjpcXHRcXHRCVUdfT04obmhlYWQgXFx1MDAzYyAwKTtcXG4yMzA3OlxcdFxcbjIzMDg6XFx0XFx0QlVHX09OKHNrYl9zaGFyZWQoc2tiKSk7XFxuMjMwOTpcXHRcXG4yMzEwOlxcdFxcdHNrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZChza2IpO1xcbjIzMTE6XFx0XFxuMjMxMjpcXHRcXHRpZiAoc2tiX3BmbWVtYWxsb2Moc2tiKSlcXG4yMzEzOlxcdFxcdFxcdGdmcF9tYXNrIHw9IF9fR0ZQX01FTUFMTE9DO1xcbjIzMTQ6XFx0XFxuMjMxNTpcXHRcXHRkYXRhID0ga21hbGxvY19yZXNlcnZlKFxcdTAwMjZzaXplLCBnZnBfbWFzaywgTlVNQV9OT19OT0RFLCBOVUxMKTtcXG4yMzE2OlxcdFxcdGlmICghZGF0YSlcXG4yMzE3OlxcdFxcdFxcdGdvdG8gbm9kYXRhO1xcbjIzMTg6XFx0XFx0c2l6ZSA9IFNLQl9XSVRIX09WRVJIRUFEKHNpemUpO1xcbjIzMTk6XFx0XFxuMjMyMDpcXHRcXHQvKiBDb3B5IG9ubHkgcmVhbCBkYXRhLi4uIGFuZCwgYWxhcywgaGVhZGVyLiBUaGlzIHNob3VsZCBiZVxcbjIzMjE6XFx0XFx0ICogb3B0aW1pemVkIGZvciB0aGUgY2FzZXMgd2hlbiBoZWFkZXIgaXMgdm9pZC5cXG4yMzIyOlxcdFxcdCAqL1xcbjIzMjM6XFx0XFx0bWVtY3B5KGRhdGEgKyBuaGVhZCwgc2tiLVxcdTAwM2VoZWFkLCBza2JfdGFpbF9wb2ludGVyKHNrYikgLSBza2ItXFx1MDAzZWhlYWQpO1xcbjIzMjQ6XFx0XFxuMjMyNTpcXHRcXHRtZW1jcHkoKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKikoZGF0YSArIHNpemUpLFxcbjIzMjY6XFx0XFx0ICAgICAgIHNrYl9zaGluZm8oc2tiKSxcXG4yMzI3OlxcdFxcdCAgICAgICBvZmZzZXRvZihzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvLCBmcmFnc1tza2Jfc2hpbmZvKHNrYiktXFx1MDAzZW5yX2ZyYWdzXSkpO1xcbjIzMjg6XFx0XFxuMjMyOTpcXHRcXHQvKlxcbjIzMzA6XFx0XFx0ICogaWYgc2hpbmZvIGlzIHNoYXJlZCB3ZSBtdXN0IGRyb3AgdGhlIG9sZCBoZWFkIGdyYWNlZnVsbHksIGJ1dCBpZiBpdFxcbjIzMzE6XFx0XFx0ICogaXMgbm90IHdlIGNhbiBqdXN0IGRyb3AgdGhlIG9sZCBoZWFkIGFuZCBsZXQgdGhlIGV4aXN0aW5nIHJlZmNvdW50XFxuMjMzMjpcXHRcXHQgKiBiZSBzaW5jZSBhbGwgd2UgZGlkIGlzIHJlbG9jYXRlIHRoZSB2YWx1ZXNcXG4yMzMzOlxcdFxcdCAqL1xcbjIzMzQ6XFx0XFx0aWYgKHNrYl9kYXRhX2lzX3NoYXJlZChza2IpKSB7XFxuMjMzNTpcXHRcXHRcXHRpZiAoc2tiX29ycGhhbl9mcmFncyhza2IsIGdmcF9tYXNrKSlcXG4yMzM2OlxcdFxcdFxcdFxcdGdvdG8gbm9mcmFncztcXG4yMzM3OlxcdFxcdFxcdGlmIChza2JfemNvcHkoc2tiKSlcXG4yMzM4OlxcdFxcdFxcdFxcdG5ldF96Y29weV9nZXQoc2tiX3Vhcmcoc2tiKSk7XFxuMjMzOTpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc2tiX3NoaW5mbyhza2IpLVxcdTAwM2Vucl9mcmFnczsgaSsrKVxcbjIzNDA6XFx0XFx0XFx0XFx0c2tiX2ZyYWdfcmVmKHNrYiwgaSk7XFxuMjM0MTpcXHRcXG4yMzQyOlxcdFxcdFxcdGlmIChza2JfaGFzX2ZyYWdfbGlzdChza2IpKVxcbjIzNDM6XFx0XFx0XFx0XFx0c2tiX2Nsb25lX2ZyYWdsaXN0KHNrYik7XFxuMjM0NDpcXHRcXG4yMzQ1OlxcdFxcdFxcdHNrYl9yZWxlYXNlX2RhdGEoc2tiLCBTS0JfQ09OU1VNRUQpO1xcbjIzNDY6XFx0XFx0fSBlbHNlIHtcXG4yMzQ3OlxcdFxcdFxcdHNrYl9mcmVlX2hlYWQoc2tiKTtcXG4yMzQ4OlxcdFxcdH1cXG4yMzQ5OlxcdFxcdG9mZiA9IChkYXRhICsgbmhlYWQpIC0gc2tiLVxcdTAwM2VoZWFkO1xcbjIzNTA6XFx0XFxuMjM1MTpcXHRcXHRza2ItXFx1MDAzZWhlYWQgICAgID0gZGF0YTtcXG4yMzUyOlxcdFxcdHNrYi1cXHUwMDNlaGVhZF9mcmFnID0gMDtcXG4yMzUzOlxcdFxcdHNrYi1cXHUwMDNlZGF0YSAgICArPSBvZmY7XFxuMjM1NDpcXHRcXG4yMzU1OlxcdFxcdHNrYl9zZXRfZW5kX29mZnNldChza2IsIHNpemUpO1xcbjIzNTY6XFx0I2lmZGVmIE5FVF9TS0JVRkZfREFUQV9VU0VTX09GRlNFVFxcbjIzNTc6XFx0XFx0b2ZmICAgICAgICAgICA9IG5oZWFkO1xcbjIzNTg6XFx0I2VuZGlmXFxuMjM1OTpcXHRcXHRza2ItXFx1MDAzZXRhaWxcXHQgICAgICArPSBvZmY7XFxuMjM2MDpcXHRcXHRza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKHNrYiwgbmhlYWQpO1xcbjIzNjE6XFx0XFx0c2tiLVxcdTAwM2VjbG9uZWQgICA9IDA7XFxuMjM2MjpcXHRcXHRza2ItXFx1MDAzZWhkcl9sZW4gID0gMDtcXG4yMzYzOlxcdFxcdHNrYi1cXHUwMDNlbm9oZHIgICAgPSAwO1xcbjIzNjQ6XFx0XFx0YXRvbWljX3NldChcXHUwMDI2c2tiX3NoaW5mbyhza2IpLVxcdTAwM2VkYXRhcmVmLCAxKTtcXG4yMzY1OlxcdFxcbjIzNjY6XFx0XFx0LyogSXQgaXMgbm90IGdlbmVyYWxseSBzYWZlIHRvIGNoYW5nZSBza2ItXFx1MDAzZXRydWVzaXplLlxcbjIzNjc6XFx0XFx0ICogRm9yIHRoZSBtb21lbnQsIHdlIHJlYWxseSBjYXJlIG9mIHJ4IHBhdGgsIG9yXFxuMjM2ODpcXHRcXHQgKiB3aGVuIHNrYiBpcyBvcnBoYW5lZCAobm90IGF0dGFjaGVkIHRvIGEgc29ja2V0KS5cXG4yMzY5OlxcdFxcdCAqL1xcbjIzNzA6XFx0XFx0aWYgKCFza2ItXFx1MDAzZXNrIHx8IHNrYi1cXHUwMDNlZGVzdHJ1Y3RvciA9PSBzb2NrX2VkZW11eClcXG4yMzcxOlxcdFxcdFxcdHNrYi1cXHUwMDNldHJ1ZXNpemUgKz0gc2l6ZSAtIG9zaXplO1xcbjIzNzI6XFx0XFxuMjM3MzpcXHRcXHRyZXR1cm4gMDtcXG4yMzc0OlxcdFxcbjIzNzU6XFx0bm9mcmFnczpcXG4yMzc2OlxcdFxcdHNrYl9rZnJlZV9oZWFkKGRhdGEpO1xcbjIzNzc6XFx0bm9kYXRhOlxcbjIzNzg6XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMjM3OTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDExOjMwOjIyLjEwMDA1Njc5NFoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODEwNTk0MTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgcHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyYCoqXG5cbk9rYXksIGxldCdzIGNpcmNsZSBiYWNrIGFuZCBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcmAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA2ODU1LiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBoYW5kbGluZy4uLiBsZXQgbWUgc2VlLi4uIEknbSBsb29raW5nIGF0IGl0IGluIHRoZSBjb250ZXh0IG9mIFtteSBzcGVjaWZpYyBleHBlcnRpc2UgLSBlLmcuLCBtZW1vcnkgY2FydmluZyB3aXRoaW4gYSBzcGVjaWZpYyBmaWxlIGZvcm1hdF0uIEkgc3VzcGVjdCB0aGlzIHNlY3Rpb24gbWlnaHQgYmUgY3JpdGljYWwgZm9yIFtzcGVjaWZpYyBoeXBvdGhlc2lzIGFib3V0IGl0cyBmdW5jdGlvbiwgZm9yIGV4YW1wbGU6IGhvdyB0aGUgaGVhZGVyIGNhcnZpbmcgaW50ZXJhY3RzIHdpdGggdGhlIGRhdGEgc3RydWN0dXJlJ3MgaW50ZXJuYWwgb2Zmc2V0IGNhbGN1bGF0aW9ucywgb3IgaG93IGl0IGFkZHJlc3NlcyBmcmFnbWVudGF0aW9uXS4gVW5kZXJzdGFuZGluZyB0aGUgbG9naWMgaGVyZSBpcyBsaWtlbHkga2V5IHRvIFthY2hpZXZpbmcgbXkgb3ZlcmFsbCBnb2FsLCBlLmcuLCBpbXByb3ZpbmcgdGhlIGVmZmljaWVuY3kgb3IgYWNjdXJhY3kgb2YgbXkgY2FydmluZyBhbGdvcml0aG0sIGlkZW50aWZ5aW5nIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHksIG9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzdHJ1Y3R1cmUgaXMgdXNlZF0uIFRpbWUgdG8gcHVsbCB1cCB0aGUgY29kZSBhbmQgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Nzk3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMTozMDoyNi45MTA2NTMzNzZaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzcwNDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY4NDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjY4NDA6XFx0XFx0ZGF0YSA9IGttYWxsb2NfcmVzZXJ2ZShcXHUwMDI2c2l6ZSwgZ2ZwX21hc2ssIE5VTUFfTk9fTk9ERSwgTlVMTCk7XFxuNjg0MTpcXHRcXHRpZiAoIWRhdGEpXFxuNjg0MjpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG42ODQzOlxcdFxcdHNpemUgPSBTS0JfV0lUSF9PVkVSSEVBRChzaXplKTtcXG42ODQ0OlxcdFxcbjY4NDU6XFx0XFx0LyogQ29weSByZWFsIGRhdGEsIGFuZCBhbGwgZnJhZ3MgKi9cXG42ODQ2OlxcdFxcdHNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGFfb2Zmc2V0KHNrYiwgb2ZmLCBkYXRhLCBuZXdfaGxlbik7XFxuNjg0NzpcXHRcXHRza2ItXFx1MDAzZWxlbiAtPSBvZmY7XFxuNjg0ODpcXHRcXG42ODQ5OlxcdFxcdC8qIFJlbW92ZSBTS0JGTF9NQU5BR0VEX0ZSQUdfUkVGUyBpbnN0ZWFkIG9mIHRyeWluZyB0byBob25vdXIgaXRcXG42ODUwOlxcdFxcdCAqIHdoaWxlIHJlZmNvdW50aW5nIGZyYWdzIGJlbG93LlxcbjY4NTE6XFx0XFx0ICovXFxuNjg1MjpcXHRcXHRza2JfemNvcHlfZG93bmdyYWRlX21hbmFnZWQoc2tiKTtcXG42ODUzOlxcdFxcbjY4NTQ6XFx0XFx0bWVtY3B5KChzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICopKGRhdGEgKyBzaXplKSxcXG42ODU1OlxcdFxcdCAgICAgICBza2Jfc2hpbmZvKHNrYiksXFxuNjg1NjpcXHRcXHQgICAgICAgb2Zmc2V0b2Yoc3RydWN0IHNrYl9zaGFyZWRfaW5mbyxcXG42ODU3OlxcdFxcdFxcdFxcdGZyYWdzW3NrYl9zaGluZm8oc2tiKS1cXHUwMDNlbnJfZnJhZ3NdKSk7XFxuNjg1ODpcXHRcXHRpZiAoc2tiX2RhdGFfaXNfc2hhcmVkKHNrYikpIHtcXG42ODU5OlxcdFxcdFxcdC8qIGRyb3AgdGhlIG9sZCBoZWFkIGdyYWNlZnVsbHkgKi9cXG42ODYwOlxcdFxcdFxcdGlmIChza2Jfb3JwaGFuX2ZyYWdzKHNrYiwgZ2ZwX21hc2spKSB7XFxuNjg2MTpcXHRcXHRcXHRcXHRza2Jfa2ZyZWVfaGVhZChkYXRhKTtcXG42ODYyOlxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjY4NjM6XFx0XFx0XFx0fVxcbjY4NjQ6XFx0XFx0XFx0aWYgKHNrYl96Y29weShza2IpKVxcbjY4NjU6XFx0XFx0XFx0XFx0bmV0X3pjb3B5X2dldChza2JfdWFyZyhza2IpKTtcXG42ODY2OlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBza2Jfc2hpbmZvKHNrYiktXFx1MDAzZW5yX2ZyYWdzOyBpKyspXFxuNjg2NzpcXHRcXHRcXHRcXHRza2JfZnJhZ19yZWYoc2tiLCBpKTtcXG42ODY4OlxcdFxcdFxcdGlmIChza2JfaGFzX2ZyYWdfbGlzdChza2IpKVxcbjY4Njk6XFx0XFx0XFx0XFx0c2tiX2Nsb25lX2ZyYWdsaXN0KHNrYik7XFxuNjg3MDpcXHRcXHRcXHRza2JfcmVsZWFzZV9kYXRhKHNrYiwgU0tCX0NPTlNVTUVEKTtcXG42ODcxOlxcdFxcdH0gZWxzZSB7XFxuNjg3MjpcXHRcXHRcXHQvKiB3ZSBjYW4gcmV1c2UgZXhpc3RpbmcgcmVjb3VudC0gYWxsIHdlIGRpZCB3YXNcXG42ODczOlxcdFxcdFxcdCAqIHJlbG9jYXRlIHZhbHVlc1xcbjY4NzQ6XFx0XFx0XFx0ICovXFxuNjg3NTpcXHRcXHRcXHRza2JfZnJlZV9oZWFkKHNrYik7XFxuNjg3NjpcXHRcXHR9XFxuNjg3NzpcXHRcXG42ODc4OlxcdFxcdHNrYi1cXHUwMDNlaGVhZCA9IGRhdGE7XFxuNjg3OTpcXHRcXHRza2ItXFx1MDAzZWRhdGEgPSBkYXRhO1xcbjY4ODA6XFx0XFx0c2tiLVxcdTAwM2VoZWFkX2ZyYWcgPSAwO1xcbjY4ODE6XFx0XFx0c2tiX3NldF9lbmRfb2Zmc2V0KHNrYiwgc2l6ZSk7XFxuNjg4MjpcXHRcXHRza2Jfc2V0X3RhaWxfcG9pbnRlcihza2IsIHNrYl9oZWFkbGVuKHNrYikpO1xcbjY4ODM6XFx0XFx0c2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZShza2IsIDApO1xcbjY4ODQ6XFx0XFx0c2tiLVxcdTAwM2VjbG9uZWQgPSAwO1xcbjY4ODU6XFx0XFx0c2tiLVxcdTAwM2VoZHJfbGVuID0gMDtcXG42ODg2OlxcdFxcdHNrYi1cXHUwMDNlbm9oZHIgPSAwO1xcbjY4ODc6XFx0XFx0YXRvbWljX3NldChcXHUwMDI2c2tiX3NoaW5mbyhza2IpLVxcdTAwM2VkYXRhcmVmLCAxKTtcXG42ODg4OlxcdFxcbjY4ODk6XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDExOjMwOjI2LjkxMTAyNTY3NVoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDQyMDUxMDU0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byB0aGUgc2tidWZmLmggRGV0YWlscyoqXG5cbk9rYXksIHRpbWUgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludHJpY2FjaWVzIG9mIHRoZSBgc2tidWZmYCBzdHJ1Y3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgc2tiX2RhdGFfdW5yZWZgLCBgc2tiX2RhdGFyZWZfYmlhc2AsIGFuZCBgc2tiX2Nsb25lZGAuIFRoZXNlIGFyZSBjcnVjaWFsIGZvciBwcm9wZXIgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHJlZmVyZW5jZSBjb3VudGluZyB3aXRoaW4gdGhlIGtlcm5lbCdzIG5ldHdvcmtpbmcgc3RhY2suIEknbSBnb2luZyB0byBqdW1wIHJpZ2h0IGludG8gYGluY2x1ZGUvbGludXgvc2tidWZmLmhgLCBzcGVjaWZpY2FsbHkgbGluZXMgMTI5MCB0aHJvdWdoIDEzMjAuIFRoaXMgc2VjdGlvbiBzaG91bGQgZ2l2ZSBtZSB0aGUgY29yZSBkZWZpbml0aW9ucyBhbmQgY29udGV4dCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhlc2UgZnVuY3Rpb25zIGFuZCBmbGFncyBpbnRlcnJlbGF0ZS4gSG9wZWZ1bGx5LCB0aGlzIHJlZnJlc2ggd2lsbCBtYWtlIG1lIG1vcmUgZWZmaWNpZW50IHdoZW4gZGVidWdnaW5nIHRob3NlIG5ldHdvcmsgcGVyZm9ybWFuY2UgaXNzdWVzIGFnYWluLiBMZXQncyBzZWUgd2hhdCdzIHdoYXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5MTksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDExOjMxOjA3LjMzMTUzODg1NVoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTczMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9za2J1ZmYuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxMjkwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjkwOlxcdFxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfREVCVUdfTkVUKSBcXHUwMDI2XFx1MDAyNiBsaWtlbHkocmVmY291bnRfcmVhZChcXHUwMDI2c2tiLVxcdTAwM2V1c2VycykgPT0gMSkpXFxuMTI5MTpcXHRcXHRcXHRzbXBfcm1iKCk7XFxuMTI5MjpcXHRcXHRlbHNlIGlmIChsaWtlbHkoIXJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2c2tiLVxcdTAwM2V1c2VycykpKVxcbjEyOTM6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjEyOTQ6XFx0XFxuMTI5NTpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4xMjk2OlxcdH1cXG4xMjk3OlxcdFxcbjEyOTg6XFx0c3RhdGljIGlubGluZSBpbnQgc2tiX2RhdGFyZWZfYmlhcyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjEyOTk6XFx0e1xcbjEzMDA6XFx0XFx0cmV0dXJuIHNrYi1cXHUwMDNlbm9oZHIgPyAoMSBcXHUwMDNjXFx1MDAzYyBTS0JfREFUQVJFRl9TSElGVCkgKyAxIDogMTtcXG4xMzAxOlxcdH1cXG4xMzAyOlxcdFxcbjEzMDM6XFx0c3RhdGljIGlubGluZSBib29sIHNrYl9kYXRhX3VucmVmKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuMTMwNDpcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKnNoaW5mbylcXG4xMzA1OlxcdHtcXG4xMzA2OlxcdFxcdGludCBiaWFzO1xcbjEzMDc6XFx0XFxuMTMwODpcXHRcXHRpZiAoIXNrYi1cXHUwMDNlY2xvbmVkKVxcbjEzMDk6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuMTMxMDpcXHRcXG4xMzExOlxcdFxcdGJpYXMgPSBza2JfZGF0YXJlZl9iaWFzKHNrYik7XFxuMTMxMjpcXHRcXG4xMzEzOlxcdFxcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2c2hpbmZvLVxcdTAwM2VkYXRhcmVmKSA9PSBiaWFzKVxcbjEzMTQ6XFx0XFx0XFx0c21wX3JtYigpO1xcbjEzMTU6XFx0XFx0ZWxzZSBpZiAoYXRvbWljX3N1Yl9yZXR1cm4oYmlhcywgXFx1MDAyNnNoaW5mby1cXHUwMDNlZGF0YXJlZikpXFxuMTMxNjpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTMxNzpcXHRcXG4xMzE4OlxcdFxcdHJldHVybiB0cnVlO1xcbjEzMTk6XFx0fVxcbjEzMjA6XFx0XFxuMTMyMTpcXHR2b2lkIF9fZml4X2FkZHJlc3Mgc2tfc2tiX3JlYXNvbl9kcm9wKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4xMzIyOlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IsXFxuMTMyMzpcXHRcXHRcXHRcXHRcXHQgICAgICBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pO1xcbjEzMjQ6XFx0XFxuMTMyNTpcXHRzdGF0aWMgaW5saW5lIHZvaWRcXG4xMzI2OlxcdGtmcmVlX3NrYl9yZWFzb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKVxcbjEzMjc6XFx0e1xcbjEzMjg6XFx0XFx0c2tfc2tiX3JlYXNvbl9kcm9wKE5VTEwsIHNrYiwgcmVhc29uKTtcXG4xMzI5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTE6MzE6MDcuMzMxODM4ODc1WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2MTU5MTQyNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIGBza2JfY2xvbmVkYCBmbGFnIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBza2J1ZmZgIHN0cnVjdHVyZS4gTXkgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gdGhlIGBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oYCBoZWFkZXIgZmlsZS4gSSBuZWVkIHRvIGV4YW1pbmUgbGluZXMgMjAyMCB0aHJvdWdoIDIwNTAgdG8gZ2FpbiBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGl0cyBzaWduaWZpY2FuY2UuIEknbSBsb29raW5nIGZvciB0aGUgcHJlY2lzZSBkZWZpbml0aW9uLCBhbnkgdXNhZ2UgZXhhbXBsZXMgb3IgcmVsYXRlZCBjb25kaXRpb25hbCBsb2dpYyBzdXJyb3VuZGluZyB0aGlzIGZsYWcuIFRoaXMgc2hvdWxkIGdpdmUgbWUgaW5zaWdodCBvbiB0aGUgY2lyY3Vtc3RhbmNlcyB0aGF0IGRldGVybWluZSB3aGVuIHRoZSBgc2tiX2Nsb25lZGAgZmxhZyBpcyBzZXQgb3IgY2xlYXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTgwNiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTE6MzE6MDkuOTQ3NzU2NjJaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY1OTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvc2tidWZmLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMjAyMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjAyMDpcXHRcXHRyZXR1cm4gc2tiO1xcbjIwMjE6XFx0fVxcbjIwMjI6XFx0XFxuMjAyMzpcXHQvKlxcbjIwMjQ6XFx0ICogSWYgdXNlcnMgPT0gMSwgd2UgYXJlIHRoZSBvbmx5IG93bmVyIGFuZCBjYW4gYXZvaWQgcmVkdW5kYW50IGF0b21pYyBjaGFuZ2VzLlxcbjIwMjU6XFx0ICovXFxuMjAyNjpcXHRcXG4yMDI3OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBza2JfZGF0YV9pc19zaGFyZWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4yMDI4OlxcdHtcXG4yMDI5OlxcdFxcdHJldHVybiBza2ItXFx1MDAzZWNsb25lZCBcXHUwMDI2XFx1MDAyNlxcbjIwMzA6XFx0XFx0ICAgICAgIGF0b21pY19yZWFkKFxcdTAwMjZza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWRhdGFyZWYpICE9IHNrYl9kYXRhcmVmX2JpYXMoc2tiKTtcXG4yMDMxOlxcdH1cXG4yMDMyOlxcdFxcbjIwMzM6XFx0LyoqXFxuMjAzNDpcXHQgKlxcdHNrYl9jbG9uZWQgLSBpcyB0aGUgYnVmZmVyIGEgY2xvbmVcXG4yMDM1OlxcdCAqXFx0QHNrYjogYnVmZmVyIHRvIGNoZWNrXFxuMjAzNjpcXHQgKlxcbjIwMzc6XFx0ICpcXHRSZXR1cm5zIHRydWUgaWYgdGhlIGJ1ZmZlciB3YXMgZ2VuZXJhdGVkIHdpdGggc2tiX2Nsb25lKCkgYW5kIGlzXFxuMjAzODpcXHQgKlxcdG9uZSBvZiBtdWx0aXBsZSBzaGFyZWQgY29waWVzIG9mIHRoZSBidWZmZXIuIENsb25lZCBidWZmZXJzIGFyZVxcbjIwMzk6XFx0ICpcXHRzaGFyZWQgZGF0YSBzbyBtdXN0IG5vdCBiZSB3cml0dGVuIHRvIHVuZGVyIG5vcm1hbCBjaXJjdW1zdGFuY2VzLlxcbjIwNDA6XFx0ICovXFxuMjA0MTpcXHRzdGF0aWMgaW5saW5lIGludCBza2JfY2xvbmVkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuMjA0MjpcXHR7XFxuMjA0MzpcXHRcXHRyZXR1cm4gc2tiLVxcdTAwM2VjbG9uZWQgXFx1MDAyNlxcdTAwMjZcXG4yMDQ0OlxcdFxcdCAgICAgICAoYXRvbWljX3JlYWQoXFx1MDAyNnNrYl9zaGluZm8oc2tiKS1cXHUwMDNlZGF0YXJlZikgXFx1MDAyNiBTS0JfREFUQVJFRl9NQVNLKSAhPSAxO1xcbjIwNDU6XFx0fVxcbjIwNDY6XFx0XFxuMjA0NzpcXHRzdGF0aWMgaW5saW5lIGludCBza2JfdW5jbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBwcmkpXFxuMjA0ODpcXHR7XFxuMjA0OTpcXHRcXHRtaWdodF9zbGVlcF9pZihnZnBmbGFnc19hbGxvd19ibG9ja2luZyhwcmkpKTtcXG4yMDUwOlxcdFxcbjIwNTE6XFx0XFx0aWYgKHNrYl9jbG9uZWQoc2tiKSlcXG4yMDUyOlxcdFxcdFxcdHJldHVybiBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgMCwgcHJpKTtcXG4yMDUzOlxcdFxcbjIwNTQ6XFx0XFx0cmV0dXJuIDA7XFxuMjA1NTpcXHR9XFxuMjA1NjpcXHRcXG4yMDU3OlxcdC8qIFRoaXMgdmFyaWFudCBvZiBza2JfdW5jbG9uZSgpIG1ha2VzIHN1cmUgc2tiLVxcdTAwM2V0cnVlc2l6ZVxcbjIwNTg6XFx0ICogYW5kIHNrYl9lbmRfb2Zmc2V0KCkgYXJlIG5vdCBjaGFuZ2VkLCB3aGVuZXZlciBhIG5ldyBza2ItXFx1MDAzZWhlYWQgaXMgbmVlZGVkLlxcbjIwNTk6XFx0ICpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTE6MzE6MDkuOTQ4MTI0NDVaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA0ODI0Njg4Mzk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBTS0IgRGF0YSBTaGFyaW5nIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgaG93IHdlIGhhbmRsZSBTS0IgZGF0YSByZWZlcmVuY2VzLCBzcGVjaWZpY2FsbHkgd2hlbiBjbG9uaW5nIGFuZCBwb3RlbnRpYWxseSBmcmVlaW5nIHNoYXJlZCBkYXRhLiBJdCBpbnRyb2R1Y2VzIGBza2JfZGF0YXJlZl9iaWFzYCB3aGljaCBjbGV2ZXJseSBleHRyYWN0cyB0aGUgYmlhcyB2YWx1ZSByZWxhdGVkIHRvIHRoZSBgZGF0YXJlZmAgY291bnRlciBmb3Igbm9oZHIgU0tCcyBhbmQgdGhlIG5ldyBoZWxwZXIgYHNrYl9kYXRhX2lzX3NoYXJlZGAgZnVuY3Rpb24sIHdoaWNoIGRldGVybWluZXMgaWYgYW4gU0tCJ3MgZGF0YSBpcyB0cnVseSBzaGFyZWQgYW1vbmdzdCBtdWx0aXBsZSBjbG9uZXMsIG9yIGlzIHRoZSBzb2xlIG93bmVyIG9mIHRoZSBkYXRhLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGxpZXMgaW4gcmVwbGFjaW5nIHRoZSBvbGRlciBgc2tiX2Nsb25lZChza2IpYCBjaGVjayB3aXRoIHRoZSBuZXcgYHNrYl9kYXRhX2lzX3NoYXJlZChza2IpYCB3aXRoaW4gYHBza2JfZXhwYW5kX2hlYWRgIGFuZCBgcHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyYC5cblxuVGhlIHJhdGlvbmFsZSBpcyBjbGVhci4gVGhlIG9sZCBgc2tiX2Nsb25lZChza2IpYCBjaGVjayB3YXNuJ3QgYWNjdXJhdGVseSBoYW5kbGluZyBzY2VuYXJpb3Mgd2hlcmUgYW4gU0tCIG1pZ2h0ICphcHBlYXIqIGNsb25lZCAoZHVlIHRvIHRoZSBgY2xvbmVkYCBmbGFnIGJlaW5nIHNldCksIGJ1dCBhY3R1YWxseSBiZSB0aGUgKm9ubHkqIG93bmVyIG9mIGl0cyBkYXRhIGJlY2F1c2Ugb3RoZXIgY2xvbmVzIGhhdmUgYmVlbiBmcmVlZCBvciBpdCdzIGEgbm9oZHIgc2tiIHdpdGggYSBiaWFzLiAgVGhlIGBkYXRhcmVmYCBjb3VudGVyLCBpbiB0aGVzZSBjYXNlcywgY291bGQgYmUgZXF1YWwgdG8gdGhlIGJpYXMsIGluZGljYXRpbmcgdGhhdCB3ZSBjYW4gc2FmZWx5IGZyZWUgdGhlIGhlYWQgd2l0aG91dCBleHRyYSBzdGVwcy4gVGhpcyBwYXRjaCBlc3NlbnRpYWxseSBvcHRpbWl6ZXMgdGhlIHJlZmNvdW50aW5nIGxvZ2ljLCBlc3BlY2lhbGx5IGZvciBub2hkciBTS0JzLCBhdm9pZGluZyB1bm5lY2Vzc2FyeSBvdmVyaGVhZC4gVGhlIHByaW1hcnkgZm9jdXMgaXMgbWFraW5nIHJlZmNvdW50aW5nIG1vcmUgcHJlY2lzZSB3aGVuIGRlYWxpbmcgd2l0aCBjbG9uZWQgU0tCcywgcHJldmVudGluZyB1bm5lY2Vzc2FyeSBvcGVyYXRpb25zIGxpa2UgYHNrYl9vcnBoYW5fZnJhZ3NgLCBldGMuIGlmIHRoZSBkYXRhIGlzIG5vIGxvbmdlciBzaGFyZWQsIHdoaWNoIHJlc3VsdHMgaW4gYHNrYl9mcmVlX2hlYWRgIGJlaW5nIGNhbGxlZCwgaW5zdGVhZCBvZiB0aGUgc2xvd2VyIG9wZXJhdGlvbiBvZiByZWZjb3VudGluZyBhbmQgb3JwaGFuIGZyYWdsaXN0IG1hbmlwdWxhdGlvbnMuXG5cblRoZSBjcml0aWNhbCBxdWVzdGlvbiBub3cgaXMsIHdoYXQga2luZCBvZiBidWdzIGNhbiB0aGlzIGludHJvZHVjZT8gIFdlbGwsIHRoZSBwcmltYXJ5IHJpc2tzIGFyZSByZWZjb3VudGluZyBpbWJhbGFuY2VzLCB3aGljaCBjb3VsZCBsZWFkIHRvIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgKGlmIHRoZSBkYXRhIGlzIHByZW1hdHVyZWx5IGZyZWVkIGJlY2F1c2UgYHNrYl9kYXRhX2lzX3NoYXJlZGAgaW5jb3JyZWN0bHkgcmVwb3J0cyB0aGF0IHRoZSBkYXRhIGlzbid0IHNoYXJlZCksIG1lbW9yeSBsZWFrcyAoaWYgd2UgaW5jb3JyZWN0bHkgYXNzdW1lIGRhdGEgaXMgbm90IHRoZSBzb2xlIG93bmVyIGFuZCB0aHVzIHJlZmNvdW50IGlzIG5vdCBmdWxseSBoYW5kbGVkKSwgb3IsIGNvbnZlcnNlbHksIGRvdWJsZS1mcmVlcyAoaWYgdGhlIGRhdGEgaXMgZnJlZWQgbXVsdGlwbGUgdGltZXMgZHVlIHRvIGEgbWlzdW5kZXJzdGFuZGluZyBvZiBvd25lcnNoaXApLiBLQVNBTiBpcyB0aGUga2V5IGhlcmUuIEFueSBpbmNvcnJlY3QgcmVmY291bnRpbmcgcmVzdWx0aW5nIGZyb20gdGhpcyBjaGFuZ2UgKndpbGwqIGJlIGRldGVjdGVkIGJ5IEtBU0FOIGFzIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIGVycm9ycy5cblxuTGV0J3MgY2FyZWZ1bGx5IGFzc2VzcyBLTVNBTiBhcHBsaWNhYmlsaXR5LiAgV2UgbmVlZCB0byBzZWUgaWYgd2UncmUgY3JlYXRpbmcgb3IgbW9kaWZ5aW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS4gIExvb2tpbmcgY2xvc2VseSwgd2UncmUgKm5vdCogaW50cm9kdWNpbmcgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcyB0aGF0IGFyZSB0aGVuIHBhc3NlZCB0byB1c2Vyc3BhY2UgKHdoaWNoIHdvdWxkIHRyaWdnZXIgYSBLTVNBTiBjb25jZXJuKS4gVGhlIGNoZWNrcyByZWx5IG9uIHN0YW5kYXJkIFNLQiBmaWVsZHMgKGBza2ItXHUwMDNlY2xvbmVkYCwgYHNrYi1cdTAwM2Vub2hkcmAsIGBza2Jfc2hpbmZvKHNrYiktXHUwMDNlZGF0YXJlZmApLCB3aGljaCBhcmUgaW5pdGlhbGl6ZWQgZHVyaW5nIFNLQiBjcmVhdGlvbiBvciBjbG9uaW5nLiBUaGVyZSdzIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhpcyBhbHNvIGRvZXNuJ3QgYWZmZWN0IGFsbG9jYXRpb25zIG9yIGluaXRpYWxpemF0aW9uIG9mIG1vcmUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYW5kIHRoZXJlIGFyZSBubyBib3VuZGFyeSBtb2RpZmljYXRpb25zIHRoYXQgd291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIGJ5dGUgcmVhZHMuIFRoZSBwYXRjaCBmb2N1c2VzIG9uIG9wdGltaXppbmcgaG93IHNoYXJlZCBkYXRhIGlzIHJlY29nbml6ZWQsIGFuZCBob3cgdG8gZGVhbCB3aXRoIHRoZSByZWZlcmVuY2UgY291bnRpbmcgYXNzb2NpYXRlZCB3aXRoIHNoYXJlZCBkYXRhLiBXZSdyZSBub3QgY3JlYXRpbmcgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHNlbmRpbmcgdGhpcyBkYXRhIHRvIHVzZXJzcGFjZS5cblxuSW4gZXNzZW5jZSwgd2UncmUgcmVmYWN0b3Jpbmcgc29tZSBpbnRlcm5hbCBsb2dpYyAoYHNrYl9kYXRhcmVmX2JpYXNgKSwgaW50cm9kdWNpbmcgYSBuZXcgZnVuY3Rpb24gKGBza2JfZGF0YV9pc19zaGFyZWRgKSwgYW5kIHJlcGxhY2luZyBhIGNoZWNrLiAgVGhlIGVudGlyZSBwYXRjaCBpcyBhcm91bmQgU0tCIGRhdGEgb3duZXJzaGlwIGFuZCByZWZjb3VudGluZy4gVGhlIGJ1Z3MgdGhhdCBjb3VsZCBhcmlzZSBoZXJlIGFyZSBlbnRpcmVseSByZWxhdGVkIHRvIHJlZmNvdW50IGVycm9ycy4gVGhlIHJlZmNvdW50aW5nIGJ1Z3MgYXJlIGRldGVjdGFibGUgYnkgS0FTQU4uXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU4gPSBmYWxzZWAuIFdlIGNhbiBiZSBjb25maWRlbnQgdGhhdCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzLCBwYXJ0aWN1bGFybHkgS0FTQU4sIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBpc3N1ZXMgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIGJlY2F1c2UsIGFzIGRldGFpbGVkIGFib3ZlLCBhbnkgaW1wcm9wZXIgcmVmY291bnRpbmcgd2lsbCByZXN1bHQgaW4gS0FTQU4gZGV0ZWN0aW5nIHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSwgb3IgbWVtb3J5IGxlYWsgaXNzdWVzLlxuXG5MZXQncyBtYWtlIHN1cmUgb3VyIHRvb2xpbmcgaXMgaGFwcHkgd2l0aCB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY0NSwiT3V0cHV0VG9rZW5zIjoyNjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDAzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTE6MzI6NTQuNzcyODE1ODM0WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcyNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBza2JfZGF0YXJlZl9iaWFzKClgIGFuZCBgc2tiX2RhdGFfaXNfc2hhcmVkKClgIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBkYXRhIGJ1ZmZlciAvIHNoYXJlZCBpbmZvIG9mIGFuIHNrX2J1ZmYgaXMgYWN0aXZlbHkgc2hhcmVkIGJ5IG90aGVyIGNsb25lcyBkdXJpbmcgaGVhZCByZWFsbG9jYXRpb24gKGBwc2tiX2V4cGFuZF9oZWFkYCBhbmQgYHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcmApLlxcblxcbktNU0FOIHZzIEtBU0FOIGFuYWx5c2lzOlxcbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGRhdGEgbGVuZ3RoIC8gYm91bmRzIGNhbGN1bGF0aW9ucyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGJ1ZmZlciBtZW1vcnkuIFRoZSBmaWVsZHMgYWNjZXNzZWQgKGBza2ItXFx1MDAzZWNsb25lZGAsIGBza2ItXFx1MDAzZW5vaGRyYCwgYW5kIGBzaGluZm8tXFx1MDAzZWRhdGFyZWZgKSBhcmUgd2VsbC1kZWZpbmVkIGFuZCBpbml0aWFsaXplZCBza2IgbWV0YWRhdGEuXFxuLSBLQVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoZXNlIHJlZmNvdW50IGFuZCBzaGFyaW5nIGNoZWNrIG1vZGlmaWNhdGlvbnMgcmVsYXRlIHRvIHNrYiBkYXRhIG93bmVyc2hpcCwgc3VjaCBhcyBwcmVtYXR1cmUgaGVhZCBmcmVlaW5nIG9yIGltcHJvcGVyIGZyYWcgcmVmY291bnRpbmcgbGVhZGluZyB0byBVc2UtQWZ0ZXItRnJlZSAoVUFGKSBvciBEb3VibGUtRnJlZSBlcnJvcnMuIFRoZXNlIG1lbW9yeSBzYWZldHkgaXNzdWVzIGFyZSBkaXJlY3RseSBkZXRlY3RlZCBieSBLQVNBTi5cXG5cXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBza2JfZGF0YXJlZl9iaWFzKClgIGFuZCBgc2tiX2RhdGFfaXNfc2hhcmVkKClgIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBkYXRhIGJ1ZmZlciAvIHNoYXJlZCBpbmZvIG9mIGFuIHNrX2J1ZmYgaXMgYWN0aXZlbHkgc2hhcmVkIGJ5IG90aGVyIGNsb25lcyBkdXJpbmcgaGVhZCByZWFsbG9jYXRpb24gKGBwc2tiX2V4cGFuZF9oZWFkYCBhbmQgYHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcmApLlxcblxcbktNU0FOIHZzIEtBU0FOIGFuYWx5c2lzOlxcbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGRhdGEgbGVuZ3RoIC8gYm91bmRzIGNhbGN1bGF0aW9ucyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGJ1ZmZlciBtZW1vcnkuIFRoZSBmaWVsZHMgYWNjZXNzZWQgKGBza2ItXFx1MDAzZWNsb25lZGAsIGBza2ItXFx1MDAzZW5vaGRyYCwgYW5kIGBzaGluZm8tXFx1MDAzZWRhdGFyZWZgKSBhcmUgd2VsbC1kZWZpbmVkIGFuZCBpbml0aWFsaXplZCBza2IgbWV0YWRhdGEuXFxuLSBLQVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoZXNlIHJlZmNvdW50IGFuZCBzaGFyaW5nIGNoZWNrIG1vZGlmaWNhdGlvbnMgcmVsYXRlIHRvIHNrYiBkYXRhIG93bmVyc2hpcCwgc3VjaCBhcyBwcmVtYXR1cmUgaGVhZCBmcmVlaW5nIG9yIGltcHJvcGVyIGZyYWcgcmVmY291bnRpbmcgbGVhZGluZyB0byBVc2UtQWZ0ZXItRnJlZSAoVUFGKSBvciBEb3VibGUtRnJlZSBlcnJvcnMuIFRoZXNlIG1lbW9yeSBzYWZldHkgaXNzdWVzIGFyZSBkaXJlY3RseSBkZXRlY3RlZCBieSBLQVNBTi5cXG5cXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow66trk[1] Phase: Succeeded StartedAt: 2026-08-31 11:33:06 +0000 UTC FinishedAt: 2026-08-31 11:33:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow66trk[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-31 11:33:06 +0000 UTC FinishedAt: 2026-08-31 11:33:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow66trk[2] Phase: Succeeded StartedAt: 2026-08-31 11:33:06 +0000 UTC FinishedAt: 2026-08-31 15:13:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow66trk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c88bf0bb-3f1f-4718-b25b-ff63f757264c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-31 11:33:06 +0000 UTC FinishedAt: 2026-08-31 15:13:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c88bf0bb-3f1f-4718-b25b-ff63f757264c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow66trk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c88bf0bb-3f1f-4718-b25b-ff63f757264c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-31 11:33:06 +0000 UTC FinishedAt: 2026-08-31 11:33:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow66trk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c88bf0bb-3f1f-4718-b25b-ff63f757264c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-31 11:33:06 +0000 UTC FinishedAt: 2026-08-31 11:33:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow66trk/series-workflow66trk-convert-artifact-3058691287/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow66trk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c88bf0bb-3f1f-4718-b25b-ff63f757264c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-31 11:33:16 +0000 UTC FinishedAt: 2026-08-31 11:49:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow66trk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c88bf0bb-3f1f-4718-b25b-ff63f757264c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-31 11:33:16 +0000 UTC FinishedAt: 2026-08-31 11:49: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:*596b9ded-d731-4349-994f-aad79a61a490,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-workflow66trk/series-workflow66trk-convert-artifact-3058691287/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": "9db4cbf3-aef3-4cb1-8527-0b57d368e1a7", "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-workflow66trk/series-workflow66trk-build-action-4238896429/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow66trk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c88bf0bb-3f1f-4718-b25b-ff63f757264c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-31 11:33:16 +0000 UTC FinishedAt: 2026-08-31 11:49: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:*596b9ded-d731-4349-994f-aad79a61a490,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-workflow66trk/series-workflow66trk-convert-artifact-3058691287/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": "9db4cbf3-aef3-4cb1-8527-0b57d368e1a7", "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-workflow66trk/series-workflow66trk-build-action-4238896429/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow66trk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c88bf0bb-3f1f-4718-b25b-ff63f757264c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-31 11:49:13 +0000 UTC FinishedAt: 2026-08-31 11:49:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow66trk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c88bf0bb-3f1f-4718-b25b-ff63f757264c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-31 11:49:13 +0000 UTC FinishedAt: 2026-08-31 11:49:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow66trk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c88bf0bb-3f1f-4718-b25b-ff63f757264c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-31 11:49:13 +0000 UTC FinishedAt: 2026-08-31 11:49:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow66trk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c88bf0bb-3f1f-4718-b25b-ff63f757264c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-31 11:49:13 +0000 UTC FinishedAt: 2026-08-31 11:49:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c88bf0bb-3f1f-4718-b25b-ff63f757264c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow66trk/series-workflow66trk-convert-artifact-4140051462/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow66trk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c88bf0bb-3f1f-4718-b25b-ff63f757264c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-31 11:49:23 +0000 UTC FinishedAt: 2026-08-31 11:51:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow66trk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c88bf0bb-3f1f-4718-b25b-ff63f757264c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-31 11:49:23 +0000 UTC FinishedAt: 2026-08-31 11:51:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9db4cbf3-aef3-4cb1-8527-0b57d368e1a7,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-workflow66trk/series-workflow66trk-build-action-4238896429/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-workflow66trk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c88bf0bb-3f1f-4718-b25b-ff63f757264c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-31 11:51:16 +0000 UTC FinishedAt: 2026-08-31 11:51:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow66trk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c88bf0bb-3f1f-4718-b25b-ff63f757264c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-31 11:51:16 +0000 UTC FinishedAt: 2026-08-31 11:51:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow66trk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c88bf0bb-3f1f-4718-b25b-ff63f757264c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-31 11:51:16 +0000 UTC FinishedAt: 2026-08-31 12:07:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow66trk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c88bf0bb-3f1f-4718-b25b-ff63f757264c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-31 11:51:16 +0000 UTC FinishedAt: 2026-08-31 12:07:13 +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:*596b9ded-d731-4349-994f-aad79a61a490,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-workflow66trk/series-workflow66trk-convert-artifact-4140051462/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": "421eab12-3871-46b3-b896-6292189fe13a", "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-workflow66trk/series-workflow66trk-build-action-2958262858/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow66trk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c88bf0bb-3f1f-4718-b25b-ff63f757264c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-31 11:51:16 +0000 UTC FinishedAt: 2026-08-31 12:07:03 +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:*596b9ded-d731-4349-994f-aad79a61a490,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-workflow66trk/series-workflow66trk-convert-artifact-4140051462/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": "421eab12-3871-46b3-b896-6292189fe13a", "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-workflow66trk/series-workflow66trk-build-action-2958262858/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow66trk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c88bf0bb-3f1f-4718-b25b-ff63f757264c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-31 12:07:13 +0000 UTC FinishedAt: 2026-08-31 12:07:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow66trk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c88bf0bb-3f1f-4718-b25b-ff63f757264c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-31 12:07:13 +0000 UTC FinishedAt: 2026-08-31 12:07:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow66trk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c88bf0bb-3f1f-4718-b25b-ff63f757264c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-31 12:07:13 +0000 UTC FinishedAt: 2026-08-31 12:09:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow66trk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c88bf0bb-3f1f-4718-b25b-ff63f757264c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-31 12:07:13 +0000 UTC FinishedAt: 2026-08-31 12:08:58 +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:*421eab12-3871-46b3-b896-6292189fe13a,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-workflow66trk/series-workflow66trk-build-action-2958262858/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-workflow66trk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c88bf0bb-3f1f-4718-b25b-ff63f757264c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-31 12:09:08 +0000 UTC FinishedAt: 2026-08-31 15:13:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow66trk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c88bf0bb-3f1f-4718-b25b-ff63f757264c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-31 12:09:08 +0000 UTC FinishedAt: 2026-08-31 15:13:43 +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":["pskb_expand_head","pskb_extract"],"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:*9db4cbf3-aef3-4cb1-8527-0b57d368e1a7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*421eab12-3871-46b3-b896-6292189fe13a,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-workflow66trk/series-workflow66trk-build-action-4238896429/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-workflow66trk/series-workflow66trk-build-action-2958262858/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow66trk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c88bf0bb-3f1f-4718-b25b-ff63f757264c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-31 12:09:08 +0000 UTC FinishedAt: 2026-08-31 12:09:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow66trk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c88bf0bb-3f1f-4718-b25b-ff63f757264c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-31 12:09:08 +0000 UTC FinishedAt: 2026-08-31 12:09:13 +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":["pskb_expand_head","pskb_extract"],"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-workflow66trk/series-workflow66trk-convert-artifact-2278415563/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow66trk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c88bf0bb-3f1f-4718-b25b-ff63f757264c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-31 12:09:08 +0000 UTC FinishedAt: 2026-08-31 12:09:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow66trk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c88bf0bb-3f1f-4718-b25b-ff63f757264c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-31 12:09:08 +0000 UTC FinishedAt: 2026-08-31 12:09:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow66trk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c88bf0bb-3f1f-4718-b25b-ff63f757264c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-31 12:09:08 +0000 UTC FinishedAt: 2026-08-31 12:09:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow66trk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c88bf0bb-3f1f-4718-b25b-ff63f757264c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-31 12:09:18 +0000 UTC FinishedAt: 2026-08-31 15:13:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow66trk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","pskb_extract"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c88bf0bb-3f1f-4718-b25b-ff63f757264c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-31 12:09:18 +0000 UTC FinishedAt: 2026-08-31 15:13:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9db4cbf3-aef3-4cb1-8527-0b57d368e1a7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*421eab12-3871-46b3-b896-6292189fe13a,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-workflow66trk/series-workflow66trk-build-action-4238896429/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-workflow66trk/series-workflow66trk-build-action-2958262858/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-workflow66trk/series-workflow66trk-convert-artifact-2278415563/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,}