Name: series-workflowdjz2b Phase: Succeeded StartedAt: 2026-08-17 23:45:40 +0000 UTC FinishedAt: 2026-08-18 04:09:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdjz2b[0] Phase: Succeeded StartedAt: 2026-08-17 23:45:40 +0000 UTC FinishedAt: 2026-08-18 00:30:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdjz2b[0].run-triage Phase: Succeeded StartedAt: 2026-08-17 23:45:40 +0000 UTC FinishedAt: 2026-08-18 00:30:31 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211", "MAC80211_HWSIM", "CFG80211" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211", "MAC80211_HWSIM", "CFG80211" ], "series_id": "ac9a1659-5477-4c8a-aecf-5eb0288abebc" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ieee80211_parse_tx_radiotap", "ieee80211_monitor_start_xmit" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBgc2tiX3RyaW1gIHdhcyBpbmNvcnJlY3RseSBjYWxsZWQgZHVyaW5nIGBpZWVlODAyMTFfbW9uaXRvcl9zZWxlY3RfcXVldWVgIHdoZW4gcGFyc2luZyB0aGUgcmFkaW90YXAgaGVhZGVyLiBUcmltbWluZyB0aGUgRkNTIHRyYWlsZXIgYXQgdGhpcyBzdGFnZSByZWR1Y2VkIGBza2ItXHUwMDNlbGVuYCwgY2F1c2luZyB0aGUgc3Vic2VxdWVudCBjYWxsIHRvIGBpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXBgIGluIGBpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0YCB0byBmYWlsIGl0cyBsZW5ndGggY2hlY2sgKGBza2ItXHUwMDNlbGVuIFx1MDAzYyAoaXRlcmF0b3IuX21heF9sZW5ndGggJiM0MzsgRkNTX0xFTilgKSBhbmQgZHJvcCB0aGUgcGFja2V0LiBUaGUgZml4IGludHJvZHVjZXMgYSBgdHJpbV9mY3NgIGJvb2xlYW4gdG8gZGVmZXIgdGhlIHRyaW1taW5nIHVudGlsIGBpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0YC5cblxuVGhpcyBpcyBhIGxvZ2ljIGJ1ZyByZWxhdGVkIHRvIHBhY2tldCBsZW5ndGggbWFuaXB1bGF0aW9uIGFuZCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBhY2Nlc3Nlcywgb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgZm9yIGNhdGNoaW5nIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgaXNzdWVzIGluIHRoaXMgYXJlYS4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcGAgdG8gb3B0aW9uYWxseSB0cmltIHRoZSBGQ1MgdHJhaWxlciBmcm9tIGluamVjdGVkIHBhY2tldHMuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHdoZW4gaW5qZWN0aW5nIHBhY2tldHMgaW50byBhIG1hYzgwMjExIG1vbml0b3IgaW50ZXJmYWNlLCB3aGljaCBjYW4gYmUgdGVzdGVkIHVzaW5nIHRoZSBtYWM4MDIxMV9od3NpbSBkcml2ZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtYWM4MDIxMSBuZXR3b3JraW5nIHN0YWNrLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjI5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjA4ODgwOWU5Y2VlMTAyZDliMzUwNzU5ZDMxZGRhZDA0ZDQwYTgzYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDAwOjI4OjU3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmggYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oXG5pbmRleCA0Zjk1ZGEwMjM3NDZmLi4wYmVjZDMzNjEwMTBmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbWFjODAyMTEuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaFxuQEAgLTc2MTUsMTEgJiM0Mzs3NjE1LDEyIEBAIGJvb2wgaWVlZTgwMjExX3R4X3ByZXBhcmVfc2tiKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuICAqXG4gICogQHNrYjogcGFja2V0IGluamVjdGVkIGJ5IHVzZXJzcGFjZVxuICAqIEBkZXY6IHRoZSBcdTAwMjZzdHJ1Y3QgZGV2aWNlIG9mIHRoaXMgODAyLjExIGRldmljZVxuJiM0MzsgKiBAdHJpbV9mY3M6IHRyaW0gdGhlIEZDUyB0cmFpbGVyIHdoZW4gcHJlc2VudDsgdmFsaWRhdGUgaXQgb3RoZXJ3aXNlXG4gICpcbiAgKiBSZXR1cm46ICV0cnVlIGlmIHRoZSByYWRpb3RhcCBoZWFkZXIgd2FzIHBhcnNlZCwgJWZhbHNlIG90aGVyd2lzZVxuICAqL1xuIGJvb2wgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwKHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0XHQgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgdHJpbV9mY3MpO1xuIFxuIC8qKlxuICAqIHN0cnVjdCBpZWVlODAyMTFfbm9hX2RhdGEgLSBob2xkcyB0ZW1wb3JhcnkgZGF0YSBmb3IgdHJhY2tpbmcgUDJQIE5vQSBzdGF0ZVxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZmFjZS5jIGIvbmV0L21hYzgwMjExL2lmYWNlLmNcbmluZGV4IDQzNDYwYTcwNWE2YmQuLmZkYWM3MjljYTU4MGQgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvaWZhY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2lmYWNlLmNcbkBAIC05NjQsNyAmIzQzOzk2NCw3IEBAIHN0YXRpYyB1MTYgaWVlZTgwMjExX21vbml0b3Jfc2VsZWN0X3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHQvKiByZXNldCBmbGFncyBhbmQgaW5mbyBiZWZvcmUgcGFyc2luZyByYWRpb3RhcCBoZWFkZXIgKi9cbiBcdG1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTtcbiBcbi1cdGlmICghaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwKHNrYiwgZGV2KSlcbiYjNDM7XHRpZiAoIWllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcChza2IsIGRldiwgZmFsc2UpKVxuIFx0XHRyZXR1cm4gMDsgLyogZG9lc24mIzM5O3QgbWF0dGVyLCBmcmFtZSB3aWxsIGJlIGRyb3BwZWQgKi9cbiBcbiBcdGxlbl9ydGhkciA9IGllZWU4MDIxMV9nZXRfcmFkaW90YXBfbGVuKHNrYi1cdTAwM2VkYXRhKTtcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdHguYyBiL25ldC9tYWM4MDIxMS90eC5jXG5pbmRleCA5MWIxNDExMmUyNGYwLi45Nzk5MDAzOTY5NWRiIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL3R4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS90eC5jXG5AQCAtMjA5Nyw3ICYjNDM7MjA5Nyw3IEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV92YWxpZGF0ZV9yYWRpb3RhcF9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB9XG4gXG4gYm9vbCBpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHRcdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRyaW1fZmNzKVxuIHtcbiBcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi1cdTAwM2VpZWVlODAyMTFfcHRyKTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaXRlcmF0b3IgaXRlcmF0b3I7XG5AQCAtMjE1NCw3ICYjNDM7MjE1NCw4IEBAIGJvb2wgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2MgKGl0ZXJhdG9yLl9tYXhfbGVuZ3RoICYjNDM7IEZDU19MRU4pKVxuIFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRcdFx0XHRza2JfdHJpbShza2IsIHNrYi1cdTAwM2VsZW4gLSBGQ1NfTEVOKTtcbiYjNDM7XHRcdFx0XHRpZiAodHJpbV9mY3MpXG4mIzQzO1x0XHRcdFx0XHRza2JfdHJpbShza2IsIHNrYi1cdTAwM2VsZW4gLSBGQ1NfTEVOKTtcbiBcdFx0XHR9XG4gXHRcdFx0aWYgKCppdGVyYXRvci50aGlzX2FyZyBcdTAwMjYgSUVFRTgwMjExX1JBRElPVEFQX0ZfV0VQKVxuIFx0XHRcdFx0aW5mby1cdTAwM2VmbGFncyBcdTAwMjY9IH5JRUVFODAyMTFfVFhfSU5URkxfRE9OVF9FTkNSWVBUO1xuQEAgLTI0NzAsNyAmIzQzOzI0NzEsNyBAQCBuZXRkZXZfdHhfdCBpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHQgKiBzZWxlY3RlZCBjaGFuZGVmIGFib3ZlIHRvIGFjY3VyYXRlbHkgc2V0IGluamVjdGlvbiByYXRlcyBhbmRcbiBcdCAqIHJldHJhbnNtaXNzaW9ucy5cbiBcdCAqL1xuLVx0aWYgKCFpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXAoc2tiLCBkZXYpKVxuJiM0MztcdGlmICghaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwKHNrYiwgZGV2LCB0cnVlKSlcbiBcdFx0Z290byBmYWlsX3JjdTtcbiBcbiBcdC8qIHJlbW92ZSB0aGUgaW5qZWN0aW9uIHJhZGlvdGFwIGhlYWRlciAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjI5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMV9IV1NJTSYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2llZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcCYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXBgIHRvIG9wdGlvbmFsbHkgdHJpbSB0aGUgRkNTIHRyYWlsZXIgZnJvbSBpbmplY3RlZCBwYWNrZXRzLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSB3aGVuIGluamVjdGluZyBwYWNrZXRzIGludG8gYSBtYWM4MDIxMSBtb25pdG9yIGludGVyZmFjZSwgd2hpY2ggY2FuIGJlIHRlc3RlZCB1c2luZyB0aGUgbWFjODAyMTFfaHdzaW0gZHJpdmVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWFjODAyMTEgbmV0d29ya2luZyBzdGFjay4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGYwODg4MDllOWNlZTEwMmQ5YjM1MDc1OWQzMWRkYWQwNGQ0MGE4M2IKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxOCAwMDoyODo1NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmggYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCmluZGV4IDRmOTVkYTAyMzc0NmYuLjBiZWNkMzM2MTAxMGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaApAQCAtNzYxNSwxMSAmIzQzOzc2MTUsMTIgQEAgYm9vbCBpZWVlODAyMTFfdHhfcHJlcGFyZV9za2Ioc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAgKgogICogQHNrYjogcGFja2V0IGluamVjdGVkIGJ5IHVzZXJzcGFjZQogICogQGRldjogdGhlICZhbXA7c3RydWN0IGRldmljZSBvZiB0aGlzIDgwMi4xMSBkZXZpY2UKJiM0MzsgKiBAdHJpbV9mY3M6IHRyaW0gdGhlIEZDUyB0cmFpbGVyIHdoZW4gcHJlc2VudDsgdmFsaWRhdGUgaXQgb3RoZXJ3aXNlCiAgKgogICogUmV0dXJuOiAldHJ1ZSBpZiB0aGUgcmFkaW90YXAgaGVhZGVyIHdhcyBwYXJzZWQsICVmYWxzZSBvdGhlcndpc2UKICAqLwogYm9vbCBpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiYjNDM7CQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRyaW1fZmNzKTsKIAogLyoqCiAgKiBzdHJ1Y3QgaWVlZTgwMjExX25vYV9kYXRhIC0gaG9sZHMgdGVtcG9yYXJ5IGRhdGEgZm9yIHRyYWNraW5nIFAyUCBOb0Egc3RhdGUKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZmFjZS5jIGIvbmV0L21hYzgwMjExL2lmYWNlLmMKaW5kZXggNDM0NjBhNzA1YTZiZC4uZmRhYzcyOWNhNTgwZCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2lmYWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2lmYWNlLmMKQEAgLTk2NCw3ICYjNDM7OTY0LDcgQEAgc3RhdGljIHUxNiBpZWVlODAyMTFfbW9uaXRvcl9zZWxlY3RfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkvKiByZXNldCBmbGFncyBhbmQgaW5mbyBiZWZvcmUgcGFyc2luZyByYWRpb3RhcCBoZWFkZXIgKi8KIAltZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7CiAKLQlpZiAoIWllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcChza2IsIGRldikpCiYjNDM7CWlmICghaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwKHNrYiwgZGV2LCBmYWxzZSkpCiAJCXJldHVybiAwOyAvKiBkb2VzbiYjMzk7dCBtYXR0ZXIsIGZyYW1lIHdpbGwgYmUgZHJvcHBlZCAqLwogCiAJbGVuX3J0aGRyID0gaWVlZTgwMjExX2dldF9yYWRpb3RhcF9sZW4oc2tiLSZndDtkYXRhKTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS90eC5jIGIvbmV0L21hYzgwMjExL3R4LmMKaW5kZXggOTFiMTQxMTJlMjRmMC4uOTc5OTAwMzk2OTVkYiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3R4LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL3R4LmMKQEAgLTIwOTcsNyAmIzQzOzIwOTcsNyBAQCBzdGF0aWMgYm9vbCBpZWVlODAyMTFfdmFsaWRhdGVfcmFkaW90YXBfbGVuKHN0cnVjdCBza19idWZmICpza2IpCiB9CiAKIGJvb2wgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwKHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiYjNDM7CQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRyaW1fZmNzKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0mZ3Q7aWVlZTgwMjExX3B0cik7CiAJc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9pdGVyYXRvciBpdGVyYXRvcjsKQEAgLTIxNTQsNyAmIzQzOzIxNTQsOCBAQCBib29sIGllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCWlmIChza2ItJmd0O2xlbiAmbHQ7IChpdGVyYXRvci5fbWF4X2xlbmd0aCAmIzQzOyBGQ1NfTEVOKSkKIAkJCQkJcmV0dXJuIGZhbHNlOwogCi0JCQkJc2tiX3RyaW0oc2tiLCBza2ItJmd0O2xlbiAtIEZDU19MRU4pOwomIzQzOwkJCQlpZiAodHJpbV9mY3MpCiYjNDM7CQkJCQlza2JfdHJpbShza2IsIHNrYi0mZ3Q7bGVuIC0gRkNTX0xFTik7CiAJCQl9CiAJCQlpZiAoKml0ZXJhdG9yLnRoaXNfYXJnICZhbXA7IElFRUU4MDIxMV9SQURJT1RBUF9GX1dFUCkKIAkJCQlpbmZvLSZndDtmbGFncyAmYW1wOz0gfklFRUU4MDIxMV9UWF9JTlRGTF9ET05UX0VOQ1JZUFQ7CkBAIC0yNDcwLDcgJiM0MzsyNDcxLDcgQEAgbmV0ZGV2X3R4X3QgaWVlZTgwMjExX21vbml0b3Jfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCSAqIHNlbGVjdGVkIGNoYW5kZWYgYWJvdmUgdG8gYWNjdXJhdGVseSBzZXQgaW5qZWN0aW9uIHJhdGVzIGFuZAogCSAqIHJldHJhbnNtaXNzaW9ucy4KIAkgKi8KLQlpZiAoIWllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcChza2IsIGRldikpCiYjNDM7CWlmICghaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwKHNrYiwgZGV2LCB0cnVlKSkKIAkJZ290byBmYWlsX3JjdTsKIAogCS8qIHJlbW92ZSB0aGUgaW5qZWN0aW9uIHJhZGlvdGFwIGhlYWRlciAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTQzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIG1hYzgwMjExIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXBgIGluIGBuZXQvbWFjODAyMTEvdHguY2AgYW5kIGBuZXQvbWFjODAyMTEvaWZhY2UuY2AuIEl0JiMzOTtzIGFkZGluZyBhIGB0cmltX2Zjc2AgYm9vbGVhbiB0byB0aGF0IGZ1bmN0aW9uLCB3aGljaCBtZWFucyB3ZSBjYW4gbm93IG9wdGlvbmFsbHkgc3RyaXAgdGhlIEZyYW1lIENoZWNrIFNlcXVlbmNlIChGQ1MpIHRyYWlsZXIuIFRoYXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gbWFjODAyMTEsIHdoaWNoIGlzLCBvZiBjb3Vyc2UsIHRoZSBoZWFydCBvZiB0aGUgODAyLjExIGltcGxlbWVudGF0aW9uIGluIHRoZSBrZXJuZWwuIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgd2UgY2FuIGZ1enogdXNpbmcgYG1hYzgwMjExX2h3c2ltYCwgd2hpY2ggbWFrZXMgdGhpcyBpbnRlcmVzdGluZy4KCk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBmdW5jdGlvbiYjMzk7cyBjYWxsZXJzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZS4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgY29kZSBzaG93cyB0aGF0IGBpZWVlODAyMTFfbW9uaXRvcl9zZWxlY3RfcXVldWVgIGluIGBuZXQvbWFjODAyMTEvaWZhY2UuY2AgYW5kIGBpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0YCBpbiBgbmV0L21hYzgwMjExL3R4LmNgIGNhbGwgaXQuIE5vdywgdGhvc2UgYXJlIGJvdGggaW50ZXJlc3RpbmcgY2FsbCBzaXRlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXnigJlyZSB1c2luZyB0aGUgcmFkaW90YXAgZGF0YSwgYW5kIGhvdyB0aGlzIGB0cmltX2Zjc2AgbWlnaHQgYWZmZWN0IHRoZW0uIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvbnRleHQgb2YgdGhvc2UgZnVuY3Rpb25zIHRvIHNlZSBob3cgdGhleSYjMzk7bGwgaGFuZGxlIHRoZSBGQ1MgdHJpbW1pbmcgYW5kIGlmIHRoaXMgaW50cm9kdWNlcyBhbnkgc3VidGxlIGJ1Z3MuCgpGaW5hbGx5LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgQ09ORklHX01BQzgwMjExYCBpcyB1c3VhbGx5IHRoZSBvbmUsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQmIzM5O3MgY29ycmVjdCBmb3IgdGhpcyBwYXJ0aWN1bGFyIGJ1aWxkIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1BQzgwMjExJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI6Y29uZmlnIE1BQzgwMjExXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7R2VuZXJpYyBJRUVFIDgwMi4xMSBOZXR3b3JraW5nIFN0YWNrIChtYWM4MDIxMSlcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz0xOT1pZiBNQUM4MDIxMSAhPSBuXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIxOmNvbmZpZyBNQUM4MDIxMV9IQVNfUkNcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIyLVx0Ym9vbFxubmV0L21hYzgwMjExL0tjb25maWctMjMtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNDpjb25maWcgTUFDODAyMTFfUkNfTUlOU1RSRUxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI1LVx0Ym9vbCBcJiMzNDtNaW5zdHJlbFwmIzM0OyBpZiBFWFBFUlRcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz0zMT1jaG9pY2Vcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy00MC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjQxOmNvbmZpZyBNQUM4MDIxMV9SQ19ERUZBVUxUX01JTlNUUkVMXG5uZXQvbWFjODAyMTEvS2NvbmZpZy00Mi1cdGJvb2wgXCYjMzQ7TWluc3RyZWxcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz00OD1lbmRjaG9pY2Vcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQ5LVxubmV0L21hYzgwMjExL0tjb25maWc6NTA6Y29uZmlnIE1BQzgwMjExX1JDX0RFRkFVTFRcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTUxLVx0c3RyaW5nXG4tLVxubmV0L21hYzgwMjExL0tjb25maWc9NTc9Y29tbWVudCBcJiMzNDtTb21lIHdpcmVsZXNzIGRyaXZlcnMgcmVxdWlyZSBhIHJhdGUgY29udHJvbCBhbGdvcml0aG1cJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy01OS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjYwOmNvbmZpZyBNQUM4MDIxMV9LVU5JVF9URVNUXG5uZXQvbWFjODAyMTEvS2NvbmZpZy02MS1cdHRyaXN0YXRlIFwmIzM0O0tVbml0IHRlc3RzIGZvciBtYWM4MDIxMVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubmV0L21hYzgwMjExL0tjb25maWctNjktXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo3MDpjb25maWcgTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL0tjb25maWctNzEtXHRib29sIFwmIzM0O0VuYWJsZSBtYWM4MDIxMSBtZXNoIG5ldHdvcmtpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTc4LVxubmV0L21hYzgwMjExL0tjb25maWc6Nzk6Y29uZmlnIE1BQzgwMjExX0xFRFNcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTgwLVx0Ym9vbCBcJiMzNDtFbmFibGUgTEVEIHRyaWdnZXJzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctODctXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo4ODpjb25maWcgTUFDODAyMTFfREVCVUdGU1xubmV0L21hYzgwMjExL0tjb25maWctODktXHRib29sIFwmIzM0O0V4cG9ydCBtYWM4MDIxMSBpbnRlcm5hbHMgaW4gRGVidWdGU1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTk2LVxubmV0L21hYzgwMjExL0tjb25maWc6OTc6Y29uZmlnIE1BQzgwMjExX01FU1NBR0VfVFJBQ0lOR1xubmV0L21hYzgwMjExL0tjb25maWctOTgtXHRib29sIFwmIzM0O1RyYWNlIGFsbCBtYWM4MDIxMSBkZWJ1ZyBtZXNzYWdlc1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEwOS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjExMDptZW51Y29uZmlnIE1BQzgwMjExX0RFQlVHX01FTlVcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExMS1cdGJvb2wgXCYjMzQ7U2VsZWN0IG1hYzgwMjExIGRlYnVnZ2luZyBmZWF0dXJlc1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExNS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjExNjpjb25maWcgTUFDODAyMTFfTk9JTkxJTkVcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExNy1cdGJvb2wgXCYjMzQ7RG8gbm90IGlubGluZSBUWC9SWCBoYW5kbGVyc1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEzMS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjEzMjpjb25maWcgTUFDODAyMTFfVkVSQk9TRV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTMzLVx0Ym9vbCBcJiMzNDtWZXJib3NlIGRlYnVnZ2luZyBvdXRwdXRcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNDItXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNDM6Y29uZmlnIE1BQzgwMjExX01MTUVfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE0NC1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtYW5hZ2VkIE1MTUUgb3V0cHV0XCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTUzLVxubmV0L21hYzgwMjExL0tjb25maWc6MTU0OmNvbmZpZyBNQUM4MDIxMV9TVEFfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE1NS1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBzdGF0aW9uIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE2Mi1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE2Mzpjb25maWcgTUFDODAyMTFfSFRfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE2NC1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBIVCBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNzQtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNzU6Y29uZmlnIE1BQzgwMjExX09DQl9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTc2LVx0Ym9vbCBcJiMzNDtWZXJib3NlIE9DQiBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xODUtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxODY6Y29uZmlnIE1BQzgwMjExX0lCU1NfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE4Ny1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBJQlNTIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE5Ni1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE5Nzpjb25maWcgTUFDODAyMTFfUFNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE5OC1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBwb3dlcnNhdmUgbW9kZSBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMDgtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMDk6Y29uZmlnIE1BQzgwMjExX01QTF9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjEwLVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggcGVlciBsaW5rIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIyMS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIyMjpjb25maWcgTUFDODAyMTFfTVBBVEhfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIyMy1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIHBhdGggZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjM0LVxubmV0L21hYzgwMjExL0tjb25maWc6MjM1OmNvbmZpZyBNQUM4MDIxMV9NSFdNUF9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjM2LVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggSFdNUCByb3V0aW5nIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI0Ny1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0ODpjb25maWcgTUFDODAyMTFfTUVTSF9TWU5DX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNDktXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBzeW5jaHJvbml6YXRpb24gZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjU4LVxubmV0L21hYzgwMjExL0tjb25maWc6MjU5OmNvbmZpZyBNQUM4MDIxMV9NRVNIX0NTQV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjYwLVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggY2hhbm5lbCBzd2l0Y2ggZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjY5LVxubmV0L21hYzgwMjExL0tjb25maWc6MjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIX1BTX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNzEtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBwb3dlcnNhdmUgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjgwLVxubmV0L21hYzgwMjExL0tjb25maWc6MjgxOmNvbmZpZyBNQUM4MDIxMV9URExTX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yODItXHRib29sIFwmIzM0O1ZlcmJvc2UgVERMUyBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yOTItXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyOTM6Y29uZmlnIE1BQzgwMjExX0RFQlVHX0NPVU5URVJTXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yOTQtXHRib29sIFwmIzM0O0V4dHJhIHN0YXRpc3RpY3MgZm9yIFRYL1JYIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMwNy1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjMwODpjb25maWcgTUFDODAyMTFfU1RBX0hBU0hfTUFYX1NJWkVcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMwOS1cdGludCBcJiMzNDtTdGF0aW9uIGhhc2ggdGFibGUgbWF4aW11bSBzaXplXCYjMzQ7IGlmIE1BQzgwMjExX0RFQlVHX01FTlVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODQ0CgkJCQkJCQlvdXRwdXQ6IDQ5CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBNQUM4MDIxMSBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgYE1BQzgwMjExYCBjb25maWd1cmF0aW9uLiBTdGFuZGFyZCBzdHVmZi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgd2hlcmUgYXJlIHdlIGhlYWRpbmcgd2l0aCB0aGlzPyYjMzQ7IFRoZSBuYXR1cmFsIG5leHQgcXVlc3Rpb24gaXMgYWx3YXlzLCAqZG8gd2UgbmVlZCogYE1BQzgwMjExX0hXU0lNYD8gVGhlIGltcGxpY2F0aW9uIGlzIHRoYXQgd2Ugd2FudCB0byBlbnN1cmUgaGFyZHdhcmUgc2ltdWxhdGlvbiBpcyBhcHByb3ByaWF0ZWx5IGhhbmRsZWQsIG9yIGRpc2FibGVkIHdoZXJlIG5vdCBuZWVkZWQuIFdlIGFyZSBsb29raW5nIHRvIHJlZHVjZSBjb21wbGV4aXR5IG9mIHRoZSBidWlsZCBhbmQgZW5zdXJlIHRoYXQgYW55IGhhcmR3YXJlIHNwZWNpZmljIGRlcGVuZGVuY2llcyBhcmUgaW5jbHVkZWQgd2hlbiBhcHByb3ByaWF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQUM4MDIxMV9IV1NJTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hYzgwMjExX2h3c2ltL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNzMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgV2lyZWxlc3MgRHJpdmVyIExhbmRzY2FwZSoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byBmaW5kIHRoZSBzcGVjaWZpYyBrZXJuZWwgY29kZSByZWxhdGVkIHRvIHRoZSBNQUM4MDIxMSBoYXJkd2FyZSBzaW11bGF0b3IsIGBNQUM4MDIxMV9IV1NJTWAuIEkga25vdyBJJiMzOTt2ZSB3b3JrZWQgd2l0aCBpdCBiZWZvcmUsIGJ1dCB0aGUgZXhhY3QgbG9jYXRpb24gaW4gdGhlIExpbnV4IGtlcm5lbCBzb3VyY2UgdHJlZSBhbHdheXMgc2xpcHMgbXkgbWluZC4gTm8gcHJvYmxlbSwgdGltZSB0byBkbyBhIHF1aWNrIHNlYXJjaC4gVGhlIHdpcmVsZXNzIG5ldHdvcmtpbmcgZHJpdmVycyBhcmUgdXN1YWxseSBvcmdhbml6ZWQgdW5kZXIgYGRyaXZlcnMvbmV0L3dpcmVsZXNzYCwgc28gdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBzdGFydCBsb29raW5nLiBJJiMzOTtsbCBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgb2YgdGhhdCBwYXJ0aWN1bGFyIG1vZHVsZS4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIHRyYWNrIGRvd24gdGhpcyBwaWVjZSBvZiBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQUM4MDIxMV9IV1NJTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWc6MTpjb25maWcgTUFDODAyMTFfSFdTSU1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZy0yLVx0dHJpc3RhdGUgXCYjMzQ7U2ltdWxhdGVkIHJhZGlvIHRlc3RpbmcgdG9vbCBmb3IgbWFjODAyMTFcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Mzc0CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIHRoZSBNQUM4MDIxMSBIV1NJTSBDb25maWd1cmF0aW9uIGFuZCBSYWRpb3RhcCBQYXJzaW5nKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBNQUM4MDIxMV9IV1NJTWAgY29uZmlndXJhdGlvbi4gVGhhdCB0ZWxscyBtZSB0aGlzIGlzIGFsbCBhYm91dCB0aGUgaGFyZHdhcmUgc2ltdWxhdG9yLCB3aGljaCBpcyBrZXkgdG8gbXkgd29yay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaXMgYmVoYXZpbmcgdW5kZXIgc2ltdWxhdGVkIGNvbmRpdGlvbnMuIE5vdywgdGhlIGNydWNpYWwgcGFydCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGlzIGhvdyB0aGUgdHJhbnNtaXQgcmFkaW90YXAgaGVhZGVycyBhcmUgYmVpbmcgaGFuZGxlZCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBtb2RpZmljYXRpb25zIGhhdmUgYmVlbiBtYWRlIHRvIHRoZSBzeXN0ZW0gZm9yIHRoZSBzaW11bGF0b3IuIEkga25vdyB0aGF0IHRoZSBmdW5jdGlvbiBgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwYCBpcyB0aGUga2V5LiBNeSBmb2N1cyBpcyBvbiB0aGF0IHBhcnNpbmcgZnVuY3Rpb24uIFNvLCBJIG5lZWQgdG8gb3BlbiBgbmV0L21hYzgwMjExL3R4LmNgIGFuZCBoYXZlIGEgZ29vZCBsb29rIGF0IHRoYXQgZnVuY3Rpb24uIEkgbmVlZCB0byB0cmFjZSB0aHJvdWdoIGl0LCBwYXlpbmcgcGFydGljdWxhciBhdHRlbnRpb24gdG8gaG93IHRoZSByYWRpb3RhcCBpbmZvcm1hdGlvbiBpcyBpbnRlcnByZXRlZCB3aXRoaW4gdGhlIEhXU0lNIGNvbnRleHQuIEkmIzM5O20gbG9va2luZyBmb3Igd2hlcmUgdGhpbmdzIGRldmlhdGUgb3IgaW50ZXJhY3Qgd2l0aCB0aGUgc2ltdWxhdGVkIGVudmlyb25tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS90eC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjA5NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjA5NjpcdFx0cmV0dXJuIHRydWU7XG4yMDk3Olx0fVxuMjA5ODpcdFxuMjA5OTpcdGJvb2wgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwKHN0cnVjdCBza19idWZmICpza2IsXG4yMTAwOlx0XHRcdFx0XHQgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB0cmltX2ZjcylcbjIxMDE6XHR7XG4yMTAyOlx0XHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtXHUwMDNlaWVlZTgwMjExX3B0cik7XG4yMTAzOlx0XHRzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2l0ZXJhdG9yIGl0ZXJhdG9yO1xuMjEwNDpcdFx0c3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIgKnJ0aGRyID1cbjIxMDU6XHRcdFx0KHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyICopIHNrYi1cdTAwM2VkYXRhO1xuMjEwNjpcdFx0c3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpO1xuMjEwNzpcdFx0aW50IHJldCA9IGllZWU4MDIxMV9yYWRpb3RhcF9pdGVyYXRvcl9pbml0KFx1MDAyNml0ZXJhdG9yLCBydGhkciwgc2tiLVx1MDAzZWxlbixcbjIxMDg6XHRcdFx0XHRcdFx0XHQgICBOVUxMKTtcbjIxMDk6XHRcdHUxNiB0eGZsYWdzO1xuMjExMDpcdFx0dTE2IHJhdGUgPSAwO1xuMjExMTpcdFx0Ym9vbCByYXRlX2ZvdW5kID0gZmFsc2U7XG4yMTEyOlx0XHR1OCByYXRlX3JldHJpZXMgPSAwO1xuMjExMzpcdFx0dTE2IHJhdGVfZmxhZ3MgPSAwO1xuMjExNDpcdFx0dTggbWNzX2tub3duLCBtY3NfZmxhZ3MsIG1jc19idztcbjIxMTU6XHRcdHUxNiB2aHRfa25vd247XG4yMTE2Olx0XHR1OCB2aHRfbWNzID0gMCwgdmh0X25zcyA9IDA7XG4yMTE3Olx0XHRpbnQgaTtcbjIxMTg6XHRcbjIxMTk6XHRcdGlmICghaWVlZTgwMjExX3ZhbGlkYXRlX3JhZGlvdGFwX2xlbihza2IpKVxuMjEyMDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4yMTIxOlx0XG4yMTIyOlx0XHRpbmZvLVx1MDAzZWZsYWdzIHw9IElFRUU4MDIxMV9UWF9JTlRGTF9ET05UX0VOQ1JZUFQgfFxuMjEyMzpcdFx0XHQgICAgICAgSUVFRTgwMjExX1RYX0NUTF9ET05URlJBRztcbjIxMjQ6XHRcbjIxMjU6XHRcdC8qXG4yMTI2Olx0XHQgKiBmb3IgZXZlcnkgcmFkaW90YXAgZW50cnkgdGhhdCBpcyBwcmVzZW50XG4yMTI3Olx0XHQgKiAoaWVlZTgwMjExX3JhZGlvdGFwX2l0ZXJhdG9yX25leHQgcmV0dXJucyAtRU5PRU5UIHdoZW4gbm8gbW9yZVxuMjEyODpcdFx0ICogZW50cmllcyBwcmVzZW50LCBvciAtRUlOVkFMIG9uIGVycm9yKVxuMjEyOTpcdFx0ICovXG4yMTMwOlx0XG4yMTMxOlx0XHR3aGlsZSAoIXJldCkge1xuMjEzMjpcdFx0XHRyZXQgPSBpZWVlODAyMTFfcmFkaW90YXBfaXRlcmF0b3JfbmV4dChcdTAwMjZpdGVyYXRvcik7XG4yMTMzOlx0XG4yMTM0Olx0XHRcdGlmIChyZXQpXG4yMTM1Olx0XHRcdFx0Y29udGludWU7XG4yMTM2Olx0XG4yMTM3Olx0XHRcdC8qIHNlZSBpZiB0aGlzIGFyZ3VtZW50IGlzIHNvbWV0aGluZyB3ZSBjYW4gdXNlICovXG4yMTM4Olx0XHRcdHN3aXRjaCAoaXRlcmF0b3IudGhpc19hcmdfaW5kZXgpIHtcbjIxMzk6XHRcdFx0LypcbjIxNDA6XHRcdFx0ICogWW91IG11c3QgdGFrZSBjYXJlIHdoZW4gZGVyZWZlcmVuY2luZyBpdGVyYXRvci50aGlzX2FyZ1xuMjE0MTpcdFx0XHQgKiBmb3IgbXVsdGlieXRlIHR5cGVzLi4uIHRoZSBwb2ludGVyIGlzIG5vdCBhbGlnbmVkLiAgVXNlXG4yMTQyOlx0XHRcdCAqIGdldF91bmFsaWduZWQoKHR5cGUgKilpdGVyYXRvci50aGlzX2FyZykgdG8gZGVyZWZlcmVuY2VcbjIxNDM6XHRcdFx0ICogaXRlcmF0b3IudGhpc19hcmcgZm9yIHR5cGUgXCYjMzQ7dHlwZVwmIzM0OyBzYWZlbHkgb24gYWxsIGFyY2hlcy5cbjIxNDQ6XHRcdFx0Ki9cbjIxNDU6XHRcdFx0Y2FzZSBJRUVFODAyMTFfUkFESU9UQVBfRkxBR1M6XG4yMTQ2Olx0XHRcdFx0aWYgKCppdGVyYXRvci50aGlzX2FyZyBcdTAwMjYgSUVFRTgwMjExX1JBRElPVEFQX0ZfRkNTKSB7XG4yMTQ3Olx0XHRcdFx0XHQvKlxuMjE0ODpcdFx0XHRcdFx0ICogdGhpcyBpbmRpY2F0ZXMgdGhhdCB0aGUgc2tiIHdlIGhhdmUgYmVlblxuMjE0OTpcdFx0XHRcdFx0ICogaGFuZGVkIGhhcyB0aGUgMzItYml0IEZDUyBDUkMgYXQgdGhlIGVuZC4uLlxuMjE1MDpcdFx0XHRcdFx0ICogd2Ugc2hvdWxkIHJlYWN0IHRvIHRoYXQgYnkgc25pcHBpbmcgaXQgb2ZmXG4yMTUxOlx0XHRcdFx0XHQgKiBiZWNhdXNlIGl0IHdpbGwgYmUgcmVjb21wdXRlZCBhbmQgYWRkZWRcbjIxNTI6XHRcdFx0XHRcdCAqIG9uIHRyYW5zbWlzc2lvblxuMjE1MzpcdFx0XHRcdFx0ICovXG4yMTU0Olx0XHRcdFx0XHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2MgKGl0ZXJhdG9yLl9tYXhfbGVuZ3RoICYjNDM7IEZDU19MRU4pKVxuMjE1NTpcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4yMTU2Olx0XG4yMTU3Olx0XHRcdFx0XHRpZiAodHJpbV9mY3MpXG4yMTU4Olx0XHRcdFx0XHRcdHNrYl90cmltKHNrYiwgc2tiLVx1MDAzZWxlbiAtIEZDU19MRU4pO1xuMjE1OTpcdFx0XHRcdH1cbjIxNjA6XHRcdFx0XHRpZiAoKml0ZXJhdG9yLnRoaXNfYXJnIFx1MDAyNiBJRUVFODAyMTFfUkFESU9UQVBfRl9XRVApXG4yMTYxOlx0XHRcdFx0XHRpbmZvLVx1MDAzZWZsYWdzIFx1MDAyNj0gfklFRUU4MDIxMV9UWF9JTlRGTF9ET05UX0VOQ1JZUFQ7XG4yMTYyOlx0XHRcdFx0aWYgKCppdGVyYXRvci50aGlzX2FyZyBcdTAwMjYgSUVFRTgwMjExX1JBRElPVEFQX0ZfRlJBRylcbjIxNjM6XHRcdFx0XHRcdGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2PSB+SUVFRTgwMjExX1RYX0NUTF9ET05URlJBRztcbjIxNjQ6XHRcdFx0XHRicmVhaztcbjIxNjU6XHRcbjIxNjY6XHRcdFx0Y2FzZSBJRUVFODAyMTFfUkFESU9UQVBfVFhfRkxBR1M6XG4yMTY3Olx0XHRcdFx0dHhmbGFncyA9IGdldF91bmFsaWduZWRfbGUxNihpdGVyYXRvci50aGlzX2FyZyk7XG4yMTY4Olx0XHRcdFx0aWYgKHR4ZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9SQURJT1RBUF9GX1RYX05PQUNLKVxuMjE2OTpcdFx0XHRcdFx0aW5mby1cdTAwM2VmbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSztcbjIxNzA6XHRcdFx0XHRpZiAodHhmbGFncyBcdTAwMjYgSUVFRTgwMjExX1JBRElPVEFQX0ZfVFhfTk9TRVFOTylcbjIxNzE6XHRcdFx0XHRcdGluZm8tXHUwMDNlY29udHJvbC5mbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RSTF9OT19TRVFOTztcbjIxNzI6XHRcdFx0XHRpZiAodHhmbGFncyBcdTAwMjYgSUVFRTgwMjExX1JBRElPVEFQX0ZfVFhfT1JERVIpXG4yMTczOlx0XHRcdFx0XHRpbmZvLVx1MDAzZWNvbnRyb2wuZmxhZ3MgfD1cbjIxNzQ6XHRcdFx0XHRcdFx0SUVFRTgwMjExX1RYX0NUUkxfRE9OVF9SRU9SREVSO1xuMjE3NTpcdFx0XHRcdGJyZWFrO1xuMjE3NjpcdFxuMjE3NzpcdFx0XHRjYXNlIElFRUU4MDIxMV9SQURJT1RBUF9SQVRFOlxuMjE3ODpcdFx0XHRcdHJhdGUgPSAqaXRlcmF0b3IudGhpc19hcmc7XG4yMTc5Olx0XHRcdFx0cmF0ZV9mbGFncyA9IDA7XG4yMTgwOlx0XHRcdFx0cmF0ZV9mb3VuZCA9IHRydWU7XG4yMTgxOlx0XHRcdFx0YnJlYWs7XG4yMTgyOlx0XG4yMTgzOlx0XHRcdGNhc2UgSUVFRTgwMjExX1JBRElPVEFQX0FOVEVOTkE6XG4yMTg0Olx0XHRcdFx0LyogdGhpcyBjYW4gYXBwZWFyIG11bHRpcGxlIHRpbWVzLCBrZWVwIGEgYml0bWFwICovXG4yMTg1Olx0XHRcdFx0LyogY29udHJvbC5hbnRlbm5hcyBpcyBvbmx5IGEgMi1iaXQgYml0bWFwICovXG4yMTg2Olx0XHRcdFx0aWYgKCppdGVyYXRvci50aGlzX2FyZyBcdTAwM2MgMilcbjIxODc6XHRcdFx0XHRcdGluZm8tXHUwMDNlY29udHJvbC5hbnRlbm5hcyB8PSBCSVQoKml0ZXJhdG9yLnRoaXNfYXJnKTtcbjIxODg6XHRcdFx0XHRicmVhaztcbjIxODk6XHRcbjIxOTA6XHRcdFx0Y2FzZSBJRUVFODAyMTFfUkFESU9UQVBfREFUQV9SRVRSSUVTOlxuMjE5MTpcdFx0XHRcdHJhdGVfcmV0cmllcyA9ICppdGVyYXRvci50aGlzX2FyZztcbjIxOTI6XHRcdFx0XHRicmVhaztcbjIxOTM6XHRcbjIxOTQ6XHRcdFx0Y2FzZSBJRUVFODAyMTFfUkFESU9UQVBfTUNTOlxuMjE5NTpcdFx0XHRcdG1jc19rbm93biA9IGl0ZXJhdG9yLnRoaXNfYXJnWzBdO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTA5CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgUGxhbiBmb3IgUmFkaW90YXAgSGVhZGVyIFBhcnNpbmcqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgYGllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcGAgZnVuY3Rpb24sIGFuZCBpdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgdGVzdGFibGUuIFRoZSB3aG9sZSBwb2ludCBpcyBpdCBwYXJzZXMgcmFkaW90YXAgaGVhZGVycyBmcm9tIGluamVjdGVkIHBhY2tldHMg4oCTIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCB3ZSBuZWVkIHRvIGZ1enogZ2l2ZW4gdGhlIHBhdGNoIGludHJvZHVjZXMgYSBgdHJpbV9mY3NgIGFyZ3VtZW50LCBjaGFuZ2luZyB0aGUgYmVoYXZpb3Igb2YgdGhlIEZDUyBoYW5kbGluZy4gSWYgYHRyaW1fZmNzYCBpcyB0cnVlLCBpdCB0cmltcyB0aGUgRkNTIHRyYWlsZXIgYW5kIGlmIGl0IGlzIGZhbHNlLCBpdCBkb2VzbiYjMzk7dCB0cmltIGl0LCBidXQgdmFsaWRhdGVzIHRoZSBsZW5ndGguCgpUaGUgZ29vZCBuZXdzIGlzIHRoYXQgd2UgY2FuIGRlZmluaXRlbHkgaW5qZWN0IHRoZXNlIHBhY2tldHMuIFdlIGNhbiB1c2UgdGhlIGZ1enplciB0byBpbmplY3QgcGFja2V0cyB3aXRoIHJhZGlvdGFwIGhlYWRlcnMgdGhyb3VnaCBgbWFjODAyMTFfaHdzaW1gIG9yLCBpZiBpdOKAmXMgYSBtb25pdG9yIGludGVyZmFjZSwgdGhyb3VnaCB0dW4vdGFwLiBXYWl0LCB5ZWFoLCBtb25pdG9yIGludGVyZmFjZXMhIE1hYzgwMjExIG1vbml0b3IgaW50ZXJmYWNlcyAqY2FuKiBiZSBjcmVhdGVkLCBhbmQgd2UgKmNhbiogaW5qZWN0IHBhY2tldHMgaW50byB0aGVtLiBUaGF0JiMzOTtzIGV4Y2VsbGVudCEgVGhlIGBNQUM4MDIxMV9IV1NJTWAgY29uZmlnIGxvb2tzIHNvbGlkLCBhbmQgb2J2aW91c2x5LCBgTUFDODAyMTFgIGlzIGVzc2VudGlhbC4KCk5vdywgbGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSYjMzk7dmUgaWRlbnRpZmllZCB0aGUgcmlnaHQgZXhlY3V0aW9uIHBhdGhzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgYGllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcGAgaXMgY2FsbGVkLiBMZXQgbWUgc2VlLi4uIEkgc2hvdWxkIGNoZWNrIGBpZWVlODAyMTFfbW9uaXRvcl9zZWxlY3RfcXVldWVgIGFuZCBgaWVlZTgwMjExX21vbml0b3Jfc3RhcnRfeG1pdGAuIFJpZ2h0ISBgaWVlZTgwMjExX21vbml0b3Jfc3RhcnRfeG1pdGAgaXMgdGhlIGBuZG9fc3RhcnRfeG1pdGAgZm9yIG1vbml0b3IgaW50ZXJmYWNlcyEgU28sIGluamVjdGluZyBwYWNrZXRzIGludG8gYSBtb25pdG9yIGludGVyZmFjZSB3aWxsIHRyaWdnZXIgdGhpcyBmdW5jdGlvbi4gVGhlIGZ1enplciBjYW4gZG8gdGhpcyBieSBjcmVhdGluZyBhIG1vbml0b3IgaW50ZXJmYWNlIGFuZCBzZW5kaW5nIHBhY2tldHMgdG8gaXQuIFBlcmZlY3QsIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBXZSBhcmUgZ29pbmcgdG8gaGFtbWVyIHRoaXMgd2l0aCBmdXp6ZXJzIQoKT2theSwgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMuIERlZmluaXRlbHkgYGllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcGAgaXMgdGhlIG1haW4gdGFyZ2V0LiBBbHNvLCBgaWVlZTgwMjExX21vbml0b3Jfc3RhcnRfeG1pdGAgaXMgYW5vdGhlciBrZXkgb25lLCBhbmQgYGllZWU4MDIxMV9tb25pdG9yX3NlbGVjdF9xdWV1ZWAgaXMgYWxzbyByZWFjaGFibGUuCgpGaW5hbGx5LCBqdXN0IGEgcXVpY2sgY2hlY2sgZm9yIGRlcGVuZGVuY2llcy4gV2Uga25vdyBgTUFDODAyMTFgIGFuZCBgTUFDODAyMTFfSFdTSU1gIGFyZSB0aGUgcHJpbWFyeSBjb25maWdzIG5lZWRlZCwgYnV0IEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgaGlkZGVuIGRlcGVuZGVuY2llcy4gSSYjMzk7bGwgY2hlY2sgYE1BQzgwMjExX0hXU0lNYCYjMzk7cyBkZXBlbmRlbmNpZXMganVzdCB0byBiZSBjb21wbGV0ZWx5IHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQUM4MDIxMV9IV1NJTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWc6MTpjb25maWcgTUFDODAyMTFfSFdTSU1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZy0yLVx0dHJpc3RhdGUgXCYjMzQ7U2ltdWxhdGVkIHJhZGlvIHRlc3RpbmcgdG9vbCBmb3IgbWFjODAyMTFcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTYxNwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIGBNQUM4MDIxMV9IV1NJTWAgRGVmaW5pdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYE1BQzgwMjExX0hXU0lNYC4gSSBrbm93IGl0JiMzOTtzIHJlbGF0ZWQgdG8gdGhlIG1hYzgwMjExIGZyYW1ld29yaywgb2J2aW91c2x5LiBCdXQgSSBuZWVkIHRvIGdvIGRlZXBlciB0aGFuIGp1c3QgdGhlIG5hbWUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBwdWxsIHVwIHRoZSBmdWxsIGRlZmluaXRpb24g4oCTIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCB0aGlzIHRoaW5nICppcyogYXQgYSBjb2RlIGxldmVsLiBXaGF0IGRvZXMgdGhpcyBtYWNybyBzdGFuZCBmb3I/IFdoYXQgaW1wbGljYXRpb25zIGRvZXMgdGhhdCBoYXZlIG9uIHRoZSBmcmFtZXdvcmsmIzM5O3MgYmVoYXZpb3I/IElzIGl0IGEgY29tcGlsZS10aW1lIGZsYWcsIGEgc3RydWN0IGRlZmluaXRpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgc3BlY2lmaWNzIG9mIHRoZSBkZWZpbml0aW9uIHdpbGwgcmV2ZWFsIGNydWNpYWwgaW5zaWdodHMsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gaGFyZHdhcmUgc2ltdWxhdGlvbi4gRG9lcyBpdCB0aWUgaW50byB0aGUgaW50ZXJuYWwgc3RydWN0dXJlcywgYW5kIGlmIHNvLCBob3c/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIHZhcmlvdXMgbGF5ZXJzIG9mIHRoZSBtYWM4MDIxMSBzdGFjay4gVWx0aW1hdGVseSwgbXkgZ29hbCBoZXJlIGlzIHRvIGdyYXNwIHRoZSBwcmFjdGljYWwgY29uc2VxdWVuY2VzIG9mIGl0cyBwcmVzZW5jZSBvciBhYnNlbmNlIHdpdGhpbiB0aGUgc3lzdGVtLiBMZXQmIzM5O3Mgc2VlIGl0IGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgZnJhbWV3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdGNvbmZpZyBNQUM4MDIxMV9IV1NJTVxuICAgMjpcdFx0dHJpc3RhdGUgXCYjMzQ7U2ltdWxhdGVkIHJhZGlvIHRlc3RpbmcgdG9vbCBmb3IgbWFjODAyMTFcJiMzNDtcbiAgIDM6XHRcdGRlcGVuZHMgb24gTUFDODAyMTFcbiAgIDQ6XHRcdGhlbHBcbiAgIDU6XHRcdCAgVGhpcyBkcml2ZXIgaXMgYSBkZXZlbG9wZXIgdGVzdGluZyB0b29sIHRoYXQgY2FuIGJlIHVzZWQgdG8gdGVzdFxuICAgNjpcdFx0ICBJRUVFIDgwMi4xMSBuZXR3b3JraW5nIHN0YWNrIChtYWM4MDIxMSkgZnVuY3Rpb25hbGl0eS4gVGhpcyBpcyBub3RcbiAgIDc6XHRcdCAgbmVlZGVkIGZvciBub3JtYWwgd2lyZWxlc3MgTEFOIHVzYWdlIGFuZCBpcyBvbmx5IGZvciB0ZXN0aW5nLiBTZWVcbiAgIDg6XHRcdCAgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL21hYzgwMjExX2h3c2ltIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvd1xuICAgOTpcdFx0ICB0byB1c2UgdGhpcyB0b29sLlxuICAxMDpcdFxuICAxMTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmVcbiAgMTI6XHRcdCAgY2FsbGVkIG1hYzgwMjExX2h3c2ltLiAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMTM6XHRcbiAgMTQ6XHRjb25maWcgVklSVF9XSUZJXG4gIDE1Olx0XHR0cmlzdGF0ZSBcJiMzNDtXaWZpIHdyYXBwZXIgZm9yIGV0aGVybmV0IGRyaXZlcnNcJiMzNDtcbiAgMTY6XHRcdGRlcGVuZHMgb24gQ0ZHODAyMTFcbiAgMTc6XHRcdGhlbHBcbiAgMTg6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBldGhlcm5ldCBjb25uZWN0aW9ucyB0byBhcHBlYXIgYXMgaWYgdGhleVxuICAxOTpcdFx0ICBhcmUgd2lmaSBjb25uZWN0aW9ucyB0aHJvdWdoIGEgc3BlY2lhbCBydG5ldGxpbmsgZGV2aWNlLlxuICAyMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDIzMwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgZGVwZW5kZW5jaWVzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGVlcCBEaXZlIGludG8gV2lyZWxlc3MgRHJpdmVyIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBzdHJhaWdodGZvcndhcmQgd2hlbiBJIHNlZSB0aGVzZSBkZXBlbmRlbmNpZXMuIGBNQUM4MDIxMV9IV1NJTWAg4oCTIHJpZ2h0LCB0aGF0JiMzOTtzIHRoZSBoYXJkd2FyZSBzaW11bGF0aW9uIG1vZHVsZSBmb3IgTUFDODAyMTEsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGl0IGhhcyBhIGRpcmVjdCBkZXBlbmRlbmNlIG9uIHRoZSBtYWluIGBNQUM4MDIxMWAgZnJhbWV3b3JrLiBObyBzdXJwcmlzZXMgdGhlcmUuIEl0IHdvdWxkIGJlIGJpemFycmUgaWYgaXQgKmRpZG4mIzM5O3QqIGRlcGVuZCBvbiBpdC4gVGhhdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGFyY2hpdGVjdHVyYWwgZ2l2ZW4uCgpOb3csIGBNQUM4MDIxMWAgaXRzZWxmLi4uIGFoIHllcywgdGhhdCYjMzk7cyBidWlsdCBvbiBgQ0ZHODAyMTFgLiBUaGF0JiMzOTtzIHRoZSBjb3JlLiBgQ0ZHODAyMTFgIHByb3ZpZGVzIHRoZSBjb25maWd1cmF0aW9uIGFuZCByZWd1bGF0b3J5IGRvbWFpbiBpbnRlcmZhY2UgZm9yIDgwMi4xMSBkZXZpY2VzIGluIHRoZSBMaW51eCBrZXJuZWwuIEl0JiMzOTtzIHRoZSBhYnN0cmFjdGlvbiBsYXllci4gRXZlcnl0aGluZyBlbHNlLCBgTUFDODAyMTFgLCB0aGUgaGFyZHdhcmUgc2ltdWxhdGlvbnMsIGFsbCB1c2UgYENGRzgwMjExYC4KClNvLCB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgZm9yIG1lLCBhbmQgSSYjMzk7bSBzdXJlIEkmIzM5O20gbm90IGFsb25lLCBpcyB0byBxdWlja2x5IGRyaWxsIGRvd24gYW5kIG1ha2Ugc3VyZSBgQ0ZHODAyMTFgIGlzIHNvdW5kLiBXaGF0JiMzOTtzIHRoZSBzdGF0dXMgb2YgdGhhdCBpbnRlcmZhY2U/IElzIGl0IHdvcmtpbmcgYXMgZXhwZWN0ZWQ/IE5vIHBvaW50IHNwZW5kaW5nIHRpbWUgb24gdGhlIGRvd25zdHJlYW0gYml0cyBpZiB0aGUgZm91bmRhdGlvbiBpc24mIzM5O3Qgc29saWQuIEkmIzM5O2Qgd2FudCB0byBjaGVjayBpdHMgdmVyc2lvbiwgYW55IHJlY2VudCBwYXRjaGVzLCBrbm93biBidWdzLCBhbnkgcmVncmVzc2lvbnMgaXQgbWlnaHQgaGF2ZSBpbnRyb2R1Y2VkLiBCYXNpY2FsbHksIGEgcXVpY2sgZGlhZ25vc3RpYyBvbiB0aGUgbG93ZXN0IGxldmVsIGlzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0ZHODAyMTEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvS2NvbmZpZz0xND1jb25maWcgV0VYVF9QUklWXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTYtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNzpjb25maWcgQ0ZHODAyMTFcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4LVx0dHJpc3RhdGUgXCYjMzQ7Y2ZnODAyMTEgLSB3aXJlbGVzcyBjb25maWd1cmF0aW9uIEFQSVwmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnPTM4PWNvbmZpZyBOTDgwMjExX1RFU1RNT0RFXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctNTEtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo1Mjpjb25maWcgQ0ZHODAyMTFfREVWRUxPUEVSX1dBUk5JTkdTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy01My1cdGJvb2wgXCYjMzQ7ZW5hYmxlIGRldmVsb3BlciB3YXJuaW5nc1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTY3LVxubmV0L3dpcmVsZXNzL0tjb25maWc6Njg6Y29uZmlnIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xubmV0L3dpcmVsZXNzL0tjb25maWctNjktXHRib29sIFwmIzM0O2NmZzgwMjExIGNlcnRpZmljYXRpb24gb251c1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTg4LVxubmV0L3dpcmVsZXNzL0tjb25maWc6ODk6Y29uZmlnIENGRzgwMjExX1JFUVVJUkVfU0lHTkVEX1JFR0RCXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy05MC1cdGJvb2wgXCYjMzQ7cmVxdWlyZSByZWdkYiBzaWduYXR1cmVcJiMzNDsgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctOTgtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo5OTpjb25maWcgQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMDAtXHRib29sIFwmIzM0O2FsbG93IHJlZ2RiIGtleXMgc2hpcHBlZCB3aXRoIHRoZSBrZXJuZWxcJiMzNDsgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTEwLVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTExOmNvbmZpZyBDRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVJcbm5ldC93aXJlbGVzcy9LY29uZmlnLTExMi1cdHN0cmluZyBcJiMzNDthZGRpdGlvbmFsIHJlZ2RiIGtleSBkaXJlY3RvcnlcJiMzNDsgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTIxLVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTIyOmNvbmZpZyBDRkc4MDIxMV9SRUdfQ0VMTFVMQVJfSElOVFNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEyMy1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgcmVndWxhdG9yeSBzdXBwb3J0IGZvciBjZWxsdWxhciBiYXNlIHN0YXRpb24gaGludHNcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMzQtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMzU6Y29uZmlnIENGRzgwMjExX1JFR19SRUxBWF9OT19JUlxubmV0L3dpcmVsZXNzL0tjb25maWctMTM2LVx0Ym9vbCBcJiMzNDtjZmc4MDIxMSBzdXBwb3J0IGZvciBOT19JUiByZWxheGF0aW9uXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTU4LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTU5OmNvbmZpZyBDRkc4MDIxMV9ERUZBVUxUX1BTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNjAtXHRib29sIFwmIzM0O2VuYWJsZSBwb3dlcnNhdmUgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2OC1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE2OTpjb25maWcgQ0ZHODAyMTFfREVCVUdGU1xubmV0L3dpcmVsZXNzL0tjb25maWctMTcwLVx0Ym9vbCBcJiMzNDtjZmc4MDIxMSBEZWJ1Z0ZTIGVudHJpZXNcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzYtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNzc6Y29uZmlnIENGRzgwMjExX0NSREFfU1VQUE9SVFxubmV0L3dpcmVsZXNzL0tjb25maWctMTc4LVx0Ym9vbCBcJiMzNDtzdXBwb3J0IENSREFcJiMzNDsgaWYgRVhQRVJUXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTg2LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTg3OmNvbmZpZyBDRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODgtXHRib29sIFwmIzM0O2NmZzgwMjExIHdpcmVsZXNzIGV4dGVuc2lvbnMgY29tcGF0aWJpbGl0eVwmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE5My1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE5NDpjb25maWcgQ0ZHODAyMTFfS1VOSVRfVEVTVFxubmV0L3dpcmVsZXNzL0tjb25maWctMTk1LVx0dHJpc3RhdGUgXCYjMzQ7S1VuaXQgdGVzdHMgZm9yIGNmZzgwMjExXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1ODEKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBXaUZpIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYENGRzgwMjExYCBzdHVmZiwgd2hpY2ggaXMgb2J2aW91c2x5IHRoZSBjb25maWd1cmF0aW9uIGludGVyZmFjZSBmb3IgY2ZnODAyMTEsIG1ha2VzIHNlbnNlLiBOb3csIGxldCYjMzk7cyBzZWUsIHRvIGdldCB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IEkgbmVlZCwgSSYjMzk7bGwgZGVmaW5pdGVseSB3YW50IHRvIGVuYWJsZSBgTUFDODAyMTFgLCBgTUFDODAyMTFfSFdTSU1gLCBhbmQgb2YgY291cnNlIGBDRkc4MDIxMWAuIFJpZ2h0LCAqdGhhdCogZHJpdmVyLCBgTUFDODAyMTFfSFdTSU1gLCBpcyB1c2VmdWwsIEkgc2hvdWxkIHJlbWVtYmVyIHRvIGluY2x1ZGUgdGhhdC4KCkkmIzM5O3ZlIGdvdCBhIG1lbnRhbCBjaGVja2xpc3Qgb2Yga2V5IGZ1bmN0aW9ucyBJJiMzOTttIGZvY3VzaW5nIG9uIOKAkyBgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwYCwgYGllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXRgLCBhbmQgYGllZWU4MDIxMV9tb25pdG9yX3NlbGVjdF9xdWV1ZWAuIEkgbmVlZCB0byBlbnN1cmUgdGhlc2UgYXJlIGNvbmZpZ3VyZWQgY29ycmVjdGx5LgoKTGV0IG1lIGp1c3QgcXVpY2tseSB2ZXJpZnkgaWYgYGllZWU4MDIxMV9tb25pdG9yX3NlbGVjdF9xdWV1ZWAgaXMgc3RhdGljLiBHb3R0YSBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZWVlODAyMTFfbW9uaXRvcl9zZWxlY3RfcXVldWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvaWZhY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvaWZhY2UuYz05NDE9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpZWVlODAyMTFfZGF0YWlmX29wcyA9IHtcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYy05NTAtXG5uZXQvbWFjODAyMTEvaWZhY2UuYzo5NTE6c3RhdGljIHUxNiBpZWVlODAyMTFfbW9uaXRvcl9zZWxlY3RfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTk1Mi1cdFx0XHRcdFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jPTk3OT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGllZWU4MDIxMV9tb25pdG9yaWZfb3BzID0ge1xuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTk4NS1cdC5uZG9fc2V0X21hY19hZGRyZXNzIFx0PSBpZWVlODAyMTFfY2hhbmdlX21hYyxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjk4NjpcdC5uZG9fc2VsZWN0X3F1ZXVlXHQ9IGllZWU4MDIxMV9tb25pdG9yX3NlbGVjdF9xdWV1ZSxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTk4Ny19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjMyMgoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQXNzZXNzaW5nIHRoZSBDb2RlYmFzZTogU3RhdGljIHZzLiBOb24tU3RhdGljIEZ1bmN0aW9ucyoqCgpSaWdodCwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoaXMgYGllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcGAgZnVuY3Rpb24uIFRoZSBjb2RlIHNlZW1zIHByZXR0eSBzdGFibGU7IGl0JiMzOTtzIHN0YXRpYyBpbiBuYXR1cmUsIHdoaWNoIG1ha2VzIGl0IGdvb2QgaW4gYSBsb3Qgb2Ygd2F5cy4gSG93ZXZlciwgd2hpbGUgc3RhdGljIGZ1bmN0aW9ucyBvZmZlciBiZW5lZml0cywgbXkgZ2VuZXJhbCBwcmVmZXJlbmNlIGlzIHRvIGF2b2lkIHRoZW0gd2hlbmV2ZXIgYSBub24tc3RhdGljIG9wdGlvbiBzZXJ2ZXMgdGhlIHNhbWUgcHVycG9zZSBhcyB0aGUgY29kZSBiZWNvbWVzIGxlc3MgZmxleGlibGUgYW5kIHJlLXVzYWJsZS4gTm93LCBJIHNlZSB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gaXNuJiMzOTt0IG1hcmtlZCBhcyBzdGF0aWMsIHdoaWNoIGlzIGEgZ29vZCB0aGluZyBhbmQgbWFrZXMgdGhpcyBjb2RlIG1vcmUgcmUtdXNhYmxlLiBHb29kLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8ga2VlcCB0aGF0IGluIG1pbmQgd2hlbiBkb2luZyBhIGNvZGUgcmV2aWV3LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvdHguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvdHguYz0yMDc5PXN0YXRpYyBib29sIGllZWU4MDIxMV92YWxpZGF0ZV9yYWRpb3RhcF9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbWFjODAyMTEvdHguYy0yMDk4LVxubmV0L21hYzgwMjExL3R4LmM6MjA5OTpib29sIGllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L21hYzgwMjExL3R4LmMtMjEwMC1cdFx0XHRcdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRyaW1fZmNzKVxuLS1cbm5ldC9tYWM4MDIxMS90eC5jPTIzMTg9bmV0ZGV2X3R4X3QgaWVlZTgwMjExX21vbml0b3Jfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTI0NzMtXHQgKi9cbm5ldC9tYWM4MDIxMS90eC5jOjI0NzQ6XHRpZiAoIWllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcChza2IsIGRldiwgdHJ1ZSkpXG5uZXQvbWFjODAyMTEvdHguYy0yNDc1LVx0XHRnb3RvIGZhaWxfcmN1O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg3MwoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgY29kZSBlbGVtZW50cywgdGhpbmtpbmcgdGhyb3VnaCB0aGVtIGFzIEkgd291bGQgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGVtLgoKKipBbmFseXppbmcgSUVFRSA4MDIuMTEgVFggUGF0aCoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgdGhpcyB3aXJlbGVzcyBkcml2ZXIsIGZvY3VzaW5nIG9uIHRoZSB0cmFuc21pdCBwYXRoLiBJIHNlZSB0d28ga2V5IGZ1bmN0aW9ucyBmbGFnZ2VkIGhlcmUuIFRoZSBmaXJzdCwgYGllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcGAsIGFuZCB0aGUgc2Vjb25kLCBgaWVlZTgwMjExX21vbml0b3Jfc3RhcnRfeG1pdGAuIFRoZSBmYWN0IHRoYXQgbmVpdGhlciBvZiB0aGVzZSBpcyBkZWNsYXJlZCBgc3RhdGljYCBpbW1lZGlhdGVseSBncmFicyBteSBhdHRlbnRpb24uIFRoYXQgaW1wbGllcyB0aGV5IGhhdmUgZXh0ZXJuYWwgbGlua2FnZS4gTm93LCBjb25zaWRlcmluZyB0aGUgY29udGV4dCBvZiBhIHdpcmVsZXNzIGRyaXZlciwgdGhhdCBjb3VsZCBtZWFuIGEgZmV3IHRoaW5ncywgYW5kIEkgbmVlZCB0byBleHBsb3JlIHRoZSBpbXBsaWNhdGlvbnMuCgpJZiB0aGV5IHdlcmVuJiMzOTt0IHN0YXRpYywgaXQgcG9pbnRzIHRvIHRoZXNlIGZ1bmN0aW9ucyBiZWluZyBwb3RlbnRpYWxseSBjYWxsYWJsZSBmcm9tIG1vZHVsZXMgb3Igb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCBvdXRzaWRlIHRoZSBpbW1lZGlhdGUgZHJpdmVyIGNvZGUgaXRzZWxmLiBgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwYCBpcyByZXNwb25zaWJsZSBmb3IgcGFyc2luZyBhIHJhZGlvdGFwIGhlYWRlciBvbiB0cmFuc21pdCwgd2hpY2ggc2VlbXMgcmVsYXRpdmVseSBzZWxmLWNvbnRhaW5lZCwgYnV0IHRoZSBmYWN0IHRoYXQgaXQgaXMgbm90IHN0YXRpYyB0ZWxscyBtZSB0aGF0IHRoZXJlIGlzIHByb2JhYmx5IGFuIGV4dGVybmFsIG1vZHVsZSB0aGF0IGlzIGNvbnN1bWluZyB0aGlzIHBhcnNlZCBpbmZvcm1hdGlvbi4gVGhpcyBhbHNvIGltcGxpZXMgaXQgaXMgcHJvYmFibHkgbm90IHNwZWNpZmljIHRvIGEgc2luZ2xlIGRldmljZSBvciBldmVuIGEgc2luZ2xlIGRyaXZlciBpbnN0YW5jZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhhdCBleHRlcm5hbCBjYWxsIGlzIGNvbWluZyBmcm9tLiBDb3VsZCBpdCBiZSBhIGdlbmVyaWMgbW9uaXRvcmluZyBzdWJzeXN0ZW0sIG1heWJlIHNvbWUgc29ydCBvZiBwYWNrZXQgY2FwdHVyZSB0b29sLCBvciBldmVuIGEgaGlnaGVyLWxldmVsIHdpcmVsZXNzIG1hbmFnZW1lbnQgY29tcG9uZW50PyBUaGlzIG5vbi1zdGF0aWMgZGVjbGFyYXRpb24gaXMgYSBjcml0aWNhbCBjbHVlIGFib3V0IGhvdyB0aGlzIGZ1bmN0aW9uIGludGVncmF0ZXMgd2l0aCB0aGUgc3lzdGVtLgoKYGllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXRgIGFsc28gYmVpbmcgbm9uLXN0YXRpYyBwcmVzZW50cyBhbm90aGVyIHNldCBvZiBpbnRyaWd1aW5nIHBvc3NpYmlsaXRpZXMuIGBzdGFydF94bWl0YCBpbXBsaWVzIHRoYXQgaXQgaXMgdGhlIGluaXRpYWwgY2FsbCB0byB0aGUgZHJpdmVyJiMzOTtzIHRyYW5zbWl0IGZ1bmN0aW9ucy4gSXQgaXMgcHJvYmFibHkgdGhlIGNhbGwgdGhhdCBpcyB1c2VkIGZyb20gdGhlIG5ldHdvcmsgc3RhY2sgdG8gcGxhY2UgYSBwYWNrZXQgb24gdGhlIGFpci4gU28gdGhlIGZhY3QgdGhhdCB0aGlzIGlzICpub3QqIGBzdGF0aWNgIGlzIGFsc28gaW1wb3J0YW50LiBUaGlzIHdvdWxkIHRlbGwgbWUgdGhhdCB0aGUgZHJpdmVyJiMzOTtzIGludGVyZmFjZSBpcyBleHBvc2VkLCBhbmQgcG90ZW50aWFsbHkgY2FsbGFibGUgZnJvbSBhIG1vbml0b3JpbmcgbW9kdWxlIG9yIGdlbmVyaWMgdHJhbnNtaXQgQVBJLiBTbywgaWYgSSYjMzk7bSBkZXNpZ25pbmcgYSBzeXN0ZW0gd2hlcmUgSSB3YW50IHRvIGhvb2sgaW4gYW5kIG1heWJlIG1hbmlwdWxhdGUgcGFja2V0cyBiZWZvcmUgdGhleSBnbyBvdXQsIG9yIGlmIEkgYW0gYnVpbGRpbmcgc29tZSBzb3J0IG9mIHZpcnR1YWwgaW50ZXJmYWNlLCB0aGlzIGZ1bmN0aW9uJiMzOTtzIHZpc2liaWxpdHkgYmVjb21lcyBoaWdobHkgdXNlZnVsLgoKSW4gc2hvcnQsIHRoZSBub24tc3RhdGljIG5hdHVyZSBvZiB0aGVzZSBmdW5jdGlvbnMgc3Ryb25nbHkgc3VnZ2VzdHMgbW9kdWxhcml0eSBhbmQgaW50ZXItY29tcG9uZW50IGNvbW11bmljYXRpb24gd2l0aGluIHRoaXMgd2lyZWxlc3Mgc3RhY2suIEl0IG1lYW5zIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbGluZyBjb250ZXh0cyBjYXJlZnVsbHkgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlciBhbmQgd2hvJiMzOTtzIGxldmVyYWdpbmcgdGhlc2UgaW50ZXJmYWNlcy4gVGhpcyBpcyB0aGUgZmlyc3QgcGxhY2UgSSYjMzk7ZCBzdGFydCBsb29raW5nIGF0IGhvdyB0byBleHRlbmQgb3IgY3VzdG9taXplIHRoZSB0cmFuc21pc3Npb24gcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWVlZTgwMjExX21vbml0b3Jfc3RhcnRfeG1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS90eC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS90eC5jPTIwOTk9Ym9vbCBpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbWFjODAyMTEvdHguYy0yMzE3LVxubmV0L21hYzgwMjExL3R4LmM6MjMxODpuZXRkZXZfdHhfdCBpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbWFjODAyMTEvdHguYy0yMzE5LVx0XHRcdFx0XHQgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2NjIKCQkJCQkJCW91dHB1dDogMTc4CgkJCQkJCQl0aG91Z2h0czogMTgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBwaW5wb2ludGVkIGBpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXBgIGFuZCBgaWVlZTgwMjExX21vbml0b3Jfc3RhcnRfeG1pdGAgYXMga2V5IEZvY3VzU3ltYm9scyBoZXJlLiBHb29kIHN0YXJ0LiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBsb2dpYyBvZiB0aGUgcGF0Y2ggaXMgYWJvdXQgdHJpbW1pbmcgdGhlIEZDUyB0cmFpbGVyIGZyb20gaW5qZWN0ZWQgcGFja2V0cy4gVGhhdCBkZWZpbml0ZWx5IHRvdWNoZXMgdGhlIGNvcmUgbWFjODAyMTEgc3RhY2ssIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWFjaGFiaWxpdHkgb2YgdGhpcyBjaGFuZ2UuIFNpbmNlIGl0IGlzIG9wdGlvbmFsLCBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIG9wdGlvbnMuCgpNeSBpbml0aWFsIGFzc3VtcHRpb24gaXMgY29uZmlybWVkOiB0aGlzIGZ1bmN0aW9uIGlzIHJlYWNoZWQgd2hlbiBpbmplY3RpbmcgcGFja2V0cyBpbnRvIGEgbWFjODAyMTEgbW9uaXRvciBpbnRlcmZhY2UuIEFuZCB0aGUgbWFjODAyMTFfaHdzaW0gZHJpdmVyIGlzIGEgcGVyZmVjdCB0b29sIHRvIHRlc3QgdGhpcyBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgTUFDODAyMTFgLCBgTUFDODAyMTFfSFdTSU1gLCBhbmQgYENGRzgwMjExYCB0byBmdWxseSBncmFzcCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgYW5kIGltcGxpY2F0aW9ucy4gSXTigJlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHJlcXVpcmVzIGRldGFpbGVkIHRlc3Rpbmcgd2l0aGluIHRoYXQgY29yZSBuZXR3b3JraW5nIHN0YWNrLgoKQWxyaWdodCwgSSB0aGluayBJJiMzOTt2ZSBnb3QgYSBoYW5kbGUgb24gdGhlIGVzc2VudGlhbCBjb21wb25lbnRzIGFuZCBkZXBlbmRlbmNpZXMuIFRpbWUgdG8gZm9ybWFsbHkgc2V0IHRoZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTFfSFdTSU0mIzM0OywKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXAmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX21vbml0b3Jfc3RhcnRfeG1pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwYCB0byBvcHRpb25hbGx5IHRyaW0gdGhlIEZDUyB0cmFpbGVyIGZyb20gaW5qZWN0ZWQgcGFja2V0cy4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgd2hlbiBpbmplY3RpbmcgcGFja2V0cyBpbnRvIGEgbWFjODAyMTEgbW9uaXRvciBpbnRlcmZhY2UsIHdoaWNoIGNhbiBiZSB0ZXN0ZWQgdXNpbmcgdGhlIG1hYzgwMjExX2h3c2ltIGRyaXZlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1hYzgwMjExIG5ldHdvcmtpbmcgc3RhY2suJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcGAgdG8gb3B0aW9uYWxseSB0cmltIHRoZSBGQ1MgdHJhaWxlciBmcm9tIGluamVjdGVkIHBhY2tldHMuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHdoZW4gaW5qZWN0aW5nIHBhY2tldHMgaW50byBhIG1hYzgwMjExIG1vbml0b3IgaW50ZXJmYWNlLCB3aGljaCBjYW4gYmUgdGVzdGVkIHVzaW5nIHRoZSBtYWM4MDIxMV9od3NpbSBkcml2ZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtYWM4MDIxMSBuZXR3b3JraW5nIHN0YWNrLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDozMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjMwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIHdoZXJlIGBza2JfdHJpbWAgd2FzIGluY29ycmVjdGx5IGNhbGxlZCBkdXJpbmcgYGllZWU4MDIxMV9tb25pdG9yX3NlbGVjdF9xdWV1ZWAgd2hlbiBwYXJzaW5nIHRoZSByYWRpb3RhcCBoZWFkZXIuIFRyaW1taW5nIHRoZSBGQ1MgdHJhaWxlciBhdCB0aGlzIHN0YWdlIHJlZHVjZWQgYHNrYi1cdTAwM2VsZW5gLCBjYXVzaW5nIHRoZSBzdWJzZXF1ZW50IGNhbGwgdG8gYGllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcGAgaW4gYGllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXRgIHRvIGZhaWwgaXRzIGxlbmd0aCBjaGVjayAoYHNrYi1cdTAwM2VsZW4gXHUwMDNjIChpdGVyYXRvci5fbWF4X2xlbmd0aCAmIzQzOyBGQ1NfTEVOKWApIGFuZCBkcm9wIHRoZSBwYWNrZXQuIFRoZSBmaXggaW50cm9kdWNlcyBhIGB0cmltX2Zjc2AgYm9vbGVhbiB0byBkZWZlciB0aGUgdHJpbW1pbmcgdW50aWwgYGllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXRgLlxuXG5UaGlzIGlzIGEgbG9naWMgYnVnIHJlbGF0ZWQgdG8gcGFja2V0IGxlbmd0aCBtYW5pcHVsYXRpb24gYW5kIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIGFjY2Vzc2VzLCBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCBmb3IgY2F0Y2hpbmcgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBpc3N1ZXMgaW4gdGhpcyBhcmVhLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmMDg4ODA5ZTljZWUxMDJkOWIzNTA3NTlkMzFkZGFkMDRkNDBhODNiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTggMDA6Mjg6NTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaAppbmRleCA0Zjk1ZGEwMjM3NDZmLi4wYmVjZDMzNjEwMTBmIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmgKQEAgLTc2MTUsMTEgJiM0Mzs3NjE1LDEyIEBAIGJvb2wgaWVlZTgwMjExX3R4X3ByZXBhcmVfc2tiKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogICoKICAqIEBza2I6IHBhY2tldCBpbmplY3RlZCBieSB1c2Vyc3BhY2UKICAqIEBkZXY6IHRoZSAmYW1wO3N0cnVjdCBkZXZpY2Ugb2YgdGhpcyA4MDIuMTEgZGV2aWNlCiYjNDM7ICogQHRyaW1fZmNzOiB0cmltIHRoZSBGQ1MgdHJhaWxlciB3aGVuIHByZXNlbnQ7IHZhbGlkYXRlIGl0IG90aGVyd2lzZQogICoKICAqIFJldHVybjogJXRydWUgaWYgdGhlIHJhZGlvdGFwIGhlYWRlciB3YXMgcGFyc2VkLCAlZmFsc2Ugb3RoZXJ3aXNlCiAgKi8KIGJvb2wgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwKHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwomIzQzOwkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB0cmltX2Zjcyk7CiAKIC8qKgogICogc3RydWN0IGllZWU4MDIxMV9ub2FfZGF0YSAtIGhvbGRzIHRlbXBvcmFyeSBkYXRhIGZvciB0cmFja2luZyBQMlAgTm9BIHN0YXRlCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWZhY2UuYyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jCmluZGV4IDQzNDYwYTcwNWE2YmQuLmZkYWM3MjljYTU4MGQgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9pZmFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jCkBAIC05NjQsNyAmIzQzOzk2NCw3IEBAIHN0YXRpYyB1MTYgaWVlZTgwMjExX21vbml0b3Jfc2VsZWN0X3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJLyogcmVzZXQgZmxhZ3MgYW5kIGluZm8gYmVmb3JlIHBhcnNpbmcgcmFkaW90YXAgaGVhZGVyICovCiAJbWVtc2V0KGluZm8sIDAsIHNpemVvZigqaW5mbykpOwogCi0JaWYgKCFpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXAoc2tiLCBkZXYpKQomIzQzOwlpZiAoIWllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcChza2IsIGRldiwgZmFsc2UpKQogCQlyZXR1cm4gMDsgLyogZG9lc24mIzM5O3QgbWF0dGVyLCBmcmFtZSB3aWxsIGJlIGRyb3BwZWQgKi8KIAogCWxlbl9ydGhkciA9IGllZWU4MDIxMV9nZXRfcmFkaW90YXBfbGVuKHNrYi0mZ3Q7ZGF0YSk7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdHguYyBiL25ldC9tYWM4MDIxMS90eC5jCmluZGV4IDkxYjE0MTEyZTI0ZjAuLjk3OTkwMDM5Njk1ZGIgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS90eC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS90eC5jCkBAIC0yMDk3LDcgJiM0MzsyMDk3LDcgQEAgc3RhdGljIGJvb2wgaWVlZTgwMjExX3ZhbGlkYXRlX3JhZGlvdGFwX2xlbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogfQogCiBib29sIGllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQomIzQzOwkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB0cmltX2ZjcykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtJmd0O2llZWU4MDIxMV9wdHIpOwogCXN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaXRlcmF0b3IgaXRlcmF0b3I7CkBAIC0yMTU0LDcgJiM0MzsyMTU0LDggQEAgYm9vbCBpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQlpZiAoc2tiLSZndDtsZW4gJmx0OyAoaXRlcmF0b3IuX21heF9sZW5ndGggJiM0MzsgRkNTX0xFTikpCiAJCQkJCXJldHVybiBmYWxzZTsKIAotCQkJCXNrYl90cmltKHNrYiwgc2tiLSZndDtsZW4gLSBGQ1NfTEVOKTsKJiM0MzsJCQkJaWYgKHRyaW1fZmNzKQomIzQzOwkJCQkJc2tiX3RyaW0oc2tiLCBza2ItJmd0O2xlbiAtIEZDU19MRU4pOwogCQkJfQogCQkJaWYgKCppdGVyYXRvci50aGlzX2FyZyAmYW1wOyBJRUVFODAyMTFfUkFESU9UQVBfRl9XRVApCiAJCQkJaW5mby0mZ3Q7ZmxhZ3MgJmFtcDs9IH5JRUVFODAyMTFfVFhfSU5URkxfRE9OVF9FTkNSWVBUOwpAQCAtMjQ3MCw3ICYjNDM7MjQ3MSw3IEBAIG5ldGRldl90eF90IGllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkgKiBzZWxlY3RlZCBjaGFuZGVmIGFib3ZlIHRvIGFjY3VyYXRlbHkgc2V0IGluamVjdGlvbiByYXRlcyBhbmQKIAkgKiByZXRyYW5zbWlzc2lvbnMuCiAJICovCi0JaWYgKCFpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXAoc2tiLCBkZXYpKQomIzQzOwlpZiAoIWllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcChza2IsIGRldiwgdHJ1ZSkpCiAJCWdvdG8gZmFpbF9yY3U7CiAKIAkvKiByZW1vdmUgdGhlIGluamVjdGlvbiByYWRpb3RhcCBoZWFkZXIgKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NDAKCQkJCQkJCW91dHB1dDogMjQ0CgkJCQkJCQl0aG91Z2h0czogMTIzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgRkNTIFRyaW1taW5nIExvZ2ljIGluIG1hYzgwMjExKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwYCBpbiBgbmV0L21hYzgwMjExYC4gVGhlIGNvcmUgY2hhbmdlIGludHJvZHVjZXMgYSBgdHJpbV9mY3NgIGFyZ3VtZW50IHRvIHRoYXQgZnVuY3Rpb24uIFRoZSBpbnRlbnRpb24gaXMgdG8gY29udHJvbCB3aGV0aGVyIHRoZSBGQ1MgdHJhaWxlciBpcyByZW1vdmVkIGZyb20gdGhlIHJhZGlvdGFwIGhlYWRlciBkdXJpbmcgcGFyc2luZy4gSW5pdGlhbGx5LCBJIHRob3VnaHQgdGhpcyBtaWdodCBiZSByZWxhdGVkIHRvIGEgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBpc3N1ZSwgcG90ZW50aWFsbHkgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSwgYnV0IGFmdGVyIHJldmlld2luZyB0aGUgY29kZSwgaXQmIzM5O3MgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBwcm9ibGVtLgoKU3BlY2lmaWNhbGx5LCB0aGUgY29kZSYjMzk7cyBiZWhhdmlvciBpbiBgaWVlZTgwMjExX21vbml0b3Jfc2VsZWN0X3F1ZXVlYCBhbmQgYGllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXRgIGNhdWdodCBteSBhdHRlbnRpb24uIFRoZSBmb3JtZXIgaXMgY2FsbGVkICpiZWZvcmUqIHRoZSBsYXR0ZXIsIGFuZCB0aGV5IGJvdGggcGFyc2UgdGhlIHJhZGlvdGFwIGhlYWRlci4gYGllZWU4MDIxMV9tb25pdG9yX3NlbGVjdF9xdWV1ZWAgbm93ICpkb2VzbiYjMzk7dCogdHJpbSB0aGUgRkNTIChiZWNhdXNlIGB0cmltX2Zjc2AgaXMgYGZhbHNlYCksIGFuZCBgaWVlZTgwMjExX21vbml0b3Jfc3RhcnRfeG1pdGAgKmRvZXMqIHRyaW0gdGhlIEZDUyAoYmVjYXVzZSBgdHJpbV9mY3NgIGlzIGB0cnVlYCkuIFRoaXMgaXMgdGhlIGZpeC4gVGhlIG9yaWdpbmFsIGxvZ2ljLCBJIHN1c3BlY3QsIHdhcyB0aGF0IGBpZWVlODAyMTFfbW9uaXRvcl9zZWxlY3RfcXVldWVgIHdhcyAqaW5jb3JyZWN0bHkqIHRyaW1taW5nIHRoZSBGQ1MsIGFuZCB0aGVuIGBpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0YCB3YXMgYmVpbmcgY2FsbGVkLCBhbHNvIGF0dGVtcHRpbmcgdG8gcGFyc2UgdGhlIGFscmVhZHktdHJpbW1lZCBoZWFkZXIuCgpMb29raW5nIGF0IHRoZSBjb2RlIHNuaXBwZXQsIGlmIGB0cmltX2Zjc2AgaXMgdHJ1ZSwgdGhlbiBgc2tiX3RyaW0oc2tiLCBza2ItJmd0O2xlbiAtIEZDU19MRU4pYCB3aWxsIGJlIGNhbGxlZC4gSWYgYSBwcmV2aW91cyBmdW5jdGlvbiBoYXMgYWxyZWFkeSB0cmltbWVkIHRoZSBGQ1MsIGFuZCB3ZSBjaGVjayB0aGUgbGVuZ3RoIGFmdGVyIGl0IGhhcyBiZWVuIHRyaW1tZWQsIHRoZSBjaGVjayBgaWYgKHNrYi0mZ3Q7bGVuICZsdDsgKGl0ZXJhdG9yLl9tYXhfbGVuZ3RoICYjNDM7IEZDU19MRU4pKWAgaXMgZ29pbmcgdG8gZmFpbCwgbGlrZWx5IHJlc3VsdGluZyBpbiBhIHBhY2tldCBiZWluZyBkcm9wcGVkLiBUaGlzIGlzIHRoZSBwcmVjaXNlIHNjZW5hcmlvIHdlIGFyZSB0cnlpbmcgdG8gYXZvaWQuCgpUaGUgaXNzdWUgaXMgdGhpcyBjaGVjayBpcyB3aGF0IGRldGVybWluZXMgdGhlIHByb2JsZW0uIFRoZSBjb3JlIGJ1ZyBoZXJlIGlzbiYjMzk7dCByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIEtNU0FOLiBJdCBpcyBhIGxvZ2ljIGVycm9yOiBhbiBpbmNvcnJlY3Qgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBpbnZvbHZpbmcgYHNrYl90cmltYCBhbmQgc3Vic2VxdWVudCBsZW5ndGggY2hlY2tzLiBUaGUgbGVuZ3RoIGlzIGJlaW5nIGFsdGVyZWQgaW4gYW4gdW5leHBlY3RlZCB3YXksIGNhdXNpbmcgYSBwYWNrZXQgZHJvcCBiZWNhdXNlIHRoZSByYWRpb3RhcCBoZWFkZXIgcGFyc2luZyBmYWlscy4gSXQgbWVhbnMgZnJhbWVzIHdpdGggRkNTIGFyZSBiZWluZyBkcm9wcGVkIGR1ZSB0byBhIG1pc21hdGNoZWQgZXhwZWN0YXRpb24gb2YgdGhlIHNrYiBsZW5ndGguIFRoZXJlZm9yZSwgdGhpcyBpcyBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuIFRoZSBidWcgaXMgYWJvdXQgcGFja2V0IGRyb3BzIGNhdXNlZCBieSBhbiBpbmNvcnJlY3QgbGVuZ3RoIGNoZWNrIGFmdGVyIEZDUyB0cmltbWluZy4KClRoZXJlZm9yZSwgTmVlZHNLTVNBTiBzaG91bGQgYmUgc2V0IHRvIGZhbHNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBgc2tiX3RyaW1gIHdhcyBpbmNvcnJlY3RseSBjYWxsZWQgZHVyaW5nIGBpZWVlODAyMTFfbW9uaXRvcl9zZWxlY3RfcXVldWVgIHdoZW4gcGFyc2luZyB0aGUgcmFkaW90YXAgaGVhZGVyLiBUcmltbWluZyB0aGUgRkNTIHRyYWlsZXIgYXQgdGhpcyBzdGFnZSByZWR1Y2VkIGBza2ItXHUwMDNlbGVuYCwgY2F1c2luZyB0aGUgc3Vic2VxdWVudCBjYWxsIHRvIGBpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXBgIGluIGBpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0YCB0byBmYWlsIGl0cyBsZW5ndGggY2hlY2sgKGBza2ItXHUwMDNlbGVuIFx1MDAzYyAoaXRlcmF0b3IuX21heF9sZW5ndGggJiM0MzsgRkNTX0xFTilgKSBhbmQgZHJvcCB0aGUgcGFja2V0LiBUaGUgZml4IGludHJvZHVjZXMgYSBgdHJpbV9mY3NgIGJvb2xlYW4gdG8gZGVmZXIgdGhlIHRyaW1taW5nIHVudGlsIGBpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0YC5cblxuVGhpcyBpcyBhIGxvZ2ljIGJ1ZyByZWxhdGVkIHRvIHBhY2tldCBsZW5ndGggbWFuaXB1bGF0aW9uIGFuZCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBhY2Nlc3Nlcywgb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgZm9yIGNhdGNoaW5nIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgaXNzdWVzIGluIHRoaXMgYXJlYS4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIHdoZXJlIGBza2JfdHJpbWAgd2FzIGluY29ycmVjdGx5IGNhbGxlZCBkdXJpbmcgYGllZWU4MDIxMV9tb25pdG9yX3NlbGVjdF9xdWV1ZWAgd2hlbiBwYXJzaW5nIHRoZSByYWRpb3RhcCBoZWFkZXIuIFRyaW1taW5nIHRoZSBGQ1MgdHJhaWxlciBhdCB0aGlzIHN0YWdlIHJlZHVjZWQgYHNrYi1cdTAwM2VsZW5gLCBjYXVzaW5nIHRoZSBzdWJzZXF1ZW50IGNhbGwgdG8gYGllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcGAgaW4gYGllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXRgIHRvIGZhaWwgaXRzIGxlbmd0aCBjaGVjayAoYHNrYi1cdTAwM2VsZW4gXHUwMDNjIChpdGVyYXRvci5fbWF4X2xlbmd0aCAmIzQzOyBGQ1NfTEVOKWApIGFuZCBkcm9wIHRoZSBwYWNrZXQuIFRoZSBmaXggaW50cm9kdWNlcyBhIGB0cmltX2Zjc2AgYm9vbGVhbiB0byBkZWZlciB0aGUgdHJpbW1pbmcgdW50aWwgYGllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXRgLlxuXG5UaGlzIGlzIGEgbG9naWMgYnVnIHJlbGF0ZWQgdG8gcGFja2V0IGxlbmd0aCBtYW5pcHVsYXRpb24gYW5kIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIGFjY2Vzc2VzLCBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCBmb3IgY2F0Y2hpbmcgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBpc3N1ZXMgaW4gdGhpcyBhcmVhLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyOTowMC4wODYwMTgwNjZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTMzNTU1NjM2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIixcbiAgICBcIkNGRzgwMjExXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwXCIsXG4gICAgXCJpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBgc2tiX3RyaW1gIHdhcyBpbmNvcnJlY3RseSBjYWxsZWQgZHVyaW5nIGBpZWVlODAyMTFfbW9uaXRvcl9zZWxlY3RfcXVldWVgIHdoZW4gcGFyc2luZyB0aGUgcmFkaW90YXAgaGVhZGVyLiBUcmltbWluZyB0aGUgRkNTIHRyYWlsZXIgYXQgdGhpcyBzdGFnZSByZWR1Y2VkIGBza2ItXFx1MDAzZWxlbmAsIGNhdXNpbmcgdGhlIHN1YnNlcXVlbnQgY2FsbCB0byBgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwYCBpbiBgaWVlZTgwMjExX21vbml0b3Jfc3RhcnRfeG1pdGAgdG8gZmFpbCBpdHMgbGVuZ3RoIGNoZWNrIChgc2tiLVxcdTAwM2VsZW4gXFx1MDAzYyAoaXRlcmF0b3IuX21heF9sZW5ndGggKyBGQ1NfTEVOKWApIGFuZCBkcm9wIHRoZSBwYWNrZXQuIFRoZSBmaXggaW50cm9kdWNlcyBhIGB0cmltX2Zjc2AgYm9vbGVhbiB0byBkZWZlciB0aGUgdHJpbW1pbmcgdW50aWwgYGllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXRgLlxcblxcblRoaXMgaXMgYSBsb2dpYyBidWcgcmVsYXRlZCB0byBwYWNrZXQgbGVuZ3RoIG1hbmlwdWxhdGlvbiBhbmQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgYWNjZXNzZXMsIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IGZvciBjYXRjaGluZyBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGlzc3VlcyBpbiB0aGlzIGFyZWEuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcGAgdG8gb3B0aW9uYWxseSB0cmltIHRoZSBGQ1MgdHJhaWxlciBmcm9tIGluamVjdGVkIHBhY2tldHMuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHdoZW4gaW5qZWN0aW5nIHBhY2tldHMgaW50byBhIG1hYzgwMjExIG1vbml0b3IgaW50ZXJmYWNlLCB3aGljaCBjYW4gYmUgdGVzdGVkIHVzaW5nIHRoZSBtYWM4MDIxMV9od3NpbSBkcml2ZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtYWM4MDIxMSBuZXR3b3JraW5nIHN0YWNrLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyOTowMC4wODYwMjM4NTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDY3MTg1MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmMDg4ODA5ZTljZWUxMDJkOWIzNTA3NTlkMzFkZGFkMDRkNDBhODNiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDE4IDAwOjI4OjU3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmggYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oXFxuaW5kZXggNGY5NWRhMDIzNzQ2Zi4uMGJlY2QzMzYxMDEwZiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oXFxuKysrIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaFxcbkBAIC03NjE1LDExICs3NjE1LDEyIEBAIGJvb2wgaWVlZTgwMjExX3R4X3ByZXBhcmVfc2tiKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbiAgKlxcbiAgKiBAc2tiOiBwYWNrZXQgaW5qZWN0ZWQgYnkgdXNlcnNwYWNlXFxuICAqIEBkZXY6IHRoZSBcXHUwMDI2c3RydWN0IGRldmljZSBvZiB0aGlzIDgwMi4xMSBkZXZpY2VcXG4rICogQHRyaW1fZmNzOiB0cmltIHRoZSBGQ1MgdHJhaWxlciB3aGVuIHByZXNlbnQ7IHZhbGlkYXRlIGl0IG90aGVyd2lzZVxcbiAgKlxcbiAgKiBSZXR1cm46ICV0cnVlIGlmIHRoZSByYWRpb3RhcCBoZWFkZXIgd2FzIHBhcnNlZCwgJWZhbHNlIG90aGVyd2lzZVxcbiAgKi9cXG4gYm9vbCBpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tXFx0XFx0XFx0XFx0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbitcXHRcXHRcXHRcXHQgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB0cmltX2Zjcyk7XFxuIFxcbiAvKipcXG4gICogc3RydWN0IGllZWU4MDIxMV9ub2FfZGF0YSAtIGhvbGRzIHRlbXBvcmFyeSBkYXRhIGZvciB0cmFja2luZyBQMlAgTm9BIHN0YXRlXFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZmFjZS5jIGIvbmV0L21hYzgwMjExL2lmYWNlLmNcXG5pbmRleCA0MzQ2MGE3MDVhNmJkLi5mZGFjNzI5Y2E1ODBkIDEwMDY0NFxcbi0tLSBhL25ldC9tYWM4MDIxMS9pZmFjZS5jXFxuKysrIGIvbmV0L21hYzgwMjExL2lmYWNlLmNcXG5AQCAtOTY0LDcgKzk2NCw3IEBAIHN0YXRpYyB1MTYgaWVlZTgwMjExX21vbml0b3Jfc2VsZWN0X3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdC8qIHJlc2V0IGZsYWdzIGFuZCBpbmZvIGJlZm9yZSBwYXJzaW5nIHJhZGlvdGFwIGhlYWRlciAqL1xcbiBcXHRtZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7XFxuIFxcbi1cXHRpZiAoIWllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcChza2IsIGRldikpXFxuK1xcdGlmICghaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwKHNrYiwgZGV2LCBmYWxzZSkpXFxuIFxcdFxcdHJldHVybiAwOyAvKiBkb2Vzbid0IG1hdHRlciwgZnJhbWUgd2lsbCBiZSBkcm9wcGVkICovXFxuIFxcbiBcXHRsZW5fcnRoZHIgPSBpZWVlODAyMTFfZ2V0X3JhZGlvdGFwX2xlbihza2ItXFx1MDAzZWRhdGEpO1xcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdHguYyBiL25ldC9tYWM4MDIxMS90eC5jXFxuaW5kZXggOTFiMTQxMTJlMjRmMC4uOTc5OTAwMzk2OTVkYiAxMDA2NDRcXG4tLS0gYS9uZXQvbWFjODAyMTEvdHguY1xcbisrKyBiL25ldC9tYWM4MDIxMS90eC5jXFxuQEAgLTIwOTcsNyArMjA5Nyw3IEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV92YWxpZGF0ZV9yYWRpb3RhcF9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gfVxcbiBcXG4gYm9vbCBpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tXFx0XFx0XFx0XFx0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRyaW1fZmNzKVxcbiB7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi1cXHUwMDNlaWVlZTgwMjExX3B0cik7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaXRlcmF0b3IgaXRlcmF0b3I7XFxuQEAgLTIxNTQsNyArMjE1NCw4IEBAIGJvb2wgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwKHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdFxcdGlmIChza2ItXFx1MDAzZWxlbiBcXHUwMDNjIChpdGVyYXRvci5fbWF4X2xlbmd0aCArIEZDU19MRU4pKVxcbiBcXHRcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHRcXHRcXHRcXHRza2JfdHJpbShza2IsIHNrYi1cXHUwMDNlbGVuIC0gRkNTX0xFTik7XFxuK1xcdFxcdFxcdFxcdGlmICh0cmltX2ZjcylcXG4rXFx0XFx0XFx0XFx0XFx0c2tiX3RyaW0oc2tiLCBza2ItXFx1MDAzZWxlbiAtIEZDU19MRU4pO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGlmICgqaXRlcmF0b3IudGhpc19hcmcgXFx1MDAyNiBJRUVFODAyMTFfUkFESU9UQVBfRl9XRVApXFxuIFxcdFxcdFxcdFxcdGluZm8tXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5JRUVFODAyMTFfVFhfSU5URkxfRE9OVF9FTkNSWVBUO1xcbkBAIC0yNDcwLDcgKzI0NzEsNyBAQCBuZXRkZXZfdHhfdCBpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdCAqIHNlbGVjdGVkIGNoYW5kZWYgYWJvdmUgdG8gYWNjdXJhdGVseSBzZXQgaW5qZWN0aW9uIHJhdGVzIGFuZFxcbiBcXHQgKiByZXRyYW5zbWlzc2lvbnMuXFxuIFxcdCAqL1xcbi1cXHRpZiAoIWllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcChza2IsIGRldikpXFxuK1xcdGlmICghaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwKHNrYiwgZGV2LCB0cnVlKSlcXG4gXFx0XFx0Z290byBmYWlsX3JjdTtcXG4gXFxuIFxcdC8qIHJlbW92ZSB0aGUgaW5qZWN0aW9uIHJhZGlvdGFwIGhlYWRlciAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyOTowMS42OTM0OTEzNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjYyOTE3MTcxMDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMV9IV1NJTVwiLFxuICAgIFwiQ0ZHODAyMTFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXBcIixcbiAgICBcImllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwYCB0byBvcHRpb25hbGx5IHRyaW0gdGhlIEZDUyB0cmFpbGVyIGZyb20gaW5qZWN0ZWQgcGFja2V0cy4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgd2hlbiBpbmplY3RpbmcgcGFja2V0cyBpbnRvIGEgbWFjODAyMTEgbW9uaXRvciBpbnRlcmZhY2UsIHdoaWNoIGNhbiBiZSB0ZXN0ZWQgdXNpbmcgdGhlIG1hYzgwMjExX2h3c2ltIGRyaXZlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1hYzgwMjExIG5ldHdvcmtpbmcgc3RhY2suXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGYwODg4MDllOWNlZTEwMmQ5YjM1MDc1OWQzMWRkYWQwNGQ0MGE4M2JcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAwMDoyODo1NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmggYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oXG5pbmRleCA0Zjk1ZGEwMjM3NDZmLi4wYmVjZDMzNjEwMTBmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbWFjODAyMTEuaFxuKysrIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaFxuQEAgLTc2MTUsMTEgKzc2MTUsMTIgQEAgYm9vbCBpZWVlODAyMTFfdHhfcHJlcGFyZV9za2Ioc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gICpcbiAgKiBAc2tiOiBwYWNrZXQgaW5qZWN0ZWQgYnkgdXNlcnNwYWNlXG4gICogQGRldjogdGhlIFx1MDAyNnN0cnVjdCBkZXZpY2Ugb2YgdGhpcyA4MDIuMTEgZGV2aWNlXG4rICogQHRyaW1fZmNzOiB0cmltIHRoZSBGQ1MgdHJhaWxlciB3aGVuIHByZXNlbnQ7IHZhbGlkYXRlIGl0IG90aGVyd2lzZVxuICAqXG4gICogUmV0dXJuOiAldHJ1ZSBpZiB0aGUgcmFkaW90YXAgaGVhZGVyIHdhcyBwYXJzZWQsICVmYWxzZSBvdGhlcndpc2VcbiAgKi9cbiBib29sIGllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuK1x0XHRcdFx0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgdHJpbV9mY3MpO1xuIFxuIC8qKlxuICAqIHN0cnVjdCBpZWVlODAyMTFfbm9hX2RhdGEgLSBob2xkcyB0ZW1wb3JhcnkgZGF0YSBmb3IgdHJhY2tpbmcgUDJQIE5vQSBzdGF0ZVxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZmFjZS5jIGIvbmV0L21hYzgwMjExL2lmYWNlLmNcbmluZGV4IDQzNDYwYTcwNWE2YmQuLmZkYWM3MjljYTU4MGQgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvaWZhY2UuY1xuKysrIGIvbmV0L21hYzgwMjExL2lmYWNlLmNcbkBAIC05NjQsNyArOTY0LDcgQEAgc3RhdGljIHUxNiBpZWVlODAyMTFfbW9uaXRvcl9zZWxlY3RfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdC8qIHJlc2V0IGZsYWdzIGFuZCBpbmZvIGJlZm9yZSBwYXJzaW5nIHJhZGlvdGFwIGhlYWRlciAqL1xuIFx0bWVtc2V0KGluZm8sIDAsIHNpemVvZigqaW5mbykpO1xuIFxuLVx0aWYgKCFpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXAoc2tiLCBkZXYpKVxuK1x0aWYgKCFpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXAoc2tiLCBkZXYsIGZhbHNlKSlcbiBcdFx0cmV0dXJuIDA7IC8qIGRvZXNuJ3QgbWF0dGVyLCBmcmFtZSB3aWxsIGJlIGRyb3BwZWQgKi9cbiBcbiBcdGxlbl9ydGhkciA9IGllZWU4MDIxMV9nZXRfcmFkaW90YXBfbGVuKHNrYi1cdTAwM2VkYXRhKTtcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdHguYyBiL25ldC9tYWM4MDIxMS90eC5jXG5pbmRleCA5MWIxNDExMmUyNGYwLi45Nzk5MDAzOTY5NWRiIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL3R4LmNcbisrKyBiL25ldC9tYWM4MDIxMS90eC5jXG5AQCAtMjA5Nyw3ICsyMDk3LDcgQEAgc3RhdGljIGJvb2wgaWVlZTgwMjExX3ZhbGlkYXRlX3JhZGlvdGFwX2xlbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIH1cbiBcbiBib29sIGllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4rXHRcdFx0XHQgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB0cmltX2ZjcylcbiB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtXHUwMDNlaWVlZTgwMjExX3B0cik7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2l0ZXJhdG9yIGl0ZXJhdG9yO1xuQEAgLTIxNTQsNyArMjE1NCw4IEBAIGJvb2wgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2MgKGl0ZXJhdG9yLl9tYXhfbGVuZ3RoICsgRkNTX0xFTikpXG4gXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdFx0XHRcdHNrYl90cmltKHNrYiwgc2tiLVx1MDAzZWxlbiAtIEZDU19MRU4pO1xuK1x0XHRcdFx0aWYgKHRyaW1fZmNzKVxuK1x0XHRcdFx0XHRza2JfdHJpbShza2IsIHNrYi1cdTAwM2VsZW4gLSBGQ1NfTEVOKTtcbiBcdFx0XHR9XG4gXHRcdFx0aWYgKCppdGVyYXRvci50aGlzX2FyZyBcdTAwMjYgSUVFRTgwMjExX1JBRElPVEFQX0ZfV0VQKVxuIFx0XHRcdFx0aW5mby1cdTAwM2VmbGFncyBcdTAwMjY9IH5JRUVFODAyMTFfVFhfSU5URkxfRE9OVF9FTkNSWVBUO1xuQEAgLTI0NzAsNyArMjQ3MSw3IEBAIG5ldGRldl90eF90IGllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdCAqIHNlbGVjdGVkIGNoYW5kZWYgYWJvdmUgdG8gYWNjdXJhdGVseSBzZXQgaW5qZWN0aW9uIHJhdGVzIGFuZFxuIFx0ICogcmV0cmFuc21pc3Npb25zLlxuIFx0ICovXG4tXHRpZiAoIWllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcChza2IsIGRldikpXG4rXHRpZiAoIWllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcChza2IsIGRldiwgdHJ1ZSkpXG4gXHRcdGdvdG8gZmFpbF9yY3U7XG4gXG4gXHQvKiByZW1vdmUgdGhlIGluamVjdGlvbiByYWRpb3RhcCBoZWFkZXIgKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI5OjAxLjY5MzQ5MzE2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTYxMzA2ODE1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBtYWM4MDIxMSBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcGAgaW4gYG5ldC9tYWM4MDIxMS90eC5jYCBhbmQgYG5ldC9tYWM4MDIxMS9pZmFjZS5jYC4gSXQncyBhZGRpbmcgYSBgdHJpbV9mY3NgIGJvb2xlYW4gdG8gdGhhdCBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgd2UgY2FuIG5vdyBvcHRpb25hbGx5IHN0cmlwIHRoZSBGcmFtZSBDaGVjayBTZXF1ZW5jZSAoRkNTKSB0cmFpbGVyLiBUaGF0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gbWFjODAyMTEsIHdoaWNoIGlzLCBvZiBjb3Vyc2UsIHRoZSBoZWFydCBvZiB0aGUgODAyLjExIGltcGxlbWVudGF0aW9uIGluIHRoZSBrZXJuZWwuIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgd2UgY2FuIGZ1enogdXNpbmcgYG1hYzgwMjExX2h3c2ltYCwgd2hpY2ggbWFrZXMgdGhpcyBpbnRlcmVzdGluZy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGZ1bmN0aW9uJ3MgY2FsbGVycyB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuIExldCdzIHNlZS4uLiB0aGUgY29kZSBzaG93cyB0aGF0IGBpZWVlODAyMTFfbW9uaXRvcl9zZWxlY3RfcXVldWVgIGluIGBuZXQvbWFjODAyMTEvaWZhY2UuY2AgYW5kIGBpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0YCBpbiBgbmV0L21hYzgwMjExL3R4LmNgIGNhbGwgaXQuIE5vdywgdGhvc2UgYXJlIGJvdGggaW50ZXJlc3RpbmcgY2FsbCBzaXRlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXnigJlyZSB1c2luZyB0aGUgcmFkaW90YXAgZGF0YSwgYW5kIGhvdyB0aGlzIGB0cmltX2Zjc2AgbWlnaHQgYWZmZWN0IHRoZW0uIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgY29udGV4dCBvZiB0aG9zZSBmdW5jdGlvbnMgdG8gc2VlIGhvdyB0aGV5J2xsIGhhbmRsZSB0aGUgRkNTIHRyaW1taW5nIGFuZCBpZiB0aGlzIGludHJvZHVjZXMgYW55IHN1YnRsZSBidWdzLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgQ09ORklHX01BQzgwMjExYCBpcyB1c3VhbGx5IHRoZSBvbmUsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQncyBjb3JyZWN0IGZvciB0aGlzIHBhcnRpY3VsYXIgYnVpbGQgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk0MywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI5OjA3LjMwNjU2NDMyN1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjU4NDQxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUFDODAyMTFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyOmNvbmZpZyBNQUM4MDIxMVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgSUVFRSA4MDIuMTEgTmV0d29ya2luZyBTdGFjayAobWFjODAyMTEpXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9MTk9aWYgTUFDODAyMTEgIT0gblxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIxOmNvbmZpZyBNQUM4MDIxMV9IQVNfUkNcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMi1cXHRib29sXFxubmV0L21hYzgwMjExL0tjb25maWctMjMtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjQ6Y29uZmlnIE1BQzgwMjExX1JDX01JTlNUUkVMXFxubmV0L21hYzgwMjExL0tjb25maWctMjUtXFx0Ym9vbCBcXFwiTWluc3RyZWxcXFwiIGlmIEVYUEVSVFxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9MzE9Y2hvaWNlXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy00MC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo0MTpjb25maWcgTUFDODAyMTFfUkNfREVGQVVMVF9NSU5TVFJFTFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQyLVxcdGJvb2wgXFxcIk1pbnN0cmVsXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9NDg9ZW5kY2hvaWNlXFxubmV0L21hYzgwMjExL0tjb25maWctNDktXFxubmV0L21hYzgwMjExL0tjb25maWc6NTA6Y29uZmlnIE1BQzgwMjExX1JDX0RFRkFVTFRcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy01MS1cXHRzdHJpbmdcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTU3PWNvbW1lbnQgXFxcIlNvbWUgd2lyZWxlc3MgZHJpdmVycyByZXF1aXJlIGEgcmF0ZSBjb250cm9sIGFsZ29yaXRobVxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTU5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjYwOmNvbmZpZyBNQUM4MDIxMV9LVU5JVF9URVNUXFxubmV0L21hYzgwMjExL0tjb25maWctNjEtXFx0dHJpc3RhdGUgXFxcIktVbml0IHRlc3RzIGZvciBtYWM4MDIxMVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctNjktXFxubmV0L21hYzgwMjExL0tjb25maWc6NzA6Y29uZmlnIE1BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy03MS1cXHRib29sIFxcXCJFbmFibGUgbWFjODAyMTEgbWVzaCBuZXR3b3JraW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy03OC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo3OTpjb25maWcgTUFDODAyMTFfTEVEU1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTgwLVxcdGJvb2wgXFxcIkVuYWJsZSBMRUQgdHJpZ2dlcnNcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04Ny1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo4ODpjb25maWcgTUFDODAyMTFfREVCVUdGU1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTg5LVxcdGJvb2wgXFxcIkV4cG9ydCBtYWM4MDIxMSBpbnRlcm5hbHMgaW4gRGVidWdGU1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTk2LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjk3OmNvbmZpZyBNQUM4MDIxMV9NRVNTQUdFX1RSQUNJTkdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05OC1cXHRib29sIFxcXCJUcmFjZSBhbGwgbWFjODAyMTEgZGVidWcgbWVzc2FnZXNcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMDktXFxubmV0L21hYzgwMjExL0tjb25maWc6MTEwOm1lbnVjb25maWcgTUFDODAyMTFfREVCVUdfTUVOVVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExMS1cXHRib29sIFxcXCJTZWxlY3QgbWFjODAyMTEgZGVidWdnaW5nIGZlYXR1cmVzXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTE1LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjExNjpjb25maWcgTUFDODAyMTFfTk9JTkxJTkVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTctXFx0Ym9vbCBcXFwiRG8gbm90IGlubGluZSBUWC9SWCBoYW5kbGVyc1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEzMS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxMzI6Y29uZmlnIE1BQzgwMjExX1ZFUkJPU0VfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMzMtXFx0Ym9vbCBcXFwiVmVyYm9zZSBkZWJ1Z2dpbmcgb3V0cHV0XFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTQyLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE0Mzpjb25maWcgTUFDODAyMTFfTUxNRV9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE0NC1cXHRib29sIFxcXCJWZXJib3NlIG1hbmFnZWQgTUxNRSBvdXRwdXRcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNTMtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTU0OmNvbmZpZyBNQUM4MDIxMV9TVEFfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNTUtXFx0Ym9vbCBcXFwiVmVyYm9zZSBzdGF0aW9uIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE2Mi1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNjM6Y29uZmlnIE1BQzgwMjExX0hUX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTY0LVxcdGJvb2wgXFxcIlZlcmJvc2UgSFQgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTc0LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE3NTpjb25maWcgTUFDODAyMTFfT0NCX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTc2LVxcdGJvb2wgXFxcIlZlcmJvc2UgT0NCIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE4NS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxODY6Y29uZmlnIE1BQzgwMjExX0lCU1NfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xODctXFx0Ym9vbCBcXFwiVmVyYm9zZSBJQlNTIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE5Ni1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxOTc6Y29uZmlnIE1BQzgwMjExX1BTX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTk4LVxcdGJvb2wgXFxcIlZlcmJvc2UgcG93ZXJzYXZlIG1vZGUgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjA4LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIwOTpjb25maWcgTUFDODAyMTFfTVBMX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjEwLVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBwZWVyIGxpbmsgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjIxLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIyMjpjb25maWcgTUFDODAyMTFfTVBBVEhfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMjMtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIHBhdGggZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjM0LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIzNTpjb25maWcgTUFDODAyMTFfTUhXTVBfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzYtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIEhXTVAgcm91dGluZyBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNDctXFxubmV0L21hYzgwMjExL0tjb25maWc6MjQ4OmNvbmZpZyBNQUM4MDIxMV9NRVNIX1NZTkNfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNDktXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIHN5bmNocm9uaXphdGlvbiBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNTgtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjU5OmNvbmZpZyBNQUM4MDIxMV9NRVNIX0NTQV9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI2MC1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggY2hhbm5lbCBzd2l0Y2ggZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjY5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI3MDpjb25maWcgTUFDODAyMTFfTUVTSF9QU19ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI3MS1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggcG93ZXJzYXZlIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI4MC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyODE6Y29uZmlnIE1BQzgwMjExX1RETFNfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yODItXFx0Ym9vbCBcXFwiVmVyYm9zZSBURExTIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5Mi1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyOTM6Y29uZmlnIE1BQzgwMjExX0RFQlVHX0NPVU5URVJTXFxubmV0L21hYzgwMjExL0tjb25maWctMjk0LVxcdGJvb2wgXFxcIkV4dHJhIHN0YXRpc3RpY3MgZm9yIFRYL1JYIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMwNy1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzozMDg6Y29uZmlnIE1BQzgwMjExX1NUQV9IQVNIX01BWF9TSVpFXFxubmV0L21hYzgwMjExL0tjb25maWctMzA5LVxcdGludCBcXFwiU3RhdGlvbiBoYXNoIHRhYmxlIG1heGltdW0gc2l6ZVxcXCIgaWYgTUFDODAyMTFfREVCVUdfTUVOVVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyOTowNy4zOTMxNTMwOTlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDgyODAwOTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIE1BQzgwMjExIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gd2UncmUgZGVhbGluZyB3aXRoIGEgYE1BQzgwMjExYCBjb25maWd1cmF0aW9uLiBTdGFuZGFyZCBzdHVmZi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgd2hlcmUgYXJlIHdlIGhlYWRpbmcgd2l0aCB0aGlzP1wiIFRoZSBuYXR1cmFsIG5leHQgcXVlc3Rpb24gaXMgYWx3YXlzLCAqZG8gd2UgbmVlZCogYE1BQzgwMjExX0hXU0lNYD8gVGhlIGltcGxpY2F0aW9uIGlzIHRoYXQgd2Ugd2FudCB0byBlbnN1cmUgaGFyZHdhcmUgc2ltdWxhdGlvbiBpcyBhcHByb3ByaWF0ZWx5IGhhbmRsZWQsIG9yIGRpc2FibGVkIHdoZXJlIG5vdCBuZWVkZWQuIFdlIGFyZSBsb29raW5nIHRvIHJlZHVjZSBjb21wbGV4aXR5IG9mIHRoZSBidWlsZCBhbmQgZW5zdXJlIHRoYXQgYW55IGhhcmR3YXJlIHNwZWNpZmljIGRlcGVuZGVuY2llcyBhcmUgaW5jbHVkZWQgd2hlbiBhcHByb3ByaWF0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTg0NCwiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI5OjExLjg3NTk1ODE3NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTAzNzA2MDUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNQUM4MDIxMV9IV1NJTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYWM4MDIxMV9od3NpbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyOToxMS45ODYzNDEzMzFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzQ4NDU2MzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgV2lyZWxlc3MgRHJpdmVyIExhbmRzY2FwZSoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIHRoaW5raW5nIEkgbmVlZCB0byBmaW5kIHRoZSBzcGVjaWZpYyBrZXJuZWwgY29kZSByZWxhdGVkIHRvIHRoZSBNQUM4MDIxMSBoYXJkd2FyZSBzaW11bGF0b3IsIGBNQUM4MDIxMV9IV1NJTWAuIEkga25vdyBJJ3ZlIHdvcmtlZCB3aXRoIGl0IGJlZm9yZSwgYnV0IHRoZSBleGFjdCBsb2NhdGlvbiBpbiB0aGUgTGludXgga2VybmVsIHNvdXJjZSB0cmVlIGFsd2F5cyBzbGlwcyBteSBtaW5kLiBObyBwcm9ibGVtLCB0aW1lIHRvIGRvIGEgcXVpY2sgc2VhcmNoLiBUaGUgd2lyZWxlc3MgbmV0d29ya2luZyBkcml2ZXJzIGFyZSB1c3VhbGx5IG9yZ2FuaXplZCB1bmRlciBgZHJpdmVycy9uZXQvd2lyZWxlc3NgLCBzbyB0aGF0J3Mgd2hlcmUgSSdsbCBzdGFydCBsb29raW5nLiBJJ2xsIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBvZiB0aGF0IHBhcnRpY3VsYXIgbW9kdWxlLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgdHJhY2sgZG93biB0aGlzIHBpZWNlIG9mIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwNzMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyOToxNS4zMzQ4MDA5ODdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0OTM0MDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNQUM4MDIxMV9IV1NJTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnOjE6Y29uZmlnIE1BQzgwMjExX0hXU0lNXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnLTItXFx0dHJpc3RhdGUgXFxcIlNpbXVsYXRlZCByYWRpbyB0ZXN0aW5nIHRvb2wgZm9yIG1hYzgwMjExXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyOToxNS40ODk3MzkxNzhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTg3MTg0MzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqRGl2aW5nIGludG8gdGhlIE1BQzgwMjExIEhXU0lNIENvbmZpZ3VyYXRpb24gYW5kIFJhZGlvdGFwIFBhcnNpbmcqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGBNQUM4MDIxMV9IV1NJTWAgY29uZmlndXJhdGlvbi4gVGhhdCB0ZWxscyBtZSB0aGlzIGlzIGFsbCBhYm91dCB0aGUgaGFyZHdhcmUgc2ltdWxhdG9yLCB3aGljaCBpcyBrZXkgdG8gbXkgd29yay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaXMgYmVoYXZpbmcgdW5kZXIgc2ltdWxhdGVkIGNvbmRpdGlvbnMuIE5vdywgdGhlIGNydWNpYWwgcGFydCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGlzIGhvdyB0aGUgdHJhbnNtaXQgcmFkaW90YXAgaGVhZGVycyBhcmUgYmVpbmcgaGFuZGxlZCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBtb2RpZmljYXRpb25zIGhhdmUgYmVlbiBtYWRlIHRvIHRoZSBzeXN0ZW0gZm9yIHRoZSBzaW11bGF0b3IuIEkga25vdyB0aGF0IHRoZSBmdW5jdGlvbiBgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwYCBpcyB0aGUga2V5LiBNeSBmb2N1cyBpcyBvbiB0aGF0IHBhcnNpbmcgZnVuY3Rpb24uIFNvLCBJIG5lZWQgdG8gb3BlbiBgbmV0L21hYzgwMjExL3R4LmNgIGFuZCBoYXZlIGEgZ29vZCBsb29rIGF0IHRoYXQgZnVuY3Rpb24uIEkgbmVlZCB0byB0cmFjZSB0aHJvdWdoIGl0LCBwYXlpbmcgcGFydGljdWxhciBhdHRlbnRpb24gdG8gaG93IHRoZSByYWRpb3RhcCBpbmZvcm1hdGlvbiBpcyBpbnRlcnByZXRlZCB3aXRoaW4gdGhlIEhXU0lNIGNvbnRleHQuIEknbSBsb29raW5nIGZvciB3aGVyZSB0aGluZ3MgZGV2aWF0ZSBvciBpbnRlcmFjdCB3aXRoIHRoZSBzaW11bGF0ZWQgZW52aXJvbm1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzNzQsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyOToxOS4wNzY5NTUyNzZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk0ODUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tYWM4MDIxMS90eC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwOTYsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMDk2OlxcdFxcdHJldHVybiB0cnVlO1xcbjIwOTc6XFx0fVxcbjIwOTg6XFx0XFxuMjA5OTpcXHRib29sIGllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbjIxMDA6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgdHJpbV9mY3MpXFxuMjEwMTpcXHR7XFxuMjEwMjpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtXFx1MDAzZWllZWU4MDIxMV9wdHIpO1xcbjIxMDM6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9pdGVyYXRvciBpdGVyYXRvcjtcXG4yMTA0OlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyICpydGhkciA9XFxuMjEwNTpcXHRcXHRcXHQoc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIgKikgc2tiLVxcdTAwM2VkYXRhO1xcbjIxMDY6XFx0XFx0c3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpO1xcbjIxMDc6XFx0XFx0aW50IHJldCA9IGllZWU4MDIxMV9yYWRpb3RhcF9pdGVyYXRvcl9pbml0KFxcdTAwMjZpdGVyYXRvciwgcnRoZHIsIHNrYi1cXHUwMDNlbGVuLFxcbjIxMDg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgTlVMTCk7XFxuMjEwOTpcXHRcXHR1MTYgdHhmbGFncztcXG4yMTEwOlxcdFxcdHUxNiByYXRlID0gMDtcXG4yMTExOlxcdFxcdGJvb2wgcmF0ZV9mb3VuZCA9IGZhbHNlO1xcbjIxMTI6XFx0XFx0dTggcmF0ZV9yZXRyaWVzID0gMDtcXG4yMTEzOlxcdFxcdHUxNiByYXRlX2ZsYWdzID0gMDtcXG4yMTE0OlxcdFxcdHU4IG1jc19rbm93biwgbWNzX2ZsYWdzLCBtY3NfYnc7XFxuMjExNTpcXHRcXHR1MTYgdmh0X2tub3duO1xcbjIxMTY6XFx0XFx0dTggdmh0X21jcyA9IDAsIHZodF9uc3MgPSAwO1xcbjIxMTc6XFx0XFx0aW50IGk7XFxuMjExODpcXHRcXG4yMTE5OlxcdFxcdGlmICghaWVlZTgwMjExX3ZhbGlkYXRlX3JhZGlvdGFwX2xlbihza2IpKVxcbjIxMjA6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjIxMjE6XFx0XFxuMjEyMjpcXHRcXHRpbmZvLVxcdTAwM2VmbGFncyB8PSBJRUVFODAyMTFfVFhfSU5URkxfRE9OVF9FTkNSWVBUIHxcXG4yMTIzOlxcdFxcdFxcdCAgICAgICBJRUVFODAyMTFfVFhfQ1RMX0RPTlRGUkFHO1xcbjIxMjQ6XFx0XFxuMjEyNTpcXHRcXHQvKlxcbjIxMjY6XFx0XFx0ICogZm9yIGV2ZXJ5IHJhZGlvdGFwIGVudHJ5IHRoYXQgaXMgcHJlc2VudFxcbjIxMjc6XFx0XFx0ICogKGllZWU4MDIxMV9yYWRpb3RhcF9pdGVyYXRvcl9uZXh0IHJldHVybnMgLUVOT0VOVCB3aGVuIG5vIG1vcmVcXG4yMTI4OlxcdFxcdCAqIGVudHJpZXMgcHJlc2VudCwgb3IgLUVJTlZBTCBvbiBlcnJvcilcXG4yMTI5OlxcdFxcdCAqL1xcbjIxMzA6XFx0XFxuMjEzMTpcXHRcXHR3aGlsZSAoIXJldCkge1xcbjIxMzI6XFx0XFx0XFx0cmV0ID0gaWVlZTgwMjExX3JhZGlvdGFwX2l0ZXJhdG9yX25leHQoXFx1MDAyNml0ZXJhdG9yKTtcXG4yMTMzOlxcdFxcbjIxMzQ6XFx0XFx0XFx0aWYgKHJldClcXG4yMTM1OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjIxMzY6XFx0XFxuMjEzNzpcXHRcXHRcXHQvKiBzZWUgaWYgdGhpcyBhcmd1bWVudCBpcyBzb21ldGhpbmcgd2UgY2FuIHVzZSAqL1xcbjIxMzg6XFx0XFx0XFx0c3dpdGNoIChpdGVyYXRvci50aGlzX2FyZ19pbmRleCkge1xcbjIxMzk6XFx0XFx0XFx0LypcXG4yMTQwOlxcdFxcdFxcdCAqIFlvdSBtdXN0IHRha2UgY2FyZSB3aGVuIGRlcmVmZXJlbmNpbmcgaXRlcmF0b3IudGhpc19hcmdcXG4yMTQxOlxcdFxcdFxcdCAqIGZvciBtdWx0aWJ5dGUgdHlwZXMuLi4gdGhlIHBvaW50ZXIgaXMgbm90IGFsaWduZWQuICBVc2VcXG4yMTQyOlxcdFxcdFxcdCAqIGdldF91bmFsaWduZWQoKHR5cGUgKilpdGVyYXRvci50aGlzX2FyZykgdG8gZGVyZWZlcmVuY2VcXG4yMTQzOlxcdFxcdFxcdCAqIGl0ZXJhdG9yLnRoaXNfYXJnIGZvciB0eXBlIFxcXCJ0eXBlXFxcIiBzYWZlbHkgb24gYWxsIGFyY2hlcy5cXG4yMTQ0OlxcdFxcdFxcdCovXFxuMjE0NTpcXHRcXHRcXHRjYXNlIElFRUU4MDIxMV9SQURJT1RBUF9GTEFHUzpcXG4yMTQ2OlxcdFxcdFxcdFxcdGlmICgqaXRlcmF0b3IudGhpc19hcmcgXFx1MDAyNiBJRUVFODAyMTFfUkFESU9UQVBfRl9GQ1MpIHtcXG4yMTQ3OlxcdFxcdFxcdFxcdFxcdC8qXFxuMjE0ODpcXHRcXHRcXHRcXHRcXHQgKiB0aGlzIGluZGljYXRlcyB0aGF0IHRoZSBza2Igd2UgaGF2ZSBiZWVuXFxuMjE0OTpcXHRcXHRcXHRcXHRcXHQgKiBoYW5kZWQgaGFzIHRoZSAzMi1iaXQgRkNTIENSQyBhdCB0aGUgZW5kLi4uXFxuMjE1MDpcXHRcXHRcXHRcXHRcXHQgKiB3ZSBzaG91bGQgcmVhY3QgdG8gdGhhdCBieSBzbmlwcGluZyBpdCBvZmZcXG4yMTUxOlxcdFxcdFxcdFxcdFxcdCAqIGJlY2F1c2UgaXQgd2lsbCBiZSByZWNvbXB1dGVkIGFuZCBhZGRlZFxcbjIxNTI6XFx0XFx0XFx0XFx0XFx0ICogb24gdHJhbnNtaXNzaW9uXFxuMjE1MzpcXHRcXHRcXHRcXHRcXHQgKi9cXG4yMTU0OlxcdFxcdFxcdFxcdFxcdGlmIChza2ItXFx1MDAzZWxlbiBcXHUwMDNjIChpdGVyYXRvci5fbWF4X2xlbmd0aCArIEZDU19MRU4pKVxcbjIxNTU6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjIxNTY6XFx0XFxuMjE1NzpcXHRcXHRcXHRcXHRcXHRpZiAodHJpbV9mY3MpXFxuMjE1ODpcXHRcXHRcXHRcXHRcXHRcXHRza2JfdHJpbShza2IsIHNrYi1cXHUwMDNlbGVuIC0gRkNTX0xFTik7XFxuMjE1OTpcXHRcXHRcXHRcXHR9XFxuMjE2MDpcXHRcXHRcXHRcXHRpZiAoKml0ZXJhdG9yLnRoaXNfYXJnIFxcdTAwMjYgSUVFRTgwMjExX1JBRElPVEFQX0ZfV0VQKVxcbjIxNjE6XFx0XFx0XFx0XFx0XFx0aW5mby1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfklFRUU4MDIxMV9UWF9JTlRGTF9ET05UX0VOQ1JZUFQ7XFxuMjE2MjpcXHRcXHRcXHRcXHRpZiAoKml0ZXJhdG9yLnRoaXNfYXJnIFxcdTAwMjYgSUVFRTgwMjExX1JBRElPVEFQX0ZfRlJBRylcXG4yMTYzOlxcdFxcdFxcdFxcdFxcdGluZm8tXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5JRUVFODAyMTFfVFhfQ1RMX0RPTlRGUkFHO1xcbjIxNjQ6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjE2NTpcXHRcXG4yMTY2OlxcdFxcdFxcdGNhc2UgSUVFRTgwMjExX1JBRElPVEFQX1RYX0ZMQUdTOlxcbjIxNjc6XFx0XFx0XFx0XFx0dHhmbGFncyA9IGdldF91bmFsaWduZWRfbGUxNihpdGVyYXRvci50aGlzX2FyZyk7XFxuMjE2ODpcXHRcXHRcXHRcXHRpZiAodHhmbGFncyBcXHUwMDI2IElFRUU4MDIxMV9SQURJT1RBUF9GX1RYX05PQUNLKVxcbjIxNjk6XFx0XFx0XFx0XFx0XFx0aW5mby1cXHUwMDNlZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUTF9OT19BQ0s7XFxuMjE3MDpcXHRcXHRcXHRcXHRpZiAodHhmbGFncyBcXHUwMDI2IElFRUU4MDIxMV9SQURJT1RBUF9GX1RYX05PU0VRTk8pXFxuMjE3MTpcXHRcXHRcXHRcXHRcXHRpbmZvLVxcdTAwM2Vjb250cm9sLmZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVFJMX05PX1NFUU5PO1xcbjIxNzI6XFx0XFx0XFx0XFx0aWYgKHR4ZmxhZ3MgXFx1MDAyNiBJRUVFODAyMTFfUkFESU9UQVBfRl9UWF9PUkRFUilcXG4yMTczOlxcdFxcdFxcdFxcdFxcdGluZm8tXFx1MDAzZWNvbnRyb2wuZmxhZ3MgfD1cXG4yMTc0OlxcdFxcdFxcdFxcdFxcdFxcdElFRUU4MDIxMV9UWF9DVFJMX0RPTlRfUkVPUkRFUjtcXG4yMTc1OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjIxNzY6XFx0XFxuMjE3NzpcXHRcXHRcXHRjYXNlIElFRUU4MDIxMV9SQURJT1RBUF9SQVRFOlxcbjIxNzg6XFx0XFx0XFx0XFx0cmF0ZSA9ICppdGVyYXRvci50aGlzX2FyZztcXG4yMTc5OlxcdFxcdFxcdFxcdHJhdGVfZmxhZ3MgPSAwO1xcbjIxODA6XFx0XFx0XFx0XFx0cmF0ZV9mb3VuZCA9IHRydWU7XFxuMjE4MTpcXHRcXHRcXHRcXHRicmVhaztcXG4yMTgyOlxcdFxcbjIxODM6XFx0XFx0XFx0Y2FzZSBJRUVFODAyMTFfUkFESU9UQVBfQU5URU5OQTpcXG4yMTg0OlxcdFxcdFxcdFxcdC8qIHRoaXMgY2FuIGFwcGVhciBtdWx0aXBsZSB0aW1lcywga2VlcCBhIGJpdG1hcCAqL1xcbjIxODU6XFx0XFx0XFx0XFx0LyogY29udHJvbC5hbnRlbm5hcyBpcyBvbmx5IGEgMi1iaXQgYml0bWFwICovXFxuMjE4NjpcXHRcXHRcXHRcXHRpZiAoKml0ZXJhdG9yLnRoaXNfYXJnIFxcdTAwM2MgMilcXG4yMTg3OlxcdFxcdFxcdFxcdFxcdGluZm8tXFx1MDAzZWNvbnRyb2wuYW50ZW5uYXMgfD0gQklUKCppdGVyYXRvci50aGlzX2FyZyk7XFxuMjE4ODpcXHRcXHRcXHRcXHRicmVhaztcXG4yMTg5OlxcdFxcbjIxOTA6XFx0XFx0XFx0Y2FzZSBJRUVFODAyMTFfUkFESU9UQVBfREFUQV9SRVRSSUVTOlxcbjIxOTE6XFx0XFx0XFx0XFx0cmF0ZV9yZXRyaWVzID0gKml0ZXJhdG9yLnRoaXNfYXJnO1xcbjIxOTI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjE5MzpcXHRcXG4yMTk0OlxcdFxcdFxcdGNhc2UgSUVFRTgwMjExX1JBRElPVEFQX01DUzpcXG4yMTk1OlxcdFxcdFxcdFxcdG1jc19rbm93biA9IGl0ZXJhdG9yLnRoaXNfYXJnWzBdO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyOToxOS4wNzczNTMxNzZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzk3ODgxMjE3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFBsYW4gZm9yIFJhZGlvdGFwIEhlYWRlciBQYXJzaW5nKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwYCBmdW5jdGlvbiwgYW5kIGl0J3MgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIHRlc3RhYmxlLiBUaGUgd2hvbGUgcG9pbnQgaXMgaXQgcGFyc2VzIHJhZGlvdGFwIGhlYWRlcnMgZnJvbSBpbmplY3RlZCBwYWNrZXRzIOKAkyB3aGljaCBpcyBleGFjdGx5IHdoYXQgd2UgbmVlZCB0byBmdXp6IGdpdmVuIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgYHRyaW1fZmNzYCBhcmd1bWVudCwgY2hhbmdpbmcgdGhlIGJlaGF2aW9yIG9mIHRoZSBGQ1MgaGFuZGxpbmcuIElmIGB0cmltX2Zjc2AgaXMgdHJ1ZSwgaXQgdHJpbXMgdGhlIEZDUyB0cmFpbGVyIGFuZCBpZiBpdCBpcyBmYWxzZSwgaXQgZG9lc24ndCB0cmltIGl0LCBidXQgdmFsaWRhdGVzIHRoZSBsZW5ndGguXG5cblRoZSBnb29kIG5ld3MgaXMgdGhhdCB3ZSBjYW4gZGVmaW5pdGVseSBpbmplY3QgdGhlc2UgcGFja2V0cy4gV2UgY2FuIHVzZSB0aGUgZnV6emVyIHRvIGluamVjdCBwYWNrZXRzIHdpdGggcmFkaW90YXAgaGVhZGVycyB0aHJvdWdoIGBtYWM4MDIxMV9od3NpbWAgb3IsIGlmIGl04oCZcyBhIG1vbml0b3IgaW50ZXJmYWNlLCB0aHJvdWdoIHR1bi90YXAuIFdhaXQsIHllYWgsIG1vbml0b3IgaW50ZXJmYWNlcyEgTWFjODAyMTEgbW9uaXRvciBpbnRlcmZhY2VzICpjYW4qIGJlIGNyZWF0ZWQsIGFuZCB3ZSAqY2FuKiBpbmplY3QgcGFja2V0cyBpbnRvIHRoZW0uIFRoYXQncyBleGNlbGxlbnQhIFRoZSBgTUFDODAyMTFfSFdTSU1gIGNvbmZpZyBsb29rcyBzb2xpZCwgYW5kIG9idmlvdXNseSwgYE1BQzgwMjExYCBpcyBlc3NlbnRpYWwuXG5cbk5vdywgbGV0J3MgbWFrZSBzdXJlIHdlJ3ZlIGlkZW50aWZpZWQgdGhlIHJpZ2h0IGV4ZWN1dGlvbiBwYXRocy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGBpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXBgIGlzIGNhbGxlZC4gTGV0IG1lIHNlZS4uLiBJIHNob3VsZCBjaGVjayBgaWVlZTgwMjExX21vbml0b3Jfc2VsZWN0X3F1ZXVlYCBhbmQgYGllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXRgLiBSaWdodCEgYGllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXRgIGlzIHRoZSBgbmRvX3N0YXJ0X3htaXRgIGZvciBtb25pdG9yIGludGVyZmFjZXMhIFNvLCBpbmplY3RpbmcgcGFja2V0cyBpbnRvIGEgbW9uaXRvciBpbnRlcmZhY2Ugd2lsbCB0cmlnZ2VyIHRoaXMgZnVuY3Rpb24uIFRoZSBmdXp6ZXIgY2FuIGRvIHRoaXMgYnkgY3JlYXRpbmcgYSBtb25pdG9yIGludGVyZmFjZSBhbmQgc2VuZGluZyBwYWNrZXRzIHRvIGl0LiBQZXJmZWN0LCB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gV2UgYXJlIGdvaW5nIHRvIGhhbW1lciB0aGlzIHdpdGggZnV6emVycyFcblxuT2theSwgbGV0J3MgaWRlbnRpZnkgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucy4gRGVmaW5pdGVseSBgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwYCBpcyB0aGUgbWFpbiB0YXJnZXQuIEFsc28sIGBpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0YCBpcyBhbm90aGVyIGtleSBvbmUsIGFuZCBgaWVlZTgwMjExX21vbml0b3Jfc2VsZWN0X3F1ZXVlYCBpcyBhbHNvIHJlYWNoYWJsZS5cblxuRmluYWxseSwganVzdCBhIHF1aWNrIGNoZWNrIGZvciBkZXBlbmRlbmNpZXMuIFdlIGtub3cgYE1BQzgwMjExYCBhbmQgYE1BQzgwMjExX0hXU0lNYCBhcmUgdGhlIHByaW1hcnkgY29uZmlncyBuZWVkZWQsIGJ1dCBJJ2xsIGRvdWJsZS1jaGVjayB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBvdGhlciBoaWRkZW4gZGVwZW5kZW5jaWVzLiBJJ2xsIGNoZWNrIGBNQUM4MDIxMV9IV1NJTWAncyBkZXBlbmRlbmNpZXMganVzdCB0byBiZSBjb21wbGV0ZWx5IHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1MDksIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyOToyNy4wNTYxNjg2NDhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNTM5NDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNQUM4MDIxMV9IV1NJTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnOjE6Y29uZmlnIE1BQzgwMjExX0hXU0lNXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnLTItXFx0dHJpc3RhdGUgXFxcIlNpbXVsYXRlZCByYWRpbyB0ZXN0aW5nIHRvb2wgZm9yIG1hYzgwMjExXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyOToyNy4xMTg3MTIxOTdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM4NTgzNzAyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgYE1BQzgwMjExX0hXU0lNYCBEZWZpbml0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYE1BQzgwMjExX0hXU0lNYC4gSSBrbm93IGl0J3MgcmVsYXRlZCB0byB0aGUgbWFjODAyMTEgZnJhbWV3b3JrLCBvYnZpb3VzbHkuIEJ1dCBJIG5lZWQgdG8gZ28gZGVlcGVyIHRoYW4ganVzdCB0aGUgbmFtZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHB1bGwgdXAgdGhlIGZ1bGwgZGVmaW5pdGlvbiDigJMgSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IHRoaXMgdGhpbmcgKmlzKiBhdCBhIGNvZGUgbGV2ZWwuIFdoYXQgZG9lcyB0aGlzIG1hY3JvIHN0YW5kIGZvcj8gV2hhdCBpbXBsaWNhdGlvbnMgZG9lcyB0aGF0IGhhdmUgb24gdGhlIGZyYW1ld29yaydzIGJlaGF2aW9yPyBJcyBpdCBhIGNvbXBpbGUtdGltZSBmbGFnLCBhIHN0cnVjdCBkZWZpbml0aW9uLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIHNwZWNpZmljcyBvZiB0aGUgZGVmaW5pdGlvbiB3aWxsIHJldmVhbCBjcnVjaWFsIGluc2lnaHRzLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIGhhcmR3YXJlIHNpbXVsYXRpb24uIERvZXMgaXQgdGllIGludG8gdGhlIGludGVybmFsIHN0cnVjdHVyZXMsIGFuZCBpZiBzbywgaG93PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSB2YXJpb3VzIGxheWVycyBvZiB0aGUgbWFjODAyMTEgc3RhY2suIFVsdGltYXRlbHksIG15IGdvYWwgaGVyZSBpcyB0byBncmFzcCB0aGUgcHJhY3RpY2FsIGNvbnNlcXVlbmNlcyBvZiBpdHMgcHJlc2VuY2Ugb3IgYWJzZW5jZSB3aXRoaW4gdGhlIHN5c3RlbS4gTGV0J3Mgc2VlIGl0IGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgZnJhbWV3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjE3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjk6MzEuNTA0NTUxNTExWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdGNvbmZpZyBNQUM4MDIxMV9IV1NJTVxcbiAgIDI6XFx0XFx0dHJpc3RhdGUgXFxcIlNpbXVsYXRlZCByYWRpbyB0ZXN0aW5nIHRvb2wgZm9yIG1hYzgwMjExXFxcIlxcbiAgIDM6XFx0XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxcbiAgIDQ6XFx0XFx0aGVscFxcbiAgIDU6XFx0XFx0ICBUaGlzIGRyaXZlciBpcyBhIGRldmVsb3BlciB0ZXN0aW5nIHRvb2wgdGhhdCBjYW4gYmUgdXNlZCB0byB0ZXN0XFxuICAgNjpcXHRcXHQgIElFRUUgODAyLjExIG5ldHdvcmtpbmcgc3RhY2sgKG1hYzgwMjExKSBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIG5vdFxcbiAgIDc6XFx0XFx0ICBuZWVkZWQgZm9yIG5vcm1hbCB3aXJlbGVzcyBMQU4gdXNhZ2UgYW5kIGlzIG9ubHkgZm9yIHRlc3RpbmcuIFNlZVxcbiAgIDg6XFx0XFx0ICBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbWFjODAyMTFfaHdzaW0gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93XFxuICAgOTpcXHRcXHQgIHRvIHVzZSB0aGlzIHRvb2wuXFxuICAxMDpcXHRcXG4gIDExOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlXFxuICAxMjpcXHRcXHQgIGNhbGxlZCBtYWM4MDIxMV9od3NpbS4gIElmIHVuc3VyZSwgc2F5IE4uXFxuICAxMzpcXHRcXG4gIDE0OlxcdGNvbmZpZyBWSVJUX1dJRklcXG4gIDE1OlxcdFxcdHRyaXN0YXRlIFxcXCJXaWZpIHdyYXBwZXIgZm9yIGV0aGVybmV0IGRyaXZlcnNcXFwiXFxuICAxNjpcXHRcXHRkZXBlbmRzIG9uIENGRzgwMjExXFxuICAxNzpcXHRcXHRoZWxwXFxuICAxODpcXHRcXHQgIFRoaXMgb3B0aW9uIGFkZHMgc3VwcG9ydCBmb3IgZXRoZXJuZXQgY29ubmVjdGlvbnMgdG8gYXBwZWFyIGFzIGlmIHRoZXlcXG4gIDE5OlxcdFxcdCAgYXJlIHdpZmkgY29ubmVjdGlvbnMgdGhyb3VnaCBhIHNwZWNpYWwgcnRuZXRsaW5rIGRldmljZS5cXG4gIDIwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyOTozMS41MDQ2MjI4ODFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjMyNDQzNTI4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZGVwZW5kZW5jaWVzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRlZXAgRGl2ZSBpbnRvIFdpcmVsZXNzIERyaXZlciBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHN0cmFpZ2h0Zm9yd2FyZCB3aGVuIEkgc2VlIHRoZXNlIGRlcGVuZGVuY2llcy4gYE1BQzgwMjExX0hXU0lNYCDigJMgcmlnaHQsIHRoYXQncyB0aGUgaGFyZHdhcmUgc2ltdWxhdGlvbiBtb2R1bGUgZm9yIE1BQzgwMjExLCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IGl0IGhhcyBhIGRpcmVjdCBkZXBlbmRlbmNlIG9uIHRoZSBtYWluIGBNQUM4MDIxMWAgZnJhbWV3b3JrLiBObyBzdXJwcmlzZXMgdGhlcmUuIEl0IHdvdWxkIGJlIGJpemFycmUgaWYgaXQgKmRpZG4ndCogZGVwZW5kIG9uIGl0LiBUaGF0J3MgYSBmdW5kYW1lbnRhbCBhcmNoaXRlY3R1cmFsIGdpdmVuLlxuXG5Ob3csIGBNQUM4MDIxMWAgaXRzZWxmLi4uIGFoIHllcywgdGhhdCdzIGJ1aWx0IG9uIGBDRkc4MDIxMWAuIFRoYXQncyB0aGUgY29yZS4gYENGRzgwMjExYCBwcm92aWRlcyB0aGUgY29uZmlndXJhdGlvbiBhbmQgcmVndWxhdG9yeSBkb21haW4gaW50ZXJmYWNlIGZvciA4MDIuMTEgZGV2aWNlcyBpbiB0aGUgTGludXgga2VybmVsLiBJdCdzIHRoZSBhYnN0cmFjdGlvbiBsYXllci4gRXZlcnl0aGluZyBlbHNlLCBgTUFDODAyMTFgLCB0aGUgaGFyZHdhcmUgc2ltdWxhdGlvbnMsIGFsbCB1c2UgYENGRzgwMjExYC5cblxuU28sIHRoZSBsb2dpY2FsIG5leHQgc3RlcCBmb3IgbWUsIGFuZCBJJ20gc3VyZSBJJ20gbm90IGFsb25lLCBpcyB0byBxdWlja2x5IGRyaWxsIGRvd24gYW5kIG1ha2Ugc3VyZSBgQ0ZHODAyMTFgIGlzIHNvdW5kLiBXaGF0J3MgdGhlIHN0YXR1cyBvZiB0aGF0IGludGVyZmFjZT8gSXMgaXQgd29ya2luZyBhcyBleHBlY3RlZD8gTm8gcG9pbnQgc3BlbmRpbmcgdGltZSBvbiB0aGUgZG93bnN0cmVhbSBiaXRzIGlmIHRoZSBmb3VuZGF0aW9uIGlzbid0IHNvbGlkLiBJJ2Qgd2FudCB0byBjaGVjayBpdHMgdmVyc2lvbiwgYW55IHJlY2VudCBwYXRjaGVzLCBrbm93biBidWdzLCBhbnkgcmVncmVzc2lvbnMgaXQgbWlnaHQgaGF2ZSBpbnRyb2R1Y2VkLiBCYXNpY2FsbHksIGEgcXVpY2sgZGlhZ25vc3RpYyBvbiB0aGUgbG93ZXN0IGxldmVsIGlzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDIzMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjk6MzcuODI5MDc1MzIzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTE4NjA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ0ZHODAyMTFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3dpcmVsZXNzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL0tjb25maWc9MTQ9Y29uZmlnIFdFWFRfUFJJVlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTYtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTc6Y29uZmlnIENGRzgwMjExXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTgtXFx0dHJpc3RhdGUgXFxcImNmZzgwMjExIC0gd2lyZWxlc3MgY29uZmlndXJhdGlvbiBBUElcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZz0zOD1jb25maWcgTkw4MDIxMV9URVNUTU9ERVxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctNTEtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6NTI6Y29uZmlnIENGRzgwMjExX0RFVkVMT1BFUl9XQVJOSU5HU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTUzLVxcdGJvb2wgXFxcImVuYWJsZSBkZXZlbG9wZXIgd2FybmluZ3NcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy02Ny1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo2ODpjb25maWcgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXFxubmV0L3dpcmVsZXNzL0tjb25maWctNjktXFx0Ym9vbCBcXFwiY2ZnODAyMTEgY2VydGlmaWNhdGlvbiBvbnVzXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctODgtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6ODk6Y29uZmlnIENGRzgwMjExX1JFUVVJUkVfU0lHTkVEX1JFR0RCXFxubmV0L3dpcmVsZXNzL0tjb25maWctOTAtXFx0Ym9vbCBcXFwicmVxdWlyZSByZWdkYiBzaWduYXR1cmVcXFwiIGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctOTgtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6OTk6Y29uZmlnIENGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEwMC1cXHRib29sIFxcXCJhbGxvdyByZWdkYiBrZXlzIHNoaXBwZWQgd2l0aCB0aGUga2VybmVsXFxcIiBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTExMC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMTE6Y29uZmlnIENGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUlxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTExMi1cXHRzdHJpbmcgXFxcImFkZGl0aW9uYWwgcmVnZGIga2V5IGRpcmVjdG9yeVxcXCIgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMjEtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTIyOmNvbmZpZyBDRkc4MDIxMV9SRUdfQ0VMTFVMQVJfSElOVFNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMjMtXFx0Ym9vbCBcXFwiY2ZnODAyMTEgcmVndWxhdG9yeSBzdXBwb3J0IGZvciBjZWxsdWxhciBiYXNlIHN0YXRpb24gaGludHNcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMzQtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTM1OmNvbmZpZyBDRkc4MDIxMV9SRUdfUkVMQVhfTk9fSVJcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMzYtXFx0Ym9vbCBcXFwiY2ZnODAyMTEgc3VwcG9ydCBmb3IgTk9fSVIgcmVsYXhhdGlvblxcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE1OC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNTk6Y29uZmlnIENGRzgwMjExX0RFRkFVTFRfUFNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNjAtXFx0Ym9vbCBcXFwiZW5hYmxlIHBvd2Vyc2F2ZSBieSBkZWZhdWx0XFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTY4LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE2OTpjb25maWcgQ0ZHODAyMTFfREVCVUdGU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3MC1cXHRib29sIFxcXCJjZmc4MDIxMSBEZWJ1Z0ZTIGVudHJpZXNcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzYtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTc3OmNvbmZpZyBDRkc4MDIxMV9DUkRBX1NVUFBPUlRcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzgtXFx0Ym9vbCBcXFwic3VwcG9ydCBDUkRBXFxcIiBpZiBFWFBFUlRcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4Ni1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxODc6Y29uZmlnIENGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODgtXFx0Ym9vbCBcXFwiY2ZnODAyMTEgd2lyZWxlc3MgZXh0ZW5zaW9ucyBjb21wYXRpYmlsaXR5XFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTkzLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE5NDpjb25maWcgQ0ZHODAyMTFfS1VOSVRfVEVTVFxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE5NS1cXHR0cmlzdGF0ZSBcXFwiS1VuaXQgdGVzdHMgZm9yIGNmZzgwMjExXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI5OjM3LjkwNDI2NDkwM1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODU1MzUyOTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gV2lGaSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgQ0ZHODAyMTFgIHN0dWZmLCB3aGljaCBpcyBvYnZpb3VzbHkgdGhlIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlIGZvciBjZmc4MDIxMSwgbWFrZXMgc2Vuc2UuIE5vdywgbGV0J3Mgc2VlLCB0byBnZXQgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBJIG5lZWQsIEknbGwgZGVmaW5pdGVseSB3YW50IHRvIGVuYWJsZSBgTUFDODAyMTFgLCBgTUFDODAyMTFfSFdTSU1gLCBhbmQgb2YgY291cnNlIGBDRkc4MDIxMWAuIFJpZ2h0LCAqdGhhdCogZHJpdmVyLCBgTUFDODAyMTFfSFdTSU1gLCBpcyB1c2VmdWwsIEkgc2hvdWxkIHJlbWVtYmVyIHRvIGluY2x1ZGUgdGhhdC5cblxuSSd2ZSBnb3QgYSBtZW50YWwgY2hlY2tsaXN0IG9mIGtleSBmdW5jdGlvbnMgSSdtIGZvY3VzaW5nIG9uIOKAkyBgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwYCwgYGllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXRgLCBhbmQgYGllZWU4MDIxMV9tb25pdG9yX3NlbGVjdF9xdWV1ZWAuIEkgbmVlZCB0byBlbnN1cmUgdGhlc2UgYXJlIGNvbmZpZ3VyZWQgY29ycmVjdGx5LlxuXG5MZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeSBpZiBgaWVlZTgwMjExX21vbml0b3Jfc2VsZWN0X3F1ZXVlYCBpcyBzdGF0aWMuIEdvdHRhIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTgxLCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI5OjQ0Ljc1OTYyMDg0N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMzMTYyMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWVlZTgwMjExX21vbml0b3Jfc2VsZWN0X3F1ZXVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMS9pZmFjZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS9pZmFjZS5jPTk0MT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGllZWU4MDIxMV9kYXRhaWZfb3BzID0ge1xcbi0tXFxubmV0L21hYzgwMjExL2lmYWNlLmMtOTUwLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjk1MTpzdGF0aWMgdTE2IGllZWU4MDIxMV9tb25pdG9yX3NlbGVjdF9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTk1Mi1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYz05Nzk9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpZWVlODAyMTFfbW9uaXRvcmlmX29wcyA9IHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTk4NS1cXHQubmRvX3NldF9tYWNfYWRkcmVzcyBcXHQ9IGllZWU4MDIxMV9jaGFuZ2VfbWFjLFxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjk4NjpcXHQubmRvX3NlbGVjdF9xdWV1ZVxcdD0gaWVlZTgwMjExX21vbml0b3Jfc2VsZWN0X3F1ZXVlLFxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTk4Ny19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyOTo0NC44MTI5NDUwNDRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUyNTAwODcxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkFzc2Vzc2luZyB0aGUgQ29kZWJhc2U6IFN0YXRpYyB2cy4gTm9uLVN0YXRpYyBGdW5jdGlvbnMqKlxuXG5SaWdodCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwYCBmdW5jdGlvbi4gVGhlIGNvZGUgc2VlbXMgcHJldHR5IHN0YWJsZTsgaXQncyBzdGF0aWMgaW4gbmF0dXJlLCB3aGljaCBtYWtlcyBpdCBnb29kIGluIGEgbG90IG9mIHdheXMuIEhvd2V2ZXIsIHdoaWxlIHN0YXRpYyBmdW5jdGlvbnMgb2ZmZXIgYmVuZWZpdHMsIG15IGdlbmVyYWwgcHJlZmVyZW5jZSBpcyB0byBhdm9pZCB0aGVtIHdoZW5ldmVyIGEgbm9uLXN0YXRpYyBvcHRpb24gc2VydmVzIHRoZSBzYW1lIHB1cnBvc2UgYXMgdGhlIGNvZGUgYmVjb21lcyBsZXNzIGZsZXhpYmxlIGFuZCByZS11c2FibGUuIE5vdywgSSBzZWUgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGlzbid0IG1hcmtlZCBhcyBzdGF0aWMsIHdoaWNoIGlzIGEgZ29vZCB0aGluZyBhbmQgbWFrZXMgdGhpcyBjb2RlIG1vcmUgcmUtdXNhYmxlLiBHb29kLiBJdCdzIGltcG9ydGFudCB0byBrZWVwIHRoYXQgaW4gbWluZCB3aGVuIGRvaW5nIGEgY29kZSByZXZpZXcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzIyLCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjk6NDkuMzM3OTU3Mjg3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODc3NzkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExL3R4LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL3R4LmM9MjA3OT1zdGF0aWMgYm9vbCBpZWVlODAyMTFfdmFsaWRhdGVfcmFkaW90YXBfbGVuKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy0yMDk4LVxcbm5ldC9tYWM4MDIxMS90eC5jOjIwOTk6Ym9vbCBpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbWFjODAyMTEvdHguYy0yMTAwLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRyaW1fZmNzKVxcbi0tXFxubmV0L21hYzgwMjExL3R4LmM9MjMxOD1uZXRkZXZfdHhfdCBpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy0yNDczLVxcdCAqL1xcbm5ldC9tYWM4MDIxMS90eC5jOjI0NzQ6XFx0aWYgKCFpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXAoc2tiLCBkZXYsIHRydWUpKVxcbm5ldC9tYWM4MDIxMS90eC5jLTI0NzUtXFx0XFx0Z290byBmYWlsX3JjdTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjk6NDkuNDA2NzM5NjU2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyODk4OTg1NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGNvZGUgZWxlbWVudHMsIHRoaW5raW5nIHRocm91Z2ggdGhlbSBhcyBJIHdvdWxkIGlmIEkgd2VyZSBhbmFseXppbmcgdGhlbS5cblxuKipBbmFseXppbmcgSUVFRSA4MDIuMTEgVFggUGF0aCoqXG5cbkFscmlnaHQsIHNvIEknbSB0YWtpbmcgYSBsb29rIGF0IHRoaXMgd2lyZWxlc3MgZHJpdmVyLCBmb2N1c2luZyBvbiB0aGUgdHJhbnNtaXQgcGF0aC4gSSBzZWUgdHdvIGtleSBmdW5jdGlvbnMgZmxhZ2dlZCBoZXJlLiBUaGUgZmlyc3QsIGBpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXBgLCBhbmQgdGhlIHNlY29uZCwgYGllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXRgLiBUaGUgZmFjdCB0aGF0IG5laXRoZXIgb2YgdGhlc2UgaXMgZGVjbGFyZWQgYHN0YXRpY2AgaW1tZWRpYXRlbHkgZ3JhYnMgbXkgYXR0ZW50aW9uLiBUaGF0IGltcGxpZXMgdGhleSBoYXZlIGV4dGVybmFsIGxpbmthZ2UuIE5vdywgY29uc2lkZXJpbmcgdGhlIGNvbnRleHQgb2YgYSB3aXJlbGVzcyBkcml2ZXIsIHRoYXQgY291bGQgbWVhbiBhIGZldyB0aGluZ3MsIGFuZCBJIG5lZWQgdG8gZXhwbG9yZSB0aGUgaW1wbGljYXRpb25zLlxuXG5JZiB0aGV5IHdlcmVuJ3Qgc3RhdGljLCBpdCBwb2ludHMgdG8gdGhlc2UgZnVuY3Rpb25zIGJlaW5nIHBvdGVudGlhbGx5IGNhbGxhYmxlIGZyb20gbW9kdWxlcyBvciBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIG91dHNpZGUgdGhlIGltbWVkaWF0ZSBkcml2ZXIgY29kZSBpdHNlbGYuIGBpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXBgIGlzIHJlc3BvbnNpYmxlIGZvciBwYXJzaW5nIGEgcmFkaW90YXAgaGVhZGVyIG9uIHRyYW5zbWl0LCB3aGljaCBzZWVtcyByZWxhdGl2ZWx5IHNlbGYtY29udGFpbmVkLCBidXQgdGhlIGZhY3QgdGhhdCBpdCBpcyBub3Qgc3RhdGljIHRlbGxzIG1lIHRoYXQgdGhlcmUgaXMgcHJvYmFibHkgYW4gZXh0ZXJuYWwgbW9kdWxlIHRoYXQgaXMgY29uc3VtaW5nIHRoaXMgcGFyc2VkIGluZm9ybWF0aW9uLiBUaGlzIGFsc28gaW1wbGllcyBpdCBpcyBwcm9iYWJseSBub3Qgc3BlY2lmaWMgdG8gYSBzaW5nbGUgZGV2aWNlIG9yIGV2ZW4gYSBzaW5nbGUgZHJpdmVyIGluc3RhbmNlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGF0IGV4dGVybmFsIGNhbGwgaXMgY29taW5nIGZyb20uIENvdWxkIGl0IGJlIGEgZ2VuZXJpYyBtb25pdG9yaW5nIHN1YnN5c3RlbSwgbWF5YmUgc29tZSBzb3J0IG9mIHBhY2tldCBjYXB0dXJlIHRvb2wsIG9yIGV2ZW4gYSBoaWdoZXItbGV2ZWwgd2lyZWxlc3MgbWFuYWdlbWVudCBjb21wb25lbnQ/IFRoaXMgbm9uLXN0YXRpYyBkZWNsYXJhdGlvbiBpcyBhIGNyaXRpY2FsIGNsdWUgYWJvdXQgaG93IHRoaXMgZnVuY3Rpb24gaW50ZWdyYXRlcyB3aXRoIHRoZSBzeXN0ZW0uXG5cbmBpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0YCBhbHNvIGJlaW5nIG5vbi1zdGF0aWMgcHJlc2VudHMgYW5vdGhlciBzZXQgb2YgaW50cmlndWluZyBwb3NzaWJpbGl0aWVzLiBgc3RhcnRfeG1pdGAgaW1wbGllcyB0aGF0IGl0IGlzIHRoZSBpbml0aWFsIGNhbGwgdG8gdGhlIGRyaXZlcidzIHRyYW5zbWl0IGZ1bmN0aW9ucy4gSXQgaXMgcHJvYmFibHkgdGhlIGNhbGwgdGhhdCBpcyB1c2VkIGZyb20gdGhlIG5ldHdvcmsgc3RhY2sgdG8gcGxhY2UgYSBwYWNrZXQgb24gdGhlIGFpci4gU28gdGhlIGZhY3QgdGhhdCB0aGlzIGlzICpub3QqIGBzdGF0aWNgIGlzIGFsc28gaW1wb3J0YW50LiBUaGlzIHdvdWxkIHRlbGwgbWUgdGhhdCB0aGUgZHJpdmVyJ3MgaW50ZXJmYWNlIGlzIGV4cG9zZWQsIGFuZCBwb3RlbnRpYWxseSBjYWxsYWJsZSBmcm9tIGEgbW9uaXRvcmluZyBtb2R1bGUgb3IgZ2VuZXJpYyB0cmFuc21pdCBBUEkuIFNvLCBpZiBJJ20gZGVzaWduaW5nIGEgc3lzdGVtIHdoZXJlIEkgd2FudCB0byBob29rIGluIGFuZCBtYXliZSBtYW5pcHVsYXRlIHBhY2tldHMgYmVmb3JlIHRoZXkgZ28gb3V0LCBvciBpZiBJIGFtIGJ1aWxkaW5nIHNvbWUgc29ydCBvZiB2aXJ0dWFsIGludGVyZmFjZSwgdGhpcyBmdW5jdGlvbidzIHZpc2liaWxpdHkgYmVjb21lcyBoaWdobHkgdXNlZnVsLlxuXG5JbiBzaG9ydCwgdGhlIG5vbi1zdGF0aWMgbmF0dXJlIG9mIHRoZXNlIGZ1bmN0aW9ucyBzdHJvbmdseSBzdWdnZXN0cyBtb2R1bGFyaXR5IGFuZCBpbnRlci1jb21wb25lbnQgY29tbXVuaWNhdGlvbiB3aXRoaW4gdGhpcyB3aXJlbGVzcyBzdGFjay4gSXQgbWVhbnMgSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsaW5nIGNvbnRleHRzIGNhcmVmdWxseSB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyIGFuZCB3aG8ncyBsZXZlcmFnaW5nIHRoZXNlIGludGVyZmFjZXMuIFRoaXMgaXMgdGhlIGZpcnN0IHBsYWNlIEknZCBzdGFydCBsb29raW5nIGF0IGhvdyB0byBleHRlbmQgb3IgY3VzdG9taXplIHRoZSB0cmFuc21pc3Npb24gcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4NzMsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyOTo1Ni42OTY2Mzk5ODdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDYzODI1NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWVlZTgwMjExX21vbml0b3Jfc3RhcnRfeG1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTEvdHguY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvdHguYz0yMDk5PWJvb2wgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy0yMzE3LVxcbm5ldC9tYWM4MDIxMS90eC5jOjIzMTg6bmV0ZGV2X3R4X3QgaWVlZTgwMjExX21vbml0b3Jfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9tYWM4MDIxMS90eC5jLTIzMTktXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI5OjU4LjIwMzAyNzc2OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Mjg5MDU2NjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgcGlucG9pbnRlZCBgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwYCBhbmQgYGllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXRgIGFzIGtleSBGb2N1c1N5bWJvbHMgaGVyZS4gR29vZCBzdGFydC4gTGV0J3Mgc2VlLi4uIHRoZSBsb2dpYyBvZiB0aGUgcGF0Y2ggaXMgYWJvdXQgdHJpbW1pbmcgdGhlIEZDUyB0cmFpbGVyIGZyb20gaW5qZWN0ZWQgcGFja2V0cy4gVGhhdCBkZWZpbml0ZWx5IHRvdWNoZXMgdGhlIGNvcmUgbWFjODAyMTEgc3RhY2ssIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWFjaGFiaWxpdHkgb2YgdGhpcyBjaGFuZ2UuIFNpbmNlIGl0IGlzIG9wdGlvbmFsLCBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIG9wdGlvbnMuXG5cbk15IGluaXRpYWwgYXNzdW1wdGlvbiBpcyBjb25maXJtZWQ6IHRoaXMgZnVuY3Rpb24gaXMgcmVhY2hlZCB3aGVuIGluamVjdGluZyBwYWNrZXRzIGludG8gYSBtYWM4MDIxMSBtb25pdG9yIGludGVyZmFjZS4gQW5kIHRoZSBtYWM4MDIxMV9od3NpbSBkcml2ZXIgaXMgYSBwZXJmZWN0IHRvb2wgdG8gdGVzdCB0aGlzIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBNQUM4MDIxMWAsIGBNQUM4MDIxMV9IV1NJTWAsIGFuZCBgQ0ZHODAyMTFgIHRvIGZ1bGx5IGdyYXNwIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBhbmQgaW1wbGljYXRpb25zLiBJdOKAmXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgcmVxdWlyZXMgZGV0YWlsZWQgdGVzdGluZyB3aXRoaW4gdGhhdCBjb3JlIG5ldHdvcmtpbmcgc3RhY2suXG5cbkFscmlnaHQsIEkgdGhpbmsgSSd2ZSBnb3QgYSBoYW5kbGUgb24gdGhlIGVzc2VudGlhbCBjb21wb25lbnRzIGFuZCBkZXBlbmRlbmNpZXMuIFRpbWUgdG8gZm9ybWFsbHkgc2V0IHRoZSByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzY2MiwiT3V0cHV0VG9rZW5zIjoxNzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6MzA6MDQuNDkyMDg2OTE1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4NTcyNjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIixcbiAgICBcIkNGRzgwMjExXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwXCIsXG4gICAgXCJpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcGAgdG8gb3B0aW9uYWxseSB0cmltIHRoZSBGQ1MgdHJhaWxlciBmcm9tIGluamVjdGVkIHBhY2tldHMuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHdoZW4gaW5qZWN0aW5nIHBhY2tldHMgaW50byBhIG1hYzgwMjExIG1vbml0b3IgaW50ZXJmYWNlLCB3aGljaCBjYW4gYmUgdGVzdGVkIHVzaW5nIHRoZSBtYWM4MDIxMV9od3NpbSBkcml2ZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtYWM4MDIxMSBuZXR3b3JraW5nIHN0YWNrLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMV9IV1NJTVwiLFxuICAgIFwiQ0ZHODAyMTFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXBcIixcbiAgICBcImllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwYCB0byBvcHRpb25hbGx5IHRyaW0gdGhlIEZDUyB0cmFpbGVyIGZyb20gaW5qZWN0ZWQgcGFja2V0cy4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgd2hlbiBpbmplY3RpbmcgcGFja2V0cyBpbnRvIGEgbWFjODAyMTEgbW9uaXRvciBpbnRlcmZhY2UsIHdoaWNoIGNhbiBiZSB0ZXN0ZWQgdXNpbmcgdGhlIG1hYzgwMjExX2h3c2ltIGRyaXZlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1hYzgwMjExIG5ldHdvcmtpbmcgc3RhY2suXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjMwOjA0LjYxMDY2NjgzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDgxMDg5NTAyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjMwOjA0LjYxMTEyNjI1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE0ODEwNDMwNzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBgc2tiX3RyaW1gIHdhcyBpbmNvcnJlY3RseSBjYWxsZWQgZHVyaW5nIGBpZWVlODAyMTFfbW9uaXRvcl9zZWxlY3RfcXVldWVgIHdoZW4gcGFyc2luZyB0aGUgcmFkaW90YXAgaGVhZGVyLiBUcmltbWluZyB0aGUgRkNTIHRyYWlsZXIgYXQgdGhpcyBzdGFnZSByZWR1Y2VkIGBza2ItXFx1MDAzZWxlbmAsIGNhdXNpbmcgdGhlIHN1YnNlcXVlbnQgY2FsbCB0byBgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwYCBpbiBgaWVlZTgwMjExX21vbml0b3Jfc3RhcnRfeG1pdGAgdG8gZmFpbCBpdHMgbGVuZ3RoIGNoZWNrIChgc2tiLVxcdTAwM2VsZW4gXFx1MDAzYyAoaXRlcmF0b3IuX21heF9sZW5ndGggKyBGQ1NfTEVOKWApIGFuZCBkcm9wIHRoZSBwYWNrZXQuIFRoZSBmaXggaW50cm9kdWNlcyBhIGB0cmltX2Zjc2AgYm9vbGVhbiB0byBkZWZlciB0aGUgdHJpbW1pbmcgdW50aWwgYGllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXRgLlxcblxcblRoaXMgaXMgYSBsb2dpYyBidWcgcmVsYXRlZCB0byBwYWNrZXQgbGVuZ3RoIG1hbmlwdWxhdGlvbiBhbmQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgYWNjZXNzZXMsIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IGZvciBjYXRjaGluZyBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGlzc3VlcyBpbiB0aGlzIGFyZWEuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjA4ODgwOWU5Y2VlMTAyZDliMzUwNzU5ZDMxZGRhZDA0ZDQwYTgzYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDAwOjI4OjU3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmhcbmluZGV4IDRmOTVkYTAyMzc0NmYuLjBiZWNkMzM2MTAxMGYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oXG4rKysgYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oXG5AQCAtNzYxNSwxMSArNzYxNSwxMiBAQCBib29sIGllZWU4MDIxMV90eF9wcmVwYXJlX3NrYihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiAgKlxuICAqIEBza2I6IHBhY2tldCBpbmplY3RlZCBieSB1c2Vyc3BhY2VcbiAgKiBAZGV2OiB0aGUgXHUwMDI2c3RydWN0IGRldmljZSBvZiB0aGlzIDgwMi4xMSBkZXZpY2VcbisgKiBAdHJpbV9mY3M6IHRyaW0gdGhlIEZDUyB0cmFpbGVyIHdoZW4gcHJlc2VudDsgdmFsaWRhdGUgaXQgb3RoZXJ3aXNlXG4gICpcbiAgKiBSZXR1cm46ICV0cnVlIGlmIHRoZSByYWRpb3RhcCBoZWFkZXIgd2FzIHBhcnNlZCwgJWZhbHNlIG90aGVyd2lzZVxuICAqL1xuIGJvb2wgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwKHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0XHQgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4rXHRcdFx0XHQgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB0cmltX2Zjcyk7XG4gXG4gLyoqXG4gICogc3RydWN0IGllZWU4MDIxMV9ub2FfZGF0YSAtIGhvbGRzIHRlbXBvcmFyeSBkYXRhIGZvciB0cmFja2luZyBQMlAgTm9BIHN0YXRlXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2lmYWNlLmMgYi9uZXQvbWFjODAyMTEvaWZhY2UuY1xuaW5kZXggNDM0NjBhNzA1YTZiZC4uZmRhYzcyOWNhNTgwZCAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9pZmFjZS5jXG4rKysgYi9uZXQvbWFjODAyMTEvaWZhY2UuY1xuQEAgLTk2NCw3ICs5NjQsNyBAQCBzdGF0aWMgdTE2IGllZWU4MDIxMV9tb25pdG9yX3NlbGVjdF9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0LyogcmVzZXQgZmxhZ3MgYW5kIGluZm8gYmVmb3JlIHBhcnNpbmcgcmFkaW90YXAgaGVhZGVyICovXG4gXHRtZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7XG4gXG4tXHRpZiAoIWllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcChza2IsIGRldikpXG4rXHRpZiAoIWllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcChza2IsIGRldiwgZmFsc2UpKVxuIFx0XHRyZXR1cm4gMDsgLyogZG9lc24ndCBtYXR0ZXIsIGZyYW1lIHdpbGwgYmUgZHJvcHBlZCAqL1xuIFxuIFx0bGVuX3J0aGRyID0gaWVlZTgwMjExX2dldF9yYWRpb3RhcF9sZW4oc2tiLVx1MDAzZWRhdGEpO1xuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS90eC5jIGIvbmV0L21hYzgwMjExL3R4LmNcbmluZGV4IDkxYjE0MTEyZTI0ZjAuLjk3OTkwMDM5Njk1ZGIgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvdHguY1xuKysrIGIvbmV0L21hYzgwMjExL3R4LmNcbkBAIC0yMDk3LDcgKzIwOTcsNyBAQCBzdGF0aWMgYm9vbCBpZWVlODAyMTFfdmFsaWRhdGVfcmFkaW90YXBfbGVuKHN0cnVjdCBza19idWZmICpza2IpXG4gfVxuIFxuIGJvb2wgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwKHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0XHQgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbitcdFx0XHRcdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRyaW1fZmNzKVxuIHtcbiBcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi1cdTAwM2VpZWVlODAyMTFfcHRyKTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaXRlcmF0b3IgaXRlcmF0b3I7XG5AQCAtMjE1NCw3ICsyMTU0LDggQEAgYm9vbCBpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzYyAoaXRlcmF0b3IuX21heF9sZW5ndGggKyBGQ1NfTEVOKSlcbiBcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0XHRcdFx0c2tiX3RyaW0oc2tiLCBza2ItXHUwMDNlbGVuIC0gRkNTX0xFTik7XG4rXHRcdFx0XHRpZiAodHJpbV9mY3MpXG4rXHRcdFx0XHRcdHNrYl90cmltKHNrYiwgc2tiLVx1MDAzZWxlbiAtIEZDU19MRU4pO1xuIFx0XHRcdH1cbiBcdFx0XHRpZiAoKml0ZXJhdG9yLnRoaXNfYXJnIFx1MDAyNiBJRUVFODAyMTFfUkFESU9UQVBfRl9XRVApXG4gXHRcdFx0XHRpbmZvLVx1MDAzZWZsYWdzIFx1MDAyNj0gfklFRUU4MDIxMV9UWF9JTlRGTF9ET05UX0VOQ1JZUFQ7XG5AQCAtMjQ3MCw3ICsyNDcxLDcgQEAgbmV0ZGV2X3R4X3QgaWVlZTgwMjExX21vbml0b3Jfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0ICogc2VsZWN0ZWQgY2hhbmRlZiBhYm92ZSB0byBhY2N1cmF0ZWx5IHNldCBpbmplY3Rpb24gcmF0ZXMgYW5kXG4gXHQgKiByZXRyYW5zbWlzc2lvbnMuXG4gXHQgKi9cbi1cdGlmICghaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwKHNrYiwgZGV2KSlcbitcdGlmICghaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwKHNrYiwgZGV2LCB0cnVlKSlcbiBcdFx0Z290byBmYWlsX3JjdTtcbiBcbiBcdC8qIHJlbW92ZSB0aGUgaW5qZWN0aW9uIHJhZGlvdGFwIGhlYWRlciAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6MzA6MDQuNjExMTI3MDAxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0ODEwMzgyMjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBGQ1MgVHJpbW1pbmcgTG9naWMgaW4gbWFjODAyMTEqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwYCBpbiBgbmV0L21hYzgwMjExYC4gVGhlIGNvcmUgY2hhbmdlIGludHJvZHVjZXMgYSBgdHJpbV9mY3NgIGFyZ3VtZW50IHRvIHRoYXQgZnVuY3Rpb24uIFRoZSBpbnRlbnRpb24gaXMgdG8gY29udHJvbCB3aGV0aGVyIHRoZSBGQ1MgdHJhaWxlciBpcyByZW1vdmVkIGZyb20gdGhlIHJhZGlvdGFwIGhlYWRlciBkdXJpbmcgcGFyc2luZy4gSW5pdGlhbGx5LCBJIHRob3VnaHQgdGhpcyBtaWdodCBiZSByZWxhdGVkIHRvIGEgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBpc3N1ZSwgcG90ZW50aWFsbHkgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSwgYnV0IGFmdGVyIHJldmlld2luZyB0aGUgY29kZSwgaXQncyBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IHByb2JsZW0uXG5cblNwZWNpZmljYWxseSwgdGhlIGNvZGUncyBiZWhhdmlvciBpbiBgaWVlZTgwMjExX21vbml0b3Jfc2VsZWN0X3F1ZXVlYCBhbmQgYGllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXRgIGNhdWdodCBteSBhdHRlbnRpb24uIFRoZSBmb3JtZXIgaXMgY2FsbGVkICpiZWZvcmUqIHRoZSBsYXR0ZXIsIGFuZCB0aGV5IGJvdGggcGFyc2UgdGhlIHJhZGlvdGFwIGhlYWRlci4gYGllZWU4MDIxMV9tb25pdG9yX3NlbGVjdF9xdWV1ZWAgbm93ICpkb2Vzbid0KiB0cmltIHRoZSBGQ1MgKGJlY2F1c2UgYHRyaW1fZmNzYCBpcyBgZmFsc2VgKSwgYW5kIGBpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0YCAqZG9lcyogdHJpbSB0aGUgRkNTIChiZWNhdXNlIGB0cmltX2Zjc2AgaXMgYHRydWVgKS4gVGhpcyBpcyB0aGUgZml4LiBUaGUgb3JpZ2luYWwgbG9naWMsIEkgc3VzcGVjdCwgd2FzIHRoYXQgYGllZWU4MDIxMV9tb25pdG9yX3NlbGVjdF9xdWV1ZWAgd2FzICppbmNvcnJlY3RseSogdHJpbW1pbmcgdGhlIEZDUywgYW5kIHRoZW4gYGllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXRgIHdhcyBiZWluZyBjYWxsZWQsIGFsc28gYXR0ZW1wdGluZyB0byBwYXJzZSB0aGUgYWxyZWFkeS10cmltbWVkIGhlYWRlci5cblxuTG9va2luZyBhdCB0aGUgY29kZSBzbmlwcGV0LCBpZiBgdHJpbV9mY3NgIGlzIHRydWUsIHRoZW4gYHNrYl90cmltKHNrYiwgc2tiLVx1MDAzZWxlbiAtIEZDU19MRU4pYCB3aWxsIGJlIGNhbGxlZC4gSWYgYSBwcmV2aW91cyBmdW5jdGlvbiBoYXMgYWxyZWFkeSB0cmltbWVkIHRoZSBGQ1MsIGFuZCB3ZSBjaGVjayB0aGUgbGVuZ3RoIGFmdGVyIGl0IGhhcyBiZWVuIHRyaW1tZWQsIHRoZSBjaGVjayBgaWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIChpdGVyYXRvci5fbWF4X2xlbmd0aCArIEZDU19MRU4pKWAgaXMgZ29pbmcgdG8gZmFpbCwgbGlrZWx5IHJlc3VsdGluZyBpbiBhIHBhY2tldCBiZWluZyBkcm9wcGVkLiBUaGlzIGlzIHRoZSBwcmVjaXNlIHNjZW5hcmlvIHdlIGFyZSB0cnlpbmcgdG8gYXZvaWQuXG5cblRoZSBpc3N1ZSBpcyB0aGlzIGNoZWNrIGlzIHdoYXQgZGV0ZXJtaW5lcyB0aGUgcHJvYmxlbS4gVGhlIGNvcmUgYnVnIGhlcmUgaXNuJ3QgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBLTVNBTi4gSXQgaXMgYSBsb2dpYyBlcnJvcjogYW4gaW5jb3JyZWN0IHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgaW52b2x2aW5nIGBza2JfdHJpbWAgYW5kIHN1YnNlcXVlbnQgbGVuZ3RoIGNoZWNrcy4gVGhlIGxlbmd0aCBpcyBiZWluZyBhbHRlcmVkIGluIGFuIHVuZXhwZWN0ZWQgd2F5LCBjYXVzaW5nIGEgcGFja2V0IGRyb3AgYmVjYXVzZSB0aGUgcmFkaW90YXAgaGVhZGVyIHBhcnNpbmcgZmFpbHMuIEl0IG1lYW5zIGZyYW1lcyB3aXRoIEZDUyBhcmUgYmVpbmcgZHJvcHBlZCBkdWUgdG8gYSBtaXNtYXRjaGVkIGV4cGVjdGF0aW9uIG9mIHRoZSBza2IgbGVuZ3RoLiBUaGVyZWZvcmUsIHRoaXMgaXMgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLiBUaGUgYnVnIGlzIGFib3V0IHBhY2tldCBkcm9wcyBjYXVzZWQgYnkgYW4gaW5jb3JyZWN0IGxlbmd0aCBjaGVjayBhZnRlciBGQ1MgdHJpbW1pbmcuXG5cblRoZXJlZm9yZSwgTmVlZHNLTVNBTiBzaG91bGQgYmUgc2V0IHRvIGZhbHNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTQwLCJPdXRwdXRUb2tlbnMiOjI0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDozMDoxOS40MjE1MTI0NTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIHdoZXJlIGBza2JfdHJpbWAgd2FzIGluY29ycmVjdGx5IGNhbGxlZCBkdXJpbmcgYGllZWU4MDIxMV9tb25pdG9yX3NlbGVjdF9xdWV1ZWAgd2hlbiBwYXJzaW5nIHRoZSByYWRpb3RhcCBoZWFkZXIuIFRyaW1taW5nIHRoZSBGQ1MgdHJhaWxlciBhdCB0aGlzIHN0YWdlIHJlZHVjZWQgYHNrYi1cXHUwMDNlbGVuYCwgY2F1c2luZyB0aGUgc3Vic2VxdWVudCBjYWxsIHRvIGBpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXBgIGluIGBpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0YCB0byBmYWlsIGl0cyBsZW5ndGggY2hlY2sgKGBza2ItXFx1MDAzZWxlbiBcXHUwMDNjIChpdGVyYXRvci5fbWF4X2xlbmd0aCArIEZDU19MRU4pYCkgYW5kIGRyb3AgdGhlIHBhY2tldC4gVGhlIGZpeCBpbnRyb2R1Y2VzIGEgYHRyaW1fZmNzYCBib29sZWFuIHRvIGRlZmVyIHRoZSB0cmltbWluZyB1bnRpbCBgaWVlZTgwMjExX21vbml0b3Jfc3RhcnRfeG1pdGAuXFxuXFxuVGhpcyBpcyBhIGxvZ2ljIGJ1ZyByZWxhdGVkIHRvIHBhY2tldCBsZW5ndGggbWFuaXB1bGF0aW9uIGFuZCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBhY2Nlc3Nlcywgb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgZm9yIGNhdGNoaW5nIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgaXNzdWVzIGluIHRoaXMgYXJlYS4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBgc2tiX3RyaW1gIHdhcyBpbmNvcnJlY3RseSBjYWxsZWQgZHVyaW5nIGBpZWVlODAyMTFfbW9uaXRvcl9zZWxlY3RfcXVldWVgIHdoZW4gcGFyc2luZyB0aGUgcmFkaW90YXAgaGVhZGVyLiBUcmltbWluZyB0aGUgRkNTIHRyYWlsZXIgYXQgdGhpcyBzdGFnZSByZWR1Y2VkIGBza2ItXFx1MDAzZWxlbmAsIGNhdXNpbmcgdGhlIHN1YnNlcXVlbnQgY2FsbCB0byBgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwYCBpbiBgaWVlZTgwMjExX21vbml0b3Jfc3RhcnRfeG1pdGAgdG8gZmFpbCBpdHMgbGVuZ3RoIGNoZWNrIChgc2tiLVxcdTAwM2VsZW4gXFx1MDAzYyAoaXRlcmF0b3IuX21heF9sZW5ndGggKyBGQ1NfTEVOKWApIGFuZCBkcm9wIHRoZSBwYWNrZXQuIFRoZSBmaXggaW50cm9kdWNlcyBhIGB0cmltX2Zjc2AgYm9vbGVhbiB0byBkZWZlciB0aGUgdHJpbW1pbmcgdW50aWwgYGllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXRgLlxcblxcblRoaXMgaXMgYSBsb2dpYyBidWcgcmVsYXRlZCB0byBwYWNrZXQgbGVuZ3RoIG1hbmlwdWxhdGlvbiBhbmQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgYWNjZXNzZXMsIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IGZvciBjYXRjaGluZyBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGlzc3VlcyBpbiB0aGlzIGFyZWEuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowdjz2b[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-17 23:45:40 +0000 UTC FinishedAt: 2026-08-18 00:30:21 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211", "MAC80211_HWSIM", "CFG80211" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211", "MAC80211_HWSIM", "CFG80211" ], "series_id": "ac9a1659-5477-4c8a-aecf-5eb0288abebc" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ieee80211_parse_tx_radiotap", "ieee80211_monitor_start_xmit" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBgc2tiX3RyaW1gIHdhcyBpbmNvcnJlY3RseSBjYWxsZWQgZHVyaW5nIGBpZWVlODAyMTFfbW9uaXRvcl9zZWxlY3RfcXVldWVgIHdoZW4gcGFyc2luZyB0aGUgcmFkaW90YXAgaGVhZGVyLiBUcmltbWluZyB0aGUgRkNTIHRyYWlsZXIgYXQgdGhpcyBzdGFnZSByZWR1Y2VkIGBza2ItXHUwMDNlbGVuYCwgY2F1c2luZyB0aGUgc3Vic2VxdWVudCBjYWxsIHRvIGBpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXBgIGluIGBpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0YCB0byBmYWlsIGl0cyBsZW5ndGggY2hlY2sgKGBza2ItXHUwMDNlbGVuIFx1MDAzYyAoaXRlcmF0b3IuX21heF9sZW5ndGggJiM0MzsgRkNTX0xFTilgKSBhbmQgZHJvcCB0aGUgcGFja2V0LiBUaGUgZml4IGludHJvZHVjZXMgYSBgdHJpbV9mY3NgIGJvb2xlYW4gdG8gZGVmZXIgdGhlIHRyaW1taW5nIHVudGlsIGBpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0YC5cblxuVGhpcyBpcyBhIGxvZ2ljIGJ1ZyByZWxhdGVkIHRvIHBhY2tldCBsZW5ndGggbWFuaXB1bGF0aW9uIGFuZCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBhY2Nlc3Nlcywgb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgZm9yIGNhdGNoaW5nIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgaXNzdWVzIGluIHRoaXMgYXJlYS4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcGAgdG8gb3B0aW9uYWxseSB0cmltIHRoZSBGQ1MgdHJhaWxlciBmcm9tIGluamVjdGVkIHBhY2tldHMuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHdoZW4gaW5qZWN0aW5nIHBhY2tldHMgaW50byBhIG1hYzgwMjExIG1vbml0b3IgaW50ZXJmYWNlLCB3aGljaCBjYW4gYmUgdGVzdGVkIHVzaW5nIHRoZSBtYWM4MDIxMV9od3NpbSBkcml2ZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtYWM4MDIxMSBuZXR3b3JraW5nIHN0YWNrLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjI5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjA4ODgwOWU5Y2VlMTAyZDliMzUwNzU5ZDMxZGRhZDA0ZDQwYTgzYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDAwOjI4OjU3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmggYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oXG5pbmRleCA0Zjk1ZGEwMjM3NDZmLi4wYmVjZDMzNjEwMTBmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbWFjODAyMTEuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaFxuQEAgLTc2MTUsMTEgJiM0Mzs3NjE1LDEyIEBAIGJvb2wgaWVlZTgwMjExX3R4X3ByZXBhcmVfc2tiKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuICAqXG4gICogQHNrYjogcGFja2V0IGluamVjdGVkIGJ5IHVzZXJzcGFjZVxuICAqIEBkZXY6IHRoZSBcdTAwMjZzdHJ1Y3QgZGV2aWNlIG9mIHRoaXMgODAyLjExIGRldmljZVxuJiM0MzsgKiBAdHJpbV9mY3M6IHRyaW0gdGhlIEZDUyB0cmFpbGVyIHdoZW4gcHJlc2VudDsgdmFsaWRhdGUgaXQgb3RoZXJ3aXNlXG4gICpcbiAgKiBSZXR1cm46ICV0cnVlIGlmIHRoZSByYWRpb3RhcCBoZWFkZXIgd2FzIHBhcnNlZCwgJWZhbHNlIG90aGVyd2lzZVxuICAqL1xuIGJvb2wgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwKHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0XHQgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgdHJpbV9mY3MpO1xuIFxuIC8qKlxuICAqIHN0cnVjdCBpZWVlODAyMTFfbm9hX2RhdGEgLSBob2xkcyB0ZW1wb3JhcnkgZGF0YSBmb3IgdHJhY2tpbmcgUDJQIE5vQSBzdGF0ZVxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZmFjZS5jIGIvbmV0L21hYzgwMjExL2lmYWNlLmNcbmluZGV4IDQzNDYwYTcwNWE2YmQuLmZkYWM3MjljYTU4MGQgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvaWZhY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2lmYWNlLmNcbkBAIC05NjQsNyAmIzQzOzk2NCw3IEBAIHN0YXRpYyB1MTYgaWVlZTgwMjExX21vbml0b3Jfc2VsZWN0X3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHQvKiByZXNldCBmbGFncyBhbmQgaW5mbyBiZWZvcmUgcGFyc2luZyByYWRpb3RhcCBoZWFkZXIgKi9cbiBcdG1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTtcbiBcbi1cdGlmICghaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwKHNrYiwgZGV2KSlcbiYjNDM7XHRpZiAoIWllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcChza2IsIGRldiwgZmFsc2UpKVxuIFx0XHRyZXR1cm4gMDsgLyogZG9lc24mIzM5O3QgbWF0dGVyLCBmcmFtZSB3aWxsIGJlIGRyb3BwZWQgKi9cbiBcbiBcdGxlbl9ydGhkciA9IGllZWU4MDIxMV9nZXRfcmFkaW90YXBfbGVuKHNrYi1cdTAwM2VkYXRhKTtcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdHguYyBiL25ldC9tYWM4MDIxMS90eC5jXG5pbmRleCA5MWIxNDExMmUyNGYwLi45Nzk5MDAzOTY5NWRiIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL3R4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS90eC5jXG5AQCAtMjA5Nyw3ICYjNDM7MjA5Nyw3IEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV92YWxpZGF0ZV9yYWRpb3RhcF9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB9XG4gXG4gYm9vbCBpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHRcdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRyaW1fZmNzKVxuIHtcbiBcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi1cdTAwM2VpZWVlODAyMTFfcHRyKTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaXRlcmF0b3IgaXRlcmF0b3I7XG5AQCAtMjE1NCw3ICYjNDM7MjE1NCw4IEBAIGJvb2wgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2MgKGl0ZXJhdG9yLl9tYXhfbGVuZ3RoICYjNDM7IEZDU19MRU4pKVxuIFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRcdFx0XHRza2JfdHJpbShza2IsIHNrYi1cdTAwM2VsZW4gLSBGQ1NfTEVOKTtcbiYjNDM7XHRcdFx0XHRpZiAodHJpbV9mY3MpXG4mIzQzO1x0XHRcdFx0XHRza2JfdHJpbShza2IsIHNrYi1cdTAwM2VsZW4gLSBGQ1NfTEVOKTtcbiBcdFx0XHR9XG4gXHRcdFx0aWYgKCppdGVyYXRvci50aGlzX2FyZyBcdTAwMjYgSUVFRTgwMjExX1JBRElPVEFQX0ZfV0VQKVxuIFx0XHRcdFx0aW5mby1cdTAwM2VmbGFncyBcdTAwMjY9IH5JRUVFODAyMTFfVFhfSU5URkxfRE9OVF9FTkNSWVBUO1xuQEAgLTI0NzAsNyAmIzQzOzI0NzEsNyBAQCBuZXRkZXZfdHhfdCBpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHQgKiBzZWxlY3RlZCBjaGFuZGVmIGFib3ZlIHRvIGFjY3VyYXRlbHkgc2V0IGluamVjdGlvbiByYXRlcyBhbmRcbiBcdCAqIHJldHJhbnNtaXNzaW9ucy5cbiBcdCAqL1xuLVx0aWYgKCFpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXAoc2tiLCBkZXYpKVxuJiM0MztcdGlmICghaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwKHNrYiwgZGV2LCB0cnVlKSlcbiBcdFx0Z290byBmYWlsX3JjdTtcbiBcbiBcdC8qIHJlbW92ZSB0aGUgaW5qZWN0aW9uIHJhZGlvdGFwIGhlYWRlciAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjI5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMV9IV1NJTSYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2llZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcCYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXBgIHRvIG9wdGlvbmFsbHkgdHJpbSB0aGUgRkNTIHRyYWlsZXIgZnJvbSBpbmplY3RlZCBwYWNrZXRzLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSB3aGVuIGluamVjdGluZyBwYWNrZXRzIGludG8gYSBtYWM4MDIxMSBtb25pdG9yIGludGVyZmFjZSwgd2hpY2ggY2FuIGJlIHRlc3RlZCB1c2luZyB0aGUgbWFjODAyMTFfaHdzaW0gZHJpdmVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWFjODAyMTEgbmV0d29ya2luZyBzdGFjay4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGYwODg4MDllOWNlZTEwMmQ5YjM1MDc1OWQzMWRkYWQwNGQ0MGE4M2IKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxOCAwMDoyODo1NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmggYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCmluZGV4IDRmOTVkYTAyMzc0NmYuLjBiZWNkMzM2MTAxMGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaApAQCAtNzYxNSwxMSAmIzQzOzc2MTUsMTIgQEAgYm9vbCBpZWVlODAyMTFfdHhfcHJlcGFyZV9za2Ioc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAgKgogICogQHNrYjogcGFja2V0IGluamVjdGVkIGJ5IHVzZXJzcGFjZQogICogQGRldjogdGhlICZhbXA7c3RydWN0IGRldmljZSBvZiB0aGlzIDgwMi4xMSBkZXZpY2UKJiM0MzsgKiBAdHJpbV9mY3M6IHRyaW0gdGhlIEZDUyB0cmFpbGVyIHdoZW4gcHJlc2VudDsgdmFsaWRhdGUgaXQgb3RoZXJ3aXNlCiAgKgogICogUmV0dXJuOiAldHJ1ZSBpZiB0aGUgcmFkaW90YXAgaGVhZGVyIHdhcyBwYXJzZWQsICVmYWxzZSBvdGhlcndpc2UKICAqLwogYm9vbCBpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiYjNDM7CQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRyaW1fZmNzKTsKIAogLyoqCiAgKiBzdHJ1Y3QgaWVlZTgwMjExX25vYV9kYXRhIC0gaG9sZHMgdGVtcG9yYXJ5IGRhdGEgZm9yIHRyYWNraW5nIFAyUCBOb0Egc3RhdGUKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZmFjZS5jIGIvbmV0L21hYzgwMjExL2lmYWNlLmMKaW5kZXggNDM0NjBhNzA1YTZiZC4uZmRhYzcyOWNhNTgwZCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2lmYWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2lmYWNlLmMKQEAgLTk2NCw3ICYjNDM7OTY0LDcgQEAgc3RhdGljIHUxNiBpZWVlODAyMTFfbW9uaXRvcl9zZWxlY3RfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkvKiByZXNldCBmbGFncyBhbmQgaW5mbyBiZWZvcmUgcGFyc2luZyByYWRpb3RhcCBoZWFkZXIgKi8KIAltZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7CiAKLQlpZiAoIWllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcChza2IsIGRldikpCiYjNDM7CWlmICghaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwKHNrYiwgZGV2LCBmYWxzZSkpCiAJCXJldHVybiAwOyAvKiBkb2VzbiYjMzk7dCBtYXR0ZXIsIGZyYW1lIHdpbGwgYmUgZHJvcHBlZCAqLwogCiAJbGVuX3J0aGRyID0gaWVlZTgwMjExX2dldF9yYWRpb3RhcF9sZW4oc2tiLSZndDtkYXRhKTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS90eC5jIGIvbmV0L21hYzgwMjExL3R4LmMKaW5kZXggOTFiMTQxMTJlMjRmMC4uOTc5OTAwMzk2OTVkYiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3R4LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL3R4LmMKQEAgLTIwOTcsNyAmIzQzOzIwOTcsNyBAQCBzdGF0aWMgYm9vbCBpZWVlODAyMTFfdmFsaWRhdGVfcmFkaW90YXBfbGVuKHN0cnVjdCBza19idWZmICpza2IpCiB9CiAKIGJvb2wgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwKHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiYjNDM7CQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRyaW1fZmNzKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0mZ3Q7aWVlZTgwMjExX3B0cik7CiAJc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9pdGVyYXRvciBpdGVyYXRvcjsKQEAgLTIxNTQsNyAmIzQzOzIxNTQsOCBAQCBib29sIGllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCWlmIChza2ItJmd0O2xlbiAmbHQ7IChpdGVyYXRvci5fbWF4X2xlbmd0aCAmIzQzOyBGQ1NfTEVOKSkKIAkJCQkJcmV0dXJuIGZhbHNlOwogCi0JCQkJc2tiX3RyaW0oc2tiLCBza2ItJmd0O2xlbiAtIEZDU19MRU4pOwomIzQzOwkJCQlpZiAodHJpbV9mY3MpCiYjNDM7CQkJCQlza2JfdHJpbShza2IsIHNrYi0mZ3Q7bGVuIC0gRkNTX0xFTik7CiAJCQl9CiAJCQlpZiAoKml0ZXJhdG9yLnRoaXNfYXJnICZhbXA7IElFRUU4MDIxMV9SQURJT1RBUF9GX1dFUCkKIAkJCQlpbmZvLSZndDtmbGFncyAmYW1wOz0gfklFRUU4MDIxMV9UWF9JTlRGTF9ET05UX0VOQ1JZUFQ7CkBAIC0yNDcwLDcgJiM0MzsyNDcxLDcgQEAgbmV0ZGV2X3R4X3QgaWVlZTgwMjExX21vbml0b3Jfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCSAqIHNlbGVjdGVkIGNoYW5kZWYgYWJvdmUgdG8gYWNjdXJhdGVseSBzZXQgaW5qZWN0aW9uIHJhdGVzIGFuZAogCSAqIHJldHJhbnNtaXNzaW9ucy4KIAkgKi8KLQlpZiAoIWllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcChza2IsIGRldikpCiYjNDM7CWlmICghaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwKHNrYiwgZGV2LCB0cnVlKSkKIAkJZ290byBmYWlsX3JjdTsKIAogCS8qIHJlbW92ZSB0aGUgaW5qZWN0aW9uIHJhZGlvdGFwIGhlYWRlciAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTQzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIG1hYzgwMjExIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXBgIGluIGBuZXQvbWFjODAyMTEvdHguY2AgYW5kIGBuZXQvbWFjODAyMTEvaWZhY2UuY2AuIEl0JiMzOTtzIGFkZGluZyBhIGB0cmltX2Zjc2AgYm9vbGVhbiB0byB0aGF0IGZ1bmN0aW9uLCB3aGljaCBtZWFucyB3ZSBjYW4gbm93IG9wdGlvbmFsbHkgc3RyaXAgdGhlIEZyYW1lIENoZWNrIFNlcXVlbmNlIChGQ1MpIHRyYWlsZXIuIFRoYXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gbWFjODAyMTEsIHdoaWNoIGlzLCBvZiBjb3Vyc2UsIHRoZSBoZWFydCBvZiB0aGUgODAyLjExIGltcGxlbWVudGF0aW9uIGluIHRoZSBrZXJuZWwuIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgd2UgY2FuIGZ1enogdXNpbmcgYG1hYzgwMjExX2h3c2ltYCwgd2hpY2ggbWFrZXMgdGhpcyBpbnRlcmVzdGluZy4KCk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBmdW5jdGlvbiYjMzk7cyBjYWxsZXJzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZS4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgY29kZSBzaG93cyB0aGF0IGBpZWVlODAyMTFfbW9uaXRvcl9zZWxlY3RfcXVldWVgIGluIGBuZXQvbWFjODAyMTEvaWZhY2UuY2AgYW5kIGBpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0YCBpbiBgbmV0L21hYzgwMjExL3R4LmNgIGNhbGwgaXQuIE5vdywgdGhvc2UgYXJlIGJvdGggaW50ZXJlc3RpbmcgY2FsbCBzaXRlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXnigJlyZSB1c2luZyB0aGUgcmFkaW90YXAgZGF0YSwgYW5kIGhvdyB0aGlzIGB0cmltX2Zjc2AgbWlnaHQgYWZmZWN0IHRoZW0uIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvbnRleHQgb2YgdGhvc2UgZnVuY3Rpb25zIHRvIHNlZSBob3cgdGhleSYjMzk7bGwgaGFuZGxlIHRoZSBGQ1MgdHJpbW1pbmcgYW5kIGlmIHRoaXMgaW50cm9kdWNlcyBhbnkgc3VidGxlIGJ1Z3MuCgpGaW5hbGx5LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgQ09ORklHX01BQzgwMjExYCBpcyB1c3VhbGx5IHRoZSBvbmUsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQmIzM5O3MgY29ycmVjdCBmb3IgdGhpcyBwYXJ0aWN1bGFyIGJ1aWxkIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1BQzgwMjExJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI6Y29uZmlnIE1BQzgwMjExXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7R2VuZXJpYyBJRUVFIDgwMi4xMSBOZXR3b3JraW5nIFN0YWNrIChtYWM4MDIxMSlcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz0xOT1pZiBNQUM4MDIxMSAhPSBuXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIxOmNvbmZpZyBNQUM4MDIxMV9IQVNfUkNcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIyLVx0Ym9vbFxubmV0L21hYzgwMjExL0tjb25maWctMjMtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNDpjb25maWcgTUFDODAyMTFfUkNfTUlOU1RSRUxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI1LVx0Ym9vbCBcJiMzNDtNaW5zdHJlbFwmIzM0OyBpZiBFWFBFUlRcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz0zMT1jaG9pY2Vcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy00MC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjQxOmNvbmZpZyBNQUM4MDIxMV9SQ19ERUZBVUxUX01JTlNUUkVMXG5uZXQvbWFjODAyMTEvS2NvbmZpZy00Mi1cdGJvb2wgXCYjMzQ7TWluc3RyZWxcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz00OD1lbmRjaG9pY2Vcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQ5LVxubmV0L21hYzgwMjExL0tjb25maWc6NTA6Y29uZmlnIE1BQzgwMjExX1JDX0RFRkFVTFRcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTUxLVx0c3RyaW5nXG4tLVxubmV0L21hYzgwMjExL0tjb25maWc9NTc9Y29tbWVudCBcJiMzNDtTb21lIHdpcmVsZXNzIGRyaXZlcnMgcmVxdWlyZSBhIHJhdGUgY29udHJvbCBhbGdvcml0aG1cJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy01OS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjYwOmNvbmZpZyBNQUM4MDIxMV9LVU5JVF9URVNUXG5uZXQvbWFjODAyMTEvS2NvbmZpZy02MS1cdHRyaXN0YXRlIFwmIzM0O0tVbml0IHRlc3RzIGZvciBtYWM4MDIxMVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubmV0L21hYzgwMjExL0tjb25maWctNjktXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo3MDpjb25maWcgTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL0tjb25maWctNzEtXHRib29sIFwmIzM0O0VuYWJsZSBtYWM4MDIxMSBtZXNoIG5ldHdvcmtpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTc4LVxubmV0L21hYzgwMjExL0tjb25maWc6Nzk6Y29uZmlnIE1BQzgwMjExX0xFRFNcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTgwLVx0Ym9vbCBcJiMzNDtFbmFibGUgTEVEIHRyaWdnZXJzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctODctXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo4ODpjb25maWcgTUFDODAyMTFfREVCVUdGU1xubmV0L21hYzgwMjExL0tjb25maWctODktXHRib29sIFwmIzM0O0V4cG9ydCBtYWM4MDIxMSBpbnRlcm5hbHMgaW4gRGVidWdGU1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTk2LVxubmV0L21hYzgwMjExL0tjb25maWc6OTc6Y29uZmlnIE1BQzgwMjExX01FU1NBR0VfVFJBQ0lOR1xubmV0L21hYzgwMjExL0tjb25maWctOTgtXHRib29sIFwmIzM0O1RyYWNlIGFsbCBtYWM4MDIxMSBkZWJ1ZyBtZXNzYWdlc1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEwOS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjExMDptZW51Y29uZmlnIE1BQzgwMjExX0RFQlVHX01FTlVcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExMS1cdGJvb2wgXCYjMzQ7U2VsZWN0IG1hYzgwMjExIGRlYnVnZ2luZyBmZWF0dXJlc1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExNS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjExNjpjb25maWcgTUFDODAyMTFfTk9JTkxJTkVcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExNy1cdGJvb2wgXCYjMzQ7RG8gbm90IGlubGluZSBUWC9SWCBoYW5kbGVyc1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEzMS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjEzMjpjb25maWcgTUFDODAyMTFfVkVSQk9TRV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTMzLVx0Ym9vbCBcJiMzNDtWZXJib3NlIGRlYnVnZ2luZyBvdXRwdXRcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNDItXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNDM6Y29uZmlnIE1BQzgwMjExX01MTUVfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE0NC1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtYW5hZ2VkIE1MTUUgb3V0cHV0XCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTUzLVxubmV0L21hYzgwMjExL0tjb25maWc6MTU0OmNvbmZpZyBNQUM4MDIxMV9TVEFfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE1NS1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBzdGF0aW9uIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE2Mi1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE2Mzpjb25maWcgTUFDODAyMTFfSFRfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE2NC1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBIVCBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNzQtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNzU6Y29uZmlnIE1BQzgwMjExX09DQl9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTc2LVx0Ym9vbCBcJiMzNDtWZXJib3NlIE9DQiBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xODUtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxODY6Y29uZmlnIE1BQzgwMjExX0lCU1NfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE4Ny1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBJQlNTIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE5Ni1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE5Nzpjb25maWcgTUFDODAyMTFfUFNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE5OC1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBwb3dlcnNhdmUgbW9kZSBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMDgtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMDk6Y29uZmlnIE1BQzgwMjExX01QTF9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjEwLVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggcGVlciBsaW5rIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIyMS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIyMjpjb25maWcgTUFDODAyMTFfTVBBVEhfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIyMy1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIHBhdGggZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjM0LVxubmV0L21hYzgwMjExL0tjb25maWc6MjM1OmNvbmZpZyBNQUM4MDIxMV9NSFdNUF9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjM2LVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggSFdNUCByb3V0aW5nIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI0Ny1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0ODpjb25maWcgTUFDODAyMTFfTUVTSF9TWU5DX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNDktXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBzeW5jaHJvbml6YXRpb24gZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjU4LVxubmV0L21hYzgwMjExL0tjb25maWc6MjU5OmNvbmZpZyBNQUM4MDIxMV9NRVNIX0NTQV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjYwLVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggY2hhbm5lbCBzd2l0Y2ggZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjY5LVxubmV0L21hYzgwMjExL0tjb25maWc6MjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIX1BTX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNzEtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBwb3dlcnNhdmUgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjgwLVxubmV0L21hYzgwMjExL0tjb25maWc6MjgxOmNvbmZpZyBNQUM4MDIxMV9URExTX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yODItXHRib29sIFwmIzM0O1ZlcmJvc2UgVERMUyBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yOTItXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyOTM6Y29uZmlnIE1BQzgwMjExX0RFQlVHX0NPVU5URVJTXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yOTQtXHRib29sIFwmIzM0O0V4dHJhIHN0YXRpc3RpY3MgZm9yIFRYL1JYIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMwNy1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjMwODpjb25maWcgTUFDODAyMTFfU1RBX0hBU0hfTUFYX1NJWkVcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMwOS1cdGludCBcJiMzNDtTdGF0aW9uIGhhc2ggdGFibGUgbWF4aW11bSBzaXplXCYjMzQ7IGlmIE1BQzgwMjExX0RFQlVHX01FTlVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODQ0CgkJCQkJCQlvdXRwdXQ6IDQ5CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBNQUM4MDIxMSBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgYE1BQzgwMjExYCBjb25maWd1cmF0aW9uLiBTdGFuZGFyZCBzdHVmZi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgd2hlcmUgYXJlIHdlIGhlYWRpbmcgd2l0aCB0aGlzPyYjMzQ7IFRoZSBuYXR1cmFsIG5leHQgcXVlc3Rpb24gaXMgYWx3YXlzLCAqZG8gd2UgbmVlZCogYE1BQzgwMjExX0hXU0lNYD8gVGhlIGltcGxpY2F0aW9uIGlzIHRoYXQgd2Ugd2FudCB0byBlbnN1cmUgaGFyZHdhcmUgc2ltdWxhdGlvbiBpcyBhcHByb3ByaWF0ZWx5IGhhbmRsZWQsIG9yIGRpc2FibGVkIHdoZXJlIG5vdCBuZWVkZWQuIFdlIGFyZSBsb29raW5nIHRvIHJlZHVjZSBjb21wbGV4aXR5IG9mIHRoZSBidWlsZCBhbmQgZW5zdXJlIHRoYXQgYW55IGhhcmR3YXJlIHNwZWNpZmljIGRlcGVuZGVuY2llcyBhcmUgaW5jbHVkZWQgd2hlbiBhcHByb3ByaWF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQUM4MDIxMV9IV1NJTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hYzgwMjExX2h3c2ltL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNzMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgV2lyZWxlc3MgRHJpdmVyIExhbmRzY2FwZSoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byBmaW5kIHRoZSBzcGVjaWZpYyBrZXJuZWwgY29kZSByZWxhdGVkIHRvIHRoZSBNQUM4MDIxMSBoYXJkd2FyZSBzaW11bGF0b3IsIGBNQUM4MDIxMV9IV1NJTWAuIEkga25vdyBJJiMzOTt2ZSB3b3JrZWQgd2l0aCBpdCBiZWZvcmUsIGJ1dCB0aGUgZXhhY3QgbG9jYXRpb24gaW4gdGhlIExpbnV4IGtlcm5lbCBzb3VyY2UgdHJlZSBhbHdheXMgc2xpcHMgbXkgbWluZC4gTm8gcHJvYmxlbSwgdGltZSB0byBkbyBhIHF1aWNrIHNlYXJjaC4gVGhlIHdpcmVsZXNzIG5ldHdvcmtpbmcgZHJpdmVycyBhcmUgdXN1YWxseSBvcmdhbml6ZWQgdW5kZXIgYGRyaXZlcnMvbmV0L3dpcmVsZXNzYCwgc28gdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBzdGFydCBsb29raW5nLiBJJiMzOTtsbCBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgb2YgdGhhdCBwYXJ0aWN1bGFyIG1vZHVsZS4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIHRyYWNrIGRvd24gdGhpcyBwaWVjZSBvZiBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQUM4MDIxMV9IV1NJTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWc6MTpjb25maWcgTUFDODAyMTFfSFdTSU1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZy0yLVx0dHJpc3RhdGUgXCYjMzQ7U2ltdWxhdGVkIHJhZGlvIHRlc3RpbmcgdG9vbCBmb3IgbWFjODAyMTFcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Mzc0CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIHRoZSBNQUM4MDIxMSBIV1NJTSBDb25maWd1cmF0aW9uIGFuZCBSYWRpb3RhcCBQYXJzaW5nKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBNQUM4MDIxMV9IV1NJTWAgY29uZmlndXJhdGlvbi4gVGhhdCB0ZWxscyBtZSB0aGlzIGlzIGFsbCBhYm91dCB0aGUgaGFyZHdhcmUgc2ltdWxhdG9yLCB3aGljaCBpcyBrZXkgdG8gbXkgd29yay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaXMgYmVoYXZpbmcgdW5kZXIgc2ltdWxhdGVkIGNvbmRpdGlvbnMuIE5vdywgdGhlIGNydWNpYWwgcGFydCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGlzIGhvdyB0aGUgdHJhbnNtaXQgcmFkaW90YXAgaGVhZGVycyBhcmUgYmVpbmcgaGFuZGxlZCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBtb2RpZmljYXRpb25zIGhhdmUgYmVlbiBtYWRlIHRvIHRoZSBzeXN0ZW0gZm9yIHRoZSBzaW11bGF0b3IuIEkga25vdyB0aGF0IHRoZSBmdW5jdGlvbiBgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwYCBpcyB0aGUga2V5LiBNeSBmb2N1cyBpcyBvbiB0aGF0IHBhcnNpbmcgZnVuY3Rpb24uIFNvLCBJIG5lZWQgdG8gb3BlbiBgbmV0L21hYzgwMjExL3R4LmNgIGFuZCBoYXZlIGEgZ29vZCBsb29rIGF0IHRoYXQgZnVuY3Rpb24uIEkgbmVlZCB0byB0cmFjZSB0aHJvdWdoIGl0LCBwYXlpbmcgcGFydGljdWxhciBhdHRlbnRpb24gdG8gaG93IHRoZSByYWRpb3RhcCBpbmZvcm1hdGlvbiBpcyBpbnRlcnByZXRlZCB3aXRoaW4gdGhlIEhXU0lNIGNvbnRleHQuIEkmIzM5O20gbG9va2luZyBmb3Igd2hlcmUgdGhpbmdzIGRldmlhdGUgb3IgaW50ZXJhY3Qgd2l0aCB0aGUgc2ltdWxhdGVkIGVudmlyb25tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS90eC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjA5NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjA5NjpcdFx0cmV0dXJuIHRydWU7XG4yMDk3Olx0fVxuMjA5ODpcdFxuMjA5OTpcdGJvb2wgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwKHN0cnVjdCBza19idWZmICpza2IsXG4yMTAwOlx0XHRcdFx0XHQgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB0cmltX2ZjcylcbjIxMDE6XHR7XG4yMTAyOlx0XHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtXHUwMDNlaWVlZTgwMjExX3B0cik7XG4yMTAzOlx0XHRzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2l0ZXJhdG9yIGl0ZXJhdG9yO1xuMjEwNDpcdFx0c3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIgKnJ0aGRyID1cbjIxMDU6XHRcdFx0KHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyICopIHNrYi1cdTAwM2VkYXRhO1xuMjEwNjpcdFx0c3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpO1xuMjEwNzpcdFx0aW50IHJldCA9IGllZWU4MDIxMV9yYWRpb3RhcF9pdGVyYXRvcl9pbml0KFx1MDAyNml0ZXJhdG9yLCBydGhkciwgc2tiLVx1MDAzZWxlbixcbjIxMDg6XHRcdFx0XHRcdFx0XHQgICBOVUxMKTtcbjIxMDk6XHRcdHUxNiB0eGZsYWdzO1xuMjExMDpcdFx0dTE2IHJhdGUgPSAwO1xuMjExMTpcdFx0Ym9vbCByYXRlX2ZvdW5kID0gZmFsc2U7XG4yMTEyOlx0XHR1OCByYXRlX3JldHJpZXMgPSAwO1xuMjExMzpcdFx0dTE2IHJhdGVfZmxhZ3MgPSAwO1xuMjExNDpcdFx0dTggbWNzX2tub3duLCBtY3NfZmxhZ3MsIG1jc19idztcbjIxMTU6XHRcdHUxNiB2aHRfa25vd247XG4yMTE2Olx0XHR1OCB2aHRfbWNzID0gMCwgdmh0X25zcyA9IDA7XG4yMTE3Olx0XHRpbnQgaTtcbjIxMTg6XHRcbjIxMTk6XHRcdGlmICghaWVlZTgwMjExX3ZhbGlkYXRlX3JhZGlvdGFwX2xlbihza2IpKVxuMjEyMDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4yMTIxOlx0XG4yMTIyOlx0XHRpbmZvLVx1MDAzZWZsYWdzIHw9IElFRUU4MDIxMV9UWF9JTlRGTF9ET05UX0VOQ1JZUFQgfFxuMjEyMzpcdFx0XHQgICAgICAgSUVFRTgwMjExX1RYX0NUTF9ET05URlJBRztcbjIxMjQ6XHRcbjIxMjU6XHRcdC8qXG4yMTI2Olx0XHQgKiBmb3IgZXZlcnkgcmFkaW90YXAgZW50cnkgdGhhdCBpcyBwcmVzZW50XG4yMTI3Olx0XHQgKiAoaWVlZTgwMjExX3JhZGlvdGFwX2l0ZXJhdG9yX25leHQgcmV0dXJucyAtRU5PRU5UIHdoZW4gbm8gbW9yZVxuMjEyODpcdFx0ICogZW50cmllcyBwcmVzZW50LCBvciAtRUlOVkFMIG9uIGVycm9yKVxuMjEyOTpcdFx0ICovXG4yMTMwOlx0XG4yMTMxOlx0XHR3aGlsZSAoIXJldCkge1xuMjEzMjpcdFx0XHRyZXQgPSBpZWVlODAyMTFfcmFkaW90YXBfaXRlcmF0b3JfbmV4dChcdTAwMjZpdGVyYXRvcik7XG4yMTMzOlx0XG4yMTM0Olx0XHRcdGlmIChyZXQpXG4yMTM1Olx0XHRcdFx0Y29udGludWU7XG4yMTM2Olx0XG4yMTM3Olx0XHRcdC8qIHNlZSBpZiB0aGlzIGFyZ3VtZW50IGlzIHNvbWV0aGluZyB3ZSBjYW4gdXNlICovXG4yMTM4Olx0XHRcdHN3aXRjaCAoaXRlcmF0b3IudGhpc19hcmdfaW5kZXgpIHtcbjIxMzk6XHRcdFx0LypcbjIxNDA6XHRcdFx0ICogWW91IG11c3QgdGFrZSBjYXJlIHdoZW4gZGVyZWZlcmVuY2luZyBpdGVyYXRvci50aGlzX2FyZ1xuMjE0MTpcdFx0XHQgKiBmb3IgbXVsdGlieXRlIHR5cGVzLi4uIHRoZSBwb2ludGVyIGlzIG5vdCBhbGlnbmVkLiAgVXNlXG4yMTQyOlx0XHRcdCAqIGdldF91bmFsaWduZWQoKHR5cGUgKilpdGVyYXRvci50aGlzX2FyZykgdG8gZGVyZWZlcmVuY2VcbjIxNDM6XHRcdFx0ICogaXRlcmF0b3IudGhpc19hcmcgZm9yIHR5cGUgXCYjMzQ7dHlwZVwmIzM0OyBzYWZlbHkgb24gYWxsIGFyY2hlcy5cbjIxNDQ6XHRcdFx0Ki9cbjIxNDU6XHRcdFx0Y2FzZSBJRUVFODAyMTFfUkFESU9UQVBfRkxBR1M6XG4yMTQ2Olx0XHRcdFx0aWYgKCppdGVyYXRvci50aGlzX2FyZyBcdTAwMjYgSUVFRTgwMjExX1JBRElPVEFQX0ZfRkNTKSB7XG4yMTQ3Olx0XHRcdFx0XHQvKlxuMjE0ODpcdFx0XHRcdFx0ICogdGhpcyBpbmRpY2F0ZXMgdGhhdCB0aGUgc2tiIHdlIGhhdmUgYmVlblxuMjE0OTpcdFx0XHRcdFx0ICogaGFuZGVkIGhhcyB0aGUgMzItYml0IEZDUyBDUkMgYXQgdGhlIGVuZC4uLlxuMjE1MDpcdFx0XHRcdFx0ICogd2Ugc2hvdWxkIHJlYWN0IHRvIHRoYXQgYnkgc25pcHBpbmcgaXQgb2ZmXG4yMTUxOlx0XHRcdFx0XHQgKiBiZWNhdXNlIGl0IHdpbGwgYmUgcmVjb21wdXRlZCBhbmQgYWRkZWRcbjIxNTI6XHRcdFx0XHRcdCAqIG9uIHRyYW5zbWlzc2lvblxuMjE1MzpcdFx0XHRcdFx0ICovXG4yMTU0Olx0XHRcdFx0XHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2MgKGl0ZXJhdG9yLl9tYXhfbGVuZ3RoICYjNDM7IEZDU19MRU4pKVxuMjE1NTpcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4yMTU2Olx0XG4yMTU3Olx0XHRcdFx0XHRpZiAodHJpbV9mY3MpXG4yMTU4Olx0XHRcdFx0XHRcdHNrYl90cmltKHNrYiwgc2tiLVx1MDAzZWxlbiAtIEZDU19MRU4pO1xuMjE1OTpcdFx0XHRcdH1cbjIxNjA6XHRcdFx0XHRpZiAoKml0ZXJhdG9yLnRoaXNfYXJnIFx1MDAyNiBJRUVFODAyMTFfUkFESU9UQVBfRl9XRVApXG4yMTYxOlx0XHRcdFx0XHRpbmZvLVx1MDAzZWZsYWdzIFx1MDAyNj0gfklFRUU4MDIxMV9UWF9JTlRGTF9ET05UX0VOQ1JZUFQ7XG4yMTYyOlx0XHRcdFx0aWYgKCppdGVyYXRvci50aGlzX2FyZyBcdTAwMjYgSUVFRTgwMjExX1JBRElPVEFQX0ZfRlJBRylcbjIxNjM6XHRcdFx0XHRcdGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2PSB+SUVFRTgwMjExX1RYX0NUTF9ET05URlJBRztcbjIxNjQ6XHRcdFx0XHRicmVhaztcbjIxNjU6XHRcbjIxNjY6XHRcdFx0Y2FzZSBJRUVFODAyMTFfUkFESU9UQVBfVFhfRkxBR1M6XG4yMTY3Olx0XHRcdFx0dHhmbGFncyA9IGdldF91bmFsaWduZWRfbGUxNihpdGVyYXRvci50aGlzX2FyZyk7XG4yMTY4Olx0XHRcdFx0aWYgKHR4ZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9SQURJT1RBUF9GX1RYX05PQUNLKVxuMjE2OTpcdFx0XHRcdFx0aW5mby1cdTAwM2VmbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSztcbjIxNzA6XHRcdFx0XHRpZiAodHhmbGFncyBcdTAwMjYgSUVFRTgwMjExX1JBRElPVEFQX0ZfVFhfTk9TRVFOTylcbjIxNzE6XHRcdFx0XHRcdGluZm8tXHUwMDNlY29udHJvbC5mbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RSTF9OT19TRVFOTztcbjIxNzI6XHRcdFx0XHRpZiAodHhmbGFncyBcdTAwMjYgSUVFRTgwMjExX1JBRElPVEFQX0ZfVFhfT1JERVIpXG4yMTczOlx0XHRcdFx0XHRpbmZvLVx1MDAzZWNvbnRyb2wuZmxhZ3MgfD1cbjIxNzQ6XHRcdFx0XHRcdFx0SUVFRTgwMjExX1RYX0NUUkxfRE9OVF9SRU9SREVSO1xuMjE3NTpcdFx0XHRcdGJyZWFrO1xuMjE3NjpcdFxuMjE3NzpcdFx0XHRjYXNlIElFRUU4MDIxMV9SQURJT1RBUF9SQVRFOlxuMjE3ODpcdFx0XHRcdHJhdGUgPSAqaXRlcmF0b3IudGhpc19hcmc7XG4yMTc5Olx0XHRcdFx0cmF0ZV9mbGFncyA9IDA7XG4yMTgwOlx0XHRcdFx0cmF0ZV9mb3VuZCA9IHRydWU7XG4yMTgxOlx0XHRcdFx0YnJlYWs7XG4yMTgyOlx0XG4yMTgzOlx0XHRcdGNhc2UgSUVFRTgwMjExX1JBRElPVEFQX0FOVEVOTkE6XG4yMTg0Olx0XHRcdFx0LyogdGhpcyBjYW4gYXBwZWFyIG11bHRpcGxlIHRpbWVzLCBrZWVwIGEgYml0bWFwICovXG4yMTg1Olx0XHRcdFx0LyogY29udHJvbC5hbnRlbm5hcyBpcyBvbmx5IGEgMi1iaXQgYml0bWFwICovXG4yMTg2Olx0XHRcdFx0aWYgKCppdGVyYXRvci50aGlzX2FyZyBcdTAwM2MgMilcbjIxODc6XHRcdFx0XHRcdGluZm8tXHUwMDNlY29udHJvbC5hbnRlbm5hcyB8PSBCSVQoKml0ZXJhdG9yLnRoaXNfYXJnKTtcbjIxODg6XHRcdFx0XHRicmVhaztcbjIxODk6XHRcbjIxOTA6XHRcdFx0Y2FzZSBJRUVFODAyMTFfUkFESU9UQVBfREFUQV9SRVRSSUVTOlxuMjE5MTpcdFx0XHRcdHJhdGVfcmV0cmllcyA9ICppdGVyYXRvci50aGlzX2FyZztcbjIxOTI6XHRcdFx0XHRicmVhaztcbjIxOTM6XHRcbjIxOTQ6XHRcdFx0Y2FzZSBJRUVFODAyMTFfUkFESU9UQVBfTUNTOlxuMjE5NTpcdFx0XHRcdG1jc19rbm93biA9IGl0ZXJhdG9yLnRoaXNfYXJnWzBdO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTA5CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgUGxhbiBmb3IgUmFkaW90YXAgSGVhZGVyIFBhcnNpbmcqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgYGllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcGAgZnVuY3Rpb24sIGFuZCBpdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgdGVzdGFibGUuIFRoZSB3aG9sZSBwb2ludCBpcyBpdCBwYXJzZXMgcmFkaW90YXAgaGVhZGVycyBmcm9tIGluamVjdGVkIHBhY2tldHMg4oCTIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCB3ZSBuZWVkIHRvIGZ1enogZ2l2ZW4gdGhlIHBhdGNoIGludHJvZHVjZXMgYSBgdHJpbV9mY3NgIGFyZ3VtZW50LCBjaGFuZ2luZyB0aGUgYmVoYXZpb3Igb2YgdGhlIEZDUyBoYW5kbGluZy4gSWYgYHRyaW1fZmNzYCBpcyB0cnVlLCBpdCB0cmltcyB0aGUgRkNTIHRyYWlsZXIgYW5kIGlmIGl0IGlzIGZhbHNlLCBpdCBkb2VzbiYjMzk7dCB0cmltIGl0LCBidXQgdmFsaWRhdGVzIHRoZSBsZW5ndGguCgpUaGUgZ29vZCBuZXdzIGlzIHRoYXQgd2UgY2FuIGRlZmluaXRlbHkgaW5qZWN0IHRoZXNlIHBhY2tldHMuIFdlIGNhbiB1c2UgdGhlIGZ1enplciB0byBpbmplY3QgcGFja2V0cyB3aXRoIHJhZGlvdGFwIGhlYWRlcnMgdGhyb3VnaCBgbWFjODAyMTFfaHdzaW1gIG9yLCBpZiBpdOKAmXMgYSBtb25pdG9yIGludGVyZmFjZSwgdGhyb3VnaCB0dW4vdGFwLiBXYWl0LCB5ZWFoLCBtb25pdG9yIGludGVyZmFjZXMhIE1hYzgwMjExIG1vbml0b3IgaW50ZXJmYWNlcyAqY2FuKiBiZSBjcmVhdGVkLCBhbmQgd2UgKmNhbiogaW5qZWN0IHBhY2tldHMgaW50byB0aGVtLiBUaGF0JiMzOTtzIGV4Y2VsbGVudCEgVGhlIGBNQUM4MDIxMV9IV1NJTWAgY29uZmlnIGxvb2tzIHNvbGlkLCBhbmQgb2J2aW91c2x5LCBgTUFDODAyMTFgIGlzIGVzc2VudGlhbC4KCk5vdywgbGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSYjMzk7dmUgaWRlbnRpZmllZCB0aGUgcmlnaHQgZXhlY3V0aW9uIHBhdGhzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgYGllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcGAgaXMgY2FsbGVkLiBMZXQgbWUgc2VlLi4uIEkgc2hvdWxkIGNoZWNrIGBpZWVlODAyMTFfbW9uaXRvcl9zZWxlY3RfcXVldWVgIGFuZCBgaWVlZTgwMjExX21vbml0b3Jfc3RhcnRfeG1pdGAuIFJpZ2h0ISBgaWVlZTgwMjExX21vbml0b3Jfc3RhcnRfeG1pdGAgaXMgdGhlIGBuZG9fc3RhcnRfeG1pdGAgZm9yIG1vbml0b3IgaW50ZXJmYWNlcyEgU28sIGluamVjdGluZyBwYWNrZXRzIGludG8gYSBtb25pdG9yIGludGVyZmFjZSB3aWxsIHRyaWdnZXIgdGhpcyBmdW5jdGlvbi4gVGhlIGZ1enplciBjYW4gZG8gdGhpcyBieSBjcmVhdGluZyBhIG1vbml0b3IgaW50ZXJmYWNlIGFuZCBzZW5kaW5nIHBhY2tldHMgdG8gaXQuIFBlcmZlY3QsIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBXZSBhcmUgZ29pbmcgdG8gaGFtbWVyIHRoaXMgd2l0aCBmdXp6ZXJzIQoKT2theSwgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMuIERlZmluaXRlbHkgYGllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcGAgaXMgdGhlIG1haW4gdGFyZ2V0LiBBbHNvLCBgaWVlZTgwMjExX21vbml0b3Jfc3RhcnRfeG1pdGAgaXMgYW5vdGhlciBrZXkgb25lLCBhbmQgYGllZWU4MDIxMV9tb25pdG9yX3NlbGVjdF9xdWV1ZWAgaXMgYWxzbyByZWFjaGFibGUuCgpGaW5hbGx5LCBqdXN0IGEgcXVpY2sgY2hlY2sgZm9yIGRlcGVuZGVuY2llcy4gV2Uga25vdyBgTUFDODAyMTFgIGFuZCBgTUFDODAyMTFfSFdTSU1gIGFyZSB0aGUgcHJpbWFyeSBjb25maWdzIG5lZWRlZCwgYnV0IEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgaGlkZGVuIGRlcGVuZGVuY2llcy4gSSYjMzk7bGwgY2hlY2sgYE1BQzgwMjExX0hXU0lNYCYjMzk7cyBkZXBlbmRlbmNpZXMganVzdCB0byBiZSBjb21wbGV0ZWx5IHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQUM4MDIxMV9IV1NJTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWc6MTpjb25maWcgTUFDODAyMTFfSFdTSU1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZy0yLVx0dHJpc3RhdGUgXCYjMzQ7U2ltdWxhdGVkIHJhZGlvIHRlc3RpbmcgdG9vbCBmb3IgbWFjODAyMTFcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTYxNwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIGBNQUM4MDIxMV9IV1NJTWAgRGVmaW5pdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYE1BQzgwMjExX0hXU0lNYC4gSSBrbm93IGl0JiMzOTtzIHJlbGF0ZWQgdG8gdGhlIG1hYzgwMjExIGZyYW1ld29yaywgb2J2aW91c2x5LiBCdXQgSSBuZWVkIHRvIGdvIGRlZXBlciB0aGFuIGp1c3QgdGhlIG5hbWUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBwdWxsIHVwIHRoZSBmdWxsIGRlZmluaXRpb24g4oCTIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCB0aGlzIHRoaW5nICppcyogYXQgYSBjb2RlIGxldmVsLiBXaGF0IGRvZXMgdGhpcyBtYWNybyBzdGFuZCBmb3I/IFdoYXQgaW1wbGljYXRpb25zIGRvZXMgdGhhdCBoYXZlIG9uIHRoZSBmcmFtZXdvcmsmIzM5O3MgYmVoYXZpb3I/IElzIGl0IGEgY29tcGlsZS10aW1lIGZsYWcsIGEgc3RydWN0IGRlZmluaXRpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgc3BlY2lmaWNzIG9mIHRoZSBkZWZpbml0aW9uIHdpbGwgcmV2ZWFsIGNydWNpYWwgaW5zaWdodHMsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gaGFyZHdhcmUgc2ltdWxhdGlvbi4gRG9lcyBpdCB0aWUgaW50byB0aGUgaW50ZXJuYWwgc3RydWN0dXJlcywgYW5kIGlmIHNvLCBob3c/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIHZhcmlvdXMgbGF5ZXJzIG9mIHRoZSBtYWM4MDIxMSBzdGFjay4gVWx0aW1hdGVseSwgbXkgZ29hbCBoZXJlIGlzIHRvIGdyYXNwIHRoZSBwcmFjdGljYWwgY29uc2VxdWVuY2VzIG9mIGl0cyBwcmVzZW5jZSBvciBhYnNlbmNlIHdpdGhpbiB0aGUgc3lzdGVtLiBMZXQmIzM5O3Mgc2VlIGl0IGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgZnJhbWV3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdGNvbmZpZyBNQUM4MDIxMV9IV1NJTVxuICAgMjpcdFx0dHJpc3RhdGUgXCYjMzQ7U2ltdWxhdGVkIHJhZGlvIHRlc3RpbmcgdG9vbCBmb3IgbWFjODAyMTFcJiMzNDtcbiAgIDM6XHRcdGRlcGVuZHMgb24gTUFDODAyMTFcbiAgIDQ6XHRcdGhlbHBcbiAgIDU6XHRcdCAgVGhpcyBkcml2ZXIgaXMgYSBkZXZlbG9wZXIgdGVzdGluZyB0b29sIHRoYXQgY2FuIGJlIHVzZWQgdG8gdGVzdFxuICAgNjpcdFx0ICBJRUVFIDgwMi4xMSBuZXR3b3JraW5nIHN0YWNrIChtYWM4MDIxMSkgZnVuY3Rpb25hbGl0eS4gVGhpcyBpcyBub3RcbiAgIDc6XHRcdCAgbmVlZGVkIGZvciBub3JtYWwgd2lyZWxlc3MgTEFOIHVzYWdlIGFuZCBpcyBvbmx5IGZvciB0ZXN0aW5nLiBTZWVcbiAgIDg6XHRcdCAgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL21hYzgwMjExX2h3c2ltIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvd1xuICAgOTpcdFx0ICB0byB1c2UgdGhpcyB0b29sLlxuICAxMDpcdFxuICAxMTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmVcbiAgMTI6XHRcdCAgY2FsbGVkIG1hYzgwMjExX2h3c2ltLiAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMTM6XHRcbiAgMTQ6XHRjb25maWcgVklSVF9XSUZJXG4gIDE1Olx0XHR0cmlzdGF0ZSBcJiMzNDtXaWZpIHdyYXBwZXIgZm9yIGV0aGVybmV0IGRyaXZlcnNcJiMzNDtcbiAgMTY6XHRcdGRlcGVuZHMgb24gQ0ZHODAyMTFcbiAgMTc6XHRcdGhlbHBcbiAgMTg6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBldGhlcm5ldCBjb25uZWN0aW9ucyB0byBhcHBlYXIgYXMgaWYgdGhleVxuICAxOTpcdFx0ICBhcmUgd2lmaSBjb25uZWN0aW9ucyB0aHJvdWdoIGEgc3BlY2lhbCBydG5ldGxpbmsgZGV2aWNlLlxuICAyMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDIzMwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgZGVwZW5kZW5jaWVzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGVlcCBEaXZlIGludG8gV2lyZWxlc3MgRHJpdmVyIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBzdHJhaWdodGZvcndhcmQgd2hlbiBJIHNlZSB0aGVzZSBkZXBlbmRlbmNpZXMuIGBNQUM4MDIxMV9IV1NJTWAg4oCTIHJpZ2h0LCB0aGF0JiMzOTtzIHRoZSBoYXJkd2FyZSBzaW11bGF0aW9uIG1vZHVsZSBmb3IgTUFDODAyMTEsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGl0IGhhcyBhIGRpcmVjdCBkZXBlbmRlbmNlIG9uIHRoZSBtYWluIGBNQUM4MDIxMWAgZnJhbWV3b3JrLiBObyBzdXJwcmlzZXMgdGhlcmUuIEl0IHdvdWxkIGJlIGJpemFycmUgaWYgaXQgKmRpZG4mIzM5O3QqIGRlcGVuZCBvbiBpdC4gVGhhdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGFyY2hpdGVjdHVyYWwgZ2l2ZW4uCgpOb3csIGBNQUM4MDIxMWAgaXRzZWxmLi4uIGFoIHllcywgdGhhdCYjMzk7cyBidWlsdCBvbiBgQ0ZHODAyMTFgLiBUaGF0JiMzOTtzIHRoZSBjb3JlLiBgQ0ZHODAyMTFgIHByb3ZpZGVzIHRoZSBjb25maWd1cmF0aW9uIGFuZCByZWd1bGF0b3J5IGRvbWFpbiBpbnRlcmZhY2UgZm9yIDgwMi4xMSBkZXZpY2VzIGluIHRoZSBMaW51eCBrZXJuZWwuIEl0JiMzOTtzIHRoZSBhYnN0cmFjdGlvbiBsYXllci4gRXZlcnl0aGluZyBlbHNlLCBgTUFDODAyMTFgLCB0aGUgaGFyZHdhcmUgc2ltdWxhdGlvbnMsIGFsbCB1c2UgYENGRzgwMjExYC4KClNvLCB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgZm9yIG1lLCBhbmQgSSYjMzk7bSBzdXJlIEkmIzM5O20gbm90IGFsb25lLCBpcyB0byBxdWlja2x5IGRyaWxsIGRvd24gYW5kIG1ha2Ugc3VyZSBgQ0ZHODAyMTFgIGlzIHNvdW5kLiBXaGF0JiMzOTtzIHRoZSBzdGF0dXMgb2YgdGhhdCBpbnRlcmZhY2U/IElzIGl0IHdvcmtpbmcgYXMgZXhwZWN0ZWQ/IE5vIHBvaW50IHNwZW5kaW5nIHRpbWUgb24gdGhlIGRvd25zdHJlYW0gYml0cyBpZiB0aGUgZm91bmRhdGlvbiBpc24mIzM5O3Qgc29saWQuIEkmIzM5O2Qgd2FudCB0byBjaGVjayBpdHMgdmVyc2lvbiwgYW55IHJlY2VudCBwYXRjaGVzLCBrbm93biBidWdzLCBhbnkgcmVncmVzc2lvbnMgaXQgbWlnaHQgaGF2ZSBpbnRyb2R1Y2VkLiBCYXNpY2FsbHksIGEgcXVpY2sgZGlhZ25vc3RpYyBvbiB0aGUgbG93ZXN0IGxldmVsIGlzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0ZHODAyMTEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvS2NvbmZpZz0xND1jb25maWcgV0VYVF9QUklWXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTYtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNzpjb25maWcgQ0ZHODAyMTFcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4LVx0dHJpc3RhdGUgXCYjMzQ7Y2ZnODAyMTEgLSB3aXJlbGVzcyBjb25maWd1cmF0aW9uIEFQSVwmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnPTM4PWNvbmZpZyBOTDgwMjExX1RFU1RNT0RFXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctNTEtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo1Mjpjb25maWcgQ0ZHODAyMTFfREVWRUxPUEVSX1dBUk5JTkdTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy01My1cdGJvb2wgXCYjMzQ7ZW5hYmxlIGRldmVsb3BlciB3YXJuaW5nc1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTY3LVxubmV0L3dpcmVsZXNzL0tjb25maWc6Njg6Y29uZmlnIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xubmV0L3dpcmVsZXNzL0tjb25maWctNjktXHRib29sIFwmIzM0O2NmZzgwMjExIGNlcnRpZmljYXRpb24gb251c1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTg4LVxubmV0L3dpcmVsZXNzL0tjb25maWc6ODk6Y29uZmlnIENGRzgwMjExX1JFUVVJUkVfU0lHTkVEX1JFR0RCXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy05MC1cdGJvb2wgXCYjMzQ7cmVxdWlyZSByZWdkYiBzaWduYXR1cmVcJiMzNDsgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctOTgtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo5OTpjb25maWcgQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMDAtXHRib29sIFwmIzM0O2FsbG93IHJlZ2RiIGtleXMgc2hpcHBlZCB3aXRoIHRoZSBrZXJuZWxcJiMzNDsgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTEwLVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTExOmNvbmZpZyBDRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVJcbm5ldC93aXJlbGVzcy9LY29uZmlnLTExMi1cdHN0cmluZyBcJiMzNDthZGRpdGlvbmFsIHJlZ2RiIGtleSBkaXJlY3RvcnlcJiMzNDsgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTIxLVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTIyOmNvbmZpZyBDRkc4MDIxMV9SRUdfQ0VMTFVMQVJfSElOVFNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEyMy1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgcmVndWxhdG9yeSBzdXBwb3J0IGZvciBjZWxsdWxhciBiYXNlIHN0YXRpb24gaGludHNcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMzQtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMzU6Y29uZmlnIENGRzgwMjExX1JFR19SRUxBWF9OT19JUlxubmV0L3dpcmVsZXNzL0tjb25maWctMTM2LVx0Ym9vbCBcJiMzNDtjZmc4MDIxMSBzdXBwb3J0IGZvciBOT19JUiByZWxheGF0aW9uXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTU4LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTU5OmNvbmZpZyBDRkc4MDIxMV9ERUZBVUxUX1BTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNjAtXHRib29sIFwmIzM0O2VuYWJsZSBwb3dlcnNhdmUgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2OC1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE2OTpjb25maWcgQ0ZHODAyMTFfREVCVUdGU1xubmV0L3dpcmVsZXNzL0tjb25maWctMTcwLVx0Ym9vbCBcJiMzNDtjZmc4MDIxMSBEZWJ1Z0ZTIGVudHJpZXNcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzYtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNzc6Y29uZmlnIENGRzgwMjExX0NSREFfU1VQUE9SVFxubmV0L3dpcmVsZXNzL0tjb25maWctMTc4LVx0Ym9vbCBcJiMzNDtzdXBwb3J0IENSREFcJiMzNDsgaWYgRVhQRVJUXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTg2LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTg3OmNvbmZpZyBDRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODgtXHRib29sIFwmIzM0O2NmZzgwMjExIHdpcmVsZXNzIGV4dGVuc2lvbnMgY29tcGF0aWJpbGl0eVwmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE5My1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE5NDpjb25maWcgQ0ZHODAyMTFfS1VOSVRfVEVTVFxubmV0L3dpcmVsZXNzL0tjb25maWctMTk1LVx0dHJpc3RhdGUgXCYjMzQ7S1VuaXQgdGVzdHMgZm9yIGNmZzgwMjExXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1ODEKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBXaUZpIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYENGRzgwMjExYCBzdHVmZiwgd2hpY2ggaXMgb2J2aW91c2x5IHRoZSBjb25maWd1cmF0aW9uIGludGVyZmFjZSBmb3IgY2ZnODAyMTEsIG1ha2VzIHNlbnNlLiBOb3csIGxldCYjMzk7cyBzZWUsIHRvIGdldCB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IEkgbmVlZCwgSSYjMzk7bGwgZGVmaW5pdGVseSB3YW50IHRvIGVuYWJsZSBgTUFDODAyMTFgLCBgTUFDODAyMTFfSFdTSU1gLCBhbmQgb2YgY291cnNlIGBDRkc4MDIxMWAuIFJpZ2h0LCAqdGhhdCogZHJpdmVyLCBgTUFDODAyMTFfSFdTSU1gLCBpcyB1c2VmdWwsIEkgc2hvdWxkIHJlbWVtYmVyIHRvIGluY2x1ZGUgdGhhdC4KCkkmIzM5O3ZlIGdvdCBhIG1lbnRhbCBjaGVja2xpc3Qgb2Yga2V5IGZ1bmN0aW9ucyBJJiMzOTttIGZvY3VzaW5nIG9uIOKAkyBgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwYCwgYGllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXRgLCBhbmQgYGllZWU4MDIxMV9tb25pdG9yX3NlbGVjdF9xdWV1ZWAuIEkgbmVlZCB0byBlbnN1cmUgdGhlc2UgYXJlIGNvbmZpZ3VyZWQgY29ycmVjdGx5LgoKTGV0IG1lIGp1c3QgcXVpY2tseSB2ZXJpZnkgaWYgYGllZWU4MDIxMV9tb25pdG9yX3NlbGVjdF9xdWV1ZWAgaXMgc3RhdGljLiBHb3R0YSBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZWVlODAyMTFfbW9uaXRvcl9zZWxlY3RfcXVldWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvaWZhY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvaWZhY2UuYz05NDE9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpZWVlODAyMTFfZGF0YWlmX29wcyA9IHtcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYy05NTAtXG5uZXQvbWFjODAyMTEvaWZhY2UuYzo5NTE6c3RhdGljIHUxNiBpZWVlODAyMTFfbW9uaXRvcl9zZWxlY3RfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTk1Mi1cdFx0XHRcdFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jPTk3OT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGllZWU4MDIxMV9tb25pdG9yaWZfb3BzID0ge1xuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTk4NS1cdC5uZG9fc2V0X21hY19hZGRyZXNzIFx0PSBpZWVlODAyMTFfY2hhbmdlX21hYyxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjk4NjpcdC5uZG9fc2VsZWN0X3F1ZXVlXHQ9IGllZWU4MDIxMV9tb25pdG9yX3NlbGVjdF9xdWV1ZSxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTk4Ny19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjMyMgoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQXNzZXNzaW5nIHRoZSBDb2RlYmFzZTogU3RhdGljIHZzLiBOb24tU3RhdGljIEZ1bmN0aW9ucyoqCgpSaWdodCwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoaXMgYGllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcGAgZnVuY3Rpb24uIFRoZSBjb2RlIHNlZW1zIHByZXR0eSBzdGFibGU7IGl0JiMzOTtzIHN0YXRpYyBpbiBuYXR1cmUsIHdoaWNoIG1ha2VzIGl0IGdvb2QgaW4gYSBsb3Qgb2Ygd2F5cy4gSG93ZXZlciwgd2hpbGUgc3RhdGljIGZ1bmN0aW9ucyBvZmZlciBiZW5lZml0cywgbXkgZ2VuZXJhbCBwcmVmZXJlbmNlIGlzIHRvIGF2b2lkIHRoZW0gd2hlbmV2ZXIgYSBub24tc3RhdGljIG9wdGlvbiBzZXJ2ZXMgdGhlIHNhbWUgcHVycG9zZSBhcyB0aGUgY29kZSBiZWNvbWVzIGxlc3MgZmxleGlibGUgYW5kIHJlLXVzYWJsZS4gTm93LCBJIHNlZSB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gaXNuJiMzOTt0IG1hcmtlZCBhcyBzdGF0aWMsIHdoaWNoIGlzIGEgZ29vZCB0aGluZyBhbmQgbWFrZXMgdGhpcyBjb2RlIG1vcmUgcmUtdXNhYmxlLiBHb29kLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8ga2VlcCB0aGF0IGluIG1pbmQgd2hlbiBkb2luZyBhIGNvZGUgcmV2aWV3LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvdHguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvdHguYz0yMDc5PXN0YXRpYyBib29sIGllZWU4MDIxMV92YWxpZGF0ZV9yYWRpb3RhcF9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbWFjODAyMTEvdHguYy0yMDk4LVxubmV0L21hYzgwMjExL3R4LmM6MjA5OTpib29sIGllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L21hYzgwMjExL3R4LmMtMjEwMC1cdFx0XHRcdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRyaW1fZmNzKVxuLS1cbm5ldC9tYWM4MDIxMS90eC5jPTIzMTg9bmV0ZGV2X3R4X3QgaWVlZTgwMjExX21vbml0b3Jfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTI0NzMtXHQgKi9cbm5ldC9tYWM4MDIxMS90eC5jOjI0NzQ6XHRpZiAoIWllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcChza2IsIGRldiwgdHJ1ZSkpXG5uZXQvbWFjODAyMTEvdHguYy0yNDc1LVx0XHRnb3RvIGZhaWxfcmN1O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg3MwoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgY29kZSBlbGVtZW50cywgdGhpbmtpbmcgdGhyb3VnaCB0aGVtIGFzIEkgd291bGQgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGVtLgoKKipBbmFseXppbmcgSUVFRSA4MDIuMTEgVFggUGF0aCoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgdGhpcyB3aXJlbGVzcyBkcml2ZXIsIGZvY3VzaW5nIG9uIHRoZSB0cmFuc21pdCBwYXRoLiBJIHNlZSB0d28ga2V5IGZ1bmN0aW9ucyBmbGFnZ2VkIGhlcmUuIFRoZSBmaXJzdCwgYGllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcGAsIGFuZCB0aGUgc2Vjb25kLCBgaWVlZTgwMjExX21vbml0b3Jfc3RhcnRfeG1pdGAuIFRoZSBmYWN0IHRoYXQgbmVpdGhlciBvZiB0aGVzZSBpcyBkZWNsYXJlZCBgc3RhdGljYCBpbW1lZGlhdGVseSBncmFicyBteSBhdHRlbnRpb24uIFRoYXQgaW1wbGllcyB0aGV5IGhhdmUgZXh0ZXJuYWwgbGlua2FnZS4gTm93LCBjb25zaWRlcmluZyB0aGUgY29udGV4dCBvZiBhIHdpcmVsZXNzIGRyaXZlciwgdGhhdCBjb3VsZCBtZWFuIGEgZmV3IHRoaW5ncywgYW5kIEkgbmVlZCB0byBleHBsb3JlIHRoZSBpbXBsaWNhdGlvbnMuCgpJZiB0aGV5IHdlcmVuJiMzOTt0IHN0YXRpYywgaXQgcG9pbnRzIHRvIHRoZXNlIGZ1bmN0aW9ucyBiZWluZyBwb3RlbnRpYWxseSBjYWxsYWJsZSBmcm9tIG1vZHVsZXMgb3Igb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCBvdXRzaWRlIHRoZSBpbW1lZGlhdGUgZHJpdmVyIGNvZGUgaXRzZWxmLiBgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwYCBpcyByZXNwb25zaWJsZSBmb3IgcGFyc2luZyBhIHJhZGlvdGFwIGhlYWRlciBvbiB0cmFuc21pdCwgd2hpY2ggc2VlbXMgcmVsYXRpdmVseSBzZWxmLWNvbnRhaW5lZCwgYnV0IHRoZSBmYWN0IHRoYXQgaXQgaXMgbm90IHN0YXRpYyB0ZWxscyBtZSB0aGF0IHRoZXJlIGlzIHByb2JhYmx5IGFuIGV4dGVybmFsIG1vZHVsZSB0aGF0IGlzIGNvbnN1bWluZyB0aGlzIHBhcnNlZCBpbmZvcm1hdGlvbi4gVGhpcyBhbHNvIGltcGxpZXMgaXQgaXMgcHJvYmFibHkgbm90IHNwZWNpZmljIHRvIGEgc2luZ2xlIGRldmljZSBvciBldmVuIGEgc2luZ2xlIGRyaXZlciBpbnN0YW5jZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhhdCBleHRlcm5hbCBjYWxsIGlzIGNvbWluZyBmcm9tLiBDb3VsZCBpdCBiZSBhIGdlbmVyaWMgbW9uaXRvcmluZyBzdWJzeXN0ZW0sIG1heWJlIHNvbWUgc29ydCBvZiBwYWNrZXQgY2FwdHVyZSB0b29sLCBvciBldmVuIGEgaGlnaGVyLWxldmVsIHdpcmVsZXNzIG1hbmFnZW1lbnQgY29tcG9uZW50PyBUaGlzIG5vbi1zdGF0aWMgZGVjbGFyYXRpb24gaXMgYSBjcml0aWNhbCBjbHVlIGFib3V0IGhvdyB0aGlzIGZ1bmN0aW9uIGludGVncmF0ZXMgd2l0aCB0aGUgc3lzdGVtLgoKYGllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXRgIGFsc28gYmVpbmcgbm9uLXN0YXRpYyBwcmVzZW50cyBhbm90aGVyIHNldCBvZiBpbnRyaWd1aW5nIHBvc3NpYmlsaXRpZXMuIGBzdGFydF94bWl0YCBpbXBsaWVzIHRoYXQgaXQgaXMgdGhlIGluaXRpYWwgY2FsbCB0byB0aGUgZHJpdmVyJiMzOTtzIHRyYW5zbWl0IGZ1bmN0aW9ucy4gSXQgaXMgcHJvYmFibHkgdGhlIGNhbGwgdGhhdCBpcyB1c2VkIGZyb20gdGhlIG5ldHdvcmsgc3RhY2sgdG8gcGxhY2UgYSBwYWNrZXQgb24gdGhlIGFpci4gU28gdGhlIGZhY3QgdGhhdCB0aGlzIGlzICpub3QqIGBzdGF0aWNgIGlzIGFsc28gaW1wb3J0YW50LiBUaGlzIHdvdWxkIHRlbGwgbWUgdGhhdCB0aGUgZHJpdmVyJiMzOTtzIGludGVyZmFjZSBpcyBleHBvc2VkLCBhbmQgcG90ZW50aWFsbHkgY2FsbGFibGUgZnJvbSBhIG1vbml0b3JpbmcgbW9kdWxlIG9yIGdlbmVyaWMgdHJhbnNtaXQgQVBJLiBTbywgaWYgSSYjMzk7bSBkZXNpZ25pbmcgYSBzeXN0ZW0gd2hlcmUgSSB3YW50IHRvIGhvb2sgaW4gYW5kIG1heWJlIG1hbmlwdWxhdGUgcGFja2V0cyBiZWZvcmUgdGhleSBnbyBvdXQsIG9yIGlmIEkgYW0gYnVpbGRpbmcgc29tZSBzb3J0IG9mIHZpcnR1YWwgaW50ZXJmYWNlLCB0aGlzIGZ1bmN0aW9uJiMzOTtzIHZpc2liaWxpdHkgYmVjb21lcyBoaWdobHkgdXNlZnVsLgoKSW4gc2hvcnQsIHRoZSBub24tc3RhdGljIG5hdHVyZSBvZiB0aGVzZSBmdW5jdGlvbnMgc3Ryb25nbHkgc3VnZ2VzdHMgbW9kdWxhcml0eSBhbmQgaW50ZXItY29tcG9uZW50IGNvbW11bmljYXRpb24gd2l0aGluIHRoaXMgd2lyZWxlc3Mgc3RhY2suIEl0IG1lYW5zIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbGluZyBjb250ZXh0cyBjYXJlZnVsbHkgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlciBhbmQgd2hvJiMzOTtzIGxldmVyYWdpbmcgdGhlc2UgaW50ZXJmYWNlcy4gVGhpcyBpcyB0aGUgZmlyc3QgcGxhY2UgSSYjMzk7ZCBzdGFydCBsb29raW5nIGF0IGhvdyB0byBleHRlbmQgb3IgY3VzdG9taXplIHRoZSB0cmFuc21pc3Npb24gcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWVlZTgwMjExX21vbml0b3Jfc3RhcnRfeG1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS90eC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS90eC5jPTIwOTk9Ym9vbCBpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbWFjODAyMTEvdHguYy0yMzE3LVxubmV0L21hYzgwMjExL3R4LmM6MjMxODpuZXRkZXZfdHhfdCBpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbWFjODAyMTEvdHguYy0yMzE5LVx0XHRcdFx0XHQgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2NjIKCQkJCQkJCW91dHB1dDogMTc4CgkJCQkJCQl0aG91Z2h0czogMTgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBwaW5wb2ludGVkIGBpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXBgIGFuZCBgaWVlZTgwMjExX21vbml0b3Jfc3RhcnRfeG1pdGAgYXMga2V5IEZvY3VzU3ltYm9scyBoZXJlLiBHb29kIHN0YXJ0LiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBsb2dpYyBvZiB0aGUgcGF0Y2ggaXMgYWJvdXQgdHJpbW1pbmcgdGhlIEZDUyB0cmFpbGVyIGZyb20gaW5qZWN0ZWQgcGFja2V0cy4gVGhhdCBkZWZpbml0ZWx5IHRvdWNoZXMgdGhlIGNvcmUgbWFjODAyMTEgc3RhY2ssIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWFjaGFiaWxpdHkgb2YgdGhpcyBjaGFuZ2UuIFNpbmNlIGl0IGlzIG9wdGlvbmFsLCBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIG9wdGlvbnMuCgpNeSBpbml0aWFsIGFzc3VtcHRpb24gaXMgY29uZmlybWVkOiB0aGlzIGZ1bmN0aW9uIGlzIHJlYWNoZWQgd2hlbiBpbmplY3RpbmcgcGFja2V0cyBpbnRvIGEgbWFjODAyMTEgbW9uaXRvciBpbnRlcmZhY2UuIEFuZCB0aGUgbWFjODAyMTFfaHdzaW0gZHJpdmVyIGlzIGEgcGVyZmVjdCB0b29sIHRvIHRlc3QgdGhpcyBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgTUFDODAyMTFgLCBgTUFDODAyMTFfSFdTSU1gLCBhbmQgYENGRzgwMjExYCB0byBmdWxseSBncmFzcCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgYW5kIGltcGxpY2F0aW9ucy4gSXTigJlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHJlcXVpcmVzIGRldGFpbGVkIHRlc3Rpbmcgd2l0aGluIHRoYXQgY29yZSBuZXR3b3JraW5nIHN0YWNrLgoKQWxyaWdodCwgSSB0aGluayBJJiMzOTt2ZSBnb3QgYSBoYW5kbGUgb24gdGhlIGVzc2VudGlhbCBjb21wb25lbnRzIGFuZCBkZXBlbmRlbmNpZXMuIFRpbWUgdG8gZm9ybWFsbHkgc2V0IHRoZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTFfSFdTSU0mIzM0OywKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXAmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX21vbml0b3Jfc3RhcnRfeG1pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwYCB0byBvcHRpb25hbGx5IHRyaW0gdGhlIEZDUyB0cmFpbGVyIGZyb20gaW5qZWN0ZWQgcGFja2V0cy4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgd2hlbiBpbmplY3RpbmcgcGFja2V0cyBpbnRvIGEgbWFjODAyMTEgbW9uaXRvciBpbnRlcmZhY2UsIHdoaWNoIGNhbiBiZSB0ZXN0ZWQgdXNpbmcgdGhlIG1hYzgwMjExX2h3c2ltIGRyaXZlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1hYzgwMjExIG5ldHdvcmtpbmcgc3RhY2suJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcGAgdG8gb3B0aW9uYWxseSB0cmltIHRoZSBGQ1MgdHJhaWxlciBmcm9tIGluamVjdGVkIHBhY2tldHMuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHdoZW4gaW5qZWN0aW5nIHBhY2tldHMgaW50byBhIG1hYzgwMjExIG1vbml0b3IgaW50ZXJmYWNlLCB3aGljaCBjYW4gYmUgdGVzdGVkIHVzaW5nIHRoZSBtYWM4MDIxMV9od3NpbSBkcml2ZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtYWM4MDIxMSBuZXR3b3JraW5nIHN0YWNrLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDozMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjMwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIHdoZXJlIGBza2JfdHJpbWAgd2FzIGluY29ycmVjdGx5IGNhbGxlZCBkdXJpbmcgYGllZWU4MDIxMV9tb25pdG9yX3NlbGVjdF9xdWV1ZWAgd2hlbiBwYXJzaW5nIHRoZSByYWRpb3RhcCBoZWFkZXIuIFRyaW1taW5nIHRoZSBGQ1MgdHJhaWxlciBhdCB0aGlzIHN0YWdlIHJlZHVjZWQgYHNrYi1cdTAwM2VsZW5gLCBjYXVzaW5nIHRoZSBzdWJzZXF1ZW50IGNhbGwgdG8gYGllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcGAgaW4gYGllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXRgIHRvIGZhaWwgaXRzIGxlbmd0aCBjaGVjayAoYHNrYi1cdTAwM2VsZW4gXHUwMDNjIChpdGVyYXRvci5fbWF4X2xlbmd0aCAmIzQzOyBGQ1NfTEVOKWApIGFuZCBkcm9wIHRoZSBwYWNrZXQuIFRoZSBmaXggaW50cm9kdWNlcyBhIGB0cmltX2Zjc2AgYm9vbGVhbiB0byBkZWZlciB0aGUgdHJpbW1pbmcgdW50aWwgYGllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXRgLlxuXG5UaGlzIGlzIGEgbG9naWMgYnVnIHJlbGF0ZWQgdG8gcGFja2V0IGxlbmd0aCBtYW5pcHVsYXRpb24gYW5kIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIGFjY2Vzc2VzLCBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCBmb3IgY2F0Y2hpbmcgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBpc3N1ZXMgaW4gdGhpcyBhcmVhLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmMDg4ODA5ZTljZWUxMDJkOWIzNTA3NTlkMzFkZGFkMDRkNDBhODNiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTggMDA6Mjg6NTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaAppbmRleCA0Zjk1ZGEwMjM3NDZmLi4wYmVjZDMzNjEwMTBmIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmgKQEAgLTc2MTUsMTEgJiM0Mzs3NjE1LDEyIEBAIGJvb2wgaWVlZTgwMjExX3R4X3ByZXBhcmVfc2tiKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogICoKICAqIEBza2I6IHBhY2tldCBpbmplY3RlZCBieSB1c2Vyc3BhY2UKICAqIEBkZXY6IHRoZSAmYW1wO3N0cnVjdCBkZXZpY2Ugb2YgdGhpcyA4MDIuMTEgZGV2aWNlCiYjNDM7ICogQHRyaW1fZmNzOiB0cmltIHRoZSBGQ1MgdHJhaWxlciB3aGVuIHByZXNlbnQ7IHZhbGlkYXRlIGl0IG90aGVyd2lzZQogICoKICAqIFJldHVybjogJXRydWUgaWYgdGhlIHJhZGlvdGFwIGhlYWRlciB3YXMgcGFyc2VkLCAlZmFsc2Ugb3RoZXJ3aXNlCiAgKi8KIGJvb2wgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwKHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwomIzQzOwkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB0cmltX2Zjcyk7CiAKIC8qKgogICogc3RydWN0IGllZWU4MDIxMV9ub2FfZGF0YSAtIGhvbGRzIHRlbXBvcmFyeSBkYXRhIGZvciB0cmFja2luZyBQMlAgTm9BIHN0YXRlCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWZhY2UuYyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jCmluZGV4IDQzNDYwYTcwNWE2YmQuLmZkYWM3MjljYTU4MGQgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9pZmFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jCkBAIC05NjQsNyAmIzQzOzk2NCw3IEBAIHN0YXRpYyB1MTYgaWVlZTgwMjExX21vbml0b3Jfc2VsZWN0X3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJLyogcmVzZXQgZmxhZ3MgYW5kIGluZm8gYmVmb3JlIHBhcnNpbmcgcmFkaW90YXAgaGVhZGVyICovCiAJbWVtc2V0KGluZm8sIDAsIHNpemVvZigqaW5mbykpOwogCi0JaWYgKCFpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXAoc2tiLCBkZXYpKQomIzQzOwlpZiAoIWllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcChza2IsIGRldiwgZmFsc2UpKQogCQlyZXR1cm4gMDsgLyogZG9lc24mIzM5O3QgbWF0dGVyLCBmcmFtZSB3aWxsIGJlIGRyb3BwZWQgKi8KIAogCWxlbl9ydGhkciA9IGllZWU4MDIxMV9nZXRfcmFkaW90YXBfbGVuKHNrYi0mZ3Q7ZGF0YSk7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdHguYyBiL25ldC9tYWM4MDIxMS90eC5jCmluZGV4IDkxYjE0MTEyZTI0ZjAuLjk3OTkwMDM5Njk1ZGIgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS90eC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS90eC5jCkBAIC0yMDk3LDcgJiM0MzsyMDk3LDcgQEAgc3RhdGljIGJvb2wgaWVlZTgwMjExX3ZhbGlkYXRlX3JhZGlvdGFwX2xlbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogfQogCiBib29sIGllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQomIzQzOwkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB0cmltX2ZjcykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtJmd0O2llZWU4MDIxMV9wdHIpOwogCXN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaXRlcmF0b3IgaXRlcmF0b3I7CkBAIC0yMTU0LDcgJiM0MzsyMTU0LDggQEAgYm9vbCBpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQlpZiAoc2tiLSZndDtsZW4gJmx0OyAoaXRlcmF0b3IuX21heF9sZW5ndGggJiM0MzsgRkNTX0xFTikpCiAJCQkJCXJldHVybiBmYWxzZTsKIAotCQkJCXNrYl90cmltKHNrYiwgc2tiLSZndDtsZW4gLSBGQ1NfTEVOKTsKJiM0MzsJCQkJaWYgKHRyaW1fZmNzKQomIzQzOwkJCQkJc2tiX3RyaW0oc2tiLCBza2ItJmd0O2xlbiAtIEZDU19MRU4pOwogCQkJfQogCQkJaWYgKCppdGVyYXRvci50aGlzX2FyZyAmYW1wOyBJRUVFODAyMTFfUkFESU9UQVBfRl9XRVApCiAJCQkJaW5mby0mZ3Q7ZmxhZ3MgJmFtcDs9IH5JRUVFODAyMTFfVFhfSU5URkxfRE9OVF9FTkNSWVBUOwpAQCAtMjQ3MCw3ICYjNDM7MjQ3MSw3IEBAIG5ldGRldl90eF90IGllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkgKiBzZWxlY3RlZCBjaGFuZGVmIGFib3ZlIHRvIGFjY3VyYXRlbHkgc2V0IGluamVjdGlvbiByYXRlcyBhbmQKIAkgKiByZXRyYW5zbWlzc2lvbnMuCiAJICovCi0JaWYgKCFpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXAoc2tiLCBkZXYpKQomIzQzOwlpZiAoIWllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcChza2IsIGRldiwgdHJ1ZSkpCiAJCWdvdG8gZmFpbF9yY3U7CiAKIAkvKiByZW1vdmUgdGhlIGluamVjdGlvbiByYWRpb3RhcCBoZWFkZXIgKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAwOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NDAKCQkJCQkJCW91dHB1dDogMjQ0CgkJCQkJCQl0aG91Z2h0czogMTIzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgRkNTIFRyaW1taW5nIExvZ2ljIGluIG1hYzgwMjExKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwYCBpbiBgbmV0L21hYzgwMjExYC4gVGhlIGNvcmUgY2hhbmdlIGludHJvZHVjZXMgYSBgdHJpbV9mY3NgIGFyZ3VtZW50IHRvIHRoYXQgZnVuY3Rpb24uIFRoZSBpbnRlbnRpb24gaXMgdG8gY29udHJvbCB3aGV0aGVyIHRoZSBGQ1MgdHJhaWxlciBpcyByZW1vdmVkIGZyb20gdGhlIHJhZGlvdGFwIGhlYWRlciBkdXJpbmcgcGFyc2luZy4gSW5pdGlhbGx5LCBJIHRob3VnaHQgdGhpcyBtaWdodCBiZSByZWxhdGVkIHRvIGEgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBpc3N1ZSwgcG90ZW50aWFsbHkgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSwgYnV0IGFmdGVyIHJldmlld2luZyB0aGUgY29kZSwgaXQmIzM5O3MgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBwcm9ibGVtLgoKU3BlY2lmaWNhbGx5LCB0aGUgY29kZSYjMzk7cyBiZWhhdmlvciBpbiBgaWVlZTgwMjExX21vbml0b3Jfc2VsZWN0X3F1ZXVlYCBhbmQgYGllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXRgIGNhdWdodCBteSBhdHRlbnRpb24uIFRoZSBmb3JtZXIgaXMgY2FsbGVkICpiZWZvcmUqIHRoZSBsYXR0ZXIsIGFuZCB0aGV5IGJvdGggcGFyc2UgdGhlIHJhZGlvdGFwIGhlYWRlci4gYGllZWU4MDIxMV9tb25pdG9yX3NlbGVjdF9xdWV1ZWAgbm93ICpkb2VzbiYjMzk7dCogdHJpbSB0aGUgRkNTIChiZWNhdXNlIGB0cmltX2Zjc2AgaXMgYGZhbHNlYCksIGFuZCBgaWVlZTgwMjExX21vbml0b3Jfc3RhcnRfeG1pdGAgKmRvZXMqIHRyaW0gdGhlIEZDUyAoYmVjYXVzZSBgdHJpbV9mY3NgIGlzIGB0cnVlYCkuIFRoaXMgaXMgdGhlIGZpeC4gVGhlIG9yaWdpbmFsIGxvZ2ljLCBJIHN1c3BlY3QsIHdhcyB0aGF0IGBpZWVlODAyMTFfbW9uaXRvcl9zZWxlY3RfcXVldWVgIHdhcyAqaW5jb3JyZWN0bHkqIHRyaW1taW5nIHRoZSBGQ1MsIGFuZCB0aGVuIGBpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0YCB3YXMgYmVpbmcgY2FsbGVkLCBhbHNvIGF0dGVtcHRpbmcgdG8gcGFyc2UgdGhlIGFscmVhZHktdHJpbW1lZCBoZWFkZXIuCgpMb29raW5nIGF0IHRoZSBjb2RlIHNuaXBwZXQsIGlmIGB0cmltX2Zjc2AgaXMgdHJ1ZSwgdGhlbiBgc2tiX3RyaW0oc2tiLCBza2ItJmd0O2xlbiAtIEZDU19MRU4pYCB3aWxsIGJlIGNhbGxlZC4gSWYgYSBwcmV2aW91cyBmdW5jdGlvbiBoYXMgYWxyZWFkeSB0cmltbWVkIHRoZSBGQ1MsIGFuZCB3ZSBjaGVjayB0aGUgbGVuZ3RoIGFmdGVyIGl0IGhhcyBiZWVuIHRyaW1tZWQsIHRoZSBjaGVjayBgaWYgKHNrYi0mZ3Q7bGVuICZsdDsgKGl0ZXJhdG9yLl9tYXhfbGVuZ3RoICYjNDM7IEZDU19MRU4pKWAgaXMgZ29pbmcgdG8gZmFpbCwgbGlrZWx5IHJlc3VsdGluZyBpbiBhIHBhY2tldCBiZWluZyBkcm9wcGVkLiBUaGlzIGlzIHRoZSBwcmVjaXNlIHNjZW5hcmlvIHdlIGFyZSB0cnlpbmcgdG8gYXZvaWQuCgpUaGUgaXNzdWUgaXMgdGhpcyBjaGVjayBpcyB3aGF0IGRldGVybWluZXMgdGhlIHByb2JsZW0uIFRoZSBjb3JlIGJ1ZyBoZXJlIGlzbiYjMzk7dCByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIEtNU0FOLiBJdCBpcyBhIGxvZ2ljIGVycm9yOiBhbiBpbmNvcnJlY3Qgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBpbnZvbHZpbmcgYHNrYl90cmltYCBhbmQgc3Vic2VxdWVudCBsZW5ndGggY2hlY2tzLiBUaGUgbGVuZ3RoIGlzIGJlaW5nIGFsdGVyZWQgaW4gYW4gdW5leHBlY3RlZCB3YXksIGNhdXNpbmcgYSBwYWNrZXQgZHJvcCBiZWNhdXNlIHRoZSByYWRpb3RhcCBoZWFkZXIgcGFyc2luZyBmYWlscy4gSXQgbWVhbnMgZnJhbWVzIHdpdGggRkNTIGFyZSBiZWluZyBkcm9wcGVkIGR1ZSB0byBhIG1pc21hdGNoZWQgZXhwZWN0YXRpb24gb2YgdGhlIHNrYiBsZW5ndGguIFRoZXJlZm9yZSwgdGhpcyBpcyBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuIFRoZSBidWcgaXMgYWJvdXQgcGFja2V0IGRyb3BzIGNhdXNlZCBieSBhbiBpbmNvcnJlY3QgbGVuZ3RoIGNoZWNrIGFmdGVyIEZDUyB0cmltbWluZy4KClRoZXJlZm9yZSwgTmVlZHNLTVNBTiBzaG91bGQgYmUgc2V0IHRvIGZhbHNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMDozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBgc2tiX3RyaW1gIHdhcyBpbmNvcnJlY3RseSBjYWxsZWQgZHVyaW5nIGBpZWVlODAyMTFfbW9uaXRvcl9zZWxlY3RfcXVldWVgIHdoZW4gcGFyc2luZyB0aGUgcmFkaW90YXAgaGVhZGVyLiBUcmltbWluZyB0aGUgRkNTIHRyYWlsZXIgYXQgdGhpcyBzdGFnZSByZWR1Y2VkIGBza2ItXHUwMDNlbGVuYCwgY2F1c2luZyB0aGUgc3Vic2VxdWVudCBjYWxsIHRvIGBpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXBgIGluIGBpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0YCB0byBmYWlsIGl0cyBsZW5ndGggY2hlY2sgKGBza2ItXHUwMDNlbGVuIFx1MDAzYyAoaXRlcmF0b3IuX21heF9sZW5ndGggJiM0MzsgRkNTX0xFTilgKSBhbmQgZHJvcCB0aGUgcGFja2V0LiBUaGUgZml4IGludHJvZHVjZXMgYSBgdHJpbV9mY3NgIGJvb2xlYW4gdG8gZGVmZXIgdGhlIHRyaW1taW5nIHVudGlsIGBpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0YC5cblxuVGhpcyBpcyBhIGxvZ2ljIGJ1ZyByZWxhdGVkIHRvIHBhY2tldCBsZW5ndGggbWFuaXB1bGF0aW9uIGFuZCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBhY2Nlc3Nlcywgb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgZm9yIGNhdGNoaW5nIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgaXNzdWVzIGluIHRoaXMgYXJlYS4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIHdoZXJlIGBza2JfdHJpbWAgd2FzIGluY29ycmVjdGx5IGNhbGxlZCBkdXJpbmcgYGllZWU4MDIxMV9tb25pdG9yX3NlbGVjdF9xdWV1ZWAgd2hlbiBwYXJzaW5nIHRoZSByYWRpb3RhcCBoZWFkZXIuIFRyaW1taW5nIHRoZSBGQ1MgdHJhaWxlciBhdCB0aGlzIHN0YWdlIHJlZHVjZWQgYHNrYi1cdTAwM2VsZW5gLCBjYXVzaW5nIHRoZSBzdWJzZXF1ZW50IGNhbGwgdG8gYGllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcGAgaW4gYGllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXRgIHRvIGZhaWwgaXRzIGxlbmd0aCBjaGVjayAoYHNrYi1cdTAwM2VsZW4gXHUwMDNjIChpdGVyYXRvci5fbWF4X2xlbmd0aCAmIzQzOyBGQ1NfTEVOKWApIGFuZCBkcm9wIHRoZSBwYWNrZXQuIFRoZSBmaXggaW50cm9kdWNlcyBhIGB0cmltX2Zjc2AgYm9vbGVhbiB0byBkZWZlciB0aGUgdHJpbW1pbmcgdW50aWwgYGllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXRgLlxuXG5UaGlzIGlzIGEgbG9naWMgYnVnIHJlbGF0ZWQgdG8gcGFja2V0IGxlbmd0aCBtYW5pcHVsYXRpb24gYW5kIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIGFjY2Vzc2VzLCBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCBmb3IgY2F0Y2hpbmcgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBpc3N1ZXMgaW4gdGhpcyBhcmVhLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyOTowMC4wODYwMTgwNjZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTMzNTU1NjM2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIixcbiAgICBcIkNGRzgwMjExXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwXCIsXG4gICAgXCJpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBgc2tiX3RyaW1gIHdhcyBpbmNvcnJlY3RseSBjYWxsZWQgZHVyaW5nIGBpZWVlODAyMTFfbW9uaXRvcl9zZWxlY3RfcXVldWVgIHdoZW4gcGFyc2luZyB0aGUgcmFkaW90YXAgaGVhZGVyLiBUcmltbWluZyB0aGUgRkNTIHRyYWlsZXIgYXQgdGhpcyBzdGFnZSByZWR1Y2VkIGBza2ItXFx1MDAzZWxlbmAsIGNhdXNpbmcgdGhlIHN1YnNlcXVlbnQgY2FsbCB0byBgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwYCBpbiBgaWVlZTgwMjExX21vbml0b3Jfc3RhcnRfeG1pdGAgdG8gZmFpbCBpdHMgbGVuZ3RoIGNoZWNrIChgc2tiLVxcdTAwM2VsZW4gXFx1MDAzYyAoaXRlcmF0b3IuX21heF9sZW5ndGggKyBGQ1NfTEVOKWApIGFuZCBkcm9wIHRoZSBwYWNrZXQuIFRoZSBmaXggaW50cm9kdWNlcyBhIGB0cmltX2Zjc2AgYm9vbGVhbiB0byBkZWZlciB0aGUgdHJpbW1pbmcgdW50aWwgYGllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXRgLlxcblxcblRoaXMgaXMgYSBsb2dpYyBidWcgcmVsYXRlZCB0byBwYWNrZXQgbGVuZ3RoIG1hbmlwdWxhdGlvbiBhbmQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgYWNjZXNzZXMsIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IGZvciBjYXRjaGluZyBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGlzc3VlcyBpbiB0aGlzIGFyZWEuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcGAgdG8gb3B0aW9uYWxseSB0cmltIHRoZSBGQ1MgdHJhaWxlciBmcm9tIGluamVjdGVkIHBhY2tldHMuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHdoZW4gaW5qZWN0aW5nIHBhY2tldHMgaW50byBhIG1hYzgwMjExIG1vbml0b3IgaW50ZXJmYWNlLCB3aGljaCBjYW4gYmUgdGVzdGVkIHVzaW5nIHRoZSBtYWM4MDIxMV9od3NpbSBkcml2ZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtYWM4MDIxMSBuZXR3b3JraW5nIHN0YWNrLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyOTowMC4wODYwMjM4NTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDY3MTg1MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmMDg4ODA5ZTljZWUxMDJkOWIzNTA3NTlkMzFkZGFkMDRkNDBhODNiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDE4IDAwOjI4OjU3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmggYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oXFxuaW5kZXggNGY5NWRhMDIzNzQ2Zi4uMGJlY2QzMzYxMDEwZiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oXFxuKysrIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaFxcbkBAIC03NjE1LDExICs3NjE1LDEyIEBAIGJvb2wgaWVlZTgwMjExX3R4X3ByZXBhcmVfc2tiKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbiAgKlxcbiAgKiBAc2tiOiBwYWNrZXQgaW5qZWN0ZWQgYnkgdXNlcnNwYWNlXFxuICAqIEBkZXY6IHRoZSBcXHUwMDI2c3RydWN0IGRldmljZSBvZiB0aGlzIDgwMi4xMSBkZXZpY2VcXG4rICogQHRyaW1fZmNzOiB0cmltIHRoZSBGQ1MgdHJhaWxlciB3aGVuIHByZXNlbnQ7IHZhbGlkYXRlIGl0IG90aGVyd2lzZVxcbiAgKlxcbiAgKiBSZXR1cm46ICV0cnVlIGlmIHRoZSByYWRpb3RhcCBoZWFkZXIgd2FzIHBhcnNlZCwgJWZhbHNlIG90aGVyd2lzZVxcbiAgKi9cXG4gYm9vbCBpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tXFx0XFx0XFx0XFx0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbitcXHRcXHRcXHRcXHQgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB0cmltX2Zjcyk7XFxuIFxcbiAvKipcXG4gICogc3RydWN0IGllZWU4MDIxMV9ub2FfZGF0YSAtIGhvbGRzIHRlbXBvcmFyeSBkYXRhIGZvciB0cmFja2luZyBQMlAgTm9BIHN0YXRlXFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZmFjZS5jIGIvbmV0L21hYzgwMjExL2lmYWNlLmNcXG5pbmRleCA0MzQ2MGE3MDVhNmJkLi5mZGFjNzI5Y2E1ODBkIDEwMDY0NFxcbi0tLSBhL25ldC9tYWM4MDIxMS9pZmFjZS5jXFxuKysrIGIvbmV0L21hYzgwMjExL2lmYWNlLmNcXG5AQCAtOTY0LDcgKzk2NCw3IEBAIHN0YXRpYyB1MTYgaWVlZTgwMjExX21vbml0b3Jfc2VsZWN0X3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdC8qIHJlc2V0IGZsYWdzIGFuZCBpbmZvIGJlZm9yZSBwYXJzaW5nIHJhZGlvdGFwIGhlYWRlciAqL1xcbiBcXHRtZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7XFxuIFxcbi1cXHRpZiAoIWllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcChza2IsIGRldikpXFxuK1xcdGlmICghaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwKHNrYiwgZGV2LCBmYWxzZSkpXFxuIFxcdFxcdHJldHVybiAwOyAvKiBkb2Vzbid0IG1hdHRlciwgZnJhbWUgd2lsbCBiZSBkcm9wcGVkICovXFxuIFxcbiBcXHRsZW5fcnRoZHIgPSBpZWVlODAyMTFfZ2V0X3JhZGlvdGFwX2xlbihza2ItXFx1MDAzZWRhdGEpO1xcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdHguYyBiL25ldC9tYWM4MDIxMS90eC5jXFxuaW5kZXggOTFiMTQxMTJlMjRmMC4uOTc5OTAwMzk2OTVkYiAxMDA2NDRcXG4tLS0gYS9uZXQvbWFjODAyMTEvdHguY1xcbisrKyBiL25ldC9tYWM4MDIxMS90eC5jXFxuQEAgLTIwOTcsNyArMjA5Nyw3IEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV92YWxpZGF0ZV9yYWRpb3RhcF9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gfVxcbiBcXG4gYm9vbCBpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tXFx0XFx0XFx0XFx0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRyaW1fZmNzKVxcbiB7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi1cXHUwMDNlaWVlZTgwMjExX3B0cik7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaXRlcmF0b3IgaXRlcmF0b3I7XFxuQEAgLTIxNTQsNyArMjE1NCw4IEBAIGJvb2wgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwKHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdFxcdGlmIChza2ItXFx1MDAzZWxlbiBcXHUwMDNjIChpdGVyYXRvci5fbWF4X2xlbmd0aCArIEZDU19MRU4pKVxcbiBcXHRcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHRcXHRcXHRcXHRza2JfdHJpbShza2IsIHNrYi1cXHUwMDNlbGVuIC0gRkNTX0xFTik7XFxuK1xcdFxcdFxcdFxcdGlmICh0cmltX2ZjcylcXG4rXFx0XFx0XFx0XFx0XFx0c2tiX3RyaW0oc2tiLCBza2ItXFx1MDAzZWxlbiAtIEZDU19MRU4pO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGlmICgqaXRlcmF0b3IudGhpc19hcmcgXFx1MDAyNiBJRUVFODAyMTFfUkFESU9UQVBfRl9XRVApXFxuIFxcdFxcdFxcdFxcdGluZm8tXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5JRUVFODAyMTFfVFhfSU5URkxfRE9OVF9FTkNSWVBUO1xcbkBAIC0yNDcwLDcgKzI0NzEsNyBAQCBuZXRkZXZfdHhfdCBpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdCAqIHNlbGVjdGVkIGNoYW5kZWYgYWJvdmUgdG8gYWNjdXJhdGVseSBzZXQgaW5qZWN0aW9uIHJhdGVzIGFuZFxcbiBcXHQgKiByZXRyYW5zbWlzc2lvbnMuXFxuIFxcdCAqL1xcbi1cXHRpZiAoIWllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcChza2IsIGRldikpXFxuK1xcdGlmICghaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwKHNrYiwgZGV2LCB0cnVlKSlcXG4gXFx0XFx0Z290byBmYWlsX3JjdTtcXG4gXFxuIFxcdC8qIHJlbW92ZSB0aGUgaW5qZWN0aW9uIHJhZGlvdGFwIGhlYWRlciAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyOTowMS42OTM0OTEzNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjYyOTE3MTcxMDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMV9IV1NJTVwiLFxuICAgIFwiQ0ZHODAyMTFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXBcIixcbiAgICBcImllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwYCB0byBvcHRpb25hbGx5IHRyaW0gdGhlIEZDUyB0cmFpbGVyIGZyb20gaW5qZWN0ZWQgcGFja2V0cy4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgd2hlbiBpbmplY3RpbmcgcGFja2V0cyBpbnRvIGEgbWFjODAyMTEgbW9uaXRvciBpbnRlcmZhY2UsIHdoaWNoIGNhbiBiZSB0ZXN0ZWQgdXNpbmcgdGhlIG1hYzgwMjExX2h3c2ltIGRyaXZlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1hYzgwMjExIG5ldHdvcmtpbmcgc3RhY2suXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGYwODg4MDllOWNlZTEwMmQ5YjM1MDc1OWQzMWRkYWQwNGQ0MGE4M2JcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAwMDoyODo1NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmggYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oXG5pbmRleCA0Zjk1ZGEwMjM3NDZmLi4wYmVjZDMzNjEwMTBmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbWFjODAyMTEuaFxuKysrIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaFxuQEAgLTc2MTUsMTEgKzc2MTUsMTIgQEAgYm9vbCBpZWVlODAyMTFfdHhfcHJlcGFyZV9za2Ioc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gICpcbiAgKiBAc2tiOiBwYWNrZXQgaW5qZWN0ZWQgYnkgdXNlcnNwYWNlXG4gICogQGRldjogdGhlIFx1MDAyNnN0cnVjdCBkZXZpY2Ugb2YgdGhpcyA4MDIuMTEgZGV2aWNlXG4rICogQHRyaW1fZmNzOiB0cmltIHRoZSBGQ1MgdHJhaWxlciB3aGVuIHByZXNlbnQ7IHZhbGlkYXRlIGl0IG90aGVyd2lzZVxuICAqXG4gICogUmV0dXJuOiAldHJ1ZSBpZiB0aGUgcmFkaW90YXAgaGVhZGVyIHdhcyBwYXJzZWQsICVmYWxzZSBvdGhlcndpc2VcbiAgKi9cbiBib29sIGllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuK1x0XHRcdFx0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgdHJpbV9mY3MpO1xuIFxuIC8qKlxuICAqIHN0cnVjdCBpZWVlODAyMTFfbm9hX2RhdGEgLSBob2xkcyB0ZW1wb3JhcnkgZGF0YSBmb3IgdHJhY2tpbmcgUDJQIE5vQSBzdGF0ZVxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZmFjZS5jIGIvbmV0L21hYzgwMjExL2lmYWNlLmNcbmluZGV4IDQzNDYwYTcwNWE2YmQuLmZkYWM3MjljYTU4MGQgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvaWZhY2UuY1xuKysrIGIvbmV0L21hYzgwMjExL2lmYWNlLmNcbkBAIC05NjQsNyArOTY0LDcgQEAgc3RhdGljIHUxNiBpZWVlODAyMTFfbW9uaXRvcl9zZWxlY3RfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdC8qIHJlc2V0IGZsYWdzIGFuZCBpbmZvIGJlZm9yZSBwYXJzaW5nIHJhZGlvdGFwIGhlYWRlciAqL1xuIFx0bWVtc2V0KGluZm8sIDAsIHNpemVvZigqaW5mbykpO1xuIFxuLVx0aWYgKCFpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXAoc2tiLCBkZXYpKVxuK1x0aWYgKCFpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXAoc2tiLCBkZXYsIGZhbHNlKSlcbiBcdFx0cmV0dXJuIDA7IC8qIGRvZXNuJ3QgbWF0dGVyLCBmcmFtZSB3aWxsIGJlIGRyb3BwZWQgKi9cbiBcbiBcdGxlbl9ydGhkciA9IGllZWU4MDIxMV9nZXRfcmFkaW90YXBfbGVuKHNrYi1cdTAwM2VkYXRhKTtcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdHguYyBiL25ldC9tYWM4MDIxMS90eC5jXG5pbmRleCA5MWIxNDExMmUyNGYwLi45Nzk5MDAzOTY5NWRiIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL3R4LmNcbisrKyBiL25ldC9tYWM4MDIxMS90eC5jXG5AQCAtMjA5Nyw3ICsyMDk3LDcgQEAgc3RhdGljIGJvb2wgaWVlZTgwMjExX3ZhbGlkYXRlX3JhZGlvdGFwX2xlbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIH1cbiBcbiBib29sIGllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4rXHRcdFx0XHQgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB0cmltX2ZjcylcbiB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtXHUwMDNlaWVlZTgwMjExX3B0cik7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2l0ZXJhdG9yIGl0ZXJhdG9yO1xuQEAgLTIxNTQsNyArMjE1NCw4IEBAIGJvb2wgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2MgKGl0ZXJhdG9yLl9tYXhfbGVuZ3RoICsgRkNTX0xFTikpXG4gXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdFx0XHRcdHNrYl90cmltKHNrYiwgc2tiLVx1MDAzZWxlbiAtIEZDU19MRU4pO1xuK1x0XHRcdFx0aWYgKHRyaW1fZmNzKVxuK1x0XHRcdFx0XHRza2JfdHJpbShza2IsIHNrYi1cdTAwM2VsZW4gLSBGQ1NfTEVOKTtcbiBcdFx0XHR9XG4gXHRcdFx0aWYgKCppdGVyYXRvci50aGlzX2FyZyBcdTAwMjYgSUVFRTgwMjExX1JBRElPVEFQX0ZfV0VQKVxuIFx0XHRcdFx0aW5mby1cdTAwM2VmbGFncyBcdTAwMjY9IH5JRUVFODAyMTFfVFhfSU5URkxfRE9OVF9FTkNSWVBUO1xuQEAgLTI0NzAsNyArMjQ3MSw3IEBAIG5ldGRldl90eF90IGllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdCAqIHNlbGVjdGVkIGNoYW5kZWYgYWJvdmUgdG8gYWNjdXJhdGVseSBzZXQgaW5qZWN0aW9uIHJhdGVzIGFuZFxuIFx0ICogcmV0cmFuc21pc3Npb25zLlxuIFx0ICovXG4tXHRpZiAoIWllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcChza2IsIGRldikpXG4rXHRpZiAoIWllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcChza2IsIGRldiwgdHJ1ZSkpXG4gXHRcdGdvdG8gZmFpbF9yY3U7XG4gXG4gXHQvKiByZW1vdmUgdGhlIGluamVjdGlvbiByYWRpb3RhcCBoZWFkZXIgKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI5OjAxLjY5MzQ5MzE2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTYxMzA2ODE1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBtYWM4MDIxMSBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcGAgaW4gYG5ldC9tYWM4MDIxMS90eC5jYCBhbmQgYG5ldC9tYWM4MDIxMS9pZmFjZS5jYC4gSXQncyBhZGRpbmcgYSBgdHJpbV9mY3NgIGJvb2xlYW4gdG8gdGhhdCBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgd2UgY2FuIG5vdyBvcHRpb25hbGx5IHN0cmlwIHRoZSBGcmFtZSBDaGVjayBTZXF1ZW5jZSAoRkNTKSB0cmFpbGVyLiBUaGF0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gbWFjODAyMTEsIHdoaWNoIGlzLCBvZiBjb3Vyc2UsIHRoZSBoZWFydCBvZiB0aGUgODAyLjExIGltcGxlbWVudGF0aW9uIGluIHRoZSBrZXJuZWwuIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgd2UgY2FuIGZ1enogdXNpbmcgYG1hYzgwMjExX2h3c2ltYCwgd2hpY2ggbWFrZXMgdGhpcyBpbnRlcmVzdGluZy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGZ1bmN0aW9uJ3MgY2FsbGVycyB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuIExldCdzIHNlZS4uLiB0aGUgY29kZSBzaG93cyB0aGF0IGBpZWVlODAyMTFfbW9uaXRvcl9zZWxlY3RfcXVldWVgIGluIGBuZXQvbWFjODAyMTEvaWZhY2UuY2AgYW5kIGBpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0YCBpbiBgbmV0L21hYzgwMjExL3R4LmNgIGNhbGwgaXQuIE5vdywgdGhvc2UgYXJlIGJvdGggaW50ZXJlc3RpbmcgY2FsbCBzaXRlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXnigJlyZSB1c2luZyB0aGUgcmFkaW90YXAgZGF0YSwgYW5kIGhvdyB0aGlzIGB0cmltX2Zjc2AgbWlnaHQgYWZmZWN0IHRoZW0uIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgY29udGV4dCBvZiB0aG9zZSBmdW5jdGlvbnMgdG8gc2VlIGhvdyB0aGV5J2xsIGhhbmRsZSB0aGUgRkNTIHRyaW1taW5nIGFuZCBpZiB0aGlzIGludHJvZHVjZXMgYW55IHN1YnRsZSBidWdzLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgQ09ORklHX01BQzgwMjExYCBpcyB1c3VhbGx5IHRoZSBvbmUsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQncyBjb3JyZWN0IGZvciB0aGlzIHBhcnRpY3VsYXIgYnVpbGQgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk0MywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI5OjA3LjMwNjU2NDMyN1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjU4NDQxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUFDODAyMTFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyOmNvbmZpZyBNQUM4MDIxMVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgSUVFRSA4MDIuMTEgTmV0d29ya2luZyBTdGFjayAobWFjODAyMTEpXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9MTk9aWYgTUFDODAyMTEgIT0gblxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIxOmNvbmZpZyBNQUM4MDIxMV9IQVNfUkNcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMi1cXHRib29sXFxubmV0L21hYzgwMjExL0tjb25maWctMjMtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjQ6Y29uZmlnIE1BQzgwMjExX1JDX01JTlNUUkVMXFxubmV0L21hYzgwMjExL0tjb25maWctMjUtXFx0Ym9vbCBcXFwiTWluc3RyZWxcXFwiIGlmIEVYUEVSVFxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9MzE9Y2hvaWNlXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy00MC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo0MTpjb25maWcgTUFDODAyMTFfUkNfREVGQVVMVF9NSU5TVFJFTFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQyLVxcdGJvb2wgXFxcIk1pbnN0cmVsXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9NDg9ZW5kY2hvaWNlXFxubmV0L21hYzgwMjExL0tjb25maWctNDktXFxubmV0L21hYzgwMjExL0tjb25maWc6NTA6Y29uZmlnIE1BQzgwMjExX1JDX0RFRkFVTFRcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy01MS1cXHRzdHJpbmdcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTU3PWNvbW1lbnQgXFxcIlNvbWUgd2lyZWxlc3MgZHJpdmVycyByZXF1aXJlIGEgcmF0ZSBjb250cm9sIGFsZ29yaXRobVxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTU5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjYwOmNvbmZpZyBNQUM4MDIxMV9LVU5JVF9URVNUXFxubmV0L21hYzgwMjExL0tjb25maWctNjEtXFx0dHJpc3RhdGUgXFxcIktVbml0IHRlc3RzIGZvciBtYWM4MDIxMVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctNjktXFxubmV0L21hYzgwMjExL0tjb25maWc6NzA6Y29uZmlnIE1BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy03MS1cXHRib29sIFxcXCJFbmFibGUgbWFjODAyMTEgbWVzaCBuZXR3b3JraW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy03OC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo3OTpjb25maWcgTUFDODAyMTFfTEVEU1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTgwLVxcdGJvb2wgXFxcIkVuYWJsZSBMRUQgdHJpZ2dlcnNcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04Ny1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo4ODpjb25maWcgTUFDODAyMTFfREVCVUdGU1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTg5LVxcdGJvb2wgXFxcIkV4cG9ydCBtYWM4MDIxMSBpbnRlcm5hbHMgaW4gRGVidWdGU1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTk2LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjk3OmNvbmZpZyBNQUM4MDIxMV9NRVNTQUdFX1RSQUNJTkdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05OC1cXHRib29sIFxcXCJUcmFjZSBhbGwgbWFjODAyMTEgZGVidWcgbWVzc2FnZXNcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMDktXFxubmV0L21hYzgwMjExL0tjb25maWc6MTEwOm1lbnVjb25maWcgTUFDODAyMTFfREVCVUdfTUVOVVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExMS1cXHRib29sIFxcXCJTZWxlY3QgbWFjODAyMTEgZGVidWdnaW5nIGZlYXR1cmVzXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTE1LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjExNjpjb25maWcgTUFDODAyMTFfTk9JTkxJTkVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTctXFx0Ym9vbCBcXFwiRG8gbm90IGlubGluZSBUWC9SWCBoYW5kbGVyc1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEzMS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxMzI6Y29uZmlnIE1BQzgwMjExX1ZFUkJPU0VfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMzMtXFx0Ym9vbCBcXFwiVmVyYm9zZSBkZWJ1Z2dpbmcgb3V0cHV0XFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTQyLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE0Mzpjb25maWcgTUFDODAyMTFfTUxNRV9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE0NC1cXHRib29sIFxcXCJWZXJib3NlIG1hbmFnZWQgTUxNRSBvdXRwdXRcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNTMtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTU0OmNvbmZpZyBNQUM4MDIxMV9TVEFfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNTUtXFx0Ym9vbCBcXFwiVmVyYm9zZSBzdGF0aW9uIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE2Mi1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNjM6Y29uZmlnIE1BQzgwMjExX0hUX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTY0LVxcdGJvb2wgXFxcIlZlcmJvc2UgSFQgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTc0LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE3NTpjb25maWcgTUFDODAyMTFfT0NCX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTc2LVxcdGJvb2wgXFxcIlZlcmJvc2UgT0NCIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE4NS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxODY6Y29uZmlnIE1BQzgwMjExX0lCU1NfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xODctXFx0Ym9vbCBcXFwiVmVyYm9zZSBJQlNTIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE5Ni1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxOTc6Y29uZmlnIE1BQzgwMjExX1BTX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTk4LVxcdGJvb2wgXFxcIlZlcmJvc2UgcG93ZXJzYXZlIG1vZGUgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjA4LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIwOTpjb25maWcgTUFDODAyMTFfTVBMX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjEwLVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBwZWVyIGxpbmsgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjIxLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIyMjpjb25maWcgTUFDODAyMTFfTVBBVEhfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMjMtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIHBhdGggZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjM0LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIzNTpjb25maWcgTUFDODAyMTFfTUhXTVBfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzYtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIEhXTVAgcm91dGluZyBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNDctXFxubmV0L21hYzgwMjExL0tjb25maWc6MjQ4OmNvbmZpZyBNQUM4MDIxMV9NRVNIX1NZTkNfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNDktXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIHN5bmNocm9uaXphdGlvbiBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNTgtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjU5OmNvbmZpZyBNQUM4MDIxMV9NRVNIX0NTQV9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI2MC1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggY2hhbm5lbCBzd2l0Y2ggZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjY5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI3MDpjb25maWcgTUFDODAyMTFfTUVTSF9QU19ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI3MS1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggcG93ZXJzYXZlIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI4MC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyODE6Y29uZmlnIE1BQzgwMjExX1RETFNfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yODItXFx0Ym9vbCBcXFwiVmVyYm9zZSBURExTIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5Mi1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyOTM6Y29uZmlnIE1BQzgwMjExX0RFQlVHX0NPVU5URVJTXFxubmV0L21hYzgwMjExL0tjb25maWctMjk0LVxcdGJvb2wgXFxcIkV4dHJhIHN0YXRpc3RpY3MgZm9yIFRYL1JYIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMwNy1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzozMDg6Y29uZmlnIE1BQzgwMjExX1NUQV9IQVNIX01BWF9TSVpFXFxubmV0L21hYzgwMjExL0tjb25maWctMzA5LVxcdGludCBcXFwiU3RhdGlvbiBoYXNoIHRhYmxlIG1heGltdW0gc2l6ZVxcXCIgaWYgTUFDODAyMTFfREVCVUdfTUVOVVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyOTowNy4zOTMxNTMwOTlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDgyODAwOTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIE1BQzgwMjExIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gd2UncmUgZGVhbGluZyB3aXRoIGEgYE1BQzgwMjExYCBjb25maWd1cmF0aW9uLiBTdGFuZGFyZCBzdHVmZi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgd2hlcmUgYXJlIHdlIGhlYWRpbmcgd2l0aCB0aGlzP1wiIFRoZSBuYXR1cmFsIG5leHQgcXVlc3Rpb24gaXMgYWx3YXlzLCAqZG8gd2UgbmVlZCogYE1BQzgwMjExX0hXU0lNYD8gVGhlIGltcGxpY2F0aW9uIGlzIHRoYXQgd2Ugd2FudCB0byBlbnN1cmUgaGFyZHdhcmUgc2ltdWxhdGlvbiBpcyBhcHByb3ByaWF0ZWx5IGhhbmRsZWQsIG9yIGRpc2FibGVkIHdoZXJlIG5vdCBuZWVkZWQuIFdlIGFyZSBsb29raW5nIHRvIHJlZHVjZSBjb21wbGV4aXR5IG9mIHRoZSBidWlsZCBhbmQgZW5zdXJlIHRoYXQgYW55IGhhcmR3YXJlIHNwZWNpZmljIGRlcGVuZGVuY2llcyBhcmUgaW5jbHVkZWQgd2hlbiBhcHByb3ByaWF0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTg0NCwiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI5OjExLjg3NTk1ODE3NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTAzNzA2MDUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNQUM4MDIxMV9IV1NJTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYWM4MDIxMV9od3NpbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyOToxMS45ODYzNDEzMzFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzQ4NDU2MzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgV2lyZWxlc3MgRHJpdmVyIExhbmRzY2FwZSoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIHRoaW5raW5nIEkgbmVlZCB0byBmaW5kIHRoZSBzcGVjaWZpYyBrZXJuZWwgY29kZSByZWxhdGVkIHRvIHRoZSBNQUM4MDIxMSBoYXJkd2FyZSBzaW11bGF0b3IsIGBNQUM4MDIxMV9IV1NJTWAuIEkga25vdyBJJ3ZlIHdvcmtlZCB3aXRoIGl0IGJlZm9yZSwgYnV0IHRoZSBleGFjdCBsb2NhdGlvbiBpbiB0aGUgTGludXgga2VybmVsIHNvdXJjZSB0cmVlIGFsd2F5cyBzbGlwcyBteSBtaW5kLiBObyBwcm9ibGVtLCB0aW1lIHRvIGRvIGEgcXVpY2sgc2VhcmNoLiBUaGUgd2lyZWxlc3MgbmV0d29ya2luZyBkcml2ZXJzIGFyZSB1c3VhbGx5IG9yZ2FuaXplZCB1bmRlciBgZHJpdmVycy9uZXQvd2lyZWxlc3NgLCBzbyB0aGF0J3Mgd2hlcmUgSSdsbCBzdGFydCBsb29raW5nLiBJJ2xsIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBvZiB0aGF0IHBhcnRpY3VsYXIgbW9kdWxlLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgdHJhY2sgZG93biB0aGlzIHBpZWNlIG9mIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwNzMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyOToxNS4zMzQ4MDA5ODdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0OTM0MDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNQUM4MDIxMV9IV1NJTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnOjE6Y29uZmlnIE1BQzgwMjExX0hXU0lNXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnLTItXFx0dHJpc3RhdGUgXFxcIlNpbXVsYXRlZCByYWRpbyB0ZXN0aW5nIHRvb2wgZm9yIG1hYzgwMjExXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyOToxNS40ODk3MzkxNzhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTg3MTg0MzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqRGl2aW5nIGludG8gdGhlIE1BQzgwMjExIEhXU0lNIENvbmZpZ3VyYXRpb24gYW5kIFJhZGlvdGFwIFBhcnNpbmcqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGBNQUM4MDIxMV9IV1NJTWAgY29uZmlndXJhdGlvbi4gVGhhdCB0ZWxscyBtZSB0aGlzIGlzIGFsbCBhYm91dCB0aGUgaGFyZHdhcmUgc2ltdWxhdG9yLCB3aGljaCBpcyBrZXkgdG8gbXkgd29yay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaXMgYmVoYXZpbmcgdW5kZXIgc2ltdWxhdGVkIGNvbmRpdGlvbnMuIE5vdywgdGhlIGNydWNpYWwgcGFydCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGlzIGhvdyB0aGUgdHJhbnNtaXQgcmFkaW90YXAgaGVhZGVycyBhcmUgYmVpbmcgaGFuZGxlZCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBtb2RpZmljYXRpb25zIGhhdmUgYmVlbiBtYWRlIHRvIHRoZSBzeXN0ZW0gZm9yIHRoZSBzaW11bGF0b3IuIEkga25vdyB0aGF0IHRoZSBmdW5jdGlvbiBgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwYCBpcyB0aGUga2V5LiBNeSBmb2N1cyBpcyBvbiB0aGF0IHBhcnNpbmcgZnVuY3Rpb24uIFNvLCBJIG5lZWQgdG8gb3BlbiBgbmV0L21hYzgwMjExL3R4LmNgIGFuZCBoYXZlIGEgZ29vZCBsb29rIGF0IHRoYXQgZnVuY3Rpb24uIEkgbmVlZCB0byB0cmFjZSB0aHJvdWdoIGl0LCBwYXlpbmcgcGFydGljdWxhciBhdHRlbnRpb24gdG8gaG93IHRoZSByYWRpb3RhcCBpbmZvcm1hdGlvbiBpcyBpbnRlcnByZXRlZCB3aXRoaW4gdGhlIEhXU0lNIGNvbnRleHQuIEknbSBsb29raW5nIGZvciB3aGVyZSB0aGluZ3MgZGV2aWF0ZSBvciBpbnRlcmFjdCB3aXRoIHRoZSBzaW11bGF0ZWQgZW52aXJvbm1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzNzQsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyOToxOS4wNzY5NTUyNzZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk0ODUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tYWM4MDIxMS90eC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwOTYsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMDk2OlxcdFxcdHJldHVybiB0cnVlO1xcbjIwOTc6XFx0fVxcbjIwOTg6XFx0XFxuMjA5OTpcXHRib29sIGllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbjIxMDA6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgdHJpbV9mY3MpXFxuMjEwMTpcXHR7XFxuMjEwMjpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtXFx1MDAzZWllZWU4MDIxMV9wdHIpO1xcbjIxMDM6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9pdGVyYXRvciBpdGVyYXRvcjtcXG4yMTA0OlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyICpydGhkciA9XFxuMjEwNTpcXHRcXHRcXHQoc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIgKikgc2tiLVxcdTAwM2VkYXRhO1xcbjIxMDY6XFx0XFx0c3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpO1xcbjIxMDc6XFx0XFx0aW50IHJldCA9IGllZWU4MDIxMV9yYWRpb3RhcF9pdGVyYXRvcl9pbml0KFxcdTAwMjZpdGVyYXRvciwgcnRoZHIsIHNrYi1cXHUwMDNlbGVuLFxcbjIxMDg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgTlVMTCk7XFxuMjEwOTpcXHRcXHR1MTYgdHhmbGFncztcXG4yMTEwOlxcdFxcdHUxNiByYXRlID0gMDtcXG4yMTExOlxcdFxcdGJvb2wgcmF0ZV9mb3VuZCA9IGZhbHNlO1xcbjIxMTI6XFx0XFx0dTggcmF0ZV9yZXRyaWVzID0gMDtcXG4yMTEzOlxcdFxcdHUxNiByYXRlX2ZsYWdzID0gMDtcXG4yMTE0OlxcdFxcdHU4IG1jc19rbm93biwgbWNzX2ZsYWdzLCBtY3NfYnc7XFxuMjExNTpcXHRcXHR1MTYgdmh0X2tub3duO1xcbjIxMTY6XFx0XFx0dTggdmh0X21jcyA9IDAsIHZodF9uc3MgPSAwO1xcbjIxMTc6XFx0XFx0aW50IGk7XFxuMjExODpcXHRcXG4yMTE5OlxcdFxcdGlmICghaWVlZTgwMjExX3ZhbGlkYXRlX3JhZGlvdGFwX2xlbihza2IpKVxcbjIxMjA6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjIxMjE6XFx0XFxuMjEyMjpcXHRcXHRpbmZvLVxcdTAwM2VmbGFncyB8PSBJRUVFODAyMTFfVFhfSU5URkxfRE9OVF9FTkNSWVBUIHxcXG4yMTIzOlxcdFxcdFxcdCAgICAgICBJRUVFODAyMTFfVFhfQ1RMX0RPTlRGUkFHO1xcbjIxMjQ6XFx0XFxuMjEyNTpcXHRcXHQvKlxcbjIxMjY6XFx0XFx0ICogZm9yIGV2ZXJ5IHJhZGlvdGFwIGVudHJ5IHRoYXQgaXMgcHJlc2VudFxcbjIxMjc6XFx0XFx0ICogKGllZWU4MDIxMV9yYWRpb3RhcF9pdGVyYXRvcl9uZXh0IHJldHVybnMgLUVOT0VOVCB3aGVuIG5vIG1vcmVcXG4yMTI4OlxcdFxcdCAqIGVudHJpZXMgcHJlc2VudCwgb3IgLUVJTlZBTCBvbiBlcnJvcilcXG4yMTI5OlxcdFxcdCAqL1xcbjIxMzA6XFx0XFxuMjEzMTpcXHRcXHR3aGlsZSAoIXJldCkge1xcbjIxMzI6XFx0XFx0XFx0cmV0ID0gaWVlZTgwMjExX3JhZGlvdGFwX2l0ZXJhdG9yX25leHQoXFx1MDAyNml0ZXJhdG9yKTtcXG4yMTMzOlxcdFxcbjIxMzQ6XFx0XFx0XFx0aWYgKHJldClcXG4yMTM1OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjIxMzY6XFx0XFxuMjEzNzpcXHRcXHRcXHQvKiBzZWUgaWYgdGhpcyBhcmd1bWVudCBpcyBzb21ldGhpbmcgd2UgY2FuIHVzZSAqL1xcbjIxMzg6XFx0XFx0XFx0c3dpdGNoIChpdGVyYXRvci50aGlzX2FyZ19pbmRleCkge1xcbjIxMzk6XFx0XFx0XFx0LypcXG4yMTQwOlxcdFxcdFxcdCAqIFlvdSBtdXN0IHRha2UgY2FyZSB3aGVuIGRlcmVmZXJlbmNpbmcgaXRlcmF0b3IudGhpc19hcmdcXG4yMTQxOlxcdFxcdFxcdCAqIGZvciBtdWx0aWJ5dGUgdHlwZXMuLi4gdGhlIHBvaW50ZXIgaXMgbm90IGFsaWduZWQuICBVc2VcXG4yMTQyOlxcdFxcdFxcdCAqIGdldF91bmFsaWduZWQoKHR5cGUgKilpdGVyYXRvci50aGlzX2FyZykgdG8gZGVyZWZlcmVuY2VcXG4yMTQzOlxcdFxcdFxcdCAqIGl0ZXJhdG9yLnRoaXNfYXJnIGZvciB0eXBlIFxcXCJ0eXBlXFxcIiBzYWZlbHkgb24gYWxsIGFyY2hlcy5cXG4yMTQ0OlxcdFxcdFxcdCovXFxuMjE0NTpcXHRcXHRcXHRjYXNlIElFRUU4MDIxMV9SQURJT1RBUF9GTEFHUzpcXG4yMTQ2OlxcdFxcdFxcdFxcdGlmICgqaXRlcmF0b3IudGhpc19hcmcgXFx1MDAyNiBJRUVFODAyMTFfUkFESU9UQVBfRl9GQ1MpIHtcXG4yMTQ3OlxcdFxcdFxcdFxcdFxcdC8qXFxuMjE0ODpcXHRcXHRcXHRcXHRcXHQgKiB0aGlzIGluZGljYXRlcyB0aGF0IHRoZSBza2Igd2UgaGF2ZSBiZWVuXFxuMjE0OTpcXHRcXHRcXHRcXHRcXHQgKiBoYW5kZWQgaGFzIHRoZSAzMi1iaXQgRkNTIENSQyBhdCB0aGUgZW5kLi4uXFxuMjE1MDpcXHRcXHRcXHRcXHRcXHQgKiB3ZSBzaG91bGQgcmVhY3QgdG8gdGhhdCBieSBzbmlwcGluZyBpdCBvZmZcXG4yMTUxOlxcdFxcdFxcdFxcdFxcdCAqIGJlY2F1c2UgaXQgd2lsbCBiZSByZWNvbXB1dGVkIGFuZCBhZGRlZFxcbjIxNTI6XFx0XFx0XFx0XFx0XFx0ICogb24gdHJhbnNtaXNzaW9uXFxuMjE1MzpcXHRcXHRcXHRcXHRcXHQgKi9cXG4yMTU0OlxcdFxcdFxcdFxcdFxcdGlmIChza2ItXFx1MDAzZWxlbiBcXHUwMDNjIChpdGVyYXRvci5fbWF4X2xlbmd0aCArIEZDU19MRU4pKVxcbjIxNTU6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjIxNTY6XFx0XFxuMjE1NzpcXHRcXHRcXHRcXHRcXHRpZiAodHJpbV9mY3MpXFxuMjE1ODpcXHRcXHRcXHRcXHRcXHRcXHRza2JfdHJpbShza2IsIHNrYi1cXHUwMDNlbGVuIC0gRkNTX0xFTik7XFxuMjE1OTpcXHRcXHRcXHRcXHR9XFxuMjE2MDpcXHRcXHRcXHRcXHRpZiAoKml0ZXJhdG9yLnRoaXNfYXJnIFxcdTAwMjYgSUVFRTgwMjExX1JBRElPVEFQX0ZfV0VQKVxcbjIxNjE6XFx0XFx0XFx0XFx0XFx0aW5mby1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfklFRUU4MDIxMV9UWF9JTlRGTF9ET05UX0VOQ1JZUFQ7XFxuMjE2MjpcXHRcXHRcXHRcXHRpZiAoKml0ZXJhdG9yLnRoaXNfYXJnIFxcdTAwMjYgSUVFRTgwMjExX1JBRElPVEFQX0ZfRlJBRylcXG4yMTYzOlxcdFxcdFxcdFxcdFxcdGluZm8tXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5JRUVFODAyMTFfVFhfQ1RMX0RPTlRGUkFHO1xcbjIxNjQ6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjE2NTpcXHRcXG4yMTY2OlxcdFxcdFxcdGNhc2UgSUVFRTgwMjExX1JBRElPVEFQX1RYX0ZMQUdTOlxcbjIxNjc6XFx0XFx0XFx0XFx0dHhmbGFncyA9IGdldF91bmFsaWduZWRfbGUxNihpdGVyYXRvci50aGlzX2FyZyk7XFxuMjE2ODpcXHRcXHRcXHRcXHRpZiAodHhmbGFncyBcXHUwMDI2IElFRUU4MDIxMV9SQURJT1RBUF9GX1RYX05PQUNLKVxcbjIxNjk6XFx0XFx0XFx0XFx0XFx0aW5mby1cXHUwMDNlZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUTF9OT19BQ0s7XFxuMjE3MDpcXHRcXHRcXHRcXHRpZiAodHhmbGFncyBcXHUwMDI2IElFRUU4MDIxMV9SQURJT1RBUF9GX1RYX05PU0VRTk8pXFxuMjE3MTpcXHRcXHRcXHRcXHRcXHRpbmZvLVxcdTAwM2Vjb250cm9sLmZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVFJMX05PX1NFUU5PO1xcbjIxNzI6XFx0XFx0XFx0XFx0aWYgKHR4ZmxhZ3MgXFx1MDAyNiBJRUVFODAyMTFfUkFESU9UQVBfRl9UWF9PUkRFUilcXG4yMTczOlxcdFxcdFxcdFxcdFxcdGluZm8tXFx1MDAzZWNvbnRyb2wuZmxhZ3MgfD1cXG4yMTc0OlxcdFxcdFxcdFxcdFxcdFxcdElFRUU4MDIxMV9UWF9DVFJMX0RPTlRfUkVPUkRFUjtcXG4yMTc1OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjIxNzY6XFx0XFxuMjE3NzpcXHRcXHRcXHRjYXNlIElFRUU4MDIxMV9SQURJT1RBUF9SQVRFOlxcbjIxNzg6XFx0XFx0XFx0XFx0cmF0ZSA9ICppdGVyYXRvci50aGlzX2FyZztcXG4yMTc5OlxcdFxcdFxcdFxcdHJhdGVfZmxhZ3MgPSAwO1xcbjIxODA6XFx0XFx0XFx0XFx0cmF0ZV9mb3VuZCA9IHRydWU7XFxuMjE4MTpcXHRcXHRcXHRcXHRicmVhaztcXG4yMTgyOlxcdFxcbjIxODM6XFx0XFx0XFx0Y2FzZSBJRUVFODAyMTFfUkFESU9UQVBfQU5URU5OQTpcXG4yMTg0OlxcdFxcdFxcdFxcdC8qIHRoaXMgY2FuIGFwcGVhciBtdWx0aXBsZSB0aW1lcywga2VlcCBhIGJpdG1hcCAqL1xcbjIxODU6XFx0XFx0XFx0XFx0LyogY29udHJvbC5hbnRlbm5hcyBpcyBvbmx5IGEgMi1iaXQgYml0bWFwICovXFxuMjE4NjpcXHRcXHRcXHRcXHRpZiAoKml0ZXJhdG9yLnRoaXNfYXJnIFxcdTAwM2MgMilcXG4yMTg3OlxcdFxcdFxcdFxcdFxcdGluZm8tXFx1MDAzZWNvbnRyb2wuYW50ZW5uYXMgfD0gQklUKCppdGVyYXRvci50aGlzX2FyZyk7XFxuMjE4ODpcXHRcXHRcXHRcXHRicmVhaztcXG4yMTg5OlxcdFxcbjIxOTA6XFx0XFx0XFx0Y2FzZSBJRUVFODAyMTFfUkFESU9UQVBfREFUQV9SRVRSSUVTOlxcbjIxOTE6XFx0XFx0XFx0XFx0cmF0ZV9yZXRyaWVzID0gKml0ZXJhdG9yLnRoaXNfYXJnO1xcbjIxOTI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjE5MzpcXHRcXG4yMTk0OlxcdFxcdFxcdGNhc2UgSUVFRTgwMjExX1JBRElPVEFQX01DUzpcXG4yMTk1OlxcdFxcdFxcdFxcdG1jc19rbm93biA9IGl0ZXJhdG9yLnRoaXNfYXJnWzBdO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyOToxOS4wNzczNTMxNzZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzk3ODgxMjE3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFBsYW4gZm9yIFJhZGlvdGFwIEhlYWRlciBQYXJzaW5nKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwYCBmdW5jdGlvbiwgYW5kIGl0J3MgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIHRlc3RhYmxlLiBUaGUgd2hvbGUgcG9pbnQgaXMgaXQgcGFyc2VzIHJhZGlvdGFwIGhlYWRlcnMgZnJvbSBpbmplY3RlZCBwYWNrZXRzIOKAkyB3aGljaCBpcyBleGFjdGx5IHdoYXQgd2UgbmVlZCB0byBmdXp6IGdpdmVuIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgYHRyaW1fZmNzYCBhcmd1bWVudCwgY2hhbmdpbmcgdGhlIGJlaGF2aW9yIG9mIHRoZSBGQ1MgaGFuZGxpbmcuIElmIGB0cmltX2Zjc2AgaXMgdHJ1ZSwgaXQgdHJpbXMgdGhlIEZDUyB0cmFpbGVyIGFuZCBpZiBpdCBpcyBmYWxzZSwgaXQgZG9lc24ndCB0cmltIGl0LCBidXQgdmFsaWRhdGVzIHRoZSBsZW5ndGguXG5cblRoZSBnb29kIG5ld3MgaXMgdGhhdCB3ZSBjYW4gZGVmaW5pdGVseSBpbmplY3QgdGhlc2UgcGFja2V0cy4gV2UgY2FuIHVzZSB0aGUgZnV6emVyIHRvIGluamVjdCBwYWNrZXRzIHdpdGggcmFkaW90YXAgaGVhZGVycyB0aHJvdWdoIGBtYWM4MDIxMV9od3NpbWAgb3IsIGlmIGl04oCZcyBhIG1vbml0b3IgaW50ZXJmYWNlLCB0aHJvdWdoIHR1bi90YXAuIFdhaXQsIHllYWgsIG1vbml0b3IgaW50ZXJmYWNlcyEgTWFjODAyMTEgbW9uaXRvciBpbnRlcmZhY2VzICpjYW4qIGJlIGNyZWF0ZWQsIGFuZCB3ZSAqY2FuKiBpbmplY3QgcGFja2V0cyBpbnRvIHRoZW0uIFRoYXQncyBleGNlbGxlbnQhIFRoZSBgTUFDODAyMTFfSFdTSU1gIGNvbmZpZyBsb29rcyBzb2xpZCwgYW5kIG9idmlvdXNseSwgYE1BQzgwMjExYCBpcyBlc3NlbnRpYWwuXG5cbk5vdywgbGV0J3MgbWFrZSBzdXJlIHdlJ3ZlIGlkZW50aWZpZWQgdGhlIHJpZ2h0IGV4ZWN1dGlvbiBwYXRocy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGBpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXBgIGlzIGNhbGxlZC4gTGV0IG1lIHNlZS4uLiBJIHNob3VsZCBjaGVjayBgaWVlZTgwMjExX21vbml0b3Jfc2VsZWN0X3F1ZXVlYCBhbmQgYGllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXRgLiBSaWdodCEgYGllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXRgIGlzIHRoZSBgbmRvX3N0YXJ0X3htaXRgIGZvciBtb25pdG9yIGludGVyZmFjZXMhIFNvLCBpbmplY3RpbmcgcGFja2V0cyBpbnRvIGEgbW9uaXRvciBpbnRlcmZhY2Ugd2lsbCB0cmlnZ2VyIHRoaXMgZnVuY3Rpb24uIFRoZSBmdXp6ZXIgY2FuIGRvIHRoaXMgYnkgY3JlYXRpbmcgYSBtb25pdG9yIGludGVyZmFjZSBhbmQgc2VuZGluZyBwYWNrZXRzIHRvIGl0LiBQZXJmZWN0LCB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gV2UgYXJlIGdvaW5nIHRvIGhhbW1lciB0aGlzIHdpdGggZnV6emVycyFcblxuT2theSwgbGV0J3MgaWRlbnRpZnkgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucy4gRGVmaW5pdGVseSBgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwYCBpcyB0aGUgbWFpbiB0YXJnZXQuIEFsc28sIGBpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0YCBpcyBhbm90aGVyIGtleSBvbmUsIGFuZCBgaWVlZTgwMjExX21vbml0b3Jfc2VsZWN0X3F1ZXVlYCBpcyBhbHNvIHJlYWNoYWJsZS5cblxuRmluYWxseSwganVzdCBhIHF1aWNrIGNoZWNrIGZvciBkZXBlbmRlbmNpZXMuIFdlIGtub3cgYE1BQzgwMjExYCBhbmQgYE1BQzgwMjExX0hXU0lNYCBhcmUgdGhlIHByaW1hcnkgY29uZmlncyBuZWVkZWQsIGJ1dCBJJ2xsIGRvdWJsZS1jaGVjayB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBvdGhlciBoaWRkZW4gZGVwZW5kZW5jaWVzLiBJJ2xsIGNoZWNrIGBNQUM4MDIxMV9IV1NJTWAncyBkZXBlbmRlbmNpZXMganVzdCB0byBiZSBjb21wbGV0ZWx5IHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1MDksIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyOToyNy4wNTYxNjg2NDhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNTM5NDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNQUM4MDIxMV9IV1NJTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnOjE6Y29uZmlnIE1BQzgwMjExX0hXU0lNXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnLTItXFx0dHJpc3RhdGUgXFxcIlNpbXVsYXRlZCByYWRpbyB0ZXN0aW5nIHRvb2wgZm9yIG1hYzgwMjExXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyOToyNy4xMTg3MTIxOTdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM4NTgzNzAyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgYE1BQzgwMjExX0hXU0lNYCBEZWZpbml0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYE1BQzgwMjExX0hXU0lNYC4gSSBrbm93IGl0J3MgcmVsYXRlZCB0byB0aGUgbWFjODAyMTEgZnJhbWV3b3JrLCBvYnZpb3VzbHkuIEJ1dCBJIG5lZWQgdG8gZ28gZGVlcGVyIHRoYW4ganVzdCB0aGUgbmFtZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHB1bGwgdXAgdGhlIGZ1bGwgZGVmaW5pdGlvbiDigJMgSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IHRoaXMgdGhpbmcgKmlzKiBhdCBhIGNvZGUgbGV2ZWwuIFdoYXQgZG9lcyB0aGlzIG1hY3JvIHN0YW5kIGZvcj8gV2hhdCBpbXBsaWNhdGlvbnMgZG9lcyB0aGF0IGhhdmUgb24gdGhlIGZyYW1ld29yaydzIGJlaGF2aW9yPyBJcyBpdCBhIGNvbXBpbGUtdGltZSBmbGFnLCBhIHN0cnVjdCBkZWZpbml0aW9uLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIHNwZWNpZmljcyBvZiB0aGUgZGVmaW5pdGlvbiB3aWxsIHJldmVhbCBjcnVjaWFsIGluc2lnaHRzLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIGhhcmR3YXJlIHNpbXVsYXRpb24uIERvZXMgaXQgdGllIGludG8gdGhlIGludGVybmFsIHN0cnVjdHVyZXMsIGFuZCBpZiBzbywgaG93PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSB2YXJpb3VzIGxheWVycyBvZiB0aGUgbWFjODAyMTEgc3RhY2suIFVsdGltYXRlbHksIG15IGdvYWwgaGVyZSBpcyB0byBncmFzcCB0aGUgcHJhY3RpY2FsIGNvbnNlcXVlbmNlcyBvZiBpdHMgcHJlc2VuY2Ugb3IgYWJzZW5jZSB3aXRoaW4gdGhlIHN5c3RlbS4gTGV0J3Mgc2VlIGl0IGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgZnJhbWV3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjE3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjk6MzEuNTA0NTUxNTExWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdGNvbmZpZyBNQUM4MDIxMV9IV1NJTVxcbiAgIDI6XFx0XFx0dHJpc3RhdGUgXFxcIlNpbXVsYXRlZCByYWRpbyB0ZXN0aW5nIHRvb2wgZm9yIG1hYzgwMjExXFxcIlxcbiAgIDM6XFx0XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxcbiAgIDQ6XFx0XFx0aGVscFxcbiAgIDU6XFx0XFx0ICBUaGlzIGRyaXZlciBpcyBhIGRldmVsb3BlciB0ZXN0aW5nIHRvb2wgdGhhdCBjYW4gYmUgdXNlZCB0byB0ZXN0XFxuICAgNjpcXHRcXHQgIElFRUUgODAyLjExIG5ldHdvcmtpbmcgc3RhY2sgKG1hYzgwMjExKSBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIG5vdFxcbiAgIDc6XFx0XFx0ICBuZWVkZWQgZm9yIG5vcm1hbCB3aXJlbGVzcyBMQU4gdXNhZ2UgYW5kIGlzIG9ubHkgZm9yIHRlc3RpbmcuIFNlZVxcbiAgIDg6XFx0XFx0ICBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbWFjODAyMTFfaHdzaW0gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93XFxuICAgOTpcXHRcXHQgIHRvIHVzZSB0aGlzIHRvb2wuXFxuICAxMDpcXHRcXG4gIDExOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlXFxuICAxMjpcXHRcXHQgIGNhbGxlZCBtYWM4MDIxMV9od3NpbS4gIElmIHVuc3VyZSwgc2F5IE4uXFxuICAxMzpcXHRcXG4gIDE0OlxcdGNvbmZpZyBWSVJUX1dJRklcXG4gIDE1OlxcdFxcdHRyaXN0YXRlIFxcXCJXaWZpIHdyYXBwZXIgZm9yIGV0aGVybmV0IGRyaXZlcnNcXFwiXFxuICAxNjpcXHRcXHRkZXBlbmRzIG9uIENGRzgwMjExXFxuICAxNzpcXHRcXHRoZWxwXFxuICAxODpcXHRcXHQgIFRoaXMgb3B0aW9uIGFkZHMgc3VwcG9ydCBmb3IgZXRoZXJuZXQgY29ubmVjdGlvbnMgdG8gYXBwZWFyIGFzIGlmIHRoZXlcXG4gIDE5OlxcdFxcdCAgYXJlIHdpZmkgY29ubmVjdGlvbnMgdGhyb3VnaCBhIHNwZWNpYWwgcnRuZXRsaW5rIGRldmljZS5cXG4gIDIwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyOTozMS41MDQ2MjI4ODFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjMyNDQzNTI4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZGVwZW5kZW5jaWVzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRlZXAgRGl2ZSBpbnRvIFdpcmVsZXNzIERyaXZlciBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHN0cmFpZ2h0Zm9yd2FyZCB3aGVuIEkgc2VlIHRoZXNlIGRlcGVuZGVuY2llcy4gYE1BQzgwMjExX0hXU0lNYCDigJMgcmlnaHQsIHRoYXQncyB0aGUgaGFyZHdhcmUgc2ltdWxhdGlvbiBtb2R1bGUgZm9yIE1BQzgwMjExLCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IGl0IGhhcyBhIGRpcmVjdCBkZXBlbmRlbmNlIG9uIHRoZSBtYWluIGBNQUM4MDIxMWAgZnJhbWV3b3JrLiBObyBzdXJwcmlzZXMgdGhlcmUuIEl0IHdvdWxkIGJlIGJpemFycmUgaWYgaXQgKmRpZG4ndCogZGVwZW5kIG9uIGl0LiBUaGF0J3MgYSBmdW5kYW1lbnRhbCBhcmNoaXRlY3R1cmFsIGdpdmVuLlxuXG5Ob3csIGBNQUM4MDIxMWAgaXRzZWxmLi4uIGFoIHllcywgdGhhdCdzIGJ1aWx0IG9uIGBDRkc4MDIxMWAuIFRoYXQncyB0aGUgY29yZS4gYENGRzgwMjExYCBwcm92aWRlcyB0aGUgY29uZmlndXJhdGlvbiBhbmQgcmVndWxhdG9yeSBkb21haW4gaW50ZXJmYWNlIGZvciA4MDIuMTEgZGV2aWNlcyBpbiB0aGUgTGludXgga2VybmVsLiBJdCdzIHRoZSBhYnN0cmFjdGlvbiBsYXllci4gRXZlcnl0aGluZyBlbHNlLCBgTUFDODAyMTFgLCB0aGUgaGFyZHdhcmUgc2ltdWxhdGlvbnMsIGFsbCB1c2UgYENGRzgwMjExYC5cblxuU28sIHRoZSBsb2dpY2FsIG5leHQgc3RlcCBmb3IgbWUsIGFuZCBJJ20gc3VyZSBJJ20gbm90IGFsb25lLCBpcyB0byBxdWlja2x5IGRyaWxsIGRvd24gYW5kIG1ha2Ugc3VyZSBgQ0ZHODAyMTFgIGlzIHNvdW5kLiBXaGF0J3MgdGhlIHN0YXR1cyBvZiB0aGF0IGludGVyZmFjZT8gSXMgaXQgd29ya2luZyBhcyBleHBlY3RlZD8gTm8gcG9pbnQgc3BlbmRpbmcgdGltZSBvbiB0aGUgZG93bnN0cmVhbSBiaXRzIGlmIHRoZSBmb3VuZGF0aW9uIGlzbid0IHNvbGlkLiBJJ2Qgd2FudCB0byBjaGVjayBpdHMgdmVyc2lvbiwgYW55IHJlY2VudCBwYXRjaGVzLCBrbm93biBidWdzLCBhbnkgcmVncmVzc2lvbnMgaXQgbWlnaHQgaGF2ZSBpbnRyb2R1Y2VkLiBCYXNpY2FsbHksIGEgcXVpY2sgZGlhZ25vc3RpYyBvbiB0aGUgbG93ZXN0IGxldmVsIGlzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDIzMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjk6MzcuODI5MDc1MzIzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTE4NjA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ0ZHODAyMTFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3dpcmVsZXNzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL0tjb25maWc9MTQ9Y29uZmlnIFdFWFRfUFJJVlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTYtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTc6Y29uZmlnIENGRzgwMjExXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTgtXFx0dHJpc3RhdGUgXFxcImNmZzgwMjExIC0gd2lyZWxlc3MgY29uZmlndXJhdGlvbiBBUElcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZz0zOD1jb25maWcgTkw4MDIxMV9URVNUTU9ERVxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctNTEtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6NTI6Y29uZmlnIENGRzgwMjExX0RFVkVMT1BFUl9XQVJOSU5HU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTUzLVxcdGJvb2wgXFxcImVuYWJsZSBkZXZlbG9wZXIgd2FybmluZ3NcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy02Ny1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo2ODpjb25maWcgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXFxubmV0L3dpcmVsZXNzL0tjb25maWctNjktXFx0Ym9vbCBcXFwiY2ZnODAyMTEgY2VydGlmaWNhdGlvbiBvbnVzXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctODgtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6ODk6Y29uZmlnIENGRzgwMjExX1JFUVVJUkVfU0lHTkVEX1JFR0RCXFxubmV0L3dpcmVsZXNzL0tjb25maWctOTAtXFx0Ym9vbCBcXFwicmVxdWlyZSByZWdkYiBzaWduYXR1cmVcXFwiIGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctOTgtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6OTk6Y29uZmlnIENGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEwMC1cXHRib29sIFxcXCJhbGxvdyByZWdkYiBrZXlzIHNoaXBwZWQgd2l0aCB0aGUga2VybmVsXFxcIiBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTExMC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMTE6Y29uZmlnIENGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUlxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTExMi1cXHRzdHJpbmcgXFxcImFkZGl0aW9uYWwgcmVnZGIga2V5IGRpcmVjdG9yeVxcXCIgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMjEtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTIyOmNvbmZpZyBDRkc4MDIxMV9SRUdfQ0VMTFVMQVJfSElOVFNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMjMtXFx0Ym9vbCBcXFwiY2ZnODAyMTEgcmVndWxhdG9yeSBzdXBwb3J0IGZvciBjZWxsdWxhciBiYXNlIHN0YXRpb24gaGludHNcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMzQtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTM1OmNvbmZpZyBDRkc4MDIxMV9SRUdfUkVMQVhfTk9fSVJcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMzYtXFx0Ym9vbCBcXFwiY2ZnODAyMTEgc3VwcG9ydCBmb3IgTk9fSVIgcmVsYXhhdGlvblxcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE1OC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNTk6Y29uZmlnIENGRzgwMjExX0RFRkFVTFRfUFNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNjAtXFx0Ym9vbCBcXFwiZW5hYmxlIHBvd2Vyc2F2ZSBieSBkZWZhdWx0XFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTY4LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE2OTpjb25maWcgQ0ZHODAyMTFfREVCVUdGU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3MC1cXHRib29sIFxcXCJjZmc4MDIxMSBEZWJ1Z0ZTIGVudHJpZXNcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzYtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTc3OmNvbmZpZyBDRkc4MDIxMV9DUkRBX1NVUFBPUlRcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzgtXFx0Ym9vbCBcXFwic3VwcG9ydCBDUkRBXFxcIiBpZiBFWFBFUlRcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4Ni1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxODc6Y29uZmlnIENGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODgtXFx0Ym9vbCBcXFwiY2ZnODAyMTEgd2lyZWxlc3MgZXh0ZW5zaW9ucyBjb21wYXRpYmlsaXR5XFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTkzLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE5NDpjb25maWcgQ0ZHODAyMTFfS1VOSVRfVEVTVFxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE5NS1cXHR0cmlzdGF0ZSBcXFwiS1VuaXQgdGVzdHMgZm9yIGNmZzgwMjExXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI5OjM3LjkwNDI2NDkwM1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODU1MzUyOTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gV2lGaSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgQ0ZHODAyMTFgIHN0dWZmLCB3aGljaCBpcyBvYnZpb3VzbHkgdGhlIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlIGZvciBjZmc4MDIxMSwgbWFrZXMgc2Vuc2UuIE5vdywgbGV0J3Mgc2VlLCB0byBnZXQgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBJIG5lZWQsIEknbGwgZGVmaW5pdGVseSB3YW50IHRvIGVuYWJsZSBgTUFDODAyMTFgLCBgTUFDODAyMTFfSFdTSU1gLCBhbmQgb2YgY291cnNlIGBDRkc4MDIxMWAuIFJpZ2h0LCAqdGhhdCogZHJpdmVyLCBgTUFDODAyMTFfSFdTSU1gLCBpcyB1c2VmdWwsIEkgc2hvdWxkIHJlbWVtYmVyIHRvIGluY2x1ZGUgdGhhdC5cblxuSSd2ZSBnb3QgYSBtZW50YWwgY2hlY2tsaXN0IG9mIGtleSBmdW5jdGlvbnMgSSdtIGZvY3VzaW5nIG9uIOKAkyBgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwYCwgYGllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXRgLCBhbmQgYGllZWU4MDIxMV9tb25pdG9yX3NlbGVjdF9xdWV1ZWAuIEkgbmVlZCB0byBlbnN1cmUgdGhlc2UgYXJlIGNvbmZpZ3VyZWQgY29ycmVjdGx5LlxuXG5MZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeSBpZiBgaWVlZTgwMjExX21vbml0b3Jfc2VsZWN0X3F1ZXVlYCBpcyBzdGF0aWMuIEdvdHRhIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTgxLCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI5OjQ0Ljc1OTYyMDg0N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMzMTYyMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWVlZTgwMjExX21vbml0b3Jfc2VsZWN0X3F1ZXVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMS9pZmFjZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS9pZmFjZS5jPTk0MT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGllZWU4MDIxMV9kYXRhaWZfb3BzID0ge1xcbi0tXFxubmV0L21hYzgwMjExL2lmYWNlLmMtOTUwLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjk1MTpzdGF0aWMgdTE2IGllZWU4MDIxMV9tb25pdG9yX3NlbGVjdF9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTk1Mi1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYz05Nzk9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpZWVlODAyMTFfbW9uaXRvcmlmX29wcyA9IHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTk4NS1cXHQubmRvX3NldF9tYWNfYWRkcmVzcyBcXHQ9IGllZWU4MDIxMV9jaGFuZ2VfbWFjLFxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjk4NjpcXHQubmRvX3NlbGVjdF9xdWV1ZVxcdD0gaWVlZTgwMjExX21vbml0b3Jfc2VsZWN0X3F1ZXVlLFxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTk4Ny19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyOTo0NC44MTI5NDUwNDRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUyNTAwODcxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkFzc2Vzc2luZyB0aGUgQ29kZWJhc2U6IFN0YXRpYyB2cy4gTm9uLVN0YXRpYyBGdW5jdGlvbnMqKlxuXG5SaWdodCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwYCBmdW5jdGlvbi4gVGhlIGNvZGUgc2VlbXMgcHJldHR5IHN0YWJsZTsgaXQncyBzdGF0aWMgaW4gbmF0dXJlLCB3aGljaCBtYWtlcyBpdCBnb29kIGluIGEgbG90IG9mIHdheXMuIEhvd2V2ZXIsIHdoaWxlIHN0YXRpYyBmdW5jdGlvbnMgb2ZmZXIgYmVuZWZpdHMsIG15IGdlbmVyYWwgcHJlZmVyZW5jZSBpcyB0byBhdm9pZCB0aGVtIHdoZW5ldmVyIGEgbm9uLXN0YXRpYyBvcHRpb24gc2VydmVzIHRoZSBzYW1lIHB1cnBvc2UgYXMgdGhlIGNvZGUgYmVjb21lcyBsZXNzIGZsZXhpYmxlIGFuZCByZS11c2FibGUuIE5vdywgSSBzZWUgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGlzbid0IG1hcmtlZCBhcyBzdGF0aWMsIHdoaWNoIGlzIGEgZ29vZCB0aGluZyBhbmQgbWFrZXMgdGhpcyBjb2RlIG1vcmUgcmUtdXNhYmxlLiBHb29kLiBJdCdzIGltcG9ydGFudCB0byBrZWVwIHRoYXQgaW4gbWluZCB3aGVuIGRvaW5nIGEgY29kZSByZXZpZXcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzIyLCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjk6NDkuMzM3OTU3Mjg3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODc3NzkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExL3R4LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL3R4LmM9MjA3OT1zdGF0aWMgYm9vbCBpZWVlODAyMTFfdmFsaWRhdGVfcmFkaW90YXBfbGVuKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy0yMDk4LVxcbm5ldC9tYWM4MDIxMS90eC5jOjIwOTk6Ym9vbCBpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbWFjODAyMTEvdHguYy0yMTAwLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRyaW1fZmNzKVxcbi0tXFxubmV0L21hYzgwMjExL3R4LmM9MjMxOD1uZXRkZXZfdHhfdCBpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy0yNDczLVxcdCAqL1xcbm5ldC9tYWM4MDIxMS90eC5jOjI0NzQ6XFx0aWYgKCFpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXAoc2tiLCBkZXYsIHRydWUpKVxcbm5ldC9tYWM4MDIxMS90eC5jLTI0NzUtXFx0XFx0Z290byBmYWlsX3JjdTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6Mjk6NDkuNDA2NzM5NjU2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyODk4OTg1NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGNvZGUgZWxlbWVudHMsIHRoaW5raW5nIHRocm91Z2ggdGhlbSBhcyBJIHdvdWxkIGlmIEkgd2VyZSBhbmFseXppbmcgdGhlbS5cblxuKipBbmFseXppbmcgSUVFRSA4MDIuMTEgVFggUGF0aCoqXG5cbkFscmlnaHQsIHNvIEknbSB0YWtpbmcgYSBsb29rIGF0IHRoaXMgd2lyZWxlc3MgZHJpdmVyLCBmb2N1c2luZyBvbiB0aGUgdHJhbnNtaXQgcGF0aC4gSSBzZWUgdHdvIGtleSBmdW5jdGlvbnMgZmxhZ2dlZCBoZXJlLiBUaGUgZmlyc3QsIGBpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXBgLCBhbmQgdGhlIHNlY29uZCwgYGllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXRgLiBUaGUgZmFjdCB0aGF0IG5laXRoZXIgb2YgdGhlc2UgaXMgZGVjbGFyZWQgYHN0YXRpY2AgaW1tZWRpYXRlbHkgZ3JhYnMgbXkgYXR0ZW50aW9uLiBUaGF0IGltcGxpZXMgdGhleSBoYXZlIGV4dGVybmFsIGxpbmthZ2UuIE5vdywgY29uc2lkZXJpbmcgdGhlIGNvbnRleHQgb2YgYSB3aXJlbGVzcyBkcml2ZXIsIHRoYXQgY291bGQgbWVhbiBhIGZldyB0aGluZ3MsIGFuZCBJIG5lZWQgdG8gZXhwbG9yZSB0aGUgaW1wbGljYXRpb25zLlxuXG5JZiB0aGV5IHdlcmVuJ3Qgc3RhdGljLCBpdCBwb2ludHMgdG8gdGhlc2UgZnVuY3Rpb25zIGJlaW5nIHBvdGVudGlhbGx5IGNhbGxhYmxlIGZyb20gbW9kdWxlcyBvciBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIG91dHNpZGUgdGhlIGltbWVkaWF0ZSBkcml2ZXIgY29kZSBpdHNlbGYuIGBpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXBgIGlzIHJlc3BvbnNpYmxlIGZvciBwYXJzaW5nIGEgcmFkaW90YXAgaGVhZGVyIG9uIHRyYW5zbWl0LCB3aGljaCBzZWVtcyByZWxhdGl2ZWx5IHNlbGYtY29udGFpbmVkLCBidXQgdGhlIGZhY3QgdGhhdCBpdCBpcyBub3Qgc3RhdGljIHRlbGxzIG1lIHRoYXQgdGhlcmUgaXMgcHJvYmFibHkgYW4gZXh0ZXJuYWwgbW9kdWxlIHRoYXQgaXMgY29uc3VtaW5nIHRoaXMgcGFyc2VkIGluZm9ybWF0aW9uLiBUaGlzIGFsc28gaW1wbGllcyBpdCBpcyBwcm9iYWJseSBub3Qgc3BlY2lmaWMgdG8gYSBzaW5nbGUgZGV2aWNlIG9yIGV2ZW4gYSBzaW5nbGUgZHJpdmVyIGluc3RhbmNlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGF0IGV4dGVybmFsIGNhbGwgaXMgY29taW5nIGZyb20uIENvdWxkIGl0IGJlIGEgZ2VuZXJpYyBtb25pdG9yaW5nIHN1YnN5c3RlbSwgbWF5YmUgc29tZSBzb3J0IG9mIHBhY2tldCBjYXB0dXJlIHRvb2wsIG9yIGV2ZW4gYSBoaWdoZXItbGV2ZWwgd2lyZWxlc3MgbWFuYWdlbWVudCBjb21wb25lbnQ/IFRoaXMgbm9uLXN0YXRpYyBkZWNsYXJhdGlvbiBpcyBhIGNyaXRpY2FsIGNsdWUgYWJvdXQgaG93IHRoaXMgZnVuY3Rpb24gaW50ZWdyYXRlcyB3aXRoIHRoZSBzeXN0ZW0uXG5cbmBpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0YCBhbHNvIGJlaW5nIG5vbi1zdGF0aWMgcHJlc2VudHMgYW5vdGhlciBzZXQgb2YgaW50cmlndWluZyBwb3NzaWJpbGl0aWVzLiBgc3RhcnRfeG1pdGAgaW1wbGllcyB0aGF0IGl0IGlzIHRoZSBpbml0aWFsIGNhbGwgdG8gdGhlIGRyaXZlcidzIHRyYW5zbWl0IGZ1bmN0aW9ucy4gSXQgaXMgcHJvYmFibHkgdGhlIGNhbGwgdGhhdCBpcyB1c2VkIGZyb20gdGhlIG5ldHdvcmsgc3RhY2sgdG8gcGxhY2UgYSBwYWNrZXQgb24gdGhlIGFpci4gU28gdGhlIGZhY3QgdGhhdCB0aGlzIGlzICpub3QqIGBzdGF0aWNgIGlzIGFsc28gaW1wb3J0YW50LiBUaGlzIHdvdWxkIHRlbGwgbWUgdGhhdCB0aGUgZHJpdmVyJ3MgaW50ZXJmYWNlIGlzIGV4cG9zZWQsIGFuZCBwb3RlbnRpYWxseSBjYWxsYWJsZSBmcm9tIGEgbW9uaXRvcmluZyBtb2R1bGUgb3IgZ2VuZXJpYyB0cmFuc21pdCBBUEkuIFNvLCBpZiBJJ20gZGVzaWduaW5nIGEgc3lzdGVtIHdoZXJlIEkgd2FudCB0byBob29rIGluIGFuZCBtYXliZSBtYW5pcHVsYXRlIHBhY2tldHMgYmVmb3JlIHRoZXkgZ28gb3V0LCBvciBpZiBJIGFtIGJ1aWxkaW5nIHNvbWUgc29ydCBvZiB2aXJ0dWFsIGludGVyZmFjZSwgdGhpcyBmdW5jdGlvbidzIHZpc2liaWxpdHkgYmVjb21lcyBoaWdobHkgdXNlZnVsLlxuXG5JbiBzaG9ydCwgdGhlIG5vbi1zdGF0aWMgbmF0dXJlIG9mIHRoZXNlIGZ1bmN0aW9ucyBzdHJvbmdseSBzdWdnZXN0cyBtb2R1bGFyaXR5IGFuZCBpbnRlci1jb21wb25lbnQgY29tbXVuaWNhdGlvbiB3aXRoaW4gdGhpcyB3aXJlbGVzcyBzdGFjay4gSXQgbWVhbnMgSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsaW5nIGNvbnRleHRzIGNhcmVmdWxseSB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyIGFuZCB3aG8ncyBsZXZlcmFnaW5nIHRoZXNlIGludGVyZmFjZXMuIFRoaXMgaXMgdGhlIGZpcnN0IHBsYWNlIEknZCBzdGFydCBsb29raW5nIGF0IGhvdyB0byBleHRlbmQgb3IgY3VzdG9taXplIHRoZSB0cmFuc21pc3Npb24gcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4NzMsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDoyOTo1Ni42OTY2Mzk5ODdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDYzODI1NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWVlZTgwMjExX21vbml0b3Jfc3RhcnRfeG1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTEvdHguY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvdHguYz0yMDk5PWJvb2wgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy0yMzE3LVxcbm5ldC9tYWM4MDIxMS90eC5jOjIzMTg6bmV0ZGV2X3R4X3QgaWVlZTgwMjExX21vbml0b3Jfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9tYWM4MDIxMS90eC5jLTIzMTktXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjI5OjU4LjIwMzAyNzc2OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Mjg5MDU2NjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgcGlucG9pbnRlZCBgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwYCBhbmQgYGllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXRgIGFzIGtleSBGb2N1c1N5bWJvbHMgaGVyZS4gR29vZCBzdGFydC4gTGV0J3Mgc2VlLi4uIHRoZSBsb2dpYyBvZiB0aGUgcGF0Y2ggaXMgYWJvdXQgdHJpbW1pbmcgdGhlIEZDUyB0cmFpbGVyIGZyb20gaW5qZWN0ZWQgcGFja2V0cy4gVGhhdCBkZWZpbml0ZWx5IHRvdWNoZXMgdGhlIGNvcmUgbWFjODAyMTEgc3RhY2ssIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWFjaGFiaWxpdHkgb2YgdGhpcyBjaGFuZ2UuIFNpbmNlIGl0IGlzIG9wdGlvbmFsLCBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIG9wdGlvbnMuXG5cbk15IGluaXRpYWwgYXNzdW1wdGlvbiBpcyBjb25maXJtZWQ6IHRoaXMgZnVuY3Rpb24gaXMgcmVhY2hlZCB3aGVuIGluamVjdGluZyBwYWNrZXRzIGludG8gYSBtYWM4MDIxMSBtb25pdG9yIGludGVyZmFjZS4gQW5kIHRoZSBtYWM4MDIxMV9od3NpbSBkcml2ZXIgaXMgYSBwZXJmZWN0IHRvb2wgdG8gdGVzdCB0aGlzIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBNQUM4MDIxMWAsIGBNQUM4MDIxMV9IV1NJTWAsIGFuZCBgQ0ZHODAyMTFgIHRvIGZ1bGx5IGdyYXNwIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBhbmQgaW1wbGljYXRpb25zLiBJdOKAmXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgcmVxdWlyZXMgZGV0YWlsZWQgdGVzdGluZyB3aXRoaW4gdGhhdCBjb3JlIG5ldHdvcmtpbmcgc3RhY2suXG5cbkFscmlnaHQsIEkgdGhpbmsgSSd2ZSBnb3QgYSBoYW5kbGUgb24gdGhlIGVzc2VudGlhbCBjb21wb25lbnRzIGFuZCBkZXBlbmRlbmNpZXMuIFRpbWUgdG8gZm9ybWFsbHkgc2V0IHRoZSByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzY2MiwiT3V0cHV0VG9rZW5zIjoxNzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6MzA6MDQuNDkyMDg2OTE1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4NTcyNjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIixcbiAgICBcIkNGRzgwMjExXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwXCIsXG4gICAgXCJpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcGAgdG8gb3B0aW9uYWxseSB0cmltIHRoZSBGQ1MgdHJhaWxlciBmcm9tIGluamVjdGVkIHBhY2tldHMuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHdoZW4gaW5qZWN0aW5nIHBhY2tldHMgaW50byBhIG1hYzgwMjExIG1vbml0b3IgaW50ZXJmYWNlLCB3aGljaCBjYW4gYmUgdGVzdGVkIHVzaW5nIHRoZSBtYWM4MDIxMV9od3NpbSBkcml2ZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtYWM4MDIxMSBuZXR3b3JraW5nIHN0YWNrLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMV9IV1NJTVwiLFxuICAgIFwiQ0ZHODAyMTFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXBcIixcbiAgICBcImllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwYCB0byBvcHRpb25hbGx5IHRyaW0gdGhlIEZDUyB0cmFpbGVyIGZyb20gaW5qZWN0ZWQgcGFja2V0cy4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgd2hlbiBpbmplY3RpbmcgcGFja2V0cyBpbnRvIGEgbWFjODAyMTEgbW9uaXRvciBpbnRlcmZhY2UsIHdoaWNoIGNhbiBiZSB0ZXN0ZWQgdXNpbmcgdGhlIG1hYzgwMjExX2h3c2ltIGRyaXZlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1hYzgwMjExIG5ldHdvcmtpbmcgc3RhY2suXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjMwOjA0LjYxMDY2NjgzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDgxMDg5NTAyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAwOjMwOjA0LjYxMTEyNjI1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE0ODEwNDMwNzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBgc2tiX3RyaW1gIHdhcyBpbmNvcnJlY3RseSBjYWxsZWQgZHVyaW5nIGBpZWVlODAyMTFfbW9uaXRvcl9zZWxlY3RfcXVldWVgIHdoZW4gcGFyc2luZyB0aGUgcmFkaW90YXAgaGVhZGVyLiBUcmltbWluZyB0aGUgRkNTIHRyYWlsZXIgYXQgdGhpcyBzdGFnZSByZWR1Y2VkIGBza2ItXFx1MDAzZWxlbmAsIGNhdXNpbmcgdGhlIHN1YnNlcXVlbnQgY2FsbCB0byBgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwYCBpbiBgaWVlZTgwMjExX21vbml0b3Jfc3RhcnRfeG1pdGAgdG8gZmFpbCBpdHMgbGVuZ3RoIGNoZWNrIChgc2tiLVxcdTAwM2VsZW4gXFx1MDAzYyAoaXRlcmF0b3IuX21heF9sZW5ndGggKyBGQ1NfTEVOKWApIGFuZCBkcm9wIHRoZSBwYWNrZXQuIFRoZSBmaXggaW50cm9kdWNlcyBhIGB0cmltX2Zjc2AgYm9vbGVhbiB0byBkZWZlciB0aGUgdHJpbW1pbmcgdW50aWwgYGllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXRgLlxcblxcblRoaXMgaXMgYSBsb2dpYyBidWcgcmVsYXRlZCB0byBwYWNrZXQgbGVuZ3RoIG1hbmlwdWxhdGlvbiBhbmQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgYWNjZXNzZXMsIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IGZvciBjYXRjaGluZyBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGlzc3VlcyBpbiB0aGlzIGFyZWEuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjA4ODgwOWU5Y2VlMTAyZDliMzUwNzU5ZDMxZGRhZDA0ZDQwYTgzYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDAwOjI4OjU3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmhcbmluZGV4IDRmOTVkYTAyMzc0NmYuLjBiZWNkMzM2MTAxMGYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oXG4rKysgYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oXG5AQCAtNzYxNSwxMSArNzYxNSwxMiBAQCBib29sIGllZWU4MDIxMV90eF9wcmVwYXJlX3NrYihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiAgKlxuICAqIEBza2I6IHBhY2tldCBpbmplY3RlZCBieSB1c2Vyc3BhY2VcbiAgKiBAZGV2OiB0aGUgXHUwMDI2c3RydWN0IGRldmljZSBvZiB0aGlzIDgwMi4xMSBkZXZpY2VcbisgKiBAdHJpbV9mY3M6IHRyaW0gdGhlIEZDUyB0cmFpbGVyIHdoZW4gcHJlc2VudDsgdmFsaWRhdGUgaXQgb3RoZXJ3aXNlXG4gICpcbiAgKiBSZXR1cm46ICV0cnVlIGlmIHRoZSByYWRpb3RhcCBoZWFkZXIgd2FzIHBhcnNlZCwgJWZhbHNlIG90aGVyd2lzZVxuICAqL1xuIGJvb2wgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwKHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0XHQgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4rXHRcdFx0XHQgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB0cmltX2Zjcyk7XG4gXG4gLyoqXG4gICogc3RydWN0IGllZWU4MDIxMV9ub2FfZGF0YSAtIGhvbGRzIHRlbXBvcmFyeSBkYXRhIGZvciB0cmFja2luZyBQMlAgTm9BIHN0YXRlXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2lmYWNlLmMgYi9uZXQvbWFjODAyMTEvaWZhY2UuY1xuaW5kZXggNDM0NjBhNzA1YTZiZC4uZmRhYzcyOWNhNTgwZCAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9pZmFjZS5jXG4rKysgYi9uZXQvbWFjODAyMTEvaWZhY2UuY1xuQEAgLTk2NCw3ICs5NjQsNyBAQCBzdGF0aWMgdTE2IGllZWU4MDIxMV9tb25pdG9yX3NlbGVjdF9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0LyogcmVzZXQgZmxhZ3MgYW5kIGluZm8gYmVmb3JlIHBhcnNpbmcgcmFkaW90YXAgaGVhZGVyICovXG4gXHRtZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7XG4gXG4tXHRpZiAoIWllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcChza2IsIGRldikpXG4rXHRpZiAoIWllZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcChza2IsIGRldiwgZmFsc2UpKVxuIFx0XHRyZXR1cm4gMDsgLyogZG9lc24ndCBtYXR0ZXIsIGZyYW1lIHdpbGwgYmUgZHJvcHBlZCAqL1xuIFxuIFx0bGVuX3J0aGRyID0gaWVlZTgwMjExX2dldF9yYWRpb3RhcF9sZW4oc2tiLVx1MDAzZWRhdGEpO1xuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS90eC5jIGIvbmV0L21hYzgwMjExL3R4LmNcbmluZGV4IDkxYjE0MTEyZTI0ZjAuLjk3OTkwMDM5Njk1ZGIgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvdHguY1xuKysrIGIvbmV0L21hYzgwMjExL3R4LmNcbkBAIC0yMDk3LDcgKzIwOTcsNyBAQCBzdGF0aWMgYm9vbCBpZWVlODAyMTFfdmFsaWRhdGVfcmFkaW90YXBfbGVuKHN0cnVjdCBza19idWZmICpza2IpXG4gfVxuIFxuIGJvb2wgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwKHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0XHQgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbitcdFx0XHRcdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRyaW1fZmNzKVxuIHtcbiBcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi1cdTAwM2VpZWVlODAyMTFfcHRyKTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaXRlcmF0b3IgaXRlcmF0b3I7XG5AQCAtMjE1NCw3ICsyMTU0LDggQEAgYm9vbCBpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzYyAoaXRlcmF0b3IuX21heF9sZW5ndGggKyBGQ1NfTEVOKSlcbiBcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0XHRcdFx0c2tiX3RyaW0oc2tiLCBza2ItXHUwMDNlbGVuIC0gRkNTX0xFTik7XG4rXHRcdFx0XHRpZiAodHJpbV9mY3MpXG4rXHRcdFx0XHRcdHNrYl90cmltKHNrYiwgc2tiLVx1MDAzZWxlbiAtIEZDU19MRU4pO1xuIFx0XHRcdH1cbiBcdFx0XHRpZiAoKml0ZXJhdG9yLnRoaXNfYXJnIFx1MDAyNiBJRUVFODAyMTFfUkFESU9UQVBfRl9XRVApXG4gXHRcdFx0XHRpbmZvLVx1MDAzZWZsYWdzIFx1MDAyNj0gfklFRUU4MDIxMV9UWF9JTlRGTF9ET05UX0VOQ1JZUFQ7XG5AQCAtMjQ3MCw3ICsyNDcxLDcgQEAgbmV0ZGV2X3R4X3QgaWVlZTgwMjExX21vbml0b3Jfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0ICogc2VsZWN0ZWQgY2hhbmRlZiBhYm92ZSB0byBhY2N1cmF0ZWx5IHNldCBpbmplY3Rpb24gcmF0ZXMgYW5kXG4gXHQgKiByZXRyYW5zbWlzc2lvbnMuXG4gXHQgKi9cbi1cdGlmICghaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwKHNrYiwgZGV2KSlcbitcdGlmICghaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwKHNrYiwgZGV2LCB0cnVlKSlcbiBcdFx0Z290byBmYWlsX3JjdTtcbiBcbiBcdC8qIHJlbW92ZSB0aGUgaW5qZWN0aW9uIHJhZGlvdGFwIGhlYWRlciAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDA6MzA6MDQuNjExMTI3MDAxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0ODEwMzgyMjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBGQ1MgVHJpbW1pbmcgTG9naWMgaW4gbWFjODAyMTEqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwYCBpbiBgbmV0L21hYzgwMjExYC4gVGhlIGNvcmUgY2hhbmdlIGludHJvZHVjZXMgYSBgdHJpbV9mY3NgIGFyZ3VtZW50IHRvIHRoYXQgZnVuY3Rpb24uIFRoZSBpbnRlbnRpb24gaXMgdG8gY29udHJvbCB3aGV0aGVyIHRoZSBGQ1MgdHJhaWxlciBpcyByZW1vdmVkIGZyb20gdGhlIHJhZGlvdGFwIGhlYWRlciBkdXJpbmcgcGFyc2luZy4gSW5pdGlhbGx5LCBJIHRob3VnaHQgdGhpcyBtaWdodCBiZSByZWxhdGVkIHRvIGEgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBpc3N1ZSwgcG90ZW50aWFsbHkgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSwgYnV0IGFmdGVyIHJldmlld2luZyB0aGUgY29kZSwgaXQncyBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IHByb2JsZW0uXG5cblNwZWNpZmljYWxseSwgdGhlIGNvZGUncyBiZWhhdmlvciBpbiBgaWVlZTgwMjExX21vbml0b3Jfc2VsZWN0X3F1ZXVlYCBhbmQgYGllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXRgIGNhdWdodCBteSBhdHRlbnRpb24uIFRoZSBmb3JtZXIgaXMgY2FsbGVkICpiZWZvcmUqIHRoZSBsYXR0ZXIsIGFuZCB0aGV5IGJvdGggcGFyc2UgdGhlIHJhZGlvdGFwIGhlYWRlci4gYGllZWU4MDIxMV9tb25pdG9yX3NlbGVjdF9xdWV1ZWAgbm93ICpkb2Vzbid0KiB0cmltIHRoZSBGQ1MgKGJlY2F1c2UgYHRyaW1fZmNzYCBpcyBgZmFsc2VgKSwgYW5kIGBpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0YCAqZG9lcyogdHJpbSB0aGUgRkNTIChiZWNhdXNlIGB0cmltX2Zjc2AgaXMgYHRydWVgKS4gVGhpcyBpcyB0aGUgZml4LiBUaGUgb3JpZ2luYWwgbG9naWMsIEkgc3VzcGVjdCwgd2FzIHRoYXQgYGllZWU4MDIxMV9tb25pdG9yX3NlbGVjdF9xdWV1ZWAgd2FzICppbmNvcnJlY3RseSogdHJpbW1pbmcgdGhlIEZDUywgYW5kIHRoZW4gYGllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXRgIHdhcyBiZWluZyBjYWxsZWQsIGFsc28gYXR0ZW1wdGluZyB0byBwYXJzZSB0aGUgYWxyZWFkeS10cmltbWVkIGhlYWRlci5cblxuTG9va2luZyBhdCB0aGUgY29kZSBzbmlwcGV0LCBpZiBgdHJpbV9mY3NgIGlzIHRydWUsIHRoZW4gYHNrYl90cmltKHNrYiwgc2tiLVx1MDAzZWxlbiAtIEZDU19MRU4pYCB3aWxsIGJlIGNhbGxlZC4gSWYgYSBwcmV2aW91cyBmdW5jdGlvbiBoYXMgYWxyZWFkeSB0cmltbWVkIHRoZSBGQ1MsIGFuZCB3ZSBjaGVjayB0aGUgbGVuZ3RoIGFmdGVyIGl0IGhhcyBiZWVuIHRyaW1tZWQsIHRoZSBjaGVjayBgaWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIChpdGVyYXRvci5fbWF4X2xlbmd0aCArIEZDU19MRU4pKWAgaXMgZ29pbmcgdG8gZmFpbCwgbGlrZWx5IHJlc3VsdGluZyBpbiBhIHBhY2tldCBiZWluZyBkcm9wcGVkLiBUaGlzIGlzIHRoZSBwcmVjaXNlIHNjZW5hcmlvIHdlIGFyZSB0cnlpbmcgdG8gYXZvaWQuXG5cblRoZSBpc3N1ZSBpcyB0aGlzIGNoZWNrIGlzIHdoYXQgZGV0ZXJtaW5lcyB0aGUgcHJvYmxlbS4gVGhlIGNvcmUgYnVnIGhlcmUgaXNuJ3QgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBLTVNBTi4gSXQgaXMgYSBsb2dpYyBlcnJvcjogYW4gaW5jb3JyZWN0IHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgaW52b2x2aW5nIGBza2JfdHJpbWAgYW5kIHN1YnNlcXVlbnQgbGVuZ3RoIGNoZWNrcy4gVGhlIGxlbmd0aCBpcyBiZWluZyBhbHRlcmVkIGluIGFuIHVuZXhwZWN0ZWQgd2F5LCBjYXVzaW5nIGEgcGFja2V0IGRyb3AgYmVjYXVzZSB0aGUgcmFkaW90YXAgaGVhZGVyIHBhcnNpbmcgZmFpbHMuIEl0IG1lYW5zIGZyYW1lcyB3aXRoIEZDUyBhcmUgYmVpbmcgZHJvcHBlZCBkdWUgdG8gYSBtaXNtYXRjaGVkIGV4cGVjdGF0aW9uIG9mIHRoZSBza2IgbGVuZ3RoLiBUaGVyZWZvcmUsIHRoaXMgaXMgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLiBUaGUgYnVnIGlzIGFib3V0IHBhY2tldCBkcm9wcyBjYXVzZWQgYnkgYW4gaW5jb3JyZWN0IGxlbmd0aCBjaGVjayBhZnRlciBGQ1MgdHJpbW1pbmcuXG5cblRoZXJlZm9yZSwgTmVlZHNLTVNBTiBzaG91bGQgYmUgc2V0IHRvIGZhbHNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTQwLCJPdXRwdXRUb2tlbnMiOjI0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMDozMDoxOS40MjE1MTI0NTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIHdoZXJlIGBza2JfdHJpbWAgd2FzIGluY29ycmVjdGx5IGNhbGxlZCBkdXJpbmcgYGllZWU4MDIxMV9tb25pdG9yX3NlbGVjdF9xdWV1ZWAgd2hlbiBwYXJzaW5nIHRoZSByYWRpb3RhcCBoZWFkZXIuIFRyaW1taW5nIHRoZSBGQ1MgdHJhaWxlciBhdCB0aGlzIHN0YWdlIHJlZHVjZWQgYHNrYi1cXHUwMDNlbGVuYCwgY2F1c2luZyB0aGUgc3Vic2VxdWVudCBjYWxsIHRvIGBpZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXBgIGluIGBpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0YCB0byBmYWlsIGl0cyBsZW5ndGggY2hlY2sgKGBza2ItXFx1MDAzZWxlbiBcXHUwMDNjIChpdGVyYXRvci5fbWF4X2xlbmd0aCArIEZDU19MRU4pYCkgYW5kIGRyb3AgdGhlIHBhY2tldC4gVGhlIGZpeCBpbnRyb2R1Y2VzIGEgYHRyaW1fZmNzYCBib29sZWFuIHRvIGRlZmVyIHRoZSB0cmltbWluZyB1bnRpbCBgaWVlZTgwMjExX21vbml0b3Jfc3RhcnRfeG1pdGAuXFxuXFxuVGhpcyBpcyBhIGxvZ2ljIGJ1ZyByZWxhdGVkIHRvIHBhY2tldCBsZW5ndGggbWFuaXB1bGF0aW9uIGFuZCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBhY2Nlc3Nlcywgb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgZm9yIGNhdGNoaW5nIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgaXNzdWVzIGluIHRoaXMgYXJlYS4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBgc2tiX3RyaW1gIHdhcyBpbmNvcnJlY3RseSBjYWxsZWQgZHVyaW5nIGBpZWVlODAyMTFfbW9uaXRvcl9zZWxlY3RfcXVldWVgIHdoZW4gcGFyc2luZyB0aGUgcmFkaW90YXAgaGVhZGVyLiBUcmltbWluZyB0aGUgRkNTIHRyYWlsZXIgYXQgdGhpcyBzdGFnZSByZWR1Y2VkIGBza2ItXFx1MDAzZWxlbmAsIGNhdXNpbmcgdGhlIHN1YnNlcXVlbnQgY2FsbCB0byBgaWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwYCBpbiBgaWVlZTgwMjExX21vbml0b3Jfc3RhcnRfeG1pdGAgdG8gZmFpbCBpdHMgbGVuZ3RoIGNoZWNrIChgc2tiLVxcdTAwM2VsZW4gXFx1MDAzYyAoaXRlcmF0b3IuX21heF9sZW5ndGggKyBGQ1NfTEVOKWApIGFuZCBkcm9wIHRoZSBwYWNrZXQuIFRoZSBmaXggaW50cm9kdWNlcyBhIGB0cmltX2Zjc2AgYm9vbGVhbiB0byBkZWZlciB0aGUgdHJpbW1pbmcgdW50aWwgYGllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXRgLlxcblxcblRoaXMgaXMgYSBsb2dpYyBidWcgcmVsYXRlZCB0byBwYWNrZXQgbGVuZ3RoIG1hbmlwdWxhdGlvbiBhbmQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgYWNjZXNzZXMsIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IGZvciBjYXRjaGluZyBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGlzc3VlcyBpbiB0aGlzIGFyZWEuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowdjz2b[1] Phase: Succeeded StartedAt: 2026-08-18 00:30:31 +0000 UTC FinishedAt: 2026-08-18 00:30:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdjz2b[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-18 00:30:31 +0000 UTC FinishedAt: 2026-08-18 00:30:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdjz2b[2] Phase: Succeeded StartedAt: 2026-08-18 00:30:31 +0000 UTC FinishedAt: 2026-08-18 04:09:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdjz2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_parse_tx_radiotap","ieee80211_monitor_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"ac9a1659-5477-4c8a-aecf-5eb0288abebc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-18 00:30:31 +0000 UTC FinishedAt: 2026-08-18 04:09:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_parse_tx_radiotap","ieee80211_monitor_start_xmit"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"ac9a1659-5477-4c8a-aecf-5eb0288abebc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowdjz2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_parse_tx_radiotap","ieee80211_monitor_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"ac9a1659-5477-4c8a-aecf-5eb0288abebc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-18 00:30:31 +0000 UTC FinishedAt: 2026-08-18 00:30:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdjz2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_parse_tx_radiotap","ieee80211_monitor_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"ac9a1659-5477-4c8a-aecf-5eb0288abebc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-18 00:30:31 +0000 UTC FinishedAt: 2026-08-18 00:30:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowdjz2b/series-workflowdjz2b-convert-artifact-2193146248/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdjz2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_parse_tx_radiotap","ieee80211_monitor_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"ac9a1659-5477-4c8a-aecf-5eb0288abebc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-18 00:30:41 +0000 UTC FinishedAt: 2026-08-18 00:47:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdjz2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_parse_tx_radiotap","ieee80211_monitor_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"ac9a1659-5477-4c8a-aecf-5eb0288abebc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-18 00:30:41 +0000 UTC FinishedAt: 2026-08-18 00:47:10 +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:*d13b24c1-e566-4177-a1c8-89fafe2acf2d,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-workflowdjz2b/series-workflowdjz2b-convert-artifact-2193146248/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": "05eaaec2-13f9-4628-aa34-4cb66c4601ec", "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-workflowdjz2b/series-workflowdjz2b-build-action-656579582/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdjz2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_parse_tx_radiotap","ieee80211_monitor_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"ac9a1659-5477-4c8a-aecf-5eb0288abebc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-18 00:30:41 +0000 UTC FinishedAt: 2026-08-18 00:47:00 +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:*d13b24c1-e566-4177-a1c8-89fafe2acf2d,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-workflowdjz2b/series-workflowdjz2b-convert-artifact-2193146248/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": "05eaaec2-13f9-4628-aa34-4cb66c4601ec", "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-workflowdjz2b/series-workflowdjz2b-build-action-656579582/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdjz2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_parse_tx_radiotap","ieee80211_monitor_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"ac9a1659-5477-4c8a-aecf-5eb0288abebc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-18 00:47:10 +0000 UTC FinishedAt: 2026-08-18 00:47:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdjz2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_parse_tx_radiotap","ieee80211_monitor_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"ac9a1659-5477-4c8a-aecf-5eb0288abebc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-18 00:47:10 +0000 UTC FinishedAt: 2026-08-18 00:47:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdjz2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_parse_tx_radiotap","ieee80211_monitor_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"ac9a1659-5477-4c8a-aecf-5eb0288abebc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-18 00:47:10 +0000 UTC FinishedAt: 2026-08-18 00:47:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdjz2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_parse_tx_radiotap","ieee80211_monitor_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"ac9a1659-5477-4c8a-aecf-5eb0288abebc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-18 00:47:10 +0000 UTC FinishedAt: 2026-08-18 00:47:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"ac9a1659-5477-4c8a-aecf-5eb0288abebc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowdjz2b/series-workflowdjz2b-convert-artifact-803235183/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdjz2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_parse_tx_radiotap","ieee80211_monitor_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"ac9a1659-5477-4c8a-aecf-5eb0288abebc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-18 00:47:20 +0000 UTC FinishedAt: 2026-08-18 00:49:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdjz2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_parse_tx_radiotap","ieee80211_monitor_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"ac9a1659-5477-4c8a-aecf-5eb0288abebc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-18 00:47:20 +0000 UTC FinishedAt: 2026-08-18 00:49:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*05eaaec2-13f9-4628-aa34-4cb66c4601ec,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-workflowdjz2b/series-workflowdjz2b-build-action-656579582/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-workflowdjz2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_parse_tx_radiotap","ieee80211_monitor_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"ac9a1659-5477-4c8a-aecf-5eb0288abebc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-18 00:49:22 +0000 UTC FinishedAt: 2026-08-18 00:49:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdjz2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_parse_tx_radiotap","ieee80211_monitor_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"ac9a1659-5477-4c8a-aecf-5eb0288abebc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-18 00:49:22 +0000 UTC FinishedAt: 2026-08-18 00:49:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdjz2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_parse_tx_radiotap","ieee80211_monitor_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"ac9a1659-5477-4c8a-aecf-5eb0288abebc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-18 00:49:22 +0000 UTC FinishedAt: 2026-08-18 01:06:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdjz2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_parse_tx_radiotap","ieee80211_monitor_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"ac9a1659-5477-4c8a-aecf-5eb0288abebc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-18 00:49:22 +0000 UTC FinishedAt: 2026-08-18 01:06:10 +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:*d13b24c1-e566-4177-a1c8-89fafe2acf2d,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-workflowdjz2b/series-workflowdjz2b-convert-artifact-803235183/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": "47ce8d85-0b1b-4913-b0ef-39f831224f6e", "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-workflowdjz2b/series-workflowdjz2b-build-action-2097142019/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdjz2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_parse_tx_radiotap","ieee80211_monitor_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"ac9a1659-5477-4c8a-aecf-5eb0288abebc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-18 00:49:22 +0000 UTC FinishedAt: 2026-08-18 01:06:00 +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:*d13b24c1-e566-4177-a1c8-89fafe2acf2d,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-workflowdjz2b/series-workflowdjz2b-convert-artifact-803235183/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": "47ce8d85-0b1b-4913-b0ef-39f831224f6e", "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-workflowdjz2b/series-workflowdjz2b-build-action-2097142019/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdjz2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_parse_tx_radiotap","ieee80211_monitor_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"ac9a1659-5477-4c8a-aecf-5eb0288abebc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-18 01:06:10 +0000 UTC FinishedAt: 2026-08-18 01:06:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdjz2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_parse_tx_radiotap","ieee80211_monitor_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"ac9a1659-5477-4c8a-aecf-5eb0288abebc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-18 01:06:10 +0000 UTC FinishedAt: 2026-08-18 01:06:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdjz2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_parse_tx_radiotap","ieee80211_monitor_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"ac9a1659-5477-4c8a-aecf-5eb0288abebc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-18 01:06:10 +0000 UTC FinishedAt: 2026-08-18 01:08:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdjz2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_parse_tx_radiotap","ieee80211_monitor_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"ac9a1659-5477-4c8a-aecf-5eb0288abebc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-18 01:06:10 +0000 UTC FinishedAt: 2026-08-18 01:08:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*47ce8d85-0b1b-4913-b0ef-39f831224f6e,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-workflowdjz2b/series-workflowdjz2b-build-action-2097142019/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-workflowdjz2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_parse_tx_radiotap","ieee80211_monitor_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"ac9a1659-5477-4c8a-aecf-5eb0288abebc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-18 01:08:12 +0000 UTC FinishedAt: 2026-08-18 04:09:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdjz2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_parse_tx_radiotap","ieee80211_monitor_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"ac9a1659-5477-4c8a-aecf-5eb0288abebc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-18 01:08:12 +0000 UTC FinishedAt: 2026-08-18 04:09:48 +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":["ieee80211_parse_tx_radiotap","ieee80211_monitor_start_xmit"],"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:*05eaaec2-13f9-4628-aa34-4cb66c4601ec,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*47ce8d85-0b1b-4913-b0ef-39f831224f6e,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-workflowdjz2b/series-workflowdjz2b-build-action-656579582/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-workflowdjz2b/series-workflowdjz2b-build-action-2097142019/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowdjz2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_parse_tx_radiotap","ieee80211_monitor_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"ac9a1659-5477-4c8a-aecf-5eb0288abebc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-18 01:08:12 +0000 UTC FinishedAt: 2026-08-18 01:08:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdjz2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_parse_tx_radiotap","ieee80211_monitor_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"ac9a1659-5477-4c8a-aecf-5eb0288abebc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-18 01:08:12 +0000 UTC FinishedAt: 2026-08-18 01:08:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_parse_tx_radiotap","ieee80211_monitor_start_xmit"],"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-workflowdjz2b/series-workflowdjz2b-convert-artifact-4088376360/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdjz2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_parse_tx_radiotap","ieee80211_monitor_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"ac9a1659-5477-4c8a-aecf-5eb0288abebc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-18 01:08:12 +0000 UTC FinishedAt: 2026-08-18 01:08:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdjz2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_parse_tx_radiotap","ieee80211_monitor_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"ac9a1659-5477-4c8a-aecf-5eb0288abebc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-18 01:08:12 +0000 UTC FinishedAt: 2026-08-18 01:08:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdjz2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_parse_tx_radiotap","ieee80211_monitor_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"ac9a1659-5477-4c8a-aecf-5eb0288abebc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-18 01:08:12 +0000 UTC FinishedAt: 2026-08-18 01:08:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdjz2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_parse_tx_radiotap","ieee80211_monitor_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"ac9a1659-5477-4c8a-aecf-5eb0288abebc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-18 01:08:22 +0000 UTC FinishedAt: 2026-08-18 04:09:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdjz2b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_parse_tx_radiotap","ieee80211_monitor_start_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"ac9a1659-5477-4c8a-aecf-5eb0288abebc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-18 01:08:22 +0000 UTC FinishedAt: 2026-08-18 04:09:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*05eaaec2-13f9-4628-aa34-4cb66c4601ec,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*47ce8d85-0b1b-4913-b0ef-39f831224f6e,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-workflowdjz2b/series-workflowdjz2b-build-action-656579582/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-workflowdjz2b/series-workflowdjz2b-build-action-2097142019/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-workflowdjz2b/series-workflowdjz2b-convert-artifact-4088376360/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,}