Name: series-workflowfnk6d Phase: Succeeded StartedAt: 2026-09-01 22:24:03 +0000 UTC FinishedAt: 2026-09-02 02:54:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfnk6d[0] Phase: Succeeded StartedAt: 2026-09-01 22:24:03 +0000 UTC FinishedAt: 2026-09-01 23:07:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfnk6d[0].run-triage Phase: Succeeded StartedAt: 2026-09-01 22:24:03 +0000 UTC FinishedAt: 2026-09-01 23:07:32 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "1d2929d0850fff683b8aff051275945e65f082c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_SCH_TAPRIO" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "1d2929d0850fff683b8aff051275945e65f082c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_SCH_TAPRIO" ], "series_id": "cc05566f-0f4c-414a-a028-7b7e8d85be42" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "advance_sched", "parse_taprio_schedule", "taprio_change", "taprio_init" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfU0NIX1RBUFJJTyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FkdmFuY2Vfc2NoZWQmIzM0OywKICAgICYjMzQ7cGFyc2VfdGFwcmlvX3NjaGVkdWxlJiMzNDssCiAgICAmIzM0O3RhcHJpb19jaGFuZ2UmIzM0OywKICAgICYjMzQ7dGFwcmlvX2luaXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHRoZSBzY2hlZHVsZSBhZHZhbmNlbWVudCBhbmQgY3ljbGUgcmVjYWxjdWxhdGlvbiBsb2dpYyBpbiB0aGUgdGFwcmlvIHFkaXNjIChzY2hfdGFwcmlvLmMpIHRvIGhhbmRsZSBkZWxheWVkIHRpbWVycyBhbmQgY2xvY2sgc3RlcHBpbmcgYnkgYm91bmRpbmcgY2F0Y2gtdXAgaXRlcmF0aW9ucyBhbmQgaW50cm9kdWNpbmcgYW4gaW50ZXJuYWwgYHBlcmlvZGAgZmllbGQgaW4gYHN0cnVjdCBzY2hlZF9nYXRlX2xpc3RgLlxuXG4tIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IC8gSW5mby1sZWFrIEFuYWx5c2lzOlxuICAxLiBUaGUgbmV3IGBwZXJpb2RgIGZpZWxkIGluIGBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0YCBpcyBjb21wdXRlZCBkdXJpbmcgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgYW5kIHN0b3JlZCBpbiBtZW1vcnkgYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmpgLiBJdCBpcyBub3QgZXhwb3J0ZWQgb3IgZHVtcGVkIHRvIHVzZXJzcGFjZSBpbiBgZHVtcF9zY2hlZHVsZWAuXG4gIDIuIEFsbCBsb2NhbCB2YXJpYWJsZXMgaW50cm9kdWNlZCBpbiBgYWR2YW5jZV9zY2hlZGAgKGBub3dgLCBgZW5kX3RpbWVgLCBgbmV4dF9zdGFydGAsIGBidWRnZXRgLCBgYmVoaW5kYCkgYW5kIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgIChgY3ljbGVgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgcmVhZGluZyBvciBicmFuY2hpbmcgb24gdGhlbS5cbiAgMy4gTm8gYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMsIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCByZWFkcyBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2Ugb3Iga2VybmVsIGNvbnRyb2wgZmxvdy5cblxuLSBLQVNBTiB2cyBLTVNBTiBBcHBsaWNhYmlsaXR5OlxuICBBbnkgY29uY3VycmVuY3ksIGxpc3QgdHJhdmVyc2FsLCBvciBib3VuZHMgaXNzdWVzIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBsb2NrZGVwLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIG9yIGluZm8tbGVhayByaXNrcyByZXF1aXJpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBydW4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzY2hlZHVsZSBwYXJzaW5nIGFuZCBocnRpbWVyIGFkdmFuY2UgYWxnb3JpdGhtIGluIHRoZSBUQVBSSU8gKFRpbWUtQXdhcmUgUHJpb3JpdHkpIHBhY2tldCBzY2hlZHVsZXIgKHNjaF90YXByaW8pLiBTcGVjaWZpY2FsbHksIGl0IGZpeGVzIGN5Y2xlIGNhdGNoLXVwIGxvZ2ljIHdoZW4gdGhlIHRpbWVyIGlzIGRlbGF5ZWQgb3IgdGhlIGNsb2NrIGlzIHN0ZXBwZWQgYnkgY2FsY3VsYXRpbmcgcGVyaW9kcyBhbmQgbGVhcGluZyBmb3J3YXJkLCBhbmQgYm91bmRzIHRoZSBzY2hlZHVsZSBjYXRjaC11cCBsb29wLiBUaGlzIG1vZGlmaWVzIGNvcmUgdHJhZmZpYyBjb250cm9sIHNjaGVkdWxpbmcgbG9naWMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIGNvbmZpZ3VyYXRpb24gYW5kIG5ldHdvcmsgcGFja2V0IHRyYW5zbWlzc2lvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzowNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQwNDRiOGJkMDQyNzhlMGM2ODI0MTUwNmQzNTk1MDcxMDUzM2RiYjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxIDIzOjA2OjM1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfdGFwcmlvLmMgYi9uZXQvc2NoZWQvc2NoX3RhcHJpby5jXG5pbmRleCAzOWFjNWI5N2FhM2FmLi45MDFkZmQyNDg0ZTEwIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF90YXByaW8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF90YXByaW8uY1xuQEAgLTgzLDYgJiM0Mzs4MywxMCBAQCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0IHtcbiBcdHM2NCBjeWNsZV90aW1lO1xuIFx0czY0IGN5Y2xlX3RpbWVfZXh0ZW5zaW9uO1xuIFx0czY0IGJhc2VfdGltZTtcbiYjNDM7XHQvKiBtaW4oY3ljbGVfdGltZSwgc3VtIG9mIGludGVydmFscyk6IHRoZSBzb2Z0d2FyZSBzY2hlZHVsZSByZXN0YXJ0c1xuJiM0MztcdCAqIHRoZSBsaXN0IGFmdGVyIHRoZSBsYXN0IGVudHJ5IGV2ZW4gd2hlbiBjeWNsZV90aW1lIGlzIG5vdCB1cCB5ZXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0czY0IHBlcmlvZDtcbiB9O1xuIFxuIHN0cnVjdCB0YXByaW9fc2NoZWQge1xuQEAgLTg3MSwxMiAmIzQzOzg3NSwxMyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnRhcHJpb19kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxuIH1cbiBcbiBzdGF0aWMgYm9vbCBzaG91bGRfcmVzdGFydF9jeWNsZShjb25zdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpvcGVyLFxuLVx0XHRcdFx0IGNvbnN0IHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnkpXG4mIzQzO1x0XHRcdFx0IGNvbnN0IHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnksXG4mIzQzO1x0XHRcdFx0IGt0aW1lX3QgZW5kX3RpbWUpXG4ge1xuIFx0aWYgKGxpc3RfaXNfbGFzdChcdTAwMjZlbnRyeS1cdTAwM2VsaXN0LCBcdTAwMjZvcGVyLVx1MDAzZWVudHJpZXMpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdGlmIChrdGltZV9jb21wYXJlKGVudHJ5LVx1MDAzZWVuZF90aW1lLCBvcGVyLVx1MDAzZWN5Y2xlX2VuZF90aW1lKSA9PSAwKVxuJiM0MztcdGlmIChrdGltZV9jb21wYXJlKGVuZF90aW1lLCBvcGVyLVx1MDAzZWN5Y2xlX2VuZF90aW1lKSA9PSAwKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdHJldHVybiBmYWxzZTtcbkBAIC05MjUsOCAmIzQzOzkzMCw5IEBAIHN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBhZHZhbmNlX3NjaGVkKHN0cnVjdCBocnRpbWVyICp0aW1lcilcbiBcdGludCBudW1fdGMgPSBuZXRkZXZfZ2V0X251bV90YyhkZXYpO1xuIFx0c3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeSwgKm5leHQ7XG4gXHRzdHJ1Y3QgUWRpc2MgKnNjaCA9IHEtXHUwMDNlcm9vdDtcbi1cdGt0aW1lX3QgZW5kX3RpbWU7XG4tXHRpbnQgdGM7XG4mIzQzO1x0a3RpbWVfdCBlbmRfdGltZSwgbmV4dF9zdGFydCwgbm93O1xuJiM0MztcdGludCBidWRnZXQsIHRjO1xuJiM0MztcdHM2NCBiZWhpbmQ7XG4gXG4gXHRzcGluX2xvY2soXHUwMDI2cS1cdTAwM2VjdXJyZW50X2VudHJ5X2xvY2spO1xuIFx0ZW50cnkgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHEtXHUwMDNlY3VycmVudF9lbnRyeSxcbkBAIC05NTIsMjMgJiM0Mzs5NTgsNDkgQEAgc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGFkdmFuY2Vfc2NoZWQoc3RydWN0IGhydGltZXIgKnRpbWVyKVxuIFx0XHRnb3RvIGZpcnN0X3J1bjtcbiBcdH1cbiBcbi1cdGlmIChzaG91bGRfcmVzdGFydF9jeWNsZShvcGVyLCBlbnRyeSkpIHtcbi1cdFx0bmV4dCA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2b3Blci1cdTAwM2VlbnRyaWVzLCBzdHJ1Y3Qgc2NoZWRfZW50cnksXG4tXHRcdFx0XHRcdGxpc3QpO1xuLVx0XHRvcGVyLVx1MDAzZWN5Y2xlX2VuZF90aW1lID0ga3RpbWVfYWRkX25zKG9wZXItXHUwMDNlY3ljbGVfZW5kX3RpbWUsXG4tXHRcdFx0XHRcdFx0ICAgIG9wZXItXHUwMDNlY3ljbGVfdGltZSk7XG4tXHR9IGVsc2Uge1xuLVx0XHRuZXh0ID0gbGlzdF9uZXh0X2VudHJ5KGVudHJ5LCBsaXN0KTtcbiYjNDM7XHRub3cgPSBocnRpbWVyX2NiX2dldF90aW1lKHRpbWVyKTtcbiYjNDM7XHRlbmRfdGltZSA9IGVudHJ5LVx1MDAzZWVuZF90aW1lO1xuJiM0MztcdGJlaGluZCA9IGt0aW1lX3N1Yihub3csIGVuZF90aW1lKTtcbiYjNDM7XG4mIzQzO1x0LyogQmVoaW5kLCBlLmcuIGRlbGF5ZWQgdGltZXIgb3Igc3RlcHBlZCBjbG9jazogc2tpcCB3aG9sZSBwZXJpb2RzXG4mIzQzO1x0ICogYXJpdGhtZXRpY2FsbHkgYW5kIHdhbGsgYXQgbW9zdCBvbmUgbW9yZSB0byB0aGUgZW50cnkgY292ZXJpbmdcbiYjNDM7XHQgKiBub3csIGluc3RlYWQgb2YgcmVwbGF5aW5nIHRoZSBiYWNrbG9nIG9uZSBleHBpcnkgYXQgYSB0aW1lLiBUaGVcbiYjNDM7XHQgKiBjYXAgYm91bmRzIHRoZSB3YWxrOyBhIGxlZnRvdmVyIGlzIHBpY2tlZCB1cCBieSB0aGUgbmV4dCBleHBpcnkuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHVubGlrZWx5KGJlaGluZCBcdTAwM2U9IG9wZXItXHUwMDNlcGVyaW9kKSkge1xuJiM0MztcdFx0czY0IGp1bXAgPSBkaXY2NF9zNjQoYmVoaW5kLCBvcGVyLVx1MDAzZXBlcmlvZCkgKiBvcGVyLVx1MDAzZXBlcmlvZDtcbiYjNDM7XG4mIzQzO1x0XHRlbmRfdGltZSA9IGt0aW1lX2FkZF9ucyhlbmRfdGltZSwganVtcCk7XG4mIzQzO1x0XHRvcGVyLVx1MDAzZWN5Y2xlX2VuZF90aW1lID0ga3RpbWVfYWRkX25zKG9wZXItXHUwMDNlY3ljbGVfZW5kX3RpbWUsIGp1bXApO1xuIFx0fVxuIFxuLVx0ZW5kX3RpbWUgPSBrdGltZV9hZGRfbnMoZW50cnktXHUwMDNlZW5kX3RpbWUsIG5leHQtXHUwMDNlaW50ZXJ2YWwpO1xuLVx0ZW5kX3RpbWUgPSBtaW5fdChrdGltZV90LCBlbmRfdGltZSwgb3Blci1cdTAwM2VjeWNsZV9lbmRfdGltZSk7XG4mIzQzO1x0YnVkZ2V0ID0gMiAqIG9wZXItXHUwMDNlbnVtX2VudHJpZXM7XG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0aWYgKHNob3VsZF9yZXN0YXJ0X2N5Y2xlKG9wZXIsIGVudHJ5LCBlbmRfdGltZSkpIHtcbiYjNDM7XHRcdFx0bmV4dCA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2b3Blci1cdTAwM2VlbnRyaWVzLFxuJiM0MztcdFx0XHRcdFx0XHRzdHJ1Y3Qgc2NoZWRfZW50cnksIGxpc3QpO1xuJiM0MztcdFx0XHRvcGVyLVx1MDAzZWN5Y2xlX2VuZF90aW1lID0ga3RpbWVfYWRkX25zKG9wZXItXHUwMDNlY3ljbGVfZW5kX3RpbWUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgIG9wZXItXHUwMDNlcGVyaW9kKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdG5leHQgPSBsaXN0X25leHRfZW50cnkoZW50cnksIGxpc3QpO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdG5leHRfc3RhcnQgPSBlbmRfdGltZTtcbiYjNDM7XHRcdGVuZF90aW1lID0ga3RpbWVfYWRkX25zKG5leHRfc3RhcnQsIG5leHQtXHUwMDNlaW50ZXJ2YWwpO1xuJiM0MztcdFx0ZW5kX3RpbWUgPSBtaW5fdChrdGltZV90LCBlbmRfdGltZSwgb3Blci1cdTAwM2VjeWNsZV9lbmRfdGltZSk7XG4mIzQzO1x0XHRlbnRyeSA9IG5leHQ7XG4mIzQzO1x0fSB3aGlsZSAodW5saWtlbHkoa3RpbWVfY29tcGFyZShlbmRfdGltZSwgbm93KSBcdTAwM2M9IDApIFx1MDAyNlx1MDAyNiBidWRnZXQtLSk7XG4gXG4mIzQzO1x0LyogbmV4dCBjYW4gYmUgdGhlIGVudHJ5IGFscmVhZHkgcHVibGlzaGVkIGFzIHEtXHUwMDNlY3VycmVudF9lbnRyeSAoYVxuJiM0MztcdCAqIHNpbmdsZS1lbnRyeSBzY2hlZHVsZSwgb3IgYSBjYXRjaC11cCBvZiB3aG9sZSBwZXJpb2RzKSwgc28gdGhlXG4mIzQzO1x0ICogY2xvc2UgdGltZXMgYW5kIGJ1ZGdldHMgYmVsb3cgYXJlIHJld3JpdHRlbiBpbiBwbGFjZSB3aGlsZVxuJiM0MztcdCAqIHRhcHJpb19kZXF1ZXVlX2Zyb21fdHhxKCkgbWF5IGJlIHJlYWRpbmcgdGhlbS5cbiYjNDM7XHQgKi9cbiBcdGZvciAodGMgPSAwOyB0YyBcdTAwM2MgbnVtX3RjOyB0YyYjNDM7JiM0MzspIHtcbiBcdFx0aWYgKG5leHQtXHUwMDNlZ2F0ZV9kdXJhdGlvblt0Y10gPT0gb3Blci1cdTAwM2VjeWNsZV90aW1lKVxuIFx0XHRcdG5leHQtXHUwMDNlZ2F0ZV9jbG9zZV90aW1lW3RjXSA9IEtUSU1FX01BWDtcbiBcdFx0ZWxzZVxuLVx0XHRcdG5leHQtXHUwMDNlZ2F0ZV9jbG9zZV90aW1lW3RjXSA9IGt0aW1lX2FkZF9ucyhlbnRyeS1cdTAwM2VlbmRfdGltZSxcbiYjNDM7XHRcdFx0bmV4dC1cdTAwM2VnYXRlX2Nsb3NlX3RpbWVbdGNdID0ga3RpbWVfYWRkX25zKG5leHRfc3RhcnQsXG4gXHRcdFx0XHRcdFx0XHRcdCBuZXh0LVx1MDAzZWdhdGVfZHVyYXRpb25bdGNdKTtcbiBcdH1cbiBcbkBAIC0xMTMwLDYgJiM0MzsxMTYyLDggQEAgc3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxuIFx0XHRcdFx0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKm5ldyxcbiBcdFx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuJiM0MztcdHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnk7XG4mIzQzO1x0a3RpbWVfdCBjeWNsZSA9IDA7XG4gXHRpbnQgZXJyID0gMDtcbiBcbiBcdGlmICh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfU0lOR0xFX0VOVFJZXSkge1xuQEAgLTExNTIsMTMgJiM0MzsxMTg2LDEwIEBAIHN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YixcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRpZiAoIW5ldy1cdTAwM2VjeWNsZV90aW1lKSB7XG4tXHRcdHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnk7XG4tXHRcdGt0aW1lX3QgY3ljbGUgPSAwO1xuLVxuLVx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBcdTAwMjZuZXctXHUwMDNlZW50cmllcywgbGlzdClcbi1cdFx0XHRjeWNsZSA9IGt0aW1lX2FkZF9ucyhjeWNsZSwgZW50cnktXHUwMDNlaW50ZXJ2YWwpO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIFx1MDAyNm5ldy1cdTAwM2VlbnRyaWVzLCBsaXN0KVxuJiM0MztcdFx0Y3ljbGUgPSBrdGltZV9hZGRfbnMoY3ljbGUsIGVudHJ5LVx1MDAzZWludGVydmFsKTtcbiBcbiYjNDM7XHRpZiAoIW5ldy1cdTAwM2VjeWNsZV90aW1lKSB7XG4gXHRcdGlmIChjeWNsZSBcdTAwM2MgMCB8fCBjeWNsZSBcdTAwM2UgSU5UX01BWCkge1xuIFx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7JiMzOTtjeWNsZV90aW1lJiMzOTsgaXMgdG9vIGJpZ1wmIzM0Oyk7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMTE3Miw2ICYjNDM7MTIwMyw3IEBAIHN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YixcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4mIzQzO1x0bmV3LVx1MDAzZXBlcmlvZCA9IG1pbihuZXctXHUwMDNlY3ljbGVfdGltZSwgY3ljbGUpO1xuIFx0dGFwcmlvX2NhbGN1bGF0ZV9nYXRlX2R1cmF0aW9ucyhxLCBuZXcpO1xuIFxuIFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6MDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1NDSEVEJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfVEFQUklPJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWR2YW5jZV9zY2hlZCYjMzQ7LAogICAgJiMzNDtwYXJzZV90YXByaW9fc2NoZWR1bGUmIzM0OywKICAgICYjMzQ7dGFwcmlvX2NoYW5nZSYjMzQ7LAogICAgJiMzNDt0YXByaW9faW5pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgc2NoZWR1bGUgcGFyc2luZyBhbmQgaHJ0aW1lciBhZHZhbmNlIGFsZ29yaXRobSBpbiB0aGUgVEFQUklPIChUaW1lLUF3YXJlIFByaW9yaXR5KSBwYWNrZXQgc2NoZWR1bGVyIChzY2hfdGFwcmlvKS4gU3BlY2lmaWNhbGx5LCBpdCBmaXhlcyBjeWNsZSBjYXRjaC11cCBsb2dpYyB3aGVuIHRoZSB0aW1lciBpcyBkZWxheWVkIG9yIHRoZSBjbG9jayBpcyBzdGVwcGVkIGJ5IGNhbGN1bGF0aW5nIHBlcmlvZHMgYW5kIGxlYXBpbmcgZm9yd2FyZCwgYW5kIGJvdW5kcyB0aGUgc2NoZWR1bGUgY2F0Y2gtdXAgbG9vcC4gVGhpcyBtb2RpZmllcyBjb3JlIHRyYWZmaWMgY29udHJvbCBzY2hlZHVsaW5nIGxvZ2ljIHJlYWNoYWJsZSB2aWEgbmV0bGluayBjb25maWd1cmF0aW9uIGFuZCBuZXR3b3JrIHBhY2tldCB0cmFuc21pc3Npb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkMDQ0YjhiZDA0Mjc4ZTBjNjgyNDE1MDZkMzU5NTA3MTA1MzNkYmI2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgMSAyMzowNjozNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfdGFwcmlvLmMgYi9uZXQvc2NoZWQvc2NoX3RhcHJpby5jCmluZGV4IDM5YWM1Yjk3YWEzYWYuLjkwMWRmZDI0ODRlMTAgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfdGFwcmlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF90YXByaW8uYwpAQCAtODMsNiAmIzQzOzgzLDEwIEBAIHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgewogCXM2NCBjeWNsZV90aW1lOwogCXM2NCBjeWNsZV90aW1lX2V4dGVuc2lvbjsKIAlzNjQgYmFzZV90aW1lOwomIzQzOwkvKiBtaW4oY3ljbGVfdGltZSwgc3VtIG9mIGludGVydmFscyk6IHRoZSBzb2Z0d2FyZSBzY2hlZHVsZSByZXN0YXJ0cwomIzQzOwkgKiB0aGUgbGlzdCBhZnRlciB0aGUgbGFzdCBlbnRyeSBldmVuIHdoZW4gY3ljbGVfdGltZSBpcyBub3QgdXAgeWV0LgomIzQzOwkgKi8KJiM0MzsJczY0IHBlcmlvZDsKIH07CiAKIHN0cnVjdCB0YXByaW9fc2NoZWQgewpAQCAtODcxLDEyICYjNDM7ODc1LDEzIEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdGFwcmlvX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpCiB9CiAKIHN0YXRpYyBib29sIHNob3VsZF9yZXN0YXJ0X2N5Y2xlKGNvbnN0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKm9wZXIsCi0JCQkJIGNvbnN0IHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnkpCiYjNDM7CQkJCSBjb25zdCBzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5LAomIzQzOwkJCQkga3RpbWVfdCBlbmRfdGltZSkKIHsKIAlpZiAobGlzdF9pc19sYXN0KCZhbXA7ZW50cnktJmd0O2xpc3QsICZhbXA7b3Blci0mZ3Q7ZW50cmllcykpCiAJCXJldHVybiB0cnVlOwogCi0JaWYgKGt0aW1lX2NvbXBhcmUoZW50cnktJmd0O2VuZF90aW1lLCBvcGVyLSZndDtjeWNsZV9lbmRfdGltZSkgPT0gMCkKJiM0MzsJaWYgKGt0aW1lX2NvbXBhcmUoZW5kX3RpbWUsIG9wZXItJmd0O2N5Y2xlX2VuZF90aW1lKSA9PSAwKQogCQlyZXR1cm4gdHJ1ZTsKIAogCXJldHVybiBmYWxzZTsKQEAgLTkyNSw4ICYjNDM7OTMwLDkgQEAgc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGFkdmFuY2Vfc2NoZWQoc3RydWN0IGhydGltZXIgKnRpbWVyKQogCWludCBudW1fdGMgPSBuZXRkZXZfZ2V0X251bV90YyhkZXYpOwogCXN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnksICpuZXh0OwogCXN0cnVjdCBRZGlzYyAqc2NoID0gcS0mZ3Q7cm9vdDsKLQlrdGltZV90IGVuZF90aW1lOwotCWludCB0YzsKJiM0MzsJa3RpbWVfdCBlbmRfdGltZSwgbmV4dF9zdGFydCwgbm93OwomIzQzOwlpbnQgYnVkZ2V0LCB0YzsKJiM0MzsJczY0IGJlaGluZDsKIAogCXNwaW5fbG9jaygmYW1wO3EtJmd0O2N1cnJlbnRfZW50cnlfbG9jayk7CiAJZW50cnkgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHEtJmd0O2N1cnJlbnRfZW50cnksCkBAIC05NTIsMjMgJiM0Mzs5NTgsNDkgQEAgc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGFkdmFuY2Vfc2NoZWQoc3RydWN0IGhydGltZXIgKnRpbWVyKQogCQlnb3RvIGZpcnN0X3J1bjsKIAl9CiAKLQlpZiAoc2hvdWxkX3Jlc3RhcnRfY3ljbGUob3BlciwgZW50cnkpKSB7Ci0JCW5leHQgPSBsaXN0X2ZpcnN0X2VudHJ5KCZhbXA7b3Blci0mZ3Q7ZW50cmllcywgc3RydWN0IHNjaGVkX2VudHJ5LAotCQkJCQlsaXN0KTsKLQkJb3Blci0mZ3Q7Y3ljbGVfZW5kX3RpbWUgPSBrdGltZV9hZGRfbnMob3Blci0mZ3Q7Y3ljbGVfZW5kX3RpbWUsCi0JCQkJCQkgICAgb3Blci0mZ3Q7Y3ljbGVfdGltZSk7Ci0JfSBlbHNlIHsKLQkJbmV4dCA9IGxpc3RfbmV4dF9lbnRyeShlbnRyeSwgbGlzdCk7CiYjNDM7CW5vdyA9IGhydGltZXJfY2JfZ2V0X3RpbWUodGltZXIpOwomIzQzOwllbmRfdGltZSA9IGVudHJ5LSZndDtlbmRfdGltZTsKJiM0MzsJYmVoaW5kID0ga3RpbWVfc3ViKG5vdywgZW5kX3RpbWUpOwomIzQzOwomIzQzOwkvKiBCZWhpbmQsIGUuZy4gZGVsYXllZCB0aW1lciBvciBzdGVwcGVkIGNsb2NrOiBza2lwIHdob2xlIHBlcmlvZHMKJiM0MzsJICogYXJpdGhtZXRpY2FsbHkgYW5kIHdhbGsgYXQgbW9zdCBvbmUgbW9yZSB0byB0aGUgZW50cnkgY292ZXJpbmcKJiM0MzsJICogbm93LCBpbnN0ZWFkIG9mIHJlcGxheWluZyB0aGUgYmFja2xvZyBvbmUgZXhwaXJ5IGF0IGEgdGltZS4gVGhlCiYjNDM7CSAqIGNhcCBib3VuZHMgdGhlIHdhbGs7IGEgbGVmdG92ZXIgaXMgcGlja2VkIHVwIGJ5IHRoZSBuZXh0IGV4cGlyeS4KJiM0MzsJICovCiYjNDM7CWlmICh1bmxpa2VseShiZWhpbmQgJmd0Oz0gb3Blci0mZ3Q7cGVyaW9kKSkgewomIzQzOwkJczY0IGp1bXAgPSBkaXY2NF9zNjQoYmVoaW5kLCBvcGVyLSZndDtwZXJpb2QpICogb3Blci0mZ3Q7cGVyaW9kOwomIzQzOwomIzQzOwkJZW5kX3RpbWUgPSBrdGltZV9hZGRfbnMoZW5kX3RpbWUsIGp1bXApOwomIzQzOwkJb3Blci0mZ3Q7Y3ljbGVfZW5kX3RpbWUgPSBrdGltZV9hZGRfbnMob3Blci0mZ3Q7Y3ljbGVfZW5kX3RpbWUsIGp1bXApOwogCX0KIAotCWVuZF90aW1lID0ga3RpbWVfYWRkX25zKGVudHJ5LSZndDtlbmRfdGltZSwgbmV4dC0mZ3Q7aW50ZXJ2YWwpOwotCWVuZF90aW1lID0gbWluX3Qoa3RpbWVfdCwgZW5kX3RpbWUsIG9wZXItJmd0O2N5Y2xlX2VuZF90aW1lKTsKJiM0MzsJYnVkZ2V0ID0gMiAqIG9wZXItJmd0O251bV9lbnRyaWVzOwomIzQzOwlkbyB7CiYjNDM7CQlpZiAoc2hvdWxkX3Jlc3RhcnRfY3ljbGUob3BlciwgZW50cnksIGVuZF90aW1lKSkgewomIzQzOwkJCW5leHQgPSBsaXN0X2ZpcnN0X2VudHJ5KCZhbXA7b3Blci0mZ3Q7ZW50cmllcywKJiM0MzsJCQkJCQlzdHJ1Y3Qgc2NoZWRfZW50cnksIGxpc3QpOwomIzQzOwkJCW9wZXItJmd0O2N5Y2xlX2VuZF90aW1lID0ga3RpbWVfYWRkX25zKG9wZXItJmd0O2N5Y2xlX2VuZF90aW1lLAomIzQzOwkJCQkJCQkgICAgb3Blci0mZ3Q7cGVyaW9kKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJbmV4dCA9IGxpc3RfbmV4dF9lbnRyeShlbnRyeSwgbGlzdCk7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQluZXh0X3N0YXJ0ID0gZW5kX3RpbWU7CiYjNDM7CQllbmRfdGltZSA9IGt0aW1lX2FkZF9ucyhuZXh0X3N0YXJ0LCBuZXh0LSZndDtpbnRlcnZhbCk7CiYjNDM7CQllbmRfdGltZSA9IG1pbl90KGt0aW1lX3QsIGVuZF90aW1lLCBvcGVyLSZndDtjeWNsZV9lbmRfdGltZSk7CiYjNDM7CQllbnRyeSA9IG5leHQ7CiYjNDM7CX0gd2hpbGUgKHVubGlrZWx5KGt0aW1lX2NvbXBhcmUoZW5kX3RpbWUsIG5vdykgJmx0Oz0gMCkgJmFtcDsmYW1wOyBidWRnZXQtLSk7CiAKJiM0MzsJLyogbmV4dCBjYW4gYmUgdGhlIGVudHJ5IGFscmVhZHkgcHVibGlzaGVkIGFzIHEtJmd0O2N1cnJlbnRfZW50cnkgKGEKJiM0MzsJICogc2luZ2xlLWVudHJ5IHNjaGVkdWxlLCBvciBhIGNhdGNoLXVwIG9mIHdob2xlIHBlcmlvZHMpLCBzbyB0aGUKJiM0MzsJICogY2xvc2UgdGltZXMgYW5kIGJ1ZGdldHMgYmVsb3cgYXJlIHJld3JpdHRlbiBpbiBwbGFjZSB3aGlsZQomIzQzOwkgKiB0YXByaW9fZGVxdWV1ZV9mcm9tX3R4cSgpIG1heSBiZSByZWFkaW5nIHRoZW0uCiYjNDM7CSAqLwogCWZvciAodGMgPSAwOyB0YyAmbHQ7IG51bV90YzsgdGMmIzQzOyYjNDM7KSB7CiAJCWlmIChuZXh0LSZndDtnYXRlX2R1cmF0aW9uW3RjXSA9PSBvcGVyLSZndDtjeWNsZV90aW1lKQogCQkJbmV4dC0mZ3Q7Z2F0ZV9jbG9zZV90aW1lW3RjXSA9IEtUSU1FX01BWDsKIAkJZWxzZQotCQkJbmV4dC0mZ3Q7Z2F0ZV9jbG9zZV90aW1lW3RjXSA9IGt0aW1lX2FkZF9ucyhlbnRyeS0mZ3Q7ZW5kX3RpbWUsCiYjNDM7CQkJbmV4dC0mZ3Q7Z2F0ZV9jbG9zZV90aW1lW3RjXSA9IGt0aW1lX2FkZF9ucyhuZXh0X3N0YXJ0LAogCQkJCQkJCQkgbmV4dC0mZ3Q7Z2F0ZV9kdXJhdGlvblt0Y10pOwogCX0KIApAQCAtMTEzMCw2ICYjNDM7MTE2Miw4IEBAIHN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YiwKIAkJCQkgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqbmV3LAogCQkJCSBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CiYjNDM7CXN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnk7CiYjNDM7CWt0aW1lX3QgY3ljbGUgPSAwOwogCWludCBlcnIgPSAwOwogCiAJaWYgKHRiW1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9TSU5HTEVfRU5UUlldKSB7CkBAIC0xMTUyLDEzICYjNDM7MTE4NiwxMCBAQCBzdGF0aWMgaW50IHBhcnNlX3RhcHJpb19zY2hlZHVsZShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsCiAJaWYgKGVyciAmbHQ7IDApCiAJCXJldHVybiBlcnI7CiAKLQlpZiAoIW5ldy0mZ3Q7Y3ljbGVfdGltZSkgewotCQlzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5OwotCQlrdGltZV90IGN5Y2xlID0gMDsKLQotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmYW1wO25ldy0mZ3Q7ZW50cmllcywgbGlzdCkKLQkJCWN5Y2xlID0ga3RpbWVfYWRkX25zKGN5Y2xlLCBlbnRyeS0mZ3Q7aW50ZXJ2YWwpOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmYW1wO25ldy0mZ3Q7ZW50cmllcywgbGlzdCkKJiM0MzsJCWN5Y2xlID0ga3RpbWVfYWRkX25zKGN5Y2xlLCBlbnRyeS0mZ3Q7aW50ZXJ2YWwpOwogCiYjNDM7CWlmICghbmV3LSZndDtjeWNsZV90aW1lKSB7CiAJCWlmIChjeWNsZSAmbHQ7IDAgfHwgY3ljbGUgJmd0OyBJTlRfTUFYKSB7CiAJCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7JiMzOTtjeWNsZV90aW1lJiMzOTsgaXMgdG9vIGJpZyYjMzQ7KTsKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtMTE3Miw2ICYjNDM7MTIwMyw3IEBAIHN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YiwKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiYjNDM7CW5ldy0mZ3Q7cGVyaW9kID0gbWluKG5ldy0mZ3Q7Y3ljbGVfdGltZSwgY3ljbGUpOwogCXRhcHJpb19jYWxjdWxhdGVfZ2F0ZV9kdXJhdGlvbnMocSwgbmV3KTsKIAogCXJldHVybiAwOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzMzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhpcyBwYXRjaCwgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIG5ldHdvcmtpbmcga2VybmVsIGV4cGVydDoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBUQVBSSU8gYW5kIEZ1enppbmcgUG90ZW50aWFsKioKCkFscmlnaHQsIGEgbmV3IHBhdGNoIHRvIGBuZXQvc2NoZWQvc2NoX3RhcHJpby5jYC4gTXkgaW5pdGlhbCByZWFjdGlvbiBpcyB0byBhc3Nlc3MgaXRzIGltcGFjdCDigJMgZG9lcyBpdCBpbnRyb2R1Y2UgbmV3IGZ1bmN0aW9uYWxpdHkgb3Igc2lnbmlmaWNhbnRseSBhbHRlciBleGlzdGluZyBiZWhhdmlvciB0aGF0IHdhcnJhbnRzIGZ1enppbmc/IFRBUFJJTyBpcywgb2YgY291cnNlLCB0aGUgVGltZS1Bd2FyZSBQcmlvcml0eSBxdWV1aW5nIGRpc2NpcGxpbmUsIGEgY3JpdGljYWwgY29tcG9uZW50IGluIG1hbnkgbW9kZXJuIG5ldHdvcmsgZGVwbG95bWVudHMsIGVzcGVjaWFsbHkgdGhvc2UgZGVhbGluZyB3aXRoIHRpbWUtc2Vuc2l0aXZlIHRyYWZmaWMuIEFueSBjaGFuZ2UgaGVyZSBkZXNlcnZlcyBhIHRob3JvdWdoIGxvb2suIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGRpdmUgaW50byB0aGlzIGZpbGUgdXNpbmcgbXkgZXN0YWJsaXNoZWQgdG9vbGNoYWluIGFuZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBrZXJuZWwgdG8gc2VlIHByZWNpc2VseSB3aGF0IHRoaXMgcGF0Y2ggbW9kaWZpZXMuIEkmIzM5O2xsIG5lZWQgdG8gcmFwaWRseSBkZXRlcm1pbmUgaG93IHRoaXMgY2hhbmdlIGFmZmVjdHMgVEFQUklPJiMzOTtzIGNvcmUgZnVuY3Rpb25hbGl0eSwgYW55IGFkZGVkIGNvbmZpZ3VyYWJsZSBvcHRpb25zLCBvciBjaGFuZ2VzIHRvIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBrZXJuZWwgY29tcG9uZW50cyBhbmQsIG9mIGNvdXJzZSwgcG90ZW50aWFsIG5ldyBjb2RlIHBhdGhzIHRoYXQgY291bGQgYmUgcmlwZSBmb3IgZnV6emluZyB2dWxuZXJhYmlsaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9TQ0hfVEFQUklPJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnPTE2Nz1jb25maWcgTkVUX1NDSF9NUVBSSU9fTElCXG4tLVxubmV0L3NjaGVkL0tjb25maWctMTcxLVxubmV0L3NjaGVkL0tjb25maWc6MTcyOmNvbmZpZyBORVRfU0NIX1RBUFJJT1xubmV0L3NjaGVkL0tjb25maWctMTczLVx0dHJpc3RhdGUgXCYjMzQ7VGltZSBBd2FyZSBQcmlvcml0eSAodGFwcmlvKSBTY2hlZHVsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTM5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIEtjb25maWcgaW4gbmV0L3NjaGVkKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIG5ldHdvcmtpbmcgc2NoZWR1bGVyLiBUaW1lIHRvIHB1bGwgdXAgdGhlIGBuZXQvc2NoZWQvS2NvbmZpZ2AgZmlsZSBhbmQgdGFrZSBhIGxvb2ssIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxNzIuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjcnVjaWFsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIG9yIGRlcGVuZGVuY2llcyB0aGF0IGFyZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZmluZXIgcG9pbnRzIG9mIHRoZSBzY2hlZHVsZXImIzM5O3MgYmVoYXZpb3IuIFRoaXMgaXMgcHJvYmFibHkgd2hlcmUgdGhlIHJlYWxseSBpbXBvcnRhbnQsIG5vbi1vYnZpb3VzIHN0dWZmIGlzIGdvaW5nIHRvIGJlIGRlZmluZWQuIEkmIzM5O20gaG9waW5nIEkmIzM5O2xsIGJlIGFibGUgdG8gc3BvdCBhbnkgc3VidGxldGllcyByaWdodCBhd2F5IHNvIEkgY2FuIGJ1aWxkIGEgbWVudGFsIG1vZGVsIG9mIGhvdyBpdCBhbGwgaGFuZ3MgdG9nZXRoZXIuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZGlnIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE2NTpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2NoX2V0Zi5cbiAxNjY6XHRcbiAxNjc6XHRjb25maWcgTkVUX1NDSF9NUVBSSU9fTElCXG4gMTY4Olx0XHR0cmlzdGF0ZVxuIDE2OTpcdFx0aGVscFxuIDE3MDpcdFx0ICBDb21tb24gbGlicmFyeSBmb3IgbWFuaXB1bGF0aW5nIG1xcHJpbyBxdWV1ZSBjb25maWd1cmF0aW9ucy5cbiAxNzE6XHRcbiAxNzI6XHRjb25maWcgTkVUX1NDSF9UQVBSSU9cbiAxNzM6XHRcdHRyaXN0YXRlIFwmIzM0O1RpbWUgQXdhcmUgUHJpb3JpdHkgKHRhcHJpbykgU2NoZWR1bGVyXCYjMzQ7XG4gMTc0Olx0XHRzZWxlY3QgTkVUX1NDSF9NUVBSSU9fTElCXG4gMTc1Olx0XHRoZWxwXG4gMTc2Olx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBUaW1lIEF3YXJlIFByaW9yaXR5ICh0YXByaW8pIHBhY2tldFxuIDE3NzpcdFx0ICBzY2hlZHVsaW5nIGFsZ29yaXRobS5cbiAxNzg6XHRcbiAxNzk6XHRcdCAgU2VlIHRoZSB0b3Agb2YgXHUwMDNjZmlsZTpuZXQvc2NoZWQvc2NoX3RhcHJpby5jXHUwMDNlIGZvciBtb3JlIGRldGFpbHMuXG4gMTgwOlx0XG4gMTgxOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAxODI6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNjaF90YXByaW8uXG4gMTgzOlx0XG4gMTg0Olx0Y29uZmlnIE5FVF9TQ0hfR1JFRFxuIDE4NTpcdFx0dHJpc3RhdGUgXCYjMzQ7R2VuZXJpYyBSYW5kb20gRWFybHkgRGV0ZWN0aW9uIChHUkVEKVwmIzM0O1xuIDE4NjpcdFx0aGVscFxuIDE4NzpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgR2VuZXJpYyBSYW5kb20gRWFybHkgRGV0ZWN0aW9uXG4gMTg4Olx0XHQgIChHUkVEKSBwYWNrZXQgc2NoZWR1bGluZyBhbGdvcml0aG0gZm9yIHNvbWUgb2YgeW91ciBuZXR3b3JrIGRldmljZXNcbiAxODk6XHRcdCAgKHNlZSB0aGUgdG9wIG9mIFx1MDAzY2ZpbGU6bmV0L3NjaGVkL3NjaF9yZWQuY1x1MDAzZSBmb3IgZGV0YWlscyBhbmRcbiAxOTA6XHRcdCAgcmVmZXJlbmNlcyBhYm91dCB0aGUgYWxnb3JpdGhtKS5cbiAxOTE6XHRcbiAxOTI6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDE5MzpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2NoX2dyZWQuXG4gMTk0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgxNwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgTkVUX1NDSF9UQVBSSU8gQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBmb3IgYE5FVF9TQ0hfVEFQUklPYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiBhbnkgc3VwcG9ydGluZyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlICphbHNvKiBuZWVkZWQgaW4gb3JkZXIgZm9yIGBORVRfU0NIX1RBUFJJT2AgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IHRoaXMgaW52ZXN0aWdhdGlvbiBpcyB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIGZpbGVzLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIGBuZXQvS2NvbmZpZ2Agb3IgcG9zc2libHkgdGhlIG1vcmUgc3BlY2lmaWMgYG5ldC9zY2hlZC9LY29uZmlnYCBmaWxlIHRvIHNlZSB3aGF0IHRoZSBidWlsZCBzeXN0ZW0gZXhwZWN0cy4gVGhhdCBzaG91bGQgcmV2ZWFsIHdoYXQgb3RoZXIgc2V0dGluZ3MgbWlnaHQgbmVlZCB0byBiZSBlbmFibGVkIGFsb25nc2lkZSBgTkVUX1NDSF9UQVBSSU9gLiBIb3BlZnVsbHksIHRoaXMgd2lsbCBzaGVkIHNvbWUgbGlnaHQgb24gd2hhdCBvdGhlciBwaWVjZXMgb2YgdGhlIG5ldHdvcmsgc3RhY2sgYXJlIGludm9sdmVkIGluIHN1cHBvcnRpbmcgdGhpcyBUcmFmZmljIEF3YXJlIFNoYXBpbmcgc2NoZWR1bGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBUcmFmZmljIGNvbnRyb2wgY29uZmlndXJhdGlvbi5cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0bWVudWNvbmZpZyBORVRfU0NIRURcbiAgIDc6XHRcdGJvb2wgXCYjMzQ7UW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nXCYjMzQ7XG4gICA4Olx0XHRzZWxlY3QgTkVUX1NDSF9GSUZPXG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIFdoZW4gdGhlIGtlcm5lbCBoYXMgc2V2ZXJhbCBwYWNrZXRzIHRvIHNlbmQgb3V0IG92ZXIgYSBuZXR3b3JrXG4gIDExOlx0XHQgIGRldmljZSwgaXQgaGFzIHRvIGRlY2lkZSB3aGljaCBvbmVzIHRvIHNlbmQgZmlyc3QsIHdoaWNoIG9uZXMgdG9cbiAgMTI6XHRcdCAgZGVsYXksIGFuZCB3aGljaCBvbmVzIHRvIGRyb3AuIFRoaXMgaXMgdGhlIGpvYiBvZiB0aGUgcXVldWVpbmdcbiAgMTM6XHRcdCAgZGlzY2lwbGluZXMsIHNldmVyYWwgZGlmZmVyZW50IGFsZ29yaXRobXMgZm9yIGhvdyB0byBkbyB0aGlzXG4gIDE0Olx0XHQgIFwmIzM0O2ZhaXJseVwmIzM0OyBoYXZlIGJlZW4gcHJvcG9zZWQuXG4gIDE1Olx0XG4gIDE2Olx0XHQgIElmIHlvdSBzYXkgTiBoZXJlLCB5b3Ugd2lsbCBnZXQgdGhlIHN0YW5kYXJkIHBhY2tldCBzY2hlZHVsZXIsIHdoaWNoXG4gIDE3Olx0XHQgIGlzIGEgRklGTyAoZmlyc3QgY29tZSwgZmlyc3Qgc2VydmVkKS4gSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGJlXG4gIDE4Olx0XHQgIGFibGUgdG8gY2hvb3NlIGZyb20gYW1vbmcgc2V2ZXJhbCBhbHRlcm5hdGl2ZSBhbGdvcml0aG1zIHdoaWNoIGNhblxuICAxOTpcdFx0ICB0aGVuIGJlIGF0dGFjaGVkIHRvIGRpZmZlcmVudCBuZXR3b3JrIGRldmljZXMuIFRoaXMgaXMgdXNlZnVsIGZvclxuICAyMDpcdFx0ICBleGFtcGxlIGlmIHNvbWUgb2YgeW91ciBuZXR3b3JrIGRldmljZXMgYXJlIHJlYWwgdGltZSBkZXZpY2VzIHRoYXRcbiAgMjE6XHRcdCAgbmVlZCBhIGNlcnRhaW4gbWluaW11bSBkYXRhIGZsb3cgcmF0ZSwgb3IgaWYgeW91IG5lZWQgdG8gbGltaXQgdGhlXG4gIDIyOlx0XHQgIG1heGltdW0gZGF0YSBmbG93IHJhdGUgZm9yIHRyYWZmaWMgd2hpY2ggbWF0Y2hlcyBzcGVjaWZpZWQgY3JpdGVyaWEuXG4gIDIzOlx0XHQgIFRoaXMgY29kZSBpcyBjb25zaWRlcmVkIHRvIGJlIGV4cGVyaW1lbnRhbC5cbiAgMjQ6XHRcbiAgMjU6XHRcdCAgVG8gYWRtaW5pc3RlciB0aGVzZSBzY2hlZHVsZXJzLCB5b3UmIzM5O2xsIG5lZWQgdGhlIHVzZXItbGV2ZWwgdXRpbGl0aWVzXG4gIDI2Olx0XHQgIGZyb20gdGhlIHBhY2thZ2UgaXByb3V0ZTImIzQzO3RjIGF0XG4gIDI3Olx0XHQgIFx1MDAzY2h0dHBzOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L3V0aWxzL25ldC9pcHJvdXRlMi9cdTAwM2UuICBUaGF0IHBhY2thZ2VcbiAgMjg6XHRcdCAgYWxzbyBjb250YWlucyBzb21lIGRvY3VtZW50YXRpb247IGZvciBtb3JlLCBjaGVjayBvdXRcbiAgMjk6XHRcdCAgXHUwMDNjaHR0cDovL3d3dy5saW51eGZvdW5kYXRpb24ub3JnL2NvbGxhYm9yYXRlL3dvcmtncm91cHMvbmV0d29ya2luZy9pcHJvdXRlMlx1MDAzZS5cbiAgMzA6XHRcbiAgMzE6XHRcdCAgVGhpcyBRdWFsaXR5IG9mIFNlcnZpY2UgKFFvUykgc3VwcG9ydCB3aWxsIGVuYWJsZSB5b3UgdG8gdXNlXG4gIDMyOlx0XHQgIERpZmZlcmVudGlhdGVkIFNlcnZpY2VzIChkaWZmc2VydikgYW5kIFJlc291cmNlIFJlc2VydmF0aW9uIFByb3RvY29sXG4gIDMzOlx0XHQgIChSU1ZQKSBvbiB5b3VyIExpbnV4IHJvdXRlciBpZiB5b3UgYWxzbyBzYXkgWSB0byB0aGUgY29ycmVzcG9uZGluZ1xuICAzNDpcdFx0ICBjbGFzc2lmaWVycyBiZWxvdy4gIERvY3VtZW50YXRpb24gYW5kIHNvZnR3YXJlIGlzIGF0XG4gIDM1Olx0XHQgIFx1MDAzY2h0dHA6Ly9kaWZmc2Vydi5zb3VyY2Vmb3JnZS5uZXQvXHUwMDNlLlxuICAzNjpcdFxuICAzNzpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSBhbmQgdG8gXCYjMzQ7L3Byb2MgZmlsZSBzeXN0ZW1cJiMzNDsgYmVsb3csIHlvdSB3aWxsIGJlIGFibGVcbiAgMzg6XHRcdCAgdG8gcmVhZCBzdGF0dXMgaW5mb3JtYXRpb24gYWJvdXQgcGFja2V0IHNjaGVkdWxlcnMgZnJvbSB0aGUgZmlsZVxuICAzOTpcdFx0ICAvcHJvYy9uZXQvcHNjaGVkLlxuICA0MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3MTAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipEaXZpbmcgaW50byB0aGUgVEFQUklPIFNjaGVkdWxlciBDb2RlKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgYSBxdWljayByZWZyZXNoZXIgb24gdGhlIGBuZXQvc2NoZWQvc2NoX3RhcHJpby5jYCBjb2RlLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHF1aWNrbHkgaWRlbnRpZnkgYWxsIHRoZSBlbnRyeSBwb2ludHMgYW5kIHRoZSBjcnVjaWFsIGZ1bmN0aW9ucyBkZWZpbmVkIHdpdGhpbiB0aGlzIGZpbGUuIFRoaXMgZ2l2ZXMgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBUYXByaW8gc2NoZWR1bGVyJiMzOTtzIGNvcmUgZnVuY3Rpb25hbGl0eSwgbGF5aW5nIHRoZSBmb3VuZGF0aW9uIGZvciBhIGRlZXBlciBkaXZlLiBOZXh0LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0JiMzOTtzIGJlZW4gZGVmaW5lZCBpbiB0aGUgZmlsZS4gRXNzZW50aWFsbHksIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGF0IHN5bWJvbHMgYXJlIGV4cG9zZWQgYnkgYHNjaF90YXByaW8uY2AgaW4gb3JkZXIgdG8gc2VlIHdoYXQgdGhlIG1vZHVsZSBpcyBkb2luZy4gV2l0aCB0aGlzIGNvbnRleHQsIEkgY2FuIGdyYXNwIHRoZSBzY2hlZHVsZXImIzM5O3MgYXJjaGl0ZWN0dXJlIGFuZCBob3cgaXRzIGVsZW1lbnRzIGludGVycmVsYXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtec3RhdGljIChpbnR8dm9pZHxzdHJ1Y3R8ZW51bSkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX3RhcHJpby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MzU9c3RhdGljIExJU1RfSEVBRCh0YXByaW9fbGlzdCk7XG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjM2OnN0YXRpYyBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSB0YXByaW9faGF2ZV9icm9rZW5fbXFwcmlvO1xubmV0L3NjaGVkL3NjaF90YXByaW8uYzozNzpzdGF0aWMgc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgdGFwcmlvX2hhdmVfd29ya2luZ19tcXByaW87XG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTM4LVxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MTE4PXN0cnVjdCBfX3RjX3RhcHJpb19xb3B0X29mZmxvYWQge1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTIyLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMjM6c3RhdGljIHZvaWQgdGFwcmlvX2NhbGN1bGF0ZV9nYXRlX2R1cmF0aW9ucyhzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMjQtXHRcdFx0XHRcdCAgICBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZClcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTE5NT1zdGF0aWMga3RpbWVfdCB0YXByaW9fZ2V0X3RpbWUoY29uc3Qgc3RydWN0IHRhcHJpb19zY2hlZCAqcSlcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE5OS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjAwOnN0YXRpYyB2b2lkIHRhcHJpb19mcmVlX3NjaGVkX2NiKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjAxLXtcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIxMi1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjEzOnN0YXRpYyB2b2lkIHN3aXRjaF9zY2hlZHVsZXMoc3RydWN0IHRhcHJpb19zY2hlZCAqcSxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjE0LVx0XHRcdCAgICAgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqKmFkbWluLFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MjM5PXN0YXRpYyBrdGltZV90IGdldF9pbnRlcnZhbF9lbmRfdGltZShzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZCxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI2MC1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjYxOnN0YXRpYyBpbnQgbGVuZ3RoX3RvX2R1cmF0aW9uKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIGludCBsZW4pXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI2Mi17XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNjUtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjI2NjpzdGF0aWMgaW50IGR1cmF0aW9uX3RvX2xlbmd0aChzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCB1NjQgZHVyYXRpb24pXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI2Ny17XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNzQtICovXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjI3NTpzdGF0aWMgdm9pZCB0YXByaW9fdXBkYXRlX3F1ZXVlX21heF9zZHUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjc2LVx0XHRcdFx0XHRzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZCxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTMyNi0gKi9cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MzI3OnN0YXRpYyBzdHJ1Y3Qgc2NoZWRfZW50cnkgKmZpbmRfZW50cnlfdG9fdHJhbnNtaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMzI4LVx0XHRcdFx0XHRcdCAgc3RydWN0IFFkaXNjICpzY2gsXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYz01NDQ9c3RhdGljIGJvb2wgdGFwcmlvX3NrYl9leGNlZWRzX3F1ZXVlX21heF9zZHUoc3RydWN0IFFkaXNjICpzY2gsXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy01NjQtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjU2NTpzdGF0aWMgaW50IHRhcHJpb19lbnF1ZXVlX29uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNTY2LVx0XHRcdCAgICAgIHN0cnVjdCBRZGlzYyAqY2hpbGQsIHN0cnVjdCBza19idWZmICoqdG9fZnJlZSlcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTU4NS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6NTg2OnN0YXRpYyBpbnQgdGFwcmlvX2VucXVldWVfc2VnbWVudGVkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy01ODctXHRcdFx0XHQgICAgc3RydWN0IFFkaXNjICpjaGlsZCxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTYzMC0gKi9cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6NjMxOnN0YXRpYyBpbnQgdGFwcmlvX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTYzMi1cdFx0XHQgIHN0cnVjdCBza19idWZmICoqdG9fZnJlZSlcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTY1OS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6NjYwOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdGFwcmlvX3BlZWsoc3RydWN0IFFkaXNjICpzY2gpXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTY2MS17XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy02NjUtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjY2NjpzdGF0aWMgdm9pZCB0YXByaW9fc2V0X2J1ZGdldHMoc3RydWN0IHRhcHJpb19zY2hlZCAqcSxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNjY3LVx0XHRcdCAgICAgICBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZCxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTY4Ni0vKiBXaGVuIGFuIHNrYiBpcyBzZW50LCBpdCBjb25zdW1lcyBmcm9tIHRoZSBidWRnZXQgb2YgYWxsIHRyYWZmaWMgY2xhc3NlcyAqL1xubmV0L3NjaGVkL3NjaF90YXByaW8uYzo2ODc6c3RhdGljIGludCB0YXByaW9fdXBkYXRlX2J1ZGdldHMoc3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeSwgc2l6ZV90IGxlbixcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNjg4LVx0XHRcdFx0IGludCB0Y19jb25zdW1lZCwgaW50IG51bV90Yylcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTcwOS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6NzEwOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdGFwcmlvX2RlcXVldWVfZnJvbV90eHEoc3RydWN0IFFkaXNjICpzY2gsIGludCB0eHEsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTcxMS1cdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnksXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy03NjYtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjc2NzpzdGF0aWMgdm9pZCB0YXByaW9fbmV4dF90Y190eHEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHRjLCBpbnQgKnR4cSlcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNzY4LXtcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTc4MC0gKi9cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6NzgxOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdGFwcmlvX2RlcXVldWVfdGNfcHJpb3JpdHkoc3RydWN0IFFkaXNjICpzY2gsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTc4Mi1cdFx0XHRcdFx0XHQgIHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnksXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy04MTYtICovXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjgxNzpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnRhcHJpb19kZXF1ZXVlX3R4cV9wcmlvcml0eShzdHJ1Y3QgUWRpc2MgKnNjaCxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtODE4LVx0XHRcdFx0XHRcdCAgIHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnksXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy04MzYtICovXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjgzNzpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnRhcHJpb19kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy04Mzgte1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9ODkwPXN0YXRpYyBib29sIHNob3VsZF9jaGFuZ2Vfc2NoZWR1bGVzKGNvbnN0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKmFkbWluLFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtOTIzLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzo5MjQ6c3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGFkdmFuY2Vfc2NoZWQoc3RydWN0IGhydGltZXIgKnRpbWVyKVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy05MjUte1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MTA1Mz1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgdGFwcmlvX3BvbGljeVtUQ0FfVEFQUklPX0FUVFJfTUFYICYjNDM7IDFdID0ge1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTA2OS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTA3MDpzdGF0aWMgaW50IGZpbGxfc2NoZWRfZW50cnkoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMDcxLVx0XHRcdCAgICBzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5LFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTEwMS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTEwMjpzdGF0aWMgaW50IHBhcnNlX3NjaGVkX2VudHJ5KHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKm4sXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTExMDMtXHRcdFx0ICAgICBzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5LCBpbnQgaW5kZXgsXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMTIwLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMTIxOnN0YXRpYyBpbnQgcGFyc2Vfc2NoZWRfbGlzdChzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICpsaXN0LFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMTIyLVx0XHRcdCAgICBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZCxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTExNjAtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjExNjE6c3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMTYyLVx0XHRcdFx0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKm5ldyxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEyMTEtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjEyMTI6c3RhdGljIGludCB0YXByaW9fcGFyc2VfbXFwcmlvX29wdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMjEzLVx0XHRcdFx0ICAgc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0LFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTIzOS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTI0MDpzdGF0aWMgaW50IHRhcHJpb19nZXRfc3RhcnRfdGltZShzdHJ1Y3QgUWRpc2MgKnNjaCxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTI0MS1cdFx0XHRcdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZCxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEyNzMtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjEyNzQ6c3RhdGljIHZvaWQgc2V0dXBfZmlyc3RfZW5kX3RpbWUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTI3NS1cdFx0XHRcdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZCwga3RpbWVfdCBiYXNlKVxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTMwMy1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTMwNDpzdGF0aWMgdm9pZCB0YXByaW9fc3RhcnRfc2NoZWQoc3RydWN0IFFkaXNjICpzY2gsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEzMDUtXHRcdFx0ICAgICAgIGt0aW1lX3Qgc3RhcnQsIHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKm5ldylcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEzMjUtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjEzMjY6c3RhdGljIHZvaWQgdGFwcmlvX3NldF9waWNvc19wZXJfYnl0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMzI3LVx0XHRcdFx0ICAgICAgc3RydWN0IHRhcHJpb19zY2hlZCAqcSxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEzNTktXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjEzNjA6c3RhdGljIGludCB0YXByaW9fZGV2X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgZXZlbnQsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEzNjEtXHRcdFx0ICAgICAgIHZvaWQgKnB0cilcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEzOTYtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjEzOTc6c3RhdGljIHZvaWQgc2V0dXBfdHh0aW1lKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEzOTgtXHRcdFx0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkLCBrdGltZV90IGJhc2UpXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNDA4LVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxNDA5OnN0YXRpYyBzdHJ1Y3QgdGNfdGFwcmlvX3FvcHRfb2ZmbG9hZCAqdGFwcmlvX29mZmxvYWRfYWxsb2MoaW50IG51bV9lbnRyaWVzKVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNDEwLXtcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTE0NDg9RVhQT1JUX1NZTUJPTF9HUEwodGFwcmlvX29mZmxvYWRfZnJlZSk7XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNDYxLSAqL1xubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxNDYyOnN0YXRpYyB2b2lkIHRhcHJpb19vZmZsb2FkX2NvbmZpZ19jaGFuZ2VkKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEpXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE0NjMte1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MTQ3Mj1zdGF0aWMgdTMyIHRjX21hcF90b19xdWV1ZV9tYXNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiB0Y19tYXNrKVxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTQ5MC1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTQ5MTpzdGF0aWMgdm9pZCB0YXByaW9fc2NoZWRfdG9fb2ZmbG9hZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNDkyLVx0XHRcdFx0ICAgIHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkLFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTUxOS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTUyMDpzdGF0aWMgdm9pZCB0YXByaW9fZGV0ZWN0X2Jyb2tlbl9tcXByaW8oc3RydWN0IHRhcHJpb19zY2hlZCAqcSlcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTUyMS17XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNTM2LVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxNTM3OnN0YXRpYyB2b2lkIHRhcHJpb19jbGVhbnVwX2Jyb2tlbl9tcXByaW8oc3RydWN0IHRhcHJpb19zY2hlZCAqcSlcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTUzOC17XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNTQ3LVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxNTQ4OnN0YXRpYyBpbnQgdGFwcmlvX2VuYWJsZV9vZmZsb2FkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE1NDktXHRcdFx0XHQgc3RydWN0IHRhcHJpb19zY2hlZCAqcSxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE2MTMtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE2MTQ6c3RhdGljIGludCB0YXByaW9fZGlzYWJsZV9vZmZsb2FkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE2MTUtXHRcdFx0XHQgIHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNjU0LSAqL1xubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxNjU1OnN0YXRpYyBpbnQgdGFwcmlvX3BhcnNlX2Nsb2NraWQoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKip0Yixcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTY1Ni1cdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE3MzItXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE3MzM6c3RhdGljIGludCB0YXByaW9fcGFyc2VfdGNfZW50cnkoc3RydWN0IFFkaXNjICpzY2gsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE3MzQtXHRcdFx0XHQgc3RydWN0IG5sYXR0ciAqb3B0LFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTc3OS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTc4MDpzdGF0aWMgaW50IHRhcHJpb19wYXJzZV90Y19lbnRyaWVzKHN0cnVjdCBRZGlzYyAqc2NoLFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNzgxLVx0XHRcdFx0ICAgc3RydWN0IG5sYXR0ciAqb3B0LFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTgyOS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTgzMDpzdGF0aWMgaW50IHRhcHJpb19tcXByaW9fY21wKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE4MzEtXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKm1xcHJpbylcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE4NTMtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE4NTQ6c3RhdGljIGludCB0YXByaW9fY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE4NTUtXHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIwNDgtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIwNDk6c3RhdGljIHZvaWQgdGFwcmlvX3Jlc2V0KHN0cnVjdCBRZGlzYyAqc2NoKVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMDUwLXtcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIwNjMtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIwNjQ6c3RhdGljIHZvaWQgdGFwcmlvX2Rlc3Ryb3koc3RydWN0IFFkaXNjICpzY2gpXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIwNjUte1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjEwMi1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjEwMzpzdGF0aWMgaW50IHRhcHJpb19pbml0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIxMDQtXHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMTY3LVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyMTY4OnN0YXRpYyB2b2lkIHRhcHJpb19hdHRhY2goc3RydWN0IFFkaXNjICpzY2gpXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIxNjkte1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjIwMy1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjIwNDpzdGF0aWMgc3RydWN0IG5ldGRldl9xdWV1ZSAqdGFwcmlvX3F1ZXVlX2dldChzdHJ1Y3QgUWRpc2MgKnNjaCxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjIwNS1cdFx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGNsKVxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjIxNS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjIxNjpzdGF0aWMgaW50IHRhcHJpb19ncmFmdChzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBjbCxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjIxNy1cdFx0XHRzdHJ1Y3QgUWRpc2MgKm5ldywgc3RydWN0IFFkaXNjICoqb2xkLFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjI1OC1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjI1OTpzdGF0aWMgaW50IGR1bXBfZW50cnkoc3RydWN0IHNrX2J1ZmYgKm1zZyxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjI2MC1cdFx0ICAgICAgY29uc3Qgc3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeSlcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIyODgtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIyODk6c3RhdGljIGludCBkdW1wX3NjaGVkdWxlKHN0cnVjdCBza19idWZmICptc2csXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIyOTAtXHRcdFx0IGNvbnN0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnJvb3QpXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMzI0LVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyMzI1OnN0YXRpYyBpbnQgdGFwcmlvX2R1bXBfdGNfZW50cmllcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMzI2LVx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjM1Ny1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjM1ODpzdGF0aWMgaW50IHRhcHJpb19wdXRfc3RhdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1NjQgdmFsLCB1MTYgYXR0cnR5cGUpXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIzNTkte1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjM2Ni1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjM2NzpzdGF0aWMgaW50IHRhcHJpb19kdW1wX3hzdGF0cyhzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IGduZXRfZHVtcCAqZCxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjM2OC1cdFx0XHQgICAgICBzdHJ1Y3QgdGNfdGFwcmlvX3FvcHRfb2ZmbG9hZCAqb2ZmbG9hZCxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI0MTQtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjI0MTU6c3RhdGljIGludCB0YXByaW9fZHVtcF9zdGF0cyhzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IGduZXRfZHVtcCAqZClcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjQxNi17XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNDIzLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNDI0OnN0YXRpYyBpbnQgdGFwcmlvX2R1bXAoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI0MjUte1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjQ5My1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjQ5NDpzdGF0aWMgc3RydWN0IFFkaXNjICp0YXByaW9fbGVhZihzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBjbClcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjQ5NS17XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0yNTA2PXN0YXRpYyB1bnNpZ25lZCBsb25nIHRhcHJpb19maW5kKHN0cnVjdCBRZGlzYyAqc2NoLCB1MzIgY2xhc3NpZClcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1MTQtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjI1MTU6c3RhdGljIGludCB0YXByaW9fZHVtcF9jbGFzcyhzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBjbCxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjUxNi1cdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y21zZyAqdGNtKVxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjUyNi1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjUyNzpzdGF0aWMgaW50IHRhcHJpb19kdW1wX2NsYXNzX3N0YXRzKHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGNsLFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNTI4LVx0XHRcdFx0ICAgc3RydWN0IGduZXRfZHVtcCAqZClcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1NDYtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjI1NDc6c3RhdGljIHZvaWQgdGFwcmlvX3dhbGsoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBxZGlzY193YWxrZXIgKmFyZylcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjU0OC17XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNTYxLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNTYyOnN0YXRpYyBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0YXByaW9fc2VsZWN0X3F1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoLFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNTYzLVx0XHRcdFx0XHRcdHN0cnVjdCB0Y21zZyAqdGNtKVxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MjU2OD1zdGF0aWMgY29uc3Qgc3RydWN0IFFkaXNjX2NsYXNzX29wcyB0YXByaW9fY2xhc3Nfb3BzID0ge1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjU3Ny1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjU3ODpzdGF0aWMgc3RydWN0IFFkaXNjX29wcyB0YXByaW9fcWRpc2Nfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1NzktXHQuY2xfb3BzXHRcdD0gXHUwMDI2dGFwcmlvX2NsYXNzX29wcyxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTI1OTQ9TU9EVUxFX0FMSUFTX05FVF9TQ0goXCYjMzQ7dGFwcmlvXCYjMzQ7KTtcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjU5NS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjU5NjpzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHRhcHJpb19kZXZpY2Vfbm90aWZpZXIgPSB7XG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1OTctXHQubm90aWZpZXJfY2FsbCA9IHRhcHJpb19kZXZfbm90aWZpZXIsXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNTk5LVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNjAwOnN0YXRpYyBpbnQgX19pbml0IHRhcHJpb19tb2R1bGVfaW5pdCh2b2lkKVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNjAxLXtcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI2MDktXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjI2MTA6c3RhdGljIHZvaWQgX19leGl0IHRhcHJpb19tb2R1bGVfZXhpdCh2b2lkKVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNjExLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1OTMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA2NTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUYXByaW8gUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2guIEkmIzM5O20gbG9va2luZyBhdCBtb2RpZmljYXRpb25zIHRvIGBuZXQvc2NoZWQvc2NoX3RhcHJpby5jYCwgc3BlY2lmaWNhbGx5IGBhZHZhbmNlX3NjaGVkYCBhbmQgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAuIEluIGBhZHZhbmNlX3NjaGVkYCwgd2UgaGF2ZSB0aGUgaHJ0aW1lciBjYWxsYmFjayBhZHZhbmNpbmcgdGhlIFRhcHJpbyBzY2hlZHVsZS4gVGhlIGtleSBoZXJlIGlzIHRoZSBjYXRjaC11cCBsb2dpYyB3aGVuIHRoZSBzY2hlZHVsZSBsYWdzIOKAkyBga3RpbWVfc3ViYCwgdGhlIGB1bmxpa2VseWAgY2hlY2tzLCBhbmQgdGhhdCBgZG8uLi53aGlsZWAgbG9vcCBhZGp1c3RpbmcgZm9yIGRlbGF5cy4gYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAsIGNhbGN1bGF0ZXMgdGhlIG5ldyBwZXJpb2QuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtDYW4gdGhpcyBiZSBoaXQgaW4gYSB0ZXN0IGVudmlyb25tZW50PyYjMzQ7IEFic29sdXRlbHkuIFRhcHJpbyBjYW4gcnVuIG9uICphbnkqIG5ldHdvcmsgaW50ZXJmYWNlLCB3aGV0aGVyIGl0JiMzOTtzIHNvZnR3YXJlLWJhc2VkIHVzaW5nIGhydGltZXIgb3Igb24gdGhlIHVzdWFsIHRhcC92ZXRoL2R1bW15IGludGVyZmFjZXMgdmlhIGB0YyBxZGlzYyBhZGQgLi4uYC4gU28sIHdlIGNhbiBkZWZpbml0ZWx5IHJlcGxpY2F0ZSB0aGlzLgoKVGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IHRvdWNoaW5nIGNvcmUgbmV0d29yayB0cmFmZmljIGNvbnRyb2wgbG9naWMgd2l0aGluIHRoZSBrZXJuZWwuIEl04oCZcyBtb2RpZnlpbmcgdGhlIGNyaXRpY2FsIHRpbWVyIGFkdmFuY2VtZW50IGFsZ29yaXRobSBhbmQgc2NoZWR1bGUgY2FsY3VsYXRpb24gd2l0aGluIHRoZSBUYXByaW8gcWRpc2MsIHdoaWNoIGlzIGNydWNpYWwgZm9yIGRldGVybWluaXN0aWMgc2NoZWR1bGluZy4gRGVmaW5pdGVseSB3b3J0aCBhIGRlZXBlciBsb29rLgoKTm93LCBsZXQmIzM5O3MgdGFsayBmdXp6aW5nLiBZZXMsIHRoaXMgaXMgYSBjbGVhciBjYW5kaWRhdGUuIFdl4oCZcmUgZGVhbGluZyB3aXRoIGZ1bmN0aW9uYWwgbmV0d29yayBxZGlzYyBsb2dpYyB0aGF0JiMzOTtzIGRpcmVjdGx5IGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgKHJ0bmV0bGluayAvIHRjKS4gVGhhdOKAmXMgYSBncmVhdCBhdHRhY2sgc3VyZmFjZS4KCkxldOKAmXMgemVybyBpbiBvbiB0aGUga2V5IHN5bWJvbHM6IGBhZHZhbmNlX3NjaGVkYCAodGhlIGhydGltZXIgY2FsbGJhY2spLCBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCAodGhlIHNjaGVkdWxlIHBhcnNpbmcpLCBgdGFwcmlvX2NoYW5nZWAgKHRoZSBuZXRsaW5rIGVudHJ5IHBvaW50IGZvciBjb25maWd1cmF0aW9uIGNhbGxpbmcgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWApLCBgdGFwcmlvX2luaXRgLCBhbmQgYHRhcHJpb19kZXF1ZXVlYC4gVGhlc2UgYXJlIG91ciBmb2N1cyBwb2ludHMuCgpJJiMzOTttIGNoZWNraW5nIGZvciBleHBvcnRlZCBub24tc3RhdGljIHN5bWJvbHMgYW5kIG1haW4gZW50cnlwb2ludHMuIGB0YXByaW9fcWRpc2Nfb3BzYCBpcyByZWdpc3RlcmVkIGluIGB0YXByaW9fbW9kdWxlX2luaXRgLCBhbmQgd2UgaGF2ZSBgdGFwcmlvX2luaXRgLCBgdGFwcmlvX2NoYW5nZWAsIGBhZHZhbmNlX3NjaGVkYCwgYW5kIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgIGF2YWlsYWJsZS4gR3JlYXQuCgpOb3csIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcy4gYE5FVF9TQ0hfVEFQUklPYCBpcyB1bmRlciBgbWVudWNvbmZpZyBORVRfU0NIRURgLCB3aGljaCBpcyB1bmRlciBgbmV0L0tjb25maWdgLiBgTkVUX1NDSF9UQVBSSU9gIHNlbGVjdHMgYE5FVF9TQ0hfTVFQUklPX0xJQmAuICBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgaW1wYWN0IGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDQwOlx0XG4gIDQxOlx0XHQgIFRoZSBhdmFpbGFibGUgc2NoZWR1bGVycyBhcmUgbGlzdGVkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zOyB5b3VcbiAgNDI6XHRcdCAgY2FuIHNheSBZIHRvIGFzIG1hbnkgYXMgeW91IGxpa2UuIElmIHVuc3VyZSwgc2F5IE4gbm93LlxuICA0MzpcdFxuICA0NDpcdGlmIE5FVF9TQ0hFRFxuICA0NTpcdFxuICA0NjpcdGNvbW1lbnQgXCYjMzQ7UXVldWVpbmcvU2NoZWR1bGluZ1wmIzM0O1xuICA0NzpcdFxuICA0ODpcdGNvbmZpZyBORVRfU0NIX0hUQlxuICA0OTpcdFx0dHJpc3RhdGUgXCYjMzQ7SGllcmFyY2hpY2FsIFRva2VuIEJ1Y2tldCAoSFRCKVwmIzM0O1xuICA1MDpcdFx0aGVscFxuICA1MTpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgSGllcmFyY2hpY2FsIFRva2VuIEJ1Y2tldHMgKEhUQilcbiAgNTI6XHRcdCAgcGFja2V0IHNjaGVkdWxpbmcgYWxnb3JpdGhtLiBTZWVcbiAgNTM6XHRcdCAgXHUwMDNjaHR0cDovL2x1eGlrLmNkaS5jei9+ZGV2aWsvcW9zL2h0Yi9cdTAwM2UgZm9yIGNvbXBsZXRlIG1hbnVhbCBhbmRcbiAgNTQ6XHRcdCAgaW4tZGVwdGggYXJ0aWNsZXMuXG4gIDU1Olx0XG4gIDU2Olx0XHQgIEhUQiBpcyB2ZXJ5IHNpbWlsYXIgdG8gQ0JRIHJlZ2FyZGluZyBpdHMgZ29hbHMgaG93ZXZlciBpcyBoYXNcbiAgNTc6XHRcdCAgZGlmZmVyZW50IHByb3BlcnRpZXMgYW5kIGRpZmZlcmVudCBhbGdvcml0aG0uXG4gIDU4Olx0XG4gIDU5Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAgNjA6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNjaF9odGIuXG4gIDYxOlx0XG4gIDYyOlx0Y29uZmlnIE5FVF9TQ0hfSEZTQ1xuICA2MzpcdFx0dHJpc3RhdGUgXCYjMzQ7SGllcmFyY2hpY2FsIEZhaXIgU2VydmljZSBDdXJ2ZSAoSEZTQylcJiMzNDtcbiAgNjQ6XHRcdGhlbHBcbiAgNjU6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIEhpZXJhcmNoaWNhbCBGYWlyIFNlcnZpY2UgQ3VydmVcbiAgNjY6XHRcdCAgKEhGU0MpIHBhY2tldCBzY2hlZHVsaW5nIGFsZ29yaXRobS5cbiAgNjc6XHRcbiAgNjg6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuICA2OTpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2NoX2hmc2MuXG4gIDcwOlx0XG4gIDcxOlx0Y29uZmlnIE5FVF9TQ0hfUFJJT1xuICA3MjpcdFx0dHJpc3RhdGUgXCYjMzQ7TXVsdGkgQmFuZCBQcmlvcml0eSBRdWV1ZWluZyAoUFJJTylcJiMzNDtcbiAgNzM6XHRcdGhlbHBcbiAgNzQ6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYW4gbi1iYW5kIHByaW9yaXR5IHF1ZXVlIHBhY2tldFxuICA3NTpcdFx0ICBzY2hlZHVsZXIuXG4gIDc2Olx0XG4gIDc3Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAgNzg6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNjaF9wcmlvLlxuICA3OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzM0OQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipLY29uZmlnIERpdmUgZm9yIE5FVF9TQ0hFRCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gbmV0d29ya2luZyBzY2hlZHVsZXJzLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGBuZXQvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgc3RhbmRhcmQgcGxhY2UgaW4gdGhlIExpbnV4IGtlcm5lbCBzb3VyY2UgZm9yIG5ldHdvcmstcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEl0JiMzOTtzIHRoZSBjZW50cmFsIGh1YiBmb3IgbW9zdCBvZiB0aGUgbmV0d29yayBmZWF0dXJlIGtub2JzLiBJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhhdCBmaWxlIGxvb2tpbmcgZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gJiMzNDtORVRfU0NIRUQmIzM0Oy4gSXQgc2hvdWxkIGJlIGRlZmluZWQgdGhlcmUsIGFuZCBmcm9tIHRoZXJlIEkgY2FuIGZpbmQgaXRzIGRlcGVuZGVuY2llcywgYW5kIGl0JiMzOTtzIGRlZmF1bHQgYmVoYXZpb3IuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gdHVybiB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c291cmNlLipuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz0yNjk9c291cmNlIFwmIzM0O25ldC9tYWM4MDIxNTQvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWc6MjcwOnNvdXJjZSBcJiMzNDtuZXQvc2NoZWQvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWctMjcxLXNvdXJjZSBcJiMzNDtuZXQvZGNiL0tjb25maWdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2MTMKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBCdWlsZCBQcm9jZXNzIGZvciBgc2NoX3RhcHJpby5jYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYHNjaF90YXByaW8uY2AgdHJhZmZpYyBjb250cm9sIHNjaGVkdWxlciBtb2R1bGUgaXMgYmVpbmcgY29tcGlsZWQuIFRvIGRvIHRoYXQsIHRoZSBtb3N0IGRpcmVjdCBhcHByb2FjaCBpcyB0byBleGFtaW5lIHRoZSBgbmV0L3NjaGVkL01ha2VmaWxlYC4gVGhpcyBpcyB3aGVyZSB0aGUgYnVpbGQgc3lzdGVtIGNvbmZpZ3VyYXRpb24gZm9yIHRoZXNlIG5ldHdvcmsgc2NoZWR1bGluZyBjb21wb25lbnRzIHJlc2lkZXMsIGFuZCBpdCBzaG91bGQgcmV2ZWFsIHRoZSByZWxldmFudCBjb21waWxhdGlvbiBmbGFncywgZGVwZW5kZW5jaWVzLCBhbmQgdWx0aW1hdGVseSwgaG93IGBzY2hfdGFwcmlvLmNgIGdldHMgdHJhbnNmb3JtZWQgaW50byBvYmplY3QgY29kZSBhbmQgbGlua2VkIGludG8gdGhlIGtlcm5lbCBtb2R1bGUuIFRoaXMgaXMgdGhlIHBsYWNlIHRvIHN0YXJ0IGRyaWxsaW5nIGRvd24gaW50byB0aGUgZGV0YWlscyBvZiB0aGUgYnVpbGQgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2NoX3RhcHJpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZz0xNzI9Y29uZmlnIE5FVF9TQ0hfVEFQUklPXG4tLVxubmV0L3NjaGVkL0tjb25maWctMTc4LVxubmV0L3NjaGVkL0tjb25maWc6MTc5Olx0ICBTZWUgdGhlIHRvcCBvZiBcdTAwM2NmaWxlOm5ldC9zY2hlZC9zY2hfdGFwcmlvLmNcdTAwM2UgZm9yIG1vcmUgZGV0YWlscy5cbm5ldC9zY2hlZC9LY29uZmlnLTE4MC1cbm5ldC9zY2hlZC9LY29uZmlnLTE4MS1cdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxubmV0L3NjaGVkL0tjb25maWc6MTgyOlx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2NoX3RhcHJpby5cbm5ldC9zY2hlZC9LY29uZmlnLTE4My1cbi0tXG5uZXQvc2NoZWQvTWFrZWZpbGU9NjM9b2JqLSQoQ09ORklHX05FVF9TQ0hfRVRGKVx0JiM0Mzs9IHNjaF9ldGYub1xubmV0L3NjaGVkL01ha2VmaWxlOjY0Om9iai0kKENPTkZJR19ORVRfU0NIX1RBUFJJTylcdCYjNDM7PSBzY2hfdGFwcmlvLm9cbm5ldC9zY2hlZC9NYWtlZmlsZS02NS1vYmotJChDT05GSUdfTkVUX1NDSF9CUEYpXHQmIzQzOz0gYnBmX3FkaXNjLm9cbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTItXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjM6LyogbmV0L3NjaGVkL3NjaF90YXByaW8uY1x0IFRpbWUgQXdhcmUgUHJpb3JpdHkgU2NoZWR1bGVyXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTQtICpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxMTkKCQkJCQkJCW91dHB1dDogMTU2CgkJCQkJCQl0aG91Z2h0czogMTUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBzb21lIG5ldyBjb25maWd1cmF0aW9ucyB0byBjb25zaWRlcjogYE5FVF9TQ0hFRGAgYW5kIGBORVRfU0NIX1RBUFJJT2AuIE15IHByaW1hcnkgZm9jdXMsIGJhc2VkIG9uIHRoZXNlIGNvbmZpZ3VyYXRpb25zLCB3aWxsIGJlIG9uIHRoZXNlIHN5bWJvbHM6IGBhZHZhbmNlX3NjaGVkYCwgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAsIGB0YXByaW9fY2hhbmdlYCwgYW5kIGB0YXByaW9faW5pdGAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIGFuZC9vciB2YXJpYWJsZXMgdGhhdCBhcmUgbGlrZWx5IHRvIHNlZSBzb21lIGNoYW5nZXMgd2l0aCB0aGVzZSBjb25maWdzIGVuYWJsZWQuCgpJJiMzOTt2ZSBhbHJlYWR5IGRldGVybWluZWQgdGhhdCB0aGlzIGFyZWEgaXMgYFdvcnRoRnV6emluZ2AuIFRoZSByZWFzb25pbmcgc3VwcG9ydGluZyB0aGF0IGlzIGNvbmNpc2UsIGFuZCBJIG5lZWQgdG8gcmVjYWxsIHRoYXQgcmVhc29uaW5nIHNvIEkgZG9uJiMzOTt0IHJlcGVhdCBteXNlbGYuCgpMZXQmIzM5O3MgcXVpY2tseSBjb25maXJtOiBJIHdhbnQgdG8gYmUgdXNpbmcgYWxsIHRoZSBgRW5hYmxlQ29uZmlnc2A6IGBORVRfU0NIRURgLCBhbmQgYE5FVF9TQ0hfVEFQUklPYC4gSSYjMzk7bSBnb2luZyB0byBsZXZlcmFnZSBgRm9jdXNTeW1ib2xzYDogYGFkdmFuY2Vfc2NoZWRgLCBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCwgYHRhcHJpb19jaGFuZ2VgLCBhbmQgYHRhcHJpb19pbml0YC4gQW5kIHRoZW4sIEkgbmVlZCB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIERvbmUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfU0NIRUQmIzM0OywKICAgICYjMzQ7TkVUX1NDSF9UQVBSSU8mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthZHZhbmNlX3NjaGVkJiMzNDssCiAgICAmIzM0O3BhcnNlX3RhcHJpb19zY2hlZHVsZSYjMzQ7LAogICAgJiMzNDt0YXByaW9fY2hhbmdlJiMzNDssCiAgICAmIzM0O3RhcHJpb19pbml0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzY2hlZHVsZSBwYXJzaW5nIGFuZCBocnRpbWVyIGFkdmFuY2UgYWxnb3JpdGhtIGluIHRoZSBUQVBSSU8gKFRpbWUtQXdhcmUgUHJpb3JpdHkpIHBhY2tldCBzY2hlZHVsZXIgKHNjaF90YXByaW8pLiBTcGVjaWZpY2FsbHksIGl0IGZpeGVzIGN5Y2xlIGNhdGNoLXVwIGxvZ2ljIHdoZW4gdGhlIHRpbWVyIGlzIGRlbGF5ZWQgb3IgdGhlIGNsb2NrIGlzIHN0ZXBwZWQgYnkgY2FsY3VsYXRpbmcgcGVyaW9kcyBhbmQgbGVhcGluZyBmb3J3YXJkLCBhbmQgYm91bmRzIHRoZSBzY2hlZHVsZSBjYXRjaC11cCBsb29wLiBUaGlzIG1vZGlmaWVzIGNvcmUgdHJhZmZpYyBjb250cm9sIHNjaGVkdWxpbmcgbG9naWMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIGNvbmZpZ3VyYXRpb24gYW5kIG5ldHdvcmsgcGFja2V0IHRyYW5zbWlzc2lvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1NDSEVEJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfVEFQUklPJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWR2YW5jZV9zY2hlZCYjMzQ7LAogICAgJiMzNDtwYXJzZV90YXByaW9fc2NoZWR1bGUmIzM0OywKICAgICYjMzQ7dGFwcmlvX2NoYW5nZSYjMzQ7LAogICAgJiMzNDt0YXByaW9faW5pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgc2NoZWR1bGUgcGFyc2luZyBhbmQgaHJ0aW1lciBhZHZhbmNlIGFsZ29yaXRobSBpbiB0aGUgVEFQUklPIChUaW1lLUF3YXJlIFByaW9yaXR5KSBwYWNrZXQgc2NoZWR1bGVyIChzY2hfdGFwcmlvKS4gU3BlY2lmaWNhbGx5LCBpdCBmaXhlcyBjeWNsZSBjYXRjaC11cCBsb2dpYyB3aGVuIHRoZSB0aW1lciBpcyBkZWxheWVkIG9yIHRoZSBjbG9jayBpcyBzdGVwcGVkIGJ5IGNhbGN1bGF0aW5nIHBlcmlvZHMgYW5kIGxlYXBpbmcgZm9yd2FyZCwgYW5kIGJvdW5kcyB0aGUgc2NoZWR1bGUgY2F0Y2gtdXAgbG9vcC4gVGhpcyBtb2RpZmllcyBjb3JlIHRyYWZmaWMgY29udHJvbCBzY2hlZHVsaW5nIGxvZ2ljIHJlYWNoYWJsZSB2aWEgbmV0bGluayBjb25maWd1cmF0aW9uIGFuZCBuZXR3b3JrIHBhY2tldCB0cmFuc21pc3Npb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6MDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHRoZSBzY2hlZHVsZSBhZHZhbmNlbWVudCBhbmQgY3ljbGUgcmVjYWxjdWxhdGlvbiBsb2dpYyBpbiB0aGUgdGFwcmlvIHFkaXNjIChzY2hfdGFwcmlvLmMpIHRvIGhhbmRsZSBkZWxheWVkIHRpbWVycyBhbmQgY2xvY2sgc3RlcHBpbmcgYnkgYm91bmRpbmcgY2F0Y2gtdXAgaXRlcmF0aW9ucyBhbmQgaW50cm9kdWNpbmcgYW4gaW50ZXJuYWwgYHBlcmlvZGAgZmllbGQgaW4gYHN0cnVjdCBzY2hlZF9nYXRlX2xpc3RgLlxuXG4tIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IC8gSW5mby1sZWFrIEFuYWx5c2lzOlxuICAxLiBUaGUgbmV3IGBwZXJpb2RgIGZpZWxkIGluIGBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0YCBpcyBjb21wdXRlZCBkdXJpbmcgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgYW5kIHN0b3JlZCBpbiBtZW1vcnkgYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmpgLiBJdCBpcyBub3QgZXhwb3J0ZWQgb3IgZHVtcGVkIHRvIHVzZXJzcGFjZSBpbiBgZHVtcF9zY2hlZHVsZWAuXG4gIDIuIEFsbCBsb2NhbCB2YXJpYWJsZXMgaW50cm9kdWNlZCBpbiBgYWR2YW5jZV9zY2hlZGAgKGBub3dgLCBgZW5kX3RpbWVgLCBgbmV4dF9zdGFydGAsIGBidWRnZXRgLCBgYmVoaW5kYCkgYW5kIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgIChgY3ljbGVgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgcmVhZGluZyBvciBicmFuY2hpbmcgb24gdGhlbS5cbiAgMy4gTm8gYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMsIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCByZWFkcyBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2Ugb3Iga2VybmVsIGNvbnRyb2wgZmxvdy5cblxuLSBLQVNBTiB2cyBLTVNBTiBBcHBsaWNhYmlsaXR5OlxuICBBbnkgY29uY3VycmVuY3ksIGxpc3QgdHJhdmVyc2FsLCBvciBib3VuZHMgaXNzdWVzIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBsb2NrZGVwLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIG9yIGluZm8tbGVhayByaXNrcyByZXF1aXJpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBydW4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQwNDRiOGJkMDQyNzhlMGM2ODI0MTUwNmQzNTk1MDcxMDUzM2RiYjYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxIDIzOjA2OjM1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF90YXByaW8uYyBiL25ldC9zY2hlZC9zY2hfdGFwcmlvLmMKaW5kZXggMzlhYzViOTdhYTNhZi4uOTAxZGZkMjQ4NGUxMCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF90YXByaW8uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvc2NoX3RhcHJpby5jCkBAIC04Myw2ICYjNDM7ODMsMTAgQEAgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCB7CiAJczY0IGN5Y2xlX3RpbWU7CiAJczY0IGN5Y2xlX3RpbWVfZXh0ZW5zaW9uOwogCXM2NCBiYXNlX3RpbWU7CiYjNDM7CS8qIG1pbihjeWNsZV90aW1lLCBzdW0gb2YgaW50ZXJ2YWxzKTogdGhlIHNvZnR3YXJlIHNjaGVkdWxlIHJlc3RhcnRzCiYjNDM7CSAqIHRoZSBsaXN0IGFmdGVyIHRoZSBsYXN0IGVudHJ5IGV2ZW4gd2hlbiBjeWNsZV90aW1lIGlzIG5vdCB1cCB5ZXQuCiYjNDM7CSAqLwomIzQzOwlzNjQgcGVyaW9kOwogfTsKIAogc3RydWN0IHRhcHJpb19zY2hlZCB7CkBAIC04NzEsMTIgJiM0Mzs4NzUsMTMgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp0YXByaW9fZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaCkKIH0KIAogc3RhdGljIGJvb2wgc2hvdWxkX3Jlc3RhcnRfY3ljbGUoY29uc3Qgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqb3BlciwKLQkJCQkgY29uc3Qgc3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeSkKJiM0MzsJCQkJIGNvbnN0IHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnksCiYjNDM7CQkJCSBrdGltZV90IGVuZF90aW1lKQogewogCWlmIChsaXN0X2lzX2xhc3QoJmFtcDtlbnRyeS0mZ3Q7bGlzdCwgJmFtcDtvcGVyLSZndDtlbnRyaWVzKSkKIAkJcmV0dXJuIHRydWU7CiAKLQlpZiAoa3RpbWVfY29tcGFyZShlbnRyeS0mZ3Q7ZW5kX3RpbWUsIG9wZXItJmd0O2N5Y2xlX2VuZF90aW1lKSA9PSAwKQomIzQzOwlpZiAoa3RpbWVfY29tcGFyZShlbmRfdGltZSwgb3Blci0mZ3Q7Y3ljbGVfZW5kX3RpbWUpID09IDApCiAJCXJldHVybiB0cnVlOwogCiAJcmV0dXJuIGZhbHNlOwpAQCAtOTI1LDggJiM0Mzs5MzAsOSBAQCBzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgYWR2YW5jZV9zY2hlZChzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpCiAJaW50IG51bV90YyA9IG5ldGRldl9nZXRfbnVtX3RjKGRldik7CiAJc3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeSwgKm5leHQ7CiAJc3RydWN0IFFkaXNjICpzY2ggPSBxLSZndDtyb290OwotCWt0aW1lX3QgZW5kX3RpbWU7Ci0JaW50IHRjOwomIzQzOwlrdGltZV90IGVuZF90aW1lLCBuZXh0X3N0YXJ0LCBub3c7CiYjNDM7CWludCBidWRnZXQsIHRjOwomIzQzOwlzNjQgYmVoaW5kOwogCiAJc3Bpbl9sb2NrKCZhbXA7cS0mZ3Q7Y3VycmVudF9lbnRyeV9sb2NrKTsKIAllbnRyeSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocS0mZ3Q7Y3VycmVudF9lbnRyeSwKQEAgLTk1MiwyMyAmIzQzOzk1OCw0OSBAQCBzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgYWR2YW5jZV9zY2hlZChzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpCiAJCWdvdG8gZmlyc3RfcnVuOwogCX0KIAotCWlmIChzaG91bGRfcmVzdGFydF9jeWNsZShvcGVyLCBlbnRyeSkpIHsKLQkJbmV4dCA9IGxpc3RfZmlyc3RfZW50cnkoJmFtcDtvcGVyLSZndDtlbnRyaWVzLCBzdHJ1Y3Qgc2NoZWRfZW50cnksCi0JCQkJCWxpc3QpOwotCQlvcGVyLSZndDtjeWNsZV9lbmRfdGltZSA9IGt0aW1lX2FkZF9ucyhvcGVyLSZndDtjeWNsZV9lbmRfdGltZSwKLQkJCQkJCSAgICBvcGVyLSZndDtjeWNsZV90aW1lKTsKLQl9IGVsc2UgewotCQluZXh0ID0gbGlzdF9uZXh0X2VudHJ5KGVudHJ5LCBsaXN0KTsKJiM0MzsJbm93ID0gaHJ0aW1lcl9jYl9nZXRfdGltZSh0aW1lcik7CiYjNDM7CWVuZF90aW1lID0gZW50cnktJmd0O2VuZF90aW1lOwomIzQzOwliZWhpbmQgPSBrdGltZV9zdWIobm93LCBlbmRfdGltZSk7CiYjNDM7CiYjNDM7CS8qIEJlaGluZCwgZS5nLiBkZWxheWVkIHRpbWVyIG9yIHN0ZXBwZWQgY2xvY2s6IHNraXAgd2hvbGUgcGVyaW9kcwomIzQzOwkgKiBhcml0aG1ldGljYWxseSBhbmQgd2FsayBhdCBtb3N0IG9uZSBtb3JlIHRvIHRoZSBlbnRyeSBjb3ZlcmluZwomIzQzOwkgKiBub3csIGluc3RlYWQgb2YgcmVwbGF5aW5nIHRoZSBiYWNrbG9nIG9uZSBleHBpcnkgYXQgYSB0aW1lLiBUaGUKJiM0MzsJICogY2FwIGJvdW5kcyB0aGUgd2FsazsgYSBsZWZ0b3ZlciBpcyBwaWNrZWQgdXAgYnkgdGhlIG5leHQgZXhwaXJ5LgomIzQzOwkgKi8KJiM0MzsJaWYgKHVubGlrZWx5KGJlaGluZCAmZ3Q7PSBvcGVyLSZndDtwZXJpb2QpKSB7CiYjNDM7CQlzNjQganVtcCA9IGRpdjY0X3M2NChiZWhpbmQsIG9wZXItJmd0O3BlcmlvZCkgKiBvcGVyLSZndDtwZXJpb2Q7CiYjNDM7CiYjNDM7CQllbmRfdGltZSA9IGt0aW1lX2FkZF9ucyhlbmRfdGltZSwganVtcCk7CiYjNDM7CQlvcGVyLSZndDtjeWNsZV9lbmRfdGltZSA9IGt0aW1lX2FkZF9ucyhvcGVyLSZndDtjeWNsZV9lbmRfdGltZSwganVtcCk7CiAJfQogCi0JZW5kX3RpbWUgPSBrdGltZV9hZGRfbnMoZW50cnktJmd0O2VuZF90aW1lLCBuZXh0LSZndDtpbnRlcnZhbCk7Ci0JZW5kX3RpbWUgPSBtaW5fdChrdGltZV90LCBlbmRfdGltZSwgb3Blci0mZ3Q7Y3ljbGVfZW5kX3RpbWUpOwomIzQzOwlidWRnZXQgPSAyICogb3Blci0mZ3Q7bnVtX2VudHJpZXM7CiYjNDM7CWRvIHsKJiM0MzsJCWlmIChzaG91bGRfcmVzdGFydF9jeWNsZShvcGVyLCBlbnRyeSwgZW5kX3RpbWUpKSB7CiYjNDM7CQkJbmV4dCA9IGxpc3RfZmlyc3RfZW50cnkoJmFtcDtvcGVyLSZndDtlbnRyaWVzLAomIzQzOwkJCQkJCXN0cnVjdCBzY2hlZF9lbnRyeSwgbGlzdCk7CiYjNDM7CQkJb3Blci0mZ3Q7Y3ljbGVfZW5kX3RpbWUgPSBrdGltZV9hZGRfbnMob3Blci0mZ3Q7Y3ljbGVfZW5kX3RpbWUsCiYjNDM7CQkJCQkJCSAgICBvcGVyLSZndDtwZXJpb2QpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQluZXh0ID0gbGlzdF9uZXh0X2VudHJ5KGVudHJ5LCBsaXN0KTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCW5leHRfc3RhcnQgPSBlbmRfdGltZTsKJiM0MzsJCWVuZF90aW1lID0ga3RpbWVfYWRkX25zKG5leHRfc3RhcnQsIG5leHQtJmd0O2ludGVydmFsKTsKJiM0MzsJCWVuZF90aW1lID0gbWluX3Qoa3RpbWVfdCwgZW5kX3RpbWUsIG9wZXItJmd0O2N5Y2xlX2VuZF90aW1lKTsKJiM0MzsJCWVudHJ5ID0gbmV4dDsKJiM0MzsJfSB3aGlsZSAodW5saWtlbHkoa3RpbWVfY29tcGFyZShlbmRfdGltZSwgbm93KSAmbHQ7PSAwKSAmYW1wOyZhbXA7IGJ1ZGdldC0tKTsKIAomIzQzOwkvKiBuZXh0IGNhbiBiZSB0aGUgZW50cnkgYWxyZWFkeSBwdWJsaXNoZWQgYXMgcS0mZ3Q7Y3VycmVudF9lbnRyeSAoYQomIzQzOwkgKiBzaW5nbGUtZW50cnkgc2NoZWR1bGUsIG9yIGEgY2F0Y2gtdXAgb2Ygd2hvbGUgcGVyaW9kcyksIHNvIHRoZQomIzQzOwkgKiBjbG9zZSB0aW1lcyBhbmQgYnVkZ2V0cyBiZWxvdyBhcmUgcmV3cml0dGVuIGluIHBsYWNlIHdoaWxlCiYjNDM7CSAqIHRhcHJpb19kZXF1ZXVlX2Zyb21fdHhxKCkgbWF5IGJlIHJlYWRpbmcgdGhlbS4KJiM0MzsJICovCiAJZm9yICh0YyA9IDA7IHRjICZsdDsgbnVtX3RjOyB0YyYjNDM7JiM0MzspIHsKIAkJaWYgKG5leHQtJmd0O2dhdGVfZHVyYXRpb25bdGNdID09IG9wZXItJmd0O2N5Y2xlX3RpbWUpCiAJCQluZXh0LSZndDtnYXRlX2Nsb3NlX3RpbWVbdGNdID0gS1RJTUVfTUFYOwogCQllbHNlCi0JCQluZXh0LSZndDtnYXRlX2Nsb3NlX3RpbWVbdGNdID0ga3RpbWVfYWRkX25zKGVudHJ5LSZndDtlbmRfdGltZSwKJiM0MzsJCQluZXh0LSZndDtnYXRlX2Nsb3NlX3RpbWVbdGNdID0ga3RpbWVfYWRkX25zKG5leHRfc3RhcnQsCiAJCQkJCQkJCSBuZXh0LSZndDtnYXRlX2R1cmF0aW9uW3RjXSk7CiAJfQogCkBAIC0xMTMwLDYgJiM0MzsxMTYyLDggQEAgc3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLAogCQkJCSBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpuZXcsCiAJCQkJIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKJiM0MzsJc3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeTsKJiM0MzsJa3RpbWVfdCBjeWNsZSA9IDA7CiAJaW50IGVyciA9IDA7CiAKIAlpZiAodGJbVENBX1RBUFJJT19BVFRSX1NDSEVEX1NJTkdMRV9FTlRSWV0pIHsKQEAgLTExNTIsMTMgJiM0MzsxMTg2LDEwIEBAIHN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YiwKIAlpZiAoZXJyICZsdDsgMCkKIAkJcmV0dXJuIGVycjsKIAotCWlmICghbmV3LSZndDtjeWNsZV90aW1lKSB7Ci0JCXN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnk7Ci0JCWt0aW1lX3QgY3ljbGUgPSAwOwotCi0JCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZhbXA7bmV3LSZndDtlbnRyaWVzLCBsaXN0KQotCQkJY3ljbGUgPSBrdGltZV9hZGRfbnMoY3ljbGUsIGVudHJ5LSZndDtpbnRlcnZhbCk7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZhbXA7bmV3LSZndDtlbnRyaWVzLCBsaXN0KQomIzQzOwkJY3ljbGUgPSBrdGltZV9hZGRfbnMoY3ljbGUsIGVudHJ5LSZndDtpbnRlcnZhbCk7CiAKJiM0MzsJaWYgKCFuZXctJmd0O2N5Y2xlX3RpbWUpIHsKIAkJaWYgKGN5Y2xlICZsdDsgMCB8fCBjeWNsZSAmZ3Q7IElOVF9NQVgpIHsKIAkJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDsmIzM5O2N5Y2xlX3RpbWUmIzM5OyBpcyB0b28gYmlnJiMzNDspOwogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMTcyLDYgJiM0MzsxMjAzLDcgQEAgc3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKJiM0MzsJbmV3LSZndDtwZXJpb2QgPSBtaW4obmV3LSZndDtjeWNsZV90aW1lLCBjeWNsZSk7CiAJdGFwcmlvX2NhbGN1bGF0ZV9nYXRlX2R1cmF0aW9ucyhxLCBuZXcpOwogCiAJcmV0dXJuIDA7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzMwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVEFQUklPIFNjaGVkdWxlciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBuZXQvc2NoZWQvc2NoX3RhcHJpby5jYCwgd2hpY2ggbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgVHJhZmZpYyBDb250cm9sJiMzOTtzIFRBUFJJTyBzY2hlZHVsZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIGludG8gdGhlIGNoYW5nZXMgZGlyZWN0bHkuIEZpcnN0IHRoaW5nIEkgc2VlIGlzIHRoZSBhZGRpdGlvbiBvZiBgczY0IHBlcmlvZDtgIHRvIHRoZSBgc3RydWN0IHNjaGVkX2dhdGVfbGlzdGAuIEludGVyZXN0aW5nLCBJIHdvbmRlciB3aGF0IHRoYXQgcmVwcmVzZW50cyBpbiB0aGUgY29udGV4dCBvZiBUQVBSSU8gZ2F0ZSBzY2hlZHVsaW5nPwoKTmV4dCwgdGhleSYjMzk7dmUgbW9kaWZpZWQgYHNob3VsZF9yZXN0YXJ0X2N5Y2xlYCB0byB0YWtlIGEgYGt0aW1lX3QgZW5kX3RpbWVgLiBUaGlzIGxpa2VseSByZWxhdGVzIHRvIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyBjeWNsZSByZXN0YXJ0cyBhbmQgbWF5YmUgc29tZSB0aW1pbmcgYWRqdXN0bWVudHMgd2l0aGluIHRoZSBzY2hlZHVsZXIuIFRoZSB0aGlyZCBrZXkgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGBhZHZhbmNlX3NjaGVkYCwgd2hlcmUgdGhleSYjMzk7cmUgb3B0aW1pemluZyBhbmQgZml4aW5nIHNjaGVkdWxlIGFkdmFuY2VtZW50LiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBhZGRyZXNzZXMgc2NlbmFyaW9zIHdoZXJlIHRoZSB0aW1lciBtaWdodCBmYWxsIGJlaGluZCBkdWUgdG8gZGVsYXlzIG9yIGNsb2NrIHN0ZXBwaW5nLiBMb29rcyBsaWtlIHRoZXkmIzM5O3JlIHNraXBwaW5nIHBlcmlvZHMgdG8gY2F0Y2ggdXAgdXNpbmcgYGRpdjY0X3M2NGAgYW5kIGEgYm91bmRlZCBgYnVkZ2V0YCBsb29wLiBUaGlzIGlzIGEgY29tbW9uIHN0cmF0ZWd5LCBidXQgSSYjMzk7bGwgd2FudCB0byBjaGVjayB0aGUgZGV0YWlscy4gVGhlIGZpbmFsIGNoYW5nZSwgaW4gYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAsIGNhbGN1bGF0ZXMgYGN5Y2xlYCAodGhlIHN1bSBvZiBpbnRlcnZhbHMpIHJlZ2FyZGxlc3Mgb2YgYG5ldy0mZ3Q7Y3ljbGVfdGltZWAgYW5kIHNldHMgYG5ldy0mZ3Q7cGVyaW9kYCB0byB0aGUgbWluaW11bSBiZXR3ZWVuIGBuZXctJmd0O2N5Y2xlX3RpbWVgIGFuZCBgY3ljbGVgLiBUaGF0IHNlZW1zIGEgbGl0dGxlIHVudXN1YWwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYy4KCk5vdywgYmVmb3JlIEkgZ28gZGVlcGVyIGludG8gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEkgbmVlZCB0byBsb29rIGZvciBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIHBvdGVudGlhbCBjb3BpZXMgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIGxlYWQgdG8gaW5mb3JtYXRpb24gbGVha3MsIG9yIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLiBJJiMzOTtsbCBuZWVkIHRvIGdvIHRocm91Z2ggYHNjaF90YXByaW8uY2AgYXJvdW5kIHRoZXNlIHNwZWNpZmljIGxpbmVzIGFuZCBzZWUgZXhhY3RseSBob3cgYHNjaGVkX2dhdGVfbGlzdGAgaXMgYWxsb2NhdGVkIGFuZCB0aGVuIGhvdyBpdCBtaWdodCBiZSBwYXNzZWQgdG8gdXNlcnNwYWNlIChpZiBhdCBhbGwpLiBUaGlzIGlzIHdoZXJlIHRoZSBkZXZpbCBvZnRlbiBoaWRlcywgc28gSSBuZWVkIHRvIGNoZWNrIHRoZSBpbml0aWFsaXphdGlvbiByb3V0aW5lcyBjYXJlZnVsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NjaGVkX2dhdGVfbGlzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfdGFwcmlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF90YXByaW8uYz01Mj1zdHJ1Y3Qgc2NoZWRfZW50cnkge1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNzEtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjcyOnN0cnVjdCBzY2hlZF9nYXRlX2xpc3Qge1xubmV0L3NjaGVkL3NjaF90YXByaW8uYy03My1cdC8qIExvbmdlc3Qgbm9uLXplcm8gY29udGlndW91cyBnYXRlIGR1cmF0aW9ucyBwZXIgdHJhZmZpYyBjbGFzcyxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTkyPXN0cnVjdCB0YXByaW9fc2NoZWQge1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTA3LVx0c3RydWN0IHNjaGVkX2VudHJ5IF9fcmN1ICpjdXJyZW50X2VudHJ5O1xubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMDg6XHRzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0IF9fcmN1ICpvcGVyX3NjaGVkO1xubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMDk6XHRzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0IF9fcmN1ICphZG1pbl9zY2hlZDtcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTEwLVx0c3RydWN0IGhydGltZXIgYWR2YW5jZV90aW1lcjtcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTEyMz1zdGF0aWMgdm9pZCB0YXByaW9fY2FsY3VsYXRlX2dhdGVfZHVyYXRpb25zKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjEyNDpcdFx0XHRcdFx0ICAgIHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkKVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMjUte1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MTY4PXN0YXRpYyBib29sIHRhcHJpb19lbnRyeV9hbGxvd3NfdHgoa3RpbWVfdCBza2JfZW5kX3RpbWUsXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNzMtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE3NDpzdGF0aWMga3RpbWVfdCBzY2hlZF9iYXNlX3RpbWUoY29uc3Qgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqc2NoZWQpXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE3NS17XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0yMDA9c3RhdGljIHZvaWQgdGFwcmlvX2ZyZWVfc2NoZWRfY2Ioc3RydWN0IHJjdV9oZWFkICpoZWFkKVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMDEte1xubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyMDI6XHRzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZCA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0LCByY3UpO1xubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMDMtXHRzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5LCAqbjtcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTIxMz1zdGF0aWMgdm9pZCBzd2l0Y2hfc2NoZWR1bGVzKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIxNDpcdFx0XHQgICAgIHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKiphZG1pbixcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjE1Olx0XHRcdCAgICAgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqKm9wZXIpXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIxNi17XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMjctLyogR2V0IGhvdyBtdWNoIHRpbWUgaGFzIGJlZW4gYWxyZWFkeSBlbGFwc2VkIGluIHRoZSBjdXJyZW50IGN5Y2xlLiAqL1xubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyMjg6c3RhdGljIHMzMiBnZXRfY3ljbGVfdGltZV9lbGFwc2VkKHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkLCBrdGltZV90IHRpbWUpXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIyOS17XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMzgtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIzOTpzdGF0aWMga3RpbWVfdCBnZXRfaW50ZXJ2YWxfZW5kX3RpbWUoc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqc2NoZWQsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjI0MDpcdFx0XHRcdCAgICAgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqYWRtaW4sXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI0MS1cdFx0XHRcdCAgICAgc3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeSxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTI3NT1zdGF0aWMgdm9pZCB0YXByaW9fdXBkYXRlX3F1ZXVlX21heF9zZHUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6Mjc2Olx0XHRcdFx0XHRzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZCxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjc3LVx0XHRcdFx0XHRzdHJ1Y3QgcWRpc2Nfc2l6ZV90YWJsZSAqc3RhYilcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTMyNz1zdGF0aWMgc3RydWN0IHNjaGVkX2VudHJ5ICpmaW5kX2VudHJ5X3RvX3RyYW5zbWl0KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTMyOC1cdFx0XHRcdFx0XHQgIHN0cnVjdCBRZGlzYyAqc2NoLFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzozMjk6XHRcdFx0XHRcdFx0ICBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZCxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MzMwOlx0XHRcdFx0XHRcdCAgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqYWRtaW4sXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTMzMS1cdFx0XHRcdFx0XHQgIGt0aW1lX3QgdGltZSxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTQwND1zdGF0aWMgYm9vbCBpc192YWxpZF9pbnRlcnZhbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaClcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTQwNi1cdHN0cnVjdCB0YXByaW9fc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7XG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjQwNzpcdHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkLCAqYWRtaW47XG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTQwOC1cdGt0aW1lX3QgaW50ZXJ2YWxfc3RhcnQsIGludGVydmFsX2VuZDtcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTQ3Mj1zdGF0aWMgbG9uZyBnZXRfcGFja2V0X3R4dGltZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaClcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTQ3NS1cdHN0cnVjdCB0YXByaW9fc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7XG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjQ3NjpcdHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkLCAqYWRtaW47XG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTQ3Ny1cdGt0aW1lX3QgbWluaW11bV90aW1lLCBub3csIHR4dGltZTtcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTU0ND1zdGF0aWMgYm9vbCB0YXByaW9fc2tiX2V4Y2VlZHNfcXVldWVfbWF4X3NkdShzdHJ1Y3QgUWRpc2MgKnNjaCxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTU0OC1cdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBxZGlzY19kZXYoc2NoKTtcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6NTQ5Olx0c3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqc2NoZWQ7XG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTU1MC1cdGludCBwcmlvID0gc2tiLVx1MDAzZXByaW9yaXR5O1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9NjY2PXN0YXRpYyB2b2lkIHRhcHJpb19zZXRfYnVkZ2V0cyhzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzo2Njc6XHRcdFx0ICAgICAgIHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkLFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy02NjgtXHRcdFx0ICAgICAgIHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnkpXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYz04Mzc9c3RhdGljIHN0cnVjdCBza19idWZmICp0YXByaW9fZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTg3Ni1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6ODc3OnN0YXRpYyBib29sIHNob3VsZF9yZXN0YXJ0X2N5Y2xlKGNvbnN0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKm9wZXIsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTg3OC1cdFx0XHRcdCBjb25zdCBzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5LFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtODg5LVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzo4OTA6c3RhdGljIGJvb2wgc2hvdWxkX2NoYW5nZV9zY2hlZHVsZXMoY29uc3Qgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqYWRtaW4sXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjg5MTpcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpvcGVyLFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy04OTItXHRcdFx0XHQgICAga3RpbWVfdCBlbmRfdGltZSlcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTkyND1zdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgYWR2YW5jZV9zY2hlZChzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy05MjgtXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcWRpc2NfZGV2KHEtXHUwMDNlcm9vdCk7XG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjkyOTpcdHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKm9wZXIsICphZG1pbjtcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtOTMwLVx0aW50IG51bV90YyA9IG5ldGRldl9nZXRfbnVtX3RjKGRldik7XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xMTIxPXN0YXRpYyBpbnQgcGFyc2Vfc2NoZWRfbGlzdChzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICpsaXN0LFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMTIyOlx0XHRcdCAgICBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZCxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTEyMy1cdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MTE2MT1zdGF0aWMgaW50IHBhcnNlX3RhcHJpb19zY2hlZHVsZShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjExNjI6XHRcdFx0XHQgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqbmV3LFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMTYzLVx0XHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTEyNDA9c3RhdGljIGludCB0YXByaW9fZ2V0X3N0YXJ0X3RpbWUoc3RydWN0IFFkaXNjICpzY2gsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjEyNDE6XHRcdFx0XHQgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqc2NoZWQsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEyNDItXHRcdFx0XHQga3RpbWVfdCAqc3RhcnQpXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xMjc0PXN0YXRpYyB2b2lkIHNldHVwX2ZpcnN0X2VuZF90aW1lKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjEyNzU6XHRcdFx0XHQgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqc2NoZWQsIGt0aW1lX3QgYmFzZSlcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTI3Ni17XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xMzA0PXN0YXRpYyB2b2lkIHRhcHJpb19zdGFydF9zY2hlZChzdHJ1Y3QgUWRpc2MgKnNjaCxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTMwNTpcdFx0XHQgICAgICAga3RpbWVfdCBzdGFydCwgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqbmV3KVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMzA2LXtcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTEzNjA9c3RhdGljIGludCB0YXByaW9fZGV2X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgZXZlbnQsXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMzYzLVx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpO1xubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMzY0Olx0c3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqb3BlciwgKmFkbWluO1xubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMzY1LVx0c3RydWN0IHFkaXNjX3NpemVfdGFibGUgKnN0YWI7XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xMzk3PXN0YXRpYyB2b2lkIHNldHVwX3R4dGltZShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMzk4Olx0XHRcdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZCwga3RpbWVfdCBiYXNlKVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMzk5LXtcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTE0NjI9c3RhdGljIHZvaWQgdGFwcmlvX29mZmxvYWRfY29uZmlnX2NoYW5nZWQoc3RydWN0IHRhcHJpb19zY2hlZCAqcSlcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTQ2My17XG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE0NjQ6XHRzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpvcGVyLCAqYWRtaW47XG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE0NjUtXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xNDkxPXN0YXRpYyB2b2lkIHRhcHJpb19zY2hlZF90b19vZmZsb2FkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE0OTI6XHRcdFx0XHQgICAgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqc2NoZWQsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE0OTMtXHRcdFx0XHQgICAgc3RydWN0IHRjX3RhcHJpb19xb3B0X29mZmxvYWQgKm9mZmxvYWQsXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xNTQ4PXN0YXRpYyBpbnQgdGFwcmlvX2VuYWJsZV9vZmZsb2FkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE1NDktXHRcdFx0XHQgc3RydWN0IHRhcHJpb19zY2hlZCAqcSxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTU1MDpcdFx0XHRcdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZCxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTU1MS1cdFx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xODU0PXN0YXRpYyBpbnQgdGFwcmlvX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTg1OC1cdHN0cnVjdCBubGF0dHIgKnRiW1RDQV9UQVBSSU9fQVRUUl9NQVggJiM0MzsgMV0gPSB7IH07XG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE4NTk6XHRzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpvcGVyLCAqYWRtaW4sICpuZXdfYWRtaW47XG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE4NjAtXHRzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxID0gcWRpc2NfcHJpdihzY2gpO1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MjA2ND1zdGF0aWMgdm9pZCB0YXByaW9fZGVzdHJveShzdHJ1Y3QgUWRpc2MgKnNjaClcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIwNjctXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcWRpc2NfZGV2KHNjaCk7XG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIwNjg6XHRzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpvcGVyLCAqYWRtaW47XG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIwNjktXHR1bnNpZ25lZCBpbnQgaTtcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTIyODk9c3RhdGljIGludCBkdW1wX3NjaGVkdWxlKHN0cnVjdCBza19idWZmICptc2csXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIyOTA6XHRcdFx0IGNvbnN0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnJvb3QpXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIyOTEte1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MjMyNT1zdGF0aWMgaW50IHRhcHJpb19kdW1wX3RjX2VudHJpZXMoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjMyNi1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IHRhcHJpb19zY2hlZCAqcSxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjMyNzpcdFx0XHRcdCAgY29uc3Qgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqc2NoZWQpXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIzMjgte1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MjQyND1zdGF0aWMgaW50IHRhcHJpb19kdW1wKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjQyNy1cdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBxZGlzY19kZXYoc2NoKTtcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjQyODpcdHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKm9wZXIsICphZG1pbjtcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjQyOS1cdHN0cnVjdCB0Y19tcXByaW9fcW9wdCBvcHQgPSB7IDAgfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzkyNgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBzY2hfdGFwcmlvLmNgJiMzOTtzIENvcmUgRnVuY3Rpb25zKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgYHNjaF90YXByaW8uY2AuIE15IHByaW1hcnkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYGR1bXBfc2NoZWR1bGVgIGFuZCBgdGFwcmlvX2NoYW5nZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSB0d28gZnVuY3Rpb25zIHdvcmsgdG9nZXRoZXIsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlaXIgcm9sZXMgaW4gc2NoZWR1bGluZyBhbmQsIG1vcmUgc3BlY2lmaWNhbGx5LCBob3cgdGhleSBtYW5hZ2UgdGhlIGNoYW5nZXMgdG8gdGhhdCBzY2hlZHVsZS4gSSBuZWVkIGEgY2xlYXIgbWVudGFsIG1vZGVsIG9mIGhvdyBkYXRhIGZsb3dzIGJldHdlZW4gdGhlbSBhbmQgd2hhdCBrZXkgZGF0YSBzdHJ1Y3R1cmVzIHRoZXkgdXNlIGFuZCBtb2RpZnkuIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IGdyYXNwIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHRoYXQgZHJpdmUgc2NoZWR1bGUgbWFpbnRlbmFuY2UgaW4gVGFwcmlvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfdGFwcmlvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIyODU6XHRcdG5sYV9uZXN0X2NhbmNlbChtc2csIGl0ZW0pO1xuMjI4NjpcdFx0cmV0dXJuIC0xO1xuMjI4NzpcdH1cbjIyODg6XHRcbjIyODk6XHRzdGF0aWMgaW50IGR1bXBfc2NoZWR1bGUoc3RydWN0IHNrX2J1ZmYgKm1zZyxcbjIyOTA6XHRcdFx0XHQgY29uc3Qgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqcm9vdClcbjIyOTE6XHR7XG4yMjkyOlx0XHRzdHJ1Y3QgbmxhdHRyICplbnRyeV9saXN0O1xuMjI5MzpcdFx0c3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeTtcbjIyOTQ6XHRcbjIyOTU6XHRcdGlmIChubGFfcHV0X3M2NChtc2csIFRDQV9UQVBSSU9fQVRUUl9TQ0hFRF9CQVNFX1RJTUUsXG4yMjk2Olx0XHRcdFx0cm9vdC1cdTAwM2ViYXNlX3RpbWUsIFRDQV9UQVBSSU9fUEFEKSlcbjIyOTc6XHRcdFx0cmV0dXJuIC0xO1xuMjI5ODpcdFxuMjI5OTpcdFx0aWYgKG5sYV9wdXRfczY0KG1zZywgVENBX1RBUFJJT19BVFRSX1NDSEVEX0NZQ0xFX1RJTUUsXG4yMzAwOlx0XHRcdFx0cm9vdC1cdTAwM2VjeWNsZV90aW1lLCBUQ0FfVEFQUklPX1BBRCkpXG4yMzAxOlx0XHRcdHJldHVybiAtMTtcbjIzMDI6XHRcbjIzMDM6XHRcdGlmIChubGFfcHV0X3M2NChtc2csIFRDQV9UQVBSSU9fQVRUUl9TQ0hFRF9DWUNMRV9USU1FX0VYVEVOU0lPTixcbjIzMDQ6XHRcdFx0XHRyb290LVx1MDAzZWN5Y2xlX3RpbWVfZXh0ZW5zaW9uLCBUQ0FfVEFQUklPX1BBRCkpXG4yMzA1Olx0XHRcdHJldHVybiAtMTtcbjIzMDY6XHRcbjIzMDc6XHRcdGVudHJ5X2xpc3QgPSBubGFfbmVzdF9zdGFydF9ub2ZsYWcobXNnLFxuMjMwODpcdFx0XHRcdFx0XHQgICBUQ0FfVEFQUklPX0FUVFJfU0NIRURfRU5UUllfTElTVCk7XG4yMzA5Olx0XHRpZiAoIWVudHJ5X2xpc3QpXG4yMzEwOlx0XHRcdGdvdG8gZXJyb3JfbmVzdDtcbjIzMTE6XHRcbjIzMTI6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIFx1MDAyNnJvb3QtXHUwMDNlZW50cmllcywgbGlzdCkge1xuMjMxMzpcdFx0XHRpZiAoZHVtcF9lbnRyeShtc2csIGVudHJ5KSBcdTAwM2MgMClcbjIzMTQ6XHRcdFx0XHRnb3RvIGVycm9yX25lc3Q7XG4yMzE1Olx0XHR9XG4yMzE2Olx0XG4yMzE3Olx0XHRubGFfbmVzdF9lbmQobXNnLCBlbnRyeV9saXN0KTtcbjIzMTg6XHRcdHJldHVybiAwO1xuMjMxOTpcdFxuMjMyMDpcdGVycm9yX25lc3Q6XG4yMzIxOlx0XHRubGFfbmVzdF9jYW5jZWwobXNnLCBlbnRyeV9saXN0KTtcbjIzMjI6XHRcdHJldHVybiAtMTtcbjIzMjM6XHR9XG4yMzI0Olx0XG4yMzI1Olx0c3RhdGljIGludCB0YXByaW9fZHVtcF90Y19lbnRyaWVzKHN0cnVjdCBza19idWZmICpza2IsXG4yMzI2Olx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsXG4yMzI3Olx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkKVxuMjMyODpcdHtcbjIzMjk6XHRcdHN0cnVjdCBubGF0dHIgKm47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4MjMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgd2Fsa2luZyB0aHJvdWdoIHRoZSBsb2dpYzoKCioqSW52ZXN0aWdhdGluZyBNZW1vcnkgQWxsb2NhdGlvbiBpbiB0YXByaW8gTW9kdWxlKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byBob3cgbWVtb3J5IGlzIGJlaW5nIGhhbmRsZWQgcmVsYXRlZCB0byB0aGUgbmV3IHNjaGVkdWxlciBnYXRlIGxpc3QsIHNwZWNpZmljYWxseSBgbmV3YCBvciBgc2NoZWRfZ2F0ZV9saXN0YC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBpcyBhbGxvY2F0ZWQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHRyYWNlIHRoZSBhbGxvY2F0aW9uIHByb2Nlc3MsIHNvIEkmIzM5O2xsIHN0YXJ0IGJ5IGxvb2tpbmcgZGlyZWN0bHkgYXQgdGhlIGNvZGUgd2hlcmUgdGhlc2UgYXJlIHVzZWQgd2l0aGluIHRoZSBgc2NoX3RhcHJpby5jYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcmVhZCB0aGUgZnVuY3Rpb24gYHRhcHJpb19jaGFuZ2VgLiBBbHRlcm5hdGl2ZWx5LCBJIGNvdWxkIHVzZSBhIGZpbmQgd2l0aGluIGBzY2hfdGFwcmlvLmNgLCB3aGljaCB3b3VsZCBiZSBxdWlja2VyIGFuZCBpcyBsaWtlbHkgd2hhdCBJIHdpbGwgZG8uIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQsIGFuZCBtb3N0IGltcG9ydGFudGx5LCBob3cgdGhlIG1lbW9yeSBpcyBjbGFpbWVkLiBJdCYjMzk7cyBsaWtlbHkgZ29pbmcgdG8gaW52b2x2ZSBhIGBremFsbG9jYCBvciBzaW1pbGFyIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9uLiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtremFsbG9jLipzY2hlZF9nYXRlX2xpc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX3RhcHJpby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTEyNAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgc2NoX3RhcHJpby5jYCBBbGxvY2F0aW9ucyoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYWxsb2NhdGlvbiBzdHJhdGVnaWVzIHdpdGhpbiBgc2NoX3RhcHJpby5jYC4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgbWVtb3J5IGlzIGJlaW5nIG1hbmFnZWQgd2l0aGluIHRoaXMgc2NoZWR1bGVyLCBzcGVjaWZpY2FsbHkgaG93IGl0IGFsbG9jYXRlcyBhbmQgZGVhbGxvY2F0ZXMgcmVzb3VyY2VzLiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGtleSBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyB0aGF0IGhhbmRsZSB0aGVzZSBvcGVyYXRpb25zLiBJJiMzOTttIGdvaW5nIHRvIGJlIGxvb2tpbmcgZm9yIHBhdHRlcm5zLCBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGFuZCBhcmVhcyB3aGVyZSBtZW1vcnkgbGVha3Mgb3IgaW5lZmZpY2llbmNpZXMgbWlnaHQgZXhpc3QuIE15IGZvY3VzIHdpbGwgYmUgb24gdGhlIGltcGFjdCBvZiB0aGVzZSBhbGxvY2F0aW9ucyBvbiB0aGUgcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eSBvZiB0aGUgc3lzdGVtLiBJJiMzOTtsbCBiZSBzY3J1dGluaXppbmcgdGhlIGNvZGUgZm9yIGFueSBub24tc3RhbmRhcmQgYWxsb2NhdGlvbiBhcHByb2FjaGVzLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoaW5ncyBsaWtlIHNsYWIgYWxsb2NhdG9ycywgY3VzdG9tIG1lbW9yeSBwb29scywgb3IgcGVyaGFwcyBhbnkgdW51c3VhbCBtZW1vcnkgbWFwcGluZyB0ZWNobmlxdWVzIHVzZWQgaGVyZSwgZXNwZWNpYWxseSBnaXZlbiB0aGlzIGlzIHRoZSBzY2hlZHVsZXIuIEkmIzM5O2xsIGJlIGNvbnNpZGVyaW5nIHRoZSB0aHJlYWQtc2FmZXR5IG9mIHRoZXNlIGFsbG9jYXRvcnMgdG9vIOKAkyBhbnkgbG9ja2luZyBtZWNoYW5pc21zIHVzZWQgdG8gcHJvdGVjdCBhZ2FpbnN0IGNvbmN1cnJlbnQgYWNjZXNzIHdpbGwgYmUgb2YgaW50ZXJlc3QuIEZpbmFsbHksIEkmIzM5O2xsIGNvbXBhcmUgdGhlIGFwcHJvYWNoZXMgdXNlZCBpbiBgc2NoX3RhcHJpby5jYCB0byBvdGhlciBzY2hlZHVsZXJzIHRvIHVuZGVyc3RhbmQgaXRzIGRlc2lnbiB0cmFkZS1vZmZzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfdGFwcmlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF90YXByaW8uYz0xMTIxPXN0YXRpYyBpbnQgcGFyc2Vfc2NoZWRfbGlzdChzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICpsaXN0LFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTEzOS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTE0MDpcdFx0ZW50cnkgPSBremFsbG9jX29iaigqZW50cnkpO1xubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMTQxLVx0XHRpZiAoIWVudHJ5KSB7XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xMzk3PXN0YXRpYyB2b2lkIHNldHVwX3R4dGltZShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTQwOC1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTQwOTpzdGF0aWMgc3RydWN0IHRjX3RhcHJpb19xb3B0X29mZmxvYWQgKnRhcHJpb19vZmZsb2FkX2FsbG9jKGludCBudW1fZW50cmllcylcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTQxMC17XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNDEyLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxNDEzOlx0X19vZmZsb2FkID0ga3phbGxvY19mbGV4KCpfX29mZmxvYWQsIG9mZmxvYWQuZW50cmllcywgbnVtX2VudHJpZXMpO1xubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNDE0LVx0aWYgKCFfX29mZmxvYWQpXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xNTQ4PXN0YXRpYyBpbnQgdGFwcmlvX2VuYWJsZV9vZmZsb2FkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNTc2LVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxNTc3Olx0b2ZmbG9hZCA9IHRhcHJpb19vZmZsb2FkX2FsbG9jKHNjaGVkLVx1MDAzZW51bV9lbnRyaWVzKTtcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTU3OC1cdGlmICghb2ZmbG9hZCkge1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MTYxND1zdGF0aWMgaW50IHRhcHJpb19kaXNhYmxlX29mZmxvYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE2MjQtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE2MjU6XHRvZmZsb2FkID0gdGFwcmlvX29mZmxvYWRfYWxsb2MoMCk7XG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE2MjYtXHRpZiAoIW9mZmxvYWQpIHtcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTE4NTQ9c3RhdGljIGludCB0YXByaW9fY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xOTExLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxOTEyOlx0bmV3X2FkbWluID0ga3phbGxvY19vYmooKm5ld19hZG1pbik7XG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE5MTMtXHRpZiAoIW5ld19hZG1pbikge1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MjEwMz1zdGF0aWMgaW50IHRhcHJpb19pbml0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMTMzLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyMTM0Olx0cS1cdTAwM2VxZGlzY3MgPSBremFsbG9jX29ianMocS1cdTAwM2VxZGlzY3NbMF0sIGRldi1cdTAwM2VudW1fdHhfcXVldWVzKTtcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjEzNS1cdGlmICghcS1cdTAwM2VxZGlzY3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTkyCgkJCQkJCQlvdXRwdXQ6IDI4NwoJCQkJCQkJdGhvdWdodHM6IDczNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBObyBDb25jZXJucyBEZXRlY3RlZCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgYG5ld19hZG1pbmAgZ2V0cyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmpgLCB3aGljaCBpcyBnb29kOyBpdCBndWFyYW50ZWVzIHplcm8taW5pdGlhbGl6YXRpb24uIE5vdywgbGV0JiMzOTtzIG1ldGljdWxvdXNseSBnbyB0aHJvdWdoIHRoZSBwYXRjaCBkZXRhaWxzLgoKSSYjMzk7bSBzZWVpbmcgYSBuZXcgZmllbGQsIGBzNjQgcGVyaW9kYCwgYWRkZWQgdG8gYHN0cnVjdCBzY2hlZF9nYXRlX2xpc3RgLiBUaGlzIHJhaXNlcyBhIGZsYWcgYXV0b21hdGljYWxseSwgYnV0IGFmdGVyIGNoZWNraW5nIGhvdyBpdCYjMzk7cyB1c2VkLCBJJiMzOTttIGNvbmZpZGVudC4gVGhlIGBzaG91bGRfcmVzdGFydF9jeWNsZWAgZnVuY3Rpb24gbm93IGFjY2VwdHMgYW4gYGVuZF90aW1lYCBhcmd1bWVudCwgYW5kIGl0IGNoZWNrcyBmb3IgZXF1YWxpdHkgd2l0aCBgb3Blci0mZ3Q7Y3ljbGVfZW5kX3RpbWVgLiBGYWlyIGVub3VnaC4KClBlZWtpbmcgYXQgYGFkdmFuY2Vfc2NoZWRgLCBpdCBkZWNsYXJlcyBga3RpbWVfdCBlbmRfdGltZSwgbmV4dF9zdGFydCwgbm93OyBpbnQgYnVkZ2V0LCB0YzsgczY0IGJlaGluZDtgLCBhbGwgYXJlIGluaXRpYWxpemVkLiBgbm93YCBpcyBzZXQgdXNpbmcgYGhydGltZXJfY2JfZ2V0X3RpbWVgLCBhbmQgYGVuZF90aW1lYCBnZXRzIGFzc2lnbmVkLiBgYmVoaW5kYCBpcyBjYWxjdWxhdGVkIGFzIHRoZSBkaWZmZXJlbmNlLiBUaGUgYGJ1ZGdldGAgaXMgaW5pdGlhbGl6ZWQuIEluc2lkZSB0aGUgbG9vcCwgYG5leHRfc3RhcnRgIGlzIGFzc2lnbmVkIGJlZm9yZSBpdHMgdXNlIGluIGBrdGltZV9hZGRfbnNgIGNhbGxzLiBUaGUgbG9vcCBjb3JyZWN0bHkgY2FsbHMgYHNob3VsZF9yZXN0YXJ0X2N5Y2xlYCB3aXRoIHRoZSBjb3JyZWN0IGBlbmRfdGltZWAuIFRoZSBgZm9yYCBsb29wLCBpbXBvcnRhbnRseSwgcGFzc2VzIGBuZXh0X3N0YXJ0YCBpbnRvIGBrdGltZV9hZGRfbnNgLiBJdCYjMzk7cyBjbGVhciB0aGF0IGBuZXh0X3N0YXJ0YCBpcyBpbml0aWFsaXplZCBvbiBldmVyeSBsb29wIGl0ZXJhdGlvbiwgZXZlbiB3aXRoIHRoZSBgZG8uLi53aGlsZWAgc3RydWN0dXJlLgoKVGhlbiwgbG9va2luZyBhdCBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCwgYGN5Y2xlYCBpcyBpbml0aWFsaXplZCB0byB6ZXJvLiBUaGUgbG9vcCBhZGRzIHVwIGBlbnRyeS0mZ3Q7aW50ZXJ2YWxgLiBgbmV3LSZndDtwZXJpb2RgIGlzIHNldCBhcyB0aGUgbWluaW11bSBiZXR3ZWVuIGBuZXctJmd0O2N5Y2xlX3RpbWVgIGFuZCBgY3ljbGVgLiBTZWVtcyBmdWxseSBpbml0aWFsaXplZC4KCk5vdywgbGV0JiMzOTtzIGdldCBzZXJpb3VzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZXMsIGluZm9ybWF0aW9uIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIHBhZGRpbmcgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UuIEFmdGVyIGEgdGhvcm91Z2ggcmV2aWV3LCBpdCYjMzk7cyBjbGVhcjogbm8gc3RydWN0dXJlcyB0aGF0IGdldCBjb3BpZWQgdG8gdXNlciBzcGFjZSBoYXZlIGJlZW4gYWRkZWQgb3IgbW9kaWZpZWQgd2l0aCBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkuIGBwZXJpb2RgIGlzIGludGVybmFsIHRvIGBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0YCwgYW5kIGl0JiMzOTtzIGFsbG9jYXRlZCB3aXRoIGt6YWxsb2MgYW5kIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgd2l0aGluIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgLiBUaGUgbG9naWMgZG9lc24mIzM5O3QgZGVwZW5kIG9uIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gTm8gc3RhY2sgdmFyaWFibGVzIGFyZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuIFRoZXJlIGFyZW4mIzM5O3QgYW55IGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGJ1ZmZlciBzbGljZXMuCgpUaGVyZWZvcmUsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhpcyBjaGFuZ2UgKmRvZXMgbm90KiBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gU3RhbmRhcmQgc2FuaXRpemVycyBsaWtlIEtBU0FOIGFyZSBzdWZmaWNpZW50IGZvciBjaGVja2luZyBib3VuZHMgYW5kIGxpZmVjeWNsZSwgYW5kIHdlIGRvICpub3QqIG5lZWQgYSBLTVNBTiBzZXNzaW9uIGZvciB0aGlzLgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayBhbGwgdGhlIGNyaXRlcmlhLiBXZSYjMzk7cmUgYXNzZXNzaW5nIHdoZXRoZXIgS01TQU4gaXMgbmVlZGVkLCBhbmQgbXkgY29uY2x1c2lvbiBpcyAmIzM5O2ZhbHNlJiMzOTsuIFRoZSByZWFzb25pbmc6IHRoZSBwYXRjaCBwcmltYXJpbHkgbW9kaWZpZXMgdGltaW5nIGFuZCBzY2hlZHVsaW5nIGxvZ2ljIHdpdGhpbiBgc2NoX3RhcHJpb2AsIHNwZWNpZmljYWxseSBgYWR2YW5jZV9zY2hlZGAsIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgLCBhbmQgYHNob3VsZF9yZXN0YXJ0X2N5Y2xlYCwgYWRkaW5nIHRoZSBgcGVyaW9kYCBmaWVsZC4gQWxsIHN0cnVjdHVyZXMgYXJlIGt6YWxsb2MmIzM5O2QgYW5kIGluaXRpYWxpemVkLiBUaGVyZSBhcmUgbm8gZXhwb3NlZCB1c2VyLXNwYWNlIGNvcHkgcGF0aHMgb3IgdW5pbml0aWFsaXplZCByZWFkcy4gS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgY292ZXIgYW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBvciBvdXQtb2YtYm91bmRzIGlzc3Vlcywgc28gS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLgoKSSYjMzk7bSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIFdlJiMzOTtyZSBnb29kIHRvIGdvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHRoZSBzY2hlZHVsZSBhZHZhbmNlbWVudCBhbmQgY3ljbGUgcmVjYWxjdWxhdGlvbiBsb2dpYyBpbiB0aGUgdGFwcmlvIHFkaXNjIChzY2hfdGFwcmlvLmMpIHRvIGhhbmRsZSBkZWxheWVkIHRpbWVycyBhbmQgY2xvY2sgc3RlcHBpbmcgYnkgYm91bmRpbmcgY2F0Y2gtdXAgaXRlcmF0aW9ucyBhbmQgaW50cm9kdWNpbmcgYW4gaW50ZXJuYWwgYHBlcmlvZGAgZmllbGQgaW4gYHN0cnVjdCBzY2hlZF9nYXRlX2xpc3RgLlxuXG4tIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IC8gSW5mby1sZWFrIEFuYWx5c2lzOlxuICAxLiBUaGUgbmV3IGBwZXJpb2RgIGZpZWxkIGluIGBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0YCBpcyBjb21wdXRlZCBkdXJpbmcgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgYW5kIHN0b3JlZCBpbiBtZW1vcnkgYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmpgLiBJdCBpcyBub3QgZXhwb3J0ZWQgb3IgZHVtcGVkIHRvIHVzZXJzcGFjZSBpbiBgZHVtcF9zY2hlZHVsZWAuXG4gIDIuIEFsbCBsb2NhbCB2YXJpYWJsZXMgaW50cm9kdWNlZCBpbiBgYWR2YW5jZV9zY2hlZGAgKGBub3dgLCBgZW5kX3RpbWVgLCBgbmV4dF9zdGFydGAsIGBidWRnZXRgLCBgYmVoaW5kYCkgYW5kIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgIChgY3ljbGVgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgcmVhZGluZyBvciBicmFuY2hpbmcgb24gdGhlbS5cbiAgMy4gTm8gYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMsIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCByZWFkcyBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2Ugb3Iga2VybmVsIGNvbnRyb2wgZmxvdy5cblxuLSBLQVNBTiB2cyBLTVNBTiBBcHBsaWNhYmlsaXR5OlxuICBBbnkgY29uY3VycmVuY3ksIGxpc3QgdHJhdmVyc2FsLCBvciBib3VuZHMgaXNzdWVzIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBsb2NrZGVwLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIG9yIGluZm8tbGVhayByaXNrcyByZXF1aXJpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBydW4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHRoZSBzY2hlZHVsZSBhZHZhbmNlbWVudCBhbmQgY3ljbGUgcmVjYWxjdWxhdGlvbiBsb2dpYyBpbiB0aGUgdGFwcmlvIHFkaXNjIChzY2hfdGFwcmlvLmMpIHRvIGhhbmRsZSBkZWxheWVkIHRpbWVycyBhbmQgY2xvY2sgc3RlcHBpbmcgYnkgYm91bmRpbmcgY2F0Y2gtdXAgaXRlcmF0aW9ucyBhbmQgaW50cm9kdWNpbmcgYW4gaW50ZXJuYWwgYHBlcmlvZGAgZmllbGQgaW4gYHN0cnVjdCBzY2hlZF9nYXRlX2xpc3RgLlxuXG4tIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IC8gSW5mby1sZWFrIEFuYWx5c2lzOlxuICAxLiBUaGUgbmV3IGBwZXJpb2RgIGZpZWxkIGluIGBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0YCBpcyBjb21wdXRlZCBkdXJpbmcgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgYW5kIHN0b3JlZCBpbiBtZW1vcnkgYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmpgLiBJdCBpcyBub3QgZXhwb3J0ZWQgb3IgZHVtcGVkIHRvIHVzZXJzcGFjZSBpbiBgZHVtcF9zY2hlZHVsZWAuXG4gIDIuIEFsbCBsb2NhbCB2YXJpYWJsZXMgaW50cm9kdWNlZCBpbiBgYWR2YW5jZV9zY2hlZGAgKGBub3dgLCBgZW5kX3RpbWVgLCBgbmV4dF9zdGFydGAsIGBidWRnZXRgLCBgYmVoaW5kYCkgYW5kIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgIChgY3ljbGVgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgcmVhZGluZyBvciBicmFuY2hpbmcgb24gdGhlbS5cbiAgMy4gTm8gYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMsIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCByZWFkcyBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2Ugb3Iga2VybmVsIGNvbnRyb2wgZmxvdy5cblxuLSBLQVNBTiB2cyBLTVNBTiBBcHBsaWNhYmlsaXR5OlxuICBBbnkgY29uY3VycmVuY3ksIGxpc3QgdHJhdmVyc2FsLCBvciBib3VuZHMgaXNzdWVzIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBsb2NrZGVwLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIG9yIGluZm8tbGVhayByaXNrcyByZXF1aXJpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBydW4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjA2OjM3LjQ4OTE3NzM4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA0MTUxMjU5NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSEVEXCIsXG4gICAgXCJORVRfU0NIX1RBUFJJT1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFkdmFuY2Vfc2NoZWRcIixcbiAgICBcInBhcnNlX3RhcHJpb19zY2hlZHVsZVwiLFxuICAgIFwidGFwcmlvX2NoYW5nZVwiLFxuICAgIFwidGFwcmlvX2luaXRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgdGhlIHNjaGVkdWxlIGFkdmFuY2VtZW50IGFuZCBjeWNsZSByZWNhbGN1bGF0aW9uIGxvZ2ljIGluIHRoZSB0YXByaW8gcWRpc2MgKHNjaF90YXByaW8uYykgdG8gaGFuZGxlIGRlbGF5ZWQgdGltZXJzIGFuZCBjbG9jayBzdGVwcGluZyBieSBib3VuZGluZyBjYXRjaC11cCBpdGVyYXRpb25zIGFuZCBpbnRyb2R1Y2luZyBhbiBpbnRlcm5hbCBgcGVyaW9kYCBmaWVsZCBpbiBgc3RydWN0IHNjaGVkX2dhdGVfbGlzdGAuXFxuXFxuLSBVbmluaXRpYWxpemVkIE1lbW9yeSAvIEluZm8tbGVhayBBbmFseXNpczpcXG4gIDEuIFRoZSBuZXcgYHBlcmlvZGAgZmllbGQgaW4gYHN0cnVjdCBzY2hlZF9nYXRlX2xpc3RgIGlzIGNvbXB1dGVkIGR1cmluZyBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCBhbmQgc3RvcmVkIGluIG1lbW9yeSBhbGxvY2F0ZWQgdmlhIGBremFsbG9jX29iamAuIEl0IGlzIG5vdCBleHBvcnRlZCBvciBkdW1wZWQgdG8gdXNlcnNwYWNlIGluIGBkdW1wX3NjaGVkdWxlYC5cXG4gIDIuIEFsbCBsb2NhbCB2YXJpYWJsZXMgaW50cm9kdWNlZCBpbiBgYWR2YW5jZV9zY2hlZGAgKGBub3dgLCBgZW5kX3RpbWVgLCBgbmV4dF9zdGFydGAsIGBidWRnZXRgLCBgYmVoaW5kYCkgYW5kIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgIChgY3ljbGVgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgcmVhZGluZyBvciBicmFuY2hpbmcgb24gdGhlbS5cXG4gIDMuIE5vIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb25zLCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgcmVhZHMgYXJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlIG9yIGtlcm5lbCBjb250cm9sIGZsb3cuXFxuXFxuLSBLQVNBTiB2cyBLTVNBTiBBcHBsaWNhYmlsaXR5OlxcbiAgQW55IGNvbmN1cnJlbmN5LCBsaXN0IHRyYXZlcnNhbCwgb3IgYm91bmRzIGlzc3VlcyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgbG9ja2RlcC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBpbmZvLWxlYWsgcmlza3MgcmVxdWlyaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgcnVuLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzY2hlZHVsZSBwYXJzaW5nIGFuZCBocnRpbWVyIGFkdmFuY2UgYWxnb3JpdGhtIGluIHRoZSBUQVBSSU8gKFRpbWUtQXdhcmUgUHJpb3JpdHkpIHBhY2tldCBzY2hlZHVsZXIgKHNjaF90YXByaW8pLiBTcGVjaWZpY2FsbHksIGl0IGZpeGVzIGN5Y2xlIGNhdGNoLXVwIGxvZ2ljIHdoZW4gdGhlIHRpbWVyIGlzIGRlbGF5ZWQgb3IgdGhlIGNsb2NrIGlzIHN0ZXBwZWQgYnkgY2FsY3VsYXRpbmcgcGVyaW9kcyBhbmQgbGVhcGluZyBmb3J3YXJkLCBhbmQgYm91bmRzIHRoZSBzY2hlZHVsZSBjYXRjaC11cCBsb29wLiBUaGlzIG1vZGlmaWVzIGNvcmUgdHJhZmZpYyBjb250cm9sIHNjaGVkdWxpbmcgbG9naWMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIGNvbmZpZ3VyYXRpb24gYW5kIG5ldHdvcmsgcGFja2V0IHRyYW5zbWlzc2lvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6MDY6MzcuNDg5MTgyMzRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzQzMjcxNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkMDQ0YjhiZDA0Mjc4ZTBjNjgyNDE1MDZkMzU5NTA3MTA1MzNkYmI2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDEgMjM6MDY6MzUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF90YXByaW8uYyBiL25ldC9zY2hlZC9zY2hfdGFwcmlvLmNcXG5pbmRleCAzOWFjNWI5N2FhM2FmLi45MDFkZmQyNDg0ZTEwIDEwMDY0NFxcbi0tLSBhL25ldC9zY2hlZC9zY2hfdGFwcmlvLmNcXG4rKysgYi9uZXQvc2NoZWQvc2NoX3RhcHJpby5jXFxuQEAgLTgzLDYgKzgzLDEwIEBAIHN0cnVjdCBzY2hlZF9nYXRlX2xpc3Qge1xcbiBcXHRzNjQgY3ljbGVfdGltZTtcXG4gXFx0czY0IGN5Y2xlX3RpbWVfZXh0ZW5zaW9uO1xcbiBcXHRzNjQgYmFzZV90aW1lO1xcbitcXHQvKiBtaW4oY3ljbGVfdGltZSwgc3VtIG9mIGludGVydmFscyk6IHRoZSBzb2Z0d2FyZSBzY2hlZHVsZSByZXN0YXJ0c1xcbitcXHQgKiB0aGUgbGlzdCBhZnRlciB0aGUgbGFzdCBlbnRyeSBldmVuIHdoZW4gY3ljbGVfdGltZSBpcyBub3QgdXAgeWV0LlxcbitcXHQgKi9cXG4rXFx0czY0IHBlcmlvZDtcXG4gfTtcXG4gXFxuIHN0cnVjdCB0YXByaW9fc2NoZWQge1xcbkBAIC04NzEsMTIgKzg3NSwxMyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnRhcHJpb19kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxcbiB9XFxuIFxcbiBzdGF0aWMgYm9vbCBzaG91bGRfcmVzdGFydF9jeWNsZShjb25zdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpvcGVyLFxcbi1cXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeSlcXG4rXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnksXFxuK1xcdFxcdFxcdFxcdCBrdGltZV90IGVuZF90aW1lKVxcbiB7XFxuIFxcdGlmIChsaXN0X2lzX2xhc3QoXFx1MDAyNmVudHJ5LVxcdTAwM2VsaXN0LCBcXHUwMDI2b3Blci1cXHUwMDNlZW50cmllcykpXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXG4tXFx0aWYgKGt0aW1lX2NvbXBhcmUoZW50cnktXFx1MDAzZWVuZF90aW1lLCBvcGVyLVxcdTAwM2VjeWNsZV9lbmRfdGltZSkgPT0gMClcXG4rXFx0aWYgKGt0aW1lX2NvbXBhcmUoZW5kX3RpbWUsIG9wZXItXFx1MDAzZWN5Y2xlX2VuZF90aW1lKSA9PSAwKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuIFxcdHJldHVybiBmYWxzZTtcXG5AQCAtOTI1LDggKzkzMCw5IEBAIHN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBhZHZhbmNlX3NjaGVkKHN0cnVjdCBocnRpbWVyICp0aW1lcilcXG4gXFx0aW50IG51bV90YyA9IG5ldGRldl9nZXRfbnVtX3RjKGRldik7XFxuIFxcdHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnksICpuZXh0O1xcbiBcXHRzdHJ1Y3QgUWRpc2MgKnNjaCA9IHEtXFx1MDAzZXJvb3Q7XFxuLVxcdGt0aW1lX3QgZW5kX3RpbWU7XFxuLVxcdGludCB0YztcXG4rXFx0a3RpbWVfdCBlbmRfdGltZSwgbmV4dF9zdGFydCwgbm93O1xcbitcXHRpbnQgYnVkZ2V0LCB0YztcXG4rXFx0czY0IGJlaGluZDtcXG4gXFxuIFxcdHNwaW5fbG9jayhcXHUwMDI2cS1cXHUwMDNlY3VycmVudF9lbnRyeV9sb2NrKTtcXG4gXFx0ZW50cnkgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHEtXFx1MDAzZWN1cnJlbnRfZW50cnksXFxuQEAgLTk1MiwyMyArOTU4LDQ5IEBAIHN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBhZHZhbmNlX3NjaGVkKHN0cnVjdCBocnRpbWVyICp0aW1lcilcXG4gXFx0XFx0Z290byBmaXJzdF9ydW47XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChzaG91bGRfcmVzdGFydF9jeWNsZShvcGVyLCBlbnRyeSkpIHtcXG4tXFx0XFx0bmV4dCA9IGxpc3RfZmlyc3RfZW50cnkoXFx1MDAyNm9wZXItXFx1MDAzZWVudHJpZXMsIHN0cnVjdCBzY2hlZF9lbnRyeSxcXG4tXFx0XFx0XFx0XFx0XFx0bGlzdCk7XFxuLVxcdFxcdG9wZXItXFx1MDAzZWN5Y2xlX2VuZF90aW1lID0ga3RpbWVfYWRkX25zKG9wZXItXFx1MDAzZWN5Y2xlX2VuZF90aW1lLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgb3Blci1cXHUwMDNlY3ljbGVfdGltZSk7XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdG5leHQgPSBsaXN0X25leHRfZW50cnkoZW50cnksIGxpc3QpO1xcbitcXHRub3cgPSBocnRpbWVyX2NiX2dldF90aW1lKHRpbWVyKTtcXG4rXFx0ZW5kX3RpbWUgPSBlbnRyeS1cXHUwMDNlZW5kX3RpbWU7XFxuK1xcdGJlaGluZCA9IGt0aW1lX3N1Yihub3csIGVuZF90aW1lKTtcXG4rXFxuK1xcdC8qIEJlaGluZCwgZS5nLiBkZWxheWVkIHRpbWVyIG9yIHN0ZXBwZWQgY2xvY2s6IHNraXAgd2hvbGUgcGVyaW9kc1xcbitcXHQgKiBhcml0aG1ldGljYWxseSBhbmQgd2FsayBhdCBtb3N0IG9uZSBtb3JlIHRvIHRoZSBlbnRyeSBjb3ZlcmluZ1xcbitcXHQgKiBub3csIGluc3RlYWQgb2YgcmVwbGF5aW5nIHRoZSBiYWNrbG9nIG9uZSBleHBpcnkgYXQgYSB0aW1lLiBUaGVcXG4rXFx0ICogY2FwIGJvdW5kcyB0aGUgd2FsazsgYSBsZWZ0b3ZlciBpcyBwaWNrZWQgdXAgYnkgdGhlIG5leHQgZXhwaXJ5LlxcbitcXHQgKi9cXG4rXFx0aWYgKHVubGlrZWx5KGJlaGluZCBcXHUwMDNlPSBvcGVyLVxcdTAwM2VwZXJpb2QpKSB7XFxuK1xcdFxcdHM2NCBqdW1wID0gZGl2NjRfczY0KGJlaGluZCwgb3Blci1cXHUwMDNlcGVyaW9kKSAqIG9wZXItXFx1MDAzZXBlcmlvZDtcXG4rXFxuK1xcdFxcdGVuZF90aW1lID0ga3RpbWVfYWRkX25zKGVuZF90aW1lLCBqdW1wKTtcXG4rXFx0XFx0b3Blci1cXHUwMDNlY3ljbGVfZW5kX3RpbWUgPSBrdGltZV9hZGRfbnMob3Blci1cXHUwMDNlY3ljbGVfZW5kX3RpbWUsIGp1bXApO1xcbiBcXHR9XFxuIFxcbi1cXHRlbmRfdGltZSA9IGt0aW1lX2FkZF9ucyhlbnRyeS1cXHUwMDNlZW5kX3RpbWUsIG5leHQtXFx1MDAzZWludGVydmFsKTtcXG4tXFx0ZW5kX3RpbWUgPSBtaW5fdChrdGltZV90LCBlbmRfdGltZSwgb3Blci1cXHUwMDNlY3ljbGVfZW5kX3RpbWUpO1xcbitcXHRidWRnZXQgPSAyICogb3Blci1cXHUwMDNlbnVtX2VudHJpZXM7XFxuK1xcdGRvIHtcXG4rXFx0XFx0aWYgKHNob3VsZF9yZXN0YXJ0X2N5Y2xlKG9wZXIsIGVudHJ5LCBlbmRfdGltZSkpIHtcXG4rXFx0XFx0XFx0bmV4dCA9IGxpc3RfZmlyc3RfZW50cnkoXFx1MDAyNm9wZXItXFx1MDAzZWVudHJpZXMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBzY2hlZF9lbnRyeSwgbGlzdCk7XFxuK1xcdFxcdFxcdG9wZXItXFx1MDAzZWN5Y2xlX2VuZF90aW1lID0ga3RpbWVfYWRkX25zKG9wZXItXFx1MDAzZWN5Y2xlX2VuZF90aW1lLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgb3Blci1cXHUwMDNlcGVyaW9kKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0bmV4dCA9IGxpc3RfbmV4dF9lbnRyeShlbnRyeSwgbGlzdCk7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdG5leHRfc3RhcnQgPSBlbmRfdGltZTtcXG4rXFx0XFx0ZW5kX3RpbWUgPSBrdGltZV9hZGRfbnMobmV4dF9zdGFydCwgbmV4dC1cXHUwMDNlaW50ZXJ2YWwpO1xcbitcXHRcXHRlbmRfdGltZSA9IG1pbl90KGt0aW1lX3QsIGVuZF90aW1lLCBvcGVyLVxcdTAwM2VjeWNsZV9lbmRfdGltZSk7XFxuK1xcdFxcdGVudHJ5ID0gbmV4dDtcXG4rXFx0fSB3aGlsZSAodW5saWtlbHkoa3RpbWVfY29tcGFyZShlbmRfdGltZSwgbm93KSBcXHUwMDNjPSAwKSBcXHUwMDI2XFx1MDAyNiBidWRnZXQtLSk7XFxuIFxcbitcXHQvKiBuZXh0IGNhbiBiZSB0aGUgZW50cnkgYWxyZWFkeSBwdWJsaXNoZWQgYXMgcS1cXHUwMDNlY3VycmVudF9lbnRyeSAoYVxcbitcXHQgKiBzaW5nbGUtZW50cnkgc2NoZWR1bGUsIG9yIGEgY2F0Y2gtdXAgb2Ygd2hvbGUgcGVyaW9kcyksIHNvIHRoZVxcbitcXHQgKiBjbG9zZSB0aW1lcyBhbmQgYnVkZ2V0cyBiZWxvdyBhcmUgcmV3cml0dGVuIGluIHBsYWNlIHdoaWxlXFxuK1xcdCAqIHRhcHJpb19kZXF1ZXVlX2Zyb21fdHhxKCkgbWF5IGJlIHJlYWRpbmcgdGhlbS5cXG4rXFx0ICovXFxuIFxcdGZvciAodGMgPSAwOyB0YyBcXHUwMDNjIG51bV90YzsgdGMrKykge1xcbiBcXHRcXHRpZiAobmV4dC1cXHUwMDNlZ2F0ZV9kdXJhdGlvblt0Y10gPT0gb3Blci1cXHUwMDNlY3ljbGVfdGltZSlcXG4gXFx0XFx0XFx0bmV4dC1cXHUwMDNlZ2F0ZV9jbG9zZV90aW1lW3RjXSA9IEtUSU1FX01BWDtcXG4gXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRuZXh0LVxcdTAwM2VnYXRlX2Nsb3NlX3RpbWVbdGNdID0ga3RpbWVfYWRkX25zKGVudHJ5LVxcdTAwM2VlbmRfdGltZSxcXG4rXFx0XFx0XFx0bmV4dC1cXHUwMDNlZ2F0ZV9jbG9zZV90aW1lW3RjXSA9IGt0aW1lX2FkZF9ucyhuZXh0X3N0YXJ0LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgbmV4dC1cXHUwMDNlZ2F0ZV9kdXJhdGlvblt0Y10pO1xcbiBcXHR9XFxuIFxcbkBAIC0xMTMwLDYgKzExNjIsOCBAQCBzdGF0aWMgaW50IHBhcnNlX3RhcHJpb19zY2hlZHVsZShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXFxuIFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpuZXcsXFxuIFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIHtcXG4rXFx0c3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeTtcXG4rXFx0a3RpbWVfdCBjeWNsZSA9IDA7XFxuIFxcdGludCBlcnIgPSAwO1xcbiBcXG4gXFx0aWYgKHRiW1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9TSU5HTEVfRU5UUlldKSB7XFxuQEAgLTExNTIsMTMgKzExODYsMTAgQEAgc3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxcbiBcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuLVxcdGlmICghbmV3LVxcdTAwM2VjeWNsZV90aW1lKSB7XFxuLVxcdFxcdHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnk7XFxuLVxcdFxcdGt0aW1lX3QgY3ljbGUgPSAwO1xcbi1cXG4tXFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgXFx1MDAyNm5ldy1cXHUwMDNlZW50cmllcywgbGlzdClcXG4tXFx0XFx0XFx0Y3ljbGUgPSBrdGltZV9hZGRfbnMoY3ljbGUsIGVudHJ5LVxcdTAwM2VpbnRlcnZhbCk7XFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIFxcdTAwMjZuZXctXFx1MDAzZWVudHJpZXMsIGxpc3QpXFxuK1xcdFxcdGN5Y2xlID0ga3RpbWVfYWRkX25zKGN5Y2xlLCBlbnRyeS1cXHUwMDNlaW50ZXJ2YWwpO1xcbiBcXG4rXFx0aWYgKCFuZXctXFx1MDAzZWN5Y2xlX3RpbWUpIHtcXG4gXFx0XFx0aWYgKGN5Y2xlIFxcdTAwM2MgMCB8fCBjeWNsZSBcXHUwMDNlIElOVF9NQVgpIHtcXG4gXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiJ2N5Y2xlX3RpbWUnIGlzIHRvbyBiaWdcXFwiKTtcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuQEAgLTExNzIsNiArMTIwMyw3IEBAIHN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YixcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuK1xcdG5ldy1cXHUwMDNlcGVyaW9kID0gbWluKG5ldy1cXHUwMDNlY3ljbGVfdGltZSwgY3ljbGUpO1xcbiBcXHR0YXByaW9fY2FsY3VsYXRlX2dhdGVfZHVyYXRpb25zKHEsIG5ldyk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6MDY6MzguODY0MTkwOTQ2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyOTQ3NDI0ODgyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIk5FVF9TQ0hfVEFQUklPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWR2YW5jZV9zY2hlZFwiLFxuICAgIFwicGFyc2VfdGFwcmlvX3NjaGVkdWxlXCIsXG4gICAgXCJ0YXByaW9fY2hhbmdlXCIsXG4gICAgXCJ0YXByaW9faW5pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzY2hlZHVsZSBwYXJzaW5nIGFuZCBocnRpbWVyIGFkdmFuY2UgYWxnb3JpdGhtIGluIHRoZSBUQVBSSU8gKFRpbWUtQXdhcmUgUHJpb3JpdHkpIHBhY2tldCBzY2hlZHVsZXIgKHNjaF90YXByaW8pLiBTcGVjaWZpY2FsbHksIGl0IGZpeGVzIGN5Y2xlIGNhdGNoLXVwIGxvZ2ljIHdoZW4gdGhlIHRpbWVyIGlzIGRlbGF5ZWQgb3IgdGhlIGNsb2NrIGlzIHN0ZXBwZWQgYnkgY2FsY3VsYXRpbmcgcGVyaW9kcyBhbmQgbGVhcGluZyBmb3J3YXJkLCBhbmQgYm91bmRzIHRoZSBzY2hlZHVsZSBjYXRjaC11cCBsb29wLiBUaGlzIG1vZGlmaWVzIGNvcmUgdHJhZmZpYyBjb250cm9sIHNjaGVkdWxpbmcgbG9naWMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIGNvbmZpZ3VyYXRpb24gYW5kIG5ldHdvcmsgcGFja2V0IHRyYW5zbWlzc2lvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDA0NGI4YmQwNDI3OGUwYzY4MjQxNTA2ZDM1OTUwNzEwNTMzZGJiNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDEgMjM6MDY6MzUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3RhcHJpby5jIGIvbmV0L3NjaGVkL3NjaF90YXByaW8uY1xuaW5kZXggMzlhYzViOTdhYTNhZi4uOTAxZGZkMjQ4NGUxMCAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9zY2hfdGFwcmlvLmNcbisrKyBiL25ldC9zY2hlZC9zY2hfdGFwcmlvLmNcbkBAIC04Myw2ICs4MywxMCBAQCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0IHtcbiBcdHM2NCBjeWNsZV90aW1lO1xuIFx0czY0IGN5Y2xlX3RpbWVfZXh0ZW5zaW9uO1xuIFx0czY0IGJhc2VfdGltZTtcbitcdC8qIG1pbihjeWNsZV90aW1lLCBzdW0gb2YgaW50ZXJ2YWxzKTogdGhlIHNvZnR3YXJlIHNjaGVkdWxlIHJlc3RhcnRzXG4rXHQgKiB0aGUgbGlzdCBhZnRlciB0aGUgbGFzdCBlbnRyeSBldmVuIHdoZW4gY3ljbGVfdGltZSBpcyBub3QgdXAgeWV0LlxuK1x0ICovXG4rXHRzNjQgcGVyaW9kO1xuIH07XG4gXG4gc3RydWN0IHRhcHJpb19zY2hlZCB7XG5AQCAtODcxLDEyICs4NzUsMTMgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp0YXByaW9fZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcbiB9XG4gXG4gc3RhdGljIGJvb2wgc2hvdWxkX3Jlc3RhcnRfY3ljbGUoY29uc3Qgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqb3Blcixcbi1cdFx0XHRcdCBjb25zdCBzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5KVxuK1x0XHRcdFx0IGNvbnN0IHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnksXG4rXHRcdFx0XHQga3RpbWVfdCBlbmRfdGltZSlcbiB7XG4gXHRpZiAobGlzdF9pc19sYXN0KFx1MDAyNmVudHJ5LVx1MDAzZWxpc3QsIFx1MDAyNm9wZXItXHUwMDNlZW50cmllcykpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuLVx0aWYgKGt0aW1lX2NvbXBhcmUoZW50cnktXHUwMDNlZW5kX3RpbWUsIG9wZXItXHUwMDNlY3ljbGVfZW5kX3RpbWUpID09IDApXG4rXHRpZiAoa3RpbWVfY29tcGFyZShlbmRfdGltZSwgb3Blci1cdTAwM2VjeWNsZV9lbmRfdGltZSkgPT0gMClcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHRyZXR1cm4gZmFsc2U7XG5AQCAtOTI1LDggKzkzMCw5IEBAIHN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBhZHZhbmNlX3NjaGVkKHN0cnVjdCBocnRpbWVyICp0aW1lcilcbiBcdGludCBudW1fdGMgPSBuZXRkZXZfZ2V0X251bV90YyhkZXYpO1xuIFx0c3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeSwgKm5leHQ7XG4gXHRzdHJ1Y3QgUWRpc2MgKnNjaCA9IHEtXHUwMDNlcm9vdDtcbi1cdGt0aW1lX3QgZW5kX3RpbWU7XG4tXHRpbnQgdGM7XG4rXHRrdGltZV90IGVuZF90aW1lLCBuZXh0X3N0YXJ0LCBub3c7XG4rXHRpbnQgYnVkZ2V0LCB0YztcbitcdHM2NCBiZWhpbmQ7XG4gXG4gXHRzcGluX2xvY2soXHUwMDI2cS1cdTAwM2VjdXJyZW50X2VudHJ5X2xvY2spO1xuIFx0ZW50cnkgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHEtXHUwMDNlY3VycmVudF9lbnRyeSxcbkBAIC05NTIsMjMgKzk1OCw0OSBAQCBzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgYWR2YW5jZV9zY2hlZChzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpXG4gXHRcdGdvdG8gZmlyc3RfcnVuO1xuIFx0fVxuIFxuLVx0aWYgKHNob3VsZF9yZXN0YXJ0X2N5Y2xlKG9wZXIsIGVudHJ5KSkge1xuLVx0XHRuZXh0ID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZvcGVyLVx1MDAzZWVudHJpZXMsIHN0cnVjdCBzY2hlZF9lbnRyeSxcbi1cdFx0XHRcdFx0bGlzdCk7XG4tXHRcdG9wZXItXHUwMDNlY3ljbGVfZW5kX3RpbWUgPSBrdGltZV9hZGRfbnMob3Blci1cdTAwM2VjeWNsZV9lbmRfdGltZSxcbi1cdFx0XHRcdFx0XHQgICAgb3Blci1cdTAwM2VjeWNsZV90aW1lKTtcbi1cdH0gZWxzZSB7XG4tXHRcdG5leHQgPSBsaXN0X25leHRfZW50cnkoZW50cnksIGxpc3QpO1xuK1x0bm93ID0gaHJ0aW1lcl9jYl9nZXRfdGltZSh0aW1lcik7XG4rXHRlbmRfdGltZSA9IGVudHJ5LVx1MDAzZWVuZF90aW1lO1xuK1x0YmVoaW5kID0ga3RpbWVfc3ViKG5vdywgZW5kX3RpbWUpO1xuK1xuK1x0LyogQmVoaW5kLCBlLmcuIGRlbGF5ZWQgdGltZXIgb3Igc3RlcHBlZCBjbG9jazogc2tpcCB3aG9sZSBwZXJpb2RzXG4rXHQgKiBhcml0aG1ldGljYWxseSBhbmQgd2FsayBhdCBtb3N0IG9uZSBtb3JlIHRvIHRoZSBlbnRyeSBjb3ZlcmluZ1xuK1x0ICogbm93LCBpbnN0ZWFkIG9mIHJlcGxheWluZyB0aGUgYmFja2xvZyBvbmUgZXhwaXJ5IGF0IGEgdGltZS4gVGhlXG4rXHQgKiBjYXAgYm91bmRzIHRoZSB3YWxrOyBhIGxlZnRvdmVyIGlzIHBpY2tlZCB1cCBieSB0aGUgbmV4dCBleHBpcnkuXG4rXHQgKi9cbitcdGlmICh1bmxpa2VseShiZWhpbmQgXHUwMDNlPSBvcGVyLVx1MDAzZXBlcmlvZCkpIHtcbitcdFx0czY0IGp1bXAgPSBkaXY2NF9zNjQoYmVoaW5kLCBvcGVyLVx1MDAzZXBlcmlvZCkgKiBvcGVyLVx1MDAzZXBlcmlvZDtcbitcbitcdFx0ZW5kX3RpbWUgPSBrdGltZV9hZGRfbnMoZW5kX3RpbWUsIGp1bXApO1xuK1x0XHRvcGVyLVx1MDAzZWN5Y2xlX2VuZF90aW1lID0ga3RpbWVfYWRkX25zKG9wZXItXHUwMDNlY3ljbGVfZW5kX3RpbWUsIGp1bXApO1xuIFx0fVxuIFxuLVx0ZW5kX3RpbWUgPSBrdGltZV9hZGRfbnMoZW50cnktXHUwMDNlZW5kX3RpbWUsIG5leHQtXHUwMDNlaW50ZXJ2YWwpO1xuLVx0ZW5kX3RpbWUgPSBtaW5fdChrdGltZV90LCBlbmRfdGltZSwgb3Blci1cdTAwM2VjeWNsZV9lbmRfdGltZSk7XG4rXHRidWRnZXQgPSAyICogb3Blci1cdTAwM2VudW1fZW50cmllcztcbitcdGRvIHtcbitcdFx0aWYgKHNob3VsZF9yZXN0YXJ0X2N5Y2xlKG9wZXIsIGVudHJ5LCBlbmRfdGltZSkpIHtcbitcdFx0XHRuZXh0ID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZvcGVyLVx1MDAzZWVudHJpZXMsXG4rXHRcdFx0XHRcdFx0c3RydWN0IHNjaGVkX2VudHJ5LCBsaXN0KTtcbitcdFx0XHRvcGVyLVx1MDAzZWN5Y2xlX2VuZF90aW1lID0ga3RpbWVfYWRkX25zKG9wZXItXHUwMDNlY3ljbGVfZW5kX3RpbWUsXG4rXHRcdFx0XHRcdFx0XHQgICAgb3Blci1cdTAwM2VwZXJpb2QpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdG5leHQgPSBsaXN0X25leHRfZW50cnkoZW50cnksIGxpc3QpO1xuK1x0XHR9XG4rXG4rXHRcdG5leHRfc3RhcnQgPSBlbmRfdGltZTtcbitcdFx0ZW5kX3RpbWUgPSBrdGltZV9hZGRfbnMobmV4dF9zdGFydCwgbmV4dC1cdTAwM2VpbnRlcnZhbCk7XG4rXHRcdGVuZF90aW1lID0gbWluX3Qoa3RpbWVfdCwgZW5kX3RpbWUsIG9wZXItXHUwMDNlY3ljbGVfZW5kX3RpbWUpO1xuK1x0XHRlbnRyeSA9IG5leHQ7XG4rXHR9IHdoaWxlICh1bmxpa2VseShrdGltZV9jb21wYXJlKGVuZF90aW1lLCBub3cpIFx1MDAzYz0gMCkgXHUwMDI2XHUwMDI2IGJ1ZGdldC0tKTtcbiBcbitcdC8qIG5leHQgY2FuIGJlIHRoZSBlbnRyeSBhbHJlYWR5IHB1Ymxpc2hlZCBhcyBxLVx1MDAzZWN1cnJlbnRfZW50cnkgKGFcbitcdCAqIHNpbmdsZS1lbnRyeSBzY2hlZHVsZSwgb3IgYSBjYXRjaC11cCBvZiB3aG9sZSBwZXJpb2RzKSwgc28gdGhlXG4rXHQgKiBjbG9zZSB0aW1lcyBhbmQgYnVkZ2V0cyBiZWxvdyBhcmUgcmV3cml0dGVuIGluIHBsYWNlIHdoaWxlXG4rXHQgKiB0YXByaW9fZGVxdWV1ZV9mcm9tX3R4cSgpIG1heSBiZSByZWFkaW5nIHRoZW0uXG4rXHQgKi9cbiBcdGZvciAodGMgPSAwOyB0YyBcdTAwM2MgbnVtX3RjOyB0YysrKSB7XG4gXHRcdGlmIChuZXh0LVx1MDAzZWdhdGVfZHVyYXRpb25bdGNdID09IG9wZXItXHUwMDNlY3ljbGVfdGltZSlcbiBcdFx0XHRuZXh0LVx1MDAzZWdhdGVfY2xvc2VfdGltZVt0Y10gPSBLVElNRV9NQVg7XG4gXHRcdGVsc2Vcbi1cdFx0XHRuZXh0LVx1MDAzZWdhdGVfY2xvc2VfdGltZVt0Y10gPSBrdGltZV9hZGRfbnMoZW50cnktXHUwMDNlZW5kX3RpbWUsXG4rXHRcdFx0bmV4dC1cdTAwM2VnYXRlX2Nsb3NlX3RpbWVbdGNdID0ga3RpbWVfYWRkX25zKG5leHRfc3RhcnQsXG4gXHRcdFx0XHRcdFx0XHRcdCBuZXh0LVx1MDAzZWdhdGVfZHVyYXRpb25bdGNdKTtcbiBcdH1cbiBcbkBAIC0xMTMwLDYgKzExNjIsOCBAQCBzdGF0aWMgaW50IHBhcnNlX3RhcHJpb19zY2hlZHVsZShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXG4gXHRcdFx0XHQgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqbmV3LFxuIFx0XHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4rXHRzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5O1xuK1x0a3RpbWVfdCBjeWNsZSA9IDA7XG4gXHRpbnQgZXJyID0gMDtcbiBcbiBcdGlmICh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfU0lOR0xFX0VOVFJZXSkge1xuQEAgLTExNTIsMTMgKzExODYsMTAgQEAgc3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxuIFx0aWYgKGVyciBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIGVycjtcbiBcbi1cdGlmICghbmV3LVx1MDAzZWN5Y2xlX3RpbWUpIHtcbi1cdFx0c3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeTtcbi1cdFx0a3RpbWVfdCBjeWNsZSA9IDA7XG4tXG4tXHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIFx1MDAyNm5ldy1cdTAwM2VlbnRyaWVzLCBsaXN0KVxuLVx0XHRcdGN5Y2xlID0ga3RpbWVfYWRkX25zKGN5Y2xlLCBlbnRyeS1cdTAwM2VpbnRlcnZhbCk7XG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBcdTAwMjZuZXctXHUwMDNlZW50cmllcywgbGlzdClcbitcdFx0Y3ljbGUgPSBrdGltZV9hZGRfbnMoY3ljbGUsIGVudHJ5LVx1MDAzZWludGVydmFsKTtcbiBcbitcdGlmICghbmV3LVx1MDAzZWN5Y2xlX3RpbWUpIHtcbiBcdFx0aWYgKGN5Y2xlIFx1MDAzYyAwIHx8IGN5Y2xlIFx1MDAzZSBJTlRfTUFYKSB7XG4gXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcIidjeWNsZV90aW1lJyBpcyB0b28gYmlnXCIpO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTExNzIsNiArMTIwMyw3IEBAIHN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YixcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4rXHRuZXctXHUwMDNlcGVyaW9kID0gbWluKG5ldy1cdTAwM2VjeWNsZV90aW1lLCBjeWNsZSk7XG4gXHR0YXByaW9fY2FsY3VsYXRlX2dhdGVfZHVyYXRpb25zKHEsIG5ldyk7XG4gXG4gXHRyZXR1cm4gMDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjA2OjM4Ljg2NDE5MjMxNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYwNTM1MjAwNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhbmFseXNpcyBvZiB0aGlzIHBhdGNoLCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgbmV0d29ya2luZyBrZXJuZWwgZXhwZXJ0OlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogVEFQUklPIGFuZCBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbkFscmlnaHQsIGEgbmV3IHBhdGNoIHRvIGBuZXQvc2NoZWQvc2NoX3RhcHJpby5jYC4gTXkgaW5pdGlhbCByZWFjdGlvbiBpcyB0byBhc3Nlc3MgaXRzIGltcGFjdCDigJMgZG9lcyBpdCBpbnRyb2R1Y2UgbmV3IGZ1bmN0aW9uYWxpdHkgb3Igc2lnbmlmaWNhbnRseSBhbHRlciBleGlzdGluZyBiZWhhdmlvciB0aGF0IHdhcnJhbnRzIGZ1enppbmc/IFRBUFJJTyBpcywgb2YgY291cnNlLCB0aGUgVGltZS1Bd2FyZSBQcmlvcml0eSBxdWV1aW5nIGRpc2NpcGxpbmUsIGEgY3JpdGljYWwgY29tcG9uZW50IGluIG1hbnkgbW9kZXJuIG5ldHdvcmsgZGVwbG95bWVudHMsIGVzcGVjaWFsbHkgdGhvc2UgZGVhbGluZyB3aXRoIHRpbWUtc2Vuc2l0aXZlIHRyYWZmaWMuIEFueSBjaGFuZ2UgaGVyZSBkZXNlcnZlcyBhIHRob3JvdWdoIGxvb2suIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGRpdmUgaW50byB0aGlzIGZpbGUgdXNpbmcgbXkgZXN0YWJsaXNoZWQgdG9vbGNoYWluIGFuZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBrZXJuZWwgdG8gc2VlIHByZWNpc2VseSB3aGF0IHRoaXMgcGF0Y2ggbW9kaWZpZXMuIEknbGwgbmVlZCB0byByYXBpZGx5IGRldGVybWluZSBob3cgdGhpcyBjaGFuZ2UgYWZmZWN0cyBUQVBSSU8ncyBjb3JlIGZ1bmN0aW9uYWxpdHksIGFueSBhZGRlZCBjb25maWd1cmFibGUgb3B0aW9ucywgb3IgY2hhbmdlcyB0byBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIga2VybmVsIGNvbXBvbmVudHMgYW5kLCBvZiBjb3Vyc2UsIHBvdGVudGlhbCBuZXcgY29kZSBwYXRocyB0aGF0IGNvdWxkIGJlIHJpcGUgZm9yIGZ1enppbmcgdnVsbmVyYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzMzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzowNjo0NC45MTc3MTM5M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjM2MzQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX1NDSF9UQVBSSU9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTE2Nz1jb25maWcgTkVUX1NDSF9NUVBSSU9fTElCXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy0xNzEtXFxubmV0L3NjaGVkL0tjb25maWc6MTcyOmNvbmZpZyBORVRfU0NIX1RBUFJJT1xcbm5ldC9zY2hlZC9LY29uZmlnLTE3My1cXHR0cmlzdGF0ZSBcXFwiVGltZSBBd2FyZSBQcmlvcml0eSAodGFwcmlvKSBTY2hlZHVsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjA2OjQ0Ljk2NDA4MDM4OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3OTU0MDY0NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBLY29uZmlnIGluIG5ldC9zY2hlZCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgbmV0d29ya2luZyBzY2hlZHVsZXIuIFRpbWUgdG8gcHVsbCB1cCB0aGUgYG5ldC9zY2hlZC9LY29uZmlnYCBmaWxlIGFuZCB0YWtlIGEgbG9vaywgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDE3Mi4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgY3J1Y2lhbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBvciBkZXBlbmRlbmNpZXMgdGhhdCBhcmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZpbmVyIHBvaW50cyBvZiB0aGUgc2NoZWR1bGVyJ3MgYmVoYXZpb3IuIFRoaXMgaXMgcHJvYmFibHkgd2hlcmUgdGhlIHJlYWxseSBpbXBvcnRhbnQsIG5vbi1vYnZpb3VzIHN0dWZmIGlzIGdvaW5nIHRvIGJlIGRlZmluZWQuIEknbSBob3BpbmcgSSdsbCBiZSBhYmxlIHRvIHNwb3QgYW55IHN1YnRsZXRpZXMgcmlnaHQgYXdheSBzbyBJIGNhbiBidWlsZCBhIG1lbnRhbCBtb2RlbCBvZiBob3cgaXQgYWxsIGhhbmdzIHRvZ2V0aGVyLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZGlnIHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTM5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6MDY6NDYuNzU5NDkwMTU4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTY1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTY1OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNjaF9ldGYuXFxuIDE2NjpcXHRcXG4gMTY3OlxcdGNvbmZpZyBORVRfU0NIX01RUFJJT19MSUJcXG4gMTY4OlxcdFxcdHRyaXN0YXRlXFxuIDE2OTpcXHRcXHRoZWxwXFxuIDE3MDpcXHRcXHQgIENvbW1vbiBsaWJyYXJ5IGZvciBtYW5pcHVsYXRpbmcgbXFwcmlvIHF1ZXVlIGNvbmZpZ3VyYXRpb25zLlxcbiAxNzE6XFx0XFxuIDE3MjpcXHRjb25maWcgTkVUX1NDSF9UQVBSSU9cXG4gMTczOlxcdFxcdHRyaXN0YXRlIFxcXCJUaW1lIEF3YXJlIFByaW9yaXR5ICh0YXByaW8pIFNjaGVkdWxlclxcXCJcXG4gMTc0OlxcdFxcdHNlbGVjdCBORVRfU0NIX01RUFJJT19MSUJcXG4gMTc1OlxcdFxcdGhlbHBcXG4gMTc2OlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIFRpbWUgQXdhcmUgUHJpb3JpdHkgKHRhcHJpbykgcGFja2V0XFxuIDE3NzpcXHRcXHQgIHNjaGVkdWxpbmcgYWxnb3JpdGhtLlxcbiAxNzg6XFx0XFxuIDE3OTpcXHRcXHQgIFNlZSB0aGUgdG9wIG9mIFxcdTAwM2NmaWxlOm5ldC9zY2hlZC9zY2hfdGFwcmlvLmNcXHUwMDNlIGZvciBtb3JlIGRldGFpbHMuXFxuIDE4MDpcXHRcXG4gMTgxOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAxODI6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2NoX3RhcHJpby5cXG4gMTgzOlxcdFxcbiAxODQ6XFx0Y29uZmlnIE5FVF9TQ0hfR1JFRFxcbiAxODU6XFx0XFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgUmFuZG9tIEVhcmx5IERldGVjdGlvbiAoR1JFRClcXFwiXFxuIDE4NjpcXHRcXHRoZWxwXFxuIDE4NzpcXHRcXHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBHZW5lcmljIFJhbmRvbSBFYXJseSBEZXRlY3Rpb25cXG4gMTg4OlxcdFxcdCAgKEdSRUQpIHBhY2tldCBzY2hlZHVsaW5nIGFsZ29yaXRobSBmb3Igc29tZSBvZiB5b3VyIG5ldHdvcmsgZGV2aWNlc1xcbiAxODk6XFx0XFx0ICAoc2VlIHRoZSB0b3Agb2YgXFx1MDAzY2ZpbGU6bmV0L3NjaGVkL3NjaF9yZWQuY1xcdTAwM2UgZm9yIGRldGFpbHMgYW5kXFxuIDE5MDpcXHRcXHQgIHJlZmVyZW5jZXMgYWJvdXQgdGhlIGFsZ29yaXRobSkuXFxuIDE5MTpcXHRcXG4gMTkyOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAxOTM6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2NoX2dyZWQuXFxuIDE5NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6MDY6NDYuNzU5NTY4Mjg4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMzNzM5Mjk2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIE5FVF9TQ0hfVEFQUklPIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBmb3IgYE5FVF9TQ0hfVEFQUklPYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiBhbnkgc3VwcG9ydGluZyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlICphbHNvKiBuZWVkZWQgaW4gb3JkZXIgZm9yIGBORVRfU0NIX1RBUFJJT2AgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IHRoaXMgaW52ZXN0aWdhdGlvbiBpcyB3aXRoaW4gdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24gZmlsZXMuIEknbGwgbmVlZCB0byBkaWcgaW50byBgbmV0L0tjb25maWdgIG9yIHBvc3NpYmx5IHRoZSBtb3JlIHNwZWNpZmljIGBuZXQvc2NoZWQvS2NvbmZpZ2AgZmlsZSB0byBzZWUgd2hhdCB0aGUgYnVpbGQgc3lzdGVtIGV4cGVjdHMuIFRoYXQgc2hvdWxkIHJldmVhbCB3aGF0IG90aGVyIHNldHRpbmdzIG1pZ2h0IG5lZWQgdG8gYmUgZW5hYmxlZCBhbG9uZ3NpZGUgYE5FVF9TQ0hfVEFQUklPYC4gSG9wZWZ1bGx5LCB0aGlzIHdpbGwgc2hlZCBzb21lIGxpZ2h0IG9uIHdoYXQgb3RoZXIgcGllY2VzIG9mIHRoZSBuZXR3b3JrIHN0YWNrIGFyZSBpbnZvbHZlZCBpbiBzdXBwb3J0aW5nIHRoaXMgVHJhZmZpYyBBd2FyZSBTaGFwaW5nIHNjaGVkdWxlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDgxNywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6MDY6NDkuMDk2OTYzMjA4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODMxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgVHJhZmZpYyBjb250cm9sIGNvbmZpZ3VyYXRpb24uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnVjb25maWcgTkVUX1NDSEVEXFxuICAgNzpcXHRcXHRib29sIFxcXCJRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcXFwiXFxuICAgODpcXHRcXHRzZWxlY3QgTkVUX1NDSF9GSUZPXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIFdoZW4gdGhlIGtlcm5lbCBoYXMgc2V2ZXJhbCBwYWNrZXRzIHRvIHNlbmQgb3V0IG92ZXIgYSBuZXR3b3JrXFxuICAxMTpcXHRcXHQgIGRldmljZSwgaXQgaGFzIHRvIGRlY2lkZSB3aGljaCBvbmVzIHRvIHNlbmQgZmlyc3QsIHdoaWNoIG9uZXMgdG9cXG4gIDEyOlxcdFxcdCAgZGVsYXksIGFuZCB3aGljaCBvbmVzIHRvIGRyb3AuIFRoaXMgaXMgdGhlIGpvYiBvZiB0aGUgcXVldWVpbmdcXG4gIDEzOlxcdFxcdCAgZGlzY2lwbGluZXMsIHNldmVyYWwgZGlmZmVyZW50IGFsZ29yaXRobXMgZm9yIGhvdyB0byBkbyB0aGlzXFxuICAxNDpcXHRcXHQgIFxcXCJmYWlybHlcXFwiIGhhdmUgYmVlbiBwcm9wb3NlZC5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0XFx0ICBJZiB5b3Ugc2F5IE4gaGVyZSwgeW91IHdpbGwgZ2V0IHRoZSBzdGFuZGFyZCBwYWNrZXQgc2NoZWR1bGVyLCB3aGljaFxcbiAgMTc6XFx0XFx0ICBpcyBhIEZJRk8gKGZpcnN0IGNvbWUsIGZpcnN0IHNlcnZlZCkuIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZVxcbiAgMTg6XFx0XFx0ICBhYmxlIHRvIGNob29zZSBmcm9tIGFtb25nIHNldmVyYWwgYWx0ZXJuYXRpdmUgYWxnb3JpdGhtcyB3aGljaCBjYW5cXG4gIDE5OlxcdFxcdCAgdGhlbiBiZSBhdHRhY2hlZCB0byBkaWZmZXJlbnQgbmV0d29yayBkZXZpY2VzLiBUaGlzIGlzIHVzZWZ1bCBmb3JcXG4gIDIwOlxcdFxcdCAgZXhhbXBsZSBpZiBzb21lIG9mIHlvdXIgbmV0d29yayBkZXZpY2VzIGFyZSByZWFsIHRpbWUgZGV2aWNlcyB0aGF0XFxuICAyMTpcXHRcXHQgIG5lZWQgYSBjZXJ0YWluIG1pbmltdW0gZGF0YSBmbG93IHJhdGUsIG9yIGlmIHlvdSBuZWVkIHRvIGxpbWl0IHRoZVxcbiAgMjI6XFx0XFx0ICBtYXhpbXVtIGRhdGEgZmxvdyByYXRlIGZvciB0cmFmZmljIHdoaWNoIG1hdGNoZXMgc3BlY2lmaWVkIGNyaXRlcmlhLlxcbiAgMjM6XFx0XFx0ICBUaGlzIGNvZGUgaXMgY29uc2lkZXJlZCB0byBiZSBleHBlcmltZW50YWwuXFxuICAyNDpcXHRcXG4gIDI1OlxcdFxcdCAgVG8gYWRtaW5pc3RlciB0aGVzZSBzY2hlZHVsZXJzLCB5b3UnbGwgbmVlZCB0aGUgdXNlci1sZXZlbCB1dGlsaXRpZXNcXG4gIDI2OlxcdFxcdCAgZnJvbSB0aGUgcGFja2FnZSBpcHJvdXRlMit0YyBhdFxcbiAgMjc6XFx0XFx0ICBcXHUwMDNjaHR0cHM6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMvbmV0L2lwcm91dGUyL1xcdTAwM2UuICBUaGF0IHBhY2thZ2VcXG4gIDI4OlxcdFxcdCAgYWxzbyBjb250YWlucyBzb21lIGRvY3VtZW50YXRpb247IGZvciBtb3JlLCBjaGVjayBvdXRcXG4gIDI5OlxcdFxcdCAgXFx1MDAzY2h0dHA6Ly93d3cubGludXhmb3VuZGF0aW9uLm9yZy9jb2xsYWJvcmF0ZS93b3JrZ3JvdXBzL25ldHdvcmtpbmcvaXByb3V0ZTJcXHUwMDNlLlxcbiAgMzA6XFx0XFxuICAzMTpcXHRcXHQgIFRoaXMgUXVhbGl0eSBvZiBTZXJ2aWNlIChRb1MpIHN1cHBvcnQgd2lsbCBlbmFibGUgeW91IHRvIHVzZVxcbiAgMzI6XFx0XFx0ICBEaWZmZXJlbnRpYXRlZCBTZXJ2aWNlcyAoZGlmZnNlcnYpIGFuZCBSZXNvdXJjZSBSZXNlcnZhdGlvbiBQcm90b2NvbFxcbiAgMzM6XFx0XFx0ICAoUlNWUCkgb24geW91ciBMaW51eCByb3V0ZXIgaWYgeW91IGFsc28gc2F5IFkgdG8gdGhlIGNvcnJlc3BvbmRpbmdcXG4gIDM0OlxcdFxcdCAgY2xhc3NpZmllcnMgYmVsb3cuICBEb2N1bWVudGF0aW9uIGFuZCBzb2Z0d2FyZSBpcyBhdFxcbiAgMzU6XFx0XFx0ICBcXHUwMDNjaHR0cDovL2RpZmZzZXJ2LnNvdXJjZWZvcmdlLm5ldC9cXHUwMDNlLlxcbiAgMzY6XFx0XFxuICAzNzpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlIGFuZCB0byBcXFwiL3Byb2MgZmlsZSBzeXN0ZW1cXFwiIGJlbG93LCB5b3Ugd2lsbCBiZSBhYmxlXFxuICAzODpcXHRcXHQgIHRvIHJlYWQgc3RhdHVzIGluZm9ybWF0aW9uIGFib3V0IHBhY2tldCBzY2hlZHVsZXJzIGZyb20gdGhlIGZpbGVcXG4gIDM5OlxcdFxcdCAgL3Byb2MvbmV0L3BzY2hlZC5cXG4gIDQwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzowNjo0OS4wOTcwNDc1ODhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjk0NDg3MDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipEaXZpbmcgaW50byB0aGUgVEFQUklPIFNjaGVkdWxlciBDb2RlKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCBhIHF1aWNrIHJlZnJlc2hlciBvbiB0aGUgYG5ldC9zY2hlZC9zY2hfdGFwcmlvLmNgIGNvZGUuIE15IGZpcnN0IHN0ZXAgaXMgdG8gcXVpY2tseSBpZGVudGlmeSBhbGwgdGhlIGVudHJ5IHBvaW50cyBhbmQgdGhlIGNydWNpYWwgZnVuY3Rpb25zIGRlZmluZWQgd2l0aGluIHRoaXMgZmlsZS4gVGhpcyBnaXZlcyBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIFRhcHJpbyBzY2hlZHVsZXIncyBjb3JlIGZ1bmN0aW9uYWxpdHksIGxheWluZyB0aGUgZm91bmRhdGlvbiBmb3IgYSBkZWVwZXIgZGl2ZS4gTmV4dCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCdzIGJlZW4gZGVmaW5lZCBpbiB0aGUgZmlsZS4gRXNzZW50aWFsbHksIEknbGwgbmVlZCB0byBrbm93IHdoYXQgc3ltYm9scyBhcmUgZXhwb3NlZCBieSBgc2NoX3RhcHJpby5jYCBpbiBvcmRlciB0byBzZWUgd2hhdCB0aGUgbW9kdWxlIGlzIGRvaW5nLiBXaXRoIHRoaXMgY29udGV4dCwgSSBjYW4gZ3Jhc3AgdGhlIHNjaGVkdWxlcidzIGFyY2hpdGVjdHVyZSBhbmQgaG93IGl0cyBlbGVtZW50cyBpbnRlcnJlbGF0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTcxMCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6MDY6NTEuMzkxNTM2NjI4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzMyOTAyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJec3RhdGljIChpbnR8dm9pZHxzdHJ1Y3R8ZW51bSlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL3NjaF90YXByaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvc2NoX3RhcHJpby5jPTM1PXN0YXRpYyBMSVNUX0hFQUQodGFwcmlvX2xpc3QpO1xcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MzY6c3RhdGljIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHRhcHJpb19oYXZlX2Jyb2tlbl9tcXByaW87XFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzozNzpzdGF0aWMgc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgdGFwcmlvX2hhdmVfd29ya2luZ19tcXByaW87XFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0zOC1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MTE4PXN0cnVjdCBfX3RjX3RhcHJpb19xb3B0X29mZmxvYWQge1xcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMjItXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMjM6c3RhdGljIHZvaWQgdGFwcmlvX2NhbGN1bGF0ZV9nYXRlX2R1cmF0aW9ucyhzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTI0LVxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZClcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MTk1PXN0YXRpYyBrdGltZV90IHRhcHJpb19nZXRfdGltZShjb25zdCBzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxKVxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xOTktXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyMDA6c3RhdGljIHZvaWQgdGFwcmlvX2ZyZWVfc2NoZWRfY2Ioc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjAxLXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjEyLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjEzOnN0YXRpYyB2b2lkIHN3aXRjaF9zY2hlZHVsZXMoc3RydWN0IHRhcHJpb19zY2hlZCAqcSxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIxNC1cXHRcXHRcXHQgICAgIHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKiphZG1pbixcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MjM5PXN0YXRpYyBrdGltZV90IGdldF9pbnRlcnZhbF9lbmRfdGltZShzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjYwLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjYxOnN0YXRpYyBpbnQgbGVuZ3RoX3RvX2R1cmF0aW9uKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIGludCBsZW4pXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNjIte1xcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNjUtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNjY6c3RhdGljIGludCBkdXJhdGlvbl90b19sZW5ndGgoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgdTY0IGR1cmF0aW9uKVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjY3LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjc0LSAqL1xcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6Mjc1OnN0YXRpYyB2b2lkIHRhcHJpb191cGRhdGVfcXVldWVfbWF4X3NkdShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjc2LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkLFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0zMjYtICovXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzozMjc6c3RhdGljIHN0cnVjdCBzY2hlZF9lbnRyeSAqZmluZF9lbnRyeV90b190cmFuc21pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMzI4LVxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IFFkaXNjICpzY2gsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTU0ND1zdGF0aWMgYm9vbCB0YXByaW9fc2tiX2V4Y2VlZHNfcXVldWVfbWF4X3NkdShzdHJ1Y3QgUWRpc2MgKnNjaCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNTY0LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6NTY1OnN0YXRpYyBpbnQgdGFwcmlvX2VucXVldWVfb25lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNTY2LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBRZGlzYyAqY2hpbGQsIHN0cnVjdCBza19idWZmICoqdG9fZnJlZSlcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNTg1LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6NTg2OnN0YXRpYyBpbnQgdGFwcmlvX2VucXVldWVfc2VnbWVudGVkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNTg3LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgUWRpc2MgKmNoaWxkLFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy02MzAtICovXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzo2MzE6c3RhdGljIGludCB0YXByaW9fZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTYzMi1cXHRcXHRcXHQgIHN0cnVjdCBza19idWZmICoqdG9fZnJlZSlcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNjU5LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6NjYwOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdGFwcmlvX3BlZWsoc3RydWN0IFFkaXNjICpzY2gpXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy02NjEte1xcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy02NjUtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzo2NjY6c3RhdGljIHZvaWQgdGFwcmlvX3NldF9idWRnZXRzKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy02NjctXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkLFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy02ODYtLyogV2hlbiBhbiBza2IgaXMgc2VudCwgaXQgY29uc3VtZXMgZnJvbSB0aGUgYnVkZ2V0IG9mIGFsbCB0cmFmZmljIGNsYXNzZXMgKi9cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjY4NzpzdGF0aWMgaW50IHRhcHJpb191cGRhdGVfYnVkZ2V0cyhzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5LCBzaXplX3QgbGVuLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNjg4LVxcdFxcdFxcdFxcdCBpbnQgdGNfY29uc3VtZWQsIGludCBudW1fdGMpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTcwOS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjcxMDpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnRhcHJpb19kZXF1ZXVlX2Zyb21fdHhxKHN0cnVjdCBRZGlzYyAqc2NoLCBpbnQgdHhxLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNzExLVxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5LFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy03NjYtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzo3Njc6c3RhdGljIHZvaWQgdGFwcmlvX25leHRfdGNfdHhxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCB0YywgaW50ICp0eHEpXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy03Njgte1xcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy03ODAtICovXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzo3ODE6c3RhdGljIHN0cnVjdCBza19idWZmICp0YXByaW9fZGVxdWV1ZV90Y19wcmlvcml0eShzdHJ1Y3QgUWRpc2MgKnNjaCxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTc4Mi1cXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnksXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTgxNi0gKi9cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjgxNzpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnRhcHJpb19kZXF1ZXVlX3R4cV9wcmlvcml0eShzdHJ1Y3QgUWRpc2MgKnNjaCxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTgxOC1cXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5LFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy04MzYtICovXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzo4Mzc6c3RhdGljIHN0cnVjdCBza19idWZmICp0YXByaW9fZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTgzOC17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTg5MD1zdGF0aWMgYm9vbCBzaG91bGRfY2hhbmdlX3NjaGVkdWxlcyhjb25zdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICphZG1pbixcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtOTIzLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6OTI0OnN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBhZHZhbmNlX3NjaGVkKHN0cnVjdCBocnRpbWVyICp0aW1lcilcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTkyNS17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTEwNTM9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHRhcHJpb19wb2xpY3lbVENBX1RBUFJJT19BVFRSX01BWCArIDFdID0ge1xcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMDY5LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTA3MDpzdGF0aWMgaW50IGZpbGxfc2NoZWRfZW50cnkoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTA3MS1cXHRcXHRcXHQgICAgc3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeSxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTEwMS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjExMDI6c3RhdGljIGludCBwYXJzZV9zY2hlZF9lbnRyeShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICpuLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTEwMy1cXHRcXHRcXHQgICAgIHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnksIGludCBpbmRleCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTEyMC1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjExMjE6c3RhdGljIGludCBwYXJzZV9zY2hlZF9saXN0KHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKmxpc3QsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMTIyLVxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTE2MC1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjExNjE6c3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTE2Mi1cXHRcXHRcXHRcXHQgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqbmV3LFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMjExLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTIxMjpzdGF0aWMgaW50IHRhcHJpb19wYXJzZV9tcXByaW9fb3B0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMjEzLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTIzOS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjEyNDA6c3RhdGljIGludCB0YXByaW9fZ2V0X3N0YXJ0X3RpbWUoc3RydWN0IFFkaXNjICpzY2gsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMjQxLVxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTI3My1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjEyNzQ6c3RhdGljIHZvaWQgc2V0dXBfZmlyc3RfZW5kX3RpbWUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEyNzUtXFx0XFx0XFx0XFx0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkLCBrdGltZV90IGJhc2UpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEzMDMtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMzA0OnN0YXRpYyB2b2lkIHRhcHJpb19zdGFydF9zY2hlZChzdHJ1Y3QgUWRpc2MgKnNjaCxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEzMDUtXFx0XFx0XFx0ICAgICAgIGt0aW1lX3Qgc3RhcnQsIHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKm5ldylcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTMyNS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjEzMjY6c3RhdGljIHZvaWQgdGFwcmlvX3NldF9waWNvc19wZXJfYnl0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTMyNy1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMzU5LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTM2MDpzdGF0aWMgaW50IHRhcHJpb19kZXZfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBldmVudCxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEzNjEtXFx0XFx0XFx0ICAgICAgIHZvaWQgKnB0cilcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTM5Ni1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjEzOTc6c3RhdGljIHZvaWQgc2V0dXBfdHh0aW1lKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMzk4LVxcdFxcdFxcdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZCwga3RpbWVfdCBiYXNlKVxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNDA4LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTQwOTpzdGF0aWMgc3RydWN0IHRjX3RhcHJpb19xb3B0X29mZmxvYWQgKnRhcHJpb19vZmZsb2FkX2FsbG9jKGludCBudW1fZW50cmllcylcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE0MTAte1xcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xNDQ4PUVYUE9SVF9TWU1CT0xfR1BMKHRhcHJpb19vZmZsb2FkX2ZyZWUpO1xcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNDYxLSAqL1xcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTQ2MjpzdGF0aWMgdm9pZCB0YXByaW9fb2ZmbG9hZF9jb25maWdfY2hhbmdlZChzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxKVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTQ2My17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTE0NzI9c3RhdGljIHUzMiB0Y19tYXBfdG9fcXVldWVfbWFzayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgdGNfbWFzaylcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTQ5MC1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE0OTE6c3RhdGljIHZvaWQgdGFwcmlvX3NjaGVkX3RvX29mZmxvYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE0OTItXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkLFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNTE5LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTUyMDpzdGF0aWMgdm9pZCB0YXByaW9fZGV0ZWN0X2Jyb2tlbl9tcXByaW8oc3RydWN0IHRhcHJpb19zY2hlZCAqcSlcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE1MjEte1xcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNTM2LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTUzNzpzdGF0aWMgdm9pZCB0YXByaW9fY2xlYW51cF9icm9rZW5fbXFwcmlvKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEpXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNTM4LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTU0Ny1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE1NDg6c3RhdGljIGludCB0YXByaW9fZW5hYmxlX29mZmxvYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE1NDktXFx0XFx0XFx0XFx0IHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE2MTMtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxNjE0OnN0YXRpYyBpbnQgdGFwcmlvX2Rpc2FibGVfb2ZmbG9hZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTYxNS1cXHRcXHRcXHRcXHQgIHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE2NTQtICovXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxNjU1OnN0YXRpYyBpbnQgdGFwcmlvX3BhcnNlX2Nsb2NraWQoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKip0YixcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE2NTYtXFx0XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNzMyLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTczMzpzdGF0aWMgaW50IHRhcHJpb19wYXJzZV90Y19lbnRyeShzdHJ1Y3QgUWRpc2MgKnNjaCxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE3MzQtXFx0XFx0XFx0XFx0IHN0cnVjdCBubGF0dHIgKm9wdCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTc3OS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE3ODA6c3RhdGljIGludCB0YXByaW9fcGFyc2VfdGNfZW50cmllcyhzdHJ1Y3QgUWRpc2MgKnNjaCxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE3ODEtXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5sYXR0ciAqb3B0LFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xODI5LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTgzMDpzdGF0aWMgaW50IHRhcHJpb19tcXByaW9fY21wKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xODMxLVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHRjX21xcHJpb19xb3B0ICptcXByaW8pXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE4NTMtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxODU0OnN0YXRpYyBpbnQgdGFwcmlvX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTg1NS1cXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMDQ4LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjA0OTpzdGF0aWMgdm9pZCB0YXByaW9fcmVzZXQoc3RydWN0IFFkaXNjICpzY2gpXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMDUwLXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjA2My1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIwNjQ6c3RhdGljIHZvaWQgdGFwcmlvX2Rlc3Ryb3koc3RydWN0IFFkaXNjICpzY2gpXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMDY1LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjEwMi1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIxMDM6c3RhdGljIGludCB0YXByaW9faW5pdChzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjEwNC1cXHRcXHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMTY3LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjE2ODpzdGF0aWMgdm9pZCB0YXByaW9fYXR0YWNoKHN0cnVjdCBRZGlzYyAqc2NoKVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjE2OS17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIyMDMtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyMjA0OnN0YXRpYyBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0YXByaW9fcXVldWVfZ2V0KHN0cnVjdCBRZGlzYyAqc2NoLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjIwNS1cXHRcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgY2wpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIyMTUtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyMjE2OnN0YXRpYyBpbnQgdGFwcmlvX2dyYWZ0KHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGNsLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjIxNy1cXHRcXHRcXHRzdHJ1Y3QgUWRpc2MgKm5ldywgc3RydWN0IFFkaXNjICoqb2xkLFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMjU4LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjI1OTpzdGF0aWMgaW50IGR1bXBfZW50cnkoc3RydWN0IHNrX2J1ZmYgKm1zZyxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIyNjAtXFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeSlcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjI4OC1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIyODk6c3RhdGljIGludCBkdW1wX3NjaGVkdWxlKHN0cnVjdCBza19idWZmICptc2csXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMjkwLVxcdFxcdFxcdCBjb25zdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpyb290KVxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMzI0LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjMyNTpzdGF0aWMgaW50IHRhcHJpb19kdW1wX3RjX2VudHJpZXMoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIzMjYtXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMzU3LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjM1ODpzdGF0aWMgaW50IHRhcHJpb19wdXRfc3RhdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1NjQgdmFsLCB1MTYgYXR0cnR5cGUpXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMzU5LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjM2Ni1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIzNjc6c3RhdGljIGludCB0YXByaW9fZHVtcF94c3RhdHMoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBnbmV0X2R1bXAgKmQsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMzY4LVxcdFxcdFxcdCAgICAgIHN0cnVjdCB0Y190YXByaW9fcW9wdF9vZmZsb2FkICpvZmZsb2FkLFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNDE0LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjQxNTpzdGF0aWMgaW50IHRhcHJpb19kdW1wX3N0YXRzKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgZ25ldF9kdW1wICpkKVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjQxNi17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI0MjMtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNDI0OnN0YXRpYyBpbnQgdGFwcmlvX2R1bXAoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNDI1LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjQ5My1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjI0OTQ6c3RhdGljIHN0cnVjdCBRZGlzYyAqdGFwcmlvX2xlYWYoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgY2wpXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNDk1LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MjUwNj1zdGF0aWMgdW5zaWduZWQgbG9uZyB0YXByaW9fZmluZChzdHJ1Y3QgUWRpc2MgKnNjaCwgdTMyIGNsYXNzaWQpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1MTQtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNTE1OnN0YXRpYyBpbnQgdGFwcmlvX2R1bXBfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgY2wsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNTE2LVxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjbXNnICp0Y20pXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1MjYtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNTI3OnN0YXRpYyBpbnQgdGFwcmlvX2R1bXBfY2xhc3Nfc3RhdHMoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgY2wsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNTI4LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBnbmV0X2R1bXAgKmQpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1NDYtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNTQ3OnN0YXRpYyB2b2lkIHRhcHJpb193YWxrKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgcWRpc2Nfd2Fsa2VyICphcmcpXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNTQ4LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjU2MS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjI1NjI6c3RhdGljIHN0cnVjdCBuZXRkZXZfcXVldWUgKnRhcHJpb19zZWxlY3RfcXVldWUoc3RydWN0IFFkaXNjICpzY2gsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNTYzLVxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCB0Y21zZyAqdGNtKVxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0yNTY4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgUWRpc2NfY2xhc3Nfb3BzIHRhcHJpb19jbGFzc19vcHMgPSB7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1NzctXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNTc4OnN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzIHRhcHJpb19xZGlzY19vcHMgX19yZWFkX21vc3RseSA9IHtcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1NzktXFx0LmNsX29wc1xcdFxcdD0gXFx1MDAyNnRhcHJpb19jbGFzc19vcHMsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTI1OTQ9TU9EVUxFX0FMSUFTX05FVF9TQ0goXFxcInRhcHJpb1xcXCIpO1xcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjU5NS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjI1OTY6c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB0YXByaW9fZGV2aWNlX25vdGlmaWVyID0ge1xcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjU5Ny1cXHQubm90aWZpZXJfY2FsbCA9IHRhcHJpb19kZXZfbm90aWZpZXIsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1OTktXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNjAwOnN0YXRpYyBpbnQgX19pbml0IHRhcHJpb19tb2R1bGVfaW5pdCh2b2lkKVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjYwMS17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI2MDktXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNjEwOnN0YXRpYyB2b2lkIF9fZXhpdCB0YXByaW9fbW9kdWxlX2V4aXQodm9pZClcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI2MTEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzowNjo1MS40Mzg4NzA3MjdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjU4NTY0MzEzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRhcHJpbyBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2guIEknbSBsb29raW5nIGF0IG1vZGlmaWNhdGlvbnMgdG8gYG5ldC9zY2hlZC9zY2hfdGFwcmlvLmNgLCBzcGVjaWZpY2FsbHkgYGFkdmFuY2Vfc2NoZWRgIGFuZCBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYC4gSW4gYGFkdmFuY2Vfc2NoZWRgLCB3ZSBoYXZlIHRoZSBocnRpbWVyIGNhbGxiYWNrIGFkdmFuY2luZyB0aGUgVGFwcmlvIHNjaGVkdWxlLiBUaGUga2V5IGhlcmUgaXMgdGhlIGNhdGNoLXVwIGxvZ2ljIHdoZW4gdGhlIHNjaGVkdWxlIGxhZ3Mg4oCTIGBrdGltZV9zdWJgLCB0aGUgYHVubGlrZWx5YCBjaGVja3MsIGFuZCB0aGF0IGBkby4uLndoaWxlYCBsb29wIGFkanVzdGluZyBmb3IgZGVsYXlzLiBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCwgY2FsY3VsYXRlcyB0aGUgbmV3IHBlcmlvZC5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiQ2FuIHRoaXMgYmUgaGl0IGluIGEgdGVzdCBlbnZpcm9ubWVudD9cIiBBYnNvbHV0ZWx5LiBUYXByaW8gY2FuIHJ1biBvbiAqYW55KiBuZXR3b3JrIGludGVyZmFjZSwgd2hldGhlciBpdCdzIHNvZnR3YXJlLWJhc2VkIHVzaW5nIGhydGltZXIgb3Igb24gdGhlIHVzdWFsIHRhcC92ZXRoL2R1bW15IGludGVyZmFjZXMgdmlhIGB0YyBxZGlzYyBhZGQgLi4uYC4gU28sIHdlIGNhbiBkZWZpbml0ZWx5IHJlcGxpY2F0ZSB0aGlzLlxuXG5UaGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgdG91Y2hpbmcgY29yZSBuZXR3b3JrIHRyYWZmaWMgY29udHJvbCBsb2dpYyB3aXRoaW4gdGhlIGtlcm5lbC4gSXTigJlzIG1vZGlmeWluZyB0aGUgY3JpdGljYWwgdGltZXIgYWR2YW5jZW1lbnQgYWxnb3JpdGhtIGFuZCBzY2hlZHVsZSBjYWxjdWxhdGlvbiB3aXRoaW4gdGhlIFRhcHJpbyBxZGlzYywgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgZGV0ZXJtaW5pc3RpYyBzY2hlZHVsaW5nLiBEZWZpbml0ZWx5IHdvcnRoIGEgZGVlcGVyIGxvb2suXG5cbk5vdywgbGV0J3MgdGFsayBmdXp6aW5nLiBZZXMsIHRoaXMgaXMgYSBjbGVhciBjYW5kaWRhdGUuIFdl4oCZcmUgZGVhbGluZyB3aXRoIGZ1bmN0aW9uYWwgbmV0d29yayBxZGlzYyBsb2dpYyB0aGF0J3MgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayAocnRuZXRsaW5rIC8gdGMpLiBUaGF04oCZcyBhIGdyZWF0IGF0dGFjayBzdXJmYWNlLlxuXG5MZXTigJlzIHplcm8gaW4gb24gdGhlIGtleSBzeW1ib2xzOiBgYWR2YW5jZV9zY2hlZGAgKHRoZSBocnRpbWVyIGNhbGxiYWNrKSwgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgKHRoZSBzY2hlZHVsZSBwYXJzaW5nKSwgYHRhcHJpb19jaGFuZ2VgICh0aGUgbmV0bGluayBlbnRyeSBwb2ludCBmb3IgY29uZmlndXJhdGlvbiBjYWxsaW5nIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgKSwgYHRhcHJpb19pbml0YCwgYW5kIGB0YXByaW9fZGVxdWV1ZWAuIFRoZXNlIGFyZSBvdXIgZm9jdXMgcG9pbnRzLlxuXG5JJ20gY2hlY2tpbmcgZm9yIGV4cG9ydGVkIG5vbi1zdGF0aWMgc3ltYm9scyBhbmQgbWFpbiBlbnRyeXBvaW50cy4gYHRhcHJpb19xZGlzY19vcHNgIGlzIHJlZ2lzdGVyZWQgaW4gYHRhcHJpb19tb2R1bGVfaW5pdGAsIGFuZCB3ZSBoYXZlIGB0YXByaW9faW5pdGAsIGB0YXByaW9fY2hhbmdlYCwgYGFkdmFuY2Vfc2NoZWRgLCBhbmQgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgYXZhaWxhYmxlLiBHcmVhdC5cblxuTm93LCB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMuIGBORVRfU0NIX1RBUFJJT2AgaXMgdW5kZXIgYG1lbnVjb25maWcgTkVUX1NDSEVEYCwgd2hpY2ggaXMgdW5kZXIgYG5ldC9LY29uZmlnYC4gYE5FVF9TQ0hfVEFQUklPYCBzZWxlY3RzIGBORVRfU0NIX01RUFJJT19MSUJgLiAgV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGltcGFjdCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTU5MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzowNjo1OC4wMjQ1MTcxMzZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwNDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQwOlxcdFxcbiAgNDE6XFx0XFx0ICBUaGUgYXZhaWxhYmxlIHNjaGVkdWxlcnMgYXJlIGxpc3RlZCBpbiB0aGUgZm9sbG93aW5nIHF1ZXN0aW9uczsgeW91XFxuICA0MjpcXHRcXHQgIGNhbiBzYXkgWSB0byBhcyBtYW55IGFzIHlvdSBsaWtlLiBJZiB1bnN1cmUsIHNheSBOIG5vdy5cXG4gIDQzOlxcdFxcbiAgNDQ6XFx0aWYgTkVUX1NDSEVEXFxuICA0NTpcXHRcXG4gIDQ2OlxcdGNvbW1lbnQgXFxcIlF1ZXVlaW5nL1NjaGVkdWxpbmdcXFwiXFxuICA0NzpcXHRcXG4gIDQ4OlxcdGNvbmZpZyBORVRfU0NIX0hUQlxcbiAgNDk6XFx0XFx0dHJpc3RhdGUgXFxcIkhpZXJhcmNoaWNhbCBUb2tlbiBCdWNrZXQgKEhUQilcXFwiXFxuICA1MDpcXHRcXHRoZWxwXFxuICA1MTpcXHRcXHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBIaWVyYXJjaGljYWwgVG9rZW4gQnVja2V0cyAoSFRCKVxcbiAgNTI6XFx0XFx0ICBwYWNrZXQgc2NoZWR1bGluZyBhbGdvcml0aG0uIFNlZVxcbiAgNTM6XFx0XFx0ICBcXHUwMDNjaHR0cDovL2x1eGlrLmNkaS5jei9+ZGV2aWsvcW9zL2h0Yi9cXHUwMDNlIGZvciBjb21wbGV0ZSBtYW51YWwgYW5kXFxuICA1NDpcXHRcXHQgIGluLWRlcHRoIGFydGljbGVzLlxcbiAgNTU6XFx0XFxuICA1NjpcXHRcXHQgIEhUQiBpcyB2ZXJ5IHNpbWlsYXIgdG8gQ0JRIHJlZ2FyZGluZyBpdHMgZ29hbHMgaG93ZXZlciBpcyBoYXNcXG4gIDU3OlxcdFxcdCAgZGlmZmVyZW50IHByb3BlcnRpZXMgYW5kIGRpZmZlcmVudCBhbGdvcml0aG0uXFxuICA1ODpcXHRcXG4gIDU5OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAgNjA6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2NoX2h0Yi5cXG4gIDYxOlxcdFxcbiAgNjI6XFx0Y29uZmlnIE5FVF9TQ0hfSEZTQ1xcbiAgNjM6XFx0XFx0dHJpc3RhdGUgXFxcIkhpZXJhcmNoaWNhbCBGYWlyIFNlcnZpY2UgQ3VydmUgKEhGU0MpXFxcIlxcbiAgNjQ6XFx0XFx0aGVscFxcbiAgNjU6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgSGllcmFyY2hpY2FsIEZhaXIgU2VydmljZSBDdXJ2ZVxcbiAgNjY6XFx0XFx0ICAoSEZTQykgcGFja2V0IHNjaGVkdWxpbmcgYWxnb3JpdGhtLlxcbiAgNjc6XFx0XFxuICA2ODpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gIDY5OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNjaF9oZnNjLlxcbiAgNzA6XFx0XFxuICA3MTpcXHRjb25maWcgTkVUX1NDSF9QUklPXFxuICA3MjpcXHRcXHR0cmlzdGF0ZSBcXFwiTXVsdGkgQmFuZCBQcmlvcml0eSBRdWV1ZWluZyAoUFJJTylcXFwiXFxuICA3MzpcXHRcXHRoZWxwXFxuICA3NDpcXHRcXHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIGFuIG4tYmFuZCBwcmlvcml0eSBxdWV1ZSBwYWNrZXRcXG4gIDc1OlxcdFxcdCAgc2NoZWR1bGVyLlxcbiAgNzY6XFx0XFxuICA3NzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gIDc4OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNjaF9wcmlvLlxcbiAgNzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjA2OjU4LjAyNDYyOTc2NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDQ3MTQxOTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqS2NvbmZpZyBEaXZlIGZvciBORVRfU0NIRUQqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gbmV0d29ya2luZyBzY2hlZHVsZXJzLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGBuZXQvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBzdGFuZGFyZCBwbGFjZSBpbiB0aGUgTGludXgga2VybmVsIHNvdXJjZSBmb3IgbmV0d29yay1yZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSXQncyB0aGUgY2VudHJhbCBodWIgZm9yIG1vc3Qgb2YgdGhlIG5ldHdvcmsgZmVhdHVyZSBrbm9icy4gSSdtIGdvaW5nIHRvIHNjYW4gdGhhdCBmaWxlIGxvb2tpbmcgZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gXCJORVRfU0NIRURcIi4gSXQgc2hvdWxkIGJlIGRlZmluZWQgdGhlcmUsIGFuZCBmcm9tIHRoZXJlIEkgY2FuIGZpbmQgaXRzIGRlcGVuZGVuY2llcywgYW5kIGl0J3MgZGVmYXVsdCBiZWhhdmlvci4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIHR1cm4gdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzQ5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzowNzowMC4wNzE3NzU3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjYzMDA5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb3VyY2UuKm5ldC9zY2hlZC9LY29uZmlnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz0yNjk9c291cmNlIFxcXCJuZXQvbWFjODAyMTU0L0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6MjcwOnNvdXJjZSBcXFwibmV0L3NjaGVkL0tjb25maWdcXFwiXFxubmV0L0tjb25maWctMjcxLXNvdXJjZSBcXFwibmV0L2RjYi9LY29uZmlnXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzowNzowMC4xNDQ0MTEzNjlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDg5MjEwNDcwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQnVpbGQgUHJvY2VzcyBmb3IgYHNjaF90YXByaW8uY2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgc2NoX3RhcHJpby5jYCB0cmFmZmljIGNvbnRyb2wgc2NoZWR1bGVyIG1vZHVsZSBpcyBiZWluZyBjb21waWxlZC4gVG8gZG8gdGhhdCwgdGhlIG1vc3QgZGlyZWN0IGFwcHJvYWNoIGlzIHRvIGV4YW1pbmUgdGhlIGBuZXQvc2NoZWQvTWFrZWZpbGVgLiBUaGlzIGlzIHdoZXJlIHRoZSBidWlsZCBzeXN0ZW0gY29uZmlndXJhdGlvbiBmb3IgdGhlc2UgbmV0d29yayBzY2hlZHVsaW5nIGNvbXBvbmVudHMgcmVzaWRlcywgYW5kIGl0IHNob3VsZCByZXZlYWwgdGhlIHJlbGV2YW50IGNvbXBpbGF0aW9uIGZsYWdzLCBkZXBlbmRlbmNpZXMsIGFuZCB1bHRpbWF0ZWx5LCBob3cgYHNjaF90YXByaW8uY2AgZ2V0cyB0cmFuc2Zvcm1lZCBpbnRvIG9iamVjdCBjb2RlIGFuZCBsaW5rZWQgaW50byB0aGUga2VybmVsIG1vZHVsZS4gVGhpcyBpcyB0aGUgcGxhY2UgdG8gc3RhcnQgZHJpbGxpbmcgZG93biBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBidWlsZCBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzYxMywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjA3OjA1LjAzNjUxODM0M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcxNjU5MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2NoX3RhcHJpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWc9MTcyPWNvbmZpZyBORVRfU0NIX1RBUFJJT1xcbi0tXFxubmV0L3NjaGVkL0tjb25maWctMTc4LVxcbm5ldC9zY2hlZC9LY29uZmlnOjE3OTpcXHQgIFNlZSB0aGUgdG9wIG9mIFxcdTAwM2NmaWxlOm5ldC9zY2hlZC9zY2hfdGFwcmlvLmNcXHUwMDNlIGZvciBtb3JlIGRldGFpbHMuXFxubmV0L3NjaGVkL0tjb25maWctMTgwLVxcbm5ldC9zY2hlZC9LY29uZmlnLTE4MS1cXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG5uZXQvc2NoZWQvS2NvbmZpZzoxODI6XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2NoX3RhcHJpby5cXG5uZXQvc2NoZWQvS2NvbmZpZy0xODMtXFxuLS1cXG5uZXQvc2NoZWQvTWFrZWZpbGU9NjM9b2JqLSQoQ09ORklHX05FVF9TQ0hfRVRGKVxcdCs9IHNjaF9ldGYub1xcbm5ldC9zY2hlZC9NYWtlZmlsZTo2NDpvYmotJChDT05GSUdfTkVUX1NDSF9UQVBSSU8pXFx0Kz0gc2NoX3RhcHJpby5vXFxubmV0L3NjaGVkL01ha2VmaWxlLTY1LW9iai0kKENPTkZJR19ORVRfU0NIX0JQRilcXHQrPSBicGZfcWRpc2Mub1xcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MzovKiBuZXQvc2NoZWQvc2NoX3RhcHJpby5jXFx0IFRpbWUgQXdhcmUgUHJpb3JpdHkgU2NoZWR1bGVyXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy00LSAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjA3OjA1LjA4MzY4ODE2MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTc4MzIxNzg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEkndmUgZ290IHNvbWUgbmV3IGNvbmZpZ3VyYXRpb25zIHRvIGNvbnNpZGVyOiBgTkVUX1NDSEVEYCBhbmQgYE5FVF9TQ0hfVEFQUklPYC4gTXkgcHJpbWFyeSBmb2N1cywgYmFzZWQgb24gdGhlc2UgY29uZmlndXJhdGlvbnMsIHdpbGwgYmUgb24gdGhlc2Ugc3ltYm9sczogYGFkdmFuY2Vfc2NoZWRgLCBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCwgYHRhcHJpb19jaGFuZ2VgLCBhbmQgYHRhcHJpb19pbml0YC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgYW5kL29yIHZhcmlhYmxlcyB0aGF0IGFyZSBsaWtlbHkgdG8gc2VlIHNvbWUgY2hhbmdlcyB3aXRoIHRoZXNlIGNvbmZpZ3MgZW5hYmxlZC5cblxuSSd2ZSBhbHJlYWR5IGRldGVybWluZWQgdGhhdCB0aGlzIGFyZWEgaXMgYFdvcnRoRnV6emluZ2AuIFRoZSByZWFzb25pbmcgc3VwcG9ydGluZyB0aGF0IGlzIGNvbmNpc2UsIGFuZCBJIG5lZWQgdG8gcmVjYWxsIHRoYXQgcmVhc29uaW5nIHNvIEkgZG9uJ3QgcmVwZWF0IG15c2VsZi5cblxuTGV0J3MgcXVpY2tseSBjb25maXJtOiBJIHdhbnQgdG8gYmUgdXNpbmcgYWxsIHRoZSBgRW5hYmxlQ29uZmlnc2A6IGBORVRfU0NIRURgLCBhbmQgYE5FVF9TQ0hfVEFQUklPYC4gSSdtIGdvaW5nIHRvIGxldmVyYWdlIGBGb2N1c1N5bWJvbHNgOiBgYWR2YW5jZV9zY2hlZGAsIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgLCBgdGFwcmlvX2NoYW5nZWAsIGFuZCBgdGFwcmlvX2luaXRgLiBBbmQgdGhlbiwgSSBuZWVkIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4gRG9uZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MTQxMTksIk91dHB1dFRva2VucyI6MTU2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjA3OjA4LjI2MjAxMjgwN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NDI0MjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIk5FVF9TQ0hfVEFQUklPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWR2YW5jZV9zY2hlZFwiLFxuICAgIFwicGFyc2VfdGFwcmlvX3NjaGVkdWxlXCIsXG4gICAgXCJ0YXByaW9fY2hhbmdlXCIsXG4gICAgXCJ0YXByaW9faW5pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzY2hlZHVsZSBwYXJzaW5nIGFuZCBocnRpbWVyIGFkdmFuY2UgYWxnb3JpdGhtIGluIHRoZSBUQVBSSU8gKFRpbWUtQXdhcmUgUHJpb3JpdHkpIHBhY2tldCBzY2hlZHVsZXIgKHNjaF90YXByaW8pLiBTcGVjaWZpY2FsbHksIGl0IGZpeGVzIGN5Y2xlIGNhdGNoLXVwIGxvZ2ljIHdoZW4gdGhlIHRpbWVyIGlzIGRlbGF5ZWQgb3IgdGhlIGNsb2NrIGlzIHN0ZXBwZWQgYnkgY2FsY3VsYXRpbmcgcGVyaW9kcyBhbmQgbGVhcGluZyBmb3J3YXJkLCBhbmQgYm91bmRzIHRoZSBzY2hlZHVsZSBjYXRjaC11cCBsb29wLiBUaGlzIG1vZGlmaWVzIGNvcmUgdHJhZmZpYyBjb250cm9sIHNjaGVkdWxpbmcgbG9naWMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIGNvbmZpZ3VyYXRpb24gYW5kIG5ldHdvcmsgcGFja2V0IHRyYW5zbWlzc2lvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIk5FVF9TQ0hfVEFQUklPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWR2YW5jZV9zY2hlZFwiLFxuICAgIFwicGFyc2VfdGFwcmlvX3NjaGVkdWxlXCIsXG4gICAgXCJ0YXByaW9fY2hhbmdlXCIsXG4gICAgXCJ0YXByaW9faW5pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzY2hlZHVsZSBwYXJzaW5nIGFuZCBocnRpbWVyIGFkdmFuY2UgYWxnb3JpdGhtIGluIHRoZSBUQVBSSU8gKFRpbWUtQXdhcmUgUHJpb3JpdHkpIHBhY2tldCBzY2hlZHVsZXIgKHNjaF90YXByaW8pLiBTcGVjaWZpY2FsbHksIGl0IGZpeGVzIGN5Y2xlIGNhdGNoLXVwIGxvZ2ljIHdoZW4gdGhlIHRpbWVyIGlzIGRlbGF5ZWQgb3IgdGhlIGNsb2NrIGlzIHN0ZXBwZWQgYnkgY2FsY3VsYXRpbmcgcGVyaW9kcyBhbmQgbGVhcGluZyBmb3J3YXJkLCBhbmQgYm91bmRzIHRoZSBzY2hlZHVsZSBjYXRjaC11cCBsb29wLiBUaGlzIG1vZGlmaWVzIGNvcmUgdHJhZmZpYyBjb250cm9sIHNjaGVkdWxpbmcgbG9naWMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIGNvbmZpZ3VyYXRpb24gYW5kIG5ldHdvcmsgcGFja2V0IHRyYW5zbWlzc2lvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6MDc6MDguMzM4NDQzODA2WiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTU2NTg1MDU3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjA3OjA4LjMzODkxMDI5NloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE5NTY1Mzc5ODk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIHRoZSBzY2hlZHVsZSBhZHZhbmNlbWVudCBhbmQgY3ljbGUgcmVjYWxjdWxhdGlvbiBsb2dpYyBpbiB0aGUgdGFwcmlvIHFkaXNjIChzY2hfdGFwcmlvLmMpIHRvIGhhbmRsZSBkZWxheWVkIHRpbWVycyBhbmQgY2xvY2sgc3RlcHBpbmcgYnkgYm91bmRpbmcgY2F0Y2gtdXAgaXRlcmF0aW9ucyBhbmQgaW50cm9kdWNpbmcgYW4gaW50ZXJuYWwgYHBlcmlvZGAgZmllbGQgaW4gYHN0cnVjdCBzY2hlZF9nYXRlX2xpc3RgLlxcblxcbi0gVW5pbml0aWFsaXplZCBNZW1vcnkgLyBJbmZvLWxlYWsgQW5hbHlzaXM6XFxuICAxLiBUaGUgbmV3IGBwZXJpb2RgIGZpZWxkIGluIGBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0YCBpcyBjb21wdXRlZCBkdXJpbmcgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgYW5kIHN0b3JlZCBpbiBtZW1vcnkgYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmpgLiBJdCBpcyBub3QgZXhwb3J0ZWQgb3IgZHVtcGVkIHRvIHVzZXJzcGFjZSBpbiBgZHVtcF9zY2hlZHVsZWAuXFxuICAyLiBBbGwgbG9jYWwgdmFyaWFibGVzIGludHJvZHVjZWQgaW4gYGFkdmFuY2Vfc2NoZWRgIChgbm93YCwgYGVuZF90aW1lYCwgYG5leHRfc3RhcnRgLCBgYnVkZ2V0YCwgYGJlaGluZGApIGFuZCBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCAoYGN5Y2xlYCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHJlYWRpbmcgb3IgYnJhbmNoaW5nIG9uIHRoZW0uXFxuICAzLiBObyBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucywgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHJlYWRzIGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZSBvciBrZXJuZWwgY29udHJvbCBmbG93Llxcblxcbi0gS0FTQU4gdnMgS01TQU4gQXBwbGljYWJpbGl0eTpcXG4gIEFueSBjb25jdXJyZW5jeSwgbGlzdCB0cmF2ZXJzYWwsIG9yIGJvdW5kcyBpc3N1ZXMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIGxvY2tkZXAuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3IgaW5mby1sZWFrIHJpc2tzIHJlcXVpcmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHJ1bi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkMDQ0YjhiZDA0Mjc4ZTBjNjgyNDE1MDZkMzU5NTA3MTA1MzNkYmI2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMSAyMzowNjozNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfdGFwcmlvLmMgYi9uZXQvc2NoZWQvc2NoX3RhcHJpby5jXG5pbmRleCAzOWFjNWI5N2FhM2FmLi45MDFkZmQyNDg0ZTEwIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF90YXByaW8uY1xuKysrIGIvbmV0L3NjaGVkL3NjaF90YXByaW8uY1xuQEAgLTgzLDYgKzgzLDEwIEBAIHN0cnVjdCBzY2hlZF9nYXRlX2xpc3Qge1xuIFx0czY0IGN5Y2xlX3RpbWU7XG4gXHRzNjQgY3ljbGVfdGltZV9leHRlbnNpb247XG4gXHRzNjQgYmFzZV90aW1lO1xuK1x0LyogbWluKGN5Y2xlX3RpbWUsIHN1bSBvZiBpbnRlcnZhbHMpOiB0aGUgc29mdHdhcmUgc2NoZWR1bGUgcmVzdGFydHNcbitcdCAqIHRoZSBsaXN0IGFmdGVyIHRoZSBsYXN0IGVudHJ5IGV2ZW4gd2hlbiBjeWNsZV90aW1lIGlzIG5vdCB1cCB5ZXQuXG4rXHQgKi9cbitcdHM2NCBwZXJpb2Q7XG4gfTtcbiBcbiBzdHJ1Y3QgdGFwcmlvX3NjaGVkIHtcbkBAIC04NzEsMTIgKzg3NSwxMyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnRhcHJpb19kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxuIH1cbiBcbiBzdGF0aWMgYm9vbCBzaG91bGRfcmVzdGFydF9jeWNsZShjb25zdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpvcGVyLFxuLVx0XHRcdFx0IGNvbnN0IHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnkpXG4rXHRcdFx0XHQgY29uc3Qgc3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeSxcbitcdFx0XHRcdCBrdGltZV90IGVuZF90aW1lKVxuIHtcbiBcdGlmIChsaXN0X2lzX2xhc3QoXHUwMDI2ZW50cnktXHUwMDNlbGlzdCwgXHUwMDI2b3Blci1cdTAwM2VlbnRyaWVzKSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4tXHRpZiAoa3RpbWVfY29tcGFyZShlbnRyeS1cdTAwM2VlbmRfdGltZSwgb3Blci1cdTAwM2VjeWNsZV9lbmRfdGltZSkgPT0gMClcbitcdGlmIChrdGltZV9jb21wYXJlKGVuZF90aW1lLCBvcGVyLVx1MDAzZWN5Y2xlX2VuZF90aW1lKSA9PSAwKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdHJldHVybiBmYWxzZTtcbkBAIC05MjUsOCArOTMwLDkgQEAgc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGFkdmFuY2Vfc2NoZWQoc3RydWN0IGhydGltZXIgKnRpbWVyKVxuIFx0aW50IG51bV90YyA9IG5ldGRldl9nZXRfbnVtX3RjKGRldik7XG4gXHRzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5LCAqbmV4dDtcbiBcdHN0cnVjdCBRZGlzYyAqc2NoID0gcS1cdTAwM2Vyb290O1xuLVx0a3RpbWVfdCBlbmRfdGltZTtcbi1cdGludCB0YztcbitcdGt0aW1lX3QgZW5kX3RpbWUsIG5leHRfc3RhcnQsIG5vdztcbitcdGludCBidWRnZXQsIHRjO1xuK1x0czY0IGJlaGluZDtcbiBcbiBcdHNwaW5fbG9jayhcdTAwMjZxLVx1MDAzZWN1cnJlbnRfZW50cnlfbG9jayk7XG4gXHRlbnRyeSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocS1cdTAwM2VjdXJyZW50X2VudHJ5LFxuQEAgLTk1MiwyMyArOTU4LDQ5IEBAIHN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBhZHZhbmNlX3NjaGVkKHN0cnVjdCBocnRpbWVyICp0aW1lcilcbiBcdFx0Z290byBmaXJzdF9ydW47XG4gXHR9XG4gXG4tXHRpZiAoc2hvdWxkX3Jlc3RhcnRfY3ljbGUob3BlciwgZW50cnkpKSB7XG4tXHRcdG5leHQgPSBsaXN0X2ZpcnN0X2VudHJ5KFx1MDAyNm9wZXItXHUwMDNlZW50cmllcywgc3RydWN0IHNjaGVkX2VudHJ5LFxuLVx0XHRcdFx0XHRsaXN0KTtcbi1cdFx0b3Blci1cdTAwM2VjeWNsZV9lbmRfdGltZSA9IGt0aW1lX2FkZF9ucyhvcGVyLVx1MDAzZWN5Y2xlX2VuZF90aW1lLFxuLVx0XHRcdFx0XHRcdCAgICBvcGVyLVx1MDAzZWN5Y2xlX3RpbWUpO1xuLVx0fSBlbHNlIHtcbi1cdFx0bmV4dCA9IGxpc3RfbmV4dF9lbnRyeShlbnRyeSwgbGlzdCk7XG4rXHRub3cgPSBocnRpbWVyX2NiX2dldF90aW1lKHRpbWVyKTtcbitcdGVuZF90aW1lID0gZW50cnktXHUwMDNlZW5kX3RpbWU7XG4rXHRiZWhpbmQgPSBrdGltZV9zdWIobm93LCBlbmRfdGltZSk7XG4rXG4rXHQvKiBCZWhpbmQsIGUuZy4gZGVsYXllZCB0aW1lciBvciBzdGVwcGVkIGNsb2NrOiBza2lwIHdob2xlIHBlcmlvZHNcbitcdCAqIGFyaXRobWV0aWNhbGx5IGFuZCB3YWxrIGF0IG1vc3Qgb25lIG1vcmUgdG8gdGhlIGVudHJ5IGNvdmVyaW5nXG4rXHQgKiBub3csIGluc3RlYWQgb2YgcmVwbGF5aW5nIHRoZSBiYWNrbG9nIG9uZSBleHBpcnkgYXQgYSB0aW1lLiBUaGVcbitcdCAqIGNhcCBib3VuZHMgdGhlIHdhbGs7IGEgbGVmdG92ZXIgaXMgcGlja2VkIHVwIGJ5IHRoZSBuZXh0IGV4cGlyeS5cbitcdCAqL1xuK1x0aWYgKHVubGlrZWx5KGJlaGluZCBcdTAwM2U9IG9wZXItXHUwMDNlcGVyaW9kKSkge1xuK1x0XHRzNjQganVtcCA9IGRpdjY0X3M2NChiZWhpbmQsIG9wZXItXHUwMDNlcGVyaW9kKSAqIG9wZXItXHUwMDNlcGVyaW9kO1xuK1xuK1x0XHRlbmRfdGltZSA9IGt0aW1lX2FkZF9ucyhlbmRfdGltZSwganVtcCk7XG4rXHRcdG9wZXItXHUwMDNlY3ljbGVfZW5kX3RpbWUgPSBrdGltZV9hZGRfbnMob3Blci1cdTAwM2VjeWNsZV9lbmRfdGltZSwganVtcCk7XG4gXHR9XG4gXG4tXHRlbmRfdGltZSA9IGt0aW1lX2FkZF9ucyhlbnRyeS1cdTAwM2VlbmRfdGltZSwgbmV4dC1cdTAwM2VpbnRlcnZhbCk7XG4tXHRlbmRfdGltZSA9IG1pbl90KGt0aW1lX3QsIGVuZF90aW1lLCBvcGVyLVx1MDAzZWN5Y2xlX2VuZF90aW1lKTtcbitcdGJ1ZGdldCA9IDIgKiBvcGVyLVx1MDAzZW51bV9lbnRyaWVzO1xuK1x0ZG8ge1xuK1x0XHRpZiAoc2hvdWxkX3Jlc3RhcnRfY3ljbGUob3BlciwgZW50cnksIGVuZF90aW1lKSkge1xuK1x0XHRcdG5leHQgPSBsaXN0X2ZpcnN0X2VudHJ5KFx1MDAyNm9wZXItXHUwMDNlZW50cmllcyxcbitcdFx0XHRcdFx0XHRzdHJ1Y3Qgc2NoZWRfZW50cnksIGxpc3QpO1xuK1x0XHRcdG9wZXItXHUwMDNlY3ljbGVfZW5kX3RpbWUgPSBrdGltZV9hZGRfbnMob3Blci1cdTAwM2VjeWNsZV9lbmRfdGltZSxcbitcdFx0XHRcdFx0XHRcdCAgICBvcGVyLVx1MDAzZXBlcmlvZCk7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0bmV4dCA9IGxpc3RfbmV4dF9lbnRyeShlbnRyeSwgbGlzdCk7XG4rXHRcdH1cbitcbitcdFx0bmV4dF9zdGFydCA9IGVuZF90aW1lO1xuK1x0XHRlbmRfdGltZSA9IGt0aW1lX2FkZF9ucyhuZXh0X3N0YXJ0LCBuZXh0LVx1MDAzZWludGVydmFsKTtcbitcdFx0ZW5kX3RpbWUgPSBtaW5fdChrdGltZV90LCBlbmRfdGltZSwgb3Blci1cdTAwM2VjeWNsZV9lbmRfdGltZSk7XG4rXHRcdGVudHJ5ID0gbmV4dDtcbitcdH0gd2hpbGUgKHVubGlrZWx5KGt0aW1lX2NvbXBhcmUoZW5kX3RpbWUsIG5vdykgXHUwMDNjPSAwKSBcdTAwMjZcdTAwMjYgYnVkZ2V0LS0pO1xuIFxuK1x0LyogbmV4dCBjYW4gYmUgdGhlIGVudHJ5IGFscmVhZHkgcHVibGlzaGVkIGFzIHEtXHUwMDNlY3VycmVudF9lbnRyeSAoYVxuK1x0ICogc2luZ2xlLWVudHJ5IHNjaGVkdWxlLCBvciBhIGNhdGNoLXVwIG9mIHdob2xlIHBlcmlvZHMpLCBzbyB0aGVcbitcdCAqIGNsb3NlIHRpbWVzIGFuZCBidWRnZXRzIGJlbG93IGFyZSByZXdyaXR0ZW4gaW4gcGxhY2Ugd2hpbGVcbitcdCAqIHRhcHJpb19kZXF1ZXVlX2Zyb21fdHhxKCkgbWF5IGJlIHJlYWRpbmcgdGhlbS5cbitcdCAqL1xuIFx0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBudW1fdGM7IHRjKyspIHtcbiBcdFx0aWYgKG5leHQtXHUwMDNlZ2F0ZV9kdXJhdGlvblt0Y10gPT0gb3Blci1cdTAwM2VjeWNsZV90aW1lKVxuIFx0XHRcdG5leHQtXHUwMDNlZ2F0ZV9jbG9zZV90aW1lW3RjXSA9IEtUSU1FX01BWDtcbiBcdFx0ZWxzZVxuLVx0XHRcdG5leHQtXHUwMDNlZ2F0ZV9jbG9zZV90aW1lW3RjXSA9IGt0aW1lX2FkZF9ucyhlbnRyeS1cdTAwM2VlbmRfdGltZSxcbitcdFx0XHRuZXh0LVx1MDAzZWdhdGVfY2xvc2VfdGltZVt0Y10gPSBrdGltZV9hZGRfbnMobmV4dF9zdGFydCxcbiBcdFx0XHRcdFx0XHRcdFx0IG5leHQtXHUwMDNlZ2F0ZV9kdXJhdGlvblt0Y10pO1xuIFx0fVxuIFxuQEAgLTExMzAsNiArMTE2Miw4IEBAIHN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YixcbiBcdFx0XHRcdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpuZXcsXG4gXHRcdFx0XHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbitcdHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnk7XG4rXHRrdGltZV90IGN5Y2xlID0gMDtcbiBcdGludCBlcnIgPSAwO1xuIFxuIFx0aWYgKHRiW1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9TSU5HTEVfRU5UUlldKSB7XG5AQCAtMTE1MiwxMyArMTE4NiwxMCBAQCBzdGF0aWMgaW50IHBhcnNlX3RhcHJpb19zY2hlZHVsZShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXG4gXHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0aWYgKCFuZXctXHUwMDNlY3ljbGVfdGltZSkge1xuLVx0XHRzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5O1xuLVx0XHRrdGltZV90IGN5Y2xlID0gMDtcbi1cbi1cdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgXHUwMDI2bmV3LVx1MDAzZWVudHJpZXMsIGxpc3QpXG4tXHRcdFx0Y3ljbGUgPSBrdGltZV9hZGRfbnMoY3ljbGUsIGVudHJ5LVx1MDAzZWludGVydmFsKTtcbitcdGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIFx1MDAyNm5ldy1cdTAwM2VlbnRyaWVzLCBsaXN0KVxuK1x0XHRjeWNsZSA9IGt0aW1lX2FkZF9ucyhjeWNsZSwgZW50cnktXHUwMDNlaW50ZXJ2YWwpO1xuIFxuK1x0aWYgKCFuZXctXHUwMDNlY3ljbGVfdGltZSkge1xuIFx0XHRpZiAoY3ljbGUgXHUwMDNjIDAgfHwgY3ljbGUgXHUwMDNlIElOVF9NQVgpIHtcbiBcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwiJ2N5Y2xlX3RpbWUnIGlzIHRvbyBiaWdcIik7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMTE3Miw2ICsxMjAzLDcgQEAgc3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbitcdG5ldy1cdTAwM2VwZXJpb2QgPSBtaW4obmV3LVx1MDAzZWN5Y2xlX3RpbWUsIGN5Y2xlKTtcbiBcdHRhcHJpb19jYWxjdWxhdGVfZ2F0ZV9kdXJhdGlvbnMocSwgbmV3KTtcbiBcbiBcdHJldHVybiAwO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6MDc6MDguMzM4OTExMjA2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4OTU1OTQxNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUQVBSSU8gU2NoZWR1bGVyIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbmV0L3NjaGVkL3NjaF90YXByaW8uY2AsIHdoaWNoIG1lYW5zIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgVHJhZmZpYyBDb250cm9sJ3MgVEFQUklPIHNjaGVkdWxlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgY2hhbmdlcyBkaXJlY3RseS4gRmlyc3QgdGhpbmcgSSBzZWUgaXMgdGhlIGFkZGl0aW9uIG9mIGBzNjQgcGVyaW9kO2AgdG8gdGhlIGBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0YC4gSW50ZXJlc3RpbmcsIEkgd29uZGVyIHdoYXQgdGhhdCByZXByZXNlbnRzIGluIHRoZSBjb250ZXh0IG9mIFRBUFJJTyBnYXRlIHNjaGVkdWxpbmc/XG5cbk5leHQsIHRoZXkndmUgbW9kaWZpZWQgYHNob3VsZF9yZXN0YXJ0X2N5Y2xlYCB0byB0YWtlIGEgYGt0aW1lX3QgZW5kX3RpbWVgLiBUaGlzIGxpa2VseSByZWxhdGVzIHRvIGhvdyB0aGV5J3JlIGhhbmRsaW5nIGN5Y2xlIHJlc3RhcnRzIGFuZCBtYXliZSBzb21lIHRpbWluZyBhZGp1c3RtZW50cyB3aXRoaW4gdGhlIHNjaGVkdWxlci4gVGhlIHRoaXJkIGtleSBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW4gYGFkdmFuY2Vfc2NoZWRgLCB3aGVyZSB0aGV5J3JlIG9wdGltaXppbmcgYW5kIGZpeGluZyBzY2hlZHVsZSBhZHZhbmNlbWVudC4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggYWRkcmVzc2VzIHNjZW5hcmlvcyB3aGVyZSB0aGUgdGltZXIgbWlnaHQgZmFsbCBiZWhpbmQgZHVlIHRvIGRlbGF5cyBvciBjbG9jayBzdGVwcGluZy4gTG9va3MgbGlrZSB0aGV5J3JlIHNraXBwaW5nIHBlcmlvZHMgdG8gY2F0Y2ggdXAgdXNpbmcgYGRpdjY0X3M2NGAgYW5kIGEgYm91bmRlZCBgYnVkZ2V0YCBsb29wLiBUaGlzIGlzIGEgY29tbW9uIHN0cmF0ZWd5LCBidXQgSSdsbCB3YW50IHRvIGNoZWNrIHRoZSBkZXRhaWxzLiBUaGUgZmluYWwgY2hhbmdlLCBpbiBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCwgY2FsY3VsYXRlcyBgY3ljbGVgICh0aGUgc3VtIG9mIGludGVydmFscykgcmVnYXJkbGVzcyBvZiBgbmV3LVx1MDAzZWN5Y2xlX3RpbWVgIGFuZCBzZXRzIGBuZXctXHUwMDNlcGVyaW9kYCB0byB0aGUgbWluaW11bSBiZXR3ZWVuIGBuZXctXHUwMDNlY3ljbGVfdGltZWAgYW5kIGBjeWNsZWAuIFRoYXQgc2VlbXMgYSBsaXR0bGUgdW51c3VhbCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljLlxuXG5Ob3csIGJlZm9yZSBJIGdvIGRlZXBlciBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBJIG5lZWQgdG8gbG9vayBmb3IgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBwb3RlbnRpYWwgY29waWVzIHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBsZWFkIHRvIGluZm9ybWF0aW9uIGxlYWtzLCBvciBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcy4gSSdsbCBuZWVkIHRvIGdvIHRocm91Z2ggYHNjaF90YXByaW8uY2AgYXJvdW5kIHRoZXNlIHNwZWNpZmljIGxpbmVzIGFuZCBzZWUgZXhhY3RseSBob3cgYHNjaGVkX2dhdGVfbGlzdGAgaXMgYWxsb2NhdGVkIGFuZCB0aGVuIGhvdyBpdCBtaWdodCBiZSBwYXNzZWQgdG8gdXNlcnNwYWNlIChpZiBhdCBhbGwpLiBUaGlzIGlzIHdoZXJlIHRoZSBkZXZpbCBvZnRlbiBoaWRlcywgc28gSSBuZWVkIHRvIGNoZWNrIHRoZSBpbml0aWFsaXphdGlvbiByb3V0aW5lcyBjYXJlZnVsbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MzAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzowNzoxMy4yMzQ1MDhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMzMwMTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNjaGVkX2dhdGVfbGlzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvc2NoX3RhcHJpby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9NTI9c3RydWN0IHNjaGVkX2VudHJ5IHtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNzEtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzo3MjpzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0IHtcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTczLVxcdC8qIExvbmdlc3Qgbm9uLXplcm8gY29udGlndW91cyBnYXRlIGR1cmF0aW9ucyBwZXIgdHJhZmZpYyBjbGFzcyxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9OTI9c3RydWN0IHRhcHJpb19zY2hlZCB7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEwNy1cXHRzdHJ1Y3Qgc2NoZWRfZW50cnkgX19yY3UgKmN1cnJlbnRfZW50cnk7XFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMDg6XFx0c3RydWN0IHNjaGVkX2dhdGVfbGlzdCBfX3JjdSAqb3Blcl9zY2hlZDtcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjEwOTpcXHRzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0IF9fcmN1ICphZG1pbl9zY2hlZDtcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTExMC1cXHRzdHJ1Y3QgaHJ0aW1lciBhZHZhbmNlX3RpbWVyO1xcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xMjM9c3RhdGljIHZvaWQgdGFwcmlvX2NhbGN1bGF0ZV9nYXRlX2R1cmF0aW9ucyhzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTI0OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZClcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEyNS17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTE2OD1zdGF0aWMgYm9vbCB0YXByaW9fZW50cnlfYWxsb3dzX3R4KGt0aW1lX3Qgc2tiX2VuZF90aW1lLFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNzMtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxNzQ6c3RhdGljIGt0aW1lX3Qgc2NoZWRfYmFzZV90aW1lKGNvbnN0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkKVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTc1LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MjAwPXN0YXRpYyB2b2lkIHRhcHJpb19mcmVlX3NjaGVkX2NiKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIwMS17XFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyMDI6XFx0c3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqc2NoZWQgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCwgcmN1KTtcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIwMy1cXHRzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5LCAqbjtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MjEzPXN0YXRpYyB2b2lkIHN3aXRjaF9zY2hlZHVsZXMoc3RydWN0IHRhcHJpb19zY2hlZCAqcSxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIxNDpcXHRcXHRcXHQgICAgIHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKiphZG1pbixcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIxNTpcXHRcXHRcXHQgICAgIHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKipvcGVyKVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjE2LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjI3LS8qIEdldCBob3cgbXVjaCB0aW1lIGhhcyBiZWVuIGFscmVhZHkgZWxhcHNlZCBpbiB0aGUgY3VycmVudCBjeWNsZS4gKi9cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIyODpzdGF0aWMgczMyIGdldF9jeWNsZV90aW1lX2VsYXBzZWQoc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqc2NoZWQsIGt0aW1lX3QgdGltZSlcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIyOS17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIzOC1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIzOTpzdGF0aWMga3RpbWVfdCBnZXRfaW50ZXJ2YWxfZW5kX3RpbWUoc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqc2NoZWQsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNDA6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICphZG1pbixcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI0MS1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnksXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTI3NT1zdGF0aWMgdm9pZCB0YXByaW9fdXBkYXRlX3F1ZXVlX21heF9zZHUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjI3NjpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZCxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI3Ny1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgcWRpc2Nfc2l6ZV90YWJsZSAqc3RhYilcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MzI3PXN0YXRpYyBzdHJ1Y3Qgc2NoZWRfZW50cnkgKmZpbmRfZW50cnlfdG9fdHJhbnNtaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTMyOC1cXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBRZGlzYyAqc2NoLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MzI5OlxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqc2NoZWQsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzozMzA6XFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICphZG1pbixcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTMzMS1cXHRcXHRcXHRcXHRcXHRcXHQgIGt0aW1lX3QgdGltZSxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9NDA0PXN0YXRpYyBib29sIGlzX3ZhbGlkX2ludGVydmFsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoKVxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy00MDYtXFx0c3RydWN0IHRhcHJpb19zY2hlZCAqcSA9IHFkaXNjX3ByaXYoc2NoKTtcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjQwNzpcXHRzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZCwgKmFkbWluO1xcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNDA4LVxcdGt0aW1lX3QgaW50ZXJ2YWxfc3RhcnQsIGludGVydmFsX2VuZDtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9NDcyPXN0YXRpYyBsb25nIGdldF9wYWNrZXRfdHh0aW1lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoKVxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy00NzUtXFx0c3RydWN0IHRhcHJpb19zY2hlZCAqcSA9IHFkaXNjX3ByaXYoc2NoKTtcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjQ3NjpcXHRzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZCwgKmFkbWluO1xcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNDc3LVxcdGt0aW1lX3QgbWluaW11bV90aW1lLCBub3csIHR4dGltZTtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9NTQ0PXN0YXRpYyBib29sIHRhcHJpb19za2JfZXhjZWVkc19xdWV1ZV9tYXhfc2R1KHN0cnVjdCBRZGlzYyAqc2NoLFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy01NDgtXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHFkaXNjX2RldihzY2gpO1xcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6NTQ5OlxcdHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkO1xcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNTUwLVxcdGludCBwcmlvID0gc2tiLVxcdTAwM2Vwcmlvcml0eTtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9NjY2PXN0YXRpYyB2b2lkIHRhcHJpb19zZXRfYnVkZ2V0cyhzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6NjY3OlxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZCxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTY2OC1cXHRcXHRcXHQgICAgICAgc3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeSlcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9ODM3PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdGFwcmlvX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTg3Ni1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjg3NzpzdGF0aWMgYm9vbCBzaG91bGRfcmVzdGFydF9jeWNsZShjb25zdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpvcGVyLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtODc4LVxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5LFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy04ODktXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzo4OTA6c3RhdGljIGJvb2wgc2hvdWxkX2NoYW5nZV9zY2hlZHVsZXMoY29uc3Qgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqYWRtaW4sXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzo4OTE6XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKm9wZXIsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy04OTItXFx0XFx0XFx0XFx0ICAgIGt0aW1lX3QgZW5kX3RpbWUpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTkyND1zdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgYWR2YW5jZV9zY2hlZChzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTkyOC1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcWRpc2NfZGV2KHEtXFx1MDAzZXJvb3QpO1xcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6OTI5OlxcdHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKm9wZXIsICphZG1pbjtcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTkzMC1cXHRpbnQgbnVtX3RjID0gbmV0ZGV2X2dldF9udW1fdGMoZGV2KTtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MTEyMT1zdGF0aWMgaW50IHBhcnNlX3NjaGVkX2xpc3Qoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqbGlzdCxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjExMjI6XFx0XFx0XFx0ICAgIHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTEyMy1cXHRcXHRcXHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xMTYxPXN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YixcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjExNjI6XFx0XFx0XFx0XFx0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKm5ldyxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTExNjMtXFx0XFx0XFx0XFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MTI0MD1zdGF0aWMgaW50IHRhcHJpb19nZXRfc3RhcnRfdGltZShzdHJ1Y3QgUWRpc2MgKnNjaCxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjEyNDE6XFx0XFx0XFx0XFx0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTI0Mi1cXHRcXHRcXHRcXHQga3RpbWVfdCAqc3RhcnQpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTEyNzQ9c3RhdGljIHZvaWQgc2V0dXBfZmlyc3RfZW5kX3RpbWUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjEyNzU6XFx0XFx0XFx0XFx0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkLCBrdGltZV90IGJhc2UpXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMjc2LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MTMwND1zdGF0aWMgdm9pZCB0YXByaW9fc3RhcnRfc2NoZWQoc3RydWN0IFFkaXNjICpzY2gsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMzA1OlxcdFxcdFxcdCAgICAgICBrdGltZV90IHN0YXJ0LCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpuZXcpXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMzA2LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MTM2MD1zdGF0aWMgaW50IHRhcHJpb19kZXZfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBldmVudCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTM2My1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7XFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMzY0OlxcdHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKm9wZXIsICphZG1pbjtcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEzNjUtXFx0c3RydWN0IHFkaXNjX3NpemVfdGFibGUgKnN0YWI7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTEzOTc9c3RhdGljIHZvaWQgc2V0dXBfdHh0aW1lKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMzk4OlxcdFxcdFxcdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZCwga3RpbWVfdCBiYXNlKVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTM5OS17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTE0NjI9c3RhdGljIHZvaWQgdGFwcmlvX29mZmxvYWRfY29uZmlnX2NoYW5nZWQoc3RydWN0IHRhcHJpb19zY2hlZCAqcSlcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE0NjMte1xcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTQ2NDpcXHRzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpvcGVyLCAqYWRtaW47XFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNDY1LVxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xNDkxPXN0YXRpYyB2b2lkIHRhcHJpb19zY2hlZF90b19vZmZsb2FkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxNDkyOlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZCxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE0OTMtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB0Y190YXByaW9fcW9wdF9vZmZsb2FkICpvZmZsb2FkLFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xNTQ4PXN0YXRpYyBpbnQgdGFwcmlvX2VuYWJsZV9vZmZsb2FkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNTQ5LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTU1MDpcXHRcXHRcXHRcXHQgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqc2NoZWQsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNTUxLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTE4NTQ9c3RhdGljIGludCB0YXByaW9fY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE4NTgtXFx0c3RydWN0IG5sYXR0ciAqdGJbVENBX1RBUFJJT19BVFRSX01BWCArIDFdID0geyB9O1xcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTg1OTpcXHRzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpvcGVyLCAqYWRtaW4sICpuZXdfYWRtaW47XFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xODYwLVxcdHN0cnVjdCB0YXByaW9fc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTIwNjQ9c3RhdGljIHZvaWQgdGFwcmlvX2Rlc3Ryb3koc3RydWN0IFFkaXNjICpzY2gpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIwNjctXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHFkaXNjX2RldihzY2gpO1xcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjA2ODpcXHRzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpvcGVyLCAqYWRtaW47XFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMDY5LVxcdHVuc2lnbmVkIGludCBpO1xcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0yMjg5PXN0YXRpYyBpbnQgZHVtcF9zY2hlZHVsZShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjI5MDpcXHRcXHRcXHQgY29uc3Qgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqcm9vdClcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIyOTEte1xcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0yMzI1PXN0YXRpYyBpbnQgdGFwcmlvX2R1bXBfdGNfZW50cmllcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjMyNi1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyMzI3OlxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqc2NoZWQpXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMzI4LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MjQyND1zdGF0aWMgaW50IHRhcHJpb19kdW1wKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNDI3LVxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBxZGlzY19kZXYoc2NoKTtcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjI0Mjg6XFx0c3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqb3BlciwgKmFkbWluO1xcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjQyOS1cXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgb3B0ID0geyAwIH07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjA3OjEzLjI3Nzg0MjEzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwOTU2MTY3MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBzY2hfdGFwcmlvLmNgJ3MgQ29yZSBGdW5jdGlvbnMqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIGBzY2hfdGFwcmlvLmNgLiBNeSBwcmltYXJ5IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBkdW1wX3NjaGVkdWxlYCBhbmQgYHRhcHJpb19jaGFuZ2VgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgdHdvIGZ1bmN0aW9ucyB3b3JrIHRvZ2V0aGVyLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZWlyIHJvbGVzIGluIHNjaGVkdWxpbmcgYW5kLCBtb3JlIHNwZWNpZmljYWxseSwgaG93IHRoZXkgbWFuYWdlIHRoZSBjaGFuZ2VzIHRvIHRoYXQgc2NoZWR1bGUuIEkgbmVlZCBhIGNsZWFyIG1lbnRhbCBtb2RlbCBvZiBob3cgZGF0YSBmbG93cyBiZXR3ZWVuIHRoZW0gYW5kIHdoYXQga2V5IGRhdGEgc3RydWN0dXJlcyB0aGV5IHVzZSBhbmQgbW9kaWZ5LiBUaGUgZ29hbCBpcyB0byBmdWxseSBncmFzcCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyB0aGF0IGRyaXZlIHNjaGVkdWxlIG1haW50ZW5hbmNlIGluIFRhcHJpby5cblxuXG4iLCJJbnB1dFRva2VucyI6NzkyNiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjA3OjE1LjM3MzQ2MTM0M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL3NjaF90YXByaW8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjg1LFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMjg1OlxcdFxcdG5sYV9uZXN0X2NhbmNlbChtc2csIGl0ZW0pO1xcbjIyODY6XFx0XFx0cmV0dXJuIC0xO1xcbjIyODc6XFx0fVxcbjIyODg6XFx0XFxuMjI4OTpcXHRzdGF0aWMgaW50IGR1bXBfc2NoZWR1bGUoc3RydWN0IHNrX2J1ZmYgKm1zZyxcXG4yMjkwOlxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpyb290KVxcbjIyOTE6XFx0e1xcbjIyOTI6XFx0XFx0c3RydWN0IG5sYXR0ciAqZW50cnlfbGlzdDtcXG4yMjkzOlxcdFxcdHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnk7XFxuMjI5NDpcXHRcXG4yMjk1OlxcdFxcdGlmIChubGFfcHV0X3M2NChtc2csIFRDQV9UQVBSSU9fQVRUUl9TQ0hFRF9CQVNFX1RJTUUsXFxuMjI5NjpcXHRcXHRcXHRcXHRyb290LVxcdTAwM2ViYXNlX3RpbWUsIFRDQV9UQVBSSU9fUEFEKSlcXG4yMjk3OlxcdFxcdFxcdHJldHVybiAtMTtcXG4yMjk4OlxcdFxcbjIyOTk6XFx0XFx0aWYgKG5sYV9wdXRfczY0KG1zZywgVENBX1RBUFJJT19BVFRSX1NDSEVEX0NZQ0xFX1RJTUUsXFxuMjMwMDpcXHRcXHRcXHRcXHRyb290LVxcdTAwM2VjeWNsZV90aW1lLCBUQ0FfVEFQUklPX1BBRCkpXFxuMjMwMTpcXHRcXHRcXHRyZXR1cm4gLTE7XFxuMjMwMjpcXHRcXG4yMzAzOlxcdFxcdGlmIChubGFfcHV0X3M2NChtc2csIFRDQV9UQVBSSU9fQVRUUl9TQ0hFRF9DWUNMRV9USU1FX0VYVEVOU0lPTixcXG4yMzA0OlxcdFxcdFxcdFxcdHJvb3QtXFx1MDAzZWN5Y2xlX3RpbWVfZXh0ZW5zaW9uLCBUQ0FfVEFQUklPX1BBRCkpXFxuMjMwNTpcXHRcXHRcXHRyZXR1cm4gLTE7XFxuMjMwNjpcXHRcXG4yMzA3OlxcdFxcdGVudHJ5X2xpc3QgPSBubGFfbmVzdF9zdGFydF9ub2ZsYWcobXNnLFxcbjIzMDg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgVENBX1RBUFJJT19BVFRSX1NDSEVEX0VOVFJZX0xJU1QpO1xcbjIzMDk6XFx0XFx0aWYgKCFlbnRyeV9saXN0KVxcbjIzMTA6XFx0XFx0XFx0Z290byBlcnJvcl9uZXN0O1xcbjIzMTE6XFx0XFxuMjMxMjpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBcXHUwMDI2cm9vdC1cXHUwMDNlZW50cmllcywgbGlzdCkge1xcbjIzMTM6XFx0XFx0XFx0aWYgKGR1bXBfZW50cnkobXNnLCBlbnRyeSkgXFx1MDAzYyAwKVxcbjIzMTQ6XFx0XFx0XFx0XFx0Z290byBlcnJvcl9uZXN0O1xcbjIzMTU6XFx0XFx0fVxcbjIzMTY6XFx0XFxuMjMxNzpcXHRcXHRubGFfbmVzdF9lbmQobXNnLCBlbnRyeV9saXN0KTtcXG4yMzE4OlxcdFxcdHJldHVybiAwO1xcbjIzMTk6XFx0XFxuMjMyMDpcXHRlcnJvcl9uZXN0OlxcbjIzMjE6XFx0XFx0bmxhX25lc3RfY2FuY2VsKG1zZywgZW50cnlfbGlzdCk7XFxuMjMyMjpcXHRcXHRyZXR1cm4gLTE7XFxuMjMyMzpcXHR9XFxuMjMyNDpcXHRcXG4yMzI1OlxcdHN0YXRpYyBpbnQgdGFwcmlvX2R1bXBfdGNfZW50cmllcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbjIzMjY6XFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLFxcbjIzMjc6XFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZClcXG4yMzI4OlxcdHtcXG4yMzI5OlxcdFxcdHN0cnVjdCBubGF0dHIgKm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjA3OjE1LjM3MzU4NzM5M1oiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjQ4Mzk5NDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCB3YWxraW5nIHRocm91Z2ggdGhlIGxvZ2ljOlxuXG4qKkludmVzdGlnYXRpbmcgTWVtb3J5IEFsbG9jYXRpb24gaW4gdGFwcmlvIE1vZHVsZSoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBpbnRvIGhvdyBtZW1vcnkgaXMgYmVpbmcgaGFuZGxlZCByZWxhdGVkIHRvIHRoZSBuZXcgc2NoZWR1bGVyIGdhdGUgbGlzdCwgc3BlY2lmaWNhbGx5IGBuZXdgIG9yIGBzY2hlZF9nYXRlX2xpc3RgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGlzIGFsbG9jYXRlZC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdHJhY2UgdGhlIGFsbG9jYXRpb24gcHJvY2Vzcywgc28gSSdsbCBzdGFydCBieSBsb29raW5nIGRpcmVjdGx5IGF0IHRoZSBjb2RlIHdoZXJlIHRoZXNlIGFyZSB1c2VkIHdpdGhpbiB0aGUgYHNjaF90YXByaW8uY2AgZmlsZS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgcmVhZCB0aGUgZnVuY3Rpb24gYHRhcHJpb19jaGFuZ2VgLiBBbHRlcm5hdGl2ZWx5LCBJIGNvdWxkIHVzZSBhIGZpbmQgd2l0aGluIGBzY2hfdGFwcmlvLmNgLCB3aGljaCB3b3VsZCBiZSBxdWlja2VyIGFuZCBpcyBsaWtlbHkgd2hhdCBJIHdpbGwgZG8uIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQsIGFuZCBtb3N0IGltcG9ydGFudGx5LCBob3cgdGhlIG1lbW9yeSBpcyBjbGFpbWVkLiBJdCdzIGxpa2VseSBnb2luZyB0byBpbnZvbHZlIGEgYGt6YWxsb2NgIG9yIHNpbWlsYXIgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb24uIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODIzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzowNzoxNy42MjE5ODk1MzRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MzIyMTU5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJremFsbG9jLipzY2hlZF9nYXRlX2xpc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL3NjaF90YXByaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6MDc6MTcuNjY2MzE1NjIzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MDQ3OTgxOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgc2NoX3RhcHJpby5jYCBBbGxvY2F0aW9ucyoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGFsbG9jYXRpb24gc3RyYXRlZ2llcyB3aXRoaW4gYHNjaF90YXByaW8uY2AuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IG1lbW9yeSBpcyBiZWluZyBtYW5hZ2VkIHdpdGhpbiB0aGlzIHNjaGVkdWxlciwgc3BlY2lmaWNhbGx5IGhvdyBpdCBhbGxvY2F0ZXMgYW5kIGRlYWxsb2NhdGVzIHJlc291cmNlcy4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBrZXkgZnVuY3Rpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBoYW5kbGUgdGhlc2Ugb3BlcmF0aW9ucy4gSSdtIGdvaW5nIHRvIGJlIGxvb2tpbmcgZm9yIHBhdHRlcm5zLCBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGFuZCBhcmVhcyB3aGVyZSBtZW1vcnkgbGVha3Mgb3IgaW5lZmZpY2llbmNpZXMgbWlnaHQgZXhpc3QuIE15IGZvY3VzIHdpbGwgYmUgb24gdGhlIGltcGFjdCBvZiB0aGVzZSBhbGxvY2F0aW9ucyBvbiB0aGUgcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eSBvZiB0aGUgc3lzdGVtLiBJJ2xsIGJlIHNjcnV0aW5pemluZyB0aGUgY29kZSBmb3IgYW55IG5vbi1zdGFuZGFyZCBhbGxvY2F0aW9uIGFwcHJvYWNoZXMsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhpbmdzIGxpa2Ugc2xhYiBhbGxvY2F0b3JzLCBjdXN0b20gbWVtb3J5IHBvb2xzLCBvciBwZXJoYXBzIGFueSB1bnVzdWFsIG1lbW9yeSBtYXBwaW5nIHRlY2huaXF1ZXMgdXNlZCBoZXJlLCBlc3BlY2lhbGx5IGdpdmVuIHRoaXMgaXMgdGhlIHNjaGVkdWxlci4gSSdsbCBiZSBjb25zaWRlcmluZyB0aGUgdGhyZWFkLXNhZmV0eSBvZiB0aGVzZSBhbGxvY2F0b3JzIHRvbyDigJMgYW55IGxvY2tpbmcgbWVjaGFuaXNtcyB1c2VkIHRvIHByb3RlY3QgYWdhaW5zdCBjb25jdXJyZW50IGFjY2VzcyB3aWxsIGJlIG9mIGludGVyZXN0LiBGaW5hbGx5LCBJJ2xsIGNvbXBhcmUgdGhlIGFwcHJvYWNoZXMgdXNlZCBpbiBgc2NoX3RhcHJpby5jYCB0byBvdGhlciBzY2hlZHVsZXJzIHRvIHVuZGVyc3RhbmQgaXRzIGRlc2lnbiB0cmFkZS1vZmZzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTI0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6MDc6MjAuMDcxMTE2NDAxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njk5MDM5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvc2NoX3RhcHJpby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MTEyMT1zdGF0aWMgaW50IHBhcnNlX3NjaGVkX2xpc3Qoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqbGlzdCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTEzOS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjExNDA6XFx0XFx0ZW50cnkgPSBremFsbG9jX29iaigqZW50cnkpO1xcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTE0MS1cXHRcXHRpZiAoIWVudHJ5KSB7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTEzOTc9c3RhdGljIHZvaWQgc2V0dXBfdHh0aW1lKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE0MDgtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxNDA5OnN0YXRpYyBzdHJ1Y3QgdGNfdGFwcmlvX3FvcHRfb2ZmbG9hZCAqdGFwcmlvX29mZmxvYWRfYWxsb2MoaW50IG51bV9lbnRyaWVzKVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTQxMC17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE0MTItXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxNDEzOlxcdF9fb2ZmbG9hZCA9IGt6YWxsb2NfZmxleCgqX19vZmZsb2FkLCBvZmZsb2FkLmVudHJpZXMsIG51bV9lbnRyaWVzKTtcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE0MTQtXFx0aWYgKCFfX29mZmxvYWQpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTE1NDg9c3RhdGljIGludCB0YXByaW9fZW5hYmxlX29mZmxvYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTU3Ni1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE1Nzc6XFx0b2ZmbG9hZCA9IHRhcHJpb19vZmZsb2FkX2FsbG9jKHNjaGVkLVxcdTAwM2VudW1fZW50cmllcyk7XFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNTc4LVxcdGlmICghb2ZmbG9hZCkge1xcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xNjE0PXN0YXRpYyBpbnQgdGFwcmlvX2Rpc2FibGVfb2ZmbG9hZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNjI0LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTYyNTpcXHRvZmZsb2FkID0gdGFwcmlvX29mZmxvYWRfYWxsb2MoMCk7XFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNjI2LVxcdGlmICghb2ZmbG9hZCkge1xcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xODU0PXN0YXRpYyBpbnQgdGFwcmlvX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xOTExLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTkxMjpcXHRuZXdfYWRtaW4gPSBremFsbG9jX29iaigqbmV3X2FkbWluKTtcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE5MTMtXFx0aWYgKCFuZXdfYWRtaW4pIHtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MjEwMz1zdGF0aWMgaW50IHRhcHJpb19pbml0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIxMzMtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyMTM0OlxcdHEtXFx1MDAzZXFkaXNjcyA9IGt6YWxsb2Nfb2JqcyhxLVxcdTAwM2VxZGlzY3NbMF0sIGRldi1cXHUwMDNlbnVtX3R4X3F1ZXVlcyk7XFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMTM1LVxcdGlmICghcS1cXHUwMDNlcWRpc2NzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzowNzoyMC4xMTgxMTQyOFoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3Nzg2MTU2OTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE5vIENvbmNlcm5zIERldGVjdGVkKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgYG5ld19hZG1pbmAgZ2V0cyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmpgLCB3aGljaCBpcyBnb29kOyBpdCBndWFyYW50ZWVzIHplcm8taW5pdGlhbGl6YXRpb24uIE5vdywgbGV0J3MgbWV0aWN1bG91c2x5IGdvIHRocm91Z2ggdGhlIHBhdGNoIGRldGFpbHMuXG5cbkknbSBzZWVpbmcgYSBuZXcgZmllbGQsIGBzNjQgcGVyaW9kYCwgYWRkZWQgdG8gYHN0cnVjdCBzY2hlZF9nYXRlX2xpc3RgLiBUaGlzIHJhaXNlcyBhIGZsYWcgYXV0b21hdGljYWxseSwgYnV0IGFmdGVyIGNoZWNraW5nIGhvdyBpdCdzIHVzZWQsIEknbSBjb25maWRlbnQuIFRoZSBgc2hvdWxkX3Jlc3RhcnRfY3ljbGVgIGZ1bmN0aW9uIG5vdyBhY2NlcHRzIGFuIGBlbmRfdGltZWAgYXJndW1lbnQsIGFuZCBpdCBjaGVja3MgZm9yIGVxdWFsaXR5IHdpdGggYG9wZXItXHUwMDNlY3ljbGVfZW5kX3RpbWVgLiBGYWlyIGVub3VnaC5cblxuUGVla2luZyBhdCBgYWR2YW5jZV9zY2hlZGAsIGl0IGRlY2xhcmVzIGBrdGltZV90IGVuZF90aW1lLCBuZXh0X3N0YXJ0LCBub3c7IGludCBidWRnZXQsIHRjOyBzNjQgYmVoaW5kO2AsIGFsbCBhcmUgaW5pdGlhbGl6ZWQuIGBub3dgIGlzIHNldCB1c2luZyBgaHJ0aW1lcl9jYl9nZXRfdGltZWAsIGFuZCBgZW5kX3RpbWVgIGdldHMgYXNzaWduZWQuIGBiZWhpbmRgIGlzIGNhbGN1bGF0ZWQgYXMgdGhlIGRpZmZlcmVuY2UuIFRoZSBgYnVkZ2V0YCBpcyBpbml0aWFsaXplZC4gSW5zaWRlIHRoZSBsb29wLCBgbmV4dF9zdGFydGAgaXMgYXNzaWduZWQgYmVmb3JlIGl0cyB1c2UgaW4gYGt0aW1lX2FkZF9uc2AgY2FsbHMuIFRoZSBsb29wIGNvcnJlY3RseSBjYWxscyBgc2hvdWxkX3Jlc3RhcnRfY3ljbGVgIHdpdGggdGhlIGNvcnJlY3QgYGVuZF90aW1lYC4gVGhlIGBmb3JgIGxvb3AsIGltcG9ydGFudGx5LCBwYXNzZXMgYG5leHRfc3RhcnRgIGludG8gYGt0aW1lX2FkZF9uc2AuIEl0J3MgY2xlYXIgdGhhdCBgbmV4dF9zdGFydGAgaXMgaW5pdGlhbGl6ZWQgb24gZXZlcnkgbG9vcCBpdGVyYXRpb24sIGV2ZW4gd2l0aCB0aGUgYGRvLi4ud2hpbGVgIHN0cnVjdHVyZS5cblxuVGhlbiwgbG9va2luZyBhdCBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCwgYGN5Y2xlYCBpcyBpbml0aWFsaXplZCB0byB6ZXJvLiBUaGUgbG9vcCBhZGRzIHVwIGBlbnRyeS1cdTAwM2VpbnRlcnZhbGAuIGBuZXctXHUwMDNlcGVyaW9kYCBpcyBzZXQgYXMgdGhlIG1pbmltdW0gYmV0d2VlbiBgbmV3LVx1MDAzZWN5Y2xlX3RpbWVgIGFuZCBgY3ljbGVgLiBTZWVtcyBmdWxseSBpbml0aWFsaXplZC5cblxuTm93LCBsZXQncyBnZXQgc2VyaW91cy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2VzLCBpbmZvcm1hdGlvbiBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBwYWRkaW5nIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLiBBZnRlciBhIHRob3JvdWdoIHJldmlldywgaXQncyBjbGVhcjogbm8gc3RydWN0dXJlcyB0aGF0IGdldCBjb3BpZWQgdG8gdXNlciBzcGFjZSBoYXZlIGJlZW4gYWRkZWQgb3IgbW9kaWZpZWQgd2l0aCBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkuIGBwZXJpb2RgIGlzIGludGVybmFsIHRvIGBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0YCwgYW5kIGl0J3MgYWxsb2NhdGVkIHdpdGgga3phbGxvYyBhbmQgZXhwbGljaXRseSBpbml0aWFsaXplZCB3aXRoaW4gYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAuIFRoZSBsb2dpYyBkb2Vzbid0IGRlcGVuZCBvbiBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIE5vIHN0YWNrIHZhcmlhYmxlcyBhcmUgbGVmdCB1bmluaXRpYWxpemVkLiBUaGVyZSBhcmVuJ3QgYW55IGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGJ1ZmZlciBzbGljZXMuXG5cblRoZXJlZm9yZSwgSSdtIGNvbmZpZGVudCB0aGF0IHRoaXMgY2hhbmdlICpkb2VzIG5vdCogaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFN0YW5kYXJkIHNhbml0aXplcnMgbGlrZSBLQVNBTiBhcmUgc3VmZmljaWVudCBmb3IgY2hlY2tpbmcgYm91bmRzIGFuZCBsaWZlY3ljbGUsIGFuZCB3ZSBkbyAqbm90KiBuZWVkIGEgS01TQU4gc2Vzc2lvbiBmb3IgdGhpcy5cblxuTGV0J3MgZG91YmxlLWNoZWNrIGFsbCB0aGUgY3JpdGVyaWEuIFdlJ3JlIGFzc2Vzc2luZyB3aGV0aGVyIEtNU0FOIGlzIG5lZWRlZCwgYW5kIG15IGNvbmNsdXNpb24gaXMgJ2ZhbHNlJy4gVGhlIHJlYXNvbmluZzogdGhlIHBhdGNoIHByaW1hcmlseSBtb2RpZmllcyB0aW1pbmcgYW5kIHNjaGVkdWxpbmcgbG9naWMgd2l0aGluIGBzY2hfdGFwcmlvYCwgc3BlY2lmaWNhbGx5IGBhZHZhbmNlX3NjaGVkYCwgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAsIGFuZCBgc2hvdWxkX3Jlc3RhcnRfY3ljbGVgLCBhZGRpbmcgdGhlIGBwZXJpb2RgIGZpZWxkLiBBbGwgc3RydWN0dXJlcyBhcmUga3phbGxvYydkIGFuZCBpbml0aWFsaXplZC4gVGhlcmUgYXJlIG5vIGV4cG9zZWQgdXNlci1zcGFjZSBjb3B5IHBhdGhzIG9yIHVuaW5pdGlhbGl6ZWQgcmVhZHMuIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGNvdmVyIGFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgb3Igb3V0LW9mLWJvdW5kcyBpc3N1ZXMsIHNvIEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLlxuXG5JJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBXZSdyZSBnb29kIHRvIGdvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDE5MiwiT3V0cHV0VG9rZW5zIjoyODcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6MDc6MjcuOTA0MjczNTY0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIHRoZSBzY2hlZHVsZSBhZHZhbmNlbWVudCBhbmQgY3ljbGUgcmVjYWxjdWxhdGlvbiBsb2dpYyBpbiB0aGUgdGFwcmlvIHFkaXNjIChzY2hfdGFwcmlvLmMpIHRvIGhhbmRsZSBkZWxheWVkIHRpbWVycyBhbmQgY2xvY2sgc3RlcHBpbmcgYnkgYm91bmRpbmcgY2F0Y2gtdXAgaXRlcmF0aW9ucyBhbmQgaW50cm9kdWNpbmcgYW4gaW50ZXJuYWwgYHBlcmlvZGAgZmllbGQgaW4gYHN0cnVjdCBzY2hlZF9nYXRlX2xpc3RgLlxcblxcbi0gVW5pbml0aWFsaXplZCBNZW1vcnkgLyBJbmZvLWxlYWsgQW5hbHlzaXM6XFxuICAxLiBUaGUgbmV3IGBwZXJpb2RgIGZpZWxkIGluIGBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0YCBpcyBjb21wdXRlZCBkdXJpbmcgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgYW5kIHN0b3JlZCBpbiBtZW1vcnkgYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmpgLiBJdCBpcyBub3QgZXhwb3J0ZWQgb3IgZHVtcGVkIHRvIHVzZXJzcGFjZSBpbiBgZHVtcF9zY2hlZHVsZWAuXFxuICAyLiBBbGwgbG9jYWwgdmFyaWFibGVzIGludHJvZHVjZWQgaW4gYGFkdmFuY2Vfc2NoZWRgIChgbm93YCwgYGVuZF90aW1lYCwgYG5leHRfc3RhcnRgLCBgYnVkZ2V0YCwgYGJlaGluZGApIGFuZCBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCAoYGN5Y2xlYCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHJlYWRpbmcgb3IgYnJhbmNoaW5nIG9uIHRoZW0uXFxuICAzLiBObyBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucywgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHJlYWRzIGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZSBvciBrZXJuZWwgY29udHJvbCBmbG93Llxcblxcbi0gS0FTQU4gdnMgS01TQU4gQXBwbGljYWJpbGl0eTpcXG4gIEFueSBjb25jdXJyZW5jeSwgbGlzdCB0cmF2ZXJzYWwsIG9yIGJvdW5kcyBpc3N1ZXMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIGxvY2tkZXAuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3IgaW5mby1sZWFrIHJpc2tzIHJlcXVpcmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHJ1bi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIHRoZSBzY2hlZHVsZSBhZHZhbmNlbWVudCBhbmQgY3ljbGUgcmVjYWxjdWxhdGlvbiBsb2dpYyBpbiB0aGUgdGFwcmlvIHFkaXNjIChzY2hfdGFwcmlvLmMpIHRvIGhhbmRsZSBkZWxheWVkIHRpbWVycyBhbmQgY2xvY2sgc3RlcHBpbmcgYnkgYm91bmRpbmcgY2F0Y2gtdXAgaXRlcmF0aW9ucyBhbmQgaW50cm9kdWNpbmcgYW4gaW50ZXJuYWwgYHBlcmlvZGAgZmllbGQgaW4gYHN0cnVjdCBzY2hlZF9nYXRlX2xpc3RgLlxcblxcbi0gVW5pbml0aWFsaXplZCBNZW1vcnkgLyBJbmZvLWxlYWsgQW5hbHlzaXM6XFxuICAxLiBUaGUgbmV3IGBwZXJpb2RgIGZpZWxkIGluIGBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0YCBpcyBjb21wdXRlZCBkdXJpbmcgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgYW5kIHN0b3JlZCBpbiBtZW1vcnkgYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmpgLiBJdCBpcyBub3QgZXhwb3J0ZWQgb3IgZHVtcGVkIHRvIHVzZXJzcGFjZSBpbiBgZHVtcF9zY2hlZHVsZWAuXFxuICAyLiBBbGwgbG9jYWwgdmFyaWFibGVzIGludHJvZHVjZWQgaW4gYGFkdmFuY2Vfc2NoZWRgIChgbm93YCwgYGVuZF90aW1lYCwgYG5leHRfc3RhcnRgLCBgYnVkZ2V0YCwgYGJlaGluZGApIGFuZCBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCAoYGN5Y2xlYCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHJlYWRpbmcgb3IgYnJhbmNoaW5nIG9uIHRoZW0uXFxuICAzLiBObyBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucywgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHJlYWRzIGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZSBvciBrZXJuZWwgY29udHJvbCBmbG93Llxcblxcbi0gS0FTQU4gdnMgS01TQU4gQXBwbGljYWJpbGl0eTpcXG4gIEFueSBjb25jdXJyZW5jeSwgbGlzdCB0cmF2ZXJzYWwsIG9yIGJvdW5kcyBpc3N1ZXMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIGxvY2tkZXAuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3IgaW5mby1sZWFrIHJpc2tzIHJlcXVpcmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHJ1bi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfnk6d[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-01 22:24:03 +0000 UTC FinishedAt: 2026-09-01 23:07:29 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "1d2929d0850fff683b8aff051275945e65f082c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_SCH_TAPRIO" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "1d2929d0850fff683b8aff051275945e65f082c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_SCH_TAPRIO" ], "series_id": "cc05566f-0f4c-414a-a028-7b7e8d85be42" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "advance_sched", "parse_taprio_schedule", "taprio_change", "taprio_init" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfU0NIX1RBUFJJTyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FkdmFuY2Vfc2NoZWQmIzM0OywKICAgICYjMzQ7cGFyc2VfdGFwcmlvX3NjaGVkdWxlJiMzNDssCiAgICAmIzM0O3RhcHJpb19jaGFuZ2UmIzM0OywKICAgICYjMzQ7dGFwcmlvX2luaXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHRoZSBzY2hlZHVsZSBhZHZhbmNlbWVudCBhbmQgY3ljbGUgcmVjYWxjdWxhdGlvbiBsb2dpYyBpbiB0aGUgdGFwcmlvIHFkaXNjIChzY2hfdGFwcmlvLmMpIHRvIGhhbmRsZSBkZWxheWVkIHRpbWVycyBhbmQgY2xvY2sgc3RlcHBpbmcgYnkgYm91bmRpbmcgY2F0Y2gtdXAgaXRlcmF0aW9ucyBhbmQgaW50cm9kdWNpbmcgYW4gaW50ZXJuYWwgYHBlcmlvZGAgZmllbGQgaW4gYHN0cnVjdCBzY2hlZF9nYXRlX2xpc3RgLlxuXG4tIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IC8gSW5mby1sZWFrIEFuYWx5c2lzOlxuICAxLiBUaGUgbmV3IGBwZXJpb2RgIGZpZWxkIGluIGBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0YCBpcyBjb21wdXRlZCBkdXJpbmcgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgYW5kIHN0b3JlZCBpbiBtZW1vcnkgYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmpgLiBJdCBpcyBub3QgZXhwb3J0ZWQgb3IgZHVtcGVkIHRvIHVzZXJzcGFjZSBpbiBgZHVtcF9zY2hlZHVsZWAuXG4gIDIuIEFsbCBsb2NhbCB2YXJpYWJsZXMgaW50cm9kdWNlZCBpbiBgYWR2YW5jZV9zY2hlZGAgKGBub3dgLCBgZW5kX3RpbWVgLCBgbmV4dF9zdGFydGAsIGBidWRnZXRgLCBgYmVoaW5kYCkgYW5kIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgIChgY3ljbGVgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgcmVhZGluZyBvciBicmFuY2hpbmcgb24gdGhlbS5cbiAgMy4gTm8gYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMsIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCByZWFkcyBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2Ugb3Iga2VybmVsIGNvbnRyb2wgZmxvdy5cblxuLSBLQVNBTiB2cyBLTVNBTiBBcHBsaWNhYmlsaXR5OlxuICBBbnkgY29uY3VycmVuY3ksIGxpc3QgdHJhdmVyc2FsLCBvciBib3VuZHMgaXNzdWVzIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBsb2NrZGVwLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIG9yIGluZm8tbGVhayByaXNrcyByZXF1aXJpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBydW4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzY2hlZHVsZSBwYXJzaW5nIGFuZCBocnRpbWVyIGFkdmFuY2UgYWxnb3JpdGhtIGluIHRoZSBUQVBSSU8gKFRpbWUtQXdhcmUgUHJpb3JpdHkpIHBhY2tldCBzY2hlZHVsZXIgKHNjaF90YXByaW8pLiBTcGVjaWZpY2FsbHksIGl0IGZpeGVzIGN5Y2xlIGNhdGNoLXVwIGxvZ2ljIHdoZW4gdGhlIHRpbWVyIGlzIGRlbGF5ZWQgb3IgdGhlIGNsb2NrIGlzIHN0ZXBwZWQgYnkgY2FsY3VsYXRpbmcgcGVyaW9kcyBhbmQgbGVhcGluZyBmb3J3YXJkLCBhbmQgYm91bmRzIHRoZSBzY2hlZHVsZSBjYXRjaC11cCBsb29wLiBUaGlzIG1vZGlmaWVzIGNvcmUgdHJhZmZpYyBjb250cm9sIHNjaGVkdWxpbmcgbG9naWMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIGNvbmZpZ3VyYXRpb24gYW5kIG5ldHdvcmsgcGFja2V0IHRyYW5zbWlzc2lvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzowNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQwNDRiOGJkMDQyNzhlMGM2ODI0MTUwNmQzNTk1MDcxMDUzM2RiYjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxIDIzOjA2OjM1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfdGFwcmlvLmMgYi9uZXQvc2NoZWQvc2NoX3RhcHJpby5jXG5pbmRleCAzOWFjNWI5N2FhM2FmLi45MDFkZmQyNDg0ZTEwIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF90YXByaW8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF90YXByaW8uY1xuQEAgLTgzLDYgJiM0Mzs4MywxMCBAQCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0IHtcbiBcdHM2NCBjeWNsZV90aW1lO1xuIFx0czY0IGN5Y2xlX3RpbWVfZXh0ZW5zaW9uO1xuIFx0czY0IGJhc2VfdGltZTtcbiYjNDM7XHQvKiBtaW4oY3ljbGVfdGltZSwgc3VtIG9mIGludGVydmFscyk6IHRoZSBzb2Z0d2FyZSBzY2hlZHVsZSByZXN0YXJ0c1xuJiM0MztcdCAqIHRoZSBsaXN0IGFmdGVyIHRoZSBsYXN0IGVudHJ5IGV2ZW4gd2hlbiBjeWNsZV90aW1lIGlzIG5vdCB1cCB5ZXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0czY0IHBlcmlvZDtcbiB9O1xuIFxuIHN0cnVjdCB0YXByaW9fc2NoZWQge1xuQEAgLTg3MSwxMiAmIzQzOzg3NSwxMyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnRhcHJpb19kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxuIH1cbiBcbiBzdGF0aWMgYm9vbCBzaG91bGRfcmVzdGFydF9jeWNsZShjb25zdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpvcGVyLFxuLVx0XHRcdFx0IGNvbnN0IHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnkpXG4mIzQzO1x0XHRcdFx0IGNvbnN0IHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnksXG4mIzQzO1x0XHRcdFx0IGt0aW1lX3QgZW5kX3RpbWUpXG4ge1xuIFx0aWYgKGxpc3RfaXNfbGFzdChcdTAwMjZlbnRyeS1cdTAwM2VsaXN0LCBcdTAwMjZvcGVyLVx1MDAzZWVudHJpZXMpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdGlmIChrdGltZV9jb21wYXJlKGVudHJ5LVx1MDAzZWVuZF90aW1lLCBvcGVyLVx1MDAzZWN5Y2xlX2VuZF90aW1lKSA9PSAwKVxuJiM0MztcdGlmIChrdGltZV9jb21wYXJlKGVuZF90aW1lLCBvcGVyLVx1MDAzZWN5Y2xlX2VuZF90aW1lKSA9PSAwKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdHJldHVybiBmYWxzZTtcbkBAIC05MjUsOCAmIzQzOzkzMCw5IEBAIHN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBhZHZhbmNlX3NjaGVkKHN0cnVjdCBocnRpbWVyICp0aW1lcilcbiBcdGludCBudW1fdGMgPSBuZXRkZXZfZ2V0X251bV90YyhkZXYpO1xuIFx0c3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeSwgKm5leHQ7XG4gXHRzdHJ1Y3QgUWRpc2MgKnNjaCA9IHEtXHUwMDNlcm9vdDtcbi1cdGt0aW1lX3QgZW5kX3RpbWU7XG4tXHRpbnQgdGM7XG4mIzQzO1x0a3RpbWVfdCBlbmRfdGltZSwgbmV4dF9zdGFydCwgbm93O1xuJiM0MztcdGludCBidWRnZXQsIHRjO1xuJiM0MztcdHM2NCBiZWhpbmQ7XG4gXG4gXHRzcGluX2xvY2soXHUwMDI2cS1cdTAwM2VjdXJyZW50X2VudHJ5X2xvY2spO1xuIFx0ZW50cnkgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHEtXHUwMDNlY3VycmVudF9lbnRyeSxcbkBAIC05NTIsMjMgJiM0Mzs5NTgsNDkgQEAgc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGFkdmFuY2Vfc2NoZWQoc3RydWN0IGhydGltZXIgKnRpbWVyKVxuIFx0XHRnb3RvIGZpcnN0X3J1bjtcbiBcdH1cbiBcbi1cdGlmIChzaG91bGRfcmVzdGFydF9jeWNsZShvcGVyLCBlbnRyeSkpIHtcbi1cdFx0bmV4dCA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2b3Blci1cdTAwM2VlbnRyaWVzLCBzdHJ1Y3Qgc2NoZWRfZW50cnksXG4tXHRcdFx0XHRcdGxpc3QpO1xuLVx0XHRvcGVyLVx1MDAzZWN5Y2xlX2VuZF90aW1lID0ga3RpbWVfYWRkX25zKG9wZXItXHUwMDNlY3ljbGVfZW5kX3RpbWUsXG4tXHRcdFx0XHRcdFx0ICAgIG9wZXItXHUwMDNlY3ljbGVfdGltZSk7XG4tXHR9IGVsc2Uge1xuLVx0XHRuZXh0ID0gbGlzdF9uZXh0X2VudHJ5KGVudHJ5LCBsaXN0KTtcbiYjNDM7XHRub3cgPSBocnRpbWVyX2NiX2dldF90aW1lKHRpbWVyKTtcbiYjNDM7XHRlbmRfdGltZSA9IGVudHJ5LVx1MDAzZWVuZF90aW1lO1xuJiM0MztcdGJlaGluZCA9IGt0aW1lX3N1Yihub3csIGVuZF90aW1lKTtcbiYjNDM7XG4mIzQzO1x0LyogQmVoaW5kLCBlLmcuIGRlbGF5ZWQgdGltZXIgb3Igc3RlcHBlZCBjbG9jazogc2tpcCB3aG9sZSBwZXJpb2RzXG4mIzQzO1x0ICogYXJpdGhtZXRpY2FsbHkgYW5kIHdhbGsgYXQgbW9zdCBvbmUgbW9yZSB0byB0aGUgZW50cnkgY292ZXJpbmdcbiYjNDM7XHQgKiBub3csIGluc3RlYWQgb2YgcmVwbGF5aW5nIHRoZSBiYWNrbG9nIG9uZSBleHBpcnkgYXQgYSB0aW1lLiBUaGVcbiYjNDM7XHQgKiBjYXAgYm91bmRzIHRoZSB3YWxrOyBhIGxlZnRvdmVyIGlzIHBpY2tlZCB1cCBieSB0aGUgbmV4dCBleHBpcnkuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHVubGlrZWx5KGJlaGluZCBcdTAwM2U9IG9wZXItXHUwMDNlcGVyaW9kKSkge1xuJiM0MztcdFx0czY0IGp1bXAgPSBkaXY2NF9zNjQoYmVoaW5kLCBvcGVyLVx1MDAzZXBlcmlvZCkgKiBvcGVyLVx1MDAzZXBlcmlvZDtcbiYjNDM7XG4mIzQzO1x0XHRlbmRfdGltZSA9IGt0aW1lX2FkZF9ucyhlbmRfdGltZSwganVtcCk7XG4mIzQzO1x0XHRvcGVyLVx1MDAzZWN5Y2xlX2VuZF90aW1lID0ga3RpbWVfYWRkX25zKG9wZXItXHUwMDNlY3ljbGVfZW5kX3RpbWUsIGp1bXApO1xuIFx0fVxuIFxuLVx0ZW5kX3RpbWUgPSBrdGltZV9hZGRfbnMoZW50cnktXHUwMDNlZW5kX3RpbWUsIG5leHQtXHUwMDNlaW50ZXJ2YWwpO1xuLVx0ZW5kX3RpbWUgPSBtaW5fdChrdGltZV90LCBlbmRfdGltZSwgb3Blci1cdTAwM2VjeWNsZV9lbmRfdGltZSk7XG4mIzQzO1x0YnVkZ2V0ID0gMiAqIG9wZXItXHUwMDNlbnVtX2VudHJpZXM7XG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0aWYgKHNob3VsZF9yZXN0YXJ0X2N5Y2xlKG9wZXIsIGVudHJ5LCBlbmRfdGltZSkpIHtcbiYjNDM7XHRcdFx0bmV4dCA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2b3Blci1cdTAwM2VlbnRyaWVzLFxuJiM0MztcdFx0XHRcdFx0XHRzdHJ1Y3Qgc2NoZWRfZW50cnksIGxpc3QpO1xuJiM0MztcdFx0XHRvcGVyLVx1MDAzZWN5Y2xlX2VuZF90aW1lID0ga3RpbWVfYWRkX25zKG9wZXItXHUwMDNlY3ljbGVfZW5kX3RpbWUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgIG9wZXItXHUwMDNlcGVyaW9kKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdG5leHQgPSBsaXN0X25leHRfZW50cnkoZW50cnksIGxpc3QpO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdG5leHRfc3RhcnQgPSBlbmRfdGltZTtcbiYjNDM7XHRcdGVuZF90aW1lID0ga3RpbWVfYWRkX25zKG5leHRfc3RhcnQsIG5leHQtXHUwMDNlaW50ZXJ2YWwpO1xuJiM0MztcdFx0ZW5kX3RpbWUgPSBtaW5fdChrdGltZV90LCBlbmRfdGltZSwgb3Blci1cdTAwM2VjeWNsZV9lbmRfdGltZSk7XG4mIzQzO1x0XHRlbnRyeSA9IG5leHQ7XG4mIzQzO1x0fSB3aGlsZSAodW5saWtlbHkoa3RpbWVfY29tcGFyZShlbmRfdGltZSwgbm93KSBcdTAwM2M9IDApIFx1MDAyNlx1MDAyNiBidWRnZXQtLSk7XG4gXG4mIzQzO1x0LyogbmV4dCBjYW4gYmUgdGhlIGVudHJ5IGFscmVhZHkgcHVibGlzaGVkIGFzIHEtXHUwMDNlY3VycmVudF9lbnRyeSAoYVxuJiM0MztcdCAqIHNpbmdsZS1lbnRyeSBzY2hlZHVsZSwgb3IgYSBjYXRjaC11cCBvZiB3aG9sZSBwZXJpb2RzKSwgc28gdGhlXG4mIzQzO1x0ICogY2xvc2UgdGltZXMgYW5kIGJ1ZGdldHMgYmVsb3cgYXJlIHJld3JpdHRlbiBpbiBwbGFjZSB3aGlsZVxuJiM0MztcdCAqIHRhcHJpb19kZXF1ZXVlX2Zyb21fdHhxKCkgbWF5IGJlIHJlYWRpbmcgdGhlbS5cbiYjNDM7XHQgKi9cbiBcdGZvciAodGMgPSAwOyB0YyBcdTAwM2MgbnVtX3RjOyB0YyYjNDM7JiM0MzspIHtcbiBcdFx0aWYgKG5leHQtXHUwMDNlZ2F0ZV9kdXJhdGlvblt0Y10gPT0gb3Blci1cdTAwM2VjeWNsZV90aW1lKVxuIFx0XHRcdG5leHQtXHUwMDNlZ2F0ZV9jbG9zZV90aW1lW3RjXSA9IEtUSU1FX01BWDtcbiBcdFx0ZWxzZVxuLVx0XHRcdG5leHQtXHUwMDNlZ2F0ZV9jbG9zZV90aW1lW3RjXSA9IGt0aW1lX2FkZF9ucyhlbnRyeS1cdTAwM2VlbmRfdGltZSxcbiYjNDM7XHRcdFx0bmV4dC1cdTAwM2VnYXRlX2Nsb3NlX3RpbWVbdGNdID0ga3RpbWVfYWRkX25zKG5leHRfc3RhcnQsXG4gXHRcdFx0XHRcdFx0XHRcdCBuZXh0LVx1MDAzZWdhdGVfZHVyYXRpb25bdGNdKTtcbiBcdH1cbiBcbkBAIC0xMTMwLDYgJiM0MzsxMTYyLDggQEAgc3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxuIFx0XHRcdFx0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKm5ldyxcbiBcdFx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuJiM0MztcdHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnk7XG4mIzQzO1x0a3RpbWVfdCBjeWNsZSA9IDA7XG4gXHRpbnQgZXJyID0gMDtcbiBcbiBcdGlmICh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfU0lOR0xFX0VOVFJZXSkge1xuQEAgLTExNTIsMTMgJiM0MzsxMTg2LDEwIEBAIHN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YixcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRpZiAoIW5ldy1cdTAwM2VjeWNsZV90aW1lKSB7XG4tXHRcdHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnk7XG4tXHRcdGt0aW1lX3QgY3ljbGUgPSAwO1xuLVxuLVx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBcdTAwMjZuZXctXHUwMDNlZW50cmllcywgbGlzdClcbi1cdFx0XHRjeWNsZSA9IGt0aW1lX2FkZF9ucyhjeWNsZSwgZW50cnktXHUwMDNlaW50ZXJ2YWwpO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIFx1MDAyNm5ldy1cdTAwM2VlbnRyaWVzLCBsaXN0KVxuJiM0MztcdFx0Y3ljbGUgPSBrdGltZV9hZGRfbnMoY3ljbGUsIGVudHJ5LVx1MDAzZWludGVydmFsKTtcbiBcbiYjNDM7XHRpZiAoIW5ldy1cdTAwM2VjeWNsZV90aW1lKSB7XG4gXHRcdGlmIChjeWNsZSBcdTAwM2MgMCB8fCBjeWNsZSBcdTAwM2UgSU5UX01BWCkge1xuIFx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7JiMzOTtjeWNsZV90aW1lJiMzOTsgaXMgdG9vIGJpZ1wmIzM0Oyk7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMTE3Miw2ICYjNDM7MTIwMyw3IEBAIHN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YixcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4mIzQzO1x0bmV3LVx1MDAzZXBlcmlvZCA9IG1pbihuZXctXHUwMDNlY3ljbGVfdGltZSwgY3ljbGUpO1xuIFx0dGFwcmlvX2NhbGN1bGF0ZV9nYXRlX2R1cmF0aW9ucyhxLCBuZXcpO1xuIFxuIFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6MDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1NDSEVEJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfVEFQUklPJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWR2YW5jZV9zY2hlZCYjMzQ7LAogICAgJiMzNDtwYXJzZV90YXByaW9fc2NoZWR1bGUmIzM0OywKICAgICYjMzQ7dGFwcmlvX2NoYW5nZSYjMzQ7LAogICAgJiMzNDt0YXByaW9faW5pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgc2NoZWR1bGUgcGFyc2luZyBhbmQgaHJ0aW1lciBhZHZhbmNlIGFsZ29yaXRobSBpbiB0aGUgVEFQUklPIChUaW1lLUF3YXJlIFByaW9yaXR5KSBwYWNrZXQgc2NoZWR1bGVyIChzY2hfdGFwcmlvKS4gU3BlY2lmaWNhbGx5LCBpdCBmaXhlcyBjeWNsZSBjYXRjaC11cCBsb2dpYyB3aGVuIHRoZSB0aW1lciBpcyBkZWxheWVkIG9yIHRoZSBjbG9jayBpcyBzdGVwcGVkIGJ5IGNhbGN1bGF0aW5nIHBlcmlvZHMgYW5kIGxlYXBpbmcgZm9yd2FyZCwgYW5kIGJvdW5kcyB0aGUgc2NoZWR1bGUgY2F0Y2gtdXAgbG9vcC4gVGhpcyBtb2RpZmllcyBjb3JlIHRyYWZmaWMgY29udHJvbCBzY2hlZHVsaW5nIGxvZ2ljIHJlYWNoYWJsZSB2aWEgbmV0bGluayBjb25maWd1cmF0aW9uIGFuZCBuZXR3b3JrIHBhY2tldCB0cmFuc21pc3Npb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkMDQ0YjhiZDA0Mjc4ZTBjNjgyNDE1MDZkMzU5NTA3MTA1MzNkYmI2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgMSAyMzowNjozNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfdGFwcmlvLmMgYi9uZXQvc2NoZWQvc2NoX3RhcHJpby5jCmluZGV4IDM5YWM1Yjk3YWEzYWYuLjkwMWRmZDI0ODRlMTAgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfdGFwcmlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF90YXByaW8uYwpAQCAtODMsNiAmIzQzOzgzLDEwIEBAIHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgewogCXM2NCBjeWNsZV90aW1lOwogCXM2NCBjeWNsZV90aW1lX2V4dGVuc2lvbjsKIAlzNjQgYmFzZV90aW1lOwomIzQzOwkvKiBtaW4oY3ljbGVfdGltZSwgc3VtIG9mIGludGVydmFscyk6IHRoZSBzb2Z0d2FyZSBzY2hlZHVsZSByZXN0YXJ0cwomIzQzOwkgKiB0aGUgbGlzdCBhZnRlciB0aGUgbGFzdCBlbnRyeSBldmVuIHdoZW4gY3ljbGVfdGltZSBpcyBub3QgdXAgeWV0LgomIzQzOwkgKi8KJiM0MzsJczY0IHBlcmlvZDsKIH07CiAKIHN0cnVjdCB0YXByaW9fc2NoZWQgewpAQCAtODcxLDEyICYjNDM7ODc1LDEzIEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdGFwcmlvX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpCiB9CiAKIHN0YXRpYyBib29sIHNob3VsZF9yZXN0YXJ0X2N5Y2xlKGNvbnN0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKm9wZXIsCi0JCQkJIGNvbnN0IHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnkpCiYjNDM7CQkJCSBjb25zdCBzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5LAomIzQzOwkJCQkga3RpbWVfdCBlbmRfdGltZSkKIHsKIAlpZiAobGlzdF9pc19sYXN0KCZhbXA7ZW50cnktJmd0O2xpc3QsICZhbXA7b3Blci0mZ3Q7ZW50cmllcykpCiAJCXJldHVybiB0cnVlOwogCi0JaWYgKGt0aW1lX2NvbXBhcmUoZW50cnktJmd0O2VuZF90aW1lLCBvcGVyLSZndDtjeWNsZV9lbmRfdGltZSkgPT0gMCkKJiM0MzsJaWYgKGt0aW1lX2NvbXBhcmUoZW5kX3RpbWUsIG9wZXItJmd0O2N5Y2xlX2VuZF90aW1lKSA9PSAwKQogCQlyZXR1cm4gdHJ1ZTsKIAogCXJldHVybiBmYWxzZTsKQEAgLTkyNSw4ICYjNDM7OTMwLDkgQEAgc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGFkdmFuY2Vfc2NoZWQoc3RydWN0IGhydGltZXIgKnRpbWVyKQogCWludCBudW1fdGMgPSBuZXRkZXZfZ2V0X251bV90YyhkZXYpOwogCXN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnksICpuZXh0OwogCXN0cnVjdCBRZGlzYyAqc2NoID0gcS0mZ3Q7cm9vdDsKLQlrdGltZV90IGVuZF90aW1lOwotCWludCB0YzsKJiM0MzsJa3RpbWVfdCBlbmRfdGltZSwgbmV4dF9zdGFydCwgbm93OwomIzQzOwlpbnQgYnVkZ2V0LCB0YzsKJiM0MzsJczY0IGJlaGluZDsKIAogCXNwaW5fbG9jaygmYW1wO3EtJmd0O2N1cnJlbnRfZW50cnlfbG9jayk7CiAJZW50cnkgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHEtJmd0O2N1cnJlbnRfZW50cnksCkBAIC05NTIsMjMgJiM0Mzs5NTgsNDkgQEAgc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGFkdmFuY2Vfc2NoZWQoc3RydWN0IGhydGltZXIgKnRpbWVyKQogCQlnb3RvIGZpcnN0X3J1bjsKIAl9CiAKLQlpZiAoc2hvdWxkX3Jlc3RhcnRfY3ljbGUob3BlciwgZW50cnkpKSB7Ci0JCW5leHQgPSBsaXN0X2ZpcnN0X2VudHJ5KCZhbXA7b3Blci0mZ3Q7ZW50cmllcywgc3RydWN0IHNjaGVkX2VudHJ5LAotCQkJCQlsaXN0KTsKLQkJb3Blci0mZ3Q7Y3ljbGVfZW5kX3RpbWUgPSBrdGltZV9hZGRfbnMob3Blci0mZ3Q7Y3ljbGVfZW5kX3RpbWUsCi0JCQkJCQkgICAgb3Blci0mZ3Q7Y3ljbGVfdGltZSk7Ci0JfSBlbHNlIHsKLQkJbmV4dCA9IGxpc3RfbmV4dF9lbnRyeShlbnRyeSwgbGlzdCk7CiYjNDM7CW5vdyA9IGhydGltZXJfY2JfZ2V0X3RpbWUodGltZXIpOwomIzQzOwllbmRfdGltZSA9IGVudHJ5LSZndDtlbmRfdGltZTsKJiM0MzsJYmVoaW5kID0ga3RpbWVfc3ViKG5vdywgZW5kX3RpbWUpOwomIzQzOwomIzQzOwkvKiBCZWhpbmQsIGUuZy4gZGVsYXllZCB0aW1lciBvciBzdGVwcGVkIGNsb2NrOiBza2lwIHdob2xlIHBlcmlvZHMKJiM0MzsJICogYXJpdGhtZXRpY2FsbHkgYW5kIHdhbGsgYXQgbW9zdCBvbmUgbW9yZSB0byB0aGUgZW50cnkgY292ZXJpbmcKJiM0MzsJICogbm93LCBpbnN0ZWFkIG9mIHJlcGxheWluZyB0aGUgYmFja2xvZyBvbmUgZXhwaXJ5IGF0IGEgdGltZS4gVGhlCiYjNDM7CSAqIGNhcCBib3VuZHMgdGhlIHdhbGs7IGEgbGVmdG92ZXIgaXMgcGlja2VkIHVwIGJ5IHRoZSBuZXh0IGV4cGlyeS4KJiM0MzsJICovCiYjNDM7CWlmICh1bmxpa2VseShiZWhpbmQgJmd0Oz0gb3Blci0mZ3Q7cGVyaW9kKSkgewomIzQzOwkJczY0IGp1bXAgPSBkaXY2NF9zNjQoYmVoaW5kLCBvcGVyLSZndDtwZXJpb2QpICogb3Blci0mZ3Q7cGVyaW9kOwomIzQzOwomIzQzOwkJZW5kX3RpbWUgPSBrdGltZV9hZGRfbnMoZW5kX3RpbWUsIGp1bXApOwomIzQzOwkJb3Blci0mZ3Q7Y3ljbGVfZW5kX3RpbWUgPSBrdGltZV9hZGRfbnMob3Blci0mZ3Q7Y3ljbGVfZW5kX3RpbWUsIGp1bXApOwogCX0KIAotCWVuZF90aW1lID0ga3RpbWVfYWRkX25zKGVudHJ5LSZndDtlbmRfdGltZSwgbmV4dC0mZ3Q7aW50ZXJ2YWwpOwotCWVuZF90aW1lID0gbWluX3Qoa3RpbWVfdCwgZW5kX3RpbWUsIG9wZXItJmd0O2N5Y2xlX2VuZF90aW1lKTsKJiM0MzsJYnVkZ2V0ID0gMiAqIG9wZXItJmd0O251bV9lbnRyaWVzOwomIzQzOwlkbyB7CiYjNDM7CQlpZiAoc2hvdWxkX3Jlc3RhcnRfY3ljbGUob3BlciwgZW50cnksIGVuZF90aW1lKSkgewomIzQzOwkJCW5leHQgPSBsaXN0X2ZpcnN0X2VudHJ5KCZhbXA7b3Blci0mZ3Q7ZW50cmllcywKJiM0MzsJCQkJCQlzdHJ1Y3Qgc2NoZWRfZW50cnksIGxpc3QpOwomIzQzOwkJCW9wZXItJmd0O2N5Y2xlX2VuZF90aW1lID0ga3RpbWVfYWRkX25zKG9wZXItJmd0O2N5Y2xlX2VuZF90aW1lLAomIzQzOwkJCQkJCQkgICAgb3Blci0mZ3Q7cGVyaW9kKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJbmV4dCA9IGxpc3RfbmV4dF9lbnRyeShlbnRyeSwgbGlzdCk7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQluZXh0X3N0YXJ0ID0gZW5kX3RpbWU7CiYjNDM7CQllbmRfdGltZSA9IGt0aW1lX2FkZF9ucyhuZXh0X3N0YXJ0LCBuZXh0LSZndDtpbnRlcnZhbCk7CiYjNDM7CQllbmRfdGltZSA9IG1pbl90KGt0aW1lX3QsIGVuZF90aW1lLCBvcGVyLSZndDtjeWNsZV9lbmRfdGltZSk7CiYjNDM7CQllbnRyeSA9IG5leHQ7CiYjNDM7CX0gd2hpbGUgKHVubGlrZWx5KGt0aW1lX2NvbXBhcmUoZW5kX3RpbWUsIG5vdykgJmx0Oz0gMCkgJmFtcDsmYW1wOyBidWRnZXQtLSk7CiAKJiM0MzsJLyogbmV4dCBjYW4gYmUgdGhlIGVudHJ5IGFscmVhZHkgcHVibGlzaGVkIGFzIHEtJmd0O2N1cnJlbnRfZW50cnkgKGEKJiM0MzsJICogc2luZ2xlLWVudHJ5IHNjaGVkdWxlLCBvciBhIGNhdGNoLXVwIG9mIHdob2xlIHBlcmlvZHMpLCBzbyB0aGUKJiM0MzsJICogY2xvc2UgdGltZXMgYW5kIGJ1ZGdldHMgYmVsb3cgYXJlIHJld3JpdHRlbiBpbiBwbGFjZSB3aGlsZQomIzQzOwkgKiB0YXByaW9fZGVxdWV1ZV9mcm9tX3R4cSgpIG1heSBiZSByZWFkaW5nIHRoZW0uCiYjNDM7CSAqLwogCWZvciAodGMgPSAwOyB0YyAmbHQ7IG51bV90YzsgdGMmIzQzOyYjNDM7KSB7CiAJCWlmIChuZXh0LSZndDtnYXRlX2R1cmF0aW9uW3RjXSA9PSBvcGVyLSZndDtjeWNsZV90aW1lKQogCQkJbmV4dC0mZ3Q7Z2F0ZV9jbG9zZV90aW1lW3RjXSA9IEtUSU1FX01BWDsKIAkJZWxzZQotCQkJbmV4dC0mZ3Q7Z2F0ZV9jbG9zZV90aW1lW3RjXSA9IGt0aW1lX2FkZF9ucyhlbnRyeS0mZ3Q7ZW5kX3RpbWUsCiYjNDM7CQkJbmV4dC0mZ3Q7Z2F0ZV9jbG9zZV90aW1lW3RjXSA9IGt0aW1lX2FkZF9ucyhuZXh0X3N0YXJ0LAogCQkJCQkJCQkgbmV4dC0mZ3Q7Z2F0ZV9kdXJhdGlvblt0Y10pOwogCX0KIApAQCAtMTEzMCw2ICYjNDM7MTE2Miw4IEBAIHN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YiwKIAkJCQkgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqbmV3LAogCQkJCSBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CiYjNDM7CXN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnk7CiYjNDM7CWt0aW1lX3QgY3ljbGUgPSAwOwogCWludCBlcnIgPSAwOwogCiAJaWYgKHRiW1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9TSU5HTEVfRU5UUlldKSB7CkBAIC0xMTUyLDEzICYjNDM7MTE4NiwxMCBAQCBzdGF0aWMgaW50IHBhcnNlX3RhcHJpb19zY2hlZHVsZShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsCiAJaWYgKGVyciAmbHQ7IDApCiAJCXJldHVybiBlcnI7CiAKLQlpZiAoIW5ldy0mZ3Q7Y3ljbGVfdGltZSkgewotCQlzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5OwotCQlrdGltZV90IGN5Y2xlID0gMDsKLQotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmYW1wO25ldy0mZ3Q7ZW50cmllcywgbGlzdCkKLQkJCWN5Y2xlID0ga3RpbWVfYWRkX25zKGN5Y2xlLCBlbnRyeS0mZ3Q7aW50ZXJ2YWwpOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmYW1wO25ldy0mZ3Q7ZW50cmllcywgbGlzdCkKJiM0MzsJCWN5Y2xlID0ga3RpbWVfYWRkX25zKGN5Y2xlLCBlbnRyeS0mZ3Q7aW50ZXJ2YWwpOwogCiYjNDM7CWlmICghbmV3LSZndDtjeWNsZV90aW1lKSB7CiAJCWlmIChjeWNsZSAmbHQ7IDAgfHwgY3ljbGUgJmd0OyBJTlRfTUFYKSB7CiAJCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7JiMzOTtjeWNsZV90aW1lJiMzOTsgaXMgdG9vIGJpZyYjMzQ7KTsKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtMTE3Miw2ICYjNDM7MTIwMyw3IEBAIHN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YiwKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiYjNDM7CW5ldy0mZ3Q7cGVyaW9kID0gbWluKG5ldy0mZ3Q7Y3ljbGVfdGltZSwgY3ljbGUpOwogCXRhcHJpb19jYWxjdWxhdGVfZ2F0ZV9kdXJhdGlvbnMocSwgbmV3KTsKIAogCXJldHVybiAwOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzMzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhpcyBwYXRjaCwgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIG5ldHdvcmtpbmcga2VybmVsIGV4cGVydDoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBUQVBSSU8gYW5kIEZ1enppbmcgUG90ZW50aWFsKioKCkFscmlnaHQsIGEgbmV3IHBhdGNoIHRvIGBuZXQvc2NoZWQvc2NoX3RhcHJpby5jYC4gTXkgaW5pdGlhbCByZWFjdGlvbiBpcyB0byBhc3Nlc3MgaXRzIGltcGFjdCDigJMgZG9lcyBpdCBpbnRyb2R1Y2UgbmV3IGZ1bmN0aW9uYWxpdHkgb3Igc2lnbmlmaWNhbnRseSBhbHRlciBleGlzdGluZyBiZWhhdmlvciB0aGF0IHdhcnJhbnRzIGZ1enppbmc/IFRBUFJJTyBpcywgb2YgY291cnNlLCB0aGUgVGltZS1Bd2FyZSBQcmlvcml0eSBxdWV1aW5nIGRpc2NpcGxpbmUsIGEgY3JpdGljYWwgY29tcG9uZW50IGluIG1hbnkgbW9kZXJuIG5ldHdvcmsgZGVwbG95bWVudHMsIGVzcGVjaWFsbHkgdGhvc2UgZGVhbGluZyB3aXRoIHRpbWUtc2Vuc2l0aXZlIHRyYWZmaWMuIEFueSBjaGFuZ2UgaGVyZSBkZXNlcnZlcyBhIHRob3JvdWdoIGxvb2suIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGRpdmUgaW50byB0aGlzIGZpbGUgdXNpbmcgbXkgZXN0YWJsaXNoZWQgdG9vbGNoYWluIGFuZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBrZXJuZWwgdG8gc2VlIHByZWNpc2VseSB3aGF0IHRoaXMgcGF0Y2ggbW9kaWZpZXMuIEkmIzM5O2xsIG5lZWQgdG8gcmFwaWRseSBkZXRlcm1pbmUgaG93IHRoaXMgY2hhbmdlIGFmZmVjdHMgVEFQUklPJiMzOTtzIGNvcmUgZnVuY3Rpb25hbGl0eSwgYW55IGFkZGVkIGNvbmZpZ3VyYWJsZSBvcHRpb25zLCBvciBjaGFuZ2VzIHRvIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBrZXJuZWwgY29tcG9uZW50cyBhbmQsIG9mIGNvdXJzZSwgcG90ZW50aWFsIG5ldyBjb2RlIHBhdGhzIHRoYXQgY291bGQgYmUgcmlwZSBmb3IgZnV6emluZyB2dWxuZXJhYmlsaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9TQ0hfVEFQUklPJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnPTE2Nz1jb25maWcgTkVUX1NDSF9NUVBSSU9fTElCXG4tLVxubmV0L3NjaGVkL0tjb25maWctMTcxLVxubmV0L3NjaGVkL0tjb25maWc6MTcyOmNvbmZpZyBORVRfU0NIX1RBUFJJT1xubmV0L3NjaGVkL0tjb25maWctMTczLVx0dHJpc3RhdGUgXCYjMzQ7VGltZSBBd2FyZSBQcmlvcml0eSAodGFwcmlvKSBTY2hlZHVsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTM5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIEtjb25maWcgaW4gbmV0L3NjaGVkKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIG5ldHdvcmtpbmcgc2NoZWR1bGVyLiBUaW1lIHRvIHB1bGwgdXAgdGhlIGBuZXQvc2NoZWQvS2NvbmZpZ2AgZmlsZSBhbmQgdGFrZSBhIGxvb2ssIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxNzIuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjcnVjaWFsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIG9yIGRlcGVuZGVuY2llcyB0aGF0IGFyZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZmluZXIgcG9pbnRzIG9mIHRoZSBzY2hlZHVsZXImIzM5O3MgYmVoYXZpb3IuIFRoaXMgaXMgcHJvYmFibHkgd2hlcmUgdGhlIHJlYWxseSBpbXBvcnRhbnQsIG5vbi1vYnZpb3VzIHN0dWZmIGlzIGdvaW5nIHRvIGJlIGRlZmluZWQuIEkmIzM5O20gaG9waW5nIEkmIzM5O2xsIGJlIGFibGUgdG8gc3BvdCBhbnkgc3VidGxldGllcyByaWdodCBhd2F5IHNvIEkgY2FuIGJ1aWxkIGEgbWVudGFsIG1vZGVsIG9mIGhvdyBpdCBhbGwgaGFuZ3MgdG9nZXRoZXIuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZGlnIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE2NTpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2NoX2V0Zi5cbiAxNjY6XHRcbiAxNjc6XHRjb25maWcgTkVUX1NDSF9NUVBSSU9fTElCXG4gMTY4Olx0XHR0cmlzdGF0ZVxuIDE2OTpcdFx0aGVscFxuIDE3MDpcdFx0ICBDb21tb24gbGlicmFyeSBmb3IgbWFuaXB1bGF0aW5nIG1xcHJpbyBxdWV1ZSBjb25maWd1cmF0aW9ucy5cbiAxNzE6XHRcbiAxNzI6XHRjb25maWcgTkVUX1NDSF9UQVBSSU9cbiAxNzM6XHRcdHRyaXN0YXRlIFwmIzM0O1RpbWUgQXdhcmUgUHJpb3JpdHkgKHRhcHJpbykgU2NoZWR1bGVyXCYjMzQ7XG4gMTc0Olx0XHRzZWxlY3QgTkVUX1NDSF9NUVBSSU9fTElCXG4gMTc1Olx0XHRoZWxwXG4gMTc2Olx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBUaW1lIEF3YXJlIFByaW9yaXR5ICh0YXByaW8pIHBhY2tldFxuIDE3NzpcdFx0ICBzY2hlZHVsaW5nIGFsZ29yaXRobS5cbiAxNzg6XHRcbiAxNzk6XHRcdCAgU2VlIHRoZSB0b3Agb2YgXHUwMDNjZmlsZTpuZXQvc2NoZWQvc2NoX3RhcHJpby5jXHUwMDNlIGZvciBtb3JlIGRldGFpbHMuXG4gMTgwOlx0XG4gMTgxOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAxODI6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNjaF90YXByaW8uXG4gMTgzOlx0XG4gMTg0Olx0Y29uZmlnIE5FVF9TQ0hfR1JFRFxuIDE4NTpcdFx0dHJpc3RhdGUgXCYjMzQ7R2VuZXJpYyBSYW5kb20gRWFybHkgRGV0ZWN0aW9uIChHUkVEKVwmIzM0O1xuIDE4NjpcdFx0aGVscFxuIDE4NzpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgR2VuZXJpYyBSYW5kb20gRWFybHkgRGV0ZWN0aW9uXG4gMTg4Olx0XHQgIChHUkVEKSBwYWNrZXQgc2NoZWR1bGluZyBhbGdvcml0aG0gZm9yIHNvbWUgb2YgeW91ciBuZXR3b3JrIGRldmljZXNcbiAxODk6XHRcdCAgKHNlZSB0aGUgdG9wIG9mIFx1MDAzY2ZpbGU6bmV0L3NjaGVkL3NjaF9yZWQuY1x1MDAzZSBmb3IgZGV0YWlscyBhbmRcbiAxOTA6XHRcdCAgcmVmZXJlbmNlcyBhYm91dCB0aGUgYWxnb3JpdGhtKS5cbiAxOTE6XHRcbiAxOTI6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDE5MzpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2NoX2dyZWQuXG4gMTk0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgxNwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgTkVUX1NDSF9UQVBSSU8gQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBmb3IgYE5FVF9TQ0hfVEFQUklPYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiBhbnkgc3VwcG9ydGluZyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlICphbHNvKiBuZWVkZWQgaW4gb3JkZXIgZm9yIGBORVRfU0NIX1RBUFJJT2AgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IHRoaXMgaW52ZXN0aWdhdGlvbiBpcyB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIGZpbGVzLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIGBuZXQvS2NvbmZpZ2Agb3IgcG9zc2libHkgdGhlIG1vcmUgc3BlY2lmaWMgYG5ldC9zY2hlZC9LY29uZmlnYCBmaWxlIHRvIHNlZSB3aGF0IHRoZSBidWlsZCBzeXN0ZW0gZXhwZWN0cy4gVGhhdCBzaG91bGQgcmV2ZWFsIHdoYXQgb3RoZXIgc2V0dGluZ3MgbWlnaHQgbmVlZCB0byBiZSBlbmFibGVkIGFsb25nc2lkZSBgTkVUX1NDSF9UQVBSSU9gLiBIb3BlZnVsbHksIHRoaXMgd2lsbCBzaGVkIHNvbWUgbGlnaHQgb24gd2hhdCBvdGhlciBwaWVjZXMgb2YgdGhlIG5ldHdvcmsgc3RhY2sgYXJlIGludm9sdmVkIGluIHN1cHBvcnRpbmcgdGhpcyBUcmFmZmljIEF3YXJlIFNoYXBpbmcgc2NoZWR1bGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBUcmFmZmljIGNvbnRyb2wgY29uZmlndXJhdGlvbi5cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0bWVudWNvbmZpZyBORVRfU0NIRURcbiAgIDc6XHRcdGJvb2wgXCYjMzQ7UW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nXCYjMzQ7XG4gICA4Olx0XHRzZWxlY3QgTkVUX1NDSF9GSUZPXG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIFdoZW4gdGhlIGtlcm5lbCBoYXMgc2V2ZXJhbCBwYWNrZXRzIHRvIHNlbmQgb3V0IG92ZXIgYSBuZXR3b3JrXG4gIDExOlx0XHQgIGRldmljZSwgaXQgaGFzIHRvIGRlY2lkZSB3aGljaCBvbmVzIHRvIHNlbmQgZmlyc3QsIHdoaWNoIG9uZXMgdG9cbiAgMTI6XHRcdCAgZGVsYXksIGFuZCB3aGljaCBvbmVzIHRvIGRyb3AuIFRoaXMgaXMgdGhlIGpvYiBvZiB0aGUgcXVldWVpbmdcbiAgMTM6XHRcdCAgZGlzY2lwbGluZXMsIHNldmVyYWwgZGlmZmVyZW50IGFsZ29yaXRobXMgZm9yIGhvdyB0byBkbyB0aGlzXG4gIDE0Olx0XHQgIFwmIzM0O2ZhaXJseVwmIzM0OyBoYXZlIGJlZW4gcHJvcG9zZWQuXG4gIDE1Olx0XG4gIDE2Olx0XHQgIElmIHlvdSBzYXkgTiBoZXJlLCB5b3Ugd2lsbCBnZXQgdGhlIHN0YW5kYXJkIHBhY2tldCBzY2hlZHVsZXIsIHdoaWNoXG4gIDE3Olx0XHQgIGlzIGEgRklGTyAoZmlyc3QgY29tZSwgZmlyc3Qgc2VydmVkKS4gSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGJlXG4gIDE4Olx0XHQgIGFibGUgdG8gY2hvb3NlIGZyb20gYW1vbmcgc2V2ZXJhbCBhbHRlcm5hdGl2ZSBhbGdvcml0aG1zIHdoaWNoIGNhblxuICAxOTpcdFx0ICB0aGVuIGJlIGF0dGFjaGVkIHRvIGRpZmZlcmVudCBuZXR3b3JrIGRldmljZXMuIFRoaXMgaXMgdXNlZnVsIGZvclxuICAyMDpcdFx0ICBleGFtcGxlIGlmIHNvbWUgb2YgeW91ciBuZXR3b3JrIGRldmljZXMgYXJlIHJlYWwgdGltZSBkZXZpY2VzIHRoYXRcbiAgMjE6XHRcdCAgbmVlZCBhIGNlcnRhaW4gbWluaW11bSBkYXRhIGZsb3cgcmF0ZSwgb3IgaWYgeW91IG5lZWQgdG8gbGltaXQgdGhlXG4gIDIyOlx0XHQgIG1heGltdW0gZGF0YSBmbG93IHJhdGUgZm9yIHRyYWZmaWMgd2hpY2ggbWF0Y2hlcyBzcGVjaWZpZWQgY3JpdGVyaWEuXG4gIDIzOlx0XHQgIFRoaXMgY29kZSBpcyBjb25zaWRlcmVkIHRvIGJlIGV4cGVyaW1lbnRhbC5cbiAgMjQ6XHRcbiAgMjU6XHRcdCAgVG8gYWRtaW5pc3RlciB0aGVzZSBzY2hlZHVsZXJzLCB5b3UmIzM5O2xsIG5lZWQgdGhlIHVzZXItbGV2ZWwgdXRpbGl0aWVzXG4gIDI2Olx0XHQgIGZyb20gdGhlIHBhY2thZ2UgaXByb3V0ZTImIzQzO3RjIGF0XG4gIDI3Olx0XHQgIFx1MDAzY2h0dHBzOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L3V0aWxzL25ldC9pcHJvdXRlMi9cdTAwM2UuICBUaGF0IHBhY2thZ2VcbiAgMjg6XHRcdCAgYWxzbyBjb250YWlucyBzb21lIGRvY3VtZW50YXRpb247IGZvciBtb3JlLCBjaGVjayBvdXRcbiAgMjk6XHRcdCAgXHUwMDNjaHR0cDovL3d3dy5saW51eGZvdW5kYXRpb24ub3JnL2NvbGxhYm9yYXRlL3dvcmtncm91cHMvbmV0d29ya2luZy9pcHJvdXRlMlx1MDAzZS5cbiAgMzA6XHRcbiAgMzE6XHRcdCAgVGhpcyBRdWFsaXR5IG9mIFNlcnZpY2UgKFFvUykgc3VwcG9ydCB3aWxsIGVuYWJsZSB5b3UgdG8gdXNlXG4gIDMyOlx0XHQgIERpZmZlcmVudGlhdGVkIFNlcnZpY2VzIChkaWZmc2VydikgYW5kIFJlc291cmNlIFJlc2VydmF0aW9uIFByb3RvY29sXG4gIDMzOlx0XHQgIChSU1ZQKSBvbiB5b3VyIExpbnV4IHJvdXRlciBpZiB5b3UgYWxzbyBzYXkgWSB0byB0aGUgY29ycmVzcG9uZGluZ1xuICAzNDpcdFx0ICBjbGFzc2lmaWVycyBiZWxvdy4gIERvY3VtZW50YXRpb24gYW5kIHNvZnR3YXJlIGlzIGF0XG4gIDM1Olx0XHQgIFx1MDAzY2h0dHA6Ly9kaWZmc2Vydi5zb3VyY2Vmb3JnZS5uZXQvXHUwMDNlLlxuICAzNjpcdFxuICAzNzpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSBhbmQgdG8gXCYjMzQ7L3Byb2MgZmlsZSBzeXN0ZW1cJiMzNDsgYmVsb3csIHlvdSB3aWxsIGJlIGFibGVcbiAgMzg6XHRcdCAgdG8gcmVhZCBzdGF0dXMgaW5mb3JtYXRpb24gYWJvdXQgcGFja2V0IHNjaGVkdWxlcnMgZnJvbSB0aGUgZmlsZVxuICAzOTpcdFx0ICAvcHJvYy9uZXQvcHNjaGVkLlxuICA0MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3MTAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipEaXZpbmcgaW50byB0aGUgVEFQUklPIFNjaGVkdWxlciBDb2RlKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgYSBxdWljayByZWZyZXNoZXIgb24gdGhlIGBuZXQvc2NoZWQvc2NoX3RhcHJpby5jYCBjb2RlLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHF1aWNrbHkgaWRlbnRpZnkgYWxsIHRoZSBlbnRyeSBwb2ludHMgYW5kIHRoZSBjcnVjaWFsIGZ1bmN0aW9ucyBkZWZpbmVkIHdpdGhpbiB0aGlzIGZpbGUuIFRoaXMgZ2l2ZXMgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBUYXByaW8gc2NoZWR1bGVyJiMzOTtzIGNvcmUgZnVuY3Rpb25hbGl0eSwgbGF5aW5nIHRoZSBmb3VuZGF0aW9uIGZvciBhIGRlZXBlciBkaXZlLiBOZXh0LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0JiMzOTtzIGJlZW4gZGVmaW5lZCBpbiB0aGUgZmlsZS4gRXNzZW50aWFsbHksIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGF0IHN5bWJvbHMgYXJlIGV4cG9zZWQgYnkgYHNjaF90YXByaW8uY2AgaW4gb3JkZXIgdG8gc2VlIHdoYXQgdGhlIG1vZHVsZSBpcyBkb2luZy4gV2l0aCB0aGlzIGNvbnRleHQsIEkgY2FuIGdyYXNwIHRoZSBzY2hlZHVsZXImIzM5O3MgYXJjaGl0ZWN0dXJlIGFuZCBob3cgaXRzIGVsZW1lbnRzIGludGVycmVsYXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtec3RhdGljIChpbnR8dm9pZHxzdHJ1Y3R8ZW51bSkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX3RhcHJpby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MzU9c3RhdGljIExJU1RfSEVBRCh0YXByaW9fbGlzdCk7XG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjM2OnN0YXRpYyBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSB0YXByaW9faGF2ZV9icm9rZW5fbXFwcmlvO1xubmV0L3NjaGVkL3NjaF90YXByaW8uYzozNzpzdGF0aWMgc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgdGFwcmlvX2hhdmVfd29ya2luZ19tcXByaW87XG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTM4LVxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MTE4PXN0cnVjdCBfX3RjX3RhcHJpb19xb3B0X29mZmxvYWQge1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTIyLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMjM6c3RhdGljIHZvaWQgdGFwcmlvX2NhbGN1bGF0ZV9nYXRlX2R1cmF0aW9ucyhzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMjQtXHRcdFx0XHRcdCAgICBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZClcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTE5NT1zdGF0aWMga3RpbWVfdCB0YXByaW9fZ2V0X3RpbWUoY29uc3Qgc3RydWN0IHRhcHJpb19zY2hlZCAqcSlcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE5OS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjAwOnN0YXRpYyB2b2lkIHRhcHJpb19mcmVlX3NjaGVkX2NiKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjAxLXtcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIxMi1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjEzOnN0YXRpYyB2b2lkIHN3aXRjaF9zY2hlZHVsZXMoc3RydWN0IHRhcHJpb19zY2hlZCAqcSxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjE0LVx0XHRcdCAgICAgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqKmFkbWluLFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MjM5PXN0YXRpYyBrdGltZV90IGdldF9pbnRlcnZhbF9lbmRfdGltZShzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZCxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI2MC1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjYxOnN0YXRpYyBpbnQgbGVuZ3RoX3RvX2R1cmF0aW9uKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIGludCBsZW4pXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI2Mi17XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNjUtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjI2NjpzdGF0aWMgaW50IGR1cmF0aW9uX3RvX2xlbmd0aChzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCB1NjQgZHVyYXRpb24pXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI2Ny17XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNzQtICovXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjI3NTpzdGF0aWMgdm9pZCB0YXByaW9fdXBkYXRlX3F1ZXVlX21heF9zZHUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjc2LVx0XHRcdFx0XHRzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZCxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTMyNi0gKi9cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MzI3OnN0YXRpYyBzdHJ1Y3Qgc2NoZWRfZW50cnkgKmZpbmRfZW50cnlfdG9fdHJhbnNtaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMzI4LVx0XHRcdFx0XHRcdCAgc3RydWN0IFFkaXNjICpzY2gsXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYz01NDQ9c3RhdGljIGJvb2wgdGFwcmlvX3NrYl9leGNlZWRzX3F1ZXVlX21heF9zZHUoc3RydWN0IFFkaXNjICpzY2gsXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy01NjQtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjU2NTpzdGF0aWMgaW50IHRhcHJpb19lbnF1ZXVlX29uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNTY2LVx0XHRcdCAgICAgIHN0cnVjdCBRZGlzYyAqY2hpbGQsIHN0cnVjdCBza19idWZmICoqdG9fZnJlZSlcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTU4NS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6NTg2OnN0YXRpYyBpbnQgdGFwcmlvX2VucXVldWVfc2VnbWVudGVkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy01ODctXHRcdFx0XHQgICAgc3RydWN0IFFkaXNjICpjaGlsZCxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTYzMC0gKi9cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6NjMxOnN0YXRpYyBpbnQgdGFwcmlvX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTYzMi1cdFx0XHQgIHN0cnVjdCBza19idWZmICoqdG9fZnJlZSlcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTY1OS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6NjYwOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdGFwcmlvX3BlZWsoc3RydWN0IFFkaXNjICpzY2gpXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTY2MS17XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy02NjUtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjY2NjpzdGF0aWMgdm9pZCB0YXByaW9fc2V0X2J1ZGdldHMoc3RydWN0IHRhcHJpb19zY2hlZCAqcSxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNjY3LVx0XHRcdCAgICAgICBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZCxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTY4Ni0vKiBXaGVuIGFuIHNrYiBpcyBzZW50LCBpdCBjb25zdW1lcyBmcm9tIHRoZSBidWRnZXQgb2YgYWxsIHRyYWZmaWMgY2xhc3NlcyAqL1xubmV0L3NjaGVkL3NjaF90YXByaW8uYzo2ODc6c3RhdGljIGludCB0YXByaW9fdXBkYXRlX2J1ZGdldHMoc3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeSwgc2l6ZV90IGxlbixcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNjg4LVx0XHRcdFx0IGludCB0Y19jb25zdW1lZCwgaW50IG51bV90Yylcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTcwOS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6NzEwOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdGFwcmlvX2RlcXVldWVfZnJvbV90eHEoc3RydWN0IFFkaXNjICpzY2gsIGludCB0eHEsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTcxMS1cdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnksXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy03NjYtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjc2NzpzdGF0aWMgdm9pZCB0YXByaW9fbmV4dF90Y190eHEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHRjLCBpbnQgKnR4cSlcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNzY4LXtcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTc4MC0gKi9cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6NzgxOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdGFwcmlvX2RlcXVldWVfdGNfcHJpb3JpdHkoc3RydWN0IFFkaXNjICpzY2gsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTc4Mi1cdFx0XHRcdFx0XHQgIHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnksXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy04MTYtICovXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjgxNzpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnRhcHJpb19kZXF1ZXVlX3R4cV9wcmlvcml0eShzdHJ1Y3QgUWRpc2MgKnNjaCxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtODE4LVx0XHRcdFx0XHRcdCAgIHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnksXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy04MzYtICovXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjgzNzpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnRhcHJpb19kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy04Mzgte1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9ODkwPXN0YXRpYyBib29sIHNob3VsZF9jaGFuZ2Vfc2NoZWR1bGVzKGNvbnN0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKmFkbWluLFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtOTIzLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzo5MjQ6c3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGFkdmFuY2Vfc2NoZWQoc3RydWN0IGhydGltZXIgKnRpbWVyKVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy05MjUte1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MTA1Mz1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgdGFwcmlvX3BvbGljeVtUQ0FfVEFQUklPX0FUVFJfTUFYICYjNDM7IDFdID0ge1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTA2OS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTA3MDpzdGF0aWMgaW50IGZpbGxfc2NoZWRfZW50cnkoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMDcxLVx0XHRcdCAgICBzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5LFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTEwMS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTEwMjpzdGF0aWMgaW50IHBhcnNlX3NjaGVkX2VudHJ5KHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKm4sXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTExMDMtXHRcdFx0ICAgICBzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5LCBpbnQgaW5kZXgsXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMTIwLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMTIxOnN0YXRpYyBpbnQgcGFyc2Vfc2NoZWRfbGlzdChzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICpsaXN0LFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMTIyLVx0XHRcdCAgICBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZCxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTExNjAtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjExNjE6c3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMTYyLVx0XHRcdFx0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKm5ldyxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEyMTEtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjEyMTI6c3RhdGljIGludCB0YXByaW9fcGFyc2VfbXFwcmlvX29wdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMjEzLVx0XHRcdFx0ICAgc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0LFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTIzOS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTI0MDpzdGF0aWMgaW50IHRhcHJpb19nZXRfc3RhcnRfdGltZShzdHJ1Y3QgUWRpc2MgKnNjaCxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTI0MS1cdFx0XHRcdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZCxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEyNzMtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjEyNzQ6c3RhdGljIHZvaWQgc2V0dXBfZmlyc3RfZW5kX3RpbWUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTI3NS1cdFx0XHRcdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZCwga3RpbWVfdCBiYXNlKVxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTMwMy1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTMwNDpzdGF0aWMgdm9pZCB0YXByaW9fc3RhcnRfc2NoZWQoc3RydWN0IFFkaXNjICpzY2gsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEzMDUtXHRcdFx0ICAgICAgIGt0aW1lX3Qgc3RhcnQsIHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKm5ldylcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEzMjUtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjEzMjY6c3RhdGljIHZvaWQgdGFwcmlvX3NldF9waWNvc19wZXJfYnl0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMzI3LVx0XHRcdFx0ICAgICAgc3RydWN0IHRhcHJpb19zY2hlZCAqcSxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEzNTktXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjEzNjA6c3RhdGljIGludCB0YXByaW9fZGV2X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgZXZlbnQsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEzNjEtXHRcdFx0ICAgICAgIHZvaWQgKnB0cilcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEzOTYtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjEzOTc6c3RhdGljIHZvaWQgc2V0dXBfdHh0aW1lKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEzOTgtXHRcdFx0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkLCBrdGltZV90IGJhc2UpXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNDA4LVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxNDA5OnN0YXRpYyBzdHJ1Y3QgdGNfdGFwcmlvX3FvcHRfb2ZmbG9hZCAqdGFwcmlvX29mZmxvYWRfYWxsb2MoaW50IG51bV9lbnRyaWVzKVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNDEwLXtcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTE0NDg9RVhQT1JUX1NZTUJPTF9HUEwodGFwcmlvX29mZmxvYWRfZnJlZSk7XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNDYxLSAqL1xubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxNDYyOnN0YXRpYyB2b2lkIHRhcHJpb19vZmZsb2FkX2NvbmZpZ19jaGFuZ2VkKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEpXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE0NjMte1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MTQ3Mj1zdGF0aWMgdTMyIHRjX21hcF90b19xdWV1ZV9tYXNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiB0Y19tYXNrKVxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTQ5MC1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTQ5MTpzdGF0aWMgdm9pZCB0YXByaW9fc2NoZWRfdG9fb2ZmbG9hZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNDkyLVx0XHRcdFx0ICAgIHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkLFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTUxOS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTUyMDpzdGF0aWMgdm9pZCB0YXByaW9fZGV0ZWN0X2Jyb2tlbl9tcXByaW8oc3RydWN0IHRhcHJpb19zY2hlZCAqcSlcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTUyMS17XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNTM2LVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxNTM3OnN0YXRpYyB2b2lkIHRhcHJpb19jbGVhbnVwX2Jyb2tlbl9tcXByaW8oc3RydWN0IHRhcHJpb19zY2hlZCAqcSlcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTUzOC17XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNTQ3LVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxNTQ4OnN0YXRpYyBpbnQgdGFwcmlvX2VuYWJsZV9vZmZsb2FkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE1NDktXHRcdFx0XHQgc3RydWN0IHRhcHJpb19zY2hlZCAqcSxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE2MTMtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE2MTQ6c3RhdGljIGludCB0YXByaW9fZGlzYWJsZV9vZmZsb2FkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE2MTUtXHRcdFx0XHQgIHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNjU0LSAqL1xubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxNjU1OnN0YXRpYyBpbnQgdGFwcmlvX3BhcnNlX2Nsb2NraWQoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKip0Yixcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTY1Ni1cdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE3MzItXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE3MzM6c3RhdGljIGludCB0YXByaW9fcGFyc2VfdGNfZW50cnkoc3RydWN0IFFkaXNjICpzY2gsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE3MzQtXHRcdFx0XHQgc3RydWN0IG5sYXR0ciAqb3B0LFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTc3OS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTc4MDpzdGF0aWMgaW50IHRhcHJpb19wYXJzZV90Y19lbnRyaWVzKHN0cnVjdCBRZGlzYyAqc2NoLFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNzgxLVx0XHRcdFx0ICAgc3RydWN0IG5sYXR0ciAqb3B0LFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTgyOS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTgzMDpzdGF0aWMgaW50IHRhcHJpb19tcXByaW9fY21wKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE4MzEtXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKm1xcHJpbylcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE4NTMtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE4NTQ6c3RhdGljIGludCB0YXByaW9fY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE4NTUtXHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIwNDgtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIwNDk6c3RhdGljIHZvaWQgdGFwcmlvX3Jlc2V0KHN0cnVjdCBRZGlzYyAqc2NoKVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMDUwLXtcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIwNjMtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIwNjQ6c3RhdGljIHZvaWQgdGFwcmlvX2Rlc3Ryb3koc3RydWN0IFFkaXNjICpzY2gpXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIwNjUte1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjEwMi1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjEwMzpzdGF0aWMgaW50IHRhcHJpb19pbml0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIxMDQtXHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMTY3LVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyMTY4OnN0YXRpYyB2b2lkIHRhcHJpb19hdHRhY2goc3RydWN0IFFkaXNjICpzY2gpXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIxNjkte1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjIwMy1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjIwNDpzdGF0aWMgc3RydWN0IG5ldGRldl9xdWV1ZSAqdGFwcmlvX3F1ZXVlX2dldChzdHJ1Y3QgUWRpc2MgKnNjaCxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjIwNS1cdFx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGNsKVxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjIxNS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjIxNjpzdGF0aWMgaW50IHRhcHJpb19ncmFmdChzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBjbCxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjIxNy1cdFx0XHRzdHJ1Y3QgUWRpc2MgKm5ldywgc3RydWN0IFFkaXNjICoqb2xkLFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjI1OC1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjI1OTpzdGF0aWMgaW50IGR1bXBfZW50cnkoc3RydWN0IHNrX2J1ZmYgKm1zZyxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjI2MC1cdFx0ICAgICAgY29uc3Qgc3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeSlcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIyODgtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIyODk6c3RhdGljIGludCBkdW1wX3NjaGVkdWxlKHN0cnVjdCBza19idWZmICptc2csXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIyOTAtXHRcdFx0IGNvbnN0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnJvb3QpXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMzI0LVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyMzI1OnN0YXRpYyBpbnQgdGFwcmlvX2R1bXBfdGNfZW50cmllcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMzI2LVx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjM1Ny1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjM1ODpzdGF0aWMgaW50IHRhcHJpb19wdXRfc3RhdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1NjQgdmFsLCB1MTYgYXR0cnR5cGUpXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIzNTkte1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjM2Ni1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjM2NzpzdGF0aWMgaW50IHRhcHJpb19kdW1wX3hzdGF0cyhzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IGduZXRfZHVtcCAqZCxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjM2OC1cdFx0XHQgICAgICBzdHJ1Y3QgdGNfdGFwcmlvX3FvcHRfb2ZmbG9hZCAqb2ZmbG9hZCxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI0MTQtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjI0MTU6c3RhdGljIGludCB0YXByaW9fZHVtcF9zdGF0cyhzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IGduZXRfZHVtcCAqZClcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjQxNi17XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNDIzLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNDI0OnN0YXRpYyBpbnQgdGFwcmlvX2R1bXAoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI0MjUte1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjQ5My1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjQ5NDpzdGF0aWMgc3RydWN0IFFkaXNjICp0YXByaW9fbGVhZihzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBjbClcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjQ5NS17XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0yNTA2PXN0YXRpYyB1bnNpZ25lZCBsb25nIHRhcHJpb19maW5kKHN0cnVjdCBRZGlzYyAqc2NoLCB1MzIgY2xhc3NpZClcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1MTQtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjI1MTU6c3RhdGljIGludCB0YXByaW9fZHVtcF9jbGFzcyhzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBjbCxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjUxNi1cdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y21zZyAqdGNtKVxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjUyNi1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjUyNzpzdGF0aWMgaW50IHRhcHJpb19kdW1wX2NsYXNzX3N0YXRzKHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGNsLFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNTI4LVx0XHRcdFx0ICAgc3RydWN0IGduZXRfZHVtcCAqZClcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1NDYtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjI1NDc6c3RhdGljIHZvaWQgdGFwcmlvX3dhbGsoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBxZGlzY193YWxrZXIgKmFyZylcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjU0OC17XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNTYxLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNTYyOnN0YXRpYyBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0YXByaW9fc2VsZWN0X3F1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoLFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNTYzLVx0XHRcdFx0XHRcdHN0cnVjdCB0Y21zZyAqdGNtKVxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MjU2OD1zdGF0aWMgY29uc3Qgc3RydWN0IFFkaXNjX2NsYXNzX29wcyB0YXByaW9fY2xhc3Nfb3BzID0ge1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjU3Ny1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjU3ODpzdGF0aWMgc3RydWN0IFFkaXNjX29wcyB0YXByaW9fcWRpc2Nfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1NzktXHQuY2xfb3BzXHRcdD0gXHUwMDI2dGFwcmlvX2NsYXNzX29wcyxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTI1OTQ9TU9EVUxFX0FMSUFTX05FVF9TQ0goXCYjMzQ7dGFwcmlvXCYjMzQ7KTtcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjU5NS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjU5NjpzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHRhcHJpb19kZXZpY2Vfbm90aWZpZXIgPSB7XG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1OTctXHQubm90aWZpZXJfY2FsbCA9IHRhcHJpb19kZXZfbm90aWZpZXIsXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNTk5LVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNjAwOnN0YXRpYyBpbnQgX19pbml0IHRhcHJpb19tb2R1bGVfaW5pdCh2b2lkKVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNjAxLXtcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI2MDktXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjI2MTA6c3RhdGljIHZvaWQgX19leGl0IHRhcHJpb19tb2R1bGVfZXhpdCh2b2lkKVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNjExLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1OTMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA2NTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUYXByaW8gUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2guIEkmIzM5O20gbG9va2luZyBhdCBtb2RpZmljYXRpb25zIHRvIGBuZXQvc2NoZWQvc2NoX3RhcHJpby5jYCwgc3BlY2lmaWNhbGx5IGBhZHZhbmNlX3NjaGVkYCBhbmQgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAuIEluIGBhZHZhbmNlX3NjaGVkYCwgd2UgaGF2ZSB0aGUgaHJ0aW1lciBjYWxsYmFjayBhZHZhbmNpbmcgdGhlIFRhcHJpbyBzY2hlZHVsZS4gVGhlIGtleSBoZXJlIGlzIHRoZSBjYXRjaC11cCBsb2dpYyB3aGVuIHRoZSBzY2hlZHVsZSBsYWdzIOKAkyBga3RpbWVfc3ViYCwgdGhlIGB1bmxpa2VseWAgY2hlY2tzLCBhbmQgdGhhdCBgZG8uLi53aGlsZWAgbG9vcCBhZGp1c3RpbmcgZm9yIGRlbGF5cy4gYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAsIGNhbGN1bGF0ZXMgdGhlIG5ldyBwZXJpb2QuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtDYW4gdGhpcyBiZSBoaXQgaW4gYSB0ZXN0IGVudmlyb25tZW50PyYjMzQ7IEFic29sdXRlbHkuIFRhcHJpbyBjYW4gcnVuIG9uICphbnkqIG5ldHdvcmsgaW50ZXJmYWNlLCB3aGV0aGVyIGl0JiMzOTtzIHNvZnR3YXJlLWJhc2VkIHVzaW5nIGhydGltZXIgb3Igb24gdGhlIHVzdWFsIHRhcC92ZXRoL2R1bW15IGludGVyZmFjZXMgdmlhIGB0YyBxZGlzYyBhZGQgLi4uYC4gU28sIHdlIGNhbiBkZWZpbml0ZWx5IHJlcGxpY2F0ZSB0aGlzLgoKVGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IHRvdWNoaW5nIGNvcmUgbmV0d29yayB0cmFmZmljIGNvbnRyb2wgbG9naWMgd2l0aGluIHRoZSBrZXJuZWwuIEl04oCZcyBtb2RpZnlpbmcgdGhlIGNyaXRpY2FsIHRpbWVyIGFkdmFuY2VtZW50IGFsZ29yaXRobSBhbmQgc2NoZWR1bGUgY2FsY3VsYXRpb24gd2l0aGluIHRoZSBUYXByaW8gcWRpc2MsIHdoaWNoIGlzIGNydWNpYWwgZm9yIGRldGVybWluaXN0aWMgc2NoZWR1bGluZy4gRGVmaW5pdGVseSB3b3J0aCBhIGRlZXBlciBsb29rLgoKTm93LCBsZXQmIzM5O3MgdGFsayBmdXp6aW5nLiBZZXMsIHRoaXMgaXMgYSBjbGVhciBjYW5kaWRhdGUuIFdl4oCZcmUgZGVhbGluZyB3aXRoIGZ1bmN0aW9uYWwgbmV0d29yayBxZGlzYyBsb2dpYyB0aGF0JiMzOTtzIGRpcmVjdGx5IGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgKHJ0bmV0bGluayAvIHRjKS4gVGhhdOKAmXMgYSBncmVhdCBhdHRhY2sgc3VyZmFjZS4KCkxldOKAmXMgemVybyBpbiBvbiB0aGUga2V5IHN5bWJvbHM6IGBhZHZhbmNlX3NjaGVkYCAodGhlIGhydGltZXIgY2FsbGJhY2spLCBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCAodGhlIHNjaGVkdWxlIHBhcnNpbmcpLCBgdGFwcmlvX2NoYW5nZWAgKHRoZSBuZXRsaW5rIGVudHJ5IHBvaW50IGZvciBjb25maWd1cmF0aW9uIGNhbGxpbmcgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWApLCBgdGFwcmlvX2luaXRgLCBhbmQgYHRhcHJpb19kZXF1ZXVlYC4gVGhlc2UgYXJlIG91ciBmb2N1cyBwb2ludHMuCgpJJiMzOTttIGNoZWNraW5nIGZvciBleHBvcnRlZCBub24tc3RhdGljIHN5bWJvbHMgYW5kIG1haW4gZW50cnlwb2ludHMuIGB0YXByaW9fcWRpc2Nfb3BzYCBpcyByZWdpc3RlcmVkIGluIGB0YXByaW9fbW9kdWxlX2luaXRgLCBhbmQgd2UgaGF2ZSBgdGFwcmlvX2luaXRgLCBgdGFwcmlvX2NoYW5nZWAsIGBhZHZhbmNlX3NjaGVkYCwgYW5kIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgIGF2YWlsYWJsZS4gR3JlYXQuCgpOb3csIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcy4gYE5FVF9TQ0hfVEFQUklPYCBpcyB1bmRlciBgbWVudWNvbmZpZyBORVRfU0NIRURgLCB3aGljaCBpcyB1bmRlciBgbmV0L0tjb25maWdgLiBgTkVUX1NDSF9UQVBSSU9gIHNlbGVjdHMgYE5FVF9TQ0hfTVFQUklPX0xJQmAuICBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgaW1wYWN0IGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDQwOlx0XG4gIDQxOlx0XHQgIFRoZSBhdmFpbGFibGUgc2NoZWR1bGVycyBhcmUgbGlzdGVkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zOyB5b3VcbiAgNDI6XHRcdCAgY2FuIHNheSBZIHRvIGFzIG1hbnkgYXMgeW91IGxpa2UuIElmIHVuc3VyZSwgc2F5IE4gbm93LlxuICA0MzpcdFxuICA0NDpcdGlmIE5FVF9TQ0hFRFxuICA0NTpcdFxuICA0NjpcdGNvbW1lbnQgXCYjMzQ7UXVldWVpbmcvU2NoZWR1bGluZ1wmIzM0O1xuICA0NzpcdFxuICA0ODpcdGNvbmZpZyBORVRfU0NIX0hUQlxuICA0OTpcdFx0dHJpc3RhdGUgXCYjMzQ7SGllcmFyY2hpY2FsIFRva2VuIEJ1Y2tldCAoSFRCKVwmIzM0O1xuICA1MDpcdFx0aGVscFxuICA1MTpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgSGllcmFyY2hpY2FsIFRva2VuIEJ1Y2tldHMgKEhUQilcbiAgNTI6XHRcdCAgcGFja2V0IHNjaGVkdWxpbmcgYWxnb3JpdGhtLiBTZWVcbiAgNTM6XHRcdCAgXHUwMDNjaHR0cDovL2x1eGlrLmNkaS5jei9+ZGV2aWsvcW9zL2h0Yi9cdTAwM2UgZm9yIGNvbXBsZXRlIG1hbnVhbCBhbmRcbiAgNTQ6XHRcdCAgaW4tZGVwdGggYXJ0aWNsZXMuXG4gIDU1Olx0XG4gIDU2Olx0XHQgIEhUQiBpcyB2ZXJ5IHNpbWlsYXIgdG8gQ0JRIHJlZ2FyZGluZyBpdHMgZ29hbHMgaG93ZXZlciBpcyBoYXNcbiAgNTc6XHRcdCAgZGlmZmVyZW50IHByb3BlcnRpZXMgYW5kIGRpZmZlcmVudCBhbGdvcml0aG0uXG4gIDU4Olx0XG4gIDU5Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAgNjA6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNjaF9odGIuXG4gIDYxOlx0XG4gIDYyOlx0Y29uZmlnIE5FVF9TQ0hfSEZTQ1xuICA2MzpcdFx0dHJpc3RhdGUgXCYjMzQ7SGllcmFyY2hpY2FsIEZhaXIgU2VydmljZSBDdXJ2ZSAoSEZTQylcJiMzNDtcbiAgNjQ6XHRcdGhlbHBcbiAgNjU6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIEhpZXJhcmNoaWNhbCBGYWlyIFNlcnZpY2UgQ3VydmVcbiAgNjY6XHRcdCAgKEhGU0MpIHBhY2tldCBzY2hlZHVsaW5nIGFsZ29yaXRobS5cbiAgNjc6XHRcbiAgNjg6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuICA2OTpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2NoX2hmc2MuXG4gIDcwOlx0XG4gIDcxOlx0Y29uZmlnIE5FVF9TQ0hfUFJJT1xuICA3MjpcdFx0dHJpc3RhdGUgXCYjMzQ7TXVsdGkgQmFuZCBQcmlvcml0eSBRdWV1ZWluZyAoUFJJTylcJiMzNDtcbiAgNzM6XHRcdGhlbHBcbiAgNzQ6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYW4gbi1iYW5kIHByaW9yaXR5IHF1ZXVlIHBhY2tldFxuICA3NTpcdFx0ICBzY2hlZHVsZXIuXG4gIDc2Olx0XG4gIDc3Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAgNzg6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNjaF9wcmlvLlxuICA3OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzM0OQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipLY29uZmlnIERpdmUgZm9yIE5FVF9TQ0hFRCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gbmV0d29ya2luZyBzY2hlZHVsZXJzLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGBuZXQvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgc3RhbmRhcmQgcGxhY2UgaW4gdGhlIExpbnV4IGtlcm5lbCBzb3VyY2UgZm9yIG5ldHdvcmstcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEl0JiMzOTtzIHRoZSBjZW50cmFsIGh1YiBmb3IgbW9zdCBvZiB0aGUgbmV0d29yayBmZWF0dXJlIGtub2JzLiBJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhhdCBmaWxlIGxvb2tpbmcgZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gJiMzNDtORVRfU0NIRUQmIzM0Oy4gSXQgc2hvdWxkIGJlIGRlZmluZWQgdGhlcmUsIGFuZCBmcm9tIHRoZXJlIEkgY2FuIGZpbmQgaXRzIGRlcGVuZGVuY2llcywgYW5kIGl0JiMzOTtzIGRlZmF1bHQgYmVoYXZpb3IuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gdHVybiB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c291cmNlLipuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz0yNjk9c291cmNlIFwmIzM0O25ldC9tYWM4MDIxNTQvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWc6MjcwOnNvdXJjZSBcJiMzNDtuZXQvc2NoZWQvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWctMjcxLXNvdXJjZSBcJiMzNDtuZXQvZGNiL0tjb25maWdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2MTMKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBCdWlsZCBQcm9jZXNzIGZvciBgc2NoX3RhcHJpby5jYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYHNjaF90YXByaW8uY2AgdHJhZmZpYyBjb250cm9sIHNjaGVkdWxlciBtb2R1bGUgaXMgYmVpbmcgY29tcGlsZWQuIFRvIGRvIHRoYXQsIHRoZSBtb3N0IGRpcmVjdCBhcHByb2FjaCBpcyB0byBleGFtaW5lIHRoZSBgbmV0L3NjaGVkL01ha2VmaWxlYC4gVGhpcyBpcyB3aGVyZSB0aGUgYnVpbGQgc3lzdGVtIGNvbmZpZ3VyYXRpb24gZm9yIHRoZXNlIG5ldHdvcmsgc2NoZWR1bGluZyBjb21wb25lbnRzIHJlc2lkZXMsIGFuZCBpdCBzaG91bGQgcmV2ZWFsIHRoZSByZWxldmFudCBjb21waWxhdGlvbiBmbGFncywgZGVwZW5kZW5jaWVzLCBhbmQgdWx0aW1hdGVseSwgaG93IGBzY2hfdGFwcmlvLmNgIGdldHMgdHJhbnNmb3JtZWQgaW50byBvYmplY3QgY29kZSBhbmQgbGlua2VkIGludG8gdGhlIGtlcm5lbCBtb2R1bGUuIFRoaXMgaXMgdGhlIHBsYWNlIHRvIHN0YXJ0IGRyaWxsaW5nIGRvd24gaW50byB0aGUgZGV0YWlscyBvZiB0aGUgYnVpbGQgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2NoX3RhcHJpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZz0xNzI9Y29uZmlnIE5FVF9TQ0hfVEFQUklPXG4tLVxubmV0L3NjaGVkL0tjb25maWctMTc4LVxubmV0L3NjaGVkL0tjb25maWc6MTc5Olx0ICBTZWUgdGhlIHRvcCBvZiBcdTAwM2NmaWxlOm5ldC9zY2hlZC9zY2hfdGFwcmlvLmNcdTAwM2UgZm9yIG1vcmUgZGV0YWlscy5cbm5ldC9zY2hlZC9LY29uZmlnLTE4MC1cbm5ldC9zY2hlZC9LY29uZmlnLTE4MS1cdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxubmV0L3NjaGVkL0tjb25maWc6MTgyOlx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2NoX3RhcHJpby5cbm5ldC9zY2hlZC9LY29uZmlnLTE4My1cbi0tXG5uZXQvc2NoZWQvTWFrZWZpbGU9NjM9b2JqLSQoQ09ORklHX05FVF9TQ0hfRVRGKVx0JiM0Mzs9IHNjaF9ldGYub1xubmV0L3NjaGVkL01ha2VmaWxlOjY0Om9iai0kKENPTkZJR19ORVRfU0NIX1RBUFJJTylcdCYjNDM7PSBzY2hfdGFwcmlvLm9cbm5ldC9zY2hlZC9NYWtlZmlsZS02NS1vYmotJChDT05GSUdfTkVUX1NDSF9CUEYpXHQmIzQzOz0gYnBmX3FkaXNjLm9cbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTItXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjM6LyogbmV0L3NjaGVkL3NjaF90YXByaW8uY1x0IFRpbWUgQXdhcmUgUHJpb3JpdHkgU2NoZWR1bGVyXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTQtICpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxMTkKCQkJCQkJCW91dHB1dDogMTU2CgkJCQkJCQl0aG91Z2h0czogMTUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBzb21lIG5ldyBjb25maWd1cmF0aW9ucyB0byBjb25zaWRlcjogYE5FVF9TQ0hFRGAgYW5kIGBORVRfU0NIX1RBUFJJT2AuIE15IHByaW1hcnkgZm9jdXMsIGJhc2VkIG9uIHRoZXNlIGNvbmZpZ3VyYXRpb25zLCB3aWxsIGJlIG9uIHRoZXNlIHN5bWJvbHM6IGBhZHZhbmNlX3NjaGVkYCwgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAsIGB0YXByaW9fY2hhbmdlYCwgYW5kIGB0YXByaW9faW5pdGAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIGFuZC9vciB2YXJpYWJsZXMgdGhhdCBhcmUgbGlrZWx5IHRvIHNlZSBzb21lIGNoYW5nZXMgd2l0aCB0aGVzZSBjb25maWdzIGVuYWJsZWQuCgpJJiMzOTt2ZSBhbHJlYWR5IGRldGVybWluZWQgdGhhdCB0aGlzIGFyZWEgaXMgYFdvcnRoRnV6emluZ2AuIFRoZSByZWFzb25pbmcgc3VwcG9ydGluZyB0aGF0IGlzIGNvbmNpc2UsIGFuZCBJIG5lZWQgdG8gcmVjYWxsIHRoYXQgcmVhc29uaW5nIHNvIEkgZG9uJiMzOTt0IHJlcGVhdCBteXNlbGYuCgpMZXQmIzM5O3MgcXVpY2tseSBjb25maXJtOiBJIHdhbnQgdG8gYmUgdXNpbmcgYWxsIHRoZSBgRW5hYmxlQ29uZmlnc2A6IGBORVRfU0NIRURgLCBhbmQgYE5FVF9TQ0hfVEFQUklPYC4gSSYjMzk7bSBnb2luZyB0byBsZXZlcmFnZSBgRm9jdXNTeW1ib2xzYDogYGFkdmFuY2Vfc2NoZWRgLCBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCwgYHRhcHJpb19jaGFuZ2VgLCBhbmQgYHRhcHJpb19pbml0YC4gQW5kIHRoZW4sIEkgbmVlZCB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIERvbmUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfU0NIRUQmIzM0OywKICAgICYjMzQ7TkVUX1NDSF9UQVBSSU8mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthZHZhbmNlX3NjaGVkJiMzNDssCiAgICAmIzM0O3BhcnNlX3RhcHJpb19zY2hlZHVsZSYjMzQ7LAogICAgJiMzNDt0YXByaW9fY2hhbmdlJiMzNDssCiAgICAmIzM0O3RhcHJpb19pbml0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzY2hlZHVsZSBwYXJzaW5nIGFuZCBocnRpbWVyIGFkdmFuY2UgYWxnb3JpdGhtIGluIHRoZSBUQVBSSU8gKFRpbWUtQXdhcmUgUHJpb3JpdHkpIHBhY2tldCBzY2hlZHVsZXIgKHNjaF90YXByaW8pLiBTcGVjaWZpY2FsbHksIGl0IGZpeGVzIGN5Y2xlIGNhdGNoLXVwIGxvZ2ljIHdoZW4gdGhlIHRpbWVyIGlzIGRlbGF5ZWQgb3IgdGhlIGNsb2NrIGlzIHN0ZXBwZWQgYnkgY2FsY3VsYXRpbmcgcGVyaW9kcyBhbmQgbGVhcGluZyBmb3J3YXJkLCBhbmQgYm91bmRzIHRoZSBzY2hlZHVsZSBjYXRjaC11cCBsb29wLiBUaGlzIG1vZGlmaWVzIGNvcmUgdHJhZmZpYyBjb250cm9sIHNjaGVkdWxpbmcgbG9naWMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIGNvbmZpZ3VyYXRpb24gYW5kIG5ldHdvcmsgcGFja2V0IHRyYW5zbWlzc2lvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1NDSEVEJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfVEFQUklPJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWR2YW5jZV9zY2hlZCYjMzQ7LAogICAgJiMzNDtwYXJzZV90YXByaW9fc2NoZWR1bGUmIzM0OywKICAgICYjMzQ7dGFwcmlvX2NoYW5nZSYjMzQ7LAogICAgJiMzNDt0YXByaW9faW5pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgc2NoZWR1bGUgcGFyc2luZyBhbmQgaHJ0aW1lciBhZHZhbmNlIGFsZ29yaXRobSBpbiB0aGUgVEFQUklPIChUaW1lLUF3YXJlIFByaW9yaXR5KSBwYWNrZXQgc2NoZWR1bGVyIChzY2hfdGFwcmlvKS4gU3BlY2lmaWNhbGx5LCBpdCBmaXhlcyBjeWNsZSBjYXRjaC11cCBsb2dpYyB3aGVuIHRoZSB0aW1lciBpcyBkZWxheWVkIG9yIHRoZSBjbG9jayBpcyBzdGVwcGVkIGJ5IGNhbGN1bGF0aW5nIHBlcmlvZHMgYW5kIGxlYXBpbmcgZm9yd2FyZCwgYW5kIGJvdW5kcyB0aGUgc2NoZWR1bGUgY2F0Y2gtdXAgbG9vcC4gVGhpcyBtb2RpZmllcyBjb3JlIHRyYWZmaWMgY29udHJvbCBzY2hlZHVsaW5nIGxvZ2ljIHJlYWNoYWJsZSB2aWEgbmV0bGluayBjb25maWd1cmF0aW9uIGFuZCBuZXR3b3JrIHBhY2tldCB0cmFuc21pc3Npb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6MDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHRoZSBzY2hlZHVsZSBhZHZhbmNlbWVudCBhbmQgY3ljbGUgcmVjYWxjdWxhdGlvbiBsb2dpYyBpbiB0aGUgdGFwcmlvIHFkaXNjIChzY2hfdGFwcmlvLmMpIHRvIGhhbmRsZSBkZWxheWVkIHRpbWVycyBhbmQgY2xvY2sgc3RlcHBpbmcgYnkgYm91bmRpbmcgY2F0Y2gtdXAgaXRlcmF0aW9ucyBhbmQgaW50cm9kdWNpbmcgYW4gaW50ZXJuYWwgYHBlcmlvZGAgZmllbGQgaW4gYHN0cnVjdCBzY2hlZF9nYXRlX2xpc3RgLlxuXG4tIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IC8gSW5mby1sZWFrIEFuYWx5c2lzOlxuICAxLiBUaGUgbmV3IGBwZXJpb2RgIGZpZWxkIGluIGBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0YCBpcyBjb21wdXRlZCBkdXJpbmcgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgYW5kIHN0b3JlZCBpbiBtZW1vcnkgYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmpgLiBJdCBpcyBub3QgZXhwb3J0ZWQgb3IgZHVtcGVkIHRvIHVzZXJzcGFjZSBpbiBgZHVtcF9zY2hlZHVsZWAuXG4gIDIuIEFsbCBsb2NhbCB2YXJpYWJsZXMgaW50cm9kdWNlZCBpbiBgYWR2YW5jZV9zY2hlZGAgKGBub3dgLCBgZW5kX3RpbWVgLCBgbmV4dF9zdGFydGAsIGBidWRnZXRgLCBgYmVoaW5kYCkgYW5kIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgIChgY3ljbGVgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgcmVhZGluZyBvciBicmFuY2hpbmcgb24gdGhlbS5cbiAgMy4gTm8gYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMsIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCByZWFkcyBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2Ugb3Iga2VybmVsIGNvbnRyb2wgZmxvdy5cblxuLSBLQVNBTiB2cyBLTVNBTiBBcHBsaWNhYmlsaXR5OlxuICBBbnkgY29uY3VycmVuY3ksIGxpc3QgdHJhdmVyc2FsLCBvciBib3VuZHMgaXNzdWVzIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBsb2NrZGVwLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIG9yIGluZm8tbGVhayByaXNrcyByZXF1aXJpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBydW4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQwNDRiOGJkMDQyNzhlMGM2ODI0MTUwNmQzNTk1MDcxMDUzM2RiYjYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxIDIzOjA2OjM1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF90YXByaW8uYyBiL25ldC9zY2hlZC9zY2hfdGFwcmlvLmMKaW5kZXggMzlhYzViOTdhYTNhZi4uOTAxZGZkMjQ4NGUxMCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF90YXByaW8uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvc2NoX3RhcHJpby5jCkBAIC04Myw2ICYjNDM7ODMsMTAgQEAgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCB7CiAJczY0IGN5Y2xlX3RpbWU7CiAJczY0IGN5Y2xlX3RpbWVfZXh0ZW5zaW9uOwogCXM2NCBiYXNlX3RpbWU7CiYjNDM7CS8qIG1pbihjeWNsZV90aW1lLCBzdW0gb2YgaW50ZXJ2YWxzKTogdGhlIHNvZnR3YXJlIHNjaGVkdWxlIHJlc3RhcnRzCiYjNDM7CSAqIHRoZSBsaXN0IGFmdGVyIHRoZSBsYXN0IGVudHJ5IGV2ZW4gd2hlbiBjeWNsZV90aW1lIGlzIG5vdCB1cCB5ZXQuCiYjNDM7CSAqLwomIzQzOwlzNjQgcGVyaW9kOwogfTsKIAogc3RydWN0IHRhcHJpb19zY2hlZCB7CkBAIC04NzEsMTIgJiM0Mzs4NzUsMTMgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp0YXByaW9fZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaCkKIH0KIAogc3RhdGljIGJvb2wgc2hvdWxkX3Jlc3RhcnRfY3ljbGUoY29uc3Qgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqb3BlciwKLQkJCQkgY29uc3Qgc3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeSkKJiM0MzsJCQkJIGNvbnN0IHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnksCiYjNDM7CQkJCSBrdGltZV90IGVuZF90aW1lKQogewogCWlmIChsaXN0X2lzX2xhc3QoJmFtcDtlbnRyeS0mZ3Q7bGlzdCwgJmFtcDtvcGVyLSZndDtlbnRyaWVzKSkKIAkJcmV0dXJuIHRydWU7CiAKLQlpZiAoa3RpbWVfY29tcGFyZShlbnRyeS0mZ3Q7ZW5kX3RpbWUsIG9wZXItJmd0O2N5Y2xlX2VuZF90aW1lKSA9PSAwKQomIzQzOwlpZiAoa3RpbWVfY29tcGFyZShlbmRfdGltZSwgb3Blci0mZ3Q7Y3ljbGVfZW5kX3RpbWUpID09IDApCiAJCXJldHVybiB0cnVlOwogCiAJcmV0dXJuIGZhbHNlOwpAQCAtOTI1LDggJiM0Mzs5MzAsOSBAQCBzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgYWR2YW5jZV9zY2hlZChzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpCiAJaW50IG51bV90YyA9IG5ldGRldl9nZXRfbnVtX3RjKGRldik7CiAJc3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeSwgKm5leHQ7CiAJc3RydWN0IFFkaXNjICpzY2ggPSBxLSZndDtyb290OwotCWt0aW1lX3QgZW5kX3RpbWU7Ci0JaW50IHRjOwomIzQzOwlrdGltZV90IGVuZF90aW1lLCBuZXh0X3N0YXJ0LCBub3c7CiYjNDM7CWludCBidWRnZXQsIHRjOwomIzQzOwlzNjQgYmVoaW5kOwogCiAJc3Bpbl9sb2NrKCZhbXA7cS0mZ3Q7Y3VycmVudF9lbnRyeV9sb2NrKTsKIAllbnRyeSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocS0mZ3Q7Y3VycmVudF9lbnRyeSwKQEAgLTk1MiwyMyAmIzQzOzk1OCw0OSBAQCBzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgYWR2YW5jZV9zY2hlZChzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpCiAJCWdvdG8gZmlyc3RfcnVuOwogCX0KIAotCWlmIChzaG91bGRfcmVzdGFydF9jeWNsZShvcGVyLCBlbnRyeSkpIHsKLQkJbmV4dCA9IGxpc3RfZmlyc3RfZW50cnkoJmFtcDtvcGVyLSZndDtlbnRyaWVzLCBzdHJ1Y3Qgc2NoZWRfZW50cnksCi0JCQkJCWxpc3QpOwotCQlvcGVyLSZndDtjeWNsZV9lbmRfdGltZSA9IGt0aW1lX2FkZF9ucyhvcGVyLSZndDtjeWNsZV9lbmRfdGltZSwKLQkJCQkJCSAgICBvcGVyLSZndDtjeWNsZV90aW1lKTsKLQl9IGVsc2UgewotCQluZXh0ID0gbGlzdF9uZXh0X2VudHJ5KGVudHJ5LCBsaXN0KTsKJiM0MzsJbm93ID0gaHJ0aW1lcl9jYl9nZXRfdGltZSh0aW1lcik7CiYjNDM7CWVuZF90aW1lID0gZW50cnktJmd0O2VuZF90aW1lOwomIzQzOwliZWhpbmQgPSBrdGltZV9zdWIobm93LCBlbmRfdGltZSk7CiYjNDM7CiYjNDM7CS8qIEJlaGluZCwgZS5nLiBkZWxheWVkIHRpbWVyIG9yIHN0ZXBwZWQgY2xvY2s6IHNraXAgd2hvbGUgcGVyaW9kcwomIzQzOwkgKiBhcml0aG1ldGljYWxseSBhbmQgd2FsayBhdCBtb3N0IG9uZSBtb3JlIHRvIHRoZSBlbnRyeSBjb3ZlcmluZwomIzQzOwkgKiBub3csIGluc3RlYWQgb2YgcmVwbGF5aW5nIHRoZSBiYWNrbG9nIG9uZSBleHBpcnkgYXQgYSB0aW1lLiBUaGUKJiM0MzsJICogY2FwIGJvdW5kcyB0aGUgd2FsazsgYSBsZWZ0b3ZlciBpcyBwaWNrZWQgdXAgYnkgdGhlIG5leHQgZXhwaXJ5LgomIzQzOwkgKi8KJiM0MzsJaWYgKHVubGlrZWx5KGJlaGluZCAmZ3Q7PSBvcGVyLSZndDtwZXJpb2QpKSB7CiYjNDM7CQlzNjQganVtcCA9IGRpdjY0X3M2NChiZWhpbmQsIG9wZXItJmd0O3BlcmlvZCkgKiBvcGVyLSZndDtwZXJpb2Q7CiYjNDM7CiYjNDM7CQllbmRfdGltZSA9IGt0aW1lX2FkZF9ucyhlbmRfdGltZSwganVtcCk7CiYjNDM7CQlvcGVyLSZndDtjeWNsZV9lbmRfdGltZSA9IGt0aW1lX2FkZF9ucyhvcGVyLSZndDtjeWNsZV9lbmRfdGltZSwganVtcCk7CiAJfQogCi0JZW5kX3RpbWUgPSBrdGltZV9hZGRfbnMoZW50cnktJmd0O2VuZF90aW1lLCBuZXh0LSZndDtpbnRlcnZhbCk7Ci0JZW5kX3RpbWUgPSBtaW5fdChrdGltZV90LCBlbmRfdGltZSwgb3Blci0mZ3Q7Y3ljbGVfZW5kX3RpbWUpOwomIzQzOwlidWRnZXQgPSAyICogb3Blci0mZ3Q7bnVtX2VudHJpZXM7CiYjNDM7CWRvIHsKJiM0MzsJCWlmIChzaG91bGRfcmVzdGFydF9jeWNsZShvcGVyLCBlbnRyeSwgZW5kX3RpbWUpKSB7CiYjNDM7CQkJbmV4dCA9IGxpc3RfZmlyc3RfZW50cnkoJmFtcDtvcGVyLSZndDtlbnRyaWVzLAomIzQzOwkJCQkJCXN0cnVjdCBzY2hlZF9lbnRyeSwgbGlzdCk7CiYjNDM7CQkJb3Blci0mZ3Q7Y3ljbGVfZW5kX3RpbWUgPSBrdGltZV9hZGRfbnMob3Blci0mZ3Q7Y3ljbGVfZW5kX3RpbWUsCiYjNDM7CQkJCQkJCSAgICBvcGVyLSZndDtwZXJpb2QpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQluZXh0ID0gbGlzdF9uZXh0X2VudHJ5KGVudHJ5LCBsaXN0KTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCW5leHRfc3RhcnQgPSBlbmRfdGltZTsKJiM0MzsJCWVuZF90aW1lID0ga3RpbWVfYWRkX25zKG5leHRfc3RhcnQsIG5leHQtJmd0O2ludGVydmFsKTsKJiM0MzsJCWVuZF90aW1lID0gbWluX3Qoa3RpbWVfdCwgZW5kX3RpbWUsIG9wZXItJmd0O2N5Y2xlX2VuZF90aW1lKTsKJiM0MzsJCWVudHJ5ID0gbmV4dDsKJiM0MzsJfSB3aGlsZSAodW5saWtlbHkoa3RpbWVfY29tcGFyZShlbmRfdGltZSwgbm93KSAmbHQ7PSAwKSAmYW1wOyZhbXA7IGJ1ZGdldC0tKTsKIAomIzQzOwkvKiBuZXh0IGNhbiBiZSB0aGUgZW50cnkgYWxyZWFkeSBwdWJsaXNoZWQgYXMgcS0mZ3Q7Y3VycmVudF9lbnRyeSAoYQomIzQzOwkgKiBzaW5nbGUtZW50cnkgc2NoZWR1bGUsIG9yIGEgY2F0Y2gtdXAgb2Ygd2hvbGUgcGVyaW9kcyksIHNvIHRoZQomIzQzOwkgKiBjbG9zZSB0aW1lcyBhbmQgYnVkZ2V0cyBiZWxvdyBhcmUgcmV3cml0dGVuIGluIHBsYWNlIHdoaWxlCiYjNDM7CSAqIHRhcHJpb19kZXF1ZXVlX2Zyb21fdHhxKCkgbWF5IGJlIHJlYWRpbmcgdGhlbS4KJiM0MzsJICovCiAJZm9yICh0YyA9IDA7IHRjICZsdDsgbnVtX3RjOyB0YyYjNDM7JiM0MzspIHsKIAkJaWYgKG5leHQtJmd0O2dhdGVfZHVyYXRpb25bdGNdID09IG9wZXItJmd0O2N5Y2xlX3RpbWUpCiAJCQluZXh0LSZndDtnYXRlX2Nsb3NlX3RpbWVbdGNdID0gS1RJTUVfTUFYOwogCQllbHNlCi0JCQluZXh0LSZndDtnYXRlX2Nsb3NlX3RpbWVbdGNdID0ga3RpbWVfYWRkX25zKGVudHJ5LSZndDtlbmRfdGltZSwKJiM0MzsJCQluZXh0LSZndDtnYXRlX2Nsb3NlX3RpbWVbdGNdID0ga3RpbWVfYWRkX25zKG5leHRfc3RhcnQsCiAJCQkJCQkJCSBuZXh0LSZndDtnYXRlX2R1cmF0aW9uW3RjXSk7CiAJfQogCkBAIC0xMTMwLDYgJiM0MzsxMTYyLDggQEAgc3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLAogCQkJCSBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpuZXcsCiAJCQkJIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKJiM0MzsJc3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeTsKJiM0MzsJa3RpbWVfdCBjeWNsZSA9IDA7CiAJaW50IGVyciA9IDA7CiAKIAlpZiAodGJbVENBX1RBUFJJT19BVFRSX1NDSEVEX1NJTkdMRV9FTlRSWV0pIHsKQEAgLTExNTIsMTMgJiM0MzsxMTg2LDEwIEBAIHN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YiwKIAlpZiAoZXJyICZsdDsgMCkKIAkJcmV0dXJuIGVycjsKIAotCWlmICghbmV3LSZndDtjeWNsZV90aW1lKSB7Ci0JCXN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnk7Ci0JCWt0aW1lX3QgY3ljbGUgPSAwOwotCi0JCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZhbXA7bmV3LSZndDtlbnRyaWVzLCBsaXN0KQotCQkJY3ljbGUgPSBrdGltZV9hZGRfbnMoY3ljbGUsIGVudHJ5LSZndDtpbnRlcnZhbCk7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZhbXA7bmV3LSZndDtlbnRyaWVzLCBsaXN0KQomIzQzOwkJY3ljbGUgPSBrdGltZV9hZGRfbnMoY3ljbGUsIGVudHJ5LSZndDtpbnRlcnZhbCk7CiAKJiM0MzsJaWYgKCFuZXctJmd0O2N5Y2xlX3RpbWUpIHsKIAkJaWYgKGN5Y2xlICZsdDsgMCB8fCBjeWNsZSAmZ3Q7IElOVF9NQVgpIHsKIAkJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDsmIzM5O2N5Y2xlX3RpbWUmIzM5OyBpcyB0b28gYmlnJiMzNDspOwogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMTcyLDYgJiM0MzsxMjAzLDcgQEAgc3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKJiM0MzsJbmV3LSZndDtwZXJpb2QgPSBtaW4obmV3LSZndDtjeWNsZV90aW1lLCBjeWNsZSk7CiAJdGFwcmlvX2NhbGN1bGF0ZV9nYXRlX2R1cmF0aW9ucyhxLCBuZXcpOwogCiAJcmV0dXJuIDA7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzMwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVEFQUklPIFNjaGVkdWxlciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBuZXQvc2NoZWQvc2NoX3RhcHJpby5jYCwgd2hpY2ggbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgVHJhZmZpYyBDb250cm9sJiMzOTtzIFRBUFJJTyBzY2hlZHVsZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIGludG8gdGhlIGNoYW5nZXMgZGlyZWN0bHkuIEZpcnN0IHRoaW5nIEkgc2VlIGlzIHRoZSBhZGRpdGlvbiBvZiBgczY0IHBlcmlvZDtgIHRvIHRoZSBgc3RydWN0IHNjaGVkX2dhdGVfbGlzdGAuIEludGVyZXN0aW5nLCBJIHdvbmRlciB3aGF0IHRoYXQgcmVwcmVzZW50cyBpbiB0aGUgY29udGV4dCBvZiBUQVBSSU8gZ2F0ZSBzY2hlZHVsaW5nPwoKTmV4dCwgdGhleSYjMzk7dmUgbW9kaWZpZWQgYHNob3VsZF9yZXN0YXJ0X2N5Y2xlYCB0byB0YWtlIGEgYGt0aW1lX3QgZW5kX3RpbWVgLiBUaGlzIGxpa2VseSByZWxhdGVzIHRvIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyBjeWNsZSByZXN0YXJ0cyBhbmQgbWF5YmUgc29tZSB0aW1pbmcgYWRqdXN0bWVudHMgd2l0aGluIHRoZSBzY2hlZHVsZXIuIFRoZSB0aGlyZCBrZXkgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGBhZHZhbmNlX3NjaGVkYCwgd2hlcmUgdGhleSYjMzk7cmUgb3B0aW1pemluZyBhbmQgZml4aW5nIHNjaGVkdWxlIGFkdmFuY2VtZW50LiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBhZGRyZXNzZXMgc2NlbmFyaW9zIHdoZXJlIHRoZSB0aW1lciBtaWdodCBmYWxsIGJlaGluZCBkdWUgdG8gZGVsYXlzIG9yIGNsb2NrIHN0ZXBwaW5nLiBMb29rcyBsaWtlIHRoZXkmIzM5O3JlIHNraXBwaW5nIHBlcmlvZHMgdG8gY2F0Y2ggdXAgdXNpbmcgYGRpdjY0X3M2NGAgYW5kIGEgYm91bmRlZCBgYnVkZ2V0YCBsb29wLiBUaGlzIGlzIGEgY29tbW9uIHN0cmF0ZWd5LCBidXQgSSYjMzk7bGwgd2FudCB0byBjaGVjayB0aGUgZGV0YWlscy4gVGhlIGZpbmFsIGNoYW5nZSwgaW4gYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAsIGNhbGN1bGF0ZXMgYGN5Y2xlYCAodGhlIHN1bSBvZiBpbnRlcnZhbHMpIHJlZ2FyZGxlc3Mgb2YgYG5ldy0mZ3Q7Y3ljbGVfdGltZWAgYW5kIHNldHMgYG5ldy0mZ3Q7cGVyaW9kYCB0byB0aGUgbWluaW11bSBiZXR3ZWVuIGBuZXctJmd0O2N5Y2xlX3RpbWVgIGFuZCBgY3ljbGVgLiBUaGF0IHNlZW1zIGEgbGl0dGxlIHVudXN1YWwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYy4KCk5vdywgYmVmb3JlIEkgZ28gZGVlcGVyIGludG8gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEkgbmVlZCB0byBsb29rIGZvciBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIHBvdGVudGlhbCBjb3BpZXMgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIGxlYWQgdG8gaW5mb3JtYXRpb24gbGVha3MsIG9yIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLiBJJiMzOTtsbCBuZWVkIHRvIGdvIHRocm91Z2ggYHNjaF90YXByaW8uY2AgYXJvdW5kIHRoZXNlIHNwZWNpZmljIGxpbmVzIGFuZCBzZWUgZXhhY3RseSBob3cgYHNjaGVkX2dhdGVfbGlzdGAgaXMgYWxsb2NhdGVkIGFuZCB0aGVuIGhvdyBpdCBtaWdodCBiZSBwYXNzZWQgdG8gdXNlcnNwYWNlIChpZiBhdCBhbGwpLiBUaGlzIGlzIHdoZXJlIHRoZSBkZXZpbCBvZnRlbiBoaWRlcywgc28gSSBuZWVkIHRvIGNoZWNrIHRoZSBpbml0aWFsaXphdGlvbiByb3V0aW5lcyBjYXJlZnVsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NjaGVkX2dhdGVfbGlzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfdGFwcmlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF90YXByaW8uYz01Mj1zdHJ1Y3Qgc2NoZWRfZW50cnkge1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNzEtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjcyOnN0cnVjdCBzY2hlZF9nYXRlX2xpc3Qge1xubmV0L3NjaGVkL3NjaF90YXByaW8uYy03My1cdC8qIExvbmdlc3Qgbm9uLXplcm8gY29udGlndW91cyBnYXRlIGR1cmF0aW9ucyBwZXIgdHJhZmZpYyBjbGFzcyxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTkyPXN0cnVjdCB0YXByaW9fc2NoZWQge1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTA3LVx0c3RydWN0IHNjaGVkX2VudHJ5IF9fcmN1ICpjdXJyZW50X2VudHJ5O1xubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMDg6XHRzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0IF9fcmN1ICpvcGVyX3NjaGVkO1xubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMDk6XHRzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0IF9fcmN1ICphZG1pbl9zY2hlZDtcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTEwLVx0c3RydWN0IGhydGltZXIgYWR2YW5jZV90aW1lcjtcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTEyMz1zdGF0aWMgdm9pZCB0YXByaW9fY2FsY3VsYXRlX2dhdGVfZHVyYXRpb25zKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjEyNDpcdFx0XHRcdFx0ICAgIHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkKVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMjUte1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MTY4PXN0YXRpYyBib29sIHRhcHJpb19lbnRyeV9hbGxvd3NfdHgoa3RpbWVfdCBza2JfZW5kX3RpbWUsXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNzMtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE3NDpzdGF0aWMga3RpbWVfdCBzY2hlZF9iYXNlX3RpbWUoY29uc3Qgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqc2NoZWQpXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE3NS17XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0yMDA9c3RhdGljIHZvaWQgdGFwcmlvX2ZyZWVfc2NoZWRfY2Ioc3RydWN0IHJjdV9oZWFkICpoZWFkKVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMDEte1xubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyMDI6XHRzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZCA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0LCByY3UpO1xubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMDMtXHRzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5LCAqbjtcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTIxMz1zdGF0aWMgdm9pZCBzd2l0Y2hfc2NoZWR1bGVzKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIxNDpcdFx0XHQgICAgIHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKiphZG1pbixcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjE1Olx0XHRcdCAgICAgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqKm9wZXIpXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIxNi17XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMjctLyogR2V0IGhvdyBtdWNoIHRpbWUgaGFzIGJlZW4gYWxyZWFkeSBlbGFwc2VkIGluIHRoZSBjdXJyZW50IGN5Y2xlLiAqL1xubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyMjg6c3RhdGljIHMzMiBnZXRfY3ljbGVfdGltZV9lbGFwc2VkKHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkLCBrdGltZV90IHRpbWUpXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIyOS17XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMzgtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIzOTpzdGF0aWMga3RpbWVfdCBnZXRfaW50ZXJ2YWxfZW5kX3RpbWUoc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqc2NoZWQsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjI0MDpcdFx0XHRcdCAgICAgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqYWRtaW4sXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI0MS1cdFx0XHRcdCAgICAgc3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeSxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTI3NT1zdGF0aWMgdm9pZCB0YXByaW9fdXBkYXRlX3F1ZXVlX21heF9zZHUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6Mjc2Olx0XHRcdFx0XHRzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZCxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjc3LVx0XHRcdFx0XHRzdHJ1Y3QgcWRpc2Nfc2l6ZV90YWJsZSAqc3RhYilcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTMyNz1zdGF0aWMgc3RydWN0IHNjaGVkX2VudHJ5ICpmaW5kX2VudHJ5X3RvX3RyYW5zbWl0KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTMyOC1cdFx0XHRcdFx0XHQgIHN0cnVjdCBRZGlzYyAqc2NoLFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzozMjk6XHRcdFx0XHRcdFx0ICBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZCxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MzMwOlx0XHRcdFx0XHRcdCAgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqYWRtaW4sXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTMzMS1cdFx0XHRcdFx0XHQgIGt0aW1lX3QgdGltZSxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTQwND1zdGF0aWMgYm9vbCBpc192YWxpZF9pbnRlcnZhbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaClcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTQwNi1cdHN0cnVjdCB0YXByaW9fc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7XG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjQwNzpcdHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkLCAqYWRtaW47XG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTQwOC1cdGt0aW1lX3QgaW50ZXJ2YWxfc3RhcnQsIGludGVydmFsX2VuZDtcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTQ3Mj1zdGF0aWMgbG9uZyBnZXRfcGFja2V0X3R4dGltZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaClcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTQ3NS1cdHN0cnVjdCB0YXByaW9fc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7XG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjQ3NjpcdHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkLCAqYWRtaW47XG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTQ3Ny1cdGt0aW1lX3QgbWluaW11bV90aW1lLCBub3csIHR4dGltZTtcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTU0ND1zdGF0aWMgYm9vbCB0YXByaW9fc2tiX2V4Y2VlZHNfcXVldWVfbWF4X3NkdShzdHJ1Y3QgUWRpc2MgKnNjaCxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTU0OC1cdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBxZGlzY19kZXYoc2NoKTtcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6NTQ5Olx0c3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqc2NoZWQ7XG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTU1MC1cdGludCBwcmlvID0gc2tiLVx1MDAzZXByaW9yaXR5O1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9NjY2PXN0YXRpYyB2b2lkIHRhcHJpb19zZXRfYnVkZ2V0cyhzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzo2Njc6XHRcdFx0ICAgICAgIHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkLFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy02NjgtXHRcdFx0ICAgICAgIHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnkpXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYz04Mzc9c3RhdGljIHN0cnVjdCBza19idWZmICp0YXByaW9fZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTg3Ni1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6ODc3OnN0YXRpYyBib29sIHNob3VsZF9yZXN0YXJ0X2N5Y2xlKGNvbnN0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKm9wZXIsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTg3OC1cdFx0XHRcdCBjb25zdCBzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5LFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtODg5LVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzo4OTA6c3RhdGljIGJvb2wgc2hvdWxkX2NoYW5nZV9zY2hlZHVsZXMoY29uc3Qgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqYWRtaW4sXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjg5MTpcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpvcGVyLFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy04OTItXHRcdFx0XHQgICAga3RpbWVfdCBlbmRfdGltZSlcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTkyND1zdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgYWR2YW5jZV9zY2hlZChzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy05MjgtXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcWRpc2NfZGV2KHEtXHUwMDNlcm9vdCk7XG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjkyOTpcdHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKm9wZXIsICphZG1pbjtcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtOTMwLVx0aW50IG51bV90YyA9IG5ldGRldl9nZXRfbnVtX3RjKGRldik7XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xMTIxPXN0YXRpYyBpbnQgcGFyc2Vfc2NoZWRfbGlzdChzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICpsaXN0LFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMTIyOlx0XHRcdCAgICBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZCxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTEyMy1cdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MTE2MT1zdGF0aWMgaW50IHBhcnNlX3RhcHJpb19zY2hlZHVsZShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjExNjI6XHRcdFx0XHQgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqbmV3LFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMTYzLVx0XHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTEyNDA9c3RhdGljIGludCB0YXByaW9fZ2V0X3N0YXJ0X3RpbWUoc3RydWN0IFFkaXNjICpzY2gsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjEyNDE6XHRcdFx0XHQgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqc2NoZWQsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEyNDItXHRcdFx0XHQga3RpbWVfdCAqc3RhcnQpXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xMjc0PXN0YXRpYyB2b2lkIHNldHVwX2ZpcnN0X2VuZF90aW1lKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjEyNzU6XHRcdFx0XHQgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqc2NoZWQsIGt0aW1lX3QgYmFzZSlcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTI3Ni17XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xMzA0PXN0YXRpYyB2b2lkIHRhcHJpb19zdGFydF9zY2hlZChzdHJ1Y3QgUWRpc2MgKnNjaCxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTMwNTpcdFx0XHQgICAgICAga3RpbWVfdCBzdGFydCwgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqbmV3KVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMzA2LXtcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTEzNjA9c3RhdGljIGludCB0YXByaW9fZGV2X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgZXZlbnQsXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMzYzLVx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpO1xubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMzY0Olx0c3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqb3BlciwgKmFkbWluO1xubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMzY1LVx0c3RydWN0IHFkaXNjX3NpemVfdGFibGUgKnN0YWI7XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xMzk3PXN0YXRpYyB2b2lkIHNldHVwX3R4dGltZShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMzk4Olx0XHRcdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZCwga3RpbWVfdCBiYXNlKVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMzk5LXtcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTE0NjI9c3RhdGljIHZvaWQgdGFwcmlvX29mZmxvYWRfY29uZmlnX2NoYW5nZWQoc3RydWN0IHRhcHJpb19zY2hlZCAqcSlcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTQ2My17XG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE0NjQ6XHRzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpvcGVyLCAqYWRtaW47XG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE0NjUtXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xNDkxPXN0YXRpYyB2b2lkIHRhcHJpb19zY2hlZF90b19vZmZsb2FkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE0OTI6XHRcdFx0XHQgICAgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqc2NoZWQsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE0OTMtXHRcdFx0XHQgICAgc3RydWN0IHRjX3RhcHJpb19xb3B0X29mZmxvYWQgKm9mZmxvYWQsXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xNTQ4PXN0YXRpYyBpbnQgdGFwcmlvX2VuYWJsZV9vZmZsb2FkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE1NDktXHRcdFx0XHQgc3RydWN0IHRhcHJpb19zY2hlZCAqcSxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTU1MDpcdFx0XHRcdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZCxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTU1MS1cdFx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xODU0PXN0YXRpYyBpbnQgdGFwcmlvX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTg1OC1cdHN0cnVjdCBubGF0dHIgKnRiW1RDQV9UQVBSSU9fQVRUUl9NQVggJiM0MzsgMV0gPSB7IH07XG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE4NTk6XHRzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpvcGVyLCAqYWRtaW4sICpuZXdfYWRtaW47XG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE4NjAtXHRzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxID0gcWRpc2NfcHJpdihzY2gpO1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MjA2ND1zdGF0aWMgdm9pZCB0YXByaW9fZGVzdHJveShzdHJ1Y3QgUWRpc2MgKnNjaClcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIwNjctXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcWRpc2NfZGV2KHNjaCk7XG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIwNjg6XHRzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpvcGVyLCAqYWRtaW47XG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIwNjktXHR1bnNpZ25lZCBpbnQgaTtcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTIyODk9c3RhdGljIGludCBkdW1wX3NjaGVkdWxlKHN0cnVjdCBza19idWZmICptc2csXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIyOTA6XHRcdFx0IGNvbnN0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnJvb3QpXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIyOTEte1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MjMyNT1zdGF0aWMgaW50IHRhcHJpb19kdW1wX3RjX2VudHJpZXMoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjMyNi1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IHRhcHJpb19zY2hlZCAqcSxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjMyNzpcdFx0XHRcdCAgY29uc3Qgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqc2NoZWQpXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIzMjgte1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MjQyND1zdGF0aWMgaW50IHRhcHJpb19kdW1wKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjQyNy1cdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBxZGlzY19kZXYoc2NoKTtcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjQyODpcdHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKm9wZXIsICphZG1pbjtcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjQyOS1cdHN0cnVjdCB0Y19tcXByaW9fcW9wdCBvcHQgPSB7IDAgfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzkyNgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBzY2hfdGFwcmlvLmNgJiMzOTtzIENvcmUgRnVuY3Rpb25zKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgYHNjaF90YXByaW8uY2AuIE15IHByaW1hcnkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYGR1bXBfc2NoZWR1bGVgIGFuZCBgdGFwcmlvX2NoYW5nZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSB0d28gZnVuY3Rpb25zIHdvcmsgdG9nZXRoZXIsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlaXIgcm9sZXMgaW4gc2NoZWR1bGluZyBhbmQsIG1vcmUgc3BlY2lmaWNhbGx5LCBob3cgdGhleSBtYW5hZ2UgdGhlIGNoYW5nZXMgdG8gdGhhdCBzY2hlZHVsZS4gSSBuZWVkIGEgY2xlYXIgbWVudGFsIG1vZGVsIG9mIGhvdyBkYXRhIGZsb3dzIGJldHdlZW4gdGhlbSBhbmQgd2hhdCBrZXkgZGF0YSBzdHJ1Y3R1cmVzIHRoZXkgdXNlIGFuZCBtb2RpZnkuIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IGdyYXNwIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHRoYXQgZHJpdmUgc2NoZWR1bGUgbWFpbnRlbmFuY2UgaW4gVGFwcmlvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfdGFwcmlvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIyODU6XHRcdG5sYV9uZXN0X2NhbmNlbChtc2csIGl0ZW0pO1xuMjI4NjpcdFx0cmV0dXJuIC0xO1xuMjI4NzpcdH1cbjIyODg6XHRcbjIyODk6XHRzdGF0aWMgaW50IGR1bXBfc2NoZWR1bGUoc3RydWN0IHNrX2J1ZmYgKm1zZyxcbjIyOTA6XHRcdFx0XHQgY29uc3Qgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqcm9vdClcbjIyOTE6XHR7XG4yMjkyOlx0XHRzdHJ1Y3QgbmxhdHRyICplbnRyeV9saXN0O1xuMjI5MzpcdFx0c3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeTtcbjIyOTQ6XHRcbjIyOTU6XHRcdGlmIChubGFfcHV0X3M2NChtc2csIFRDQV9UQVBSSU9fQVRUUl9TQ0hFRF9CQVNFX1RJTUUsXG4yMjk2Olx0XHRcdFx0cm9vdC1cdTAwM2ViYXNlX3RpbWUsIFRDQV9UQVBSSU9fUEFEKSlcbjIyOTc6XHRcdFx0cmV0dXJuIC0xO1xuMjI5ODpcdFxuMjI5OTpcdFx0aWYgKG5sYV9wdXRfczY0KG1zZywgVENBX1RBUFJJT19BVFRSX1NDSEVEX0NZQ0xFX1RJTUUsXG4yMzAwOlx0XHRcdFx0cm9vdC1cdTAwM2VjeWNsZV90aW1lLCBUQ0FfVEFQUklPX1BBRCkpXG4yMzAxOlx0XHRcdHJldHVybiAtMTtcbjIzMDI6XHRcbjIzMDM6XHRcdGlmIChubGFfcHV0X3M2NChtc2csIFRDQV9UQVBSSU9fQVRUUl9TQ0hFRF9DWUNMRV9USU1FX0VYVEVOU0lPTixcbjIzMDQ6XHRcdFx0XHRyb290LVx1MDAzZWN5Y2xlX3RpbWVfZXh0ZW5zaW9uLCBUQ0FfVEFQUklPX1BBRCkpXG4yMzA1Olx0XHRcdHJldHVybiAtMTtcbjIzMDY6XHRcbjIzMDc6XHRcdGVudHJ5X2xpc3QgPSBubGFfbmVzdF9zdGFydF9ub2ZsYWcobXNnLFxuMjMwODpcdFx0XHRcdFx0XHQgICBUQ0FfVEFQUklPX0FUVFJfU0NIRURfRU5UUllfTElTVCk7XG4yMzA5Olx0XHRpZiAoIWVudHJ5X2xpc3QpXG4yMzEwOlx0XHRcdGdvdG8gZXJyb3JfbmVzdDtcbjIzMTE6XHRcbjIzMTI6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIFx1MDAyNnJvb3QtXHUwMDNlZW50cmllcywgbGlzdCkge1xuMjMxMzpcdFx0XHRpZiAoZHVtcF9lbnRyeShtc2csIGVudHJ5KSBcdTAwM2MgMClcbjIzMTQ6XHRcdFx0XHRnb3RvIGVycm9yX25lc3Q7XG4yMzE1Olx0XHR9XG4yMzE2Olx0XG4yMzE3Olx0XHRubGFfbmVzdF9lbmQobXNnLCBlbnRyeV9saXN0KTtcbjIzMTg6XHRcdHJldHVybiAwO1xuMjMxOTpcdFxuMjMyMDpcdGVycm9yX25lc3Q6XG4yMzIxOlx0XHRubGFfbmVzdF9jYW5jZWwobXNnLCBlbnRyeV9saXN0KTtcbjIzMjI6XHRcdHJldHVybiAtMTtcbjIzMjM6XHR9XG4yMzI0Olx0XG4yMzI1Olx0c3RhdGljIGludCB0YXByaW9fZHVtcF90Y19lbnRyaWVzKHN0cnVjdCBza19idWZmICpza2IsXG4yMzI2Olx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsXG4yMzI3Olx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkKVxuMjMyODpcdHtcbjIzMjk6XHRcdHN0cnVjdCBubGF0dHIgKm47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4MjMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgd2Fsa2luZyB0aHJvdWdoIHRoZSBsb2dpYzoKCioqSW52ZXN0aWdhdGluZyBNZW1vcnkgQWxsb2NhdGlvbiBpbiB0YXByaW8gTW9kdWxlKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byBob3cgbWVtb3J5IGlzIGJlaW5nIGhhbmRsZWQgcmVsYXRlZCB0byB0aGUgbmV3IHNjaGVkdWxlciBnYXRlIGxpc3QsIHNwZWNpZmljYWxseSBgbmV3YCBvciBgc2NoZWRfZ2F0ZV9saXN0YC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBpcyBhbGxvY2F0ZWQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHRyYWNlIHRoZSBhbGxvY2F0aW9uIHByb2Nlc3MsIHNvIEkmIzM5O2xsIHN0YXJ0IGJ5IGxvb2tpbmcgZGlyZWN0bHkgYXQgdGhlIGNvZGUgd2hlcmUgdGhlc2UgYXJlIHVzZWQgd2l0aGluIHRoZSBgc2NoX3RhcHJpby5jYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcmVhZCB0aGUgZnVuY3Rpb24gYHRhcHJpb19jaGFuZ2VgLiBBbHRlcm5hdGl2ZWx5LCBJIGNvdWxkIHVzZSBhIGZpbmQgd2l0aGluIGBzY2hfdGFwcmlvLmNgLCB3aGljaCB3b3VsZCBiZSBxdWlja2VyIGFuZCBpcyBsaWtlbHkgd2hhdCBJIHdpbGwgZG8uIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQsIGFuZCBtb3N0IGltcG9ydGFudGx5LCBob3cgdGhlIG1lbW9yeSBpcyBjbGFpbWVkLiBJdCYjMzk7cyBsaWtlbHkgZ29pbmcgdG8gaW52b2x2ZSBhIGBremFsbG9jYCBvciBzaW1pbGFyIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9uLiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtremFsbG9jLipzY2hlZF9nYXRlX2xpc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX3RhcHJpby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTEyNAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgc2NoX3RhcHJpby5jYCBBbGxvY2F0aW9ucyoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYWxsb2NhdGlvbiBzdHJhdGVnaWVzIHdpdGhpbiBgc2NoX3RhcHJpby5jYC4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgbWVtb3J5IGlzIGJlaW5nIG1hbmFnZWQgd2l0aGluIHRoaXMgc2NoZWR1bGVyLCBzcGVjaWZpY2FsbHkgaG93IGl0IGFsbG9jYXRlcyBhbmQgZGVhbGxvY2F0ZXMgcmVzb3VyY2VzLiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGtleSBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyB0aGF0IGhhbmRsZSB0aGVzZSBvcGVyYXRpb25zLiBJJiMzOTttIGdvaW5nIHRvIGJlIGxvb2tpbmcgZm9yIHBhdHRlcm5zLCBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGFuZCBhcmVhcyB3aGVyZSBtZW1vcnkgbGVha3Mgb3IgaW5lZmZpY2llbmNpZXMgbWlnaHQgZXhpc3QuIE15IGZvY3VzIHdpbGwgYmUgb24gdGhlIGltcGFjdCBvZiB0aGVzZSBhbGxvY2F0aW9ucyBvbiB0aGUgcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eSBvZiB0aGUgc3lzdGVtLiBJJiMzOTtsbCBiZSBzY3J1dGluaXppbmcgdGhlIGNvZGUgZm9yIGFueSBub24tc3RhbmRhcmQgYWxsb2NhdGlvbiBhcHByb2FjaGVzLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoaW5ncyBsaWtlIHNsYWIgYWxsb2NhdG9ycywgY3VzdG9tIG1lbW9yeSBwb29scywgb3IgcGVyaGFwcyBhbnkgdW51c3VhbCBtZW1vcnkgbWFwcGluZyB0ZWNobmlxdWVzIHVzZWQgaGVyZSwgZXNwZWNpYWxseSBnaXZlbiB0aGlzIGlzIHRoZSBzY2hlZHVsZXIuIEkmIzM5O2xsIGJlIGNvbnNpZGVyaW5nIHRoZSB0aHJlYWQtc2FmZXR5IG9mIHRoZXNlIGFsbG9jYXRvcnMgdG9vIOKAkyBhbnkgbG9ja2luZyBtZWNoYW5pc21zIHVzZWQgdG8gcHJvdGVjdCBhZ2FpbnN0IGNvbmN1cnJlbnQgYWNjZXNzIHdpbGwgYmUgb2YgaW50ZXJlc3QuIEZpbmFsbHksIEkmIzM5O2xsIGNvbXBhcmUgdGhlIGFwcHJvYWNoZXMgdXNlZCBpbiBgc2NoX3RhcHJpby5jYCB0byBvdGhlciBzY2hlZHVsZXJzIHRvIHVuZGVyc3RhbmQgaXRzIGRlc2lnbiB0cmFkZS1vZmZzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfdGFwcmlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF90YXByaW8uYz0xMTIxPXN0YXRpYyBpbnQgcGFyc2Vfc2NoZWRfbGlzdChzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICpsaXN0LFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTEzOS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTE0MDpcdFx0ZW50cnkgPSBremFsbG9jX29iaigqZW50cnkpO1xubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMTQxLVx0XHRpZiAoIWVudHJ5KSB7XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xMzk3PXN0YXRpYyB2b2lkIHNldHVwX3R4dGltZShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTQwOC1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTQwOTpzdGF0aWMgc3RydWN0IHRjX3RhcHJpb19xb3B0X29mZmxvYWQgKnRhcHJpb19vZmZsb2FkX2FsbG9jKGludCBudW1fZW50cmllcylcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTQxMC17XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNDEyLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxNDEzOlx0X19vZmZsb2FkID0ga3phbGxvY19mbGV4KCpfX29mZmxvYWQsIG9mZmxvYWQuZW50cmllcywgbnVtX2VudHJpZXMpO1xubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNDE0LVx0aWYgKCFfX29mZmxvYWQpXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xNTQ4PXN0YXRpYyBpbnQgdGFwcmlvX2VuYWJsZV9vZmZsb2FkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNTc2LVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxNTc3Olx0b2ZmbG9hZCA9IHRhcHJpb19vZmZsb2FkX2FsbG9jKHNjaGVkLVx1MDAzZW51bV9lbnRyaWVzKTtcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTU3OC1cdGlmICghb2ZmbG9hZCkge1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MTYxND1zdGF0aWMgaW50IHRhcHJpb19kaXNhYmxlX29mZmxvYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE2MjQtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE2MjU6XHRvZmZsb2FkID0gdGFwcmlvX29mZmxvYWRfYWxsb2MoMCk7XG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE2MjYtXHRpZiAoIW9mZmxvYWQpIHtcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTE4NTQ9c3RhdGljIGludCB0YXByaW9fY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xOTExLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxOTEyOlx0bmV3X2FkbWluID0ga3phbGxvY19vYmooKm5ld19hZG1pbik7XG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE5MTMtXHRpZiAoIW5ld19hZG1pbikge1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MjEwMz1zdGF0aWMgaW50IHRhcHJpb19pbml0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMTMzLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyMTM0Olx0cS1cdTAwM2VxZGlzY3MgPSBremFsbG9jX29ianMocS1cdTAwM2VxZGlzY3NbMF0sIGRldi1cdTAwM2VudW1fdHhfcXVldWVzKTtcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjEzNS1cdGlmICghcS1cdTAwM2VxZGlzY3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTkyCgkJCQkJCQlvdXRwdXQ6IDI4NwoJCQkJCQkJdGhvdWdodHM6IDczNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBObyBDb25jZXJucyBEZXRlY3RlZCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgYG5ld19hZG1pbmAgZ2V0cyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmpgLCB3aGljaCBpcyBnb29kOyBpdCBndWFyYW50ZWVzIHplcm8taW5pdGlhbGl6YXRpb24uIE5vdywgbGV0JiMzOTtzIG1ldGljdWxvdXNseSBnbyB0aHJvdWdoIHRoZSBwYXRjaCBkZXRhaWxzLgoKSSYjMzk7bSBzZWVpbmcgYSBuZXcgZmllbGQsIGBzNjQgcGVyaW9kYCwgYWRkZWQgdG8gYHN0cnVjdCBzY2hlZF9nYXRlX2xpc3RgLiBUaGlzIHJhaXNlcyBhIGZsYWcgYXV0b21hdGljYWxseSwgYnV0IGFmdGVyIGNoZWNraW5nIGhvdyBpdCYjMzk7cyB1c2VkLCBJJiMzOTttIGNvbmZpZGVudC4gVGhlIGBzaG91bGRfcmVzdGFydF9jeWNsZWAgZnVuY3Rpb24gbm93IGFjY2VwdHMgYW4gYGVuZF90aW1lYCBhcmd1bWVudCwgYW5kIGl0IGNoZWNrcyBmb3IgZXF1YWxpdHkgd2l0aCBgb3Blci0mZ3Q7Y3ljbGVfZW5kX3RpbWVgLiBGYWlyIGVub3VnaC4KClBlZWtpbmcgYXQgYGFkdmFuY2Vfc2NoZWRgLCBpdCBkZWNsYXJlcyBga3RpbWVfdCBlbmRfdGltZSwgbmV4dF9zdGFydCwgbm93OyBpbnQgYnVkZ2V0LCB0YzsgczY0IGJlaGluZDtgLCBhbGwgYXJlIGluaXRpYWxpemVkLiBgbm93YCBpcyBzZXQgdXNpbmcgYGhydGltZXJfY2JfZ2V0X3RpbWVgLCBhbmQgYGVuZF90aW1lYCBnZXRzIGFzc2lnbmVkLiBgYmVoaW5kYCBpcyBjYWxjdWxhdGVkIGFzIHRoZSBkaWZmZXJlbmNlLiBUaGUgYGJ1ZGdldGAgaXMgaW5pdGlhbGl6ZWQuIEluc2lkZSB0aGUgbG9vcCwgYG5leHRfc3RhcnRgIGlzIGFzc2lnbmVkIGJlZm9yZSBpdHMgdXNlIGluIGBrdGltZV9hZGRfbnNgIGNhbGxzLiBUaGUgbG9vcCBjb3JyZWN0bHkgY2FsbHMgYHNob3VsZF9yZXN0YXJ0X2N5Y2xlYCB3aXRoIHRoZSBjb3JyZWN0IGBlbmRfdGltZWAuIFRoZSBgZm9yYCBsb29wLCBpbXBvcnRhbnRseSwgcGFzc2VzIGBuZXh0X3N0YXJ0YCBpbnRvIGBrdGltZV9hZGRfbnNgLiBJdCYjMzk7cyBjbGVhciB0aGF0IGBuZXh0X3N0YXJ0YCBpcyBpbml0aWFsaXplZCBvbiBldmVyeSBsb29wIGl0ZXJhdGlvbiwgZXZlbiB3aXRoIHRoZSBgZG8uLi53aGlsZWAgc3RydWN0dXJlLgoKVGhlbiwgbG9va2luZyBhdCBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCwgYGN5Y2xlYCBpcyBpbml0aWFsaXplZCB0byB6ZXJvLiBUaGUgbG9vcCBhZGRzIHVwIGBlbnRyeS0mZ3Q7aW50ZXJ2YWxgLiBgbmV3LSZndDtwZXJpb2RgIGlzIHNldCBhcyB0aGUgbWluaW11bSBiZXR3ZWVuIGBuZXctJmd0O2N5Y2xlX3RpbWVgIGFuZCBgY3ljbGVgLiBTZWVtcyBmdWxseSBpbml0aWFsaXplZC4KCk5vdywgbGV0JiMzOTtzIGdldCBzZXJpb3VzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZXMsIGluZm9ybWF0aW9uIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIHBhZGRpbmcgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UuIEFmdGVyIGEgdGhvcm91Z2ggcmV2aWV3LCBpdCYjMzk7cyBjbGVhcjogbm8gc3RydWN0dXJlcyB0aGF0IGdldCBjb3BpZWQgdG8gdXNlciBzcGFjZSBoYXZlIGJlZW4gYWRkZWQgb3IgbW9kaWZpZWQgd2l0aCBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkuIGBwZXJpb2RgIGlzIGludGVybmFsIHRvIGBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0YCwgYW5kIGl0JiMzOTtzIGFsbG9jYXRlZCB3aXRoIGt6YWxsb2MgYW5kIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgd2l0aGluIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgLiBUaGUgbG9naWMgZG9lc24mIzM5O3QgZGVwZW5kIG9uIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gTm8gc3RhY2sgdmFyaWFibGVzIGFyZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuIFRoZXJlIGFyZW4mIzM5O3QgYW55IGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGJ1ZmZlciBzbGljZXMuCgpUaGVyZWZvcmUsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhpcyBjaGFuZ2UgKmRvZXMgbm90KiBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gU3RhbmRhcmQgc2FuaXRpemVycyBsaWtlIEtBU0FOIGFyZSBzdWZmaWNpZW50IGZvciBjaGVja2luZyBib3VuZHMgYW5kIGxpZmVjeWNsZSwgYW5kIHdlIGRvICpub3QqIG5lZWQgYSBLTVNBTiBzZXNzaW9uIGZvciB0aGlzLgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayBhbGwgdGhlIGNyaXRlcmlhLiBXZSYjMzk7cmUgYXNzZXNzaW5nIHdoZXRoZXIgS01TQU4gaXMgbmVlZGVkLCBhbmQgbXkgY29uY2x1c2lvbiBpcyAmIzM5O2ZhbHNlJiMzOTsuIFRoZSByZWFzb25pbmc6IHRoZSBwYXRjaCBwcmltYXJpbHkgbW9kaWZpZXMgdGltaW5nIGFuZCBzY2hlZHVsaW5nIGxvZ2ljIHdpdGhpbiBgc2NoX3RhcHJpb2AsIHNwZWNpZmljYWxseSBgYWR2YW5jZV9zY2hlZGAsIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgLCBhbmQgYHNob3VsZF9yZXN0YXJ0X2N5Y2xlYCwgYWRkaW5nIHRoZSBgcGVyaW9kYCBmaWVsZC4gQWxsIHN0cnVjdHVyZXMgYXJlIGt6YWxsb2MmIzM5O2QgYW5kIGluaXRpYWxpemVkLiBUaGVyZSBhcmUgbm8gZXhwb3NlZCB1c2VyLXNwYWNlIGNvcHkgcGF0aHMgb3IgdW5pbml0aWFsaXplZCByZWFkcy4gS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgY292ZXIgYW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBvciBvdXQtb2YtYm91bmRzIGlzc3Vlcywgc28gS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLgoKSSYjMzk7bSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIFdlJiMzOTtyZSBnb29kIHRvIGdvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHRoZSBzY2hlZHVsZSBhZHZhbmNlbWVudCBhbmQgY3ljbGUgcmVjYWxjdWxhdGlvbiBsb2dpYyBpbiB0aGUgdGFwcmlvIHFkaXNjIChzY2hfdGFwcmlvLmMpIHRvIGhhbmRsZSBkZWxheWVkIHRpbWVycyBhbmQgY2xvY2sgc3RlcHBpbmcgYnkgYm91bmRpbmcgY2F0Y2gtdXAgaXRlcmF0aW9ucyBhbmQgaW50cm9kdWNpbmcgYW4gaW50ZXJuYWwgYHBlcmlvZGAgZmllbGQgaW4gYHN0cnVjdCBzY2hlZF9nYXRlX2xpc3RgLlxuXG4tIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IC8gSW5mby1sZWFrIEFuYWx5c2lzOlxuICAxLiBUaGUgbmV3IGBwZXJpb2RgIGZpZWxkIGluIGBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0YCBpcyBjb21wdXRlZCBkdXJpbmcgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgYW5kIHN0b3JlZCBpbiBtZW1vcnkgYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmpgLiBJdCBpcyBub3QgZXhwb3J0ZWQgb3IgZHVtcGVkIHRvIHVzZXJzcGFjZSBpbiBgZHVtcF9zY2hlZHVsZWAuXG4gIDIuIEFsbCBsb2NhbCB2YXJpYWJsZXMgaW50cm9kdWNlZCBpbiBgYWR2YW5jZV9zY2hlZGAgKGBub3dgLCBgZW5kX3RpbWVgLCBgbmV4dF9zdGFydGAsIGBidWRnZXRgLCBgYmVoaW5kYCkgYW5kIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgIChgY3ljbGVgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgcmVhZGluZyBvciBicmFuY2hpbmcgb24gdGhlbS5cbiAgMy4gTm8gYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMsIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCByZWFkcyBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2Ugb3Iga2VybmVsIGNvbnRyb2wgZmxvdy5cblxuLSBLQVNBTiB2cyBLTVNBTiBBcHBsaWNhYmlsaXR5OlxuICBBbnkgY29uY3VycmVuY3ksIGxpc3QgdHJhdmVyc2FsLCBvciBib3VuZHMgaXNzdWVzIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBsb2NrZGVwLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIG9yIGluZm8tbGVhayByaXNrcyByZXF1aXJpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBydW4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHRoZSBzY2hlZHVsZSBhZHZhbmNlbWVudCBhbmQgY3ljbGUgcmVjYWxjdWxhdGlvbiBsb2dpYyBpbiB0aGUgdGFwcmlvIHFkaXNjIChzY2hfdGFwcmlvLmMpIHRvIGhhbmRsZSBkZWxheWVkIHRpbWVycyBhbmQgY2xvY2sgc3RlcHBpbmcgYnkgYm91bmRpbmcgY2F0Y2gtdXAgaXRlcmF0aW9ucyBhbmQgaW50cm9kdWNpbmcgYW4gaW50ZXJuYWwgYHBlcmlvZGAgZmllbGQgaW4gYHN0cnVjdCBzY2hlZF9nYXRlX2xpc3RgLlxuXG4tIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IC8gSW5mby1sZWFrIEFuYWx5c2lzOlxuICAxLiBUaGUgbmV3IGBwZXJpb2RgIGZpZWxkIGluIGBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0YCBpcyBjb21wdXRlZCBkdXJpbmcgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgYW5kIHN0b3JlZCBpbiBtZW1vcnkgYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmpgLiBJdCBpcyBub3QgZXhwb3J0ZWQgb3IgZHVtcGVkIHRvIHVzZXJzcGFjZSBpbiBgZHVtcF9zY2hlZHVsZWAuXG4gIDIuIEFsbCBsb2NhbCB2YXJpYWJsZXMgaW50cm9kdWNlZCBpbiBgYWR2YW5jZV9zY2hlZGAgKGBub3dgLCBgZW5kX3RpbWVgLCBgbmV4dF9zdGFydGAsIGBidWRnZXRgLCBgYmVoaW5kYCkgYW5kIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgIChgY3ljbGVgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgcmVhZGluZyBvciBicmFuY2hpbmcgb24gdGhlbS5cbiAgMy4gTm8gYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMsIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCByZWFkcyBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2Ugb3Iga2VybmVsIGNvbnRyb2wgZmxvdy5cblxuLSBLQVNBTiB2cyBLTVNBTiBBcHBsaWNhYmlsaXR5OlxuICBBbnkgY29uY3VycmVuY3ksIGxpc3QgdHJhdmVyc2FsLCBvciBib3VuZHMgaXNzdWVzIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBsb2NrZGVwLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIG9yIGluZm8tbGVhayByaXNrcyByZXF1aXJpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBydW4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjA2OjM3LjQ4OTE3NzM4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA0MTUxMjU5NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSEVEXCIsXG4gICAgXCJORVRfU0NIX1RBUFJJT1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFkdmFuY2Vfc2NoZWRcIixcbiAgICBcInBhcnNlX3RhcHJpb19zY2hlZHVsZVwiLFxuICAgIFwidGFwcmlvX2NoYW5nZVwiLFxuICAgIFwidGFwcmlvX2luaXRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgdGhlIHNjaGVkdWxlIGFkdmFuY2VtZW50IGFuZCBjeWNsZSByZWNhbGN1bGF0aW9uIGxvZ2ljIGluIHRoZSB0YXByaW8gcWRpc2MgKHNjaF90YXByaW8uYykgdG8gaGFuZGxlIGRlbGF5ZWQgdGltZXJzIGFuZCBjbG9jayBzdGVwcGluZyBieSBib3VuZGluZyBjYXRjaC11cCBpdGVyYXRpb25zIGFuZCBpbnRyb2R1Y2luZyBhbiBpbnRlcm5hbCBgcGVyaW9kYCBmaWVsZCBpbiBgc3RydWN0IHNjaGVkX2dhdGVfbGlzdGAuXFxuXFxuLSBVbmluaXRpYWxpemVkIE1lbW9yeSAvIEluZm8tbGVhayBBbmFseXNpczpcXG4gIDEuIFRoZSBuZXcgYHBlcmlvZGAgZmllbGQgaW4gYHN0cnVjdCBzY2hlZF9nYXRlX2xpc3RgIGlzIGNvbXB1dGVkIGR1cmluZyBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCBhbmQgc3RvcmVkIGluIG1lbW9yeSBhbGxvY2F0ZWQgdmlhIGBremFsbG9jX29iamAuIEl0IGlzIG5vdCBleHBvcnRlZCBvciBkdW1wZWQgdG8gdXNlcnNwYWNlIGluIGBkdW1wX3NjaGVkdWxlYC5cXG4gIDIuIEFsbCBsb2NhbCB2YXJpYWJsZXMgaW50cm9kdWNlZCBpbiBgYWR2YW5jZV9zY2hlZGAgKGBub3dgLCBgZW5kX3RpbWVgLCBgbmV4dF9zdGFydGAsIGBidWRnZXRgLCBgYmVoaW5kYCkgYW5kIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgIChgY3ljbGVgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgcmVhZGluZyBvciBicmFuY2hpbmcgb24gdGhlbS5cXG4gIDMuIE5vIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb25zLCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgcmVhZHMgYXJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlIG9yIGtlcm5lbCBjb250cm9sIGZsb3cuXFxuXFxuLSBLQVNBTiB2cyBLTVNBTiBBcHBsaWNhYmlsaXR5OlxcbiAgQW55IGNvbmN1cnJlbmN5LCBsaXN0IHRyYXZlcnNhbCwgb3IgYm91bmRzIGlzc3VlcyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgbG9ja2RlcC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBpbmZvLWxlYWsgcmlza3MgcmVxdWlyaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgcnVuLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzY2hlZHVsZSBwYXJzaW5nIGFuZCBocnRpbWVyIGFkdmFuY2UgYWxnb3JpdGhtIGluIHRoZSBUQVBSSU8gKFRpbWUtQXdhcmUgUHJpb3JpdHkpIHBhY2tldCBzY2hlZHVsZXIgKHNjaF90YXByaW8pLiBTcGVjaWZpY2FsbHksIGl0IGZpeGVzIGN5Y2xlIGNhdGNoLXVwIGxvZ2ljIHdoZW4gdGhlIHRpbWVyIGlzIGRlbGF5ZWQgb3IgdGhlIGNsb2NrIGlzIHN0ZXBwZWQgYnkgY2FsY3VsYXRpbmcgcGVyaW9kcyBhbmQgbGVhcGluZyBmb3J3YXJkLCBhbmQgYm91bmRzIHRoZSBzY2hlZHVsZSBjYXRjaC11cCBsb29wLiBUaGlzIG1vZGlmaWVzIGNvcmUgdHJhZmZpYyBjb250cm9sIHNjaGVkdWxpbmcgbG9naWMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIGNvbmZpZ3VyYXRpb24gYW5kIG5ldHdvcmsgcGFja2V0IHRyYW5zbWlzc2lvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6MDY6MzcuNDg5MTgyMzRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzQzMjcxNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkMDQ0YjhiZDA0Mjc4ZTBjNjgyNDE1MDZkMzU5NTA3MTA1MzNkYmI2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDEgMjM6MDY6MzUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF90YXByaW8uYyBiL25ldC9zY2hlZC9zY2hfdGFwcmlvLmNcXG5pbmRleCAzOWFjNWI5N2FhM2FmLi45MDFkZmQyNDg0ZTEwIDEwMDY0NFxcbi0tLSBhL25ldC9zY2hlZC9zY2hfdGFwcmlvLmNcXG4rKysgYi9uZXQvc2NoZWQvc2NoX3RhcHJpby5jXFxuQEAgLTgzLDYgKzgzLDEwIEBAIHN0cnVjdCBzY2hlZF9nYXRlX2xpc3Qge1xcbiBcXHRzNjQgY3ljbGVfdGltZTtcXG4gXFx0czY0IGN5Y2xlX3RpbWVfZXh0ZW5zaW9uO1xcbiBcXHRzNjQgYmFzZV90aW1lO1xcbitcXHQvKiBtaW4oY3ljbGVfdGltZSwgc3VtIG9mIGludGVydmFscyk6IHRoZSBzb2Z0d2FyZSBzY2hlZHVsZSByZXN0YXJ0c1xcbitcXHQgKiB0aGUgbGlzdCBhZnRlciB0aGUgbGFzdCBlbnRyeSBldmVuIHdoZW4gY3ljbGVfdGltZSBpcyBub3QgdXAgeWV0LlxcbitcXHQgKi9cXG4rXFx0czY0IHBlcmlvZDtcXG4gfTtcXG4gXFxuIHN0cnVjdCB0YXByaW9fc2NoZWQge1xcbkBAIC04NzEsMTIgKzg3NSwxMyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnRhcHJpb19kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxcbiB9XFxuIFxcbiBzdGF0aWMgYm9vbCBzaG91bGRfcmVzdGFydF9jeWNsZShjb25zdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpvcGVyLFxcbi1cXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeSlcXG4rXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnksXFxuK1xcdFxcdFxcdFxcdCBrdGltZV90IGVuZF90aW1lKVxcbiB7XFxuIFxcdGlmIChsaXN0X2lzX2xhc3QoXFx1MDAyNmVudHJ5LVxcdTAwM2VsaXN0LCBcXHUwMDI2b3Blci1cXHUwMDNlZW50cmllcykpXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXG4tXFx0aWYgKGt0aW1lX2NvbXBhcmUoZW50cnktXFx1MDAzZWVuZF90aW1lLCBvcGVyLVxcdTAwM2VjeWNsZV9lbmRfdGltZSkgPT0gMClcXG4rXFx0aWYgKGt0aW1lX2NvbXBhcmUoZW5kX3RpbWUsIG9wZXItXFx1MDAzZWN5Y2xlX2VuZF90aW1lKSA9PSAwKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuIFxcdHJldHVybiBmYWxzZTtcXG5AQCAtOTI1LDggKzkzMCw5IEBAIHN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBhZHZhbmNlX3NjaGVkKHN0cnVjdCBocnRpbWVyICp0aW1lcilcXG4gXFx0aW50IG51bV90YyA9IG5ldGRldl9nZXRfbnVtX3RjKGRldik7XFxuIFxcdHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnksICpuZXh0O1xcbiBcXHRzdHJ1Y3QgUWRpc2MgKnNjaCA9IHEtXFx1MDAzZXJvb3Q7XFxuLVxcdGt0aW1lX3QgZW5kX3RpbWU7XFxuLVxcdGludCB0YztcXG4rXFx0a3RpbWVfdCBlbmRfdGltZSwgbmV4dF9zdGFydCwgbm93O1xcbitcXHRpbnQgYnVkZ2V0LCB0YztcXG4rXFx0czY0IGJlaGluZDtcXG4gXFxuIFxcdHNwaW5fbG9jayhcXHUwMDI2cS1cXHUwMDNlY3VycmVudF9lbnRyeV9sb2NrKTtcXG4gXFx0ZW50cnkgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHEtXFx1MDAzZWN1cnJlbnRfZW50cnksXFxuQEAgLTk1MiwyMyArOTU4LDQ5IEBAIHN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBhZHZhbmNlX3NjaGVkKHN0cnVjdCBocnRpbWVyICp0aW1lcilcXG4gXFx0XFx0Z290byBmaXJzdF9ydW47XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChzaG91bGRfcmVzdGFydF9jeWNsZShvcGVyLCBlbnRyeSkpIHtcXG4tXFx0XFx0bmV4dCA9IGxpc3RfZmlyc3RfZW50cnkoXFx1MDAyNm9wZXItXFx1MDAzZWVudHJpZXMsIHN0cnVjdCBzY2hlZF9lbnRyeSxcXG4tXFx0XFx0XFx0XFx0XFx0bGlzdCk7XFxuLVxcdFxcdG9wZXItXFx1MDAzZWN5Y2xlX2VuZF90aW1lID0ga3RpbWVfYWRkX25zKG9wZXItXFx1MDAzZWN5Y2xlX2VuZF90aW1lLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgb3Blci1cXHUwMDNlY3ljbGVfdGltZSk7XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdG5leHQgPSBsaXN0X25leHRfZW50cnkoZW50cnksIGxpc3QpO1xcbitcXHRub3cgPSBocnRpbWVyX2NiX2dldF90aW1lKHRpbWVyKTtcXG4rXFx0ZW5kX3RpbWUgPSBlbnRyeS1cXHUwMDNlZW5kX3RpbWU7XFxuK1xcdGJlaGluZCA9IGt0aW1lX3N1Yihub3csIGVuZF90aW1lKTtcXG4rXFxuK1xcdC8qIEJlaGluZCwgZS5nLiBkZWxheWVkIHRpbWVyIG9yIHN0ZXBwZWQgY2xvY2s6IHNraXAgd2hvbGUgcGVyaW9kc1xcbitcXHQgKiBhcml0aG1ldGljYWxseSBhbmQgd2FsayBhdCBtb3N0IG9uZSBtb3JlIHRvIHRoZSBlbnRyeSBjb3ZlcmluZ1xcbitcXHQgKiBub3csIGluc3RlYWQgb2YgcmVwbGF5aW5nIHRoZSBiYWNrbG9nIG9uZSBleHBpcnkgYXQgYSB0aW1lLiBUaGVcXG4rXFx0ICogY2FwIGJvdW5kcyB0aGUgd2FsazsgYSBsZWZ0b3ZlciBpcyBwaWNrZWQgdXAgYnkgdGhlIG5leHQgZXhwaXJ5LlxcbitcXHQgKi9cXG4rXFx0aWYgKHVubGlrZWx5KGJlaGluZCBcXHUwMDNlPSBvcGVyLVxcdTAwM2VwZXJpb2QpKSB7XFxuK1xcdFxcdHM2NCBqdW1wID0gZGl2NjRfczY0KGJlaGluZCwgb3Blci1cXHUwMDNlcGVyaW9kKSAqIG9wZXItXFx1MDAzZXBlcmlvZDtcXG4rXFxuK1xcdFxcdGVuZF90aW1lID0ga3RpbWVfYWRkX25zKGVuZF90aW1lLCBqdW1wKTtcXG4rXFx0XFx0b3Blci1cXHUwMDNlY3ljbGVfZW5kX3RpbWUgPSBrdGltZV9hZGRfbnMob3Blci1cXHUwMDNlY3ljbGVfZW5kX3RpbWUsIGp1bXApO1xcbiBcXHR9XFxuIFxcbi1cXHRlbmRfdGltZSA9IGt0aW1lX2FkZF9ucyhlbnRyeS1cXHUwMDNlZW5kX3RpbWUsIG5leHQtXFx1MDAzZWludGVydmFsKTtcXG4tXFx0ZW5kX3RpbWUgPSBtaW5fdChrdGltZV90LCBlbmRfdGltZSwgb3Blci1cXHUwMDNlY3ljbGVfZW5kX3RpbWUpO1xcbitcXHRidWRnZXQgPSAyICogb3Blci1cXHUwMDNlbnVtX2VudHJpZXM7XFxuK1xcdGRvIHtcXG4rXFx0XFx0aWYgKHNob3VsZF9yZXN0YXJ0X2N5Y2xlKG9wZXIsIGVudHJ5LCBlbmRfdGltZSkpIHtcXG4rXFx0XFx0XFx0bmV4dCA9IGxpc3RfZmlyc3RfZW50cnkoXFx1MDAyNm9wZXItXFx1MDAzZWVudHJpZXMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBzY2hlZF9lbnRyeSwgbGlzdCk7XFxuK1xcdFxcdFxcdG9wZXItXFx1MDAzZWN5Y2xlX2VuZF90aW1lID0ga3RpbWVfYWRkX25zKG9wZXItXFx1MDAzZWN5Y2xlX2VuZF90aW1lLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgb3Blci1cXHUwMDNlcGVyaW9kKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0bmV4dCA9IGxpc3RfbmV4dF9lbnRyeShlbnRyeSwgbGlzdCk7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdG5leHRfc3RhcnQgPSBlbmRfdGltZTtcXG4rXFx0XFx0ZW5kX3RpbWUgPSBrdGltZV9hZGRfbnMobmV4dF9zdGFydCwgbmV4dC1cXHUwMDNlaW50ZXJ2YWwpO1xcbitcXHRcXHRlbmRfdGltZSA9IG1pbl90KGt0aW1lX3QsIGVuZF90aW1lLCBvcGVyLVxcdTAwM2VjeWNsZV9lbmRfdGltZSk7XFxuK1xcdFxcdGVudHJ5ID0gbmV4dDtcXG4rXFx0fSB3aGlsZSAodW5saWtlbHkoa3RpbWVfY29tcGFyZShlbmRfdGltZSwgbm93KSBcXHUwMDNjPSAwKSBcXHUwMDI2XFx1MDAyNiBidWRnZXQtLSk7XFxuIFxcbitcXHQvKiBuZXh0IGNhbiBiZSB0aGUgZW50cnkgYWxyZWFkeSBwdWJsaXNoZWQgYXMgcS1cXHUwMDNlY3VycmVudF9lbnRyeSAoYVxcbitcXHQgKiBzaW5nbGUtZW50cnkgc2NoZWR1bGUsIG9yIGEgY2F0Y2gtdXAgb2Ygd2hvbGUgcGVyaW9kcyksIHNvIHRoZVxcbitcXHQgKiBjbG9zZSB0aW1lcyBhbmQgYnVkZ2V0cyBiZWxvdyBhcmUgcmV3cml0dGVuIGluIHBsYWNlIHdoaWxlXFxuK1xcdCAqIHRhcHJpb19kZXF1ZXVlX2Zyb21fdHhxKCkgbWF5IGJlIHJlYWRpbmcgdGhlbS5cXG4rXFx0ICovXFxuIFxcdGZvciAodGMgPSAwOyB0YyBcXHUwMDNjIG51bV90YzsgdGMrKykge1xcbiBcXHRcXHRpZiAobmV4dC1cXHUwMDNlZ2F0ZV9kdXJhdGlvblt0Y10gPT0gb3Blci1cXHUwMDNlY3ljbGVfdGltZSlcXG4gXFx0XFx0XFx0bmV4dC1cXHUwMDNlZ2F0ZV9jbG9zZV90aW1lW3RjXSA9IEtUSU1FX01BWDtcXG4gXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRuZXh0LVxcdTAwM2VnYXRlX2Nsb3NlX3RpbWVbdGNdID0ga3RpbWVfYWRkX25zKGVudHJ5LVxcdTAwM2VlbmRfdGltZSxcXG4rXFx0XFx0XFx0bmV4dC1cXHUwMDNlZ2F0ZV9jbG9zZV90aW1lW3RjXSA9IGt0aW1lX2FkZF9ucyhuZXh0X3N0YXJ0LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgbmV4dC1cXHUwMDNlZ2F0ZV9kdXJhdGlvblt0Y10pO1xcbiBcXHR9XFxuIFxcbkBAIC0xMTMwLDYgKzExNjIsOCBAQCBzdGF0aWMgaW50IHBhcnNlX3RhcHJpb19zY2hlZHVsZShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXFxuIFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpuZXcsXFxuIFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIHtcXG4rXFx0c3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeTtcXG4rXFx0a3RpbWVfdCBjeWNsZSA9IDA7XFxuIFxcdGludCBlcnIgPSAwO1xcbiBcXG4gXFx0aWYgKHRiW1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9TSU5HTEVfRU5UUlldKSB7XFxuQEAgLTExNTIsMTMgKzExODYsMTAgQEAgc3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxcbiBcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuLVxcdGlmICghbmV3LVxcdTAwM2VjeWNsZV90aW1lKSB7XFxuLVxcdFxcdHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnk7XFxuLVxcdFxcdGt0aW1lX3QgY3ljbGUgPSAwO1xcbi1cXG4tXFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgXFx1MDAyNm5ldy1cXHUwMDNlZW50cmllcywgbGlzdClcXG4tXFx0XFx0XFx0Y3ljbGUgPSBrdGltZV9hZGRfbnMoY3ljbGUsIGVudHJ5LVxcdTAwM2VpbnRlcnZhbCk7XFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIFxcdTAwMjZuZXctXFx1MDAzZWVudHJpZXMsIGxpc3QpXFxuK1xcdFxcdGN5Y2xlID0ga3RpbWVfYWRkX25zKGN5Y2xlLCBlbnRyeS1cXHUwMDNlaW50ZXJ2YWwpO1xcbiBcXG4rXFx0aWYgKCFuZXctXFx1MDAzZWN5Y2xlX3RpbWUpIHtcXG4gXFx0XFx0aWYgKGN5Y2xlIFxcdTAwM2MgMCB8fCBjeWNsZSBcXHUwMDNlIElOVF9NQVgpIHtcXG4gXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiJ2N5Y2xlX3RpbWUnIGlzIHRvbyBiaWdcXFwiKTtcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuQEAgLTExNzIsNiArMTIwMyw3IEBAIHN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YixcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuK1xcdG5ldy1cXHUwMDNlcGVyaW9kID0gbWluKG5ldy1cXHUwMDNlY3ljbGVfdGltZSwgY3ljbGUpO1xcbiBcXHR0YXByaW9fY2FsY3VsYXRlX2dhdGVfZHVyYXRpb25zKHEsIG5ldyk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6MDY6MzguODY0MTkwOTQ2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyOTQ3NDI0ODgyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIk5FVF9TQ0hfVEFQUklPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWR2YW5jZV9zY2hlZFwiLFxuICAgIFwicGFyc2VfdGFwcmlvX3NjaGVkdWxlXCIsXG4gICAgXCJ0YXByaW9fY2hhbmdlXCIsXG4gICAgXCJ0YXByaW9faW5pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzY2hlZHVsZSBwYXJzaW5nIGFuZCBocnRpbWVyIGFkdmFuY2UgYWxnb3JpdGhtIGluIHRoZSBUQVBSSU8gKFRpbWUtQXdhcmUgUHJpb3JpdHkpIHBhY2tldCBzY2hlZHVsZXIgKHNjaF90YXByaW8pLiBTcGVjaWZpY2FsbHksIGl0IGZpeGVzIGN5Y2xlIGNhdGNoLXVwIGxvZ2ljIHdoZW4gdGhlIHRpbWVyIGlzIGRlbGF5ZWQgb3IgdGhlIGNsb2NrIGlzIHN0ZXBwZWQgYnkgY2FsY3VsYXRpbmcgcGVyaW9kcyBhbmQgbGVhcGluZyBmb3J3YXJkLCBhbmQgYm91bmRzIHRoZSBzY2hlZHVsZSBjYXRjaC11cCBsb29wLiBUaGlzIG1vZGlmaWVzIGNvcmUgdHJhZmZpYyBjb250cm9sIHNjaGVkdWxpbmcgbG9naWMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIGNvbmZpZ3VyYXRpb24gYW5kIG5ldHdvcmsgcGFja2V0IHRyYW5zbWlzc2lvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDA0NGI4YmQwNDI3OGUwYzY4MjQxNTA2ZDM1OTUwNzEwNTMzZGJiNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDEgMjM6MDY6MzUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3RhcHJpby5jIGIvbmV0L3NjaGVkL3NjaF90YXByaW8uY1xuaW5kZXggMzlhYzViOTdhYTNhZi4uOTAxZGZkMjQ4NGUxMCAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9zY2hfdGFwcmlvLmNcbisrKyBiL25ldC9zY2hlZC9zY2hfdGFwcmlvLmNcbkBAIC04Myw2ICs4MywxMCBAQCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0IHtcbiBcdHM2NCBjeWNsZV90aW1lO1xuIFx0czY0IGN5Y2xlX3RpbWVfZXh0ZW5zaW9uO1xuIFx0czY0IGJhc2VfdGltZTtcbitcdC8qIG1pbihjeWNsZV90aW1lLCBzdW0gb2YgaW50ZXJ2YWxzKTogdGhlIHNvZnR3YXJlIHNjaGVkdWxlIHJlc3RhcnRzXG4rXHQgKiB0aGUgbGlzdCBhZnRlciB0aGUgbGFzdCBlbnRyeSBldmVuIHdoZW4gY3ljbGVfdGltZSBpcyBub3QgdXAgeWV0LlxuK1x0ICovXG4rXHRzNjQgcGVyaW9kO1xuIH07XG4gXG4gc3RydWN0IHRhcHJpb19zY2hlZCB7XG5AQCAtODcxLDEyICs4NzUsMTMgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp0YXByaW9fZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcbiB9XG4gXG4gc3RhdGljIGJvb2wgc2hvdWxkX3Jlc3RhcnRfY3ljbGUoY29uc3Qgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqb3Blcixcbi1cdFx0XHRcdCBjb25zdCBzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5KVxuK1x0XHRcdFx0IGNvbnN0IHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnksXG4rXHRcdFx0XHQga3RpbWVfdCBlbmRfdGltZSlcbiB7XG4gXHRpZiAobGlzdF9pc19sYXN0KFx1MDAyNmVudHJ5LVx1MDAzZWxpc3QsIFx1MDAyNm9wZXItXHUwMDNlZW50cmllcykpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuLVx0aWYgKGt0aW1lX2NvbXBhcmUoZW50cnktXHUwMDNlZW5kX3RpbWUsIG9wZXItXHUwMDNlY3ljbGVfZW5kX3RpbWUpID09IDApXG4rXHRpZiAoa3RpbWVfY29tcGFyZShlbmRfdGltZSwgb3Blci1cdTAwM2VjeWNsZV9lbmRfdGltZSkgPT0gMClcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHRyZXR1cm4gZmFsc2U7XG5AQCAtOTI1LDggKzkzMCw5IEBAIHN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBhZHZhbmNlX3NjaGVkKHN0cnVjdCBocnRpbWVyICp0aW1lcilcbiBcdGludCBudW1fdGMgPSBuZXRkZXZfZ2V0X251bV90YyhkZXYpO1xuIFx0c3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeSwgKm5leHQ7XG4gXHRzdHJ1Y3QgUWRpc2MgKnNjaCA9IHEtXHUwMDNlcm9vdDtcbi1cdGt0aW1lX3QgZW5kX3RpbWU7XG4tXHRpbnQgdGM7XG4rXHRrdGltZV90IGVuZF90aW1lLCBuZXh0X3N0YXJ0LCBub3c7XG4rXHRpbnQgYnVkZ2V0LCB0YztcbitcdHM2NCBiZWhpbmQ7XG4gXG4gXHRzcGluX2xvY2soXHUwMDI2cS1cdTAwM2VjdXJyZW50X2VudHJ5X2xvY2spO1xuIFx0ZW50cnkgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHEtXHUwMDNlY3VycmVudF9lbnRyeSxcbkBAIC05NTIsMjMgKzk1OCw0OSBAQCBzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgYWR2YW5jZV9zY2hlZChzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpXG4gXHRcdGdvdG8gZmlyc3RfcnVuO1xuIFx0fVxuIFxuLVx0aWYgKHNob3VsZF9yZXN0YXJ0X2N5Y2xlKG9wZXIsIGVudHJ5KSkge1xuLVx0XHRuZXh0ID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZvcGVyLVx1MDAzZWVudHJpZXMsIHN0cnVjdCBzY2hlZF9lbnRyeSxcbi1cdFx0XHRcdFx0bGlzdCk7XG4tXHRcdG9wZXItXHUwMDNlY3ljbGVfZW5kX3RpbWUgPSBrdGltZV9hZGRfbnMob3Blci1cdTAwM2VjeWNsZV9lbmRfdGltZSxcbi1cdFx0XHRcdFx0XHQgICAgb3Blci1cdTAwM2VjeWNsZV90aW1lKTtcbi1cdH0gZWxzZSB7XG4tXHRcdG5leHQgPSBsaXN0X25leHRfZW50cnkoZW50cnksIGxpc3QpO1xuK1x0bm93ID0gaHJ0aW1lcl9jYl9nZXRfdGltZSh0aW1lcik7XG4rXHRlbmRfdGltZSA9IGVudHJ5LVx1MDAzZWVuZF90aW1lO1xuK1x0YmVoaW5kID0ga3RpbWVfc3ViKG5vdywgZW5kX3RpbWUpO1xuK1xuK1x0LyogQmVoaW5kLCBlLmcuIGRlbGF5ZWQgdGltZXIgb3Igc3RlcHBlZCBjbG9jazogc2tpcCB3aG9sZSBwZXJpb2RzXG4rXHQgKiBhcml0aG1ldGljYWxseSBhbmQgd2FsayBhdCBtb3N0IG9uZSBtb3JlIHRvIHRoZSBlbnRyeSBjb3ZlcmluZ1xuK1x0ICogbm93LCBpbnN0ZWFkIG9mIHJlcGxheWluZyB0aGUgYmFja2xvZyBvbmUgZXhwaXJ5IGF0IGEgdGltZS4gVGhlXG4rXHQgKiBjYXAgYm91bmRzIHRoZSB3YWxrOyBhIGxlZnRvdmVyIGlzIHBpY2tlZCB1cCBieSB0aGUgbmV4dCBleHBpcnkuXG4rXHQgKi9cbitcdGlmICh1bmxpa2VseShiZWhpbmQgXHUwMDNlPSBvcGVyLVx1MDAzZXBlcmlvZCkpIHtcbitcdFx0czY0IGp1bXAgPSBkaXY2NF9zNjQoYmVoaW5kLCBvcGVyLVx1MDAzZXBlcmlvZCkgKiBvcGVyLVx1MDAzZXBlcmlvZDtcbitcbitcdFx0ZW5kX3RpbWUgPSBrdGltZV9hZGRfbnMoZW5kX3RpbWUsIGp1bXApO1xuK1x0XHRvcGVyLVx1MDAzZWN5Y2xlX2VuZF90aW1lID0ga3RpbWVfYWRkX25zKG9wZXItXHUwMDNlY3ljbGVfZW5kX3RpbWUsIGp1bXApO1xuIFx0fVxuIFxuLVx0ZW5kX3RpbWUgPSBrdGltZV9hZGRfbnMoZW50cnktXHUwMDNlZW5kX3RpbWUsIG5leHQtXHUwMDNlaW50ZXJ2YWwpO1xuLVx0ZW5kX3RpbWUgPSBtaW5fdChrdGltZV90LCBlbmRfdGltZSwgb3Blci1cdTAwM2VjeWNsZV9lbmRfdGltZSk7XG4rXHRidWRnZXQgPSAyICogb3Blci1cdTAwM2VudW1fZW50cmllcztcbitcdGRvIHtcbitcdFx0aWYgKHNob3VsZF9yZXN0YXJ0X2N5Y2xlKG9wZXIsIGVudHJ5LCBlbmRfdGltZSkpIHtcbitcdFx0XHRuZXh0ID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZvcGVyLVx1MDAzZWVudHJpZXMsXG4rXHRcdFx0XHRcdFx0c3RydWN0IHNjaGVkX2VudHJ5LCBsaXN0KTtcbitcdFx0XHRvcGVyLVx1MDAzZWN5Y2xlX2VuZF90aW1lID0ga3RpbWVfYWRkX25zKG9wZXItXHUwMDNlY3ljbGVfZW5kX3RpbWUsXG4rXHRcdFx0XHRcdFx0XHQgICAgb3Blci1cdTAwM2VwZXJpb2QpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdG5leHQgPSBsaXN0X25leHRfZW50cnkoZW50cnksIGxpc3QpO1xuK1x0XHR9XG4rXG4rXHRcdG5leHRfc3RhcnQgPSBlbmRfdGltZTtcbitcdFx0ZW5kX3RpbWUgPSBrdGltZV9hZGRfbnMobmV4dF9zdGFydCwgbmV4dC1cdTAwM2VpbnRlcnZhbCk7XG4rXHRcdGVuZF90aW1lID0gbWluX3Qoa3RpbWVfdCwgZW5kX3RpbWUsIG9wZXItXHUwMDNlY3ljbGVfZW5kX3RpbWUpO1xuK1x0XHRlbnRyeSA9IG5leHQ7XG4rXHR9IHdoaWxlICh1bmxpa2VseShrdGltZV9jb21wYXJlKGVuZF90aW1lLCBub3cpIFx1MDAzYz0gMCkgXHUwMDI2XHUwMDI2IGJ1ZGdldC0tKTtcbiBcbitcdC8qIG5leHQgY2FuIGJlIHRoZSBlbnRyeSBhbHJlYWR5IHB1Ymxpc2hlZCBhcyBxLVx1MDAzZWN1cnJlbnRfZW50cnkgKGFcbitcdCAqIHNpbmdsZS1lbnRyeSBzY2hlZHVsZSwgb3IgYSBjYXRjaC11cCBvZiB3aG9sZSBwZXJpb2RzKSwgc28gdGhlXG4rXHQgKiBjbG9zZSB0aW1lcyBhbmQgYnVkZ2V0cyBiZWxvdyBhcmUgcmV3cml0dGVuIGluIHBsYWNlIHdoaWxlXG4rXHQgKiB0YXByaW9fZGVxdWV1ZV9mcm9tX3R4cSgpIG1heSBiZSByZWFkaW5nIHRoZW0uXG4rXHQgKi9cbiBcdGZvciAodGMgPSAwOyB0YyBcdTAwM2MgbnVtX3RjOyB0YysrKSB7XG4gXHRcdGlmIChuZXh0LVx1MDAzZWdhdGVfZHVyYXRpb25bdGNdID09IG9wZXItXHUwMDNlY3ljbGVfdGltZSlcbiBcdFx0XHRuZXh0LVx1MDAzZWdhdGVfY2xvc2VfdGltZVt0Y10gPSBLVElNRV9NQVg7XG4gXHRcdGVsc2Vcbi1cdFx0XHRuZXh0LVx1MDAzZWdhdGVfY2xvc2VfdGltZVt0Y10gPSBrdGltZV9hZGRfbnMoZW50cnktXHUwMDNlZW5kX3RpbWUsXG4rXHRcdFx0bmV4dC1cdTAwM2VnYXRlX2Nsb3NlX3RpbWVbdGNdID0ga3RpbWVfYWRkX25zKG5leHRfc3RhcnQsXG4gXHRcdFx0XHRcdFx0XHRcdCBuZXh0LVx1MDAzZWdhdGVfZHVyYXRpb25bdGNdKTtcbiBcdH1cbiBcbkBAIC0xMTMwLDYgKzExNjIsOCBAQCBzdGF0aWMgaW50IHBhcnNlX3RhcHJpb19zY2hlZHVsZShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXG4gXHRcdFx0XHQgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqbmV3LFxuIFx0XHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4rXHRzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5O1xuK1x0a3RpbWVfdCBjeWNsZSA9IDA7XG4gXHRpbnQgZXJyID0gMDtcbiBcbiBcdGlmICh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfU0lOR0xFX0VOVFJZXSkge1xuQEAgLTExNTIsMTMgKzExODYsMTAgQEAgc3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxuIFx0aWYgKGVyciBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIGVycjtcbiBcbi1cdGlmICghbmV3LVx1MDAzZWN5Y2xlX3RpbWUpIHtcbi1cdFx0c3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeTtcbi1cdFx0a3RpbWVfdCBjeWNsZSA9IDA7XG4tXG4tXHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIFx1MDAyNm5ldy1cdTAwM2VlbnRyaWVzLCBsaXN0KVxuLVx0XHRcdGN5Y2xlID0ga3RpbWVfYWRkX25zKGN5Y2xlLCBlbnRyeS1cdTAwM2VpbnRlcnZhbCk7XG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBcdTAwMjZuZXctXHUwMDNlZW50cmllcywgbGlzdClcbitcdFx0Y3ljbGUgPSBrdGltZV9hZGRfbnMoY3ljbGUsIGVudHJ5LVx1MDAzZWludGVydmFsKTtcbiBcbitcdGlmICghbmV3LVx1MDAzZWN5Y2xlX3RpbWUpIHtcbiBcdFx0aWYgKGN5Y2xlIFx1MDAzYyAwIHx8IGN5Y2xlIFx1MDAzZSBJTlRfTUFYKSB7XG4gXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcIidjeWNsZV90aW1lJyBpcyB0b28gYmlnXCIpO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTExNzIsNiArMTIwMyw3IEBAIHN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YixcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4rXHRuZXctXHUwMDNlcGVyaW9kID0gbWluKG5ldy1cdTAwM2VjeWNsZV90aW1lLCBjeWNsZSk7XG4gXHR0YXByaW9fY2FsY3VsYXRlX2dhdGVfZHVyYXRpb25zKHEsIG5ldyk7XG4gXG4gXHRyZXR1cm4gMDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjA2OjM4Ljg2NDE5MjMxNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYwNTM1MjAwNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhbmFseXNpcyBvZiB0aGlzIHBhdGNoLCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgbmV0d29ya2luZyBrZXJuZWwgZXhwZXJ0OlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogVEFQUklPIGFuZCBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbkFscmlnaHQsIGEgbmV3IHBhdGNoIHRvIGBuZXQvc2NoZWQvc2NoX3RhcHJpby5jYC4gTXkgaW5pdGlhbCByZWFjdGlvbiBpcyB0byBhc3Nlc3MgaXRzIGltcGFjdCDigJMgZG9lcyBpdCBpbnRyb2R1Y2UgbmV3IGZ1bmN0aW9uYWxpdHkgb3Igc2lnbmlmaWNhbnRseSBhbHRlciBleGlzdGluZyBiZWhhdmlvciB0aGF0IHdhcnJhbnRzIGZ1enppbmc/IFRBUFJJTyBpcywgb2YgY291cnNlLCB0aGUgVGltZS1Bd2FyZSBQcmlvcml0eSBxdWV1aW5nIGRpc2NpcGxpbmUsIGEgY3JpdGljYWwgY29tcG9uZW50IGluIG1hbnkgbW9kZXJuIG5ldHdvcmsgZGVwbG95bWVudHMsIGVzcGVjaWFsbHkgdGhvc2UgZGVhbGluZyB3aXRoIHRpbWUtc2Vuc2l0aXZlIHRyYWZmaWMuIEFueSBjaGFuZ2UgaGVyZSBkZXNlcnZlcyBhIHRob3JvdWdoIGxvb2suIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGRpdmUgaW50byB0aGlzIGZpbGUgdXNpbmcgbXkgZXN0YWJsaXNoZWQgdG9vbGNoYWluIGFuZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBrZXJuZWwgdG8gc2VlIHByZWNpc2VseSB3aGF0IHRoaXMgcGF0Y2ggbW9kaWZpZXMuIEknbGwgbmVlZCB0byByYXBpZGx5IGRldGVybWluZSBob3cgdGhpcyBjaGFuZ2UgYWZmZWN0cyBUQVBSSU8ncyBjb3JlIGZ1bmN0aW9uYWxpdHksIGFueSBhZGRlZCBjb25maWd1cmFibGUgb3B0aW9ucywgb3IgY2hhbmdlcyB0byBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIga2VybmVsIGNvbXBvbmVudHMgYW5kLCBvZiBjb3Vyc2UsIHBvdGVudGlhbCBuZXcgY29kZSBwYXRocyB0aGF0IGNvdWxkIGJlIHJpcGUgZm9yIGZ1enppbmcgdnVsbmVyYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzMzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzowNjo0NC45MTc3MTM5M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjM2MzQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX1NDSF9UQVBSSU9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTE2Nz1jb25maWcgTkVUX1NDSF9NUVBSSU9fTElCXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy0xNzEtXFxubmV0L3NjaGVkL0tjb25maWc6MTcyOmNvbmZpZyBORVRfU0NIX1RBUFJJT1xcbm5ldC9zY2hlZC9LY29uZmlnLTE3My1cXHR0cmlzdGF0ZSBcXFwiVGltZSBBd2FyZSBQcmlvcml0eSAodGFwcmlvKSBTY2hlZHVsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjA2OjQ0Ljk2NDA4MDM4OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3OTU0MDY0NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBLY29uZmlnIGluIG5ldC9zY2hlZCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgbmV0d29ya2luZyBzY2hlZHVsZXIuIFRpbWUgdG8gcHVsbCB1cCB0aGUgYG5ldC9zY2hlZC9LY29uZmlnYCBmaWxlIGFuZCB0YWtlIGEgbG9vaywgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDE3Mi4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgY3J1Y2lhbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBvciBkZXBlbmRlbmNpZXMgdGhhdCBhcmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZpbmVyIHBvaW50cyBvZiB0aGUgc2NoZWR1bGVyJ3MgYmVoYXZpb3IuIFRoaXMgaXMgcHJvYmFibHkgd2hlcmUgdGhlIHJlYWxseSBpbXBvcnRhbnQsIG5vbi1vYnZpb3VzIHN0dWZmIGlzIGdvaW5nIHRvIGJlIGRlZmluZWQuIEknbSBob3BpbmcgSSdsbCBiZSBhYmxlIHRvIHNwb3QgYW55IHN1YnRsZXRpZXMgcmlnaHQgYXdheSBzbyBJIGNhbiBidWlsZCBhIG1lbnRhbCBtb2RlbCBvZiBob3cgaXQgYWxsIGhhbmdzIHRvZ2V0aGVyLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZGlnIHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTM5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6MDY6NDYuNzU5NDkwMTU4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTY1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTY1OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNjaF9ldGYuXFxuIDE2NjpcXHRcXG4gMTY3OlxcdGNvbmZpZyBORVRfU0NIX01RUFJJT19MSUJcXG4gMTY4OlxcdFxcdHRyaXN0YXRlXFxuIDE2OTpcXHRcXHRoZWxwXFxuIDE3MDpcXHRcXHQgIENvbW1vbiBsaWJyYXJ5IGZvciBtYW5pcHVsYXRpbmcgbXFwcmlvIHF1ZXVlIGNvbmZpZ3VyYXRpb25zLlxcbiAxNzE6XFx0XFxuIDE3MjpcXHRjb25maWcgTkVUX1NDSF9UQVBSSU9cXG4gMTczOlxcdFxcdHRyaXN0YXRlIFxcXCJUaW1lIEF3YXJlIFByaW9yaXR5ICh0YXByaW8pIFNjaGVkdWxlclxcXCJcXG4gMTc0OlxcdFxcdHNlbGVjdCBORVRfU0NIX01RUFJJT19MSUJcXG4gMTc1OlxcdFxcdGhlbHBcXG4gMTc2OlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIFRpbWUgQXdhcmUgUHJpb3JpdHkgKHRhcHJpbykgcGFja2V0XFxuIDE3NzpcXHRcXHQgIHNjaGVkdWxpbmcgYWxnb3JpdGhtLlxcbiAxNzg6XFx0XFxuIDE3OTpcXHRcXHQgIFNlZSB0aGUgdG9wIG9mIFxcdTAwM2NmaWxlOm5ldC9zY2hlZC9zY2hfdGFwcmlvLmNcXHUwMDNlIGZvciBtb3JlIGRldGFpbHMuXFxuIDE4MDpcXHRcXG4gMTgxOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAxODI6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2NoX3RhcHJpby5cXG4gMTgzOlxcdFxcbiAxODQ6XFx0Y29uZmlnIE5FVF9TQ0hfR1JFRFxcbiAxODU6XFx0XFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgUmFuZG9tIEVhcmx5IERldGVjdGlvbiAoR1JFRClcXFwiXFxuIDE4NjpcXHRcXHRoZWxwXFxuIDE4NzpcXHRcXHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBHZW5lcmljIFJhbmRvbSBFYXJseSBEZXRlY3Rpb25cXG4gMTg4OlxcdFxcdCAgKEdSRUQpIHBhY2tldCBzY2hlZHVsaW5nIGFsZ29yaXRobSBmb3Igc29tZSBvZiB5b3VyIG5ldHdvcmsgZGV2aWNlc1xcbiAxODk6XFx0XFx0ICAoc2VlIHRoZSB0b3Agb2YgXFx1MDAzY2ZpbGU6bmV0L3NjaGVkL3NjaF9yZWQuY1xcdTAwM2UgZm9yIGRldGFpbHMgYW5kXFxuIDE5MDpcXHRcXHQgIHJlZmVyZW5jZXMgYWJvdXQgdGhlIGFsZ29yaXRobSkuXFxuIDE5MTpcXHRcXG4gMTkyOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAxOTM6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2NoX2dyZWQuXFxuIDE5NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6MDY6NDYuNzU5NTY4Mjg4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMzNzM5Mjk2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIE5FVF9TQ0hfVEFQUklPIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBmb3IgYE5FVF9TQ0hfVEFQUklPYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiBhbnkgc3VwcG9ydGluZyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlICphbHNvKiBuZWVkZWQgaW4gb3JkZXIgZm9yIGBORVRfU0NIX1RBUFJJT2AgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IHRoaXMgaW52ZXN0aWdhdGlvbiBpcyB3aXRoaW4gdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24gZmlsZXMuIEknbGwgbmVlZCB0byBkaWcgaW50byBgbmV0L0tjb25maWdgIG9yIHBvc3NpYmx5IHRoZSBtb3JlIHNwZWNpZmljIGBuZXQvc2NoZWQvS2NvbmZpZ2AgZmlsZSB0byBzZWUgd2hhdCB0aGUgYnVpbGQgc3lzdGVtIGV4cGVjdHMuIFRoYXQgc2hvdWxkIHJldmVhbCB3aGF0IG90aGVyIHNldHRpbmdzIG1pZ2h0IG5lZWQgdG8gYmUgZW5hYmxlZCBhbG9uZ3NpZGUgYE5FVF9TQ0hfVEFQUklPYC4gSG9wZWZ1bGx5LCB0aGlzIHdpbGwgc2hlZCBzb21lIGxpZ2h0IG9uIHdoYXQgb3RoZXIgcGllY2VzIG9mIHRoZSBuZXR3b3JrIHN0YWNrIGFyZSBpbnZvbHZlZCBpbiBzdXBwb3J0aW5nIHRoaXMgVHJhZmZpYyBBd2FyZSBTaGFwaW5nIHNjaGVkdWxlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDgxNywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6MDY6NDkuMDk2OTYzMjA4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODMxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgVHJhZmZpYyBjb250cm9sIGNvbmZpZ3VyYXRpb24uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnVjb25maWcgTkVUX1NDSEVEXFxuICAgNzpcXHRcXHRib29sIFxcXCJRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcXFwiXFxuICAgODpcXHRcXHRzZWxlY3QgTkVUX1NDSF9GSUZPXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIFdoZW4gdGhlIGtlcm5lbCBoYXMgc2V2ZXJhbCBwYWNrZXRzIHRvIHNlbmQgb3V0IG92ZXIgYSBuZXR3b3JrXFxuICAxMTpcXHRcXHQgIGRldmljZSwgaXQgaGFzIHRvIGRlY2lkZSB3aGljaCBvbmVzIHRvIHNlbmQgZmlyc3QsIHdoaWNoIG9uZXMgdG9cXG4gIDEyOlxcdFxcdCAgZGVsYXksIGFuZCB3aGljaCBvbmVzIHRvIGRyb3AuIFRoaXMgaXMgdGhlIGpvYiBvZiB0aGUgcXVldWVpbmdcXG4gIDEzOlxcdFxcdCAgZGlzY2lwbGluZXMsIHNldmVyYWwgZGlmZmVyZW50IGFsZ29yaXRobXMgZm9yIGhvdyB0byBkbyB0aGlzXFxuICAxNDpcXHRcXHQgIFxcXCJmYWlybHlcXFwiIGhhdmUgYmVlbiBwcm9wb3NlZC5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0XFx0ICBJZiB5b3Ugc2F5IE4gaGVyZSwgeW91IHdpbGwgZ2V0IHRoZSBzdGFuZGFyZCBwYWNrZXQgc2NoZWR1bGVyLCB3aGljaFxcbiAgMTc6XFx0XFx0ICBpcyBhIEZJRk8gKGZpcnN0IGNvbWUsIGZpcnN0IHNlcnZlZCkuIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZVxcbiAgMTg6XFx0XFx0ICBhYmxlIHRvIGNob29zZSBmcm9tIGFtb25nIHNldmVyYWwgYWx0ZXJuYXRpdmUgYWxnb3JpdGhtcyB3aGljaCBjYW5cXG4gIDE5OlxcdFxcdCAgdGhlbiBiZSBhdHRhY2hlZCB0byBkaWZmZXJlbnQgbmV0d29yayBkZXZpY2VzLiBUaGlzIGlzIHVzZWZ1bCBmb3JcXG4gIDIwOlxcdFxcdCAgZXhhbXBsZSBpZiBzb21lIG9mIHlvdXIgbmV0d29yayBkZXZpY2VzIGFyZSByZWFsIHRpbWUgZGV2aWNlcyB0aGF0XFxuICAyMTpcXHRcXHQgIG5lZWQgYSBjZXJ0YWluIG1pbmltdW0gZGF0YSBmbG93IHJhdGUsIG9yIGlmIHlvdSBuZWVkIHRvIGxpbWl0IHRoZVxcbiAgMjI6XFx0XFx0ICBtYXhpbXVtIGRhdGEgZmxvdyByYXRlIGZvciB0cmFmZmljIHdoaWNoIG1hdGNoZXMgc3BlY2lmaWVkIGNyaXRlcmlhLlxcbiAgMjM6XFx0XFx0ICBUaGlzIGNvZGUgaXMgY29uc2lkZXJlZCB0byBiZSBleHBlcmltZW50YWwuXFxuICAyNDpcXHRcXG4gIDI1OlxcdFxcdCAgVG8gYWRtaW5pc3RlciB0aGVzZSBzY2hlZHVsZXJzLCB5b3UnbGwgbmVlZCB0aGUgdXNlci1sZXZlbCB1dGlsaXRpZXNcXG4gIDI2OlxcdFxcdCAgZnJvbSB0aGUgcGFja2FnZSBpcHJvdXRlMit0YyBhdFxcbiAgMjc6XFx0XFx0ICBcXHUwMDNjaHR0cHM6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMvbmV0L2lwcm91dGUyL1xcdTAwM2UuICBUaGF0IHBhY2thZ2VcXG4gIDI4OlxcdFxcdCAgYWxzbyBjb250YWlucyBzb21lIGRvY3VtZW50YXRpb247IGZvciBtb3JlLCBjaGVjayBvdXRcXG4gIDI5OlxcdFxcdCAgXFx1MDAzY2h0dHA6Ly93d3cubGludXhmb3VuZGF0aW9uLm9yZy9jb2xsYWJvcmF0ZS93b3JrZ3JvdXBzL25ldHdvcmtpbmcvaXByb3V0ZTJcXHUwMDNlLlxcbiAgMzA6XFx0XFxuICAzMTpcXHRcXHQgIFRoaXMgUXVhbGl0eSBvZiBTZXJ2aWNlIChRb1MpIHN1cHBvcnQgd2lsbCBlbmFibGUgeW91IHRvIHVzZVxcbiAgMzI6XFx0XFx0ICBEaWZmZXJlbnRpYXRlZCBTZXJ2aWNlcyAoZGlmZnNlcnYpIGFuZCBSZXNvdXJjZSBSZXNlcnZhdGlvbiBQcm90b2NvbFxcbiAgMzM6XFx0XFx0ICAoUlNWUCkgb24geW91ciBMaW51eCByb3V0ZXIgaWYgeW91IGFsc28gc2F5IFkgdG8gdGhlIGNvcnJlc3BvbmRpbmdcXG4gIDM0OlxcdFxcdCAgY2xhc3NpZmllcnMgYmVsb3cuICBEb2N1bWVudGF0aW9uIGFuZCBzb2Z0d2FyZSBpcyBhdFxcbiAgMzU6XFx0XFx0ICBcXHUwMDNjaHR0cDovL2RpZmZzZXJ2LnNvdXJjZWZvcmdlLm5ldC9cXHUwMDNlLlxcbiAgMzY6XFx0XFxuICAzNzpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlIGFuZCB0byBcXFwiL3Byb2MgZmlsZSBzeXN0ZW1cXFwiIGJlbG93LCB5b3Ugd2lsbCBiZSBhYmxlXFxuICAzODpcXHRcXHQgIHRvIHJlYWQgc3RhdHVzIGluZm9ybWF0aW9uIGFib3V0IHBhY2tldCBzY2hlZHVsZXJzIGZyb20gdGhlIGZpbGVcXG4gIDM5OlxcdFxcdCAgL3Byb2MvbmV0L3BzY2hlZC5cXG4gIDQwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzowNjo0OS4wOTcwNDc1ODhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjk0NDg3MDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipEaXZpbmcgaW50byB0aGUgVEFQUklPIFNjaGVkdWxlciBDb2RlKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCBhIHF1aWNrIHJlZnJlc2hlciBvbiB0aGUgYG5ldC9zY2hlZC9zY2hfdGFwcmlvLmNgIGNvZGUuIE15IGZpcnN0IHN0ZXAgaXMgdG8gcXVpY2tseSBpZGVudGlmeSBhbGwgdGhlIGVudHJ5IHBvaW50cyBhbmQgdGhlIGNydWNpYWwgZnVuY3Rpb25zIGRlZmluZWQgd2l0aGluIHRoaXMgZmlsZS4gVGhpcyBnaXZlcyBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIFRhcHJpbyBzY2hlZHVsZXIncyBjb3JlIGZ1bmN0aW9uYWxpdHksIGxheWluZyB0aGUgZm91bmRhdGlvbiBmb3IgYSBkZWVwZXIgZGl2ZS4gTmV4dCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCdzIGJlZW4gZGVmaW5lZCBpbiB0aGUgZmlsZS4gRXNzZW50aWFsbHksIEknbGwgbmVlZCB0byBrbm93IHdoYXQgc3ltYm9scyBhcmUgZXhwb3NlZCBieSBgc2NoX3RhcHJpby5jYCBpbiBvcmRlciB0byBzZWUgd2hhdCB0aGUgbW9kdWxlIGlzIGRvaW5nLiBXaXRoIHRoaXMgY29udGV4dCwgSSBjYW4gZ3Jhc3AgdGhlIHNjaGVkdWxlcidzIGFyY2hpdGVjdHVyZSBhbmQgaG93IGl0cyBlbGVtZW50cyBpbnRlcnJlbGF0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTcxMCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6MDY6NTEuMzkxNTM2NjI4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzMyOTAyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJec3RhdGljIChpbnR8dm9pZHxzdHJ1Y3R8ZW51bSlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL3NjaF90YXByaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvc2NoX3RhcHJpby5jPTM1PXN0YXRpYyBMSVNUX0hFQUQodGFwcmlvX2xpc3QpO1xcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MzY6c3RhdGljIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHRhcHJpb19oYXZlX2Jyb2tlbl9tcXByaW87XFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzozNzpzdGF0aWMgc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgdGFwcmlvX2hhdmVfd29ya2luZ19tcXByaW87XFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0zOC1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MTE4PXN0cnVjdCBfX3RjX3RhcHJpb19xb3B0X29mZmxvYWQge1xcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMjItXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMjM6c3RhdGljIHZvaWQgdGFwcmlvX2NhbGN1bGF0ZV9nYXRlX2R1cmF0aW9ucyhzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTI0LVxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZClcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MTk1PXN0YXRpYyBrdGltZV90IHRhcHJpb19nZXRfdGltZShjb25zdCBzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxKVxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xOTktXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyMDA6c3RhdGljIHZvaWQgdGFwcmlvX2ZyZWVfc2NoZWRfY2Ioc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjAxLXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjEyLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjEzOnN0YXRpYyB2b2lkIHN3aXRjaF9zY2hlZHVsZXMoc3RydWN0IHRhcHJpb19zY2hlZCAqcSxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIxNC1cXHRcXHRcXHQgICAgIHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKiphZG1pbixcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MjM5PXN0YXRpYyBrdGltZV90IGdldF9pbnRlcnZhbF9lbmRfdGltZShzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjYwLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjYxOnN0YXRpYyBpbnQgbGVuZ3RoX3RvX2R1cmF0aW9uKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIGludCBsZW4pXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNjIte1xcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNjUtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNjY6c3RhdGljIGludCBkdXJhdGlvbl90b19sZW5ndGgoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgdTY0IGR1cmF0aW9uKVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjY3LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjc0LSAqL1xcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6Mjc1OnN0YXRpYyB2b2lkIHRhcHJpb191cGRhdGVfcXVldWVfbWF4X3NkdShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjc2LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkLFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0zMjYtICovXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzozMjc6c3RhdGljIHN0cnVjdCBzY2hlZF9lbnRyeSAqZmluZF9lbnRyeV90b190cmFuc21pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMzI4LVxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IFFkaXNjICpzY2gsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTU0ND1zdGF0aWMgYm9vbCB0YXByaW9fc2tiX2V4Y2VlZHNfcXVldWVfbWF4X3NkdShzdHJ1Y3QgUWRpc2MgKnNjaCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNTY0LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6NTY1OnN0YXRpYyBpbnQgdGFwcmlvX2VucXVldWVfb25lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNTY2LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBRZGlzYyAqY2hpbGQsIHN0cnVjdCBza19idWZmICoqdG9fZnJlZSlcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNTg1LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6NTg2OnN0YXRpYyBpbnQgdGFwcmlvX2VucXVldWVfc2VnbWVudGVkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNTg3LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgUWRpc2MgKmNoaWxkLFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy02MzAtICovXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzo2MzE6c3RhdGljIGludCB0YXByaW9fZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTYzMi1cXHRcXHRcXHQgIHN0cnVjdCBza19idWZmICoqdG9fZnJlZSlcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNjU5LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6NjYwOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdGFwcmlvX3BlZWsoc3RydWN0IFFkaXNjICpzY2gpXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy02NjEte1xcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy02NjUtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzo2NjY6c3RhdGljIHZvaWQgdGFwcmlvX3NldF9idWRnZXRzKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy02NjctXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkLFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy02ODYtLyogV2hlbiBhbiBza2IgaXMgc2VudCwgaXQgY29uc3VtZXMgZnJvbSB0aGUgYnVkZ2V0IG9mIGFsbCB0cmFmZmljIGNsYXNzZXMgKi9cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjY4NzpzdGF0aWMgaW50IHRhcHJpb191cGRhdGVfYnVkZ2V0cyhzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5LCBzaXplX3QgbGVuLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNjg4LVxcdFxcdFxcdFxcdCBpbnQgdGNfY29uc3VtZWQsIGludCBudW1fdGMpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTcwOS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjcxMDpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnRhcHJpb19kZXF1ZXVlX2Zyb21fdHhxKHN0cnVjdCBRZGlzYyAqc2NoLCBpbnQgdHhxLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNzExLVxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5LFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy03NjYtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzo3Njc6c3RhdGljIHZvaWQgdGFwcmlvX25leHRfdGNfdHhxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCB0YywgaW50ICp0eHEpXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy03Njgte1xcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy03ODAtICovXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzo3ODE6c3RhdGljIHN0cnVjdCBza19idWZmICp0YXByaW9fZGVxdWV1ZV90Y19wcmlvcml0eShzdHJ1Y3QgUWRpc2MgKnNjaCxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTc4Mi1cXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnksXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTgxNi0gKi9cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjgxNzpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnRhcHJpb19kZXF1ZXVlX3R4cV9wcmlvcml0eShzdHJ1Y3QgUWRpc2MgKnNjaCxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTgxOC1cXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5LFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy04MzYtICovXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzo4Mzc6c3RhdGljIHN0cnVjdCBza19idWZmICp0YXByaW9fZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTgzOC17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTg5MD1zdGF0aWMgYm9vbCBzaG91bGRfY2hhbmdlX3NjaGVkdWxlcyhjb25zdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICphZG1pbixcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtOTIzLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6OTI0OnN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBhZHZhbmNlX3NjaGVkKHN0cnVjdCBocnRpbWVyICp0aW1lcilcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTkyNS17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTEwNTM9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHRhcHJpb19wb2xpY3lbVENBX1RBUFJJT19BVFRSX01BWCArIDFdID0ge1xcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMDY5LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTA3MDpzdGF0aWMgaW50IGZpbGxfc2NoZWRfZW50cnkoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTA3MS1cXHRcXHRcXHQgICAgc3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeSxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTEwMS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjExMDI6c3RhdGljIGludCBwYXJzZV9zY2hlZF9lbnRyeShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICpuLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTEwMy1cXHRcXHRcXHQgICAgIHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnksIGludCBpbmRleCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTEyMC1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjExMjE6c3RhdGljIGludCBwYXJzZV9zY2hlZF9saXN0KHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKmxpc3QsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMTIyLVxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTE2MC1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjExNjE6c3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTE2Mi1cXHRcXHRcXHRcXHQgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqbmV3LFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMjExLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTIxMjpzdGF0aWMgaW50IHRhcHJpb19wYXJzZV9tcXByaW9fb3B0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMjEzLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTIzOS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjEyNDA6c3RhdGljIGludCB0YXByaW9fZ2V0X3N0YXJ0X3RpbWUoc3RydWN0IFFkaXNjICpzY2gsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMjQxLVxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTI3My1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjEyNzQ6c3RhdGljIHZvaWQgc2V0dXBfZmlyc3RfZW5kX3RpbWUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEyNzUtXFx0XFx0XFx0XFx0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkLCBrdGltZV90IGJhc2UpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEzMDMtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMzA0OnN0YXRpYyB2b2lkIHRhcHJpb19zdGFydF9zY2hlZChzdHJ1Y3QgUWRpc2MgKnNjaCxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEzMDUtXFx0XFx0XFx0ICAgICAgIGt0aW1lX3Qgc3RhcnQsIHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKm5ldylcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTMyNS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjEzMjY6c3RhdGljIHZvaWQgdGFwcmlvX3NldF9waWNvc19wZXJfYnl0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTMyNy1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMzU5LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTM2MDpzdGF0aWMgaW50IHRhcHJpb19kZXZfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBldmVudCxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEzNjEtXFx0XFx0XFx0ICAgICAgIHZvaWQgKnB0cilcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTM5Ni1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjEzOTc6c3RhdGljIHZvaWQgc2V0dXBfdHh0aW1lKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMzk4LVxcdFxcdFxcdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZCwga3RpbWVfdCBiYXNlKVxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNDA4LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTQwOTpzdGF0aWMgc3RydWN0IHRjX3RhcHJpb19xb3B0X29mZmxvYWQgKnRhcHJpb19vZmZsb2FkX2FsbG9jKGludCBudW1fZW50cmllcylcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE0MTAte1xcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xNDQ4PUVYUE9SVF9TWU1CT0xfR1BMKHRhcHJpb19vZmZsb2FkX2ZyZWUpO1xcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNDYxLSAqL1xcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTQ2MjpzdGF0aWMgdm9pZCB0YXByaW9fb2ZmbG9hZF9jb25maWdfY2hhbmdlZChzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxKVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTQ2My17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTE0NzI9c3RhdGljIHUzMiB0Y19tYXBfdG9fcXVldWVfbWFzayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgdGNfbWFzaylcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTQ5MC1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE0OTE6c3RhdGljIHZvaWQgdGFwcmlvX3NjaGVkX3RvX29mZmxvYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE0OTItXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkLFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNTE5LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTUyMDpzdGF0aWMgdm9pZCB0YXByaW9fZGV0ZWN0X2Jyb2tlbl9tcXByaW8oc3RydWN0IHRhcHJpb19zY2hlZCAqcSlcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE1MjEte1xcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNTM2LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTUzNzpzdGF0aWMgdm9pZCB0YXByaW9fY2xlYW51cF9icm9rZW5fbXFwcmlvKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEpXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNTM4LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTU0Ny1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE1NDg6c3RhdGljIGludCB0YXByaW9fZW5hYmxlX29mZmxvYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE1NDktXFx0XFx0XFx0XFx0IHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE2MTMtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxNjE0OnN0YXRpYyBpbnQgdGFwcmlvX2Rpc2FibGVfb2ZmbG9hZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTYxNS1cXHRcXHRcXHRcXHQgIHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE2NTQtICovXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxNjU1OnN0YXRpYyBpbnQgdGFwcmlvX3BhcnNlX2Nsb2NraWQoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKip0YixcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE2NTYtXFx0XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNzMyLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTczMzpzdGF0aWMgaW50IHRhcHJpb19wYXJzZV90Y19lbnRyeShzdHJ1Y3QgUWRpc2MgKnNjaCxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE3MzQtXFx0XFx0XFx0XFx0IHN0cnVjdCBubGF0dHIgKm9wdCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTc3OS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE3ODA6c3RhdGljIGludCB0YXByaW9fcGFyc2VfdGNfZW50cmllcyhzdHJ1Y3QgUWRpc2MgKnNjaCxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE3ODEtXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5sYXR0ciAqb3B0LFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xODI5LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTgzMDpzdGF0aWMgaW50IHRhcHJpb19tcXByaW9fY21wKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xODMxLVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHRjX21xcHJpb19xb3B0ICptcXByaW8pXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE4NTMtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxODU0OnN0YXRpYyBpbnQgdGFwcmlvX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTg1NS1cXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMDQ4LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjA0OTpzdGF0aWMgdm9pZCB0YXByaW9fcmVzZXQoc3RydWN0IFFkaXNjICpzY2gpXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMDUwLXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjA2My1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIwNjQ6c3RhdGljIHZvaWQgdGFwcmlvX2Rlc3Ryb3koc3RydWN0IFFkaXNjICpzY2gpXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMDY1LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjEwMi1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIxMDM6c3RhdGljIGludCB0YXByaW9faW5pdChzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjEwNC1cXHRcXHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMTY3LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjE2ODpzdGF0aWMgdm9pZCB0YXByaW9fYXR0YWNoKHN0cnVjdCBRZGlzYyAqc2NoKVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjE2OS17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIyMDMtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyMjA0OnN0YXRpYyBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0YXByaW9fcXVldWVfZ2V0KHN0cnVjdCBRZGlzYyAqc2NoLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjIwNS1cXHRcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgY2wpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIyMTUtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyMjE2OnN0YXRpYyBpbnQgdGFwcmlvX2dyYWZ0KHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGNsLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjIxNy1cXHRcXHRcXHRzdHJ1Y3QgUWRpc2MgKm5ldywgc3RydWN0IFFkaXNjICoqb2xkLFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMjU4LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjI1OTpzdGF0aWMgaW50IGR1bXBfZW50cnkoc3RydWN0IHNrX2J1ZmYgKm1zZyxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIyNjAtXFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeSlcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjI4OC1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIyODk6c3RhdGljIGludCBkdW1wX3NjaGVkdWxlKHN0cnVjdCBza19idWZmICptc2csXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMjkwLVxcdFxcdFxcdCBjb25zdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpyb290KVxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMzI0LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjMyNTpzdGF0aWMgaW50IHRhcHJpb19kdW1wX3RjX2VudHJpZXMoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIzMjYtXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMzU3LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjM1ODpzdGF0aWMgaW50IHRhcHJpb19wdXRfc3RhdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1NjQgdmFsLCB1MTYgYXR0cnR5cGUpXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMzU5LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjM2Ni1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIzNjc6c3RhdGljIGludCB0YXByaW9fZHVtcF94c3RhdHMoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBnbmV0X2R1bXAgKmQsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMzY4LVxcdFxcdFxcdCAgICAgIHN0cnVjdCB0Y190YXByaW9fcW9wdF9vZmZsb2FkICpvZmZsb2FkLFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNDE0LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjQxNTpzdGF0aWMgaW50IHRhcHJpb19kdW1wX3N0YXRzKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgZ25ldF9kdW1wICpkKVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjQxNi17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI0MjMtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNDI0OnN0YXRpYyBpbnQgdGFwcmlvX2R1bXAoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNDI1LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjQ5My1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjI0OTQ6c3RhdGljIHN0cnVjdCBRZGlzYyAqdGFwcmlvX2xlYWYoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgY2wpXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNDk1LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MjUwNj1zdGF0aWMgdW5zaWduZWQgbG9uZyB0YXByaW9fZmluZChzdHJ1Y3QgUWRpc2MgKnNjaCwgdTMyIGNsYXNzaWQpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1MTQtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNTE1OnN0YXRpYyBpbnQgdGFwcmlvX2R1bXBfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgY2wsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNTE2LVxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjbXNnICp0Y20pXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1MjYtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNTI3OnN0YXRpYyBpbnQgdGFwcmlvX2R1bXBfY2xhc3Nfc3RhdHMoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgY2wsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNTI4LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBnbmV0X2R1bXAgKmQpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1NDYtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNTQ3OnN0YXRpYyB2b2lkIHRhcHJpb193YWxrKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgcWRpc2Nfd2Fsa2VyICphcmcpXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNTQ4LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjU2MS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjI1NjI6c3RhdGljIHN0cnVjdCBuZXRkZXZfcXVldWUgKnRhcHJpb19zZWxlY3RfcXVldWUoc3RydWN0IFFkaXNjICpzY2gsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNTYzLVxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCB0Y21zZyAqdGNtKVxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0yNTY4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgUWRpc2NfY2xhc3Nfb3BzIHRhcHJpb19jbGFzc19vcHMgPSB7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1NzctXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNTc4OnN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzIHRhcHJpb19xZGlzY19vcHMgX19yZWFkX21vc3RseSA9IHtcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1NzktXFx0LmNsX29wc1xcdFxcdD0gXFx1MDAyNnRhcHJpb19jbGFzc19vcHMsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTI1OTQ9TU9EVUxFX0FMSUFTX05FVF9TQ0goXFxcInRhcHJpb1xcXCIpO1xcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjU5NS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjI1OTY6c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB0YXByaW9fZGV2aWNlX25vdGlmaWVyID0ge1xcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjU5Ny1cXHQubm90aWZpZXJfY2FsbCA9IHRhcHJpb19kZXZfbm90aWZpZXIsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1OTktXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNjAwOnN0YXRpYyBpbnQgX19pbml0IHRhcHJpb19tb2R1bGVfaW5pdCh2b2lkKVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjYwMS17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI2MDktXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNjEwOnN0YXRpYyB2b2lkIF9fZXhpdCB0YXByaW9fbW9kdWxlX2V4aXQodm9pZClcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI2MTEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzowNjo1MS40Mzg4NzA3MjdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjU4NTY0MzEzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRhcHJpbyBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2guIEknbSBsb29raW5nIGF0IG1vZGlmaWNhdGlvbnMgdG8gYG5ldC9zY2hlZC9zY2hfdGFwcmlvLmNgLCBzcGVjaWZpY2FsbHkgYGFkdmFuY2Vfc2NoZWRgIGFuZCBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYC4gSW4gYGFkdmFuY2Vfc2NoZWRgLCB3ZSBoYXZlIHRoZSBocnRpbWVyIGNhbGxiYWNrIGFkdmFuY2luZyB0aGUgVGFwcmlvIHNjaGVkdWxlLiBUaGUga2V5IGhlcmUgaXMgdGhlIGNhdGNoLXVwIGxvZ2ljIHdoZW4gdGhlIHNjaGVkdWxlIGxhZ3Mg4oCTIGBrdGltZV9zdWJgLCB0aGUgYHVubGlrZWx5YCBjaGVja3MsIGFuZCB0aGF0IGBkby4uLndoaWxlYCBsb29wIGFkanVzdGluZyBmb3IgZGVsYXlzLiBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCwgY2FsY3VsYXRlcyB0aGUgbmV3IHBlcmlvZC5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiQ2FuIHRoaXMgYmUgaGl0IGluIGEgdGVzdCBlbnZpcm9ubWVudD9cIiBBYnNvbHV0ZWx5LiBUYXByaW8gY2FuIHJ1biBvbiAqYW55KiBuZXR3b3JrIGludGVyZmFjZSwgd2hldGhlciBpdCdzIHNvZnR3YXJlLWJhc2VkIHVzaW5nIGhydGltZXIgb3Igb24gdGhlIHVzdWFsIHRhcC92ZXRoL2R1bW15IGludGVyZmFjZXMgdmlhIGB0YyBxZGlzYyBhZGQgLi4uYC4gU28sIHdlIGNhbiBkZWZpbml0ZWx5IHJlcGxpY2F0ZSB0aGlzLlxuXG5UaGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgdG91Y2hpbmcgY29yZSBuZXR3b3JrIHRyYWZmaWMgY29udHJvbCBsb2dpYyB3aXRoaW4gdGhlIGtlcm5lbC4gSXTigJlzIG1vZGlmeWluZyB0aGUgY3JpdGljYWwgdGltZXIgYWR2YW5jZW1lbnQgYWxnb3JpdGhtIGFuZCBzY2hlZHVsZSBjYWxjdWxhdGlvbiB3aXRoaW4gdGhlIFRhcHJpbyBxZGlzYywgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgZGV0ZXJtaW5pc3RpYyBzY2hlZHVsaW5nLiBEZWZpbml0ZWx5IHdvcnRoIGEgZGVlcGVyIGxvb2suXG5cbk5vdywgbGV0J3MgdGFsayBmdXp6aW5nLiBZZXMsIHRoaXMgaXMgYSBjbGVhciBjYW5kaWRhdGUuIFdl4oCZcmUgZGVhbGluZyB3aXRoIGZ1bmN0aW9uYWwgbmV0d29yayBxZGlzYyBsb2dpYyB0aGF0J3MgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayAocnRuZXRsaW5rIC8gdGMpLiBUaGF04oCZcyBhIGdyZWF0IGF0dGFjayBzdXJmYWNlLlxuXG5MZXTigJlzIHplcm8gaW4gb24gdGhlIGtleSBzeW1ib2xzOiBgYWR2YW5jZV9zY2hlZGAgKHRoZSBocnRpbWVyIGNhbGxiYWNrKSwgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgKHRoZSBzY2hlZHVsZSBwYXJzaW5nKSwgYHRhcHJpb19jaGFuZ2VgICh0aGUgbmV0bGluayBlbnRyeSBwb2ludCBmb3IgY29uZmlndXJhdGlvbiBjYWxsaW5nIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgKSwgYHRhcHJpb19pbml0YCwgYW5kIGB0YXByaW9fZGVxdWV1ZWAuIFRoZXNlIGFyZSBvdXIgZm9jdXMgcG9pbnRzLlxuXG5JJ20gY2hlY2tpbmcgZm9yIGV4cG9ydGVkIG5vbi1zdGF0aWMgc3ltYm9scyBhbmQgbWFpbiBlbnRyeXBvaW50cy4gYHRhcHJpb19xZGlzY19vcHNgIGlzIHJlZ2lzdGVyZWQgaW4gYHRhcHJpb19tb2R1bGVfaW5pdGAsIGFuZCB3ZSBoYXZlIGB0YXByaW9faW5pdGAsIGB0YXByaW9fY2hhbmdlYCwgYGFkdmFuY2Vfc2NoZWRgLCBhbmQgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgYXZhaWxhYmxlLiBHcmVhdC5cblxuTm93LCB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMuIGBORVRfU0NIX1RBUFJJT2AgaXMgdW5kZXIgYG1lbnVjb25maWcgTkVUX1NDSEVEYCwgd2hpY2ggaXMgdW5kZXIgYG5ldC9LY29uZmlnYC4gYE5FVF9TQ0hfVEFQUklPYCBzZWxlY3RzIGBORVRfU0NIX01RUFJJT19MSUJgLiAgV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGltcGFjdCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTU5MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzowNjo1OC4wMjQ1MTcxMzZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwNDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQwOlxcdFxcbiAgNDE6XFx0XFx0ICBUaGUgYXZhaWxhYmxlIHNjaGVkdWxlcnMgYXJlIGxpc3RlZCBpbiB0aGUgZm9sbG93aW5nIHF1ZXN0aW9uczsgeW91XFxuICA0MjpcXHRcXHQgIGNhbiBzYXkgWSB0byBhcyBtYW55IGFzIHlvdSBsaWtlLiBJZiB1bnN1cmUsIHNheSBOIG5vdy5cXG4gIDQzOlxcdFxcbiAgNDQ6XFx0aWYgTkVUX1NDSEVEXFxuICA0NTpcXHRcXG4gIDQ2OlxcdGNvbW1lbnQgXFxcIlF1ZXVlaW5nL1NjaGVkdWxpbmdcXFwiXFxuICA0NzpcXHRcXG4gIDQ4OlxcdGNvbmZpZyBORVRfU0NIX0hUQlxcbiAgNDk6XFx0XFx0dHJpc3RhdGUgXFxcIkhpZXJhcmNoaWNhbCBUb2tlbiBCdWNrZXQgKEhUQilcXFwiXFxuICA1MDpcXHRcXHRoZWxwXFxuICA1MTpcXHRcXHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBIaWVyYXJjaGljYWwgVG9rZW4gQnVja2V0cyAoSFRCKVxcbiAgNTI6XFx0XFx0ICBwYWNrZXQgc2NoZWR1bGluZyBhbGdvcml0aG0uIFNlZVxcbiAgNTM6XFx0XFx0ICBcXHUwMDNjaHR0cDovL2x1eGlrLmNkaS5jei9+ZGV2aWsvcW9zL2h0Yi9cXHUwMDNlIGZvciBjb21wbGV0ZSBtYW51YWwgYW5kXFxuICA1NDpcXHRcXHQgIGluLWRlcHRoIGFydGljbGVzLlxcbiAgNTU6XFx0XFxuICA1NjpcXHRcXHQgIEhUQiBpcyB2ZXJ5IHNpbWlsYXIgdG8gQ0JRIHJlZ2FyZGluZyBpdHMgZ29hbHMgaG93ZXZlciBpcyBoYXNcXG4gIDU3OlxcdFxcdCAgZGlmZmVyZW50IHByb3BlcnRpZXMgYW5kIGRpZmZlcmVudCBhbGdvcml0aG0uXFxuICA1ODpcXHRcXG4gIDU5OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAgNjA6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2NoX2h0Yi5cXG4gIDYxOlxcdFxcbiAgNjI6XFx0Y29uZmlnIE5FVF9TQ0hfSEZTQ1xcbiAgNjM6XFx0XFx0dHJpc3RhdGUgXFxcIkhpZXJhcmNoaWNhbCBGYWlyIFNlcnZpY2UgQ3VydmUgKEhGU0MpXFxcIlxcbiAgNjQ6XFx0XFx0aGVscFxcbiAgNjU6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgSGllcmFyY2hpY2FsIEZhaXIgU2VydmljZSBDdXJ2ZVxcbiAgNjY6XFx0XFx0ICAoSEZTQykgcGFja2V0IHNjaGVkdWxpbmcgYWxnb3JpdGhtLlxcbiAgNjc6XFx0XFxuICA2ODpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gIDY5OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNjaF9oZnNjLlxcbiAgNzA6XFx0XFxuICA3MTpcXHRjb25maWcgTkVUX1NDSF9QUklPXFxuICA3MjpcXHRcXHR0cmlzdGF0ZSBcXFwiTXVsdGkgQmFuZCBQcmlvcml0eSBRdWV1ZWluZyAoUFJJTylcXFwiXFxuICA3MzpcXHRcXHRoZWxwXFxuICA3NDpcXHRcXHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIGFuIG4tYmFuZCBwcmlvcml0eSBxdWV1ZSBwYWNrZXRcXG4gIDc1OlxcdFxcdCAgc2NoZWR1bGVyLlxcbiAgNzY6XFx0XFxuICA3NzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gIDc4OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNjaF9wcmlvLlxcbiAgNzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjA2OjU4LjAyNDYyOTc2NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDQ3MTQxOTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqS2NvbmZpZyBEaXZlIGZvciBORVRfU0NIRUQqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gbmV0d29ya2luZyBzY2hlZHVsZXJzLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGBuZXQvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBzdGFuZGFyZCBwbGFjZSBpbiB0aGUgTGludXgga2VybmVsIHNvdXJjZSBmb3IgbmV0d29yay1yZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSXQncyB0aGUgY2VudHJhbCBodWIgZm9yIG1vc3Qgb2YgdGhlIG5ldHdvcmsgZmVhdHVyZSBrbm9icy4gSSdtIGdvaW5nIHRvIHNjYW4gdGhhdCBmaWxlIGxvb2tpbmcgZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gXCJORVRfU0NIRURcIi4gSXQgc2hvdWxkIGJlIGRlZmluZWQgdGhlcmUsIGFuZCBmcm9tIHRoZXJlIEkgY2FuIGZpbmQgaXRzIGRlcGVuZGVuY2llcywgYW5kIGl0J3MgZGVmYXVsdCBiZWhhdmlvci4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIHR1cm4gdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzQ5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzowNzowMC4wNzE3NzU3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjYzMDA5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb3VyY2UuKm5ldC9zY2hlZC9LY29uZmlnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz0yNjk9c291cmNlIFxcXCJuZXQvbWFjODAyMTU0L0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6MjcwOnNvdXJjZSBcXFwibmV0L3NjaGVkL0tjb25maWdcXFwiXFxubmV0L0tjb25maWctMjcxLXNvdXJjZSBcXFwibmV0L2RjYi9LY29uZmlnXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzowNzowMC4xNDQ0MTEzNjlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDg5MjEwNDcwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQnVpbGQgUHJvY2VzcyBmb3IgYHNjaF90YXByaW8uY2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgc2NoX3RhcHJpby5jYCB0cmFmZmljIGNvbnRyb2wgc2NoZWR1bGVyIG1vZHVsZSBpcyBiZWluZyBjb21waWxlZC4gVG8gZG8gdGhhdCwgdGhlIG1vc3QgZGlyZWN0IGFwcHJvYWNoIGlzIHRvIGV4YW1pbmUgdGhlIGBuZXQvc2NoZWQvTWFrZWZpbGVgLiBUaGlzIGlzIHdoZXJlIHRoZSBidWlsZCBzeXN0ZW0gY29uZmlndXJhdGlvbiBmb3IgdGhlc2UgbmV0d29yayBzY2hlZHVsaW5nIGNvbXBvbmVudHMgcmVzaWRlcywgYW5kIGl0IHNob3VsZCByZXZlYWwgdGhlIHJlbGV2YW50IGNvbXBpbGF0aW9uIGZsYWdzLCBkZXBlbmRlbmNpZXMsIGFuZCB1bHRpbWF0ZWx5LCBob3cgYHNjaF90YXByaW8uY2AgZ2V0cyB0cmFuc2Zvcm1lZCBpbnRvIG9iamVjdCBjb2RlIGFuZCBsaW5rZWQgaW50byB0aGUga2VybmVsIG1vZHVsZS4gVGhpcyBpcyB0aGUgcGxhY2UgdG8gc3RhcnQgZHJpbGxpbmcgZG93biBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBidWlsZCBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzYxMywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjA3OjA1LjAzNjUxODM0M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcxNjU5MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2NoX3RhcHJpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWc9MTcyPWNvbmZpZyBORVRfU0NIX1RBUFJJT1xcbi0tXFxubmV0L3NjaGVkL0tjb25maWctMTc4LVxcbm5ldC9zY2hlZC9LY29uZmlnOjE3OTpcXHQgIFNlZSB0aGUgdG9wIG9mIFxcdTAwM2NmaWxlOm5ldC9zY2hlZC9zY2hfdGFwcmlvLmNcXHUwMDNlIGZvciBtb3JlIGRldGFpbHMuXFxubmV0L3NjaGVkL0tjb25maWctMTgwLVxcbm5ldC9zY2hlZC9LY29uZmlnLTE4MS1cXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG5uZXQvc2NoZWQvS2NvbmZpZzoxODI6XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2NoX3RhcHJpby5cXG5uZXQvc2NoZWQvS2NvbmZpZy0xODMtXFxuLS1cXG5uZXQvc2NoZWQvTWFrZWZpbGU9NjM9b2JqLSQoQ09ORklHX05FVF9TQ0hfRVRGKVxcdCs9IHNjaF9ldGYub1xcbm5ldC9zY2hlZC9NYWtlZmlsZTo2NDpvYmotJChDT05GSUdfTkVUX1NDSF9UQVBSSU8pXFx0Kz0gc2NoX3RhcHJpby5vXFxubmV0L3NjaGVkL01ha2VmaWxlLTY1LW9iai0kKENPTkZJR19ORVRfU0NIX0JQRilcXHQrPSBicGZfcWRpc2Mub1xcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MzovKiBuZXQvc2NoZWQvc2NoX3RhcHJpby5jXFx0IFRpbWUgQXdhcmUgUHJpb3JpdHkgU2NoZWR1bGVyXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy00LSAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjA3OjA1LjA4MzY4ODE2MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTc4MzIxNzg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEkndmUgZ290IHNvbWUgbmV3IGNvbmZpZ3VyYXRpb25zIHRvIGNvbnNpZGVyOiBgTkVUX1NDSEVEYCBhbmQgYE5FVF9TQ0hfVEFQUklPYC4gTXkgcHJpbWFyeSBmb2N1cywgYmFzZWQgb24gdGhlc2UgY29uZmlndXJhdGlvbnMsIHdpbGwgYmUgb24gdGhlc2Ugc3ltYm9sczogYGFkdmFuY2Vfc2NoZWRgLCBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCwgYHRhcHJpb19jaGFuZ2VgLCBhbmQgYHRhcHJpb19pbml0YC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgYW5kL29yIHZhcmlhYmxlcyB0aGF0IGFyZSBsaWtlbHkgdG8gc2VlIHNvbWUgY2hhbmdlcyB3aXRoIHRoZXNlIGNvbmZpZ3MgZW5hYmxlZC5cblxuSSd2ZSBhbHJlYWR5IGRldGVybWluZWQgdGhhdCB0aGlzIGFyZWEgaXMgYFdvcnRoRnV6emluZ2AuIFRoZSByZWFzb25pbmcgc3VwcG9ydGluZyB0aGF0IGlzIGNvbmNpc2UsIGFuZCBJIG5lZWQgdG8gcmVjYWxsIHRoYXQgcmVhc29uaW5nIHNvIEkgZG9uJ3QgcmVwZWF0IG15c2VsZi5cblxuTGV0J3MgcXVpY2tseSBjb25maXJtOiBJIHdhbnQgdG8gYmUgdXNpbmcgYWxsIHRoZSBgRW5hYmxlQ29uZmlnc2A6IGBORVRfU0NIRURgLCBhbmQgYE5FVF9TQ0hfVEFQUklPYC4gSSdtIGdvaW5nIHRvIGxldmVyYWdlIGBGb2N1c1N5bWJvbHNgOiBgYWR2YW5jZV9zY2hlZGAsIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgLCBgdGFwcmlvX2NoYW5nZWAsIGFuZCBgdGFwcmlvX2luaXRgLiBBbmQgdGhlbiwgSSBuZWVkIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4gRG9uZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MTQxMTksIk91dHB1dFRva2VucyI6MTU2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjA3OjA4LjI2MjAxMjgwN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NDI0MjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIk5FVF9TQ0hfVEFQUklPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWR2YW5jZV9zY2hlZFwiLFxuICAgIFwicGFyc2VfdGFwcmlvX3NjaGVkdWxlXCIsXG4gICAgXCJ0YXByaW9fY2hhbmdlXCIsXG4gICAgXCJ0YXByaW9faW5pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzY2hlZHVsZSBwYXJzaW5nIGFuZCBocnRpbWVyIGFkdmFuY2UgYWxnb3JpdGhtIGluIHRoZSBUQVBSSU8gKFRpbWUtQXdhcmUgUHJpb3JpdHkpIHBhY2tldCBzY2hlZHVsZXIgKHNjaF90YXByaW8pLiBTcGVjaWZpY2FsbHksIGl0IGZpeGVzIGN5Y2xlIGNhdGNoLXVwIGxvZ2ljIHdoZW4gdGhlIHRpbWVyIGlzIGRlbGF5ZWQgb3IgdGhlIGNsb2NrIGlzIHN0ZXBwZWQgYnkgY2FsY3VsYXRpbmcgcGVyaW9kcyBhbmQgbGVhcGluZyBmb3J3YXJkLCBhbmQgYm91bmRzIHRoZSBzY2hlZHVsZSBjYXRjaC11cCBsb29wLiBUaGlzIG1vZGlmaWVzIGNvcmUgdHJhZmZpYyBjb250cm9sIHNjaGVkdWxpbmcgbG9naWMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIGNvbmZpZ3VyYXRpb24gYW5kIG5ldHdvcmsgcGFja2V0IHRyYW5zbWlzc2lvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIk5FVF9TQ0hfVEFQUklPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWR2YW5jZV9zY2hlZFwiLFxuICAgIFwicGFyc2VfdGFwcmlvX3NjaGVkdWxlXCIsXG4gICAgXCJ0YXByaW9fY2hhbmdlXCIsXG4gICAgXCJ0YXByaW9faW5pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzY2hlZHVsZSBwYXJzaW5nIGFuZCBocnRpbWVyIGFkdmFuY2UgYWxnb3JpdGhtIGluIHRoZSBUQVBSSU8gKFRpbWUtQXdhcmUgUHJpb3JpdHkpIHBhY2tldCBzY2hlZHVsZXIgKHNjaF90YXByaW8pLiBTcGVjaWZpY2FsbHksIGl0IGZpeGVzIGN5Y2xlIGNhdGNoLXVwIGxvZ2ljIHdoZW4gdGhlIHRpbWVyIGlzIGRlbGF5ZWQgb3IgdGhlIGNsb2NrIGlzIHN0ZXBwZWQgYnkgY2FsY3VsYXRpbmcgcGVyaW9kcyBhbmQgbGVhcGluZyBmb3J3YXJkLCBhbmQgYm91bmRzIHRoZSBzY2hlZHVsZSBjYXRjaC11cCBsb29wLiBUaGlzIG1vZGlmaWVzIGNvcmUgdHJhZmZpYyBjb250cm9sIHNjaGVkdWxpbmcgbG9naWMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIGNvbmZpZ3VyYXRpb24gYW5kIG5ldHdvcmsgcGFja2V0IHRyYW5zbWlzc2lvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6MDc6MDguMzM4NDQzODA2WiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTU2NTg1MDU3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjA3OjA4LjMzODkxMDI5NloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE5NTY1Mzc5ODk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIHRoZSBzY2hlZHVsZSBhZHZhbmNlbWVudCBhbmQgY3ljbGUgcmVjYWxjdWxhdGlvbiBsb2dpYyBpbiB0aGUgdGFwcmlvIHFkaXNjIChzY2hfdGFwcmlvLmMpIHRvIGhhbmRsZSBkZWxheWVkIHRpbWVycyBhbmQgY2xvY2sgc3RlcHBpbmcgYnkgYm91bmRpbmcgY2F0Y2gtdXAgaXRlcmF0aW9ucyBhbmQgaW50cm9kdWNpbmcgYW4gaW50ZXJuYWwgYHBlcmlvZGAgZmllbGQgaW4gYHN0cnVjdCBzY2hlZF9nYXRlX2xpc3RgLlxcblxcbi0gVW5pbml0aWFsaXplZCBNZW1vcnkgLyBJbmZvLWxlYWsgQW5hbHlzaXM6XFxuICAxLiBUaGUgbmV3IGBwZXJpb2RgIGZpZWxkIGluIGBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0YCBpcyBjb21wdXRlZCBkdXJpbmcgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgYW5kIHN0b3JlZCBpbiBtZW1vcnkgYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmpgLiBJdCBpcyBub3QgZXhwb3J0ZWQgb3IgZHVtcGVkIHRvIHVzZXJzcGFjZSBpbiBgZHVtcF9zY2hlZHVsZWAuXFxuICAyLiBBbGwgbG9jYWwgdmFyaWFibGVzIGludHJvZHVjZWQgaW4gYGFkdmFuY2Vfc2NoZWRgIChgbm93YCwgYGVuZF90aW1lYCwgYG5leHRfc3RhcnRgLCBgYnVkZ2V0YCwgYGJlaGluZGApIGFuZCBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCAoYGN5Y2xlYCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHJlYWRpbmcgb3IgYnJhbmNoaW5nIG9uIHRoZW0uXFxuICAzLiBObyBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucywgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHJlYWRzIGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZSBvciBrZXJuZWwgY29udHJvbCBmbG93Llxcblxcbi0gS0FTQU4gdnMgS01TQU4gQXBwbGljYWJpbGl0eTpcXG4gIEFueSBjb25jdXJyZW5jeSwgbGlzdCB0cmF2ZXJzYWwsIG9yIGJvdW5kcyBpc3N1ZXMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIGxvY2tkZXAuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3IgaW5mby1sZWFrIHJpc2tzIHJlcXVpcmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHJ1bi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkMDQ0YjhiZDA0Mjc4ZTBjNjgyNDE1MDZkMzU5NTA3MTA1MzNkYmI2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMSAyMzowNjozNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfdGFwcmlvLmMgYi9uZXQvc2NoZWQvc2NoX3RhcHJpby5jXG5pbmRleCAzOWFjNWI5N2FhM2FmLi45MDFkZmQyNDg0ZTEwIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF90YXByaW8uY1xuKysrIGIvbmV0L3NjaGVkL3NjaF90YXByaW8uY1xuQEAgLTgzLDYgKzgzLDEwIEBAIHN0cnVjdCBzY2hlZF9nYXRlX2xpc3Qge1xuIFx0czY0IGN5Y2xlX3RpbWU7XG4gXHRzNjQgY3ljbGVfdGltZV9leHRlbnNpb247XG4gXHRzNjQgYmFzZV90aW1lO1xuK1x0LyogbWluKGN5Y2xlX3RpbWUsIHN1bSBvZiBpbnRlcnZhbHMpOiB0aGUgc29mdHdhcmUgc2NoZWR1bGUgcmVzdGFydHNcbitcdCAqIHRoZSBsaXN0IGFmdGVyIHRoZSBsYXN0IGVudHJ5IGV2ZW4gd2hlbiBjeWNsZV90aW1lIGlzIG5vdCB1cCB5ZXQuXG4rXHQgKi9cbitcdHM2NCBwZXJpb2Q7XG4gfTtcbiBcbiBzdHJ1Y3QgdGFwcmlvX3NjaGVkIHtcbkBAIC04NzEsMTIgKzg3NSwxMyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnRhcHJpb19kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxuIH1cbiBcbiBzdGF0aWMgYm9vbCBzaG91bGRfcmVzdGFydF9jeWNsZShjb25zdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpvcGVyLFxuLVx0XHRcdFx0IGNvbnN0IHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnkpXG4rXHRcdFx0XHQgY29uc3Qgc3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeSxcbitcdFx0XHRcdCBrdGltZV90IGVuZF90aW1lKVxuIHtcbiBcdGlmIChsaXN0X2lzX2xhc3QoXHUwMDI2ZW50cnktXHUwMDNlbGlzdCwgXHUwMDI2b3Blci1cdTAwM2VlbnRyaWVzKSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4tXHRpZiAoa3RpbWVfY29tcGFyZShlbnRyeS1cdTAwM2VlbmRfdGltZSwgb3Blci1cdTAwM2VjeWNsZV9lbmRfdGltZSkgPT0gMClcbitcdGlmIChrdGltZV9jb21wYXJlKGVuZF90aW1lLCBvcGVyLVx1MDAzZWN5Y2xlX2VuZF90aW1lKSA9PSAwKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdHJldHVybiBmYWxzZTtcbkBAIC05MjUsOCArOTMwLDkgQEAgc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGFkdmFuY2Vfc2NoZWQoc3RydWN0IGhydGltZXIgKnRpbWVyKVxuIFx0aW50IG51bV90YyA9IG5ldGRldl9nZXRfbnVtX3RjKGRldik7XG4gXHRzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5LCAqbmV4dDtcbiBcdHN0cnVjdCBRZGlzYyAqc2NoID0gcS1cdTAwM2Vyb290O1xuLVx0a3RpbWVfdCBlbmRfdGltZTtcbi1cdGludCB0YztcbitcdGt0aW1lX3QgZW5kX3RpbWUsIG5leHRfc3RhcnQsIG5vdztcbitcdGludCBidWRnZXQsIHRjO1xuK1x0czY0IGJlaGluZDtcbiBcbiBcdHNwaW5fbG9jayhcdTAwMjZxLVx1MDAzZWN1cnJlbnRfZW50cnlfbG9jayk7XG4gXHRlbnRyeSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocS1cdTAwM2VjdXJyZW50X2VudHJ5LFxuQEAgLTk1MiwyMyArOTU4LDQ5IEBAIHN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBhZHZhbmNlX3NjaGVkKHN0cnVjdCBocnRpbWVyICp0aW1lcilcbiBcdFx0Z290byBmaXJzdF9ydW47XG4gXHR9XG4gXG4tXHRpZiAoc2hvdWxkX3Jlc3RhcnRfY3ljbGUob3BlciwgZW50cnkpKSB7XG4tXHRcdG5leHQgPSBsaXN0X2ZpcnN0X2VudHJ5KFx1MDAyNm9wZXItXHUwMDNlZW50cmllcywgc3RydWN0IHNjaGVkX2VudHJ5LFxuLVx0XHRcdFx0XHRsaXN0KTtcbi1cdFx0b3Blci1cdTAwM2VjeWNsZV9lbmRfdGltZSA9IGt0aW1lX2FkZF9ucyhvcGVyLVx1MDAzZWN5Y2xlX2VuZF90aW1lLFxuLVx0XHRcdFx0XHRcdCAgICBvcGVyLVx1MDAzZWN5Y2xlX3RpbWUpO1xuLVx0fSBlbHNlIHtcbi1cdFx0bmV4dCA9IGxpc3RfbmV4dF9lbnRyeShlbnRyeSwgbGlzdCk7XG4rXHRub3cgPSBocnRpbWVyX2NiX2dldF90aW1lKHRpbWVyKTtcbitcdGVuZF90aW1lID0gZW50cnktXHUwMDNlZW5kX3RpbWU7XG4rXHRiZWhpbmQgPSBrdGltZV9zdWIobm93LCBlbmRfdGltZSk7XG4rXG4rXHQvKiBCZWhpbmQsIGUuZy4gZGVsYXllZCB0aW1lciBvciBzdGVwcGVkIGNsb2NrOiBza2lwIHdob2xlIHBlcmlvZHNcbitcdCAqIGFyaXRobWV0aWNhbGx5IGFuZCB3YWxrIGF0IG1vc3Qgb25lIG1vcmUgdG8gdGhlIGVudHJ5IGNvdmVyaW5nXG4rXHQgKiBub3csIGluc3RlYWQgb2YgcmVwbGF5aW5nIHRoZSBiYWNrbG9nIG9uZSBleHBpcnkgYXQgYSB0aW1lLiBUaGVcbitcdCAqIGNhcCBib3VuZHMgdGhlIHdhbGs7IGEgbGVmdG92ZXIgaXMgcGlja2VkIHVwIGJ5IHRoZSBuZXh0IGV4cGlyeS5cbitcdCAqL1xuK1x0aWYgKHVubGlrZWx5KGJlaGluZCBcdTAwM2U9IG9wZXItXHUwMDNlcGVyaW9kKSkge1xuK1x0XHRzNjQganVtcCA9IGRpdjY0X3M2NChiZWhpbmQsIG9wZXItXHUwMDNlcGVyaW9kKSAqIG9wZXItXHUwMDNlcGVyaW9kO1xuK1xuK1x0XHRlbmRfdGltZSA9IGt0aW1lX2FkZF9ucyhlbmRfdGltZSwganVtcCk7XG4rXHRcdG9wZXItXHUwMDNlY3ljbGVfZW5kX3RpbWUgPSBrdGltZV9hZGRfbnMob3Blci1cdTAwM2VjeWNsZV9lbmRfdGltZSwganVtcCk7XG4gXHR9XG4gXG4tXHRlbmRfdGltZSA9IGt0aW1lX2FkZF9ucyhlbnRyeS1cdTAwM2VlbmRfdGltZSwgbmV4dC1cdTAwM2VpbnRlcnZhbCk7XG4tXHRlbmRfdGltZSA9IG1pbl90KGt0aW1lX3QsIGVuZF90aW1lLCBvcGVyLVx1MDAzZWN5Y2xlX2VuZF90aW1lKTtcbitcdGJ1ZGdldCA9IDIgKiBvcGVyLVx1MDAzZW51bV9lbnRyaWVzO1xuK1x0ZG8ge1xuK1x0XHRpZiAoc2hvdWxkX3Jlc3RhcnRfY3ljbGUob3BlciwgZW50cnksIGVuZF90aW1lKSkge1xuK1x0XHRcdG5leHQgPSBsaXN0X2ZpcnN0X2VudHJ5KFx1MDAyNm9wZXItXHUwMDNlZW50cmllcyxcbitcdFx0XHRcdFx0XHRzdHJ1Y3Qgc2NoZWRfZW50cnksIGxpc3QpO1xuK1x0XHRcdG9wZXItXHUwMDNlY3ljbGVfZW5kX3RpbWUgPSBrdGltZV9hZGRfbnMob3Blci1cdTAwM2VjeWNsZV9lbmRfdGltZSxcbitcdFx0XHRcdFx0XHRcdCAgICBvcGVyLVx1MDAzZXBlcmlvZCk7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0bmV4dCA9IGxpc3RfbmV4dF9lbnRyeShlbnRyeSwgbGlzdCk7XG4rXHRcdH1cbitcbitcdFx0bmV4dF9zdGFydCA9IGVuZF90aW1lO1xuK1x0XHRlbmRfdGltZSA9IGt0aW1lX2FkZF9ucyhuZXh0X3N0YXJ0LCBuZXh0LVx1MDAzZWludGVydmFsKTtcbitcdFx0ZW5kX3RpbWUgPSBtaW5fdChrdGltZV90LCBlbmRfdGltZSwgb3Blci1cdTAwM2VjeWNsZV9lbmRfdGltZSk7XG4rXHRcdGVudHJ5ID0gbmV4dDtcbitcdH0gd2hpbGUgKHVubGlrZWx5KGt0aW1lX2NvbXBhcmUoZW5kX3RpbWUsIG5vdykgXHUwMDNjPSAwKSBcdTAwMjZcdTAwMjYgYnVkZ2V0LS0pO1xuIFxuK1x0LyogbmV4dCBjYW4gYmUgdGhlIGVudHJ5IGFscmVhZHkgcHVibGlzaGVkIGFzIHEtXHUwMDNlY3VycmVudF9lbnRyeSAoYVxuK1x0ICogc2luZ2xlLWVudHJ5IHNjaGVkdWxlLCBvciBhIGNhdGNoLXVwIG9mIHdob2xlIHBlcmlvZHMpLCBzbyB0aGVcbitcdCAqIGNsb3NlIHRpbWVzIGFuZCBidWRnZXRzIGJlbG93IGFyZSByZXdyaXR0ZW4gaW4gcGxhY2Ugd2hpbGVcbitcdCAqIHRhcHJpb19kZXF1ZXVlX2Zyb21fdHhxKCkgbWF5IGJlIHJlYWRpbmcgdGhlbS5cbitcdCAqL1xuIFx0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBudW1fdGM7IHRjKyspIHtcbiBcdFx0aWYgKG5leHQtXHUwMDNlZ2F0ZV9kdXJhdGlvblt0Y10gPT0gb3Blci1cdTAwM2VjeWNsZV90aW1lKVxuIFx0XHRcdG5leHQtXHUwMDNlZ2F0ZV9jbG9zZV90aW1lW3RjXSA9IEtUSU1FX01BWDtcbiBcdFx0ZWxzZVxuLVx0XHRcdG5leHQtXHUwMDNlZ2F0ZV9jbG9zZV90aW1lW3RjXSA9IGt0aW1lX2FkZF9ucyhlbnRyeS1cdTAwM2VlbmRfdGltZSxcbitcdFx0XHRuZXh0LVx1MDAzZWdhdGVfY2xvc2VfdGltZVt0Y10gPSBrdGltZV9hZGRfbnMobmV4dF9zdGFydCxcbiBcdFx0XHRcdFx0XHRcdFx0IG5leHQtXHUwMDNlZ2F0ZV9kdXJhdGlvblt0Y10pO1xuIFx0fVxuIFxuQEAgLTExMzAsNiArMTE2Miw4IEBAIHN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YixcbiBcdFx0XHRcdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpuZXcsXG4gXHRcdFx0XHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbitcdHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnk7XG4rXHRrdGltZV90IGN5Y2xlID0gMDtcbiBcdGludCBlcnIgPSAwO1xuIFxuIFx0aWYgKHRiW1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9TSU5HTEVfRU5UUlldKSB7XG5AQCAtMTE1MiwxMyArMTE4NiwxMCBAQCBzdGF0aWMgaW50IHBhcnNlX3RhcHJpb19zY2hlZHVsZShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXG4gXHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0aWYgKCFuZXctXHUwMDNlY3ljbGVfdGltZSkge1xuLVx0XHRzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5O1xuLVx0XHRrdGltZV90IGN5Y2xlID0gMDtcbi1cbi1cdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgXHUwMDI2bmV3LVx1MDAzZWVudHJpZXMsIGxpc3QpXG4tXHRcdFx0Y3ljbGUgPSBrdGltZV9hZGRfbnMoY3ljbGUsIGVudHJ5LVx1MDAzZWludGVydmFsKTtcbitcdGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIFx1MDAyNm5ldy1cdTAwM2VlbnRyaWVzLCBsaXN0KVxuK1x0XHRjeWNsZSA9IGt0aW1lX2FkZF9ucyhjeWNsZSwgZW50cnktXHUwMDNlaW50ZXJ2YWwpO1xuIFxuK1x0aWYgKCFuZXctXHUwMDNlY3ljbGVfdGltZSkge1xuIFx0XHRpZiAoY3ljbGUgXHUwMDNjIDAgfHwgY3ljbGUgXHUwMDNlIElOVF9NQVgpIHtcbiBcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwiJ2N5Y2xlX3RpbWUnIGlzIHRvbyBiaWdcIik7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMTE3Miw2ICsxMjAzLDcgQEAgc3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbitcdG5ldy1cdTAwM2VwZXJpb2QgPSBtaW4obmV3LVx1MDAzZWN5Y2xlX3RpbWUsIGN5Y2xlKTtcbiBcdHRhcHJpb19jYWxjdWxhdGVfZ2F0ZV9kdXJhdGlvbnMocSwgbmV3KTtcbiBcbiBcdHJldHVybiAwO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6MDc6MDguMzM4OTExMjA2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4OTU1OTQxNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUQVBSSU8gU2NoZWR1bGVyIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbmV0L3NjaGVkL3NjaF90YXByaW8uY2AsIHdoaWNoIG1lYW5zIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgVHJhZmZpYyBDb250cm9sJ3MgVEFQUklPIHNjaGVkdWxlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgY2hhbmdlcyBkaXJlY3RseS4gRmlyc3QgdGhpbmcgSSBzZWUgaXMgdGhlIGFkZGl0aW9uIG9mIGBzNjQgcGVyaW9kO2AgdG8gdGhlIGBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0YC4gSW50ZXJlc3RpbmcsIEkgd29uZGVyIHdoYXQgdGhhdCByZXByZXNlbnRzIGluIHRoZSBjb250ZXh0IG9mIFRBUFJJTyBnYXRlIHNjaGVkdWxpbmc/XG5cbk5leHQsIHRoZXkndmUgbW9kaWZpZWQgYHNob3VsZF9yZXN0YXJ0X2N5Y2xlYCB0byB0YWtlIGEgYGt0aW1lX3QgZW5kX3RpbWVgLiBUaGlzIGxpa2VseSByZWxhdGVzIHRvIGhvdyB0aGV5J3JlIGhhbmRsaW5nIGN5Y2xlIHJlc3RhcnRzIGFuZCBtYXliZSBzb21lIHRpbWluZyBhZGp1c3RtZW50cyB3aXRoaW4gdGhlIHNjaGVkdWxlci4gVGhlIHRoaXJkIGtleSBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW4gYGFkdmFuY2Vfc2NoZWRgLCB3aGVyZSB0aGV5J3JlIG9wdGltaXppbmcgYW5kIGZpeGluZyBzY2hlZHVsZSBhZHZhbmNlbWVudC4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggYWRkcmVzc2VzIHNjZW5hcmlvcyB3aGVyZSB0aGUgdGltZXIgbWlnaHQgZmFsbCBiZWhpbmQgZHVlIHRvIGRlbGF5cyBvciBjbG9jayBzdGVwcGluZy4gTG9va3MgbGlrZSB0aGV5J3JlIHNraXBwaW5nIHBlcmlvZHMgdG8gY2F0Y2ggdXAgdXNpbmcgYGRpdjY0X3M2NGAgYW5kIGEgYm91bmRlZCBgYnVkZ2V0YCBsb29wLiBUaGlzIGlzIGEgY29tbW9uIHN0cmF0ZWd5LCBidXQgSSdsbCB3YW50IHRvIGNoZWNrIHRoZSBkZXRhaWxzLiBUaGUgZmluYWwgY2hhbmdlLCBpbiBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCwgY2FsY3VsYXRlcyBgY3ljbGVgICh0aGUgc3VtIG9mIGludGVydmFscykgcmVnYXJkbGVzcyBvZiBgbmV3LVx1MDAzZWN5Y2xlX3RpbWVgIGFuZCBzZXRzIGBuZXctXHUwMDNlcGVyaW9kYCB0byB0aGUgbWluaW11bSBiZXR3ZWVuIGBuZXctXHUwMDNlY3ljbGVfdGltZWAgYW5kIGBjeWNsZWAuIFRoYXQgc2VlbXMgYSBsaXR0bGUgdW51c3VhbCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljLlxuXG5Ob3csIGJlZm9yZSBJIGdvIGRlZXBlciBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBJIG5lZWQgdG8gbG9vayBmb3IgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBwb3RlbnRpYWwgY29waWVzIHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBsZWFkIHRvIGluZm9ybWF0aW9uIGxlYWtzLCBvciBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcy4gSSdsbCBuZWVkIHRvIGdvIHRocm91Z2ggYHNjaF90YXByaW8uY2AgYXJvdW5kIHRoZXNlIHNwZWNpZmljIGxpbmVzIGFuZCBzZWUgZXhhY3RseSBob3cgYHNjaGVkX2dhdGVfbGlzdGAgaXMgYWxsb2NhdGVkIGFuZCB0aGVuIGhvdyBpdCBtaWdodCBiZSBwYXNzZWQgdG8gdXNlcnNwYWNlIChpZiBhdCBhbGwpLiBUaGlzIGlzIHdoZXJlIHRoZSBkZXZpbCBvZnRlbiBoaWRlcywgc28gSSBuZWVkIHRvIGNoZWNrIHRoZSBpbml0aWFsaXphdGlvbiByb3V0aW5lcyBjYXJlZnVsbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MzAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzowNzoxMy4yMzQ1MDhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMzMwMTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNjaGVkX2dhdGVfbGlzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvc2NoX3RhcHJpby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9NTI9c3RydWN0IHNjaGVkX2VudHJ5IHtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNzEtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzo3MjpzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0IHtcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTczLVxcdC8qIExvbmdlc3Qgbm9uLXplcm8gY29udGlndW91cyBnYXRlIGR1cmF0aW9ucyBwZXIgdHJhZmZpYyBjbGFzcyxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9OTI9c3RydWN0IHRhcHJpb19zY2hlZCB7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEwNy1cXHRzdHJ1Y3Qgc2NoZWRfZW50cnkgX19yY3UgKmN1cnJlbnRfZW50cnk7XFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMDg6XFx0c3RydWN0IHNjaGVkX2dhdGVfbGlzdCBfX3JjdSAqb3Blcl9zY2hlZDtcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjEwOTpcXHRzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0IF9fcmN1ICphZG1pbl9zY2hlZDtcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTExMC1cXHRzdHJ1Y3QgaHJ0aW1lciBhZHZhbmNlX3RpbWVyO1xcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xMjM9c3RhdGljIHZvaWQgdGFwcmlvX2NhbGN1bGF0ZV9nYXRlX2R1cmF0aW9ucyhzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTI0OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZClcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEyNS17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTE2OD1zdGF0aWMgYm9vbCB0YXByaW9fZW50cnlfYWxsb3dzX3R4KGt0aW1lX3Qgc2tiX2VuZF90aW1lLFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNzMtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxNzQ6c3RhdGljIGt0aW1lX3Qgc2NoZWRfYmFzZV90aW1lKGNvbnN0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkKVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTc1LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MjAwPXN0YXRpYyB2b2lkIHRhcHJpb19mcmVlX3NjaGVkX2NiKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIwMS17XFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyMDI6XFx0c3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqc2NoZWQgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCwgcmN1KTtcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIwMy1cXHRzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5LCAqbjtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MjEzPXN0YXRpYyB2b2lkIHN3aXRjaF9zY2hlZHVsZXMoc3RydWN0IHRhcHJpb19zY2hlZCAqcSxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIxNDpcXHRcXHRcXHQgICAgIHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKiphZG1pbixcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIxNTpcXHRcXHRcXHQgICAgIHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKipvcGVyKVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjE2LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjI3LS8qIEdldCBob3cgbXVjaCB0aW1lIGhhcyBiZWVuIGFscmVhZHkgZWxhcHNlZCBpbiB0aGUgY3VycmVudCBjeWNsZS4gKi9cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIyODpzdGF0aWMgczMyIGdldF9jeWNsZV90aW1lX2VsYXBzZWQoc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqc2NoZWQsIGt0aW1lX3QgdGltZSlcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIyOS17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIzOC1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIzOTpzdGF0aWMga3RpbWVfdCBnZXRfaW50ZXJ2YWxfZW5kX3RpbWUoc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqc2NoZWQsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNDA6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICphZG1pbixcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI0MS1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnksXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTI3NT1zdGF0aWMgdm9pZCB0YXByaW9fdXBkYXRlX3F1ZXVlX21heF9zZHUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjI3NjpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZCxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI3Ny1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgcWRpc2Nfc2l6ZV90YWJsZSAqc3RhYilcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MzI3PXN0YXRpYyBzdHJ1Y3Qgc2NoZWRfZW50cnkgKmZpbmRfZW50cnlfdG9fdHJhbnNtaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTMyOC1cXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBRZGlzYyAqc2NoLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MzI5OlxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqc2NoZWQsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzozMzA6XFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICphZG1pbixcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTMzMS1cXHRcXHRcXHRcXHRcXHRcXHQgIGt0aW1lX3QgdGltZSxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9NDA0PXN0YXRpYyBib29sIGlzX3ZhbGlkX2ludGVydmFsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoKVxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy00MDYtXFx0c3RydWN0IHRhcHJpb19zY2hlZCAqcSA9IHFkaXNjX3ByaXYoc2NoKTtcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjQwNzpcXHRzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZCwgKmFkbWluO1xcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNDA4LVxcdGt0aW1lX3QgaW50ZXJ2YWxfc3RhcnQsIGludGVydmFsX2VuZDtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9NDcyPXN0YXRpYyBsb25nIGdldF9wYWNrZXRfdHh0aW1lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoKVxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy00NzUtXFx0c3RydWN0IHRhcHJpb19zY2hlZCAqcSA9IHFkaXNjX3ByaXYoc2NoKTtcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjQ3NjpcXHRzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZCwgKmFkbWluO1xcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNDc3LVxcdGt0aW1lX3QgbWluaW11bV90aW1lLCBub3csIHR4dGltZTtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9NTQ0PXN0YXRpYyBib29sIHRhcHJpb19za2JfZXhjZWVkc19xdWV1ZV9tYXhfc2R1KHN0cnVjdCBRZGlzYyAqc2NoLFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy01NDgtXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHFkaXNjX2RldihzY2gpO1xcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6NTQ5OlxcdHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkO1xcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNTUwLVxcdGludCBwcmlvID0gc2tiLVxcdTAwM2Vwcmlvcml0eTtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9NjY2PXN0YXRpYyB2b2lkIHRhcHJpb19zZXRfYnVkZ2V0cyhzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6NjY3OlxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZCxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTY2OC1cXHRcXHRcXHQgICAgICAgc3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeSlcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9ODM3PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdGFwcmlvX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTg3Ni1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjg3NzpzdGF0aWMgYm9vbCBzaG91bGRfcmVzdGFydF9jeWNsZShjb25zdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpvcGVyLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtODc4LVxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5LFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy04ODktXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzo4OTA6c3RhdGljIGJvb2wgc2hvdWxkX2NoYW5nZV9zY2hlZHVsZXMoY29uc3Qgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqYWRtaW4sXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzo4OTE6XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKm9wZXIsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy04OTItXFx0XFx0XFx0XFx0ICAgIGt0aW1lX3QgZW5kX3RpbWUpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTkyND1zdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgYWR2YW5jZV9zY2hlZChzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTkyOC1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcWRpc2NfZGV2KHEtXFx1MDAzZXJvb3QpO1xcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6OTI5OlxcdHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKm9wZXIsICphZG1pbjtcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTkzMC1cXHRpbnQgbnVtX3RjID0gbmV0ZGV2X2dldF9udW1fdGMoZGV2KTtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MTEyMT1zdGF0aWMgaW50IHBhcnNlX3NjaGVkX2xpc3Qoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqbGlzdCxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjExMjI6XFx0XFx0XFx0ICAgIHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTEyMy1cXHRcXHRcXHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xMTYxPXN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YixcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjExNjI6XFx0XFx0XFx0XFx0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKm5ldyxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTExNjMtXFx0XFx0XFx0XFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MTI0MD1zdGF0aWMgaW50IHRhcHJpb19nZXRfc3RhcnRfdGltZShzdHJ1Y3QgUWRpc2MgKnNjaCxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjEyNDE6XFx0XFx0XFx0XFx0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTI0Mi1cXHRcXHRcXHRcXHQga3RpbWVfdCAqc3RhcnQpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTEyNzQ9c3RhdGljIHZvaWQgc2V0dXBfZmlyc3RfZW5kX3RpbWUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjEyNzU6XFx0XFx0XFx0XFx0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkLCBrdGltZV90IGJhc2UpXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMjc2LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MTMwND1zdGF0aWMgdm9pZCB0YXByaW9fc3RhcnRfc2NoZWQoc3RydWN0IFFkaXNjICpzY2gsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMzA1OlxcdFxcdFxcdCAgICAgICBrdGltZV90IHN0YXJ0LCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpuZXcpXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMzA2LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MTM2MD1zdGF0aWMgaW50IHRhcHJpb19kZXZfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBldmVudCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTM2My1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7XFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMzY0OlxcdHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKm9wZXIsICphZG1pbjtcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEzNjUtXFx0c3RydWN0IHFkaXNjX3NpemVfdGFibGUgKnN0YWI7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTEzOTc9c3RhdGljIHZvaWQgc2V0dXBfdHh0aW1lKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMzk4OlxcdFxcdFxcdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZCwga3RpbWVfdCBiYXNlKVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTM5OS17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTE0NjI9c3RhdGljIHZvaWQgdGFwcmlvX29mZmxvYWRfY29uZmlnX2NoYW5nZWQoc3RydWN0IHRhcHJpb19zY2hlZCAqcSlcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE0NjMte1xcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTQ2NDpcXHRzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpvcGVyLCAqYWRtaW47XFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNDY1LVxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xNDkxPXN0YXRpYyB2b2lkIHRhcHJpb19zY2hlZF90b19vZmZsb2FkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxNDkyOlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZCxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE0OTMtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB0Y190YXByaW9fcW9wdF9vZmZsb2FkICpvZmZsb2FkLFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xNTQ4PXN0YXRpYyBpbnQgdGFwcmlvX2VuYWJsZV9vZmZsb2FkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNTQ5LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTU1MDpcXHRcXHRcXHRcXHQgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqc2NoZWQsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNTUxLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTE4NTQ9c3RhdGljIGludCB0YXByaW9fY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE4NTgtXFx0c3RydWN0IG5sYXR0ciAqdGJbVENBX1RBUFJJT19BVFRSX01BWCArIDFdID0geyB9O1xcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTg1OTpcXHRzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpvcGVyLCAqYWRtaW4sICpuZXdfYWRtaW47XFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xODYwLVxcdHN0cnVjdCB0YXByaW9fc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTIwNjQ9c3RhdGljIHZvaWQgdGFwcmlvX2Rlc3Ryb3koc3RydWN0IFFkaXNjICpzY2gpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIwNjctXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHFkaXNjX2RldihzY2gpO1xcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjA2ODpcXHRzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpvcGVyLCAqYWRtaW47XFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMDY5LVxcdHVuc2lnbmVkIGludCBpO1xcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0yMjg5PXN0YXRpYyBpbnQgZHVtcF9zY2hlZHVsZShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjI5MDpcXHRcXHRcXHQgY29uc3Qgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqcm9vdClcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIyOTEte1xcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0yMzI1PXN0YXRpYyBpbnQgdGFwcmlvX2R1bXBfdGNfZW50cmllcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjMyNi1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyMzI3OlxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqc2NoZWQpXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMzI4LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MjQyND1zdGF0aWMgaW50IHRhcHJpb19kdW1wKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNDI3LVxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBxZGlzY19kZXYoc2NoKTtcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjI0Mjg6XFx0c3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqb3BlciwgKmFkbWluO1xcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjQyOS1cXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgb3B0ID0geyAwIH07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjA3OjEzLjI3Nzg0MjEzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwOTU2MTY3MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBzY2hfdGFwcmlvLmNgJ3MgQ29yZSBGdW5jdGlvbnMqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIGBzY2hfdGFwcmlvLmNgLiBNeSBwcmltYXJ5IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBkdW1wX3NjaGVkdWxlYCBhbmQgYHRhcHJpb19jaGFuZ2VgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgdHdvIGZ1bmN0aW9ucyB3b3JrIHRvZ2V0aGVyLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZWlyIHJvbGVzIGluIHNjaGVkdWxpbmcgYW5kLCBtb3JlIHNwZWNpZmljYWxseSwgaG93IHRoZXkgbWFuYWdlIHRoZSBjaGFuZ2VzIHRvIHRoYXQgc2NoZWR1bGUuIEkgbmVlZCBhIGNsZWFyIG1lbnRhbCBtb2RlbCBvZiBob3cgZGF0YSBmbG93cyBiZXR3ZWVuIHRoZW0gYW5kIHdoYXQga2V5IGRhdGEgc3RydWN0dXJlcyB0aGV5IHVzZSBhbmQgbW9kaWZ5LiBUaGUgZ29hbCBpcyB0byBmdWxseSBncmFzcCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyB0aGF0IGRyaXZlIHNjaGVkdWxlIG1haW50ZW5hbmNlIGluIFRhcHJpby5cblxuXG4iLCJJbnB1dFRva2VucyI6NzkyNiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjA3OjE1LjM3MzQ2MTM0M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL3NjaF90YXByaW8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjg1LFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMjg1OlxcdFxcdG5sYV9uZXN0X2NhbmNlbChtc2csIGl0ZW0pO1xcbjIyODY6XFx0XFx0cmV0dXJuIC0xO1xcbjIyODc6XFx0fVxcbjIyODg6XFx0XFxuMjI4OTpcXHRzdGF0aWMgaW50IGR1bXBfc2NoZWR1bGUoc3RydWN0IHNrX2J1ZmYgKm1zZyxcXG4yMjkwOlxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpyb290KVxcbjIyOTE6XFx0e1xcbjIyOTI6XFx0XFx0c3RydWN0IG5sYXR0ciAqZW50cnlfbGlzdDtcXG4yMjkzOlxcdFxcdHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnk7XFxuMjI5NDpcXHRcXG4yMjk1OlxcdFxcdGlmIChubGFfcHV0X3M2NChtc2csIFRDQV9UQVBSSU9fQVRUUl9TQ0hFRF9CQVNFX1RJTUUsXFxuMjI5NjpcXHRcXHRcXHRcXHRyb290LVxcdTAwM2ViYXNlX3RpbWUsIFRDQV9UQVBSSU9fUEFEKSlcXG4yMjk3OlxcdFxcdFxcdHJldHVybiAtMTtcXG4yMjk4OlxcdFxcbjIyOTk6XFx0XFx0aWYgKG5sYV9wdXRfczY0KG1zZywgVENBX1RBUFJJT19BVFRSX1NDSEVEX0NZQ0xFX1RJTUUsXFxuMjMwMDpcXHRcXHRcXHRcXHRyb290LVxcdTAwM2VjeWNsZV90aW1lLCBUQ0FfVEFQUklPX1BBRCkpXFxuMjMwMTpcXHRcXHRcXHRyZXR1cm4gLTE7XFxuMjMwMjpcXHRcXG4yMzAzOlxcdFxcdGlmIChubGFfcHV0X3M2NChtc2csIFRDQV9UQVBSSU9fQVRUUl9TQ0hFRF9DWUNMRV9USU1FX0VYVEVOU0lPTixcXG4yMzA0OlxcdFxcdFxcdFxcdHJvb3QtXFx1MDAzZWN5Y2xlX3RpbWVfZXh0ZW5zaW9uLCBUQ0FfVEFQUklPX1BBRCkpXFxuMjMwNTpcXHRcXHRcXHRyZXR1cm4gLTE7XFxuMjMwNjpcXHRcXG4yMzA3OlxcdFxcdGVudHJ5X2xpc3QgPSBubGFfbmVzdF9zdGFydF9ub2ZsYWcobXNnLFxcbjIzMDg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgVENBX1RBUFJJT19BVFRSX1NDSEVEX0VOVFJZX0xJU1QpO1xcbjIzMDk6XFx0XFx0aWYgKCFlbnRyeV9saXN0KVxcbjIzMTA6XFx0XFx0XFx0Z290byBlcnJvcl9uZXN0O1xcbjIzMTE6XFx0XFxuMjMxMjpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBcXHUwMDI2cm9vdC1cXHUwMDNlZW50cmllcywgbGlzdCkge1xcbjIzMTM6XFx0XFx0XFx0aWYgKGR1bXBfZW50cnkobXNnLCBlbnRyeSkgXFx1MDAzYyAwKVxcbjIzMTQ6XFx0XFx0XFx0XFx0Z290byBlcnJvcl9uZXN0O1xcbjIzMTU6XFx0XFx0fVxcbjIzMTY6XFx0XFxuMjMxNzpcXHRcXHRubGFfbmVzdF9lbmQobXNnLCBlbnRyeV9saXN0KTtcXG4yMzE4OlxcdFxcdHJldHVybiAwO1xcbjIzMTk6XFx0XFxuMjMyMDpcXHRlcnJvcl9uZXN0OlxcbjIzMjE6XFx0XFx0bmxhX25lc3RfY2FuY2VsKG1zZywgZW50cnlfbGlzdCk7XFxuMjMyMjpcXHRcXHRyZXR1cm4gLTE7XFxuMjMyMzpcXHR9XFxuMjMyNDpcXHRcXG4yMzI1OlxcdHN0YXRpYyBpbnQgdGFwcmlvX2R1bXBfdGNfZW50cmllcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbjIzMjY6XFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLFxcbjIzMjc6XFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZClcXG4yMzI4OlxcdHtcXG4yMzI5OlxcdFxcdHN0cnVjdCBubGF0dHIgKm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjA3OjE1LjM3MzU4NzM5M1oiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjQ4Mzk5NDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCB3YWxraW5nIHRocm91Z2ggdGhlIGxvZ2ljOlxuXG4qKkludmVzdGlnYXRpbmcgTWVtb3J5IEFsbG9jYXRpb24gaW4gdGFwcmlvIE1vZHVsZSoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBpbnRvIGhvdyBtZW1vcnkgaXMgYmVpbmcgaGFuZGxlZCByZWxhdGVkIHRvIHRoZSBuZXcgc2NoZWR1bGVyIGdhdGUgbGlzdCwgc3BlY2lmaWNhbGx5IGBuZXdgIG9yIGBzY2hlZF9nYXRlX2xpc3RgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGlzIGFsbG9jYXRlZC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdHJhY2UgdGhlIGFsbG9jYXRpb24gcHJvY2Vzcywgc28gSSdsbCBzdGFydCBieSBsb29raW5nIGRpcmVjdGx5IGF0IHRoZSBjb2RlIHdoZXJlIHRoZXNlIGFyZSB1c2VkIHdpdGhpbiB0aGUgYHNjaF90YXByaW8uY2AgZmlsZS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgcmVhZCB0aGUgZnVuY3Rpb24gYHRhcHJpb19jaGFuZ2VgLiBBbHRlcm5hdGl2ZWx5LCBJIGNvdWxkIHVzZSBhIGZpbmQgd2l0aGluIGBzY2hfdGFwcmlvLmNgLCB3aGljaCB3b3VsZCBiZSBxdWlja2VyIGFuZCBpcyBsaWtlbHkgd2hhdCBJIHdpbGwgZG8uIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQsIGFuZCBtb3N0IGltcG9ydGFudGx5LCBob3cgdGhlIG1lbW9yeSBpcyBjbGFpbWVkLiBJdCdzIGxpa2VseSBnb2luZyB0byBpbnZvbHZlIGEgYGt6YWxsb2NgIG9yIHNpbWlsYXIgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb24uIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODIzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzowNzoxNy42MjE5ODk1MzRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MzIyMTU5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJremFsbG9jLipzY2hlZF9nYXRlX2xpc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL3NjaF90YXByaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6MDc6MTcuNjY2MzE1NjIzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MDQ3OTgxOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgc2NoX3RhcHJpby5jYCBBbGxvY2F0aW9ucyoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGFsbG9jYXRpb24gc3RyYXRlZ2llcyB3aXRoaW4gYHNjaF90YXByaW8uY2AuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IG1lbW9yeSBpcyBiZWluZyBtYW5hZ2VkIHdpdGhpbiB0aGlzIHNjaGVkdWxlciwgc3BlY2lmaWNhbGx5IGhvdyBpdCBhbGxvY2F0ZXMgYW5kIGRlYWxsb2NhdGVzIHJlc291cmNlcy4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBrZXkgZnVuY3Rpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBoYW5kbGUgdGhlc2Ugb3BlcmF0aW9ucy4gSSdtIGdvaW5nIHRvIGJlIGxvb2tpbmcgZm9yIHBhdHRlcm5zLCBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGFuZCBhcmVhcyB3aGVyZSBtZW1vcnkgbGVha3Mgb3IgaW5lZmZpY2llbmNpZXMgbWlnaHQgZXhpc3QuIE15IGZvY3VzIHdpbGwgYmUgb24gdGhlIGltcGFjdCBvZiB0aGVzZSBhbGxvY2F0aW9ucyBvbiB0aGUgcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eSBvZiB0aGUgc3lzdGVtLiBJJ2xsIGJlIHNjcnV0aW5pemluZyB0aGUgY29kZSBmb3IgYW55IG5vbi1zdGFuZGFyZCBhbGxvY2F0aW9uIGFwcHJvYWNoZXMsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhpbmdzIGxpa2Ugc2xhYiBhbGxvY2F0b3JzLCBjdXN0b20gbWVtb3J5IHBvb2xzLCBvciBwZXJoYXBzIGFueSB1bnVzdWFsIG1lbW9yeSBtYXBwaW5nIHRlY2huaXF1ZXMgdXNlZCBoZXJlLCBlc3BlY2lhbGx5IGdpdmVuIHRoaXMgaXMgdGhlIHNjaGVkdWxlci4gSSdsbCBiZSBjb25zaWRlcmluZyB0aGUgdGhyZWFkLXNhZmV0eSBvZiB0aGVzZSBhbGxvY2F0b3JzIHRvbyDigJMgYW55IGxvY2tpbmcgbWVjaGFuaXNtcyB1c2VkIHRvIHByb3RlY3QgYWdhaW5zdCBjb25jdXJyZW50IGFjY2VzcyB3aWxsIGJlIG9mIGludGVyZXN0LiBGaW5hbGx5LCBJJ2xsIGNvbXBhcmUgdGhlIGFwcHJvYWNoZXMgdXNlZCBpbiBgc2NoX3RhcHJpby5jYCB0byBvdGhlciBzY2hlZHVsZXJzIHRvIHVuZGVyc3RhbmQgaXRzIGRlc2lnbiB0cmFkZS1vZmZzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTI0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6MDc6MjAuMDcxMTE2NDAxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njk5MDM5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvc2NoX3RhcHJpby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MTEyMT1zdGF0aWMgaW50IHBhcnNlX3NjaGVkX2xpc3Qoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqbGlzdCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTEzOS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjExNDA6XFx0XFx0ZW50cnkgPSBremFsbG9jX29iaigqZW50cnkpO1xcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTE0MS1cXHRcXHRpZiAoIWVudHJ5KSB7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTEzOTc9c3RhdGljIHZvaWQgc2V0dXBfdHh0aW1lKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE0MDgtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxNDA5OnN0YXRpYyBzdHJ1Y3QgdGNfdGFwcmlvX3FvcHRfb2ZmbG9hZCAqdGFwcmlvX29mZmxvYWRfYWxsb2MoaW50IG51bV9lbnRyaWVzKVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTQxMC17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE0MTItXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxNDEzOlxcdF9fb2ZmbG9hZCA9IGt6YWxsb2NfZmxleCgqX19vZmZsb2FkLCBvZmZsb2FkLmVudHJpZXMsIG51bV9lbnRyaWVzKTtcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE0MTQtXFx0aWYgKCFfX29mZmxvYWQpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTE1NDg9c3RhdGljIGludCB0YXByaW9fZW5hYmxlX29mZmxvYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTU3Ni1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE1Nzc6XFx0b2ZmbG9hZCA9IHRhcHJpb19vZmZsb2FkX2FsbG9jKHNjaGVkLVxcdTAwM2VudW1fZW50cmllcyk7XFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNTc4LVxcdGlmICghb2ZmbG9hZCkge1xcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xNjE0PXN0YXRpYyBpbnQgdGFwcmlvX2Rpc2FibGVfb2ZmbG9hZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNjI0LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTYyNTpcXHRvZmZsb2FkID0gdGFwcmlvX29mZmxvYWRfYWxsb2MoMCk7XFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNjI2LVxcdGlmICghb2ZmbG9hZCkge1xcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xODU0PXN0YXRpYyBpbnQgdGFwcmlvX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xOTExLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTkxMjpcXHRuZXdfYWRtaW4gPSBremFsbG9jX29iaigqbmV3X2FkbWluKTtcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE5MTMtXFx0aWYgKCFuZXdfYWRtaW4pIHtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MjEwMz1zdGF0aWMgaW50IHRhcHJpb19pbml0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIxMzMtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyMTM0OlxcdHEtXFx1MDAzZXFkaXNjcyA9IGt6YWxsb2Nfb2JqcyhxLVxcdTAwM2VxZGlzY3NbMF0sIGRldi1cXHUwMDNlbnVtX3R4X3F1ZXVlcyk7XFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMTM1LVxcdGlmICghcS1cXHUwMDNlcWRpc2NzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzowNzoyMC4xMTgxMTQyOFoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3Nzg2MTU2OTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE5vIENvbmNlcm5zIERldGVjdGVkKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgYG5ld19hZG1pbmAgZ2V0cyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmpgLCB3aGljaCBpcyBnb29kOyBpdCBndWFyYW50ZWVzIHplcm8taW5pdGlhbGl6YXRpb24uIE5vdywgbGV0J3MgbWV0aWN1bG91c2x5IGdvIHRocm91Z2ggdGhlIHBhdGNoIGRldGFpbHMuXG5cbkknbSBzZWVpbmcgYSBuZXcgZmllbGQsIGBzNjQgcGVyaW9kYCwgYWRkZWQgdG8gYHN0cnVjdCBzY2hlZF9nYXRlX2xpc3RgLiBUaGlzIHJhaXNlcyBhIGZsYWcgYXV0b21hdGljYWxseSwgYnV0IGFmdGVyIGNoZWNraW5nIGhvdyBpdCdzIHVzZWQsIEknbSBjb25maWRlbnQuIFRoZSBgc2hvdWxkX3Jlc3RhcnRfY3ljbGVgIGZ1bmN0aW9uIG5vdyBhY2NlcHRzIGFuIGBlbmRfdGltZWAgYXJndW1lbnQsIGFuZCBpdCBjaGVja3MgZm9yIGVxdWFsaXR5IHdpdGggYG9wZXItXHUwMDNlY3ljbGVfZW5kX3RpbWVgLiBGYWlyIGVub3VnaC5cblxuUGVla2luZyBhdCBgYWR2YW5jZV9zY2hlZGAsIGl0IGRlY2xhcmVzIGBrdGltZV90IGVuZF90aW1lLCBuZXh0X3N0YXJ0LCBub3c7IGludCBidWRnZXQsIHRjOyBzNjQgYmVoaW5kO2AsIGFsbCBhcmUgaW5pdGlhbGl6ZWQuIGBub3dgIGlzIHNldCB1c2luZyBgaHJ0aW1lcl9jYl9nZXRfdGltZWAsIGFuZCBgZW5kX3RpbWVgIGdldHMgYXNzaWduZWQuIGBiZWhpbmRgIGlzIGNhbGN1bGF0ZWQgYXMgdGhlIGRpZmZlcmVuY2UuIFRoZSBgYnVkZ2V0YCBpcyBpbml0aWFsaXplZC4gSW5zaWRlIHRoZSBsb29wLCBgbmV4dF9zdGFydGAgaXMgYXNzaWduZWQgYmVmb3JlIGl0cyB1c2UgaW4gYGt0aW1lX2FkZF9uc2AgY2FsbHMuIFRoZSBsb29wIGNvcnJlY3RseSBjYWxscyBgc2hvdWxkX3Jlc3RhcnRfY3ljbGVgIHdpdGggdGhlIGNvcnJlY3QgYGVuZF90aW1lYC4gVGhlIGBmb3JgIGxvb3AsIGltcG9ydGFudGx5LCBwYXNzZXMgYG5leHRfc3RhcnRgIGludG8gYGt0aW1lX2FkZF9uc2AuIEl0J3MgY2xlYXIgdGhhdCBgbmV4dF9zdGFydGAgaXMgaW5pdGlhbGl6ZWQgb24gZXZlcnkgbG9vcCBpdGVyYXRpb24sIGV2ZW4gd2l0aCB0aGUgYGRvLi4ud2hpbGVgIHN0cnVjdHVyZS5cblxuVGhlbiwgbG9va2luZyBhdCBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCwgYGN5Y2xlYCBpcyBpbml0aWFsaXplZCB0byB6ZXJvLiBUaGUgbG9vcCBhZGRzIHVwIGBlbnRyeS1cdTAwM2VpbnRlcnZhbGAuIGBuZXctXHUwMDNlcGVyaW9kYCBpcyBzZXQgYXMgdGhlIG1pbmltdW0gYmV0d2VlbiBgbmV3LVx1MDAzZWN5Y2xlX3RpbWVgIGFuZCBgY3ljbGVgLiBTZWVtcyBmdWxseSBpbml0aWFsaXplZC5cblxuTm93LCBsZXQncyBnZXQgc2VyaW91cy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2VzLCBpbmZvcm1hdGlvbiBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBwYWRkaW5nIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLiBBZnRlciBhIHRob3JvdWdoIHJldmlldywgaXQncyBjbGVhcjogbm8gc3RydWN0dXJlcyB0aGF0IGdldCBjb3BpZWQgdG8gdXNlciBzcGFjZSBoYXZlIGJlZW4gYWRkZWQgb3IgbW9kaWZpZWQgd2l0aCBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkuIGBwZXJpb2RgIGlzIGludGVybmFsIHRvIGBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0YCwgYW5kIGl0J3MgYWxsb2NhdGVkIHdpdGgga3phbGxvYyBhbmQgZXhwbGljaXRseSBpbml0aWFsaXplZCB3aXRoaW4gYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAuIFRoZSBsb2dpYyBkb2Vzbid0IGRlcGVuZCBvbiBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIE5vIHN0YWNrIHZhcmlhYmxlcyBhcmUgbGVmdCB1bmluaXRpYWxpemVkLiBUaGVyZSBhcmVuJ3QgYW55IGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGJ1ZmZlciBzbGljZXMuXG5cblRoZXJlZm9yZSwgSSdtIGNvbmZpZGVudCB0aGF0IHRoaXMgY2hhbmdlICpkb2VzIG5vdCogaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFN0YW5kYXJkIHNhbml0aXplcnMgbGlrZSBLQVNBTiBhcmUgc3VmZmljaWVudCBmb3IgY2hlY2tpbmcgYm91bmRzIGFuZCBsaWZlY3ljbGUsIGFuZCB3ZSBkbyAqbm90KiBuZWVkIGEgS01TQU4gc2Vzc2lvbiBmb3IgdGhpcy5cblxuTGV0J3MgZG91YmxlLWNoZWNrIGFsbCB0aGUgY3JpdGVyaWEuIFdlJ3JlIGFzc2Vzc2luZyB3aGV0aGVyIEtNU0FOIGlzIG5lZWRlZCwgYW5kIG15IGNvbmNsdXNpb24gaXMgJ2ZhbHNlJy4gVGhlIHJlYXNvbmluZzogdGhlIHBhdGNoIHByaW1hcmlseSBtb2RpZmllcyB0aW1pbmcgYW5kIHNjaGVkdWxpbmcgbG9naWMgd2l0aGluIGBzY2hfdGFwcmlvYCwgc3BlY2lmaWNhbGx5IGBhZHZhbmNlX3NjaGVkYCwgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAsIGFuZCBgc2hvdWxkX3Jlc3RhcnRfY3ljbGVgLCBhZGRpbmcgdGhlIGBwZXJpb2RgIGZpZWxkLiBBbGwgc3RydWN0dXJlcyBhcmUga3phbGxvYydkIGFuZCBpbml0aWFsaXplZC4gVGhlcmUgYXJlIG5vIGV4cG9zZWQgdXNlci1zcGFjZSBjb3B5IHBhdGhzIG9yIHVuaW5pdGlhbGl6ZWQgcmVhZHMuIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGNvdmVyIGFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgb3Igb3V0LW9mLWJvdW5kcyBpc3N1ZXMsIHNvIEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLlxuXG5JJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBXZSdyZSBnb29kIHRvIGdvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDE5MiwiT3V0cHV0VG9rZW5zIjoyODcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6MDc6MjcuOTA0MjczNTY0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIHRoZSBzY2hlZHVsZSBhZHZhbmNlbWVudCBhbmQgY3ljbGUgcmVjYWxjdWxhdGlvbiBsb2dpYyBpbiB0aGUgdGFwcmlvIHFkaXNjIChzY2hfdGFwcmlvLmMpIHRvIGhhbmRsZSBkZWxheWVkIHRpbWVycyBhbmQgY2xvY2sgc3RlcHBpbmcgYnkgYm91bmRpbmcgY2F0Y2gtdXAgaXRlcmF0aW9ucyBhbmQgaW50cm9kdWNpbmcgYW4gaW50ZXJuYWwgYHBlcmlvZGAgZmllbGQgaW4gYHN0cnVjdCBzY2hlZF9nYXRlX2xpc3RgLlxcblxcbi0gVW5pbml0aWFsaXplZCBNZW1vcnkgLyBJbmZvLWxlYWsgQW5hbHlzaXM6XFxuICAxLiBUaGUgbmV3IGBwZXJpb2RgIGZpZWxkIGluIGBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0YCBpcyBjb21wdXRlZCBkdXJpbmcgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgYW5kIHN0b3JlZCBpbiBtZW1vcnkgYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmpgLiBJdCBpcyBub3QgZXhwb3J0ZWQgb3IgZHVtcGVkIHRvIHVzZXJzcGFjZSBpbiBgZHVtcF9zY2hlZHVsZWAuXFxuICAyLiBBbGwgbG9jYWwgdmFyaWFibGVzIGludHJvZHVjZWQgaW4gYGFkdmFuY2Vfc2NoZWRgIChgbm93YCwgYGVuZF90aW1lYCwgYG5leHRfc3RhcnRgLCBgYnVkZ2V0YCwgYGJlaGluZGApIGFuZCBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCAoYGN5Y2xlYCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHJlYWRpbmcgb3IgYnJhbmNoaW5nIG9uIHRoZW0uXFxuICAzLiBObyBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucywgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHJlYWRzIGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZSBvciBrZXJuZWwgY29udHJvbCBmbG93Llxcblxcbi0gS0FTQU4gdnMgS01TQU4gQXBwbGljYWJpbGl0eTpcXG4gIEFueSBjb25jdXJyZW5jeSwgbGlzdCB0cmF2ZXJzYWwsIG9yIGJvdW5kcyBpc3N1ZXMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIGxvY2tkZXAuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3IgaW5mby1sZWFrIHJpc2tzIHJlcXVpcmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHJ1bi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIHRoZSBzY2hlZHVsZSBhZHZhbmNlbWVudCBhbmQgY3ljbGUgcmVjYWxjdWxhdGlvbiBsb2dpYyBpbiB0aGUgdGFwcmlvIHFkaXNjIChzY2hfdGFwcmlvLmMpIHRvIGhhbmRsZSBkZWxheWVkIHRpbWVycyBhbmQgY2xvY2sgc3RlcHBpbmcgYnkgYm91bmRpbmcgY2F0Y2gtdXAgaXRlcmF0aW9ucyBhbmQgaW50cm9kdWNpbmcgYW4gaW50ZXJuYWwgYHBlcmlvZGAgZmllbGQgaW4gYHN0cnVjdCBzY2hlZF9nYXRlX2xpc3RgLlxcblxcbi0gVW5pbml0aWFsaXplZCBNZW1vcnkgLyBJbmZvLWxlYWsgQW5hbHlzaXM6XFxuICAxLiBUaGUgbmV3IGBwZXJpb2RgIGZpZWxkIGluIGBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0YCBpcyBjb21wdXRlZCBkdXJpbmcgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgYW5kIHN0b3JlZCBpbiBtZW1vcnkgYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmpgLiBJdCBpcyBub3QgZXhwb3J0ZWQgb3IgZHVtcGVkIHRvIHVzZXJzcGFjZSBpbiBgZHVtcF9zY2hlZHVsZWAuXFxuICAyLiBBbGwgbG9jYWwgdmFyaWFibGVzIGludHJvZHVjZWQgaW4gYGFkdmFuY2Vfc2NoZWRgIChgbm93YCwgYGVuZF90aW1lYCwgYG5leHRfc3RhcnRgLCBgYnVkZ2V0YCwgYGJlaGluZGApIGFuZCBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCAoYGN5Y2xlYCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHJlYWRpbmcgb3IgYnJhbmNoaW5nIG9uIHRoZW0uXFxuICAzLiBObyBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucywgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHJlYWRzIGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZSBvciBrZXJuZWwgY29udHJvbCBmbG93Llxcblxcbi0gS0FTQU4gdnMgS01TQU4gQXBwbGljYWJpbGl0eTpcXG4gIEFueSBjb25jdXJyZW5jeSwgbGlzdCB0cmF2ZXJzYWwsIG9yIGJvdW5kcyBpc3N1ZXMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIGxvY2tkZXAuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3IgaW5mby1sZWFrIHJpc2tzIHJlcXVpcmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHJ1bi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfnk6d[1] Phase: Succeeded StartedAt: 2026-09-01 23:07:32 +0000 UTC FinishedAt: 2026-09-01 23:07:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfnk6d[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-01 23:07:32 +0000 UTC FinishedAt: 2026-09-01 23:07:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfnk6d[2] Phase: Succeeded StartedAt: 2026-09-01 23:07:32 +0000 UTC FinishedAt: 2026-09-02 02:54:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfnk6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["advance_sched","parse_taprio_schedule","taprio_change","taprio_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"cc05566f-0f4c-414a-a028-7b7e8d85be42","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-01 23:07:32 +0000 UTC FinishedAt: 2026-09-02 02:54:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["advance_sched","parse_taprio_schedule","taprio_change","taprio_init"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"cc05566f-0f4c-414a-a028-7b7e8d85be42","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowfnk6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["advance_sched","parse_taprio_schedule","taprio_change","taprio_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"cc05566f-0f4c-414a-a028-7b7e8d85be42","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-01 23:07:32 +0000 UTC FinishedAt: 2026-09-01 23:07:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfnk6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["advance_sched","parse_taprio_schedule","taprio_change","taprio_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"cc05566f-0f4c-414a-a028-7b7e8d85be42","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-01 23:07:32 +0000 UTC FinishedAt: 2026-09-01 23:07:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfnk6d/series-workflowfnk6d-convert-artifact-1790609480/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfnk6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["advance_sched","parse_taprio_schedule","taprio_change","taprio_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"cc05566f-0f4c-414a-a028-7b7e8d85be42","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-01 23:07:42 +0000 UTC FinishedAt: 2026-09-01 23:28:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfnk6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["advance_sched","parse_taprio_schedule","taprio_change","taprio_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"cc05566f-0f4c-414a-a028-7b7e8d85be42","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-01 23:07:42 +0000 UTC FinishedAt: 2026-09-01 23:28:04 +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:*f004733b-601a-4b01-a8d7-ee554aebfa06,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-workflowfnk6d/series-workflowfnk6d-convert-artifact-1790609480/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": "4bd3e41d-31f4-4556-80a4-14821f7d142c", "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-workflowfnk6d/series-workflowfnk6d-build-action-3214439614/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfnk6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["advance_sched","parse_taprio_schedule","taprio_change","taprio_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"cc05566f-0f4c-414a-a028-7b7e8d85be42","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-01 23:07:42 +0000 UTC FinishedAt: 2026-09-01 23:27:19 +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:*f004733b-601a-4b01-a8d7-ee554aebfa06,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-workflowfnk6d/series-workflowfnk6d-convert-artifact-1790609480/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": "4bd3e41d-31f4-4556-80a4-14821f7d142c", "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-workflowfnk6d/series-workflowfnk6d-build-action-3214439614/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfnk6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["advance_sched","parse_taprio_schedule","taprio_change","taprio_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"cc05566f-0f4c-414a-a028-7b7e8d85be42","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-01 23:28:04 +0000 UTC FinishedAt: 2026-09-01 23:28:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfnk6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["advance_sched","parse_taprio_schedule","taprio_change","taprio_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"cc05566f-0f4c-414a-a028-7b7e8d85be42","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-01 23:28:04 +0000 UTC FinishedAt: 2026-09-01 23:28:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfnk6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["advance_sched","parse_taprio_schedule","taprio_change","taprio_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"cc05566f-0f4c-414a-a028-7b7e8d85be42","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-01 23:28:04 +0000 UTC FinishedAt: 2026-09-01 23:28:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfnk6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["advance_sched","parse_taprio_schedule","taprio_change","taprio_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"cc05566f-0f4c-414a-a028-7b7e8d85be42","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-01 23:28:04 +0000 UTC FinishedAt: 2026-09-01 23:28:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"cc05566f-0f4c-414a-a028-7b7e8d85be42","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfnk6d/series-workflowfnk6d-convert-artifact-2133430831/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfnk6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["advance_sched","parse_taprio_schedule","taprio_change","taprio_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"cc05566f-0f4c-414a-a028-7b7e8d85be42","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-01 23:28:15 +0000 UTC FinishedAt: 2026-09-01 23:30:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfnk6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["advance_sched","parse_taprio_schedule","taprio_change","taprio_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"cc05566f-0f4c-414a-a028-7b7e8d85be42","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-01 23:28:15 +0000 UTC FinishedAt: 2026-09-01 23:29:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4bd3e41d-31f4-4556-80a4-14821f7d142c,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-workflowfnk6d/series-workflowfnk6d-build-action-3214439614/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-workflowfnk6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["advance_sched","parse_taprio_schedule","taprio_change","taprio_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"cc05566f-0f4c-414a-a028-7b7e8d85be42","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-01 23:30:07 +0000 UTC FinishedAt: 2026-09-01 23:30:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfnk6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["advance_sched","parse_taprio_schedule","taprio_change","taprio_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"cc05566f-0f4c-414a-a028-7b7e8d85be42","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-01 23:30:07 +0000 UTC FinishedAt: 2026-09-01 23:30:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfnk6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["advance_sched","parse_taprio_schedule","taprio_change","taprio_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"cc05566f-0f4c-414a-a028-7b7e8d85be42","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-01 23:30:07 +0000 UTC FinishedAt: 2026-09-01 23:51:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfnk6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["advance_sched","parse_taprio_schedule","taprio_change","taprio_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"cc05566f-0f4c-414a-a028-7b7e8d85be42","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-01 23:30:07 +0000 UTC FinishedAt: 2026-09-01 23:51:02 +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:*f004733b-601a-4b01-a8d7-ee554aebfa06,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-workflowfnk6d/series-workflowfnk6d-convert-artifact-2133430831/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": "2b9f1f79-b3a2-4716-9ba4-876d7f872d88", "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-workflowfnk6d/series-workflowfnk6d-build-action-2570673603/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfnk6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["advance_sched","parse_taprio_schedule","taprio_change","taprio_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"cc05566f-0f4c-414a-a028-7b7e8d85be42","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-01 23:30:07 +0000 UTC FinishedAt: 2026-09-01 23:50:27 +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:*f004733b-601a-4b01-a8d7-ee554aebfa06,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-workflowfnk6d/series-workflowfnk6d-convert-artifact-2133430831/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": "2b9f1f79-b3a2-4716-9ba4-876d7f872d88", "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-workflowfnk6d/series-workflowfnk6d-build-action-2570673603/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfnk6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["advance_sched","parse_taprio_schedule","taprio_change","taprio_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"cc05566f-0f4c-414a-a028-7b7e8d85be42","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-01 23:51:02 +0000 UTC FinishedAt: 2026-09-01 23:51:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfnk6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["advance_sched","parse_taprio_schedule","taprio_change","taprio_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"cc05566f-0f4c-414a-a028-7b7e8d85be42","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-01 23:51:02 +0000 UTC FinishedAt: 2026-09-01 23:51:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfnk6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["advance_sched","parse_taprio_schedule","taprio_change","taprio_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"cc05566f-0f4c-414a-a028-7b7e8d85be42","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-01 23:51:02 +0000 UTC FinishedAt: 2026-09-01 23:52:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfnk6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["advance_sched","parse_taprio_schedule","taprio_change","taprio_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"cc05566f-0f4c-414a-a028-7b7e8d85be42","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-01 23:51:02 +0000 UTC FinishedAt: 2026-09-01 23:52:49 +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:*2b9f1f79-b3a2-4716-9ba4-876d7f872d88,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-workflowfnk6d/series-workflowfnk6d-build-action-2570673603/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-workflowfnk6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["advance_sched","parse_taprio_schedule","taprio_change","taprio_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"cc05566f-0f4c-414a-a028-7b7e8d85be42","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-01 23:52:58 +0000 UTC FinishedAt: 2026-09-02 02:54:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfnk6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["advance_sched","parse_taprio_schedule","taprio_change","taprio_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"cc05566f-0f4c-414a-a028-7b7e8d85be42","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-01 23:52:58 +0000 UTC FinishedAt: 2026-09-02 02:54:44 +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":["advance_sched","parse_taprio_schedule","taprio_change","taprio_init"],"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:*4bd3e41d-31f4-4556-80a4-14821f7d142c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2b9f1f79-b3a2-4716-9ba4-876d7f872d88,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-workflowfnk6d/series-workflowfnk6d-build-action-3214439614/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-workflowfnk6d/series-workflowfnk6d-build-action-2570673603/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowfnk6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["advance_sched","parse_taprio_schedule","taprio_change","taprio_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"cc05566f-0f4c-414a-a028-7b7e8d85be42","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-01 23:52:58 +0000 UTC FinishedAt: 2026-09-01 23:53:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfnk6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["advance_sched","parse_taprio_schedule","taprio_change","taprio_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"cc05566f-0f4c-414a-a028-7b7e8d85be42","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-01 23:52:58 +0000 UTC FinishedAt: 2026-09-01 23:53:06 +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":["advance_sched","parse_taprio_schedule","taprio_change","taprio_init"],"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-workflowfnk6d/series-workflowfnk6d-convert-artifact-1331192808/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfnk6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["advance_sched","parse_taprio_schedule","taprio_change","taprio_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"cc05566f-0f4c-414a-a028-7b7e8d85be42","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-01 23:52:58 +0000 UTC FinishedAt: 2026-09-01 23:52:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfnk6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["advance_sched","parse_taprio_schedule","taprio_change","taprio_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"cc05566f-0f4c-414a-a028-7b7e8d85be42","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-01 23:52:58 +0000 UTC FinishedAt: 2026-09-01 23:52:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfnk6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["advance_sched","parse_taprio_schedule","taprio_change","taprio_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"cc05566f-0f4c-414a-a028-7b7e8d85be42","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-01 23:52:58 +0000 UTC FinishedAt: 2026-09-01 23:52:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfnk6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["advance_sched","parse_taprio_schedule","taprio_change","taprio_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"cc05566f-0f4c-414a-a028-7b7e8d85be42","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-01 23:53:08 +0000 UTC FinishedAt: 2026-09-02 02:54:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfnk6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["advance_sched","parse_taprio_schedule","taprio_change","taprio_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"cc05566f-0f4c-414a-a028-7b7e8d85be42","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-01 23:53:08 +0000 UTC FinishedAt: 2026-09-02 02:54:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4bd3e41d-31f4-4556-80a4-14821f7d142c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2b9f1f79-b3a2-4716-9ba4-876d7f872d88,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-workflowfnk6d/series-workflowfnk6d-build-action-3214439614/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-workflowfnk6d/series-workflowfnk6d-build-action-2570673603/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-workflowfnk6d/series-workflowfnk6d-convert-artifact-1331192808/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,}