Name: series-workflow6t6fv Phase: Succeeded StartedAt: 2026-08-18 19:04:42 +0000 UTC FinishedAt: 2026-08-18 22:52:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6t6fv[0] Phase: Succeeded StartedAt: 2026-08-18 19:04:42 +0000 UTC FinishedAt: 2026-08-18 19:08:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6t6fv[0].run-triage Phase: Succeeded StartedAt: 2026-08-18 19:04:42 +0000 UTC FinishedAt: 2026-08-18 19:08:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "47226bbdef69fc0de815b8f5b81b39673f50bbee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TIPC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "47226bbdef69fc0de815b8f5b81b39673f50bbee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TIPC" ], "series_id": "19ff3039-a9a0-421c-8bab-19a4369b86da" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tipc_link_rcv", "tipc_rcv" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE4IDE5OjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RJUEMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0aXBjX2xpbmtfcmN2JiMzNDssCiAgICAmIzM0O3RpcGNfcmN2JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgcG90ZW50aWFsIG1lbW9yeSBleGhhdXN0aW9uIChEb1MpIHZ1bG5lcmFiaWxpdHkgaW4gdGhlIFRJUEMgc3Vic3lzdGVtIHdoZXJlIGEgcGVlciBjb3VsZCBzdHJlYW0gaW5jb21wbGV0ZSBmcmFnbWVudCBjaGFpbnMgdG8gdW5ib3VuZGVkbHkgZ3JvdyBrZXJuZWwgbWVtb3J5LiBUaGUgZml4IGludHJvZHVjZXMgYSBzaXplIGxpbWl0IGNoZWNrIChgdHJ1ZXNpemUgXHUwMDNlIDIgKiBNQVhfTVNHX1NJWkVgKSBmb3IgaW5jb21wbGV0ZSByZWFzc2VtYmxlZCBtZXNzYWdlcyBhbmQgZnJlZXMgdGhlIHNrYiBpZiB0aGUgbGltaXQgaXMgZXhjZWVkZWQuIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIHVzZXItc3BhY2UgY29waWVzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgYnVnIGJlaW5nIGZpeGVkIGlzIHJlbGF0ZWQgdG8gcmVzb3VyY2UgbWFuYWdlbWVudCBhbmQgbWVtb3J5IGxlYWtzLCB3aGljaCBhcmUgbm90IGluIHRoZSBzY29wZSBvZiBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKS4gU3RhbmRhcmQgZnV6emluZyB3aXRoIEtBU0FOIGFuZCBrbWVtbGVhayBpcyBzdWZmaWNpZW50IGZvciBkZXRlY3RpbmcgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbGVhayBpc3N1ZXMgaW4gdGhpcyBjb250ZXh0LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFRJUEMgZnJhZ21lbnQgcmVhc3NlbWJseSBsb2dpYyB0byBwcmV2ZW50IHVuYm91bmRlZCBtZW1vcnkgZ3Jvd3RoLiBJdCBhZGRzIGEgY2hlY2sgdG8gZHJvcCBpbmNvbXBsZXRlIGZyYWdtZW50IGNoYWlucyBpZiB0aGVpciBzaXplIGV4Y2VlZHMgYDIgKiBNQVhfTVNHX1NJWkVgLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBub3JtYWwgVElQQyBwYWNrZXQgcHJvY2Vzc2luZyBwYXRocywgc3BlY2lmaWNhbGx5IHRocm91Z2ggYHRpcGNfcmN2YCBhbmQgYHRpcGNfbGlua19yY3ZgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE5OjA3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZDE0NzljYWFiNDkyZDFhYjhhMjM1Njg4ZWYzMTg2NjliZDUxYWVjOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDE5OjA3OjA3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC90aXBjL2xpbmsuYyBiL25ldC90aXBjL2xpbmsuY1xuaW5kZXggNDlkZmMwOThkODliMi4uYmY2MWM5YWM0ZWEyMSAxMDA2NDRcbi0tLSBhL25ldC90aXBjL2xpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvbGluay5jXG5AQCAtMTMxNSw3ICYjNDM7MTMxNSwyMiBAQCBzdGF0aWMgaW50IHRpcGNfbGlua19pbnB1dChzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRpZiAodGlwY19idWZfYXBwZW5kKHJlYXNtX3NrYiwgXHUwMDI2c2tiKSkge1xuIFx0XHRcdGwtXHUwMDNlc3RhdHMucmVjdl9mcmFnbWVudGVkJiM0MzsmIzQzOztcbiBcdFx0XHR0aXBjX2RhdGFfaW5wdXQobCwgc2tiLCBpbnB1dHEpO1xuLVx0XHR9IGVsc2UgaWYgKCEqcmVhc21fc2tiIFx1MDAyNlx1MDAyNiAhbGlua19pc19iY19yY3ZsaW5rKGwpKSB7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKCpyZWFzbV9za2IpIHtcbiYjNDM7XHRcdFx0LyogQSBsZWdpdGltYXRlIHJlYXNzZW1ibGVkIG1lc3NhZ2UgY2FuIG5ldmVyIGV4Y2VlZFxuJiM0MztcdFx0XHQgKiBNQVhfTVNHX1NJWkUuIExpbWl0IHRoZSBtZW1vcnkgb25lIGluY29tcGxldGVcbiYjNDM7XHRcdFx0ICogZnJhZ21lbnQgY2hhaW4gY2FuIHBpbiwgb3RoZXJ3aXNlIGEgcGVlciBjYW4gZ3Jvd1xuJiM0MztcdFx0XHQgKiBrZXJuZWwgbWVtb3J5IHVuYm91bmRlZGx5IGJ5IHN0cmVhbWluZyBmcmFnbWVudFxuJiM0MztcdFx0XHQgKiBjaGFpbnMgdGhhdCBuZXZlciBjb21wbGV0ZTogcmVjZWl2ZWQgdHJhZmZpYyBhbHNvXG4mIzQzO1x0XHRcdCAqIHJlc2V0cyB0aGUgbGluayBzaWxlbmNlIGNvdW50ZXIsIHNvIHRoZSBsaW5rIG5ldmVyXG4mIzQzO1x0XHRcdCAqIHRpbWVzIG91dCBhbmQgdGhlIGNoYWlucyBhcmUgbmV2ZXIgZnJlZWQuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRpZiAoKCpyZWFzbV9za2IpLVx1MDAzZXRydWVzaXplIFx1MDAzZSAyICogTUFYX01TR19TSVpFKSB7XG4mIzQzO1x0XHRcdFx0cHJfd2Fybl9yYXRlbGltaXRlZChcJiMzNDtGcmFnbWVudCBjaGFpbiBsYXJnZXIgdGhhbiAldSBieXRlcywgZHJvcHBpbmdcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAyICogTUFYX01TR19TSVpFKTtcbiYjNDM7XHRcdFx0XHRrZnJlZV9za2IoKnJlYXNtX3NrYik7XG4mIzQzO1x0XHRcdFx0KnJlYXNtX3NrYiA9IE5VTEw7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH0gZWxzZSBpZiAoIWxpbmtfaXNfYmNfcmN2bGluayhsKSkge1xuIFx0XHRcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXCYjMzQ7VW5hYmxlIHRvIGJ1aWxkIGZyYWdtZW50IGxpc3RcXG5cJiMzNDspO1xuIFx0XHRcdHJldHVybiB0aXBjX2xpbmtfZnNtX2V2dChsLCBMSU5LX0ZBSUxVUkVfRVZUKTtcbiBcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE5OjA3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUSVBDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGlwY19saW5rX3JjdiYjMzQ7LAogICAgJiMzNDt0aXBjX3JjdiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFRJUEMgZnJhZ21lbnQgcmVhc3NlbWJseSBsb2dpYyB0byBwcmV2ZW50IHVuYm91bmRlZCBtZW1vcnkgZ3Jvd3RoLiBJdCBhZGRzIGEgY2hlY2sgdG8gZHJvcCBpbmNvbXBsZXRlIGZyYWdtZW50IGNoYWlucyBpZiB0aGVpciBzaXplIGV4Y2VlZHMgYDIgKiBNQVhfTVNHX1NJWkVgLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBub3JtYWwgVElQQyBwYWNrZXQgcHJvY2Vzc2luZyBwYXRocywgc3BlY2lmaWNhbGx5IHRocm91Z2ggYHRpcGNfcmN2YCBhbmQgYHRpcGNfbGlua19yY3ZgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDE0NzljYWFiNDkyZDFhYjhhMjM1Njg4ZWYzMTg2NjliZDUxYWVjOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDE4IDE5OjA3OjA3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbGluay5jIGIvbmV0L3RpcGMvbGluay5jCmluZGV4IDQ5ZGZjMDk4ZDg5YjIuLmJmNjFjOWFjNGVhMjEgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL2xpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9saW5rLmMKQEAgLTEzMTUsNyAmIzQzOzEzMTUsMjIgQEAgc3RhdGljIGludCB0aXBjX2xpbmtfaW5wdXQoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJaWYgKHRpcGNfYnVmX2FwcGVuZChyZWFzbV9za2IsICZhbXA7c2tiKSkgewogCQkJbC0mZ3Q7c3RhdHMucmVjdl9mcmFnbWVudGVkJiM0MzsmIzQzOzsKIAkJCXRpcGNfZGF0YV9pbnB1dChsLCBza2IsIGlucHV0cSk7Ci0JCX0gZWxzZSBpZiAoISpyZWFzbV9za2IgJmFtcDsmYW1wOyAhbGlua19pc19iY19yY3ZsaW5rKGwpKSB7CiYjNDM7CQl9IGVsc2UgaWYgKCpyZWFzbV9za2IpIHsKJiM0MzsJCQkvKiBBIGxlZ2l0aW1hdGUgcmVhc3NlbWJsZWQgbWVzc2FnZSBjYW4gbmV2ZXIgZXhjZWVkCiYjNDM7CQkJICogTUFYX01TR19TSVpFLiBMaW1pdCB0aGUgbWVtb3J5IG9uZSBpbmNvbXBsZXRlCiYjNDM7CQkJICogZnJhZ21lbnQgY2hhaW4gY2FuIHBpbiwgb3RoZXJ3aXNlIGEgcGVlciBjYW4gZ3JvdwomIzQzOwkJCSAqIGtlcm5lbCBtZW1vcnkgdW5ib3VuZGVkbHkgYnkgc3RyZWFtaW5nIGZyYWdtZW50CiYjNDM7CQkJICogY2hhaW5zIHRoYXQgbmV2ZXIgY29tcGxldGU6IHJlY2VpdmVkIHRyYWZmaWMgYWxzbwomIzQzOwkJCSAqIHJlc2V0cyB0aGUgbGluayBzaWxlbmNlIGNvdW50ZXIsIHNvIHRoZSBsaW5rIG5ldmVyCiYjNDM7CQkJICogdGltZXMgb3V0IGFuZCB0aGUgY2hhaW5zIGFyZSBuZXZlciBmcmVlZC4KJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAoKCpyZWFzbV9za2IpLSZndDt0cnVlc2l6ZSAmZ3Q7IDIgKiBNQVhfTVNHX1NJWkUpIHsKJiM0MzsJCQkJcHJfd2Fybl9yYXRlbGltaXRlZCgmIzM0O0ZyYWdtZW50IGNoYWluIGxhcmdlciB0aGFuICV1IGJ5dGVzLCBkcm9wcGluZ1xuJiMzNDssCiYjNDM7CQkJCQkJICAgIDIgKiBNQVhfTVNHX1NJWkUpOwomIzQzOwkJCQlrZnJlZV9za2IoKnJlYXNtX3NrYik7CiYjNDM7CQkJCSpyZWFzbV9za2IgPSBOVUxMOwomIzQzOwkJCX0KJiM0MzsJCX0gZWxzZSBpZiAoIWxpbmtfaXNfYmNfcmN2bGluayhsKSkgewogCQkJcHJfd2Fybl9yYXRlbGltaXRlZCgmIzM0O1VuYWJsZSB0byBidWlsZCBmcmFnbWVudCBsaXN0XG4mIzM0Oyk7CiAJCQlyZXR1cm4gdGlwY19saW5rX2ZzbV9ldnQobCwgTElOS19GQUlMVVJFX0VWVCk7CiAJCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTk6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI0NwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRJUEMgTGluayBJbnB1dCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC90aXBjL2xpbmsuY2AsIHNwZWNpZmljYWxseSB0aGUgYHRpcGNfbGlua19pbnB1dGAgZnVuY3Rpb24uIEl0IHNlZW1zIHRoZXkmIzM5O3ZlIGFkZGVkIGEgY3J1Y2lhbCBjaGVjayB3aXRoaW4gdGhlIGZyYWdtZW50IHJlYXNzZW1ibHkgcHJvY2Vzcy4gVGhlIGNvcmUgb2YgaXQgaW52b2x2ZXMgcHJldmVudGluZyBleGNlc3NpdmUgbWVtb3J5IHVzYWdlIHdoZW4gZGVhbGluZyB3aXRoIGluY29tcGxldGUgZnJhZ21lbnQgY2hhaW5zLCB3aGljaCBpcyBhIGNsYXNzaWMgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuCgpUaGUgcGF0Y2gmIzM5O3MgbG9naWMgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogaXQmIzM5O3MgYWRkaW5nIGFuIGV4cGxpY2l0IGNoZWNrIGZvciBgKCpyZWFzbV9za2IpLSZndDt0cnVlc2l6ZSAmZ3Q7IDIgKiBNQVhfTVNHX1NJWkVgIHdpdGhpbiB0aGF0IGB0aXBjX2xpbmtfaW5wdXRgIGZ1bmN0aW9uLiBJZiB0aGUgcmVhc3NlbWJsZWQgZnJhZ21lbnQgY2hhaW4gZ2V0cyB0b28gbGFyZ2Ug4oCTIGV4Y2VlZGluZyB0d2ljZSB0aGUgbWF4aW11bSBtZXNzYWdlIHNpemUg4oCTIGl0JiMzOTtzIGdvaW5nIHRvIGRyb3AgdGhlIGNoYWluIGVudGlyZWx5LCBzZXR0aW5nIGAqcmVhc21fc2tiYCB0byBgTlVMTGAuIFRoaXMgaXMgYSBzb2xpZCwgZnVuY3Rpb25hbCBmaXggdG8gcHJldmVudCB1bmJvdW5kZWQgbWVtb3J5IGdyb3d0aCwgZXNzZW50aWFsbHkgYSBEb1MgcHJvdGVjdGlvbiBpbiB0aGUgbWFraW5nLCBhbmQgaXQmIzM5O3MgZ29vZCB0byBzZWUgcHJvYWN0aXZlIG1lYXN1cmVzIGxpa2UgdGhpcy4KCkkmIzM5O2xsIHF1aWNrbHkgcHVsbCB1cCBgbmV0L3RpcGMvbGluay5jYCBhbmQgdGFrZSBhIGxvb2sgYXQgYHRpcGNfbGlua19pbnB1dGAgZGlyZWN0bHkgdG8gdmVyaWZ5IHRoZSBpbXBsZW1lbnRhdGlvbi4gVGhlbiBJJiMzOTtsbCBsb29rIGZvciBgdGlwY19saW5rX2lucHV0YCBhbmQgYHRpcGNfYnVmX2FwcGVuZGAgdG8gZ2V0IGEgYmV0dGVyIHNlbnNlIG9mIGhvdyB0aG9zZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBhbmQgd2hlcmUgdGhlIHBhdGNoIGlzIG9wZXJhdGluZyBpbiB0aGUgd2lkZXIgVElQQyBjb250ZXh0LiBJdCYjMzk7cyBhbHdheXMgaW1wb3J0YW50IHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgd2hlbiBldmFsdWF0aW5nIGEgY2hhbmdlIGxpa2UgdGhpcy4gVGhlIGZhY3QgdGhhdCBgQ09ORklHX1RJUENgIGlzIGludm9sdmVkIGhlbHBzIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgd2lkZXIgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxOTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aXBjX2xpbmtfaW5wdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGlwYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvbGluay5jPTMzOD11bnNpZ25lZCBsb25nIHRpcGNfbGlua190b2xlcmFuY2Uoc3RydWN0IHRpcGNfbGluayAqbClcbi0tXG5uZXQvdGlwYy9saW5rLmMtMzQyLVxubmV0L3RpcGMvbGluay5jOjM0MzpzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp0aXBjX2xpbmtfaW5wdXRxKHN0cnVjdCB0aXBjX2xpbmsgKmwpXG5uZXQvdGlwYy9saW5rLmMtMzQ0LXtcbi0tXG5uZXQvdGlwYy9saW5rLmM9MTI0ND1zdGF0aWMgYm9vbCB0aXBjX2RhdGFfaW5wdXQoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvdGlwYy9saW5rLmMtMTI5MC1cbm5ldC90aXBjL2xpbmsuYzoxMjkxOi8qIHRpcGNfbGlua19pbnB1dCAtIHByb2Nlc3MgcGFja2V0IHRoYXQgaGFzIHBhc3NlZCBsaW5rIHByb3RvY29sIGNoZWNrXG5uZXQvdGlwYy9saW5rLmMtMTI5Mi0gKlxuLS1cbm5ldC90aXBjL2xpbmsuYy0xMjk0LSAqL1xubmV0L3RpcGMvbGluay5jOjEyOTU6c3RhdGljIGludCB0aXBjX2xpbmtfaW5wdXQoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC90aXBjL2xpbmsuYy0xMjk2LVx0XHRcdCAgIHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSxcbi0tXG5uZXQvdGlwYy9saW5rLmM9MTM1NT1zdGF0aWMgaW50IHRpcGNfbGlua190bmxfcmN2KHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3RpcGMvbGluay5jLTE0MTEtXHRcdGlmICghdGlwY19kYXRhX2lucHV0KGwsIGlza2IsIGlucHV0cSkpXG5uZXQvdGlwYy9saW5rLmM6MTQxMjpcdFx0XHRyYyB8PSB0aXBjX2xpbmtfaW5wdXQobCwgaXNrYiwgaW5wdXRxLCByZWFzbV9za2IpO1xubmV0L3RpcGMvbGluay5jLTE0MTMtXHRcdGlmICh1bmxpa2VseShyYykpXG4tLVxubmV0L3RpcGMvbGluay5jPTE3Nzc9aW50IHRpcGNfbGlua19yY3Yoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvdGlwYy9saW5rLmMtMTgyOS1cdFx0ZWxzZSBpZiAoIXRpcGNfZGF0YV9pbnB1dChsLCBza2IsIGwtXHUwMDNlaW5wdXRxKSlcbm5ldC90aXBjL2xpbmsuYzoxODMwOlx0XHRcdHJjIHw9IHRpcGNfbGlua19pbnB1dChsLCBza2IsIGwtXHUwMDNlaW5wdXRxLCBcdTAwMjZsLVx1MDAzZXJlYXNtX2J1Zik7XG5uZXQvdGlwYy9saW5rLmMtMTgzMS1cdFx0aWYgKHVubGlrZWx5KCYjNDM7JiM0MztsLVx1MDAzZXJjdl91bmFja2VkIFx1MDAzZT0gVElQQ19NSU5fTElOS19XSU4pKVxuLS1cbm5ldC90aXBjL2xpbmsuaD0xMDc9aW50IHRpcGNfbGlua194bWl0KHN0cnVjdCB0aXBjX2xpbmsgKmxpbmssIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsXG5uZXQvdGlwYy9saW5rLmgtMTA4LVx0XHQgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cSk7XG5uZXQvdGlwYy9saW5rLmg6MTA5OnN0cnVjdCBza19idWZmX2hlYWQgKnRpcGNfbGlua19pbnB1dHEoc3RydWN0IHRpcGNfbGluayAqbCk7XG5uZXQvdGlwYy9saW5rLmgtMTEwLXUxNiB0aXBjX2xpbmtfcmN2X254dChzdHJ1Y3QgdGlwY19saW5rICpsKTtcbi0tXG5uZXQvdGlwYy9ub2RlLmM9MTkzOD1zdGF0aWMgYm9vbCB0aXBjX25vZGVfY2hlY2tfc3RhdGUoc3RydWN0IHRpcGNfbm9kZSAqbiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvdGlwYy9ub2RlLmMtMjAwOC1cdFx0XHRcdFx0XHQgIFwmIzM0O25vZGUgbGluayBkb3duIFx1MDAzYy0gZmFpbG92ZXIhXCYjMzQ7KTtcbm5ldC90aXBjL25vZGUuYzoyMDA5Olx0XHRcdHRpcGNfc2tiX3F1ZXVlX3NwbGljZV90YWlsX2luaXQodGlwY19saW5rX2lucHV0cShwbCksXG5uZXQvdGlwYy9ub2RlLmM6MjAxMDpcdFx0XHRcdFx0XHRcdHRpcGNfbGlua19pbnB1dHEobCkpO1xubmV0L3RpcGMvbm9kZS5jLTIwMTEtXHRcdH1cbi0tXG5uZXQvdGlwYy9ub2RlLmMtMjA2My1cdFx0fVxubmV0L3RpcGMvbm9kZS5jOjIwNjQ6XHRcdGlucHV0cV9sZW4gPSBza2JfcXVldWVfbGVuKHRpcGNfbGlua19pbnB1dHEocGwpKTtcbm5ldC90aXBjL25vZGUuYy0yMDY1LVx0XHRkbHZfbnh0ID0gdGlwY19saW5rX3Jjdl9ueHQocGwpIC0gaW5wdXRxX2xlbjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzg4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUSVBDIExpbmsgSW5wdXQgRnVuY3Rpb24qKgoKT2theSwgc28gYHRpcGNfbGlua19pbnB1dGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgaW1tZWRpYXRlbHkgbmFycm93cyBkb3duIHRoZSBzY29wZSBvZiB3aGVyZSBJIG5lZWQgdG8gbG9vayBmb3IgaXRzIHVzYWdlLiBJdCYjMzk7cyBjYWxsZWQgZnJvbSBgdGlwY19saW5rX3RubF9yY3ZgIGFuZCBgdGlwY19saW5rX3JjdmAsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBmdW5jdGlvbiBuYW1lLiBOb3csIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgaW1wbGljYXRpb25zIG9mIGB0aXBjX2xpbmtfaW5wdXRgIGFuZCBpdHMgcGxhY2UgaW4gdGhlIHN5c3RlbSwgSSBuZWVkIHRvIGtub3cgdGhlIGNhbGxpbmcgY29udGV4dCBvZiBgdGlwY19saW5rX3JjdmAuIExldCYjMzk7cyB0cmFjZSBiYWNrIGFuZCBzZWUgd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBhY3R1YWxseSBpbnZva2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IHRvIGdyYXNwIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIGNoYW5nZXMgb3IgaXNzdWVzIHdpdGhpbiBgdGlwY19saW5rX2lucHV0YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxOTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aXBjX2xpbmtfcmN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3RpcGMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL2JjYXN0LmM9NDM2PWludCB0aXBjX2JjYXN0X3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3RpcGMvYmNhc3QuYy00NTMtXHRlbHNlXG5uZXQvdGlwYy9iY2FzdC5jOjQ1NDpcdFx0cmMgPSB0aXBjX2xpbmtfcmN2KGwsIHNrYiwgTlVMTCk7XG5uZXQvdGlwYy9iY2FzdC5jLTQ1NS1cdHRpcGNfYmNhc3RfdW5sb2NrKG5ldCk7XG4tLVxubmV0L3RpcGMvbGluay5jPTQyMz1pbnQgdGlwY19saW5rX21zcyhzdHJ1Y3QgdGlwY19saW5rICpsKVxuLS1cbm5ldC90aXBjL2xpbmsuYy00MzEtXG5uZXQvdGlwYy9saW5rLmM6NDMyOnUxNiB0aXBjX2xpbmtfcmN2X254dChzdHJ1Y3QgdGlwY19saW5rICpsKVxubmV0L3RpcGMvbGluay5jLTQzMy17XG4tLVxubmV0L3RpcGMvbGluay5jPTE3NDc9c3RhdGljIGludCB0aXBjX2xpbmtfYnVpbGRfbmFja19tc2coc3RydWN0IHRpcGNfbGluayAqbCxcbi0tXG5uZXQvdGlwYy9saW5rLmMtMTc3MS1cbm5ldC90aXBjL2xpbmsuYzoxNzcyOi8qIHRpcGNfbGlua19yY3YgLSBwcm9jZXNzIFRJUEMgcGFja2V0cy9tZXNzYWdlcyBhcnJpdmluZyBmcm9tIG9mZi1ub2RlXG5uZXQvdGlwYy9saW5rLmMtMTc3My0gKiBAbDogdGhlIGxpbmsgdGhhdCBzaG91bGQgaGFuZGxlIHRoZSBtZXNzYWdlXG4tLVxubmV0L3RpcGMvbGluay5jLTE3NzYtICovXG5uZXQvdGlwYy9saW5rLmM6MTc3NzppbnQgdGlwY19saW5rX3JjdihzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3RpcGMvbGluay5jLTE3NzgtXHRcdCAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpXG4tLVxubmV0L3RpcGMvbGluay5oPTEwOT1zdHJ1Y3Qgc2tfYnVmZl9oZWFkICp0aXBjX2xpbmtfaW5wdXRxKHN0cnVjdCB0aXBjX2xpbmsgKmwpO1xubmV0L3RpcGMvbGluay5oOjExMDp1MTYgdGlwY19saW5rX3Jjdl9ueHQoc3RydWN0IHRpcGNfbGluayAqbCk7XG5uZXQvdGlwYy9saW5rLmgtMTExLXUxNiB0aXBjX2xpbmtfYWNrZWQoc3RydWN0IHRpcGNfbGluayAqbCk7XG4tLVxubmV0L3RpcGMvbGluay5oPTEzMT1pbnQgdGlwY19saW5rX3RpbWVvdXQoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpO1xubmV0L3RpcGMvbGluay5oOjEzMjppbnQgdGlwY19saW5rX3JjdihzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3RpcGMvbGluay5oLTEzMy1cdFx0ICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cSk7XG4tLVxubmV0L3RpcGMvbm9kZS5jPTk1OD1zdGF0aWMgdm9pZCB0aXBjX25vZGVfbGlua19mYWlsb3ZlcihzdHJ1Y3QgdGlwY19ub2RlICpuLCBzdHJ1Y3QgdGlwY19saW5rICpsLFxuLS1cbm5ldC90aXBjL25vZGUuYy05NzItXG5uZXQvdGlwYy9ub2RlLmM6OTczOlx0bi1cdTAwM2VzeW5jX3BvaW50ID0gdGlwY19saW5rX3Jjdl9ueHQodG5sKSAmIzQzOyAoVTE2X01BWCAvIDIgLSAxKTtcbm5ldC90aXBjL25vZGUuYy05NzQtXHR0aXBjX2xpbmtfZmFpbG92ZXJfcHJlcGFyZShsLCB0bmwsIHhtaXRxKTtcbi0tXG5uZXQvdGlwYy9ub2RlLmM9OTg4PXN0YXRpYyB2b2lkIF9fdGlwY19ub2RlX2xpbmtfZG93bihzdHJ1Y3QgdGlwY19ub2RlICpuLCBpbnQgKmJlYXJlcl9pZCxcbi0tXG5uZXQvdGlwYy9ub2RlLmMtMTA1MS1cdHRpcGNfbm9kZV9mc21fZXZ0KG4sIE5PREVfU1lOQ0hfRU5EX0VWVCk7XG5uZXQvdGlwYy9ub2RlLmM6MTA1MjpcdG4tXHUwMDNlc3luY19wb2ludCA9IHRpcGNfbGlua19yY3Zfbnh0KHRubCkgJiM0MzsgKFUxNl9NQVggLyAyIC0gMSk7XG5uZXQvdGlwYy9ub2RlLmMtMTA1My1cdHRpcGNfbGlua190bmxfcHJlcGFyZShsLCB0bmwsIEZBSUxPVkVSX01TRywgeG1pdHEpO1xuLS1cbm5ldC90aXBjL25vZGUuYz0xOTM4PXN0YXRpYyBib29sIHRpcGNfbm9kZV9jaGVja19zdGF0ZShzdHJ1Y3QgdGlwY19ub2RlICpuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC90aXBjL25vZGUuYy0xOTU4LVx0XHRyZXR1cm4gZmFsc2U7XG5uZXQvdGlwYy9ub2RlLmM6MTk1OTpcdHJjdl9ueHQgPSB0aXBjX2xpbmtfcmN2X254dChsKTtcbm5ldC90aXBjL25vZGUuYy0xOTYwLVxuLS1cbm5ldC90aXBjL25vZGUuYy0yMDY0LVx0XHRpbnB1dHFfbGVuID0gc2tiX3F1ZXVlX2xlbih0aXBjX2xpbmtfaW5wdXRxKHBsKSk7XG5uZXQvdGlwYy9ub2RlLmM6MjA2NTpcdFx0ZGx2X254dCA9IHRpcGNfbGlua19yY3Zfbnh0KHBsKSAtIGlucHV0cV9sZW47XG5uZXQvdGlwYy9ub2RlLmMtMjA2Ni1cdFx0aWYgKG1vcmUoZGx2X254dCwgbi1cdTAwM2VzeW5jX3BvaW50KSkge1xuLS1cbm5ldC90aXBjL25vZGUuYz0yMDkxPXZvaWQgdGlwY19yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGlwY19iZWFyZXIgKmIpXG4tLVxubmV0L3RpcGMvbm9kZS5jLTIxNzEtXHRcdGlmIChsZS1cdTAwM2VsaW5rKSB7XG5uZXQvdGlwYy9ub2RlLmM6MjE3MjpcdFx0XHRyYyA9IHRpcGNfbGlua19yY3YobGUtXHUwMDNlbGluaywgc2tiLCBcdTAwMjZ4bWl0cSk7XG5uZXQvdGlwYy9ub2RlLmMtMjE3My1cdFx0XHRza2IgPSBOVUxMO1xuLS1cbm5ldC90aXBjL25vZGUuYy0yMTg1LVx0XHRcdGlmIChsZS1cdTAwM2VsaW5rKSB7XG5uZXQvdGlwYy9ub2RlLmM6MjE4NjpcdFx0XHRcdHJjID0gdGlwY19saW5rX3JjdihsZS1cdTAwM2VsaW5rLCBza2IsIFx1MDAyNnhtaXRxKTtcbm5ldC90aXBjL25vZGUuYy0yMTg3LVx0XHRcdFx0c2tiID0gTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDM2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIHRoZSBUSVBDIFJlY2VpdmUgUGF0aCoqCgpBbHJpZ2h0LCBzbyBgdGlwY19yY3ZgIGlzIHRoZSBjZW50cmFsIGZ1bmN0aW9uIGZvciByZWNlaXZpbmcgVElQQyBwYWNrZXRzLiBJZiBJJiMzOTttIGdvaW5nIHRvIHVuZGVyc3RhbmQgdGhlIHdob2xlIHJlY2VpdmUgcHJvY2VzcywgSSBuZWVkIHRvIGtub3cgd2hlcmUgdGhpcyB0aGluZyBpcyBhY3R1YWxseSBjYWxsZWQuIExldCYjMzk7cyBmaXJlIHVwIHRoZSBzZWFyY2ggdG9vbHMgYW5kIHNlZSB3aGVyZSB0aGlzIGtleSBmdW5jdGlvbiBpcyBpbnZva2VkIHdpdGhpbiB0aGUga2VybmVsLiBUaW1lIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxOTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aXBjX3JjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90aXBjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGlwYy9iZWFyZXIuYz02NTc9c3RhdGljIGludCB0aXBjX2wyX3Jjdl9tc2coc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvdGlwYy9iZWFyZXIuYy02NjgtXHRcdFRJUENfU0tCX0NCKHNrYiktXHUwMDNlZmxhZ3MgPSAwO1xubmV0L3RpcGMvYmVhcmVyLmM6NjY5Olx0XHR0aXBjX3JjdihkZXZfbmV0KGItXHUwMDNlcHQuZGV2KSwgc2tiLCBiKTtcbm5ldC90aXBjL2JlYXJlci5jLTY3MC1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxubmV0L3RpcGMvYmVhcmVyLmg9MTc5PXN0cnVjdCB0aXBjX2JlYXJlcl9uYW1lcyB7XG4tLVxubmV0L3RpcGMvYmVhcmVyLmgtMTg3LVxubmV0L3RpcGMvYmVhcmVyLmg6MTg4OnZvaWQgdGlwY19yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGlwY19iZWFyZXIgKmIpO1xubmV0L3RpcGMvYmVhcmVyLmgtMTg5LVxuLS1cbm5ldC90aXBjL2NyeXB0by5jPTk2NT1zdGF0aWMgdm9pZCB0aXBjX2FlYWRfZGVjcnlwdF9kb25lKHZvaWQgKmRhdGEsIGludCBlcnIpXG4tLVxubmV0L3RpcGMvY3J5cHRvLmMtOTg4LVx0XHRpZiAobGlrZWx5KHRlc3RfYml0KDAsIFx1MDAyNmItXHUwMDNldXApKSlcbm5ldC90aXBjL2NyeXB0by5jOjk4OTpcdFx0XHR0aXBjX3JjdihuZXQsIHNrYiwgYik7XG5uZXQvdGlwYy9jcnlwdG8uYy05OTAtXHRcdGVsc2Vcbi0tXG5uZXQvdGlwYy9jcnlwdG8uYz0xNjg5PWludCB0aXBjX2NyeXB0b194bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKipza2IsXG4tLVxubmV0L3RpcGMvY3J5cHRvLmMtMTgwMC0gKiBhcyB0aGUgY2FsbGJhY2ssIHRoZSBlbmNyeXB0aW9uIGhlYWRlciBhbmQgYXV0aCB0YWcgd2lsbCBiZSB0cmltbWVkIG91dFxubmV0L3RpcGMvY3J5cHRvLmM6MTgwMTogKiBiZWZvcmUgZm9yd2FyZGluZyB0byB0aXBjX3JjdigpIHZpYSB0aGUgdGlwY19jcnlwdG9fcmN2X2NvbXBsZXRlKCkuXG5uZXQvdGlwYy9jcnlwdG8uYy0xODAyLSAqIE90aGVyd2lzZSwgdGhlIHNrYiB3aWxsIGJlIGZyZWVkIVxuLS1cbm5ldC90aXBjL2NyeXB0by5jPTE4OTc9c3RhdGljIHZvaWQgdGlwY19jcnlwdG9fcmN2X2NvbXBsZXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfYWVhZCAqYWVhZCxcbi0tXG5uZXQvdGlwYy9jcnlwdG8uYy0xOTE4LVx0XHRcdGlmIChlcnIgPT0gLUVCQURNU0cgXHUwMDI2XHUwMDI2ICgqc2tiKS1cdTAwM2VuZXh0KVxubmV0L3RpcGMvY3J5cHRvLmM6MTkxOTpcdFx0XHRcdHRpcGNfcmN2KG5ldCwgKCpza2IpLVx1MDAzZW5leHQsIGIpO1xubmV0L3RpcGMvY3J5cHRvLmMtMTkyMC1cdFx0XHRnb3RvIGZyZWVfc2tiO1xuLS1cbm5ldC90aXBjL2NyeXB0by5jLTE5NjItcmN2OlxubmV0L3RpcGMvY3J5cHRvLmM6MTk2MzpcdC8qIFJlbW92ZSBlaGRyIFx1MDAyNiBhdXRoLiB0YWcgcHJpb3IgdG8gdGlwY19yY3YoKSAqL1xubmV0L3RpcGMvY3J5cHRvLmMtMTk2NC1cdGVoZHIgPSAoc3RydWN0IHRpcGNfZWhkciAqKSgqc2tiKS1cdTAwM2VkYXRhO1xuLS1cbm5ldC90aXBjL25vZGUuYz0xOTM4PXN0YXRpYyBib29sIHRpcGNfbm9kZV9jaGVja19zdGF0ZShzdHJ1Y3QgdGlwY19ub2RlICpuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC90aXBjL25vZGUuYy0yMDgyLS8qKlxubmV0L3RpcGMvbm9kZS5jOjIwODM6ICogdGlwY19yY3YgLSBwcm9jZXNzIFRJUEMgcGFja2V0cy9tZXNzYWdlcyBhcnJpdmluZyBmcm9tIG9mZi1ub2RlXG5uZXQvdGlwYy9ub2RlLmMtMjA4NC0gKiBAbmV0OiB0aGUgYXBwbGljYWJsZSBuZXQgbmFtZXNwYWNlXG4tLVxubmV0L3RpcGMvbm9kZS5jLTIwOTAtICovXG5uZXQvdGlwYy9ub2RlLmM6MjA5MTp2b2lkIHRpcGNfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRpcGNfYmVhcmVyICpiKVxubmV0L3RpcGMvbm9kZS5jLTIwOTIte1xuLS1cbm5ldC90aXBjL3RvcHNydi5jPTYzMz1zdGF0aWMgaW50IHRpcGNfdG9wc3J2X3dvcmtfc3RhcnQoc3RydWN0IHRpcGNfdG9wc3J2ICpzKVxubmV0L3RpcGMvdG9wc3J2LmMtNjM0LXtcbm5ldC90aXBjL3RvcHNydi5jOjYzNTpcdHMtXHUwMDNlcmN2X3dxID0gYWxsb2Nfb3JkZXJlZF93b3JrcXVldWUoXCYjMzQ7dGlwY19yY3ZcJiMzNDssIDApO1xubmV0L3RpcGMvdG9wc3J2LmMtNjM2LVx0aWYgKCFzLVx1MDAzZXJjdl93cSkge1xuLS1cbm5ldC90aXBjL3VkcF9tZWRpYS5jPTM2OD1zdGF0aWMgaW50IHRpcGNfdWRwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC90aXBjL3VkcF9tZWRpYS5jLTM4OC1cdFx0VElQQ19TS0JfQ0Ioc2tiKS1cdTAwM2VmbGFncyA9IDA7XG5uZXQvdGlwYy91ZHBfbWVkaWEuYzozODk6XHRcdHRpcGNfcmN2KHNvY2tfbmV0KHNrKSwgc2tiLCBiKTtcbm5ldC90aXBjL3VkcF9tZWRpYS5jLTM5MC1cdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTk6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc0NgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDEzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRJUEMgUGFja2V0IFJlY2VwdGlvbiBQYXRoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgVElQQyBtZXNzYWdlcyBhcmUgcmVjZWl2ZWQsIGFuZCBgdGlwY19yY3ZgIGlzIHRoZSBjZW50cmFsIGZ1bmN0aW9uIGhlcmUuIEkgc2VlIGl0JiMzOTtzIHRyaWdnZXJlZCBmcm9tIHR3byBkaXN0aW5jdCBwYXRoczogYHRpcGNfbDJfcmN2X21zZ2AsIHdoaWNoIGhhbmRsZXMgdGhlIEV0aGVybmV0LWJhc2VkIGRpcmVjdCB0cmFuc21pc3Npb24gdXNpbmcgdGhlIEVUSF9QX1RJUEMgcHJvdG9jb2wsIGFuZCBgdGlwY191ZHBfcmVjdmAsIHdoaWNoIGlzIGhhbmRsaW5nIHRoZSBVRFAgZW5jYXBzdWxhdGlvbiBvZiBUSVBDIG1lc3NhZ2VzLiBUaGF0IGNvbmZpcm1zIHRoZSBjb2RlIHBhdGggSSYjMzk7bSBleGFtaW5pbmcgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgdGhyb3VnaCBuZXR3b3JrIHBhY2tldHMsIGFuZCBhbnkgY2hhbmdlcyBJIG1ha2UgaGVyZSB3aWxsIGhhdmUgYSBmdW5jdGlvbmFsIGltcGFjdC4KCk5vdywgdGhpcyBwYXJ0aWN1bGFyIGNoYW5nZSBsaW1pdHMgdGhlIHRvdGFsIHNpemUgb2YgYSByZWFzc2VtYmxlZCBmcmFnbWVudCBjaGFpbi4gSXQgc2VlbXMgdGhlIGxpbWl0IGlzIHNldCBhdCBgMiAqIE1BWF9NU0dfU0laRWAuIFRoaXMgaXMgdGhlIGltcG9ydGFudCBwYXJ0IC0gdGhlIHNpemUgb2YgZnJhZ21lbnRzIGlzIG5vdyBkb3VibGUgdGhhdCBvZiBgTUFYX01TR19TSVpFYCwgd2hpY2ggaXMgZGVmaW5lZCBzb21ld2hlcmUgaW4gYG5ldC90aXBjL21zZy5oYCBvciBhIHJlbGF0ZWQgaGVhZGVyIGZpbGUuIEkgbmVlZCB0byB2ZXJpZnkgd2hhdCB0aGUgYWN0dWFsIHZhbHVlIG9mIGBNQVhfTVNHX1NJWkVgIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gTGV0JiMzOTtzIGdvIGNoZWNrIHRoYXQgZGVmaW5pdGlvbiB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTk6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TUFYX01TR19TSVpFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3RpcGMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL2dyb3VwLmMtNDctXG5uZXQvdGlwYy9ncm91cC5jOjQ4OiNkZWZpbmUgQURWX1VOSVQgKCgoTUFYX01TR19TSVpFICYjNDM7IE1BWF9IX1NJWkUpIC8gRkxPV0NUTF9CTEtfU1opICYjNDM7IDEpXG5uZXQvdGlwYy9ncm91cC5jLTQ5LSNkZWZpbmUgQURWX0lETEUgQURWX1VOSVRcbi0tXG5uZXQvdGlwYy9saW5rLmM9MTI5NT1zdGF0aWMgaW50IHRpcGNfbGlua19pbnB1dChzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC90aXBjL2xpbmsuYy0xMzE5LVx0XHRcdC8qIEEgbGVnaXRpbWF0ZSByZWFzc2VtYmxlZCBtZXNzYWdlIGNhbiBuZXZlciBleGNlZWRcbm5ldC90aXBjL2xpbmsuYzoxMzIwOlx0XHRcdCAqIE1BWF9NU0dfU0laRS4gTGltaXQgdGhlIG1lbW9yeSBvbmUgaW5jb21wbGV0ZVxubmV0L3RpcGMvbGluay5jLTEzMjEtXHRcdFx0ICogZnJhZ21lbnQgY2hhaW4gY2FuIHBpbiwgb3RoZXJ3aXNlIGEgcGVlciBjYW4gZ3Jvd1xuLS1cbm5ldC90aXBjL2xpbmsuYy0xMzI2LVx0XHRcdCAqL1xubmV0L3RpcGMvbGluay5jOjEzMjc6XHRcdFx0aWYgKCgqcmVhc21fc2tiKS1cdTAwM2V0cnVlc2l6ZSBcdTAwM2UgMiAqIE1BWF9NU0dfU0laRSkge1xubmV0L3RpcGMvbGluay5jLTEzMjgtXHRcdFx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwmIzM0O0ZyYWdtZW50IGNoYWluIGxhcmdlciB0aGFuICV1IGJ5dGVzLCBkcm9wcGluZ1xcblwmIzM0Oyxcbm5ldC90aXBjL2xpbmsuYzoxMzI5Olx0XHRcdFx0XHRcdCAgICAyICogTUFYX01TR19TSVpFKTtcbm5ldC90aXBjL2xpbmsuYy0xMzMwLVx0XHRcdFx0a2ZyZWVfc2tiKCpyZWFzbV9za2IpO1xuLS1cbm5ldC90aXBjL21zZy5jPTM4ND1pbnQgdGlwY19tc2dfYnVpbGQoc3RydWN0IHRpcGNfbXNnICptaGRyLCBzdHJ1Y3QgbXNnaGRyICptLCBpbnQgb2Zmc2V0LFxuLS1cbm5ldC90aXBjL21zZy5jLTQwNS1cdFx0aWYgKHVubGlrZWx5KCFza2IpKSB7XG5uZXQvdGlwYy9tc2cuYzo0MDY6XHRcdFx0aWYgKHBrdG1heCAhPSBNQVhfTVNHX1NJWkUpXG5uZXQvdGlwYy9tc2cuYy00MDctXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbi0tXG5uZXQvdGlwYy9tc2cuaD00OT1zdHJ1Y3QgcGxpc3Q7XG4tLVxubmV0L3RpcGMvbXNnLmgtMTAwLVxubmV0L3RpcGMvbXNnLmg6MTAxOiNkZWZpbmUgTUFYX01TR19TSVpFIChNQVhfSF9TSVpFICYjNDM7IFRJUENfTUFYX1VTRVJfTVNHX1NJWkUpXG5uZXQvdGlwYy9tc2cuaC0xMDItI2RlZmluZSBUSVBDX01FRElBX0lORk9fT0ZGU0VUXHQ1XG4tLVxubmV0L3RpcGMvbm9kZS5jPTIwNT1pbnQgdGlwY19ub2RlX2dldF9tdHUoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkciwgdTMyIHNlbCwgYm9vbCBjb25uZWN0ZWQpXG4tLVxubmV0L3RpcGMvbm9kZS5jLTIwOC1cdGludCBiZWFyZXJfaWQ7XG5uZXQvdGlwYy9ub2RlLmM6MjA5Olx0dW5zaWduZWQgaW50IG10dSA9IE1BWF9NU0dfU0laRTtcbm5ldC90aXBjL25vZGUuYy0yMTAtXG4tLVxubmV0L3RpcGMvbm9kZS5jLTIxNC1cbm5ldC90aXBjL25vZGUuYzoyMTU6XHQvKiBBbGxvdyBNQVhfTVNHX1NJWkUgd2hlbiBidWlsZGluZyBjb25uZWN0aW9uIG9yaWVudGVkIG1lc3NhZ2Vcbm5ldC90aXBjL25vZGUuYy0yMTYtXHQgKiBpZiB0aGV5IGFyZSBpbiB0aGUgc2FtZSBjb3JlIG5ldHdvcmtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0yNTM9c3RhdGljIHZvaWQgdHNrX3NldF9uYWdsZShzdHJ1Y3QgdGlwY19zb2NrICp0c2spXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMjY0LVx0LyogTGltaXQgbm9kZSBsb2NhbCBidWZmZXIgc2l6ZSB0byBhdm9pZCByZWNlaXZlIHF1ZXVlIG92ZXJmbG93ICovXG5uZXQvdGlwYy9zb2NrZXQuYzoyNjU6XHRpZiAodHNrLVx1MDAzZW1heF9wa3QgPT0gTUFYX01TR19TSVpFKVxubmV0L3RpcGMvc29ja2V0LmMtMjY2LVx0XHR0c2stXHUwMDNlbWF4bmFnbGUgPSAxNTAwO1xuLS1cbm5ldC90aXBjL3NvY2tldC5oLTQyLSNkZWZpbmUgRkxPV0NUTF9NU0dfV0lOIDUxMlxubmV0L3RpcGMvc29ja2V0Lmg6NDM6I2RlZmluZSBGTE9XQ1RMX01TR19MSU0gKChGTE9XQ1RMX01TR19XSU4gKiAyICYjNDM7IDEpICogU0tCX1RSVUVTSVpFKE1BWF9NU0dfU0laRSkpXG5uZXQvdGlwYy9zb2NrZXQuaC00NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTk6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODEwMQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVElQQyBMaW5rIElucHV0IENoYW5nZSoqCgpPa2F5LCBzbyB0aGUgY2hhbmdlIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlzIHNwZWNpZmljYWxseSB3aXRoaW4gYHRpcGNfbGlua19pbnB1dGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIEl0IGxvb2tzIGxpa2UgYHRpcGNfcmN2YCBpcyB0aGUgZW50cnkgcG9pbnQsIHdoaWNoIGNhbGxzIGB0aXBjX25vZGVfY2hlY2tfc3RhdGVgLiBJJiMzOTttIHJlYXNvbmFibHkgY29uZmlkZW50IHRoYXQgYHRpcGNfbm9kZV9jaGVja19zdGF0ZWAgdGhlbiBjYWxscyBgdGlwY19saW5rX3JjdmAsIGFuZCBmaW5hbGx5LCB3ZSBhcnJpdmUgYXQgYHRpcGNfbGlua19pbnB1dGAuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBwcm9iYWJsZSBmbG93LiBHaXZlbiB0aGlzLCBJIHNob3VsZCBzdGFydCBteSBkZWVwZXIgZGl2ZSBpbnRvIHRoZSBjb2RlIGJ5IGZvY3VzaW5nIG9uIGB0aXBjX2xpbmtfcmN2YC4gVGhpcyBpcyB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgdG8gcHJvcGVybHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBtb2RpZmljYXRpb25zIG1hZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE5OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RpcGNfbGlua19yY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGlwYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvYmNhc3QuYz00MzY9aW50IHRpcGNfYmNhc3RfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvdGlwYy9iY2FzdC5jLTQ1My1cdGVsc2Vcbm5ldC90aXBjL2JjYXN0LmM6NDU0Olx0XHRyYyA9IHRpcGNfbGlua19yY3YobCwgc2tiLCBOVUxMKTtcbm5ldC90aXBjL2JjYXN0LmMtNDU1LVx0dGlwY19iY2FzdF91bmxvY2sobmV0KTtcbi0tXG5uZXQvdGlwYy9saW5rLmM9NDIzPWludCB0aXBjX2xpbmtfbXNzKHN0cnVjdCB0aXBjX2xpbmsgKmwpXG4tLVxubmV0L3RpcGMvbGluay5jLTQzMS1cbm5ldC90aXBjL2xpbmsuYzo0MzI6dTE2IHRpcGNfbGlua19yY3Zfbnh0KHN0cnVjdCB0aXBjX2xpbmsgKmwpXG5uZXQvdGlwYy9saW5rLmMtNDMzLXtcbi0tXG5uZXQvdGlwYy9saW5rLmM9MTc0Nz1zdGF0aWMgaW50IHRpcGNfbGlua19idWlsZF9uYWNrX21zZyhzdHJ1Y3QgdGlwY19saW5rICpsLFxuLS1cbm5ldC90aXBjL2xpbmsuYy0xNzcxLVxubmV0L3RpcGMvbGluay5jOjE3NzI6LyogdGlwY19saW5rX3JjdiAtIHByb2Nlc3MgVElQQyBwYWNrZXRzL21lc3NhZ2VzIGFycml2aW5nIGZyb20gb2ZmLW5vZGVcbm5ldC90aXBjL2xpbmsuYy0xNzczLSAqIEBsOiB0aGUgbGluayB0aGF0IHNob3VsZCBoYW5kbGUgdGhlIG1lc3NhZ2Vcbi0tXG5uZXQvdGlwYy9saW5rLmMtMTc3Ni0gKi9cbm5ldC90aXBjL2xpbmsuYzoxNzc3OmludCB0aXBjX2xpbmtfcmN2KHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvdGlwYy9saW5rLmMtMTc3OC1cdFx0ICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cSlcbi0tXG5uZXQvdGlwYy9saW5rLmg9MTA5PXN0cnVjdCBza19idWZmX2hlYWQgKnRpcGNfbGlua19pbnB1dHEoc3RydWN0IHRpcGNfbGluayAqbCk7XG5uZXQvdGlwYy9saW5rLmg6MTEwOnUxNiB0aXBjX2xpbmtfcmN2X254dChzdHJ1Y3QgdGlwY19saW5rICpsKTtcbm5ldC90aXBjL2xpbmsuaC0xMTEtdTE2IHRpcGNfbGlua19hY2tlZChzdHJ1Y3QgdGlwY19saW5rICpsKTtcbi0tXG5uZXQvdGlwYy9saW5rLmg9MTMxPWludCB0aXBjX2xpbmtfdGltZW91dChzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cSk7XG5uZXQvdGlwYy9saW5rLmg6MTMyOmludCB0aXBjX2xpbmtfcmN2KHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvdGlwYy9saW5rLmgtMTMzLVx0XHQgIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKTtcbi0tXG5uZXQvdGlwYy9ub2RlLmM9OTU4PXN0YXRpYyB2b2lkIHRpcGNfbm9kZV9saW5rX2ZhaWxvdmVyKHN0cnVjdCB0aXBjX25vZGUgKm4sIHN0cnVjdCB0aXBjX2xpbmsgKmwsXG4tLVxubmV0L3RpcGMvbm9kZS5jLTk3Mi1cbm5ldC90aXBjL25vZGUuYzo5NzM6XHRuLVx1MDAzZXN5bmNfcG9pbnQgPSB0aXBjX2xpbmtfcmN2X254dCh0bmwpICYjNDM7IChVMTZfTUFYIC8gMiAtIDEpO1xubmV0L3RpcGMvbm9kZS5jLTk3NC1cdHRpcGNfbGlua19mYWlsb3Zlcl9wcmVwYXJlKGwsIHRubCwgeG1pdHEpO1xuLS1cbm5ldC90aXBjL25vZGUuYz05ODg9c3RhdGljIHZvaWQgX190aXBjX25vZGVfbGlua19kb3duKHN0cnVjdCB0aXBjX25vZGUgKm4sIGludCAqYmVhcmVyX2lkLFxuLS1cbm5ldC90aXBjL25vZGUuYy0xMDUxLVx0dGlwY19ub2RlX2ZzbV9ldnQobiwgTk9ERV9TWU5DSF9FTkRfRVZUKTtcbm5ldC90aXBjL25vZGUuYzoxMDUyOlx0bi1cdTAwM2VzeW5jX3BvaW50ID0gdGlwY19saW5rX3Jjdl9ueHQodG5sKSAmIzQzOyAoVTE2X01BWCAvIDIgLSAxKTtcbm5ldC90aXBjL25vZGUuYy0xMDUzLVx0dGlwY19saW5rX3RubF9wcmVwYXJlKGwsIHRubCwgRkFJTE9WRVJfTVNHLCB4bWl0cSk7XG4tLVxubmV0L3RpcGMvbm9kZS5jPTE5Mzg9c3RhdGljIGJvb2wgdGlwY19ub2RlX2NoZWNrX3N0YXRlKHN0cnVjdCB0aXBjX25vZGUgKm4sIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3RpcGMvbm9kZS5jLTE5NTgtXHRcdHJldHVybiBmYWxzZTtcbm5ldC90aXBjL25vZGUuYzoxOTU5Olx0cmN2X254dCA9IHRpcGNfbGlua19yY3Zfbnh0KGwpO1xubmV0L3RpcGMvbm9kZS5jLTE5NjAtXG4tLVxubmV0L3RpcGMvbm9kZS5jLTIwNjQtXHRcdGlucHV0cV9sZW4gPSBza2JfcXVldWVfbGVuKHRpcGNfbGlua19pbnB1dHEocGwpKTtcbm5ldC90aXBjL25vZGUuYzoyMDY1Olx0XHRkbHZfbnh0ID0gdGlwY19saW5rX3Jjdl9ueHQocGwpIC0gaW5wdXRxX2xlbjtcbm5ldC90aXBjL25vZGUuYy0yMDY2LVx0XHRpZiAobW9yZShkbHZfbnh0LCBuLVx1MDAzZXN5bmNfcG9pbnQpKSB7XG4tLVxubmV0L3RpcGMvbm9kZS5jPTIwOTE9dm9pZCB0aXBjX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0aXBjX2JlYXJlciAqYilcbi0tXG5uZXQvdGlwYy9ub2RlLmMtMjE3MS1cdFx0aWYgKGxlLVx1MDAzZWxpbmspIHtcbm5ldC90aXBjL25vZGUuYzoyMTcyOlx0XHRcdHJjID0gdGlwY19saW5rX3JjdihsZS1cdTAwM2VsaW5rLCBza2IsIFx1MDAyNnhtaXRxKTtcbm5ldC90aXBjL25vZGUuYy0yMTczLVx0XHRcdHNrYiA9IE5VTEw7XG4tLVxubmV0L3RpcGMvbm9kZS5jLTIxODUtXHRcdFx0aWYgKGxlLVx1MDAzZWxpbmspIHtcbm5ldC90aXBjL25vZGUuYzoyMTg2Olx0XHRcdFx0cmMgPSB0aXBjX2xpbmtfcmN2KGxlLVx1MDAzZWxpbmssIHNrYiwgXHUwMDI2eG1pdHEpO1xubmV0L3RpcGMvbm9kZS5jLTIxODctXHRcdFx0XHRza2IgPSBOVUxMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzYyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVElQQyBNZW1vcnkgR3Jvd3RoIFByZXZlbnRpb24gQ2hhbmdlKioKCk9rYXksIHNvIHRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlIHNlZW1zIHRvIGJlIHdpdGhpbiBgdGlwY19saW5rX2lucHV0YC4gSXQgbG9va3MgbGlrZSB0aGlzIGlzIGEgZnVuY3Rpb25hbCBpbXByb3ZlbWVudCwgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGFkZHJlc3MgYW5kIHByZXZlbnQgdW5ib3VuZGVkIG1lbW9yeSBncm93dGgg4oCTIGEgY3JpdGljYWwgaXNzdWUgaW4gYW55IG5ldHdvcmsgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24uIFRoZSBnb29kIG5ld3MgaXMsIGJhc2VkIG9uIHRoZSBpbmZvcm1hdGlvbiwgdGhpcyBpcyByZWFjaGFibGUgdGhyb3VnaCBzdGFuZGFyZCBUSVBDIHBhY2tldCBwcm9jZXNzaW5nLCBzbyB3ZSYjMzk7cmUgbm90IGxvb2tpbmcgYXQgc29tZSBvYnNjdXJlIGVkZ2UgY2FzZSBoZXJlLiBUaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBpcyBzdHJhaWdodGZvcndhcmQ6IGBUSVBDYC4gVGhhdCYjMzk7cyByZWFzb25hYmxlLgoKTm93LCB3aGVyZSBkbyB3ZSB0cmFjZSB0aGlzIHRocm91Z2ggdGhlIGNvZGU/IFRoZSBmb2N1cyBzeW1ib2xzIGZvciB0cmFjaW5nIHRoZSBwYXRoIHRocm91Z2ggdGhlIGZ1bmN0aW9ucyBzaG91bGQgYmUgZWl0aGVyIGB0aXBjX2xpbmtfcmN2YCBvciBgdGlwY19yY3ZgLiBMZXQmIzM5O3MgY2hlY2sgdGhvc2Ugb3V0LiBgdGlwY19yY3ZgIGxvb2tzIGxpa2UgdGhlIG1haW4gZW50cnkgcG9pbnQsIGFzIHlvdSYjMzk7ZCBleHBlY3QuIFRoZW4sIGB0aXBjX2xpbmtfcmN2YCwgd2hpY2ggaXMgc3BlY2lmaWMgdG8gbGluayByZWNlcHRpb24sIHByb2JhYmx5IGdldHMgdXMgY2xvc2VyIHRvIGB0aXBjX2xpbmtfaW5wdXRgLiBXZSBhbHNvIGhhdmUgYHRpcGNfYmNhc3RfcmN2YCBmb3IgYnJvYWRjYXN0LCBgdGlwY19saW5rX3RubF9yY3ZgIGZvciB0dW5uZWxzLCBgdGlwY191ZHBfcmVjdmAgZm9yIFVEUCwgYW5kIGB0aXBjX2wyX3Jjdl9tc2dgIGZvciBMMiBtZXNzYWdlcy4KCkFscmlnaHQsIGxldCYjMzk7cyBjaXJjbGUgYmFjayB0byBgdGlwY19saW5rX2lucHV0YCBhbmQgc3RhcnQgZGlnZ2luZyBpbiBmcm9tIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxOTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aXBjX2xpbmtfaW5wdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGlwYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvbGluay5jPTMzOD11bnNpZ25lZCBsb25nIHRpcGNfbGlua190b2xlcmFuY2Uoc3RydWN0IHRpcGNfbGluayAqbClcbi0tXG5uZXQvdGlwYy9saW5rLmMtMzQyLVxubmV0L3RpcGMvbGluay5jOjM0MzpzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp0aXBjX2xpbmtfaW5wdXRxKHN0cnVjdCB0aXBjX2xpbmsgKmwpXG5uZXQvdGlwYy9saW5rLmMtMzQ0LXtcbi0tXG5uZXQvdGlwYy9saW5rLmM9MTI0ND1zdGF0aWMgYm9vbCB0aXBjX2RhdGFfaW5wdXQoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvdGlwYy9saW5rLmMtMTI5MC1cbm5ldC90aXBjL2xpbmsuYzoxMjkxOi8qIHRpcGNfbGlua19pbnB1dCAtIHByb2Nlc3MgcGFja2V0IHRoYXQgaGFzIHBhc3NlZCBsaW5rIHByb3RvY29sIGNoZWNrXG5uZXQvdGlwYy9saW5rLmMtMTI5Mi0gKlxuLS1cbm5ldC90aXBjL2xpbmsuYy0xMjk0LSAqL1xubmV0L3RpcGMvbGluay5jOjEyOTU6c3RhdGljIGludCB0aXBjX2xpbmtfaW5wdXQoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC90aXBjL2xpbmsuYy0xMjk2LVx0XHRcdCAgIHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSxcbi0tXG5uZXQvdGlwYy9saW5rLmM9MTM1NT1zdGF0aWMgaW50IHRpcGNfbGlua190bmxfcmN2KHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3RpcGMvbGluay5jLTE0MTEtXHRcdGlmICghdGlwY19kYXRhX2lucHV0KGwsIGlza2IsIGlucHV0cSkpXG5uZXQvdGlwYy9saW5rLmM6MTQxMjpcdFx0XHRyYyB8PSB0aXBjX2xpbmtfaW5wdXQobCwgaXNrYiwgaW5wdXRxLCByZWFzbV9za2IpO1xubmV0L3RpcGMvbGluay5jLTE0MTMtXHRcdGlmICh1bmxpa2VseShyYykpXG4tLVxubmV0L3RpcGMvbGluay5jPTE3Nzc9aW50IHRpcGNfbGlua19yY3Yoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvdGlwYy9saW5rLmMtMTgyOS1cdFx0ZWxzZSBpZiAoIXRpcGNfZGF0YV9pbnB1dChsLCBza2IsIGwtXHUwMDNlaW5wdXRxKSlcbm5ldC90aXBjL2xpbmsuYzoxODMwOlx0XHRcdHJjIHw9IHRpcGNfbGlua19pbnB1dChsLCBza2IsIGwtXHUwMDNlaW5wdXRxLCBcdTAwMjZsLVx1MDAzZXJlYXNtX2J1Zik7XG5uZXQvdGlwYy9saW5rLmMtMTgzMS1cdFx0aWYgKHVubGlrZWx5KCYjNDM7JiM0MztsLVx1MDAzZXJjdl91bmFja2VkIFx1MDAzZT0gVElQQ19NSU5fTElOS19XSU4pKVxuLS1cbm5ldC90aXBjL2xpbmsuaD0xMDc9aW50IHRpcGNfbGlua194bWl0KHN0cnVjdCB0aXBjX2xpbmsgKmxpbmssIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsXG5uZXQvdGlwYy9saW5rLmgtMTA4LVx0XHQgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cSk7XG5uZXQvdGlwYy9saW5rLmg6MTA5OnN0cnVjdCBza19idWZmX2hlYWQgKnRpcGNfbGlua19pbnB1dHEoc3RydWN0IHRpcGNfbGluayAqbCk7XG5uZXQvdGlwYy9saW5rLmgtMTEwLXUxNiB0aXBjX2xpbmtfcmN2X254dChzdHJ1Y3QgdGlwY19saW5rICpsKTtcbi0tXG5uZXQvdGlwYy9ub2RlLmM9MTkzOD1zdGF0aWMgYm9vbCB0aXBjX25vZGVfY2hlY2tfc3RhdGUoc3RydWN0IHRpcGNfbm9kZSAqbiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvdGlwYy9ub2RlLmMtMjAwOC1cdFx0XHRcdFx0XHQgIFwmIzM0O25vZGUgbGluayBkb3duIFx1MDAzYy0gZmFpbG92ZXIhXCYjMzQ7KTtcbm5ldC90aXBjL25vZGUuYzoyMDA5Olx0XHRcdHRpcGNfc2tiX3F1ZXVlX3NwbGljZV90YWlsX2luaXQodGlwY19saW5rX2lucHV0cShwbCksXG5uZXQvdGlwYy9ub2RlLmM6MjAxMDpcdFx0XHRcdFx0XHRcdHRpcGNfbGlua19pbnB1dHEobCkpO1xubmV0L3RpcGMvbm9kZS5jLTIwMTEtXHRcdH1cbi0tXG5uZXQvdGlwYy9ub2RlLmMtMjA2My1cdFx0fVxubmV0L3RpcGMvbm9kZS5jOjIwNjQ6XHRcdGlucHV0cV9sZW4gPSBza2JfcXVldWVfbGVuKHRpcGNfbGlua19pbnB1dHEocGwpKTtcbm5ldC90aXBjL25vZGUuYy0yMDY1LVx0XHRkbHZfbnh0ID0gdGlwY19saW5rX3Jjdl9ueHQocGwpIC0gaW5wdXRxX2xlbjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTk6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyODcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgYHRpcGNfbGlua19yY3ZgIHNlZW1zIGxpa2UgYSByZWFsbHkgc29saWQgZm9jdXMgZm9yIHRoaXMuIEkmIzM5O3ZlIGFsd2F5cyBmb3VuZCB0aGF0IGZ1bmN0aW9uIHRvIGJlIHBhcnRpY3VsYXJseSBpbnNpZ2h0ZnVsIGluIHRoaXMgYXJlYS4gQW5kLCB5b3Uga25vdywgYHRpcGNfcmN2YCBpcyBhbHNvIGEgdmVyeSBjb21wZWxsaW5nIGNhbmRpZGF0ZSBmb3IgY2xvc2VyIGV4YW1pbmF0aW9uLgoKQnV0IGJlZm9yZSBJIGdldCB0b28gZGVlcCBpbnRvIGVpdGhlciBvZiB0aG9zZSwgSSBzaG91bGQgcHJvYmFibHkgdGFrZSBhIG1vcmUgY29tcHJlaGVuc2l2ZSBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9uLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55IGltcG9ydGFudCBzZXR0aW5ncy4gVGhlIHByaW1hcnkgb25lLCBvZiBjb3Vyc2UsIGlzIGBDT05GSUdfVElQQ2AuIEkmIzM5O2xsIHdhbnQgdG8gdmVyaWZ5IHRoYXQuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBzdXBwb3J0aW5nIGNvbmZpZ3VyYXRpb25zIHRoYXQgbmVlZCBhIGNsb3NlciBsb29rLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aG9zZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTk6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRJUEMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGlwYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvS2NvbmZpZy01LVxubmV0L3RpcGMvS2NvbmZpZzo2Om1lbnVjb25maWcgVElQQ1xubmV0L3RpcGMvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7VGhlIFRJUEMgUHJvdG9jb2xcJiMzNDtcbi0tXG5uZXQvdGlwYy9LY29uZmlnLTIzLVxubmV0L3RpcGMvS2NvbmZpZzoyNDpjb25maWcgVElQQ19NRURJQV9JQlxubmV0L3RpcGMvS2NvbmZpZy0yNS1cdGJvb2wgXCYjMzQ7SW5maW5pQmFuZCBtZWRpYSB0eXBlIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvdGlwYy9LY29uZmlnLTI5LVx0ICBJUC1vdmVyLUluZmluaUJhbmQgZGV2aWNlcy5cbm5ldC90aXBjL0tjb25maWc6MzA6Y29uZmlnIFRJUENfTUVESUFfVURQXG5uZXQvdGlwYy9LY29uZmlnLTMxLVx0Ym9vbCBcJiMzNDtJUC9VRFAgbWVkaWEgdHlwZSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3RpcGMvS2NvbmZpZy0zNy1cbm5ldC90aXBjL0tjb25maWc6Mzg6Y29uZmlnIFRJUENfQ1JZUFRPXG5uZXQvdGlwYy9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtUSVBDIGVuY3J5cHRpb24gc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC90aXBjL0tjb25maWctNTItXG5uZXQvdGlwYy9LY29uZmlnOjUzOmNvbmZpZyBUSVBDX0RJQUdcbm5ldC90aXBjL0tjb25maWctNTQtXHR0cmlzdGF0ZSBcJiMzNDtUSVBDOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTk6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4MTIKCQkJCQkJCW91dHB1dDogMTI1CgkJCQkJCQl0aG91Z2h0czogNDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBUSVBDIENvbmZpZ3VyYXRpb24gQ2hhbmdlKioKCk9rYXksIHNvIHRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlIGxpZXMgd2l0aGluIGBUSVBDYCwgdGhlIG1haW4gY29uZmlndXJhdGlvbiBmaWxlLCBhcyBleHBlY3RlZC4gVGhlIHBhdGNoIGl0c2VsZiBmb2N1c2VzIG9uIHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgZGVuaWFsLW9mLXNlcnZpY2UgdnVsbmVyYWJpbGl0eSByZWxhdGVkIHRvIHJlYXNzZW1ibGVkIGZyYWdtZW50IGNoYWlucy4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIGEgY3J1Y2lhbCBjaGVjayB0byBkcm9wIGEgcmVhc3NlbWJsZWQgZnJhZ21lbnQgY2hhaW4gaWYgaXRzIHNpemUgZXhjZWVkcyBgMiAqIE1BWF9NU0dfU0laRWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGFsdGVyYXRpb247IHdlJiMzOTtyZSBhY3RpdmVseSBjaGFuZ2luZyBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIGNlcnRhaW4gbmV0d29yayBwYWNrZXRzIGJhc2VkIG9uIHNpemUuIFRoYXQgc2NyZWFtcyAmIzM0O2Z1enppbmcgdGFyZ2V0JiMzNDsgdG8gbWUsIHJpZ2h0IGF3YXkuIFNvIHRoZSBmb2N1cyBzeW1ib2xzIGZvciB0ZXN0aW5nIHdpbGwgZGVmaW5pdGVseSBiZSBgdGlwY19saW5rX3JjdmAgYW5kIGB0aXBjX3JjdmAuCgpOb3csIGxldCYjMzk7cyBqdXN0IG1ha2UgYWJzb2x1dGVseSBzdXJlIEkmIzM5O3ZlIGdvdCB0aGlzIHJpZ2h0LiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBgdGlwY19saW5rX2lucHV0YCBmdW5jdGlvbiB3aXRoaW4gYG5ldC90aXBjL2xpbmsuY2AuIEFoLCB5ZXMsIGhlcmUgaXQgaXM6CgpgYGBjCgkJaWYgKHRpcGNfYnVmX2FwcGVuZChyZWFzbV9za2IsICZhbXA7c2tiKSkgewoJCQlsLSZndDtzdGF0cy5yZWN2X2ZyYWdtZW50ZWQmIzQzOyYjNDM7OwoJCQl0aXBjX2RhdGFfaW5wdXQobCwgc2tiLCBpbnB1dHEpOwoJCX0gZWxzZSBpZiAoKnJlYXNtX3NrYikgewoJCQkvKiBBIGxlZ2l0aW1hdGUgcmVhc3NlbWJsZWQgbWVzc2FnZSBjYW4gbmV2ZXIgZXhjZWVkCgkJCSAqIE1BWF9NU0dfU0laRS4gTGltaXQgdGhlIG1lbW9yeSBvbmUgaW5jb21wbGV0ZQoJCQkgKiBmcmFnbWVudCBjaGFpbiBjYW4gcGluLCBvdGhlcndpc2UgYSBwZWVyIGNhbiBncm93CgkJCSAqIGtlcm5lbCBtZW1vcnkgdW5ib3VuZGVkbHkgYnkgc3RyZWFtaW5nIGZyYWdtZW50CgkJCSAqIGNoYWlucyB0aGF0IG5ldmVyIGNvbXBsZXRlOiByZWNlaXZlZCB0cmFmZmljIGFsc28KCQkJICogcmVzZXRzIHRoZSBsaW5rIHNpbGVuY2UgY291bnRlciwgc28gdGhlIGxpbmsgbmV2ZXIKCQkJICogdGltZXMgb3V0IGFuZCB0aGUgY2hhaW5zIGFyZSBuZXZlciBmcmVlZC4KCQkJICovCgkJCWlmICgoKnJlYXNtX3NrYiktJmd0O3RydWVzaXplICZndDsgMiAqIE1BWF9NU0dfU0laRSkgewoJCQkJcHJfd2Fybl9yYXRlbGltaXRlZCgmIzM0O0ZyYWdtZW50IGNoYWluIGxhcmdlciB0aGFuICV1IGJ5dGVzLCBkcm9wcGluZ1xuJiMzNDssCgkJCQkJCSAgICAyICogTUFYX01TR19TSVpFKTsKCQkJCWtmcmVlX3NrYigqcmVhc21fc2tiKTsKCQkJCSpyZWFzbV9za2IgPSBOVUxMOwoJCQl9CgkJfSBlbHNlIGlmICghbGlua19pc19iY19yY3ZsaW5rKGwpKSB7CgkJCXByX3dhcm5fcmF0ZWxpbWl0ZWQoJiMzNDtVbmFibGUgdG8gYnVpbGQgZnJhZ21lbnQgbGlzdFxuJiMzNDspOwoJCQlyZXR1cm4gdGlwY19saW5rX2ZzbV9ldnQobCwgTElOS19GQUlMVVJFX0VWVCk7CgkJfQpgYGAKCll1cCwgdGhhdCBjb25maXJtcyBpdC4gVGhpcyBpcyBhIHNvbGlkLCBmdW5jdGlvbmFsIGNoYW5nZS4gSXQgZGlyZWN0bHkgYWRkcmVzc2VzIHRoZSBpc3N1ZSBvZiBwb3RlbnRpYWxseSB1bmJvdW5kZWQgbWVtb3J5IGNvbnN1bXB0aW9uIGJ5IGludGVudGlvbmFsbHkgZHJvcHBpbmcgZXhjZXNzaXZlbHkgbGFyZ2UsIGluY29tcGxldGUgZnJhZ21lbnQgY2hhaW5zIGFuZCBmcmVlaW5nIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZW0uIFRoaXMgaXMgYWNjZXNzaWJsZSBmcm9tIHRoZSBgdGlwY19saW5rX3JjdmAgcGF0aCwgd2hpY2ggaXMgZXhhY3RseSB3aGVyZSBJIHRob3VnaHQgaXQgd291bGQgYmUuIE9rYXksIEkmIzM5O20gc2F0aXNmaWVkLiBOb3cgSSYjMzk7bSBnb2luZyB0byBzZXQgdXAgdGhlIGFwcHJvcHJpYXRlIGNvbmZpZ3VyYXRpb25zIGJhc2VkIG9uIHRoZXNlIGZpbmRpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxOTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VElQQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RpcGNfbGlua19yY3YmIzM0OywKICAgICYjMzQ7dGlwY19yY3YmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBUSVBDIGZyYWdtZW50IHJlYXNzZW1ibHkgbG9naWMgdG8gcHJldmVudCB1bmJvdW5kZWQgbWVtb3J5IGdyb3d0aC4gSXQgYWRkcyBhIGNoZWNrIHRvIGRyb3AgaW5jb21wbGV0ZSBmcmFnbWVudCBjaGFpbnMgaWYgdGhlaXIgc2l6ZSBleGNlZWRzIGAyICogTUFYX01TR19TSVpFYC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgbm9ybWFsIFRJUEMgcGFja2V0IHByb2Nlc3NpbmcgcGF0aHMsIHNwZWNpZmljYWxseSB0aHJvdWdoIGB0aXBjX3JjdmAgYW5kIGB0aXBjX2xpbmtfcmN2YC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VElQQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RpcGNfbGlua19yY3YmIzM0OywKICAgICYjMzQ7dGlwY19yY3YmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBUSVBDIGZyYWdtZW50IHJlYXNzZW1ibHkgbG9naWMgdG8gcHJldmVudCB1bmJvdW5kZWQgbWVtb3J5IGdyb3d0aC4gSXQgYWRkcyBhIGNoZWNrIHRvIGRyb3AgaW5jb21wbGV0ZSBmcmFnbWVudCBjaGFpbnMgaWYgdGhlaXIgc2l6ZSBleGNlZWRzIGAyICogTUFYX01TR19TSVpFYC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgbm9ybWFsIFRJUEMgcGFja2V0IHByb2Nlc3NpbmcgcGF0aHMsIHNwZWNpZmljYWxseSB0aHJvdWdoIGB0aXBjX3JjdmAgYW5kIGB0aXBjX2xpbmtfcmN2YC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTk6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxOTowNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgbWVtb3J5IGV4aGF1c3Rpb24gKERvUykgdnVsbmVyYWJpbGl0eSBpbiB0aGUgVElQQyBzdWJzeXN0ZW0gd2hlcmUgYSBwZWVyIGNvdWxkIHN0cmVhbSBpbmNvbXBsZXRlIGZyYWdtZW50IGNoYWlucyB0byB1bmJvdW5kZWRseSBncm93IGtlcm5lbCBtZW1vcnkuIFRoZSBmaXggaW50cm9kdWNlcyBhIHNpemUgbGltaXQgY2hlY2sgKGB0cnVlc2l6ZSBcdTAwM2UgMiAqIE1BWF9NU0dfU0laRWApIGZvciBpbmNvbXBsZXRlIHJlYXNzZW1ibGVkIG1lc3NhZ2VzIGFuZCBmcmVlcyB0aGUgc2tiIGlmIHRoZSBsaW1pdCBpcyBleGNlZWRlZC4gVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgdXNlci1zcGFjZSBjb3BpZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBidWcgYmVpbmcgZml4ZWQgaXMgcmVsYXRlZCB0byByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBtZW1vcnkgbGVha3MsIHdoaWNoIGFyZSBub3QgaW4gdGhlIHNjb3BlIG9mIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpLiBTdGFuZGFyZCBmdXp6aW5nIHdpdGggS0FTQU4gYW5kIGttZW1sZWFrIGlzIHN1ZmZpY2llbnQgZm9yIGRldGVjdGluZyBtZW1vcnkgY29ycnVwdGlvbiBvciBsZWFrIGlzc3VlcyBpbiB0aGlzIGNvbnRleHQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQxNDc5Y2FhYjQ5MmQxYWI4YTIzNTY4OGVmMzE4NjY5YmQ1MWFlYzkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxOCAxOTowNzowNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC90aXBjL2xpbmsuYyBiL25ldC90aXBjL2xpbmsuYwppbmRleCA0OWRmYzA5OGQ4OWIyLi5iZjYxYzlhYzRlYTIxIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9saW5rLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvbGluay5jCkBAIC0xMzE1LDcgJiM0MzsxMzE1LDIyIEBAIHN0YXRpYyBpbnQgdGlwY19saW5rX2lucHV0KHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmICpza2IsCiAJCWlmICh0aXBjX2J1Zl9hcHBlbmQocmVhc21fc2tiLCAmYW1wO3NrYikpIHsKIAkJCWwtJmd0O3N0YXRzLnJlY3ZfZnJhZ21lbnRlZCYjNDM7JiM0Mzs7CiAJCQl0aXBjX2RhdGFfaW5wdXQobCwgc2tiLCBpbnB1dHEpOwotCQl9IGVsc2UgaWYgKCEqcmVhc21fc2tiICZhbXA7JmFtcDsgIWxpbmtfaXNfYmNfcmN2bGluayhsKSkgewomIzQzOwkJfSBlbHNlIGlmICgqcmVhc21fc2tiKSB7CiYjNDM7CQkJLyogQSBsZWdpdGltYXRlIHJlYXNzZW1ibGVkIG1lc3NhZ2UgY2FuIG5ldmVyIGV4Y2VlZAomIzQzOwkJCSAqIE1BWF9NU0dfU0laRS4gTGltaXQgdGhlIG1lbW9yeSBvbmUgaW5jb21wbGV0ZQomIzQzOwkJCSAqIGZyYWdtZW50IGNoYWluIGNhbiBwaW4sIG90aGVyd2lzZSBhIHBlZXIgY2FuIGdyb3cKJiM0MzsJCQkgKiBrZXJuZWwgbWVtb3J5IHVuYm91bmRlZGx5IGJ5IHN0cmVhbWluZyBmcmFnbWVudAomIzQzOwkJCSAqIGNoYWlucyB0aGF0IG5ldmVyIGNvbXBsZXRlOiByZWNlaXZlZCB0cmFmZmljIGFsc28KJiM0MzsJCQkgKiByZXNldHMgdGhlIGxpbmsgc2lsZW5jZSBjb3VudGVyLCBzbyB0aGUgbGluayBuZXZlcgomIzQzOwkJCSAqIHRpbWVzIG91dCBhbmQgdGhlIGNoYWlucyBhcmUgbmV2ZXIgZnJlZWQuCiYjNDM7CQkJICovCiYjNDM7CQkJaWYgKCgqcmVhc21fc2tiKS0mZ3Q7dHJ1ZXNpemUgJmd0OyAyICogTUFYX01TR19TSVpFKSB7CiYjNDM7CQkJCXByX3dhcm5fcmF0ZWxpbWl0ZWQoJiMzNDtGcmFnbWVudCBjaGFpbiBsYXJnZXIgdGhhbiAldSBieXRlcywgZHJvcHBpbmdcbiYjMzQ7LAomIzQzOwkJCQkJCSAgICAyICogTUFYX01TR19TSVpFKTsKJiM0MzsJCQkJa2ZyZWVfc2tiKCpyZWFzbV9za2IpOwomIzQzOwkJCQkqcmVhc21fc2tiID0gTlVMTDsKJiM0MzsJCQl9CiYjNDM7CQl9IGVsc2UgaWYgKCFsaW5rX2lzX2JjX3JjdmxpbmsobCkpIHsKIAkJCXByX3dhcm5fcmF0ZWxpbWl0ZWQoJiMzNDtVbmFibGUgdG8gYnVpbGQgZnJhZ21lbnQgbGlzdFxuJiMzNDspOwogCQkJcmV0dXJuIHRpcGNfbGlua19mc21fZXZ0KGwsIExJTktfRkFJTFVSRV9FVlQpOwogCQl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjQ0CgkJCQkJCQlvdXRwdXQ6IDE3MQoJCQkJCQkJdGhvdWdodHM6IDU4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBUSVBDIEZyYWdtZW50IEhhbmRsaW5nIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW4gYG5ldC90aXBjL2xpbmsuY2AgYW5kIHRhcmdldHMgdGhlIGB0aXBjX2xpbmtfaW5wdXRgIGZ1bmN0aW9uLiBJdCYjMzk7cyBkZXNpZ25lZCB0byBhZGRyZXNzIGEgcG90ZW50aWFsIGRlbmlhbC1vZi1zZXJ2aWNlIHZ1bG5lcmFiaWxpdHkgcmVsYXRlZCB0byBmcmFnbWVudGVkIFRJUEMgbWVzc2FnZXMuIFRoZSBjb3JlIG9mIHRoZSBmaXggaXMgYSBzaXplIGNoZWNrIG9uIGByZWFzbV9za2JgIGFmdGVyIGB0aXBjX2J1Zl9hcHBlbmRgIHJldHVybnMgZmFsc2UuIEVzc2VudGlhbGx5LCBpZiB0aGUgZnJhZ21lbnQgY2hhaW4gaXNuJiMzOTt0IGNvbXBsZXRlIChvciB0aGVyZSYjMzk7cyBhbiBlcnJvciBpbiBhcHBlbmRpbmcpLCBhbmQgaWYgYHJlYXNtX3NrYmAgZXhpc3RzIGFuZCBpdHMgYHRydWVzaXplYCBleGNlZWRzIGAyICogTUFYX01TR19TSVpFYCwgdGhlbiBpdCYjMzk7cyBmcmVlZC4gVGhpcyBwcmV2ZW50cyBhbiBhdHRhY2tlciBmcm9tIHNlbmRpbmcgYSBmbG9vZCBvZiBmcmFnbWVudGVkIG1lc3NhZ2VzIHRoYXQgbmV2ZXIgZnVsbHkgcmVhc3NlbWJsZSwgdGhlcmVieSBjb25zdW1pbmcgdW5ib3VuZGVkIGFtb3VudHMgb2Yga2VybmVsIG1lbW9yeS4gQ3J1Y2lhbGx5LCB0aGUgY2hlY2sgYW5kIGZyZWUgb3BlcmF0aW9uIGlzIHBlcmZvcm1lZCBvbmx5IGlmIHRoZSBtYXhpbXVtIG1lc3NhZ2Ugc2l6ZSBpcyBleGNlZWRlZC4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhc3Nlc3MgdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBIb3dldmVyLCBhZnRlciBjYXJlZnVsIHJldmlldywgaXQgc2VlbXMgdGhlcmUmIzM5O3Mgbm8gcmlzayBpbiB0aGlzIGFyZWEuIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGl0JiMzOTtzIG5vdCBjb3B5aW5nIGRhdGEgdG8gdXNlciBzcGFjZSwgYW5kIGl0IGRvZXNuJiMzOTt0IGFwcGVhciB0byBiZSB1c2luZyBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoaXMgaXMgcHVyZWx5IGEgZGVmZW5zZSBhZ2FpbnN0IGEgbWVtb3J5IGxlYWsvRG9TIHNjZW5hcmlvLiBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1dCB0aGlzIGZpeCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHN1Y2ggcmlzay4gVGhlIHZ1bG5lcmFiaWxpdHkgYmVpbmcgYWRkcmVzc2VkIGlzIGEgbWVtb3J5IGV4aGF1c3Rpb24gaXNzdWUuIFN0YW5kYXJkIGZ1enppbmcsIG1lbW9yeSBsZWFrIGRldGVjdGlvbiB0b29scyAobGlrZSBga21lbWxlYWtgKSwgb3IgT09NIGRldGVjdG9ycyAqY291bGQqIGNhdGNoIHJlbGF0ZWQgaXNzdWVzLCBidXQgS01TQU4gaXMgbm90IHJlbGV2YW50IGhlcmUuCgpJIGRvdWJsZS1jaGVja2VkIHRoZSBjb2RlIHNuaXBwZXQgdG8gYmUgY2VydGFpbjogdGhlIGFkZGVkIGBpZmAgc3RhdGVtZW50IGNsZWFybHkgY2hlY2tzIHRoZSBzaXplIG9mIHRoZSByZWFzc2VtYmxlZCBTS0IgYW5kIGZyZWVzIGl0IGlmIHRvbyBsYXJnZSwgaW4gb3JkZXIgdG8gbGltaXQgdGhlIGFtb3VudCBvZiBtZW1vcnkgYSBzaW5nbGUgaW5jb21wbGV0ZSBmcmFnbWVudCBjaGFpbiBjYW4gb2NjdXB5LiBUaGlzIGlzIGEgdmVyeSB0YXJnZXRlZCBmaXggYWdhaW5zdCBhbiBvYnNlcnZlZCBiZWhhdmlvciB0aGF0IGlzIGxpa2VseSByZWxhdGVkIHRvIHRoZSBsaW5rJiMzOTtzIGtlZXAtYWxpdmUgbWVjaGFuaXNtcyBhbmQgdGhlIGxpbmsmIzM5O3MgYWJpbGl0eSB0byB0aW1lIG91dCBpbmNvbXBsZXRlIHRyYW5zbWlzc2lvbnMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHRvdWNoZWQsIG5vIHBvaW50ZXJzIGFyZSBsZWZ0IGRhbmdsaW5nIGFuZCBubyBtZW1vcnkgaXMgYWxsb2NhdGVkIHdpdGhpbiB0aGUgc2NvcGUgb2YgdGhpcyB2dWxuZXJhYmlsaXR5JiMzOTtzIG1pdGlnYXRpb24uIFRoZXJlZm9yZSwgdGhlIGBOZWVkc0tNU0FOYCBmbGFnIGlzIGRlZmluaXRlbHkgYGZhbHNlYC4gVGhpcyBwYXRjaCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBkZWZlbnNlIGFnYWluc3QgbWVtb3J5IGV4aGF1c3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE5OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIHBvdGVudGlhbCBtZW1vcnkgZXhoYXVzdGlvbiAoRG9TKSB2dWxuZXJhYmlsaXR5IGluIHRoZSBUSVBDIHN1YnN5c3RlbSB3aGVyZSBhIHBlZXIgY291bGQgc3RyZWFtIGluY29tcGxldGUgZnJhZ21lbnQgY2hhaW5zIHRvIHVuYm91bmRlZGx5IGdyb3cga2VybmVsIG1lbW9yeS4gVGhlIGZpeCBpbnRyb2R1Y2VzIGEgc2l6ZSBsaW1pdCBjaGVjayAoYHRydWVzaXplIFx1MDAzZSAyICogTUFYX01TR19TSVpFYCkgZm9yIGluY29tcGxldGUgcmVhc3NlbWJsZWQgbWVzc2FnZXMgYW5kIGZyZWVzIHRoZSBza2IgaWYgdGhlIGxpbWl0IGlzIGV4Y2VlZGVkLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciB1c2VyLXNwYWNlIGNvcGllcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGJ1ZyBiZWluZyBmaXhlZCBpcyByZWxhdGVkIHRvIHJlc291cmNlIG1hbmFnZW1lbnQgYW5kIG1lbW9yeSBsZWFrcywgd2hpY2ggYXJlIG5vdCBpbiB0aGUgc2NvcGUgb2YgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikuIFN0YW5kYXJkIGZ1enppbmcgd2l0aCBLQVNBTiBhbmQga21lbWxlYWsgaXMgc3VmZmljaWVudCBmb3IgZGV0ZWN0aW5nIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxlYWsgaXNzdWVzIGluIHRoaXMgY29udGV4dC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIHBvdGVudGlhbCBtZW1vcnkgZXhoYXVzdGlvbiAoRG9TKSB2dWxuZXJhYmlsaXR5IGluIHRoZSBUSVBDIHN1YnN5c3RlbSB3aGVyZSBhIHBlZXIgY291bGQgc3RyZWFtIGluY29tcGxldGUgZnJhZ21lbnQgY2hhaW5zIHRvIHVuYm91bmRlZGx5IGdyb3cga2VybmVsIG1lbW9yeS4gVGhlIGZpeCBpbnRyb2R1Y2VzIGEgc2l6ZSBsaW1pdCBjaGVjayAoYHRydWVzaXplIFx1MDAzZSAyICogTUFYX01TR19TSVpFYCkgZm9yIGluY29tcGxldGUgcmVhc3NlbWJsZWQgbWVzc2FnZXMgYW5kIGZyZWVzIHRoZSBza2IgaWYgdGhlIGxpbWl0IGlzIGV4Y2VlZGVkLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciB1c2VyLXNwYWNlIGNvcGllcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGJ1ZyBiZWluZyBmaXhlZCBpcyByZWxhdGVkIHRvIHJlc291cmNlIG1hbmFnZW1lbnQgYW5kIG1lbW9yeSBsZWFrcywgd2hpY2ggYXJlIG5vdCBpbiB0aGUgc2NvcGUgb2YgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikuIFN0YW5kYXJkIGZ1enppbmcgd2l0aCBLQVNBTiBhbmQga21lbWxlYWsgaXMgc3VmZmljaWVudCBmb3IgZGV0ZWN0aW5nIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxlYWsgaXNzdWVzIGluIHRoaXMgY29udGV4dC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMThUMTk6MDc6MDguMDExMjg1MjgxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA1NTM5ODM5OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVElQQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRpcGNfbGlua19yY3ZcIixcbiAgICBcInRpcGNfcmN2XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgbWVtb3J5IGV4aGF1c3Rpb24gKERvUykgdnVsbmVyYWJpbGl0eSBpbiB0aGUgVElQQyBzdWJzeXN0ZW0gd2hlcmUgYSBwZWVyIGNvdWxkIHN0cmVhbSBpbmNvbXBsZXRlIGZyYWdtZW50IGNoYWlucyB0byB1bmJvdW5kZWRseSBncm93IGtlcm5lbCBtZW1vcnkuIFRoZSBmaXggaW50cm9kdWNlcyBhIHNpemUgbGltaXQgY2hlY2sgKGB0cnVlc2l6ZSBcXHUwMDNlIDIgKiBNQVhfTVNHX1NJWkVgKSBmb3IgaW5jb21wbGV0ZSByZWFzc2VtYmxlZCBtZXNzYWdlcyBhbmQgZnJlZXMgdGhlIHNrYiBpZiB0aGUgbGltaXQgaXMgZXhjZWVkZWQuIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIHVzZXItc3BhY2UgY29waWVzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgYnVnIGJlaW5nIGZpeGVkIGlzIHJlbGF0ZWQgdG8gcmVzb3VyY2UgbWFuYWdlbWVudCBhbmQgbWVtb3J5IGxlYWtzLCB3aGljaCBhcmUgbm90IGluIHRoZSBzY29wZSBvZiBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKS4gU3RhbmRhcmQgZnV6emluZyB3aXRoIEtBU0FOIGFuZCBrbWVtbGVhayBpcyBzdWZmaWNpZW50IGZvciBkZXRlY3RpbmcgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbGVhayBpc3N1ZXMgaW4gdGhpcyBjb250ZXh0LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVElQQyBmcmFnbWVudCByZWFzc2VtYmx5IGxvZ2ljIHRvIHByZXZlbnQgdW5ib3VuZGVkIG1lbW9yeSBncm93dGguIEl0IGFkZHMgYSBjaGVjayB0byBkcm9wIGluY29tcGxldGUgZnJhZ21lbnQgY2hhaW5zIGlmIHRoZWlyIHNpemUgZXhjZWVkcyBgMiAqIE1BWF9NU0dfU0laRWAuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIG5vcm1hbCBUSVBDIHBhY2tldCBwcm9jZXNzaW5nIHBhdGhzLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCBgdGlwY19yY3ZgIGFuZCBgdGlwY19saW5rX3JjdmAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE5OjA3OjA4LjAxMTI5MTQ2MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU5NzY1NzQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDE0NzljYWFiNDkyZDFhYjhhMjM1Njg4ZWYzMTg2NjliZDUxYWVjOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAxOCAxOTowNzowNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9saW5rLmMgYi9uZXQvdGlwYy9saW5rLmNcXG5pbmRleCA0OWRmYzA5OGQ4OWIyLi5iZjYxYzlhYzRlYTIxIDEwMDY0NFxcbi0tLSBhL25ldC90aXBjL2xpbmsuY1xcbisrKyBiL25ldC90aXBjL2xpbmsuY1xcbkBAIC0xMzE1LDcgKzEzMTUsMjIgQEAgc3RhdGljIGludCB0aXBjX2xpbmtfaW5wdXQoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0aWYgKHRpcGNfYnVmX2FwcGVuZChyZWFzbV9za2IsIFxcdTAwMjZza2IpKSB7XFxuIFxcdFxcdFxcdGwtXFx1MDAzZXN0YXRzLnJlY3ZfZnJhZ21lbnRlZCsrO1xcbiBcXHRcXHRcXHR0aXBjX2RhdGFfaW5wdXQobCwgc2tiLCBpbnB1dHEpO1xcbi1cXHRcXHR9IGVsc2UgaWYgKCEqcmVhc21fc2tiIFxcdTAwMjZcXHUwMDI2ICFsaW5rX2lzX2JjX3JjdmxpbmsobCkpIHtcXG4rXFx0XFx0fSBlbHNlIGlmICgqcmVhc21fc2tiKSB7XFxuK1xcdFxcdFxcdC8qIEEgbGVnaXRpbWF0ZSByZWFzc2VtYmxlZCBtZXNzYWdlIGNhbiBuZXZlciBleGNlZWRcXG4rXFx0XFx0XFx0ICogTUFYX01TR19TSVpFLiBMaW1pdCB0aGUgbWVtb3J5IG9uZSBpbmNvbXBsZXRlXFxuK1xcdFxcdFxcdCAqIGZyYWdtZW50IGNoYWluIGNhbiBwaW4sIG90aGVyd2lzZSBhIHBlZXIgY2FuIGdyb3dcXG4rXFx0XFx0XFx0ICoga2VybmVsIG1lbW9yeSB1bmJvdW5kZWRseSBieSBzdHJlYW1pbmcgZnJhZ21lbnRcXG4rXFx0XFx0XFx0ICogY2hhaW5zIHRoYXQgbmV2ZXIgY29tcGxldGU6IHJlY2VpdmVkIHRyYWZmaWMgYWxzb1xcbitcXHRcXHRcXHQgKiByZXNldHMgdGhlIGxpbmsgc2lsZW5jZSBjb3VudGVyLCBzbyB0aGUgbGluayBuZXZlclxcbitcXHRcXHRcXHQgKiB0aW1lcyBvdXQgYW5kIHRoZSBjaGFpbnMgYXJlIG5ldmVyIGZyZWVkLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0aWYgKCgqcmVhc21fc2tiKS1cXHUwMDNldHJ1ZXNpemUgXFx1MDAzZSAyICogTUFYX01TR19TSVpFKSB7XFxuK1xcdFxcdFxcdFxcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXFxcIkZyYWdtZW50IGNoYWluIGxhcmdlciB0aGFuICV1IGJ5dGVzLCBkcm9wcGluZ1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIDIgKiBNQVhfTVNHX1NJWkUpO1xcbitcXHRcXHRcXHRcXHRrZnJlZV9za2IoKnJlYXNtX3NrYik7XFxuK1xcdFxcdFxcdFxcdCpyZWFzbV9za2IgPSBOVUxMO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH0gZWxzZSBpZiAoIWxpbmtfaXNfYmNfcmN2bGluayhsKSkge1xcbiBcXHRcXHRcXHRwcl93YXJuX3JhdGVsaW1pdGVkKFxcXCJVbmFibGUgdG8gYnVpbGQgZnJhZ21lbnQgbGlzdFxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdHJldHVybiB0aXBjX2xpbmtfZnNtX2V2dChsLCBMSU5LX0ZBSUxVUkVfRVZUKTtcXG4gXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTowNzowOC41NzE4ODEwNTRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozOTIxNDEyMzczOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUSVBDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGlwY19saW5rX3JjdlwiLFxuICAgIFwidGlwY19yY3ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFRJUEMgZnJhZ21lbnQgcmVhc3NlbWJseSBsb2dpYyB0byBwcmV2ZW50IHVuYm91bmRlZCBtZW1vcnkgZ3Jvd3RoLiBJdCBhZGRzIGEgY2hlY2sgdG8gZHJvcCBpbmNvbXBsZXRlIGZyYWdtZW50IGNoYWlucyBpZiB0aGVpciBzaXplIGV4Y2VlZHMgYDIgKiBNQVhfTVNHX1NJWkVgLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBub3JtYWwgVElQQyBwYWNrZXQgcHJvY2Vzc2luZyBwYXRocywgc3BlY2lmaWNhbGx5IHRocm91Z2ggYHRpcGNfcmN2YCBhbmQgYHRpcGNfbGlua19yY3ZgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkMTQ3OWNhYWI0OTJkMWFiOGEyMzU2ODhlZjMxODY2OWJkNTFhZWM5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMTk6MDc6MDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9saW5rLmMgYi9uZXQvdGlwYy9saW5rLmNcbmluZGV4IDQ5ZGZjMDk4ZDg5YjIuLmJmNjFjOWFjNGVhMjEgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9saW5rLmNcbisrKyBiL25ldC90aXBjL2xpbmsuY1xuQEAgLTEzMTUsNyArMTMxNSwyMiBAQCBzdGF0aWMgaW50IHRpcGNfbGlua19pbnB1dChzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRpZiAodGlwY19idWZfYXBwZW5kKHJlYXNtX3NrYiwgXHUwMDI2c2tiKSkge1xuIFx0XHRcdGwtXHUwMDNlc3RhdHMucmVjdl9mcmFnbWVudGVkKys7XG4gXHRcdFx0dGlwY19kYXRhX2lucHV0KGwsIHNrYiwgaW5wdXRxKTtcbi1cdFx0fSBlbHNlIGlmICghKnJlYXNtX3NrYiBcdTAwMjZcdTAwMjYgIWxpbmtfaXNfYmNfcmN2bGluayhsKSkge1xuK1x0XHR9IGVsc2UgaWYgKCpyZWFzbV9za2IpIHtcbitcdFx0XHQvKiBBIGxlZ2l0aW1hdGUgcmVhc3NlbWJsZWQgbWVzc2FnZSBjYW4gbmV2ZXIgZXhjZWVkXG4rXHRcdFx0ICogTUFYX01TR19TSVpFLiBMaW1pdCB0aGUgbWVtb3J5IG9uZSBpbmNvbXBsZXRlXG4rXHRcdFx0ICogZnJhZ21lbnQgY2hhaW4gY2FuIHBpbiwgb3RoZXJ3aXNlIGEgcGVlciBjYW4gZ3Jvd1xuK1x0XHRcdCAqIGtlcm5lbCBtZW1vcnkgdW5ib3VuZGVkbHkgYnkgc3RyZWFtaW5nIGZyYWdtZW50XG4rXHRcdFx0ICogY2hhaW5zIHRoYXQgbmV2ZXIgY29tcGxldGU6IHJlY2VpdmVkIHRyYWZmaWMgYWxzb1xuK1x0XHRcdCAqIHJlc2V0cyB0aGUgbGluayBzaWxlbmNlIGNvdW50ZXIsIHNvIHRoZSBsaW5rIG5ldmVyXG4rXHRcdFx0ICogdGltZXMgb3V0IGFuZCB0aGUgY2hhaW5zIGFyZSBuZXZlciBmcmVlZC5cbitcdFx0XHQgKi9cbitcdFx0XHRpZiAoKCpyZWFzbV9za2IpLVx1MDAzZXRydWVzaXplIFx1MDAzZSAyICogTUFYX01TR19TSVpFKSB7XG4rXHRcdFx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwiRnJhZ21lbnQgY2hhaW4gbGFyZ2VyIHRoYW4gJXUgYnl0ZXMsIGRyb3BwaW5nXFxuXCIsXG4rXHRcdFx0XHRcdFx0ICAgIDIgKiBNQVhfTVNHX1NJWkUpO1xuK1x0XHRcdFx0a2ZyZWVfc2tiKCpyZWFzbV9za2IpO1xuK1x0XHRcdFx0KnJlYXNtX3NrYiA9IE5VTEw7XG4rXHRcdFx0fVxuK1x0XHR9IGVsc2UgaWYgKCFsaW5rX2lzX2JjX3JjdmxpbmsobCkpIHtcbiBcdFx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwiVW5hYmxlIHRvIGJ1aWxkIGZyYWdtZW50IGxpc3RcXG5cIik7XG4gXHRcdFx0cmV0dXJuIHRpcGNfbGlua19mc21fZXZ0KGwsIExJTktfRkFJTFVSRV9FVlQpO1xuIFx0XHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTowNzowOC41NzE4ODI1ODVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Njk4NTM2NDExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVElQQyBMaW5rIElucHV0IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC90aXBjL2xpbmsuY2AsIHNwZWNpZmljYWxseSB0aGUgYHRpcGNfbGlua19pbnB1dGAgZnVuY3Rpb24uIEl0IHNlZW1zIHRoZXkndmUgYWRkZWQgYSBjcnVjaWFsIGNoZWNrIHdpdGhpbiB0aGUgZnJhZ21lbnQgcmVhc3NlbWJseSBwcm9jZXNzLiBUaGUgY29yZSBvZiBpdCBpbnZvbHZlcyBwcmV2ZW50aW5nIGV4Y2Vzc2l2ZSBtZW1vcnkgdXNhZ2Ugd2hlbiBkZWFsaW5nIHdpdGggaW5jb21wbGV0ZSBmcmFnbWVudCBjaGFpbnMsIHdoaWNoIGlzIGEgY2xhc3NpYyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eS5cblxuVGhlIHBhdGNoJ3MgbG9naWMgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogaXQncyBhZGRpbmcgYW4gZXhwbGljaXQgY2hlY2sgZm9yIGAoKnJlYXNtX3NrYiktXHUwMDNldHJ1ZXNpemUgXHUwMDNlIDIgKiBNQVhfTVNHX1NJWkVgIHdpdGhpbiB0aGF0IGB0aXBjX2xpbmtfaW5wdXRgIGZ1bmN0aW9uLiBJZiB0aGUgcmVhc3NlbWJsZWQgZnJhZ21lbnQgY2hhaW4gZ2V0cyB0b28gbGFyZ2Ug4oCTIGV4Y2VlZGluZyB0d2ljZSB0aGUgbWF4aW11bSBtZXNzYWdlIHNpemUg4oCTIGl0J3MgZ29pbmcgdG8gZHJvcCB0aGUgY2hhaW4gZW50aXJlbHksIHNldHRpbmcgYCpyZWFzbV9za2JgIHRvIGBOVUxMYC4gVGhpcyBpcyBhIHNvbGlkLCBmdW5jdGlvbmFsIGZpeCB0byBwcmV2ZW50IHVuYm91bmRlZCBtZW1vcnkgZ3Jvd3RoLCBlc3NlbnRpYWxseSBhIERvUyBwcm90ZWN0aW9uIGluIHRoZSBtYWtpbmcsIGFuZCBpdCdzIGdvb2QgdG8gc2VlIHByb2FjdGl2ZSBtZWFzdXJlcyBsaWtlIHRoaXMuXG5cbkknbGwgcXVpY2tseSBwdWxsIHVwIGBuZXQvdGlwYy9saW5rLmNgIGFuZCB0YWtlIGEgbG9vayBhdCBgdGlwY19saW5rX2lucHV0YCBkaXJlY3RseSB0byB2ZXJpZnkgdGhlIGltcGxlbWVudGF0aW9uLiBUaGVuIEknbGwgbG9vayBmb3IgYHRpcGNfbGlua19pbnB1dGAgYW5kIGB0aXBjX2J1Zl9hcHBlbmRgIHRvIGdldCBhIGJldHRlciBzZW5zZSBvZiBob3cgdGhvc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQgYW5kIHdoZXJlIHRoZSBwYXRjaCBpcyBvcGVyYXRpbmcgaW4gdGhlIHdpZGVyIFRJUEMgY29udGV4dC4gSXQncyBhbHdheXMgaW1wb3J0YW50IHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgd2hlbiBldmFsdWF0aW5nIGEgY2hhbmdlIGxpa2UgdGhpcy4gVGhlIGZhY3QgdGhhdCBgQ09ORklHX1RJUENgIGlzIGludm9sdmVkIGhlbHBzIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgd2lkZXIgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI0NywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE5OjA3OjE0LjI3MDQyMzAyNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzIwNDkyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aXBjX2xpbmtfaW5wdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3RpcGMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL2xpbmsuYz0zMzg9dW5zaWduZWQgbG9uZyB0aXBjX2xpbmtfdG9sZXJhbmNlKHN0cnVjdCB0aXBjX2xpbmsgKmwpXFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtMzQyLVxcbm5ldC90aXBjL2xpbmsuYzozNDM6c3RydWN0IHNrX2J1ZmZfaGVhZCAqdGlwY19saW5rX2lucHV0cShzdHJ1Y3QgdGlwY19saW5rICpsKVxcbm5ldC90aXBjL2xpbmsuYy0zNDQte1xcbi0tXFxubmV0L3RpcGMvbGluay5jPTEyNDQ9c3RhdGljIGJvb2wgdGlwY19kYXRhX2lucHV0KHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtMTI5MC1cXG5uZXQvdGlwYy9saW5rLmM6MTI5MTovKiB0aXBjX2xpbmtfaW5wdXQgLSBwcm9jZXNzIHBhY2tldCB0aGF0IGhhcyBwYXNzZWQgbGluayBwcm90b2NvbCBjaGVja1xcbm5ldC90aXBjL2xpbmsuYy0xMjkyLSAqXFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtMTI5NC0gKi9cXG5uZXQvdGlwYy9saW5rLmM6MTI5NTpzdGF0aWMgaW50IHRpcGNfbGlua19pbnB1dChzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC90aXBjL2xpbmsuYy0xMjk2LVxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSxcXG4tLVxcbm5ldC90aXBjL2xpbmsuYz0xMzU1PXN0YXRpYyBpbnQgdGlwY19saW5rX3RubF9yY3Yoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy0xNDExLVxcdFxcdGlmICghdGlwY19kYXRhX2lucHV0KGwsIGlza2IsIGlucHV0cSkpXFxubmV0L3RpcGMvbGluay5jOjE0MTI6XFx0XFx0XFx0cmMgfD0gdGlwY19saW5rX2lucHV0KGwsIGlza2IsIGlucHV0cSwgcmVhc21fc2tiKTtcXG5uZXQvdGlwYy9saW5rLmMtMTQxMy1cXHRcXHRpZiAodW5saWtlbHkocmMpKVxcbi0tXFxubmV0L3RpcGMvbGluay5jPTE3Nzc9aW50IHRpcGNfbGlua19yY3Yoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy0xODI5LVxcdFxcdGVsc2UgaWYgKCF0aXBjX2RhdGFfaW5wdXQobCwgc2tiLCBsLVxcdTAwM2VpbnB1dHEpKVxcbm5ldC90aXBjL2xpbmsuYzoxODMwOlxcdFxcdFxcdHJjIHw9IHRpcGNfbGlua19pbnB1dChsLCBza2IsIGwtXFx1MDAzZWlucHV0cSwgXFx1MDAyNmwtXFx1MDAzZXJlYXNtX2J1Zik7XFxubmV0L3RpcGMvbGluay5jLTE4MzEtXFx0XFx0aWYgKHVubGlrZWx5KCsrbC1cXHUwMDNlcmN2X3VuYWNrZWQgXFx1MDAzZT0gVElQQ19NSU5fTElOS19XSU4pKVxcbi0tXFxubmV0L3RpcGMvbGluay5oPTEwNz1pbnQgdGlwY19saW5rX3htaXQoc3RydWN0IHRpcGNfbGluayAqbGluaywgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcXG5uZXQvdGlwYy9saW5rLmgtMTA4LVxcdFxcdCAgIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKTtcXG5uZXQvdGlwYy9saW5rLmg6MTA5OnN0cnVjdCBza19idWZmX2hlYWQgKnRpcGNfbGlua19pbnB1dHEoc3RydWN0IHRpcGNfbGluayAqbCk7XFxubmV0L3RpcGMvbGluay5oLTExMC11MTYgdGlwY19saW5rX3Jjdl9ueHQoc3RydWN0IHRpcGNfbGluayAqbCk7XFxuLS1cXG5uZXQvdGlwYy9ub2RlLmM9MTkzOD1zdGF0aWMgYm9vbCB0aXBjX25vZGVfY2hlY2tfc3RhdGUoc3RydWN0IHRpcGNfbm9kZSAqbiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC90aXBjL25vZGUuYy0yMDA4LVxcdFxcdFxcdFxcdFxcdFxcdCAgXFxcIm5vZGUgbGluayBkb3duIFxcdTAwM2MtIGZhaWxvdmVyIVxcXCIpO1xcbm5ldC90aXBjL25vZGUuYzoyMDA5OlxcdFxcdFxcdHRpcGNfc2tiX3F1ZXVlX3NwbGljZV90YWlsX2luaXQodGlwY19saW5rX2lucHV0cShwbCksXFxubmV0L3RpcGMvbm9kZS5jOjIwMTA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0dGlwY19saW5rX2lucHV0cShsKSk7XFxubmV0L3RpcGMvbm9kZS5jLTIwMTEtXFx0XFx0fVxcbi0tXFxubmV0L3RpcGMvbm9kZS5jLTIwNjMtXFx0XFx0fVxcbm5ldC90aXBjL25vZGUuYzoyMDY0OlxcdFxcdGlucHV0cV9sZW4gPSBza2JfcXVldWVfbGVuKHRpcGNfbGlua19pbnB1dHEocGwpKTtcXG5uZXQvdGlwYy9ub2RlLmMtMjA2NS1cXHRcXHRkbHZfbnh0ID0gdGlwY19saW5rX3Jjdl9ueHQocGwpIC0gaW5wdXRxX2xlbjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTk6MDc6MTQuMzIzNjMzODA0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE0Mjc0NTQ0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRJUEMgTGluayBJbnB1dCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIGB0aXBjX2xpbmtfaW5wdXRgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IGltbWVkaWF0ZWx5IG5hcnJvd3MgZG93biB0aGUgc2NvcGUgb2Ygd2hlcmUgSSBuZWVkIHRvIGxvb2sgZm9yIGl0cyB1c2FnZS4gSXQncyBjYWxsZWQgZnJvbSBgdGlwY19saW5rX3RubF9yY3ZgIGFuZCBgdGlwY19saW5rX3JjdmAsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBmdW5jdGlvbiBuYW1lLiBOb3csIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgaW1wbGljYXRpb25zIG9mIGB0aXBjX2xpbmtfaW5wdXRgIGFuZCBpdHMgcGxhY2UgaW4gdGhlIHN5c3RlbSwgSSBuZWVkIHRvIGtub3cgdGhlIGNhbGxpbmcgY29udGV4dCBvZiBgdGlwY19saW5rX3JjdmAuIExldCdzIHRyYWNlIGJhY2sgYW5kIHNlZSB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGludm9rZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgdG8gZ3Jhc3AgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgY2hhbmdlcyBvciBpc3N1ZXMgd2l0aGluIGB0aXBjX2xpbmtfaW5wdXRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzg4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTk6MDc6MTcuNDY2MzgyNjlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkwNDk5NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGlwY19saW5rX3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGlwYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3RpcGMvYmNhc3QuYz00MzY9aW50IHRpcGNfYmNhc3RfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC90aXBjL2JjYXN0LmMtNDUzLVxcdGVsc2VcXG5uZXQvdGlwYy9iY2FzdC5jOjQ1NDpcXHRcXHRyYyA9IHRpcGNfbGlua19yY3YobCwgc2tiLCBOVUxMKTtcXG5uZXQvdGlwYy9iY2FzdC5jLTQ1NS1cXHR0aXBjX2JjYXN0X3VubG9jayhuZXQpO1xcbi0tXFxubmV0L3RpcGMvbGluay5jPTQyMz1pbnQgdGlwY19saW5rX21zcyhzdHJ1Y3QgdGlwY19saW5rICpsKVxcbi0tXFxubmV0L3RpcGMvbGluay5jLTQzMS1cXG5uZXQvdGlwYy9saW5rLmM6NDMyOnUxNiB0aXBjX2xpbmtfcmN2X254dChzdHJ1Y3QgdGlwY19saW5rICpsKVxcbm5ldC90aXBjL2xpbmsuYy00MzMte1xcbi0tXFxubmV0L3RpcGMvbGluay5jPTE3NDc9c3RhdGljIGludCB0aXBjX2xpbmtfYnVpbGRfbmFja19tc2coc3RydWN0IHRpcGNfbGluayAqbCxcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy0xNzcxLVxcbm5ldC90aXBjL2xpbmsuYzoxNzcyOi8qIHRpcGNfbGlua19yY3YgLSBwcm9jZXNzIFRJUEMgcGFja2V0cy9tZXNzYWdlcyBhcnJpdmluZyBmcm9tIG9mZi1ub2RlXFxubmV0L3RpcGMvbGluay5jLTE3NzMtICogQGw6IHRoZSBsaW5rIHRoYXQgc2hvdWxkIGhhbmRsZSB0aGUgbWVzc2FnZVxcbi0tXFxubmV0L3RpcGMvbGluay5jLTE3NzYtICovXFxubmV0L3RpcGMvbGluay5jOjE3Nzc6aW50IHRpcGNfbGlua19yY3Yoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvdGlwYy9saW5rLmMtMTc3OC1cXHRcXHQgIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKVxcbi0tXFxubmV0L3RpcGMvbGluay5oPTEwOT1zdHJ1Y3Qgc2tfYnVmZl9oZWFkICp0aXBjX2xpbmtfaW5wdXRxKHN0cnVjdCB0aXBjX2xpbmsgKmwpO1xcbm5ldC90aXBjL2xpbmsuaDoxMTA6dTE2IHRpcGNfbGlua19yY3Zfbnh0KHN0cnVjdCB0aXBjX2xpbmsgKmwpO1xcbm5ldC90aXBjL2xpbmsuaC0xMTEtdTE2IHRpcGNfbGlua19hY2tlZChzdHJ1Y3QgdGlwY19saW5rICpsKTtcXG4tLVxcbm5ldC90aXBjL2xpbmsuaD0xMzE9aW50IHRpcGNfbGlua190aW1lb3V0KHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKTtcXG5uZXQvdGlwYy9saW5rLmg6MTMyOmludCB0aXBjX2xpbmtfcmN2KHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3RpcGMvbGluay5oLTEzMy1cXHRcXHQgIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKTtcXG4tLVxcbm5ldC90aXBjL25vZGUuYz05NTg9c3RhdGljIHZvaWQgdGlwY19ub2RlX2xpbmtfZmFpbG92ZXIoc3RydWN0IHRpcGNfbm9kZSAqbiwgc3RydWN0IHRpcGNfbGluayAqbCxcXG4tLVxcbm5ldC90aXBjL25vZGUuYy05NzItXFxubmV0L3RpcGMvbm9kZS5jOjk3MzpcXHRuLVxcdTAwM2VzeW5jX3BvaW50ID0gdGlwY19saW5rX3Jjdl9ueHQodG5sKSArIChVMTZfTUFYIC8gMiAtIDEpO1xcbm5ldC90aXBjL25vZGUuYy05NzQtXFx0dGlwY19saW5rX2ZhaWxvdmVyX3ByZXBhcmUobCwgdG5sLCB4bWl0cSk7XFxuLS1cXG5uZXQvdGlwYy9ub2RlLmM9OTg4PXN0YXRpYyB2b2lkIF9fdGlwY19ub2RlX2xpbmtfZG93bihzdHJ1Y3QgdGlwY19ub2RlICpuLCBpbnQgKmJlYXJlcl9pZCxcXG4tLVxcbm5ldC90aXBjL25vZGUuYy0xMDUxLVxcdHRpcGNfbm9kZV9mc21fZXZ0KG4sIE5PREVfU1lOQ0hfRU5EX0VWVCk7XFxubmV0L3RpcGMvbm9kZS5jOjEwNTI6XFx0bi1cXHUwMDNlc3luY19wb2ludCA9IHRpcGNfbGlua19yY3Zfbnh0KHRubCkgKyAoVTE2X01BWCAvIDIgLSAxKTtcXG5uZXQvdGlwYy9ub2RlLmMtMTA1My1cXHR0aXBjX2xpbmtfdG5sX3ByZXBhcmUobCwgdG5sLCBGQUlMT1ZFUl9NU0csIHhtaXRxKTtcXG4tLVxcbm5ldC90aXBjL25vZGUuYz0xOTM4PXN0YXRpYyBib29sIHRpcGNfbm9kZV9jaGVja19zdGF0ZShzdHJ1Y3QgdGlwY19ub2RlICpuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3RpcGMvbm9kZS5jLTE5NTgtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbm5ldC90aXBjL25vZGUuYzoxOTU5OlxcdHJjdl9ueHQgPSB0aXBjX2xpbmtfcmN2X254dChsKTtcXG5uZXQvdGlwYy9ub2RlLmMtMTk2MC1cXG4tLVxcbm5ldC90aXBjL25vZGUuYy0yMDY0LVxcdFxcdGlucHV0cV9sZW4gPSBza2JfcXVldWVfbGVuKHRpcGNfbGlua19pbnB1dHEocGwpKTtcXG5uZXQvdGlwYy9ub2RlLmM6MjA2NTpcXHRcXHRkbHZfbnh0ID0gdGlwY19saW5rX3Jjdl9ueHQocGwpIC0gaW5wdXRxX2xlbjtcXG5uZXQvdGlwYy9ub2RlLmMtMjA2Ni1cXHRcXHRpZiAobW9yZShkbHZfbnh0LCBuLVxcdTAwM2VzeW5jX3BvaW50KSkge1xcbi0tXFxubmV0L3RpcGMvbm9kZS5jPTIwOTE9dm9pZCB0aXBjX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0aXBjX2JlYXJlciAqYilcXG4tLVxcbm5ldC90aXBjL25vZGUuYy0yMTcxLVxcdFxcdGlmIChsZS1cXHUwMDNlbGluaykge1xcbm5ldC90aXBjL25vZGUuYzoyMTcyOlxcdFxcdFxcdHJjID0gdGlwY19saW5rX3JjdihsZS1cXHUwMDNlbGluaywgc2tiLCBcXHUwMDI2eG1pdHEpO1xcbm5ldC90aXBjL25vZGUuYy0yMTczLVxcdFxcdFxcdHNrYiA9IE5VTEw7XFxuLS1cXG5uZXQvdGlwYy9ub2RlLmMtMjE4NS1cXHRcXHRcXHRpZiAobGUtXFx1MDAzZWxpbmspIHtcXG5uZXQvdGlwYy9ub2RlLmM6MjE4NjpcXHRcXHRcXHRcXHRyYyA9IHRpcGNfbGlua19yY3YobGUtXFx1MDAzZWxpbmssIHNrYiwgXFx1MDAyNnhtaXRxKTtcXG5uZXQvdGlwYy9ub2RlLmMtMjE4Ny1cXHRcXHRcXHRcXHRza2IgPSBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTowNzoxNy41MTU0Mzg1NDlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTkwMTYxNjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgdGhlIFRJUEMgUmVjZWl2ZSBQYXRoKipcblxuQWxyaWdodCwgc28gYHRpcGNfcmN2YCBpcyB0aGUgY2VudHJhbCBmdW5jdGlvbiBmb3IgcmVjZWl2aW5nIFRJUEMgcGFja2V0cy4gSWYgSSdtIGdvaW5nIHRvIHVuZGVyc3RhbmQgdGhlIHdob2xlIHJlY2VpdmUgcHJvY2VzcywgSSBuZWVkIHRvIGtub3cgd2hlcmUgdGhpcyB0aGluZyBpcyBhY3R1YWxseSBjYWxsZWQuIExldCdzIGZpcmUgdXAgdGhlIHNlYXJjaCB0b29scyBhbmQgc2VlIHdoZXJlIHRoaXMga2V5IGZ1bmN0aW9uIGlzIGludm9rZWQgd2l0aGluIHRoZSBrZXJuZWwuIFRpbWUgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDM2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTk6MDc6MjAuNzA1NjAyNzc0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMDYzMzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRpcGNfcmN2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90aXBjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9iZWFyZXIuYz02NTc9c3RhdGljIGludCB0aXBjX2wyX3Jjdl9tc2coc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC90aXBjL2JlYXJlci5jLTY2OC1cXHRcXHRUSVBDX1NLQl9DQihza2IpLVxcdTAwM2VmbGFncyA9IDA7XFxubmV0L3RpcGMvYmVhcmVyLmM6NjY5OlxcdFxcdHRpcGNfcmN2KGRldl9uZXQoYi1cXHUwMDNlcHQuZGV2KSwgc2tiLCBiKTtcXG5uZXQvdGlwYy9iZWFyZXIuYy02NzAtXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5uZXQvdGlwYy9iZWFyZXIuaD0xNzk9c3RydWN0IHRpcGNfYmVhcmVyX25hbWVzIHtcXG4tLVxcbm5ldC90aXBjL2JlYXJlci5oLTE4Ny1cXG5uZXQvdGlwYy9iZWFyZXIuaDoxODg6dm9pZCB0aXBjX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0aXBjX2JlYXJlciAqYik7XFxubmV0L3RpcGMvYmVhcmVyLmgtMTg5LVxcbi0tXFxubmV0L3RpcGMvY3J5cHRvLmM9OTY1PXN0YXRpYyB2b2lkIHRpcGNfYWVhZF9kZWNyeXB0X2RvbmUodm9pZCAqZGF0YSwgaW50IGVycilcXG4tLVxcbm5ldC90aXBjL2NyeXB0by5jLTk4OC1cXHRcXHRpZiAobGlrZWx5KHRlc3RfYml0KDAsIFxcdTAwMjZiLVxcdTAwM2V1cCkpKVxcbm5ldC90aXBjL2NyeXB0by5jOjk4OTpcXHRcXHRcXHR0aXBjX3JjdihuZXQsIHNrYiwgYik7XFxubmV0L3RpcGMvY3J5cHRvLmMtOTkwLVxcdFxcdGVsc2VcXG4tLVxcbm5ldC90aXBjL2NyeXB0by5jPTE2ODk9aW50IHRpcGNfY3J5cHRvX3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqKnNrYixcXG4tLVxcbm5ldC90aXBjL2NyeXB0by5jLTE4MDAtICogYXMgdGhlIGNhbGxiYWNrLCB0aGUgZW5jcnlwdGlvbiBoZWFkZXIgYW5kIGF1dGggdGFnIHdpbGwgYmUgdHJpbW1lZCBvdXRcXG5uZXQvdGlwYy9jcnlwdG8uYzoxODAxOiAqIGJlZm9yZSBmb3J3YXJkaW5nIHRvIHRpcGNfcmN2KCkgdmlhIHRoZSB0aXBjX2NyeXB0b19yY3ZfY29tcGxldGUoKS5cXG5uZXQvdGlwYy9jcnlwdG8uYy0xODAyLSAqIE90aGVyd2lzZSwgdGhlIHNrYiB3aWxsIGJlIGZyZWVkIVxcbi0tXFxubmV0L3RpcGMvY3J5cHRvLmM9MTg5Nz1zdGF0aWMgdm9pZCB0aXBjX2NyeXB0b19yY3ZfY29tcGxldGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19hZWFkICphZWFkLFxcbi0tXFxubmV0L3RpcGMvY3J5cHRvLmMtMTkxOC1cXHRcXHRcXHRpZiAoZXJyID09IC1FQkFETVNHIFxcdTAwMjZcXHUwMDI2ICgqc2tiKS1cXHUwMDNlbmV4dClcXG5uZXQvdGlwYy9jcnlwdG8uYzoxOTE5OlxcdFxcdFxcdFxcdHRpcGNfcmN2KG5ldCwgKCpza2IpLVxcdTAwM2VuZXh0LCBiKTtcXG5uZXQvdGlwYy9jcnlwdG8uYy0xOTIwLVxcdFxcdFxcdGdvdG8gZnJlZV9za2I7XFxuLS1cXG5uZXQvdGlwYy9jcnlwdG8uYy0xOTYyLXJjdjpcXG5uZXQvdGlwYy9jcnlwdG8uYzoxOTYzOlxcdC8qIFJlbW92ZSBlaGRyIFxcdTAwMjYgYXV0aC4gdGFnIHByaW9yIHRvIHRpcGNfcmN2KCkgKi9cXG5uZXQvdGlwYy9jcnlwdG8uYy0xOTY0LVxcdGVoZHIgPSAoc3RydWN0IHRpcGNfZWhkciAqKSgqc2tiKS1cXHUwMDNlZGF0YTtcXG4tLVxcbm5ldC90aXBjL25vZGUuYz0xOTM4PXN0YXRpYyBib29sIHRpcGNfbm9kZV9jaGVja19zdGF0ZShzdHJ1Y3QgdGlwY19ub2RlICpuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3RpcGMvbm9kZS5jLTIwODItLyoqXFxubmV0L3RpcGMvbm9kZS5jOjIwODM6ICogdGlwY19yY3YgLSBwcm9jZXNzIFRJUEMgcGFja2V0cy9tZXNzYWdlcyBhcnJpdmluZyBmcm9tIG9mZi1ub2RlXFxubmV0L3RpcGMvbm9kZS5jLTIwODQtICogQG5ldDogdGhlIGFwcGxpY2FibGUgbmV0IG5hbWVzcGFjZVxcbi0tXFxubmV0L3RpcGMvbm9kZS5jLTIwOTAtICovXFxubmV0L3RpcGMvbm9kZS5jOjIwOTE6dm9pZCB0aXBjX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0aXBjX2JlYXJlciAqYilcXG5uZXQvdGlwYy9ub2RlLmMtMjA5Mi17XFxuLS1cXG5uZXQvdGlwYy90b3BzcnYuYz02MzM9c3RhdGljIGludCB0aXBjX3RvcHNydl93b3JrX3N0YXJ0KHN0cnVjdCB0aXBjX3RvcHNydiAqcylcXG5uZXQvdGlwYy90b3BzcnYuYy02MzQte1xcbm5ldC90aXBjL3RvcHNydi5jOjYzNTpcXHRzLVxcdTAwM2VyY3Zfd3EgPSBhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZShcXFwidGlwY19yY3ZcXFwiLCAwKTtcXG5uZXQvdGlwYy90b3BzcnYuYy02MzYtXFx0aWYgKCFzLVxcdTAwM2VyY3Zfd3EpIHtcXG4tLVxcbm5ldC90aXBjL3VkcF9tZWRpYS5jPTM2OD1zdGF0aWMgaW50IHRpcGNfdWRwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3RpcGMvdWRwX21lZGlhLmMtMzg4LVxcdFxcdFRJUENfU0tCX0NCKHNrYiktXFx1MDAzZWZsYWdzID0gMDtcXG5uZXQvdGlwYy91ZHBfbWVkaWEuYzozODk6XFx0XFx0dGlwY19yY3Yoc29ja19uZXQoc2spLCBza2IsIGIpO1xcbm5ldC90aXBjL3VkcF9tZWRpYS5jLTM5MC1cXHRcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTk6MDc6MjAuNzU2NjcwODYzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc0ODgxMzQzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRJUEMgUGFja2V0IFJlY2VwdGlvbiBQYXRoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IFRJUEMgbWVzc2FnZXMgYXJlIHJlY2VpdmVkLCBhbmQgYHRpcGNfcmN2YCBpcyB0aGUgY2VudHJhbCBmdW5jdGlvbiBoZXJlLiBJIHNlZSBpdCdzIHRyaWdnZXJlZCBmcm9tIHR3byBkaXN0aW5jdCBwYXRoczogYHRpcGNfbDJfcmN2X21zZ2AsIHdoaWNoIGhhbmRsZXMgdGhlIEV0aGVybmV0LWJhc2VkIGRpcmVjdCB0cmFuc21pc3Npb24gdXNpbmcgdGhlIEVUSF9QX1RJUEMgcHJvdG9jb2wsIGFuZCBgdGlwY191ZHBfcmVjdmAsIHdoaWNoIGlzIGhhbmRsaW5nIHRoZSBVRFAgZW5jYXBzdWxhdGlvbiBvZiBUSVBDIG1lc3NhZ2VzLiBUaGF0IGNvbmZpcm1zIHRoZSBjb2RlIHBhdGggSSdtIGV4YW1pbmluZyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSB0aHJvdWdoIG5ldHdvcmsgcGFja2V0cywgYW5kIGFueSBjaGFuZ2VzIEkgbWFrZSBoZXJlIHdpbGwgaGF2ZSBhIGZ1bmN0aW9uYWwgaW1wYWN0LlxuXG5Ob3csIHRoaXMgcGFydGljdWxhciBjaGFuZ2UgbGltaXRzIHRoZSB0b3RhbCBzaXplIG9mIGEgcmVhc3NlbWJsZWQgZnJhZ21lbnQgY2hhaW4uIEl0IHNlZW1zIHRoZSBsaW1pdCBpcyBzZXQgYXQgYDIgKiBNQVhfTVNHX1NJWkVgLiBUaGlzIGlzIHRoZSBpbXBvcnRhbnQgcGFydCAtIHRoZSBzaXplIG9mIGZyYWdtZW50cyBpcyBub3cgZG91YmxlIHRoYXQgb2YgYE1BWF9NU0dfU0laRWAsIHdoaWNoIGlzIGRlZmluZWQgc29tZXdoZXJlIGluIGBuZXQvdGlwYy9tc2cuaGAgb3IgYSByZWxhdGVkIGhlYWRlciBmaWxlLiBJIG5lZWQgdG8gdmVyaWZ5IHdoYXQgdGhlIGFjdHVhbCB2YWx1ZSBvZiBgTUFYX01TR19TSVpFYCBpcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIExldCdzIGdvIGNoZWNrIHRoYXQgZGVmaW5pdGlvbiB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc0NiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTowNzoyNS41MDU0ODc0MzFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1ODczNzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk1BWF9NU0dfU0laRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGlwYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3RpcGMvZ3JvdXAuYy00Ny1cXG5uZXQvdGlwYy9ncm91cC5jOjQ4OiNkZWZpbmUgQURWX1VOSVQgKCgoTUFYX01TR19TSVpFICsgTUFYX0hfU0laRSkgLyBGTE9XQ1RMX0JMS19TWikgKyAxKVxcbm5ldC90aXBjL2dyb3VwLmMtNDktI2RlZmluZSBBRFZfSURMRSBBRFZfVU5JVFxcbi0tXFxubmV0L3RpcGMvbGluay5jPTEyOTU9c3RhdGljIGludCB0aXBjX2xpbmtfaW5wdXQoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy0xMzE5LVxcdFxcdFxcdC8qIEEgbGVnaXRpbWF0ZSByZWFzc2VtYmxlZCBtZXNzYWdlIGNhbiBuZXZlciBleGNlZWRcXG5uZXQvdGlwYy9saW5rLmM6MTMyMDpcXHRcXHRcXHQgKiBNQVhfTVNHX1NJWkUuIExpbWl0IHRoZSBtZW1vcnkgb25lIGluY29tcGxldGVcXG5uZXQvdGlwYy9saW5rLmMtMTMyMS1cXHRcXHRcXHQgKiBmcmFnbWVudCBjaGFpbiBjYW4gcGluLCBvdGhlcndpc2UgYSBwZWVyIGNhbiBncm93XFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtMTMyNi1cXHRcXHRcXHQgKi9cXG5uZXQvdGlwYy9saW5rLmM6MTMyNzpcXHRcXHRcXHRpZiAoKCpyZWFzbV9za2IpLVxcdTAwM2V0cnVlc2l6ZSBcXHUwMDNlIDIgKiBNQVhfTVNHX1NJWkUpIHtcXG5uZXQvdGlwYy9saW5rLmMtMTMyOC1cXHRcXHRcXHRcXHRwcl93YXJuX3JhdGVsaW1pdGVkKFxcXCJGcmFnbWVudCBjaGFpbiBsYXJnZXIgdGhhbiAldSBieXRlcywgZHJvcHBpbmdcXFxcblxcXCIsXFxubmV0L3RpcGMvbGluay5jOjEzMjk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIDIgKiBNQVhfTVNHX1NJWkUpO1xcbm5ldC90aXBjL2xpbmsuYy0xMzMwLVxcdFxcdFxcdFxcdGtmcmVlX3NrYigqcmVhc21fc2tiKTtcXG4tLVxcbm5ldC90aXBjL21zZy5jPTM4ND1pbnQgdGlwY19tc2dfYnVpbGQoc3RydWN0IHRpcGNfbXNnICptaGRyLCBzdHJ1Y3QgbXNnaGRyICptLCBpbnQgb2Zmc2V0LFxcbi0tXFxubmV0L3RpcGMvbXNnLmMtNDA1LVxcdFxcdGlmICh1bmxpa2VseSghc2tiKSkge1xcbm5ldC90aXBjL21zZy5jOjQwNjpcXHRcXHRcXHRpZiAocGt0bWF4ICE9IE1BWF9NU0dfU0laRSlcXG5uZXQvdGlwYy9tc2cuYy00MDctXFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5uZXQvdGlwYy9tc2cuaD00OT1zdHJ1Y3QgcGxpc3Q7XFxuLS1cXG5uZXQvdGlwYy9tc2cuaC0xMDAtXFxubmV0L3RpcGMvbXNnLmg6MTAxOiNkZWZpbmUgTUFYX01TR19TSVpFIChNQVhfSF9TSVpFICsgVElQQ19NQVhfVVNFUl9NU0dfU0laRSlcXG5uZXQvdGlwYy9tc2cuaC0xMDItI2RlZmluZSBUSVBDX01FRElBX0lORk9fT0ZGU0VUXFx0NVxcbi0tXFxubmV0L3RpcGMvbm9kZS5jPTIwNT1pbnQgdGlwY19ub2RlX2dldF9tdHUoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkciwgdTMyIHNlbCwgYm9vbCBjb25uZWN0ZWQpXFxuLS1cXG5uZXQvdGlwYy9ub2RlLmMtMjA4LVxcdGludCBiZWFyZXJfaWQ7XFxubmV0L3RpcGMvbm9kZS5jOjIwOTpcXHR1bnNpZ25lZCBpbnQgbXR1ID0gTUFYX01TR19TSVpFO1xcbm5ldC90aXBjL25vZGUuYy0yMTAtXFxuLS1cXG5uZXQvdGlwYy9ub2RlLmMtMjE0LVxcbm5ldC90aXBjL25vZGUuYzoyMTU6XFx0LyogQWxsb3cgTUFYX01TR19TSVpFIHdoZW4gYnVpbGRpbmcgY29ubmVjdGlvbiBvcmllbnRlZCBtZXNzYWdlXFxubmV0L3RpcGMvbm9kZS5jLTIxNi1cXHQgKiBpZiB0aGV5IGFyZSBpbiB0aGUgc2FtZSBjb3JlIG5ldHdvcmtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTI1Mz1zdGF0aWMgdm9pZCB0c2tfc2V0X25hZ2xlKHN0cnVjdCB0aXBjX3NvY2sgKnRzaylcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTI2NC1cXHQvKiBMaW1pdCBub2RlIGxvY2FsIGJ1ZmZlciBzaXplIHRvIGF2b2lkIHJlY2VpdmUgcXVldWUgb3ZlcmZsb3cgKi9cXG5uZXQvdGlwYy9zb2NrZXQuYzoyNjU6XFx0aWYgKHRzay1cXHUwMDNlbWF4X3BrdCA9PSBNQVhfTVNHX1NJWkUpXFxubmV0L3RpcGMvc29ja2V0LmMtMjY2LVxcdFxcdHRzay1cXHUwMDNlbWF4bmFnbGUgPSAxNTAwO1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmgtNDItI2RlZmluZSBGTE9XQ1RMX01TR19XSU4gNTEyXFxubmV0L3RpcGMvc29ja2V0Lmg6NDM6I2RlZmluZSBGTE9XQ1RMX01TR19MSU0gKChGTE9XQ1RMX01TR19XSU4gKiAyICsgMSkgKiBTS0JfVFJVRVNJWkUoTUFYX01TR19TSVpFKSlcXG5uZXQvdGlwYy9zb2NrZXQuaC00NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTk6MDc6MjUuNTYxMzY3MDlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk3MjM4OTczNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRJUEMgTGluayBJbnB1dCBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyB0aGUgY2hhbmdlIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlzIHNwZWNpZmljYWxseSB3aXRoaW4gYHRpcGNfbGlua19pbnB1dGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIEl0IGxvb2tzIGxpa2UgYHRpcGNfcmN2YCBpcyB0aGUgZW50cnkgcG9pbnQsIHdoaWNoIGNhbGxzIGB0aXBjX25vZGVfY2hlY2tfc3RhdGVgLiBJJ20gcmVhc29uYWJseSBjb25maWRlbnQgdGhhdCBgdGlwY19ub2RlX2NoZWNrX3N0YXRlYCB0aGVuIGNhbGxzIGB0aXBjX2xpbmtfcmN2YCwgYW5kIGZpbmFsbHksIHdlIGFycml2ZSBhdCBgdGlwY19saW5rX2lucHV0YC4gVGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IHByb2JhYmxlIGZsb3cuIEdpdmVuIHRoaXMsIEkgc2hvdWxkIHN0YXJ0IG15IGRlZXBlciBkaXZlIGludG8gdGhlIGNvZGUgYnkgZm9jdXNpbmcgb24gYHRpcGNfbGlua19yY3ZgLiBUaGlzIGlzIHRoZSBsb2dpY2FsIG5leHQgc3RlcCB0byBwcm9wZXJseSB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhlIG1vZGlmaWNhdGlvbnMgbWFkZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODEwMSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE5OjA3OjI5LjUzMzc1OTQ2NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg0OTg2NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGlwY19saW5rX3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGlwYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3RpcGMvYmNhc3QuYz00MzY9aW50IHRpcGNfYmNhc3RfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC90aXBjL2JjYXN0LmMtNDUzLVxcdGVsc2VcXG5uZXQvdGlwYy9iY2FzdC5jOjQ1NDpcXHRcXHRyYyA9IHRpcGNfbGlua19yY3YobCwgc2tiLCBOVUxMKTtcXG5uZXQvdGlwYy9iY2FzdC5jLTQ1NS1cXHR0aXBjX2JjYXN0X3VubG9jayhuZXQpO1xcbi0tXFxubmV0L3RpcGMvbGluay5jPTQyMz1pbnQgdGlwY19saW5rX21zcyhzdHJ1Y3QgdGlwY19saW5rICpsKVxcbi0tXFxubmV0L3RpcGMvbGluay5jLTQzMS1cXG5uZXQvdGlwYy9saW5rLmM6NDMyOnUxNiB0aXBjX2xpbmtfcmN2X254dChzdHJ1Y3QgdGlwY19saW5rICpsKVxcbm5ldC90aXBjL2xpbmsuYy00MzMte1xcbi0tXFxubmV0L3RpcGMvbGluay5jPTE3NDc9c3RhdGljIGludCB0aXBjX2xpbmtfYnVpbGRfbmFja19tc2coc3RydWN0IHRpcGNfbGluayAqbCxcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy0xNzcxLVxcbm5ldC90aXBjL2xpbmsuYzoxNzcyOi8qIHRpcGNfbGlua19yY3YgLSBwcm9jZXNzIFRJUEMgcGFja2V0cy9tZXNzYWdlcyBhcnJpdmluZyBmcm9tIG9mZi1ub2RlXFxubmV0L3RpcGMvbGluay5jLTE3NzMtICogQGw6IHRoZSBsaW5rIHRoYXQgc2hvdWxkIGhhbmRsZSB0aGUgbWVzc2FnZVxcbi0tXFxubmV0L3RpcGMvbGluay5jLTE3NzYtICovXFxubmV0L3RpcGMvbGluay5jOjE3Nzc6aW50IHRpcGNfbGlua19yY3Yoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvdGlwYy9saW5rLmMtMTc3OC1cXHRcXHQgIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKVxcbi0tXFxubmV0L3RpcGMvbGluay5oPTEwOT1zdHJ1Y3Qgc2tfYnVmZl9oZWFkICp0aXBjX2xpbmtfaW5wdXRxKHN0cnVjdCB0aXBjX2xpbmsgKmwpO1xcbm5ldC90aXBjL2xpbmsuaDoxMTA6dTE2IHRpcGNfbGlua19yY3Zfbnh0KHN0cnVjdCB0aXBjX2xpbmsgKmwpO1xcbm5ldC90aXBjL2xpbmsuaC0xMTEtdTE2IHRpcGNfbGlua19hY2tlZChzdHJ1Y3QgdGlwY19saW5rICpsKTtcXG4tLVxcbm5ldC90aXBjL2xpbmsuaD0xMzE9aW50IHRpcGNfbGlua190aW1lb3V0KHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKTtcXG5uZXQvdGlwYy9saW5rLmg6MTMyOmludCB0aXBjX2xpbmtfcmN2KHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3RpcGMvbGluay5oLTEzMy1cXHRcXHQgIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKTtcXG4tLVxcbm5ldC90aXBjL25vZGUuYz05NTg9c3RhdGljIHZvaWQgdGlwY19ub2RlX2xpbmtfZmFpbG92ZXIoc3RydWN0IHRpcGNfbm9kZSAqbiwgc3RydWN0IHRpcGNfbGluayAqbCxcXG4tLVxcbm5ldC90aXBjL25vZGUuYy05NzItXFxubmV0L3RpcGMvbm9kZS5jOjk3MzpcXHRuLVxcdTAwM2VzeW5jX3BvaW50ID0gdGlwY19saW5rX3Jjdl9ueHQodG5sKSArIChVMTZfTUFYIC8gMiAtIDEpO1xcbm5ldC90aXBjL25vZGUuYy05NzQtXFx0dGlwY19saW5rX2ZhaWxvdmVyX3ByZXBhcmUobCwgdG5sLCB4bWl0cSk7XFxuLS1cXG5uZXQvdGlwYy9ub2RlLmM9OTg4PXN0YXRpYyB2b2lkIF9fdGlwY19ub2RlX2xpbmtfZG93bihzdHJ1Y3QgdGlwY19ub2RlICpuLCBpbnQgKmJlYXJlcl9pZCxcXG4tLVxcbm5ldC90aXBjL25vZGUuYy0xMDUxLVxcdHRpcGNfbm9kZV9mc21fZXZ0KG4sIE5PREVfU1lOQ0hfRU5EX0VWVCk7XFxubmV0L3RpcGMvbm9kZS5jOjEwNTI6XFx0bi1cXHUwMDNlc3luY19wb2ludCA9IHRpcGNfbGlua19yY3Zfbnh0KHRubCkgKyAoVTE2X01BWCAvIDIgLSAxKTtcXG5uZXQvdGlwYy9ub2RlLmMtMTA1My1cXHR0aXBjX2xpbmtfdG5sX3ByZXBhcmUobCwgdG5sLCBGQUlMT1ZFUl9NU0csIHhtaXRxKTtcXG4tLVxcbm5ldC90aXBjL25vZGUuYz0xOTM4PXN0YXRpYyBib29sIHRpcGNfbm9kZV9jaGVja19zdGF0ZShzdHJ1Y3QgdGlwY19ub2RlICpuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3RpcGMvbm9kZS5jLTE5NTgtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbm5ldC90aXBjL25vZGUuYzoxOTU5OlxcdHJjdl9ueHQgPSB0aXBjX2xpbmtfcmN2X254dChsKTtcXG5uZXQvdGlwYy9ub2RlLmMtMTk2MC1cXG4tLVxcbm5ldC90aXBjL25vZGUuYy0yMDY0LVxcdFxcdGlucHV0cV9sZW4gPSBza2JfcXVldWVfbGVuKHRpcGNfbGlua19pbnB1dHEocGwpKTtcXG5uZXQvdGlwYy9ub2RlLmM6MjA2NTpcXHRcXHRkbHZfbnh0ID0gdGlwY19saW5rX3Jjdl9ueHQocGwpIC0gaW5wdXRxX2xlbjtcXG5uZXQvdGlwYy9ub2RlLmMtMjA2Ni1cXHRcXHRpZiAobW9yZShkbHZfbnh0LCBuLVxcdTAwM2VzeW5jX3BvaW50KSkge1xcbi0tXFxubmV0L3RpcGMvbm9kZS5jPTIwOTE9dm9pZCB0aXBjX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0aXBjX2JlYXJlciAqYilcXG4tLVxcbm5ldC90aXBjL25vZGUuYy0yMTcxLVxcdFxcdGlmIChsZS1cXHUwMDNlbGluaykge1xcbm5ldC90aXBjL25vZGUuYzoyMTcyOlxcdFxcdFxcdHJjID0gdGlwY19saW5rX3JjdihsZS1cXHUwMDNlbGluaywgc2tiLCBcXHUwMDI2eG1pdHEpO1xcbm5ldC90aXBjL25vZGUuYy0yMTczLVxcdFxcdFxcdHNrYiA9IE5VTEw7XFxuLS1cXG5uZXQvdGlwYy9ub2RlLmMtMjE4NS1cXHRcXHRcXHRpZiAobGUtXFx1MDAzZWxpbmspIHtcXG5uZXQvdGlwYy9ub2RlLmM6MjE4NjpcXHRcXHRcXHRcXHRyYyA9IHRpcGNfbGlua19yY3YobGUtXFx1MDAzZWxpbmssIHNrYiwgXFx1MDAyNnhtaXRxKTtcXG5uZXQvdGlwYy9ub2RlLmMtMjE4Ny1cXHRcXHRcXHRcXHRza2IgPSBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTowNzoyOS42MDIyNjIxNTFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk2ODE2OTM1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRJUEMgTWVtb3J5IEdyb3d0aCBQcmV2ZW50aW9uIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlIHNlZW1zIHRvIGJlIHdpdGhpbiBgdGlwY19saW5rX2lucHV0YC4gSXQgbG9va3MgbGlrZSB0aGlzIGlzIGEgZnVuY3Rpb25hbCBpbXByb3ZlbWVudCwgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGFkZHJlc3MgYW5kIHByZXZlbnQgdW5ib3VuZGVkIG1lbW9yeSBncm93dGgg4oCTIGEgY3JpdGljYWwgaXNzdWUgaW4gYW55IG5ldHdvcmsgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24uIFRoZSBnb29kIG5ld3MgaXMsIGJhc2VkIG9uIHRoZSBpbmZvcm1hdGlvbiwgdGhpcyBpcyByZWFjaGFibGUgdGhyb3VnaCBzdGFuZGFyZCBUSVBDIHBhY2tldCBwcm9jZXNzaW5nLCBzbyB3ZSdyZSBub3QgbG9va2luZyBhdCBzb21lIG9ic2N1cmUgZWRnZSBjYXNlIGhlcmUuIFRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGlzIHN0cmFpZ2h0Zm9yd2FyZDogYFRJUENgLiBUaGF0J3MgcmVhc29uYWJsZS5cblxuTm93LCB3aGVyZSBkbyB3ZSB0cmFjZSB0aGlzIHRocm91Z2ggdGhlIGNvZGU/IFRoZSBmb2N1cyBzeW1ib2xzIGZvciB0cmFjaW5nIHRoZSBwYXRoIHRocm91Z2ggdGhlIGZ1bmN0aW9ucyBzaG91bGQgYmUgZWl0aGVyIGB0aXBjX2xpbmtfcmN2YCBvciBgdGlwY19yY3ZgLiBMZXQncyBjaGVjayB0aG9zZSBvdXQuIGB0aXBjX3JjdmAgbG9va3MgbGlrZSB0aGUgbWFpbiBlbnRyeSBwb2ludCwgYXMgeW91J2QgZXhwZWN0LiBUaGVuLCBgdGlwY19saW5rX3JjdmAsIHdoaWNoIGlzIHNwZWNpZmljIHRvIGxpbmsgcmVjZXB0aW9uLCBwcm9iYWJseSBnZXRzIHVzIGNsb3NlciB0byBgdGlwY19saW5rX2lucHV0YC4gV2UgYWxzbyBoYXZlIGB0aXBjX2JjYXN0X3JjdmAgZm9yIGJyb2FkY2FzdCwgYHRpcGNfbGlua190bmxfcmN2YCBmb3IgdHVubmVscywgYHRpcGNfdWRwX3JlY3ZgIGZvciBVRFAsIGFuZCBgdGlwY19sMl9yY3ZfbXNnYCBmb3IgTDIgbWVzc2FnZXMuXG5cbkFscmlnaHQsIGxldCdzIGNpcmNsZSBiYWNrIHRvIGB0aXBjX2xpbmtfaW5wdXRgIGFuZCBzdGFydCBkaWdnaW5nIGluIGZyb20gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3NjIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTk6MDc6MzUuNTcwNDM0MjUzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODkxMDA5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aXBjX2xpbmtfaW5wdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3RpcGMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL2xpbmsuYz0zMzg9dW5zaWduZWQgbG9uZyB0aXBjX2xpbmtfdG9sZXJhbmNlKHN0cnVjdCB0aXBjX2xpbmsgKmwpXFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtMzQyLVxcbm5ldC90aXBjL2xpbmsuYzozNDM6c3RydWN0IHNrX2J1ZmZfaGVhZCAqdGlwY19saW5rX2lucHV0cShzdHJ1Y3QgdGlwY19saW5rICpsKVxcbm5ldC90aXBjL2xpbmsuYy0zNDQte1xcbi0tXFxubmV0L3RpcGMvbGluay5jPTEyNDQ9c3RhdGljIGJvb2wgdGlwY19kYXRhX2lucHV0KHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtMTI5MC1cXG5uZXQvdGlwYy9saW5rLmM6MTI5MTovKiB0aXBjX2xpbmtfaW5wdXQgLSBwcm9jZXNzIHBhY2tldCB0aGF0IGhhcyBwYXNzZWQgbGluayBwcm90b2NvbCBjaGVja1xcbm5ldC90aXBjL2xpbmsuYy0xMjkyLSAqXFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtMTI5NC0gKi9cXG5uZXQvdGlwYy9saW5rLmM6MTI5NTpzdGF0aWMgaW50IHRpcGNfbGlua19pbnB1dChzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC90aXBjL2xpbmsuYy0xMjk2LVxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSxcXG4tLVxcbm5ldC90aXBjL2xpbmsuYz0xMzU1PXN0YXRpYyBpbnQgdGlwY19saW5rX3RubF9yY3Yoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy0xNDExLVxcdFxcdGlmICghdGlwY19kYXRhX2lucHV0KGwsIGlza2IsIGlucHV0cSkpXFxubmV0L3RpcGMvbGluay5jOjE0MTI6XFx0XFx0XFx0cmMgfD0gdGlwY19saW5rX2lucHV0KGwsIGlza2IsIGlucHV0cSwgcmVhc21fc2tiKTtcXG5uZXQvdGlwYy9saW5rLmMtMTQxMy1cXHRcXHRpZiAodW5saWtlbHkocmMpKVxcbi0tXFxubmV0L3RpcGMvbGluay5jPTE3Nzc9aW50IHRpcGNfbGlua19yY3Yoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy0xODI5LVxcdFxcdGVsc2UgaWYgKCF0aXBjX2RhdGFfaW5wdXQobCwgc2tiLCBsLVxcdTAwM2VpbnB1dHEpKVxcbm5ldC90aXBjL2xpbmsuYzoxODMwOlxcdFxcdFxcdHJjIHw9IHRpcGNfbGlua19pbnB1dChsLCBza2IsIGwtXFx1MDAzZWlucHV0cSwgXFx1MDAyNmwtXFx1MDAzZXJlYXNtX2J1Zik7XFxubmV0L3RpcGMvbGluay5jLTE4MzEtXFx0XFx0aWYgKHVubGlrZWx5KCsrbC1cXHUwMDNlcmN2X3VuYWNrZWQgXFx1MDAzZT0gVElQQ19NSU5fTElOS19XSU4pKVxcbi0tXFxubmV0L3RpcGMvbGluay5oPTEwNz1pbnQgdGlwY19saW5rX3htaXQoc3RydWN0IHRpcGNfbGluayAqbGluaywgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcXG5uZXQvdGlwYy9saW5rLmgtMTA4LVxcdFxcdCAgIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKTtcXG5uZXQvdGlwYy9saW5rLmg6MTA5OnN0cnVjdCBza19idWZmX2hlYWQgKnRpcGNfbGlua19pbnB1dHEoc3RydWN0IHRpcGNfbGluayAqbCk7XFxubmV0L3RpcGMvbGluay5oLTExMC11MTYgdGlwY19saW5rX3Jjdl9ueHQoc3RydWN0IHRpcGNfbGluayAqbCk7XFxuLS1cXG5uZXQvdGlwYy9ub2RlLmM9MTkzOD1zdGF0aWMgYm9vbCB0aXBjX25vZGVfY2hlY2tfc3RhdGUoc3RydWN0IHRpcGNfbm9kZSAqbiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC90aXBjL25vZGUuYy0yMDA4LVxcdFxcdFxcdFxcdFxcdFxcdCAgXFxcIm5vZGUgbGluayBkb3duIFxcdTAwM2MtIGZhaWxvdmVyIVxcXCIpO1xcbm5ldC90aXBjL25vZGUuYzoyMDA5OlxcdFxcdFxcdHRpcGNfc2tiX3F1ZXVlX3NwbGljZV90YWlsX2luaXQodGlwY19saW5rX2lucHV0cShwbCksXFxubmV0L3RpcGMvbm9kZS5jOjIwMTA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0dGlwY19saW5rX2lucHV0cShsKSk7XFxubmV0L3RpcGMvbm9kZS5jLTIwMTEtXFx0XFx0fVxcbi0tXFxubmV0L3RpcGMvbm9kZS5jLTIwNjMtXFx0XFx0fVxcbm5ldC90aXBjL25vZGUuYzoyMDY0OlxcdFxcdGlucHV0cV9sZW4gPSBza2JfcXVldWVfbGVuKHRpcGNfbGlua19pbnB1dHEocGwpKTtcXG5uZXQvdGlwYy9ub2RlLmMtMjA2NS1cXHRcXHRkbHZfbnh0ID0gdGlwY19saW5rX3Jjdl9ueHQocGwpIC0gaW5wdXRxX2xlbjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTk6MDc6MzUuNjE5MzQ4NTgyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0ODYwMDYzODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSwgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgYHRpcGNfbGlua19yY3ZgIHNlZW1zIGxpa2UgYSByZWFsbHkgc29saWQgZm9jdXMgZm9yIHRoaXMuIEkndmUgYWx3YXlzIGZvdW5kIHRoYXQgZnVuY3Rpb24gdG8gYmUgcGFydGljdWxhcmx5IGluc2lnaHRmdWwgaW4gdGhpcyBhcmVhLiBBbmQsIHlvdSBrbm93LCBgdGlwY19yY3ZgIGlzIGFsc28gYSB2ZXJ5IGNvbXBlbGxpbmcgY2FuZGlkYXRlIGZvciBjbG9zZXIgZXhhbWluYXRpb24uXG5cbkJ1dCBiZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW50byBlaXRoZXIgb2YgdGhvc2UsIEkgc2hvdWxkIHByb2JhYmx5IHRha2UgYSBtb3JlIGNvbXByZWhlbnNpdmUgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbi4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IGltcG9ydGFudCBzZXR0aW5ncy4gVGhlIHByaW1hcnkgb25lLCBvZiBjb3Vyc2UsIGlzIGBDT05GSUdfVElQQ2AuIEknbGwgd2FudCB0byB2ZXJpZnkgdGhhdC4gTGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgc3VwcG9ydGluZyBjb25maWd1cmF0aW9ucyB0aGF0IG5lZWQgYSBjbG9zZXIgbG9vay4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aG9zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyODcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTowNzozOS4xMDUzNTgxMzhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NDc2Mjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUSVBDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90aXBjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9LY29uZmlnLTUtXFxubmV0L3RpcGMvS2NvbmZpZzo2Om1lbnVjb25maWcgVElQQ1xcbm5ldC90aXBjL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiVGhlIFRJUEMgUHJvdG9jb2xcXFwiXFxuLS1cXG5uZXQvdGlwYy9LY29uZmlnLTIzLVxcbm5ldC90aXBjL0tjb25maWc6MjQ6Y29uZmlnIFRJUENfTUVESUFfSUJcXG5uZXQvdGlwYy9LY29uZmlnLTI1LVxcdGJvb2wgXFxcIkluZmluaUJhbmQgbWVkaWEgdHlwZSBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L3RpcGMvS2NvbmZpZy0yOS1cXHQgIElQLW92ZXItSW5maW5pQmFuZCBkZXZpY2VzLlxcbm5ldC90aXBjL0tjb25maWc6MzA6Y29uZmlnIFRJUENfTUVESUFfVURQXFxubmV0L3RpcGMvS2NvbmZpZy0zMS1cXHRib29sIFxcXCJJUC9VRFAgbWVkaWEgdHlwZSBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L3RpcGMvS2NvbmZpZy0zNy1cXG5uZXQvdGlwYy9LY29uZmlnOjM4OmNvbmZpZyBUSVBDX0NSWVBUT1xcbm5ldC90aXBjL0tjb25maWctMzktXFx0Ym9vbCBcXFwiVElQQyBlbmNyeXB0aW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvdGlwYy9LY29uZmlnLTUyLVxcbm5ldC90aXBjL0tjb25maWc6NTM6Y29uZmlnIFRJUENfRElBR1xcbm5ldC90aXBjL0tjb25maWctNTQtXFx0dHJpc3RhdGUgXFxcIlRJUEM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTk6MDc6MzkuMTUzODQ0ODY3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg1NDczMjAxOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFRJUEMgQ29uZmlndXJhdGlvbiBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyB0aGUgY29yZSBvZiB0aGlzIGNoYW5nZSBsaWVzIHdpdGhpbiBgVElQQ2AsIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gZmlsZSwgYXMgZXhwZWN0ZWQuIFRoZSBwYXRjaCBpdHNlbGYgZm9jdXNlcyBvbiBwcmV2ZW50aW5nIGEgcG90ZW50aWFsIGRlbmlhbC1vZi1zZXJ2aWNlIHZ1bG5lcmFiaWxpdHkgcmVsYXRlZCB0byByZWFzc2VtYmxlZCBmcmFnbWVudCBjaGFpbnMuIFNwZWNpZmljYWxseSwgaXQgaW50cm9kdWNlcyBhIGNydWNpYWwgY2hlY2sgdG8gZHJvcCBhIHJlYXNzZW1ibGVkIGZyYWdtZW50IGNoYWluIGlmIGl0cyBzaXplIGV4Y2VlZHMgYDIgKiBNQVhfTVNHX1NJWkVgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBhbHRlcmF0aW9uOyB3ZSdyZSBhY3RpdmVseSBjaGFuZ2luZyBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIGNlcnRhaW4gbmV0d29yayBwYWNrZXRzIGJhc2VkIG9uIHNpemUuIFRoYXQgc2NyZWFtcyBcImZ1enppbmcgdGFyZ2V0XCIgdG8gbWUsIHJpZ2h0IGF3YXkuIFNvIHRoZSBmb2N1cyBzeW1ib2xzIGZvciB0ZXN0aW5nIHdpbGwgZGVmaW5pdGVseSBiZSBgdGlwY19saW5rX3JjdmAgYW5kIGB0aXBjX3JjdmAuXG5cbk5vdywgbGV0J3MganVzdCBtYWtlIGFic29sdXRlbHkgc3VyZSBJJ3ZlIGdvdCB0aGlzIHJpZ2h0LiBJJ20gZ29pbmcgdG8gcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGB0aXBjX2xpbmtfaW5wdXRgIGZ1bmN0aW9uIHdpdGhpbiBgbmV0L3RpcGMvbGluay5jYC4gQWgsIHllcywgaGVyZSBpdCBpczpcblxuYGBgY1xuXHRcdGlmICh0aXBjX2J1Zl9hcHBlbmQocmVhc21fc2tiLCBcdTAwMjZza2IpKSB7XG5cdFx0XHRsLVx1MDAzZXN0YXRzLnJlY3ZfZnJhZ21lbnRlZCsrO1xuXHRcdFx0dGlwY19kYXRhX2lucHV0KGwsIHNrYiwgaW5wdXRxKTtcblx0XHR9IGVsc2UgaWYgKCpyZWFzbV9za2IpIHtcblx0XHRcdC8qIEEgbGVnaXRpbWF0ZSByZWFzc2VtYmxlZCBtZXNzYWdlIGNhbiBuZXZlciBleGNlZWRcblx0XHRcdCAqIE1BWF9NU0dfU0laRS4gTGltaXQgdGhlIG1lbW9yeSBvbmUgaW5jb21wbGV0ZVxuXHRcdFx0ICogZnJhZ21lbnQgY2hhaW4gY2FuIHBpbiwgb3RoZXJ3aXNlIGEgcGVlciBjYW4gZ3Jvd1xuXHRcdFx0ICoga2VybmVsIG1lbW9yeSB1bmJvdW5kZWRseSBieSBzdHJlYW1pbmcgZnJhZ21lbnRcblx0XHRcdCAqIGNoYWlucyB0aGF0IG5ldmVyIGNvbXBsZXRlOiByZWNlaXZlZCB0cmFmZmljIGFsc29cblx0XHRcdCAqIHJlc2V0cyB0aGUgbGluayBzaWxlbmNlIGNvdW50ZXIsIHNvIHRoZSBsaW5rIG5ldmVyXG5cdFx0XHQgKiB0aW1lcyBvdXQgYW5kIHRoZSBjaGFpbnMgYXJlIG5ldmVyIGZyZWVkLlxuXHRcdFx0ICovXG5cdFx0XHRpZiAoKCpyZWFzbV9za2IpLVx1MDAzZXRydWVzaXplIFx1MDAzZSAyICogTUFYX01TR19TSVpFKSB7XG5cdFx0XHRcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXCJGcmFnbWVudCBjaGFpbiBsYXJnZXIgdGhhbiAldSBieXRlcywgZHJvcHBpbmdcXG5cIixcblx0XHRcdFx0XHRcdCAgICAyICogTUFYX01TR19TSVpFKTtcblx0XHRcdFx0a2ZyZWVfc2tiKCpyZWFzbV9za2IpO1xuXHRcdFx0XHQqcmVhc21fc2tiID0gTlVMTDtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKCFsaW5rX2lzX2JjX3JjdmxpbmsobCkpIHtcblx0XHRcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXCJVbmFibGUgdG8gYnVpbGQgZnJhZ21lbnQgbGlzdFxcblwiKTtcblx0XHRcdHJldHVybiB0aXBjX2xpbmtfZnNtX2V2dChsLCBMSU5LX0ZBSUxVUkVfRVZUKTtcblx0XHR9XG5gYGBcblxuWXVwLCB0aGF0IGNvbmZpcm1zIGl0LiBUaGlzIGlzIGEgc29saWQsIGZ1bmN0aW9uYWwgY2hhbmdlLiBJdCBkaXJlY3RseSBhZGRyZXNzZXMgdGhlIGlzc3VlIG9mIHBvdGVudGlhbGx5IHVuYm91bmRlZCBtZW1vcnkgY29uc3VtcHRpb24gYnkgaW50ZW50aW9uYWxseSBkcm9wcGluZyBleGNlc3NpdmVseSBsYXJnZSwgaW5jb21wbGV0ZSBmcmFnbWVudCBjaGFpbnMgYW5kIGZyZWVpbmcgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlbS4gVGhpcyBpcyBhY2Nlc3NpYmxlIGZyb20gdGhlIGB0aXBjX2xpbmtfcmN2YCBwYXRoLCB3aGljaCBpcyBleGFjdGx5IHdoZXJlIEkgdGhvdWdodCBpdCB3b3VsZCBiZS4gT2theSwgSSdtIHNhdGlzZmllZC4gTm93IEknbSBnb2luZyB0byBzZXQgdXAgdGhlIGFwcHJvcHJpYXRlIGNvbmZpZ3VyYXRpb25zIGJhc2VkIG9uIHRoZXNlIGZpbmRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTgxMiwiT3V0cHV0VG9rZW5zIjoxMjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTk6MDc6NDcuNzAxMTY3NzM1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ4MzMyNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRJUENcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0aXBjX2xpbmtfcmN2XCIsXG4gICAgXCJ0aXBjX3JjdlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVElQQyBmcmFnbWVudCByZWFzc2VtYmx5IGxvZ2ljIHRvIHByZXZlbnQgdW5ib3VuZGVkIG1lbW9yeSBncm93dGguIEl0IGFkZHMgYSBjaGVjayB0byBkcm9wIGluY29tcGxldGUgZnJhZ21lbnQgY2hhaW5zIGlmIHRoZWlyIHNpemUgZXhjZWVkcyBgMiAqIE1BWF9NU0dfU0laRWAuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIG5vcm1hbCBUSVBDIHBhY2tldCBwcm9jZXNzaW5nIHBhdGhzLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCBgdGlwY19yY3ZgIGFuZCBgdGlwY19saW5rX3JjdmAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVElQQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRpcGNfbGlua19yY3ZcIixcbiAgICBcInRpcGNfcmN2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBUSVBDIGZyYWdtZW50IHJlYXNzZW1ibHkgbG9naWMgdG8gcHJldmVudCB1bmJvdW5kZWQgbWVtb3J5IGdyb3d0aC4gSXQgYWRkcyBhIGNoZWNrIHRvIGRyb3AgaW5jb21wbGV0ZSBmcmFnbWVudCBjaGFpbnMgaWYgdGhlaXIgc2l6ZSBleGNlZWRzIGAyICogTUFYX01TR19TSVpFYC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgbm9ybWFsIFRJUEMgcGFja2V0IHByb2Nlc3NpbmcgcGF0aHMsIHNwZWNpZmljYWxseSB0aHJvdWdoIGB0aXBjX3JjdmAgYW5kIGB0aXBjX2xpbmtfcmN2YC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTk6MDc6NDcuNzg2MDA5MjIzWiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDc3OTI1MDIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE5OjA3OjQ3Ljc4NjY0NzU4M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDc3ODYwNzc1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgcG90ZW50aWFsIG1lbW9yeSBleGhhdXN0aW9uIChEb1MpIHZ1bG5lcmFiaWxpdHkgaW4gdGhlIFRJUEMgc3Vic3lzdGVtIHdoZXJlIGEgcGVlciBjb3VsZCBzdHJlYW0gaW5jb21wbGV0ZSBmcmFnbWVudCBjaGFpbnMgdG8gdW5ib3VuZGVkbHkgZ3JvdyBrZXJuZWwgbWVtb3J5LiBUaGUgZml4IGludHJvZHVjZXMgYSBzaXplIGxpbWl0IGNoZWNrIChgdHJ1ZXNpemUgXFx1MDAzZSAyICogTUFYX01TR19TSVpFYCkgZm9yIGluY29tcGxldGUgcmVhc3NlbWJsZWQgbWVzc2FnZXMgYW5kIGZyZWVzIHRoZSBza2IgaWYgdGhlIGxpbWl0IGlzIGV4Y2VlZGVkLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciB1c2VyLXNwYWNlIGNvcGllcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGJ1ZyBiZWluZyBmaXhlZCBpcyByZWxhdGVkIHRvIHJlc291cmNlIG1hbmFnZW1lbnQgYW5kIG1lbW9yeSBsZWFrcywgd2hpY2ggYXJlIG5vdCBpbiB0aGUgc2NvcGUgb2YgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikuIFN0YW5kYXJkIGZ1enppbmcgd2l0aCBLQVNBTiBhbmQga21lbWxlYWsgaXMgc3VmZmljaWVudCBmb3IgZGV0ZWN0aW5nIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxlYWsgaXNzdWVzIGluIHRoaXMgY29udGV4dC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkMTQ3OWNhYWI0OTJkMWFiOGEyMzU2ODhlZjMxODY2OWJkNTFhZWM5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMTk6MDc6MDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9saW5rLmMgYi9uZXQvdGlwYy9saW5rLmNcbmluZGV4IDQ5ZGZjMDk4ZDg5YjIuLmJmNjFjOWFjNGVhMjEgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9saW5rLmNcbisrKyBiL25ldC90aXBjL2xpbmsuY1xuQEAgLTEzMTUsNyArMTMxNSwyMiBAQCBzdGF0aWMgaW50IHRpcGNfbGlua19pbnB1dChzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRpZiAodGlwY19idWZfYXBwZW5kKHJlYXNtX3NrYiwgXHUwMDI2c2tiKSkge1xuIFx0XHRcdGwtXHUwMDNlc3RhdHMucmVjdl9mcmFnbWVudGVkKys7XG4gXHRcdFx0dGlwY19kYXRhX2lucHV0KGwsIHNrYiwgaW5wdXRxKTtcbi1cdFx0fSBlbHNlIGlmICghKnJlYXNtX3NrYiBcdTAwMjZcdTAwMjYgIWxpbmtfaXNfYmNfcmN2bGluayhsKSkge1xuK1x0XHR9IGVsc2UgaWYgKCpyZWFzbV9za2IpIHtcbitcdFx0XHQvKiBBIGxlZ2l0aW1hdGUgcmVhc3NlbWJsZWQgbWVzc2FnZSBjYW4gbmV2ZXIgZXhjZWVkXG4rXHRcdFx0ICogTUFYX01TR19TSVpFLiBMaW1pdCB0aGUgbWVtb3J5IG9uZSBpbmNvbXBsZXRlXG4rXHRcdFx0ICogZnJhZ21lbnQgY2hhaW4gY2FuIHBpbiwgb3RoZXJ3aXNlIGEgcGVlciBjYW4gZ3Jvd1xuK1x0XHRcdCAqIGtlcm5lbCBtZW1vcnkgdW5ib3VuZGVkbHkgYnkgc3RyZWFtaW5nIGZyYWdtZW50XG4rXHRcdFx0ICogY2hhaW5zIHRoYXQgbmV2ZXIgY29tcGxldGU6IHJlY2VpdmVkIHRyYWZmaWMgYWxzb1xuK1x0XHRcdCAqIHJlc2V0cyB0aGUgbGluayBzaWxlbmNlIGNvdW50ZXIsIHNvIHRoZSBsaW5rIG5ldmVyXG4rXHRcdFx0ICogdGltZXMgb3V0IGFuZCB0aGUgY2hhaW5zIGFyZSBuZXZlciBmcmVlZC5cbitcdFx0XHQgKi9cbitcdFx0XHRpZiAoKCpyZWFzbV9za2IpLVx1MDAzZXRydWVzaXplIFx1MDAzZSAyICogTUFYX01TR19TSVpFKSB7XG4rXHRcdFx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwiRnJhZ21lbnQgY2hhaW4gbGFyZ2VyIHRoYW4gJXUgYnl0ZXMsIGRyb3BwaW5nXFxuXCIsXG4rXHRcdFx0XHRcdFx0ICAgIDIgKiBNQVhfTVNHX1NJWkUpO1xuK1x0XHRcdFx0a2ZyZWVfc2tiKCpyZWFzbV9za2IpO1xuK1x0XHRcdFx0KnJlYXNtX3NrYiA9IE5VTEw7XG4rXHRcdFx0fVxuK1x0XHR9IGVsc2UgaWYgKCFsaW5rX2lzX2JjX3JjdmxpbmsobCkpIHtcbiBcdFx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwiVW5hYmxlIHRvIGJ1aWxkIGZyYWdtZW50IGxpc3RcXG5cIik7XG4gXHRcdFx0cmV0dXJuIHRpcGNfbGlua19mc21fZXZ0KGwsIExJTktfRkFJTFVSRV9FVlQpO1xuIFx0XHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTowNzo0Ny43ODY2NDg1MjNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA3Nzg1ODcwNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgVElQQyBGcmFnbWVudCBIYW5kbGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW4gYG5ldC90aXBjL2xpbmsuY2AgYW5kIHRhcmdldHMgdGhlIGB0aXBjX2xpbmtfaW5wdXRgIGZ1bmN0aW9uLiBJdCdzIGRlc2lnbmVkIHRvIGFkZHJlc3MgYSBwb3RlbnRpYWwgZGVuaWFsLW9mLXNlcnZpY2UgdnVsbmVyYWJpbGl0eSByZWxhdGVkIHRvIGZyYWdtZW50ZWQgVElQQyBtZXNzYWdlcy4gVGhlIGNvcmUgb2YgdGhlIGZpeCBpcyBhIHNpemUgY2hlY2sgb24gYHJlYXNtX3NrYmAgYWZ0ZXIgYHRpcGNfYnVmX2FwcGVuZGAgcmV0dXJucyBmYWxzZS4gRXNzZW50aWFsbHksIGlmIHRoZSBmcmFnbWVudCBjaGFpbiBpc24ndCBjb21wbGV0ZSAob3IgdGhlcmUncyBhbiBlcnJvciBpbiBhcHBlbmRpbmcpLCBhbmQgaWYgYHJlYXNtX3NrYmAgZXhpc3RzIGFuZCBpdHMgYHRydWVzaXplYCBleGNlZWRzIGAyICogTUFYX01TR19TSVpFYCwgdGhlbiBpdCdzIGZyZWVkLiBUaGlzIHByZXZlbnRzIGFuIGF0dGFja2VyIGZyb20gc2VuZGluZyBhIGZsb29kIG9mIGZyYWdtZW50ZWQgbWVzc2FnZXMgdGhhdCBuZXZlciBmdWxseSByZWFzc2VtYmxlLCB0aGVyZWJ5IGNvbnN1bWluZyB1bmJvdW5kZWQgYW1vdW50cyBvZiBrZXJuZWwgbWVtb3J5LiBDcnVjaWFsbHksIHRoZSBjaGVjayBhbmQgZnJlZSBvcGVyYXRpb24gaXMgcGVyZm9ybWVkIG9ubHkgaWYgdGhlIG1heGltdW0gbWVzc2FnZSBzaXplIGlzIGV4Y2VlZGVkLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIHRoZSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gSG93ZXZlciwgYWZ0ZXIgY2FyZWZ1bCByZXZpZXcsIGl0IHNlZW1zIHRoZXJlJ3Mgbm8gcmlzayBpbiB0aGlzIGFyZWEuIFRoZSBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgaXQncyBub3QgY29weWluZyBkYXRhIHRvIHVzZXIgc3BhY2UsIGFuZCBpdCBkb2Vzbid0IGFwcGVhciB0byBiZSB1c2luZyBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoaXMgaXMgcHVyZWx5IGEgZGVmZW5zZSBhZ2FpbnN0IGEgbWVtb3J5IGxlYWsvRG9TIHNjZW5hcmlvLiBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1dCB0aGlzIGZpeCBkb2Vzbid0IGludHJvZHVjZSBhbnkgc3VjaCByaXNrLiBUaGUgdnVsbmVyYWJpbGl0eSBiZWluZyBhZGRyZXNzZWQgaXMgYSBtZW1vcnkgZXhoYXVzdGlvbiBpc3N1ZS4gU3RhbmRhcmQgZnV6emluZywgbWVtb3J5IGxlYWsgZGV0ZWN0aW9uIHRvb2xzIChsaWtlIGBrbWVtbGVha2ApLCBvciBPT00gZGV0ZWN0b3JzICpjb3VsZCogY2F0Y2ggcmVsYXRlZCBpc3N1ZXMsIGJ1dCBLTVNBTiBpcyBub3QgcmVsZXZhbnQgaGVyZS5cblxuSSBkb3VibGUtY2hlY2tlZCB0aGUgY29kZSBzbmlwcGV0IHRvIGJlIGNlcnRhaW46IHRoZSBhZGRlZCBgaWZgIHN0YXRlbWVudCBjbGVhcmx5IGNoZWNrcyB0aGUgc2l6ZSBvZiB0aGUgcmVhc3NlbWJsZWQgU0tCIGFuZCBmcmVlcyBpdCBpZiB0b28gbGFyZ2UsIGluIG9yZGVyIHRvIGxpbWl0IHRoZSBhbW91bnQgb2YgbWVtb3J5IGEgc2luZ2xlIGluY29tcGxldGUgZnJhZ21lbnQgY2hhaW4gY2FuIG9jY3VweS4gVGhpcyBpcyBhIHZlcnkgdGFyZ2V0ZWQgZml4IGFnYWluc3QgYW4gb2JzZXJ2ZWQgYmVoYXZpb3IgdGhhdCBpcyBsaWtlbHkgcmVsYXRlZCB0byB0aGUgbGluaydzIGtlZXAtYWxpdmUgbWVjaGFuaXNtcyBhbmQgdGhlIGxpbmsncyBhYmlsaXR5IHRvIHRpbWUgb3V0IGluY29tcGxldGUgdHJhbnNtaXNzaW9ucy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgdG91Y2hlZCwgbm8gcG9pbnRlcnMgYXJlIGxlZnQgZGFuZ2xpbmcgYW5kIG5vIG1lbW9yeSBpcyBhbGxvY2F0ZWQgd2l0aGluIHRoZSBzY29wZSBvZiB0aGlzIHZ1bG5lcmFiaWxpdHkncyBtaXRpZ2F0aW9uLiBUaGVyZWZvcmUsIHRoZSBgTmVlZHNLTVNBTmAgZmxhZyBpcyBkZWZpbml0ZWx5IGBmYWxzZWAuIFRoaXMgcGF0Y2ggaXMgYSBzdHJhaWdodGZvcndhcmQgZGVmZW5zZSBhZ2FpbnN0IG1lbW9yeSBleGhhdXN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjQ0LCJPdXRwdXRUb2tlbnMiOjE3MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE5OjA3OjU4LjU2NTIzODI4M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgcG90ZW50aWFsIG1lbW9yeSBleGhhdXN0aW9uIChEb1MpIHZ1bG5lcmFiaWxpdHkgaW4gdGhlIFRJUEMgc3Vic3lzdGVtIHdoZXJlIGEgcGVlciBjb3VsZCBzdHJlYW0gaW5jb21wbGV0ZSBmcmFnbWVudCBjaGFpbnMgdG8gdW5ib3VuZGVkbHkgZ3JvdyBrZXJuZWwgbWVtb3J5LiBUaGUgZml4IGludHJvZHVjZXMgYSBzaXplIGxpbWl0IGNoZWNrIChgdHJ1ZXNpemUgXFx1MDAzZSAyICogTUFYX01TR19TSVpFYCkgZm9yIGluY29tcGxldGUgcmVhc3NlbWJsZWQgbWVzc2FnZXMgYW5kIGZyZWVzIHRoZSBza2IgaWYgdGhlIGxpbWl0IGlzIGV4Y2VlZGVkLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciB1c2VyLXNwYWNlIGNvcGllcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGJ1ZyBiZWluZyBmaXhlZCBpcyByZWxhdGVkIHRvIHJlc291cmNlIG1hbmFnZW1lbnQgYW5kIG1lbW9yeSBsZWFrcywgd2hpY2ggYXJlIG5vdCBpbiB0aGUgc2NvcGUgb2YgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikuIFN0YW5kYXJkIGZ1enppbmcgd2l0aCBLQVNBTiBhbmQga21lbWxlYWsgaXMgc3VmZmljaWVudCBmb3IgZGV0ZWN0aW5nIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxlYWsgaXNzdWVzIGluIHRoaXMgY29udGV4dC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgbWVtb3J5IGV4aGF1c3Rpb24gKERvUykgdnVsbmVyYWJpbGl0eSBpbiB0aGUgVElQQyBzdWJzeXN0ZW0gd2hlcmUgYSBwZWVyIGNvdWxkIHN0cmVhbSBpbmNvbXBsZXRlIGZyYWdtZW50IGNoYWlucyB0byB1bmJvdW5kZWRseSBncm93IGtlcm5lbCBtZW1vcnkuIFRoZSBmaXggaW50cm9kdWNlcyBhIHNpemUgbGltaXQgY2hlY2sgKGB0cnVlc2l6ZSBcXHUwMDNlIDIgKiBNQVhfTVNHX1NJWkVgKSBmb3IgaW5jb21wbGV0ZSByZWFzc2VtYmxlZCBtZXNzYWdlcyBhbmQgZnJlZXMgdGhlIHNrYiBpZiB0aGUgbGltaXQgaXMgZXhjZWVkZWQuIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIHVzZXItc3BhY2UgY29waWVzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgYnVnIGJlaW5nIGZpeGVkIGlzIHJlbGF0ZWQgdG8gcmVzb3VyY2UgbWFuYWdlbWVudCBhbmQgbWVtb3J5IGxlYWtzLCB3aGljaCBhcmUgbm90IGluIHRoZSBzY29wZSBvZiBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKS4gU3RhbmRhcmQgZnV6emluZyB3aXRoIEtBU0FOIGFuZCBrbWVtbGVhayBpcyBzdWZmaWNpZW50IGZvciBkZXRlY3RpbmcgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbGVhayBpc3N1ZXMgaW4gdGhpcyBjb250ZXh0LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow6t6fv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-18 19:04:42 +0000 UTC FinishedAt: 2026-08-18 19:08:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "47226bbdef69fc0de815b8f5b81b39673f50bbee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TIPC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "47226bbdef69fc0de815b8f5b81b39673f50bbee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TIPC" ], "series_id": "19ff3039-a9a0-421c-8bab-19a4369b86da" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tipc_link_rcv", "tipc_rcv" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE4IDE5OjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RJUEMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0aXBjX2xpbmtfcmN2JiMzNDssCiAgICAmIzM0O3RpcGNfcmN2JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgcG90ZW50aWFsIG1lbW9yeSBleGhhdXN0aW9uIChEb1MpIHZ1bG5lcmFiaWxpdHkgaW4gdGhlIFRJUEMgc3Vic3lzdGVtIHdoZXJlIGEgcGVlciBjb3VsZCBzdHJlYW0gaW5jb21wbGV0ZSBmcmFnbWVudCBjaGFpbnMgdG8gdW5ib3VuZGVkbHkgZ3JvdyBrZXJuZWwgbWVtb3J5LiBUaGUgZml4IGludHJvZHVjZXMgYSBzaXplIGxpbWl0IGNoZWNrIChgdHJ1ZXNpemUgXHUwMDNlIDIgKiBNQVhfTVNHX1NJWkVgKSBmb3IgaW5jb21wbGV0ZSByZWFzc2VtYmxlZCBtZXNzYWdlcyBhbmQgZnJlZXMgdGhlIHNrYiBpZiB0aGUgbGltaXQgaXMgZXhjZWVkZWQuIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIHVzZXItc3BhY2UgY29waWVzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgYnVnIGJlaW5nIGZpeGVkIGlzIHJlbGF0ZWQgdG8gcmVzb3VyY2UgbWFuYWdlbWVudCBhbmQgbWVtb3J5IGxlYWtzLCB3aGljaCBhcmUgbm90IGluIHRoZSBzY29wZSBvZiBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKS4gU3RhbmRhcmQgZnV6emluZyB3aXRoIEtBU0FOIGFuZCBrbWVtbGVhayBpcyBzdWZmaWNpZW50IGZvciBkZXRlY3RpbmcgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbGVhayBpc3N1ZXMgaW4gdGhpcyBjb250ZXh0LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFRJUEMgZnJhZ21lbnQgcmVhc3NlbWJseSBsb2dpYyB0byBwcmV2ZW50IHVuYm91bmRlZCBtZW1vcnkgZ3Jvd3RoLiBJdCBhZGRzIGEgY2hlY2sgdG8gZHJvcCBpbmNvbXBsZXRlIGZyYWdtZW50IGNoYWlucyBpZiB0aGVpciBzaXplIGV4Y2VlZHMgYDIgKiBNQVhfTVNHX1NJWkVgLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBub3JtYWwgVElQQyBwYWNrZXQgcHJvY2Vzc2luZyBwYXRocywgc3BlY2lmaWNhbGx5IHRocm91Z2ggYHRpcGNfcmN2YCBhbmQgYHRpcGNfbGlua19yY3ZgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE5OjA3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZDE0NzljYWFiNDkyZDFhYjhhMjM1Njg4ZWYzMTg2NjliZDUxYWVjOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDE5OjA3OjA3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC90aXBjL2xpbmsuYyBiL25ldC90aXBjL2xpbmsuY1xuaW5kZXggNDlkZmMwOThkODliMi4uYmY2MWM5YWM0ZWEyMSAxMDA2NDRcbi0tLSBhL25ldC90aXBjL2xpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvbGluay5jXG5AQCAtMTMxNSw3ICYjNDM7MTMxNSwyMiBAQCBzdGF0aWMgaW50IHRpcGNfbGlua19pbnB1dChzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRpZiAodGlwY19idWZfYXBwZW5kKHJlYXNtX3NrYiwgXHUwMDI2c2tiKSkge1xuIFx0XHRcdGwtXHUwMDNlc3RhdHMucmVjdl9mcmFnbWVudGVkJiM0MzsmIzQzOztcbiBcdFx0XHR0aXBjX2RhdGFfaW5wdXQobCwgc2tiLCBpbnB1dHEpO1xuLVx0XHR9IGVsc2UgaWYgKCEqcmVhc21fc2tiIFx1MDAyNlx1MDAyNiAhbGlua19pc19iY19yY3ZsaW5rKGwpKSB7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKCpyZWFzbV9za2IpIHtcbiYjNDM7XHRcdFx0LyogQSBsZWdpdGltYXRlIHJlYXNzZW1ibGVkIG1lc3NhZ2UgY2FuIG5ldmVyIGV4Y2VlZFxuJiM0MztcdFx0XHQgKiBNQVhfTVNHX1NJWkUuIExpbWl0IHRoZSBtZW1vcnkgb25lIGluY29tcGxldGVcbiYjNDM7XHRcdFx0ICogZnJhZ21lbnQgY2hhaW4gY2FuIHBpbiwgb3RoZXJ3aXNlIGEgcGVlciBjYW4gZ3Jvd1xuJiM0MztcdFx0XHQgKiBrZXJuZWwgbWVtb3J5IHVuYm91bmRlZGx5IGJ5IHN0cmVhbWluZyBmcmFnbWVudFxuJiM0MztcdFx0XHQgKiBjaGFpbnMgdGhhdCBuZXZlciBjb21wbGV0ZTogcmVjZWl2ZWQgdHJhZmZpYyBhbHNvXG4mIzQzO1x0XHRcdCAqIHJlc2V0cyB0aGUgbGluayBzaWxlbmNlIGNvdW50ZXIsIHNvIHRoZSBsaW5rIG5ldmVyXG4mIzQzO1x0XHRcdCAqIHRpbWVzIG91dCBhbmQgdGhlIGNoYWlucyBhcmUgbmV2ZXIgZnJlZWQuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRpZiAoKCpyZWFzbV9za2IpLVx1MDAzZXRydWVzaXplIFx1MDAzZSAyICogTUFYX01TR19TSVpFKSB7XG4mIzQzO1x0XHRcdFx0cHJfd2Fybl9yYXRlbGltaXRlZChcJiMzNDtGcmFnbWVudCBjaGFpbiBsYXJnZXIgdGhhbiAldSBieXRlcywgZHJvcHBpbmdcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAyICogTUFYX01TR19TSVpFKTtcbiYjNDM7XHRcdFx0XHRrZnJlZV9za2IoKnJlYXNtX3NrYik7XG4mIzQzO1x0XHRcdFx0KnJlYXNtX3NrYiA9IE5VTEw7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH0gZWxzZSBpZiAoIWxpbmtfaXNfYmNfcmN2bGluayhsKSkge1xuIFx0XHRcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXCYjMzQ7VW5hYmxlIHRvIGJ1aWxkIGZyYWdtZW50IGxpc3RcXG5cJiMzNDspO1xuIFx0XHRcdHJldHVybiB0aXBjX2xpbmtfZnNtX2V2dChsLCBMSU5LX0ZBSUxVUkVfRVZUKTtcbiBcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE5OjA3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUSVBDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGlwY19saW5rX3JjdiYjMzQ7LAogICAgJiMzNDt0aXBjX3JjdiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFRJUEMgZnJhZ21lbnQgcmVhc3NlbWJseSBsb2dpYyB0byBwcmV2ZW50IHVuYm91bmRlZCBtZW1vcnkgZ3Jvd3RoLiBJdCBhZGRzIGEgY2hlY2sgdG8gZHJvcCBpbmNvbXBsZXRlIGZyYWdtZW50IGNoYWlucyBpZiB0aGVpciBzaXplIGV4Y2VlZHMgYDIgKiBNQVhfTVNHX1NJWkVgLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBub3JtYWwgVElQQyBwYWNrZXQgcHJvY2Vzc2luZyBwYXRocywgc3BlY2lmaWNhbGx5IHRocm91Z2ggYHRpcGNfcmN2YCBhbmQgYHRpcGNfbGlua19yY3ZgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDE0NzljYWFiNDkyZDFhYjhhMjM1Njg4ZWYzMTg2NjliZDUxYWVjOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDE4IDE5OjA3OjA3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbGluay5jIGIvbmV0L3RpcGMvbGluay5jCmluZGV4IDQ5ZGZjMDk4ZDg5YjIuLmJmNjFjOWFjNGVhMjEgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL2xpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9saW5rLmMKQEAgLTEzMTUsNyAmIzQzOzEzMTUsMjIgQEAgc3RhdGljIGludCB0aXBjX2xpbmtfaW5wdXQoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJaWYgKHRpcGNfYnVmX2FwcGVuZChyZWFzbV9za2IsICZhbXA7c2tiKSkgewogCQkJbC0mZ3Q7c3RhdHMucmVjdl9mcmFnbWVudGVkJiM0MzsmIzQzOzsKIAkJCXRpcGNfZGF0YV9pbnB1dChsLCBza2IsIGlucHV0cSk7Ci0JCX0gZWxzZSBpZiAoISpyZWFzbV9za2IgJmFtcDsmYW1wOyAhbGlua19pc19iY19yY3ZsaW5rKGwpKSB7CiYjNDM7CQl9IGVsc2UgaWYgKCpyZWFzbV9za2IpIHsKJiM0MzsJCQkvKiBBIGxlZ2l0aW1hdGUgcmVhc3NlbWJsZWQgbWVzc2FnZSBjYW4gbmV2ZXIgZXhjZWVkCiYjNDM7CQkJICogTUFYX01TR19TSVpFLiBMaW1pdCB0aGUgbWVtb3J5IG9uZSBpbmNvbXBsZXRlCiYjNDM7CQkJICogZnJhZ21lbnQgY2hhaW4gY2FuIHBpbiwgb3RoZXJ3aXNlIGEgcGVlciBjYW4gZ3JvdwomIzQzOwkJCSAqIGtlcm5lbCBtZW1vcnkgdW5ib3VuZGVkbHkgYnkgc3RyZWFtaW5nIGZyYWdtZW50CiYjNDM7CQkJICogY2hhaW5zIHRoYXQgbmV2ZXIgY29tcGxldGU6IHJlY2VpdmVkIHRyYWZmaWMgYWxzbwomIzQzOwkJCSAqIHJlc2V0cyB0aGUgbGluayBzaWxlbmNlIGNvdW50ZXIsIHNvIHRoZSBsaW5rIG5ldmVyCiYjNDM7CQkJICogdGltZXMgb3V0IGFuZCB0aGUgY2hhaW5zIGFyZSBuZXZlciBmcmVlZC4KJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAoKCpyZWFzbV9za2IpLSZndDt0cnVlc2l6ZSAmZ3Q7IDIgKiBNQVhfTVNHX1NJWkUpIHsKJiM0MzsJCQkJcHJfd2Fybl9yYXRlbGltaXRlZCgmIzM0O0ZyYWdtZW50IGNoYWluIGxhcmdlciB0aGFuICV1IGJ5dGVzLCBkcm9wcGluZ1xuJiMzNDssCiYjNDM7CQkJCQkJICAgIDIgKiBNQVhfTVNHX1NJWkUpOwomIzQzOwkJCQlrZnJlZV9za2IoKnJlYXNtX3NrYik7CiYjNDM7CQkJCSpyZWFzbV9za2IgPSBOVUxMOwomIzQzOwkJCX0KJiM0MzsJCX0gZWxzZSBpZiAoIWxpbmtfaXNfYmNfcmN2bGluayhsKSkgewogCQkJcHJfd2Fybl9yYXRlbGltaXRlZCgmIzM0O1VuYWJsZSB0byBidWlsZCBmcmFnbWVudCBsaXN0XG4mIzM0Oyk7CiAJCQlyZXR1cm4gdGlwY19saW5rX2ZzbV9ldnQobCwgTElOS19GQUlMVVJFX0VWVCk7CiAJCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTk6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI0NwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRJUEMgTGluayBJbnB1dCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC90aXBjL2xpbmsuY2AsIHNwZWNpZmljYWxseSB0aGUgYHRpcGNfbGlua19pbnB1dGAgZnVuY3Rpb24uIEl0IHNlZW1zIHRoZXkmIzM5O3ZlIGFkZGVkIGEgY3J1Y2lhbCBjaGVjayB3aXRoaW4gdGhlIGZyYWdtZW50IHJlYXNzZW1ibHkgcHJvY2Vzcy4gVGhlIGNvcmUgb2YgaXQgaW52b2x2ZXMgcHJldmVudGluZyBleGNlc3NpdmUgbWVtb3J5IHVzYWdlIHdoZW4gZGVhbGluZyB3aXRoIGluY29tcGxldGUgZnJhZ21lbnQgY2hhaW5zLCB3aGljaCBpcyBhIGNsYXNzaWMgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuCgpUaGUgcGF0Y2gmIzM5O3MgbG9naWMgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogaXQmIzM5O3MgYWRkaW5nIGFuIGV4cGxpY2l0IGNoZWNrIGZvciBgKCpyZWFzbV9za2IpLSZndDt0cnVlc2l6ZSAmZ3Q7IDIgKiBNQVhfTVNHX1NJWkVgIHdpdGhpbiB0aGF0IGB0aXBjX2xpbmtfaW5wdXRgIGZ1bmN0aW9uLiBJZiB0aGUgcmVhc3NlbWJsZWQgZnJhZ21lbnQgY2hhaW4gZ2V0cyB0b28gbGFyZ2Ug4oCTIGV4Y2VlZGluZyB0d2ljZSB0aGUgbWF4aW11bSBtZXNzYWdlIHNpemUg4oCTIGl0JiMzOTtzIGdvaW5nIHRvIGRyb3AgdGhlIGNoYWluIGVudGlyZWx5LCBzZXR0aW5nIGAqcmVhc21fc2tiYCB0byBgTlVMTGAuIFRoaXMgaXMgYSBzb2xpZCwgZnVuY3Rpb25hbCBmaXggdG8gcHJldmVudCB1bmJvdW5kZWQgbWVtb3J5IGdyb3d0aCwgZXNzZW50aWFsbHkgYSBEb1MgcHJvdGVjdGlvbiBpbiB0aGUgbWFraW5nLCBhbmQgaXQmIzM5O3MgZ29vZCB0byBzZWUgcHJvYWN0aXZlIG1lYXN1cmVzIGxpa2UgdGhpcy4KCkkmIzM5O2xsIHF1aWNrbHkgcHVsbCB1cCBgbmV0L3RpcGMvbGluay5jYCBhbmQgdGFrZSBhIGxvb2sgYXQgYHRpcGNfbGlua19pbnB1dGAgZGlyZWN0bHkgdG8gdmVyaWZ5IHRoZSBpbXBsZW1lbnRhdGlvbi4gVGhlbiBJJiMzOTtsbCBsb29rIGZvciBgdGlwY19saW5rX2lucHV0YCBhbmQgYHRpcGNfYnVmX2FwcGVuZGAgdG8gZ2V0IGEgYmV0dGVyIHNlbnNlIG9mIGhvdyB0aG9zZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBhbmQgd2hlcmUgdGhlIHBhdGNoIGlzIG9wZXJhdGluZyBpbiB0aGUgd2lkZXIgVElQQyBjb250ZXh0LiBJdCYjMzk7cyBhbHdheXMgaW1wb3J0YW50IHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgd2hlbiBldmFsdWF0aW5nIGEgY2hhbmdlIGxpa2UgdGhpcy4gVGhlIGZhY3QgdGhhdCBgQ09ORklHX1RJUENgIGlzIGludm9sdmVkIGhlbHBzIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgd2lkZXIgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxOTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aXBjX2xpbmtfaW5wdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGlwYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvbGluay5jPTMzOD11bnNpZ25lZCBsb25nIHRpcGNfbGlua190b2xlcmFuY2Uoc3RydWN0IHRpcGNfbGluayAqbClcbi0tXG5uZXQvdGlwYy9saW5rLmMtMzQyLVxubmV0L3RpcGMvbGluay5jOjM0MzpzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp0aXBjX2xpbmtfaW5wdXRxKHN0cnVjdCB0aXBjX2xpbmsgKmwpXG5uZXQvdGlwYy9saW5rLmMtMzQ0LXtcbi0tXG5uZXQvdGlwYy9saW5rLmM9MTI0ND1zdGF0aWMgYm9vbCB0aXBjX2RhdGFfaW5wdXQoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvdGlwYy9saW5rLmMtMTI5MC1cbm5ldC90aXBjL2xpbmsuYzoxMjkxOi8qIHRpcGNfbGlua19pbnB1dCAtIHByb2Nlc3MgcGFja2V0IHRoYXQgaGFzIHBhc3NlZCBsaW5rIHByb3RvY29sIGNoZWNrXG5uZXQvdGlwYy9saW5rLmMtMTI5Mi0gKlxuLS1cbm5ldC90aXBjL2xpbmsuYy0xMjk0LSAqL1xubmV0L3RpcGMvbGluay5jOjEyOTU6c3RhdGljIGludCB0aXBjX2xpbmtfaW5wdXQoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC90aXBjL2xpbmsuYy0xMjk2LVx0XHRcdCAgIHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSxcbi0tXG5uZXQvdGlwYy9saW5rLmM9MTM1NT1zdGF0aWMgaW50IHRpcGNfbGlua190bmxfcmN2KHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3RpcGMvbGluay5jLTE0MTEtXHRcdGlmICghdGlwY19kYXRhX2lucHV0KGwsIGlza2IsIGlucHV0cSkpXG5uZXQvdGlwYy9saW5rLmM6MTQxMjpcdFx0XHRyYyB8PSB0aXBjX2xpbmtfaW5wdXQobCwgaXNrYiwgaW5wdXRxLCByZWFzbV9za2IpO1xubmV0L3RpcGMvbGluay5jLTE0MTMtXHRcdGlmICh1bmxpa2VseShyYykpXG4tLVxubmV0L3RpcGMvbGluay5jPTE3Nzc9aW50IHRpcGNfbGlua19yY3Yoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvdGlwYy9saW5rLmMtMTgyOS1cdFx0ZWxzZSBpZiAoIXRpcGNfZGF0YV9pbnB1dChsLCBza2IsIGwtXHUwMDNlaW5wdXRxKSlcbm5ldC90aXBjL2xpbmsuYzoxODMwOlx0XHRcdHJjIHw9IHRpcGNfbGlua19pbnB1dChsLCBza2IsIGwtXHUwMDNlaW5wdXRxLCBcdTAwMjZsLVx1MDAzZXJlYXNtX2J1Zik7XG5uZXQvdGlwYy9saW5rLmMtMTgzMS1cdFx0aWYgKHVubGlrZWx5KCYjNDM7JiM0MztsLVx1MDAzZXJjdl91bmFja2VkIFx1MDAzZT0gVElQQ19NSU5fTElOS19XSU4pKVxuLS1cbm5ldC90aXBjL2xpbmsuaD0xMDc9aW50IHRpcGNfbGlua194bWl0KHN0cnVjdCB0aXBjX2xpbmsgKmxpbmssIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsXG5uZXQvdGlwYy9saW5rLmgtMTA4LVx0XHQgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cSk7XG5uZXQvdGlwYy9saW5rLmg6MTA5OnN0cnVjdCBza19idWZmX2hlYWQgKnRpcGNfbGlua19pbnB1dHEoc3RydWN0IHRpcGNfbGluayAqbCk7XG5uZXQvdGlwYy9saW5rLmgtMTEwLXUxNiB0aXBjX2xpbmtfcmN2X254dChzdHJ1Y3QgdGlwY19saW5rICpsKTtcbi0tXG5uZXQvdGlwYy9ub2RlLmM9MTkzOD1zdGF0aWMgYm9vbCB0aXBjX25vZGVfY2hlY2tfc3RhdGUoc3RydWN0IHRpcGNfbm9kZSAqbiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvdGlwYy9ub2RlLmMtMjAwOC1cdFx0XHRcdFx0XHQgIFwmIzM0O25vZGUgbGluayBkb3duIFx1MDAzYy0gZmFpbG92ZXIhXCYjMzQ7KTtcbm5ldC90aXBjL25vZGUuYzoyMDA5Olx0XHRcdHRpcGNfc2tiX3F1ZXVlX3NwbGljZV90YWlsX2luaXQodGlwY19saW5rX2lucHV0cShwbCksXG5uZXQvdGlwYy9ub2RlLmM6MjAxMDpcdFx0XHRcdFx0XHRcdHRpcGNfbGlua19pbnB1dHEobCkpO1xubmV0L3RpcGMvbm9kZS5jLTIwMTEtXHRcdH1cbi0tXG5uZXQvdGlwYy9ub2RlLmMtMjA2My1cdFx0fVxubmV0L3RpcGMvbm9kZS5jOjIwNjQ6XHRcdGlucHV0cV9sZW4gPSBza2JfcXVldWVfbGVuKHRpcGNfbGlua19pbnB1dHEocGwpKTtcbm5ldC90aXBjL25vZGUuYy0yMDY1LVx0XHRkbHZfbnh0ID0gdGlwY19saW5rX3Jjdl9ueHQocGwpIC0gaW5wdXRxX2xlbjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzg4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUSVBDIExpbmsgSW5wdXQgRnVuY3Rpb24qKgoKT2theSwgc28gYHRpcGNfbGlua19pbnB1dGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgaW1tZWRpYXRlbHkgbmFycm93cyBkb3duIHRoZSBzY29wZSBvZiB3aGVyZSBJIG5lZWQgdG8gbG9vayBmb3IgaXRzIHVzYWdlLiBJdCYjMzk7cyBjYWxsZWQgZnJvbSBgdGlwY19saW5rX3RubF9yY3ZgIGFuZCBgdGlwY19saW5rX3JjdmAsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBmdW5jdGlvbiBuYW1lLiBOb3csIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgaW1wbGljYXRpb25zIG9mIGB0aXBjX2xpbmtfaW5wdXRgIGFuZCBpdHMgcGxhY2UgaW4gdGhlIHN5c3RlbSwgSSBuZWVkIHRvIGtub3cgdGhlIGNhbGxpbmcgY29udGV4dCBvZiBgdGlwY19saW5rX3JjdmAuIExldCYjMzk7cyB0cmFjZSBiYWNrIGFuZCBzZWUgd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBhY3R1YWxseSBpbnZva2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IHRvIGdyYXNwIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIGNoYW5nZXMgb3IgaXNzdWVzIHdpdGhpbiBgdGlwY19saW5rX2lucHV0YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxOTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aXBjX2xpbmtfcmN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3RpcGMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL2JjYXN0LmM9NDM2PWludCB0aXBjX2JjYXN0X3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3RpcGMvYmNhc3QuYy00NTMtXHRlbHNlXG5uZXQvdGlwYy9iY2FzdC5jOjQ1NDpcdFx0cmMgPSB0aXBjX2xpbmtfcmN2KGwsIHNrYiwgTlVMTCk7XG5uZXQvdGlwYy9iY2FzdC5jLTQ1NS1cdHRpcGNfYmNhc3RfdW5sb2NrKG5ldCk7XG4tLVxubmV0L3RpcGMvbGluay5jPTQyMz1pbnQgdGlwY19saW5rX21zcyhzdHJ1Y3QgdGlwY19saW5rICpsKVxuLS1cbm5ldC90aXBjL2xpbmsuYy00MzEtXG5uZXQvdGlwYy9saW5rLmM6NDMyOnUxNiB0aXBjX2xpbmtfcmN2X254dChzdHJ1Y3QgdGlwY19saW5rICpsKVxubmV0L3RpcGMvbGluay5jLTQzMy17XG4tLVxubmV0L3RpcGMvbGluay5jPTE3NDc9c3RhdGljIGludCB0aXBjX2xpbmtfYnVpbGRfbmFja19tc2coc3RydWN0IHRpcGNfbGluayAqbCxcbi0tXG5uZXQvdGlwYy9saW5rLmMtMTc3MS1cbm5ldC90aXBjL2xpbmsuYzoxNzcyOi8qIHRpcGNfbGlua19yY3YgLSBwcm9jZXNzIFRJUEMgcGFja2V0cy9tZXNzYWdlcyBhcnJpdmluZyBmcm9tIG9mZi1ub2RlXG5uZXQvdGlwYy9saW5rLmMtMTc3My0gKiBAbDogdGhlIGxpbmsgdGhhdCBzaG91bGQgaGFuZGxlIHRoZSBtZXNzYWdlXG4tLVxubmV0L3RpcGMvbGluay5jLTE3NzYtICovXG5uZXQvdGlwYy9saW5rLmM6MTc3NzppbnQgdGlwY19saW5rX3JjdihzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3RpcGMvbGluay5jLTE3NzgtXHRcdCAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpXG4tLVxubmV0L3RpcGMvbGluay5oPTEwOT1zdHJ1Y3Qgc2tfYnVmZl9oZWFkICp0aXBjX2xpbmtfaW5wdXRxKHN0cnVjdCB0aXBjX2xpbmsgKmwpO1xubmV0L3RpcGMvbGluay5oOjExMDp1MTYgdGlwY19saW5rX3Jjdl9ueHQoc3RydWN0IHRpcGNfbGluayAqbCk7XG5uZXQvdGlwYy9saW5rLmgtMTExLXUxNiB0aXBjX2xpbmtfYWNrZWQoc3RydWN0IHRpcGNfbGluayAqbCk7XG4tLVxubmV0L3RpcGMvbGluay5oPTEzMT1pbnQgdGlwY19saW5rX3RpbWVvdXQoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpO1xubmV0L3RpcGMvbGluay5oOjEzMjppbnQgdGlwY19saW5rX3JjdihzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3RpcGMvbGluay5oLTEzMy1cdFx0ICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cSk7XG4tLVxubmV0L3RpcGMvbm9kZS5jPTk1OD1zdGF0aWMgdm9pZCB0aXBjX25vZGVfbGlua19mYWlsb3ZlcihzdHJ1Y3QgdGlwY19ub2RlICpuLCBzdHJ1Y3QgdGlwY19saW5rICpsLFxuLS1cbm5ldC90aXBjL25vZGUuYy05NzItXG5uZXQvdGlwYy9ub2RlLmM6OTczOlx0bi1cdTAwM2VzeW5jX3BvaW50ID0gdGlwY19saW5rX3Jjdl9ueHQodG5sKSAmIzQzOyAoVTE2X01BWCAvIDIgLSAxKTtcbm5ldC90aXBjL25vZGUuYy05NzQtXHR0aXBjX2xpbmtfZmFpbG92ZXJfcHJlcGFyZShsLCB0bmwsIHhtaXRxKTtcbi0tXG5uZXQvdGlwYy9ub2RlLmM9OTg4PXN0YXRpYyB2b2lkIF9fdGlwY19ub2RlX2xpbmtfZG93bihzdHJ1Y3QgdGlwY19ub2RlICpuLCBpbnQgKmJlYXJlcl9pZCxcbi0tXG5uZXQvdGlwYy9ub2RlLmMtMTA1MS1cdHRpcGNfbm9kZV9mc21fZXZ0KG4sIE5PREVfU1lOQ0hfRU5EX0VWVCk7XG5uZXQvdGlwYy9ub2RlLmM6MTA1MjpcdG4tXHUwMDNlc3luY19wb2ludCA9IHRpcGNfbGlua19yY3Zfbnh0KHRubCkgJiM0MzsgKFUxNl9NQVggLyAyIC0gMSk7XG5uZXQvdGlwYy9ub2RlLmMtMTA1My1cdHRpcGNfbGlua190bmxfcHJlcGFyZShsLCB0bmwsIEZBSUxPVkVSX01TRywgeG1pdHEpO1xuLS1cbm5ldC90aXBjL25vZGUuYz0xOTM4PXN0YXRpYyBib29sIHRpcGNfbm9kZV9jaGVja19zdGF0ZShzdHJ1Y3QgdGlwY19ub2RlICpuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC90aXBjL25vZGUuYy0xOTU4LVx0XHRyZXR1cm4gZmFsc2U7XG5uZXQvdGlwYy9ub2RlLmM6MTk1OTpcdHJjdl9ueHQgPSB0aXBjX2xpbmtfcmN2X254dChsKTtcbm5ldC90aXBjL25vZGUuYy0xOTYwLVxuLS1cbm5ldC90aXBjL25vZGUuYy0yMDY0LVx0XHRpbnB1dHFfbGVuID0gc2tiX3F1ZXVlX2xlbih0aXBjX2xpbmtfaW5wdXRxKHBsKSk7XG5uZXQvdGlwYy9ub2RlLmM6MjA2NTpcdFx0ZGx2X254dCA9IHRpcGNfbGlua19yY3Zfbnh0KHBsKSAtIGlucHV0cV9sZW47XG5uZXQvdGlwYy9ub2RlLmMtMjA2Ni1cdFx0aWYgKG1vcmUoZGx2X254dCwgbi1cdTAwM2VzeW5jX3BvaW50KSkge1xuLS1cbm5ldC90aXBjL25vZGUuYz0yMDkxPXZvaWQgdGlwY19yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGlwY19iZWFyZXIgKmIpXG4tLVxubmV0L3RpcGMvbm9kZS5jLTIxNzEtXHRcdGlmIChsZS1cdTAwM2VsaW5rKSB7XG5uZXQvdGlwYy9ub2RlLmM6MjE3MjpcdFx0XHRyYyA9IHRpcGNfbGlua19yY3YobGUtXHUwMDNlbGluaywgc2tiLCBcdTAwMjZ4bWl0cSk7XG5uZXQvdGlwYy9ub2RlLmMtMjE3My1cdFx0XHRza2IgPSBOVUxMO1xuLS1cbm5ldC90aXBjL25vZGUuYy0yMTg1LVx0XHRcdGlmIChsZS1cdTAwM2VsaW5rKSB7XG5uZXQvdGlwYy9ub2RlLmM6MjE4NjpcdFx0XHRcdHJjID0gdGlwY19saW5rX3JjdihsZS1cdTAwM2VsaW5rLCBza2IsIFx1MDAyNnhtaXRxKTtcbm5ldC90aXBjL25vZGUuYy0yMTg3LVx0XHRcdFx0c2tiID0gTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDM2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIHRoZSBUSVBDIFJlY2VpdmUgUGF0aCoqCgpBbHJpZ2h0LCBzbyBgdGlwY19yY3ZgIGlzIHRoZSBjZW50cmFsIGZ1bmN0aW9uIGZvciByZWNlaXZpbmcgVElQQyBwYWNrZXRzLiBJZiBJJiMzOTttIGdvaW5nIHRvIHVuZGVyc3RhbmQgdGhlIHdob2xlIHJlY2VpdmUgcHJvY2VzcywgSSBuZWVkIHRvIGtub3cgd2hlcmUgdGhpcyB0aGluZyBpcyBhY3R1YWxseSBjYWxsZWQuIExldCYjMzk7cyBmaXJlIHVwIHRoZSBzZWFyY2ggdG9vbHMgYW5kIHNlZSB3aGVyZSB0aGlzIGtleSBmdW5jdGlvbiBpcyBpbnZva2VkIHdpdGhpbiB0aGUga2VybmVsLiBUaW1lIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxOTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aXBjX3JjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90aXBjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGlwYy9iZWFyZXIuYz02NTc9c3RhdGljIGludCB0aXBjX2wyX3Jjdl9tc2coc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvdGlwYy9iZWFyZXIuYy02NjgtXHRcdFRJUENfU0tCX0NCKHNrYiktXHUwMDNlZmxhZ3MgPSAwO1xubmV0L3RpcGMvYmVhcmVyLmM6NjY5Olx0XHR0aXBjX3JjdihkZXZfbmV0KGItXHUwMDNlcHQuZGV2KSwgc2tiLCBiKTtcbm5ldC90aXBjL2JlYXJlci5jLTY3MC1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxubmV0L3RpcGMvYmVhcmVyLmg9MTc5PXN0cnVjdCB0aXBjX2JlYXJlcl9uYW1lcyB7XG4tLVxubmV0L3RpcGMvYmVhcmVyLmgtMTg3LVxubmV0L3RpcGMvYmVhcmVyLmg6MTg4OnZvaWQgdGlwY19yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGlwY19iZWFyZXIgKmIpO1xubmV0L3RpcGMvYmVhcmVyLmgtMTg5LVxuLS1cbm5ldC90aXBjL2NyeXB0by5jPTk2NT1zdGF0aWMgdm9pZCB0aXBjX2FlYWRfZGVjcnlwdF9kb25lKHZvaWQgKmRhdGEsIGludCBlcnIpXG4tLVxubmV0L3RpcGMvY3J5cHRvLmMtOTg4LVx0XHRpZiAobGlrZWx5KHRlc3RfYml0KDAsIFx1MDAyNmItXHUwMDNldXApKSlcbm5ldC90aXBjL2NyeXB0by5jOjk4OTpcdFx0XHR0aXBjX3JjdihuZXQsIHNrYiwgYik7XG5uZXQvdGlwYy9jcnlwdG8uYy05OTAtXHRcdGVsc2Vcbi0tXG5uZXQvdGlwYy9jcnlwdG8uYz0xNjg5PWludCB0aXBjX2NyeXB0b194bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKipza2IsXG4tLVxubmV0L3RpcGMvY3J5cHRvLmMtMTgwMC0gKiBhcyB0aGUgY2FsbGJhY2ssIHRoZSBlbmNyeXB0aW9uIGhlYWRlciBhbmQgYXV0aCB0YWcgd2lsbCBiZSB0cmltbWVkIG91dFxubmV0L3RpcGMvY3J5cHRvLmM6MTgwMTogKiBiZWZvcmUgZm9yd2FyZGluZyB0byB0aXBjX3JjdigpIHZpYSB0aGUgdGlwY19jcnlwdG9fcmN2X2NvbXBsZXRlKCkuXG5uZXQvdGlwYy9jcnlwdG8uYy0xODAyLSAqIE90aGVyd2lzZSwgdGhlIHNrYiB3aWxsIGJlIGZyZWVkIVxuLS1cbm5ldC90aXBjL2NyeXB0by5jPTE4OTc9c3RhdGljIHZvaWQgdGlwY19jcnlwdG9fcmN2X2NvbXBsZXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfYWVhZCAqYWVhZCxcbi0tXG5uZXQvdGlwYy9jcnlwdG8uYy0xOTE4LVx0XHRcdGlmIChlcnIgPT0gLUVCQURNU0cgXHUwMDI2XHUwMDI2ICgqc2tiKS1cdTAwM2VuZXh0KVxubmV0L3RpcGMvY3J5cHRvLmM6MTkxOTpcdFx0XHRcdHRpcGNfcmN2KG5ldCwgKCpza2IpLVx1MDAzZW5leHQsIGIpO1xubmV0L3RpcGMvY3J5cHRvLmMtMTkyMC1cdFx0XHRnb3RvIGZyZWVfc2tiO1xuLS1cbm5ldC90aXBjL2NyeXB0by5jLTE5NjItcmN2OlxubmV0L3RpcGMvY3J5cHRvLmM6MTk2MzpcdC8qIFJlbW92ZSBlaGRyIFx1MDAyNiBhdXRoLiB0YWcgcHJpb3IgdG8gdGlwY19yY3YoKSAqL1xubmV0L3RpcGMvY3J5cHRvLmMtMTk2NC1cdGVoZHIgPSAoc3RydWN0IHRpcGNfZWhkciAqKSgqc2tiKS1cdTAwM2VkYXRhO1xuLS1cbm5ldC90aXBjL25vZGUuYz0xOTM4PXN0YXRpYyBib29sIHRpcGNfbm9kZV9jaGVja19zdGF0ZShzdHJ1Y3QgdGlwY19ub2RlICpuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC90aXBjL25vZGUuYy0yMDgyLS8qKlxubmV0L3RpcGMvbm9kZS5jOjIwODM6ICogdGlwY19yY3YgLSBwcm9jZXNzIFRJUEMgcGFja2V0cy9tZXNzYWdlcyBhcnJpdmluZyBmcm9tIG9mZi1ub2RlXG5uZXQvdGlwYy9ub2RlLmMtMjA4NC0gKiBAbmV0OiB0aGUgYXBwbGljYWJsZSBuZXQgbmFtZXNwYWNlXG4tLVxubmV0L3RpcGMvbm9kZS5jLTIwOTAtICovXG5uZXQvdGlwYy9ub2RlLmM6MjA5MTp2b2lkIHRpcGNfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRpcGNfYmVhcmVyICpiKVxubmV0L3RpcGMvbm9kZS5jLTIwOTIte1xuLS1cbm5ldC90aXBjL3RvcHNydi5jPTYzMz1zdGF0aWMgaW50IHRpcGNfdG9wc3J2X3dvcmtfc3RhcnQoc3RydWN0IHRpcGNfdG9wc3J2ICpzKVxubmV0L3RpcGMvdG9wc3J2LmMtNjM0LXtcbm5ldC90aXBjL3RvcHNydi5jOjYzNTpcdHMtXHUwMDNlcmN2X3dxID0gYWxsb2Nfb3JkZXJlZF93b3JrcXVldWUoXCYjMzQ7dGlwY19yY3ZcJiMzNDssIDApO1xubmV0L3RpcGMvdG9wc3J2LmMtNjM2LVx0aWYgKCFzLVx1MDAzZXJjdl93cSkge1xuLS1cbm5ldC90aXBjL3VkcF9tZWRpYS5jPTM2OD1zdGF0aWMgaW50IHRpcGNfdWRwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC90aXBjL3VkcF9tZWRpYS5jLTM4OC1cdFx0VElQQ19TS0JfQ0Ioc2tiKS1cdTAwM2VmbGFncyA9IDA7XG5uZXQvdGlwYy91ZHBfbWVkaWEuYzozODk6XHRcdHRpcGNfcmN2KHNvY2tfbmV0KHNrKSwgc2tiLCBiKTtcbm5ldC90aXBjL3VkcF9tZWRpYS5jLTM5MC1cdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTk6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc0NgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDEzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRJUEMgUGFja2V0IFJlY2VwdGlvbiBQYXRoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgVElQQyBtZXNzYWdlcyBhcmUgcmVjZWl2ZWQsIGFuZCBgdGlwY19yY3ZgIGlzIHRoZSBjZW50cmFsIGZ1bmN0aW9uIGhlcmUuIEkgc2VlIGl0JiMzOTtzIHRyaWdnZXJlZCBmcm9tIHR3byBkaXN0aW5jdCBwYXRoczogYHRpcGNfbDJfcmN2X21zZ2AsIHdoaWNoIGhhbmRsZXMgdGhlIEV0aGVybmV0LWJhc2VkIGRpcmVjdCB0cmFuc21pc3Npb24gdXNpbmcgdGhlIEVUSF9QX1RJUEMgcHJvdG9jb2wsIGFuZCBgdGlwY191ZHBfcmVjdmAsIHdoaWNoIGlzIGhhbmRsaW5nIHRoZSBVRFAgZW5jYXBzdWxhdGlvbiBvZiBUSVBDIG1lc3NhZ2VzLiBUaGF0IGNvbmZpcm1zIHRoZSBjb2RlIHBhdGggSSYjMzk7bSBleGFtaW5pbmcgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgdGhyb3VnaCBuZXR3b3JrIHBhY2tldHMsIGFuZCBhbnkgY2hhbmdlcyBJIG1ha2UgaGVyZSB3aWxsIGhhdmUgYSBmdW5jdGlvbmFsIGltcGFjdC4KCk5vdywgdGhpcyBwYXJ0aWN1bGFyIGNoYW5nZSBsaW1pdHMgdGhlIHRvdGFsIHNpemUgb2YgYSByZWFzc2VtYmxlZCBmcmFnbWVudCBjaGFpbi4gSXQgc2VlbXMgdGhlIGxpbWl0IGlzIHNldCBhdCBgMiAqIE1BWF9NU0dfU0laRWAuIFRoaXMgaXMgdGhlIGltcG9ydGFudCBwYXJ0IC0gdGhlIHNpemUgb2YgZnJhZ21lbnRzIGlzIG5vdyBkb3VibGUgdGhhdCBvZiBgTUFYX01TR19TSVpFYCwgd2hpY2ggaXMgZGVmaW5lZCBzb21ld2hlcmUgaW4gYG5ldC90aXBjL21zZy5oYCBvciBhIHJlbGF0ZWQgaGVhZGVyIGZpbGUuIEkgbmVlZCB0byB2ZXJpZnkgd2hhdCB0aGUgYWN0dWFsIHZhbHVlIG9mIGBNQVhfTVNHX1NJWkVgIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gTGV0JiMzOTtzIGdvIGNoZWNrIHRoYXQgZGVmaW5pdGlvbiB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTk6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TUFYX01TR19TSVpFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3RpcGMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL2dyb3VwLmMtNDctXG5uZXQvdGlwYy9ncm91cC5jOjQ4OiNkZWZpbmUgQURWX1VOSVQgKCgoTUFYX01TR19TSVpFICYjNDM7IE1BWF9IX1NJWkUpIC8gRkxPV0NUTF9CTEtfU1opICYjNDM7IDEpXG5uZXQvdGlwYy9ncm91cC5jLTQ5LSNkZWZpbmUgQURWX0lETEUgQURWX1VOSVRcbi0tXG5uZXQvdGlwYy9saW5rLmM9MTI5NT1zdGF0aWMgaW50IHRpcGNfbGlua19pbnB1dChzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC90aXBjL2xpbmsuYy0xMzE5LVx0XHRcdC8qIEEgbGVnaXRpbWF0ZSByZWFzc2VtYmxlZCBtZXNzYWdlIGNhbiBuZXZlciBleGNlZWRcbm5ldC90aXBjL2xpbmsuYzoxMzIwOlx0XHRcdCAqIE1BWF9NU0dfU0laRS4gTGltaXQgdGhlIG1lbW9yeSBvbmUgaW5jb21wbGV0ZVxubmV0L3RpcGMvbGluay5jLTEzMjEtXHRcdFx0ICogZnJhZ21lbnQgY2hhaW4gY2FuIHBpbiwgb3RoZXJ3aXNlIGEgcGVlciBjYW4gZ3Jvd1xuLS1cbm5ldC90aXBjL2xpbmsuYy0xMzI2LVx0XHRcdCAqL1xubmV0L3RpcGMvbGluay5jOjEzMjc6XHRcdFx0aWYgKCgqcmVhc21fc2tiKS1cdTAwM2V0cnVlc2l6ZSBcdTAwM2UgMiAqIE1BWF9NU0dfU0laRSkge1xubmV0L3RpcGMvbGluay5jLTEzMjgtXHRcdFx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwmIzM0O0ZyYWdtZW50IGNoYWluIGxhcmdlciB0aGFuICV1IGJ5dGVzLCBkcm9wcGluZ1xcblwmIzM0Oyxcbm5ldC90aXBjL2xpbmsuYzoxMzI5Olx0XHRcdFx0XHRcdCAgICAyICogTUFYX01TR19TSVpFKTtcbm5ldC90aXBjL2xpbmsuYy0xMzMwLVx0XHRcdFx0a2ZyZWVfc2tiKCpyZWFzbV9za2IpO1xuLS1cbm5ldC90aXBjL21zZy5jPTM4ND1pbnQgdGlwY19tc2dfYnVpbGQoc3RydWN0IHRpcGNfbXNnICptaGRyLCBzdHJ1Y3QgbXNnaGRyICptLCBpbnQgb2Zmc2V0LFxuLS1cbm5ldC90aXBjL21zZy5jLTQwNS1cdFx0aWYgKHVubGlrZWx5KCFza2IpKSB7XG5uZXQvdGlwYy9tc2cuYzo0MDY6XHRcdFx0aWYgKHBrdG1heCAhPSBNQVhfTVNHX1NJWkUpXG5uZXQvdGlwYy9tc2cuYy00MDctXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbi0tXG5uZXQvdGlwYy9tc2cuaD00OT1zdHJ1Y3QgcGxpc3Q7XG4tLVxubmV0L3RpcGMvbXNnLmgtMTAwLVxubmV0L3RpcGMvbXNnLmg6MTAxOiNkZWZpbmUgTUFYX01TR19TSVpFIChNQVhfSF9TSVpFICYjNDM7IFRJUENfTUFYX1VTRVJfTVNHX1NJWkUpXG5uZXQvdGlwYy9tc2cuaC0xMDItI2RlZmluZSBUSVBDX01FRElBX0lORk9fT0ZGU0VUXHQ1XG4tLVxubmV0L3RpcGMvbm9kZS5jPTIwNT1pbnQgdGlwY19ub2RlX2dldF9tdHUoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkciwgdTMyIHNlbCwgYm9vbCBjb25uZWN0ZWQpXG4tLVxubmV0L3RpcGMvbm9kZS5jLTIwOC1cdGludCBiZWFyZXJfaWQ7XG5uZXQvdGlwYy9ub2RlLmM6MjA5Olx0dW5zaWduZWQgaW50IG10dSA9IE1BWF9NU0dfU0laRTtcbm5ldC90aXBjL25vZGUuYy0yMTAtXG4tLVxubmV0L3RpcGMvbm9kZS5jLTIxNC1cbm5ldC90aXBjL25vZGUuYzoyMTU6XHQvKiBBbGxvdyBNQVhfTVNHX1NJWkUgd2hlbiBidWlsZGluZyBjb25uZWN0aW9uIG9yaWVudGVkIG1lc3NhZ2Vcbm5ldC90aXBjL25vZGUuYy0yMTYtXHQgKiBpZiB0aGV5IGFyZSBpbiB0aGUgc2FtZSBjb3JlIG5ldHdvcmtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0yNTM9c3RhdGljIHZvaWQgdHNrX3NldF9uYWdsZShzdHJ1Y3QgdGlwY19zb2NrICp0c2spXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMjY0LVx0LyogTGltaXQgbm9kZSBsb2NhbCBidWZmZXIgc2l6ZSB0byBhdm9pZCByZWNlaXZlIHF1ZXVlIG92ZXJmbG93ICovXG5uZXQvdGlwYy9zb2NrZXQuYzoyNjU6XHRpZiAodHNrLVx1MDAzZW1heF9wa3QgPT0gTUFYX01TR19TSVpFKVxubmV0L3RpcGMvc29ja2V0LmMtMjY2LVx0XHR0c2stXHUwMDNlbWF4bmFnbGUgPSAxNTAwO1xuLS1cbm5ldC90aXBjL3NvY2tldC5oLTQyLSNkZWZpbmUgRkxPV0NUTF9NU0dfV0lOIDUxMlxubmV0L3RpcGMvc29ja2V0Lmg6NDM6I2RlZmluZSBGTE9XQ1RMX01TR19MSU0gKChGTE9XQ1RMX01TR19XSU4gKiAyICYjNDM7IDEpICogU0tCX1RSVUVTSVpFKE1BWF9NU0dfU0laRSkpXG5uZXQvdGlwYy9zb2NrZXQuaC00NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTk6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODEwMQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVElQQyBMaW5rIElucHV0IENoYW5nZSoqCgpPa2F5LCBzbyB0aGUgY2hhbmdlIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlzIHNwZWNpZmljYWxseSB3aXRoaW4gYHRpcGNfbGlua19pbnB1dGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIEl0IGxvb2tzIGxpa2UgYHRpcGNfcmN2YCBpcyB0aGUgZW50cnkgcG9pbnQsIHdoaWNoIGNhbGxzIGB0aXBjX25vZGVfY2hlY2tfc3RhdGVgLiBJJiMzOTttIHJlYXNvbmFibHkgY29uZmlkZW50IHRoYXQgYHRpcGNfbm9kZV9jaGVja19zdGF0ZWAgdGhlbiBjYWxscyBgdGlwY19saW5rX3JjdmAsIGFuZCBmaW5hbGx5LCB3ZSBhcnJpdmUgYXQgYHRpcGNfbGlua19pbnB1dGAuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBwcm9iYWJsZSBmbG93LiBHaXZlbiB0aGlzLCBJIHNob3VsZCBzdGFydCBteSBkZWVwZXIgZGl2ZSBpbnRvIHRoZSBjb2RlIGJ5IGZvY3VzaW5nIG9uIGB0aXBjX2xpbmtfcmN2YC4gVGhpcyBpcyB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgdG8gcHJvcGVybHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBtb2RpZmljYXRpb25zIG1hZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE5OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RpcGNfbGlua19yY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGlwYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvYmNhc3QuYz00MzY9aW50IHRpcGNfYmNhc3RfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvdGlwYy9iY2FzdC5jLTQ1My1cdGVsc2Vcbm5ldC90aXBjL2JjYXN0LmM6NDU0Olx0XHRyYyA9IHRpcGNfbGlua19yY3YobCwgc2tiLCBOVUxMKTtcbm5ldC90aXBjL2JjYXN0LmMtNDU1LVx0dGlwY19iY2FzdF91bmxvY2sobmV0KTtcbi0tXG5uZXQvdGlwYy9saW5rLmM9NDIzPWludCB0aXBjX2xpbmtfbXNzKHN0cnVjdCB0aXBjX2xpbmsgKmwpXG4tLVxubmV0L3RpcGMvbGluay5jLTQzMS1cbm5ldC90aXBjL2xpbmsuYzo0MzI6dTE2IHRpcGNfbGlua19yY3Zfbnh0KHN0cnVjdCB0aXBjX2xpbmsgKmwpXG5uZXQvdGlwYy9saW5rLmMtNDMzLXtcbi0tXG5uZXQvdGlwYy9saW5rLmM9MTc0Nz1zdGF0aWMgaW50IHRpcGNfbGlua19idWlsZF9uYWNrX21zZyhzdHJ1Y3QgdGlwY19saW5rICpsLFxuLS1cbm5ldC90aXBjL2xpbmsuYy0xNzcxLVxubmV0L3RpcGMvbGluay5jOjE3NzI6LyogdGlwY19saW5rX3JjdiAtIHByb2Nlc3MgVElQQyBwYWNrZXRzL21lc3NhZ2VzIGFycml2aW5nIGZyb20gb2ZmLW5vZGVcbm5ldC90aXBjL2xpbmsuYy0xNzczLSAqIEBsOiB0aGUgbGluayB0aGF0IHNob3VsZCBoYW5kbGUgdGhlIG1lc3NhZ2Vcbi0tXG5uZXQvdGlwYy9saW5rLmMtMTc3Ni0gKi9cbm5ldC90aXBjL2xpbmsuYzoxNzc3OmludCB0aXBjX2xpbmtfcmN2KHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvdGlwYy9saW5rLmMtMTc3OC1cdFx0ICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cSlcbi0tXG5uZXQvdGlwYy9saW5rLmg9MTA5PXN0cnVjdCBza19idWZmX2hlYWQgKnRpcGNfbGlua19pbnB1dHEoc3RydWN0IHRpcGNfbGluayAqbCk7XG5uZXQvdGlwYy9saW5rLmg6MTEwOnUxNiB0aXBjX2xpbmtfcmN2X254dChzdHJ1Y3QgdGlwY19saW5rICpsKTtcbm5ldC90aXBjL2xpbmsuaC0xMTEtdTE2IHRpcGNfbGlua19hY2tlZChzdHJ1Y3QgdGlwY19saW5rICpsKTtcbi0tXG5uZXQvdGlwYy9saW5rLmg9MTMxPWludCB0aXBjX2xpbmtfdGltZW91dChzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cSk7XG5uZXQvdGlwYy9saW5rLmg6MTMyOmludCB0aXBjX2xpbmtfcmN2KHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvdGlwYy9saW5rLmgtMTMzLVx0XHQgIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKTtcbi0tXG5uZXQvdGlwYy9ub2RlLmM9OTU4PXN0YXRpYyB2b2lkIHRpcGNfbm9kZV9saW5rX2ZhaWxvdmVyKHN0cnVjdCB0aXBjX25vZGUgKm4sIHN0cnVjdCB0aXBjX2xpbmsgKmwsXG4tLVxubmV0L3RpcGMvbm9kZS5jLTk3Mi1cbm5ldC90aXBjL25vZGUuYzo5NzM6XHRuLVx1MDAzZXN5bmNfcG9pbnQgPSB0aXBjX2xpbmtfcmN2X254dCh0bmwpICYjNDM7IChVMTZfTUFYIC8gMiAtIDEpO1xubmV0L3RpcGMvbm9kZS5jLTk3NC1cdHRpcGNfbGlua19mYWlsb3Zlcl9wcmVwYXJlKGwsIHRubCwgeG1pdHEpO1xuLS1cbm5ldC90aXBjL25vZGUuYz05ODg9c3RhdGljIHZvaWQgX190aXBjX25vZGVfbGlua19kb3duKHN0cnVjdCB0aXBjX25vZGUgKm4sIGludCAqYmVhcmVyX2lkLFxuLS1cbm5ldC90aXBjL25vZGUuYy0xMDUxLVx0dGlwY19ub2RlX2ZzbV9ldnQobiwgTk9ERV9TWU5DSF9FTkRfRVZUKTtcbm5ldC90aXBjL25vZGUuYzoxMDUyOlx0bi1cdTAwM2VzeW5jX3BvaW50ID0gdGlwY19saW5rX3Jjdl9ueHQodG5sKSAmIzQzOyAoVTE2X01BWCAvIDIgLSAxKTtcbm5ldC90aXBjL25vZGUuYy0xMDUzLVx0dGlwY19saW5rX3RubF9wcmVwYXJlKGwsIHRubCwgRkFJTE9WRVJfTVNHLCB4bWl0cSk7XG4tLVxubmV0L3RpcGMvbm9kZS5jPTE5Mzg9c3RhdGljIGJvb2wgdGlwY19ub2RlX2NoZWNrX3N0YXRlKHN0cnVjdCB0aXBjX25vZGUgKm4sIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3RpcGMvbm9kZS5jLTE5NTgtXHRcdHJldHVybiBmYWxzZTtcbm5ldC90aXBjL25vZGUuYzoxOTU5Olx0cmN2X254dCA9IHRpcGNfbGlua19yY3Zfbnh0KGwpO1xubmV0L3RpcGMvbm9kZS5jLTE5NjAtXG4tLVxubmV0L3RpcGMvbm9kZS5jLTIwNjQtXHRcdGlucHV0cV9sZW4gPSBza2JfcXVldWVfbGVuKHRpcGNfbGlua19pbnB1dHEocGwpKTtcbm5ldC90aXBjL25vZGUuYzoyMDY1Olx0XHRkbHZfbnh0ID0gdGlwY19saW5rX3Jjdl9ueHQocGwpIC0gaW5wdXRxX2xlbjtcbm5ldC90aXBjL25vZGUuYy0yMDY2LVx0XHRpZiAobW9yZShkbHZfbnh0LCBuLVx1MDAzZXN5bmNfcG9pbnQpKSB7XG4tLVxubmV0L3RpcGMvbm9kZS5jPTIwOTE9dm9pZCB0aXBjX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0aXBjX2JlYXJlciAqYilcbi0tXG5uZXQvdGlwYy9ub2RlLmMtMjE3MS1cdFx0aWYgKGxlLVx1MDAzZWxpbmspIHtcbm5ldC90aXBjL25vZGUuYzoyMTcyOlx0XHRcdHJjID0gdGlwY19saW5rX3JjdihsZS1cdTAwM2VsaW5rLCBza2IsIFx1MDAyNnhtaXRxKTtcbm5ldC90aXBjL25vZGUuYy0yMTczLVx0XHRcdHNrYiA9IE5VTEw7XG4tLVxubmV0L3RpcGMvbm9kZS5jLTIxODUtXHRcdFx0aWYgKGxlLVx1MDAzZWxpbmspIHtcbm5ldC90aXBjL25vZGUuYzoyMTg2Olx0XHRcdFx0cmMgPSB0aXBjX2xpbmtfcmN2KGxlLVx1MDAzZWxpbmssIHNrYiwgXHUwMDI2eG1pdHEpO1xubmV0L3RpcGMvbm9kZS5jLTIxODctXHRcdFx0XHRza2IgPSBOVUxMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzYyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVElQQyBNZW1vcnkgR3Jvd3RoIFByZXZlbnRpb24gQ2hhbmdlKioKCk9rYXksIHNvIHRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlIHNlZW1zIHRvIGJlIHdpdGhpbiBgdGlwY19saW5rX2lucHV0YC4gSXQgbG9va3MgbGlrZSB0aGlzIGlzIGEgZnVuY3Rpb25hbCBpbXByb3ZlbWVudCwgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGFkZHJlc3MgYW5kIHByZXZlbnQgdW5ib3VuZGVkIG1lbW9yeSBncm93dGgg4oCTIGEgY3JpdGljYWwgaXNzdWUgaW4gYW55IG5ldHdvcmsgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24uIFRoZSBnb29kIG5ld3MgaXMsIGJhc2VkIG9uIHRoZSBpbmZvcm1hdGlvbiwgdGhpcyBpcyByZWFjaGFibGUgdGhyb3VnaCBzdGFuZGFyZCBUSVBDIHBhY2tldCBwcm9jZXNzaW5nLCBzbyB3ZSYjMzk7cmUgbm90IGxvb2tpbmcgYXQgc29tZSBvYnNjdXJlIGVkZ2UgY2FzZSBoZXJlLiBUaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBpcyBzdHJhaWdodGZvcndhcmQ6IGBUSVBDYC4gVGhhdCYjMzk7cyByZWFzb25hYmxlLgoKTm93LCB3aGVyZSBkbyB3ZSB0cmFjZSB0aGlzIHRocm91Z2ggdGhlIGNvZGU/IFRoZSBmb2N1cyBzeW1ib2xzIGZvciB0cmFjaW5nIHRoZSBwYXRoIHRocm91Z2ggdGhlIGZ1bmN0aW9ucyBzaG91bGQgYmUgZWl0aGVyIGB0aXBjX2xpbmtfcmN2YCBvciBgdGlwY19yY3ZgLiBMZXQmIzM5O3MgY2hlY2sgdGhvc2Ugb3V0LiBgdGlwY19yY3ZgIGxvb2tzIGxpa2UgdGhlIG1haW4gZW50cnkgcG9pbnQsIGFzIHlvdSYjMzk7ZCBleHBlY3QuIFRoZW4sIGB0aXBjX2xpbmtfcmN2YCwgd2hpY2ggaXMgc3BlY2lmaWMgdG8gbGluayByZWNlcHRpb24sIHByb2JhYmx5IGdldHMgdXMgY2xvc2VyIHRvIGB0aXBjX2xpbmtfaW5wdXRgLiBXZSBhbHNvIGhhdmUgYHRpcGNfYmNhc3RfcmN2YCBmb3IgYnJvYWRjYXN0LCBgdGlwY19saW5rX3RubF9yY3ZgIGZvciB0dW5uZWxzLCBgdGlwY191ZHBfcmVjdmAgZm9yIFVEUCwgYW5kIGB0aXBjX2wyX3Jjdl9tc2dgIGZvciBMMiBtZXNzYWdlcy4KCkFscmlnaHQsIGxldCYjMzk7cyBjaXJjbGUgYmFjayB0byBgdGlwY19saW5rX2lucHV0YCBhbmQgc3RhcnQgZGlnZ2luZyBpbiBmcm9tIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxOTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aXBjX2xpbmtfaW5wdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGlwYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvbGluay5jPTMzOD11bnNpZ25lZCBsb25nIHRpcGNfbGlua190b2xlcmFuY2Uoc3RydWN0IHRpcGNfbGluayAqbClcbi0tXG5uZXQvdGlwYy9saW5rLmMtMzQyLVxubmV0L3RpcGMvbGluay5jOjM0MzpzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp0aXBjX2xpbmtfaW5wdXRxKHN0cnVjdCB0aXBjX2xpbmsgKmwpXG5uZXQvdGlwYy9saW5rLmMtMzQ0LXtcbi0tXG5uZXQvdGlwYy9saW5rLmM9MTI0ND1zdGF0aWMgYm9vbCB0aXBjX2RhdGFfaW5wdXQoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvdGlwYy9saW5rLmMtMTI5MC1cbm5ldC90aXBjL2xpbmsuYzoxMjkxOi8qIHRpcGNfbGlua19pbnB1dCAtIHByb2Nlc3MgcGFja2V0IHRoYXQgaGFzIHBhc3NlZCBsaW5rIHByb3RvY29sIGNoZWNrXG5uZXQvdGlwYy9saW5rLmMtMTI5Mi0gKlxuLS1cbm5ldC90aXBjL2xpbmsuYy0xMjk0LSAqL1xubmV0L3RpcGMvbGluay5jOjEyOTU6c3RhdGljIGludCB0aXBjX2xpbmtfaW5wdXQoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC90aXBjL2xpbmsuYy0xMjk2LVx0XHRcdCAgIHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSxcbi0tXG5uZXQvdGlwYy9saW5rLmM9MTM1NT1zdGF0aWMgaW50IHRpcGNfbGlua190bmxfcmN2KHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3RpcGMvbGluay5jLTE0MTEtXHRcdGlmICghdGlwY19kYXRhX2lucHV0KGwsIGlza2IsIGlucHV0cSkpXG5uZXQvdGlwYy9saW5rLmM6MTQxMjpcdFx0XHRyYyB8PSB0aXBjX2xpbmtfaW5wdXQobCwgaXNrYiwgaW5wdXRxLCByZWFzbV9za2IpO1xubmV0L3RpcGMvbGluay5jLTE0MTMtXHRcdGlmICh1bmxpa2VseShyYykpXG4tLVxubmV0L3RpcGMvbGluay5jPTE3Nzc9aW50IHRpcGNfbGlua19yY3Yoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvdGlwYy9saW5rLmMtMTgyOS1cdFx0ZWxzZSBpZiAoIXRpcGNfZGF0YV9pbnB1dChsLCBza2IsIGwtXHUwMDNlaW5wdXRxKSlcbm5ldC90aXBjL2xpbmsuYzoxODMwOlx0XHRcdHJjIHw9IHRpcGNfbGlua19pbnB1dChsLCBza2IsIGwtXHUwMDNlaW5wdXRxLCBcdTAwMjZsLVx1MDAzZXJlYXNtX2J1Zik7XG5uZXQvdGlwYy9saW5rLmMtMTgzMS1cdFx0aWYgKHVubGlrZWx5KCYjNDM7JiM0MztsLVx1MDAzZXJjdl91bmFja2VkIFx1MDAzZT0gVElQQ19NSU5fTElOS19XSU4pKVxuLS1cbm5ldC90aXBjL2xpbmsuaD0xMDc9aW50IHRpcGNfbGlua194bWl0KHN0cnVjdCB0aXBjX2xpbmsgKmxpbmssIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsXG5uZXQvdGlwYy9saW5rLmgtMTA4LVx0XHQgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cSk7XG5uZXQvdGlwYy9saW5rLmg6MTA5OnN0cnVjdCBza19idWZmX2hlYWQgKnRpcGNfbGlua19pbnB1dHEoc3RydWN0IHRpcGNfbGluayAqbCk7XG5uZXQvdGlwYy9saW5rLmgtMTEwLXUxNiB0aXBjX2xpbmtfcmN2X254dChzdHJ1Y3QgdGlwY19saW5rICpsKTtcbi0tXG5uZXQvdGlwYy9ub2RlLmM9MTkzOD1zdGF0aWMgYm9vbCB0aXBjX25vZGVfY2hlY2tfc3RhdGUoc3RydWN0IHRpcGNfbm9kZSAqbiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvdGlwYy9ub2RlLmMtMjAwOC1cdFx0XHRcdFx0XHQgIFwmIzM0O25vZGUgbGluayBkb3duIFx1MDAzYy0gZmFpbG92ZXIhXCYjMzQ7KTtcbm5ldC90aXBjL25vZGUuYzoyMDA5Olx0XHRcdHRpcGNfc2tiX3F1ZXVlX3NwbGljZV90YWlsX2luaXQodGlwY19saW5rX2lucHV0cShwbCksXG5uZXQvdGlwYy9ub2RlLmM6MjAxMDpcdFx0XHRcdFx0XHRcdHRpcGNfbGlua19pbnB1dHEobCkpO1xubmV0L3RpcGMvbm9kZS5jLTIwMTEtXHRcdH1cbi0tXG5uZXQvdGlwYy9ub2RlLmMtMjA2My1cdFx0fVxubmV0L3RpcGMvbm9kZS5jOjIwNjQ6XHRcdGlucHV0cV9sZW4gPSBza2JfcXVldWVfbGVuKHRpcGNfbGlua19pbnB1dHEocGwpKTtcbm5ldC90aXBjL25vZGUuYy0yMDY1LVx0XHRkbHZfbnh0ID0gdGlwY19saW5rX3Jjdl9ueHQocGwpIC0gaW5wdXRxX2xlbjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTk6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyODcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgYHRpcGNfbGlua19yY3ZgIHNlZW1zIGxpa2UgYSByZWFsbHkgc29saWQgZm9jdXMgZm9yIHRoaXMuIEkmIzM5O3ZlIGFsd2F5cyBmb3VuZCB0aGF0IGZ1bmN0aW9uIHRvIGJlIHBhcnRpY3VsYXJseSBpbnNpZ2h0ZnVsIGluIHRoaXMgYXJlYS4gQW5kLCB5b3Uga25vdywgYHRpcGNfcmN2YCBpcyBhbHNvIGEgdmVyeSBjb21wZWxsaW5nIGNhbmRpZGF0ZSBmb3IgY2xvc2VyIGV4YW1pbmF0aW9uLgoKQnV0IGJlZm9yZSBJIGdldCB0b28gZGVlcCBpbnRvIGVpdGhlciBvZiB0aG9zZSwgSSBzaG91bGQgcHJvYmFibHkgdGFrZSBhIG1vcmUgY29tcHJlaGVuc2l2ZSBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9uLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55IGltcG9ydGFudCBzZXR0aW5ncy4gVGhlIHByaW1hcnkgb25lLCBvZiBjb3Vyc2UsIGlzIGBDT05GSUdfVElQQ2AuIEkmIzM5O2xsIHdhbnQgdG8gdmVyaWZ5IHRoYXQuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBzdXBwb3J0aW5nIGNvbmZpZ3VyYXRpb25zIHRoYXQgbmVlZCBhIGNsb3NlciBsb29rLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aG9zZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTk6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRJUEMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGlwYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvS2NvbmZpZy01LVxubmV0L3RpcGMvS2NvbmZpZzo2Om1lbnVjb25maWcgVElQQ1xubmV0L3RpcGMvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7VGhlIFRJUEMgUHJvdG9jb2xcJiMzNDtcbi0tXG5uZXQvdGlwYy9LY29uZmlnLTIzLVxubmV0L3RpcGMvS2NvbmZpZzoyNDpjb25maWcgVElQQ19NRURJQV9JQlxubmV0L3RpcGMvS2NvbmZpZy0yNS1cdGJvb2wgXCYjMzQ7SW5maW5pQmFuZCBtZWRpYSB0eXBlIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvdGlwYy9LY29uZmlnLTI5LVx0ICBJUC1vdmVyLUluZmluaUJhbmQgZGV2aWNlcy5cbm5ldC90aXBjL0tjb25maWc6MzA6Y29uZmlnIFRJUENfTUVESUFfVURQXG5uZXQvdGlwYy9LY29uZmlnLTMxLVx0Ym9vbCBcJiMzNDtJUC9VRFAgbWVkaWEgdHlwZSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3RpcGMvS2NvbmZpZy0zNy1cbm5ldC90aXBjL0tjb25maWc6Mzg6Y29uZmlnIFRJUENfQ1JZUFRPXG5uZXQvdGlwYy9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtUSVBDIGVuY3J5cHRpb24gc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC90aXBjL0tjb25maWctNTItXG5uZXQvdGlwYy9LY29uZmlnOjUzOmNvbmZpZyBUSVBDX0RJQUdcbm5ldC90aXBjL0tjb25maWctNTQtXHR0cmlzdGF0ZSBcJiMzNDtUSVBDOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTk6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4MTIKCQkJCQkJCW91dHB1dDogMTI1CgkJCQkJCQl0aG91Z2h0czogNDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBUSVBDIENvbmZpZ3VyYXRpb24gQ2hhbmdlKioKCk9rYXksIHNvIHRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlIGxpZXMgd2l0aGluIGBUSVBDYCwgdGhlIG1haW4gY29uZmlndXJhdGlvbiBmaWxlLCBhcyBleHBlY3RlZC4gVGhlIHBhdGNoIGl0c2VsZiBmb2N1c2VzIG9uIHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgZGVuaWFsLW9mLXNlcnZpY2UgdnVsbmVyYWJpbGl0eSByZWxhdGVkIHRvIHJlYXNzZW1ibGVkIGZyYWdtZW50IGNoYWlucy4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIGEgY3J1Y2lhbCBjaGVjayB0byBkcm9wIGEgcmVhc3NlbWJsZWQgZnJhZ21lbnQgY2hhaW4gaWYgaXRzIHNpemUgZXhjZWVkcyBgMiAqIE1BWF9NU0dfU0laRWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGFsdGVyYXRpb247IHdlJiMzOTtyZSBhY3RpdmVseSBjaGFuZ2luZyBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIGNlcnRhaW4gbmV0d29yayBwYWNrZXRzIGJhc2VkIG9uIHNpemUuIFRoYXQgc2NyZWFtcyAmIzM0O2Z1enppbmcgdGFyZ2V0JiMzNDsgdG8gbWUsIHJpZ2h0IGF3YXkuIFNvIHRoZSBmb2N1cyBzeW1ib2xzIGZvciB0ZXN0aW5nIHdpbGwgZGVmaW5pdGVseSBiZSBgdGlwY19saW5rX3JjdmAgYW5kIGB0aXBjX3JjdmAuCgpOb3csIGxldCYjMzk7cyBqdXN0IG1ha2UgYWJzb2x1dGVseSBzdXJlIEkmIzM5O3ZlIGdvdCB0aGlzIHJpZ2h0LiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBgdGlwY19saW5rX2lucHV0YCBmdW5jdGlvbiB3aXRoaW4gYG5ldC90aXBjL2xpbmsuY2AuIEFoLCB5ZXMsIGhlcmUgaXQgaXM6CgpgYGBjCgkJaWYgKHRpcGNfYnVmX2FwcGVuZChyZWFzbV9za2IsICZhbXA7c2tiKSkgewoJCQlsLSZndDtzdGF0cy5yZWN2X2ZyYWdtZW50ZWQmIzQzOyYjNDM7OwoJCQl0aXBjX2RhdGFfaW5wdXQobCwgc2tiLCBpbnB1dHEpOwoJCX0gZWxzZSBpZiAoKnJlYXNtX3NrYikgewoJCQkvKiBBIGxlZ2l0aW1hdGUgcmVhc3NlbWJsZWQgbWVzc2FnZSBjYW4gbmV2ZXIgZXhjZWVkCgkJCSAqIE1BWF9NU0dfU0laRS4gTGltaXQgdGhlIG1lbW9yeSBvbmUgaW5jb21wbGV0ZQoJCQkgKiBmcmFnbWVudCBjaGFpbiBjYW4gcGluLCBvdGhlcndpc2UgYSBwZWVyIGNhbiBncm93CgkJCSAqIGtlcm5lbCBtZW1vcnkgdW5ib3VuZGVkbHkgYnkgc3RyZWFtaW5nIGZyYWdtZW50CgkJCSAqIGNoYWlucyB0aGF0IG5ldmVyIGNvbXBsZXRlOiByZWNlaXZlZCB0cmFmZmljIGFsc28KCQkJICogcmVzZXRzIHRoZSBsaW5rIHNpbGVuY2UgY291bnRlciwgc28gdGhlIGxpbmsgbmV2ZXIKCQkJICogdGltZXMgb3V0IGFuZCB0aGUgY2hhaW5zIGFyZSBuZXZlciBmcmVlZC4KCQkJICovCgkJCWlmICgoKnJlYXNtX3NrYiktJmd0O3RydWVzaXplICZndDsgMiAqIE1BWF9NU0dfU0laRSkgewoJCQkJcHJfd2Fybl9yYXRlbGltaXRlZCgmIzM0O0ZyYWdtZW50IGNoYWluIGxhcmdlciB0aGFuICV1IGJ5dGVzLCBkcm9wcGluZ1xuJiMzNDssCgkJCQkJCSAgICAyICogTUFYX01TR19TSVpFKTsKCQkJCWtmcmVlX3NrYigqcmVhc21fc2tiKTsKCQkJCSpyZWFzbV9za2IgPSBOVUxMOwoJCQl9CgkJfSBlbHNlIGlmICghbGlua19pc19iY19yY3ZsaW5rKGwpKSB7CgkJCXByX3dhcm5fcmF0ZWxpbWl0ZWQoJiMzNDtVbmFibGUgdG8gYnVpbGQgZnJhZ21lbnQgbGlzdFxuJiMzNDspOwoJCQlyZXR1cm4gdGlwY19saW5rX2ZzbV9ldnQobCwgTElOS19GQUlMVVJFX0VWVCk7CgkJfQpgYGAKCll1cCwgdGhhdCBjb25maXJtcyBpdC4gVGhpcyBpcyBhIHNvbGlkLCBmdW5jdGlvbmFsIGNoYW5nZS4gSXQgZGlyZWN0bHkgYWRkcmVzc2VzIHRoZSBpc3N1ZSBvZiBwb3RlbnRpYWxseSB1bmJvdW5kZWQgbWVtb3J5IGNvbnN1bXB0aW9uIGJ5IGludGVudGlvbmFsbHkgZHJvcHBpbmcgZXhjZXNzaXZlbHkgbGFyZ2UsIGluY29tcGxldGUgZnJhZ21lbnQgY2hhaW5zIGFuZCBmcmVlaW5nIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZW0uIFRoaXMgaXMgYWNjZXNzaWJsZSBmcm9tIHRoZSBgdGlwY19saW5rX3JjdmAgcGF0aCwgd2hpY2ggaXMgZXhhY3RseSB3aGVyZSBJIHRob3VnaHQgaXQgd291bGQgYmUuIE9rYXksIEkmIzM5O20gc2F0aXNmaWVkLiBOb3cgSSYjMzk7bSBnb2luZyB0byBzZXQgdXAgdGhlIGFwcHJvcHJpYXRlIGNvbmZpZ3VyYXRpb25zIGJhc2VkIG9uIHRoZXNlIGZpbmRpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxOTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VElQQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RpcGNfbGlua19yY3YmIzM0OywKICAgICYjMzQ7dGlwY19yY3YmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBUSVBDIGZyYWdtZW50IHJlYXNzZW1ibHkgbG9naWMgdG8gcHJldmVudCB1bmJvdW5kZWQgbWVtb3J5IGdyb3d0aC4gSXQgYWRkcyBhIGNoZWNrIHRvIGRyb3AgaW5jb21wbGV0ZSBmcmFnbWVudCBjaGFpbnMgaWYgdGhlaXIgc2l6ZSBleGNlZWRzIGAyICogTUFYX01TR19TSVpFYC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgbm9ybWFsIFRJUEMgcGFja2V0IHByb2Nlc3NpbmcgcGF0aHMsIHNwZWNpZmljYWxseSB0aHJvdWdoIGB0aXBjX3JjdmAgYW5kIGB0aXBjX2xpbmtfcmN2YC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VElQQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RpcGNfbGlua19yY3YmIzM0OywKICAgICYjMzQ7dGlwY19yY3YmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBUSVBDIGZyYWdtZW50IHJlYXNzZW1ibHkgbG9naWMgdG8gcHJldmVudCB1bmJvdW5kZWQgbWVtb3J5IGdyb3d0aC4gSXQgYWRkcyBhIGNoZWNrIHRvIGRyb3AgaW5jb21wbGV0ZSBmcmFnbWVudCBjaGFpbnMgaWYgdGhlaXIgc2l6ZSBleGNlZWRzIGAyICogTUFYX01TR19TSVpFYC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgbm9ybWFsIFRJUEMgcGFja2V0IHByb2Nlc3NpbmcgcGF0aHMsIHNwZWNpZmljYWxseSB0aHJvdWdoIGB0aXBjX3JjdmAgYW5kIGB0aXBjX2xpbmtfcmN2YC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTk6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxOTowNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgbWVtb3J5IGV4aGF1c3Rpb24gKERvUykgdnVsbmVyYWJpbGl0eSBpbiB0aGUgVElQQyBzdWJzeXN0ZW0gd2hlcmUgYSBwZWVyIGNvdWxkIHN0cmVhbSBpbmNvbXBsZXRlIGZyYWdtZW50IGNoYWlucyB0byB1bmJvdW5kZWRseSBncm93IGtlcm5lbCBtZW1vcnkuIFRoZSBmaXggaW50cm9kdWNlcyBhIHNpemUgbGltaXQgY2hlY2sgKGB0cnVlc2l6ZSBcdTAwM2UgMiAqIE1BWF9NU0dfU0laRWApIGZvciBpbmNvbXBsZXRlIHJlYXNzZW1ibGVkIG1lc3NhZ2VzIGFuZCBmcmVlcyB0aGUgc2tiIGlmIHRoZSBsaW1pdCBpcyBleGNlZWRlZC4gVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgdXNlci1zcGFjZSBjb3BpZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBidWcgYmVpbmcgZml4ZWQgaXMgcmVsYXRlZCB0byByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBtZW1vcnkgbGVha3MsIHdoaWNoIGFyZSBub3QgaW4gdGhlIHNjb3BlIG9mIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpLiBTdGFuZGFyZCBmdXp6aW5nIHdpdGggS0FTQU4gYW5kIGttZW1sZWFrIGlzIHN1ZmZpY2llbnQgZm9yIGRldGVjdGluZyBtZW1vcnkgY29ycnVwdGlvbiBvciBsZWFrIGlzc3VlcyBpbiB0aGlzIGNvbnRleHQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQxNDc5Y2FhYjQ5MmQxYWI4YTIzNTY4OGVmMzE4NjY5YmQ1MWFlYzkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxOCAxOTowNzowNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC90aXBjL2xpbmsuYyBiL25ldC90aXBjL2xpbmsuYwppbmRleCA0OWRmYzA5OGQ4OWIyLi5iZjYxYzlhYzRlYTIxIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9saW5rLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvbGluay5jCkBAIC0xMzE1LDcgJiM0MzsxMzE1LDIyIEBAIHN0YXRpYyBpbnQgdGlwY19saW5rX2lucHV0KHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmICpza2IsCiAJCWlmICh0aXBjX2J1Zl9hcHBlbmQocmVhc21fc2tiLCAmYW1wO3NrYikpIHsKIAkJCWwtJmd0O3N0YXRzLnJlY3ZfZnJhZ21lbnRlZCYjNDM7JiM0Mzs7CiAJCQl0aXBjX2RhdGFfaW5wdXQobCwgc2tiLCBpbnB1dHEpOwotCQl9IGVsc2UgaWYgKCEqcmVhc21fc2tiICZhbXA7JmFtcDsgIWxpbmtfaXNfYmNfcmN2bGluayhsKSkgewomIzQzOwkJfSBlbHNlIGlmICgqcmVhc21fc2tiKSB7CiYjNDM7CQkJLyogQSBsZWdpdGltYXRlIHJlYXNzZW1ibGVkIG1lc3NhZ2UgY2FuIG5ldmVyIGV4Y2VlZAomIzQzOwkJCSAqIE1BWF9NU0dfU0laRS4gTGltaXQgdGhlIG1lbW9yeSBvbmUgaW5jb21wbGV0ZQomIzQzOwkJCSAqIGZyYWdtZW50IGNoYWluIGNhbiBwaW4sIG90aGVyd2lzZSBhIHBlZXIgY2FuIGdyb3cKJiM0MzsJCQkgKiBrZXJuZWwgbWVtb3J5IHVuYm91bmRlZGx5IGJ5IHN0cmVhbWluZyBmcmFnbWVudAomIzQzOwkJCSAqIGNoYWlucyB0aGF0IG5ldmVyIGNvbXBsZXRlOiByZWNlaXZlZCB0cmFmZmljIGFsc28KJiM0MzsJCQkgKiByZXNldHMgdGhlIGxpbmsgc2lsZW5jZSBjb3VudGVyLCBzbyB0aGUgbGluayBuZXZlcgomIzQzOwkJCSAqIHRpbWVzIG91dCBhbmQgdGhlIGNoYWlucyBhcmUgbmV2ZXIgZnJlZWQuCiYjNDM7CQkJICovCiYjNDM7CQkJaWYgKCgqcmVhc21fc2tiKS0mZ3Q7dHJ1ZXNpemUgJmd0OyAyICogTUFYX01TR19TSVpFKSB7CiYjNDM7CQkJCXByX3dhcm5fcmF0ZWxpbWl0ZWQoJiMzNDtGcmFnbWVudCBjaGFpbiBsYXJnZXIgdGhhbiAldSBieXRlcywgZHJvcHBpbmdcbiYjMzQ7LAomIzQzOwkJCQkJCSAgICAyICogTUFYX01TR19TSVpFKTsKJiM0MzsJCQkJa2ZyZWVfc2tiKCpyZWFzbV9za2IpOwomIzQzOwkJCQkqcmVhc21fc2tiID0gTlVMTDsKJiM0MzsJCQl9CiYjNDM7CQl9IGVsc2UgaWYgKCFsaW5rX2lzX2JjX3JjdmxpbmsobCkpIHsKIAkJCXByX3dhcm5fcmF0ZWxpbWl0ZWQoJiMzNDtVbmFibGUgdG8gYnVpbGQgZnJhZ21lbnQgbGlzdFxuJiMzNDspOwogCQkJcmV0dXJuIHRpcGNfbGlua19mc21fZXZ0KGwsIExJTktfRkFJTFVSRV9FVlQpOwogCQl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjQ0CgkJCQkJCQlvdXRwdXQ6IDE3MQoJCQkJCQkJdGhvdWdodHM6IDU4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBUSVBDIEZyYWdtZW50IEhhbmRsaW5nIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW4gYG5ldC90aXBjL2xpbmsuY2AgYW5kIHRhcmdldHMgdGhlIGB0aXBjX2xpbmtfaW5wdXRgIGZ1bmN0aW9uLiBJdCYjMzk7cyBkZXNpZ25lZCB0byBhZGRyZXNzIGEgcG90ZW50aWFsIGRlbmlhbC1vZi1zZXJ2aWNlIHZ1bG5lcmFiaWxpdHkgcmVsYXRlZCB0byBmcmFnbWVudGVkIFRJUEMgbWVzc2FnZXMuIFRoZSBjb3JlIG9mIHRoZSBmaXggaXMgYSBzaXplIGNoZWNrIG9uIGByZWFzbV9za2JgIGFmdGVyIGB0aXBjX2J1Zl9hcHBlbmRgIHJldHVybnMgZmFsc2UuIEVzc2VudGlhbGx5LCBpZiB0aGUgZnJhZ21lbnQgY2hhaW4gaXNuJiMzOTt0IGNvbXBsZXRlIChvciB0aGVyZSYjMzk7cyBhbiBlcnJvciBpbiBhcHBlbmRpbmcpLCBhbmQgaWYgYHJlYXNtX3NrYmAgZXhpc3RzIGFuZCBpdHMgYHRydWVzaXplYCBleGNlZWRzIGAyICogTUFYX01TR19TSVpFYCwgdGhlbiBpdCYjMzk7cyBmcmVlZC4gVGhpcyBwcmV2ZW50cyBhbiBhdHRhY2tlciBmcm9tIHNlbmRpbmcgYSBmbG9vZCBvZiBmcmFnbWVudGVkIG1lc3NhZ2VzIHRoYXQgbmV2ZXIgZnVsbHkgcmVhc3NlbWJsZSwgdGhlcmVieSBjb25zdW1pbmcgdW5ib3VuZGVkIGFtb3VudHMgb2Yga2VybmVsIG1lbW9yeS4gQ3J1Y2lhbGx5LCB0aGUgY2hlY2sgYW5kIGZyZWUgb3BlcmF0aW9uIGlzIHBlcmZvcm1lZCBvbmx5IGlmIHRoZSBtYXhpbXVtIG1lc3NhZ2Ugc2l6ZSBpcyBleGNlZWRlZC4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhc3Nlc3MgdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBIb3dldmVyLCBhZnRlciBjYXJlZnVsIHJldmlldywgaXQgc2VlbXMgdGhlcmUmIzM5O3Mgbm8gcmlzayBpbiB0aGlzIGFyZWEuIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGl0JiMzOTtzIG5vdCBjb3B5aW5nIGRhdGEgdG8gdXNlciBzcGFjZSwgYW5kIGl0IGRvZXNuJiMzOTt0IGFwcGVhciB0byBiZSB1c2luZyBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoaXMgaXMgcHVyZWx5IGEgZGVmZW5zZSBhZ2FpbnN0IGEgbWVtb3J5IGxlYWsvRG9TIHNjZW5hcmlvLiBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1dCB0aGlzIGZpeCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHN1Y2ggcmlzay4gVGhlIHZ1bG5lcmFiaWxpdHkgYmVpbmcgYWRkcmVzc2VkIGlzIGEgbWVtb3J5IGV4aGF1c3Rpb24gaXNzdWUuIFN0YW5kYXJkIGZ1enppbmcsIG1lbW9yeSBsZWFrIGRldGVjdGlvbiB0b29scyAobGlrZSBga21lbWxlYWtgKSwgb3IgT09NIGRldGVjdG9ycyAqY291bGQqIGNhdGNoIHJlbGF0ZWQgaXNzdWVzLCBidXQgS01TQU4gaXMgbm90IHJlbGV2YW50IGhlcmUuCgpJIGRvdWJsZS1jaGVja2VkIHRoZSBjb2RlIHNuaXBwZXQgdG8gYmUgY2VydGFpbjogdGhlIGFkZGVkIGBpZmAgc3RhdGVtZW50IGNsZWFybHkgY2hlY2tzIHRoZSBzaXplIG9mIHRoZSByZWFzc2VtYmxlZCBTS0IgYW5kIGZyZWVzIGl0IGlmIHRvbyBsYXJnZSwgaW4gb3JkZXIgdG8gbGltaXQgdGhlIGFtb3VudCBvZiBtZW1vcnkgYSBzaW5nbGUgaW5jb21wbGV0ZSBmcmFnbWVudCBjaGFpbiBjYW4gb2NjdXB5LiBUaGlzIGlzIGEgdmVyeSB0YXJnZXRlZCBmaXggYWdhaW5zdCBhbiBvYnNlcnZlZCBiZWhhdmlvciB0aGF0IGlzIGxpa2VseSByZWxhdGVkIHRvIHRoZSBsaW5rJiMzOTtzIGtlZXAtYWxpdmUgbWVjaGFuaXNtcyBhbmQgdGhlIGxpbmsmIzM5O3MgYWJpbGl0eSB0byB0aW1lIG91dCBpbmNvbXBsZXRlIHRyYW5zbWlzc2lvbnMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHRvdWNoZWQsIG5vIHBvaW50ZXJzIGFyZSBsZWZ0IGRhbmdsaW5nIGFuZCBubyBtZW1vcnkgaXMgYWxsb2NhdGVkIHdpdGhpbiB0aGUgc2NvcGUgb2YgdGhpcyB2dWxuZXJhYmlsaXR5JiMzOTtzIG1pdGlnYXRpb24uIFRoZXJlZm9yZSwgdGhlIGBOZWVkc0tNU0FOYCBmbGFnIGlzIGRlZmluaXRlbHkgYGZhbHNlYC4gVGhpcyBwYXRjaCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBkZWZlbnNlIGFnYWluc3QgbWVtb3J5IGV4aGF1c3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE5OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIHBvdGVudGlhbCBtZW1vcnkgZXhoYXVzdGlvbiAoRG9TKSB2dWxuZXJhYmlsaXR5IGluIHRoZSBUSVBDIHN1YnN5c3RlbSB3aGVyZSBhIHBlZXIgY291bGQgc3RyZWFtIGluY29tcGxldGUgZnJhZ21lbnQgY2hhaW5zIHRvIHVuYm91bmRlZGx5IGdyb3cga2VybmVsIG1lbW9yeS4gVGhlIGZpeCBpbnRyb2R1Y2VzIGEgc2l6ZSBsaW1pdCBjaGVjayAoYHRydWVzaXplIFx1MDAzZSAyICogTUFYX01TR19TSVpFYCkgZm9yIGluY29tcGxldGUgcmVhc3NlbWJsZWQgbWVzc2FnZXMgYW5kIGZyZWVzIHRoZSBza2IgaWYgdGhlIGxpbWl0IGlzIGV4Y2VlZGVkLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciB1c2VyLXNwYWNlIGNvcGllcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGJ1ZyBiZWluZyBmaXhlZCBpcyByZWxhdGVkIHRvIHJlc291cmNlIG1hbmFnZW1lbnQgYW5kIG1lbW9yeSBsZWFrcywgd2hpY2ggYXJlIG5vdCBpbiB0aGUgc2NvcGUgb2YgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikuIFN0YW5kYXJkIGZ1enppbmcgd2l0aCBLQVNBTiBhbmQga21lbWxlYWsgaXMgc3VmZmljaWVudCBmb3IgZGV0ZWN0aW5nIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxlYWsgaXNzdWVzIGluIHRoaXMgY29udGV4dC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIHBvdGVudGlhbCBtZW1vcnkgZXhoYXVzdGlvbiAoRG9TKSB2dWxuZXJhYmlsaXR5IGluIHRoZSBUSVBDIHN1YnN5c3RlbSB3aGVyZSBhIHBlZXIgY291bGQgc3RyZWFtIGluY29tcGxldGUgZnJhZ21lbnQgY2hhaW5zIHRvIHVuYm91bmRlZGx5IGdyb3cga2VybmVsIG1lbW9yeS4gVGhlIGZpeCBpbnRyb2R1Y2VzIGEgc2l6ZSBsaW1pdCBjaGVjayAoYHRydWVzaXplIFx1MDAzZSAyICogTUFYX01TR19TSVpFYCkgZm9yIGluY29tcGxldGUgcmVhc3NlbWJsZWQgbWVzc2FnZXMgYW5kIGZyZWVzIHRoZSBza2IgaWYgdGhlIGxpbWl0IGlzIGV4Y2VlZGVkLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciB1c2VyLXNwYWNlIGNvcGllcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGJ1ZyBiZWluZyBmaXhlZCBpcyByZWxhdGVkIHRvIHJlc291cmNlIG1hbmFnZW1lbnQgYW5kIG1lbW9yeSBsZWFrcywgd2hpY2ggYXJlIG5vdCBpbiB0aGUgc2NvcGUgb2YgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikuIFN0YW5kYXJkIGZ1enppbmcgd2l0aCBLQVNBTiBhbmQga21lbWxlYWsgaXMgc3VmZmljaWVudCBmb3IgZGV0ZWN0aW5nIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxlYWsgaXNzdWVzIGluIHRoaXMgY29udGV4dC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMThUMTk6MDc6MDguMDExMjg1MjgxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA1NTM5ODM5OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVElQQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRpcGNfbGlua19yY3ZcIixcbiAgICBcInRpcGNfcmN2XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgbWVtb3J5IGV4aGF1c3Rpb24gKERvUykgdnVsbmVyYWJpbGl0eSBpbiB0aGUgVElQQyBzdWJzeXN0ZW0gd2hlcmUgYSBwZWVyIGNvdWxkIHN0cmVhbSBpbmNvbXBsZXRlIGZyYWdtZW50IGNoYWlucyB0byB1bmJvdW5kZWRseSBncm93IGtlcm5lbCBtZW1vcnkuIFRoZSBmaXggaW50cm9kdWNlcyBhIHNpemUgbGltaXQgY2hlY2sgKGB0cnVlc2l6ZSBcXHUwMDNlIDIgKiBNQVhfTVNHX1NJWkVgKSBmb3IgaW5jb21wbGV0ZSByZWFzc2VtYmxlZCBtZXNzYWdlcyBhbmQgZnJlZXMgdGhlIHNrYiBpZiB0aGUgbGltaXQgaXMgZXhjZWVkZWQuIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIHVzZXItc3BhY2UgY29waWVzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgYnVnIGJlaW5nIGZpeGVkIGlzIHJlbGF0ZWQgdG8gcmVzb3VyY2UgbWFuYWdlbWVudCBhbmQgbWVtb3J5IGxlYWtzLCB3aGljaCBhcmUgbm90IGluIHRoZSBzY29wZSBvZiBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKS4gU3RhbmRhcmQgZnV6emluZyB3aXRoIEtBU0FOIGFuZCBrbWVtbGVhayBpcyBzdWZmaWNpZW50IGZvciBkZXRlY3RpbmcgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbGVhayBpc3N1ZXMgaW4gdGhpcyBjb250ZXh0LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVElQQyBmcmFnbWVudCByZWFzc2VtYmx5IGxvZ2ljIHRvIHByZXZlbnQgdW5ib3VuZGVkIG1lbW9yeSBncm93dGguIEl0IGFkZHMgYSBjaGVjayB0byBkcm9wIGluY29tcGxldGUgZnJhZ21lbnQgY2hhaW5zIGlmIHRoZWlyIHNpemUgZXhjZWVkcyBgMiAqIE1BWF9NU0dfU0laRWAuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIG5vcm1hbCBUSVBDIHBhY2tldCBwcm9jZXNzaW5nIHBhdGhzLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCBgdGlwY19yY3ZgIGFuZCBgdGlwY19saW5rX3JjdmAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE5OjA3OjA4LjAxMTI5MTQ2MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU5NzY1NzQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDE0NzljYWFiNDkyZDFhYjhhMjM1Njg4ZWYzMTg2NjliZDUxYWVjOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAxOCAxOTowNzowNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9saW5rLmMgYi9uZXQvdGlwYy9saW5rLmNcXG5pbmRleCA0OWRmYzA5OGQ4OWIyLi5iZjYxYzlhYzRlYTIxIDEwMDY0NFxcbi0tLSBhL25ldC90aXBjL2xpbmsuY1xcbisrKyBiL25ldC90aXBjL2xpbmsuY1xcbkBAIC0xMzE1LDcgKzEzMTUsMjIgQEAgc3RhdGljIGludCB0aXBjX2xpbmtfaW5wdXQoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0aWYgKHRpcGNfYnVmX2FwcGVuZChyZWFzbV9za2IsIFxcdTAwMjZza2IpKSB7XFxuIFxcdFxcdFxcdGwtXFx1MDAzZXN0YXRzLnJlY3ZfZnJhZ21lbnRlZCsrO1xcbiBcXHRcXHRcXHR0aXBjX2RhdGFfaW5wdXQobCwgc2tiLCBpbnB1dHEpO1xcbi1cXHRcXHR9IGVsc2UgaWYgKCEqcmVhc21fc2tiIFxcdTAwMjZcXHUwMDI2ICFsaW5rX2lzX2JjX3JjdmxpbmsobCkpIHtcXG4rXFx0XFx0fSBlbHNlIGlmICgqcmVhc21fc2tiKSB7XFxuK1xcdFxcdFxcdC8qIEEgbGVnaXRpbWF0ZSByZWFzc2VtYmxlZCBtZXNzYWdlIGNhbiBuZXZlciBleGNlZWRcXG4rXFx0XFx0XFx0ICogTUFYX01TR19TSVpFLiBMaW1pdCB0aGUgbWVtb3J5IG9uZSBpbmNvbXBsZXRlXFxuK1xcdFxcdFxcdCAqIGZyYWdtZW50IGNoYWluIGNhbiBwaW4sIG90aGVyd2lzZSBhIHBlZXIgY2FuIGdyb3dcXG4rXFx0XFx0XFx0ICoga2VybmVsIG1lbW9yeSB1bmJvdW5kZWRseSBieSBzdHJlYW1pbmcgZnJhZ21lbnRcXG4rXFx0XFx0XFx0ICogY2hhaW5zIHRoYXQgbmV2ZXIgY29tcGxldGU6IHJlY2VpdmVkIHRyYWZmaWMgYWxzb1xcbitcXHRcXHRcXHQgKiByZXNldHMgdGhlIGxpbmsgc2lsZW5jZSBjb3VudGVyLCBzbyB0aGUgbGluayBuZXZlclxcbitcXHRcXHRcXHQgKiB0aW1lcyBvdXQgYW5kIHRoZSBjaGFpbnMgYXJlIG5ldmVyIGZyZWVkLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0aWYgKCgqcmVhc21fc2tiKS1cXHUwMDNldHJ1ZXNpemUgXFx1MDAzZSAyICogTUFYX01TR19TSVpFKSB7XFxuK1xcdFxcdFxcdFxcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXFxcIkZyYWdtZW50IGNoYWluIGxhcmdlciB0aGFuICV1IGJ5dGVzLCBkcm9wcGluZ1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIDIgKiBNQVhfTVNHX1NJWkUpO1xcbitcXHRcXHRcXHRcXHRrZnJlZV9za2IoKnJlYXNtX3NrYik7XFxuK1xcdFxcdFxcdFxcdCpyZWFzbV9za2IgPSBOVUxMO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH0gZWxzZSBpZiAoIWxpbmtfaXNfYmNfcmN2bGluayhsKSkge1xcbiBcXHRcXHRcXHRwcl93YXJuX3JhdGVsaW1pdGVkKFxcXCJVbmFibGUgdG8gYnVpbGQgZnJhZ21lbnQgbGlzdFxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdHJldHVybiB0aXBjX2xpbmtfZnNtX2V2dChsLCBMSU5LX0ZBSUxVUkVfRVZUKTtcXG4gXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTowNzowOC41NzE4ODEwNTRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozOTIxNDEyMzczOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUSVBDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGlwY19saW5rX3JjdlwiLFxuICAgIFwidGlwY19yY3ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFRJUEMgZnJhZ21lbnQgcmVhc3NlbWJseSBsb2dpYyB0byBwcmV2ZW50IHVuYm91bmRlZCBtZW1vcnkgZ3Jvd3RoLiBJdCBhZGRzIGEgY2hlY2sgdG8gZHJvcCBpbmNvbXBsZXRlIGZyYWdtZW50IGNoYWlucyBpZiB0aGVpciBzaXplIGV4Y2VlZHMgYDIgKiBNQVhfTVNHX1NJWkVgLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBub3JtYWwgVElQQyBwYWNrZXQgcHJvY2Vzc2luZyBwYXRocywgc3BlY2lmaWNhbGx5IHRocm91Z2ggYHRpcGNfcmN2YCBhbmQgYHRpcGNfbGlua19yY3ZgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkMTQ3OWNhYWI0OTJkMWFiOGEyMzU2ODhlZjMxODY2OWJkNTFhZWM5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMTk6MDc6MDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9saW5rLmMgYi9uZXQvdGlwYy9saW5rLmNcbmluZGV4IDQ5ZGZjMDk4ZDg5YjIuLmJmNjFjOWFjNGVhMjEgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9saW5rLmNcbisrKyBiL25ldC90aXBjL2xpbmsuY1xuQEAgLTEzMTUsNyArMTMxNSwyMiBAQCBzdGF0aWMgaW50IHRpcGNfbGlua19pbnB1dChzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRpZiAodGlwY19idWZfYXBwZW5kKHJlYXNtX3NrYiwgXHUwMDI2c2tiKSkge1xuIFx0XHRcdGwtXHUwMDNlc3RhdHMucmVjdl9mcmFnbWVudGVkKys7XG4gXHRcdFx0dGlwY19kYXRhX2lucHV0KGwsIHNrYiwgaW5wdXRxKTtcbi1cdFx0fSBlbHNlIGlmICghKnJlYXNtX3NrYiBcdTAwMjZcdTAwMjYgIWxpbmtfaXNfYmNfcmN2bGluayhsKSkge1xuK1x0XHR9IGVsc2UgaWYgKCpyZWFzbV9za2IpIHtcbitcdFx0XHQvKiBBIGxlZ2l0aW1hdGUgcmVhc3NlbWJsZWQgbWVzc2FnZSBjYW4gbmV2ZXIgZXhjZWVkXG4rXHRcdFx0ICogTUFYX01TR19TSVpFLiBMaW1pdCB0aGUgbWVtb3J5IG9uZSBpbmNvbXBsZXRlXG4rXHRcdFx0ICogZnJhZ21lbnQgY2hhaW4gY2FuIHBpbiwgb3RoZXJ3aXNlIGEgcGVlciBjYW4gZ3Jvd1xuK1x0XHRcdCAqIGtlcm5lbCBtZW1vcnkgdW5ib3VuZGVkbHkgYnkgc3RyZWFtaW5nIGZyYWdtZW50XG4rXHRcdFx0ICogY2hhaW5zIHRoYXQgbmV2ZXIgY29tcGxldGU6IHJlY2VpdmVkIHRyYWZmaWMgYWxzb1xuK1x0XHRcdCAqIHJlc2V0cyB0aGUgbGluayBzaWxlbmNlIGNvdW50ZXIsIHNvIHRoZSBsaW5rIG5ldmVyXG4rXHRcdFx0ICogdGltZXMgb3V0IGFuZCB0aGUgY2hhaW5zIGFyZSBuZXZlciBmcmVlZC5cbitcdFx0XHQgKi9cbitcdFx0XHRpZiAoKCpyZWFzbV9za2IpLVx1MDAzZXRydWVzaXplIFx1MDAzZSAyICogTUFYX01TR19TSVpFKSB7XG4rXHRcdFx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwiRnJhZ21lbnQgY2hhaW4gbGFyZ2VyIHRoYW4gJXUgYnl0ZXMsIGRyb3BwaW5nXFxuXCIsXG4rXHRcdFx0XHRcdFx0ICAgIDIgKiBNQVhfTVNHX1NJWkUpO1xuK1x0XHRcdFx0a2ZyZWVfc2tiKCpyZWFzbV9za2IpO1xuK1x0XHRcdFx0KnJlYXNtX3NrYiA9IE5VTEw7XG4rXHRcdFx0fVxuK1x0XHR9IGVsc2UgaWYgKCFsaW5rX2lzX2JjX3JjdmxpbmsobCkpIHtcbiBcdFx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwiVW5hYmxlIHRvIGJ1aWxkIGZyYWdtZW50IGxpc3RcXG5cIik7XG4gXHRcdFx0cmV0dXJuIHRpcGNfbGlua19mc21fZXZ0KGwsIExJTktfRkFJTFVSRV9FVlQpO1xuIFx0XHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTowNzowOC41NzE4ODI1ODVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Njk4NTM2NDExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVElQQyBMaW5rIElucHV0IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC90aXBjL2xpbmsuY2AsIHNwZWNpZmljYWxseSB0aGUgYHRpcGNfbGlua19pbnB1dGAgZnVuY3Rpb24uIEl0IHNlZW1zIHRoZXkndmUgYWRkZWQgYSBjcnVjaWFsIGNoZWNrIHdpdGhpbiB0aGUgZnJhZ21lbnQgcmVhc3NlbWJseSBwcm9jZXNzLiBUaGUgY29yZSBvZiBpdCBpbnZvbHZlcyBwcmV2ZW50aW5nIGV4Y2Vzc2l2ZSBtZW1vcnkgdXNhZ2Ugd2hlbiBkZWFsaW5nIHdpdGggaW5jb21wbGV0ZSBmcmFnbWVudCBjaGFpbnMsIHdoaWNoIGlzIGEgY2xhc3NpYyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eS5cblxuVGhlIHBhdGNoJ3MgbG9naWMgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogaXQncyBhZGRpbmcgYW4gZXhwbGljaXQgY2hlY2sgZm9yIGAoKnJlYXNtX3NrYiktXHUwMDNldHJ1ZXNpemUgXHUwMDNlIDIgKiBNQVhfTVNHX1NJWkVgIHdpdGhpbiB0aGF0IGB0aXBjX2xpbmtfaW5wdXRgIGZ1bmN0aW9uLiBJZiB0aGUgcmVhc3NlbWJsZWQgZnJhZ21lbnQgY2hhaW4gZ2V0cyB0b28gbGFyZ2Ug4oCTIGV4Y2VlZGluZyB0d2ljZSB0aGUgbWF4aW11bSBtZXNzYWdlIHNpemUg4oCTIGl0J3MgZ29pbmcgdG8gZHJvcCB0aGUgY2hhaW4gZW50aXJlbHksIHNldHRpbmcgYCpyZWFzbV9za2JgIHRvIGBOVUxMYC4gVGhpcyBpcyBhIHNvbGlkLCBmdW5jdGlvbmFsIGZpeCB0byBwcmV2ZW50IHVuYm91bmRlZCBtZW1vcnkgZ3Jvd3RoLCBlc3NlbnRpYWxseSBhIERvUyBwcm90ZWN0aW9uIGluIHRoZSBtYWtpbmcsIGFuZCBpdCdzIGdvb2QgdG8gc2VlIHByb2FjdGl2ZSBtZWFzdXJlcyBsaWtlIHRoaXMuXG5cbkknbGwgcXVpY2tseSBwdWxsIHVwIGBuZXQvdGlwYy9saW5rLmNgIGFuZCB0YWtlIGEgbG9vayBhdCBgdGlwY19saW5rX2lucHV0YCBkaXJlY3RseSB0byB2ZXJpZnkgdGhlIGltcGxlbWVudGF0aW9uLiBUaGVuIEknbGwgbG9vayBmb3IgYHRpcGNfbGlua19pbnB1dGAgYW5kIGB0aXBjX2J1Zl9hcHBlbmRgIHRvIGdldCBhIGJldHRlciBzZW5zZSBvZiBob3cgdGhvc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQgYW5kIHdoZXJlIHRoZSBwYXRjaCBpcyBvcGVyYXRpbmcgaW4gdGhlIHdpZGVyIFRJUEMgY29udGV4dC4gSXQncyBhbHdheXMgaW1wb3J0YW50IHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgd2hlbiBldmFsdWF0aW5nIGEgY2hhbmdlIGxpa2UgdGhpcy4gVGhlIGZhY3QgdGhhdCBgQ09ORklHX1RJUENgIGlzIGludm9sdmVkIGhlbHBzIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgd2lkZXIgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI0NywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE5OjA3OjE0LjI3MDQyMzAyNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzIwNDkyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aXBjX2xpbmtfaW5wdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3RpcGMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL2xpbmsuYz0zMzg9dW5zaWduZWQgbG9uZyB0aXBjX2xpbmtfdG9sZXJhbmNlKHN0cnVjdCB0aXBjX2xpbmsgKmwpXFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtMzQyLVxcbm5ldC90aXBjL2xpbmsuYzozNDM6c3RydWN0IHNrX2J1ZmZfaGVhZCAqdGlwY19saW5rX2lucHV0cShzdHJ1Y3QgdGlwY19saW5rICpsKVxcbm5ldC90aXBjL2xpbmsuYy0zNDQte1xcbi0tXFxubmV0L3RpcGMvbGluay5jPTEyNDQ9c3RhdGljIGJvb2wgdGlwY19kYXRhX2lucHV0KHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtMTI5MC1cXG5uZXQvdGlwYy9saW5rLmM6MTI5MTovKiB0aXBjX2xpbmtfaW5wdXQgLSBwcm9jZXNzIHBhY2tldCB0aGF0IGhhcyBwYXNzZWQgbGluayBwcm90b2NvbCBjaGVja1xcbm5ldC90aXBjL2xpbmsuYy0xMjkyLSAqXFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtMTI5NC0gKi9cXG5uZXQvdGlwYy9saW5rLmM6MTI5NTpzdGF0aWMgaW50IHRpcGNfbGlua19pbnB1dChzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC90aXBjL2xpbmsuYy0xMjk2LVxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSxcXG4tLVxcbm5ldC90aXBjL2xpbmsuYz0xMzU1PXN0YXRpYyBpbnQgdGlwY19saW5rX3RubF9yY3Yoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy0xNDExLVxcdFxcdGlmICghdGlwY19kYXRhX2lucHV0KGwsIGlza2IsIGlucHV0cSkpXFxubmV0L3RpcGMvbGluay5jOjE0MTI6XFx0XFx0XFx0cmMgfD0gdGlwY19saW5rX2lucHV0KGwsIGlza2IsIGlucHV0cSwgcmVhc21fc2tiKTtcXG5uZXQvdGlwYy9saW5rLmMtMTQxMy1cXHRcXHRpZiAodW5saWtlbHkocmMpKVxcbi0tXFxubmV0L3RpcGMvbGluay5jPTE3Nzc9aW50IHRpcGNfbGlua19yY3Yoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy0xODI5LVxcdFxcdGVsc2UgaWYgKCF0aXBjX2RhdGFfaW5wdXQobCwgc2tiLCBsLVxcdTAwM2VpbnB1dHEpKVxcbm5ldC90aXBjL2xpbmsuYzoxODMwOlxcdFxcdFxcdHJjIHw9IHRpcGNfbGlua19pbnB1dChsLCBza2IsIGwtXFx1MDAzZWlucHV0cSwgXFx1MDAyNmwtXFx1MDAzZXJlYXNtX2J1Zik7XFxubmV0L3RpcGMvbGluay5jLTE4MzEtXFx0XFx0aWYgKHVubGlrZWx5KCsrbC1cXHUwMDNlcmN2X3VuYWNrZWQgXFx1MDAzZT0gVElQQ19NSU5fTElOS19XSU4pKVxcbi0tXFxubmV0L3RpcGMvbGluay5oPTEwNz1pbnQgdGlwY19saW5rX3htaXQoc3RydWN0IHRpcGNfbGluayAqbGluaywgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcXG5uZXQvdGlwYy9saW5rLmgtMTA4LVxcdFxcdCAgIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKTtcXG5uZXQvdGlwYy9saW5rLmg6MTA5OnN0cnVjdCBza19idWZmX2hlYWQgKnRpcGNfbGlua19pbnB1dHEoc3RydWN0IHRpcGNfbGluayAqbCk7XFxubmV0L3RpcGMvbGluay5oLTExMC11MTYgdGlwY19saW5rX3Jjdl9ueHQoc3RydWN0IHRpcGNfbGluayAqbCk7XFxuLS1cXG5uZXQvdGlwYy9ub2RlLmM9MTkzOD1zdGF0aWMgYm9vbCB0aXBjX25vZGVfY2hlY2tfc3RhdGUoc3RydWN0IHRpcGNfbm9kZSAqbiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC90aXBjL25vZGUuYy0yMDA4LVxcdFxcdFxcdFxcdFxcdFxcdCAgXFxcIm5vZGUgbGluayBkb3duIFxcdTAwM2MtIGZhaWxvdmVyIVxcXCIpO1xcbm5ldC90aXBjL25vZGUuYzoyMDA5OlxcdFxcdFxcdHRpcGNfc2tiX3F1ZXVlX3NwbGljZV90YWlsX2luaXQodGlwY19saW5rX2lucHV0cShwbCksXFxubmV0L3RpcGMvbm9kZS5jOjIwMTA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0dGlwY19saW5rX2lucHV0cShsKSk7XFxubmV0L3RpcGMvbm9kZS5jLTIwMTEtXFx0XFx0fVxcbi0tXFxubmV0L3RpcGMvbm9kZS5jLTIwNjMtXFx0XFx0fVxcbm5ldC90aXBjL25vZGUuYzoyMDY0OlxcdFxcdGlucHV0cV9sZW4gPSBza2JfcXVldWVfbGVuKHRpcGNfbGlua19pbnB1dHEocGwpKTtcXG5uZXQvdGlwYy9ub2RlLmMtMjA2NS1cXHRcXHRkbHZfbnh0ID0gdGlwY19saW5rX3Jjdl9ueHQocGwpIC0gaW5wdXRxX2xlbjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTk6MDc6MTQuMzIzNjMzODA0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE0Mjc0NTQ0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRJUEMgTGluayBJbnB1dCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIGB0aXBjX2xpbmtfaW5wdXRgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IGltbWVkaWF0ZWx5IG5hcnJvd3MgZG93biB0aGUgc2NvcGUgb2Ygd2hlcmUgSSBuZWVkIHRvIGxvb2sgZm9yIGl0cyB1c2FnZS4gSXQncyBjYWxsZWQgZnJvbSBgdGlwY19saW5rX3RubF9yY3ZgIGFuZCBgdGlwY19saW5rX3JjdmAsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBmdW5jdGlvbiBuYW1lLiBOb3csIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgaW1wbGljYXRpb25zIG9mIGB0aXBjX2xpbmtfaW5wdXRgIGFuZCBpdHMgcGxhY2UgaW4gdGhlIHN5c3RlbSwgSSBuZWVkIHRvIGtub3cgdGhlIGNhbGxpbmcgY29udGV4dCBvZiBgdGlwY19saW5rX3JjdmAuIExldCdzIHRyYWNlIGJhY2sgYW5kIHNlZSB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGludm9rZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgdG8gZ3Jhc3AgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgY2hhbmdlcyBvciBpc3N1ZXMgd2l0aGluIGB0aXBjX2xpbmtfaW5wdXRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzg4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTk6MDc6MTcuNDY2MzgyNjlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkwNDk5NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGlwY19saW5rX3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGlwYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3RpcGMvYmNhc3QuYz00MzY9aW50IHRpcGNfYmNhc3RfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC90aXBjL2JjYXN0LmMtNDUzLVxcdGVsc2VcXG5uZXQvdGlwYy9iY2FzdC5jOjQ1NDpcXHRcXHRyYyA9IHRpcGNfbGlua19yY3YobCwgc2tiLCBOVUxMKTtcXG5uZXQvdGlwYy9iY2FzdC5jLTQ1NS1cXHR0aXBjX2JjYXN0X3VubG9jayhuZXQpO1xcbi0tXFxubmV0L3RpcGMvbGluay5jPTQyMz1pbnQgdGlwY19saW5rX21zcyhzdHJ1Y3QgdGlwY19saW5rICpsKVxcbi0tXFxubmV0L3RpcGMvbGluay5jLTQzMS1cXG5uZXQvdGlwYy9saW5rLmM6NDMyOnUxNiB0aXBjX2xpbmtfcmN2X254dChzdHJ1Y3QgdGlwY19saW5rICpsKVxcbm5ldC90aXBjL2xpbmsuYy00MzMte1xcbi0tXFxubmV0L3RpcGMvbGluay5jPTE3NDc9c3RhdGljIGludCB0aXBjX2xpbmtfYnVpbGRfbmFja19tc2coc3RydWN0IHRpcGNfbGluayAqbCxcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy0xNzcxLVxcbm5ldC90aXBjL2xpbmsuYzoxNzcyOi8qIHRpcGNfbGlua19yY3YgLSBwcm9jZXNzIFRJUEMgcGFja2V0cy9tZXNzYWdlcyBhcnJpdmluZyBmcm9tIG9mZi1ub2RlXFxubmV0L3RpcGMvbGluay5jLTE3NzMtICogQGw6IHRoZSBsaW5rIHRoYXQgc2hvdWxkIGhhbmRsZSB0aGUgbWVzc2FnZVxcbi0tXFxubmV0L3RpcGMvbGluay5jLTE3NzYtICovXFxubmV0L3RpcGMvbGluay5jOjE3Nzc6aW50IHRpcGNfbGlua19yY3Yoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvdGlwYy9saW5rLmMtMTc3OC1cXHRcXHQgIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKVxcbi0tXFxubmV0L3RpcGMvbGluay5oPTEwOT1zdHJ1Y3Qgc2tfYnVmZl9oZWFkICp0aXBjX2xpbmtfaW5wdXRxKHN0cnVjdCB0aXBjX2xpbmsgKmwpO1xcbm5ldC90aXBjL2xpbmsuaDoxMTA6dTE2IHRpcGNfbGlua19yY3Zfbnh0KHN0cnVjdCB0aXBjX2xpbmsgKmwpO1xcbm5ldC90aXBjL2xpbmsuaC0xMTEtdTE2IHRpcGNfbGlua19hY2tlZChzdHJ1Y3QgdGlwY19saW5rICpsKTtcXG4tLVxcbm5ldC90aXBjL2xpbmsuaD0xMzE9aW50IHRpcGNfbGlua190aW1lb3V0KHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKTtcXG5uZXQvdGlwYy9saW5rLmg6MTMyOmludCB0aXBjX2xpbmtfcmN2KHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3RpcGMvbGluay5oLTEzMy1cXHRcXHQgIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKTtcXG4tLVxcbm5ldC90aXBjL25vZGUuYz05NTg9c3RhdGljIHZvaWQgdGlwY19ub2RlX2xpbmtfZmFpbG92ZXIoc3RydWN0IHRpcGNfbm9kZSAqbiwgc3RydWN0IHRpcGNfbGluayAqbCxcXG4tLVxcbm5ldC90aXBjL25vZGUuYy05NzItXFxubmV0L3RpcGMvbm9kZS5jOjk3MzpcXHRuLVxcdTAwM2VzeW5jX3BvaW50ID0gdGlwY19saW5rX3Jjdl9ueHQodG5sKSArIChVMTZfTUFYIC8gMiAtIDEpO1xcbm5ldC90aXBjL25vZGUuYy05NzQtXFx0dGlwY19saW5rX2ZhaWxvdmVyX3ByZXBhcmUobCwgdG5sLCB4bWl0cSk7XFxuLS1cXG5uZXQvdGlwYy9ub2RlLmM9OTg4PXN0YXRpYyB2b2lkIF9fdGlwY19ub2RlX2xpbmtfZG93bihzdHJ1Y3QgdGlwY19ub2RlICpuLCBpbnQgKmJlYXJlcl9pZCxcXG4tLVxcbm5ldC90aXBjL25vZGUuYy0xMDUxLVxcdHRpcGNfbm9kZV9mc21fZXZ0KG4sIE5PREVfU1lOQ0hfRU5EX0VWVCk7XFxubmV0L3RpcGMvbm9kZS5jOjEwNTI6XFx0bi1cXHUwMDNlc3luY19wb2ludCA9IHRpcGNfbGlua19yY3Zfbnh0KHRubCkgKyAoVTE2X01BWCAvIDIgLSAxKTtcXG5uZXQvdGlwYy9ub2RlLmMtMTA1My1cXHR0aXBjX2xpbmtfdG5sX3ByZXBhcmUobCwgdG5sLCBGQUlMT1ZFUl9NU0csIHhtaXRxKTtcXG4tLVxcbm5ldC90aXBjL25vZGUuYz0xOTM4PXN0YXRpYyBib29sIHRpcGNfbm9kZV9jaGVja19zdGF0ZShzdHJ1Y3QgdGlwY19ub2RlICpuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3RpcGMvbm9kZS5jLTE5NTgtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbm5ldC90aXBjL25vZGUuYzoxOTU5OlxcdHJjdl9ueHQgPSB0aXBjX2xpbmtfcmN2X254dChsKTtcXG5uZXQvdGlwYy9ub2RlLmMtMTk2MC1cXG4tLVxcbm5ldC90aXBjL25vZGUuYy0yMDY0LVxcdFxcdGlucHV0cV9sZW4gPSBza2JfcXVldWVfbGVuKHRpcGNfbGlua19pbnB1dHEocGwpKTtcXG5uZXQvdGlwYy9ub2RlLmM6MjA2NTpcXHRcXHRkbHZfbnh0ID0gdGlwY19saW5rX3Jjdl9ueHQocGwpIC0gaW5wdXRxX2xlbjtcXG5uZXQvdGlwYy9ub2RlLmMtMjA2Ni1cXHRcXHRpZiAobW9yZShkbHZfbnh0LCBuLVxcdTAwM2VzeW5jX3BvaW50KSkge1xcbi0tXFxubmV0L3RpcGMvbm9kZS5jPTIwOTE9dm9pZCB0aXBjX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0aXBjX2JlYXJlciAqYilcXG4tLVxcbm5ldC90aXBjL25vZGUuYy0yMTcxLVxcdFxcdGlmIChsZS1cXHUwMDNlbGluaykge1xcbm5ldC90aXBjL25vZGUuYzoyMTcyOlxcdFxcdFxcdHJjID0gdGlwY19saW5rX3JjdihsZS1cXHUwMDNlbGluaywgc2tiLCBcXHUwMDI2eG1pdHEpO1xcbm5ldC90aXBjL25vZGUuYy0yMTczLVxcdFxcdFxcdHNrYiA9IE5VTEw7XFxuLS1cXG5uZXQvdGlwYy9ub2RlLmMtMjE4NS1cXHRcXHRcXHRpZiAobGUtXFx1MDAzZWxpbmspIHtcXG5uZXQvdGlwYy9ub2RlLmM6MjE4NjpcXHRcXHRcXHRcXHRyYyA9IHRpcGNfbGlua19yY3YobGUtXFx1MDAzZWxpbmssIHNrYiwgXFx1MDAyNnhtaXRxKTtcXG5uZXQvdGlwYy9ub2RlLmMtMjE4Ny1cXHRcXHRcXHRcXHRza2IgPSBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTowNzoxNy41MTU0Mzg1NDlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTkwMTYxNjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgdGhlIFRJUEMgUmVjZWl2ZSBQYXRoKipcblxuQWxyaWdodCwgc28gYHRpcGNfcmN2YCBpcyB0aGUgY2VudHJhbCBmdW5jdGlvbiBmb3IgcmVjZWl2aW5nIFRJUEMgcGFja2V0cy4gSWYgSSdtIGdvaW5nIHRvIHVuZGVyc3RhbmQgdGhlIHdob2xlIHJlY2VpdmUgcHJvY2VzcywgSSBuZWVkIHRvIGtub3cgd2hlcmUgdGhpcyB0aGluZyBpcyBhY3R1YWxseSBjYWxsZWQuIExldCdzIGZpcmUgdXAgdGhlIHNlYXJjaCB0b29scyBhbmQgc2VlIHdoZXJlIHRoaXMga2V5IGZ1bmN0aW9uIGlzIGludm9rZWQgd2l0aGluIHRoZSBrZXJuZWwuIFRpbWUgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDM2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTk6MDc6MjAuNzA1NjAyNzc0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMDYzMzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRpcGNfcmN2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90aXBjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9iZWFyZXIuYz02NTc9c3RhdGljIGludCB0aXBjX2wyX3Jjdl9tc2coc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC90aXBjL2JlYXJlci5jLTY2OC1cXHRcXHRUSVBDX1NLQl9DQihza2IpLVxcdTAwM2VmbGFncyA9IDA7XFxubmV0L3RpcGMvYmVhcmVyLmM6NjY5OlxcdFxcdHRpcGNfcmN2KGRldl9uZXQoYi1cXHUwMDNlcHQuZGV2KSwgc2tiLCBiKTtcXG5uZXQvdGlwYy9iZWFyZXIuYy02NzAtXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5uZXQvdGlwYy9iZWFyZXIuaD0xNzk9c3RydWN0IHRpcGNfYmVhcmVyX25hbWVzIHtcXG4tLVxcbm5ldC90aXBjL2JlYXJlci5oLTE4Ny1cXG5uZXQvdGlwYy9iZWFyZXIuaDoxODg6dm9pZCB0aXBjX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0aXBjX2JlYXJlciAqYik7XFxubmV0L3RpcGMvYmVhcmVyLmgtMTg5LVxcbi0tXFxubmV0L3RpcGMvY3J5cHRvLmM9OTY1PXN0YXRpYyB2b2lkIHRpcGNfYWVhZF9kZWNyeXB0X2RvbmUodm9pZCAqZGF0YSwgaW50IGVycilcXG4tLVxcbm5ldC90aXBjL2NyeXB0by5jLTk4OC1cXHRcXHRpZiAobGlrZWx5KHRlc3RfYml0KDAsIFxcdTAwMjZiLVxcdTAwM2V1cCkpKVxcbm5ldC90aXBjL2NyeXB0by5jOjk4OTpcXHRcXHRcXHR0aXBjX3JjdihuZXQsIHNrYiwgYik7XFxubmV0L3RpcGMvY3J5cHRvLmMtOTkwLVxcdFxcdGVsc2VcXG4tLVxcbm5ldC90aXBjL2NyeXB0by5jPTE2ODk9aW50IHRpcGNfY3J5cHRvX3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqKnNrYixcXG4tLVxcbm5ldC90aXBjL2NyeXB0by5jLTE4MDAtICogYXMgdGhlIGNhbGxiYWNrLCB0aGUgZW5jcnlwdGlvbiBoZWFkZXIgYW5kIGF1dGggdGFnIHdpbGwgYmUgdHJpbW1lZCBvdXRcXG5uZXQvdGlwYy9jcnlwdG8uYzoxODAxOiAqIGJlZm9yZSBmb3J3YXJkaW5nIHRvIHRpcGNfcmN2KCkgdmlhIHRoZSB0aXBjX2NyeXB0b19yY3ZfY29tcGxldGUoKS5cXG5uZXQvdGlwYy9jcnlwdG8uYy0xODAyLSAqIE90aGVyd2lzZSwgdGhlIHNrYiB3aWxsIGJlIGZyZWVkIVxcbi0tXFxubmV0L3RpcGMvY3J5cHRvLmM9MTg5Nz1zdGF0aWMgdm9pZCB0aXBjX2NyeXB0b19yY3ZfY29tcGxldGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19hZWFkICphZWFkLFxcbi0tXFxubmV0L3RpcGMvY3J5cHRvLmMtMTkxOC1cXHRcXHRcXHRpZiAoZXJyID09IC1FQkFETVNHIFxcdTAwMjZcXHUwMDI2ICgqc2tiKS1cXHUwMDNlbmV4dClcXG5uZXQvdGlwYy9jcnlwdG8uYzoxOTE5OlxcdFxcdFxcdFxcdHRpcGNfcmN2KG5ldCwgKCpza2IpLVxcdTAwM2VuZXh0LCBiKTtcXG5uZXQvdGlwYy9jcnlwdG8uYy0xOTIwLVxcdFxcdFxcdGdvdG8gZnJlZV9za2I7XFxuLS1cXG5uZXQvdGlwYy9jcnlwdG8uYy0xOTYyLXJjdjpcXG5uZXQvdGlwYy9jcnlwdG8uYzoxOTYzOlxcdC8qIFJlbW92ZSBlaGRyIFxcdTAwMjYgYXV0aC4gdGFnIHByaW9yIHRvIHRpcGNfcmN2KCkgKi9cXG5uZXQvdGlwYy9jcnlwdG8uYy0xOTY0LVxcdGVoZHIgPSAoc3RydWN0IHRpcGNfZWhkciAqKSgqc2tiKS1cXHUwMDNlZGF0YTtcXG4tLVxcbm5ldC90aXBjL25vZGUuYz0xOTM4PXN0YXRpYyBib29sIHRpcGNfbm9kZV9jaGVja19zdGF0ZShzdHJ1Y3QgdGlwY19ub2RlICpuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3RpcGMvbm9kZS5jLTIwODItLyoqXFxubmV0L3RpcGMvbm9kZS5jOjIwODM6ICogdGlwY19yY3YgLSBwcm9jZXNzIFRJUEMgcGFja2V0cy9tZXNzYWdlcyBhcnJpdmluZyBmcm9tIG9mZi1ub2RlXFxubmV0L3RpcGMvbm9kZS5jLTIwODQtICogQG5ldDogdGhlIGFwcGxpY2FibGUgbmV0IG5hbWVzcGFjZVxcbi0tXFxubmV0L3RpcGMvbm9kZS5jLTIwOTAtICovXFxubmV0L3RpcGMvbm9kZS5jOjIwOTE6dm9pZCB0aXBjX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0aXBjX2JlYXJlciAqYilcXG5uZXQvdGlwYy9ub2RlLmMtMjA5Mi17XFxuLS1cXG5uZXQvdGlwYy90b3BzcnYuYz02MzM9c3RhdGljIGludCB0aXBjX3RvcHNydl93b3JrX3N0YXJ0KHN0cnVjdCB0aXBjX3RvcHNydiAqcylcXG5uZXQvdGlwYy90b3BzcnYuYy02MzQte1xcbm5ldC90aXBjL3RvcHNydi5jOjYzNTpcXHRzLVxcdTAwM2VyY3Zfd3EgPSBhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZShcXFwidGlwY19yY3ZcXFwiLCAwKTtcXG5uZXQvdGlwYy90b3BzcnYuYy02MzYtXFx0aWYgKCFzLVxcdTAwM2VyY3Zfd3EpIHtcXG4tLVxcbm5ldC90aXBjL3VkcF9tZWRpYS5jPTM2OD1zdGF0aWMgaW50IHRpcGNfdWRwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3RpcGMvdWRwX21lZGlhLmMtMzg4LVxcdFxcdFRJUENfU0tCX0NCKHNrYiktXFx1MDAzZWZsYWdzID0gMDtcXG5uZXQvdGlwYy91ZHBfbWVkaWEuYzozODk6XFx0XFx0dGlwY19yY3Yoc29ja19uZXQoc2spLCBza2IsIGIpO1xcbm5ldC90aXBjL3VkcF9tZWRpYS5jLTM5MC1cXHRcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTk6MDc6MjAuNzU2NjcwODYzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc0ODgxMzQzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRJUEMgUGFja2V0IFJlY2VwdGlvbiBQYXRoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IFRJUEMgbWVzc2FnZXMgYXJlIHJlY2VpdmVkLCBhbmQgYHRpcGNfcmN2YCBpcyB0aGUgY2VudHJhbCBmdW5jdGlvbiBoZXJlLiBJIHNlZSBpdCdzIHRyaWdnZXJlZCBmcm9tIHR3byBkaXN0aW5jdCBwYXRoczogYHRpcGNfbDJfcmN2X21zZ2AsIHdoaWNoIGhhbmRsZXMgdGhlIEV0aGVybmV0LWJhc2VkIGRpcmVjdCB0cmFuc21pc3Npb24gdXNpbmcgdGhlIEVUSF9QX1RJUEMgcHJvdG9jb2wsIGFuZCBgdGlwY191ZHBfcmVjdmAsIHdoaWNoIGlzIGhhbmRsaW5nIHRoZSBVRFAgZW5jYXBzdWxhdGlvbiBvZiBUSVBDIG1lc3NhZ2VzLiBUaGF0IGNvbmZpcm1zIHRoZSBjb2RlIHBhdGggSSdtIGV4YW1pbmluZyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSB0aHJvdWdoIG5ldHdvcmsgcGFja2V0cywgYW5kIGFueSBjaGFuZ2VzIEkgbWFrZSBoZXJlIHdpbGwgaGF2ZSBhIGZ1bmN0aW9uYWwgaW1wYWN0LlxuXG5Ob3csIHRoaXMgcGFydGljdWxhciBjaGFuZ2UgbGltaXRzIHRoZSB0b3RhbCBzaXplIG9mIGEgcmVhc3NlbWJsZWQgZnJhZ21lbnQgY2hhaW4uIEl0IHNlZW1zIHRoZSBsaW1pdCBpcyBzZXQgYXQgYDIgKiBNQVhfTVNHX1NJWkVgLiBUaGlzIGlzIHRoZSBpbXBvcnRhbnQgcGFydCAtIHRoZSBzaXplIG9mIGZyYWdtZW50cyBpcyBub3cgZG91YmxlIHRoYXQgb2YgYE1BWF9NU0dfU0laRWAsIHdoaWNoIGlzIGRlZmluZWQgc29tZXdoZXJlIGluIGBuZXQvdGlwYy9tc2cuaGAgb3IgYSByZWxhdGVkIGhlYWRlciBmaWxlLiBJIG5lZWQgdG8gdmVyaWZ5IHdoYXQgdGhlIGFjdHVhbCB2YWx1ZSBvZiBgTUFYX01TR19TSVpFYCBpcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIExldCdzIGdvIGNoZWNrIHRoYXQgZGVmaW5pdGlvbiB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc0NiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTowNzoyNS41MDU0ODc0MzFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1ODczNzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk1BWF9NU0dfU0laRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGlwYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3RpcGMvZ3JvdXAuYy00Ny1cXG5uZXQvdGlwYy9ncm91cC5jOjQ4OiNkZWZpbmUgQURWX1VOSVQgKCgoTUFYX01TR19TSVpFICsgTUFYX0hfU0laRSkgLyBGTE9XQ1RMX0JMS19TWikgKyAxKVxcbm5ldC90aXBjL2dyb3VwLmMtNDktI2RlZmluZSBBRFZfSURMRSBBRFZfVU5JVFxcbi0tXFxubmV0L3RpcGMvbGluay5jPTEyOTU9c3RhdGljIGludCB0aXBjX2xpbmtfaW5wdXQoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy0xMzE5LVxcdFxcdFxcdC8qIEEgbGVnaXRpbWF0ZSByZWFzc2VtYmxlZCBtZXNzYWdlIGNhbiBuZXZlciBleGNlZWRcXG5uZXQvdGlwYy9saW5rLmM6MTMyMDpcXHRcXHRcXHQgKiBNQVhfTVNHX1NJWkUuIExpbWl0IHRoZSBtZW1vcnkgb25lIGluY29tcGxldGVcXG5uZXQvdGlwYy9saW5rLmMtMTMyMS1cXHRcXHRcXHQgKiBmcmFnbWVudCBjaGFpbiBjYW4gcGluLCBvdGhlcndpc2UgYSBwZWVyIGNhbiBncm93XFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtMTMyNi1cXHRcXHRcXHQgKi9cXG5uZXQvdGlwYy9saW5rLmM6MTMyNzpcXHRcXHRcXHRpZiAoKCpyZWFzbV9za2IpLVxcdTAwM2V0cnVlc2l6ZSBcXHUwMDNlIDIgKiBNQVhfTVNHX1NJWkUpIHtcXG5uZXQvdGlwYy9saW5rLmMtMTMyOC1cXHRcXHRcXHRcXHRwcl93YXJuX3JhdGVsaW1pdGVkKFxcXCJGcmFnbWVudCBjaGFpbiBsYXJnZXIgdGhhbiAldSBieXRlcywgZHJvcHBpbmdcXFxcblxcXCIsXFxubmV0L3RpcGMvbGluay5jOjEzMjk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIDIgKiBNQVhfTVNHX1NJWkUpO1xcbm5ldC90aXBjL2xpbmsuYy0xMzMwLVxcdFxcdFxcdFxcdGtmcmVlX3NrYigqcmVhc21fc2tiKTtcXG4tLVxcbm5ldC90aXBjL21zZy5jPTM4ND1pbnQgdGlwY19tc2dfYnVpbGQoc3RydWN0IHRpcGNfbXNnICptaGRyLCBzdHJ1Y3QgbXNnaGRyICptLCBpbnQgb2Zmc2V0LFxcbi0tXFxubmV0L3RpcGMvbXNnLmMtNDA1LVxcdFxcdGlmICh1bmxpa2VseSghc2tiKSkge1xcbm5ldC90aXBjL21zZy5jOjQwNjpcXHRcXHRcXHRpZiAocGt0bWF4ICE9IE1BWF9NU0dfU0laRSlcXG5uZXQvdGlwYy9tc2cuYy00MDctXFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5uZXQvdGlwYy9tc2cuaD00OT1zdHJ1Y3QgcGxpc3Q7XFxuLS1cXG5uZXQvdGlwYy9tc2cuaC0xMDAtXFxubmV0L3RpcGMvbXNnLmg6MTAxOiNkZWZpbmUgTUFYX01TR19TSVpFIChNQVhfSF9TSVpFICsgVElQQ19NQVhfVVNFUl9NU0dfU0laRSlcXG5uZXQvdGlwYy9tc2cuaC0xMDItI2RlZmluZSBUSVBDX01FRElBX0lORk9fT0ZGU0VUXFx0NVxcbi0tXFxubmV0L3RpcGMvbm9kZS5jPTIwNT1pbnQgdGlwY19ub2RlX2dldF9tdHUoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkciwgdTMyIHNlbCwgYm9vbCBjb25uZWN0ZWQpXFxuLS1cXG5uZXQvdGlwYy9ub2RlLmMtMjA4LVxcdGludCBiZWFyZXJfaWQ7XFxubmV0L3RpcGMvbm9kZS5jOjIwOTpcXHR1bnNpZ25lZCBpbnQgbXR1ID0gTUFYX01TR19TSVpFO1xcbm5ldC90aXBjL25vZGUuYy0yMTAtXFxuLS1cXG5uZXQvdGlwYy9ub2RlLmMtMjE0LVxcbm5ldC90aXBjL25vZGUuYzoyMTU6XFx0LyogQWxsb3cgTUFYX01TR19TSVpFIHdoZW4gYnVpbGRpbmcgY29ubmVjdGlvbiBvcmllbnRlZCBtZXNzYWdlXFxubmV0L3RpcGMvbm9kZS5jLTIxNi1cXHQgKiBpZiB0aGV5IGFyZSBpbiB0aGUgc2FtZSBjb3JlIG5ldHdvcmtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTI1Mz1zdGF0aWMgdm9pZCB0c2tfc2V0X25hZ2xlKHN0cnVjdCB0aXBjX3NvY2sgKnRzaylcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTI2NC1cXHQvKiBMaW1pdCBub2RlIGxvY2FsIGJ1ZmZlciBzaXplIHRvIGF2b2lkIHJlY2VpdmUgcXVldWUgb3ZlcmZsb3cgKi9cXG5uZXQvdGlwYy9zb2NrZXQuYzoyNjU6XFx0aWYgKHRzay1cXHUwMDNlbWF4X3BrdCA9PSBNQVhfTVNHX1NJWkUpXFxubmV0L3RpcGMvc29ja2V0LmMtMjY2LVxcdFxcdHRzay1cXHUwMDNlbWF4bmFnbGUgPSAxNTAwO1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmgtNDItI2RlZmluZSBGTE9XQ1RMX01TR19XSU4gNTEyXFxubmV0L3RpcGMvc29ja2V0Lmg6NDM6I2RlZmluZSBGTE9XQ1RMX01TR19MSU0gKChGTE9XQ1RMX01TR19XSU4gKiAyICsgMSkgKiBTS0JfVFJVRVNJWkUoTUFYX01TR19TSVpFKSlcXG5uZXQvdGlwYy9zb2NrZXQuaC00NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTk6MDc6MjUuNTYxMzY3MDlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk3MjM4OTczNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRJUEMgTGluayBJbnB1dCBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyB0aGUgY2hhbmdlIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlzIHNwZWNpZmljYWxseSB3aXRoaW4gYHRpcGNfbGlua19pbnB1dGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIEl0IGxvb2tzIGxpa2UgYHRpcGNfcmN2YCBpcyB0aGUgZW50cnkgcG9pbnQsIHdoaWNoIGNhbGxzIGB0aXBjX25vZGVfY2hlY2tfc3RhdGVgLiBJJ20gcmVhc29uYWJseSBjb25maWRlbnQgdGhhdCBgdGlwY19ub2RlX2NoZWNrX3N0YXRlYCB0aGVuIGNhbGxzIGB0aXBjX2xpbmtfcmN2YCwgYW5kIGZpbmFsbHksIHdlIGFycml2ZSBhdCBgdGlwY19saW5rX2lucHV0YC4gVGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IHByb2JhYmxlIGZsb3cuIEdpdmVuIHRoaXMsIEkgc2hvdWxkIHN0YXJ0IG15IGRlZXBlciBkaXZlIGludG8gdGhlIGNvZGUgYnkgZm9jdXNpbmcgb24gYHRpcGNfbGlua19yY3ZgLiBUaGlzIGlzIHRoZSBsb2dpY2FsIG5leHQgc3RlcCB0byBwcm9wZXJseSB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhlIG1vZGlmaWNhdGlvbnMgbWFkZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODEwMSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE5OjA3OjI5LjUzMzc1OTQ2NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg0OTg2NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGlwY19saW5rX3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGlwYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3RpcGMvYmNhc3QuYz00MzY9aW50IHRpcGNfYmNhc3RfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC90aXBjL2JjYXN0LmMtNDUzLVxcdGVsc2VcXG5uZXQvdGlwYy9iY2FzdC5jOjQ1NDpcXHRcXHRyYyA9IHRpcGNfbGlua19yY3YobCwgc2tiLCBOVUxMKTtcXG5uZXQvdGlwYy9iY2FzdC5jLTQ1NS1cXHR0aXBjX2JjYXN0X3VubG9jayhuZXQpO1xcbi0tXFxubmV0L3RpcGMvbGluay5jPTQyMz1pbnQgdGlwY19saW5rX21zcyhzdHJ1Y3QgdGlwY19saW5rICpsKVxcbi0tXFxubmV0L3RpcGMvbGluay5jLTQzMS1cXG5uZXQvdGlwYy9saW5rLmM6NDMyOnUxNiB0aXBjX2xpbmtfcmN2X254dChzdHJ1Y3QgdGlwY19saW5rICpsKVxcbm5ldC90aXBjL2xpbmsuYy00MzMte1xcbi0tXFxubmV0L3RpcGMvbGluay5jPTE3NDc9c3RhdGljIGludCB0aXBjX2xpbmtfYnVpbGRfbmFja19tc2coc3RydWN0IHRpcGNfbGluayAqbCxcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy0xNzcxLVxcbm5ldC90aXBjL2xpbmsuYzoxNzcyOi8qIHRpcGNfbGlua19yY3YgLSBwcm9jZXNzIFRJUEMgcGFja2V0cy9tZXNzYWdlcyBhcnJpdmluZyBmcm9tIG9mZi1ub2RlXFxubmV0L3RpcGMvbGluay5jLTE3NzMtICogQGw6IHRoZSBsaW5rIHRoYXQgc2hvdWxkIGhhbmRsZSB0aGUgbWVzc2FnZVxcbi0tXFxubmV0L3RpcGMvbGluay5jLTE3NzYtICovXFxubmV0L3RpcGMvbGluay5jOjE3Nzc6aW50IHRpcGNfbGlua19yY3Yoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvdGlwYy9saW5rLmMtMTc3OC1cXHRcXHQgIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKVxcbi0tXFxubmV0L3RpcGMvbGluay5oPTEwOT1zdHJ1Y3Qgc2tfYnVmZl9oZWFkICp0aXBjX2xpbmtfaW5wdXRxKHN0cnVjdCB0aXBjX2xpbmsgKmwpO1xcbm5ldC90aXBjL2xpbmsuaDoxMTA6dTE2IHRpcGNfbGlua19yY3Zfbnh0KHN0cnVjdCB0aXBjX2xpbmsgKmwpO1xcbm5ldC90aXBjL2xpbmsuaC0xMTEtdTE2IHRpcGNfbGlua19hY2tlZChzdHJ1Y3QgdGlwY19saW5rICpsKTtcXG4tLVxcbm5ldC90aXBjL2xpbmsuaD0xMzE9aW50IHRpcGNfbGlua190aW1lb3V0KHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKTtcXG5uZXQvdGlwYy9saW5rLmg6MTMyOmludCB0aXBjX2xpbmtfcmN2KHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3RpcGMvbGluay5oLTEzMy1cXHRcXHQgIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKTtcXG4tLVxcbm5ldC90aXBjL25vZGUuYz05NTg9c3RhdGljIHZvaWQgdGlwY19ub2RlX2xpbmtfZmFpbG92ZXIoc3RydWN0IHRpcGNfbm9kZSAqbiwgc3RydWN0IHRpcGNfbGluayAqbCxcXG4tLVxcbm5ldC90aXBjL25vZGUuYy05NzItXFxubmV0L3RpcGMvbm9kZS5jOjk3MzpcXHRuLVxcdTAwM2VzeW5jX3BvaW50ID0gdGlwY19saW5rX3Jjdl9ueHQodG5sKSArIChVMTZfTUFYIC8gMiAtIDEpO1xcbm5ldC90aXBjL25vZGUuYy05NzQtXFx0dGlwY19saW5rX2ZhaWxvdmVyX3ByZXBhcmUobCwgdG5sLCB4bWl0cSk7XFxuLS1cXG5uZXQvdGlwYy9ub2RlLmM9OTg4PXN0YXRpYyB2b2lkIF9fdGlwY19ub2RlX2xpbmtfZG93bihzdHJ1Y3QgdGlwY19ub2RlICpuLCBpbnQgKmJlYXJlcl9pZCxcXG4tLVxcbm5ldC90aXBjL25vZGUuYy0xMDUxLVxcdHRpcGNfbm9kZV9mc21fZXZ0KG4sIE5PREVfU1lOQ0hfRU5EX0VWVCk7XFxubmV0L3RpcGMvbm9kZS5jOjEwNTI6XFx0bi1cXHUwMDNlc3luY19wb2ludCA9IHRpcGNfbGlua19yY3Zfbnh0KHRubCkgKyAoVTE2X01BWCAvIDIgLSAxKTtcXG5uZXQvdGlwYy9ub2RlLmMtMTA1My1cXHR0aXBjX2xpbmtfdG5sX3ByZXBhcmUobCwgdG5sLCBGQUlMT1ZFUl9NU0csIHhtaXRxKTtcXG4tLVxcbm5ldC90aXBjL25vZGUuYz0xOTM4PXN0YXRpYyBib29sIHRpcGNfbm9kZV9jaGVja19zdGF0ZShzdHJ1Y3QgdGlwY19ub2RlICpuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3RpcGMvbm9kZS5jLTE5NTgtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbm5ldC90aXBjL25vZGUuYzoxOTU5OlxcdHJjdl9ueHQgPSB0aXBjX2xpbmtfcmN2X254dChsKTtcXG5uZXQvdGlwYy9ub2RlLmMtMTk2MC1cXG4tLVxcbm5ldC90aXBjL25vZGUuYy0yMDY0LVxcdFxcdGlucHV0cV9sZW4gPSBza2JfcXVldWVfbGVuKHRpcGNfbGlua19pbnB1dHEocGwpKTtcXG5uZXQvdGlwYy9ub2RlLmM6MjA2NTpcXHRcXHRkbHZfbnh0ID0gdGlwY19saW5rX3Jjdl9ueHQocGwpIC0gaW5wdXRxX2xlbjtcXG5uZXQvdGlwYy9ub2RlLmMtMjA2Ni1cXHRcXHRpZiAobW9yZShkbHZfbnh0LCBuLVxcdTAwM2VzeW5jX3BvaW50KSkge1xcbi0tXFxubmV0L3RpcGMvbm9kZS5jPTIwOTE9dm9pZCB0aXBjX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0aXBjX2JlYXJlciAqYilcXG4tLVxcbm5ldC90aXBjL25vZGUuYy0yMTcxLVxcdFxcdGlmIChsZS1cXHUwMDNlbGluaykge1xcbm5ldC90aXBjL25vZGUuYzoyMTcyOlxcdFxcdFxcdHJjID0gdGlwY19saW5rX3JjdihsZS1cXHUwMDNlbGluaywgc2tiLCBcXHUwMDI2eG1pdHEpO1xcbm5ldC90aXBjL25vZGUuYy0yMTczLVxcdFxcdFxcdHNrYiA9IE5VTEw7XFxuLS1cXG5uZXQvdGlwYy9ub2RlLmMtMjE4NS1cXHRcXHRcXHRpZiAobGUtXFx1MDAzZWxpbmspIHtcXG5uZXQvdGlwYy9ub2RlLmM6MjE4NjpcXHRcXHRcXHRcXHRyYyA9IHRpcGNfbGlua19yY3YobGUtXFx1MDAzZWxpbmssIHNrYiwgXFx1MDAyNnhtaXRxKTtcXG5uZXQvdGlwYy9ub2RlLmMtMjE4Ny1cXHRcXHRcXHRcXHRza2IgPSBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTowNzoyOS42MDIyNjIxNTFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk2ODE2OTM1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRJUEMgTWVtb3J5IEdyb3d0aCBQcmV2ZW50aW9uIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlIHNlZW1zIHRvIGJlIHdpdGhpbiBgdGlwY19saW5rX2lucHV0YC4gSXQgbG9va3MgbGlrZSB0aGlzIGlzIGEgZnVuY3Rpb25hbCBpbXByb3ZlbWVudCwgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGFkZHJlc3MgYW5kIHByZXZlbnQgdW5ib3VuZGVkIG1lbW9yeSBncm93dGgg4oCTIGEgY3JpdGljYWwgaXNzdWUgaW4gYW55IG5ldHdvcmsgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24uIFRoZSBnb29kIG5ld3MgaXMsIGJhc2VkIG9uIHRoZSBpbmZvcm1hdGlvbiwgdGhpcyBpcyByZWFjaGFibGUgdGhyb3VnaCBzdGFuZGFyZCBUSVBDIHBhY2tldCBwcm9jZXNzaW5nLCBzbyB3ZSdyZSBub3QgbG9va2luZyBhdCBzb21lIG9ic2N1cmUgZWRnZSBjYXNlIGhlcmUuIFRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGlzIHN0cmFpZ2h0Zm9yd2FyZDogYFRJUENgLiBUaGF0J3MgcmVhc29uYWJsZS5cblxuTm93LCB3aGVyZSBkbyB3ZSB0cmFjZSB0aGlzIHRocm91Z2ggdGhlIGNvZGU/IFRoZSBmb2N1cyBzeW1ib2xzIGZvciB0cmFjaW5nIHRoZSBwYXRoIHRocm91Z2ggdGhlIGZ1bmN0aW9ucyBzaG91bGQgYmUgZWl0aGVyIGB0aXBjX2xpbmtfcmN2YCBvciBgdGlwY19yY3ZgLiBMZXQncyBjaGVjayB0aG9zZSBvdXQuIGB0aXBjX3JjdmAgbG9va3MgbGlrZSB0aGUgbWFpbiBlbnRyeSBwb2ludCwgYXMgeW91J2QgZXhwZWN0LiBUaGVuLCBgdGlwY19saW5rX3JjdmAsIHdoaWNoIGlzIHNwZWNpZmljIHRvIGxpbmsgcmVjZXB0aW9uLCBwcm9iYWJseSBnZXRzIHVzIGNsb3NlciB0byBgdGlwY19saW5rX2lucHV0YC4gV2UgYWxzbyBoYXZlIGB0aXBjX2JjYXN0X3JjdmAgZm9yIGJyb2FkY2FzdCwgYHRpcGNfbGlua190bmxfcmN2YCBmb3IgdHVubmVscywgYHRpcGNfdWRwX3JlY3ZgIGZvciBVRFAsIGFuZCBgdGlwY19sMl9yY3ZfbXNnYCBmb3IgTDIgbWVzc2FnZXMuXG5cbkFscmlnaHQsIGxldCdzIGNpcmNsZSBiYWNrIHRvIGB0aXBjX2xpbmtfaW5wdXRgIGFuZCBzdGFydCBkaWdnaW5nIGluIGZyb20gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3NjIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTk6MDc6MzUuNTcwNDM0MjUzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODkxMDA5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aXBjX2xpbmtfaW5wdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3RpcGMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL2xpbmsuYz0zMzg9dW5zaWduZWQgbG9uZyB0aXBjX2xpbmtfdG9sZXJhbmNlKHN0cnVjdCB0aXBjX2xpbmsgKmwpXFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtMzQyLVxcbm5ldC90aXBjL2xpbmsuYzozNDM6c3RydWN0IHNrX2J1ZmZfaGVhZCAqdGlwY19saW5rX2lucHV0cShzdHJ1Y3QgdGlwY19saW5rICpsKVxcbm5ldC90aXBjL2xpbmsuYy0zNDQte1xcbi0tXFxubmV0L3RpcGMvbGluay5jPTEyNDQ9c3RhdGljIGJvb2wgdGlwY19kYXRhX2lucHV0KHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtMTI5MC1cXG5uZXQvdGlwYy9saW5rLmM6MTI5MTovKiB0aXBjX2xpbmtfaW5wdXQgLSBwcm9jZXNzIHBhY2tldCB0aGF0IGhhcyBwYXNzZWQgbGluayBwcm90b2NvbCBjaGVja1xcbm5ldC90aXBjL2xpbmsuYy0xMjkyLSAqXFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtMTI5NC0gKi9cXG5uZXQvdGlwYy9saW5rLmM6MTI5NTpzdGF0aWMgaW50IHRpcGNfbGlua19pbnB1dChzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC90aXBjL2xpbmsuYy0xMjk2LVxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSxcXG4tLVxcbm5ldC90aXBjL2xpbmsuYz0xMzU1PXN0YXRpYyBpbnQgdGlwY19saW5rX3RubF9yY3Yoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy0xNDExLVxcdFxcdGlmICghdGlwY19kYXRhX2lucHV0KGwsIGlza2IsIGlucHV0cSkpXFxubmV0L3RpcGMvbGluay5jOjE0MTI6XFx0XFx0XFx0cmMgfD0gdGlwY19saW5rX2lucHV0KGwsIGlza2IsIGlucHV0cSwgcmVhc21fc2tiKTtcXG5uZXQvdGlwYy9saW5rLmMtMTQxMy1cXHRcXHRpZiAodW5saWtlbHkocmMpKVxcbi0tXFxubmV0L3RpcGMvbGluay5jPTE3Nzc9aW50IHRpcGNfbGlua19yY3Yoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy0xODI5LVxcdFxcdGVsc2UgaWYgKCF0aXBjX2RhdGFfaW5wdXQobCwgc2tiLCBsLVxcdTAwM2VpbnB1dHEpKVxcbm5ldC90aXBjL2xpbmsuYzoxODMwOlxcdFxcdFxcdHJjIHw9IHRpcGNfbGlua19pbnB1dChsLCBza2IsIGwtXFx1MDAzZWlucHV0cSwgXFx1MDAyNmwtXFx1MDAzZXJlYXNtX2J1Zik7XFxubmV0L3RpcGMvbGluay5jLTE4MzEtXFx0XFx0aWYgKHVubGlrZWx5KCsrbC1cXHUwMDNlcmN2X3VuYWNrZWQgXFx1MDAzZT0gVElQQ19NSU5fTElOS19XSU4pKVxcbi0tXFxubmV0L3RpcGMvbGluay5oPTEwNz1pbnQgdGlwY19saW5rX3htaXQoc3RydWN0IHRpcGNfbGluayAqbGluaywgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcXG5uZXQvdGlwYy9saW5rLmgtMTA4LVxcdFxcdCAgIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKTtcXG5uZXQvdGlwYy9saW5rLmg6MTA5OnN0cnVjdCBza19idWZmX2hlYWQgKnRpcGNfbGlua19pbnB1dHEoc3RydWN0IHRpcGNfbGluayAqbCk7XFxubmV0L3RpcGMvbGluay5oLTExMC11MTYgdGlwY19saW5rX3Jjdl9ueHQoc3RydWN0IHRpcGNfbGluayAqbCk7XFxuLS1cXG5uZXQvdGlwYy9ub2RlLmM9MTkzOD1zdGF0aWMgYm9vbCB0aXBjX25vZGVfY2hlY2tfc3RhdGUoc3RydWN0IHRpcGNfbm9kZSAqbiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC90aXBjL25vZGUuYy0yMDA4LVxcdFxcdFxcdFxcdFxcdFxcdCAgXFxcIm5vZGUgbGluayBkb3duIFxcdTAwM2MtIGZhaWxvdmVyIVxcXCIpO1xcbm5ldC90aXBjL25vZGUuYzoyMDA5OlxcdFxcdFxcdHRpcGNfc2tiX3F1ZXVlX3NwbGljZV90YWlsX2luaXQodGlwY19saW5rX2lucHV0cShwbCksXFxubmV0L3RpcGMvbm9kZS5jOjIwMTA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0dGlwY19saW5rX2lucHV0cShsKSk7XFxubmV0L3RpcGMvbm9kZS5jLTIwMTEtXFx0XFx0fVxcbi0tXFxubmV0L3RpcGMvbm9kZS5jLTIwNjMtXFx0XFx0fVxcbm5ldC90aXBjL25vZGUuYzoyMDY0OlxcdFxcdGlucHV0cV9sZW4gPSBza2JfcXVldWVfbGVuKHRpcGNfbGlua19pbnB1dHEocGwpKTtcXG5uZXQvdGlwYy9ub2RlLmMtMjA2NS1cXHRcXHRkbHZfbnh0ID0gdGlwY19saW5rX3Jjdl9ueHQocGwpIC0gaW5wdXRxX2xlbjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTk6MDc6MzUuNjE5MzQ4NTgyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0ODYwMDYzODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSwgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgYHRpcGNfbGlua19yY3ZgIHNlZW1zIGxpa2UgYSByZWFsbHkgc29saWQgZm9jdXMgZm9yIHRoaXMuIEkndmUgYWx3YXlzIGZvdW5kIHRoYXQgZnVuY3Rpb24gdG8gYmUgcGFydGljdWxhcmx5IGluc2lnaHRmdWwgaW4gdGhpcyBhcmVhLiBBbmQsIHlvdSBrbm93LCBgdGlwY19yY3ZgIGlzIGFsc28gYSB2ZXJ5IGNvbXBlbGxpbmcgY2FuZGlkYXRlIGZvciBjbG9zZXIgZXhhbWluYXRpb24uXG5cbkJ1dCBiZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW50byBlaXRoZXIgb2YgdGhvc2UsIEkgc2hvdWxkIHByb2JhYmx5IHRha2UgYSBtb3JlIGNvbXByZWhlbnNpdmUgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbi4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IGltcG9ydGFudCBzZXR0aW5ncy4gVGhlIHByaW1hcnkgb25lLCBvZiBjb3Vyc2UsIGlzIGBDT05GSUdfVElQQ2AuIEknbGwgd2FudCB0byB2ZXJpZnkgdGhhdC4gTGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgc3VwcG9ydGluZyBjb25maWd1cmF0aW9ucyB0aGF0IG5lZWQgYSBjbG9zZXIgbG9vay4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aG9zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyODcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTowNzozOS4xMDUzNTgxMzhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NDc2Mjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUSVBDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90aXBjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9LY29uZmlnLTUtXFxubmV0L3RpcGMvS2NvbmZpZzo2Om1lbnVjb25maWcgVElQQ1xcbm5ldC90aXBjL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiVGhlIFRJUEMgUHJvdG9jb2xcXFwiXFxuLS1cXG5uZXQvdGlwYy9LY29uZmlnLTIzLVxcbm5ldC90aXBjL0tjb25maWc6MjQ6Y29uZmlnIFRJUENfTUVESUFfSUJcXG5uZXQvdGlwYy9LY29uZmlnLTI1LVxcdGJvb2wgXFxcIkluZmluaUJhbmQgbWVkaWEgdHlwZSBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L3RpcGMvS2NvbmZpZy0yOS1cXHQgIElQLW92ZXItSW5maW5pQmFuZCBkZXZpY2VzLlxcbm5ldC90aXBjL0tjb25maWc6MzA6Y29uZmlnIFRJUENfTUVESUFfVURQXFxubmV0L3RpcGMvS2NvbmZpZy0zMS1cXHRib29sIFxcXCJJUC9VRFAgbWVkaWEgdHlwZSBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L3RpcGMvS2NvbmZpZy0zNy1cXG5uZXQvdGlwYy9LY29uZmlnOjM4OmNvbmZpZyBUSVBDX0NSWVBUT1xcbm5ldC90aXBjL0tjb25maWctMzktXFx0Ym9vbCBcXFwiVElQQyBlbmNyeXB0aW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvdGlwYy9LY29uZmlnLTUyLVxcbm5ldC90aXBjL0tjb25maWc6NTM6Y29uZmlnIFRJUENfRElBR1xcbm5ldC90aXBjL0tjb25maWctNTQtXFx0dHJpc3RhdGUgXFxcIlRJUEM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTk6MDc6MzkuMTUzODQ0ODY3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg1NDczMjAxOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFRJUEMgQ29uZmlndXJhdGlvbiBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyB0aGUgY29yZSBvZiB0aGlzIGNoYW5nZSBsaWVzIHdpdGhpbiBgVElQQ2AsIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gZmlsZSwgYXMgZXhwZWN0ZWQuIFRoZSBwYXRjaCBpdHNlbGYgZm9jdXNlcyBvbiBwcmV2ZW50aW5nIGEgcG90ZW50aWFsIGRlbmlhbC1vZi1zZXJ2aWNlIHZ1bG5lcmFiaWxpdHkgcmVsYXRlZCB0byByZWFzc2VtYmxlZCBmcmFnbWVudCBjaGFpbnMuIFNwZWNpZmljYWxseSwgaXQgaW50cm9kdWNlcyBhIGNydWNpYWwgY2hlY2sgdG8gZHJvcCBhIHJlYXNzZW1ibGVkIGZyYWdtZW50IGNoYWluIGlmIGl0cyBzaXplIGV4Y2VlZHMgYDIgKiBNQVhfTVNHX1NJWkVgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBhbHRlcmF0aW9uOyB3ZSdyZSBhY3RpdmVseSBjaGFuZ2luZyBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIGNlcnRhaW4gbmV0d29yayBwYWNrZXRzIGJhc2VkIG9uIHNpemUuIFRoYXQgc2NyZWFtcyBcImZ1enppbmcgdGFyZ2V0XCIgdG8gbWUsIHJpZ2h0IGF3YXkuIFNvIHRoZSBmb2N1cyBzeW1ib2xzIGZvciB0ZXN0aW5nIHdpbGwgZGVmaW5pdGVseSBiZSBgdGlwY19saW5rX3JjdmAgYW5kIGB0aXBjX3JjdmAuXG5cbk5vdywgbGV0J3MganVzdCBtYWtlIGFic29sdXRlbHkgc3VyZSBJJ3ZlIGdvdCB0aGlzIHJpZ2h0LiBJJ20gZ29pbmcgdG8gcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGB0aXBjX2xpbmtfaW5wdXRgIGZ1bmN0aW9uIHdpdGhpbiBgbmV0L3RpcGMvbGluay5jYC4gQWgsIHllcywgaGVyZSBpdCBpczpcblxuYGBgY1xuXHRcdGlmICh0aXBjX2J1Zl9hcHBlbmQocmVhc21fc2tiLCBcdTAwMjZza2IpKSB7XG5cdFx0XHRsLVx1MDAzZXN0YXRzLnJlY3ZfZnJhZ21lbnRlZCsrO1xuXHRcdFx0dGlwY19kYXRhX2lucHV0KGwsIHNrYiwgaW5wdXRxKTtcblx0XHR9IGVsc2UgaWYgKCpyZWFzbV9za2IpIHtcblx0XHRcdC8qIEEgbGVnaXRpbWF0ZSByZWFzc2VtYmxlZCBtZXNzYWdlIGNhbiBuZXZlciBleGNlZWRcblx0XHRcdCAqIE1BWF9NU0dfU0laRS4gTGltaXQgdGhlIG1lbW9yeSBvbmUgaW5jb21wbGV0ZVxuXHRcdFx0ICogZnJhZ21lbnQgY2hhaW4gY2FuIHBpbiwgb3RoZXJ3aXNlIGEgcGVlciBjYW4gZ3Jvd1xuXHRcdFx0ICoga2VybmVsIG1lbW9yeSB1bmJvdW5kZWRseSBieSBzdHJlYW1pbmcgZnJhZ21lbnRcblx0XHRcdCAqIGNoYWlucyB0aGF0IG5ldmVyIGNvbXBsZXRlOiByZWNlaXZlZCB0cmFmZmljIGFsc29cblx0XHRcdCAqIHJlc2V0cyB0aGUgbGluayBzaWxlbmNlIGNvdW50ZXIsIHNvIHRoZSBsaW5rIG5ldmVyXG5cdFx0XHQgKiB0aW1lcyBvdXQgYW5kIHRoZSBjaGFpbnMgYXJlIG5ldmVyIGZyZWVkLlxuXHRcdFx0ICovXG5cdFx0XHRpZiAoKCpyZWFzbV9za2IpLVx1MDAzZXRydWVzaXplIFx1MDAzZSAyICogTUFYX01TR19TSVpFKSB7XG5cdFx0XHRcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXCJGcmFnbWVudCBjaGFpbiBsYXJnZXIgdGhhbiAldSBieXRlcywgZHJvcHBpbmdcXG5cIixcblx0XHRcdFx0XHRcdCAgICAyICogTUFYX01TR19TSVpFKTtcblx0XHRcdFx0a2ZyZWVfc2tiKCpyZWFzbV9za2IpO1xuXHRcdFx0XHQqcmVhc21fc2tiID0gTlVMTDtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKCFsaW5rX2lzX2JjX3JjdmxpbmsobCkpIHtcblx0XHRcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXCJVbmFibGUgdG8gYnVpbGQgZnJhZ21lbnQgbGlzdFxcblwiKTtcblx0XHRcdHJldHVybiB0aXBjX2xpbmtfZnNtX2V2dChsLCBMSU5LX0ZBSUxVUkVfRVZUKTtcblx0XHR9XG5gYGBcblxuWXVwLCB0aGF0IGNvbmZpcm1zIGl0LiBUaGlzIGlzIGEgc29saWQsIGZ1bmN0aW9uYWwgY2hhbmdlLiBJdCBkaXJlY3RseSBhZGRyZXNzZXMgdGhlIGlzc3VlIG9mIHBvdGVudGlhbGx5IHVuYm91bmRlZCBtZW1vcnkgY29uc3VtcHRpb24gYnkgaW50ZW50aW9uYWxseSBkcm9wcGluZyBleGNlc3NpdmVseSBsYXJnZSwgaW5jb21wbGV0ZSBmcmFnbWVudCBjaGFpbnMgYW5kIGZyZWVpbmcgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlbS4gVGhpcyBpcyBhY2Nlc3NpYmxlIGZyb20gdGhlIGB0aXBjX2xpbmtfcmN2YCBwYXRoLCB3aGljaCBpcyBleGFjdGx5IHdoZXJlIEkgdGhvdWdodCBpdCB3b3VsZCBiZS4gT2theSwgSSdtIHNhdGlzZmllZC4gTm93IEknbSBnb2luZyB0byBzZXQgdXAgdGhlIGFwcHJvcHJpYXRlIGNvbmZpZ3VyYXRpb25zIGJhc2VkIG9uIHRoZXNlIGZpbmRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTgxMiwiT3V0cHV0VG9rZW5zIjoxMjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTk6MDc6NDcuNzAxMTY3NzM1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ4MzMyNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRJUENcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0aXBjX2xpbmtfcmN2XCIsXG4gICAgXCJ0aXBjX3JjdlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVElQQyBmcmFnbWVudCByZWFzc2VtYmx5IGxvZ2ljIHRvIHByZXZlbnQgdW5ib3VuZGVkIG1lbW9yeSBncm93dGguIEl0IGFkZHMgYSBjaGVjayB0byBkcm9wIGluY29tcGxldGUgZnJhZ21lbnQgY2hhaW5zIGlmIHRoZWlyIHNpemUgZXhjZWVkcyBgMiAqIE1BWF9NU0dfU0laRWAuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIG5vcm1hbCBUSVBDIHBhY2tldCBwcm9jZXNzaW5nIHBhdGhzLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCBgdGlwY19yY3ZgIGFuZCBgdGlwY19saW5rX3JjdmAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVElQQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRpcGNfbGlua19yY3ZcIixcbiAgICBcInRpcGNfcmN2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBUSVBDIGZyYWdtZW50IHJlYXNzZW1ibHkgbG9naWMgdG8gcHJldmVudCB1bmJvdW5kZWQgbWVtb3J5IGdyb3d0aC4gSXQgYWRkcyBhIGNoZWNrIHRvIGRyb3AgaW5jb21wbGV0ZSBmcmFnbWVudCBjaGFpbnMgaWYgdGhlaXIgc2l6ZSBleGNlZWRzIGAyICogTUFYX01TR19TSVpFYC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgbm9ybWFsIFRJUEMgcGFja2V0IHByb2Nlc3NpbmcgcGF0aHMsIHNwZWNpZmljYWxseSB0aHJvdWdoIGB0aXBjX3JjdmAgYW5kIGB0aXBjX2xpbmtfcmN2YC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTk6MDc6NDcuNzg2MDA5MjIzWiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDc3OTI1MDIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE5OjA3OjQ3Ljc4NjY0NzU4M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDc3ODYwNzc1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgcG90ZW50aWFsIG1lbW9yeSBleGhhdXN0aW9uIChEb1MpIHZ1bG5lcmFiaWxpdHkgaW4gdGhlIFRJUEMgc3Vic3lzdGVtIHdoZXJlIGEgcGVlciBjb3VsZCBzdHJlYW0gaW5jb21wbGV0ZSBmcmFnbWVudCBjaGFpbnMgdG8gdW5ib3VuZGVkbHkgZ3JvdyBrZXJuZWwgbWVtb3J5LiBUaGUgZml4IGludHJvZHVjZXMgYSBzaXplIGxpbWl0IGNoZWNrIChgdHJ1ZXNpemUgXFx1MDAzZSAyICogTUFYX01TR19TSVpFYCkgZm9yIGluY29tcGxldGUgcmVhc3NlbWJsZWQgbWVzc2FnZXMgYW5kIGZyZWVzIHRoZSBza2IgaWYgdGhlIGxpbWl0IGlzIGV4Y2VlZGVkLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciB1c2VyLXNwYWNlIGNvcGllcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGJ1ZyBiZWluZyBmaXhlZCBpcyByZWxhdGVkIHRvIHJlc291cmNlIG1hbmFnZW1lbnQgYW5kIG1lbW9yeSBsZWFrcywgd2hpY2ggYXJlIG5vdCBpbiB0aGUgc2NvcGUgb2YgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikuIFN0YW5kYXJkIGZ1enppbmcgd2l0aCBLQVNBTiBhbmQga21lbWxlYWsgaXMgc3VmZmljaWVudCBmb3IgZGV0ZWN0aW5nIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxlYWsgaXNzdWVzIGluIHRoaXMgY29udGV4dC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkMTQ3OWNhYWI0OTJkMWFiOGEyMzU2ODhlZjMxODY2OWJkNTFhZWM5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMTk6MDc6MDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9saW5rLmMgYi9uZXQvdGlwYy9saW5rLmNcbmluZGV4IDQ5ZGZjMDk4ZDg5YjIuLmJmNjFjOWFjNGVhMjEgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9saW5rLmNcbisrKyBiL25ldC90aXBjL2xpbmsuY1xuQEAgLTEzMTUsNyArMTMxNSwyMiBAQCBzdGF0aWMgaW50IHRpcGNfbGlua19pbnB1dChzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRpZiAodGlwY19idWZfYXBwZW5kKHJlYXNtX3NrYiwgXHUwMDI2c2tiKSkge1xuIFx0XHRcdGwtXHUwMDNlc3RhdHMucmVjdl9mcmFnbWVudGVkKys7XG4gXHRcdFx0dGlwY19kYXRhX2lucHV0KGwsIHNrYiwgaW5wdXRxKTtcbi1cdFx0fSBlbHNlIGlmICghKnJlYXNtX3NrYiBcdTAwMjZcdTAwMjYgIWxpbmtfaXNfYmNfcmN2bGluayhsKSkge1xuK1x0XHR9IGVsc2UgaWYgKCpyZWFzbV9za2IpIHtcbitcdFx0XHQvKiBBIGxlZ2l0aW1hdGUgcmVhc3NlbWJsZWQgbWVzc2FnZSBjYW4gbmV2ZXIgZXhjZWVkXG4rXHRcdFx0ICogTUFYX01TR19TSVpFLiBMaW1pdCB0aGUgbWVtb3J5IG9uZSBpbmNvbXBsZXRlXG4rXHRcdFx0ICogZnJhZ21lbnQgY2hhaW4gY2FuIHBpbiwgb3RoZXJ3aXNlIGEgcGVlciBjYW4gZ3Jvd1xuK1x0XHRcdCAqIGtlcm5lbCBtZW1vcnkgdW5ib3VuZGVkbHkgYnkgc3RyZWFtaW5nIGZyYWdtZW50XG4rXHRcdFx0ICogY2hhaW5zIHRoYXQgbmV2ZXIgY29tcGxldGU6IHJlY2VpdmVkIHRyYWZmaWMgYWxzb1xuK1x0XHRcdCAqIHJlc2V0cyB0aGUgbGluayBzaWxlbmNlIGNvdW50ZXIsIHNvIHRoZSBsaW5rIG5ldmVyXG4rXHRcdFx0ICogdGltZXMgb3V0IGFuZCB0aGUgY2hhaW5zIGFyZSBuZXZlciBmcmVlZC5cbitcdFx0XHQgKi9cbitcdFx0XHRpZiAoKCpyZWFzbV9za2IpLVx1MDAzZXRydWVzaXplIFx1MDAzZSAyICogTUFYX01TR19TSVpFKSB7XG4rXHRcdFx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwiRnJhZ21lbnQgY2hhaW4gbGFyZ2VyIHRoYW4gJXUgYnl0ZXMsIGRyb3BwaW5nXFxuXCIsXG4rXHRcdFx0XHRcdFx0ICAgIDIgKiBNQVhfTVNHX1NJWkUpO1xuK1x0XHRcdFx0a2ZyZWVfc2tiKCpyZWFzbV9za2IpO1xuK1x0XHRcdFx0KnJlYXNtX3NrYiA9IE5VTEw7XG4rXHRcdFx0fVxuK1x0XHR9IGVsc2UgaWYgKCFsaW5rX2lzX2JjX3JjdmxpbmsobCkpIHtcbiBcdFx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwiVW5hYmxlIHRvIGJ1aWxkIGZyYWdtZW50IGxpc3RcXG5cIik7XG4gXHRcdFx0cmV0dXJuIHRpcGNfbGlua19mc21fZXZ0KGwsIExJTktfRkFJTFVSRV9FVlQpO1xuIFx0XHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTowNzo0Ny43ODY2NDg1MjNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA3Nzg1ODcwNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgVElQQyBGcmFnbWVudCBIYW5kbGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW4gYG5ldC90aXBjL2xpbmsuY2AgYW5kIHRhcmdldHMgdGhlIGB0aXBjX2xpbmtfaW5wdXRgIGZ1bmN0aW9uLiBJdCdzIGRlc2lnbmVkIHRvIGFkZHJlc3MgYSBwb3RlbnRpYWwgZGVuaWFsLW9mLXNlcnZpY2UgdnVsbmVyYWJpbGl0eSByZWxhdGVkIHRvIGZyYWdtZW50ZWQgVElQQyBtZXNzYWdlcy4gVGhlIGNvcmUgb2YgdGhlIGZpeCBpcyBhIHNpemUgY2hlY2sgb24gYHJlYXNtX3NrYmAgYWZ0ZXIgYHRpcGNfYnVmX2FwcGVuZGAgcmV0dXJucyBmYWxzZS4gRXNzZW50aWFsbHksIGlmIHRoZSBmcmFnbWVudCBjaGFpbiBpc24ndCBjb21wbGV0ZSAob3IgdGhlcmUncyBhbiBlcnJvciBpbiBhcHBlbmRpbmcpLCBhbmQgaWYgYHJlYXNtX3NrYmAgZXhpc3RzIGFuZCBpdHMgYHRydWVzaXplYCBleGNlZWRzIGAyICogTUFYX01TR19TSVpFYCwgdGhlbiBpdCdzIGZyZWVkLiBUaGlzIHByZXZlbnRzIGFuIGF0dGFja2VyIGZyb20gc2VuZGluZyBhIGZsb29kIG9mIGZyYWdtZW50ZWQgbWVzc2FnZXMgdGhhdCBuZXZlciBmdWxseSByZWFzc2VtYmxlLCB0aGVyZWJ5IGNvbnN1bWluZyB1bmJvdW5kZWQgYW1vdW50cyBvZiBrZXJuZWwgbWVtb3J5LiBDcnVjaWFsbHksIHRoZSBjaGVjayBhbmQgZnJlZSBvcGVyYXRpb24gaXMgcGVyZm9ybWVkIG9ubHkgaWYgdGhlIG1heGltdW0gbWVzc2FnZSBzaXplIGlzIGV4Y2VlZGVkLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIHRoZSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gSG93ZXZlciwgYWZ0ZXIgY2FyZWZ1bCByZXZpZXcsIGl0IHNlZW1zIHRoZXJlJ3Mgbm8gcmlzayBpbiB0aGlzIGFyZWEuIFRoZSBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgaXQncyBub3QgY29weWluZyBkYXRhIHRvIHVzZXIgc3BhY2UsIGFuZCBpdCBkb2Vzbid0IGFwcGVhciB0byBiZSB1c2luZyBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoaXMgaXMgcHVyZWx5IGEgZGVmZW5zZSBhZ2FpbnN0IGEgbWVtb3J5IGxlYWsvRG9TIHNjZW5hcmlvLiBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1dCB0aGlzIGZpeCBkb2Vzbid0IGludHJvZHVjZSBhbnkgc3VjaCByaXNrLiBUaGUgdnVsbmVyYWJpbGl0eSBiZWluZyBhZGRyZXNzZWQgaXMgYSBtZW1vcnkgZXhoYXVzdGlvbiBpc3N1ZS4gU3RhbmRhcmQgZnV6emluZywgbWVtb3J5IGxlYWsgZGV0ZWN0aW9uIHRvb2xzIChsaWtlIGBrbWVtbGVha2ApLCBvciBPT00gZGV0ZWN0b3JzICpjb3VsZCogY2F0Y2ggcmVsYXRlZCBpc3N1ZXMsIGJ1dCBLTVNBTiBpcyBub3QgcmVsZXZhbnQgaGVyZS5cblxuSSBkb3VibGUtY2hlY2tlZCB0aGUgY29kZSBzbmlwcGV0IHRvIGJlIGNlcnRhaW46IHRoZSBhZGRlZCBgaWZgIHN0YXRlbWVudCBjbGVhcmx5IGNoZWNrcyB0aGUgc2l6ZSBvZiB0aGUgcmVhc3NlbWJsZWQgU0tCIGFuZCBmcmVlcyBpdCBpZiB0b28gbGFyZ2UsIGluIG9yZGVyIHRvIGxpbWl0IHRoZSBhbW91bnQgb2YgbWVtb3J5IGEgc2luZ2xlIGluY29tcGxldGUgZnJhZ21lbnQgY2hhaW4gY2FuIG9jY3VweS4gVGhpcyBpcyBhIHZlcnkgdGFyZ2V0ZWQgZml4IGFnYWluc3QgYW4gb2JzZXJ2ZWQgYmVoYXZpb3IgdGhhdCBpcyBsaWtlbHkgcmVsYXRlZCB0byB0aGUgbGluaydzIGtlZXAtYWxpdmUgbWVjaGFuaXNtcyBhbmQgdGhlIGxpbmsncyBhYmlsaXR5IHRvIHRpbWUgb3V0IGluY29tcGxldGUgdHJhbnNtaXNzaW9ucy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgdG91Y2hlZCwgbm8gcG9pbnRlcnMgYXJlIGxlZnQgZGFuZ2xpbmcgYW5kIG5vIG1lbW9yeSBpcyBhbGxvY2F0ZWQgd2l0aGluIHRoZSBzY29wZSBvZiB0aGlzIHZ1bG5lcmFiaWxpdHkncyBtaXRpZ2F0aW9uLiBUaGVyZWZvcmUsIHRoZSBgTmVlZHNLTVNBTmAgZmxhZyBpcyBkZWZpbml0ZWx5IGBmYWxzZWAuIFRoaXMgcGF0Y2ggaXMgYSBzdHJhaWdodGZvcndhcmQgZGVmZW5zZSBhZ2FpbnN0IG1lbW9yeSBleGhhdXN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjQ0LCJPdXRwdXRUb2tlbnMiOjE3MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE5OjA3OjU4LjU2NTIzODI4M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgcG90ZW50aWFsIG1lbW9yeSBleGhhdXN0aW9uIChEb1MpIHZ1bG5lcmFiaWxpdHkgaW4gdGhlIFRJUEMgc3Vic3lzdGVtIHdoZXJlIGEgcGVlciBjb3VsZCBzdHJlYW0gaW5jb21wbGV0ZSBmcmFnbWVudCBjaGFpbnMgdG8gdW5ib3VuZGVkbHkgZ3JvdyBrZXJuZWwgbWVtb3J5LiBUaGUgZml4IGludHJvZHVjZXMgYSBzaXplIGxpbWl0IGNoZWNrIChgdHJ1ZXNpemUgXFx1MDAzZSAyICogTUFYX01TR19TSVpFYCkgZm9yIGluY29tcGxldGUgcmVhc3NlbWJsZWQgbWVzc2FnZXMgYW5kIGZyZWVzIHRoZSBza2IgaWYgdGhlIGxpbWl0IGlzIGV4Y2VlZGVkLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciB1c2VyLXNwYWNlIGNvcGllcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGJ1ZyBiZWluZyBmaXhlZCBpcyByZWxhdGVkIHRvIHJlc291cmNlIG1hbmFnZW1lbnQgYW5kIG1lbW9yeSBsZWFrcywgd2hpY2ggYXJlIG5vdCBpbiB0aGUgc2NvcGUgb2YgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikuIFN0YW5kYXJkIGZ1enppbmcgd2l0aCBLQVNBTiBhbmQga21lbWxlYWsgaXMgc3VmZmljaWVudCBmb3IgZGV0ZWN0aW5nIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxlYWsgaXNzdWVzIGluIHRoaXMgY29udGV4dC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgbWVtb3J5IGV4aGF1c3Rpb24gKERvUykgdnVsbmVyYWJpbGl0eSBpbiB0aGUgVElQQyBzdWJzeXN0ZW0gd2hlcmUgYSBwZWVyIGNvdWxkIHN0cmVhbSBpbmNvbXBsZXRlIGZyYWdtZW50IGNoYWlucyB0byB1bmJvdW5kZWRseSBncm93IGtlcm5lbCBtZW1vcnkuIFRoZSBmaXggaW50cm9kdWNlcyBhIHNpemUgbGltaXQgY2hlY2sgKGB0cnVlc2l6ZSBcXHUwMDNlIDIgKiBNQVhfTVNHX1NJWkVgKSBmb3IgaW5jb21wbGV0ZSByZWFzc2VtYmxlZCBtZXNzYWdlcyBhbmQgZnJlZXMgdGhlIHNrYiBpZiB0aGUgbGltaXQgaXMgZXhjZWVkZWQuIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIHVzZXItc3BhY2UgY29waWVzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgYnVnIGJlaW5nIGZpeGVkIGlzIHJlbGF0ZWQgdG8gcmVzb3VyY2UgbWFuYWdlbWVudCBhbmQgbWVtb3J5IGxlYWtzLCB3aGljaCBhcmUgbm90IGluIHRoZSBzY29wZSBvZiBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKS4gU3RhbmRhcmQgZnV6emluZyB3aXRoIEtBU0FOIGFuZCBrbWVtbGVhayBpcyBzdWZmaWNpZW50IGZvciBkZXRlY3RpbmcgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbGVhayBpc3N1ZXMgaW4gdGhpcyBjb250ZXh0LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow6t6fv[1] Phase: Succeeded StartedAt: 2026-08-18 19:08:10 +0000 UTC FinishedAt: 2026-08-18 19:08:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6t6fv[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-18 19:08:10 +0000 UTC FinishedAt: 2026-08-18 19:08:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6t6fv[2] Phase: Succeeded StartedAt: 2026-08-18 19:08:10 +0000 UTC FinishedAt: 2026-08-18 22:52:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6t6fv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_rcv","tipc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"19ff3039-a9a0-421c-8bab-19a4369b86da","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-18 19:08:10 +0000 UTC FinishedAt: 2026-08-18 22:52:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_rcv","tipc_rcv"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"19ff3039-a9a0-421c-8bab-19a4369b86da","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow6t6fv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_rcv","tipc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"19ff3039-a9a0-421c-8bab-19a4369b86da","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-18 19:08:10 +0000 UTC FinishedAt: 2026-08-18 19:08:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6t6fv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_rcv","tipc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"19ff3039-a9a0-421c-8bab-19a4369b86da","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-18 19:08:10 +0000 UTC FinishedAt: 2026-08-18 19:08:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflow6t6fv/series-workflow6t6fv-convert-artifact-36047785/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6t6fv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_rcv","tipc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"19ff3039-a9a0-421c-8bab-19a4369b86da","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-18 19:08:20 +0000 UTC FinishedAt: 2026-08-18 19:25:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6t6fv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_rcv","tipc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"19ff3039-a9a0-421c-8bab-19a4369b86da","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-18 19:08:20 +0000 UTC FinishedAt: 2026-08-18 19:25:45 +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:*0da62fee-3e0e-4ded-bc29-4aad3ed28e00,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-workflow6t6fv/series-workflow6t6fv-convert-artifact-36047785/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": "9353f178-64c9-4b5e-808c-af62222ffd3c", "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-workflow6t6fv/series-workflow6t6fv-build-action-4212945927/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6t6fv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_rcv","tipc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"19ff3039-a9a0-421c-8bab-19a4369b86da","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-18 19:08:20 +0000 UTC FinishedAt: 2026-08-18 19:25:38 +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:*0da62fee-3e0e-4ded-bc29-4aad3ed28e00,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-workflow6t6fv/series-workflow6t6fv-convert-artifact-36047785/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": "9353f178-64c9-4b5e-808c-af62222ffd3c", "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-workflow6t6fv/series-workflow6t6fv-build-action-4212945927/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6t6fv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_rcv","tipc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"19ff3039-a9a0-421c-8bab-19a4369b86da","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-18 19:25:45 +0000 UTC FinishedAt: 2026-08-18 19:25:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6t6fv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_rcv","tipc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"19ff3039-a9a0-421c-8bab-19a4369b86da","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-18 19:25:45 +0000 UTC FinishedAt: 2026-08-18 19:25:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6t6fv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_rcv","tipc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"19ff3039-a9a0-421c-8bab-19a4369b86da","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-18 19:25:45 +0000 UTC FinishedAt: 2026-08-18 19:25:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6t6fv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_rcv","tipc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"19ff3039-a9a0-421c-8bab-19a4369b86da","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-18 19:25:45 +0000 UTC FinishedAt: 2026-08-18 19:25:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"19ff3039-a9a0-421c-8bab-19a4369b86da","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflow6t6fv/series-workflow6t6fv-convert-artifact-4016266812/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6t6fv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_rcv","tipc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"19ff3039-a9a0-421c-8bab-19a4369b86da","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-18 19:25:55 +0000 UTC FinishedAt: 2026-08-18 19:27:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6t6fv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_rcv","tipc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"19ff3039-a9a0-421c-8bab-19a4369b86da","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-18 19:25:55 +0000 UTC FinishedAt: 2026-08-18 19:27:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9353f178-64c9-4b5e-808c-af62222ffd3c,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-workflow6t6fv/series-workflow6t6fv-build-action-4212945927/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-workflow6t6fv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_rcv","tipc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"19ff3039-a9a0-421c-8bab-19a4369b86da","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-18 19:27:58 +0000 UTC FinishedAt: 2026-08-18 19:27:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6t6fv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_rcv","tipc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"19ff3039-a9a0-421c-8bab-19a4369b86da","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-18 19:27:58 +0000 UTC FinishedAt: 2026-08-18 19:27:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6t6fv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_rcv","tipc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"19ff3039-a9a0-421c-8bab-19a4369b86da","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-18 19:27:58 +0000 UTC FinishedAt: 2026-08-18 19:45:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6t6fv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_rcv","tipc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"19ff3039-a9a0-421c-8bab-19a4369b86da","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-18 19:27:58 +0000 UTC FinishedAt: 2026-08-18 19:45:54 +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:*0da62fee-3e0e-4ded-bc29-4aad3ed28e00,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-workflow6t6fv/series-workflow6t6fv-convert-artifact-4016266812/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": "126e9386-9a41-4ccf-a1ee-4d32912c65d7", "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-workflow6t6fv/series-workflow6t6fv-build-action-3210160280/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6t6fv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_rcv","tipc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"19ff3039-a9a0-421c-8bab-19a4369b86da","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-18 19:27:58 +0000 UTC FinishedAt: 2026-08-18 19:45:44 +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:*0da62fee-3e0e-4ded-bc29-4aad3ed28e00,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-workflow6t6fv/series-workflow6t6fv-convert-artifact-4016266812/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": "126e9386-9a41-4ccf-a1ee-4d32912c65d7", "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-workflow6t6fv/series-workflow6t6fv-build-action-3210160280/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6t6fv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_rcv","tipc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"19ff3039-a9a0-421c-8bab-19a4369b86da","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-18 19:45:54 +0000 UTC FinishedAt: 2026-08-18 19:45:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6t6fv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_rcv","tipc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"19ff3039-a9a0-421c-8bab-19a4369b86da","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-18 19:45:54 +0000 UTC FinishedAt: 2026-08-18 19:45:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6t6fv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_rcv","tipc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"19ff3039-a9a0-421c-8bab-19a4369b86da","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-18 19:45:54 +0000 UTC FinishedAt: 2026-08-18 19:48:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6t6fv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_rcv","tipc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"19ff3039-a9a0-421c-8bab-19a4369b86da","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-18 19:45:54 +0000 UTC FinishedAt: 2026-08-18 19:47:51 +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:*126e9386-9a41-4ccf-a1ee-4d32912c65d7,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-workflow6t6fv/series-workflow6t6fv-build-action-3210160280/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-workflow6t6fv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_rcv","tipc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"19ff3039-a9a0-421c-8bab-19a4369b86da","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-18 19:48:01 +0000 UTC FinishedAt: 2026-08-18 22:52:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6t6fv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_rcv","tipc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"19ff3039-a9a0-421c-8bab-19a4369b86da","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-18 19:48:01 +0000 UTC FinishedAt: 2026-08-18 22:52:39 +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":["tipc_link_rcv","tipc_rcv"],"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:*9353f178-64c9-4b5e-808c-af62222ffd3c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*126e9386-9a41-4ccf-a1ee-4d32912c65d7,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-workflow6t6fv/series-workflow6t6fv-build-action-4212945927/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-workflow6t6fv/series-workflow6t6fv-build-action-3210160280/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6t6fv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_rcv","tipc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"19ff3039-a9a0-421c-8bab-19a4369b86da","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-18 19:48:01 +0000 UTC FinishedAt: 2026-08-18 19:48:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6t6fv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_rcv","tipc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"19ff3039-a9a0-421c-8bab-19a4369b86da","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-18 19:48:01 +0000 UTC FinishedAt: 2026-08-18 19:48:05 +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":["tipc_link_rcv","tipc_rcv"],"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-workflow6t6fv/series-workflow6t6fv-convert-artifact-1089459205/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6t6fv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_rcv","tipc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"19ff3039-a9a0-421c-8bab-19a4369b86da","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-18 19:48:01 +0000 UTC FinishedAt: 2026-08-18 19:48:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6t6fv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_rcv","tipc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"19ff3039-a9a0-421c-8bab-19a4369b86da","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-18 19:48:01 +0000 UTC FinishedAt: 2026-08-18 19:48:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6t6fv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_rcv","tipc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"19ff3039-a9a0-421c-8bab-19a4369b86da","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-18 19:48:01 +0000 UTC FinishedAt: 2026-08-18 19:48:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6t6fv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_rcv","tipc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"19ff3039-a9a0-421c-8bab-19a4369b86da","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-18 19:48:11 +0000 UTC FinishedAt: 2026-08-18 22:52:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6t6fv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_link_rcv","tipc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"47226bbdef69fc0de815b8f5b81b39673f50bbee","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"19ff3039-a9a0-421c-8bab-19a4369b86da","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-18 19:48:11 +0000 UTC FinishedAt: 2026-08-18 22:52:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9353f178-64c9-4b5e-808c-af62222ffd3c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*126e9386-9a41-4ccf-a1ee-4d32912c65d7,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-workflow6t6fv/series-workflow6t6fv-build-action-4212945927/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-workflow6t6fv/series-workflow6t6fv-build-action-3210160280/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-workflow6t6fv/series-workflow6t6fv-convert-artifact-1089459205/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,}