Name: series-workflow2k7t5 Phase: Succeeded StartedAt: 2026-08-07 20:02:47 +0000 UTC FinishedAt: 2026-08-08 00:06:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2k7t5[0] Phase: Succeeded StartedAt: 2026-08-07 20:02:47 +0000 UTC FinishedAt: 2026-08-07 20:27:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2k7t5[0].run-triage Phase: Succeeded StartedAt: 2026-08-07 20:02:47 +0000 UTC FinishedAt: 2026-08-07 20:27:37 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "594d905195024b228c962627ae5ae7c17bd582a4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM_USER", "INET_ESP", "INET_ESPINTCP", "INET6_ESP", "INET6_ESPINTCP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "594d905195024b228c962627ae5ae7c17bd582a4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM_USER", "INET_ESP", "INET_ESPINTCP", "INET6_ESP", "INET6_ESPINTCP" ], "series_id": "dfb76556-a39d-4d87-8a64-3ac9fd99e94b" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "xfrm_trans_queue_net", "xfrm_trans_queue", "xfrm_trans_reinject" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUElOVENQJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUNl9FU1BJTlRDUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hmcm1fdHJhbnNfcXVldWVfbmV0JiMzNDssCiAgICAmIzM0O3hmcm1fdHJhbnNfcXVldWUmIzM0OywKICAgICYjMzQ7eGZybV90cmFuc19yZWluamVjdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBvYmplY3QgbGlmZXRpbWUgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMgZm9yIGBza2ItXHUwMDNlZGV2YCBhbmQgYHNrYl9kc3RgIHdoZW4gYW4gYHNrYmAgaXMgcXVldWVkIGZvciByZWluamVjdGlvbiBpbiB0aGUgWEZSTSBzdWJzeXN0ZW0uIEl0IGFkZHMgYGRldl9ob2xkKClgIGFuZCBgZGV2X3B1dCgpYCBmb3IgdGhlIG5ldHdvcmsgZGV2aWNlLCBmb3JjZXMgdGhlIGRlc3RpbmF0aW9uIGVudHJ5IHZpYSBgc2tiX2RzdF9mb3JjZSgpYCwgYW5kIHdyYXBzIHRoZSByZWluamVjdGlvbiBsb29wIGluIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4gVGhlc2UgY2hhbmdlcyBhcmUgZGVzaWduZWQgdG8gcHJldmVudCB1c2UtYWZ0ZXItZnJlZSAoVUFGKSBvciBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyByZWxhdGVkIHRvIGZyZWVkIG5ldHdvcmsgZGV2aWNlcyBvciBkZXN0aW5hdGlvbiBlbnRyaWVzLiBTdWNoIG1lbW9yeSBjb3JydXB0aW9uIGFuZCBsaWZldGltZSBidWdzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGJ1ZmZlciBsZW5ndGhzLCBvciBleHBvc2UgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBYRlJNIHBhY2tldCBxdWV1ZWluZyBhbmQgcmVpbmplY3Rpb24gcGF0aHMgYnkgcHJvcGVybHkgaG9sZGluZyBhIHJlZmVyZW5jZSB0byBza2ItXHUwMDNlZGV2IGFuZCBlbnN1cmluZyBza2JfZHN0IGlzIHZhbGlkLiBUaGlzIG1vZGlmaWVzIGNvcmUgWEZSTSBwYWNrZXQgcHJvY2Vzc2luZyBsb2dpYyB3aGljaCBpcyByZWFjaGFibGUgZnJvbSBuZXR3b3JrIGlucHV0L291dHB1dCBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMDoyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDc5MjVhNmNlZTk5MDBmNWMyNmEyYjZhNGFmNjFhZWMyOTdlYzhlMDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDIwOjI2OjE4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1faW5wdXQuYyBiL25ldC94ZnJtL3hmcm1faW5wdXQuY1xuaW5kZXggZWVjYWIzMzdiZDBhNy4uOGY2MTA5ZWFkYTdlYSAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL3hmcm1faW5wdXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV9pbnB1dC5jXG5AQCAtODAwLDEyICYjNDM7ODAwLDE3IEBAIHN0YXRpYyB2b2lkIHhmcm1fdHJhbnNfcmVpbmplY3Qoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dHJhbnMtXHUwMDNlcXVldWVfbG9jayk7XG4gXG4gXHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuIFx0d2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKFx1MDAyNnF1ZXVlKSkpIHtcbiBcdFx0c3RydWN0IG5ldCAqbmV0ID0gWEZSTV9UUkFOU19TS0JfQ0Ioc2tiKS1cdTAwM2VuZXQ7XG4mIzQzO1x0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLVx1MDAzZWRldjtcbiBcbiBcdFx0WEZSTV9UUkFOU19TS0JfQ0Ioc2tiKS1cdTAwM2VmaW5pc2gobmV0LCBOVUxMLCBza2IpO1xuJiM0MztcdFx0aWYgKGRldilcbiYjNDM7XHRcdFx0ZGV2X3B1dChkZXYpO1xuIFx0XHRwdXRfbmV0KG5ldCk7XG4gXHR9XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRsb2NhbF9iaF9lbmFibGUoKTtcbiB9XG4gXG5AQCAtODIxLDEyICYjNDM7ODI2LDE4IEBAIGludCB4ZnJtX3RyYW5zX3F1ZXVlX25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoc2tiX3F1ZXVlX2xlbihcdTAwMjZ0cmFucy1cdTAwM2VxdWV1ZSkgXHUwMDNlPSBSRUFEX09OQ0UobmV0X2hvdGRhdGEubWF4X2JhY2tsb2cpKVxuIFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4gXG4mIzQzO1x0aWYgKHNrYl9kc3Qoc2tiKSBcdTAwMjZcdTAwMjYgIXNrYl9kc3RfZm9yY2Uoc2tiKSlcbiYjNDM7XHRcdHJldHVybiAtRUhPU1RVTlJFQUNIO1xuJiM0MztcbiBcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHhmcm1fdHJhbnNfY2IpIFx1MDAzZSBzaXplb2Yoc2tiLVx1MDAzZWNiKSk7XG4gXG4gXHRob2xkX25ldCA9IG1heWJlX2dldF9uZXQobmV0KTtcbiBcdGlmICghaG9sZF9uZXQpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuJiM0MztcdGlmIChza2ItXHUwMDNlZGV2KVxuJiM0MztcdFx0ZGV2X2hvbGQoc2tiLVx1MDAzZWRldik7XG4mIzQzO1xuIFx0WEZSTV9UUkFOU19TS0JfQ0Ioc2tiKS1cdTAwM2VmaW5pc2ggPSBmaW5pc2g7XG4gXHRYRlJNX1RSQU5TX1NLQl9DQihza2IpLVx1MDAzZW5ldCA9IGhvbGRfbmV0O1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnRyYW5zLVx1MDAzZXF1ZXVlX2xvY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjI2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlJNX1VTRVImIzM0OywKICAgICYjMzQ7SU5FVF9FU1AmIzM0OywKICAgICYjMzQ7SU5FVF9FU1BJTlRDUCYjMzQ7LAogICAgJiMzNDtJTkVUNl9FU1AmIzM0OywKICAgICYjMzQ7SU5FVDZfRVNQSU5UQ1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZnJtX3RyYW5zX3F1ZXVlX25ldCYjMzQ7LAogICAgJiMzNDt4ZnJtX3RyYW5zX3F1ZXVlJiMzNDssCiAgICAmIzM0O3hmcm1fdHJhbnNfcmVpbmplY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gWEZSTSBwYWNrZXQgcXVldWVpbmcgYW5kIHJlaW5qZWN0aW9uIHBhdGhzIGJ5IHByb3Blcmx5IGhvbGRpbmcgYSByZWZlcmVuY2UgdG8gc2tiLVx1MDAzZWRldiBhbmQgZW5zdXJpbmcgc2tiX2RzdCBpcyB2YWxpZC4gVGhpcyBtb2RpZmllcyBjb3JlIFhGUk0gcGFja2V0IHByb2Nlc3NpbmcgbG9naWMgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gbmV0d29yayBpbnB1dC9vdXRwdXQgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3OTI1YTZjZWU5OTAwZjVjMjZhMmI2YTRhZjYxYWVjMjk3ZWM4ZTA3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgNyAyMDoyNjoxOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1faW5wdXQuYyBiL25ldC94ZnJtL3hmcm1faW5wdXQuYwppbmRleCBlZWNhYjMzN2JkMGE3Li44ZjYxMDllYWRhN2VhIDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX2lucHV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV9pbnB1dC5jCkBAIC04MDAsMTIgJiM0Mzs4MDAsMTcgQEAgc3RhdGljIHZvaWQgeGZybV90cmFuc19yZWluamVjdChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJc3Bpbl91bmxvY2tfYmgoJmFtcDt0cmFucy0mZ3Q7cXVldWVfbG9jayk7CiAKIAlsb2NhbF9iaF9kaXNhYmxlKCk7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKIAl3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoJmFtcDtxdWV1ZSkpKSB7CiAJCXN0cnVjdCBuZXQgKm5ldCA9IFhGUk1fVFJBTlNfU0tCX0NCKHNrYiktJmd0O25ldDsKJiM0MzsJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBza2ItJmd0O2RldjsKIAogCQlYRlJNX1RSQU5TX1NLQl9DQihza2IpLSZndDtmaW5pc2gobmV0LCBOVUxMLCBza2IpOwomIzQzOwkJaWYgKGRldikKJiM0MzsJCQlkZXZfcHV0KGRldik7CiAJCXB1dF9uZXQobmV0KTsKIAl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogCWxvY2FsX2JoX2VuYWJsZSgpOwogfQogCkBAIC04MjEsMTIgJiM0Mzs4MjYsMTggQEAgaW50IHhmcm1fdHJhbnNfcXVldWVfbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlpZiAoc2tiX3F1ZXVlX2xlbigmYW1wO3RyYW5zLSZndDtxdWV1ZSkgJmd0Oz0gUkVBRF9PTkNFKG5ldF9ob3RkYXRhLm1heF9iYWNrbG9nKSkKIAkJcmV0dXJuIC1FTk9CVUZTOwogCiYjNDM7CWlmIChza2JfZHN0KHNrYikgJmFtcDsmYW1wOyAhc2tiX2RzdF9mb3JjZShza2IpKQomIzQzOwkJcmV0dXJuIC1FSE9TVFVOUkVBQ0g7CiYjNDM7CiAJQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgeGZybV90cmFuc19jYikgJmd0OyBzaXplb2Yoc2tiLSZndDtjYikpOwogCiAJaG9sZF9uZXQgPSBtYXliZV9nZXRfbmV0KG5ldCk7CiAJaWYgKCFob2xkX25ldCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKJiM0MzsJaWYgKHNrYi0mZ3Q7ZGV2KQomIzQzOwkJZGV2X2hvbGQoc2tiLSZndDtkZXYpOwomIzQzOwogCVhGUk1fVFJBTlNfU0tCX0NCKHNrYiktJmd0O2ZpbmlzaCA9IGZpbmlzaDsKIAlYRlJNX1RSQU5TX1NLQl9DQihza2IpLSZndDtuZXQgPSBob2xkX25ldDsKIAlzcGluX2xvY2tfYmgoJmFtcDt0cmFucy0mZ3Q7cXVldWVfbG9jayk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNDEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGF0Y2ggdG8gbmV0L3hmcm0veGZybV9pbnB1dC5jKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBzZWVtcyBsaWtlIHdlIGhhdmUgc29tZSBpbXBvcnRhbnQgbW9kaWZpY2F0aW9ucyB0byBgbmV0L3hmcm0veGZybV9pbnB1dC5jYC4gU3BlY2lmaWNhbGx5LCB0aGUgY29kZSB0b3VjaGVzIGJvdGggYHhmcm1fdHJhbnNfcmVpbmplY3RgIGFuZCBgeGZybV90cmFuc19xdWV1ZV9uZXRgLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgd2UmIzM5O3JlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZSwgbGlrZWx5IGEgdXNlLWFmdGVyLWZyZWUgb3Igc29tZXRoaW5nIHNpbWlsYXIgaW52b2x2aW5nIGBza2ItJmd0O2RldmAgYW5kIGBza2JfZHN0YCB3aXRoaW4gdGhlIFhGUk0gaW5wdXQgcHJvY2Vzc2luZyBwYXRoLgoKTGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIGNoYW5nZXM6IEluIGB4ZnJtX3RyYW5zX3JlaW5qZWN0YCwgdGhlIGludHJvZHVjdGlvbiBvZiBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYCBhcm91bmQgdGhlIHdoaWxlIGxvb3AgaXMgYSBrZXkgaW5kaWNhdG9yLiBJdCYjMzk7cyBwcm90ZWN0aW5nIHRoZSBkYXRhIGJlaW5nIGFjY2Vzc2VkIHdpdGhpbiB0aGUgbG9vcC4gRXh0cmFjdGluZyBgZGV2ID0gc2tiLSZndDtkZXZgIGFuZCBjYWxsaW5nIGBkZXZfcHV0KGRldilgIHdoZW4gYGRldmAgaXNuJiMzOTt0IG51bGwgYWxzbyBsb29rcyBsaWtlIGl0JiMzOTtzIGFkZHJlc3NpbmcgYSByZWZlcmVuY2UgY291bnRpbmcgaXNzdWUgdG8gZW5zdXJlIHRoZSBkZXZpY2UgaXMgcHJvcGVybHkgcmVsZWFzZWQuCgpOb3csIGluIGB4ZnJtX3RyYW5zX3F1ZXVlX25ldGAsIHRoZSBhZGRpdGlvbiBvZiBgaWYgKHNrYl9kc3Qoc2tiKSAmYW1wOyZhbXA7ICFza2JfZHN0X2ZvcmNlKHNrYikpIHJldHVybiAtRUhPU1RVTlJFQUNIO2Agc3VnZ2VzdHMgYSBjaGFuZ2UgaW4gaG93IHdlIGhhbmRsZSB1bnJlYWNoYWJsZSBkZXN0aW5hdGlvbnMgd2l0aGluIHRoYXQgcGF0aC4gTW9yZSBpbnRlcmVzdGluZ2x5LCBgaWYgKHNrYi0mZ3Q7ZGV2KSBkZXZfaG9sZChza2ItJmd0O2Rldik7YCBpcyB0aGVyZSB0byBidW1wIHRoZSBkZXZpY2UgcmVmZXJlbmNlIGNvdW50LiBJdCBzZWVtcyB0byBwYWlyIHdlbGwgd2l0aCB0aGUgYGRldl9wdXRgIGluIHRoZSBvdGhlciBmdW5jdGlvbi4KClNvLCB0aGlzIGxvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIHBhdGNoIHRvIG1lLCB0YXJnZXRpbmcgdGhlIFhGUk0gc3Vic3lzdGVtLiBJJiMzOTttIGdvaW5nIHRvIGRpZyBhIGxpdHRsZSBkZWVwZXIgbm93LiBJJiMzOTtsbCBmaXJlIHVwIGBncmVwcGVyYCBhbmQgc2VlIHdoYXQgY29uZmlnIG9wdGlvbnMgY29udHJvbCB0aGVzZSBmdW5jdGlvbnMsIGFuZCBJJiMzOTtsbCBkb3VibGUtY2hlY2sgdGhlIGV4YWN0IGNvbnRleHQgYXJvdW5kIHRoZXNlIGZ1bmN0aW9ucyB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSByb290IGNhdXNlIG9mIHRoZSBwcm9ibGVtIGFuZCBlbnN1cmUgdGhlIGZpeCBpcyBjb21wbGV0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX3RyYW5zX3F1ZXVlX25ldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2lucHV0LmM9NzkxPXN0YXRpYyB2b2lkIHhmcm1fdHJhbnNfcmVpbmplY3Qoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYy04MTYtXG5uZXQveGZybS94ZnJtX2lucHV0LmM6ODE3OmludCB4ZnJtX3RyYW5zX3F1ZXVlX25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQveGZybS94ZnJtX2lucHV0LmMtODE4LVx0XHRcdCBpbnQgKCpmaW5pc2gpKHN0cnVjdCBuZXQgKiwgc3RydWN0IHNvY2sgKixcbi0tXG5uZXQveGZybS94ZnJtX2lucHV0LmMtODQ4LX1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo4NDk6RVhQT1JUX1NZTUJPTCh4ZnJtX3RyYW5zX3F1ZXVlX25ldCk7XG5uZXQveGZybS94ZnJtX2lucHV0LmMtODUwLVxubmV0L3hmcm0veGZybV9pbnB1dC5jPTg1MT1pbnQgeGZybV90cmFuc19xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYy04NTQte1xubmV0L3hmcm0veGZybV9pbnB1dC5jOjg1NTpcdHJldHVybiB4ZnJtX3RyYW5zX3F1ZXVlX25ldChkZXZfbmV0KHNrYi1cdTAwM2VkZXYpLCBza2IsIGZpbmlzaCk7XG5uZXQveGZybS94ZnJtX2lucHV0LmMtODU2LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzg1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIGB4ZnJtX3RyYW5zX3F1ZXVlX25ldGAgYW5kIGB4ZnJtX3RyYW5zX3JlaW5qZWN0YCoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgdHdvIGZ1bmN0aW9ucywgYHhmcm1fdHJhbnNfcXVldWVfbmV0YCBhbmQgYHhmcm1fdHJhbnNfcmVpbmplY3RgLiBJbnRlcmVzdGluZy4gQW5kLCBvZiBjb3Vyc2UsIGB4ZnJtX3RyYW5zX3F1ZXVlX25ldGAgaXMgZXhwb3J0ZWQsIG1lYW5pbmcgaXQmIzM5O3MgaW50ZW5kZWQgZm9yIHVzZSBvdXRzaWRlIGl0cyBpbW1lZGlhdGUgbW9kdWxlLiBUaGF0IGFsd2F5cyBwaXF1ZXMgbXkgaW50ZXJlc3Qg4oCTIHdoYXQmIzM5O3MgdXNpbmcgaXQsIGFuZCBob3c/IEdpdmVuIHRoYXQgaXQmIzM5O3MgZXhwb3J0ZWQsIEkgc2hvdWxkIHJlYWxseSB1bmRlcnN0YW5kIGl0cyBicm9hZGVyIGltcGxpY2F0aW9ucyB3aXRoaW4gdGhlIHN5c3RlbS4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaXZlIGludG8gdGhlIGNvbmZpZ3VyYXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCBjb25maWcgb3B0aW9ucyBhcmUgcmVzcG9uc2libGUgZm9yIGVuYWJsaW5nIHRoZSBzb3VyY2UgZmlsZSwgd2hpY2ggSSBiZWxpZXZlIGlzIGBuZXQveGZybS94ZnJtX2lucHV0LmNgLiBUaGF0JiMzOTtsbCB0ZWxsIG1lIHRoZSBjb250ZXh0IGluIHdoaWNoIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXZlbiAqYXZhaWxhYmxlKiwgYW5kIHBvdGVudGlhbGx5IGdpdmUgbWUgc29tZSBjbHVlcyBhYm91dCB0aGVpciBwdXJwb3NlIHdpdGhpbiB0aGUgbGFyZ2VyIHhmcm0gZnJhbWV3b3JrLiBLbm93aW5nIHRoZSBjb25maWcgb3B0aW9ucyB3aWxsIGhlbHAgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWMgZGVwbG95bWVudCBzY2VuYXJpb3MgZm9yIHRoZXNlLiBXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGJlaW5nIGVuYWJsZWQsIGFuZCBpbiB3aGF0IGNvbnRleHQ/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjA6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9pbnB1dFxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0vTWFrZWZpbGU9MTQ9b2JqLSQoQ09ORklHX1hGUk0pIDo9IHhmcm1fcG9saWN5Lm8geGZybV9zdGF0ZS5vIHhmcm1faGFzaC5vIFxcXG5uZXQveGZybS9NYWtlZmlsZToxNTpcdFx0ICAgICAgeGZybV9pbnB1dC5vIHhmcm1fb3V0cHV0Lm8gXFxcbm5ldC94ZnJtL01ha2VmaWxlLTE2LVx0XHQgICAgICB4ZnJtX3N5c2N0bC5vIHhmcm1fcmVwbGF5Lm8geGZybV9kZXZpY2UubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MjYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBYRlJNIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCByZXZvbHZlcyBhcm91bmQgdGhlIGBDT05GSUdfWEZSTWAgY29uZmlndXJhdGlvbiBvcHRpb24uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuIEl0JiMzOTtzIGNydWNpYWwsIHdoZW4gZGVhbGluZyB3aXRoIGtlcm5lbCBjb25maWd1cmF0aW9uLCB0byBrbm93IHdoYXQgb3RoZXIgY29tcG9uZW50cyBvciBmZWF0dXJlcyB0aGlzIHNldHRpbmcgcmVsaWVzIHVwb24uIEtub3dpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIHdpbGwgaW5mb3JtIGFueSBkZWNpc2lvbnMgYWJvdXQgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGl0LCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgaXQgaGVscHMgaW4gdW5kZXJzdGFuZGluZyB0aGUgYnJvYWRlciBpbXBsaWNhdGlvbnMgb2YgaXRzIHVzZSB3aXRoaW4gdGhlIHN5c3RlbSYjMzk7cyBzZWN1cml0eSBhbmQgbmV0d29ya2luZyBhcmNoaXRlY3R1cmUuIFNvLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGVsdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgdHJhY2Ugd2hhdCBvdGhlciBzZXR0aW5ncyBgQ09ORklHX1hGUk1gIGlzIHRpZWQgdG8uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGhpZXJhcmNoeS4gVGhhdCB3YXkgSSBjYW4gbWFrZSBzb3VuZCBkZWNpc2lvbnMgYWJvdXQgdGhlIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWEZSTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnLTQtI1xubmV0L3hmcm0vS2NvbmZpZzo1OmNvbmZpZyBYRlJNXG5uZXQveGZybS9LY29uZmlnLTYtXHRib29sXG4tLVxubmV0L3hmcm0vS2NvbmZpZy0xMC1cbm5ldC94ZnJtL0tjb25maWc6MTE6Y29uZmlnIFhGUk1fT0ZGTE9BRFxubmV0L3hmcm0vS2NvbmZpZy0xMi1cdGJvb2xcbm5ldC94ZnJtL0tjb25maWctMTMtXG5uZXQveGZybS9LY29uZmlnOjE0OmNvbmZpZyBYRlJNX0FMR09cbm5ldC94ZnJtL0tjb25maWctMTUtXHR0cmlzdGF0ZVxuLS1cbm5ldC94ZnJtL0tjb25maWc9MjI9aWYgSU5FVFxubmV0L3hmcm0vS2NvbmZpZzoyMzpjb25maWcgWEZSTV9VU0VSXG5uZXQveGZybS9LY29uZmlnLTI0LVx0dHJpc3RhdGUgXCYjMzQ7VHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctMzEtXG5uZXQveGZybS9LY29uZmlnOjMyOmNvbmZpZyBYRlJNX1VTRVJfQ09NUEFUXG5uZXQveGZybS9LY29uZmlnLTMzLVx0dHJpc3RhdGUgXCYjMzQ7Q29tcGF0aWJsZSBBQkkgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctNDItXG5uZXQveGZybS9LY29uZmlnOjQzOmNvbmZpZyBYRlJNX0lOVEVSRkFDRVxubmV0L3hmcm0vS2NvbmZpZy00NC1cdHRyaXN0YXRlIFwmIzM0O1RyYW5zZm9ybWF0aW9uIHZpcnR1YWwgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy01MC1cbm5ldC94ZnJtL0tjb25maWc6NTE6Y29uZmlnIFhGUk1fU1VCX1BPTElDWVxubmV0L3hmcm0vS2NvbmZpZy01Mi1cdGJvb2wgXCYjMzQ7VHJhbnNmb3JtYXRpb24gc3ViIHBvbGljeSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy02MC1cbm5ldC94ZnJtL0tjb25maWc6NjE6Y29uZmlnIFhGUk1fTUlHUkFURVxubmV0L3hmcm0vS2NvbmZpZy02Mi1cdGJvb2wgXCYjMzQ7VHJhbnNmb3JtYXRpb24gbWlncmF0ZSBkYXRhYmFzZVwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctNzEtXG5uZXQveGZybS9LY29uZmlnOjcyOmNvbmZpZyBYRlJNX1NUQVRJU1RJQ1Ncbm5ldC94ZnJtL0tjb25maWctNzMtXHRib29sIFwmIzM0O1RyYW5zZm9ybWF0aW9uIHN0YXRpc3RpY3NcJiMzNDtcbi0tXG5uZXQveGZybS9LY29uZmlnLTgzLSMgUkZDIDgyMjEgbGlzdHMgYXMgTVVTVCBiZSBpbXBsZW1lbnRlZC5cbm5ldC94ZnJtL0tjb25maWc6ODQ6Y29uZmlnIFhGUk1fQUhcbm5ldC94ZnJtL0tjb25maWctODUtXHR0cmlzdGF0ZVxuLS1cbm5ldC94ZnJtL0tjb25maWctOTItIyBhbGdvcml0aG1zIHRoYXQgUkZDIDgyMjEgbGlzdHMgYXMgTVVTVCBiZSBpbXBsZW1lbnRlZC5cbm5ldC94ZnJtL0tjb25maWc6OTM6Y29uZmlnIFhGUk1fRVNQXG5uZXQveGZybS9LY29uZmlnLTk0LVx0dHJpc3RhdGVcbi0tXG5uZXQveGZybS9LY29uZmlnLTEwNS1cbm5ldC94ZnJtL0tjb25maWc6MTA2OmNvbmZpZyBYRlJNX0lQQ09NUFxubmV0L3hmcm0vS2NvbmZpZy0xMDctXHR0cmlzdGF0ZVxuLS1cbm5ldC94ZnJtL0tjb25maWc9MTI1PWNvbmZpZyBORVRfS0VZX01JR1JBVEVcbi0tXG5uZXQveGZybS9LY29uZmlnLTE0MC1cbm5ldC94ZnJtL0tjb25maWc6MTQxOmNvbmZpZyBYRlJNX0lQVEZTXG5uZXQveGZybS9LY29uZmlnLTE0Mi1cdHRyaXN0YXRlIFwmIzM0O0lQc2VjIElQLVRGUy9BR0dGUkFHIChSRkMgOTM0NykgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy0xNTYtXG5uZXQveGZybS9LY29uZmlnOjE1Nzpjb25maWcgWEZSTV9FU1BJTlRDUFxubmV0L3hmcm0vS2NvbmZpZy0xNTgtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjA6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg0NAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIFhGUk0qKgoKT2theSwgc28gYFhGUk1gIGlzIGEgYm9vbGVhbiBjb25maWd1cmF0aW9uIG9wdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBwcm9iYWJseSAqc2VsZWN0ZWQqIGJ5IGEgbnVtYmVyIG9mIG90aGVyIG9wdGlvbnMsIHRoaW5ncyBsaWtlIGBJTkVUYCwgYFhGUk1fVVNFUmAsIG1heWJlIGBJTkVUX0VTUGAsIHRoYXQga2luZCBvZiB0aGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBoZXJlLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgaW50byB3aGF0IGV4YWN0bHkgdHJpZ2dlcnMgdGhlIGVuYWJsaW5nIG9mIGBYRlJNYC4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSBgWEZSTWAgYW5kIHNlZSB3aGF0IHRoZSB1cHN0cmVhbSBvcHRpb25zIGFyZS4gVW5kZXJzdGFuZGluZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCBmb3IgYSByb2J1c3QgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjA6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IFhGUk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWc9MzA0PWNvbmZpZyBORVRfSVBWVElcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTMwNy1cdHNlbGVjdCBORVRfSVBfVFVOTkVMXG5uZXQvaXB2NC9LY29uZmlnOjMwODpcdHNlbGVjdCBYRlJNXG5uZXQvaXB2NC9LY29uZmlnLTMwOS1cdGhlbHBcbi0tXG5uZXQvaXB2NC9LY29uZmlnPTMzOT1jb25maWcgSU5FVF9BSFxubmV0L2lwdjQvS2NvbmZpZy0zNDAtXHR0cmlzdGF0ZSBcJiMzNDtJUDogQUggdHJhbnNmb3JtYXRpb25cJiMzNDtcbm5ldC9pcHY0L0tjb25maWc6MzQxOlx0c2VsZWN0IFhGUk1fQUhcbm5ldC9pcHY0L0tjb25maWctMzQyLVx0aGVscFxuLS1cbm5ldC9pcHY0L0tjb25maWc9MzU0PWNvbmZpZyBJTkVUX0VTUFxubmV0L2lwdjQvS2NvbmZpZy0zNTUtXHR0cmlzdGF0ZSBcJiMzNDtJUDogRVNQIHRyYW5zZm9ybWF0aW9uXCYjMzQ7XG5uZXQvaXB2NC9LY29uZmlnOjM1NjpcdHNlbGVjdCBYRlJNX0VTUFxubmV0L2lwdjQvS2NvbmZpZy0zNTctXHRoZWxwXG4tLVxubmV0L2lwdjQvS2NvbmZpZz0zNjk9Y29uZmlnIElORVRfRVNQX09GRkxPQURcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM3MS1cdGRlcGVuZHMgb24gSU5FVF9FU1Bcbm5ldC9pcHY0L0tjb25maWc6MzcyOlx0c2VsZWN0IFhGUk1fT0ZGTE9BRFxubmV0L2lwdjQvS2NvbmZpZy0zNzMtXHRkZWZhdWx0IG5cbi0tXG5uZXQvaXB2NC9LY29uZmlnPTM4Mj1jb25maWcgSU5FVF9FU1BJTlRDUFxuLS1cbm5ldC9pcHY0L0tjb25maWctMzg2LVx0c2VsZWN0IE5FVF9TT0NLX01TR1xubmV0L2lwdjQvS2NvbmZpZzozODc6XHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxubmV0L2lwdjQvS2NvbmZpZy0zODgtXHRoZWxwXG4tLVxubmV0L2lwdjQvS2NvbmZpZz0zOTQ9Y29uZmlnIElORVRfSVBDT01QXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zOTYtXHRzZWxlY3QgSU5FVF9YRlJNX1RVTk5FTFxubmV0L2lwdjQvS2NvbmZpZzozOTc6XHRzZWxlY3QgWEZSTV9JUENPTVBcbm5ldC9pcHY0L0tjb25maWctMzk4LVx0aGVscFxuLS1cbm5ldC9pcHY2L0tjb25maWc9NDc9Y29uZmlnIElORVQ2X0FIXG5uZXQvaXB2Ni9LY29uZmlnLTQ4LVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogQUggdHJhbnNmb3JtYXRpb25cJiMzNDtcbm5ldC9pcHY2L0tjb25maWc6NDk6XHRzZWxlY3QgWEZSTV9BSFxubmV0L2lwdjYvS2NvbmZpZy01MC1cdGhlbHBcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTYyPWNvbmZpZyBJTkVUNl9FU1Bcbm5ldC9pcHY2L0tjb25maWctNjMtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBFU1AgdHJhbnNmb3JtYXRpb25cJiMzNDtcbm5ldC9pcHY2L0tjb25maWc6NjQ6XHRzZWxlY3QgWEZSTV9FU1Bcbm5ldC9pcHY2L0tjb25maWctNjUtXHRoZWxwXG4tLVxubmV0L2lwdjYvS2NvbmZpZz03Nz1jb25maWcgSU5FVDZfRVNQX09GRkxPQURcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTc5LVx0ZGVwZW5kcyBvbiBJTkVUNl9FU1Bcbm5ldC9pcHY2L0tjb25maWc6ODA6XHRzZWxlY3QgWEZSTV9PRkZMT0FEXG5uZXQvaXB2Ni9LY29uZmlnLTgxLVx0ZGVmYXVsdCBuXG4tLVxubmV0L2lwdjYvS2NvbmZpZz05MD1jb25maWcgSU5FVDZfRVNQSU5UQ1Bcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTk0LVx0c2VsZWN0IE5FVF9TT0NLX01TR1xubmV0L2lwdjYvS2NvbmZpZzo5NTpcdHNlbGVjdCBYRlJNX0VTUElOVENQXG5uZXQvaXB2Ni9LY29uZmlnLTk2LVx0aGVscFxuLS1cbm5ldC9pcHY2L0tjb25maWc9MTAyPWNvbmZpZyBJTkVUNl9JUENPTVBcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTEwNC1cdHNlbGVjdCBJTkVUNl9YRlJNX1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZzoxMDU6XHRzZWxlY3QgWEZSTV9JUENPTVBcbm5ldC9pcHY2L0tjb25maWctMTA2LVx0aGVscFxuLS1cbm5ldC9pcHY2L0tjb25maWc9MTEyPWNvbmZpZyBJUFY2X01JUDZcbm5ldC9pcHY2L0tjb25maWctMTEzLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogTW9iaWxpdHlcJiMzNDtcbm5ldC9pcHY2L0tjb25maWc6MTE0Olx0c2VsZWN0IFhGUk1cbm5ldC9pcHY2L0tjb25maWctMTE1LVx0aGVscFxuLS1cbm5ldC9pcHY2L0tjb25maWc9MTUwPWNvbmZpZyBJUFY2X1ZUSVxuLS1cbm5ldC9pcHY2L0tjb25maWctMTUzLVx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcbm5ldC9pcHY2L0tjb25maWc6MTU0Olx0c2VsZWN0IFhGUk1cbm5ldC9pcHY2L0tjb25maWctMTU1LVx0aGVscFxuLS1cbm5ldC94ZnJtL0tjb25maWc9MTQ9Y29uZmlnIFhGUk1fQUxHT1xubmV0L3hmcm0vS2NvbmZpZy0xNS1cdHRyaXN0YXRlXG5uZXQveGZybS9LY29uZmlnOjE2Olx0c2VsZWN0IFhGUk1cbm5ldC94ZnJtL0tjb25maWctMTctXHRzZWxlY3QgQ1JZUFRPXG4tLVxubmV0L3hmcm0vS2NvbmZpZz0yMz1jb25maWcgWEZSTV9VU0VSXG5uZXQveGZybS9LY29uZmlnLTI0LVx0dHJpc3RhdGUgXCYjMzQ7VHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVwmIzM0O1xubmV0L3hmcm0vS2NvbmZpZzoyNTpcdHNlbGVjdCBYRlJNX0FMR09cbm5ldC94ZnJtL0tjb25maWctMjYtXHRoZWxwXG4tLVxubmV0L3hmcm0vS2NvbmZpZz04ND1jb25maWcgWEZSTV9BSFxubmV0L3hmcm0vS2NvbmZpZy04NS1cdHRyaXN0YXRlXG5uZXQveGZybS9LY29uZmlnOjg2Olx0c2VsZWN0IFhGUk1fQUxHT1xubmV0L3hmcm0vS2NvbmZpZy04Ny1cdHNlbGVjdCBDUllQVE9cbi0tXG5uZXQveGZybS9LY29uZmlnPTkzPWNvbmZpZyBYRlJNX0VTUFxubmV0L3hmcm0vS2NvbmZpZy05NC1cdHRyaXN0YXRlXG5uZXQveGZybS9LY29uZmlnOjk1Olx0c2VsZWN0IFhGUk1fQUxHT1xubmV0L3hmcm0vS2NvbmZpZy05Ni1cdHNlbGVjdCBDUllQVE9cbi0tXG5uZXQveGZybS9LY29uZmlnPTEwNj1jb25maWcgWEZSTV9JUENPTVBcbm5ldC94ZnJtL0tjb25maWctMTA3LVx0dHJpc3RhdGVcbm5ldC94ZnJtL0tjb25maWc6MTA4Olx0c2VsZWN0IFhGUk1fQUxHT1xubmV0L3hmcm0vS2NvbmZpZy0xMDktXHRzZWxlY3QgQ1JZUFRPXG4tLVxubmV0L3hmcm0vS2NvbmZpZz0xMTI9Y29uZmlnIE5FVF9LRVlcbm5ldC94ZnJtL0tjb25maWctMTEzLVx0dHJpc3RhdGUgXCYjMzQ7UEZfS0VZIHNvY2tldHMgKGRlcHJlY2F0ZWQpXCYjMzQ7XG5uZXQveGZybS9LY29uZmlnOjExNDpcdHNlbGVjdCBYRlJNX0FMR09cbm5ldC94ZnJtL0tjb25maWctMTE1LVx0aGVscFxuLS1cbm5ldC94ZnJtL0tjb25maWc9MTI1PWNvbmZpZyBORVRfS0VZX01JR1JBVEVcbi0tXG5uZXQveGZybS9LY29uZmlnLTEyNy1cdGRlcGVuZHMgb24gTkVUX0tFWVxubmV0L3hmcm0vS2NvbmZpZzoxMjg6XHRzZWxlY3QgWEZSTV9NSUdSQVRFXG5uZXQveGZybS9LY29uZmlnLTEyOS1cdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjA6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjYwNwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDExNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipYRlJNIE1vZHVsZSBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgWEZSTSBzdHVmZiwgYW5kIGl0IGxvb2tzIGxpa2UgZW5hYmxpbmcgYENPTkZJR19YRlJNX1VTRVJgIGlzIHRoZSBrZXkgdG8gZ2V0dGluZyBYRlJNIHVwIGFuZCBydW5uaW5nLCBsaWtlbHkgYWxvbmdzaWRlIGVpdGhlciBgQ09ORklHX0lORVRfRVNQYCBvciBgQ09ORklHX0lORVRfQUhgLiBTZWVtcyBsaWtlIGBYRlJNX1VTRVJgIGlzIHRoZSB3YXkgdG8gZ28gaGVyZS4gSSYjMzk7bGwgc3RpY2sgd2l0aCB0aGF0LgoKSSBzZWUgdGhhdCB0aGUgY2hhbmdlcyBhcmUgaGl0dGluZyBgeGZybV90cmFuc19yZWluamVjdGAgYW5kIGB4ZnJtX3RyYW5zX3F1ZXVlX25ldGAuIGB4ZnJtX3RyYW5zX3F1ZXVlX25ldGAgaXMgY2FsbGVkIGJ5IGB4ZnJtX3RyYW5zX3F1ZXVlYCwgd2hpY2ggc3VnZ2VzdHMgdGhlcmUmIzM5O3Mgc29tZSBzb3J0IG9mIHF1ZXVpbmcgcHJvY2VzcyBpbnZvbHZlZC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIGNvbnRleHQuIExldCYjMzk7cyB0cmFjZSBiYWNrIHdoZXJlIGB4ZnJtX3RyYW5zX3F1ZXVlYCBpcyBiZWluZyBjYWxsZWQgZnJvbSB0byBncmFzcCB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX3RyYW5zX3F1ZXVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1faW5wdXQuYz03OTE9c3RhdGljIHZvaWQgeGZybV90cmFuc19yZWluamVjdChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L3hmcm0veGZybV9pbnB1dC5jLTgxNi1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo4MTc6aW50IHhmcm1fdHJhbnNfcXVldWVfbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy04MTgtXHRcdFx0IGludCAoKmZpbmlzaCkoc3RydWN0IG5ldCAqLCBzdHJ1Y3Qgc29jayAqLFxuLS1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYy04NDgtfVxubmV0L3hmcm0veGZybV9pbnB1dC5jOjg0OTpFWFBPUlRfU1lNQk9MKHhmcm1fdHJhbnNfcXVldWVfbmV0KTtcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy04NTAtXG5uZXQveGZybS94ZnJtX2lucHV0LmM6ODUxOmludCB4ZnJtX3RyYW5zX3F1ZXVlKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQveGZybS94ZnJtX2lucHV0LmMtODUyLVx0XHQgICAgIGludCAoKmZpbmlzaCkoc3RydWN0IG5ldCAqLCBzdHJ1Y3Qgc29jayAqLFxuLS1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYy04NTQte1xubmV0L3hmcm0veGZybV9pbnB1dC5jOjg1NTpcdHJldHVybiB4ZnJtX3RyYW5zX3F1ZXVlX25ldChkZXZfbmV0KHNrYi1cdTAwM2VkZXYpLCBza2IsIGZpbmlzaCk7XG5uZXQveGZybS94ZnJtX2lucHV0LmMtODU2LX1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo4NTc6RVhQT1JUX1NZTUJPTCh4ZnJtX3RyYW5zX3F1ZXVlKTtcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy04NTgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczMjEKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIHNlYXJjaDoKCioqRGl2aW5nIGludG8gdGhlIENvZGViYXNlOiBUaGUgeGZybV90cmFuc19xdWV1ZSBIdW50KioKCk9rYXksIHRpbWUgdG8gZ2V0IGRpZ2dpbmcuIEkgbmVlZCB0byBmaW5kIGFsbCBpbnN0YW5jZXMgb2YgYHhmcm1fdHJhbnNfcXVldWVgIHdpdGhpbiB0aGlzIGVudGlyZSBjb2RlYmFzZS4gVGhpcyBsaWtlbHkgcmVsYXRlcyB0byBob3cgSVBzZWMgdHJhbnNmb3JtcyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IGhvdyBwYWNrZXRzIGFyZSBxdWV1ZWQgZm9yIHByb2Nlc3NpbmcuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCBpdCBpcyBub3QgdXNlZCBpbiBhIGxvdCBvZiBwbGFjZXMgYmVjYXVzZSBJIGhhdmUgbm90IHdvcmtlZCB3aXRoIGl0IGJlZm9yZS4gSSYjMzk7bGwgbmVlZCB0byB1c2UgbXkgdXN1YWwgc2VhcmNoIHRvb2xzIGFuZCBsb29rIGluIGFsbCBmaWxlcy4gVGltZSB0byBydW4gYSBnbG9iYWwgc2VhcmNoLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdHVybnMgdXAuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgaXQgaW4gdGhlIGNvcmUgdHJhbnNmb3JtIGNvZGUsIHBlcmhhcHMgYXJvdW5kIHRoZSBuZXR3b3JraW5nIHN0YWNrLCBhbmQgbWF5YmUgaW4gc29tZSBzcGVjaWZpYyBkZXZpY2UgZHJpdmVycyBpZiB0aGV5JiMzOTtyZSBkaXJlY3RseSBpbnZvbHZlZCBpbiBvZmZsb2FkaW5nIG9yIG1hbmlwdWxhdGluZyB0aGVzZSB0cmFuc2Zvcm0gcXVldWVzLiBJJiMzOTttIGFsc28gY3VyaW91cyB0byBzZWUgaWYgaXQmIzM5O3MgdXNlZCB3aXRoIGFueSBzcGVjaWZpYyBjcnlwdG8gaGFyZHdhcmUgb3Igd2hldGhlciBpdCYjMzk7cyBtb3JlIGdlbmVyYWwgcHVycG9zZS4gTGV0JiMzOTtzIGdldCB0byBpdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjA6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV90cmFuc19xdWV1ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC94ZnJtLmg9MTc5OT1pbnQgeGZybV9pbnB1dF9yZXN1bWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIpO1xuaW5jbHVkZS9uZXQveGZybS5oOjE4MDA6aW50IHhmcm1fdHJhbnNfcXVldWVfbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmluY2x1ZGUvbmV0L3hmcm0uaC0xODAxLVx0XHRcdCBpbnQgKCpmaW5pc2gpKHN0cnVjdCBuZXQgKiwgc3RydWN0IHNvY2sgKixcbmluY2x1ZGUvbmV0L3hmcm0uaC0xODAyLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICopKTtcbmluY2x1ZGUvbmV0L3hmcm0uaDoxODAzOmludCB4ZnJtX3RyYW5zX3F1ZXVlKHN0cnVjdCBza19idWZmICpza2IsXG5pbmNsdWRlL25ldC94ZnJtLmgtMTgwNC1cdFx0ICAgICBpbnQgKCpmaW5pc2gpKHN0cnVjdCBuZXQgKiwgc3RydWN0IHNvY2sgKixcbi0tXG5uZXQvaXB2NC9lc3A0LmM9MTg4PXN0YXRpYyBpbnQgZXNwX291dHB1dF90YWlsX3RjcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9lc3A0LmMtMTkyLVx0bG9jYWxfYmhfZGlzYWJsZSgpO1xubmV0L2lwdjQvZXNwNC5jOjE5MzpcdGVyciA9IHhmcm1fdHJhbnNfcXVldWVfbmV0KHhzX25ldCh4KSwgc2tiLCBlc3Bfb3V0cHV0X3RjcF9lbmNhcF9jYik7XG5uZXQvaXB2NC9lc3A0LmMtMTk0LVx0bG9jYWxfYmhfZW5hYmxlKCk7XG4tLVxubmV0L2lwdjQveGZybTRfaW5wdXQuYz0yOT1zdGF0aWMgaW5saW5lIGludCB4ZnJtNF9yY3ZfZW5jYXBfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L3hmcm00X2lucHV0LmMtMzktXG5uZXQvaXB2NC94ZnJtNF9pbnB1dC5jOjQwOlx0aWYgKHhmcm1fdHJhbnNfcXVldWUoc2tiLCB4ZnJtNF9yY3ZfZW5jYXBfZmluaXNoMikpXG5uZXQvaXB2NC94ZnJtNF9pbnB1dC5jLTQxLVx0XHRnb3RvIGRyb3A7XG4tLVxubmV0L2lwdjYvZXNwNi5jPTIwNT1zdGF0aWMgaW50IGVzcF9vdXRwdXRfdGFpbF90Y3Aoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvZXNwNi5jLTIwOS1cdGxvY2FsX2JoX2Rpc2FibGUoKTtcbm5ldC9pcHY2L2VzcDYuYzoyMTA6XHRlcnIgPSB4ZnJtX3RyYW5zX3F1ZXVlX25ldCh4c19uZXQoeCksIHNrYiwgZXNwX291dHB1dF90Y3BfZW5jYXBfY2IpO1xubmV0L2lwdjYvZXNwNi5jLTIxMS1cdGxvY2FsX2JoX2VuYWJsZSgpO1xuLS1cbm5ldC9pcHY2L3hmcm02X2lucHV0LmM9MzI9c3RhdGljIGludCB4ZnJtNl90cmFuc3BvcnRfZmluaXNoMihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jLTM0LXtcbm5ldC9pcHY2L3hmcm02X2lucHV0LmM6MzU6XHRpZiAoeGZybV90cmFuc19xdWV1ZShza2IsIGlwNl9yY3ZfZmluaXNoKSkge1xubmV0L2lwdjYveGZybTZfaW5wdXQuYy0zNi1cdFx0a2ZyZWVfc2tiKHNrYik7XG4tLVxubmV0L3hmcm0veGZybV9pbnB1dC5jPTc5MT1zdGF0aWMgdm9pZCB4ZnJtX3RyYW5zX3JlaW5qZWN0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQveGZybS94ZnJtX2lucHV0LmMtODE2LVxubmV0L3hmcm0veGZybV9pbnB1dC5jOjgxNzppbnQgeGZybV90cmFuc19xdWV1ZV9uZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTgxOC1cdFx0XHQgaW50ICgqZmluaXNoKShzdHJ1Y3QgbmV0ICosIHN0cnVjdCBzb2NrICosXG4tLVxubmV0L3hmcm0veGZybV9pbnB1dC5jLTg0OC19XG5uZXQveGZybS94ZnJtX2lucHV0LmM6ODQ5OkVYUE9SVF9TWU1CT0woeGZybV90cmFuc19xdWV1ZV9uZXQpO1xubmV0L3hmcm0veGZybV9pbnB1dC5jLTg1MC1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo4NTE6aW50IHhmcm1fdHJhbnNfcXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy04NTItXHRcdCAgICAgaW50ICgqZmluaXNoKShzdHJ1Y3QgbmV0ICosIHN0cnVjdCBzb2NrICosXG4tLVxubmV0L3hmcm0veGZybV9pbnB1dC5jLTg1NC17XG5uZXQveGZybS94ZnJtX2lucHV0LmM6ODU1Olx0cmV0dXJuIHhmcm1fdHJhbnNfcXVldWVfbmV0KGRldl9uZXQoc2tiLVx1MDAzZWRldiksIHNrYiwgZmluaXNoKTtcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy04NTYtfVxubmV0L3hmcm0veGZybV9pbnB1dC5jOjg1NzpFWFBPUlRfU1lNQk9MKHhmcm1fdHJhbnNfcXVldWUpO1xubmV0L3hmcm0veGZybV9pbnB1dC5jLTg1OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjA6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY2NgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipUcmFjaW5nIHRoZSBDYWxscyB0byBgeGZybV90cmFuc19xdWV1ZWAgYW5kIGB4ZnJtX3RyYW5zX3F1ZXVlX25ldGAqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlc2UgZnVuY3Rpb25zLCBgeGZybV90cmFuc19xdWV1ZV9uZXRgIGFuZCBgeGZybV90cmFuc19xdWV1ZWAuIEkga25vdyB0aGV5JiMzOTtyZSBhY2Nlc3NpYmxlIGZyb20gYSBmZXcga2V5IHBsYWNlczogYGVzcF9vdXRwdXRfdGFpbF90Y3BgLCB3aGljaCBzZWVtcyB0byBiZSB0aWVkIHRvIGVpdGhlciBgQ09ORklHX0lORVRfRVNQSU5UQ1BgIG9yIGBDT05GSUdfSU5FVDZfRVNQSU5UQ1BgLCBkZXBlbmRpbmcgb24gdGhlIElQdjQvSVB2NiBjb250ZXh0LCBhbmQgYWxzbyBmcm9tICBgeGZybTRfcmN2X2VuY2FwX2ZpbmlzaGAgYW5kIGB4ZnJtNl90cmFuc3BvcnRfZmluaXNoMmAuCgpSaWdodCwgbGV0JiMzOTtzIGp1c3QgY29uZmlybSB0aG9zZSBjb25maWcgb3B0aW9ucyBmaXJzdC4gTG9va3MgbGlrZSBib3RoIGBDT05GSUdfSU5FVF9FU1BJTlRDUGAgYW5kIGBDT05GSUdfSU5FVDZfRVNQSU5UQ1BgIHNlbGVjdCBgWEZSTV9FU1BJTlRDUGAsIHdoaWNoIGlzIHdoYXQgSSBzdXNwZWN0ZWQuIEdvb2QuIAoKTm93LCBmb2N1c2luZyBvbiBgeGZybTRfcmN2X2VuY2FwX2ZpbmlzaGAsIEkgcmVtZW1iZXIgdGhhdCBpdCYjMzk7cyB3aXRoaW4gYHhmcm00X2lucHV0LmNgLiBUaGF0IGZpbGUmIzM5O3MgYnVpbGQgcHJvY2VzcyByZWxpZXMgb24gYENPTkZJR19YRlJNYCwgc28gSSYjMzk7bGwgY2hlY2sgYG5ldC9pcHY0L01ha2VmaWxlYCB0byBjb25maXJtIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtNF9pbnB1dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZT02NT1vYmotJChDT05GSUdfTkVUTEFCRUwpICYjNDM7PSBjaXBzb19pcHY0Lm9cbm5ldC9pcHY0L01ha2VmaWxlLTY2LVxubmV0L2lwdjQvTWFrZWZpbGU6Njc6b2JqLSQoQ09ORklHX1hGUk0pICYjNDM7PSB4ZnJtNF9wb2xpY3kubyB4ZnJtNF9zdGF0ZS5vIHhmcm00X2lucHV0Lm8gXFxcbm5ldC9pcHY0L01ha2VmaWxlLTY4LVx0XHQgICAgICB4ZnJtNF9vdXRwdXQubyB4ZnJtNF9wcm90b2NvbC5vXG4tLVxubmV0L2lwdjQveGZybTRfaW5wdXQuYy0yLS8qXG5uZXQvaXB2NC94ZnJtNF9pbnB1dC5jOjM6ICogeGZybTRfaW5wdXQuY1xubmV0L2lwdjQveGZybTRfaW5wdXQuYy00LSAqXG4tLVxubmV0L2lwdjQveGZybTRfcHJvdG9jb2wuYz0xOTI9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfcHJvdG9jb2wgaXBjb21wNF9wcm90b2NvbCA9IHtcbi0tXG5uZXQvaXB2NC94ZnJtNF9wcm90b2NvbC5jLTE5Ny1cbm5ldC9pcHY0L3hmcm00X3Byb3RvY29sLmM6MTk4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9pbnB1dF9hZmluZm8geGZybTRfaW5wdXRfYWZpbmZvID0ge1xubmV0L2lwdjQveGZybTRfcHJvdG9jb2wuYy0xOTktXHQuZmFtaWx5XHRcdD1cdEFGX0lORVQsXG4tLVxubmV0L2lwdjQveGZybTRfcHJvdG9jb2wuYz0zMDM9dm9pZCBfX2luaXQgeGZybTRfcHJvdG9jb2xfaW5pdCh2b2lkKVxubmV0L2lwdjQveGZybTRfcHJvdG9jb2wuYy0zMDQte1xubmV0L2lwdjQveGZybTRfcHJvdG9jb2wuYzozMDU6XHR4ZnJtX2lucHV0X3JlZ2lzdGVyX2FmaW5mbyhcdTAwMjZ4ZnJtNF9pbnB1dF9hZmluZm8pO1xubmV0L2lwdjQveGZybTRfcHJvdG9jb2wuYy0zMDYtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTM1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlhGUk0gU3Vic3lzdGVtIEJ1ZyBGaXggYW5kIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldHMqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IHNlZW1zIHRvIGJlIHRhcmdldGluZyBgeGZybTRfaW5wdXQuY2AuIFRoYXQgZmlsZSYjMzk7cyBidWlsdCB3aGVuIGBDT05GSUdfWEZSTWAgaXMgZW5hYmxlZCwgd2hpY2ggaXMgdGhlIGZvdW5kYXRpb25hbCBwYXJ0IG9mIHRoZSBYRlJNIHN1YnN5c3RlbSwgc28gdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0byBwYXkgYXR0ZW50aW9uIHRvLgoKVGhlIGNvcmUgb2YgdGhlIGlzc3VlIHNlZW1zIHRvIGNlbnRlciBhcm91bmQgdGhlIGZ1bmN0aW9ucyBgeGZybV90cmFuc19xdWV1ZV9uZXRgIGFuZCBgeGZybV90cmFuc19xdWV1ZWAuIFRoZXNlIGFyZSBkZWZpbml0ZWx5IHJlYWNoYWJsZSBkdXJpbmcgc3RhbmRhcmQgWEZSTSBwcm9jZXNzaW5nIOKAkyBJIGNhbiB0cmFjZSB0aGVtIGluIG15IG1pbmQmIzM5O3MgZXllIHRocm91Z2ggdGhlIGRhdGEgcGF0aHMuIFRoZSBwYXRjaCBpdHNlbGYgaXMgZml4aW5nIGEgYnVnIHdpdGhpbiB0aG9zZSB0d28gZnVuY3Rpb25zIGFuZCBhbHNvIGB4ZnJtX3RyYW5zX3JlaW5qZWN0YC4gVGhlIGZpeCBpbnZvbHZlcyB0YWtpbmcgYSByZWZlcmVuY2UgdG8gYHNrYi0mZ3Q7ZGV2YCBhbmQgZW5zdXJpbmcgdGhlIHZhbGlkaXR5IG9mIGBza2JfZHN0YC4gTWFrZXMgc2Vuc2UsIHByb3RlY3RpbmcgYWdhaW5zdCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zIHdpdGggdGhlIHNvY2tldCBidWZmZXIgYW5kIGRldmljZSBpbnRlcmFjdGlvbnMsIGEgY29tbW9uIGlzc3VlIGluIG5ldHdvcmtpbmcgY29kZS4KClRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIFhGUk0gY29yZSwgc28gSSBuZWVkIHRvIGFzc2VzcyBpdHMgaW1wYWN0LiBCYXNlZCBvbiB0aGUgZGVzY3JpcHRpb24sIGFuZCB0aGUgZnVuY3Rpb25zIGFmZmVjdGVkLCB0aGlzIGlzIGRlZmluaXRlbHkgYSBjaGFuZ2UgdGhhdCB3YXJyYW50cyBmdXp6aW5nLiBUaGUgcGF0Y2ggaXMgcHJvYmFibHkgYWRkcmVzc2luZyBhIHN1YnRsZSB2dWxuZXJhYmlsaXR5IGFuZCBpdOKAmXMgYWx3YXlzIGdvb2QgdG8gY2hlY2sgZm9yIHRoYXQuCgpGb3IgYSB0YXJnZXRlZCBmdXp6aW5nIGFwcHJvYWNoLCBJJiMzOTtsbCBmb2N1cyBvbiBgeGZybV90cmFuc19xdWV1ZV9uZXRgIGFuZCBgeGZybV90cmFuc19xdWV1ZWAuIGB4ZnJtX3RyYW5zX3JlaW5qZWN0YCBpcyBhbHNvIG1lbnRpb25lZC4gSXQmIzM5O3Mgc3RhdGljLCBidXQgaXQmIzM5O3MgdXNlZCBhcyBhIHdvcmtxdWV1ZSBjYWxsYmFjaywgc28gaXQmIzM5O3MgYSB0b3AtbGV2ZWwgZnVuY3Rpb24gaW4gYSB3YXkuIEkgdGhpbmsgaXQgbWlnaHQgYmUgdXNlZnVsIHRvIGZvY3VzIG9uIHRoZSBvdGhlciB0d28gZnVuY3Rpb25zLgoKSSBzaG91bGQgYWxzbyBjaGVjayB0aGUgc291cmNlIGNvZGUgZm9yIGB4ZnJtX3RyYW5zX3JlaW5qZWN0YCBpbiBgbmV0L3hmcm0veGZybV9pbnB1dC5jYCBqdXN0IHRvIGJlIHN1cmUuIEkgd2lsbCBwcm9iYWJseSBhbHNvIHdhbnQgdG8gcmV2aWV3IGFueSB0ZXN0cyB0aGF0IGNvdmVyIHRoaXMgbW9kdWxlLCBpZiB0aGV5IGV4aXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX3RyYW5zX3JlaW5qZWN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1faW5wdXQuYz03ODk9RVhQT1JUX1NZTUJPTCh4ZnJtX2lucHV0X3Jlc3VtZSk7XG5uZXQveGZybS94ZnJtX2lucHV0LmMtNzkwLVxubmV0L3hmcm0veGZybV9pbnB1dC5jOjc5MTpzdGF0aWMgdm9pZCB4ZnJtX3RyYW5zX3JlaW5qZWN0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy03OTIte1xuLS1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYz04NTk9dm9pZCBfX2luaXQgeGZybV9pbnB1dF9pbml0KHZvaWQpXG4tLVxubmV0L3hmcm0veGZybV9pbnB1dC5jLTg3Ny1cdFx0X19za2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNnRyYW5zLVx1MDAzZXF1ZXVlKTtcbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo4Nzg6XHRcdElOSVRfV09SSyhcdTAwMjZ0cmFucy1cdTAwM2V3b3JrLCB4ZnJtX3RyYW5zX3JlaW5qZWN0KTtcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy04NzktXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDkyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGJyZWFrZG93biBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uLCB0aGlua2luZyB0aHJvdWdoIHRoaXMgY29kZToKCioqQW5hbHl6aW5nIGB4ZnJtX3RyYW5zX3JlaW5qZWN0YCBhcyBhIFBvdGVudGlhbCBTeW1ib2wqKgoKUmlnaHQsIGxldCYjMzk7cyBzZWUsIHRoZSBmdW5jdGlvbiBgeGZybV90cmFuc19yZWluamVjdGAgaXMgYmVpbmcgcGFzc2VkIHRvIGBJTklUX1dPUktgLiBTaW5jZSBpdCYjMzk7cyBub3QgYmVpbmcgaW5saW5lZCBkaXJlY3RseSwgdGhhdCBtZWFucyBpdCYjMzk7cyBhIHBvdGVudGlhbCBmb2N1cyBzeW1ib2wgdGhhdCBjb3VsZCBiZSBpbXBvcnRhbnQgZm9yIGNvbmZpZ3VyYXRpb24uCgpUaGVyZWZvcmUsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgbmVjZXNzYXJ5IHRvIGhhdmUgdGhpcyBmdW5jdGlvbiBhdmFpbGFibGUuIEl0IGxvb2tzIGxpa2UgdGhlIHJlbGV2YW50IG9uZXMgYXJlOgoKKiAgIGBDT05GSUdfWEZSTV9VU0VSYCAtIE9idmlvdXNseSwgbmVlZHMgdG8gYmUgZW5hYmxlZC4KKiAgIGBDT05GSUdfSU5FVF9FU1BgIC0gUHJvYmFibHkgcmVsYXRlZCB0byBJUHNlYyBFbmNhcHN1bGF0aW5nIFNlY3VyaXR5IFBheWxvYWQgKEVTUCkuCiogICBgQ09ORklHX0lORVRfQUhgIC0gTGlrZWx5IHJlbGF0ZWQgdG8gSVBzZWMgQXV0aGVudGljYXRpb24gSGVhZGVyIChBSCkuCiogICBgQ09ORklHX1hGUk1fRVNQSU5UQ1BgIC0gVGhpcyBvbmUgaXMgYSBtYXliZSwgYW5kIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybS4gSXQgYXBwZWFycyB0byBiZSB1c2luZyBgeGZybV90cmFuc19xdWV1ZV9uZXRgIHZpYSBgZXNwX291dHB1dF90YWlsX3RjcGAsIHNvIGl04oCZcyB3b3J0aCBpbnZlc3RpZ2F0aW5nIHRvIGRldGVybWluZSBpZiBpdCBpcyBuZWNlc3NhcnkuCgpJIHNob3VsZCB2ZXJpZnkgdGhpcyBgQ09ORklHX1hGUk1fRVNQSU5UQ1BgIGNvbm5lY3Rpb24gYnkgbG9va2luZyBpbnRvIGBlc3Bfb3V0cHV0X3RhaWxfdGNwYC4gU28sIEkmIzM5O2xsIGNoZWNrIGl0cyBpbXBsZW1lbnRhdGlvbiBpbiBgbmV0L2lwdjQvZXNwNC5jYC4gVGhhdCBzaG91bGQgY2xhcmlmeSB3aGV0aGVyIGl0JiMzOTtzIHRydWx5IGVzc2VudGlhbCBpbiB0aGlzIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VzcF9vdXRwdXRfdGFpbF90Y3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvZXNwNC5jPTE3OT1zdGF0aWMgaW50IGVzcF9vdXRwdXRfdGNwX2VuY2FwX2NiKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L2VzcDQuYy0xODctXG5uZXQvaXB2NC9lc3A0LmM6MTg4OnN0YXRpYyBpbnQgZXNwX291dHB1dF90YWlsX3RjcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY0L2VzcDQuYy0xODkte1xuLS1cbm5ldC9pcHY0L2VzcDQuYy0yMDItI2Vsc2Vcbm5ldC9pcHY0L2VzcDQuYzoyMDM6c3RhdGljIGludCBlc3Bfb3V0cHV0X3RhaWxfdGNwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2lwdjQvZXNwNC5jLTIwNC17XG4tLVxubmV0L2lwdjQvZXNwNC5jPTIxMD1zdGF0aWMgdm9pZCBlc3Bfb3V0cHV0X2RvbmUodm9pZCAqZGF0YSwgaW50IGVycilcbi0tXG5uZXQvaXB2NC9lc3A0LmMtMjQxLVx0XHQgICAgeC1cdTAwM2VlbmNhcCBcdTAwMjZcdTAwMjYgeC1cdTAwM2VlbmNhcC1cdTAwM2VlbmNhcF90eXBlID09IFRDUF9FTkNBUF9FU1BJTlRDUCkge1xubmV0L2lwdjQvZXNwNC5jOjI0MjpcdFx0XHRlcnIgPSBlc3Bfb3V0cHV0X3RhaWxfdGNwKHgsIHNrYik7XG5uZXQvaXB2NC9lc3A0LmMtMjQzLVx0XHRcdGlmIChlcnIgIT0gLUVJTlBST0dSRVNTKVxuLS1cbm5ldC9pcHY0L2VzcDQuYz00OTg9aW50IGVzcF9vdXRwdXRfdGFpbChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGVzcF9pbmZvICplc3ApXG4tLVxubmV0L2lwdjQvZXNwNC5jLTYxMi1cdGlmICghZXJyIFx1MDAyNlx1MDAyNiB4LVx1MDAzZWVuY2FwIFx1MDAyNlx1MDAyNiB4LVx1MDAzZWVuY2FwLVx1MDAzZWVuY2FwX3R5cGUgPT0gVENQX0VOQ0FQX0VTUElOVENQKVxubmV0L2lwdjQvZXNwNC5jOjYxMzpcdFx0ZXJyID0gZXNwX291dHB1dF90YWlsX3RjcCh4LCBza2IpO1xubmV0L2lwdjQvZXNwNC5jLTYxNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjA6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0MzUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgRVNQLVRDUCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGVzcF9vdXRwdXRfdGFpbF90Y3BgLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBmdW5jdGlvbiYjMzk7cyBwcm9iYWJseSBkZWZpbmVkIGNvbmRpdGlvbmFsbHkuIEdpdmVuIHRoZSBjb250ZXh0LCBteSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgaXQmIzM5O3MgdGllZCB0byB0aGUgYENPTkZJR19JTkVUX0VTUElOVENQYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gTGV0JiMzOTtzIGNvbmZpcm0gdGhhdCBoeXBvdGhlc2lzLiBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgYCNpZmRlZmAgYmxvY2sgdG8gc2VlIGlmIG15IGd1ZXNzIGlzIGNvcnJlY3QuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gdGhlIHJlbGV2YW50IGhlYWRlciBmaWxlcyBhbmQgc2VlIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgYnJvdWdodCBpbnRvIHRoZSBjb2RlLiBMZXQmIzM5O3MgdmVyaWZ5IHRoaXMgYW5kIHRoZW4gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgaW50ZW5kZWQgcHVycG9zZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjA6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0lORVRfRVNQSU5UQ1AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvZXNwNC5jPTk5PXN0YXRpYyB2b2lkIGVzcF9zc2dfdW5yZWYoc3RydWN0IHhmcm1fc3RhdGUgKngsIHZvaWQgKnRtcCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBhbHJlYWR5X3VucmVmKVxuLS1cbm5ldC9pcHY0L2VzcDQuYy0xMjQtXG5uZXQvaXB2NC9lc3A0LmM6MTI1OiNpZmRlZiBDT05GSUdfSU5FVF9FU1BJTlRDUFxubmV0L2lwdjQvZXNwNC5jLTEyNi1zdGF0aWMgc3RydWN0IHNvY2sgKmVzcF9maW5kX3RjcF9zayhzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcbi0tXG5uZXQvaXB2NC9lc3A0LmM9MzA5PXN0YXRpYyBzdHJ1Y3QgaXBfZXNwX2hkciAqZXNwX291dHB1dF91ZHBfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC9lc3A0LmMtMzM4LVxubmV0L2lwdjQvZXNwNC5jOjMzOTojaWZkZWYgQ09ORklHX0lORVRfRVNQSU5UQ1Bcbm5ldC9pcHY0L2VzcDQuYy0zNDAtc3RhdGljIHN0cnVjdCBpcF9lc3BfaGRyICplc3Bfb3V0cHV0X3RjcF9lbmNhcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbi0tXG5uZXQvaXB2NC9lc3A0LmM9MTExMj1zdGF0aWMgaW50IGVzcF9pbml0X3N0YXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2lwdjQvZXNwNC5jLTExNTAtXHRcdFx0YnJlYWs7XG5uZXQvaXB2NC9lc3A0LmM6MTE1MTojaWZkZWYgQ09ORklHX0lORVRfRVNQSU5UQ1Bcbm5ldC9pcHY0L2VzcDQuYy0xMTUyLVx0XHRjYXNlIFRDUF9FTkNBUF9FU1BJTlRDUDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjA6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwMTUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgRVNQIGluIFRDUCBFbmNhcHN1bGF0aW9uKioKCkFscmlnaHQsIHNvIGBDT05GSUdfSU5FVF9FU1BJTlRDUGAgaXMgZGVmaW5pdGVseSBlbmFibGVkLCB0aGF0IG11Y2ggaXMgY2xlYXIuIE15IG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGFuZCBzZWUgaG93IGl0JiMzOTtzIGhhbmRsZWQgYXQgdGhlIHBhY2tldCBwcm9jZXNzaW5nIGxldmVsLCBzcGVjaWZpY2FsbHkgZHVyaW5nIHRoZSByZWNlaXZlIHBhdGguIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIGB4ZnJtNF9yY3ZfZW5jYXBfZmluaXNoYCB3aXRoaW4gYG5ldC9pcHY0L3hmcm00X2lucHV0LmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgdGhhdCBmdW5jdGlvbiBkb2VzIHdpdGggYW4gRVNQIHBhY2tldCB0aGF0JiMzOTtzIGJlZW4gZW5jYXBzdWxhdGVkIGluIFRDUC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgZGUtZW5jYXBzdWxhdGlvbiBsb2dpYywgaG93IHRoZSBpbm5lciBJUCBoZWFkZXIgaXMgcmUtY29uc3RydWN0ZWQsIGFuZCBjcnVjaWFsbHksIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgVENQIGxheWVyLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBvZiBYRlJNIHdpdGggVENQLCBhbmQgdGhpcyBmdW5jdGlvbiBzaG91bGQgZXhwb3NlIHRoYXQuIEkmIzM5O2xsIGJlIGZvY3VzZWQgb24gYW55IHBvdGVudGlhbCBnb3RjaGFzIG9yIG9wdGltaXphdGlvbnMsIGxpa2Ugd2hldGhlciB0aGVyZSYjMzk7cyBhbnkgdW5uZWNlc3NhcnkgY29weWluZyBvciByZS1jYWxjdWxhdGlvbiBvZiBjaGVja3N1bXMuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCBpdCBoYW5kbGVzIHRoZSBpbm5lciBJUCBoZWFkZXIgYW5kIFRDUCBjb3JyZWN0bHksIGJ1dCBJIG5lZWQgdG8gYmUgMTAwJSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtNF9yY3ZfZW5jYXBfZmluaXNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3hmcm00X2lucHV0LmMtMjItXG5uZXQvaXB2NC94ZnJtNF9pbnB1dC5jOjIzOnN0YXRpYyBpbnQgeGZybTRfcmN2X2VuY2FwX2ZpbmlzaDIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvaXB2NC94ZnJtNF9pbnB1dC5jLTI0LVx0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC94ZnJtNF9pbnB1dC5jLTI4LVxubmV0L2lwdjQveGZybTRfaW5wdXQuYzoyOTpzdGF0aWMgaW5saW5lIGludCB4ZnJtNF9yY3ZfZW5jYXBfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLFxubmV0L2lwdjQveGZybTRfaW5wdXQuYy0zMC1cdFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQveGZybTRfaW5wdXQuYy0zOS1cbm5ldC9pcHY0L3hmcm00X2lucHV0LmM6NDA6XHRpZiAoeGZybV90cmFuc19xdWV1ZShza2IsIHhmcm00X3Jjdl9lbmNhcF9maW5pc2gyKSlcbm5ldC9pcHY0L3hmcm00X2lucHV0LmMtNDEtXHRcdGdvdG8gZHJvcDtcbi0tXG5uZXQvaXB2NC94ZnJtNF9pbnB1dC5jPTQ5PWludCB4ZnJtNF90cmFuc3BvcnRfZmluaXNoKHN0cnVjdCBza19idWZmICpza2IsIGludCBhc3luYylcbi0tXG5uZXQvaXB2NC94ZnJtNF9pbnB1dC5jLTc3LVx0XHRkZXZfbmV0KGRldiksIE5VTEwsIHNrYiwgZGV2LCBOVUxMLFxubmV0L2lwdjQveGZybTRfaW5wdXQuYzo3ODpcdFx0eGZybTRfcmN2X2VuY2FwX2ZpbmlzaCk7XG5uZXQvaXB2NC94ZnJtNF9pbnB1dC5jLTc5LVx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzM4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFhGUk0gUGF0Y2gmIzM5O3MgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgc2VlIGhlcmUsIGB4ZnJtNF9yY3ZfZW5jYXBfZmluaXNoYCBpcyBkaXJlY3RseSB0aWVkIGludG8gYHhmcm00X3RyYW5zcG9ydF9maW5pc2hgLCB3aGljaCBpcyBhIHByZXR0eSBzdGFuZGFyZCBwYXJ0IG9mIFhGUk0gaW5wdXQgcHJvY2Vzc2luZy4gVGhhdCBhbG9uZSB0ZWxscyBtZSB0aGF0IGhhdmluZyBgQ09ORklHX1hGUk1fVVNFUmAgYW5kIGBDT05GSUdfSU5FVF9FU1BgIGNvbmZpZ3VyZWQgd291bGQgYmUgZW5vdWdoIHRvIGdldCB0byB0aGlzIGNvZGUuCgpUaGVyZWZvcmUsIG15IHN1bW1hcnkgaXMgdGhpczoKClRoaXMgbG9va3MgbGlrZSBhIHdvcnRod2hpbGUgdGFyZ2V0IGZvciBmdXp6aW5nLiBUaGUgcGF0Y2ggaXMgZml4aW5nIGEgYnVnIHJlbGF0ZWQgdG8gaG93IFhGUk0gaGFuZGxlcyBxdWV1aW5nIGFuZCByZS1pbmplY3RpbmcgcGFja2V0cywgc3BlY2lmaWNhbGx5IHdpdGhpbiBgeGZybV90cmFuc19xdWV1ZV9uZXRgLCBgeGZybV90cmFuc19xdWV1ZWAsIGFuZCBgeGZybV90cmFuc19yZWluamVjdGAuIFRoZSBmaXggaW52b2x2ZXMgY29ycmVjdGx5IG1hbmFnaW5nIHJlZmVyZW5jZXMgdG8gYHNrYi0mZ3Q7ZGV2YCBhbmQgZW5zdXJpbmcgYHNrYl9kc3RgIGlzIHZhbGlkLCB3aGljaCBwb2ludHMgdG8gY2hhbmdlcyBpbiBjb3JlIHBhY2tldCBwcm9jZXNzaW5nLiBTaW5jZSBpdCB0b3VjaGVzIHRoZXNlIG5ldHdvcmsgaW5wdXQvb3V0cHV0IHBhdGhzLCBpdCBoYXMgc2lnbmlmaWNhbnQgcG90ZW50aWFsIGZvciB0cmlnZ2VyaW5nIGludGVyZXN0aW5nIHN0YXRlcy4KCk15IHByaW1hcnkgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZSBmdW5jdGlvbnMgYHhmcm1fdHJhbnNfcXVldWVfbmV0YCwgYHhmcm1fdHJhbnNfcXVldWVgLCBhbmQgYHhmcm1fdHJhbnNfcmVpbmplY3RgLgoKVG8gZW5zdXJlIGJyb2FkIGNvdmVyYWdlLCBJIHNob3VsZCBjb25zaWRlciBlbmFibGluZyB0aGUgY29uZmlndXJhdGlvbnMgYFhGUk1fVVNFUmAsIGBJTkVUX0VTUGAsIGFuZCB0aGVuIEkgd2FudCB0byBkb3VibGUgY2hlY2sgbXkgYXNzdW1wdGlvbnMsIGJ1dCB0aGUgYElORVRfRVNQSU5UQ1BgIGFuZCBgSU5FVDZfRVNQSU5UQ1BgIGNvbmZpZ3VyYXRpb25zIGxvb2sgbGlrZSB0aGV5IHNob3VsZCBhbHNvIGJlIHJlbGV2YW50LiBJIHdhbnQgdG8gYmUgY2VydGFpbiBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhIGNvbmRpdGlvbmFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSU5FVF9FU1BJTlRDUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTM2OT1jb25maWcgSU5FVF9FU1BfT0ZGTE9BRFxuLS1cbm5ldC9pcHY0L0tjb25maWctMzgxLVxubmV0L2lwdjQvS2NvbmZpZzozODI6Y29uZmlnIElORVRfRVNQSU5UQ1Bcbm5ldC9pcHY0L0tjb25maWctMzgzLVx0Ym9vbCBcJiMzNDtJUDogRVNQIGluIFRDUCBlbmNhcHN1bGF0aW9uIChSRkMgODIyOSlcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjA6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0NTAKCQkJCQkJCW91dHB1dDogMTUxCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeToKCioqVGhlIEV4aXN0ZW5jZSBvZiB0aGUgRGF0YSBhbmQgVG9vbGluZyoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGFja25vd2xlZGdpbmcgdGhlIHJlYWxpdHkgb2YgdGhlIHNpdHVhdGlvbjogJiMzNDtZZXMsIHRoZXkgZXhpc3QuJiMzNDsgU3BlY2lmaWNhbGx5LCB0aGUgZGF0YSBhbmQgaXRzIHJlbGF0ZWQgcHJvY2Vzc2luZyBjYXBhYmlsaXRpZXMsIGFzIHdlbGwgYXMgdGhlIHRvb2xzIHdlIGhhdmUgdG8gd29yayB3aXRoIHRoZW0uIFRoaXMgaXMgdGhlIGZvdW5kYXRpb247IHdlJiMzOTtyZSBlc3RhYmxpc2hpbmcgY29tbW9uIGdyb3VuZC4gSSYjMzk7bSBhc3N1bWluZywgYXMgYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQsIHlvdSYjMzk7cmUgYWxzbyBhd2FyZSBvZiB0aGVtLgoKTm93LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIFRoZSBpbnRlbnRpb24gaXMgdG8gJiMzNDt1c2UgdGhlIHNldC1yZXN1bHRzIHRvb2wuJiMzNDsgVGhpcyBzaWduYWxzIGEgdmVyeSBzcGVjaWZpYyBhcHByb2FjaC4gV2UmIzM5O3JlIG5vdCBqdXN0IGJyYWluc3Rvcm1pbmcgb3IgZXhwbG9yaW5nIGFic3RyYWN0IGNvbmNlcHRzLiBXZSYjMzk7cmUgbW92aW5nIHRvd2FyZHMgcHJhY3RpY2FsIGFwcGxpY2F0aW9uIGFuZCBhbmFseXNpcy4gSXQmIzM5O3MgYWJvdXQgbGV2ZXJhZ2luZyBhIGRlZmluZWQgdG9vbCwgbGlrZWx5IG9uZSBnZWFyZWQgdG93YXJkcyBwcmVzZW50aW5nIGZpbmRpbmdzLCBwZXJoYXBzIGEgdmlzdWFsaXphdGlvbiBmcmFtZXdvcmsgb3IgYW4gYXV0b21hdGVkIHJlcG9ydGluZyBzeXN0ZW0sIHdoYXRldmVyIHdlJiMzOTt2ZSBhZ3JlZWQgb24sIHRvIGRpc3RpbGwgdGhlIGF2YWlsYWJsZSBpbmZvcm1hdGlvbi4gSXTigJlzIGFib3V0IGxldmVyYWdpbmcgb3VyIHJlc291cmNlcyB0byBvYnRhaW4gYWN0aW9uYWJsZSBvdXRwdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlJNX1VTRVImIzM0OywKICAgICYjMzQ7SU5FVF9FU1AmIzM0OywKICAgICYjMzQ7SU5FVF9FU1BJTlRDUCYjMzQ7LAogICAgJiMzNDtJTkVUNl9FU1AmIzM0OywKICAgICYjMzQ7SU5FVDZfRVNQSU5UQ1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZnJtX3RyYW5zX3F1ZXVlX25ldCYjMzQ7LAogICAgJiMzNDt4ZnJtX3RyYW5zX3F1ZXVlJiMzNDssCiAgICAmIzM0O3hmcm1fdHJhbnNfcmVpbmplY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gWEZSTSBwYWNrZXQgcXVldWVpbmcgYW5kIHJlaW5qZWN0aW9uIHBhdGhzIGJ5IHByb3Blcmx5IGhvbGRpbmcgYSByZWZlcmVuY2UgdG8gc2tiLVx1MDAzZWRldiBhbmQgZW5zdXJpbmcgc2tiX2RzdCBpcyB2YWxpZC4gVGhpcyBtb2RpZmllcyBjb3JlIFhGUk0gcGFja2V0IHByb2Nlc3NpbmcgbG9naWMgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gbmV0d29yayBpbnB1dC9vdXRwdXQgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUElOVENQJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUNl9FU1BJTlRDUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hmcm1fdHJhbnNfcXVldWVfbmV0JiMzNDssCiAgICAmIzM0O3hmcm1fdHJhbnNfcXVldWUmIzM0OywKICAgICYjMzQ7eGZybV90cmFuc19yZWluamVjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBYRlJNIHBhY2tldCBxdWV1ZWluZyBhbmQgcmVpbmplY3Rpb24gcGF0aHMgYnkgcHJvcGVybHkgaG9sZGluZyBhIHJlZmVyZW5jZSB0byBza2ItXHUwMDNlZGV2IGFuZCBlbnN1cmluZyBza2JfZHN0IGlzIHZhbGlkLiBUaGlzIG1vZGlmaWVzIGNvcmUgWEZSTSBwYWNrZXQgcHJvY2Vzc2luZyBsb2dpYyB3aGljaCBpcyByZWFjaGFibGUgZnJvbSBuZXR3b3JrIGlucHV0L291dHB1dCBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjA6Mjc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMDoyNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgb2JqZWN0IGxpZmV0aW1lIGFuZCByZWZlcmVuY2UgY291bnRpbmcgaXNzdWVzIGZvciBgc2tiLVx1MDAzZWRldmAgYW5kIGBza2JfZHN0YCB3aGVuIGFuIGBza2JgIGlzIHF1ZXVlZCBmb3IgcmVpbmplY3Rpb24gaW4gdGhlIFhGUk0gc3Vic3lzdGVtLiBJdCBhZGRzIGBkZXZfaG9sZCgpYCBhbmQgYGRldl9wdXQoKWAgZm9yIHRoZSBuZXR3b3JrIGRldmljZSwgZm9yY2VzIHRoZSBkZXN0aW5hdGlvbiBlbnRyeSB2aWEgYHNrYl9kc3RfZm9yY2UoKWAsIGFuZCB3cmFwcyB0aGUgcmVpbmplY3Rpb24gbG9vcCBpbiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uIFRoZXNlIGNoYW5nZXMgYXJlIGRlc2lnbmVkIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgKFVBRikgb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgcmVsYXRlZCB0byBmcmVlZCBuZXR3b3JrIGRldmljZXMgb3IgZGVzdGluYXRpb24gZW50cmllcy4gU3VjaCBtZW1vcnkgY29ycnVwdGlvbiBhbmQgbGlmZXRpbWUgYnVncyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBidWZmZXIgbGVuZ3Rocywgb3IgZXhwb3NlIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzkyNWE2Y2VlOTkwMGY1YzI2YTJiNmE0YWY2MWFlYzI5N2VjOGUwNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDcgMjA6MjY6MTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2lucHV0LmMgYi9uZXQveGZybS94ZnJtX2lucHV0LmMKaW5kZXggZWVjYWIzMzdiZDBhNy4uOGY2MTA5ZWFkYTdlYSAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV9pbnB1dC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1faW5wdXQuYwpAQCAtODAwLDEyICYjNDM7ODAwLDE3IEBAIHN0YXRpYyB2b2lkIHhmcm1fdHJhbnNfcmVpbmplY3Qoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCXNwaW5fdW5sb2NrX2JoKCZhbXA7dHJhbnMtJmd0O3F1ZXVlX2xvY2spOwogCiAJbG9jYWxfYmhfZGlzYWJsZSgpOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiAJd2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKCZhbXA7cXVldWUpKSkgewogCQlzdHJ1Y3QgbmV0ICpuZXQgPSBYRlJNX1RSQU5TX1NLQl9DQihza2IpLSZndDtuZXQ7CiYjNDM7CQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLSZndDtkZXY7CiAKIAkJWEZSTV9UUkFOU19TS0JfQ0Ioc2tiKS0mZ3Q7ZmluaXNoKG5ldCwgTlVMTCwgc2tiKTsKJiM0MzsJCWlmIChkZXYpCiYjNDM7CQkJZGV2X3B1dChkZXYpOwogCQlwdXRfbmV0KG5ldCk7CiAJfQomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKIAlsb2NhbF9iaF9lbmFibGUoKTsKIH0KIApAQCAtODIxLDEyICYjNDM7ODI2LDE4IEBAIGludCB4ZnJtX3RyYW5zX3F1ZXVlX25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsCiAJaWYgKHNrYl9xdWV1ZV9sZW4oJmFtcDt0cmFucy0mZ3Q7cXVldWUpICZndDs9IFJFQURfT05DRShuZXRfaG90ZGF0YS5tYXhfYmFja2xvZykpCiAJCXJldHVybiAtRU5PQlVGUzsKIAomIzQzOwlpZiAoc2tiX2RzdChza2IpICZhbXA7JmFtcDsgIXNrYl9kc3RfZm9yY2Uoc2tiKSkKJiM0MzsJCXJldHVybiAtRUhPU1RVTlJFQUNIOwomIzQzOwogCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHhmcm1fdHJhbnNfY2IpICZndDsgc2l6ZW9mKHNrYi0mZ3Q7Y2IpKTsKIAogCWhvbGRfbmV0ID0gbWF5YmVfZ2V0X25ldChuZXQpOwogCWlmICghaG9sZF9uZXQpCiAJCXJldHVybiAtRU5PREVWOwogCiYjNDM7CWlmIChza2ItJmd0O2RldikKJiM0MzsJCWRldl9ob2xkKHNrYi0mZ3Q7ZGV2KTsKJiM0MzsKIAlYRlJNX1RSQU5TX1NLQl9DQihza2IpLSZndDtmaW5pc2ggPSBmaW5pc2g7CiAJWEZSTV9UUkFOU19TS0JfQ0Ioc2tiKS0mZ3Q7bmV0ID0gaG9sZF9uZXQ7CiAJc3Bpbl9sb2NrX2JoKCZhbXA7dHJhbnMtJmd0O3F1ZXVlX2xvY2spOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjA6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMzOAoJCQkJCQkJb3V0cHV0OiAyMTEKCQkJCQkJCXRob3VnaHRzOiA3MzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBYRlJNIFBhdGNoOiBGb2N1cyBvbiBPYmplY3QgTGlmZXRpbWUgYW5kIFJlZmVyZW5jZSBDb3VudGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGZvciBgeGZybV9pbnB1dC5jYC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyBwcmltYXJpbHkgYWJvdXQgaW1wcm92aW5nIG9iamVjdCBsaWZldGltZSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIHJlZmVyZW5jZSBjb3VudGluZyBvZiBgc2tiLSZndDtkZXZgIGFuZCBoYW5kbGluZyBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gdXNlLWFmdGVyLWZyZWUgYW5kIGludmFsaWQgcmVmZXJlbmNlcywgZXNwZWNpYWxseSB3aGVuIGFuIFNLQiBpcyBiZWluZyBxdWV1ZWQgZm9yIHJlaW5qZWN0aW9uLgoKVGhlIGNvcmUgY2hhbmdlcyBhcmUgaW4gYHhmcm1fdHJhbnNfcXVldWVfbmV0YCBhbmQgYHhmcm1fdHJhbnNfcmVpbmplY3RgLiBJbiB0aGUgcXVldWVpbmcgZnVuY3Rpb24sIHdlJiMzOTtyZSBub3cgYWRkaW5nIGNoZWNrcy4gSSBzZWUgYSBuZXcgY2hlY2sgZm9yIGAhc2tiX2RzdF9mb3JjZShza2IpYCB3aXRoaW4gYHhmcm1fdHJhbnNfcXVldWVfbmV0YCB0byByZXR1cm4gLUVIT1NUVU5SRUFDSCB3aGVuIGEgZGVzdGluYXRpb24gaXMgcHJlc2VudCBidXQgbm90IGZvcmNlZCwgYW5kIGEgYGRldl9ob2xkKHNrYi0mZ3Q7ZGV2KWAgY2FsbCB0byBpbmNyZWFzZSB0aGUgcmVmY291bnQuIFRoZW4sIHdpdGhpbiB0aGUgcmVpbmplY3Rpb24gZnVuY3Rpb24sIHdlJiMzOTtyZSB3cmFwcGluZyB0aGUgcmVpbmplY3Rpb24gbG9vcCB3aXRoIGByY3VfcmVhZF9sb2NrKClgIGFuZCBgcmN1X3JlYWRfdW5sb2NrKClgLiBJbnNpZGUgdGhlIGxvb3AsIGEgbG9jYWwgYG5ldF9kZXZpY2VgIHZhcmlhYmxlLCBpbml0aWFsaXplZCB3aXRoIGBza2ItJmd0O2RldmAgZm9yIGVhc3kgdXNlLCBhbmQgYGRldl9wdXQoZGV2KWAgaXMgYWRkZWQgdG8gZGVjcmVtZW50IHRoZSByZWZjb3VudC4gVGhpcyBpcyBwcmVjaXNlbHkgd2hhdCBJIGV4cGVjdCB0byBzZWUgZm9yIHByb3BlciByZWZlcmVuY2UgY291bnRpbmcgb2YgdGhlIGRldmljZSBwb2ludGVyLCBwcmV2ZW50aW5nIGRvdWJsZSBmcmVlcyBvciB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MuCgpUaGlzIHNjcmVhbXMgb2JqZWN0IGxpZmV0aW1lIGNvbmNlcm5zLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlJiMzOTtzIG5vIGludHJvZHVjdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlLCBub3IgYXJlIHdlIGV4cG9zaW5nIGFueS4gVGhlIGNvbmNlcm5zIGhlcmUgYXJlIGFib3V0IG1hbmFnaW5nIHRoZSBsaWZlY3ljbGUgb2YgdGhlIGBza2ItJmd0O2RldmAgcG9pbnRlciBhbmQgdGhlIFNLQiBpdHNlbGYsIGVuc3VyaW5nIHRoYXQgd2UgZG9uJiMzOTt0IHRyeSB0byBhY2Nlc3MgaXQgYWZ0ZXIgaXQmIzM5O3MgYmVlbiBmcmVlZCBvciBiZWNvbWUgaW52YWxpZC4gS0FTQU4gaXMgdGhlIHJpZ2h0IHRvb2wgdG8gdHJhY2sgYW5kIGRpc2NvdmVyIGFueSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgYnVncyBpZiByZWZlcmVuY2UgY291bnRpbmcgaXMgd3JvbmcuIEtNU0FOIGlzIGZvciBjYXRjaGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuCgpKdXN0IHRvIGJlIHRob3JvdWdoLCBJJiMzOTttIHF1aWNrbHkgZG91YmxlLWNoZWNraW5nIHRoZSBjb2RlIGRpZmYuIFRoZSBhc3NpZ25tZW50cyB0byBgWEZSTV9UUkFOU19TS0JfQ0Ioc2tiKS0mZ3Q7ZmluaXNoYCBhbmQgYFhGUk1fVFJBTlNfU0tCX0NCKHNrYiktJmd0O25ldGAgYXJlIHN0YW5kYXJkIHNldHVwIGNhbGxzLiBUaGVzZSBqdXN0IGFzc2lnbiB2YWx1ZXMgdG8gdGhlIFNLQiYjMzk7cyBjb250cm9sIGJsb2NrLCBzbyB0aGVyZSYjMzk7cyBub3RoaW5nIGNvbmNlcm5pbmcgdGhlcmUuCgpHaXZlbiB0aGF0IHRoaXMgcGF0Y2ggaXMgc29sZWx5IGZvY3VzZWQgb24gZW5zdXJpbmcgY29ycmVjdCByZWZlcmVuY2UgY291bnRzIGFuZCBhdm9pZGluZyB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMsIGFuZCBJIGRvbiYjMzk7dCBzZWUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGludHJvZHVjdGlvbiBvciBleHBvc3VyZSwgdGhlIGBOZWVkc0tNU0FOYCBmbGFnIGlzIGRlZmluaXRlbHkgZmFsc2UgaGVyZS4gVGhpcyBpcyBwdXJlbHkgYWJvdXQgb2JqZWN0IGxpZmV0aW1lIGFuZCByZWZlcmVuY2UgY291bnRpbmcsIG5vdCBtZW1vcnkgaW5pdGlhbGl6YXRpb24uIEkmIzM5O20gY29tZm9ydGFibGUgc2V0dGluZyBgTmVlZHNLTVNBTiA9IGZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjA6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIG9iamVjdCBsaWZldGltZSBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcyBmb3IgYHNrYi1cdTAwM2VkZXZgIGFuZCBgc2tiX2RzdGAgd2hlbiBhbiBgc2tiYCBpcyBxdWV1ZWQgZm9yIHJlaW5qZWN0aW9uIGluIHRoZSBYRlJNIHN1YnN5c3RlbS4gSXQgYWRkcyBgZGV2X2hvbGQoKWAgYW5kIGBkZXZfcHV0KClgIGZvciB0aGUgbmV0d29yayBkZXZpY2UsIGZvcmNlcyB0aGUgZGVzdGluYXRpb24gZW50cnkgdmlhIGBza2JfZHN0X2ZvcmNlKClgLCBhbmQgd3JhcHMgdGhlIHJlaW5qZWN0aW9uIGxvb3AgaW4gYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLiBUaGVzZSBjaGFuZ2VzIGFyZSBkZXNpZ25lZCB0byBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIChVQUYpIG9yIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIHJlbGF0ZWQgdG8gZnJlZWQgbmV0d29yayBkZXZpY2VzIG9yIGRlc3RpbmF0aW9uIGVudHJpZXMuIFN1Y2ggbWVtb3J5IGNvcnJ1cHRpb24gYW5kIGxpZmV0aW1lIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgYnVmZmVyIGxlbmd0aHMsIG9yIGV4cG9zZSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgb2JqZWN0IGxpZmV0aW1lIGFuZCByZWZlcmVuY2UgY291bnRpbmcgaXNzdWVzIGZvciBgc2tiLVx1MDAzZWRldmAgYW5kIGBza2JfZHN0YCB3aGVuIGFuIGBza2JgIGlzIHF1ZXVlZCBmb3IgcmVpbmplY3Rpb24gaW4gdGhlIFhGUk0gc3Vic3lzdGVtLiBJdCBhZGRzIGBkZXZfaG9sZCgpYCBhbmQgYGRldl9wdXQoKWAgZm9yIHRoZSBuZXR3b3JrIGRldmljZSwgZm9yY2VzIHRoZSBkZXN0aW5hdGlvbiBlbnRyeSB2aWEgYHNrYl9kc3RfZm9yY2UoKWAsIGFuZCB3cmFwcyB0aGUgcmVpbmplY3Rpb24gbG9vcCBpbiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uIFRoZXNlIGNoYW5nZXMgYXJlIGRlc2lnbmVkIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgKFVBRikgb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgcmVsYXRlZCB0byBmcmVlZCBuZXR3b3JrIGRldmljZXMgb3IgZGVzdGluYXRpb24gZW50cmllcy4gU3VjaCBtZW1vcnkgY29ycnVwdGlvbiBhbmQgbGlmZXRpbWUgYnVncyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBidWZmZXIgbGVuZ3Rocywgb3IgZXhwb3NlIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjA6MjY6MTkuODkzNTUyMDk5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjkwOTMxMjc3MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEZSTV9VU0VSXCIsXG4gICAgXCJJTkVUX0VTUFwiLFxuICAgIFwiSU5FVF9FU1BJTlRDUFwiLFxuICAgIFwiSU5FVDZfRVNQXCIsXG4gICAgXCJJTkVUNl9FU1BJTlRDUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhmcm1fdHJhbnNfcXVldWVfbmV0XCIsXG4gICAgXCJ4ZnJtX3RyYW5zX3F1ZXVlXCIsXG4gICAgXCJ4ZnJtX3RyYW5zX3JlaW5qZWN0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgb2JqZWN0IGxpZmV0aW1lIGFuZCByZWZlcmVuY2UgY291bnRpbmcgaXNzdWVzIGZvciBgc2tiLVxcdTAwM2VkZXZgIGFuZCBgc2tiX2RzdGAgd2hlbiBhbiBgc2tiYCBpcyBxdWV1ZWQgZm9yIHJlaW5qZWN0aW9uIGluIHRoZSBYRlJNIHN1YnN5c3RlbS4gSXQgYWRkcyBgZGV2X2hvbGQoKWAgYW5kIGBkZXZfcHV0KClgIGZvciB0aGUgbmV0d29yayBkZXZpY2UsIGZvcmNlcyB0aGUgZGVzdGluYXRpb24gZW50cnkgdmlhIGBza2JfZHN0X2ZvcmNlKClgLCBhbmQgd3JhcHMgdGhlIHJlaW5qZWN0aW9uIGxvb3AgaW4gYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLiBUaGVzZSBjaGFuZ2VzIGFyZSBkZXNpZ25lZCB0byBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIChVQUYpIG9yIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIHJlbGF0ZWQgdG8gZnJlZWQgbmV0d29yayBkZXZpY2VzIG9yIGRlc3RpbmF0aW9uIGVudHJpZXMuIFN1Y2ggbWVtb3J5IGNvcnJ1cHRpb24gYW5kIGxpZmV0aW1lIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgYnVmZmVyIGxlbmd0aHMsIG9yIGV4cG9zZSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gWEZSTSBwYWNrZXQgcXVldWVpbmcgYW5kIHJlaW5qZWN0aW9uIHBhdGhzIGJ5IHByb3Blcmx5IGhvbGRpbmcgYSByZWZlcmVuY2UgdG8gc2tiLVxcdTAwM2VkZXYgYW5kIGVuc3VyaW5nIHNrYl9kc3QgaXMgdmFsaWQuIFRoaXMgbW9kaWZpZXMgY29yZSBYRlJNIHBhY2tldCBwcm9jZXNzaW5nIGxvZ2ljIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIG5ldHdvcmsgaW5wdXQvb3V0cHV0IHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMDoyNjoxOS44OTM1NTgxMTlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwOTUzNzQ4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDc5MjVhNmNlZTk5MDBmNWMyNmEyYjZhNGFmNjFhZWMyOTdlYzhlMDdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgNyAyMDoyNjoxOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2lucHV0LmMgYi9uZXQveGZybS94ZnJtX2lucHV0LmNcXG5pbmRleCBlZWNhYjMzN2JkMGE3Li44ZjYxMDllYWRhN2VhIDEwMDY0NFxcbi0tLSBhL25ldC94ZnJtL3hmcm1faW5wdXQuY1xcbisrKyBiL25ldC94ZnJtL3hmcm1faW5wdXQuY1xcbkBAIC04MDAsMTIgKzgwMCwxNyBAQCBzdGF0aWMgdm9pZCB4ZnJtX3RyYW5zX3JlaW5qZWN0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnRyYW5zLVxcdTAwM2VxdWV1ZV9sb2NrKTtcXG4gXFxuIFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbiBcXHR3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoXFx1MDAyNnF1ZXVlKSkpIHtcXG4gXFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gWEZSTV9UUkFOU19TS0JfQ0Ioc2tiKS1cXHUwMDNlbmV0O1xcbitcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLVxcdTAwM2VkZXY7XFxuIFxcbiBcXHRcXHRYRlJNX1RSQU5TX1NLQl9DQihza2IpLVxcdTAwM2VmaW5pc2gobmV0LCBOVUxMLCBza2IpO1xcbitcXHRcXHRpZiAoZGV2KVxcbitcXHRcXHRcXHRkZXZfcHV0KGRldik7XFxuIFxcdFxcdHB1dF9uZXQobmV0KTtcXG4gXFx0fVxcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuIH1cXG4gXFxuQEAgLTgyMSwxMiArODI2LDE4IEBAIGludCB4ZnJtX3RyYW5zX3F1ZXVlX25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGlmIChza2JfcXVldWVfbGVuKFxcdTAwMjZ0cmFucy1cXHUwMDNlcXVldWUpIFxcdTAwM2U9IFJFQURfT05DRShuZXRfaG90ZGF0YS5tYXhfYmFja2xvZykpXFxuIFxcdFxcdHJldHVybiAtRU5PQlVGUztcXG4gXFxuK1xcdGlmIChza2JfZHN0KHNrYikgXFx1MDAyNlxcdTAwMjYgIXNrYl9kc3RfZm9yY2Uoc2tiKSlcXG4rXFx0XFx0cmV0dXJuIC1FSE9TVFVOUkVBQ0g7XFxuK1xcbiBcXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCB4ZnJtX3RyYW5zX2NiKSBcXHUwMDNlIHNpemVvZihza2ItXFx1MDAzZWNiKSk7XFxuIFxcbiBcXHRob2xkX25ldCA9IG1heWJlX2dldF9uZXQobmV0KTtcXG4gXFx0aWYgKCFob2xkX25ldClcXG4gXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIFxcbitcXHRpZiAoc2tiLVxcdTAwM2VkZXYpXFxuK1xcdFxcdGRldl9ob2xkKHNrYi1cXHUwMDNlZGV2KTtcXG4rXFxuIFxcdFhGUk1fVFJBTlNfU0tCX0NCKHNrYiktXFx1MDAzZWZpbmlzaCA9IGZpbmlzaDtcXG4gXFx0WEZSTV9UUkFOU19TS0JfQ0Ioc2tiKS1cXHUwMDNlbmV0ID0gaG9sZF9uZXQ7XFxuIFxcdHNwaW5fbG9ja19iaChcXHUwMDI2dHJhbnMtXFx1MDAzZXF1ZXVlX2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMDoyNjoyMC40MDQxMzgyMTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1OTE2Mjg5MjI3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRlJNX1VTRVJcIixcbiAgICBcIklORVRfRVNQXCIsXG4gICAgXCJJTkVUX0VTUElOVENQXCIsXG4gICAgXCJJTkVUNl9FU1BcIixcbiAgICBcIklORVQ2X0VTUElOVENQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGZybV90cmFuc19xdWV1ZV9uZXRcIixcbiAgICBcInhmcm1fdHJhbnNfcXVldWVcIixcbiAgICBcInhmcm1fdHJhbnNfcmVpbmplY3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBYRlJNIHBhY2tldCBxdWV1ZWluZyBhbmQgcmVpbmplY3Rpb24gcGF0aHMgYnkgcHJvcGVybHkgaG9sZGluZyBhIHJlZmVyZW5jZSB0byBza2ItXFx1MDAzZWRldiBhbmQgZW5zdXJpbmcgc2tiX2RzdCBpcyB2YWxpZC4gVGhpcyBtb2RpZmllcyBjb3JlIFhGUk0gcGFja2V0IHByb2Nlc3NpbmcgbG9naWMgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gbmV0d29yayBpbnB1dC9vdXRwdXQgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc5MjVhNmNlZTk5MDBmNWMyNmEyYjZhNGFmNjFhZWMyOTdlYzhlMDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDIwOjI2OjE4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9pbnB1dC5jIGIvbmV0L3hmcm0veGZybV9pbnB1dC5jXG5pbmRleCBlZWNhYjMzN2JkMGE3Li44ZjYxMDllYWRhN2VhIDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV9pbnB1dC5jXG4rKysgYi9uZXQveGZybS94ZnJtX2lucHV0LmNcbkBAIC04MDAsMTIgKzgwMCwxNyBAQCBzdGF0aWMgdm9pZCB4ZnJtX3RyYW5zX3JlaW5qZWN0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRyYW5zLVx1MDAzZXF1ZXVlX2xvY2spO1xuIFxuIFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuIFx0d2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKFx1MDAyNnF1ZXVlKSkpIHtcbiBcdFx0c3RydWN0IG5ldCAqbmV0ID0gWEZSTV9UUkFOU19TS0JfQ0Ioc2tiKS1cdTAwM2VuZXQ7XG4rXHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBza2ItXHUwMDNlZGV2O1xuIFxuIFx0XHRYRlJNX1RSQU5TX1NLQl9DQihza2IpLVx1MDAzZWZpbmlzaChuZXQsIE5VTEwsIHNrYik7XG4rXHRcdGlmIChkZXYpXG4rXHRcdFx0ZGV2X3B1dChkZXYpO1xuIFx0XHRwdXRfbmV0KG5ldCk7XG4gXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdGxvY2FsX2JoX2VuYWJsZSgpO1xuIH1cbiBcbkBAIC04MjEsMTIgKzgyNiwxOCBAQCBpbnQgeGZybV90cmFuc19xdWV1ZV9uZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKHNrYl9xdWV1ZV9sZW4oXHUwMDI2dHJhbnMtXHUwMDNlcXVldWUpIFx1MDAzZT0gUkVBRF9PTkNFKG5ldF9ob3RkYXRhLm1heF9iYWNrbG9nKSlcbiBcdFx0cmV0dXJuIC1FTk9CVUZTO1xuIFxuK1x0aWYgKHNrYl9kc3Qoc2tiKSBcdTAwMjZcdTAwMjYgIXNrYl9kc3RfZm9yY2Uoc2tiKSlcbitcdFx0cmV0dXJuIC1FSE9TVFVOUkVBQ0g7XG4rXG4gXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCB4ZnJtX3RyYW5zX2NiKSBcdTAwM2Ugc2l6ZW9mKHNrYi1cdTAwM2VjYikpO1xuIFxuIFx0aG9sZF9uZXQgPSBtYXliZV9nZXRfbmV0KG5ldCk7XG4gXHRpZiAoIWhvbGRfbmV0KVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbitcdGlmIChza2ItXHUwMDNlZGV2KVxuK1x0XHRkZXZfaG9sZChza2ItXHUwMDNlZGV2KTtcbitcbiBcdFhGUk1fVFJBTlNfU0tCX0NCKHNrYiktXHUwMDNlZmluaXNoID0gZmluaXNoO1xuIFx0WEZSTV9UUkFOU19TS0JfQ0Ioc2tiKS1cdTAwM2VuZXQgPSBob2xkX25ldDtcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZ0cmFucy1cdTAwM2VxdWV1ZV9sb2NrKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjI2OjIwLjQwNDEzOTcwNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwMzc2NjYyNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2ggdG8gbmV0L3hmcm0veGZybV9pbnB1dC5jKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgbGlrZSB3ZSBoYXZlIHNvbWUgaW1wb3J0YW50IG1vZGlmaWNhdGlvbnMgdG8gYG5ldC94ZnJtL3hmcm1faW5wdXQuY2AuIFNwZWNpZmljYWxseSwgdGhlIGNvZGUgdG91Y2hlcyBib3RoIGB4ZnJtX3RyYW5zX3JlaW5qZWN0YCBhbmQgYHhmcm1fdHJhbnNfcXVldWVfbmV0YC4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IHdlJ3JlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZSwgbGlrZWx5IGEgdXNlLWFmdGVyLWZyZWUgb3Igc29tZXRoaW5nIHNpbWlsYXIgaW52b2x2aW5nIGBza2ItXHUwMDNlZGV2YCBhbmQgYHNrYl9kc3RgIHdpdGhpbiB0aGUgWEZSTSBpbnB1dCBwcm9jZXNzaW5nIHBhdGguXG5cbkxldCdzIGJyZWFrIGRvd24gdGhlIGNoYW5nZXM6IEluIGB4ZnJtX3RyYW5zX3JlaW5qZWN0YCwgdGhlIGludHJvZHVjdGlvbiBvZiBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYCBhcm91bmQgdGhlIHdoaWxlIGxvb3AgaXMgYSBrZXkgaW5kaWNhdG9yLiBJdCdzIHByb3RlY3RpbmcgdGhlIGRhdGEgYmVpbmcgYWNjZXNzZWQgd2l0aGluIHRoZSBsb29wLiBFeHRyYWN0aW5nIGBkZXYgPSBza2ItXHUwMDNlZGV2YCBhbmQgY2FsbGluZyBgZGV2X3B1dChkZXYpYCB3aGVuIGBkZXZgIGlzbid0IG51bGwgYWxzbyBsb29rcyBsaWtlIGl0J3MgYWRkcmVzc2luZyBhIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZSB0byBlbnN1cmUgdGhlIGRldmljZSBpcyBwcm9wZXJseSByZWxlYXNlZC5cblxuTm93LCBpbiBgeGZybV90cmFuc19xdWV1ZV9uZXRgLCB0aGUgYWRkaXRpb24gb2YgYGlmIChza2JfZHN0KHNrYikgXHUwMDI2XHUwMDI2ICFza2JfZHN0X2ZvcmNlKHNrYikpIHJldHVybiAtRUhPU1RVTlJFQUNIO2Agc3VnZ2VzdHMgYSBjaGFuZ2UgaW4gaG93IHdlIGhhbmRsZSB1bnJlYWNoYWJsZSBkZXN0aW5hdGlvbnMgd2l0aGluIHRoYXQgcGF0aC4gTW9yZSBpbnRlcmVzdGluZ2x5LCBgaWYgKHNrYi1cdTAwM2VkZXYpIGRldl9ob2xkKHNrYi1cdTAwM2VkZXYpO2AgaXMgdGhlcmUgdG8gYnVtcCB0aGUgZGV2aWNlIHJlZmVyZW5jZSBjb3VudC4gSXQgc2VlbXMgdG8gcGFpciB3ZWxsIHdpdGggdGhlIGBkZXZfcHV0YCBpbiB0aGUgb3RoZXIgZnVuY3Rpb24uXG5cblNvLCB0aGlzIGxvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIHBhdGNoIHRvIG1lLCB0YXJnZXRpbmcgdGhlIFhGUk0gc3Vic3lzdGVtLiBJJ20gZ29pbmcgdG8gZGlnIGEgbGl0dGxlIGRlZXBlciBub3cuIEknbGwgZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIHNlZSB3aGF0IGNvbmZpZyBvcHRpb25zIGNvbnRyb2wgdGhlc2UgZnVuY3Rpb25zLCBhbmQgSSdsbCBkb3VibGUtY2hlY2sgdGhlIGV4YWN0IGNvbnRleHQgYXJvdW5kIHRoZXNlIGZ1bmN0aW9ucyB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSByb290IGNhdXNlIG9mIHRoZSBwcm9ibGVtIGFuZCBlbnN1cmUgdGhlIGZpeCBpcyBjb21wbGV0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM0MSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjI2OjI2LjQ0MTgxMDIxOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mzc2NjExNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX3RyYW5zX3F1ZXVlX25ldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9pbnB1dC5jPTc5MT1zdGF0aWMgdm9pZCB4ZnJtX3RyYW5zX3JlaW5qZWN0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy04MTYtXFxubmV0L3hmcm0veGZybV9pbnB1dC5jOjgxNzppbnQgeGZybV90cmFuc19xdWV1ZV9uZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy04MTgtXFx0XFx0XFx0IGludCAoKmZpbmlzaCkoc3RydWN0IG5ldCAqLCBzdHJ1Y3Qgc29jayAqLFxcbi0tXFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTg0OC19XFxubmV0L3hmcm0veGZybV9pbnB1dC5jOjg0OTpFWFBPUlRfU1lNQk9MKHhmcm1fdHJhbnNfcXVldWVfbmV0KTtcXG5uZXQveGZybS94ZnJtX2lucHV0LmMtODUwLVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYz04NTE9aW50IHhmcm1fdHJhbnNfcXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy04NTQte1xcbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo4NTU6XFx0cmV0dXJuIHhmcm1fdHJhbnNfcXVldWVfbmV0KGRldl9uZXQoc2tiLVxcdTAwM2VkZXYpLCBza2IsIGZpbmlzaCk7XFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTg1Ni19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjI2OjI2LjUwNTU4MjgyM1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDk1MTIwNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgeGZybV90cmFuc19xdWV1ZV9uZXRgIGFuZCBgeGZybV90cmFuc19yZWluamVjdGAqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSB0d28gZnVuY3Rpb25zLCBgeGZybV90cmFuc19xdWV1ZV9uZXRgIGFuZCBgeGZybV90cmFuc19yZWluamVjdGAuIEludGVyZXN0aW5nLiBBbmQsIG9mIGNvdXJzZSwgYHhmcm1fdHJhbnNfcXVldWVfbmV0YCBpcyBleHBvcnRlZCwgbWVhbmluZyBpdCdzIGludGVuZGVkIGZvciB1c2Ugb3V0c2lkZSBpdHMgaW1tZWRpYXRlIG1vZHVsZS4gVGhhdCBhbHdheXMgcGlxdWVzIG15IGludGVyZXN0IOKAkyB3aGF0J3MgdXNpbmcgaXQsIGFuZCBob3c/IEdpdmVuIHRoYXQgaXQncyBleHBvcnRlZCwgSSBzaG91bGQgcmVhbGx5IHVuZGVyc3RhbmQgaXRzIGJyb2FkZXIgaW1wbGljYXRpb25zIHdpdGhpbiB0aGUgc3lzdGVtLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgY29uZmlndXJhdGlvbi4gTGV0J3Mgc2VlIHdoYXQgY29uZmlnIG9wdGlvbnMgYXJlIHJlc3BvbnNpYmxlIGZvciBlbmFibGluZyB0aGUgc291cmNlIGZpbGUsIHdoaWNoIEkgYmVsaWV2ZSBpcyBgbmV0L3hmcm0veGZybV9pbnB1dC5jYC4gVGhhdCdsbCB0ZWxsIG1lIHRoZSBjb250ZXh0IGluIHdoaWNoIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXZlbiAqYXZhaWxhYmxlKiwgYW5kIHBvdGVudGlhbGx5IGdpdmUgbWUgc29tZSBjbHVlcyBhYm91dCB0aGVpciBwdXJwb3NlIHdpdGhpbiB0aGUgbGFyZ2VyIHhmcm0gZnJhbWV3b3JrLiBLbm93aW5nIHRoZSBjb25maWcgb3B0aW9ucyB3aWxsIGhlbHAgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWMgZGVwbG95bWVudCBzY2VuYXJpb3MgZm9yIHRoZXNlLiBXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGJlaW5nIGVuYWJsZWQsIGFuZCBpbiB3aGF0IGNvbnRleHQ/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzODUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMDoyNjoyOS45NTUwOTg1MTlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ1MTgzODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9pbnB1dFxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0vTWFrZWZpbGU9MTQ9b2JqLSQoQ09ORklHX1hGUk0pIDo9IHhmcm1fcG9saWN5Lm8geGZybV9zdGF0ZS5vIHhmcm1faGFzaC5vIFxcXFxcXG5uZXQveGZybS9NYWtlZmlsZToxNTpcXHRcXHQgICAgICB4ZnJtX2lucHV0Lm8geGZybV9vdXRwdXQubyBcXFxcXFxubmV0L3hmcm0vTWFrZWZpbGUtMTYtXFx0XFx0ICAgICAgeGZybV9zeXNjdGwubyB4ZnJtX3JlcGxheS5vIHhmcm1fZGV2aWNlLm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMDoyNjozMC4wMjk2MjMwNzFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDM3NzYxODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gdGhlIFhGUk0gQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgcmV2b2x2ZXMgYXJvdW5kIHRoZSBgQ09ORklHX1hGUk1gIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBJdCdzIGNydWNpYWwsIHdoZW4gZGVhbGluZyB3aXRoIGtlcm5lbCBjb25maWd1cmF0aW9uLCB0byBrbm93IHdoYXQgb3RoZXIgY29tcG9uZW50cyBvciBmZWF0dXJlcyB0aGlzIHNldHRpbmcgcmVsaWVzIHVwb24uIEtub3dpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIHdpbGwgaW5mb3JtIGFueSBkZWNpc2lvbnMgYWJvdXQgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGl0LCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgaXQgaGVscHMgaW4gdW5kZXJzdGFuZGluZyB0aGUgYnJvYWRlciBpbXBsaWNhdGlvbnMgb2YgaXRzIHVzZSB3aXRoaW4gdGhlIHN5c3RlbSdzIHNlY3VyaXR5IGFuZCBuZXR3b3JraW5nIGFyY2hpdGVjdHVyZS4gU28sIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkZWx2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCB0cmFjZSB3aGF0IG90aGVyIHNldHRpbmdzIGBDT05GSUdfWEZSTWAgaXMgdGllZCB0by4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gaGllcmFyY2h5LiBUaGF0IHdheSBJIGNhbiBtYWtlIHNvdW5kIGRlY2lzaW9ucyBhYm91dCB0aGUgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODI2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjA6MjY6MzMuMDY3Mzg4MDVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk4OTk5MDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFhGUk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL0tjb25maWctNC0jXFxubmV0L3hmcm0vS2NvbmZpZzo1OmNvbmZpZyBYRlJNXFxubmV0L3hmcm0vS2NvbmZpZy02LVxcdGJvb2xcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTAtXFxubmV0L3hmcm0vS2NvbmZpZzoxMTpjb25maWcgWEZSTV9PRkZMT0FEXFxubmV0L3hmcm0vS2NvbmZpZy0xMi1cXHRib29sXFxubmV0L3hmcm0vS2NvbmZpZy0xMy1cXG5uZXQveGZybS9LY29uZmlnOjE0OmNvbmZpZyBYRlJNX0FMR09cXG5uZXQveGZybS9LY29uZmlnLTE1LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTIyPWlmIElORVRcXG5uZXQveGZybS9LY29uZmlnOjIzOmNvbmZpZyBYRlJNX1VTRVJcXG5uZXQveGZybS9LY29uZmlnLTI0LVxcdHRyaXN0YXRlIFxcXCJUcmFuc2Zvcm1hdGlvbiB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0zMS1cXG5uZXQveGZybS9LY29uZmlnOjMyOmNvbmZpZyBYRlJNX1VTRVJfQ09NUEFUXFxubmV0L3hmcm0vS2NvbmZpZy0zMy1cXHR0cmlzdGF0ZSBcXFwiQ29tcGF0aWJsZSBBQkkgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctNDItXFxubmV0L3hmcm0vS2NvbmZpZzo0Mzpjb25maWcgWEZSTV9JTlRFUkZBQ0VcXG5uZXQveGZybS9LY29uZmlnLTQ0LVxcdHRyaXN0YXRlIFxcXCJUcmFuc2Zvcm1hdGlvbiB2aXJ0dWFsIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctNTAtXFxubmV0L3hmcm0vS2NvbmZpZzo1MTpjb25maWcgWEZSTV9TVUJfUE9MSUNZXFxubmV0L3hmcm0vS2NvbmZpZy01Mi1cXHRib29sIFxcXCJUcmFuc2Zvcm1hdGlvbiBzdWIgcG9saWN5IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTYwLVxcbm5ldC94ZnJtL0tjb25maWc6NjE6Y29uZmlnIFhGUk1fTUlHUkFURVxcbm5ldC94ZnJtL0tjb25maWctNjItXFx0Ym9vbCBcXFwiVHJhbnNmb3JtYXRpb24gbWlncmF0ZSBkYXRhYmFzZVxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctNzEtXFxubmV0L3hmcm0vS2NvbmZpZzo3Mjpjb25maWcgWEZSTV9TVEFUSVNUSUNTXFxubmV0L3hmcm0vS2NvbmZpZy03My1cXHRib29sIFxcXCJUcmFuc2Zvcm1hdGlvbiBzdGF0aXN0aWNzXFxcIlxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy04My0jIFJGQyA4MjIxIGxpc3RzIGFzIE1VU1QgYmUgaW1wbGVtZW50ZWQuXFxubmV0L3hmcm0vS2NvbmZpZzo4NDpjb25maWcgWEZSTV9BSFxcbm5ldC94ZnJtL0tjb25maWctODUtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctOTItIyBhbGdvcml0aG1zIHRoYXQgUkZDIDgyMjEgbGlzdHMgYXMgTVVTVCBiZSBpbXBsZW1lbnRlZC5cXG5uZXQveGZybS9LY29uZmlnOjkzOmNvbmZpZyBYRlJNX0VTUFxcbm5ldC94ZnJtL0tjb25maWctOTQtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTA1LVxcbm5ldC94ZnJtL0tjb25maWc6MTA2OmNvbmZpZyBYRlJNX0lQQ09NUFxcbm5ldC94ZnJtL0tjb25maWctMTA3LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTEyNT1jb25maWcgTkVUX0tFWV9NSUdSQVRFXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTE0MC1cXG5uZXQveGZybS9LY29uZmlnOjE0MTpjb25maWcgWEZSTV9JUFRGU1xcbm5ldC94ZnJtL0tjb25maWctMTQyLVxcdHRyaXN0YXRlIFxcXCJJUHNlYyBJUC1URlMvQUdHRlJBRyAoUkZDIDkzNDcpIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTU2LVxcbm5ldC94ZnJtL0tjb25maWc6MTU3OmNvbmZpZyBYRlJNX0VTUElOVENQXFxubmV0L3hmcm0vS2NvbmZpZy0xNTgtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMDoyNjozMy4xMzcyOTU2MjNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjIxMDU4OTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIFhGUk0qKlxuXG5Pa2F5LCBzbyBgWEZSTWAgaXMgYSBib29sZWFuIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IGl0J3MgcHJvYmFibHkgKnNlbGVjdGVkKiBieSBhIG51bWJlciBvZiBvdGhlciBvcHRpb25zLCB0aGluZ3MgbGlrZSBgSU5FVGAsIGBYRlJNX1VTRVJgLCBtYXliZSBgSU5FVF9FU1BgLCB0aGF0IGtpbmQgb2YgdGhpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgaGVyZS4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgaW50byB3aGF0IGV4YWN0bHkgdHJpZ2dlcnMgdGhlIGVuYWJsaW5nIG9mIGBYRlJNYC4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSBgWEZSTWAgYW5kIHNlZSB3aGF0IHRoZSB1cHN0cmVhbSBvcHRpb25zIGFyZS4gVW5kZXJzdGFuZGluZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCBmb3IgYSByb2J1c3QgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg0NCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjI2OjM2LjM1ODM1NzkzNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5Mzc4OTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBYRlJNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz0zMDQ9Y29uZmlnIE5FVF9JUFZUSVxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zMDctXFx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcXG5uZXQvaXB2NC9LY29uZmlnOjMwODpcXHRzZWxlY3QgWEZSTVxcbm5ldC9pcHY0L0tjb25maWctMzA5LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9MzM5PWNvbmZpZyBJTkVUX0FIXFxubmV0L2lwdjQvS2NvbmZpZy0zNDAtXFx0dHJpc3RhdGUgXFxcIklQOiBBSCB0cmFuc2Zvcm1hdGlvblxcXCJcXG5uZXQvaXB2NC9LY29uZmlnOjM0MTpcXHRzZWxlY3QgWEZSTV9BSFxcbm5ldC9pcHY0L0tjb25maWctMzQyLVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9MzU0PWNvbmZpZyBJTkVUX0VTUFxcbm5ldC9pcHY0L0tjb25maWctMzU1LVxcdHRyaXN0YXRlIFxcXCJJUDogRVNQIHRyYW5zZm9ybWF0aW9uXFxcIlxcbm5ldC9pcHY0L0tjb25maWc6MzU2OlxcdHNlbGVjdCBYRlJNX0VTUFxcbm5ldC9pcHY0L0tjb25maWctMzU3LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9MzY5PWNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM3MS1cXHRkZXBlbmRzIG9uIElORVRfRVNQXFxubmV0L2lwdjQvS2NvbmZpZzozNzI6XFx0c2VsZWN0IFhGUk1fT0ZGTE9BRFxcbm5ldC9pcHY0L0tjb25maWctMzczLVxcdGRlZmF1bHQgblxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZz0zODI9Y29uZmlnIElORVRfRVNQSU5UQ1BcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzg2LVxcdHNlbGVjdCBORVRfU09DS19NU0dcXG5uZXQvaXB2NC9LY29uZmlnOjM4NzpcXHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxcbm5ldC9pcHY0L0tjb25maWctMzg4LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9Mzk0PWNvbmZpZyBJTkVUX0lQQ09NUFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zOTYtXFx0c2VsZWN0IElORVRfWEZSTV9UVU5ORUxcXG5uZXQvaXB2NC9LY29uZmlnOjM5NzpcXHRzZWxlY3QgWEZSTV9JUENPTVBcXG5uZXQvaXB2NC9LY29uZmlnLTM5OC1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTQ3PWNvbmZpZyBJTkVUNl9BSFxcbm5ldC9pcHY2L0tjb25maWctNDgtXFx0dHJpc3RhdGUgXFxcIklQdjY6IEFIIHRyYW5zZm9ybWF0aW9uXFxcIlxcbm5ldC9pcHY2L0tjb25maWc6NDk6XFx0c2VsZWN0IFhGUk1fQUhcXG5uZXQvaXB2Ni9LY29uZmlnLTUwLVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9NjI9Y29uZmlnIElORVQ2X0VTUFxcbm5ldC9pcHY2L0tjb25maWctNjMtXFx0dHJpc3RhdGUgXFxcIklQdjY6IEVTUCB0cmFuc2Zvcm1hdGlvblxcXCJcXG5uZXQvaXB2Ni9LY29uZmlnOjY0OlxcdHNlbGVjdCBYRlJNX0VTUFxcbm5ldC9pcHY2L0tjb25maWctNjUtXFx0aGVscFxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz03Nz1jb25maWcgSU5FVDZfRVNQX09GRkxPQURcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctNzktXFx0ZGVwZW5kcyBvbiBJTkVUNl9FU1BcXG5uZXQvaXB2Ni9LY29uZmlnOjgwOlxcdHNlbGVjdCBYRlJNX09GRkxPQURcXG5uZXQvaXB2Ni9LY29uZmlnLTgxLVxcdGRlZmF1bHQgblxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz05MD1jb25maWcgSU5FVDZfRVNQSU5UQ1BcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctOTQtXFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbm5ldC9pcHY2L0tjb25maWc6OTU6XFx0c2VsZWN0IFhGUk1fRVNQSU5UQ1BcXG5uZXQvaXB2Ni9LY29uZmlnLTk2LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9MTAyPWNvbmZpZyBJTkVUNl9JUENPTVBcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTA0LVxcdHNlbGVjdCBJTkVUNl9YRlJNX1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWc6MTA1OlxcdHNlbGVjdCBYRlJNX0lQQ09NUFxcbm5ldC9pcHY2L0tjb25maWctMTA2LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9MTEyPWNvbmZpZyBJUFY2X01JUDZcXG5uZXQvaXB2Ni9LY29uZmlnLTExMy1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogTW9iaWxpdHlcXFwiXFxubmV0L2lwdjYvS2NvbmZpZzoxMTQ6XFx0c2VsZWN0IFhGUk1cXG5uZXQvaXB2Ni9LY29uZmlnLTExNS1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTE1MD1jb25maWcgSVBWNl9WVElcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTUzLVxcdHNlbGVjdCBORVRfSVBfVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZzoxNTQ6XFx0c2VsZWN0IFhGUk1cXG5uZXQvaXB2Ni9LY29uZmlnLTE1NS1cXHRoZWxwXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTE0PWNvbmZpZyBYRlJNX0FMR09cXG5uZXQveGZybS9LY29uZmlnLTE1LVxcdHRyaXN0YXRlXFxubmV0L3hmcm0vS2NvbmZpZzoxNjpcXHRzZWxlY3QgWEZSTVxcbm5ldC94ZnJtL0tjb25maWctMTctXFx0c2VsZWN0IENSWVBUT1xcbi0tXFxubmV0L3hmcm0vS2NvbmZpZz0yMz1jb25maWcgWEZSTV9VU0VSXFxubmV0L3hmcm0vS2NvbmZpZy0yNC1cXHR0cmlzdGF0ZSBcXFwiVHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVxcXCJcXG5uZXQveGZybS9LY29uZmlnOjI1OlxcdHNlbGVjdCBYRlJNX0FMR09cXG5uZXQveGZybS9LY29uZmlnLTI2LVxcdGhlbHBcXG4tLVxcbm5ldC94ZnJtL0tjb25maWc9ODQ9Y29uZmlnIFhGUk1fQUhcXG5uZXQveGZybS9LY29uZmlnLTg1LVxcdHRyaXN0YXRlXFxubmV0L3hmcm0vS2NvbmZpZzo4NjpcXHRzZWxlY3QgWEZSTV9BTEdPXFxubmV0L3hmcm0vS2NvbmZpZy04Ny1cXHRzZWxlY3QgQ1JZUFRPXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTkzPWNvbmZpZyBYRlJNX0VTUFxcbm5ldC94ZnJtL0tjb25maWctOTQtXFx0dHJpc3RhdGVcXG5uZXQveGZybS9LY29uZmlnOjk1OlxcdHNlbGVjdCBYRlJNX0FMR09cXG5uZXQveGZybS9LY29uZmlnLTk2LVxcdHNlbGVjdCBDUllQVE9cXG4tLVxcbm5ldC94ZnJtL0tjb25maWc9MTA2PWNvbmZpZyBYRlJNX0lQQ09NUFxcbm5ldC94ZnJtL0tjb25maWctMTA3LVxcdHRyaXN0YXRlXFxubmV0L3hmcm0vS2NvbmZpZzoxMDg6XFx0c2VsZWN0IFhGUk1fQUxHT1xcbm5ldC94ZnJtL0tjb25maWctMTA5LVxcdHNlbGVjdCBDUllQVE9cXG4tLVxcbm5ldC94ZnJtL0tjb25maWc9MTEyPWNvbmZpZyBORVRfS0VZXFxubmV0L3hmcm0vS2NvbmZpZy0xMTMtXFx0dHJpc3RhdGUgXFxcIlBGX0tFWSBzb2NrZXRzIChkZXByZWNhdGVkKVxcXCJcXG5uZXQveGZybS9LY29uZmlnOjExNDpcXHRzZWxlY3QgWEZSTV9BTEdPXFxubmV0L3hmcm0vS2NvbmZpZy0xMTUtXFx0aGVscFxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZz0xMjU9Y29uZmlnIE5FVF9LRVlfTUlHUkFURVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0xMjctXFx0ZGVwZW5kcyBvbiBORVRfS0VZXFxubmV0L3hmcm0vS2NvbmZpZzoxMjg6XFx0c2VsZWN0IFhGUk1fTUlHUkFURVxcbm5ldC94ZnJtL0tjb25maWctMTI5LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjA6MjY6MzYuNDg3NzQzMzJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg4MjI4MjI5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipYRlJNIE1vZHVsZSBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIFhGUk0gc3R1ZmYsIGFuZCBpdCBsb29rcyBsaWtlIGVuYWJsaW5nIGBDT05GSUdfWEZSTV9VU0VSYCBpcyB0aGUga2V5IHRvIGdldHRpbmcgWEZSTSB1cCBhbmQgcnVubmluZywgbGlrZWx5IGFsb25nc2lkZSBlaXRoZXIgYENPTkZJR19JTkVUX0VTUGAgb3IgYENPTkZJR19JTkVUX0FIYC4gU2VlbXMgbGlrZSBgWEZSTV9VU0VSYCBpcyB0aGUgd2F5IHRvIGdvIGhlcmUuIEknbGwgc3RpY2sgd2l0aCB0aGF0LlxuXG5JIHNlZSB0aGF0IHRoZSBjaGFuZ2VzIGFyZSBoaXR0aW5nIGB4ZnJtX3RyYW5zX3JlaW5qZWN0YCBhbmQgYHhmcm1fdHJhbnNfcXVldWVfbmV0YC4gYHhmcm1fdHJhbnNfcXVldWVfbmV0YCBpcyBjYWxsZWQgYnkgYHhmcm1fdHJhbnNfcXVldWVgLCB3aGljaCBzdWdnZXN0cyB0aGVyZSdzIHNvbWUgc29ydCBvZiBxdWV1aW5nIHByb2Nlc3MgaW52b2x2ZWQuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0LiBMZXQncyB0cmFjZSBiYWNrIHdoZXJlIGB4ZnJtX3RyYW5zX3F1ZXVlYCBpcyBiZWluZyBjYWxsZWQgZnJvbSB0byBncmFzcCB0aGUgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjA3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjI2OjQwLjM3MDAyODg1MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYzOTIwMjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV90cmFuc19xdWV1ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9pbnB1dC5jPTc5MT1zdGF0aWMgdm9pZCB4ZnJtX3RyYW5zX3JlaW5qZWN0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy04MTYtXFxubmV0L3hmcm0veGZybV9pbnB1dC5jOjgxNzppbnQgeGZybV90cmFuc19xdWV1ZV9uZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy04MTgtXFx0XFx0XFx0IGludCAoKmZpbmlzaCkoc3RydWN0IG5ldCAqLCBzdHJ1Y3Qgc29jayAqLFxcbi0tXFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTg0OC19XFxubmV0L3hmcm0veGZybV9pbnB1dC5jOjg0OTpFWFBPUlRfU1lNQk9MKHhmcm1fdHJhbnNfcXVldWVfbmV0KTtcXG5uZXQveGZybS94ZnJtX2lucHV0LmMtODUwLVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo4NTE6aW50IHhmcm1fdHJhbnNfcXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQveGZybS94ZnJtX2lucHV0LmMtODUyLVxcdFxcdCAgICAgaW50ICgqZmluaXNoKShzdHJ1Y3QgbmV0ICosIHN0cnVjdCBzb2NrICosXFxuLS1cXG5uZXQveGZybS94ZnJtX2lucHV0LmMtODU0LXtcXG5uZXQveGZybS94ZnJtX2lucHV0LmM6ODU1OlxcdHJldHVybiB4ZnJtX3RyYW5zX3F1ZXVlX25ldChkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KSwgc2tiLCBmaW5pc2gpO1xcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy04NTYtfVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo4NTc6RVhQT1JUX1NZTUJPTCh4ZnJtX3RyYW5zX3F1ZXVlKTtcXG5uZXQveGZybS94ZnJtX2lucHV0LmMtODU4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMDoyNjo0MC40NDY0MjY0MDRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMzNTk4MTg5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgc2VhcmNoOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBDb2RlYmFzZTogVGhlIHhmcm1fdHJhbnNfcXVldWUgSHVudCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IGRpZ2dpbmcuIEkgbmVlZCB0byBmaW5kIGFsbCBpbnN0YW5jZXMgb2YgYHhmcm1fdHJhbnNfcXVldWVgIHdpdGhpbiB0aGlzIGVudGlyZSBjb2RlYmFzZS4gVGhpcyBsaWtlbHkgcmVsYXRlcyB0byBob3cgSVBzZWMgdHJhbnNmb3JtcyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IGhvdyBwYWNrZXRzIGFyZSBxdWV1ZWQgZm9yIHByb2Nlc3NpbmcuIEknbSBhc3N1bWluZyB0aGF0IGl0IGlzIG5vdCB1c2VkIGluIGEgbG90IG9mIHBsYWNlcyBiZWNhdXNlIEkgaGF2ZSBub3Qgd29ya2VkIHdpdGggaXQgYmVmb3JlLiBJJ2xsIG5lZWQgdG8gdXNlIG15IHVzdWFsIHNlYXJjaCB0b29scyBhbmQgbG9vayBpbiBhbGwgZmlsZXMuIFRpbWUgdG8gcnVuIGEgZ2xvYmFsIHNlYXJjaC4gTGV0J3Mgc2VlIHdoYXQgdHVybnMgdXAuIEknbSBleHBlY3RpbmcgdG8gZmluZCBpdCBpbiB0aGUgY29yZSB0cmFuc2Zvcm0gY29kZSwgcGVyaGFwcyBhcm91bmQgdGhlIG5ldHdvcmtpbmcgc3RhY2ssIGFuZCBtYXliZSBpbiBzb21lIHNwZWNpZmljIGRldmljZSBkcml2ZXJzIGlmIHRoZXkncmUgZGlyZWN0bHkgaW52b2x2ZWQgaW4gb2ZmbG9hZGluZyBvciBtYW5pcHVsYXRpbmcgdGhlc2UgdHJhbnNmb3JtIHF1ZXVlcy4gSSdtIGFsc28gY3VyaW91cyB0byBzZWUgaWYgaXQncyB1c2VkIHdpdGggYW55IHNwZWNpZmljIGNyeXB0byBoYXJkd2FyZSBvciB3aGV0aGVyIGl0J3MgbW9yZSBnZW5lcmFsIHB1cnBvc2UuIExldCdzIGdldCB0byBpdCFcblxuXG4iLCJJbnB1dFRva2VucyI6NzMyMSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjI2OjQzLjc4MjQxMDk4MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUyMzM3MjY3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX3RyYW5zX3F1ZXVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC94ZnJtLmg9MTc5OT1pbnQgeGZybV9pbnB1dF9yZXN1bWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIpO1xcbmluY2x1ZGUvbmV0L3hmcm0uaDoxODAwOmludCB4ZnJtX3RyYW5zX3F1ZXVlX25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxuaW5jbHVkZS9uZXQveGZybS5oLTE4MDEtXFx0XFx0XFx0IGludCAoKmZpbmlzaCkoc3RydWN0IG5ldCAqLCBzdHJ1Y3Qgc29jayAqLFxcbmluY2x1ZGUvbmV0L3hmcm0uaC0xODAyLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqKSk7XFxuaW5jbHVkZS9uZXQveGZybS5oOjE4MDM6aW50IHhmcm1fdHJhbnNfcXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5pbmNsdWRlL25ldC94ZnJtLmgtMTgwNC1cXHRcXHQgICAgIGludCAoKmZpbmlzaCkoc3RydWN0IG5ldCAqLCBzdHJ1Y3Qgc29jayAqLFxcbi0tXFxubmV0L2lwdjQvZXNwNC5jPTE4OD1zdGF0aWMgaW50IGVzcF9vdXRwdXRfdGFpbF90Y3Aoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC9lc3A0LmMtMTkyLVxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG5uZXQvaXB2NC9lc3A0LmM6MTkzOlxcdGVyciA9IHhmcm1fdHJhbnNfcXVldWVfbmV0KHhzX25ldCh4KSwgc2tiLCBlc3Bfb3V0cHV0X3RjcF9lbmNhcF9jYik7XFxubmV0L2lwdjQvZXNwNC5jLTE5NC1cXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4tLVxcbm5ldC9pcHY0L3hmcm00X2lucHV0LmM9Mjk9c3RhdGljIGlubGluZSBpbnQgeGZybTRfcmN2X2VuY2FwX2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3hmcm00X2lucHV0LmMtMzktXFxubmV0L2lwdjQveGZybTRfaW5wdXQuYzo0MDpcXHRpZiAoeGZybV90cmFuc19xdWV1ZShza2IsIHhmcm00X3Jjdl9lbmNhcF9maW5pc2gyKSlcXG5uZXQvaXB2NC94ZnJtNF9pbnB1dC5jLTQxLVxcdFxcdGdvdG8gZHJvcDtcXG4tLVxcbm5ldC9pcHY2L2VzcDYuYz0yMDU9c3RhdGljIGludCBlc3Bfb3V0cHV0X3RhaWxfdGNwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvZXNwNi5jLTIwOS1cXHRsb2NhbF9iaF9kaXNhYmxlKCk7XFxubmV0L2lwdjYvZXNwNi5jOjIxMDpcXHRlcnIgPSB4ZnJtX3RyYW5zX3F1ZXVlX25ldCh4c19uZXQoeCksIHNrYiwgZXNwX291dHB1dF90Y3BfZW5jYXBfY2IpO1xcbm5ldC9pcHY2L2VzcDYuYy0yMTEtXFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuLS1cXG5uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jPTMyPXN0YXRpYyBpbnQgeGZybTZfdHJhbnNwb3J0X2ZpbmlzaDIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jLTM0LXtcXG5uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jOjM1OlxcdGlmICh4ZnJtX3RyYW5zX3F1ZXVlKHNrYiwgaXA2X3Jjdl9maW5pc2gpKSB7XFxubmV0L2lwdjYveGZybTZfaW5wdXQuYy0zNi1cXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYz03OTE9c3RhdGljIHZvaWQgeGZybV90cmFuc19yZWluamVjdChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQveGZybS94ZnJtX2lucHV0LmMtODE2LVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo4MTc6aW50IHhmcm1fdHJhbnNfcXVldWVfbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQveGZybS94ZnJtX2lucHV0LmMtODE4LVxcdFxcdFxcdCBpbnQgKCpmaW5pc2gpKHN0cnVjdCBuZXQgKiwgc3RydWN0IHNvY2sgKixcXG4tLVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy04NDgtfVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo4NDk6RVhQT1JUX1NZTUJPTCh4ZnJtX3RyYW5zX3F1ZXVlX25ldCk7XFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTg1MC1cXG5uZXQveGZybS94ZnJtX2lucHV0LmM6ODUxOmludCB4ZnJtX3RyYW5zX3F1ZXVlKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTg1Mi1cXHRcXHQgICAgIGludCAoKmZpbmlzaCkoc3RydWN0IG5ldCAqLCBzdHJ1Y3Qgc29jayAqLFxcbi0tXFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTg1NC17XFxubmV0L3hmcm0veGZybV9pbnB1dC5jOjg1NTpcXHRyZXR1cm4geGZybV90cmFuc19xdWV1ZV9uZXQoZGV2X25ldChza2ItXFx1MDAzZWRldiksIHNrYiwgZmluaXNoKTtcXG5uZXQveGZybS94ZnJtX2lucHV0LmMtODU2LX1cXG5uZXQveGZybS94ZnJtX2lucHV0LmM6ODU3OkVYUE9SVF9TWU1CT0woeGZybV90cmFuc19xdWV1ZSk7XFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTg1OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjA6MjY6NDYuMzA1NzkwODg2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NDQyNDg5OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVHJhY2luZyB0aGUgQ2FsbHMgdG8gYHhmcm1fdHJhbnNfcXVldWVgIGFuZCBgeGZybV90cmFuc19xdWV1ZV9uZXRgKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGVzZSBmdW5jdGlvbnMsIGB4ZnJtX3RyYW5zX3F1ZXVlX25ldGAgYW5kIGB4ZnJtX3RyYW5zX3F1ZXVlYC4gSSBrbm93IHRoZXkncmUgYWNjZXNzaWJsZSBmcm9tIGEgZmV3IGtleSBwbGFjZXM6IGBlc3Bfb3V0cHV0X3RhaWxfdGNwYCwgd2hpY2ggc2VlbXMgdG8gYmUgdGllZCB0byBlaXRoZXIgYENPTkZJR19JTkVUX0VTUElOVENQYCBvciBgQ09ORklHX0lORVQ2X0VTUElOVENQYCwgZGVwZW5kaW5nIG9uIHRoZSBJUHY0L0lQdjYgY29udGV4dCwgYW5kIGFsc28gZnJvbSAgYHhmcm00X3Jjdl9lbmNhcF9maW5pc2hgIGFuZCBgeGZybTZfdHJhbnNwb3J0X2ZpbmlzaDJgLlxuXG5SaWdodCwgbGV0J3MganVzdCBjb25maXJtIHRob3NlIGNvbmZpZyBvcHRpb25zIGZpcnN0LiBMb29rcyBsaWtlIGJvdGggYENPTkZJR19JTkVUX0VTUElOVENQYCBhbmQgYENPTkZJR19JTkVUNl9FU1BJTlRDUGAgc2VsZWN0IGBYRlJNX0VTUElOVENQYCwgd2hpY2ggaXMgd2hhdCBJIHN1c3BlY3RlZC4gR29vZC4gXG5cbk5vdywgZm9jdXNpbmcgb24gYHhmcm00X3Jjdl9lbmNhcF9maW5pc2hgLCBJIHJlbWVtYmVyIHRoYXQgaXQncyB3aXRoaW4gYHhmcm00X2lucHV0LmNgLiBUaGF0IGZpbGUncyBidWlsZCBwcm9jZXNzIHJlbGllcyBvbiBgQ09ORklHX1hGUk1gLCBzbyBJJ2xsIGNoZWNrIGBuZXQvaXB2NC9NYWtlZmlsZWAgdG8gY29uZmlybSBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY2NiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMDoyNjo1MC44NTAwNDI3MDhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0Mzg0MzM1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtNF9pbnB1dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvTWFrZWZpbGU9NjU9b2JqLSQoQ09ORklHX05FVExBQkVMKSArPSBjaXBzb19pcHY0Lm9cXG5uZXQvaXB2NC9NYWtlZmlsZS02Ni1cXG5uZXQvaXB2NC9NYWtlZmlsZTo2NzpvYmotJChDT05GSUdfWEZSTSkgKz0geGZybTRfcG9saWN5Lm8geGZybTRfc3RhdGUubyB4ZnJtNF9pbnB1dC5vIFxcXFxcXG5uZXQvaXB2NC9NYWtlZmlsZS02OC1cXHRcXHQgICAgICB4ZnJtNF9vdXRwdXQubyB4ZnJtNF9wcm90b2NvbC5vXFxuLS1cXG5uZXQvaXB2NC94ZnJtNF9pbnB1dC5jLTItLypcXG5uZXQvaXB2NC94ZnJtNF9pbnB1dC5jOjM6ICogeGZybTRfaW5wdXQuY1xcbm5ldC9pcHY0L3hmcm00X2lucHV0LmMtNC0gKlxcbi0tXFxubmV0L2lwdjQveGZybTRfcHJvdG9jb2wuYz0xOTI9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfcHJvdG9jb2wgaXBjb21wNF9wcm90b2NvbCA9IHtcXG4tLVxcbm5ldC9pcHY0L3hmcm00X3Byb3RvY29sLmMtMTk3LVxcbm5ldC9pcHY0L3hmcm00X3Byb3RvY29sLmM6MTk4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9pbnB1dF9hZmluZm8geGZybTRfaW5wdXRfYWZpbmZvID0ge1xcbm5ldC9pcHY0L3hmcm00X3Byb3RvY29sLmMtMTk5LVxcdC5mYW1pbHlcXHRcXHQ9XFx0QUZfSU5FVCxcXG4tLVxcbm5ldC9pcHY0L3hmcm00X3Byb3RvY29sLmM9MzAzPXZvaWQgX19pbml0IHhmcm00X3Byb3RvY29sX2luaXQodm9pZClcXG5uZXQvaXB2NC94ZnJtNF9wcm90b2NvbC5jLTMwNC17XFxubmV0L2lwdjQveGZybTRfcHJvdG9jb2wuYzozMDU6XFx0eGZybV9pbnB1dF9yZWdpc3Rlcl9hZmluZm8oXFx1MDAyNnhmcm00X2lucHV0X2FmaW5mbyk7XFxubmV0L2lwdjQveGZybTRfcHJvdG9jb2wuYy0zMDYtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMDoyNjo1MC45OTM4OTEzNzNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA3MTcyMzQyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipYRlJNIFN1YnN5c3RlbSBCdWcgRml4IGFuZCBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgdG8gYmUgdGFyZ2V0aW5nIGB4ZnJtNF9pbnB1dC5jYC4gVGhhdCBmaWxlJ3MgYnVpbHQgd2hlbiBgQ09ORklHX1hGUk1gIGlzIGVuYWJsZWQsIHdoaWNoIGlzIHRoZSBmb3VuZGF0aW9uYWwgcGFydCBvZiB0aGUgWEZSTSBzdWJzeXN0ZW0sIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdG8gcGF5IGF0dGVudGlvbiB0by5cblxuVGhlIGNvcmUgb2YgdGhlIGlzc3VlIHNlZW1zIHRvIGNlbnRlciBhcm91bmQgdGhlIGZ1bmN0aW9ucyBgeGZybV90cmFuc19xdWV1ZV9uZXRgIGFuZCBgeGZybV90cmFuc19xdWV1ZWAuIFRoZXNlIGFyZSBkZWZpbml0ZWx5IHJlYWNoYWJsZSBkdXJpbmcgc3RhbmRhcmQgWEZSTSBwcm9jZXNzaW5nIOKAkyBJIGNhbiB0cmFjZSB0aGVtIGluIG15IG1pbmQncyBleWUgdGhyb3VnaCB0aGUgZGF0YSBwYXRocy4gVGhlIHBhdGNoIGl0c2VsZiBpcyBmaXhpbmcgYSBidWcgd2l0aGluIHRob3NlIHR3byBmdW5jdGlvbnMgYW5kIGFsc28gYHhmcm1fdHJhbnNfcmVpbmplY3RgLiBUaGUgZml4IGludm9sdmVzIHRha2luZyBhIHJlZmVyZW5jZSB0byBgc2tiLVx1MDAzZWRldmAgYW5kIGVuc3VyaW5nIHRoZSB2YWxpZGl0eSBvZiBgc2tiX2RzdGAuIE1ha2VzIHNlbnNlLCBwcm90ZWN0aW5nIGFnYWluc3QgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9ucyB3aXRoIHRoZSBzb2NrZXQgYnVmZmVyIGFuZCBkZXZpY2UgaW50ZXJhY3Rpb25zLCBhIGNvbW1vbiBpc3N1ZSBpbiBuZXR3b3JraW5nIGNvZGUuXG5cblRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIFhGUk0gY29yZSwgc28gSSBuZWVkIHRvIGFzc2VzcyBpdHMgaW1wYWN0LiBCYXNlZCBvbiB0aGUgZGVzY3JpcHRpb24sIGFuZCB0aGUgZnVuY3Rpb25zIGFmZmVjdGVkLCB0aGlzIGlzIGRlZmluaXRlbHkgYSBjaGFuZ2UgdGhhdCB3YXJyYW50cyBmdXp6aW5nLiBUaGUgcGF0Y2ggaXMgcHJvYmFibHkgYWRkcmVzc2luZyBhIHN1YnRsZSB2dWxuZXJhYmlsaXR5IGFuZCBpdOKAmXMgYWx3YXlzIGdvb2QgdG8gY2hlY2sgZm9yIHRoYXQuXG5cbkZvciBhIHRhcmdldGVkIGZ1enppbmcgYXBwcm9hY2gsIEknbGwgZm9jdXMgb24gYHhmcm1fdHJhbnNfcXVldWVfbmV0YCBhbmQgYHhmcm1fdHJhbnNfcXVldWVgLiBgeGZybV90cmFuc19yZWluamVjdGAgaXMgYWxzbyBtZW50aW9uZWQuIEl0J3Mgc3RhdGljLCBidXQgaXQncyB1c2VkIGFzIGEgd29ya3F1ZXVlIGNhbGxiYWNrLCBzbyBpdCdzIGEgdG9wLWxldmVsIGZ1bmN0aW9uIGluIGEgd2F5LiBJIHRoaW5rIGl0IG1pZ2h0IGJlIHVzZWZ1bCB0byBmb2N1cyBvbiB0aGUgb3RoZXIgdHdvIGZ1bmN0aW9ucy5cblxuSSBzaG91bGQgYWxzbyBjaGVjayB0aGUgc291cmNlIGNvZGUgZm9yIGB4ZnJtX3RyYW5zX3JlaW5qZWN0YCBpbiBgbmV0L3hmcm0veGZybV9pbnB1dC5jYCBqdXN0IHRvIGJlIHN1cmUuIEkgd2lsbCBwcm9iYWJseSBhbHNvIHdhbnQgdG8gcmV2aWV3IGFueSB0ZXN0cyB0aGF0IGNvdmVyIHRoaXMgbW9kdWxlLCBpZiB0aGV5IGV4aXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTM1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjI2OjU3LjA2NTYxNzQxM1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0OTkzOTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fdHJhbnNfcmVpbmplY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1faW5wdXQuYz03ODk9RVhQT1JUX1NZTUJPTCh4ZnJtX2lucHV0X3Jlc3VtZSk7XFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTc5MC1cXG5uZXQveGZybS94ZnJtX2lucHV0LmM6NzkxOnN0YXRpYyB2b2lkIHhmcm1fdHJhbnNfcmVpbmplY3Qoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy03OTIte1xcbi0tXFxubmV0L3hmcm0veGZybV9pbnB1dC5jPTg1OT12b2lkIF9faW5pdCB4ZnJtX2lucHV0X2luaXQodm9pZClcXG4tLVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy04NzctXFx0XFx0X19za2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZ0cmFucy1cXHUwMDNlcXVldWUpO1xcbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo4Nzg6XFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZ0cmFucy1cXHUwMDNld29yaywgeGZybV90cmFuc19yZWluamVjdCk7XFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTg3OS1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjI2OjU3LjE4MDYxNjM4MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDAzNDM3MDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYnJlYWtkb3duIG9mIHdoYXQncyBnb2luZyBvbiwgdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGNvZGU6XG5cbioqQW5hbHl6aW5nIGB4ZnJtX3RyYW5zX3JlaW5qZWN0YCBhcyBhIFBvdGVudGlhbCBTeW1ib2wqKlxuXG5SaWdodCwgbGV0J3Mgc2VlLCB0aGUgZnVuY3Rpb24gYHhmcm1fdHJhbnNfcmVpbmplY3RgIGlzIGJlaW5nIHBhc3NlZCB0byBgSU5JVF9XT1JLYC4gU2luY2UgaXQncyBub3QgYmVpbmcgaW5saW5lZCBkaXJlY3RseSwgdGhhdCBtZWFucyBpdCdzIGEgcG90ZW50aWFsIGZvY3VzIHN5bWJvbCB0aGF0IGNvdWxkIGJlIGltcG9ydGFudCBmb3IgY29uZmlndXJhdGlvbi5cblxuVGhlcmVmb3JlLCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIG5lY2Vzc2FyeSB0byBoYXZlIHRoaXMgZnVuY3Rpb24gYXZhaWxhYmxlLiBJdCBsb29rcyBsaWtlIHRoZSByZWxldmFudCBvbmVzIGFyZTpcblxuKiAgIGBDT05GSUdfWEZSTV9VU0VSYCAtIE9idmlvdXNseSwgbmVlZHMgdG8gYmUgZW5hYmxlZC5cbiogICBgQ09ORklHX0lORVRfRVNQYCAtIFByb2JhYmx5IHJlbGF0ZWQgdG8gSVBzZWMgRW5jYXBzdWxhdGluZyBTZWN1cml0eSBQYXlsb2FkIChFU1ApLlxuKiAgIGBDT05GSUdfSU5FVF9BSGAgLSBMaWtlbHkgcmVsYXRlZCB0byBJUHNlYyBBdXRoZW50aWNhdGlvbiBIZWFkZXIgKEFIKS5cbiogICBgQ09ORklHX1hGUk1fRVNQSU5UQ1BgIC0gVGhpcyBvbmUgaXMgYSBtYXliZSwgYW5kIEknbGwgbmVlZCB0byBjb25maXJtLiBJdCBhcHBlYXJzIHRvIGJlIHVzaW5nIGB4ZnJtX3RyYW5zX3F1ZXVlX25ldGAgdmlhIGBlc3Bfb3V0cHV0X3RhaWxfdGNwYCwgc28gaXTigJlzIHdvcnRoIGludmVzdGlnYXRpbmcgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIG5lY2Vzc2FyeS5cblxuSSBzaG91bGQgdmVyaWZ5IHRoaXMgYENPTkZJR19YRlJNX0VTUElOVENQYCBjb25uZWN0aW9uIGJ5IGxvb2tpbmcgaW50byBgZXNwX291dHB1dF90YWlsX3RjcGAuIFNvLCBJJ2xsIGNoZWNrIGl0cyBpbXBsZW1lbnRhdGlvbiBpbiBgbmV0L2lwdjQvZXNwNC5jYC4gVGhhdCBzaG91bGQgY2xhcmlmeSB3aGV0aGVyIGl0J3MgdHJ1bHkgZXNzZW50aWFsIGluIHRoaXMgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0OTIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjA6Mjc6MDEuNTg0MDU1OTk3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTIxMjM3NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXNwX291dHB1dF90YWlsX3RjcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvZXNwNC5jPTE3OT1zdGF0aWMgaW50IGVzcF9vdXRwdXRfdGNwX2VuY2FwX2NiKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvZXNwNC5jLTE4Ny1cXG5uZXQvaXB2NC9lc3A0LmM6MTg4OnN0YXRpYyBpbnQgZXNwX291dHB1dF90YWlsX3RjcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2NC9lc3A0LmMtMTg5LXtcXG4tLVxcbm5ldC9pcHY0L2VzcDQuYy0yMDItI2Vsc2VcXG5uZXQvaXB2NC9lc3A0LmM6MjAzOnN0YXRpYyBpbnQgZXNwX291dHB1dF90YWlsX3RjcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2NC9lc3A0LmMtMjA0LXtcXG4tLVxcbm5ldC9pcHY0L2VzcDQuYz0yMTA9c3RhdGljIHZvaWQgZXNwX291dHB1dF9kb25lKHZvaWQgKmRhdGEsIGludCBlcnIpXFxuLS1cXG5uZXQvaXB2NC9lc3A0LmMtMjQxLVxcdFxcdCAgICB4LVxcdTAwM2VlbmNhcCBcXHUwMDI2XFx1MDAyNiB4LVxcdTAwM2VlbmNhcC1cXHUwMDNlZW5jYXBfdHlwZSA9PSBUQ1BfRU5DQVBfRVNQSU5UQ1ApIHtcXG5uZXQvaXB2NC9lc3A0LmM6MjQyOlxcdFxcdFxcdGVyciA9IGVzcF9vdXRwdXRfdGFpbF90Y3AoeCwgc2tiKTtcXG5uZXQvaXB2NC9lc3A0LmMtMjQzLVxcdFxcdFxcdGlmIChlcnIgIT0gLUVJTlBST0dSRVNTKVxcbi0tXFxubmV0L2lwdjQvZXNwNC5jPTQ5OD1pbnQgZXNwX291dHB1dF90YWlsKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZXNwX2luZm8gKmVzcClcXG4tLVxcbm5ldC9pcHY0L2VzcDQuYy02MTItXFx0aWYgKCFlcnIgXFx1MDAyNlxcdTAwMjYgeC1cXHUwMDNlZW5jYXAgXFx1MDAyNlxcdTAwMjYgeC1cXHUwMDNlZW5jYXAtXFx1MDAzZWVuY2FwX3R5cGUgPT0gVENQX0VOQ0FQX0VTUElOVENQKVxcbm5ldC9pcHY0L2VzcDQuYzo2MTM6XFx0XFx0ZXJyID0gZXNwX291dHB1dF90YWlsX3RjcCh4LCBza2IpO1xcbm5ldC9pcHY0L2VzcDQuYy02MTQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjI3OjAxLjY5NjE4NzI0NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDgzMjQ3NTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgRVNQLVRDUCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBlc3Bfb3V0cHV0X3RhaWxfdGNwYC4gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgZnVuY3Rpb24ncyBwcm9iYWJseSBkZWZpbmVkIGNvbmRpdGlvbmFsbHkuIEdpdmVuIHRoZSBjb250ZXh0LCBteSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgaXQncyB0aWVkIHRvIHRoZSBgQ09ORklHX0lORVRfRVNQSU5UQ1BgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBMZXQncyBjb25maXJtIHRoYXQgaHlwb3RoZXNpcy4gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGAjaWZkZWZgIGJsb2NrIHRvIHNlZSBpZiBteSBndWVzcyBpcyBjb3JyZWN0LiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhlIHJlbGV2YW50IGhlYWRlciBmaWxlcyBhbmQgc2VlIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgYnJvdWdodCBpbnRvIHRoZSBjb2RlLiBMZXQncyB2ZXJpZnkgdGhpcyBhbmQgdGhlbiBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBpbnRlbmRlZCBwdXJwb3NlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQzNSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjI3OjA1Ljc3OTQzNzQ4NVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4OTQ3OTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19JTkVUX0VTUElOVENQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9lc3A0LmM9OTk9c3RhdGljIHZvaWQgZXNwX3NzZ191bnJlZihzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgdm9pZCAqdG1wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIGFscmVhZHlfdW5yZWYpXFxuLS1cXG5uZXQvaXB2NC9lc3A0LmMtMTI0LVxcbm5ldC9pcHY0L2VzcDQuYzoxMjU6I2lmZGVmIENPTkZJR19JTkVUX0VTUElOVENQXFxubmV0L2lwdjQvZXNwNC5jLTEyNi1zdGF0aWMgc3RydWN0IHNvY2sgKmVzcF9maW5kX3RjcF9zayhzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcXG4tLVxcbm5ldC9pcHY0L2VzcDQuYz0zMDk9c3RhdGljIHN0cnVjdCBpcF9lc3BfaGRyICplc3Bfb3V0cHV0X3VkcF9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvZXNwNC5jLTMzOC1cXG5uZXQvaXB2NC9lc3A0LmM6MzM5OiNpZmRlZiBDT05GSUdfSU5FVF9FU1BJTlRDUFxcbm5ldC9pcHY0L2VzcDQuYy0zNDAtc3RhdGljIHN0cnVjdCBpcF9lc3BfaGRyICplc3Bfb3V0cHV0X3RjcF9lbmNhcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcXG4tLVxcbm5ldC9pcHY0L2VzcDQuYz0xMTEyPXN0YXRpYyBpbnQgZXNwX2luaXRfc3RhdGUoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9pcHY0L2VzcDQuYy0xMTUwLVxcdFxcdFxcdGJyZWFrO1xcbm5ldC9pcHY0L2VzcDQuYzoxMTUxOiNpZmRlZiBDT05GSUdfSU5FVF9FU1BJTlRDUFxcbm5ldC9pcHY0L2VzcDQuYy0xMTUyLVxcdFxcdGNhc2UgVENQX0VOQ0FQX0VTUElOVENQOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMDoyNzowNS44ODg0MzUwNTNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY2NzEyNzkyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIEVTUCBpbiBUQ1AgRW5jYXBzdWxhdGlvbioqXG5cbkFscmlnaHQsIHNvIGBDT05GSUdfSU5FVF9FU1BJTlRDUGAgaXMgZGVmaW5pdGVseSBlbmFibGVkLCB0aGF0IG11Y2ggaXMgY2xlYXIuIE15IG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGFuZCBzZWUgaG93IGl0J3MgaGFuZGxlZCBhdCB0aGUgcGFja2V0IHByb2Nlc3NpbmcgbGV2ZWwsIHNwZWNpZmljYWxseSBkdXJpbmcgdGhlIHJlY2VpdmUgcGF0aC4gSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byBgeGZybTRfcmN2X2VuY2FwX2ZpbmlzaGAgd2l0aGluIGBuZXQvaXB2NC94ZnJtNF9pbnB1dC5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IHRoYXQgZnVuY3Rpb24gZG9lcyB3aXRoIGFuIEVTUCBwYWNrZXQgdGhhdCdzIGJlZW4gZW5jYXBzdWxhdGVkIGluIFRDUC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBkZS1lbmNhcHN1bGF0aW9uIGxvZ2ljLCBob3cgdGhlIGlubmVyIElQIGhlYWRlciBpcyByZS1jb25zdHJ1Y3RlZCwgYW5kIGNydWNpYWxseSwgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBUQ1AgbGF5ZXIuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIG9mIFhGUk0gd2l0aCBUQ1AsIGFuZCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBleHBvc2UgdGhhdC4gSSdsbCBiZSBmb2N1c2VkIG9uIGFueSBwb3RlbnRpYWwgZ290Y2hhcyBvciBvcHRpbWl6YXRpb25zLCBsaWtlIHdoZXRoZXIgdGhlcmUncyBhbnkgdW5uZWNlc3NhcnkgY29weWluZyBvciByZS1jYWxjdWxhdGlvbiBvZiBjaGVja3N1bXMuIEknbSBhc3N1bWluZyB0aGF0IGl0IGhhbmRsZXMgdGhlIGlubmVyIElQIGhlYWRlciBhbmQgVENQIGNvcnJlY3RseSwgYnV0IEkgbmVlZCB0byBiZSAxMDAlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDE1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjA6Mjc6MDkuNTU1NTY1ODc3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Nzg3OTA0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtNF9yY3ZfZW5jYXBfZmluaXNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC94ZnJtNF9pbnB1dC5jLTIyLVxcbm5ldC9pcHY0L3hmcm00X2lucHV0LmM6MjM6c3RhdGljIGludCB4ZnJtNF9yY3ZfZW5jYXBfZmluaXNoMihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayxcXG5uZXQvaXB2NC94ZnJtNF9pbnB1dC5jLTI0LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC94ZnJtNF9pbnB1dC5jLTI4LVxcbm5ldC9pcHY0L3hmcm00X2lucHV0LmM6Mjk6c3RhdGljIGlubGluZSBpbnQgeGZybTRfcmN2X2VuY2FwX2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayxcXG5uZXQvaXB2NC94ZnJtNF9pbnB1dC5jLTMwLVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQveGZybTRfaW5wdXQuYy0zOS1cXG5uZXQvaXB2NC94ZnJtNF9pbnB1dC5jOjQwOlxcdGlmICh4ZnJtX3RyYW5zX3F1ZXVlKHNrYiwgeGZybTRfcmN2X2VuY2FwX2ZpbmlzaDIpKVxcbm5ldC9pcHY0L3hmcm00X2lucHV0LmMtNDEtXFx0XFx0Z290byBkcm9wO1xcbi0tXFxubmV0L2lwdjQveGZybTRfaW5wdXQuYz00OT1pbnQgeGZybTRfdHJhbnNwb3J0X2ZpbmlzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXN5bmMpXFxuLS1cXG5uZXQvaXB2NC94ZnJtNF9pbnB1dC5jLTc3LVxcdFxcdGRldl9uZXQoZGV2KSwgTlVMTCwgc2tiLCBkZXYsIE5VTEwsXFxubmV0L2lwdjQveGZybTRfaW5wdXQuYzo3ODpcXHRcXHR4ZnJtNF9yY3ZfZW5jYXBfZmluaXNoKTtcXG5uZXQvaXB2NC94ZnJtNF9pbnB1dC5jLTc5LVxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMDoyNzowOS42MzM0NTA2NjlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg1MDgyNjQxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBYRlJNIFBhdGNoJ3MgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUgaGVyZSwgYHhmcm00X3Jjdl9lbmNhcF9maW5pc2hgIGlzIGRpcmVjdGx5IHRpZWQgaW50byBgeGZybTRfdHJhbnNwb3J0X2ZpbmlzaGAsIHdoaWNoIGlzIGEgcHJldHR5IHN0YW5kYXJkIHBhcnQgb2YgWEZSTSBpbnB1dCBwcm9jZXNzaW5nLiBUaGF0IGFsb25lIHRlbGxzIG1lIHRoYXQgaGF2aW5nIGBDT05GSUdfWEZSTV9VU0VSYCBhbmQgYENPTkZJR19JTkVUX0VTUGAgY29uZmlndXJlZCB3b3VsZCBiZSBlbm91Z2ggdG8gZ2V0IHRvIHRoaXMgY29kZS5cblxuVGhlcmVmb3JlLCBteSBzdW1tYXJ5IGlzIHRoaXM6XG5cblRoaXMgbG9va3MgbGlrZSBhIHdvcnRod2hpbGUgdGFyZ2V0IGZvciBmdXp6aW5nLiBUaGUgcGF0Y2ggaXMgZml4aW5nIGEgYnVnIHJlbGF0ZWQgdG8gaG93IFhGUk0gaGFuZGxlcyBxdWV1aW5nIGFuZCByZS1pbmplY3RpbmcgcGFja2V0cywgc3BlY2lmaWNhbGx5IHdpdGhpbiBgeGZybV90cmFuc19xdWV1ZV9uZXRgLCBgeGZybV90cmFuc19xdWV1ZWAsIGFuZCBgeGZybV90cmFuc19yZWluamVjdGAuIFRoZSBmaXggaW52b2x2ZXMgY29ycmVjdGx5IG1hbmFnaW5nIHJlZmVyZW5jZXMgdG8gYHNrYi1cdTAwM2VkZXZgIGFuZCBlbnN1cmluZyBgc2tiX2RzdGAgaXMgdmFsaWQsIHdoaWNoIHBvaW50cyB0byBjaGFuZ2VzIGluIGNvcmUgcGFja2V0IHByb2Nlc3NpbmcuIFNpbmNlIGl0IHRvdWNoZXMgdGhlc2UgbmV0d29yayBpbnB1dC9vdXRwdXQgcGF0aHMsIGl0IGhhcyBzaWduaWZpY2FudCBwb3RlbnRpYWwgZm9yIHRyaWdnZXJpbmcgaW50ZXJlc3Rpbmcgc3RhdGVzLlxuXG5NeSBwcmltYXJ5IGZvY3VzIHNob3VsZCBiZSBvbiB0aGUgZnVuY3Rpb25zIGB4ZnJtX3RyYW5zX3F1ZXVlX25ldGAsIGB4ZnJtX3RyYW5zX3F1ZXVlYCwgYW5kIGB4ZnJtX3RyYW5zX3JlaW5qZWN0YC5cblxuVG8gZW5zdXJlIGJyb2FkIGNvdmVyYWdlLCBJIHNob3VsZCBjb25zaWRlciBlbmFibGluZyB0aGUgY29uZmlndXJhdGlvbnMgYFhGUk1fVVNFUmAsIGBJTkVUX0VTUGAsIGFuZCB0aGVuIEkgd2FudCB0byBkb3VibGUgY2hlY2sgbXkgYXNzdW1wdGlvbnMsIGJ1dCB0aGUgYElORVRfRVNQSU5UQ1BgIGFuZCBgSU5FVDZfRVNQSU5UQ1BgIGNvbmZpZ3VyYXRpb25zIGxvb2sgbGlrZSB0aGV5IHNob3VsZCBhbHNvIGJlIHJlbGV2YW50LiBJIHdhbnQgdG8gYmUgY2VydGFpbiBJIGhhdmVuJ3QgbWlzc2VkIGEgY29uZGl0aW9uYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzM4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjI3OjE1LjQ4NDI3OTY1M1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyNjQ5NTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJTkVUX0VTUElOVENQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9LY29uZmlnPTM2OT1jb25maWcgSU5FVF9FU1BfT0ZGTE9BRFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zODEtXFxubmV0L2lwdjQvS2NvbmZpZzozODI6Y29uZmlnIElORVRfRVNQSU5UQ1BcXG5uZXQvaXB2NC9LY29uZmlnLTM4My1cXHRib29sIFxcXCJJUDogRVNQIGluIFRDUCBlbmNhcHN1bGF0aW9uIChSRkMgODIyOSlcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjI3OjE1LjU4NjkzNDU0MloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODM2MzYyODI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeTpcblxuKipUaGUgRXhpc3RlbmNlIG9mIHRoZSBEYXRhIGFuZCBUb29saW5nKipcblxuUmlnaHQsIHNvIHdlJ3JlIGFja25vd2xlZGdpbmcgdGhlIHJlYWxpdHkgb2YgdGhlIHNpdHVhdGlvbjogXCJZZXMsIHRoZXkgZXhpc3QuXCIgU3BlY2lmaWNhbGx5LCB0aGUgZGF0YSBhbmQgaXRzIHJlbGF0ZWQgcHJvY2Vzc2luZyBjYXBhYmlsaXRpZXMsIGFzIHdlbGwgYXMgdGhlIHRvb2xzIHdlIGhhdmUgdG8gd29yayB3aXRoIHRoZW0uIFRoaXMgaXMgdGhlIGZvdW5kYXRpb247IHdlJ3JlIGVzdGFibGlzaGluZyBjb21tb24gZ3JvdW5kLiBJJ20gYXNzdW1pbmcsIGFzIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkLCB5b3UncmUgYWxzbyBhd2FyZSBvZiB0aGVtLlxuXG5Ob3csIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBUaGUgaW50ZW50aW9uIGlzIHRvIFwidXNlIHRoZSBzZXQtcmVzdWx0cyB0b29sLlwiIFRoaXMgc2lnbmFscyBhIHZlcnkgc3BlY2lmaWMgYXBwcm9hY2guIFdlJ3JlIG5vdCBqdXN0IGJyYWluc3Rvcm1pbmcgb3IgZXhwbG9yaW5nIGFic3RyYWN0IGNvbmNlcHRzLiBXZSdyZSBtb3ZpbmcgdG93YXJkcyBwcmFjdGljYWwgYXBwbGljYXRpb24gYW5kIGFuYWx5c2lzLiBJdCdzIGFib3V0IGxldmVyYWdpbmcgYSBkZWZpbmVkIHRvb2wsIGxpa2VseSBvbmUgZ2VhcmVkIHRvd2FyZHMgcHJlc2VudGluZyBmaW5kaW5ncywgcGVyaGFwcyBhIHZpc3VhbGl6YXRpb24gZnJhbWV3b3JrIG9yIGFuIGF1dG9tYXRlZCByZXBvcnRpbmcgc3lzdGVtLCB3aGF0ZXZlciB3ZSd2ZSBhZ3JlZWQgb24sIHRvIGRpc3RpbGwgdGhlIGF2YWlsYWJsZSBpbmZvcm1hdGlvbi4gSXTigJlzIGFib3V0IGxldmVyYWdpbmcgb3VyIHJlc291cmNlcyB0byBvYnRhaW4gYWN0aW9uYWJsZSBvdXRwdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDUwLCJPdXRwdXRUb2tlbnMiOjE1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjI3OjE5LjQyMzMwMTU5OFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzcyNDQyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEZSTV9VU0VSXCIsXG4gICAgXCJJTkVUX0VTUFwiLFxuICAgIFwiSU5FVF9FU1BJTlRDUFwiLFxuICAgIFwiSU5FVDZfRVNQXCIsXG4gICAgXCJJTkVUNl9FU1BJTlRDUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhmcm1fdHJhbnNfcXVldWVfbmV0XCIsXG4gICAgXCJ4ZnJtX3RyYW5zX3F1ZXVlXCIsXG4gICAgXCJ4ZnJtX3RyYW5zX3JlaW5qZWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gWEZSTSBwYWNrZXQgcXVldWVpbmcgYW5kIHJlaW5qZWN0aW9uIHBhdGhzIGJ5IHByb3Blcmx5IGhvbGRpbmcgYSByZWZlcmVuY2UgdG8gc2tiLVxcdTAwM2VkZXYgYW5kIGVuc3VyaW5nIHNrYl9kc3QgaXMgdmFsaWQuIFRoaXMgbW9kaWZpZXMgY29yZSBYRlJNIHBhY2tldCBwcm9jZXNzaW5nIGxvZ2ljIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIG5ldHdvcmsgaW5wdXQvb3V0cHV0IHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGUk1fVVNFUlwiLFxuICAgIFwiSU5FVF9FU1BcIixcbiAgICBcIklORVRfRVNQSU5UQ1BcIixcbiAgICBcIklORVQ2X0VTUFwiLFxuICAgIFwiSU5FVDZfRVNQSU5UQ1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4ZnJtX3RyYW5zX3F1ZXVlX25ldFwiLFxuICAgIFwieGZybV90cmFuc19xdWV1ZVwiLFxuICAgIFwieGZybV90cmFuc19yZWluamVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIFhGUk0gcGFja2V0IHF1ZXVlaW5nIGFuZCByZWluamVjdGlvbiBwYXRocyBieSBwcm9wZXJseSBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIHNrYi1cXHUwMDNlZGV2IGFuZCBlbnN1cmluZyBza2JfZHN0IGlzIHZhbGlkLiBUaGlzIG1vZGlmaWVzIGNvcmUgWEZSTSBwYWNrZXQgcHJvY2Vzc2luZyBsb2dpYyB3aGljaCBpcyByZWFjaGFibGUgZnJvbSBuZXR3b3JrIGlucHV0L291dHB1dCBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjA6Mjc6MTkuNTY3MDM2NDUyWiIsIlNlcSI6MjksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDE5NjM0Mjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjA6Mjc6MTkuNTY3OTU3MDYzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjk0MTg3MDk4MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBvYmplY3QgbGlmZXRpbWUgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMgZm9yIGBza2ItXFx1MDAzZWRldmAgYW5kIGBza2JfZHN0YCB3aGVuIGFuIGBza2JgIGlzIHF1ZXVlZCBmb3IgcmVpbmplY3Rpb24gaW4gdGhlIFhGUk0gc3Vic3lzdGVtLiBJdCBhZGRzIGBkZXZfaG9sZCgpYCBhbmQgYGRldl9wdXQoKWAgZm9yIHRoZSBuZXR3b3JrIGRldmljZSwgZm9yY2VzIHRoZSBkZXN0aW5hdGlvbiBlbnRyeSB2aWEgYHNrYl9kc3RfZm9yY2UoKWAsIGFuZCB3cmFwcyB0aGUgcmVpbmplY3Rpb24gbG9vcCBpbiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uIFRoZXNlIGNoYW5nZXMgYXJlIGRlc2lnbmVkIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgKFVBRikgb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgcmVsYXRlZCB0byBmcmVlZCBuZXR3b3JrIGRldmljZXMgb3IgZGVzdGluYXRpb24gZW50cmllcy4gU3VjaCBtZW1vcnkgY29ycnVwdGlvbiBhbmQgbGlmZXRpbWUgYnVncyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBidWZmZXIgbGVuZ3Rocywgb3IgZXhwb3NlIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3OTI1YTZjZWU5OTAwZjVjMjZhMmI2YTRhZjYxYWVjMjk3ZWM4ZTA3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAyMDoyNjoxOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1faW5wdXQuYyBiL25ldC94ZnJtL3hmcm1faW5wdXQuY1xuaW5kZXggZWVjYWIzMzdiZDBhNy4uOGY2MTA5ZWFkYTdlYSAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL3hmcm1faW5wdXQuY1xuKysrIGIvbmV0L3hmcm0veGZybV9pbnB1dC5jXG5AQCAtODAwLDEyICs4MDAsMTcgQEAgc3RhdGljIHZvaWQgeGZybV90cmFuc19yZWluamVjdChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ0cmFucy1cdTAwM2VxdWV1ZV9sb2NrKTtcbiBcbiBcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbitcdHJjdV9yZWFkX2xvY2soKTtcbiBcdHdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZShcdTAwMjZxdWV1ZSkpKSB7XG4gXHRcdHN0cnVjdCBuZXQgKm5ldCA9IFhGUk1fVFJBTlNfU0tCX0NCKHNrYiktXHUwMDNlbmV0O1xuK1x0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLVx1MDAzZWRldjtcbiBcbiBcdFx0WEZSTV9UUkFOU19TS0JfQ0Ioc2tiKS1cdTAwM2VmaW5pc2gobmV0LCBOVUxMLCBza2IpO1xuK1x0XHRpZiAoZGV2KVxuK1x0XHRcdGRldl9wdXQoZGV2KTtcbiBcdFx0cHV0X25ldChuZXQpO1xuIFx0fVxuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRsb2NhbF9iaF9lbmFibGUoKTtcbiB9XG4gXG5AQCAtODIxLDEyICs4MjYsMTggQEAgaW50IHhmcm1fdHJhbnNfcXVldWVfbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChza2JfcXVldWVfbGVuKFx1MDAyNnRyYW5zLVx1MDAzZXF1ZXVlKSBcdTAwM2U9IFJFQURfT05DRShuZXRfaG90ZGF0YS5tYXhfYmFja2xvZykpXG4gXHRcdHJldHVybiAtRU5PQlVGUztcbiBcbitcdGlmIChza2JfZHN0KHNrYikgXHUwMDI2XHUwMDI2ICFza2JfZHN0X2ZvcmNlKHNrYikpXG4rXHRcdHJldHVybiAtRUhPU1RVTlJFQUNIO1xuK1xuIFx0QlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgeGZybV90cmFuc19jYikgXHUwMDNlIHNpemVvZihza2ItXHUwMDNlY2IpKTtcbiBcbiBcdGhvbGRfbmV0ID0gbWF5YmVfZ2V0X25ldChuZXQpO1xuIFx0aWYgKCFob2xkX25ldClcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXG4rXHRpZiAoc2tiLVx1MDAzZWRldilcbitcdFx0ZGV2X2hvbGQoc2tiLVx1MDAzZWRldik7XG4rXG4gXHRYRlJNX1RSQU5TX1NLQl9DQihza2IpLVx1MDAzZWZpbmlzaCA9IGZpbmlzaDtcbiBcdFhGUk1fVFJBTlNfU0tCX0NCKHNrYiktXHUwMDNlbmV0ID0gaG9sZF9uZXQ7XG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2dHJhbnMtXHUwMDNlcXVldWVfbG9jayk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMDoyNzoxOS41Njc5NTg0NDNaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTQxODY5MDQ1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFhGUk0gUGF0Y2g6IEZvY3VzIG9uIE9iamVjdCBMaWZldGltZSBhbmQgUmVmZXJlbmNlIENvdW50aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGZvciBgeGZybV9pbnB1dC5jYC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyBwcmltYXJpbHkgYWJvdXQgaW1wcm92aW5nIG9iamVjdCBsaWZldGltZSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIHJlZmVyZW5jZSBjb3VudGluZyBvZiBgc2tiLVx1MDAzZWRldmAgYW5kIGhhbmRsaW5nIHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byB1c2UtYWZ0ZXItZnJlZSBhbmQgaW52YWxpZCByZWZlcmVuY2VzLCBlc3BlY2lhbGx5IHdoZW4gYW4gU0tCIGlzIGJlaW5nIHF1ZXVlZCBmb3IgcmVpbmplY3Rpb24uXG5cblRoZSBjb3JlIGNoYW5nZXMgYXJlIGluIGB4ZnJtX3RyYW5zX3F1ZXVlX25ldGAgYW5kIGB4ZnJtX3RyYW5zX3JlaW5qZWN0YC4gSW4gdGhlIHF1ZXVlaW5nIGZ1bmN0aW9uLCB3ZSdyZSBub3cgYWRkaW5nIGNoZWNrcy4gSSBzZWUgYSBuZXcgY2hlY2sgZm9yIGAhc2tiX2RzdF9mb3JjZShza2IpYCB3aXRoaW4gYHhmcm1fdHJhbnNfcXVldWVfbmV0YCB0byByZXR1cm4gLUVIT1NUVU5SRUFDSCB3aGVuIGEgZGVzdGluYXRpb24gaXMgcHJlc2VudCBidXQgbm90IGZvcmNlZCwgYW5kIGEgYGRldl9ob2xkKHNrYi1cdTAwM2VkZXYpYCBjYWxsIHRvIGluY3JlYXNlIHRoZSByZWZjb3VudC4gVGhlbiwgd2l0aGluIHRoZSByZWluamVjdGlvbiBmdW5jdGlvbiwgd2UncmUgd3JhcHBpbmcgdGhlIHJlaW5qZWN0aW9uIGxvb3Agd2l0aCBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYC4gSW5zaWRlIHRoZSBsb29wLCBhIGxvY2FsIGBuZXRfZGV2aWNlYCB2YXJpYWJsZSwgaW5pdGlhbGl6ZWQgd2l0aCBgc2tiLVx1MDAzZWRldmAgZm9yIGVhc3kgdXNlLCBhbmQgYGRldl9wdXQoZGV2KWAgaXMgYWRkZWQgdG8gZGVjcmVtZW50IHRoZSByZWZjb3VudC4gVGhpcyBpcyBwcmVjaXNlbHkgd2hhdCBJIGV4cGVjdCB0byBzZWUgZm9yIHByb3BlciByZWZlcmVuY2UgY291bnRpbmcgb2YgdGhlIGRldmljZSBwb2ludGVyLCBwcmV2ZW50aW5nIGRvdWJsZSBmcmVlcyBvciB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MuXG5cblRoaXMgc2NyZWFtcyBvYmplY3QgbGlmZXRpbWUgY29uY2VybnMsIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmUncyBubyBpbnRyb2R1Y3Rpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaGVyZSwgbm9yIGFyZSB3ZSBleHBvc2luZyBhbnkuIFRoZSBjb25jZXJucyBoZXJlIGFyZSBhYm91dCBtYW5hZ2luZyB0aGUgbGlmZWN5Y2xlIG9mIHRoZSBgc2tiLVx1MDAzZWRldmAgcG9pbnRlciBhbmQgdGhlIFNLQiBpdHNlbGYsIGVuc3VyaW5nIHRoYXQgd2UgZG9uJ3QgdHJ5IHRvIGFjY2VzcyBpdCBhZnRlciBpdCdzIGJlZW4gZnJlZWQgb3IgYmVjb21lIGludmFsaWQuIEtBU0FOIGlzIHRoZSByaWdodCB0b29sIHRvIHRyYWNrIGFuZCBkaXNjb3ZlciBhbnkgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGJ1Z3MgaWYgcmVmZXJlbmNlIGNvdW50aW5nIGlzIHdyb25nLiBLTVNBTiBpcyBmb3IgY2F0Y2hpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLlxuXG5KdXN0IHRvIGJlIHRob3JvdWdoLCBJJ20gcXVpY2tseSBkb3VibGUtY2hlY2tpbmcgdGhlIGNvZGUgZGlmZi4gVGhlIGFzc2lnbm1lbnRzIHRvIGBYRlJNX1RSQU5TX1NLQl9DQihza2IpLVx1MDAzZWZpbmlzaGAgYW5kIGBYRlJNX1RSQU5TX1NLQl9DQihza2IpLVx1MDAzZW5ldGAgYXJlIHN0YW5kYXJkIHNldHVwIGNhbGxzLiBUaGVzZSBqdXN0IGFzc2lnbiB2YWx1ZXMgdG8gdGhlIFNLQidzIGNvbnRyb2wgYmxvY2ssIHNvIHRoZXJlJ3Mgbm90aGluZyBjb25jZXJuaW5nIHRoZXJlLlxuXG5HaXZlbiB0aGF0IHRoaXMgcGF0Y2ggaXMgc29sZWx5IGZvY3VzZWQgb24gZW5zdXJpbmcgY29ycmVjdCByZWZlcmVuY2UgY291bnRzIGFuZCBhdm9pZGluZyB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMsIGFuZCBJIGRvbid0IHNlZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlLCB0aGUgYE5lZWRzS01TQU5gIGZsYWcgaXMgZGVmaW5pdGVseSBmYWxzZSBoZXJlLiBUaGlzIGlzIHB1cmVseSBhYm91dCBvYmplY3QgbGlmZXRpbWUgYW5kIHJlZmVyZW5jZSBjb3VudGluZywgbm90IG1lbW9yeSBpbml0aWFsaXphdGlvbi4gSSdtIGNvbWZvcnRhYmxlIHNldHRpbmcgYE5lZWRzS01TQU4gPSBmYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMzgsIk91dHB1dFRva2VucyI6MjExLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzM4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjA6Mjc6MjguOTg2NjUyMDdaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBvYmplY3QgbGlmZXRpbWUgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMgZm9yIGBza2ItXFx1MDAzZWRldmAgYW5kIGBza2JfZHN0YCB3aGVuIGFuIGBza2JgIGlzIHF1ZXVlZCBmb3IgcmVpbmplY3Rpb24gaW4gdGhlIFhGUk0gc3Vic3lzdGVtLiBJdCBhZGRzIGBkZXZfaG9sZCgpYCBhbmQgYGRldl9wdXQoKWAgZm9yIHRoZSBuZXR3b3JrIGRldmljZSwgZm9yY2VzIHRoZSBkZXN0aW5hdGlvbiBlbnRyeSB2aWEgYHNrYl9kc3RfZm9yY2UoKWAsIGFuZCB3cmFwcyB0aGUgcmVpbmplY3Rpb24gbG9vcCBpbiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uIFRoZXNlIGNoYW5nZXMgYXJlIGRlc2lnbmVkIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgKFVBRikgb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgcmVsYXRlZCB0byBmcmVlZCBuZXR3b3JrIGRldmljZXMgb3IgZGVzdGluYXRpb24gZW50cmllcy4gU3VjaCBtZW1vcnkgY29ycnVwdGlvbiBhbmQgbGlmZXRpbWUgYnVncyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBidWZmZXIgbGVuZ3Rocywgb3IgZXhwb3NlIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgb2JqZWN0IGxpZmV0aW1lIGFuZCByZWZlcmVuY2UgY291bnRpbmcgaXNzdWVzIGZvciBgc2tiLVxcdTAwM2VkZXZgIGFuZCBgc2tiX2RzdGAgd2hlbiBhbiBgc2tiYCBpcyBxdWV1ZWQgZm9yIHJlaW5qZWN0aW9uIGluIHRoZSBYRlJNIHN1YnN5c3RlbS4gSXQgYWRkcyBgZGV2X2hvbGQoKWAgYW5kIGBkZXZfcHV0KClgIGZvciB0aGUgbmV0d29yayBkZXZpY2UsIGZvcmNlcyB0aGUgZGVzdGluYXRpb24gZW50cnkgdmlhIGBza2JfZHN0X2ZvcmNlKClgLCBhbmQgd3JhcHMgdGhlIHJlaW5qZWN0aW9uIGxvb3AgaW4gYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLiBUaGVzZSBjaGFuZ2VzIGFyZSBkZXNpZ25lZCB0byBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIChVQUYpIG9yIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIHJlbGF0ZWQgdG8gZnJlZWQgbmV0d29yayBkZXZpY2VzIG9yIGRlc3RpbmF0aW9uIGVudHJpZXMuIFN1Y2ggbWVtb3J5IGNvcnJ1cHRpb24gYW5kIGxpZmV0aW1lIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgYnVmZmVyIGxlbmd0aHMsIG9yIGV4cG9zZSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2k7t5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-07 20:02:47 +0000 UTC FinishedAt: 2026-08-07 20:27:29 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "594d905195024b228c962627ae5ae7c17bd582a4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM_USER", "INET_ESP", "INET_ESPINTCP", "INET6_ESP", "INET6_ESPINTCP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "594d905195024b228c962627ae5ae7c17bd582a4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM_USER", "INET_ESP", "INET_ESPINTCP", "INET6_ESP", "INET6_ESPINTCP" ], "series_id": "dfb76556-a39d-4d87-8a64-3ac9fd99e94b" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "xfrm_trans_queue_net", "xfrm_trans_queue", "xfrm_trans_reinject" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUElOVENQJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUNl9FU1BJTlRDUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hmcm1fdHJhbnNfcXVldWVfbmV0JiMzNDssCiAgICAmIzM0O3hmcm1fdHJhbnNfcXVldWUmIzM0OywKICAgICYjMzQ7eGZybV90cmFuc19yZWluamVjdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBvYmplY3QgbGlmZXRpbWUgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMgZm9yIGBza2ItXHUwMDNlZGV2YCBhbmQgYHNrYl9kc3RgIHdoZW4gYW4gYHNrYmAgaXMgcXVldWVkIGZvciByZWluamVjdGlvbiBpbiB0aGUgWEZSTSBzdWJzeXN0ZW0uIEl0IGFkZHMgYGRldl9ob2xkKClgIGFuZCBgZGV2X3B1dCgpYCBmb3IgdGhlIG5ldHdvcmsgZGV2aWNlLCBmb3JjZXMgdGhlIGRlc3RpbmF0aW9uIGVudHJ5IHZpYSBgc2tiX2RzdF9mb3JjZSgpYCwgYW5kIHdyYXBzIHRoZSByZWluamVjdGlvbiBsb29wIGluIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4gVGhlc2UgY2hhbmdlcyBhcmUgZGVzaWduZWQgdG8gcHJldmVudCB1c2UtYWZ0ZXItZnJlZSAoVUFGKSBvciBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyByZWxhdGVkIHRvIGZyZWVkIG5ldHdvcmsgZGV2aWNlcyBvciBkZXN0aW5hdGlvbiBlbnRyaWVzLiBTdWNoIG1lbW9yeSBjb3JydXB0aW9uIGFuZCBsaWZldGltZSBidWdzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGJ1ZmZlciBsZW5ndGhzLCBvciBleHBvc2UgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBYRlJNIHBhY2tldCBxdWV1ZWluZyBhbmQgcmVpbmplY3Rpb24gcGF0aHMgYnkgcHJvcGVybHkgaG9sZGluZyBhIHJlZmVyZW5jZSB0byBza2ItXHUwMDNlZGV2IGFuZCBlbnN1cmluZyBza2JfZHN0IGlzIHZhbGlkLiBUaGlzIG1vZGlmaWVzIGNvcmUgWEZSTSBwYWNrZXQgcHJvY2Vzc2luZyBsb2dpYyB3aGljaCBpcyByZWFjaGFibGUgZnJvbSBuZXR3b3JrIGlucHV0L291dHB1dCBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMDoyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDc5MjVhNmNlZTk5MDBmNWMyNmEyYjZhNGFmNjFhZWMyOTdlYzhlMDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDIwOjI2OjE4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1faW5wdXQuYyBiL25ldC94ZnJtL3hmcm1faW5wdXQuY1xuaW5kZXggZWVjYWIzMzdiZDBhNy4uOGY2MTA5ZWFkYTdlYSAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL3hmcm1faW5wdXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV9pbnB1dC5jXG5AQCAtODAwLDEyICYjNDM7ODAwLDE3IEBAIHN0YXRpYyB2b2lkIHhmcm1fdHJhbnNfcmVpbmplY3Qoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dHJhbnMtXHUwMDNlcXVldWVfbG9jayk7XG4gXG4gXHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuIFx0d2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKFx1MDAyNnF1ZXVlKSkpIHtcbiBcdFx0c3RydWN0IG5ldCAqbmV0ID0gWEZSTV9UUkFOU19TS0JfQ0Ioc2tiKS1cdTAwM2VuZXQ7XG4mIzQzO1x0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLVx1MDAzZWRldjtcbiBcbiBcdFx0WEZSTV9UUkFOU19TS0JfQ0Ioc2tiKS1cdTAwM2VmaW5pc2gobmV0LCBOVUxMLCBza2IpO1xuJiM0MztcdFx0aWYgKGRldilcbiYjNDM7XHRcdFx0ZGV2X3B1dChkZXYpO1xuIFx0XHRwdXRfbmV0KG5ldCk7XG4gXHR9XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRsb2NhbF9iaF9lbmFibGUoKTtcbiB9XG4gXG5AQCAtODIxLDEyICYjNDM7ODI2LDE4IEBAIGludCB4ZnJtX3RyYW5zX3F1ZXVlX25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoc2tiX3F1ZXVlX2xlbihcdTAwMjZ0cmFucy1cdTAwM2VxdWV1ZSkgXHUwMDNlPSBSRUFEX09OQ0UobmV0X2hvdGRhdGEubWF4X2JhY2tsb2cpKVxuIFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4gXG4mIzQzO1x0aWYgKHNrYl9kc3Qoc2tiKSBcdTAwMjZcdTAwMjYgIXNrYl9kc3RfZm9yY2Uoc2tiKSlcbiYjNDM7XHRcdHJldHVybiAtRUhPU1RVTlJFQUNIO1xuJiM0MztcbiBcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHhmcm1fdHJhbnNfY2IpIFx1MDAzZSBzaXplb2Yoc2tiLVx1MDAzZWNiKSk7XG4gXG4gXHRob2xkX25ldCA9IG1heWJlX2dldF9uZXQobmV0KTtcbiBcdGlmICghaG9sZF9uZXQpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuJiM0MztcdGlmIChza2ItXHUwMDNlZGV2KVxuJiM0MztcdFx0ZGV2X2hvbGQoc2tiLVx1MDAzZWRldik7XG4mIzQzO1xuIFx0WEZSTV9UUkFOU19TS0JfQ0Ioc2tiKS1cdTAwM2VmaW5pc2ggPSBmaW5pc2g7XG4gXHRYRlJNX1RSQU5TX1NLQl9DQihza2IpLVx1MDAzZW5ldCA9IGhvbGRfbmV0O1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnRyYW5zLVx1MDAzZXF1ZXVlX2xvY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjI2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlJNX1VTRVImIzM0OywKICAgICYjMzQ7SU5FVF9FU1AmIzM0OywKICAgICYjMzQ7SU5FVF9FU1BJTlRDUCYjMzQ7LAogICAgJiMzNDtJTkVUNl9FU1AmIzM0OywKICAgICYjMzQ7SU5FVDZfRVNQSU5UQ1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZnJtX3RyYW5zX3F1ZXVlX25ldCYjMzQ7LAogICAgJiMzNDt4ZnJtX3RyYW5zX3F1ZXVlJiMzNDssCiAgICAmIzM0O3hmcm1fdHJhbnNfcmVpbmplY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gWEZSTSBwYWNrZXQgcXVldWVpbmcgYW5kIHJlaW5qZWN0aW9uIHBhdGhzIGJ5IHByb3Blcmx5IGhvbGRpbmcgYSByZWZlcmVuY2UgdG8gc2tiLVx1MDAzZWRldiBhbmQgZW5zdXJpbmcgc2tiX2RzdCBpcyB2YWxpZC4gVGhpcyBtb2RpZmllcyBjb3JlIFhGUk0gcGFja2V0IHByb2Nlc3NpbmcgbG9naWMgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gbmV0d29yayBpbnB1dC9vdXRwdXQgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3OTI1YTZjZWU5OTAwZjVjMjZhMmI2YTRhZjYxYWVjMjk3ZWM4ZTA3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgNyAyMDoyNjoxOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1faW5wdXQuYyBiL25ldC94ZnJtL3hmcm1faW5wdXQuYwppbmRleCBlZWNhYjMzN2JkMGE3Li44ZjYxMDllYWRhN2VhIDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX2lucHV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV9pbnB1dC5jCkBAIC04MDAsMTIgJiM0Mzs4MDAsMTcgQEAgc3RhdGljIHZvaWQgeGZybV90cmFuc19yZWluamVjdChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJc3Bpbl91bmxvY2tfYmgoJmFtcDt0cmFucy0mZ3Q7cXVldWVfbG9jayk7CiAKIAlsb2NhbF9iaF9kaXNhYmxlKCk7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKIAl3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoJmFtcDtxdWV1ZSkpKSB7CiAJCXN0cnVjdCBuZXQgKm5ldCA9IFhGUk1fVFJBTlNfU0tCX0NCKHNrYiktJmd0O25ldDsKJiM0MzsJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBza2ItJmd0O2RldjsKIAogCQlYRlJNX1RSQU5TX1NLQl9DQihza2IpLSZndDtmaW5pc2gobmV0LCBOVUxMLCBza2IpOwomIzQzOwkJaWYgKGRldikKJiM0MzsJCQlkZXZfcHV0KGRldik7CiAJCXB1dF9uZXQobmV0KTsKIAl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogCWxvY2FsX2JoX2VuYWJsZSgpOwogfQogCkBAIC04MjEsMTIgJiM0Mzs4MjYsMTggQEAgaW50IHhmcm1fdHJhbnNfcXVldWVfbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlpZiAoc2tiX3F1ZXVlX2xlbigmYW1wO3RyYW5zLSZndDtxdWV1ZSkgJmd0Oz0gUkVBRF9PTkNFKG5ldF9ob3RkYXRhLm1heF9iYWNrbG9nKSkKIAkJcmV0dXJuIC1FTk9CVUZTOwogCiYjNDM7CWlmIChza2JfZHN0KHNrYikgJmFtcDsmYW1wOyAhc2tiX2RzdF9mb3JjZShza2IpKQomIzQzOwkJcmV0dXJuIC1FSE9TVFVOUkVBQ0g7CiYjNDM7CiAJQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgeGZybV90cmFuc19jYikgJmd0OyBzaXplb2Yoc2tiLSZndDtjYikpOwogCiAJaG9sZF9uZXQgPSBtYXliZV9nZXRfbmV0KG5ldCk7CiAJaWYgKCFob2xkX25ldCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKJiM0MzsJaWYgKHNrYi0mZ3Q7ZGV2KQomIzQzOwkJZGV2X2hvbGQoc2tiLSZndDtkZXYpOwomIzQzOwogCVhGUk1fVFJBTlNfU0tCX0NCKHNrYiktJmd0O2ZpbmlzaCA9IGZpbmlzaDsKIAlYRlJNX1RSQU5TX1NLQl9DQihza2IpLSZndDtuZXQgPSBob2xkX25ldDsKIAlzcGluX2xvY2tfYmgoJmFtcDt0cmFucy0mZ3Q7cXVldWVfbG9jayk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNDEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGF0Y2ggdG8gbmV0L3hmcm0veGZybV9pbnB1dC5jKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBzZWVtcyBsaWtlIHdlIGhhdmUgc29tZSBpbXBvcnRhbnQgbW9kaWZpY2F0aW9ucyB0byBgbmV0L3hmcm0veGZybV9pbnB1dC5jYC4gU3BlY2lmaWNhbGx5LCB0aGUgY29kZSB0b3VjaGVzIGJvdGggYHhmcm1fdHJhbnNfcmVpbmplY3RgIGFuZCBgeGZybV90cmFuc19xdWV1ZV9uZXRgLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgd2UmIzM5O3JlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZSwgbGlrZWx5IGEgdXNlLWFmdGVyLWZyZWUgb3Igc29tZXRoaW5nIHNpbWlsYXIgaW52b2x2aW5nIGBza2ItJmd0O2RldmAgYW5kIGBza2JfZHN0YCB3aXRoaW4gdGhlIFhGUk0gaW5wdXQgcHJvY2Vzc2luZyBwYXRoLgoKTGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIGNoYW5nZXM6IEluIGB4ZnJtX3RyYW5zX3JlaW5qZWN0YCwgdGhlIGludHJvZHVjdGlvbiBvZiBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYCBhcm91bmQgdGhlIHdoaWxlIGxvb3AgaXMgYSBrZXkgaW5kaWNhdG9yLiBJdCYjMzk7cyBwcm90ZWN0aW5nIHRoZSBkYXRhIGJlaW5nIGFjY2Vzc2VkIHdpdGhpbiB0aGUgbG9vcC4gRXh0cmFjdGluZyBgZGV2ID0gc2tiLSZndDtkZXZgIGFuZCBjYWxsaW5nIGBkZXZfcHV0KGRldilgIHdoZW4gYGRldmAgaXNuJiMzOTt0IG51bGwgYWxzbyBsb29rcyBsaWtlIGl0JiMzOTtzIGFkZHJlc3NpbmcgYSByZWZlcmVuY2UgY291bnRpbmcgaXNzdWUgdG8gZW5zdXJlIHRoZSBkZXZpY2UgaXMgcHJvcGVybHkgcmVsZWFzZWQuCgpOb3csIGluIGB4ZnJtX3RyYW5zX3F1ZXVlX25ldGAsIHRoZSBhZGRpdGlvbiBvZiBgaWYgKHNrYl9kc3Qoc2tiKSAmYW1wOyZhbXA7ICFza2JfZHN0X2ZvcmNlKHNrYikpIHJldHVybiAtRUhPU1RVTlJFQUNIO2Agc3VnZ2VzdHMgYSBjaGFuZ2UgaW4gaG93IHdlIGhhbmRsZSB1bnJlYWNoYWJsZSBkZXN0aW5hdGlvbnMgd2l0aGluIHRoYXQgcGF0aC4gTW9yZSBpbnRlcmVzdGluZ2x5LCBgaWYgKHNrYi0mZ3Q7ZGV2KSBkZXZfaG9sZChza2ItJmd0O2Rldik7YCBpcyB0aGVyZSB0byBidW1wIHRoZSBkZXZpY2UgcmVmZXJlbmNlIGNvdW50LiBJdCBzZWVtcyB0byBwYWlyIHdlbGwgd2l0aCB0aGUgYGRldl9wdXRgIGluIHRoZSBvdGhlciBmdW5jdGlvbi4KClNvLCB0aGlzIGxvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIHBhdGNoIHRvIG1lLCB0YXJnZXRpbmcgdGhlIFhGUk0gc3Vic3lzdGVtLiBJJiMzOTttIGdvaW5nIHRvIGRpZyBhIGxpdHRsZSBkZWVwZXIgbm93LiBJJiMzOTtsbCBmaXJlIHVwIGBncmVwcGVyYCBhbmQgc2VlIHdoYXQgY29uZmlnIG9wdGlvbnMgY29udHJvbCB0aGVzZSBmdW5jdGlvbnMsIGFuZCBJJiMzOTtsbCBkb3VibGUtY2hlY2sgdGhlIGV4YWN0IGNvbnRleHQgYXJvdW5kIHRoZXNlIGZ1bmN0aW9ucyB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSByb290IGNhdXNlIG9mIHRoZSBwcm9ibGVtIGFuZCBlbnN1cmUgdGhlIGZpeCBpcyBjb21wbGV0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX3RyYW5zX3F1ZXVlX25ldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2lucHV0LmM9NzkxPXN0YXRpYyB2b2lkIHhmcm1fdHJhbnNfcmVpbmplY3Qoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYy04MTYtXG5uZXQveGZybS94ZnJtX2lucHV0LmM6ODE3OmludCB4ZnJtX3RyYW5zX3F1ZXVlX25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQveGZybS94ZnJtX2lucHV0LmMtODE4LVx0XHRcdCBpbnQgKCpmaW5pc2gpKHN0cnVjdCBuZXQgKiwgc3RydWN0IHNvY2sgKixcbi0tXG5uZXQveGZybS94ZnJtX2lucHV0LmMtODQ4LX1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo4NDk6RVhQT1JUX1NZTUJPTCh4ZnJtX3RyYW5zX3F1ZXVlX25ldCk7XG5uZXQveGZybS94ZnJtX2lucHV0LmMtODUwLVxubmV0L3hmcm0veGZybV9pbnB1dC5jPTg1MT1pbnQgeGZybV90cmFuc19xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYy04NTQte1xubmV0L3hmcm0veGZybV9pbnB1dC5jOjg1NTpcdHJldHVybiB4ZnJtX3RyYW5zX3F1ZXVlX25ldChkZXZfbmV0KHNrYi1cdTAwM2VkZXYpLCBza2IsIGZpbmlzaCk7XG5uZXQveGZybS94ZnJtX2lucHV0LmMtODU2LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzg1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIGB4ZnJtX3RyYW5zX3F1ZXVlX25ldGAgYW5kIGB4ZnJtX3RyYW5zX3JlaW5qZWN0YCoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgdHdvIGZ1bmN0aW9ucywgYHhmcm1fdHJhbnNfcXVldWVfbmV0YCBhbmQgYHhmcm1fdHJhbnNfcmVpbmplY3RgLiBJbnRlcmVzdGluZy4gQW5kLCBvZiBjb3Vyc2UsIGB4ZnJtX3RyYW5zX3F1ZXVlX25ldGAgaXMgZXhwb3J0ZWQsIG1lYW5pbmcgaXQmIzM5O3MgaW50ZW5kZWQgZm9yIHVzZSBvdXRzaWRlIGl0cyBpbW1lZGlhdGUgbW9kdWxlLiBUaGF0IGFsd2F5cyBwaXF1ZXMgbXkgaW50ZXJlc3Qg4oCTIHdoYXQmIzM5O3MgdXNpbmcgaXQsIGFuZCBob3c/IEdpdmVuIHRoYXQgaXQmIzM5O3MgZXhwb3J0ZWQsIEkgc2hvdWxkIHJlYWxseSB1bmRlcnN0YW5kIGl0cyBicm9hZGVyIGltcGxpY2F0aW9ucyB3aXRoaW4gdGhlIHN5c3RlbS4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaXZlIGludG8gdGhlIGNvbmZpZ3VyYXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCBjb25maWcgb3B0aW9ucyBhcmUgcmVzcG9uc2libGUgZm9yIGVuYWJsaW5nIHRoZSBzb3VyY2UgZmlsZSwgd2hpY2ggSSBiZWxpZXZlIGlzIGBuZXQveGZybS94ZnJtX2lucHV0LmNgLiBUaGF0JiMzOTtsbCB0ZWxsIG1lIHRoZSBjb250ZXh0IGluIHdoaWNoIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXZlbiAqYXZhaWxhYmxlKiwgYW5kIHBvdGVudGlhbGx5IGdpdmUgbWUgc29tZSBjbHVlcyBhYm91dCB0aGVpciBwdXJwb3NlIHdpdGhpbiB0aGUgbGFyZ2VyIHhmcm0gZnJhbWV3b3JrLiBLbm93aW5nIHRoZSBjb25maWcgb3B0aW9ucyB3aWxsIGhlbHAgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWMgZGVwbG95bWVudCBzY2VuYXJpb3MgZm9yIHRoZXNlLiBXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGJlaW5nIGVuYWJsZWQsIGFuZCBpbiB3aGF0IGNvbnRleHQ/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjA6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9pbnB1dFxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0vTWFrZWZpbGU9MTQ9b2JqLSQoQ09ORklHX1hGUk0pIDo9IHhmcm1fcG9saWN5Lm8geGZybV9zdGF0ZS5vIHhmcm1faGFzaC5vIFxcXG5uZXQveGZybS9NYWtlZmlsZToxNTpcdFx0ICAgICAgeGZybV9pbnB1dC5vIHhmcm1fb3V0cHV0Lm8gXFxcbm5ldC94ZnJtL01ha2VmaWxlLTE2LVx0XHQgICAgICB4ZnJtX3N5c2N0bC5vIHhmcm1fcmVwbGF5Lm8geGZybV9kZXZpY2UubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MjYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBYRlJNIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCByZXZvbHZlcyBhcm91bmQgdGhlIGBDT05GSUdfWEZSTWAgY29uZmlndXJhdGlvbiBvcHRpb24uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuIEl0JiMzOTtzIGNydWNpYWwsIHdoZW4gZGVhbGluZyB3aXRoIGtlcm5lbCBjb25maWd1cmF0aW9uLCB0byBrbm93IHdoYXQgb3RoZXIgY29tcG9uZW50cyBvciBmZWF0dXJlcyB0aGlzIHNldHRpbmcgcmVsaWVzIHVwb24uIEtub3dpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIHdpbGwgaW5mb3JtIGFueSBkZWNpc2lvbnMgYWJvdXQgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGl0LCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgaXQgaGVscHMgaW4gdW5kZXJzdGFuZGluZyB0aGUgYnJvYWRlciBpbXBsaWNhdGlvbnMgb2YgaXRzIHVzZSB3aXRoaW4gdGhlIHN5c3RlbSYjMzk7cyBzZWN1cml0eSBhbmQgbmV0d29ya2luZyBhcmNoaXRlY3R1cmUuIFNvLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGVsdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgdHJhY2Ugd2hhdCBvdGhlciBzZXR0aW5ncyBgQ09ORklHX1hGUk1gIGlzIHRpZWQgdG8uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGhpZXJhcmNoeS4gVGhhdCB3YXkgSSBjYW4gbWFrZSBzb3VuZCBkZWNpc2lvbnMgYWJvdXQgdGhlIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWEZSTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnLTQtI1xubmV0L3hmcm0vS2NvbmZpZzo1OmNvbmZpZyBYRlJNXG5uZXQveGZybS9LY29uZmlnLTYtXHRib29sXG4tLVxubmV0L3hmcm0vS2NvbmZpZy0xMC1cbm5ldC94ZnJtL0tjb25maWc6MTE6Y29uZmlnIFhGUk1fT0ZGTE9BRFxubmV0L3hmcm0vS2NvbmZpZy0xMi1cdGJvb2xcbm5ldC94ZnJtL0tjb25maWctMTMtXG5uZXQveGZybS9LY29uZmlnOjE0OmNvbmZpZyBYRlJNX0FMR09cbm5ldC94ZnJtL0tjb25maWctMTUtXHR0cmlzdGF0ZVxuLS1cbm5ldC94ZnJtL0tjb25maWc9MjI9aWYgSU5FVFxubmV0L3hmcm0vS2NvbmZpZzoyMzpjb25maWcgWEZSTV9VU0VSXG5uZXQveGZybS9LY29uZmlnLTI0LVx0dHJpc3RhdGUgXCYjMzQ7VHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctMzEtXG5uZXQveGZybS9LY29uZmlnOjMyOmNvbmZpZyBYRlJNX1VTRVJfQ09NUEFUXG5uZXQveGZybS9LY29uZmlnLTMzLVx0dHJpc3RhdGUgXCYjMzQ7Q29tcGF0aWJsZSBBQkkgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctNDItXG5uZXQveGZybS9LY29uZmlnOjQzOmNvbmZpZyBYRlJNX0lOVEVSRkFDRVxubmV0L3hmcm0vS2NvbmZpZy00NC1cdHRyaXN0YXRlIFwmIzM0O1RyYW5zZm9ybWF0aW9uIHZpcnR1YWwgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy01MC1cbm5ldC94ZnJtL0tjb25maWc6NTE6Y29uZmlnIFhGUk1fU1VCX1BPTElDWVxubmV0L3hmcm0vS2NvbmZpZy01Mi1cdGJvb2wgXCYjMzQ7VHJhbnNmb3JtYXRpb24gc3ViIHBvbGljeSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy02MC1cbm5ldC94ZnJtL0tjb25maWc6NjE6Y29uZmlnIFhGUk1fTUlHUkFURVxubmV0L3hmcm0vS2NvbmZpZy02Mi1cdGJvb2wgXCYjMzQ7VHJhbnNmb3JtYXRpb24gbWlncmF0ZSBkYXRhYmFzZVwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctNzEtXG5uZXQveGZybS9LY29uZmlnOjcyOmNvbmZpZyBYRlJNX1NUQVRJU1RJQ1Ncbm5ldC94ZnJtL0tjb25maWctNzMtXHRib29sIFwmIzM0O1RyYW5zZm9ybWF0aW9uIHN0YXRpc3RpY3NcJiMzNDtcbi0tXG5uZXQveGZybS9LY29uZmlnLTgzLSMgUkZDIDgyMjEgbGlzdHMgYXMgTVVTVCBiZSBpbXBsZW1lbnRlZC5cbm5ldC94ZnJtL0tjb25maWc6ODQ6Y29uZmlnIFhGUk1fQUhcbm5ldC94ZnJtL0tjb25maWctODUtXHR0cmlzdGF0ZVxuLS1cbm5ldC94ZnJtL0tjb25maWctOTItIyBhbGdvcml0aG1zIHRoYXQgUkZDIDgyMjEgbGlzdHMgYXMgTVVTVCBiZSBpbXBsZW1lbnRlZC5cbm5ldC94ZnJtL0tjb25maWc6OTM6Y29uZmlnIFhGUk1fRVNQXG5uZXQveGZybS9LY29uZmlnLTk0LVx0dHJpc3RhdGVcbi0tXG5uZXQveGZybS9LY29uZmlnLTEwNS1cbm5ldC94ZnJtL0tjb25maWc6MTA2OmNvbmZpZyBYRlJNX0lQQ09NUFxubmV0L3hmcm0vS2NvbmZpZy0xMDctXHR0cmlzdGF0ZVxuLS1cbm5ldC94ZnJtL0tjb25maWc9MTI1PWNvbmZpZyBORVRfS0VZX01JR1JBVEVcbi0tXG5uZXQveGZybS9LY29uZmlnLTE0MC1cbm5ldC94ZnJtL0tjb25maWc6MTQxOmNvbmZpZyBYRlJNX0lQVEZTXG5uZXQveGZybS9LY29uZmlnLTE0Mi1cdHRyaXN0YXRlIFwmIzM0O0lQc2VjIElQLVRGUy9BR0dGUkFHIChSRkMgOTM0NykgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy0xNTYtXG5uZXQveGZybS9LY29uZmlnOjE1Nzpjb25maWcgWEZSTV9FU1BJTlRDUFxubmV0L3hmcm0vS2NvbmZpZy0xNTgtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjA6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg0NAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIFhGUk0qKgoKT2theSwgc28gYFhGUk1gIGlzIGEgYm9vbGVhbiBjb25maWd1cmF0aW9uIG9wdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBwcm9iYWJseSAqc2VsZWN0ZWQqIGJ5IGEgbnVtYmVyIG9mIG90aGVyIG9wdGlvbnMsIHRoaW5ncyBsaWtlIGBJTkVUYCwgYFhGUk1fVVNFUmAsIG1heWJlIGBJTkVUX0VTUGAsIHRoYXQga2luZCBvZiB0aGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBoZXJlLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgaW50byB3aGF0IGV4YWN0bHkgdHJpZ2dlcnMgdGhlIGVuYWJsaW5nIG9mIGBYRlJNYC4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSBgWEZSTWAgYW5kIHNlZSB3aGF0IHRoZSB1cHN0cmVhbSBvcHRpb25zIGFyZS4gVW5kZXJzdGFuZGluZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCBmb3IgYSByb2J1c3QgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjA6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IFhGUk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWc9MzA0PWNvbmZpZyBORVRfSVBWVElcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTMwNy1cdHNlbGVjdCBORVRfSVBfVFVOTkVMXG5uZXQvaXB2NC9LY29uZmlnOjMwODpcdHNlbGVjdCBYRlJNXG5uZXQvaXB2NC9LY29uZmlnLTMwOS1cdGhlbHBcbi0tXG5uZXQvaXB2NC9LY29uZmlnPTMzOT1jb25maWcgSU5FVF9BSFxubmV0L2lwdjQvS2NvbmZpZy0zNDAtXHR0cmlzdGF0ZSBcJiMzNDtJUDogQUggdHJhbnNmb3JtYXRpb25cJiMzNDtcbm5ldC9pcHY0L0tjb25maWc6MzQxOlx0c2VsZWN0IFhGUk1fQUhcbm5ldC9pcHY0L0tjb25maWctMzQyLVx0aGVscFxuLS1cbm5ldC9pcHY0L0tjb25maWc9MzU0PWNvbmZpZyBJTkVUX0VTUFxubmV0L2lwdjQvS2NvbmZpZy0zNTUtXHR0cmlzdGF0ZSBcJiMzNDtJUDogRVNQIHRyYW5zZm9ybWF0aW9uXCYjMzQ7XG5uZXQvaXB2NC9LY29uZmlnOjM1NjpcdHNlbGVjdCBYRlJNX0VTUFxubmV0L2lwdjQvS2NvbmZpZy0zNTctXHRoZWxwXG4tLVxubmV0L2lwdjQvS2NvbmZpZz0zNjk9Y29uZmlnIElORVRfRVNQX09GRkxPQURcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM3MS1cdGRlcGVuZHMgb24gSU5FVF9FU1Bcbm5ldC9pcHY0L0tjb25maWc6MzcyOlx0c2VsZWN0IFhGUk1fT0ZGTE9BRFxubmV0L2lwdjQvS2NvbmZpZy0zNzMtXHRkZWZhdWx0IG5cbi0tXG5uZXQvaXB2NC9LY29uZmlnPTM4Mj1jb25maWcgSU5FVF9FU1BJTlRDUFxuLS1cbm5ldC9pcHY0L0tjb25maWctMzg2LVx0c2VsZWN0IE5FVF9TT0NLX01TR1xubmV0L2lwdjQvS2NvbmZpZzozODc6XHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxubmV0L2lwdjQvS2NvbmZpZy0zODgtXHRoZWxwXG4tLVxubmV0L2lwdjQvS2NvbmZpZz0zOTQ9Y29uZmlnIElORVRfSVBDT01QXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zOTYtXHRzZWxlY3QgSU5FVF9YRlJNX1RVTk5FTFxubmV0L2lwdjQvS2NvbmZpZzozOTc6XHRzZWxlY3QgWEZSTV9JUENPTVBcbm5ldC9pcHY0L0tjb25maWctMzk4LVx0aGVscFxuLS1cbm5ldC9pcHY2L0tjb25maWc9NDc9Y29uZmlnIElORVQ2X0FIXG5uZXQvaXB2Ni9LY29uZmlnLTQ4LVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogQUggdHJhbnNmb3JtYXRpb25cJiMzNDtcbm5ldC9pcHY2L0tjb25maWc6NDk6XHRzZWxlY3QgWEZSTV9BSFxubmV0L2lwdjYvS2NvbmZpZy01MC1cdGhlbHBcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTYyPWNvbmZpZyBJTkVUNl9FU1Bcbm5ldC9pcHY2L0tjb25maWctNjMtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBFU1AgdHJhbnNmb3JtYXRpb25cJiMzNDtcbm5ldC9pcHY2L0tjb25maWc6NjQ6XHRzZWxlY3QgWEZSTV9FU1Bcbm5ldC9pcHY2L0tjb25maWctNjUtXHRoZWxwXG4tLVxubmV0L2lwdjYvS2NvbmZpZz03Nz1jb25maWcgSU5FVDZfRVNQX09GRkxPQURcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTc5LVx0ZGVwZW5kcyBvbiBJTkVUNl9FU1Bcbm5ldC9pcHY2L0tjb25maWc6ODA6XHRzZWxlY3QgWEZSTV9PRkZMT0FEXG5uZXQvaXB2Ni9LY29uZmlnLTgxLVx0ZGVmYXVsdCBuXG4tLVxubmV0L2lwdjYvS2NvbmZpZz05MD1jb25maWcgSU5FVDZfRVNQSU5UQ1Bcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTk0LVx0c2VsZWN0IE5FVF9TT0NLX01TR1xubmV0L2lwdjYvS2NvbmZpZzo5NTpcdHNlbGVjdCBYRlJNX0VTUElOVENQXG5uZXQvaXB2Ni9LY29uZmlnLTk2LVx0aGVscFxuLS1cbm5ldC9pcHY2L0tjb25maWc9MTAyPWNvbmZpZyBJTkVUNl9JUENPTVBcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTEwNC1cdHNlbGVjdCBJTkVUNl9YRlJNX1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZzoxMDU6XHRzZWxlY3QgWEZSTV9JUENPTVBcbm5ldC9pcHY2L0tjb25maWctMTA2LVx0aGVscFxuLS1cbm5ldC9pcHY2L0tjb25maWc9MTEyPWNvbmZpZyBJUFY2X01JUDZcbm5ldC9pcHY2L0tjb25maWctMTEzLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogTW9iaWxpdHlcJiMzNDtcbm5ldC9pcHY2L0tjb25maWc6MTE0Olx0c2VsZWN0IFhGUk1cbm5ldC9pcHY2L0tjb25maWctMTE1LVx0aGVscFxuLS1cbm5ldC9pcHY2L0tjb25maWc9MTUwPWNvbmZpZyBJUFY2X1ZUSVxuLS1cbm5ldC9pcHY2L0tjb25maWctMTUzLVx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcbm5ldC9pcHY2L0tjb25maWc6MTU0Olx0c2VsZWN0IFhGUk1cbm5ldC9pcHY2L0tjb25maWctMTU1LVx0aGVscFxuLS1cbm5ldC94ZnJtL0tjb25maWc9MTQ9Y29uZmlnIFhGUk1fQUxHT1xubmV0L3hmcm0vS2NvbmZpZy0xNS1cdHRyaXN0YXRlXG5uZXQveGZybS9LY29uZmlnOjE2Olx0c2VsZWN0IFhGUk1cbm5ldC94ZnJtL0tjb25maWctMTctXHRzZWxlY3QgQ1JZUFRPXG4tLVxubmV0L3hmcm0vS2NvbmZpZz0yMz1jb25maWcgWEZSTV9VU0VSXG5uZXQveGZybS9LY29uZmlnLTI0LVx0dHJpc3RhdGUgXCYjMzQ7VHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVwmIzM0O1xubmV0L3hmcm0vS2NvbmZpZzoyNTpcdHNlbGVjdCBYRlJNX0FMR09cbm5ldC94ZnJtL0tjb25maWctMjYtXHRoZWxwXG4tLVxubmV0L3hmcm0vS2NvbmZpZz04ND1jb25maWcgWEZSTV9BSFxubmV0L3hmcm0vS2NvbmZpZy04NS1cdHRyaXN0YXRlXG5uZXQveGZybS9LY29uZmlnOjg2Olx0c2VsZWN0IFhGUk1fQUxHT1xubmV0L3hmcm0vS2NvbmZpZy04Ny1cdHNlbGVjdCBDUllQVE9cbi0tXG5uZXQveGZybS9LY29uZmlnPTkzPWNvbmZpZyBYRlJNX0VTUFxubmV0L3hmcm0vS2NvbmZpZy05NC1cdHRyaXN0YXRlXG5uZXQveGZybS9LY29uZmlnOjk1Olx0c2VsZWN0IFhGUk1fQUxHT1xubmV0L3hmcm0vS2NvbmZpZy05Ni1cdHNlbGVjdCBDUllQVE9cbi0tXG5uZXQveGZybS9LY29uZmlnPTEwNj1jb25maWcgWEZSTV9JUENPTVBcbm5ldC94ZnJtL0tjb25maWctMTA3LVx0dHJpc3RhdGVcbm5ldC94ZnJtL0tjb25maWc6MTA4Olx0c2VsZWN0IFhGUk1fQUxHT1xubmV0L3hmcm0vS2NvbmZpZy0xMDktXHRzZWxlY3QgQ1JZUFRPXG4tLVxubmV0L3hmcm0vS2NvbmZpZz0xMTI9Y29uZmlnIE5FVF9LRVlcbm5ldC94ZnJtL0tjb25maWctMTEzLVx0dHJpc3RhdGUgXCYjMzQ7UEZfS0VZIHNvY2tldHMgKGRlcHJlY2F0ZWQpXCYjMzQ7XG5uZXQveGZybS9LY29uZmlnOjExNDpcdHNlbGVjdCBYRlJNX0FMR09cbm5ldC94ZnJtL0tjb25maWctMTE1LVx0aGVscFxuLS1cbm5ldC94ZnJtL0tjb25maWc9MTI1PWNvbmZpZyBORVRfS0VZX01JR1JBVEVcbi0tXG5uZXQveGZybS9LY29uZmlnLTEyNy1cdGRlcGVuZHMgb24gTkVUX0tFWVxubmV0L3hmcm0vS2NvbmZpZzoxMjg6XHRzZWxlY3QgWEZSTV9NSUdSQVRFXG5uZXQveGZybS9LY29uZmlnLTEyOS1cdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjA6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjYwNwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDExNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipYRlJNIE1vZHVsZSBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgWEZSTSBzdHVmZiwgYW5kIGl0IGxvb2tzIGxpa2UgZW5hYmxpbmcgYENPTkZJR19YRlJNX1VTRVJgIGlzIHRoZSBrZXkgdG8gZ2V0dGluZyBYRlJNIHVwIGFuZCBydW5uaW5nLCBsaWtlbHkgYWxvbmdzaWRlIGVpdGhlciBgQ09ORklHX0lORVRfRVNQYCBvciBgQ09ORklHX0lORVRfQUhgLiBTZWVtcyBsaWtlIGBYRlJNX1VTRVJgIGlzIHRoZSB3YXkgdG8gZ28gaGVyZS4gSSYjMzk7bGwgc3RpY2sgd2l0aCB0aGF0LgoKSSBzZWUgdGhhdCB0aGUgY2hhbmdlcyBhcmUgaGl0dGluZyBgeGZybV90cmFuc19yZWluamVjdGAgYW5kIGB4ZnJtX3RyYW5zX3F1ZXVlX25ldGAuIGB4ZnJtX3RyYW5zX3F1ZXVlX25ldGAgaXMgY2FsbGVkIGJ5IGB4ZnJtX3RyYW5zX3F1ZXVlYCwgd2hpY2ggc3VnZ2VzdHMgdGhlcmUmIzM5O3Mgc29tZSBzb3J0IG9mIHF1ZXVpbmcgcHJvY2VzcyBpbnZvbHZlZC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIGNvbnRleHQuIExldCYjMzk7cyB0cmFjZSBiYWNrIHdoZXJlIGB4ZnJtX3RyYW5zX3F1ZXVlYCBpcyBiZWluZyBjYWxsZWQgZnJvbSB0byBncmFzcCB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX3RyYW5zX3F1ZXVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1faW5wdXQuYz03OTE9c3RhdGljIHZvaWQgeGZybV90cmFuc19yZWluamVjdChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L3hmcm0veGZybV9pbnB1dC5jLTgxNi1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo4MTc6aW50IHhmcm1fdHJhbnNfcXVldWVfbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy04MTgtXHRcdFx0IGludCAoKmZpbmlzaCkoc3RydWN0IG5ldCAqLCBzdHJ1Y3Qgc29jayAqLFxuLS1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYy04NDgtfVxubmV0L3hmcm0veGZybV9pbnB1dC5jOjg0OTpFWFBPUlRfU1lNQk9MKHhmcm1fdHJhbnNfcXVldWVfbmV0KTtcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy04NTAtXG5uZXQveGZybS94ZnJtX2lucHV0LmM6ODUxOmludCB4ZnJtX3RyYW5zX3F1ZXVlKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQveGZybS94ZnJtX2lucHV0LmMtODUyLVx0XHQgICAgIGludCAoKmZpbmlzaCkoc3RydWN0IG5ldCAqLCBzdHJ1Y3Qgc29jayAqLFxuLS1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYy04NTQte1xubmV0L3hmcm0veGZybV9pbnB1dC5jOjg1NTpcdHJldHVybiB4ZnJtX3RyYW5zX3F1ZXVlX25ldChkZXZfbmV0KHNrYi1cdTAwM2VkZXYpLCBza2IsIGZpbmlzaCk7XG5uZXQveGZybS94ZnJtX2lucHV0LmMtODU2LX1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo4NTc6RVhQT1JUX1NZTUJPTCh4ZnJtX3RyYW5zX3F1ZXVlKTtcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy04NTgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczMjEKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIHNlYXJjaDoKCioqRGl2aW5nIGludG8gdGhlIENvZGViYXNlOiBUaGUgeGZybV90cmFuc19xdWV1ZSBIdW50KioKCk9rYXksIHRpbWUgdG8gZ2V0IGRpZ2dpbmcuIEkgbmVlZCB0byBmaW5kIGFsbCBpbnN0YW5jZXMgb2YgYHhmcm1fdHJhbnNfcXVldWVgIHdpdGhpbiB0aGlzIGVudGlyZSBjb2RlYmFzZS4gVGhpcyBsaWtlbHkgcmVsYXRlcyB0byBob3cgSVBzZWMgdHJhbnNmb3JtcyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IGhvdyBwYWNrZXRzIGFyZSBxdWV1ZWQgZm9yIHByb2Nlc3NpbmcuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCBpdCBpcyBub3QgdXNlZCBpbiBhIGxvdCBvZiBwbGFjZXMgYmVjYXVzZSBJIGhhdmUgbm90IHdvcmtlZCB3aXRoIGl0IGJlZm9yZS4gSSYjMzk7bGwgbmVlZCB0byB1c2UgbXkgdXN1YWwgc2VhcmNoIHRvb2xzIGFuZCBsb29rIGluIGFsbCBmaWxlcy4gVGltZSB0byBydW4gYSBnbG9iYWwgc2VhcmNoLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdHVybnMgdXAuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgaXQgaW4gdGhlIGNvcmUgdHJhbnNmb3JtIGNvZGUsIHBlcmhhcHMgYXJvdW5kIHRoZSBuZXR3b3JraW5nIHN0YWNrLCBhbmQgbWF5YmUgaW4gc29tZSBzcGVjaWZpYyBkZXZpY2UgZHJpdmVycyBpZiB0aGV5JiMzOTtyZSBkaXJlY3RseSBpbnZvbHZlZCBpbiBvZmZsb2FkaW5nIG9yIG1hbmlwdWxhdGluZyB0aGVzZSB0cmFuc2Zvcm0gcXVldWVzLiBJJiMzOTttIGFsc28gY3VyaW91cyB0byBzZWUgaWYgaXQmIzM5O3MgdXNlZCB3aXRoIGFueSBzcGVjaWZpYyBjcnlwdG8gaGFyZHdhcmUgb3Igd2hldGhlciBpdCYjMzk7cyBtb3JlIGdlbmVyYWwgcHVycG9zZS4gTGV0JiMzOTtzIGdldCB0byBpdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjA6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV90cmFuc19xdWV1ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC94ZnJtLmg9MTc5OT1pbnQgeGZybV9pbnB1dF9yZXN1bWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIpO1xuaW5jbHVkZS9uZXQveGZybS5oOjE4MDA6aW50IHhmcm1fdHJhbnNfcXVldWVfbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmluY2x1ZGUvbmV0L3hmcm0uaC0xODAxLVx0XHRcdCBpbnQgKCpmaW5pc2gpKHN0cnVjdCBuZXQgKiwgc3RydWN0IHNvY2sgKixcbmluY2x1ZGUvbmV0L3hmcm0uaC0xODAyLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICopKTtcbmluY2x1ZGUvbmV0L3hmcm0uaDoxODAzOmludCB4ZnJtX3RyYW5zX3F1ZXVlKHN0cnVjdCBza19idWZmICpza2IsXG5pbmNsdWRlL25ldC94ZnJtLmgtMTgwNC1cdFx0ICAgICBpbnQgKCpmaW5pc2gpKHN0cnVjdCBuZXQgKiwgc3RydWN0IHNvY2sgKixcbi0tXG5uZXQvaXB2NC9lc3A0LmM9MTg4PXN0YXRpYyBpbnQgZXNwX291dHB1dF90YWlsX3RjcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9lc3A0LmMtMTkyLVx0bG9jYWxfYmhfZGlzYWJsZSgpO1xubmV0L2lwdjQvZXNwNC5jOjE5MzpcdGVyciA9IHhmcm1fdHJhbnNfcXVldWVfbmV0KHhzX25ldCh4KSwgc2tiLCBlc3Bfb3V0cHV0X3RjcF9lbmNhcF9jYik7XG5uZXQvaXB2NC9lc3A0LmMtMTk0LVx0bG9jYWxfYmhfZW5hYmxlKCk7XG4tLVxubmV0L2lwdjQveGZybTRfaW5wdXQuYz0yOT1zdGF0aWMgaW5saW5lIGludCB4ZnJtNF9yY3ZfZW5jYXBfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L3hmcm00X2lucHV0LmMtMzktXG5uZXQvaXB2NC94ZnJtNF9pbnB1dC5jOjQwOlx0aWYgKHhmcm1fdHJhbnNfcXVldWUoc2tiLCB4ZnJtNF9yY3ZfZW5jYXBfZmluaXNoMikpXG5uZXQvaXB2NC94ZnJtNF9pbnB1dC5jLTQxLVx0XHRnb3RvIGRyb3A7XG4tLVxubmV0L2lwdjYvZXNwNi5jPTIwNT1zdGF0aWMgaW50IGVzcF9vdXRwdXRfdGFpbF90Y3Aoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvZXNwNi5jLTIwOS1cdGxvY2FsX2JoX2Rpc2FibGUoKTtcbm5ldC9pcHY2L2VzcDYuYzoyMTA6XHRlcnIgPSB4ZnJtX3RyYW5zX3F1ZXVlX25ldCh4c19uZXQoeCksIHNrYiwgZXNwX291dHB1dF90Y3BfZW5jYXBfY2IpO1xubmV0L2lwdjYvZXNwNi5jLTIxMS1cdGxvY2FsX2JoX2VuYWJsZSgpO1xuLS1cbm5ldC9pcHY2L3hmcm02X2lucHV0LmM9MzI9c3RhdGljIGludCB4ZnJtNl90cmFuc3BvcnRfZmluaXNoMihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jLTM0LXtcbm5ldC9pcHY2L3hmcm02X2lucHV0LmM6MzU6XHRpZiAoeGZybV90cmFuc19xdWV1ZShza2IsIGlwNl9yY3ZfZmluaXNoKSkge1xubmV0L2lwdjYveGZybTZfaW5wdXQuYy0zNi1cdFx0a2ZyZWVfc2tiKHNrYik7XG4tLVxubmV0L3hmcm0veGZybV9pbnB1dC5jPTc5MT1zdGF0aWMgdm9pZCB4ZnJtX3RyYW5zX3JlaW5qZWN0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQveGZybS94ZnJtX2lucHV0LmMtODE2LVxubmV0L3hmcm0veGZybV9pbnB1dC5jOjgxNzppbnQgeGZybV90cmFuc19xdWV1ZV9uZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTgxOC1cdFx0XHQgaW50ICgqZmluaXNoKShzdHJ1Y3QgbmV0ICosIHN0cnVjdCBzb2NrICosXG4tLVxubmV0L3hmcm0veGZybV9pbnB1dC5jLTg0OC19XG5uZXQveGZybS94ZnJtX2lucHV0LmM6ODQ5OkVYUE9SVF9TWU1CT0woeGZybV90cmFuc19xdWV1ZV9uZXQpO1xubmV0L3hmcm0veGZybV9pbnB1dC5jLTg1MC1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo4NTE6aW50IHhmcm1fdHJhbnNfcXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy04NTItXHRcdCAgICAgaW50ICgqZmluaXNoKShzdHJ1Y3QgbmV0ICosIHN0cnVjdCBzb2NrICosXG4tLVxubmV0L3hmcm0veGZybV9pbnB1dC5jLTg1NC17XG5uZXQveGZybS94ZnJtX2lucHV0LmM6ODU1Olx0cmV0dXJuIHhmcm1fdHJhbnNfcXVldWVfbmV0KGRldl9uZXQoc2tiLVx1MDAzZWRldiksIHNrYiwgZmluaXNoKTtcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy04NTYtfVxubmV0L3hmcm0veGZybV9pbnB1dC5jOjg1NzpFWFBPUlRfU1lNQk9MKHhmcm1fdHJhbnNfcXVldWUpO1xubmV0L3hmcm0veGZybV9pbnB1dC5jLTg1OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjA6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY2NgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipUcmFjaW5nIHRoZSBDYWxscyB0byBgeGZybV90cmFuc19xdWV1ZWAgYW5kIGB4ZnJtX3RyYW5zX3F1ZXVlX25ldGAqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlc2UgZnVuY3Rpb25zLCBgeGZybV90cmFuc19xdWV1ZV9uZXRgIGFuZCBgeGZybV90cmFuc19xdWV1ZWAuIEkga25vdyB0aGV5JiMzOTtyZSBhY2Nlc3NpYmxlIGZyb20gYSBmZXcga2V5IHBsYWNlczogYGVzcF9vdXRwdXRfdGFpbF90Y3BgLCB3aGljaCBzZWVtcyB0byBiZSB0aWVkIHRvIGVpdGhlciBgQ09ORklHX0lORVRfRVNQSU5UQ1BgIG9yIGBDT05GSUdfSU5FVDZfRVNQSU5UQ1BgLCBkZXBlbmRpbmcgb24gdGhlIElQdjQvSVB2NiBjb250ZXh0LCBhbmQgYWxzbyBmcm9tICBgeGZybTRfcmN2X2VuY2FwX2ZpbmlzaGAgYW5kIGB4ZnJtNl90cmFuc3BvcnRfZmluaXNoMmAuCgpSaWdodCwgbGV0JiMzOTtzIGp1c3QgY29uZmlybSB0aG9zZSBjb25maWcgb3B0aW9ucyBmaXJzdC4gTG9va3MgbGlrZSBib3RoIGBDT05GSUdfSU5FVF9FU1BJTlRDUGAgYW5kIGBDT05GSUdfSU5FVDZfRVNQSU5UQ1BgIHNlbGVjdCBgWEZSTV9FU1BJTlRDUGAsIHdoaWNoIGlzIHdoYXQgSSBzdXNwZWN0ZWQuIEdvb2QuIAoKTm93LCBmb2N1c2luZyBvbiBgeGZybTRfcmN2X2VuY2FwX2ZpbmlzaGAsIEkgcmVtZW1iZXIgdGhhdCBpdCYjMzk7cyB3aXRoaW4gYHhmcm00X2lucHV0LmNgLiBUaGF0IGZpbGUmIzM5O3MgYnVpbGQgcHJvY2VzcyByZWxpZXMgb24gYENPTkZJR19YRlJNYCwgc28gSSYjMzk7bGwgY2hlY2sgYG5ldC9pcHY0L01ha2VmaWxlYCB0byBjb25maXJtIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtNF9pbnB1dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZT02NT1vYmotJChDT05GSUdfTkVUTEFCRUwpICYjNDM7PSBjaXBzb19pcHY0Lm9cbm5ldC9pcHY0L01ha2VmaWxlLTY2LVxubmV0L2lwdjQvTWFrZWZpbGU6Njc6b2JqLSQoQ09ORklHX1hGUk0pICYjNDM7PSB4ZnJtNF9wb2xpY3kubyB4ZnJtNF9zdGF0ZS5vIHhmcm00X2lucHV0Lm8gXFxcbm5ldC9pcHY0L01ha2VmaWxlLTY4LVx0XHQgICAgICB4ZnJtNF9vdXRwdXQubyB4ZnJtNF9wcm90b2NvbC5vXG4tLVxubmV0L2lwdjQveGZybTRfaW5wdXQuYy0yLS8qXG5uZXQvaXB2NC94ZnJtNF9pbnB1dC5jOjM6ICogeGZybTRfaW5wdXQuY1xubmV0L2lwdjQveGZybTRfaW5wdXQuYy00LSAqXG4tLVxubmV0L2lwdjQveGZybTRfcHJvdG9jb2wuYz0xOTI9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfcHJvdG9jb2wgaXBjb21wNF9wcm90b2NvbCA9IHtcbi0tXG5uZXQvaXB2NC94ZnJtNF9wcm90b2NvbC5jLTE5Ny1cbm5ldC9pcHY0L3hmcm00X3Byb3RvY29sLmM6MTk4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9pbnB1dF9hZmluZm8geGZybTRfaW5wdXRfYWZpbmZvID0ge1xubmV0L2lwdjQveGZybTRfcHJvdG9jb2wuYy0xOTktXHQuZmFtaWx5XHRcdD1cdEFGX0lORVQsXG4tLVxubmV0L2lwdjQveGZybTRfcHJvdG9jb2wuYz0zMDM9dm9pZCBfX2luaXQgeGZybTRfcHJvdG9jb2xfaW5pdCh2b2lkKVxubmV0L2lwdjQveGZybTRfcHJvdG9jb2wuYy0zMDQte1xubmV0L2lwdjQveGZybTRfcHJvdG9jb2wuYzozMDU6XHR4ZnJtX2lucHV0X3JlZ2lzdGVyX2FmaW5mbyhcdTAwMjZ4ZnJtNF9pbnB1dF9hZmluZm8pO1xubmV0L2lwdjQveGZybTRfcHJvdG9jb2wuYy0zMDYtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTM1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlhGUk0gU3Vic3lzdGVtIEJ1ZyBGaXggYW5kIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldHMqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IHNlZW1zIHRvIGJlIHRhcmdldGluZyBgeGZybTRfaW5wdXQuY2AuIFRoYXQgZmlsZSYjMzk7cyBidWlsdCB3aGVuIGBDT05GSUdfWEZSTWAgaXMgZW5hYmxlZCwgd2hpY2ggaXMgdGhlIGZvdW5kYXRpb25hbCBwYXJ0IG9mIHRoZSBYRlJNIHN1YnN5c3RlbSwgc28gdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0byBwYXkgYXR0ZW50aW9uIHRvLgoKVGhlIGNvcmUgb2YgdGhlIGlzc3VlIHNlZW1zIHRvIGNlbnRlciBhcm91bmQgdGhlIGZ1bmN0aW9ucyBgeGZybV90cmFuc19xdWV1ZV9uZXRgIGFuZCBgeGZybV90cmFuc19xdWV1ZWAuIFRoZXNlIGFyZSBkZWZpbml0ZWx5IHJlYWNoYWJsZSBkdXJpbmcgc3RhbmRhcmQgWEZSTSBwcm9jZXNzaW5nIOKAkyBJIGNhbiB0cmFjZSB0aGVtIGluIG15IG1pbmQmIzM5O3MgZXllIHRocm91Z2ggdGhlIGRhdGEgcGF0aHMuIFRoZSBwYXRjaCBpdHNlbGYgaXMgZml4aW5nIGEgYnVnIHdpdGhpbiB0aG9zZSB0d28gZnVuY3Rpb25zIGFuZCBhbHNvIGB4ZnJtX3RyYW5zX3JlaW5qZWN0YC4gVGhlIGZpeCBpbnZvbHZlcyB0YWtpbmcgYSByZWZlcmVuY2UgdG8gYHNrYi0mZ3Q7ZGV2YCBhbmQgZW5zdXJpbmcgdGhlIHZhbGlkaXR5IG9mIGBza2JfZHN0YC4gTWFrZXMgc2Vuc2UsIHByb3RlY3RpbmcgYWdhaW5zdCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zIHdpdGggdGhlIHNvY2tldCBidWZmZXIgYW5kIGRldmljZSBpbnRlcmFjdGlvbnMsIGEgY29tbW9uIGlzc3VlIGluIG5ldHdvcmtpbmcgY29kZS4KClRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIFhGUk0gY29yZSwgc28gSSBuZWVkIHRvIGFzc2VzcyBpdHMgaW1wYWN0LiBCYXNlZCBvbiB0aGUgZGVzY3JpcHRpb24sIGFuZCB0aGUgZnVuY3Rpb25zIGFmZmVjdGVkLCB0aGlzIGlzIGRlZmluaXRlbHkgYSBjaGFuZ2UgdGhhdCB3YXJyYW50cyBmdXp6aW5nLiBUaGUgcGF0Y2ggaXMgcHJvYmFibHkgYWRkcmVzc2luZyBhIHN1YnRsZSB2dWxuZXJhYmlsaXR5IGFuZCBpdOKAmXMgYWx3YXlzIGdvb2QgdG8gY2hlY2sgZm9yIHRoYXQuCgpGb3IgYSB0YXJnZXRlZCBmdXp6aW5nIGFwcHJvYWNoLCBJJiMzOTtsbCBmb2N1cyBvbiBgeGZybV90cmFuc19xdWV1ZV9uZXRgIGFuZCBgeGZybV90cmFuc19xdWV1ZWAuIGB4ZnJtX3RyYW5zX3JlaW5qZWN0YCBpcyBhbHNvIG1lbnRpb25lZC4gSXQmIzM5O3Mgc3RhdGljLCBidXQgaXQmIzM5O3MgdXNlZCBhcyBhIHdvcmtxdWV1ZSBjYWxsYmFjaywgc28gaXQmIzM5O3MgYSB0b3AtbGV2ZWwgZnVuY3Rpb24gaW4gYSB3YXkuIEkgdGhpbmsgaXQgbWlnaHQgYmUgdXNlZnVsIHRvIGZvY3VzIG9uIHRoZSBvdGhlciB0d28gZnVuY3Rpb25zLgoKSSBzaG91bGQgYWxzbyBjaGVjayB0aGUgc291cmNlIGNvZGUgZm9yIGB4ZnJtX3RyYW5zX3JlaW5qZWN0YCBpbiBgbmV0L3hmcm0veGZybV9pbnB1dC5jYCBqdXN0IHRvIGJlIHN1cmUuIEkgd2lsbCBwcm9iYWJseSBhbHNvIHdhbnQgdG8gcmV2aWV3IGFueSB0ZXN0cyB0aGF0IGNvdmVyIHRoaXMgbW9kdWxlLCBpZiB0aGV5IGV4aXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX3RyYW5zX3JlaW5qZWN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1faW5wdXQuYz03ODk9RVhQT1JUX1NZTUJPTCh4ZnJtX2lucHV0X3Jlc3VtZSk7XG5uZXQveGZybS94ZnJtX2lucHV0LmMtNzkwLVxubmV0L3hmcm0veGZybV9pbnB1dC5jOjc5MTpzdGF0aWMgdm9pZCB4ZnJtX3RyYW5zX3JlaW5qZWN0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy03OTIte1xuLS1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYz04NTk9dm9pZCBfX2luaXQgeGZybV9pbnB1dF9pbml0KHZvaWQpXG4tLVxubmV0L3hmcm0veGZybV9pbnB1dC5jLTg3Ny1cdFx0X19za2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNnRyYW5zLVx1MDAzZXF1ZXVlKTtcbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo4Nzg6XHRcdElOSVRfV09SSyhcdTAwMjZ0cmFucy1cdTAwM2V3b3JrLCB4ZnJtX3RyYW5zX3JlaW5qZWN0KTtcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy04NzktXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDkyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGJyZWFrZG93biBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uLCB0aGlua2luZyB0aHJvdWdoIHRoaXMgY29kZToKCioqQW5hbHl6aW5nIGB4ZnJtX3RyYW5zX3JlaW5qZWN0YCBhcyBhIFBvdGVudGlhbCBTeW1ib2wqKgoKUmlnaHQsIGxldCYjMzk7cyBzZWUsIHRoZSBmdW5jdGlvbiBgeGZybV90cmFuc19yZWluamVjdGAgaXMgYmVpbmcgcGFzc2VkIHRvIGBJTklUX1dPUktgLiBTaW5jZSBpdCYjMzk7cyBub3QgYmVpbmcgaW5saW5lZCBkaXJlY3RseSwgdGhhdCBtZWFucyBpdCYjMzk7cyBhIHBvdGVudGlhbCBmb2N1cyBzeW1ib2wgdGhhdCBjb3VsZCBiZSBpbXBvcnRhbnQgZm9yIGNvbmZpZ3VyYXRpb24uCgpUaGVyZWZvcmUsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgbmVjZXNzYXJ5IHRvIGhhdmUgdGhpcyBmdW5jdGlvbiBhdmFpbGFibGUuIEl0IGxvb2tzIGxpa2UgdGhlIHJlbGV2YW50IG9uZXMgYXJlOgoKKiAgIGBDT05GSUdfWEZSTV9VU0VSYCAtIE9idmlvdXNseSwgbmVlZHMgdG8gYmUgZW5hYmxlZC4KKiAgIGBDT05GSUdfSU5FVF9FU1BgIC0gUHJvYmFibHkgcmVsYXRlZCB0byBJUHNlYyBFbmNhcHN1bGF0aW5nIFNlY3VyaXR5IFBheWxvYWQgKEVTUCkuCiogICBgQ09ORklHX0lORVRfQUhgIC0gTGlrZWx5IHJlbGF0ZWQgdG8gSVBzZWMgQXV0aGVudGljYXRpb24gSGVhZGVyIChBSCkuCiogICBgQ09ORklHX1hGUk1fRVNQSU5UQ1BgIC0gVGhpcyBvbmUgaXMgYSBtYXliZSwgYW5kIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybS4gSXQgYXBwZWFycyB0byBiZSB1c2luZyBgeGZybV90cmFuc19xdWV1ZV9uZXRgIHZpYSBgZXNwX291dHB1dF90YWlsX3RjcGAsIHNvIGl04oCZcyB3b3J0aCBpbnZlc3RpZ2F0aW5nIHRvIGRldGVybWluZSBpZiBpdCBpcyBuZWNlc3NhcnkuCgpJIHNob3VsZCB2ZXJpZnkgdGhpcyBgQ09ORklHX1hGUk1fRVNQSU5UQ1BgIGNvbm5lY3Rpb24gYnkgbG9va2luZyBpbnRvIGBlc3Bfb3V0cHV0X3RhaWxfdGNwYC4gU28sIEkmIzM5O2xsIGNoZWNrIGl0cyBpbXBsZW1lbnRhdGlvbiBpbiBgbmV0L2lwdjQvZXNwNC5jYC4gVGhhdCBzaG91bGQgY2xhcmlmeSB3aGV0aGVyIGl0JiMzOTtzIHRydWx5IGVzc2VudGlhbCBpbiB0aGlzIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VzcF9vdXRwdXRfdGFpbF90Y3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvZXNwNC5jPTE3OT1zdGF0aWMgaW50IGVzcF9vdXRwdXRfdGNwX2VuY2FwX2NiKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L2VzcDQuYy0xODctXG5uZXQvaXB2NC9lc3A0LmM6MTg4OnN0YXRpYyBpbnQgZXNwX291dHB1dF90YWlsX3RjcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY0L2VzcDQuYy0xODkte1xuLS1cbm5ldC9pcHY0L2VzcDQuYy0yMDItI2Vsc2Vcbm5ldC9pcHY0L2VzcDQuYzoyMDM6c3RhdGljIGludCBlc3Bfb3V0cHV0X3RhaWxfdGNwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2lwdjQvZXNwNC5jLTIwNC17XG4tLVxubmV0L2lwdjQvZXNwNC5jPTIxMD1zdGF0aWMgdm9pZCBlc3Bfb3V0cHV0X2RvbmUodm9pZCAqZGF0YSwgaW50IGVycilcbi0tXG5uZXQvaXB2NC9lc3A0LmMtMjQxLVx0XHQgICAgeC1cdTAwM2VlbmNhcCBcdTAwMjZcdTAwMjYgeC1cdTAwM2VlbmNhcC1cdTAwM2VlbmNhcF90eXBlID09IFRDUF9FTkNBUF9FU1BJTlRDUCkge1xubmV0L2lwdjQvZXNwNC5jOjI0MjpcdFx0XHRlcnIgPSBlc3Bfb3V0cHV0X3RhaWxfdGNwKHgsIHNrYik7XG5uZXQvaXB2NC9lc3A0LmMtMjQzLVx0XHRcdGlmIChlcnIgIT0gLUVJTlBST0dSRVNTKVxuLS1cbm5ldC9pcHY0L2VzcDQuYz00OTg9aW50IGVzcF9vdXRwdXRfdGFpbChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGVzcF9pbmZvICplc3ApXG4tLVxubmV0L2lwdjQvZXNwNC5jLTYxMi1cdGlmICghZXJyIFx1MDAyNlx1MDAyNiB4LVx1MDAzZWVuY2FwIFx1MDAyNlx1MDAyNiB4LVx1MDAzZWVuY2FwLVx1MDAzZWVuY2FwX3R5cGUgPT0gVENQX0VOQ0FQX0VTUElOVENQKVxubmV0L2lwdjQvZXNwNC5jOjYxMzpcdFx0ZXJyID0gZXNwX291dHB1dF90YWlsX3RjcCh4LCBza2IpO1xubmV0L2lwdjQvZXNwNC5jLTYxNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjA6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0MzUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgRVNQLVRDUCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGVzcF9vdXRwdXRfdGFpbF90Y3BgLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBmdW5jdGlvbiYjMzk7cyBwcm9iYWJseSBkZWZpbmVkIGNvbmRpdGlvbmFsbHkuIEdpdmVuIHRoZSBjb250ZXh0LCBteSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgaXQmIzM5O3MgdGllZCB0byB0aGUgYENPTkZJR19JTkVUX0VTUElOVENQYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gTGV0JiMzOTtzIGNvbmZpcm0gdGhhdCBoeXBvdGhlc2lzLiBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgYCNpZmRlZmAgYmxvY2sgdG8gc2VlIGlmIG15IGd1ZXNzIGlzIGNvcnJlY3QuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gdGhlIHJlbGV2YW50IGhlYWRlciBmaWxlcyBhbmQgc2VlIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgYnJvdWdodCBpbnRvIHRoZSBjb2RlLiBMZXQmIzM5O3MgdmVyaWZ5IHRoaXMgYW5kIHRoZW4gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgaW50ZW5kZWQgcHVycG9zZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjA6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0lORVRfRVNQSU5UQ1AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvZXNwNC5jPTk5PXN0YXRpYyB2b2lkIGVzcF9zc2dfdW5yZWYoc3RydWN0IHhmcm1fc3RhdGUgKngsIHZvaWQgKnRtcCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBhbHJlYWR5X3VucmVmKVxuLS1cbm5ldC9pcHY0L2VzcDQuYy0xMjQtXG5uZXQvaXB2NC9lc3A0LmM6MTI1OiNpZmRlZiBDT05GSUdfSU5FVF9FU1BJTlRDUFxubmV0L2lwdjQvZXNwNC5jLTEyNi1zdGF0aWMgc3RydWN0IHNvY2sgKmVzcF9maW5kX3RjcF9zayhzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcbi0tXG5uZXQvaXB2NC9lc3A0LmM9MzA5PXN0YXRpYyBzdHJ1Y3QgaXBfZXNwX2hkciAqZXNwX291dHB1dF91ZHBfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC9lc3A0LmMtMzM4LVxubmV0L2lwdjQvZXNwNC5jOjMzOTojaWZkZWYgQ09ORklHX0lORVRfRVNQSU5UQ1Bcbm5ldC9pcHY0L2VzcDQuYy0zNDAtc3RhdGljIHN0cnVjdCBpcF9lc3BfaGRyICplc3Bfb3V0cHV0X3RjcF9lbmNhcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbi0tXG5uZXQvaXB2NC9lc3A0LmM9MTExMj1zdGF0aWMgaW50IGVzcF9pbml0X3N0YXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2lwdjQvZXNwNC5jLTExNTAtXHRcdFx0YnJlYWs7XG5uZXQvaXB2NC9lc3A0LmM6MTE1MTojaWZkZWYgQ09ORklHX0lORVRfRVNQSU5UQ1Bcbm5ldC9pcHY0L2VzcDQuYy0xMTUyLVx0XHRjYXNlIFRDUF9FTkNBUF9FU1BJTlRDUDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjA6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwMTUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgRVNQIGluIFRDUCBFbmNhcHN1bGF0aW9uKioKCkFscmlnaHQsIHNvIGBDT05GSUdfSU5FVF9FU1BJTlRDUGAgaXMgZGVmaW5pdGVseSBlbmFibGVkLCB0aGF0IG11Y2ggaXMgY2xlYXIuIE15IG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGFuZCBzZWUgaG93IGl0JiMzOTtzIGhhbmRsZWQgYXQgdGhlIHBhY2tldCBwcm9jZXNzaW5nIGxldmVsLCBzcGVjaWZpY2FsbHkgZHVyaW5nIHRoZSByZWNlaXZlIHBhdGguIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIGB4ZnJtNF9yY3ZfZW5jYXBfZmluaXNoYCB3aXRoaW4gYG5ldC9pcHY0L3hmcm00X2lucHV0LmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgdGhhdCBmdW5jdGlvbiBkb2VzIHdpdGggYW4gRVNQIHBhY2tldCB0aGF0JiMzOTtzIGJlZW4gZW5jYXBzdWxhdGVkIGluIFRDUC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgZGUtZW5jYXBzdWxhdGlvbiBsb2dpYywgaG93IHRoZSBpbm5lciBJUCBoZWFkZXIgaXMgcmUtY29uc3RydWN0ZWQsIGFuZCBjcnVjaWFsbHksIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgVENQIGxheWVyLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBvZiBYRlJNIHdpdGggVENQLCBhbmQgdGhpcyBmdW5jdGlvbiBzaG91bGQgZXhwb3NlIHRoYXQuIEkmIzM5O2xsIGJlIGZvY3VzZWQgb24gYW55IHBvdGVudGlhbCBnb3RjaGFzIG9yIG9wdGltaXphdGlvbnMsIGxpa2Ugd2hldGhlciB0aGVyZSYjMzk7cyBhbnkgdW5uZWNlc3NhcnkgY29weWluZyBvciByZS1jYWxjdWxhdGlvbiBvZiBjaGVja3N1bXMuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCBpdCBoYW5kbGVzIHRoZSBpbm5lciBJUCBoZWFkZXIgYW5kIFRDUCBjb3JyZWN0bHksIGJ1dCBJIG5lZWQgdG8gYmUgMTAwJSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtNF9yY3ZfZW5jYXBfZmluaXNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3hmcm00X2lucHV0LmMtMjItXG5uZXQvaXB2NC94ZnJtNF9pbnB1dC5jOjIzOnN0YXRpYyBpbnQgeGZybTRfcmN2X2VuY2FwX2ZpbmlzaDIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvaXB2NC94ZnJtNF9pbnB1dC5jLTI0LVx0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC94ZnJtNF9pbnB1dC5jLTI4LVxubmV0L2lwdjQveGZybTRfaW5wdXQuYzoyOTpzdGF0aWMgaW5saW5lIGludCB4ZnJtNF9yY3ZfZW5jYXBfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLFxubmV0L2lwdjQveGZybTRfaW5wdXQuYy0zMC1cdFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQveGZybTRfaW5wdXQuYy0zOS1cbm5ldC9pcHY0L3hmcm00X2lucHV0LmM6NDA6XHRpZiAoeGZybV90cmFuc19xdWV1ZShza2IsIHhmcm00X3Jjdl9lbmNhcF9maW5pc2gyKSlcbm5ldC9pcHY0L3hmcm00X2lucHV0LmMtNDEtXHRcdGdvdG8gZHJvcDtcbi0tXG5uZXQvaXB2NC94ZnJtNF9pbnB1dC5jPTQ5PWludCB4ZnJtNF90cmFuc3BvcnRfZmluaXNoKHN0cnVjdCBza19idWZmICpza2IsIGludCBhc3luYylcbi0tXG5uZXQvaXB2NC94ZnJtNF9pbnB1dC5jLTc3LVx0XHRkZXZfbmV0KGRldiksIE5VTEwsIHNrYiwgZGV2LCBOVUxMLFxubmV0L2lwdjQveGZybTRfaW5wdXQuYzo3ODpcdFx0eGZybTRfcmN2X2VuY2FwX2ZpbmlzaCk7XG5uZXQvaXB2NC94ZnJtNF9pbnB1dC5jLTc5LVx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzM4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFhGUk0gUGF0Y2gmIzM5O3MgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgc2VlIGhlcmUsIGB4ZnJtNF9yY3ZfZW5jYXBfZmluaXNoYCBpcyBkaXJlY3RseSB0aWVkIGludG8gYHhmcm00X3RyYW5zcG9ydF9maW5pc2hgLCB3aGljaCBpcyBhIHByZXR0eSBzdGFuZGFyZCBwYXJ0IG9mIFhGUk0gaW5wdXQgcHJvY2Vzc2luZy4gVGhhdCBhbG9uZSB0ZWxscyBtZSB0aGF0IGhhdmluZyBgQ09ORklHX1hGUk1fVVNFUmAgYW5kIGBDT05GSUdfSU5FVF9FU1BgIGNvbmZpZ3VyZWQgd291bGQgYmUgZW5vdWdoIHRvIGdldCB0byB0aGlzIGNvZGUuCgpUaGVyZWZvcmUsIG15IHN1bW1hcnkgaXMgdGhpczoKClRoaXMgbG9va3MgbGlrZSBhIHdvcnRod2hpbGUgdGFyZ2V0IGZvciBmdXp6aW5nLiBUaGUgcGF0Y2ggaXMgZml4aW5nIGEgYnVnIHJlbGF0ZWQgdG8gaG93IFhGUk0gaGFuZGxlcyBxdWV1aW5nIGFuZCByZS1pbmplY3RpbmcgcGFja2V0cywgc3BlY2lmaWNhbGx5IHdpdGhpbiBgeGZybV90cmFuc19xdWV1ZV9uZXRgLCBgeGZybV90cmFuc19xdWV1ZWAsIGFuZCBgeGZybV90cmFuc19yZWluamVjdGAuIFRoZSBmaXggaW52b2x2ZXMgY29ycmVjdGx5IG1hbmFnaW5nIHJlZmVyZW5jZXMgdG8gYHNrYi0mZ3Q7ZGV2YCBhbmQgZW5zdXJpbmcgYHNrYl9kc3RgIGlzIHZhbGlkLCB3aGljaCBwb2ludHMgdG8gY2hhbmdlcyBpbiBjb3JlIHBhY2tldCBwcm9jZXNzaW5nLiBTaW5jZSBpdCB0b3VjaGVzIHRoZXNlIG5ldHdvcmsgaW5wdXQvb3V0cHV0IHBhdGhzLCBpdCBoYXMgc2lnbmlmaWNhbnQgcG90ZW50aWFsIGZvciB0cmlnZ2VyaW5nIGludGVyZXN0aW5nIHN0YXRlcy4KCk15IHByaW1hcnkgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZSBmdW5jdGlvbnMgYHhmcm1fdHJhbnNfcXVldWVfbmV0YCwgYHhmcm1fdHJhbnNfcXVldWVgLCBhbmQgYHhmcm1fdHJhbnNfcmVpbmplY3RgLgoKVG8gZW5zdXJlIGJyb2FkIGNvdmVyYWdlLCBJIHNob3VsZCBjb25zaWRlciBlbmFibGluZyB0aGUgY29uZmlndXJhdGlvbnMgYFhGUk1fVVNFUmAsIGBJTkVUX0VTUGAsIGFuZCB0aGVuIEkgd2FudCB0byBkb3VibGUgY2hlY2sgbXkgYXNzdW1wdGlvbnMsIGJ1dCB0aGUgYElORVRfRVNQSU5UQ1BgIGFuZCBgSU5FVDZfRVNQSU5UQ1BgIGNvbmZpZ3VyYXRpb25zIGxvb2sgbGlrZSB0aGV5IHNob3VsZCBhbHNvIGJlIHJlbGV2YW50LiBJIHdhbnQgdG8gYmUgY2VydGFpbiBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhIGNvbmRpdGlvbmFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSU5FVF9FU1BJTlRDUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTM2OT1jb25maWcgSU5FVF9FU1BfT0ZGTE9BRFxuLS1cbm5ldC9pcHY0L0tjb25maWctMzgxLVxubmV0L2lwdjQvS2NvbmZpZzozODI6Y29uZmlnIElORVRfRVNQSU5UQ1Bcbm5ldC9pcHY0L0tjb25maWctMzgzLVx0Ym9vbCBcJiMzNDtJUDogRVNQIGluIFRDUCBlbmNhcHN1bGF0aW9uIChSRkMgODIyOSlcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjA6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0NTAKCQkJCQkJCW91dHB1dDogMTUxCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeToKCioqVGhlIEV4aXN0ZW5jZSBvZiB0aGUgRGF0YSBhbmQgVG9vbGluZyoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGFja25vd2xlZGdpbmcgdGhlIHJlYWxpdHkgb2YgdGhlIHNpdHVhdGlvbjogJiMzNDtZZXMsIHRoZXkgZXhpc3QuJiMzNDsgU3BlY2lmaWNhbGx5LCB0aGUgZGF0YSBhbmQgaXRzIHJlbGF0ZWQgcHJvY2Vzc2luZyBjYXBhYmlsaXRpZXMsIGFzIHdlbGwgYXMgdGhlIHRvb2xzIHdlIGhhdmUgdG8gd29yayB3aXRoIHRoZW0uIFRoaXMgaXMgdGhlIGZvdW5kYXRpb247IHdlJiMzOTtyZSBlc3RhYmxpc2hpbmcgY29tbW9uIGdyb3VuZC4gSSYjMzk7bSBhc3N1bWluZywgYXMgYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQsIHlvdSYjMzk7cmUgYWxzbyBhd2FyZSBvZiB0aGVtLgoKTm93LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIFRoZSBpbnRlbnRpb24gaXMgdG8gJiMzNDt1c2UgdGhlIHNldC1yZXN1bHRzIHRvb2wuJiMzNDsgVGhpcyBzaWduYWxzIGEgdmVyeSBzcGVjaWZpYyBhcHByb2FjaC4gV2UmIzM5O3JlIG5vdCBqdXN0IGJyYWluc3Rvcm1pbmcgb3IgZXhwbG9yaW5nIGFic3RyYWN0IGNvbmNlcHRzLiBXZSYjMzk7cmUgbW92aW5nIHRvd2FyZHMgcHJhY3RpY2FsIGFwcGxpY2F0aW9uIGFuZCBhbmFseXNpcy4gSXQmIzM5O3MgYWJvdXQgbGV2ZXJhZ2luZyBhIGRlZmluZWQgdG9vbCwgbGlrZWx5IG9uZSBnZWFyZWQgdG93YXJkcyBwcmVzZW50aW5nIGZpbmRpbmdzLCBwZXJoYXBzIGEgdmlzdWFsaXphdGlvbiBmcmFtZXdvcmsgb3IgYW4gYXV0b21hdGVkIHJlcG9ydGluZyBzeXN0ZW0sIHdoYXRldmVyIHdlJiMzOTt2ZSBhZ3JlZWQgb24sIHRvIGRpc3RpbGwgdGhlIGF2YWlsYWJsZSBpbmZvcm1hdGlvbi4gSXTigJlzIGFib3V0IGxldmVyYWdpbmcgb3VyIHJlc291cmNlcyB0byBvYnRhaW4gYWN0aW9uYWJsZSBvdXRwdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIwOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlJNX1VTRVImIzM0OywKICAgICYjMzQ7SU5FVF9FU1AmIzM0OywKICAgICYjMzQ7SU5FVF9FU1BJTlRDUCYjMzQ7LAogICAgJiMzNDtJTkVUNl9FU1AmIzM0OywKICAgICYjMzQ7SU5FVDZfRVNQSU5UQ1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZnJtX3RyYW5zX3F1ZXVlX25ldCYjMzQ7LAogICAgJiMzNDt4ZnJtX3RyYW5zX3F1ZXVlJiMzNDssCiAgICAmIzM0O3hmcm1fdHJhbnNfcmVpbmplY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gWEZSTSBwYWNrZXQgcXVldWVpbmcgYW5kIHJlaW5qZWN0aW9uIHBhdGhzIGJ5IHByb3Blcmx5IGhvbGRpbmcgYSByZWZlcmVuY2UgdG8gc2tiLVx1MDAzZWRldiBhbmQgZW5zdXJpbmcgc2tiX2RzdCBpcyB2YWxpZC4gVGhpcyBtb2RpZmllcyBjb3JlIFhGUk0gcGFja2V0IHByb2Nlc3NpbmcgbG9naWMgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gbmV0d29yayBpbnB1dC9vdXRwdXQgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUElOVENQJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUNl9FU1BJTlRDUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hmcm1fdHJhbnNfcXVldWVfbmV0JiMzNDssCiAgICAmIzM0O3hmcm1fdHJhbnNfcXVldWUmIzM0OywKICAgICYjMzQ7eGZybV90cmFuc19yZWluamVjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBYRlJNIHBhY2tldCBxdWV1ZWluZyBhbmQgcmVpbmplY3Rpb24gcGF0aHMgYnkgcHJvcGVybHkgaG9sZGluZyBhIHJlZmVyZW5jZSB0byBza2ItXHUwMDNlZGV2IGFuZCBlbnN1cmluZyBza2JfZHN0IGlzIHZhbGlkLiBUaGlzIG1vZGlmaWVzIGNvcmUgWEZSTSBwYWNrZXQgcHJvY2Vzc2luZyBsb2dpYyB3aGljaCBpcyByZWFjaGFibGUgZnJvbSBuZXR3b3JrIGlucHV0L291dHB1dCBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjA6Mjc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMDoyNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgb2JqZWN0IGxpZmV0aW1lIGFuZCByZWZlcmVuY2UgY291bnRpbmcgaXNzdWVzIGZvciBgc2tiLVx1MDAzZWRldmAgYW5kIGBza2JfZHN0YCB3aGVuIGFuIGBza2JgIGlzIHF1ZXVlZCBmb3IgcmVpbmplY3Rpb24gaW4gdGhlIFhGUk0gc3Vic3lzdGVtLiBJdCBhZGRzIGBkZXZfaG9sZCgpYCBhbmQgYGRldl9wdXQoKWAgZm9yIHRoZSBuZXR3b3JrIGRldmljZSwgZm9yY2VzIHRoZSBkZXN0aW5hdGlvbiBlbnRyeSB2aWEgYHNrYl9kc3RfZm9yY2UoKWAsIGFuZCB3cmFwcyB0aGUgcmVpbmplY3Rpb24gbG9vcCBpbiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uIFRoZXNlIGNoYW5nZXMgYXJlIGRlc2lnbmVkIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgKFVBRikgb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgcmVsYXRlZCB0byBmcmVlZCBuZXR3b3JrIGRldmljZXMgb3IgZGVzdGluYXRpb24gZW50cmllcy4gU3VjaCBtZW1vcnkgY29ycnVwdGlvbiBhbmQgbGlmZXRpbWUgYnVncyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBidWZmZXIgbGVuZ3Rocywgb3IgZXhwb3NlIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzkyNWE2Y2VlOTkwMGY1YzI2YTJiNmE0YWY2MWFlYzI5N2VjOGUwNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDcgMjA6MjY6MTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2lucHV0LmMgYi9uZXQveGZybS94ZnJtX2lucHV0LmMKaW5kZXggZWVjYWIzMzdiZDBhNy4uOGY2MTA5ZWFkYTdlYSAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV9pbnB1dC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1faW5wdXQuYwpAQCAtODAwLDEyICYjNDM7ODAwLDE3IEBAIHN0YXRpYyB2b2lkIHhmcm1fdHJhbnNfcmVpbmplY3Qoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCXNwaW5fdW5sb2NrX2JoKCZhbXA7dHJhbnMtJmd0O3F1ZXVlX2xvY2spOwogCiAJbG9jYWxfYmhfZGlzYWJsZSgpOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiAJd2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKCZhbXA7cXVldWUpKSkgewogCQlzdHJ1Y3QgbmV0ICpuZXQgPSBYRlJNX1RSQU5TX1NLQl9DQihza2IpLSZndDtuZXQ7CiYjNDM7CQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLSZndDtkZXY7CiAKIAkJWEZSTV9UUkFOU19TS0JfQ0Ioc2tiKS0mZ3Q7ZmluaXNoKG5ldCwgTlVMTCwgc2tiKTsKJiM0MzsJCWlmIChkZXYpCiYjNDM7CQkJZGV2X3B1dChkZXYpOwogCQlwdXRfbmV0KG5ldCk7CiAJfQomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKIAlsb2NhbF9iaF9lbmFibGUoKTsKIH0KIApAQCAtODIxLDEyICYjNDM7ODI2LDE4IEBAIGludCB4ZnJtX3RyYW5zX3F1ZXVlX25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsCiAJaWYgKHNrYl9xdWV1ZV9sZW4oJmFtcDt0cmFucy0mZ3Q7cXVldWUpICZndDs9IFJFQURfT05DRShuZXRfaG90ZGF0YS5tYXhfYmFja2xvZykpCiAJCXJldHVybiAtRU5PQlVGUzsKIAomIzQzOwlpZiAoc2tiX2RzdChza2IpICZhbXA7JmFtcDsgIXNrYl9kc3RfZm9yY2Uoc2tiKSkKJiM0MzsJCXJldHVybiAtRUhPU1RVTlJFQUNIOwomIzQzOwogCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHhmcm1fdHJhbnNfY2IpICZndDsgc2l6ZW9mKHNrYi0mZ3Q7Y2IpKTsKIAogCWhvbGRfbmV0ID0gbWF5YmVfZ2V0X25ldChuZXQpOwogCWlmICghaG9sZF9uZXQpCiAJCXJldHVybiAtRU5PREVWOwogCiYjNDM7CWlmIChza2ItJmd0O2RldikKJiM0MzsJCWRldl9ob2xkKHNrYi0mZ3Q7ZGV2KTsKJiM0MzsKIAlYRlJNX1RSQU5TX1NLQl9DQihza2IpLSZndDtmaW5pc2ggPSBmaW5pc2g7CiAJWEZSTV9UUkFOU19TS0JfQ0Ioc2tiKS0mZ3Q7bmV0ID0gaG9sZF9uZXQ7CiAJc3Bpbl9sb2NrX2JoKCZhbXA7dHJhbnMtJmd0O3F1ZXVlX2xvY2spOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjA6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMzOAoJCQkJCQkJb3V0cHV0OiAyMTEKCQkJCQkJCXRob3VnaHRzOiA3MzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBYRlJNIFBhdGNoOiBGb2N1cyBvbiBPYmplY3QgTGlmZXRpbWUgYW5kIFJlZmVyZW5jZSBDb3VudGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGZvciBgeGZybV9pbnB1dC5jYC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyBwcmltYXJpbHkgYWJvdXQgaW1wcm92aW5nIG9iamVjdCBsaWZldGltZSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIHJlZmVyZW5jZSBjb3VudGluZyBvZiBgc2tiLSZndDtkZXZgIGFuZCBoYW5kbGluZyBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gdXNlLWFmdGVyLWZyZWUgYW5kIGludmFsaWQgcmVmZXJlbmNlcywgZXNwZWNpYWxseSB3aGVuIGFuIFNLQiBpcyBiZWluZyBxdWV1ZWQgZm9yIHJlaW5qZWN0aW9uLgoKVGhlIGNvcmUgY2hhbmdlcyBhcmUgaW4gYHhmcm1fdHJhbnNfcXVldWVfbmV0YCBhbmQgYHhmcm1fdHJhbnNfcmVpbmplY3RgLiBJbiB0aGUgcXVldWVpbmcgZnVuY3Rpb24sIHdlJiMzOTtyZSBub3cgYWRkaW5nIGNoZWNrcy4gSSBzZWUgYSBuZXcgY2hlY2sgZm9yIGAhc2tiX2RzdF9mb3JjZShza2IpYCB3aXRoaW4gYHhmcm1fdHJhbnNfcXVldWVfbmV0YCB0byByZXR1cm4gLUVIT1NUVU5SRUFDSCB3aGVuIGEgZGVzdGluYXRpb24gaXMgcHJlc2VudCBidXQgbm90IGZvcmNlZCwgYW5kIGEgYGRldl9ob2xkKHNrYi0mZ3Q7ZGV2KWAgY2FsbCB0byBpbmNyZWFzZSB0aGUgcmVmY291bnQuIFRoZW4sIHdpdGhpbiB0aGUgcmVpbmplY3Rpb24gZnVuY3Rpb24sIHdlJiMzOTtyZSB3cmFwcGluZyB0aGUgcmVpbmplY3Rpb24gbG9vcCB3aXRoIGByY3VfcmVhZF9sb2NrKClgIGFuZCBgcmN1X3JlYWRfdW5sb2NrKClgLiBJbnNpZGUgdGhlIGxvb3AsIGEgbG9jYWwgYG5ldF9kZXZpY2VgIHZhcmlhYmxlLCBpbml0aWFsaXplZCB3aXRoIGBza2ItJmd0O2RldmAgZm9yIGVhc3kgdXNlLCBhbmQgYGRldl9wdXQoZGV2KWAgaXMgYWRkZWQgdG8gZGVjcmVtZW50IHRoZSByZWZjb3VudC4gVGhpcyBpcyBwcmVjaXNlbHkgd2hhdCBJIGV4cGVjdCB0byBzZWUgZm9yIHByb3BlciByZWZlcmVuY2UgY291bnRpbmcgb2YgdGhlIGRldmljZSBwb2ludGVyLCBwcmV2ZW50aW5nIGRvdWJsZSBmcmVlcyBvciB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MuCgpUaGlzIHNjcmVhbXMgb2JqZWN0IGxpZmV0aW1lIGNvbmNlcm5zLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlJiMzOTtzIG5vIGludHJvZHVjdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlLCBub3IgYXJlIHdlIGV4cG9zaW5nIGFueS4gVGhlIGNvbmNlcm5zIGhlcmUgYXJlIGFib3V0IG1hbmFnaW5nIHRoZSBsaWZlY3ljbGUgb2YgdGhlIGBza2ItJmd0O2RldmAgcG9pbnRlciBhbmQgdGhlIFNLQiBpdHNlbGYsIGVuc3VyaW5nIHRoYXQgd2UgZG9uJiMzOTt0IHRyeSB0byBhY2Nlc3MgaXQgYWZ0ZXIgaXQmIzM5O3MgYmVlbiBmcmVlZCBvciBiZWNvbWUgaW52YWxpZC4gS0FTQU4gaXMgdGhlIHJpZ2h0IHRvb2wgdG8gdHJhY2sgYW5kIGRpc2NvdmVyIGFueSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgYnVncyBpZiByZWZlcmVuY2UgY291bnRpbmcgaXMgd3JvbmcuIEtNU0FOIGlzIGZvciBjYXRjaGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuCgpKdXN0IHRvIGJlIHRob3JvdWdoLCBJJiMzOTttIHF1aWNrbHkgZG91YmxlLWNoZWNraW5nIHRoZSBjb2RlIGRpZmYuIFRoZSBhc3NpZ25tZW50cyB0byBgWEZSTV9UUkFOU19TS0JfQ0Ioc2tiKS0mZ3Q7ZmluaXNoYCBhbmQgYFhGUk1fVFJBTlNfU0tCX0NCKHNrYiktJmd0O25ldGAgYXJlIHN0YW5kYXJkIHNldHVwIGNhbGxzLiBUaGVzZSBqdXN0IGFzc2lnbiB2YWx1ZXMgdG8gdGhlIFNLQiYjMzk7cyBjb250cm9sIGJsb2NrLCBzbyB0aGVyZSYjMzk7cyBub3RoaW5nIGNvbmNlcm5pbmcgdGhlcmUuCgpHaXZlbiB0aGF0IHRoaXMgcGF0Y2ggaXMgc29sZWx5IGZvY3VzZWQgb24gZW5zdXJpbmcgY29ycmVjdCByZWZlcmVuY2UgY291bnRzIGFuZCBhdm9pZGluZyB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMsIGFuZCBJIGRvbiYjMzk7dCBzZWUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGludHJvZHVjdGlvbiBvciBleHBvc3VyZSwgdGhlIGBOZWVkc0tNU0FOYCBmbGFnIGlzIGRlZmluaXRlbHkgZmFsc2UgaGVyZS4gVGhpcyBpcyBwdXJlbHkgYWJvdXQgb2JqZWN0IGxpZmV0aW1lIGFuZCByZWZlcmVuY2UgY291bnRpbmcsIG5vdCBtZW1vcnkgaW5pdGlhbGl6YXRpb24uIEkmIzM5O20gY29tZm9ydGFibGUgc2V0dGluZyBgTmVlZHNLTVNBTiA9IGZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjA6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIG9iamVjdCBsaWZldGltZSBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcyBmb3IgYHNrYi1cdTAwM2VkZXZgIGFuZCBgc2tiX2RzdGAgd2hlbiBhbiBgc2tiYCBpcyBxdWV1ZWQgZm9yIHJlaW5qZWN0aW9uIGluIHRoZSBYRlJNIHN1YnN5c3RlbS4gSXQgYWRkcyBgZGV2X2hvbGQoKWAgYW5kIGBkZXZfcHV0KClgIGZvciB0aGUgbmV0d29yayBkZXZpY2UsIGZvcmNlcyB0aGUgZGVzdGluYXRpb24gZW50cnkgdmlhIGBza2JfZHN0X2ZvcmNlKClgLCBhbmQgd3JhcHMgdGhlIHJlaW5qZWN0aW9uIGxvb3AgaW4gYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLiBUaGVzZSBjaGFuZ2VzIGFyZSBkZXNpZ25lZCB0byBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIChVQUYpIG9yIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIHJlbGF0ZWQgdG8gZnJlZWQgbmV0d29yayBkZXZpY2VzIG9yIGRlc3RpbmF0aW9uIGVudHJpZXMuIFN1Y2ggbWVtb3J5IGNvcnJ1cHRpb24gYW5kIGxpZmV0aW1lIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgYnVmZmVyIGxlbmd0aHMsIG9yIGV4cG9zZSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgb2JqZWN0IGxpZmV0aW1lIGFuZCByZWZlcmVuY2UgY291bnRpbmcgaXNzdWVzIGZvciBgc2tiLVx1MDAzZWRldmAgYW5kIGBza2JfZHN0YCB3aGVuIGFuIGBza2JgIGlzIHF1ZXVlZCBmb3IgcmVpbmplY3Rpb24gaW4gdGhlIFhGUk0gc3Vic3lzdGVtLiBJdCBhZGRzIGBkZXZfaG9sZCgpYCBhbmQgYGRldl9wdXQoKWAgZm9yIHRoZSBuZXR3b3JrIGRldmljZSwgZm9yY2VzIHRoZSBkZXN0aW5hdGlvbiBlbnRyeSB2aWEgYHNrYl9kc3RfZm9yY2UoKWAsIGFuZCB3cmFwcyB0aGUgcmVpbmplY3Rpb24gbG9vcCBpbiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uIFRoZXNlIGNoYW5nZXMgYXJlIGRlc2lnbmVkIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgKFVBRikgb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgcmVsYXRlZCB0byBmcmVlZCBuZXR3b3JrIGRldmljZXMgb3IgZGVzdGluYXRpb24gZW50cmllcy4gU3VjaCBtZW1vcnkgY29ycnVwdGlvbiBhbmQgbGlmZXRpbWUgYnVncyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBidWZmZXIgbGVuZ3Rocywgb3IgZXhwb3NlIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjA6MjY6MTkuODkzNTUyMDk5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjkwOTMxMjc3MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEZSTV9VU0VSXCIsXG4gICAgXCJJTkVUX0VTUFwiLFxuICAgIFwiSU5FVF9FU1BJTlRDUFwiLFxuICAgIFwiSU5FVDZfRVNQXCIsXG4gICAgXCJJTkVUNl9FU1BJTlRDUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhmcm1fdHJhbnNfcXVldWVfbmV0XCIsXG4gICAgXCJ4ZnJtX3RyYW5zX3F1ZXVlXCIsXG4gICAgXCJ4ZnJtX3RyYW5zX3JlaW5qZWN0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgb2JqZWN0IGxpZmV0aW1lIGFuZCByZWZlcmVuY2UgY291bnRpbmcgaXNzdWVzIGZvciBgc2tiLVxcdTAwM2VkZXZgIGFuZCBgc2tiX2RzdGAgd2hlbiBhbiBgc2tiYCBpcyBxdWV1ZWQgZm9yIHJlaW5qZWN0aW9uIGluIHRoZSBYRlJNIHN1YnN5c3RlbS4gSXQgYWRkcyBgZGV2X2hvbGQoKWAgYW5kIGBkZXZfcHV0KClgIGZvciB0aGUgbmV0d29yayBkZXZpY2UsIGZvcmNlcyB0aGUgZGVzdGluYXRpb24gZW50cnkgdmlhIGBza2JfZHN0X2ZvcmNlKClgLCBhbmQgd3JhcHMgdGhlIHJlaW5qZWN0aW9uIGxvb3AgaW4gYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLiBUaGVzZSBjaGFuZ2VzIGFyZSBkZXNpZ25lZCB0byBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIChVQUYpIG9yIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIHJlbGF0ZWQgdG8gZnJlZWQgbmV0d29yayBkZXZpY2VzIG9yIGRlc3RpbmF0aW9uIGVudHJpZXMuIFN1Y2ggbWVtb3J5IGNvcnJ1cHRpb24gYW5kIGxpZmV0aW1lIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgYnVmZmVyIGxlbmd0aHMsIG9yIGV4cG9zZSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gWEZSTSBwYWNrZXQgcXVldWVpbmcgYW5kIHJlaW5qZWN0aW9uIHBhdGhzIGJ5IHByb3Blcmx5IGhvbGRpbmcgYSByZWZlcmVuY2UgdG8gc2tiLVxcdTAwM2VkZXYgYW5kIGVuc3VyaW5nIHNrYl9kc3QgaXMgdmFsaWQuIFRoaXMgbW9kaWZpZXMgY29yZSBYRlJNIHBhY2tldCBwcm9jZXNzaW5nIGxvZ2ljIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIG5ldHdvcmsgaW5wdXQvb3V0cHV0IHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMDoyNjoxOS44OTM1NTgxMTlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwOTUzNzQ4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDc5MjVhNmNlZTk5MDBmNWMyNmEyYjZhNGFmNjFhZWMyOTdlYzhlMDdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgNyAyMDoyNjoxOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2lucHV0LmMgYi9uZXQveGZybS94ZnJtX2lucHV0LmNcXG5pbmRleCBlZWNhYjMzN2JkMGE3Li44ZjYxMDllYWRhN2VhIDEwMDY0NFxcbi0tLSBhL25ldC94ZnJtL3hmcm1faW5wdXQuY1xcbisrKyBiL25ldC94ZnJtL3hmcm1faW5wdXQuY1xcbkBAIC04MDAsMTIgKzgwMCwxNyBAQCBzdGF0aWMgdm9pZCB4ZnJtX3RyYW5zX3JlaW5qZWN0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnRyYW5zLVxcdTAwM2VxdWV1ZV9sb2NrKTtcXG4gXFxuIFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbiBcXHR3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoXFx1MDAyNnF1ZXVlKSkpIHtcXG4gXFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gWEZSTV9UUkFOU19TS0JfQ0Ioc2tiKS1cXHUwMDNlbmV0O1xcbitcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLVxcdTAwM2VkZXY7XFxuIFxcbiBcXHRcXHRYRlJNX1RSQU5TX1NLQl9DQihza2IpLVxcdTAwM2VmaW5pc2gobmV0LCBOVUxMLCBza2IpO1xcbitcXHRcXHRpZiAoZGV2KVxcbitcXHRcXHRcXHRkZXZfcHV0KGRldik7XFxuIFxcdFxcdHB1dF9uZXQobmV0KTtcXG4gXFx0fVxcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuIH1cXG4gXFxuQEAgLTgyMSwxMiArODI2LDE4IEBAIGludCB4ZnJtX3RyYW5zX3F1ZXVlX25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGlmIChza2JfcXVldWVfbGVuKFxcdTAwMjZ0cmFucy1cXHUwMDNlcXVldWUpIFxcdTAwM2U9IFJFQURfT05DRShuZXRfaG90ZGF0YS5tYXhfYmFja2xvZykpXFxuIFxcdFxcdHJldHVybiAtRU5PQlVGUztcXG4gXFxuK1xcdGlmIChza2JfZHN0KHNrYikgXFx1MDAyNlxcdTAwMjYgIXNrYl9kc3RfZm9yY2Uoc2tiKSlcXG4rXFx0XFx0cmV0dXJuIC1FSE9TVFVOUkVBQ0g7XFxuK1xcbiBcXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCB4ZnJtX3RyYW5zX2NiKSBcXHUwMDNlIHNpemVvZihza2ItXFx1MDAzZWNiKSk7XFxuIFxcbiBcXHRob2xkX25ldCA9IG1heWJlX2dldF9uZXQobmV0KTtcXG4gXFx0aWYgKCFob2xkX25ldClcXG4gXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIFxcbitcXHRpZiAoc2tiLVxcdTAwM2VkZXYpXFxuK1xcdFxcdGRldl9ob2xkKHNrYi1cXHUwMDNlZGV2KTtcXG4rXFxuIFxcdFhGUk1fVFJBTlNfU0tCX0NCKHNrYiktXFx1MDAzZWZpbmlzaCA9IGZpbmlzaDtcXG4gXFx0WEZSTV9UUkFOU19TS0JfQ0Ioc2tiKS1cXHUwMDNlbmV0ID0gaG9sZF9uZXQ7XFxuIFxcdHNwaW5fbG9ja19iaChcXHUwMDI2dHJhbnMtXFx1MDAzZXF1ZXVlX2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMDoyNjoyMC40MDQxMzgyMTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1OTE2Mjg5MjI3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRlJNX1VTRVJcIixcbiAgICBcIklORVRfRVNQXCIsXG4gICAgXCJJTkVUX0VTUElOVENQXCIsXG4gICAgXCJJTkVUNl9FU1BcIixcbiAgICBcIklORVQ2X0VTUElOVENQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGZybV90cmFuc19xdWV1ZV9uZXRcIixcbiAgICBcInhmcm1fdHJhbnNfcXVldWVcIixcbiAgICBcInhmcm1fdHJhbnNfcmVpbmplY3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBYRlJNIHBhY2tldCBxdWV1ZWluZyBhbmQgcmVpbmplY3Rpb24gcGF0aHMgYnkgcHJvcGVybHkgaG9sZGluZyBhIHJlZmVyZW5jZSB0byBza2ItXFx1MDAzZWRldiBhbmQgZW5zdXJpbmcgc2tiX2RzdCBpcyB2YWxpZC4gVGhpcyBtb2RpZmllcyBjb3JlIFhGUk0gcGFja2V0IHByb2Nlc3NpbmcgbG9naWMgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gbmV0d29yayBpbnB1dC9vdXRwdXQgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc5MjVhNmNlZTk5MDBmNWMyNmEyYjZhNGFmNjFhZWMyOTdlYzhlMDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDIwOjI2OjE4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9pbnB1dC5jIGIvbmV0L3hmcm0veGZybV9pbnB1dC5jXG5pbmRleCBlZWNhYjMzN2JkMGE3Li44ZjYxMDllYWRhN2VhIDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV9pbnB1dC5jXG4rKysgYi9uZXQveGZybS94ZnJtX2lucHV0LmNcbkBAIC04MDAsMTIgKzgwMCwxNyBAQCBzdGF0aWMgdm9pZCB4ZnJtX3RyYW5zX3JlaW5qZWN0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRyYW5zLVx1MDAzZXF1ZXVlX2xvY2spO1xuIFxuIFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuIFx0d2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKFx1MDAyNnF1ZXVlKSkpIHtcbiBcdFx0c3RydWN0IG5ldCAqbmV0ID0gWEZSTV9UUkFOU19TS0JfQ0Ioc2tiKS1cdTAwM2VuZXQ7XG4rXHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBza2ItXHUwMDNlZGV2O1xuIFxuIFx0XHRYRlJNX1RSQU5TX1NLQl9DQihza2IpLVx1MDAzZWZpbmlzaChuZXQsIE5VTEwsIHNrYik7XG4rXHRcdGlmIChkZXYpXG4rXHRcdFx0ZGV2X3B1dChkZXYpO1xuIFx0XHRwdXRfbmV0KG5ldCk7XG4gXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdGxvY2FsX2JoX2VuYWJsZSgpO1xuIH1cbiBcbkBAIC04MjEsMTIgKzgyNiwxOCBAQCBpbnQgeGZybV90cmFuc19xdWV1ZV9uZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKHNrYl9xdWV1ZV9sZW4oXHUwMDI2dHJhbnMtXHUwMDNlcXVldWUpIFx1MDAzZT0gUkVBRF9PTkNFKG5ldF9ob3RkYXRhLm1heF9iYWNrbG9nKSlcbiBcdFx0cmV0dXJuIC1FTk9CVUZTO1xuIFxuK1x0aWYgKHNrYl9kc3Qoc2tiKSBcdTAwMjZcdTAwMjYgIXNrYl9kc3RfZm9yY2Uoc2tiKSlcbitcdFx0cmV0dXJuIC1FSE9TVFVOUkVBQ0g7XG4rXG4gXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCB4ZnJtX3RyYW5zX2NiKSBcdTAwM2Ugc2l6ZW9mKHNrYi1cdTAwM2VjYikpO1xuIFxuIFx0aG9sZF9uZXQgPSBtYXliZV9nZXRfbmV0KG5ldCk7XG4gXHRpZiAoIWhvbGRfbmV0KVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbitcdGlmIChza2ItXHUwMDNlZGV2KVxuK1x0XHRkZXZfaG9sZChza2ItXHUwMDNlZGV2KTtcbitcbiBcdFhGUk1fVFJBTlNfU0tCX0NCKHNrYiktXHUwMDNlZmluaXNoID0gZmluaXNoO1xuIFx0WEZSTV9UUkFOU19TS0JfQ0Ioc2tiKS1cdTAwM2VuZXQgPSBob2xkX25ldDtcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZ0cmFucy1cdTAwM2VxdWV1ZV9sb2NrKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjI2OjIwLjQwNDEzOTcwNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwMzc2NjYyNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2ggdG8gbmV0L3hmcm0veGZybV9pbnB1dC5jKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgbGlrZSB3ZSBoYXZlIHNvbWUgaW1wb3J0YW50IG1vZGlmaWNhdGlvbnMgdG8gYG5ldC94ZnJtL3hmcm1faW5wdXQuY2AuIFNwZWNpZmljYWxseSwgdGhlIGNvZGUgdG91Y2hlcyBib3RoIGB4ZnJtX3RyYW5zX3JlaW5qZWN0YCBhbmQgYHhmcm1fdHJhbnNfcXVldWVfbmV0YC4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IHdlJ3JlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZSwgbGlrZWx5IGEgdXNlLWFmdGVyLWZyZWUgb3Igc29tZXRoaW5nIHNpbWlsYXIgaW52b2x2aW5nIGBza2ItXHUwMDNlZGV2YCBhbmQgYHNrYl9kc3RgIHdpdGhpbiB0aGUgWEZSTSBpbnB1dCBwcm9jZXNzaW5nIHBhdGguXG5cbkxldCdzIGJyZWFrIGRvd24gdGhlIGNoYW5nZXM6IEluIGB4ZnJtX3RyYW5zX3JlaW5qZWN0YCwgdGhlIGludHJvZHVjdGlvbiBvZiBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYCBhcm91bmQgdGhlIHdoaWxlIGxvb3AgaXMgYSBrZXkgaW5kaWNhdG9yLiBJdCdzIHByb3RlY3RpbmcgdGhlIGRhdGEgYmVpbmcgYWNjZXNzZWQgd2l0aGluIHRoZSBsb29wLiBFeHRyYWN0aW5nIGBkZXYgPSBza2ItXHUwMDNlZGV2YCBhbmQgY2FsbGluZyBgZGV2X3B1dChkZXYpYCB3aGVuIGBkZXZgIGlzbid0IG51bGwgYWxzbyBsb29rcyBsaWtlIGl0J3MgYWRkcmVzc2luZyBhIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZSB0byBlbnN1cmUgdGhlIGRldmljZSBpcyBwcm9wZXJseSByZWxlYXNlZC5cblxuTm93LCBpbiBgeGZybV90cmFuc19xdWV1ZV9uZXRgLCB0aGUgYWRkaXRpb24gb2YgYGlmIChza2JfZHN0KHNrYikgXHUwMDI2XHUwMDI2ICFza2JfZHN0X2ZvcmNlKHNrYikpIHJldHVybiAtRUhPU1RVTlJFQUNIO2Agc3VnZ2VzdHMgYSBjaGFuZ2UgaW4gaG93IHdlIGhhbmRsZSB1bnJlYWNoYWJsZSBkZXN0aW5hdGlvbnMgd2l0aGluIHRoYXQgcGF0aC4gTW9yZSBpbnRlcmVzdGluZ2x5LCBgaWYgKHNrYi1cdTAwM2VkZXYpIGRldl9ob2xkKHNrYi1cdTAwM2VkZXYpO2AgaXMgdGhlcmUgdG8gYnVtcCB0aGUgZGV2aWNlIHJlZmVyZW5jZSBjb3VudC4gSXQgc2VlbXMgdG8gcGFpciB3ZWxsIHdpdGggdGhlIGBkZXZfcHV0YCBpbiB0aGUgb3RoZXIgZnVuY3Rpb24uXG5cblNvLCB0aGlzIGxvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIHBhdGNoIHRvIG1lLCB0YXJnZXRpbmcgdGhlIFhGUk0gc3Vic3lzdGVtLiBJJ20gZ29pbmcgdG8gZGlnIGEgbGl0dGxlIGRlZXBlciBub3cuIEknbGwgZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIHNlZSB3aGF0IGNvbmZpZyBvcHRpb25zIGNvbnRyb2wgdGhlc2UgZnVuY3Rpb25zLCBhbmQgSSdsbCBkb3VibGUtY2hlY2sgdGhlIGV4YWN0IGNvbnRleHQgYXJvdW5kIHRoZXNlIGZ1bmN0aW9ucyB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSByb290IGNhdXNlIG9mIHRoZSBwcm9ibGVtIGFuZCBlbnN1cmUgdGhlIGZpeCBpcyBjb21wbGV0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM0MSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjI2OjI2LjQ0MTgxMDIxOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mzc2NjExNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX3RyYW5zX3F1ZXVlX25ldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9pbnB1dC5jPTc5MT1zdGF0aWMgdm9pZCB4ZnJtX3RyYW5zX3JlaW5qZWN0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy04MTYtXFxubmV0L3hmcm0veGZybV9pbnB1dC5jOjgxNzppbnQgeGZybV90cmFuc19xdWV1ZV9uZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy04MTgtXFx0XFx0XFx0IGludCAoKmZpbmlzaCkoc3RydWN0IG5ldCAqLCBzdHJ1Y3Qgc29jayAqLFxcbi0tXFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTg0OC19XFxubmV0L3hmcm0veGZybV9pbnB1dC5jOjg0OTpFWFBPUlRfU1lNQk9MKHhmcm1fdHJhbnNfcXVldWVfbmV0KTtcXG5uZXQveGZybS94ZnJtX2lucHV0LmMtODUwLVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYz04NTE9aW50IHhmcm1fdHJhbnNfcXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy04NTQte1xcbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo4NTU6XFx0cmV0dXJuIHhmcm1fdHJhbnNfcXVldWVfbmV0KGRldl9uZXQoc2tiLVxcdTAwM2VkZXYpLCBza2IsIGZpbmlzaCk7XFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTg1Ni19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjI2OjI2LjUwNTU4MjgyM1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDk1MTIwNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgeGZybV90cmFuc19xdWV1ZV9uZXRgIGFuZCBgeGZybV90cmFuc19yZWluamVjdGAqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSB0d28gZnVuY3Rpb25zLCBgeGZybV90cmFuc19xdWV1ZV9uZXRgIGFuZCBgeGZybV90cmFuc19yZWluamVjdGAuIEludGVyZXN0aW5nLiBBbmQsIG9mIGNvdXJzZSwgYHhmcm1fdHJhbnNfcXVldWVfbmV0YCBpcyBleHBvcnRlZCwgbWVhbmluZyBpdCdzIGludGVuZGVkIGZvciB1c2Ugb3V0c2lkZSBpdHMgaW1tZWRpYXRlIG1vZHVsZS4gVGhhdCBhbHdheXMgcGlxdWVzIG15IGludGVyZXN0IOKAkyB3aGF0J3MgdXNpbmcgaXQsIGFuZCBob3c/IEdpdmVuIHRoYXQgaXQncyBleHBvcnRlZCwgSSBzaG91bGQgcmVhbGx5IHVuZGVyc3RhbmQgaXRzIGJyb2FkZXIgaW1wbGljYXRpb25zIHdpdGhpbiB0aGUgc3lzdGVtLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgY29uZmlndXJhdGlvbi4gTGV0J3Mgc2VlIHdoYXQgY29uZmlnIG9wdGlvbnMgYXJlIHJlc3BvbnNpYmxlIGZvciBlbmFibGluZyB0aGUgc291cmNlIGZpbGUsIHdoaWNoIEkgYmVsaWV2ZSBpcyBgbmV0L3hmcm0veGZybV9pbnB1dC5jYC4gVGhhdCdsbCB0ZWxsIG1lIHRoZSBjb250ZXh0IGluIHdoaWNoIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXZlbiAqYXZhaWxhYmxlKiwgYW5kIHBvdGVudGlhbGx5IGdpdmUgbWUgc29tZSBjbHVlcyBhYm91dCB0aGVpciBwdXJwb3NlIHdpdGhpbiB0aGUgbGFyZ2VyIHhmcm0gZnJhbWV3b3JrLiBLbm93aW5nIHRoZSBjb25maWcgb3B0aW9ucyB3aWxsIGhlbHAgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWMgZGVwbG95bWVudCBzY2VuYXJpb3MgZm9yIHRoZXNlLiBXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGJlaW5nIGVuYWJsZWQsIGFuZCBpbiB3aGF0IGNvbnRleHQ/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzODUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMDoyNjoyOS45NTUwOTg1MTlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ1MTgzODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9pbnB1dFxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0vTWFrZWZpbGU9MTQ9b2JqLSQoQ09ORklHX1hGUk0pIDo9IHhmcm1fcG9saWN5Lm8geGZybV9zdGF0ZS5vIHhmcm1faGFzaC5vIFxcXFxcXG5uZXQveGZybS9NYWtlZmlsZToxNTpcXHRcXHQgICAgICB4ZnJtX2lucHV0Lm8geGZybV9vdXRwdXQubyBcXFxcXFxubmV0L3hmcm0vTWFrZWZpbGUtMTYtXFx0XFx0ICAgICAgeGZybV9zeXNjdGwubyB4ZnJtX3JlcGxheS5vIHhmcm1fZGV2aWNlLm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMDoyNjozMC4wMjk2MjMwNzFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDM3NzYxODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gdGhlIFhGUk0gQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgcmV2b2x2ZXMgYXJvdW5kIHRoZSBgQ09ORklHX1hGUk1gIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBJdCdzIGNydWNpYWwsIHdoZW4gZGVhbGluZyB3aXRoIGtlcm5lbCBjb25maWd1cmF0aW9uLCB0byBrbm93IHdoYXQgb3RoZXIgY29tcG9uZW50cyBvciBmZWF0dXJlcyB0aGlzIHNldHRpbmcgcmVsaWVzIHVwb24uIEtub3dpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIHdpbGwgaW5mb3JtIGFueSBkZWNpc2lvbnMgYWJvdXQgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGl0LCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgaXQgaGVscHMgaW4gdW5kZXJzdGFuZGluZyB0aGUgYnJvYWRlciBpbXBsaWNhdGlvbnMgb2YgaXRzIHVzZSB3aXRoaW4gdGhlIHN5c3RlbSdzIHNlY3VyaXR5IGFuZCBuZXR3b3JraW5nIGFyY2hpdGVjdHVyZS4gU28sIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkZWx2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCB0cmFjZSB3aGF0IG90aGVyIHNldHRpbmdzIGBDT05GSUdfWEZSTWAgaXMgdGllZCB0by4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gaGllcmFyY2h5LiBUaGF0IHdheSBJIGNhbiBtYWtlIHNvdW5kIGRlY2lzaW9ucyBhYm91dCB0aGUgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODI2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjA6MjY6MzMuMDY3Mzg4MDVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk4OTk5MDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFhGUk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL0tjb25maWctNC0jXFxubmV0L3hmcm0vS2NvbmZpZzo1OmNvbmZpZyBYRlJNXFxubmV0L3hmcm0vS2NvbmZpZy02LVxcdGJvb2xcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTAtXFxubmV0L3hmcm0vS2NvbmZpZzoxMTpjb25maWcgWEZSTV9PRkZMT0FEXFxubmV0L3hmcm0vS2NvbmZpZy0xMi1cXHRib29sXFxubmV0L3hmcm0vS2NvbmZpZy0xMy1cXG5uZXQveGZybS9LY29uZmlnOjE0OmNvbmZpZyBYRlJNX0FMR09cXG5uZXQveGZybS9LY29uZmlnLTE1LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTIyPWlmIElORVRcXG5uZXQveGZybS9LY29uZmlnOjIzOmNvbmZpZyBYRlJNX1VTRVJcXG5uZXQveGZybS9LY29uZmlnLTI0LVxcdHRyaXN0YXRlIFxcXCJUcmFuc2Zvcm1hdGlvbiB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0zMS1cXG5uZXQveGZybS9LY29uZmlnOjMyOmNvbmZpZyBYRlJNX1VTRVJfQ09NUEFUXFxubmV0L3hmcm0vS2NvbmZpZy0zMy1cXHR0cmlzdGF0ZSBcXFwiQ29tcGF0aWJsZSBBQkkgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctNDItXFxubmV0L3hmcm0vS2NvbmZpZzo0Mzpjb25maWcgWEZSTV9JTlRFUkZBQ0VcXG5uZXQveGZybS9LY29uZmlnLTQ0LVxcdHRyaXN0YXRlIFxcXCJUcmFuc2Zvcm1hdGlvbiB2aXJ0dWFsIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctNTAtXFxubmV0L3hmcm0vS2NvbmZpZzo1MTpjb25maWcgWEZSTV9TVUJfUE9MSUNZXFxubmV0L3hmcm0vS2NvbmZpZy01Mi1cXHRib29sIFxcXCJUcmFuc2Zvcm1hdGlvbiBzdWIgcG9saWN5IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTYwLVxcbm5ldC94ZnJtL0tjb25maWc6NjE6Y29uZmlnIFhGUk1fTUlHUkFURVxcbm5ldC94ZnJtL0tjb25maWctNjItXFx0Ym9vbCBcXFwiVHJhbnNmb3JtYXRpb24gbWlncmF0ZSBkYXRhYmFzZVxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctNzEtXFxubmV0L3hmcm0vS2NvbmZpZzo3Mjpjb25maWcgWEZSTV9TVEFUSVNUSUNTXFxubmV0L3hmcm0vS2NvbmZpZy03My1cXHRib29sIFxcXCJUcmFuc2Zvcm1hdGlvbiBzdGF0aXN0aWNzXFxcIlxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy04My0jIFJGQyA4MjIxIGxpc3RzIGFzIE1VU1QgYmUgaW1wbGVtZW50ZWQuXFxubmV0L3hmcm0vS2NvbmZpZzo4NDpjb25maWcgWEZSTV9BSFxcbm5ldC94ZnJtL0tjb25maWctODUtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctOTItIyBhbGdvcml0aG1zIHRoYXQgUkZDIDgyMjEgbGlzdHMgYXMgTVVTVCBiZSBpbXBsZW1lbnRlZC5cXG5uZXQveGZybS9LY29uZmlnOjkzOmNvbmZpZyBYRlJNX0VTUFxcbm5ldC94ZnJtL0tjb25maWctOTQtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTA1LVxcbm5ldC94ZnJtL0tjb25maWc6MTA2OmNvbmZpZyBYRlJNX0lQQ09NUFxcbm5ldC94ZnJtL0tjb25maWctMTA3LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTEyNT1jb25maWcgTkVUX0tFWV9NSUdSQVRFXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTE0MC1cXG5uZXQveGZybS9LY29uZmlnOjE0MTpjb25maWcgWEZSTV9JUFRGU1xcbm5ldC94ZnJtL0tjb25maWctMTQyLVxcdHRyaXN0YXRlIFxcXCJJUHNlYyBJUC1URlMvQUdHRlJBRyAoUkZDIDkzNDcpIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTU2LVxcbm5ldC94ZnJtL0tjb25maWc6MTU3OmNvbmZpZyBYRlJNX0VTUElOVENQXFxubmV0L3hmcm0vS2NvbmZpZy0xNTgtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMDoyNjozMy4xMzcyOTU2MjNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjIxMDU4OTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIFhGUk0qKlxuXG5Pa2F5LCBzbyBgWEZSTWAgaXMgYSBib29sZWFuIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IGl0J3MgcHJvYmFibHkgKnNlbGVjdGVkKiBieSBhIG51bWJlciBvZiBvdGhlciBvcHRpb25zLCB0aGluZ3MgbGlrZSBgSU5FVGAsIGBYRlJNX1VTRVJgLCBtYXliZSBgSU5FVF9FU1BgLCB0aGF0IGtpbmQgb2YgdGhpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgaGVyZS4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgaW50byB3aGF0IGV4YWN0bHkgdHJpZ2dlcnMgdGhlIGVuYWJsaW5nIG9mIGBYRlJNYC4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSBgWEZSTWAgYW5kIHNlZSB3aGF0IHRoZSB1cHN0cmVhbSBvcHRpb25zIGFyZS4gVW5kZXJzdGFuZGluZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCBmb3IgYSByb2J1c3QgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg0NCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjI2OjM2LjM1ODM1NzkzNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5Mzc4OTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBYRlJNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz0zMDQ9Y29uZmlnIE5FVF9JUFZUSVxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zMDctXFx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcXG5uZXQvaXB2NC9LY29uZmlnOjMwODpcXHRzZWxlY3QgWEZSTVxcbm5ldC9pcHY0L0tjb25maWctMzA5LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9MzM5PWNvbmZpZyBJTkVUX0FIXFxubmV0L2lwdjQvS2NvbmZpZy0zNDAtXFx0dHJpc3RhdGUgXFxcIklQOiBBSCB0cmFuc2Zvcm1hdGlvblxcXCJcXG5uZXQvaXB2NC9LY29uZmlnOjM0MTpcXHRzZWxlY3QgWEZSTV9BSFxcbm5ldC9pcHY0L0tjb25maWctMzQyLVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9MzU0PWNvbmZpZyBJTkVUX0VTUFxcbm5ldC9pcHY0L0tjb25maWctMzU1LVxcdHRyaXN0YXRlIFxcXCJJUDogRVNQIHRyYW5zZm9ybWF0aW9uXFxcIlxcbm5ldC9pcHY0L0tjb25maWc6MzU2OlxcdHNlbGVjdCBYRlJNX0VTUFxcbm5ldC9pcHY0L0tjb25maWctMzU3LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9MzY5PWNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM3MS1cXHRkZXBlbmRzIG9uIElORVRfRVNQXFxubmV0L2lwdjQvS2NvbmZpZzozNzI6XFx0c2VsZWN0IFhGUk1fT0ZGTE9BRFxcbm5ldC9pcHY0L0tjb25maWctMzczLVxcdGRlZmF1bHQgblxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZz0zODI9Y29uZmlnIElORVRfRVNQSU5UQ1BcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzg2LVxcdHNlbGVjdCBORVRfU09DS19NU0dcXG5uZXQvaXB2NC9LY29uZmlnOjM4NzpcXHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxcbm5ldC9pcHY0L0tjb25maWctMzg4LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9Mzk0PWNvbmZpZyBJTkVUX0lQQ09NUFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zOTYtXFx0c2VsZWN0IElORVRfWEZSTV9UVU5ORUxcXG5uZXQvaXB2NC9LY29uZmlnOjM5NzpcXHRzZWxlY3QgWEZSTV9JUENPTVBcXG5uZXQvaXB2NC9LY29uZmlnLTM5OC1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTQ3PWNvbmZpZyBJTkVUNl9BSFxcbm5ldC9pcHY2L0tjb25maWctNDgtXFx0dHJpc3RhdGUgXFxcIklQdjY6IEFIIHRyYW5zZm9ybWF0aW9uXFxcIlxcbm5ldC9pcHY2L0tjb25maWc6NDk6XFx0c2VsZWN0IFhGUk1fQUhcXG5uZXQvaXB2Ni9LY29uZmlnLTUwLVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9NjI9Y29uZmlnIElORVQ2X0VTUFxcbm5ldC9pcHY2L0tjb25maWctNjMtXFx0dHJpc3RhdGUgXFxcIklQdjY6IEVTUCB0cmFuc2Zvcm1hdGlvblxcXCJcXG5uZXQvaXB2Ni9LY29uZmlnOjY0OlxcdHNlbGVjdCBYRlJNX0VTUFxcbm5ldC9pcHY2L0tjb25maWctNjUtXFx0aGVscFxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz03Nz1jb25maWcgSU5FVDZfRVNQX09GRkxPQURcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctNzktXFx0ZGVwZW5kcyBvbiBJTkVUNl9FU1BcXG5uZXQvaXB2Ni9LY29uZmlnOjgwOlxcdHNlbGVjdCBYRlJNX09GRkxPQURcXG5uZXQvaXB2Ni9LY29uZmlnLTgxLVxcdGRlZmF1bHQgblxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz05MD1jb25maWcgSU5FVDZfRVNQSU5UQ1BcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctOTQtXFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbm5ldC9pcHY2L0tjb25maWc6OTU6XFx0c2VsZWN0IFhGUk1fRVNQSU5UQ1BcXG5uZXQvaXB2Ni9LY29uZmlnLTk2LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9MTAyPWNvbmZpZyBJTkVUNl9JUENPTVBcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTA0LVxcdHNlbGVjdCBJTkVUNl9YRlJNX1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWc6MTA1OlxcdHNlbGVjdCBYRlJNX0lQQ09NUFxcbm5ldC9pcHY2L0tjb25maWctMTA2LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9MTEyPWNvbmZpZyBJUFY2X01JUDZcXG5uZXQvaXB2Ni9LY29uZmlnLTExMy1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogTW9iaWxpdHlcXFwiXFxubmV0L2lwdjYvS2NvbmZpZzoxMTQ6XFx0c2VsZWN0IFhGUk1cXG5uZXQvaXB2Ni9LY29uZmlnLTExNS1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTE1MD1jb25maWcgSVBWNl9WVElcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTUzLVxcdHNlbGVjdCBORVRfSVBfVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZzoxNTQ6XFx0c2VsZWN0IFhGUk1cXG5uZXQvaXB2Ni9LY29uZmlnLTE1NS1cXHRoZWxwXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTE0PWNvbmZpZyBYRlJNX0FMR09cXG5uZXQveGZybS9LY29uZmlnLTE1LVxcdHRyaXN0YXRlXFxubmV0L3hmcm0vS2NvbmZpZzoxNjpcXHRzZWxlY3QgWEZSTVxcbm5ldC94ZnJtL0tjb25maWctMTctXFx0c2VsZWN0IENSWVBUT1xcbi0tXFxubmV0L3hmcm0vS2NvbmZpZz0yMz1jb25maWcgWEZSTV9VU0VSXFxubmV0L3hmcm0vS2NvbmZpZy0yNC1cXHR0cmlzdGF0ZSBcXFwiVHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVxcXCJcXG5uZXQveGZybS9LY29uZmlnOjI1OlxcdHNlbGVjdCBYRlJNX0FMR09cXG5uZXQveGZybS9LY29uZmlnLTI2LVxcdGhlbHBcXG4tLVxcbm5ldC94ZnJtL0tjb25maWc9ODQ9Y29uZmlnIFhGUk1fQUhcXG5uZXQveGZybS9LY29uZmlnLTg1LVxcdHRyaXN0YXRlXFxubmV0L3hmcm0vS2NvbmZpZzo4NjpcXHRzZWxlY3QgWEZSTV9BTEdPXFxubmV0L3hmcm0vS2NvbmZpZy04Ny1cXHRzZWxlY3QgQ1JZUFRPXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTkzPWNvbmZpZyBYRlJNX0VTUFxcbm5ldC94ZnJtL0tjb25maWctOTQtXFx0dHJpc3RhdGVcXG5uZXQveGZybS9LY29uZmlnOjk1OlxcdHNlbGVjdCBYRlJNX0FMR09cXG5uZXQveGZybS9LY29uZmlnLTk2LVxcdHNlbGVjdCBDUllQVE9cXG4tLVxcbm5ldC94ZnJtL0tjb25maWc9MTA2PWNvbmZpZyBYRlJNX0lQQ09NUFxcbm5ldC94ZnJtL0tjb25maWctMTA3LVxcdHRyaXN0YXRlXFxubmV0L3hmcm0vS2NvbmZpZzoxMDg6XFx0c2VsZWN0IFhGUk1fQUxHT1xcbm5ldC94ZnJtL0tjb25maWctMTA5LVxcdHNlbGVjdCBDUllQVE9cXG4tLVxcbm5ldC94ZnJtL0tjb25maWc9MTEyPWNvbmZpZyBORVRfS0VZXFxubmV0L3hmcm0vS2NvbmZpZy0xMTMtXFx0dHJpc3RhdGUgXFxcIlBGX0tFWSBzb2NrZXRzIChkZXByZWNhdGVkKVxcXCJcXG5uZXQveGZybS9LY29uZmlnOjExNDpcXHRzZWxlY3QgWEZSTV9BTEdPXFxubmV0L3hmcm0vS2NvbmZpZy0xMTUtXFx0aGVscFxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZz0xMjU9Y29uZmlnIE5FVF9LRVlfTUlHUkFURVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0xMjctXFx0ZGVwZW5kcyBvbiBORVRfS0VZXFxubmV0L3hmcm0vS2NvbmZpZzoxMjg6XFx0c2VsZWN0IFhGUk1fTUlHUkFURVxcbm5ldC94ZnJtL0tjb25maWctMTI5LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjA6MjY6MzYuNDg3NzQzMzJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg4MjI4MjI5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipYRlJNIE1vZHVsZSBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIFhGUk0gc3R1ZmYsIGFuZCBpdCBsb29rcyBsaWtlIGVuYWJsaW5nIGBDT05GSUdfWEZSTV9VU0VSYCBpcyB0aGUga2V5IHRvIGdldHRpbmcgWEZSTSB1cCBhbmQgcnVubmluZywgbGlrZWx5IGFsb25nc2lkZSBlaXRoZXIgYENPTkZJR19JTkVUX0VTUGAgb3IgYENPTkZJR19JTkVUX0FIYC4gU2VlbXMgbGlrZSBgWEZSTV9VU0VSYCBpcyB0aGUgd2F5IHRvIGdvIGhlcmUuIEknbGwgc3RpY2sgd2l0aCB0aGF0LlxuXG5JIHNlZSB0aGF0IHRoZSBjaGFuZ2VzIGFyZSBoaXR0aW5nIGB4ZnJtX3RyYW5zX3JlaW5qZWN0YCBhbmQgYHhmcm1fdHJhbnNfcXVldWVfbmV0YC4gYHhmcm1fdHJhbnNfcXVldWVfbmV0YCBpcyBjYWxsZWQgYnkgYHhmcm1fdHJhbnNfcXVldWVgLCB3aGljaCBzdWdnZXN0cyB0aGVyZSdzIHNvbWUgc29ydCBvZiBxdWV1aW5nIHByb2Nlc3MgaW52b2x2ZWQuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0LiBMZXQncyB0cmFjZSBiYWNrIHdoZXJlIGB4ZnJtX3RyYW5zX3F1ZXVlYCBpcyBiZWluZyBjYWxsZWQgZnJvbSB0byBncmFzcCB0aGUgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjA3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjI2OjQwLjM3MDAyODg1MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYzOTIwMjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV90cmFuc19xdWV1ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9pbnB1dC5jPTc5MT1zdGF0aWMgdm9pZCB4ZnJtX3RyYW5zX3JlaW5qZWN0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy04MTYtXFxubmV0L3hmcm0veGZybV9pbnB1dC5jOjgxNzppbnQgeGZybV90cmFuc19xdWV1ZV9uZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy04MTgtXFx0XFx0XFx0IGludCAoKmZpbmlzaCkoc3RydWN0IG5ldCAqLCBzdHJ1Y3Qgc29jayAqLFxcbi0tXFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTg0OC19XFxubmV0L3hmcm0veGZybV9pbnB1dC5jOjg0OTpFWFBPUlRfU1lNQk9MKHhmcm1fdHJhbnNfcXVldWVfbmV0KTtcXG5uZXQveGZybS94ZnJtX2lucHV0LmMtODUwLVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo4NTE6aW50IHhmcm1fdHJhbnNfcXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQveGZybS94ZnJtX2lucHV0LmMtODUyLVxcdFxcdCAgICAgaW50ICgqZmluaXNoKShzdHJ1Y3QgbmV0ICosIHN0cnVjdCBzb2NrICosXFxuLS1cXG5uZXQveGZybS94ZnJtX2lucHV0LmMtODU0LXtcXG5uZXQveGZybS94ZnJtX2lucHV0LmM6ODU1OlxcdHJldHVybiB4ZnJtX3RyYW5zX3F1ZXVlX25ldChkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KSwgc2tiLCBmaW5pc2gpO1xcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy04NTYtfVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo4NTc6RVhQT1JUX1NZTUJPTCh4ZnJtX3RyYW5zX3F1ZXVlKTtcXG5uZXQveGZybS94ZnJtX2lucHV0LmMtODU4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMDoyNjo0MC40NDY0MjY0MDRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMzNTk4MTg5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgc2VhcmNoOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBDb2RlYmFzZTogVGhlIHhmcm1fdHJhbnNfcXVldWUgSHVudCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IGRpZ2dpbmcuIEkgbmVlZCB0byBmaW5kIGFsbCBpbnN0YW5jZXMgb2YgYHhmcm1fdHJhbnNfcXVldWVgIHdpdGhpbiB0aGlzIGVudGlyZSBjb2RlYmFzZS4gVGhpcyBsaWtlbHkgcmVsYXRlcyB0byBob3cgSVBzZWMgdHJhbnNmb3JtcyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IGhvdyBwYWNrZXRzIGFyZSBxdWV1ZWQgZm9yIHByb2Nlc3NpbmcuIEknbSBhc3N1bWluZyB0aGF0IGl0IGlzIG5vdCB1c2VkIGluIGEgbG90IG9mIHBsYWNlcyBiZWNhdXNlIEkgaGF2ZSBub3Qgd29ya2VkIHdpdGggaXQgYmVmb3JlLiBJJ2xsIG5lZWQgdG8gdXNlIG15IHVzdWFsIHNlYXJjaCB0b29scyBhbmQgbG9vayBpbiBhbGwgZmlsZXMuIFRpbWUgdG8gcnVuIGEgZ2xvYmFsIHNlYXJjaC4gTGV0J3Mgc2VlIHdoYXQgdHVybnMgdXAuIEknbSBleHBlY3RpbmcgdG8gZmluZCBpdCBpbiB0aGUgY29yZSB0cmFuc2Zvcm0gY29kZSwgcGVyaGFwcyBhcm91bmQgdGhlIG5ldHdvcmtpbmcgc3RhY2ssIGFuZCBtYXliZSBpbiBzb21lIHNwZWNpZmljIGRldmljZSBkcml2ZXJzIGlmIHRoZXkncmUgZGlyZWN0bHkgaW52b2x2ZWQgaW4gb2ZmbG9hZGluZyBvciBtYW5pcHVsYXRpbmcgdGhlc2UgdHJhbnNmb3JtIHF1ZXVlcy4gSSdtIGFsc28gY3VyaW91cyB0byBzZWUgaWYgaXQncyB1c2VkIHdpdGggYW55IHNwZWNpZmljIGNyeXB0byBoYXJkd2FyZSBvciB3aGV0aGVyIGl0J3MgbW9yZSBnZW5lcmFsIHB1cnBvc2UuIExldCdzIGdldCB0byBpdCFcblxuXG4iLCJJbnB1dFRva2VucyI6NzMyMSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjI2OjQzLjc4MjQxMDk4MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUyMzM3MjY3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX3RyYW5zX3F1ZXVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC94ZnJtLmg9MTc5OT1pbnQgeGZybV9pbnB1dF9yZXN1bWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIpO1xcbmluY2x1ZGUvbmV0L3hmcm0uaDoxODAwOmludCB4ZnJtX3RyYW5zX3F1ZXVlX25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxuaW5jbHVkZS9uZXQveGZybS5oLTE4MDEtXFx0XFx0XFx0IGludCAoKmZpbmlzaCkoc3RydWN0IG5ldCAqLCBzdHJ1Y3Qgc29jayAqLFxcbmluY2x1ZGUvbmV0L3hmcm0uaC0xODAyLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqKSk7XFxuaW5jbHVkZS9uZXQveGZybS5oOjE4MDM6aW50IHhmcm1fdHJhbnNfcXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5pbmNsdWRlL25ldC94ZnJtLmgtMTgwNC1cXHRcXHQgICAgIGludCAoKmZpbmlzaCkoc3RydWN0IG5ldCAqLCBzdHJ1Y3Qgc29jayAqLFxcbi0tXFxubmV0L2lwdjQvZXNwNC5jPTE4OD1zdGF0aWMgaW50IGVzcF9vdXRwdXRfdGFpbF90Y3Aoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC9lc3A0LmMtMTkyLVxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG5uZXQvaXB2NC9lc3A0LmM6MTkzOlxcdGVyciA9IHhmcm1fdHJhbnNfcXVldWVfbmV0KHhzX25ldCh4KSwgc2tiLCBlc3Bfb3V0cHV0X3RjcF9lbmNhcF9jYik7XFxubmV0L2lwdjQvZXNwNC5jLTE5NC1cXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4tLVxcbm5ldC9pcHY0L3hmcm00X2lucHV0LmM9Mjk9c3RhdGljIGlubGluZSBpbnQgeGZybTRfcmN2X2VuY2FwX2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3hmcm00X2lucHV0LmMtMzktXFxubmV0L2lwdjQveGZybTRfaW5wdXQuYzo0MDpcXHRpZiAoeGZybV90cmFuc19xdWV1ZShza2IsIHhmcm00X3Jjdl9lbmNhcF9maW5pc2gyKSlcXG5uZXQvaXB2NC94ZnJtNF9pbnB1dC5jLTQxLVxcdFxcdGdvdG8gZHJvcDtcXG4tLVxcbm5ldC9pcHY2L2VzcDYuYz0yMDU9c3RhdGljIGludCBlc3Bfb3V0cHV0X3RhaWxfdGNwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvZXNwNi5jLTIwOS1cXHRsb2NhbF9iaF9kaXNhYmxlKCk7XFxubmV0L2lwdjYvZXNwNi5jOjIxMDpcXHRlcnIgPSB4ZnJtX3RyYW5zX3F1ZXVlX25ldCh4c19uZXQoeCksIHNrYiwgZXNwX291dHB1dF90Y3BfZW5jYXBfY2IpO1xcbm5ldC9pcHY2L2VzcDYuYy0yMTEtXFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuLS1cXG5uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jPTMyPXN0YXRpYyBpbnQgeGZybTZfdHJhbnNwb3J0X2ZpbmlzaDIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jLTM0LXtcXG5uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jOjM1OlxcdGlmICh4ZnJtX3RyYW5zX3F1ZXVlKHNrYiwgaXA2X3Jjdl9maW5pc2gpKSB7XFxubmV0L2lwdjYveGZybTZfaW5wdXQuYy0zNi1cXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYz03OTE9c3RhdGljIHZvaWQgeGZybV90cmFuc19yZWluamVjdChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQveGZybS94ZnJtX2lucHV0LmMtODE2LVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo4MTc6aW50IHhmcm1fdHJhbnNfcXVldWVfbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQveGZybS94ZnJtX2lucHV0LmMtODE4LVxcdFxcdFxcdCBpbnQgKCpmaW5pc2gpKHN0cnVjdCBuZXQgKiwgc3RydWN0IHNvY2sgKixcXG4tLVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy04NDgtfVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo4NDk6RVhQT1JUX1NZTUJPTCh4ZnJtX3RyYW5zX3F1ZXVlX25ldCk7XFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTg1MC1cXG5uZXQveGZybS94ZnJtX2lucHV0LmM6ODUxOmludCB4ZnJtX3RyYW5zX3F1ZXVlKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTg1Mi1cXHRcXHQgICAgIGludCAoKmZpbmlzaCkoc3RydWN0IG5ldCAqLCBzdHJ1Y3Qgc29jayAqLFxcbi0tXFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTg1NC17XFxubmV0L3hmcm0veGZybV9pbnB1dC5jOjg1NTpcXHRyZXR1cm4geGZybV90cmFuc19xdWV1ZV9uZXQoZGV2X25ldChza2ItXFx1MDAzZWRldiksIHNrYiwgZmluaXNoKTtcXG5uZXQveGZybS94ZnJtX2lucHV0LmMtODU2LX1cXG5uZXQveGZybS94ZnJtX2lucHV0LmM6ODU3OkVYUE9SVF9TWU1CT0woeGZybV90cmFuc19xdWV1ZSk7XFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTg1OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjA6MjY6NDYuMzA1NzkwODg2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NDQyNDg5OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVHJhY2luZyB0aGUgQ2FsbHMgdG8gYHhmcm1fdHJhbnNfcXVldWVgIGFuZCBgeGZybV90cmFuc19xdWV1ZV9uZXRgKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGVzZSBmdW5jdGlvbnMsIGB4ZnJtX3RyYW5zX3F1ZXVlX25ldGAgYW5kIGB4ZnJtX3RyYW5zX3F1ZXVlYC4gSSBrbm93IHRoZXkncmUgYWNjZXNzaWJsZSBmcm9tIGEgZmV3IGtleSBwbGFjZXM6IGBlc3Bfb3V0cHV0X3RhaWxfdGNwYCwgd2hpY2ggc2VlbXMgdG8gYmUgdGllZCB0byBlaXRoZXIgYENPTkZJR19JTkVUX0VTUElOVENQYCBvciBgQ09ORklHX0lORVQ2X0VTUElOVENQYCwgZGVwZW5kaW5nIG9uIHRoZSBJUHY0L0lQdjYgY29udGV4dCwgYW5kIGFsc28gZnJvbSAgYHhmcm00X3Jjdl9lbmNhcF9maW5pc2hgIGFuZCBgeGZybTZfdHJhbnNwb3J0X2ZpbmlzaDJgLlxuXG5SaWdodCwgbGV0J3MganVzdCBjb25maXJtIHRob3NlIGNvbmZpZyBvcHRpb25zIGZpcnN0LiBMb29rcyBsaWtlIGJvdGggYENPTkZJR19JTkVUX0VTUElOVENQYCBhbmQgYENPTkZJR19JTkVUNl9FU1BJTlRDUGAgc2VsZWN0IGBYRlJNX0VTUElOVENQYCwgd2hpY2ggaXMgd2hhdCBJIHN1c3BlY3RlZC4gR29vZC4gXG5cbk5vdywgZm9jdXNpbmcgb24gYHhmcm00X3Jjdl9lbmNhcF9maW5pc2hgLCBJIHJlbWVtYmVyIHRoYXQgaXQncyB3aXRoaW4gYHhmcm00X2lucHV0LmNgLiBUaGF0IGZpbGUncyBidWlsZCBwcm9jZXNzIHJlbGllcyBvbiBgQ09ORklHX1hGUk1gLCBzbyBJJ2xsIGNoZWNrIGBuZXQvaXB2NC9NYWtlZmlsZWAgdG8gY29uZmlybSBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY2NiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMDoyNjo1MC44NTAwNDI3MDhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0Mzg0MzM1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtNF9pbnB1dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvTWFrZWZpbGU9NjU9b2JqLSQoQ09ORklHX05FVExBQkVMKSArPSBjaXBzb19pcHY0Lm9cXG5uZXQvaXB2NC9NYWtlZmlsZS02Ni1cXG5uZXQvaXB2NC9NYWtlZmlsZTo2NzpvYmotJChDT05GSUdfWEZSTSkgKz0geGZybTRfcG9saWN5Lm8geGZybTRfc3RhdGUubyB4ZnJtNF9pbnB1dC5vIFxcXFxcXG5uZXQvaXB2NC9NYWtlZmlsZS02OC1cXHRcXHQgICAgICB4ZnJtNF9vdXRwdXQubyB4ZnJtNF9wcm90b2NvbC5vXFxuLS1cXG5uZXQvaXB2NC94ZnJtNF9pbnB1dC5jLTItLypcXG5uZXQvaXB2NC94ZnJtNF9pbnB1dC5jOjM6ICogeGZybTRfaW5wdXQuY1xcbm5ldC9pcHY0L3hmcm00X2lucHV0LmMtNC0gKlxcbi0tXFxubmV0L2lwdjQveGZybTRfcHJvdG9jb2wuYz0xOTI9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfcHJvdG9jb2wgaXBjb21wNF9wcm90b2NvbCA9IHtcXG4tLVxcbm5ldC9pcHY0L3hmcm00X3Byb3RvY29sLmMtMTk3LVxcbm5ldC9pcHY0L3hmcm00X3Byb3RvY29sLmM6MTk4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9pbnB1dF9hZmluZm8geGZybTRfaW5wdXRfYWZpbmZvID0ge1xcbm5ldC9pcHY0L3hmcm00X3Byb3RvY29sLmMtMTk5LVxcdC5mYW1pbHlcXHRcXHQ9XFx0QUZfSU5FVCxcXG4tLVxcbm5ldC9pcHY0L3hmcm00X3Byb3RvY29sLmM9MzAzPXZvaWQgX19pbml0IHhmcm00X3Byb3RvY29sX2luaXQodm9pZClcXG5uZXQvaXB2NC94ZnJtNF9wcm90b2NvbC5jLTMwNC17XFxubmV0L2lwdjQveGZybTRfcHJvdG9jb2wuYzozMDU6XFx0eGZybV9pbnB1dF9yZWdpc3Rlcl9hZmluZm8oXFx1MDAyNnhmcm00X2lucHV0X2FmaW5mbyk7XFxubmV0L2lwdjQveGZybTRfcHJvdG9jb2wuYy0zMDYtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMDoyNjo1MC45OTM4OTEzNzNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA3MTcyMzQyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipYRlJNIFN1YnN5c3RlbSBCdWcgRml4IGFuZCBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgdG8gYmUgdGFyZ2V0aW5nIGB4ZnJtNF9pbnB1dC5jYC4gVGhhdCBmaWxlJ3MgYnVpbHQgd2hlbiBgQ09ORklHX1hGUk1gIGlzIGVuYWJsZWQsIHdoaWNoIGlzIHRoZSBmb3VuZGF0aW9uYWwgcGFydCBvZiB0aGUgWEZSTSBzdWJzeXN0ZW0sIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdG8gcGF5IGF0dGVudGlvbiB0by5cblxuVGhlIGNvcmUgb2YgdGhlIGlzc3VlIHNlZW1zIHRvIGNlbnRlciBhcm91bmQgdGhlIGZ1bmN0aW9ucyBgeGZybV90cmFuc19xdWV1ZV9uZXRgIGFuZCBgeGZybV90cmFuc19xdWV1ZWAuIFRoZXNlIGFyZSBkZWZpbml0ZWx5IHJlYWNoYWJsZSBkdXJpbmcgc3RhbmRhcmQgWEZSTSBwcm9jZXNzaW5nIOKAkyBJIGNhbiB0cmFjZSB0aGVtIGluIG15IG1pbmQncyBleWUgdGhyb3VnaCB0aGUgZGF0YSBwYXRocy4gVGhlIHBhdGNoIGl0c2VsZiBpcyBmaXhpbmcgYSBidWcgd2l0aGluIHRob3NlIHR3byBmdW5jdGlvbnMgYW5kIGFsc28gYHhmcm1fdHJhbnNfcmVpbmplY3RgLiBUaGUgZml4IGludm9sdmVzIHRha2luZyBhIHJlZmVyZW5jZSB0byBgc2tiLVx1MDAzZWRldmAgYW5kIGVuc3VyaW5nIHRoZSB2YWxpZGl0eSBvZiBgc2tiX2RzdGAuIE1ha2VzIHNlbnNlLCBwcm90ZWN0aW5nIGFnYWluc3QgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9ucyB3aXRoIHRoZSBzb2NrZXQgYnVmZmVyIGFuZCBkZXZpY2UgaW50ZXJhY3Rpb25zLCBhIGNvbW1vbiBpc3N1ZSBpbiBuZXR3b3JraW5nIGNvZGUuXG5cblRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIFhGUk0gY29yZSwgc28gSSBuZWVkIHRvIGFzc2VzcyBpdHMgaW1wYWN0LiBCYXNlZCBvbiB0aGUgZGVzY3JpcHRpb24sIGFuZCB0aGUgZnVuY3Rpb25zIGFmZmVjdGVkLCB0aGlzIGlzIGRlZmluaXRlbHkgYSBjaGFuZ2UgdGhhdCB3YXJyYW50cyBmdXp6aW5nLiBUaGUgcGF0Y2ggaXMgcHJvYmFibHkgYWRkcmVzc2luZyBhIHN1YnRsZSB2dWxuZXJhYmlsaXR5IGFuZCBpdOKAmXMgYWx3YXlzIGdvb2QgdG8gY2hlY2sgZm9yIHRoYXQuXG5cbkZvciBhIHRhcmdldGVkIGZ1enppbmcgYXBwcm9hY2gsIEknbGwgZm9jdXMgb24gYHhmcm1fdHJhbnNfcXVldWVfbmV0YCBhbmQgYHhmcm1fdHJhbnNfcXVldWVgLiBgeGZybV90cmFuc19yZWluamVjdGAgaXMgYWxzbyBtZW50aW9uZWQuIEl0J3Mgc3RhdGljLCBidXQgaXQncyB1c2VkIGFzIGEgd29ya3F1ZXVlIGNhbGxiYWNrLCBzbyBpdCdzIGEgdG9wLWxldmVsIGZ1bmN0aW9uIGluIGEgd2F5LiBJIHRoaW5rIGl0IG1pZ2h0IGJlIHVzZWZ1bCB0byBmb2N1cyBvbiB0aGUgb3RoZXIgdHdvIGZ1bmN0aW9ucy5cblxuSSBzaG91bGQgYWxzbyBjaGVjayB0aGUgc291cmNlIGNvZGUgZm9yIGB4ZnJtX3RyYW5zX3JlaW5qZWN0YCBpbiBgbmV0L3hmcm0veGZybV9pbnB1dC5jYCBqdXN0IHRvIGJlIHN1cmUuIEkgd2lsbCBwcm9iYWJseSBhbHNvIHdhbnQgdG8gcmV2aWV3IGFueSB0ZXN0cyB0aGF0IGNvdmVyIHRoaXMgbW9kdWxlLCBpZiB0aGV5IGV4aXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTM1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjI2OjU3LjA2NTYxNzQxM1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0OTkzOTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fdHJhbnNfcmVpbmplY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1faW5wdXQuYz03ODk9RVhQT1JUX1NZTUJPTCh4ZnJtX2lucHV0X3Jlc3VtZSk7XFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTc5MC1cXG5uZXQveGZybS94ZnJtX2lucHV0LmM6NzkxOnN0YXRpYyB2b2lkIHhmcm1fdHJhbnNfcmVpbmplY3Qoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy03OTIte1xcbi0tXFxubmV0L3hmcm0veGZybV9pbnB1dC5jPTg1OT12b2lkIF9faW5pdCB4ZnJtX2lucHV0X2luaXQodm9pZClcXG4tLVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy04NzctXFx0XFx0X19za2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZ0cmFucy1cXHUwMDNlcXVldWUpO1xcbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo4Nzg6XFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZ0cmFucy1cXHUwMDNld29yaywgeGZybV90cmFuc19yZWluamVjdCk7XFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTg3OS1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjI2OjU3LjE4MDYxNjM4MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDAzNDM3MDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYnJlYWtkb3duIG9mIHdoYXQncyBnb2luZyBvbiwgdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGNvZGU6XG5cbioqQW5hbHl6aW5nIGB4ZnJtX3RyYW5zX3JlaW5qZWN0YCBhcyBhIFBvdGVudGlhbCBTeW1ib2wqKlxuXG5SaWdodCwgbGV0J3Mgc2VlLCB0aGUgZnVuY3Rpb24gYHhmcm1fdHJhbnNfcmVpbmplY3RgIGlzIGJlaW5nIHBhc3NlZCB0byBgSU5JVF9XT1JLYC4gU2luY2UgaXQncyBub3QgYmVpbmcgaW5saW5lZCBkaXJlY3RseSwgdGhhdCBtZWFucyBpdCdzIGEgcG90ZW50aWFsIGZvY3VzIHN5bWJvbCB0aGF0IGNvdWxkIGJlIGltcG9ydGFudCBmb3IgY29uZmlndXJhdGlvbi5cblxuVGhlcmVmb3JlLCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIG5lY2Vzc2FyeSB0byBoYXZlIHRoaXMgZnVuY3Rpb24gYXZhaWxhYmxlLiBJdCBsb29rcyBsaWtlIHRoZSByZWxldmFudCBvbmVzIGFyZTpcblxuKiAgIGBDT05GSUdfWEZSTV9VU0VSYCAtIE9idmlvdXNseSwgbmVlZHMgdG8gYmUgZW5hYmxlZC5cbiogICBgQ09ORklHX0lORVRfRVNQYCAtIFByb2JhYmx5IHJlbGF0ZWQgdG8gSVBzZWMgRW5jYXBzdWxhdGluZyBTZWN1cml0eSBQYXlsb2FkIChFU1ApLlxuKiAgIGBDT05GSUdfSU5FVF9BSGAgLSBMaWtlbHkgcmVsYXRlZCB0byBJUHNlYyBBdXRoZW50aWNhdGlvbiBIZWFkZXIgKEFIKS5cbiogICBgQ09ORklHX1hGUk1fRVNQSU5UQ1BgIC0gVGhpcyBvbmUgaXMgYSBtYXliZSwgYW5kIEknbGwgbmVlZCB0byBjb25maXJtLiBJdCBhcHBlYXJzIHRvIGJlIHVzaW5nIGB4ZnJtX3RyYW5zX3F1ZXVlX25ldGAgdmlhIGBlc3Bfb3V0cHV0X3RhaWxfdGNwYCwgc28gaXTigJlzIHdvcnRoIGludmVzdGlnYXRpbmcgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIG5lY2Vzc2FyeS5cblxuSSBzaG91bGQgdmVyaWZ5IHRoaXMgYENPTkZJR19YRlJNX0VTUElOVENQYCBjb25uZWN0aW9uIGJ5IGxvb2tpbmcgaW50byBgZXNwX291dHB1dF90YWlsX3RjcGAuIFNvLCBJJ2xsIGNoZWNrIGl0cyBpbXBsZW1lbnRhdGlvbiBpbiBgbmV0L2lwdjQvZXNwNC5jYC4gVGhhdCBzaG91bGQgY2xhcmlmeSB3aGV0aGVyIGl0J3MgdHJ1bHkgZXNzZW50aWFsIGluIHRoaXMgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0OTIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjA6Mjc6MDEuNTg0MDU1OTk3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTIxMjM3NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXNwX291dHB1dF90YWlsX3RjcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvZXNwNC5jPTE3OT1zdGF0aWMgaW50IGVzcF9vdXRwdXRfdGNwX2VuY2FwX2NiKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvZXNwNC5jLTE4Ny1cXG5uZXQvaXB2NC9lc3A0LmM6MTg4OnN0YXRpYyBpbnQgZXNwX291dHB1dF90YWlsX3RjcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2NC9lc3A0LmMtMTg5LXtcXG4tLVxcbm5ldC9pcHY0L2VzcDQuYy0yMDItI2Vsc2VcXG5uZXQvaXB2NC9lc3A0LmM6MjAzOnN0YXRpYyBpbnQgZXNwX291dHB1dF90YWlsX3RjcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2NC9lc3A0LmMtMjA0LXtcXG4tLVxcbm5ldC9pcHY0L2VzcDQuYz0yMTA9c3RhdGljIHZvaWQgZXNwX291dHB1dF9kb25lKHZvaWQgKmRhdGEsIGludCBlcnIpXFxuLS1cXG5uZXQvaXB2NC9lc3A0LmMtMjQxLVxcdFxcdCAgICB4LVxcdTAwM2VlbmNhcCBcXHUwMDI2XFx1MDAyNiB4LVxcdTAwM2VlbmNhcC1cXHUwMDNlZW5jYXBfdHlwZSA9PSBUQ1BfRU5DQVBfRVNQSU5UQ1ApIHtcXG5uZXQvaXB2NC9lc3A0LmM6MjQyOlxcdFxcdFxcdGVyciA9IGVzcF9vdXRwdXRfdGFpbF90Y3AoeCwgc2tiKTtcXG5uZXQvaXB2NC9lc3A0LmMtMjQzLVxcdFxcdFxcdGlmIChlcnIgIT0gLUVJTlBST0dSRVNTKVxcbi0tXFxubmV0L2lwdjQvZXNwNC5jPTQ5OD1pbnQgZXNwX291dHB1dF90YWlsKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZXNwX2luZm8gKmVzcClcXG4tLVxcbm5ldC9pcHY0L2VzcDQuYy02MTItXFx0aWYgKCFlcnIgXFx1MDAyNlxcdTAwMjYgeC1cXHUwMDNlZW5jYXAgXFx1MDAyNlxcdTAwMjYgeC1cXHUwMDNlZW5jYXAtXFx1MDAzZWVuY2FwX3R5cGUgPT0gVENQX0VOQ0FQX0VTUElOVENQKVxcbm5ldC9pcHY0L2VzcDQuYzo2MTM6XFx0XFx0ZXJyID0gZXNwX291dHB1dF90YWlsX3RjcCh4LCBza2IpO1xcbm5ldC9pcHY0L2VzcDQuYy02MTQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjI3OjAxLjY5NjE4NzI0NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDgzMjQ3NTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgRVNQLVRDUCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBlc3Bfb3V0cHV0X3RhaWxfdGNwYC4gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgZnVuY3Rpb24ncyBwcm9iYWJseSBkZWZpbmVkIGNvbmRpdGlvbmFsbHkuIEdpdmVuIHRoZSBjb250ZXh0LCBteSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgaXQncyB0aWVkIHRvIHRoZSBgQ09ORklHX0lORVRfRVNQSU5UQ1BgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBMZXQncyBjb25maXJtIHRoYXQgaHlwb3RoZXNpcy4gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGAjaWZkZWZgIGJsb2NrIHRvIHNlZSBpZiBteSBndWVzcyBpcyBjb3JyZWN0LiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhlIHJlbGV2YW50IGhlYWRlciBmaWxlcyBhbmQgc2VlIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgYnJvdWdodCBpbnRvIHRoZSBjb2RlLiBMZXQncyB2ZXJpZnkgdGhpcyBhbmQgdGhlbiBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBpbnRlbmRlZCBwdXJwb3NlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQzNSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjI3OjA1Ljc3OTQzNzQ4NVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4OTQ3OTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19JTkVUX0VTUElOVENQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9lc3A0LmM9OTk9c3RhdGljIHZvaWQgZXNwX3NzZ191bnJlZihzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgdm9pZCAqdG1wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIGFscmVhZHlfdW5yZWYpXFxuLS1cXG5uZXQvaXB2NC9lc3A0LmMtMTI0LVxcbm5ldC9pcHY0L2VzcDQuYzoxMjU6I2lmZGVmIENPTkZJR19JTkVUX0VTUElOVENQXFxubmV0L2lwdjQvZXNwNC5jLTEyNi1zdGF0aWMgc3RydWN0IHNvY2sgKmVzcF9maW5kX3RjcF9zayhzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcXG4tLVxcbm5ldC9pcHY0L2VzcDQuYz0zMDk9c3RhdGljIHN0cnVjdCBpcF9lc3BfaGRyICplc3Bfb3V0cHV0X3VkcF9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvZXNwNC5jLTMzOC1cXG5uZXQvaXB2NC9lc3A0LmM6MzM5OiNpZmRlZiBDT05GSUdfSU5FVF9FU1BJTlRDUFxcbm5ldC9pcHY0L2VzcDQuYy0zNDAtc3RhdGljIHN0cnVjdCBpcF9lc3BfaGRyICplc3Bfb3V0cHV0X3RjcF9lbmNhcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcXG4tLVxcbm5ldC9pcHY0L2VzcDQuYz0xMTEyPXN0YXRpYyBpbnQgZXNwX2luaXRfc3RhdGUoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9pcHY0L2VzcDQuYy0xMTUwLVxcdFxcdFxcdGJyZWFrO1xcbm5ldC9pcHY0L2VzcDQuYzoxMTUxOiNpZmRlZiBDT05GSUdfSU5FVF9FU1BJTlRDUFxcbm5ldC9pcHY0L2VzcDQuYy0xMTUyLVxcdFxcdGNhc2UgVENQX0VOQ0FQX0VTUElOVENQOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMDoyNzowNS44ODg0MzUwNTNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY2NzEyNzkyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIEVTUCBpbiBUQ1AgRW5jYXBzdWxhdGlvbioqXG5cbkFscmlnaHQsIHNvIGBDT05GSUdfSU5FVF9FU1BJTlRDUGAgaXMgZGVmaW5pdGVseSBlbmFibGVkLCB0aGF0IG11Y2ggaXMgY2xlYXIuIE15IG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGFuZCBzZWUgaG93IGl0J3MgaGFuZGxlZCBhdCB0aGUgcGFja2V0IHByb2Nlc3NpbmcgbGV2ZWwsIHNwZWNpZmljYWxseSBkdXJpbmcgdGhlIHJlY2VpdmUgcGF0aC4gSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byBgeGZybTRfcmN2X2VuY2FwX2ZpbmlzaGAgd2l0aGluIGBuZXQvaXB2NC94ZnJtNF9pbnB1dC5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IHRoYXQgZnVuY3Rpb24gZG9lcyB3aXRoIGFuIEVTUCBwYWNrZXQgdGhhdCdzIGJlZW4gZW5jYXBzdWxhdGVkIGluIFRDUC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBkZS1lbmNhcHN1bGF0aW9uIGxvZ2ljLCBob3cgdGhlIGlubmVyIElQIGhlYWRlciBpcyByZS1jb25zdHJ1Y3RlZCwgYW5kIGNydWNpYWxseSwgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBUQ1AgbGF5ZXIuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIG9mIFhGUk0gd2l0aCBUQ1AsIGFuZCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBleHBvc2UgdGhhdC4gSSdsbCBiZSBmb2N1c2VkIG9uIGFueSBwb3RlbnRpYWwgZ290Y2hhcyBvciBvcHRpbWl6YXRpb25zLCBsaWtlIHdoZXRoZXIgdGhlcmUncyBhbnkgdW5uZWNlc3NhcnkgY29weWluZyBvciByZS1jYWxjdWxhdGlvbiBvZiBjaGVja3N1bXMuIEknbSBhc3N1bWluZyB0aGF0IGl0IGhhbmRsZXMgdGhlIGlubmVyIElQIGhlYWRlciBhbmQgVENQIGNvcnJlY3RseSwgYnV0IEkgbmVlZCB0byBiZSAxMDAlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDE1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjA6Mjc6MDkuNTU1NTY1ODc3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Nzg3OTA0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtNF9yY3ZfZW5jYXBfZmluaXNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC94ZnJtNF9pbnB1dC5jLTIyLVxcbm5ldC9pcHY0L3hmcm00X2lucHV0LmM6MjM6c3RhdGljIGludCB4ZnJtNF9yY3ZfZW5jYXBfZmluaXNoMihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayxcXG5uZXQvaXB2NC94ZnJtNF9pbnB1dC5jLTI0LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC94ZnJtNF9pbnB1dC5jLTI4LVxcbm5ldC9pcHY0L3hmcm00X2lucHV0LmM6Mjk6c3RhdGljIGlubGluZSBpbnQgeGZybTRfcmN2X2VuY2FwX2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayxcXG5uZXQvaXB2NC94ZnJtNF9pbnB1dC5jLTMwLVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQveGZybTRfaW5wdXQuYy0zOS1cXG5uZXQvaXB2NC94ZnJtNF9pbnB1dC5jOjQwOlxcdGlmICh4ZnJtX3RyYW5zX3F1ZXVlKHNrYiwgeGZybTRfcmN2X2VuY2FwX2ZpbmlzaDIpKVxcbm5ldC9pcHY0L3hmcm00X2lucHV0LmMtNDEtXFx0XFx0Z290byBkcm9wO1xcbi0tXFxubmV0L2lwdjQveGZybTRfaW5wdXQuYz00OT1pbnQgeGZybTRfdHJhbnNwb3J0X2ZpbmlzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXN5bmMpXFxuLS1cXG5uZXQvaXB2NC94ZnJtNF9pbnB1dC5jLTc3LVxcdFxcdGRldl9uZXQoZGV2KSwgTlVMTCwgc2tiLCBkZXYsIE5VTEwsXFxubmV0L2lwdjQveGZybTRfaW5wdXQuYzo3ODpcXHRcXHR4ZnJtNF9yY3ZfZW5jYXBfZmluaXNoKTtcXG5uZXQvaXB2NC94ZnJtNF9pbnB1dC5jLTc5LVxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMDoyNzowOS42MzM0NTA2NjlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg1MDgyNjQxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBYRlJNIFBhdGNoJ3MgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUgaGVyZSwgYHhmcm00X3Jjdl9lbmNhcF9maW5pc2hgIGlzIGRpcmVjdGx5IHRpZWQgaW50byBgeGZybTRfdHJhbnNwb3J0X2ZpbmlzaGAsIHdoaWNoIGlzIGEgcHJldHR5IHN0YW5kYXJkIHBhcnQgb2YgWEZSTSBpbnB1dCBwcm9jZXNzaW5nLiBUaGF0IGFsb25lIHRlbGxzIG1lIHRoYXQgaGF2aW5nIGBDT05GSUdfWEZSTV9VU0VSYCBhbmQgYENPTkZJR19JTkVUX0VTUGAgY29uZmlndXJlZCB3b3VsZCBiZSBlbm91Z2ggdG8gZ2V0IHRvIHRoaXMgY29kZS5cblxuVGhlcmVmb3JlLCBteSBzdW1tYXJ5IGlzIHRoaXM6XG5cblRoaXMgbG9va3MgbGlrZSBhIHdvcnRod2hpbGUgdGFyZ2V0IGZvciBmdXp6aW5nLiBUaGUgcGF0Y2ggaXMgZml4aW5nIGEgYnVnIHJlbGF0ZWQgdG8gaG93IFhGUk0gaGFuZGxlcyBxdWV1aW5nIGFuZCByZS1pbmplY3RpbmcgcGFja2V0cywgc3BlY2lmaWNhbGx5IHdpdGhpbiBgeGZybV90cmFuc19xdWV1ZV9uZXRgLCBgeGZybV90cmFuc19xdWV1ZWAsIGFuZCBgeGZybV90cmFuc19yZWluamVjdGAuIFRoZSBmaXggaW52b2x2ZXMgY29ycmVjdGx5IG1hbmFnaW5nIHJlZmVyZW5jZXMgdG8gYHNrYi1cdTAwM2VkZXZgIGFuZCBlbnN1cmluZyBgc2tiX2RzdGAgaXMgdmFsaWQsIHdoaWNoIHBvaW50cyB0byBjaGFuZ2VzIGluIGNvcmUgcGFja2V0IHByb2Nlc3NpbmcuIFNpbmNlIGl0IHRvdWNoZXMgdGhlc2UgbmV0d29yayBpbnB1dC9vdXRwdXQgcGF0aHMsIGl0IGhhcyBzaWduaWZpY2FudCBwb3RlbnRpYWwgZm9yIHRyaWdnZXJpbmcgaW50ZXJlc3Rpbmcgc3RhdGVzLlxuXG5NeSBwcmltYXJ5IGZvY3VzIHNob3VsZCBiZSBvbiB0aGUgZnVuY3Rpb25zIGB4ZnJtX3RyYW5zX3F1ZXVlX25ldGAsIGB4ZnJtX3RyYW5zX3F1ZXVlYCwgYW5kIGB4ZnJtX3RyYW5zX3JlaW5qZWN0YC5cblxuVG8gZW5zdXJlIGJyb2FkIGNvdmVyYWdlLCBJIHNob3VsZCBjb25zaWRlciBlbmFibGluZyB0aGUgY29uZmlndXJhdGlvbnMgYFhGUk1fVVNFUmAsIGBJTkVUX0VTUGAsIGFuZCB0aGVuIEkgd2FudCB0byBkb3VibGUgY2hlY2sgbXkgYXNzdW1wdGlvbnMsIGJ1dCB0aGUgYElORVRfRVNQSU5UQ1BgIGFuZCBgSU5FVDZfRVNQSU5UQ1BgIGNvbmZpZ3VyYXRpb25zIGxvb2sgbGlrZSB0aGV5IHNob3VsZCBhbHNvIGJlIHJlbGV2YW50LiBJIHdhbnQgdG8gYmUgY2VydGFpbiBJIGhhdmVuJ3QgbWlzc2VkIGEgY29uZGl0aW9uYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzM4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjI3OjE1LjQ4NDI3OTY1M1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyNjQ5NTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJTkVUX0VTUElOVENQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9LY29uZmlnPTM2OT1jb25maWcgSU5FVF9FU1BfT0ZGTE9BRFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zODEtXFxubmV0L2lwdjQvS2NvbmZpZzozODI6Y29uZmlnIElORVRfRVNQSU5UQ1BcXG5uZXQvaXB2NC9LY29uZmlnLTM4My1cXHRib29sIFxcXCJJUDogRVNQIGluIFRDUCBlbmNhcHN1bGF0aW9uIChSRkMgODIyOSlcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjI3OjE1LjU4NjkzNDU0MloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODM2MzYyODI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeTpcblxuKipUaGUgRXhpc3RlbmNlIG9mIHRoZSBEYXRhIGFuZCBUb29saW5nKipcblxuUmlnaHQsIHNvIHdlJ3JlIGFja25vd2xlZGdpbmcgdGhlIHJlYWxpdHkgb2YgdGhlIHNpdHVhdGlvbjogXCJZZXMsIHRoZXkgZXhpc3QuXCIgU3BlY2lmaWNhbGx5LCB0aGUgZGF0YSBhbmQgaXRzIHJlbGF0ZWQgcHJvY2Vzc2luZyBjYXBhYmlsaXRpZXMsIGFzIHdlbGwgYXMgdGhlIHRvb2xzIHdlIGhhdmUgdG8gd29yayB3aXRoIHRoZW0uIFRoaXMgaXMgdGhlIGZvdW5kYXRpb247IHdlJ3JlIGVzdGFibGlzaGluZyBjb21tb24gZ3JvdW5kLiBJJ20gYXNzdW1pbmcsIGFzIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkLCB5b3UncmUgYWxzbyBhd2FyZSBvZiB0aGVtLlxuXG5Ob3csIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBUaGUgaW50ZW50aW9uIGlzIHRvIFwidXNlIHRoZSBzZXQtcmVzdWx0cyB0b29sLlwiIFRoaXMgc2lnbmFscyBhIHZlcnkgc3BlY2lmaWMgYXBwcm9hY2guIFdlJ3JlIG5vdCBqdXN0IGJyYWluc3Rvcm1pbmcgb3IgZXhwbG9yaW5nIGFic3RyYWN0IGNvbmNlcHRzLiBXZSdyZSBtb3ZpbmcgdG93YXJkcyBwcmFjdGljYWwgYXBwbGljYXRpb24gYW5kIGFuYWx5c2lzLiBJdCdzIGFib3V0IGxldmVyYWdpbmcgYSBkZWZpbmVkIHRvb2wsIGxpa2VseSBvbmUgZ2VhcmVkIHRvd2FyZHMgcHJlc2VudGluZyBmaW5kaW5ncywgcGVyaGFwcyBhIHZpc3VhbGl6YXRpb24gZnJhbWV3b3JrIG9yIGFuIGF1dG9tYXRlZCByZXBvcnRpbmcgc3lzdGVtLCB3aGF0ZXZlciB3ZSd2ZSBhZ3JlZWQgb24sIHRvIGRpc3RpbGwgdGhlIGF2YWlsYWJsZSBpbmZvcm1hdGlvbi4gSXTigJlzIGFib3V0IGxldmVyYWdpbmcgb3VyIHJlc291cmNlcyB0byBvYnRhaW4gYWN0aW9uYWJsZSBvdXRwdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDUwLCJPdXRwdXRUb2tlbnMiOjE1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIwOjI3OjE5LjQyMzMwMTU5OFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzcyNDQyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEZSTV9VU0VSXCIsXG4gICAgXCJJTkVUX0VTUFwiLFxuICAgIFwiSU5FVF9FU1BJTlRDUFwiLFxuICAgIFwiSU5FVDZfRVNQXCIsXG4gICAgXCJJTkVUNl9FU1BJTlRDUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhmcm1fdHJhbnNfcXVldWVfbmV0XCIsXG4gICAgXCJ4ZnJtX3RyYW5zX3F1ZXVlXCIsXG4gICAgXCJ4ZnJtX3RyYW5zX3JlaW5qZWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gWEZSTSBwYWNrZXQgcXVldWVpbmcgYW5kIHJlaW5qZWN0aW9uIHBhdGhzIGJ5IHByb3Blcmx5IGhvbGRpbmcgYSByZWZlcmVuY2UgdG8gc2tiLVxcdTAwM2VkZXYgYW5kIGVuc3VyaW5nIHNrYl9kc3QgaXMgdmFsaWQuIFRoaXMgbW9kaWZpZXMgY29yZSBYRlJNIHBhY2tldCBwcm9jZXNzaW5nIGxvZ2ljIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIG5ldHdvcmsgaW5wdXQvb3V0cHV0IHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGUk1fVVNFUlwiLFxuICAgIFwiSU5FVF9FU1BcIixcbiAgICBcIklORVRfRVNQSU5UQ1BcIixcbiAgICBcIklORVQ2X0VTUFwiLFxuICAgIFwiSU5FVDZfRVNQSU5UQ1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4ZnJtX3RyYW5zX3F1ZXVlX25ldFwiLFxuICAgIFwieGZybV90cmFuc19xdWV1ZVwiLFxuICAgIFwieGZybV90cmFuc19yZWluamVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIFhGUk0gcGFja2V0IHF1ZXVlaW5nIGFuZCByZWluamVjdGlvbiBwYXRocyBieSBwcm9wZXJseSBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIHNrYi1cXHUwMDNlZGV2IGFuZCBlbnN1cmluZyBza2JfZHN0IGlzIHZhbGlkLiBUaGlzIG1vZGlmaWVzIGNvcmUgWEZSTSBwYWNrZXQgcHJvY2Vzc2luZyBsb2dpYyB3aGljaCBpcyByZWFjaGFibGUgZnJvbSBuZXR3b3JrIGlucHV0L291dHB1dCBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjA6Mjc6MTkuNTY3MDM2NDUyWiIsIlNlcSI6MjksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDE5NjM0Mjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjA6Mjc6MTkuNTY3OTU3MDYzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjk0MTg3MDk4MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBvYmplY3QgbGlmZXRpbWUgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMgZm9yIGBza2ItXFx1MDAzZWRldmAgYW5kIGBza2JfZHN0YCB3aGVuIGFuIGBza2JgIGlzIHF1ZXVlZCBmb3IgcmVpbmplY3Rpb24gaW4gdGhlIFhGUk0gc3Vic3lzdGVtLiBJdCBhZGRzIGBkZXZfaG9sZCgpYCBhbmQgYGRldl9wdXQoKWAgZm9yIHRoZSBuZXR3b3JrIGRldmljZSwgZm9yY2VzIHRoZSBkZXN0aW5hdGlvbiBlbnRyeSB2aWEgYHNrYl9kc3RfZm9yY2UoKWAsIGFuZCB3cmFwcyB0aGUgcmVpbmplY3Rpb24gbG9vcCBpbiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uIFRoZXNlIGNoYW5nZXMgYXJlIGRlc2lnbmVkIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgKFVBRikgb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgcmVsYXRlZCB0byBmcmVlZCBuZXR3b3JrIGRldmljZXMgb3IgZGVzdGluYXRpb24gZW50cmllcy4gU3VjaCBtZW1vcnkgY29ycnVwdGlvbiBhbmQgbGlmZXRpbWUgYnVncyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBidWZmZXIgbGVuZ3Rocywgb3IgZXhwb3NlIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3OTI1YTZjZWU5OTAwZjVjMjZhMmI2YTRhZjYxYWVjMjk3ZWM4ZTA3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAyMDoyNjoxOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1faW5wdXQuYyBiL25ldC94ZnJtL3hmcm1faW5wdXQuY1xuaW5kZXggZWVjYWIzMzdiZDBhNy4uOGY2MTA5ZWFkYTdlYSAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL3hmcm1faW5wdXQuY1xuKysrIGIvbmV0L3hmcm0veGZybV9pbnB1dC5jXG5AQCAtODAwLDEyICs4MDAsMTcgQEAgc3RhdGljIHZvaWQgeGZybV90cmFuc19yZWluamVjdChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ0cmFucy1cdTAwM2VxdWV1ZV9sb2NrKTtcbiBcbiBcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbitcdHJjdV9yZWFkX2xvY2soKTtcbiBcdHdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZShcdTAwMjZxdWV1ZSkpKSB7XG4gXHRcdHN0cnVjdCBuZXQgKm5ldCA9IFhGUk1fVFJBTlNfU0tCX0NCKHNrYiktXHUwMDNlbmV0O1xuK1x0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLVx1MDAzZWRldjtcbiBcbiBcdFx0WEZSTV9UUkFOU19TS0JfQ0Ioc2tiKS1cdTAwM2VmaW5pc2gobmV0LCBOVUxMLCBza2IpO1xuK1x0XHRpZiAoZGV2KVxuK1x0XHRcdGRldl9wdXQoZGV2KTtcbiBcdFx0cHV0X25ldChuZXQpO1xuIFx0fVxuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRsb2NhbF9iaF9lbmFibGUoKTtcbiB9XG4gXG5AQCAtODIxLDEyICs4MjYsMTggQEAgaW50IHhmcm1fdHJhbnNfcXVldWVfbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChza2JfcXVldWVfbGVuKFx1MDAyNnRyYW5zLVx1MDAzZXF1ZXVlKSBcdTAwM2U9IFJFQURfT05DRShuZXRfaG90ZGF0YS5tYXhfYmFja2xvZykpXG4gXHRcdHJldHVybiAtRU5PQlVGUztcbiBcbitcdGlmIChza2JfZHN0KHNrYikgXHUwMDI2XHUwMDI2ICFza2JfZHN0X2ZvcmNlKHNrYikpXG4rXHRcdHJldHVybiAtRUhPU1RVTlJFQUNIO1xuK1xuIFx0QlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgeGZybV90cmFuc19jYikgXHUwMDNlIHNpemVvZihza2ItXHUwMDNlY2IpKTtcbiBcbiBcdGhvbGRfbmV0ID0gbWF5YmVfZ2V0X25ldChuZXQpO1xuIFx0aWYgKCFob2xkX25ldClcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXG4rXHRpZiAoc2tiLVx1MDAzZWRldilcbitcdFx0ZGV2X2hvbGQoc2tiLVx1MDAzZWRldik7XG4rXG4gXHRYRlJNX1RSQU5TX1NLQl9DQihza2IpLVx1MDAzZWZpbmlzaCA9IGZpbmlzaDtcbiBcdFhGUk1fVFJBTlNfU0tCX0NCKHNrYiktXHUwMDNlbmV0ID0gaG9sZF9uZXQ7XG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2dHJhbnMtXHUwMDNlcXVldWVfbG9jayk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMDoyNzoxOS41Njc5NTg0NDNaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTQxODY5MDQ1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFhGUk0gUGF0Y2g6IEZvY3VzIG9uIE9iamVjdCBMaWZldGltZSBhbmQgUmVmZXJlbmNlIENvdW50aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGZvciBgeGZybV9pbnB1dC5jYC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyBwcmltYXJpbHkgYWJvdXQgaW1wcm92aW5nIG9iamVjdCBsaWZldGltZSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIHJlZmVyZW5jZSBjb3VudGluZyBvZiBgc2tiLVx1MDAzZWRldmAgYW5kIGhhbmRsaW5nIHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byB1c2UtYWZ0ZXItZnJlZSBhbmQgaW52YWxpZCByZWZlcmVuY2VzLCBlc3BlY2lhbGx5IHdoZW4gYW4gU0tCIGlzIGJlaW5nIHF1ZXVlZCBmb3IgcmVpbmplY3Rpb24uXG5cblRoZSBjb3JlIGNoYW5nZXMgYXJlIGluIGB4ZnJtX3RyYW5zX3F1ZXVlX25ldGAgYW5kIGB4ZnJtX3RyYW5zX3JlaW5qZWN0YC4gSW4gdGhlIHF1ZXVlaW5nIGZ1bmN0aW9uLCB3ZSdyZSBub3cgYWRkaW5nIGNoZWNrcy4gSSBzZWUgYSBuZXcgY2hlY2sgZm9yIGAhc2tiX2RzdF9mb3JjZShza2IpYCB3aXRoaW4gYHhmcm1fdHJhbnNfcXVldWVfbmV0YCB0byByZXR1cm4gLUVIT1NUVU5SRUFDSCB3aGVuIGEgZGVzdGluYXRpb24gaXMgcHJlc2VudCBidXQgbm90IGZvcmNlZCwgYW5kIGEgYGRldl9ob2xkKHNrYi1cdTAwM2VkZXYpYCBjYWxsIHRvIGluY3JlYXNlIHRoZSByZWZjb3VudC4gVGhlbiwgd2l0aGluIHRoZSByZWluamVjdGlvbiBmdW5jdGlvbiwgd2UncmUgd3JhcHBpbmcgdGhlIHJlaW5qZWN0aW9uIGxvb3Agd2l0aCBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYC4gSW5zaWRlIHRoZSBsb29wLCBhIGxvY2FsIGBuZXRfZGV2aWNlYCB2YXJpYWJsZSwgaW5pdGlhbGl6ZWQgd2l0aCBgc2tiLVx1MDAzZWRldmAgZm9yIGVhc3kgdXNlLCBhbmQgYGRldl9wdXQoZGV2KWAgaXMgYWRkZWQgdG8gZGVjcmVtZW50IHRoZSByZWZjb3VudC4gVGhpcyBpcyBwcmVjaXNlbHkgd2hhdCBJIGV4cGVjdCB0byBzZWUgZm9yIHByb3BlciByZWZlcmVuY2UgY291bnRpbmcgb2YgdGhlIGRldmljZSBwb2ludGVyLCBwcmV2ZW50aW5nIGRvdWJsZSBmcmVlcyBvciB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MuXG5cblRoaXMgc2NyZWFtcyBvYmplY3QgbGlmZXRpbWUgY29uY2VybnMsIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmUncyBubyBpbnRyb2R1Y3Rpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaGVyZSwgbm9yIGFyZSB3ZSBleHBvc2luZyBhbnkuIFRoZSBjb25jZXJucyBoZXJlIGFyZSBhYm91dCBtYW5hZ2luZyB0aGUgbGlmZWN5Y2xlIG9mIHRoZSBgc2tiLVx1MDAzZWRldmAgcG9pbnRlciBhbmQgdGhlIFNLQiBpdHNlbGYsIGVuc3VyaW5nIHRoYXQgd2UgZG9uJ3QgdHJ5IHRvIGFjY2VzcyBpdCBhZnRlciBpdCdzIGJlZW4gZnJlZWQgb3IgYmVjb21lIGludmFsaWQuIEtBU0FOIGlzIHRoZSByaWdodCB0b29sIHRvIHRyYWNrIGFuZCBkaXNjb3ZlciBhbnkgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGJ1Z3MgaWYgcmVmZXJlbmNlIGNvdW50aW5nIGlzIHdyb25nLiBLTVNBTiBpcyBmb3IgY2F0Y2hpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLlxuXG5KdXN0IHRvIGJlIHRob3JvdWdoLCBJJ20gcXVpY2tseSBkb3VibGUtY2hlY2tpbmcgdGhlIGNvZGUgZGlmZi4gVGhlIGFzc2lnbm1lbnRzIHRvIGBYRlJNX1RSQU5TX1NLQl9DQihza2IpLVx1MDAzZWZpbmlzaGAgYW5kIGBYRlJNX1RSQU5TX1NLQl9DQihza2IpLVx1MDAzZW5ldGAgYXJlIHN0YW5kYXJkIHNldHVwIGNhbGxzLiBUaGVzZSBqdXN0IGFzc2lnbiB2YWx1ZXMgdG8gdGhlIFNLQidzIGNvbnRyb2wgYmxvY2ssIHNvIHRoZXJlJ3Mgbm90aGluZyBjb25jZXJuaW5nIHRoZXJlLlxuXG5HaXZlbiB0aGF0IHRoaXMgcGF0Y2ggaXMgc29sZWx5IGZvY3VzZWQgb24gZW5zdXJpbmcgY29ycmVjdCByZWZlcmVuY2UgY291bnRzIGFuZCBhdm9pZGluZyB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMsIGFuZCBJIGRvbid0IHNlZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlLCB0aGUgYE5lZWRzS01TQU5gIGZsYWcgaXMgZGVmaW5pdGVseSBmYWxzZSBoZXJlLiBUaGlzIGlzIHB1cmVseSBhYm91dCBvYmplY3QgbGlmZXRpbWUgYW5kIHJlZmVyZW5jZSBjb3VudGluZywgbm90IG1lbW9yeSBpbml0aWFsaXphdGlvbi4gSSdtIGNvbWZvcnRhYmxlIHNldHRpbmcgYE5lZWRzS01TQU4gPSBmYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMzgsIk91dHB1dFRva2VucyI6MjExLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzM4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjA6Mjc6MjguOTg2NjUyMDdaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBvYmplY3QgbGlmZXRpbWUgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMgZm9yIGBza2ItXFx1MDAzZWRldmAgYW5kIGBza2JfZHN0YCB3aGVuIGFuIGBza2JgIGlzIHF1ZXVlZCBmb3IgcmVpbmplY3Rpb24gaW4gdGhlIFhGUk0gc3Vic3lzdGVtLiBJdCBhZGRzIGBkZXZfaG9sZCgpYCBhbmQgYGRldl9wdXQoKWAgZm9yIHRoZSBuZXR3b3JrIGRldmljZSwgZm9yY2VzIHRoZSBkZXN0aW5hdGlvbiBlbnRyeSB2aWEgYHNrYl9kc3RfZm9yY2UoKWAsIGFuZCB3cmFwcyB0aGUgcmVpbmplY3Rpb24gbG9vcCBpbiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uIFRoZXNlIGNoYW5nZXMgYXJlIGRlc2lnbmVkIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgKFVBRikgb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgcmVsYXRlZCB0byBmcmVlZCBuZXR3b3JrIGRldmljZXMgb3IgZGVzdGluYXRpb24gZW50cmllcy4gU3VjaCBtZW1vcnkgY29ycnVwdGlvbiBhbmQgbGlmZXRpbWUgYnVncyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBidWZmZXIgbGVuZ3Rocywgb3IgZXhwb3NlIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgb2JqZWN0IGxpZmV0aW1lIGFuZCByZWZlcmVuY2UgY291bnRpbmcgaXNzdWVzIGZvciBgc2tiLVxcdTAwM2VkZXZgIGFuZCBgc2tiX2RzdGAgd2hlbiBhbiBgc2tiYCBpcyBxdWV1ZWQgZm9yIHJlaW5qZWN0aW9uIGluIHRoZSBYRlJNIHN1YnN5c3RlbS4gSXQgYWRkcyBgZGV2X2hvbGQoKWAgYW5kIGBkZXZfcHV0KClgIGZvciB0aGUgbmV0d29yayBkZXZpY2UsIGZvcmNlcyB0aGUgZGVzdGluYXRpb24gZW50cnkgdmlhIGBza2JfZHN0X2ZvcmNlKClgLCBhbmQgd3JhcHMgdGhlIHJlaW5qZWN0aW9uIGxvb3AgaW4gYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLiBUaGVzZSBjaGFuZ2VzIGFyZSBkZXNpZ25lZCB0byBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIChVQUYpIG9yIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIHJlbGF0ZWQgdG8gZnJlZWQgbmV0d29yayBkZXZpY2VzIG9yIGRlc3RpbmF0aW9uIGVudHJpZXMuIFN1Y2ggbWVtb3J5IGNvcnJ1cHRpb24gYW5kIGxpZmV0aW1lIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgYnVmZmVyIGxlbmd0aHMsIG9yIGV4cG9zZSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2k7t5[1] Phase: Succeeded StartedAt: 2026-08-07 20:27:37 +0000 UTC FinishedAt: 2026-08-07 20:27:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2k7t5[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-07 20:27:37 +0000 UTC FinishedAt: 2026-08-07 20:27:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2k7t5[2] Phase: Succeeded StartedAt: 2026-08-07 20:27:37 +0000 UTC FinishedAt: 2026-08-08 00:06:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2k7t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_trans_queue_net","xfrm_trans_queue","xfrm_trans_reinject"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"dfb76556-a39d-4d87-8a64-3ac9fd99e94b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-07 20:27:37 +0000 UTC FinishedAt: 2026-08-08 00:06:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_trans_queue_net","xfrm_trans_queue","xfrm_trans_reinject"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"dfb76556-a39d-4d87-8a64-3ac9fd99e94b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow2k7t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_trans_queue_net","xfrm_trans_queue","xfrm_trans_reinject"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"dfb76556-a39d-4d87-8a64-3ac9fd99e94b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-07 20:27:37 +0000 UTC FinishedAt: 2026-08-07 20:27:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2k7t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_trans_queue_net","xfrm_trans_queue","xfrm_trans_reinject"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"dfb76556-a39d-4d87-8a64-3ac9fd99e94b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-07 20:27:37 +0000 UTC FinishedAt: 2026-08-07 20:27:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2k7t5/series-workflow2k7t5-convert-artifact-66523239/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2k7t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_trans_queue_net","xfrm_trans_queue","xfrm_trans_reinject"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"dfb76556-a39d-4d87-8a64-3ac9fd99e94b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-07 20:27:48 +0000 UTC FinishedAt: 2026-08-07 20:44:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2k7t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_trans_queue_net","xfrm_trans_queue","xfrm_trans_reinject"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"dfb76556-a39d-4d87-8a64-3ac9fd99e94b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-07 20:27:48 +0000 UTC FinishedAt: 2026-08-07 20:44:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*84ec6869-43ae-4f2b-8abc-827ada104573,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-workflow2k7t5/series-workflow2k7t5-convert-artifact-66523239/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": "36f0cc54-9811-4efb-9c2b-2b0ac844e1de", "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-workflow2k7t5/series-workflow2k7t5-build-action-45221629/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2k7t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_trans_queue_net","xfrm_trans_queue","xfrm_trans_reinject"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"dfb76556-a39d-4d87-8a64-3ac9fd99e94b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-07 20:27:48 +0000 UTC FinishedAt: 2026-08-07 20:43:58 +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:*84ec6869-43ae-4f2b-8abc-827ada104573,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-workflow2k7t5/series-workflow2k7t5-convert-artifact-66523239/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": "36f0cc54-9811-4efb-9c2b-2b0ac844e1de", "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-workflow2k7t5/series-workflow2k7t5-build-action-45221629/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2k7t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_trans_queue_net","xfrm_trans_queue","xfrm_trans_reinject"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"dfb76556-a39d-4d87-8a64-3ac9fd99e94b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-07 20:44:08 +0000 UTC FinishedAt: 2026-08-07 20:44:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2k7t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_trans_queue_net","xfrm_trans_queue","xfrm_trans_reinject"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"dfb76556-a39d-4d87-8a64-3ac9fd99e94b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-07 20:44:08 +0000 UTC FinishedAt: 2026-08-07 20:44:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2k7t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_trans_queue_net","xfrm_trans_queue","xfrm_trans_reinject"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"dfb76556-a39d-4d87-8a64-3ac9fd99e94b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-07 20:44:08 +0000 UTC FinishedAt: 2026-08-07 20:44:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2k7t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_trans_queue_net","xfrm_trans_queue","xfrm_trans_reinject"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"dfb76556-a39d-4d87-8a64-3ac9fd99e94b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-07 20:44:08 +0000 UTC FinishedAt: 2026-08-07 20:44:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"dfb76556-a39d-4d87-8a64-3ac9fd99e94b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2k7t5/series-workflow2k7t5-convert-artifact-1789402646/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2k7t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_trans_queue_net","xfrm_trans_queue","xfrm_trans_reinject"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"dfb76556-a39d-4d87-8a64-3ac9fd99e94b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-07 20:44:18 +0000 UTC FinishedAt: 2026-08-07 20:46:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2k7t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_trans_queue_net","xfrm_trans_queue","xfrm_trans_reinject"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"dfb76556-a39d-4d87-8a64-3ac9fd99e94b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-07 20:44:18 +0000 UTC FinishedAt: 2026-08-07 20:46:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*36f0cc54-9811-4efb-9c2b-2b0ac844e1de,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-workflow2k7t5/series-workflow2k7t5-build-action-45221629/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-workflow2k7t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_trans_queue_net","xfrm_trans_queue","xfrm_trans_reinject"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"dfb76556-a39d-4d87-8a64-3ac9fd99e94b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-07 20:46:20 +0000 UTC FinishedAt: 2026-08-07 20:46:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2k7t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_trans_queue_net","xfrm_trans_queue","xfrm_trans_reinject"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"dfb76556-a39d-4d87-8a64-3ac9fd99e94b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-07 20:46:20 +0000 UTC FinishedAt: 2026-08-07 20:46:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2k7t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_trans_queue_net","xfrm_trans_queue","xfrm_trans_reinject"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"dfb76556-a39d-4d87-8a64-3ac9fd99e94b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-07 20:46:20 +0000 UTC FinishedAt: 2026-08-07 21:02:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2k7t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_trans_queue_net","xfrm_trans_queue","xfrm_trans_reinject"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"dfb76556-a39d-4d87-8a64-3ac9fd99e94b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-07 20:46:20 +0000 UTC FinishedAt: 2026-08-07 21:02:39 +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:*84ec6869-43ae-4f2b-8abc-827ada104573,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-workflow2k7t5/series-workflow2k7t5-convert-artifact-1789402646/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": "cf5ea17a-015d-4aa7-8e71-f08b4999072c", "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-workflow2k7t5/series-workflow2k7t5-build-action-3568754458/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2k7t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_trans_queue_net","xfrm_trans_queue","xfrm_trans_reinject"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"dfb76556-a39d-4d87-8a64-3ac9fd99e94b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-07 20:46:20 +0000 UTC FinishedAt: 2026-08-07 21:02:29 +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:*84ec6869-43ae-4f2b-8abc-827ada104573,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-workflow2k7t5/series-workflow2k7t5-convert-artifact-1789402646/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": "cf5ea17a-015d-4aa7-8e71-f08b4999072c", "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-workflow2k7t5/series-workflow2k7t5-build-action-3568754458/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2k7t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_trans_queue_net","xfrm_trans_queue","xfrm_trans_reinject"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"dfb76556-a39d-4d87-8a64-3ac9fd99e94b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-07 21:02:39 +0000 UTC FinishedAt: 2026-08-07 21:02:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2k7t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_trans_queue_net","xfrm_trans_queue","xfrm_trans_reinject"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"dfb76556-a39d-4d87-8a64-3ac9fd99e94b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-07 21:02:39 +0000 UTC FinishedAt: 2026-08-07 21:02:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2k7t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_trans_queue_net","xfrm_trans_queue","xfrm_trans_reinject"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"dfb76556-a39d-4d87-8a64-3ac9fd99e94b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-07 21:02:39 +0000 UTC FinishedAt: 2026-08-07 21:04:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2k7t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_trans_queue_net","xfrm_trans_queue","xfrm_trans_reinject"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"dfb76556-a39d-4d87-8a64-3ac9fd99e94b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-07 21:02:39 +0000 UTC FinishedAt: 2026-08-07 21:04:25 +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:*cf5ea17a-015d-4aa7-8e71-f08b4999072c,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-workflow2k7t5/series-workflow2k7t5-build-action-3568754458/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-workflow2k7t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_trans_queue_net","xfrm_trans_queue","xfrm_trans_reinject"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"dfb76556-a39d-4d87-8a64-3ac9fd99e94b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-07 21:04:35 +0000 UTC FinishedAt: 2026-08-08 00:06:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2k7t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_trans_queue_net","xfrm_trans_queue","xfrm_trans_reinject"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"dfb76556-a39d-4d87-8a64-3ac9fd99e94b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-07 21:04:35 +0000 UTC FinishedAt: 2026-08-08 00:06:27 +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":["xfrm_trans_queue_net","xfrm_trans_queue","xfrm_trans_reinject"],"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:*36f0cc54-9811-4efb-9c2b-2b0ac844e1de,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cf5ea17a-015d-4aa7-8e71-f08b4999072c,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-workflow2k7t5/series-workflow2k7t5-build-action-45221629/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-workflow2k7t5/series-workflow2k7t5-build-action-3568754458/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow2k7t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_trans_queue_net","xfrm_trans_queue","xfrm_trans_reinject"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"dfb76556-a39d-4d87-8a64-3ac9fd99e94b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-07 21:04:35 +0000 UTC FinishedAt: 2026-08-07 21:04:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2k7t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_trans_queue_net","xfrm_trans_queue","xfrm_trans_reinject"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"dfb76556-a39d-4d87-8a64-3ac9fd99e94b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-07 21:04:35 +0000 UTC FinishedAt: 2026-08-07 21:04:42 +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":["xfrm_trans_queue_net","xfrm_trans_queue","xfrm_trans_reinject"],"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-workflow2k7t5/series-workflow2k7t5-convert-artifact-1701499579/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2k7t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_trans_queue_net","xfrm_trans_queue","xfrm_trans_reinject"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"dfb76556-a39d-4d87-8a64-3ac9fd99e94b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-07 21:04:35 +0000 UTC FinishedAt: 2026-08-07 21:04:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2k7t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_trans_queue_net","xfrm_trans_queue","xfrm_trans_reinject"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"dfb76556-a39d-4d87-8a64-3ac9fd99e94b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-07 21:04:35 +0000 UTC FinishedAt: 2026-08-07 21:04:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2k7t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_trans_queue_net","xfrm_trans_queue","xfrm_trans_reinject"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"dfb76556-a39d-4d87-8a64-3ac9fd99e94b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-07 21:04:35 +0000 UTC FinishedAt: 2026-08-07 21:04:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2k7t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_trans_queue_net","xfrm_trans_queue","xfrm_trans_reinject"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"dfb76556-a39d-4d87-8a64-3ac9fd99e94b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-07 21:04:45 +0000 UTC FinishedAt: 2026-08-08 00:06:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2k7t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_trans_queue_net","xfrm_trans_queue","xfrm_trans_reinject"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET_ESPINTCP","INET6_ESP","INET6_ESPINTCP"],"series_id":"dfb76556-a39d-4d87-8a64-3ac9fd99e94b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-07 21:04:45 +0000 UTC FinishedAt: 2026-08-08 00:06:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*36f0cc54-9811-4efb-9c2b-2b0ac844e1de,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cf5ea17a-015d-4aa7-8e71-f08b4999072c,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-workflow2k7t5/series-workflow2k7t5-build-action-45221629/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-workflow2k7t5/series-workflow2k7t5-build-action-3568754458/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-workflow2k7t5/series-workflow2k7t5-convert-artifact-1701499579/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,}