Name: series-workflowhkpjg Phase: Succeeded StartedAt: 2026-08-29 21:11:22 +0000 UTC FinishedAt: 2026-08-30 01:35:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhkpjg[0] Phase: Succeeded StartedAt: 2026-08-29 21:11:22 +0000 UTC FinishedAt: 2026-08-29 21:56:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhkpjg[0].run-triage Phase: Succeeded StartedAt: 2026-08-29 21:11:22 +0000 UTC FinishedAt: 2026-08-29 21:56:34 +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": "2188569e7e1b0bc3f3b557dc97ab7a02befc11c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_CLS_ROUTE4", "NET_SCHED", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2188569e7e1b0bc3f3b557dc97ab7a02befc11c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_CLS_ROUTE4", "NET_SCHED", "INET" ], "series_id": "70ee2f5e-9451-4479-8557-0fb8ffc2b9fc" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "route4_change", "route4_delete", "route4_set_parms" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI5IDIxOjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9DTFNfUk9VVEU0JiMzNDssCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cm91dGU0X2NoYW5nZSYjMzQ7LAogICAgJiMzNDtyb3V0ZTRfZGVsZXRlJiMzNDssCiAgICAmIzM0O3JvdXRlNF9zZXRfcGFybXMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgcmVmZXJlbmNlIGNvdW50ZXIgKGBmaWx0ZXJzX3JlZmApIHRvIGBzdHJ1Y3Qgcm91dGU0X2J1Y2tldGAgaW4gYG5ldC9zY2hlZC9jbHNfcm91dGUuY2AgdG8gdHJhY2sgYWN0aXZlIGZpbHRlcnMgaW4gZWFjaCBidWNrZXQgYW5kIG1hbmFnZSBidWNrZXQgcmVjbGFtYXRpb24gdmlhIFJDVSwgcmVwbGFjaW5nIGEgbGluZWFyIHNjYW4gb2YgYnVja2V0IHNsb3RzLlxuXG4tIE1lbW9yeSBJbml0aWFsaXphdGlvbjogVGhlIGJ1Y2tldCBzdHJ1Y3R1cmUgYHN0cnVjdCByb3V0ZTRfYnVja2V0YCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqKClgIGFuZCBgZmlsdGVyc19yZWZgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgd2l0aCBgcmVmY291bnRfc2V0KFx1MDAyNmItXHUwMDNlZmlsdGVyc19yZWYsIDEpYCB1cG9uIGNyZWF0aW9uLlxuLSBQb3RlbnRpYWwgQnVnIFR5cGVzOiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhpcyByZWZhY3RvcmluZyAoZS5nLiBpbmNvcnJlY3QgcmVmZXJlbmNlIGNvdW50aW5nLCBkb3VibGUgZnJlZXMsIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMpIGFyZSBtZW1vcnkgbGlmZWN5Y2xlIC8gcG9pbnRlciB2YWxpZGl0eSBidWdzIHRoYXQgYXJlIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCB0aGUgYHJlZmNvdW50X3RgIHJ1bnRpbWUgY2hlY2tzLlxuLSBVbmluaXRpYWxpemVkIE1lbW9yeSAvIEluZm8tbGVhayBSaXNrOiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZSBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIGJyYW5jaGluZyBkZWNpc2lvbnMuXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJvdXRlNCBjbGFzc2lmaWVyIChjbHNfcm91dGUpIGluIHRoZSB0cmFmZmljIGNvbnRyb2wgc3Vic3lzdGVtIGJ5IGludHJvZHVjaW5nIHJlZmNvdW50aW5nIChmaWx0ZXJzX3JlZikgdG8gbWFuYWdlIHRoZSBsaWZldGltZSBhbmQgZGVhbGxvY2F0aW9uIG9mIHJvdXRlNCBidWNrZXRzIGR1cmluZyBmaWx0ZXIgaW5zZXJ0aW9uLCByZXBsYWNlbWVudCwgYW5kIGRlbGV0aW9uLiBUaGlzIGlzIGNvcmUgbmV0d29ya2luZyBjb2RlIHJlYWNoYWJsZSB2aWEgbmV0bGluayB0cmFmZmljIGNvbnRyb2wgaW50ZXJmYWNlcyBhbmQgYWZmZWN0cyBtZW1vcnkgc2FmZXR5IC8gbGlmZXRpbWUgbWFuYWdlbWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAyMTo1NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDVkYjM4N2MzZjkzZjRlNGIxMzg5MjMyODE0YTUyNzNhYTUyMjIyZDRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyOSAyMTo1NToyMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX3JvdXRlLmMgYi9uZXQvc2NoZWQvY2xzX3JvdXRlLmNcbmluZGV4IDBkMTMyNGM5MDU4MzcuLjE3YjBlYmI3NjY2MjYgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvY2xzX3JvdXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9jbHNfcm91dGUuY1xuQEAgLTExLDYgJiM0MzsxMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcmVmY291bnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2RzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3JvdXRlLmhcdTAwM2VcbkBAIC00MSw2ICYjNDM7NDIsNyBAQCBzdHJ1Y3Qgcm91dGU0X2hlYWQge1xuIHN0cnVjdCByb3V0ZTRfYnVja2V0IHtcbiBcdC8qIDE2IEZST00gYnVja2V0cyAmIzQzOyAxNiBJSUYgYnVja2V0cyAmIzQzOyAxIHdpbGRjYXJkIGJ1Y2tldCAqL1xuIFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgX19yY3VcdCpodFsxNiAmIzQzOyAxNiAmIzQzOyAxXTtcbiYjNDM7XHRyZWZjb3VudF90XHRcdFx0ZmlsdGVyc19yZWY7XG4gXHRzdHJ1Y3QgcmN1X2hlYWRcdFx0XHRyY3U7XG4gfTtcbiBcbkBAIC0zMzYsNyAmIzQzOzMzOCw3IEBAIHN0YXRpYyBpbnQgcm91dGU0X2RlbGV0ZShzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdm9pZCAqYXJnLCBib29sICpsYXN0LFxuIFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgKm5mO1xuIFx0c3RydWN0IHJvdXRlNF9idWNrZXQgKmI7XG4gXHR1bnNpZ25lZCBpbnQgaCA9IDA7XG4tXHRpbnQgaSwgaDE7XG4mIzQzO1x0aW50IGgxO1xuIFxuIFx0aWYgKCFoZWFkIHx8ICFmKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0zNjIsMjMgJiM0MzszNjQsMTQgQEAgc3RhdGljIGludCByb3V0ZTRfZGVsZXRlKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB2b2lkICphcmcsIGJvb2wgKmxhc3QsXG4gXHRcdFx0dGNmX2V4dHNfZ2V0X25ldChcdTAwMjZmLVx1MDAzZWV4dHMpO1xuIFx0XHRcdHRjZl9xdWV1ZV93b3JrKFx1MDAyNmYtXHUwMDNlcndvcmssIHJvdXRlNF9kZWxldGVfZmlsdGVyX3dvcmspO1xuIFxuLVx0XHRcdC8qIFN0cmlwIFJUTkwgcHJvdGVjdGVkIHRyZWUgKi9cbi1cdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYz0gMzI7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdFx0XHRzdHJ1Y3Qgcm91dGU0X2ZpbHRlciAqcnQ7XG4tXG4tXHRcdFx0XHRydCA9IHJ0bmxfZGVyZWZlcmVuY2UoYi1cdTAwM2VodFtpXSk7XG4tXHRcdFx0XHRpZiAocnQpXG4tXHRcdFx0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0XHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmItXHUwMDNlZmlsdGVyc19yZWYpKSB7XG4mIzQzO1x0XHRcdFx0UkNVX0lOSVRfUE9JTlRFUihoZWFkLVx1MDAzZXRhYmxlW3RvX2hhc2goaCldLCBOVUxMKTtcbiYjNDM7XHRcdFx0XHRrZnJlZV9yY3UoYiwgcmN1KTtcbiBcdFx0XHR9XG4tXG4tXHRcdFx0LyogT0ssIHNlc3Npb24gaGFzIG5vIGZsb3dzICovXG4tXHRcdFx0UkNVX0lOSVRfUE9JTlRFUihoZWFkLVx1MDAzZXRhYmxlW3RvX2hhc2goaCldLCBOVUxMKTtcbi1cdFx0XHRrZnJlZV9yY3UoYiwgcmN1KTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFx0fVxuIFxuLW91dDpcbiBcdCpsYXN0ID0gdHJ1ZTtcbiBcdGZvciAoaDEgPSAwOyBoMSBcdTAwM2M9IDI1NjsgaDEmIzQzOyYjNDM7KSB7XG4gXHRcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoaGVhZC1cdTAwM2V0YWJsZVtoMV0pKSB7XG5AQCAtNDU5LDYgJiM0Mzs0NTIsNyBAQCBzdGF0aWMgaW50IHJvdXRlNF9zZXRfcGFybXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCxcbiBcdFx0aWYgKGIgPT0gTlVMTClcbiBcdFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4gXG4mIzQzO1x0XHRyZWZjb3VudF9zZXQoXHUwMDI2Yi1cdTAwM2VmaWx0ZXJzX3JlZiwgMSk7XG4gXHRcdHJjdV9hc3NpZ25fcG9pbnRlcihoZWFkLVx1MDAzZXRhYmxlW2gxXSwgYik7XG4gXHR9IGVsc2Uge1xuIFx0XHR1bnNpZ25lZCBpbnQgaDIgPSBmcm9tX2hhc2gobmhhbmRsZSBcdTAwM2VcdTAwM2UgMTYpO1xuQEAgLTQ2OCw2ICYjNDM7NDYyLDggQEAgc3RhdGljIGludCByb3V0ZTRfc2V0X3Bhcm1zKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsXG4gXHRcdCAgICAgZnAgPSBydG5sX2RlcmVmZXJlbmNlKGZwLVx1MDAzZW5leHQpKVxuIFx0XHRcdGlmIChmcC1cdTAwM2VoYW5kbGUgPT0gZi1cdTAwM2VoYW5kbGUpXG4gXHRcdFx0XHRyZXR1cm4gLUVFWElTVDtcbiYjNDM7XG4mIzQzO1x0XHRyZWZjb3VudF9pbmMoXHUwMDI2Yi1cdTAwM2VmaWx0ZXJzX3JlZik7XG4gXHR9XG4gXG4gXHRpZiAodGJbVENBX1JPVVRFNF9UT10pXG5AQCAtNTAwLDcgJiM0Mzs0OTYsNyBAQCBzdGF0aWMgaW50IHJvdXRlNF9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuIFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgKmZvbGQsICpmMSwgKnBmcCwgKmYgPSBOVUxMO1xuIFx0c3RydWN0IHJvdXRlNF9idWNrZXQgKmI7XG4gXHRzdHJ1Y3QgbmxhdHRyICp0YltUQ0FfUk9VVEU0X01BWCAmIzQzOyAxXTtcbi1cdHVuc2lnbmVkIGludCBoLCB0aDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaDtcbiBcdGludCBlcnI7XG4gXHRib29sIG5ldyA9IHRydWU7XG4gXG5AQCAtNTYwLDE3ICYjNDM7NTU2LDIwIEBAIHN0YXRpYyBpbnQgcm91dGU0X2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4gXHRyY3VfYXNzaWduX3BvaW50ZXIoKmZwLCBmKTtcbiBcbiBcdGlmIChmb2xkKSB7XG4tXHRcdHRoID0gdG9faGFzaChmb2xkLVx1MDAzZWhhbmRsZSk7XG4mIzQzO1x0XHRiID0gZm9sZC1cdTAwM2Via3Q7XG4gXHRcdGggPSBmcm9tX2hhc2goZm9sZC1cdTAwM2VoYW5kbGUgXHUwMDNlXHUwMDNlIDE2KTtcbi1cdFx0YiA9IHJ0bmxfZGVyZWZlcmVuY2UoaGVhZC1cdTAwM2V0YWJsZVt0aF0pO1xuLVx0XHRpZiAoYikge1xuLVx0XHRcdGZwID0gXHUwMDI2Yi1cdTAwM2VodFtoXTtcbi1cdFx0XHRmb3IgKHBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKTsgcGZwO1xuLVx0XHRcdCAgICAgZnAgPSBcdTAwMjZwZnAtXHUwMDNlbmV4dCwgcGZwID0gcnRubF9kZXJlZmVyZW5jZSgqZnApKSB7XG4tXHRcdFx0XHRpZiAocGZwID09IGZvbGQpIHtcbi1cdFx0XHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKCpmcCwgZm9sZC1cdTAwM2VuZXh0KTtcbi1cdFx0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRmcCA9IFx1MDAyNmItXHUwMDNlaHRbaF07XG4mIzQzO1x0XHRmb3IgKHBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKTsgcGZwO1xuJiM0MztcdFx0ICAgICBmcCA9IFx1MDAyNnBmcC1cdTAwM2VuZXh0LCBwZnAgPSBydG5sX2RlcmVmZXJlbmNlKCpmcCkpIHtcbiYjNDM7XHRcdFx0aWYgKHBmcCA9PSBmb2xkKSB7XG4mIzQzO1x0XHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKCpmcCwgZm9sZC1cdTAwM2VuZXh0KTtcbiYjNDM7XHRcdFx0XHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmItXHUwMDNlZmlsdGVyc19yZWYpKSB7XG4mIzQzO1x0XHRcdFx0XHR1bnNpZ25lZCBpbnQgdGggPSB0b19oYXNoKGZvbGQtXHUwMDNlaGFuZGxlKTtcbiYjNDM7XG4mIzQzO1x0XHRcdFx0XHRSQ1VfSU5JVF9QT0lOVEVSKGhlYWQtXHUwMDNldGFibGVbdGhdLCBOVUxMKTtcbiYjNDM7XHRcdFx0XHRcdGtmcmVlX3JjdShiLCByY3UpO1xuIFx0XHRcdFx0fVxuJiM0MztcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcdFx0fVxuIFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDIxOjU1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9DTFNfUk9VVEU0JiMzNDssCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cm91dGU0X2NoYW5nZSYjMzQ7LAogICAgJiMzNDtyb3V0ZTRfZGVsZXRlJiMzNDssCiAgICAmIzM0O3JvdXRlNF9zZXRfcGFybXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJvdXRlNCBjbGFzc2lmaWVyIChjbHNfcm91dGUpIGluIHRoZSB0cmFmZmljIGNvbnRyb2wgc3Vic3lzdGVtIGJ5IGludHJvZHVjaW5nIHJlZmNvdW50aW5nIChmaWx0ZXJzX3JlZikgdG8gbWFuYWdlIHRoZSBsaWZldGltZSBhbmQgZGVhbGxvY2F0aW9uIG9mIHJvdXRlNCBidWNrZXRzIGR1cmluZyBmaWx0ZXIgaW5zZXJ0aW9uLCByZXBsYWNlbWVudCwgYW5kIGRlbGV0aW9uLiBUaGlzIGlzIGNvcmUgbmV0d29ya2luZyBjb2RlIHJlYWNoYWJsZSB2aWEgbmV0bGluayB0cmFmZmljIGNvbnRyb2wgaW50ZXJmYWNlcyBhbmQgYWZmZWN0cyBtZW1vcnkgc2FmZXR5IC8gbGlmZXRpbWUgbWFuYWdlbWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDVkYjM4N2MzZjkzZjRlNGIxMzg5MjMyODE0YTUyNzNhYTUyMjIyZDQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAyOSAyMTo1NToyMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfcm91dGUuYyBiL25ldC9zY2hlZC9jbHNfcm91dGUuYwppbmRleCAwZDEzMjRjOTA1ODM3Li4xN2IwZWJiNzY2NjI2IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvY2xzX3JvdXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jCkBAIC0xMSw2ICYjNDM7MTEsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3N0cmluZy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2Vycm5vLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3JlZmNvdW50LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2tidWZmLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2RzdC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9yb3V0ZS5oJmd0OwpAQCAtNDEsNiAmIzQzOzQyLDcgQEAgc3RydWN0IHJvdXRlNF9oZWFkIHsKIHN0cnVjdCByb3V0ZTRfYnVja2V0IHsKIAkvKiAxNiBGUk9NIGJ1Y2tldHMgJiM0MzsgMTYgSUlGIGJ1Y2tldHMgJiM0MzsgMSB3aWxkY2FyZCBidWNrZXQgKi8KIAlzdHJ1Y3Qgcm91dGU0X2ZpbHRlciBfX3JjdQkqaHRbMTYgJiM0MzsgMTYgJiM0MzsgMV07CiYjNDM7CXJlZmNvdW50X3QJCQlmaWx0ZXJzX3JlZjsKIAlzdHJ1Y3QgcmN1X2hlYWQJCQlyY3U7CiB9OwogCkBAIC0zMzYsNyAmIzQzOzMzOCw3IEBAIHN0YXRpYyBpbnQgcm91dGU0X2RlbGV0ZShzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdm9pZCAqYXJnLCBib29sICpsYXN0LAogCXN0cnVjdCByb3V0ZTRfZmlsdGVyICpuZjsKIAlzdHJ1Y3Qgcm91dGU0X2J1Y2tldCAqYjsKIAl1bnNpZ25lZCBpbnQgaCA9IDA7Ci0JaW50IGksIGgxOwomIzQzOwlpbnQgaDE7CiAKIAlpZiAoIWhlYWQgfHwgIWYpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzYyLDIzICYjNDM7MzY0LDE0IEBAIHN0YXRpYyBpbnQgcm91dGU0X2RlbGV0ZShzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdm9pZCAqYXJnLCBib29sICpsYXN0LAogCQkJdGNmX2V4dHNfZ2V0X25ldCgmYW1wO2YtJmd0O2V4dHMpOwogCQkJdGNmX3F1ZXVlX3dvcmsoJmFtcDtmLSZndDtyd29yaywgcm91dGU0X2RlbGV0ZV9maWx0ZXJfd29yayk7CiAKLQkJCS8qIFN0cmlwIFJUTkwgcHJvdGVjdGVkIHRyZWUgKi8KLQkJCWZvciAoaSA9IDA7IGkgJmx0Oz0gMzI7IGkmIzQzOyYjNDM7KSB7Ci0JCQkJc3RydWN0IHJvdXRlNF9maWx0ZXIgKnJ0OwotCi0JCQkJcnQgPSBydG5sX2RlcmVmZXJlbmNlKGItJmd0O2h0W2ldKTsKLQkJCQlpZiAocnQpCi0JCQkJCWdvdG8gb3V0OwomIzQzOwkJCWlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoJmFtcDtiLSZndDtmaWx0ZXJzX3JlZikpIHsKJiM0MzsJCQkJUkNVX0lOSVRfUE9JTlRFUihoZWFkLSZndDt0YWJsZVt0b19oYXNoKGgpXSwgTlVMTCk7CiYjNDM7CQkJCWtmcmVlX3JjdShiLCByY3UpOwogCQkJfQotCi0JCQkvKiBPSywgc2Vzc2lvbiBoYXMgbm8gZmxvd3MgKi8KLQkJCVJDVV9JTklUX1BPSU5URVIoaGVhZC0mZ3Q7dGFibGVbdG9faGFzaChoKV0sIE5VTEwpOwotCQkJa2ZyZWVfcmN1KGIsIHJjdSk7CiAJCQlicmVhazsKIAkJfQogCX0KIAotb3V0OgogCSpsYXN0ID0gdHJ1ZTsKIAlmb3IgKGgxID0gMDsgaDEgJmx0Oz0gMjU2OyBoMSYjNDM7JiM0MzspIHsKIAkJaWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihoZWFkLSZndDt0YWJsZVtoMV0pKSB7CkBAIC00NTksNiAmIzQzOzQ1Miw3IEBAIHN0YXRpYyBpbnQgcm91dGU0X3NldF9wYXJtcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLAogCQlpZiAoYiA9PSBOVUxMKQogCQkJcmV0dXJuIC1FTk9CVUZTOwogCiYjNDM7CQlyZWZjb3VudF9zZXQoJmFtcDtiLSZndDtmaWx0ZXJzX3JlZiwgMSk7CiAJCXJjdV9hc3NpZ25fcG9pbnRlcihoZWFkLSZndDt0YWJsZVtoMV0sIGIpOwogCX0gZWxzZSB7CiAJCXVuc2lnbmVkIGludCBoMiA9IGZyb21faGFzaChuaGFuZGxlICZndDsmZ3Q7IDE2KTsKQEAgLTQ2OCw2ICYjNDM7NDYyLDggQEAgc3RhdGljIGludCByb3V0ZTRfc2V0X3Bhcm1zKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsCiAJCSAgICAgZnAgPSBydG5sX2RlcmVmZXJlbmNlKGZwLSZndDtuZXh0KSkKIAkJCWlmIChmcC0mZ3Q7aGFuZGxlID09IGYtJmd0O2hhbmRsZSkKIAkJCQlyZXR1cm4gLUVFWElTVDsKJiM0MzsKJiM0MzsJCXJlZmNvdW50X2luYygmYW1wO2ItJmd0O2ZpbHRlcnNfcmVmKTsKIAl9CiAKIAlpZiAodGJbVENBX1JPVVRFNF9UT10pCkBAIC01MDAsNyAmIzQzOzQ5Niw3IEBAIHN0YXRpYyBpbnQgcm91dGU0X2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsCiAJc3RydWN0IHJvdXRlNF9maWx0ZXIgKmZvbGQsICpmMSwgKnBmcCwgKmYgPSBOVUxMOwogCXN0cnVjdCByb3V0ZTRfYnVja2V0ICpiOwogCXN0cnVjdCBubGF0dHIgKnRiW1RDQV9ST1VURTRfTUFYICYjNDM7IDFdOwotCXVuc2lnbmVkIGludCBoLCB0aDsKJiM0MzsJdW5zaWduZWQgaW50IGg7CiAJaW50IGVycjsKIAlib29sIG5ldyA9IHRydWU7CiAKQEAgLTU2MCwxNyAmIzQzOzU1NiwyMCBAQCBzdGF0aWMgaW50IHJvdXRlNF9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLAogCXJjdV9hc3NpZ25fcG9pbnRlcigqZnAsIGYpOwogCiAJaWYgKGZvbGQpIHsKLQkJdGggPSB0b19oYXNoKGZvbGQtJmd0O2hhbmRsZSk7CiYjNDM7CQliID0gZm9sZC0mZ3Q7Ymt0OwogCQloID0gZnJvbV9oYXNoKGZvbGQtJmd0O2hhbmRsZSAmZ3Q7Jmd0OyAxNik7Ci0JCWIgPSBydG5sX2RlcmVmZXJlbmNlKGhlYWQtJmd0O3RhYmxlW3RoXSk7Ci0JCWlmIChiKSB7Ci0JCQlmcCA9ICZhbXA7Yi0mZ3Q7aHRbaF07Ci0JCQlmb3IgKHBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKTsgcGZwOwotCQkJICAgICBmcCA9ICZhbXA7cGZwLSZndDtuZXh0LCBwZnAgPSBydG5sX2RlcmVmZXJlbmNlKCpmcCkpIHsKLQkJCQlpZiAocGZwID09IGZvbGQpIHsKLQkJCQkJcmN1X2Fzc2lnbl9wb2ludGVyKCpmcCwgZm9sZC0mZ3Q7bmV4dCk7Ci0JCQkJCWJyZWFrOwomIzQzOwkJZnAgPSAmYW1wO2ItJmd0O2h0W2hdOwomIzQzOwkJZm9yIChwZnAgPSBydG5sX2RlcmVmZXJlbmNlKCpmcCk7IHBmcDsKJiM0MzsJCSAgICAgZnAgPSAmYW1wO3BmcC0mZ3Q7bmV4dCwgcGZwID0gcnRubF9kZXJlZmVyZW5jZSgqZnApKSB7CiYjNDM7CQkJaWYgKHBmcCA9PSBmb2xkKSB7CiYjNDM7CQkJCXJjdV9hc3NpZ25fcG9pbnRlcigqZnAsIGZvbGQtJmd0O25leHQpOwomIzQzOwkJCQlpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KCZhbXA7Yi0mZ3Q7ZmlsdGVyc19yZWYpKSB7CiYjNDM7CQkJCQl1bnNpZ25lZCBpbnQgdGggPSB0b19oYXNoKGZvbGQtJmd0O2hhbmRsZSk7CiYjNDM7CiYjNDM7CQkJCQlSQ1VfSU5JVF9QT0lOVEVSKGhlYWQtJmd0O3RhYmxlW3RoXSwgTlVMTCk7CiYjNDM7CQkJCQlrZnJlZV9yY3UoYiwgcmN1KTsKIAkJCQl9CiYjNDM7CQkJCWJyZWFrOwogCQkJfQogCQl9CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAyMTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzM0CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBjbHNfcm91dGUgTW9kdWxlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG5ldC9zY2hlZC9jbHNfcm91dGUuY2AuIE15IGZpcnN0IG1vdmUgaXMgYWx3YXlzIHRvIGdldCBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29udGV4dC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgYGNsc19yb3V0ZS5jYCBmaWxlIGl0c2VsZi4gSSYjMzk7bGwgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IGl0IGRvZXMsIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkuIEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhlIGNvbW1lbnRzIGFuZCB0aGUgbWFpbiBmdW5jdGlvbnMuCgpUaGVuLCBJJiMzOTtsbCBhYnNvbHV0ZWx5IG5lZWQgdG8gY2hlY2sgaXRzIEtjb25maWcgY29uZmlndXJhdGlvbi4gVW5kZXJzdGFuZGluZyBob3cgaXQmIzM5O3MgZW5hYmxlZCBhbmQgZGlzYWJsZWQsIGFuZCBhbnkgZGVwZW5kZW5jaWVzLCBpcyBjcnVjaWFsLiBJcyBpdCBhIG1vZHVsZT8gQnVpbHQtaW4/IFdoYXQgb3RoZXIga2VybmVsIGZlYXR1cmVzIGRvZXMgaXQgcmVseSBvbj8gSSYjMzk7bGwgcHJvYmFibHkgdXNlIGBncmVwcGVyYCAoaWYgYXZhaWxhYmxlIGluIG15IGVudmlyb25tZW50KSB0byBxdWlja2x5IGZpbmQgdGhlIHJlbGV2YW50IEtjb25maWcgZW50cnksIGJ1dCBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gcmVhZCBpdCBjYXJlZnVsbHkgdG8gc3BvdCBhbnkgZmxhZ3Mgb3IgY29uZGl0aW9uYWwgYnVpbGQgZGlyZWN0aXZlcy4gSWYgYGdyZXBwZXJgIGlzIGEgbm8tZ28sIGEgZ29vZCBvbGQtZmFzaGlvbmVkIGByZWFkLWZpbGVgIHdpbGwgZG8gdGhlIHRyaWNrLCBubyBwcm9ibGVtLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IEkga25vdyBob3cgdGhpcyBtb2R1bGUgZml0cyBpbnRvIHRoZSBicm9hZGVyIGtlcm5lbCBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDIxOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Nsc19yb3V0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZz00OTQ9Y29uZmlnIE5FVF9DTFNfUk9VVEU0XG4tLVxubmV0L3NjaGVkL0tjb25maWctNTAzLVx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG5uZXQvc2NoZWQvS2NvbmZpZzo1MDQ6XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjbHNfcm91dGUuXG5uZXQvc2NoZWQvS2NvbmZpZy01MDUtXG4tLVxubmV0L3NjaGVkL01ha2VmaWxlPTY4PW9iai0kKENPTkZJR19ORVRfQ0xTX1UzMilcdCYjNDM7PSBjbHNfdTMyLm9cbm5ldC9zY2hlZC9NYWtlZmlsZTo2OTpvYmotJChDT05GSUdfTkVUX0NMU19ST1VURTQpXHQmIzQzOz0gY2xzX3JvdXRlLm9cbm5ldC9zY2hlZC9NYWtlZmlsZS03MC1vYmotJChDT05GSUdfTkVUX0NMU19GVylcdCYjNDM7PSBjbHNfZncub1xuLS1cbm5ldC9zY2hlZC9jbHNfcm91dGUuYy0yLS8qXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmM6MzogKiBuZXQvc2NoZWQvY2xzX3JvdXRlLmNcdFJPVVRFNCBjbGFzc2lmaWVyLlxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jLTQtICpcbi0tXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmM9NjY5PXN0YXRpYyB2b2lkIHJvdXRlNF9iaW5kX2NsYXNzKHZvaWQgKmZoLCB1MzIgY2xhc3NpZCwgdW5zaWduZWQgbG9uZyBjbCwgdm9pZCAqcSxcbi0tXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmMtNjc2LVxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jOjY3NzpzdGF0aWMgc3RydWN0IHRjZl9wcm90b19vcHMgY2xzX3JvdXRlNF9vcHMgX19yZWFkX21vc3RseSA9IHtcbm5ldC9zY2hlZC9jbHNfcm91dGUuYy02NzgtXHQua2luZFx0XHQ9XHRcJiMzNDtyb3V0ZVwmIzM0Oyxcbi0tXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmM9NjkyPXN0YXRpYyBpbnQgX19pbml0IGluaXRfcm91dGU0KHZvaWQpXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmMtNjkzLXtcbm5ldC9zY2hlZC9jbHNfcm91dGUuYzo2OTQ6XHRyZXR1cm4gcmVnaXN0ZXJfdGNmX3Byb3RvX29wcyhcdTAwMjZjbHNfcm91dGU0X29wcyk7XG5uZXQvc2NoZWQvY2xzX3JvdXRlLmMtNjk1LX1cbi0tXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmM9Njk3PXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JvdXRlNCh2b2lkKVxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jLTY5OC17XG5uZXQvc2NoZWQvY2xzX3JvdXRlLmM6Njk5Olx0dW5yZWdpc3Rlcl90Y2ZfcHJvdG9fb3BzKFx1MDAyNmNsc19yb3V0ZTRfb3BzKTtcbm5ldC9zY2hlZC9jbHNfcm91dGUuYy03MDAtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDIxOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxOTcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIEtlcm5lbCYjMzk7cyBOZXR3b3JrIFNjaGVkdWxlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHNvbWV0aGluZyBuZXR3b3JrLXJlbGF0ZWQsIGFuZCBpdCYjMzk7cyBwb2ludGluZyBtZSB0b3dhcmRzIHRoZSBrZXJuZWwmIzM5O3Mgc2NoZWR1bGVyIGNvbmZpZ3VyYXRpb24uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIG91dCB0aGUgYG5ldC9zY2hlZC9LY29uZmlnYCBmaWxlLiBIbW0sIGxldCBtZSBzZWUuLi4gSSYjMzk7bSB0aGlua2luZyBhcm91bmQgbGluZSA0OTQgbWlnaHQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGF0IGxpa2VseSBpbmRpY2F0ZXMgdGhlIHNlY3Rpb24gb3IgYSBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIEkmIzM5O20gaW50ZXJlc3RlZCBpbiB3aXRoaW4gdGhhdCBmaWxlLiBUaW1lIHRvIG9wZW4gdGhhdCBmaWxlIHVwIGFuZCBoYXZlIGEgbG9vazsgaG9wZWZ1bGx5IHRoYXQgbGluZSBudW1iZXIgd2lsbCBnaXZlIG1lIGEgZ29vZCBqdW1waW5nLW9mZiBwb2ludC4gSXQgd2lsbCBsaWtlbHkgcmV2ZWFsIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDIxOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0ODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ4NTpcdFx0dHJpc3RhdGUgXCYjMzQ7RWxlbWVudGFyeSBjbGFzc2lmaWNhdGlvbiAoQkFTSUMpXCYjMzQ7XG4gNDg2Olx0XHRzZWxlY3QgTkVUX0NMU1xuIDQ4NzpcdFx0aGVscFxuIDQ4ODpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gY2xhc3NpZnkgcGFja2V0cyB1c2luZ1xuIDQ4OTpcdFx0ICBvbmx5IGV4dGVuZGVkIG1hdGNoZXMgYW5kIGFjdGlvbnMuXG4gNDkwOlx0XG4gNDkxOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiA0OTI6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNsc19iYXNpYy5cbiA0OTM6XHRcbiA0OTQ6XHRjb25maWcgTkVUX0NMU19ST1VURTRcbiA0OTU6XHRcdHRyaXN0YXRlIFwmIzM0O1JvdXRpbmcgZGVjaXNpb24gKFJPVVRFKVwmIzM0O1xuIDQ5NjpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gNDk3Olx0XHRzZWxlY3QgSVBfUk9VVEVfQ0xBU1NJRFxuIDQ5ODpcdFx0c2VsZWN0IE5FVF9DTFNcbiA0OTk6XHRcdGhlbHBcbiA1MDA6XHRcdCAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGJlIGFibGUgdG8gY2xhc3NpZnkgcGFja2V0c1xuIDUwMTpcdFx0ICBhY2NvcmRpbmcgdG8gdGhlIHJvdXRlIHRhYmxlIGVudHJ5IHRoZXkgbWF0Y2hlZC5cbiA1MDI6XHRcbiA1MDM6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDUwNDpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2xzX3JvdXRlLlxuIDUwNTpcdFxuIDUwNjpcdGNvbmZpZyBORVRfQ0xTX0ZXXG4gNTA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgbWFyayAoRlcpXCYjMzQ7XG4gNTA4Olx0XHRzZWxlY3QgTkVUX0NMU1xuIDUwOTpcdFx0aGVscFxuIDUxMDpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmUgYWJsZSB0byBjbGFzc2lmeSBwYWNrZXRzXG4gNTExOlx0XHQgIGFjY29yZGluZyB0byBuZXRmaWx0ZXIvZmlyZXdhbGwgbWFya3MuXG4gNTEyOlx0XG4gNTEzOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiA1MTQ6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNsc19mdy5cbiA1MTU6XHRcbiA1MTY6XHRjb25maWcgTkVUX0NMU19VMzJcbiA1MTc6XHRcdHRyaXN0YXRlIFwmIzM0O1VuaXZlcnNhbCAzMmJpdCBjb21wYXJpc29ucyB3LyBoYXNoaW5nIChVMzIpXCYjMzQ7XG4gNTE4Olx0XHRzZWxlY3QgTkVUX0NMU1xuIDUxOTpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDIxOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4OTMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb25maWd1cmF0aW9uOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIE5ldHdvcmsgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYE5FVF9DTFNfUk9VVEU0YCBhbmQgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuIEZpcnN0LCBJIHNlZSB0aGF0IGl0IHJlbGllcyBvbiBgSU5FVGAuIFRoYXQmIzM5O3Mgbm90IHN1cnByaXNpbmc7IElQdjQgcm91dGluZyBpcyBjb3JlIHRvIHRoZSBpbnRlcm5ldHdvcmtpbmcgc3RhY2suIEkgYWxzbyBub3RlIHRoYXQgaXQmIzM5O3MgcGFydCBvZiB0aGUgYE5FVF9TQ0hFRGAgYW5kIGBORVRfQ0xTYCBzdWJzeXN0ZW1zLiBUaGF0IHRlbGxzIG1lIHRoaXMgbGlrZWx5IHJlbGF0ZXMgdG8gdHJhZmZpYyBjbGFzc2lmaWNhdGlvbiBhbmQgcXVldWluZyB3aXRoaW4gdGhlIG5ldHdvcmsgc2NoZWR1bGVyLiBUbyBiZSBzdXJlLCBJIHNob3VsZCBjaGVjayB0aGUgYG5ldC9zY2hlZC9LY29uZmlnYCBmaWxlLCBJIHNob3VsZCBsb29rIGF0IHRoZSB0b3AtbGV2ZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpdGhpbiB0aGF0IGRpcmVjdG9yeS4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBhbGwgdGhlIHBhcmVudCBvcHRpb25zIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDIxOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBUcmFmZmljIGNvbnRyb2wgY29uZmlndXJhdGlvbi5cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0bWVudWNvbmZpZyBORVRfU0NIRURcbiAgIDc6XHRcdGJvb2wgXCYjMzQ7UW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nXCYjMzQ7XG4gICA4Olx0XHRzZWxlY3QgTkVUX1NDSF9GSUZPXG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIFdoZW4gdGhlIGtlcm5lbCBoYXMgc2V2ZXJhbCBwYWNrZXRzIHRvIHNlbmQgb3V0IG92ZXIgYSBuZXR3b3JrXG4gIDExOlx0XHQgIGRldmljZSwgaXQgaGFzIHRvIGRlY2lkZSB3aGljaCBvbmVzIHRvIHNlbmQgZmlyc3QsIHdoaWNoIG9uZXMgdG9cbiAgMTI6XHRcdCAgZGVsYXksIGFuZCB3aGljaCBvbmVzIHRvIGRyb3AuIFRoaXMgaXMgdGhlIGpvYiBvZiB0aGUgcXVldWVpbmdcbiAgMTM6XHRcdCAgZGlzY2lwbGluZXMsIHNldmVyYWwgZGlmZmVyZW50IGFsZ29yaXRobXMgZm9yIGhvdyB0byBkbyB0aGlzXG4gIDE0Olx0XHQgIFwmIzM0O2ZhaXJseVwmIzM0OyBoYXZlIGJlZW4gcHJvcG9zZWQuXG4gIDE1Olx0XG4gIDE2Olx0XHQgIElmIHlvdSBzYXkgTiBoZXJlLCB5b3Ugd2lsbCBnZXQgdGhlIHN0YW5kYXJkIHBhY2tldCBzY2hlZHVsZXIsIHdoaWNoXG4gIDE3Olx0XHQgIGlzIGEgRklGTyAoZmlyc3QgY29tZSwgZmlyc3Qgc2VydmVkKS4gSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGJlXG4gIDE4Olx0XHQgIGFibGUgdG8gY2hvb3NlIGZyb20gYW1vbmcgc2V2ZXJhbCBhbHRlcm5hdGl2ZSBhbGdvcml0aG1zIHdoaWNoIGNhblxuICAxOTpcdFx0ICB0aGVuIGJlIGF0dGFjaGVkIHRvIGRpZmZlcmVudCBuZXR3b3JrIGRldmljZXMuIFRoaXMgaXMgdXNlZnVsIGZvclxuICAyMDpcdFx0ICBleGFtcGxlIGlmIHNvbWUgb2YgeW91ciBuZXR3b3JrIGRldmljZXMgYXJlIHJlYWwgdGltZSBkZXZpY2VzIHRoYXRcbiAgMjE6XHRcdCAgbmVlZCBhIGNlcnRhaW4gbWluaW11bSBkYXRhIGZsb3cgcmF0ZSwgb3IgaWYgeW91IG5lZWQgdG8gbGltaXQgdGhlXG4gIDIyOlx0XHQgIG1heGltdW0gZGF0YSBmbG93IHJhdGUgZm9yIHRyYWZmaWMgd2hpY2ggbWF0Y2hlcyBzcGVjaWZpZWQgY3JpdGVyaWEuXG4gIDIzOlx0XHQgIFRoaXMgY29kZSBpcyBjb25zaWRlcmVkIHRvIGJlIGV4cGVyaW1lbnRhbC5cbiAgMjQ6XHRcbiAgMjU6XHRcdCAgVG8gYWRtaW5pc3RlciB0aGVzZSBzY2hlZHVsZXJzLCB5b3UmIzM5O2xsIG5lZWQgdGhlIHVzZXItbGV2ZWwgdXRpbGl0aWVzXG4gIDI2Olx0XHQgIGZyb20gdGhlIHBhY2thZ2UgaXByb3V0ZTImIzQzO3RjIGF0XG4gIDI3Olx0XHQgIFx1MDAzY2h0dHBzOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L3V0aWxzL25ldC9pcHJvdXRlMi9cdTAwM2UuICBUaGF0IHBhY2thZ2VcbiAgMjg6XHRcdCAgYWxzbyBjb250YWlucyBzb21lIGRvY3VtZW50YXRpb247IGZvciBtb3JlLCBjaGVjayBvdXRcbiAgMjk6XHRcdCAgXHUwMDNjaHR0cDovL3d3dy5saW51eGZvdW5kYXRpb24ub3JnL2NvbGxhYm9yYXRlL3dvcmtncm91cHMvbmV0d29ya2luZy9pcHJvdXRlMlx1MDAzZS5cbiAgMzA6XHRcbiAgMzE6XHRcdCAgVGhpcyBRdWFsaXR5IG9mIFNlcnZpY2UgKFFvUykgc3VwcG9ydCB3aWxsIGVuYWJsZSB5b3UgdG8gdXNlXG4gIDMyOlx0XHQgIERpZmZlcmVudGlhdGVkIFNlcnZpY2VzIChkaWZmc2VydikgYW5kIFJlc291cmNlIFJlc2VydmF0aW9uIFByb3RvY29sXG4gIDMzOlx0XHQgIChSU1ZQKSBvbiB5b3VyIExpbnV4IHJvdXRlciBpZiB5b3UgYWxzbyBzYXkgWSB0byB0aGUgY29ycmVzcG9uZGluZ1xuICAzNDpcdFx0ICBjbGFzc2lmaWVycyBiZWxvdy4gIERvY3VtZW50YXRpb24gYW5kIHNvZnR3YXJlIGlzIGF0XG4gIDM1Olx0XHQgIFx1MDAzY2h0dHA6Ly9kaWZmc2Vydi5zb3VyY2Vmb3JnZS5uZXQvXHUwMDNlLlxuICAzNjpcdFxuICAzNzpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSBhbmQgdG8gXCYjMzQ7L3Byb2MgZmlsZSBzeXN0ZW1cJiMzNDsgYmVsb3csIHlvdSB3aWxsIGJlIGFibGVcbiAgMzg6XHRcdCAgdG8gcmVhZCBzdGF0dXMgaW5mb3JtYXRpb24gYWJvdXQgcGFja2V0IHNjaGVkdWxlcnMgZnJvbSB0aGUgZmlsZVxuICAzOTpcdFx0ICAvcHJvYy9uZXQvcHNjaGVkLlxuICA0MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDIxOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4MDQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGV4dCwgcmVuZGVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgYW4gZXhwZXJ0LWxldmVsIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZpZWxkOgoKKipEaXZpbmcgaW50byB0aGUgUm91dGUgQ2xhc3NpZmllcioqCgpPa2F5LCB0aW1lIHRvIGdldCBhIGdvb2QgbG9vayBhdCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGhpbiB0aGUgcm91dGUgY2xhc3NpZmllciBtb2R1bGUuIE15IGZpcnN0IHN0ZXAgaXMgYWx3YXlzIHRvIGdvIHJpZ2h0IHRvIHRoZSBzb3VyY2UgY29kZSwgc28gSSYjMzk7bSBwdWxsaW5nIHVwIGBjbHNfcm91dGUuY2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgZnVuY3Rpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMgZGVmaW5lZCBpbiBgbmV0L3NjaGVkL2Nsc19yb3V0ZS5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiB0aGUgcm91dGUtYmFzZWQgY2xhc3NpZmllciByZXNpZGVzLCBzbyB1bmRlcnN0YW5kaW5nIGl0cyBpbnRlcm5hbHMgaXMga2V5IHRvIGNvbXByZWhlbmRpbmcgaXRzIGJlaGF2aW9yLiBJIG5lZWQgYSBjbGVhciBtZW50YWwgbW9kZWwgb2YgaG93IGl0IHdvcmtzIHVuZGVyIHRoZSBob29kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAyMTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfcm91dGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjY1Olx0XHRubGFfbmVzdF9jYW5jZWwoc2tiLCBuZXN0KTtcbiA2NjY6XHRcdHJldHVybiAtMTtcbiA2Njc6XHR9XG4gNjY4Olx0XG4gNjY5Olx0c3RhdGljIHZvaWQgcm91dGU0X2JpbmRfY2xhc3Modm9pZCAqZmgsIHUzMiBjbGFzc2lkLCB1bnNpZ25lZCBsb25nIGNsLCB2b2lkICpxLFxuIDY3MDpcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgYmFzZSlcbiA2NzE6XHR7XG4gNjcyOlx0XHRzdHJ1Y3Qgcm91dGU0X2ZpbHRlciAqZiA9IGZoO1xuIDY3MzpcdFxuIDY3NDpcdFx0dGNfY2xzX2JpbmRfY2xhc3MoY2xhc3NpZCwgY2wsIHEsIFx1MDAyNmYtXHUwMDNlcmVzLCBiYXNlKTtcbiA2NzU6XHR9XG4gNjc2Olx0XG4gNjc3Olx0c3RhdGljIHN0cnVjdCB0Y2ZfcHJvdG9fb3BzIGNsc19yb3V0ZTRfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4gNjc4Olx0XHQua2luZFx0XHQ9XHRcJiMzNDtyb3V0ZVwmIzM0OyxcbiA2Nzk6XHRcdC5jbGFzc2lmeVx0PVx0cm91dGU0X2NsYXNzaWZ5LFxuIDY4MDpcdFx0LmluaXRcdFx0PVx0cm91dGU0X2luaXQsXG4gNjgxOlx0XHQuZGVzdHJveVx0PVx0cm91dGU0X2Rlc3Ryb3ksXG4gNjgyOlx0XHQuZ2V0XHRcdD1cdHJvdXRlNF9nZXQsXG4gNjgzOlx0XHQuY2hhbmdlXHRcdD1cdHJvdXRlNF9jaGFuZ2UsXG4gNjg0Olx0XHQuZGVsZXRlXHRcdD1cdHJvdXRlNF9kZWxldGUsXG4gNjg1Olx0XHQud2Fsa1x0XHQ9XHRyb3V0ZTRfd2FsayxcbiA2ODY6XHRcdC5kdW1wXHRcdD1cdHJvdXRlNF9kdW1wLFxuIDY4NzpcdFx0LmJpbmRfY2xhc3NcdD1cdHJvdXRlNF9iaW5kX2NsYXNzLFxuIDY4ODpcdFx0Lm93bmVyXHRcdD1cdFRISVNfTU9EVUxFLFxuIDY4OTpcdH07XG4gNjkwOlx0TU9EVUxFX0FMSUFTX05FVF9DTFMoXCYjMzQ7cm91dGVcJiMzNDspO1xuIDY5MTpcdFxuIDY5MjpcdHN0YXRpYyBpbnQgX19pbml0IGluaXRfcm91dGU0KHZvaWQpXG4gNjkzOlx0e1xuIDY5NDpcdFx0cmV0dXJuIHJlZ2lzdGVyX3RjZl9wcm90b19vcHMoXHUwMDI2Y2xzX3JvdXRlNF9vcHMpO1xuIDY5NTpcdH1cbiA2OTY6XHRcbiA2OTc6XHRzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yb3V0ZTQodm9pZClcbiA2OTg6XHR7XG4gNjk5Olx0XHR1bnJlZ2lzdGVyX3RjZl9wcm90b19vcHMoXHUwMDI2Y2xzX3JvdXRlNF9vcHMpO1xuIDcwMDpcdH1cbiA3MDE6XHRcbiA3MDI6XHRtb2R1bGVfaW5pdChpbml0X3JvdXRlNClcbiA3MDM6XHRtb2R1bGVfZXhpdChleGl0X3JvdXRlNClcbiA3MDQ6XHRNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7Um91dGluZyB0YWJsZSByZWFsbSBiYXNlZCBUQyBjbGFzc2lmaWVyXCYjMzQ7KTtcbiA3MDU6XHRNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAyMTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjQwCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNzgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBjbHNfcm91dGUgUmVmY291bnQgQnVnZml4KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIHJlZmNvdW50LCBgZmlsdGVyc19yZWZgLCB0byBgc3RydWN0IHJvdXRlNF9idWNrZXRgIGluIGBuZXQvc2NoZWQvY2xzX3JvdXRlLmNgLiBUaGUgZ29hbCBpcyBwcm9wZXIgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgb2YgZmlsdGVycyB3aXRoaW4gdGhlIGBjbHNfcm91dGVgIG1vZHVsZSwgcGFydGljdWxhcmx5IGFyb3VuZCBkZWxldGlvbiBhbmQgbW9kaWZpY2F0aW9uLiBUaGlzIGlzIGNvcmUgVEMgKHRyYWZmaWMgY29udHJvbCkgY2xhc3NpZmljYXRpb24gbG9naWMsIHdoaWNoIGlzIG9idmlvdXNseSByZWFjaGFibGUgdmlhIG5ldGxpbmsgY2FsbHMgbGlrZSBgUlRNX05FV1RGSUxURVJgLCBgUlRNX0RFTFRGSUxURVJgLCBldGMuCgpUaGUgcGF0Y2ggaXRzZWxmIGxvb2tzIHN0cmFpZ2h0Zm9yd2FyZDoKCiogICBJbiBgcm91dGU0X2RlbGV0ZWAsIGluc3RlYWQgb2YgdGhlIG9sZCBpdGVyYXRpdmUgY2hlY2ssIGl0IHVzZXMgYHJlZmNvdW50X2RlY19hbmRfdGVzdGAgdG8gZGV0ZXJtaW5lIHdoZW4gdGhlIGJ1Y2tldCBjYW4gYmUgc2FmZWx5IGZyZWVkLiBUaGlzIGlzIG11Y2ggYmV0dGVyLgoqICAgYHJvdXRlNF9zZXRfcGFybXNgIG5vdyBhcHByb3ByaWF0ZWx5IGluY3JlbWVudHMgb3Igc2V0cyB0aGUgcmVmY291bnQgd2hlbiBmaWx0ZXJzIGFyZSBhZGRlZC4KKiAgIGByb3V0ZTRfY2hhbmdlYCBub3cgY29ycmVjdGx5IGRlY3JlbWVudHMgdGhlIHJlZmNvdW50IHdoZW4gcmVwbGFjaW5nIGZpbHRlcnMsIGFuZCBmcmVlcyB0aGUgYnVja2V0IGlmIGl0IGhpdHMgemVyby4KCkdpdmVuIHRoZSBoaXN0b3J5IG9mIGJ1Z3MgaW4gdGhpcyBhcmVhIOKAkyBmaWx0ZXIgbGlmZXRpbWUsIHJlZmNvdW50aW5nLCBhbmQgUkNVIHN5bmNocm9uaXphdGlvbiBpbiB0aGUgbmV0L3NjaGVkIHN1YnN5c3RlbSBoYXZlIGhpc3RvcmljYWxseSBiZWVuIGEgZ29sZCBtaW5lIGZvciBjb25jdXJyZW5jeSBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIOKAkyB0aGlzIGlzICphYnNvbHV0ZWx5KiB3b3J0aCBmdXp6aW5nLiBJIG1lYW4sIG1lbW9yeSBsZWFrcywgVUFGcywgZG91YmxlIGZyZWVzLi4uIHRoaXMgaXMgcHJpbWUgdGVycml0b3J5LgoKU28sIGZ1enppbmcgaXMgYSBnbyEgVGhlIG1vc3QgcmVsZXZhbnQgZnVuY3Rpb25zLCB0aGUgc3ltYm9scyB0byBmb2N1cyBvbiBpbiBgbmV0L3NjaGVkL2Nsc19yb3V0ZS5jYCwgYXJlOgoKKiAgIGByb3V0ZTRfY2hhbmdlYAoqICAgYHJvdXRlNF9kZWxldGVgCiogICBgcm91dGU0X3NldF9wYXJtc2AKClRoZXkgYXJlIGNhbGxlZCB0aHJvdWdoIGB0Y2ZfcHJvdG9fb3BzIGNsc19yb3V0ZTRfb3BzYCwgd2hpY2ggbWVhbnMgdGhleSBhcmUgY2FsbGJhY2tzIHJlZ2lzdGVyZWQgYW5kIGNhbGxlZCB0aHJvdWdoIGluZGlyZWN0IGNhbGxzLCBzbyB0aGVzZSBhcmUgZXhjZWxsZW50IHRhcmdldHMuCgpDb25maWctd2lzZSwgdGhlIGNvcmUgcmVxdWlyZW1lbnRzIGFyZSBwcmV0dHkgY2xlYXI6CgoqICAgYE5FVF9DTFNfUk9VVEU0YAoqICAgYE5FVF9TQ0hFRGAgKHRoaXMgaXMgdGhlIHBhcmVudCBjb25maWcpCiogICBgSU5FVGAgKGEgZGVwZW5kZW5jeSBvZiBgTkVUX0NMU19ST1VURTRgKQoqICAgYE5FVGAgKHRoZSBiYXNlIG5ldHdvcmsgc3Vic3lzdGVtIGNvbmZpZykKCk5vIG9idmlvdXMgbWlzc2luZyBkZXBlbmRlbmNpZXMgYXQgZmlyc3QgZ2xhbmNlLCBJJiMzOTtsbCBkb3VibGUgY2hlY2sgYG5ldC9LY29uZmlnYCBhbmQgYG5ldC9zY2hlZC9LY29uZmlnYCBmb3IgYW55dGhpbmcgZWxzZSByZWxldmFudC4gVGhpcyBzaG91bGQgYmUgYSBwcmV0dHkgdGlnaHQgdGVzdCBjYXNlIHRvIGdldCBzdGFydGVkLiBMZXQmIzM5O3Mgc2VlIGlmIHdlIGNhbiB0cmlnZ2VyIHNvbWUgb2YgdGhlc2UgY2xhc3NpYyBUQyBidWdzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAyMTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORVRfQ0xTX1JPVVRFNCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9MTUyNz1jb25maWcgTkVURklMVEVSX1hUX01BVENIX1JFQUxNXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1MzQtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTUzNTpcdCAgVGhpcyBtYXRjaCBwcmV0dHkgbXVjaCByZXNlbWJsZXMgdGhlIENPTkZJR19ORVRfQ0xTX1JPVVRFNCBvcHRpb25cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNTM2LVx0ICBpbiB0YyB3b3JsZC5cbi0tXG5uZXQvc2NoZWQvS2NvbmZpZz00ODQ9Y29uZmlnIE5FVF9DTFNfQkFTSUNcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy00OTMtXG5uZXQvc2NoZWQvS2NvbmZpZzo0OTQ6Y29uZmlnIE5FVF9DTFNfUk9VVEU0XG5uZXQvc2NoZWQvS2NvbmZpZy00OTUtXHR0cmlzdGF0ZSBcJiMzNDtSb3V0aW5nIGRlY2lzaW9uIChST1VURSlcJiMzNDtcbi0tXG5uZXQvc2NoZWQvTWFrZWZpbGU9Njg9b2JqLSQoQ09ORklHX05FVF9DTFNfVTMyKVx0JiM0Mzs9IGNsc191MzIub1xubmV0L3NjaGVkL01ha2VmaWxlOjY5Om9iai0kKENPTkZJR19ORVRfQ0xTX1JPVVRFNClcdCYjNDM7PSBjbHNfcm91dGUub1xubmV0L3NjaGVkL01ha2VmaWxlLTcwLW9iai0kKENPTkZJR19ORVRfQ0xTX0ZXKVx0JiM0Mzs9IGNsc19mdy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDIxOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMzcKCQkJCQkJCW91dHB1dDogMTM5CgkJCQkJCQl0aG91Z2h0czogMjQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgbmV0L3NjaGVkL0tjb25maWdgIERlcGVuZGVuY2llcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBmb3IgYE5FVF9DTFNfUk9VVEU0YC4gSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgYG5ldC9zY2hlZC9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBwYXJlbnQgbWVudXMgb3IgaW1tZWRpYXRlIGRlcGVuZGVuY2llcyBvbiBgTkVUX0NMU19ST1VURTRgIGl0c2VsZi4gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBjb25maWcgZGVmaW5pdGlvbjogYGNvbmZpZyBORVRfQ0xTX1JPVVRFNGAsIGFuZCBJIHNlZSB0aGF0IGl0JiMzOTtzIGEgdHJpc3RhdGUgb3B0aW9uIGFuZCBkZXBlbmRzIG9uIGBJTkVUYC4gIEl0IGFsc28gKnNlbGVjdHMqIGBJUF9ST1VURV9DTEFTU0lEYCBhbmQgYE5FVF9DTFNgLiAgQWhhLCBhbmQgaXQmIzM5O3MgZGVmaW5lZCB1bmRlciBgbWVudWNvbmZpZyBORVRfU0NIRURgLiBOb3cgSSByZWNhbGwgdGhhdCBpbiBgbmV0L0tjb25maWdgLCBgc291cmNlICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0O2AgaXMgZ3VhcmRlZCBieSBgaWYgTkVUYCwgc28gdGhhdCBnaXZlcyBtZSB0aGUgYnJvYWRlciBjb250ZXh0LgoKU28sIHRvIHN1bW1hcml6ZSB0aGUga2V5IGNvbmZpZ3M6IGBORVRfQ0xTX1JPVVRFNGAsIGBORVRfU0NIRURgLCBgTkVUX0NMU2AsIGFuZCBgSU5FVGAgYXJlIGFsbCByZWxldmFudCBoZXJlLiBUaGlzIGlzIGltcG9ydGFudC4KCk5vdywgbGV0IG1lIGRvdWJsZS1jaGVjayBhbGwgdGhlIHJlcXVpcmVtZW50cy4gIFRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIGlzIHRydWUsIGluZGljYXRpbmcgd2UgbmVlZCB0byBmb2N1cyBvbiB0aGlzIGFyZWEuIE15IGBFbmFibGVDb25maWdzYCBsaXN0LCB3aGljaCBpbmNsdWRlcyBgTkVUX0NMU19ST1VURTRgLCBgTkVUX1NDSEVEYCwgYW5kIGBJTkVUYCwgbGluZXMgdXAgd2l0aCB3aGF0IEkganVzdCBhbmFseXplZC4gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBgcm91dGU0X2NoYW5nZWAsIGByb3V0ZTRfZGVsZXRlYCwgYW5kIGByb3V0ZTRfc2V0X3Bhcm1zYCwgd2hpY2ggSSB1bmRlcnN0YW5kLgoKQWxyaWdodCwgSSYjMzk7bSBjb25maWRlbnQgaW4gbXkgYW5hbHlzaXMuIExldCYjMzk7cyBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUgZXZlcnl0aGluZyBsaW5lcyB1cCwgYW5kIHRoZW4gSSYjMzk7bGwgZm9ybXVsYXRlIHRoZSB0b29sIGNhbGwgYWNjb3JkaW5nbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDIxOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfQ0xTX1JPVVRFNCYjMzQ7LAogICAgJiMzNDtORVRfU0NIRUQmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JvdXRlNF9jaGFuZ2UmIzM0OywKICAgICYjMzQ7cm91dGU0X2RlbGV0ZSYjMzQ7LAogICAgJiMzNDtyb3V0ZTRfc2V0X3Bhcm1zJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByb3V0ZTQgY2xhc3NpZmllciAoY2xzX3JvdXRlKSBpbiB0aGUgdHJhZmZpYyBjb250cm9sIHN1YnN5c3RlbSBieSBpbnRyb2R1Y2luZyByZWZjb3VudGluZyAoZmlsdGVyc19yZWYpIHRvIG1hbmFnZSB0aGUgbGlmZXRpbWUgYW5kIGRlYWxsb2NhdGlvbiBvZiByb3V0ZTQgYnVja2V0cyBkdXJpbmcgZmlsdGVyIGluc2VydGlvbiwgcmVwbGFjZW1lbnQsIGFuZCBkZWxldGlvbi4gVGhpcyBpcyBjb3JlIG5ldHdvcmtpbmcgY29kZSByZWFjaGFibGUgdmlhIG5ldGxpbmsgdHJhZmZpYyBjb250cm9sIGludGVyZmFjZXMgYW5kIGFmZmVjdHMgbWVtb3J5IHNhZmV0eSAvIGxpZmV0aW1lIG1hbmFnZW1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9DTFNfUk9VVEU0JiMzNDssCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cm91dGU0X2NoYW5nZSYjMzQ7LAogICAgJiMzNDtyb3V0ZTRfZGVsZXRlJiMzNDssCiAgICAmIzM0O3JvdXRlNF9zZXRfcGFybXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJvdXRlNCBjbGFzc2lmaWVyIChjbHNfcm91dGUpIGluIHRoZSB0cmFmZmljIGNvbnRyb2wgc3Vic3lzdGVtIGJ5IGludHJvZHVjaW5nIHJlZmNvdW50aW5nIChmaWx0ZXJzX3JlZikgdG8gbWFuYWdlIHRoZSBsaWZldGltZSBhbmQgZGVhbGxvY2F0aW9uIG9mIHJvdXRlNCBidWNrZXRzIGR1cmluZyBmaWx0ZXIgaW5zZXJ0aW9uLCByZXBsYWNlbWVudCwgYW5kIGRlbGV0aW9uLiBUaGlzIGlzIGNvcmUgbmV0d29ya2luZyBjb2RlIHJlYWNoYWJsZSB2aWEgbmV0bGluayB0cmFmZmljIGNvbnRyb2wgaW50ZXJmYWNlcyBhbmQgYWZmZWN0cyBtZW1vcnkgc2FmZXR5IC8gbGlmZXRpbWUgbWFuYWdlbWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMjE6NTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAyMTo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSByZWZlcmVuY2UgY291bnRlciAoYGZpbHRlcnNfcmVmYCkgdG8gYHN0cnVjdCByb3V0ZTRfYnVja2V0YCBpbiBgbmV0L3NjaGVkL2Nsc19yb3V0ZS5jYCB0byB0cmFjayBhY3RpdmUgZmlsdGVycyBpbiBlYWNoIGJ1Y2tldCBhbmQgbWFuYWdlIGJ1Y2tldCByZWNsYW1hdGlvbiB2aWEgUkNVLCByZXBsYWNpbmcgYSBsaW5lYXIgc2NhbiBvZiBidWNrZXQgc2xvdHMuXG5cbi0gTWVtb3J5IEluaXRpYWxpemF0aW9uOiBUaGUgYnVja2V0IHN0cnVjdHVyZSBgc3RydWN0IHJvdXRlNF9idWNrZXRgIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmooKWAgYW5kIGBmaWx0ZXJzX3JlZmAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB3aXRoIGByZWZjb3VudF9zZXQoXHUwMDI2Yi1cdTAwM2VmaWx0ZXJzX3JlZiwgMSlgIHVwb24gY3JlYXRpb24uXG4tIFBvdGVudGlhbCBCdWcgVHlwZXM6IEFueSBwb3RlbnRpYWwgYnVncyByZXN1bHRpbmcgZnJvbSB0aGlzIHJlZmFjdG9yaW5nIChlLmcuIGluY29ycmVjdCByZWZlcmVuY2UgY291bnRpbmcsIGRvdWJsZSBmcmVlcywgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucykgYXJlIG1lbW9yeSBsaWZlY3ljbGUgLyBwb2ludGVyIHZhbGlkaXR5IGJ1Z3MgdGhhdCBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHRoZSBgcmVmY291bnRfdGAgcnVudGltZSBjaGVja3MuXG4tIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IC8gSW5mby1sZWFrIFJpc2s6IFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0dXJlIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gYnJhbmNoaW5nIGRlY2lzaW9ucy5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1ZGIzODdjM2Y5M2Y0ZTRiMTM4OTIzMjgxNGE1MjczYWE1MjIyMmQ0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMjkgMjE6NTU6MjAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX3JvdXRlLmMgYi9uZXQvc2NoZWQvY2xzX3JvdXRlLmMKaW5kZXggMGQxMzI0YzkwNTgzNy4uMTdiMGViYjc2NjYyNiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9jbHNfcm91dGUuYwpAQCAtMTEsNiAmIzQzOzExLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zdHJpbmcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9lcnJuby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9yZWZjb3VudC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NrYnVmZi5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9kc3QuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvcm91dGUuaCZndDsKQEAgLTQxLDYgJiM0Mzs0Miw3IEBAIHN0cnVjdCByb3V0ZTRfaGVhZCB7CiBzdHJ1Y3Qgcm91dGU0X2J1Y2tldCB7CiAJLyogMTYgRlJPTSBidWNrZXRzICYjNDM7IDE2IElJRiBidWNrZXRzICYjNDM7IDEgd2lsZGNhcmQgYnVja2V0ICovCiAJc3RydWN0IHJvdXRlNF9maWx0ZXIgX19yY3UJKmh0WzE2ICYjNDM7IDE2ICYjNDM7IDFdOwomIzQzOwlyZWZjb3VudF90CQkJZmlsdGVyc19yZWY7CiAJc3RydWN0IHJjdV9oZWFkCQkJcmN1OwogfTsKIApAQCAtMzM2LDcgJiM0MzszMzgsNyBAQCBzdGF0aWMgaW50IHJvdXRlNF9kZWxldGUoc3RydWN0IHRjZl9wcm90byAqdHAsIHZvaWQgKmFyZywgYm9vbCAqbGFzdCwKIAlzdHJ1Y3Qgcm91dGU0X2ZpbHRlciAqbmY7CiAJc3RydWN0IHJvdXRlNF9idWNrZXQgKmI7CiAJdW5zaWduZWQgaW50IGggPSAwOwotCWludCBpLCBoMTsKJiM0MzsJaW50IGgxOwogCiAJaWYgKCFoZWFkIHx8ICFmKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTM2MiwyMyAmIzQzOzM2NCwxNCBAQCBzdGF0aWMgaW50IHJvdXRlNF9kZWxldGUoc3RydWN0IHRjZl9wcm90byAqdHAsIHZvaWQgKmFyZywgYm9vbCAqbGFzdCwKIAkJCXRjZl9leHRzX2dldF9uZXQoJmFtcDtmLSZndDtleHRzKTsKIAkJCXRjZl9xdWV1ZV93b3JrKCZhbXA7Zi0mZ3Q7cndvcmssIHJvdXRlNF9kZWxldGVfZmlsdGVyX3dvcmspOwogCi0JCQkvKiBTdHJpcCBSVE5MIHByb3RlY3RlZCB0cmVlICovCi0JCQlmb3IgKGkgPSAwOyBpICZsdDs9IDMyOyBpJiM0MzsmIzQzOykgewotCQkJCXN0cnVjdCByb3V0ZTRfZmlsdGVyICpydDsKLQotCQkJCXJ0ID0gcnRubF9kZXJlZmVyZW5jZShiLSZndDtodFtpXSk7Ci0JCQkJaWYgKHJ0KQotCQkJCQlnb3RvIG91dDsKJiM0MzsJCQlpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KCZhbXA7Yi0mZ3Q7ZmlsdGVyc19yZWYpKSB7CiYjNDM7CQkJCVJDVV9JTklUX1BPSU5URVIoaGVhZC0mZ3Q7dGFibGVbdG9faGFzaChoKV0sIE5VTEwpOwomIzQzOwkJCQlrZnJlZV9yY3UoYiwgcmN1KTsKIAkJCX0KLQotCQkJLyogT0ssIHNlc3Npb24gaGFzIG5vIGZsb3dzICovCi0JCQlSQ1VfSU5JVF9QT0lOVEVSKGhlYWQtJmd0O3RhYmxlW3RvX2hhc2goaCldLCBOVUxMKTsKLQkJCWtmcmVlX3JjdShiLCByY3UpOwogCQkJYnJlYWs7CiAJCX0KIAl9CiAKLW91dDoKIAkqbGFzdCA9IHRydWU7CiAJZm9yIChoMSA9IDA7IGgxICZsdDs9IDI1NjsgaDEmIzQzOyYjNDM7KSB7CiAJCWlmIChyY3VfYWNjZXNzX3BvaW50ZXIoaGVhZC0mZ3Q7dGFibGVbaDFdKSkgewpAQCAtNDU5LDYgJiM0Mzs0NTIsNyBAQCBzdGF0aWMgaW50IHJvdXRlNF9zZXRfcGFybXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwKIAkJaWYgKGIgPT0gTlVMTCkKIAkJCXJldHVybiAtRU5PQlVGUzsKIAomIzQzOwkJcmVmY291bnRfc2V0KCZhbXA7Yi0mZ3Q7ZmlsdGVyc19yZWYsIDEpOwogCQlyY3VfYXNzaWduX3BvaW50ZXIoaGVhZC0mZ3Q7dGFibGVbaDFdLCBiKTsKIAl9IGVsc2UgewogCQl1bnNpZ25lZCBpbnQgaDIgPSBmcm9tX2hhc2gobmhhbmRsZSAmZ3Q7Jmd0OyAxNik7CkBAIC00NjgsNiAmIzQzOzQ2Miw4IEBAIHN0YXRpYyBpbnQgcm91dGU0X3NldF9wYXJtcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLAogCQkgICAgIGZwID0gcnRubF9kZXJlZmVyZW5jZShmcC0mZ3Q7bmV4dCkpCiAJCQlpZiAoZnAtJmd0O2hhbmRsZSA9PSBmLSZndDtoYW5kbGUpCiAJCQkJcmV0dXJuIC1FRVhJU1Q7CiYjNDM7CiYjNDM7CQlyZWZjb3VudF9pbmMoJmFtcDtiLSZndDtmaWx0ZXJzX3JlZik7CiAJfQogCiAJaWYgKHRiW1RDQV9ST1VURTRfVE9dKQpAQCAtNTAwLDcgJiM0Mzs0OTYsNyBAQCBzdGF0aWMgaW50IHJvdXRlNF9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLAogCXN0cnVjdCByb3V0ZTRfZmlsdGVyICpmb2xkLCAqZjEsICpwZnAsICpmID0gTlVMTDsKIAlzdHJ1Y3Qgcm91dGU0X2J1Y2tldCAqYjsKIAlzdHJ1Y3QgbmxhdHRyICp0YltUQ0FfUk9VVEU0X01BWCAmIzQzOyAxXTsKLQl1bnNpZ25lZCBpbnQgaCwgdGg7CiYjNDM7CXVuc2lnbmVkIGludCBoOwogCWludCBlcnI7CiAJYm9vbCBuZXcgPSB0cnVlOwogCkBAIC01NjAsMTcgJiM0Mzs1NTYsMjAgQEAgc3RhdGljIGludCByb3V0ZTRfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwKIAlyY3VfYXNzaWduX3BvaW50ZXIoKmZwLCBmKTsKIAogCWlmIChmb2xkKSB7Ci0JCXRoID0gdG9faGFzaChmb2xkLSZndDtoYW5kbGUpOwomIzQzOwkJYiA9IGZvbGQtJmd0O2JrdDsKIAkJaCA9IGZyb21faGFzaChmb2xkLSZndDtoYW5kbGUgJmd0OyZndDsgMTYpOwotCQliID0gcnRubF9kZXJlZmVyZW5jZShoZWFkLSZndDt0YWJsZVt0aF0pOwotCQlpZiAoYikgewotCQkJZnAgPSAmYW1wO2ItJmd0O2h0W2hdOwotCQkJZm9yIChwZnAgPSBydG5sX2RlcmVmZXJlbmNlKCpmcCk7IHBmcDsKLQkJCSAgICAgZnAgPSAmYW1wO3BmcC0mZ3Q7bmV4dCwgcGZwID0gcnRubF9kZXJlZmVyZW5jZSgqZnApKSB7Ci0JCQkJaWYgKHBmcCA9PSBmb2xkKSB7Ci0JCQkJCXJjdV9hc3NpZ25fcG9pbnRlcigqZnAsIGZvbGQtJmd0O25leHQpOwotCQkJCQlicmVhazsKJiM0MzsJCWZwID0gJmFtcDtiLSZndDtodFtoXTsKJiM0MzsJCWZvciAocGZwID0gcnRubF9kZXJlZmVyZW5jZSgqZnApOyBwZnA7CiYjNDM7CQkgICAgIGZwID0gJmFtcDtwZnAtJmd0O25leHQsIHBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKSkgewomIzQzOwkJCWlmIChwZnAgPT0gZm9sZCkgewomIzQzOwkJCQlyY3VfYXNzaWduX3BvaW50ZXIoKmZwLCBmb2xkLSZndDtuZXh0KTsKJiM0MzsJCQkJaWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO2ItJmd0O2ZpbHRlcnNfcmVmKSkgewomIzQzOwkJCQkJdW5zaWduZWQgaW50IHRoID0gdG9faGFzaChmb2xkLSZndDtoYW5kbGUpOwomIzQzOwomIzQzOwkJCQkJUkNVX0lOSVRfUE9JTlRFUihoZWFkLSZndDt0YWJsZVt0aF0sIE5VTEwpOwomIzQzOwkJCQkJa2ZyZWVfcmN1KGIsIHJjdSk7CiAJCQkJfQomIzQzOwkJCQlicmVhazsKIAkJCX0KIAkJfQogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDIxOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMzEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBjbHNfcm91dGUuYyBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgd2UgbmVlZCB0byBicmluZyBpbiBLTVNBTi4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGFjdHVhbGx5IGNoYW5naW5nLiBPa2F5LCBpdCYjMzk7cyBpbiBgbmV0L3NjaGVkL2Nsc19yb3V0ZS5jYCwgc28gaXQmIzM5O3MgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIHJvdXRpbmcgY2xhc3NpZmllci4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgYWRkaW5nIGEgYHJlZmNvdW50X3QgZmlsdGVyc19yZWY7YCBmaWVsZCB0byB0aGUgYHN0cnVjdCByb3V0ZTRfYnVja2V0YC4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGlzIGlzIGNsYXNzaWMgcmVmY291bnRpbmcsIGFuZCB0aGF0IHRoZSBleGlzdGluZyBjb2RlIHByb2JhYmx5IGhhZCBzb21lIHJhY2UgY29uZGl0aW9ucyBhcm91bmQgbWFuYWdpbmcgdGhlIGJ1Y2tldHMuIExldCYjMzk7cyBzZWUgaG93IHRoZXkmIzM5O3JlIGhhbmRsaW5nIGl0Li4uIEFoLCBnb3QgaXQuIEluIGByb3V0ZTRfZGVsZXRlYCwgdGhleSYjMzk7cmUgcmVwbGFjaW5nIHRoZSBvbGQgbG9vcC1iYXNlZCBlbXB0aW5lc3MgY2hlY2sgKGBmb3IgKGkgPSAwOyBpICZsdDs9IDMyOyBpJiM0MzsmIzQzOylgKSB3aXRoIGEgYHJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO2ItJmd0O2ZpbHRlcnNfcmVmKWAuIE1ha2VzIHNlbnNlOyB0aGF0JiMzOTtzIG11Y2ggY2xlYW5lciBhbmQgbGVzcyBwcm9uZSB0byBlcnJvcnMuIGBrZnJlZV9yY3UoYiwgcmN1KWAgaXMgYWxzbyBiZWluZyB1c2VkLCB3aGljaCBpcyBnb29kIHRvIHNlZSAtIHByb3RlY3RpbmcgYWdhaW5zdCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MuCgpOb3csIGxvb2tpbmcgYXQgaG93IHRoZSByZWZjb3VudCBpcyBtYW5hZ2VkLi4uIGByb3V0ZTRfc2V0X3Bhcm1zYCBpbml0aWFsaXplcyB0aGUgY291bnQgdG8gMSB3aGVuIGEgYnVja2V0IGlzIGNyZWF0ZWQgKGByZWZjb3VudF9zZXQoJmFtcDtiLSZndDtmaWx0ZXJzX3JlZiwgMSlgKSwgYW5kIGluY3JlYXNlcyBpdCB3aGVuIGEgZmlsdGVyIGlzIGFkZGVkIChgcmVmY291bnRfaW5jKCZhbXA7Yi0mZ3Q7ZmlsdGVyc19yZWYpYCkuIExvb2tzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2ggc28gZmFyLiBUaGVuLCBpbiBgcm91dGU0X2NoYW5nZWAsIHdoZW4gYSBgZm9sZGAgaXMgcmVwbGFjZWQsIGl0IGRlY3JlbWVudHMgdGhlIGNvdW50IHVzaW5nIGByZWZjb3VudF9kZWNfYW5kX3Rlc3QoJmFtcDtiLSZndDtmaWx0ZXJzX3JlZilgIGFuZCBmcmVlcyB0aGUgYnVja2V0IGlmIGl0IGhpdHMgemVyby4KCkJlZm9yZSBJIGNhbiBnaXZlIHRoaXMgYSBkZWZpbml0aXZlIHBhc3Mgb3IgZmFpbCwgSSBuZWVkIHRvIHNlZSB0aGUgc3Vycm91bmRpbmcgY29udGV4dCBpbiBgbmV0L3NjaGVkL2Nsc19yb3V0ZS5jYC4gVGltZSB0byBmaXJlIHVwIG15IHRydXN0eSBncmVwcGVyIG9yIHJlYWQtZmlsZSB0byBzZWUgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCBhbmQgaG93IHRoZSBidWNrZXRzIGludGVyYWN0IHdpdGggdGhlIHJlc3Qgb2YgdGhlIHJvdXRpbmcgY2xhc3NpZmllci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIHJlZmNvdW50aW5nIHNjaGVtZSBpcyByb2J1c3QgZW5vdWdoIHRvIGhhbmRsZSBhbGwgcG9zc2libGUgc2NlbmFyaW9zLCBlc3BlY2lhbGx5IGNvbmN1cnJlbnQgYWNjZXNzZXMuIEZyb20gYSBoaWdoIGxldmVsIHRoaXMgbG9va3MgbGlrZSBhIGdvb2QgY2hhbmdlLCBidXQgYSBtb3JlIHRob3JvdWdoIHJldmlldyBpcyBpbiBvcmRlciB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAyMTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyb3V0ZTRfc2V0X3Bhcm1zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2Nsc19yb3V0ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfcm91dGUuYz0zODY9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHJvdXRlNF9wb2xpY3lbVENBX1JPVVRFNF9NQVggJiM0MzsgMV0gPSB7XG4tLVxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jLTM5Mi1cbm5ldC9zY2hlZC9jbHNfcm91dGUuYzozOTM6c3RhdGljIGludCByb3V0ZTRfc2V0X3Bhcm1zKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmMtMzk0LVx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGJhc2UsIHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmLFxuLS1cbm5ldC9zY2hlZC9jbHNfcm91dGUuYz00ODk9c3RhdGljIGludCByb3V0ZTRfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbi0tXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmMtNTQwLVxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jOjU0MTpcdGVyciA9IHJvdXRlNF9zZXRfcGFybXMobmV0LCB0cCwgYmFzZSwgZiwgaGFuZGxlLCBoZWFkLCB0Yixcbm5ldC9zY2hlZC9jbHNfcm91dGUuYy01NDItXHRcdFx0ICAgICAgIHRjYVtUQ0FfUkFURV0sIG5ldywgZmxhZ3MsIGV4dGFjayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDIxOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzOTAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGNvZGUgc2VnbWVudHMgaW4gYG5ldC9zY2hlZC9jbHNfcm91dGUuY2A6CgoqKkRlZXAgRGl2ZSBpbnRvIGBjbHNfcm91dGVgIGFuZCBSZWZlcmVuY2UgQ291bnRpbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgYGNsc19yb3V0ZWAgYWdhaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gb2YgYGJgIGFuZCBob3cgYGZpbHRlcnNfcmVmYCBpcyBsZXZlcmFnZWQgaW4gdGhpcyBjb250ZXh0LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gdGhvc2UgY3J1Y2lhbCBmdW5jdGlvbnM6IGByb3V0ZTRfc2V0X3Bhcm1zYCwgYHJvdXRlNF9jaGFuZ2VgLCBhbmQgYHJvdXRlNF9kZWxldGVgLiBJIG5lZWQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgaGFuZGxlIHRoZSBsaWZlY3ljbGUgb2YgdGhlIGZpbHRlciBkYXRhIGFuZCwgcGFydGljdWxhcmx5LCBob3cgdGhhdCByZWZlcmVuY2UgY291bnRlciAoYGZpbHRlcnNfcmVmYCkgcGxheXMgYSByb2xlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ3Jhc3AgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBlbnN1cmUgdGhhdCB3ZSYjMzk7cmUgcHJvcGVybHkgcHJvdGVjdGluZyB0aGUgZmlsdGVyIGRhdGEgYWdhaW5zdCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MuIEkmIzM5O2xsIGJlIG1ldGljdWxvdXNseSBleGFtaW5pbmcgdGhlIGNvZGUgdG8gcGlucG9pbnQgZXhhY3RseSB3aGVyZSBtZW1vcnkgaXMgYWxsb2NhdGVkLCBpbml0aWFsaXplZCwgcmVmZXJlbmNlZCwgYW5kIHVsdGltYXRlbHksIGRlYWxsb2NhdGVkLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBtYWludGFpbmluZyBkYXRhIGludGVncml0eSBhbmQgc3lzdGVtIHN0YWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMjE6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvY2xzX3JvdXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ0MDpcdFx0XHR9XG4gNDQxOlx0XHR9XG4gNDQyOlx0XG4gNDQzOlx0XHRpZiAoIW5oYW5kbGUpIHtcbiA0NDQ6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtSZXBsYWNpbmcgd2l0aCBoYW5kbGUgb2YgMCBpcyBpbnZhbGlkXCYjMzQ7KTtcbiA0NDU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDQ2Olx0XHR9XG4gNDQ3Olx0XG4gNDQ4Olx0XHRoMSA9IHRvX2hhc2gobmhhbmRsZSk7XG4gNDQ5Olx0XHRiID0gcnRubF9kZXJlZmVyZW5jZShoZWFkLVx1MDAzZXRhYmxlW2gxXSk7XG4gNDUwOlx0XHRpZiAoIWIpIHtcbiA0NTE6XHRcdFx0YiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCByb3V0ZTRfYnVja2V0LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIDQ1MjpcdFx0XHRpZiAoYiA9PSBOVUxMKVxuIDQ1MzpcdFx0XHRcdHJldHVybiAtRU5PQlVGUztcbiA0NTQ6XHRcbiA0NTU6XHRcdFx0cmVmY291bnRfc2V0KFx1MDAyNmItXHUwMDNlZmlsdGVyc19yZWYsIDEpO1xuIDQ1NjpcdFx0XHRyY3VfYXNzaWduX3BvaW50ZXIoaGVhZC1cdTAwM2V0YWJsZVtoMV0sIGIpO1xuIDQ1NzpcdFx0fSBlbHNlIHtcbiA0NTg6XHRcdFx0dW5zaWduZWQgaW50IGgyID0gZnJvbV9oYXNoKG5oYW5kbGUgXHUwMDNlXHUwMDNlIDE2KTtcbiA0NTk6XHRcbiA0NjA6XHRcdFx0Zm9yIChmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoYi1cdTAwM2VodFtoMl0pO1xuIDQ2MTpcdFx0XHQgICAgIGZwO1xuIDQ2MjpcdFx0XHQgICAgIGZwID0gcnRubF9kZXJlZmVyZW5jZShmcC1cdTAwM2VuZXh0KSlcbiA0NjM6XHRcdFx0XHRpZiAoZnAtXHUwMDNlaGFuZGxlID09IGYtXHUwMDNlaGFuZGxlKVxuIDQ2NDpcdFx0XHRcdFx0cmV0dXJuIC1FRVhJU1Q7XG4gNDY1Olx0XG4gNDY2Olx0XHRcdHJlZmNvdW50X2luYyhcdTAwMjZiLVx1MDAzZWZpbHRlcnNfcmVmKTtcbiA0Njc6XHRcdH1cbiA0Njg6XHRcbiA0Njk6XHRcdGlmICh0YltUQ0FfUk9VVEU0X1RPXSlcbiA0NzA6XHRcdFx0Zi1cdTAwM2VpZCA9IHRvO1xuIDQ3MTpcdFxuIDQ3MjpcdFx0aWYgKHRiW1RDQV9ST1VURTRfRlJPTV0pXG4gNDczOlx0XHRcdGYtXHUwMDNlaWQgPSB0byB8IGlkXHUwMDNjXHUwMDNjMTY7XG4gNDc0Olx0XHRlbHNlIGlmICh0YltUQ0FfUk9VVEU0X0lJRl0pXG4gNDc1Olx0XHRcdGYtXHUwMDNlaWlmID0gaWQ7XG4gNDc2Olx0XG4gNDc3Olx0XHRmLVx1MDAzZWhhbmRsZSA9IG5oYW5kbGU7XG4gNDc4Olx0XHRmLVx1MDAzZWJrdCA9IGI7XG4gNDc5Olx0XHRmLVx1MDAzZXRwID0gdHA7XG4gNDgwOlx0XG4gNDgxOlx0XHRpZiAodGJbVENBX1JPVVRFNF9DTEFTU0lEXSkge1xuIDQ4MjpcdFx0XHRmLVx1MDAzZXJlcy5jbGFzc2lkID0gbmxhX2dldF91MzIodGJbVENBX1JPVVRFNF9DTEFTU0lEXSk7XG4gNDgzOlx0XHRcdHRjZl9iaW5kX2ZpbHRlcih0cCwgXHUwMDI2Zi1cdTAwM2VyZXMsIGJhc2UpO1xuIDQ4NDpcdFx0fVxuIDQ4NTpcdFxuIDQ4NjpcdFx0cmV0dXJuIDA7XG4gNDg3Olx0fVxuIDQ4ODpcdFxuIDQ4OTpcdHN0YXRpYyBpbnQgcm91dGU0X2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4gNDkwOlx0XHRcdFx0IHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB1bnNpZ25lZCBsb25nIGJhc2UsIHUzMiBoYW5kbGUsXG4gNDkxOlx0XHRcdFx0IHN0cnVjdCBubGF0dHIgKip0Y2EsIHZvaWQgKiphcmcsIHUzMiBmbGFncyxcbiA0OTI6XHRcdFx0XHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIDQ5MzpcdHtcbiA0OTQ6XHRcdHN0cnVjdCByb3V0ZTRfaGVhZCAqaGVhZCA9IHJ0bmxfZGVyZWZlcmVuY2UodHAtXHUwMDNlcm9vdCk7XG4gNDk1Olx0XHRzdHJ1Y3Qgcm91dGU0X2ZpbHRlciBfX3JjdSAqKmZwO1xuIDQ5NjpcdFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgKmZvbGQsICpmMSwgKnBmcCwgKmYgPSBOVUxMO1xuIDQ5NzpcdFx0c3RydWN0IHJvdXRlNF9idWNrZXQgKmI7XG4gNDk4Olx0XHRzdHJ1Y3QgbmxhdHRyICp0YltUQ0FfUk9VVEU0X01BWCAmIzQzOyAxXTtcbiA0OTk6XHRcdHVuc2lnbmVkIGludCBoO1xuIDUwMDpcdFx0aW50IGVycjtcbiA1MDE6XHRcdGJvb2wgbmV3ID0gdHJ1ZTtcbiA1MDI6XHRcbiA1MDM6XHRcdGlmICghaGFuZGxlKSB7XG4gNTA0Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7Q3JlYXRpbmcgd2l0aCBoYW5kbGUgb2YgMCBpcyBpbnZhbGlkXCYjMzQ7KTtcbiA1MDU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTA2Olx0XHR9XG4gNTA3Olx0XG4gNTA4Olx0XHRpZiAoTkxfUkVRX0FUVFJfQ0hFQ0soZXh0YWNrLCBOVUxMLCB0Y2EsIFRDQV9PUFRJT05TKSkge1xuIDUwOTpcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtNaXNzaW5nIG9wdGlvbnNcJiMzNDspO1xuIDUxMDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1MTE6XHRcdH1cbiA1MTI6XHRcbiA1MTM6XHRcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZCh0YiwgVENBX1JPVVRFNF9NQVgsIHRjYVtUQ0FfT1BUSU9OU10sXG4gNTE0Olx0XHRcdFx0XHRcdCAgcm91dGU0X3BvbGljeSwgTlVMTCk7XG4gNTE1Olx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuIDUxNjpcdFx0XHRyZXR1cm4gZXJyO1xuIDUxNzpcdFxuIDUxODpcdFx0Zm9sZCA9ICphcmc7XG4gNTE5Olx0XHRpZiAoZm9sZCBcdTAwMjZcdTAwMjYgZm9sZC1cdTAwM2VoYW5kbGUgIT0gaGFuZGxlKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAyMTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTI2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgYGNsc19yb3V0ZS5jYCBDb2RlKioKCk9rYXksIHNvIHdlJiMzOTt2ZSBhZGRyZXNzZWQgdGhlIGJyb2FkZXIgaXNzdWUsIGJ1dCBJIGhhdmUgYSBuYWdnaW5nIGZlZWxpbmcgd2UgbmVlZCB0byBiZSB0aG9yb3VnaC4gTGV0JiMzOTtzIG5vdCBqdXN0IGFzc3VtZTsgd2UgbmVlZCB0byB2ZXJpZnkuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gbGluZXMgNTIwIHRocm91Z2ggNTgwIG9mIGBjbHNfcm91dGUuY2AuIFRoaXMgc2VjdGlvbiAqZmVlbHMqIGxpa2UgYSBsaWtlbHkgYXJlYSBmb3IgdGhlIHByb2JsZW0gd2UgYXJlIGV4cGVyaWVuY2luZy4gSXTigJlzIHdoZXJlIGEgY3JpdGljYWwgcm91dGluZyBmdW5jdGlvbiBoYXBwZW5zLiBJIGNhbiBhbHJlYWR5IHBpY3R1cmUgdGhlIHBvdGVudGlhbCBsb2dpYyBmbG93IHRoZXJlLCBhbmQgdGhlIHNwZWNpZmljIHZhcmlhYmxlcyB0aGF0IG1pZ2h0IGJlIGludm9sdmVkLiBUaW1lIHRvIHJvbGwgdXAgbXkgc2xlZXZlcyBhbmQgc2VlIHdoYXQgdGhvc2UgbGluZXMgYXJlICpyZWFsbHkqIGRvaW5nLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBlZGdlIGNhc2VzLCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBvciBhbnl0aGluZyB0aGF0IGNvdWxkIGJlIHN1YnRseSBpbXBhY3RpbmcgdGhlIHJvdXRpbmcgZGVjaXNpb24uIEl04oCZcyBhbHdheXMgYmVzdCB0byBiZSBwcmVjaXNlIHdoZW4gaXQgY29tZXMgdG8gcHJvYmxlbXMgbGlrZSB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAyMTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfcm91dGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTIwOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTIxOlx0XG4gNTIyOlx0XHRlcnIgPSAtRU5PQlVGUztcbiA1MjM6XHRcdGYgPSBremFsbG9jX29iaihzdHJ1Y3Qgcm91dGU0X2ZpbHRlciwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiA1MjQ6XHRcdGlmICghZilcbiA1MjU6XHRcdFx0Z290byBlcnJvdXQ7XG4gNTI2Olx0XG4gNTI3Olx0XHRlcnIgPSB0Y2ZfZXh0c19pbml0KFx1MDAyNmYtXHUwMDNlZXh0cywgbmV0LCBUQ0FfUk9VVEU0X0FDVCwgVENBX1JPVVRFNF9QT0xJQ0UpO1xuIDUyODpcdFx0aWYgKGVyciBcdTAwM2MgMClcbiA1Mjk6XHRcdFx0Z290byBlcnJvdXQ7XG4gNTMwOlx0XG4gNTMxOlx0XHRpZiAoZm9sZCkge1xuIDUzMjpcdFx0XHRmLVx1MDAzZWlkID0gZm9sZC1cdTAwM2VpZDtcbiA1MzM6XHRcdFx0Zi1cdTAwM2VpaWYgPSBmb2xkLVx1MDAzZWlpZjtcbiA1MzQ6XHRcdFx0Zi1cdTAwM2VoYW5kbGUgPSBmb2xkLVx1MDAzZWhhbmRsZTtcbiA1MzU6XHRcbiA1MzY6XHRcdFx0Zi1cdTAwM2V0cCA9IGZvbGQtXHUwMDNldHA7XG4gNTM3Olx0XHRcdGYtXHUwMDNlYmt0ID0gZm9sZC1cdTAwM2Via3Q7XG4gNTM4Olx0XHRcdG5ldyA9IGZhbHNlO1xuIDUzOTpcdFx0fVxuIDU0MDpcdFxuIDU0MTpcdFx0ZXJyID0gcm91dGU0X3NldF9wYXJtcyhuZXQsIHRwLCBiYXNlLCBmLCBoYW5kbGUsIGhlYWQsIHRiLFxuIDU0MjpcdFx0XHRcdCAgICAgICB0Y2FbVENBX1JBVEVdLCBuZXcsIGZsYWdzLCBleHRhY2spO1xuIDU0MzpcdFx0aWYgKGVyciBcdTAwM2MgMClcbiA1NDQ6XHRcdFx0Z290byBlcnJvdXQ7XG4gNTQ1Olx0XG4gNTQ2Olx0XHRoID0gZnJvbV9oYXNoKGYtXHUwMDNlaGFuZGxlIFx1MDAzZVx1MDAzZSAxNik7XG4gNTQ3Olx0XHRmcCA9IFx1MDAyNmYtXHUwMDNlYmt0LVx1MDAzZWh0W2hdO1xuIDU0ODpcdFx0Zm9yIChwZnAgPSBydG5sX2RlcmVmZXJlbmNlKCpmcCk7XG4gNTQ5Olx0XHQgICAgIChmMSA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKSkgIT0gTlVMTDtcbiA1NTA6XHRcdCAgICAgZnAgPSBcdTAwMjZmMS1cdTAwM2VuZXh0KVxuIDU1MTpcdFx0XHRpZiAoZi1cdTAwM2VoYW5kbGUgXHUwMDNjIGYxLVx1MDAzZWhhbmRsZSlcbiA1NTI6XHRcdFx0XHRicmVhaztcbiA1NTM6XHRcbiA1NTQ6XHRcdHRjZl9ibG9ja19uZXRpZl9rZWVwX2RzdCh0cC1cdTAwM2VjaGFpbi1cdTAwM2VibG9jayk7XG4gNTU1Olx0XHRyY3VfYXNzaWduX3BvaW50ZXIoZi1cdTAwM2VuZXh0LCBmMSk7XG4gNTU2Olx0XHRyY3VfYXNzaWduX3BvaW50ZXIoKmZwLCBmKTtcbiA1NTc6XHRcbiA1NTg6XHRcdGlmIChmb2xkKSB7XG4gNTU5Olx0XHRcdGIgPSBmb2xkLVx1MDAzZWJrdDtcbiA1NjA6XHRcdFx0aCA9IGZyb21faGFzaChmb2xkLVx1MDAzZWhhbmRsZSBcdTAwM2VcdTAwM2UgMTYpO1xuIDU2MTpcdFx0XHRmcCA9IFx1MDAyNmItXHUwMDNlaHRbaF07XG4gNTYyOlx0XHRcdGZvciAocGZwID0gcnRubF9kZXJlZmVyZW5jZSgqZnApOyBwZnA7XG4gNTYzOlx0XHRcdCAgICAgZnAgPSBcdTAwMjZwZnAtXHUwMDNlbmV4dCwgcGZwID0gcnRubF9kZXJlZmVyZW5jZSgqZnApKSB7XG4gNTY0Olx0XHRcdFx0aWYgKHBmcCA9PSBmb2xkKSB7XG4gNTY1Olx0XHRcdFx0XHRyY3VfYXNzaWduX3BvaW50ZXIoKmZwLCBmb2xkLVx1MDAzZW5leHQpO1xuIDU2NjpcdFx0XHRcdFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZiLVx1MDAzZWZpbHRlcnNfcmVmKSkge1xuIDU2NzpcdFx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgdGggPSB0b19oYXNoKGZvbGQtXHUwMDNlaGFuZGxlKTtcbiA1Njg6XHRcbiA1Njk6XHRcdFx0XHRcdFx0UkNVX0lOSVRfUE9JTlRFUihoZWFkLVx1MDAzZXRhYmxlW3RoXSwgTlVMTCk7XG4gNTcwOlx0XHRcdFx0XHRcdGtmcmVlX3JjdShiLCByY3UpO1xuIDU3MTpcdFx0XHRcdFx0fVxuIDU3MjpcdFx0XHRcdFx0YnJlYWs7XG4gNTczOlx0XHRcdFx0fVxuIDU3NDpcdFx0XHR9XG4gNTc1Olx0XHR9XG4gNTc2Olx0XG4gNTc3Olx0XHRyb3V0ZTRfcmVzZXRfZmFzdG1hcChoZWFkLCBmb2xkKTtcbiA1Nzg6XHRcdCphcmcgPSBmO1xuIDU3OTpcdFx0aWYgKGZvbGQpIHtcbiA1ODA6XHRcdFx0dGNmX3VuYmluZF9maWx0ZXIodHAsIFx1MDAyNmZvbGQtXHUwMDNlcmVzKTtcbiA1ODE6XHRcdFx0dGNmX2V4dHNfZ2V0X25ldChcdTAwMjZmb2xkLVx1MDAzZWV4dHMpO1xuIDU4MjpcdFx0XHR0Y2ZfcXVldWVfd29yayhcdTAwMjZmb2xkLVx1MDAzZXJ3b3JrLCByb3V0ZTRfZGVsZXRlX2ZpbHRlcl93b3JrKTtcbiA1ODM6XHRcdH1cbiA1ODQ6XHRcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAyMTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTg4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqUmV2aWV3aW5nIENoYW5nZXMgaW4gYHJvdXRlNF9kZWxldGVgKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbiBhbmQgbWFrZSBhYnNvbHV0ZWx5IGNlcnRhaW4gSSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGNoYW5nZXMuIEkgbmVlZCB0byBjb21wcmVoZW5zaXZlbHkgcmV2aWV3IGByb3V0ZTRfZGVsZXRlYCDigJMgdGhlIGZ1bmN0aW9uIGl0c2VsZiwgaXRzIGltcGxlbWVudGF0aW9uLCBhbmQgaXRzIGludGVuZGVkIGJlaGF2aW9yLiBCdXQgdGhhdCYjMzk7cyBub3QgZW5vdWdoOyBJIGhhdmUgdG8gem9vbSBvdXQgYW5kIGNvbnNpZGVyIHRoZSBlbnRpcmUgZmlsZSBjb250ZXh0LiBJIHdhbnQgdG8gbG9vayBhdCBob3cgdGhpcyBkZWxldGlvbiBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCAqZXZlcnl0aGluZyogZWxzZSBpbiB0aGUgZmlsZSDigJMgYWxsIHRoZSBvdGhlciByb3V0ZXMsIGRhdGEgc3RydWN0dXJlcywgZGVwZW5kZW5jaWVzLCBlcnJvciBoYW5kbGluZy4uLiBldmVyeXRoaW5nIHRoYXQgY291bGQgcG9zc2libHkgYmUgdG91Y2hlZCBvciBpbmZsdWVuY2VkLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IGVkZ2UgY2FzZXMsIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIHRoZSB3aG9sZSBlbmNoaWxhZGEuIE5vIHN0b25lIHVudHVybmVkLiBBIHRob3JvdWdoIGFuYWx5c2lzIGlzIHRoZSBvbmx5IHdheSB0byBiZSBjb25maWRlbnQgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMjE6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvY2xzX3JvdXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMzMDpcdH1cbiAzMzE6XHRcbiAzMzI6XHRzdGF0aWMgaW50IHJvdXRlNF9kZWxldGUoc3RydWN0IHRjZl9wcm90byAqdHAsIHZvaWQgKmFyZywgYm9vbCAqbGFzdCxcbiAzMzM6XHRcdFx0XHQgYm9vbCBydG5sX2hlbGQsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiAzMzQ6XHR7XG4gMzM1Olx0XHRzdHJ1Y3Qgcm91dGU0X2hlYWQgKmhlYWQgPSBydG5sX2RlcmVmZXJlbmNlKHRwLVx1MDAzZXJvb3QpO1xuIDMzNjpcdFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgKmYgPSBhcmc7XG4gMzM3Olx0XHRzdHJ1Y3Qgcm91dGU0X2ZpbHRlciBfX3JjdSAqKmZwO1xuIDMzODpcdFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgKm5mO1xuIDMzOTpcdFx0c3RydWN0IHJvdXRlNF9idWNrZXQgKmI7XG4gMzQwOlx0XHR1bnNpZ25lZCBpbnQgaCA9IDA7XG4gMzQxOlx0XHRpbnQgaDE7XG4gMzQyOlx0XG4gMzQzOlx0XHRpZiAoIWhlYWQgfHwgIWYpXG4gMzQ0Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDM0NTpcdFxuIDM0NjpcdFx0aCA9IGYtXHUwMDNlaGFuZGxlO1xuIDM0NzpcdFx0YiA9IGYtXHUwMDNlYmt0O1xuIDM0ODpcdFxuIDM0OTpcdFx0ZnAgPSBcdTAwMjZiLVx1MDAzZWh0W2Zyb21faGFzaChoIFx1MDAzZVx1MDAzZSAxNildO1xuIDM1MDpcdFx0Zm9yIChuZiA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKTsgbmY7XG4gMzUxOlx0XHQgICAgIGZwID0gXHUwMDI2bmYtXHUwMDNlbmV4dCwgbmYgPSBydG5sX2RlcmVmZXJlbmNlKCpmcCkpIHtcbiAzNTI6XHRcdFx0aWYgKG5mID09IGYpIHtcbiAzNTM6XHRcdFx0XHQvKiB1bmxpbmsgaXQgKi9cbiAzNTQ6XHRcdFx0XHRSQ1VfSU5JVF9QT0lOVEVSKCpmcCwgcnRubF9kZXJlZmVyZW5jZShmLVx1MDAzZW5leHQpKTtcbiAzNTU6XHRcbiAzNTY6XHRcdFx0XHQvKiBDbGVhciBhbnkgZmFzdG1hcCBlbnRyaWVzIHRoYXQgbWF5IHJlZiB0aGlzIGZpbHRlciBhbmRcbiAzNTc6XHRcdFx0XHQgKiBtYXJrIGl0IGR5aW5nIHNvIGluLWZsaWdodCByZWFkZXJzIGNhbiYjMzk7dCByZXB1Ymxpc2ggaXRcbiAzNTg6XHRcdFx0XHQgKiBhZnRlciB0aGUgcmVzZXQuXG4gMzU5Olx0XHRcdFx0ICovXG4gMzYwOlx0XHRcdFx0cm91dGU0X3Jlc2V0X2Zhc3RtYXAoaGVhZCwgZik7XG4gMzYxOlx0XG4gMzYyOlx0XHRcdFx0LyogRGVsZXRlIGl0ICovXG4gMzYzOlx0XHRcdFx0dGNmX3VuYmluZF9maWx0ZXIodHAsIFx1MDAyNmYtXHUwMDNlcmVzKTtcbiAzNjQ6XHRcdFx0XHR0Y2ZfZXh0c19nZXRfbmV0KFx1MDAyNmYtXHUwMDNlZXh0cyk7XG4gMzY1Olx0XHRcdFx0dGNmX3F1ZXVlX3dvcmsoXHUwMDI2Zi1cdTAwM2Vyd29yaywgcm91dGU0X2RlbGV0ZV9maWx0ZXJfd29yayk7XG4gMzY2Olx0XG4gMzY3Olx0XHRcdFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZiLVx1MDAzZWZpbHRlcnNfcmVmKSkge1xuIDM2ODpcdFx0XHRcdFx0UkNVX0lOSVRfUE9JTlRFUihoZWFkLVx1MDAzZXRhYmxlW3RvX2hhc2goaCldLCBOVUxMKTtcbiAzNjk6XHRcdFx0XHRcdGtmcmVlX3JjdShiLCByY3UpO1xuIDM3MDpcdFx0XHRcdH1cbiAzNzE6XHRcdFx0XHRicmVhaztcbiAzNzI6XHRcdFx0fVxuIDM3MzpcdFx0fVxuIDM3NDpcdFxuIDM3NTpcdFx0Kmxhc3QgPSB0cnVlO1xuIDM3NjpcdFx0Zm9yIChoMSA9IDA7IGgxIFx1MDAzYz0gMjU2OyBoMSYjNDM7JiM0MzspIHtcbiAzNzc6XHRcdFx0aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihoZWFkLVx1MDAzZXRhYmxlW2gxXSkpIHtcbiAzNzg6XHRcdFx0XHQqbGFzdCA9IGZhbHNlO1xuIDM3OTpcdFx0XHRcdGJyZWFrO1xuIDM4MDpcdFx0XHR9XG4gMzgxOlx0XHR9XG4gMzgyOlx0XG4gMzgzOlx0XHRyZXR1cm4gMDtcbiAzODQ6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDIxOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMzIKCQkJCQkJCW91dHB1dDogMjQ5CgkJCQkJCQl0aG91Z2h0czogODU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzOiBOZWVkc0tNU0FOID0gZmFsc2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgcmVmZXJlbmNlIGNvdW50LCBgZmlsdGVyc19yZWZgLCB0byB0aGUgYHN0cnVjdCByb3V0ZTRfYnVja2V0YC4gTXkgZ29hbCBoZXJlIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIGNoYW5nZSByZXF1aXJlcyBLTVNBTiwgb3IgS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIsIGF0dGVudGlvbi4KCkZpcnN0LCBJJiMzOTttIG5vdGluZyB0aGUgY2hhbmdlcy4gVGhlIGByb3V0ZTRfYnVja2V0YCBub3cgaGFzIHRoZSBgZmlsdGVyc19yZWZgIG1lbWJlci4gIGByb3V0ZTRfc2V0X3Bhcm1zYCBpbml0aWFsaXplcyB0aGlzIGNvdW50IHRvIDEgd2hlbiBhIG5ldyBidWNrZXQgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqYCwgYW5kIGluY3JlbWVudHMgaXQgd2hlbiBmaWx0ZXJzIGFyZSBhZGRlZC4gYHJvdXRlNF9kZWxldGVgIGRlY3JlbWVudHMgdGhlIGNvdW50LCBmcmVlaW5nIHRoZSBidWNrZXQgaWYgaXQgaGl0cyB6ZXJvIHVzaW5nIGBrZnJlZV9yY3VgLiBgcm91dGU0X2NoYW5nZWAgaGFuZGxlcyBmaWx0ZXIgcmVwbGFjZW1lbnRzIHNpbWlsYXJseSwgZGVjcmVtZW50aW5nIGFuZCBmcmVlaW5nIHRoZSBvbGQgYnVja2V0LiBUaGUgd2hvbGUgdGhpbmcgaGluZ2VzIG9uIGEgYHJlZmNvdW50X3RgLgoKTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgYWx3YXlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvZiBjb3Vyc2UuICBCdXQgYGt6YWxsb2Nfb2JqYCBndWFyYW50ZWVzIHplcm8taW5pdGlhbGl6YXRpb24gb2YgdGhlIGByb3V0ZTRfYnVja2V0YCwgYW5kIHRoZSBgcmVmY291bnRfc2V0YCBleHBsaWNpdGx5IGluaXRpYWxpemVzIHRoZSBgZmlsdGVyc19yZWZgIG1lbWJlci4gSSYjMzk7bSBzZWVpbmcgbm8gbmV3IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMsIG5vIGtlcm5lbC10by11c2VyIG1lbW9yeSBjb3BpZXMgdGhhdCBjb3VsZCBsZWFrIGluZm9ybWF0aW9uLCBhbmQgbm8gY29udHJvbCBmbG93IGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEV4Y2VsbGVudC4KCk5vdywgd2hhdCBhYm91dCBwb3RlbnRpYWwgYnVncz8gSSYjMzk7bSB0aGlua2luZyByZWZlcmVuY2UgY291bnRpbmcgcHJvYmxlbXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZXMsIG1lbW9yeSBsZWFrcywgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuICBIb3dldmVyLCB0aGVzZSBhcmUgdGhpbmdzIHRoYXQgS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikgYW5kIHN0YW5kYXJkIGRlYnVnZ2VycyB3aXRoIHJlZmNvdW50IHVuZGVyL292ZXJmbG93IGNoZWNrcyBhcmUgZGVzaWduZWQgdG8gY2F0Y2guICBDcnVjaWFsbHksIHRoZXNlIGJ1Z3MgKmRvbiYjMzk7dCogaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ28gZG93biB0aGUgS01TQU4gY2hlY2tsaXN0LgoKMS4gIERvZXMgdGhlIHBhdGNoIHRvdWNoIGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSB3aGVyZSBmaWVsZHMgbWlnaHQgYmUgdW5pbml0aWFsaXplZD8gTm9wZSwgbm90aGluZyBpcyBtb2RpZmllZCByZWdhcmRpbmcgc3RydWN0dXJlcyB0aGF0IGFyZSBzZW50IHRvIHVzZXIgc3BhY2UuCjIuICBEb2VzIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm8sIHRoZSBgZmlsdGVyc19yZWZgIGlzIGluaXRpYWxpemVkIG9uIGFsbG9jYXRpb24uCjMuICBEb2VzIGl0IGludHJvZHVjZSBhbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHMgdGhhdCBjb3VsZCBiZSByZWFkIGxhdGVyPyBObywgYGt6YWxsb2Nfb2JqYCBhbmQgYHJlZmNvdW50X3NldGAgaGFuZGxlcyB0aGF0Lgo0LiAgRG9lcyBpdCBtZXNzIHdpdGggYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBhbGxvd3MgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXM/IE5vLgoKT2theSwgbGV0JiMzOTtzIGZsaXAgdGhlIGNoZWNrbGlzdCBvbiBpdHMgaGVhZC4gVGhpcyBwYXRjaCAqZG9lc24mIzM5O3QqIGludHJvZHVjZSBhbnk6CgoqICAgT3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKGJleW9uZCB0aGUgcmVmY291bnRpbmcgZXJyb3JzLCBhbHJlYWR5IGNvdmVyZWQgYnkgS0FTQU4pLgoqICAgVW5pbml0aWFsaXplZCBkYXRhIGJlaW5nIHJlYWQgb3IgY29waWVkLgoqICAgUmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVGhlcmVmb3JlLCB0aGUgY29uY2x1c2lvbiBpcyBjbGVhcjogYE5lZWRzS01TQU4gPSBmYWxzZWAuIEkgY2FuIHByb2NlZWQgdG8gY29uc3RydWN0IHRoZSBgc2V0LXJlc3VsdHNgIGNhbGwgd2l0aCB0aGlzIGluZm9ybWF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAyMTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgcmVmZXJlbmNlIGNvdW50ZXIgKGBmaWx0ZXJzX3JlZmApIHRvIGBzdHJ1Y3Qgcm91dGU0X2J1Y2tldGAgaW4gYG5ldC9zY2hlZC9jbHNfcm91dGUuY2AgdG8gdHJhY2sgYWN0aXZlIGZpbHRlcnMgaW4gZWFjaCBidWNrZXQgYW5kIG1hbmFnZSBidWNrZXQgcmVjbGFtYXRpb24gdmlhIFJDVSwgcmVwbGFjaW5nIGEgbGluZWFyIHNjYW4gb2YgYnVja2V0IHNsb3RzLlxuXG4tIE1lbW9yeSBJbml0aWFsaXphdGlvbjogVGhlIGJ1Y2tldCBzdHJ1Y3R1cmUgYHN0cnVjdCByb3V0ZTRfYnVja2V0YCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqKClgIGFuZCBgZmlsdGVyc19yZWZgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgd2l0aCBgcmVmY291bnRfc2V0KFx1MDAyNmItXHUwMDNlZmlsdGVyc19yZWYsIDEpYCB1cG9uIGNyZWF0aW9uLlxuLSBQb3RlbnRpYWwgQnVnIFR5cGVzOiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhpcyByZWZhY3RvcmluZyAoZS5nLiBpbmNvcnJlY3QgcmVmZXJlbmNlIGNvdW50aW5nLCBkb3VibGUgZnJlZXMsIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMpIGFyZSBtZW1vcnkgbGlmZWN5Y2xlIC8gcG9pbnRlciB2YWxpZGl0eSBidWdzIHRoYXQgYXJlIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCB0aGUgYHJlZmNvdW50X3RgIHJ1bnRpbWUgY2hlY2tzLlxuLSBVbmluaXRpYWxpemVkIE1lbW9yeSAvIEluZm8tbGVhayBSaXNrOiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZSBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIGJyYW5jaGluZyBkZWNpc2lvbnMuXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSByZWZlcmVuY2UgY291bnRlciAoYGZpbHRlcnNfcmVmYCkgdG8gYHN0cnVjdCByb3V0ZTRfYnVja2V0YCBpbiBgbmV0L3NjaGVkL2Nsc19yb3V0ZS5jYCB0byB0cmFjayBhY3RpdmUgZmlsdGVycyBpbiBlYWNoIGJ1Y2tldCBhbmQgbWFuYWdlIGJ1Y2tldCByZWNsYW1hdGlvbiB2aWEgUkNVLCByZXBsYWNpbmcgYSBsaW5lYXIgc2NhbiBvZiBidWNrZXQgc2xvdHMuXG5cbi0gTWVtb3J5IEluaXRpYWxpemF0aW9uOiBUaGUgYnVja2V0IHN0cnVjdHVyZSBgc3RydWN0IHJvdXRlNF9idWNrZXRgIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmooKWAgYW5kIGBmaWx0ZXJzX3JlZmAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB3aXRoIGByZWZjb3VudF9zZXQoXHUwMDI2Yi1cdTAwM2VmaWx0ZXJzX3JlZiwgMSlgIHVwb24gY3JlYXRpb24uXG4tIFBvdGVudGlhbCBCdWcgVHlwZXM6IEFueSBwb3RlbnRpYWwgYnVncyByZXN1bHRpbmcgZnJvbSB0aGlzIHJlZmFjdG9yaW5nIChlLmcuIGluY29ycmVjdCByZWZlcmVuY2UgY291bnRpbmcsIGRvdWJsZSBmcmVlcywgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucykgYXJlIG1lbW9yeSBsaWZlY3ljbGUgLyBwb2ludGVyIHZhbGlkaXR5IGJ1Z3MgdGhhdCBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHRoZSBgcmVmY291bnRfdGAgcnVudGltZSBjaGVja3MuXG4tIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IC8gSW5mby1sZWFrIFJpc2s6IFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0dXJlIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gYnJhbmNoaW5nIGRlY2lzaW9ucy5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMTo1NToyMS42MDAzMDY5MTVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTAzOTE0ODI1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfQ0xTX1JPVVRFNFwiLFxuICAgIFwiTkVUX1NDSEVEXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicm91dGU0X2NoYW5nZVwiLFxuICAgIFwicm91dGU0X2RlbGV0ZVwiLFxuICAgIFwicm91dGU0X3NldF9wYXJtc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHJlZmVyZW5jZSBjb3VudGVyIChgZmlsdGVyc19yZWZgKSB0byBgc3RydWN0IHJvdXRlNF9idWNrZXRgIGluIGBuZXQvc2NoZWQvY2xzX3JvdXRlLmNgIHRvIHRyYWNrIGFjdGl2ZSBmaWx0ZXJzIGluIGVhY2ggYnVja2V0IGFuZCBtYW5hZ2UgYnVja2V0IHJlY2xhbWF0aW9uIHZpYSBSQ1UsIHJlcGxhY2luZyBhIGxpbmVhciBzY2FuIG9mIGJ1Y2tldCBzbG90cy5cXG5cXG4tIE1lbW9yeSBJbml0aWFsaXphdGlvbjogVGhlIGJ1Y2tldCBzdHJ1Y3R1cmUgYHN0cnVjdCByb3V0ZTRfYnVja2V0YCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqKClgIGFuZCBgZmlsdGVyc19yZWZgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgd2l0aCBgcmVmY291bnRfc2V0KFxcdTAwMjZiLVxcdTAwM2VmaWx0ZXJzX3JlZiwgMSlgIHVwb24gY3JlYXRpb24uXFxuLSBQb3RlbnRpYWwgQnVnIFR5cGVzOiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhpcyByZWZhY3RvcmluZyAoZS5nLiBpbmNvcnJlY3QgcmVmZXJlbmNlIGNvdW50aW5nLCBkb3VibGUgZnJlZXMsIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMpIGFyZSBtZW1vcnkgbGlmZWN5Y2xlIC8gcG9pbnRlciB2YWxpZGl0eSBidWdzIHRoYXQgYXJlIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCB0aGUgYHJlZmNvdW50X3RgIHJ1bnRpbWUgY2hlY2tzLlxcbi0gVW5pbml0aWFsaXplZCBNZW1vcnkgLyBJbmZvLWxlYWsgUmlzazogVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3R1cmUgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBicmFuY2hpbmcgZGVjaXNpb25zLlxcblxcblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcm91dGU0IGNsYXNzaWZpZXIgKGNsc19yb3V0ZSkgaW4gdGhlIHRyYWZmaWMgY29udHJvbCBzdWJzeXN0ZW0gYnkgaW50cm9kdWNpbmcgcmVmY291bnRpbmcgKGZpbHRlcnNfcmVmKSB0byBtYW5hZ2UgdGhlIGxpZmV0aW1lIGFuZCBkZWFsbG9jYXRpb24gb2Ygcm91dGU0IGJ1Y2tldHMgZHVyaW5nIGZpbHRlciBpbnNlcnRpb24sIHJlcGxhY2VtZW50LCBhbmQgZGVsZXRpb24uIFRoaXMgaXMgY29yZSBuZXR3b3JraW5nIGNvZGUgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIHRyYWZmaWMgY29udHJvbCBpbnRlcmZhY2VzIGFuZCBhZmZlY3RzIG1lbW9yeSBzYWZldHkgLyBsaWZldGltZSBtYW5hZ2VtZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMTo1NToyMS42MDAzMTA2OTVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDIzMzYyNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1ZGIzODdjM2Y5M2Y0ZTRiMTM4OTIzMjgxNGE1MjczYWE1MjIyMmQ0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDI5IDIxOjU1OjIwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfcm91dGUuYyBiL25ldC9zY2hlZC9jbHNfcm91dGUuY1xcbmluZGV4IDBkMTMyNGM5MDU4MzcuLjE3YjBlYmI3NjY2MjYgMTAwNjQ0XFxuLS0tIGEvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jXFxuKysrIGIvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jXFxuQEAgLTExLDYgKzExLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RyaW5nLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9lcnJuby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcmVmY291bnQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NrYnVmZi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2RzdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3JvdXRlLmhcXHUwMDNlXFxuQEAgLTQxLDYgKzQyLDcgQEAgc3RydWN0IHJvdXRlNF9oZWFkIHtcXG4gc3RydWN0IHJvdXRlNF9idWNrZXQge1xcbiBcXHQvKiAxNiBGUk9NIGJ1Y2tldHMgKyAxNiBJSUYgYnVja2V0cyArIDEgd2lsZGNhcmQgYnVja2V0ICovXFxuIFxcdHN0cnVjdCByb3V0ZTRfZmlsdGVyIF9fcmN1XFx0Kmh0WzE2ICsgMTYgKyAxXTtcXG4rXFx0cmVmY291bnRfdFxcdFxcdFxcdGZpbHRlcnNfcmVmO1xcbiBcXHRzdHJ1Y3QgcmN1X2hlYWRcXHRcXHRcXHRyY3U7XFxuIH07XFxuIFxcbkBAIC0zMzYsNyArMzM4LDcgQEAgc3RhdGljIGludCByb3V0ZTRfZGVsZXRlKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB2b2lkICphcmcsIGJvb2wgKmxhc3QsXFxuIFxcdHN0cnVjdCByb3V0ZTRfZmlsdGVyICpuZjtcXG4gXFx0c3RydWN0IHJvdXRlNF9idWNrZXQgKmI7XFxuIFxcdHVuc2lnbmVkIGludCBoID0gMDtcXG4tXFx0aW50IGksIGgxO1xcbitcXHRpbnQgaDE7XFxuIFxcbiBcXHRpZiAoIWhlYWQgfHwgIWYpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbkBAIC0zNjIsMjMgKzM2NCwxNCBAQCBzdGF0aWMgaW50IHJvdXRlNF9kZWxldGUoc3RydWN0IHRjZl9wcm90byAqdHAsIHZvaWQgKmFyZywgYm9vbCAqbGFzdCxcXG4gXFx0XFx0XFx0dGNmX2V4dHNfZ2V0X25ldChcXHUwMDI2Zi1cXHUwMDNlZXh0cyk7XFxuIFxcdFxcdFxcdHRjZl9xdWV1ZV93b3JrKFxcdTAwMjZmLVxcdTAwM2Vyd29yaywgcm91dGU0X2RlbGV0ZV9maWx0ZXJfd29yayk7XFxuIFxcbi1cXHRcXHRcXHQvKiBTdHJpcCBSVE5MIHByb3RlY3RlZCB0cmVlICovXFxuLVxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYz0gMzI7IGkrKykge1xcbi1cXHRcXHRcXHRcXHRzdHJ1Y3Qgcm91dGU0X2ZpbHRlciAqcnQ7XFxuLVxcbi1cXHRcXHRcXHRcXHRydCA9IHJ0bmxfZGVyZWZlcmVuY2UoYi1cXHUwMDNlaHRbaV0pO1xcbi1cXHRcXHRcXHRcXHRpZiAocnQpXFxuLVxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHRcXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZiLVxcdTAwM2VmaWx0ZXJzX3JlZikpIHtcXG4rXFx0XFx0XFx0XFx0UkNVX0lOSVRfUE9JTlRFUihoZWFkLVxcdTAwM2V0YWJsZVt0b19oYXNoKGgpXSwgTlVMTCk7XFxuK1xcdFxcdFxcdFxcdGtmcmVlX3JjdShiLCByY3UpO1xcbiBcXHRcXHRcXHR9XFxuLVxcbi1cXHRcXHRcXHQvKiBPSywgc2Vzc2lvbiBoYXMgbm8gZmxvd3MgKi9cXG4tXFx0XFx0XFx0UkNVX0lOSVRfUE9JTlRFUihoZWFkLVxcdTAwM2V0YWJsZVt0b19oYXNoKGgpXSwgTlVMTCk7XFxuLVxcdFxcdFxcdGtmcmVlX3JjdShiLCByY3UpO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1vdXQ6XFxuIFxcdCpsYXN0ID0gdHJ1ZTtcXG4gXFx0Zm9yIChoMSA9IDA7IGgxIFxcdTAwM2M9IDI1NjsgaDErKykge1xcbiBcXHRcXHRpZiAocmN1X2FjY2Vzc19wb2ludGVyKGhlYWQtXFx1MDAzZXRhYmxlW2gxXSkpIHtcXG5AQCAtNDU5LDYgKzQ1Miw3IEBAIHN0YXRpYyBpbnQgcm91dGU0X3NldF9wYXJtcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxcbiBcXHRcXHRpZiAoYiA9PSBOVUxMKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVOT0JVRlM7XFxuIFxcbitcXHRcXHRyZWZjb3VudF9zZXQoXFx1MDAyNmItXFx1MDAzZWZpbHRlcnNfcmVmLCAxKTtcXG4gXFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKGhlYWQtXFx1MDAzZXRhYmxlW2gxXSwgYik7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHVuc2lnbmVkIGludCBoMiA9IGZyb21faGFzaChuaGFuZGxlIFxcdTAwM2VcXHUwMDNlIDE2KTtcXG5AQCAtNDY4LDYgKzQ2Miw4IEBAIHN0YXRpYyBpbnQgcm91dGU0X3NldF9wYXJtcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxcbiBcXHRcXHQgICAgIGZwID0gcnRubF9kZXJlZmVyZW5jZShmcC1cXHUwMDNlbmV4dCkpXFxuIFxcdFxcdFxcdGlmIChmcC1cXHUwMDNlaGFuZGxlID09IGYtXFx1MDAzZWhhbmRsZSlcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuK1xcbitcXHRcXHRyZWZjb3VudF9pbmMoXFx1MDAyNmItXFx1MDAzZWZpbHRlcnNfcmVmKTtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKHRiW1RDQV9ST1VURTRfVE9dKVxcbkBAIC01MDAsNyArNDk2LDcgQEAgc3RhdGljIGludCByb3V0ZTRfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcXG4gXFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgKmZvbGQsICpmMSwgKnBmcCwgKmYgPSBOVUxMO1xcbiBcXHRzdHJ1Y3Qgcm91dGU0X2J1Y2tldCAqYjtcXG4gXFx0c3RydWN0IG5sYXR0ciAqdGJbVENBX1JPVVRFNF9NQVggKyAxXTtcXG4tXFx0dW5zaWduZWQgaW50IGgsIHRoO1xcbitcXHR1bnNpZ25lZCBpbnQgaDtcXG4gXFx0aW50IGVycjtcXG4gXFx0Ym9vbCBuZXcgPSB0cnVlO1xcbiBcXG5AQCAtNTYwLDE3ICs1NTYsMjAgQEAgc3RhdGljIGludCByb3V0ZTRfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcXG4gXFx0cmN1X2Fzc2lnbl9wb2ludGVyKCpmcCwgZik7XFxuIFxcbiBcXHRpZiAoZm9sZCkge1xcbi1cXHRcXHR0aCA9IHRvX2hhc2goZm9sZC1cXHUwMDNlaGFuZGxlKTtcXG4rXFx0XFx0YiA9IGZvbGQtXFx1MDAzZWJrdDtcXG4gXFx0XFx0aCA9IGZyb21faGFzaChmb2xkLVxcdTAwM2VoYW5kbGUgXFx1MDAzZVxcdTAwM2UgMTYpO1xcbi1cXHRcXHRiID0gcnRubF9kZXJlZmVyZW5jZShoZWFkLVxcdTAwM2V0YWJsZVt0aF0pO1xcbi1cXHRcXHRpZiAoYikge1xcbi1cXHRcXHRcXHRmcCA9IFxcdTAwMjZiLVxcdTAwM2VodFtoXTtcXG4tXFx0XFx0XFx0Zm9yIChwZnAgPSBydG5sX2RlcmVmZXJlbmNlKCpmcCk7IHBmcDtcXG4tXFx0XFx0XFx0ICAgICBmcCA9IFxcdTAwMjZwZnAtXFx1MDAzZW5leHQsIHBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKSkge1xcbi1cXHRcXHRcXHRcXHRpZiAocGZwID09IGZvbGQpIHtcXG4tXFx0XFx0XFx0XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKCpmcCwgZm9sZC1cXHUwMDNlbmV4dCk7XFxuLVxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRmcCA9IFxcdTAwMjZiLVxcdTAwM2VodFtoXTtcXG4rXFx0XFx0Zm9yIChwZnAgPSBydG5sX2RlcmVmZXJlbmNlKCpmcCk7IHBmcDtcXG4rXFx0XFx0ICAgICBmcCA9IFxcdTAwMjZwZnAtXFx1MDAzZW5leHQsIHBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKSkge1xcbitcXHRcXHRcXHRpZiAocGZwID09IGZvbGQpIHtcXG4rXFx0XFx0XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKCpmcCwgZm9sZC1cXHUwMDNlbmV4dCk7XFxuK1xcdFxcdFxcdFxcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNmItXFx1MDAzZWZpbHRlcnNfcmVmKSkge1xcbitcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgdGggPSB0b19oYXNoKGZvbGQtXFx1MDAzZWhhbmRsZSk7XFxuK1xcbitcXHRcXHRcXHRcXHRcXHRSQ1VfSU5JVF9QT0lOVEVSKGhlYWQtXFx1MDAzZXRhYmxlW3RoXSwgTlVMTCk7XFxuK1xcdFxcdFxcdFxcdFxcdGtmcmVlX3JjdShiLCByY3UpO1xcbiBcXHRcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4gXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMTo1NToyMy4xNDMzMjM1NTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM2MjAyNjYxNjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9DTFNfUk9VVEU0XCIsXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyb3V0ZTRfY2hhbmdlXCIsXG4gICAgXCJyb3V0ZTRfZGVsZXRlXCIsXG4gICAgXCJyb3V0ZTRfc2V0X3Bhcm1zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJvdXRlNCBjbGFzc2lmaWVyIChjbHNfcm91dGUpIGluIHRoZSB0cmFmZmljIGNvbnRyb2wgc3Vic3lzdGVtIGJ5IGludHJvZHVjaW5nIHJlZmNvdW50aW5nIChmaWx0ZXJzX3JlZikgdG8gbWFuYWdlIHRoZSBsaWZldGltZSBhbmQgZGVhbGxvY2F0aW9uIG9mIHJvdXRlNCBidWNrZXRzIGR1cmluZyBmaWx0ZXIgaW5zZXJ0aW9uLCByZXBsYWNlbWVudCwgYW5kIGRlbGV0aW9uLiBUaGlzIGlzIGNvcmUgbmV0d29ya2luZyBjb2RlIHJlYWNoYWJsZSB2aWEgbmV0bGluayB0cmFmZmljIGNvbnRyb2wgaW50ZXJmYWNlcyBhbmQgYWZmZWN0cyBtZW1vcnkgc2FmZXR5IC8gbGlmZXRpbWUgbWFuYWdlbWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNWRiMzg3YzNmOTNmNGU0YjEzODkyMzI4MTRhNTI3M2FhNTIyMjJkNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDI5IDIxOjU1OjIwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jIGIvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jXG5pbmRleCAwZDEzMjRjOTA1ODM3Li4xN2IwZWJiNzY2NjI2IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jXG4rKysgYi9uZXQvc2NoZWQvY2xzX3JvdXRlLmNcbkBAIC0xMSw2ICsxMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vycm5vLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWZjb3VudC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZHN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcm91dGUuaFx1MDAzZVxuQEAgLTQxLDYgKzQyLDcgQEAgc3RydWN0IHJvdXRlNF9oZWFkIHtcbiBzdHJ1Y3Qgcm91dGU0X2J1Y2tldCB7XG4gXHQvKiAxNiBGUk9NIGJ1Y2tldHMgKyAxNiBJSUYgYnVja2V0cyArIDEgd2lsZGNhcmQgYnVja2V0ICovXG4gXHRzdHJ1Y3Qgcm91dGU0X2ZpbHRlciBfX3JjdVx0Kmh0WzE2ICsgMTYgKyAxXTtcbitcdHJlZmNvdW50X3RcdFx0XHRmaWx0ZXJzX3JlZjtcbiBcdHN0cnVjdCByY3VfaGVhZFx0XHRcdHJjdTtcbiB9O1xuIFxuQEAgLTMzNiw3ICszMzgsNyBAQCBzdGF0aWMgaW50IHJvdXRlNF9kZWxldGUoc3RydWN0IHRjZl9wcm90byAqdHAsIHZvaWQgKmFyZywgYm9vbCAqbGFzdCxcbiBcdHN0cnVjdCByb3V0ZTRfZmlsdGVyICpuZjtcbiBcdHN0cnVjdCByb3V0ZTRfYnVja2V0ICpiO1xuIFx0dW5zaWduZWQgaW50IGggPSAwO1xuLVx0aW50IGksIGgxO1xuK1x0aW50IGgxO1xuIFxuIFx0aWYgKCFoZWFkIHx8ICFmKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0zNjIsMjMgKzM2NCwxNCBAQCBzdGF0aWMgaW50IHJvdXRlNF9kZWxldGUoc3RydWN0IHRjZl9wcm90byAqdHAsIHZvaWQgKmFyZywgYm9vbCAqbGFzdCxcbiBcdFx0XHR0Y2ZfZXh0c19nZXRfbmV0KFx1MDAyNmYtXHUwMDNlZXh0cyk7XG4gXHRcdFx0dGNmX3F1ZXVlX3dvcmsoXHUwMDI2Zi1cdTAwM2Vyd29yaywgcm91dGU0X2RlbGV0ZV9maWx0ZXJfd29yayk7XG4gXG4tXHRcdFx0LyogU3RyaXAgUlROTCBwcm90ZWN0ZWQgdHJlZSAqL1xuLVx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjPSAzMjsgaSsrKSB7XG4tXHRcdFx0XHRzdHJ1Y3Qgcm91dGU0X2ZpbHRlciAqcnQ7XG4tXG4tXHRcdFx0XHRydCA9IHJ0bmxfZGVyZWZlcmVuY2UoYi1cdTAwM2VodFtpXSk7XG4tXHRcdFx0XHRpZiAocnQpXG4tXHRcdFx0XHRcdGdvdG8gb3V0O1xuK1x0XHRcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2Yi1cdTAwM2VmaWx0ZXJzX3JlZikpIHtcbitcdFx0XHRcdFJDVV9JTklUX1BPSU5URVIoaGVhZC1cdTAwM2V0YWJsZVt0b19oYXNoKGgpXSwgTlVMTCk7XG4rXHRcdFx0XHRrZnJlZV9yY3UoYiwgcmN1KTtcbiBcdFx0XHR9XG4tXG4tXHRcdFx0LyogT0ssIHNlc3Npb24gaGFzIG5vIGZsb3dzICovXG4tXHRcdFx0UkNVX0lOSVRfUE9JTlRFUihoZWFkLVx1MDAzZXRhYmxlW3RvX2hhc2goaCldLCBOVUxMKTtcbi1cdFx0XHRrZnJlZV9yY3UoYiwgcmN1KTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFx0fVxuIFxuLW91dDpcbiBcdCpsYXN0ID0gdHJ1ZTtcbiBcdGZvciAoaDEgPSAwOyBoMSBcdTAwM2M9IDI1NjsgaDErKykge1xuIFx0XHRpZiAocmN1X2FjY2Vzc19wb2ludGVyKGhlYWQtXHUwMDNldGFibGVbaDFdKSkge1xuQEAgLTQ1OSw2ICs0NTIsNyBAQCBzdGF0aWMgaW50IHJvdXRlNF9zZXRfcGFybXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCxcbiBcdFx0aWYgKGIgPT0gTlVMTClcbiBcdFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4gXG4rXHRcdHJlZmNvdW50X3NldChcdTAwMjZiLVx1MDAzZWZpbHRlcnNfcmVmLCAxKTtcbiBcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGhlYWQtXHUwMDNldGFibGVbaDFdLCBiKTtcbiBcdH0gZWxzZSB7XG4gXHRcdHVuc2lnbmVkIGludCBoMiA9IGZyb21faGFzaChuaGFuZGxlIFx1MDAzZVx1MDAzZSAxNik7XG5AQCAtNDY4LDYgKzQ2Miw4IEBAIHN0YXRpYyBpbnQgcm91dGU0X3NldF9wYXJtcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxuIFx0XHQgICAgIGZwID0gcnRubF9kZXJlZmVyZW5jZShmcC1cdTAwM2VuZXh0KSlcbiBcdFx0XHRpZiAoZnAtXHUwMDNlaGFuZGxlID09IGYtXHUwMDNlaGFuZGxlKVxuIFx0XHRcdFx0cmV0dXJuIC1FRVhJU1Q7XG4rXG4rXHRcdHJlZmNvdW50X2luYyhcdTAwMjZiLVx1MDAzZWZpbHRlcnNfcmVmKTtcbiBcdH1cbiBcbiBcdGlmICh0YltUQ0FfUk9VVEU0X1RPXSlcbkBAIC01MDAsNyArNDk2LDcgQEAgc3RhdGljIGludCByb3V0ZTRfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcdHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmb2xkLCAqZjEsICpwZnAsICpmID0gTlVMTDtcbiBcdHN0cnVjdCByb3V0ZTRfYnVja2V0ICpiO1xuIFx0c3RydWN0IG5sYXR0ciAqdGJbVENBX1JPVVRFNF9NQVggKyAxXTtcbi1cdHVuc2lnbmVkIGludCBoLCB0aDtcbitcdHVuc2lnbmVkIGludCBoO1xuIFx0aW50IGVycjtcbiBcdGJvb2wgbmV3ID0gdHJ1ZTtcbiBcbkBAIC01NjAsMTcgKzU1NiwyMCBAQCBzdGF0aWMgaW50IHJvdXRlNF9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuIFx0cmN1X2Fzc2lnbl9wb2ludGVyKCpmcCwgZik7XG4gXG4gXHRpZiAoZm9sZCkge1xuLVx0XHR0aCA9IHRvX2hhc2goZm9sZC1cdTAwM2VoYW5kbGUpO1xuK1x0XHRiID0gZm9sZC1cdTAwM2Via3Q7XG4gXHRcdGggPSBmcm9tX2hhc2goZm9sZC1cdTAwM2VoYW5kbGUgXHUwMDNlXHUwMDNlIDE2KTtcbi1cdFx0YiA9IHJ0bmxfZGVyZWZlcmVuY2UoaGVhZC1cdTAwM2V0YWJsZVt0aF0pO1xuLVx0XHRpZiAoYikge1xuLVx0XHRcdGZwID0gXHUwMDI2Yi1cdTAwM2VodFtoXTtcbi1cdFx0XHRmb3IgKHBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKTsgcGZwO1xuLVx0XHRcdCAgICAgZnAgPSBcdTAwMjZwZnAtXHUwMDNlbmV4dCwgcGZwID0gcnRubF9kZXJlZmVyZW5jZSgqZnApKSB7XG4tXHRcdFx0XHRpZiAocGZwID09IGZvbGQpIHtcbi1cdFx0XHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKCpmcCwgZm9sZC1cdTAwM2VuZXh0KTtcbi1cdFx0XHRcdFx0YnJlYWs7XG4rXHRcdGZwID0gXHUwMDI2Yi1cdTAwM2VodFtoXTtcbitcdFx0Zm9yIChwZnAgPSBydG5sX2RlcmVmZXJlbmNlKCpmcCk7IHBmcDtcbitcdFx0ICAgICBmcCA9IFx1MDAyNnBmcC1cdTAwM2VuZXh0LCBwZnAgPSBydG5sX2RlcmVmZXJlbmNlKCpmcCkpIHtcbitcdFx0XHRpZiAocGZwID09IGZvbGQpIHtcbitcdFx0XHRcdHJjdV9hc3NpZ25fcG9pbnRlcigqZnAsIGZvbGQtXHUwMDNlbmV4dCk7XG4rXHRcdFx0XHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmItXHUwMDNlZmlsdGVyc19yZWYpKSB7XG4rXHRcdFx0XHRcdHVuc2lnbmVkIGludCB0aCA9IHRvX2hhc2goZm9sZC1cdTAwM2VoYW5kbGUpO1xuK1xuK1x0XHRcdFx0XHRSQ1VfSU5JVF9QT0lOVEVSKGhlYWQtXHUwMDNldGFibGVbdGhdLCBOVUxMKTtcbitcdFx0XHRcdFx0a2ZyZWVfcmN1KGIsIHJjdSk7XG4gXHRcdFx0XHR9XG4rXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4gXHRcdH1cbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDIxOjU1OjIzLjE0MzMyNDc2MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY3OTEwNjQ3MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBjbHNfcm91dGUgTW9kdWxlIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbmV0L3NjaGVkL2Nsc19yb3V0ZS5jYC4gTXkgZmlyc3QgbW92ZSBpcyBhbHdheXMgdG8gZ2V0IGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb250ZXh0LiBMZXQncyBkaWcgaW50byB0aGF0IGBjbHNfcm91dGUuY2AgZmlsZSBpdHNlbGYuIEknbGwgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IGl0IGRvZXMsIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkuIEknbGwgcHJvYmFibHkgc3RhcnQgYnkgbG9va2luZyBhdCB0aGUgY29tbWVudHMgYW5kIHRoZSBtYWluIGZ1bmN0aW9ucy5cblxuVGhlbiwgSSdsbCBhYnNvbHV0ZWx5IG5lZWQgdG8gY2hlY2sgaXRzIEtjb25maWcgY29uZmlndXJhdGlvbi4gVW5kZXJzdGFuZGluZyBob3cgaXQncyBlbmFibGVkIGFuZCBkaXNhYmxlZCwgYW5kIGFueSBkZXBlbmRlbmNpZXMsIGlzIGNydWNpYWwuIElzIGl0IGEgbW9kdWxlPyBCdWlsdC1pbj8gV2hhdCBvdGhlciBrZXJuZWwgZmVhdHVyZXMgZG9lcyBpdCByZWx5IG9uPyBJJ2xsIHByb2JhYmx5IHVzZSBgZ3JlcHBlcmAgKGlmIGF2YWlsYWJsZSBpbiBteSBlbnZpcm9ubWVudCkgdG8gcXVpY2tseSBmaW5kIHRoZSByZWxldmFudCBLY29uZmlnIGVudHJ5LCBidXQgSSdsbCBtYWtlIHN1cmUgdG8gcmVhZCBpdCBjYXJlZnVsbHkgdG8gc3BvdCBhbnkgZmxhZ3Mgb3IgY29uZGl0aW9uYWwgYnVpbGQgZGlyZWN0aXZlcy4gSWYgYGdyZXBwZXJgIGlzIGEgbm8tZ28sIGEgZ29vZCBvbGQtZmFzaGlvbmVkIGByZWFkLWZpbGVgIHdpbGwgZG8gdGhlIHRyaWNrLCBubyBwcm9ibGVtLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IEkga25vdyBob3cgdGhpcyBtb2R1bGUgZml0cyBpbnRvIHRoZSBicm9hZGVyIGtlcm5lbCBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzM0LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMTo1NToyOS45MzQzOTE0NTVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyMDQxNjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNsc19yb3V0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWc9NDk0PWNvbmZpZyBORVRfQ0xTX1JPVVRFNFxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctNTAzLVxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbm5ldC9zY2hlZC9LY29uZmlnOjUwNDpcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjbHNfcm91dGUuXFxubmV0L3NjaGVkL0tjb25maWctNTA1LVxcbi0tXFxubmV0L3NjaGVkL01ha2VmaWxlPTY4PW9iai0kKENPTkZJR19ORVRfQ0xTX1UzMilcXHQrPSBjbHNfdTMyLm9cXG5uZXQvc2NoZWQvTWFrZWZpbGU6Njk6b2JqLSQoQ09ORklHX05FVF9DTFNfUk9VVEU0KVxcdCs9IGNsc19yb3V0ZS5vXFxubmV0L3NjaGVkL01ha2VmaWxlLTcwLW9iai0kKENPTkZJR19ORVRfQ0xTX0ZXKVxcdCs9IGNsc19mdy5vXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmMtMi0vKlxcbm5ldC9zY2hlZC9jbHNfcm91dGUuYzozOiAqIG5ldC9zY2hlZC9jbHNfcm91dGUuY1xcdFJPVVRFNCBjbGFzc2lmaWVyLlxcbm5ldC9zY2hlZC9jbHNfcm91dGUuYy00LSAqXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmM9NjY5PXN0YXRpYyB2b2lkIHJvdXRlNF9iaW5kX2NsYXNzKHZvaWQgKmZoLCB1MzIgY2xhc3NpZCwgdW5zaWduZWQgbG9uZyBjbCwgdm9pZCAqcSxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfcm91dGUuYy02NzYtXFxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jOjY3NzpzdGF0aWMgc3RydWN0IHRjZl9wcm90b19vcHMgY2xzX3JvdXRlNF9vcHMgX19yZWFkX21vc3RseSA9IHtcXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmMtNjc4LVxcdC5raW5kXFx0XFx0PVxcdFxcXCJyb3V0ZVxcXCIsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmM9NjkyPXN0YXRpYyBpbnQgX19pbml0IGluaXRfcm91dGU0KHZvaWQpXFxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jLTY5My17XFxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jOjY5NDpcXHRyZXR1cm4gcmVnaXN0ZXJfdGNmX3Byb3RvX29wcyhcXHUwMDI2Y2xzX3JvdXRlNF9vcHMpO1xcbm5ldC9zY2hlZC9jbHNfcm91dGUuYy02OTUtfVxcbi0tXFxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jPTY5Nz1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yb3V0ZTQodm9pZClcXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmMtNjk4LXtcXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmM6Njk5OlxcdHVucmVnaXN0ZXJfdGNmX3Byb3RvX29wcyhcXHUwMDI2Y2xzX3JvdXRlNF9vcHMpO1xcbm5ldC9zY2hlZC9jbHNfcm91dGUuYy03MDAtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMTo1NTozMC4wOTY0MzgwMDNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTg0NzY1NzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEtlcm5lbCdzIE5ldHdvcmsgU2NoZWR1bGVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHNvbWV0aGluZyBuZXR3b3JrLXJlbGF0ZWQsIGFuZCBpdCdzIHBvaW50aW5nIG1lIHRvd2FyZHMgdGhlIGtlcm5lbCdzIHNjaGVkdWxlciBjb25maWd1cmF0aW9uLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBvdXQgdGhlIGBuZXQvc2NoZWQvS2NvbmZpZ2AgZmlsZS4gSG1tLCBsZXQgbWUgc2VlLi4uIEknbSB0aGlua2luZyBhcm91bmQgbGluZSA0OTQgbWlnaHQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGF0IGxpa2VseSBpbmRpY2F0ZXMgdGhlIHNlY3Rpb24gb3IgYSBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIEknbSBpbnRlcmVzdGVkIGluIHdpdGhpbiB0aGF0IGZpbGUuIFRpbWUgdG8gb3BlbiB0aGF0IGZpbGUgdXAgYW5kIGhhdmUgYSBsb29rOyBob3BlZnVsbHkgdGhhdCBsaW5lIG51bWJlciB3aWxsIGdpdmUgbWUgYSBnb29kIGp1bXBpbmctb2ZmIHBvaW50LiBJdCB3aWxsIGxpa2VseSByZXZlYWwgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFuZCBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxOTcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMTo1NTozNC4wODEyMDYzMDFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDMzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNDg1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDg1OlxcdFxcdHRyaXN0YXRlIFxcXCJFbGVtZW50YXJ5IGNsYXNzaWZpY2F0aW9uIChCQVNJQylcXFwiXFxuIDQ4NjpcXHRcXHRzZWxlY3QgTkVUX0NMU1xcbiA0ODc6XFx0XFx0aGVscFxcbiA0ODg6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gY2xhc3NpZnkgcGFja2V0cyB1c2luZ1xcbiA0ODk6XFx0XFx0ICBvbmx5IGV4dGVuZGVkIG1hdGNoZXMgYW5kIGFjdGlvbnMuXFxuIDQ5MDpcXHRcXG4gNDkxOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA0OTI6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2xzX2Jhc2ljLlxcbiA0OTM6XFx0XFxuIDQ5NDpcXHRjb25maWcgTkVUX0NMU19ST1VURTRcXG4gNDk1OlxcdFxcdHRyaXN0YXRlIFxcXCJSb3V0aW5nIGRlY2lzaW9uIChST1VURSlcXFwiXFxuIDQ5NjpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gNDk3OlxcdFxcdHNlbGVjdCBJUF9ST1VURV9DTEFTU0lEXFxuIDQ5ODpcXHRcXHRzZWxlY3QgTkVUX0NMU1xcbiA0OTk6XFx0XFx0aGVscFxcbiA1MDA6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmUgYWJsZSB0byBjbGFzc2lmeSBwYWNrZXRzXFxuIDUwMTpcXHRcXHQgIGFjY29yZGluZyB0byB0aGUgcm91dGUgdGFibGUgZW50cnkgdGhleSBtYXRjaGVkLlxcbiA1MDI6XFx0XFxuIDUwMzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gNTA0OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNsc19yb3V0ZS5cXG4gNTA1OlxcdFxcbiA1MDY6XFx0Y29uZmlnIE5FVF9DTFNfRldcXG4gNTA3OlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgbWFyayAoRlcpXFxcIlxcbiA1MDg6XFx0XFx0c2VsZWN0IE5FVF9DTFNcXG4gNTA5OlxcdFxcdGhlbHBcXG4gNTEwOlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGJlIGFibGUgdG8gY2xhc3NpZnkgcGFja2V0c1xcbiA1MTE6XFx0XFx0ICBhY2NvcmRpbmcgdG8gbmV0ZmlsdGVyL2ZpcmV3YWxsIG1hcmtzLlxcbiA1MTI6XFx0XFxuIDUxMzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gNTE0OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNsc19mdy5cXG4gNTE1OlxcdFxcbiA1MTY6XFx0Y29uZmlnIE5FVF9DTFNfVTMyXFxuIDUxNzpcXHRcXHR0cmlzdGF0ZSBcXFwiVW5pdmVyc2FsIDMyYml0IGNvbXBhcmlzb25zIHcvIGhhc2hpbmcgKFUzMilcXFwiXFxuIDUxODpcXHRcXHRzZWxlY3QgTkVUX0NMU1xcbiA1MTk6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMTo1NTozNC4wODEzMTI2NTFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTMzODY0MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgY29uZmlndXJhdGlvbjpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIE5ldHdvcmsgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBORVRfQ0xTX1JPVVRFNGAgYW5kIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBGaXJzdCwgSSBzZWUgdGhhdCBpdCByZWxpZXMgb24gYElORVRgLiBUaGF0J3Mgbm90IHN1cnByaXNpbmc7IElQdjQgcm91dGluZyBpcyBjb3JlIHRvIHRoZSBpbnRlcm5ldHdvcmtpbmcgc3RhY2suIEkgYWxzbyBub3RlIHRoYXQgaXQncyBwYXJ0IG9mIHRoZSBgTkVUX1NDSEVEYCBhbmQgYE5FVF9DTFNgIHN1YnN5c3RlbXMuIFRoYXQgdGVsbHMgbWUgdGhpcyBsaWtlbHkgcmVsYXRlcyB0byB0cmFmZmljIGNsYXNzaWZpY2F0aW9uIGFuZCBxdWV1aW5nIHdpdGhpbiB0aGUgbmV0d29yayBzY2hlZHVsZXIuIFRvIGJlIHN1cmUsIEkgc2hvdWxkIGNoZWNrIHRoZSBgbmV0L3NjaGVkL0tjb25maWdgIGZpbGUsIEkgc2hvdWxkIGxvb2sgYXQgdGhlIHRvcC1sZXZlbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2l0aGluIHRoYXQgZGlyZWN0b3J5LiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYWxsIHRoZSBwYXJlbnQgb3B0aW9ucyB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg5MywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMjE6NTU6MzYuMDE1MTc5OTUxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTM1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgVHJhZmZpYyBjb250cm9sIGNvbmZpZ3VyYXRpb24uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnVjb25maWcgTkVUX1NDSEVEXFxuICAgNzpcXHRcXHRib29sIFxcXCJRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcXFwiXFxuICAgODpcXHRcXHRzZWxlY3QgTkVUX1NDSF9GSUZPXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIFdoZW4gdGhlIGtlcm5lbCBoYXMgc2V2ZXJhbCBwYWNrZXRzIHRvIHNlbmQgb3V0IG92ZXIgYSBuZXR3b3JrXFxuICAxMTpcXHRcXHQgIGRldmljZSwgaXQgaGFzIHRvIGRlY2lkZSB3aGljaCBvbmVzIHRvIHNlbmQgZmlyc3QsIHdoaWNoIG9uZXMgdG9cXG4gIDEyOlxcdFxcdCAgZGVsYXksIGFuZCB3aGljaCBvbmVzIHRvIGRyb3AuIFRoaXMgaXMgdGhlIGpvYiBvZiB0aGUgcXVldWVpbmdcXG4gIDEzOlxcdFxcdCAgZGlzY2lwbGluZXMsIHNldmVyYWwgZGlmZmVyZW50IGFsZ29yaXRobXMgZm9yIGhvdyB0byBkbyB0aGlzXFxuICAxNDpcXHRcXHQgIFxcXCJmYWlybHlcXFwiIGhhdmUgYmVlbiBwcm9wb3NlZC5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0XFx0ICBJZiB5b3Ugc2F5IE4gaGVyZSwgeW91IHdpbGwgZ2V0IHRoZSBzdGFuZGFyZCBwYWNrZXQgc2NoZWR1bGVyLCB3aGljaFxcbiAgMTc6XFx0XFx0ICBpcyBhIEZJRk8gKGZpcnN0IGNvbWUsIGZpcnN0IHNlcnZlZCkuIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZVxcbiAgMTg6XFx0XFx0ICBhYmxlIHRvIGNob29zZSBmcm9tIGFtb25nIHNldmVyYWwgYWx0ZXJuYXRpdmUgYWxnb3JpdGhtcyB3aGljaCBjYW5cXG4gIDE5OlxcdFxcdCAgdGhlbiBiZSBhdHRhY2hlZCB0byBkaWZmZXJlbnQgbmV0d29yayBkZXZpY2VzLiBUaGlzIGlzIHVzZWZ1bCBmb3JcXG4gIDIwOlxcdFxcdCAgZXhhbXBsZSBpZiBzb21lIG9mIHlvdXIgbmV0d29yayBkZXZpY2VzIGFyZSByZWFsIHRpbWUgZGV2aWNlcyB0aGF0XFxuICAyMTpcXHRcXHQgIG5lZWQgYSBjZXJ0YWluIG1pbmltdW0gZGF0YSBmbG93IHJhdGUsIG9yIGlmIHlvdSBuZWVkIHRvIGxpbWl0IHRoZVxcbiAgMjI6XFx0XFx0ICBtYXhpbXVtIGRhdGEgZmxvdyByYXRlIGZvciB0cmFmZmljIHdoaWNoIG1hdGNoZXMgc3BlY2lmaWVkIGNyaXRlcmlhLlxcbiAgMjM6XFx0XFx0ICBUaGlzIGNvZGUgaXMgY29uc2lkZXJlZCB0byBiZSBleHBlcmltZW50YWwuXFxuICAyNDpcXHRcXG4gIDI1OlxcdFxcdCAgVG8gYWRtaW5pc3RlciB0aGVzZSBzY2hlZHVsZXJzLCB5b3UnbGwgbmVlZCB0aGUgdXNlci1sZXZlbCB1dGlsaXRpZXNcXG4gIDI2OlxcdFxcdCAgZnJvbSB0aGUgcGFja2FnZSBpcHJvdXRlMit0YyBhdFxcbiAgMjc6XFx0XFx0ICBcXHUwMDNjaHR0cHM6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMvbmV0L2lwcm91dGUyL1xcdTAwM2UuICBUaGF0IHBhY2thZ2VcXG4gIDI4OlxcdFxcdCAgYWxzbyBjb250YWlucyBzb21lIGRvY3VtZW50YXRpb247IGZvciBtb3JlLCBjaGVjayBvdXRcXG4gIDI5OlxcdFxcdCAgXFx1MDAzY2h0dHA6Ly93d3cubGludXhmb3VuZGF0aW9uLm9yZy9jb2xsYWJvcmF0ZS93b3JrZ3JvdXBzL25ldHdvcmtpbmcvaXByb3V0ZTJcXHUwMDNlLlxcbiAgMzA6XFx0XFxuICAzMTpcXHRcXHQgIFRoaXMgUXVhbGl0eSBvZiBTZXJ2aWNlIChRb1MpIHN1cHBvcnQgd2lsbCBlbmFibGUgeW91IHRvIHVzZVxcbiAgMzI6XFx0XFx0ICBEaWZmZXJlbnRpYXRlZCBTZXJ2aWNlcyAoZGlmZnNlcnYpIGFuZCBSZXNvdXJjZSBSZXNlcnZhdGlvbiBQcm90b2NvbFxcbiAgMzM6XFx0XFx0ICAoUlNWUCkgb24geW91ciBMaW51eCByb3V0ZXIgaWYgeW91IGFsc28gc2F5IFkgdG8gdGhlIGNvcnJlc3BvbmRpbmdcXG4gIDM0OlxcdFxcdCAgY2xhc3NpZmllcnMgYmVsb3cuICBEb2N1bWVudGF0aW9uIGFuZCBzb2Z0d2FyZSBpcyBhdFxcbiAgMzU6XFx0XFx0ICBcXHUwMDNjaHR0cDovL2RpZmZzZXJ2LnNvdXJjZWZvcmdlLm5ldC9cXHUwMDNlLlxcbiAgMzY6XFx0XFxuICAzNzpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlIGFuZCB0byBcXFwiL3Byb2MgZmlsZSBzeXN0ZW1cXFwiIGJlbG93LCB5b3Ugd2lsbCBiZSBhYmxlXFxuICAzODpcXHRcXHQgIHRvIHJlYWQgc3RhdHVzIGluZm9ybWF0aW9uIGFib3V0IHBhY2tldCBzY2hlZHVsZXJzIGZyb20gdGhlIGZpbGVcXG4gIDM5OlxcdFxcdCAgL3Byb2MvbmV0L3BzY2hlZC5cXG4gIDQwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMTo1NTozNi4wMTUyNzQ4MTFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MDY1NjQ5NTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRleHQsIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIGFuIGV4cGVydC1sZXZlbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBmaWVsZDpcblxuKipEaXZpbmcgaW50byB0aGUgUm91dGUgQ2xhc3NpZmllcioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IGEgZ29vZCBsb29rIGF0IHdoYXQncyBnb2luZyBvbiB3aXRoaW4gdGhlIHJvdXRlIGNsYXNzaWZpZXIgbW9kdWxlLiBNeSBmaXJzdCBzdGVwIGlzIGFsd2F5cyB0byBnbyByaWdodCB0byB0aGUgc291cmNlIGNvZGUsIHNvIEknbSBwdWxsaW5nIHVwIGBjbHNfcm91dGUuY2AuIFNwZWNpZmljYWxseSwgSSdtIGZvY3VzaW5nIG9uIHRoZSBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyBkZWZpbmVkIGluIGBuZXQvc2NoZWQvY2xzX3JvdXRlLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSByb3V0ZS1iYXNlZCBjbGFzc2lmaWVyIHJlc2lkZXMsIHNvIHVuZGVyc3RhbmRpbmcgaXRzIGludGVybmFscyBpcyBrZXkgdG8gY29tcHJlaGVuZGluZyBpdHMgYmVoYXZpb3IuIEkgbmVlZCBhIGNsZWFyIG1lbnRhbCBtb2RlbCBvZiBob3cgaXQgd29ya3MgdW5kZXIgdGhlIGhvb2QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4MDQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDIxOjU1OjQ1LjA4MDkyNzI0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9jbHNfcm91dGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NjUsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NjU6XFx0XFx0bmxhX25lc3RfY2FuY2VsKHNrYiwgbmVzdCk7XFxuIDY2NjpcXHRcXHRyZXR1cm4gLTE7XFxuIDY2NzpcXHR9XFxuIDY2ODpcXHRcXG4gNjY5OlxcdHN0YXRpYyB2b2lkIHJvdXRlNF9iaW5kX2NsYXNzKHZvaWQgKmZoLCB1MzIgY2xhc3NpZCwgdW5zaWduZWQgbG9uZyBjbCwgdm9pZCAqcSxcXG4gNjcwOlxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgYmFzZSlcXG4gNjcxOlxcdHtcXG4gNjcyOlxcdFxcdHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmID0gZmg7XFxuIDY3MzpcXHRcXG4gNjc0OlxcdFxcdHRjX2Nsc19iaW5kX2NsYXNzKGNsYXNzaWQsIGNsLCBxLCBcXHUwMDI2Zi1cXHUwMDNlcmVzLCBiYXNlKTtcXG4gNjc1OlxcdH1cXG4gNjc2OlxcdFxcbiA2Nzc6XFx0c3RhdGljIHN0cnVjdCB0Y2ZfcHJvdG9fb3BzIGNsc19yb3V0ZTRfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuIDY3ODpcXHRcXHQua2luZFxcdFxcdD1cXHRcXFwicm91dGVcXFwiLFxcbiA2Nzk6XFx0XFx0LmNsYXNzaWZ5XFx0PVxcdHJvdXRlNF9jbGFzc2lmeSxcXG4gNjgwOlxcdFxcdC5pbml0XFx0XFx0PVxcdHJvdXRlNF9pbml0LFxcbiA2ODE6XFx0XFx0LmRlc3Ryb3lcXHQ9XFx0cm91dGU0X2Rlc3Ryb3ksXFxuIDY4MjpcXHRcXHQuZ2V0XFx0XFx0PVxcdHJvdXRlNF9nZXQsXFxuIDY4MzpcXHRcXHQuY2hhbmdlXFx0XFx0PVxcdHJvdXRlNF9jaGFuZ2UsXFxuIDY4NDpcXHRcXHQuZGVsZXRlXFx0XFx0PVxcdHJvdXRlNF9kZWxldGUsXFxuIDY4NTpcXHRcXHQud2Fsa1xcdFxcdD1cXHRyb3V0ZTRfd2FsayxcXG4gNjg2OlxcdFxcdC5kdW1wXFx0XFx0PVxcdHJvdXRlNF9kdW1wLFxcbiA2ODc6XFx0XFx0LmJpbmRfY2xhc3NcXHQ9XFx0cm91dGU0X2JpbmRfY2xhc3MsXFxuIDY4ODpcXHRcXHQub3duZXJcXHRcXHQ9XFx0VEhJU19NT0RVTEUsXFxuIDY4OTpcXHR9O1xcbiA2OTA6XFx0TU9EVUxFX0FMSUFTX05FVF9DTFMoXFxcInJvdXRlXFxcIik7XFxuIDY5MTpcXHRcXG4gNjkyOlxcdHN0YXRpYyBpbnQgX19pbml0IGluaXRfcm91dGU0KHZvaWQpXFxuIDY5MzpcXHR7XFxuIDY5NDpcXHRcXHRyZXR1cm4gcmVnaXN0ZXJfdGNmX3Byb3RvX29wcyhcXHUwMDI2Y2xzX3JvdXRlNF9vcHMpO1xcbiA2OTU6XFx0fVxcbiA2OTY6XFx0XFxuIDY5NzpcXHRzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yb3V0ZTQodm9pZClcXG4gNjk4OlxcdHtcXG4gNjk5OlxcdFxcdHVucmVnaXN0ZXJfdGNmX3Byb3RvX29wcyhcXHUwMDI2Y2xzX3JvdXRlNF9vcHMpO1xcbiA3MDA6XFx0fVxcbiA3MDE6XFx0XFxuIDcwMjpcXHRtb2R1bGVfaW5pdChpbml0X3JvdXRlNClcXG4gNzAzOlxcdG1vZHVsZV9leGl0KGV4aXRfcm91dGU0KVxcbiA3MDQ6XFx0TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJSb3V0aW5nIHRhYmxlIHJlYWxtIGJhc2VkIFRDIGNsYXNzaWZpZXJcXFwiKTtcXG4gNzA1OlxcdE1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMjE6NTU6NDUuMDgxMDA2NDRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODM3NTE1OTgwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogY2xzX3JvdXRlIFJlZmNvdW50IEJ1Z2ZpeCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgcmVmY291bnQsIGBmaWx0ZXJzX3JlZmAsIHRvIGBzdHJ1Y3Qgcm91dGU0X2J1Y2tldGAgaW4gYG5ldC9zY2hlZC9jbHNfcm91dGUuY2AuIFRoZSBnb2FsIGlzIHByb3BlciBsaWZlY3ljbGUgbWFuYWdlbWVudCBvZiBmaWx0ZXJzIHdpdGhpbiB0aGUgYGNsc19yb3V0ZWAgbW9kdWxlLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGRlbGV0aW9uIGFuZCBtb2RpZmljYXRpb24uIFRoaXMgaXMgY29yZSBUQyAodHJhZmZpYyBjb250cm9sKSBjbGFzc2lmaWNhdGlvbiBsb2dpYywgd2hpY2ggaXMgb2J2aW91c2x5IHJlYWNoYWJsZSB2aWEgbmV0bGluayBjYWxscyBsaWtlIGBSVE1fTkVXVEZJTFRFUmAsIGBSVE1fREVMVEZJTFRFUmAsIGV0Yy5cblxuVGhlIHBhdGNoIGl0c2VsZiBsb29rcyBzdHJhaWdodGZvcndhcmQ6XG5cbiogICBJbiBgcm91dGU0X2RlbGV0ZWAsIGluc3RlYWQgb2YgdGhlIG9sZCBpdGVyYXRpdmUgY2hlY2ssIGl0IHVzZXMgYHJlZmNvdW50X2RlY19hbmRfdGVzdGAgdG8gZGV0ZXJtaW5lIHdoZW4gdGhlIGJ1Y2tldCBjYW4gYmUgc2FmZWx5IGZyZWVkLiBUaGlzIGlzIG11Y2ggYmV0dGVyLlxuKiAgIGByb3V0ZTRfc2V0X3Bhcm1zYCBub3cgYXBwcm9wcmlhdGVseSBpbmNyZW1lbnRzIG9yIHNldHMgdGhlIHJlZmNvdW50IHdoZW4gZmlsdGVycyBhcmUgYWRkZWQuXG4qICAgYHJvdXRlNF9jaGFuZ2VgIG5vdyBjb3JyZWN0bHkgZGVjcmVtZW50cyB0aGUgcmVmY291bnQgd2hlbiByZXBsYWNpbmcgZmlsdGVycywgYW5kIGZyZWVzIHRoZSBidWNrZXQgaWYgaXQgaGl0cyB6ZXJvLlxuXG5HaXZlbiB0aGUgaGlzdG9yeSBvZiBidWdzIGluIHRoaXMgYXJlYSDigJMgZmlsdGVyIGxpZmV0aW1lLCByZWZjb3VudGluZywgYW5kIFJDVSBzeW5jaHJvbml6YXRpb24gaW4gdGhlIG5ldC9zY2hlZCBzdWJzeXN0ZW0gaGF2ZSBoaXN0b3JpY2FsbHkgYmVlbiBhIGdvbGQgbWluZSBmb3IgY29uY3VycmVuY3kgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyDigJMgdGhpcyBpcyAqYWJzb2x1dGVseSogd29ydGggZnV6emluZy4gSSBtZWFuLCBtZW1vcnkgbGVha3MsIFVBRnMsIGRvdWJsZSBmcmVlcy4uLiB0aGlzIGlzIHByaW1lIHRlcnJpdG9yeS5cblxuU28sIGZ1enppbmcgaXMgYSBnbyEgVGhlIG1vc3QgcmVsZXZhbnQgZnVuY3Rpb25zLCB0aGUgc3ltYm9scyB0byBmb2N1cyBvbiBpbiBgbmV0L3NjaGVkL2Nsc19yb3V0ZS5jYCwgYXJlOlxuXG4qICAgYHJvdXRlNF9jaGFuZ2VgXG4qICAgYHJvdXRlNF9kZWxldGVgXG4qICAgYHJvdXRlNF9zZXRfcGFybXNgXG5cblRoZXkgYXJlIGNhbGxlZCB0aHJvdWdoIGB0Y2ZfcHJvdG9fb3BzIGNsc19yb3V0ZTRfb3BzYCwgd2hpY2ggbWVhbnMgdGhleSBhcmUgY2FsbGJhY2tzIHJlZ2lzdGVyZWQgYW5kIGNhbGxlZCB0aHJvdWdoIGluZGlyZWN0IGNhbGxzLCBzbyB0aGVzZSBhcmUgZXhjZWxsZW50IHRhcmdldHMuXG5cbkNvbmZpZy13aXNlLCB0aGUgY29yZSByZXF1aXJlbWVudHMgYXJlIHByZXR0eSBjbGVhcjpcblxuKiAgIGBORVRfQ0xTX1JPVVRFNGBcbiogICBgTkVUX1NDSEVEYCAodGhpcyBpcyB0aGUgcGFyZW50IGNvbmZpZylcbiogICBgSU5FVGAgKGEgZGVwZW5kZW5jeSBvZiBgTkVUX0NMU19ST1VURTRgKVxuKiAgIGBORVRgICh0aGUgYmFzZSBuZXR3b3JrIHN1YnN5c3RlbSBjb25maWcpXG5cbk5vIG9idmlvdXMgbWlzc2luZyBkZXBlbmRlbmNpZXMgYXQgZmlyc3QgZ2xhbmNlLCBJJ2xsIGRvdWJsZSBjaGVjayBgbmV0L0tjb25maWdgIGFuZCBgbmV0L3NjaGVkL0tjb25maWdgIGZvciBhbnl0aGluZyBlbHNlIHJlbGV2YW50LiBUaGlzIHNob3VsZCBiZSBhIHByZXR0eSB0aWdodCB0ZXN0IGNhc2UgdG8gZ2V0IHN0YXJ0ZWQuIExldCdzIHNlZSBpZiB3ZSBjYW4gdHJpZ2dlciBzb21lIG9mIHRoZXNlIGNsYXNzaWMgVEMgYnVncyFcblxuXG4iLCJJbnB1dFRva2VucyI6NjY0MCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc4MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDIxOjU1OjUzLjQ1NjE2OTg2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjcxNjQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJORVRfQ0xTX1JPVVRFNFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTE1Mjc9Y29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTVxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1MzQtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE1MzU6XFx0ICBUaGlzIG1hdGNoIHByZXR0eSBtdWNoIHJlc2VtYmxlcyB0aGUgQ09ORklHX05FVF9DTFNfUk9VVEU0IG9wdGlvblxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNTM2LVxcdCAgaW4gdGMgd29ybGQuXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZz00ODQ9Y29uZmlnIE5FVF9DTFNfQkFTSUNcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTQ5My1cXG5uZXQvc2NoZWQvS2NvbmZpZzo0OTQ6Y29uZmlnIE5FVF9DTFNfUk9VVEU0XFxubmV0L3NjaGVkL0tjb25maWctNDk1LVxcdHRyaXN0YXRlIFxcXCJSb3V0aW5nIGRlY2lzaW9uIChST1VURSlcXFwiXFxuLS1cXG5uZXQvc2NoZWQvTWFrZWZpbGU9Njg9b2JqLSQoQ09ORklHX05FVF9DTFNfVTMyKVxcdCs9IGNsc191MzIub1xcbm5ldC9zY2hlZC9NYWtlZmlsZTo2OTpvYmotJChDT05GSUdfTkVUX0NMU19ST1VURTQpXFx0Kz0gY2xzX3JvdXRlLm9cXG5uZXQvc2NoZWQvTWFrZWZpbGUtNzAtb2JqLSQoQ09ORklHX05FVF9DTFNfRlcpXFx0Kz0gY2xzX2Z3Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMjE6NTU6NTMuNTIyODkwMjc5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3NDU1Mjg2MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBuZXQvc2NoZWQvS2NvbmZpZ2AgRGVwZW5kZW5jaWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBmb3IgYE5FVF9DTFNfUk9VVEU0YC4gSSdsbCBzdGFydCBieSBjaGVja2luZyBgbmV0L3NjaGVkL0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHBhcmVudCBtZW51cyBvciBpbW1lZGlhdGUgZGVwZW5kZW5jaWVzIG9uIGBORVRfQ0xTX1JPVVRFNGAgaXRzZWxmLiBJJ20gbG9va2luZyBhdCB0aGUgY29uZmlnIGRlZmluaXRpb246IGBjb25maWcgTkVUX0NMU19ST1VURTRgLCBhbmQgSSBzZWUgdGhhdCBpdCdzIGEgdHJpc3RhdGUgb3B0aW9uIGFuZCBkZXBlbmRzIG9uIGBJTkVUYC4gIEl0IGFsc28gKnNlbGVjdHMqIGBJUF9ST1VURV9DTEFTU0lEYCBhbmQgYE5FVF9DTFNgLiAgQWhhLCBhbmQgaXQncyBkZWZpbmVkIHVuZGVyIGBtZW51Y29uZmlnIE5FVF9TQ0hFRGAuIE5vdyBJIHJlY2FsbCB0aGF0IGluIGBuZXQvS2NvbmZpZ2AsIGBzb3VyY2UgXCJuZXQvc2NoZWQvS2NvbmZpZ1wiYCBpcyBndWFyZGVkIGJ5IGBpZiBORVRgLCBzbyB0aGF0IGdpdmVzIG1lIHRoZSBicm9hZGVyIGNvbnRleHQuXG5cblNvLCB0byBzdW1tYXJpemUgdGhlIGtleSBjb25maWdzOiBgTkVUX0NMU19ST1VURTRgLCBgTkVUX1NDSEVEYCwgYE5FVF9DTFNgLCBhbmQgYElORVRgIGFyZSBhbGwgcmVsZXZhbnQgaGVyZS4gVGhpcyBpcyBpbXBvcnRhbnQuXG5cbk5vdywgbGV0IG1lIGRvdWJsZS1jaGVjayBhbGwgdGhlIHJlcXVpcmVtZW50cy4gIFRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIGlzIHRydWUsIGluZGljYXRpbmcgd2UgbmVlZCB0byBmb2N1cyBvbiB0aGlzIGFyZWEuIE15IGBFbmFibGVDb25maWdzYCBsaXN0LCB3aGljaCBpbmNsdWRlcyBgTkVUX0NMU19ST1VURTRgLCBgTkVUX1NDSEVEYCwgYW5kIGBJTkVUYCwgbGluZXMgdXAgd2l0aCB3aGF0IEkganVzdCBhbmFseXplZC4gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBgcm91dGU0X2NoYW5nZWAsIGByb3V0ZTRfZGVsZXRlYCwgYW5kIGByb3V0ZTRfc2V0X3Bhcm1zYCwgd2hpY2ggSSB1bmRlcnN0YW5kLlxuXG5BbHJpZ2h0LCBJJ20gY29uZmlkZW50IGluIG15IGFuYWx5c2lzLiBMZXQncyBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUgZXZlcnl0aGluZyBsaW5lcyB1cCwgYW5kIHRoZW4gSSdsbCBmb3JtdWxhdGUgdGhlIHRvb2wgY2FsbCBhY2NvcmRpbmdseS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIzNywiT3V0cHV0VG9rZW5zIjoxMzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMjE6NTU6NTkuMjY4NDIxMDZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzU2MTAwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0NMU19ST1VURTRcIixcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJvdXRlNF9jaGFuZ2VcIixcbiAgICBcInJvdXRlNF9kZWxldGVcIixcbiAgICBcInJvdXRlNF9zZXRfcGFybXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcm91dGU0IGNsYXNzaWZpZXIgKGNsc19yb3V0ZSkgaW4gdGhlIHRyYWZmaWMgY29udHJvbCBzdWJzeXN0ZW0gYnkgaW50cm9kdWNpbmcgcmVmY291bnRpbmcgKGZpbHRlcnNfcmVmKSB0byBtYW5hZ2UgdGhlIGxpZmV0aW1lIGFuZCBkZWFsbG9jYXRpb24gb2Ygcm91dGU0IGJ1Y2tldHMgZHVyaW5nIGZpbHRlciBpbnNlcnRpb24sIHJlcGxhY2VtZW50LCBhbmQgZGVsZXRpb24uIFRoaXMgaXMgY29yZSBuZXR3b3JraW5nIGNvZGUgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIHRyYWZmaWMgY29udHJvbCBpbnRlcmZhY2VzIGFuZCBhZmZlY3RzIG1lbW9yeSBzYWZldHkgLyBsaWZldGltZSBtYW5hZ2VtZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9DTFNfUk9VVEU0XCIsXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyb3V0ZTRfY2hhbmdlXCIsXG4gICAgXCJyb3V0ZTRfZGVsZXRlXCIsXG4gICAgXCJyb3V0ZTRfc2V0X3Bhcm1zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJvdXRlNCBjbGFzc2lmaWVyIChjbHNfcm91dGUpIGluIHRoZSB0cmFmZmljIGNvbnRyb2wgc3Vic3lzdGVtIGJ5IGludHJvZHVjaW5nIHJlZmNvdW50aW5nIChmaWx0ZXJzX3JlZikgdG8gbWFuYWdlIHRoZSBsaWZldGltZSBhbmQgZGVhbGxvY2F0aW9uIG9mIHJvdXRlNCBidWNrZXRzIGR1cmluZyBmaWx0ZXIgaW5zZXJ0aW9uLCByZXBsYWNlbWVudCwgYW5kIGRlbGV0aW9uLiBUaGlzIGlzIGNvcmUgbmV0d29ya2luZyBjb2RlIHJlYWNoYWJsZSB2aWEgbmV0bGluayB0cmFmZmljIGNvbnRyb2wgaW50ZXJmYWNlcyBhbmQgYWZmZWN0cyBtZW1vcnkgc2FmZXR5IC8gbGlmZXRpbWUgbWFuYWdlbWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMjE6NTU6NTkuMzQ1OTg4ODY5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzI5MzQ1NzA4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDIxOjU1OjU5LjM0NjQ2NDkwOVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIzMjkyOTc2NjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgcmVmZXJlbmNlIGNvdW50ZXIgKGBmaWx0ZXJzX3JlZmApIHRvIGBzdHJ1Y3Qgcm91dGU0X2J1Y2tldGAgaW4gYG5ldC9zY2hlZC9jbHNfcm91dGUuY2AgdG8gdHJhY2sgYWN0aXZlIGZpbHRlcnMgaW4gZWFjaCBidWNrZXQgYW5kIG1hbmFnZSBidWNrZXQgcmVjbGFtYXRpb24gdmlhIFJDVSwgcmVwbGFjaW5nIGEgbGluZWFyIHNjYW4gb2YgYnVja2V0IHNsb3RzLlxcblxcbi0gTWVtb3J5IEluaXRpYWxpemF0aW9uOiBUaGUgYnVja2V0IHN0cnVjdHVyZSBgc3RydWN0IHJvdXRlNF9idWNrZXRgIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmooKWAgYW5kIGBmaWx0ZXJzX3JlZmAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB3aXRoIGByZWZjb3VudF9zZXQoXFx1MDAyNmItXFx1MDAzZWZpbHRlcnNfcmVmLCAxKWAgdXBvbiBjcmVhdGlvbi5cXG4tIFBvdGVudGlhbCBCdWcgVHlwZXM6IEFueSBwb3RlbnRpYWwgYnVncyByZXN1bHRpbmcgZnJvbSB0aGlzIHJlZmFjdG9yaW5nIChlLmcuIGluY29ycmVjdCByZWZlcmVuY2UgY291bnRpbmcsIGRvdWJsZSBmcmVlcywgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucykgYXJlIG1lbW9yeSBsaWZlY3ljbGUgLyBwb2ludGVyIHZhbGlkaXR5IGJ1Z3MgdGhhdCBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHRoZSBgcmVmY291bnRfdGAgcnVudGltZSBjaGVja3MuXFxuLSBVbmluaXRpYWxpemVkIE1lbW9yeSAvIEluZm8tbGVhayBSaXNrOiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZSBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIGJyYW5jaGluZyBkZWNpc2lvbnMuXFxuXFxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDVkYjM4N2MzZjkzZjRlNGIxMzg5MjMyODE0YTUyNzNhYTUyMjIyZDRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyOSAyMTo1NToyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfcm91dGUuYyBiL25ldC9zY2hlZC9jbHNfcm91dGUuY1xuaW5kZXggMGQxMzI0YzkwNTgzNy4uMTdiMGViYjc2NjYyNiAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9jbHNfcm91dGUuY1xuKysrIGIvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jXG5AQCAtMTEsNiArMTEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnJuby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcmVmY291bnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2RzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3JvdXRlLmhcdTAwM2VcbkBAIC00MSw2ICs0Miw3IEBAIHN0cnVjdCByb3V0ZTRfaGVhZCB7XG4gc3RydWN0IHJvdXRlNF9idWNrZXQge1xuIFx0LyogMTYgRlJPTSBidWNrZXRzICsgMTYgSUlGIGJ1Y2tldHMgKyAxIHdpbGRjYXJkIGJ1Y2tldCAqL1xuIFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgX19yY3VcdCpodFsxNiArIDE2ICsgMV07XG4rXHRyZWZjb3VudF90XHRcdFx0ZmlsdGVyc19yZWY7XG4gXHRzdHJ1Y3QgcmN1X2hlYWRcdFx0XHRyY3U7XG4gfTtcbiBcbkBAIC0zMzYsNyArMzM4LDcgQEAgc3RhdGljIGludCByb3V0ZTRfZGVsZXRlKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB2b2lkICphcmcsIGJvb2wgKmxhc3QsXG4gXHRzdHJ1Y3Qgcm91dGU0X2ZpbHRlciAqbmY7XG4gXHRzdHJ1Y3Qgcm91dGU0X2J1Y2tldCAqYjtcbiBcdHVuc2lnbmVkIGludCBoID0gMDtcbi1cdGludCBpLCBoMTtcbitcdGludCBoMTtcbiBcbiBcdGlmICghaGVhZCB8fCAhZilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMzYyLDIzICszNjQsMTQgQEAgc3RhdGljIGludCByb3V0ZTRfZGVsZXRlKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB2b2lkICphcmcsIGJvb2wgKmxhc3QsXG4gXHRcdFx0dGNmX2V4dHNfZ2V0X25ldChcdTAwMjZmLVx1MDAzZWV4dHMpO1xuIFx0XHRcdHRjZl9xdWV1ZV93b3JrKFx1MDAyNmYtXHUwMDNlcndvcmssIHJvdXRlNF9kZWxldGVfZmlsdGVyX3dvcmspO1xuIFxuLVx0XHRcdC8qIFN0cmlwIFJUTkwgcHJvdGVjdGVkIHRyZWUgKi9cbi1cdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYz0gMzI7IGkrKykge1xuLVx0XHRcdFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgKnJ0O1xuLVxuLVx0XHRcdFx0cnQgPSBydG5sX2RlcmVmZXJlbmNlKGItXHUwMDNlaHRbaV0pO1xuLVx0XHRcdFx0aWYgKHJ0KVxuLVx0XHRcdFx0XHRnb3RvIG91dDtcbitcdFx0XHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmItXHUwMDNlZmlsdGVyc19yZWYpKSB7XG4rXHRcdFx0XHRSQ1VfSU5JVF9QT0lOVEVSKGhlYWQtXHUwMDNldGFibGVbdG9faGFzaChoKV0sIE5VTEwpO1xuK1x0XHRcdFx0a2ZyZWVfcmN1KGIsIHJjdSk7XG4gXHRcdFx0fVxuLVxuLVx0XHRcdC8qIE9LLCBzZXNzaW9uIGhhcyBubyBmbG93cyAqL1xuLVx0XHRcdFJDVV9JTklUX1BPSU5URVIoaGVhZC1cdTAwM2V0YWJsZVt0b19oYXNoKGgpXSwgTlVMTCk7XG4tXHRcdFx0a2ZyZWVfcmN1KGIsIHJjdSk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcdH1cbiBcbi1vdXQ6XG4gXHQqbGFzdCA9IHRydWU7XG4gXHRmb3IgKGgxID0gMDsgaDEgXHUwMDNjPSAyNTY7IGgxKyspIHtcbiBcdFx0aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihoZWFkLVx1MDAzZXRhYmxlW2gxXSkpIHtcbkBAIC00NTksNiArNDUyLDcgQEAgc3RhdGljIGludCByb3V0ZTRfc2V0X3Bhcm1zKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsXG4gXHRcdGlmIChiID09IE5VTEwpXG4gXHRcdFx0cmV0dXJuIC1FTk9CVUZTO1xuIFxuK1x0XHRyZWZjb3VudF9zZXQoXHUwMDI2Yi1cdTAwM2VmaWx0ZXJzX3JlZiwgMSk7XG4gXHRcdHJjdV9hc3NpZ25fcG9pbnRlcihoZWFkLVx1MDAzZXRhYmxlW2gxXSwgYik7XG4gXHR9IGVsc2Uge1xuIFx0XHR1bnNpZ25lZCBpbnQgaDIgPSBmcm9tX2hhc2gobmhhbmRsZSBcdTAwM2VcdTAwM2UgMTYpO1xuQEAgLTQ2OCw2ICs0NjIsOCBAQCBzdGF0aWMgaW50IHJvdXRlNF9zZXRfcGFybXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCxcbiBcdFx0ICAgICBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoZnAtXHUwMDNlbmV4dCkpXG4gXHRcdFx0aWYgKGZwLVx1MDAzZWhhbmRsZSA9PSBmLVx1MDAzZWhhbmRsZSlcbiBcdFx0XHRcdHJldHVybiAtRUVYSVNUO1xuK1xuK1x0XHRyZWZjb3VudF9pbmMoXHUwMDI2Yi1cdTAwM2VmaWx0ZXJzX3JlZik7XG4gXHR9XG4gXG4gXHRpZiAodGJbVENBX1JPVVRFNF9UT10pXG5AQCAtNTAwLDcgKzQ5Niw3IEBAIHN0YXRpYyBpbnQgcm91dGU0X2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4gXHRzdHJ1Y3Qgcm91dGU0X2ZpbHRlciAqZm9sZCwgKmYxLCAqcGZwLCAqZiA9IE5VTEw7XG4gXHRzdHJ1Y3Qgcm91dGU0X2J1Y2tldCAqYjtcbiBcdHN0cnVjdCBubGF0dHIgKnRiW1RDQV9ST1VURTRfTUFYICsgMV07XG4tXHR1bnNpZ25lZCBpbnQgaCwgdGg7XG4rXHR1bnNpZ25lZCBpbnQgaDtcbiBcdGludCBlcnI7XG4gXHRib29sIG5ldyA9IHRydWU7XG4gXG5AQCAtNTYwLDE3ICs1NTYsMjAgQEAgc3RhdGljIGludCByb3V0ZTRfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcdHJjdV9hc3NpZ25fcG9pbnRlcigqZnAsIGYpO1xuIFxuIFx0aWYgKGZvbGQpIHtcbi1cdFx0dGggPSB0b19oYXNoKGZvbGQtXHUwMDNlaGFuZGxlKTtcbitcdFx0YiA9IGZvbGQtXHUwMDNlYmt0O1xuIFx0XHRoID0gZnJvbV9oYXNoKGZvbGQtXHUwMDNlaGFuZGxlIFx1MDAzZVx1MDAzZSAxNik7XG4tXHRcdGIgPSBydG5sX2RlcmVmZXJlbmNlKGhlYWQtXHUwMDNldGFibGVbdGhdKTtcbi1cdFx0aWYgKGIpIHtcbi1cdFx0XHRmcCA9IFx1MDAyNmItXHUwMDNlaHRbaF07XG4tXHRcdFx0Zm9yIChwZnAgPSBydG5sX2RlcmVmZXJlbmNlKCpmcCk7IHBmcDtcbi1cdFx0XHQgICAgIGZwID0gXHUwMDI2cGZwLVx1MDAzZW5leHQsIHBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKSkge1xuLVx0XHRcdFx0aWYgKHBmcCA9PSBmb2xkKSB7XG4tXHRcdFx0XHRcdHJjdV9hc3NpZ25fcG9pbnRlcigqZnAsIGZvbGQtXHUwMDNlbmV4dCk7XG4tXHRcdFx0XHRcdGJyZWFrO1xuK1x0XHRmcCA9IFx1MDAyNmItXHUwMDNlaHRbaF07XG4rXHRcdGZvciAocGZwID0gcnRubF9kZXJlZmVyZW5jZSgqZnApOyBwZnA7XG4rXHRcdCAgICAgZnAgPSBcdTAwMjZwZnAtXHUwMDNlbmV4dCwgcGZwID0gcnRubF9kZXJlZmVyZW5jZSgqZnApKSB7XG4rXHRcdFx0aWYgKHBmcCA9PSBmb2xkKSB7XG4rXHRcdFx0XHRyY3VfYXNzaWduX3BvaW50ZXIoKmZwLCBmb2xkLVx1MDAzZW5leHQpO1xuK1x0XHRcdFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZiLVx1MDAzZWZpbHRlcnNfcmVmKSkge1xuK1x0XHRcdFx0XHR1bnNpZ25lZCBpbnQgdGggPSB0b19oYXNoKGZvbGQtXHUwMDNlaGFuZGxlKTtcbitcbitcdFx0XHRcdFx0UkNVX0lOSVRfUE9JTlRFUihoZWFkLVx1MDAzZXRhYmxlW3RoXSwgTlVMTCk7XG4rXHRcdFx0XHRcdGtmcmVlX3JjdShiLCByY3UpO1xuIFx0XHRcdFx0fVxuK1x0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuIFx0XHR9XG4gXHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMTo1NTo1OS4zNDY0NjYxMDlaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODg3MDU3NjAxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGNsc19yb3V0ZS5jIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgd2UgbmVlZCB0byBicmluZyBpbiBLTVNBTi4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYWN0dWFsbHkgY2hhbmdpbmcuIE9rYXksIGl0J3MgaW4gYG5ldC9zY2hlZC9jbHNfcm91dGUuY2AsIHNvIGl0J3MgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIHJvdXRpbmcgY2xhc3NpZmllci4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgYWRkaW5nIGEgYHJlZmNvdW50X3QgZmlsdGVyc19yZWY7YCBmaWVsZCB0byB0aGUgYHN0cnVjdCByb3V0ZTRfYnVja2V0YC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoaXMgaXMgY2xhc3NpYyByZWZjb3VudGluZywgYW5kIHRoYXQgdGhlIGV4aXN0aW5nIGNvZGUgcHJvYmFibHkgaGFkIHNvbWUgcmFjZSBjb25kaXRpb25zIGFyb3VuZCBtYW5hZ2luZyB0aGUgYnVja2V0cy4gTGV0J3Mgc2VlIGhvdyB0aGV5J3JlIGhhbmRsaW5nIGl0Li4uIEFoLCBnb3QgaXQuIEluIGByb3V0ZTRfZGVsZXRlYCwgdGhleSdyZSByZXBsYWNpbmcgdGhlIG9sZCBsb29wLWJhc2VkIGVtcHRpbmVzcyBjaGVjayAoYGZvciAoaSA9IDA7IGkgXHUwMDNjPSAzMjsgaSsrKWApIHdpdGggYSBgcmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmItXHUwMDNlZmlsdGVyc19yZWYpYC4gTWFrZXMgc2Vuc2U7IHRoYXQncyBtdWNoIGNsZWFuZXIgYW5kIGxlc3MgcHJvbmUgdG8gZXJyb3JzLiBga2ZyZWVfcmN1KGIsIHJjdSlgIGlzIGFsc28gYmVpbmcgdXNlZCwgd2hpY2ggaXMgZ29vZCB0byBzZWUgLSBwcm90ZWN0aW5nIGFnYWluc3QgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zLlxuXG5Ob3csIGxvb2tpbmcgYXQgaG93IHRoZSByZWZjb3VudCBpcyBtYW5hZ2VkLi4uIGByb3V0ZTRfc2V0X3Bhcm1zYCBpbml0aWFsaXplcyB0aGUgY291bnQgdG8gMSB3aGVuIGEgYnVja2V0IGlzIGNyZWF0ZWQgKGByZWZjb3VudF9zZXQoXHUwMDI2Yi1cdTAwM2VmaWx0ZXJzX3JlZiwgMSlgKSwgYW5kIGluY3JlYXNlcyBpdCB3aGVuIGEgZmlsdGVyIGlzIGFkZGVkIChgcmVmY291bnRfaW5jKFx1MDAyNmItXHUwMDNlZmlsdGVyc19yZWYpYCkuIExvb2tzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2ggc28gZmFyLiBUaGVuLCBpbiBgcm91dGU0X2NoYW5nZWAsIHdoZW4gYSBgZm9sZGAgaXMgcmVwbGFjZWQsIGl0IGRlY3JlbWVudHMgdGhlIGNvdW50IHVzaW5nIGByZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2Yi1cdTAwM2VmaWx0ZXJzX3JlZilgIGFuZCBmcmVlcyB0aGUgYnVja2V0IGlmIGl0IGhpdHMgemVyby5cblxuQmVmb3JlIEkgY2FuIGdpdmUgdGhpcyBhIGRlZmluaXRpdmUgcGFzcyBvciBmYWlsLCBJIG5lZWQgdG8gc2VlIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IGluIGBuZXQvc2NoZWQvY2xzX3JvdXRlLmNgLiBUaW1lIHRvIGZpcmUgdXAgbXkgdHJ1c3R5IGdyZXBwZXIgb3IgcmVhZC1maWxlIHRvIHNlZSBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIGFuZCBob3cgdGhlIGJ1Y2tldHMgaW50ZXJhY3Qgd2l0aCB0aGUgcmVzdCBvZiB0aGUgcm91dGluZyBjbGFzc2lmaWVyLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgcmVmY291bnRpbmcgc2NoZW1lIGlzIHJvYnVzdCBlbm91Z2ggdG8gaGFuZGxlIGFsbCBwb3NzaWJsZSBzY2VuYXJpb3MsIGVzcGVjaWFsbHkgY29uY3VycmVudCBhY2Nlc3Nlcy4gRnJvbSBhIGhpZ2ggbGV2ZWwgdGhpcyBsb29rcyBsaWtlIGEgZ29vZCBjaGFuZ2UsIGJ1dCBhIG1vcmUgdGhvcm91Z2ggcmV2aWV3IGlzIGluIG9yZGVyIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMzEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMTo1NjowOC4yMTcwNDUzNjFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NjkzMzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJvdXRlNF9zZXRfcGFybXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL2Nsc19yb3V0ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9jbHNfcm91dGUuYz0zODY9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHJvdXRlNF9wb2xpY3lbVENBX1JPVVRFNF9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9zY2hlZC9jbHNfcm91dGUuYy0zOTItXFxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jOjM5MzpzdGF0aWMgaW50IHJvdXRlNF9zZXRfcGFybXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCxcXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmMtMzk0LVxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGJhc2UsIHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jPTQ4OT1zdGF0aWMgaW50IHJvdXRlNF9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jLTU0MC1cXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmM6NTQxOlxcdGVyciA9IHJvdXRlNF9zZXRfcGFybXMobmV0LCB0cCwgYmFzZSwgZiwgaGFuZGxlLCBoZWFkLCB0YixcXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmMtNTQyLVxcdFxcdFxcdCAgICAgICB0Y2FbVENBX1JBVEVdLCBuZXcsIGZsYWdzLCBleHRhY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMTo1NjowOC4yNjE3NDIzNVoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTkzMTcwNzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBjb2RlIHNlZ21lbnRzIGluIGBuZXQvc2NoZWQvY2xzX3JvdXRlLmNgOlxuXG4qKkRlZXAgRGl2ZSBpbnRvIGBjbHNfcm91dGVgIGFuZCBSZWZlcmVuY2UgQ291bnRpbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIGBjbHNfcm91dGVgIGFnYWluLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIG9mIGBiYCBhbmQgaG93IGBmaWx0ZXJzX3JlZmAgaXMgbGV2ZXJhZ2VkIGluIHRoaXMgY29udGV4dC4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gZm9jdXMgb24gdGhvc2UgY3J1Y2lhbCBmdW5jdGlvbnM6IGByb3V0ZTRfc2V0X3Bhcm1zYCwgYHJvdXRlNF9jaGFuZ2VgLCBhbmQgYHJvdXRlNF9kZWxldGVgLiBJIG5lZWQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgaGFuZGxlIHRoZSBsaWZlY3ljbGUgb2YgdGhlIGZpbHRlciBkYXRhIGFuZCwgcGFydGljdWxhcmx5LCBob3cgdGhhdCByZWZlcmVuY2UgY291bnRlciAoYGZpbHRlcnNfcmVmYCkgcGxheXMgYSByb2xlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ3Jhc3AgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBlbnN1cmUgdGhhdCB3ZSdyZSBwcm9wZXJseSBwcm90ZWN0aW5nIHRoZSBmaWx0ZXIgZGF0YSBhZ2FpbnN0IHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcy4gSSdsbCBiZSBtZXRpY3Vsb3VzbHkgZXhhbWluaW5nIHRoZSBjb2RlIHRvIHBpbnBvaW50IGV4YWN0bHkgd2hlcmUgbWVtb3J5IGlzIGFsbG9jYXRlZCwgaW5pdGlhbGl6ZWQsIHJlZmVyZW5jZWQsIGFuZCB1bHRpbWF0ZWx5LCBkZWFsbG9jYXRlZC4gVGhpcyBpcyBjcml0aWNhbCBmb3IgbWFpbnRhaW5pbmcgZGF0YSBpbnRlZ3JpdHkgYW5kIHN5c3RlbSBzdGFiaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzOTAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMTo1NjoxMC44NTQ5MTU3OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvY2xzX3JvdXRlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDQwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDQwOlxcdFxcdFxcdH1cXG4gNDQxOlxcdFxcdH1cXG4gNDQyOlxcdFxcbiA0NDM6XFx0XFx0aWYgKCFuaGFuZGxlKSB7XFxuIDQ0NDpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJSZXBsYWNpbmcgd2l0aCBoYW5kbGUgb2YgMCBpcyBpbnZhbGlkXFxcIik7XFxuIDQ0NTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDQ2OlxcdFxcdH1cXG4gNDQ3OlxcdFxcbiA0NDg6XFx0XFx0aDEgPSB0b19oYXNoKG5oYW5kbGUpO1xcbiA0NDk6XFx0XFx0YiA9IHJ0bmxfZGVyZWZlcmVuY2UoaGVhZC1cXHUwMDNldGFibGVbaDFdKTtcXG4gNDUwOlxcdFxcdGlmICghYikge1xcbiA0NTE6XFx0XFx0XFx0YiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCByb3V0ZTRfYnVja2V0LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiA0NTI6XFx0XFx0XFx0aWYgKGIgPT0gTlVMTClcXG4gNDUzOlxcdFxcdFxcdFxcdHJldHVybiAtRU5PQlVGUztcXG4gNDU0OlxcdFxcbiA0NTU6XFx0XFx0XFx0cmVmY291bnRfc2V0KFxcdTAwMjZiLVxcdTAwM2VmaWx0ZXJzX3JlZiwgMSk7XFxuIDQ1NjpcXHRcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIoaGVhZC1cXHUwMDNldGFibGVbaDFdLCBiKTtcXG4gNDU3OlxcdFxcdH0gZWxzZSB7XFxuIDQ1ODpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgaDIgPSBmcm9tX2hhc2gobmhhbmRsZSBcXHUwMDNlXFx1MDAzZSAxNik7XFxuIDQ1OTpcXHRcXG4gNDYwOlxcdFxcdFxcdGZvciAoZnAgPSBydG5sX2RlcmVmZXJlbmNlKGItXFx1MDAzZWh0W2gyXSk7XFxuIDQ2MTpcXHRcXHRcXHQgICAgIGZwO1xcbiA0NjI6XFx0XFx0XFx0ICAgICBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoZnAtXFx1MDAzZW5leHQpKVxcbiA0NjM6XFx0XFx0XFx0XFx0aWYgKGZwLVxcdTAwM2VoYW5kbGUgPT0gZi1cXHUwMDNlaGFuZGxlKVxcbiA0NjQ6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuIDQ2NTpcXHRcXG4gNDY2OlxcdFxcdFxcdHJlZmNvdW50X2luYyhcXHUwMDI2Yi1cXHUwMDNlZmlsdGVyc19yZWYpO1xcbiA0Njc6XFx0XFx0fVxcbiA0Njg6XFx0XFxuIDQ2OTpcXHRcXHRpZiAodGJbVENBX1JPVVRFNF9UT10pXFxuIDQ3MDpcXHRcXHRcXHRmLVxcdTAwM2VpZCA9IHRvO1xcbiA0NzE6XFx0XFxuIDQ3MjpcXHRcXHRpZiAodGJbVENBX1JPVVRFNF9GUk9NXSlcXG4gNDczOlxcdFxcdFxcdGYtXFx1MDAzZWlkID0gdG8gfCBpZFxcdTAwM2NcXHUwMDNjMTY7XFxuIDQ3NDpcXHRcXHRlbHNlIGlmICh0YltUQ0FfUk9VVEU0X0lJRl0pXFxuIDQ3NTpcXHRcXHRcXHRmLVxcdTAwM2VpaWYgPSBpZDtcXG4gNDc2OlxcdFxcbiA0Nzc6XFx0XFx0Zi1cXHUwMDNlaGFuZGxlID0gbmhhbmRsZTtcXG4gNDc4OlxcdFxcdGYtXFx1MDAzZWJrdCA9IGI7XFxuIDQ3OTpcXHRcXHRmLVxcdTAwM2V0cCA9IHRwO1xcbiA0ODA6XFx0XFxuIDQ4MTpcXHRcXHRpZiAodGJbVENBX1JPVVRFNF9DTEFTU0lEXSkge1xcbiA0ODI6XFx0XFx0XFx0Zi1cXHUwMDNlcmVzLmNsYXNzaWQgPSBubGFfZ2V0X3UzMih0YltUQ0FfUk9VVEU0X0NMQVNTSURdKTtcXG4gNDgzOlxcdFxcdFxcdHRjZl9iaW5kX2ZpbHRlcih0cCwgXFx1MDAyNmYtXFx1MDAzZXJlcywgYmFzZSk7XFxuIDQ4NDpcXHRcXHR9XFxuIDQ4NTpcXHRcXG4gNDg2OlxcdFxcdHJldHVybiAwO1xcbiA0ODc6XFx0fVxcbiA0ODg6XFx0XFxuIDQ4OTpcXHRzdGF0aWMgaW50IHJvdXRlNF9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbiA0OTA6XFx0XFx0XFx0XFx0IHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB1bnNpZ25lZCBsb25nIGJhc2UsIHUzMiBoYW5kbGUsXFxuIDQ5MTpcXHRcXHRcXHRcXHQgc3RydWN0IG5sYXR0ciAqKnRjYSwgdm9pZCAqKmFyZywgdTMyIGZsYWdzLFxcbiA0OTI6XFx0XFx0XFx0XFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4gNDkzOlxcdHtcXG4gNDk0OlxcdFxcdHN0cnVjdCByb3V0ZTRfaGVhZCAqaGVhZCA9IHJ0bmxfZGVyZWZlcmVuY2UodHAtXFx1MDAzZXJvb3QpO1xcbiA0OTU6XFx0XFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgX19yY3UgKipmcDtcXG4gNDk2OlxcdFxcdHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmb2xkLCAqZjEsICpwZnAsICpmID0gTlVMTDtcXG4gNDk3OlxcdFxcdHN0cnVjdCByb3V0ZTRfYnVja2V0ICpiO1xcbiA0OTg6XFx0XFx0c3RydWN0IG5sYXR0ciAqdGJbVENBX1JPVVRFNF9NQVggKyAxXTtcXG4gNDk5OlxcdFxcdHVuc2lnbmVkIGludCBoO1xcbiA1MDA6XFx0XFx0aW50IGVycjtcXG4gNTAxOlxcdFxcdGJvb2wgbmV3ID0gdHJ1ZTtcXG4gNTAyOlxcdFxcbiA1MDM6XFx0XFx0aWYgKCFoYW5kbGUpIHtcXG4gNTA0OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkNyZWF0aW5nIHdpdGggaGFuZGxlIG9mIDAgaXMgaW52YWxpZFxcXCIpO1xcbiA1MDU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDUwNjpcXHRcXHR9XFxuIDUwNzpcXHRcXG4gNTA4OlxcdFxcdGlmIChOTF9SRVFfQVRUUl9DSEVDSyhleHRhY2ssIE5VTEwsIHRjYSwgVENBX09QVElPTlMpKSB7XFxuIDUwOTpcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiTWlzc2luZyBvcHRpb25zXFxcIik7XFxuIDUxMDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNTExOlxcdFxcdH1cXG4gNTEyOlxcdFxcbiA1MTM6XFx0XFx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHRiLCBUQ0FfUk9VVEU0X01BWCwgdGNhW1RDQV9PUFRJT05TXSxcXG4gNTE0OlxcdFxcdFxcdFxcdFxcdFxcdCAgcm91dGU0X3BvbGljeSwgTlVMTCk7XFxuIDUxNTpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gNTE2OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDUxNzpcXHRcXG4gNTE4OlxcdFxcdGZvbGQgPSAqYXJnO1xcbiA1MTk6XFx0XFx0aWYgKGZvbGQgXFx1MDAyNlxcdTAwMjYgZm9sZC1cXHUwMDNlaGFuZGxlICE9IGhhbmRsZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMjE6NTY6MTAuODU1MDEwOThaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEyODgxMjc5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgYGNsc19yb3V0ZS5jYCBDb2RlKipcblxuT2theSwgc28gd2UndmUgYWRkcmVzc2VkIHRoZSBicm9hZGVyIGlzc3VlLCBidXQgSSBoYXZlIGEgbmFnZ2luZyBmZWVsaW5nIHdlIG5lZWQgdG8gYmUgdGhvcm91Z2guIExldCdzIG5vdCBqdXN0IGFzc3VtZTsgd2UgbmVlZCB0byB2ZXJpZnkuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gbGluZXMgNTIwIHRocm91Z2ggNTgwIG9mIGBjbHNfcm91dGUuY2AuIFRoaXMgc2VjdGlvbiAqZmVlbHMqIGxpa2UgYSBsaWtlbHkgYXJlYSBmb3IgdGhlIHByb2JsZW0gd2UgYXJlIGV4cGVyaWVuY2luZy4gSXTigJlzIHdoZXJlIGEgY3JpdGljYWwgcm91dGluZyBmdW5jdGlvbiBoYXBwZW5zLiBJIGNhbiBhbHJlYWR5IHBpY3R1cmUgdGhlIHBvdGVudGlhbCBsb2dpYyBmbG93IHRoZXJlLCBhbmQgdGhlIHNwZWNpZmljIHZhcmlhYmxlcyB0aGF0IG1pZ2h0IGJlIGludm9sdmVkLiBUaW1lIHRvIHJvbGwgdXAgbXkgc2xlZXZlcyBhbmQgc2VlIHdoYXQgdGhvc2UgbGluZXMgYXJlICpyZWFsbHkqIGRvaW5nLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGVkZ2UgY2FzZXMsIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG9yIGFueXRoaW5nIHRoYXQgY291bGQgYmUgc3VidGx5IGltcGFjdGluZyB0aGUgcm91dGluZyBkZWNpc2lvbi4gSXTigJlzIGFsd2F5cyBiZXN0IHRvIGJlIHByZWNpc2Ugd2hlbiBpdCBjb21lcyB0byBwcm9ibGVtcyBsaWtlIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MjYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDIxOjU2OjEyLjk4MzgyNzgzN1oiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvY2xzX3JvdXRlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTIwLFxuICBcIkxpbmVDb3VudFwiOiA2NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTIwOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1MjE6XFx0XFxuIDUyMjpcXHRcXHRlcnIgPSAtRU5PQlVGUztcXG4gNTIzOlxcdFxcdGYgPSBremFsbG9jX29iaihzdHJ1Y3Qgcm91dGU0X2ZpbHRlciwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gNTI0OlxcdFxcdGlmICghZilcXG4gNTI1OlxcdFxcdFxcdGdvdG8gZXJyb3V0O1xcbiA1MjY6XFx0XFxuIDUyNzpcXHRcXHRlcnIgPSB0Y2ZfZXh0c19pbml0KFxcdTAwMjZmLVxcdTAwM2VleHRzLCBuZXQsIFRDQV9ST1VURTRfQUNULCBUQ0FfUk9VVEU0X1BPTElDRSk7XFxuIDUyODpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gNTI5OlxcdFxcdFxcdGdvdG8gZXJyb3V0O1xcbiA1MzA6XFx0XFxuIDUzMTpcXHRcXHRpZiAoZm9sZCkge1xcbiA1MzI6XFx0XFx0XFx0Zi1cXHUwMDNlaWQgPSBmb2xkLVxcdTAwM2VpZDtcXG4gNTMzOlxcdFxcdFxcdGYtXFx1MDAzZWlpZiA9IGZvbGQtXFx1MDAzZWlpZjtcXG4gNTM0OlxcdFxcdFxcdGYtXFx1MDAzZWhhbmRsZSA9IGZvbGQtXFx1MDAzZWhhbmRsZTtcXG4gNTM1OlxcdFxcbiA1MzY6XFx0XFx0XFx0Zi1cXHUwMDNldHAgPSBmb2xkLVxcdTAwM2V0cDtcXG4gNTM3OlxcdFxcdFxcdGYtXFx1MDAzZWJrdCA9IGZvbGQtXFx1MDAzZWJrdDtcXG4gNTM4OlxcdFxcdFxcdG5ldyA9IGZhbHNlO1xcbiA1Mzk6XFx0XFx0fVxcbiA1NDA6XFx0XFxuIDU0MTpcXHRcXHRlcnIgPSByb3V0ZTRfc2V0X3Bhcm1zKG5ldCwgdHAsIGJhc2UsIGYsIGhhbmRsZSwgaGVhZCwgdGIsXFxuIDU0MjpcXHRcXHRcXHRcXHQgICAgICAgdGNhW1RDQV9SQVRFXSwgbmV3LCBmbGFncywgZXh0YWNrKTtcXG4gNTQzOlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiA1NDQ6XFx0XFx0XFx0Z290byBlcnJvdXQ7XFxuIDU0NTpcXHRcXG4gNTQ2OlxcdFxcdGggPSBmcm9tX2hhc2goZi1cXHUwMDNlaGFuZGxlIFxcdTAwM2VcXHUwMDNlIDE2KTtcXG4gNTQ3OlxcdFxcdGZwID0gXFx1MDAyNmYtXFx1MDAzZWJrdC1cXHUwMDNlaHRbaF07XFxuIDU0ODpcXHRcXHRmb3IgKHBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKTtcXG4gNTQ5OlxcdFxcdCAgICAgKGYxID0gcnRubF9kZXJlZmVyZW5jZSgqZnApKSAhPSBOVUxMO1xcbiA1NTA6XFx0XFx0ICAgICBmcCA9IFxcdTAwMjZmMS1cXHUwMDNlbmV4dClcXG4gNTUxOlxcdFxcdFxcdGlmIChmLVxcdTAwM2VoYW5kbGUgXFx1MDAzYyBmMS1cXHUwMDNlaGFuZGxlKVxcbiA1NTI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDU1MzpcXHRcXG4gNTU0OlxcdFxcdHRjZl9ibG9ja19uZXRpZl9rZWVwX2RzdCh0cC1cXHUwMDNlY2hhaW4tXFx1MDAzZWJsb2NrKTtcXG4gNTU1OlxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcihmLVxcdTAwM2VuZXh0LCBmMSk7XFxuIDU1NjpcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIoKmZwLCBmKTtcXG4gNTU3OlxcdFxcbiA1NTg6XFx0XFx0aWYgKGZvbGQpIHtcXG4gNTU5OlxcdFxcdFxcdGIgPSBmb2xkLVxcdTAwM2Via3Q7XFxuIDU2MDpcXHRcXHRcXHRoID0gZnJvbV9oYXNoKGZvbGQtXFx1MDAzZWhhbmRsZSBcXHUwMDNlXFx1MDAzZSAxNik7XFxuIDU2MTpcXHRcXHRcXHRmcCA9IFxcdTAwMjZiLVxcdTAwM2VodFtoXTtcXG4gNTYyOlxcdFxcdFxcdGZvciAocGZwID0gcnRubF9kZXJlZmVyZW5jZSgqZnApOyBwZnA7XFxuIDU2MzpcXHRcXHRcXHQgICAgIGZwID0gXFx1MDAyNnBmcC1cXHUwMDNlbmV4dCwgcGZwID0gcnRubF9kZXJlZmVyZW5jZSgqZnApKSB7XFxuIDU2NDpcXHRcXHRcXHRcXHRpZiAocGZwID09IGZvbGQpIHtcXG4gNTY1OlxcdFxcdFxcdFxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcigqZnAsIGZvbGQtXFx1MDAzZW5leHQpO1xcbiA1NjY6XFx0XFx0XFx0XFx0XFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2Yi1cXHUwMDNlZmlsdGVyc19yZWYpKSB7XFxuIDU2NzpcXHRcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgdGggPSB0b19oYXNoKGZvbGQtXFx1MDAzZWhhbmRsZSk7XFxuIDU2ODpcXHRcXG4gNTY5OlxcdFxcdFxcdFxcdFxcdFxcdFJDVV9JTklUX1BPSU5URVIoaGVhZC1cXHUwMDNldGFibGVbdGhdLCBOVUxMKTtcXG4gNTcwOlxcdFxcdFxcdFxcdFxcdFxcdGtmcmVlX3JjdShiLCByY3UpO1xcbiA1NzE6XFx0XFx0XFx0XFx0XFx0fVxcbiA1NzI6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDU3MzpcXHRcXHRcXHRcXHR9XFxuIDU3NDpcXHRcXHRcXHR9XFxuIDU3NTpcXHRcXHR9XFxuIDU3NjpcXHRcXG4gNTc3OlxcdFxcdHJvdXRlNF9yZXNldF9mYXN0bWFwKGhlYWQsIGZvbGQpO1xcbiA1Nzg6XFx0XFx0KmFyZyA9IGY7XFxuIDU3OTpcXHRcXHRpZiAoZm9sZCkge1xcbiA1ODA6XFx0XFx0XFx0dGNmX3VuYmluZF9maWx0ZXIodHAsIFxcdTAwMjZmb2xkLVxcdTAwM2VyZXMpO1xcbiA1ODE6XFx0XFx0XFx0dGNmX2V4dHNfZ2V0X25ldChcXHUwMDI2Zm9sZC1cXHUwMDNlZXh0cyk7XFxuIDU4MjpcXHRcXHRcXHR0Y2ZfcXVldWVfd29yayhcXHUwMDI2Zm9sZC1cXHUwMDNlcndvcmssIHJvdXRlNF9kZWxldGVfZmlsdGVyX3dvcmspO1xcbiA1ODM6XFx0XFx0fVxcbiA1ODQ6XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDIxOjU2OjEyLjk4MzkyOTA3N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTAwODg1NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipSZXZpZXdpbmcgQ2hhbmdlcyBpbiBgcm91dGU0X2RlbGV0ZWAqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW4gYW5kIG1ha2UgYWJzb2x1dGVseSBjZXJ0YWluIEkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBjaGFuZ2VzLiBJIG5lZWQgdG8gY29tcHJlaGVuc2l2ZWx5IHJldmlldyBgcm91dGU0X2RlbGV0ZWAg4oCTIHRoZSBmdW5jdGlvbiBpdHNlbGYsIGl0cyBpbXBsZW1lbnRhdGlvbiwgYW5kIGl0cyBpbnRlbmRlZCBiZWhhdmlvci4gQnV0IHRoYXQncyBub3QgZW5vdWdoOyBJIGhhdmUgdG8gem9vbSBvdXQgYW5kIGNvbnNpZGVyIHRoZSBlbnRpcmUgZmlsZSBjb250ZXh0LiBJIHdhbnQgdG8gbG9vayBhdCBob3cgdGhpcyBkZWxldGlvbiBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCAqZXZlcnl0aGluZyogZWxzZSBpbiB0aGUgZmlsZSDigJMgYWxsIHRoZSBvdGhlciByb3V0ZXMsIGRhdGEgc3RydWN0dXJlcywgZGVwZW5kZW5jaWVzLCBlcnJvciBoYW5kbGluZy4uLiBldmVyeXRoaW5nIHRoYXQgY291bGQgcG9zc2libHkgYmUgdG91Y2hlZCBvciBpbmZsdWVuY2VkLiBJJ20gdGhpbmtpbmcgYWJvdXQgZWRnZSBjYXNlcywgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgdGhlIHdob2xlIGVuY2hpbGFkYS4gTm8gc3RvbmUgdW50dXJuZWQuIEEgdGhvcm91Z2ggYW5hbHlzaXMgaXMgdGhlIG9ubHkgd2F5IHRvIGJlIGNvbmZpZGVudCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTg4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMTo1NjoxNC44ODQ4MTcyMDdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL2Nsc19yb3V0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMzMCxcbiAgXCJMaW5lQ291bnRcIjogNTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMzMDpcXHR9XFxuIDMzMTpcXHRcXG4gMzMyOlxcdHN0YXRpYyBpbnQgcm91dGU0X2RlbGV0ZShzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdm9pZCAqYXJnLCBib29sICpsYXN0LFxcbiAzMzM6XFx0XFx0XFx0XFx0IGJvb2wgcnRubF9oZWxkLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDMzNDpcXHR7XFxuIDMzNTpcXHRcXHRzdHJ1Y3Qgcm91dGU0X2hlYWQgKmhlYWQgPSBydG5sX2RlcmVmZXJlbmNlKHRwLVxcdTAwM2Vyb290KTtcXG4gMzM2OlxcdFxcdHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmID0gYXJnO1xcbiAzMzc6XFx0XFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgX19yY3UgKipmcDtcXG4gMzM4OlxcdFxcdHN0cnVjdCByb3V0ZTRfZmlsdGVyICpuZjtcXG4gMzM5OlxcdFxcdHN0cnVjdCByb3V0ZTRfYnVja2V0ICpiO1xcbiAzNDA6XFx0XFx0dW5zaWduZWQgaW50IGggPSAwO1xcbiAzNDE6XFx0XFx0aW50IGgxO1xcbiAzNDI6XFx0XFxuIDM0MzpcXHRcXHRpZiAoIWhlYWQgfHwgIWYpXFxuIDM0NDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMzQ1OlxcdFxcbiAzNDY6XFx0XFx0aCA9IGYtXFx1MDAzZWhhbmRsZTtcXG4gMzQ3OlxcdFxcdGIgPSBmLVxcdTAwM2Via3Q7XFxuIDM0ODpcXHRcXG4gMzQ5OlxcdFxcdGZwID0gXFx1MDAyNmItXFx1MDAzZWh0W2Zyb21faGFzaChoIFxcdTAwM2VcXHUwMDNlIDE2KV07XFxuIDM1MDpcXHRcXHRmb3IgKG5mID0gcnRubF9kZXJlZmVyZW5jZSgqZnApOyBuZjtcXG4gMzUxOlxcdFxcdCAgICAgZnAgPSBcXHUwMDI2bmYtXFx1MDAzZW5leHQsIG5mID0gcnRubF9kZXJlZmVyZW5jZSgqZnApKSB7XFxuIDM1MjpcXHRcXHRcXHRpZiAobmYgPT0gZikge1xcbiAzNTM6XFx0XFx0XFx0XFx0LyogdW5saW5rIGl0ICovXFxuIDM1NDpcXHRcXHRcXHRcXHRSQ1VfSU5JVF9QT0lOVEVSKCpmcCwgcnRubF9kZXJlZmVyZW5jZShmLVxcdTAwM2VuZXh0KSk7XFxuIDM1NTpcXHRcXG4gMzU2OlxcdFxcdFxcdFxcdC8qIENsZWFyIGFueSBmYXN0bWFwIGVudHJpZXMgdGhhdCBtYXkgcmVmIHRoaXMgZmlsdGVyIGFuZFxcbiAzNTc6XFx0XFx0XFx0XFx0ICogbWFyayBpdCBkeWluZyBzbyBpbi1mbGlnaHQgcmVhZGVycyBjYW4ndCByZXB1Ymxpc2ggaXRcXG4gMzU4OlxcdFxcdFxcdFxcdCAqIGFmdGVyIHRoZSByZXNldC5cXG4gMzU5OlxcdFxcdFxcdFxcdCAqL1xcbiAzNjA6XFx0XFx0XFx0XFx0cm91dGU0X3Jlc2V0X2Zhc3RtYXAoaGVhZCwgZik7XFxuIDM2MTpcXHRcXG4gMzYyOlxcdFxcdFxcdFxcdC8qIERlbGV0ZSBpdCAqL1xcbiAzNjM6XFx0XFx0XFx0XFx0dGNmX3VuYmluZF9maWx0ZXIodHAsIFxcdTAwMjZmLVxcdTAwM2VyZXMpO1xcbiAzNjQ6XFx0XFx0XFx0XFx0dGNmX2V4dHNfZ2V0X25ldChcXHUwMDI2Zi1cXHUwMDNlZXh0cyk7XFxuIDM2NTpcXHRcXHRcXHRcXHR0Y2ZfcXVldWVfd29yayhcXHUwMDI2Zi1cXHUwMDNlcndvcmssIHJvdXRlNF9kZWxldGVfZmlsdGVyX3dvcmspO1xcbiAzNjY6XFx0XFxuIDM2NzpcXHRcXHRcXHRcXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZiLVxcdTAwM2VmaWx0ZXJzX3JlZikpIHtcXG4gMzY4OlxcdFxcdFxcdFxcdFxcdFJDVV9JTklUX1BPSU5URVIoaGVhZC1cXHUwMDNldGFibGVbdG9faGFzaChoKV0sIE5VTEwpO1xcbiAzNjk6XFx0XFx0XFx0XFx0XFx0a2ZyZWVfcmN1KGIsIHJjdSk7XFxuIDM3MDpcXHRcXHRcXHRcXHR9XFxuIDM3MTpcXHRcXHRcXHRcXHRicmVhaztcXG4gMzcyOlxcdFxcdFxcdH1cXG4gMzczOlxcdFxcdH1cXG4gMzc0OlxcdFxcbiAzNzU6XFx0XFx0Kmxhc3QgPSB0cnVlO1xcbiAzNzY6XFx0XFx0Zm9yIChoMSA9IDA7IGgxIFxcdTAwM2M9IDI1NjsgaDErKykge1xcbiAzNzc6XFx0XFx0XFx0aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihoZWFkLVxcdTAwM2V0YWJsZVtoMV0pKSB7XFxuIDM3ODpcXHRcXHRcXHRcXHQqbGFzdCA9IGZhbHNlO1xcbiAzNzk6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDM4MDpcXHRcXHRcXHR9XFxuIDM4MTpcXHRcXHR9XFxuIDM4MjpcXHRcXG4gMzgzOlxcdFxcdHJldHVybiAwO1xcbiAzODQ6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMTo1NjoxNC44ODQ5MDE3OTdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Nzc1NDUxNzU1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogTmVlZHNLTVNBTiA9IGZhbHNlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSByZWZlcmVuY2UgY291bnQsIGBmaWx0ZXJzX3JlZmAsIHRvIHRoZSBgc3RydWN0IHJvdXRlNF9idWNrZXRgLiBNeSBnb2FsIGhlcmUgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIHJlcXVpcmVzIEtNU0FOLCBvciBLZXJuZWwgTWVtb3J5IFNhbml0aXplciwgYXR0ZW50aW9uLlxuXG5GaXJzdCwgSSdtIG5vdGluZyB0aGUgY2hhbmdlcy4gVGhlIGByb3V0ZTRfYnVja2V0YCBub3cgaGFzIHRoZSBgZmlsdGVyc19yZWZgIG1lbWJlci4gIGByb3V0ZTRfc2V0X3Bhcm1zYCBpbml0aWFsaXplcyB0aGlzIGNvdW50IHRvIDEgd2hlbiBhIG5ldyBidWNrZXQgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqYCwgYW5kIGluY3JlbWVudHMgaXQgd2hlbiBmaWx0ZXJzIGFyZSBhZGRlZC4gYHJvdXRlNF9kZWxldGVgIGRlY3JlbWVudHMgdGhlIGNvdW50LCBmcmVlaW5nIHRoZSBidWNrZXQgaWYgaXQgaGl0cyB6ZXJvIHVzaW5nIGBrZnJlZV9yY3VgLiBgcm91dGU0X2NoYW5nZWAgaGFuZGxlcyBmaWx0ZXIgcmVwbGFjZW1lbnRzIHNpbWlsYXJseSwgZGVjcmVtZW50aW5nIGFuZCBmcmVlaW5nIHRoZSBvbGQgYnVja2V0LiBUaGUgd2hvbGUgdGhpbmcgaGluZ2VzIG9uIGEgYHJlZmNvdW50X3RgLlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiBpcyBhbHdheXMgdW5pbml0aWFsaXplZCBtZW1vcnksIG9mIGNvdXJzZS4gIEJ1dCBga3phbGxvY19vYmpgIGd1YXJhbnRlZXMgemVyby1pbml0aWFsaXphdGlvbiBvZiB0aGUgYHJvdXRlNF9idWNrZXRgLCBhbmQgdGhlIGByZWZjb3VudF9zZXRgIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZXMgdGhlIGBmaWx0ZXJzX3JlZmAgbWVtYmVyLiBJJ20gc2VlaW5nIG5vIG5ldyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzLCBubyBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29waWVzIHRoYXQgY291bGQgbGVhayBpbmZvcm1hdGlvbiwgYW5kIG5vIGNvbnRyb2wgZmxvdyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBFeGNlbGxlbnQuXG5cbk5vdywgd2hhdCBhYm91dCBwb3RlbnRpYWwgYnVncz8gSSdtIHRoaW5raW5nIHJlZmVyZW5jZSBjb3VudGluZyBwcm9ibGVtcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlcywgbWVtb3J5IGxlYWtzLCBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4gIEhvd2V2ZXIsIHRoZXNlIGFyZSB0aGluZ3MgdGhhdCBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBhbmQgc3RhbmRhcmQgZGVidWdnZXJzIHdpdGggcmVmY291bnQgdW5kZXIvb3ZlcmZsb3cgY2hlY2tzIGFyZSBkZXNpZ25lZCB0byBjYXRjaC4gIENydWNpYWxseSwgdGhlc2UgYnVncyAqZG9uJ3QqIGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLlxuXG5BbHJpZ2h0LCBsZXQncyBnbyBkb3duIHRoZSBLTVNBTiBjaGVja2xpc3QuXG5cbjEuICBEb2VzIHRoZSBwYXRjaCB0b3VjaCBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2Ugd2hlcmUgZmllbGRzIG1pZ2h0IGJlIHVuaW5pdGlhbGl6ZWQ/IE5vcGUsIG5vdGhpbmcgaXMgbW9kaWZpZWQgcmVnYXJkaW5nIHN0cnVjdHVyZXMgdGhhdCBhcmUgc2VudCB0byB1c2VyIHNwYWNlLlxuMi4gIERvZXMgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBObywgdGhlIGBmaWx0ZXJzX3JlZmAgaXMgaW5pdGlhbGl6ZWQgb24gYWxsb2NhdGlvbi5cbjMuICBEb2VzIGl0IGludHJvZHVjZSBhbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHMgdGhhdCBjb3VsZCBiZSByZWFkIGxhdGVyPyBObywgYGt6YWxsb2Nfb2JqYCBhbmQgYHJlZmNvdW50X3NldGAgaGFuZGxlcyB0aGF0LlxuNC4gIERvZXMgaXQgbWVzcyB3aXRoIGJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIHRoYXQgYWxsb3dzIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzPyBOby5cblxuT2theSwgbGV0J3MgZmxpcCB0aGUgY2hlY2tsaXN0IG9uIGl0cyBoZWFkLiBUaGlzIHBhdGNoICpkb2Vzbid0KiBpbnRyb2R1Y2UgYW55OlxuXG4qICAgT3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKGJleW9uZCB0aGUgcmVmY291bnRpbmcgZXJyb3JzLCBhbHJlYWR5IGNvdmVyZWQgYnkgS0FTQU4pLlxuKiAgIFVuaW5pdGlhbGl6ZWQgZGF0YSBiZWluZyByZWFkIG9yIGNvcGllZC5cbiogICBSaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblRoZXJlZm9yZSwgdGhlIGNvbmNsdXNpb24gaXMgY2xlYXI6IGBOZWVkc0tNU0FOID0gZmFsc2VgLiBJIGNhbiBwcm9jZWVkIHRvIGNvbnN0cnVjdCB0aGUgYHNldC1yZXN1bHRzYCBjYWxsIHdpdGggdGhpcyBpbmZvcm1hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIzMiwiT3V0cHV0VG9rZW5zIjoyNDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMTo1NjoyMi42Mzk0MjI0NzdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSByZWZlcmVuY2UgY291bnRlciAoYGZpbHRlcnNfcmVmYCkgdG8gYHN0cnVjdCByb3V0ZTRfYnVja2V0YCBpbiBgbmV0L3NjaGVkL2Nsc19yb3V0ZS5jYCB0byB0cmFjayBhY3RpdmUgZmlsdGVycyBpbiBlYWNoIGJ1Y2tldCBhbmQgbWFuYWdlIGJ1Y2tldCByZWNsYW1hdGlvbiB2aWEgUkNVLCByZXBsYWNpbmcgYSBsaW5lYXIgc2NhbiBvZiBidWNrZXQgc2xvdHMuXFxuXFxuLSBNZW1vcnkgSW5pdGlhbGl6YXRpb246IFRoZSBidWNrZXQgc3RydWN0dXJlIGBzdHJ1Y3Qgcm91dGU0X2J1Y2tldGAgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iaigpYCBhbmQgYGZpbHRlcnNfcmVmYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHdpdGggYHJlZmNvdW50X3NldChcXHUwMDI2Yi1cXHUwMDNlZmlsdGVyc19yZWYsIDEpYCB1cG9uIGNyZWF0aW9uLlxcbi0gUG90ZW50aWFsIEJ1ZyBUeXBlczogQW55IHBvdGVudGlhbCBidWdzIHJlc3VsdGluZyBmcm9tIHRoaXMgcmVmYWN0b3JpbmcgKGUuZy4gaW5jb3JyZWN0IHJlZmVyZW5jZSBjb3VudGluZywgZG91YmxlIGZyZWVzLCBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zKSBhcmUgbWVtb3J5IGxpZmVjeWNsZSAvIHBvaW50ZXIgdmFsaWRpdHkgYnVncyB0aGF0IGFyZSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgdGhlIGByZWZjb3VudF90YCBydW50aW1lIGNoZWNrcy5cXG4tIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IC8gSW5mby1sZWFrIFJpc2s6IFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0dXJlIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gYnJhbmNoaW5nIGRlY2lzaW9ucy5cXG5cXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHJlZmVyZW5jZSBjb3VudGVyIChgZmlsdGVyc19yZWZgKSB0byBgc3RydWN0IHJvdXRlNF9idWNrZXRgIGluIGBuZXQvc2NoZWQvY2xzX3JvdXRlLmNgIHRvIHRyYWNrIGFjdGl2ZSBmaWx0ZXJzIGluIGVhY2ggYnVja2V0IGFuZCBtYW5hZ2UgYnVja2V0IHJlY2xhbWF0aW9uIHZpYSBSQ1UsIHJlcGxhY2luZyBhIGxpbmVhciBzY2FuIG9mIGJ1Y2tldCBzbG90cy5cXG5cXG4tIE1lbW9yeSBJbml0aWFsaXphdGlvbjogVGhlIGJ1Y2tldCBzdHJ1Y3R1cmUgYHN0cnVjdCByb3V0ZTRfYnVja2V0YCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqKClgIGFuZCBgZmlsdGVyc19yZWZgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgd2l0aCBgcmVmY291bnRfc2V0KFxcdTAwMjZiLVxcdTAwM2VmaWx0ZXJzX3JlZiwgMSlgIHVwb24gY3JlYXRpb24uXFxuLSBQb3RlbnRpYWwgQnVnIFR5cGVzOiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhpcyByZWZhY3RvcmluZyAoZS5nLiBpbmNvcnJlY3QgcmVmZXJlbmNlIGNvdW50aW5nLCBkb3VibGUgZnJlZXMsIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMpIGFyZSBtZW1vcnkgbGlmZWN5Y2xlIC8gcG9pbnRlciB2YWxpZGl0eSBidWdzIHRoYXQgYXJlIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCB0aGUgYHJlZmNvdW50X3RgIHJ1bnRpbWUgY2hlY2tzLlxcbi0gVW5pbml0aWFsaXplZCBNZW1vcnkgLyBJbmZvLWxlYWsgUmlzazogVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3R1cmUgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBicmFuY2hpbmcgZGVjaXNpb25zLlxcblxcblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowhkpjg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-29 21:11:22 +0000 UTC FinishedAt: 2026-08-29 21:56:25 +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": "2188569e7e1b0bc3f3b557dc97ab7a02befc11c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_CLS_ROUTE4", "NET_SCHED", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2188569e7e1b0bc3f3b557dc97ab7a02befc11c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_CLS_ROUTE4", "NET_SCHED", "INET" ], "series_id": "70ee2f5e-9451-4479-8557-0fb8ffc2b9fc" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "route4_change", "route4_delete", "route4_set_parms" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI5IDIxOjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9DTFNfUk9VVEU0JiMzNDssCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cm91dGU0X2NoYW5nZSYjMzQ7LAogICAgJiMzNDtyb3V0ZTRfZGVsZXRlJiMzNDssCiAgICAmIzM0O3JvdXRlNF9zZXRfcGFybXMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgcmVmZXJlbmNlIGNvdW50ZXIgKGBmaWx0ZXJzX3JlZmApIHRvIGBzdHJ1Y3Qgcm91dGU0X2J1Y2tldGAgaW4gYG5ldC9zY2hlZC9jbHNfcm91dGUuY2AgdG8gdHJhY2sgYWN0aXZlIGZpbHRlcnMgaW4gZWFjaCBidWNrZXQgYW5kIG1hbmFnZSBidWNrZXQgcmVjbGFtYXRpb24gdmlhIFJDVSwgcmVwbGFjaW5nIGEgbGluZWFyIHNjYW4gb2YgYnVja2V0IHNsb3RzLlxuXG4tIE1lbW9yeSBJbml0aWFsaXphdGlvbjogVGhlIGJ1Y2tldCBzdHJ1Y3R1cmUgYHN0cnVjdCByb3V0ZTRfYnVja2V0YCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqKClgIGFuZCBgZmlsdGVyc19yZWZgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgd2l0aCBgcmVmY291bnRfc2V0KFx1MDAyNmItXHUwMDNlZmlsdGVyc19yZWYsIDEpYCB1cG9uIGNyZWF0aW9uLlxuLSBQb3RlbnRpYWwgQnVnIFR5cGVzOiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhpcyByZWZhY3RvcmluZyAoZS5nLiBpbmNvcnJlY3QgcmVmZXJlbmNlIGNvdW50aW5nLCBkb3VibGUgZnJlZXMsIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMpIGFyZSBtZW1vcnkgbGlmZWN5Y2xlIC8gcG9pbnRlciB2YWxpZGl0eSBidWdzIHRoYXQgYXJlIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCB0aGUgYHJlZmNvdW50X3RgIHJ1bnRpbWUgY2hlY2tzLlxuLSBVbmluaXRpYWxpemVkIE1lbW9yeSAvIEluZm8tbGVhayBSaXNrOiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZSBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIGJyYW5jaGluZyBkZWNpc2lvbnMuXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJvdXRlNCBjbGFzc2lmaWVyIChjbHNfcm91dGUpIGluIHRoZSB0cmFmZmljIGNvbnRyb2wgc3Vic3lzdGVtIGJ5IGludHJvZHVjaW5nIHJlZmNvdW50aW5nIChmaWx0ZXJzX3JlZikgdG8gbWFuYWdlIHRoZSBsaWZldGltZSBhbmQgZGVhbGxvY2F0aW9uIG9mIHJvdXRlNCBidWNrZXRzIGR1cmluZyBmaWx0ZXIgaW5zZXJ0aW9uLCByZXBsYWNlbWVudCwgYW5kIGRlbGV0aW9uLiBUaGlzIGlzIGNvcmUgbmV0d29ya2luZyBjb2RlIHJlYWNoYWJsZSB2aWEgbmV0bGluayB0cmFmZmljIGNvbnRyb2wgaW50ZXJmYWNlcyBhbmQgYWZmZWN0cyBtZW1vcnkgc2FmZXR5IC8gbGlmZXRpbWUgbWFuYWdlbWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAyMTo1NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDVkYjM4N2MzZjkzZjRlNGIxMzg5MjMyODE0YTUyNzNhYTUyMjIyZDRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyOSAyMTo1NToyMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX3JvdXRlLmMgYi9uZXQvc2NoZWQvY2xzX3JvdXRlLmNcbmluZGV4IDBkMTMyNGM5MDU4MzcuLjE3YjBlYmI3NjY2MjYgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvY2xzX3JvdXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9jbHNfcm91dGUuY1xuQEAgLTExLDYgJiM0MzsxMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcmVmY291bnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2RzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3JvdXRlLmhcdTAwM2VcbkBAIC00MSw2ICYjNDM7NDIsNyBAQCBzdHJ1Y3Qgcm91dGU0X2hlYWQge1xuIHN0cnVjdCByb3V0ZTRfYnVja2V0IHtcbiBcdC8qIDE2IEZST00gYnVja2V0cyAmIzQzOyAxNiBJSUYgYnVja2V0cyAmIzQzOyAxIHdpbGRjYXJkIGJ1Y2tldCAqL1xuIFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgX19yY3VcdCpodFsxNiAmIzQzOyAxNiAmIzQzOyAxXTtcbiYjNDM7XHRyZWZjb3VudF90XHRcdFx0ZmlsdGVyc19yZWY7XG4gXHRzdHJ1Y3QgcmN1X2hlYWRcdFx0XHRyY3U7XG4gfTtcbiBcbkBAIC0zMzYsNyAmIzQzOzMzOCw3IEBAIHN0YXRpYyBpbnQgcm91dGU0X2RlbGV0ZShzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdm9pZCAqYXJnLCBib29sICpsYXN0LFxuIFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgKm5mO1xuIFx0c3RydWN0IHJvdXRlNF9idWNrZXQgKmI7XG4gXHR1bnNpZ25lZCBpbnQgaCA9IDA7XG4tXHRpbnQgaSwgaDE7XG4mIzQzO1x0aW50IGgxO1xuIFxuIFx0aWYgKCFoZWFkIHx8ICFmKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0zNjIsMjMgJiM0MzszNjQsMTQgQEAgc3RhdGljIGludCByb3V0ZTRfZGVsZXRlKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB2b2lkICphcmcsIGJvb2wgKmxhc3QsXG4gXHRcdFx0dGNmX2V4dHNfZ2V0X25ldChcdTAwMjZmLVx1MDAzZWV4dHMpO1xuIFx0XHRcdHRjZl9xdWV1ZV93b3JrKFx1MDAyNmYtXHUwMDNlcndvcmssIHJvdXRlNF9kZWxldGVfZmlsdGVyX3dvcmspO1xuIFxuLVx0XHRcdC8qIFN0cmlwIFJUTkwgcHJvdGVjdGVkIHRyZWUgKi9cbi1cdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYz0gMzI7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdFx0XHRzdHJ1Y3Qgcm91dGU0X2ZpbHRlciAqcnQ7XG4tXG4tXHRcdFx0XHRydCA9IHJ0bmxfZGVyZWZlcmVuY2UoYi1cdTAwM2VodFtpXSk7XG4tXHRcdFx0XHRpZiAocnQpXG4tXHRcdFx0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0XHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmItXHUwMDNlZmlsdGVyc19yZWYpKSB7XG4mIzQzO1x0XHRcdFx0UkNVX0lOSVRfUE9JTlRFUihoZWFkLVx1MDAzZXRhYmxlW3RvX2hhc2goaCldLCBOVUxMKTtcbiYjNDM7XHRcdFx0XHRrZnJlZV9yY3UoYiwgcmN1KTtcbiBcdFx0XHR9XG4tXG4tXHRcdFx0LyogT0ssIHNlc3Npb24gaGFzIG5vIGZsb3dzICovXG4tXHRcdFx0UkNVX0lOSVRfUE9JTlRFUihoZWFkLVx1MDAzZXRhYmxlW3RvX2hhc2goaCldLCBOVUxMKTtcbi1cdFx0XHRrZnJlZV9yY3UoYiwgcmN1KTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFx0fVxuIFxuLW91dDpcbiBcdCpsYXN0ID0gdHJ1ZTtcbiBcdGZvciAoaDEgPSAwOyBoMSBcdTAwM2M9IDI1NjsgaDEmIzQzOyYjNDM7KSB7XG4gXHRcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoaGVhZC1cdTAwM2V0YWJsZVtoMV0pKSB7XG5AQCAtNDU5LDYgJiM0Mzs0NTIsNyBAQCBzdGF0aWMgaW50IHJvdXRlNF9zZXRfcGFybXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCxcbiBcdFx0aWYgKGIgPT0gTlVMTClcbiBcdFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4gXG4mIzQzO1x0XHRyZWZjb3VudF9zZXQoXHUwMDI2Yi1cdTAwM2VmaWx0ZXJzX3JlZiwgMSk7XG4gXHRcdHJjdV9hc3NpZ25fcG9pbnRlcihoZWFkLVx1MDAzZXRhYmxlW2gxXSwgYik7XG4gXHR9IGVsc2Uge1xuIFx0XHR1bnNpZ25lZCBpbnQgaDIgPSBmcm9tX2hhc2gobmhhbmRsZSBcdTAwM2VcdTAwM2UgMTYpO1xuQEAgLTQ2OCw2ICYjNDM7NDYyLDggQEAgc3RhdGljIGludCByb3V0ZTRfc2V0X3Bhcm1zKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsXG4gXHRcdCAgICAgZnAgPSBydG5sX2RlcmVmZXJlbmNlKGZwLVx1MDAzZW5leHQpKVxuIFx0XHRcdGlmIChmcC1cdTAwM2VoYW5kbGUgPT0gZi1cdTAwM2VoYW5kbGUpXG4gXHRcdFx0XHRyZXR1cm4gLUVFWElTVDtcbiYjNDM7XG4mIzQzO1x0XHRyZWZjb3VudF9pbmMoXHUwMDI2Yi1cdTAwM2VmaWx0ZXJzX3JlZik7XG4gXHR9XG4gXG4gXHRpZiAodGJbVENBX1JPVVRFNF9UT10pXG5AQCAtNTAwLDcgJiM0Mzs0OTYsNyBAQCBzdGF0aWMgaW50IHJvdXRlNF9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuIFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgKmZvbGQsICpmMSwgKnBmcCwgKmYgPSBOVUxMO1xuIFx0c3RydWN0IHJvdXRlNF9idWNrZXQgKmI7XG4gXHRzdHJ1Y3QgbmxhdHRyICp0YltUQ0FfUk9VVEU0X01BWCAmIzQzOyAxXTtcbi1cdHVuc2lnbmVkIGludCBoLCB0aDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaDtcbiBcdGludCBlcnI7XG4gXHRib29sIG5ldyA9IHRydWU7XG4gXG5AQCAtNTYwLDE3ICYjNDM7NTU2LDIwIEBAIHN0YXRpYyBpbnQgcm91dGU0X2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4gXHRyY3VfYXNzaWduX3BvaW50ZXIoKmZwLCBmKTtcbiBcbiBcdGlmIChmb2xkKSB7XG4tXHRcdHRoID0gdG9faGFzaChmb2xkLVx1MDAzZWhhbmRsZSk7XG4mIzQzO1x0XHRiID0gZm9sZC1cdTAwM2Via3Q7XG4gXHRcdGggPSBmcm9tX2hhc2goZm9sZC1cdTAwM2VoYW5kbGUgXHUwMDNlXHUwMDNlIDE2KTtcbi1cdFx0YiA9IHJ0bmxfZGVyZWZlcmVuY2UoaGVhZC1cdTAwM2V0YWJsZVt0aF0pO1xuLVx0XHRpZiAoYikge1xuLVx0XHRcdGZwID0gXHUwMDI2Yi1cdTAwM2VodFtoXTtcbi1cdFx0XHRmb3IgKHBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKTsgcGZwO1xuLVx0XHRcdCAgICAgZnAgPSBcdTAwMjZwZnAtXHUwMDNlbmV4dCwgcGZwID0gcnRubF9kZXJlZmVyZW5jZSgqZnApKSB7XG4tXHRcdFx0XHRpZiAocGZwID09IGZvbGQpIHtcbi1cdFx0XHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKCpmcCwgZm9sZC1cdTAwM2VuZXh0KTtcbi1cdFx0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRmcCA9IFx1MDAyNmItXHUwMDNlaHRbaF07XG4mIzQzO1x0XHRmb3IgKHBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKTsgcGZwO1xuJiM0MztcdFx0ICAgICBmcCA9IFx1MDAyNnBmcC1cdTAwM2VuZXh0LCBwZnAgPSBydG5sX2RlcmVmZXJlbmNlKCpmcCkpIHtcbiYjNDM7XHRcdFx0aWYgKHBmcCA9PSBmb2xkKSB7XG4mIzQzO1x0XHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKCpmcCwgZm9sZC1cdTAwM2VuZXh0KTtcbiYjNDM7XHRcdFx0XHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmItXHUwMDNlZmlsdGVyc19yZWYpKSB7XG4mIzQzO1x0XHRcdFx0XHR1bnNpZ25lZCBpbnQgdGggPSB0b19oYXNoKGZvbGQtXHUwMDNlaGFuZGxlKTtcbiYjNDM7XG4mIzQzO1x0XHRcdFx0XHRSQ1VfSU5JVF9QT0lOVEVSKGhlYWQtXHUwMDNldGFibGVbdGhdLCBOVUxMKTtcbiYjNDM7XHRcdFx0XHRcdGtmcmVlX3JjdShiLCByY3UpO1xuIFx0XHRcdFx0fVxuJiM0MztcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcdFx0fVxuIFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDIxOjU1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9DTFNfUk9VVEU0JiMzNDssCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cm91dGU0X2NoYW5nZSYjMzQ7LAogICAgJiMzNDtyb3V0ZTRfZGVsZXRlJiMzNDssCiAgICAmIzM0O3JvdXRlNF9zZXRfcGFybXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJvdXRlNCBjbGFzc2lmaWVyIChjbHNfcm91dGUpIGluIHRoZSB0cmFmZmljIGNvbnRyb2wgc3Vic3lzdGVtIGJ5IGludHJvZHVjaW5nIHJlZmNvdW50aW5nIChmaWx0ZXJzX3JlZikgdG8gbWFuYWdlIHRoZSBsaWZldGltZSBhbmQgZGVhbGxvY2F0aW9uIG9mIHJvdXRlNCBidWNrZXRzIGR1cmluZyBmaWx0ZXIgaW5zZXJ0aW9uLCByZXBsYWNlbWVudCwgYW5kIGRlbGV0aW9uLiBUaGlzIGlzIGNvcmUgbmV0d29ya2luZyBjb2RlIHJlYWNoYWJsZSB2aWEgbmV0bGluayB0cmFmZmljIGNvbnRyb2wgaW50ZXJmYWNlcyBhbmQgYWZmZWN0cyBtZW1vcnkgc2FmZXR5IC8gbGlmZXRpbWUgbWFuYWdlbWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDVkYjM4N2MzZjkzZjRlNGIxMzg5MjMyODE0YTUyNzNhYTUyMjIyZDQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAyOSAyMTo1NToyMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfcm91dGUuYyBiL25ldC9zY2hlZC9jbHNfcm91dGUuYwppbmRleCAwZDEzMjRjOTA1ODM3Li4xN2IwZWJiNzY2NjI2IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvY2xzX3JvdXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jCkBAIC0xMSw2ICYjNDM7MTEsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3N0cmluZy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2Vycm5vLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3JlZmNvdW50LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2tidWZmLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2RzdC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9yb3V0ZS5oJmd0OwpAQCAtNDEsNiAmIzQzOzQyLDcgQEAgc3RydWN0IHJvdXRlNF9oZWFkIHsKIHN0cnVjdCByb3V0ZTRfYnVja2V0IHsKIAkvKiAxNiBGUk9NIGJ1Y2tldHMgJiM0MzsgMTYgSUlGIGJ1Y2tldHMgJiM0MzsgMSB3aWxkY2FyZCBidWNrZXQgKi8KIAlzdHJ1Y3Qgcm91dGU0X2ZpbHRlciBfX3JjdQkqaHRbMTYgJiM0MzsgMTYgJiM0MzsgMV07CiYjNDM7CXJlZmNvdW50X3QJCQlmaWx0ZXJzX3JlZjsKIAlzdHJ1Y3QgcmN1X2hlYWQJCQlyY3U7CiB9OwogCkBAIC0zMzYsNyAmIzQzOzMzOCw3IEBAIHN0YXRpYyBpbnQgcm91dGU0X2RlbGV0ZShzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdm9pZCAqYXJnLCBib29sICpsYXN0LAogCXN0cnVjdCByb3V0ZTRfZmlsdGVyICpuZjsKIAlzdHJ1Y3Qgcm91dGU0X2J1Y2tldCAqYjsKIAl1bnNpZ25lZCBpbnQgaCA9IDA7Ci0JaW50IGksIGgxOwomIzQzOwlpbnQgaDE7CiAKIAlpZiAoIWhlYWQgfHwgIWYpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzYyLDIzICYjNDM7MzY0LDE0IEBAIHN0YXRpYyBpbnQgcm91dGU0X2RlbGV0ZShzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdm9pZCAqYXJnLCBib29sICpsYXN0LAogCQkJdGNmX2V4dHNfZ2V0X25ldCgmYW1wO2YtJmd0O2V4dHMpOwogCQkJdGNmX3F1ZXVlX3dvcmsoJmFtcDtmLSZndDtyd29yaywgcm91dGU0X2RlbGV0ZV9maWx0ZXJfd29yayk7CiAKLQkJCS8qIFN0cmlwIFJUTkwgcHJvdGVjdGVkIHRyZWUgKi8KLQkJCWZvciAoaSA9IDA7IGkgJmx0Oz0gMzI7IGkmIzQzOyYjNDM7KSB7Ci0JCQkJc3RydWN0IHJvdXRlNF9maWx0ZXIgKnJ0OwotCi0JCQkJcnQgPSBydG5sX2RlcmVmZXJlbmNlKGItJmd0O2h0W2ldKTsKLQkJCQlpZiAocnQpCi0JCQkJCWdvdG8gb3V0OwomIzQzOwkJCWlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoJmFtcDtiLSZndDtmaWx0ZXJzX3JlZikpIHsKJiM0MzsJCQkJUkNVX0lOSVRfUE9JTlRFUihoZWFkLSZndDt0YWJsZVt0b19oYXNoKGgpXSwgTlVMTCk7CiYjNDM7CQkJCWtmcmVlX3JjdShiLCByY3UpOwogCQkJfQotCi0JCQkvKiBPSywgc2Vzc2lvbiBoYXMgbm8gZmxvd3MgKi8KLQkJCVJDVV9JTklUX1BPSU5URVIoaGVhZC0mZ3Q7dGFibGVbdG9faGFzaChoKV0sIE5VTEwpOwotCQkJa2ZyZWVfcmN1KGIsIHJjdSk7CiAJCQlicmVhazsKIAkJfQogCX0KIAotb3V0OgogCSpsYXN0ID0gdHJ1ZTsKIAlmb3IgKGgxID0gMDsgaDEgJmx0Oz0gMjU2OyBoMSYjNDM7JiM0MzspIHsKIAkJaWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihoZWFkLSZndDt0YWJsZVtoMV0pKSB7CkBAIC00NTksNiAmIzQzOzQ1Miw3IEBAIHN0YXRpYyBpbnQgcm91dGU0X3NldF9wYXJtcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLAogCQlpZiAoYiA9PSBOVUxMKQogCQkJcmV0dXJuIC1FTk9CVUZTOwogCiYjNDM7CQlyZWZjb3VudF9zZXQoJmFtcDtiLSZndDtmaWx0ZXJzX3JlZiwgMSk7CiAJCXJjdV9hc3NpZ25fcG9pbnRlcihoZWFkLSZndDt0YWJsZVtoMV0sIGIpOwogCX0gZWxzZSB7CiAJCXVuc2lnbmVkIGludCBoMiA9IGZyb21faGFzaChuaGFuZGxlICZndDsmZ3Q7IDE2KTsKQEAgLTQ2OCw2ICYjNDM7NDYyLDggQEAgc3RhdGljIGludCByb3V0ZTRfc2V0X3Bhcm1zKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsCiAJCSAgICAgZnAgPSBydG5sX2RlcmVmZXJlbmNlKGZwLSZndDtuZXh0KSkKIAkJCWlmIChmcC0mZ3Q7aGFuZGxlID09IGYtJmd0O2hhbmRsZSkKIAkJCQlyZXR1cm4gLUVFWElTVDsKJiM0MzsKJiM0MzsJCXJlZmNvdW50X2luYygmYW1wO2ItJmd0O2ZpbHRlcnNfcmVmKTsKIAl9CiAKIAlpZiAodGJbVENBX1JPVVRFNF9UT10pCkBAIC01MDAsNyAmIzQzOzQ5Niw3IEBAIHN0YXRpYyBpbnQgcm91dGU0X2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsCiAJc3RydWN0IHJvdXRlNF9maWx0ZXIgKmZvbGQsICpmMSwgKnBmcCwgKmYgPSBOVUxMOwogCXN0cnVjdCByb3V0ZTRfYnVja2V0ICpiOwogCXN0cnVjdCBubGF0dHIgKnRiW1RDQV9ST1VURTRfTUFYICYjNDM7IDFdOwotCXVuc2lnbmVkIGludCBoLCB0aDsKJiM0MzsJdW5zaWduZWQgaW50IGg7CiAJaW50IGVycjsKIAlib29sIG5ldyA9IHRydWU7CiAKQEAgLTU2MCwxNyAmIzQzOzU1NiwyMCBAQCBzdGF0aWMgaW50IHJvdXRlNF9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLAogCXJjdV9hc3NpZ25fcG9pbnRlcigqZnAsIGYpOwogCiAJaWYgKGZvbGQpIHsKLQkJdGggPSB0b19oYXNoKGZvbGQtJmd0O2hhbmRsZSk7CiYjNDM7CQliID0gZm9sZC0mZ3Q7Ymt0OwogCQloID0gZnJvbV9oYXNoKGZvbGQtJmd0O2hhbmRsZSAmZ3Q7Jmd0OyAxNik7Ci0JCWIgPSBydG5sX2RlcmVmZXJlbmNlKGhlYWQtJmd0O3RhYmxlW3RoXSk7Ci0JCWlmIChiKSB7Ci0JCQlmcCA9ICZhbXA7Yi0mZ3Q7aHRbaF07Ci0JCQlmb3IgKHBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKTsgcGZwOwotCQkJICAgICBmcCA9ICZhbXA7cGZwLSZndDtuZXh0LCBwZnAgPSBydG5sX2RlcmVmZXJlbmNlKCpmcCkpIHsKLQkJCQlpZiAocGZwID09IGZvbGQpIHsKLQkJCQkJcmN1X2Fzc2lnbl9wb2ludGVyKCpmcCwgZm9sZC0mZ3Q7bmV4dCk7Ci0JCQkJCWJyZWFrOwomIzQzOwkJZnAgPSAmYW1wO2ItJmd0O2h0W2hdOwomIzQzOwkJZm9yIChwZnAgPSBydG5sX2RlcmVmZXJlbmNlKCpmcCk7IHBmcDsKJiM0MzsJCSAgICAgZnAgPSAmYW1wO3BmcC0mZ3Q7bmV4dCwgcGZwID0gcnRubF9kZXJlZmVyZW5jZSgqZnApKSB7CiYjNDM7CQkJaWYgKHBmcCA9PSBmb2xkKSB7CiYjNDM7CQkJCXJjdV9hc3NpZ25fcG9pbnRlcigqZnAsIGZvbGQtJmd0O25leHQpOwomIzQzOwkJCQlpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KCZhbXA7Yi0mZ3Q7ZmlsdGVyc19yZWYpKSB7CiYjNDM7CQkJCQl1bnNpZ25lZCBpbnQgdGggPSB0b19oYXNoKGZvbGQtJmd0O2hhbmRsZSk7CiYjNDM7CiYjNDM7CQkJCQlSQ1VfSU5JVF9QT0lOVEVSKGhlYWQtJmd0O3RhYmxlW3RoXSwgTlVMTCk7CiYjNDM7CQkJCQlrZnJlZV9yY3UoYiwgcmN1KTsKIAkJCQl9CiYjNDM7CQkJCWJyZWFrOwogCQkJfQogCQl9CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAyMTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzM0CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBjbHNfcm91dGUgTW9kdWxlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG5ldC9zY2hlZC9jbHNfcm91dGUuY2AuIE15IGZpcnN0IG1vdmUgaXMgYWx3YXlzIHRvIGdldCBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29udGV4dC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgYGNsc19yb3V0ZS5jYCBmaWxlIGl0c2VsZi4gSSYjMzk7bGwgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IGl0IGRvZXMsIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkuIEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhlIGNvbW1lbnRzIGFuZCB0aGUgbWFpbiBmdW5jdGlvbnMuCgpUaGVuLCBJJiMzOTtsbCBhYnNvbHV0ZWx5IG5lZWQgdG8gY2hlY2sgaXRzIEtjb25maWcgY29uZmlndXJhdGlvbi4gVW5kZXJzdGFuZGluZyBob3cgaXQmIzM5O3MgZW5hYmxlZCBhbmQgZGlzYWJsZWQsIGFuZCBhbnkgZGVwZW5kZW5jaWVzLCBpcyBjcnVjaWFsLiBJcyBpdCBhIG1vZHVsZT8gQnVpbHQtaW4/IFdoYXQgb3RoZXIga2VybmVsIGZlYXR1cmVzIGRvZXMgaXQgcmVseSBvbj8gSSYjMzk7bGwgcHJvYmFibHkgdXNlIGBncmVwcGVyYCAoaWYgYXZhaWxhYmxlIGluIG15IGVudmlyb25tZW50KSB0byBxdWlja2x5IGZpbmQgdGhlIHJlbGV2YW50IEtjb25maWcgZW50cnksIGJ1dCBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gcmVhZCBpdCBjYXJlZnVsbHkgdG8gc3BvdCBhbnkgZmxhZ3Mgb3IgY29uZGl0aW9uYWwgYnVpbGQgZGlyZWN0aXZlcy4gSWYgYGdyZXBwZXJgIGlzIGEgbm8tZ28sIGEgZ29vZCBvbGQtZmFzaGlvbmVkIGByZWFkLWZpbGVgIHdpbGwgZG8gdGhlIHRyaWNrLCBubyBwcm9ibGVtLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IEkga25vdyBob3cgdGhpcyBtb2R1bGUgZml0cyBpbnRvIHRoZSBicm9hZGVyIGtlcm5lbCBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDIxOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Nsc19yb3V0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZz00OTQ9Y29uZmlnIE5FVF9DTFNfUk9VVEU0XG4tLVxubmV0L3NjaGVkL0tjb25maWctNTAzLVx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG5uZXQvc2NoZWQvS2NvbmZpZzo1MDQ6XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjbHNfcm91dGUuXG5uZXQvc2NoZWQvS2NvbmZpZy01MDUtXG4tLVxubmV0L3NjaGVkL01ha2VmaWxlPTY4PW9iai0kKENPTkZJR19ORVRfQ0xTX1UzMilcdCYjNDM7PSBjbHNfdTMyLm9cbm5ldC9zY2hlZC9NYWtlZmlsZTo2OTpvYmotJChDT05GSUdfTkVUX0NMU19ST1VURTQpXHQmIzQzOz0gY2xzX3JvdXRlLm9cbm5ldC9zY2hlZC9NYWtlZmlsZS03MC1vYmotJChDT05GSUdfTkVUX0NMU19GVylcdCYjNDM7PSBjbHNfZncub1xuLS1cbm5ldC9zY2hlZC9jbHNfcm91dGUuYy0yLS8qXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmM6MzogKiBuZXQvc2NoZWQvY2xzX3JvdXRlLmNcdFJPVVRFNCBjbGFzc2lmaWVyLlxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jLTQtICpcbi0tXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmM9NjY5PXN0YXRpYyB2b2lkIHJvdXRlNF9iaW5kX2NsYXNzKHZvaWQgKmZoLCB1MzIgY2xhc3NpZCwgdW5zaWduZWQgbG9uZyBjbCwgdm9pZCAqcSxcbi0tXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmMtNjc2LVxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jOjY3NzpzdGF0aWMgc3RydWN0IHRjZl9wcm90b19vcHMgY2xzX3JvdXRlNF9vcHMgX19yZWFkX21vc3RseSA9IHtcbm5ldC9zY2hlZC9jbHNfcm91dGUuYy02NzgtXHQua2luZFx0XHQ9XHRcJiMzNDtyb3V0ZVwmIzM0Oyxcbi0tXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmM9NjkyPXN0YXRpYyBpbnQgX19pbml0IGluaXRfcm91dGU0KHZvaWQpXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmMtNjkzLXtcbm5ldC9zY2hlZC9jbHNfcm91dGUuYzo2OTQ6XHRyZXR1cm4gcmVnaXN0ZXJfdGNmX3Byb3RvX29wcyhcdTAwMjZjbHNfcm91dGU0X29wcyk7XG5uZXQvc2NoZWQvY2xzX3JvdXRlLmMtNjk1LX1cbi0tXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmM9Njk3PXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JvdXRlNCh2b2lkKVxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jLTY5OC17XG5uZXQvc2NoZWQvY2xzX3JvdXRlLmM6Njk5Olx0dW5yZWdpc3Rlcl90Y2ZfcHJvdG9fb3BzKFx1MDAyNmNsc19yb3V0ZTRfb3BzKTtcbm5ldC9zY2hlZC9jbHNfcm91dGUuYy03MDAtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDIxOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxOTcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIEtlcm5lbCYjMzk7cyBOZXR3b3JrIFNjaGVkdWxlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHNvbWV0aGluZyBuZXR3b3JrLXJlbGF0ZWQsIGFuZCBpdCYjMzk7cyBwb2ludGluZyBtZSB0b3dhcmRzIHRoZSBrZXJuZWwmIzM5O3Mgc2NoZWR1bGVyIGNvbmZpZ3VyYXRpb24uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIG91dCB0aGUgYG5ldC9zY2hlZC9LY29uZmlnYCBmaWxlLiBIbW0sIGxldCBtZSBzZWUuLi4gSSYjMzk7bSB0aGlua2luZyBhcm91bmQgbGluZSA0OTQgbWlnaHQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGF0IGxpa2VseSBpbmRpY2F0ZXMgdGhlIHNlY3Rpb24gb3IgYSBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIEkmIzM5O20gaW50ZXJlc3RlZCBpbiB3aXRoaW4gdGhhdCBmaWxlLiBUaW1lIHRvIG9wZW4gdGhhdCBmaWxlIHVwIGFuZCBoYXZlIGEgbG9vazsgaG9wZWZ1bGx5IHRoYXQgbGluZSBudW1iZXIgd2lsbCBnaXZlIG1lIGEgZ29vZCBqdW1waW5nLW9mZiBwb2ludC4gSXQgd2lsbCBsaWtlbHkgcmV2ZWFsIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDIxOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0ODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ4NTpcdFx0dHJpc3RhdGUgXCYjMzQ7RWxlbWVudGFyeSBjbGFzc2lmaWNhdGlvbiAoQkFTSUMpXCYjMzQ7XG4gNDg2Olx0XHRzZWxlY3QgTkVUX0NMU1xuIDQ4NzpcdFx0aGVscFxuIDQ4ODpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gY2xhc3NpZnkgcGFja2V0cyB1c2luZ1xuIDQ4OTpcdFx0ICBvbmx5IGV4dGVuZGVkIG1hdGNoZXMgYW5kIGFjdGlvbnMuXG4gNDkwOlx0XG4gNDkxOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiA0OTI6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNsc19iYXNpYy5cbiA0OTM6XHRcbiA0OTQ6XHRjb25maWcgTkVUX0NMU19ST1VURTRcbiA0OTU6XHRcdHRyaXN0YXRlIFwmIzM0O1JvdXRpbmcgZGVjaXNpb24gKFJPVVRFKVwmIzM0O1xuIDQ5NjpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gNDk3Olx0XHRzZWxlY3QgSVBfUk9VVEVfQ0xBU1NJRFxuIDQ5ODpcdFx0c2VsZWN0IE5FVF9DTFNcbiA0OTk6XHRcdGhlbHBcbiA1MDA6XHRcdCAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGJlIGFibGUgdG8gY2xhc3NpZnkgcGFja2V0c1xuIDUwMTpcdFx0ICBhY2NvcmRpbmcgdG8gdGhlIHJvdXRlIHRhYmxlIGVudHJ5IHRoZXkgbWF0Y2hlZC5cbiA1MDI6XHRcbiA1MDM6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDUwNDpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2xzX3JvdXRlLlxuIDUwNTpcdFxuIDUwNjpcdGNvbmZpZyBORVRfQ0xTX0ZXXG4gNTA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgbWFyayAoRlcpXCYjMzQ7XG4gNTA4Olx0XHRzZWxlY3QgTkVUX0NMU1xuIDUwOTpcdFx0aGVscFxuIDUxMDpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmUgYWJsZSB0byBjbGFzc2lmeSBwYWNrZXRzXG4gNTExOlx0XHQgIGFjY29yZGluZyB0byBuZXRmaWx0ZXIvZmlyZXdhbGwgbWFya3MuXG4gNTEyOlx0XG4gNTEzOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiA1MTQ6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNsc19mdy5cbiA1MTU6XHRcbiA1MTY6XHRjb25maWcgTkVUX0NMU19VMzJcbiA1MTc6XHRcdHRyaXN0YXRlIFwmIzM0O1VuaXZlcnNhbCAzMmJpdCBjb21wYXJpc29ucyB3LyBoYXNoaW5nIChVMzIpXCYjMzQ7XG4gNTE4Olx0XHRzZWxlY3QgTkVUX0NMU1xuIDUxOTpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDIxOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4OTMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb25maWd1cmF0aW9uOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIE5ldHdvcmsgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYE5FVF9DTFNfUk9VVEU0YCBhbmQgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuIEZpcnN0LCBJIHNlZSB0aGF0IGl0IHJlbGllcyBvbiBgSU5FVGAuIFRoYXQmIzM5O3Mgbm90IHN1cnByaXNpbmc7IElQdjQgcm91dGluZyBpcyBjb3JlIHRvIHRoZSBpbnRlcm5ldHdvcmtpbmcgc3RhY2suIEkgYWxzbyBub3RlIHRoYXQgaXQmIzM5O3MgcGFydCBvZiB0aGUgYE5FVF9TQ0hFRGAgYW5kIGBORVRfQ0xTYCBzdWJzeXN0ZW1zLiBUaGF0IHRlbGxzIG1lIHRoaXMgbGlrZWx5IHJlbGF0ZXMgdG8gdHJhZmZpYyBjbGFzc2lmaWNhdGlvbiBhbmQgcXVldWluZyB3aXRoaW4gdGhlIG5ldHdvcmsgc2NoZWR1bGVyLiBUbyBiZSBzdXJlLCBJIHNob3VsZCBjaGVjayB0aGUgYG5ldC9zY2hlZC9LY29uZmlnYCBmaWxlLCBJIHNob3VsZCBsb29rIGF0IHRoZSB0b3AtbGV2ZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpdGhpbiB0aGF0IGRpcmVjdG9yeS4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBhbGwgdGhlIHBhcmVudCBvcHRpb25zIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDIxOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBUcmFmZmljIGNvbnRyb2wgY29uZmlndXJhdGlvbi5cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0bWVudWNvbmZpZyBORVRfU0NIRURcbiAgIDc6XHRcdGJvb2wgXCYjMzQ7UW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nXCYjMzQ7XG4gICA4Olx0XHRzZWxlY3QgTkVUX1NDSF9GSUZPXG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIFdoZW4gdGhlIGtlcm5lbCBoYXMgc2V2ZXJhbCBwYWNrZXRzIHRvIHNlbmQgb3V0IG92ZXIgYSBuZXR3b3JrXG4gIDExOlx0XHQgIGRldmljZSwgaXQgaGFzIHRvIGRlY2lkZSB3aGljaCBvbmVzIHRvIHNlbmQgZmlyc3QsIHdoaWNoIG9uZXMgdG9cbiAgMTI6XHRcdCAgZGVsYXksIGFuZCB3aGljaCBvbmVzIHRvIGRyb3AuIFRoaXMgaXMgdGhlIGpvYiBvZiB0aGUgcXVldWVpbmdcbiAgMTM6XHRcdCAgZGlzY2lwbGluZXMsIHNldmVyYWwgZGlmZmVyZW50IGFsZ29yaXRobXMgZm9yIGhvdyB0byBkbyB0aGlzXG4gIDE0Olx0XHQgIFwmIzM0O2ZhaXJseVwmIzM0OyBoYXZlIGJlZW4gcHJvcG9zZWQuXG4gIDE1Olx0XG4gIDE2Olx0XHQgIElmIHlvdSBzYXkgTiBoZXJlLCB5b3Ugd2lsbCBnZXQgdGhlIHN0YW5kYXJkIHBhY2tldCBzY2hlZHVsZXIsIHdoaWNoXG4gIDE3Olx0XHQgIGlzIGEgRklGTyAoZmlyc3QgY29tZSwgZmlyc3Qgc2VydmVkKS4gSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGJlXG4gIDE4Olx0XHQgIGFibGUgdG8gY2hvb3NlIGZyb20gYW1vbmcgc2V2ZXJhbCBhbHRlcm5hdGl2ZSBhbGdvcml0aG1zIHdoaWNoIGNhblxuICAxOTpcdFx0ICB0aGVuIGJlIGF0dGFjaGVkIHRvIGRpZmZlcmVudCBuZXR3b3JrIGRldmljZXMuIFRoaXMgaXMgdXNlZnVsIGZvclxuICAyMDpcdFx0ICBleGFtcGxlIGlmIHNvbWUgb2YgeW91ciBuZXR3b3JrIGRldmljZXMgYXJlIHJlYWwgdGltZSBkZXZpY2VzIHRoYXRcbiAgMjE6XHRcdCAgbmVlZCBhIGNlcnRhaW4gbWluaW11bSBkYXRhIGZsb3cgcmF0ZSwgb3IgaWYgeW91IG5lZWQgdG8gbGltaXQgdGhlXG4gIDIyOlx0XHQgIG1heGltdW0gZGF0YSBmbG93IHJhdGUgZm9yIHRyYWZmaWMgd2hpY2ggbWF0Y2hlcyBzcGVjaWZpZWQgY3JpdGVyaWEuXG4gIDIzOlx0XHQgIFRoaXMgY29kZSBpcyBjb25zaWRlcmVkIHRvIGJlIGV4cGVyaW1lbnRhbC5cbiAgMjQ6XHRcbiAgMjU6XHRcdCAgVG8gYWRtaW5pc3RlciB0aGVzZSBzY2hlZHVsZXJzLCB5b3UmIzM5O2xsIG5lZWQgdGhlIHVzZXItbGV2ZWwgdXRpbGl0aWVzXG4gIDI2Olx0XHQgIGZyb20gdGhlIHBhY2thZ2UgaXByb3V0ZTImIzQzO3RjIGF0XG4gIDI3Olx0XHQgIFx1MDAzY2h0dHBzOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L3V0aWxzL25ldC9pcHJvdXRlMi9cdTAwM2UuICBUaGF0IHBhY2thZ2VcbiAgMjg6XHRcdCAgYWxzbyBjb250YWlucyBzb21lIGRvY3VtZW50YXRpb247IGZvciBtb3JlLCBjaGVjayBvdXRcbiAgMjk6XHRcdCAgXHUwMDNjaHR0cDovL3d3dy5saW51eGZvdW5kYXRpb24ub3JnL2NvbGxhYm9yYXRlL3dvcmtncm91cHMvbmV0d29ya2luZy9pcHJvdXRlMlx1MDAzZS5cbiAgMzA6XHRcbiAgMzE6XHRcdCAgVGhpcyBRdWFsaXR5IG9mIFNlcnZpY2UgKFFvUykgc3VwcG9ydCB3aWxsIGVuYWJsZSB5b3UgdG8gdXNlXG4gIDMyOlx0XHQgIERpZmZlcmVudGlhdGVkIFNlcnZpY2VzIChkaWZmc2VydikgYW5kIFJlc291cmNlIFJlc2VydmF0aW9uIFByb3RvY29sXG4gIDMzOlx0XHQgIChSU1ZQKSBvbiB5b3VyIExpbnV4IHJvdXRlciBpZiB5b3UgYWxzbyBzYXkgWSB0byB0aGUgY29ycmVzcG9uZGluZ1xuICAzNDpcdFx0ICBjbGFzc2lmaWVycyBiZWxvdy4gIERvY3VtZW50YXRpb24gYW5kIHNvZnR3YXJlIGlzIGF0XG4gIDM1Olx0XHQgIFx1MDAzY2h0dHA6Ly9kaWZmc2Vydi5zb3VyY2Vmb3JnZS5uZXQvXHUwMDNlLlxuICAzNjpcdFxuICAzNzpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSBhbmQgdG8gXCYjMzQ7L3Byb2MgZmlsZSBzeXN0ZW1cJiMzNDsgYmVsb3csIHlvdSB3aWxsIGJlIGFibGVcbiAgMzg6XHRcdCAgdG8gcmVhZCBzdGF0dXMgaW5mb3JtYXRpb24gYWJvdXQgcGFja2V0IHNjaGVkdWxlcnMgZnJvbSB0aGUgZmlsZVxuICAzOTpcdFx0ICAvcHJvYy9uZXQvcHNjaGVkLlxuICA0MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDIxOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4MDQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGV4dCwgcmVuZGVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgYW4gZXhwZXJ0LWxldmVsIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZpZWxkOgoKKipEaXZpbmcgaW50byB0aGUgUm91dGUgQ2xhc3NpZmllcioqCgpPa2F5LCB0aW1lIHRvIGdldCBhIGdvb2QgbG9vayBhdCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGhpbiB0aGUgcm91dGUgY2xhc3NpZmllciBtb2R1bGUuIE15IGZpcnN0IHN0ZXAgaXMgYWx3YXlzIHRvIGdvIHJpZ2h0IHRvIHRoZSBzb3VyY2UgY29kZSwgc28gSSYjMzk7bSBwdWxsaW5nIHVwIGBjbHNfcm91dGUuY2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgZnVuY3Rpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMgZGVmaW5lZCBpbiBgbmV0L3NjaGVkL2Nsc19yb3V0ZS5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiB0aGUgcm91dGUtYmFzZWQgY2xhc3NpZmllciByZXNpZGVzLCBzbyB1bmRlcnN0YW5kaW5nIGl0cyBpbnRlcm5hbHMgaXMga2V5IHRvIGNvbXByZWhlbmRpbmcgaXRzIGJlaGF2aW9yLiBJIG5lZWQgYSBjbGVhciBtZW50YWwgbW9kZWwgb2YgaG93IGl0IHdvcmtzIHVuZGVyIHRoZSBob29kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAyMTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfcm91dGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjY1Olx0XHRubGFfbmVzdF9jYW5jZWwoc2tiLCBuZXN0KTtcbiA2NjY6XHRcdHJldHVybiAtMTtcbiA2Njc6XHR9XG4gNjY4Olx0XG4gNjY5Olx0c3RhdGljIHZvaWQgcm91dGU0X2JpbmRfY2xhc3Modm9pZCAqZmgsIHUzMiBjbGFzc2lkLCB1bnNpZ25lZCBsb25nIGNsLCB2b2lkICpxLFxuIDY3MDpcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgYmFzZSlcbiA2NzE6XHR7XG4gNjcyOlx0XHRzdHJ1Y3Qgcm91dGU0X2ZpbHRlciAqZiA9IGZoO1xuIDY3MzpcdFxuIDY3NDpcdFx0dGNfY2xzX2JpbmRfY2xhc3MoY2xhc3NpZCwgY2wsIHEsIFx1MDAyNmYtXHUwMDNlcmVzLCBiYXNlKTtcbiA2NzU6XHR9XG4gNjc2Olx0XG4gNjc3Olx0c3RhdGljIHN0cnVjdCB0Y2ZfcHJvdG9fb3BzIGNsc19yb3V0ZTRfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4gNjc4Olx0XHQua2luZFx0XHQ9XHRcJiMzNDtyb3V0ZVwmIzM0OyxcbiA2Nzk6XHRcdC5jbGFzc2lmeVx0PVx0cm91dGU0X2NsYXNzaWZ5LFxuIDY4MDpcdFx0LmluaXRcdFx0PVx0cm91dGU0X2luaXQsXG4gNjgxOlx0XHQuZGVzdHJveVx0PVx0cm91dGU0X2Rlc3Ryb3ksXG4gNjgyOlx0XHQuZ2V0XHRcdD1cdHJvdXRlNF9nZXQsXG4gNjgzOlx0XHQuY2hhbmdlXHRcdD1cdHJvdXRlNF9jaGFuZ2UsXG4gNjg0Olx0XHQuZGVsZXRlXHRcdD1cdHJvdXRlNF9kZWxldGUsXG4gNjg1Olx0XHQud2Fsa1x0XHQ9XHRyb3V0ZTRfd2FsayxcbiA2ODY6XHRcdC5kdW1wXHRcdD1cdHJvdXRlNF9kdW1wLFxuIDY4NzpcdFx0LmJpbmRfY2xhc3NcdD1cdHJvdXRlNF9iaW5kX2NsYXNzLFxuIDY4ODpcdFx0Lm93bmVyXHRcdD1cdFRISVNfTU9EVUxFLFxuIDY4OTpcdH07XG4gNjkwOlx0TU9EVUxFX0FMSUFTX05FVF9DTFMoXCYjMzQ7cm91dGVcJiMzNDspO1xuIDY5MTpcdFxuIDY5MjpcdHN0YXRpYyBpbnQgX19pbml0IGluaXRfcm91dGU0KHZvaWQpXG4gNjkzOlx0e1xuIDY5NDpcdFx0cmV0dXJuIHJlZ2lzdGVyX3RjZl9wcm90b19vcHMoXHUwMDI2Y2xzX3JvdXRlNF9vcHMpO1xuIDY5NTpcdH1cbiA2OTY6XHRcbiA2OTc6XHRzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yb3V0ZTQodm9pZClcbiA2OTg6XHR7XG4gNjk5Olx0XHR1bnJlZ2lzdGVyX3RjZl9wcm90b19vcHMoXHUwMDI2Y2xzX3JvdXRlNF9vcHMpO1xuIDcwMDpcdH1cbiA3MDE6XHRcbiA3MDI6XHRtb2R1bGVfaW5pdChpbml0X3JvdXRlNClcbiA3MDM6XHRtb2R1bGVfZXhpdChleGl0X3JvdXRlNClcbiA3MDQ6XHRNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7Um91dGluZyB0YWJsZSByZWFsbSBiYXNlZCBUQyBjbGFzc2lmaWVyXCYjMzQ7KTtcbiA3MDU6XHRNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAyMTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjQwCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNzgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBjbHNfcm91dGUgUmVmY291bnQgQnVnZml4KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIHJlZmNvdW50LCBgZmlsdGVyc19yZWZgLCB0byBgc3RydWN0IHJvdXRlNF9idWNrZXRgIGluIGBuZXQvc2NoZWQvY2xzX3JvdXRlLmNgLiBUaGUgZ29hbCBpcyBwcm9wZXIgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgb2YgZmlsdGVycyB3aXRoaW4gdGhlIGBjbHNfcm91dGVgIG1vZHVsZSwgcGFydGljdWxhcmx5IGFyb3VuZCBkZWxldGlvbiBhbmQgbW9kaWZpY2F0aW9uLiBUaGlzIGlzIGNvcmUgVEMgKHRyYWZmaWMgY29udHJvbCkgY2xhc3NpZmljYXRpb24gbG9naWMsIHdoaWNoIGlzIG9idmlvdXNseSByZWFjaGFibGUgdmlhIG5ldGxpbmsgY2FsbHMgbGlrZSBgUlRNX05FV1RGSUxURVJgLCBgUlRNX0RFTFRGSUxURVJgLCBldGMuCgpUaGUgcGF0Y2ggaXRzZWxmIGxvb2tzIHN0cmFpZ2h0Zm9yd2FyZDoKCiogICBJbiBgcm91dGU0X2RlbGV0ZWAsIGluc3RlYWQgb2YgdGhlIG9sZCBpdGVyYXRpdmUgY2hlY2ssIGl0IHVzZXMgYHJlZmNvdW50X2RlY19hbmRfdGVzdGAgdG8gZGV0ZXJtaW5lIHdoZW4gdGhlIGJ1Y2tldCBjYW4gYmUgc2FmZWx5IGZyZWVkLiBUaGlzIGlzIG11Y2ggYmV0dGVyLgoqICAgYHJvdXRlNF9zZXRfcGFybXNgIG5vdyBhcHByb3ByaWF0ZWx5IGluY3JlbWVudHMgb3Igc2V0cyB0aGUgcmVmY291bnQgd2hlbiBmaWx0ZXJzIGFyZSBhZGRlZC4KKiAgIGByb3V0ZTRfY2hhbmdlYCBub3cgY29ycmVjdGx5IGRlY3JlbWVudHMgdGhlIHJlZmNvdW50IHdoZW4gcmVwbGFjaW5nIGZpbHRlcnMsIGFuZCBmcmVlcyB0aGUgYnVja2V0IGlmIGl0IGhpdHMgemVyby4KCkdpdmVuIHRoZSBoaXN0b3J5IG9mIGJ1Z3MgaW4gdGhpcyBhcmVhIOKAkyBmaWx0ZXIgbGlmZXRpbWUsIHJlZmNvdW50aW5nLCBhbmQgUkNVIHN5bmNocm9uaXphdGlvbiBpbiB0aGUgbmV0L3NjaGVkIHN1YnN5c3RlbSBoYXZlIGhpc3RvcmljYWxseSBiZWVuIGEgZ29sZCBtaW5lIGZvciBjb25jdXJyZW5jeSBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIOKAkyB0aGlzIGlzICphYnNvbHV0ZWx5KiB3b3J0aCBmdXp6aW5nLiBJIG1lYW4sIG1lbW9yeSBsZWFrcywgVUFGcywgZG91YmxlIGZyZWVzLi4uIHRoaXMgaXMgcHJpbWUgdGVycml0b3J5LgoKU28sIGZ1enppbmcgaXMgYSBnbyEgVGhlIG1vc3QgcmVsZXZhbnQgZnVuY3Rpb25zLCB0aGUgc3ltYm9scyB0byBmb2N1cyBvbiBpbiBgbmV0L3NjaGVkL2Nsc19yb3V0ZS5jYCwgYXJlOgoKKiAgIGByb3V0ZTRfY2hhbmdlYAoqICAgYHJvdXRlNF9kZWxldGVgCiogICBgcm91dGU0X3NldF9wYXJtc2AKClRoZXkgYXJlIGNhbGxlZCB0aHJvdWdoIGB0Y2ZfcHJvdG9fb3BzIGNsc19yb3V0ZTRfb3BzYCwgd2hpY2ggbWVhbnMgdGhleSBhcmUgY2FsbGJhY2tzIHJlZ2lzdGVyZWQgYW5kIGNhbGxlZCB0aHJvdWdoIGluZGlyZWN0IGNhbGxzLCBzbyB0aGVzZSBhcmUgZXhjZWxsZW50IHRhcmdldHMuCgpDb25maWctd2lzZSwgdGhlIGNvcmUgcmVxdWlyZW1lbnRzIGFyZSBwcmV0dHkgY2xlYXI6CgoqICAgYE5FVF9DTFNfUk9VVEU0YAoqICAgYE5FVF9TQ0hFRGAgKHRoaXMgaXMgdGhlIHBhcmVudCBjb25maWcpCiogICBgSU5FVGAgKGEgZGVwZW5kZW5jeSBvZiBgTkVUX0NMU19ST1VURTRgKQoqICAgYE5FVGAgKHRoZSBiYXNlIG5ldHdvcmsgc3Vic3lzdGVtIGNvbmZpZykKCk5vIG9idmlvdXMgbWlzc2luZyBkZXBlbmRlbmNpZXMgYXQgZmlyc3QgZ2xhbmNlLCBJJiMzOTtsbCBkb3VibGUgY2hlY2sgYG5ldC9LY29uZmlnYCBhbmQgYG5ldC9zY2hlZC9LY29uZmlnYCBmb3IgYW55dGhpbmcgZWxzZSByZWxldmFudC4gVGhpcyBzaG91bGQgYmUgYSBwcmV0dHkgdGlnaHQgdGVzdCBjYXNlIHRvIGdldCBzdGFydGVkLiBMZXQmIzM5O3Mgc2VlIGlmIHdlIGNhbiB0cmlnZ2VyIHNvbWUgb2YgdGhlc2UgY2xhc3NpYyBUQyBidWdzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAyMTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORVRfQ0xTX1JPVVRFNCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9MTUyNz1jb25maWcgTkVURklMVEVSX1hUX01BVENIX1JFQUxNXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1MzQtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTUzNTpcdCAgVGhpcyBtYXRjaCBwcmV0dHkgbXVjaCByZXNlbWJsZXMgdGhlIENPTkZJR19ORVRfQ0xTX1JPVVRFNCBvcHRpb25cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNTM2LVx0ICBpbiB0YyB3b3JsZC5cbi0tXG5uZXQvc2NoZWQvS2NvbmZpZz00ODQ9Y29uZmlnIE5FVF9DTFNfQkFTSUNcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy00OTMtXG5uZXQvc2NoZWQvS2NvbmZpZzo0OTQ6Y29uZmlnIE5FVF9DTFNfUk9VVEU0XG5uZXQvc2NoZWQvS2NvbmZpZy00OTUtXHR0cmlzdGF0ZSBcJiMzNDtSb3V0aW5nIGRlY2lzaW9uIChST1VURSlcJiMzNDtcbi0tXG5uZXQvc2NoZWQvTWFrZWZpbGU9Njg9b2JqLSQoQ09ORklHX05FVF9DTFNfVTMyKVx0JiM0Mzs9IGNsc191MzIub1xubmV0L3NjaGVkL01ha2VmaWxlOjY5Om9iai0kKENPTkZJR19ORVRfQ0xTX1JPVVRFNClcdCYjNDM7PSBjbHNfcm91dGUub1xubmV0L3NjaGVkL01ha2VmaWxlLTcwLW9iai0kKENPTkZJR19ORVRfQ0xTX0ZXKVx0JiM0Mzs9IGNsc19mdy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDIxOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMzcKCQkJCQkJCW91dHB1dDogMTM5CgkJCQkJCQl0aG91Z2h0czogMjQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgbmV0L3NjaGVkL0tjb25maWdgIERlcGVuZGVuY2llcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBmb3IgYE5FVF9DTFNfUk9VVEU0YC4gSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgYG5ldC9zY2hlZC9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBwYXJlbnQgbWVudXMgb3IgaW1tZWRpYXRlIGRlcGVuZGVuY2llcyBvbiBgTkVUX0NMU19ST1VURTRgIGl0c2VsZi4gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBjb25maWcgZGVmaW5pdGlvbjogYGNvbmZpZyBORVRfQ0xTX1JPVVRFNGAsIGFuZCBJIHNlZSB0aGF0IGl0JiMzOTtzIGEgdHJpc3RhdGUgb3B0aW9uIGFuZCBkZXBlbmRzIG9uIGBJTkVUYC4gIEl0IGFsc28gKnNlbGVjdHMqIGBJUF9ST1VURV9DTEFTU0lEYCBhbmQgYE5FVF9DTFNgLiAgQWhhLCBhbmQgaXQmIzM5O3MgZGVmaW5lZCB1bmRlciBgbWVudWNvbmZpZyBORVRfU0NIRURgLiBOb3cgSSByZWNhbGwgdGhhdCBpbiBgbmV0L0tjb25maWdgLCBgc291cmNlICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0O2AgaXMgZ3VhcmRlZCBieSBgaWYgTkVUYCwgc28gdGhhdCBnaXZlcyBtZSB0aGUgYnJvYWRlciBjb250ZXh0LgoKU28sIHRvIHN1bW1hcml6ZSB0aGUga2V5IGNvbmZpZ3M6IGBORVRfQ0xTX1JPVVRFNGAsIGBORVRfU0NIRURgLCBgTkVUX0NMU2AsIGFuZCBgSU5FVGAgYXJlIGFsbCByZWxldmFudCBoZXJlLiBUaGlzIGlzIGltcG9ydGFudC4KCk5vdywgbGV0IG1lIGRvdWJsZS1jaGVjayBhbGwgdGhlIHJlcXVpcmVtZW50cy4gIFRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIGlzIHRydWUsIGluZGljYXRpbmcgd2UgbmVlZCB0byBmb2N1cyBvbiB0aGlzIGFyZWEuIE15IGBFbmFibGVDb25maWdzYCBsaXN0LCB3aGljaCBpbmNsdWRlcyBgTkVUX0NMU19ST1VURTRgLCBgTkVUX1NDSEVEYCwgYW5kIGBJTkVUYCwgbGluZXMgdXAgd2l0aCB3aGF0IEkganVzdCBhbmFseXplZC4gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBgcm91dGU0X2NoYW5nZWAsIGByb3V0ZTRfZGVsZXRlYCwgYW5kIGByb3V0ZTRfc2V0X3Bhcm1zYCwgd2hpY2ggSSB1bmRlcnN0YW5kLgoKQWxyaWdodCwgSSYjMzk7bSBjb25maWRlbnQgaW4gbXkgYW5hbHlzaXMuIExldCYjMzk7cyBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUgZXZlcnl0aGluZyBsaW5lcyB1cCwgYW5kIHRoZW4gSSYjMzk7bGwgZm9ybXVsYXRlIHRoZSB0b29sIGNhbGwgYWNjb3JkaW5nbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDIxOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfQ0xTX1JPVVRFNCYjMzQ7LAogICAgJiMzNDtORVRfU0NIRUQmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JvdXRlNF9jaGFuZ2UmIzM0OywKICAgICYjMzQ7cm91dGU0X2RlbGV0ZSYjMzQ7LAogICAgJiMzNDtyb3V0ZTRfc2V0X3Bhcm1zJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByb3V0ZTQgY2xhc3NpZmllciAoY2xzX3JvdXRlKSBpbiB0aGUgdHJhZmZpYyBjb250cm9sIHN1YnN5c3RlbSBieSBpbnRyb2R1Y2luZyByZWZjb3VudGluZyAoZmlsdGVyc19yZWYpIHRvIG1hbmFnZSB0aGUgbGlmZXRpbWUgYW5kIGRlYWxsb2NhdGlvbiBvZiByb3V0ZTQgYnVja2V0cyBkdXJpbmcgZmlsdGVyIGluc2VydGlvbiwgcmVwbGFjZW1lbnQsIGFuZCBkZWxldGlvbi4gVGhpcyBpcyBjb3JlIG5ldHdvcmtpbmcgY29kZSByZWFjaGFibGUgdmlhIG5ldGxpbmsgdHJhZmZpYyBjb250cm9sIGludGVyZmFjZXMgYW5kIGFmZmVjdHMgbWVtb3J5IHNhZmV0eSAvIGxpZmV0aW1lIG1hbmFnZW1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9DTFNfUk9VVEU0JiMzNDssCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cm91dGU0X2NoYW5nZSYjMzQ7LAogICAgJiMzNDtyb3V0ZTRfZGVsZXRlJiMzNDssCiAgICAmIzM0O3JvdXRlNF9zZXRfcGFybXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJvdXRlNCBjbGFzc2lmaWVyIChjbHNfcm91dGUpIGluIHRoZSB0cmFmZmljIGNvbnRyb2wgc3Vic3lzdGVtIGJ5IGludHJvZHVjaW5nIHJlZmNvdW50aW5nIChmaWx0ZXJzX3JlZikgdG8gbWFuYWdlIHRoZSBsaWZldGltZSBhbmQgZGVhbGxvY2F0aW9uIG9mIHJvdXRlNCBidWNrZXRzIGR1cmluZyBmaWx0ZXIgaW5zZXJ0aW9uLCByZXBsYWNlbWVudCwgYW5kIGRlbGV0aW9uLiBUaGlzIGlzIGNvcmUgbmV0d29ya2luZyBjb2RlIHJlYWNoYWJsZSB2aWEgbmV0bGluayB0cmFmZmljIGNvbnRyb2wgaW50ZXJmYWNlcyBhbmQgYWZmZWN0cyBtZW1vcnkgc2FmZXR5IC8gbGlmZXRpbWUgbWFuYWdlbWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMjE6NTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAyMTo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSByZWZlcmVuY2UgY291bnRlciAoYGZpbHRlcnNfcmVmYCkgdG8gYHN0cnVjdCByb3V0ZTRfYnVja2V0YCBpbiBgbmV0L3NjaGVkL2Nsc19yb3V0ZS5jYCB0byB0cmFjayBhY3RpdmUgZmlsdGVycyBpbiBlYWNoIGJ1Y2tldCBhbmQgbWFuYWdlIGJ1Y2tldCByZWNsYW1hdGlvbiB2aWEgUkNVLCByZXBsYWNpbmcgYSBsaW5lYXIgc2NhbiBvZiBidWNrZXQgc2xvdHMuXG5cbi0gTWVtb3J5IEluaXRpYWxpemF0aW9uOiBUaGUgYnVja2V0IHN0cnVjdHVyZSBgc3RydWN0IHJvdXRlNF9idWNrZXRgIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmooKWAgYW5kIGBmaWx0ZXJzX3JlZmAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB3aXRoIGByZWZjb3VudF9zZXQoXHUwMDI2Yi1cdTAwM2VmaWx0ZXJzX3JlZiwgMSlgIHVwb24gY3JlYXRpb24uXG4tIFBvdGVudGlhbCBCdWcgVHlwZXM6IEFueSBwb3RlbnRpYWwgYnVncyByZXN1bHRpbmcgZnJvbSB0aGlzIHJlZmFjdG9yaW5nIChlLmcuIGluY29ycmVjdCByZWZlcmVuY2UgY291bnRpbmcsIGRvdWJsZSBmcmVlcywgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucykgYXJlIG1lbW9yeSBsaWZlY3ljbGUgLyBwb2ludGVyIHZhbGlkaXR5IGJ1Z3MgdGhhdCBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHRoZSBgcmVmY291bnRfdGAgcnVudGltZSBjaGVja3MuXG4tIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IC8gSW5mby1sZWFrIFJpc2s6IFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0dXJlIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gYnJhbmNoaW5nIGRlY2lzaW9ucy5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1ZGIzODdjM2Y5M2Y0ZTRiMTM4OTIzMjgxNGE1MjczYWE1MjIyMmQ0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMjkgMjE6NTU6MjAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX3JvdXRlLmMgYi9uZXQvc2NoZWQvY2xzX3JvdXRlLmMKaW5kZXggMGQxMzI0YzkwNTgzNy4uMTdiMGViYjc2NjYyNiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9jbHNfcm91dGUuYwpAQCAtMTEsNiAmIzQzOzExLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zdHJpbmcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9lcnJuby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9yZWZjb3VudC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NrYnVmZi5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9kc3QuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvcm91dGUuaCZndDsKQEAgLTQxLDYgJiM0Mzs0Miw3IEBAIHN0cnVjdCByb3V0ZTRfaGVhZCB7CiBzdHJ1Y3Qgcm91dGU0X2J1Y2tldCB7CiAJLyogMTYgRlJPTSBidWNrZXRzICYjNDM7IDE2IElJRiBidWNrZXRzICYjNDM7IDEgd2lsZGNhcmQgYnVja2V0ICovCiAJc3RydWN0IHJvdXRlNF9maWx0ZXIgX19yY3UJKmh0WzE2ICYjNDM7IDE2ICYjNDM7IDFdOwomIzQzOwlyZWZjb3VudF90CQkJZmlsdGVyc19yZWY7CiAJc3RydWN0IHJjdV9oZWFkCQkJcmN1OwogfTsKIApAQCAtMzM2LDcgJiM0MzszMzgsNyBAQCBzdGF0aWMgaW50IHJvdXRlNF9kZWxldGUoc3RydWN0IHRjZl9wcm90byAqdHAsIHZvaWQgKmFyZywgYm9vbCAqbGFzdCwKIAlzdHJ1Y3Qgcm91dGU0X2ZpbHRlciAqbmY7CiAJc3RydWN0IHJvdXRlNF9idWNrZXQgKmI7CiAJdW5zaWduZWQgaW50IGggPSAwOwotCWludCBpLCBoMTsKJiM0MzsJaW50IGgxOwogCiAJaWYgKCFoZWFkIHx8ICFmKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTM2MiwyMyAmIzQzOzM2NCwxNCBAQCBzdGF0aWMgaW50IHJvdXRlNF9kZWxldGUoc3RydWN0IHRjZl9wcm90byAqdHAsIHZvaWQgKmFyZywgYm9vbCAqbGFzdCwKIAkJCXRjZl9leHRzX2dldF9uZXQoJmFtcDtmLSZndDtleHRzKTsKIAkJCXRjZl9xdWV1ZV93b3JrKCZhbXA7Zi0mZ3Q7cndvcmssIHJvdXRlNF9kZWxldGVfZmlsdGVyX3dvcmspOwogCi0JCQkvKiBTdHJpcCBSVE5MIHByb3RlY3RlZCB0cmVlICovCi0JCQlmb3IgKGkgPSAwOyBpICZsdDs9IDMyOyBpJiM0MzsmIzQzOykgewotCQkJCXN0cnVjdCByb3V0ZTRfZmlsdGVyICpydDsKLQotCQkJCXJ0ID0gcnRubF9kZXJlZmVyZW5jZShiLSZndDtodFtpXSk7Ci0JCQkJaWYgKHJ0KQotCQkJCQlnb3RvIG91dDsKJiM0MzsJCQlpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KCZhbXA7Yi0mZ3Q7ZmlsdGVyc19yZWYpKSB7CiYjNDM7CQkJCVJDVV9JTklUX1BPSU5URVIoaGVhZC0mZ3Q7dGFibGVbdG9faGFzaChoKV0sIE5VTEwpOwomIzQzOwkJCQlrZnJlZV9yY3UoYiwgcmN1KTsKIAkJCX0KLQotCQkJLyogT0ssIHNlc3Npb24gaGFzIG5vIGZsb3dzICovCi0JCQlSQ1VfSU5JVF9QT0lOVEVSKGhlYWQtJmd0O3RhYmxlW3RvX2hhc2goaCldLCBOVUxMKTsKLQkJCWtmcmVlX3JjdShiLCByY3UpOwogCQkJYnJlYWs7CiAJCX0KIAl9CiAKLW91dDoKIAkqbGFzdCA9IHRydWU7CiAJZm9yIChoMSA9IDA7IGgxICZsdDs9IDI1NjsgaDEmIzQzOyYjNDM7KSB7CiAJCWlmIChyY3VfYWNjZXNzX3BvaW50ZXIoaGVhZC0mZ3Q7dGFibGVbaDFdKSkgewpAQCAtNDU5LDYgJiM0Mzs0NTIsNyBAQCBzdGF0aWMgaW50IHJvdXRlNF9zZXRfcGFybXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwKIAkJaWYgKGIgPT0gTlVMTCkKIAkJCXJldHVybiAtRU5PQlVGUzsKIAomIzQzOwkJcmVmY291bnRfc2V0KCZhbXA7Yi0mZ3Q7ZmlsdGVyc19yZWYsIDEpOwogCQlyY3VfYXNzaWduX3BvaW50ZXIoaGVhZC0mZ3Q7dGFibGVbaDFdLCBiKTsKIAl9IGVsc2UgewogCQl1bnNpZ25lZCBpbnQgaDIgPSBmcm9tX2hhc2gobmhhbmRsZSAmZ3Q7Jmd0OyAxNik7CkBAIC00NjgsNiAmIzQzOzQ2Miw4IEBAIHN0YXRpYyBpbnQgcm91dGU0X3NldF9wYXJtcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLAogCQkgICAgIGZwID0gcnRubF9kZXJlZmVyZW5jZShmcC0mZ3Q7bmV4dCkpCiAJCQlpZiAoZnAtJmd0O2hhbmRsZSA9PSBmLSZndDtoYW5kbGUpCiAJCQkJcmV0dXJuIC1FRVhJU1Q7CiYjNDM7CiYjNDM7CQlyZWZjb3VudF9pbmMoJmFtcDtiLSZndDtmaWx0ZXJzX3JlZik7CiAJfQogCiAJaWYgKHRiW1RDQV9ST1VURTRfVE9dKQpAQCAtNTAwLDcgJiM0Mzs0OTYsNyBAQCBzdGF0aWMgaW50IHJvdXRlNF9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLAogCXN0cnVjdCByb3V0ZTRfZmlsdGVyICpmb2xkLCAqZjEsICpwZnAsICpmID0gTlVMTDsKIAlzdHJ1Y3Qgcm91dGU0X2J1Y2tldCAqYjsKIAlzdHJ1Y3QgbmxhdHRyICp0YltUQ0FfUk9VVEU0X01BWCAmIzQzOyAxXTsKLQl1bnNpZ25lZCBpbnQgaCwgdGg7CiYjNDM7CXVuc2lnbmVkIGludCBoOwogCWludCBlcnI7CiAJYm9vbCBuZXcgPSB0cnVlOwogCkBAIC01NjAsMTcgJiM0Mzs1NTYsMjAgQEAgc3RhdGljIGludCByb3V0ZTRfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwKIAlyY3VfYXNzaWduX3BvaW50ZXIoKmZwLCBmKTsKIAogCWlmIChmb2xkKSB7Ci0JCXRoID0gdG9faGFzaChmb2xkLSZndDtoYW5kbGUpOwomIzQzOwkJYiA9IGZvbGQtJmd0O2JrdDsKIAkJaCA9IGZyb21faGFzaChmb2xkLSZndDtoYW5kbGUgJmd0OyZndDsgMTYpOwotCQliID0gcnRubF9kZXJlZmVyZW5jZShoZWFkLSZndDt0YWJsZVt0aF0pOwotCQlpZiAoYikgewotCQkJZnAgPSAmYW1wO2ItJmd0O2h0W2hdOwotCQkJZm9yIChwZnAgPSBydG5sX2RlcmVmZXJlbmNlKCpmcCk7IHBmcDsKLQkJCSAgICAgZnAgPSAmYW1wO3BmcC0mZ3Q7bmV4dCwgcGZwID0gcnRubF9kZXJlZmVyZW5jZSgqZnApKSB7Ci0JCQkJaWYgKHBmcCA9PSBmb2xkKSB7Ci0JCQkJCXJjdV9hc3NpZ25fcG9pbnRlcigqZnAsIGZvbGQtJmd0O25leHQpOwotCQkJCQlicmVhazsKJiM0MzsJCWZwID0gJmFtcDtiLSZndDtodFtoXTsKJiM0MzsJCWZvciAocGZwID0gcnRubF9kZXJlZmVyZW5jZSgqZnApOyBwZnA7CiYjNDM7CQkgICAgIGZwID0gJmFtcDtwZnAtJmd0O25leHQsIHBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKSkgewomIzQzOwkJCWlmIChwZnAgPT0gZm9sZCkgewomIzQzOwkJCQlyY3VfYXNzaWduX3BvaW50ZXIoKmZwLCBmb2xkLSZndDtuZXh0KTsKJiM0MzsJCQkJaWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO2ItJmd0O2ZpbHRlcnNfcmVmKSkgewomIzQzOwkJCQkJdW5zaWduZWQgaW50IHRoID0gdG9faGFzaChmb2xkLSZndDtoYW5kbGUpOwomIzQzOwomIzQzOwkJCQkJUkNVX0lOSVRfUE9JTlRFUihoZWFkLSZndDt0YWJsZVt0aF0sIE5VTEwpOwomIzQzOwkJCQkJa2ZyZWVfcmN1KGIsIHJjdSk7CiAJCQkJfQomIzQzOwkJCQlicmVhazsKIAkJCX0KIAkJfQogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDIxOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMzEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBjbHNfcm91dGUuYyBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgd2UgbmVlZCB0byBicmluZyBpbiBLTVNBTi4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGFjdHVhbGx5IGNoYW5naW5nLiBPa2F5LCBpdCYjMzk7cyBpbiBgbmV0L3NjaGVkL2Nsc19yb3V0ZS5jYCwgc28gaXQmIzM5O3MgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIHJvdXRpbmcgY2xhc3NpZmllci4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgYWRkaW5nIGEgYHJlZmNvdW50X3QgZmlsdGVyc19yZWY7YCBmaWVsZCB0byB0aGUgYHN0cnVjdCByb3V0ZTRfYnVja2V0YC4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGlzIGlzIGNsYXNzaWMgcmVmY291bnRpbmcsIGFuZCB0aGF0IHRoZSBleGlzdGluZyBjb2RlIHByb2JhYmx5IGhhZCBzb21lIHJhY2UgY29uZGl0aW9ucyBhcm91bmQgbWFuYWdpbmcgdGhlIGJ1Y2tldHMuIExldCYjMzk7cyBzZWUgaG93IHRoZXkmIzM5O3JlIGhhbmRsaW5nIGl0Li4uIEFoLCBnb3QgaXQuIEluIGByb3V0ZTRfZGVsZXRlYCwgdGhleSYjMzk7cmUgcmVwbGFjaW5nIHRoZSBvbGQgbG9vcC1iYXNlZCBlbXB0aW5lc3MgY2hlY2sgKGBmb3IgKGkgPSAwOyBpICZsdDs9IDMyOyBpJiM0MzsmIzQzOylgKSB3aXRoIGEgYHJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO2ItJmd0O2ZpbHRlcnNfcmVmKWAuIE1ha2VzIHNlbnNlOyB0aGF0JiMzOTtzIG11Y2ggY2xlYW5lciBhbmQgbGVzcyBwcm9uZSB0byBlcnJvcnMuIGBrZnJlZV9yY3UoYiwgcmN1KWAgaXMgYWxzbyBiZWluZyB1c2VkLCB3aGljaCBpcyBnb29kIHRvIHNlZSAtIHByb3RlY3RpbmcgYWdhaW5zdCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MuCgpOb3csIGxvb2tpbmcgYXQgaG93IHRoZSByZWZjb3VudCBpcyBtYW5hZ2VkLi4uIGByb3V0ZTRfc2V0X3Bhcm1zYCBpbml0aWFsaXplcyB0aGUgY291bnQgdG8gMSB3aGVuIGEgYnVja2V0IGlzIGNyZWF0ZWQgKGByZWZjb3VudF9zZXQoJmFtcDtiLSZndDtmaWx0ZXJzX3JlZiwgMSlgKSwgYW5kIGluY3JlYXNlcyBpdCB3aGVuIGEgZmlsdGVyIGlzIGFkZGVkIChgcmVmY291bnRfaW5jKCZhbXA7Yi0mZ3Q7ZmlsdGVyc19yZWYpYCkuIExvb2tzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2ggc28gZmFyLiBUaGVuLCBpbiBgcm91dGU0X2NoYW5nZWAsIHdoZW4gYSBgZm9sZGAgaXMgcmVwbGFjZWQsIGl0IGRlY3JlbWVudHMgdGhlIGNvdW50IHVzaW5nIGByZWZjb3VudF9kZWNfYW5kX3Rlc3QoJmFtcDtiLSZndDtmaWx0ZXJzX3JlZilgIGFuZCBmcmVlcyB0aGUgYnVja2V0IGlmIGl0IGhpdHMgemVyby4KCkJlZm9yZSBJIGNhbiBnaXZlIHRoaXMgYSBkZWZpbml0aXZlIHBhc3Mgb3IgZmFpbCwgSSBuZWVkIHRvIHNlZSB0aGUgc3Vycm91bmRpbmcgY29udGV4dCBpbiBgbmV0L3NjaGVkL2Nsc19yb3V0ZS5jYC4gVGltZSB0byBmaXJlIHVwIG15IHRydXN0eSBncmVwcGVyIG9yIHJlYWQtZmlsZSB0byBzZWUgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCBhbmQgaG93IHRoZSBidWNrZXRzIGludGVyYWN0IHdpdGggdGhlIHJlc3Qgb2YgdGhlIHJvdXRpbmcgY2xhc3NpZmllci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIHJlZmNvdW50aW5nIHNjaGVtZSBpcyByb2J1c3QgZW5vdWdoIHRvIGhhbmRsZSBhbGwgcG9zc2libGUgc2NlbmFyaW9zLCBlc3BlY2lhbGx5IGNvbmN1cnJlbnQgYWNjZXNzZXMuIEZyb20gYSBoaWdoIGxldmVsIHRoaXMgbG9va3MgbGlrZSBhIGdvb2QgY2hhbmdlLCBidXQgYSBtb3JlIHRob3JvdWdoIHJldmlldyBpcyBpbiBvcmRlciB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAyMTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyb3V0ZTRfc2V0X3Bhcm1zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2Nsc19yb3V0ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfcm91dGUuYz0zODY9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHJvdXRlNF9wb2xpY3lbVENBX1JPVVRFNF9NQVggJiM0MzsgMV0gPSB7XG4tLVxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jLTM5Mi1cbm5ldC9zY2hlZC9jbHNfcm91dGUuYzozOTM6c3RhdGljIGludCByb3V0ZTRfc2V0X3Bhcm1zKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmMtMzk0LVx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGJhc2UsIHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmLFxuLS1cbm5ldC9zY2hlZC9jbHNfcm91dGUuYz00ODk9c3RhdGljIGludCByb3V0ZTRfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbi0tXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmMtNTQwLVxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jOjU0MTpcdGVyciA9IHJvdXRlNF9zZXRfcGFybXMobmV0LCB0cCwgYmFzZSwgZiwgaGFuZGxlLCBoZWFkLCB0Yixcbm5ldC9zY2hlZC9jbHNfcm91dGUuYy01NDItXHRcdFx0ICAgICAgIHRjYVtUQ0FfUkFURV0sIG5ldywgZmxhZ3MsIGV4dGFjayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDIxOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzOTAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGNvZGUgc2VnbWVudHMgaW4gYG5ldC9zY2hlZC9jbHNfcm91dGUuY2A6CgoqKkRlZXAgRGl2ZSBpbnRvIGBjbHNfcm91dGVgIGFuZCBSZWZlcmVuY2UgQ291bnRpbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgYGNsc19yb3V0ZWAgYWdhaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gb2YgYGJgIGFuZCBob3cgYGZpbHRlcnNfcmVmYCBpcyBsZXZlcmFnZWQgaW4gdGhpcyBjb250ZXh0LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gdGhvc2UgY3J1Y2lhbCBmdW5jdGlvbnM6IGByb3V0ZTRfc2V0X3Bhcm1zYCwgYHJvdXRlNF9jaGFuZ2VgLCBhbmQgYHJvdXRlNF9kZWxldGVgLiBJIG5lZWQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgaGFuZGxlIHRoZSBsaWZlY3ljbGUgb2YgdGhlIGZpbHRlciBkYXRhIGFuZCwgcGFydGljdWxhcmx5LCBob3cgdGhhdCByZWZlcmVuY2UgY291bnRlciAoYGZpbHRlcnNfcmVmYCkgcGxheXMgYSByb2xlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ3Jhc3AgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBlbnN1cmUgdGhhdCB3ZSYjMzk7cmUgcHJvcGVybHkgcHJvdGVjdGluZyB0aGUgZmlsdGVyIGRhdGEgYWdhaW5zdCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MuIEkmIzM5O2xsIGJlIG1ldGljdWxvdXNseSBleGFtaW5pbmcgdGhlIGNvZGUgdG8gcGlucG9pbnQgZXhhY3RseSB3aGVyZSBtZW1vcnkgaXMgYWxsb2NhdGVkLCBpbml0aWFsaXplZCwgcmVmZXJlbmNlZCwgYW5kIHVsdGltYXRlbHksIGRlYWxsb2NhdGVkLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBtYWludGFpbmluZyBkYXRhIGludGVncml0eSBhbmQgc3lzdGVtIHN0YWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMjE6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvY2xzX3JvdXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ0MDpcdFx0XHR9XG4gNDQxOlx0XHR9XG4gNDQyOlx0XG4gNDQzOlx0XHRpZiAoIW5oYW5kbGUpIHtcbiA0NDQ6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtSZXBsYWNpbmcgd2l0aCBoYW5kbGUgb2YgMCBpcyBpbnZhbGlkXCYjMzQ7KTtcbiA0NDU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDQ2Olx0XHR9XG4gNDQ3Olx0XG4gNDQ4Olx0XHRoMSA9IHRvX2hhc2gobmhhbmRsZSk7XG4gNDQ5Olx0XHRiID0gcnRubF9kZXJlZmVyZW5jZShoZWFkLVx1MDAzZXRhYmxlW2gxXSk7XG4gNDUwOlx0XHRpZiAoIWIpIHtcbiA0NTE6XHRcdFx0YiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCByb3V0ZTRfYnVja2V0LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIDQ1MjpcdFx0XHRpZiAoYiA9PSBOVUxMKVxuIDQ1MzpcdFx0XHRcdHJldHVybiAtRU5PQlVGUztcbiA0NTQ6XHRcbiA0NTU6XHRcdFx0cmVmY291bnRfc2V0KFx1MDAyNmItXHUwMDNlZmlsdGVyc19yZWYsIDEpO1xuIDQ1NjpcdFx0XHRyY3VfYXNzaWduX3BvaW50ZXIoaGVhZC1cdTAwM2V0YWJsZVtoMV0sIGIpO1xuIDQ1NzpcdFx0fSBlbHNlIHtcbiA0NTg6XHRcdFx0dW5zaWduZWQgaW50IGgyID0gZnJvbV9oYXNoKG5oYW5kbGUgXHUwMDNlXHUwMDNlIDE2KTtcbiA0NTk6XHRcbiA0NjA6XHRcdFx0Zm9yIChmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoYi1cdTAwM2VodFtoMl0pO1xuIDQ2MTpcdFx0XHQgICAgIGZwO1xuIDQ2MjpcdFx0XHQgICAgIGZwID0gcnRubF9kZXJlZmVyZW5jZShmcC1cdTAwM2VuZXh0KSlcbiA0NjM6XHRcdFx0XHRpZiAoZnAtXHUwMDNlaGFuZGxlID09IGYtXHUwMDNlaGFuZGxlKVxuIDQ2NDpcdFx0XHRcdFx0cmV0dXJuIC1FRVhJU1Q7XG4gNDY1Olx0XG4gNDY2Olx0XHRcdHJlZmNvdW50X2luYyhcdTAwMjZiLVx1MDAzZWZpbHRlcnNfcmVmKTtcbiA0Njc6XHRcdH1cbiA0Njg6XHRcbiA0Njk6XHRcdGlmICh0YltUQ0FfUk9VVEU0X1RPXSlcbiA0NzA6XHRcdFx0Zi1cdTAwM2VpZCA9IHRvO1xuIDQ3MTpcdFxuIDQ3MjpcdFx0aWYgKHRiW1RDQV9ST1VURTRfRlJPTV0pXG4gNDczOlx0XHRcdGYtXHUwMDNlaWQgPSB0byB8IGlkXHUwMDNjXHUwMDNjMTY7XG4gNDc0Olx0XHRlbHNlIGlmICh0YltUQ0FfUk9VVEU0X0lJRl0pXG4gNDc1Olx0XHRcdGYtXHUwMDNlaWlmID0gaWQ7XG4gNDc2Olx0XG4gNDc3Olx0XHRmLVx1MDAzZWhhbmRsZSA9IG5oYW5kbGU7XG4gNDc4Olx0XHRmLVx1MDAzZWJrdCA9IGI7XG4gNDc5Olx0XHRmLVx1MDAzZXRwID0gdHA7XG4gNDgwOlx0XG4gNDgxOlx0XHRpZiAodGJbVENBX1JPVVRFNF9DTEFTU0lEXSkge1xuIDQ4MjpcdFx0XHRmLVx1MDAzZXJlcy5jbGFzc2lkID0gbmxhX2dldF91MzIodGJbVENBX1JPVVRFNF9DTEFTU0lEXSk7XG4gNDgzOlx0XHRcdHRjZl9iaW5kX2ZpbHRlcih0cCwgXHUwMDI2Zi1cdTAwM2VyZXMsIGJhc2UpO1xuIDQ4NDpcdFx0fVxuIDQ4NTpcdFxuIDQ4NjpcdFx0cmV0dXJuIDA7XG4gNDg3Olx0fVxuIDQ4ODpcdFxuIDQ4OTpcdHN0YXRpYyBpbnQgcm91dGU0X2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4gNDkwOlx0XHRcdFx0IHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB1bnNpZ25lZCBsb25nIGJhc2UsIHUzMiBoYW5kbGUsXG4gNDkxOlx0XHRcdFx0IHN0cnVjdCBubGF0dHIgKip0Y2EsIHZvaWQgKiphcmcsIHUzMiBmbGFncyxcbiA0OTI6XHRcdFx0XHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIDQ5MzpcdHtcbiA0OTQ6XHRcdHN0cnVjdCByb3V0ZTRfaGVhZCAqaGVhZCA9IHJ0bmxfZGVyZWZlcmVuY2UodHAtXHUwMDNlcm9vdCk7XG4gNDk1Olx0XHRzdHJ1Y3Qgcm91dGU0X2ZpbHRlciBfX3JjdSAqKmZwO1xuIDQ5NjpcdFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgKmZvbGQsICpmMSwgKnBmcCwgKmYgPSBOVUxMO1xuIDQ5NzpcdFx0c3RydWN0IHJvdXRlNF9idWNrZXQgKmI7XG4gNDk4Olx0XHRzdHJ1Y3QgbmxhdHRyICp0YltUQ0FfUk9VVEU0X01BWCAmIzQzOyAxXTtcbiA0OTk6XHRcdHVuc2lnbmVkIGludCBoO1xuIDUwMDpcdFx0aW50IGVycjtcbiA1MDE6XHRcdGJvb2wgbmV3ID0gdHJ1ZTtcbiA1MDI6XHRcbiA1MDM6XHRcdGlmICghaGFuZGxlKSB7XG4gNTA0Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7Q3JlYXRpbmcgd2l0aCBoYW5kbGUgb2YgMCBpcyBpbnZhbGlkXCYjMzQ7KTtcbiA1MDU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTA2Olx0XHR9XG4gNTA3Olx0XG4gNTA4Olx0XHRpZiAoTkxfUkVRX0FUVFJfQ0hFQ0soZXh0YWNrLCBOVUxMLCB0Y2EsIFRDQV9PUFRJT05TKSkge1xuIDUwOTpcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtNaXNzaW5nIG9wdGlvbnNcJiMzNDspO1xuIDUxMDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1MTE6XHRcdH1cbiA1MTI6XHRcbiA1MTM6XHRcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZCh0YiwgVENBX1JPVVRFNF9NQVgsIHRjYVtUQ0FfT1BUSU9OU10sXG4gNTE0Olx0XHRcdFx0XHRcdCAgcm91dGU0X3BvbGljeSwgTlVMTCk7XG4gNTE1Olx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuIDUxNjpcdFx0XHRyZXR1cm4gZXJyO1xuIDUxNzpcdFxuIDUxODpcdFx0Zm9sZCA9ICphcmc7XG4gNTE5Olx0XHRpZiAoZm9sZCBcdTAwMjZcdTAwMjYgZm9sZC1cdTAwM2VoYW5kbGUgIT0gaGFuZGxlKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAyMTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTI2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgYGNsc19yb3V0ZS5jYCBDb2RlKioKCk9rYXksIHNvIHdlJiMzOTt2ZSBhZGRyZXNzZWQgdGhlIGJyb2FkZXIgaXNzdWUsIGJ1dCBJIGhhdmUgYSBuYWdnaW5nIGZlZWxpbmcgd2UgbmVlZCB0byBiZSB0aG9yb3VnaC4gTGV0JiMzOTtzIG5vdCBqdXN0IGFzc3VtZTsgd2UgbmVlZCB0byB2ZXJpZnkuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gbGluZXMgNTIwIHRocm91Z2ggNTgwIG9mIGBjbHNfcm91dGUuY2AuIFRoaXMgc2VjdGlvbiAqZmVlbHMqIGxpa2UgYSBsaWtlbHkgYXJlYSBmb3IgdGhlIHByb2JsZW0gd2UgYXJlIGV4cGVyaWVuY2luZy4gSXTigJlzIHdoZXJlIGEgY3JpdGljYWwgcm91dGluZyBmdW5jdGlvbiBoYXBwZW5zLiBJIGNhbiBhbHJlYWR5IHBpY3R1cmUgdGhlIHBvdGVudGlhbCBsb2dpYyBmbG93IHRoZXJlLCBhbmQgdGhlIHNwZWNpZmljIHZhcmlhYmxlcyB0aGF0IG1pZ2h0IGJlIGludm9sdmVkLiBUaW1lIHRvIHJvbGwgdXAgbXkgc2xlZXZlcyBhbmQgc2VlIHdoYXQgdGhvc2UgbGluZXMgYXJlICpyZWFsbHkqIGRvaW5nLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBlZGdlIGNhc2VzLCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBvciBhbnl0aGluZyB0aGF0IGNvdWxkIGJlIHN1YnRseSBpbXBhY3RpbmcgdGhlIHJvdXRpbmcgZGVjaXNpb24uIEl04oCZcyBhbHdheXMgYmVzdCB0byBiZSBwcmVjaXNlIHdoZW4gaXQgY29tZXMgdG8gcHJvYmxlbXMgbGlrZSB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAyMTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfcm91dGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTIwOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTIxOlx0XG4gNTIyOlx0XHRlcnIgPSAtRU5PQlVGUztcbiA1MjM6XHRcdGYgPSBremFsbG9jX29iaihzdHJ1Y3Qgcm91dGU0X2ZpbHRlciwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiA1MjQ6XHRcdGlmICghZilcbiA1MjU6XHRcdFx0Z290byBlcnJvdXQ7XG4gNTI2Olx0XG4gNTI3Olx0XHRlcnIgPSB0Y2ZfZXh0c19pbml0KFx1MDAyNmYtXHUwMDNlZXh0cywgbmV0LCBUQ0FfUk9VVEU0X0FDVCwgVENBX1JPVVRFNF9QT0xJQ0UpO1xuIDUyODpcdFx0aWYgKGVyciBcdTAwM2MgMClcbiA1Mjk6XHRcdFx0Z290byBlcnJvdXQ7XG4gNTMwOlx0XG4gNTMxOlx0XHRpZiAoZm9sZCkge1xuIDUzMjpcdFx0XHRmLVx1MDAzZWlkID0gZm9sZC1cdTAwM2VpZDtcbiA1MzM6XHRcdFx0Zi1cdTAwM2VpaWYgPSBmb2xkLVx1MDAzZWlpZjtcbiA1MzQ6XHRcdFx0Zi1cdTAwM2VoYW5kbGUgPSBmb2xkLVx1MDAzZWhhbmRsZTtcbiA1MzU6XHRcbiA1MzY6XHRcdFx0Zi1cdTAwM2V0cCA9IGZvbGQtXHUwMDNldHA7XG4gNTM3Olx0XHRcdGYtXHUwMDNlYmt0ID0gZm9sZC1cdTAwM2Via3Q7XG4gNTM4Olx0XHRcdG5ldyA9IGZhbHNlO1xuIDUzOTpcdFx0fVxuIDU0MDpcdFxuIDU0MTpcdFx0ZXJyID0gcm91dGU0X3NldF9wYXJtcyhuZXQsIHRwLCBiYXNlLCBmLCBoYW5kbGUsIGhlYWQsIHRiLFxuIDU0MjpcdFx0XHRcdCAgICAgICB0Y2FbVENBX1JBVEVdLCBuZXcsIGZsYWdzLCBleHRhY2spO1xuIDU0MzpcdFx0aWYgKGVyciBcdTAwM2MgMClcbiA1NDQ6XHRcdFx0Z290byBlcnJvdXQ7XG4gNTQ1Olx0XG4gNTQ2Olx0XHRoID0gZnJvbV9oYXNoKGYtXHUwMDNlaGFuZGxlIFx1MDAzZVx1MDAzZSAxNik7XG4gNTQ3Olx0XHRmcCA9IFx1MDAyNmYtXHUwMDNlYmt0LVx1MDAzZWh0W2hdO1xuIDU0ODpcdFx0Zm9yIChwZnAgPSBydG5sX2RlcmVmZXJlbmNlKCpmcCk7XG4gNTQ5Olx0XHQgICAgIChmMSA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKSkgIT0gTlVMTDtcbiA1NTA6XHRcdCAgICAgZnAgPSBcdTAwMjZmMS1cdTAwM2VuZXh0KVxuIDU1MTpcdFx0XHRpZiAoZi1cdTAwM2VoYW5kbGUgXHUwMDNjIGYxLVx1MDAzZWhhbmRsZSlcbiA1NTI6XHRcdFx0XHRicmVhaztcbiA1NTM6XHRcbiA1NTQ6XHRcdHRjZl9ibG9ja19uZXRpZl9rZWVwX2RzdCh0cC1cdTAwM2VjaGFpbi1cdTAwM2VibG9jayk7XG4gNTU1Olx0XHRyY3VfYXNzaWduX3BvaW50ZXIoZi1cdTAwM2VuZXh0LCBmMSk7XG4gNTU2Olx0XHRyY3VfYXNzaWduX3BvaW50ZXIoKmZwLCBmKTtcbiA1NTc6XHRcbiA1NTg6XHRcdGlmIChmb2xkKSB7XG4gNTU5Olx0XHRcdGIgPSBmb2xkLVx1MDAzZWJrdDtcbiA1NjA6XHRcdFx0aCA9IGZyb21faGFzaChmb2xkLVx1MDAzZWhhbmRsZSBcdTAwM2VcdTAwM2UgMTYpO1xuIDU2MTpcdFx0XHRmcCA9IFx1MDAyNmItXHUwMDNlaHRbaF07XG4gNTYyOlx0XHRcdGZvciAocGZwID0gcnRubF9kZXJlZmVyZW5jZSgqZnApOyBwZnA7XG4gNTYzOlx0XHRcdCAgICAgZnAgPSBcdTAwMjZwZnAtXHUwMDNlbmV4dCwgcGZwID0gcnRubF9kZXJlZmVyZW5jZSgqZnApKSB7XG4gNTY0Olx0XHRcdFx0aWYgKHBmcCA9PSBmb2xkKSB7XG4gNTY1Olx0XHRcdFx0XHRyY3VfYXNzaWduX3BvaW50ZXIoKmZwLCBmb2xkLVx1MDAzZW5leHQpO1xuIDU2NjpcdFx0XHRcdFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZiLVx1MDAzZWZpbHRlcnNfcmVmKSkge1xuIDU2NzpcdFx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgdGggPSB0b19oYXNoKGZvbGQtXHUwMDNlaGFuZGxlKTtcbiA1Njg6XHRcbiA1Njk6XHRcdFx0XHRcdFx0UkNVX0lOSVRfUE9JTlRFUihoZWFkLVx1MDAzZXRhYmxlW3RoXSwgTlVMTCk7XG4gNTcwOlx0XHRcdFx0XHRcdGtmcmVlX3JjdShiLCByY3UpO1xuIDU3MTpcdFx0XHRcdFx0fVxuIDU3MjpcdFx0XHRcdFx0YnJlYWs7XG4gNTczOlx0XHRcdFx0fVxuIDU3NDpcdFx0XHR9XG4gNTc1Olx0XHR9XG4gNTc2Olx0XG4gNTc3Olx0XHRyb3V0ZTRfcmVzZXRfZmFzdG1hcChoZWFkLCBmb2xkKTtcbiA1Nzg6XHRcdCphcmcgPSBmO1xuIDU3OTpcdFx0aWYgKGZvbGQpIHtcbiA1ODA6XHRcdFx0dGNmX3VuYmluZF9maWx0ZXIodHAsIFx1MDAyNmZvbGQtXHUwMDNlcmVzKTtcbiA1ODE6XHRcdFx0dGNmX2V4dHNfZ2V0X25ldChcdTAwMjZmb2xkLVx1MDAzZWV4dHMpO1xuIDU4MjpcdFx0XHR0Y2ZfcXVldWVfd29yayhcdTAwMjZmb2xkLVx1MDAzZXJ3b3JrLCByb3V0ZTRfZGVsZXRlX2ZpbHRlcl93b3JrKTtcbiA1ODM6XHRcdH1cbiA1ODQ6XHRcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAyMTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTg4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqUmV2aWV3aW5nIENoYW5nZXMgaW4gYHJvdXRlNF9kZWxldGVgKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbiBhbmQgbWFrZSBhYnNvbHV0ZWx5IGNlcnRhaW4gSSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGNoYW5nZXMuIEkgbmVlZCB0byBjb21wcmVoZW5zaXZlbHkgcmV2aWV3IGByb3V0ZTRfZGVsZXRlYCDigJMgdGhlIGZ1bmN0aW9uIGl0c2VsZiwgaXRzIGltcGxlbWVudGF0aW9uLCBhbmQgaXRzIGludGVuZGVkIGJlaGF2aW9yLiBCdXQgdGhhdCYjMzk7cyBub3QgZW5vdWdoOyBJIGhhdmUgdG8gem9vbSBvdXQgYW5kIGNvbnNpZGVyIHRoZSBlbnRpcmUgZmlsZSBjb250ZXh0LiBJIHdhbnQgdG8gbG9vayBhdCBob3cgdGhpcyBkZWxldGlvbiBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCAqZXZlcnl0aGluZyogZWxzZSBpbiB0aGUgZmlsZSDigJMgYWxsIHRoZSBvdGhlciByb3V0ZXMsIGRhdGEgc3RydWN0dXJlcywgZGVwZW5kZW5jaWVzLCBlcnJvciBoYW5kbGluZy4uLiBldmVyeXRoaW5nIHRoYXQgY291bGQgcG9zc2libHkgYmUgdG91Y2hlZCBvciBpbmZsdWVuY2VkLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IGVkZ2UgY2FzZXMsIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIHRoZSB3aG9sZSBlbmNoaWxhZGEuIE5vIHN0b25lIHVudHVybmVkLiBBIHRob3JvdWdoIGFuYWx5c2lzIGlzIHRoZSBvbmx5IHdheSB0byBiZSBjb25maWRlbnQgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMjE6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvY2xzX3JvdXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMzMDpcdH1cbiAzMzE6XHRcbiAzMzI6XHRzdGF0aWMgaW50IHJvdXRlNF9kZWxldGUoc3RydWN0IHRjZl9wcm90byAqdHAsIHZvaWQgKmFyZywgYm9vbCAqbGFzdCxcbiAzMzM6XHRcdFx0XHQgYm9vbCBydG5sX2hlbGQsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiAzMzQ6XHR7XG4gMzM1Olx0XHRzdHJ1Y3Qgcm91dGU0X2hlYWQgKmhlYWQgPSBydG5sX2RlcmVmZXJlbmNlKHRwLVx1MDAzZXJvb3QpO1xuIDMzNjpcdFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgKmYgPSBhcmc7XG4gMzM3Olx0XHRzdHJ1Y3Qgcm91dGU0X2ZpbHRlciBfX3JjdSAqKmZwO1xuIDMzODpcdFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgKm5mO1xuIDMzOTpcdFx0c3RydWN0IHJvdXRlNF9idWNrZXQgKmI7XG4gMzQwOlx0XHR1bnNpZ25lZCBpbnQgaCA9IDA7XG4gMzQxOlx0XHRpbnQgaDE7XG4gMzQyOlx0XG4gMzQzOlx0XHRpZiAoIWhlYWQgfHwgIWYpXG4gMzQ0Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDM0NTpcdFxuIDM0NjpcdFx0aCA9IGYtXHUwMDNlaGFuZGxlO1xuIDM0NzpcdFx0YiA9IGYtXHUwMDNlYmt0O1xuIDM0ODpcdFxuIDM0OTpcdFx0ZnAgPSBcdTAwMjZiLVx1MDAzZWh0W2Zyb21faGFzaChoIFx1MDAzZVx1MDAzZSAxNildO1xuIDM1MDpcdFx0Zm9yIChuZiA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKTsgbmY7XG4gMzUxOlx0XHQgICAgIGZwID0gXHUwMDI2bmYtXHUwMDNlbmV4dCwgbmYgPSBydG5sX2RlcmVmZXJlbmNlKCpmcCkpIHtcbiAzNTI6XHRcdFx0aWYgKG5mID09IGYpIHtcbiAzNTM6XHRcdFx0XHQvKiB1bmxpbmsgaXQgKi9cbiAzNTQ6XHRcdFx0XHRSQ1VfSU5JVF9QT0lOVEVSKCpmcCwgcnRubF9kZXJlZmVyZW5jZShmLVx1MDAzZW5leHQpKTtcbiAzNTU6XHRcbiAzNTY6XHRcdFx0XHQvKiBDbGVhciBhbnkgZmFzdG1hcCBlbnRyaWVzIHRoYXQgbWF5IHJlZiB0aGlzIGZpbHRlciBhbmRcbiAzNTc6XHRcdFx0XHQgKiBtYXJrIGl0IGR5aW5nIHNvIGluLWZsaWdodCByZWFkZXJzIGNhbiYjMzk7dCByZXB1Ymxpc2ggaXRcbiAzNTg6XHRcdFx0XHQgKiBhZnRlciB0aGUgcmVzZXQuXG4gMzU5Olx0XHRcdFx0ICovXG4gMzYwOlx0XHRcdFx0cm91dGU0X3Jlc2V0X2Zhc3RtYXAoaGVhZCwgZik7XG4gMzYxOlx0XG4gMzYyOlx0XHRcdFx0LyogRGVsZXRlIGl0ICovXG4gMzYzOlx0XHRcdFx0dGNmX3VuYmluZF9maWx0ZXIodHAsIFx1MDAyNmYtXHUwMDNlcmVzKTtcbiAzNjQ6XHRcdFx0XHR0Y2ZfZXh0c19nZXRfbmV0KFx1MDAyNmYtXHUwMDNlZXh0cyk7XG4gMzY1Olx0XHRcdFx0dGNmX3F1ZXVlX3dvcmsoXHUwMDI2Zi1cdTAwM2Vyd29yaywgcm91dGU0X2RlbGV0ZV9maWx0ZXJfd29yayk7XG4gMzY2Olx0XG4gMzY3Olx0XHRcdFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZiLVx1MDAzZWZpbHRlcnNfcmVmKSkge1xuIDM2ODpcdFx0XHRcdFx0UkNVX0lOSVRfUE9JTlRFUihoZWFkLVx1MDAzZXRhYmxlW3RvX2hhc2goaCldLCBOVUxMKTtcbiAzNjk6XHRcdFx0XHRcdGtmcmVlX3JjdShiLCByY3UpO1xuIDM3MDpcdFx0XHRcdH1cbiAzNzE6XHRcdFx0XHRicmVhaztcbiAzNzI6XHRcdFx0fVxuIDM3MzpcdFx0fVxuIDM3NDpcdFxuIDM3NTpcdFx0Kmxhc3QgPSB0cnVlO1xuIDM3NjpcdFx0Zm9yIChoMSA9IDA7IGgxIFx1MDAzYz0gMjU2OyBoMSYjNDM7JiM0MzspIHtcbiAzNzc6XHRcdFx0aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihoZWFkLVx1MDAzZXRhYmxlW2gxXSkpIHtcbiAzNzg6XHRcdFx0XHQqbGFzdCA9IGZhbHNlO1xuIDM3OTpcdFx0XHRcdGJyZWFrO1xuIDM4MDpcdFx0XHR9XG4gMzgxOlx0XHR9XG4gMzgyOlx0XG4gMzgzOlx0XHRyZXR1cm4gMDtcbiAzODQ6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDIxOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMzIKCQkJCQkJCW91dHB1dDogMjQ5CgkJCQkJCQl0aG91Z2h0czogODU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzOiBOZWVkc0tNU0FOID0gZmFsc2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgcmVmZXJlbmNlIGNvdW50LCBgZmlsdGVyc19yZWZgLCB0byB0aGUgYHN0cnVjdCByb3V0ZTRfYnVja2V0YC4gTXkgZ29hbCBoZXJlIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIGNoYW5nZSByZXF1aXJlcyBLTVNBTiwgb3IgS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIsIGF0dGVudGlvbi4KCkZpcnN0LCBJJiMzOTttIG5vdGluZyB0aGUgY2hhbmdlcy4gVGhlIGByb3V0ZTRfYnVja2V0YCBub3cgaGFzIHRoZSBgZmlsdGVyc19yZWZgIG1lbWJlci4gIGByb3V0ZTRfc2V0X3Bhcm1zYCBpbml0aWFsaXplcyB0aGlzIGNvdW50IHRvIDEgd2hlbiBhIG5ldyBidWNrZXQgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqYCwgYW5kIGluY3JlbWVudHMgaXQgd2hlbiBmaWx0ZXJzIGFyZSBhZGRlZC4gYHJvdXRlNF9kZWxldGVgIGRlY3JlbWVudHMgdGhlIGNvdW50LCBmcmVlaW5nIHRoZSBidWNrZXQgaWYgaXQgaGl0cyB6ZXJvIHVzaW5nIGBrZnJlZV9yY3VgLiBgcm91dGU0X2NoYW5nZWAgaGFuZGxlcyBmaWx0ZXIgcmVwbGFjZW1lbnRzIHNpbWlsYXJseSwgZGVjcmVtZW50aW5nIGFuZCBmcmVlaW5nIHRoZSBvbGQgYnVja2V0LiBUaGUgd2hvbGUgdGhpbmcgaGluZ2VzIG9uIGEgYHJlZmNvdW50X3RgLgoKTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgYWx3YXlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvZiBjb3Vyc2UuICBCdXQgYGt6YWxsb2Nfb2JqYCBndWFyYW50ZWVzIHplcm8taW5pdGlhbGl6YXRpb24gb2YgdGhlIGByb3V0ZTRfYnVja2V0YCwgYW5kIHRoZSBgcmVmY291bnRfc2V0YCBleHBsaWNpdGx5IGluaXRpYWxpemVzIHRoZSBgZmlsdGVyc19yZWZgIG1lbWJlci4gSSYjMzk7bSBzZWVpbmcgbm8gbmV3IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMsIG5vIGtlcm5lbC10by11c2VyIG1lbW9yeSBjb3BpZXMgdGhhdCBjb3VsZCBsZWFrIGluZm9ybWF0aW9uLCBhbmQgbm8gY29udHJvbCBmbG93IGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEV4Y2VsbGVudC4KCk5vdywgd2hhdCBhYm91dCBwb3RlbnRpYWwgYnVncz8gSSYjMzk7bSB0aGlua2luZyByZWZlcmVuY2UgY291bnRpbmcgcHJvYmxlbXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZXMsIG1lbW9yeSBsZWFrcywgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuICBIb3dldmVyLCB0aGVzZSBhcmUgdGhpbmdzIHRoYXQgS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikgYW5kIHN0YW5kYXJkIGRlYnVnZ2VycyB3aXRoIHJlZmNvdW50IHVuZGVyL292ZXJmbG93IGNoZWNrcyBhcmUgZGVzaWduZWQgdG8gY2F0Y2guICBDcnVjaWFsbHksIHRoZXNlIGJ1Z3MgKmRvbiYjMzk7dCogaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ28gZG93biB0aGUgS01TQU4gY2hlY2tsaXN0LgoKMS4gIERvZXMgdGhlIHBhdGNoIHRvdWNoIGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSB3aGVyZSBmaWVsZHMgbWlnaHQgYmUgdW5pbml0aWFsaXplZD8gTm9wZSwgbm90aGluZyBpcyBtb2RpZmllZCByZWdhcmRpbmcgc3RydWN0dXJlcyB0aGF0IGFyZSBzZW50IHRvIHVzZXIgc3BhY2UuCjIuICBEb2VzIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm8sIHRoZSBgZmlsdGVyc19yZWZgIGlzIGluaXRpYWxpemVkIG9uIGFsbG9jYXRpb24uCjMuICBEb2VzIGl0IGludHJvZHVjZSBhbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHMgdGhhdCBjb3VsZCBiZSByZWFkIGxhdGVyPyBObywgYGt6YWxsb2Nfb2JqYCBhbmQgYHJlZmNvdW50X3NldGAgaGFuZGxlcyB0aGF0Lgo0LiAgRG9lcyBpdCBtZXNzIHdpdGggYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBhbGxvd3MgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXM/IE5vLgoKT2theSwgbGV0JiMzOTtzIGZsaXAgdGhlIGNoZWNrbGlzdCBvbiBpdHMgaGVhZC4gVGhpcyBwYXRjaCAqZG9lc24mIzM5O3QqIGludHJvZHVjZSBhbnk6CgoqICAgT3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKGJleW9uZCB0aGUgcmVmY291bnRpbmcgZXJyb3JzLCBhbHJlYWR5IGNvdmVyZWQgYnkgS0FTQU4pLgoqICAgVW5pbml0aWFsaXplZCBkYXRhIGJlaW5nIHJlYWQgb3IgY29waWVkLgoqICAgUmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVGhlcmVmb3JlLCB0aGUgY29uY2x1c2lvbiBpcyBjbGVhcjogYE5lZWRzS01TQU4gPSBmYWxzZWAuIEkgY2FuIHByb2NlZWQgdG8gY29uc3RydWN0IHRoZSBgc2V0LXJlc3VsdHNgIGNhbGwgd2l0aCB0aGlzIGluZm9ybWF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAyMTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgcmVmZXJlbmNlIGNvdW50ZXIgKGBmaWx0ZXJzX3JlZmApIHRvIGBzdHJ1Y3Qgcm91dGU0X2J1Y2tldGAgaW4gYG5ldC9zY2hlZC9jbHNfcm91dGUuY2AgdG8gdHJhY2sgYWN0aXZlIGZpbHRlcnMgaW4gZWFjaCBidWNrZXQgYW5kIG1hbmFnZSBidWNrZXQgcmVjbGFtYXRpb24gdmlhIFJDVSwgcmVwbGFjaW5nIGEgbGluZWFyIHNjYW4gb2YgYnVja2V0IHNsb3RzLlxuXG4tIE1lbW9yeSBJbml0aWFsaXphdGlvbjogVGhlIGJ1Y2tldCBzdHJ1Y3R1cmUgYHN0cnVjdCByb3V0ZTRfYnVja2V0YCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqKClgIGFuZCBgZmlsdGVyc19yZWZgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgd2l0aCBgcmVmY291bnRfc2V0KFx1MDAyNmItXHUwMDNlZmlsdGVyc19yZWYsIDEpYCB1cG9uIGNyZWF0aW9uLlxuLSBQb3RlbnRpYWwgQnVnIFR5cGVzOiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhpcyByZWZhY3RvcmluZyAoZS5nLiBpbmNvcnJlY3QgcmVmZXJlbmNlIGNvdW50aW5nLCBkb3VibGUgZnJlZXMsIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMpIGFyZSBtZW1vcnkgbGlmZWN5Y2xlIC8gcG9pbnRlciB2YWxpZGl0eSBidWdzIHRoYXQgYXJlIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCB0aGUgYHJlZmNvdW50X3RgIHJ1bnRpbWUgY2hlY2tzLlxuLSBVbmluaXRpYWxpemVkIE1lbW9yeSAvIEluZm8tbGVhayBSaXNrOiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZSBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIGJyYW5jaGluZyBkZWNpc2lvbnMuXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSByZWZlcmVuY2UgY291bnRlciAoYGZpbHRlcnNfcmVmYCkgdG8gYHN0cnVjdCByb3V0ZTRfYnVja2V0YCBpbiBgbmV0L3NjaGVkL2Nsc19yb3V0ZS5jYCB0byB0cmFjayBhY3RpdmUgZmlsdGVycyBpbiBlYWNoIGJ1Y2tldCBhbmQgbWFuYWdlIGJ1Y2tldCByZWNsYW1hdGlvbiB2aWEgUkNVLCByZXBsYWNpbmcgYSBsaW5lYXIgc2NhbiBvZiBidWNrZXQgc2xvdHMuXG5cbi0gTWVtb3J5IEluaXRpYWxpemF0aW9uOiBUaGUgYnVja2V0IHN0cnVjdHVyZSBgc3RydWN0IHJvdXRlNF9idWNrZXRgIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmooKWAgYW5kIGBmaWx0ZXJzX3JlZmAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB3aXRoIGByZWZjb3VudF9zZXQoXHUwMDI2Yi1cdTAwM2VmaWx0ZXJzX3JlZiwgMSlgIHVwb24gY3JlYXRpb24uXG4tIFBvdGVudGlhbCBCdWcgVHlwZXM6IEFueSBwb3RlbnRpYWwgYnVncyByZXN1bHRpbmcgZnJvbSB0aGlzIHJlZmFjdG9yaW5nIChlLmcuIGluY29ycmVjdCByZWZlcmVuY2UgY291bnRpbmcsIGRvdWJsZSBmcmVlcywgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucykgYXJlIG1lbW9yeSBsaWZlY3ljbGUgLyBwb2ludGVyIHZhbGlkaXR5IGJ1Z3MgdGhhdCBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHRoZSBgcmVmY291bnRfdGAgcnVudGltZSBjaGVja3MuXG4tIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IC8gSW5mby1sZWFrIFJpc2s6IFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0dXJlIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gYnJhbmNoaW5nIGRlY2lzaW9ucy5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMTo1NToyMS42MDAzMDY5MTVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTAzOTE0ODI1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfQ0xTX1JPVVRFNFwiLFxuICAgIFwiTkVUX1NDSEVEXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicm91dGU0X2NoYW5nZVwiLFxuICAgIFwicm91dGU0X2RlbGV0ZVwiLFxuICAgIFwicm91dGU0X3NldF9wYXJtc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHJlZmVyZW5jZSBjb3VudGVyIChgZmlsdGVyc19yZWZgKSB0byBgc3RydWN0IHJvdXRlNF9idWNrZXRgIGluIGBuZXQvc2NoZWQvY2xzX3JvdXRlLmNgIHRvIHRyYWNrIGFjdGl2ZSBmaWx0ZXJzIGluIGVhY2ggYnVja2V0IGFuZCBtYW5hZ2UgYnVja2V0IHJlY2xhbWF0aW9uIHZpYSBSQ1UsIHJlcGxhY2luZyBhIGxpbmVhciBzY2FuIG9mIGJ1Y2tldCBzbG90cy5cXG5cXG4tIE1lbW9yeSBJbml0aWFsaXphdGlvbjogVGhlIGJ1Y2tldCBzdHJ1Y3R1cmUgYHN0cnVjdCByb3V0ZTRfYnVja2V0YCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqKClgIGFuZCBgZmlsdGVyc19yZWZgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgd2l0aCBgcmVmY291bnRfc2V0KFxcdTAwMjZiLVxcdTAwM2VmaWx0ZXJzX3JlZiwgMSlgIHVwb24gY3JlYXRpb24uXFxuLSBQb3RlbnRpYWwgQnVnIFR5cGVzOiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhpcyByZWZhY3RvcmluZyAoZS5nLiBpbmNvcnJlY3QgcmVmZXJlbmNlIGNvdW50aW5nLCBkb3VibGUgZnJlZXMsIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMpIGFyZSBtZW1vcnkgbGlmZWN5Y2xlIC8gcG9pbnRlciB2YWxpZGl0eSBidWdzIHRoYXQgYXJlIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCB0aGUgYHJlZmNvdW50X3RgIHJ1bnRpbWUgY2hlY2tzLlxcbi0gVW5pbml0aWFsaXplZCBNZW1vcnkgLyBJbmZvLWxlYWsgUmlzazogVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3R1cmUgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBicmFuY2hpbmcgZGVjaXNpb25zLlxcblxcblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcm91dGU0IGNsYXNzaWZpZXIgKGNsc19yb3V0ZSkgaW4gdGhlIHRyYWZmaWMgY29udHJvbCBzdWJzeXN0ZW0gYnkgaW50cm9kdWNpbmcgcmVmY291bnRpbmcgKGZpbHRlcnNfcmVmKSB0byBtYW5hZ2UgdGhlIGxpZmV0aW1lIGFuZCBkZWFsbG9jYXRpb24gb2Ygcm91dGU0IGJ1Y2tldHMgZHVyaW5nIGZpbHRlciBpbnNlcnRpb24sIHJlcGxhY2VtZW50LCBhbmQgZGVsZXRpb24uIFRoaXMgaXMgY29yZSBuZXR3b3JraW5nIGNvZGUgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIHRyYWZmaWMgY29udHJvbCBpbnRlcmZhY2VzIGFuZCBhZmZlY3RzIG1lbW9yeSBzYWZldHkgLyBsaWZldGltZSBtYW5hZ2VtZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMTo1NToyMS42MDAzMTA2OTVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDIzMzYyNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1ZGIzODdjM2Y5M2Y0ZTRiMTM4OTIzMjgxNGE1MjczYWE1MjIyMmQ0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDI5IDIxOjU1OjIwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfcm91dGUuYyBiL25ldC9zY2hlZC9jbHNfcm91dGUuY1xcbmluZGV4IDBkMTMyNGM5MDU4MzcuLjE3YjBlYmI3NjY2MjYgMTAwNjQ0XFxuLS0tIGEvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jXFxuKysrIGIvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jXFxuQEAgLTExLDYgKzExLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RyaW5nLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9lcnJuby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcmVmY291bnQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NrYnVmZi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2RzdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3JvdXRlLmhcXHUwMDNlXFxuQEAgLTQxLDYgKzQyLDcgQEAgc3RydWN0IHJvdXRlNF9oZWFkIHtcXG4gc3RydWN0IHJvdXRlNF9idWNrZXQge1xcbiBcXHQvKiAxNiBGUk9NIGJ1Y2tldHMgKyAxNiBJSUYgYnVja2V0cyArIDEgd2lsZGNhcmQgYnVja2V0ICovXFxuIFxcdHN0cnVjdCByb3V0ZTRfZmlsdGVyIF9fcmN1XFx0Kmh0WzE2ICsgMTYgKyAxXTtcXG4rXFx0cmVmY291bnRfdFxcdFxcdFxcdGZpbHRlcnNfcmVmO1xcbiBcXHRzdHJ1Y3QgcmN1X2hlYWRcXHRcXHRcXHRyY3U7XFxuIH07XFxuIFxcbkBAIC0zMzYsNyArMzM4LDcgQEAgc3RhdGljIGludCByb3V0ZTRfZGVsZXRlKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB2b2lkICphcmcsIGJvb2wgKmxhc3QsXFxuIFxcdHN0cnVjdCByb3V0ZTRfZmlsdGVyICpuZjtcXG4gXFx0c3RydWN0IHJvdXRlNF9idWNrZXQgKmI7XFxuIFxcdHVuc2lnbmVkIGludCBoID0gMDtcXG4tXFx0aW50IGksIGgxO1xcbitcXHRpbnQgaDE7XFxuIFxcbiBcXHRpZiAoIWhlYWQgfHwgIWYpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbkBAIC0zNjIsMjMgKzM2NCwxNCBAQCBzdGF0aWMgaW50IHJvdXRlNF9kZWxldGUoc3RydWN0IHRjZl9wcm90byAqdHAsIHZvaWQgKmFyZywgYm9vbCAqbGFzdCxcXG4gXFx0XFx0XFx0dGNmX2V4dHNfZ2V0X25ldChcXHUwMDI2Zi1cXHUwMDNlZXh0cyk7XFxuIFxcdFxcdFxcdHRjZl9xdWV1ZV93b3JrKFxcdTAwMjZmLVxcdTAwM2Vyd29yaywgcm91dGU0X2RlbGV0ZV9maWx0ZXJfd29yayk7XFxuIFxcbi1cXHRcXHRcXHQvKiBTdHJpcCBSVE5MIHByb3RlY3RlZCB0cmVlICovXFxuLVxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYz0gMzI7IGkrKykge1xcbi1cXHRcXHRcXHRcXHRzdHJ1Y3Qgcm91dGU0X2ZpbHRlciAqcnQ7XFxuLVxcbi1cXHRcXHRcXHRcXHRydCA9IHJ0bmxfZGVyZWZlcmVuY2UoYi1cXHUwMDNlaHRbaV0pO1xcbi1cXHRcXHRcXHRcXHRpZiAocnQpXFxuLVxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHRcXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZiLVxcdTAwM2VmaWx0ZXJzX3JlZikpIHtcXG4rXFx0XFx0XFx0XFx0UkNVX0lOSVRfUE9JTlRFUihoZWFkLVxcdTAwM2V0YWJsZVt0b19oYXNoKGgpXSwgTlVMTCk7XFxuK1xcdFxcdFxcdFxcdGtmcmVlX3JjdShiLCByY3UpO1xcbiBcXHRcXHRcXHR9XFxuLVxcbi1cXHRcXHRcXHQvKiBPSywgc2Vzc2lvbiBoYXMgbm8gZmxvd3MgKi9cXG4tXFx0XFx0XFx0UkNVX0lOSVRfUE9JTlRFUihoZWFkLVxcdTAwM2V0YWJsZVt0b19oYXNoKGgpXSwgTlVMTCk7XFxuLVxcdFxcdFxcdGtmcmVlX3JjdShiLCByY3UpO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1vdXQ6XFxuIFxcdCpsYXN0ID0gdHJ1ZTtcXG4gXFx0Zm9yIChoMSA9IDA7IGgxIFxcdTAwM2M9IDI1NjsgaDErKykge1xcbiBcXHRcXHRpZiAocmN1X2FjY2Vzc19wb2ludGVyKGhlYWQtXFx1MDAzZXRhYmxlW2gxXSkpIHtcXG5AQCAtNDU5LDYgKzQ1Miw3IEBAIHN0YXRpYyBpbnQgcm91dGU0X3NldF9wYXJtcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxcbiBcXHRcXHRpZiAoYiA9PSBOVUxMKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVOT0JVRlM7XFxuIFxcbitcXHRcXHRyZWZjb3VudF9zZXQoXFx1MDAyNmItXFx1MDAzZWZpbHRlcnNfcmVmLCAxKTtcXG4gXFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKGhlYWQtXFx1MDAzZXRhYmxlW2gxXSwgYik7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHVuc2lnbmVkIGludCBoMiA9IGZyb21faGFzaChuaGFuZGxlIFxcdTAwM2VcXHUwMDNlIDE2KTtcXG5AQCAtNDY4LDYgKzQ2Miw4IEBAIHN0YXRpYyBpbnQgcm91dGU0X3NldF9wYXJtcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxcbiBcXHRcXHQgICAgIGZwID0gcnRubF9kZXJlZmVyZW5jZShmcC1cXHUwMDNlbmV4dCkpXFxuIFxcdFxcdFxcdGlmIChmcC1cXHUwMDNlaGFuZGxlID09IGYtXFx1MDAzZWhhbmRsZSlcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuK1xcbitcXHRcXHRyZWZjb3VudF9pbmMoXFx1MDAyNmItXFx1MDAzZWZpbHRlcnNfcmVmKTtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKHRiW1RDQV9ST1VURTRfVE9dKVxcbkBAIC01MDAsNyArNDk2LDcgQEAgc3RhdGljIGludCByb3V0ZTRfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcXG4gXFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgKmZvbGQsICpmMSwgKnBmcCwgKmYgPSBOVUxMO1xcbiBcXHRzdHJ1Y3Qgcm91dGU0X2J1Y2tldCAqYjtcXG4gXFx0c3RydWN0IG5sYXR0ciAqdGJbVENBX1JPVVRFNF9NQVggKyAxXTtcXG4tXFx0dW5zaWduZWQgaW50IGgsIHRoO1xcbitcXHR1bnNpZ25lZCBpbnQgaDtcXG4gXFx0aW50IGVycjtcXG4gXFx0Ym9vbCBuZXcgPSB0cnVlO1xcbiBcXG5AQCAtNTYwLDE3ICs1NTYsMjAgQEAgc3RhdGljIGludCByb3V0ZTRfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcXG4gXFx0cmN1X2Fzc2lnbl9wb2ludGVyKCpmcCwgZik7XFxuIFxcbiBcXHRpZiAoZm9sZCkge1xcbi1cXHRcXHR0aCA9IHRvX2hhc2goZm9sZC1cXHUwMDNlaGFuZGxlKTtcXG4rXFx0XFx0YiA9IGZvbGQtXFx1MDAzZWJrdDtcXG4gXFx0XFx0aCA9IGZyb21faGFzaChmb2xkLVxcdTAwM2VoYW5kbGUgXFx1MDAzZVxcdTAwM2UgMTYpO1xcbi1cXHRcXHRiID0gcnRubF9kZXJlZmVyZW5jZShoZWFkLVxcdTAwM2V0YWJsZVt0aF0pO1xcbi1cXHRcXHRpZiAoYikge1xcbi1cXHRcXHRcXHRmcCA9IFxcdTAwMjZiLVxcdTAwM2VodFtoXTtcXG4tXFx0XFx0XFx0Zm9yIChwZnAgPSBydG5sX2RlcmVmZXJlbmNlKCpmcCk7IHBmcDtcXG4tXFx0XFx0XFx0ICAgICBmcCA9IFxcdTAwMjZwZnAtXFx1MDAzZW5leHQsIHBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKSkge1xcbi1cXHRcXHRcXHRcXHRpZiAocGZwID09IGZvbGQpIHtcXG4tXFx0XFx0XFx0XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKCpmcCwgZm9sZC1cXHUwMDNlbmV4dCk7XFxuLVxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRmcCA9IFxcdTAwMjZiLVxcdTAwM2VodFtoXTtcXG4rXFx0XFx0Zm9yIChwZnAgPSBydG5sX2RlcmVmZXJlbmNlKCpmcCk7IHBmcDtcXG4rXFx0XFx0ICAgICBmcCA9IFxcdTAwMjZwZnAtXFx1MDAzZW5leHQsIHBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKSkge1xcbitcXHRcXHRcXHRpZiAocGZwID09IGZvbGQpIHtcXG4rXFx0XFx0XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKCpmcCwgZm9sZC1cXHUwMDNlbmV4dCk7XFxuK1xcdFxcdFxcdFxcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNmItXFx1MDAzZWZpbHRlcnNfcmVmKSkge1xcbitcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgdGggPSB0b19oYXNoKGZvbGQtXFx1MDAzZWhhbmRsZSk7XFxuK1xcbitcXHRcXHRcXHRcXHRcXHRSQ1VfSU5JVF9QT0lOVEVSKGhlYWQtXFx1MDAzZXRhYmxlW3RoXSwgTlVMTCk7XFxuK1xcdFxcdFxcdFxcdFxcdGtmcmVlX3JjdShiLCByY3UpO1xcbiBcXHRcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4gXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMTo1NToyMy4xNDMzMjM1NTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM2MjAyNjYxNjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9DTFNfUk9VVEU0XCIsXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyb3V0ZTRfY2hhbmdlXCIsXG4gICAgXCJyb3V0ZTRfZGVsZXRlXCIsXG4gICAgXCJyb3V0ZTRfc2V0X3Bhcm1zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJvdXRlNCBjbGFzc2lmaWVyIChjbHNfcm91dGUpIGluIHRoZSB0cmFmZmljIGNvbnRyb2wgc3Vic3lzdGVtIGJ5IGludHJvZHVjaW5nIHJlZmNvdW50aW5nIChmaWx0ZXJzX3JlZikgdG8gbWFuYWdlIHRoZSBsaWZldGltZSBhbmQgZGVhbGxvY2F0aW9uIG9mIHJvdXRlNCBidWNrZXRzIGR1cmluZyBmaWx0ZXIgaW5zZXJ0aW9uLCByZXBsYWNlbWVudCwgYW5kIGRlbGV0aW9uLiBUaGlzIGlzIGNvcmUgbmV0d29ya2luZyBjb2RlIHJlYWNoYWJsZSB2aWEgbmV0bGluayB0cmFmZmljIGNvbnRyb2wgaW50ZXJmYWNlcyBhbmQgYWZmZWN0cyBtZW1vcnkgc2FmZXR5IC8gbGlmZXRpbWUgbWFuYWdlbWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNWRiMzg3YzNmOTNmNGU0YjEzODkyMzI4MTRhNTI3M2FhNTIyMjJkNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDI5IDIxOjU1OjIwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jIGIvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jXG5pbmRleCAwZDEzMjRjOTA1ODM3Li4xN2IwZWJiNzY2NjI2IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jXG4rKysgYi9uZXQvc2NoZWQvY2xzX3JvdXRlLmNcbkBAIC0xMSw2ICsxMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vycm5vLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWZjb3VudC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZHN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcm91dGUuaFx1MDAzZVxuQEAgLTQxLDYgKzQyLDcgQEAgc3RydWN0IHJvdXRlNF9oZWFkIHtcbiBzdHJ1Y3Qgcm91dGU0X2J1Y2tldCB7XG4gXHQvKiAxNiBGUk9NIGJ1Y2tldHMgKyAxNiBJSUYgYnVja2V0cyArIDEgd2lsZGNhcmQgYnVja2V0ICovXG4gXHRzdHJ1Y3Qgcm91dGU0X2ZpbHRlciBfX3JjdVx0Kmh0WzE2ICsgMTYgKyAxXTtcbitcdHJlZmNvdW50X3RcdFx0XHRmaWx0ZXJzX3JlZjtcbiBcdHN0cnVjdCByY3VfaGVhZFx0XHRcdHJjdTtcbiB9O1xuIFxuQEAgLTMzNiw3ICszMzgsNyBAQCBzdGF0aWMgaW50IHJvdXRlNF9kZWxldGUoc3RydWN0IHRjZl9wcm90byAqdHAsIHZvaWQgKmFyZywgYm9vbCAqbGFzdCxcbiBcdHN0cnVjdCByb3V0ZTRfZmlsdGVyICpuZjtcbiBcdHN0cnVjdCByb3V0ZTRfYnVja2V0ICpiO1xuIFx0dW5zaWduZWQgaW50IGggPSAwO1xuLVx0aW50IGksIGgxO1xuK1x0aW50IGgxO1xuIFxuIFx0aWYgKCFoZWFkIHx8ICFmKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0zNjIsMjMgKzM2NCwxNCBAQCBzdGF0aWMgaW50IHJvdXRlNF9kZWxldGUoc3RydWN0IHRjZl9wcm90byAqdHAsIHZvaWQgKmFyZywgYm9vbCAqbGFzdCxcbiBcdFx0XHR0Y2ZfZXh0c19nZXRfbmV0KFx1MDAyNmYtXHUwMDNlZXh0cyk7XG4gXHRcdFx0dGNmX3F1ZXVlX3dvcmsoXHUwMDI2Zi1cdTAwM2Vyd29yaywgcm91dGU0X2RlbGV0ZV9maWx0ZXJfd29yayk7XG4gXG4tXHRcdFx0LyogU3RyaXAgUlROTCBwcm90ZWN0ZWQgdHJlZSAqL1xuLVx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjPSAzMjsgaSsrKSB7XG4tXHRcdFx0XHRzdHJ1Y3Qgcm91dGU0X2ZpbHRlciAqcnQ7XG4tXG4tXHRcdFx0XHRydCA9IHJ0bmxfZGVyZWZlcmVuY2UoYi1cdTAwM2VodFtpXSk7XG4tXHRcdFx0XHRpZiAocnQpXG4tXHRcdFx0XHRcdGdvdG8gb3V0O1xuK1x0XHRcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2Yi1cdTAwM2VmaWx0ZXJzX3JlZikpIHtcbitcdFx0XHRcdFJDVV9JTklUX1BPSU5URVIoaGVhZC1cdTAwM2V0YWJsZVt0b19oYXNoKGgpXSwgTlVMTCk7XG4rXHRcdFx0XHRrZnJlZV9yY3UoYiwgcmN1KTtcbiBcdFx0XHR9XG4tXG4tXHRcdFx0LyogT0ssIHNlc3Npb24gaGFzIG5vIGZsb3dzICovXG4tXHRcdFx0UkNVX0lOSVRfUE9JTlRFUihoZWFkLVx1MDAzZXRhYmxlW3RvX2hhc2goaCldLCBOVUxMKTtcbi1cdFx0XHRrZnJlZV9yY3UoYiwgcmN1KTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFx0fVxuIFxuLW91dDpcbiBcdCpsYXN0ID0gdHJ1ZTtcbiBcdGZvciAoaDEgPSAwOyBoMSBcdTAwM2M9IDI1NjsgaDErKykge1xuIFx0XHRpZiAocmN1X2FjY2Vzc19wb2ludGVyKGhlYWQtXHUwMDNldGFibGVbaDFdKSkge1xuQEAgLTQ1OSw2ICs0NTIsNyBAQCBzdGF0aWMgaW50IHJvdXRlNF9zZXRfcGFybXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCxcbiBcdFx0aWYgKGIgPT0gTlVMTClcbiBcdFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4gXG4rXHRcdHJlZmNvdW50X3NldChcdTAwMjZiLVx1MDAzZWZpbHRlcnNfcmVmLCAxKTtcbiBcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGhlYWQtXHUwMDNldGFibGVbaDFdLCBiKTtcbiBcdH0gZWxzZSB7XG4gXHRcdHVuc2lnbmVkIGludCBoMiA9IGZyb21faGFzaChuaGFuZGxlIFx1MDAzZVx1MDAzZSAxNik7XG5AQCAtNDY4LDYgKzQ2Miw4IEBAIHN0YXRpYyBpbnQgcm91dGU0X3NldF9wYXJtcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxuIFx0XHQgICAgIGZwID0gcnRubF9kZXJlZmVyZW5jZShmcC1cdTAwM2VuZXh0KSlcbiBcdFx0XHRpZiAoZnAtXHUwMDNlaGFuZGxlID09IGYtXHUwMDNlaGFuZGxlKVxuIFx0XHRcdFx0cmV0dXJuIC1FRVhJU1Q7XG4rXG4rXHRcdHJlZmNvdW50X2luYyhcdTAwMjZiLVx1MDAzZWZpbHRlcnNfcmVmKTtcbiBcdH1cbiBcbiBcdGlmICh0YltUQ0FfUk9VVEU0X1RPXSlcbkBAIC01MDAsNyArNDk2LDcgQEAgc3RhdGljIGludCByb3V0ZTRfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcdHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmb2xkLCAqZjEsICpwZnAsICpmID0gTlVMTDtcbiBcdHN0cnVjdCByb3V0ZTRfYnVja2V0ICpiO1xuIFx0c3RydWN0IG5sYXR0ciAqdGJbVENBX1JPVVRFNF9NQVggKyAxXTtcbi1cdHVuc2lnbmVkIGludCBoLCB0aDtcbitcdHVuc2lnbmVkIGludCBoO1xuIFx0aW50IGVycjtcbiBcdGJvb2wgbmV3ID0gdHJ1ZTtcbiBcbkBAIC01NjAsMTcgKzU1NiwyMCBAQCBzdGF0aWMgaW50IHJvdXRlNF9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuIFx0cmN1X2Fzc2lnbl9wb2ludGVyKCpmcCwgZik7XG4gXG4gXHRpZiAoZm9sZCkge1xuLVx0XHR0aCA9IHRvX2hhc2goZm9sZC1cdTAwM2VoYW5kbGUpO1xuK1x0XHRiID0gZm9sZC1cdTAwM2Via3Q7XG4gXHRcdGggPSBmcm9tX2hhc2goZm9sZC1cdTAwM2VoYW5kbGUgXHUwMDNlXHUwMDNlIDE2KTtcbi1cdFx0YiA9IHJ0bmxfZGVyZWZlcmVuY2UoaGVhZC1cdTAwM2V0YWJsZVt0aF0pO1xuLVx0XHRpZiAoYikge1xuLVx0XHRcdGZwID0gXHUwMDI2Yi1cdTAwM2VodFtoXTtcbi1cdFx0XHRmb3IgKHBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKTsgcGZwO1xuLVx0XHRcdCAgICAgZnAgPSBcdTAwMjZwZnAtXHUwMDNlbmV4dCwgcGZwID0gcnRubF9kZXJlZmVyZW5jZSgqZnApKSB7XG4tXHRcdFx0XHRpZiAocGZwID09IGZvbGQpIHtcbi1cdFx0XHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKCpmcCwgZm9sZC1cdTAwM2VuZXh0KTtcbi1cdFx0XHRcdFx0YnJlYWs7XG4rXHRcdGZwID0gXHUwMDI2Yi1cdTAwM2VodFtoXTtcbitcdFx0Zm9yIChwZnAgPSBydG5sX2RlcmVmZXJlbmNlKCpmcCk7IHBmcDtcbitcdFx0ICAgICBmcCA9IFx1MDAyNnBmcC1cdTAwM2VuZXh0LCBwZnAgPSBydG5sX2RlcmVmZXJlbmNlKCpmcCkpIHtcbitcdFx0XHRpZiAocGZwID09IGZvbGQpIHtcbitcdFx0XHRcdHJjdV9hc3NpZ25fcG9pbnRlcigqZnAsIGZvbGQtXHUwMDNlbmV4dCk7XG4rXHRcdFx0XHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmItXHUwMDNlZmlsdGVyc19yZWYpKSB7XG4rXHRcdFx0XHRcdHVuc2lnbmVkIGludCB0aCA9IHRvX2hhc2goZm9sZC1cdTAwM2VoYW5kbGUpO1xuK1xuK1x0XHRcdFx0XHRSQ1VfSU5JVF9QT0lOVEVSKGhlYWQtXHUwMDNldGFibGVbdGhdLCBOVUxMKTtcbitcdFx0XHRcdFx0a2ZyZWVfcmN1KGIsIHJjdSk7XG4gXHRcdFx0XHR9XG4rXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4gXHRcdH1cbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDIxOjU1OjIzLjE0MzMyNDc2MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY3OTEwNjQ3MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBjbHNfcm91dGUgTW9kdWxlIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbmV0L3NjaGVkL2Nsc19yb3V0ZS5jYC4gTXkgZmlyc3QgbW92ZSBpcyBhbHdheXMgdG8gZ2V0IGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb250ZXh0LiBMZXQncyBkaWcgaW50byB0aGF0IGBjbHNfcm91dGUuY2AgZmlsZSBpdHNlbGYuIEknbGwgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IGl0IGRvZXMsIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkuIEknbGwgcHJvYmFibHkgc3RhcnQgYnkgbG9va2luZyBhdCB0aGUgY29tbWVudHMgYW5kIHRoZSBtYWluIGZ1bmN0aW9ucy5cblxuVGhlbiwgSSdsbCBhYnNvbHV0ZWx5IG5lZWQgdG8gY2hlY2sgaXRzIEtjb25maWcgY29uZmlndXJhdGlvbi4gVW5kZXJzdGFuZGluZyBob3cgaXQncyBlbmFibGVkIGFuZCBkaXNhYmxlZCwgYW5kIGFueSBkZXBlbmRlbmNpZXMsIGlzIGNydWNpYWwuIElzIGl0IGEgbW9kdWxlPyBCdWlsdC1pbj8gV2hhdCBvdGhlciBrZXJuZWwgZmVhdHVyZXMgZG9lcyBpdCByZWx5IG9uPyBJJ2xsIHByb2JhYmx5IHVzZSBgZ3JlcHBlcmAgKGlmIGF2YWlsYWJsZSBpbiBteSBlbnZpcm9ubWVudCkgdG8gcXVpY2tseSBmaW5kIHRoZSByZWxldmFudCBLY29uZmlnIGVudHJ5LCBidXQgSSdsbCBtYWtlIHN1cmUgdG8gcmVhZCBpdCBjYXJlZnVsbHkgdG8gc3BvdCBhbnkgZmxhZ3Mgb3IgY29uZGl0aW9uYWwgYnVpbGQgZGlyZWN0aXZlcy4gSWYgYGdyZXBwZXJgIGlzIGEgbm8tZ28sIGEgZ29vZCBvbGQtZmFzaGlvbmVkIGByZWFkLWZpbGVgIHdpbGwgZG8gdGhlIHRyaWNrLCBubyBwcm9ibGVtLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IEkga25vdyBob3cgdGhpcyBtb2R1bGUgZml0cyBpbnRvIHRoZSBicm9hZGVyIGtlcm5lbCBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzM0LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMTo1NToyOS45MzQzOTE0NTVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyMDQxNjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNsc19yb3V0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWc9NDk0PWNvbmZpZyBORVRfQ0xTX1JPVVRFNFxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctNTAzLVxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbm5ldC9zY2hlZC9LY29uZmlnOjUwNDpcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjbHNfcm91dGUuXFxubmV0L3NjaGVkL0tjb25maWctNTA1LVxcbi0tXFxubmV0L3NjaGVkL01ha2VmaWxlPTY4PW9iai0kKENPTkZJR19ORVRfQ0xTX1UzMilcXHQrPSBjbHNfdTMyLm9cXG5uZXQvc2NoZWQvTWFrZWZpbGU6Njk6b2JqLSQoQ09ORklHX05FVF9DTFNfUk9VVEU0KVxcdCs9IGNsc19yb3V0ZS5vXFxubmV0L3NjaGVkL01ha2VmaWxlLTcwLW9iai0kKENPTkZJR19ORVRfQ0xTX0ZXKVxcdCs9IGNsc19mdy5vXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmMtMi0vKlxcbm5ldC9zY2hlZC9jbHNfcm91dGUuYzozOiAqIG5ldC9zY2hlZC9jbHNfcm91dGUuY1xcdFJPVVRFNCBjbGFzc2lmaWVyLlxcbm5ldC9zY2hlZC9jbHNfcm91dGUuYy00LSAqXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmM9NjY5PXN0YXRpYyB2b2lkIHJvdXRlNF9iaW5kX2NsYXNzKHZvaWQgKmZoLCB1MzIgY2xhc3NpZCwgdW5zaWduZWQgbG9uZyBjbCwgdm9pZCAqcSxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfcm91dGUuYy02NzYtXFxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jOjY3NzpzdGF0aWMgc3RydWN0IHRjZl9wcm90b19vcHMgY2xzX3JvdXRlNF9vcHMgX19yZWFkX21vc3RseSA9IHtcXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmMtNjc4LVxcdC5raW5kXFx0XFx0PVxcdFxcXCJyb3V0ZVxcXCIsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmM9NjkyPXN0YXRpYyBpbnQgX19pbml0IGluaXRfcm91dGU0KHZvaWQpXFxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jLTY5My17XFxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jOjY5NDpcXHRyZXR1cm4gcmVnaXN0ZXJfdGNmX3Byb3RvX29wcyhcXHUwMDI2Y2xzX3JvdXRlNF9vcHMpO1xcbm5ldC9zY2hlZC9jbHNfcm91dGUuYy02OTUtfVxcbi0tXFxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jPTY5Nz1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yb3V0ZTQodm9pZClcXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmMtNjk4LXtcXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmM6Njk5OlxcdHVucmVnaXN0ZXJfdGNmX3Byb3RvX29wcyhcXHUwMDI2Y2xzX3JvdXRlNF9vcHMpO1xcbm5ldC9zY2hlZC9jbHNfcm91dGUuYy03MDAtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMTo1NTozMC4wOTY0MzgwMDNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTg0NzY1NzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEtlcm5lbCdzIE5ldHdvcmsgU2NoZWR1bGVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHNvbWV0aGluZyBuZXR3b3JrLXJlbGF0ZWQsIGFuZCBpdCdzIHBvaW50aW5nIG1lIHRvd2FyZHMgdGhlIGtlcm5lbCdzIHNjaGVkdWxlciBjb25maWd1cmF0aW9uLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBvdXQgdGhlIGBuZXQvc2NoZWQvS2NvbmZpZ2AgZmlsZS4gSG1tLCBsZXQgbWUgc2VlLi4uIEknbSB0aGlua2luZyBhcm91bmQgbGluZSA0OTQgbWlnaHQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGF0IGxpa2VseSBpbmRpY2F0ZXMgdGhlIHNlY3Rpb24gb3IgYSBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIEknbSBpbnRlcmVzdGVkIGluIHdpdGhpbiB0aGF0IGZpbGUuIFRpbWUgdG8gb3BlbiB0aGF0IGZpbGUgdXAgYW5kIGhhdmUgYSBsb29rOyBob3BlZnVsbHkgdGhhdCBsaW5lIG51bWJlciB3aWxsIGdpdmUgbWUgYSBnb29kIGp1bXBpbmctb2ZmIHBvaW50LiBJdCB3aWxsIGxpa2VseSByZXZlYWwgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFuZCBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxOTcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMTo1NTozNC4wODEyMDYzMDFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDMzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNDg1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDg1OlxcdFxcdHRyaXN0YXRlIFxcXCJFbGVtZW50YXJ5IGNsYXNzaWZpY2F0aW9uIChCQVNJQylcXFwiXFxuIDQ4NjpcXHRcXHRzZWxlY3QgTkVUX0NMU1xcbiA0ODc6XFx0XFx0aGVscFxcbiA0ODg6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gY2xhc3NpZnkgcGFja2V0cyB1c2luZ1xcbiA0ODk6XFx0XFx0ICBvbmx5IGV4dGVuZGVkIG1hdGNoZXMgYW5kIGFjdGlvbnMuXFxuIDQ5MDpcXHRcXG4gNDkxOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA0OTI6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2xzX2Jhc2ljLlxcbiA0OTM6XFx0XFxuIDQ5NDpcXHRjb25maWcgTkVUX0NMU19ST1VURTRcXG4gNDk1OlxcdFxcdHRyaXN0YXRlIFxcXCJSb3V0aW5nIGRlY2lzaW9uIChST1VURSlcXFwiXFxuIDQ5NjpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gNDk3OlxcdFxcdHNlbGVjdCBJUF9ST1VURV9DTEFTU0lEXFxuIDQ5ODpcXHRcXHRzZWxlY3QgTkVUX0NMU1xcbiA0OTk6XFx0XFx0aGVscFxcbiA1MDA6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmUgYWJsZSB0byBjbGFzc2lmeSBwYWNrZXRzXFxuIDUwMTpcXHRcXHQgIGFjY29yZGluZyB0byB0aGUgcm91dGUgdGFibGUgZW50cnkgdGhleSBtYXRjaGVkLlxcbiA1MDI6XFx0XFxuIDUwMzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gNTA0OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNsc19yb3V0ZS5cXG4gNTA1OlxcdFxcbiA1MDY6XFx0Y29uZmlnIE5FVF9DTFNfRldcXG4gNTA3OlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgbWFyayAoRlcpXFxcIlxcbiA1MDg6XFx0XFx0c2VsZWN0IE5FVF9DTFNcXG4gNTA5OlxcdFxcdGhlbHBcXG4gNTEwOlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGJlIGFibGUgdG8gY2xhc3NpZnkgcGFja2V0c1xcbiA1MTE6XFx0XFx0ICBhY2NvcmRpbmcgdG8gbmV0ZmlsdGVyL2ZpcmV3YWxsIG1hcmtzLlxcbiA1MTI6XFx0XFxuIDUxMzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gNTE0OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNsc19mdy5cXG4gNTE1OlxcdFxcbiA1MTY6XFx0Y29uZmlnIE5FVF9DTFNfVTMyXFxuIDUxNzpcXHRcXHR0cmlzdGF0ZSBcXFwiVW5pdmVyc2FsIDMyYml0IGNvbXBhcmlzb25zIHcvIGhhc2hpbmcgKFUzMilcXFwiXFxuIDUxODpcXHRcXHRzZWxlY3QgTkVUX0NMU1xcbiA1MTk6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMTo1NTozNC4wODEzMTI2NTFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTMzODY0MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgY29uZmlndXJhdGlvbjpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIE5ldHdvcmsgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBORVRfQ0xTX1JPVVRFNGAgYW5kIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBGaXJzdCwgSSBzZWUgdGhhdCBpdCByZWxpZXMgb24gYElORVRgLiBUaGF0J3Mgbm90IHN1cnByaXNpbmc7IElQdjQgcm91dGluZyBpcyBjb3JlIHRvIHRoZSBpbnRlcm5ldHdvcmtpbmcgc3RhY2suIEkgYWxzbyBub3RlIHRoYXQgaXQncyBwYXJ0IG9mIHRoZSBgTkVUX1NDSEVEYCBhbmQgYE5FVF9DTFNgIHN1YnN5c3RlbXMuIFRoYXQgdGVsbHMgbWUgdGhpcyBsaWtlbHkgcmVsYXRlcyB0byB0cmFmZmljIGNsYXNzaWZpY2F0aW9uIGFuZCBxdWV1aW5nIHdpdGhpbiB0aGUgbmV0d29yayBzY2hlZHVsZXIuIFRvIGJlIHN1cmUsIEkgc2hvdWxkIGNoZWNrIHRoZSBgbmV0L3NjaGVkL0tjb25maWdgIGZpbGUsIEkgc2hvdWxkIGxvb2sgYXQgdGhlIHRvcC1sZXZlbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2l0aGluIHRoYXQgZGlyZWN0b3J5LiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYWxsIHRoZSBwYXJlbnQgb3B0aW9ucyB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg5MywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMjE6NTU6MzYuMDE1MTc5OTUxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTM1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgVHJhZmZpYyBjb250cm9sIGNvbmZpZ3VyYXRpb24uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnVjb25maWcgTkVUX1NDSEVEXFxuICAgNzpcXHRcXHRib29sIFxcXCJRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcXFwiXFxuICAgODpcXHRcXHRzZWxlY3QgTkVUX1NDSF9GSUZPXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIFdoZW4gdGhlIGtlcm5lbCBoYXMgc2V2ZXJhbCBwYWNrZXRzIHRvIHNlbmQgb3V0IG92ZXIgYSBuZXR3b3JrXFxuICAxMTpcXHRcXHQgIGRldmljZSwgaXQgaGFzIHRvIGRlY2lkZSB3aGljaCBvbmVzIHRvIHNlbmQgZmlyc3QsIHdoaWNoIG9uZXMgdG9cXG4gIDEyOlxcdFxcdCAgZGVsYXksIGFuZCB3aGljaCBvbmVzIHRvIGRyb3AuIFRoaXMgaXMgdGhlIGpvYiBvZiB0aGUgcXVldWVpbmdcXG4gIDEzOlxcdFxcdCAgZGlzY2lwbGluZXMsIHNldmVyYWwgZGlmZmVyZW50IGFsZ29yaXRobXMgZm9yIGhvdyB0byBkbyB0aGlzXFxuICAxNDpcXHRcXHQgIFxcXCJmYWlybHlcXFwiIGhhdmUgYmVlbiBwcm9wb3NlZC5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0XFx0ICBJZiB5b3Ugc2F5IE4gaGVyZSwgeW91IHdpbGwgZ2V0IHRoZSBzdGFuZGFyZCBwYWNrZXQgc2NoZWR1bGVyLCB3aGljaFxcbiAgMTc6XFx0XFx0ICBpcyBhIEZJRk8gKGZpcnN0IGNvbWUsIGZpcnN0IHNlcnZlZCkuIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZVxcbiAgMTg6XFx0XFx0ICBhYmxlIHRvIGNob29zZSBmcm9tIGFtb25nIHNldmVyYWwgYWx0ZXJuYXRpdmUgYWxnb3JpdGhtcyB3aGljaCBjYW5cXG4gIDE5OlxcdFxcdCAgdGhlbiBiZSBhdHRhY2hlZCB0byBkaWZmZXJlbnQgbmV0d29yayBkZXZpY2VzLiBUaGlzIGlzIHVzZWZ1bCBmb3JcXG4gIDIwOlxcdFxcdCAgZXhhbXBsZSBpZiBzb21lIG9mIHlvdXIgbmV0d29yayBkZXZpY2VzIGFyZSByZWFsIHRpbWUgZGV2aWNlcyB0aGF0XFxuICAyMTpcXHRcXHQgIG5lZWQgYSBjZXJ0YWluIG1pbmltdW0gZGF0YSBmbG93IHJhdGUsIG9yIGlmIHlvdSBuZWVkIHRvIGxpbWl0IHRoZVxcbiAgMjI6XFx0XFx0ICBtYXhpbXVtIGRhdGEgZmxvdyByYXRlIGZvciB0cmFmZmljIHdoaWNoIG1hdGNoZXMgc3BlY2lmaWVkIGNyaXRlcmlhLlxcbiAgMjM6XFx0XFx0ICBUaGlzIGNvZGUgaXMgY29uc2lkZXJlZCB0byBiZSBleHBlcmltZW50YWwuXFxuICAyNDpcXHRcXG4gIDI1OlxcdFxcdCAgVG8gYWRtaW5pc3RlciB0aGVzZSBzY2hlZHVsZXJzLCB5b3UnbGwgbmVlZCB0aGUgdXNlci1sZXZlbCB1dGlsaXRpZXNcXG4gIDI2OlxcdFxcdCAgZnJvbSB0aGUgcGFja2FnZSBpcHJvdXRlMit0YyBhdFxcbiAgMjc6XFx0XFx0ICBcXHUwMDNjaHR0cHM6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMvbmV0L2lwcm91dGUyL1xcdTAwM2UuICBUaGF0IHBhY2thZ2VcXG4gIDI4OlxcdFxcdCAgYWxzbyBjb250YWlucyBzb21lIGRvY3VtZW50YXRpb247IGZvciBtb3JlLCBjaGVjayBvdXRcXG4gIDI5OlxcdFxcdCAgXFx1MDAzY2h0dHA6Ly93d3cubGludXhmb3VuZGF0aW9uLm9yZy9jb2xsYWJvcmF0ZS93b3JrZ3JvdXBzL25ldHdvcmtpbmcvaXByb3V0ZTJcXHUwMDNlLlxcbiAgMzA6XFx0XFxuICAzMTpcXHRcXHQgIFRoaXMgUXVhbGl0eSBvZiBTZXJ2aWNlIChRb1MpIHN1cHBvcnQgd2lsbCBlbmFibGUgeW91IHRvIHVzZVxcbiAgMzI6XFx0XFx0ICBEaWZmZXJlbnRpYXRlZCBTZXJ2aWNlcyAoZGlmZnNlcnYpIGFuZCBSZXNvdXJjZSBSZXNlcnZhdGlvbiBQcm90b2NvbFxcbiAgMzM6XFx0XFx0ICAoUlNWUCkgb24geW91ciBMaW51eCByb3V0ZXIgaWYgeW91IGFsc28gc2F5IFkgdG8gdGhlIGNvcnJlc3BvbmRpbmdcXG4gIDM0OlxcdFxcdCAgY2xhc3NpZmllcnMgYmVsb3cuICBEb2N1bWVudGF0aW9uIGFuZCBzb2Z0d2FyZSBpcyBhdFxcbiAgMzU6XFx0XFx0ICBcXHUwMDNjaHR0cDovL2RpZmZzZXJ2LnNvdXJjZWZvcmdlLm5ldC9cXHUwMDNlLlxcbiAgMzY6XFx0XFxuICAzNzpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlIGFuZCB0byBcXFwiL3Byb2MgZmlsZSBzeXN0ZW1cXFwiIGJlbG93LCB5b3Ugd2lsbCBiZSBhYmxlXFxuICAzODpcXHRcXHQgIHRvIHJlYWQgc3RhdHVzIGluZm9ybWF0aW9uIGFib3V0IHBhY2tldCBzY2hlZHVsZXJzIGZyb20gdGhlIGZpbGVcXG4gIDM5OlxcdFxcdCAgL3Byb2MvbmV0L3BzY2hlZC5cXG4gIDQwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMTo1NTozNi4wMTUyNzQ4MTFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MDY1NjQ5NTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRleHQsIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIGFuIGV4cGVydC1sZXZlbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBmaWVsZDpcblxuKipEaXZpbmcgaW50byB0aGUgUm91dGUgQ2xhc3NpZmllcioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IGEgZ29vZCBsb29rIGF0IHdoYXQncyBnb2luZyBvbiB3aXRoaW4gdGhlIHJvdXRlIGNsYXNzaWZpZXIgbW9kdWxlLiBNeSBmaXJzdCBzdGVwIGlzIGFsd2F5cyB0byBnbyByaWdodCB0byB0aGUgc291cmNlIGNvZGUsIHNvIEknbSBwdWxsaW5nIHVwIGBjbHNfcm91dGUuY2AuIFNwZWNpZmljYWxseSwgSSdtIGZvY3VzaW5nIG9uIHRoZSBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyBkZWZpbmVkIGluIGBuZXQvc2NoZWQvY2xzX3JvdXRlLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSByb3V0ZS1iYXNlZCBjbGFzc2lmaWVyIHJlc2lkZXMsIHNvIHVuZGVyc3RhbmRpbmcgaXRzIGludGVybmFscyBpcyBrZXkgdG8gY29tcHJlaGVuZGluZyBpdHMgYmVoYXZpb3IuIEkgbmVlZCBhIGNsZWFyIG1lbnRhbCBtb2RlbCBvZiBob3cgaXQgd29ya3MgdW5kZXIgdGhlIGhvb2QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4MDQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDIxOjU1OjQ1LjA4MDkyNzI0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9jbHNfcm91dGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NjUsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NjU6XFx0XFx0bmxhX25lc3RfY2FuY2VsKHNrYiwgbmVzdCk7XFxuIDY2NjpcXHRcXHRyZXR1cm4gLTE7XFxuIDY2NzpcXHR9XFxuIDY2ODpcXHRcXG4gNjY5OlxcdHN0YXRpYyB2b2lkIHJvdXRlNF9iaW5kX2NsYXNzKHZvaWQgKmZoLCB1MzIgY2xhc3NpZCwgdW5zaWduZWQgbG9uZyBjbCwgdm9pZCAqcSxcXG4gNjcwOlxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgYmFzZSlcXG4gNjcxOlxcdHtcXG4gNjcyOlxcdFxcdHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmID0gZmg7XFxuIDY3MzpcXHRcXG4gNjc0OlxcdFxcdHRjX2Nsc19iaW5kX2NsYXNzKGNsYXNzaWQsIGNsLCBxLCBcXHUwMDI2Zi1cXHUwMDNlcmVzLCBiYXNlKTtcXG4gNjc1OlxcdH1cXG4gNjc2OlxcdFxcbiA2Nzc6XFx0c3RhdGljIHN0cnVjdCB0Y2ZfcHJvdG9fb3BzIGNsc19yb3V0ZTRfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuIDY3ODpcXHRcXHQua2luZFxcdFxcdD1cXHRcXFwicm91dGVcXFwiLFxcbiA2Nzk6XFx0XFx0LmNsYXNzaWZ5XFx0PVxcdHJvdXRlNF9jbGFzc2lmeSxcXG4gNjgwOlxcdFxcdC5pbml0XFx0XFx0PVxcdHJvdXRlNF9pbml0LFxcbiA2ODE6XFx0XFx0LmRlc3Ryb3lcXHQ9XFx0cm91dGU0X2Rlc3Ryb3ksXFxuIDY4MjpcXHRcXHQuZ2V0XFx0XFx0PVxcdHJvdXRlNF9nZXQsXFxuIDY4MzpcXHRcXHQuY2hhbmdlXFx0XFx0PVxcdHJvdXRlNF9jaGFuZ2UsXFxuIDY4NDpcXHRcXHQuZGVsZXRlXFx0XFx0PVxcdHJvdXRlNF9kZWxldGUsXFxuIDY4NTpcXHRcXHQud2Fsa1xcdFxcdD1cXHRyb3V0ZTRfd2FsayxcXG4gNjg2OlxcdFxcdC5kdW1wXFx0XFx0PVxcdHJvdXRlNF9kdW1wLFxcbiA2ODc6XFx0XFx0LmJpbmRfY2xhc3NcXHQ9XFx0cm91dGU0X2JpbmRfY2xhc3MsXFxuIDY4ODpcXHRcXHQub3duZXJcXHRcXHQ9XFx0VEhJU19NT0RVTEUsXFxuIDY4OTpcXHR9O1xcbiA2OTA6XFx0TU9EVUxFX0FMSUFTX05FVF9DTFMoXFxcInJvdXRlXFxcIik7XFxuIDY5MTpcXHRcXG4gNjkyOlxcdHN0YXRpYyBpbnQgX19pbml0IGluaXRfcm91dGU0KHZvaWQpXFxuIDY5MzpcXHR7XFxuIDY5NDpcXHRcXHRyZXR1cm4gcmVnaXN0ZXJfdGNmX3Byb3RvX29wcyhcXHUwMDI2Y2xzX3JvdXRlNF9vcHMpO1xcbiA2OTU6XFx0fVxcbiA2OTY6XFx0XFxuIDY5NzpcXHRzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yb3V0ZTQodm9pZClcXG4gNjk4OlxcdHtcXG4gNjk5OlxcdFxcdHVucmVnaXN0ZXJfdGNmX3Byb3RvX29wcyhcXHUwMDI2Y2xzX3JvdXRlNF9vcHMpO1xcbiA3MDA6XFx0fVxcbiA3MDE6XFx0XFxuIDcwMjpcXHRtb2R1bGVfaW5pdChpbml0X3JvdXRlNClcXG4gNzAzOlxcdG1vZHVsZV9leGl0KGV4aXRfcm91dGU0KVxcbiA3MDQ6XFx0TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJSb3V0aW5nIHRhYmxlIHJlYWxtIGJhc2VkIFRDIGNsYXNzaWZpZXJcXFwiKTtcXG4gNzA1OlxcdE1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMjE6NTU6NDUuMDgxMDA2NDRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODM3NTE1OTgwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogY2xzX3JvdXRlIFJlZmNvdW50IEJ1Z2ZpeCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgcmVmY291bnQsIGBmaWx0ZXJzX3JlZmAsIHRvIGBzdHJ1Y3Qgcm91dGU0X2J1Y2tldGAgaW4gYG5ldC9zY2hlZC9jbHNfcm91dGUuY2AuIFRoZSBnb2FsIGlzIHByb3BlciBsaWZlY3ljbGUgbWFuYWdlbWVudCBvZiBmaWx0ZXJzIHdpdGhpbiB0aGUgYGNsc19yb3V0ZWAgbW9kdWxlLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGRlbGV0aW9uIGFuZCBtb2RpZmljYXRpb24uIFRoaXMgaXMgY29yZSBUQyAodHJhZmZpYyBjb250cm9sKSBjbGFzc2lmaWNhdGlvbiBsb2dpYywgd2hpY2ggaXMgb2J2aW91c2x5IHJlYWNoYWJsZSB2aWEgbmV0bGluayBjYWxscyBsaWtlIGBSVE1fTkVXVEZJTFRFUmAsIGBSVE1fREVMVEZJTFRFUmAsIGV0Yy5cblxuVGhlIHBhdGNoIGl0c2VsZiBsb29rcyBzdHJhaWdodGZvcndhcmQ6XG5cbiogICBJbiBgcm91dGU0X2RlbGV0ZWAsIGluc3RlYWQgb2YgdGhlIG9sZCBpdGVyYXRpdmUgY2hlY2ssIGl0IHVzZXMgYHJlZmNvdW50X2RlY19hbmRfdGVzdGAgdG8gZGV0ZXJtaW5lIHdoZW4gdGhlIGJ1Y2tldCBjYW4gYmUgc2FmZWx5IGZyZWVkLiBUaGlzIGlzIG11Y2ggYmV0dGVyLlxuKiAgIGByb3V0ZTRfc2V0X3Bhcm1zYCBub3cgYXBwcm9wcmlhdGVseSBpbmNyZW1lbnRzIG9yIHNldHMgdGhlIHJlZmNvdW50IHdoZW4gZmlsdGVycyBhcmUgYWRkZWQuXG4qICAgYHJvdXRlNF9jaGFuZ2VgIG5vdyBjb3JyZWN0bHkgZGVjcmVtZW50cyB0aGUgcmVmY291bnQgd2hlbiByZXBsYWNpbmcgZmlsdGVycywgYW5kIGZyZWVzIHRoZSBidWNrZXQgaWYgaXQgaGl0cyB6ZXJvLlxuXG5HaXZlbiB0aGUgaGlzdG9yeSBvZiBidWdzIGluIHRoaXMgYXJlYSDigJMgZmlsdGVyIGxpZmV0aW1lLCByZWZjb3VudGluZywgYW5kIFJDVSBzeW5jaHJvbml6YXRpb24gaW4gdGhlIG5ldC9zY2hlZCBzdWJzeXN0ZW0gaGF2ZSBoaXN0b3JpY2FsbHkgYmVlbiBhIGdvbGQgbWluZSBmb3IgY29uY3VycmVuY3kgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyDigJMgdGhpcyBpcyAqYWJzb2x1dGVseSogd29ydGggZnV6emluZy4gSSBtZWFuLCBtZW1vcnkgbGVha3MsIFVBRnMsIGRvdWJsZSBmcmVlcy4uLiB0aGlzIGlzIHByaW1lIHRlcnJpdG9yeS5cblxuU28sIGZ1enppbmcgaXMgYSBnbyEgVGhlIG1vc3QgcmVsZXZhbnQgZnVuY3Rpb25zLCB0aGUgc3ltYm9scyB0byBmb2N1cyBvbiBpbiBgbmV0L3NjaGVkL2Nsc19yb3V0ZS5jYCwgYXJlOlxuXG4qICAgYHJvdXRlNF9jaGFuZ2VgXG4qICAgYHJvdXRlNF9kZWxldGVgXG4qICAgYHJvdXRlNF9zZXRfcGFybXNgXG5cblRoZXkgYXJlIGNhbGxlZCB0aHJvdWdoIGB0Y2ZfcHJvdG9fb3BzIGNsc19yb3V0ZTRfb3BzYCwgd2hpY2ggbWVhbnMgdGhleSBhcmUgY2FsbGJhY2tzIHJlZ2lzdGVyZWQgYW5kIGNhbGxlZCB0aHJvdWdoIGluZGlyZWN0IGNhbGxzLCBzbyB0aGVzZSBhcmUgZXhjZWxsZW50IHRhcmdldHMuXG5cbkNvbmZpZy13aXNlLCB0aGUgY29yZSByZXF1aXJlbWVudHMgYXJlIHByZXR0eSBjbGVhcjpcblxuKiAgIGBORVRfQ0xTX1JPVVRFNGBcbiogICBgTkVUX1NDSEVEYCAodGhpcyBpcyB0aGUgcGFyZW50IGNvbmZpZylcbiogICBgSU5FVGAgKGEgZGVwZW5kZW5jeSBvZiBgTkVUX0NMU19ST1VURTRgKVxuKiAgIGBORVRgICh0aGUgYmFzZSBuZXR3b3JrIHN1YnN5c3RlbSBjb25maWcpXG5cbk5vIG9idmlvdXMgbWlzc2luZyBkZXBlbmRlbmNpZXMgYXQgZmlyc3QgZ2xhbmNlLCBJJ2xsIGRvdWJsZSBjaGVjayBgbmV0L0tjb25maWdgIGFuZCBgbmV0L3NjaGVkL0tjb25maWdgIGZvciBhbnl0aGluZyBlbHNlIHJlbGV2YW50LiBUaGlzIHNob3VsZCBiZSBhIHByZXR0eSB0aWdodCB0ZXN0IGNhc2UgdG8gZ2V0IHN0YXJ0ZWQuIExldCdzIHNlZSBpZiB3ZSBjYW4gdHJpZ2dlciBzb21lIG9mIHRoZXNlIGNsYXNzaWMgVEMgYnVncyFcblxuXG4iLCJJbnB1dFRva2VucyI6NjY0MCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc4MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDIxOjU1OjUzLjQ1NjE2OTg2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjcxNjQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJORVRfQ0xTX1JPVVRFNFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTE1Mjc9Y29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTVxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1MzQtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE1MzU6XFx0ICBUaGlzIG1hdGNoIHByZXR0eSBtdWNoIHJlc2VtYmxlcyB0aGUgQ09ORklHX05FVF9DTFNfUk9VVEU0IG9wdGlvblxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNTM2LVxcdCAgaW4gdGMgd29ybGQuXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZz00ODQ9Y29uZmlnIE5FVF9DTFNfQkFTSUNcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTQ5My1cXG5uZXQvc2NoZWQvS2NvbmZpZzo0OTQ6Y29uZmlnIE5FVF9DTFNfUk9VVEU0XFxubmV0L3NjaGVkL0tjb25maWctNDk1LVxcdHRyaXN0YXRlIFxcXCJSb3V0aW5nIGRlY2lzaW9uIChST1VURSlcXFwiXFxuLS1cXG5uZXQvc2NoZWQvTWFrZWZpbGU9Njg9b2JqLSQoQ09ORklHX05FVF9DTFNfVTMyKVxcdCs9IGNsc191MzIub1xcbm5ldC9zY2hlZC9NYWtlZmlsZTo2OTpvYmotJChDT05GSUdfTkVUX0NMU19ST1VURTQpXFx0Kz0gY2xzX3JvdXRlLm9cXG5uZXQvc2NoZWQvTWFrZWZpbGUtNzAtb2JqLSQoQ09ORklHX05FVF9DTFNfRlcpXFx0Kz0gY2xzX2Z3Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMjE6NTU6NTMuNTIyODkwMjc5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3NDU1Mjg2MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBuZXQvc2NoZWQvS2NvbmZpZ2AgRGVwZW5kZW5jaWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBmb3IgYE5FVF9DTFNfUk9VVEU0YC4gSSdsbCBzdGFydCBieSBjaGVja2luZyBgbmV0L3NjaGVkL0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHBhcmVudCBtZW51cyBvciBpbW1lZGlhdGUgZGVwZW5kZW5jaWVzIG9uIGBORVRfQ0xTX1JPVVRFNGAgaXRzZWxmLiBJJ20gbG9va2luZyBhdCB0aGUgY29uZmlnIGRlZmluaXRpb246IGBjb25maWcgTkVUX0NMU19ST1VURTRgLCBhbmQgSSBzZWUgdGhhdCBpdCdzIGEgdHJpc3RhdGUgb3B0aW9uIGFuZCBkZXBlbmRzIG9uIGBJTkVUYC4gIEl0IGFsc28gKnNlbGVjdHMqIGBJUF9ST1VURV9DTEFTU0lEYCBhbmQgYE5FVF9DTFNgLiAgQWhhLCBhbmQgaXQncyBkZWZpbmVkIHVuZGVyIGBtZW51Y29uZmlnIE5FVF9TQ0hFRGAuIE5vdyBJIHJlY2FsbCB0aGF0IGluIGBuZXQvS2NvbmZpZ2AsIGBzb3VyY2UgXCJuZXQvc2NoZWQvS2NvbmZpZ1wiYCBpcyBndWFyZGVkIGJ5IGBpZiBORVRgLCBzbyB0aGF0IGdpdmVzIG1lIHRoZSBicm9hZGVyIGNvbnRleHQuXG5cblNvLCB0byBzdW1tYXJpemUgdGhlIGtleSBjb25maWdzOiBgTkVUX0NMU19ST1VURTRgLCBgTkVUX1NDSEVEYCwgYE5FVF9DTFNgLCBhbmQgYElORVRgIGFyZSBhbGwgcmVsZXZhbnQgaGVyZS4gVGhpcyBpcyBpbXBvcnRhbnQuXG5cbk5vdywgbGV0IG1lIGRvdWJsZS1jaGVjayBhbGwgdGhlIHJlcXVpcmVtZW50cy4gIFRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIGlzIHRydWUsIGluZGljYXRpbmcgd2UgbmVlZCB0byBmb2N1cyBvbiB0aGlzIGFyZWEuIE15IGBFbmFibGVDb25maWdzYCBsaXN0LCB3aGljaCBpbmNsdWRlcyBgTkVUX0NMU19ST1VURTRgLCBgTkVUX1NDSEVEYCwgYW5kIGBJTkVUYCwgbGluZXMgdXAgd2l0aCB3aGF0IEkganVzdCBhbmFseXplZC4gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBgcm91dGU0X2NoYW5nZWAsIGByb3V0ZTRfZGVsZXRlYCwgYW5kIGByb3V0ZTRfc2V0X3Bhcm1zYCwgd2hpY2ggSSB1bmRlcnN0YW5kLlxuXG5BbHJpZ2h0LCBJJ20gY29uZmlkZW50IGluIG15IGFuYWx5c2lzLiBMZXQncyBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUgZXZlcnl0aGluZyBsaW5lcyB1cCwgYW5kIHRoZW4gSSdsbCBmb3JtdWxhdGUgdGhlIHRvb2wgY2FsbCBhY2NvcmRpbmdseS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIzNywiT3V0cHV0VG9rZW5zIjoxMzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMjE6NTU6NTkuMjY4NDIxMDZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzU2MTAwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0NMU19ST1VURTRcIixcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJvdXRlNF9jaGFuZ2VcIixcbiAgICBcInJvdXRlNF9kZWxldGVcIixcbiAgICBcInJvdXRlNF9zZXRfcGFybXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcm91dGU0IGNsYXNzaWZpZXIgKGNsc19yb3V0ZSkgaW4gdGhlIHRyYWZmaWMgY29udHJvbCBzdWJzeXN0ZW0gYnkgaW50cm9kdWNpbmcgcmVmY291bnRpbmcgKGZpbHRlcnNfcmVmKSB0byBtYW5hZ2UgdGhlIGxpZmV0aW1lIGFuZCBkZWFsbG9jYXRpb24gb2Ygcm91dGU0IGJ1Y2tldHMgZHVyaW5nIGZpbHRlciBpbnNlcnRpb24sIHJlcGxhY2VtZW50LCBhbmQgZGVsZXRpb24uIFRoaXMgaXMgY29yZSBuZXR3b3JraW5nIGNvZGUgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIHRyYWZmaWMgY29udHJvbCBpbnRlcmZhY2VzIGFuZCBhZmZlY3RzIG1lbW9yeSBzYWZldHkgLyBsaWZldGltZSBtYW5hZ2VtZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9DTFNfUk9VVEU0XCIsXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyb3V0ZTRfY2hhbmdlXCIsXG4gICAgXCJyb3V0ZTRfZGVsZXRlXCIsXG4gICAgXCJyb3V0ZTRfc2V0X3Bhcm1zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJvdXRlNCBjbGFzc2lmaWVyIChjbHNfcm91dGUpIGluIHRoZSB0cmFmZmljIGNvbnRyb2wgc3Vic3lzdGVtIGJ5IGludHJvZHVjaW5nIHJlZmNvdW50aW5nIChmaWx0ZXJzX3JlZikgdG8gbWFuYWdlIHRoZSBsaWZldGltZSBhbmQgZGVhbGxvY2F0aW9uIG9mIHJvdXRlNCBidWNrZXRzIGR1cmluZyBmaWx0ZXIgaW5zZXJ0aW9uLCByZXBsYWNlbWVudCwgYW5kIGRlbGV0aW9uLiBUaGlzIGlzIGNvcmUgbmV0d29ya2luZyBjb2RlIHJlYWNoYWJsZSB2aWEgbmV0bGluayB0cmFmZmljIGNvbnRyb2wgaW50ZXJmYWNlcyBhbmQgYWZmZWN0cyBtZW1vcnkgc2FmZXR5IC8gbGlmZXRpbWUgbWFuYWdlbWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMjE6NTU6NTkuMzQ1OTg4ODY5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzI5MzQ1NzA4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDIxOjU1OjU5LjM0NjQ2NDkwOVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIzMjkyOTc2NjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgcmVmZXJlbmNlIGNvdW50ZXIgKGBmaWx0ZXJzX3JlZmApIHRvIGBzdHJ1Y3Qgcm91dGU0X2J1Y2tldGAgaW4gYG5ldC9zY2hlZC9jbHNfcm91dGUuY2AgdG8gdHJhY2sgYWN0aXZlIGZpbHRlcnMgaW4gZWFjaCBidWNrZXQgYW5kIG1hbmFnZSBidWNrZXQgcmVjbGFtYXRpb24gdmlhIFJDVSwgcmVwbGFjaW5nIGEgbGluZWFyIHNjYW4gb2YgYnVja2V0IHNsb3RzLlxcblxcbi0gTWVtb3J5IEluaXRpYWxpemF0aW9uOiBUaGUgYnVja2V0IHN0cnVjdHVyZSBgc3RydWN0IHJvdXRlNF9idWNrZXRgIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmooKWAgYW5kIGBmaWx0ZXJzX3JlZmAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB3aXRoIGByZWZjb3VudF9zZXQoXFx1MDAyNmItXFx1MDAzZWZpbHRlcnNfcmVmLCAxKWAgdXBvbiBjcmVhdGlvbi5cXG4tIFBvdGVudGlhbCBCdWcgVHlwZXM6IEFueSBwb3RlbnRpYWwgYnVncyByZXN1bHRpbmcgZnJvbSB0aGlzIHJlZmFjdG9yaW5nIChlLmcuIGluY29ycmVjdCByZWZlcmVuY2UgY291bnRpbmcsIGRvdWJsZSBmcmVlcywgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucykgYXJlIG1lbW9yeSBsaWZlY3ljbGUgLyBwb2ludGVyIHZhbGlkaXR5IGJ1Z3MgdGhhdCBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHRoZSBgcmVmY291bnRfdGAgcnVudGltZSBjaGVja3MuXFxuLSBVbmluaXRpYWxpemVkIE1lbW9yeSAvIEluZm8tbGVhayBSaXNrOiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZSBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIGJyYW5jaGluZyBkZWNpc2lvbnMuXFxuXFxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDVkYjM4N2MzZjkzZjRlNGIxMzg5MjMyODE0YTUyNzNhYTUyMjIyZDRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyOSAyMTo1NToyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfcm91dGUuYyBiL25ldC9zY2hlZC9jbHNfcm91dGUuY1xuaW5kZXggMGQxMzI0YzkwNTgzNy4uMTdiMGViYjc2NjYyNiAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9jbHNfcm91dGUuY1xuKysrIGIvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jXG5AQCAtMTEsNiArMTEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnJuby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcmVmY291bnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2RzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3JvdXRlLmhcdTAwM2VcbkBAIC00MSw2ICs0Miw3IEBAIHN0cnVjdCByb3V0ZTRfaGVhZCB7XG4gc3RydWN0IHJvdXRlNF9idWNrZXQge1xuIFx0LyogMTYgRlJPTSBidWNrZXRzICsgMTYgSUlGIGJ1Y2tldHMgKyAxIHdpbGRjYXJkIGJ1Y2tldCAqL1xuIFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgX19yY3VcdCpodFsxNiArIDE2ICsgMV07XG4rXHRyZWZjb3VudF90XHRcdFx0ZmlsdGVyc19yZWY7XG4gXHRzdHJ1Y3QgcmN1X2hlYWRcdFx0XHRyY3U7XG4gfTtcbiBcbkBAIC0zMzYsNyArMzM4LDcgQEAgc3RhdGljIGludCByb3V0ZTRfZGVsZXRlKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB2b2lkICphcmcsIGJvb2wgKmxhc3QsXG4gXHRzdHJ1Y3Qgcm91dGU0X2ZpbHRlciAqbmY7XG4gXHRzdHJ1Y3Qgcm91dGU0X2J1Y2tldCAqYjtcbiBcdHVuc2lnbmVkIGludCBoID0gMDtcbi1cdGludCBpLCBoMTtcbitcdGludCBoMTtcbiBcbiBcdGlmICghaGVhZCB8fCAhZilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMzYyLDIzICszNjQsMTQgQEAgc3RhdGljIGludCByb3V0ZTRfZGVsZXRlKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB2b2lkICphcmcsIGJvb2wgKmxhc3QsXG4gXHRcdFx0dGNmX2V4dHNfZ2V0X25ldChcdTAwMjZmLVx1MDAzZWV4dHMpO1xuIFx0XHRcdHRjZl9xdWV1ZV93b3JrKFx1MDAyNmYtXHUwMDNlcndvcmssIHJvdXRlNF9kZWxldGVfZmlsdGVyX3dvcmspO1xuIFxuLVx0XHRcdC8qIFN0cmlwIFJUTkwgcHJvdGVjdGVkIHRyZWUgKi9cbi1cdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYz0gMzI7IGkrKykge1xuLVx0XHRcdFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgKnJ0O1xuLVxuLVx0XHRcdFx0cnQgPSBydG5sX2RlcmVmZXJlbmNlKGItXHUwMDNlaHRbaV0pO1xuLVx0XHRcdFx0aWYgKHJ0KVxuLVx0XHRcdFx0XHRnb3RvIG91dDtcbitcdFx0XHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmItXHUwMDNlZmlsdGVyc19yZWYpKSB7XG4rXHRcdFx0XHRSQ1VfSU5JVF9QT0lOVEVSKGhlYWQtXHUwMDNldGFibGVbdG9faGFzaChoKV0sIE5VTEwpO1xuK1x0XHRcdFx0a2ZyZWVfcmN1KGIsIHJjdSk7XG4gXHRcdFx0fVxuLVxuLVx0XHRcdC8qIE9LLCBzZXNzaW9uIGhhcyBubyBmbG93cyAqL1xuLVx0XHRcdFJDVV9JTklUX1BPSU5URVIoaGVhZC1cdTAwM2V0YWJsZVt0b19oYXNoKGgpXSwgTlVMTCk7XG4tXHRcdFx0a2ZyZWVfcmN1KGIsIHJjdSk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcdH1cbiBcbi1vdXQ6XG4gXHQqbGFzdCA9IHRydWU7XG4gXHRmb3IgKGgxID0gMDsgaDEgXHUwMDNjPSAyNTY7IGgxKyspIHtcbiBcdFx0aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihoZWFkLVx1MDAzZXRhYmxlW2gxXSkpIHtcbkBAIC00NTksNiArNDUyLDcgQEAgc3RhdGljIGludCByb3V0ZTRfc2V0X3Bhcm1zKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsXG4gXHRcdGlmIChiID09IE5VTEwpXG4gXHRcdFx0cmV0dXJuIC1FTk9CVUZTO1xuIFxuK1x0XHRyZWZjb3VudF9zZXQoXHUwMDI2Yi1cdTAwM2VmaWx0ZXJzX3JlZiwgMSk7XG4gXHRcdHJjdV9hc3NpZ25fcG9pbnRlcihoZWFkLVx1MDAzZXRhYmxlW2gxXSwgYik7XG4gXHR9IGVsc2Uge1xuIFx0XHR1bnNpZ25lZCBpbnQgaDIgPSBmcm9tX2hhc2gobmhhbmRsZSBcdTAwM2VcdTAwM2UgMTYpO1xuQEAgLTQ2OCw2ICs0NjIsOCBAQCBzdGF0aWMgaW50IHJvdXRlNF9zZXRfcGFybXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCxcbiBcdFx0ICAgICBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoZnAtXHUwMDNlbmV4dCkpXG4gXHRcdFx0aWYgKGZwLVx1MDAzZWhhbmRsZSA9PSBmLVx1MDAzZWhhbmRsZSlcbiBcdFx0XHRcdHJldHVybiAtRUVYSVNUO1xuK1xuK1x0XHRyZWZjb3VudF9pbmMoXHUwMDI2Yi1cdTAwM2VmaWx0ZXJzX3JlZik7XG4gXHR9XG4gXG4gXHRpZiAodGJbVENBX1JPVVRFNF9UT10pXG5AQCAtNTAwLDcgKzQ5Niw3IEBAIHN0YXRpYyBpbnQgcm91dGU0X2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4gXHRzdHJ1Y3Qgcm91dGU0X2ZpbHRlciAqZm9sZCwgKmYxLCAqcGZwLCAqZiA9IE5VTEw7XG4gXHRzdHJ1Y3Qgcm91dGU0X2J1Y2tldCAqYjtcbiBcdHN0cnVjdCBubGF0dHIgKnRiW1RDQV9ST1VURTRfTUFYICsgMV07XG4tXHR1bnNpZ25lZCBpbnQgaCwgdGg7XG4rXHR1bnNpZ25lZCBpbnQgaDtcbiBcdGludCBlcnI7XG4gXHRib29sIG5ldyA9IHRydWU7XG4gXG5AQCAtNTYwLDE3ICs1NTYsMjAgQEAgc3RhdGljIGludCByb3V0ZTRfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcdHJjdV9hc3NpZ25fcG9pbnRlcigqZnAsIGYpO1xuIFxuIFx0aWYgKGZvbGQpIHtcbi1cdFx0dGggPSB0b19oYXNoKGZvbGQtXHUwMDNlaGFuZGxlKTtcbitcdFx0YiA9IGZvbGQtXHUwMDNlYmt0O1xuIFx0XHRoID0gZnJvbV9oYXNoKGZvbGQtXHUwMDNlaGFuZGxlIFx1MDAzZVx1MDAzZSAxNik7XG4tXHRcdGIgPSBydG5sX2RlcmVmZXJlbmNlKGhlYWQtXHUwMDNldGFibGVbdGhdKTtcbi1cdFx0aWYgKGIpIHtcbi1cdFx0XHRmcCA9IFx1MDAyNmItXHUwMDNlaHRbaF07XG4tXHRcdFx0Zm9yIChwZnAgPSBydG5sX2RlcmVmZXJlbmNlKCpmcCk7IHBmcDtcbi1cdFx0XHQgICAgIGZwID0gXHUwMDI2cGZwLVx1MDAzZW5leHQsIHBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKSkge1xuLVx0XHRcdFx0aWYgKHBmcCA9PSBmb2xkKSB7XG4tXHRcdFx0XHRcdHJjdV9hc3NpZ25fcG9pbnRlcigqZnAsIGZvbGQtXHUwMDNlbmV4dCk7XG4tXHRcdFx0XHRcdGJyZWFrO1xuK1x0XHRmcCA9IFx1MDAyNmItXHUwMDNlaHRbaF07XG4rXHRcdGZvciAocGZwID0gcnRubF9kZXJlZmVyZW5jZSgqZnApOyBwZnA7XG4rXHRcdCAgICAgZnAgPSBcdTAwMjZwZnAtXHUwMDNlbmV4dCwgcGZwID0gcnRubF9kZXJlZmVyZW5jZSgqZnApKSB7XG4rXHRcdFx0aWYgKHBmcCA9PSBmb2xkKSB7XG4rXHRcdFx0XHRyY3VfYXNzaWduX3BvaW50ZXIoKmZwLCBmb2xkLVx1MDAzZW5leHQpO1xuK1x0XHRcdFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZiLVx1MDAzZWZpbHRlcnNfcmVmKSkge1xuK1x0XHRcdFx0XHR1bnNpZ25lZCBpbnQgdGggPSB0b19oYXNoKGZvbGQtXHUwMDNlaGFuZGxlKTtcbitcbitcdFx0XHRcdFx0UkNVX0lOSVRfUE9JTlRFUihoZWFkLVx1MDAzZXRhYmxlW3RoXSwgTlVMTCk7XG4rXHRcdFx0XHRcdGtmcmVlX3JjdShiLCByY3UpO1xuIFx0XHRcdFx0fVxuK1x0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuIFx0XHR9XG4gXHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMTo1NTo1OS4zNDY0NjYxMDlaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODg3MDU3NjAxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGNsc19yb3V0ZS5jIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgd2UgbmVlZCB0byBicmluZyBpbiBLTVNBTi4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYWN0dWFsbHkgY2hhbmdpbmcuIE9rYXksIGl0J3MgaW4gYG5ldC9zY2hlZC9jbHNfcm91dGUuY2AsIHNvIGl0J3MgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIHJvdXRpbmcgY2xhc3NpZmllci4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgYWRkaW5nIGEgYHJlZmNvdW50X3QgZmlsdGVyc19yZWY7YCBmaWVsZCB0byB0aGUgYHN0cnVjdCByb3V0ZTRfYnVja2V0YC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoaXMgaXMgY2xhc3NpYyByZWZjb3VudGluZywgYW5kIHRoYXQgdGhlIGV4aXN0aW5nIGNvZGUgcHJvYmFibHkgaGFkIHNvbWUgcmFjZSBjb25kaXRpb25zIGFyb3VuZCBtYW5hZ2luZyB0aGUgYnVja2V0cy4gTGV0J3Mgc2VlIGhvdyB0aGV5J3JlIGhhbmRsaW5nIGl0Li4uIEFoLCBnb3QgaXQuIEluIGByb3V0ZTRfZGVsZXRlYCwgdGhleSdyZSByZXBsYWNpbmcgdGhlIG9sZCBsb29wLWJhc2VkIGVtcHRpbmVzcyBjaGVjayAoYGZvciAoaSA9IDA7IGkgXHUwMDNjPSAzMjsgaSsrKWApIHdpdGggYSBgcmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmItXHUwMDNlZmlsdGVyc19yZWYpYC4gTWFrZXMgc2Vuc2U7IHRoYXQncyBtdWNoIGNsZWFuZXIgYW5kIGxlc3MgcHJvbmUgdG8gZXJyb3JzLiBga2ZyZWVfcmN1KGIsIHJjdSlgIGlzIGFsc28gYmVpbmcgdXNlZCwgd2hpY2ggaXMgZ29vZCB0byBzZWUgLSBwcm90ZWN0aW5nIGFnYWluc3QgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zLlxuXG5Ob3csIGxvb2tpbmcgYXQgaG93IHRoZSByZWZjb3VudCBpcyBtYW5hZ2VkLi4uIGByb3V0ZTRfc2V0X3Bhcm1zYCBpbml0aWFsaXplcyB0aGUgY291bnQgdG8gMSB3aGVuIGEgYnVja2V0IGlzIGNyZWF0ZWQgKGByZWZjb3VudF9zZXQoXHUwMDI2Yi1cdTAwM2VmaWx0ZXJzX3JlZiwgMSlgKSwgYW5kIGluY3JlYXNlcyBpdCB3aGVuIGEgZmlsdGVyIGlzIGFkZGVkIChgcmVmY291bnRfaW5jKFx1MDAyNmItXHUwMDNlZmlsdGVyc19yZWYpYCkuIExvb2tzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2ggc28gZmFyLiBUaGVuLCBpbiBgcm91dGU0X2NoYW5nZWAsIHdoZW4gYSBgZm9sZGAgaXMgcmVwbGFjZWQsIGl0IGRlY3JlbWVudHMgdGhlIGNvdW50IHVzaW5nIGByZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2Yi1cdTAwM2VmaWx0ZXJzX3JlZilgIGFuZCBmcmVlcyB0aGUgYnVja2V0IGlmIGl0IGhpdHMgemVyby5cblxuQmVmb3JlIEkgY2FuIGdpdmUgdGhpcyBhIGRlZmluaXRpdmUgcGFzcyBvciBmYWlsLCBJIG5lZWQgdG8gc2VlIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IGluIGBuZXQvc2NoZWQvY2xzX3JvdXRlLmNgLiBUaW1lIHRvIGZpcmUgdXAgbXkgdHJ1c3R5IGdyZXBwZXIgb3IgcmVhZC1maWxlIHRvIHNlZSBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIGFuZCBob3cgdGhlIGJ1Y2tldHMgaW50ZXJhY3Qgd2l0aCB0aGUgcmVzdCBvZiB0aGUgcm91dGluZyBjbGFzc2lmaWVyLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgcmVmY291bnRpbmcgc2NoZW1lIGlzIHJvYnVzdCBlbm91Z2ggdG8gaGFuZGxlIGFsbCBwb3NzaWJsZSBzY2VuYXJpb3MsIGVzcGVjaWFsbHkgY29uY3VycmVudCBhY2Nlc3Nlcy4gRnJvbSBhIGhpZ2ggbGV2ZWwgdGhpcyBsb29rcyBsaWtlIGEgZ29vZCBjaGFuZ2UsIGJ1dCBhIG1vcmUgdGhvcm91Z2ggcmV2aWV3IGlzIGluIG9yZGVyIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMzEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMTo1NjowOC4yMTcwNDUzNjFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NjkzMzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJvdXRlNF9zZXRfcGFybXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL2Nsc19yb3V0ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9jbHNfcm91dGUuYz0zODY9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHJvdXRlNF9wb2xpY3lbVENBX1JPVVRFNF9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9zY2hlZC9jbHNfcm91dGUuYy0zOTItXFxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jOjM5MzpzdGF0aWMgaW50IHJvdXRlNF9zZXRfcGFybXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCxcXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmMtMzk0LVxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGJhc2UsIHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jPTQ4OT1zdGF0aWMgaW50IHJvdXRlNF9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jLTU0MC1cXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmM6NTQxOlxcdGVyciA9IHJvdXRlNF9zZXRfcGFybXMobmV0LCB0cCwgYmFzZSwgZiwgaGFuZGxlLCBoZWFkLCB0YixcXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmMtNTQyLVxcdFxcdFxcdCAgICAgICB0Y2FbVENBX1JBVEVdLCBuZXcsIGZsYWdzLCBleHRhY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMTo1NjowOC4yNjE3NDIzNVoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTkzMTcwNzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBjb2RlIHNlZ21lbnRzIGluIGBuZXQvc2NoZWQvY2xzX3JvdXRlLmNgOlxuXG4qKkRlZXAgRGl2ZSBpbnRvIGBjbHNfcm91dGVgIGFuZCBSZWZlcmVuY2UgQ291bnRpbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIGBjbHNfcm91dGVgIGFnYWluLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIG9mIGBiYCBhbmQgaG93IGBmaWx0ZXJzX3JlZmAgaXMgbGV2ZXJhZ2VkIGluIHRoaXMgY29udGV4dC4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gZm9jdXMgb24gdGhvc2UgY3J1Y2lhbCBmdW5jdGlvbnM6IGByb3V0ZTRfc2V0X3Bhcm1zYCwgYHJvdXRlNF9jaGFuZ2VgLCBhbmQgYHJvdXRlNF9kZWxldGVgLiBJIG5lZWQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgaGFuZGxlIHRoZSBsaWZlY3ljbGUgb2YgdGhlIGZpbHRlciBkYXRhIGFuZCwgcGFydGljdWxhcmx5LCBob3cgdGhhdCByZWZlcmVuY2UgY291bnRlciAoYGZpbHRlcnNfcmVmYCkgcGxheXMgYSByb2xlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ3Jhc3AgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBlbnN1cmUgdGhhdCB3ZSdyZSBwcm9wZXJseSBwcm90ZWN0aW5nIHRoZSBmaWx0ZXIgZGF0YSBhZ2FpbnN0IHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcy4gSSdsbCBiZSBtZXRpY3Vsb3VzbHkgZXhhbWluaW5nIHRoZSBjb2RlIHRvIHBpbnBvaW50IGV4YWN0bHkgd2hlcmUgbWVtb3J5IGlzIGFsbG9jYXRlZCwgaW5pdGlhbGl6ZWQsIHJlZmVyZW5jZWQsIGFuZCB1bHRpbWF0ZWx5LCBkZWFsbG9jYXRlZC4gVGhpcyBpcyBjcml0aWNhbCBmb3IgbWFpbnRhaW5pbmcgZGF0YSBpbnRlZ3JpdHkgYW5kIHN5c3RlbSBzdGFiaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzOTAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMTo1NjoxMC44NTQ5MTU3OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvY2xzX3JvdXRlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDQwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDQwOlxcdFxcdFxcdH1cXG4gNDQxOlxcdFxcdH1cXG4gNDQyOlxcdFxcbiA0NDM6XFx0XFx0aWYgKCFuaGFuZGxlKSB7XFxuIDQ0NDpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJSZXBsYWNpbmcgd2l0aCBoYW5kbGUgb2YgMCBpcyBpbnZhbGlkXFxcIik7XFxuIDQ0NTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDQ2OlxcdFxcdH1cXG4gNDQ3OlxcdFxcbiA0NDg6XFx0XFx0aDEgPSB0b19oYXNoKG5oYW5kbGUpO1xcbiA0NDk6XFx0XFx0YiA9IHJ0bmxfZGVyZWZlcmVuY2UoaGVhZC1cXHUwMDNldGFibGVbaDFdKTtcXG4gNDUwOlxcdFxcdGlmICghYikge1xcbiA0NTE6XFx0XFx0XFx0YiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCByb3V0ZTRfYnVja2V0LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiA0NTI6XFx0XFx0XFx0aWYgKGIgPT0gTlVMTClcXG4gNDUzOlxcdFxcdFxcdFxcdHJldHVybiAtRU5PQlVGUztcXG4gNDU0OlxcdFxcbiA0NTU6XFx0XFx0XFx0cmVmY291bnRfc2V0KFxcdTAwMjZiLVxcdTAwM2VmaWx0ZXJzX3JlZiwgMSk7XFxuIDQ1NjpcXHRcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIoaGVhZC1cXHUwMDNldGFibGVbaDFdLCBiKTtcXG4gNDU3OlxcdFxcdH0gZWxzZSB7XFxuIDQ1ODpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgaDIgPSBmcm9tX2hhc2gobmhhbmRsZSBcXHUwMDNlXFx1MDAzZSAxNik7XFxuIDQ1OTpcXHRcXG4gNDYwOlxcdFxcdFxcdGZvciAoZnAgPSBydG5sX2RlcmVmZXJlbmNlKGItXFx1MDAzZWh0W2gyXSk7XFxuIDQ2MTpcXHRcXHRcXHQgICAgIGZwO1xcbiA0NjI6XFx0XFx0XFx0ICAgICBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoZnAtXFx1MDAzZW5leHQpKVxcbiA0NjM6XFx0XFx0XFx0XFx0aWYgKGZwLVxcdTAwM2VoYW5kbGUgPT0gZi1cXHUwMDNlaGFuZGxlKVxcbiA0NjQ6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuIDQ2NTpcXHRcXG4gNDY2OlxcdFxcdFxcdHJlZmNvdW50X2luYyhcXHUwMDI2Yi1cXHUwMDNlZmlsdGVyc19yZWYpO1xcbiA0Njc6XFx0XFx0fVxcbiA0Njg6XFx0XFxuIDQ2OTpcXHRcXHRpZiAodGJbVENBX1JPVVRFNF9UT10pXFxuIDQ3MDpcXHRcXHRcXHRmLVxcdTAwM2VpZCA9IHRvO1xcbiA0NzE6XFx0XFxuIDQ3MjpcXHRcXHRpZiAodGJbVENBX1JPVVRFNF9GUk9NXSlcXG4gNDczOlxcdFxcdFxcdGYtXFx1MDAzZWlkID0gdG8gfCBpZFxcdTAwM2NcXHUwMDNjMTY7XFxuIDQ3NDpcXHRcXHRlbHNlIGlmICh0YltUQ0FfUk9VVEU0X0lJRl0pXFxuIDQ3NTpcXHRcXHRcXHRmLVxcdTAwM2VpaWYgPSBpZDtcXG4gNDc2OlxcdFxcbiA0Nzc6XFx0XFx0Zi1cXHUwMDNlaGFuZGxlID0gbmhhbmRsZTtcXG4gNDc4OlxcdFxcdGYtXFx1MDAzZWJrdCA9IGI7XFxuIDQ3OTpcXHRcXHRmLVxcdTAwM2V0cCA9IHRwO1xcbiA0ODA6XFx0XFxuIDQ4MTpcXHRcXHRpZiAodGJbVENBX1JPVVRFNF9DTEFTU0lEXSkge1xcbiA0ODI6XFx0XFx0XFx0Zi1cXHUwMDNlcmVzLmNsYXNzaWQgPSBubGFfZ2V0X3UzMih0YltUQ0FfUk9VVEU0X0NMQVNTSURdKTtcXG4gNDgzOlxcdFxcdFxcdHRjZl9iaW5kX2ZpbHRlcih0cCwgXFx1MDAyNmYtXFx1MDAzZXJlcywgYmFzZSk7XFxuIDQ4NDpcXHRcXHR9XFxuIDQ4NTpcXHRcXG4gNDg2OlxcdFxcdHJldHVybiAwO1xcbiA0ODc6XFx0fVxcbiA0ODg6XFx0XFxuIDQ4OTpcXHRzdGF0aWMgaW50IHJvdXRlNF9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbiA0OTA6XFx0XFx0XFx0XFx0IHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB1bnNpZ25lZCBsb25nIGJhc2UsIHUzMiBoYW5kbGUsXFxuIDQ5MTpcXHRcXHRcXHRcXHQgc3RydWN0IG5sYXR0ciAqKnRjYSwgdm9pZCAqKmFyZywgdTMyIGZsYWdzLFxcbiA0OTI6XFx0XFx0XFx0XFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4gNDkzOlxcdHtcXG4gNDk0OlxcdFxcdHN0cnVjdCByb3V0ZTRfaGVhZCAqaGVhZCA9IHJ0bmxfZGVyZWZlcmVuY2UodHAtXFx1MDAzZXJvb3QpO1xcbiA0OTU6XFx0XFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgX19yY3UgKipmcDtcXG4gNDk2OlxcdFxcdHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmb2xkLCAqZjEsICpwZnAsICpmID0gTlVMTDtcXG4gNDk3OlxcdFxcdHN0cnVjdCByb3V0ZTRfYnVja2V0ICpiO1xcbiA0OTg6XFx0XFx0c3RydWN0IG5sYXR0ciAqdGJbVENBX1JPVVRFNF9NQVggKyAxXTtcXG4gNDk5OlxcdFxcdHVuc2lnbmVkIGludCBoO1xcbiA1MDA6XFx0XFx0aW50IGVycjtcXG4gNTAxOlxcdFxcdGJvb2wgbmV3ID0gdHJ1ZTtcXG4gNTAyOlxcdFxcbiA1MDM6XFx0XFx0aWYgKCFoYW5kbGUpIHtcXG4gNTA0OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkNyZWF0aW5nIHdpdGggaGFuZGxlIG9mIDAgaXMgaW52YWxpZFxcXCIpO1xcbiA1MDU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDUwNjpcXHRcXHR9XFxuIDUwNzpcXHRcXG4gNTA4OlxcdFxcdGlmIChOTF9SRVFfQVRUUl9DSEVDSyhleHRhY2ssIE5VTEwsIHRjYSwgVENBX09QVElPTlMpKSB7XFxuIDUwOTpcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiTWlzc2luZyBvcHRpb25zXFxcIik7XFxuIDUxMDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNTExOlxcdFxcdH1cXG4gNTEyOlxcdFxcbiA1MTM6XFx0XFx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHRiLCBUQ0FfUk9VVEU0X01BWCwgdGNhW1RDQV9PUFRJT05TXSxcXG4gNTE0OlxcdFxcdFxcdFxcdFxcdFxcdCAgcm91dGU0X3BvbGljeSwgTlVMTCk7XFxuIDUxNTpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gNTE2OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDUxNzpcXHRcXG4gNTE4OlxcdFxcdGZvbGQgPSAqYXJnO1xcbiA1MTk6XFx0XFx0aWYgKGZvbGQgXFx1MDAyNlxcdTAwMjYgZm9sZC1cXHUwMDNlaGFuZGxlICE9IGhhbmRsZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMjE6NTY6MTAuODU1MDEwOThaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEyODgxMjc5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgYGNsc19yb3V0ZS5jYCBDb2RlKipcblxuT2theSwgc28gd2UndmUgYWRkcmVzc2VkIHRoZSBicm9hZGVyIGlzc3VlLCBidXQgSSBoYXZlIGEgbmFnZ2luZyBmZWVsaW5nIHdlIG5lZWQgdG8gYmUgdGhvcm91Z2guIExldCdzIG5vdCBqdXN0IGFzc3VtZTsgd2UgbmVlZCB0byB2ZXJpZnkuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gbGluZXMgNTIwIHRocm91Z2ggNTgwIG9mIGBjbHNfcm91dGUuY2AuIFRoaXMgc2VjdGlvbiAqZmVlbHMqIGxpa2UgYSBsaWtlbHkgYXJlYSBmb3IgdGhlIHByb2JsZW0gd2UgYXJlIGV4cGVyaWVuY2luZy4gSXTigJlzIHdoZXJlIGEgY3JpdGljYWwgcm91dGluZyBmdW5jdGlvbiBoYXBwZW5zLiBJIGNhbiBhbHJlYWR5IHBpY3R1cmUgdGhlIHBvdGVudGlhbCBsb2dpYyBmbG93IHRoZXJlLCBhbmQgdGhlIHNwZWNpZmljIHZhcmlhYmxlcyB0aGF0IG1pZ2h0IGJlIGludm9sdmVkLiBUaW1lIHRvIHJvbGwgdXAgbXkgc2xlZXZlcyBhbmQgc2VlIHdoYXQgdGhvc2UgbGluZXMgYXJlICpyZWFsbHkqIGRvaW5nLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGVkZ2UgY2FzZXMsIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG9yIGFueXRoaW5nIHRoYXQgY291bGQgYmUgc3VidGx5IGltcGFjdGluZyB0aGUgcm91dGluZyBkZWNpc2lvbi4gSXTigJlzIGFsd2F5cyBiZXN0IHRvIGJlIHByZWNpc2Ugd2hlbiBpdCBjb21lcyB0byBwcm9ibGVtcyBsaWtlIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MjYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDIxOjU2OjEyLjk4MzgyNzgzN1oiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvY2xzX3JvdXRlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTIwLFxuICBcIkxpbmVDb3VudFwiOiA2NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTIwOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1MjE6XFx0XFxuIDUyMjpcXHRcXHRlcnIgPSAtRU5PQlVGUztcXG4gNTIzOlxcdFxcdGYgPSBremFsbG9jX29iaihzdHJ1Y3Qgcm91dGU0X2ZpbHRlciwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gNTI0OlxcdFxcdGlmICghZilcXG4gNTI1OlxcdFxcdFxcdGdvdG8gZXJyb3V0O1xcbiA1MjY6XFx0XFxuIDUyNzpcXHRcXHRlcnIgPSB0Y2ZfZXh0c19pbml0KFxcdTAwMjZmLVxcdTAwM2VleHRzLCBuZXQsIFRDQV9ST1VURTRfQUNULCBUQ0FfUk9VVEU0X1BPTElDRSk7XFxuIDUyODpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gNTI5OlxcdFxcdFxcdGdvdG8gZXJyb3V0O1xcbiA1MzA6XFx0XFxuIDUzMTpcXHRcXHRpZiAoZm9sZCkge1xcbiA1MzI6XFx0XFx0XFx0Zi1cXHUwMDNlaWQgPSBmb2xkLVxcdTAwM2VpZDtcXG4gNTMzOlxcdFxcdFxcdGYtXFx1MDAzZWlpZiA9IGZvbGQtXFx1MDAzZWlpZjtcXG4gNTM0OlxcdFxcdFxcdGYtXFx1MDAzZWhhbmRsZSA9IGZvbGQtXFx1MDAzZWhhbmRsZTtcXG4gNTM1OlxcdFxcbiA1MzY6XFx0XFx0XFx0Zi1cXHUwMDNldHAgPSBmb2xkLVxcdTAwM2V0cDtcXG4gNTM3OlxcdFxcdFxcdGYtXFx1MDAzZWJrdCA9IGZvbGQtXFx1MDAzZWJrdDtcXG4gNTM4OlxcdFxcdFxcdG5ldyA9IGZhbHNlO1xcbiA1Mzk6XFx0XFx0fVxcbiA1NDA6XFx0XFxuIDU0MTpcXHRcXHRlcnIgPSByb3V0ZTRfc2V0X3Bhcm1zKG5ldCwgdHAsIGJhc2UsIGYsIGhhbmRsZSwgaGVhZCwgdGIsXFxuIDU0MjpcXHRcXHRcXHRcXHQgICAgICAgdGNhW1RDQV9SQVRFXSwgbmV3LCBmbGFncywgZXh0YWNrKTtcXG4gNTQzOlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiA1NDQ6XFx0XFx0XFx0Z290byBlcnJvdXQ7XFxuIDU0NTpcXHRcXG4gNTQ2OlxcdFxcdGggPSBmcm9tX2hhc2goZi1cXHUwMDNlaGFuZGxlIFxcdTAwM2VcXHUwMDNlIDE2KTtcXG4gNTQ3OlxcdFxcdGZwID0gXFx1MDAyNmYtXFx1MDAzZWJrdC1cXHUwMDNlaHRbaF07XFxuIDU0ODpcXHRcXHRmb3IgKHBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKTtcXG4gNTQ5OlxcdFxcdCAgICAgKGYxID0gcnRubF9kZXJlZmVyZW5jZSgqZnApKSAhPSBOVUxMO1xcbiA1NTA6XFx0XFx0ICAgICBmcCA9IFxcdTAwMjZmMS1cXHUwMDNlbmV4dClcXG4gNTUxOlxcdFxcdFxcdGlmIChmLVxcdTAwM2VoYW5kbGUgXFx1MDAzYyBmMS1cXHUwMDNlaGFuZGxlKVxcbiA1NTI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDU1MzpcXHRcXG4gNTU0OlxcdFxcdHRjZl9ibG9ja19uZXRpZl9rZWVwX2RzdCh0cC1cXHUwMDNlY2hhaW4tXFx1MDAzZWJsb2NrKTtcXG4gNTU1OlxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcihmLVxcdTAwM2VuZXh0LCBmMSk7XFxuIDU1NjpcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIoKmZwLCBmKTtcXG4gNTU3OlxcdFxcbiA1NTg6XFx0XFx0aWYgKGZvbGQpIHtcXG4gNTU5OlxcdFxcdFxcdGIgPSBmb2xkLVxcdTAwM2Via3Q7XFxuIDU2MDpcXHRcXHRcXHRoID0gZnJvbV9oYXNoKGZvbGQtXFx1MDAzZWhhbmRsZSBcXHUwMDNlXFx1MDAzZSAxNik7XFxuIDU2MTpcXHRcXHRcXHRmcCA9IFxcdTAwMjZiLVxcdTAwM2VodFtoXTtcXG4gNTYyOlxcdFxcdFxcdGZvciAocGZwID0gcnRubF9kZXJlZmVyZW5jZSgqZnApOyBwZnA7XFxuIDU2MzpcXHRcXHRcXHQgICAgIGZwID0gXFx1MDAyNnBmcC1cXHUwMDNlbmV4dCwgcGZwID0gcnRubF9kZXJlZmVyZW5jZSgqZnApKSB7XFxuIDU2NDpcXHRcXHRcXHRcXHRpZiAocGZwID09IGZvbGQpIHtcXG4gNTY1OlxcdFxcdFxcdFxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcigqZnAsIGZvbGQtXFx1MDAzZW5leHQpO1xcbiA1NjY6XFx0XFx0XFx0XFx0XFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2Yi1cXHUwMDNlZmlsdGVyc19yZWYpKSB7XFxuIDU2NzpcXHRcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgdGggPSB0b19oYXNoKGZvbGQtXFx1MDAzZWhhbmRsZSk7XFxuIDU2ODpcXHRcXG4gNTY5OlxcdFxcdFxcdFxcdFxcdFxcdFJDVV9JTklUX1BPSU5URVIoaGVhZC1cXHUwMDNldGFibGVbdGhdLCBOVUxMKTtcXG4gNTcwOlxcdFxcdFxcdFxcdFxcdFxcdGtmcmVlX3JjdShiLCByY3UpO1xcbiA1NzE6XFx0XFx0XFx0XFx0XFx0fVxcbiA1NzI6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDU3MzpcXHRcXHRcXHRcXHR9XFxuIDU3NDpcXHRcXHRcXHR9XFxuIDU3NTpcXHRcXHR9XFxuIDU3NjpcXHRcXG4gNTc3OlxcdFxcdHJvdXRlNF9yZXNldF9mYXN0bWFwKGhlYWQsIGZvbGQpO1xcbiA1Nzg6XFx0XFx0KmFyZyA9IGY7XFxuIDU3OTpcXHRcXHRpZiAoZm9sZCkge1xcbiA1ODA6XFx0XFx0XFx0dGNmX3VuYmluZF9maWx0ZXIodHAsIFxcdTAwMjZmb2xkLVxcdTAwM2VyZXMpO1xcbiA1ODE6XFx0XFx0XFx0dGNmX2V4dHNfZ2V0X25ldChcXHUwMDI2Zm9sZC1cXHUwMDNlZXh0cyk7XFxuIDU4MjpcXHRcXHRcXHR0Y2ZfcXVldWVfd29yayhcXHUwMDI2Zm9sZC1cXHUwMDNlcndvcmssIHJvdXRlNF9kZWxldGVfZmlsdGVyX3dvcmspO1xcbiA1ODM6XFx0XFx0fVxcbiA1ODQ6XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDIxOjU2OjEyLjk4MzkyOTA3N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTAwODg1NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipSZXZpZXdpbmcgQ2hhbmdlcyBpbiBgcm91dGU0X2RlbGV0ZWAqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW4gYW5kIG1ha2UgYWJzb2x1dGVseSBjZXJ0YWluIEkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBjaGFuZ2VzLiBJIG5lZWQgdG8gY29tcHJlaGVuc2l2ZWx5IHJldmlldyBgcm91dGU0X2RlbGV0ZWAg4oCTIHRoZSBmdW5jdGlvbiBpdHNlbGYsIGl0cyBpbXBsZW1lbnRhdGlvbiwgYW5kIGl0cyBpbnRlbmRlZCBiZWhhdmlvci4gQnV0IHRoYXQncyBub3QgZW5vdWdoOyBJIGhhdmUgdG8gem9vbSBvdXQgYW5kIGNvbnNpZGVyIHRoZSBlbnRpcmUgZmlsZSBjb250ZXh0LiBJIHdhbnQgdG8gbG9vayBhdCBob3cgdGhpcyBkZWxldGlvbiBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCAqZXZlcnl0aGluZyogZWxzZSBpbiB0aGUgZmlsZSDigJMgYWxsIHRoZSBvdGhlciByb3V0ZXMsIGRhdGEgc3RydWN0dXJlcywgZGVwZW5kZW5jaWVzLCBlcnJvciBoYW5kbGluZy4uLiBldmVyeXRoaW5nIHRoYXQgY291bGQgcG9zc2libHkgYmUgdG91Y2hlZCBvciBpbmZsdWVuY2VkLiBJJ20gdGhpbmtpbmcgYWJvdXQgZWRnZSBjYXNlcywgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgdGhlIHdob2xlIGVuY2hpbGFkYS4gTm8gc3RvbmUgdW50dXJuZWQuIEEgdGhvcm91Z2ggYW5hbHlzaXMgaXMgdGhlIG9ubHkgd2F5IHRvIGJlIGNvbmZpZGVudCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTg4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMTo1NjoxNC44ODQ4MTcyMDdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL2Nsc19yb3V0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMzMCxcbiAgXCJMaW5lQ291bnRcIjogNTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMzMDpcXHR9XFxuIDMzMTpcXHRcXG4gMzMyOlxcdHN0YXRpYyBpbnQgcm91dGU0X2RlbGV0ZShzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdm9pZCAqYXJnLCBib29sICpsYXN0LFxcbiAzMzM6XFx0XFx0XFx0XFx0IGJvb2wgcnRubF9oZWxkLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDMzNDpcXHR7XFxuIDMzNTpcXHRcXHRzdHJ1Y3Qgcm91dGU0X2hlYWQgKmhlYWQgPSBydG5sX2RlcmVmZXJlbmNlKHRwLVxcdTAwM2Vyb290KTtcXG4gMzM2OlxcdFxcdHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmID0gYXJnO1xcbiAzMzc6XFx0XFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgX19yY3UgKipmcDtcXG4gMzM4OlxcdFxcdHN0cnVjdCByb3V0ZTRfZmlsdGVyICpuZjtcXG4gMzM5OlxcdFxcdHN0cnVjdCByb3V0ZTRfYnVja2V0ICpiO1xcbiAzNDA6XFx0XFx0dW5zaWduZWQgaW50IGggPSAwO1xcbiAzNDE6XFx0XFx0aW50IGgxO1xcbiAzNDI6XFx0XFxuIDM0MzpcXHRcXHRpZiAoIWhlYWQgfHwgIWYpXFxuIDM0NDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMzQ1OlxcdFxcbiAzNDY6XFx0XFx0aCA9IGYtXFx1MDAzZWhhbmRsZTtcXG4gMzQ3OlxcdFxcdGIgPSBmLVxcdTAwM2Via3Q7XFxuIDM0ODpcXHRcXG4gMzQ5OlxcdFxcdGZwID0gXFx1MDAyNmItXFx1MDAzZWh0W2Zyb21faGFzaChoIFxcdTAwM2VcXHUwMDNlIDE2KV07XFxuIDM1MDpcXHRcXHRmb3IgKG5mID0gcnRubF9kZXJlZmVyZW5jZSgqZnApOyBuZjtcXG4gMzUxOlxcdFxcdCAgICAgZnAgPSBcXHUwMDI2bmYtXFx1MDAzZW5leHQsIG5mID0gcnRubF9kZXJlZmVyZW5jZSgqZnApKSB7XFxuIDM1MjpcXHRcXHRcXHRpZiAobmYgPT0gZikge1xcbiAzNTM6XFx0XFx0XFx0XFx0LyogdW5saW5rIGl0ICovXFxuIDM1NDpcXHRcXHRcXHRcXHRSQ1VfSU5JVF9QT0lOVEVSKCpmcCwgcnRubF9kZXJlZmVyZW5jZShmLVxcdTAwM2VuZXh0KSk7XFxuIDM1NTpcXHRcXG4gMzU2OlxcdFxcdFxcdFxcdC8qIENsZWFyIGFueSBmYXN0bWFwIGVudHJpZXMgdGhhdCBtYXkgcmVmIHRoaXMgZmlsdGVyIGFuZFxcbiAzNTc6XFx0XFx0XFx0XFx0ICogbWFyayBpdCBkeWluZyBzbyBpbi1mbGlnaHQgcmVhZGVycyBjYW4ndCByZXB1Ymxpc2ggaXRcXG4gMzU4OlxcdFxcdFxcdFxcdCAqIGFmdGVyIHRoZSByZXNldC5cXG4gMzU5OlxcdFxcdFxcdFxcdCAqL1xcbiAzNjA6XFx0XFx0XFx0XFx0cm91dGU0X3Jlc2V0X2Zhc3RtYXAoaGVhZCwgZik7XFxuIDM2MTpcXHRcXG4gMzYyOlxcdFxcdFxcdFxcdC8qIERlbGV0ZSBpdCAqL1xcbiAzNjM6XFx0XFx0XFx0XFx0dGNmX3VuYmluZF9maWx0ZXIodHAsIFxcdTAwMjZmLVxcdTAwM2VyZXMpO1xcbiAzNjQ6XFx0XFx0XFx0XFx0dGNmX2V4dHNfZ2V0X25ldChcXHUwMDI2Zi1cXHUwMDNlZXh0cyk7XFxuIDM2NTpcXHRcXHRcXHRcXHR0Y2ZfcXVldWVfd29yayhcXHUwMDI2Zi1cXHUwMDNlcndvcmssIHJvdXRlNF9kZWxldGVfZmlsdGVyX3dvcmspO1xcbiAzNjY6XFx0XFxuIDM2NzpcXHRcXHRcXHRcXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZiLVxcdTAwM2VmaWx0ZXJzX3JlZikpIHtcXG4gMzY4OlxcdFxcdFxcdFxcdFxcdFJDVV9JTklUX1BPSU5URVIoaGVhZC1cXHUwMDNldGFibGVbdG9faGFzaChoKV0sIE5VTEwpO1xcbiAzNjk6XFx0XFx0XFx0XFx0XFx0a2ZyZWVfcmN1KGIsIHJjdSk7XFxuIDM3MDpcXHRcXHRcXHRcXHR9XFxuIDM3MTpcXHRcXHRcXHRcXHRicmVhaztcXG4gMzcyOlxcdFxcdFxcdH1cXG4gMzczOlxcdFxcdH1cXG4gMzc0OlxcdFxcbiAzNzU6XFx0XFx0Kmxhc3QgPSB0cnVlO1xcbiAzNzY6XFx0XFx0Zm9yIChoMSA9IDA7IGgxIFxcdTAwM2M9IDI1NjsgaDErKykge1xcbiAzNzc6XFx0XFx0XFx0aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihoZWFkLVxcdTAwM2V0YWJsZVtoMV0pKSB7XFxuIDM3ODpcXHRcXHRcXHRcXHQqbGFzdCA9IGZhbHNlO1xcbiAzNzk6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDM4MDpcXHRcXHRcXHR9XFxuIDM4MTpcXHRcXHR9XFxuIDM4MjpcXHRcXG4gMzgzOlxcdFxcdHJldHVybiAwO1xcbiAzODQ6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMTo1NjoxNC44ODQ5MDE3OTdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Nzc1NDUxNzU1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogTmVlZHNLTVNBTiA9IGZhbHNlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSByZWZlcmVuY2UgY291bnQsIGBmaWx0ZXJzX3JlZmAsIHRvIHRoZSBgc3RydWN0IHJvdXRlNF9idWNrZXRgLiBNeSBnb2FsIGhlcmUgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIHJlcXVpcmVzIEtNU0FOLCBvciBLZXJuZWwgTWVtb3J5IFNhbml0aXplciwgYXR0ZW50aW9uLlxuXG5GaXJzdCwgSSdtIG5vdGluZyB0aGUgY2hhbmdlcy4gVGhlIGByb3V0ZTRfYnVja2V0YCBub3cgaGFzIHRoZSBgZmlsdGVyc19yZWZgIG1lbWJlci4gIGByb3V0ZTRfc2V0X3Bhcm1zYCBpbml0aWFsaXplcyB0aGlzIGNvdW50IHRvIDEgd2hlbiBhIG5ldyBidWNrZXQgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqYCwgYW5kIGluY3JlbWVudHMgaXQgd2hlbiBmaWx0ZXJzIGFyZSBhZGRlZC4gYHJvdXRlNF9kZWxldGVgIGRlY3JlbWVudHMgdGhlIGNvdW50LCBmcmVlaW5nIHRoZSBidWNrZXQgaWYgaXQgaGl0cyB6ZXJvIHVzaW5nIGBrZnJlZV9yY3VgLiBgcm91dGU0X2NoYW5nZWAgaGFuZGxlcyBmaWx0ZXIgcmVwbGFjZW1lbnRzIHNpbWlsYXJseSwgZGVjcmVtZW50aW5nIGFuZCBmcmVlaW5nIHRoZSBvbGQgYnVja2V0LiBUaGUgd2hvbGUgdGhpbmcgaGluZ2VzIG9uIGEgYHJlZmNvdW50X3RgLlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiBpcyBhbHdheXMgdW5pbml0aWFsaXplZCBtZW1vcnksIG9mIGNvdXJzZS4gIEJ1dCBga3phbGxvY19vYmpgIGd1YXJhbnRlZXMgemVyby1pbml0aWFsaXphdGlvbiBvZiB0aGUgYHJvdXRlNF9idWNrZXRgLCBhbmQgdGhlIGByZWZjb3VudF9zZXRgIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZXMgdGhlIGBmaWx0ZXJzX3JlZmAgbWVtYmVyLiBJJ20gc2VlaW5nIG5vIG5ldyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzLCBubyBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29waWVzIHRoYXQgY291bGQgbGVhayBpbmZvcm1hdGlvbiwgYW5kIG5vIGNvbnRyb2wgZmxvdyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBFeGNlbGxlbnQuXG5cbk5vdywgd2hhdCBhYm91dCBwb3RlbnRpYWwgYnVncz8gSSdtIHRoaW5raW5nIHJlZmVyZW5jZSBjb3VudGluZyBwcm9ibGVtcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlcywgbWVtb3J5IGxlYWtzLCBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4gIEhvd2V2ZXIsIHRoZXNlIGFyZSB0aGluZ3MgdGhhdCBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBhbmQgc3RhbmRhcmQgZGVidWdnZXJzIHdpdGggcmVmY291bnQgdW5kZXIvb3ZlcmZsb3cgY2hlY2tzIGFyZSBkZXNpZ25lZCB0byBjYXRjaC4gIENydWNpYWxseSwgdGhlc2UgYnVncyAqZG9uJ3QqIGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLlxuXG5BbHJpZ2h0LCBsZXQncyBnbyBkb3duIHRoZSBLTVNBTiBjaGVja2xpc3QuXG5cbjEuICBEb2VzIHRoZSBwYXRjaCB0b3VjaCBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2Ugd2hlcmUgZmllbGRzIG1pZ2h0IGJlIHVuaW5pdGlhbGl6ZWQ/IE5vcGUsIG5vdGhpbmcgaXMgbW9kaWZpZWQgcmVnYXJkaW5nIHN0cnVjdHVyZXMgdGhhdCBhcmUgc2VudCB0byB1c2VyIHNwYWNlLlxuMi4gIERvZXMgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBObywgdGhlIGBmaWx0ZXJzX3JlZmAgaXMgaW5pdGlhbGl6ZWQgb24gYWxsb2NhdGlvbi5cbjMuICBEb2VzIGl0IGludHJvZHVjZSBhbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHMgdGhhdCBjb3VsZCBiZSByZWFkIGxhdGVyPyBObywgYGt6YWxsb2Nfb2JqYCBhbmQgYHJlZmNvdW50X3NldGAgaGFuZGxlcyB0aGF0LlxuNC4gIERvZXMgaXQgbWVzcyB3aXRoIGJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIHRoYXQgYWxsb3dzIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzPyBOby5cblxuT2theSwgbGV0J3MgZmxpcCB0aGUgY2hlY2tsaXN0IG9uIGl0cyBoZWFkLiBUaGlzIHBhdGNoICpkb2Vzbid0KiBpbnRyb2R1Y2UgYW55OlxuXG4qICAgT3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKGJleW9uZCB0aGUgcmVmY291bnRpbmcgZXJyb3JzLCBhbHJlYWR5IGNvdmVyZWQgYnkgS0FTQU4pLlxuKiAgIFVuaW5pdGlhbGl6ZWQgZGF0YSBiZWluZyByZWFkIG9yIGNvcGllZC5cbiogICBSaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblRoZXJlZm9yZSwgdGhlIGNvbmNsdXNpb24gaXMgY2xlYXI6IGBOZWVkc0tNU0FOID0gZmFsc2VgLiBJIGNhbiBwcm9jZWVkIHRvIGNvbnN0cnVjdCB0aGUgYHNldC1yZXN1bHRzYCBjYWxsIHdpdGggdGhpcyBpbmZvcm1hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIzMiwiT3V0cHV0VG9rZW5zIjoyNDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMTo1NjoyMi42Mzk0MjI0NzdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSByZWZlcmVuY2UgY291bnRlciAoYGZpbHRlcnNfcmVmYCkgdG8gYHN0cnVjdCByb3V0ZTRfYnVja2V0YCBpbiBgbmV0L3NjaGVkL2Nsc19yb3V0ZS5jYCB0byB0cmFjayBhY3RpdmUgZmlsdGVycyBpbiBlYWNoIGJ1Y2tldCBhbmQgbWFuYWdlIGJ1Y2tldCByZWNsYW1hdGlvbiB2aWEgUkNVLCByZXBsYWNpbmcgYSBsaW5lYXIgc2NhbiBvZiBidWNrZXQgc2xvdHMuXFxuXFxuLSBNZW1vcnkgSW5pdGlhbGl6YXRpb246IFRoZSBidWNrZXQgc3RydWN0dXJlIGBzdHJ1Y3Qgcm91dGU0X2J1Y2tldGAgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iaigpYCBhbmQgYGZpbHRlcnNfcmVmYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHdpdGggYHJlZmNvdW50X3NldChcXHUwMDI2Yi1cXHUwMDNlZmlsdGVyc19yZWYsIDEpYCB1cG9uIGNyZWF0aW9uLlxcbi0gUG90ZW50aWFsIEJ1ZyBUeXBlczogQW55IHBvdGVudGlhbCBidWdzIHJlc3VsdGluZyBmcm9tIHRoaXMgcmVmYWN0b3JpbmcgKGUuZy4gaW5jb3JyZWN0IHJlZmVyZW5jZSBjb3VudGluZywgZG91YmxlIGZyZWVzLCBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zKSBhcmUgbWVtb3J5IGxpZmVjeWNsZSAvIHBvaW50ZXIgdmFsaWRpdHkgYnVncyB0aGF0IGFyZSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgdGhlIGByZWZjb3VudF90YCBydW50aW1lIGNoZWNrcy5cXG4tIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IC8gSW5mby1sZWFrIFJpc2s6IFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0dXJlIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gYnJhbmNoaW5nIGRlY2lzaW9ucy5cXG5cXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHJlZmVyZW5jZSBjb3VudGVyIChgZmlsdGVyc19yZWZgKSB0byBgc3RydWN0IHJvdXRlNF9idWNrZXRgIGluIGBuZXQvc2NoZWQvY2xzX3JvdXRlLmNgIHRvIHRyYWNrIGFjdGl2ZSBmaWx0ZXJzIGluIGVhY2ggYnVja2V0IGFuZCBtYW5hZ2UgYnVja2V0IHJlY2xhbWF0aW9uIHZpYSBSQ1UsIHJlcGxhY2luZyBhIGxpbmVhciBzY2FuIG9mIGJ1Y2tldCBzbG90cy5cXG5cXG4tIE1lbW9yeSBJbml0aWFsaXphdGlvbjogVGhlIGJ1Y2tldCBzdHJ1Y3R1cmUgYHN0cnVjdCByb3V0ZTRfYnVja2V0YCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqKClgIGFuZCBgZmlsdGVyc19yZWZgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgd2l0aCBgcmVmY291bnRfc2V0KFxcdTAwMjZiLVxcdTAwM2VmaWx0ZXJzX3JlZiwgMSlgIHVwb24gY3JlYXRpb24uXFxuLSBQb3RlbnRpYWwgQnVnIFR5cGVzOiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhpcyByZWZhY3RvcmluZyAoZS5nLiBpbmNvcnJlY3QgcmVmZXJlbmNlIGNvdW50aW5nLCBkb3VibGUgZnJlZXMsIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMpIGFyZSBtZW1vcnkgbGlmZWN5Y2xlIC8gcG9pbnRlciB2YWxpZGl0eSBidWdzIHRoYXQgYXJlIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCB0aGUgYHJlZmNvdW50X3RgIHJ1bnRpbWUgY2hlY2tzLlxcbi0gVW5pbml0aWFsaXplZCBNZW1vcnkgLyBJbmZvLWxlYWsgUmlzazogVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3R1cmUgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBicmFuY2hpbmcgZGVjaXNpb25zLlxcblxcblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowhkpjg[1] Phase: Succeeded StartedAt: 2026-08-29 21:56:34 +0000 UTC FinishedAt: 2026-08-29 21:56:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhkpjg[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-29 21:56:34 +0000 UTC FinishedAt: 2026-08-29 21:56:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhkpjg[2] Phase: Succeeded StartedAt: 2026-08-29 21:56:34 +0000 UTC FinishedAt: 2026-08-30 01:35:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhkpjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"series_id":"70ee2f5e-9451-4479-8557-0fb8ffc2b9fc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-29 21:56:34 +0000 UTC FinishedAt: 2026-08-30 01:35:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"series_id":"70ee2f5e-9451-4479-8557-0fb8ffc2b9fc","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-workflowhkpjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"series_id":"70ee2f5e-9451-4479-8557-0fb8ffc2b9fc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-29 21:56:34 +0000 UTC FinishedAt: 2026-08-29 21:56:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhkpjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"series_id":"70ee2f5e-9451-4479-8557-0fb8ffc2b9fc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-29 21:56:34 +0000 UTC FinishedAt: 2026-08-29 21:56:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"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-workflowhkpjg/series-workflowhkpjg-convert-artifact-1453087070/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhkpjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"series_id":"70ee2f5e-9451-4479-8557-0fb8ffc2b9fc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-29 21:56:44 +0000 UTC FinishedAt: 2026-08-29 22:12:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhkpjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"series_id":"70ee2f5e-9451-4479-8557-0fb8ffc2b9fc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-29 21:56:44 +0000 UTC FinishedAt: 2026-08-29 22:12:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*62ff91de-86c5-4df5-abf0-678a455b8d94,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-workflowhkpjg/series-workflowhkpjg-convert-artifact-1453087070/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": "cf036453-8b76-4c24-a9f6-b11a52314af2", "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-workflowhkpjg/series-workflowhkpjg-build-action-739801668/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhkpjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"series_id":"70ee2f5e-9451-4479-8557-0fb8ffc2b9fc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-29 21:56:44 +0000 UTC FinishedAt: 2026-08-29 22:12:28 +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:*62ff91de-86c5-4df5-abf0-678a455b8d94,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-workflowhkpjg/series-workflowhkpjg-convert-artifact-1453087070/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": "cf036453-8b76-4c24-a9f6-b11a52314af2", "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-workflowhkpjg/series-workflowhkpjg-build-action-739801668/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhkpjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"series_id":"70ee2f5e-9451-4479-8557-0fb8ffc2b9fc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-29 22:12:38 +0000 UTC FinishedAt: 2026-08-29 22:12:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhkpjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"series_id":"70ee2f5e-9451-4479-8557-0fb8ffc2b9fc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-29 22:12:38 +0000 UTC FinishedAt: 2026-08-29 22:12:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhkpjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"series_id":"70ee2f5e-9451-4479-8557-0fb8ffc2b9fc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-29 22:12:38 +0000 UTC FinishedAt: 2026-08-29 22:12:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhkpjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"series_id":"70ee2f5e-9451-4479-8557-0fb8ffc2b9fc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-29 22:12:38 +0000 UTC FinishedAt: 2026-08-29 22:12:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"series_id":"70ee2f5e-9451-4479-8557-0fb8ffc2b9fc","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-workflowhkpjg/series-workflowhkpjg-convert-artifact-4165482513/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhkpjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"series_id":"70ee2f5e-9451-4479-8557-0fb8ffc2b9fc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-29 22:12:48 +0000 UTC FinishedAt: 2026-08-29 22:15:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhkpjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"series_id":"70ee2f5e-9451-4479-8557-0fb8ffc2b9fc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-29 22:12:48 +0000 UTC FinishedAt: 2026-08-29 22:14:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cf036453-8b76-4c24-a9f6-b11a52314af2,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-workflowhkpjg/series-workflowhkpjg-build-action-739801668/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-workflowhkpjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"series_id":"70ee2f5e-9451-4479-8557-0fb8ffc2b9fc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-29 22:15:01 +0000 UTC FinishedAt: 2026-08-29 22:15:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhkpjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"series_id":"70ee2f5e-9451-4479-8557-0fb8ffc2b9fc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-29 22:15:01 +0000 UTC FinishedAt: 2026-08-29 22:15:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhkpjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"series_id":"70ee2f5e-9451-4479-8557-0fb8ffc2b9fc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-29 22:15:01 +0000 UTC FinishedAt: 2026-08-29 22:30:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhkpjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"series_id":"70ee2f5e-9451-4479-8557-0fb8ffc2b9fc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-29 22:15:01 +0000 UTC FinishedAt: 2026-08-29 22:30:46 +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:*62ff91de-86c5-4df5-abf0-678a455b8d94,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-workflowhkpjg/series-workflowhkpjg-convert-artifact-4165482513/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": "81e8c49a-a7da-4d93-9a1b-293396465156", "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-workflowhkpjg/series-workflowhkpjg-build-action-2925471709/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhkpjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"series_id":"70ee2f5e-9451-4479-8557-0fb8ffc2b9fc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-29 22:15:01 +0000 UTC FinishedAt: 2026-08-29 22:30:36 +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:*62ff91de-86c5-4df5-abf0-678a455b8d94,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-workflowhkpjg/series-workflowhkpjg-convert-artifact-4165482513/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": "81e8c49a-a7da-4d93-9a1b-293396465156", "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-workflowhkpjg/series-workflowhkpjg-build-action-2925471709/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhkpjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"series_id":"70ee2f5e-9451-4479-8557-0fb8ffc2b9fc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-29 22:30:46 +0000 UTC FinishedAt: 2026-08-29 22:30:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhkpjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"series_id":"70ee2f5e-9451-4479-8557-0fb8ffc2b9fc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-29 22:30:46 +0000 UTC FinishedAt: 2026-08-29 22:30:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhkpjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"series_id":"70ee2f5e-9451-4479-8557-0fb8ffc2b9fc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-29 22:30:46 +0000 UTC FinishedAt: 2026-08-29 22:32:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhkpjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"series_id":"70ee2f5e-9451-4479-8557-0fb8ffc2b9fc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-29 22:30:46 +0000 UTC FinishedAt: 2026-08-29 22:32:33 +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:*81e8c49a-a7da-4d93-9a1b-293396465156,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-workflowhkpjg/series-workflowhkpjg-build-action-2925471709/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-workflowhkpjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"series_id":"70ee2f5e-9451-4479-8557-0fb8ffc2b9fc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-29 22:32:43 +0000 UTC FinishedAt: 2026-08-30 01:35:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhkpjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"series_id":"70ee2f5e-9451-4479-8557-0fb8ffc2b9fc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-29 22:32:43 +0000 UTC FinishedAt: 2026-08-30 01:35:04 +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":["route4_change","route4_delete","route4_set_parms"],"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:*cf036453-8b76-4c24-a9f6-b11a52314af2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*81e8c49a-a7da-4d93-9a1b-293396465156,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-workflowhkpjg/series-workflowhkpjg-build-action-739801668/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-workflowhkpjg/series-workflowhkpjg-build-action-2925471709/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowhkpjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"series_id":"70ee2f5e-9451-4479-8557-0fb8ffc2b9fc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-29 22:32:43 +0000 UTC FinishedAt: 2026-08-29 22:32:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhkpjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"series_id":"70ee2f5e-9451-4479-8557-0fb8ffc2b9fc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-29 22:32:43 +0000 UTC FinishedAt: 2026-08-29 22:32:47 +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":["route4_change","route4_delete","route4_set_parms"],"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-workflowhkpjg/series-workflowhkpjg-convert-artifact-2856655942/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhkpjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"series_id":"70ee2f5e-9451-4479-8557-0fb8ffc2b9fc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-29 22:32:43 +0000 UTC FinishedAt: 2026-08-29 22:32:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhkpjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"series_id":"70ee2f5e-9451-4479-8557-0fb8ffc2b9fc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-29 22:32:43 +0000 UTC FinishedAt: 2026-08-29 22:32:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhkpjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"series_id":"70ee2f5e-9451-4479-8557-0fb8ffc2b9fc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-29 22:32:43 +0000 UTC FinishedAt: 2026-08-29 22:32:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhkpjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"series_id":"70ee2f5e-9451-4479-8557-0fb8ffc2b9fc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-29 22:32:53 +0000 UTC FinishedAt: 2026-08-30 01:35:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhkpjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4","NET_SCHED","INET"],"series_id":"70ee2f5e-9451-4479-8557-0fb8ffc2b9fc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-29 22:32:53 +0000 UTC FinishedAt: 2026-08-30 01:34:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cf036453-8b76-4c24-a9f6-b11a52314af2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*81e8c49a-a7da-4d93-9a1b-293396465156,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-workflowhkpjg/series-workflowhkpjg-build-action-739801668/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-workflowhkpjg/series-workflowhkpjg-build-action-2925471709/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-workflowhkpjg/series-workflowhkpjg-convert-artifact-2856655942/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,}