Name: series-workflowrhjd2 Phase: Succeeded StartedAt: 2026-09-06 20:17:12 +0000 UTC FinishedAt: 2026-09-07 00:05:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhjd2[0] Phase: Succeeded StartedAt: 2026-09-06 20:17:12 +0000 UTC FinishedAt: 2026-09-06 20:19:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhjd2[0].run-triage Phase: Succeeded StartedAt: 2026-09-06 20:17:12 +0000 UTC FinishedAt: 2026-09-06 20:19:25 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "d118502628f8b673be9023db8bdf878f64a7ed45", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZSWAP", "SWAP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "d118502628f8b673be9023db8bdf878f64a7ed45", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZSWAP", "SWAP" ], "series_id": "93ffdc1f-3681-4445-823e-9a0d77965c44" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "zswap_store", "zswap_load", "zswap_store_page", "zswap_decompress", "zswap_entry_free", "zswap_pool_create", "zswap_pool_find_get", "__zswap_pool_empty", "__zswap_pool_release", "zswap_compressor_param_set", "zswap_total_pages" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIwOjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pTV0FQJiMzNDssCiAgICAmIzM0O1NXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6c3dhcF9zdG9yZSYjMzQ7LAogICAgJiMzNDt6c3dhcF9sb2FkJiMzNDssCiAgICAmIzM0O3pzd2FwX3N0b3JlX3BhZ2UmIzM0OywKICAgICYjMzQ7enN3YXBfZGVjb21wcmVzcyYjMzQ7LAogICAgJiMzNDt6c3dhcF9lbnRyeV9mcmVlJiMzNDssCiAgICAmIzM0O3pzd2FwX3Bvb2xfY3JlYXRlJiMzNDssCiAgICAmIzM0O3pzd2FwX3Bvb2xfZmluZF9nZXQmIzM0OywKICAgICYjMzQ7X196c3dhcF9wb29sX2VtcHR5JiMzNDssCiAgICAmIzM0O19fenN3YXBfcG9vbF9yZWxlYXNlJiMzNDssCiAgICAmIzM0O3pzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0JiMzNDssCiAgICAmIzM0O3pzd2FwX3RvdGFsX3BhZ2VzJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaW50ZXJuYWwgenN3YXAgcG9vbCBhbmQgZW50cnkgbWFuYWdlbWVudCBpbiBtbS96c3dhcC5jIGJ5IHJlcGxhY2luZyBhIGxpbmtlZCBsaXN0IG9mIHBvb2xzIHdpdGggYW4gWEFycmF5IChpbmRleGVkIGJ5IGEgdTggcG9vbF9pZHgpIGFuZCBzd2l0Y2hpbmcgcG9vbCBsb29rdXBzIHRvIHVzZSB4YV9sb2FkKCkuIEFsbCBhbGxvY2F0ZWQgc3RydWN0dXJlcyAoenN3YXBfcG9vbCBhbGxvY2F0ZWQgd2l0aCBremFsbG9jX29iaiwgYW5kIHpzd2FwX2VudHJ5IHdob3NlIGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBpbiB6c3dhcF9zdG9yZV9wYWdlKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gTm9uZSBvZiB0aGUgbW9kaWZpZWQgZGF0YSBzdHJ1Y3R1cmVzIG9yIGZpZWxkcyBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcyBhcmUgaW50cm9kdWNlZC4gQW55IHBvdGVudGlhbCBidWdzIHdvdWxkIGludm9sdmUgY29uY3VycmVuY3ksIGxpZmV0aW1lL3JlZmNvdW50aW5nLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcyByYXRoZXIgdGhhbiBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpbiBtbS96c3dhcC5jLCByZWZhY3RvcmluZyBwb29sIGFuZCBlbnRyeSB0cmFja2luZyBmcm9tIGEgbGlua2VkIGxpc3QgYW5kIHJhdyBwb29sIHBvaW50ZXIgdG8gYW4gSUQtYmFzZWQgWEFycmF5IHdpdGggOC1iaXQgcG9vbCBpbmRpY2VzIGluIHN0cnVjdCB6c3dhcF9lbnRyeS4gSXQgYWxzbyB1cGRhdGVzIHN5bmNocm9uaXphdGlvbiBzZW1hbnRpY3MgdXNpbmcgUkNVIGFuZCByY3Vfd29yayAocXVldWVfcmN1X3dvcmspIGFsb25nIHdpdGggc29mdGlycS1zYWZlIFhBcnJheSBvcGVyYXRpb25zICh4YV9hbGxvY19iaCwgeGFfZXJhc2VfYmgpLiBUaGVzZSBjb25jdXJyZW5jeSBhbmQgZGF0YSBzdHJ1Y3R1cmUgbW9kaWZpY2F0aW9ucyBpbiByZWFjaGFibGUgTU0gY29kZSB3YXJyYW50IGZ1enppbmcgdG8gZGV0ZWN0IHBvc3NpYmxlIHJhY2VzLCBzdGFsZSBJRCBkZXJlZmVyZW5jZXMsIG9yIGFzc2VydGlvbiB0cmlwcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMDoxODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDZmYzgyYmJkMGY0NTY1MGIzNjdmZjNiYTBmZDBkOTZiYmU5YTI0MTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDIwOjE4OjI3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXG5pbmRleCBmM2FlM2M4MWU0OGVhLi4yNTNlZWJiOTcxYjk3IDEwMDY0NFxuLS0tIGEvbW0venN3YXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0venN3YXAuY1xuQEAgLTM0LDYgJiM0MzszNCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvd3JpdGViYWNrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlbWFwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC94YXJyYXkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3RfbHJ1LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC96c21hbGxvYy5oXHUwMDNlXG4gXG5AQCAtMTU0LDEyICYjNDM7MTU1LDIzIEBAIHN0cnVjdCB6c3dhcF9wb29sIHtcbiBcdHN0cnVjdCB6c19wb29sICp6c19wb29sO1xuIFx0c3RydWN0IGNyeXB0b19hY29tcF9jdHggX19wZXJjcHUgKmFjb21wX2N0eDtcbiBcdHN0cnVjdCBwZXJjcHVfcmVmIHJlZjtcbi1cdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbi1cdHN0cnVjdCB3b3JrX3N0cnVjdCByZWxlYXNlX3dvcms7XG4mIzQzO1x0c3RydWN0IHJjdV93b3JrIHJlbGVhc2Vfcndvcms7XG4gXHRzdHJ1Y3QgaGxpc3Rfbm9kZSBub2RlO1xuJiM0MztcdHU4IGlkeDtcbiBcdGNoYXIgdGZtX25hbWVbQ1JZUFRPX01BWF9BTEdfTkFNRV07XG4gfTtcbiBcbiYjNDM7LypcbiYjNDM7ICogTGl2ZSBwb29scyBrZXllZCBieSBpZCAoMS4uWlNXQVBfTUFYX1BPT0xfSUQpLiAgWEFfRkxBR1NfQUxMT0MxIGtlZXBzIGlkIDBcbiYjNDM7ICogcmVzZXJ2ZWQgc28gaXQgaXMgbmV2ZXIgaGFuZGVkIHRvIGEgbGl2ZSBwb29sLiAgWEFfRkxBR1NfTE9DS19CSCBtYWtlcyB0aGVcbiYjNDM7ICogeGFfbG9jayBzb2Z0aXJxLXNhZmU6IGl0IGlzIHRha2VuIGZyb20gX196c3dhcF9wb29sX2VtcHR5KCksIHdoaWNoIHJ1bnMgZnJvbVxuJiM0MzsgKiBhIHBlcmNwdV9yZWYgcmVsZWFzZSBjYWxsYmFjayBpbiBzb2Z0aXJxIGNvbnRleHQuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFpTV0FQX0ZJUlNUX1BPT0xfSUQgMVxuJiM0MzsjZGVmaW5lIFpTV0FQX01BWF9QT09MX0lEIFU4X01BWFxuJiM0MztzdGF0aWMgREVGSU5FX1hBUlJBWV9GTEFHUyh6c3dhcF9wb29scywgWEFfRkxBR1NfQUxMT0MxIHwgWEFfRkxBR1NfTE9DS19CSCk7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCBfX3JjdSAqenN3YXBfY3VycmVudF9wb29sO1xuJiM0MztcbiAvKiBHbG9iYWwgTFJVIGxpc3RzIHNoYXJlZCBieSBhbGwgenN3YXAgcG9vbHMuICovXG4gc3RhdGljIHN0cnVjdCBsaXN0X2xydSB6c3dhcF9saXN0X2xydTtcbiBcbkBAIC0xODIsNyAmIzQzOzE5NCw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2hyaW5rZXIgKnpzd2FwX3Nocmlua2VyO1xuICAqICAgICAgICAgICAgICB3cml0ZWJhY2sgbG9naWMuIFRoZSBlbnRyeSBpcyBvbmx5IHJlY2xhaW1lZCBieSB0aGUgd3JpdGViYWNrXG4gICogICAgICAgICAgICAgIGxvZ2ljIGlmIHJlZmVyZW5jZWQgaXMgdW5zZXQuIFNlZSBjb21tZW50cyBpbiB0aGUgc2hyaW5rZXJcbiAgKiAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgY29udGV4dC5cbi0gKiBwb29sIC0gdGhlIHpzd2FwX3Bvb2wgdGhlIGVudHJ5JiMzOTtzIGRhdGEgaXMgaW5cbiYjNDM7ICogcG9vbF9pZHggLSBpZCBvZiB0aGUgenN3YXBfcG9vbCB0aGF0IHRoZSBlbnRyeSYjMzk7cyBkYXRhIGlzIGluLlxuICAqIGhhbmRsZSAtIHpzbWFsbG9jIGFsbG9jYXRpb24gaGFuZGxlIHRoYXQgc3RvcmVzIHRoZSBjb21wcmVzc2VkIHBhZ2UgZGF0YVxuICAqIG9iamNnIC0gdGhlIG9ial9jZ3JvdXAgdGhhdCB0aGUgY29tcHJlc3NlZCBtZW1vcnkgaXMgY2hhcmdlZCB0b1xuICAqIGxydSAtIGhhbmRsZSB0byB0aGUgcG9vbCYjMzk7cyBscnUgdXNlZCB0byBldmljdCBwYWdlcy5cbkBAIC0xOTEsMTkgJiM0MzsyMDMsMjUgQEAgc3RydWN0IHpzd2FwX2VudHJ5IHtcbiBcdHN3cF9lbnRyeV90IHN3cGVudHJ5O1xuIFx0dW5zaWduZWQgaW50IGxlbmd0aDtcbiBcdGJvb2wgcmVmZXJlbmNlZDtcbi1cdHN0cnVjdCB6c3dhcF9wb29sICpwb29sO1xuJiM0MztcdHU4IHBvb2xfaWR4O1xuIFx0dW5zaWduZWQgbG9uZyBoYW5kbGU7XG4gXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGxydTtcbiB9O1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBObyBSQ1Ugc2VjdGlvbiBpcyBuZWVkZWQgYXJvdW5kIHRoZSByZXR1cm5lZCBwb2ludGVyOiBhIHN0b3JlZCBlbnRyeSBwaW5zXG4mIzQzOyAqIGl0cyBwb29sIHZpYSBwZXJjcHVfcmVmICh0YWtlbiBpbiB6c3dhcF9zdG9yZV9wYWdlKCkpLCBzbyB0aGUgaWQgY2Fubm90IGJlXG4mIzQzOyAqIHJldXNlZCB1bmRlciB1cy4gIENhbGxlcnMgV0FSTiBhbmQgaGFuZGxlIGEgTlVMTCBmcm9tIGEgY29ycnVwdCBwb29sX2lkeC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfZW50cnlfcG9vbChzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHhhX2xvYWQoXHUwMDI2enN3YXBfcG9vbHMsIGVudHJ5LVx1MDAzZXBvb2xfaWR4KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgc3RydWN0IHhhcnJheSAqenN3YXBfdHJlZXNbTUFYX1NXQVBGSUxFU107XG4gc3RhdGljIHVuc2lnbmVkIGludCBucl96c3dhcF90cmVlc1tNQVhfU1dBUEZJTEVTXTtcbiBcbi0vKiBSQ1UtcHJvdGVjdGVkIGl0ZXJhdGlvbiAqL1xuLXN0YXRpYyBMSVNUX0hFQUQoenN3YXBfcG9vbHMpO1xuLS8qIHByb3RlY3RzIHpzd2FwX3Bvb2xzIGxpc3QgbW9kaWZpY2F0aW9uICovXG4tc3RhdGljIERFRklORV9TUElOTE9DSyh6c3dhcF9wb29sc19sb2NrKTtcbiAvKiBwb29sIGNvdW50ZXIgdG8gcHJvdmlkZSB1bmlxdWUgbmFtZXMgdG8genNtYWxsb2MgKi9cbiBzdGF0aWMgYXRvbWljX3QgenN3YXBfcG9vbHNfY291bnQgPSBBVE9NSUNfSU5JVCgwKTtcbiBcbkBAIC0yNzUsNiAmIzQzOzI5Myw3IEBAIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jcmVhdGUoY2hhciAqY29tcHJlc3NvcilcbiBcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sO1xuIFx0Y2hhciBuYW1lWzM4XTsgLyogJiMzOTt6c3dhcCYjMzk7ICYjNDM7IDMyIGNoYXIgKG1heCkgbnVtICYjNDM7IFxcMCAqL1xuIFx0aW50IHJldCwgY3B1O1xuJiM0MztcdHUzMiBpZDtcbiBcbiBcdGlmICghenN3YXBfaGFzX3Bvb2wgXHUwMDI2XHUwMDI2ICFzdHJjbXAoY29tcHJlc3NvciwgWlNXQVBfUEFSQU1fVU5TRVQpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbkBAIC0zMjAsMTIgJiM0MzszMzksMjkgQEAgc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2NyZWF0ZShjaGFyICpjb21wcmVzc29yKVxuIFx0XHRcdCAgICAgIFBFUkNQVV9SRUZfQUxMT1dfUkVJTklULCBHRlBfS0VSTkVMKTtcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gcmVmX2ZhaWw7XG4tXHRJTklUX0xJU1RfSEVBRChcdTAwMjZwb29sLVx1MDAzZWxpc3QpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFB1Ymxpc2ggb25seSBhZnRlciB0aGUgcG9vbCBpcyBmdWxseSBidWlsdCwgc28gbG9ja2xlc3Mgd2Fsa2Vyc1xuJiM0MztcdCAqIG5ldmVyIHNlZSBhIGhhbGYtaW5pdGlhbGl6ZWQgcG9vbC4gIFRoZSBfYmggdmFyaWFudCBwYWlycyB3aXRoIHRoZVxuJiM0MztcdCAqIHNvZnRpcnEtY29udGV4dCB4YV9sb2NrIHRha2VuIGluIF9fenN3YXBfcG9vbF9lbXB0eSgpLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldCA9IHhhX2FsbG9jX2JoKFx1MDAyNnpzd2FwX3Bvb2xzLCBcdTAwMjZpZCwgcG9vbCxcbiYjNDM7XHRcdFx0ICBYQV9MSU1JVChaU1dBUF9GSVJTVF9QT09MX0lELCBaU1dBUF9NQVhfUE9PTF9JRCksXG4mIzQzO1x0XHRcdCAgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0aWYgKHJldCA9PSAtRUJVU1kpXG4mIzQzO1x0XHRcdHByX2VycihcJiMzNDtjYW5ub3QgYWxsb2NhdGUgcG9vbCBpZCAobWF4ICVkIGxpdmUgcG9vbHMpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICAgWlNXQVBfTUFYX1BPT0xfSUQgLSBaU1dBUF9GSVJTVF9QT09MX0lEICYjNDM7IDEpO1xuJiM0MztcdFx0Z290byB4YV9mYWlsO1xuJiM0MztcdH1cbiYjNDM7XHRwb29sLVx1MDAzZWlkeCA9IGlkO1xuIFxuIFx0enN3YXBfcG9vbF9kZWJ1ZyhcJiMzNDtjcmVhdGVkXCYjMzQ7LCBwb29sKTtcbiBcbiBcdHJldHVybiBwb29sO1xuIFxuJiM0Mzt4YV9mYWlsOlxuJiM0MztcdHBlcmNwdV9yZWZfZXhpdChcdTAwMjZwb29sLVx1MDAzZXJlZik7XG4gcmVmX2ZhaWw6XG4gXHRjcHVocF9zdGF0ZV9yZW1vdmVfaW5zdGFuY2UoQ1BVSFBfTU1fWlNXUF9QT09MX1BSRVBBUkUsIFx1MDAyNnBvb2wtXHUwMDNlbm9kZSk7XG4gXG5AQCAtMzc5LDM3ICYjNDM7NDE1LDI5IEBAIHN0YXRpYyB2b2lkIHpzd2FwX3Bvb2xfZGVzdHJveShzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbClcbiBcbiBzdGF0aWMgdm9pZCBfX3pzd2FwX3Bvb2xfcmVsZWFzZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuLVx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSBjb250YWluZXJfb2Yod29yaywgdHlwZW9mKCpwb29sKSxcbi1cdFx0XHRcdFx0XHRyZWxlYXNlX3dvcmspO1xuLVxuLVx0c3luY2hyb25pemVfcmN1KCk7XG4mIzQzO1x0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSBjb250YWluZXJfb2YodG9fcmN1X3dvcmsod29yayksXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgdHlwZW9mKCpwb29sKSwgcmVsZWFzZV9yd29yayk7XG4gXG4gXHQvKiBub2JvZHkgc2hvdWxkIGhhdmUgYmVlbiBhYmxlIHRvIGdldCBhIHJlZi4uLiAqL1xuIFx0V0FSTl9PTighcGVyY3B1X3JlZl9pc196ZXJvKFx1MDAyNnBvb2wtXHUwMDNlcmVmKSk7XG4gXHRwZXJjcHVfcmVmX2V4aXQoXHUwMDI2cG9vbC1cdTAwM2VyZWYpO1xuIFxuLVx0LyogcG9vbCBpcyBub3cgb2ZmIHpzd2FwX3Bvb2xzIGxpc3QgYW5kIGhhcyBubyByZWZlcmVuY2VzLiAqL1xuJiM0MztcdC8qIFRoZSBwb29sIGlzIG5vIGxvbmdlciBpbiB6c3dhcF9wb29scyBhbmQgaGFzIG5vIHJlZmVyZW5jZXMuICovXG4gXHR6c3dhcF9wb29sX2Rlc3Ryb3kocG9vbCk7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jdXJyZW50KHZvaWQpO1xuLVxuIHN0YXRpYyB2b2lkIF9fenN3YXBfcG9vbF9lbXB0eShzdHJ1Y3QgcGVyY3B1X3JlZiAqcmVmKVxuIHtcbiBcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sO1xuIFxuIFx0cG9vbCA9IGNvbnRhaW5lcl9vZihyZWYsIHR5cGVvZigqcG9vbCksIHJlZik7XG4gXG4tXHRzcGluX2xvY2tfYmgoXHUwMDI2enN3YXBfcG9vbHNfbG9jayk7XG4tXG4tXHRXQVJOX09OKHBvb2wgPT0genN3YXBfcG9vbF9jdXJyZW50KCkpO1xuJiM0MztcdFdBUk5fT04ocG9vbCA9PSByY3VfYWNjZXNzX3BvaW50ZXIoenN3YXBfY3VycmVudF9wb29sKSk7XG4gXG4tXHRsaXN0X2RlbF9yY3UoXHUwMDI2cG9vbC1cdTAwM2VsaXN0KTtcbiYjNDM7XHR4YV9lcmFzZV9iaChcdTAwMjZ6c3dhcF9wb29scywgcG9vbC1cdTAwM2VpZHgpO1xuIFxuLVx0SU5JVF9XT1JLKFx1MDAyNnBvb2wtXHUwMDNlcmVsZWFzZV93b3JrLCBfX3pzd2FwX3Bvb2xfcmVsZWFzZSk7XG4tXHRzY2hlZHVsZV93b3JrKFx1MDAyNnBvb2wtXHUwMDNlcmVsZWFzZV93b3JrKTtcbi1cbi1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnpzd2FwX3Bvb2xzX2xvY2spO1xuJiM0MztcdElOSVRfUkNVX1dPUksoXHUwMDI2cG9vbC1cdTAwM2VyZWxlYXNlX3J3b3JrLCBfX3pzd2FwX3Bvb2xfcmVsZWFzZSk7XG4mIzQzO1x0cXVldWVfcmN1X3dvcmsoc3lzdGVtX3BlcmNwdV93cSwgXHUwMDI2cG9vbC1cdTAwM2VyZWxlYXNlX3J3b3JrKTtcbiB9XG4gXG4gc3RhdGljIGludCBfX211c3RfY2hlY2sgenN3YXBfcG9vbF90cnlnZXQoc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wpXG5AQCAtNDM1LDIwICYjNDM7NDYzLDEzIEBAIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqX196c3dhcF9wb29sX2N1cnJlbnQodm9pZClcbiB7XG4gXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDtcbiBcbi1cdHBvb2wgPSBsaXN0X2ZpcnN0X29yX251bGxfcmN1KFx1MDAyNnpzd2FwX3Bvb2xzLCB0eXBlb2YoKnBvb2wpLCBsaXN0KTtcbiYjNDM7XHRwb29sID0gcmN1X2RlcmVmZXJlbmNlKHpzd2FwX2N1cnJlbnRfcG9vbCk7XG4gXHRXQVJOX09OQ0UoIXBvb2wgXHUwMDI2XHUwMDI2IHpzd2FwX2hhc19wb29sLFxuIFx0XHQgIFwmIzM0OyVzOiBubyBwYWdlIHN0b3JhZ2UgcG9vbCFcXG5cJiMzNDssIF9fZnVuY19fKTtcbiBcbiBcdHJldHVybiBwb29sO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3VycmVudCh2b2lkKVxuLXtcbi1cdGFzc2VydF9zcGluX2xvY2tlZChcdTAwMjZ6c3dhcF9wb29sc19sb2NrKTtcbi1cbi1cdHJldHVybiBfX3pzd2FwX3Bvb2xfY3VycmVudCgpO1xuLX1cbi1cbiBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3VycmVudF9nZXQodm9pZClcbiB7XG4gXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDtcbkBAIC00NjQsMjMgJiM0Mzs0ODUsMjggQEAgc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2N1cnJlbnRfZ2V0KHZvaWQpXG4gXHRyZXR1cm4gcG9vbDtcbiB9XG4gXG4tLyogdHlwZSBhbmQgY29tcHJlc3NvciBtdXN0IGJlIG51bGwtdGVybWluYXRlZCAqL1xuJiM0MzsvKiBjb21wcmVzc29yIG11c3QgYmUgbnVsbC10ZXJtaW5hdGVkICovXG4gc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2ZpbmRfZ2V0KGNoYXIgKmNvbXByZXNzb3IpXG4ge1xuIFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBpZDtcbiBcbi1cdGFzc2VydF9zcGluX2xvY2tlZChcdTAwMjZ6c3dhcF9wb29sc19sb2NrKTtcbi1cbi1cdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBvb2wsIFx1MDAyNnpzd2FwX3Bvb2xzLCBsaXN0KSB7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBfX3pzd2FwX3Bvb2xfZW1wdHkoKSBjYW4gZXJhc2UgZnJvbSB6c3dhcF9wb29scyBpbiBzb2Z0aXJxIHdoaWxlIHdlXG4mIzQzO1x0ICogd2Fsay4gIHJjdV9yZWFkX2xvY2soKSBrZWVwcyB0aGUgd2FsayBjb25zaXN0ZW50IGFuZCBlYWNoIHBvb2wgYWxpdmVcbiYjNDM7XHQgKiBhY3Jvc3MgdHJ5Z2V0KCkuICB4YV9mb3JfZWFjaCgpJiMzOTtzIG93biBSQ1UgZG9lcyBub3Qgc3BhbiB0aGUgbG9vcCBib2R5LlxuJiM0MztcdCAqL1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHR4YV9mb3JfZWFjaChcdTAwMjZ6c3dhcF9wb29scywgaWQsIHBvb2wpIHtcbiBcdFx0aWYgKHN0cmNtcChwb29sLVx1MDAzZXRmbV9uYW1lLCBjb21wcmVzc29yKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0LyogaWYgd2UgY2FuJiMzOTt0IGdldCBpdCwgaXQmIzM5O3MgYWJvdXQgdG8gYmUgZGVzdHJveWVkICovXG4tXHRcdGlmICghenN3YXBfcG9vbF90cnlnZXQocG9vbCkpXG4tXHRcdFx0Y29udGludWU7XG4tXHRcdHJldHVybiBwb29sO1xuJiM0MztcdFx0aWYgKHpzd2FwX3Bvb2xfdHJ5Z2V0KHBvb2wpKVxuJiM0MztcdFx0XHRicmVhaztcbiBcdH1cbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbi1cdHJldHVybiBOVUxMO1xuJiM0MztcdHJldHVybiBwb29sO1xuIH1cbiBcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyB6c3dhcF9tYXhfcGFnZXModm9pZClcbkBAIC00OTcsOSAmIzQzOzUyMywxNCBAQCB1bnNpZ25lZCBsb25nIHpzd2FwX3RvdGFsX3BhZ2VzKHZvaWQpXG4ge1xuIFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7XG4gXHR1bnNpZ25lZCBsb25nIHRvdGFsID0gMDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGlkO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogcmN1X3JlYWRfbG9jaygpIGtlZXBzIGVhY2ggcG9vbCBhbGl2ZSBhY3Jvc3MgenNfZ2V0X3RvdGFsX3BhZ2VzKCkuXG4mIzQzO1x0ICogeGFfZm9yX2VhY2goKSYjMzk7cyBvd24gUkNVIGRvZXMgbm90IHNwYW4gdGhlIGxvb3AgYm9keS5cbiYjNDM7XHQgKi9cbiBcdHJjdV9yZWFkX2xvY2soKTtcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBvb2wsIFx1MDAyNnpzd2FwX3Bvb2xzLCBsaXN0KVxuJiM0MztcdHhhX2Zvcl9lYWNoKFx1MDAyNnpzd2FwX3Bvb2xzLCBpZCwgcG9vbClcbiBcdFx0dG90YWwgJiM0Mzs9IHpzX2dldF90b3RhbF9wYWdlcyhwb29sLVx1MDAzZXpzX3Bvb2wpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG5AQCAtNTU2LDIwICYjNDM7NTg3LDEzIEBAIHN0YXRpYyBpbnQgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuIFx0fVxuIFxuLVx0c3Bpbl9sb2NrX2JoKFx1MDAyNnpzd2FwX3Bvb2xzX2xvY2spO1xuLVxuIFx0cG9vbCA9IHpzd2FwX3Bvb2xfZmluZF9nZXQocyk7XG4tXHRpZiAocG9vbCkge1xuJiM0MztcdGlmICghcG9vbCkge1xuJiM0MztcdFx0cG9vbCA9IHpzd2FwX3Bvb2xfY3JlYXRlKHMpO1xuJiM0MztcdH0gZWxzZSB7XG4gXHRcdHpzd2FwX3Bvb2xfZGVidWcoXCYjMzQ7dXNpbmcgZXhpc3RpbmdcJiMzNDssIHBvb2wpO1xuLVx0XHRXQVJOX09OKHBvb2wgPT0genN3YXBfcG9vbF9jdXJyZW50KCkpO1xuLVx0XHRsaXN0X2RlbF9yY3UoXHUwMDI2cG9vbC1cdTAwM2VsaXN0KTtcbi1cdH1cbiYjNDM7XHRcdFdBUk5fT04ocG9vbCA9PSByY3VfYWNjZXNzX3BvaW50ZXIoenN3YXBfY3VycmVudF9wb29sKSk7XG4gXG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZ6c3dhcF9wb29sc19sb2NrKTtcbi1cbi1cdGlmICghcG9vbClcbi1cdFx0cG9vbCA9IHpzd2FwX3Bvb2xfY3JlYXRlKHMpO1xuLVx0ZWxzZSB7XG4gXHRcdC8qXG4gXHRcdCAqIFJlc3RvcmUgdGhlIGluaXRpYWwgcmVmIGRyb3BwZWQgYnkgcGVyY3B1X3JlZl9raWxsKClcbiBcdFx0ICogd2hlbiB0aGUgcG9vbCB3YXMgZGVjb21taXNzaW9uZWQgYW5kIHN3aXRjaCBpdCBhZ2FpblxuQEAgLTU4NiwyNCAmIzQzOzYxMCwxOCBAQCBzdGF0aWMgaW50IHpzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0KGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbVxuIFx0ZWxzZVxuIFx0XHRyZXQgPSAtRUlOVkFMO1xuIFxuLVx0c3Bpbl9sb2NrX2JoKFx1MDAyNnpzd2FwX3Bvb2xzX2xvY2spO1xuLVxuJiM0MztcdC8qXG4mIzQzO1x0ICogQ29tcHJlc3NvciBzd2l0Y2hlcyBhcmUgc2VyaWFsaXplZCBieSB0aGUga2VybmVsIHBhcmFtIGxvY2ssIHNvIHRoaXNcbiYjNDM7XHQgKiBpcyB0aGUgb25seSB3cml0ZXIgb2YgenN3YXBfY3VycmVudF9wb29sOiBubyB4YV9sb2NrIG5lZWRlZC5cbiYjNDM7XHQgKi9cbiBcdGlmICghcmV0KSB7XG4tXHRcdHB1dF9wb29sID0genN3YXBfcG9vbF9jdXJyZW50KCk7XG4tXHRcdGxpc3RfYWRkX3JjdShcdTAwMjZwb29sLVx1MDAzZWxpc3QsIFx1MDAyNnpzd2FwX3Bvb2xzKTtcbiYjNDM7XHRcdHB1dF9wb29sID0gcmN1X2FjY2Vzc19wb2ludGVyKHpzd2FwX2N1cnJlbnRfcG9vbCk7XG4mIzQzO1x0XHRyY3VfYXNzaWduX3BvaW50ZXIoenN3YXBfY3VycmVudF9wb29sLCBwb29sKTtcbiBcdFx0enN3YXBfaGFzX3Bvb2wgPSB0cnVlO1xuIFx0fSBlbHNlIGlmIChwb29sKSB7XG4tXHRcdC8qXG4tXHRcdCAqIEFkZCB0aGUgcG9zc2libHkgcHJlLWV4aXN0aW5nIHBvb2wgdG8gdGhlIGVuZCBvZiB0aGUgcG9vbHNcbi1cdFx0ICogbGlzdDsgaWYgaXQmIzM5O3MgbmV3IChhbmQgZW1wdHkpIHRoZW4gaXQmIzM5O2xsIGJlIHJlbW92ZWQgYW5kXG4tXHRcdCAqIGRlc3Ryb3llZCBieSB0aGUgcHV0IGFmdGVyIHdlIGRyb3AgdGhlIGxvY2tcbi1cdFx0ICovXG4tXHRcdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNnBvb2wtXHUwMDNlbGlzdCwgXHUwMDI2enN3YXBfcG9vbHMpO1xuIFx0XHRwdXRfcG9vbCA9IHBvb2w7XG4gXHR9XG4gXG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZ6c3dhcF9wb29sc19sb2NrKTtcbi1cbiBcdC8qXG4gXHQgKiBEcm9wIHRoZSByZWYgZnJvbSBlaXRoZXIgdGhlIG9sZCBjdXJyZW50IHBvb2wsXG4gXHQgKiBvciB0aGUgbmV3IHBvb2wgd2UgZmFpbGVkIHRvIGFkZFxuQEAgLTc1MSw5ICYjNDM7NzY5LDEzIEBAIHN0YXRpYyB2b2lkIHpzd2FwX2VudHJ5X2NhY2hlX2ZyZWUoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcbiAgKi9cbiBzdGF0aWMgdm9pZCB6c3dhcF9lbnRyeV9mcmVlKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXG4ge1xuJiM0MztcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sID0genN3YXBfZW50cnlfcG9vbChlbnRyeSk7XG4mIzQzO1xuIFx0enN3YXBfbHJ1X2RlbChlbnRyeSk7XG4tXHR6c19mcmVlKGVudHJ5LVx1MDAzZXBvb2wtXHUwMDNlenNfcG9vbCwgZW50cnktXHUwMDNlaGFuZGxlKTtcbi1cdHpzd2FwX3Bvb2xfcHV0KGVudHJ5LVx1MDAzZXBvb2wpO1xuJiM0MztcdGlmICghV0FSTl9PTl9PTkNFKCFwb29sKSkge1xuJiM0MztcdFx0enNfZnJlZShwb29sLVx1MDAzZXpzX3Bvb2wsIGVudHJ5LVx1MDAzZWhhbmRsZSk7XG4mIzQzO1x0XHR6c3dhcF9wb29sX3B1dChwb29sKTtcbiYjNDM7XHR9XG4gXHRpZiAoZW50cnktXHUwMDNlb2JqY2cpIHtcbiBcdFx0b2JqX2Nncm91cF91bmNoYXJnZV96c3dhcChlbnRyeS1cdTAwM2VvYmpjZywgZW50cnktXHUwMDNlbGVuZ3RoKTtcbiBcdFx0b2JqX2Nncm91cF9wdXQoZW50cnktXHUwMDNlb2JqY2cpO1xuQEAgLTkxMCwxMiAmIzQzOzkzMiwxNSBAQCBzdGF0aWMgYm9vbCB6c3dhcF9jb21wcmVzcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcbiBzdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuLVx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSBlbnRyeS1cdTAwM2Vwb29sO1xuJiM0MztcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sID0genN3YXBfZW50cnlfcG9vbChlbnRyeSk7XG4gXHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgaW5wdXRbMl07IC8qIHpzbWFsbG9jIHJldHVybnMgYW4gU0cgbGlzdCAxLTIgZW50cmllcyAqL1xuIFx0c3RydWN0IHNjYXR0ZXJsaXN0IG91dHB1dDtcbiBcdHN0cnVjdCBjcnlwdG9fYWNvbXBfY3R4ICphY29tcF9jdHg7XG4gXHRpbnQgcmV0ID0gMCwgZGxlbjtcbiBcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKCFwb29sKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4gXHRhY29tcF9jdHggPSByYXdfY3B1X3B0cihwb29sLVx1MDAzZWFjb21wX2N0eCk7XG4gXHRtdXRleF9sb2NrKFx1MDAyNmFjb21wX2N0eC1cdTAwM2VtdXRleCk7XG4gXHR6c19vYmpfcmVhZF9zZ19iZWdpbihwb29sLVx1MDAzZXpzX3Bvb2wsIGVudHJ5LVx1MDAzZWhhbmRsZSwgaW5wdXQsIGVudHJ5LVx1MDAzZWxlbmd0aCk7XG5AQCAtOTUxLDcgJiM0Mzs5NzYsNyBAQCBzdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRwcl9hbGVydF9yYXRlbGltaXRlZChcJiMzNDtEZWNvbXByZXNzaW9uIGVycm9yIGZyb20genN3YXAgKCVkOiVsdSAlcyAldS1cdTAwM2UlZClcXG5cJiMzNDssXG4gXHRcdFx0XHRcdFx0c3dwX3R5cGUoZW50cnktXHUwMDNlc3dwZW50cnkpLFxuIFx0XHRcdFx0XHRcdHN3cF9vZmZzZXQoZW50cnktXHUwMDNlc3dwZW50cnkpLFxuLVx0XHRcdFx0XHRcdGVudHJ5LVx1MDAzZXBvb2wtXHUwMDNldGZtX25hbWUsXG4mIzQzO1x0XHRcdFx0XHRcdHBvb2wtXHUwMDNldGZtX25hbWUsXG4gXHRcdFx0XHRcdFx0ZW50cnktXHUwMDNlbGVuZ3RoLCBkbGVuKTtcbiBcdHJldHVybiBmYWxzZTtcbiB9XG5AQCAtMTQwOSw2ICYjNDM7MTQzNCwxMyBAQCBzdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0aWYgKCF6c3dhcF9jb21wcmVzcyhwYWdlLCBlbnRyeSwgcG9vbCkpXG4gXHRcdGdvdG8gY29tcHJlc3NfZmFpbGVkO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogU2V0IHBvb2xfaWR4IGJlZm9yZSB0aGUgeGFfc3RvcmUoKSBiZWxvdyBwdWJsaXNoZXMgdGhlIGVudHJ5LCBvciBhXG4mIzQzO1x0ICogY29uY3VycmVudCByZWFkZXIgY291bGQgcmVzb2x2ZSBhIHN0YWxlIHBvb2xfaWR4IGxlZnQgYnkgc2xhYiByZXVzZVxuJiM0MztcdCAqIHRvIGFuIHVucmVsYXRlZCBsaXZlIHBvb2wuXG4mIzQzO1x0ICovXG4mIzQzO1x0ZW50cnktXHUwMDNlcG9vbF9pZHggPSBwb29sLVx1MDAzZWlkeDtcbiYjNDM7XG4gXHRvbGQgPSB4YV9zdG9yZShzd2FwX3pzd2FwX3RyZWUocGFnZV9zd3BlbnRyeSksXG4gXHRcdCAgICAgICBzd3Bfb2Zmc2V0KHBhZ2Vfc3dwZW50cnkpLFxuIFx0XHQgICAgICAgZW50cnksIEdGUF9LRVJORUwpO1xuQEAgLTE0NTQsNyAmIzQzOzE0ODYsNiBAQCBzdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0ICogICAgVGhlIHB1Ymxpc2hpbmcgb3JkZXIgbWF0dGVycyB0byBwcmV2ZW50IHdyaXRlYmFjayBmcm9tIHNlZWluZ1xuIFx0ICogICAgYW4gaW5jb2hlcmVudCBlbnRyeS5cbiBcdCAqL1xuLVx0ZW50cnktXHUwMDNlcG9vbCA9IHBvb2w7XG4gXHRlbnRyeS1cdTAwM2Vzd3BlbnRyeSA9IHBhZ2Vfc3dwZW50cnk7XG4gXHRlbnRyeS1cdTAwM2VvYmpjZyA9IG9iamNnO1xuIFx0ZW50cnktXHUwMDNlcmVmZXJlbmNlZCA9IHRydWU7XG5AQCAtMTc5MCw3ICYjNDM7MTgyMSw3IEBAIHN0YXRpYyBpbnQgenN3YXBfc2V0dXAodm9pZClcbiBcdHBvb2wgPSBfX3pzd2FwX3Bvb2xfY3JlYXRlX2ZhbGxiYWNrKCk7XG4gXHRpZiAocG9vbCkge1xuIFx0XHRwcl9pbmZvKFwmIzM0O2xvYWRlZCB1c2luZyBwb29sICVzXFxuXCYjMzQ7LCBwb29sLVx1MDAzZXRmbV9uYW1lKTtcbi1cdFx0bGlzdF9hZGQoXHUwMDI2cG9vbC1cdTAwM2VsaXN0LCBcdTAwMjZ6c3dhcF9wb29scyk7XG4mIzQzO1x0XHRyY3VfYXNzaWduX3BvaW50ZXIoenN3YXBfY3VycmVudF9wb29sLCBwb29sKTtcbiBcdFx0enN3YXBfaGFzX3Bvb2wgPSB0cnVlO1xuIFx0XHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcdTAwMjZ6c3dhcF9ldmVyX2VuYWJsZWQpO1xuIFx0fSBlbHNlIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMDoxODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaU1dBUCYjMzQ7LAogICAgJiMzNDtTV0FQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7enN3YXBfc3RvcmUmIzM0OywKICAgICYjMzQ7enN3YXBfbG9hZCYjMzQ7LAogICAgJiMzNDt6c3dhcF9zdG9yZV9wYWdlJiMzNDssCiAgICAmIzM0O3pzd2FwX2RlY29tcHJlc3MmIzM0OywKICAgICYjMzQ7enN3YXBfZW50cnlfZnJlZSYjMzQ7LAogICAgJiMzNDt6c3dhcF9wb29sX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDt6c3dhcF9wb29sX2ZpbmRfZ2V0JiMzNDssCiAgICAmIzM0O19fenN3YXBfcG9vbF9lbXB0eSYjMzQ7LAogICAgJiMzNDtfX3pzd2FwX3Bvb2xfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDt6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldCYjMzQ7LAogICAgJiMzNDt6c3dhcF90b3RhbF9wYWdlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGluIG1tL3pzd2FwLmMsIHJlZmFjdG9yaW5nIHBvb2wgYW5kIGVudHJ5IHRyYWNraW5nIGZyb20gYSBsaW5rZWQgbGlzdCBhbmQgcmF3IHBvb2wgcG9pbnRlciB0byBhbiBJRC1iYXNlZCBYQXJyYXkgd2l0aCA4LWJpdCBwb29sIGluZGljZXMgaW4gc3RydWN0IHpzd2FwX2VudHJ5LiBJdCBhbHNvIHVwZGF0ZXMgc3luY2hyb25pemF0aW9uIHNlbWFudGljcyB1c2luZyBSQ1UgYW5kIHJjdV93b3JrIChxdWV1ZV9yY3Vfd29yaykgYWxvbmcgd2l0aCBzb2Z0aXJxLXNhZmUgWEFycmF5IG9wZXJhdGlvbnMgKHhhX2FsbG9jX2JoLCB4YV9lcmFzZV9iaCkuIFRoZXNlIGNvbmN1cnJlbmN5IGFuZCBkYXRhIHN0cnVjdHVyZSBtb2RpZmljYXRpb25zIGluIHJlYWNoYWJsZSBNTSBjb2RlIHdhcnJhbnQgZnV6emluZyB0byBkZXRlY3QgcG9zc2libGUgcmFjZXMsIHN0YWxlIElEIGRlcmVmZXJlbmNlcywgb3IgYXNzZXJ0aW9uIHRyaXBzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmZjODJiYmQwZjQ1NjUwYjM2N2ZmM2JhMGZkMGQ5NmJiZTlhMjQxNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMjA6MTg6MjcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuYwppbmRleCBmM2FlM2M4MWU0OGVhLi4yNTNlZWJiOTcxYjk3IDEwMDY0NAotLS0gYS9tbS96c3dhcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3pzd2FwLmMKQEAgLTM0LDYgJiM0MzszNCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvd3JpdGViYWNrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGFnZW1hcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3dvcmtxdWV1ZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC94YXJyYXkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9saXN0X2xydS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3pzbWFsbG9jLmgmZ3Q7CiAKQEAgLTE1NCwxMiAmIzQzOzE1NSwyMyBAQCBzdHJ1Y3QgenN3YXBfcG9vbCB7CiAJc3RydWN0IHpzX3Bvb2wgKnpzX3Bvb2w7CiAJc3RydWN0IGNyeXB0b19hY29tcF9jdHggX19wZXJjcHUgKmFjb21wX2N0eDsKIAlzdHJ1Y3QgcGVyY3B1X3JlZiByZWY7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXN0cnVjdCB3b3JrX3N0cnVjdCByZWxlYXNlX3dvcms7CiYjNDM7CXN0cnVjdCByY3Vfd29yayByZWxlYXNlX3J3b3JrOwogCXN0cnVjdCBobGlzdF9ub2RlIG5vZGU7CiYjNDM7CXU4IGlkeDsKIAljaGFyIHRmbV9uYW1lW0NSWVBUT19NQVhfQUxHX05BTUVdOwogfTsKIAomIzQzOy8qCiYjNDM7ICogTGl2ZSBwb29scyBrZXllZCBieSBpZCAoMS4uWlNXQVBfTUFYX1BPT0xfSUQpLiAgWEFfRkxBR1NfQUxMT0MxIGtlZXBzIGlkIDAKJiM0MzsgKiByZXNlcnZlZCBzbyBpdCBpcyBuZXZlciBoYW5kZWQgdG8gYSBsaXZlIHBvb2wuICBYQV9GTEFHU19MT0NLX0JIIG1ha2VzIHRoZQomIzQzOyAqIHhhX2xvY2sgc29mdGlycS1zYWZlOiBpdCBpcyB0YWtlbiBmcm9tIF9fenN3YXBfcG9vbF9lbXB0eSgpLCB3aGljaCBydW5zIGZyb20KJiM0MzsgKiBhIHBlcmNwdV9yZWYgcmVsZWFzZSBjYWxsYmFjayBpbiBzb2Z0aXJxIGNvbnRleHQuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBaU1dBUF9GSVJTVF9QT09MX0lEIDEKJiM0MzsjZGVmaW5lIFpTV0FQX01BWF9QT09MX0lEIFU4X01BWAomIzQzO3N0YXRpYyBERUZJTkVfWEFSUkFZX0ZMQUdTKHpzd2FwX3Bvb2xzLCBYQV9GTEFHU19BTExPQzEgfCBYQV9GTEFHU19MT0NLX0JIKTsKJiM0MztzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgX19yY3UgKnpzd2FwX2N1cnJlbnRfcG9vbDsKJiM0MzsKIC8qIEdsb2JhbCBMUlUgbGlzdHMgc2hhcmVkIGJ5IGFsbCB6c3dhcCBwb29scy4gKi8KIHN0YXRpYyBzdHJ1Y3QgbGlzdF9scnUgenN3YXBfbGlzdF9scnU7CiAKQEAgLTE4Miw3ICYjNDM7MTk0LDcgQEAgc3RhdGljIHN0cnVjdCBzaHJpbmtlciAqenN3YXBfc2hyaW5rZXI7CiAgKiAgICAgICAgICAgICAgd3JpdGViYWNrIGxvZ2ljLiBUaGUgZW50cnkgaXMgb25seSByZWNsYWltZWQgYnkgdGhlIHdyaXRlYmFjawogICogICAgICAgICAgICAgIGxvZ2ljIGlmIHJlZmVyZW5jZWQgaXMgdW5zZXQuIFNlZSBjb21tZW50cyBpbiB0aGUgc2hyaW5rZXIKICAqICAgICAgICAgICAgICBzZWN0aW9uIGZvciBjb250ZXh0LgotICogcG9vbCAtIHRoZSB6c3dhcF9wb29sIHRoZSBlbnRyeSYjMzk7cyBkYXRhIGlzIGluCiYjNDM7ICogcG9vbF9pZHggLSBpZCBvZiB0aGUgenN3YXBfcG9vbCB0aGF0IHRoZSBlbnRyeSYjMzk7cyBkYXRhIGlzIGluLgogICogaGFuZGxlIC0genNtYWxsb2MgYWxsb2NhdGlvbiBoYW5kbGUgdGhhdCBzdG9yZXMgdGhlIGNvbXByZXNzZWQgcGFnZSBkYXRhCiAgKiBvYmpjZyAtIHRoZSBvYmpfY2dyb3VwIHRoYXQgdGhlIGNvbXByZXNzZWQgbWVtb3J5IGlzIGNoYXJnZWQgdG8KICAqIGxydSAtIGhhbmRsZSB0byB0aGUgcG9vbCYjMzk7cyBscnUgdXNlZCB0byBldmljdCBwYWdlcy4KQEAgLTE5MSwxOSAmIzQzOzIwMywyNSBAQCBzdHJ1Y3QgenN3YXBfZW50cnkgewogCXN3cF9lbnRyeV90IHN3cGVudHJ5OwogCXVuc2lnbmVkIGludCBsZW5ndGg7CiAJYm9vbCByZWZlcmVuY2VkOwotCXN0cnVjdCB6c3dhcF9wb29sICpwb29sOwomIzQzOwl1OCBwb29sX2lkeDsKIAl1bnNpZ25lZCBsb25nIGhhbmRsZTsKIAlzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7CiAJc3RydWN0IGxpc3RfaGVhZCBscnU7CiB9OwogCiYjNDM7LyoKJiM0MzsgKiBObyBSQ1Ugc2VjdGlvbiBpcyBuZWVkZWQgYXJvdW5kIHRoZSByZXR1cm5lZCBwb2ludGVyOiBhIHN0b3JlZCBlbnRyeSBwaW5zCiYjNDM7ICogaXRzIHBvb2wgdmlhIHBlcmNwdV9yZWYgKHRha2VuIGluIHpzd2FwX3N0b3JlX3BhZ2UoKSksIHNvIHRoZSBpZCBjYW5ub3QgYmUKJiM0MzsgKiByZXVzZWQgdW5kZXIgdXMuICBDYWxsZXJzIFdBUk4gYW5kIGhhbmRsZSBhIE5VTEwgZnJvbSBhIGNvcnJ1cHQgcG9vbF9pZHguCiYjNDM7ICovCiYjNDM7c3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9lbnRyeV9wb29sKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpCiYjNDM7ewomIzQzOwlyZXR1cm4geGFfbG9hZCgmYW1wO3pzd2FwX3Bvb2xzLCBlbnRyeS0mZ3Q7cG9vbF9pZHgpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgeGFycmF5ICp6c3dhcF90cmVlc1tNQVhfU1dBUEZJTEVTXTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbnJfenN3YXBfdHJlZXNbTUFYX1NXQVBGSUxFU107CiAKLS8qIFJDVS1wcm90ZWN0ZWQgaXRlcmF0aW9uICovCi1zdGF0aWMgTElTVF9IRUFEKHpzd2FwX3Bvb2xzKTsKLS8qIHByb3RlY3RzIHpzd2FwX3Bvb2xzIGxpc3QgbW9kaWZpY2F0aW9uICovCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHpzd2FwX3Bvb2xzX2xvY2spOwogLyogcG9vbCBjb3VudGVyIHRvIHByb3ZpZGUgdW5pcXVlIG5hbWVzIHRvIHpzbWFsbG9jICovCiBzdGF0aWMgYXRvbWljX3QgenN3YXBfcG9vbHNfY291bnQgPSBBVE9NSUNfSU5JVCgwKTsKIApAQCAtMjc1LDYgJiM0MzsyOTMsNyBAQCBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3JlYXRlKGNoYXIgKmNvbXByZXNzb3IpCiAJc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7CiAJY2hhciBuYW1lWzM4XTsgLyogJiMzOTt6c3dhcCYjMzk7ICYjNDM7IDMyIGNoYXIgKG1heCkgbnVtICYjNDM7IFwwICovCiAJaW50IHJldCwgY3B1OwomIzQzOwl1MzIgaWQ7CiAKIAlpZiAoIXpzd2FwX2hhc19wb29sICZhbXA7JmFtcDsgIXN0cmNtcChjb21wcmVzc29yLCBaU1dBUF9QQVJBTV9VTlNFVCkpCiAJCXJldHVybiBOVUxMOwpAQCAtMzIwLDEyICYjNDM7MzM5LDI5IEBAIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jcmVhdGUoY2hhciAqY29tcHJlc3NvcikKIAkJCSAgICAgIFBFUkNQVV9SRUZfQUxMT1dfUkVJTklULCBHRlBfS0VSTkVMKTsKIAlpZiAocmV0KQogCQlnb3RvIHJlZl9mYWlsOwotCUlOSVRfTElTVF9IRUFEKCZhbXA7cG9vbC0mZ3Q7bGlzdCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFB1Ymxpc2ggb25seSBhZnRlciB0aGUgcG9vbCBpcyBmdWxseSBidWlsdCwgc28gbG9ja2xlc3Mgd2Fsa2VycwomIzQzOwkgKiBuZXZlciBzZWUgYSBoYWxmLWluaXRpYWxpemVkIHBvb2wuICBUaGUgX2JoIHZhcmlhbnQgcGFpcnMgd2l0aCB0aGUKJiM0MzsJICogc29mdGlycS1jb250ZXh0IHhhX2xvY2sgdGFrZW4gaW4gX196c3dhcF9wb29sX2VtcHR5KCkuCiYjNDM7CSAqLwomIzQzOwlyZXQgPSB4YV9hbGxvY19iaCgmYW1wO3pzd2FwX3Bvb2xzLCAmYW1wO2lkLCBwb29sLAomIzQzOwkJCSAgWEFfTElNSVQoWlNXQVBfRklSU1RfUE9PTF9JRCwgWlNXQVBfTUFYX1BPT0xfSUQpLAomIzQzOwkJCSAgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWlmIChyZXQgPT0gLUVCVVNZKQomIzQzOwkJCXByX2VycigmIzM0O2Nhbm5vdCBhbGxvY2F0ZSBwb29sIGlkIChtYXggJWQgbGl2ZSBwb29scylcbiYjMzQ7LAomIzQzOwkJCSAgICAgICBaU1dBUF9NQVhfUE9PTF9JRCAtIFpTV0FQX0ZJUlNUX1BPT0xfSUQgJiM0MzsgMSk7CiYjNDM7CQlnb3RvIHhhX2ZhaWw7CiYjNDM7CX0KJiM0MzsJcG9vbC0mZ3Q7aWR4ID0gaWQ7CiAKIAl6c3dhcF9wb29sX2RlYnVnKCYjMzQ7Y3JlYXRlZCYjMzQ7LCBwb29sKTsKIAogCXJldHVybiBwb29sOwogCiYjNDM7eGFfZmFpbDoKJiM0MzsJcGVyY3B1X3JlZl9leGl0KCZhbXA7cG9vbC0mZ3Q7cmVmKTsKIHJlZl9mYWlsOgogCWNwdWhwX3N0YXRlX3JlbW92ZV9pbnN0YW5jZShDUFVIUF9NTV9aU1dQX1BPT0xfUFJFUEFSRSwgJmFtcDtwb29sLSZndDtub2RlKTsKIApAQCAtMzc5LDM3ICYjNDM7NDE1LDI5IEBAIHN0YXRpYyB2b2lkIHpzd2FwX3Bvb2xfZGVzdHJveShzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCkKIAogc3RhdGljIHZvaWQgX196c3dhcF9wb29sX3JlbGVhc2Uoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCB6c3dhcF9wb29sICpwb29sID0gY29udGFpbmVyX29mKHdvcmssIHR5cGVvZigqcG9vbCksCi0JCQkJCQlyZWxlYXNlX3dvcmspOwotCi0Jc3luY2hyb25pemVfcmN1KCk7CiYjNDM7CXN0cnVjdCB6c3dhcF9wb29sICpwb29sID0gY29udGFpbmVyX29mKHRvX3JjdV93b3JrKHdvcmspLAomIzQzOwkJCQkJICAgICAgIHR5cGVvZigqcG9vbCksIHJlbGVhc2VfcndvcmspOwogCiAJLyogbm9ib2R5IHNob3VsZCBoYXZlIGJlZW4gYWJsZSB0byBnZXQgYSByZWYuLi4gKi8KIAlXQVJOX09OKCFwZXJjcHVfcmVmX2lzX3plcm8oJmFtcDtwb29sLSZndDtyZWYpKTsKIAlwZXJjcHVfcmVmX2V4aXQoJmFtcDtwb29sLSZndDtyZWYpOwogCi0JLyogcG9vbCBpcyBub3cgb2ZmIHpzd2FwX3Bvb2xzIGxpc3QgYW5kIGhhcyBubyByZWZlcmVuY2VzLiAqLwomIzQzOwkvKiBUaGUgcG9vbCBpcyBubyBsb25nZXIgaW4genN3YXBfcG9vbHMgYW5kIGhhcyBubyByZWZlcmVuY2VzLiAqLwogCXpzd2FwX3Bvb2xfZGVzdHJveShwb29sKTsKIH0KIAotc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2N1cnJlbnQodm9pZCk7Ci0KIHN0YXRpYyB2b2lkIF9fenN3YXBfcG9vbF9lbXB0eShzdHJ1Y3QgcGVyY3B1X3JlZiAqcmVmKQogewogCXN0cnVjdCB6c3dhcF9wb29sICpwb29sOwogCiAJcG9vbCA9IGNvbnRhaW5lcl9vZihyZWYsIHR5cGVvZigqcG9vbCksIHJlZik7CiAKLQlzcGluX2xvY2tfYmgoJmFtcDt6c3dhcF9wb29sc19sb2NrKTsKLQotCVdBUk5fT04ocG9vbCA9PSB6c3dhcF9wb29sX2N1cnJlbnQoKSk7CiYjNDM7CVdBUk5fT04ocG9vbCA9PSByY3VfYWNjZXNzX3BvaW50ZXIoenN3YXBfY3VycmVudF9wb29sKSk7CiAKLQlsaXN0X2RlbF9yY3UoJmFtcDtwb29sLSZndDtsaXN0KTsKJiM0MzsJeGFfZXJhc2VfYmgoJmFtcDt6c3dhcF9wb29scywgcG9vbC0mZ3Q7aWR4KTsKIAotCUlOSVRfV09SSygmYW1wO3Bvb2wtJmd0O3JlbGVhc2Vfd29yaywgX196c3dhcF9wb29sX3JlbGVhc2UpOwotCXNjaGVkdWxlX3dvcmsoJmFtcDtwb29sLSZndDtyZWxlYXNlX3dvcmspOwotCi0Jc3Bpbl91bmxvY2tfYmgoJmFtcDt6c3dhcF9wb29sc19sb2NrKTsKJiM0MzsJSU5JVF9SQ1VfV09SSygmYW1wO3Bvb2wtJmd0O3JlbGVhc2VfcndvcmssIF9fenN3YXBfcG9vbF9yZWxlYXNlKTsKJiM0MzsJcXVldWVfcmN1X3dvcmsoc3lzdGVtX3BlcmNwdV93cSwgJmFtcDtwb29sLSZndDtyZWxlYXNlX3J3b3JrKTsKIH0KIAogc3RhdGljIGludCBfX211c3RfY2hlY2sgenN3YXBfcG9vbF90cnlnZXQoc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wpCkBAIC00MzUsMjAgJiM0Mzs0NjMsMTMgQEAgc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICpfX3pzd2FwX3Bvb2xfY3VycmVudCh2b2lkKQogewogCXN0cnVjdCB6c3dhcF9wb29sICpwb29sOwogCi0JcG9vbCA9IGxpc3RfZmlyc3Rfb3JfbnVsbF9yY3UoJmFtcDt6c3dhcF9wb29scywgdHlwZW9mKCpwb29sKSwgbGlzdCk7CiYjNDM7CXBvb2wgPSByY3VfZGVyZWZlcmVuY2UoenN3YXBfY3VycmVudF9wb29sKTsKIAlXQVJOX09OQ0UoIXBvb2wgJmFtcDsmYW1wOyB6c3dhcF9oYXNfcG9vbCwKIAkJICAmIzM0OyVzOiBubyBwYWdlIHN0b3JhZ2UgcG9vbCFcbiYjMzQ7LCBfX2Z1bmNfXyk7CiAKIAlyZXR1cm4gcG9vbDsKIH0KIAotc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2N1cnJlbnQodm9pZCkKLXsKLQlhc3NlcnRfc3Bpbl9sb2NrZWQoJmFtcDt6c3dhcF9wb29sc19sb2NrKTsKLQotCXJldHVybiBfX3pzd2FwX3Bvb2xfY3VycmVudCgpOwotfQotCiBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3VycmVudF9nZXQodm9pZCkKIHsKIAlzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDsKQEAgLTQ2NCwyMyAmIzQzOzQ4NSwyOCBAQCBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3VycmVudF9nZXQodm9pZCkKIAlyZXR1cm4gcG9vbDsKIH0KIAotLyogdHlwZSBhbmQgY29tcHJlc3NvciBtdXN0IGJlIG51bGwtdGVybWluYXRlZCAqLwomIzQzOy8qIGNvbXByZXNzb3IgbXVzdCBiZSBudWxsLXRlcm1pbmF0ZWQgKi8KIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9maW5kX2dldChjaGFyICpjb21wcmVzc29yKQogewogCXN0cnVjdCB6c3dhcF9wb29sICpwb29sOwomIzQzOwl1bnNpZ25lZCBsb25nIGlkOwogCi0JYXNzZXJ0X3NwaW5fbG9ja2VkKCZhbXA7enN3YXBfcG9vbHNfbG9jayk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb29sLCAmYW1wO3pzd2FwX3Bvb2xzLCBsaXN0KSB7CiYjNDM7CS8qCiYjNDM7CSAqIF9fenN3YXBfcG9vbF9lbXB0eSgpIGNhbiBlcmFzZSBmcm9tIHpzd2FwX3Bvb2xzIGluIHNvZnRpcnEgd2hpbGUgd2UKJiM0MzsJICogd2Fsay4gIHJjdV9yZWFkX2xvY2soKSBrZWVwcyB0aGUgd2FsayBjb25zaXN0ZW50IGFuZCBlYWNoIHBvb2wgYWxpdmUKJiM0MzsJICogYWNyb3NzIHRyeWdldCgpLiAgeGFfZm9yX2VhY2goKSYjMzk7cyBvd24gUkNVIGRvZXMgbm90IHNwYW4gdGhlIGxvb3AgYm9keS4KJiM0MzsJICovCiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJeGFfZm9yX2VhY2goJmFtcDt6c3dhcF9wb29scywgaWQsIHBvb2wpIHsKIAkJaWYgKHN0cmNtcChwb29sLSZndDt0Zm1fbmFtZSwgY29tcHJlc3NvcikpCiAJCQljb250aW51ZTsKIAkJLyogaWYgd2UgY2FuJiMzOTt0IGdldCBpdCwgaXQmIzM5O3MgYWJvdXQgdG8gYmUgZGVzdHJveWVkICovCi0JCWlmICghenN3YXBfcG9vbF90cnlnZXQocG9vbCkpCi0JCQljb250aW51ZTsKLQkJcmV0dXJuIHBvb2w7CiYjNDM7CQlpZiAoenN3YXBfcG9vbF90cnlnZXQocG9vbCkpCiYjNDM7CQkJYnJlYWs7CiAJfQomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKIAotCXJldHVybiBOVUxMOwomIzQzOwlyZXR1cm4gcG9vbDsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgenN3YXBfbWF4X3BhZ2VzKHZvaWQpCkBAIC00OTcsOSAmIzQzOzUyMywxNCBAQCB1bnNpZ25lZCBsb25nIHpzd2FwX3RvdGFsX3BhZ2VzKHZvaWQpCiB7CiAJc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7CiAJdW5zaWduZWQgbG9uZyB0b3RhbCA9IDA7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaWQ7CiAKJiM0MzsJLyoKJiM0MzsJICogcmN1X3JlYWRfbG9jaygpIGtlZXBzIGVhY2ggcG9vbCBhbGl2ZSBhY3Jvc3MgenNfZ2V0X3RvdGFsX3BhZ2VzKCkuCiYjNDM7CSAqIHhhX2Zvcl9lYWNoKCkmIzM5O3Mgb3duIFJDVSBkb2VzIG5vdCBzcGFuIHRoZSBsb29wIGJvZHkuCiYjNDM7CSAqLwogCXJjdV9yZWFkX2xvY2soKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb29sLCAmYW1wO3pzd2FwX3Bvb2xzLCBsaXN0KQomIzQzOwl4YV9mb3JfZWFjaCgmYW1wO3pzd2FwX3Bvb2xzLCBpZCwgcG9vbCkKIAkJdG90YWwgJiM0Mzs9IHpzX2dldF90b3RhbF9wYWdlcyhwb29sLSZndDt6c19wb29sKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIApAQCAtNTU2LDIwICYjNDM7NTg3LDEzIEBAIHN0YXRpYyBpbnQgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtCiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCXNwaW5fbG9ja19iaCgmYW1wO3pzd2FwX3Bvb2xzX2xvY2spOwotCiAJcG9vbCA9IHpzd2FwX3Bvb2xfZmluZF9nZXQocyk7Ci0JaWYgKHBvb2wpIHsKJiM0MzsJaWYgKCFwb29sKSB7CiYjNDM7CQlwb29sID0genN3YXBfcG9vbF9jcmVhdGUocyk7CiYjNDM7CX0gZWxzZSB7CiAJCXpzd2FwX3Bvb2xfZGVidWcoJiMzNDt1c2luZyBleGlzdGluZyYjMzQ7LCBwb29sKTsKLQkJV0FSTl9PTihwb29sID09IHpzd2FwX3Bvb2xfY3VycmVudCgpKTsKLQkJbGlzdF9kZWxfcmN1KCZhbXA7cG9vbC0mZ3Q7bGlzdCk7Ci0JfQomIzQzOwkJV0FSTl9PTihwb29sID09IHJjdV9hY2Nlc3NfcG9pbnRlcih6c3dhcF9jdXJyZW50X3Bvb2wpKTsKIAotCXNwaW5fdW5sb2NrX2JoKCZhbXA7enN3YXBfcG9vbHNfbG9jayk7Ci0KLQlpZiAoIXBvb2wpCi0JCXBvb2wgPSB6c3dhcF9wb29sX2NyZWF0ZShzKTsKLQllbHNlIHsKIAkJLyoKIAkJICogUmVzdG9yZSB0aGUgaW5pdGlhbCByZWYgZHJvcHBlZCBieSBwZXJjcHVfcmVmX2tpbGwoKQogCQkgKiB3aGVuIHRoZSBwb29sIHdhcyBkZWNvbW1pc3Npb25lZCBhbmQgc3dpdGNoIGl0IGFnYWluCkBAIC01ODYsMjQgJiM0Mzs2MTAsMTggQEAgc3RhdGljIGludCB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldChjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0KIAllbHNlCiAJCXJldCA9IC1FSU5WQUw7CiAKLQlzcGluX2xvY2tfYmgoJmFtcDt6c3dhcF9wb29sc19sb2NrKTsKLQomIzQzOwkvKgomIzQzOwkgKiBDb21wcmVzc29yIHN3aXRjaGVzIGFyZSBzZXJpYWxpemVkIGJ5IHRoZSBrZXJuZWwgcGFyYW0gbG9jaywgc28gdGhpcwomIzQzOwkgKiBpcyB0aGUgb25seSB3cml0ZXIgb2YgenN3YXBfY3VycmVudF9wb29sOiBubyB4YV9sb2NrIG5lZWRlZC4KJiM0MzsJICovCiAJaWYgKCFyZXQpIHsKLQkJcHV0X3Bvb2wgPSB6c3dhcF9wb29sX2N1cnJlbnQoKTsKLQkJbGlzdF9hZGRfcmN1KCZhbXA7cG9vbC0mZ3Q7bGlzdCwgJmFtcDt6c3dhcF9wb29scyk7CiYjNDM7CQlwdXRfcG9vbCA9IHJjdV9hY2Nlc3NfcG9pbnRlcih6c3dhcF9jdXJyZW50X3Bvb2wpOwomIzQzOwkJcmN1X2Fzc2lnbl9wb2ludGVyKHpzd2FwX2N1cnJlbnRfcG9vbCwgcG9vbCk7CiAJCXpzd2FwX2hhc19wb29sID0gdHJ1ZTsKIAl9IGVsc2UgaWYgKHBvb2wpIHsKLQkJLyoKLQkJICogQWRkIHRoZSBwb3NzaWJseSBwcmUtZXhpc3RpbmcgcG9vbCB0byB0aGUgZW5kIG9mIHRoZSBwb29scwotCQkgKiBsaXN0OyBpZiBpdCYjMzk7cyBuZXcgKGFuZCBlbXB0eSkgdGhlbiBpdCYjMzk7bGwgYmUgcmVtb3ZlZCBhbmQKLQkJICogZGVzdHJveWVkIGJ5IHRoZSBwdXQgYWZ0ZXIgd2UgZHJvcCB0aGUgbG9jawotCQkgKi8KLQkJbGlzdF9hZGRfdGFpbF9yY3UoJmFtcDtwb29sLSZndDtsaXN0LCAmYW1wO3pzd2FwX3Bvb2xzKTsKIAkJcHV0X3Bvb2wgPSBwb29sOwogCX0KIAotCXNwaW5fdW5sb2NrX2JoKCZhbXA7enN3YXBfcG9vbHNfbG9jayk7Ci0KIAkvKgogCSAqIERyb3AgdGhlIHJlZiBmcm9tIGVpdGhlciB0aGUgb2xkIGN1cnJlbnQgcG9vbCwKIAkgKiBvciB0aGUgbmV3IHBvb2wgd2UgZmFpbGVkIHRvIGFkZApAQCAtNzUxLDkgJiM0Mzs3NjksMTMgQEAgc3RhdGljIHZvaWQgenN3YXBfZW50cnlfY2FjaGVfZnJlZShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KQogICovCiBzdGF0aWMgdm9pZCB6c3dhcF9lbnRyeV9mcmVlKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpCiB7CiYjNDM7CXN0cnVjdCB6c3dhcF9wb29sICpwb29sID0genN3YXBfZW50cnlfcG9vbChlbnRyeSk7CiYjNDM7CiAJenN3YXBfbHJ1X2RlbChlbnRyeSk7Ci0JenNfZnJlZShlbnRyeS0mZ3Q7cG9vbC0mZ3Q7enNfcG9vbCwgZW50cnktJmd0O2hhbmRsZSk7Ci0JenN3YXBfcG9vbF9wdXQoZW50cnktJmd0O3Bvb2wpOwomIzQzOwlpZiAoIVdBUk5fT05fT05DRSghcG9vbCkpIHsKJiM0MzsJCXpzX2ZyZWUocG9vbC0mZ3Q7enNfcG9vbCwgZW50cnktJmd0O2hhbmRsZSk7CiYjNDM7CQl6c3dhcF9wb29sX3B1dChwb29sKTsKJiM0MzsJfQogCWlmIChlbnRyeS0mZ3Q7b2JqY2cpIHsKIAkJb2JqX2Nncm91cF91bmNoYXJnZV96c3dhcChlbnRyeS0mZ3Q7b2JqY2csIGVudHJ5LSZndDtsZW5ndGgpOwogCQlvYmpfY2dyb3VwX3B1dChlbnRyeS0mZ3Q7b2JqY2cpOwpAQCAtOTEwLDEyICYjNDM7OTMyLDE1IEBAIHN0YXRpYyBib29sIHpzd2FwX2NvbXByZXNzKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LAogCiBzdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7Ci0Jc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSBlbnRyeS0mZ3Q7cG9vbDsKJiM0MzsJc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSB6c3dhcF9lbnRyeV9wb29sKGVudHJ5KTsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgaW5wdXRbMl07IC8qIHpzbWFsbG9jIHJldHVybnMgYW4gU0cgbGlzdCAxLTIgZW50cmllcyAqLwogCXN0cnVjdCBzY2F0dGVybGlzdCBvdXRwdXQ7CiAJc3RydWN0IGNyeXB0b19hY29tcF9jdHggKmFjb21wX2N0eDsKIAlpbnQgcmV0ID0gMCwgZGxlbjsKIAomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCFwb29sKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKIAlhY29tcF9jdHggPSByYXdfY3B1X3B0cihwb29sLSZndDthY29tcF9jdHgpOwogCW11dGV4X2xvY2soJmFtcDthY29tcF9jdHgtJmd0O211dGV4KTsKIAl6c19vYmpfcmVhZF9zZ19iZWdpbihwb29sLSZndDt6c19wb29sLCBlbnRyeS0mZ3Q7aGFuZGxlLCBpbnB1dCwgZW50cnktJmd0O2xlbmd0aCk7CkBAIC05NTEsNyAmIzQzOzk3Niw3IEBAIHN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbykKIAlwcl9hbGVydF9yYXRlbGltaXRlZCgmIzM0O0RlY29tcHJlc3Npb24gZXJyb3IgZnJvbSB6c3dhcCAoJWQ6JWx1ICVzICV1LSZndDslZClcbiYjMzQ7LAogCQkJCQkJc3dwX3R5cGUoZW50cnktJmd0O3N3cGVudHJ5KSwKIAkJCQkJCXN3cF9vZmZzZXQoZW50cnktJmd0O3N3cGVudHJ5KSwKLQkJCQkJCWVudHJ5LSZndDtwb29sLSZndDt0Zm1fbmFtZSwKJiM0MzsJCQkJCQlwb29sLSZndDt0Zm1fbmFtZSwKIAkJCQkJCWVudHJ5LSZndDtsZW5ndGgsIGRsZW4pOwogCXJldHVybiBmYWxzZTsKIH0KQEAgLTE0MDksNiAmIzQzOzE0MzQsMTMgQEAgc3RhdGljIGJvb2wgenN3YXBfc3RvcmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwKIAlpZiAoIXpzd2FwX2NvbXByZXNzKHBhZ2UsIGVudHJ5LCBwb29sKSkKIAkJZ290byBjb21wcmVzc19mYWlsZWQ7CiAKJiM0MzsJLyoKJiM0MzsJICogU2V0IHBvb2xfaWR4IGJlZm9yZSB0aGUgeGFfc3RvcmUoKSBiZWxvdyBwdWJsaXNoZXMgdGhlIGVudHJ5LCBvciBhCiYjNDM7CSAqIGNvbmN1cnJlbnQgcmVhZGVyIGNvdWxkIHJlc29sdmUgYSBzdGFsZSBwb29sX2lkeCBsZWZ0IGJ5IHNsYWIgcmV1c2UKJiM0MzsJICogdG8gYW4gdW5yZWxhdGVkIGxpdmUgcG9vbC4KJiM0MzsJICovCiYjNDM7CWVudHJ5LSZndDtwb29sX2lkeCA9IHBvb2wtJmd0O2lkeDsKJiM0MzsKIAlvbGQgPSB4YV9zdG9yZShzd2FwX3pzd2FwX3RyZWUocGFnZV9zd3BlbnRyeSksCiAJCSAgICAgICBzd3Bfb2Zmc2V0KHBhZ2Vfc3dwZW50cnkpLAogCQkgICAgICAgZW50cnksIEdGUF9LRVJORUwpOwpAQCAtMTQ1NCw3ICYjNDM7MTQ4Niw2IEBAIHN0YXRpYyBib29sIHpzd2FwX3N0b3JlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsCiAJICogICAgVGhlIHB1Ymxpc2hpbmcgb3JkZXIgbWF0dGVycyB0byBwcmV2ZW50IHdyaXRlYmFjayBmcm9tIHNlZWluZwogCSAqICAgIGFuIGluY29oZXJlbnQgZW50cnkuCiAJICovCi0JZW50cnktJmd0O3Bvb2wgPSBwb29sOwogCWVudHJ5LSZndDtzd3BlbnRyeSA9IHBhZ2Vfc3dwZW50cnk7CiAJZW50cnktJmd0O29iamNnID0gb2JqY2c7CiAJZW50cnktJmd0O3JlZmVyZW5jZWQgPSB0cnVlOwpAQCAtMTc5MCw3ICYjNDM7MTgyMSw3IEBAIHN0YXRpYyBpbnQgenN3YXBfc2V0dXAodm9pZCkKIAlwb29sID0gX196c3dhcF9wb29sX2NyZWF0ZV9mYWxsYmFjaygpOwogCWlmIChwb29sKSB7CiAJCXByX2luZm8oJiMzNDtsb2FkZWQgdXNpbmcgcG9vbCAlc1xuJiMzNDssIHBvb2wtJmd0O3RmbV9uYW1lKTsKLQkJbGlzdF9hZGQoJmFtcDtwb29sLSZndDtsaXN0LCAmYW1wO3pzd2FwX3Bvb2xzKTsKJiM0MzsJCXJjdV9hc3NpZ25fcG9pbnRlcih6c3dhcF9jdXJyZW50X3Bvb2wsIHBvb2wpOwogCQl6c3dhcF9oYXNfcG9vbCA9IHRydWU7CiAJCXN0YXRpY19icmFuY2hfZW5hYmxlKCZhbXA7enN3YXBfZXZlcl9lbmFibGVkKTsKIAl9IGVsc2Ugewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMDoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTk4CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWnN3YXAgUGF0Y2g6IEEgRnV6emluZyBQZXJzcGVjdGl2ZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggdGFyZ2V0aW5nIGBtbS96c3dhcC5jYCBmb3IgYW1kNjQuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgc2lnbmlmaWNhbnQuIEl0JiMzOTtzIG5vdCBqdXN0IGEgbWlub3IgdHdlYWs7IHRoaXMgaXMgYSByZWZhY3RvcmluZyBvZiB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgd2l0aGluIHRoZSB6c3dhcCBzdWJzeXN0ZW0uIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHJlcGxhY2luZyBgbGlzdF9oZWFkYCB3aXRoIGFuIGB4YXJyYXlgLCBwb2ludGVycyB3aXRoIGluZGljZXMgKGB1OCBwb29sX2lkeGApLCBhbmQgaW50cm9kdWNpbmcgbmV3IGhlbHBlciBmdW5jdGlvbnMgbGlrZSBgenN3YXBfZW50cnlfcG9vbCgpYC4gVGhpcyBpbXBsaWVzIGEgZnVuZGFtZW50YWwgc2hpZnQgaW4gaG93IHpzd2FwIHBvb2xzIGFuZCBlbnRyaWVzIGFyZSBtYW5hZ2VkLgoKVGhlIGNoYW5nZXMgdG8gdGhlIGNvbmN1cnJlbmN5IG1vZGVsIOKAkyBlbWJyYWNpbmcgUkNVIGFuZCB3b3JrcXVldWVzIHdpdGggYHJjdV93b3JrYCwgYHF1ZXVlX3JjdV93b3JrYCwgYW5kIHRoZSB4YXJyYXkgb3BlcmF0aW9ucyDigJMgYXJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy4gVGhpcyBsZXZlbCBvZiBjb25jdXJyZW5jeSBtb2RpZmljYXRpb24gaW4gbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBhbHdheXMgd2FycmFudHMgY2xvc2UgYXR0ZW50aW9uLCBhcyBpdCBpbnRyb2R1Y2VzIG5ldyBsb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb24gY2hhbGxlbmdlcy4gVGhlcmUgYXJlIHNvbWUgY2hhbmdlcyB0byBhc3NlcnRpb25zLCB3aGljaCBpcyBhbHNvIGhlbHBmdWwgaW4gdW5kZXJzdGFuZGluZyB0aGUgY29kZS4KClRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXMsIGlzIHRoaXMgd29ydGggZnV6emluZz8gQmFzZWQgb24gbXkgdHJpYWdlIHBoaWxvc29waHksIGl0JiMzOTtzIGEgY2xlYXIgeWVzLiBSZWFjaGFiaWxpdHkgaXMgc3RyYWlnaHRmb3J3YXJkOyB6c3dhcCBpcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29tcG9uZW50LCByZWFkaWx5IGFjY2Vzc2libGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHdpdGggc3dhcCBlbmFibGVkLiBUaGUgY2hhbmdlcyBhcmUgbW9yZSB0aGFuIGp1c3QgY29zbWV0aWMuIFRoaXMgcGF0Y2ggY29tcGxldGVseSByZWZhY3RvcnMgdGhlIHVuZGVybHlpbmcgbG9naWMsIGRhdGEgc3RydWN0dXJlcywgYW5kIGNvbmN1cnJlbmN5IG1lY2hhbmlzbXMuIFRoaXMgbGV2ZWwgb2YgYXJjaGl0ZWN0dXJhbCBjaGFuZ2UsIGVzcGVjaWFsbHkgYXJvdW5kIG1lbW9yeSBtYW5hZ2VtZW50LCBpcyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4KCkkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzIGZvciBgbW0venN3YXAuY2AgdXNpbmcgYGdyZXBwZXJgIG9yIGNoZWNraW5nIGBtbS9LY29uZmlnYCB0byBiZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb2YgdGhpcy4gQnV0IGluIG15IGV4cGVydCBvcGluaW9uLCB0aGlzIGxvb2tzIGxpa2UgYSBoaWdoLXByaW9yaXR5IGZ1enppbmcgdGFyZ2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIwOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaU1dBUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyPW1lbnVjb25maWcgU1dBUFxuLS1cbm1tL0tjb25maWctMjEtXG5tbS9LY29uZmlnOjIyOmNvbmZpZyBaU1dBUFxubW0vS2NvbmZpZy0yMy1cdGJvb2wgXCYjMzQ7Q29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1wmIzM0O1xuLS1cbm1tL0tjb25maWctMzQtXG5tbS9LY29uZmlnOjM1OmNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXG5tbS9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbm1tL0tjb25maWctNDQtXG5tbS9LY29uZmlnOjQ1OmNvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXG5tbS9LY29uZmlnLTQ2LVx0Ym9vbCBcJiMzNDtTaHJpbmsgdGhlIHpzd2FwIHBvb2wgb24gbWVtb3J5IHByZXNzdXJlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz01OT1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTc2LVxubW0vS2NvbmZpZzo3Nzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0RFRkxBVEVcbm1tL0tjb25maWctNzgtXHRib29sIFwmIzM0O0RlZmxhdGVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTgyLVxubW0vS2NvbmZpZzo4Mzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaT1xubW0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7TFpPXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04OC1cbm1tL0tjb25maWc6ODk6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF84NDJcbm1tL0tjb25maWctOTAtXHRib29sIFwmIzM0Ozg0MlwmIzM0O1xuLS1cbm1tL0tjb25maWctOTQtXG5tbS9LY29uZmlnOjk1OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0XG5tbS9LY29uZmlnLTk2LVx0Ym9vbCBcJiMzNDtMWjRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwMC1cbm1tL0tjb25maWc6MTAxOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0SENcbm1tL0tjb25maWctMTAyLVx0Ym9vbCBcJiMzNDtMWjRIQ1wmIzM0O1xuLS1cbm1tL0tjb25maWctMTA2LVxubW0vS2NvbmZpZzoxMDc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9aU1REXG5tbS9LY29uZmlnLTEwOC1cdGJvb2wgXCYjMzQ7enN0ZFwmIzM0O1xuLS1cbm1tL0tjb25maWc9MTEyPWVuZGNob2ljZVxubW0vS2NvbmZpZy0xMTMtXG5tbS9LY29uZmlnOjExNDpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXG5tbS9LY29uZmlnLTExNS0gICAgICAgc3RyaW5nXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjA6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODYzNAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktjb25maWcgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCBiYXNlZCBvbiB0aGlzLCB0aGUgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpcyBwcm9iYWJseSBpbiBgbW0vS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBzb21ld2hlcmUgaW4gdGhlIGxpbmVzIGJldHdlZW4gMjAgYW5kIDQwLiBUaGF0IHJhbmdlIGlzIHVzdWFsbHkgd2hlcmUgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLiBHaXZlbiB0aGUgdGFzaywgSSYjMzk7bSBiZXR0aW5nIHRoYXQgdGhlIHJlbGV2YW50IGZsYWdzIG9yIGZlYXR1cmUgZW5hYmxpbmcgbG9naWMgaXMgaW4gdGhhdCBpbW1lZGlhdGUgdmljaW5pdHkuIExldCYjMzk7cyBzZWUgaWYgdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkIGluIHRoaXMgcmFuZ2UuIEZyb20gdGhlcmUgSSBjYW4gZGV0ZXJtaW5lIHdoZXJlIEkgbmVlZCB0byBjb250aW51ZSBteSBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIwOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMTI6XHRtZW51Y29uZmlnIFNXQVBcbiAgMTM6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgcGFnaW5nIG9mIGFub255bW91cyBtZW1vcnkgKHN3YXApXCYjMzQ7XG4gIDE0Olx0XHRkZXBlbmRzIG9uIE1NVSBcdTAwMjZcdTAwMjYgQkxPQ0sgXHUwMDI2XHUwMDI2ICFBUkNIX05PX1NXQVBcbiAgMTU6XHRcdGRlZmF1bHQgeVxuICAxNjpcdFx0aGVscFxuICAxNzpcdFx0ICBUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIGNob29zZSB3aGV0aGVyIHlvdSB3YW50IHRvIGhhdmUgc3VwcG9ydFxuICAxODpcdFx0ICBmb3Igc28gY2FsbGVkIHN3YXAgZGV2aWNlcyBvciBzd2FwIGZpbGVzIGluIHlvdXIga2VybmVsIHRoYXQgYXJlXG4gIDE5Olx0XHQgIHVzZWQgdG8gcHJvdmlkZSBtb3JlIHZpcnR1YWwgbWVtb3J5IHRoYW4gdGhlIGFjdHVhbCBSQU0gcHJlc2VudFxuICAyMDpcdFx0ICBpbiB5b3VyIGNvbXB1dGVyLiAgSWYgdW5zdXJlIHNheSBZLlxuICAyMTpcdFxuICAyMjpcdGNvbmZpZyBaU1dBUFxuICAyMzpcdFx0Ym9vbCBcJiMzNDtDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXCYjMzQ7XG4gIDI0Olx0XHRkZXBlbmRzIG9uIFNXQVBcbiAgMjU6XHRcdHNlbGVjdCBDUllQVE9cbiAgMjY6XHRcdHNlbGVjdCBaU01BTExPQ1xuICAyNzpcdFx0aGVscFxuICAyODpcdFx0ICBBIGxpZ2h0d2VpZ2h0IGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMuICBJdCB0YWtlc1xuICAyOTpcdFx0ICBwYWdlcyB0aGF0IGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBzd2FwcGVkIG91dCBhbmQgYXR0ZW1wdHMgdG9cbiAgMzA6XHRcdCAgY29tcHJlc3MgdGhlbSBpbnRvIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIFJBTS1iYXNlZCBtZW1vcnkgcG9vbC5cbiAgMzE6XHRcdCAgVGhpcyBjYW4gcmVzdWx0IGluIGEgc2lnbmlmaWNhbnQgSS9PIHJlZHVjdGlvbiBvbiBzd2FwIGRldmljZSBhbmQsXG4gIDMyOlx0XHQgIGluIHRoZSBjYXNlIHdoZXJlIGRlY29tcHJlc3NpbmcgZnJvbSBSQU0gaXMgZmFzdGVyIHRoYW4gc3dhcCBkZXZpY2VcbiAgMzM6XHRcdCAgcmVhZHMsIGNhbiBhbHNvIGltcHJvdmUgd29ya2xvYWQgcGVyZm9ybWFuY2UuXG4gIDM0Olx0XG4gIDM1Olx0Y29uZmlnIFpTV0FQX0RFRkFVTFRfT05cbiAgMzY6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcJiMzNDtcbiAgMzc6XHRcdGRlcGVuZHMgb24gWlNXQVBcbiAgMzg6XHRcdGhlbHBcbiAgMzk6XHRcdCAgSWYgc2VsZWN0ZWQsIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIHdpbGwgYmUgZW5hYmxlZFxuICA0MDpcdFx0ICBhdCBib290LCBvdGhlcndpc2UgaXQgd2lsbCBiZSBkaXNhYmxlZC5cbiAgNDE6XHRcbiAgNDI6XHRcdCAgVGhlIHNlbGVjdGlvbiBtYWRlIGhlcmUgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdXNpbmcgdGhlIGtlcm5lbFxuICA0MzpcdFx0ICBjb21tYW5kIGxpbmUgJiMzOTt6c3dhcC5lbmFibGVkPSYjMzk7IG9wdGlvbi5cbiAgNDQ6XHRcbiAgNDU6XHRjb25maWcgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlxuICA0NjpcdFx0Ym9vbCBcJiMzNDtTaHJpbmsgdGhlIHpzd2FwIHBvb2wgb24gbWVtb3J5IHByZXNzdXJlXCYjMzQ7XG4gIDQ3Olx0XHRkZXBlbmRzIG9uIFpTV0FQXG4gIDQ4Olx0XHRkZWZhdWx0IG5cbiAgNDk6XHRcdGhlbHBcbiAgNTA6XHRcdCAgSWYgc2VsZWN0ZWQsIHRoZSB6c3dhcCBzaHJpbmtlciB3aWxsIGJlIGVuYWJsZWQsIGFuZCB0aGUgcGFnZXNcbiAgNTE6XHRcdCAgc3RvcmVkIGluIHRoZSB6c3dhcCBwb29sIHdpbGwgYmVjb21lIGF2YWlsYWJsZSBmb3IgcmVjbGFpbSAoaS5lXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjA6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM4NAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtlcm5lbCYjMzk7cyBac3dhcCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgenN3YXAgY29kZS4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBgQ09ORklHX1pTV0FQYCBhbmQgYENPTkZJR19TV0FQYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwmIzM5O3Mgc3dhcCBoYW5kbGluZyBpbnRlcmFjdHMgd2l0aCB0aGUgenN3YXAgZnVuY3Rpb25hbGl0eS4KCkZpcnN0LCBJJiMzOTtsbCBleGFtaW5lIHRoZSBjaGFuZ2VzIHdpdGhpbiBgbW0venN3YXAuY2AuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgdGhlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgc3ltYm9scy4gU28sIEkgc2VlIHRoaW5ncyBsaWtlIGB6c3dhcF9lbnRyeV9wb29sYCwgd2hpY2ggaXMgc3RhdGljLCBhbmQgaXRzIHJlbGF0ZWQgZnVuY3Rpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgenN3YXBfZW50cnlfcG9vbGAgaXMgaW5kZWVkIHN0YXRpYyB3aXRoaW4gYG1tL3pzd2FwLmNgLiBUaGVuLCBJJiMzOTtsbCBzY2FuIHRoZSBwb29sIGZ1bmN0aW9uczogYHpzd2FwX3Bvb2xfY3JlYXRlYCwgYF9fenN3YXBfcG9vbF9yZWxlYXNlYCwgYF9fenN3YXBfcG9vbF9lbXB0eWAsIGFuZCBgenN3YXBfcG9vbF9maW5kX2dldGAuIEkmIzM5O2xsIGFsc28gbm90ZSBgenN3YXBfdG90YWxfcGFnZXNgLCBgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXRgLCBgenN3YXBfZW50cnlfZnJlZWAsIGB6c3dhcF9kZWNvbXByZXNzYCwgYHpzd2FwX3N0b3JlX3BhZ2VgLCBgenN3YXBfc3RvcmVgLCBgenN3YXBfbG9hZGAsIGFuZCBgenN3YXBfc2V0dXBgLgoKTm93LCBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHpvb20gaW4gb24gdGhlIG5vbi11YmlxdWl0b3VzLCBzcGVjaWZpYyBmdW5jdGlvbnMgdGhhdCBhcmUgbW9kaWZpZWQgb3IgZXhlcmNpc2UgdGhpcyBsb2dpYyB3aXRoaW4gYG1tL3pzd2FwLmNgLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIGJyb2FkZXIgc3dhcCBtZWNoYW5pc20uIEkmIzM5O2xsIG5lZWQgdG8gcmVhZCBhcm91bmQgYHpzd2FwX3N0b3JlYCwgYHpzd2FwX2xvYWRgLCBldGMuLCBpbiBgbW0venN3YXAuY2AgdG8gaWRlbnRpZnkgYW55IGV4dGVybmFsL25vbi1zdGF0aWMgc3ltYm9scyBvciBrZXkgZnVuY3Rpb25zIHRoYXQgSSBzaG91bGQgcGF5IGNsb3NlIGF0dGVudGlvbiB0bywgYXMgdGhleSYjMzk7bGwgbGlrZWx5IGJlIHRoZSBob29rcyBpbnRvIHRoZSByZXN0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjA6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7enN3YXBfc3RvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS96c3dhcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3pzd2FwLmMtNDctLyogVGhlIG51bWJlciBvZiBwYWdlcyBjdXJyZW50bHkgc3RvcmVkIGluIHpzd2FwICovXG5tbS96c3dhcC5jOjQ4OmF0b21pY19sb25nX3QgenN3YXBfc3RvcmVkX3BhZ2VzID0gQVRPTUlDX0xPTkdfSU5JVCgwKTtcbm1tL3pzd2FwLmMtNDktLyogVGhlIG51bWJlciBvZiBpbmNvbXByZXNzaWJsZSBwYWdlcyBjdXJyZW50bHkgc3RvcmVkIGluIHpzd2FwICovXG5tbS96c3dhcC5jOjUwOnN0YXRpYyBhdG9taWNfbG9uZ190IHpzd2FwX3N0b3JlZF9pbmNvbXByZXNzaWJsZV9wYWdlcyA9IEFUT01JQ19MT05HX0lOSVQoMCk7XG5tbS96c3dhcC5jLTUxLVxuLS1cbm1tL3pzd2FwLmM9MjAyPXN0cnVjdCB6c3dhcF9lbnRyeSB7XG4tLVxubW0venN3YXAuYy0yMTMtICogTm8gUkNVIHNlY3Rpb24gaXMgbmVlZGVkIGFyb3VuZCB0aGUgcmV0dXJuZWQgcG9pbnRlcjogYSBzdG9yZWQgZW50cnkgcGluc1xubW0venN3YXAuYzoyMTQ6ICogaXRzIHBvb2wgdmlhIHBlcmNwdV9yZWYgKHRha2VuIGluIHpzd2FwX3N0b3JlX3BhZ2UoKSksIHNvIHRoZSBpZCBjYW5ub3QgYmVcbm1tL3pzd2FwLmMtMjE1LSAqIHJldXNlZCB1bmRlciB1cy4gIENhbGxlcnMgV0FSTiBhbmQgaGFuZGxlIGEgTlVMTCBmcm9tIGEgY29ycnVwdCBwb29sX2lkeC5cbi0tXG5tbS96c3dhcC5jPTc3MD1zdGF0aWMgdm9pZCB6c3dhcF9lbnRyeV9mcmVlKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXG4tLVxubW0venN3YXAuYy03ODMtXHRpZiAoZW50cnktXHUwMDNlbGVuZ3RoID09IFBBR0VfU0laRSlcbm1tL3pzd2FwLmM6Nzg0Olx0XHRhdG9taWNfbG9uZ19kZWMoXHUwMDI2enN3YXBfc3RvcmVkX2luY29tcHJlc3NpYmxlX3BhZ2VzKTtcbm1tL3pzd2FwLmMtNzg1LVx0enN3YXBfZW50cnlfY2FjaGVfZnJlZShlbnRyeSk7XG5tbS96c3dhcC5jOjc4NjpcdGF0b21pY19sb25nX2RlYyhcdTAwMjZ6c3dhcF9zdG9yZWRfcGFnZXMpO1xubW0venN3YXAuYy03ODctfVxuLS1cbm1tL3pzd2FwLmM9OTMzPXN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS96c3dhcC5jLTk5My0gKiB0byB0aGUgc3dhcCBkZXZpY2UuICBXZSBhcmUgYmFzaWNhbGx5IHJlc3VtaW5nIHRoZSBzYW1lIHN3YXBcbm1tL3pzd2FwLmM6OTk0OiAqIHdyaXRlYmFjayBwYXRoIHRoYXQgd2FzIGludGVyY2VwdGVkIHdpdGggdGhlIHpzd2FwX3N0b3JlKClcbm1tL3pzd2FwLmMtOTk1LSAqIGluIHRoZSBmaXJzdCBwbGFjZS4gIEFmdGVyIHRoZSBmb2xpbyBoYXMgYmVlbiBkZWNvbXByZXNzZWQgaW50b1xuLS1cbm1tL3pzd2FwLmM9MTIwND1zdGF0aWMgdW5zaWduZWQgbG9uZyB6c3dhcF9zaHJpbmtlcl9jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxuLS1cbm1tL3pzd2FwLmMtMTIzOC1cdFx0bnJfYmFja2luZyA9IHpzd2FwX3RvdGFsX3BhZ2VzKCk7XG5tbS96c3dhcC5jOjEyMzk6XHRcdG5yX3N0b3JlZCA9IGF0b21pY19sb25nX3JlYWQoXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcbm1tL3pzd2FwLmMtMTI0MC1cdH1cbi0tXG5tbS96c3dhcC5jPTEzMjk9c3RhdGljIHZvaWQgc2hyaW5rX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXG4tLVxubW0venN3YXAuYy0xNDE5LVxubW0venN3YXAuYzoxNDIwOnN0YXRpYyBib29sIHpzd2FwX3N0b3JlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsXG5tbS96c3dhcC5jLTE0MjEtXHRcdFx0ICAgICBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csXG4tLVxubW0venN3YXAuYy0xNDY1LVx0ICogbm8gZnVydGhlciBwb3NzaWJpbGl0eSBvZiBmYWlsdXJlLiBHcmFiIHJlZnMgdG8gdGhlIHBvb2wgYW5kIG9iamNnLFxubW0venN3YXAuYzoxNDY2Olx0ICogY2hhcmdlIHpzd2FwIG1lbW9yeSwgYW5kIGluY3JlbWVudCB6c3dhcF9zdG9yZWRfcGFnZXMuXG5tbS96c3dhcC5jLTE0NjctXHQgKiBUaGUgb3Bwb3NpdGUgYWN0aW9ucyB3aWxsIGJlIHBlcmZvcm1lZCBieSB6c3dhcF9lbnRyeV9mcmVlKClcbi0tXG5tbS96c3dhcC5jLTE0NzQtXHR9XG5tbS96c3dhcC5jOjE0NzU6XHRhdG9taWNfbG9uZ19pbmMoXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcbm1tL3pzd2FwLmMtMTQ3Ni1cdGlmIChlbnRyeS1cdTAwM2VsZW5ndGggPT0gUEFHRV9TSVpFKVxubW0venN3YXAuYzoxNDc3Olx0XHRhdG9taWNfbG9uZ19pbmMoXHUwMDI2enN3YXBfc3RvcmVkX2luY29tcHJlc3NpYmxlX3BhZ2VzKTtcbm1tL3pzd2FwLmMtMTQ3OC1cbi0tXG5tbS96c3dhcC5jLTE1MDUtXG5tbS96c3dhcC5jOjE1MDY6Ym9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0venN3YXAuYy0xNTA3LXtcbi0tXG5tbS96c3dhcC5jLTE1NTAtXG5tbS96c3dhcC5jOjE1NTE6XHRcdGlmICghenN3YXBfc3RvcmVfcGFnZShwYWdlLCBvYmpjZywgcG9vbCkpXG5tbS96c3dhcC5jLTE1NTItXHRcdFx0Z290byBwdXRfcG9vbDtcbi0tXG5tbS96c3dhcC5jPTE3MzE9c3RhdGljIGludCBkZWJ1Z2ZzX2dldF9zdG9yZWRfcGFnZXModm9pZCAqZGF0YSwgdTY0ICp2YWwpXG5tbS96c3dhcC5jLTE3MzIte1xubW0venN3YXAuYzoxNzMzOlx0KnZhbCA9IGF0b21pY19sb25nX3JlYWQoXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcbm1tL3pzd2FwLmMtMTczNC1cdHJldHVybiAwO1xuLS1cbm1tL3pzd2FwLmM9MTczOD1zdGF0aWMgaW50IGRlYnVnZnNfZ2V0X3N0b3JlZF9pbmNvbXByZXNzaWJsZV9wYWdlcyh2b2lkICpkYXRhLCB1NjQgKnZhbClcbm1tL3pzd2FwLmMtMTczOS17XG5tbS96c3dhcC5jOjE3NDA6XHQqdmFsID0gYXRvbWljX2xvbmdfcmVhZChcdTAwMjZ6c3dhcF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXMpO1xubW0venN3YXAuYy0xNzQxLVx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjA6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzMDUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGl2aW5nIGludG8gdGhlIFpzd2FwIEltcGxlbWVudGF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBac3dhcCBpbnRlcm5hbHMsIHNvIGZpcnN0IHRoaW5ncyBmaXJzdDogdGhlIGZ1bmN0aW9ucyBpbiBgbW0venN3YXAuY2AgYXJlIHdoYXQgSSBuZWVkIHRvIGZvY3VzIG9uLiBJIHNlZSB3ZSBoYXZlIHRoZSBjb3JlIG9wZXJhdGlvbnM6IGB6c3dhcF9zdG9yZWAsIGB6c3dhcF9sb2FkYCwgYHpzd2FwX3N0b3JlX3BhZ2VgIGZvciBkYXRhIGhhbmRsaW5nLCBgenN3YXBfZW50cnlfZnJlZWAgZm9yIGhvdXNla2VlcGluZywgYW5kIGB6c3dhcF9kZWNvbXByZXNzYCBmb3Igb2J2aW91cyByZWFzb25zLiBUaGVuIHRoZXJlJiMzOTtzIHBvb2wgbWFuYWdlbWVudDogYHpzd2FwX3Bvb2xfY3JlYXRlYCwgYF9fenN3YXBfcG9vbF9yZWxlYXNlYCwgYF9fenN3YXBfcG9vbF9lbXB0eWAsIGB6c3dhcF9wb29sX2ZpbmRfZ2V0YC4gQW5kIG9mIGNvdXJzZSwgd2UgY2FuJiMzOTt0IGZvcmdldCB0aGUgY29tcHJlc3NvciBhbmQgdG90YWwgcGFnZXMgZnVuY3Rpb25hbGl0eSB3aXRoICBgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXRgLCBhbmQgYHpzd2FwX3RvdGFsX3BhZ2VzYCByZXNwZWN0aXZlbHkuCgpOb3csIHRoYXQgZ2l2ZXMgbWUgdGhlIGJhc2ljIHN0cnVjdHVyZSwgYnV0IEkgbmVlZCBhIG1vcmUgY29tcGxldGUgcGljdHVyZS4gSSBuZWVkIHRvIGJyb2FkZW4gdGhlIHNjb3BlIGEgYml0LiBXaGF0IG90aGVyIGZpbGVzLCBjb25maWcgb3B0aW9ucywgb3IgYW55IG90aGVyIGVsZW1lbnRzIGFyZSBpbnZvbHZlZD8gV2hhdCBvdGhlciBkZXBlbmRlbmNpZXMgYXJlIGludm9sdmVkPyBJJiMzOTttIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBrZXkgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IGB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldGAsIGB6c3dhcF9sb2FkYCwgYW5kIGxpa2VseSBvdGhlcnMsIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdywgdGhlIGNvbXByZXNzb3IgaW50ZWdyYXRpb24sIGFuZCBob3cgZXZlcnl0aGluZyB0aWVzIHRvZ2V0aGVyLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiBpdHMgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIGFuZCBhcmVhcyBmb3IgcG90ZW50aWFsIG9wdGltaXphdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjA6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtib29sIHpzd2FwX2xvYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS96c3dhcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjA6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4MzgKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0YXNrLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6CgoqKkRpZ2dpbmcgaW50byB6c3dhcC5jJiMzOTtzIEZ1bmN0aW9uIEhlYWRlcnMqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZnVuY3Rpb24gbGFuZHNjYXBlIGFyb3VuZCBgenN3YXBfbG9hZGAgYW5kIGB6c3dhcF9kZWNvbXByZXNzYCB3aXRoaW4gdGhlIGBtbS96c3dhcC5jYCBmaWxlLiBNeSBnb2FsIGhlcmUgaXMgbGlrZWx5IHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGRlY29tcHJlc3Npb24gcm91dGluZXMgaW50ZXJhY3Qgd2l0aCB0aGUgcmVzdCBvZiB0aGUgenN3YXAgYXJjaGl0ZWN0dXJlLiBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgdG8gc2VlIHdoYXQgY2FsbHMgdGhlbSwgd2hhdCB0aGV5IGNhbGwsIGFuZCBtYXliZSBldmVuIHRoZSBkYXRhIHN0cnVjdHVyZXMgdGhleSBvcGVyYXRlIG9uLgoKTXkgaW5pdGlhbCBhcHByb2FjaCBpcyBzdHJhaWdodGZvcndhcmQ6IEkmIzM5O2xsIHF1aWNrbHkgc2NhbiB0aGUgY29kZSB0byBpZGVudGlmeSBldmVyeSBmdW5jdGlvbiBoZWFkZXIgaW4gdGhhdCBhcmVhIG9mIHRoZSBmaWxlLiBObyBuZWVkIHRvIGdldCBib2dnZWQgZG93biBpbiB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBqdXN0IHlldDsgSSB3YW50IHRoZSBvdmVydmlldyBmaXJzdC4gSSYjMzk7bGwgbWVudGFsbHkgbm90ZSB0aGUgcGFyYW1ldGVyIGxpc3RzIG9mIGVhY2ggZnVuY3Rpb24gdG9vLCBhcyB0aGF0IHdpbGwgZ2l2ZSBtZSBjbHVlcyBhYm91dCBkYXRhIGZsb3cuIEkmIzM5O2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGZ1bmN0aW9uIHNpZ25hdHVyZXMgdGhhdCBoaW50IGF0IG1lbW9yeSBtYW5hZ2VtZW50LCBkYXRhIHRyYW5zZmVyLCBvciBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy4gRXNzZW50aWFsbHksIEkmIzM5O20gdHJ5aW5nIHRvIG1lbnRhbGx5IG1hcCBvdXQgdGhlIGZ1bmN0aW9uIGRlcGVuZGVuY2llcyBhbmQgaG93IHRoZXkgb3JjaGVzdHJhdGUgdGhlIHpzd2FwIGRlY29tcHJlc3Npb24gd29ya2Zsb3cuIFdpdGggdGhhdCBtYXAsIHRoZSBzdWJzZXF1ZW50IGRldGFpbHMgd2lsbCBzdGFydCB0byBmYWxsIGludG8gcGxhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIwOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15ib29sIHpzd2FwX3xeaW50IHpzd2FwX3xedm9pZCB6c3dhcF98XnN0YXRpYyAuKnpzd2FwXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3pzd2FwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0venN3YXAuYz00OD1hdG9taWNfbG9uZ190IHpzd2FwX3N0b3JlZF9wYWdlcyA9IEFUT01JQ19MT05HX0lOSVQoMCk7XG5tbS96c3dhcC5jLTQ5LS8qIFRoZSBudW1iZXIgb2YgaW5jb21wcmVzc2libGUgcGFnZXMgY3VycmVudGx5IHN0b3JlZCBpbiB6c3dhcCAqL1xubW0venN3YXAuYzo1MDpzdGF0aWMgYXRvbWljX2xvbmdfdCB6c3dhcF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXMgPSBBVE9NSUNfTE9OR19JTklUKDApO1xubW0venN3YXAuYy01MS1cbi0tXG5tbS96c3dhcC5jLTU5LS8qIFBvb2wgbGltaXQgd2FzIGhpdCAoc2VlIHpzd2FwX21heF9wb29sX3BlcmNlbnQpICovXG5tbS96c3dhcC5jOjYwOnN0YXRpYyB1NjQgenN3YXBfcG9vbF9saW1pdF9oaXQ7XG5tbS96c3dhcC5jLTYxLS8qIFBhZ2VzIHdyaXR0ZW4gYmFjayB3aGVuIHBvb2wgbGltaXQgd2FzIHJlYWNoZWQgKi9cbm1tL3pzd2FwLmM6NjI6c3RhdGljIHU2NCB6c3dhcF93cml0dGVuX2JhY2tfcGFnZXM7XG5tbS96c3dhcC5jLTYzLS8qIFN0b3JlIGZhaWxlZCBkdWUgdG8gYSByZWNsYWltIGZhaWx1cmUgYWZ0ZXIgcG9vbCBsaW1pdCB3YXMgcmVhY2hlZCAqL1xubW0venN3YXAuYzo2NDpzdGF0aWMgdTY0IHpzd2FwX3JlamVjdF9yZWNsYWltX2ZhaWw7XG5tbS96c3dhcC5jLTY1LS8qIFN0b3JlIGZhaWxlZCBkdWUgdG8gY29tcHJlc3Npb24gYWxnb3JpdGhtIGZhaWx1cmUgKi9cbm1tL3pzd2FwLmM6NjY6c3RhdGljIHU2NCB6c3dhcF9yZWplY3RfY29tcHJlc3NfZmFpbDtcbm1tL3pzd2FwLmMtNjctLyogQ29tcHJlc3NlZCBwYWdlIHdhcyB0b28gYmlnIGZvciB0aGUgYWxsb2NhdG9yIHRvIChvcHRpbWFsbHkpIHN0b3JlICovXG5tbS96c3dhcC5jOjY4OnN0YXRpYyB1NjQgenN3YXBfcmVqZWN0X2NvbXByZXNzX3Bvb3I7XG5tbS96c3dhcC5jLTY5LS8qIExvYWQgb3Igd3JpdGViYWNrIGZhaWxlZCBkdWUgdG8gZGVjb21wcmVzc2lvbiBmYWlsdXJlICovXG5tbS96c3dhcC5jOjcwOnN0YXRpYyB1NjQgenN3YXBfZGVjb21wcmVzc19mYWlsO1xubW0venN3YXAuYy03MS0vKiBTdG9yZSBmYWlsZWQgYmVjYXVzZSB1bmRlcmx5aW5nIGFsbG9jYXRvciBjb3VsZCBub3QgZ2V0IG1lbW9yeSAqL1xubW0venN3YXAuYzo3MjpzdGF0aWMgdTY0IHpzd2FwX3JlamVjdF9hbGxvY19mYWlsO1xubW0venN3YXAuYy03My0vKiBTdG9yZSBmYWlsZWQgYmVjYXVzZSB0aGUgZW50cnkgbWV0YWRhdGEgY291bGQgbm90IGJlIGFsbG9jYXRlZCAocmFyZSkgKi9cbm1tL3pzd2FwLmM6NzQ6c3RhdGljIHU2NCB6c3dhcF9yZWplY3Rfa21lbWNhY2hlX2ZhaWw7XG5tbS96c3dhcC5jLTc1LVxuLS1cbm1tL3pzd2FwLmM9Nzc9c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpzaHJpbmtfd3E7XG5tbS96c3dhcC5jLTc4LS8qIFBvb2wgbGltaXQgd2FzIGhpdCwgd2UgbmVlZCB0byBjYWxtIGRvd24gKi9cbm1tL3pzd2FwLmM6Nzk6c3RhdGljIGJvb2wgenN3YXBfcG9vbF9yZWFjaGVkX2Z1bGw7XG5tbS96c3dhcC5jLTgwLVxuLS1cbm1tL3pzd2FwLmMtODYtXG5tbS96c3dhcC5jOjg3OnN0YXRpYyBpbnQgenN3YXBfc2V0dXAodm9pZCk7XG5tbS96c3dhcC5jLTg4LVxubW0venN3YXAuYy04OS0vKiBFbmFibGUvZGlzYWJsZSB6c3dhcCAqL1xubW0venN3YXAuYzo5MDpzdGF0aWMgREVGSU5FX1NUQVRJQ19LRVlfTUFZQkUoQ09ORklHX1pTV0FQX0RFRkFVTFRfT04sIHpzd2FwX2V2ZXJfZW5hYmxlZCk7XG5tbS96c3dhcC5jOjkxOnN0YXRpYyBib29sIHpzd2FwX2VuYWJsZWQgPSBJU19FTkFCTEVEKENPTkZJR19aU1dBUF9ERUZBVUxUX09OKTtcbm1tL3pzd2FwLmM6OTI6c3RhdGljIGludCB6c3dhcF9lbmFibGVkX3BhcmFtX3NldChjb25zdCBjaGFyICosXG5tbS96c3dhcC5jLTkzLVx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqKTtcbm1tL3pzd2FwLmM6OTQ6c3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIHpzd2FwX2VuYWJsZWRfcGFyYW1fb3BzID0ge1xubW0venN3YXAuYy05NS1cdC5zZXQgPVx0XHR6c3dhcF9lbmFibGVkX3BhcmFtX3NldCxcbi0tXG5tbS96c3dhcC5jPTk4PW1vZHVsZV9wYXJhbV9jYihlbmFibGVkLCBcdTAwMjZ6c3dhcF9lbmFibGVkX3BhcmFtX29wcywgXHUwMDI2enN3YXBfZW5hYmxlZCwgMDY0NCk7XG4tLVxubW0venN3YXAuYy0xMDAtLyogQ3J5cHRvIGNvbXByZXNzb3IgdG8gdXNlICovXG5tbS96c3dhcC5jOjEwMTpzdGF0aWMgY2hhciAqenN3YXBfY29tcHJlc3NvciA9IENPTkZJR19aU1dBUF9DT01QUkVTU09SX0RFRkFVTFQ7XG5tbS96c3dhcC5jOjEwMjpzdGF0aWMgaW50IHpzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0KGNvbnN0IGNoYXIgKixcbm1tL3pzd2FwLmMtMTAzLVx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqKTtcbm1tL3pzd2FwLmM6MTA0OnN0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyB6c3dhcF9jb21wcmVzc29yX3BhcmFtX29wcyA9IHtcbm1tL3pzd2FwLmMtMTA1LVx0LnNldCA9XHRcdHpzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0LFxuLS1cbm1tL3pzd2FwLmM9MTA5PW1vZHVsZV9wYXJhbV9jYihjb21wcmVzc29yLCBcdTAwMjZ6c3dhcF9jb21wcmVzc29yX3BhcmFtX29wcyxcbi0tXG5tbS96c3dhcC5jLTExMi0vKiBUaGUgbWF4aW11bSBwZXJjZW50YWdlIG9mIG1lbW9yeSB0aGF0IHRoZSBjb21wcmVzc2VkIHBvb2wgY2FuIG9jY3VweSAqL1xubW0venN3YXAuYzoxMTM6c3RhdGljIHVuc2lnbmVkIGludCB6c3dhcF9tYXhfcG9vbF9wZXJjZW50ID0gMjA7XG5tbS96c3dhcC5jLTExNC1tb2R1bGVfcGFyYW1fbmFtZWQobWF4X3Bvb2xfcGVyY2VudCwgenN3YXBfbWF4X3Bvb2xfcGVyY2VudCwgdWludCwgMDY0NCk7XG4tLVxubW0venN3YXAuYy0xMTYtLyogVGhlIHRocmVzaG9sZCBmb3IgYWNjZXB0aW5nIG5ldyBwYWdlcyBhZnRlciB0aGUgbWF4X3Bvb2xfcGVyY2VudCB3YXMgaGl0ICovXG5tbS96c3dhcC5jOjExNzpzdGF0aWMgdW5zaWduZWQgaW50IHpzd2FwX2FjY2VwdF90aHJfcGVyY2VudCA9IDkwOyAvKiBvZiBtYXggcG9vbCBzaXplICovXG5tbS96c3dhcC5jLTExOC1tb2R1bGVfcGFyYW1fbmFtZWQoYWNjZXB0X3RocmVzaG9sZF9wZXJjZW50LCB6c3dhcF9hY2NlcHRfdGhyX3BlcmNlbnQsXG4tLVxubW0venN3YXAuYy0xMjEtLyogRW5hYmxlL2Rpc2FibGUgbWVtb3J5IHByZXNzdXJlLWJhc2VkIHNocmlua2VyLiAqL1xubW0venN3YXAuYzoxMjI6c3RhdGljIGJvb2wgenN3YXBfc2hyaW5rZXJfZW5hYmxlZCA9IElTX0VOQUJMRUQoXG5tbS96c3dhcC5jLTEyMy1cdFx0Q09ORklHX1pTV0FQX1NIUklOS0VSX0RFRkFVTFRfT04pO1xubW0venN3YXAuYz0xMjQ9bW9kdWxlX3BhcmFtX25hbWVkKHNocmlua2VyX2VuYWJsZWQsIHpzd2FwX3Nocmlua2VyX2VuYWJsZWQsIGJvb2wsIDA2NDQpO1xubW0venN3YXAuYy0xMjUtXG5tbS96c3dhcC5jOjEyNjpib29sIHpzd2FwX2lzX2VuYWJsZWQodm9pZClcbm1tL3pzd2FwLmMtMTI3LXtcbi0tXG5tbS96c3dhcC5jLTEzMC1cbm1tL3pzd2FwLmM6MTMxOmJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKVxubW0venN3YXAuYy0xMzIte1xuLS1cbm1tL3pzd2FwLmM9MTU0PXN0cnVjdCB6c3dhcF9wb29sIHtcbi0tXG5tbS96c3dhcC5jLTE3MS0jZGVmaW5lIFpTV0FQX01BWF9QT09MX0lEIFU4X01BWFxubW0venN3YXAuYzoxNzI6c3RhdGljIERFRklORV9YQVJSQVlfRkxBR1MoenN3YXBfcG9vbHMsIFhBX0ZMQUdTX0FMTE9DMSB8IFhBX0ZMQUdTX0xPQ0tfQkgpO1xubW0venN3YXAuYzoxNzM6c3RhdGljIHN0cnVjdCB6c3dhcF9wb29sIF9fcmN1ICp6c3dhcF9jdXJyZW50X3Bvb2w7XG5tbS96c3dhcC5jLTE3NC1cbm1tL3pzd2FwLmMtMTc1LS8qIEdsb2JhbCBMUlUgbGlzdHMgc2hhcmVkIGJ5IGFsbCB6c3dhcCBwb29scy4gKi9cbm1tL3pzd2FwLmM6MTc2OnN0YXRpYyBzdHJ1Y3QgbGlzdF9scnUgenN3YXBfbGlzdF9scnU7XG5tbS96c3dhcC5jLTE3Ny1cbm1tL3pzd2FwLmMtMTc4LS8qIFRoZSBsb2NrIHByb3RlY3RzIHpzd2FwX25leHRfc2hyaW5rIHVwZGF0ZXMuICovXG5tbS96c3dhcC5jOjE3OTpzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHpzd2FwX3Nocmlua19sb2NrKTtcbm1tL3pzd2FwLmM6MTgwOnN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqenN3YXBfbmV4dF9zaHJpbms7XG5tbS96c3dhcC5jOjE4MTpzdGF0aWMgc3RydWN0IHdvcmtfc3RydWN0IHpzd2FwX3Nocmlua193b3JrO1xubW0venN3YXAuYzoxODI6c3RhdGljIHN0cnVjdCBzaHJpbmtlciAqenN3YXBfc2hyaW5rZXI7XG5tbS96c3dhcC5jLTE4My1cbi0tXG5tbS96c3dhcC5jPTIwMj1zdHJ1Y3QgenN3YXBfZW50cnkge1xuLS1cbm1tL3pzd2FwLmMtMjE2LSAqL1xubW0venN3YXAuYzoyMTc6c3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9lbnRyeV9wb29sKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXG5tbS96c3dhcC5jLTIxOC17XG4tLVxubW0venN3YXAuYy0yMjEtXG5tbS96c3dhcC5jOjIyMjpzdGF0aWMgc3RydWN0IHhhcnJheSAqenN3YXBfdHJlZXNbTUFYX1NXQVBGSUxFU107XG5tbS96c3dhcC5jOjIyMzpzdGF0aWMgdW5zaWduZWQgaW50IG5yX3pzd2FwX3RyZWVzW01BWF9TV0FQRklMRVNdO1xubW0venN3YXAuYy0yMjQtXG5tbS96c3dhcC5jLTIyNS0vKiBwb29sIGNvdW50ZXIgdG8gcHJvdmlkZSB1bmlxdWUgbmFtZXMgdG8genNtYWxsb2MgKi9cbm1tL3pzd2FwLmM6MjI2OnN0YXRpYyBhdG9taWNfdCB6c3dhcF9wb29sc19jb3VudCA9IEFUT01JQ19JTklUKDApO1xubW0venN3YXAuYy0yMjctXG5tbS96c3dhcC5jPTIyOD1lbnVtIHpzd2FwX2luaXRfdHlwZSB7XG4tLVxubW0venN3YXAuYy0yMzMtXG5tbS96c3dhcC5jOjIzNDpzdGF0aWMgZW51bSB6c3dhcF9pbml0X3R5cGUgenN3YXBfaW5pdF9zdGF0ZTtcbm1tL3pzd2FwLmMtMjM1LVxubW0venN3YXAuYy0yMzYtLyogdXNlZCB0byBlbnN1cmUgdGhlIGludGVncml0eSBvZiBpbml0aWFsaXphdGlvbiAqL1xubW0venN3YXAuYzoyMzc6c3RhdGljIERFRklORV9NVVRFWCh6c3dhcF9pbml0X2xvY2spO1xubW0venN3YXAuYy0yMzgtXG5tbS96c3dhcC5jLTIzOS0vKiBpbml0IGNvbXBsZXRlZCwgYnV0IGNvdWxkbiYjMzk7dCBjcmVhdGUgdGhlIGluaXRpYWwgcG9vbCAqL1xubW0venN3YXAuYzoyNDA6c3RhdGljIGJvb2wgenN3YXBfaGFzX3Bvb2w7XG5tbS96c3dhcC5jLTI0MS1cbi0tXG5tbS96c3dhcC5jLTI0OC0jZGVmaW5lIFpTV0FQX0FERFJFU1NfU1BBQ0VfUEFHRVMgKDEgXHUwMDNjXHUwMDNjIFpTV0FQX0FERFJFU1NfU1BBQ0VfU0hJRlQpXG5tbS96c3dhcC5jOjI0OTpzdGF0aWMgaW5saW5lIHN0cnVjdCB4YXJyYXkgKnN3YXBfenN3YXBfdHJlZShzd3BfZW50cnlfdCBzd3ApXG5tbS96c3dhcC5jLTI1MC17XG4tLVxubW0venN3YXAuYy0yNjAtKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbm1tL3pzd2FwLmM6MjYxOnN0YXRpYyB2b2lkIF9fenN3YXBfcG9vbF9lbXB0eShzdHJ1Y3QgcGVyY3B1X3JlZiAqcmVmKTtcbm1tL3pzd2FwLmMtMjYyLVxubW0venN3YXAuYz0yNjM9c3RhdGljIHZvaWQgYWNvbXBfY3R4X2ZyZWUoc3RydWN0IGNyeXB0b19hY29tcF9jdHggKmFjb21wX2N0eClcbi0tXG5tbS96c3dhcC5jLTI5MC1cbm1tL3pzd2FwLmM6MjkxOnN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jcmVhdGUoY2hhciAqY29tcHJlc3Nvcilcbm1tL3pzd2FwLmMtMjkyLXtcbi0tXG5tbS96c3dhcC5jLTM3OS1cbm1tL3pzd2FwLmM6MzgwOnN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqX196c3dhcF9wb29sX2NyZWF0ZV9mYWxsYmFjayh2b2lkKVxubW0venN3YXAuYy0zODEte1xuLS1cbm1tL3pzd2FwLmMtMzk4LVxubW0venN3YXAuYzozOTk6c3RhdGljIHZvaWQgenN3YXBfcG9vbF9kZXN0cm95KHN0cnVjdCB6c3dhcF9wb29sICpwb29sKVxubW0venN3YXAuYy00MDAte1xuLS1cbm1tL3pzd2FwLmMtNDE1LVxubW0venN3YXAuYzo0MTY6c3RhdGljIHZvaWQgX196c3dhcF9wb29sX3JlbGVhc2Uoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxubW0venN3YXAuYy00MTcte1xuLS1cbm1tL3pzd2FwLmMtNDI4LVxubW0venN3YXAuYzo0Mjk6c3RhdGljIHZvaWQgX196c3dhcF9wb29sX2VtcHR5KHN0cnVjdCBwZXJjcHVfcmVmICpyZWYpXG5tbS96c3dhcC5jLTQzMC17XG4tLVxubW0venN3YXAuYy00NDItXG5tbS96c3dhcC5jOjQ0MzpzdGF0aWMgaW50IF9fbXVzdF9jaGVjayB6c3dhcF9wb29sX3RyeWdldChzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbClcbm1tL3pzd2FwLmMtNDQ0LXtcbi0tXG5tbS96c3dhcC5jLTQ1MS0vKiBUaGUgY2FsbGVyIG11c3QgYWxyZWFkeSBoYXZlIGEgcmVmZXJlbmNlLiAqL1xubW0venN3YXAuYzo0NTI6c3RhdGljIHZvaWQgenN3YXBfcG9vbF9nZXQoc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wpXG5tbS96c3dhcC5jLTQ1My17XG4tLVxubW0venN3YXAuYy00NTYtXG5tbS96c3dhcC5jOjQ1NzpzdGF0aWMgdm9pZCB6c3dhcF9wb29sX3B1dChzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbClcbm1tL3pzd2FwLmMtNDU4LXtcbi0tXG5tbS96c3dhcC5jLTQ2MS1cbm1tL3pzd2FwLmM6NDYyOnN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqX196c3dhcF9wb29sX2N1cnJlbnQodm9pZClcbm1tL3pzd2FwLmMtNDYzLXtcbi0tXG5tbS96c3dhcC5jLTQ3Mi1cbm1tL3pzd2FwLmM6NDczOnN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jdXJyZW50X2dldCh2b2lkKVxubW0venN3YXAuYy00NzQte1xuLS1cbm1tL3pzd2FwLmMtNDg4LS8qIGNvbXByZXNzb3IgbXVzdCBiZSBudWxsLXRlcm1pbmF0ZWQgKi9cbm1tL3pzd2FwLmM6NDg5OnN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9maW5kX2dldChjaGFyICpjb21wcmVzc29yKVxubW0venN3YXAuYy00OTAte1xuLS1cbm1tL3pzd2FwLmMtNTExLVxubW0venN3YXAuYzo1MTI6c3RhdGljIHVuc2lnbmVkIGxvbmcgenN3YXBfbWF4X3BhZ2VzKHZvaWQpXG5tbS96c3dhcC5jLTUxMy17XG4tLVxubW0venN3YXAuYy01MTYtXG5tbS96c3dhcC5jOjUxNzpzdGF0aWMgdW5zaWduZWQgbG9uZyB6c3dhcF9hY2NlcHRfdGhyX3BhZ2VzKHZvaWQpXG5tbS96c3dhcC5jLTUxOC17XG4tLVxubW0venN3YXAuYz01MjI9dW5zaWduZWQgbG9uZyB6c3dhcF90b3RhbF9wYWdlcyh2b2lkKVxuLS1cbm1tL3pzd2FwLmMtNTM5LVxubW0venN3YXAuYzo1NDA6c3RhdGljIGJvb2wgenN3YXBfY2hlY2tfbGltaXRzKHZvaWQpXG5tbS96c3dhcC5jLTU0MS17XG4tLVxubW0venN3YXAuYy01NTgtXG5tbS96c3dhcC5jOjU1OTpzdGF0aWMgaW50IHpzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0KGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG5tbS96c3dhcC5jLTU2MC17XG4tLVxubW0venN3YXAuYy02MzQtXG5tbS96c3dhcC5jOjYzNTpzdGF0aWMgaW50IHpzd2FwX2VuYWJsZWRfcGFyYW1fc2V0KGNvbnN0IGNoYXIgKnZhbCxcbm1tL3pzd2FwLmMtNjM2LVx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4tLVxubW0venN3YXAuYy02NjctXG5tbS96c3dhcC5jOjY2ODpzdGF0aWMgaW5saW5lIGludCBlbnRyeV90b19uaWQoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcbm1tL3pzd2FwLmMtNjY5LXtcbi0tXG5tbS96c3dhcC5jLTY3Mi1cbm1tL3pzd2FwLmM6NjczOnN0YXRpYyB2b2lkIHpzd2FwX2xydV9hZGQoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcbm1tL3pzd2FwLmMtNjc0LXtcbi0tXG5tbS96c3dhcC5jLTY5NS1cbm1tL3pzd2FwLmM6Njk2OnN0YXRpYyB2b2lkIHpzd2FwX2xydV9kZWwoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcbm1tL3pzd2FwLmMtNjk3LXtcbi0tXG5tbS96c3dhcC5jLTcwNy1cbm1tL3pzd2FwLmM6NzA4OnZvaWQgenN3YXBfbHJ1dmVjX3N0YXRlX2luaXQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxubW0venN3YXAuYy03MDkte1xuLS1cbm1tL3pzd2FwLmMtNzEyLVxubW0venN3YXAuYzo3MTM6dm9pZCB6c3dhcF9mb2xpb19zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL3pzd2FwLmMtNzE0LXtcbi0tXG5tbS96c3dhcC5jLTczNC0gKi9cbm1tL3pzd2FwLmM6NzM1OnZvaWQgenN3YXBfbWVtY2dfb2ZmbGluZV9jbGVhbnVwKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbm1tL3pzd2FwLmMtNzM2LXtcbi0tXG5tbS96c3dhcC5jLTc0OS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xubW0venN3YXAuYzo3NTA6c3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICp6c3dhcF9lbnRyeV9jYWNoZTtcbm1tL3pzd2FwLmMtNzUxLVxubW0venN3YXAuYzo3NTI6c3RhdGljIHN0cnVjdCB6c3dhcF9lbnRyeSAqenN3YXBfZW50cnlfY2FjaGVfYWxsb2MoZ2ZwX3QgZ2ZwLCBpbnQgbmlkKVxubW0venN3YXAuYy03NTMte1xuLS1cbm1tL3pzd2FwLmMtNzYwLVxubW0venN3YXAuYzo3NjE6c3RhdGljIHZvaWQgenN3YXBfZW50cnlfY2FjaGVfZnJlZShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxubW0venN3YXAuYy03NjIte1xuLS1cbm1tL3pzd2FwLmMtNzY5LSAqL1xubW0venN3YXAuYzo3NzA6c3RhdGljIHZvaWQgenN3YXBfZW50cnlfZnJlZShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxubW0venN3YXAuYy03NzEte1xuLS1cbm1tL3pzd2FwLmMtNzkxLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5tbS96c3dhcC5jOjc5MjpzdGF0aWMgaW50IHpzd2FwX2NwdV9jb21wX3ByZXBhcmUodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUpXG5tbS96c3dhcC5jLTc5My17XG4tLVxubW0venN3YXAuYy04NDgtXG5tbS96c3dhcC5jOjg0OTpzdGF0aWMgYm9vbCB6c3dhcF9jb21wcmVzcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbm1tL3pzd2FwLmMtODUwLVx0XHRcdCAgIHN0cnVjdCB6c3dhcF9wb29sICpwb29sKVxuLS1cbm1tL3pzd2FwLmMtOTMyLVxubW0venN3YXAuYzo5MzM6c3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0venN3YXAuYy05MzQte1xuLS1cbm1tL3pzd2FwLmMtOTk4LSAqL1xubW0venN3YXAuYzo5OTk6c3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbm1tL3pzd2FwLmMtMTAwMC1cdFx0XHRcdCBzd3BfZW50cnlfdCBzd3BlbnRyeSlcbi0tXG5tbS96c3dhcC5jPTExMDI9c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X29uZSAqbCxcbi0tXG5tbS96c3dhcC5jLTExODItXG5tbS96c3dhcC5jOjExODM6c3RhdGljIHVuc2lnbmVkIGxvbmcgenN3YXBfc2hyaW5rZXJfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxubW0venN3YXAuYy0xMTg0LVx0XHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3pzd2FwLmMtMTIwMy1cbm1tL3pzd2FwLmM6MTIwNDpzdGF0aWMgdW5zaWduZWQgbG9uZyB6c3dhcF9zaHJpbmtlcl9jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxubW0venN3YXAuYy0xMjA1LVx0XHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3pzd2FwLmMtMTI3NS1cbm1tL3pzd2FwLmM6MTI3NjpzdGF0aWMgc3RydWN0IHNocmlua2VyICp6c3dhcF9hbGxvY19zaHJpbmtlcih2b2lkKVxubW0venN3YXAuYy0xMjc3LXtcbi0tXG5tbS96c3dhcC5jPTEzMjk9c3RhdGljIHZvaWQgc2hyaW5rX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXG4tLVxubW0venN3YXAuYy0xNDE5LVxubW0venN3YXAuYzoxNDIwOnN0YXRpYyBib29sIHpzd2FwX3N0b3JlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsXG5tbS96c3dhcC5jLTE0MjEtXHRcdFx0ICAgICBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csXG4tLVxubW0venN3YXAuYy0xNTA1LVxubW0venN3YXAuYzoxNTA2OmJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL3pzd2FwLmMtMTUwNy17XG4tLVxubW0venN3YXAuYy0xNjExLSAqL1xubW0venN3YXAuYzoxNjEyOmludCB6c3dhcF9sb2FkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS96c3dhcC5jLTE2MTMte1xuLS1cbm1tL3pzd2FwLmMtMTY2NC1cbm1tL3pzd2FwLmM6MTY2NTp2b2lkIHpzd2FwX2ludmFsaWRhdGUoc3dwX2VudHJ5X3Qgc3dwKVxubW0venN3YXAuYy0xNjY2LXtcbi0tXG5tbS96c3dhcC5jLTE2NzgtXG5tbS96c3dhcC5jOjE2Nzk6aW50IHpzd2FwX3N3YXBvbihpbnQgdHlwZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbm1tL3pzd2FwLmMtMTY4MC17XG4tLVxubW0venN3YXAuYy0xNjk4LVxubW0venN3YXAuYzoxNjk5OnZvaWQgenN3YXBfc3dhcG9mZihpbnQgdHlwZSlcbm1tL3pzd2FwLmMtMTcwMC17XG4tLVxubW0venN3YXAuYy0xNzIxLVxubW0venN3YXAuYzoxNzIyOnN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp6c3dhcF9kZWJ1Z2ZzX3Jvb3Q7XG5tbS96c3dhcC5jLTE3MjMtXG4tLVxubW0venN3YXAuYz0xNzQzPURFRklORV9ERUJVR0ZTX0FUVFJJQlVURShzdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXNfZm9wcyxcbi0tXG5tbS96c3dhcC5jLTE3NDUtXG5tbS96c3dhcC5jOjE3NDY6c3RhdGljIGludCB6c3dhcF9kZWJ1Z2ZzX2luaXQodm9pZClcbm1tL3pzd2FwLmMtMTc0Ny17XG4tLVxubW0venN3YXAuYy0xNzc5LSNlbHNlXG5tbS96c3dhcC5jOjE3ODA6c3RhdGljIGludCB6c3dhcF9kZWJ1Z2ZzX2luaXQodm9pZClcbm1tL3pzd2FwLmMtMTc4MS17XG4tLVxubW0venN3YXAuYy0xNzg4LSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5tbS96c3dhcC5jOjE3ODk6c3RhdGljIGludCB6c3dhcF9zZXR1cCh2b2lkKVxubW0venN3YXAuYy0xNzkwLXtcbi0tXG5tbS96c3dhcC5jLTE4NTEtXG5tbS96c3dhcC5jOjE4NTI6c3RhdGljIGludCBfX2luaXQgenN3YXBfaW5pdCh2b2lkKVxubW0venN3YXAuYy0xODUzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjA6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyMTAKCQkJCQkJCW91dHB1dDogMjYxCgkJCQkJCQl0aG91Z2h0czogMzg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIHpzd2FwLmMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBzY2FuIG9mIGBtbS96c3dhcC5jYCBpZGVudGlmaWVzIHRoZSBjcnVjaWFsLCBub24tdWJpcXVpdG91cyBmdW5jdGlvbnMgdGhhdCBzZWVtIGNlbnRyYWwgdG8gdGhlIGNvcmUgZnVuY3Rpb25hbGl0eTogYHpzd2FwX3N0b3JlYCwgYHpzd2FwX2xvYWRgLCBgenN3YXBfc3RvcmVfcGFnZWAsIGB6c3dhcF9kZWNvbXByZXNzYCwgYHpzd2FwX2VudHJ5X2ZyZWVgLCBhbmQgdGhlIHBvb2wgbWFuYWdlbWVudCBmdW5jdGlvbnM6IGB6c3dhcF9wb29sX2NyZWF0ZWAsIGB6c3dhcF9wb29sX2ZpbmRfZ2V0YCwgYF9fenN3YXBfcG9vbF9lbXB0eWAsIGBfX3pzd2FwX3Bvb2xfcmVsZWFzZWAsIGFuZCBhbHNvIGB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldGAsIGFuZCBgenN3YXBfdG90YWxfcGFnZXNgLiBUaG9zZSBsb29rIGxpa2UgdGhlIGhvdHNwb3RzLgoKVGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBjbGVhcmx5IGBaU1dBUGAgYW5kIGBTV0FQYCDigJMgdGhvc2UgdHdvIGFyZSBlc3NlbnRpYWwgdG8gY29uc2lkZXIgZm9yIGZ1enppbmcgc2NvcGUuCgpOb3csIHRoZSBwYXRjaCYjMzk7cyBjb3JlIGlzIHRoZSByZWZhY3RvcmluZyBvZiB6c3dhcCBwb29sIGFuZCBlbnRyeSBsaWZlY3ljbGUgd2l0aGluIGBtbS96c3dhcC5jYC4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBzaWduaWZpY2FudCBvdmVyaGF1bDogc3dhcHBpbmcgdGhlIGxpbmtlZCBsaXN0IGZvciBhbiBJRC1iYXNlZCB4YXJyYXkgKGB6c3dhcF9wb29sc2ApLCBhbmQgcmVwbGFjaW5nIHRoZSBgcG9vbGAgcG9pbnRlciB3aXRoIGBwb29sX2lkeGAuIFRoYXQgbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB4YXJyYXkgbG9va3VwcyB1c2luZyBgeGFfbG9hZGAgYW5kIGB4YV9mb3JfZWFjaGAsIHNvZnRpcnEtc2FmZSBsb2NraW5nIHZpYSBgeGFfYWxsb2NfYmhgLCBgeGFfZXJhc2VfYmhgLCBhbmQgZGVsYXllZCBkZXN0cnVjdGlvbiB3aXRoIGByY3Vfd29ya2AuIFRoZXNlIGFyZSBjcml0aWNhbCBzeW5jaHJvbml6YXRpb24gYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZXMgd2l0aGluIHJlYWNoYWJsZSBNTSBjb2RlLiBUaGlzIHNjcmVhbXMgY29uY3VycmVuY3kgaXNzdWVzLgoKR2l2ZW4gdGhlIHNjb3BlIGFuZCBuYXR1cmUgb2YgdGhlIGNoYW5nZXMg4oCTIGVzcGVjaWFsbHkgdGhlIHNoaWZ0IHRvIHhhcnJheXMgYW5kIFJDVSDigJMgdGhlIHBvdGVudGlhbCBmb3IgY29uY3VycmVuY3kgcmFjZXMsIHN0YWxlIElEIGxvb2t1cHMsIGFuZCBhc3NlcnRpb24gZmFpbHVyZXMgaXMgaGlnaC4gVGh1cywgZnV6emluZyBpcyBkZWZpbml0ZWx5IHdhcnJhbnRlZCBoZXJlLgoKRmluYWxseSwgSSYjMzk7dmUgY2hlY2tlZCBhbGwgdGhlIGluc3RydWN0aW9ucyDigJMgdGhlIGBFbmFibGVDb25maWdzYCwgYEZvY3VzU3ltYm9sc2AsIGBXb3J0aEZ1enppbmdgLCBhbmQgYFJlYXNvbmluZ2Ag4oCTIGFsbCBhcmUgY2xlYXIgYW5kIG1ha2Ugc2Vuc2UuIFNlZW1zIHRoZSBzZXR1cCBpcyBjb3JyZWN0LiBOb3csIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIwOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaU1dBUCYjMzQ7LAogICAgJiMzNDtTV0FQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7enN3YXBfc3RvcmUmIzM0OywKICAgICYjMzQ7enN3YXBfbG9hZCYjMzQ7LAogICAgJiMzNDt6c3dhcF9zdG9yZV9wYWdlJiMzNDssCiAgICAmIzM0O3pzd2FwX2RlY29tcHJlc3MmIzM0OywKICAgICYjMzQ7enN3YXBfZW50cnlfZnJlZSYjMzQ7LAogICAgJiMzNDt6c3dhcF9wb29sX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDt6c3dhcF9wb29sX2ZpbmRfZ2V0JiMzNDssCiAgICAmIzM0O19fenN3YXBfcG9vbF9lbXB0eSYjMzQ7LAogICAgJiMzNDtfX3pzd2FwX3Bvb2xfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDt6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldCYjMzQ7LAogICAgJiMzNDt6c3dhcF90b3RhbF9wYWdlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGluIG1tL3pzd2FwLmMsIHJlZmFjdG9yaW5nIHBvb2wgYW5kIGVudHJ5IHRyYWNraW5nIGZyb20gYSBsaW5rZWQgbGlzdCBhbmQgcmF3IHBvb2wgcG9pbnRlciB0byBhbiBJRC1iYXNlZCBYQXJyYXkgd2l0aCA4LWJpdCBwb29sIGluZGljZXMgaW4gc3RydWN0IHpzd2FwX2VudHJ5LiBJdCBhbHNvIHVwZGF0ZXMgc3luY2hyb25pemF0aW9uIHNlbWFudGljcyB1c2luZyBSQ1UgYW5kIHJjdV93b3JrIChxdWV1ZV9yY3Vfd29yaykgYWxvbmcgd2l0aCBzb2Z0aXJxLXNhZmUgWEFycmF5IG9wZXJhdGlvbnMgKHhhX2FsbG9jX2JoLCB4YV9lcmFzZV9iaCkuIFRoZXNlIGNvbmN1cnJlbmN5IGFuZCBkYXRhIHN0cnVjdHVyZSBtb2RpZmljYXRpb25zIGluIHJlYWNoYWJsZSBNTSBjb2RlIHdhcnJhbnQgZnV6emluZyB0byBkZXRlY3QgcG9zc2libGUgcmFjZXMsIHN0YWxlIElEIGRlcmVmZXJlbmNlcywgb3IgYXNzZXJ0aW9uIHRyaXBzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaU1dBUCYjMzQ7LAogICAgJiMzNDtTV0FQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7enN3YXBfc3RvcmUmIzM0OywKICAgICYjMzQ7enN3YXBfbG9hZCYjMzQ7LAogICAgJiMzNDt6c3dhcF9zdG9yZV9wYWdlJiMzNDssCiAgICAmIzM0O3pzd2FwX2RlY29tcHJlc3MmIzM0OywKICAgICYjMzQ7enN3YXBfZW50cnlfZnJlZSYjMzQ7LAogICAgJiMzNDt6c3dhcF9wb29sX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDt6c3dhcF9wb29sX2ZpbmRfZ2V0JiMzNDssCiAgICAmIzM0O19fenN3YXBfcG9vbF9lbXB0eSYjMzQ7LAogICAgJiMzNDtfX3pzd2FwX3Bvb2xfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDt6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldCYjMzQ7LAogICAgJiMzNDt6c3dhcF90b3RhbF9wYWdlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGluIG1tL3pzd2FwLmMsIHJlZmFjdG9yaW5nIHBvb2wgYW5kIGVudHJ5IHRyYWNraW5nIGZyb20gYSBsaW5rZWQgbGlzdCBhbmQgcmF3IHBvb2wgcG9pbnRlciB0byBhbiBJRC1iYXNlZCBYQXJyYXkgd2l0aCA4LWJpdCBwb29sIGluZGljZXMgaW4gc3RydWN0IHpzd2FwX2VudHJ5LiBJdCBhbHNvIHVwZGF0ZXMgc3luY2hyb25pemF0aW9uIHNlbWFudGljcyB1c2luZyBSQ1UgYW5kIHJjdV93b3JrIChxdWV1ZV9yY3Vfd29yaykgYWxvbmcgd2l0aCBzb2Z0aXJxLXNhZmUgWEFycmF5IG9wZXJhdGlvbnMgKHhhX2FsbG9jX2JoLCB4YV9lcmFzZV9iaCkuIFRoZXNlIGNvbmN1cnJlbmN5IGFuZCBkYXRhIHN0cnVjdHVyZSBtb2RpZmljYXRpb25zIGluIHJlYWNoYWJsZSBNTSBjb2RlIHdhcnJhbnQgZnV6emluZyB0byBkZXRlY3QgcG9zc2libGUgcmFjZXMsIHN0YWxlIElEIGRlcmVmZXJlbmNlcywgb3IgYXNzZXJ0aW9uIHRyaXBzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMDoxODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIwOjE4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaW50ZXJuYWwgenN3YXAgcG9vbCBhbmQgZW50cnkgbWFuYWdlbWVudCBpbiBtbS96c3dhcC5jIGJ5IHJlcGxhY2luZyBhIGxpbmtlZCBsaXN0IG9mIHBvb2xzIHdpdGggYW4gWEFycmF5IChpbmRleGVkIGJ5IGEgdTggcG9vbF9pZHgpIGFuZCBzd2l0Y2hpbmcgcG9vbCBsb29rdXBzIHRvIHVzZSB4YV9sb2FkKCkuIEFsbCBhbGxvY2F0ZWQgc3RydWN0dXJlcyAoenN3YXBfcG9vbCBhbGxvY2F0ZWQgd2l0aCBremFsbG9jX29iaiwgYW5kIHpzd2FwX2VudHJ5IHdob3NlIGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBpbiB6c3dhcF9zdG9yZV9wYWdlKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gTm9uZSBvZiB0aGUgbW9kaWZpZWQgZGF0YSBzdHJ1Y3R1cmVzIG9yIGZpZWxkcyBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcyBhcmUgaW50cm9kdWNlZC4gQW55IHBvdGVudGlhbCBidWdzIHdvdWxkIGludm9sdmUgY29uY3VycmVuY3ksIGxpZmV0aW1lL3JlZmNvdW50aW5nLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcyByYXRoZXIgdGhhbiBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZmYzgyYmJkMGY0NTY1MGIzNjdmZjNiYTBmZDBkOTZiYmU5YTI0MTUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCA2IDIwOjE4OjI3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmMKaW5kZXggZjNhZTNjODFlNDhlYS4uMjUzZWViYjk3MWI5NyAxMDA2NDQKLS0tIGEvbW0venN3YXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS96c3dhcC5jCkBAIC0zNCw2ICYjNDM7MzQsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3dyaXRlYmFjay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BhZ2VtYXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC93b3JrcXVldWUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgveGFycmF5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbGlzdF9scnUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC96c21hbGxvYy5oJmd0OwogCkBAIC0xNTQsMTIgJiM0MzsxNTUsMjMgQEAgc3RydWN0IHpzd2FwX3Bvb2wgewogCXN0cnVjdCB6c19wb29sICp6c19wb29sOwogCXN0cnVjdCBjcnlwdG9fYWNvbXBfY3R4IF9fcGVyY3B1ICphY29tcF9jdHg7CiAJc3RydWN0IHBlcmNwdV9yZWYgcmVmOwotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVsZWFzZV93b3JrOwomIzQzOwlzdHJ1Y3QgcmN1X3dvcmsgcmVsZWFzZV9yd29yazsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSBub2RlOwomIzQzOwl1OCBpZHg7CiAJY2hhciB0Zm1fbmFtZVtDUllQVE9fTUFYX0FMR19OQU1FXTsKIH07CiAKJiM0MzsvKgomIzQzOyAqIExpdmUgcG9vbHMga2V5ZWQgYnkgaWQgKDEuLlpTV0FQX01BWF9QT09MX0lEKS4gIFhBX0ZMQUdTX0FMTE9DMSBrZWVwcyBpZCAwCiYjNDM7ICogcmVzZXJ2ZWQgc28gaXQgaXMgbmV2ZXIgaGFuZGVkIHRvIGEgbGl2ZSBwb29sLiAgWEFfRkxBR1NfTE9DS19CSCBtYWtlcyB0aGUKJiM0MzsgKiB4YV9sb2NrIHNvZnRpcnEtc2FmZTogaXQgaXMgdGFrZW4gZnJvbSBfX3pzd2FwX3Bvb2xfZW1wdHkoKSwgd2hpY2ggcnVucyBmcm9tCiYjNDM7ICogYSBwZXJjcHVfcmVmIHJlbGVhc2UgY2FsbGJhY2sgaW4gc29mdGlycSBjb250ZXh0LgomIzQzOyAqLwomIzQzOyNkZWZpbmUgWlNXQVBfRklSU1RfUE9PTF9JRCAxCiYjNDM7I2RlZmluZSBaU1dBUF9NQVhfUE9PTF9JRCBVOF9NQVgKJiM0MztzdGF0aWMgREVGSU5FX1hBUlJBWV9GTEFHUyh6c3dhcF9wb29scywgWEFfRkxBR1NfQUxMT0MxIHwgWEFfRkxBR1NfTE9DS19CSCk7CiYjNDM7c3RhdGljIHN0cnVjdCB6c3dhcF9wb29sIF9fcmN1ICp6c3dhcF9jdXJyZW50X3Bvb2w7CiYjNDM7CiAvKiBHbG9iYWwgTFJVIGxpc3RzIHNoYXJlZCBieSBhbGwgenN3YXAgcG9vbHMuICovCiBzdGF0aWMgc3RydWN0IGxpc3RfbHJ1IHpzd2FwX2xpc3RfbHJ1OwogCkBAIC0xODIsNyAmIzQzOzE5NCw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2hyaW5rZXIgKnpzd2FwX3Nocmlua2VyOwogICogICAgICAgICAgICAgIHdyaXRlYmFjayBsb2dpYy4gVGhlIGVudHJ5IGlzIG9ubHkgcmVjbGFpbWVkIGJ5IHRoZSB3cml0ZWJhY2sKICAqICAgICAgICAgICAgICBsb2dpYyBpZiByZWZlcmVuY2VkIGlzIHVuc2V0LiBTZWUgY29tbWVudHMgaW4gdGhlIHNocmlua2VyCiAgKiAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgY29udGV4dC4KLSAqIHBvb2wgLSB0aGUgenN3YXBfcG9vbCB0aGUgZW50cnkmIzM5O3MgZGF0YSBpcyBpbgomIzQzOyAqIHBvb2xfaWR4IC0gaWQgb2YgdGhlIHpzd2FwX3Bvb2wgdGhhdCB0aGUgZW50cnkmIzM5O3MgZGF0YSBpcyBpbi4KICAqIGhhbmRsZSAtIHpzbWFsbG9jIGFsbG9jYXRpb24gaGFuZGxlIHRoYXQgc3RvcmVzIHRoZSBjb21wcmVzc2VkIHBhZ2UgZGF0YQogICogb2JqY2cgLSB0aGUgb2JqX2Nncm91cCB0aGF0IHRoZSBjb21wcmVzc2VkIG1lbW9yeSBpcyBjaGFyZ2VkIHRvCiAgKiBscnUgLSBoYW5kbGUgdG8gdGhlIHBvb2wmIzM5O3MgbHJ1IHVzZWQgdG8gZXZpY3QgcGFnZXMuCkBAIC0xOTEsMTkgJiM0MzsyMDMsMjUgQEAgc3RydWN0IHpzd2FwX2VudHJ5IHsKIAlzd3BfZW50cnlfdCBzd3BlbnRyeTsKIAl1bnNpZ25lZCBpbnQgbGVuZ3RoOwogCWJvb2wgcmVmZXJlbmNlZDsKLQlzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDsKJiM0MzsJdTggcG9vbF9pZHg7CiAJdW5zaWduZWQgbG9uZyBoYW5kbGU7CiAJc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnOwogCXN0cnVjdCBsaXN0X2hlYWQgbHJ1OwogfTsKIAomIzQzOy8qCiYjNDM7ICogTm8gUkNVIHNlY3Rpb24gaXMgbmVlZGVkIGFyb3VuZCB0aGUgcmV0dXJuZWQgcG9pbnRlcjogYSBzdG9yZWQgZW50cnkgcGlucwomIzQzOyAqIGl0cyBwb29sIHZpYSBwZXJjcHVfcmVmICh0YWtlbiBpbiB6c3dhcF9zdG9yZV9wYWdlKCkpLCBzbyB0aGUgaWQgY2Fubm90IGJlCiYjNDM7ICogcmV1c2VkIHVuZGVyIHVzLiAgQ2FsbGVycyBXQVJOIGFuZCBoYW5kbGUgYSBOVUxMIGZyb20gYSBjb3JydXB0IHBvb2xfaWR4LgomIzQzOyAqLwomIzQzO3N0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfZW50cnlfcG9vbChzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KQomIzQzO3sKJiM0MzsJcmV0dXJuIHhhX2xvYWQoJmFtcDt6c3dhcF9wb29scywgZW50cnktJmd0O3Bvb2xfaWR4KTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IHhhcnJheSAqenN3YXBfdHJlZXNbTUFYX1NXQVBGSUxFU107CiBzdGF0aWMgdW5zaWduZWQgaW50IG5yX3pzd2FwX3RyZWVzW01BWF9TV0FQRklMRVNdOwogCi0vKiBSQ1UtcHJvdGVjdGVkIGl0ZXJhdGlvbiAqLwotc3RhdGljIExJU1RfSEVBRCh6c3dhcF9wb29scyk7Ci0vKiBwcm90ZWN0cyB6c3dhcF9wb29scyBsaXN0IG1vZGlmaWNhdGlvbiAqLwotc3RhdGljIERFRklORV9TUElOTE9DSyh6c3dhcF9wb29sc19sb2NrKTsKIC8qIHBvb2wgY291bnRlciB0byBwcm92aWRlIHVuaXF1ZSBuYW1lcyB0byB6c21hbGxvYyAqLwogc3RhdGljIGF0b21pY190IHpzd2FwX3Bvb2xzX2NvdW50ID0gQVRPTUlDX0lOSVQoMCk7CiAKQEAgLTI3NSw2ICYjNDM7MjkzLDcgQEAgc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2NyZWF0ZShjaGFyICpjb21wcmVzc29yKQogCXN0cnVjdCB6c3dhcF9wb29sICpwb29sOwogCWNoYXIgbmFtZVszOF07IC8qICYjMzk7enN3YXAmIzM5OyAmIzQzOyAzMiBjaGFyIChtYXgpIG51bSAmIzQzOyBcMCAqLwogCWludCByZXQsIGNwdTsKJiM0MzsJdTMyIGlkOwogCiAJaWYgKCF6c3dhcF9oYXNfcG9vbCAmYW1wOyZhbXA7ICFzdHJjbXAoY29tcHJlc3NvciwgWlNXQVBfUEFSQU1fVU5TRVQpKQogCQlyZXR1cm4gTlVMTDsKQEAgLTMyMCwxMiAmIzQzOzMzOSwyOSBAQCBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3JlYXRlKGNoYXIgKmNvbXByZXNzb3IpCiAJCQkgICAgICBQRVJDUFVfUkVGX0FMTE9XX1JFSU5JVCwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJldCkKIAkJZ290byByZWZfZmFpbDsKLQlJTklUX0xJU1RfSEVBRCgmYW1wO3Bvb2wtJmd0O2xpc3QpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBQdWJsaXNoIG9ubHkgYWZ0ZXIgdGhlIHBvb2wgaXMgZnVsbHkgYnVpbHQsIHNvIGxvY2tsZXNzIHdhbGtlcnMKJiM0MzsJICogbmV2ZXIgc2VlIGEgaGFsZi1pbml0aWFsaXplZCBwb29sLiAgVGhlIF9iaCB2YXJpYW50IHBhaXJzIHdpdGggdGhlCiYjNDM7CSAqIHNvZnRpcnEtY29udGV4dCB4YV9sb2NrIHRha2VuIGluIF9fenN3YXBfcG9vbF9lbXB0eSgpLgomIzQzOwkgKi8KJiM0MzsJcmV0ID0geGFfYWxsb2NfYmgoJmFtcDt6c3dhcF9wb29scywgJmFtcDtpZCwgcG9vbCwKJiM0MzsJCQkgIFhBX0xJTUlUKFpTV0FQX0ZJUlNUX1BPT0xfSUQsIFpTV0FQX01BWF9QT09MX0lEKSwKJiM0MzsJCQkgIEdGUF9LRVJORUwpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlpZiAocmV0ID09IC1FQlVTWSkKJiM0MzsJCQlwcl9lcnIoJiMzNDtjYW5ub3QgYWxsb2NhdGUgcG9vbCBpZCAobWF4ICVkIGxpdmUgcG9vbHMpXG4mIzM0OywKJiM0MzsJCQkgICAgICAgWlNXQVBfTUFYX1BPT0xfSUQgLSBaU1dBUF9GSVJTVF9QT09MX0lEICYjNDM7IDEpOwomIzQzOwkJZ290byB4YV9mYWlsOwomIzQzOwl9CiYjNDM7CXBvb2wtJmd0O2lkeCA9IGlkOwogCiAJenN3YXBfcG9vbF9kZWJ1ZygmIzM0O2NyZWF0ZWQmIzM0OywgcG9vbCk7CiAKIAlyZXR1cm4gcG9vbDsKIAomIzQzO3hhX2ZhaWw6CiYjNDM7CXBlcmNwdV9yZWZfZXhpdCgmYW1wO3Bvb2wtJmd0O3JlZik7CiByZWZfZmFpbDoKIAljcHVocF9zdGF0ZV9yZW1vdmVfaW5zdGFuY2UoQ1BVSFBfTU1fWlNXUF9QT09MX1BSRVBBUkUsICZhbXA7cG9vbC0mZ3Q7bm9kZSk7CiAKQEAgLTM3OSwzNyAmIzQzOzQxNSwyOSBAQCBzdGF0aWMgdm9pZCB6c3dhcF9wb29sX2Rlc3Ryb3koc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wpCiAKIHN0YXRpYyB2b2lkIF9fenN3YXBfcG9vbF9yZWxlYXNlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IGNvbnRhaW5lcl9vZih3b3JrLCB0eXBlb2YoKnBvb2wpLAotCQkJCQkJcmVsZWFzZV93b3JrKTsKLQotCXN5bmNocm9uaXplX3JjdSgpOwomIzQzOwlzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IGNvbnRhaW5lcl9vZih0b19yY3Vfd29yayh3b3JrKSwKJiM0MzsJCQkJCSAgICAgICB0eXBlb2YoKnBvb2wpLCByZWxlYXNlX3J3b3JrKTsKIAogCS8qIG5vYm9keSBzaG91bGQgaGF2ZSBiZWVuIGFibGUgdG8gZ2V0IGEgcmVmLi4uICovCiAJV0FSTl9PTighcGVyY3B1X3JlZl9pc196ZXJvKCZhbXA7cG9vbC0mZ3Q7cmVmKSk7CiAJcGVyY3B1X3JlZl9leGl0KCZhbXA7cG9vbC0mZ3Q7cmVmKTsKIAotCS8qIHBvb2wgaXMgbm93IG9mZiB6c3dhcF9wb29scyBsaXN0IGFuZCBoYXMgbm8gcmVmZXJlbmNlcy4gKi8KJiM0MzsJLyogVGhlIHBvb2wgaXMgbm8gbG9uZ2VyIGluIHpzd2FwX3Bvb2xzIGFuZCBoYXMgbm8gcmVmZXJlbmNlcy4gKi8KIAl6c3dhcF9wb29sX2Rlc3Ryb3kocG9vbCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jdXJyZW50KHZvaWQpOwotCiBzdGF0aWMgdm9pZCBfX3pzd2FwX3Bvb2xfZW1wdHkoc3RydWN0IHBlcmNwdV9yZWYgKnJlZikKIHsKIAlzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDsKIAogCXBvb2wgPSBjb250YWluZXJfb2YocmVmLCB0eXBlb2YoKnBvb2wpLCByZWYpOwogCi0Jc3Bpbl9sb2NrX2JoKCZhbXA7enN3YXBfcG9vbHNfbG9jayk7Ci0KLQlXQVJOX09OKHBvb2wgPT0genN3YXBfcG9vbF9jdXJyZW50KCkpOwomIzQzOwlXQVJOX09OKHBvb2wgPT0gcmN1X2FjY2Vzc19wb2ludGVyKHpzd2FwX2N1cnJlbnRfcG9vbCkpOwogCi0JbGlzdF9kZWxfcmN1KCZhbXA7cG9vbC0mZ3Q7bGlzdCk7CiYjNDM7CXhhX2VyYXNlX2JoKCZhbXA7enN3YXBfcG9vbHMsIHBvb2wtJmd0O2lkeCk7CiAKLQlJTklUX1dPUksoJmFtcDtwb29sLSZndDtyZWxlYXNlX3dvcmssIF9fenN3YXBfcG9vbF9yZWxlYXNlKTsKLQlzY2hlZHVsZV93b3JrKCZhbXA7cG9vbC0mZ3Q7cmVsZWFzZV93b3JrKTsKLQotCXNwaW5fdW5sb2NrX2JoKCZhbXA7enN3YXBfcG9vbHNfbG9jayk7CiYjNDM7CUlOSVRfUkNVX1dPUksoJmFtcDtwb29sLSZndDtyZWxlYXNlX3J3b3JrLCBfX3pzd2FwX3Bvb2xfcmVsZWFzZSk7CiYjNDM7CXF1ZXVlX3JjdV93b3JrKHN5c3RlbV9wZXJjcHVfd3EsICZhbXA7cG9vbC0mZ3Q7cmVsZWFzZV9yd29yayk7CiB9CiAKIHN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIHpzd2FwX3Bvb2xfdHJ5Z2V0KHN0cnVjdCB6c3dhcF9wb29sICpwb29sKQpAQCAtNDM1LDIwICYjNDM7NDYzLDEzIEBAIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqX196c3dhcF9wb29sX2N1cnJlbnQodm9pZCkKIHsKIAlzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDsKIAotCXBvb2wgPSBsaXN0X2ZpcnN0X29yX251bGxfcmN1KCZhbXA7enN3YXBfcG9vbHMsIHR5cGVvZigqcG9vbCksIGxpc3QpOwomIzQzOwlwb29sID0gcmN1X2RlcmVmZXJlbmNlKHpzd2FwX2N1cnJlbnRfcG9vbCk7CiAJV0FSTl9PTkNFKCFwb29sICZhbXA7JmFtcDsgenN3YXBfaGFzX3Bvb2wsCiAJCSAgJiMzNDslczogbm8gcGFnZSBzdG9yYWdlIHBvb2whXG4mIzM0OywgX19mdW5jX18pOwogCiAJcmV0dXJuIHBvb2w7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jdXJyZW50KHZvaWQpCi17Ci0JYXNzZXJ0X3NwaW5fbG9ja2VkKCZhbXA7enN3YXBfcG9vbHNfbG9jayk7Ci0KLQlyZXR1cm4gX196c3dhcF9wb29sX2N1cnJlbnQoKTsKLX0KLQogc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2N1cnJlbnRfZ2V0KHZvaWQpCiB7CiAJc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7CkBAIC00NjQsMjMgJiM0Mzs0ODUsMjggQEAgc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2N1cnJlbnRfZ2V0KHZvaWQpCiAJcmV0dXJuIHBvb2w7CiB9CiAKLS8qIHR5cGUgYW5kIGNvbXByZXNzb3IgbXVzdCBiZSBudWxsLXRlcm1pbmF0ZWQgKi8KJiM0MzsvKiBjb21wcmVzc29yIG11c3QgYmUgbnVsbC10ZXJtaW5hdGVkICovCiBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfZmluZF9nZXQoY2hhciAqY29tcHJlc3NvcikKIHsKIAlzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDsKJiM0MzsJdW5zaWduZWQgbG9uZyBpZDsKIAotCWFzc2VydF9zcGluX2xvY2tlZCgmYW1wO3pzd2FwX3Bvb2xzX2xvY2spOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9vbCwgJmFtcDt6c3dhcF9wb29scywgbGlzdCkgewomIzQzOwkvKgomIzQzOwkgKiBfX3pzd2FwX3Bvb2xfZW1wdHkoKSBjYW4gZXJhc2UgZnJvbSB6c3dhcF9wb29scyBpbiBzb2Z0aXJxIHdoaWxlIHdlCiYjNDM7CSAqIHdhbGsuICByY3VfcmVhZF9sb2NrKCkga2VlcHMgdGhlIHdhbGsgY29uc2lzdGVudCBhbmQgZWFjaCBwb29sIGFsaXZlCiYjNDM7CSAqIGFjcm9zcyB0cnlnZXQoKS4gIHhhX2Zvcl9lYWNoKCkmIzM5O3Mgb3duIFJDVSBkb2VzIG5vdCBzcGFuIHRoZSBsb29wIGJvZHkuCiYjNDM7CSAqLwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CXhhX2Zvcl9lYWNoKCZhbXA7enN3YXBfcG9vbHMsIGlkLCBwb29sKSB7CiAJCWlmIChzdHJjbXAocG9vbC0mZ3Q7dGZtX25hbWUsIGNvbXByZXNzb3IpKQogCQkJY29udGludWU7CiAJCS8qIGlmIHdlIGNhbiYjMzk7dCBnZXQgaXQsIGl0JiMzOTtzIGFib3V0IHRvIGJlIGRlc3Ryb3llZCAqLwotCQlpZiAoIXpzd2FwX3Bvb2xfdHJ5Z2V0KHBvb2wpKQotCQkJY29udGludWU7Ci0JCXJldHVybiBwb29sOwomIzQzOwkJaWYgKHpzd2FwX3Bvb2xfdHJ5Z2V0KHBvb2wpKQomIzQzOwkJCWJyZWFrOwogCX0KJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiAKLQlyZXR1cm4gTlVMTDsKJiM0MzsJcmV0dXJuIHBvb2w7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHpzd2FwX21heF9wYWdlcyh2b2lkKQpAQCAtNDk3LDkgJiM0Mzs1MjMsMTQgQEAgdW5zaWduZWQgbG9uZyB6c3dhcF90b3RhbF9wYWdlcyh2b2lkKQogewogCXN0cnVjdCB6c3dhcF9wb29sICpwb29sOwogCXVuc2lnbmVkIGxvbmcgdG90YWwgPSAwOwomIzQzOwl1bnNpZ25lZCBsb25nIGlkOwogCiYjNDM7CS8qCiYjNDM7CSAqIHJjdV9yZWFkX2xvY2soKSBrZWVwcyBlYWNoIHBvb2wgYWxpdmUgYWNyb3NzIHpzX2dldF90b3RhbF9wYWdlcygpLgomIzQzOwkgKiB4YV9mb3JfZWFjaCgpJiMzOTtzIG93biBSQ1UgZG9lcyBub3Qgc3BhbiB0aGUgbG9vcCBib2R5LgomIzQzOwkgKi8KIAlyY3VfcmVhZF9sb2NrKCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9vbCwgJmFtcDt6c3dhcF9wb29scywgbGlzdCkKJiM0MzsJeGFfZm9yX2VhY2goJmFtcDt6c3dhcF9wb29scywgaWQsIHBvb2wpCiAJCXRvdGFsICYjNDM7PSB6c19nZXRfdG90YWxfcGFnZXMocG9vbC0mZ3Q7enNfcG9vbCk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKQEAgLTU1NiwyMCAmIzQzOzU4NywxMyBAQCBzdGF0aWMgaW50IHpzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0KGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbQogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQlzcGluX2xvY2tfYmgoJmFtcDt6c3dhcF9wb29sc19sb2NrKTsKLQogCXBvb2wgPSB6c3dhcF9wb29sX2ZpbmRfZ2V0KHMpOwotCWlmIChwb29sKSB7CiYjNDM7CWlmICghcG9vbCkgewomIzQzOwkJcG9vbCA9IHpzd2FwX3Bvb2xfY3JlYXRlKHMpOwomIzQzOwl9IGVsc2UgewogCQl6c3dhcF9wb29sX2RlYnVnKCYjMzQ7dXNpbmcgZXhpc3RpbmcmIzM0OywgcG9vbCk7Ci0JCVdBUk5fT04ocG9vbCA9PSB6c3dhcF9wb29sX2N1cnJlbnQoKSk7Ci0JCWxpc3RfZGVsX3JjdSgmYW1wO3Bvb2wtJmd0O2xpc3QpOwotCX0KJiM0MzsJCVdBUk5fT04ocG9vbCA9PSByY3VfYWNjZXNzX3BvaW50ZXIoenN3YXBfY3VycmVudF9wb29sKSk7CiAKLQlzcGluX3VubG9ja19iaCgmYW1wO3pzd2FwX3Bvb2xzX2xvY2spOwotCi0JaWYgKCFwb29sKQotCQlwb29sID0genN3YXBfcG9vbF9jcmVhdGUocyk7Ci0JZWxzZSB7CiAJCS8qCiAJCSAqIFJlc3RvcmUgdGhlIGluaXRpYWwgcmVmIGRyb3BwZWQgYnkgcGVyY3B1X3JlZl9raWxsKCkKIAkJICogd2hlbiB0aGUgcG9vbCB3YXMgZGVjb21taXNzaW9uZWQgYW5kIHN3aXRjaCBpdCBhZ2FpbgpAQCAtNTg2LDI0ICYjNDM7NjEwLDE4IEBAIHN0YXRpYyBpbnQgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtCiAJZWxzZQogCQlyZXQgPSAtRUlOVkFMOwogCi0Jc3Bpbl9sb2NrX2JoKCZhbXA7enN3YXBfcG9vbHNfbG9jayk7Ci0KJiM0MzsJLyoKJiM0MzsJICogQ29tcHJlc3NvciBzd2l0Y2hlcyBhcmUgc2VyaWFsaXplZCBieSB0aGUga2VybmVsIHBhcmFtIGxvY2ssIHNvIHRoaXMKJiM0MzsJICogaXMgdGhlIG9ubHkgd3JpdGVyIG9mIHpzd2FwX2N1cnJlbnRfcG9vbDogbm8geGFfbG9jayBuZWVkZWQuCiYjNDM7CSAqLwogCWlmICghcmV0KSB7Ci0JCXB1dF9wb29sID0genN3YXBfcG9vbF9jdXJyZW50KCk7Ci0JCWxpc3RfYWRkX3JjdSgmYW1wO3Bvb2wtJmd0O2xpc3QsICZhbXA7enN3YXBfcG9vbHMpOwomIzQzOwkJcHV0X3Bvb2wgPSByY3VfYWNjZXNzX3BvaW50ZXIoenN3YXBfY3VycmVudF9wb29sKTsKJiM0MzsJCXJjdV9hc3NpZ25fcG9pbnRlcih6c3dhcF9jdXJyZW50X3Bvb2wsIHBvb2wpOwogCQl6c3dhcF9oYXNfcG9vbCA9IHRydWU7CiAJfSBlbHNlIGlmIChwb29sKSB7Ci0JCS8qCi0JCSAqIEFkZCB0aGUgcG9zc2libHkgcHJlLWV4aXN0aW5nIHBvb2wgdG8gdGhlIGVuZCBvZiB0aGUgcG9vbHMKLQkJICogbGlzdDsgaWYgaXQmIzM5O3MgbmV3IChhbmQgZW1wdHkpIHRoZW4gaXQmIzM5O2xsIGJlIHJlbW92ZWQgYW5kCi0JCSAqIGRlc3Ryb3llZCBieSB0aGUgcHV0IGFmdGVyIHdlIGRyb3AgdGhlIGxvY2sKLQkJICovCi0JCWxpc3RfYWRkX3RhaWxfcmN1KCZhbXA7cG9vbC0mZ3Q7bGlzdCwgJmFtcDt6c3dhcF9wb29scyk7CiAJCXB1dF9wb29sID0gcG9vbDsKIAl9CiAKLQlzcGluX3VubG9ja19iaCgmYW1wO3pzd2FwX3Bvb2xzX2xvY2spOwotCiAJLyoKIAkgKiBEcm9wIHRoZSByZWYgZnJvbSBlaXRoZXIgdGhlIG9sZCBjdXJyZW50IHBvb2wsCiAJICogb3IgdGhlIG5ldyBwb29sIHdlIGZhaWxlZCB0byBhZGQKQEAgLTc1MSw5ICYjNDM7NzY5LDEzIEBAIHN0YXRpYyB2b2lkIHpzd2FwX2VudHJ5X2NhY2hlX2ZyZWUoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSkKICAqLwogc3RhdGljIHZvaWQgenN3YXBfZW50cnlfZnJlZShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KQogewomIzQzOwlzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IHpzd2FwX2VudHJ5X3Bvb2woZW50cnkpOwomIzQzOwogCXpzd2FwX2xydV9kZWwoZW50cnkpOwotCXpzX2ZyZWUoZW50cnktJmd0O3Bvb2wtJmd0O3pzX3Bvb2wsIGVudHJ5LSZndDtoYW5kbGUpOwotCXpzd2FwX3Bvb2xfcHV0KGVudHJ5LSZndDtwb29sKTsKJiM0MzsJaWYgKCFXQVJOX09OX09OQ0UoIXBvb2wpKSB7CiYjNDM7CQl6c19mcmVlKHBvb2wtJmd0O3pzX3Bvb2wsIGVudHJ5LSZndDtoYW5kbGUpOwomIzQzOwkJenN3YXBfcG9vbF9wdXQocG9vbCk7CiYjNDM7CX0KIAlpZiAoZW50cnktJmd0O29iamNnKSB7CiAJCW9ial9jZ3JvdXBfdW5jaGFyZ2VfenN3YXAoZW50cnktJmd0O29iamNnLCBlbnRyeS0mZ3Q7bGVuZ3RoKTsKIAkJb2JqX2Nncm91cF9wdXQoZW50cnktJmd0O29iamNnKTsKQEAgLTkxMCwxMiAmIzQzOzkzMiwxNSBAQCBzdGF0aWMgYm9vbCB6c3dhcF9jb21wcmVzcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwKIAogc3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewotCXN0cnVjdCB6c3dhcF9wb29sICpwb29sID0gZW50cnktJmd0O3Bvb2w7CiYjNDM7CXN0cnVjdCB6c3dhcF9wb29sICpwb29sID0genN3YXBfZW50cnlfcG9vbChlbnRyeSk7CiAJc3RydWN0IHNjYXR0ZXJsaXN0IGlucHV0WzJdOyAvKiB6c21hbGxvYyByZXR1cm5zIGFuIFNHIGxpc3QgMS0yIGVudHJpZXMgKi8KIAlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgb3V0cHV0OwogCXN0cnVjdCBjcnlwdG9fYWNvbXBfY3R4ICphY29tcF9jdHg7CiAJaW50IHJldCA9IDAsIGRsZW47CiAKJiM0MzsJaWYgKFdBUk5fT05fT05DRSghcG9vbCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiAJYWNvbXBfY3R4ID0gcmF3X2NwdV9wdHIocG9vbC0mZ3Q7YWNvbXBfY3R4KTsKIAltdXRleF9sb2NrKCZhbXA7YWNvbXBfY3R4LSZndDttdXRleCk7CiAJenNfb2JqX3JlYWRfc2dfYmVnaW4ocG9vbC0mZ3Q7enNfcG9vbCwgZW50cnktJmd0O2hhbmRsZSwgaW5wdXQsIGVudHJ5LSZndDtsZW5ndGgpOwpAQCAtOTUxLDcgJiM0Mzs5NzYsNyBAQCBzdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJcHJfYWxlcnRfcmF0ZWxpbWl0ZWQoJiMzNDtEZWNvbXByZXNzaW9uIGVycm9yIGZyb20genN3YXAgKCVkOiVsdSAlcyAldS0mZ3Q7JWQpXG4mIzM0OywKIAkJCQkJCXN3cF90eXBlKGVudHJ5LSZndDtzd3BlbnRyeSksCiAJCQkJCQlzd3Bfb2Zmc2V0KGVudHJ5LSZndDtzd3BlbnRyeSksCi0JCQkJCQllbnRyeS0mZ3Q7cG9vbC0mZ3Q7dGZtX25hbWUsCiYjNDM7CQkJCQkJcG9vbC0mZ3Q7dGZtX25hbWUsCiAJCQkJCQllbnRyeS0mZ3Q7bGVuZ3RoLCBkbGVuKTsKIAlyZXR1cm4gZmFsc2U7CiB9CkBAIC0xNDA5LDYgJiM0MzsxNDM0LDEzIEBAIHN0YXRpYyBib29sIHpzd2FwX3N0b3JlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsCiAJaWYgKCF6c3dhcF9jb21wcmVzcyhwYWdlLCBlbnRyeSwgcG9vbCkpCiAJCWdvdG8gY29tcHJlc3NfZmFpbGVkOwogCiYjNDM7CS8qCiYjNDM7CSAqIFNldCBwb29sX2lkeCBiZWZvcmUgdGhlIHhhX3N0b3JlKCkgYmVsb3cgcHVibGlzaGVzIHRoZSBlbnRyeSwgb3IgYQomIzQzOwkgKiBjb25jdXJyZW50IHJlYWRlciBjb3VsZCByZXNvbHZlIGEgc3RhbGUgcG9vbF9pZHggbGVmdCBieSBzbGFiIHJldXNlCiYjNDM7CSAqIHRvIGFuIHVucmVsYXRlZCBsaXZlIHBvb2wuCiYjNDM7CSAqLwomIzQzOwllbnRyeS0mZ3Q7cG9vbF9pZHggPSBwb29sLSZndDtpZHg7CiYjNDM7CiAJb2xkID0geGFfc3RvcmUoc3dhcF96c3dhcF90cmVlKHBhZ2Vfc3dwZW50cnkpLAogCQkgICAgICAgc3dwX29mZnNldChwYWdlX3N3cGVudHJ5KSwKIAkJICAgICAgIGVudHJ5LCBHRlBfS0VSTkVMKTsKQEAgLTE0NTQsNyAmIzQzOzE0ODYsNiBAQCBzdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLAogCSAqICAgIFRoZSBwdWJsaXNoaW5nIG9yZGVyIG1hdHRlcnMgdG8gcHJldmVudCB3cml0ZWJhY2sgZnJvbSBzZWVpbmcKIAkgKiAgICBhbiBpbmNvaGVyZW50IGVudHJ5LgogCSAqLwotCWVudHJ5LSZndDtwb29sID0gcG9vbDsKIAllbnRyeS0mZ3Q7c3dwZW50cnkgPSBwYWdlX3N3cGVudHJ5OwogCWVudHJ5LSZndDtvYmpjZyA9IG9iamNnOwogCWVudHJ5LSZndDtyZWZlcmVuY2VkID0gdHJ1ZTsKQEAgLTE3OTAsNyAmIzQzOzE4MjEsNyBAQCBzdGF0aWMgaW50IHpzd2FwX3NldHVwKHZvaWQpCiAJcG9vbCA9IF9fenN3YXBfcG9vbF9jcmVhdGVfZmFsbGJhY2soKTsKIAlpZiAocG9vbCkgewogCQlwcl9pbmZvKCYjMzQ7bG9hZGVkIHVzaW5nIHBvb2wgJXNcbiYjMzQ7LCBwb29sLSZndDt0Zm1fbmFtZSk7Ci0JCWxpc3RfYWRkKCZhbXA7cG9vbC0mZ3Q7bGlzdCwgJmFtcDt6c3dhcF9wb29scyk7CiYjNDM7CQlyY3VfYXNzaWduX3BvaW50ZXIoenN3YXBfY3VycmVudF9wb29sLCBwb29sKTsKIAkJenN3YXBfaGFzX3Bvb2wgPSB0cnVlOwogCQlzdGF0aWNfYnJhbmNoX2VuYWJsZSgmYW1wO3pzd2FwX2V2ZXJfZW5hYmxlZCk7CiAJfSBlbHNlIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIwOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0MTAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBac3dhcCBQYXRjaDogTWVtb3J5IFNhZmV0eSBhbmQgQ29uY3VycmVuY3kgSW1wbGljYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIHJlZmFjdG9yaW5nIG9mIGB6c3dhcF9wb29sYCBtYW5hZ2VtZW50IGludHJvZHVjZXMgb3IgZXhhY2VyYmF0ZXMgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBzcGVjaWZpY2FsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgZGV0ZWN0YWJsZSBieSBLTVNBTi4gSSBhbHNvIG5lZWQgdG8gYXNzZXNzIGlmIHRoaXMgaXMgcHJpbWFyaWx5IGEgbWF0dGVyIG9mIGNvbmN1cnJlbmN5LCBsaWZlY3ljbGUgbWFuYWdlbWVudCwgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZXMgdGhhdCBtaWdodCB0cmlnZ2VyIEtBU0FOIG9yIExPQ0tERVAgY29uY2VybnMuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgY29kZSBjaGFuZ2VzLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIHJlcGxhY2luZyB0aGUgZXhpc3RpbmcgbGlua2VkIGxpc3QgYHpzd2FwX3Bvb2xzYCB3aXRoIGFuIFhBcnJheSBhbmQgdXNpbmcgYW4gUkNVIHBvaW50ZXIgZm9yIGB6c3dhcF9jdXJyZW50X3Bvb2xgLiBJbnRlcmVzdGluZy4gVGhleSYjMzk7cmUgYWxzbyBzd2FwcGluZyB0aGUgYGVudHJ5LSZndDtwb29sYCBwb2ludGVyIHdpdGhpbiB0aGUgYHpzd2FwX2VudHJ5YCBzdHJ1Y3R1cmUgd2l0aCBhIGB1OCBwb29sX2lkeGAsIGFjdGluZyBhcyBhbiBpbmRleCBpbnRvIHRoZSBgenN3YXBfcG9vbHNgIFhBcnJheS4gVGhpcyBpcyBmb2xsb3dlZCBieSB1c2luZyBgenN3YXBfZW50cnlfcG9vbChlbnRyeSlgIHRvIGxvb2sgdXAgdGhlIHBvb2wgdXNpbmcgYHhhX2xvYWRgLgoKTm93LCB0aGUgY3JpdGljYWwgcGFydDogSSBuZWVkIHRvIHRob3JvdWdobHkgZXhhbWluZSB0aGUgYWxsb2NhdGlvbiBhbmQgdXNhZ2Ugb2YgYHpzd2FwX2VudHJ5YC4gR2l2ZW4gdGhpcyBgcG9vbF9pZHhgIGFwcHJvYWNoLCBJIG5lZWQgdG8gZW5zdXJlIGl0JiMzOTtzIGluaXRpYWxpemVkIGNvcnJlY3RseSBhbmQgdGhhdCB0aGVyZSBhcmVuJiMzOTt0IGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGR1cmluZyBhY2Nlc3MuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb2RlIHNlY3Rpb25zIGluIGBtbS96c3dhcC5jYC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHpzd2FwX3Bvb2xfY3JlYXRlYCwgYF9fenN3YXBfcG9vbF9yZWxlYXNlYCwgYF9fenN3YXBfcG9vbF9lbXB0eWAsIGB6c3dhcF9wb29sX2ZpbmRfZ2V0YCwgYW5kIHRoZSBvdGhlciBmdW5jdGlvbnMgYXJlIGltcGFjdGVkIGJ5IHRoZXNlIGNoYW5nZXMuIFRoaXMgaGFzIHRoZSBwb3RlbnRpYWwgdG8gaW50cm9kdWNlIHN1YnRsZSBpc3N1ZXMgYXJvdW5kIHRoZSBsaWZlY3ljbGUgb2YgdGhlc2UgcG9vbHMsIGFuZCBJIG5lZWQgdG8gYmUgY2VydGFpbiB0aGF0IHRoZSBpbmRpY2VzIGFyZSBtYW5hZ2VkIHByb3Blcmx5LiBUaGlzIGlzIGNydWNpYWwgZm9yIGJvdGggY29ycmVjdG5lc3MgYW5kIHBlcmZvcm1hbmNlLiBGaW5hbGx5LCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2Ugb24gdGhlIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHJvdXRpbmVzIGxpa2UgYHpzd2FwX2RlY29tcHJlc3NgLCBgenN3YXBfc3RvcmVfcGFnZWAsIGFuZCB0aGUgc2V0dXAgcm91dGluZXMgc3VjaCBhcyBgenN3YXBfc2V0dXBgLiBUaGUgZ29hbCBoZXJlIGlzIHRvIG1ha2Ugc3VyZSBhbGwgbWVtb3J5IGFjY2Vzc2VzIGFyZSB2YWxpZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjA6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7enN3YXBfZW50cnlfY2FjaGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS96c3dhcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3pzd2FwLmM9NzM1PXZvaWQgenN3YXBfbWVtY2dfb2ZmbGluZV9jbGVhbnVwKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS96c3dhcC5jLTc0OS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xubW0venN3YXAuYzo3NTA6c3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICp6c3dhcF9lbnRyeV9jYWNoZTtcbm1tL3pzd2FwLmMtNzUxLVxubW0venN3YXAuYzo3NTI6c3RhdGljIHN0cnVjdCB6c3dhcF9lbnRyeSAqenN3YXBfZW50cnlfY2FjaGVfYWxsb2MoZ2ZwX3QgZ2ZwLCBpbnQgbmlkKVxubW0venN3YXAuYy03NTMte1xubW0venN3YXAuYy03NTQtXHRzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5O1xubW0venN3YXAuYzo3NTU6XHRlbnRyeSA9IGttZW1fY2FjaGVfYWxsb2Nfbm9kZSh6c3dhcF9lbnRyeV9jYWNoZSwgZ2ZwLCBuaWQpO1xubW0venN3YXAuYy03NTYtXHRpZiAoIWVudHJ5KVxuLS1cbm1tL3pzd2FwLmMtNzYwLVxubW0venN3YXAuYzo3NjE6c3RhdGljIHZvaWQgenN3YXBfZW50cnlfY2FjaGVfZnJlZShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxubW0venN3YXAuYy03NjIte1xubW0venN3YXAuYzo3NjM6XHRrbWVtX2NhY2hlX2ZyZWUoenN3YXBfZW50cnlfY2FjaGUsIGVudHJ5KTtcbm1tL3pzd2FwLmMtNzY0LX1cbi0tXG5tbS96c3dhcC5jPTc3MD1zdGF0aWMgdm9pZCB6c3dhcF9lbnRyeV9mcmVlKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXG4tLVxubW0venN3YXAuYy03ODQtXHRcdGF0b21pY19sb25nX2RlYyhcdTAwMjZ6c3dhcF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXMpO1xubW0venN3YXAuYzo3ODU6XHR6c3dhcF9lbnRyeV9jYWNoZV9mcmVlKGVudHJ5KTtcbm1tL3pzd2FwLmMtNzg2LVx0YXRvbWljX2xvbmdfZGVjKFx1MDAyNnpzd2FwX3N0b3JlZF9wYWdlcyk7XG4tLVxubW0venN3YXAuYz0xNDIwPXN0YXRpYyBib29sIHpzd2FwX3N0b3JlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxubW0venN3YXAuYy0xNDI3LVx0LyogYWxsb2NhdGUgZW50cnkgKi9cbm1tL3pzd2FwLmM6MTQyODpcdGVudHJ5ID0genN3YXBfZW50cnlfY2FjaGVfYWxsb2MoR0ZQX0tFUk5FTCwgcGFnZV90b19uaWQocGFnZSkpO1xubW0venN3YXAuYy0xNDI5LVx0aWYgKCFlbnRyeSkge1xuLS1cbm1tL3pzd2FwLmMtMTUwMS1jb21wcmVzc19mYWlsZWQ6XG5tbS96c3dhcC5jOjE1MDI6XHR6c3dhcF9lbnRyeV9jYWNoZV9mcmVlKGVudHJ5KTtcbm1tL3pzd2FwLmMtMTUwMy1cdHJldHVybiBmYWxzZTtcbi0tXG5tbS96c3dhcC5jPTE3ODk9c3RhdGljIGludCB6c3dhcF9zZXR1cCh2b2lkKVxuLS1cbm1tL3pzd2FwLmMtMTc5My1cbm1tL3pzd2FwLmM6MTc5NDpcdHpzd2FwX2VudHJ5X2NhY2hlID0gS01FTV9DQUNIRSh6c3dhcF9lbnRyeSwgMCk7XG5tbS96c3dhcC5jOjE3OTU6XHRpZiAoIXpzd2FwX2VudHJ5X2NhY2hlKSB7XG5tbS96c3dhcC5jLTE3OTYtXHRcdHByX2VycihcJiMzNDtlbnRyeSBjYWNoZSBjcmVhdGlvbiBmYWlsZWRcXG5cJiMzNDspO1xuLS1cbm1tL3pzd2FwLmMtMTg0My1ocF9mYWlsOlxubW0venN3YXAuYzoxODQ0Olx0a21lbV9jYWNoZV9kZXN0cm95KHpzd2FwX2VudHJ5X2NhY2hlKTtcbm1tL3pzd2FwLmMtMTg0NS1jYWNoZV9mYWlsOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMDoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTgzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIGNvZGUgaW52ZXN0aWdhdGlvbiwgdGhpbmtpbmcgdGhyb3VnaCBpdCBzdGVwLWJ5LXN0ZXA6CgoqKkFuYWx5emluZyBgenN3YXBfc3RvcmVfcGFnZWAgSW5pdGlhbGl6YXRpb24qKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aCBgenN3YXBfc3RvcmVfcGFnZWAuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoYXQgc3BlY2lmaWMgYmxvY2sgb2YgY29kZSwgcm91Z2hseSBsaW5lcyAxNDIwIHRvIDE1MDAuIE15IGdvYWwgaXMgdG8gbWFwIG91dCB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBtZXRpY3Vsb3VzbHkuIEkgd2FudCB0byBrbm93IGV4YWN0bHkgd2hpY2ggZGF0YSBmaWVsZHMgYXJlIGJlaW5nIHNldCB1cCwgYW5kIGp1c3QgYXMgY3JpdGljYWxseSwgd2hlbiBhbmQgaG93IHRoYXQgaW5pdGlhbGl6YXRpb24gb2NjdXJzLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBzZXF1ZW5jZSBvZiBldmVudHMgaGVyZS4gVW5kZXJzdGFuZGluZyB0aGUgb3JkZXIgaW4gd2hpY2ggdGhpbmdzIGFyZSBjb25maWd1cmVkIGlzIG9mdGVuIGtleSB0byBkZWJ1Z2dpbmcgb3IgbW9kaWZ5aW5nIHRoaXMga2luZCBvZiBjb2RlLiBBbnkgc3VidGxlIGRlcGVuZGVuY2llcyBvciBzaWRlIGVmZmVjdHMgaW4gdGhhdCBzZWN0aW9uIGFyZSBpbXBvcnRhbnQuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYW55IGhpZGRlbiBnb3RjaGFzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3pzd2FwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0MjA6XHRzdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxuMTQyMTpcdFx0XHRcdCAgICAgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxuMTQyMjpcdFx0XHRcdCAgICAgc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wpXG4xNDIzOlx0e1xuMTQyNDpcdFx0c3dwX2VudHJ5X3QgcGFnZV9zd3BlbnRyeSA9IHBhZ2Vfc3dhcF9lbnRyeShwYWdlKTtcbjE0MjU6XHRcdHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksICpvbGQ7XG4xNDI2Olx0XG4xNDI3Olx0XHQvKiBhbGxvY2F0ZSBlbnRyeSAqL1xuMTQyODpcdFx0ZW50cnkgPSB6c3dhcF9lbnRyeV9jYWNoZV9hbGxvYyhHRlBfS0VSTkVMLCBwYWdlX3RvX25pZChwYWdlKSk7XG4xNDI5Olx0XHRpZiAoIWVudHJ5KSB7XG4xNDMwOlx0XHRcdHpzd2FwX3JlamVjdF9rbWVtY2FjaGVfZmFpbCYjNDM7JiM0Mzs7XG4xNDMxOlx0XHRcdHJldHVybiBmYWxzZTtcbjE0MzI6XHRcdH1cbjE0MzM6XHRcbjE0MzQ6XHRcdGlmICghenN3YXBfY29tcHJlc3MocGFnZSwgZW50cnksIHBvb2wpKVxuMTQzNTpcdFx0XHRnb3RvIGNvbXByZXNzX2ZhaWxlZDtcbjE0MzY6XHRcbjE0Mzc6XHRcdC8qXG4xNDM4Olx0XHQgKiBTZXQgcG9vbF9pZHggYmVmb3JlIHRoZSB4YV9zdG9yZSgpIGJlbG93IHB1Ymxpc2hlcyB0aGUgZW50cnksIG9yIGFcbjE0Mzk6XHRcdCAqIGNvbmN1cnJlbnQgcmVhZGVyIGNvdWxkIHJlc29sdmUgYSBzdGFsZSBwb29sX2lkeCBsZWZ0IGJ5IHNsYWIgcmV1c2VcbjE0NDA6XHRcdCAqIHRvIGFuIHVucmVsYXRlZCBsaXZlIHBvb2wuXG4xNDQxOlx0XHQgKi9cbjE0NDI6XHRcdGVudHJ5LVx1MDAzZXBvb2xfaWR4ID0gcG9vbC1cdTAwM2VpZHg7XG4xNDQzOlx0XG4xNDQ0Olx0XHRvbGQgPSB4YV9zdG9yZShzd2FwX3pzd2FwX3RyZWUocGFnZV9zd3BlbnRyeSksXG4xNDQ1Olx0XHRcdCAgICAgICBzd3Bfb2Zmc2V0KHBhZ2Vfc3dwZW50cnkpLFxuMTQ0NjpcdFx0XHQgICAgICAgZW50cnksIEdGUF9LRVJORUwpO1xuMTQ0NzpcdFx0aWYgKHhhX2lzX2VycihvbGQpKSB7XG4xNDQ4Olx0XHRcdGludCBlcnIgPSB4YV9lcnIob2xkKTtcbjE0NDk6XHRcbjE0NTA6XHRcdFx0V0FSTl9PTkNFKGVyciAhPSAtRU5PTUVNLCBcJiMzNDt1bmV4cGVjdGVkIHhhcnJheSBlcnJvcjogJWRcXG5cJiMzNDssIGVycik7XG4xNDUxOlx0XHRcdHpzd2FwX3JlamVjdF9hbGxvY19mYWlsJiM0MzsmIzQzOztcbjE0NTI6XHRcdFx0Z290byBzdG9yZV9mYWlsZWQ7XG4xNDUzOlx0XHR9XG4xNDU0Olx0XG4xNDU1Olx0XHQvKlxuMTQ1NjpcdFx0ICogV2UgbWF5IGhhdmUgaGFkIGFuIGV4aXN0aW5nIGVudHJ5IHRoYXQgYmVjYW1lIHN0YWxlIHdoZW5cbjE0NTc6XHRcdCAqIHRoZSBmb2xpbyB3YXMgcmVkaXJ0aWVkIGFuZCBub3cgdGhlIG5ldyB2ZXJzaW9uIGlzIGJlaW5nXG4xNDU4Olx0XHQgKiBzd2FwcGVkIG91dC4gR2V0IHJpZCBvZiB0aGUgb2xkLlxuMTQ1OTpcdFx0ICovXG4xNDYwOlx0XHRpZiAob2xkKVxuMTQ2MTpcdFx0XHR6c3dhcF9lbnRyeV9mcmVlKG9sZCk7XG4xNDYyOlx0XG4xNDYzOlx0XHQvKlxuMTQ2NDpcdFx0ICogVGhlIGVudHJ5IGlzIHN1Y2Nlc3NmdWxseSBjb21wcmVzc2VkIGFuZCBzdG9yZWQgaW4gdGhlIHRyZWUsIHRoZXJlIGlzXG4xNDY1Olx0XHQgKiBubyBmdXJ0aGVyIHBvc3NpYmlsaXR5IG9mIGZhaWx1cmUuIEdyYWIgcmVmcyB0byB0aGUgcG9vbCBhbmQgb2JqY2csXG4xNDY2Olx0XHQgKiBjaGFyZ2UgenN3YXAgbWVtb3J5LCBhbmQgaW5jcmVtZW50IHpzd2FwX3N0b3JlZF9wYWdlcy5cbjE0Njc6XHRcdCAqIFRoZSBvcHBvc2l0ZSBhY3Rpb25zIHdpbGwgYmUgcGVyZm9ybWVkIGJ5IHpzd2FwX2VudHJ5X2ZyZWUoKVxuMTQ2ODpcdFx0ICogd2hlbiB0aGUgZW50cnkgaXMgcmVtb3ZlZCBmcm9tIHRoZSB0cmVlLlxuMTQ2OTpcdFx0ICovXG4xNDcwOlx0XHR6c3dhcF9wb29sX2dldChwb29sKTtcbjE0NzE6XHRcdGlmIChvYmpjZykge1xuMTQ3MjpcdFx0XHRvYmpfY2dyb3VwX2dldChvYmpjZyk7XG4xNDczOlx0XHRcdG9ial9jZ3JvdXBfY2hhcmdlX3pzd2FwKG9iamNnLCBlbnRyeS1cdTAwM2VsZW5ndGgpO1xuMTQ3NDpcdFx0fVxuMTQ3NTpcdFx0YXRvbWljX2xvbmdfaW5jKFx1MDAyNnpzd2FwX3N0b3JlZF9wYWdlcyk7XG4xNDc2Olx0XHRpZiAoZW50cnktXHUwMDNlbGVuZ3RoID09IFBBR0VfU0laRSlcbjE0Nzc6XHRcdFx0YXRvbWljX2xvbmdfaW5jKFx1MDAyNnpzd2FwX3N0b3JlZF9pbmNvbXByZXNzaWJsZV9wYWdlcyk7XG4xNDc4Olx0XG4xNDc5Olx0XHQvKlxuMTQ4MDpcdFx0ICogV2UgZmluaXNoIGluaXRpYWxpemluZyB0aGUgZW50cnkgd2hpbGUgaXQmIzM5O3MgYWxyZWFkeSBpbiB4YXJyYXkuXG4xNDgxOlx0XHQgKiBUaGlzIGlzIHNhZmUgYmVjYXVzZTpcbjE0ODI6XHRcdCAqXG4xNDgzOlx0XHQgKiAxLiBDb25jdXJyZW50IHN0b3JlcyBhbmQgaW52YWxpZGF0aW9ucyBhcmUgZXhjbHVkZWQgYnkgZm9saW8gbG9jay5cbjE0ODQ6XHRcdCAqXG4xNDg1Olx0XHQgKiAyLiBXcml0ZWJhY2sgaXMgZXhjbHVkZWQgYnkgdGhlIGVudHJ5IG5vdCBiZWluZyBvbiB0aGUgTFJVIHlldC5cbjE0ODY6XHRcdCAqICAgIFRoZSBwdWJsaXNoaW5nIG9yZGVyIG1hdHRlcnMgdG8gcHJldmVudCB3cml0ZWJhY2sgZnJvbSBzZWVpbmdcbjE0ODc6XHRcdCAqICAgIGFuIGluY29oZXJlbnQgZW50cnkuXG4xNDg4Olx0XHQgKi9cbjE0ODk6XHRcdGVudHJ5LVx1MDAzZXN3cGVudHJ5ID0gcGFnZV9zd3BlbnRyeTtcbjE0OTA6XHRcdGVudHJ5LVx1MDAzZW9iamNnID0gb2JqY2c7XG4xNDkxOlx0XHRlbnRyeS1cdTAwM2VyZWZlcmVuY2VkID0gdHJ1ZTtcbjE0OTI6XHRcdGlmIChlbnRyeS1cdTAwM2VsZW5ndGgpIHtcbjE0OTM6XHRcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZW50cnktXHUwMDNlbHJ1KTtcbjE0OTQ6XHRcdFx0enN3YXBfbHJ1X2FkZChlbnRyeSk7XG4xNDk1Olx0XHR9XG4xNDk2Olx0XG4xNDk3Olx0XHRyZXR1cm4gdHJ1ZTtcbjE0OTg6XHRcbjE0OTk6XHRzdG9yZV9mYWlsZWQ6XG4xNTAwOlx0XHR6c19mcmVlKHBvb2wtXHUwMDNlenNfcG9vbCwgZW50cnktXHUwMDNlaGFuZGxlKTtcbjE1MDE6XHRjb21wcmVzc19mYWlsZWQ6XG4xNTAyOlx0XHR6c3dhcF9lbnRyeV9jYWNoZV9mcmVlKGVudHJ5KTtcbjE1MDM6XHRcdHJldHVybiBmYWxzZTtcbjE1MDQ6XHR9XG4xNTA1Olx0XG4xNTA2Olx0Ym9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuMTUwNzpcdHtcbjE1MDg6XHRcdGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4xNTA5Olx0XHRzd3BfZW50cnlfdCBzd3AgPSBmb2xpby1cdTAwM2Vzd2FwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMDoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTc4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWnN3YXAgUG9vbCBJbmRleCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJbiB0aGUgYHpzd2FwX3N0b3JlX3BhZ2VgIGZ1bmN0aW9uLCBiZWZvcmUgdGhpcyBwYXRjaCwgd2Ugd2VyZSBzZXR0aW5nIHRoZSBgZW50cnktJmd0O2hhbmRsZWAgYW5kIGBlbnRyeS0mZ3Q7bGVuZ3RoYCB3aXRoaW4gYHpzd2FwX2NvbXByZXNzYC4gVGhlbiwgdGhlIGBlbnRyeS0mZ3Q7cG9vbGAgcG9pbnRlciB3YXMgYXNzaWduZWQgKmFmdGVyKiB0aGUgYHhhX3N0b3JlYCBjYWxsLCBzcGVjaWZpY2FsbHkgb24gbGluZSAxNDU3LiBUaGlzIHBhdGNoIGFsdGVycyB0aGF0IHNlcXVlbmNlLiBOb3csIHdlJiMzOTtyZSBzZXR0aW5nIGBlbnRyeS0mZ3Q7cG9vbF9pZHhgICh3aGljaCwgaW1wb3J0YW50bHksIGlzIGp1c3QgYSBgdThgIG5vdykgKmJlZm9yZSogdGhlIGB4YV9zdG9yZWAuIFRoZSBvdGhlciBmaWVsZHMsIGxpa2UgYGVudHJ5LSZndDtzd3BlbnRyeWAsIGBlbnRyeS0mZ3Q7b2JqY2dgLCBgZW50cnktJmd0O3JlZmVyZW5jZWRgLCBhbmQgYGVudHJ5LSZndDtscnVgLCByZW1haW4gaW5pdGlhbGl6ZWQgYXMgdGhleSB3ZXJlIGJlZm9yZS4gQW5kIG5vdywgdGhlIGB6c3dhcF9lbnRyeV9wb29sKGVudHJ5KWAgZnVuY3Rpb24gdXNlcyBgeGFfbG9hZCgmYW1wO3pzd2FwX3Bvb2xzLCBlbnRyeS0mZ3Q7cG9vbF9pZHgpYCB0byByZXRyaWV2ZSB0aGUgcG9vbC4KClRoZSBwcmltYXJ5IGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgbWVtb3J5IHNhZmV0eS4gV2UgbmVlZCB0byBjb25maXJtIHRoYXQgbm8gdXNlci1zcGFjZSBkYXRhIGlzIGV4cG9zZWQgb3IgdGhhdCB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBpbmFkdmVydGVudGx5IHJlYWQuIERvZXMgenN3YXAgaXRzZWxmIGNvcHkgYW55dGhpbmcgdG8gdXNlciBzcGFjZT8gTm8sIGl0IGNvbXByZXNzZXMgYW5kIGRlY29tcHJlc3NlcyBzd2FwIHBhZ2VzICp3aXRoaW4qIGtlcm5lbCBtZW1vcnkuIER1cmluZyBzd2FwLWluLCBgenN3YXBfbG9hZGAgZGVjb21wcmVzc2VzIHRoZSBjb21wcmVzc2VkIGRhdGEgYmFjayBpbnRvIHRoZSBmb2xpby9wYWdlLiBUaGF0JiMzOTtzIGdvb2QuCgpUaGUgc3dpdGNoIGZyb20gYSBmdWxsIHBvaW50ZXIgdG8gYW4gaW5kZXggKGB1OCBwb29sX2lkeGApIHNob3VsZCB0cmFuc2xhdGUgdG8gYSA3LWJ5dGUgc2F2aW5nIGluIHRoZSBgc3RydWN0IHpzd2FwX2VudHJ5YCBzdHJ1Y3R1cmUgKGZyb20gZWl0aGVyIDQ4IG9yIDU2IGJ5dGVzLCBkZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZSkuICBUaGF0JiMzOTtzIGEgbmljZSBsaXR0bGUgb3B0aW1pemF0aW9uLiAgQ3J1Y2lhbGx5LCBgc3RydWN0IHpzd2FwX3Bvb2xgIGlzIGludGVybmFsIHRvIHRoZSBrZXJuZWwsIGFuZCBzbyBpcyBgc3RydWN0IHpzd2FwX2VudHJ5YC4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgYHpzd2FwX3Bvb2xfY3JlYXRlYC4gIFNwZWNpZmljYWxseSBhdCB0aGUgYWxsb2NhdGlvbjoKYGBgYwoJcmV0ID0geGFfYWxsb2NfYmgoJmFtcDt6c3dhcF9wb29scywgJmFtcDtpZCwgcG9vbCwKCQkJICBYQV9MSU1JVChaU1dBUF9GSVJTVF9QT09MX0lELCBaU1dBUF9NQVhfUE9PTF9JRCksCgkJCSAgR0ZQX0tFUk5FTCk7CglpZiAocmV0KSB7Ci4uLgoJcG9vbC0mZ3Q7aWR4ID0gaWQ7CmBgYApIZXJlLCBgcG9vbGAgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jKHNpemVvZigqcG9vbCksIEdGUF9LRVJORUwpO2AuICBXZSBjYW4gdmVyaWZ5IHRoYXQgbGluZSAzMDUgc3BlY2lmaWNhbGx5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBpbmRleCBpcyBjb3JyZWN0bHkgYXNzaWduZWQgYXQgY3JlYXRpb24uIFRoaXMgbG9va3Mgc29saWQgaW4gdGhlIHByb3ZpZGVkIGNvZGUgc25pcHBldC4gSSYjMzk7bGwgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSBjb2RlIGFnYWluIGZvciBhbnkgaXNzdWVzIGFyb3VuZCBob3cgdGhlIHBvb2wgaW5kZXggaXMgYmVpbmcgdXNlZCwgYnV0IGl0IHNlZW1zIHNvdW5kIHNvIGZhci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjA6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS96c3dhcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyOTU6XHRcdGludCByZXQsIGNwdTtcbiAyOTY6XHRcdHUzMiBpZDtcbiAyOTc6XHRcbiAyOTg6XHRcdGlmICghenN3YXBfaGFzX3Bvb2wgXHUwMDI2XHUwMDI2ICFzdHJjbXAoY29tcHJlc3NvciwgWlNXQVBfUEFSQU1fVU5TRVQpKVxuIDI5OTpcdFx0XHRyZXR1cm4gTlVMTDtcbiAzMDA6XHRcbiAzMDE6XHRcdHBvb2wgPSBremFsbG9jX29iaigqcG9vbCk7XG4gMzAyOlx0XHRpZiAoIXBvb2wpXG4gMzAzOlx0XHRcdHJldHVybiBOVUxMO1xuIDMwNDpcdFxuIDMwNTpcdFx0LyogdW5pcXVlIG5hbWUgZm9yIGVhY2ggcG9vbCBzcGVjaWZpY2FsbHkgcmVxdWlyZWQgYnkgenNtYWxsb2MgKi9cbiAzMDY6XHRcdHNucHJpbnRmKG5hbWUsIDM4LCBcJiMzNDt6c3dhcCV4XCYjMzQ7LCBhdG9taWNfaW5jX3JldHVybihcdTAwMjZ6c3dhcF9wb29sc19jb3VudCkpO1xuIDMwNzpcdFx0cG9vbC1cdTAwM2V6c19wb29sID0genNfY3JlYXRlX3Bvb2wobmFtZSk7XG4gMzA4Olx0XHRpZiAoIXBvb2wtXHUwMDNlenNfcG9vbClcbiAzMDk6XHRcdFx0Z290byBlcnJvcjtcbiAzMTA6XHRcbiAzMTE6XHRcdHN0cnNjcHkocG9vbC1cdTAwM2V0Zm1fbmFtZSwgY29tcHJlc3Nvciwgc2l6ZW9mKHBvb2wtXHUwMDNldGZtX25hbWUpKTtcbiAzMTI6XHRcbiAzMTM6XHRcdC8qIE1hbnkgdGhpbmdzIHJlbHkgb24gdGhlIHplcm8taW5pdGlhbGl6YXRpb24uICovXG4gMzE0Olx0XHRwb29sLVx1MDAzZWFjb21wX2N0eCA9IGFsbG9jX3BlcmNwdV9nZnAoKnBvb2wtXHUwMDNlYWNvbXBfY3R4LFxuIDMxNTpcdFx0XHRcdFx0XHQgICBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7XG4gMzE2Olx0XHRpZiAoIXBvb2wtXHUwMDNlYWNvbXBfY3R4KSB7XG4gMzE3Olx0XHRcdHByX2VycihcJiMzNDtwZXJjcHUgYWxsb2MgZmFpbGVkXFxuXCYjMzQ7KTtcbiAzMTg6XHRcdFx0Z290byBlcnJvcjtcbiAzMTk6XHRcdH1cbiAzMjA6XHRcbiAzMjE6XHRcdC8qXG4gMzIyOlx0XHQgKiBUaGlzIGlzIHNlcmlhbGl6ZWQgYWdhaW5zdCBDUFUgaG90cGx1ZyBvcGVyYXRpb25zLiBIZW5jZSwgY29yZXNcbiAzMjM6XHRcdCAqIGNhbm5vdCBiZSBvZmZsaW5lZCB1bnRpbCB0aGlzIGZpbmlzaGVzLlxuIDMyNDpcdFx0ICovXG4gMzI1Olx0XHRyZXQgPSBjcHVocF9zdGF0ZV9hZGRfaW5zdGFuY2UoQ1BVSFBfTU1fWlNXUF9QT09MX1BSRVBBUkUsXG4gMzI2Olx0XHRcdFx0XHQgICAgICAgXHUwMDI2cG9vbC1cdTAwM2Vub2RlKTtcbiAzMjc6XHRcbiAzMjg6XHRcdC8qXG4gMzI5Olx0XHQgKiBjcHVocF9zdGF0ZV9hZGRfaW5zdGFuY2UoKSB3aWxsIG5vdCBjbGVhbnVwIG9uIGZhaWx1cmUgc2luY2VcbiAzMzA6XHRcdCAqIHdlIGRvbiYjMzk7dCByZWdpc3RlciBhIGhvdHVucGx1ZyBjYWxsYmFjay5cbiAzMzE6XHRcdCAqL1xuIDMzMjpcdFx0aWYgKHJldClcbiAzMzM6XHRcdFx0Z290byBjcHVocF9hZGRfZmFpbDtcbiAzMzQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjA6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyMDcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB6c3dhcF9lbnRyeSBhbmQgenN3YXBfcG9vbCBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBvZiB6c3dhcCwgc3BlY2lmaWNhbGx5IGhvdyBgenN3YXBfZW50cnlgIGFuZCBgenN3YXBfcG9vbGAgYXJlIGhhbmRsZWQuIEkgc2VlIHRoYXQgdGhlIGBwb29sYCB2YXJpYWJsZSBpcyBpbml0aWFsaXplZCB1c2luZyBga3phbGxvY19vYmooKnBvb2wpYCwgd2hpY2gsIGFzIEkgZXhwZWN0LCBhbGxvY2F0ZXMgdGhlIG1lbW9yeSBhbmQgaW1wb3J0YW50bHksIHplcm9lcyBhbGwgdGhlIGZpZWxkcy4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGVuc3VyaW5nIGEgY2xlYW4gc2xhdGUuIFRoZW4sIEkgbm90aWNlZCB0aGF0IGBlbnRyeS0mZ3Q7cG9vbF9pZHhgIGlzIGV4cGxpY2l0bHkgYXNzaWduZWQgYSB2YWx1ZSB3aXRoaW4gYHpzd2FwX3N0b3JlX3BhZ2VgLiBUaGlzIGlzIGtleTsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBpcyB0aGUgKm9ubHkqIHBsYWNlIGl0JiMzOTtzIHNldCBvciBpZiB0aGVyZSBhcmUgb3RoZXIgYXNzaWdubWVudHMgdG8gdGhpcyBjcnVjaWFsIGluZGV4LiBUaGlzIGlzIHdoZXJlIHRoaW5ncyBjb3VsZCBnbyB3cm9uZywgc28gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBvdGhlciBwb2ludHMgd2hlcmUgdGhlc2UgY3J1Y2lhbCBzdHJ1Y3R1cmVzIGFyZSBjcmVhdGVkIG9yIG1vZGlmaWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBjb2RlIGZsb3cgYW5kIG1lbW9yeSBpcyBtYW5hZ2VkIGNvbnNpc3RlbnRseSBhbmQgYXBwcm9wcmlhdGVseS4gVGltZSB0byB1c2UgbXkgZmF2b3JpdGUgdG9vbC4gSSYjMzk7bGwgbmVlZCB0byBkbyBhIHRob3JvdWdoIGdyZXAgZm9yIGB6c3dhcF9lbnRyeWAgYWNyb3NzIGBtbS96c3dhcC5jYCB0byBsb29rIGZvciBhbnkgb3RoZXIgaW5zdGFuY2VzLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBjb21wbGV0ZSBwaWN0dXJlLCBlbnN1cmluZyBJIGNhbiBjYXRjaCBhbnkgcG90ZW50aWFsIGlzc3VlcyBvciBpbmNvbnNpc3RlbmNpZXMgaW4gaW5pdGlhbGl6YXRpb24gb3IgbW9kaWZpY2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6c3dhcF9lbnRyeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3pzd2FwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0venN3YXAuYz0xNDA9c3RydWN0IGNyeXB0b19hY29tcF9jdHgge1xuLS1cbm1tL3pzd2FwLmMtMTUwLSAqIFRoZSBvbmx5IGNhc2Ugd2hlcmUgbHJ1X2xvY2sgaXMgbm90IGFjcXVpcmVkIHdoaWxlIGhvbGRpbmcgdHJlZS5sb2NrIGlzXG5tbS96c3dhcC5jOjE1MTogKiB3aGVuIGEgenN3YXBfZW50cnkgaXMgdGFrZW4gb2ZmIHRoZSBscnUgZm9yIHdyaXRlYmFjaywgaW4gdGhhdCBjYXNlIGl0XG5tbS96c3dhcC5jLTE1Mi0gKiBuZWVkcyB0byBiZSB2ZXJpZmllZCB0aGF0IGl0JiMzOTtzIHN0aWxsIHZhbGlkIGluIHRoZSB0cmVlLlxuLS1cbm1tL3pzd2FwLmM9MTgyPXN0YXRpYyBzdHJ1Y3Qgc2hyaW5rZXIgKnpzd2FwX3Nocmlua2VyO1xuLS1cbm1tL3pzd2FwLmMtMTg0LS8qXG5tbS96c3dhcC5jOjE4NTogKiBzdHJ1Y3QgenN3YXBfZW50cnlcbm1tL3pzd2FwLmMtMTg2LSAqXG4tLVxubW0venN3YXAuYy0yMDEtICovXG5tbS96c3dhcC5jOjIwMjpzdHJ1Y3QgenN3YXBfZW50cnkge1xubW0venN3YXAuYy0yMDMtXHRzd3BfZW50cnlfdCBzd3BlbnRyeTtcbi0tXG5tbS96c3dhcC5jLTIxNi0gKi9cbm1tL3pzd2FwLmM6MjE3OnN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfZW50cnlfcG9vbChzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxubW0venN3YXAuYy0yMTgte1xuLS1cbm1tL3pzd2FwLmM9NjM1PXN0YXRpYyBpbnQgenN3YXBfZW5hYmxlZF9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLFxuLS1cbm1tL3pzd2FwLmMtNjY3LVxubW0venN3YXAuYzo2Njg6c3RhdGljIGlubGluZSBpbnQgZW50cnlfdG9fbmlkKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXG5tbS96c3dhcC5jLTY2OS17XG4tLVxubW0venN3YXAuYy02NzItXG5tbS96c3dhcC5jOjY3MzpzdGF0aWMgdm9pZCB6c3dhcF9scnVfYWRkKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXG5tbS96c3dhcC5jLTY3NC17XG4tLVxubW0venN3YXAuYy02OTUtXG5tbS96c3dhcC5jOjY5NjpzdGF0aWMgdm9pZCB6c3dhcF9scnVfZGVsKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXG5tbS96c3dhcC5jLTY5Ny17XG4tLVxubW0venN3YXAuYz03MzU9dm9pZCB6c3dhcF9tZW1jZ19vZmZsaW5lX2NsZWFudXAoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL3pzd2FwLmMtNzQ5LSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5tbS96c3dhcC5jOjc1MDpzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnpzd2FwX2VudHJ5X2NhY2hlO1xubW0venN3YXAuYy03NTEtXG5tbS96c3dhcC5jOjc1MjpzdGF0aWMgc3RydWN0IHpzd2FwX2VudHJ5ICp6c3dhcF9lbnRyeV9jYWNoZV9hbGxvYyhnZnBfdCBnZnAsIGludCBuaWQpXG5tbS96c3dhcC5jLTc1My17XG5tbS96c3dhcC5jOjc1NDpcdHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnk7XG5tbS96c3dhcC5jOjc1NTpcdGVudHJ5ID0ga21lbV9jYWNoZV9hbGxvY19ub2RlKHpzd2FwX2VudHJ5X2NhY2hlLCBnZnAsIG5pZCk7XG5tbS96c3dhcC5jLTc1Ni1cdGlmICghZW50cnkpXG4tLVxubW0venN3YXAuYy03NjAtXG5tbS96c3dhcC5jOjc2MTpzdGF0aWMgdm9pZCB6c3dhcF9lbnRyeV9jYWNoZV9mcmVlKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXG5tbS96c3dhcC5jLTc2Mi17XG5tbS96c3dhcC5jOjc2MzpcdGttZW1fY2FjaGVfZnJlZSh6c3dhcF9lbnRyeV9jYWNoZSwgZW50cnkpO1xubW0venN3YXAuYy03NjQtfVxuLS1cbm1tL3pzd2FwLmMtNzY5LSAqL1xubW0venN3YXAuYzo3NzA6c3RhdGljIHZvaWQgenN3YXBfZW50cnlfZnJlZShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxubW0venN3YXAuYy03NzEte1xubW0venN3YXAuYzo3NzI6XHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IHpzd2FwX2VudHJ5X3Bvb2woZW50cnkpO1xubW0venN3YXAuYy03NzMtXG4tLVxubW0venN3YXAuYy03ODQtXHRcdGF0b21pY19sb25nX2RlYyhcdTAwMjZ6c3dhcF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXMpO1xubW0venN3YXAuYzo3ODU6XHR6c3dhcF9lbnRyeV9jYWNoZV9mcmVlKGVudHJ5KTtcbm1tL3pzd2FwLmMtNzg2LVx0YXRvbWljX2xvbmdfZGVjKFx1MDAyNnpzd2FwX3N0b3JlZF9wYWdlcyk7XG4tLVxubW0venN3YXAuYz03OTI9c3RhdGljIGludCB6c3dhcF9jcHVfY29tcF9wcmVwYXJlKHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCBobGlzdF9ub2RlICpub2RlKVxuLS1cbm1tL3pzd2FwLmMtODQ4LVxubW0venN3YXAuYzo4NDk6c3RhdGljIGJvb2wgenN3YXBfY29tcHJlc3Moc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG5tbS96c3dhcC5jLTg1MC1cdFx0XHQgICBzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbClcbi0tXG5tbS96c3dhcC5jLTkzMi1cbm1tL3pzd2FwLmM6OTMzOnN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL3pzd2FwLmMtOTM0LXtcbm1tL3pzd2FwLmM6OTM1Olx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSB6c3dhcF9lbnRyeV9wb29sKGVudHJ5KTtcbm1tL3pzd2FwLmMtOTM2LVx0c3RydWN0IHNjYXR0ZXJsaXN0IGlucHV0WzJdOyAvKiB6c21hbGxvYyByZXR1cm5zIGFuIFNHIGxpc3QgMS0yIGVudHJpZXMgKi9cbi0tXG5tbS96c3dhcC5jLTk5OC0gKi9cbm1tL3pzd2FwLmM6OTk5OnN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG5tbS96c3dhcC5jLTEwMDAtXHRcdFx0XHQgc3dwX2VudHJ5X3Qgc3dwZW50cnkpXG4tLVxubW0venN3YXAuYy0xMDU1LVxubW0venN3YXAuYzoxMDU2Olx0enN3YXBfZW50cnlfZnJlZShlbnRyeSk7XG5tbS96c3dhcC5jLTEwNTctXG4tLVxubW0venN3YXAuYz0xMTAyPXN0YXRpYyBlbnVtIGxydV9zdGF0dXMgc2hyaW5rX21lbWNnX2NiKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sIHN0cnVjdCBsaXN0X2xydV9vbmUgKmwsXG4tLVxubW0venN3YXAuYy0xMTA0LXtcbm1tL3pzd2FwLmM6MTEwNTpcdHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkgPSBjb250YWluZXJfb2YoaXRlbSwgc3RydWN0IHpzd2FwX2VudHJ5LCBscnUpO1xubW0venN3YXAuYy0xMTA2LVx0Ym9vbCAqZW5jb3VudGVyZWRfcGFnZV9pbl9zd2FwY2FjaGUgPSAoYm9vbCAqKWFyZztcbi0tXG5tbS96c3dhcC5jPTE0MjA9c3RhdGljIGJvb2wgenN3YXBfc3RvcmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5tbS96c3dhcC5jLTE0MjQtXHRzd3BfZW50cnlfdCBwYWdlX3N3cGVudHJ5ID0gcGFnZV9zd2FwX2VudHJ5KHBhZ2UpO1xubW0venN3YXAuYzoxNDI1Olx0c3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgKm9sZDtcbm1tL3pzd2FwLmMtMTQyNi1cbm1tL3pzd2FwLmMtMTQyNy1cdC8qIGFsbG9jYXRlIGVudHJ5ICovXG5tbS96c3dhcC5jOjE0Mjg6XHRlbnRyeSA9IHpzd2FwX2VudHJ5X2NhY2hlX2FsbG9jKEdGUF9LRVJORUwsIHBhZ2VfdG9fbmlkKHBhZ2UpKTtcbm1tL3pzd2FwLmMtMTQyOS1cdGlmICghZW50cnkpIHtcbi0tXG5tbS96c3dhcC5jLTE0NjAtXHRpZiAob2xkKVxubW0venN3YXAuYzoxNDYxOlx0XHR6c3dhcF9lbnRyeV9mcmVlKG9sZCk7XG5tbS96c3dhcC5jLTE0NjItXG4tLVxubW0venN3YXAuYy0xNDY2LVx0ICogY2hhcmdlIHpzd2FwIG1lbW9yeSwgYW5kIGluY3JlbWVudCB6c3dhcF9zdG9yZWRfcGFnZXMuXG5tbS96c3dhcC5jOjE0Njc6XHQgKiBUaGUgb3Bwb3NpdGUgYWN0aW9ucyB3aWxsIGJlIHBlcmZvcm1lZCBieSB6c3dhcF9lbnRyeV9mcmVlKClcbm1tL3pzd2FwLmMtMTQ2OC1cdCAqIHdoZW4gdGhlIGVudHJ5IGlzIHJlbW92ZWQgZnJvbSB0aGUgdHJlZS5cbi0tXG5tbS96c3dhcC5jLTE1MDEtY29tcHJlc3NfZmFpbGVkOlxubW0venN3YXAuYzoxNTAyOlx0enN3YXBfZW50cnlfY2FjaGVfZnJlZShlbnRyeSk7XG5tbS96c3dhcC5jLTE1MDMtXHRyZXR1cm4gZmFsc2U7XG4tLVxubW0venN3YXAuYz0xNTA2PWJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS96c3dhcC5jLTE1NzctXHRcdHBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3ApO1xubW0venN3YXAuYzoxNTc4Olx0XHRzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5O1xubW0venN3YXAuYy0xNTc5LVx0XHRzdHJ1Y3QgeGFycmF5ICp0cmVlO1xuLS1cbm1tL3pzd2FwLmMtMTU4NC1cdFx0XHRpZiAoZW50cnkpXG5tbS96c3dhcC5jOjE1ODU6XHRcdFx0XHR6c3dhcF9lbnRyeV9mcmVlKGVudHJ5KTtcbm1tL3pzd2FwLmMtMTU4Ni1cdFx0fVxuLS1cbm1tL3pzd2FwLmM9MTYxMj1pbnQgenN3YXBfbG9hZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3pzd2FwLmMtMTYxNi1cdHN0cnVjdCB4YXJyYXkgKnRyZWUgPSBzd2FwX3pzd2FwX3RyZWUoc3dwKTtcbm1tL3pzd2FwLmM6MTYxNzpcdHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnk7XG5tbS96c3dhcC5jLTE2MTgtXG4tLVxubW0venN3YXAuYy0xNjU4LVx0eGFfZXJhc2UodHJlZSwgb2Zmc2V0KTtcbm1tL3pzd2FwLmM6MTY1OTpcdHpzd2FwX2VudHJ5X2ZyZWUoZW50cnkpO1xubW0venN3YXAuYy0xNjYwLVxuLS1cbm1tL3pzd2FwLmM9MTY2NT12b2lkIHpzd2FwX2ludmFsaWRhdGUoc3dwX2VudHJ5X3Qgc3dwKVxuLS1cbm1tL3pzd2FwLmMtMTY2OC1cdHN0cnVjdCB4YXJyYXkgKnRyZWUgPSBzd2FwX3pzd2FwX3RyZWUoc3dwKTtcbm1tL3pzd2FwLmM6MTY2OTpcdHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnk7XG5tbS96c3dhcC5jLTE2NzAtXG4tLVxubW0venN3YXAuYy0xNjc1LVx0aWYgKGVudHJ5KVxubW0venN3YXAuYzoxNjc2Olx0XHR6c3dhcF9lbnRyeV9mcmVlKGVudHJ5KTtcbm1tL3pzd2FwLmMtMTY3Ny19XG4tLVxubW0venN3YXAuYz0xNzg5PXN0YXRpYyBpbnQgenN3YXBfc2V0dXAodm9pZClcbi0tXG5tbS96c3dhcC5jLTE3OTMtXG5tbS96c3dhcC5jOjE3OTQ6XHR6c3dhcF9lbnRyeV9jYWNoZSA9IEtNRU1fQ0FDSEUoenN3YXBfZW50cnksIDApO1xubW0venN3YXAuYzoxNzk1Olx0aWYgKCF6c3dhcF9lbnRyeV9jYWNoZSkge1xubW0venN3YXAuYy0xNzk2LVx0XHRwcl9lcnIoXCYjMzQ7ZW50cnkgY2FjaGUgY3JlYXRpb24gZmFpbGVkXFxuXCYjMzQ7KTtcbi0tXG5tbS96c3dhcC5jLTE4NDMtaHBfZmFpbDpcbm1tL3pzd2FwLmM6MTg0NDpcdGttZW1fY2FjaGVfZGVzdHJveSh6c3dhcF9lbnRyeV9jYWNoZSk7XG5tbS96c3dhcC5jLTE4NDUtY2FjaGVfZmFpbDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjA6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwODYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipDaGVja2luZyBNeSBBc3N1bXB0aW9ucyoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhpcyBvcHRpbWl6YXRpb24sIEkgbmVlZCB0byBtYWtlIHN1cmUgYSBmdW5kYW1lbnRhbCBjb25maWd1cmF0aW9uIGlzIHNldCBjb3JyZWN0bHkuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHZlcmlmeSB0aGUgY3VycmVudCBzZXR0aW5nIGZvciBgenN3YXBfY29tcHJlc3NgLiBUaGlzIGlzIGEgcHJldHR5IGJhc2ljIGJ1dCBjcnVjaWFsIHBhcmFtZXRlciwgYW5kIGl0IGNhbiBzYXZlIG1lIGEgbG90IG9mIGhlYWRhY2hlIGRvd24gdGhlIGxpbmUgaWYgaXQmIzM5O3Mgc2V0IHByb3Blcmx5IGZyb20gdGhlIGdldC1nby4gTm8gcG9pbnQgaW4gdHJvdWJsZXNob290aW5nIGNvbXBsZXggaW50ZXJhY3Rpb25zIGlmIHRoZSBiYXNpY3MgYXJlbiYjMzk7dCBpcm9uZWQgb3V0LiBKdXN0IGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIGVuc3VyZSB0aGUgZm91bmRhdGlvbnMgYXJlIHNvbGlkIGJlZm9yZSBwcm9jZWVkaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3pzd2FwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NDgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg0ODpcdFxuIDg0OTpcdHN0YXRpYyBib29sIHpzd2FwX2NvbXByZXNzKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuIDg1MDpcdFx0XHRcdCAgIHN0cnVjdCB6c3dhcF9wb29sICpwb29sKVxuIDg1MTpcdHtcbiA4NTI6XHRcdHN0cnVjdCBjcnlwdG9fYWNvbXBfY3R4ICphY29tcF9jdHg7XG4gODUzOlx0XHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgaW5wdXQsIG91dHB1dDtcbiA4NTQ6XHRcdGludCBjb21wX3JldCA9IDAsIGFsbG9jX3JldCA9IDA7XG4gODU1Olx0XHR1bnNpZ25lZCBpbnQgZGxlbiA9IFBBR0VfU0laRTtcbiA4NTY6XHRcdHVuc2lnbmVkIGxvbmcgaGFuZGxlO1xuIDg1NzpcdFx0Z2ZwX3QgZ2ZwO1xuIDg1ODpcdFx0dTggKmRzdDtcbiA4NTk6XHRcdGJvb2wgbWFwcGVkID0gZmFsc2U7XG4gODYwOlx0XG4gODYxOlx0XHRhY29tcF9jdHggPSByYXdfY3B1X3B0cihwb29sLVx1MDAzZWFjb21wX2N0eCk7XG4gODYyOlx0XHRtdXRleF9sb2NrKFx1MDAyNmFjb21wX2N0eC1cdTAwM2VtdXRleCk7XG4gODYzOlx0XG4gODY0Olx0XHRkc3QgPSBhY29tcF9jdHgtXHUwMDNlYnVmZmVyO1xuIDg2NTpcdFx0c2dfaW5pdF90YWJsZShcdTAwMjZpbnB1dCwgMSk7XG4gODY2Olx0XHRzZ19zZXRfcGFnZShcdTAwMjZpbnB1dCwgcGFnZSwgUEFHRV9TSVpFLCAwKTtcbiA4Njc6XHRcbiA4Njg6XHRcdHNnX2luaXRfb25lKFx1MDAyNm91dHB1dCwgZHN0LCBQQUdFX1NJWkUpO1xuIDg2OTpcdFx0YWNvbXBfcmVxdWVzdF9zZXRfcGFyYW1zKGFjb21wX2N0eC1cdTAwM2VyZXEsIFx1MDAyNmlucHV0LCBcdTAwMjZvdXRwdXQsIFBBR0VfU0laRSwgZGxlbik7XG4gODcwOlx0XG4gODcxOlx0XHQvKlxuIDg3MjpcdFx0ICogaXQgbWF5YmUgbG9va3MgYSBsaXR0bGUgYml0IHNpbGx5IHRoYXQgd2Ugc2VuZCBhbiBhc3luY2hyb25vdXMgcmVxdWVzdCxcbiA4NzM6XHRcdCAqIHRoZW4gd2FpdCBmb3IgaXRzIGNvbXBsZXRpb24gc3luY2hyb25vdXNseS4gVGhpcyBtYWtlcyB0aGUgcHJvY2VzcyBsb29rXG4gODc0Olx0XHQgKiBzeW5jaHJvbm91cyBpbiBmYWN0LlxuIDg3NTpcdFx0ICogVGhlb3JldGljYWxseSwgYWNvbXAgc3VwcG9ydHMgdXNlcnMgc2VuZCBtdWx0aXBsZSBhY29tcCByZXF1ZXN0cyBpbiBvbmVcbiA4NzY6XHRcdCAqIGFjb21wIGluc3RhbmNlLCB0aGVuIGdldCB0aG9zZSByZXF1ZXN0cyBkb25lIHNpbXVsdGFuZW91c2x5LiBidXQgaW4gdGhpc1xuIDg3NzpcdFx0ICogY2FzZSwgenN3YXAgYWN0dWFsbHkgZG9lcyBzdG9yZSBhbmQgbG9hZCBwYWdlIGJ5IHBhZ2UsIHRoZXJlIGlzIG5vXG4gODc4Olx0XHQgKiBleGlzdGluZyBtZXRob2QgdG8gc2VuZCB0aGUgc2Vjb25kIHBhZ2UgYmVmb3JlIHRoZSBmaXJzdCBwYWdlIGlzIGRvbmVcbiA4Nzk6XHRcdCAqIGluIG9uZSB0aHJlYWQgZG9pbmcgenN3YXAuXG4gODgwOlx0XHQgKiBidXQgaW4gZGlmZmVyZW50IHRocmVhZHMgcnVubmluZyBvbiBkaWZmZXJlbnQgY3B1LCB3ZSBoYXZlIGRpZmZlcmVudFxuIDg4MTpcdFx0ICogYWNvbXAgaW5zdGFuY2UsIHNvIG11bHRpcGxlIHRocmVhZHMgY2FuIGRvIChkZSljb21wcmVzc2lvbiBpbiBwYXJhbGxlbC5cbiA4ODI6XHRcdCAqL1xuIDg4MzpcdFx0Y29tcF9yZXQgPSBjcnlwdG9fd2FpdF9yZXEoY3J5cHRvX2Fjb21wX2NvbXByZXNzKGFjb21wX2N0eC1cdTAwM2VyZXEpLCBcdTAwMjZhY29tcF9jdHgtXHUwMDNld2FpdCk7XG4gODg0Olx0XHRkbGVuID0gYWNvbXBfY3R4LVx1MDAzZXJlcS1cdTAwM2VkbGVuO1xuIDg4NTpcdFxuIDg4NjpcdFx0LypcbiA4ODc6XHRcdCAqIElmIGEgcGFnZSBjYW5ub3QgYmUgY29tcHJlc3NlZCBpbnRvIGEgc2l6ZSBzbWFsbGVyIHRoYW4gUEFHRV9TSVpFLFxuIDg4ODpcdFx0ICogc2F2ZSB0aGUgY29udGVudCBhcyBpcyB3aXRob3V0IGEgY29tcHJlc3Npb24sIHRvIGtlZXAgdGhlIExSVSBvcmRlclxuIDg4OTpcdFx0ICogb2Ygd3JpdGViYWNrcy4gIElmIHdyaXRlYmFjayBpcyBkaXNhYmxlZCwgcmVqZWN0IHRoZSBwYWdlIHNpbmNlIGl0XG4gODkwOlx0XHQgKiBvbmx5IGFkZHMgbWV0YWRhdGEgb3ZlcmhlYWQuICBzd2FwX3dyaXRlb3V0KCkgd2lsbCBwdXQgdGhlIHBhZ2UgYmFja1xuIDg5MTpcdFx0ICogdG8gdGhlIGFjdGl2ZSBMUlUgbGlzdCBpbiB0aGUgY2FzZS5cbiA4OTI6XHRcdCAqL1xuIDg5MzpcdFx0aWYgKGNvbXBfcmV0IHx8ICFkbGVuIHx8IGRsZW4gXHUwMDNlPSBQQUdFX1NJWkUpIHtcbiA4OTQ6XHRcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDg5NTpcdFx0XHRpZiAoIW1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoXG4gODk2Olx0XHRcdFx0XHRcdGZvbGlvX21lbWNnKHBhZ2VfZm9saW8ocGFnZSkpKSkge1xuIDg5NzpcdFx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMDoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTEzOQoJCQkJCQkJb3V0cHV0OiAxODAKCQkJCQkJCXRob3VnaHRzOiA2MjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudDogTmVlZHNLTVNBTiA9IGZhbHNlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgYHpzd2FwX2NvbXByZXNzYCBzZXRzIHRoZSBgaGFuZGxlYCBhbmQgYGxlbmd0aGAgb2YgdGhlIGBlbnRyeWAuIFRoZW4sIGB6c3dhcF9zdG9yZV9wYWdlYCBwb3B1bGF0ZXMgdGhlIHJlc3Qgb2YgdGhlIGB6c3dhcF9lbnRyeWAgZmllbGRzOiBgcG9vbF9pZHhgLCBgc3dwZW50cnlgLCBgb2JqY2dgLCBgcmVmZXJlbmNlZGAsIGFuZCBpbml0aWFsaXplcyB0aGUgYGxydWAgbGlzdCBoZWFkIGJlZm9yZSBhZGRpbmcgaXQgdG8gdGhlIExSVS4gVGhpcyBpcyBhbGwgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHpzd2FwLiBDcnVjaWFsbHksIGFsbCB0aGUgZmllbGRzIHdpdGhpbiBgc3RydWN0IHpzd2FwX2VudHJ5YCBhcmUgKmV4cGxpY2l0bHkqIGluaXRpYWxpemVkIGJlZm9yZSBhbnkgcmVhZCBvcGVyYXRpb25zLiBOb3RoaW5nIGlzIGJlaW5nIGxlYWtlZCB0byB1c2Vyc3BhY2UuCgpUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGludm9sdmUgaW50ZXJuYWwgY2hhbmdlczogcmVwbGFjaW5nIGEgbGlua2VkIGxpc3Qgb2YgcG9vbHMgd2l0aCBhbiBYQXJyYXkgYW5kIGEgcG9vbCBpbmRleCwgYW5kIHR3ZWFraW5nIHRoZSBSQ1UgYW5kIGxvY2tpbmcgbWVjaGFuaXNtcyBhcm91bmQgYHpzd2FwX3Bvb2xgLgoKTm93LCBjb25zaWRlcmluZyBwb3RlbnRpYWwgYnVncywgdGhlIHByaW1hcnkgcmlza3MgYXBwZWFyIHRvIGJlIGNvbmN1cnJlbmN5IGlzc3VlcyAoUkNVLCBsb2NraW5nLCByZWZjb3VudGluZyksIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIHNjZW5hcmlvcyBpbiB0aGUgcG9vbCBvciBlbnRyeSBsaWZlY3ljbGUsIGFuZCBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciB1bmV4cGVjdGVkIHJldHVybnMgZnJvbSBgeGFfbG9hZGAuIFRoZXNlIGFyZSBwcmVjaXNlbHkgdGhlIHR5cGVzIG9mIGlzc3VlcyB0aGF0IEtBU0FOLCBMT0NLREVQLCBhbmQgZ2VuZXJhbCBrZXJuZWwgYnVnIGRldGVjdG9ycyBhcmUgZGVzaWduZWQgdG8gY2F0Y2guCgpUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIG5vIHN0cnVjdHVyZSBsZWFrcyB0byB1c2Vyc3BhY2UsIGFuZCBubyBjb25jZXJucyBhcm91bmQgdW5pbml0aWFsaXplZCBwYWRkaW5nLgoKSSYjMzk7bSBkb3VibGUtY2hlY2tpbmcgYWdhaW5zdCB0aGUgS01TQU4gY3JpdGVyaWEsIGFuZCBpdCBhbGwgY2hlY2tzIG91dDoKCjEuICBObyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHByb2JsZW1hdGljLgoyLiAgVGhlcmUmIzM5O3Mgbm8gY29uZGl0aW9uYWwgbG9naWMgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMuCjMuICBUaGUgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gb2YgZGF0YSBzdHJ1Y3R1cmVzIGFyZSB0aG9yb3VnaCwgcHJldmVudGluZyB1bmluaXRpYWxpemVkIGZpZWxkcyBmcm9tIGJlaW5nIHJlYWQgbGF0ZXIuCjQuICBObyBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbnRyb2R1Y2VzIGFueSByaXNrIG9mIGFjY2Vzc2luZyB1bmluaXRpYWxpemVkIGJ5dGVzIGluIGV4aXN0aW5nIGJ1ZmZlcnMuCgpUaGlzIGlzIGFsbCBjb25zaXN0ZW50IHdpdGggYE5lZWRzS01TQU49ZmFsc2VgLiBMZXQmIzM5O3MgZm9ybXVsYXRlIHRoZSByZXNwb25zZSBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBpbnRlcm5hbCB6c3dhcCBwb29sIGFuZCBlbnRyeSBtYW5hZ2VtZW50IGluIG1tL3pzd2FwLmMgYnkgcmVwbGFjaW5nIGEgbGlua2VkIGxpc3Qgb2YgcG9vbHMgd2l0aCBhbiBYQXJyYXkgKGluZGV4ZWQgYnkgYSB1OCBwb29sX2lkeCkgYW5kIHN3aXRjaGluZyBwb29sIGxvb2t1cHMgdG8gdXNlIHhhX2xvYWQoKS4gQWxsIGFsbG9jYXRlZCBzdHJ1Y3R1cmVzICh6c3dhcF9wb29sIGFsbG9jYXRlZCB3aXRoIGt6YWxsb2Nfb2JqLCBhbmQgenN3YXBfZW50cnkgd2hvc2UgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluIHpzd2FwX3N0b3JlX3BhZ2UpIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBOb25lIG9mIHRoZSBtb2RpZmllZCBkYXRhIHN0cnVjdHVyZXMgb3IgZmllbGRzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3Mgd291bGQgaW52b2x2ZSBjb25jdXJyZW5jeSwgbGlmZXRpbWUvcmVmY291bnRpbmcsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzIHJhdGhlciB0aGFuIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaW50ZXJuYWwgenN3YXAgcG9vbCBhbmQgZW50cnkgbWFuYWdlbWVudCBpbiBtbS96c3dhcC5jIGJ5IHJlcGxhY2luZyBhIGxpbmtlZCBsaXN0IG9mIHBvb2xzIHdpdGggYW4gWEFycmF5IChpbmRleGVkIGJ5IGEgdTggcG9vbF9pZHgpIGFuZCBzd2l0Y2hpbmcgcG9vbCBsb29rdXBzIHRvIHVzZSB4YV9sb2FkKCkuIEFsbCBhbGxvY2F0ZWQgc3RydWN0dXJlcyAoenN3YXBfcG9vbCBhbGxvY2F0ZWQgd2l0aCBremFsbG9jX29iaiwgYW5kIHpzd2FwX2VudHJ5IHdob3NlIGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBpbiB6c3dhcF9zdG9yZV9wYWdlKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gTm9uZSBvZiB0aGUgbW9kaWZpZWQgZGF0YSBzdHJ1Y3R1cmVzIG9yIGZpZWxkcyBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcyBhcmUgaW50cm9kdWNlZC4gQW55IHBvdGVudGlhbCBidWdzIHdvdWxkIGludm9sdmUgY29uY3VycmVuY3ksIGxpZmV0aW1lL3JlZmNvdW50aW5nLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcyByYXRoZXIgdGhhbiBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDZUMjA6MTg6MjguMzUyNDg3NjI0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4OTcwMjI2MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWlNXQVBcIixcbiAgICBcIlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6c3dhcF9zdG9yZVwiLFxuICAgIFwienN3YXBfbG9hZFwiLFxuICAgIFwienN3YXBfc3RvcmVfcGFnZVwiLFxuICAgIFwienN3YXBfZGVjb21wcmVzc1wiLFxuICAgIFwienN3YXBfZW50cnlfZnJlZVwiLFxuICAgIFwienN3YXBfcG9vbF9jcmVhdGVcIixcbiAgICBcInpzd2FwX3Bvb2xfZmluZF9nZXRcIixcbiAgICBcIl9fenN3YXBfcG9vbF9lbXB0eVwiLFxuICAgIFwiX196c3dhcF9wb29sX3JlbGVhc2VcIixcbiAgICBcInpzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0XCIsXG4gICAgXCJ6c3dhcF90b3RhbF9wYWdlc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaW50ZXJuYWwgenN3YXAgcG9vbCBhbmQgZW50cnkgbWFuYWdlbWVudCBpbiBtbS96c3dhcC5jIGJ5IHJlcGxhY2luZyBhIGxpbmtlZCBsaXN0IG9mIHBvb2xzIHdpdGggYW4gWEFycmF5IChpbmRleGVkIGJ5IGEgdTggcG9vbF9pZHgpIGFuZCBzd2l0Y2hpbmcgcG9vbCBsb29rdXBzIHRvIHVzZSB4YV9sb2FkKCkuIEFsbCBhbGxvY2F0ZWQgc3RydWN0dXJlcyAoenN3YXBfcG9vbCBhbGxvY2F0ZWQgd2l0aCBremFsbG9jX29iaiwgYW5kIHpzd2FwX2VudHJ5IHdob3NlIGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBpbiB6c3dhcF9zdG9yZV9wYWdlKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gTm9uZSBvZiB0aGUgbW9kaWZpZWQgZGF0YSBzdHJ1Y3R1cmVzIG9yIGZpZWxkcyBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcyBhcmUgaW50cm9kdWNlZC4gQW55IHBvdGVudGlhbCBidWdzIHdvdWxkIGludm9sdmUgY29uY3VycmVuY3ksIGxpZmV0aW1lL3JlZmNvdW50aW5nLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcyByYXRoZXIgdGhhbiBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGluIG1tL3pzd2FwLmMsIHJlZmFjdG9yaW5nIHBvb2wgYW5kIGVudHJ5IHRyYWNraW5nIGZyb20gYSBsaW5rZWQgbGlzdCBhbmQgcmF3IHBvb2wgcG9pbnRlciB0byBhbiBJRC1iYXNlZCBYQXJyYXkgd2l0aCA4LWJpdCBwb29sIGluZGljZXMgaW4gc3RydWN0IHpzd2FwX2VudHJ5LiBJdCBhbHNvIHVwZGF0ZXMgc3luY2hyb25pemF0aW9uIHNlbWFudGljcyB1c2luZyBSQ1UgYW5kIHJjdV93b3JrIChxdWV1ZV9yY3Vfd29yaykgYWxvbmcgd2l0aCBzb2Z0aXJxLXNhZmUgWEFycmF5IG9wZXJhdGlvbnMgKHhhX2FsbG9jX2JoLCB4YV9lcmFzZV9iaCkuIFRoZXNlIGNvbmN1cnJlbmN5IGFuZCBkYXRhIHN0cnVjdHVyZSBtb2RpZmljYXRpb25zIGluIHJlYWNoYWJsZSBNTSBjb2RlIHdhcnJhbnQgZnV6emluZyB0byBkZXRlY3QgcG9zc2libGUgcmFjZXMsIHN0YWxlIElEIGRlcmVmZXJlbmNlcywgb3IgYXNzZXJ0aW9uIHRyaXBzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMDoxODoyOC4zNTI0OTU5MTRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNTI1Nzc0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDZmYzgyYmJkMGY0NTY1MGIzNjdmZjNiYTBmZDBkOTZiYmU5YTI0MTVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBTZXAgNiAyMDoxODoyNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuY1xcbmluZGV4IGYzYWUzYzgxZTQ4ZWEuLjI1M2VlYmI5NzFiOTcgMTAwNjQ0XFxuLS0tIGEvbW0venN3YXAuY1xcbisrKyBiL21tL3pzd2FwLmNcXG5AQCAtMzQsNiArMzQsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvd3JpdGViYWNrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wYWdlbWFwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JrcXVldWUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3hhcnJheS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbGlzdF9scnUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3pzbWFsbG9jLmhcXHUwMDNlXFxuIFxcbkBAIC0xNTQsMTIgKzE1NSwyMyBAQCBzdHJ1Y3QgenN3YXBfcG9vbCB7XFxuIFxcdHN0cnVjdCB6c19wb29sICp6c19wb29sO1xcbiBcXHRzdHJ1Y3QgY3J5cHRvX2Fjb21wX2N0eCBfX3BlcmNwdSAqYWNvbXBfY3R4O1xcbiBcXHRzdHJ1Y3QgcGVyY3B1X3JlZiByZWY7XFxuLVxcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcXG4tXFx0c3RydWN0IHdvcmtfc3RydWN0IHJlbGVhc2Vfd29yaztcXG4rXFx0c3RydWN0IHJjdV93b3JrIHJlbGVhc2Vfcndvcms7XFxuIFxcdHN0cnVjdCBobGlzdF9ub2RlIG5vZGU7XFxuK1xcdHU4IGlkeDtcXG4gXFx0Y2hhciB0Zm1fbmFtZVtDUllQVE9fTUFYX0FMR19OQU1FXTtcXG4gfTtcXG4gXFxuKy8qXFxuKyAqIExpdmUgcG9vbHMga2V5ZWQgYnkgaWQgKDEuLlpTV0FQX01BWF9QT09MX0lEKS4gIFhBX0ZMQUdTX0FMTE9DMSBrZWVwcyBpZCAwXFxuKyAqIHJlc2VydmVkIHNvIGl0IGlzIG5ldmVyIGhhbmRlZCB0byBhIGxpdmUgcG9vbC4gIFhBX0ZMQUdTX0xPQ0tfQkggbWFrZXMgdGhlXFxuKyAqIHhhX2xvY2sgc29mdGlycS1zYWZlOiBpdCBpcyB0YWtlbiBmcm9tIF9fenN3YXBfcG9vbF9lbXB0eSgpLCB3aGljaCBydW5zIGZyb21cXG4rICogYSBwZXJjcHVfcmVmIHJlbGVhc2UgY2FsbGJhY2sgaW4gc29mdGlycSBjb250ZXh0LlxcbisgKi9cXG4rI2RlZmluZSBaU1dBUF9GSVJTVF9QT09MX0lEIDFcXG4rI2RlZmluZSBaU1dBUF9NQVhfUE9PTF9JRCBVOF9NQVhcXG4rc3RhdGljIERFRklORV9YQVJSQVlfRkxBR1MoenN3YXBfcG9vbHMsIFhBX0ZMQUdTX0FMTE9DMSB8IFhBX0ZMQUdTX0xPQ0tfQkgpO1xcbitzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgX19yY3UgKnpzd2FwX2N1cnJlbnRfcG9vbDtcXG4rXFxuIC8qIEdsb2JhbCBMUlUgbGlzdHMgc2hhcmVkIGJ5IGFsbCB6c3dhcCBwb29scy4gKi9cXG4gc3RhdGljIHN0cnVjdCBsaXN0X2xydSB6c3dhcF9saXN0X2xydTtcXG4gXFxuQEAgLTE4Miw3ICsxOTQsNyBAQCBzdGF0aWMgc3RydWN0IHNocmlua2VyICp6c3dhcF9zaHJpbmtlcjtcXG4gICogICAgICAgICAgICAgIHdyaXRlYmFjayBsb2dpYy4gVGhlIGVudHJ5IGlzIG9ubHkgcmVjbGFpbWVkIGJ5IHRoZSB3cml0ZWJhY2tcXG4gICogICAgICAgICAgICAgIGxvZ2ljIGlmIHJlZmVyZW5jZWQgaXMgdW5zZXQuIFNlZSBjb21tZW50cyBpbiB0aGUgc2hyaW5rZXJcXG4gICogICAgICAgICAgICAgIHNlY3Rpb24gZm9yIGNvbnRleHQuXFxuLSAqIHBvb2wgLSB0aGUgenN3YXBfcG9vbCB0aGUgZW50cnkncyBkYXRhIGlzIGluXFxuKyAqIHBvb2xfaWR4IC0gaWQgb2YgdGhlIHpzd2FwX3Bvb2wgdGhhdCB0aGUgZW50cnkncyBkYXRhIGlzIGluLlxcbiAgKiBoYW5kbGUgLSB6c21hbGxvYyBhbGxvY2F0aW9uIGhhbmRsZSB0aGF0IHN0b3JlcyB0aGUgY29tcHJlc3NlZCBwYWdlIGRhdGFcXG4gICogb2JqY2cgLSB0aGUgb2JqX2Nncm91cCB0aGF0IHRoZSBjb21wcmVzc2VkIG1lbW9yeSBpcyBjaGFyZ2VkIHRvXFxuICAqIGxydSAtIGhhbmRsZSB0byB0aGUgcG9vbCdzIGxydSB1c2VkIHRvIGV2aWN0IHBhZ2VzLlxcbkBAIC0xOTEsMTkgKzIwMywyNSBAQCBzdHJ1Y3QgenN3YXBfZW50cnkge1xcbiBcXHRzd3BfZW50cnlfdCBzd3BlbnRyeTtcXG4gXFx0dW5zaWduZWQgaW50IGxlbmd0aDtcXG4gXFx0Ym9vbCByZWZlcmVuY2VkO1xcbi1cXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDtcXG4rXFx0dTggcG9vbF9pZHg7XFxuIFxcdHVuc2lnbmVkIGxvbmcgaGFuZGxlO1xcbiBcXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgbHJ1O1xcbiB9O1xcbiBcXG4rLypcXG4rICogTm8gUkNVIHNlY3Rpb24gaXMgbmVlZGVkIGFyb3VuZCB0aGUgcmV0dXJuZWQgcG9pbnRlcjogYSBzdG9yZWQgZW50cnkgcGluc1xcbisgKiBpdHMgcG9vbCB2aWEgcGVyY3B1X3JlZiAodGFrZW4gaW4genN3YXBfc3RvcmVfcGFnZSgpKSwgc28gdGhlIGlkIGNhbm5vdCBiZVxcbisgKiByZXVzZWQgdW5kZXIgdXMuICBDYWxsZXJzIFdBUk4gYW5kIGhhbmRsZSBhIE5VTEwgZnJvbSBhIGNvcnJ1cHQgcG9vbF9pZHguXFxuKyAqL1xcbitzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX2VudHJ5X3Bvb2woc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcXG4re1xcbitcXHRyZXR1cm4geGFfbG9hZChcXHUwMDI2enN3YXBfcG9vbHMsIGVudHJ5LVxcdTAwM2Vwb29sX2lkeCk7XFxuK31cXG4rXFxuIHN0YXRpYyBzdHJ1Y3QgeGFycmF5ICp6c3dhcF90cmVlc1tNQVhfU1dBUEZJTEVTXTtcXG4gc3RhdGljIHVuc2lnbmVkIGludCBucl96c3dhcF90cmVlc1tNQVhfU1dBUEZJTEVTXTtcXG4gXFxuLS8qIFJDVS1wcm90ZWN0ZWQgaXRlcmF0aW9uICovXFxuLXN0YXRpYyBMSVNUX0hFQUQoenN3YXBfcG9vbHMpO1xcbi0vKiBwcm90ZWN0cyB6c3dhcF9wb29scyBsaXN0IG1vZGlmaWNhdGlvbiAqL1xcbi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHpzd2FwX3Bvb2xzX2xvY2spO1xcbiAvKiBwb29sIGNvdW50ZXIgdG8gcHJvdmlkZSB1bmlxdWUgbmFtZXMgdG8genNtYWxsb2MgKi9cXG4gc3RhdGljIGF0b21pY190IHpzd2FwX3Bvb2xzX2NvdW50ID0gQVRPTUlDX0lOSVQoMCk7XFxuIFxcbkBAIC0yNzUsNiArMjkzLDcgQEAgc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2NyZWF0ZShjaGFyICpjb21wcmVzc29yKVxcbiBcXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDtcXG4gXFx0Y2hhciBuYW1lWzM4XTsgLyogJ3pzd2FwJyArIDMyIGNoYXIgKG1heCkgbnVtICsgXFxcXDAgKi9cXG4gXFx0aW50IHJldCwgY3B1O1xcbitcXHR1MzIgaWQ7XFxuIFxcbiBcXHRpZiAoIXpzd2FwX2hhc19wb29sIFxcdTAwMjZcXHUwMDI2ICFzdHJjbXAoY29tcHJlc3NvciwgWlNXQVBfUEFSQU1fVU5TRVQpKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG5AQCAtMzIwLDEyICszMzksMjkgQEAgc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2NyZWF0ZShjaGFyICpjb21wcmVzc29yKVxcbiBcXHRcXHRcXHQgICAgICBQRVJDUFVfUkVGX0FMTE9XX1JFSU5JVCwgR0ZQX0tFUk5FTCk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gcmVmX2ZhaWw7XFxuLVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZwb29sLVxcdTAwM2VsaXN0KTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFB1Ymxpc2ggb25seSBhZnRlciB0aGUgcG9vbCBpcyBmdWxseSBidWlsdCwgc28gbG9ja2xlc3Mgd2Fsa2Vyc1xcbitcXHQgKiBuZXZlciBzZWUgYSBoYWxmLWluaXRpYWxpemVkIHBvb2wuICBUaGUgX2JoIHZhcmlhbnQgcGFpcnMgd2l0aCB0aGVcXG4rXFx0ICogc29mdGlycS1jb250ZXh0IHhhX2xvY2sgdGFrZW4gaW4gX196c3dhcF9wb29sX2VtcHR5KCkuXFxuK1xcdCAqL1xcbitcXHRyZXQgPSB4YV9hbGxvY19iaChcXHUwMDI2enN3YXBfcG9vbHMsIFxcdTAwMjZpZCwgcG9vbCxcXG4rXFx0XFx0XFx0ICBYQV9MSU1JVChaU1dBUF9GSVJTVF9QT09MX0lELCBaU1dBUF9NQVhfUE9PTF9JRCksXFxuK1xcdFxcdFxcdCAgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0aWYgKHJldCA9PSAtRUJVU1kpXFxuK1xcdFxcdFxcdHByX2VycihcXFwiY2Fubm90IGFsbG9jYXRlIHBvb2wgaWQgKG1heCAlZCBsaXZlIHBvb2xzKVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgICAgIFpTV0FQX01BWF9QT09MX0lEIC0gWlNXQVBfRklSU1RfUE9PTF9JRCArIDEpO1xcbitcXHRcXHRnb3RvIHhhX2ZhaWw7XFxuK1xcdH1cXG4rXFx0cG9vbC1cXHUwMDNlaWR4ID0gaWQ7XFxuIFxcbiBcXHR6c3dhcF9wb29sX2RlYnVnKFxcXCJjcmVhdGVkXFxcIiwgcG9vbCk7XFxuIFxcbiBcXHRyZXR1cm4gcG9vbDtcXG4gXFxuK3hhX2ZhaWw6XFxuK1xcdHBlcmNwdV9yZWZfZXhpdChcXHUwMDI2cG9vbC1cXHUwMDNlcmVmKTtcXG4gcmVmX2ZhaWw6XFxuIFxcdGNwdWhwX3N0YXRlX3JlbW92ZV9pbnN0YW5jZShDUFVIUF9NTV9aU1dQX1BPT0xfUFJFUEFSRSwgXFx1MDAyNnBvb2wtXFx1MDAzZW5vZGUpO1xcbiBcXG5AQCAtMzc5LDM3ICs0MTUsMjkgQEAgc3RhdGljIHZvaWQgenN3YXBfcG9vbF9kZXN0cm95KHN0cnVjdCB6c3dhcF9wb29sICpwb29sKVxcbiBcXG4gc3RhdGljIHZvaWQgX196c3dhcF9wb29sX3JlbGVhc2Uoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiB7XFxuLVxcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sID0gY29udGFpbmVyX29mKHdvcmssIHR5cGVvZigqcG9vbCksXFxuLVxcdFxcdFxcdFxcdFxcdFxcdHJlbGVhc2Vfd29yayk7XFxuLVxcbi1cXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4rXFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSBjb250YWluZXJfb2YodG9fcmN1X3dvcmsod29yayksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICB0eXBlb2YoKnBvb2wpLCByZWxlYXNlX3J3b3JrKTtcXG4gXFxuIFxcdC8qIG5vYm9keSBzaG91bGQgaGF2ZSBiZWVuIGFibGUgdG8gZ2V0IGEgcmVmLi4uICovXFxuIFxcdFdBUk5fT04oIXBlcmNwdV9yZWZfaXNfemVybyhcXHUwMDI2cG9vbC1cXHUwMDNlcmVmKSk7XFxuIFxcdHBlcmNwdV9yZWZfZXhpdChcXHUwMDI2cG9vbC1cXHUwMDNlcmVmKTtcXG4gXFxuLVxcdC8qIHBvb2wgaXMgbm93IG9mZiB6c3dhcF9wb29scyBsaXN0IGFuZCBoYXMgbm8gcmVmZXJlbmNlcy4gKi9cXG4rXFx0LyogVGhlIHBvb2wgaXMgbm8gbG9uZ2VyIGluIHpzd2FwX3Bvb2xzIGFuZCBoYXMgbm8gcmVmZXJlbmNlcy4gKi9cXG4gXFx0enN3YXBfcG9vbF9kZXN0cm95KHBvb2wpO1xcbiB9XFxuIFxcbi1zdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3VycmVudCh2b2lkKTtcXG4tXFxuIHN0YXRpYyB2b2lkIF9fenN3YXBfcG9vbF9lbXB0eShzdHJ1Y3QgcGVyY3B1X3JlZiAqcmVmKVxcbiB7XFxuIFxcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sO1xcbiBcXG4gXFx0cG9vbCA9IGNvbnRhaW5lcl9vZihyZWYsIHR5cGVvZigqcG9vbCksIHJlZik7XFxuIFxcbi1cXHRzcGluX2xvY2tfYmgoXFx1MDAyNnpzd2FwX3Bvb2xzX2xvY2spO1xcbi1cXG4tXFx0V0FSTl9PTihwb29sID09IHpzd2FwX3Bvb2xfY3VycmVudCgpKTtcXG4rXFx0V0FSTl9PTihwb29sID09IHJjdV9hY2Nlc3NfcG9pbnRlcih6c3dhcF9jdXJyZW50X3Bvb2wpKTtcXG4gXFxuLVxcdGxpc3RfZGVsX3JjdShcXHUwMDI2cG9vbC1cXHUwMDNlbGlzdCk7XFxuK1xcdHhhX2VyYXNlX2JoKFxcdTAwMjZ6c3dhcF9wb29scywgcG9vbC1cXHUwMDNlaWR4KTtcXG4gXFxuLVxcdElOSVRfV09SSyhcXHUwMDI2cG9vbC1cXHUwMDNlcmVsZWFzZV93b3JrLCBfX3pzd2FwX3Bvb2xfcmVsZWFzZSk7XFxuLVxcdHNjaGVkdWxlX3dvcmsoXFx1MDAyNnBvb2wtXFx1MDAzZXJlbGVhc2Vfd29yayk7XFxuLVxcbi1cXHRzcGluX3VubG9ja19iaChcXHUwMDI2enN3YXBfcG9vbHNfbG9jayk7XFxuK1xcdElOSVRfUkNVX1dPUksoXFx1MDAyNnBvb2wtXFx1MDAzZXJlbGVhc2VfcndvcmssIF9fenN3YXBfcG9vbF9yZWxlYXNlKTtcXG4rXFx0cXVldWVfcmN1X3dvcmsoc3lzdGVtX3BlcmNwdV93cSwgXFx1MDAyNnBvb2wtXFx1MDAzZXJlbGVhc2VfcndvcmspO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IF9fbXVzdF9jaGVjayB6c3dhcF9wb29sX3RyeWdldChzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbClcXG5AQCAtNDM1LDIwICs0NjMsMTMgQEAgc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICpfX3pzd2FwX3Bvb2xfY3VycmVudCh2b2lkKVxcbiB7XFxuIFxcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sO1xcbiBcXG4tXFx0cG9vbCA9IGxpc3RfZmlyc3Rfb3JfbnVsbF9yY3UoXFx1MDAyNnpzd2FwX3Bvb2xzLCB0eXBlb2YoKnBvb2wpLCBsaXN0KTtcXG4rXFx0cG9vbCA9IHJjdV9kZXJlZmVyZW5jZSh6c3dhcF9jdXJyZW50X3Bvb2wpO1xcbiBcXHRXQVJOX09OQ0UoIXBvb2wgXFx1MDAyNlxcdTAwMjYgenN3YXBfaGFzX3Bvb2wsXFxuIFxcdFxcdCAgXFxcIiVzOiBubyBwYWdlIHN0b3JhZ2UgcG9vbCFcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4gXFxuIFxcdHJldHVybiBwb29sO1xcbiB9XFxuIFxcbi1zdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3VycmVudCh2b2lkKVxcbi17XFxuLVxcdGFzc2VydF9zcGluX2xvY2tlZChcXHUwMDI2enN3YXBfcG9vbHNfbG9jayk7XFxuLVxcbi1cXHRyZXR1cm4gX196c3dhcF9wb29sX2N1cnJlbnQoKTtcXG4tfVxcbi1cXG4gc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2N1cnJlbnRfZ2V0KHZvaWQpXFxuIHtcXG4gXFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7XFxuQEAgLTQ2NCwyMyArNDg1LDI4IEBAIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jdXJyZW50X2dldCh2b2lkKVxcbiBcXHRyZXR1cm4gcG9vbDtcXG4gfVxcbiBcXG4tLyogdHlwZSBhbmQgY29tcHJlc3NvciBtdXN0IGJlIG51bGwtdGVybWluYXRlZCAqL1xcbisvKiBjb21wcmVzc29yIG11c3QgYmUgbnVsbC10ZXJtaW5hdGVkICovXFxuIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9maW5kX2dldChjaGFyICpjb21wcmVzc29yKVxcbiB7XFxuIFxcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sO1xcbitcXHR1bnNpZ25lZCBsb25nIGlkO1xcbiBcXG4tXFx0YXNzZXJ0X3NwaW5fbG9ja2VkKFxcdTAwMjZ6c3dhcF9wb29sc19sb2NrKTtcXG4tXFxuLVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBvb2wsIFxcdTAwMjZ6c3dhcF9wb29scywgbGlzdCkge1xcbitcXHQvKlxcbitcXHQgKiBfX3pzd2FwX3Bvb2xfZW1wdHkoKSBjYW4gZXJhc2UgZnJvbSB6c3dhcF9wb29scyBpbiBzb2Z0aXJxIHdoaWxlIHdlXFxuK1xcdCAqIHdhbGsuICByY3VfcmVhZF9sb2NrKCkga2VlcHMgdGhlIHdhbGsgY29uc2lzdGVudCBhbmQgZWFjaCBwb29sIGFsaXZlXFxuK1xcdCAqIGFjcm9zcyB0cnlnZXQoKS4gIHhhX2Zvcl9lYWNoKCkncyBvd24gUkNVIGRvZXMgbm90IHNwYW4gdGhlIGxvb3AgYm9keS5cXG4rXFx0ICovXFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0eGFfZm9yX2VhY2goXFx1MDAyNnpzd2FwX3Bvb2xzLCBpZCwgcG9vbCkge1xcbiBcXHRcXHRpZiAoc3RyY21wKHBvb2wtXFx1MDAzZXRmbV9uYW1lLCBjb21wcmVzc29yKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdC8qIGlmIHdlIGNhbid0IGdldCBpdCwgaXQncyBhYm91dCB0byBiZSBkZXN0cm95ZWQgKi9cXG4tXFx0XFx0aWYgKCF6c3dhcF9wb29sX3RyeWdldChwb29sKSlcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdHJldHVybiBwb29sO1xcbitcXHRcXHRpZiAoenN3YXBfcG9vbF90cnlnZXQocG9vbCkpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4tXFx0cmV0dXJuIE5VTEw7XFxuK1xcdHJldHVybiBwb29sO1xcbiB9XFxuIFxcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyB6c3dhcF9tYXhfcGFnZXModm9pZClcXG5AQCAtNDk3LDkgKzUyMywxNCBAQCB1bnNpZ25lZCBsb25nIHpzd2FwX3RvdGFsX3BhZ2VzKHZvaWQpXFxuIHtcXG4gXFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7XFxuIFxcdHVuc2lnbmVkIGxvbmcgdG90YWwgPSAwO1xcbitcXHR1bnNpZ25lZCBsb25nIGlkO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogcmN1X3JlYWRfbG9jaygpIGtlZXBzIGVhY2ggcG9vbCBhbGl2ZSBhY3Jvc3MgenNfZ2V0X3RvdGFsX3BhZ2VzKCkuXFxuK1xcdCAqIHhhX2Zvcl9lYWNoKCkncyBvd24gUkNVIGRvZXMgbm90IHNwYW4gdGhlIGxvb3AgYm9keS5cXG4rXFx0ICovXFxuIFxcdHJjdV9yZWFkX2xvY2soKTtcXG4tXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9vbCwgXFx1MDAyNnpzd2FwX3Bvb2xzLCBsaXN0KVxcbitcXHR4YV9mb3JfZWFjaChcXHUwMDI2enN3YXBfcG9vbHMsIGlkLCBwb29sKVxcbiBcXHRcXHR0b3RhbCArPSB6c19nZXRfdG90YWxfcGFnZXMocG9vbC1cXHUwMDNlenNfcG9vbCk7XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG5AQCAtNTU2LDIwICs1ODcsMTMgQEAgc3RhdGljIGludCB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldChjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1cXG4gXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIFxcdH1cXG4gXFxuLVxcdHNwaW5fbG9ja19iaChcXHUwMDI2enN3YXBfcG9vbHNfbG9jayk7XFxuLVxcbiBcXHRwb29sID0genN3YXBfcG9vbF9maW5kX2dldChzKTtcXG4tXFx0aWYgKHBvb2wpIHtcXG4rXFx0aWYgKCFwb29sKSB7XFxuK1xcdFxcdHBvb2wgPSB6c3dhcF9wb29sX2NyZWF0ZShzKTtcXG4rXFx0fSBlbHNlIHtcXG4gXFx0XFx0enN3YXBfcG9vbF9kZWJ1ZyhcXFwidXNpbmcgZXhpc3RpbmdcXFwiLCBwb29sKTtcXG4tXFx0XFx0V0FSTl9PTihwb29sID09IHpzd2FwX3Bvb2xfY3VycmVudCgpKTtcXG4tXFx0XFx0bGlzdF9kZWxfcmN1KFxcdTAwMjZwb29sLVxcdTAwM2VsaXN0KTtcXG4tXFx0fVxcbitcXHRcXHRXQVJOX09OKHBvb2wgPT0gcmN1X2FjY2Vzc19wb2ludGVyKHpzd2FwX2N1cnJlbnRfcG9vbCkpO1xcbiBcXG4tXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnpzd2FwX3Bvb2xzX2xvY2spO1xcbi1cXG4tXFx0aWYgKCFwb29sKVxcbi1cXHRcXHRwb29sID0genN3YXBfcG9vbF9jcmVhdGUocyk7XFxuLVxcdGVsc2Uge1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBSZXN0b3JlIHRoZSBpbml0aWFsIHJlZiBkcm9wcGVkIGJ5IHBlcmNwdV9yZWZfa2lsbCgpXFxuIFxcdFxcdCAqIHdoZW4gdGhlIHBvb2wgd2FzIGRlY29tbWlzc2lvbmVkIGFuZCBzd2l0Y2ggaXQgYWdhaW5cXG5AQCAtNTg2LDI0ICs2MTAsMTggQEAgc3RhdGljIGludCB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldChjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1cXG4gXFx0ZWxzZVxcbiBcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbiBcXG4tXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ6c3dhcF9wb29sc19sb2NrKTtcXG4tXFxuK1xcdC8qXFxuK1xcdCAqIENvbXByZXNzb3Igc3dpdGNoZXMgYXJlIHNlcmlhbGl6ZWQgYnkgdGhlIGtlcm5lbCBwYXJhbSBsb2NrLCBzbyB0aGlzXFxuK1xcdCAqIGlzIHRoZSBvbmx5IHdyaXRlciBvZiB6c3dhcF9jdXJyZW50X3Bvb2w6IG5vIHhhX2xvY2sgbmVlZGVkLlxcbitcXHQgKi9cXG4gXFx0aWYgKCFyZXQpIHtcXG4tXFx0XFx0cHV0X3Bvb2wgPSB6c3dhcF9wb29sX2N1cnJlbnQoKTtcXG4tXFx0XFx0bGlzdF9hZGRfcmN1KFxcdTAwMjZwb29sLVxcdTAwM2VsaXN0LCBcXHUwMDI2enN3YXBfcG9vbHMpO1xcbitcXHRcXHRwdXRfcG9vbCA9IHJjdV9hY2Nlc3NfcG9pbnRlcih6c3dhcF9jdXJyZW50X3Bvb2wpO1xcbitcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIoenN3YXBfY3VycmVudF9wb29sLCBwb29sKTtcXG4gXFx0XFx0enN3YXBfaGFzX3Bvb2wgPSB0cnVlO1xcbiBcXHR9IGVsc2UgaWYgKHBvb2wpIHtcXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogQWRkIHRoZSBwb3NzaWJseSBwcmUtZXhpc3RpbmcgcG9vbCB0byB0aGUgZW5kIG9mIHRoZSBwb29sc1xcbi1cXHRcXHQgKiBsaXN0OyBpZiBpdCdzIG5ldyAoYW5kIGVtcHR5KSB0aGVuIGl0J2xsIGJlIHJlbW92ZWQgYW5kXFxuLVxcdFxcdCAqIGRlc3Ryb3llZCBieSB0aGUgcHV0IGFmdGVyIHdlIGRyb3AgdGhlIGxvY2tcXG4tXFx0XFx0ICovXFxuLVxcdFxcdGxpc3RfYWRkX3RhaWxfcmN1KFxcdTAwMjZwb29sLVxcdTAwM2VsaXN0LCBcXHUwMDI2enN3YXBfcG9vbHMpO1xcbiBcXHRcXHRwdXRfcG9vbCA9IHBvb2w7XFxuIFxcdH1cXG4gXFxuLVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ6c3dhcF9wb29sc19sb2NrKTtcXG4tXFxuIFxcdC8qXFxuIFxcdCAqIERyb3AgdGhlIHJlZiBmcm9tIGVpdGhlciB0aGUgb2xkIGN1cnJlbnQgcG9vbCxcXG4gXFx0ICogb3IgdGhlIG5ldyBwb29sIHdlIGZhaWxlZCB0byBhZGRcXG5AQCAtNzUxLDkgKzc2OSwxMyBAQCBzdGF0aWMgdm9pZCB6c3dhcF9lbnRyeV9jYWNoZV9mcmVlKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXFxuICAqL1xcbiBzdGF0aWMgdm9pZCB6c3dhcF9lbnRyeV9mcmVlKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXFxuIHtcXG4rXFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSB6c3dhcF9lbnRyeV9wb29sKGVudHJ5KTtcXG4rXFxuIFxcdHpzd2FwX2xydV9kZWwoZW50cnkpO1xcbi1cXHR6c19mcmVlKGVudHJ5LVxcdTAwM2Vwb29sLVxcdTAwM2V6c19wb29sLCBlbnRyeS1cXHUwMDNlaGFuZGxlKTtcXG4tXFx0enN3YXBfcG9vbF9wdXQoZW50cnktXFx1MDAzZXBvb2wpO1xcbitcXHRpZiAoIVdBUk5fT05fT05DRSghcG9vbCkpIHtcXG4rXFx0XFx0enNfZnJlZShwb29sLVxcdTAwM2V6c19wb29sLCBlbnRyeS1cXHUwMDNlaGFuZGxlKTtcXG4rXFx0XFx0enN3YXBfcG9vbF9wdXQocG9vbCk7XFxuK1xcdH1cXG4gXFx0aWYgKGVudHJ5LVxcdTAwM2VvYmpjZykge1xcbiBcXHRcXHRvYmpfY2dyb3VwX3VuY2hhcmdlX3pzd2FwKGVudHJ5LVxcdTAwM2VvYmpjZywgZW50cnktXFx1MDAzZWxlbmd0aCk7XFxuIFxcdFxcdG9ial9jZ3JvdXBfcHV0KGVudHJ5LVxcdTAwM2VvYmpjZyk7XFxuQEAgLTkxMCwxMiArOTMyLDE1IEBAIHN0YXRpYyBib29sIHpzd2FwX2NvbXByZXNzKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxcbiBcXG4gc3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuLVxcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sID0gZW50cnktXFx1MDAzZXBvb2w7XFxuK1xcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sID0genN3YXBfZW50cnlfcG9vbChlbnRyeSk7XFxuIFxcdHN0cnVjdCBzY2F0dGVybGlzdCBpbnB1dFsyXTsgLyogenNtYWxsb2MgcmV0dXJucyBhbiBTRyBsaXN0IDEtMiBlbnRyaWVzICovXFxuIFxcdHN0cnVjdCBzY2F0dGVybGlzdCBvdXRwdXQ7XFxuIFxcdHN0cnVjdCBjcnlwdG9fYWNvbXBfY3R4ICphY29tcF9jdHg7XFxuIFxcdGludCByZXQgPSAwLCBkbGVuO1xcbiBcXG4rXFx0aWYgKFdBUk5fT05fT05DRSghcG9vbCkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuIFxcdGFjb21wX2N0eCA9IHJhd19jcHVfcHRyKHBvb2wtXFx1MDAzZWFjb21wX2N0eCk7XFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNmFjb21wX2N0eC1cXHUwMDNlbXV0ZXgpO1xcbiBcXHR6c19vYmpfcmVhZF9zZ19iZWdpbihwb29sLVxcdTAwM2V6c19wb29sLCBlbnRyeS1cXHUwMDNlaGFuZGxlLCBpbnB1dCwgZW50cnktXFx1MDAzZWxlbmd0aCk7XFxuQEAgLTk1MSw3ICs5NzYsNyBAQCBzdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdHByX2FsZXJ0X3JhdGVsaW1pdGVkKFxcXCJEZWNvbXByZXNzaW9uIGVycm9yIGZyb20genN3YXAgKCVkOiVsdSAlcyAldS1cXHUwMDNlJWQpXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRzd3BfdHlwZShlbnRyeS1cXHUwMDNlc3dwZW50cnkpLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRzd3Bfb2Zmc2V0KGVudHJ5LVxcdTAwM2Vzd3BlbnRyeSksXFxuLVxcdFxcdFxcdFxcdFxcdFxcdGVudHJ5LVxcdTAwM2Vwb29sLVxcdTAwM2V0Zm1fbmFtZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0cG9vbC1cXHUwMDNldGZtX25hbWUsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdGVudHJ5LVxcdTAwM2VsZW5ndGgsIGRsZW4pO1xcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG5AQCAtMTQwOSw2ICsxNDM0LDEzIEBAIHN0YXRpYyBib29sIHpzd2FwX3N0b3JlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuIFxcdGlmICghenN3YXBfY29tcHJlc3MocGFnZSwgZW50cnksIHBvb2wpKVxcbiBcXHRcXHRnb3RvIGNvbXByZXNzX2ZhaWxlZDtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFNldCBwb29sX2lkeCBiZWZvcmUgdGhlIHhhX3N0b3JlKCkgYmVsb3cgcHVibGlzaGVzIHRoZSBlbnRyeSwgb3IgYVxcbitcXHQgKiBjb25jdXJyZW50IHJlYWRlciBjb3VsZCByZXNvbHZlIGEgc3RhbGUgcG9vbF9pZHggbGVmdCBieSBzbGFiIHJldXNlXFxuK1xcdCAqIHRvIGFuIHVucmVsYXRlZCBsaXZlIHBvb2wuXFxuK1xcdCAqL1xcbitcXHRlbnRyeS1cXHUwMDNlcG9vbF9pZHggPSBwb29sLVxcdTAwM2VpZHg7XFxuK1xcbiBcXHRvbGQgPSB4YV9zdG9yZShzd2FwX3pzd2FwX3RyZWUocGFnZV9zd3BlbnRyeSksXFxuIFxcdFxcdCAgICAgICBzd3Bfb2Zmc2V0KHBhZ2Vfc3dwZW50cnkpLFxcbiBcXHRcXHQgICAgICAgZW50cnksIEdGUF9LRVJORUwpO1xcbkBAIC0xNDU0LDcgKzE0ODYsNiBAQCBzdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxcbiBcXHQgKiAgICBUaGUgcHVibGlzaGluZyBvcmRlciBtYXR0ZXJzIHRvIHByZXZlbnQgd3JpdGViYWNrIGZyb20gc2VlaW5nXFxuIFxcdCAqICAgIGFuIGluY29oZXJlbnQgZW50cnkuXFxuIFxcdCAqL1xcbi1cXHRlbnRyeS1cXHUwMDNlcG9vbCA9IHBvb2w7XFxuIFxcdGVudHJ5LVxcdTAwM2Vzd3BlbnRyeSA9IHBhZ2Vfc3dwZW50cnk7XFxuIFxcdGVudHJ5LVxcdTAwM2VvYmpjZyA9IG9iamNnO1xcbiBcXHRlbnRyeS1cXHUwMDNlcmVmZXJlbmNlZCA9IHRydWU7XFxuQEAgLTE3OTAsNyArMTgyMSw3IEBAIHN0YXRpYyBpbnQgenN3YXBfc2V0dXAodm9pZClcXG4gXFx0cG9vbCA9IF9fenN3YXBfcG9vbF9jcmVhdGVfZmFsbGJhY2soKTtcXG4gXFx0aWYgKHBvb2wpIHtcXG4gXFx0XFx0cHJfaW5mbyhcXFwibG9hZGVkIHVzaW5nIHBvb2wgJXNcXFxcblxcXCIsIHBvb2wtXFx1MDAzZXRmbV9uYW1lKTtcXG4tXFx0XFx0bGlzdF9hZGQoXFx1MDAyNnBvb2wtXFx1MDAzZWxpc3QsIFxcdTAwMjZ6c3dhcF9wb29scyk7XFxuK1xcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcih6c3dhcF9jdXJyZW50X3Bvb2wsIHBvb2wpO1xcbiBcXHRcXHR6c3dhcF9oYXNfcG9vbCA9IHRydWU7XFxuIFxcdFxcdHN0YXRpY19icmFuY2hfZW5hYmxlKFxcdTAwMjZ6c3dhcF9ldmVyX2VuYWJsZWQpO1xcbiBcXHR9IGVsc2Uge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMDoxODoyOC44NTg2ODUyMDZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE4NjU5ODY2MzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpTV0FQXCIsXG4gICAgXCJTV0FQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwienN3YXBfc3RvcmVcIixcbiAgICBcInpzd2FwX2xvYWRcIixcbiAgICBcInpzd2FwX3N0b3JlX3BhZ2VcIixcbiAgICBcInpzd2FwX2RlY29tcHJlc3NcIixcbiAgICBcInpzd2FwX2VudHJ5X2ZyZWVcIixcbiAgICBcInpzd2FwX3Bvb2xfY3JlYXRlXCIsXG4gICAgXCJ6c3dhcF9wb29sX2ZpbmRfZ2V0XCIsXG4gICAgXCJfX3pzd2FwX3Bvb2xfZW1wdHlcIixcbiAgICBcIl9fenN3YXBfcG9vbF9yZWxlYXNlXCIsXG4gICAgXCJ6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldFwiLFxuICAgIFwienN3YXBfdG90YWxfcGFnZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGluIG1tL3pzd2FwLmMsIHJlZmFjdG9yaW5nIHBvb2wgYW5kIGVudHJ5IHRyYWNraW5nIGZyb20gYSBsaW5rZWQgbGlzdCBhbmQgcmF3IHBvb2wgcG9pbnRlciB0byBhbiBJRC1iYXNlZCBYQXJyYXkgd2l0aCA4LWJpdCBwb29sIGluZGljZXMgaW4gc3RydWN0IHpzd2FwX2VudHJ5LiBJdCBhbHNvIHVwZGF0ZXMgc3luY2hyb25pemF0aW9uIHNlbWFudGljcyB1c2luZyBSQ1UgYW5kIHJjdV93b3JrIChxdWV1ZV9yY3Vfd29yaykgYWxvbmcgd2l0aCBzb2Z0aXJxLXNhZmUgWEFycmF5IG9wZXJhdGlvbnMgKHhhX2FsbG9jX2JoLCB4YV9lcmFzZV9iaCkuIFRoZXNlIGNvbmN1cnJlbmN5IGFuZCBkYXRhIHN0cnVjdHVyZSBtb2RpZmljYXRpb25zIGluIHJlYWNoYWJsZSBNTSBjb2RlIHdhcnJhbnQgZnV6emluZyB0byBkZXRlY3QgcG9zc2libGUgcmFjZXMsIHN0YWxlIElEIGRlcmVmZXJlbmNlcywgb3IgYXNzZXJ0aW9uIHRyaXBzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZmYzgyYmJkMGY0NTY1MGIzNjdmZjNiYTBmZDBkOTZiYmU5YTI0MTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDIwOjE4OjI3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmNcbmluZGV4IGYzYWUzYzgxZTQ4ZWEuLjI1M2VlYmI5NzFiOTcgMTAwNjQ0XG4tLS0gYS9tbS96c3dhcC5jXG4rKysgYi9tbS96c3dhcC5jXG5AQCAtMzQsNiArMzQsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3dyaXRlYmFjay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZW1hcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC94YXJyYXkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3RfbHJ1LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC96c21hbGxvYy5oXHUwMDNlXG4gXG5AQCAtMTU0LDEyICsxNTUsMjMgQEAgc3RydWN0IHpzd2FwX3Bvb2wge1xuIFx0c3RydWN0IHpzX3Bvb2wgKnpzX3Bvb2w7XG4gXHRzdHJ1Y3QgY3J5cHRvX2Fjb21wX2N0eCBfX3BlcmNwdSAqYWNvbXBfY3R4O1xuIFx0c3RydWN0IHBlcmNwdV9yZWYgcmVmO1xuLVx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuLVx0c3RydWN0IHdvcmtfc3RydWN0IHJlbGVhc2Vfd29yaztcbitcdHN0cnVjdCByY3Vfd29yayByZWxlYXNlX3J3b3JrO1xuIFx0c3RydWN0IGhsaXN0X25vZGUgbm9kZTtcbitcdHU4IGlkeDtcbiBcdGNoYXIgdGZtX25hbWVbQ1JZUFRPX01BWF9BTEdfTkFNRV07XG4gfTtcbiBcbisvKlxuKyAqIExpdmUgcG9vbHMga2V5ZWQgYnkgaWQgKDEuLlpTV0FQX01BWF9QT09MX0lEKS4gIFhBX0ZMQUdTX0FMTE9DMSBrZWVwcyBpZCAwXG4rICogcmVzZXJ2ZWQgc28gaXQgaXMgbmV2ZXIgaGFuZGVkIHRvIGEgbGl2ZSBwb29sLiAgWEFfRkxBR1NfTE9DS19CSCBtYWtlcyB0aGVcbisgKiB4YV9sb2NrIHNvZnRpcnEtc2FmZTogaXQgaXMgdGFrZW4gZnJvbSBfX3pzd2FwX3Bvb2xfZW1wdHkoKSwgd2hpY2ggcnVucyBmcm9tXG4rICogYSBwZXJjcHVfcmVmIHJlbGVhc2UgY2FsbGJhY2sgaW4gc29mdGlycSBjb250ZXh0LlxuKyAqL1xuKyNkZWZpbmUgWlNXQVBfRklSU1RfUE9PTF9JRCAxXG4rI2RlZmluZSBaU1dBUF9NQVhfUE9PTF9JRCBVOF9NQVhcbitzdGF0aWMgREVGSU5FX1hBUlJBWV9GTEFHUyh6c3dhcF9wb29scywgWEFfRkxBR1NfQUxMT0MxIHwgWEFfRkxBR1NfTE9DS19CSCk7XG4rc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sIF9fcmN1ICp6c3dhcF9jdXJyZW50X3Bvb2w7XG4rXG4gLyogR2xvYmFsIExSVSBsaXN0cyBzaGFyZWQgYnkgYWxsIHpzd2FwIHBvb2xzLiAqL1xuIHN0YXRpYyBzdHJ1Y3QgbGlzdF9scnUgenN3YXBfbGlzdF9scnU7XG4gXG5AQCAtMTgyLDcgKzE5NCw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2hyaW5rZXIgKnpzd2FwX3Nocmlua2VyO1xuICAqICAgICAgICAgICAgICB3cml0ZWJhY2sgbG9naWMuIFRoZSBlbnRyeSBpcyBvbmx5IHJlY2xhaW1lZCBieSB0aGUgd3JpdGViYWNrXG4gICogICAgICAgICAgICAgIGxvZ2ljIGlmIHJlZmVyZW5jZWQgaXMgdW5zZXQuIFNlZSBjb21tZW50cyBpbiB0aGUgc2hyaW5rZXJcbiAgKiAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgY29udGV4dC5cbi0gKiBwb29sIC0gdGhlIHpzd2FwX3Bvb2wgdGhlIGVudHJ5J3MgZGF0YSBpcyBpblxuKyAqIHBvb2xfaWR4IC0gaWQgb2YgdGhlIHpzd2FwX3Bvb2wgdGhhdCB0aGUgZW50cnkncyBkYXRhIGlzIGluLlxuICAqIGhhbmRsZSAtIHpzbWFsbG9jIGFsbG9jYXRpb24gaGFuZGxlIHRoYXQgc3RvcmVzIHRoZSBjb21wcmVzc2VkIHBhZ2UgZGF0YVxuICAqIG9iamNnIC0gdGhlIG9ial9jZ3JvdXAgdGhhdCB0aGUgY29tcHJlc3NlZCBtZW1vcnkgaXMgY2hhcmdlZCB0b1xuICAqIGxydSAtIGhhbmRsZSB0byB0aGUgcG9vbCdzIGxydSB1c2VkIHRvIGV2aWN0IHBhZ2VzLlxuQEAgLTE5MSwxOSArMjAzLDI1IEBAIHN0cnVjdCB6c3dhcF9lbnRyeSB7XG4gXHRzd3BfZW50cnlfdCBzd3BlbnRyeTtcbiBcdHVuc2lnbmVkIGludCBsZW5ndGg7XG4gXHRib29sIHJlZmVyZW5jZWQ7XG4tXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDtcbitcdHU4IHBvb2xfaWR4O1xuIFx0dW5zaWduZWQgbG9uZyBoYW5kbGU7XG4gXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGxydTtcbiB9O1xuIFxuKy8qXG4rICogTm8gUkNVIHNlY3Rpb24gaXMgbmVlZGVkIGFyb3VuZCB0aGUgcmV0dXJuZWQgcG9pbnRlcjogYSBzdG9yZWQgZW50cnkgcGluc1xuKyAqIGl0cyBwb29sIHZpYSBwZXJjcHVfcmVmICh0YWtlbiBpbiB6c3dhcF9zdG9yZV9wYWdlKCkpLCBzbyB0aGUgaWQgY2Fubm90IGJlXG4rICogcmV1c2VkIHVuZGVyIHVzLiAgQ2FsbGVycyBXQVJOIGFuZCBoYW5kbGUgYSBOVUxMIGZyb20gYSBjb3JydXB0IHBvb2xfaWR4LlxuKyAqL1xuK3N0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfZW50cnlfcG9vbChzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxuK3tcbitcdHJldHVybiB4YV9sb2FkKFx1MDAyNnpzd2FwX3Bvb2xzLCBlbnRyeS1cdTAwM2Vwb29sX2lkeCk7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgeGFycmF5ICp6c3dhcF90cmVlc1tNQVhfU1dBUEZJTEVTXTtcbiBzdGF0aWMgdW5zaWduZWQgaW50IG5yX3pzd2FwX3RyZWVzW01BWF9TV0FQRklMRVNdO1xuIFxuLS8qIFJDVS1wcm90ZWN0ZWQgaXRlcmF0aW9uICovXG4tc3RhdGljIExJU1RfSEVBRCh6c3dhcF9wb29scyk7XG4tLyogcHJvdGVjdHMgenN3YXBfcG9vbHMgbGlzdCBtb2RpZmljYXRpb24gKi9cbi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHpzd2FwX3Bvb2xzX2xvY2spO1xuIC8qIHBvb2wgY291bnRlciB0byBwcm92aWRlIHVuaXF1ZSBuYW1lcyB0byB6c21hbGxvYyAqL1xuIHN0YXRpYyBhdG9taWNfdCB6c3dhcF9wb29sc19jb3VudCA9IEFUT01JQ19JTklUKDApO1xuIFxuQEAgLTI3NSw2ICsyOTMsNyBAQCBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3JlYXRlKGNoYXIgKmNvbXByZXNzb3IpXG4gXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDtcbiBcdGNoYXIgbmFtZVszOF07IC8qICd6c3dhcCcgKyAzMiBjaGFyIChtYXgpIG51bSArIFxcMCAqL1xuIFx0aW50IHJldCwgY3B1O1xuK1x0dTMyIGlkO1xuIFxuIFx0aWYgKCF6c3dhcF9oYXNfcG9vbCBcdTAwMjZcdTAwMjYgIXN0cmNtcChjb21wcmVzc29yLCBaU1dBUF9QQVJBTV9VTlNFVCkpXG4gXHRcdHJldHVybiBOVUxMO1xuQEAgLTMyMCwxMiArMzM5LDI5IEBAIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jcmVhdGUoY2hhciAqY29tcHJlc3NvcilcbiBcdFx0XHQgICAgICBQRVJDUFVfUkVGX0FMTE9XX1JFSU5JVCwgR0ZQX0tFUk5FTCk7XG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIHJlZl9mYWlsO1xuLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cG9vbC1cdTAwM2VsaXN0KTtcbitcbitcdC8qXG4rXHQgKiBQdWJsaXNoIG9ubHkgYWZ0ZXIgdGhlIHBvb2wgaXMgZnVsbHkgYnVpbHQsIHNvIGxvY2tsZXNzIHdhbGtlcnNcbitcdCAqIG5ldmVyIHNlZSBhIGhhbGYtaW5pdGlhbGl6ZWQgcG9vbC4gIFRoZSBfYmggdmFyaWFudCBwYWlycyB3aXRoIHRoZVxuK1x0ICogc29mdGlycS1jb250ZXh0IHhhX2xvY2sgdGFrZW4gaW4gX196c3dhcF9wb29sX2VtcHR5KCkuXG4rXHQgKi9cbitcdHJldCA9IHhhX2FsbG9jX2JoKFx1MDAyNnpzd2FwX3Bvb2xzLCBcdTAwMjZpZCwgcG9vbCxcbitcdFx0XHQgIFhBX0xJTUlUKFpTV0FQX0ZJUlNUX1BPT0xfSUQsIFpTV0FQX01BWF9QT09MX0lEKSxcbitcdFx0XHQgIEdGUF9LRVJORUwpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRpZiAocmV0ID09IC1FQlVTWSlcbitcdFx0XHRwcl9lcnIoXCJjYW5ub3QgYWxsb2NhdGUgcG9vbCBpZCAobWF4ICVkIGxpdmUgcG9vbHMpXFxuXCIsXG4rXHRcdFx0ICAgICAgIFpTV0FQX01BWF9QT09MX0lEIC0gWlNXQVBfRklSU1RfUE9PTF9JRCArIDEpO1xuK1x0XHRnb3RvIHhhX2ZhaWw7XG4rXHR9XG4rXHRwb29sLVx1MDAzZWlkeCA9IGlkO1xuIFxuIFx0enN3YXBfcG9vbF9kZWJ1ZyhcImNyZWF0ZWRcIiwgcG9vbCk7XG4gXG4gXHRyZXR1cm4gcG9vbDtcbiBcbit4YV9mYWlsOlxuK1x0cGVyY3B1X3JlZl9leGl0KFx1MDAyNnBvb2wtXHUwMDNlcmVmKTtcbiByZWZfZmFpbDpcbiBcdGNwdWhwX3N0YXRlX3JlbW92ZV9pbnN0YW5jZShDUFVIUF9NTV9aU1dQX1BPT0xfUFJFUEFSRSwgXHUwMDI2cG9vbC1cdTAwM2Vub2RlKTtcbiBcbkBAIC0zNzksMzcgKzQxNSwyOSBAQCBzdGF0aWMgdm9pZCB6c3dhcF9wb29sX2Rlc3Ryb3koc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wpXG4gXG4gc3RhdGljIHZvaWQgX196c3dhcF9wb29sX3JlbGVhc2Uoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIHtcbi1cdHN0cnVjdCB6c3dhcF9wb29sICpwb29sID0gY29udGFpbmVyX29mKHdvcmssIHR5cGVvZigqcG9vbCksXG4tXHRcdFx0XHRcdFx0cmVsZWFzZV93b3JrKTtcbi1cbi1cdHN5bmNocm9uaXplX3JjdSgpO1xuK1x0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSBjb250YWluZXJfb2YodG9fcmN1X3dvcmsod29yayksXG4rXHRcdFx0XHRcdCAgICAgICB0eXBlb2YoKnBvb2wpLCByZWxlYXNlX3J3b3JrKTtcbiBcbiBcdC8qIG5vYm9keSBzaG91bGQgaGF2ZSBiZWVuIGFibGUgdG8gZ2V0IGEgcmVmLi4uICovXG4gXHRXQVJOX09OKCFwZXJjcHVfcmVmX2lzX3plcm8oXHUwMDI2cG9vbC1cdTAwM2VyZWYpKTtcbiBcdHBlcmNwdV9yZWZfZXhpdChcdTAwMjZwb29sLVx1MDAzZXJlZik7XG4gXG4tXHQvKiBwb29sIGlzIG5vdyBvZmYgenN3YXBfcG9vbHMgbGlzdCBhbmQgaGFzIG5vIHJlZmVyZW5jZXMuICovXG4rXHQvKiBUaGUgcG9vbCBpcyBubyBsb25nZXIgaW4genN3YXBfcG9vbHMgYW5kIGhhcyBubyByZWZlcmVuY2VzLiAqL1xuIFx0enN3YXBfcG9vbF9kZXN0cm95KHBvb2wpO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3VycmVudCh2b2lkKTtcbi1cbiBzdGF0aWMgdm9pZCBfX3pzd2FwX3Bvb2xfZW1wdHkoc3RydWN0IHBlcmNwdV9yZWYgKnJlZilcbiB7XG4gXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDtcbiBcbiBcdHBvb2wgPSBjb250YWluZXJfb2YocmVmLCB0eXBlb2YoKnBvb2wpLCByZWYpO1xuIFxuLVx0c3Bpbl9sb2NrX2JoKFx1MDAyNnpzd2FwX3Bvb2xzX2xvY2spO1xuLVxuLVx0V0FSTl9PTihwb29sID09IHpzd2FwX3Bvb2xfY3VycmVudCgpKTtcbitcdFdBUk5fT04ocG9vbCA9PSByY3VfYWNjZXNzX3BvaW50ZXIoenN3YXBfY3VycmVudF9wb29sKSk7XG4gXG4tXHRsaXN0X2RlbF9yY3UoXHUwMDI2cG9vbC1cdTAwM2VsaXN0KTtcbitcdHhhX2VyYXNlX2JoKFx1MDAyNnpzd2FwX3Bvb2xzLCBwb29sLVx1MDAzZWlkeCk7XG4gXG4tXHRJTklUX1dPUksoXHUwMDI2cG9vbC1cdTAwM2VyZWxlYXNlX3dvcmssIF9fenN3YXBfcG9vbF9yZWxlYXNlKTtcbi1cdHNjaGVkdWxlX3dvcmsoXHUwMDI2cG9vbC1cdTAwM2VyZWxlYXNlX3dvcmspO1xuLVxuLVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2enN3YXBfcG9vbHNfbG9jayk7XG4rXHRJTklUX1JDVV9XT1JLKFx1MDAyNnBvb2wtXHUwMDNlcmVsZWFzZV9yd29yaywgX196c3dhcF9wb29sX3JlbGVhc2UpO1xuK1x0cXVldWVfcmN1X3dvcmsoc3lzdGVtX3BlcmNwdV93cSwgXHUwMDI2cG9vbC1cdTAwM2VyZWxlYXNlX3J3b3JrKTtcbiB9XG4gXG4gc3RhdGljIGludCBfX211c3RfY2hlY2sgenN3YXBfcG9vbF90cnlnZXQoc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wpXG5AQCAtNDM1LDIwICs0NjMsMTMgQEAgc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICpfX3pzd2FwX3Bvb2xfY3VycmVudCh2b2lkKVxuIHtcbiBcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sO1xuIFxuLVx0cG9vbCA9IGxpc3RfZmlyc3Rfb3JfbnVsbF9yY3UoXHUwMDI2enN3YXBfcG9vbHMsIHR5cGVvZigqcG9vbCksIGxpc3QpO1xuK1x0cG9vbCA9IHJjdV9kZXJlZmVyZW5jZSh6c3dhcF9jdXJyZW50X3Bvb2wpO1xuIFx0V0FSTl9PTkNFKCFwb29sIFx1MDAyNlx1MDAyNiB6c3dhcF9oYXNfcG9vbCxcbiBcdFx0ICBcIiVzOiBubyBwYWdlIHN0b3JhZ2UgcG9vbCFcXG5cIiwgX19mdW5jX18pO1xuIFxuIFx0cmV0dXJuIHBvb2w7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jdXJyZW50KHZvaWQpXG4te1xuLVx0YXNzZXJ0X3NwaW5fbG9ja2VkKFx1MDAyNnpzd2FwX3Bvb2xzX2xvY2spO1xuLVxuLVx0cmV0dXJuIF9fenN3YXBfcG9vbF9jdXJyZW50KCk7XG4tfVxuLVxuIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jdXJyZW50X2dldCh2b2lkKVxuIHtcbiBcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sO1xuQEAgLTQ2NCwyMyArNDg1LDI4IEBAIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jdXJyZW50X2dldCh2b2lkKVxuIFx0cmV0dXJuIHBvb2w7XG4gfVxuIFxuLS8qIHR5cGUgYW5kIGNvbXByZXNzb3IgbXVzdCBiZSBudWxsLXRlcm1pbmF0ZWQgKi9cbisvKiBjb21wcmVzc29yIG11c3QgYmUgbnVsbC10ZXJtaW5hdGVkICovXG4gc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2ZpbmRfZ2V0KGNoYXIgKmNvbXByZXNzb3IpXG4ge1xuIFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7XG4rXHR1bnNpZ25lZCBsb25nIGlkO1xuIFxuLVx0YXNzZXJ0X3NwaW5fbG9ja2VkKFx1MDAyNnpzd2FwX3Bvb2xzX2xvY2spO1xuLVxuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9vbCwgXHUwMDI2enN3YXBfcG9vbHMsIGxpc3QpIHtcbitcdC8qXG4rXHQgKiBfX3pzd2FwX3Bvb2xfZW1wdHkoKSBjYW4gZXJhc2UgZnJvbSB6c3dhcF9wb29scyBpbiBzb2Z0aXJxIHdoaWxlIHdlXG4rXHQgKiB3YWxrLiAgcmN1X3JlYWRfbG9jaygpIGtlZXBzIHRoZSB3YWxrIGNvbnNpc3RlbnQgYW5kIGVhY2ggcG9vbCBhbGl2ZVxuK1x0ICogYWNyb3NzIHRyeWdldCgpLiAgeGFfZm9yX2VhY2goKSdzIG93biBSQ1UgZG9lcyBub3Qgc3BhbiB0aGUgbG9vcCBib2R5LlxuK1x0ICovXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHR4YV9mb3JfZWFjaChcdTAwMjZ6c3dhcF9wb29scywgaWQsIHBvb2wpIHtcbiBcdFx0aWYgKHN0cmNtcChwb29sLVx1MDAzZXRmbV9uYW1lLCBjb21wcmVzc29yKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0LyogaWYgd2UgY2FuJ3QgZ2V0IGl0LCBpdCdzIGFib3V0IHRvIGJlIGRlc3Ryb3llZCAqL1xuLVx0XHRpZiAoIXpzd2FwX3Bvb2xfdHJ5Z2V0KHBvb2wpKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHRyZXR1cm4gcG9vbDtcbitcdFx0aWYgKHpzd2FwX3Bvb2xfdHJ5Z2V0KHBvb2wpKVxuK1x0XHRcdGJyZWFrO1xuIFx0fVxuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4tXHRyZXR1cm4gTlVMTDtcbitcdHJldHVybiBwb29sO1xuIH1cbiBcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyB6c3dhcF9tYXhfcGFnZXModm9pZClcbkBAIC00OTcsOSArNTIzLDE0IEBAIHVuc2lnbmVkIGxvbmcgenN3YXBfdG90YWxfcGFnZXModm9pZClcbiB7XG4gXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDtcbiBcdHVuc2lnbmVkIGxvbmcgdG90YWwgPSAwO1xuK1x0dW5zaWduZWQgbG9uZyBpZDtcbiBcbitcdC8qXG4rXHQgKiByY3VfcmVhZF9sb2NrKCkga2VlcHMgZWFjaCBwb29sIGFsaXZlIGFjcm9zcyB6c19nZXRfdG90YWxfcGFnZXMoKS5cbitcdCAqIHhhX2Zvcl9lYWNoKCkncyBvd24gUkNVIGRvZXMgbm90IHNwYW4gdGhlIGxvb3AgYm9keS5cbitcdCAqL1xuIFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9vbCwgXHUwMDI2enN3YXBfcG9vbHMsIGxpc3QpXG4rXHR4YV9mb3JfZWFjaChcdTAwMjZ6c3dhcF9wb29scywgaWQsIHBvb2wpXG4gXHRcdHRvdGFsICs9IHpzX2dldF90b3RhbF9wYWdlcyhwb29sLVx1MDAzZXpzX3Bvb2wpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG5AQCAtNTU2LDIwICs1ODcsMTMgQEAgc3RhdGljIGludCB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldChjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1cbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXHR9XG4gXG4tXHRzcGluX2xvY2tfYmgoXHUwMDI2enN3YXBfcG9vbHNfbG9jayk7XG4tXG4gXHRwb29sID0genN3YXBfcG9vbF9maW5kX2dldChzKTtcbi1cdGlmIChwb29sKSB7XG4rXHRpZiAoIXBvb2wpIHtcbitcdFx0cG9vbCA9IHpzd2FwX3Bvb2xfY3JlYXRlKHMpO1xuK1x0fSBlbHNlIHtcbiBcdFx0enN3YXBfcG9vbF9kZWJ1ZyhcInVzaW5nIGV4aXN0aW5nXCIsIHBvb2wpO1xuLVx0XHRXQVJOX09OKHBvb2wgPT0genN3YXBfcG9vbF9jdXJyZW50KCkpO1xuLVx0XHRsaXN0X2RlbF9yY3UoXHUwMDI2cG9vbC1cdTAwM2VsaXN0KTtcbi1cdH1cbitcdFx0V0FSTl9PTihwb29sID09IHJjdV9hY2Nlc3NfcG9pbnRlcih6c3dhcF9jdXJyZW50X3Bvb2wpKTtcbiBcbi1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnpzd2FwX3Bvb2xzX2xvY2spO1xuLVxuLVx0aWYgKCFwb29sKVxuLVx0XHRwb29sID0genN3YXBfcG9vbF9jcmVhdGUocyk7XG4tXHRlbHNlIHtcbiBcdFx0LypcbiBcdFx0ICogUmVzdG9yZSB0aGUgaW5pdGlhbCByZWYgZHJvcHBlZCBieSBwZXJjcHVfcmVmX2tpbGwoKVxuIFx0XHQgKiB3aGVuIHRoZSBwb29sIHdhcyBkZWNvbW1pc3Npb25lZCBhbmQgc3dpdGNoIGl0IGFnYWluXG5AQCAtNTg2LDI0ICs2MTAsMTggQEAgc3RhdGljIGludCB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldChjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1cbiBcdGVsc2VcbiBcdFx0cmV0ID0gLUVJTlZBTDtcbiBcbi1cdHNwaW5fbG9ja19iaChcdTAwMjZ6c3dhcF9wb29sc19sb2NrKTtcbi1cbitcdC8qXG4rXHQgKiBDb21wcmVzc29yIHN3aXRjaGVzIGFyZSBzZXJpYWxpemVkIGJ5IHRoZSBrZXJuZWwgcGFyYW0gbG9jaywgc28gdGhpc1xuK1x0ICogaXMgdGhlIG9ubHkgd3JpdGVyIG9mIHpzd2FwX2N1cnJlbnRfcG9vbDogbm8geGFfbG9jayBuZWVkZWQuXG4rXHQgKi9cbiBcdGlmICghcmV0KSB7XG4tXHRcdHB1dF9wb29sID0genN3YXBfcG9vbF9jdXJyZW50KCk7XG4tXHRcdGxpc3RfYWRkX3JjdShcdTAwMjZwb29sLVx1MDAzZWxpc3QsIFx1MDAyNnpzd2FwX3Bvb2xzKTtcbitcdFx0cHV0X3Bvb2wgPSByY3VfYWNjZXNzX3BvaW50ZXIoenN3YXBfY3VycmVudF9wb29sKTtcbitcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHpzd2FwX2N1cnJlbnRfcG9vbCwgcG9vbCk7XG4gXHRcdHpzd2FwX2hhc19wb29sID0gdHJ1ZTtcbiBcdH0gZWxzZSBpZiAocG9vbCkge1xuLVx0XHQvKlxuLVx0XHQgKiBBZGQgdGhlIHBvc3NpYmx5IHByZS1leGlzdGluZyBwb29sIHRvIHRoZSBlbmQgb2YgdGhlIHBvb2xzXG4tXHRcdCAqIGxpc3Q7IGlmIGl0J3MgbmV3IChhbmQgZW1wdHkpIHRoZW4gaXQnbGwgYmUgcmVtb3ZlZCBhbmRcbi1cdFx0ICogZGVzdHJveWVkIGJ5IHRoZSBwdXQgYWZ0ZXIgd2UgZHJvcCB0aGUgbG9ja1xuLVx0XHQgKi9cbi1cdFx0bGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2cG9vbC1cdTAwM2VsaXN0LCBcdTAwMjZ6c3dhcF9wb29scyk7XG4gXHRcdHB1dF9wb29sID0gcG9vbDtcbiBcdH1cbiBcbi1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnpzd2FwX3Bvb2xzX2xvY2spO1xuLVxuIFx0LypcbiBcdCAqIERyb3AgdGhlIHJlZiBmcm9tIGVpdGhlciB0aGUgb2xkIGN1cnJlbnQgcG9vbCxcbiBcdCAqIG9yIHRoZSBuZXcgcG9vbCB3ZSBmYWlsZWQgdG8gYWRkXG5AQCAtNzUxLDkgKzc2OSwxMyBAQCBzdGF0aWMgdm9pZCB6c3dhcF9lbnRyeV9jYWNoZV9mcmVlKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXG4gICovXG4gc3RhdGljIHZvaWQgenN3YXBfZW50cnlfZnJlZShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxuIHtcbitcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sID0genN3YXBfZW50cnlfcG9vbChlbnRyeSk7XG4rXG4gXHR6c3dhcF9scnVfZGVsKGVudHJ5KTtcbi1cdHpzX2ZyZWUoZW50cnktXHUwMDNlcG9vbC1cdTAwM2V6c19wb29sLCBlbnRyeS1cdTAwM2VoYW5kbGUpO1xuLVx0enN3YXBfcG9vbF9wdXQoZW50cnktXHUwMDNlcG9vbCk7XG4rXHRpZiAoIVdBUk5fT05fT05DRSghcG9vbCkpIHtcbitcdFx0enNfZnJlZShwb29sLVx1MDAzZXpzX3Bvb2wsIGVudHJ5LVx1MDAzZWhhbmRsZSk7XG4rXHRcdHpzd2FwX3Bvb2xfcHV0KHBvb2wpO1xuK1x0fVxuIFx0aWYgKGVudHJ5LVx1MDAzZW9iamNnKSB7XG4gXHRcdG9ial9jZ3JvdXBfdW5jaGFyZ2VfenN3YXAoZW50cnktXHUwMDNlb2JqY2csIGVudHJ5LVx1MDAzZWxlbmd0aCk7XG4gXHRcdG9ial9jZ3JvdXBfcHV0KGVudHJ5LVx1MDAzZW9iamNnKTtcbkBAIC05MTAsMTIgKzkzMiwxNSBAQCBzdGF0aWMgYm9vbCB6c3dhcF9jb21wcmVzcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcbiBzdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuLVx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSBlbnRyeS1cdTAwM2Vwb29sO1xuK1x0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSB6c3dhcF9lbnRyeV9wb29sKGVudHJ5KTtcbiBcdHN0cnVjdCBzY2F0dGVybGlzdCBpbnB1dFsyXTsgLyogenNtYWxsb2MgcmV0dXJucyBhbiBTRyBsaXN0IDEtMiBlbnRyaWVzICovXG4gXHRzdHJ1Y3Qgc2NhdHRlcmxpc3Qgb3V0cHV0O1xuIFx0c3RydWN0IGNyeXB0b19hY29tcF9jdHggKmFjb21wX2N0eDtcbiBcdGludCByZXQgPSAwLCBkbGVuO1xuIFxuK1x0aWYgKFdBUk5fT05fT05DRSghcG9vbCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbiBcdGFjb21wX2N0eCA9IHJhd19jcHVfcHRyKHBvb2wtXHUwMDNlYWNvbXBfY3R4KTtcbiBcdG11dGV4X2xvY2soXHUwMDI2YWNvbXBfY3R4LVx1MDAzZW11dGV4KTtcbiBcdHpzX29ial9yZWFkX3NnX2JlZ2luKHBvb2wtXHUwMDNlenNfcG9vbCwgZW50cnktXHUwMDNlaGFuZGxlLCBpbnB1dCwgZW50cnktXHUwMDNlbGVuZ3RoKTtcbkBAIC05NTEsNyArOTc2LDcgQEAgc3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0cHJfYWxlcnRfcmF0ZWxpbWl0ZWQoXCJEZWNvbXByZXNzaW9uIGVycm9yIGZyb20genN3YXAgKCVkOiVsdSAlcyAldS1cdTAwM2UlZClcXG5cIixcbiBcdFx0XHRcdFx0XHRzd3BfdHlwZShlbnRyeS1cdTAwM2Vzd3BlbnRyeSksXG4gXHRcdFx0XHRcdFx0c3dwX29mZnNldChlbnRyeS1cdTAwM2Vzd3BlbnRyeSksXG4tXHRcdFx0XHRcdFx0ZW50cnktXHUwMDNlcG9vbC1cdTAwM2V0Zm1fbmFtZSxcbitcdFx0XHRcdFx0XHRwb29sLVx1MDAzZXRmbV9uYW1lLFxuIFx0XHRcdFx0XHRcdGVudHJ5LVx1MDAzZWxlbmd0aCwgZGxlbik7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuQEAgLTE0MDksNiArMTQzNCwxMyBAQCBzdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0aWYgKCF6c3dhcF9jb21wcmVzcyhwYWdlLCBlbnRyeSwgcG9vbCkpXG4gXHRcdGdvdG8gY29tcHJlc3NfZmFpbGVkO1xuIFxuK1x0LypcbitcdCAqIFNldCBwb29sX2lkeCBiZWZvcmUgdGhlIHhhX3N0b3JlKCkgYmVsb3cgcHVibGlzaGVzIHRoZSBlbnRyeSwgb3IgYVxuK1x0ICogY29uY3VycmVudCByZWFkZXIgY291bGQgcmVzb2x2ZSBhIHN0YWxlIHBvb2xfaWR4IGxlZnQgYnkgc2xhYiByZXVzZVxuK1x0ICogdG8gYW4gdW5yZWxhdGVkIGxpdmUgcG9vbC5cbitcdCAqL1xuK1x0ZW50cnktXHUwMDNlcG9vbF9pZHggPSBwb29sLVx1MDAzZWlkeDtcbitcbiBcdG9sZCA9IHhhX3N0b3JlKHN3YXBfenN3YXBfdHJlZShwYWdlX3N3cGVudHJ5KSxcbiBcdFx0ICAgICAgIHN3cF9vZmZzZXQocGFnZV9zd3BlbnRyeSksXG4gXHRcdCAgICAgICBlbnRyeSwgR0ZQX0tFUk5FTCk7XG5AQCAtMTQ1NCw3ICsxNDg2LDYgQEAgc3RhdGljIGJvb2wgenN3YXBfc3RvcmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdCAqICAgIFRoZSBwdWJsaXNoaW5nIG9yZGVyIG1hdHRlcnMgdG8gcHJldmVudCB3cml0ZWJhY2sgZnJvbSBzZWVpbmdcbiBcdCAqICAgIGFuIGluY29oZXJlbnQgZW50cnkuXG4gXHQgKi9cbi1cdGVudHJ5LVx1MDAzZXBvb2wgPSBwb29sO1xuIFx0ZW50cnktXHUwMDNlc3dwZW50cnkgPSBwYWdlX3N3cGVudHJ5O1xuIFx0ZW50cnktXHUwMDNlb2JqY2cgPSBvYmpjZztcbiBcdGVudHJ5LVx1MDAzZXJlZmVyZW5jZWQgPSB0cnVlO1xuQEAgLTE3OTAsNyArMTgyMSw3IEBAIHN0YXRpYyBpbnQgenN3YXBfc2V0dXAodm9pZClcbiBcdHBvb2wgPSBfX3pzd2FwX3Bvb2xfY3JlYXRlX2ZhbGxiYWNrKCk7XG4gXHRpZiAocG9vbCkge1xuIFx0XHRwcl9pbmZvKFwibG9hZGVkIHVzaW5nIHBvb2wgJXNcXG5cIiwgcG9vbC1cdTAwM2V0Zm1fbmFtZSk7XG4tXHRcdGxpc3RfYWRkKFx1MDAyNnBvb2wtXHUwMDNlbGlzdCwgXHUwMDI2enN3YXBfcG9vbHMpO1xuK1x0XHRyY3VfYXNzaWduX3BvaW50ZXIoenN3YXBfY3VycmVudF9wb29sLCBwb29sKTtcbiBcdFx0enN3YXBfaGFzX3Bvb2wgPSB0cnVlO1xuIFx0XHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcdTAwMjZ6c3dhcF9ldmVyX2VuYWJsZWQpO1xuIFx0fSBlbHNlIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIwOjE4OjI4Ljg1ODY4Nzg3NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQwMTY3MjY5NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBac3dhcCBQYXRjaDogQSBGdXp6aW5nIFBlcnNwZWN0aXZlKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggdGFyZ2V0aW5nIGBtbS96c3dhcC5jYCBmb3IgYW1kNjQuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgc2lnbmlmaWNhbnQuIEl0J3Mgbm90IGp1c3QgYSBtaW5vciB0d2VhazsgdGhpcyBpcyBhIHJlZmFjdG9yaW5nIG9mIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyB3aXRoaW4gdGhlIHpzd2FwIHN1YnN5c3RlbS4gV2UncmUgdGFsa2luZyBhYm91dCByZXBsYWNpbmcgYGxpc3RfaGVhZGAgd2l0aCBhbiBgeGFycmF5YCwgcG9pbnRlcnMgd2l0aCBpbmRpY2VzIChgdTggcG9vbF9pZHhgKSwgYW5kIGludHJvZHVjaW5nIG5ldyBoZWxwZXIgZnVuY3Rpb25zIGxpa2UgYHpzd2FwX2VudHJ5X3Bvb2woKWAuIFRoaXMgaW1wbGllcyBhIGZ1bmRhbWVudGFsIHNoaWZ0IGluIGhvdyB6c3dhcCBwb29scyBhbmQgZW50cmllcyBhcmUgbWFuYWdlZC5cblxuVGhlIGNoYW5nZXMgdG8gdGhlIGNvbmN1cnJlbmN5IG1vZGVsIOKAkyBlbWJyYWNpbmcgUkNVIGFuZCB3b3JrcXVldWVzIHdpdGggYHJjdV93b3JrYCwgYHF1ZXVlX3JjdV93b3JrYCwgYW5kIHRoZSB4YXJyYXkgb3BlcmF0aW9ucyDigJMgYXJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy4gVGhpcyBsZXZlbCBvZiBjb25jdXJyZW5jeSBtb2RpZmljYXRpb24gaW4gbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBhbHdheXMgd2FycmFudHMgY2xvc2UgYXR0ZW50aW9uLCBhcyBpdCBpbnRyb2R1Y2VzIG5ldyBsb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb24gY2hhbGxlbmdlcy4gVGhlcmUgYXJlIHNvbWUgY2hhbmdlcyB0byBhc3NlcnRpb25zLCB3aGljaCBpcyBhbHNvIGhlbHBmdWwgaW4gdW5kZXJzdGFuZGluZyB0aGUgY29kZS5cblxuVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lcywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBCYXNlZCBvbiBteSB0cmlhZ2UgcGhpbG9zb3BoeSwgaXQncyBhIGNsZWFyIHllcy4gUmVhY2hhYmlsaXR5IGlzIHN0cmFpZ2h0Zm9yd2FyZDsgenN3YXAgaXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbXBvbmVudCwgcmVhZGlseSBhY2Nlc3NpYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB3aXRoIHN3YXAgZW5hYmxlZC4gVGhlIGNoYW5nZXMgYXJlIG1vcmUgdGhhbiBqdXN0IGNvc21ldGljLiBUaGlzIHBhdGNoIGNvbXBsZXRlbHkgcmVmYWN0b3JzIHRoZSB1bmRlcmx5aW5nIGxvZ2ljLCBkYXRhIHN0cnVjdHVyZXMsIGFuZCBjb25jdXJyZW5jeSBtZWNoYW5pc21zLiBUaGlzIGxldmVsIG9mIGFyY2hpdGVjdHVyYWwgY2hhbmdlLCBlc3BlY2lhbGx5IGFyb3VuZCBtZW1vcnkgbWFuYWdlbWVudCwgaXMgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuXG5cbkknbGwgcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgZm9yIGBtbS96c3dhcC5jYCB1c2luZyBgZ3JlcHBlcmAgb3IgY2hlY2tpbmcgYG1tL0tjb25maWdgIHRvIGJlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBvZiB0aGlzLiBCdXQgaW4gbXkgZXhwZXJ0IG9waW5pb24sIHRoaXMgbG9va3MgbGlrZSBhIGhpZ2gtcHJpb3JpdHkgZnV6emluZyB0YXJnZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxOTgsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMDoxODozMi44NzU0MTc4NzVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEwNzgwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFpTV0FQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEyPW1lbnVjb25maWcgU1dBUFxcbi0tXFxubW0vS2NvbmZpZy0yMS1cXG5tbS9LY29uZmlnOjIyOmNvbmZpZyBaU1dBUFxcbm1tL0tjb25maWctMjMtXFx0Ym9vbCBcXFwiQ29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1xcXCJcXG4tLVxcbm1tL0tjb25maWctMzQtXFxubW0vS2NvbmZpZzozNTpjb25maWcgWlNXQVBfREVGQVVMVF9PTlxcbm1tL0tjb25maWctMzYtXFx0Ym9vbCBcXFwiRW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTQ0LVxcbm1tL0tjb25maWc6NDU6Y29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cXG5tbS9LY29uZmlnLTQ2LVxcdGJvb2wgXFxcIlNocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTU5PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy03Ni1cXG5tbS9LY29uZmlnOjc3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfREVGTEFURVxcbm1tL0tjb25maWctNzgtXFx0Ym9vbCBcXFwiRGVmbGF0ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctODItXFxubW0vS2NvbmZpZzo4Mzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaT1xcbm1tL0tjb25maWctODQtXFx0Ym9vbCBcXFwiTFpPXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04OC1cXG5tbS9LY29uZmlnOjg5OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfODQyXFxubW0vS2NvbmZpZy05MC1cXHRib29sIFxcXCI4NDJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk0LVxcbm1tL0tjb25maWc6OTU6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjRcXG5tbS9LY29uZmlnLTk2LVxcdGJvb2wgXFxcIkxaNFxcXCJcXG4tLVxcbm1tL0tjb25maWctMTAwLVxcbm1tL0tjb25maWc6MTAxOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0SENcXG5tbS9LY29uZmlnLTEwMi1cXHRib29sIFxcXCJMWjRIQ1xcXCJcXG4tLVxcbm1tL0tjb25maWctMTA2LVxcbm1tL0tjb25maWc6MTA3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfWlNURFxcbm1tL0tjb25maWctMTA4LVxcdGJvb2wgXFxcInpzdGRcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTExMj1lbmRjaG9pY2VcXG5tbS9LY29uZmlnLTExMy1cXG5tbS9LY29uZmlnOjExNDpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXFxubW0vS2NvbmZpZy0xMTUtICAgICAgIHN0cmluZ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMDoxODozMi45MjY1MDE1NjRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjgxNTk3ODM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLY29uZmlnIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIGJhc2VkIG9uIHRoaXMsIHRoZSBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGlzIHByb2JhYmx5IGluIGBtbS9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IHNvbWV3aGVyZSBpbiB0aGUgbGluZXMgYmV0d2VlbiAyMCBhbmQgNDAuIFRoYXQgcmFuZ2UgaXMgdXN1YWxseSB3aGVyZSB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQuIEdpdmVuIHRoZSB0YXNrLCBJJ20gYmV0dGluZyB0aGF0IHRoZSByZWxldmFudCBmbGFncyBvciBmZWF0dXJlIGVuYWJsaW5nIGxvZ2ljIGlzIGluIHRoYXQgaW1tZWRpYXRlIHZpY2luaXR5LiBMZXQncyBzZWUgaWYgdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkIGluIHRoaXMgcmFuZ2UuIEZyb20gdGhlcmUgSSBjYW4gZGV0ZXJtaW5lIHdoZXJlIEkgbmVlZCB0byBjb250aW51ZSBteSBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjM0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjA6MTg6MzQuNjA4MTAxOTg4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxMzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTIsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMTI6XFx0bWVudWNvbmZpZyBTV0FQXFxuICAxMzpcXHRcXHRib29sIFxcXCJTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcXFwiXFxuICAxNDpcXHRcXHRkZXBlbmRzIG9uIE1NVSBcXHUwMDI2XFx1MDAyNiBCTE9DSyBcXHUwMDI2XFx1MDAyNiAhQVJDSF9OT19TV0FQXFxuICAxNTpcXHRcXHRkZWZhdWx0IHlcXG4gIDE2OlxcdFxcdGhlbHBcXG4gIDE3OlxcdFxcdCAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBjaG9vc2Ugd2hldGhlciB5b3Ugd2FudCB0byBoYXZlIHN1cHBvcnRcXG4gIDE4OlxcdFxcdCAgZm9yIHNvIGNhbGxlZCBzd2FwIGRldmljZXMgb3Igc3dhcCBmaWxlcyBpbiB5b3VyIGtlcm5lbCB0aGF0IGFyZVxcbiAgMTk6XFx0XFx0ICB1c2VkIHRvIHByb3ZpZGUgbW9yZSB2aXJ0dWFsIG1lbW9yeSB0aGFuIHRoZSBhY3R1YWwgUkFNIHByZXNlbnRcXG4gIDIwOlxcdFxcdCAgaW4geW91ciBjb21wdXRlci4gIElmIHVuc3VyZSBzYXkgWS5cXG4gIDIxOlxcdFxcbiAgMjI6XFx0Y29uZmlnIFpTV0FQXFxuICAyMzpcXHRcXHRib29sIFxcXCJDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXFxcIlxcbiAgMjQ6XFx0XFx0ZGVwZW5kcyBvbiBTV0FQXFxuICAyNTpcXHRcXHRzZWxlY3QgQ1JZUFRPXFxuICAyNjpcXHRcXHRzZWxlY3QgWlNNQUxMT0NcXG4gIDI3OlxcdFxcdGhlbHBcXG4gIDI4OlxcdFxcdCAgQSBsaWdodHdlaWdodCBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzLiAgSXQgdGFrZXNcXG4gIDI5OlxcdFxcdCAgcGFnZXMgdGhhdCBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgc3dhcHBlZCBvdXQgYW5kIGF0dGVtcHRzIHRvXFxuICAzMDpcXHRcXHQgIGNvbXByZXNzIHRoZW0gaW50byBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBSQU0tYmFzZWQgbWVtb3J5IHBvb2wuXFxuICAzMTpcXHRcXHQgIFRoaXMgY2FuIHJlc3VsdCBpbiBhIHNpZ25pZmljYW50IEkvTyByZWR1Y3Rpb24gb24gc3dhcCBkZXZpY2UgYW5kLFxcbiAgMzI6XFx0XFx0ICBpbiB0aGUgY2FzZSB3aGVyZSBkZWNvbXByZXNzaW5nIGZyb20gUkFNIGlzIGZhc3RlciB0aGFuIHN3YXAgZGV2aWNlXFxuICAzMzpcXHRcXHQgIHJlYWRzLCBjYW4gYWxzbyBpbXByb3ZlIHdvcmtsb2FkIHBlcmZvcm1hbmNlLlxcbiAgMzQ6XFx0XFxuICAzNTpcXHRjb25maWcgWlNXQVBfREVGQVVMVF9PTlxcbiAgMzY6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcXFwiXFxuICAzNzpcXHRcXHRkZXBlbmRzIG9uIFpTV0FQXFxuICAzODpcXHRcXHRoZWxwXFxuICAzOTpcXHRcXHQgIElmIHNlbGVjdGVkLCB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyB3aWxsIGJlIGVuYWJsZWRcXG4gIDQwOlxcdFxcdCAgYXQgYm9vdCwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgZGlzYWJsZWQuXFxuICA0MTpcXHRcXG4gIDQyOlxcdFxcdCAgVGhlIHNlbGVjdGlvbiBtYWRlIGhlcmUgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdXNpbmcgdGhlIGtlcm5lbFxcbiAgNDM6XFx0XFx0ICBjb21tYW5kIGxpbmUgJ3pzd2FwLmVuYWJsZWQ9JyBvcHRpb24uXFxuICA0NDpcXHRcXG4gIDQ1OlxcdGNvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXFxuICA0NjpcXHRcXHRib29sIFxcXCJTaHJpbmsgdGhlIHpzd2FwIHBvb2wgb24gbWVtb3J5IHByZXNzdXJlXFxcIlxcbiAgNDc6XFx0XFx0ZGVwZW5kcyBvbiBaU1dBUFxcbiAgNDg6XFx0XFx0ZGVmYXVsdCBuXFxuICA0OTpcXHRcXHRoZWxwXFxuICA1MDpcXHRcXHQgIElmIHNlbGVjdGVkLCB0aGUgenN3YXAgc2hyaW5rZXIgd2lsbCBiZSBlbmFibGVkLCBhbmQgdGhlIHBhZ2VzXFxuICA1MTpcXHRcXHQgIHN0b3JlZCBpbiB0aGUgenN3YXAgcG9vbCB3aWxsIGJlY29tZSBhdmFpbGFibGUgZm9yIHJlY2xhaW0gKGkuZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMDoxODozNC42MDgyMDUxMThaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTkzMjQyOTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS2VybmVsJ3MgWnN3YXAgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyB6c3dhcCBjb2RlLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIGBDT05GSUdfWlNXQVBgIGFuZCBgQ09ORklHX1NXQVBgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCdzIHN3YXAgaGFuZGxpbmcgaW50ZXJhY3RzIHdpdGggdGhlIHpzd2FwIGZ1bmN0aW9uYWxpdHkuXG5cbkZpcnN0LCBJJ2xsIGV4YW1pbmUgdGhlIGNoYW5nZXMgd2l0aGluIGBtbS96c3dhcC5jYC4gSSdtIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRoZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIHN5bWJvbHMuIFNvLCBJIHNlZSB0aGluZ3MgbGlrZSBgenN3YXBfZW50cnlfcG9vbGAsIHdoaWNoIGlzIHN0YXRpYywgYW5kIGl0cyByZWxhdGVkIGZ1bmN0aW9ucy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgenN3YXBfZW50cnlfcG9vbGAgaXMgaW5kZWVkIHN0YXRpYyB3aXRoaW4gYG1tL3pzd2FwLmNgLiBUaGVuLCBJJ2xsIHNjYW4gdGhlIHBvb2wgZnVuY3Rpb25zOiBgenN3YXBfcG9vbF9jcmVhdGVgLCBgX196c3dhcF9wb29sX3JlbGVhc2VgLCBgX196c3dhcF9wb29sX2VtcHR5YCwgYW5kIGB6c3dhcF9wb29sX2ZpbmRfZ2V0YC4gSSdsbCBhbHNvIG5vdGUgYHpzd2FwX3RvdGFsX3BhZ2VzYCwgYHpzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0YCwgYHpzd2FwX2VudHJ5X2ZyZWVgLCBgenN3YXBfZGVjb21wcmVzc2AsIGB6c3dhcF9zdG9yZV9wYWdlYCwgYHpzd2FwX3N0b3JlYCwgYHpzd2FwX2xvYWRgLCBhbmQgYHpzd2FwX3NldHVwYC5cblxuTm93LCBJJ20gdGhpbmtpbmcgSSdsbCB6b29tIGluIG9uIHRoZSBub24tdWJpcXVpdG91cywgc3BlY2lmaWMgZnVuY3Rpb25zIHRoYXQgYXJlIG1vZGlmaWVkIG9yIGV4ZXJjaXNlIHRoaXMgbG9naWMgd2l0aGluIGBtbS96c3dhcC5jYC4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBicm9hZGVyIHN3YXAgbWVjaGFuaXNtLiBJJ2xsIG5lZWQgdG8gcmVhZCBhcm91bmQgYHpzd2FwX3N0b3JlYCwgYHpzd2FwX2xvYWRgLCBldGMuLCBpbiBgbW0venN3YXAuY2AgdG8gaWRlbnRpZnkgYW55IGV4dGVybmFsL25vbi1zdGF0aWMgc3ltYm9scyBvciBrZXkgZnVuY3Rpb25zIHRoYXQgSSBzaG91bGQgcGF5IGNsb3NlIGF0dGVudGlvbiB0bywgYXMgdGhleSdsbCBsaWtlbHkgYmUgdGhlIGhvb2tzIGludG8gdGhlIHJlc3Qgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM4NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIwOjE4OjM3LjYwMTQ1MDY5MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTg0NjIxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6c3dhcF9zdG9yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS96c3dhcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3pzd2FwLmMtNDctLyogVGhlIG51bWJlciBvZiBwYWdlcyBjdXJyZW50bHkgc3RvcmVkIGluIHpzd2FwICovXFxubW0venN3YXAuYzo0ODphdG9taWNfbG9uZ190IHpzd2FwX3N0b3JlZF9wYWdlcyA9IEFUT01JQ19MT05HX0lOSVQoMCk7XFxubW0venN3YXAuYy00OS0vKiBUaGUgbnVtYmVyIG9mIGluY29tcHJlc3NpYmxlIHBhZ2VzIGN1cnJlbnRseSBzdG9yZWQgaW4genN3YXAgKi9cXG5tbS96c3dhcC5jOjUwOnN0YXRpYyBhdG9taWNfbG9uZ190IHpzd2FwX3N0b3JlZF9pbmNvbXByZXNzaWJsZV9wYWdlcyA9IEFUT01JQ19MT05HX0lOSVQoMCk7XFxubW0venN3YXAuYy01MS1cXG4tLVxcbm1tL3pzd2FwLmM9MjAyPXN0cnVjdCB6c3dhcF9lbnRyeSB7XFxuLS1cXG5tbS96c3dhcC5jLTIxMy0gKiBObyBSQ1Ugc2VjdGlvbiBpcyBuZWVkZWQgYXJvdW5kIHRoZSByZXR1cm5lZCBwb2ludGVyOiBhIHN0b3JlZCBlbnRyeSBwaW5zXFxubW0venN3YXAuYzoyMTQ6ICogaXRzIHBvb2wgdmlhIHBlcmNwdV9yZWYgKHRha2VuIGluIHpzd2FwX3N0b3JlX3BhZ2UoKSksIHNvIHRoZSBpZCBjYW5ub3QgYmVcXG5tbS96c3dhcC5jLTIxNS0gKiByZXVzZWQgdW5kZXIgdXMuICBDYWxsZXJzIFdBUk4gYW5kIGhhbmRsZSBhIE5VTEwgZnJvbSBhIGNvcnJ1cHQgcG9vbF9pZHguXFxuLS1cXG5tbS96c3dhcC5jPTc3MD1zdGF0aWMgdm9pZCB6c3dhcF9lbnRyeV9mcmVlKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXFxuLS1cXG5tbS96c3dhcC5jLTc4My1cXHRpZiAoZW50cnktXFx1MDAzZWxlbmd0aCA9PSBQQUdFX1NJWkUpXFxubW0venN3YXAuYzo3ODQ6XFx0XFx0YXRvbWljX2xvbmdfZGVjKFxcdTAwMjZ6c3dhcF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXMpO1xcbm1tL3pzd2FwLmMtNzg1LVxcdHpzd2FwX2VudHJ5X2NhY2hlX2ZyZWUoZW50cnkpO1xcbm1tL3pzd2FwLmM6Nzg2OlxcdGF0b21pY19sb25nX2RlYyhcXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcXG5tbS96c3dhcC5jLTc4Ny19XFxuLS1cXG5tbS96c3dhcC5jPTkzMz1zdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS96c3dhcC5jLTk5My0gKiB0byB0aGUgc3dhcCBkZXZpY2UuICBXZSBhcmUgYmFzaWNhbGx5IHJlc3VtaW5nIHRoZSBzYW1lIHN3YXBcXG5tbS96c3dhcC5jOjk5NDogKiB3cml0ZWJhY2sgcGF0aCB0aGF0IHdhcyBpbnRlcmNlcHRlZCB3aXRoIHRoZSB6c3dhcF9zdG9yZSgpXFxubW0venN3YXAuYy05OTUtICogaW4gdGhlIGZpcnN0IHBsYWNlLiAgQWZ0ZXIgdGhlIGZvbGlvIGhhcyBiZWVuIGRlY29tcHJlc3NlZCBpbnRvXFxuLS1cXG5tbS96c3dhcC5jPTEyMDQ9c3RhdGljIHVuc2lnbmVkIGxvbmcgenN3YXBfc2hyaW5rZXJfY291bnQoc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcXG4tLVxcbm1tL3pzd2FwLmMtMTIzOC1cXHRcXHRucl9iYWNraW5nID0genN3YXBfdG90YWxfcGFnZXMoKTtcXG5tbS96c3dhcC5jOjEyMzk6XFx0XFx0bnJfc3RvcmVkID0gYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcXG5tbS96c3dhcC5jLTEyNDAtXFx0fVxcbi0tXFxubW0venN3YXAuYz0xMzI5PXN0YXRpYyB2b2lkIHNocmlua193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxcbi0tXFxubW0venN3YXAuYy0xNDE5LVxcbm1tL3pzd2FwLmM6MTQyMDpzdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxcbm1tL3pzd2FwLmMtMTQyMS1cXHRcXHRcXHQgICAgIHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcXG4tLVxcbm1tL3pzd2FwLmMtMTQ2NS1cXHQgKiBubyBmdXJ0aGVyIHBvc3NpYmlsaXR5IG9mIGZhaWx1cmUuIEdyYWIgcmVmcyB0byB0aGUgcG9vbCBhbmQgb2JqY2csXFxubW0venN3YXAuYzoxNDY2OlxcdCAqIGNoYXJnZSB6c3dhcCBtZW1vcnksIGFuZCBpbmNyZW1lbnQgenN3YXBfc3RvcmVkX3BhZ2VzLlxcbm1tL3pzd2FwLmMtMTQ2Ny1cXHQgKiBUaGUgb3Bwb3NpdGUgYWN0aW9ucyB3aWxsIGJlIHBlcmZvcm1lZCBieSB6c3dhcF9lbnRyeV9mcmVlKClcXG4tLVxcbm1tL3pzd2FwLmMtMTQ3NC1cXHR9XFxubW0venN3YXAuYzoxNDc1OlxcdGF0b21pY19sb25nX2luYyhcXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcXG5tbS96c3dhcC5jLTE0NzYtXFx0aWYgKGVudHJ5LVxcdTAwM2VsZW5ndGggPT0gUEFHRV9TSVpFKVxcbm1tL3pzd2FwLmM6MTQ3NzpcXHRcXHRhdG9taWNfbG9uZ19pbmMoXFx1MDAyNnpzd2FwX3N0b3JlZF9pbmNvbXByZXNzaWJsZV9wYWdlcyk7XFxubW0venN3YXAuYy0xNDc4LVxcbi0tXFxubW0venN3YXAuYy0xNTA1LVxcbm1tL3pzd2FwLmM6MTUwNjpib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0venN3YXAuYy0xNTA3LXtcXG4tLVxcbm1tL3pzd2FwLmMtMTU1MC1cXG5tbS96c3dhcC5jOjE1NTE6XFx0XFx0aWYgKCF6c3dhcF9zdG9yZV9wYWdlKHBhZ2UsIG9iamNnLCBwb29sKSlcXG5tbS96c3dhcC5jLTE1NTItXFx0XFx0XFx0Z290byBwdXRfcG9vbDtcXG4tLVxcbm1tL3pzd2FwLmM9MTczMT1zdGF0aWMgaW50IGRlYnVnZnNfZ2V0X3N0b3JlZF9wYWdlcyh2b2lkICpkYXRhLCB1NjQgKnZhbClcXG5tbS96c3dhcC5jLTE3MzIte1xcbm1tL3pzd2FwLmM6MTczMzpcXHQqdmFsID0gYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcXG5tbS96c3dhcC5jLTE3MzQtXFx0cmV0dXJuIDA7XFxuLS1cXG5tbS96c3dhcC5jPTE3Mzg9c3RhdGljIGludCBkZWJ1Z2ZzX2dldF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXModm9pZCAqZGF0YSwgdTY0ICp2YWwpXFxubW0venN3YXAuYy0xNzM5LXtcXG5tbS96c3dhcC5jOjE3NDA6XFx0KnZhbCA9IGF0b21pY19sb25nX3JlYWQoXFx1MDAyNnpzd2FwX3N0b3JlZF9pbmNvbXByZXNzaWJsZV9wYWdlcyk7XFxubW0venN3YXAuYy0xNzQxLVxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMDoxODozNy42NTEzMDQxMTFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjI5MTc2MTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpdmluZyBpbnRvIHRoZSBac3dhcCBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIFpzd2FwIGludGVybmFscywgc28gZmlyc3QgdGhpbmdzIGZpcnN0OiB0aGUgZnVuY3Rpb25zIGluIGBtbS96c3dhcC5jYCBhcmUgd2hhdCBJIG5lZWQgdG8gZm9jdXMgb24uIEkgc2VlIHdlIGhhdmUgdGhlIGNvcmUgb3BlcmF0aW9uczogYHpzd2FwX3N0b3JlYCwgYHpzd2FwX2xvYWRgLCBgenN3YXBfc3RvcmVfcGFnZWAgZm9yIGRhdGEgaGFuZGxpbmcsIGB6c3dhcF9lbnRyeV9mcmVlYCBmb3IgaG91c2VrZWVwaW5nLCBhbmQgYHpzd2FwX2RlY29tcHJlc3NgIGZvciBvYnZpb3VzIHJlYXNvbnMuIFRoZW4gdGhlcmUncyBwb29sIG1hbmFnZW1lbnQ6IGB6c3dhcF9wb29sX2NyZWF0ZWAsIGBfX3pzd2FwX3Bvb2xfcmVsZWFzZWAsIGBfX3pzd2FwX3Bvb2xfZW1wdHlgLCBgenN3YXBfcG9vbF9maW5kX2dldGAuIEFuZCBvZiBjb3Vyc2UsIHdlIGNhbid0IGZvcmdldCB0aGUgY29tcHJlc3NvciBhbmQgdG90YWwgcGFnZXMgZnVuY3Rpb25hbGl0eSB3aXRoICBgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXRgLCBhbmQgYHpzd2FwX3RvdGFsX3BhZ2VzYCByZXNwZWN0aXZlbHkuXG5cbk5vdywgdGhhdCBnaXZlcyBtZSB0aGUgYmFzaWMgc3RydWN0dXJlLCBidXQgSSBuZWVkIGEgbW9yZSBjb21wbGV0ZSBwaWN0dXJlLiBJIG5lZWQgdG8gYnJvYWRlbiB0aGUgc2NvcGUgYSBiaXQuIFdoYXQgb3RoZXIgZmlsZXMsIGNvbmZpZyBvcHRpb25zLCBvciBhbnkgb3RoZXIgZWxlbWVudHMgYXJlIGludm9sdmVkPyBXaGF0IG90aGVyIGRlcGVuZGVuY2llcyBhcmUgaW52b2x2ZWQ/IEknbSBnb2luZyB0byBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2Yga2V5IGZ1bmN0aW9ucywgZXNwZWNpYWxseSBgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXRgLCBgenN3YXBfbG9hZGAsIGFuZCBsaWtlbHkgb3RoZXJzLCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3csIHRoZSBjb21wcmVzc29yIGludGVncmF0aW9uLCBhbmQgaG93IGV2ZXJ5dGhpbmcgdGllcyB0b2dldGhlci4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBhbmQgYXJlYXMgZm9yIHBvdGVudGlhbCBvcHRpbWl6YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzA1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIwOjE4OjQwLjI4MDQ4MzQwMVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkxNDE1MzksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJvb2wgenN3YXBfbG9hZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS96c3dhcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMDoxODo0MC4zMjk2NDY3NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzQ2OTM4OTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGFzaywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OlxuXG4qKkRpZ2dpbmcgaW50byB6c3dhcC5jJ3MgRnVuY3Rpb24gSGVhZGVycyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGZ1bmN0aW9uIGxhbmRzY2FwZSBhcm91bmQgYHpzd2FwX2xvYWRgIGFuZCBgenN3YXBfZGVjb21wcmVzc2Agd2l0aGluIHRoZSBgbW0venN3YXAuY2AgZmlsZS4gTXkgZ29hbCBoZXJlIGlzIGxpa2VseSB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBkZWNvbXByZXNzaW9uIHJvdXRpbmVzIGludGVyYWN0IHdpdGggdGhlIHJlc3Qgb2YgdGhlIHpzd2FwIGFyY2hpdGVjdHVyZS4gSSdtIHByb2JhYmx5IGxvb2tpbmcgdG8gc2VlIHdoYXQgY2FsbHMgdGhlbSwgd2hhdCB0aGV5IGNhbGwsIGFuZCBtYXliZSBldmVuIHRoZSBkYXRhIHN0cnVjdHVyZXMgdGhleSBvcGVyYXRlIG9uLlxuXG5NeSBpbml0aWFsIGFwcHJvYWNoIGlzIHN0cmFpZ2h0Zm9yd2FyZDogSSdsbCBxdWlja2x5IHNjYW4gdGhlIGNvZGUgdG8gaWRlbnRpZnkgZXZlcnkgZnVuY3Rpb24gaGVhZGVyIGluIHRoYXQgYXJlYSBvZiB0aGUgZmlsZS4gTm8gbmVlZCB0byBnZXQgYm9nZ2VkIGRvd24gaW4gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMganVzdCB5ZXQ7IEkgd2FudCB0aGUgb3ZlcnZpZXcgZmlyc3QuIEknbGwgbWVudGFsbHkgbm90ZSB0aGUgcGFyYW1ldGVyIGxpc3RzIG9mIGVhY2ggZnVuY3Rpb24gdG9vLCBhcyB0aGF0IHdpbGwgZ2l2ZSBtZSBjbHVlcyBhYm91dCBkYXRhIGZsb3cuIEknbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgZnVuY3Rpb24gc2lnbmF0dXJlcyB0aGF0IGhpbnQgYXQgbWVtb3J5IG1hbmFnZW1lbnQsIGRhdGEgdHJhbnNmZXIsIG9yIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLiBFc3NlbnRpYWxseSwgSSdtIHRyeWluZyB0byBtZW50YWxseSBtYXAgb3V0IHRoZSBmdW5jdGlvbiBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGV5IG9yY2hlc3RyYXRlIHRoZSB6c3dhcCBkZWNvbXByZXNzaW9uIHdvcmtmbG93LiBXaXRoIHRoYXQgbWFwLCB0aGUgc3Vic2VxdWVudCBkZXRhaWxzIHdpbGwgc3RhcnQgdG8gZmFsbCBpbnRvIHBsYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTgzOCwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIwOjE4OjQzLjA3NjU4ODA0OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU1MDA0NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmJvb2wgenN3YXBffF5pbnQgenN3YXBffF52b2lkIHpzd2FwX3xec3RhdGljIC4qenN3YXBfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3pzd2FwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0venN3YXAuYz00OD1hdG9taWNfbG9uZ190IHpzd2FwX3N0b3JlZF9wYWdlcyA9IEFUT01JQ19MT05HX0lOSVQoMCk7XFxubW0venN3YXAuYy00OS0vKiBUaGUgbnVtYmVyIG9mIGluY29tcHJlc3NpYmxlIHBhZ2VzIGN1cnJlbnRseSBzdG9yZWQgaW4genN3YXAgKi9cXG5tbS96c3dhcC5jOjUwOnN0YXRpYyBhdG9taWNfbG9uZ190IHpzd2FwX3N0b3JlZF9pbmNvbXByZXNzaWJsZV9wYWdlcyA9IEFUT01JQ19MT05HX0lOSVQoMCk7XFxubW0venN3YXAuYy01MS1cXG4tLVxcbm1tL3pzd2FwLmMtNTktLyogUG9vbCBsaW1pdCB3YXMgaGl0IChzZWUgenN3YXBfbWF4X3Bvb2xfcGVyY2VudCkgKi9cXG5tbS96c3dhcC5jOjYwOnN0YXRpYyB1NjQgenN3YXBfcG9vbF9saW1pdF9oaXQ7XFxubW0venN3YXAuYy02MS0vKiBQYWdlcyB3cml0dGVuIGJhY2sgd2hlbiBwb29sIGxpbWl0IHdhcyByZWFjaGVkICovXFxubW0venN3YXAuYzo2MjpzdGF0aWMgdTY0IHpzd2FwX3dyaXR0ZW5fYmFja19wYWdlcztcXG5tbS96c3dhcC5jLTYzLS8qIFN0b3JlIGZhaWxlZCBkdWUgdG8gYSByZWNsYWltIGZhaWx1cmUgYWZ0ZXIgcG9vbCBsaW1pdCB3YXMgcmVhY2hlZCAqL1xcbm1tL3pzd2FwLmM6NjQ6c3RhdGljIHU2NCB6c3dhcF9yZWplY3RfcmVjbGFpbV9mYWlsO1xcbm1tL3pzd2FwLmMtNjUtLyogU3RvcmUgZmFpbGVkIGR1ZSB0byBjb21wcmVzc2lvbiBhbGdvcml0aG0gZmFpbHVyZSAqL1xcbm1tL3pzd2FwLmM6NjY6c3RhdGljIHU2NCB6c3dhcF9yZWplY3RfY29tcHJlc3NfZmFpbDtcXG5tbS96c3dhcC5jLTY3LS8qIENvbXByZXNzZWQgcGFnZSB3YXMgdG9vIGJpZyBmb3IgdGhlIGFsbG9jYXRvciB0byAob3B0aW1hbGx5KSBzdG9yZSAqL1xcbm1tL3pzd2FwLmM6Njg6c3RhdGljIHU2NCB6c3dhcF9yZWplY3RfY29tcHJlc3NfcG9vcjtcXG5tbS96c3dhcC5jLTY5LS8qIExvYWQgb3Igd3JpdGViYWNrIGZhaWxlZCBkdWUgdG8gZGVjb21wcmVzc2lvbiBmYWlsdXJlICovXFxubW0venN3YXAuYzo3MDpzdGF0aWMgdTY0IHpzd2FwX2RlY29tcHJlc3NfZmFpbDtcXG5tbS96c3dhcC5jLTcxLS8qIFN0b3JlIGZhaWxlZCBiZWNhdXNlIHVuZGVybHlpbmcgYWxsb2NhdG9yIGNvdWxkIG5vdCBnZXQgbWVtb3J5ICovXFxubW0venN3YXAuYzo3MjpzdGF0aWMgdTY0IHpzd2FwX3JlamVjdF9hbGxvY19mYWlsO1xcbm1tL3pzd2FwLmMtNzMtLyogU3RvcmUgZmFpbGVkIGJlY2F1c2UgdGhlIGVudHJ5IG1ldGFkYXRhIGNvdWxkIG5vdCBiZSBhbGxvY2F0ZWQgKHJhcmUpICovXFxubW0venN3YXAuYzo3NDpzdGF0aWMgdTY0IHpzd2FwX3JlamVjdF9rbWVtY2FjaGVfZmFpbDtcXG5tbS96c3dhcC5jLTc1LVxcbi0tXFxubW0venN3YXAuYz03Nz1zdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnNocmlua193cTtcXG5tbS96c3dhcC5jLTc4LS8qIFBvb2wgbGltaXQgd2FzIGhpdCwgd2UgbmVlZCB0byBjYWxtIGRvd24gKi9cXG5tbS96c3dhcC5jOjc5OnN0YXRpYyBib29sIHpzd2FwX3Bvb2xfcmVhY2hlZF9mdWxsO1xcbm1tL3pzd2FwLmMtODAtXFxuLS1cXG5tbS96c3dhcC5jLTg2LVxcbm1tL3pzd2FwLmM6ODc6c3RhdGljIGludCB6c3dhcF9zZXR1cCh2b2lkKTtcXG5tbS96c3dhcC5jLTg4LVxcbm1tL3pzd2FwLmMtODktLyogRW5hYmxlL2Rpc2FibGUgenN3YXAgKi9cXG5tbS96c3dhcC5jOjkwOnN0YXRpYyBERUZJTkVfU1RBVElDX0tFWV9NQVlCRShDT05GSUdfWlNXQVBfREVGQVVMVF9PTiwgenN3YXBfZXZlcl9lbmFibGVkKTtcXG5tbS96c3dhcC5jOjkxOnN0YXRpYyBib29sIHpzd2FwX2VuYWJsZWQgPSBJU19FTkFCTEVEKENPTkZJR19aU1dBUF9ERUZBVUxUX09OKTtcXG5tbS96c3dhcC5jOjkyOnN0YXRpYyBpbnQgenN3YXBfZW5hYmxlZF9wYXJhbV9zZXQoY29uc3QgY2hhciAqLFxcbm1tL3pzd2FwLmMtOTMtXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqKTtcXG5tbS96c3dhcC5jOjk0OnN0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyB6c3dhcF9lbmFibGVkX3BhcmFtX29wcyA9IHtcXG5tbS96c3dhcC5jLTk1LVxcdC5zZXQgPVxcdFxcdHpzd2FwX2VuYWJsZWRfcGFyYW1fc2V0LFxcbi0tXFxubW0venN3YXAuYz05OD1tb2R1bGVfcGFyYW1fY2IoZW5hYmxlZCwgXFx1MDAyNnpzd2FwX2VuYWJsZWRfcGFyYW1fb3BzLCBcXHUwMDI2enN3YXBfZW5hYmxlZCwgMDY0NCk7XFxuLS1cXG5tbS96c3dhcC5jLTEwMC0vKiBDcnlwdG8gY29tcHJlc3NvciB0byB1c2UgKi9cXG5tbS96c3dhcC5jOjEwMTpzdGF0aWMgY2hhciAqenN3YXBfY29tcHJlc3NvciA9IENPTkZJR19aU1dBUF9DT01QUkVTU09SX0RFRkFVTFQ7XFxubW0venN3YXAuYzoxMDI6c3RhdGljIGludCB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldChjb25zdCBjaGFyICosXFxubW0venN3YXAuYy0xMDMtXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqKTtcXG5tbS96c3dhcC5jOjEwNDpzdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9vcHMgPSB7XFxubW0venN3YXAuYy0xMDUtXFx0LnNldCA9XFx0XFx0enN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQsXFxuLS1cXG5tbS96c3dhcC5jPTEwOT1tb2R1bGVfcGFyYW1fY2IoY29tcHJlc3NvciwgXFx1MDAyNnpzd2FwX2NvbXByZXNzb3JfcGFyYW1fb3BzLFxcbi0tXFxubW0venN3YXAuYy0xMTItLyogVGhlIG1heGltdW0gcGVyY2VudGFnZSBvZiBtZW1vcnkgdGhhdCB0aGUgY29tcHJlc3NlZCBwb29sIGNhbiBvY2N1cHkgKi9cXG5tbS96c3dhcC5jOjExMzpzdGF0aWMgdW5zaWduZWQgaW50IHpzd2FwX21heF9wb29sX3BlcmNlbnQgPSAyMDtcXG5tbS96c3dhcC5jLTExNC1tb2R1bGVfcGFyYW1fbmFtZWQobWF4X3Bvb2xfcGVyY2VudCwgenN3YXBfbWF4X3Bvb2xfcGVyY2VudCwgdWludCwgMDY0NCk7XFxuLS1cXG5tbS96c3dhcC5jLTExNi0vKiBUaGUgdGhyZXNob2xkIGZvciBhY2NlcHRpbmcgbmV3IHBhZ2VzIGFmdGVyIHRoZSBtYXhfcG9vbF9wZXJjZW50IHdhcyBoaXQgKi9cXG5tbS96c3dhcC5jOjExNzpzdGF0aWMgdW5zaWduZWQgaW50IHpzd2FwX2FjY2VwdF90aHJfcGVyY2VudCA9IDkwOyAvKiBvZiBtYXggcG9vbCBzaXplICovXFxubW0venN3YXAuYy0xMTgtbW9kdWxlX3BhcmFtX25hbWVkKGFjY2VwdF90aHJlc2hvbGRfcGVyY2VudCwgenN3YXBfYWNjZXB0X3Rocl9wZXJjZW50LFxcbi0tXFxubW0venN3YXAuYy0xMjEtLyogRW5hYmxlL2Rpc2FibGUgbWVtb3J5IHByZXNzdXJlLWJhc2VkIHNocmlua2VyLiAqL1xcbm1tL3pzd2FwLmM6MTIyOnN0YXRpYyBib29sIHpzd2FwX3Nocmlua2VyX2VuYWJsZWQgPSBJU19FTkFCTEVEKFxcbm1tL3pzd2FwLmMtMTIzLVxcdFxcdENPTkZJR19aU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OKTtcXG5tbS96c3dhcC5jPTEyND1tb2R1bGVfcGFyYW1fbmFtZWQoc2hyaW5rZXJfZW5hYmxlZCwgenN3YXBfc2hyaW5rZXJfZW5hYmxlZCwgYm9vbCwgMDY0NCk7XFxubW0venN3YXAuYy0xMjUtXFxubW0venN3YXAuYzoxMjY6Ym9vbCB6c3dhcF9pc19lbmFibGVkKHZvaWQpXFxubW0venN3YXAuYy0xMjcte1xcbi0tXFxubW0venN3YXAuYy0xMzAtXFxubW0venN3YXAuYzoxMzE6Ym9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpXFxubW0venN3YXAuYy0xMzIte1xcbi0tXFxubW0venN3YXAuYz0xNTQ9c3RydWN0IHpzd2FwX3Bvb2wge1xcbi0tXFxubW0venN3YXAuYy0xNzEtI2RlZmluZSBaU1dBUF9NQVhfUE9PTF9JRCBVOF9NQVhcXG5tbS96c3dhcC5jOjE3MjpzdGF0aWMgREVGSU5FX1hBUlJBWV9GTEFHUyh6c3dhcF9wb29scywgWEFfRkxBR1NfQUxMT0MxIHwgWEFfRkxBR1NfTE9DS19CSCk7XFxubW0venN3YXAuYzoxNzM6c3RhdGljIHN0cnVjdCB6c3dhcF9wb29sIF9fcmN1ICp6c3dhcF9jdXJyZW50X3Bvb2w7XFxubW0venN3YXAuYy0xNzQtXFxubW0venN3YXAuYy0xNzUtLyogR2xvYmFsIExSVSBsaXN0cyBzaGFyZWQgYnkgYWxsIHpzd2FwIHBvb2xzLiAqL1xcbm1tL3pzd2FwLmM6MTc2OnN0YXRpYyBzdHJ1Y3QgbGlzdF9scnUgenN3YXBfbGlzdF9scnU7XFxubW0venN3YXAuYy0xNzctXFxubW0venN3YXAuYy0xNzgtLyogVGhlIGxvY2sgcHJvdGVjdHMgenN3YXBfbmV4dF9zaHJpbmsgdXBkYXRlcy4gKi9cXG5tbS96c3dhcC5jOjE3OTpzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHpzd2FwX3Nocmlua19sb2NrKTtcXG5tbS96c3dhcC5jOjE4MDpzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKnpzd2FwX25leHRfc2hyaW5rO1xcbm1tL3pzd2FwLmM6MTgxOnN0YXRpYyBzdHJ1Y3Qgd29ya19zdHJ1Y3QgenN3YXBfc2hyaW5rX3dvcms7XFxubW0venN3YXAuYzoxODI6c3RhdGljIHN0cnVjdCBzaHJpbmtlciAqenN3YXBfc2hyaW5rZXI7XFxubW0venN3YXAuYy0xODMtXFxuLS1cXG5tbS96c3dhcC5jPTIwMj1zdHJ1Y3QgenN3YXBfZW50cnkge1xcbi0tXFxubW0venN3YXAuYy0yMTYtICovXFxubW0venN3YXAuYzoyMTc6c3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9lbnRyeV9wb29sKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXFxubW0venN3YXAuYy0yMTgte1xcbi0tXFxubW0venN3YXAuYy0yMjEtXFxubW0venN3YXAuYzoyMjI6c3RhdGljIHN0cnVjdCB4YXJyYXkgKnpzd2FwX3RyZWVzW01BWF9TV0FQRklMRVNdO1xcbm1tL3pzd2FwLmM6MjIzOnN0YXRpYyB1bnNpZ25lZCBpbnQgbnJfenN3YXBfdHJlZXNbTUFYX1NXQVBGSUxFU107XFxubW0venN3YXAuYy0yMjQtXFxubW0venN3YXAuYy0yMjUtLyogcG9vbCBjb3VudGVyIHRvIHByb3ZpZGUgdW5pcXVlIG5hbWVzIHRvIHpzbWFsbG9jICovXFxubW0venN3YXAuYzoyMjY6c3RhdGljIGF0b21pY190IHpzd2FwX3Bvb2xzX2NvdW50ID0gQVRPTUlDX0lOSVQoMCk7XFxubW0venN3YXAuYy0yMjctXFxubW0venN3YXAuYz0yMjg9ZW51bSB6c3dhcF9pbml0X3R5cGUge1xcbi0tXFxubW0venN3YXAuYy0yMzMtXFxubW0venN3YXAuYzoyMzQ6c3RhdGljIGVudW0genN3YXBfaW5pdF90eXBlIHpzd2FwX2luaXRfc3RhdGU7XFxubW0venN3YXAuYy0yMzUtXFxubW0venN3YXAuYy0yMzYtLyogdXNlZCB0byBlbnN1cmUgdGhlIGludGVncml0eSBvZiBpbml0aWFsaXphdGlvbiAqL1xcbm1tL3pzd2FwLmM6MjM3OnN0YXRpYyBERUZJTkVfTVVURVgoenN3YXBfaW5pdF9sb2NrKTtcXG5tbS96c3dhcC5jLTIzOC1cXG5tbS96c3dhcC5jLTIzOS0vKiBpbml0IGNvbXBsZXRlZCwgYnV0IGNvdWxkbid0IGNyZWF0ZSB0aGUgaW5pdGlhbCBwb29sICovXFxubW0venN3YXAuYzoyNDA6c3RhdGljIGJvb2wgenN3YXBfaGFzX3Bvb2w7XFxubW0venN3YXAuYy0yNDEtXFxuLS1cXG5tbS96c3dhcC5jLTI0OC0jZGVmaW5lIFpTV0FQX0FERFJFU1NfU1BBQ0VfUEFHRVMgKDEgXFx1MDAzY1xcdTAwM2MgWlNXQVBfQUREUkVTU19TUEFDRV9TSElGVClcXG5tbS96c3dhcC5jOjI0OTpzdGF0aWMgaW5saW5lIHN0cnVjdCB4YXJyYXkgKnN3YXBfenN3YXBfdHJlZShzd3BfZW50cnlfdCBzd3ApXFxubW0venN3YXAuYy0yNTAte1xcbi0tXFxubW0venN3YXAuYy0yNjAtKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5tbS96c3dhcC5jOjI2MTpzdGF0aWMgdm9pZCBfX3pzd2FwX3Bvb2xfZW1wdHkoc3RydWN0IHBlcmNwdV9yZWYgKnJlZik7XFxubW0venN3YXAuYy0yNjItXFxubW0venN3YXAuYz0yNjM9c3RhdGljIHZvaWQgYWNvbXBfY3R4X2ZyZWUoc3RydWN0IGNyeXB0b19hY29tcF9jdHggKmFjb21wX2N0eClcXG4tLVxcbm1tL3pzd2FwLmMtMjkwLVxcbm1tL3pzd2FwLmM6MjkxOnN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jcmVhdGUoY2hhciAqY29tcHJlc3NvcilcXG5tbS96c3dhcC5jLTI5Mi17XFxuLS1cXG5tbS96c3dhcC5jLTM3OS1cXG5tbS96c3dhcC5jOjM4MDpzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKl9fenN3YXBfcG9vbF9jcmVhdGVfZmFsbGJhY2sodm9pZClcXG5tbS96c3dhcC5jLTM4MS17XFxuLS1cXG5tbS96c3dhcC5jLTM5OC1cXG5tbS96c3dhcC5jOjM5OTpzdGF0aWMgdm9pZCB6c3dhcF9wb29sX2Rlc3Ryb3koc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wpXFxubW0venN3YXAuYy00MDAte1xcbi0tXFxubW0venN3YXAuYy00MTUtXFxubW0venN3YXAuYzo0MTY6c3RhdGljIHZvaWQgX196c3dhcF9wb29sX3JlbGVhc2Uoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm1tL3pzd2FwLmMtNDE3LXtcXG4tLVxcbm1tL3pzd2FwLmMtNDI4LVxcbm1tL3pzd2FwLmM6NDI5OnN0YXRpYyB2b2lkIF9fenN3YXBfcG9vbF9lbXB0eShzdHJ1Y3QgcGVyY3B1X3JlZiAqcmVmKVxcbm1tL3pzd2FwLmMtNDMwLXtcXG4tLVxcbm1tL3pzd2FwLmMtNDQyLVxcbm1tL3pzd2FwLmM6NDQzOnN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIHpzd2FwX3Bvb2xfdHJ5Z2V0KHN0cnVjdCB6c3dhcF9wb29sICpwb29sKVxcbm1tL3pzd2FwLmMtNDQ0LXtcXG4tLVxcbm1tL3pzd2FwLmMtNDUxLS8qIFRoZSBjYWxsZXIgbXVzdCBhbHJlYWR5IGhhdmUgYSByZWZlcmVuY2UuICovXFxubW0venN3YXAuYzo0NTI6c3RhdGljIHZvaWQgenN3YXBfcG9vbF9nZXQoc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wpXFxubW0venN3YXAuYy00NTMte1xcbi0tXFxubW0venN3YXAuYy00NTYtXFxubW0venN3YXAuYzo0NTc6c3RhdGljIHZvaWQgenN3YXBfcG9vbF9wdXQoc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wpXFxubW0venN3YXAuYy00NTgte1xcbi0tXFxubW0venN3YXAuYy00NjEtXFxubW0venN3YXAuYzo0NjI6c3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICpfX3pzd2FwX3Bvb2xfY3VycmVudCh2b2lkKVxcbm1tL3pzd2FwLmMtNDYzLXtcXG4tLVxcbm1tL3pzd2FwLmMtNDcyLVxcbm1tL3pzd2FwLmM6NDczOnN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jdXJyZW50X2dldCh2b2lkKVxcbm1tL3pzd2FwLmMtNDc0LXtcXG4tLVxcbm1tL3pzd2FwLmMtNDg4LS8qIGNvbXByZXNzb3IgbXVzdCBiZSBudWxsLXRlcm1pbmF0ZWQgKi9cXG5tbS96c3dhcC5jOjQ4OTpzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfZmluZF9nZXQoY2hhciAqY29tcHJlc3NvcilcXG5tbS96c3dhcC5jLTQ5MC17XFxuLS1cXG5tbS96c3dhcC5jLTUxMS1cXG5tbS96c3dhcC5jOjUxMjpzdGF0aWMgdW5zaWduZWQgbG9uZyB6c3dhcF9tYXhfcGFnZXModm9pZClcXG5tbS96c3dhcC5jLTUxMy17XFxuLS1cXG5tbS96c3dhcC5jLTUxNi1cXG5tbS96c3dhcC5jOjUxNzpzdGF0aWMgdW5zaWduZWQgbG9uZyB6c3dhcF9hY2NlcHRfdGhyX3BhZ2VzKHZvaWQpXFxubW0venN3YXAuYy01MTgte1xcbi0tXFxubW0venN3YXAuYz01MjI9dW5zaWduZWQgbG9uZyB6c3dhcF90b3RhbF9wYWdlcyh2b2lkKVxcbi0tXFxubW0venN3YXAuYy01MzktXFxubW0venN3YXAuYzo1NDA6c3RhdGljIGJvb2wgenN3YXBfY2hlY2tfbGltaXRzKHZvaWQpXFxubW0venN3YXAuYy01NDEte1xcbi0tXFxubW0venN3YXAuYy01NTgtXFxubW0venN3YXAuYzo1NTk6c3RhdGljIGludCB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldChjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxcbm1tL3pzd2FwLmMtNTYwLXtcXG4tLVxcbm1tL3pzd2FwLmMtNjM0LVxcbm1tL3pzd2FwLmM6NjM1OnN0YXRpYyBpbnQgenN3YXBfZW5hYmxlZF9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLFxcbm1tL3pzd2FwLmMtNjM2LVxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxcbi0tXFxubW0venN3YXAuYy02NjctXFxubW0venN3YXAuYzo2Njg6c3RhdGljIGlubGluZSBpbnQgZW50cnlfdG9fbmlkKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXFxubW0venN3YXAuYy02Njkte1xcbi0tXFxubW0venN3YXAuYy02NzItXFxubW0venN3YXAuYzo2NzM6c3RhdGljIHZvaWQgenN3YXBfbHJ1X2FkZChzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxcbm1tL3pzd2FwLmMtNjc0LXtcXG4tLVxcbm1tL3pzd2FwLmMtNjk1LVxcbm1tL3pzd2FwLmM6Njk2OnN0YXRpYyB2b2lkIHpzd2FwX2xydV9kZWwoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcXG5tbS96c3dhcC5jLTY5Ny17XFxuLS1cXG5tbS96c3dhcC5jLTcwNy1cXG5tbS96c3dhcC5jOjcwODp2b2lkIHpzd2FwX2xydXZlY19zdGF0ZV9pbml0KHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG5tbS96c3dhcC5jLTcwOS17XFxuLS1cXG5tbS96c3dhcC5jLTcxMi1cXG5tbS96c3dhcC5jOjcxMzp2b2lkIHpzd2FwX2ZvbGlvX3N3YXBpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL3pzd2FwLmMtNzE0LXtcXG4tLVxcbm1tL3pzd2FwLmMtNzM0LSAqL1xcbm1tL3pzd2FwLmM6NzM1OnZvaWQgenN3YXBfbWVtY2dfb2ZmbGluZV9jbGVhbnVwKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS96c3dhcC5jLTczNi17XFxuLS1cXG5tbS96c3dhcC5jLTc0OS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbm1tL3pzd2FwLmM6NzUwOnN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqenN3YXBfZW50cnlfY2FjaGU7XFxubW0venN3YXAuYy03NTEtXFxubW0venN3YXAuYzo3NTI6c3RhdGljIHN0cnVjdCB6c3dhcF9lbnRyeSAqenN3YXBfZW50cnlfY2FjaGVfYWxsb2MoZ2ZwX3QgZ2ZwLCBpbnQgbmlkKVxcbm1tL3pzd2FwLmMtNzUzLXtcXG4tLVxcbm1tL3pzd2FwLmMtNzYwLVxcbm1tL3pzd2FwLmM6NzYxOnN0YXRpYyB2b2lkIHpzd2FwX2VudHJ5X2NhY2hlX2ZyZWUoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcXG5tbS96c3dhcC5jLTc2Mi17XFxuLS1cXG5tbS96c3dhcC5jLTc2OS0gKi9cXG5tbS96c3dhcC5jOjc3MDpzdGF0aWMgdm9pZCB6c3dhcF9lbnRyeV9mcmVlKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXFxubW0venN3YXAuYy03NzEte1xcbi0tXFxubW0venN3YXAuYy03OTEtKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5tbS96c3dhcC5jOjc5MjpzdGF0aWMgaW50IHpzd2FwX2NwdV9jb21wX3ByZXBhcmUodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUpXFxubW0venN3YXAuYy03OTMte1xcbi0tXFxubW0venN3YXAuYy04NDgtXFxubW0venN3YXAuYzo4NDk6c3RhdGljIGJvb2wgenN3YXBfY29tcHJlc3Moc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXFxubW0venN3YXAuYy04NTAtXFx0XFx0XFx0ICAgc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wpXFxuLS1cXG5tbS96c3dhcC5jLTkzMi1cXG5tbS96c3dhcC5jOjkzMzpzdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0venN3YXAuYy05MzQte1xcbi0tXFxubW0venN3YXAuYy05OTgtICovXFxubW0venN3YXAuYzo5OTk6c3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG5tbS96c3dhcC5jLTEwMDAtXFx0XFx0XFx0XFx0IHN3cF9lbnRyeV90IHN3cGVudHJ5KVxcbi0tXFxubW0venN3YXAuYz0xMTAyPXN0YXRpYyBlbnVtIGxydV9zdGF0dXMgc2hyaW5rX21lbWNnX2NiKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sIHN0cnVjdCBsaXN0X2xydV9vbmUgKmwsXFxuLS1cXG5tbS96c3dhcC5jLTExODItXFxubW0venN3YXAuYzoxMTgzOnN0YXRpYyB1bnNpZ25lZCBsb25nIHpzd2FwX3Nocmlua2VyX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcXG5tbS96c3dhcC5jLTExODQtXFx0XFx0c3RydWN0IHNocmlua19jb250cm9sICpzYylcXG4tLVxcbm1tL3pzd2FwLmMtMTIwMy1cXG5tbS96c3dhcC5jOjEyMDQ6c3RhdGljIHVuc2lnbmVkIGxvbmcgenN3YXBfc2hyaW5rZXJfY291bnQoc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcXG5tbS96c3dhcC5jLTEyMDUtXFx0XFx0c3RydWN0IHNocmlua19jb250cm9sICpzYylcXG4tLVxcbm1tL3pzd2FwLmMtMTI3NS1cXG5tbS96c3dhcC5jOjEyNzY6c3RhdGljIHN0cnVjdCBzaHJpbmtlciAqenN3YXBfYWxsb2Nfc2hyaW5rZXIodm9pZClcXG5tbS96c3dhcC5jLTEyNzcte1xcbi0tXFxubW0venN3YXAuYz0xMzI5PXN0YXRpYyB2b2lkIHNocmlua193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxcbi0tXFxubW0venN3YXAuYy0xNDE5LVxcbm1tL3pzd2FwLmM6MTQyMDpzdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxcbm1tL3pzd2FwLmMtMTQyMS1cXHRcXHRcXHQgICAgIHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcXG4tLVxcbm1tL3pzd2FwLmMtMTUwNS1cXG5tbS96c3dhcC5jOjE1MDY6Ym9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL3pzd2FwLmMtMTUwNy17XFxuLS1cXG5tbS96c3dhcC5jLTE2MTEtICovXFxubW0venN3YXAuYzoxNjEyOmludCB6c3dhcF9sb2FkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0venN3YXAuYy0xNjEzLXtcXG4tLVxcbm1tL3pzd2FwLmMtMTY2NC1cXG5tbS96c3dhcC5jOjE2NjU6dm9pZCB6c3dhcF9pbnZhbGlkYXRlKHN3cF9lbnRyeV90IHN3cClcXG5tbS96c3dhcC5jLTE2NjYte1xcbi0tXFxubW0venN3YXAuYy0xNjc4LVxcbm1tL3pzd2FwLmM6MTY3OTppbnQgenN3YXBfc3dhcG9uKGludCB0eXBlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbm1tL3pzd2FwLmMtMTY4MC17XFxuLS1cXG5tbS96c3dhcC5jLTE2OTgtXFxubW0venN3YXAuYzoxNjk5OnZvaWQgenN3YXBfc3dhcG9mZihpbnQgdHlwZSlcXG5tbS96c3dhcC5jLTE3MDAte1xcbi0tXFxubW0venN3YXAuYy0xNzIxLVxcbm1tL3pzd2FwLmM6MTcyMjpzdGF0aWMgc3RydWN0IGRlbnRyeSAqenN3YXBfZGVidWdmc19yb290O1xcbm1tL3pzd2FwLmMtMTcyMy1cXG4tLVxcbm1tL3pzd2FwLmM9MTc0Mz1ERUZJTkVfREVCVUdGU19BVFRSSUJVVEUoc3RvcmVkX2luY29tcHJlc3NpYmxlX3BhZ2VzX2ZvcHMsXFxuLS1cXG5tbS96c3dhcC5jLTE3NDUtXFxubW0venN3YXAuYzoxNzQ2OnN0YXRpYyBpbnQgenN3YXBfZGVidWdmc19pbml0KHZvaWQpXFxubW0venN3YXAuYy0xNzQ3LXtcXG4tLVxcbm1tL3pzd2FwLmMtMTc3OS0jZWxzZVxcbm1tL3pzd2FwLmM6MTc4MDpzdGF0aWMgaW50IHpzd2FwX2RlYnVnZnNfaW5pdCh2b2lkKVxcbm1tL3pzd2FwLmMtMTc4MS17XFxuLS1cXG5tbS96c3dhcC5jLTE3ODgtKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5tbS96c3dhcC5jOjE3ODk6c3RhdGljIGludCB6c3dhcF9zZXR1cCh2b2lkKVxcbm1tL3pzd2FwLmMtMTc5MC17XFxuLS1cXG5tbS96c3dhcC5jLTE4NTEtXFxubW0venN3YXAuYzoxODUyOnN0YXRpYyBpbnQgX19pbml0IHpzd2FwX2luaXQodm9pZClcXG5tbS96c3dhcC5jLTE4NTMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMDoxODo0My4xMzIwOTUxNDdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDMwMzM0ODIxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSB6c3dhcC5jIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gb2YgYG1tL3pzd2FwLmNgIGlkZW50aWZpZXMgdGhlIGNydWNpYWwsIG5vbi11YmlxdWl0b3VzIGZ1bmN0aW9ucyB0aGF0IHNlZW0gY2VudHJhbCB0byB0aGUgY29yZSBmdW5jdGlvbmFsaXR5OiBgenN3YXBfc3RvcmVgLCBgenN3YXBfbG9hZGAsIGB6c3dhcF9zdG9yZV9wYWdlYCwgYHpzd2FwX2RlY29tcHJlc3NgLCBgenN3YXBfZW50cnlfZnJlZWAsIGFuZCB0aGUgcG9vbCBtYW5hZ2VtZW50IGZ1bmN0aW9uczogYHpzd2FwX3Bvb2xfY3JlYXRlYCwgYHpzd2FwX3Bvb2xfZmluZF9nZXRgLCBgX196c3dhcF9wb29sX2VtcHR5YCwgYF9fenN3YXBfcG9vbF9yZWxlYXNlYCwgYW5kIGFsc28gYHpzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0YCwgYW5kIGB6c3dhcF90b3RhbF9wYWdlc2AuIFRob3NlIGxvb2sgbGlrZSB0aGUgaG90c3BvdHMuXG5cblRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgY2xlYXJseSBgWlNXQVBgIGFuZCBgU1dBUGAg4oCTIHRob3NlIHR3byBhcmUgZXNzZW50aWFsIHRvIGNvbnNpZGVyIGZvciBmdXp6aW5nIHNjb3BlLlxuXG5Ob3csIHRoZSBwYXRjaCdzIGNvcmUgaXMgdGhlIHJlZmFjdG9yaW5nIG9mIHpzd2FwIHBvb2wgYW5kIGVudHJ5IGxpZmVjeWNsZSB3aXRoaW4gYG1tL3pzd2FwLmNgLiBXZSdyZSB0YWxraW5nIGFib3V0IGEgc2lnbmlmaWNhbnQgb3ZlcmhhdWw6IHN3YXBwaW5nIHRoZSBsaW5rZWQgbGlzdCBmb3IgYW4gSUQtYmFzZWQgeGFycmF5IChgenN3YXBfcG9vbHNgKSwgYW5kIHJlcGxhY2luZyB0aGUgYHBvb2xgIHBvaW50ZXIgd2l0aCBgcG9vbF9pZHhgLiBUaGF0IG1lYW5zIHdlJ3JlIGRlYWxpbmcgd2l0aCB4YXJyYXkgbG9va3VwcyB1c2luZyBgeGFfbG9hZGAgYW5kIGB4YV9mb3JfZWFjaGAsIHNvZnRpcnEtc2FmZSBsb2NraW5nIHZpYSBgeGFfYWxsb2NfYmhgLCBgeGFfZXJhc2VfYmhgLCBhbmQgZGVsYXllZCBkZXN0cnVjdGlvbiB3aXRoIGByY3Vfd29ya2AuIFRoZXNlIGFyZSBjcml0aWNhbCBzeW5jaHJvbml6YXRpb24gYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZXMgd2l0aGluIHJlYWNoYWJsZSBNTSBjb2RlLiBUaGlzIHNjcmVhbXMgY29uY3VycmVuY3kgaXNzdWVzLlxuXG5HaXZlbiB0aGUgc2NvcGUgYW5kIG5hdHVyZSBvZiB0aGUgY2hhbmdlcyDigJMgZXNwZWNpYWxseSB0aGUgc2hpZnQgdG8geGFycmF5cyBhbmQgUkNVIOKAkyB0aGUgcG90ZW50aWFsIGZvciBjb25jdXJyZW5jeSByYWNlcywgc3RhbGUgSUQgbG9va3VwcywgYW5kIGFzc2VydGlvbiBmYWlsdXJlcyBpcyBoaWdoLiBUaHVzLCBmdXp6aW5nIGlzIGRlZmluaXRlbHkgd2FycmFudGVkIGhlcmUuXG5cbkZpbmFsbHksIEkndmUgY2hlY2tlZCBhbGwgdGhlIGluc3RydWN0aW9ucyDigJMgdGhlIGBFbmFibGVDb25maWdzYCwgYEZvY3VzU3ltYm9sc2AsIGBXb3J0aEZ1enppbmdgLCBhbmQgYFJlYXNvbmluZ2Ag4oCTIGFsbCBhcmUgY2xlYXIgYW5kIG1ha2Ugc2Vuc2UuIFNlZW1zIHRoZSBzZXR1cCBpcyBjb3JyZWN0LiBOb3csIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyMTAsIk91dHB1dFRva2VucyI6MjYxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIwOjE4OjQ3LjQzNTQ0NTY4MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzMTAyNjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaU1dBUFwiLFxuICAgIFwiU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpzd2FwX3N0b3JlXCIsXG4gICAgXCJ6c3dhcF9sb2FkXCIsXG4gICAgXCJ6c3dhcF9zdG9yZV9wYWdlXCIsXG4gICAgXCJ6c3dhcF9kZWNvbXByZXNzXCIsXG4gICAgXCJ6c3dhcF9lbnRyeV9mcmVlXCIsXG4gICAgXCJ6c3dhcF9wb29sX2NyZWF0ZVwiLFxuICAgIFwienN3YXBfcG9vbF9maW5kX2dldFwiLFxuICAgIFwiX196c3dhcF9wb29sX2VtcHR5XCIsXG4gICAgXCJfX3pzd2FwX3Bvb2xfcmVsZWFzZVwiLFxuICAgIFwienN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXRcIixcbiAgICBcInpzd2FwX3RvdGFsX3BhZ2VzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpbiBtbS96c3dhcC5jLCByZWZhY3RvcmluZyBwb29sIGFuZCBlbnRyeSB0cmFja2luZyBmcm9tIGEgbGlua2VkIGxpc3QgYW5kIHJhdyBwb29sIHBvaW50ZXIgdG8gYW4gSUQtYmFzZWQgWEFycmF5IHdpdGggOC1iaXQgcG9vbCBpbmRpY2VzIGluIHN0cnVjdCB6c3dhcF9lbnRyeS4gSXQgYWxzbyB1cGRhdGVzIHN5bmNocm9uaXphdGlvbiBzZW1hbnRpY3MgdXNpbmcgUkNVIGFuZCByY3Vfd29yayAocXVldWVfcmN1X3dvcmspIGFsb25nIHdpdGggc29mdGlycS1zYWZlIFhBcnJheSBvcGVyYXRpb25zICh4YV9hbGxvY19iaCwgeGFfZXJhc2VfYmgpLiBUaGVzZSBjb25jdXJyZW5jeSBhbmQgZGF0YSBzdHJ1Y3R1cmUgbW9kaWZpY2F0aW9ucyBpbiByZWFjaGFibGUgTU0gY29kZSB3YXJyYW50IGZ1enppbmcgdG8gZGV0ZWN0IHBvc3NpYmxlIHJhY2VzLCBzdGFsZSBJRCBkZXJlZmVyZW5jZXMsIG9yIGFzc2VydGlvbiB0cmlwcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaU1dBUFwiLFxuICAgIFwiU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpzd2FwX3N0b3JlXCIsXG4gICAgXCJ6c3dhcF9sb2FkXCIsXG4gICAgXCJ6c3dhcF9zdG9yZV9wYWdlXCIsXG4gICAgXCJ6c3dhcF9kZWNvbXByZXNzXCIsXG4gICAgXCJ6c3dhcF9lbnRyeV9mcmVlXCIsXG4gICAgXCJ6c3dhcF9wb29sX2NyZWF0ZVwiLFxuICAgIFwienN3YXBfcG9vbF9maW5kX2dldFwiLFxuICAgIFwiX196c3dhcF9wb29sX2VtcHR5XCIsXG4gICAgXCJfX3pzd2FwX3Bvb2xfcmVsZWFzZVwiLFxuICAgIFwienN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXRcIixcbiAgICBcInpzd2FwX3RvdGFsX3BhZ2VzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpbiBtbS96c3dhcC5jLCByZWZhY3RvcmluZyBwb29sIGFuZCBlbnRyeSB0cmFja2luZyBmcm9tIGEgbGlua2VkIGxpc3QgYW5kIHJhdyBwb29sIHBvaW50ZXIgdG8gYW4gSUQtYmFzZWQgWEFycmF5IHdpdGggOC1iaXQgcG9vbCBpbmRpY2VzIGluIHN0cnVjdCB6c3dhcF9lbnRyeS4gSXQgYWxzbyB1cGRhdGVzIHN5bmNocm9uaXphdGlvbiBzZW1hbnRpY3MgdXNpbmcgUkNVIGFuZCByY3Vfd29yayAocXVldWVfcmN1X3dvcmspIGFsb25nIHdpdGggc29mdGlycS1zYWZlIFhBcnJheSBvcGVyYXRpb25zICh4YV9hbGxvY19iaCwgeGFfZXJhc2VfYmgpLiBUaGVzZSBjb25jdXJyZW5jeSBhbmQgZGF0YSBzdHJ1Y3R1cmUgbW9kaWZpY2F0aW9ucyBpbiByZWFjaGFibGUgTU0gY29kZSB3YXJyYW50IGZ1enppbmcgdG8gZGV0ZWN0IHBvc3NpYmxlIHJhY2VzLCBzdGFsZSBJRCBkZXJlZmVyZW5jZXMsIG9yIGFzc2VydGlvbiB0cmlwcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjA6MTg6NDcuNTE4NTU2MzJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NzMwOTQ1MjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjA6MTg6NDcuNTE5MTc2MzdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyNjczMDMyMTIzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaW50ZXJuYWwgenN3YXAgcG9vbCBhbmQgZW50cnkgbWFuYWdlbWVudCBpbiBtbS96c3dhcC5jIGJ5IHJlcGxhY2luZyBhIGxpbmtlZCBsaXN0IG9mIHBvb2xzIHdpdGggYW4gWEFycmF5IChpbmRleGVkIGJ5IGEgdTggcG9vbF9pZHgpIGFuZCBzd2l0Y2hpbmcgcG9vbCBsb29rdXBzIHRvIHVzZSB4YV9sb2FkKCkuIEFsbCBhbGxvY2F0ZWQgc3RydWN0dXJlcyAoenN3YXBfcG9vbCBhbGxvY2F0ZWQgd2l0aCBremFsbG9jX29iaiwgYW5kIHpzd2FwX2VudHJ5IHdob3NlIGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBpbiB6c3dhcF9zdG9yZV9wYWdlKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gTm9uZSBvZiB0aGUgbW9kaWZpZWQgZGF0YSBzdHJ1Y3R1cmVzIG9yIGZpZWxkcyBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcyBhcmUgaW50cm9kdWNlZC4gQW55IHBvdGVudGlhbCBidWdzIHdvdWxkIGludm9sdmUgY29uY3VycmVuY3ksIGxpZmV0aW1lL3JlZmNvdW50aW5nLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcyByYXRoZXIgdGhhbiBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2ZmM4MmJiZDBmNDU2NTBiMzY3ZmYzYmEwZmQwZDk2YmJlOWEyNDE1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAyMDoxODoyNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXG5pbmRleCBmM2FlM2M4MWU0OGVhLi4yNTNlZWJiOTcxYjk3IDEwMDY0NFxuLS0tIGEvbW0venN3YXAuY1xuKysrIGIvbW0venN3YXAuY1xuQEAgLTM0LDYgKzM0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93cml0ZWJhY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgveGFycmF5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0X2xydS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvenNtYWxsb2MuaFx1MDAzZVxuIFxuQEAgLTE1NCwxMiArMTU1LDIzIEBAIHN0cnVjdCB6c3dhcF9wb29sIHtcbiBcdHN0cnVjdCB6c19wb29sICp6c19wb29sO1xuIFx0c3RydWN0IGNyeXB0b19hY29tcF9jdHggX19wZXJjcHUgKmFjb21wX2N0eDtcbiBcdHN0cnVjdCBwZXJjcHVfcmVmIHJlZjtcbi1cdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbi1cdHN0cnVjdCB3b3JrX3N0cnVjdCByZWxlYXNlX3dvcms7XG4rXHRzdHJ1Y3QgcmN1X3dvcmsgcmVsZWFzZV9yd29yaztcbiBcdHN0cnVjdCBobGlzdF9ub2RlIG5vZGU7XG4rXHR1OCBpZHg7XG4gXHRjaGFyIHRmbV9uYW1lW0NSWVBUT19NQVhfQUxHX05BTUVdO1xuIH07XG4gXG4rLypcbisgKiBMaXZlIHBvb2xzIGtleWVkIGJ5IGlkICgxLi5aU1dBUF9NQVhfUE9PTF9JRCkuICBYQV9GTEFHU19BTExPQzEga2VlcHMgaWQgMFxuKyAqIHJlc2VydmVkIHNvIGl0IGlzIG5ldmVyIGhhbmRlZCB0byBhIGxpdmUgcG9vbC4gIFhBX0ZMQUdTX0xPQ0tfQkggbWFrZXMgdGhlXG4rICogeGFfbG9jayBzb2Z0aXJxLXNhZmU6IGl0IGlzIHRha2VuIGZyb20gX196c3dhcF9wb29sX2VtcHR5KCksIHdoaWNoIHJ1bnMgZnJvbVxuKyAqIGEgcGVyY3B1X3JlZiByZWxlYXNlIGNhbGxiYWNrIGluIHNvZnRpcnEgY29udGV4dC5cbisgKi9cbisjZGVmaW5lIFpTV0FQX0ZJUlNUX1BPT0xfSUQgMVxuKyNkZWZpbmUgWlNXQVBfTUFYX1BPT0xfSUQgVThfTUFYXG4rc3RhdGljIERFRklORV9YQVJSQVlfRkxBR1MoenN3YXBfcG9vbHMsIFhBX0ZMQUdTX0FMTE9DMSB8IFhBX0ZMQUdTX0xPQ0tfQkgpO1xuK3N0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCBfX3JjdSAqenN3YXBfY3VycmVudF9wb29sO1xuK1xuIC8qIEdsb2JhbCBMUlUgbGlzdHMgc2hhcmVkIGJ5IGFsbCB6c3dhcCBwb29scy4gKi9cbiBzdGF0aWMgc3RydWN0IGxpc3RfbHJ1IHpzd2FwX2xpc3RfbHJ1O1xuIFxuQEAgLTE4Miw3ICsxOTQsNyBAQCBzdGF0aWMgc3RydWN0IHNocmlua2VyICp6c3dhcF9zaHJpbmtlcjtcbiAgKiAgICAgICAgICAgICAgd3JpdGViYWNrIGxvZ2ljLiBUaGUgZW50cnkgaXMgb25seSByZWNsYWltZWQgYnkgdGhlIHdyaXRlYmFja1xuICAqICAgICAgICAgICAgICBsb2dpYyBpZiByZWZlcmVuY2VkIGlzIHVuc2V0LiBTZWUgY29tbWVudHMgaW4gdGhlIHNocmlua2VyXG4gICogICAgICAgICAgICAgIHNlY3Rpb24gZm9yIGNvbnRleHQuXG4tICogcG9vbCAtIHRoZSB6c3dhcF9wb29sIHRoZSBlbnRyeSdzIGRhdGEgaXMgaW5cbisgKiBwb29sX2lkeCAtIGlkIG9mIHRoZSB6c3dhcF9wb29sIHRoYXQgdGhlIGVudHJ5J3MgZGF0YSBpcyBpbi5cbiAgKiBoYW5kbGUgLSB6c21hbGxvYyBhbGxvY2F0aW9uIGhhbmRsZSB0aGF0IHN0b3JlcyB0aGUgY29tcHJlc3NlZCBwYWdlIGRhdGFcbiAgKiBvYmpjZyAtIHRoZSBvYmpfY2dyb3VwIHRoYXQgdGhlIGNvbXByZXNzZWQgbWVtb3J5IGlzIGNoYXJnZWQgdG9cbiAgKiBscnUgLSBoYW5kbGUgdG8gdGhlIHBvb2wncyBscnUgdXNlZCB0byBldmljdCBwYWdlcy5cbkBAIC0xOTEsMTkgKzIwMywyNSBAQCBzdHJ1Y3QgenN3YXBfZW50cnkge1xuIFx0c3dwX2VudHJ5X3Qgc3dwZW50cnk7XG4gXHR1bnNpZ25lZCBpbnQgbGVuZ3RoO1xuIFx0Ym9vbCByZWZlcmVuY2VkO1xuLVx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7XG4rXHR1OCBwb29sX2lkeDtcbiBcdHVuc2lnbmVkIGxvbmcgaGFuZGxlO1xuIFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBscnU7XG4gfTtcbiBcbisvKlxuKyAqIE5vIFJDVSBzZWN0aW9uIGlzIG5lZWRlZCBhcm91bmQgdGhlIHJldHVybmVkIHBvaW50ZXI6IGEgc3RvcmVkIGVudHJ5IHBpbnNcbisgKiBpdHMgcG9vbCB2aWEgcGVyY3B1X3JlZiAodGFrZW4gaW4genN3YXBfc3RvcmVfcGFnZSgpKSwgc28gdGhlIGlkIGNhbm5vdCBiZVxuKyAqIHJldXNlZCB1bmRlciB1cy4gIENhbGxlcnMgV0FSTiBhbmQgaGFuZGxlIGEgTlVMTCBmcm9tIGEgY29ycnVwdCBwb29sX2lkeC5cbisgKi9cbitzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX2VudHJ5X3Bvb2woc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcbit7XG4rXHRyZXR1cm4geGFfbG9hZChcdTAwMjZ6c3dhcF9wb29scywgZW50cnktXHUwMDNlcG9vbF9pZHgpO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IHhhcnJheSAqenN3YXBfdHJlZXNbTUFYX1NXQVBGSUxFU107XG4gc3RhdGljIHVuc2lnbmVkIGludCBucl96c3dhcF90cmVlc1tNQVhfU1dBUEZJTEVTXTtcbiBcbi0vKiBSQ1UtcHJvdGVjdGVkIGl0ZXJhdGlvbiAqL1xuLXN0YXRpYyBMSVNUX0hFQUQoenN3YXBfcG9vbHMpO1xuLS8qIHByb3RlY3RzIHpzd2FwX3Bvb2xzIGxpc3QgbW9kaWZpY2F0aW9uICovXG4tc3RhdGljIERFRklORV9TUElOTE9DSyh6c3dhcF9wb29sc19sb2NrKTtcbiAvKiBwb29sIGNvdW50ZXIgdG8gcHJvdmlkZSB1bmlxdWUgbmFtZXMgdG8genNtYWxsb2MgKi9cbiBzdGF0aWMgYXRvbWljX3QgenN3YXBfcG9vbHNfY291bnQgPSBBVE9NSUNfSU5JVCgwKTtcbiBcbkBAIC0yNzUsNiArMjkzLDcgQEAgc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2NyZWF0ZShjaGFyICpjb21wcmVzc29yKVxuIFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7XG4gXHRjaGFyIG5hbWVbMzhdOyAvKiAnenN3YXAnICsgMzIgY2hhciAobWF4KSBudW0gKyBcXDAgKi9cbiBcdGludCByZXQsIGNwdTtcbitcdHUzMiBpZDtcbiBcbiBcdGlmICghenN3YXBfaGFzX3Bvb2wgXHUwMDI2XHUwMDI2ICFzdHJjbXAoY29tcHJlc3NvciwgWlNXQVBfUEFSQU1fVU5TRVQpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbkBAIC0zMjAsMTIgKzMzOSwyOSBAQCBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3JlYXRlKGNoYXIgKmNvbXByZXNzb3IpXG4gXHRcdFx0ICAgICAgUEVSQ1BVX1JFRl9BTExPV19SRUlOSVQsIEdGUF9LRVJORUwpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byByZWZfZmFpbDtcbi1cdElOSVRfTElTVF9IRUFEKFx1MDAyNnBvb2wtXHUwMDNlbGlzdCk7XG4rXG4rXHQvKlxuK1x0ICogUHVibGlzaCBvbmx5IGFmdGVyIHRoZSBwb29sIGlzIGZ1bGx5IGJ1aWx0LCBzbyBsb2NrbGVzcyB3YWxrZXJzXG4rXHQgKiBuZXZlciBzZWUgYSBoYWxmLWluaXRpYWxpemVkIHBvb2wuICBUaGUgX2JoIHZhcmlhbnQgcGFpcnMgd2l0aCB0aGVcbitcdCAqIHNvZnRpcnEtY29udGV4dCB4YV9sb2NrIHRha2VuIGluIF9fenN3YXBfcG9vbF9lbXB0eSgpLlxuK1x0ICovXG4rXHRyZXQgPSB4YV9hbGxvY19iaChcdTAwMjZ6c3dhcF9wb29scywgXHUwMDI2aWQsIHBvb2wsXG4rXHRcdFx0ICBYQV9MSU1JVChaU1dBUF9GSVJTVF9QT09MX0lELCBaU1dBUF9NQVhfUE9PTF9JRCksXG4rXHRcdFx0ICBHRlBfS0VSTkVMKTtcbitcdGlmIChyZXQpIHtcbitcdFx0aWYgKHJldCA9PSAtRUJVU1kpXG4rXHRcdFx0cHJfZXJyKFwiY2Fubm90IGFsbG9jYXRlIHBvb2wgaWQgKG1heCAlZCBsaXZlIHBvb2xzKVxcblwiLFxuK1x0XHRcdCAgICAgICBaU1dBUF9NQVhfUE9PTF9JRCAtIFpTV0FQX0ZJUlNUX1BPT0xfSUQgKyAxKTtcbitcdFx0Z290byB4YV9mYWlsO1xuK1x0fVxuK1x0cG9vbC1cdTAwM2VpZHggPSBpZDtcbiBcbiBcdHpzd2FwX3Bvb2xfZGVidWcoXCJjcmVhdGVkXCIsIHBvb2wpO1xuIFxuIFx0cmV0dXJuIHBvb2w7XG4gXG4reGFfZmFpbDpcbitcdHBlcmNwdV9yZWZfZXhpdChcdTAwMjZwb29sLVx1MDAzZXJlZik7XG4gcmVmX2ZhaWw6XG4gXHRjcHVocF9zdGF0ZV9yZW1vdmVfaW5zdGFuY2UoQ1BVSFBfTU1fWlNXUF9QT09MX1BSRVBBUkUsIFx1MDAyNnBvb2wtXHUwMDNlbm9kZSk7XG4gXG5AQCAtMzc5LDM3ICs0MTUsMjkgQEAgc3RhdGljIHZvaWQgenN3YXBfcG9vbF9kZXN0cm95KHN0cnVjdCB6c3dhcF9wb29sICpwb29sKVxuIFxuIHN0YXRpYyB2b2lkIF9fenN3YXBfcG9vbF9yZWxlYXNlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4tXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IGNvbnRhaW5lcl9vZih3b3JrLCB0eXBlb2YoKnBvb2wpLFxuLVx0XHRcdFx0XHRcdHJlbGVhc2Vfd29yayk7XG4tXG4tXHRzeW5jaHJvbml6ZV9yY3UoKTtcbitcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sID0gY29udGFpbmVyX29mKHRvX3JjdV93b3JrKHdvcmspLFxuK1x0XHRcdFx0XHQgICAgICAgdHlwZW9mKCpwb29sKSwgcmVsZWFzZV9yd29yayk7XG4gXG4gXHQvKiBub2JvZHkgc2hvdWxkIGhhdmUgYmVlbiBhYmxlIHRvIGdldCBhIHJlZi4uLiAqL1xuIFx0V0FSTl9PTighcGVyY3B1X3JlZl9pc196ZXJvKFx1MDAyNnBvb2wtXHUwMDNlcmVmKSk7XG4gXHRwZXJjcHVfcmVmX2V4aXQoXHUwMDI2cG9vbC1cdTAwM2VyZWYpO1xuIFxuLVx0LyogcG9vbCBpcyBub3cgb2ZmIHpzd2FwX3Bvb2xzIGxpc3QgYW5kIGhhcyBubyByZWZlcmVuY2VzLiAqL1xuK1x0LyogVGhlIHBvb2wgaXMgbm8gbG9uZ2VyIGluIHpzd2FwX3Bvb2xzIGFuZCBoYXMgbm8gcmVmZXJlbmNlcy4gKi9cbiBcdHpzd2FwX3Bvb2xfZGVzdHJveShwb29sKTtcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2N1cnJlbnQodm9pZCk7XG4tXG4gc3RhdGljIHZvaWQgX196c3dhcF9wb29sX2VtcHR5KHN0cnVjdCBwZXJjcHVfcmVmICpyZWYpXG4ge1xuIFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7XG4gXG4gXHRwb29sID0gY29udGFpbmVyX29mKHJlZiwgdHlwZW9mKCpwb29sKSwgcmVmKTtcbiBcbi1cdHNwaW5fbG9ja19iaChcdTAwMjZ6c3dhcF9wb29sc19sb2NrKTtcbi1cbi1cdFdBUk5fT04ocG9vbCA9PSB6c3dhcF9wb29sX2N1cnJlbnQoKSk7XG4rXHRXQVJOX09OKHBvb2wgPT0gcmN1X2FjY2Vzc19wb2ludGVyKHpzd2FwX2N1cnJlbnRfcG9vbCkpO1xuIFxuLVx0bGlzdF9kZWxfcmN1KFx1MDAyNnBvb2wtXHUwMDNlbGlzdCk7XG4rXHR4YV9lcmFzZV9iaChcdTAwMjZ6c3dhcF9wb29scywgcG9vbC1cdTAwM2VpZHgpO1xuIFxuLVx0SU5JVF9XT1JLKFx1MDAyNnBvb2wtXHUwMDNlcmVsZWFzZV93b3JrLCBfX3pzd2FwX3Bvb2xfcmVsZWFzZSk7XG4tXHRzY2hlZHVsZV93b3JrKFx1MDAyNnBvb2wtXHUwMDNlcmVsZWFzZV93b3JrKTtcbi1cbi1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnpzd2FwX3Bvb2xzX2xvY2spO1xuK1x0SU5JVF9SQ1VfV09SSyhcdTAwMjZwb29sLVx1MDAzZXJlbGVhc2VfcndvcmssIF9fenN3YXBfcG9vbF9yZWxlYXNlKTtcbitcdHF1ZXVlX3JjdV93b3JrKHN5c3RlbV9wZXJjcHVfd3EsIFx1MDAyNnBvb2wtXHUwMDNlcmVsZWFzZV9yd29yayk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIHpzd2FwX3Bvb2xfdHJ5Z2V0KHN0cnVjdCB6c3dhcF9wb29sICpwb29sKVxuQEAgLTQzNSwyMCArNDYzLDEzIEBAIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqX196c3dhcF9wb29sX2N1cnJlbnQodm9pZClcbiB7XG4gXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDtcbiBcbi1cdHBvb2wgPSBsaXN0X2ZpcnN0X29yX251bGxfcmN1KFx1MDAyNnpzd2FwX3Bvb2xzLCB0eXBlb2YoKnBvb2wpLCBsaXN0KTtcbitcdHBvb2wgPSByY3VfZGVyZWZlcmVuY2UoenN3YXBfY3VycmVudF9wb29sKTtcbiBcdFdBUk5fT05DRSghcG9vbCBcdTAwMjZcdTAwMjYgenN3YXBfaGFzX3Bvb2wsXG4gXHRcdCAgXCIlczogbm8gcGFnZSBzdG9yYWdlIHBvb2whXFxuXCIsIF9fZnVuY19fKTtcbiBcbiBcdHJldHVybiBwb29sO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3VycmVudCh2b2lkKVxuLXtcbi1cdGFzc2VydF9zcGluX2xvY2tlZChcdTAwMjZ6c3dhcF9wb29sc19sb2NrKTtcbi1cbi1cdHJldHVybiBfX3pzd2FwX3Bvb2xfY3VycmVudCgpO1xuLX1cbi1cbiBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3VycmVudF9nZXQodm9pZClcbiB7XG4gXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDtcbkBAIC00NjQsMjMgKzQ4NSwyOCBAQCBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3VycmVudF9nZXQodm9pZClcbiBcdHJldHVybiBwb29sO1xuIH1cbiBcbi0vKiB0eXBlIGFuZCBjb21wcmVzc29yIG11c3QgYmUgbnVsbC10ZXJtaW5hdGVkICovXG4rLyogY29tcHJlc3NvciBtdXN0IGJlIG51bGwtdGVybWluYXRlZCAqL1xuIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9maW5kX2dldChjaGFyICpjb21wcmVzc29yKVxuIHtcbiBcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sO1xuK1x0dW5zaWduZWQgbG9uZyBpZDtcbiBcbi1cdGFzc2VydF9zcGluX2xvY2tlZChcdTAwMjZ6c3dhcF9wb29sc19sb2NrKTtcbi1cbi1cdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBvb2wsIFx1MDAyNnpzd2FwX3Bvb2xzLCBsaXN0KSB7XG4rXHQvKlxuK1x0ICogX196c3dhcF9wb29sX2VtcHR5KCkgY2FuIGVyYXNlIGZyb20genN3YXBfcG9vbHMgaW4gc29mdGlycSB3aGlsZSB3ZVxuK1x0ICogd2Fsay4gIHJjdV9yZWFkX2xvY2soKSBrZWVwcyB0aGUgd2FsayBjb25zaXN0ZW50IGFuZCBlYWNoIHBvb2wgYWxpdmVcbitcdCAqIGFjcm9zcyB0cnlnZXQoKS4gIHhhX2Zvcl9lYWNoKCkncyBvd24gUkNVIGRvZXMgbm90IHNwYW4gdGhlIGxvb3AgYm9keS5cbitcdCAqL1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0eGFfZm9yX2VhY2goXHUwMDI2enN3YXBfcG9vbHMsIGlkLCBwb29sKSB7XG4gXHRcdGlmIChzdHJjbXAocG9vbC1cdTAwM2V0Zm1fbmFtZSwgY29tcHJlc3NvcikpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdC8qIGlmIHdlIGNhbid0IGdldCBpdCwgaXQncyBhYm91dCB0byBiZSBkZXN0cm95ZWQgKi9cbi1cdFx0aWYgKCF6c3dhcF9wb29sX3RyeWdldChwb29sKSlcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0cmV0dXJuIHBvb2w7XG4rXHRcdGlmICh6c3dhcF9wb29sX3RyeWdldChwb29sKSlcbitcdFx0XHRicmVhaztcbiBcdH1cbitcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuLVx0cmV0dXJuIE5VTEw7XG4rXHRyZXR1cm4gcG9vbDtcbiB9XG4gXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgenN3YXBfbWF4X3BhZ2VzKHZvaWQpXG5AQCAtNDk3LDkgKzUyMywxNCBAQCB1bnNpZ25lZCBsb25nIHpzd2FwX3RvdGFsX3BhZ2VzKHZvaWQpXG4ge1xuIFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7XG4gXHR1bnNpZ25lZCBsb25nIHRvdGFsID0gMDtcbitcdHVuc2lnbmVkIGxvbmcgaWQ7XG4gXG4rXHQvKlxuK1x0ICogcmN1X3JlYWRfbG9jaygpIGtlZXBzIGVhY2ggcG9vbCBhbGl2ZSBhY3Jvc3MgenNfZ2V0X3RvdGFsX3BhZ2VzKCkuXG4rXHQgKiB4YV9mb3JfZWFjaCgpJ3Mgb3duIFJDVSBkb2VzIG5vdCBzcGFuIHRoZSBsb29wIGJvZHkuXG4rXHQgKi9cbiBcdHJjdV9yZWFkX2xvY2soKTtcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBvb2wsIFx1MDAyNnpzd2FwX3Bvb2xzLCBsaXN0KVxuK1x0eGFfZm9yX2VhY2goXHUwMDI2enN3YXBfcG9vbHMsIGlkLCBwb29sKVxuIFx0XHR0b3RhbCArPSB6c19nZXRfdG90YWxfcGFnZXMocG9vbC1cdTAwM2V6c19wb29sKTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuQEAgLTU1NiwyMCArNTg3LDEzIEBAIHN0YXRpYyBpbnQgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuIFx0fVxuIFxuLVx0c3Bpbl9sb2NrX2JoKFx1MDAyNnpzd2FwX3Bvb2xzX2xvY2spO1xuLVxuIFx0cG9vbCA9IHpzd2FwX3Bvb2xfZmluZF9nZXQocyk7XG4tXHRpZiAocG9vbCkge1xuK1x0aWYgKCFwb29sKSB7XG4rXHRcdHBvb2wgPSB6c3dhcF9wb29sX2NyZWF0ZShzKTtcbitcdH0gZWxzZSB7XG4gXHRcdHpzd2FwX3Bvb2xfZGVidWcoXCJ1c2luZyBleGlzdGluZ1wiLCBwb29sKTtcbi1cdFx0V0FSTl9PTihwb29sID09IHpzd2FwX3Bvb2xfY3VycmVudCgpKTtcbi1cdFx0bGlzdF9kZWxfcmN1KFx1MDAyNnBvb2wtXHUwMDNlbGlzdCk7XG4tXHR9XG4rXHRcdFdBUk5fT04ocG9vbCA9PSByY3VfYWNjZXNzX3BvaW50ZXIoenN3YXBfY3VycmVudF9wb29sKSk7XG4gXG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZ6c3dhcF9wb29sc19sb2NrKTtcbi1cbi1cdGlmICghcG9vbClcbi1cdFx0cG9vbCA9IHpzd2FwX3Bvb2xfY3JlYXRlKHMpO1xuLVx0ZWxzZSB7XG4gXHRcdC8qXG4gXHRcdCAqIFJlc3RvcmUgdGhlIGluaXRpYWwgcmVmIGRyb3BwZWQgYnkgcGVyY3B1X3JlZl9raWxsKClcbiBcdFx0ICogd2hlbiB0aGUgcG9vbCB3YXMgZGVjb21taXNzaW9uZWQgYW5kIHN3aXRjaCBpdCBhZ2FpblxuQEAgLTU4NiwyNCArNjEwLDE4IEBAIHN0YXRpYyBpbnQgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtXG4gXHRlbHNlXG4gXHRcdHJldCA9IC1FSU5WQUw7XG4gXG4tXHRzcGluX2xvY2tfYmgoXHUwMDI2enN3YXBfcG9vbHNfbG9jayk7XG4tXG4rXHQvKlxuK1x0ICogQ29tcHJlc3NvciBzd2l0Y2hlcyBhcmUgc2VyaWFsaXplZCBieSB0aGUga2VybmVsIHBhcmFtIGxvY2ssIHNvIHRoaXNcbitcdCAqIGlzIHRoZSBvbmx5IHdyaXRlciBvZiB6c3dhcF9jdXJyZW50X3Bvb2w6IG5vIHhhX2xvY2sgbmVlZGVkLlxuK1x0ICovXG4gXHRpZiAoIXJldCkge1xuLVx0XHRwdXRfcG9vbCA9IHpzd2FwX3Bvb2xfY3VycmVudCgpO1xuLVx0XHRsaXN0X2FkZF9yY3UoXHUwMDI2cG9vbC1cdTAwM2VsaXN0LCBcdTAwMjZ6c3dhcF9wb29scyk7XG4rXHRcdHB1dF9wb29sID0gcmN1X2FjY2Vzc19wb2ludGVyKHpzd2FwX2N1cnJlbnRfcG9vbCk7XG4rXHRcdHJjdV9hc3NpZ25fcG9pbnRlcih6c3dhcF9jdXJyZW50X3Bvb2wsIHBvb2wpO1xuIFx0XHR6c3dhcF9oYXNfcG9vbCA9IHRydWU7XG4gXHR9IGVsc2UgaWYgKHBvb2wpIHtcbi1cdFx0Lypcbi1cdFx0ICogQWRkIHRoZSBwb3NzaWJseSBwcmUtZXhpc3RpbmcgcG9vbCB0byB0aGUgZW5kIG9mIHRoZSBwb29sc1xuLVx0XHQgKiBsaXN0OyBpZiBpdCdzIG5ldyAoYW5kIGVtcHR5KSB0aGVuIGl0J2xsIGJlIHJlbW92ZWQgYW5kXG4tXHRcdCAqIGRlc3Ryb3llZCBieSB0aGUgcHV0IGFmdGVyIHdlIGRyb3AgdGhlIGxvY2tcbi1cdFx0ICovXG4tXHRcdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNnBvb2wtXHUwMDNlbGlzdCwgXHUwMDI2enN3YXBfcG9vbHMpO1xuIFx0XHRwdXRfcG9vbCA9IHBvb2w7XG4gXHR9XG4gXG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZ6c3dhcF9wb29sc19sb2NrKTtcbi1cbiBcdC8qXG4gXHQgKiBEcm9wIHRoZSByZWYgZnJvbSBlaXRoZXIgdGhlIG9sZCBjdXJyZW50IHBvb2wsXG4gXHQgKiBvciB0aGUgbmV3IHBvb2wgd2UgZmFpbGVkIHRvIGFkZFxuQEAgLTc1MSw5ICs3NjksMTMgQEAgc3RhdGljIHZvaWQgenN3YXBfZW50cnlfY2FjaGVfZnJlZShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxuICAqL1xuIHN0YXRpYyB2b2lkIHpzd2FwX2VudHJ5X2ZyZWUoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcbiB7XG4rXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IHpzd2FwX2VudHJ5X3Bvb2woZW50cnkpO1xuK1xuIFx0enN3YXBfbHJ1X2RlbChlbnRyeSk7XG4tXHR6c19mcmVlKGVudHJ5LVx1MDAzZXBvb2wtXHUwMDNlenNfcG9vbCwgZW50cnktXHUwMDNlaGFuZGxlKTtcbi1cdHpzd2FwX3Bvb2xfcHV0KGVudHJ5LVx1MDAzZXBvb2wpO1xuK1x0aWYgKCFXQVJOX09OX09OQ0UoIXBvb2wpKSB7XG4rXHRcdHpzX2ZyZWUocG9vbC1cdTAwM2V6c19wb29sLCBlbnRyeS1cdTAwM2VoYW5kbGUpO1xuK1x0XHR6c3dhcF9wb29sX3B1dChwb29sKTtcbitcdH1cbiBcdGlmIChlbnRyeS1cdTAwM2VvYmpjZykge1xuIFx0XHRvYmpfY2dyb3VwX3VuY2hhcmdlX3pzd2FwKGVudHJ5LVx1MDAzZW9iamNnLCBlbnRyeS1cdTAwM2VsZW5ndGgpO1xuIFx0XHRvYmpfY2dyb3VwX3B1dChlbnRyeS1cdTAwM2VvYmpjZyk7XG5AQCAtOTEwLDEyICs5MzIsMTUgQEAgc3RhdGljIGJvb2wgenN3YXBfY29tcHJlc3Moc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXG4gc3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbi1cdHN0cnVjdCB6c3dhcF9wb29sICpwb29sID0gZW50cnktXHUwMDNlcG9vbDtcbitcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sID0genN3YXBfZW50cnlfcG9vbChlbnRyeSk7XG4gXHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgaW5wdXRbMl07IC8qIHpzbWFsbG9jIHJldHVybnMgYW4gU0cgbGlzdCAxLTIgZW50cmllcyAqL1xuIFx0c3RydWN0IHNjYXR0ZXJsaXN0IG91dHB1dDtcbiBcdHN0cnVjdCBjcnlwdG9fYWNvbXBfY3R4ICphY29tcF9jdHg7XG4gXHRpbnQgcmV0ID0gMCwgZGxlbjtcbiBcbitcdGlmIChXQVJOX09OX09OQ0UoIXBvb2wpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4gXHRhY29tcF9jdHggPSByYXdfY3B1X3B0cihwb29sLVx1MDAzZWFjb21wX2N0eCk7XG4gXHRtdXRleF9sb2NrKFx1MDAyNmFjb21wX2N0eC1cdTAwM2VtdXRleCk7XG4gXHR6c19vYmpfcmVhZF9zZ19iZWdpbihwb29sLVx1MDAzZXpzX3Bvb2wsIGVudHJ5LVx1MDAzZWhhbmRsZSwgaW5wdXQsIGVudHJ5LVx1MDAzZWxlbmd0aCk7XG5AQCAtOTUxLDcgKzk3Niw3IEBAIHN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHByX2FsZXJ0X3JhdGVsaW1pdGVkKFwiRGVjb21wcmVzc2lvbiBlcnJvciBmcm9tIHpzd2FwICglZDolbHUgJXMgJXUtXHUwMDNlJWQpXFxuXCIsXG4gXHRcdFx0XHRcdFx0c3dwX3R5cGUoZW50cnktXHUwMDNlc3dwZW50cnkpLFxuIFx0XHRcdFx0XHRcdHN3cF9vZmZzZXQoZW50cnktXHUwMDNlc3dwZW50cnkpLFxuLVx0XHRcdFx0XHRcdGVudHJ5LVx1MDAzZXBvb2wtXHUwMDNldGZtX25hbWUsXG4rXHRcdFx0XHRcdFx0cG9vbC1cdTAwM2V0Zm1fbmFtZSxcbiBcdFx0XHRcdFx0XHRlbnRyeS1cdTAwM2VsZW5ndGgsIGRsZW4pO1xuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbkBAIC0xNDA5LDYgKzE0MzQsMTMgQEAgc3RhdGljIGJvb2wgenN3YXBfc3RvcmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdGlmICghenN3YXBfY29tcHJlc3MocGFnZSwgZW50cnksIHBvb2wpKVxuIFx0XHRnb3RvIGNvbXByZXNzX2ZhaWxlZDtcbiBcbitcdC8qXG4rXHQgKiBTZXQgcG9vbF9pZHggYmVmb3JlIHRoZSB4YV9zdG9yZSgpIGJlbG93IHB1Ymxpc2hlcyB0aGUgZW50cnksIG9yIGFcbitcdCAqIGNvbmN1cnJlbnQgcmVhZGVyIGNvdWxkIHJlc29sdmUgYSBzdGFsZSBwb29sX2lkeCBsZWZ0IGJ5IHNsYWIgcmV1c2VcbitcdCAqIHRvIGFuIHVucmVsYXRlZCBsaXZlIHBvb2wuXG4rXHQgKi9cbitcdGVudHJ5LVx1MDAzZXBvb2xfaWR4ID0gcG9vbC1cdTAwM2VpZHg7XG4rXG4gXHRvbGQgPSB4YV9zdG9yZShzd2FwX3pzd2FwX3RyZWUocGFnZV9zd3BlbnRyeSksXG4gXHRcdCAgICAgICBzd3Bfb2Zmc2V0KHBhZ2Vfc3dwZW50cnkpLFxuIFx0XHQgICAgICAgZW50cnksIEdGUF9LRVJORUwpO1xuQEAgLTE0NTQsNyArMTQ4Niw2IEBAIHN0YXRpYyBib29sIHpzd2FwX3N0b3JlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHQgKiAgICBUaGUgcHVibGlzaGluZyBvcmRlciBtYXR0ZXJzIHRvIHByZXZlbnQgd3JpdGViYWNrIGZyb20gc2VlaW5nXG4gXHQgKiAgICBhbiBpbmNvaGVyZW50IGVudHJ5LlxuIFx0ICovXG4tXHRlbnRyeS1cdTAwM2Vwb29sID0gcG9vbDtcbiBcdGVudHJ5LVx1MDAzZXN3cGVudHJ5ID0gcGFnZV9zd3BlbnRyeTtcbiBcdGVudHJ5LVx1MDAzZW9iamNnID0gb2JqY2c7XG4gXHRlbnRyeS1cdTAwM2VyZWZlcmVuY2VkID0gdHJ1ZTtcbkBAIC0xNzkwLDcgKzE4MjEsNyBAQCBzdGF0aWMgaW50IHpzd2FwX3NldHVwKHZvaWQpXG4gXHRwb29sID0gX196c3dhcF9wb29sX2NyZWF0ZV9mYWxsYmFjaygpO1xuIFx0aWYgKHBvb2wpIHtcbiBcdFx0cHJfaW5mbyhcImxvYWRlZCB1c2luZyBwb29sICVzXFxuXCIsIHBvb2wtXHUwMDNldGZtX25hbWUpO1xuLVx0XHRsaXN0X2FkZChcdTAwMjZwb29sLVx1MDAzZWxpc3QsIFx1MDAyNnpzd2FwX3Bvb2xzKTtcbitcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHpzd2FwX2N1cnJlbnRfcG9vbCwgcG9vbCk7XG4gXHRcdHpzd2FwX2hhc19wb29sID0gdHJ1ZTtcbiBcdFx0c3RhdGljX2JyYW5jaF9lbmFibGUoXHUwMDI2enN3YXBfZXZlcl9lbmFibGVkKTtcbiBcdH0gZWxzZSB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMDoxODo0Ny41MTkxNzgzMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDM4ODY2Njk5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFpzd2FwIFBhdGNoOiBNZW1vcnkgU2FmZXR5IGFuZCBDb25jdXJyZW5jeSBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIHJlZmFjdG9yaW5nIG9mIGB6c3dhcF9wb29sYCBtYW5hZ2VtZW50IGludHJvZHVjZXMgb3IgZXhhY2VyYmF0ZXMgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBzcGVjaWZpY2FsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgZGV0ZWN0YWJsZSBieSBLTVNBTi4gSSBhbHNvIG5lZWQgdG8gYXNzZXNzIGlmIHRoaXMgaXMgcHJpbWFyaWx5IGEgbWF0dGVyIG9mIGNvbmN1cnJlbmN5LCBsaWZlY3ljbGUgbWFuYWdlbWVudCwgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZXMgdGhhdCBtaWdodCB0cmlnZ2VyIEtBU0FOIG9yIExPQ0tERVAgY29uY2VybnMuXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhlIGNvZGUgY2hhbmdlcy4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIHJlcGxhY2luZyB0aGUgZXhpc3RpbmcgbGlua2VkIGxpc3QgYHpzd2FwX3Bvb2xzYCB3aXRoIGFuIFhBcnJheSBhbmQgdXNpbmcgYW4gUkNVIHBvaW50ZXIgZm9yIGB6c3dhcF9jdXJyZW50X3Bvb2xgLiBJbnRlcmVzdGluZy4gVGhleSdyZSBhbHNvIHN3YXBwaW5nIHRoZSBgZW50cnktXHUwMDNlcG9vbGAgcG9pbnRlciB3aXRoaW4gdGhlIGB6c3dhcF9lbnRyeWAgc3RydWN0dXJlIHdpdGggYSBgdTggcG9vbF9pZHhgLCBhY3RpbmcgYXMgYW4gaW5kZXggaW50byB0aGUgYHpzd2FwX3Bvb2xzYCBYQXJyYXkuIFRoaXMgaXMgZm9sbG93ZWQgYnkgdXNpbmcgYHpzd2FwX2VudHJ5X3Bvb2woZW50cnkpYCB0byBsb29rIHVwIHRoZSBwb29sIHVzaW5nIGB4YV9sb2FkYC5cblxuTm93LCB0aGUgY3JpdGljYWwgcGFydDogSSBuZWVkIHRvIHRob3JvdWdobHkgZXhhbWluZSB0aGUgYWxsb2NhdGlvbiBhbmQgdXNhZ2Ugb2YgYHpzd2FwX2VudHJ5YC4gR2l2ZW4gdGhpcyBgcG9vbF9pZHhgIGFwcHJvYWNoLCBJIG5lZWQgdG8gZW5zdXJlIGl0J3MgaW5pdGlhbGl6ZWQgY29ycmVjdGx5IGFuZCB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgYWNjZXNzLiBJJ2xsIG5lZWQgdG8gdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb2RlIHNlY3Rpb25zIGluIGBtbS96c3dhcC5jYC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHpzd2FwX3Bvb2xfY3JlYXRlYCwgYF9fenN3YXBfcG9vbF9yZWxlYXNlYCwgYF9fenN3YXBfcG9vbF9lbXB0eWAsIGB6c3dhcF9wb29sX2ZpbmRfZ2V0YCwgYW5kIHRoZSBvdGhlciBmdW5jdGlvbnMgYXJlIGltcGFjdGVkIGJ5IHRoZXNlIGNoYW5nZXMuIFRoaXMgaGFzIHRoZSBwb3RlbnRpYWwgdG8gaW50cm9kdWNlIHN1YnRsZSBpc3N1ZXMgYXJvdW5kIHRoZSBsaWZlY3ljbGUgb2YgdGhlc2UgcG9vbHMsIGFuZCBJIG5lZWQgdG8gYmUgY2VydGFpbiB0aGF0IHRoZSBpbmRpY2VzIGFyZSBtYW5hZ2VkIHByb3Blcmx5LiBUaGlzIGlzIGNydWNpYWwgZm9yIGJvdGggY29ycmVjdG5lc3MgYW5kIHBlcmZvcm1hbmNlLiBGaW5hbGx5LCBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZSBvbiB0aGUgY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gcm91dGluZXMgbGlrZSBgenN3YXBfZGVjb21wcmVzc2AsIGB6c3dhcF9zdG9yZV9wYWdlYCwgYW5kIHRoZSBzZXR1cCByb3V0aW5lcyBzdWNoIGFzIGB6c3dhcF9zZXR1cGAuIFRoZSBnb2FsIGhlcmUgaXMgdG8gbWFrZSBzdXJlIGFsbCBtZW1vcnkgYWNjZXNzZXMgYXJlIHZhbGlkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDEwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjA6MTg6NTcuOTA3ODQ3OFoiLCJTZXEiOjE4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1MzU5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwienN3YXBfZW50cnlfY2FjaGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0venN3YXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS96c3dhcC5jPTczNT12b2lkIHpzd2FwX21lbWNnX29mZmxpbmVfY2xlYW51cChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS96c3dhcC5jLTc0OS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbm1tL3pzd2FwLmM6NzUwOnN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqenN3YXBfZW50cnlfY2FjaGU7XFxubW0venN3YXAuYy03NTEtXFxubW0venN3YXAuYzo3NTI6c3RhdGljIHN0cnVjdCB6c3dhcF9lbnRyeSAqenN3YXBfZW50cnlfY2FjaGVfYWxsb2MoZ2ZwX3QgZ2ZwLCBpbnQgbmlkKVxcbm1tL3pzd2FwLmMtNzUzLXtcXG5tbS96c3dhcC5jLTc1NC1cXHRzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5O1xcbm1tL3pzd2FwLmM6NzU1OlxcdGVudHJ5ID0ga21lbV9jYWNoZV9hbGxvY19ub2RlKHpzd2FwX2VudHJ5X2NhY2hlLCBnZnAsIG5pZCk7XFxubW0venN3YXAuYy03NTYtXFx0aWYgKCFlbnRyeSlcXG4tLVxcbm1tL3pzd2FwLmMtNzYwLVxcbm1tL3pzd2FwLmM6NzYxOnN0YXRpYyB2b2lkIHpzd2FwX2VudHJ5X2NhY2hlX2ZyZWUoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcXG5tbS96c3dhcC5jLTc2Mi17XFxubW0venN3YXAuYzo3NjM6XFx0a21lbV9jYWNoZV9mcmVlKHpzd2FwX2VudHJ5X2NhY2hlLCBlbnRyeSk7XFxubW0venN3YXAuYy03NjQtfVxcbi0tXFxubW0venN3YXAuYz03NzA9c3RhdGljIHZvaWQgenN3YXBfZW50cnlfZnJlZShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxcbi0tXFxubW0venN3YXAuYy03ODQtXFx0XFx0YXRvbWljX2xvbmdfZGVjKFxcdTAwMjZ6c3dhcF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXMpO1xcbm1tL3pzd2FwLmM6Nzg1OlxcdHpzd2FwX2VudHJ5X2NhY2hlX2ZyZWUoZW50cnkpO1xcbm1tL3pzd2FwLmMtNzg2LVxcdGF0b21pY19sb25nX2RlYyhcXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcXG4tLVxcbm1tL3pzd2FwLmM9MTQyMD1zdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubW0venN3YXAuYy0xNDI3LVxcdC8qIGFsbG9jYXRlIGVudHJ5ICovXFxubW0venN3YXAuYzoxNDI4OlxcdGVudHJ5ID0genN3YXBfZW50cnlfY2FjaGVfYWxsb2MoR0ZQX0tFUk5FTCwgcGFnZV90b19uaWQocGFnZSkpO1xcbm1tL3pzd2FwLmMtMTQyOS1cXHRpZiAoIWVudHJ5KSB7XFxuLS1cXG5tbS96c3dhcC5jLTE1MDEtY29tcHJlc3NfZmFpbGVkOlxcbm1tL3pzd2FwLmM6MTUwMjpcXHR6c3dhcF9lbnRyeV9jYWNoZV9mcmVlKGVudHJ5KTtcXG5tbS96c3dhcC5jLTE1MDMtXFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubW0venN3YXAuYz0xNzg5PXN0YXRpYyBpbnQgenN3YXBfc2V0dXAodm9pZClcXG4tLVxcbm1tL3pzd2FwLmMtMTc5My1cXG5tbS96c3dhcC5jOjE3OTQ6XFx0enN3YXBfZW50cnlfY2FjaGUgPSBLTUVNX0NBQ0hFKHpzd2FwX2VudHJ5LCAwKTtcXG5tbS96c3dhcC5jOjE3OTU6XFx0aWYgKCF6c3dhcF9lbnRyeV9jYWNoZSkge1xcbm1tL3pzd2FwLmMtMTc5Ni1cXHRcXHRwcl9lcnIoXFxcImVudHJ5IGNhY2hlIGNyZWF0aW9uIGZhaWxlZFxcXFxuXFxcIik7XFxuLS1cXG5tbS96c3dhcC5jLTE4NDMtaHBfZmFpbDpcXG5tbS96c3dhcC5jOjE4NDQ6XFx0a21lbV9jYWNoZV9kZXN0cm95KHpzd2FwX2VudHJ5X2NhY2hlKTtcXG5tbS96c3dhcC5jLTE4NDUtY2FjaGVfZmFpbDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjA6MTg6NTcuOTU1Mzk4NDE5WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyOTg5MTA0NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIGNvZGUgaW52ZXN0aWdhdGlvbiwgdGhpbmtpbmcgdGhyb3VnaCBpdCBzdGVwLWJ5LXN0ZXA6XG5cbioqQW5hbHl6aW5nIGB6c3dhcF9zdG9yZV9wYWdlYCBJbml0aWFsaXphdGlvbioqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyBoYXBwZW5pbmcgd2l0aCBgenN3YXBfc3RvcmVfcGFnZWAuIEknbSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhhdCBzcGVjaWZpYyBibG9jayBvZiBjb2RlLCByb3VnaGx5IGxpbmVzIDE0MjAgdG8gMTUwMC4gTXkgZ29hbCBpcyB0byBtYXAgb3V0IHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIG1ldGljdWxvdXNseS4gSSB3YW50IHRvIGtub3cgZXhhY3RseSB3aGljaCBkYXRhIGZpZWxkcyBhcmUgYmVpbmcgc2V0IHVwLCBhbmQganVzdCBhcyBjcml0aWNhbGx5LCB3aGVuIGFuZCBob3cgdGhhdCBpbml0aWFsaXphdGlvbiBvY2N1cnMuIEknbSBsb29raW5nIGZvciB0aGUgc2VxdWVuY2Ugb2YgZXZlbnRzIGhlcmUuIFVuZGVyc3RhbmRpbmcgdGhlIG9yZGVyIGluIHdoaWNoIHRoaW5ncyBhcmUgY29uZmlndXJlZCBpcyBvZnRlbiBrZXkgdG8gZGVidWdnaW5nIG9yIG1vZGlmeWluZyB0aGlzIGtpbmQgb2YgY29kZS4gQW55IHN1YnRsZSBkZXBlbmRlbmNpZXMgb3Igc2lkZSBlZmZlY3RzIGluIHRoYXQgc2VjdGlvbiBhcmUgaW1wb3J0YW50LiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgYW55IGhpZGRlbiBnb3RjaGFzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTgzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjA6MTk6MDAuMjU0MzEyMDM0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS96c3dhcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0MjAsXG4gIFwiTGluZUNvdW50XCI6IDkwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0MjA6XFx0c3RhdGljIGJvb2wgenN3YXBfc3RvcmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4xNDIxOlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxcbjE0MjI6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbClcXG4xNDIzOlxcdHtcXG4xNDI0OlxcdFxcdHN3cF9lbnRyeV90IHBhZ2Vfc3dwZW50cnkgPSBwYWdlX3N3YXBfZW50cnkocGFnZSk7XFxuMTQyNTpcXHRcXHRzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCAqb2xkO1xcbjE0MjY6XFx0XFxuMTQyNzpcXHRcXHQvKiBhbGxvY2F0ZSBlbnRyeSAqL1xcbjE0Mjg6XFx0XFx0ZW50cnkgPSB6c3dhcF9lbnRyeV9jYWNoZV9hbGxvYyhHRlBfS0VSTkVMLCBwYWdlX3RvX25pZChwYWdlKSk7XFxuMTQyOTpcXHRcXHRpZiAoIWVudHJ5KSB7XFxuMTQzMDpcXHRcXHRcXHR6c3dhcF9yZWplY3Rfa21lbWNhY2hlX2ZhaWwrKztcXG4xNDMxOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4xNDMyOlxcdFxcdH1cXG4xNDMzOlxcdFxcbjE0MzQ6XFx0XFx0aWYgKCF6c3dhcF9jb21wcmVzcyhwYWdlLCBlbnRyeSwgcG9vbCkpXFxuMTQzNTpcXHRcXHRcXHRnb3RvIGNvbXByZXNzX2ZhaWxlZDtcXG4xNDM2OlxcdFxcbjE0Mzc6XFx0XFx0LypcXG4xNDM4OlxcdFxcdCAqIFNldCBwb29sX2lkeCBiZWZvcmUgdGhlIHhhX3N0b3JlKCkgYmVsb3cgcHVibGlzaGVzIHRoZSBlbnRyeSwgb3IgYVxcbjE0Mzk6XFx0XFx0ICogY29uY3VycmVudCByZWFkZXIgY291bGQgcmVzb2x2ZSBhIHN0YWxlIHBvb2xfaWR4IGxlZnQgYnkgc2xhYiByZXVzZVxcbjE0NDA6XFx0XFx0ICogdG8gYW4gdW5yZWxhdGVkIGxpdmUgcG9vbC5cXG4xNDQxOlxcdFxcdCAqL1xcbjE0NDI6XFx0XFx0ZW50cnktXFx1MDAzZXBvb2xfaWR4ID0gcG9vbC1cXHUwMDNlaWR4O1xcbjE0NDM6XFx0XFxuMTQ0NDpcXHRcXHRvbGQgPSB4YV9zdG9yZShzd2FwX3pzd2FwX3RyZWUocGFnZV9zd3BlbnRyeSksXFxuMTQ0NTpcXHRcXHRcXHQgICAgICAgc3dwX29mZnNldChwYWdlX3N3cGVudHJ5KSxcXG4xNDQ2OlxcdFxcdFxcdCAgICAgICBlbnRyeSwgR0ZQX0tFUk5FTCk7XFxuMTQ0NzpcXHRcXHRpZiAoeGFfaXNfZXJyKG9sZCkpIHtcXG4xNDQ4OlxcdFxcdFxcdGludCBlcnIgPSB4YV9lcnIob2xkKTtcXG4xNDQ5OlxcdFxcbjE0NTA6XFx0XFx0XFx0V0FSTl9PTkNFKGVyciAhPSAtRU5PTUVNLCBcXFwidW5leHBlY3RlZCB4YXJyYXkgZXJyb3I6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbjE0NTE6XFx0XFx0XFx0enN3YXBfcmVqZWN0X2FsbG9jX2ZhaWwrKztcXG4xNDUyOlxcdFxcdFxcdGdvdG8gc3RvcmVfZmFpbGVkO1xcbjE0NTM6XFx0XFx0fVxcbjE0NTQ6XFx0XFxuMTQ1NTpcXHRcXHQvKlxcbjE0NTY6XFx0XFx0ICogV2UgbWF5IGhhdmUgaGFkIGFuIGV4aXN0aW5nIGVudHJ5IHRoYXQgYmVjYW1lIHN0YWxlIHdoZW5cXG4xNDU3OlxcdFxcdCAqIHRoZSBmb2xpbyB3YXMgcmVkaXJ0aWVkIGFuZCBub3cgdGhlIG5ldyB2ZXJzaW9uIGlzIGJlaW5nXFxuMTQ1ODpcXHRcXHQgKiBzd2FwcGVkIG91dC4gR2V0IHJpZCBvZiB0aGUgb2xkLlxcbjE0NTk6XFx0XFx0ICovXFxuMTQ2MDpcXHRcXHRpZiAob2xkKVxcbjE0NjE6XFx0XFx0XFx0enN3YXBfZW50cnlfZnJlZShvbGQpO1xcbjE0NjI6XFx0XFxuMTQ2MzpcXHRcXHQvKlxcbjE0NjQ6XFx0XFx0ICogVGhlIGVudHJ5IGlzIHN1Y2Nlc3NmdWxseSBjb21wcmVzc2VkIGFuZCBzdG9yZWQgaW4gdGhlIHRyZWUsIHRoZXJlIGlzXFxuMTQ2NTpcXHRcXHQgKiBubyBmdXJ0aGVyIHBvc3NpYmlsaXR5IG9mIGZhaWx1cmUuIEdyYWIgcmVmcyB0byB0aGUgcG9vbCBhbmQgb2JqY2csXFxuMTQ2NjpcXHRcXHQgKiBjaGFyZ2UgenN3YXAgbWVtb3J5LCBhbmQgaW5jcmVtZW50IHpzd2FwX3N0b3JlZF9wYWdlcy5cXG4xNDY3OlxcdFxcdCAqIFRoZSBvcHBvc2l0ZSBhY3Rpb25zIHdpbGwgYmUgcGVyZm9ybWVkIGJ5IHpzd2FwX2VudHJ5X2ZyZWUoKVxcbjE0Njg6XFx0XFx0ICogd2hlbiB0aGUgZW50cnkgaXMgcmVtb3ZlZCBmcm9tIHRoZSB0cmVlLlxcbjE0Njk6XFx0XFx0ICovXFxuMTQ3MDpcXHRcXHR6c3dhcF9wb29sX2dldChwb29sKTtcXG4xNDcxOlxcdFxcdGlmIChvYmpjZykge1xcbjE0NzI6XFx0XFx0XFx0b2JqX2Nncm91cF9nZXQob2JqY2cpO1xcbjE0NzM6XFx0XFx0XFx0b2JqX2Nncm91cF9jaGFyZ2VfenN3YXAob2JqY2csIGVudHJ5LVxcdTAwM2VsZW5ndGgpO1xcbjE0NzQ6XFx0XFx0fVxcbjE0NzU6XFx0XFx0YXRvbWljX2xvbmdfaW5jKFxcdTAwMjZ6c3dhcF9zdG9yZWRfcGFnZXMpO1xcbjE0NzY6XFx0XFx0aWYgKGVudHJ5LVxcdTAwM2VsZW5ndGggPT0gUEFHRV9TSVpFKVxcbjE0Nzc6XFx0XFx0XFx0YXRvbWljX2xvbmdfaW5jKFxcdTAwMjZ6c3dhcF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXMpO1xcbjE0Nzg6XFx0XFxuMTQ3OTpcXHRcXHQvKlxcbjE0ODA6XFx0XFx0ICogV2UgZmluaXNoIGluaXRpYWxpemluZyB0aGUgZW50cnkgd2hpbGUgaXQncyBhbHJlYWR5IGluIHhhcnJheS5cXG4xNDgxOlxcdFxcdCAqIFRoaXMgaXMgc2FmZSBiZWNhdXNlOlxcbjE0ODI6XFx0XFx0ICpcXG4xNDgzOlxcdFxcdCAqIDEuIENvbmN1cnJlbnQgc3RvcmVzIGFuZCBpbnZhbGlkYXRpb25zIGFyZSBleGNsdWRlZCBieSBmb2xpbyBsb2NrLlxcbjE0ODQ6XFx0XFx0ICpcXG4xNDg1OlxcdFxcdCAqIDIuIFdyaXRlYmFjayBpcyBleGNsdWRlZCBieSB0aGUgZW50cnkgbm90IGJlaW5nIG9uIHRoZSBMUlUgeWV0LlxcbjE0ODY6XFx0XFx0ICogICAgVGhlIHB1Ymxpc2hpbmcgb3JkZXIgbWF0dGVycyB0byBwcmV2ZW50IHdyaXRlYmFjayBmcm9tIHNlZWluZ1xcbjE0ODc6XFx0XFx0ICogICAgYW4gaW5jb2hlcmVudCBlbnRyeS5cXG4xNDg4OlxcdFxcdCAqL1xcbjE0ODk6XFx0XFx0ZW50cnktXFx1MDAzZXN3cGVudHJ5ID0gcGFnZV9zd3BlbnRyeTtcXG4xNDkwOlxcdFxcdGVudHJ5LVxcdTAwM2VvYmpjZyA9IG9iamNnO1xcbjE0OTE6XFx0XFx0ZW50cnktXFx1MDAzZXJlZmVyZW5jZWQgPSB0cnVlO1xcbjE0OTI6XFx0XFx0aWYgKGVudHJ5LVxcdTAwM2VsZW5ndGgpIHtcXG4xNDkzOlxcdFxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZlbnRyeS1cXHUwMDNlbHJ1KTtcXG4xNDk0OlxcdFxcdFxcdHpzd2FwX2xydV9hZGQoZW50cnkpO1xcbjE0OTU6XFx0XFx0fVxcbjE0OTY6XFx0XFxuMTQ5NzpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4xNDk4OlxcdFxcbjE0OTk6XFx0c3RvcmVfZmFpbGVkOlxcbjE1MDA6XFx0XFx0enNfZnJlZShwb29sLVxcdTAwM2V6c19wb29sLCBlbnRyeS1cXHUwMDNlaGFuZGxlKTtcXG4xNTAxOlxcdGNvbXByZXNzX2ZhaWxlZDpcXG4xNTAyOlxcdFxcdHpzd2FwX2VudHJ5X2NhY2hlX2ZyZWUoZW50cnkpO1xcbjE1MDM6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjE1MDQ6XFx0fVxcbjE1MDU6XFx0XFxuMTUwNjpcXHRib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuMTUwNzpcXHR7XFxuMTUwODpcXHRcXHRsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbjE1MDk6XFx0XFx0c3dwX2VudHJ5X3Qgc3dwID0gZm9saW8tXFx1MDAzZXN3YXA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIwOjE5OjAwLjI1NDQ5ODQxNFoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTUyMTE3NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgWnN3YXAgUG9vbCBJbmRleCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSW4gdGhlIGB6c3dhcF9zdG9yZV9wYWdlYCBmdW5jdGlvbiwgYmVmb3JlIHRoaXMgcGF0Y2gsIHdlIHdlcmUgc2V0dGluZyB0aGUgYGVudHJ5LVx1MDAzZWhhbmRsZWAgYW5kIGBlbnRyeS1cdTAwM2VsZW5ndGhgIHdpdGhpbiBgenN3YXBfY29tcHJlc3NgLiBUaGVuLCB0aGUgYGVudHJ5LVx1MDAzZXBvb2xgIHBvaW50ZXIgd2FzIGFzc2lnbmVkICphZnRlciogdGhlIGB4YV9zdG9yZWAgY2FsbCwgc3BlY2lmaWNhbGx5IG9uIGxpbmUgMTQ1Ny4gVGhpcyBwYXRjaCBhbHRlcnMgdGhhdCBzZXF1ZW5jZS4gTm93LCB3ZSdyZSBzZXR0aW5nIGBlbnRyeS1cdTAwM2Vwb29sX2lkeGAgKHdoaWNoLCBpbXBvcnRhbnRseSwgaXMganVzdCBhIGB1OGAgbm93KSAqYmVmb3JlKiB0aGUgYHhhX3N0b3JlYC4gVGhlIG90aGVyIGZpZWxkcywgbGlrZSBgZW50cnktXHUwMDNlc3dwZW50cnlgLCBgZW50cnktXHUwMDNlb2JqY2dgLCBgZW50cnktXHUwMDNlcmVmZXJlbmNlZGAsIGFuZCBgZW50cnktXHUwMDNlbHJ1YCwgcmVtYWluIGluaXRpYWxpemVkIGFzIHRoZXkgd2VyZSBiZWZvcmUuIEFuZCBub3csIHRoZSBgenN3YXBfZW50cnlfcG9vbChlbnRyeSlgIGZ1bmN0aW9uIHVzZXMgYHhhX2xvYWQoXHUwMDI2enN3YXBfcG9vbHMsIGVudHJ5LVx1MDAzZXBvb2xfaWR4KWAgdG8gcmV0cmlldmUgdGhlIHBvb2wuXG5cblRoZSBwcmltYXJ5IGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgbWVtb3J5IHNhZmV0eS4gV2UgbmVlZCB0byBjb25maXJtIHRoYXQgbm8gdXNlci1zcGFjZSBkYXRhIGlzIGV4cG9zZWQgb3IgdGhhdCB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBpbmFkdmVydGVudGx5IHJlYWQuIERvZXMgenN3YXAgaXRzZWxmIGNvcHkgYW55dGhpbmcgdG8gdXNlciBzcGFjZT8gTm8sIGl0IGNvbXByZXNzZXMgYW5kIGRlY29tcHJlc3NlcyBzd2FwIHBhZ2VzICp3aXRoaW4qIGtlcm5lbCBtZW1vcnkuIER1cmluZyBzd2FwLWluLCBgenN3YXBfbG9hZGAgZGVjb21wcmVzc2VzIHRoZSBjb21wcmVzc2VkIGRhdGEgYmFjayBpbnRvIHRoZSBmb2xpby9wYWdlLiBUaGF0J3MgZ29vZC5cblxuVGhlIHN3aXRjaCBmcm9tIGEgZnVsbCBwb2ludGVyIHRvIGFuIGluZGV4IChgdTggcG9vbF9pZHhgKSBzaG91bGQgdHJhbnNsYXRlIHRvIGEgNy1ieXRlIHNhdmluZyBpbiB0aGUgYHN0cnVjdCB6c3dhcF9lbnRyeWAgc3RydWN0dXJlIChmcm9tIGVpdGhlciA0OCBvciA1NiBieXRlcywgZGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUpLiAgVGhhdCdzIGEgbmljZSBsaXR0bGUgb3B0aW1pemF0aW9uLiAgQ3J1Y2lhbGx5LCBgc3RydWN0IHpzd2FwX3Bvb2xgIGlzIGludGVybmFsIHRvIHRoZSBrZXJuZWwsIGFuZCBzbyBpcyBgc3RydWN0IHpzd2FwX2VudHJ5YC5cblxuTm93LCBsZXQncyBsb29rIGF0IGB6c3dhcF9wb29sX2NyZWF0ZWAuICBTcGVjaWZpY2FsbHkgYXQgdGhlIGFsbG9jYXRpb246XG5gYGBjXG5cdHJldCA9IHhhX2FsbG9jX2JoKFx1MDAyNnpzd2FwX3Bvb2xzLCBcdTAwMjZpZCwgcG9vbCxcblx0XHRcdCAgWEFfTElNSVQoWlNXQVBfRklSU1RfUE9PTF9JRCwgWlNXQVBfTUFYX1BPT0xfSUQpLFxuXHRcdFx0ICBHRlBfS0VSTkVMKTtcblx0aWYgKHJldCkge1xuLi4uXG5cdHBvb2wtXHUwMDNlaWR4ID0gaWQ7XG5gYGBcbkhlcmUsIGBwb29sYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Moc2l6ZW9mKCpwb29sKSwgR0ZQX0tFUk5FTCk7YC4gIFdlIGNhbiB2ZXJpZnkgdGhhdCBsaW5lIDMwNSBzcGVjaWZpY2FsbHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGluZGV4IGlzIGNvcnJlY3RseSBhc3NpZ25lZCBhdCBjcmVhdGlvbi4gVGhpcyBsb29rcyBzb2xpZCBpbiB0aGUgcHJvdmlkZWQgY29kZSBzbmlwcGV0LiBJJ2xsIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgY29kZSBhZ2FpbiBmb3IgYW55IGlzc3VlcyBhcm91bmQgaG93IHRoZSBwb29sIGluZGV4IGlzIGJlaW5nIHVzZWQsIGJ1dCBpdCBzZWVtcyBzb3VuZCBzbyBmYXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1NzgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMDoxOTowNC44MDY2MjAwODRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzNDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3pzd2FwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjk1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjk1OlxcdFxcdGludCByZXQsIGNwdTtcXG4gMjk2OlxcdFxcdHUzMiBpZDtcXG4gMjk3OlxcdFxcbiAyOTg6XFx0XFx0aWYgKCF6c3dhcF9oYXNfcG9vbCBcXHUwMDI2XFx1MDAyNiAhc3RyY21wKGNvbXByZXNzb3IsIFpTV0FQX1BBUkFNX1VOU0VUKSlcXG4gMjk5OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAzMDA6XFx0XFxuIDMwMTpcXHRcXHRwb29sID0ga3phbGxvY19vYmooKnBvb2wpO1xcbiAzMDI6XFx0XFx0aWYgKCFwb29sKVxcbiAzMDM6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDMwNDpcXHRcXG4gMzA1OlxcdFxcdC8qIHVuaXF1ZSBuYW1lIGZvciBlYWNoIHBvb2wgc3BlY2lmaWNhbGx5IHJlcXVpcmVkIGJ5IHpzbWFsbG9jICovXFxuIDMwNjpcXHRcXHRzbnByaW50ZihuYW1lLCAzOCwgXFxcInpzd2FwJXhcXFwiLCBhdG9taWNfaW5jX3JldHVybihcXHUwMDI2enN3YXBfcG9vbHNfY291bnQpKTtcXG4gMzA3OlxcdFxcdHBvb2wtXFx1MDAzZXpzX3Bvb2wgPSB6c19jcmVhdGVfcG9vbChuYW1lKTtcXG4gMzA4OlxcdFxcdGlmICghcG9vbC1cXHUwMDNlenNfcG9vbClcXG4gMzA5OlxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuIDMxMDpcXHRcXG4gMzExOlxcdFxcdHN0cnNjcHkocG9vbC1cXHUwMDNldGZtX25hbWUsIGNvbXByZXNzb3IsIHNpemVvZihwb29sLVxcdTAwM2V0Zm1fbmFtZSkpO1xcbiAzMTI6XFx0XFxuIDMxMzpcXHRcXHQvKiBNYW55IHRoaW5ncyByZWx5IG9uIHRoZSB6ZXJvLWluaXRpYWxpemF0aW9uLiAqL1xcbiAzMTQ6XFx0XFx0cG9vbC1cXHUwMDNlYWNvbXBfY3R4ID0gYWxsb2NfcGVyY3B1X2dmcCgqcG9vbC1cXHUwMDNlYWNvbXBfY3R4LFxcbiAzMTU6XFx0XFx0XFx0XFx0XFx0XFx0ICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xcbiAzMTY6XFx0XFx0aWYgKCFwb29sLVxcdTAwM2VhY29tcF9jdHgpIHtcXG4gMzE3OlxcdFxcdFxcdHByX2VycihcXFwicGVyY3B1IGFsbG9jIGZhaWxlZFxcXFxuXFxcIik7XFxuIDMxODpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbiAzMTk6XFx0XFx0fVxcbiAzMjA6XFx0XFxuIDMyMTpcXHRcXHQvKlxcbiAzMjI6XFx0XFx0ICogVGhpcyBpcyBzZXJpYWxpemVkIGFnYWluc3QgQ1BVIGhvdHBsdWcgb3BlcmF0aW9ucy4gSGVuY2UsIGNvcmVzXFxuIDMyMzpcXHRcXHQgKiBjYW5ub3QgYmUgb2ZmbGluZWQgdW50aWwgdGhpcyBmaW5pc2hlcy5cXG4gMzI0OlxcdFxcdCAqL1xcbiAzMjU6XFx0XFx0cmV0ID0gY3B1aHBfc3RhdGVfYWRkX2luc3RhbmNlKENQVUhQX01NX1pTV1BfUE9PTF9QUkVQQVJFLFxcbiAzMjY6XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZwb29sLVxcdTAwM2Vub2RlKTtcXG4gMzI3OlxcdFxcbiAzMjg6XFx0XFx0LypcXG4gMzI5OlxcdFxcdCAqIGNwdWhwX3N0YXRlX2FkZF9pbnN0YW5jZSgpIHdpbGwgbm90IGNsZWFudXAgb24gZmFpbHVyZSBzaW5jZVxcbiAzMzA6XFx0XFx0ICogd2UgZG9uJ3QgcmVnaXN0ZXIgYSBob3R1bnBsdWcgY2FsbGJhY2suXFxuIDMzMTpcXHRcXHQgKi9cXG4gMzMyOlxcdFxcdGlmIChyZXQpXFxuIDMzMzpcXHRcXHRcXHRnb3RvIGNwdWhwX2FkZF9mYWlsO1xcbiAzMzQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIwOjE5OjA0LjgwNjc2NTMxNFoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDcyNDc0NDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHpzd2FwX2VudHJ5IGFuZCB6c3dhcF9wb29sIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBvZiB6c3dhcCwgc3BlY2lmaWNhbGx5IGhvdyBgenN3YXBfZW50cnlgIGFuZCBgenN3YXBfcG9vbGAgYXJlIGhhbmRsZWQuIEkgc2VlIHRoYXQgdGhlIGBwb29sYCB2YXJpYWJsZSBpcyBpbml0aWFsaXplZCB1c2luZyBga3phbGxvY19vYmooKnBvb2wpYCwgd2hpY2gsIGFzIEkgZXhwZWN0LCBhbGxvY2F0ZXMgdGhlIG1lbW9yeSBhbmQgaW1wb3J0YW50bHksIHplcm9lcyBhbGwgdGhlIGZpZWxkcy4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgZW5zdXJpbmcgYSBjbGVhbiBzbGF0ZS4gVGhlbiwgSSBub3RpY2VkIHRoYXQgYGVudHJ5LVx1MDAzZXBvb2xfaWR4YCBpcyBleHBsaWNpdGx5IGFzc2lnbmVkIGEgdmFsdWUgd2l0aGluIGB6c3dhcF9zdG9yZV9wYWdlYC4gVGhpcyBpcyBrZXk7IEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgaXMgdGhlICpvbmx5KiBwbGFjZSBpdCdzIHNldCBvciBpZiB0aGVyZSBhcmUgb3RoZXIgYXNzaWdubWVudHMgdG8gdGhpcyBjcnVjaWFsIGluZGV4LiBUaGlzIGlzIHdoZXJlIHRoaW5ncyBjb3VsZCBnbyB3cm9uZywgc28gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIG90aGVyIHBvaW50cyB3aGVyZSB0aGVzZSBjcnVjaWFsIHN0cnVjdHVyZXMgYXJlIGNyZWF0ZWQgb3IgbW9kaWZpZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGNvZGUgZmxvdyBhbmQgbWVtb3J5IGlzIG1hbmFnZWQgY29uc2lzdGVudGx5IGFuZCBhcHByb3ByaWF0ZWx5LiBUaW1lIHRvIHVzZSBteSBmYXZvcml0ZSB0b29sLiBJJ2xsIG5lZWQgdG8gZG8gYSB0aG9yb3VnaCBncmVwIGZvciBgenN3YXBfZW50cnlgIGFjcm9zcyBgbW0venN3YXAuY2AgdG8gbG9vayBmb3IgYW55IG90aGVyIGluc3RhbmNlcy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgY29tcGxldGUgcGljdHVyZSwgZW5zdXJpbmcgSSBjYW4gY2F0Y2ggYW55IHBvdGVudGlhbCBpc3N1ZXMgb3IgaW5jb25zaXN0ZW5jaWVzIGluIGluaXRpYWxpemF0aW9uIG9yIG1vZGlmaWNhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyMDcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIwOjE5OjA3LjI3OTI0MzM3NloiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwMDQ4OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwienN3YXBfZW50cnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0venN3YXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS96c3dhcC5jPTE0MD1zdHJ1Y3QgY3J5cHRvX2Fjb21wX2N0eCB7XFxuLS1cXG5tbS96c3dhcC5jLTE1MC0gKiBUaGUgb25seSBjYXNlIHdoZXJlIGxydV9sb2NrIGlzIG5vdCBhY3F1aXJlZCB3aGlsZSBob2xkaW5nIHRyZWUubG9jayBpc1xcbm1tL3pzd2FwLmM6MTUxOiAqIHdoZW4gYSB6c3dhcF9lbnRyeSBpcyB0YWtlbiBvZmYgdGhlIGxydSBmb3Igd3JpdGViYWNrLCBpbiB0aGF0IGNhc2UgaXRcXG5tbS96c3dhcC5jLTE1Mi0gKiBuZWVkcyB0byBiZSB2ZXJpZmllZCB0aGF0IGl0J3Mgc3RpbGwgdmFsaWQgaW4gdGhlIHRyZWUuXFxuLS1cXG5tbS96c3dhcC5jPTE4Mj1zdGF0aWMgc3RydWN0IHNocmlua2VyICp6c3dhcF9zaHJpbmtlcjtcXG4tLVxcbm1tL3pzd2FwLmMtMTg0LS8qXFxubW0venN3YXAuYzoxODU6ICogc3RydWN0IHpzd2FwX2VudHJ5XFxubW0venN3YXAuYy0xODYtICpcXG4tLVxcbm1tL3pzd2FwLmMtMjAxLSAqL1xcbm1tL3pzd2FwLmM6MjAyOnN0cnVjdCB6c3dhcF9lbnRyeSB7XFxubW0venN3YXAuYy0yMDMtXFx0c3dwX2VudHJ5X3Qgc3dwZW50cnk7XFxuLS1cXG5tbS96c3dhcC5jLTIxNi0gKi9cXG5tbS96c3dhcC5jOjIxNzpzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX2VudHJ5X3Bvb2woc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcXG5tbS96c3dhcC5jLTIxOC17XFxuLS1cXG5tbS96c3dhcC5jPTYzNT1zdGF0aWMgaW50IHpzd2FwX2VuYWJsZWRfcGFyYW1fc2V0KGNvbnN0IGNoYXIgKnZhbCxcXG4tLVxcbm1tL3pzd2FwLmMtNjY3LVxcbm1tL3pzd2FwLmM6NjY4OnN0YXRpYyBpbmxpbmUgaW50IGVudHJ5X3RvX25pZChzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxcbm1tL3pzd2FwLmMtNjY5LXtcXG4tLVxcbm1tL3pzd2FwLmMtNjcyLVxcbm1tL3pzd2FwLmM6NjczOnN0YXRpYyB2b2lkIHpzd2FwX2xydV9hZGQoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcXG5tbS96c3dhcC5jLTY3NC17XFxuLS1cXG5tbS96c3dhcC5jLTY5NS1cXG5tbS96c3dhcC5jOjY5NjpzdGF0aWMgdm9pZCB6c3dhcF9scnVfZGVsKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXFxubW0venN3YXAuYy02OTcte1xcbi0tXFxubW0venN3YXAuYz03MzU9dm9pZCB6c3dhcF9tZW1jZ19vZmZsaW5lX2NsZWFudXAoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0venN3YXAuYy03NDktKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5tbS96c3dhcC5jOjc1MDpzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnpzd2FwX2VudHJ5X2NhY2hlO1xcbm1tL3pzd2FwLmMtNzUxLVxcbm1tL3pzd2FwLmM6NzUyOnN0YXRpYyBzdHJ1Y3QgenN3YXBfZW50cnkgKnpzd2FwX2VudHJ5X2NhY2hlX2FsbG9jKGdmcF90IGdmcCwgaW50IG5pZClcXG5tbS96c3dhcC5jLTc1My17XFxubW0venN3YXAuYzo3NTQ6XFx0c3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeTtcXG5tbS96c3dhcC5jOjc1NTpcXHRlbnRyeSA9IGttZW1fY2FjaGVfYWxsb2Nfbm9kZSh6c3dhcF9lbnRyeV9jYWNoZSwgZ2ZwLCBuaWQpO1xcbm1tL3pzd2FwLmMtNzU2LVxcdGlmICghZW50cnkpXFxuLS1cXG5tbS96c3dhcC5jLTc2MC1cXG5tbS96c3dhcC5jOjc2MTpzdGF0aWMgdm9pZCB6c3dhcF9lbnRyeV9jYWNoZV9mcmVlKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXFxubW0venN3YXAuYy03NjIte1xcbm1tL3pzd2FwLmM6NzYzOlxcdGttZW1fY2FjaGVfZnJlZSh6c3dhcF9lbnRyeV9jYWNoZSwgZW50cnkpO1xcbm1tL3pzd2FwLmMtNzY0LX1cXG4tLVxcbm1tL3pzd2FwLmMtNzY5LSAqL1xcbm1tL3pzd2FwLmM6NzcwOnN0YXRpYyB2b2lkIHpzd2FwX2VudHJ5X2ZyZWUoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcXG5tbS96c3dhcC5jLTc3MS17XFxubW0venN3YXAuYzo3NzI6XFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSB6c3dhcF9lbnRyeV9wb29sKGVudHJ5KTtcXG5tbS96c3dhcC5jLTc3My1cXG4tLVxcbm1tL3pzd2FwLmMtNzg0LVxcdFxcdGF0b21pY19sb25nX2RlYyhcXHUwMDI2enN3YXBfc3RvcmVkX2luY29tcHJlc3NpYmxlX3BhZ2VzKTtcXG5tbS96c3dhcC5jOjc4NTpcXHR6c3dhcF9lbnRyeV9jYWNoZV9mcmVlKGVudHJ5KTtcXG5tbS96c3dhcC5jLTc4Ni1cXHRhdG9taWNfbG9uZ19kZWMoXFx1MDAyNnpzd2FwX3N0b3JlZF9wYWdlcyk7XFxuLS1cXG5tbS96c3dhcC5jPTc5Mj1zdGF0aWMgaW50IHpzd2FwX2NwdV9jb21wX3ByZXBhcmUodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUpXFxuLS1cXG5tbS96c3dhcC5jLTg0OC1cXG5tbS96c3dhcC5jOjg0OTpzdGF0aWMgYm9vbCB6c3dhcF9jb21wcmVzcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG5tbS96c3dhcC5jLTg1MC1cXHRcXHRcXHQgICBzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbClcXG4tLVxcbm1tL3pzd2FwLmMtOTMyLVxcbm1tL3pzd2FwLmM6OTMzOnN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS96c3dhcC5jLTkzNC17XFxubW0venN3YXAuYzo5MzU6XFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSB6c3dhcF9lbnRyeV9wb29sKGVudHJ5KTtcXG5tbS96c3dhcC5jLTkzNi1cXHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgaW5wdXRbMl07IC8qIHpzbWFsbG9jIHJldHVybnMgYW4gU0cgbGlzdCAxLTIgZW50cmllcyAqL1xcbi0tXFxubW0venN3YXAuYy05OTgtICovXFxubW0venN3YXAuYzo5OTk6c3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG5tbS96c3dhcC5jLTEwMDAtXFx0XFx0XFx0XFx0IHN3cF9lbnRyeV90IHN3cGVudHJ5KVxcbi0tXFxubW0venN3YXAuYy0xMDU1LVxcbm1tL3pzd2FwLmM6MTA1NjpcXHR6c3dhcF9lbnRyeV9mcmVlKGVudHJ5KTtcXG5tbS96c3dhcC5jLTEwNTctXFxuLS1cXG5tbS96c3dhcC5jPTExMDI9c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X29uZSAqbCxcXG4tLVxcbm1tL3pzd2FwLmMtMTEwNC17XFxubW0venN3YXAuYzoxMTA1OlxcdHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkgPSBjb250YWluZXJfb2YoaXRlbSwgc3RydWN0IHpzd2FwX2VudHJ5LCBscnUpO1xcbm1tL3pzd2FwLmMtMTEwNi1cXHRib29sICplbmNvdW50ZXJlZF9wYWdlX2luX3N3YXBjYWNoZSA9IChib29sICopYXJnO1xcbi0tXFxubW0venN3YXAuYz0xNDIwPXN0YXRpYyBib29sIHpzd2FwX3N0b3JlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5tbS96c3dhcC5jLTE0MjQtXFx0c3dwX2VudHJ5X3QgcGFnZV9zd3BlbnRyeSA9IHBhZ2Vfc3dhcF9lbnRyeShwYWdlKTtcXG5tbS96c3dhcC5jOjE0MjU6XFx0c3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgKm9sZDtcXG5tbS96c3dhcC5jLTE0MjYtXFxubW0venN3YXAuYy0xNDI3LVxcdC8qIGFsbG9jYXRlIGVudHJ5ICovXFxubW0venN3YXAuYzoxNDI4OlxcdGVudHJ5ID0genN3YXBfZW50cnlfY2FjaGVfYWxsb2MoR0ZQX0tFUk5FTCwgcGFnZV90b19uaWQocGFnZSkpO1xcbm1tL3pzd2FwLmMtMTQyOS1cXHRpZiAoIWVudHJ5KSB7XFxuLS1cXG5tbS96c3dhcC5jLTE0NjAtXFx0aWYgKG9sZClcXG5tbS96c3dhcC5jOjE0NjE6XFx0XFx0enN3YXBfZW50cnlfZnJlZShvbGQpO1xcbm1tL3pzd2FwLmMtMTQ2Mi1cXG4tLVxcbm1tL3pzd2FwLmMtMTQ2Ni1cXHQgKiBjaGFyZ2UgenN3YXAgbWVtb3J5LCBhbmQgaW5jcmVtZW50IHpzd2FwX3N0b3JlZF9wYWdlcy5cXG5tbS96c3dhcC5jOjE0Njc6XFx0ICogVGhlIG9wcG9zaXRlIGFjdGlvbnMgd2lsbCBiZSBwZXJmb3JtZWQgYnkgenN3YXBfZW50cnlfZnJlZSgpXFxubW0venN3YXAuYy0xNDY4LVxcdCAqIHdoZW4gdGhlIGVudHJ5IGlzIHJlbW92ZWQgZnJvbSB0aGUgdHJlZS5cXG4tLVxcbm1tL3pzd2FwLmMtMTUwMS1jb21wcmVzc19mYWlsZWQ6XFxubW0venN3YXAuYzoxNTAyOlxcdHpzd2FwX2VudHJ5X2NhY2hlX2ZyZWUoZW50cnkpO1xcbm1tL3pzd2FwLmMtMTUwMy1cXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5tbS96c3dhcC5jPTE1MDY9Ym9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0venN3YXAuYy0xNTc3LVxcdFxcdHBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3ApO1xcbm1tL3pzd2FwLmM6MTU3ODpcXHRcXHRzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5O1xcbm1tL3pzd2FwLmMtMTU3OS1cXHRcXHRzdHJ1Y3QgeGFycmF5ICp0cmVlO1xcbi0tXFxubW0venN3YXAuYy0xNTg0LVxcdFxcdFxcdGlmIChlbnRyeSlcXG5tbS96c3dhcC5jOjE1ODU6XFx0XFx0XFx0XFx0enN3YXBfZW50cnlfZnJlZShlbnRyeSk7XFxubW0venN3YXAuYy0xNTg2LVxcdFxcdH1cXG4tLVxcbm1tL3pzd2FwLmM9MTYxMj1pbnQgenN3YXBfbG9hZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0venN3YXAuYy0xNjE2LVxcdHN0cnVjdCB4YXJyYXkgKnRyZWUgPSBzd2FwX3pzd2FwX3RyZWUoc3dwKTtcXG5tbS96c3dhcC5jOjE2MTc6XFx0c3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeTtcXG5tbS96c3dhcC5jLTE2MTgtXFxuLS1cXG5tbS96c3dhcC5jLTE2NTgtXFx0eGFfZXJhc2UodHJlZSwgb2Zmc2V0KTtcXG5tbS96c3dhcC5jOjE2NTk6XFx0enN3YXBfZW50cnlfZnJlZShlbnRyeSk7XFxubW0venN3YXAuYy0xNjYwLVxcbi0tXFxubW0venN3YXAuYz0xNjY1PXZvaWQgenN3YXBfaW52YWxpZGF0ZShzd3BfZW50cnlfdCBzd3ApXFxuLS1cXG5tbS96c3dhcC5jLTE2NjgtXFx0c3RydWN0IHhhcnJheSAqdHJlZSA9IHN3YXBfenN3YXBfdHJlZShzd3ApO1xcbm1tL3pzd2FwLmM6MTY2OTpcXHRzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5O1xcbm1tL3pzd2FwLmMtMTY3MC1cXG4tLVxcbm1tL3pzd2FwLmMtMTY3NS1cXHRpZiAoZW50cnkpXFxubW0venN3YXAuYzoxNjc2OlxcdFxcdHpzd2FwX2VudHJ5X2ZyZWUoZW50cnkpO1xcbm1tL3pzd2FwLmMtMTY3Ny19XFxuLS1cXG5tbS96c3dhcC5jPTE3ODk9c3RhdGljIGludCB6c3dhcF9zZXR1cCh2b2lkKVxcbi0tXFxubW0venN3YXAuYy0xNzkzLVxcbm1tL3pzd2FwLmM6MTc5NDpcXHR6c3dhcF9lbnRyeV9jYWNoZSA9IEtNRU1fQ0FDSEUoenN3YXBfZW50cnksIDApO1xcbm1tL3pzd2FwLmM6MTc5NTpcXHRpZiAoIXpzd2FwX2VudHJ5X2NhY2hlKSB7XFxubW0venN3YXAuYy0xNzk2LVxcdFxcdHByX2VycihcXFwiZW50cnkgY2FjaGUgY3JlYXRpb24gZmFpbGVkXFxcXG5cXFwiKTtcXG4tLVxcbm1tL3pzd2FwLmMtMTg0My1ocF9mYWlsOlxcbm1tL3pzd2FwLmM6MTg0NDpcXHRrbWVtX2NhY2hlX2Rlc3Ryb3koenN3YXBfZW50cnlfY2FjaGUpO1xcbm1tL3pzd2FwLmMtMTg0NS1jYWNoZV9mYWlsOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMDoxOTowNy4zMjcyNTQzODZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg5OTU4NzkxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQ2hlY2tpbmcgTXkgQXNzdW1wdGlvbnMqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhpcyBvcHRpbWl6YXRpb24sIEkgbmVlZCB0byBtYWtlIHN1cmUgYSBmdW5kYW1lbnRhbCBjb25maWd1cmF0aW9uIGlzIHNldCBjb3JyZWN0bHkuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgdmVyaWZ5IHRoZSBjdXJyZW50IHNldHRpbmcgZm9yIGB6c3dhcF9jb21wcmVzc2AuIFRoaXMgaXMgYSBwcmV0dHkgYmFzaWMgYnV0IGNydWNpYWwgcGFyYW1ldGVyLCBhbmQgaXQgY2FuIHNhdmUgbWUgYSBsb3Qgb2YgaGVhZGFjaGUgZG93biB0aGUgbGluZSBpZiBpdCdzIHNldCBwcm9wZXJseSBmcm9tIHRoZSBnZXQtZ28uIE5vIHBvaW50IGluIHRyb3VibGVzaG9vdGluZyBjb21wbGV4IGludGVyYWN0aW9ucyBpZiB0aGUgYmFzaWNzIGFyZW4ndCBpcm9uZWQgb3V0LiBKdXN0IGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIGVuc3VyZSB0aGUgZm91bmRhdGlvbnMgYXJlIHNvbGlkIGJlZm9yZSBwcm9jZWVkaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDA4NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIwOjE5OjA5LjIyNjg0NTEzN1oiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTA2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0venN3YXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NDgsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NDg6XFx0XFxuIDg0OTpcXHRzdGF0aWMgYm9vbCB6c3dhcF9jb21wcmVzcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG4gODUwOlxcdFxcdFxcdFxcdCAgIHN0cnVjdCB6c3dhcF9wb29sICpwb29sKVxcbiA4NTE6XFx0e1xcbiA4NTI6XFx0XFx0c3RydWN0IGNyeXB0b19hY29tcF9jdHggKmFjb21wX2N0eDtcXG4gODUzOlxcdFxcdHN0cnVjdCBzY2F0dGVybGlzdCBpbnB1dCwgb3V0cHV0O1xcbiA4NTQ6XFx0XFx0aW50IGNvbXBfcmV0ID0gMCwgYWxsb2NfcmV0ID0gMDtcXG4gODU1OlxcdFxcdHVuc2lnbmVkIGludCBkbGVuID0gUEFHRV9TSVpFO1xcbiA4NTY6XFx0XFx0dW5zaWduZWQgbG9uZyBoYW5kbGU7XFxuIDg1NzpcXHRcXHRnZnBfdCBnZnA7XFxuIDg1ODpcXHRcXHR1OCAqZHN0O1xcbiA4NTk6XFx0XFx0Ym9vbCBtYXBwZWQgPSBmYWxzZTtcXG4gODYwOlxcdFxcbiA4NjE6XFx0XFx0YWNvbXBfY3R4ID0gcmF3X2NwdV9wdHIocG9vbC1cXHUwMDNlYWNvbXBfY3R4KTtcXG4gODYyOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmFjb21wX2N0eC1cXHUwMDNlbXV0ZXgpO1xcbiA4NjM6XFx0XFxuIDg2NDpcXHRcXHRkc3QgPSBhY29tcF9jdHgtXFx1MDAzZWJ1ZmZlcjtcXG4gODY1OlxcdFxcdHNnX2luaXRfdGFibGUoXFx1MDAyNmlucHV0LCAxKTtcXG4gODY2OlxcdFxcdHNnX3NldF9wYWdlKFxcdTAwMjZpbnB1dCwgcGFnZSwgUEFHRV9TSVpFLCAwKTtcXG4gODY3OlxcdFxcbiA4Njg6XFx0XFx0c2dfaW5pdF9vbmUoXFx1MDAyNm91dHB1dCwgZHN0LCBQQUdFX1NJWkUpO1xcbiA4Njk6XFx0XFx0YWNvbXBfcmVxdWVzdF9zZXRfcGFyYW1zKGFjb21wX2N0eC1cXHUwMDNlcmVxLCBcXHUwMDI2aW5wdXQsIFxcdTAwMjZvdXRwdXQsIFBBR0VfU0laRSwgZGxlbik7XFxuIDg3MDpcXHRcXG4gODcxOlxcdFxcdC8qXFxuIDg3MjpcXHRcXHQgKiBpdCBtYXliZSBsb29rcyBhIGxpdHRsZSBiaXQgc2lsbHkgdGhhdCB3ZSBzZW5kIGFuIGFzeW5jaHJvbm91cyByZXF1ZXN0LFxcbiA4NzM6XFx0XFx0ICogdGhlbiB3YWl0IGZvciBpdHMgY29tcGxldGlvbiBzeW5jaHJvbm91c2x5LiBUaGlzIG1ha2VzIHRoZSBwcm9jZXNzIGxvb2tcXG4gODc0OlxcdFxcdCAqIHN5bmNocm9ub3VzIGluIGZhY3QuXFxuIDg3NTpcXHRcXHQgKiBUaGVvcmV0aWNhbGx5LCBhY29tcCBzdXBwb3J0cyB1c2VycyBzZW5kIG11bHRpcGxlIGFjb21wIHJlcXVlc3RzIGluIG9uZVxcbiA4NzY6XFx0XFx0ICogYWNvbXAgaW5zdGFuY2UsIHRoZW4gZ2V0IHRob3NlIHJlcXVlc3RzIGRvbmUgc2ltdWx0YW5lb3VzbHkuIGJ1dCBpbiB0aGlzXFxuIDg3NzpcXHRcXHQgKiBjYXNlLCB6c3dhcCBhY3R1YWxseSBkb2VzIHN0b3JlIGFuZCBsb2FkIHBhZ2UgYnkgcGFnZSwgdGhlcmUgaXMgbm9cXG4gODc4OlxcdFxcdCAqIGV4aXN0aW5nIG1ldGhvZCB0byBzZW5kIHRoZSBzZWNvbmQgcGFnZSBiZWZvcmUgdGhlIGZpcnN0IHBhZ2UgaXMgZG9uZVxcbiA4Nzk6XFx0XFx0ICogaW4gb25lIHRocmVhZCBkb2luZyB6c3dhcC5cXG4gODgwOlxcdFxcdCAqIGJ1dCBpbiBkaWZmZXJlbnQgdGhyZWFkcyBydW5uaW5nIG9uIGRpZmZlcmVudCBjcHUsIHdlIGhhdmUgZGlmZmVyZW50XFxuIDg4MTpcXHRcXHQgKiBhY29tcCBpbnN0YW5jZSwgc28gbXVsdGlwbGUgdGhyZWFkcyBjYW4gZG8gKGRlKWNvbXByZXNzaW9uIGluIHBhcmFsbGVsLlxcbiA4ODI6XFx0XFx0ICovXFxuIDg4MzpcXHRcXHRjb21wX3JldCA9IGNyeXB0b193YWl0X3JlcShjcnlwdG9fYWNvbXBfY29tcHJlc3MoYWNvbXBfY3R4LVxcdTAwM2VyZXEpLCBcXHUwMDI2YWNvbXBfY3R4LVxcdTAwM2V3YWl0KTtcXG4gODg0OlxcdFxcdGRsZW4gPSBhY29tcF9jdHgtXFx1MDAzZXJlcS1cXHUwMDNlZGxlbjtcXG4gODg1OlxcdFxcbiA4ODY6XFx0XFx0LypcXG4gODg3OlxcdFxcdCAqIElmIGEgcGFnZSBjYW5ub3QgYmUgY29tcHJlc3NlZCBpbnRvIGEgc2l6ZSBzbWFsbGVyIHRoYW4gUEFHRV9TSVpFLFxcbiA4ODg6XFx0XFx0ICogc2F2ZSB0aGUgY29udGVudCBhcyBpcyB3aXRob3V0IGEgY29tcHJlc3Npb24sIHRvIGtlZXAgdGhlIExSVSBvcmRlclxcbiA4ODk6XFx0XFx0ICogb2Ygd3JpdGViYWNrcy4gIElmIHdyaXRlYmFjayBpcyBkaXNhYmxlZCwgcmVqZWN0IHRoZSBwYWdlIHNpbmNlIGl0XFxuIDg5MDpcXHRcXHQgKiBvbmx5IGFkZHMgbWV0YWRhdGEgb3ZlcmhlYWQuICBzd2FwX3dyaXRlb3V0KCkgd2lsbCBwdXQgdGhlIHBhZ2UgYmFja1xcbiA4OTE6XFx0XFx0ICogdG8gdGhlIGFjdGl2ZSBMUlUgbGlzdCBpbiB0aGUgY2FzZS5cXG4gODkyOlxcdFxcdCAqL1xcbiA4OTM6XFx0XFx0aWYgKGNvbXBfcmV0IHx8ICFkbGVuIHx8IGRsZW4gXFx1MDAzZT0gUEFHRV9TSVpFKSB7XFxuIDg5NDpcXHRcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIDg5NTpcXHRcXHRcXHRpZiAoIW1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoXFxuIDg5NjpcXHRcXHRcXHRcXHRcXHRcXHRmb2xpb19tZW1jZyhwYWdlX2ZvbGlvKHBhZ2UpKSkpIHtcXG4gODk3OlxcdFxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMDoxOTowOS4yMjcxOTg5MTdaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTAyMjI3NzQ1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50OiBOZWVkc0tNU0FOID0gZmFsc2UqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJ20gc2VlaW5nLCBgenN3YXBfY29tcHJlc3NgIHNldHMgdGhlIGBoYW5kbGVgIGFuZCBgbGVuZ3RoYCBvZiB0aGUgYGVudHJ5YC4gVGhlbiwgYHpzd2FwX3N0b3JlX3BhZ2VgIHBvcHVsYXRlcyB0aGUgcmVzdCBvZiB0aGUgYHpzd2FwX2VudHJ5YCBmaWVsZHM6IGBwb29sX2lkeGAsIGBzd3BlbnRyeWAsIGBvYmpjZ2AsIGByZWZlcmVuY2VkYCwgYW5kIGluaXRpYWxpemVzIHRoZSBgbHJ1YCBsaXN0IGhlYWQgYmVmb3JlIGFkZGluZyBpdCB0byB0aGUgTFJVLiBUaGlzIGlzIGFsbCBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4genN3YXAuIENydWNpYWxseSwgYWxsIHRoZSBmaWVsZHMgd2l0aGluIGBzdHJ1Y3QgenN3YXBfZW50cnlgIGFyZSAqZXhwbGljaXRseSogaW5pdGlhbGl6ZWQgYmVmb3JlIGFueSByZWFkIG9wZXJhdGlvbnMuIE5vdGhpbmcgaXMgYmVpbmcgbGVha2VkIHRvIHVzZXJzcGFjZS5cblxuVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBpbnZvbHZlIGludGVybmFsIGNoYW5nZXM6IHJlcGxhY2luZyBhIGxpbmtlZCBsaXN0IG9mIHBvb2xzIHdpdGggYW4gWEFycmF5IGFuZCBhIHBvb2wgaW5kZXgsIGFuZCB0d2Vha2luZyB0aGUgUkNVIGFuZCBsb2NraW5nIG1lY2hhbmlzbXMgYXJvdW5kIGB6c3dhcF9wb29sYC5cblxuTm93LCBjb25zaWRlcmluZyBwb3RlbnRpYWwgYnVncywgdGhlIHByaW1hcnkgcmlza3MgYXBwZWFyIHRvIGJlIGNvbmN1cnJlbmN5IGlzc3VlcyAoUkNVLCBsb2NraW5nLCByZWZjb3VudGluZyksIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIHNjZW5hcmlvcyBpbiB0aGUgcG9vbCBvciBlbnRyeSBsaWZlY3ljbGUsIGFuZCBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciB1bmV4cGVjdGVkIHJldHVybnMgZnJvbSBgeGFfbG9hZGAuIFRoZXNlIGFyZSBwcmVjaXNlbHkgdGhlIHR5cGVzIG9mIGlzc3VlcyB0aGF0IEtBU0FOLCBMT0NLREVQLCBhbmQgZ2VuZXJhbCBrZXJuZWwgYnVnIGRldGVjdG9ycyBhcmUgZGVzaWduZWQgdG8gY2F0Y2guXG5cblRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgbm8gc3RydWN0dXJlIGxlYWtzIHRvIHVzZXJzcGFjZSwgYW5kIG5vIGNvbmNlcm5zIGFyb3VuZCB1bmluaXRpYWxpemVkIHBhZGRpbmcuXG5cbkknbSBkb3VibGUtY2hlY2tpbmcgYWdhaW5zdCB0aGUgS01TQU4gY3JpdGVyaWEsIGFuZCBpdCBhbGwgY2hlY2tzIG91dDpcblxuMS4gIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2Ugd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcHJvYmxlbWF0aWMuXG4yLiAgVGhlcmUncyBubyBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcy5cbjMuICBUaGUgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gb2YgZGF0YSBzdHJ1Y3R1cmVzIGFyZSB0aG9yb3VnaCwgcHJldmVudGluZyB1bmluaXRpYWxpemVkIGZpZWxkcyBmcm9tIGJlaW5nIHJlYWQgbGF0ZXIuXG40LiAgTm8gYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW50cm9kdWNlcyBhbnkgcmlzayBvZiBhY2Nlc3NpbmcgdW5pbml0aWFsaXplZCBieXRlcyBpbiBleGlzdGluZyBidWZmZXJzLlxuXG5UaGlzIGlzIGFsbCBjb25zaXN0ZW50IHdpdGggYE5lZWRzS01TQU49ZmFsc2VgLiBMZXQncyBmb3JtdWxhdGUgdGhlIHJlc3BvbnNlIGFuZCBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTM5LCJPdXRwdXRUb2tlbnMiOjE4MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIwOjE5OjE0LjI0OTQ3OTM2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBpbnRlcm5hbCB6c3dhcCBwb29sIGFuZCBlbnRyeSBtYW5hZ2VtZW50IGluIG1tL3pzd2FwLmMgYnkgcmVwbGFjaW5nIGEgbGlua2VkIGxpc3Qgb2YgcG9vbHMgd2l0aCBhbiBYQXJyYXkgKGluZGV4ZWQgYnkgYSB1OCBwb29sX2lkeCkgYW5kIHN3aXRjaGluZyBwb29sIGxvb2t1cHMgdG8gdXNlIHhhX2xvYWQoKS4gQWxsIGFsbG9jYXRlZCBzdHJ1Y3R1cmVzICh6c3dhcF9wb29sIGFsbG9jYXRlZCB3aXRoIGt6YWxsb2Nfb2JqLCBhbmQgenN3YXBfZW50cnkgd2hvc2UgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluIHpzd2FwX3N0b3JlX3BhZ2UpIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBOb25lIG9mIHRoZSBtb2RpZmllZCBkYXRhIHN0cnVjdHVyZXMgb3IgZmllbGRzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3Mgd291bGQgaW52b2x2ZSBjb25jdXJyZW5jeSwgbGlmZXRpbWUvcmVmY291bnRpbmcsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzIHJhdGhlciB0aGFuIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGludGVybmFsIHpzd2FwIHBvb2wgYW5kIGVudHJ5IG1hbmFnZW1lbnQgaW4gbW0venN3YXAuYyBieSByZXBsYWNpbmcgYSBsaW5rZWQgbGlzdCBvZiBwb29scyB3aXRoIGFuIFhBcnJheSAoaW5kZXhlZCBieSBhIHU4IHBvb2xfaWR4KSBhbmQgc3dpdGNoaW5nIHBvb2wgbG9va3VwcyB0byB1c2UgeGFfbG9hZCgpLiBBbGwgYWxsb2NhdGVkIHN0cnVjdHVyZXMgKHpzd2FwX3Bvb2wgYWxsb2NhdGVkIHdpdGgga3phbGxvY19vYmosIGFuZCB6c3dhcF9lbnRyeSB3aG9zZSBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgaW4genN3YXBfc3RvcmVfcGFnZSkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIE5vbmUgb2YgdGhlIG1vZGlmaWVkIGRhdGEgc3RydWN0dXJlcyBvciBmaWVsZHMgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3MgYXJlIGludHJvZHVjZWQuIEFueSBwb3RlbnRpYWwgYnVncyB3b3VsZCBpbnZvbHZlIGNvbmN1cnJlbmN5LCBsaWZldGltZS9yZWZjb3VudGluZywgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMgcmF0aGVyIHRoYW4gS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrhjd2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-06 20:17:12 +0000 UTC FinishedAt: 2026-09-06 20:19:15 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "d118502628f8b673be9023db8bdf878f64a7ed45", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZSWAP", "SWAP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "d118502628f8b673be9023db8bdf878f64a7ed45", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZSWAP", "SWAP" ], "series_id": "93ffdc1f-3681-4445-823e-9a0d77965c44" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "zswap_store", "zswap_load", "zswap_store_page", "zswap_decompress", "zswap_entry_free", "zswap_pool_create", "zswap_pool_find_get", "__zswap_pool_empty", "__zswap_pool_release", "zswap_compressor_param_set", "zswap_total_pages" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIwOjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pTV0FQJiMzNDssCiAgICAmIzM0O1NXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6c3dhcF9zdG9yZSYjMzQ7LAogICAgJiMzNDt6c3dhcF9sb2FkJiMzNDssCiAgICAmIzM0O3pzd2FwX3N0b3JlX3BhZ2UmIzM0OywKICAgICYjMzQ7enN3YXBfZGVjb21wcmVzcyYjMzQ7LAogICAgJiMzNDt6c3dhcF9lbnRyeV9mcmVlJiMzNDssCiAgICAmIzM0O3pzd2FwX3Bvb2xfY3JlYXRlJiMzNDssCiAgICAmIzM0O3pzd2FwX3Bvb2xfZmluZF9nZXQmIzM0OywKICAgICYjMzQ7X196c3dhcF9wb29sX2VtcHR5JiMzNDssCiAgICAmIzM0O19fenN3YXBfcG9vbF9yZWxlYXNlJiMzNDssCiAgICAmIzM0O3pzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0JiMzNDssCiAgICAmIzM0O3pzd2FwX3RvdGFsX3BhZ2VzJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaW50ZXJuYWwgenN3YXAgcG9vbCBhbmQgZW50cnkgbWFuYWdlbWVudCBpbiBtbS96c3dhcC5jIGJ5IHJlcGxhY2luZyBhIGxpbmtlZCBsaXN0IG9mIHBvb2xzIHdpdGggYW4gWEFycmF5IChpbmRleGVkIGJ5IGEgdTggcG9vbF9pZHgpIGFuZCBzd2l0Y2hpbmcgcG9vbCBsb29rdXBzIHRvIHVzZSB4YV9sb2FkKCkuIEFsbCBhbGxvY2F0ZWQgc3RydWN0dXJlcyAoenN3YXBfcG9vbCBhbGxvY2F0ZWQgd2l0aCBremFsbG9jX29iaiwgYW5kIHpzd2FwX2VudHJ5IHdob3NlIGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBpbiB6c3dhcF9zdG9yZV9wYWdlKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gTm9uZSBvZiB0aGUgbW9kaWZpZWQgZGF0YSBzdHJ1Y3R1cmVzIG9yIGZpZWxkcyBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcyBhcmUgaW50cm9kdWNlZC4gQW55IHBvdGVudGlhbCBidWdzIHdvdWxkIGludm9sdmUgY29uY3VycmVuY3ksIGxpZmV0aW1lL3JlZmNvdW50aW5nLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcyByYXRoZXIgdGhhbiBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpbiBtbS96c3dhcC5jLCByZWZhY3RvcmluZyBwb29sIGFuZCBlbnRyeSB0cmFja2luZyBmcm9tIGEgbGlua2VkIGxpc3QgYW5kIHJhdyBwb29sIHBvaW50ZXIgdG8gYW4gSUQtYmFzZWQgWEFycmF5IHdpdGggOC1iaXQgcG9vbCBpbmRpY2VzIGluIHN0cnVjdCB6c3dhcF9lbnRyeS4gSXQgYWxzbyB1cGRhdGVzIHN5bmNocm9uaXphdGlvbiBzZW1hbnRpY3MgdXNpbmcgUkNVIGFuZCByY3Vfd29yayAocXVldWVfcmN1X3dvcmspIGFsb25nIHdpdGggc29mdGlycS1zYWZlIFhBcnJheSBvcGVyYXRpb25zICh4YV9hbGxvY19iaCwgeGFfZXJhc2VfYmgpLiBUaGVzZSBjb25jdXJyZW5jeSBhbmQgZGF0YSBzdHJ1Y3R1cmUgbW9kaWZpY2F0aW9ucyBpbiByZWFjaGFibGUgTU0gY29kZSB3YXJyYW50IGZ1enppbmcgdG8gZGV0ZWN0IHBvc3NpYmxlIHJhY2VzLCBzdGFsZSBJRCBkZXJlZmVyZW5jZXMsIG9yIGFzc2VydGlvbiB0cmlwcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMDoxODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDZmYzgyYmJkMGY0NTY1MGIzNjdmZjNiYTBmZDBkOTZiYmU5YTI0MTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDIwOjE4OjI3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXG5pbmRleCBmM2FlM2M4MWU0OGVhLi4yNTNlZWJiOTcxYjk3IDEwMDY0NFxuLS0tIGEvbW0venN3YXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0venN3YXAuY1xuQEAgLTM0LDYgJiM0MzszNCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvd3JpdGViYWNrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlbWFwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC94YXJyYXkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3RfbHJ1LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC96c21hbGxvYy5oXHUwMDNlXG4gXG5AQCAtMTU0LDEyICYjNDM7MTU1LDIzIEBAIHN0cnVjdCB6c3dhcF9wb29sIHtcbiBcdHN0cnVjdCB6c19wb29sICp6c19wb29sO1xuIFx0c3RydWN0IGNyeXB0b19hY29tcF9jdHggX19wZXJjcHUgKmFjb21wX2N0eDtcbiBcdHN0cnVjdCBwZXJjcHVfcmVmIHJlZjtcbi1cdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbi1cdHN0cnVjdCB3b3JrX3N0cnVjdCByZWxlYXNlX3dvcms7XG4mIzQzO1x0c3RydWN0IHJjdV93b3JrIHJlbGVhc2Vfcndvcms7XG4gXHRzdHJ1Y3QgaGxpc3Rfbm9kZSBub2RlO1xuJiM0MztcdHU4IGlkeDtcbiBcdGNoYXIgdGZtX25hbWVbQ1JZUFRPX01BWF9BTEdfTkFNRV07XG4gfTtcbiBcbiYjNDM7LypcbiYjNDM7ICogTGl2ZSBwb29scyBrZXllZCBieSBpZCAoMS4uWlNXQVBfTUFYX1BPT0xfSUQpLiAgWEFfRkxBR1NfQUxMT0MxIGtlZXBzIGlkIDBcbiYjNDM7ICogcmVzZXJ2ZWQgc28gaXQgaXMgbmV2ZXIgaGFuZGVkIHRvIGEgbGl2ZSBwb29sLiAgWEFfRkxBR1NfTE9DS19CSCBtYWtlcyB0aGVcbiYjNDM7ICogeGFfbG9jayBzb2Z0aXJxLXNhZmU6IGl0IGlzIHRha2VuIGZyb20gX196c3dhcF9wb29sX2VtcHR5KCksIHdoaWNoIHJ1bnMgZnJvbVxuJiM0MzsgKiBhIHBlcmNwdV9yZWYgcmVsZWFzZSBjYWxsYmFjayBpbiBzb2Z0aXJxIGNvbnRleHQuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFpTV0FQX0ZJUlNUX1BPT0xfSUQgMVxuJiM0MzsjZGVmaW5lIFpTV0FQX01BWF9QT09MX0lEIFU4X01BWFxuJiM0MztzdGF0aWMgREVGSU5FX1hBUlJBWV9GTEFHUyh6c3dhcF9wb29scywgWEFfRkxBR1NfQUxMT0MxIHwgWEFfRkxBR1NfTE9DS19CSCk7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCBfX3JjdSAqenN3YXBfY3VycmVudF9wb29sO1xuJiM0MztcbiAvKiBHbG9iYWwgTFJVIGxpc3RzIHNoYXJlZCBieSBhbGwgenN3YXAgcG9vbHMuICovXG4gc3RhdGljIHN0cnVjdCBsaXN0X2xydSB6c3dhcF9saXN0X2xydTtcbiBcbkBAIC0xODIsNyAmIzQzOzE5NCw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2hyaW5rZXIgKnpzd2FwX3Nocmlua2VyO1xuICAqICAgICAgICAgICAgICB3cml0ZWJhY2sgbG9naWMuIFRoZSBlbnRyeSBpcyBvbmx5IHJlY2xhaW1lZCBieSB0aGUgd3JpdGViYWNrXG4gICogICAgICAgICAgICAgIGxvZ2ljIGlmIHJlZmVyZW5jZWQgaXMgdW5zZXQuIFNlZSBjb21tZW50cyBpbiB0aGUgc2hyaW5rZXJcbiAgKiAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgY29udGV4dC5cbi0gKiBwb29sIC0gdGhlIHpzd2FwX3Bvb2wgdGhlIGVudHJ5JiMzOTtzIGRhdGEgaXMgaW5cbiYjNDM7ICogcG9vbF9pZHggLSBpZCBvZiB0aGUgenN3YXBfcG9vbCB0aGF0IHRoZSBlbnRyeSYjMzk7cyBkYXRhIGlzIGluLlxuICAqIGhhbmRsZSAtIHpzbWFsbG9jIGFsbG9jYXRpb24gaGFuZGxlIHRoYXQgc3RvcmVzIHRoZSBjb21wcmVzc2VkIHBhZ2UgZGF0YVxuICAqIG9iamNnIC0gdGhlIG9ial9jZ3JvdXAgdGhhdCB0aGUgY29tcHJlc3NlZCBtZW1vcnkgaXMgY2hhcmdlZCB0b1xuICAqIGxydSAtIGhhbmRsZSB0byB0aGUgcG9vbCYjMzk7cyBscnUgdXNlZCB0byBldmljdCBwYWdlcy5cbkBAIC0xOTEsMTkgJiM0MzsyMDMsMjUgQEAgc3RydWN0IHpzd2FwX2VudHJ5IHtcbiBcdHN3cF9lbnRyeV90IHN3cGVudHJ5O1xuIFx0dW5zaWduZWQgaW50IGxlbmd0aDtcbiBcdGJvb2wgcmVmZXJlbmNlZDtcbi1cdHN0cnVjdCB6c3dhcF9wb29sICpwb29sO1xuJiM0MztcdHU4IHBvb2xfaWR4O1xuIFx0dW5zaWduZWQgbG9uZyBoYW5kbGU7XG4gXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGxydTtcbiB9O1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBObyBSQ1Ugc2VjdGlvbiBpcyBuZWVkZWQgYXJvdW5kIHRoZSByZXR1cm5lZCBwb2ludGVyOiBhIHN0b3JlZCBlbnRyeSBwaW5zXG4mIzQzOyAqIGl0cyBwb29sIHZpYSBwZXJjcHVfcmVmICh0YWtlbiBpbiB6c3dhcF9zdG9yZV9wYWdlKCkpLCBzbyB0aGUgaWQgY2Fubm90IGJlXG4mIzQzOyAqIHJldXNlZCB1bmRlciB1cy4gIENhbGxlcnMgV0FSTiBhbmQgaGFuZGxlIGEgTlVMTCBmcm9tIGEgY29ycnVwdCBwb29sX2lkeC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfZW50cnlfcG9vbChzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHhhX2xvYWQoXHUwMDI2enN3YXBfcG9vbHMsIGVudHJ5LVx1MDAzZXBvb2xfaWR4KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgc3RydWN0IHhhcnJheSAqenN3YXBfdHJlZXNbTUFYX1NXQVBGSUxFU107XG4gc3RhdGljIHVuc2lnbmVkIGludCBucl96c3dhcF90cmVlc1tNQVhfU1dBUEZJTEVTXTtcbiBcbi0vKiBSQ1UtcHJvdGVjdGVkIGl0ZXJhdGlvbiAqL1xuLXN0YXRpYyBMSVNUX0hFQUQoenN3YXBfcG9vbHMpO1xuLS8qIHByb3RlY3RzIHpzd2FwX3Bvb2xzIGxpc3QgbW9kaWZpY2F0aW9uICovXG4tc3RhdGljIERFRklORV9TUElOTE9DSyh6c3dhcF9wb29sc19sb2NrKTtcbiAvKiBwb29sIGNvdW50ZXIgdG8gcHJvdmlkZSB1bmlxdWUgbmFtZXMgdG8genNtYWxsb2MgKi9cbiBzdGF0aWMgYXRvbWljX3QgenN3YXBfcG9vbHNfY291bnQgPSBBVE9NSUNfSU5JVCgwKTtcbiBcbkBAIC0yNzUsNiAmIzQzOzI5Myw3IEBAIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jcmVhdGUoY2hhciAqY29tcHJlc3NvcilcbiBcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sO1xuIFx0Y2hhciBuYW1lWzM4XTsgLyogJiMzOTt6c3dhcCYjMzk7ICYjNDM7IDMyIGNoYXIgKG1heCkgbnVtICYjNDM7IFxcMCAqL1xuIFx0aW50IHJldCwgY3B1O1xuJiM0MztcdHUzMiBpZDtcbiBcbiBcdGlmICghenN3YXBfaGFzX3Bvb2wgXHUwMDI2XHUwMDI2ICFzdHJjbXAoY29tcHJlc3NvciwgWlNXQVBfUEFSQU1fVU5TRVQpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbkBAIC0zMjAsMTIgJiM0MzszMzksMjkgQEAgc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2NyZWF0ZShjaGFyICpjb21wcmVzc29yKVxuIFx0XHRcdCAgICAgIFBFUkNQVV9SRUZfQUxMT1dfUkVJTklULCBHRlBfS0VSTkVMKTtcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gcmVmX2ZhaWw7XG4tXHRJTklUX0xJU1RfSEVBRChcdTAwMjZwb29sLVx1MDAzZWxpc3QpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFB1Ymxpc2ggb25seSBhZnRlciB0aGUgcG9vbCBpcyBmdWxseSBidWlsdCwgc28gbG9ja2xlc3Mgd2Fsa2Vyc1xuJiM0MztcdCAqIG5ldmVyIHNlZSBhIGhhbGYtaW5pdGlhbGl6ZWQgcG9vbC4gIFRoZSBfYmggdmFyaWFudCBwYWlycyB3aXRoIHRoZVxuJiM0MztcdCAqIHNvZnRpcnEtY29udGV4dCB4YV9sb2NrIHRha2VuIGluIF9fenN3YXBfcG9vbF9lbXB0eSgpLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldCA9IHhhX2FsbG9jX2JoKFx1MDAyNnpzd2FwX3Bvb2xzLCBcdTAwMjZpZCwgcG9vbCxcbiYjNDM7XHRcdFx0ICBYQV9MSU1JVChaU1dBUF9GSVJTVF9QT09MX0lELCBaU1dBUF9NQVhfUE9PTF9JRCksXG4mIzQzO1x0XHRcdCAgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0aWYgKHJldCA9PSAtRUJVU1kpXG4mIzQzO1x0XHRcdHByX2VycihcJiMzNDtjYW5ub3QgYWxsb2NhdGUgcG9vbCBpZCAobWF4ICVkIGxpdmUgcG9vbHMpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICAgWlNXQVBfTUFYX1BPT0xfSUQgLSBaU1dBUF9GSVJTVF9QT09MX0lEICYjNDM7IDEpO1xuJiM0MztcdFx0Z290byB4YV9mYWlsO1xuJiM0MztcdH1cbiYjNDM7XHRwb29sLVx1MDAzZWlkeCA9IGlkO1xuIFxuIFx0enN3YXBfcG9vbF9kZWJ1ZyhcJiMzNDtjcmVhdGVkXCYjMzQ7LCBwb29sKTtcbiBcbiBcdHJldHVybiBwb29sO1xuIFxuJiM0Mzt4YV9mYWlsOlxuJiM0MztcdHBlcmNwdV9yZWZfZXhpdChcdTAwMjZwb29sLVx1MDAzZXJlZik7XG4gcmVmX2ZhaWw6XG4gXHRjcHVocF9zdGF0ZV9yZW1vdmVfaW5zdGFuY2UoQ1BVSFBfTU1fWlNXUF9QT09MX1BSRVBBUkUsIFx1MDAyNnBvb2wtXHUwMDNlbm9kZSk7XG4gXG5AQCAtMzc5LDM3ICYjNDM7NDE1LDI5IEBAIHN0YXRpYyB2b2lkIHpzd2FwX3Bvb2xfZGVzdHJveShzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbClcbiBcbiBzdGF0aWMgdm9pZCBfX3pzd2FwX3Bvb2xfcmVsZWFzZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuLVx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSBjb250YWluZXJfb2Yod29yaywgdHlwZW9mKCpwb29sKSxcbi1cdFx0XHRcdFx0XHRyZWxlYXNlX3dvcmspO1xuLVxuLVx0c3luY2hyb25pemVfcmN1KCk7XG4mIzQzO1x0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSBjb250YWluZXJfb2YodG9fcmN1X3dvcmsod29yayksXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgdHlwZW9mKCpwb29sKSwgcmVsZWFzZV9yd29yayk7XG4gXG4gXHQvKiBub2JvZHkgc2hvdWxkIGhhdmUgYmVlbiBhYmxlIHRvIGdldCBhIHJlZi4uLiAqL1xuIFx0V0FSTl9PTighcGVyY3B1X3JlZl9pc196ZXJvKFx1MDAyNnBvb2wtXHUwMDNlcmVmKSk7XG4gXHRwZXJjcHVfcmVmX2V4aXQoXHUwMDI2cG9vbC1cdTAwM2VyZWYpO1xuIFxuLVx0LyogcG9vbCBpcyBub3cgb2ZmIHpzd2FwX3Bvb2xzIGxpc3QgYW5kIGhhcyBubyByZWZlcmVuY2VzLiAqL1xuJiM0MztcdC8qIFRoZSBwb29sIGlzIG5vIGxvbmdlciBpbiB6c3dhcF9wb29scyBhbmQgaGFzIG5vIHJlZmVyZW5jZXMuICovXG4gXHR6c3dhcF9wb29sX2Rlc3Ryb3kocG9vbCk7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jdXJyZW50KHZvaWQpO1xuLVxuIHN0YXRpYyB2b2lkIF9fenN3YXBfcG9vbF9lbXB0eShzdHJ1Y3QgcGVyY3B1X3JlZiAqcmVmKVxuIHtcbiBcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sO1xuIFxuIFx0cG9vbCA9IGNvbnRhaW5lcl9vZihyZWYsIHR5cGVvZigqcG9vbCksIHJlZik7XG4gXG4tXHRzcGluX2xvY2tfYmgoXHUwMDI2enN3YXBfcG9vbHNfbG9jayk7XG4tXG4tXHRXQVJOX09OKHBvb2wgPT0genN3YXBfcG9vbF9jdXJyZW50KCkpO1xuJiM0MztcdFdBUk5fT04ocG9vbCA9PSByY3VfYWNjZXNzX3BvaW50ZXIoenN3YXBfY3VycmVudF9wb29sKSk7XG4gXG4tXHRsaXN0X2RlbF9yY3UoXHUwMDI2cG9vbC1cdTAwM2VsaXN0KTtcbiYjNDM7XHR4YV9lcmFzZV9iaChcdTAwMjZ6c3dhcF9wb29scywgcG9vbC1cdTAwM2VpZHgpO1xuIFxuLVx0SU5JVF9XT1JLKFx1MDAyNnBvb2wtXHUwMDNlcmVsZWFzZV93b3JrLCBfX3pzd2FwX3Bvb2xfcmVsZWFzZSk7XG4tXHRzY2hlZHVsZV93b3JrKFx1MDAyNnBvb2wtXHUwMDNlcmVsZWFzZV93b3JrKTtcbi1cbi1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnpzd2FwX3Bvb2xzX2xvY2spO1xuJiM0MztcdElOSVRfUkNVX1dPUksoXHUwMDI2cG9vbC1cdTAwM2VyZWxlYXNlX3J3b3JrLCBfX3pzd2FwX3Bvb2xfcmVsZWFzZSk7XG4mIzQzO1x0cXVldWVfcmN1X3dvcmsoc3lzdGVtX3BlcmNwdV93cSwgXHUwMDI2cG9vbC1cdTAwM2VyZWxlYXNlX3J3b3JrKTtcbiB9XG4gXG4gc3RhdGljIGludCBfX211c3RfY2hlY2sgenN3YXBfcG9vbF90cnlnZXQoc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wpXG5AQCAtNDM1LDIwICYjNDM7NDYzLDEzIEBAIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqX196c3dhcF9wb29sX2N1cnJlbnQodm9pZClcbiB7XG4gXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDtcbiBcbi1cdHBvb2wgPSBsaXN0X2ZpcnN0X29yX251bGxfcmN1KFx1MDAyNnpzd2FwX3Bvb2xzLCB0eXBlb2YoKnBvb2wpLCBsaXN0KTtcbiYjNDM7XHRwb29sID0gcmN1X2RlcmVmZXJlbmNlKHpzd2FwX2N1cnJlbnRfcG9vbCk7XG4gXHRXQVJOX09OQ0UoIXBvb2wgXHUwMDI2XHUwMDI2IHpzd2FwX2hhc19wb29sLFxuIFx0XHQgIFwmIzM0OyVzOiBubyBwYWdlIHN0b3JhZ2UgcG9vbCFcXG5cJiMzNDssIF9fZnVuY19fKTtcbiBcbiBcdHJldHVybiBwb29sO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3VycmVudCh2b2lkKVxuLXtcbi1cdGFzc2VydF9zcGluX2xvY2tlZChcdTAwMjZ6c3dhcF9wb29sc19sb2NrKTtcbi1cbi1cdHJldHVybiBfX3pzd2FwX3Bvb2xfY3VycmVudCgpO1xuLX1cbi1cbiBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3VycmVudF9nZXQodm9pZClcbiB7XG4gXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDtcbkBAIC00NjQsMjMgJiM0Mzs0ODUsMjggQEAgc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2N1cnJlbnRfZ2V0KHZvaWQpXG4gXHRyZXR1cm4gcG9vbDtcbiB9XG4gXG4tLyogdHlwZSBhbmQgY29tcHJlc3NvciBtdXN0IGJlIG51bGwtdGVybWluYXRlZCAqL1xuJiM0MzsvKiBjb21wcmVzc29yIG11c3QgYmUgbnVsbC10ZXJtaW5hdGVkICovXG4gc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2ZpbmRfZ2V0KGNoYXIgKmNvbXByZXNzb3IpXG4ge1xuIFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBpZDtcbiBcbi1cdGFzc2VydF9zcGluX2xvY2tlZChcdTAwMjZ6c3dhcF9wb29sc19sb2NrKTtcbi1cbi1cdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBvb2wsIFx1MDAyNnpzd2FwX3Bvb2xzLCBsaXN0KSB7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBfX3pzd2FwX3Bvb2xfZW1wdHkoKSBjYW4gZXJhc2UgZnJvbSB6c3dhcF9wb29scyBpbiBzb2Z0aXJxIHdoaWxlIHdlXG4mIzQzO1x0ICogd2Fsay4gIHJjdV9yZWFkX2xvY2soKSBrZWVwcyB0aGUgd2FsayBjb25zaXN0ZW50IGFuZCBlYWNoIHBvb2wgYWxpdmVcbiYjNDM7XHQgKiBhY3Jvc3MgdHJ5Z2V0KCkuICB4YV9mb3JfZWFjaCgpJiMzOTtzIG93biBSQ1UgZG9lcyBub3Qgc3BhbiB0aGUgbG9vcCBib2R5LlxuJiM0MztcdCAqL1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHR4YV9mb3JfZWFjaChcdTAwMjZ6c3dhcF9wb29scywgaWQsIHBvb2wpIHtcbiBcdFx0aWYgKHN0cmNtcChwb29sLVx1MDAzZXRmbV9uYW1lLCBjb21wcmVzc29yKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0LyogaWYgd2UgY2FuJiMzOTt0IGdldCBpdCwgaXQmIzM5O3MgYWJvdXQgdG8gYmUgZGVzdHJveWVkICovXG4tXHRcdGlmICghenN3YXBfcG9vbF90cnlnZXQocG9vbCkpXG4tXHRcdFx0Y29udGludWU7XG4tXHRcdHJldHVybiBwb29sO1xuJiM0MztcdFx0aWYgKHpzd2FwX3Bvb2xfdHJ5Z2V0KHBvb2wpKVxuJiM0MztcdFx0XHRicmVhaztcbiBcdH1cbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbi1cdHJldHVybiBOVUxMO1xuJiM0MztcdHJldHVybiBwb29sO1xuIH1cbiBcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyB6c3dhcF9tYXhfcGFnZXModm9pZClcbkBAIC00OTcsOSAmIzQzOzUyMywxNCBAQCB1bnNpZ25lZCBsb25nIHpzd2FwX3RvdGFsX3BhZ2VzKHZvaWQpXG4ge1xuIFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7XG4gXHR1bnNpZ25lZCBsb25nIHRvdGFsID0gMDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGlkO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogcmN1X3JlYWRfbG9jaygpIGtlZXBzIGVhY2ggcG9vbCBhbGl2ZSBhY3Jvc3MgenNfZ2V0X3RvdGFsX3BhZ2VzKCkuXG4mIzQzO1x0ICogeGFfZm9yX2VhY2goKSYjMzk7cyBvd24gUkNVIGRvZXMgbm90IHNwYW4gdGhlIGxvb3AgYm9keS5cbiYjNDM7XHQgKi9cbiBcdHJjdV9yZWFkX2xvY2soKTtcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBvb2wsIFx1MDAyNnpzd2FwX3Bvb2xzLCBsaXN0KVxuJiM0MztcdHhhX2Zvcl9lYWNoKFx1MDAyNnpzd2FwX3Bvb2xzLCBpZCwgcG9vbClcbiBcdFx0dG90YWwgJiM0Mzs9IHpzX2dldF90b3RhbF9wYWdlcyhwb29sLVx1MDAzZXpzX3Bvb2wpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG5AQCAtNTU2LDIwICYjNDM7NTg3LDEzIEBAIHN0YXRpYyBpbnQgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuIFx0fVxuIFxuLVx0c3Bpbl9sb2NrX2JoKFx1MDAyNnpzd2FwX3Bvb2xzX2xvY2spO1xuLVxuIFx0cG9vbCA9IHpzd2FwX3Bvb2xfZmluZF9nZXQocyk7XG4tXHRpZiAocG9vbCkge1xuJiM0MztcdGlmICghcG9vbCkge1xuJiM0MztcdFx0cG9vbCA9IHpzd2FwX3Bvb2xfY3JlYXRlKHMpO1xuJiM0MztcdH0gZWxzZSB7XG4gXHRcdHpzd2FwX3Bvb2xfZGVidWcoXCYjMzQ7dXNpbmcgZXhpc3RpbmdcJiMzNDssIHBvb2wpO1xuLVx0XHRXQVJOX09OKHBvb2wgPT0genN3YXBfcG9vbF9jdXJyZW50KCkpO1xuLVx0XHRsaXN0X2RlbF9yY3UoXHUwMDI2cG9vbC1cdTAwM2VsaXN0KTtcbi1cdH1cbiYjNDM7XHRcdFdBUk5fT04ocG9vbCA9PSByY3VfYWNjZXNzX3BvaW50ZXIoenN3YXBfY3VycmVudF9wb29sKSk7XG4gXG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZ6c3dhcF9wb29sc19sb2NrKTtcbi1cbi1cdGlmICghcG9vbClcbi1cdFx0cG9vbCA9IHpzd2FwX3Bvb2xfY3JlYXRlKHMpO1xuLVx0ZWxzZSB7XG4gXHRcdC8qXG4gXHRcdCAqIFJlc3RvcmUgdGhlIGluaXRpYWwgcmVmIGRyb3BwZWQgYnkgcGVyY3B1X3JlZl9raWxsKClcbiBcdFx0ICogd2hlbiB0aGUgcG9vbCB3YXMgZGVjb21taXNzaW9uZWQgYW5kIHN3aXRjaCBpdCBhZ2FpblxuQEAgLTU4NiwyNCAmIzQzOzYxMCwxOCBAQCBzdGF0aWMgaW50IHpzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0KGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbVxuIFx0ZWxzZVxuIFx0XHRyZXQgPSAtRUlOVkFMO1xuIFxuLVx0c3Bpbl9sb2NrX2JoKFx1MDAyNnpzd2FwX3Bvb2xzX2xvY2spO1xuLVxuJiM0MztcdC8qXG4mIzQzO1x0ICogQ29tcHJlc3NvciBzd2l0Y2hlcyBhcmUgc2VyaWFsaXplZCBieSB0aGUga2VybmVsIHBhcmFtIGxvY2ssIHNvIHRoaXNcbiYjNDM7XHQgKiBpcyB0aGUgb25seSB3cml0ZXIgb2YgenN3YXBfY3VycmVudF9wb29sOiBubyB4YV9sb2NrIG5lZWRlZC5cbiYjNDM7XHQgKi9cbiBcdGlmICghcmV0KSB7XG4tXHRcdHB1dF9wb29sID0genN3YXBfcG9vbF9jdXJyZW50KCk7XG4tXHRcdGxpc3RfYWRkX3JjdShcdTAwMjZwb29sLVx1MDAzZWxpc3QsIFx1MDAyNnpzd2FwX3Bvb2xzKTtcbiYjNDM7XHRcdHB1dF9wb29sID0gcmN1X2FjY2Vzc19wb2ludGVyKHpzd2FwX2N1cnJlbnRfcG9vbCk7XG4mIzQzO1x0XHRyY3VfYXNzaWduX3BvaW50ZXIoenN3YXBfY3VycmVudF9wb29sLCBwb29sKTtcbiBcdFx0enN3YXBfaGFzX3Bvb2wgPSB0cnVlO1xuIFx0fSBlbHNlIGlmIChwb29sKSB7XG4tXHRcdC8qXG4tXHRcdCAqIEFkZCB0aGUgcG9zc2libHkgcHJlLWV4aXN0aW5nIHBvb2wgdG8gdGhlIGVuZCBvZiB0aGUgcG9vbHNcbi1cdFx0ICogbGlzdDsgaWYgaXQmIzM5O3MgbmV3IChhbmQgZW1wdHkpIHRoZW4gaXQmIzM5O2xsIGJlIHJlbW92ZWQgYW5kXG4tXHRcdCAqIGRlc3Ryb3llZCBieSB0aGUgcHV0IGFmdGVyIHdlIGRyb3AgdGhlIGxvY2tcbi1cdFx0ICovXG4tXHRcdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNnBvb2wtXHUwMDNlbGlzdCwgXHUwMDI2enN3YXBfcG9vbHMpO1xuIFx0XHRwdXRfcG9vbCA9IHBvb2w7XG4gXHR9XG4gXG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZ6c3dhcF9wb29sc19sb2NrKTtcbi1cbiBcdC8qXG4gXHQgKiBEcm9wIHRoZSByZWYgZnJvbSBlaXRoZXIgdGhlIG9sZCBjdXJyZW50IHBvb2wsXG4gXHQgKiBvciB0aGUgbmV3IHBvb2wgd2UgZmFpbGVkIHRvIGFkZFxuQEAgLTc1MSw5ICYjNDM7NzY5LDEzIEBAIHN0YXRpYyB2b2lkIHpzd2FwX2VudHJ5X2NhY2hlX2ZyZWUoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcbiAgKi9cbiBzdGF0aWMgdm9pZCB6c3dhcF9lbnRyeV9mcmVlKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXG4ge1xuJiM0MztcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sID0genN3YXBfZW50cnlfcG9vbChlbnRyeSk7XG4mIzQzO1xuIFx0enN3YXBfbHJ1X2RlbChlbnRyeSk7XG4tXHR6c19mcmVlKGVudHJ5LVx1MDAzZXBvb2wtXHUwMDNlenNfcG9vbCwgZW50cnktXHUwMDNlaGFuZGxlKTtcbi1cdHpzd2FwX3Bvb2xfcHV0KGVudHJ5LVx1MDAzZXBvb2wpO1xuJiM0MztcdGlmICghV0FSTl9PTl9PTkNFKCFwb29sKSkge1xuJiM0MztcdFx0enNfZnJlZShwb29sLVx1MDAzZXpzX3Bvb2wsIGVudHJ5LVx1MDAzZWhhbmRsZSk7XG4mIzQzO1x0XHR6c3dhcF9wb29sX3B1dChwb29sKTtcbiYjNDM7XHR9XG4gXHRpZiAoZW50cnktXHUwMDNlb2JqY2cpIHtcbiBcdFx0b2JqX2Nncm91cF91bmNoYXJnZV96c3dhcChlbnRyeS1cdTAwM2VvYmpjZywgZW50cnktXHUwMDNlbGVuZ3RoKTtcbiBcdFx0b2JqX2Nncm91cF9wdXQoZW50cnktXHUwMDNlb2JqY2cpO1xuQEAgLTkxMCwxMiAmIzQzOzkzMiwxNSBAQCBzdGF0aWMgYm9vbCB6c3dhcF9jb21wcmVzcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcbiBzdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuLVx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSBlbnRyeS1cdTAwM2Vwb29sO1xuJiM0MztcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sID0genN3YXBfZW50cnlfcG9vbChlbnRyeSk7XG4gXHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgaW5wdXRbMl07IC8qIHpzbWFsbG9jIHJldHVybnMgYW4gU0cgbGlzdCAxLTIgZW50cmllcyAqL1xuIFx0c3RydWN0IHNjYXR0ZXJsaXN0IG91dHB1dDtcbiBcdHN0cnVjdCBjcnlwdG9fYWNvbXBfY3R4ICphY29tcF9jdHg7XG4gXHRpbnQgcmV0ID0gMCwgZGxlbjtcbiBcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKCFwb29sKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4gXHRhY29tcF9jdHggPSByYXdfY3B1X3B0cihwb29sLVx1MDAzZWFjb21wX2N0eCk7XG4gXHRtdXRleF9sb2NrKFx1MDAyNmFjb21wX2N0eC1cdTAwM2VtdXRleCk7XG4gXHR6c19vYmpfcmVhZF9zZ19iZWdpbihwb29sLVx1MDAzZXpzX3Bvb2wsIGVudHJ5LVx1MDAzZWhhbmRsZSwgaW5wdXQsIGVudHJ5LVx1MDAzZWxlbmd0aCk7XG5AQCAtOTUxLDcgJiM0Mzs5NzYsNyBAQCBzdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRwcl9hbGVydF9yYXRlbGltaXRlZChcJiMzNDtEZWNvbXByZXNzaW9uIGVycm9yIGZyb20genN3YXAgKCVkOiVsdSAlcyAldS1cdTAwM2UlZClcXG5cJiMzNDssXG4gXHRcdFx0XHRcdFx0c3dwX3R5cGUoZW50cnktXHUwMDNlc3dwZW50cnkpLFxuIFx0XHRcdFx0XHRcdHN3cF9vZmZzZXQoZW50cnktXHUwMDNlc3dwZW50cnkpLFxuLVx0XHRcdFx0XHRcdGVudHJ5LVx1MDAzZXBvb2wtXHUwMDNldGZtX25hbWUsXG4mIzQzO1x0XHRcdFx0XHRcdHBvb2wtXHUwMDNldGZtX25hbWUsXG4gXHRcdFx0XHRcdFx0ZW50cnktXHUwMDNlbGVuZ3RoLCBkbGVuKTtcbiBcdHJldHVybiBmYWxzZTtcbiB9XG5AQCAtMTQwOSw2ICYjNDM7MTQzNCwxMyBAQCBzdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0aWYgKCF6c3dhcF9jb21wcmVzcyhwYWdlLCBlbnRyeSwgcG9vbCkpXG4gXHRcdGdvdG8gY29tcHJlc3NfZmFpbGVkO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogU2V0IHBvb2xfaWR4IGJlZm9yZSB0aGUgeGFfc3RvcmUoKSBiZWxvdyBwdWJsaXNoZXMgdGhlIGVudHJ5LCBvciBhXG4mIzQzO1x0ICogY29uY3VycmVudCByZWFkZXIgY291bGQgcmVzb2x2ZSBhIHN0YWxlIHBvb2xfaWR4IGxlZnQgYnkgc2xhYiByZXVzZVxuJiM0MztcdCAqIHRvIGFuIHVucmVsYXRlZCBsaXZlIHBvb2wuXG4mIzQzO1x0ICovXG4mIzQzO1x0ZW50cnktXHUwMDNlcG9vbF9pZHggPSBwb29sLVx1MDAzZWlkeDtcbiYjNDM7XG4gXHRvbGQgPSB4YV9zdG9yZShzd2FwX3pzd2FwX3RyZWUocGFnZV9zd3BlbnRyeSksXG4gXHRcdCAgICAgICBzd3Bfb2Zmc2V0KHBhZ2Vfc3dwZW50cnkpLFxuIFx0XHQgICAgICAgZW50cnksIEdGUF9LRVJORUwpO1xuQEAgLTE0NTQsNyAmIzQzOzE0ODYsNiBAQCBzdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0ICogICAgVGhlIHB1Ymxpc2hpbmcgb3JkZXIgbWF0dGVycyB0byBwcmV2ZW50IHdyaXRlYmFjayBmcm9tIHNlZWluZ1xuIFx0ICogICAgYW4gaW5jb2hlcmVudCBlbnRyeS5cbiBcdCAqL1xuLVx0ZW50cnktXHUwMDNlcG9vbCA9IHBvb2w7XG4gXHRlbnRyeS1cdTAwM2Vzd3BlbnRyeSA9IHBhZ2Vfc3dwZW50cnk7XG4gXHRlbnRyeS1cdTAwM2VvYmpjZyA9IG9iamNnO1xuIFx0ZW50cnktXHUwMDNlcmVmZXJlbmNlZCA9IHRydWU7XG5AQCAtMTc5MCw3ICYjNDM7MTgyMSw3IEBAIHN0YXRpYyBpbnQgenN3YXBfc2V0dXAodm9pZClcbiBcdHBvb2wgPSBfX3pzd2FwX3Bvb2xfY3JlYXRlX2ZhbGxiYWNrKCk7XG4gXHRpZiAocG9vbCkge1xuIFx0XHRwcl9pbmZvKFwmIzM0O2xvYWRlZCB1c2luZyBwb29sICVzXFxuXCYjMzQ7LCBwb29sLVx1MDAzZXRmbV9uYW1lKTtcbi1cdFx0bGlzdF9hZGQoXHUwMDI2cG9vbC1cdTAwM2VsaXN0LCBcdTAwMjZ6c3dhcF9wb29scyk7XG4mIzQzO1x0XHRyY3VfYXNzaWduX3BvaW50ZXIoenN3YXBfY3VycmVudF9wb29sLCBwb29sKTtcbiBcdFx0enN3YXBfaGFzX3Bvb2wgPSB0cnVlO1xuIFx0XHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcdTAwMjZ6c3dhcF9ldmVyX2VuYWJsZWQpO1xuIFx0fSBlbHNlIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMDoxODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaU1dBUCYjMzQ7LAogICAgJiMzNDtTV0FQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7enN3YXBfc3RvcmUmIzM0OywKICAgICYjMzQ7enN3YXBfbG9hZCYjMzQ7LAogICAgJiMzNDt6c3dhcF9zdG9yZV9wYWdlJiMzNDssCiAgICAmIzM0O3pzd2FwX2RlY29tcHJlc3MmIzM0OywKICAgICYjMzQ7enN3YXBfZW50cnlfZnJlZSYjMzQ7LAogICAgJiMzNDt6c3dhcF9wb29sX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDt6c3dhcF9wb29sX2ZpbmRfZ2V0JiMzNDssCiAgICAmIzM0O19fenN3YXBfcG9vbF9lbXB0eSYjMzQ7LAogICAgJiMzNDtfX3pzd2FwX3Bvb2xfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDt6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldCYjMzQ7LAogICAgJiMzNDt6c3dhcF90b3RhbF9wYWdlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGluIG1tL3pzd2FwLmMsIHJlZmFjdG9yaW5nIHBvb2wgYW5kIGVudHJ5IHRyYWNraW5nIGZyb20gYSBsaW5rZWQgbGlzdCBhbmQgcmF3IHBvb2wgcG9pbnRlciB0byBhbiBJRC1iYXNlZCBYQXJyYXkgd2l0aCA4LWJpdCBwb29sIGluZGljZXMgaW4gc3RydWN0IHpzd2FwX2VudHJ5LiBJdCBhbHNvIHVwZGF0ZXMgc3luY2hyb25pemF0aW9uIHNlbWFudGljcyB1c2luZyBSQ1UgYW5kIHJjdV93b3JrIChxdWV1ZV9yY3Vfd29yaykgYWxvbmcgd2l0aCBzb2Z0aXJxLXNhZmUgWEFycmF5IG9wZXJhdGlvbnMgKHhhX2FsbG9jX2JoLCB4YV9lcmFzZV9iaCkuIFRoZXNlIGNvbmN1cnJlbmN5IGFuZCBkYXRhIHN0cnVjdHVyZSBtb2RpZmljYXRpb25zIGluIHJlYWNoYWJsZSBNTSBjb2RlIHdhcnJhbnQgZnV6emluZyB0byBkZXRlY3QgcG9zc2libGUgcmFjZXMsIHN0YWxlIElEIGRlcmVmZXJlbmNlcywgb3IgYXNzZXJ0aW9uIHRyaXBzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmZjODJiYmQwZjQ1NjUwYjM2N2ZmM2JhMGZkMGQ5NmJiZTlhMjQxNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMjA6MTg6MjcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuYwppbmRleCBmM2FlM2M4MWU0OGVhLi4yNTNlZWJiOTcxYjk3IDEwMDY0NAotLS0gYS9tbS96c3dhcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3pzd2FwLmMKQEAgLTM0LDYgJiM0MzszNCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvd3JpdGViYWNrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGFnZW1hcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3dvcmtxdWV1ZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC94YXJyYXkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9saXN0X2xydS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3pzbWFsbG9jLmgmZ3Q7CiAKQEAgLTE1NCwxMiAmIzQzOzE1NSwyMyBAQCBzdHJ1Y3QgenN3YXBfcG9vbCB7CiAJc3RydWN0IHpzX3Bvb2wgKnpzX3Bvb2w7CiAJc3RydWN0IGNyeXB0b19hY29tcF9jdHggX19wZXJjcHUgKmFjb21wX2N0eDsKIAlzdHJ1Y3QgcGVyY3B1X3JlZiByZWY7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXN0cnVjdCB3b3JrX3N0cnVjdCByZWxlYXNlX3dvcms7CiYjNDM7CXN0cnVjdCByY3Vfd29yayByZWxlYXNlX3J3b3JrOwogCXN0cnVjdCBobGlzdF9ub2RlIG5vZGU7CiYjNDM7CXU4IGlkeDsKIAljaGFyIHRmbV9uYW1lW0NSWVBUT19NQVhfQUxHX05BTUVdOwogfTsKIAomIzQzOy8qCiYjNDM7ICogTGl2ZSBwb29scyBrZXllZCBieSBpZCAoMS4uWlNXQVBfTUFYX1BPT0xfSUQpLiAgWEFfRkxBR1NfQUxMT0MxIGtlZXBzIGlkIDAKJiM0MzsgKiByZXNlcnZlZCBzbyBpdCBpcyBuZXZlciBoYW5kZWQgdG8gYSBsaXZlIHBvb2wuICBYQV9GTEFHU19MT0NLX0JIIG1ha2VzIHRoZQomIzQzOyAqIHhhX2xvY2sgc29mdGlycS1zYWZlOiBpdCBpcyB0YWtlbiBmcm9tIF9fenN3YXBfcG9vbF9lbXB0eSgpLCB3aGljaCBydW5zIGZyb20KJiM0MzsgKiBhIHBlcmNwdV9yZWYgcmVsZWFzZSBjYWxsYmFjayBpbiBzb2Z0aXJxIGNvbnRleHQuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBaU1dBUF9GSVJTVF9QT09MX0lEIDEKJiM0MzsjZGVmaW5lIFpTV0FQX01BWF9QT09MX0lEIFU4X01BWAomIzQzO3N0YXRpYyBERUZJTkVfWEFSUkFZX0ZMQUdTKHpzd2FwX3Bvb2xzLCBYQV9GTEFHU19BTExPQzEgfCBYQV9GTEFHU19MT0NLX0JIKTsKJiM0MztzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgX19yY3UgKnpzd2FwX2N1cnJlbnRfcG9vbDsKJiM0MzsKIC8qIEdsb2JhbCBMUlUgbGlzdHMgc2hhcmVkIGJ5IGFsbCB6c3dhcCBwb29scy4gKi8KIHN0YXRpYyBzdHJ1Y3QgbGlzdF9scnUgenN3YXBfbGlzdF9scnU7CiAKQEAgLTE4Miw3ICYjNDM7MTk0LDcgQEAgc3RhdGljIHN0cnVjdCBzaHJpbmtlciAqenN3YXBfc2hyaW5rZXI7CiAgKiAgICAgICAgICAgICAgd3JpdGViYWNrIGxvZ2ljLiBUaGUgZW50cnkgaXMgb25seSByZWNsYWltZWQgYnkgdGhlIHdyaXRlYmFjawogICogICAgICAgICAgICAgIGxvZ2ljIGlmIHJlZmVyZW5jZWQgaXMgdW5zZXQuIFNlZSBjb21tZW50cyBpbiB0aGUgc2hyaW5rZXIKICAqICAgICAgICAgICAgICBzZWN0aW9uIGZvciBjb250ZXh0LgotICogcG9vbCAtIHRoZSB6c3dhcF9wb29sIHRoZSBlbnRyeSYjMzk7cyBkYXRhIGlzIGluCiYjNDM7ICogcG9vbF9pZHggLSBpZCBvZiB0aGUgenN3YXBfcG9vbCB0aGF0IHRoZSBlbnRyeSYjMzk7cyBkYXRhIGlzIGluLgogICogaGFuZGxlIC0genNtYWxsb2MgYWxsb2NhdGlvbiBoYW5kbGUgdGhhdCBzdG9yZXMgdGhlIGNvbXByZXNzZWQgcGFnZSBkYXRhCiAgKiBvYmpjZyAtIHRoZSBvYmpfY2dyb3VwIHRoYXQgdGhlIGNvbXByZXNzZWQgbWVtb3J5IGlzIGNoYXJnZWQgdG8KICAqIGxydSAtIGhhbmRsZSB0byB0aGUgcG9vbCYjMzk7cyBscnUgdXNlZCB0byBldmljdCBwYWdlcy4KQEAgLTE5MSwxOSAmIzQzOzIwMywyNSBAQCBzdHJ1Y3QgenN3YXBfZW50cnkgewogCXN3cF9lbnRyeV90IHN3cGVudHJ5OwogCXVuc2lnbmVkIGludCBsZW5ndGg7CiAJYm9vbCByZWZlcmVuY2VkOwotCXN0cnVjdCB6c3dhcF9wb29sICpwb29sOwomIzQzOwl1OCBwb29sX2lkeDsKIAl1bnNpZ25lZCBsb25nIGhhbmRsZTsKIAlzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7CiAJc3RydWN0IGxpc3RfaGVhZCBscnU7CiB9OwogCiYjNDM7LyoKJiM0MzsgKiBObyBSQ1Ugc2VjdGlvbiBpcyBuZWVkZWQgYXJvdW5kIHRoZSByZXR1cm5lZCBwb2ludGVyOiBhIHN0b3JlZCBlbnRyeSBwaW5zCiYjNDM7ICogaXRzIHBvb2wgdmlhIHBlcmNwdV9yZWYgKHRha2VuIGluIHpzd2FwX3N0b3JlX3BhZ2UoKSksIHNvIHRoZSBpZCBjYW5ub3QgYmUKJiM0MzsgKiByZXVzZWQgdW5kZXIgdXMuICBDYWxsZXJzIFdBUk4gYW5kIGhhbmRsZSBhIE5VTEwgZnJvbSBhIGNvcnJ1cHQgcG9vbF9pZHguCiYjNDM7ICovCiYjNDM7c3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9lbnRyeV9wb29sKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpCiYjNDM7ewomIzQzOwlyZXR1cm4geGFfbG9hZCgmYW1wO3pzd2FwX3Bvb2xzLCBlbnRyeS0mZ3Q7cG9vbF9pZHgpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgeGFycmF5ICp6c3dhcF90cmVlc1tNQVhfU1dBUEZJTEVTXTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbnJfenN3YXBfdHJlZXNbTUFYX1NXQVBGSUxFU107CiAKLS8qIFJDVS1wcm90ZWN0ZWQgaXRlcmF0aW9uICovCi1zdGF0aWMgTElTVF9IRUFEKHpzd2FwX3Bvb2xzKTsKLS8qIHByb3RlY3RzIHpzd2FwX3Bvb2xzIGxpc3QgbW9kaWZpY2F0aW9uICovCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHpzd2FwX3Bvb2xzX2xvY2spOwogLyogcG9vbCBjb3VudGVyIHRvIHByb3ZpZGUgdW5pcXVlIG5hbWVzIHRvIHpzbWFsbG9jICovCiBzdGF0aWMgYXRvbWljX3QgenN3YXBfcG9vbHNfY291bnQgPSBBVE9NSUNfSU5JVCgwKTsKIApAQCAtMjc1LDYgJiM0MzsyOTMsNyBAQCBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3JlYXRlKGNoYXIgKmNvbXByZXNzb3IpCiAJc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7CiAJY2hhciBuYW1lWzM4XTsgLyogJiMzOTt6c3dhcCYjMzk7ICYjNDM7IDMyIGNoYXIgKG1heCkgbnVtICYjNDM7IFwwICovCiAJaW50IHJldCwgY3B1OwomIzQzOwl1MzIgaWQ7CiAKIAlpZiAoIXpzd2FwX2hhc19wb29sICZhbXA7JmFtcDsgIXN0cmNtcChjb21wcmVzc29yLCBaU1dBUF9QQVJBTV9VTlNFVCkpCiAJCXJldHVybiBOVUxMOwpAQCAtMzIwLDEyICYjNDM7MzM5LDI5IEBAIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jcmVhdGUoY2hhciAqY29tcHJlc3NvcikKIAkJCSAgICAgIFBFUkNQVV9SRUZfQUxMT1dfUkVJTklULCBHRlBfS0VSTkVMKTsKIAlpZiAocmV0KQogCQlnb3RvIHJlZl9mYWlsOwotCUlOSVRfTElTVF9IRUFEKCZhbXA7cG9vbC0mZ3Q7bGlzdCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFB1Ymxpc2ggb25seSBhZnRlciB0aGUgcG9vbCBpcyBmdWxseSBidWlsdCwgc28gbG9ja2xlc3Mgd2Fsa2VycwomIzQzOwkgKiBuZXZlciBzZWUgYSBoYWxmLWluaXRpYWxpemVkIHBvb2wuICBUaGUgX2JoIHZhcmlhbnQgcGFpcnMgd2l0aCB0aGUKJiM0MzsJICogc29mdGlycS1jb250ZXh0IHhhX2xvY2sgdGFrZW4gaW4gX196c3dhcF9wb29sX2VtcHR5KCkuCiYjNDM7CSAqLwomIzQzOwlyZXQgPSB4YV9hbGxvY19iaCgmYW1wO3pzd2FwX3Bvb2xzLCAmYW1wO2lkLCBwb29sLAomIzQzOwkJCSAgWEFfTElNSVQoWlNXQVBfRklSU1RfUE9PTF9JRCwgWlNXQVBfTUFYX1BPT0xfSUQpLAomIzQzOwkJCSAgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWlmIChyZXQgPT0gLUVCVVNZKQomIzQzOwkJCXByX2VycigmIzM0O2Nhbm5vdCBhbGxvY2F0ZSBwb29sIGlkIChtYXggJWQgbGl2ZSBwb29scylcbiYjMzQ7LAomIzQzOwkJCSAgICAgICBaU1dBUF9NQVhfUE9PTF9JRCAtIFpTV0FQX0ZJUlNUX1BPT0xfSUQgJiM0MzsgMSk7CiYjNDM7CQlnb3RvIHhhX2ZhaWw7CiYjNDM7CX0KJiM0MzsJcG9vbC0mZ3Q7aWR4ID0gaWQ7CiAKIAl6c3dhcF9wb29sX2RlYnVnKCYjMzQ7Y3JlYXRlZCYjMzQ7LCBwb29sKTsKIAogCXJldHVybiBwb29sOwogCiYjNDM7eGFfZmFpbDoKJiM0MzsJcGVyY3B1X3JlZl9leGl0KCZhbXA7cG9vbC0mZ3Q7cmVmKTsKIHJlZl9mYWlsOgogCWNwdWhwX3N0YXRlX3JlbW92ZV9pbnN0YW5jZShDUFVIUF9NTV9aU1dQX1BPT0xfUFJFUEFSRSwgJmFtcDtwb29sLSZndDtub2RlKTsKIApAQCAtMzc5LDM3ICYjNDM7NDE1LDI5IEBAIHN0YXRpYyB2b2lkIHpzd2FwX3Bvb2xfZGVzdHJveShzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCkKIAogc3RhdGljIHZvaWQgX196c3dhcF9wb29sX3JlbGVhc2Uoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCB6c3dhcF9wb29sICpwb29sID0gY29udGFpbmVyX29mKHdvcmssIHR5cGVvZigqcG9vbCksCi0JCQkJCQlyZWxlYXNlX3dvcmspOwotCi0Jc3luY2hyb25pemVfcmN1KCk7CiYjNDM7CXN0cnVjdCB6c3dhcF9wb29sICpwb29sID0gY29udGFpbmVyX29mKHRvX3JjdV93b3JrKHdvcmspLAomIzQzOwkJCQkJICAgICAgIHR5cGVvZigqcG9vbCksIHJlbGVhc2VfcndvcmspOwogCiAJLyogbm9ib2R5IHNob3VsZCBoYXZlIGJlZW4gYWJsZSB0byBnZXQgYSByZWYuLi4gKi8KIAlXQVJOX09OKCFwZXJjcHVfcmVmX2lzX3plcm8oJmFtcDtwb29sLSZndDtyZWYpKTsKIAlwZXJjcHVfcmVmX2V4aXQoJmFtcDtwb29sLSZndDtyZWYpOwogCi0JLyogcG9vbCBpcyBub3cgb2ZmIHpzd2FwX3Bvb2xzIGxpc3QgYW5kIGhhcyBubyByZWZlcmVuY2VzLiAqLwomIzQzOwkvKiBUaGUgcG9vbCBpcyBubyBsb25nZXIgaW4genN3YXBfcG9vbHMgYW5kIGhhcyBubyByZWZlcmVuY2VzLiAqLwogCXpzd2FwX3Bvb2xfZGVzdHJveShwb29sKTsKIH0KIAotc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2N1cnJlbnQodm9pZCk7Ci0KIHN0YXRpYyB2b2lkIF9fenN3YXBfcG9vbF9lbXB0eShzdHJ1Y3QgcGVyY3B1X3JlZiAqcmVmKQogewogCXN0cnVjdCB6c3dhcF9wb29sICpwb29sOwogCiAJcG9vbCA9IGNvbnRhaW5lcl9vZihyZWYsIHR5cGVvZigqcG9vbCksIHJlZik7CiAKLQlzcGluX2xvY2tfYmgoJmFtcDt6c3dhcF9wb29sc19sb2NrKTsKLQotCVdBUk5fT04ocG9vbCA9PSB6c3dhcF9wb29sX2N1cnJlbnQoKSk7CiYjNDM7CVdBUk5fT04ocG9vbCA9PSByY3VfYWNjZXNzX3BvaW50ZXIoenN3YXBfY3VycmVudF9wb29sKSk7CiAKLQlsaXN0X2RlbF9yY3UoJmFtcDtwb29sLSZndDtsaXN0KTsKJiM0MzsJeGFfZXJhc2VfYmgoJmFtcDt6c3dhcF9wb29scywgcG9vbC0mZ3Q7aWR4KTsKIAotCUlOSVRfV09SSygmYW1wO3Bvb2wtJmd0O3JlbGVhc2Vfd29yaywgX196c3dhcF9wb29sX3JlbGVhc2UpOwotCXNjaGVkdWxlX3dvcmsoJmFtcDtwb29sLSZndDtyZWxlYXNlX3dvcmspOwotCi0Jc3Bpbl91bmxvY2tfYmgoJmFtcDt6c3dhcF9wb29sc19sb2NrKTsKJiM0MzsJSU5JVF9SQ1VfV09SSygmYW1wO3Bvb2wtJmd0O3JlbGVhc2VfcndvcmssIF9fenN3YXBfcG9vbF9yZWxlYXNlKTsKJiM0MzsJcXVldWVfcmN1X3dvcmsoc3lzdGVtX3BlcmNwdV93cSwgJmFtcDtwb29sLSZndDtyZWxlYXNlX3J3b3JrKTsKIH0KIAogc3RhdGljIGludCBfX211c3RfY2hlY2sgenN3YXBfcG9vbF90cnlnZXQoc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wpCkBAIC00MzUsMjAgJiM0Mzs0NjMsMTMgQEAgc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICpfX3pzd2FwX3Bvb2xfY3VycmVudCh2b2lkKQogewogCXN0cnVjdCB6c3dhcF9wb29sICpwb29sOwogCi0JcG9vbCA9IGxpc3RfZmlyc3Rfb3JfbnVsbF9yY3UoJmFtcDt6c3dhcF9wb29scywgdHlwZW9mKCpwb29sKSwgbGlzdCk7CiYjNDM7CXBvb2wgPSByY3VfZGVyZWZlcmVuY2UoenN3YXBfY3VycmVudF9wb29sKTsKIAlXQVJOX09OQ0UoIXBvb2wgJmFtcDsmYW1wOyB6c3dhcF9oYXNfcG9vbCwKIAkJICAmIzM0OyVzOiBubyBwYWdlIHN0b3JhZ2UgcG9vbCFcbiYjMzQ7LCBfX2Z1bmNfXyk7CiAKIAlyZXR1cm4gcG9vbDsKIH0KIAotc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2N1cnJlbnQodm9pZCkKLXsKLQlhc3NlcnRfc3Bpbl9sb2NrZWQoJmFtcDt6c3dhcF9wb29sc19sb2NrKTsKLQotCXJldHVybiBfX3pzd2FwX3Bvb2xfY3VycmVudCgpOwotfQotCiBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3VycmVudF9nZXQodm9pZCkKIHsKIAlzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDsKQEAgLTQ2NCwyMyAmIzQzOzQ4NSwyOCBAQCBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3VycmVudF9nZXQodm9pZCkKIAlyZXR1cm4gcG9vbDsKIH0KIAotLyogdHlwZSBhbmQgY29tcHJlc3NvciBtdXN0IGJlIG51bGwtdGVybWluYXRlZCAqLwomIzQzOy8qIGNvbXByZXNzb3IgbXVzdCBiZSBudWxsLXRlcm1pbmF0ZWQgKi8KIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9maW5kX2dldChjaGFyICpjb21wcmVzc29yKQogewogCXN0cnVjdCB6c3dhcF9wb29sICpwb29sOwomIzQzOwl1bnNpZ25lZCBsb25nIGlkOwogCi0JYXNzZXJ0X3NwaW5fbG9ja2VkKCZhbXA7enN3YXBfcG9vbHNfbG9jayk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb29sLCAmYW1wO3pzd2FwX3Bvb2xzLCBsaXN0KSB7CiYjNDM7CS8qCiYjNDM7CSAqIF9fenN3YXBfcG9vbF9lbXB0eSgpIGNhbiBlcmFzZSBmcm9tIHpzd2FwX3Bvb2xzIGluIHNvZnRpcnEgd2hpbGUgd2UKJiM0MzsJICogd2Fsay4gIHJjdV9yZWFkX2xvY2soKSBrZWVwcyB0aGUgd2FsayBjb25zaXN0ZW50IGFuZCBlYWNoIHBvb2wgYWxpdmUKJiM0MzsJICogYWNyb3NzIHRyeWdldCgpLiAgeGFfZm9yX2VhY2goKSYjMzk7cyBvd24gUkNVIGRvZXMgbm90IHNwYW4gdGhlIGxvb3AgYm9keS4KJiM0MzsJICovCiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJeGFfZm9yX2VhY2goJmFtcDt6c3dhcF9wb29scywgaWQsIHBvb2wpIHsKIAkJaWYgKHN0cmNtcChwb29sLSZndDt0Zm1fbmFtZSwgY29tcHJlc3NvcikpCiAJCQljb250aW51ZTsKIAkJLyogaWYgd2UgY2FuJiMzOTt0IGdldCBpdCwgaXQmIzM5O3MgYWJvdXQgdG8gYmUgZGVzdHJveWVkICovCi0JCWlmICghenN3YXBfcG9vbF90cnlnZXQocG9vbCkpCi0JCQljb250aW51ZTsKLQkJcmV0dXJuIHBvb2w7CiYjNDM7CQlpZiAoenN3YXBfcG9vbF90cnlnZXQocG9vbCkpCiYjNDM7CQkJYnJlYWs7CiAJfQomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKIAotCXJldHVybiBOVUxMOwomIzQzOwlyZXR1cm4gcG9vbDsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgenN3YXBfbWF4X3BhZ2VzKHZvaWQpCkBAIC00OTcsOSAmIzQzOzUyMywxNCBAQCB1bnNpZ25lZCBsb25nIHpzd2FwX3RvdGFsX3BhZ2VzKHZvaWQpCiB7CiAJc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7CiAJdW5zaWduZWQgbG9uZyB0b3RhbCA9IDA7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaWQ7CiAKJiM0MzsJLyoKJiM0MzsJICogcmN1X3JlYWRfbG9jaygpIGtlZXBzIGVhY2ggcG9vbCBhbGl2ZSBhY3Jvc3MgenNfZ2V0X3RvdGFsX3BhZ2VzKCkuCiYjNDM7CSAqIHhhX2Zvcl9lYWNoKCkmIzM5O3Mgb3duIFJDVSBkb2VzIG5vdCBzcGFuIHRoZSBsb29wIGJvZHkuCiYjNDM7CSAqLwogCXJjdV9yZWFkX2xvY2soKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb29sLCAmYW1wO3pzd2FwX3Bvb2xzLCBsaXN0KQomIzQzOwl4YV9mb3JfZWFjaCgmYW1wO3pzd2FwX3Bvb2xzLCBpZCwgcG9vbCkKIAkJdG90YWwgJiM0Mzs9IHpzX2dldF90b3RhbF9wYWdlcyhwb29sLSZndDt6c19wb29sKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIApAQCAtNTU2LDIwICYjNDM7NTg3LDEzIEBAIHN0YXRpYyBpbnQgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtCiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCXNwaW5fbG9ja19iaCgmYW1wO3pzd2FwX3Bvb2xzX2xvY2spOwotCiAJcG9vbCA9IHpzd2FwX3Bvb2xfZmluZF9nZXQocyk7Ci0JaWYgKHBvb2wpIHsKJiM0MzsJaWYgKCFwb29sKSB7CiYjNDM7CQlwb29sID0genN3YXBfcG9vbF9jcmVhdGUocyk7CiYjNDM7CX0gZWxzZSB7CiAJCXpzd2FwX3Bvb2xfZGVidWcoJiMzNDt1c2luZyBleGlzdGluZyYjMzQ7LCBwb29sKTsKLQkJV0FSTl9PTihwb29sID09IHpzd2FwX3Bvb2xfY3VycmVudCgpKTsKLQkJbGlzdF9kZWxfcmN1KCZhbXA7cG9vbC0mZ3Q7bGlzdCk7Ci0JfQomIzQzOwkJV0FSTl9PTihwb29sID09IHJjdV9hY2Nlc3NfcG9pbnRlcih6c3dhcF9jdXJyZW50X3Bvb2wpKTsKIAotCXNwaW5fdW5sb2NrX2JoKCZhbXA7enN3YXBfcG9vbHNfbG9jayk7Ci0KLQlpZiAoIXBvb2wpCi0JCXBvb2wgPSB6c3dhcF9wb29sX2NyZWF0ZShzKTsKLQllbHNlIHsKIAkJLyoKIAkJICogUmVzdG9yZSB0aGUgaW5pdGlhbCByZWYgZHJvcHBlZCBieSBwZXJjcHVfcmVmX2tpbGwoKQogCQkgKiB3aGVuIHRoZSBwb29sIHdhcyBkZWNvbW1pc3Npb25lZCBhbmQgc3dpdGNoIGl0IGFnYWluCkBAIC01ODYsMjQgJiM0Mzs2MTAsMTggQEAgc3RhdGljIGludCB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldChjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0KIAllbHNlCiAJCXJldCA9IC1FSU5WQUw7CiAKLQlzcGluX2xvY2tfYmgoJmFtcDt6c3dhcF9wb29sc19sb2NrKTsKLQomIzQzOwkvKgomIzQzOwkgKiBDb21wcmVzc29yIHN3aXRjaGVzIGFyZSBzZXJpYWxpemVkIGJ5IHRoZSBrZXJuZWwgcGFyYW0gbG9jaywgc28gdGhpcwomIzQzOwkgKiBpcyB0aGUgb25seSB3cml0ZXIgb2YgenN3YXBfY3VycmVudF9wb29sOiBubyB4YV9sb2NrIG5lZWRlZC4KJiM0MzsJICovCiAJaWYgKCFyZXQpIHsKLQkJcHV0X3Bvb2wgPSB6c3dhcF9wb29sX2N1cnJlbnQoKTsKLQkJbGlzdF9hZGRfcmN1KCZhbXA7cG9vbC0mZ3Q7bGlzdCwgJmFtcDt6c3dhcF9wb29scyk7CiYjNDM7CQlwdXRfcG9vbCA9IHJjdV9hY2Nlc3NfcG9pbnRlcih6c3dhcF9jdXJyZW50X3Bvb2wpOwomIzQzOwkJcmN1X2Fzc2lnbl9wb2ludGVyKHpzd2FwX2N1cnJlbnRfcG9vbCwgcG9vbCk7CiAJCXpzd2FwX2hhc19wb29sID0gdHJ1ZTsKIAl9IGVsc2UgaWYgKHBvb2wpIHsKLQkJLyoKLQkJICogQWRkIHRoZSBwb3NzaWJseSBwcmUtZXhpc3RpbmcgcG9vbCB0byB0aGUgZW5kIG9mIHRoZSBwb29scwotCQkgKiBsaXN0OyBpZiBpdCYjMzk7cyBuZXcgKGFuZCBlbXB0eSkgdGhlbiBpdCYjMzk7bGwgYmUgcmVtb3ZlZCBhbmQKLQkJICogZGVzdHJveWVkIGJ5IHRoZSBwdXQgYWZ0ZXIgd2UgZHJvcCB0aGUgbG9jawotCQkgKi8KLQkJbGlzdF9hZGRfdGFpbF9yY3UoJmFtcDtwb29sLSZndDtsaXN0LCAmYW1wO3pzd2FwX3Bvb2xzKTsKIAkJcHV0X3Bvb2wgPSBwb29sOwogCX0KIAotCXNwaW5fdW5sb2NrX2JoKCZhbXA7enN3YXBfcG9vbHNfbG9jayk7Ci0KIAkvKgogCSAqIERyb3AgdGhlIHJlZiBmcm9tIGVpdGhlciB0aGUgb2xkIGN1cnJlbnQgcG9vbCwKIAkgKiBvciB0aGUgbmV3IHBvb2wgd2UgZmFpbGVkIHRvIGFkZApAQCAtNzUxLDkgJiM0Mzs3NjksMTMgQEAgc3RhdGljIHZvaWQgenN3YXBfZW50cnlfY2FjaGVfZnJlZShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KQogICovCiBzdGF0aWMgdm9pZCB6c3dhcF9lbnRyeV9mcmVlKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpCiB7CiYjNDM7CXN0cnVjdCB6c3dhcF9wb29sICpwb29sID0genN3YXBfZW50cnlfcG9vbChlbnRyeSk7CiYjNDM7CiAJenN3YXBfbHJ1X2RlbChlbnRyeSk7Ci0JenNfZnJlZShlbnRyeS0mZ3Q7cG9vbC0mZ3Q7enNfcG9vbCwgZW50cnktJmd0O2hhbmRsZSk7Ci0JenN3YXBfcG9vbF9wdXQoZW50cnktJmd0O3Bvb2wpOwomIzQzOwlpZiAoIVdBUk5fT05fT05DRSghcG9vbCkpIHsKJiM0MzsJCXpzX2ZyZWUocG9vbC0mZ3Q7enNfcG9vbCwgZW50cnktJmd0O2hhbmRsZSk7CiYjNDM7CQl6c3dhcF9wb29sX3B1dChwb29sKTsKJiM0MzsJfQogCWlmIChlbnRyeS0mZ3Q7b2JqY2cpIHsKIAkJb2JqX2Nncm91cF91bmNoYXJnZV96c3dhcChlbnRyeS0mZ3Q7b2JqY2csIGVudHJ5LSZndDtsZW5ndGgpOwogCQlvYmpfY2dyb3VwX3B1dChlbnRyeS0mZ3Q7b2JqY2cpOwpAQCAtOTEwLDEyICYjNDM7OTMyLDE1IEBAIHN0YXRpYyBib29sIHpzd2FwX2NvbXByZXNzKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LAogCiBzdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7Ci0Jc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSBlbnRyeS0mZ3Q7cG9vbDsKJiM0MzsJc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSB6c3dhcF9lbnRyeV9wb29sKGVudHJ5KTsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgaW5wdXRbMl07IC8qIHpzbWFsbG9jIHJldHVybnMgYW4gU0cgbGlzdCAxLTIgZW50cmllcyAqLwogCXN0cnVjdCBzY2F0dGVybGlzdCBvdXRwdXQ7CiAJc3RydWN0IGNyeXB0b19hY29tcF9jdHggKmFjb21wX2N0eDsKIAlpbnQgcmV0ID0gMCwgZGxlbjsKIAomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCFwb29sKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKIAlhY29tcF9jdHggPSByYXdfY3B1X3B0cihwb29sLSZndDthY29tcF9jdHgpOwogCW11dGV4X2xvY2soJmFtcDthY29tcF9jdHgtJmd0O211dGV4KTsKIAl6c19vYmpfcmVhZF9zZ19iZWdpbihwb29sLSZndDt6c19wb29sLCBlbnRyeS0mZ3Q7aGFuZGxlLCBpbnB1dCwgZW50cnktJmd0O2xlbmd0aCk7CkBAIC05NTEsNyAmIzQzOzk3Niw3IEBAIHN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbykKIAlwcl9hbGVydF9yYXRlbGltaXRlZCgmIzM0O0RlY29tcHJlc3Npb24gZXJyb3IgZnJvbSB6c3dhcCAoJWQ6JWx1ICVzICV1LSZndDslZClcbiYjMzQ7LAogCQkJCQkJc3dwX3R5cGUoZW50cnktJmd0O3N3cGVudHJ5KSwKIAkJCQkJCXN3cF9vZmZzZXQoZW50cnktJmd0O3N3cGVudHJ5KSwKLQkJCQkJCWVudHJ5LSZndDtwb29sLSZndDt0Zm1fbmFtZSwKJiM0MzsJCQkJCQlwb29sLSZndDt0Zm1fbmFtZSwKIAkJCQkJCWVudHJ5LSZndDtsZW5ndGgsIGRsZW4pOwogCXJldHVybiBmYWxzZTsKIH0KQEAgLTE0MDksNiAmIzQzOzE0MzQsMTMgQEAgc3RhdGljIGJvb2wgenN3YXBfc3RvcmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwKIAlpZiAoIXpzd2FwX2NvbXByZXNzKHBhZ2UsIGVudHJ5LCBwb29sKSkKIAkJZ290byBjb21wcmVzc19mYWlsZWQ7CiAKJiM0MzsJLyoKJiM0MzsJICogU2V0IHBvb2xfaWR4IGJlZm9yZSB0aGUgeGFfc3RvcmUoKSBiZWxvdyBwdWJsaXNoZXMgdGhlIGVudHJ5LCBvciBhCiYjNDM7CSAqIGNvbmN1cnJlbnQgcmVhZGVyIGNvdWxkIHJlc29sdmUgYSBzdGFsZSBwb29sX2lkeCBsZWZ0IGJ5IHNsYWIgcmV1c2UKJiM0MzsJICogdG8gYW4gdW5yZWxhdGVkIGxpdmUgcG9vbC4KJiM0MzsJICovCiYjNDM7CWVudHJ5LSZndDtwb29sX2lkeCA9IHBvb2wtJmd0O2lkeDsKJiM0MzsKIAlvbGQgPSB4YV9zdG9yZShzd2FwX3pzd2FwX3RyZWUocGFnZV9zd3BlbnRyeSksCiAJCSAgICAgICBzd3Bfb2Zmc2V0KHBhZ2Vfc3dwZW50cnkpLAogCQkgICAgICAgZW50cnksIEdGUF9LRVJORUwpOwpAQCAtMTQ1NCw3ICYjNDM7MTQ4Niw2IEBAIHN0YXRpYyBib29sIHpzd2FwX3N0b3JlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsCiAJICogICAgVGhlIHB1Ymxpc2hpbmcgb3JkZXIgbWF0dGVycyB0byBwcmV2ZW50IHdyaXRlYmFjayBmcm9tIHNlZWluZwogCSAqICAgIGFuIGluY29oZXJlbnQgZW50cnkuCiAJICovCi0JZW50cnktJmd0O3Bvb2wgPSBwb29sOwogCWVudHJ5LSZndDtzd3BlbnRyeSA9IHBhZ2Vfc3dwZW50cnk7CiAJZW50cnktJmd0O29iamNnID0gb2JqY2c7CiAJZW50cnktJmd0O3JlZmVyZW5jZWQgPSB0cnVlOwpAQCAtMTc5MCw3ICYjNDM7MTgyMSw3IEBAIHN0YXRpYyBpbnQgenN3YXBfc2V0dXAodm9pZCkKIAlwb29sID0gX196c3dhcF9wb29sX2NyZWF0ZV9mYWxsYmFjaygpOwogCWlmIChwb29sKSB7CiAJCXByX2luZm8oJiMzNDtsb2FkZWQgdXNpbmcgcG9vbCAlc1xuJiMzNDssIHBvb2wtJmd0O3RmbV9uYW1lKTsKLQkJbGlzdF9hZGQoJmFtcDtwb29sLSZndDtsaXN0LCAmYW1wO3pzd2FwX3Bvb2xzKTsKJiM0MzsJCXJjdV9hc3NpZ25fcG9pbnRlcih6c3dhcF9jdXJyZW50X3Bvb2wsIHBvb2wpOwogCQl6c3dhcF9oYXNfcG9vbCA9IHRydWU7CiAJCXN0YXRpY19icmFuY2hfZW5hYmxlKCZhbXA7enN3YXBfZXZlcl9lbmFibGVkKTsKIAl9IGVsc2Ugewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMDoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTk4CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWnN3YXAgUGF0Y2g6IEEgRnV6emluZyBQZXJzcGVjdGl2ZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggdGFyZ2V0aW5nIGBtbS96c3dhcC5jYCBmb3IgYW1kNjQuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgc2lnbmlmaWNhbnQuIEl0JiMzOTtzIG5vdCBqdXN0IGEgbWlub3IgdHdlYWs7IHRoaXMgaXMgYSByZWZhY3RvcmluZyBvZiB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgd2l0aGluIHRoZSB6c3dhcCBzdWJzeXN0ZW0uIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHJlcGxhY2luZyBgbGlzdF9oZWFkYCB3aXRoIGFuIGB4YXJyYXlgLCBwb2ludGVycyB3aXRoIGluZGljZXMgKGB1OCBwb29sX2lkeGApLCBhbmQgaW50cm9kdWNpbmcgbmV3IGhlbHBlciBmdW5jdGlvbnMgbGlrZSBgenN3YXBfZW50cnlfcG9vbCgpYC4gVGhpcyBpbXBsaWVzIGEgZnVuZGFtZW50YWwgc2hpZnQgaW4gaG93IHpzd2FwIHBvb2xzIGFuZCBlbnRyaWVzIGFyZSBtYW5hZ2VkLgoKVGhlIGNoYW5nZXMgdG8gdGhlIGNvbmN1cnJlbmN5IG1vZGVsIOKAkyBlbWJyYWNpbmcgUkNVIGFuZCB3b3JrcXVldWVzIHdpdGggYHJjdV93b3JrYCwgYHF1ZXVlX3JjdV93b3JrYCwgYW5kIHRoZSB4YXJyYXkgb3BlcmF0aW9ucyDigJMgYXJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy4gVGhpcyBsZXZlbCBvZiBjb25jdXJyZW5jeSBtb2RpZmljYXRpb24gaW4gbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBhbHdheXMgd2FycmFudHMgY2xvc2UgYXR0ZW50aW9uLCBhcyBpdCBpbnRyb2R1Y2VzIG5ldyBsb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb24gY2hhbGxlbmdlcy4gVGhlcmUgYXJlIHNvbWUgY2hhbmdlcyB0byBhc3NlcnRpb25zLCB3aGljaCBpcyBhbHNvIGhlbHBmdWwgaW4gdW5kZXJzdGFuZGluZyB0aGUgY29kZS4KClRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXMsIGlzIHRoaXMgd29ydGggZnV6emluZz8gQmFzZWQgb24gbXkgdHJpYWdlIHBoaWxvc29waHksIGl0JiMzOTtzIGEgY2xlYXIgeWVzLiBSZWFjaGFiaWxpdHkgaXMgc3RyYWlnaHRmb3J3YXJkOyB6c3dhcCBpcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29tcG9uZW50LCByZWFkaWx5IGFjY2Vzc2libGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHdpdGggc3dhcCBlbmFibGVkLiBUaGUgY2hhbmdlcyBhcmUgbW9yZSB0aGFuIGp1c3QgY29zbWV0aWMuIFRoaXMgcGF0Y2ggY29tcGxldGVseSByZWZhY3RvcnMgdGhlIHVuZGVybHlpbmcgbG9naWMsIGRhdGEgc3RydWN0dXJlcywgYW5kIGNvbmN1cnJlbmN5IG1lY2hhbmlzbXMuIFRoaXMgbGV2ZWwgb2YgYXJjaGl0ZWN0dXJhbCBjaGFuZ2UsIGVzcGVjaWFsbHkgYXJvdW5kIG1lbW9yeSBtYW5hZ2VtZW50LCBpcyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4KCkkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzIGZvciBgbW0venN3YXAuY2AgdXNpbmcgYGdyZXBwZXJgIG9yIGNoZWNraW5nIGBtbS9LY29uZmlnYCB0byBiZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb2YgdGhpcy4gQnV0IGluIG15IGV4cGVydCBvcGluaW9uLCB0aGlzIGxvb2tzIGxpa2UgYSBoaWdoLXByaW9yaXR5IGZ1enppbmcgdGFyZ2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIwOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaU1dBUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyPW1lbnVjb25maWcgU1dBUFxuLS1cbm1tL0tjb25maWctMjEtXG5tbS9LY29uZmlnOjIyOmNvbmZpZyBaU1dBUFxubW0vS2NvbmZpZy0yMy1cdGJvb2wgXCYjMzQ7Q29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1wmIzM0O1xuLS1cbm1tL0tjb25maWctMzQtXG5tbS9LY29uZmlnOjM1OmNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXG5tbS9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbm1tL0tjb25maWctNDQtXG5tbS9LY29uZmlnOjQ1OmNvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXG5tbS9LY29uZmlnLTQ2LVx0Ym9vbCBcJiMzNDtTaHJpbmsgdGhlIHpzd2FwIHBvb2wgb24gbWVtb3J5IHByZXNzdXJlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz01OT1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTc2LVxubW0vS2NvbmZpZzo3Nzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0RFRkxBVEVcbm1tL0tjb25maWctNzgtXHRib29sIFwmIzM0O0RlZmxhdGVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTgyLVxubW0vS2NvbmZpZzo4Mzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaT1xubW0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7TFpPXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04OC1cbm1tL0tjb25maWc6ODk6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF84NDJcbm1tL0tjb25maWctOTAtXHRib29sIFwmIzM0Ozg0MlwmIzM0O1xuLS1cbm1tL0tjb25maWctOTQtXG5tbS9LY29uZmlnOjk1OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0XG5tbS9LY29uZmlnLTk2LVx0Ym9vbCBcJiMzNDtMWjRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwMC1cbm1tL0tjb25maWc6MTAxOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0SENcbm1tL0tjb25maWctMTAyLVx0Ym9vbCBcJiMzNDtMWjRIQ1wmIzM0O1xuLS1cbm1tL0tjb25maWctMTA2LVxubW0vS2NvbmZpZzoxMDc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9aU1REXG5tbS9LY29uZmlnLTEwOC1cdGJvb2wgXCYjMzQ7enN0ZFwmIzM0O1xuLS1cbm1tL0tjb25maWc9MTEyPWVuZGNob2ljZVxubW0vS2NvbmZpZy0xMTMtXG5tbS9LY29uZmlnOjExNDpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXG5tbS9LY29uZmlnLTExNS0gICAgICAgc3RyaW5nXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjA6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODYzNAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktjb25maWcgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCBiYXNlZCBvbiB0aGlzLCB0aGUgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpcyBwcm9iYWJseSBpbiBgbW0vS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBzb21ld2hlcmUgaW4gdGhlIGxpbmVzIGJldHdlZW4gMjAgYW5kIDQwLiBUaGF0IHJhbmdlIGlzIHVzdWFsbHkgd2hlcmUgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLiBHaXZlbiB0aGUgdGFzaywgSSYjMzk7bSBiZXR0aW5nIHRoYXQgdGhlIHJlbGV2YW50IGZsYWdzIG9yIGZlYXR1cmUgZW5hYmxpbmcgbG9naWMgaXMgaW4gdGhhdCBpbW1lZGlhdGUgdmljaW5pdHkuIExldCYjMzk7cyBzZWUgaWYgdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkIGluIHRoaXMgcmFuZ2UuIEZyb20gdGhlcmUgSSBjYW4gZGV0ZXJtaW5lIHdoZXJlIEkgbmVlZCB0byBjb250aW51ZSBteSBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIwOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMTI6XHRtZW51Y29uZmlnIFNXQVBcbiAgMTM6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgcGFnaW5nIG9mIGFub255bW91cyBtZW1vcnkgKHN3YXApXCYjMzQ7XG4gIDE0Olx0XHRkZXBlbmRzIG9uIE1NVSBcdTAwMjZcdTAwMjYgQkxPQ0sgXHUwMDI2XHUwMDI2ICFBUkNIX05PX1NXQVBcbiAgMTU6XHRcdGRlZmF1bHQgeVxuICAxNjpcdFx0aGVscFxuICAxNzpcdFx0ICBUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIGNob29zZSB3aGV0aGVyIHlvdSB3YW50IHRvIGhhdmUgc3VwcG9ydFxuICAxODpcdFx0ICBmb3Igc28gY2FsbGVkIHN3YXAgZGV2aWNlcyBvciBzd2FwIGZpbGVzIGluIHlvdXIga2VybmVsIHRoYXQgYXJlXG4gIDE5Olx0XHQgIHVzZWQgdG8gcHJvdmlkZSBtb3JlIHZpcnR1YWwgbWVtb3J5IHRoYW4gdGhlIGFjdHVhbCBSQU0gcHJlc2VudFxuICAyMDpcdFx0ICBpbiB5b3VyIGNvbXB1dGVyLiAgSWYgdW5zdXJlIHNheSBZLlxuICAyMTpcdFxuICAyMjpcdGNvbmZpZyBaU1dBUFxuICAyMzpcdFx0Ym9vbCBcJiMzNDtDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXCYjMzQ7XG4gIDI0Olx0XHRkZXBlbmRzIG9uIFNXQVBcbiAgMjU6XHRcdHNlbGVjdCBDUllQVE9cbiAgMjY6XHRcdHNlbGVjdCBaU01BTExPQ1xuICAyNzpcdFx0aGVscFxuICAyODpcdFx0ICBBIGxpZ2h0d2VpZ2h0IGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMuICBJdCB0YWtlc1xuICAyOTpcdFx0ICBwYWdlcyB0aGF0IGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBzd2FwcGVkIG91dCBhbmQgYXR0ZW1wdHMgdG9cbiAgMzA6XHRcdCAgY29tcHJlc3MgdGhlbSBpbnRvIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIFJBTS1iYXNlZCBtZW1vcnkgcG9vbC5cbiAgMzE6XHRcdCAgVGhpcyBjYW4gcmVzdWx0IGluIGEgc2lnbmlmaWNhbnQgSS9PIHJlZHVjdGlvbiBvbiBzd2FwIGRldmljZSBhbmQsXG4gIDMyOlx0XHQgIGluIHRoZSBjYXNlIHdoZXJlIGRlY29tcHJlc3NpbmcgZnJvbSBSQU0gaXMgZmFzdGVyIHRoYW4gc3dhcCBkZXZpY2VcbiAgMzM6XHRcdCAgcmVhZHMsIGNhbiBhbHNvIGltcHJvdmUgd29ya2xvYWQgcGVyZm9ybWFuY2UuXG4gIDM0Olx0XG4gIDM1Olx0Y29uZmlnIFpTV0FQX0RFRkFVTFRfT05cbiAgMzY6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcJiMzNDtcbiAgMzc6XHRcdGRlcGVuZHMgb24gWlNXQVBcbiAgMzg6XHRcdGhlbHBcbiAgMzk6XHRcdCAgSWYgc2VsZWN0ZWQsIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIHdpbGwgYmUgZW5hYmxlZFxuICA0MDpcdFx0ICBhdCBib290LCBvdGhlcndpc2UgaXQgd2lsbCBiZSBkaXNhYmxlZC5cbiAgNDE6XHRcbiAgNDI6XHRcdCAgVGhlIHNlbGVjdGlvbiBtYWRlIGhlcmUgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdXNpbmcgdGhlIGtlcm5lbFxuICA0MzpcdFx0ICBjb21tYW5kIGxpbmUgJiMzOTt6c3dhcC5lbmFibGVkPSYjMzk7IG9wdGlvbi5cbiAgNDQ6XHRcbiAgNDU6XHRjb25maWcgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlxuICA0NjpcdFx0Ym9vbCBcJiMzNDtTaHJpbmsgdGhlIHpzd2FwIHBvb2wgb24gbWVtb3J5IHByZXNzdXJlXCYjMzQ7XG4gIDQ3Olx0XHRkZXBlbmRzIG9uIFpTV0FQXG4gIDQ4Olx0XHRkZWZhdWx0IG5cbiAgNDk6XHRcdGhlbHBcbiAgNTA6XHRcdCAgSWYgc2VsZWN0ZWQsIHRoZSB6c3dhcCBzaHJpbmtlciB3aWxsIGJlIGVuYWJsZWQsIGFuZCB0aGUgcGFnZXNcbiAgNTE6XHRcdCAgc3RvcmVkIGluIHRoZSB6c3dhcCBwb29sIHdpbGwgYmVjb21lIGF2YWlsYWJsZSBmb3IgcmVjbGFpbSAoaS5lXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjA6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM4NAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtlcm5lbCYjMzk7cyBac3dhcCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgenN3YXAgY29kZS4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBgQ09ORklHX1pTV0FQYCBhbmQgYENPTkZJR19TV0FQYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwmIzM5O3Mgc3dhcCBoYW5kbGluZyBpbnRlcmFjdHMgd2l0aCB0aGUgenN3YXAgZnVuY3Rpb25hbGl0eS4KCkZpcnN0LCBJJiMzOTtsbCBleGFtaW5lIHRoZSBjaGFuZ2VzIHdpdGhpbiBgbW0venN3YXAuY2AuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgdGhlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgc3ltYm9scy4gU28sIEkgc2VlIHRoaW5ncyBsaWtlIGB6c3dhcF9lbnRyeV9wb29sYCwgd2hpY2ggaXMgc3RhdGljLCBhbmQgaXRzIHJlbGF0ZWQgZnVuY3Rpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgenN3YXBfZW50cnlfcG9vbGAgaXMgaW5kZWVkIHN0YXRpYyB3aXRoaW4gYG1tL3pzd2FwLmNgLiBUaGVuLCBJJiMzOTtsbCBzY2FuIHRoZSBwb29sIGZ1bmN0aW9uczogYHpzd2FwX3Bvb2xfY3JlYXRlYCwgYF9fenN3YXBfcG9vbF9yZWxlYXNlYCwgYF9fenN3YXBfcG9vbF9lbXB0eWAsIGFuZCBgenN3YXBfcG9vbF9maW5kX2dldGAuIEkmIzM5O2xsIGFsc28gbm90ZSBgenN3YXBfdG90YWxfcGFnZXNgLCBgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXRgLCBgenN3YXBfZW50cnlfZnJlZWAsIGB6c3dhcF9kZWNvbXByZXNzYCwgYHpzd2FwX3N0b3JlX3BhZ2VgLCBgenN3YXBfc3RvcmVgLCBgenN3YXBfbG9hZGAsIGFuZCBgenN3YXBfc2V0dXBgLgoKTm93LCBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHpvb20gaW4gb24gdGhlIG5vbi11YmlxdWl0b3VzLCBzcGVjaWZpYyBmdW5jdGlvbnMgdGhhdCBhcmUgbW9kaWZpZWQgb3IgZXhlcmNpc2UgdGhpcyBsb2dpYyB3aXRoaW4gYG1tL3pzd2FwLmNgLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIGJyb2FkZXIgc3dhcCBtZWNoYW5pc20uIEkmIzM5O2xsIG5lZWQgdG8gcmVhZCBhcm91bmQgYHpzd2FwX3N0b3JlYCwgYHpzd2FwX2xvYWRgLCBldGMuLCBpbiBgbW0venN3YXAuY2AgdG8gaWRlbnRpZnkgYW55IGV4dGVybmFsL25vbi1zdGF0aWMgc3ltYm9scyBvciBrZXkgZnVuY3Rpb25zIHRoYXQgSSBzaG91bGQgcGF5IGNsb3NlIGF0dGVudGlvbiB0bywgYXMgdGhleSYjMzk7bGwgbGlrZWx5IGJlIHRoZSBob29rcyBpbnRvIHRoZSByZXN0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjA6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7enN3YXBfc3RvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS96c3dhcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3pzd2FwLmMtNDctLyogVGhlIG51bWJlciBvZiBwYWdlcyBjdXJyZW50bHkgc3RvcmVkIGluIHpzd2FwICovXG5tbS96c3dhcC5jOjQ4OmF0b21pY19sb25nX3QgenN3YXBfc3RvcmVkX3BhZ2VzID0gQVRPTUlDX0xPTkdfSU5JVCgwKTtcbm1tL3pzd2FwLmMtNDktLyogVGhlIG51bWJlciBvZiBpbmNvbXByZXNzaWJsZSBwYWdlcyBjdXJyZW50bHkgc3RvcmVkIGluIHpzd2FwICovXG5tbS96c3dhcC5jOjUwOnN0YXRpYyBhdG9taWNfbG9uZ190IHpzd2FwX3N0b3JlZF9pbmNvbXByZXNzaWJsZV9wYWdlcyA9IEFUT01JQ19MT05HX0lOSVQoMCk7XG5tbS96c3dhcC5jLTUxLVxuLS1cbm1tL3pzd2FwLmM9MjAyPXN0cnVjdCB6c3dhcF9lbnRyeSB7XG4tLVxubW0venN3YXAuYy0yMTMtICogTm8gUkNVIHNlY3Rpb24gaXMgbmVlZGVkIGFyb3VuZCB0aGUgcmV0dXJuZWQgcG9pbnRlcjogYSBzdG9yZWQgZW50cnkgcGluc1xubW0venN3YXAuYzoyMTQ6ICogaXRzIHBvb2wgdmlhIHBlcmNwdV9yZWYgKHRha2VuIGluIHpzd2FwX3N0b3JlX3BhZ2UoKSksIHNvIHRoZSBpZCBjYW5ub3QgYmVcbm1tL3pzd2FwLmMtMjE1LSAqIHJldXNlZCB1bmRlciB1cy4gIENhbGxlcnMgV0FSTiBhbmQgaGFuZGxlIGEgTlVMTCBmcm9tIGEgY29ycnVwdCBwb29sX2lkeC5cbi0tXG5tbS96c3dhcC5jPTc3MD1zdGF0aWMgdm9pZCB6c3dhcF9lbnRyeV9mcmVlKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXG4tLVxubW0venN3YXAuYy03ODMtXHRpZiAoZW50cnktXHUwMDNlbGVuZ3RoID09IFBBR0VfU0laRSlcbm1tL3pzd2FwLmM6Nzg0Olx0XHRhdG9taWNfbG9uZ19kZWMoXHUwMDI2enN3YXBfc3RvcmVkX2luY29tcHJlc3NpYmxlX3BhZ2VzKTtcbm1tL3pzd2FwLmMtNzg1LVx0enN3YXBfZW50cnlfY2FjaGVfZnJlZShlbnRyeSk7XG5tbS96c3dhcC5jOjc4NjpcdGF0b21pY19sb25nX2RlYyhcdTAwMjZ6c3dhcF9zdG9yZWRfcGFnZXMpO1xubW0venN3YXAuYy03ODctfVxuLS1cbm1tL3pzd2FwLmM9OTMzPXN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS96c3dhcC5jLTk5My0gKiB0byB0aGUgc3dhcCBkZXZpY2UuICBXZSBhcmUgYmFzaWNhbGx5IHJlc3VtaW5nIHRoZSBzYW1lIHN3YXBcbm1tL3pzd2FwLmM6OTk0OiAqIHdyaXRlYmFjayBwYXRoIHRoYXQgd2FzIGludGVyY2VwdGVkIHdpdGggdGhlIHpzd2FwX3N0b3JlKClcbm1tL3pzd2FwLmMtOTk1LSAqIGluIHRoZSBmaXJzdCBwbGFjZS4gIEFmdGVyIHRoZSBmb2xpbyBoYXMgYmVlbiBkZWNvbXByZXNzZWQgaW50b1xuLS1cbm1tL3pzd2FwLmM9MTIwND1zdGF0aWMgdW5zaWduZWQgbG9uZyB6c3dhcF9zaHJpbmtlcl9jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxuLS1cbm1tL3pzd2FwLmMtMTIzOC1cdFx0bnJfYmFja2luZyA9IHpzd2FwX3RvdGFsX3BhZ2VzKCk7XG5tbS96c3dhcC5jOjEyMzk6XHRcdG5yX3N0b3JlZCA9IGF0b21pY19sb25nX3JlYWQoXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcbm1tL3pzd2FwLmMtMTI0MC1cdH1cbi0tXG5tbS96c3dhcC5jPTEzMjk9c3RhdGljIHZvaWQgc2hyaW5rX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXG4tLVxubW0venN3YXAuYy0xNDE5LVxubW0venN3YXAuYzoxNDIwOnN0YXRpYyBib29sIHpzd2FwX3N0b3JlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsXG5tbS96c3dhcC5jLTE0MjEtXHRcdFx0ICAgICBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csXG4tLVxubW0venN3YXAuYy0xNDY1LVx0ICogbm8gZnVydGhlciBwb3NzaWJpbGl0eSBvZiBmYWlsdXJlLiBHcmFiIHJlZnMgdG8gdGhlIHBvb2wgYW5kIG9iamNnLFxubW0venN3YXAuYzoxNDY2Olx0ICogY2hhcmdlIHpzd2FwIG1lbW9yeSwgYW5kIGluY3JlbWVudCB6c3dhcF9zdG9yZWRfcGFnZXMuXG5tbS96c3dhcC5jLTE0NjctXHQgKiBUaGUgb3Bwb3NpdGUgYWN0aW9ucyB3aWxsIGJlIHBlcmZvcm1lZCBieSB6c3dhcF9lbnRyeV9mcmVlKClcbi0tXG5tbS96c3dhcC5jLTE0NzQtXHR9XG5tbS96c3dhcC5jOjE0NzU6XHRhdG9taWNfbG9uZ19pbmMoXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcbm1tL3pzd2FwLmMtMTQ3Ni1cdGlmIChlbnRyeS1cdTAwM2VsZW5ndGggPT0gUEFHRV9TSVpFKVxubW0venN3YXAuYzoxNDc3Olx0XHRhdG9taWNfbG9uZ19pbmMoXHUwMDI2enN3YXBfc3RvcmVkX2luY29tcHJlc3NpYmxlX3BhZ2VzKTtcbm1tL3pzd2FwLmMtMTQ3OC1cbi0tXG5tbS96c3dhcC5jLTE1MDUtXG5tbS96c3dhcC5jOjE1MDY6Ym9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0venN3YXAuYy0xNTA3LXtcbi0tXG5tbS96c3dhcC5jLTE1NTAtXG5tbS96c3dhcC5jOjE1NTE6XHRcdGlmICghenN3YXBfc3RvcmVfcGFnZShwYWdlLCBvYmpjZywgcG9vbCkpXG5tbS96c3dhcC5jLTE1NTItXHRcdFx0Z290byBwdXRfcG9vbDtcbi0tXG5tbS96c3dhcC5jPTE3MzE9c3RhdGljIGludCBkZWJ1Z2ZzX2dldF9zdG9yZWRfcGFnZXModm9pZCAqZGF0YSwgdTY0ICp2YWwpXG5tbS96c3dhcC5jLTE3MzIte1xubW0venN3YXAuYzoxNzMzOlx0KnZhbCA9IGF0b21pY19sb25nX3JlYWQoXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcbm1tL3pzd2FwLmMtMTczNC1cdHJldHVybiAwO1xuLS1cbm1tL3pzd2FwLmM9MTczOD1zdGF0aWMgaW50IGRlYnVnZnNfZ2V0X3N0b3JlZF9pbmNvbXByZXNzaWJsZV9wYWdlcyh2b2lkICpkYXRhLCB1NjQgKnZhbClcbm1tL3pzd2FwLmMtMTczOS17XG5tbS96c3dhcC5jOjE3NDA6XHQqdmFsID0gYXRvbWljX2xvbmdfcmVhZChcdTAwMjZ6c3dhcF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXMpO1xubW0venN3YXAuYy0xNzQxLVx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjA6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzMDUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGl2aW5nIGludG8gdGhlIFpzd2FwIEltcGxlbWVudGF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBac3dhcCBpbnRlcm5hbHMsIHNvIGZpcnN0IHRoaW5ncyBmaXJzdDogdGhlIGZ1bmN0aW9ucyBpbiBgbW0venN3YXAuY2AgYXJlIHdoYXQgSSBuZWVkIHRvIGZvY3VzIG9uLiBJIHNlZSB3ZSBoYXZlIHRoZSBjb3JlIG9wZXJhdGlvbnM6IGB6c3dhcF9zdG9yZWAsIGB6c3dhcF9sb2FkYCwgYHpzd2FwX3N0b3JlX3BhZ2VgIGZvciBkYXRhIGhhbmRsaW5nLCBgenN3YXBfZW50cnlfZnJlZWAgZm9yIGhvdXNla2VlcGluZywgYW5kIGB6c3dhcF9kZWNvbXByZXNzYCBmb3Igb2J2aW91cyByZWFzb25zLiBUaGVuIHRoZXJlJiMzOTtzIHBvb2wgbWFuYWdlbWVudDogYHpzd2FwX3Bvb2xfY3JlYXRlYCwgYF9fenN3YXBfcG9vbF9yZWxlYXNlYCwgYF9fenN3YXBfcG9vbF9lbXB0eWAsIGB6c3dhcF9wb29sX2ZpbmRfZ2V0YC4gQW5kIG9mIGNvdXJzZSwgd2UgY2FuJiMzOTt0IGZvcmdldCB0aGUgY29tcHJlc3NvciBhbmQgdG90YWwgcGFnZXMgZnVuY3Rpb25hbGl0eSB3aXRoICBgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXRgLCBhbmQgYHpzd2FwX3RvdGFsX3BhZ2VzYCByZXNwZWN0aXZlbHkuCgpOb3csIHRoYXQgZ2l2ZXMgbWUgdGhlIGJhc2ljIHN0cnVjdHVyZSwgYnV0IEkgbmVlZCBhIG1vcmUgY29tcGxldGUgcGljdHVyZS4gSSBuZWVkIHRvIGJyb2FkZW4gdGhlIHNjb3BlIGEgYml0LiBXaGF0IG90aGVyIGZpbGVzLCBjb25maWcgb3B0aW9ucywgb3IgYW55IG90aGVyIGVsZW1lbnRzIGFyZSBpbnZvbHZlZD8gV2hhdCBvdGhlciBkZXBlbmRlbmNpZXMgYXJlIGludm9sdmVkPyBJJiMzOTttIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBrZXkgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IGB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldGAsIGB6c3dhcF9sb2FkYCwgYW5kIGxpa2VseSBvdGhlcnMsIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdywgdGhlIGNvbXByZXNzb3IgaW50ZWdyYXRpb24sIGFuZCBob3cgZXZlcnl0aGluZyB0aWVzIHRvZ2V0aGVyLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiBpdHMgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIGFuZCBhcmVhcyBmb3IgcG90ZW50aWFsIG9wdGltaXphdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjA6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtib29sIHpzd2FwX2xvYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS96c3dhcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjA6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4MzgKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0YXNrLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6CgoqKkRpZ2dpbmcgaW50byB6c3dhcC5jJiMzOTtzIEZ1bmN0aW9uIEhlYWRlcnMqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZnVuY3Rpb24gbGFuZHNjYXBlIGFyb3VuZCBgenN3YXBfbG9hZGAgYW5kIGB6c3dhcF9kZWNvbXByZXNzYCB3aXRoaW4gdGhlIGBtbS96c3dhcC5jYCBmaWxlLiBNeSBnb2FsIGhlcmUgaXMgbGlrZWx5IHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGRlY29tcHJlc3Npb24gcm91dGluZXMgaW50ZXJhY3Qgd2l0aCB0aGUgcmVzdCBvZiB0aGUgenN3YXAgYXJjaGl0ZWN0dXJlLiBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgdG8gc2VlIHdoYXQgY2FsbHMgdGhlbSwgd2hhdCB0aGV5IGNhbGwsIGFuZCBtYXliZSBldmVuIHRoZSBkYXRhIHN0cnVjdHVyZXMgdGhleSBvcGVyYXRlIG9uLgoKTXkgaW5pdGlhbCBhcHByb2FjaCBpcyBzdHJhaWdodGZvcndhcmQ6IEkmIzM5O2xsIHF1aWNrbHkgc2NhbiB0aGUgY29kZSB0byBpZGVudGlmeSBldmVyeSBmdW5jdGlvbiBoZWFkZXIgaW4gdGhhdCBhcmVhIG9mIHRoZSBmaWxlLiBObyBuZWVkIHRvIGdldCBib2dnZWQgZG93biBpbiB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBqdXN0IHlldDsgSSB3YW50IHRoZSBvdmVydmlldyBmaXJzdC4gSSYjMzk7bGwgbWVudGFsbHkgbm90ZSB0aGUgcGFyYW1ldGVyIGxpc3RzIG9mIGVhY2ggZnVuY3Rpb24gdG9vLCBhcyB0aGF0IHdpbGwgZ2l2ZSBtZSBjbHVlcyBhYm91dCBkYXRhIGZsb3cuIEkmIzM5O2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGZ1bmN0aW9uIHNpZ25hdHVyZXMgdGhhdCBoaW50IGF0IG1lbW9yeSBtYW5hZ2VtZW50LCBkYXRhIHRyYW5zZmVyLCBvciBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy4gRXNzZW50aWFsbHksIEkmIzM5O20gdHJ5aW5nIHRvIG1lbnRhbGx5IG1hcCBvdXQgdGhlIGZ1bmN0aW9uIGRlcGVuZGVuY2llcyBhbmQgaG93IHRoZXkgb3JjaGVzdHJhdGUgdGhlIHpzd2FwIGRlY29tcHJlc3Npb24gd29ya2Zsb3cuIFdpdGggdGhhdCBtYXAsIHRoZSBzdWJzZXF1ZW50IGRldGFpbHMgd2lsbCBzdGFydCB0byBmYWxsIGludG8gcGxhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIwOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15ib29sIHpzd2FwX3xeaW50IHpzd2FwX3xedm9pZCB6c3dhcF98XnN0YXRpYyAuKnpzd2FwXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3pzd2FwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0venN3YXAuYz00OD1hdG9taWNfbG9uZ190IHpzd2FwX3N0b3JlZF9wYWdlcyA9IEFUT01JQ19MT05HX0lOSVQoMCk7XG5tbS96c3dhcC5jLTQ5LS8qIFRoZSBudW1iZXIgb2YgaW5jb21wcmVzc2libGUgcGFnZXMgY3VycmVudGx5IHN0b3JlZCBpbiB6c3dhcCAqL1xubW0venN3YXAuYzo1MDpzdGF0aWMgYXRvbWljX2xvbmdfdCB6c3dhcF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXMgPSBBVE9NSUNfTE9OR19JTklUKDApO1xubW0venN3YXAuYy01MS1cbi0tXG5tbS96c3dhcC5jLTU5LS8qIFBvb2wgbGltaXQgd2FzIGhpdCAoc2VlIHpzd2FwX21heF9wb29sX3BlcmNlbnQpICovXG5tbS96c3dhcC5jOjYwOnN0YXRpYyB1NjQgenN3YXBfcG9vbF9saW1pdF9oaXQ7XG5tbS96c3dhcC5jLTYxLS8qIFBhZ2VzIHdyaXR0ZW4gYmFjayB3aGVuIHBvb2wgbGltaXQgd2FzIHJlYWNoZWQgKi9cbm1tL3pzd2FwLmM6NjI6c3RhdGljIHU2NCB6c3dhcF93cml0dGVuX2JhY2tfcGFnZXM7XG5tbS96c3dhcC5jLTYzLS8qIFN0b3JlIGZhaWxlZCBkdWUgdG8gYSByZWNsYWltIGZhaWx1cmUgYWZ0ZXIgcG9vbCBsaW1pdCB3YXMgcmVhY2hlZCAqL1xubW0venN3YXAuYzo2NDpzdGF0aWMgdTY0IHpzd2FwX3JlamVjdF9yZWNsYWltX2ZhaWw7XG5tbS96c3dhcC5jLTY1LS8qIFN0b3JlIGZhaWxlZCBkdWUgdG8gY29tcHJlc3Npb24gYWxnb3JpdGhtIGZhaWx1cmUgKi9cbm1tL3pzd2FwLmM6NjY6c3RhdGljIHU2NCB6c3dhcF9yZWplY3RfY29tcHJlc3NfZmFpbDtcbm1tL3pzd2FwLmMtNjctLyogQ29tcHJlc3NlZCBwYWdlIHdhcyB0b28gYmlnIGZvciB0aGUgYWxsb2NhdG9yIHRvIChvcHRpbWFsbHkpIHN0b3JlICovXG5tbS96c3dhcC5jOjY4OnN0YXRpYyB1NjQgenN3YXBfcmVqZWN0X2NvbXByZXNzX3Bvb3I7XG5tbS96c3dhcC5jLTY5LS8qIExvYWQgb3Igd3JpdGViYWNrIGZhaWxlZCBkdWUgdG8gZGVjb21wcmVzc2lvbiBmYWlsdXJlICovXG5tbS96c3dhcC5jOjcwOnN0YXRpYyB1NjQgenN3YXBfZGVjb21wcmVzc19mYWlsO1xubW0venN3YXAuYy03MS0vKiBTdG9yZSBmYWlsZWQgYmVjYXVzZSB1bmRlcmx5aW5nIGFsbG9jYXRvciBjb3VsZCBub3QgZ2V0IG1lbW9yeSAqL1xubW0venN3YXAuYzo3MjpzdGF0aWMgdTY0IHpzd2FwX3JlamVjdF9hbGxvY19mYWlsO1xubW0venN3YXAuYy03My0vKiBTdG9yZSBmYWlsZWQgYmVjYXVzZSB0aGUgZW50cnkgbWV0YWRhdGEgY291bGQgbm90IGJlIGFsbG9jYXRlZCAocmFyZSkgKi9cbm1tL3pzd2FwLmM6NzQ6c3RhdGljIHU2NCB6c3dhcF9yZWplY3Rfa21lbWNhY2hlX2ZhaWw7XG5tbS96c3dhcC5jLTc1LVxuLS1cbm1tL3pzd2FwLmM9Nzc9c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpzaHJpbmtfd3E7XG5tbS96c3dhcC5jLTc4LS8qIFBvb2wgbGltaXQgd2FzIGhpdCwgd2UgbmVlZCB0byBjYWxtIGRvd24gKi9cbm1tL3pzd2FwLmM6Nzk6c3RhdGljIGJvb2wgenN3YXBfcG9vbF9yZWFjaGVkX2Z1bGw7XG5tbS96c3dhcC5jLTgwLVxuLS1cbm1tL3pzd2FwLmMtODYtXG5tbS96c3dhcC5jOjg3OnN0YXRpYyBpbnQgenN3YXBfc2V0dXAodm9pZCk7XG5tbS96c3dhcC5jLTg4LVxubW0venN3YXAuYy04OS0vKiBFbmFibGUvZGlzYWJsZSB6c3dhcCAqL1xubW0venN3YXAuYzo5MDpzdGF0aWMgREVGSU5FX1NUQVRJQ19LRVlfTUFZQkUoQ09ORklHX1pTV0FQX0RFRkFVTFRfT04sIHpzd2FwX2V2ZXJfZW5hYmxlZCk7XG5tbS96c3dhcC5jOjkxOnN0YXRpYyBib29sIHpzd2FwX2VuYWJsZWQgPSBJU19FTkFCTEVEKENPTkZJR19aU1dBUF9ERUZBVUxUX09OKTtcbm1tL3pzd2FwLmM6OTI6c3RhdGljIGludCB6c3dhcF9lbmFibGVkX3BhcmFtX3NldChjb25zdCBjaGFyICosXG5tbS96c3dhcC5jLTkzLVx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqKTtcbm1tL3pzd2FwLmM6OTQ6c3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIHpzd2FwX2VuYWJsZWRfcGFyYW1fb3BzID0ge1xubW0venN3YXAuYy05NS1cdC5zZXQgPVx0XHR6c3dhcF9lbmFibGVkX3BhcmFtX3NldCxcbi0tXG5tbS96c3dhcC5jPTk4PW1vZHVsZV9wYXJhbV9jYihlbmFibGVkLCBcdTAwMjZ6c3dhcF9lbmFibGVkX3BhcmFtX29wcywgXHUwMDI2enN3YXBfZW5hYmxlZCwgMDY0NCk7XG4tLVxubW0venN3YXAuYy0xMDAtLyogQ3J5cHRvIGNvbXByZXNzb3IgdG8gdXNlICovXG5tbS96c3dhcC5jOjEwMTpzdGF0aWMgY2hhciAqenN3YXBfY29tcHJlc3NvciA9IENPTkZJR19aU1dBUF9DT01QUkVTU09SX0RFRkFVTFQ7XG5tbS96c3dhcC5jOjEwMjpzdGF0aWMgaW50IHpzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0KGNvbnN0IGNoYXIgKixcbm1tL3pzd2FwLmMtMTAzLVx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqKTtcbm1tL3pzd2FwLmM6MTA0OnN0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyB6c3dhcF9jb21wcmVzc29yX3BhcmFtX29wcyA9IHtcbm1tL3pzd2FwLmMtMTA1LVx0LnNldCA9XHRcdHpzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0LFxuLS1cbm1tL3pzd2FwLmM9MTA5PW1vZHVsZV9wYXJhbV9jYihjb21wcmVzc29yLCBcdTAwMjZ6c3dhcF9jb21wcmVzc29yX3BhcmFtX29wcyxcbi0tXG5tbS96c3dhcC5jLTExMi0vKiBUaGUgbWF4aW11bSBwZXJjZW50YWdlIG9mIG1lbW9yeSB0aGF0IHRoZSBjb21wcmVzc2VkIHBvb2wgY2FuIG9jY3VweSAqL1xubW0venN3YXAuYzoxMTM6c3RhdGljIHVuc2lnbmVkIGludCB6c3dhcF9tYXhfcG9vbF9wZXJjZW50ID0gMjA7XG5tbS96c3dhcC5jLTExNC1tb2R1bGVfcGFyYW1fbmFtZWQobWF4X3Bvb2xfcGVyY2VudCwgenN3YXBfbWF4X3Bvb2xfcGVyY2VudCwgdWludCwgMDY0NCk7XG4tLVxubW0venN3YXAuYy0xMTYtLyogVGhlIHRocmVzaG9sZCBmb3IgYWNjZXB0aW5nIG5ldyBwYWdlcyBhZnRlciB0aGUgbWF4X3Bvb2xfcGVyY2VudCB3YXMgaGl0ICovXG5tbS96c3dhcC5jOjExNzpzdGF0aWMgdW5zaWduZWQgaW50IHpzd2FwX2FjY2VwdF90aHJfcGVyY2VudCA9IDkwOyAvKiBvZiBtYXggcG9vbCBzaXplICovXG5tbS96c3dhcC5jLTExOC1tb2R1bGVfcGFyYW1fbmFtZWQoYWNjZXB0X3RocmVzaG9sZF9wZXJjZW50LCB6c3dhcF9hY2NlcHRfdGhyX3BlcmNlbnQsXG4tLVxubW0venN3YXAuYy0xMjEtLyogRW5hYmxlL2Rpc2FibGUgbWVtb3J5IHByZXNzdXJlLWJhc2VkIHNocmlua2VyLiAqL1xubW0venN3YXAuYzoxMjI6c3RhdGljIGJvb2wgenN3YXBfc2hyaW5rZXJfZW5hYmxlZCA9IElTX0VOQUJMRUQoXG5tbS96c3dhcC5jLTEyMy1cdFx0Q09ORklHX1pTV0FQX1NIUklOS0VSX0RFRkFVTFRfT04pO1xubW0venN3YXAuYz0xMjQ9bW9kdWxlX3BhcmFtX25hbWVkKHNocmlua2VyX2VuYWJsZWQsIHpzd2FwX3Nocmlua2VyX2VuYWJsZWQsIGJvb2wsIDA2NDQpO1xubW0venN3YXAuYy0xMjUtXG5tbS96c3dhcC5jOjEyNjpib29sIHpzd2FwX2lzX2VuYWJsZWQodm9pZClcbm1tL3pzd2FwLmMtMTI3LXtcbi0tXG5tbS96c3dhcC5jLTEzMC1cbm1tL3pzd2FwLmM6MTMxOmJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKVxubW0venN3YXAuYy0xMzIte1xuLS1cbm1tL3pzd2FwLmM9MTU0PXN0cnVjdCB6c3dhcF9wb29sIHtcbi0tXG5tbS96c3dhcC5jLTE3MS0jZGVmaW5lIFpTV0FQX01BWF9QT09MX0lEIFU4X01BWFxubW0venN3YXAuYzoxNzI6c3RhdGljIERFRklORV9YQVJSQVlfRkxBR1MoenN3YXBfcG9vbHMsIFhBX0ZMQUdTX0FMTE9DMSB8IFhBX0ZMQUdTX0xPQ0tfQkgpO1xubW0venN3YXAuYzoxNzM6c3RhdGljIHN0cnVjdCB6c3dhcF9wb29sIF9fcmN1ICp6c3dhcF9jdXJyZW50X3Bvb2w7XG5tbS96c3dhcC5jLTE3NC1cbm1tL3pzd2FwLmMtMTc1LS8qIEdsb2JhbCBMUlUgbGlzdHMgc2hhcmVkIGJ5IGFsbCB6c3dhcCBwb29scy4gKi9cbm1tL3pzd2FwLmM6MTc2OnN0YXRpYyBzdHJ1Y3QgbGlzdF9scnUgenN3YXBfbGlzdF9scnU7XG5tbS96c3dhcC5jLTE3Ny1cbm1tL3pzd2FwLmMtMTc4LS8qIFRoZSBsb2NrIHByb3RlY3RzIHpzd2FwX25leHRfc2hyaW5rIHVwZGF0ZXMuICovXG5tbS96c3dhcC5jOjE3OTpzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHpzd2FwX3Nocmlua19sb2NrKTtcbm1tL3pzd2FwLmM6MTgwOnN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqenN3YXBfbmV4dF9zaHJpbms7XG5tbS96c3dhcC5jOjE4MTpzdGF0aWMgc3RydWN0IHdvcmtfc3RydWN0IHpzd2FwX3Nocmlua193b3JrO1xubW0venN3YXAuYzoxODI6c3RhdGljIHN0cnVjdCBzaHJpbmtlciAqenN3YXBfc2hyaW5rZXI7XG5tbS96c3dhcC5jLTE4My1cbi0tXG5tbS96c3dhcC5jPTIwMj1zdHJ1Y3QgenN3YXBfZW50cnkge1xuLS1cbm1tL3pzd2FwLmMtMjE2LSAqL1xubW0venN3YXAuYzoyMTc6c3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9lbnRyeV9wb29sKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXG5tbS96c3dhcC5jLTIxOC17XG4tLVxubW0venN3YXAuYy0yMjEtXG5tbS96c3dhcC5jOjIyMjpzdGF0aWMgc3RydWN0IHhhcnJheSAqenN3YXBfdHJlZXNbTUFYX1NXQVBGSUxFU107XG5tbS96c3dhcC5jOjIyMzpzdGF0aWMgdW5zaWduZWQgaW50IG5yX3pzd2FwX3RyZWVzW01BWF9TV0FQRklMRVNdO1xubW0venN3YXAuYy0yMjQtXG5tbS96c3dhcC5jLTIyNS0vKiBwb29sIGNvdW50ZXIgdG8gcHJvdmlkZSB1bmlxdWUgbmFtZXMgdG8genNtYWxsb2MgKi9cbm1tL3pzd2FwLmM6MjI2OnN0YXRpYyBhdG9taWNfdCB6c3dhcF9wb29sc19jb3VudCA9IEFUT01JQ19JTklUKDApO1xubW0venN3YXAuYy0yMjctXG5tbS96c3dhcC5jPTIyOD1lbnVtIHpzd2FwX2luaXRfdHlwZSB7XG4tLVxubW0venN3YXAuYy0yMzMtXG5tbS96c3dhcC5jOjIzNDpzdGF0aWMgZW51bSB6c3dhcF9pbml0X3R5cGUgenN3YXBfaW5pdF9zdGF0ZTtcbm1tL3pzd2FwLmMtMjM1LVxubW0venN3YXAuYy0yMzYtLyogdXNlZCB0byBlbnN1cmUgdGhlIGludGVncml0eSBvZiBpbml0aWFsaXphdGlvbiAqL1xubW0venN3YXAuYzoyMzc6c3RhdGljIERFRklORV9NVVRFWCh6c3dhcF9pbml0X2xvY2spO1xubW0venN3YXAuYy0yMzgtXG5tbS96c3dhcC5jLTIzOS0vKiBpbml0IGNvbXBsZXRlZCwgYnV0IGNvdWxkbiYjMzk7dCBjcmVhdGUgdGhlIGluaXRpYWwgcG9vbCAqL1xubW0venN3YXAuYzoyNDA6c3RhdGljIGJvb2wgenN3YXBfaGFzX3Bvb2w7XG5tbS96c3dhcC5jLTI0MS1cbi0tXG5tbS96c3dhcC5jLTI0OC0jZGVmaW5lIFpTV0FQX0FERFJFU1NfU1BBQ0VfUEFHRVMgKDEgXHUwMDNjXHUwMDNjIFpTV0FQX0FERFJFU1NfU1BBQ0VfU0hJRlQpXG5tbS96c3dhcC5jOjI0OTpzdGF0aWMgaW5saW5lIHN0cnVjdCB4YXJyYXkgKnN3YXBfenN3YXBfdHJlZShzd3BfZW50cnlfdCBzd3ApXG5tbS96c3dhcC5jLTI1MC17XG4tLVxubW0venN3YXAuYy0yNjAtKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbm1tL3pzd2FwLmM6MjYxOnN0YXRpYyB2b2lkIF9fenN3YXBfcG9vbF9lbXB0eShzdHJ1Y3QgcGVyY3B1X3JlZiAqcmVmKTtcbm1tL3pzd2FwLmMtMjYyLVxubW0venN3YXAuYz0yNjM9c3RhdGljIHZvaWQgYWNvbXBfY3R4X2ZyZWUoc3RydWN0IGNyeXB0b19hY29tcF9jdHggKmFjb21wX2N0eClcbi0tXG5tbS96c3dhcC5jLTI5MC1cbm1tL3pzd2FwLmM6MjkxOnN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jcmVhdGUoY2hhciAqY29tcHJlc3Nvcilcbm1tL3pzd2FwLmMtMjkyLXtcbi0tXG5tbS96c3dhcC5jLTM3OS1cbm1tL3pzd2FwLmM6MzgwOnN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqX196c3dhcF9wb29sX2NyZWF0ZV9mYWxsYmFjayh2b2lkKVxubW0venN3YXAuYy0zODEte1xuLS1cbm1tL3pzd2FwLmMtMzk4LVxubW0venN3YXAuYzozOTk6c3RhdGljIHZvaWQgenN3YXBfcG9vbF9kZXN0cm95KHN0cnVjdCB6c3dhcF9wb29sICpwb29sKVxubW0venN3YXAuYy00MDAte1xuLS1cbm1tL3pzd2FwLmMtNDE1LVxubW0venN3YXAuYzo0MTY6c3RhdGljIHZvaWQgX196c3dhcF9wb29sX3JlbGVhc2Uoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxubW0venN3YXAuYy00MTcte1xuLS1cbm1tL3pzd2FwLmMtNDI4LVxubW0venN3YXAuYzo0Mjk6c3RhdGljIHZvaWQgX196c3dhcF9wb29sX2VtcHR5KHN0cnVjdCBwZXJjcHVfcmVmICpyZWYpXG5tbS96c3dhcC5jLTQzMC17XG4tLVxubW0venN3YXAuYy00NDItXG5tbS96c3dhcC5jOjQ0MzpzdGF0aWMgaW50IF9fbXVzdF9jaGVjayB6c3dhcF9wb29sX3RyeWdldChzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbClcbm1tL3pzd2FwLmMtNDQ0LXtcbi0tXG5tbS96c3dhcC5jLTQ1MS0vKiBUaGUgY2FsbGVyIG11c3QgYWxyZWFkeSBoYXZlIGEgcmVmZXJlbmNlLiAqL1xubW0venN3YXAuYzo0NTI6c3RhdGljIHZvaWQgenN3YXBfcG9vbF9nZXQoc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wpXG5tbS96c3dhcC5jLTQ1My17XG4tLVxubW0venN3YXAuYy00NTYtXG5tbS96c3dhcC5jOjQ1NzpzdGF0aWMgdm9pZCB6c3dhcF9wb29sX3B1dChzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbClcbm1tL3pzd2FwLmMtNDU4LXtcbi0tXG5tbS96c3dhcC5jLTQ2MS1cbm1tL3pzd2FwLmM6NDYyOnN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqX196c3dhcF9wb29sX2N1cnJlbnQodm9pZClcbm1tL3pzd2FwLmMtNDYzLXtcbi0tXG5tbS96c3dhcC5jLTQ3Mi1cbm1tL3pzd2FwLmM6NDczOnN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jdXJyZW50X2dldCh2b2lkKVxubW0venN3YXAuYy00NzQte1xuLS1cbm1tL3pzd2FwLmMtNDg4LS8qIGNvbXByZXNzb3IgbXVzdCBiZSBudWxsLXRlcm1pbmF0ZWQgKi9cbm1tL3pzd2FwLmM6NDg5OnN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9maW5kX2dldChjaGFyICpjb21wcmVzc29yKVxubW0venN3YXAuYy00OTAte1xuLS1cbm1tL3pzd2FwLmMtNTExLVxubW0venN3YXAuYzo1MTI6c3RhdGljIHVuc2lnbmVkIGxvbmcgenN3YXBfbWF4X3BhZ2VzKHZvaWQpXG5tbS96c3dhcC5jLTUxMy17XG4tLVxubW0venN3YXAuYy01MTYtXG5tbS96c3dhcC5jOjUxNzpzdGF0aWMgdW5zaWduZWQgbG9uZyB6c3dhcF9hY2NlcHRfdGhyX3BhZ2VzKHZvaWQpXG5tbS96c3dhcC5jLTUxOC17XG4tLVxubW0venN3YXAuYz01MjI9dW5zaWduZWQgbG9uZyB6c3dhcF90b3RhbF9wYWdlcyh2b2lkKVxuLS1cbm1tL3pzd2FwLmMtNTM5LVxubW0venN3YXAuYzo1NDA6c3RhdGljIGJvb2wgenN3YXBfY2hlY2tfbGltaXRzKHZvaWQpXG5tbS96c3dhcC5jLTU0MS17XG4tLVxubW0venN3YXAuYy01NTgtXG5tbS96c3dhcC5jOjU1OTpzdGF0aWMgaW50IHpzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0KGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG5tbS96c3dhcC5jLTU2MC17XG4tLVxubW0venN3YXAuYy02MzQtXG5tbS96c3dhcC5jOjYzNTpzdGF0aWMgaW50IHpzd2FwX2VuYWJsZWRfcGFyYW1fc2V0KGNvbnN0IGNoYXIgKnZhbCxcbm1tL3pzd2FwLmMtNjM2LVx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4tLVxubW0venN3YXAuYy02NjctXG5tbS96c3dhcC5jOjY2ODpzdGF0aWMgaW5saW5lIGludCBlbnRyeV90b19uaWQoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcbm1tL3pzd2FwLmMtNjY5LXtcbi0tXG5tbS96c3dhcC5jLTY3Mi1cbm1tL3pzd2FwLmM6NjczOnN0YXRpYyB2b2lkIHpzd2FwX2xydV9hZGQoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcbm1tL3pzd2FwLmMtNjc0LXtcbi0tXG5tbS96c3dhcC5jLTY5NS1cbm1tL3pzd2FwLmM6Njk2OnN0YXRpYyB2b2lkIHpzd2FwX2xydV9kZWwoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcbm1tL3pzd2FwLmMtNjk3LXtcbi0tXG5tbS96c3dhcC5jLTcwNy1cbm1tL3pzd2FwLmM6NzA4OnZvaWQgenN3YXBfbHJ1dmVjX3N0YXRlX2luaXQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxubW0venN3YXAuYy03MDkte1xuLS1cbm1tL3pzd2FwLmMtNzEyLVxubW0venN3YXAuYzo3MTM6dm9pZCB6c3dhcF9mb2xpb19zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL3pzd2FwLmMtNzE0LXtcbi0tXG5tbS96c3dhcC5jLTczNC0gKi9cbm1tL3pzd2FwLmM6NzM1OnZvaWQgenN3YXBfbWVtY2dfb2ZmbGluZV9jbGVhbnVwKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbm1tL3pzd2FwLmMtNzM2LXtcbi0tXG5tbS96c3dhcC5jLTc0OS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xubW0venN3YXAuYzo3NTA6c3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICp6c3dhcF9lbnRyeV9jYWNoZTtcbm1tL3pzd2FwLmMtNzUxLVxubW0venN3YXAuYzo3NTI6c3RhdGljIHN0cnVjdCB6c3dhcF9lbnRyeSAqenN3YXBfZW50cnlfY2FjaGVfYWxsb2MoZ2ZwX3QgZ2ZwLCBpbnQgbmlkKVxubW0venN3YXAuYy03NTMte1xuLS1cbm1tL3pzd2FwLmMtNzYwLVxubW0venN3YXAuYzo3NjE6c3RhdGljIHZvaWQgenN3YXBfZW50cnlfY2FjaGVfZnJlZShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxubW0venN3YXAuYy03NjIte1xuLS1cbm1tL3pzd2FwLmMtNzY5LSAqL1xubW0venN3YXAuYzo3NzA6c3RhdGljIHZvaWQgenN3YXBfZW50cnlfZnJlZShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxubW0venN3YXAuYy03NzEte1xuLS1cbm1tL3pzd2FwLmMtNzkxLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5tbS96c3dhcC5jOjc5MjpzdGF0aWMgaW50IHpzd2FwX2NwdV9jb21wX3ByZXBhcmUodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUpXG5tbS96c3dhcC5jLTc5My17XG4tLVxubW0venN3YXAuYy04NDgtXG5tbS96c3dhcC5jOjg0OTpzdGF0aWMgYm9vbCB6c3dhcF9jb21wcmVzcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbm1tL3pzd2FwLmMtODUwLVx0XHRcdCAgIHN0cnVjdCB6c3dhcF9wb29sICpwb29sKVxuLS1cbm1tL3pzd2FwLmMtOTMyLVxubW0venN3YXAuYzo5MzM6c3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0venN3YXAuYy05MzQte1xuLS1cbm1tL3pzd2FwLmMtOTk4LSAqL1xubW0venN3YXAuYzo5OTk6c3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbm1tL3pzd2FwLmMtMTAwMC1cdFx0XHRcdCBzd3BfZW50cnlfdCBzd3BlbnRyeSlcbi0tXG5tbS96c3dhcC5jPTExMDI9c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X29uZSAqbCxcbi0tXG5tbS96c3dhcC5jLTExODItXG5tbS96c3dhcC5jOjExODM6c3RhdGljIHVuc2lnbmVkIGxvbmcgenN3YXBfc2hyaW5rZXJfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxubW0venN3YXAuYy0xMTg0LVx0XHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3pzd2FwLmMtMTIwMy1cbm1tL3pzd2FwLmM6MTIwNDpzdGF0aWMgdW5zaWduZWQgbG9uZyB6c3dhcF9zaHJpbmtlcl9jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxubW0venN3YXAuYy0xMjA1LVx0XHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3pzd2FwLmMtMTI3NS1cbm1tL3pzd2FwLmM6MTI3NjpzdGF0aWMgc3RydWN0IHNocmlua2VyICp6c3dhcF9hbGxvY19zaHJpbmtlcih2b2lkKVxubW0venN3YXAuYy0xMjc3LXtcbi0tXG5tbS96c3dhcC5jPTEzMjk9c3RhdGljIHZvaWQgc2hyaW5rX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXG4tLVxubW0venN3YXAuYy0xNDE5LVxubW0venN3YXAuYzoxNDIwOnN0YXRpYyBib29sIHpzd2FwX3N0b3JlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsXG5tbS96c3dhcC5jLTE0MjEtXHRcdFx0ICAgICBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csXG4tLVxubW0venN3YXAuYy0xNTA1LVxubW0venN3YXAuYzoxNTA2OmJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL3pzd2FwLmMtMTUwNy17XG4tLVxubW0venN3YXAuYy0xNjExLSAqL1xubW0venN3YXAuYzoxNjEyOmludCB6c3dhcF9sb2FkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS96c3dhcC5jLTE2MTMte1xuLS1cbm1tL3pzd2FwLmMtMTY2NC1cbm1tL3pzd2FwLmM6MTY2NTp2b2lkIHpzd2FwX2ludmFsaWRhdGUoc3dwX2VudHJ5X3Qgc3dwKVxubW0venN3YXAuYy0xNjY2LXtcbi0tXG5tbS96c3dhcC5jLTE2NzgtXG5tbS96c3dhcC5jOjE2Nzk6aW50IHpzd2FwX3N3YXBvbihpbnQgdHlwZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbm1tL3pzd2FwLmMtMTY4MC17XG4tLVxubW0venN3YXAuYy0xNjk4LVxubW0venN3YXAuYzoxNjk5OnZvaWQgenN3YXBfc3dhcG9mZihpbnQgdHlwZSlcbm1tL3pzd2FwLmMtMTcwMC17XG4tLVxubW0venN3YXAuYy0xNzIxLVxubW0venN3YXAuYzoxNzIyOnN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp6c3dhcF9kZWJ1Z2ZzX3Jvb3Q7XG5tbS96c3dhcC5jLTE3MjMtXG4tLVxubW0venN3YXAuYz0xNzQzPURFRklORV9ERUJVR0ZTX0FUVFJJQlVURShzdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXNfZm9wcyxcbi0tXG5tbS96c3dhcC5jLTE3NDUtXG5tbS96c3dhcC5jOjE3NDY6c3RhdGljIGludCB6c3dhcF9kZWJ1Z2ZzX2luaXQodm9pZClcbm1tL3pzd2FwLmMtMTc0Ny17XG4tLVxubW0venN3YXAuYy0xNzc5LSNlbHNlXG5tbS96c3dhcC5jOjE3ODA6c3RhdGljIGludCB6c3dhcF9kZWJ1Z2ZzX2luaXQodm9pZClcbm1tL3pzd2FwLmMtMTc4MS17XG4tLVxubW0venN3YXAuYy0xNzg4LSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5tbS96c3dhcC5jOjE3ODk6c3RhdGljIGludCB6c3dhcF9zZXR1cCh2b2lkKVxubW0venN3YXAuYy0xNzkwLXtcbi0tXG5tbS96c3dhcC5jLTE4NTEtXG5tbS96c3dhcC5jOjE4NTI6c3RhdGljIGludCBfX2luaXQgenN3YXBfaW5pdCh2b2lkKVxubW0venN3YXAuYy0xODUzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjA6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyMTAKCQkJCQkJCW91dHB1dDogMjYxCgkJCQkJCQl0aG91Z2h0czogMzg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIHpzd2FwLmMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBzY2FuIG9mIGBtbS96c3dhcC5jYCBpZGVudGlmaWVzIHRoZSBjcnVjaWFsLCBub24tdWJpcXVpdG91cyBmdW5jdGlvbnMgdGhhdCBzZWVtIGNlbnRyYWwgdG8gdGhlIGNvcmUgZnVuY3Rpb25hbGl0eTogYHpzd2FwX3N0b3JlYCwgYHpzd2FwX2xvYWRgLCBgenN3YXBfc3RvcmVfcGFnZWAsIGB6c3dhcF9kZWNvbXByZXNzYCwgYHpzd2FwX2VudHJ5X2ZyZWVgLCBhbmQgdGhlIHBvb2wgbWFuYWdlbWVudCBmdW5jdGlvbnM6IGB6c3dhcF9wb29sX2NyZWF0ZWAsIGB6c3dhcF9wb29sX2ZpbmRfZ2V0YCwgYF9fenN3YXBfcG9vbF9lbXB0eWAsIGBfX3pzd2FwX3Bvb2xfcmVsZWFzZWAsIGFuZCBhbHNvIGB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldGAsIGFuZCBgenN3YXBfdG90YWxfcGFnZXNgLiBUaG9zZSBsb29rIGxpa2UgdGhlIGhvdHNwb3RzLgoKVGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBjbGVhcmx5IGBaU1dBUGAgYW5kIGBTV0FQYCDigJMgdGhvc2UgdHdvIGFyZSBlc3NlbnRpYWwgdG8gY29uc2lkZXIgZm9yIGZ1enppbmcgc2NvcGUuCgpOb3csIHRoZSBwYXRjaCYjMzk7cyBjb3JlIGlzIHRoZSByZWZhY3RvcmluZyBvZiB6c3dhcCBwb29sIGFuZCBlbnRyeSBsaWZlY3ljbGUgd2l0aGluIGBtbS96c3dhcC5jYC4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBzaWduaWZpY2FudCBvdmVyaGF1bDogc3dhcHBpbmcgdGhlIGxpbmtlZCBsaXN0IGZvciBhbiBJRC1iYXNlZCB4YXJyYXkgKGB6c3dhcF9wb29sc2ApLCBhbmQgcmVwbGFjaW5nIHRoZSBgcG9vbGAgcG9pbnRlciB3aXRoIGBwb29sX2lkeGAuIFRoYXQgbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB4YXJyYXkgbG9va3VwcyB1c2luZyBgeGFfbG9hZGAgYW5kIGB4YV9mb3JfZWFjaGAsIHNvZnRpcnEtc2FmZSBsb2NraW5nIHZpYSBgeGFfYWxsb2NfYmhgLCBgeGFfZXJhc2VfYmhgLCBhbmQgZGVsYXllZCBkZXN0cnVjdGlvbiB3aXRoIGByY3Vfd29ya2AuIFRoZXNlIGFyZSBjcml0aWNhbCBzeW5jaHJvbml6YXRpb24gYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZXMgd2l0aGluIHJlYWNoYWJsZSBNTSBjb2RlLiBUaGlzIHNjcmVhbXMgY29uY3VycmVuY3kgaXNzdWVzLgoKR2l2ZW4gdGhlIHNjb3BlIGFuZCBuYXR1cmUgb2YgdGhlIGNoYW5nZXMg4oCTIGVzcGVjaWFsbHkgdGhlIHNoaWZ0IHRvIHhhcnJheXMgYW5kIFJDVSDigJMgdGhlIHBvdGVudGlhbCBmb3IgY29uY3VycmVuY3kgcmFjZXMsIHN0YWxlIElEIGxvb2t1cHMsIGFuZCBhc3NlcnRpb24gZmFpbHVyZXMgaXMgaGlnaC4gVGh1cywgZnV6emluZyBpcyBkZWZpbml0ZWx5IHdhcnJhbnRlZCBoZXJlLgoKRmluYWxseSwgSSYjMzk7dmUgY2hlY2tlZCBhbGwgdGhlIGluc3RydWN0aW9ucyDigJMgdGhlIGBFbmFibGVDb25maWdzYCwgYEZvY3VzU3ltYm9sc2AsIGBXb3J0aEZ1enppbmdgLCBhbmQgYFJlYXNvbmluZ2Ag4oCTIGFsbCBhcmUgY2xlYXIgYW5kIG1ha2Ugc2Vuc2UuIFNlZW1zIHRoZSBzZXR1cCBpcyBjb3JyZWN0LiBOb3csIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIwOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaU1dBUCYjMzQ7LAogICAgJiMzNDtTV0FQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7enN3YXBfc3RvcmUmIzM0OywKICAgICYjMzQ7enN3YXBfbG9hZCYjMzQ7LAogICAgJiMzNDt6c3dhcF9zdG9yZV9wYWdlJiMzNDssCiAgICAmIzM0O3pzd2FwX2RlY29tcHJlc3MmIzM0OywKICAgICYjMzQ7enN3YXBfZW50cnlfZnJlZSYjMzQ7LAogICAgJiMzNDt6c3dhcF9wb29sX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDt6c3dhcF9wb29sX2ZpbmRfZ2V0JiMzNDssCiAgICAmIzM0O19fenN3YXBfcG9vbF9lbXB0eSYjMzQ7LAogICAgJiMzNDtfX3pzd2FwX3Bvb2xfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDt6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldCYjMzQ7LAogICAgJiMzNDt6c3dhcF90b3RhbF9wYWdlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGluIG1tL3pzd2FwLmMsIHJlZmFjdG9yaW5nIHBvb2wgYW5kIGVudHJ5IHRyYWNraW5nIGZyb20gYSBsaW5rZWQgbGlzdCBhbmQgcmF3IHBvb2wgcG9pbnRlciB0byBhbiBJRC1iYXNlZCBYQXJyYXkgd2l0aCA4LWJpdCBwb29sIGluZGljZXMgaW4gc3RydWN0IHpzd2FwX2VudHJ5LiBJdCBhbHNvIHVwZGF0ZXMgc3luY2hyb25pemF0aW9uIHNlbWFudGljcyB1c2luZyBSQ1UgYW5kIHJjdV93b3JrIChxdWV1ZV9yY3Vfd29yaykgYWxvbmcgd2l0aCBzb2Z0aXJxLXNhZmUgWEFycmF5IG9wZXJhdGlvbnMgKHhhX2FsbG9jX2JoLCB4YV9lcmFzZV9iaCkuIFRoZXNlIGNvbmN1cnJlbmN5IGFuZCBkYXRhIHN0cnVjdHVyZSBtb2RpZmljYXRpb25zIGluIHJlYWNoYWJsZSBNTSBjb2RlIHdhcnJhbnQgZnV6emluZyB0byBkZXRlY3QgcG9zc2libGUgcmFjZXMsIHN0YWxlIElEIGRlcmVmZXJlbmNlcywgb3IgYXNzZXJ0aW9uIHRyaXBzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaU1dBUCYjMzQ7LAogICAgJiMzNDtTV0FQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7enN3YXBfc3RvcmUmIzM0OywKICAgICYjMzQ7enN3YXBfbG9hZCYjMzQ7LAogICAgJiMzNDt6c3dhcF9zdG9yZV9wYWdlJiMzNDssCiAgICAmIzM0O3pzd2FwX2RlY29tcHJlc3MmIzM0OywKICAgICYjMzQ7enN3YXBfZW50cnlfZnJlZSYjMzQ7LAogICAgJiMzNDt6c3dhcF9wb29sX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDt6c3dhcF9wb29sX2ZpbmRfZ2V0JiMzNDssCiAgICAmIzM0O19fenN3YXBfcG9vbF9lbXB0eSYjMzQ7LAogICAgJiMzNDtfX3pzd2FwX3Bvb2xfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDt6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldCYjMzQ7LAogICAgJiMzNDt6c3dhcF90b3RhbF9wYWdlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGluIG1tL3pzd2FwLmMsIHJlZmFjdG9yaW5nIHBvb2wgYW5kIGVudHJ5IHRyYWNraW5nIGZyb20gYSBsaW5rZWQgbGlzdCBhbmQgcmF3IHBvb2wgcG9pbnRlciB0byBhbiBJRC1iYXNlZCBYQXJyYXkgd2l0aCA4LWJpdCBwb29sIGluZGljZXMgaW4gc3RydWN0IHpzd2FwX2VudHJ5LiBJdCBhbHNvIHVwZGF0ZXMgc3luY2hyb25pemF0aW9uIHNlbWFudGljcyB1c2luZyBSQ1UgYW5kIHJjdV93b3JrIChxdWV1ZV9yY3Vfd29yaykgYWxvbmcgd2l0aCBzb2Z0aXJxLXNhZmUgWEFycmF5IG9wZXJhdGlvbnMgKHhhX2FsbG9jX2JoLCB4YV9lcmFzZV9iaCkuIFRoZXNlIGNvbmN1cnJlbmN5IGFuZCBkYXRhIHN0cnVjdHVyZSBtb2RpZmljYXRpb25zIGluIHJlYWNoYWJsZSBNTSBjb2RlIHdhcnJhbnQgZnV6emluZyB0byBkZXRlY3QgcG9zc2libGUgcmFjZXMsIHN0YWxlIElEIGRlcmVmZXJlbmNlcywgb3IgYXNzZXJ0aW9uIHRyaXBzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMDoxODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIwOjE4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaW50ZXJuYWwgenN3YXAgcG9vbCBhbmQgZW50cnkgbWFuYWdlbWVudCBpbiBtbS96c3dhcC5jIGJ5IHJlcGxhY2luZyBhIGxpbmtlZCBsaXN0IG9mIHBvb2xzIHdpdGggYW4gWEFycmF5IChpbmRleGVkIGJ5IGEgdTggcG9vbF9pZHgpIGFuZCBzd2l0Y2hpbmcgcG9vbCBsb29rdXBzIHRvIHVzZSB4YV9sb2FkKCkuIEFsbCBhbGxvY2F0ZWQgc3RydWN0dXJlcyAoenN3YXBfcG9vbCBhbGxvY2F0ZWQgd2l0aCBremFsbG9jX29iaiwgYW5kIHpzd2FwX2VudHJ5IHdob3NlIGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBpbiB6c3dhcF9zdG9yZV9wYWdlKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gTm9uZSBvZiB0aGUgbW9kaWZpZWQgZGF0YSBzdHJ1Y3R1cmVzIG9yIGZpZWxkcyBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcyBhcmUgaW50cm9kdWNlZC4gQW55IHBvdGVudGlhbCBidWdzIHdvdWxkIGludm9sdmUgY29uY3VycmVuY3ksIGxpZmV0aW1lL3JlZmNvdW50aW5nLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcyByYXRoZXIgdGhhbiBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZmYzgyYmJkMGY0NTY1MGIzNjdmZjNiYTBmZDBkOTZiYmU5YTI0MTUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCA2IDIwOjE4OjI3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmMKaW5kZXggZjNhZTNjODFlNDhlYS4uMjUzZWViYjk3MWI5NyAxMDA2NDQKLS0tIGEvbW0venN3YXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS96c3dhcC5jCkBAIC0zNCw2ICYjNDM7MzQsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3dyaXRlYmFjay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BhZ2VtYXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC93b3JrcXVldWUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgveGFycmF5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbGlzdF9scnUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC96c21hbGxvYy5oJmd0OwogCkBAIC0xNTQsMTIgJiM0MzsxNTUsMjMgQEAgc3RydWN0IHpzd2FwX3Bvb2wgewogCXN0cnVjdCB6c19wb29sICp6c19wb29sOwogCXN0cnVjdCBjcnlwdG9fYWNvbXBfY3R4IF9fcGVyY3B1ICphY29tcF9jdHg7CiAJc3RydWN0IHBlcmNwdV9yZWYgcmVmOwotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVsZWFzZV93b3JrOwomIzQzOwlzdHJ1Y3QgcmN1X3dvcmsgcmVsZWFzZV9yd29yazsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSBub2RlOwomIzQzOwl1OCBpZHg7CiAJY2hhciB0Zm1fbmFtZVtDUllQVE9fTUFYX0FMR19OQU1FXTsKIH07CiAKJiM0MzsvKgomIzQzOyAqIExpdmUgcG9vbHMga2V5ZWQgYnkgaWQgKDEuLlpTV0FQX01BWF9QT09MX0lEKS4gIFhBX0ZMQUdTX0FMTE9DMSBrZWVwcyBpZCAwCiYjNDM7ICogcmVzZXJ2ZWQgc28gaXQgaXMgbmV2ZXIgaGFuZGVkIHRvIGEgbGl2ZSBwb29sLiAgWEFfRkxBR1NfTE9DS19CSCBtYWtlcyB0aGUKJiM0MzsgKiB4YV9sb2NrIHNvZnRpcnEtc2FmZTogaXQgaXMgdGFrZW4gZnJvbSBfX3pzd2FwX3Bvb2xfZW1wdHkoKSwgd2hpY2ggcnVucyBmcm9tCiYjNDM7ICogYSBwZXJjcHVfcmVmIHJlbGVhc2UgY2FsbGJhY2sgaW4gc29mdGlycSBjb250ZXh0LgomIzQzOyAqLwomIzQzOyNkZWZpbmUgWlNXQVBfRklSU1RfUE9PTF9JRCAxCiYjNDM7I2RlZmluZSBaU1dBUF9NQVhfUE9PTF9JRCBVOF9NQVgKJiM0MztzdGF0aWMgREVGSU5FX1hBUlJBWV9GTEFHUyh6c3dhcF9wb29scywgWEFfRkxBR1NfQUxMT0MxIHwgWEFfRkxBR1NfTE9DS19CSCk7CiYjNDM7c3RhdGljIHN0cnVjdCB6c3dhcF9wb29sIF9fcmN1ICp6c3dhcF9jdXJyZW50X3Bvb2w7CiYjNDM7CiAvKiBHbG9iYWwgTFJVIGxpc3RzIHNoYXJlZCBieSBhbGwgenN3YXAgcG9vbHMuICovCiBzdGF0aWMgc3RydWN0IGxpc3RfbHJ1IHpzd2FwX2xpc3RfbHJ1OwogCkBAIC0xODIsNyAmIzQzOzE5NCw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2hyaW5rZXIgKnpzd2FwX3Nocmlua2VyOwogICogICAgICAgICAgICAgIHdyaXRlYmFjayBsb2dpYy4gVGhlIGVudHJ5IGlzIG9ubHkgcmVjbGFpbWVkIGJ5IHRoZSB3cml0ZWJhY2sKICAqICAgICAgICAgICAgICBsb2dpYyBpZiByZWZlcmVuY2VkIGlzIHVuc2V0LiBTZWUgY29tbWVudHMgaW4gdGhlIHNocmlua2VyCiAgKiAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgY29udGV4dC4KLSAqIHBvb2wgLSB0aGUgenN3YXBfcG9vbCB0aGUgZW50cnkmIzM5O3MgZGF0YSBpcyBpbgomIzQzOyAqIHBvb2xfaWR4IC0gaWQgb2YgdGhlIHpzd2FwX3Bvb2wgdGhhdCB0aGUgZW50cnkmIzM5O3MgZGF0YSBpcyBpbi4KICAqIGhhbmRsZSAtIHpzbWFsbG9jIGFsbG9jYXRpb24gaGFuZGxlIHRoYXQgc3RvcmVzIHRoZSBjb21wcmVzc2VkIHBhZ2UgZGF0YQogICogb2JqY2cgLSB0aGUgb2JqX2Nncm91cCB0aGF0IHRoZSBjb21wcmVzc2VkIG1lbW9yeSBpcyBjaGFyZ2VkIHRvCiAgKiBscnUgLSBoYW5kbGUgdG8gdGhlIHBvb2wmIzM5O3MgbHJ1IHVzZWQgdG8gZXZpY3QgcGFnZXMuCkBAIC0xOTEsMTkgJiM0MzsyMDMsMjUgQEAgc3RydWN0IHpzd2FwX2VudHJ5IHsKIAlzd3BfZW50cnlfdCBzd3BlbnRyeTsKIAl1bnNpZ25lZCBpbnQgbGVuZ3RoOwogCWJvb2wgcmVmZXJlbmNlZDsKLQlzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDsKJiM0MzsJdTggcG9vbF9pZHg7CiAJdW5zaWduZWQgbG9uZyBoYW5kbGU7CiAJc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnOwogCXN0cnVjdCBsaXN0X2hlYWQgbHJ1OwogfTsKIAomIzQzOy8qCiYjNDM7ICogTm8gUkNVIHNlY3Rpb24gaXMgbmVlZGVkIGFyb3VuZCB0aGUgcmV0dXJuZWQgcG9pbnRlcjogYSBzdG9yZWQgZW50cnkgcGlucwomIzQzOyAqIGl0cyBwb29sIHZpYSBwZXJjcHVfcmVmICh0YWtlbiBpbiB6c3dhcF9zdG9yZV9wYWdlKCkpLCBzbyB0aGUgaWQgY2Fubm90IGJlCiYjNDM7ICogcmV1c2VkIHVuZGVyIHVzLiAgQ2FsbGVycyBXQVJOIGFuZCBoYW5kbGUgYSBOVUxMIGZyb20gYSBjb3JydXB0IHBvb2xfaWR4LgomIzQzOyAqLwomIzQzO3N0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfZW50cnlfcG9vbChzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KQomIzQzO3sKJiM0MzsJcmV0dXJuIHhhX2xvYWQoJmFtcDt6c3dhcF9wb29scywgZW50cnktJmd0O3Bvb2xfaWR4KTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IHhhcnJheSAqenN3YXBfdHJlZXNbTUFYX1NXQVBGSUxFU107CiBzdGF0aWMgdW5zaWduZWQgaW50IG5yX3pzd2FwX3RyZWVzW01BWF9TV0FQRklMRVNdOwogCi0vKiBSQ1UtcHJvdGVjdGVkIGl0ZXJhdGlvbiAqLwotc3RhdGljIExJU1RfSEVBRCh6c3dhcF9wb29scyk7Ci0vKiBwcm90ZWN0cyB6c3dhcF9wb29scyBsaXN0IG1vZGlmaWNhdGlvbiAqLwotc3RhdGljIERFRklORV9TUElOTE9DSyh6c3dhcF9wb29sc19sb2NrKTsKIC8qIHBvb2wgY291bnRlciB0byBwcm92aWRlIHVuaXF1ZSBuYW1lcyB0byB6c21hbGxvYyAqLwogc3RhdGljIGF0b21pY190IHpzd2FwX3Bvb2xzX2NvdW50ID0gQVRPTUlDX0lOSVQoMCk7CiAKQEAgLTI3NSw2ICYjNDM7MjkzLDcgQEAgc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2NyZWF0ZShjaGFyICpjb21wcmVzc29yKQogCXN0cnVjdCB6c3dhcF9wb29sICpwb29sOwogCWNoYXIgbmFtZVszOF07IC8qICYjMzk7enN3YXAmIzM5OyAmIzQzOyAzMiBjaGFyIChtYXgpIG51bSAmIzQzOyBcMCAqLwogCWludCByZXQsIGNwdTsKJiM0MzsJdTMyIGlkOwogCiAJaWYgKCF6c3dhcF9oYXNfcG9vbCAmYW1wOyZhbXA7ICFzdHJjbXAoY29tcHJlc3NvciwgWlNXQVBfUEFSQU1fVU5TRVQpKQogCQlyZXR1cm4gTlVMTDsKQEAgLTMyMCwxMiAmIzQzOzMzOSwyOSBAQCBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3JlYXRlKGNoYXIgKmNvbXByZXNzb3IpCiAJCQkgICAgICBQRVJDUFVfUkVGX0FMTE9XX1JFSU5JVCwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJldCkKIAkJZ290byByZWZfZmFpbDsKLQlJTklUX0xJU1RfSEVBRCgmYW1wO3Bvb2wtJmd0O2xpc3QpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBQdWJsaXNoIG9ubHkgYWZ0ZXIgdGhlIHBvb2wgaXMgZnVsbHkgYnVpbHQsIHNvIGxvY2tsZXNzIHdhbGtlcnMKJiM0MzsJICogbmV2ZXIgc2VlIGEgaGFsZi1pbml0aWFsaXplZCBwb29sLiAgVGhlIF9iaCB2YXJpYW50IHBhaXJzIHdpdGggdGhlCiYjNDM7CSAqIHNvZnRpcnEtY29udGV4dCB4YV9sb2NrIHRha2VuIGluIF9fenN3YXBfcG9vbF9lbXB0eSgpLgomIzQzOwkgKi8KJiM0MzsJcmV0ID0geGFfYWxsb2NfYmgoJmFtcDt6c3dhcF9wb29scywgJmFtcDtpZCwgcG9vbCwKJiM0MzsJCQkgIFhBX0xJTUlUKFpTV0FQX0ZJUlNUX1BPT0xfSUQsIFpTV0FQX01BWF9QT09MX0lEKSwKJiM0MzsJCQkgIEdGUF9LRVJORUwpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlpZiAocmV0ID09IC1FQlVTWSkKJiM0MzsJCQlwcl9lcnIoJiMzNDtjYW5ub3QgYWxsb2NhdGUgcG9vbCBpZCAobWF4ICVkIGxpdmUgcG9vbHMpXG4mIzM0OywKJiM0MzsJCQkgICAgICAgWlNXQVBfTUFYX1BPT0xfSUQgLSBaU1dBUF9GSVJTVF9QT09MX0lEICYjNDM7IDEpOwomIzQzOwkJZ290byB4YV9mYWlsOwomIzQzOwl9CiYjNDM7CXBvb2wtJmd0O2lkeCA9IGlkOwogCiAJenN3YXBfcG9vbF9kZWJ1ZygmIzM0O2NyZWF0ZWQmIzM0OywgcG9vbCk7CiAKIAlyZXR1cm4gcG9vbDsKIAomIzQzO3hhX2ZhaWw6CiYjNDM7CXBlcmNwdV9yZWZfZXhpdCgmYW1wO3Bvb2wtJmd0O3JlZik7CiByZWZfZmFpbDoKIAljcHVocF9zdGF0ZV9yZW1vdmVfaW5zdGFuY2UoQ1BVSFBfTU1fWlNXUF9QT09MX1BSRVBBUkUsICZhbXA7cG9vbC0mZ3Q7bm9kZSk7CiAKQEAgLTM3OSwzNyAmIzQzOzQxNSwyOSBAQCBzdGF0aWMgdm9pZCB6c3dhcF9wb29sX2Rlc3Ryb3koc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wpCiAKIHN0YXRpYyB2b2lkIF9fenN3YXBfcG9vbF9yZWxlYXNlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IGNvbnRhaW5lcl9vZih3b3JrLCB0eXBlb2YoKnBvb2wpLAotCQkJCQkJcmVsZWFzZV93b3JrKTsKLQotCXN5bmNocm9uaXplX3JjdSgpOwomIzQzOwlzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IGNvbnRhaW5lcl9vZih0b19yY3Vfd29yayh3b3JrKSwKJiM0MzsJCQkJCSAgICAgICB0eXBlb2YoKnBvb2wpLCByZWxlYXNlX3J3b3JrKTsKIAogCS8qIG5vYm9keSBzaG91bGQgaGF2ZSBiZWVuIGFibGUgdG8gZ2V0IGEgcmVmLi4uICovCiAJV0FSTl9PTighcGVyY3B1X3JlZl9pc196ZXJvKCZhbXA7cG9vbC0mZ3Q7cmVmKSk7CiAJcGVyY3B1X3JlZl9leGl0KCZhbXA7cG9vbC0mZ3Q7cmVmKTsKIAotCS8qIHBvb2wgaXMgbm93IG9mZiB6c3dhcF9wb29scyBsaXN0IGFuZCBoYXMgbm8gcmVmZXJlbmNlcy4gKi8KJiM0MzsJLyogVGhlIHBvb2wgaXMgbm8gbG9uZ2VyIGluIHpzd2FwX3Bvb2xzIGFuZCBoYXMgbm8gcmVmZXJlbmNlcy4gKi8KIAl6c3dhcF9wb29sX2Rlc3Ryb3kocG9vbCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jdXJyZW50KHZvaWQpOwotCiBzdGF0aWMgdm9pZCBfX3pzd2FwX3Bvb2xfZW1wdHkoc3RydWN0IHBlcmNwdV9yZWYgKnJlZikKIHsKIAlzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDsKIAogCXBvb2wgPSBjb250YWluZXJfb2YocmVmLCB0eXBlb2YoKnBvb2wpLCByZWYpOwogCi0Jc3Bpbl9sb2NrX2JoKCZhbXA7enN3YXBfcG9vbHNfbG9jayk7Ci0KLQlXQVJOX09OKHBvb2wgPT0genN3YXBfcG9vbF9jdXJyZW50KCkpOwomIzQzOwlXQVJOX09OKHBvb2wgPT0gcmN1X2FjY2Vzc19wb2ludGVyKHpzd2FwX2N1cnJlbnRfcG9vbCkpOwogCi0JbGlzdF9kZWxfcmN1KCZhbXA7cG9vbC0mZ3Q7bGlzdCk7CiYjNDM7CXhhX2VyYXNlX2JoKCZhbXA7enN3YXBfcG9vbHMsIHBvb2wtJmd0O2lkeCk7CiAKLQlJTklUX1dPUksoJmFtcDtwb29sLSZndDtyZWxlYXNlX3dvcmssIF9fenN3YXBfcG9vbF9yZWxlYXNlKTsKLQlzY2hlZHVsZV93b3JrKCZhbXA7cG9vbC0mZ3Q7cmVsZWFzZV93b3JrKTsKLQotCXNwaW5fdW5sb2NrX2JoKCZhbXA7enN3YXBfcG9vbHNfbG9jayk7CiYjNDM7CUlOSVRfUkNVX1dPUksoJmFtcDtwb29sLSZndDtyZWxlYXNlX3J3b3JrLCBfX3pzd2FwX3Bvb2xfcmVsZWFzZSk7CiYjNDM7CXF1ZXVlX3JjdV93b3JrKHN5c3RlbV9wZXJjcHVfd3EsICZhbXA7cG9vbC0mZ3Q7cmVsZWFzZV9yd29yayk7CiB9CiAKIHN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIHpzd2FwX3Bvb2xfdHJ5Z2V0KHN0cnVjdCB6c3dhcF9wb29sICpwb29sKQpAQCAtNDM1LDIwICYjNDM7NDYzLDEzIEBAIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqX196c3dhcF9wb29sX2N1cnJlbnQodm9pZCkKIHsKIAlzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDsKIAotCXBvb2wgPSBsaXN0X2ZpcnN0X29yX251bGxfcmN1KCZhbXA7enN3YXBfcG9vbHMsIHR5cGVvZigqcG9vbCksIGxpc3QpOwomIzQzOwlwb29sID0gcmN1X2RlcmVmZXJlbmNlKHpzd2FwX2N1cnJlbnRfcG9vbCk7CiAJV0FSTl9PTkNFKCFwb29sICZhbXA7JmFtcDsgenN3YXBfaGFzX3Bvb2wsCiAJCSAgJiMzNDslczogbm8gcGFnZSBzdG9yYWdlIHBvb2whXG4mIzM0OywgX19mdW5jX18pOwogCiAJcmV0dXJuIHBvb2w7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jdXJyZW50KHZvaWQpCi17Ci0JYXNzZXJ0X3NwaW5fbG9ja2VkKCZhbXA7enN3YXBfcG9vbHNfbG9jayk7Ci0KLQlyZXR1cm4gX196c3dhcF9wb29sX2N1cnJlbnQoKTsKLX0KLQogc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2N1cnJlbnRfZ2V0KHZvaWQpCiB7CiAJc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7CkBAIC00NjQsMjMgJiM0Mzs0ODUsMjggQEAgc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2N1cnJlbnRfZ2V0KHZvaWQpCiAJcmV0dXJuIHBvb2w7CiB9CiAKLS8qIHR5cGUgYW5kIGNvbXByZXNzb3IgbXVzdCBiZSBudWxsLXRlcm1pbmF0ZWQgKi8KJiM0MzsvKiBjb21wcmVzc29yIG11c3QgYmUgbnVsbC10ZXJtaW5hdGVkICovCiBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfZmluZF9nZXQoY2hhciAqY29tcHJlc3NvcikKIHsKIAlzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDsKJiM0MzsJdW5zaWduZWQgbG9uZyBpZDsKIAotCWFzc2VydF9zcGluX2xvY2tlZCgmYW1wO3pzd2FwX3Bvb2xzX2xvY2spOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9vbCwgJmFtcDt6c3dhcF9wb29scywgbGlzdCkgewomIzQzOwkvKgomIzQzOwkgKiBfX3pzd2FwX3Bvb2xfZW1wdHkoKSBjYW4gZXJhc2UgZnJvbSB6c3dhcF9wb29scyBpbiBzb2Z0aXJxIHdoaWxlIHdlCiYjNDM7CSAqIHdhbGsuICByY3VfcmVhZF9sb2NrKCkga2VlcHMgdGhlIHdhbGsgY29uc2lzdGVudCBhbmQgZWFjaCBwb29sIGFsaXZlCiYjNDM7CSAqIGFjcm9zcyB0cnlnZXQoKS4gIHhhX2Zvcl9lYWNoKCkmIzM5O3Mgb3duIFJDVSBkb2VzIG5vdCBzcGFuIHRoZSBsb29wIGJvZHkuCiYjNDM7CSAqLwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CXhhX2Zvcl9lYWNoKCZhbXA7enN3YXBfcG9vbHMsIGlkLCBwb29sKSB7CiAJCWlmIChzdHJjbXAocG9vbC0mZ3Q7dGZtX25hbWUsIGNvbXByZXNzb3IpKQogCQkJY29udGludWU7CiAJCS8qIGlmIHdlIGNhbiYjMzk7dCBnZXQgaXQsIGl0JiMzOTtzIGFib3V0IHRvIGJlIGRlc3Ryb3llZCAqLwotCQlpZiAoIXpzd2FwX3Bvb2xfdHJ5Z2V0KHBvb2wpKQotCQkJY29udGludWU7Ci0JCXJldHVybiBwb29sOwomIzQzOwkJaWYgKHpzd2FwX3Bvb2xfdHJ5Z2V0KHBvb2wpKQomIzQzOwkJCWJyZWFrOwogCX0KJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiAKLQlyZXR1cm4gTlVMTDsKJiM0MzsJcmV0dXJuIHBvb2w7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHpzd2FwX21heF9wYWdlcyh2b2lkKQpAQCAtNDk3LDkgJiM0Mzs1MjMsMTQgQEAgdW5zaWduZWQgbG9uZyB6c3dhcF90b3RhbF9wYWdlcyh2b2lkKQogewogCXN0cnVjdCB6c3dhcF9wb29sICpwb29sOwogCXVuc2lnbmVkIGxvbmcgdG90YWwgPSAwOwomIzQzOwl1bnNpZ25lZCBsb25nIGlkOwogCiYjNDM7CS8qCiYjNDM7CSAqIHJjdV9yZWFkX2xvY2soKSBrZWVwcyBlYWNoIHBvb2wgYWxpdmUgYWNyb3NzIHpzX2dldF90b3RhbF9wYWdlcygpLgomIzQzOwkgKiB4YV9mb3JfZWFjaCgpJiMzOTtzIG93biBSQ1UgZG9lcyBub3Qgc3BhbiB0aGUgbG9vcCBib2R5LgomIzQzOwkgKi8KIAlyY3VfcmVhZF9sb2NrKCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9vbCwgJmFtcDt6c3dhcF9wb29scywgbGlzdCkKJiM0MzsJeGFfZm9yX2VhY2goJmFtcDt6c3dhcF9wb29scywgaWQsIHBvb2wpCiAJCXRvdGFsICYjNDM7PSB6c19nZXRfdG90YWxfcGFnZXMocG9vbC0mZ3Q7enNfcG9vbCk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKQEAgLTU1NiwyMCAmIzQzOzU4NywxMyBAQCBzdGF0aWMgaW50IHpzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0KGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbQogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQlzcGluX2xvY2tfYmgoJmFtcDt6c3dhcF9wb29sc19sb2NrKTsKLQogCXBvb2wgPSB6c3dhcF9wb29sX2ZpbmRfZ2V0KHMpOwotCWlmIChwb29sKSB7CiYjNDM7CWlmICghcG9vbCkgewomIzQzOwkJcG9vbCA9IHpzd2FwX3Bvb2xfY3JlYXRlKHMpOwomIzQzOwl9IGVsc2UgewogCQl6c3dhcF9wb29sX2RlYnVnKCYjMzQ7dXNpbmcgZXhpc3RpbmcmIzM0OywgcG9vbCk7Ci0JCVdBUk5fT04ocG9vbCA9PSB6c3dhcF9wb29sX2N1cnJlbnQoKSk7Ci0JCWxpc3RfZGVsX3JjdSgmYW1wO3Bvb2wtJmd0O2xpc3QpOwotCX0KJiM0MzsJCVdBUk5fT04ocG9vbCA9PSByY3VfYWNjZXNzX3BvaW50ZXIoenN3YXBfY3VycmVudF9wb29sKSk7CiAKLQlzcGluX3VubG9ja19iaCgmYW1wO3pzd2FwX3Bvb2xzX2xvY2spOwotCi0JaWYgKCFwb29sKQotCQlwb29sID0genN3YXBfcG9vbF9jcmVhdGUocyk7Ci0JZWxzZSB7CiAJCS8qCiAJCSAqIFJlc3RvcmUgdGhlIGluaXRpYWwgcmVmIGRyb3BwZWQgYnkgcGVyY3B1X3JlZl9raWxsKCkKIAkJICogd2hlbiB0aGUgcG9vbCB3YXMgZGVjb21taXNzaW9uZWQgYW5kIHN3aXRjaCBpdCBhZ2FpbgpAQCAtNTg2LDI0ICYjNDM7NjEwLDE4IEBAIHN0YXRpYyBpbnQgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtCiAJZWxzZQogCQlyZXQgPSAtRUlOVkFMOwogCi0Jc3Bpbl9sb2NrX2JoKCZhbXA7enN3YXBfcG9vbHNfbG9jayk7Ci0KJiM0MzsJLyoKJiM0MzsJICogQ29tcHJlc3NvciBzd2l0Y2hlcyBhcmUgc2VyaWFsaXplZCBieSB0aGUga2VybmVsIHBhcmFtIGxvY2ssIHNvIHRoaXMKJiM0MzsJICogaXMgdGhlIG9ubHkgd3JpdGVyIG9mIHpzd2FwX2N1cnJlbnRfcG9vbDogbm8geGFfbG9jayBuZWVkZWQuCiYjNDM7CSAqLwogCWlmICghcmV0KSB7Ci0JCXB1dF9wb29sID0genN3YXBfcG9vbF9jdXJyZW50KCk7Ci0JCWxpc3RfYWRkX3JjdSgmYW1wO3Bvb2wtJmd0O2xpc3QsICZhbXA7enN3YXBfcG9vbHMpOwomIzQzOwkJcHV0X3Bvb2wgPSByY3VfYWNjZXNzX3BvaW50ZXIoenN3YXBfY3VycmVudF9wb29sKTsKJiM0MzsJCXJjdV9hc3NpZ25fcG9pbnRlcih6c3dhcF9jdXJyZW50X3Bvb2wsIHBvb2wpOwogCQl6c3dhcF9oYXNfcG9vbCA9IHRydWU7CiAJfSBlbHNlIGlmIChwb29sKSB7Ci0JCS8qCi0JCSAqIEFkZCB0aGUgcG9zc2libHkgcHJlLWV4aXN0aW5nIHBvb2wgdG8gdGhlIGVuZCBvZiB0aGUgcG9vbHMKLQkJICogbGlzdDsgaWYgaXQmIzM5O3MgbmV3IChhbmQgZW1wdHkpIHRoZW4gaXQmIzM5O2xsIGJlIHJlbW92ZWQgYW5kCi0JCSAqIGRlc3Ryb3llZCBieSB0aGUgcHV0IGFmdGVyIHdlIGRyb3AgdGhlIGxvY2sKLQkJICovCi0JCWxpc3RfYWRkX3RhaWxfcmN1KCZhbXA7cG9vbC0mZ3Q7bGlzdCwgJmFtcDt6c3dhcF9wb29scyk7CiAJCXB1dF9wb29sID0gcG9vbDsKIAl9CiAKLQlzcGluX3VubG9ja19iaCgmYW1wO3pzd2FwX3Bvb2xzX2xvY2spOwotCiAJLyoKIAkgKiBEcm9wIHRoZSByZWYgZnJvbSBlaXRoZXIgdGhlIG9sZCBjdXJyZW50IHBvb2wsCiAJICogb3IgdGhlIG5ldyBwb29sIHdlIGZhaWxlZCB0byBhZGQKQEAgLTc1MSw5ICYjNDM7NzY5LDEzIEBAIHN0YXRpYyB2b2lkIHpzd2FwX2VudHJ5X2NhY2hlX2ZyZWUoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSkKICAqLwogc3RhdGljIHZvaWQgenN3YXBfZW50cnlfZnJlZShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KQogewomIzQzOwlzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IHpzd2FwX2VudHJ5X3Bvb2woZW50cnkpOwomIzQzOwogCXpzd2FwX2xydV9kZWwoZW50cnkpOwotCXpzX2ZyZWUoZW50cnktJmd0O3Bvb2wtJmd0O3pzX3Bvb2wsIGVudHJ5LSZndDtoYW5kbGUpOwotCXpzd2FwX3Bvb2xfcHV0KGVudHJ5LSZndDtwb29sKTsKJiM0MzsJaWYgKCFXQVJOX09OX09OQ0UoIXBvb2wpKSB7CiYjNDM7CQl6c19mcmVlKHBvb2wtJmd0O3pzX3Bvb2wsIGVudHJ5LSZndDtoYW5kbGUpOwomIzQzOwkJenN3YXBfcG9vbF9wdXQocG9vbCk7CiYjNDM7CX0KIAlpZiAoZW50cnktJmd0O29iamNnKSB7CiAJCW9ial9jZ3JvdXBfdW5jaGFyZ2VfenN3YXAoZW50cnktJmd0O29iamNnLCBlbnRyeS0mZ3Q7bGVuZ3RoKTsKIAkJb2JqX2Nncm91cF9wdXQoZW50cnktJmd0O29iamNnKTsKQEAgLTkxMCwxMiAmIzQzOzkzMiwxNSBAQCBzdGF0aWMgYm9vbCB6c3dhcF9jb21wcmVzcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwKIAogc3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewotCXN0cnVjdCB6c3dhcF9wb29sICpwb29sID0gZW50cnktJmd0O3Bvb2w7CiYjNDM7CXN0cnVjdCB6c3dhcF9wb29sICpwb29sID0genN3YXBfZW50cnlfcG9vbChlbnRyeSk7CiAJc3RydWN0IHNjYXR0ZXJsaXN0IGlucHV0WzJdOyAvKiB6c21hbGxvYyByZXR1cm5zIGFuIFNHIGxpc3QgMS0yIGVudHJpZXMgKi8KIAlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgb3V0cHV0OwogCXN0cnVjdCBjcnlwdG9fYWNvbXBfY3R4ICphY29tcF9jdHg7CiAJaW50IHJldCA9IDAsIGRsZW47CiAKJiM0MzsJaWYgKFdBUk5fT05fT05DRSghcG9vbCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiAJYWNvbXBfY3R4ID0gcmF3X2NwdV9wdHIocG9vbC0mZ3Q7YWNvbXBfY3R4KTsKIAltdXRleF9sb2NrKCZhbXA7YWNvbXBfY3R4LSZndDttdXRleCk7CiAJenNfb2JqX3JlYWRfc2dfYmVnaW4ocG9vbC0mZ3Q7enNfcG9vbCwgZW50cnktJmd0O2hhbmRsZSwgaW5wdXQsIGVudHJ5LSZndDtsZW5ndGgpOwpAQCAtOTUxLDcgJiM0Mzs5NzYsNyBAQCBzdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJcHJfYWxlcnRfcmF0ZWxpbWl0ZWQoJiMzNDtEZWNvbXByZXNzaW9uIGVycm9yIGZyb20genN3YXAgKCVkOiVsdSAlcyAldS0mZ3Q7JWQpXG4mIzM0OywKIAkJCQkJCXN3cF90eXBlKGVudHJ5LSZndDtzd3BlbnRyeSksCiAJCQkJCQlzd3Bfb2Zmc2V0KGVudHJ5LSZndDtzd3BlbnRyeSksCi0JCQkJCQllbnRyeS0mZ3Q7cG9vbC0mZ3Q7dGZtX25hbWUsCiYjNDM7CQkJCQkJcG9vbC0mZ3Q7dGZtX25hbWUsCiAJCQkJCQllbnRyeS0mZ3Q7bGVuZ3RoLCBkbGVuKTsKIAlyZXR1cm4gZmFsc2U7CiB9CkBAIC0xNDA5LDYgJiM0MzsxNDM0LDEzIEBAIHN0YXRpYyBib29sIHpzd2FwX3N0b3JlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsCiAJaWYgKCF6c3dhcF9jb21wcmVzcyhwYWdlLCBlbnRyeSwgcG9vbCkpCiAJCWdvdG8gY29tcHJlc3NfZmFpbGVkOwogCiYjNDM7CS8qCiYjNDM7CSAqIFNldCBwb29sX2lkeCBiZWZvcmUgdGhlIHhhX3N0b3JlKCkgYmVsb3cgcHVibGlzaGVzIHRoZSBlbnRyeSwgb3IgYQomIzQzOwkgKiBjb25jdXJyZW50IHJlYWRlciBjb3VsZCByZXNvbHZlIGEgc3RhbGUgcG9vbF9pZHggbGVmdCBieSBzbGFiIHJldXNlCiYjNDM7CSAqIHRvIGFuIHVucmVsYXRlZCBsaXZlIHBvb2wuCiYjNDM7CSAqLwomIzQzOwllbnRyeS0mZ3Q7cG9vbF9pZHggPSBwb29sLSZndDtpZHg7CiYjNDM7CiAJb2xkID0geGFfc3RvcmUoc3dhcF96c3dhcF90cmVlKHBhZ2Vfc3dwZW50cnkpLAogCQkgICAgICAgc3dwX29mZnNldChwYWdlX3N3cGVudHJ5KSwKIAkJICAgICAgIGVudHJ5LCBHRlBfS0VSTkVMKTsKQEAgLTE0NTQsNyAmIzQzOzE0ODYsNiBAQCBzdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLAogCSAqICAgIFRoZSBwdWJsaXNoaW5nIG9yZGVyIG1hdHRlcnMgdG8gcHJldmVudCB3cml0ZWJhY2sgZnJvbSBzZWVpbmcKIAkgKiAgICBhbiBpbmNvaGVyZW50IGVudHJ5LgogCSAqLwotCWVudHJ5LSZndDtwb29sID0gcG9vbDsKIAllbnRyeS0mZ3Q7c3dwZW50cnkgPSBwYWdlX3N3cGVudHJ5OwogCWVudHJ5LSZndDtvYmpjZyA9IG9iamNnOwogCWVudHJ5LSZndDtyZWZlcmVuY2VkID0gdHJ1ZTsKQEAgLTE3OTAsNyAmIzQzOzE4MjEsNyBAQCBzdGF0aWMgaW50IHpzd2FwX3NldHVwKHZvaWQpCiAJcG9vbCA9IF9fenN3YXBfcG9vbF9jcmVhdGVfZmFsbGJhY2soKTsKIAlpZiAocG9vbCkgewogCQlwcl9pbmZvKCYjMzQ7bG9hZGVkIHVzaW5nIHBvb2wgJXNcbiYjMzQ7LCBwb29sLSZndDt0Zm1fbmFtZSk7Ci0JCWxpc3RfYWRkKCZhbXA7cG9vbC0mZ3Q7bGlzdCwgJmFtcDt6c3dhcF9wb29scyk7CiYjNDM7CQlyY3VfYXNzaWduX3BvaW50ZXIoenN3YXBfY3VycmVudF9wb29sLCBwb29sKTsKIAkJenN3YXBfaGFzX3Bvb2wgPSB0cnVlOwogCQlzdGF0aWNfYnJhbmNoX2VuYWJsZSgmYW1wO3pzd2FwX2V2ZXJfZW5hYmxlZCk7CiAJfSBlbHNlIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIwOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0MTAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBac3dhcCBQYXRjaDogTWVtb3J5IFNhZmV0eSBhbmQgQ29uY3VycmVuY3kgSW1wbGljYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIHJlZmFjdG9yaW5nIG9mIGB6c3dhcF9wb29sYCBtYW5hZ2VtZW50IGludHJvZHVjZXMgb3IgZXhhY2VyYmF0ZXMgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBzcGVjaWZpY2FsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgZGV0ZWN0YWJsZSBieSBLTVNBTi4gSSBhbHNvIG5lZWQgdG8gYXNzZXNzIGlmIHRoaXMgaXMgcHJpbWFyaWx5IGEgbWF0dGVyIG9mIGNvbmN1cnJlbmN5LCBsaWZlY3ljbGUgbWFuYWdlbWVudCwgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZXMgdGhhdCBtaWdodCB0cmlnZ2VyIEtBU0FOIG9yIExPQ0tERVAgY29uY2VybnMuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgY29kZSBjaGFuZ2VzLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIHJlcGxhY2luZyB0aGUgZXhpc3RpbmcgbGlua2VkIGxpc3QgYHpzd2FwX3Bvb2xzYCB3aXRoIGFuIFhBcnJheSBhbmQgdXNpbmcgYW4gUkNVIHBvaW50ZXIgZm9yIGB6c3dhcF9jdXJyZW50X3Bvb2xgLiBJbnRlcmVzdGluZy4gVGhleSYjMzk7cmUgYWxzbyBzd2FwcGluZyB0aGUgYGVudHJ5LSZndDtwb29sYCBwb2ludGVyIHdpdGhpbiB0aGUgYHpzd2FwX2VudHJ5YCBzdHJ1Y3R1cmUgd2l0aCBhIGB1OCBwb29sX2lkeGAsIGFjdGluZyBhcyBhbiBpbmRleCBpbnRvIHRoZSBgenN3YXBfcG9vbHNgIFhBcnJheS4gVGhpcyBpcyBmb2xsb3dlZCBieSB1c2luZyBgenN3YXBfZW50cnlfcG9vbChlbnRyeSlgIHRvIGxvb2sgdXAgdGhlIHBvb2wgdXNpbmcgYHhhX2xvYWRgLgoKTm93LCB0aGUgY3JpdGljYWwgcGFydDogSSBuZWVkIHRvIHRob3JvdWdobHkgZXhhbWluZSB0aGUgYWxsb2NhdGlvbiBhbmQgdXNhZ2Ugb2YgYHpzd2FwX2VudHJ5YC4gR2l2ZW4gdGhpcyBgcG9vbF9pZHhgIGFwcHJvYWNoLCBJIG5lZWQgdG8gZW5zdXJlIGl0JiMzOTtzIGluaXRpYWxpemVkIGNvcnJlY3RseSBhbmQgdGhhdCB0aGVyZSBhcmVuJiMzOTt0IGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGR1cmluZyBhY2Nlc3MuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb2RlIHNlY3Rpb25zIGluIGBtbS96c3dhcC5jYC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHpzd2FwX3Bvb2xfY3JlYXRlYCwgYF9fenN3YXBfcG9vbF9yZWxlYXNlYCwgYF9fenN3YXBfcG9vbF9lbXB0eWAsIGB6c3dhcF9wb29sX2ZpbmRfZ2V0YCwgYW5kIHRoZSBvdGhlciBmdW5jdGlvbnMgYXJlIGltcGFjdGVkIGJ5IHRoZXNlIGNoYW5nZXMuIFRoaXMgaGFzIHRoZSBwb3RlbnRpYWwgdG8gaW50cm9kdWNlIHN1YnRsZSBpc3N1ZXMgYXJvdW5kIHRoZSBsaWZlY3ljbGUgb2YgdGhlc2UgcG9vbHMsIGFuZCBJIG5lZWQgdG8gYmUgY2VydGFpbiB0aGF0IHRoZSBpbmRpY2VzIGFyZSBtYW5hZ2VkIHByb3Blcmx5LiBUaGlzIGlzIGNydWNpYWwgZm9yIGJvdGggY29ycmVjdG5lc3MgYW5kIHBlcmZvcm1hbmNlLiBGaW5hbGx5LCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2Ugb24gdGhlIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHJvdXRpbmVzIGxpa2UgYHpzd2FwX2RlY29tcHJlc3NgLCBgenN3YXBfc3RvcmVfcGFnZWAsIGFuZCB0aGUgc2V0dXAgcm91dGluZXMgc3VjaCBhcyBgenN3YXBfc2V0dXBgLiBUaGUgZ29hbCBoZXJlIGlzIHRvIG1ha2Ugc3VyZSBhbGwgbWVtb3J5IGFjY2Vzc2VzIGFyZSB2YWxpZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjA6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7enN3YXBfZW50cnlfY2FjaGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS96c3dhcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3pzd2FwLmM9NzM1PXZvaWQgenN3YXBfbWVtY2dfb2ZmbGluZV9jbGVhbnVwKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS96c3dhcC5jLTc0OS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xubW0venN3YXAuYzo3NTA6c3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICp6c3dhcF9lbnRyeV9jYWNoZTtcbm1tL3pzd2FwLmMtNzUxLVxubW0venN3YXAuYzo3NTI6c3RhdGljIHN0cnVjdCB6c3dhcF9lbnRyeSAqenN3YXBfZW50cnlfY2FjaGVfYWxsb2MoZ2ZwX3QgZ2ZwLCBpbnQgbmlkKVxubW0venN3YXAuYy03NTMte1xubW0venN3YXAuYy03NTQtXHRzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5O1xubW0venN3YXAuYzo3NTU6XHRlbnRyeSA9IGttZW1fY2FjaGVfYWxsb2Nfbm9kZSh6c3dhcF9lbnRyeV9jYWNoZSwgZ2ZwLCBuaWQpO1xubW0venN3YXAuYy03NTYtXHRpZiAoIWVudHJ5KVxuLS1cbm1tL3pzd2FwLmMtNzYwLVxubW0venN3YXAuYzo3NjE6c3RhdGljIHZvaWQgenN3YXBfZW50cnlfY2FjaGVfZnJlZShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxubW0venN3YXAuYy03NjIte1xubW0venN3YXAuYzo3NjM6XHRrbWVtX2NhY2hlX2ZyZWUoenN3YXBfZW50cnlfY2FjaGUsIGVudHJ5KTtcbm1tL3pzd2FwLmMtNzY0LX1cbi0tXG5tbS96c3dhcC5jPTc3MD1zdGF0aWMgdm9pZCB6c3dhcF9lbnRyeV9mcmVlKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXG4tLVxubW0venN3YXAuYy03ODQtXHRcdGF0b21pY19sb25nX2RlYyhcdTAwMjZ6c3dhcF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXMpO1xubW0venN3YXAuYzo3ODU6XHR6c3dhcF9lbnRyeV9jYWNoZV9mcmVlKGVudHJ5KTtcbm1tL3pzd2FwLmMtNzg2LVx0YXRvbWljX2xvbmdfZGVjKFx1MDAyNnpzd2FwX3N0b3JlZF9wYWdlcyk7XG4tLVxubW0venN3YXAuYz0xNDIwPXN0YXRpYyBib29sIHpzd2FwX3N0b3JlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxubW0venN3YXAuYy0xNDI3LVx0LyogYWxsb2NhdGUgZW50cnkgKi9cbm1tL3pzd2FwLmM6MTQyODpcdGVudHJ5ID0genN3YXBfZW50cnlfY2FjaGVfYWxsb2MoR0ZQX0tFUk5FTCwgcGFnZV90b19uaWQocGFnZSkpO1xubW0venN3YXAuYy0xNDI5LVx0aWYgKCFlbnRyeSkge1xuLS1cbm1tL3pzd2FwLmMtMTUwMS1jb21wcmVzc19mYWlsZWQ6XG5tbS96c3dhcC5jOjE1MDI6XHR6c3dhcF9lbnRyeV9jYWNoZV9mcmVlKGVudHJ5KTtcbm1tL3pzd2FwLmMtMTUwMy1cdHJldHVybiBmYWxzZTtcbi0tXG5tbS96c3dhcC5jPTE3ODk9c3RhdGljIGludCB6c3dhcF9zZXR1cCh2b2lkKVxuLS1cbm1tL3pzd2FwLmMtMTc5My1cbm1tL3pzd2FwLmM6MTc5NDpcdHpzd2FwX2VudHJ5X2NhY2hlID0gS01FTV9DQUNIRSh6c3dhcF9lbnRyeSwgMCk7XG5tbS96c3dhcC5jOjE3OTU6XHRpZiAoIXpzd2FwX2VudHJ5X2NhY2hlKSB7XG5tbS96c3dhcC5jLTE3OTYtXHRcdHByX2VycihcJiMzNDtlbnRyeSBjYWNoZSBjcmVhdGlvbiBmYWlsZWRcXG5cJiMzNDspO1xuLS1cbm1tL3pzd2FwLmMtMTg0My1ocF9mYWlsOlxubW0venN3YXAuYzoxODQ0Olx0a21lbV9jYWNoZV9kZXN0cm95KHpzd2FwX2VudHJ5X2NhY2hlKTtcbm1tL3pzd2FwLmMtMTg0NS1jYWNoZV9mYWlsOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMDoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTgzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIGNvZGUgaW52ZXN0aWdhdGlvbiwgdGhpbmtpbmcgdGhyb3VnaCBpdCBzdGVwLWJ5LXN0ZXA6CgoqKkFuYWx5emluZyBgenN3YXBfc3RvcmVfcGFnZWAgSW5pdGlhbGl6YXRpb24qKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aCBgenN3YXBfc3RvcmVfcGFnZWAuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoYXQgc3BlY2lmaWMgYmxvY2sgb2YgY29kZSwgcm91Z2hseSBsaW5lcyAxNDIwIHRvIDE1MDAuIE15IGdvYWwgaXMgdG8gbWFwIG91dCB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBtZXRpY3Vsb3VzbHkuIEkgd2FudCB0byBrbm93IGV4YWN0bHkgd2hpY2ggZGF0YSBmaWVsZHMgYXJlIGJlaW5nIHNldCB1cCwgYW5kIGp1c3QgYXMgY3JpdGljYWxseSwgd2hlbiBhbmQgaG93IHRoYXQgaW5pdGlhbGl6YXRpb24gb2NjdXJzLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBzZXF1ZW5jZSBvZiBldmVudHMgaGVyZS4gVW5kZXJzdGFuZGluZyB0aGUgb3JkZXIgaW4gd2hpY2ggdGhpbmdzIGFyZSBjb25maWd1cmVkIGlzIG9mdGVuIGtleSB0byBkZWJ1Z2dpbmcgb3IgbW9kaWZ5aW5nIHRoaXMga2luZCBvZiBjb2RlLiBBbnkgc3VidGxlIGRlcGVuZGVuY2llcyBvciBzaWRlIGVmZmVjdHMgaW4gdGhhdCBzZWN0aW9uIGFyZSBpbXBvcnRhbnQuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYW55IGhpZGRlbiBnb3RjaGFzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3pzd2FwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0MjA6XHRzdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxuMTQyMTpcdFx0XHRcdCAgICAgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxuMTQyMjpcdFx0XHRcdCAgICAgc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wpXG4xNDIzOlx0e1xuMTQyNDpcdFx0c3dwX2VudHJ5X3QgcGFnZV9zd3BlbnRyeSA9IHBhZ2Vfc3dhcF9lbnRyeShwYWdlKTtcbjE0MjU6XHRcdHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksICpvbGQ7XG4xNDI2Olx0XG4xNDI3Olx0XHQvKiBhbGxvY2F0ZSBlbnRyeSAqL1xuMTQyODpcdFx0ZW50cnkgPSB6c3dhcF9lbnRyeV9jYWNoZV9hbGxvYyhHRlBfS0VSTkVMLCBwYWdlX3RvX25pZChwYWdlKSk7XG4xNDI5Olx0XHRpZiAoIWVudHJ5KSB7XG4xNDMwOlx0XHRcdHpzd2FwX3JlamVjdF9rbWVtY2FjaGVfZmFpbCYjNDM7JiM0Mzs7XG4xNDMxOlx0XHRcdHJldHVybiBmYWxzZTtcbjE0MzI6XHRcdH1cbjE0MzM6XHRcbjE0MzQ6XHRcdGlmICghenN3YXBfY29tcHJlc3MocGFnZSwgZW50cnksIHBvb2wpKVxuMTQzNTpcdFx0XHRnb3RvIGNvbXByZXNzX2ZhaWxlZDtcbjE0MzY6XHRcbjE0Mzc6XHRcdC8qXG4xNDM4Olx0XHQgKiBTZXQgcG9vbF9pZHggYmVmb3JlIHRoZSB4YV9zdG9yZSgpIGJlbG93IHB1Ymxpc2hlcyB0aGUgZW50cnksIG9yIGFcbjE0Mzk6XHRcdCAqIGNvbmN1cnJlbnQgcmVhZGVyIGNvdWxkIHJlc29sdmUgYSBzdGFsZSBwb29sX2lkeCBsZWZ0IGJ5IHNsYWIgcmV1c2VcbjE0NDA6XHRcdCAqIHRvIGFuIHVucmVsYXRlZCBsaXZlIHBvb2wuXG4xNDQxOlx0XHQgKi9cbjE0NDI6XHRcdGVudHJ5LVx1MDAzZXBvb2xfaWR4ID0gcG9vbC1cdTAwM2VpZHg7XG4xNDQzOlx0XG4xNDQ0Olx0XHRvbGQgPSB4YV9zdG9yZShzd2FwX3pzd2FwX3RyZWUocGFnZV9zd3BlbnRyeSksXG4xNDQ1Olx0XHRcdCAgICAgICBzd3Bfb2Zmc2V0KHBhZ2Vfc3dwZW50cnkpLFxuMTQ0NjpcdFx0XHQgICAgICAgZW50cnksIEdGUF9LRVJORUwpO1xuMTQ0NzpcdFx0aWYgKHhhX2lzX2VycihvbGQpKSB7XG4xNDQ4Olx0XHRcdGludCBlcnIgPSB4YV9lcnIob2xkKTtcbjE0NDk6XHRcbjE0NTA6XHRcdFx0V0FSTl9PTkNFKGVyciAhPSAtRU5PTUVNLCBcJiMzNDt1bmV4cGVjdGVkIHhhcnJheSBlcnJvcjogJWRcXG5cJiMzNDssIGVycik7XG4xNDUxOlx0XHRcdHpzd2FwX3JlamVjdF9hbGxvY19mYWlsJiM0MzsmIzQzOztcbjE0NTI6XHRcdFx0Z290byBzdG9yZV9mYWlsZWQ7XG4xNDUzOlx0XHR9XG4xNDU0Olx0XG4xNDU1Olx0XHQvKlxuMTQ1NjpcdFx0ICogV2UgbWF5IGhhdmUgaGFkIGFuIGV4aXN0aW5nIGVudHJ5IHRoYXQgYmVjYW1lIHN0YWxlIHdoZW5cbjE0NTc6XHRcdCAqIHRoZSBmb2xpbyB3YXMgcmVkaXJ0aWVkIGFuZCBub3cgdGhlIG5ldyB2ZXJzaW9uIGlzIGJlaW5nXG4xNDU4Olx0XHQgKiBzd2FwcGVkIG91dC4gR2V0IHJpZCBvZiB0aGUgb2xkLlxuMTQ1OTpcdFx0ICovXG4xNDYwOlx0XHRpZiAob2xkKVxuMTQ2MTpcdFx0XHR6c3dhcF9lbnRyeV9mcmVlKG9sZCk7XG4xNDYyOlx0XG4xNDYzOlx0XHQvKlxuMTQ2NDpcdFx0ICogVGhlIGVudHJ5IGlzIHN1Y2Nlc3NmdWxseSBjb21wcmVzc2VkIGFuZCBzdG9yZWQgaW4gdGhlIHRyZWUsIHRoZXJlIGlzXG4xNDY1Olx0XHQgKiBubyBmdXJ0aGVyIHBvc3NpYmlsaXR5IG9mIGZhaWx1cmUuIEdyYWIgcmVmcyB0byB0aGUgcG9vbCBhbmQgb2JqY2csXG4xNDY2Olx0XHQgKiBjaGFyZ2UgenN3YXAgbWVtb3J5LCBhbmQgaW5jcmVtZW50IHpzd2FwX3N0b3JlZF9wYWdlcy5cbjE0Njc6XHRcdCAqIFRoZSBvcHBvc2l0ZSBhY3Rpb25zIHdpbGwgYmUgcGVyZm9ybWVkIGJ5IHpzd2FwX2VudHJ5X2ZyZWUoKVxuMTQ2ODpcdFx0ICogd2hlbiB0aGUgZW50cnkgaXMgcmVtb3ZlZCBmcm9tIHRoZSB0cmVlLlxuMTQ2OTpcdFx0ICovXG4xNDcwOlx0XHR6c3dhcF9wb29sX2dldChwb29sKTtcbjE0NzE6XHRcdGlmIChvYmpjZykge1xuMTQ3MjpcdFx0XHRvYmpfY2dyb3VwX2dldChvYmpjZyk7XG4xNDczOlx0XHRcdG9ial9jZ3JvdXBfY2hhcmdlX3pzd2FwKG9iamNnLCBlbnRyeS1cdTAwM2VsZW5ndGgpO1xuMTQ3NDpcdFx0fVxuMTQ3NTpcdFx0YXRvbWljX2xvbmdfaW5jKFx1MDAyNnpzd2FwX3N0b3JlZF9wYWdlcyk7XG4xNDc2Olx0XHRpZiAoZW50cnktXHUwMDNlbGVuZ3RoID09IFBBR0VfU0laRSlcbjE0Nzc6XHRcdFx0YXRvbWljX2xvbmdfaW5jKFx1MDAyNnpzd2FwX3N0b3JlZF9pbmNvbXByZXNzaWJsZV9wYWdlcyk7XG4xNDc4Olx0XG4xNDc5Olx0XHQvKlxuMTQ4MDpcdFx0ICogV2UgZmluaXNoIGluaXRpYWxpemluZyB0aGUgZW50cnkgd2hpbGUgaXQmIzM5O3MgYWxyZWFkeSBpbiB4YXJyYXkuXG4xNDgxOlx0XHQgKiBUaGlzIGlzIHNhZmUgYmVjYXVzZTpcbjE0ODI6XHRcdCAqXG4xNDgzOlx0XHQgKiAxLiBDb25jdXJyZW50IHN0b3JlcyBhbmQgaW52YWxpZGF0aW9ucyBhcmUgZXhjbHVkZWQgYnkgZm9saW8gbG9jay5cbjE0ODQ6XHRcdCAqXG4xNDg1Olx0XHQgKiAyLiBXcml0ZWJhY2sgaXMgZXhjbHVkZWQgYnkgdGhlIGVudHJ5IG5vdCBiZWluZyBvbiB0aGUgTFJVIHlldC5cbjE0ODY6XHRcdCAqICAgIFRoZSBwdWJsaXNoaW5nIG9yZGVyIG1hdHRlcnMgdG8gcHJldmVudCB3cml0ZWJhY2sgZnJvbSBzZWVpbmdcbjE0ODc6XHRcdCAqICAgIGFuIGluY29oZXJlbnQgZW50cnkuXG4xNDg4Olx0XHQgKi9cbjE0ODk6XHRcdGVudHJ5LVx1MDAzZXN3cGVudHJ5ID0gcGFnZV9zd3BlbnRyeTtcbjE0OTA6XHRcdGVudHJ5LVx1MDAzZW9iamNnID0gb2JqY2c7XG4xNDkxOlx0XHRlbnRyeS1cdTAwM2VyZWZlcmVuY2VkID0gdHJ1ZTtcbjE0OTI6XHRcdGlmIChlbnRyeS1cdTAwM2VsZW5ndGgpIHtcbjE0OTM6XHRcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZW50cnktXHUwMDNlbHJ1KTtcbjE0OTQ6XHRcdFx0enN3YXBfbHJ1X2FkZChlbnRyeSk7XG4xNDk1Olx0XHR9XG4xNDk2Olx0XG4xNDk3Olx0XHRyZXR1cm4gdHJ1ZTtcbjE0OTg6XHRcbjE0OTk6XHRzdG9yZV9mYWlsZWQ6XG4xNTAwOlx0XHR6c19mcmVlKHBvb2wtXHUwMDNlenNfcG9vbCwgZW50cnktXHUwMDNlaGFuZGxlKTtcbjE1MDE6XHRjb21wcmVzc19mYWlsZWQ6XG4xNTAyOlx0XHR6c3dhcF9lbnRyeV9jYWNoZV9mcmVlKGVudHJ5KTtcbjE1MDM6XHRcdHJldHVybiBmYWxzZTtcbjE1MDQ6XHR9XG4xNTA1Olx0XG4xNTA2Olx0Ym9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuMTUwNzpcdHtcbjE1MDg6XHRcdGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4xNTA5Olx0XHRzd3BfZW50cnlfdCBzd3AgPSBmb2xpby1cdTAwM2Vzd2FwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMDoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTc4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWnN3YXAgUG9vbCBJbmRleCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJbiB0aGUgYHpzd2FwX3N0b3JlX3BhZ2VgIGZ1bmN0aW9uLCBiZWZvcmUgdGhpcyBwYXRjaCwgd2Ugd2VyZSBzZXR0aW5nIHRoZSBgZW50cnktJmd0O2hhbmRsZWAgYW5kIGBlbnRyeS0mZ3Q7bGVuZ3RoYCB3aXRoaW4gYHpzd2FwX2NvbXByZXNzYC4gVGhlbiwgdGhlIGBlbnRyeS0mZ3Q7cG9vbGAgcG9pbnRlciB3YXMgYXNzaWduZWQgKmFmdGVyKiB0aGUgYHhhX3N0b3JlYCBjYWxsLCBzcGVjaWZpY2FsbHkgb24gbGluZSAxNDU3LiBUaGlzIHBhdGNoIGFsdGVycyB0aGF0IHNlcXVlbmNlLiBOb3csIHdlJiMzOTtyZSBzZXR0aW5nIGBlbnRyeS0mZ3Q7cG9vbF9pZHhgICh3aGljaCwgaW1wb3J0YW50bHksIGlzIGp1c3QgYSBgdThgIG5vdykgKmJlZm9yZSogdGhlIGB4YV9zdG9yZWAuIFRoZSBvdGhlciBmaWVsZHMsIGxpa2UgYGVudHJ5LSZndDtzd3BlbnRyeWAsIGBlbnRyeS0mZ3Q7b2JqY2dgLCBgZW50cnktJmd0O3JlZmVyZW5jZWRgLCBhbmQgYGVudHJ5LSZndDtscnVgLCByZW1haW4gaW5pdGlhbGl6ZWQgYXMgdGhleSB3ZXJlIGJlZm9yZS4gQW5kIG5vdywgdGhlIGB6c3dhcF9lbnRyeV9wb29sKGVudHJ5KWAgZnVuY3Rpb24gdXNlcyBgeGFfbG9hZCgmYW1wO3pzd2FwX3Bvb2xzLCBlbnRyeS0mZ3Q7cG9vbF9pZHgpYCB0byByZXRyaWV2ZSB0aGUgcG9vbC4KClRoZSBwcmltYXJ5IGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgbWVtb3J5IHNhZmV0eS4gV2UgbmVlZCB0byBjb25maXJtIHRoYXQgbm8gdXNlci1zcGFjZSBkYXRhIGlzIGV4cG9zZWQgb3IgdGhhdCB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBpbmFkdmVydGVudGx5IHJlYWQuIERvZXMgenN3YXAgaXRzZWxmIGNvcHkgYW55dGhpbmcgdG8gdXNlciBzcGFjZT8gTm8sIGl0IGNvbXByZXNzZXMgYW5kIGRlY29tcHJlc3NlcyBzd2FwIHBhZ2VzICp3aXRoaW4qIGtlcm5lbCBtZW1vcnkuIER1cmluZyBzd2FwLWluLCBgenN3YXBfbG9hZGAgZGVjb21wcmVzc2VzIHRoZSBjb21wcmVzc2VkIGRhdGEgYmFjayBpbnRvIHRoZSBmb2xpby9wYWdlLiBUaGF0JiMzOTtzIGdvb2QuCgpUaGUgc3dpdGNoIGZyb20gYSBmdWxsIHBvaW50ZXIgdG8gYW4gaW5kZXggKGB1OCBwb29sX2lkeGApIHNob3VsZCB0cmFuc2xhdGUgdG8gYSA3LWJ5dGUgc2F2aW5nIGluIHRoZSBgc3RydWN0IHpzd2FwX2VudHJ5YCBzdHJ1Y3R1cmUgKGZyb20gZWl0aGVyIDQ4IG9yIDU2IGJ5dGVzLCBkZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZSkuICBUaGF0JiMzOTtzIGEgbmljZSBsaXR0bGUgb3B0aW1pemF0aW9uLiAgQ3J1Y2lhbGx5LCBgc3RydWN0IHpzd2FwX3Bvb2xgIGlzIGludGVybmFsIHRvIHRoZSBrZXJuZWwsIGFuZCBzbyBpcyBgc3RydWN0IHpzd2FwX2VudHJ5YC4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgYHpzd2FwX3Bvb2xfY3JlYXRlYC4gIFNwZWNpZmljYWxseSBhdCB0aGUgYWxsb2NhdGlvbjoKYGBgYwoJcmV0ID0geGFfYWxsb2NfYmgoJmFtcDt6c3dhcF9wb29scywgJmFtcDtpZCwgcG9vbCwKCQkJICBYQV9MSU1JVChaU1dBUF9GSVJTVF9QT09MX0lELCBaU1dBUF9NQVhfUE9PTF9JRCksCgkJCSAgR0ZQX0tFUk5FTCk7CglpZiAocmV0KSB7Ci4uLgoJcG9vbC0mZ3Q7aWR4ID0gaWQ7CmBgYApIZXJlLCBgcG9vbGAgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jKHNpemVvZigqcG9vbCksIEdGUF9LRVJORUwpO2AuICBXZSBjYW4gdmVyaWZ5IHRoYXQgbGluZSAzMDUgc3BlY2lmaWNhbGx5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBpbmRleCBpcyBjb3JyZWN0bHkgYXNzaWduZWQgYXQgY3JlYXRpb24uIFRoaXMgbG9va3Mgc29saWQgaW4gdGhlIHByb3ZpZGVkIGNvZGUgc25pcHBldC4gSSYjMzk7bGwgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSBjb2RlIGFnYWluIGZvciBhbnkgaXNzdWVzIGFyb3VuZCBob3cgdGhlIHBvb2wgaW5kZXggaXMgYmVpbmcgdXNlZCwgYnV0IGl0IHNlZW1zIHNvdW5kIHNvIGZhci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjA6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS96c3dhcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyOTU6XHRcdGludCByZXQsIGNwdTtcbiAyOTY6XHRcdHUzMiBpZDtcbiAyOTc6XHRcbiAyOTg6XHRcdGlmICghenN3YXBfaGFzX3Bvb2wgXHUwMDI2XHUwMDI2ICFzdHJjbXAoY29tcHJlc3NvciwgWlNXQVBfUEFSQU1fVU5TRVQpKVxuIDI5OTpcdFx0XHRyZXR1cm4gTlVMTDtcbiAzMDA6XHRcbiAzMDE6XHRcdHBvb2wgPSBremFsbG9jX29iaigqcG9vbCk7XG4gMzAyOlx0XHRpZiAoIXBvb2wpXG4gMzAzOlx0XHRcdHJldHVybiBOVUxMO1xuIDMwNDpcdFxuIDMwNTpcdFx0LyogdW5pcXVlIG5hbWUgZm9yIGVhY2ggcG9vbCBzcGVjaWZpY2FsbHkgcmVxdWlyZWQgYnkgenNtYWxsb2MgKi9cbiAzMDY6XHRcdHNucHJpbnRmKG5hbWUsIDM4LCBcJiMzNDt6c3dhcCV4XCYjMzQ7LCBhdG9taWNfaW5jX3JldHVybihcdTAwMjZ6c3dhcF9wb29sc19jb3VudCkpO1xuIDMwNzpcdFx0cG9vbC1cdTAwM2V6c19wb29sID0genNfY3JlYXRlX3Bvb2wobmFtZSk7XG4gMzA4Olx0XHRpZiAoIXBvb2wtXHUwMDNlenNfcG9vbClcbiAzMDk6XHRcdFx0Z290byBlcnJvcjtcbiAzMTA6XHRcbiAzMTE6XHRcdHN0cnNjcHkocG9vbC1cdTAwM2V0Zm1fbmFtZSwgY29tcHJlc3Nvciwgc2l6ZW9mKHBvb2wtXHUwMDNldGZtX25hbWUpKTtcbiAzMTI6XHRcbiAzMTM6XHRcdC8qIE1hbnkgdGhpbmdzIHJlbHkgb24gdGhlIHplcm8taW5pdGlhbGl6YXRpb24uICovXG4gMzE0Olx0XHRwb29sLVx1MDAzZWFjb21wX2N0eCA9IGFsbG9jX3BlcmNwdV9nZnAoKnBvb2wtXHUwMDNlYWNvbXBfY3R4LFxuIDMxNTpcdFx0XHRcdFx0XHQgICBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7XG4gMzE2Olx0XHRpZiAoIXBvb2wtXHUwMDNlYWNvbXBfY3R4KSB7XG4gMzE3Olx0XHRcdHByX2VycihcJiMzNDtwZXJjcHUgYWxsb2MgZmFpbGVkXFxuXCYjMzQ7KTtcbiAzMTg6XHRcdFx0Z290byBlcnJvcjtcbiAzMTk6XHRcdH1cbiAzMjA6XHRcbiAzMjE6XHRcdC8qXG4gMzIyOlx0XHQgKiBUaGlzIGlzIHNlcmlhbGl6ZWQgYWdhaW5zdCBDUFUgaG90cGx1ZyBvcGVyYXRpb25zLiBIZW5jZSwgY29yZXNcbiAzMjM6XHRcdCAqIGNhbm5vdCBiZSBvZmZsaW5lZCB1bnRpbCB0aGlzIGZpbmlzaGVzLlxuIDMyNDpcdFx0ICovXG4gMzI1Olx0XHRyZXQgPSBjcHVocF9zdGF0ZV9hZGRfaW5zdGFuY2UoQ1BVSFBfTU1fWlNXUF9QT09MX1BSRVBBUkUsXG4gMzI2Olx0XHRcdFx0XHQgICAgICAgXHUwMDI2cG9vbC1cdTAwM2Vub2RlKTtcbiAzMjc6XHRcbiAzMjg6XHRcdC8qXG4gMzI5Olx0XHQgKiBjcHVocF9zdGF0ZV9hZGRfaW5zdGFuY2UoKSB3aWxsIG5vdCBjbGVhbnVwIG9uIGZhaWx1cmUgc2luY2VcbiAzMzA6XHRcdCAqIHdlIGRvbiYjMzk7dCByZWdpc3RlciBhIGhvdHVucGx1ZyBjYWxsYmFjay5cbiAzMzE6XHRcdCAqL1xuIDMzMjpcdFx0aWYgKHJldClcbiAzMzM6XHRcdFx0Z290byBjcHVocF9hZGRfZmFpbDtcbiAzMzQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjA6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyMDcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB6c3dhcF9lbnRyeSBhbmQgenN3YXBfcG9vbCBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBvZiB6c3dhcCwgc3BlY2lmaWNhbGx5IGhvdyBgenN3YXBfZW50cnlgIGFuZCBgenN3YXBfcG9vbGAgYXJlIGhhbmRsZWQuIEkgc2VlIHRoYXQgdGhlIGBwb29sYCB2YXJpYWJsZSBpcyBpbml0aWFsaXplZCB1c2luZyBga3phbGxvY19vYmooKnBvb2wpYCwgd2hpY2gsIGFzIEkgZXhwZWN0LCBhbGxvY2F0ZXMgdGhlIG1lbW9yeSBhbmQgaW1wb3J0YW50bHksIHplcm9lcyBhbGwgdGhlIGZpZWxkcy4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGVuc3VyaW5nIGEgY2xlYW4gc2xhdGUuIFRoZW4sIEkgbm90aWNlZCB0aGF0IGBlbnRyeS0mZ3Q7cG9vbF9pZHhgIGlzIGV4cGxpY2l0bHkgYXNzaWduZWQgYSB2YWx1ZSB3aXRoaW4gYHpzd2FwX3N0b3JlX3BhZ2VgLiBUaGlzIGlzIGtleTsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBpcyB0aGUgKm9ubHkqIHBsYWNlIGl0JiMzOTtzIHNldCBvciBpZiB0aGVyZSBhcmUgb3RoZXIgYXNzaWdubWVudHMgdG8gdGhpcyBjcnVjaWFsIGluZGV4LiBUaGlzIGlzIHdoZXJlIHRoaW5ncyBjb3VsZCBnbyB3cm9uZywgc28gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBvdGhlciBwb2ludHMgd2hlcmUgdGhlc2UgY3J1Y2lhbCBzdHJ1Y3R1cmVzIGFyZSBjcmVhdGVkIG9yIG1vZGlmaWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBjb2RlIGZsb3cgYW5kIG1lbW9yeSBpcyBtYW5hZ2VkIGNvbnNpc3RlbnRseSBhbmQgYXBwcm9wcmlhdGVseS4gVGltZSB0byB1c2UgbXkgZmF2b3JpdGUgdG9vbC4gSSYjMzk7bGwgbmVlZCB0byBkbyBhIHRob3JvdWdoIGdyZXAgZm9yIGB6c3dhcF9lbnRyeWAgYWNyb3NzIGBtbS96c3dhcC5jYCB0byBsb29rIGZvciBhbnkgb3RoZXIgaW5zdGFuY2VzLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBjb21wbGV0ZSBwaWN0dXJlLCBlbnN1cmluZyBJIGNhbiBjYXRjaCBhbnkgcG90ZW50aWFsIGlzc3VlcyBvciBpbmNvbnNpc3RlbmNpZXMgaW4gaW5pdGlhbGl6YXRpb24gb3IgbW9kaWZpY2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6c3dhcF9lbnRyeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3pzd2FwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0venN3YXAuYz0xNDA9c3RydWN0IGNyeXB0b19hY29tcF9jdHgge1xuLS1cbm1tL3pzd2FwLmMtMTUwLSAqIFRoZSBvbmx5IGNhc2Ugd2hlcmUgbHJ1X2xvY2sgaXMgbm90IGFjcXVpcmVkIHdoaWxlIGhvbGRpbmcgdHJlZS5sb2NrIGlzXG5tbS96c3dhcC5jOjE1MTogKiB3aGVuIGEgenN3YXBfZW50cnkgaXMgdGFrZW4gb2ZmIHRoZSBscnUgZm9yIHdyaXRlYmFjaywgaW4gdGhhdCBjYXNlIGl0XG5tbS96c3dhcC5jLTE1Mi0gKiBuZWVkcyB0byBiZSB2ZXJpZmllZCB0aGF0IGl0JiMzOTtzIHN0aWxsIHZhbGlkIGluIHRoZSB0cmVlLlxuLS1cbm1tL3pzd2FwLmM9MTgyPXN0YXRpYyBzdHJ1Y3Qgc2hyaW5rZXIgKnpzd2FwX3Nocmlua2VyO1xuLS1cbm1tL3pzd2FwLmMtMTg0LS8qXG5tbS96c3dhcC5jOjE4NTogKiBzdHJ1Y3QgenN3YXBfZW50cnlcbm1tL3pzd2FwLmMtMTg2LSAqXG4tLVxubW0venN3YXAuYy0yMDEtICovXG5tbS96c3dhcC5jOjIwMjpzdHJ1Y3QgenN3YXBfZW50cnkge1xubW0venN3YXAuYy0yMDMtXHRzd3BfZW50cnlfdCBzd3BlbnRyeTtcbi0tXG5tbS96c3dhcC5jLTIxNi0gKi9cbm1tL3pzd2FwLmM6MjE3OnN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfZW50cnlfcG9vbChzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxubW0venN3YXAuYy0yMTgte1xuLS1cbm1tL3pzd2FwLmM9NjM1PXN0YXRpYyBpbnQgenN3YXBfZW5hYmxlZF9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLFxuLS1cbm1tL3pzd2FwLmMtNjY3LVxubW0venN3YXAuYzo2Njg6c3RhdGljIGlubGluZSBpbnQgZW50cnlfdG9fbmlkKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXG5tbS96c3dhcC5jLTY2OS17XG4tLVxubW0venN3YXAuYy02NzItXG5tbS96c3dhcC5jOjY3MzpzdGF0aWMgdm9pZCB6c3dhcF9scnVfYWRkKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXG5tbS96c3dhcC5jLTY3NC17XG4tLVxubW0venN3YXAuYy02OTUtXG5tbS96c3dhcC5jOjY5NjpzdGF0aWMgdm9pZCB6c3dhcF9scnVfZGVsKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXG5tbS96c3dhcC5jLTY5Ny17XG4tLVxubW0venN3YXAuYz03MzU9dm9pZCB6c3dhcF9tZW1jZ19vZmZsaW5lX2NsZWFudXAoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL3pzd2FwLmMtNzQ5LSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5tbS96c3dhcC5jOjc1MDpzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnpzd2FwX2VudHJ5X2NhY2hlO1xubW0venN3YXAuYy03NTEtXG5tbS96c3dhcC5jOjc1MjpzdGF0aWMgc3RydWN0IHpzd2FwX2VudHJ5ICp6c3dhcF9lbnRyeV9jYWNoZV9hbGxvYyhnZnBfdCBnZnAsIGludCBuaWQpXG5tbS96c3dhcC5jLTc1My17XG5tbS96c3dhcC5jOjc1NDpcdHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnk7XG5tbS96c3dhcC5jOjc1NTpcdGVudHJ5ID0ga21lbV9jYWNoZV9hbGxvY19ub2RlKHpzd2FwX2VudHJ5X2NhY2hlLCBnZnAsIG5pZCk7XG5tbS96c3dhcC5jLTc1Ni1cdGlmICghZW50cnkpXG4tLVxubW0venN3YXAuYy03NjAtXG5tbS96c3dhcC5jOjc2MTpzdGF0aWMgdm9pZCB6c3dhcF9lbnRyeV9jYWNoZV9mcmVlKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXG5tbS96c3dhcC5jLTc2Mi17XG5tbS96c3dhcC5jOjc2MzpcdGttZW1fY2FjaGVfZnJlZSh6c3dhcF9lbnRyeV9jYWNoZSwgZW50cnkpO1xubW0venN3YXAuYy03NjQtfVxuLS1cbm1tL3pzd2FwLmMtNzY5LSAqL1xubW0venN3YXAuYzo3NzA6c3RhdGljIHZvaWQgenN3YXBfZW50cnlfZnJlZShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxubW0venN3YXAuYy03NzEte1xubW0venN3YXAuYzo3NzI6XHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IHpzd2FwX2VudHJ5X3Bvb2woZW50cnkpO1xubW0venN3YXAuYy03NzMtXG4tLVxubW0venN3YXAuYy03ODQtXHRcdGF0b21pY19sb25nX2RlYyhcdTAwMjZ6c3dhcF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXMpO1xubW0venN3YXAuYzo3ODU6XHR6c3dhcF9lbnRyeV9jYWNoZV9mcmVlKGVudHJ5KTtcbm1tL3pzd2FwLmMtNzg2LVx0YXRvbWljX2xvbmdfZGVjKFx1MDAyNnpzd2FwX3N0b3JlZF9wYWdlcyk7XG4tLVxubW0venN3YXAuYz03OTI9c3RhdGljIGludCB6c3dhcF9jcHVfY29tcF9wcmVwYXJlKHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCBobGlzdF9ub2RlICpub2RlKVxuLS1cbm1tL3pzd2FwLmMtODQ4LVxubW0venN3YXAuYzo4NDk6c3RhdGljIGJvb2wgenN3YXBfY29tcHJlc3Moc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG5tbS96c3dhcC5jLTg1MC1cdFx0XHQgICBzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbClcbi0tXG5tbS96c3dhcC5jLTkzMi1cbm1tL3pzd2FwLmM6OTMzOnN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL3pzd2FwLmMtOTM0LXtcbm1tL3pzd2FwLmM6OTM1Olx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSB6c3dhcF9lbnRyeV9wb29sKGVudHJ5KTtcbm1tL3pzd2FwLmMtOTM2LVx0c3RydWN0IHNjYXR0ZXJsaXN0IGlucHV0WzJdOyAvKiB6c21hbGxvYyByZXR1cm5zIGFuIFNHIGxpc3QgMS0yIGVudHJpZXMgKi9cbi0tXG5tbS96c3dhcC5jLTk5OC0gKi9cbm1tL3pzd2FwLmM6OTk5OnN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG5tbS96c3dhcC5jLTEwMDAtXHRcdFx0XHQgc3dwX2VudHJ5X3Qgc3dwZW50cnkpXG4tLVxubW0venN3YXAuYy0xMDU1LVxubW0venN3YXAuYzoxMDU2Olx0enN3YXBfZW50cnlfZnJlZShlbnRyeSk7XG5tbS96c3dhcC5jLTEwNTctXG4tLVxubW0venN3YXAuYz0xMTAyPXN0YXRpYyBlbnVtIGxydV9zdGF0dXMgc2hyaW5rX21lbWNnX2NiKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sIHN0cnVjdCBsaXN0X2xydV9vbmUgKmwsXG4tLVxubW0venN3YXAuYy0xMTA0LXtcbm1tL3pzd2FwLmM6MTEwNTpcdHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkgPSBjb250YWluZXJfb2YoaXRlbSwgc3RydWN0IHpzd2FwX2VudHJ5LCBscnUpO1xubW0venN3YXAuYy0xMTA2LVx0Ym9vbCAqZW5jb3VudGVyZWRfcGFnZV9pbl9zd2FwY2FjaGUgPSAoYm9vbCAqKWFyZztcbi0tXG5tbS96c3dhcC5jPTE0MjA9c3RhdGljIGJvb2wgenN3YXBfc3RvcmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5tbS96c3dhcC5jLTE0MjQtXHRzd3BfZW50cnlfdCBwYWdlX3N3cGVudHJ5ID0gcGFnZV9zd2FwX2VudHJ5KHBhZ2UpO1xubW0venN3YXAuYzoxNDI1Olx0c3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgKm9sZDtcbm1tL3pzd2FwLmMtMTQyNi1cbm1tL3pzd2FwLmMtMTQyNy1cdC8qIGFsbG9jYXRlIGVudHJ5ICovXG5tbS96c3dhcC5jOjE0Mjg6XHRlbnRyeSA9IHpzd2FwX2VudHJ5X2NhY2hlX2FsbG9jKEdGUF9LRVJORUwsIHBhZ2VfdG9fbmlkKHBhZ2UpKTtcbm1tL3pzd2FwLmMtMTQyOS1cdGlmICghZW50cnkpIHtcbi0tXG5tbS96c3dhcC5jLTE0NjAtXHRpZiAob2xkKVxubW0venN3YXAuYzoxNDYxOlx0XHR6c3dhcF9lbnRyeV9mcmVlKG9sZCk7XG5tbS96c3dhcC5jLTE0NjItXG4tLVxubW0venN3YXAuYy0xNDY2LVx0ICogY2hhcmdlIHpzd2FwIG1lbW9yeSwgYW5kIGluY3JlbWVudCB6c3dhcF9zdG9yZWRfcGFnZXMuXG5tbS96c3dhcC5jOjE0Njc6XHQgKiBUaGUgb3Bwb3NpdGUgYWN0aW9ucyB3aWxsIGJlIHBlcmZvcm1lZCBieSB6c3dhcF9lbnRyeV9mcmVlKClcbm1tL3pzd2FwLmMtMTQ2OC1cdCAqIHdoZW4gdGhlIGVudHJ5IGlzIHJlbW92ZWQgZnJvbSB0aGUgdHJlZS5cbi0tXG5tbS96c3dhcC5jLTE1MDEtY29tcHJlc3NfZmFpbGVkOlxubW0venN3YXAuYzoxNTAyOlx0enN3YXBfZW50cnlfY2FjaGVfZnJlZShlbnRyeSk7XG5tbS96c3dhcC5jLTE1MDMtXHRyZXR1cm4gZmFsc2U7XG4tLVxubW0venN3YXAuYz0xNTA2PWJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS96c3dhcC5jLTE1NzctXHRcdHBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3ApO1xubW0venN3YXAuYzoxNTc4Olx0XHRzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5O1xubW0venN3YXAuYy0xNTc5LVx0XHRzdHJ1Y3QgeGFycmF5ICp0cmVlO1xuLS1cbm1tL3pzd2FwLmMtMTU4NC1cdFx0XHRpZiAoZW50cnkpXG5tbS96c3dhcC5jOjE1ODU6XHRcdFx0XHR6c3dhcF9lbnRyeV9mcmVlKGVudHJ5KTtcbm1tL3pzd2FwLmMtMTU4Ni1cdFx0fVxuLS1cbm1tL3pzd2FwLmM9MTYxMj1pbnQgenN3YXBfbG9hZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3pzd2FwLmMtMTYxNi1cdHN0cnVjdCB4YXJyYXkgKnRyZWUgPSBzd2FwX3pzd2FwX3RyZWUoc3dwKTtcbm1tL3pzd2FwLmM6MTYxNzpcdHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnk7XG5tbS96c3dhcC5jLTE2MTgtXG4tLVxubW0venN3YXAuYy0xNjU4LVx0eGFfZXJhc2UodHJlZSwgb2Zmc2V0KTtcbm1tL3pzd2FwLmM6MTY1OTpcdHpzd2FwX2VudHJ5X2ZyZWUoZW50cnkpO1xubW0venN3YXAuYy0xNjYwLVxuLS1cbm1tL3pzd2FwLmM9MTY2NT12b2lkIHpzd2FwX2ludmFsaWRhdGUoc3dwX2VudHJ5X3Qgc3dwKVxuLS1cbm1tL3pzd2FwLmMtMTY2OC1cdHN0cnVjdCB4YXJyYXkgKnRyZWUgPSBzd2FwX3pzd2FwX3RyZWUoc3dwKTtcbm1tL3pzd2FwLmM6MTY2OTpcdHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnk7XG5tbS96c3dhcC5jLTE2NzAtXG4tLVxubW0venN3YXAuYy0xNjc1LVx0aWYgKGVudHJ5KVxubW0venN3YXAuYzoxNjc2Olx0XHR6c3dhcF9lbnRyeV9mcmVlKGVudHJ5KTtcbm1tL3pzd2FwLmMtMTY3Ny19XG4tLVxubW0venN3YXAuYz0xNzg5PXN0YXRpYyBpbnQgenN3YXBfc2V0dXAodm9pZClcbi0tXG5tbS96c3dhcC5jLTE3OTMtXG5tbS96c3dhcC5jOjE3OTQ6XHR6c3dhcF9lbnRyeV9jYWNoZSA9IEtNRU1fQ0FDSEUoenN3YXBfZW50cnksIDApO1xubW0venN3YXAuYzoxNzk1Olx0aWYgKCF6c3dhcF9lbnRyeV9jYWNoZSkge1xubW0venN3YXAuYy0xNzk2LVx0XHRwcl9lcnIoXCYjMzQ7ZW50cnkgY2FjaGUgY3JlYXRpb24gZmFpbGVkXFxuXCYjMzQ7KTtcbi0tXG5tbS96c3dhcC5jLTE4NDMtaHBfZmFpbDpcbm1tL3pzd2FwLmM6MTg0NDpcdGttZW1fY2FjaGVfZGVzdHJveSh6c3dhcF9lbnRyeV9jYWNoZSk7XG5tbS96c3dhcC5jLTE4NDUtY2FjaGVfZmFpbDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjA6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwODYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipDaGVja2luZyBNeSBBc3N1bXB0aW9ucyoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhpcyBvcHRpbWl6YXRpb24sIEkgbmVlZCB0byBtYWtlIHN1cmUgYSBmdW5kYW1lbnRhbCBjb25maWd1cmF0aW9uIGlzIHNldCBjb3JyZWN0bHkuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHZlcmlmeSB0aGUgY3VycmVudCBzZXR0aW5nIGZvciBgenN3YXBfY29tcHJlc3NgLiBUaGlzIGlzIGEgcHJldHR5IGJhc2ljIGJ1dCBjcnVjaWFsIHBhcmFtZXRlciwgYW5kIGl0IGNhbiBzYXZlIG1lIGEgbG90IG9mIGhlYWRhY2hlIGRvd24gdGhlIGxpbmUgaWYgaXQmIzM5O3Mgc2V0IHByb3Blcmx5IGZyb20gdGhlIGdldC1nby4gTm8gcG9pbnQgaW4gdHJvdWJsZXNob290aW5nIGNvbXBsZXggaW50ZXJhY3Rpb25zIGlmIHRoZSBiYXNpY3MgYXJlbiYjMzk7dCBpcm9uZWQgb3V0LiBKdXN0IGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIGVuc3VyZSB0aGUgZm91bmRhdGlvbnMgYXJlIHNvbGlkIGJlZm9yZSBwcm9jZWVkaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3pzd2FwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NDgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg0ODpcdFxuIDg0OTpcdHN0YXRpYyBib29sIHpzd2FwX2NvbXByZXNzKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuIDg1MDpcdFx0XHRcdCAgIHN0cnVjdCB6c3dhcF9wb29sICpwb29sKVxuIDg1MTpcdHtcbiA4NTI6XHRcdHN0cnVjdCBjcnlwdG9fYWNvbXBfY3R4ICphY29tcF9jdHg7XG4gODUzOlx0XHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgaW5wdXQsIG91dHB1dDtcbiA4NTQ6XHRcdGludCBjb21wX3JldCA9IDAsIGFsbG9jX3JldCA9IDA7XG4gODU1Olx0XHR1bnNpZ25lZCBpbnQgZGxlbiA9IFBBR0VfU0laRTtcbiA4NTY6XHRcdHVuc2lnbmVkIGxvbmcgaGFuZGxlO1xuIDg1NzpcdFx0Z2ZwX3QgZ2ZwO1xuIDg1ODpcdFx0dTggKmRzdDtcbiA4NTk6XHRcdGJvb2wgbWFwcGVkID0gZmFsc2U7XG4gODYwOlx0XG4gODYxOlx0XHRhY29tcF9jdHggPSByYXdfY3B1X3B0cihwb29sLVx1MDAzZWFjb21wX2N0eCk7XG4gODYyOlx0XHRtdXRleF9sb2NrKFx1MDAyNmFjb21wX2N0eC1cdTAwM2VtdXRleCk7XG4gODYzOlx0XG4gODY0Olx0XHRkc3QgPSBhY29tcF9jdHgtXHUwMDNlYnVmZmVyO1xuIDg2NTpcdFx0c2dfaW5pdF90YWJsZShcdTAwMjZpbnB1dCwgMSk7XG4gODY2Olx0XHRzZ19zZXRfcGFnZShcdTAwMjZpbnB1dCwgcGFnZSwgUEFHRV9TSVpFLCAwKTtcbiA4Njc6XHRcbiA4Njg6XHRcdHNnX2luaXRfb25lKFx1MDAyNm91dHB1dCwgZHN0LCBQQUdFX1NJWkUpO1xuIDg2OTpcdFx0YWNvbXBfcmVxdWVzdF9zZXRfcGFyYW1zKGFjb21wX2N0eC1cdTAwM2VyZXEsIFx1MDAyNmlucHV0LCBcdTAwMjZvdXRwdXQsIFBBR0VfU0laRSwgZGxlbik7XG4gODcwOlx0XG4gODcxOlx0XHQvKlxuIDg3MjpcdFx0ICogaXQgbWF5YmUgbG9va3MgYSBsaXR0bGUgYml0IHNpbGx5IHRoYXQgd2Ugc2VuZCBhbiBhc3luY2hyb25vdXMgcmVxdWVzdCxcbiA4NzM6XHRcdCAqIHRoZW4gd2FpdCBmb3IgaXRzIGNvbXBsZXRpb24gc3luY2hyb25vdXNseS4gVGhpcyBtYWtlcyB0aGUgcHJvY2VzcyBsb29rXG4gODc0Olx0XHQgKiBzeW5jaHJvbm91cyBpbiBmYWN0LlxuIDg3NTpcdFx0ICogVGhlb3JldGljYWxseSwgYWNvbXAgc3VwcG9ydHMgdXNlcnMgc2VuZCBtdWx0aXBsZSBhY29tcCByZXF1ZXN0cyBpbiBvbmVcbiA4NzY6XHRcdCAqIGFjb21wIGluc3RhbmNlLCB0aGVuIGdldCB0aG9zZSByZXF1ZXN0cyBkb25lIHNpbXVsdGFuZW91c2x5LiBidXQgaW4gdGhpc1xuIDg3NzpcdFx0ICogY2FzZSwgenN3YXAgYWN0dWFsbHkgZG9lcyBzdG9yZSBhbmQgbG9hZCBwYWdlIGJ5IHBhZ2UsIHRoZXJlIGlzIG5vXG4gODc4Olx0XHQgKiBleGlzdGluZyBtZXRob2QgdG8gc2VuZCB0aGUgc2Vjb25kIHBhZ2UgYmVmb3JlIHRoZSBmaXJzdCBwYWdlIGlzIGRvbmVcbiA4Nzk6XHRcdCAqIGluIG9uZSB0aHJlYWQgZG9pbmcgenN3YXAuXG4gODgwOlx0XHQgKiBidXQgaW4gZGlmZmVyZW50IHRocmVhZHMgcnVubmluZyBvbiBkaWZmZXJlbnQgY3B1LCB3ZSBoYXZlIGRpZmZlcmVudFxuIDg4MTpcdFx0ICogYWNvbXAgaW5zdGFuY2UsIHNvIG11bHRpcGxlIHRocmVhZHMgY2FuIGRvIChkZSljb21wcmVzc2lvbiBpbiBwYXJhbGxlbC5cbiA4ODI6XHRcdCAqL1xuIDg4MzpcdFx0Y29tcF9yZXQgPSBjcnlwdG9fd2FpdF9yZXEoY3J5cHRvX2Fjb21wX2NvbXByZXNzKGFjb21wX2N0eC1cdTAwM2VyZXEpLCBcdTAwMjZhY29tcF9jdHgtXHUwMDNld2FpdCk7XG4gODg0Olx0XHRkbGVuID0gYWNvbXBfY3R4LVx1MDAzZXJlcS1cdTAwM2VkbGVuO1xuIDg4NTpcdFxuIDg4NjpcdFx0LypcbiA4ODc6XHRcdCAqIElmIGEgcGFnZSBjYW5ub3QgYmUgY29tcHJlc3NlZCBpbnRvIGEgc2l6ZSBzbWFsbGVyIHRoYW4gUEFHRV9TSVpFLFxuIDg4ODpcdFx0ICogc2F2ZSB0aGUgY29udGVudCBhcyBpcyB3aXRob3V0IGEgY29tcHJlc3Npb24sIHRvIGtlZXAgdGhlIExSVSBvcmRlclxuIDg4OTpcdFx0ICogb2Ygd3JpdGViYWNrcy4gIElmIHdyaXRlYmFjayBpcyBkaXNhYmxlZCwgcmVqZWN0IHRoZSBwYWdlIHNpbmNlIGl0XG4gODkwOlx0XHQgKiBvbmx5IGFkZHMgbWV0YWRhdGEgb3ZlcmhlYWQuICBzd2FwX3dyaXRlb3V0KCkgd2lsbCBwdXQgdGhlIHBhZ2UgYmFja1xuIDg5MTpcdFx0ICogdG8gdGhlIGFjdGl2ZSBMUlUgbGlzdCBpbiB0aGUgY2FzZS5cbiA4OTI6XHRcdCAqL1xuIDg5MzpcdFx0aWYgKGNvbXBfcmV0IHx8ICFkbGVuIHx8IGRsZW4gXHUwMDNlPSBQQUdFX1NJWkUpIHtcbiA4OTQ6XHRcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDg5NTpcdFx0XHRpZiAoIW1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoXG4gODk2Olx0XHRcdFx0XHRcdGZvbGlvX21lbWNnKHBhZ2VfZm9saW8ocGFnZSkpKSkge1xuIDg5NzpcdFx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMDoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTEzOQoJCQkJCQkJb3V0cHV0OiAxODAKCQkJCQkJCXRob3VnaHRzOiA2MjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudDogTmVlZHNLTVNBTiA9IGZhbHNlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgYHpzd2FwX2NvbXByZXNzYCBzZXRzIHRoZSBgaGFuZGxlYCBhbmQgYGxlbmd0aGAgb2YgdGhlIGBlbnRyeWAuIFRoZW4sIGB6c3dhcF9zdG9yZV9wYWdlYCBwb3B1bGF0ZXMgdGhlIHJlc3Qgb2YgdGhlIGB6c3dhcF9lbnRyeWAgZmllbGRzOiBgcG9vbF9pZHhgLCBgc3dwZW50cnlgLCBgb2JqY2dgLCBgcmVmZXJlbmNlZGAsIGFuZCBpbml0aWFsaXplcyB0aGUgYGxydWAgbGlzdCBoZWFkIGJlZm9yZSBhZGRpbmcgaXQgdG8gdGhlIExSVS4gVGhpcyBpcyBhbGwgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHpzd2FwLiBDcnVjaWFsbHksIGFsbCB0aGUgZmllbGRzIHdpdGhpbiBgc3RydWN0IHpzd2FwX2VudHJ5YCBhcmUgKmV4cGxpY2l0bHkqIGluaXRpYWxpemVkIGJlZm9yZSBhbnkgcmVhZCBvcGVyYXRpb25zLiBOb3RoaW5nIGlzIGJlaW5nIGxlYWtlZCB0byB1c2Vyc3BhY2UuCgpUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGludm9sdmUgaW50ZXJuYWwgY2hhbmdlczogcmVwbGFjaW5nIGEgbGlua2VkIGxpc3Qgb2YgcG9vbHMgd2l0aCBhbiBYQXJyYXkgYW5kIGEgcG9vbCBpbmRleCwgYW5kIHR3ZWFraW5nIHRoZSBSQ1UgYW5kIGxvY2tpbmcgbWVjaGFuaXNtcyBhcm91bmQgYHpzd2FwX3Bvb2xgLgoKTm93LCBjb25zaWRlcmluZyBwb3RlbnRpYWwgYnVncywgdGhlIHByaW1hcnkgcmlza3MgYXBwZWFyIHRvIGJlIGNvbmN1cnJlbmN5IGlzc3VlcyAoUkNVLCBsb2NraW5nLCByZWZjb3VudGluZyksIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIHNjZW5hcmlvcyBpbiB0aGUgcG9vbCBvciBlbnRyeSBsaWZlY3ljbGUsIGFuZCBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciB1bmV4cGVjdGVkIHJldHVybnMgZnJvbSBgeGFfbG9hZGAuIFRoZXNlIGFyZSBwcmVjaXNlbHkgdGhlIHR5cGVzIG9mIGlzc3VlcyB0aGF0IEtBU0FOLCBMT0NLREVQLCBhbmQgZ2VuZXJhbCBrZXJuZWwgYnVnIGRldGVjdG9ycyBhcmUgZGVzaWduZWQgdG8gY2F0Y2guCgpUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIG5vIHN0cnVjdHVyZSBsZWFrcyB0byB1c2Vyc3BhY2UsIGFuZCBubyBjb25jZXJucyBhcm91bmQgdW5pbml0aWFsaXplZCBwYWRkaW5nLgoKSSYjMzk7bSBkb3VibGUtY2hlY2tpbmcgYWdhaW5zdCB0aGUgS01TQU4gY3JpdGVyaWEsIGFuZCBpdCBhbGwgY2hlY2tzIG91dDoKCjEuICBObyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHByb2JsZW1hdGljLgoyLiAgVGhlcmUmIzM5O3Mgbm8gY29uZGl0aW9uYWwgbG9naWMgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMuCjMuICBUaGUgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gb2YgZGF0YSBzdHJ1Y3R1cmVzIGFyZSB0aG9yb3VnaCwgcHJldmVudGluZyB1bmluaXRpYWxpemVkIGZpZWxkcyBmcm9tIGJlaW5nIHJlYWQgbGF0ZXIuCjQuICBObyBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbnRyb2R1Y2VzIGFueSByaXNrIG9mIGFjY2Vzc2luZyB1bmluaXRpYWxpemVkIGJ5dGVzIGluIGV4aXN0aW5nIGJ1ZmZlcnMuCgpUaGlzIGlzIGFsbCBjb25zaXN0ZW50IHdpdGggYE5lZWRzS01TQU49ZmFsc2VgLiBMZXQmIzM5O3MgZm9ybXVsYXRlIHRoZSByZXNwb25zZSBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBpbnRlcm5hbCB6c3dhcCBwb29sIGFuZCBlbnRyeSBtYW5hZ2VtZW50IGluIG1tL3pzd2FwLmMgYnkgcmVwbGFjaW5nIGEgbGlua2VkIGxpc3Qgb2YgcG9vbHMgd2l0aCBhbiBYQXJyYXkgKGluZGV4ZWQgYnkgYSB1OCBwb29sX2lkeCkgYW5kIHN3aXRjaGluZyBwb29sIGxvb2t1cHMgdG8gdXNlIHhhX2xvYWQoKS4gQWxsIGFsbG9jYXRlZCBzdHJ1Y3R1cmVzICh6c3dhcF9wb29sIGFsbG9jYXRlZCB3aXRoIGt6YWxsb2Nfb2JqLCBhbmQgenN3YXBfZW50cnkgd2hvc2UgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluIHpzd2FwX3N0b3JlX3BhZ2UpIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBOb25lIG9mIHRoZSBtb2RpZmllZCBkYXRhIHN0cnVjdHVyZXMgb3IgZmllbGRzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3Mgd291bGQgaW52b2x2ZSBjb25jdXJyZW5jeSwgbGlmZXRpbWUvcmVmY291bnRpbmcsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzIHJhdGhlciB0aGFuIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaW50ZXJuYWwgenN3YXAgcG9vbCBhbmQgZW50cnkgbWFuYWdlbWVudCBpbiBtbS96c3dhcC5jIGJ5IHJlcGxhY2luZyBhIGxpbmtlZCBsaXN0IG9mIHBvb2xzIHdpdGggYW4gWEFycmF5IChpbmRleGVkIGJ5IGEgdTggcG9vbF9pZHgpIGFuZCBzd2l0Y2hpbmcgcG9vbCBsb29rdXBzIHRvIHVzZSB4YV9sb2FkKCkuIEFsbCBhbGxvY2F0ZWQgc3RydWN0dXJlcyAoenN3YXBfcG9vbCBhbGxvY2F0ZWQgd2l0aCBremFsbG9jX29iaiwgYW5kIHpzd2FwX2VudHJ5IHdob3NlIGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBpbiB6c3dhcF9zdG9yZV9wYWdlKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gTm9uZSBvZiB0aGUgbW9kaWZpZWQgZGF0YSBzdHJ1Y3R1cmVzIG9yIGZpZWxkcyBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcyBhcmUgaW50cm9kdWNlZC4gQW55IHBvdGVudGlhbCBidWdzIHdvdWxkIGludm9sdmUgY29uY3VycmVuY3ksIGxpZmV0aW1lL3JlZmNvdW50aW5nLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcyByYXRoZXIgdGhhbiBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDZUMjA6MTg6MjguMzUyNDg3NjI0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4OTcwMjI2MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWlNXQVBcIixcbiAgICBcIlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6c3dhcF9zdG9yZVwiLFxuICAgIFwienN3YXBfbG9hZFwiLFxuICAgIFwienN3YXBfc3RvcmVfcGFnZVwiLFxuICAgIFwienN3YXBfZGVjb21wcmVzc1wiLFxuICAgIFwienN3YXBfZW50cnlfZnJlZVwiLFxuICAgIFwienN3YXBfcG9vbF9jcmVhdGVcIixcbiAgICBcInpzd2FwX3Bvb2xfZmluZF9nZXRcIixcbiAgICBcIl9fenN3YXBfcG9vbF9lbXB0eVwiLFxuICAgIFwiX196c3dhcF9wb29sX3JlbGVhc2VcIixcbiAgICBcInpzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0XCIsXG4gICAgXCJ6c3dhcF90b3RhbF9wYWdlc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaW50ZXJuYWwgenN3YXAgcG9vbCBhbmQgZW50cnkgbWFuYWdlbWVudCBpbiBtbS96c3dhcC5jIGJ5IHJlcGxhY2luZyBhIGxpbmtlZCBsaXN0IG9mIHBvb2xzIHdpdGggYW4gWEFycmF5IChpbmRleGVkIGJ5IGEgdTggcG9vbF9pZHgpIGFuZCBzd2l0Y2hpbmcgcG9vbCBsb29rdXBzIHRvIHVzZSB4YV9sb2FkKCkuIEFsbCBhbGxvY2F0ZWQgc3RydWN0dXJlcyAoenN3YXBfcG9vbCBhbGxvY2F0ZWQgd2l0aCBremFsbG9jX29iaiwgYW5kIHpzd2FwX2VudHJ5IHdob3NlIGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBpbiB6c3dhcF9zdG9yZV9wYWdlKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gTm9uZSBvZiB0aGUgbW9kaWZpZWQgZGF0YSBzdHJ1Y3R1cmVzIG9yIGZpZWxkcyBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcyBhcmUgaW50cm9kdWNlZC4gQW55IHBvdGVudGlhbCBidWdzIHdvdWxkIGludm9sdmUgY29uY3VycmVuY3ksIGxpZmV0aW1lL3JlZmNvdW50aW5nLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcyByYXRoZXIgdGhhbiBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGluIG1tL3pzd2FwLmMsIHJlZmFjdG9yaW5nIHBvb2wgYW5kIGVudHJ5IHRyYWNraW5nIGZyb20gYSBsaW5rZWQgbGlzdCBhbmQgcmF3IHBvb2wgcG9pbnRlciB0byBhbiBJRC1iYXNlZCBYQXJyYXkgd2l0aCA4LWJpdCBwb29sIGluZGljZXMgaW4gc3RydWN0IHpzd2FwX2VudHJ5LiBJdCBhbHNvIHVwZGF0ZXMgc3luY2hyb25pemF0aW9uIHNlbWFudGljcyB1c2luZyBSQ1UgYW5kIHJjdV93b3JrIChxdWV1ZV9yY3Vfd29yaykgYWxvbmcgd2l0aCBzb2Z0aXJxLXNhZmUgWEFycmF5IG9wZXJhdGlvbnMgKHhhX2FsbG9jX2JoLCB4YV9lcmFzZV9iaCkuIFRoZXNlIGNvbmN1cnJlbmN5IGFuZCBkYXRhIHN0cnVjdHVyZSBtb2RpZmljYXRpb25zIGluIHJlYWNoYWJsZSBNTSBjb2RlIHdhcnJhbnQgZnV6emluZyB0byBkZXRlY3QgcG9zc2libGUgcmFjZXMsIHN0YWxlIElEIGRlcmVmZXJlbmNlcywgb3IgYXNzZXJ0aW9uIHRyaXBzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMDoxODoyOC4zNTI0OTU5MTRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNTI1Nzc0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDZmYzgyYmJkMGY0NTY1MGIzNjdmZjNiYTBmZDBkOTZiYmU5YTI0MTVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBTZXAgNiAyMDoxODoyNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuY1xcbmluZGV4IGYzYWUzYzgxZTQ4ZWEuLjI1M2VlYmI5NzFiOTcgMTAwNjQ0XFxuLS0tIGEvbW0venN3YXAuY1xcbisrKyBiL21tL3pzd2FwLmNcXG5AQCAtMzQsNiArMzQsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvd3JpdGViYWNrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wYWdlbWFwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JrcXVldWUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3hhcnJheS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbGlzdF9scnUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3pzbWFsbG9jLmhcXHUwMDNlXFxuIFxcbkBAIC0xNTQsMTIgKzE1NSwyMyBAQCBzdHJ1Y3QgenN3YXBfcG9vbCB7XFxuIFxcdHN0cnVjdCB6c19wb29sICp6c19wb29sO1xcbiBcXHRzdHJ1Y3QgY3J5cHRvX2Fjb21wX2N0eCBfX3BlcmNwdSAqYWNvbXBfY3R4O1xcbiBcXHRzdHJ1Y3QgcGVyY3B1X3JlZiByZWY7XFxuLVxcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcXG4tXFx0c3RydWN0IHdvcmtfc3RydWN0IHJlbGVhc2Vfd29yaztcXG4rXFx0c3RydWN0IHJjdV93b3JrIHJlbGVhc2Vfcndvcms7XFxuIFxcdHN0cnVjdCBobGlzdF9ub2RlIG5vZGU7XFxuK1xcdHU4IGlkeDtcXG4gXFx0Y2hhciB0Zm1fbmFtZVtDUllQVE9fTUFYX0FMR19OQU1FXTtcXG4gfTtcXG4gXFxuKy8qXFxuKyAqIExpdmUgcG9vbHMga2V5ZWQgYnkgaWQgKDEuLlpTV0FQX01BWF9QT09MX0lEKS4gIFhBX0ZMQUdTX0FMTE9DMSBrZWVwcyBpZCAwXFxuKyAqIHJlc2VydmVkIHNvIGl0IGlzIG5ldmVyIGhhbmRlZCB0byBhIGxpdmUgcG9vbC4gIFhBX0ZMQUdTX0xPQ0tfQkggbWFrZXMgdGhlXFxuKyAqIHhhX2xvY2sgc29mdGlycS1zYWZlOiBpdCBpcyB0YWtlbiBmcm9tIF9fenN3YXBfcG9vbF9lbXB0eSgpLCB3aGljaCBydW5zIGZyb21cXG4rICogYSBwZXJjcHVfcmVmIHJlbGVhc2UgY2FsbGJhY2sgaW4gc29mdGlycSBjb250ZXh0LlxcbisgKi9cXG4rI2RlZmluZSBaU1dBUF9GSVJTVF9QT09MX0lEIDFcXG4rI2RlZmluZSBaU1dBUF9NQVhfUE9PTF9JRCBVOF9NQVhcXG4rc3RhdGljIERFRklORV9YQVJSQVlfRkxBR1MoenN3YXBfcG9vbHMsIFhBX0ZMQUdTX0FMTE9DMSB8IFhBX0ZMQUdTX0xPQ0tfQkgpO1xcbitzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgX19yY3UgKnpzd2FwX2N1cnJlbnRfcG9vbDtcXG4rXFxuIC8qIEdsb2JhbCBMUlUgbGlzdHMgc2hhcmVkIGJ5IGFsbCB6c3dhcCBwb29scy4gKi9cXG4gc3RhdGljIHN0cnVjdCBsaXN0X2xydSB6c3dhcF9saXN0X2xydTtcXG4gXFxuQEAgLTE4Miw3ICsxOTQsNyBAQCBzdGF0aWMgc3RydWN0IHNocmlua2VyICp6c3dhcF9zaHJpbmtlcjtcXG4gICogICAgICAgICAgICAgIHdyaXRlYmFjayBsb2dpYy4gVGhlIGVudHJ5IGlzIG9ubHkgcmVjbGFpbWVkIGJ5IHRoZSB3cml0ZWJhY2tcXG4gICogICAgICAgICAgICAgIGxvZ2ljIGlmIHJlZmVyZW5jZWQgaXMgdW5zZXQuIFNlZSBjb21tZW50cyBpbiB0aGUgc2hyaW5rZXJcXG4gICogICAgICAgICAgICAgIHNlY3Rpb24gZm9yIGNvbnRleHQuXFxuLSAqIHBvb2wgLSB0aGUgenN3YXBfcG9vbCB0aGUgZW50cnkncyBkYXRhIGlzIGluXFxuKyAqIHBvb2xfaWR4IC0gaWQgb2YgdGhlIHpzd2FwX3Bvb2wgdGhhdCB0aGUgZW50cnkncyBkYXRhIGlzIGluLlxcbiAgKiBoYW5kbGUgLSB6c21hbGxvYyBhbGxvY2F0aW9uIGhhbmRsZSB0aGF0IHN0b3JlcyB0aGUgY29tcHJlc3NlZCBwYWdlIGRhdGFcXG4gICogb2JqY2cgLSB0aGUgb2JqX2Nncm91cCB0aGF0IHRoZSBjb21wcmVzc2VkIG1lbW9yeSBpcyBjaGFyZ2VkIHRvXFxuICAqIGxydSAtIGhhbmRsZSB0byB0aGUgcG9vbCdzIGxydSB1c2VkIHRvIGV2aWN0IHBhZ2VzLlxcbkBAIC0xOTEsMTkgKzIwMywyNSBAQCBzdHJ1Y3QgenN3YXBfZW50cnkge1xcbiBcXHRzd3BfZW50cnlfdCBzd3BlbnRyeTtcXG4gXFx0dW5zaWduZWQgaW50IGxlbmd0aDtcXG4gXFx0Ym9vbCByZWZlcmVuY2VkO1xcbi1cXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDtcXG4rXFx0dTggcG9vbF9pZHg7XFxuIFxcdHVuc2lnbmVkIGxvbmcgaGFuZGxlO1xcbiBcXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgbHJ1O1xcbiB9O1xcbiBcXG4rLypcXG4rICogTm8gUkNVIHNlY3Rpb24gaXMgbmVlZGVkIGFyb3VuZCB0aGUgcmV0dXJuZWQgcG9pbnRlcjogYSBzdG9yZWQgZW50cnkgcGluc1xcbisgKiBpdHMgcG9vbCB2aWEgcGVyY3B1X3JlZiAodGFrZW4gaW4genN3YXBfc3RvcmVfcGFnZSgpKSwgc28gdGhlIGlkIGNhbm5vdCBiZVxcbisgKiByZXVzZWQgdW5kZXIgdXMuICBDYWxsZXJzIFdBUk4gYW5kIGhhbmRsZSBhIE5VTEwgZnJvbSBhIGNvcnJ1cHQgcG9vbF9pZHguXFxuKyAqL1xcbitzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX2VudHJ5X3Bvb2woc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcXG4re1xcbitcXHRyZXR1cm4geGFfbG9hZChcXHUwMDI2enN3YXBfcG9vbHMsIGVudHJ5LVxcdTAwM2Vwb29sX2lkeCk7XFxuK31cXG4rXFxuIHN0YXRpYyBzdHJ1Y3QgeGFycmF5ICp6c3dhcF90cmVlc1tNQVhfU1dBUEZJTEVTXTtcXG4gc3RhdGljIHVuc2lnbmVkIGludCBucl96c3dhcF90cmVlc1tNQVhfU1dBUEZJTEVTXTtcXG4gXFxuLS8qIFJDVS1wcm90ZWN0ZWQgaXRlcmF0aW9uICovXFxuLXN0YXRpYyBMSVNUX0hFQUQoenN3YXBfcG9vbHMpO1xcbi0vKiBwcm90ZWN0cyB6c3dhcF9wb29scyBsaXN0IG1vZGlmaWNhdGlvbiAqL1xcbi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHpzd2FwX3Bvb2xzX2xvY2spO1xcbiAvKiBwb29sIGNvdW50ZXIgdG8gcHJvdmlkZSB1bmlxdWUgbmFtZXMgdG8genNtYWxsb2MgKi9cXG4gc3RhdGljIGF0b21pY190IHpzd2FwX3Bvb2xzX2NvdW50ID0gQVRPTUlDX0lOSVQoMCk7XFxuIFxcbkBAIC0yNzUsNiArMjkzLDcgQEAgc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2NyZWF0ZShjaGFyICpjb21wcmVzc29yKVxcbiBcXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDtcXG4gXFx0Y2hhciBuYW1lWzM4XTsgLyogJ3pzd2FwJyArIDMyIGNoYXIgKG1heCkgbnVtICsgXFxcXDAgKi9cXG4gXFx0aW50IHJldCwgY3B1O1xcbitcXHR1MzIgaWQ7XFxuIFxcbiBcXHRpZiAoIXpzd2FwX2hhc19wb29sIFxcdTAwMjZcXHUwMDI2ICFzdHJjbXAoY29tcHJlc3NvciwgWlNXQVBfUEFSQU1fVU5TRVQpKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG5AQCAtMzIwLDEyICszMzksMjkgQEAgc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2NyZWF0ZShjaGFyICpjb21wcmVzc29yKVxcbiBcXHRcXHRcXHQgICAgICBQRVJDUFVfUkVGX0FMTE9XX1JFSU5JVCwgR0ZQX0tFUk5FTCk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gcmVmX2ZhaWw7XFxuLVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZwb29sLVxcdTAwM2VsaXN0KTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFB1Ymxpc2ggb25seSBhZnRlciB0aGUgcG9vbCBpcyBmdWxseSBidWlsdCwgc28gbG9ja2xlc3Mgd2Fsa2Vyc1xcbitcXHQgKiBuZXZlciBzZWUgYSBoYWxmLWluaXRpYWxpemVkIHBvb2wuICBUaGUgX2JoIHZhcmlhbnQgcGFpcnMgd2l0aCB0aGVcXG4rXFx0ICogc29mdGlycS1jb250ZXh0IHhhX2xvY2sgdGFrZW4gaW4gX196c3dhcF9wb29sX2VtcHR5KCkuXFxuK1xcdCAqL1xcbitcXHRyZXQgPSB4YV9hbGxvY19iaChcXHUwMDI2enN3YXBfcG9vbHMsIFxcdTAwMjZpZCwgcG9vbCxcXG4rXFx0XFx0XFx0ICBYQV9MSU1JVChaU1dBUF9GSVJTVF9QT09MX0lELCBaU1dBUF9NQVhfUE9PTF9JRCksXFxuK1xcdFxcdFxcdCAgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0aWYgKHJldCA9PSAtRUJVU1kpXFxuK1xcdFxcdFxcdHByX2VycihcXFwiY2Fubm90IGFsbG9jYXRlIHBvb2wgaWQgKG1heCAlZCBsaXZlIHBvb2xzKVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgICAgIFpTV0FQX01BWF9QT09MX0lEIC0gWlNXQVBfRklSU1RfUE9PTF9JRCArIDEpO1xcbitcXHRcXHRnb3RvIHhhX2ZhaWw7XFxuK1xcdH1cXG4rXFx0cG9vbC1cXHUwMDNlaWR4ID0gaWQ7XFxuIFxcbiBcXHR6c3dhcF9wb29sX2RlYnVnKFxcXCJjcmVhdGVkXFxcIiwgcG9vbCk7XFxuIFxcbiBcXHRyZXR1cm4gcG9vbDtcXG4gXFxuK3hhX2ZhaWw6XFxuK1xcdHBlcmNwdV9yZWZfZXhpdChcXHUwMDI2cG9vbC1cXHUwMDNlcmVmKTtcXG4gcmVmX2ZhaWw6XFxuIFxcdGNwdWhwX3N0YXRlX3JlbW92ZV9pbnN0YW5jZShDUFVIUF9NTV9aU1dQX1BPT0xfUFJFUEFSRSwgXFx1MDAyNnBvb2wtXFx1MDAzZW5vZGUpO1xcbiBcXG5AQCAtMzc5LDM3ICs0MTUsMjkgQEAgc3RhdGljIHZvaWQgenN3YXBfcG9vbF9kZXN0cm95KHN0cnVjdCB6c3dhcF9wb29sICpwb29sKVxcbiBcXG4gc3RhdGljIHZvaWQgX196c3dhcF9wb29sX3JlbGVhc2Uoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiB7XFxuLVxcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sID0gY29udGFpbmVyX29mKHdvcmssIHR5cGVvZigqcG9vbCksXFxuLVxcdFxcdFxcdFxcdFxcdFxcdHJlbGVhc2Vfd29yayk7XFxuLVxcbi1cXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4rXFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSBjb250YWluZXJfb2YodG9fcmN1X3dvcmsod29yayksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICB0eXBlb2YoKnBvb2wpLCByZWxlYXNlX3J3b3JrKTtcXG4gXFxuIFxcdC8qIG5vYm9keSBzaG91bGQgaGF2ZSBiZWVuIGFibGUgdG8gZ2V0IGEgcmVmLi4uICovXFxuIFxcdFdBUk5fT04oIXBlcmNwdV9yZWZfaXNfemVybyhcXHUwMDI2cG9vbC1cXHUwMDNlcmVmKSk7XFxuIFxcdHBlcmNwdV9yZWZfZXhpdChcXHUwMDI2cG9vbC1cXHUwMDNlcmVmKTtcXG4gXFxuLVxcdC8qIHBvb2wgaXMgbm93IG9mZiB6c3dhcF9wb29scyBsaXN0IGFuZCBoYXMgbm8gcmVmZXJlbmNlcy4gKi9cXG4rXFx0LyogVGhlIHBvb2wgaXMgbm8gbG9uZ2VyIGluIHpzd2FwX3Bvb2xzIGFuZCBoYXMgbm8gcmVmZXJlbmNlcy4gKi9cXG4gXFx0enN3YXBfcG9vbF9kZXN0cm95KHBvb2wpO1xcbiB9XFxuIFxcbi1zdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3VycmVudCh2b2lkKTtcXG4tXFxuIHN0YXRpYyB2b2lkIF9fenN3YXBfcG9vbF9lbXB0eShzdHJ1Y3QgcGVyY3B1X3JlZiAqcmVmKVxcbiB7XFxuIFxcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sO1xcbiBcXG4gXFx0cG9vbCA9IGNvbnRhaW5lcl9vZihyZWYsIHR5cGVvZigqcG9vbCksIHJlZik7XFxuIFxcbi1cXHRzcGluX2xvY2tfYmgoXFx1MDAyNnpzd2FwX3Bvb2xzX2xvY2spO1xcbi1cXG4tXFx0V0FSTl9PTihwb29sID09IHpzd2FwX3Bvb2xfY3VycmVudCgpKTtcXG4rXFx0V0FSTl9PTihwb29sID09IHJjdV9hY2Nlc3NfcG9pbnRlcih6c3dhcF9jdXJyZW50X3Bvb2wpKTtcXG4gXFxuLVxcdGxpc3RfZGVsX3JjdShcXHUwMDI2cG9vbC1cXHUwMDNlbGlzdCk7XFxuK1xcdHhhX2VyYXNlX2JoKFxcdTAwMjZ6c3dhcF9wb29scywgcG9vbC1cXHUwMDNlaWR4KTtcXG4gXFxuLVxcdElOSVRfV09SSyhcXHUwMDI2cG9vbC1cXHUwMDNlcmVsZWFzZV93b3JrLCBfX3pzd2FwX3Bvb2xfcmVsZWFzZSk7XFxuLVxcdHNjaGVkdWxlX3dvcmsoXFx1MDAyNnBvb2wtXFx1MDAzZXJlbGVhc2Vfd29yayk7XFxuLVxcbi1cXHRzcGluX3VubG9ja19iaChcXHUwMDI2enN3YXBfcG9vbHNfbG9jayk7XFxuK1xcdElOSVRfUkNVX1dPUksoXFx1MDAyNnBvb2wtXFx1MDAzZXJlbGVhc2VfcndvcmssIF9fenN3YXBfcG9vbF9yZWxlYXNlKTtcXG4rXFx0cXVldWVfcmN1X3dvcmsoc3lzdGVtX3BlcmNwdV93cSwgXFx1MDAyNnBvb2wtXFx1MDAzZXJlbGVhc2VfcndvcmspO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IF9fbXVzdF9jaGVjayB6c3dhcF9wb29sX3RyeWdldChzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbClcXG5AQCAtNDM1LDIwICs0NjMsMTMgQEAgc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICpfX3pzd2FwX3Bvb2xfY3VycmVudCh2b2lkKVxcbiB7XFxuIFxcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sO1xcbiBcXG4tXFx0cG9vbCA9IGxpc3RfZmlyc3Rfb3JfbnVsbF9yY3UoXFx1MDAyNnpzd2FwX3Bvb2xzLCB0eXBlb2YoKnBvb2wpLCBsaXN0KTtcXG4rXFx0cG9vbCA9IHJjdV9kZXJlZmVyZW5jZSh6c3dhcF9jdXJyZW50X3Bvb2wpO1xcbiBcXHRXQVJOX09OQ0UoIXBvb2wgXFx1MDAyNlxcdTAwMjYgenN3YXBfaGFzX3Bvb2wsXFxuIFxcdFxcdCAgXFxcIiVzOiBubyBwYWdlIHN0b3JhZ2UgcG9vbCFcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4gXFxuIFxcdHJldHVybiBwb29sO1xcbiB9XFxuIFxcbi1zdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3VycmVudCh2b2lkKVxcbi17XFxuLVxcdGFzc2VydF9zcGluX2xvY2tlZChcXHUwMDI2enN3YXBfcG9vbHNfbG9jayk7XFxuLVxcbi1cXHRyZXR1cm4gX196c3dhcF9wb29sX2N1cnJlbnQoKTtcXG4tfVxcbi1cXG4gc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2N1cnJlbnRfZ2V0KHZvaWQpXFxuIHtcXG4gXFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7XFxuQEAgLTQ2NCwyMyArNDg1LDI4IEBAIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jdXJyZW50X2dldCh2b2lkKVxcbiBcXHRyZXR1cm4gcG9vbDtcXG4gfVxcbiBcXG4tLyogdHlwZSBhbmQgY29tcHJlc3NvciBtdXN0IGJlIG51bGwtdGVybWluYXRlZCAqL1xcbisvKiBjb21wcmVzc29yIG11c3QgYmUgbnVsbC10ZXJtaW5hdGVkICovXFxuIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9maW5kX2dldChjaGFyICpjb21wcmVzc29yKVxcbiB7XFxuIFxcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sO1xcbitcXHR1bnNpZ25lZCBsb25nIGlkO1xcbiBcXG4tXFx0YXNzZXJ0X3NwaW5fbG9ja2VkKFxcdTAwMjZ6c3dhcF9wb29sc19sb2NrKTtcXG4tXFxuLVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBvb2wsIFxcdTAwMjZ6c3dhcF9wb29scywgbGlzdCkge1xcbitcXHQvKlxcbitcXHQgKiBfX3pzd2FwX3Bvb2xfZW1wdHkoKSBjYW4gZXJhc2UgZnJvbSB6c3dhcF9wb29scyBpbiBzb2Z0aXJxIHdoaWxlIHdlXFxuK1xcdCAqIHdhbGsuICByY3VfcmVhZF9sb2NrKCkga2VlcHMgdGhlIHdhbGsgY29uc2lzdGVudCBhbmQgZWFjaCBwb29sIGFsaXZlXFxuK1xcdCAqIGFjcm9zcyB0cnlnZXQoKS4gIHhhX2Zvcl9lYWNoKCkncyBvd24gUkNVIGRvZXMgbm90IHNwYW4gdGhlIGxvb3AgYm9keS5cXG4rXFx0ICovXFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0eGFfZm9yX2VhY2goXFx1MDAyNnpzd2FwX3Bvb2xzLCBpZCwgcG9vbCkge1xcbiBcXHRcXHRpZiAoc3RyY21wKHBvb2wtXFx1MDAzZXRmbV9uYW1lLCBjb21wcmVzc29yKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdC8qIGlmIHdlIGNhbid0IGdldCBpdCwgaXQncyBhYm91dCB0byBiZSBkZXN0cm95ZWQgKi9cXG4tXFx0XFx0aWYgKCF6c3dhcF9wb29sX3RyeWdldChwb29sKSlcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdHJldHVybiBwb29sO1xcbitcXHRcXHRpZiAoenN3YXBfcG9vbF90cnlnZXQocG9vbCkpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4tXFx0cmV0dXJuIE5VTEw7XFxuK1xcdHJldHVybiBwb29sO1xcbiB9XFxuIFxcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyB6c3dhcF9tYXhfcGFnZXModm9pZClcXG5AQCAtNDk3LDkgKzUyMywxNCBAQCB1bnNpZ25lZCBsb25nIHpzd2FwX3RvdGFsX3BhZ2VzKHZvaWQpXFxuIHtcXG4gXFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7XFxuIFxcdHVuc2lnbmVkIGxvbmcgdG90YWwgPSAwO1xcbitcXHR1bnNpZ25lZCBsb25nIGlkO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogcmN1X3JlYWRfbG9jaygpIGtlZXBzIGVhY2ggcG9vbCBhbGl2ZSBhY3Jvc3MgenNfZ2V0X3RvdGFsX3BhZ2VzKCkuXFxuK1xcdCAqIHhhX2Zvcl9lYWNoKCkncyBvd24gUkNVIGRvZXMgbm90IHNwYW4gdGhlIGxvb3AgYm9keS5cXG4rXFx0ICovXFxuIFxcdHJjdV9yZWFkX2xvY2soKTtcXG4tXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9vbCwgXFx1MDAyNnpzd2FwX3Bvb2xzLCBsaXN0KVxcbitcXHR4YV9mb3JfZWFjaChcXHUwMDI2enN3YXBfcG9vbHMsIGlkLCBwb29sKVxcbiBcXHRcXHR0b3RhbCArPSB6c19nZXRfdG90YWxfcGFnZXMocG9vbC1cXHUwMDNlenNfcG9vbCk7XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG5AQCAtNTU2LDIwICs1ODcsMTMgQEAgc3RhdGljIGludCB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldChjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1cXG4gXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIFxcdH1cXG4gXFxuLVxcdHNwaW5fbG9ja19iaChcXHUwMDI2enN3YXBfcG9vbHNfbG9jayk7XFxuLVxcbiBcXHRwb29sID0genN3YXBfcG9vbF9maW5kX2dldChzKTtcXG4tXFx0aWYgKHBvb2wpIHtcXG4rXFx0aWYgKCFwb29sKSB7XFxuK1xcdFxcdHBvb2wgPSB6c3dhcF9wb29sX2NyZWF0ZShzKTtcXG4rXFx0fSBlbHNlIHtcXG4gXFx0XFx0enN3YXBfcG9vbF9kZWJ1ZyhcXFwidXNpbmcgZXhpc3RpbmdcXFwiLCBwb29sKTtcXG4tXFx0XFx0V0FSTl9PTihwb29sID09IHpzd2FwX3Bvb2xfY3VycmVudCgpKTtcXG4tXFx0XFx0bGlzdF9kZWxfcmN1KFxcdTAwMjZwb29sLVxcdTAwM2VsaXN0KTtcXG4tXFx0fVxcbitcXHRcXHRXQVJOX09OKHBvb2wgPT0gcmN1X2FjY2Vzc19wb2ludGVyKHpzd2FwX2N1cnJlbnRfcG9vbCkpO1xcbiBcXG4tXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnpzd2FwX3Bvb2xzX2xvY2spO1xcbi1cXG4tXFx0aWYgKCFwb29sKVxcbi1cXHRcXHRwb29sID0genN3YXBfcG9vbF9jcmVhdGUocyk7XFxuLVxcdGVsc2Uge1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBSZXN0b3JlIHRoZSBpbml0aWFsIHJlZiBkcm9wcGVkIGJ5IHBlcmNwdV9yZWZfa2lsbCgpXFxuIFxcdFxcdCAqIHdoZW4gdGhlIHBvb2wgd2FzIGRlY29tbWlzc2lvbmVkIGFuZCBzd2l0Y2ggaXQgYWdhaW5cXG5AQCAtNTg2LDI0ICs2MTAsMTggQEAgc3RhdGljIGludCB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldChjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1cXG4gXFx0ZWxzZVxcbiBcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbiBcXG4tXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ6c3dhcF9wb29sc19sb2NrKTtcXG4tXFxuK1xcdC8qXFxuK1xcdCAqIENvbXByZXNzb3Igc3dpdGNoZXMgYXJlIHNlcmlhbGl6ZWQgYnkgdGhlIGtlcm5lbCBwYXJhbSBsb2NrLCBzbyB0aGlzXFxuK1xcdCAqIGlzIHRoZSBvbmx5IHdyaXRlciBvZiB6c3dhcF9jdXJyZW50X3Bvb2w6IG5vIHhhX2xvY2sgbmVlZGVkLlxcbitcXHQgKi9cXG4gXFx0aWYgKCFyZXQpIHtcXG4tXFx0XFx0cHV0X3Bvb2wgPSB6c3dhcF9wb29sX2N1cnJlbnQoKTtcXG4tXFx0XFx0bGlzdF9hZGRfcmN1KFxcdTAwMjZwb29sLVxcdTAwM2VsaXN0LCBcXHUwMDI2enN3YXBfcG9vbHMpO1xcbitcXHRcXHRwdXRfcG9vbCA9IHJjdV9hY2Nlc3NfcG9pbnRlcih6c3dhcF9jdXJyZW50X3Bvb2wpO1xcbitcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIoenN3YXBfY3VycmVudF9wb29sLCBwb29sKTtcXG4gXFx0XFx0enN3YXBfaGFzX3Bvb2wgPSB0cnVlO1xcbiBcXHR9IGVsc2UgaWYgKHBvb2wpIHtcXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogQWRkIHRoZSBwb3NzaWJseSBwcmUtZXhpc3RpbmcgcG9vbCB0byB0aGUgZW5kIG9mIHRoZSBwb29sc1xcbi1cXHRcXHQgKiBsaXN0OyBpZiBpdCdzIG5ldyAoYW5kIGVtcHR5KSB0aGVuIGl0J2xsIGJlIHJlbW92ZWQgYW5kXFxuLVxcdFxcdCAqIGRlc3Ryb3llZCBieSB0aGUgcHV0IGFmdGVyIHdlIGRyb3AgdGhlIGxvY2tcXG4tXFx0XFx0ICovXFxuLVxcdFxcdGxpc3RfYWRkX3RhaWxfcmN1KFxcdTAwMjZwb29sLVxcdTAwM2VsaXN0LCBcXHUwMDI2enN3YXBfcG9vbHMpO1xcbiBcXHRcXHRwdXRfcG9vbCA9IHBvb2w7XFxuIFxcdH1cXG4gXFxuLVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ6c3dhcF9wb29sc19sb2NrKTtcXG4tXFxuIFxcdC8qXFxuIFxcdCAqIERyb3AgdGhlIHJlZiBmcm9tIGVpdGhlciB0aGUgb2xkIGN1cnJlbnQgcG9vbCxcXG4gXFx0ICogb3IgdGhlIG5ldyBwb29sIHdlIGZhaWxlZCB0byBhZGRcXG5AQCAtNzUxLDkgKzc2OSwxMyBAQCBzdGF0aWMgdm9pZCB6c3dhcF9lbnRyeV9jYWNoZV9mcmVlKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXFxuICAqL1xcbiBzdGF0aWMgdm9pZCB6c3dhcF9lbnRyeV9mcmVlKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXFxuIHtcXG4rXFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSB6c3dhcF9lbnRyeV9wb29sKGVudHJ5KTtcXG4rXFxuIFxcdHpzd2FwX2xydV9kZWwoZW50cnkpO1xcbi1cXHR6c19mcmVlKGVudHJ5LVxcdTAwM2Vwb29sLVxcdTAwM2V6c19wb29sLCBlbnRyeS1cXHUwMDNlaGFuZGxlKTtcXG4tXFx0enN3YXBfcG9vbF9wdXQoZW50cnktXFx1MDAzZXBvb2wpO1xcbitcXHRpZiAoIVdBUk5fT05fT05DRSghcG9vbCkpIHtcXG4rXFx0XFx0enNfZnJlZShwb29sLVxcdTAwM2V6c19wb29sLCBlbnRyeS1cXHUwMDNlaGFuZGxlKTtcXG4rXFx0XFx0enN3YXBfcG9vbF9wdXQocG9vbCk7XFxuK1xcdH1cXG4gXFx0aWYgKGVudHJ5LVxcdTAwM2VvYmpjZykge1xcbiBcXHRcXHRvYmpfY2dyb3VwX3VuY2hhcmdlX3pzd2FwKGVudHJ5LVxcdTAwM2VvYmpjZywgZW50cnktXFx1MDAzZWxlbmd0aCk7XFxuIFxcdFxcdG9ial9jZ3JvdXBfcHV0KGVudHJ5LVxcdTAwM2VvYmpjZyk7XFxuQEAgLTkxMCwxMiArOTMyLDE1IEBAIHN0YXRpYyBib29sIHpzd2FwX2NvbXByZXNzKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxcbiBcXG4gc3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuLVxcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sID0gZW50cnktXFx1MDAzZXBvb2w7XFxuK1xcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sID0genN3YXBfZW50cnlfcG9vbChlbnRyeSk7XFxuIFxcdHN0cnVjdCBzY2F0dGVybGlzdCBpbnB1dFsyXTsgLyogenNtYWxsb2MgcmV0dXJucyBhbiBTRyBsaXN0IDEtMiBlbnRyaWVzICovXFxuIFxcdHN0cnVjdCBzY2F0dGVybGlzdCBvdXRwdXQ7XFxuIFxcdHN0cnVjdCBjcnlwdG9fYWNvbXBfY3R4ICphY29tcF9jdHg7XFxuIFxcdGludCByZXQgPSAwLCBkbGVuO1xcbiBcXG4rXFx0aWYgKFdBUk5fT05fT05DRSghcG9vbCkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuIFxcdGFjb21wX2N0eCA9IHJhd19jcHVfcHRyKHBvb2wtXFx1MDAzZWFjb21wX2N0eCk7XFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNmFjb21wX2N0eC1cXHUwMDNlbXV0ZXgpO1xcbiBcXHR6c19vYmpfcmVhZF9zZ19iZWdpbihwb29sLVxcdTAwM2V6c19wb29sLCBlbnRyeS1cXHUwMDNlaGFuZGxlLCBpbnB1dCwgZW50cnktXFx1MDAzZWxlbmd0aCk7XFxuQEAgLTk1MSw3ICs5NzYsNyBAQCBzdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdHByX2FsZXJ0X3JhdGVsaW1pdGVkKFxcXCJEZWNvbXByZXNzaW9uIGVycm9yIGZyb20genN3YXAgKCVkOiVsdSAlcyAldS1cXHUwMDNlJWQpXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRzd3BfdHlwZShlbnRyeS1cXHUwMDNlc3dwZW50cnkpLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRzd3Bfb2Zmc2V0KGVudHJ5LVxcdTAwM2Vzd3BlbnRyeSksXFxuLVxcdFxcdFxcdFxcdFxcdFxcdGVudHJ5LVxcdTAwM2Vwb29sLVxcdTAwM2V0Zm1fbmFtZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0cG9vbC1cXHUwMDNldGZtX25hbWUsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdGVudHJ5LVxcdTAwM2VsZW5ndGgsIGRsZW4pO1xcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG5AQCAtMTQwOSw2ICsxNDM0LDEzIEBAIHN0YXRpYyBib29sIHpzd2FwX3N0b3JlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuIFxcdGlmICghenN3YXBfY29tcHJlc3MocGFnZSwgZW50cnksIHBvb2wpKVxcbiBcXHRcXHRnb3RvIGNvbXByZXNzX2ZhaWxlZDtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFNldCBwb29sX2lkeCBiZWZvcmUgdGhlIHhhX3N0b3JlKCkgYmVsb3cgcHVibGlzaGVzIHRoZSBlbnRyeSwgb3IgYVxcbitcXHQgKiBjb25jdXJyZW50IHJlYWRlciBjb3VsZCByZXNvbHZlIGEgc3RhbGUgcG9vbF9pZHggbGVmdCBieSBzbGFiIHJldXNlXFxuK1xcdCAqIHRvIGFuIHVucmVsYXRlZCBsaXZlIHBvb2wuXFxuK1xcdCAqL1xcbitcXHRlbnRyeS1cXHUwMDNlcG9vbF9pZHggPSBwb29sLVxcdTAwM2VpZHg7XFxuK1xcbiBcXHRvbGQgPSB4YV9zdG9yZShzd2FwX3pzd2FwX3RyZWUocGFnZV9zd3BlbnRyeSksXFxuIFxcdFxcdCAgICAgICBzd3Bfb2Zmc2V0KHBhZ2Vfc3dwZW50cnkpLFxcbiBcXHRcXHQgICAgICAgZW50cnksIEdGUF9LRVJORUwpO1xcbkBAIC0xNDU0LDcgKzE0ODYsNiBAQCBzdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxcbiBcXHQgKiAgICBUaGUgcHVibGlzaGluZyBvcmRlciBtYXR0ZXJzIHRvIHByZXZlbnQgd3JpdGViYWNrIGZyb20gc2VlaW5nXFxuIFxcdCAqICAgIGFuIGluY29oZXJlbnQgZW50cnkuXFxuIFxcdCAqL1xcbi1cXHRlbnRyeS1cXHUwMDNlcG9vbCA9IHBvb2w7XFxuIFxcdGVudHJ5LVxcdTAwM2Vzd3BlbnRyeSA9IHBhZ2Vfc3dwZW50cnk7XFxuIFxcdGVudHJ5LVxcdTAwM2VvYmpjZyA9IG9iamNnO1xcbiBcXHRlbnRyeS1cXHUwMDNlcmVmZXJlbmNlZCA9IHRydWU7XFxuQEAgLTE3OTAsNyArMTgyMSw3IEBAIHN0YXRpYyBpbnQgenN3YXBfc2V0dXAodm9pZClcXG4gXFx0cG9vbCA9IF9fenN3YXBfcG9vbF9jcmVhdGVfZmFsbGJhY2soKTtcXG4gXFx0aWYgKHBvb2wpIHtcXG4gXFx0XFx0cHJfaW5mbyhcXFwibG9hZGVkIHVzaW5nIHBvb2wgJXNcXFxcblxcXCIsIHBvb2wtXFx1MDAzZXRmbV9uYW1lKTtcXG4tXFx0XFx0bGlzdF9hZGQoXFx1MDAyNnBvb2wtXFx1MDAzZWxpc3QsIFxcdTAwMjZ6c3dhcF9wb29scyk7XFxuK1xcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcih6c3dhcF9jdXJyZW50X3Bvb2wsIHBvb2wpO1xcbiBcXHRcXHR6c3dhcF9oYXNfcG9vbCA9IHRydWU7XFxuIFxcdFxcdHN0YXRpY19icmFuY2hfZW5hYmxlKFxcdTAwMjZ6c3dhcF9ldmVyX2VuYWJsZWQpO1xcbiBcXHR9IGVsc2Uge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMDoxODoyOC44NTg2ODUyMDZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE4NjU5ODY2MzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpTV0FQXCIsXG4gICAgXCJTV0FQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwienN3YXBfc3RvcmVcIixcbiAgICBcInpzd2FwX2xvYWRcIixcbiAgICBcInpzd2FwX3N0b3JlX3BhZ2VcIixcbiAgICBcInpzd2FwX2RlY29tcHJlc3NcIixcbiAgICBcInpzd2FwX2VudHJ5X2ZyZWVcIixcbiAgICBcInpzd2FwX3Bvb2xfY3JlYXRlXCIsXG4gICAgXCJ6c3dhcF9wb29sX2ZpbmRfZ2V0XCIsXG4gICAgXCJfX3pzd2FwX3Bvb2xfZW1wdHlcIixcbiAgICBcIl9fenN3YXBfcG9vbF9yZWxlYXNlXCIsXG4gICAgXCJ6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldFwiLFxuICAgIFwienN3YXBfdG90YWxfcGFnZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGluIG1tL3pzd2FwLmMsIHJlZmFjdG9yaW5nIHBvb2wgYW5kIGVudHJ5IHRyYWNraW5nIGZyb20gYSBsaW5rZWQgbGlzdCBhbmQgcmF3IHBvb2wgcG9pbnRlciB0byBhbiBJRC1iYXNlZCBYQXJyYXkgd2l0aCA4LWJpdCBwb29sIGluZGljZXMgaW4gc3RydWN0IHpzd2FwX2VudHJ5LiBJdCBhbHNvIHVwZGF0ZXMgc3luY2hyb25pemF0aW9uIHNlbWFudGljcyB1c2luZyBSQ1UgYW5kIHJjdV93b3JrIChxdWV1ZV9yY3Vfd29yaykgYWxvbmcgd2l0aCBzb2Z0aXJxLXNhZmUgWEFycmF5IG9wZXJhdGlvbnMgKHhhX2FsbG9jX2JoLCB4YV9lcmFzZV9iaCkuIFRoZXNlIGNvbmN1cnJlbmN5IGFuZCBkYXRhIHN0cnVjdHVyZSBtb2RpZmljYXRpb25zIGluIHJlYWNoYWJsZSBNTSBjb2RlIHdhcnJhbnQgZnV6emluZyB0byBkZXRlY3QgcG9zc2libGUgcmFjZXMsIHN0YWxlIElEIGRlcmVmZXJlbmNlcywgb3IgYXNzZXJ0aW9uIHRyaXBzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZmYzgyYmJkMGY0NTY1MGIzNjdmZjNiYTBmZDBkOTZiYmU5YTI0MTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDIwOjE4OjI3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmNcbmluZGV4IGYzYWUzYzgxZTQ4ZWEuLjI1M2VlYmI5NzFiOTcgMTAwNjQ0XG4tLS0gYS9tbS96c3dhcC5jXG4rKysgYi9tbS96c3dhcC5jXG5AQCAtMzQsNiArMzQsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3dyaXRlYmFjay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZW1hcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC94YXJyYXkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3RfbHJ1LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC96c21hbGxvYy5oXHUwMDNlXG4gXG5AQCAtMTU0LDEyICsxNTUsMjMgQEAgc3RydWN0IHpzd2FwX3Bvb2wge1xuIFx0c3RydWN0IHpzX3Bvb2wgKnpzX3Bvb2w7XG4gXHRzdHJ1Y3QgY3J5cHRvX2Fjb21wX2N0eCBfX3BlcmNwdSAqYWNvbXBfY3R4O1xuIFx0c3RydWN0IHBlcmNwdV9yZWYgcmVmO1xuLVx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuLVx0c3RydWN0IHdvcmtfc3RydWN0IHJlbGVhc2Vfd29yaztcbitcdHN0cnVjdCByY3Vfd29yayByZWxlYXNlX3J3b3JrO1xuIFx0c3RydWN0IGhsaXN0X25vZGUgbm9kZTtcbitcdHU4IGlkeDtcbiBcdGNoYXIgdGZtX25hbWVbQ1JZUFRPX01BWF9BTEdfTkFNRV07XG4gfTtcbiBcbisvKlxuKyAqIExpdmUgcG9vbHMga2V5ZWQgYnkgaWQgKDEuLlpTV0FQX01BWF9QT09MX0lEKS4gIFhBX0ZMQUdTX0FMTE9DMSBrZWVwcyBpZCAwXG4rICogcmVzZXJ2ZWQgc28gaXQgaXMgbmV2ZXIgaGFuZGVkIHRvIGEgbGl2ZSBwb29sLiAgWEFfRkxBR1NfTE9DS19CSCBtYWtlcyB0aGVcbisgKiB4YV9sb2NrIHNvZnRpcnEtc2FmZTogaXQgaXMgdGFrZW4gZnJvbSBfX3pzd2FwX3Bvb2xfZW1wdHkoKSwgd2hpY2ggcnVucyBmcm9tXG4rICogYSBwZXJjcHVfcmVmIHJlbGVhc2UgY2FsbGJhY2sgaW4gc29mdGlycSBjb250ZXh0LlxuKyAqL1xuKyNkZWZpbmUgWlNXQVBfRklSU1RfUE9PTF9JRCAxXG4rI2RlZmluZSBaU1dBUF9NQVhfUE9PTF9JRCBVOF9NQVhcbitzdGF0aWMgREVGSU5FX1hBUlJBWV9GTEFHUyh6c3dhcF9wb29scywgWEFfRkxBR1NfQUxMT0MxIHwgWEFfRkxBR1NfTE9DS19CSCk7XG4rc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sIF9fcmN1ICp6c3dhcF9jdXJyZW50X3Bvb2w7XG4rXG4gLyogR2xvYmFsIExSVSBsaXN0cyBzaGFyZWQgYnkgYWxsIHpzd2FwIHBvb2xzLiAqL1xuIHN0YXRpYyBzdHJ1Y3QgbGlzdF9scnUgenN3YXBfbGlzdF9scnU7XG4gXG5AQCAtMTgyLDcgKzE5NCw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2hyaW5rZXIgKnpzd2FwX3Nocmlua2VyO1xuICAqICAgICAgICAgICAgICB3cml0ZWJhY2sgbG9naWMuIFRoZSBlbnRyeSBpcyBvbmx5IHJlY2xhaW1lZCBieSB0aGUgd3JpdGViYWNrXG4gICogICAgICAgICAgICAgIGxvZ2ljIGlmIHJlZmVyZW5jZWQgaXMgdW5zZXQuIFNlZSBjb21tZW50cyBpbiB0aGUgc2hyaW5rZXJcbiAgKiAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgY29udGV4dC5cbi0gKiBwb29sIC0gdGhlIHpzd2FwX3Bvb2wgdGhlIGVudHJ5J3MgZGF0YSBpcyBpblxuKyAqIHBvb2xfaWR4IC0gaWQgb2YgdGhlIHpzd2FwX3Bvb2wgdGhhdCB0aGUgZW50cnkncyBkYXRhIGlzIGluLlxuICAqIGhhbmRsZSAtIHpzbWFsbG9jIGFsbG9jYXRpb24gaGFuZGxlIHRoYXQgc3RvcmVzIHRoZSBjb21wcmVzc2VkIHBhZ2UgZGF0YVxuICAqIG9iamNnIC0gdGhlIG9ial9jZ3JvdXAgdGhhdCB0aGUgY29tcHJlc3NlZCBtZW1vcnkgaXMgY2hhcmdlZCB0b1xuICAqIGxydSAtIGhhbmRsZSB0byB0aGUgcG9vbCdzIGxydSB1c2VkIHRvIGV2aWN0IHBhZ2VzLlxuQEAgLTE5MSwxOSArMjAzLDI1IEBAIHN0cnVjdCB6c3dhcF9lbnRyeSB7XG4gXHRzd3BfZW50cnlfdCBzd3BlbnRyeTtcbiBcdHVuc2lnbmVkIGludCBsZW5ndGg7XG4gXHRib29sIHJlZmVyZW5jZWQ7XG4tXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDtcbitcdHU4IHBvb2xfaWR4O1xuIFx0dW5zaWduZWQgbG9uZyBoYW5kbGU7XG4gXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGxydTtcbiB9O1xuIFxuKy8qXG4rICogTm8gUkNVIHNlY3Rpb24gaXMgbmVlZGVkIGFyb3VuZCB0aGUgcmV0dXJuZWQgcG9pbnRlcjogYSBzdG9yZWQgZW50cnkgcGluc1xuKyAqIGl0cyBwb29sIHZpYSBwZXJjcHVfcmVmICh0YWtlbiBpbiB6c3dhcF9zdG9yZV9wYWdlKCkpLCBzbyB0aGUgaWQgY2Fubm90IGJlXG4rICogcmV1c2VkIHVuZGVyIHVzLiAgQ2FsbGVycyBXQVJOIGFuZCBoYW5kbGUgYSBOVUxMIGZyb20gYSBjb3JydXB0IHBvb2xfaWR4LlxuKyAqL1xuK3N0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfZW50cnlfcG9vbChzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxuK3tcbitcdHJldHVybiB4YV9sb2FkKFx1MDAyNnpzd2FwX3Bvb2xzLCBlbnRyeS1cdTAwM2Vwb29sX2lkeCk7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgeGFycmF5ICp6c3dhcF90cmVlc1tNQVhfU1dBUEZJTEVTXTtcbiBzdGF0aWMgdW5zaWduZWQgaW50IG5yX3pzd2FwX3RyZWVzW01BWF9TV0FQRklMRVNdO1xuIFxuLS8qIFJDVS1wcm90ZWN0ZWQgaXRlcmF0aW9uICovXG4tc3RhdGljIExJU1RfSEVBRCh6c3dhcF9wb29scyk7XG4tLyogcHJvdGVjdHMgenN3YXBfcG9vbHMgbGlzdCBtb2RpZmljYXRpb24gKi9cbi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHpzd2FwX3Bvb2xzX2xvY2spO1xuIC8qIHBvb2wgY291bnRlciB0byBwcm92aWRlIHVuaXF1ZSBuYW1lcyB0byB6c21hbGxvYyAqL1xuIHN0YXRpYyBhdG9taWNfdCB6c3dhcF9wb29sc19jb3VudCA9IEFUT01JQ19JTklUKDApO1xuIFxuQEAgLTI3NSw2ICsyOTMsNyBAQCBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3JlYXRlKGNoYXIgKmNvbXByZXNzb3IpXG4gXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDtcbiBcdGNoYXIgbmFtZVszOF07IC8qICd6c3dhcCcgKyAzMiBjaGFyIChtYXgpIG51bSArIFxcMCAqL1xuIFx0aW50IHJldCwgY3B1O1xuK1x0dTMyIGlkO1xuIFxuIFx0aWYgKCF6c3dhcF9oYXNfcG9vbCBcdTAwMjZcdTAwMjYgIXN0cmNtcChjb21wcmVzc29yLCBaU1dBUF9QQVJBTV9VTlNFVCkpXG4gXHRcdHJldHVybiBOVUxMO1xuQEAgLTMyMCwxMiArMzM5LDI5IEBAIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jcmVhdGUoY2hhciAqY29tcHJlc3NvcilcbiBcdFx0XHQgICAgICBQRVJDUFVfUkVGX0FMTE9XX1JFSU5JVCwgR0ZQX0tFUk5FTCk7XG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIHJlZl9mYWlsO1xuLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cG9vbC1cdTAwM2VsaXN0KTtcbitcbitcdC8qXG4rXHQgKiBQdWJsaXNoIG9ubHkgYWZ0ZXIgdGhlIHBvb2wgaXMgZnVsbHkgYnVpbHQsIHNvIGxvY2tsZXNzIHdhbGtlcnNcbitcdCAqIG5ldmVyIHNlZSBhIGhhbGYtaW5pdGlhbGl6ZWQgcG9vbC4gIFRoZSBfYmggdmFyaWFudCBwYWlycyB3aXRoIHRoZVxuK1x0ICogc29mdGlycS1jb250ZXh0IHhhX2xvY2sgdGFrZW4gaW4gX196c3dhcF9wb29sX2VtcHR5KCkuXG4rXHQgKi9cbitcdHJldCA9IHhhX2FsbG9jX2JoKFx1MDAyNnpzd2FwX3Bvb2xzLCBcdTAwMjZpZCwgcG9vbCxcbitcdFx0XHQgIFhBX0xJTUlUKFpTV0FQX0ZJUlNUX1BPT0xfSUQsIFpTV0FQX01BWF9QT09MX0lEKSxcbitcdFx0XHQgIEdGUF9LRVJORUwpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRpZiAocmV0ID09IC1FQlVTWSlcbitcdFx0XHRwcl9lcnIoXCJjYW5ub3QgYWxsb2NhdGUgcG9vbCBpZCAobWF4ICVkIGxpdmUgcG9vbHMpXFxuXCIsXG4rXHRcdFx0ICAgICAgIFpTV0FQX01BWF9QT09MX0lEIC0gWlNXQVBfRklSU1RfUE9PTF9JRCArIDEpO1xuK1x0XHRnb3RvIHhhX2ZhaWw7XG4rXHR9XG4rXHRwb29sLVx1MDAzZWlkeCA9IGlkO1xuIFxuIFx0enN3YXBfcG9vbF9kZWJ1ZyhcImNyZWF0ZWRcIiwgcG9vbCk7XG4gXG4gXHRyZXR1cm4gcG9vbDtcbiBcbit4YV9mYWlsOlxuK1x0cGVyY3B1X3JlZl9leGl0KFx1MDAyNnBvb2wtXHUwMDNlcmVmKTtcbiByZWZfZmFpbDpcbiBcdGNwdWhwX3N0YXRlX3JlbW92ZV9pbnN0YW5jZShDUFVIUF9NTV9aU1dQX1BPT0xfUFJFUEFSRSwgXHUwMDI2cG9vbC1cdTAwM2Vub2RlKTtcbiBcbkBAIC0zNzksMzcgKzQxNSwyOSBAQCBzdGF0aWMgdm9pZCB6c3dhcF9wb29sX2Rlc3Ryb3koc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wpXG4gXG4gc3RhdGljIHZvaWQgX196c3dhcF9wb29sX3JlbGVhc2Uoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIHtcbi1cdHN0cnVjdCB6c3dhcF9wb29sICpwb29sID0gY29udGFpbmVyX29mKHdvcmssIHR5cGVvZigqcG9vbCksXG4tXHRcdFx0XHRcdFx0cmVsZWFzZV93b3JrKTtcbi1cbi1cdHN5bmNocm9uaXplX3JjdSgpO1xuK1x0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSBjb250YWluZXJfb2YodG9fcmN1X3dvcmsod29yayksXG4rXHRcdFx0XHRcdCAgICAgICB0eXBlb2YoKnBvb2wpLCByZWxlYXNlX3J3b3JrKTtcbiBcbiBcdC8qIG5vYm9keSBzaG91bGQgaGF2ZSBiZWVuIGFibGUgdG8gZ2V0IGEgcmVmLi4uICovXG4gXHRXQVJOX09OKCFwZXJjcHVfcmVmX2lzX3plcm8oXHUwMDI2cG9vbC1cdTAwM2VyZWYpKTtcbiBcdHBlcmNwdV9yZWZfZXhpdChcdTAwMjZwb29sLVx1MDAzZXJlZik7XG4gXG4tXHQvKiBwb29sIGlzIG5vdyBvZmYgenN3YXBfcG9vbHMgbGlzdCBhbmQgaGFzIG5vIHJlZmVyZW5jZXMuICovXG4rXHQvKiBUaGUgcG9vbCBpcyBubyBsb25nZXIgaW4genN3YXBfcG9vbHMgYW5kIGhhcyBubyByZWZlcmVuY2VzLiAqL1xuIFx0enN3YXBfcG9vbF9kZXN0cm95KHBvb2wpO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3VycmVudCh2b2lkKTtcbi1cbiBzdGF0aWMgdm9pZCBfX3pzd2FwX3Bvb2xfZW1wdHkoc3RydWN0IHBlcmNwdV9yZWYgKnJlZilcbiB7XG4gXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDtcbiBcbiBcdHBvb2wgPSBjb250YWluZXJfb2YocmVmLCB0eXBlb2YoKnBvb2wpLCByZWYpO1xuIFxuLVx0c3Bpbl9sb2NrX2JoKFx1MDAyNnpzd2FwX3Bvb2xzX2xvY2spO1xuLVxuLVx0V0FSTl9PTihwb29sID09IHpzd2FwX3Bvb2xfY3VycmVudCgpKTtcbitcdFdBUk5fT04ocG9vbCA9PSByY3VfYWNjZXNzX3BvaW50ZXIoenN3YXBfY3VycmVudF9wb29sKSk7XG4gXG4tXHRsaXN0X2RlbF9yY3UoXHUwMDI2cG9vbC1cdTAwM2VsaXN0KTtcbitcdHhhX2VyYXNlX2JoKFx1MDAyNnpzd2FwX3Bvb2xzLCBwb29sLVx1MDAzZWlkeCk7XG4gXG4tXHRJTklUX1dPUksoXHUwMDI2cG9vbC1cdTAwM2VyZWxlYXNlX3dvcmssIF9fenN3YXBfcG9vbF9yZWxlYXNlKTtcbi1cdHNjaGVkdWxlX3dvcmsoXHUwMDI2cG9vbC1cdTAwM2VyZWxlYXNlX3dvcmspO1xuLVxuLVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2enN3YXBfcG9vbHNfbG9jayk7XG4rXHRJTklUX1JDVV9XT1JLKFx1MDAyNnBvb2wtXHUwMDNlcmVsZWFzZV9yd29yaywgX196c3dhcF9wb29sX3JlbGVhc2UpO1xuK1x0cXVldWVfcmN1X3dvcmsoc3lzdGVtX3BlcmNwdV93cSwgXHUwMDI2cG9vbC1cdTAwM2VyZWxlYXNlX3J3b3JrKTtcbiB9XG4gXG4gc3RhdGljIGludCBfX211c3RfY2hlY2sgenN3YXBfcG9vbF90cnlnZXQoc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wpXG5AQCAtNDM1LDIwICs0NjMsMTMgQEAgc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICpfX3pzd2FwX3Bvb2xfY3VycmVudCh2b2lkKVxuIHtcbiBcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sO1xuIFxuLVx0cG9vbCA9IGxpc3RfZmlyc3Rfb3JfbnVsbF9yY3UoXHUwMDI2enN3YXBfcG9vbHMsIHR5cGVvZigqcG9vbCksIGxpc3QpO1xuK1x0cG9vbCA9IHJjdV9kZXJlZmVyZW5jZSh6c3dhcF9jdXJyZW50X3Bvb2wpO1xuIFx0V0FSTl9PTkNFKCFwb29sIFx1MDAyNlx1MDAyNiB6c3dhcF9oYXNfcG9vbCxcbiBcdFx0ICBcIiVzOiBubyBwYWdlIHN0b3JhZ2UgcG9vbCFcXG5cIiwgX19mdW5jX18pO1xuIFxuIFx0cmV0dXJuIHBvb2w7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jdXJyZW50KHZvaWQpXG4te1xuLVx0YXNzZXJ0X3NwaW5fbG9ja2VkKFx1MDAyNnpzd2FwX3Bvb2xzX2xvY2spO1xuLVxuLVx0cmV0dXJuIF9fenN3YXBfcG9vbF9jdXJyZW50KCk7XG4tfVxuLVxuIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jdXJyZW50X2dldCh2b2lkKVxuIHtcbiBcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sO1xuQEAgLTQ2NCwyMyArNDg1LDI4IEBAIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jdXJyZW50X2dldCh2b2lkKVxuIFx0cmV0dXJuIHBvb2w7XG4gfVxuIFxuLS8qIHR5cGUgYW5kIGNvbXByZXNzb3IgbXVzdCBiZSBudWxsLXRlcm1pbmF0ZWQgKi9cbisvKiBjb21wcmVzc29yIG11c3QgYmUgbnVsbC10ZXJtaW5hdGVkICovXG4gc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2ZpbmRfZ2V0KGNoYXIgKmNvbXByZXNzb3IpXG4ge1xuIFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7XG4rXHR1bnNpZ25lZCBsb25nIGlkO1xuIFxuLVx0YXNzZXJ0X3NwaW5fbG9ja2VkKFx1MDAyNnpzd2FwX3Bvb2xzX2xvY2spO1xuLVxuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9vbCwgXHUwMDI2enN3YXBfcG9vbHMsIGxpc3QpIHtcbitcdC8qXG4rXHQgKiBfX3pzd2FwX3Bvb2xfZW1wdHkoKSBjYW4gZXJhc2UgZnJvbSB6c3dhcF9wb29scyBpbiBzb2Z0aXJxIHdoaWxlIHdlXG4rXHQgKiB3YWxrLiAgcmN1X3JlYWRfbG9jaygpIGtlZXBzIHRoZSB3YWxrIGNvbnNpc3RlbnQgYW5kIGVhY2ggcG9vbCBhbGl2ZVxuK1x0ICogYWNyb3NzIHRyeWdldCgpLiAgeGFfZm9yX2VhY2goKSdzIG93biBSQ1UgZG9lcyBub3Qgc3BhbiB0aGUgbG9vcCBib2R5LlxuK1x0ICovXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHR4YV9mb3JfZWFjaChcdTAwMjZ6c3dhcF9wb29scywgaWQsIHBvb2wpIHtcbiBcdFx0aWYgKHN0cmNtcChwb29sLVx1MDAzZXRmbV9uYW1lLCBjb21wcmVzc29yKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0LyogaWYgd2UgY2FuJ3QgZ2V0IGl0LCBpdCdzIGFib3V0IHRvIGJlIGRlc3Ryb3llZCAqL1xuLVx0XHRpZiAoIXpzd2FwX3Bvb2xfdHJ5Z2V0KHBvb2wpKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHRyZXR1cm4gcG9vbDtcbitcdFx0aWYgKHpzd2FwX3Bvb2xfdHJ5Z2V0KHBvb2wpKVxuK1x0XHRcdGJyZWFrO1xuIFx0fVxuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4tXHRyZXR1cm4gTlVMTDtcbitcdHJldHVybiBwb29sO1xuIH1cbiBcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyB6c3dhcF9tYXhfcGFnZXModm9pZClcbkBAIC00OTcsOSArNTIzLDE0IEBAIHVuc2lnbmVkIGxvbmcgenN3YXBfdG90YWxfcGFnZXModm9pZClcbiB7XG4gXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDtcbiBcdHVuc2lnbmVkIGxvbmcgdG90YWwgPSAwO1xuK1x0dW5zaWduZWQgbG9uZyBpZDtcbiBcbitcdC8qXG4rXHQgKiByY3VfcmVhZF9sb2NrKCkga2VlcHMgZWFjaCBwb29sIGFsaXZlIGFjcm9zcyB6c19nZXRfdG90YWxfcGFnZXMoKS5cbitcdCAqIHhhX2Zvcl9lYWNoKCkncyBvd24gUkNVIGRvZXMgbm90IHNwYW4gdGhlIGxvb3AgYm9keS5cbitcdCAqL1xuIFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9vbCwgXHUwMDI2enN3YXBfcG9vbHMsIGxpc3QpXG4rXHR4YV9mb3JfZWFjaChcdTAwMjZ6c3dhcF9wb29scywgaWQsIHBvb2wpXG4gXHRcdHRvdGFsICs9IHpzX2dldF90b3RhbF9wYWdlcyhwb29sLVx1MDAzZXpzX3Bvb2wpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG5AQCAtNTU2LDIwICs1ODcsMTMgQEAgc3RhdGljIGludCB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldChjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1cbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXHR9XG4gXG4tXHRzcGluX2xvY2tfYmgoXHUwMDI2enN3YXBfcG9vbHNfbG9jayk7XG4tXG4gXHRwb29sID0genN3YXBfcG9vbF9maW5kX2dldChzKTtcbi1cdGlmIChwb29sKSB7XG4rXHRpZiAoIXBvb2wpIHtcbitcdFx0cG9vbCA9IHpzd2FwX3Bvb2xfY3JlYXRlKHMpO1xuK1x0fSBlbHNlIHtcbiBcdFx0enN3YXBfcG9vbF9kZWJ1ZyhcInVzaW5nIGV4aXN0aW5nXCIsIHBvb2wpO1xuLVx0XHRXQVJOX09OKHBvb2wgPT0genN3YXBfcG9vbF9jdXJyZW50KCkpO1xuLVx0XHRsaXN0X2RlbF9yY3UoXHUwMDI2cG9vbC1cdTAwM2VsaXN0KTtcbi1cdH1cbitcdFx0V0FSTl9PTihwb29sID09IHJjdV9hY2Nlc3NfcG9pbnRlcih6c3dhcF9jdXJyZW50X3Bvb2wpKTtcbiBcbi1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnpzd2FwX3Bvb2xzX2xvY2spO1xuLVxuLVx0aWYgKCFwb29sKVxuLVx0XHRwb29sID0genN3YXBfcG9vbF9jcmVhdGUocyk7XG4tXHRlbHNlIHtcbiBcdFx0LypcbiBcdFx0ICogUmVzdG9yZSB0aGUgaW5pdGlhbCByZWYgZHJvcHBlZCBieSBwZXJjcHVfcmVmX2tpbGwoKVxuIFx0XHQgKiB3aGVuIHRoZSBwb29sIHdhcyBkZWNvbW1pc3Npb25lZCBhbmQgc3dpdGNoIGl0IGFnYWluXG5AQCAtNTg2LDI0ICs2MTAsMTggQEAgc3RhdGljIGludCB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldChjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1cbiBcdGVsc2VcbiBcdFx0cmV0ID0gLUVJTlZBTDtcbiBcbi1cdHNwaW5fbG9ja19iaChcdTAwMjZ6c3dhcF9wb29sc19sb2NrKTtcbi1cbitcdC8qXG4rXHQgKiBDb21wcmVzc29yIHN3aXRjaGVzIGFyZSBzZXJpYWxpemVkIGJ5IHRoZSBrZXJuZWwgcGFyYW0gbG9jaywgc28gdGhpc1xuK1x0ICogaXMgdGhlIG9ubHkgd3JpdGVyIG9mIHpzd2FwX2N1cnJlbnRfcG9vbDogbm8geGFfbG9jayBuZWVkZWQuXG4rXHQgKi9cbiBcdGlmICghcmV0KSB7XG4tXHRcdHB1dF9wb29sID0genN3YXBfcG9vbF9jdXJyZW50KCk7XG4tXHRcdGxpc3RfYWRkX3JjdShcdTAwMjZwb29sLVx1MDAzZWxpc3QsIFx1MDAyNnpzd2FwX3Bvb2xzKTtcbitcdFx0cHV0X3Bvb2wgPSByY3VfYWNjZXNzX3BvaW50ZXIoenN3YXBfY3VycmVudF9wb29sKTtcbitcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHpzd2FwX2N1cnJlbnRfcG9vbCwgcG9vbCk7XG4gXHRcdHpzd2FwX2hhc19wb29sID0gdHJ1ZTtcbiBcdH0gZWxzZSBpZiAocG9vbCkge1xuLVx0XHQvKlxuLVx0XHQgKiBBZGQgdGhlIHBvc3NpYmx5IHByZS1leGlzdGluZyBwb29sIHRvIHRoZSBlbmQgb2YgdGhlIHBvb2xzXG4tXHRcdCAqIGxpc3Q7IGlmIGl0J3MgbmV3IChhbmQgZW1wdHkpIHRoZW4gaXQnbGwgYmUgcmVtb3ZlZCBhbmRcbi1cdFx0ICogZGVzdHJveWVkIGJ5IHRoZSBwdXQgYWZ0ZXIgd2UgZHJvcCB0aGUgbG9ja1xuLVx0XHQgKi9cbi1cdFx0bGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2cG9vbC1cdTAwM2VsaXN0LCBcdTAwMjZ6c3dhcF9wb29scyk7XG4gXHRcdHB1dF9wb29sID0gcG9vbDtcbiBcdH1cbiBcbi1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnpzd2FwX3Bvb2xzX2xvY2spO1xuLVxuIFx0LypcbiBcdCAqIERyb3AgdGhlIHJlZiBmcm9tIGVpdGhlciB0aGUgb2xkIGN1cnJlbnQgcG9vbCxcbiBcdCAqIG9yIHRoZSBuZXcgcG9vbCB3ZSBmYWlsZWQgdG8gYWRkXG5AQCAtNzUxLDkgKzc2OSwxMyBAQCBzdGF0aWMgdm9pZCB6c3dhcF9lbnRyeV9jYWNoZV9mcmVlKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXG4gICovXG4gc3RhdGljIHZvaWQgenN3YXBfZW50cnlfZnJlZShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxuIHtcbitcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sID0genN3YXBfZW50cnlfcG9vbChlbnRyeSk7XG4rXG4gXHR6c3dhcF9scnVfZGVsKGVudHJ5KTtcbi1cdHpzX2ZyZWUoZW50cnktXHUwMDNlcG9vbC1cdTAwM2V6c19wb29sLCBlbnRyeS1cdTAwM2VoYW5kbGUpO1xuLVx0enN3YXBfcG9vbF9wdXQoZW50cnktXHUwMDNlcG9vbCk7XG4rXHRpZiAoIVdBUk5fT05fT05DRSghcG9vbCkpIHtcbitcdFx0enNfZnJlZShwb29sLVx1MDAzZXpzX3Bvb2wsIGVudHJ5LVx1MDAzZWhhbmRsZSk7XG4rXHRcdHpzd2FwX3Bvb2xfcHV0KHBvb2wpO1xuK1x0fVxuIFx0aWYgKGVudHJ5LVx1MDAzZW9iamNnKSB7XG4gXHRcdG9ial9jZ3JvdXBfdW5jaGFyZ2VfenN3YXAoZW50cnktXHUwMDNlb2JqY2csIGVudHJ5LVx1MDAzZWxlbmd0aCk7XG4gXHRcdG9ial9jZ3JvdXBfcHV0KGVudHJ5LVx1MDAzZW9iamNnKTtcbkBAIC05MTAsMTIgKzkzMiwxNSBAQCBzdGF0aWMgYm9vbCB6c3dhcF9jb21wcmVzcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcbiBzdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuLVx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSBlbnRyeS1cdTAwM2Vwb29sO1xuK1x0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSB6c3dhcF9lbnRyeV9wb29sKGVudHJ5KTtcbiBcdHN0cnVjdCBzY2F0dGVybGlzdCBpbnB1dFsyXTsgLyogenNtYWxsb2MgcmV0dXJucyBhbiBTRyBsaXN0IDEtMiBlbnRyaWVzICovXG4gXHRzdHJ1Y3Qgc2NhdHRlcmxpc3Qgb3V0cHV0O1xuIFx0c3RydWN0IGNyeXB0b19hY29tcF9jdHggKmFjb21wX2N0eDtcbiBcdGludCByZXQgPSAwLCBkbGVuO1xuIFxuK1x0aWYgKFdBUk5fT05fT05DRSghcG9vbCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbiBcdGFjb21wX2N0eCA9IHJhd19jcHVfcHRyKHBvb2wtXHUwMDNlYWNvbXBfY3R4KTtcbiBcdG11dGV4X2xvY2soXHUwMDI2YWNvbXBfY3R4LVx1MDAzZW11dGV4KTtcbiBcdHpzX29ial9yZWFkX3NnX2JlZ2luKHBvb2wtXHUwMDNlenNfcG9vbCwgZW50cnktXHUwMDNlaGFuZGxlLCBpbnB1dCwgZW50cnktXHUwMDNlbGVuZ3RoKTtcbkBAIC05NTEsNyArOTc2LDcgQEAgc3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0cHJfYWxlcnRfcmF0ZWxpbWl0ZWQoXCJEZWNvbXByZXNzaW9uIGVycm9yIGZyb20genN3YXAgKCVkOiVsdSAlcyAldS1cdTAwM2UlZClcXG5cIixcbiBcdFx0XHRcdFx0XHRzd3BfdHlwZShlbnRyeS1cdTAwM2Vzd3BlbnRyeSksXG4gXHRcdFx0XHRcdFx0c3dwX29mZnNldChlbnRyeS1cdTAwM2Vzd3BlbnRyeSksXG4tXHRcdFx0XHRcdFx0ZW50cnktXHUwMDNlcG9vbC1cdTAwM2V0Zm1fbmFtZSxcbitcdFx0XHRcdFx0XHRwb29sLVx1MDAzZXRmbV9uYW1lLFxuIFx0XHRcdFx0XHRcdGVudHJ5LVx1MDAzZWxlbmd0aCwgZGxlbik7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuQEAgLTE0MDksNiArMTQzNCwxMyBAQCBzdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0aWYgKCF6c3dhcF9jb21wcmVzcyhwYWdlLCBlbnRyeSwgcG9vbCkpXG4gXHRcdGdvdG8gY29tcHJlc3NfZmFpbGVkO1xuIFxuK1x0LypcbitcdCAqIFNldCBwb29sX2lkeCBiZWZvcmUgdGhlIHhhX3N0b3JlKCkgYmVsb3cgcHVibGlzaGVzIHRoZSBlbnRyeSwgb3IgYVxuK1x0ICogY29uY3VycmVudCByZWFkZXIgY291bGQgcmVzb2x2ZSBhIHN0YWxlIHBvb2xfaWR4IGxlZnQgYnkgc2xhYiByZXVzZVxuK1x0ICogdG8gYW4gdW5yZWxhdGVkIGxpdmUgcG9vbC5cbitcdCAqL1xuK1x0ZW50cnktXHUwMDNlcG9vbF9pZHggPSBwb29sLVx1MDAzZWlkeDtcbitcbiBcdG9sZCA9IHhhX3N0b3JlKHN3YXBfenN3YXBfdHJlZShwYWdlX3N3cGVudHJ5KSxcbiBcdFx0ICAgICAgIHN3cF9vZmZzZXQocGFnZV9zd3BlbnRyeSksXG4gXHRcdCAgICAgICBlbnRyeSwgR0ZQX0tFUk5FTCk7XG5AQCAtMTQ1NCw3ICsxNDg2LDYgQEAgc3RhdGljIGJvb2wgenN3YXBfc3RvcmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdCAqICAgIFRoZSBwdWJsaXNoaW5nIG9yZGVyIG1hdHRlcnMgdG8gcHJldmVudCB3cml0ZWJhY2sgZnJvbSBzZWVpbmdcbiBcdCAqICAgIGFuIGluY29oZXJlbnQgZW50cnkuXG4gXHQgKi9cbi1cdGVudHJ5LVx1MDAzZXBvb2wgPSBwb29sO1xuIFx0ZW50cnktXHUwMDNlc3dwZW50cnkgPSBwYWdlX3N3cGVudHJ5O1xuIFx0ZW50cnktXHUwMDNlb2JqY2cgPSBvYmpjZztcbiBcdGVudHJ5LVx1MDAzZXJlZmVyZW5jZWQgPSB0cnVlO1xuQEAgLTE3OTAsNyArMTgyMSw3IEBAIHN0YXRpYyBpbnQgenN3YXBfc2V0dXAodm9pZClcbiBcdHBvb2wgPSBfX3pzd2FwX3Bvb2xfY3JlYXRlX2ZhbGxiYWNrKCk7XG4gXHRpZiAocG9vbCkge1xuIFx0XHRwcl9pbmZvKFwibG9hZGVkIHVzaW5nIHBvb2wgJXNcXG5cIiwgcG9vbC1cdTAwM2V0Zm1fbmFtZSk7XG4tXHRcdGxpc3RfYWRkKFx1MDAyNnBvb2wtXHUwMDNlbGlzdCwgXHUwMDI2enN3YXBfcG9vbHMpO1xuK1x0XHRyY3VfYXNzaWduX3BvaW50ZXIoenN3YXBfY3VycmVudF9wb29sLCBwb29sKTtcbiBcdFx0enN3YXBfaGFzX3Bvb2wgPSB0cnVlO1xuIFx0XHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcdTAwMjZ6c3dhcF9ldmVyX2VuYWJsZWQpO1xuIFx0fSBlbHNlIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIwOjE4OjI4Ljg1ODY4Nzg3NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQwMTY3MjY5NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBac3dhcCBQYXRjaDogQSBGdXp6aW5nIFBlcnNwZWN0aXZlKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggdGFyZ2V0aW5nIGBtbS96c3dhcC5jYCBmb3IgYW1kNjQuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgc2lnbmlmaWNhbnQuIEl0J3Mgbm90IGp1c3QgYSBtaW5vciB0d2VhazsgdGhpcyBpcyBhIHJlZmFjdG9yaW5nIG9mIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyB3aXRoaW4gdGhlIHpzd2FwIHN1YnN5c3RlbS4gV2UncmUgdGFsa2luZyBhYm91dCByZXBsYWNpbmcgYGxpc3RfaGVhZGAgd2l0aCBhbiBgeGFycmF5YCwgcG9pbnRlcnMgd2l0aCBpbmRpY2VzIChgdTggcG9vbF9pZHhgKSwgYW5kIGludHJvZHVjaW5nIG5ldyBoZWxwZXIgZnVuY3Rpb25zIGxpa2UgYHpzd2FwX2VudHJ5X3Bvb2woKWAuIFRoaXMgaW1wbGllcyBhIGZ1bmRhbWVudGFsIHNoaWZ0IGluIGhvdyB6c3dhcCBwb29scyBhbmQgZW50cmllcyBhcmUgbWFuYWdlZC5cblxuVGhlIGNoYW5nZXMgdG8gdGhlIGNvbmN1cnJlbmN5IG1vZGVsIOKAkyBlbWJyYWNpbmcgUkNVIGFuZCB3b3JrcXVldWVzIHdpdGggYHJjdV93b3JrYCwgYHF1ZXVlX3JjdV93b3JrYCwgYW5kIHRoZSB4YXJyYXkgb3BlcmF0aW9ucyDigJMgYXJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy4gVGhpcyBsZXZlbCBvZiBjb25jdXJyZW5jeSBtb2RpZmljYXRpb24gaW4gbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBhbHdheXMgd2FycmFudHMgY2xvc2UgYXR0ZW50aW9uLCBhcyBpdCBpbnRyb2R1Y2VzIG5ldyBsb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb24gY2hhbGxlbmdlcy4gVGhlcmUgYXJlIHNvbWUgY2hhbmdlcyB0byBhc3NlcnRpb25zLCB3aGljaCBpcyBhbHNvIGhlbHBmdWwgaW4gdW5kZXJzdGFuZGluZyB0aGUgY29kZS5cblxuVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lcywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBCYXNlZCBvbiBteSB0cmlhZ2UgcGhpbG9zb3BoeSwgaXQncyBhIGNsZWFyIHllcy4gUmVhY2hhYmlsaXR5IGlzIHN0cmFpZ2h0Zm9yd2FyZDsgenN3YXAgaXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbXBvbmVudCwgcmVhZGlseSBhY2Nlc3NpYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB3aXRoIHN3YXAgZW5hYmxlZC4gVGhlIGNoYW5nZXMgYXJlIG1vcmUgdGhhbiBqdXN0IGNvc21ldGljLiBUaGlzIHBhdGNoIGNvbXBsZXRlbHkgcmVmYWN0b3JzIHRoZSB1bmRlcmx5aW5nIGxvZ2ljLCBkYXRhIHN0cnVjdHVyZXMsIGFuZCBjb25jdXJyZW5jeSBtZWNoYW5pc21zLiBUaGlzIGxldmVsIG9mIGFyY2hpdGVjdHVyYWwgY2hhbmdlLCBlc3BlY2lhbGx5IGFyb3VuZCBtZW1vcnkgbWFuYWdlbWVudCwgaXMgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuXG5cbkknbGwgcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgZm9yIGBtbS96c3dhcC5jYCB1c2luZyBgZ3JlcHBlcmAgb3IgY2hlY2tpbmcgYG1tL0tjb25maWdgIHRvIGJlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBvZiB0aGlzLiBCdXQgaW4gbXkgZXhwZXJ0IG9waW5pb24sIHRoaXMgbG9va3MgbGlrZSBhIGhpZ2gtcHJpb3JpdHkgZnV6emluZyB0YXJnZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxOTgsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMDoxODozMi44NzU0MTc4NzVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEwNzgwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFpTV0FQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEyPW1lbnVjb25maWcgU1dBUFxcbi0tXFxubW0vS2NvbmZpZy0yMS1cXG5tbS9LY29uZmlnOjIyOmNvbmZpZyBaU1dBUFxcbm1tL0tjb25maWctMjMtXFx0Ym9vbCBcXFwiQ29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1xcXCJcXG4tLVxcbm1tL0tjb25maWctMzQtXFxubW0vS2NvbmZpZzozNTpjb25maWcgWlNXQVBfREVGQVVMVF9PTlxcbm1tL0tjb25maWctMzYtXFx0Ym9vbCBcXFwiRW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTQ0LVxcbm1tL0tjb25maWc6NDU6Y29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cXG5tbS9LY29uZmlnLTQ2LVxcdGJvb2wgXFxcIlNocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTU5PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy03Ni1cXG5tbS9LY29uZmlnOjc3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfREVGTEFURVxcbm1tL0tjb25maWctNzgtXFx0Ym9vbCBcXFwiRGVmbGF0ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctODItXFxubW0vS2NvbmZpZzo4Mzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaT1xcbm1tL0tjb25maWctODQtXFx0Ym9vbCBcXFwiTFpPXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04OC1cXG5tbS9LY29uZmlnOjg5OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfODQyXFxubW0vS2NvbmZpZy05MC1cXHRib29sIFxcXCI4NDJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk0LVxcbm1tL0tjb25maWc6OTU6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjRcXG5tbS9LY29uZmlnLTk2LVxcdGJvb2wgXFxcIkxaNFxcXCJcXG4tLVxcbm1tL0tjb25maWctMTAwLVxcbm1tL0tjb25maWc6MTAxOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0SENcXG5tbS9LY29uZmlnLTEwMi1cXHRib29sIFxcXCJMWjRIQ1xcXCJcXG4tLVxcbm1tL0tjb25maWctMTA2LVxcbm1tL0tjb25maWc6MTA3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfWlNURFxcbm1tL0tjb25maWctMTA4LVxcdGJvb2wgXFxcInpzdGRcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTExMj1lbmRjaG9pY2VcXG5tbS9LY29uZmlnLTExMy1cXG5tbS9LY29uZmlnOjExNDpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXFxubW0vS2NvbmZpZy0xMTUtICAgICAgIHN0cmluZ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMDoxODozMi45MjY1MDE1NjRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjgxNTk3ODM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLY29uZmlnIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIGJhc2VkIG9uIHRoaXMsIHRoZSBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGlzIHByb2JhYmx5IGluIGBtbS9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IHNvbWV3aGVyZSBpbiB0aGUgbGluZXMgYmV0d2VlbiAyMCBhbmQgNDAuIFRoYXQgcmFuZ2UgaXMgdXN1YWxseSB3aGVyZSB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQuIEdpdmVuIHRoZSB0YXNrLCBJJ20gYmV0dGluZyB0aGF0IHRoZSByZWxldmFudCBmbGFncyBvciBmZWF0dXJlIGVuYWJsaW5nIGxvZ2ljIGlzIGluIHRoYXQgaW1tZWRpYXRlIHZpY2luaXR5LiBMZXQncyBzZWUgaWYgdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkIGluIHRoaXMgcmFuZ2UuIEZyb20gdGhlcmUgSSBjYW4gZGV0ZXJtaW5lIHdoZXJlIEkgbmVlZCB0byBjb250aW51ZSBteSBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjM0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjA6MTg6MzQuNjA4MTAxOTg4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxMzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTIsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMTI6XFx0bWVudWNvbmZpZyBTV0FQXFxuICAxMzpcXHRcXHRib29sIFxcXCJTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcXFwiXFxuICAxNDpcXHRcXHRkZXBlbmRzIG9uIE1NVSBcXHUwMDI2XFx1MDAyNiBCTE9DSyBcXHUwMDI2XFx1MDAyNiAhQVJDSF9OT19TV0FQXFxuICAxNTpcXHRcXHRkZWZhdWx0IHlcXG4gIDE2OlxcdFxcdGhlbHBcXG4gIDE3OlxcdFxcdCAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBjaG9vc2Ugd2hldGhlciB5b3Ugd2FudCB0byBoYXZlIHN1cHBvcnRcXG4gIDE4OlxcdFxcdCAgZm9yIHNvIGNhbGxlZCBzd2FwIGRldmljZXMgb3Igc3dhcCBmaWxlcyBpbiB5b3VyIGtlcm5lbCB0aGF0IGFyZVxcbiAgMTk6XFx0XFx0ICB1c2VkIHRvIHByb3ZpZGUgbW9yZSB2aXJ0dWFsIG1lbW9yeSB0aGFuIHRoZSBhY3R1YWwgUkFNIHByZXNlbnRcXG4gIDIwOlxcdFxcdCAgaW4geW91ciBjb21wdXRlci4gIElmIHVuc3VyZSBzYXkgWS5cXG4gIDIxOlxcdFxcbiAgMjI6XFx0Y29uZmlnIFpTV0FQXFxuICAyMzpcXHRcXHRib29sIFxcXCJDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXFxcIlxcbiAgMjQ6XFx0XFx0ZGVwZW5kcyBvbiBTV0FQXFxuICAyNTpcXHRcXHRzZWxlY3QgQ1JZUFRPXFxuICAyNjpcXHRcXHRzZWxlY3QgWlNNQUxMT0NcXG4gIDI3OlxcdFxcdGhlbHBcXG4gIDI4OlxcdFxcdCAgQSBsaWdodHdlaWdodCBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzLiAgSXQgdGFrZXNcXG4gIDI5OlxcdFxcdCAgcGFnZXMgdGhhdCBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgc3dhcHBlZCBvdXQgYW5kIGF0dGVtcHRzIHRvXFxuICAzMDpcXHRcXHQgIGNvbXByZXNzIHRoZW0gaW50byBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBSQU0tYmFzZWQgbWVtb3J5IHBvb2wuXFxuICAzMTpcXHRcXHQgIFRoaXMgY2FuIHJlc3VsdCBpbiBhIHNpZ25pZmljYW50IEkvTyByZWR1Y3Rpb24gb24gc3dhcCBkZXZpY2UgYW5kLFxcbiAgMzI6XFx0XFx0ICBpbiB0aGUgY2FzZSB3aGVyZSBkZWNvbXByZXNzaW5nIGZyb20gUkFNIGlzIGZhc3RlciB0aGFuIHN3YXAgZGV2aWNlXFxuICAzMzpcXHRcXHQgIHJlYWRzLCBjYW4gYWxzbyBpbXByb3ZlIHdvcmtsb2FkIHBlcmZvcm1hbmNlLlxcbiAgMzQ6XFx0XFxuICAzNTpcXHRjb25maWcgWlNXQVBfREVGQVVMVF9PTlxcbiAgMzY6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcXFwiXFxuICAzNzpcXHRcXHRkZXBlbmRzIG9uIFpTV0FQXFxuICAzODpcXHRcXHRoZWxwXFxuICAzOTpcXHRcXHQgIElmIHNlbGVjdGVkLCB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyB3aWxsIGJlIGVuYWJsZWRcXG4gIDQwOlxcdFxcdCAgYXQgYm9vdCwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgZGlzYWJsZWQuXFxuICA0MTpcXHRcXG4gIDQyOlxcdFxcdCAgVGhlIHNlbGVjdGlvbiBtYWRlIGhlcmUgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdXNpbmcgdGhlIGtlcm5lbFxcbiAgNDM6XFx0XFx0ICBjb21tYW5kIGxpbmUgJ3pzd2FwLmVuYWJsZWQ9JyBvcHRpb24uXFxuICA0NDpcXHRcXG4gIDQ1OlxcdGNvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXFxuICA0NjpcXHRcXHRib29sIFxcXCJTaHJpbmsgdGhlIHpzd2FwIHBvb2wgb24gbWVtb3J5IHByZXNzdXJlXFxcIlxcbiAgNDc6XFx0XFx0ZGVwZW5kcyBvbiBaU1dBUFxcbiAgNDg6XFx0XFx0ZGVmYXVsdCBuXFxuICA0OTpcXHRcXHRoZWxwXFxuICA1MDpcXHRcXHQgIElmIHNlbGVjdGVkLCB0aGUgenN3YXAgc2hyaW5rZXIgd2lsbCBiZSBlbmFibGVkLCBhbmQgdGhlIHBhZ2VzXFxuICA1MTpcXHRcXHQgIHN0b3JlZCBpbiB0aGUgenN3YXAgcG9vbCB3aWxsIGJlY29tZSBhdmFpbGFibGUgZm9yIHJlY2xhaW0gKGkuZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMDoxODozNC42MDgyMDUxMThaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTkzMjQyOTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS2VybmVsJ3MgWnN3YXAgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyB6c3dhcCBjb2RlLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIGBDT05GSUdfWlNXQVBgIGFuZCBgQ09ORklHX1NXQVBgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCdzIHN3YXAgaGFuZGxpbmcgaW50ZXJhY3RzIHdpdGggdGhlIHpzd2FwIGZ1bmN0aW9uYWxpdHkuXG5cbkZpcnN0LCBJJ2xsIGV4YW1pbmUgdGhlIGNoYW5nZXMgd2l0aGluIGBtbS96c3dhcC5jYC4gSSdtIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRoZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIHN5bWJvbHMuIFNvLCBJIHNlZSB0aGluZ3MgbGlrZSBgenN3YXBfZW50cnlfcG9vbGAsIHdoaWNoIGlzIHN0YXRpYywgYW5kIGl0cyByZWxhdGVkIGZ1bmN0aW9ucy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgenN3YXBfZW50cnlfcG9vbGAgaXMgaW5kZWVkIHN0YXRpYyB3aXRoaW4gYG1tL3pzd2FwLmNgLiBUaGVuLCBJJ2xsIHNjYW4gdGhlIHBvb2wgZnVuY3Rpb25zOiBgenN3YXBfcG9vbF9jcmVhdGVgLCBgX196c3dhcF9wb29sX3JlbGVhc2VgLCBgX196c3dhcF9wb29sX2VtcHR5YCwgYW5kIGB6c3dhcF9wb29sX2ZpbmRfZ2V0YC4gSSdsbCBhbHNvIG5vdGUgYHpzd2FwX3RvdGFsX3BhZ2VzYCwgYHpzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0YCwgYHpzd2FwX2VudHJ5X2ZyZWVgLCBgenN3YXBfZGVjb21wcmVzc2AsIGB6c3dhcF9zdG9yZV9wYWdlYCwgYHpzd2FwX3N0b3JlYCwgYHpzd2FwX2xvYWRgLCBhbmQgYHpzd2FwX3NldHVwYC5cblxuTm93LCBJJ20gdGhpbmtpbmcgSSdsbCB6b29tIGluIG9uIHRoZSBub24tdWJpcXVpdG91cywgc3BlY2lmaWMgZnVuY3Rpb25zIHRoYXQgYXJlIG1vZGlmaWVkIG9yIGV4ZXJjaXNlIHRoaXMgbG9naWMgd2l0aGluIGBtbS96c3dhcC5jYC4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBicm9hZGVyIHN3YXAgbWVjaGFuaXNtLiBJJ2xsIG5lZWQgdG8gcmVhZCBhcm91bmQgYHpzd2FwX3N0b3JlYCwgYHpzd2FwX2xvYWRgLCBldGMuLCBpbiBgbW0venN3YXAuY2AgdG8gaWRlbnRpZnkgYW55IGV4dGVybmFsL25vbi1zdGF0aWMgc3ltYm9scyBvciBrZXkgZnVuY3Rpb25zIHRoYXQgSSBzaG91bGQgcGF5IGNsb3NlIGF0dGVudGlvbiB0bywgYXMgdGhleSdsbCBsaWtlbHkgYmUgdGhlIGhvb2tzIGludG8gdGhlIHJlc3Qgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM4NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIwOjE4OjM3LjYwMTQ1MDY5MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTg0NjIxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6c3dhcF9zdG9yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS96c3dhcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3pzd2FwLmMtNDctLyogVGhlIG51bWJlciBvZiBwYWdlcyBjdXJyZW50bHkgc3RvcmVkIGluIHpzd2FwICovXFxubW0venN3YXAuYzo0ODphdG9taWNfbG9uZ190IHpzd2FwX3N0b3JlZF9wYWdlcyA9IEFUT01JQ19MT05HX0lOSVQoMCk7XFxubW0venN3YXAuYy00OS0vKiBUaGUgbnVtYmVyIG9mIGluY29tcHJlc3NpYmxlIHBhZ2VzIGN1cnJlbnRseSBzdG9yZWQgaW4genN3YXAgKi9cXG5tbS96c3dhcC5jOjUwOnN0YXRpYyBhdG9taWNfbG9uZ190IHpzd2FwX3N0b3JlZF9pbmNvbXByZXNzaWJsZV9wYWdlcyA9IEFUT01JQ19MT05HX0lOSVQoMCk7XFxubW0venN3YXAuYy01MS1cXG4tLVxcbm1tL3pzd2FwLmM9MjAyPXN0cnVjdCB6c3dhcF9lbnRyeSB7XFxuLS1cXG5tbS96c3dhcC5jLTIxMy0gKiBObyBSQ1Ugc2VjdGlvbiBpcyBuZWVkZWQgYXJvdW5kIHRoZSByZXR1cm5lZCBwb2ludGVyOiBhIHN0b3JlZCBlbnRyeSBwaW5zXFxubW0venN3YXAuYzoyMTQ6ICogaXRzIHBvb2wgdmlhIHBlcmNwdV9yZWYgKHRha2VuIGluIHpzd2FwX3N0b3JlX3BhZ2UoKSksIHNvIHRoZSBpZCBjYW5ub3QgYmVcXG5tbS96c3dhcC5jLTIxNS0gKiByZXVzZWQgdW5kZXIgdXMuICBDYWxsZXJzIFdBUk4gYW5kIGhhbmRsZSBhIE5VTEwgZnJvbSBhIGNvcnJ1cHQgcG9vbF9pZHguXFxuLS1cXG5tbS96c3dhcC5jPTc3MD1zdGF0aWMgdm9pZCB6c3dhcF9lbnRyeV9mcmVlKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXFxuLS1cXG5tbS96c3dhcC5jLTc4My1cXHRpZiAoZW50cnktXFx1MDAzZWxlbmd0aCA9PSBQQUdFX1NJWkUpXFxubW0venN3YXAuYzo3ODQ6XFx0XFx0YXRvbWljX2xvbmdfZGVjKFxcdTAwMjZ6c3dhcF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXMpO1xcbm1tL3pzd2FwLmMtNzg1LVxcdHpzd2FwX2VudHJ5X2NhY2hlX2ZyZWUoZW50cnkpO1xcbm1tL3pzd2FwLmM6Nzg2OlxcdGF0b21pY19sb25nX2RlYyhcXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcXG5tbS96c3dhcC5jLTc4Ny19XFxuLS1cXG5tbS96c3dhcC5jPTkzMz1zdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS96c3dhcC5jLTk5My0gKiB0byB0aGUgc3dhcCBkZXZpY2UuICBXZSBhcmUgYmFzaWNhbGx5IHJlc3VtaW5nIHRoZSBzYW1lIHN3YXBcXG5tbS96c3dhcC5jOjk5NDogKiB3cml0ZWJhY2sgcGF0aCB0aGF0IHdhcyBpbnRlcmNlcHRlZCB3aXRoIHRoZSB6c3dhcF9zdG9yZSgpXFxubW0venN3YXAuYy05OTUtICogaW4gdGhlIGZpcnN0IHBsYWNlLiAgQWZ0ZXIgdGhlIGZvbGlvIGhhcyBiZWVuIGRlY29tcHJlc3NlZCBpbnRvXFxuLS1cXG5tbS96c3dhcC5jPTEyMDQ9c3RhdGljIHVuc2lnbmVkIGxvbmcgenN3YXBfc2hyaW5rZXJfY291bnQoc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcXG4tLVxcbm1tL3pzd2FwLmMtMTIzOC1cXHRcXHRucl9iYWNraW5nID0genN3YXBfdG90YWxfcGFnZXMoKTtcXG5tbS96c3dhcC5jOjEyMzk6XFx0XFx0bnJfc3RvcmVkID0gYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcXG5tbS96c3dhcC5jLTEyNDAtXFx0fVxcbi0tXFxubW0venN3YXAuYz0xMzI5PXN0YXRpYyB2b2lkIHNocmlua193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxcbi0tXFxubW0venN3YXAuYy0xNDE5LVxcbm1tL3pzd2FwLmM6MTQyMDpzdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxcbm1tL3pzd2FwLmMtMTQyMS1cXHRcXHRcXHQgICAgIHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcXG4tLVxcbm1tL3pzd2FwLmMtMTQ2NS1cXHQgKiBubyBmdXJ0aGVyIHBvc3NpYmlsaXR5IG9mIGZhaWx1cmUuIEdyYWIgcmVmcyB0byB0aGUgcG9vbCBhbmQgb2JqY2csXFxubW0venN3YXAuYzoxNDY2OlxcdCAqIGNoYXJnZSB6c3dhcCBtZW1vcnksIGFuZCBpbmNyZW1lbnQgenN3YXBfc3RvcmVkX3BhZ2VzLlxcbm1tL3pzd2FwLmMtMTQ2Ny1cXHQgKiBUaGUgb3Bwb3NpdGUgYWN0aW9ucyB3aWxsIGJlIHBlcmZvcm1lZCBieSB6c3dhcF9lbnRyeV9mcmVlKClcXG4tLVxcbm1tL3pzd2FwLmMtMTQ3NC1cXHR9XFxubW0venN3YXAuYzoxNDc1OlxcdGF0b21pY19sb25nX2luYyhcXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcXG5tbS96c3dhcC5jLTE0NzYtXFx0aWYgKGVudHJ5LVxcdTAwM2VsZW5ndGggPT0gUEFHRV9TSVpFKVxcbm1tL3pzd2FwLmM6MTQ3NzpcXHRcXHRhdG9taWNfbG9uZ19pbmMoXFx1MDAyNnpzd2FwX3N0b3JlZF9pbmNvbXByZXNzaWJsZV9wYWdlcyk7XFxubW0venN3YXAuYy0xNDc4LVxcbi0tXFxubW0venN3YXAuYy0xNTA1LVxcbm1tL3pzd2FwLmM6MTUwNjpib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0venN3YXAuYy0xNTA3LXtcXG4tLVxcbm1tL3pzd2FwLmMtMTU1MC1cXG5tbS96c3dhcC5jOjE1NTE6XFx0XFx0aWYgKCF6c3dhcF9zdG9yZV9wYWdlKHBhZ2UsIG9iamNnLCBwb29sKSlcXG5tbS96c3dhcC5jLTE1NTItXFx0XFx0XFx0Z290byBwdXRfcG9vbDtcXG4tLVxcbm1tL3pzd2FwLmM9MTczMT1zdGF0aWMgaW50IGRlYnVnZnNfZ2V0X3N0b3JlZF9wYWdlcyh2b2lkICpkYXRhLCB1NjQgKnZhbClcXG5tbS96c3dhcC5jLTE3MzIte1xcbm1tL3pzd2FwLmM6MTczMzpcXHQqdmFsID0gYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcXG5tbS96c3dhcC5jLTE3MzQtXFx0cmV0dXJuIDA7XFxuLS1cXG5tbS96c3dhcC5jPTE3Mzg9c3RhdGljIGludCBkZWJ1Z2ZzX2dldF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXModm9pZCAqZGF0YSwgdTY0ICp2YWwpXFxubW0venN3YXAuYy0xNzM5LXtcXG5tbS96c3dhcC5jOjE3NDA6XFx0KnZhbCA9IGF0b21pY19sb25nX3JlYWQoXFx1MDAyNnpzd2FwX3N0b3JlZF9pbmNvbXByZXNzaWJsZV9wYWdlcyk7XFxubW0venN3YXAuYy0xNzQxLVxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMDoxODozNy42NTEzMDQxMTFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjI5MTc2MTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpdmluZyBpbnRvIHRoZSBac3dhcCBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIFpzd2FwIGludGVybmFscywgc28gZmlyc3QgdGhpbmdzIGZpcnN0OiB0aGUgZnVuY3Rpb25zIGluIGBtbS96c3dhcC5jYCBhcmUgd2hhdCBJIG5lZWQgdG8gZm9jdXMgb24uIEkgc2VlIHdlIGhhdmUgdGhlIGNvcmUgb3BlcmF0aW9uczogYHpzd2FwX3N0b3JlYCwgYHpzd2FwX2xvYWRgLCBgenN3YXBfc3RvcmVfcGFnZWAgZm9yIGRhdGEgaGFuZGxpbmcsIGB6c3dhcF9lbnRyeV9mcmVlYCBmb3IgaG91c2VrZWVwaW5nLCBhbmQgYHpzd2FwX2RlY29tcHJlc3NgIGZvciBvYnZpb3VzIHJlYXNvbnMuIFRoZW4gdGhlcmUncyBwb29sIG1hbmFnZW1lbnQ6IGB6c3dhcF9wb29sX2NyZWF0ZWAsIGBfX3pzd2FwX3Bvb2xfcmVsZWFzZWAsIGBfX3pzd2FwX3Bvb2xfZW1wdHlgLCBgenN3YXBfcG9vbF9maW5kX2dldGAuIEFuZCBvZiBjb3Vyc2UsIHdlIGNhbid0IGZvcmdldCB0aGUgY29tcHJlc3NvciBhbmQgdG90YWwgcGFnZXMgZnVuY3Rpb25hbGl0eSB3aXRoICBgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXRgLCBhbmQgYHpzd2FwX3RvdGFsX3BhZ2VzYCByZXNwZWN0aXZlbHkuXG5cbk5vdywgdGhhdCBnaXZlcyBtZSB0aGUgYmFzaWMgc3RydWN0dXJlLCBidXQgSSBuZWVkIGEgbW9yZSBjb21wbGV0ZSBwaWN0dXJlLiBJIG5lZWQgdG8gYnJvYWRlbiB0aGUgc2NvcGUgYSBiaXQuIFdoYXQgb3RoZXIgZmlsZXMsIGNvbmZpZyBvcHRpb25zLCBvciBhbnkgb3RoZXIgZWxlbWVudHMgYXJlIGludm9sdmVkPyBXaGF0IG90aGVyIGRlcGVuZGVuY2llcyBhcmUgaW52b2x2ZWQ/IEknbSBnb2luZyB0byBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2Yga2V5IGZ1bmN0aW9ucywgZXNwZWNpYWxseSBgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXRgLCBgenN3YXBfbG9hZGAsIGFuZCBsaWtlbHkgb3RoZXJzLCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3csIHRoZSBjb21wcmVzc29yIGludGVncmF0aW9uLCBhbmQgaG93IGV2ZXJ5dGhpbmcgdGllcyB0b2dldGhlci4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBhbmQgYXJlYXMgZm9yIHBvdGVudGlhbCBvcHRpbWl6YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzA1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIwOjE4OjQwLjI4MDQ4MzQwMVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkxNDE1MzksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJvb2wgenN3YXBfbG9hZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS96c3dhcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMDoxODo0MC4zMjk2NDY3NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzQ2OTM4OTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGFzaywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OlxuXG4qKkRpZ2dpbmcgaW50byB6c3dhcC5jJ3MgRnVuY3Rpb24gSGVhZGVycyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGZ1bmN0aW9uIGxhbmRzY2FwZSBhcm91bmQgYHpzd2FwX2xvYWRgIGFuZCBgenN3YXBfZGVjb21wcmVzc2Agd2l0aGluIHRoZSBgbW0venN3YXAuY2AgZmlsZS4gTXkgZ29hbCBoZXJlIGlzIGxpa2VseSB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBkZWNvbXByZXNzaW9uIHJvdXRpbmVzIGludGVyYWN0IHdpdGggdGhlIHJlc3Qgb2YgdGhlIHpzd2FwIGFyY2hpdGVjdHVyZS4gSSdtIHByb2JhYmx5IGxvb2tpbmcgdG8gc2VlIHdoYXQgY2FsbHMgdGhlbSwgd2hhdCB0aGV5IGNhbGwsIGFuZCBtYXliZSBldmVuIHRoZSBkYXRhIHN0cnVjdHVyZXMgdGhleSBvcGVyYXRlIG9uLlxuXG5NeSBpbml0aWFsIGFwcHJvYWNoIGlzIHN0cmFpZ2h0Zm9yd2FyZDogSSdsbCBxdWlja2x5IHNjYW4gdGhlIGNvZGUgdG8gaWRlbnRpZnkgZXZlcnkgZnVuY3Rpb24gaGVhZGVyIGluIHRoYXQgYXJlYSBvZiB0aGUgZmlsZS4gTm8gbmVlZCB0byBnZXQgYm9nZ2VkIGRvd24gaW4gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMganVzdCB5ZXQ7IEkgd2FudCB0aGUgb3ZlcnZpZXcgZmlyc3QuIEknbGwgbWVudGFsbHkgbm90ZSB0aGUgcGFyYW1ldGVyIGxpc3RzIG9mIGVhY2ggZnVuY3Rpb24gdG9vLCBhcyB0aGF0IHdpbGwgZ2l2ZSBtZSBjbHVlcyBhYm91dCBkYXRhIGZsb3cuIEknbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgZnVuY3Rpb24gc2lnbmF0dXJlcyB0aGF0IGhpbnQgYXQgbWVtb3J5IG1hbmFnZW1lbnQsIGRhdGEgdHJhbnNmZXIsIG9yIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLiBFc3NlbnRpYWxseSwgSSdtIHRyeWluZyB0byBtZW50YWxseSBtYXAgb3V0IHRoZSBmdW5jdGlvbiBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGV5IG9yY2hlc3RyYXRlIHRoZSB6c3dhcCBkZWNvbXByZXNzaW9uIHdvcmtmbG93LiBXaXRoIHRoYXQgbWFwLCB0aGUgc3Vic2VxdWVudCBkZXRhaWxzIHdpbGwgc3RhcnQgdG8gZmFsbCBpbnRvIHBsYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTgzOCwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIwOjE4OjQzLjA3NjU4ODA0OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU1MDA0NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmJvb2wgenN3YXBffF5pbnQgenN3YXBffF52b2lkIHpzd2FwX3xec3RhdGljIC4qenN3YXBfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3pzd2FwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0venN3YXAuYz00OD1hdG9taWNfbG9uZ190IHpzd2FwX3N0b3JlZF9wYWdlcyA9IEFUT01JQ19MT05HX0lOSVQoMCk7XFxubW0venN3YXAuYy00OS0vKiBUaGUgbnVtYmVyIG9mIGluY29tcHJlc3NpYmxlIHBhZ2VzIGN1cnJlbnRseSBzdG9yZWQgaW4genN3YXAgKi9cXG5tbS96c3dhcC5jOjUwOnN0YXRpYyBhdG9taWNfbG9uZ190IHpzd2FwX3N0b3JlZF9pbmNvbXByZXNzaWJsZV9wYWdlcyA9IEFUT01JQ19MT05HX0lOSVQoMCk7XFxubW0venN3YXAuYy01MS1cXG4tLVxcbm1tL3pzd2FwLmMtNTktLyogUG9vbCBsaW1pdCB3YXMgaGl0IChzZWUgenN3YXBfbWF4X3Bvb2xfcGVyY2VudCkgKi9cXG5tbS96c3dhcC5jOjYwOnN0YXRpYyB1NjQgenN3YXBfcG9vbF9saW1pdF9oaXQ7XFxubW0venN3YXAuYy02MS0vKiBQYWdlcyB3cml0dGVuIGJhY2sgd2hlbiBwb29sIGxpbWl0IHdhcyByZWFjaGVkICovXFxubW0venN3YXAuYzo2MjpzdGF0aWMgdTY0IHpzd2FwX3dyaXR0ZW5fYmFja19wYWdlcztcXG5tbS96c3dhcC5jLTYzLS8qIFN0b3JlIGZhaWxlZCBkdWUgdG8gYSByZWNsYWltIGZhaWx1cmUgYWZ0ZXIgcG9vbCBsaW1pdCB3YXMgcmVhY2hlZCAqL1xcbm1tL3pzd2FwLmM6NjQ6c3RhdGljIHU2NCB6c3dhcF9yZWplY3RfcmVjbGFpbV9mYWlsO1xcbm1tL3pzd2FwLmMtNjUtLyogU3RvcmUgZmFpbGVkIGR1ZSB0byBjb21wcmVzc2lvbiBhbGdvcml0aG0gZmFpbHVyZSAqL1xcbm1tL3pzd2FwLmM6NjY6c3RhdGljIHU2NCB6c3dhcF9yZWplY3RfY29tcHJlc3NfZmFpbDtcXG5tbS96c3dhcC5jLTY3LS8qIENvbXByZXNzZWQgcGFnZSB3YXMgdG9vIGJpZyBmb3IgdGhlIGFsbG9jYXRvciB0byAob3B0aW1hbGx5KSBzdG9yZSAqL1xcbm1tL3pzd2FwLmM6Njg6c3RhdGljIHU2NCB6c3dhcF9yZWplY3RfY29tcHJlc3NfcG9vcjtcXG5tbS96c3dhcC5jLTY5LS8qIExvYWQgb3Igd3JpdGViYWNrIGZhaWxlZCBkdWUgdG8gZGVjb21wcmVzc2lvbiBmYWlsdXJlICovXFxubW0venN3YXAuYzo3MDpzdGF0aWMgdTY0IHpzd2FwX2RlY29tcHJlc3NfZmFpbDtcXG5tbS96c3dhcC5jLTcxLS8qIFN0b3JlIGZhaWxlZCBiZWNhdXNlIHVuZGVybHlpbmcgYWxsb2NhdG9yIGNvdWxkIG5vdCBnZXQgbWVtb3J5ICovXFxubW0venN3YXAuYzo3MjpzdGF0aWMgdTY0IHpzd2FwX3JlamVjdF9hbGxvY19mYWlsO1xcbm1tL3pzd2FwLmMtNzMtLyogU3RvcmUgZmFpbGVkIGJlY2F1c2UgdGhlIGVudHJ5IG1ldGFkYXRhIGNvdWxkIG5vdCBiZSBhbGxvY2F0ZWQgKHJhcmUpICovXFxubW0venN3YXAuYzo3NDpzdGF0aWMgdTY0IHpzd2FwX3JlamVjdF9rbWVtY2FjaGVfZmFpbDtcXG5tbS96c3dhcC5jLTc1LVxcbi0tXFxubW0venN3YXAuYz03Nz1zdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnNocmlua193cTtcXG5tbS96c3dhcC5jLTc4LS8qIFBvb2wgbGltaXQgd2FzIGhpdCwgd2UgbmVlZCB0byBjYWxtIGRvd24gKi9cXG5tbS96c3dhcC5jOjc5OnN0YXRpYyBib29sIHpzd2FwX3Bvb2xfcmVhY2hlZF9mdWxsO1xcbm1tL3pzd2FwLmMtODAtXFxuLS1cXG5tbS96c3dhcC5jLTg2LVxcbm1tL3pzd2FwLmM6ODc6c3RhdGljIGludCB6c3dhcF9zZXR1cCh2b2lkKTtcXG5tbS96c3dhcC5jLTg4LVxcbm1tL3pzd2FwLmMtODktLyogRW5hYmxlL2Rpc2FibGUgenN3YXAgKi9cXG5tbS96c3dhcC5jOjkwOnN0YXRpYyBERUZJTkVfU1RBVElDX0tFWV9NQVlCRShDT05GSUdfWlNXQVBfREVGQVVMVF9PTiwgenN3YXBfZXZlcl9lbmFibGVkKTtcXG5tbS96c3dhcC5jOjkxOnN0YXRpYyBib29sIHpzd2FwX2VuYWJsZWQgPSBJU19FTkFCTEVEKENPTkZJR19aU1dBUF9ERUZBVUxUX09OKTtcXG5tbS96c3dhcC5jOjkyOnN0YXRpYyBpbnQgenN3YXBfZW5hYmxlZF9wYXJhbV9zZXQoY29uc3QgY2hhciAqLFxcbm1tL3pzd2FwLmMtOTMtXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqKTtcXG5tbS96c3dhcC5jOjk0OnN0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyB6c3dhcF9lbmFibGVkX3BhcmFtX29wcyA9IHtcXG5tbS96c3dhcC5jLTk1LVxcdC5zZXQgPVxcdFxcdHpzd2FwX2VuYWJsZWRfcGFyYW1fc2V0LFxcbi0tXFxubW0venN3YXAuYz05OD1tb2R1bGVfcGFyYW1fY2IoZW5hYmxlZCwgXFx1MDAyNnpzd2FwX2VuYWJsZWRfcGFyYW1fb3BzLCBcXHUwMDI2enN3YXBfZW5hYmxlZCwgMDY0NCk7XFxuLS1cXG5tbS96c3dhcC5jLTEwMC0vKiBDcnlwdG8gY29tcHJlc3NvciB0byB1c2UgKi9cXG5tbS96c3dhcC5jOjEwMTpzdGF0aWMgY2hhciAqenN3YXBfY29tcHJlc3NvciA9IENPTkZJR19aU1dBUF9DT01QUkVTU09SX0RFRkFVTFQ7XFxubW0venN3YXAuYzoxMDI6c3RhdGljIGludCB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldChjb25zdCBjaGFyICosXFxubW0venN3YXAuYy0xMDMtXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqKTtcXG5tbS96c3dhcC5jOjEwNDpzdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9vcHMgPSB7XFxubW0venN3YXAuYy0xMDUtXFx0LnNldCA9XFx0XFx0enN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQsXFxuLS1cXG5tbS96c3dhcC5jPTEwOT1tb2R1bGVfcGFyYW1fY2IoY29tcHJlc3NvciwgXFx1MDAyNnpzd2FwX2NvbXByZXNzb3JfcGFyYW1fb3BzLFxcbi0tXFxubW0venN3YXAuYy0xMTItLyogVGhlIG1heGltdW0gcGVyY2VudGFnZSBvZiBtZW1vcnkgdGhhdCB0aGUgY29tcHJlc3NlZCBwb29sIGNhbiBvY2N1cHkgKi9cXG5tbS96c3dhcC5jOjExMzpzdGF0aWMgdW5zaWduZWQgaW50IHpzd2FwX21heF9wb29sX3BlcmNlbnQgPSAyMDtcXG5tbS96c3dhcC5jLTExNC1tb2R1bGVfcGFyYW1fbmFtZWQobWF4X3Bvb2xfcGVyY2VudCwgenN3YXBfbWF4X3Bvb2xfcGVyY2VudCwgdWludCwgMDY0NCk7XFxuLS1cXG5tbS96c3dhcC5jLTExNi0vKiBUaGUgdGhyZXNob2xkIGZvciBhY2NlcHRpbmcgbmV3IHBhZ2VzIGFmdGVyIHRoZSBtYXhfcG9vbF9wZXJjZW50IHdhcyBoaXQgKi9cXG5tbS96c3dhcC5jOjExNzpzdGF0aWMgdW5zaWduZWQgaW50IHpzd2FwX2FjY2VwdF90aHJfcGVyY2VudCA9IDkwOyAvKiBvZiBtYXggcG9vbCBzaXplICovXFxubW0venN3YXAuYy0xMTgtbW9kdWxlX3BhcmFtX25hbWVkKGFjY2VwdF90aHJlc2hvbGRfcGVyY2VudCwgenN3YXBfYWNjZXB0X3Rocl9wZXJjZW50LFxcbi0tXFxubW0venN3YXAuYy0xMjEtLyogRW5hYmxlL2Rpc2FibGUgbWVtb3J5IHByZXNzdXJlLWJhc2VkIHNocmlua2VyLiAqL1xcbm1tL3pzd2FwLmM6MTIyOnN0YXRpYyBib29sIHpzd2FwX3Nocmlua2VyX2VuYWJsZWQgPSBJU19FTkFCTEVEKFxcbm1tL3pzd2FwLmMtMTIzLVxcdFxcdENPTkZJR19aU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OKTtcXG5tbS96c3dhcC5jPTEyND1tb2R1bGVfcGFyYW1fbmFtZWQoc2hyaW5rZXJfZW5hYmxlZCwgenN3YXBfc2hyaW5rZXJfZW5hYmxlZCwgYm9vbCwgMDY0NCk7XFxubW0venN3YXAuYy0xMjUtXFxubW0venN3YXAuYzoxMjY6Ym9vbCB6c3dhcF9pc19lbmFibGVkKHZvaWQpXFxubW0venN3YXAuYy0xMjcte1xcbi0tXFxubW0venN3YXAuYy0xMzAtXFxubW0venN3YXAuYzoxMzE6Ym9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpXFxubW0venN3YXAuYy0xMzIte1xcbi0tXFxubW0venN3YXAuYz0xNTQ9c3RydWN0IHpzd2FwX3Bvb2wge1xcbi0tXFxubW0venN3YXAuYy0xNzEtI2RlZmluZSBaU1dBUF9NQVhfUE9PTF9JRCBVOF9NQVhcXG5tbS96c3dhcC5jOjE3MjpzdGF0aWMgREVGSU5FX1hBUlJBWV9GTEFHUyh6c3dhcF9wb29scywgWEFfRkxBR1NfQUxMT0MxIHwgWEFfRkxBR1NfTE9DS19CSCk7XFxubW0venN3YXAuYzoxNzM6c3RhdGljIHN0cnVjdCB6c3dhcF9wb29sIF9fcmN1ICp6c3dhcF9jdXJyZW50X3Bvb2w7XFxubW0venN3YXAuYy0xNzQtXFxubW0venN3YXAuYy0xNzUtLyogR2xvYmFsIExSVSBsaXN0cyBzaGFyZWQgYnkgYWxsIHpzd2FwIHBvb2xzLiAqL1xcbm1tL3pzd2FwLmM6MTc2OnN0YXRpYyBzdHJ1Y3QgbGlzdF9scnUgenN3YXBfbGlzdF9scnU7XFxubW0venN3YXAuYy0xNzctXFxubW0venN3YXAuYy0xNzgtLyogVGhlIGxvY2sgcHJvdGVjdHMgenN3YXBfbmV4dF9zaHJpbmsgdXBkYXRlcy4gKi9cXG5tbS96c3dhcC5jOjE3OTpzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHpzd2FwX3Nocmlua19sb2NrKTtcXG5tbS96c3dhcC5jOjE4MDpzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKnpzd2FwX25leHRfc2hyaW5rO1xcbm1tL3pzd2FwLmM6MTgxOnN0YXRpYyBzdHJ1Y3Qgd29ya19zdHJ1Y3QgenN3YXBfc2hyaW5rX3dvcms7XFxubW0venN3YXAuYzoxODI6c3RhdGljIHN0cnVjdCBzaHJpbmtlciAqenN3YXBfc2hyaW5rZXI7XFxubW0venN3YXAuYy0xODMtXFxuLS1cXG5tbS96c3dhcC5jPTIwMj1zdHJ1Y3QgenN3YXBfZW50cnkge1xcbi0tXFxubW0venN3YXAuYy0yMTYtICovXFxubW0venN3YXAuYzoyMTc6c3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9lbnRyeV9wb29sKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXFxubW0venN3YXAuYy0yMTgte1xcbi0tXFxubW0venN3YXAuYy0yMjEtXFxubW0venN3YXAuYzoyMjI6c3RhdGljIHN0cnVjdCB4YXJyYXkgKnpzd2FwX3RyZWVzW01BWF9TV0FQRklMRVNdO1xcbm1tL3pzd2FwLmM6MjIzOnN0YXRpYyB1bnNpZ25lZCBpbnQgbnJfenN3YXBfdHJlZXNbTUFYX1NXQVBGSUxFU107XFxubW0venN3YXAuYy0yMjQtXFxubW0venN3YXAuYy0yMjUtLyogcG9vbCBjb3VudGVyIHRvIHByb3ZpZGUgdW5pcXVlIG5hbWVzIHRvIHpzbWFsbG9jICovXFxubW0venN3YXAuYzoyMjY6c3RhdGljIGF0b21pY190IHpzd2FwX3Bvb2xzX2NvdW50ID0gQVRPTUlDX0lOSVQoMCk7XFxubW0venN3YXAuYy0yMjctXFxubW0venN3YXAuYz0yMjg9ZW51bSB6c3dhcF9pbml0X3R5cGUge1xcbi0tXFxubW0venN3YXAuYy0yMzMtXFxubW0venN3YXAuYzoyMzQ6c3RhdGljIGVudW0genN3YXBfaW5pdF90eXBlIHpzd2FwX2luaXRfc3RhdGU7XFxubW0venN3YXAuYy0yMzUtXFxubW0venN3YXAuYy0yMzYtLyogdXNlZCB0byBlbnN1cmUgdGhlIGludGVncml0eSBvZiBpbml0aWFsaXphdGlvbiAqL1xcbm1tL3pzd2FwLmM6MjM3OnN0YXRpYyBERUZJTkVfTVVURVgoenN3YXBfaW5pdF9sb2NrKTtcXG5tbS96c3dhcC5jLTIzOC1cXG5tbS96c3dhcC5jLTIzOS0vKiBpbml0IGNvbXBsZXRlZCwgYnV0IGNvdWxkbid0IGNyZWF0ZSB0aGUgaW5pdGlhbCBwb29sICovXFxubW0venN3YXAuYzoyNDA6c3RhdGljIGJvb2wgenN3YXBfaGFzX3Bvb2w7XFxubW0venN3YXAuYy0yNDEtXFxuLS1cXG5tbS96c3dhcC5jLTI0OC0jZGVmaW5lIFpTV0FQX0FERFJFU1NfU1BBQ0VfUEFHRVMgKDEgXFx1MDAzY1xcdTAwM2MgWlNXQVBfQUREUkVTU19TUEFDRV9TSElGVClcXG5tbS96c3dhcC5jOjI0OTpzdGF0aWMgaW5saW5lIHN0cnVjdCB4YXJyYXkgKnN3YXBfenN3YXBfdHJlZShzd3BfZW50cnlfdCBzd3ApXFxubW0venN3YXAuYy0yNTAte1xcbi0tXFxubW0venN3YXAuYy0yNjAtKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5tbS96c3dhcC5jOjI2MTpzdGF0aWMgdm9pZCBfX3pzd2FwX3Bvb2xfZW1wdHkoc3RydWN0IHBlcmNwdV9yZWYgKnJlZik7XFxubW0venN3YXAuYy0yNjItXFxubW0venN3YXAuYz0yNjM9c3RhdGljIHZvaWQgYWNvbXBfY3R4X2ZyZWUoc3RydWN0IGNyeXB0b19hY29tcF9jdHggKmFjb21wX2N0eClcXG4tLVxcbm1tL3pzd2FwLmMtMjkwLVxcbm1tL3pzd2FwLmM6MjkxOnN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jcmVhdGUoY2hhciAqY29tcHJlc3NvcilcXG5tbS96c3dhcC5jLTI5Mi17XFxuLS1cXG5tbS96c3dhcC5jLTM3OS1cXG5tbS96c3dhcC5jOjM4MDpzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKl9fenN3YXBfcG9vbF9jcmVhdGVfZmFsbGJhY2sodm9pZClcXG5tbS96c3dhcC5jLTM4MS17XFxuLS1cXG5tbS96c3dhcC5jLTM5OC1cXG5tbS96c3dhcC5jOjM5OTpzdGF0aWMgdm9pZCB6c3dhcF9wb29sX2Rlc3Ryb3koc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wpXFxubW0venN3YXAuYy00MDAte1xcbi0tXFxubW0venN3YXAuYy00MTUtXFxubW0venN3YXAuYzo0MTY6c3RhdGljIHZvaWQgX196c3dhcF9wb29sX3JlbGVhc2Uoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm1tL3pzd2FwLmMtNDE3LXtcXG4tLVxcbm1tL3pzd2FwLmMtNDI4LVxcbm1tL3pzd2FwLmM6NDI5OnN0YXRpYyB2b2lkIF9fenN3YXBfcG9vbF9lbXB0eShzdHJ1Y3QgcGVyY3B1X3JlZiAqcmVmKVxcbm1tL3pzd2FwLmMtNDMwLXtcXG4tLVxcbm1tL3pzd2FwLmMtNDQyLVxcbm1tL3pzd2FwLmM6NDQzOnN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIHpzd2FwX3Bvb2xfdHJ5Z2V0KHN0cnVjdCB6c3dhcF9wb29sICpwb29sKVxcbm1tL3pzd2FwLmMtNDQ0LXtcXG4tLVxcbm1tL3pzd2FwLmMtNDUxLS8qIFRoZSBjYWxsZXIgbXVzdCBhbHJlYWR5IGhhdmUgYSByZWZlcmVuY2UuICovXFxubW0venN3YXAuYzo0NTI6c3RhdGljIHZvaWQgenN3YXBfcG9vbF9nZXQoc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wpXFxubW0venN3YXAuYy00NTMte1xcbi0tXFxubW0venN3YXAuYy00NTYtXFxubW0venN3YXAuYzo0NTc6c3RhdGljIHZvaWQgenN3YXBfcG9vbF9wdXQoc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wpXFxubW0venN3YXAuYy00NTgte1xcbi0tXFxubW0venN3YXAuYy00NjEtXFxubW0venN3YXAuYzo0NjI6c3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICpfX3pzd2FwX3Bvb2xfY3VycmVudCh2b2lkKVxcbm1tL3pzd2FwLmMtNDYzLXtcXG4tLVxcbm1tL3pzd2FwLmMtNDcyLVxcbm1tL3pzd2FwLmM6NDczOnN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jdXJyZW50X2dldCh2b2lkKVxcbm1tL3pzd2FwLmMtNDc0LXtcXG4tLVxcbm1tL3pzd2FwLmMtNDg4LS8qIGNvbXByZXNzb3IgbXVzdCBiZSBudWxsLXRlcm1pbmF0ZWQgKi9cXG5tbS96c3dhcC5jOjQ4OTpzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfZmluZF9nZXQoY2hhciAqY29tcHJlc3NvcilcXG5tbS96c3dhcC5jLTQ5MC17XFxuLS1cXG5tbS96c3dhcC5jLTUxMS1cXG5tbS96c3dhcC5jOjUxMjpzdGF0aWMgdW5zaWduZWQgbG9uZyB6c3dhcF9tYXhfcGFnZXModm9pZClcXG5tbS96c3dhcC5jLTUxMy17XFxuLS1cXG5tbS96c3dhcC5jLTUxNi1cXG5tbS96c3dhcC5jOjUxNzpzdGF0aWMgdW5zaWduZWQgbG9uZyB6c3dhcF9hY2NlcHRfdGhyX3BhZ2VzKHZvaWQpXFxubW0venN3YXAuYy01MTgte1xcbi0tXFxubW0venN3YXAuYz01MjI9dW5zaWduZWQgbG9uZyB6c3dhcF90b3RhbF9wYWdlcyh2b2lkKVxcbi0tXFxubW0venN3YXAuYy01MzktXFxubW0venN3YXAuYzo1NDA6c3RhdGljIGJvb2wgenN3YXBfY2hlY2tfbGltaXRzKHZvaWQpXFxubW0venN3YXAuYy01NDEte1xcbi0tXFxubW0venN3YXAuYy01NTgtXFxubW0venN3YXAuYzo1NTk6c3RhdGljIGludCB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldChjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxcbm1tL3pzd2FwLmMtNTYwLXtcXG4tLVxcbm1tL3pzd2FwLmMtNjM0LVxcbm1tL3pzd2FwLmM6NjM1OnN0YXRpYyBpbnQgenN3YXBfZW5hYmxlZF9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLFxcbm1tL3pzd2FwLmMtNjM2LVxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxcbi0tXFxubW0venN3YXAuYy02NjctXFxubW0venN3YXAuYzo2Njg6c3RhdGljIGlubGluZSBpbnQgZW50cnlfdG9fbmlkKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXFxubW0venN3YXAuYy02Njkte1xcbi0tXFxubW0venN3YXAuYy02NzItXFxubW0venN3YXAuYzo2NzM6c3RhdGljIHZvaWQgenN3YXBfbHJ1X2FkZChzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxcbm1tL3pzd2FwLmMtNjc0LXtcXG4tLVxcbm1tL3pzd2FwLmMtNjk1LVxcbm1tL3pzd2FwLmM6Njk2OnN0YXRpYyB2b2lkIHpzd2FwX2xydV9kZWwoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcXG5tbS96c3dhcC5jLTY5Ny17XFxuLS1cXG5tbS96c3dhcC5jLTcwNy1cXG5tbS96c3dhcC5jOjcwODp2b2lkIHpzd2FwX2xydXZlY19zdGF0ZV9pbml0KHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG5tbS96c3dhcC5jLTcwOS17XFxuLS1cXG5tbS96c3dhcC5jLTcxMi1cXG5tbS96c3dhcC5jOjcxMzp2b2lkIHpzd2FwX2ZvbGlvX3N3YXBpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL3pzd2FwLmMtNzE0LXtcXG4tLVxcbm1tL3pzd2FwLmMtNzM0LSAqL1xcbm1tL3pzd2FwLmM6NzM1OnZvaWQgenN3YXBfbWVtY2dfb2ZmbGluZV9jbGVhbnVwKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS96c3dhcC5jLTczNi17XFxuLS1cXG5tbS96c3dhcC5jLTc0OS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbm1tL3pzd2FwLmM6NzUwOnN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqenN3YXBfZW50cnlfY2FjaGU7XFxubW0venN3YXAuYy03NTEtXFxubW0venN3YXAuYzo3NTI6c3RhdGljIHN0cnVjdCB6c3dhcF9lbnRyeSAqenN3YXBfZW50cnlfY2FjaGVfYWxsb2MoZ2ZwX3QgZ2ZwLCBpbnQgbmlkKVxcbm1tL3pzd2FwLmMtNzUzLXtcXG4tLVxcbm1tL3pzd2FwLmMtNzYwLVxcbm1tL3pzd2FwLmM6NzYxOnN0YXRpYyB2b2lkIHpzd2FwX2VudHJ5X2NhY2hlX2ZyZWUoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcXG5tbS96c3dhcC5jLTc2Mi17XFxuLS1cXG5tbS96c3dhcC5jLTc2OS0gKi9cXG5tbS96c3dhcC5jOjc3MDpzdGF0aWMgdm9pZCB6c3dhcF9lbnRyeV9mcmVlKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXFxubW0venN3YXAuYy03NzEte1xcbi0tXFxubW0venN3YXAuYy03OTEtKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5tbS96c3dhcC5jOjc5MjpzdGF0aWMgaW50IHpzd2FwX2NwdV9jb21wX3ByZXBhcmUodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUpXFxubW0venN3YXAuYy03OTMte1xcbi0tXFxubW0venN3YXAuYy04NDgtXFxubW0venN3YXAuYzo4NDk6c3RhdGljIGJvb2wgenN3YXBfY29tcHJlc3Moc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXFxubW0venN3YXAuYy04NTAtXFx0XFx0XFx0ICAgc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wpXFxuLS1cXG5tbS96c3dhcC5jLTkzMi1cXG5tbS96c3dhcC5jOjkzMzpzdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0venN3YXAuYy05MzQte1xcbi0tXFxubW0venN3YXAuYy05OTgtICovXFxubW0venN3YXAuYzo5OTk6c3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG5tbS96c3dhcC5jLTEwMDAtXFx0XFx0XFx0XFx0IHN3cF9lbnRyeV90IHN3cGVudHJ5KVxcbi0tXFxubW0venN3YXAuYz0xMTAyPXN0YXRpYyBlbnVtIGxydV9zdGF0dXMgc2hyaW5rX21lbWNnX2NiKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sIHN0cnVjdCBsaXN0X2xydV9vbmUgKmwsXFxuLS1cXG5tbS96c3dhcC5jLTExODItXFxubW0venN3YXAuYzoxMTgzOnN0YXRpYyB1bnNpZ25lZCBsb25nIHpzd2FwX3Nocmlua2VyX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcXG5tbS96c3dhcC5jLTExODQtXFx0XFx0c3RydWN0IHNocmlua19jb250cm9sICpzYylcXG4tLVxcbm1tL3pzd2FwLmMtMTIwMy1cXG5tbS96c3dhcC5jOjEyMDQ6c3RhdGljIHVuc2lnbmVkIGxvbmcgenN3YXBfc2hyaW5rZXJfY291bnQoc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcXG5tbS96c3dhcC5jLTEyMDUtXFx0XFx0c3RydWN0IHNocmlua19jb250cm9sICpzYylcXG4tLVxcbm1tL3pzd2FwLmMtMTI3NS1cXG5tbS96c3dhcC5jOjEyNzY6c3RhdGljIHN0cnVjdCBzaHJpbmtlciAqenN3YXBfYWxsb2Nfc2hyaW5rZXIodm9pZClcXG5tbS96c3dhcC5jLTEyNzcte1xcbi0tXFxubW0venN3YXAuYz0xMzI5PXN0YXRpYyB2b2lkIHNocmlua193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxcbi0tXFxubW0venN3YXAuYy0xNDE5LVxcbm1tL3pzd2FwLmM6MTQyMDpzdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxcbm1tL3pzd2FwLmMtMTQyMS1cXHRcXHRcXHQgICAgIHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcXG4tLVxcbm1tL3pzd2FwLmMtMTUwNS1cXG5tbS96c3dhcC5jOjE1MDY6Ym9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL3pzd2FwLmMtMTUwNy17XFxuLS1cXG5tbS96c3dhcC5jLTE2MTEtICovXFxubW0venN3YXAuYzoxNjEyOmludCB6c3dhcF9sb2FkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0venN3YXAuYy0xNjEzLXtcXG4tLVxcbm1tL3pzd2FwLmMtMTY2NC1cXG5tbS96c3dhcC5jOjE2NjU6dm9pZCB6c3dhcF9pbnZhbGlkYXRlKHN3cF9lbnRyeV90IHN3cClcXG5tbS96c3dhcC5jLTE2NjYte1xcbi0tXFxubW0venN3YXAuYy0xNjc4LVxcbm1tL3pzd2FwLmM6MTY3OTppbnQgenN3YXBfc3dhcG9uKGludCB0eXBlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbm1tL3pzd2FwLmMtMTY4MC17XFxuLS1cXG5tbS96c3dhcC5jLTE2OTgtXFxubW0venN3YXAuYzoxNjk5OnZvaWQgenN3YXBfc3dhcG9mZihpbnQgdHlwZSlcXG5tbS96c3dhcC5jLTE3MDAte1xcbi0tXFxubW0venN3YXAuYy0xNzIxLVxcbm1tL3pzd2FwLmM6MTcyMjpzdGF0aWMgc3RydWN0IGRlbnRyeSAqenN3YXBfZGVidWdmc19yb290O1xcbm1tL3pzd2FwLmMtMTcyMy1cXG4tLVxcbm1tL3pzd2FwLmM9MTc0Mz1ERUZJTkVfREVCVUdGU19BVFRSSUJVVEUoc3RvcmVkX2luY29tcHJlc3NpYmxlX3BhZ2VzX2ZvcHMsXFxuLS1cXG5tbS96c3dhcC5jLTE3NDUtXFxubW0venN3YXAuYzoxNzQ2OnN0YXRpYyBpbnQgenN3YXBfZGVidWdmc19pbml0KHZvaWQpXFxubW0venN3YXAuYy0xNzQ3LXtcXG4tLVxcbm1tL3pzd2FwLmMtMTc3OS0jZWxzZVxcbm1tL3pzd2FwLmM6MTc4MDpzdGF0aWMgaW50IHpzd2FwX2RlYnVnZnNfaW5pdCh2b2lkKVxcbm1tL3pzd2FwLmMtMTc4MS17XFxuLS1cXG5tbS96c3dhcC5jLTE3ODgtKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5tbS96c3dhcC5jOjE3ODk6c3RhdGljIGludCB6c3dhcF9zZXR1cCh2b2lkKVxcbm1tL3pzd2FwLmMtMTc5MC17XFxuLS1cXG5tbS96c3dhcC5jLTE4NTEtXFxubW0venN3YXAuYzoxODUyOnN0YXRpYyBpbnQgX19pbml0IHpzd2FwX2luaXQodm9pZClcXG5tbS96c3dhcC5jLTE4NTMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMDoxODo0My4xMzIwOTUxNDdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDMwMzM0ODIxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSB6c3dhcC5jIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gb2YgYG1tL3pzd2FwLmNgIGlkZW50aWZpZXMgdGhlIGNydWNpYWwsIG5vbi11YmlxdWl0b3VzIGZ1bmN0aW9ucyB0aGF0IHNlZW0gY2VudHJhbCB0byB0aGUgY29yZSBmdW5jdGlvbmFsaXR5OiBgenN3YXBfc3RvcmVgLCBgenN3YXBfbG9hZGAsIGB6c3dhcF9zdG9yZV9wYWdlYCwgYHpzd2FwX2RlY29tcHJlc3NgLCBgenN3YXBfZW50cnlfZnJlZWAsIGFuZCB0aGUgcG9vbCBtYW5hZ2VtZW50IGZ1bmN0aW9uczogYHpzd2FwX3Bvb2xfY3JlYXRlYCwgYHpzd2FwX3Bvb2xfZmluZF9nZXRgLCBgX196c3dhcF9wb29sX2VtcHR5YCwgYF9fenN3YXBfcG9vbF9yZWxlYXNlYCwgYW5kIGFsc28gYHpzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0YCwgYW5kIGB6c3dhcF90b3RhbF9wYWdlc2AuIFRob3NlIGxvb2sgbGlrZSB0aGUgaG90c3BvdHMuXG5cblRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgY2xlYXJseSBgWlNXQVBgIGFuZCBgU1dBUGAg4oCTIHRob3NlIHR3byBhcmUgZXNzZW50aWFsIHRvIGNvbnNpZGVyIGZvciBmdXp6aW5nIHNjb3BlLlxuXG5Ob3csIHRoZSBwYXRjaCdzIGNvcmUgaXMgdGhlIHJlZmFjdG9yaW5nIG9mIHpzd2FwIHBvb2wgYW5kIGVudHJ5IGxpZmVjeWNsZSB3aXRoaW4gYG1tL3pzd2FwLmNgLiBXZSdyZSB0YWxraW5nIGFib3V0IGEgc2lnbmlmaWNhbnQgb3ZlcmhhdWw6IHN3YXBwaW5nIHRoZSBsaW5rZWQgbGlzdCBmb3IgYW4gSUQtYmFzZWQgeGFycmF5IChgenN3YXBfcG9vbHNgKSwgYW5kIHJlcGxhY2luZyB0aGUgYHBvb2xgIHBvaW50ZXIgd2l0aCBgcG9vbF9pZHhgLiBUaGF0IG1lYW5zIHdlJ3JlIGRlYWxpbmcgd2l0aCB4YXJyYXkgbG9va3VwcyB1c2luZyBgeGFfbG9hZGAgYW5kIGB4YV9mb3JfZWFjaGAsIHNvZnRpcnEtc2FmZSBsb2NraW5nIHZpYSBgeGFfYWxsb2NfYmhgLCBgeGFfZXJhc2VfYmhgLCBhbmQgZGVsYXllZCBkZXN0cnVjdGlvbiB3aXRoIGByY3Vfd29ya2AuIFRoZXNlIGFyZSBjcml0aWNhbCBzeW5jaHJvbml6YXRpb24gYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZXMgd2l0aGluIHJlYWNoYWJsZSBNTSBjb2RlLiBUaGlzIHNjcmVhbXMgY29uY3VycmVuY3kgaXNzdWVzLlxuXG5HaXZlbiB0aGUgc2NvcGUgYW5kIG5hdHVyZSBvZiB0aGUgY2hhbmdlcyDigJMgZXNwZWNpYWxseSB0aGUgc2hpZnQgdG8geGFycmF5cyBhbmQgUkNVIOKAkyB0aGUgcG90ZW50aWFsIGZvciBjb25jdXJyZW5jeSByYWNlcywgc3RhbGUgSUQgbG9va3VwcywgYW5kIGFzc2VydGlvbiBmYWlsdXJlcyBpcyBoaWdoLiBUaHVzLCBmdXp6aW5nIGlzIGRlZmluaXRlbHkgd2FycmFudGVkIGhlcmUuXG5cbkZpbmFsbHksIEkndmUgY2hlY2tlZCBhbGwgdGhlIGluc3RydWN0aW9ucyDigJMgdGhlIGBFbmFibGVDb25maWdzYCwgYEZvY3VzU3ltYm9sc2AsIGBXb3J0aEZ1enppbmdgLCBhbmQgYFJlYXNvbmluZ2Ag4oCTIGFsbCBhcmUgY2xlYXIgYW5kIG1ha2Ugc2Vuc2UuIFNlZW1zIHRoZSBzZXR1cCBpcyBjb3JyZWN0LiBOb3csIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyMTAsIk91dHB1dFRva2VucyI6MjYxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIwOjE4OjQ3LjQzNTQ0NTY4MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzMTAyNjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaU1dBUFwiLFxuICAgIFwiU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpzd2FwX3N0b3JlXCIsXG4gICAgXCJ6c3dhcF9sb2FkXCIsXG4gICAgXCJ6c3dhcF9zdG9yZV9wYWdlXCIsXG4gICAgXCJ6c3dhcF9kZWNvbXByZXNzXCIsXG4gICAgXCJ6c3dhcF9lbnRyeV9mcmVlXCIsXG4gICAgXCJ6c3dhcF9wb29sX2NyZWF0ZVwiLFxuICAgIFwienN3YXBfcG9vbF9maW5kX2dldFwiLFxuICAgIFwiX196c3dhcF9wb29sX2VtcHR5XCIsXG4gICAgXCJfX3pzd2FwX3Bvb2xfcmVsZWFzZVwiLFxuICAgIFwienN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXRcIixcbiAgICBcInpzd2FwX3RvdGFsX3BhZ2VzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpbiBtbS96c3dhcC5jLCByZWZhY3RvcmluZyBwb29sIGFuZCBlbnRyeSB0cmFja2luZyBmcm9tIGEgbGlua2VkIGxpc3QgYW5kIHJhdyBwb29sIHBvaW50ZXIgdG8gYW4gSUQtYmFzZWQgWEFycmF5IHdpdGggOC1iaXQgcG9vbCBpbmRpY2VzIGluIHN0cnVjdCB6c3dhcF9lbnRyeS4gSXQgYWxzbyB1cGRhdGVzIHN5bmNocm9uaXphdGlvbiBzZW1hbnRpY3MgdXNpbmcgUkNVIGFuZCByY3Vfd29yayAocXVldWVfcmN1X3dvcmspIGFsb25nIHdpdGggc29mdGlycS1zYWZlIFhBcnJheSBvcGVyYXRpb25zICh4YV9hbGxvY19iaCwgeGFfZXJhc2VfYmgpLiBUaGVzZSBjb25jdXJyZW5jeSBhbmQgZGF0YSBzdHJ1Y3R1cmUgbW9kaWZpY2F0aW9ucyBpbiByZWFjaGFibGUgTU0gY29kZSB3YXJyYW50IGZ1enppbmcgdG8gZGV0ZWN0IHBvc3NpYmxlIHJhY2VzLCBzdGFsZSBJRCBkZXJlZmVyZW5jZXMsIG9yIGFzc2VydGlvbiB0cmlwcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaU1dBUFwiLFxuICAgIFwiU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpzd2FwX3N0b3JlXCIsXG4gICAgXCJ6c3dhcF9sb2FkXCIsXG4gICAgXCJ6c3dhcF9zdG9yZV9wYWdlXCIsXG4gICAgXCJ6c3dhcF9kZWNvbXByZXNzXCIsXG4gICAgXCJ6c3dhcF9lbnRyeV9mcmVlXCIsXG4gICAgXCJ6c3dhcF9wb29sX2NyZWF0ZVwiLFxuICAgIFwienN3YXBfcG9vbF9maW5kX2dldFwiLFxuICAgIFwiX196c3dhcF9wb29sX2VtcHR5XCIsXG4gICAgXCJfX3pzd2FwX3Bvb2xfcmVsZWFzZVwiLFxuICAgIFwienN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXRcIixcbiAgICBcInpzd2FwX3RvdGFsX3BhZ2VzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpbiBtbS96c3dhcC5jLCByZWZhY3RvcmluZyBwb29sIGFuZCBlbnRyeSB0cmFja2luZyBmcm9tIGEgbGlua2VkIGxpc3QgYW5kIHJhdyBwb29sIHBvaW50ZXIgdG8gYW4gSUQtYmFzZWQgWEFycmF5IHdpdGggOC1iaXQgcG9vbCBpbmRpY2VzIGluIHN0cnVjdCB6c3dhcF9lbnRyeS4gSXQgYWxzbyB1cGRhdGVzIHN5bmNocm9uaXphdGlvbiBzZW1hbnRpY3MgdXNpbmcgUkNVIGFuZCByY3Vfd29yayAocXVldWVfcmN1X3dvcmspIGFsb25nIHdpdGggc29mdGlycS1zYWZlIFhBcnJheSBvcGVyYXRpb25zICh4YV9hbGxvY19iaCwgeGFfZXJhc2VfYmgpLiBUaGVzZSBjb25jdXJyZW5jeSBhbmQgZGF0YSBzdHJ1Y3R1cmUgbW9kaWZpY2F0aW9ucyBpbiByZWFjaGFibGUgTU0gY29kZSB3YXJyYW50IGZ1enppbmcgdG8gZGV0ZWN0IHBvc3NpYmxlIHJhY2VzLCBzdGFsZSBJRCBkZXJlZmVyZW5jZXMsIG9yIGFzc2VydGlvbiB0cmlwcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjA6MTg6NDcuNTE4NTU2MzJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NzMwOTQ1MjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjA6MTg6NDcuNTE5MTc2MzdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyNjczMDMyMTIzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaW50ZXJuYWwgenN3YXAgcG9vbCBhbmQgZW50cnkgbWFuYWdlbWVudCBpbiBtbS96c3dhcC5jIGJ5IHJlcGxhY2luZyBhIGxpbmtlZCBsaXN0IG9mIHBvb2xzIHdpdGggYW4gWEFycmF5IChpbmRleGVkIGJ5IGEgdTggcG9vbF9pZHgpIGFuZCBzd2l0Y2hpbmcgcG9vbCBsb29rdXBzIHRvIHVzZSB4YV9sb2FkKCkuIEFsbCBhbGxvY2F0ZWQgc3RydWN0dXJlcyAoenN3YXBfcG9vbCBhbGxvY2F0ZWQgd2l0aCBremFsbG9jX29iaiwgYW5kIHpzd2FwX2VudHJ5IHdob3NlIGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBpbiB6c3dhcF9zdG9yZV9wYWdlKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gTm9uZSBvZiB0aGUgbW9kaWZpZWQgZGF0YSBzdHJ1Y3R1cmVzIG9yIGZpZWxkcyBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcyBhcmUgaW50cm9kdWNlZC4gQW55IHBvdGVudGlhbCBidWdzIHdvdWxkIGludm9sdmUgY29uY3VycmVuY3ksIGxpZmV0aW1lL3JlZmNvdW50aW5nLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcyByYXRoZXIgdGhhbiBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2ZmM4MmJiZDBmNDU2NTBiMzY3ZmYzYmEwZmQwZDk2YmJlOWEyNDE1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAyMDoxODoyNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXG5pbmRleCBmM2FlM2M4MWU0OGVhLi4yNTNlZWJiOTcxYjk3IDEwMDY0NFxuLS0tIGEvbW0venN3YXAuY1xuKysrIGIvbW0venN3YXAuY1xuQEAgLTM0LDYgKzM0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93cml0ZWJhY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgveGFycmF5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0X2xydS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvenNtYWxsb2MuaFx1MDAzZVxuIFxuQEAgLTE1NCwxMiArMTU1LDIzIEBAIHN0cnVjdCB6c3dhcF9wb29sIHtcbiBcdHN0cnVjdCB6c19wb29sICp6c19wb29sO1xuIFx0c3RydWN0IGNyeXB0b19hY29tcF9jdHggX19wZXJjcHUgKmFjb21wX2N0eDtcbiBcdHN0cnVjdCBwZXJjcHVfcmVmIHJlZjtcbi1cdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbi1cdHN0cnVjdCB3b3JrX3N0cnVjdCByZWxlYXNlX3dvcms7XG4rXHRzdHJ1Y3QgcmN1X3dvcmsgcmVsZWFzZV9yd29yaztcbiBcdHN0cnVjdCBobGlzdF9ub2RlIG5vZGU7XG4rXHR1OCBpZHg7XG4gXHRjaGFyIHRmbV9uYW1lW0NSWVBUT19NQVhfQUxHX05BTUVdO1xuIH07XG4gXG4rLypcbisgKiBMaXZlIHBvb2xzIGtleWVkIGJ5IGlkICgxLi5aU1dBUF9NQVhfUE9PTF9JRCkuICBYQV9GTEFHU19BTExPQzEga2VlcHMgaWQgMFxuKyAqIHJlc2VydmVkIHNvIGl0IGlzIG5ldmVyIGhhbmRlZCB0byBhIGxpdmUgcG9vbC4gIFhBX0ZMQUdTX0xPQ0tfQkggbWFrZXMgdGhlXG4rICogeGFfbG9jayBzb2Z0aXJxLXNhZmU6IGl0IGlzIHRha2VuIGZyb20gX196c3dhcF9wb29sX2VtcHR5KCksIHdoaWNoIHJ1bnMgZnJvbVxuKyAqIGEgcGVyY3B1X3JlZiByZWxlYXNlIGNhbGxiYWNrIGluIHNvZnRpcnEgY29udGV4dC5cbisgKi9cbisjZGVmaW5lIFpTV0FQX0ZJUlNUX1BPT0xfSUQgMVxuKyNkZWZpbmUgWlNXQVBfTUFYX1BPT0xfSUQgVThfTUFYXG4rc3RhdGljIERFRklORV9YQVJSQVlfRkxBR1MoenN3YXBfcG9vbHMsIFhBX0ZMQUdTX0FMTE9DMSB8IFhBX0ZMQUdTX0xPQ0tfQkgpO1xuK3N0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCBfX3JjdSAqenN3YXBfY3VycmVudF9wb29sO1xuK1xuIC8qIEdsb2JhbCBMUlUgbGlzdHMgc2hhcmVkIGJ5IGFsbCB6c3dhcCBwb29scy4gKi9cbiBzdGF0aWMgc3RydWN0IGxpc3RfbHJ1IHpzd2FwX2xpc3RfbHJ1O1xuIFxuQEAgLTE4Miw3ICsxOTQsNyBAQCBzdGF0aWMgc3RydWN0IHNocmlua2VyICp6c3dhcF9zaHJpbmtlcjtcbiAgKiAgICAgICAgICAgICAgd3JpdGViYWNrIGxvZ2ljLiBUaGUgZW50cnkgaXMgb25seSByZWNsYWltZWQgYnkgdGhlIHdyaXRlYmFja1xuICAqICAgICAgICAgICAgICBsb2dpYyBpZiByZWZlcmVuY2VkIGlzIHVuc2V0LiBTZWUgY29tbWVudHMgaW4gdGhlIHNocmlua2VyXG4gICogICAgICAgICAgICAgIHNlY3Rpb24gZm9yIGNvbnRleHQuXG4tICogcG9vbCAtIHRoZSB6c3dhcF9wb29sIHRoZSBlbnRyeSdzIGRhdGEgaXMgaW5cbisgKiBwb29sX2lkeCAtIGlkIG9mIHRoZSB6c3dhcF9wb29sIHRoYXQgdGhlIGVudHJ5J3MgZGF0YSBpcyBpbi5cbiAgKiBoYW5kbGUgLSB6c21hbGxvYyBhbGxvY2F0aW9uIGhhbmRsZSB0aGF0IHN0b3JlcyB0aGUgY29tcHJlc3NlZCBwYWdlIGRhdGFcbiAgKiBvYmpjZyAtIHRoZSBvYmpfY2dyb3VwIHRoYXQgdGhlIGNvbXByZXNzZWQgbWVtb3J5IGlzIGNoYXJnZWQgdG9cbiAgKiBscnUgLSBoYW5kbGUgdG8gdGhlIHBvb2wncyBscnUgdXNlZCB0byBldmljdCBwYWdlcy5cbkBAIC0xOTEsMTkgKzIwMywyNSBAQCBzdHJ1Y3QgenN3YXBfZW50cnkge1xuIFx0c3dwX2VudHJ5X3Qgc3dwZW50cnk7XG4gXHR1bnNpZ25lZCBpbnQgbGVuZ3RoO1xuIFx0Ym9vbCByZWZlcmVuY2VkO1xuLVx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7XG4rXHR1OCBwb29sX2lkeDtcbiBcdHVuc2lnbmVkIGxvbmcgaGFuZGxlO1xuIFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBscnU7XG4gfTtcbiBcbisvKlxuKyAqIE5vIFJDVSBzZWN0aW9uIGlzIG5lZWRlZCBhcm91bmQgdGhlIHJldHVybmVkIHBvaW50ZXI6IGEgc3RvcmVkIGVudHJ5IHBpbnNcbisgKiBpdHMgcG9vbCB2aWEgcGVyY3B1X3JlZiAodGFrZW4gaW4genN3YXBfc3RvcmVfcGFnZSgpKSwgc28gdGhlIGlkIGNhbm5vdCBiZVxuKyAqIHJldXNlZCB1bmRlciB1cy4gIENhbGxlcnMgV0FSTiBhbmQgaGFuZGxlIGEgTlVMTCBmcm9tIGEgY29ycnVwdCBwb29sX2lkeC5cbisgKi9cbitzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX2VudHJ5X3Bvb2woc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcbit7XG4rXHRyZXR1cm4geGFfbG9hZChcdTAwMjZ6c3dhcF9wb29scywgZW50cnktXHUwMDNlcG9vbF9pZHgpO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IHhhcnJheSAqenN3YXBfdHJlZXNbTUFYX1NXQVBGSUxFU107XG4gc3RhdGljIHVuc2lnbmVkIGludCBucl96c3dhcF90cmVlc1tNQVhfU1dBUEZJTEVTXTtcbiBcbi0vKiBSQ1UtcHJvdGVjdGVkIGl0ZXJhdGlvbiAqL1xuLXN0YXRpYyBMSVNUX0hFQUQoenN3YXBfcG9vbHMpO1xuLS8qIHByb3RlY3RzIHpzd2FwX3Bvb2xzIGxpc3QgbW9kaWZpY2F0aW9uICovXG4tc3RhdGljIERFRklORV9TUElOTE9DSyh6c3dhcF9wb29sc19sb2NrKTtcbiAvKiBwb29sIGNvdW50ZXIgdG8gcHJvdmlkZSB1bmlxdWUgbmFtZXMgdG8genNtYWxsb2MgKi9cbiBzdGF0aWMgYXRvbWljX3QgenN3YXBfcG9vbHNfY291bnQgPSBBVE9NSUNfSU5JVCgwKTtcbiBcbkBAIC0yNzUsNiArMjkzLDcgQEAgc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2NyZWF0ZShjaGFyICpjb21wcmVzc29yKVxuIFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7XG4gXHRjaGFyIG5hbWVbMzhdOyAvKiAnenN3YXAnICsgMzIgY2hhciAobWF4KSBudW0gKyBcXDAgKi9cbiBcdGludCByZXQsIGNwdTtcbitcdHUzMiBpZDtcbiBcbiBcdGlmICghenN3YXBfaGFzX3Bvb2wgXHUwMDI2XHUwMDI2ICFzdHJjbXAoY29tcHJlc3NvciwgWlNXQVBfUEFSQU1fVU5TRVQpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbkBAIC0zMjAsMTIgKzMzOSwyOSBAQCBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3JlYXRlKGNoYXIgKmNvbXByZXNzb3IpXG4gXHRcdFx0ICAgICAgUEVSQ1BVX1JFRl9BTExPV19SRUlOSVQsIEdGUF9LRVJORUwpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byByZWZfZmFpbDtcbi1cdElOSVRfTElTVF9IRUFEKFx1MDAyNnBvb2wtXHUwMDNlbGlzdCk7XG4rXG4rXHQvKlxuK1x0ICogUHVibGlzaCBvbmx5IGFmdGVyIHRoZSBwb29sIGlzIGZ1bGx5IGJ1aWx0LCBzbyBsb2NrbGVzcyB3YWxrZXJzXG4rXHQgKiBuZXZlciBzZWUgYSBoYWxmLWluaXRpYWxpemVkIHBvb2wuICBUaGUgX2JoIHZhcmlhbnQgcGFpcnMgd2l0aCB0aGVcbitcdCAqIHNvZnRpcnEtY29udGV4dCB4YV9sb2NrIHRha2VuIGluIF9fenN3YXBfcG9vbF9lbXB0eSgpLlxuK1x0ICovXG4rXHRyZXQgPSB4YV9hbGxvY19iaChcdTAwMjZ6c3dhcF9wb29scywgXHUwMDI2aWQsIHBvb2wsXG4rXHRcdFx0ICBYQV9MSU1JVChaU1dBUF9GSVJTVF9QT09MX0lELCBaU1dBUF9NQVhfUE9PTF9JRCksXG4rXHRcdFx0ICBHRlBfS0VSTkVMKTtcbitcdGlmIChyZXQpIHtcbitcdFx0aWYgKHJldCA9PSAtRUJVU1kpXG4rXHRcdFx0cHJfZXJyKFwiY2Fubm90IGFsbG9jYXRlIHBvb2wgaWQgKG1heCAlZCBsaXZlIHBvb2xzKVxcblwiLFxuK1x0XHRcdCAgICAgICBaU1dBUF9NQVhfUE9PTF9JRCAtIFpTV0FQX0ZJUlNUX1BPT0xfSUQgKyAxKTtcbitcdFx0Z290byB4YV9mYWlsO1xuK1x0fVxuK1x0cG9vbC1cdTAwM2VpZHggPSBpZDtcbiBcbiBcdHpzd2FwX3Bvb2xfZGVidWcoXCJjcmVhdGVkXCIsIHBvb2wpO1xuIFxuIFx0cmV0dXJuIHBvb2w7XG4gXG4reGFfZmFpbDpcbitcdHBlcmNwdV9yZWZfZXhpdChcdTAwMjZwb29sLVx1MDAzZXJlZik7XG4gcmVmX2ZhaWw6XG4gXHRjcHVocF9zdGF0ZV9yZW1vdmVfaW5zdGFuY2UoQ1BVSFBfTU1fWlNXUF9QT09MX1BSRVBBUkUsIFx1MDAyNnBvb2wtXHUwMDNlbm9kZSk7XG4gXG5AQCAtMzc5LDM3ICs0MTUsMjkgQEAgc3RhdGljIHZvaWQgenN3YXBfcG9vbF9kZXN0cm95KHN0cnVjdCB6c3dhcF9wb29sICpwb29sKVxuIFxuIHN0YXRpYyB2b2lkIF9fenN3YXBfcG9vbF9yZWxlYXNlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4tXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IGNvbnRhaW5lcl9vZih3b3JrLCB0eXBlb2YoKnBvb2wpLFxuLVx0XHRcdFx0XHRcdHJlbGVhc2Vfd29yayk7XG4tXG4tXHRzeW5jaHJvbml6ZV9yY3UoKTtcbitcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sID0gY29udGFpbmVyX29mKHRvX3JjdV93b3JrKHdvcmspLFxuK1x0XHRcdFx0XHQgICAgICAgdHlwZW9mKCpwb29sKSwgcmVsZWFzZV9yd29yayk7XG4gXG4gXHQvKiBub2JvZHkgc2hvdWxkIGhhdmUgYmVlbiBhYmxlIHRvIGdldCBhIHJlZi4uLiAqL1xuIFx0V0FSTl9PTighcGVyY3B1X3JlZl9pc196ZXJvKFx1MDAyNnBvb2wtXHUwMDNlcmVmKSk7XG4gXHRwZXJjcHVfcmVmX2V4aXQoXHUwMDI2cG9vbC1cdTAwM2VyZWYpO1xuIFxuLVx0LyogcG9vbCBpcyBub3cgb2ZmIHpzd2FwX3Bvb2xzIGxpc3QgYW5kIGhhcyBubyByZWZlcmVuY2VzLiAqL1xuK1x0LyogVGhlIHBvb2wgaXMgbm8gbG9uZ2VyIGluIHpzd2FwX3Bvb2xzIGFuZCBoYXMgbm8gcmVmZXJlbmNlcy4gKi9cbiBcdHpzd2FwX3Bvb2xfZGVzdHJveShwb29sKTtcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2N1cnJlbnQodm9pZCk7XG4tXG4gc3RhdGljIHZvaWQgX196c3dhcF9wb29sX2VtcHR5KHN0cnVjdCBwZXJjcHVfcmVmICpyZWYpXG4ge1xuIFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7XG4gXG4gXHRwb29sID0gY29udGFpbmVyX29mKHJlZiwgdHlwZW9mKCpwb29sKSwgcmVmKTtcbiBcbi1cdHNwaW5fbG9ja19iaChcdTAwMjZ6c3dhcF9wb29sc19sb2NrKTtcbi1cbi1cdFdBUk5fT04ocG9vbCA9PSB6c3dhcF9wb29sX2N1cnJlbnQoKSk7XG4rXHRXQVJOX09OKHBvb2wgPT0gcmN1X2FjY2Vzc19wb2ludGVyKHpzd2FwX2N1cnJlbnRfcG9vbCkpO1xuIFxuLVx0bGlzdF9kZWxfcmN1KFx1MDAyNnBvb2wtXHUwMDNlbGlzdCk7XG4rXHR4YV9lcmFzZV9iaChcdTAwMjZ6c3dhcF9wb29scywgcG9vbC1cdTAwM2VpZHgpO1xuIFxuLVx0SU5JVF9XT1JLKFx1MDAyNnBvb2wtXHUwMDNlcmVsZWFzZV93b3JrLCBfX3pzd2FwX3Bvb2xfcmVsZWFzZSk7XG4tXHRzY2hlZHVsZV93b3JrKFx1MDAyNnBvb2wtXHUwMDNlcmVsZWFzZV93b3JrKTtcbi1cbi1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnpzd2FwX3Bvb2xzX2xvY2spO1xuK1x0SU5JVF9SQ1VfV09SSyhcdTAwMjZwb29sLVx1MDAzZXJlbGVhc2VfcndvcmssIF9fenN3YXBfcG9vbF9yZWxlYXNlKTtcbitcdHF1ZXVlX3JjdV93b3JrKHN5c3RlbV9wZXJjcHVfd3EsIFx1MDAyNnBvb2wtXHUwMDNlcmVsZWFzZV9yd29yayk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIHpzd2FwX3Bvb2xfdHJ5Z2V0KHN0cnVjdCB6c3dhcF9wb29sICpwb29sKVxuQEAgLTQzNSwyMCArNDYzLDEzIEBAIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqX196c3dhcF9wb29sX2N1cnJlbnQodm9pZClcbiB7XG4gXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDtcbiBcbi1cdHBvb2wgPSBsaXN0X2ZpcnN0X29yX251bGxfcmN1KFx1MDAyNnpzd2FwX3Bvb2xzLCB0eXBlb2YoKnBvb2wpLCBsaXN0KTtcbitcdHBvb2wgPSByY3VfZGVyZWZlcmVuY2UoenN3YXBfY3VycmVudF9wb29sKTtcbiBcdFdBUk5fT05DRSghcG9vbCBcdTAwMjZcdTAwMjYgenN3YXBfaGFzX3Bvb2wsXG4gXHRcdCAgXCIlczogbm8gcGFnZSBzdG9yYWdlIHBvb2whXFxuXCIsIF9fZnVuY19fKTtcbiBcbiBcdHJldHVybiBwb29sO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3VycmVudCh2b2lkKVxuLXtcbi1cdGFzc2VydF9zcGluX2xvY2tlZChcdTAwMjZ6c3dhcF9wb29sc19sb2NrKTtcbi1cbi1cdHJldHVybiBfX3pzd2FwX3Bvb2xfY3VycmVudCgpO1xuLX1cbi1cbiBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3VycmVudF9nZXQodm9pZClcbiB7XG4gXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDtcbkBAIC00NjQsMjMgKzQ4NSwyOCBAQCBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3VycmVudF9nZXQodm9pZClcbiBcdHJldHVybiBwb29sO1xuIH1cbiBcbi0vKiB0eXBlIGFuZCBjb21wcmVzc29yIG11c3QgYmUgbnVsbC10ZXJtaW5hdGVkICovXG4rLyogY29tcHJlc3NvciBtdXN0IGJlIG51bGwtdGVybWluYXRlZCAqL1xuIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9maW5kX2dldChjaGFyICpjb21wcmVzc29yKVxuIHtcbiBcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sO1xuK1x0dW5zaWduZWQgbG9uZyBpZDtcbiBcbi1cdGFzc2VydF9zcGluX2xvY2tlZChcdTAwMjZ6c3dhcF9wb29sc19sb2NrKTtcbi1cbi1cdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBvb2wsIFx1MDAyNnpzd2FwX3Bvb2xzLCBsaXN0KSB7XG4rXHQvKlxuK1x0ICogX196c3dhcF9wb29sX2VtcHR5KCkgY2FuIGVyYXNlIGZyb20genN3YXBfcG9vbHMgaW4gc29mdGlycSB3aGlsZSB3ZVxuK1x0ICogd2Fsay4gIHJjdV9yZWFkX2xvY2soKSBrZWVwcyB0aGUgd2FsayBjb25zaXN0ZW50IGFuZCBlYWNoIHBvb2wgYWxpdmVcbitcdCAqIGFjcm9zcyB0cnlnZXQoKS4gIHhhX2Zvcl9lYWNoKCkncyBvd24gUkNVIGRvZXMgbm90IHNwYW4gdGhlIGxvb3AgYm9keS5cbitcdCAqL1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0eGFfZm9yX2VhY2goXHUwMDI2enN3YXBfcG9vbHMsIGlkLCBwb29sKSB7XG4gXHRcdGlmIChzdHJjbXAocG9vbC1cdTAwM2V0Zm1fbmFtZSwgY29tcHJlc3NvcikpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdC8qIGlmIHdlIGNhbid0IGdldCBpdCwgaXQncyBhYm91dCB0byBiZSBkZXN0cm95ZWQgKi9cbi1cdFx0aWYgKCF6c3dhcF9wb29sX3RyeWdldChwb29sKSlcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0cmV0dXJuIHBvb2w7XG4rXHRcdGlmICh6c3dhcF9wb29sX3RyeWdldChwb29sKSlcbitcdFx0XHRicmVhaztcbiBcdH1cbitcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuLVx0cmV0dXJuIE5VTEw7XG4rXHRyZXR1cm4gcG9vbDtcbiB9XG4gXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgenN3YXBfbWF4X3BhZ2VzKHZvaWQpXG5AQCAtNDk3LDkgKzUyMywxNCBAQCB1bnNpZ25lZCBsb25nIHpzd2FwX3RvdGFsX3BhZ2VzKHZvaWQpXG4ge1xuIFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7XG4gXHR1bnNpZ25lZCBsb25nIHRvdGFsID0gMDtcbitcdHVuc2lnbmVkIGxvbmcgaWQ7XG4gXG4rXHQvKlxuK1x0ICogcmN1X3JlYWRfbG9jaygpIGtlZXBzIGVhY2ggcG9vbCBhbGl2ZSBhY3Jvc3MgenNfZ2V0X3RvdGFsX3BhZ2VzKCkuXG4rXHQgKiB4YV9mb3JfZWFjaCgpJ3Mgb3duIFJDVSBkb2VzIG5vdCBzcGFuIHRoZSBsb29wIGJvZHkuXG4rXHQgKi9cbiBcdHJjdV9yZWFkX2xvY2soKTtcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBvb2wsIFx1MDAyNnpzd2FwX3Bvb2xzLCBsaXN0KVxuK1x0eGFfZm9yX2VhY2goXHUwMDI2enN3YXBfcG9vbHMsIGlkLCBwb29sKVxuIFx0XHR0b3RhbCArPSB6c19nZXRfdG90YWxfcGFnZXMocG9vbC1cdTAwM2V6c19wb29sKTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuQEAgLTU1NiwyMCArNTg3LDEzIEBAIHN0YXRpYyBpbnQgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuIFx0fVxuIFxuLVx0c3Bpbl9sb2NrX2JoKFx1MDAyNnpzd2FwX3Bvb2xzX2xvY2spO1xuLVxuIFx0cG9vbCA9IHpzd2FwX3Bvb2xfZmluZF9nZXQocyk7XG4tXHRpZiAocG9vbCkge1xuK1x0aWYgKCFwb29sKSB7XG4rXHRcdHBvb2wgPSB6c3dhcF9wb29sX2NyZWF0ZShzKTtcbitcdH0gZWxzZSB7XG4gXHRcdHpzd2FwX3Bvb2xfZGVidWcoXCJ1c2luZyBleGlzdGluZ1wiLCBwb29sKTtcbi1cdFx0V0FSTl9PTihwb29sID09IHpzd2FwX3Bvb2xfY3VycmVudCgpKTtcbi1cdFx0bGlzdF9kZWxfcmN1KFx1MDAyNnBvb2wtXHUwMDNlbGlzdCk7XG4tXHR9XG4rXHRcdFdBUk5fT04ocG9vbCA9PSByY3VfYWNjZXNzX3BvaW50ZXIoenN3YXBfY3VycmVudF9wb29sKSk7XG4gXG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZ6c3dhcF9wb29sc19sb2NrKTtcbi1cbi1cdGlmICghcG9vbClcbi1cdFx0cG9vbCA9IHpzd2FwX3Bvb2xfY3JlYXRlKHMpO1xuLVx0ZWxzZSB7XG4gXHRcdC8qXG4gXHRcdCAqIFJlc3RvcmUgdGhlIGluaXRpYWwgcmVmIGRyb3BwZWQgYnkgcGVyY3B1X3JlZl9raWxsKClcbiBcdFx0ICogd2hlbiB0aGUgcG9vbCB3YXMgZGVjb21taXNzaW9uZWQgYW5kIHN3aXRjaCBpdCBhZ2FpblxuQEAgLTU4NiwyNCArNjEwLDE4IEBAIHN0YXRpYyBpbnQgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtXG4gXHRlbHNlXG4gXHRcdHJldCA9IC1FSU5WQUw7XG4gXG4tXHRzcGluX2xvY2tfYmgoXHUwMDI2enN3YXBfcG9vbHNfbG9jayk7XG4tXG4rXHQvKlxuK1x0ICogQ29tcHJlc3NvciBzd2l0Y2hlcyBhcmUgc2VyaWFsaXplZCBieSB0aGUga2VybmVsIHBhcmFtIGxvY2ssIHNvIHRoaXNcbitcdCAqIGlzIHRoZSBvbmx5IHdyaXRlciBvZiB6c3dhcF9jdXJyZW50X3Bvb2w6IG5vIHhhX2xvY2sgbmVlZGVkLlxuK1x0ICovXG4gXHRpZiAoIXJldCkge1xuLVx0XHRwdXRfcG9vbCA9IHpzd2FwX3Bvb2xfY3VycmVudCgpO1xuLVx0XHRsaXN0X2FkZF9yY3UoXHUwMDI2cG9vbC1cdTAwM2VsaXN0LCBcdTAwMjZ6c3dhcF9wb29scyk7XG4rXHRcdHB1dF9wb29sID0gcmN1X2FjY2Vzc19wb2ludGVyKHpzd2FwX2N1cnJlbnRfcG9vbCk7XG4rXHRcdHJjdV9hc3NpZ25fcG9pbnRlcih6c3dhcF9jdXJyZW50X3Bvb2wsIHBvb2wpO1xuIFx0XHR6c3dhcF9oYXNfcG9vbCA9IHRydWU7XG4gXHR9IGVsc2UgaWYgKHBvb2wpIHtcbi1cdFx0Lypcbi1cdFx0ICogQWRkIHRoZSBwb3NzaWJseSBwcmUtZXhpc3RpbmcgcG9vbCB0byB0aGUgZW5kIG9mIHRoZSBwb29sc1xuLVx0XHQgKiBsaXN0OyBpZiBpdCdzIG5ldyAoYW5kIGVtcHR5KSB0aGVuIGl0J2xsIGJlIHJlbW92ZWQgYW5kXG4tXHRcdCAqIGRlc3Ryb3llZCBieSB0aGUgcHV0IGFmdGVyIHdlIGRyb3AgdGhlIGxvY2tcbi1cdFx0ICovXG4tXHRcdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNnBvb2wtXHUwMDNlbGlzdCwgXHUwMDI2enN3YXBfcG9vbHMpO1xuIFx0XHRwdXRfcG9vbCA9IHBvb2w7XG4gXHR9XG4gXG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZ6c3dhcF9wb29sc19sb2NrKTtcbi1cbiBcdC8qXG4gXHQgKiBEcm9wIHRoZSByZWYgZnJvbSBlaXRoZXIgdGhlIG9sZCBjdXJyZW50IHBvb2wsXG4gXHQgKiBvciB0aGUgbmV3IHBvb2wgd2UgZmFpbGVkIHRvIGFkZFxuQEAgLTc1MSw5ICs3NjksMTMgQEAgc3RhdGljIHZvaWQgenN3YXBfZW50cnlfY2FjaGVfZnJlZShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxuICAqL1xuIHN0YXRpYyB2b2lkIHpzd2FwX2VudHJ5X2ZyZWUoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcbiB7XG4rXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IHpzd2FwX2VudHJ5X3Bvb2woZW50cnkpO1xuK1xuIFx0enN3YXBfbHJ1X2RlbChlbnRyeSk7XG4tXHR6c19mcmVlKGVudHJ5LVx1MDAzZXBvb2wtXHUwMDNlenNfcG9vbCwgZW50cnktXHUwMDNlaGFuZGxlKTtcbi1cdHpzd2FwX3Bvb2xfcHV0KGVudHJ5LVx1MDAzZXBvb2wpO1xuK1x0aWYgKCFXQVJOX09OX09OQ0UoIXBvb2wpKSB7XG4rXHRcdHpzX2ZyZWUocG9vbC1cdTAwM2V6c19wb29sLCBlbnRyeS1cdTAwM2VoYW5kbGUpO1xuK1x0XHR6c3dhcF9wb29sX3B1dChwb29sKTtcbitcdH1cbiBcdGlmIChlbnRyeS1cdTAwM2VvYmpjZykge1xuIFx0XHRvYmpfY2dyb3VwX3VuY2hhcmdlX3pzd2FwKGVudHJ5LVx1MDAzZW9iamNnLCBlbnRyeS1cdTAwM2VsZW5ndGgpO1xuIFx0XHRvYmpfY2dyb3VwX3B1dChlbnRyeS1cdTAwM2VvYmpjZyk7XG5AQCAtOTEwLDEyICs5MzIsMTUgQEAgc3RhdGljIGJvb2wgenN3YXBfY29tcHJlc3Moc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXG4gc3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbi1cdHN0cnVjdCB6c3dhcF9wb29sICpwb29sID0gZW50cnktXHUwMDNlcG9vbDtcbitcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sID0genN3YXBfZW50cnlfcG9vbChlbnRyeSk7XG4gXHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgaW5wdXRbMl07IC8qIHpzbWFsbG9jIHJldHVybnMgYW4gU0cgbGlzdCAxLTIgZW50cmllcyAqL1xuIFx0c3RydWN0IHNjYXR0ZXJsaXN0IG91dHB1dDtcbiBcdHN0cnVjdCBjcnlwdG9fYWNvbXBfY3R4ICphY29tcF9jdHg7XG4gXHRpbnQgcmV0ID0gMCwgZGxlbjtcbiBcbitcdGlmIChXQVJOX09OX09OQ0UoIXBvb2wpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4gXHRhY29tcF9jdHggPSByYXdfY3B1X3B0cihwb29sLVx1MDAzZWFjb21wX2N0eCk7XG4gXHRtdXRleF9sb2NrKFx1MDAyNmFjb21wX2N0eC1cdTAwM2VtdXRleCk7XG4gXHR6c19vYmpfcmVhZF9zZ19iZWdpbihwb29sLVx1MDAzZXpzX3Bvb2wsIGVudHJ5LVx1MDAzZWhhbmRsZSwgaW5wdXQsIGVudHJ5LVx1MDAzZWxlbmd0aCk7XG5AQCAtOTUxLDcgKzk3Niw3IEBAIHN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHByX2FsZXJ0X3JhdGVsaW1pdGVkKFwiRGVjb21wcmVzc2lvbiBlcnJvciBmcm9tIHpzd2FwICglZDolbHUgJXMgJXUtXHUwMDNlJWQpXFxuXCIsXG4gXHRcdFx0XHRcdFx0c3dwX3R5cGUoZW50cnktXHUwMDNlc3dwZW50cnkpLFxuIFx0XHRcdFx0XHRcdHN3cF9vZmZzZXQoZW50cnktXHUwMDNlc3dwZW50cnkpLFxuLVx0XHRcdFx0XHRcdGVudHJ5LVx1MDAzZXBvb2wtXHUwMDNldGZtX25hbWUsXG4rXHRcdFx0XHRcdFx0cG9vbC1cdTAwM2V0Zm1fbmFtZSxcbiBcdFx0XHRcdFx0XHRlbnRyeS1cdTAwM2VsZW5ndGgsIGRsZW4pO1xuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbkBAIC0xNDA5LDYgKzE0MzQsMTMgQEAgc3RhdGljIGJvb2wgenN3YXBfc3RvcmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdGlmICghenN3YXBfY29tcHJlc3MocGFnZSwgZW50cnksIHBvb2wpKVxuIFx0XHRnb3RvIGNvbXByZXNzX2ZhaWxlZDtcbiBcbitcdC8qXG4rXHQgKiBTZXQgcG9vbF9pZHggYmVmb3JlIHRoZSB4YV9zdG9yZSgpIGJlbG93IHB1Ymxpc2hlcyB0aGUgZW50cnksIG9yIGFcbitcdCAqIGNvbmN1cnJlbnQgcmVhZGVyIGNvdWxkIHJlc29sdmUgYSBzdGFsZSBwb29sX2lkeCBsZWZ0IGJ5IHNsYWIgcmV1c2VcbitcdCAqIHRvIGFuIHVucmVsYXRlZCBsaXZlIHBvb2wuXG4rXHQgKi9cbitcdGVudHJ5LVx1MDAzZXBvb2xfaWR4ID0gcG9vbC1cdTAwM2VpZHg7XG4rXG4gXHRvbGQgPSB4YV9zdG9yZShzd2FwX3pzd2FwX3RyZWUocGFnZV9zd3BlbnRyeSksXG4gXHRcdCAgICAgICBzd3Bfb2Zmc2V0KHBhZ2Vfc3dwZW50cnkpLFxuIFx0XHQgICAgICAgZW50cnksIEdGUF9LRVJORUwpO1xuQEAgLTE0NTQsNyArMTQ4Niw2IEBAIHN0YXRpYyBib29sIHpzd2FwX3N0b3JlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHQgKiAgICBUaGUgcHVibGlzaGluZyBvcmRlciBtYXR0ZXJzIHRvIHByZXZlbnQgd3JpdGViYWNrIGZyb20gc2VlaW5nXG4gXHQgKiAgICBhbiBpbmNvaGVyZW50IGVudHJ5LlxuIFx0ICovXG4tXHRlbnRyeS1cdTAwM2Vwb29sID0gcG9vbDtcbiBcdGVudHJ5LVx1MDAzZXN3cGVudHJ5ID0gcGFnZV9zd3BlbnRyeTtcbiBcdGVudHJ5LVx1MDAzZW9iamNnID0gb2JqY2c7XG4gXHRlbnRyeS1cdTAwM2VyZWZlcmVuY2VkID0gdHJ1ZTtcbkBAIC0xNzkwLDcgKzE4MjEsNyBAQCBzdGF0aWMgaW50IHpzd2FwX3NldHVwKHZvaWQpXG4gXHRwb29sID0gX196c3dhcF9wb29sX2NyZWF0ZV9mYWxsYmFjaygpO1xuIFx0aWYgKHBvb2wpIHtcbiBcdFx0cHJfaW5mbyhcImxvYWRlZCB1c2luZyBwb29sICVzXFxuXCIsIHBvb2wtXHUwMDNldGZtX25hbWUpO1xuLVx0XHRsaXN0X2FkZChcdTAwMjZwb29sLVx1MDAzZWxpc3QsIFx1MDAyNnpzd2FwX3Bvb2xzKTtcbitcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHpzd2FwX2N1cnJlbnRfcG9vbCwgcG9vbCk7XG4gXHRcdHpzd2FwX2hhc19wb29sID0gdHJ1ZTtcbiBcdFx0c3RhdGljX2JyYW5jaF9lbmFibGUoXHUwMDI2enN3YXBfZXZlcl9lbmFibGVkKTtcbiBcdH0gZWxzZSB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMDoxODo0Ny41MTkxNzgzMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDM4ODY2Njk5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFpzd2FwIFBhdGNoOiBNZW1vcnkgU2FmZXR5IGFuZCBDb25jdXJyZW5jeSBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIHJlZmFjdG9yaW5nIG9mIGB6c3dhcF9wb29sYCBtYW5hZ2VtZW50IGludHJvZHVjZXMgb3IgZXhhY2VyYmF0ZXMgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBzcGVjaWZpY2FsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgZGV0ZWN0YWJsZSBieSBLTVNBTi4gSSBhbHNvIG5lZWQgdG8gYXNzZXNzIGlmIHRoaXMgaXMgcHJpbWFyaWx5IGEgbWF0dGVyIG9mIGNvbmN1cnJlbmN5LCBsaWZlY3ljbGUgbWFuYWdlbWVudCwgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZXMgdGhhdCBtaWdodCB0cmlnZ2VyIEtBU0FOIG9yIExPQ0tERVAgY29uY2VybnMuXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhlIGNvZGUgY2hhbmdlcy4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIHJlcGxhY2luZyB0aGUgZXhpc3RpbmcgbGlua2VkIGxpc3QgYHpzd2FwX3Bvb2xzYCB3aXRoIGFuIFhBcnJheSBhbmQgdXNpbmcgYW4gUkNVIHBvaW50ZXIgZm9yIGB6c3dhcF9jdXJyZW50X3Bvb2xgLiBJbnRlcmVzdGluZy4gVGhleSdyZSBhbHNvIHN3YXBwaW5nIHRoZSBgZW50cnktXHUwMDNlcG9vbGAgcG9pbnRlciB3aXRoaW4gdGhlIGB6c3dhcF9lbnRyeWAgc3RydWN0dXJlIHdpdGggYSBgdTggcG9vbF9pZHhgLCBhY3RpbmcgYXMgYW4gaW5kZXggaW50byB0aGUgYHpzd2FwX3Bvb2xzYCBYQXJyYXkuIFRoaXMgaXMgZm9sbG93ZWQgYnkgdXNpbmcgYHpzd2FwX2VudHJ5X3Bvb2woZW50cnkpYCB0byBsb29rIHVwIHRoZSBwb29sIHVzaW5nIGB4YV9sb2FkYC5cblxuTm93LCB0aGUgY3JpdGljYWwgcGFydDogSSBuZWVkIHRvIHRob3JvdWdobHkgZXhhbWluZSB0aGUgYWxsb2NhdGlvbiBhbmQgdXNhZ2Ugb2YgYHpzd2FwX2VudHJ5YC4gR2l2ZW4gdGhpcyBgcG9vbF9pZHhgIGFwcHJvYWNoLCBJIG5lZWQgdG8gZW5zdXJlIGl0J3MgaW5pdGlhbGl6ZWQgY29ycmVjdGx5IGFuZCB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgYWNjZXNzLiBJJ2xsIG5lZWQgdG8gdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb2RlIHNlY3Rpb25zIGluIGBtbS96c3dhcC5jYC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHpzd2FwX3Bvb2xfY3JlYXRlYCwgYF9fenN3YXBfcG9vbF9yZWxlYXNlYCwgYF9fenN3YXBfcG9vbF9lbXB0eWAsIGB6c3dhcF9wb29sX2ZpbmRfZ2V0YCwgYW5kIHRoZSBvdGhlciBmdW5jdGlvbnMgYXJlIGltcGFjdGVkIGJ5IHRoZXNlIGNoYW5nZXMuIFRoaXMgaGFzIHRoZSBwb3RlbnRpYWwgdG8gaW50cm9kdWNlIHN1YnRsZSBpc3N1ZXMgYXJvdW5kIHRoZSBsaWZlY3ljbGUgb2YgdGhlc2UgcG9vbHMsIGFuZCBJIG5lZWQgdG8gYmUgY2VydGFpbiB0aGF0IHRoZSBpbmRpY2VzIGFyZSBtYW5hZ2VkIHByb3Blcmx5LiBUaGlzIGlzIGNydWNpYWwgZm9yIGJvdGggY29ycmVjdG5lc3MgYW5kIHBlcmZvcm1hbmNlLiBGaW5hbGx5LCBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZSBvbiB0aGUgY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gcm91dGluZXMgbGlrZSBgenN3YXBfZGVjb21wcmVzc2AsIGB6c3dhcF9zdG9yZV9wYWdlYCwgYW5kIHRoZSBzZXR1cCByb3V0aW5lcyBzdWNoIGFzIGB6c3dhcF9zZXR1cGAuIFRoZSBnb2FsIGhlcmUgaXMgdG8gbWFrZSBzdXJlIGFsbCBtZW1vcnkgYWNjZXNzZXMgYXJlIHZhbGlkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDEwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjA6MTg6NTcuOTA3ODQ3OFoiLCJTZXEiOjE4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1MzU5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwienN3YXBfZW50cnlfY2FjaGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0venN3YXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS96c3dhcC5jPTczNT12b2lkIHpzd2FwX21lbWNnX29mZmxpbmVfY2xlYW51cChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS96c3dhcC5jLTc0OS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbm1tL3pzd2FwLmM6NzUwOnN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqenN3YXBfZW50cnlfY2FjaGU7XFxubW0venN3YXAuYy03NTEtXFxubW0venN3YXAuYzo3NTI6c3RhdGljIHN0cnVjdCB6c3dhcF9lbnRyeSAqenN3YXBfZW50cnlfY2FjaGVfYWxsb2MoZ2ZwX3QgZ2ZwLCBpbnQgbmlkKVxcbm1tL3pzd2FwLmMtNzUzLXtcXG5tbS96c3dhcC5jLTc1NC1cXHRzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5O1xcbm1tL3pzd2FwLmM6NzU1OlxcdGVudHJ5ID0ga21lbV9jYWNoZV9hbGxvY19ub2RlKHpzd2FwX2VudHJ5X2NhY2hlLCBnZnAsIG5pZCk7XFxubW0venN3YXAuYy03NTYtXFx0aWYgKCFlbnRyeSlcXG4tLVxcbm1tL3pzd2FwLmMtNzYwLVxcbm1tL3pzd2FwLmM6NzYxOnN0YXRpYyB2b2lkIHpzd2FwX2VudHJ5X2NhY2hlX2ZyZWUoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcXG5tbS96c3dhcC5jLTc2Mi17XFxubW0venN3YXAuYzo3NjM6XFx0a21lbV9jYWNoZV9mcmVlKHpzd2FwX2VudHJ5X2NhY2hlLCBlbnRyeSk7XFxubW0venN3YXAuYy03NjQtfVxcbi0tXFxubW0venN3YXAuYz03NzA9c3RhdGljIHZvaWQgenN3YXBfZW50cnlfZnJlZShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxcbi0tXFxubW0venN3YXAuYy03ODQtXFx0XFx0YXRvbWljX2xvbmdfZGVjKFxcdTAwMjZ6c3dhcF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXMpO1xcbm1tL3pzd2FwLmM6Nzg1OlxcdHpzd2FwX2VudHJ5X2NhY2hlX2ZyZWUoZW50cnkpO1xcbm1tL3pzd2FwLmMtNzg2LVxcdGF0b21pY19sb25nX2RlYyhcXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcXG4tLVxcbm1tL3pzd2FwLmM9MTQyMD1zdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubW0venN3YXAuYy0xNDI3LVxcdC8qIGFsbG9jYXRlIGVudHJ5ICovXFxubW0venN3YXAuYzoxNDI4OlxcdGVudHJ5ID0genN3YXBfZW50cnlfY2FjaGVfYWxsb2MoR0ZQX0tFUk5FTCwgcGFnZV90b19uaWQocGFnZSkpO1xcbm1tL3pzd2FwLmMtMTQyOS1cXHRpZiAoIWVudHJ5KSB7XFxuLS1cXG5tbS96c3dhcC5jLTE1MDEtY29tcHJlc3NfZmFpbGVkOlxcbm1tL3pzd2FwLmM6MTUwMjpcXHR6c3dhcF9lbnRyeV9jYWNoZV9mcmVlKGVudHJ5KTtcXG5tbS96c3dhcC5jLTE1MDMtXFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubW0venN3YXAuYz0xNzg5PXN0YXRpYyBpbnQgenN3YXBfc2V0dXAodm9pZClcXG4tLVxcbm1tL3pzd2FwLmMtMTc5My1cXG5tbS96c3dhcC5jOjE3OTQ6XFx0enN3YXBfZW50cnlfY2FjaGUgPSBLTUVNX0NBQ0hFKHpzd2FwX2VudHJ5LCAwKTtcXG5tbS96c3dhcC5jOjE3OTU6XFx0aWYgKCF6c3dhcF9lbnRyeV9jYWNoZSkge1xcbm1tL3pzd2FwLmMtMTc5Ni1cXHRcXHRwcl9lcnIoXFxcImVudHJ5IGNhY2hlIGNyZWF0aW9uIGZhaWxlZFxcXFxuXFxcIik7XFxuLS1cXG5tbS96c3dhcC5jLTE4NDMtaHBfZmFpbDpcXG5tbS96c3dhcC5jOjE4NDQ6XFx0a21lbV9jYWNoZV9kZXN0cm95KHpzd2FwX2VudHJ5X2NhY2hlKTtcXG5tbS96c3dhcC5jLTE4NDUtY2FjaGVfZmFpbDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjA6MTg6NTcuOTU1Mzk4NDE5WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyOTg5MTA0NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIGNvZGUgaW52ZXN0aWdhdGlvbiwgdGhpbmtpbmcgdGhyb3VnaCBpdCBzdGVwLWJ5LXN0ZXA6XG5cbioqQW5hbHl6aW5nIGB6c3dhcF9zdG9yZV9wYWdlYCBJbml0aWFsaXphdGlvbioqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyBoYXBwZW5pbmcgd2l0aCBgenN3YXBfc3RvcmVfcGFnZWAuIEknbSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhhdCBzcGVjaWZpYyBibG9jayBvZiBjb2RlLCByb3VnaGx5IGxpbmVzIDE0MjAgdG8gMTUwMC4gTXkgZ29hbCBpcyB0byBtYXAgb3V0IHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIG1ldGljdWxvdXNseS4gSSB3YW50IHRvIGtub3cgZXhhY3RseSB3aGljaCBkYXRhIGZpZWxkcyBhcmUgYmVpbmcgc2V0IHVwLCBhbmQganVzdCBhcyBjcml0aWNhbGx5LCB3aGVuIGFuZCBob3cgdGhhdCBpbml0aWFsaXphdGlvbiBvY2N1cnMuIEknbSBsb29raW5nIGZvciB0aGUgc2VxdWVuY2Ugb2YgZXZlbnRzIGhlcmUuIFVuZGVyc3RhbmRpbmcgdGhlIG9yZGVyIGluIHdoaWNoIHRoaW5ncyBhcmUgY29uZmlndXJlZCBpcyBvZnRlbiBrZXkgdG8gZGVidWdnaW5nIG9yIG1vZGlmeWluZyB0aGlzIGtpbmQgb2YgY29kZS4gQW55IHN1YnRsZSBkZXBlbmRlbmNpZXMgb3Igc2lkZSBlZmZlY3RzIGluIHRoYXQgc2VjdGlvbiBhcmUgaW1wb3J0YW50LiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgYW55IGhpZGRlbiBnb3RjaGFzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTgzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjA6MTk6MDAuMjU0MzEyMDM0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS96c3dhcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0MjAsXG4gIFwiTGluZUNvdW50XCI6IDkwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0MjA6XFx0c3RhdGljIGJvb2wgenN3YXBfc3RvcmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4xNDIxOlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxcbjE0MjI6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbClcXG4xNDIzOlxcdHtcXG4xNDI0OlxcdFxcdHN3cF9lbnRyeV90IHBhZ2Vfc3dwZW50cnkgPSBwYWdlX3N3YXBfZW50cnkocGFnZSk7XFxuMTQyNTpcXHRcXHRzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCAqb2xkO1xcbjE0MjY6XFx0XFxuMTQyNzpcXHRcXHQvKiBhbGxvY2F0ZSBlbnRyeSAqL1xcbjE0Mjg6XFx0XFx0ZW50cnkgPSB6c3dhcF9lbnRyeV9jYWNoZV9hbGxvYyhHRlBfS0VSTkVMLCBwYWdlX3RvX25pZChwYWdlKSk7XFxuMTQyOTpcXHRcXHRpZiAoIWVudHJ5KSB7XFxuMTQzMDpcXHRcXHRcXHR6c3dhcF9yZWplY3Rfa21lbWNhY2hlX2ZhaWwrKztcXG4xNDMxOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4xNDMyOlxcdFxcdH1cXG4xNDMzOlxcdFxcbjE0MzQ6XFx0XFx0aWYgKCF6c3dhcF9jb21wcmVzcyhwYWdlLCBlbnRyeSwgcG9vbCkpXFxuMTQzNTpcXHRcXHRcXHRnb3RvIGNvbXByZXNzX2ZhaWxlZDtcXG4xNDM2OlxcdFxcbjE0Mzc6XFx0XFx0LypcXG4xNDM4OlxcdFxcdCAqIFNldCBwb29sX2lkeCBiZWZvcmUgdGhlIHhhX3N0b3JlKCkgYmVsb3cgcHVibGlzaGVzIHRoZSBlbnRyeSwgb3IgYVxcbjE0Mzk6XFx0XFx0ICogY29uY3VycmVudCByZWFkZXIgY291bGQgcmVzb2x2ZSBhIHN0YWxlIHBvb2xfaWR4IGxlZnQgYnkgc2xhYiByZXVzZVxcbjE0NDA6XFx0XFx0ICogdG8gYW4gdW5yZWxhdGVkIGxpdmUgcG9vbC5cXG4xNDQxOlxcdFxcdCAqL1xcbjE0NDI6XFx0XFx0ZW50cnktXFx1MDAzZXBvb2xfaWR4ID0gcG9vbC1cXHUwMDNlaWR4O1xcbjE0NDM6XFx0XFxuMTQ0NDpcXHRcXHRvbGQgPSB4YV9zdG9yZShzd2FwX3pzd2FwX3RyZWUocGFnZV9zd3BlbnRyeSksXFxuMTQ0NTpcXHRcXHRcXHQgICAgICAgc3dwX29mZnNldChwYWdlX3N3cGVudHJ5KSxcXG4xNDQ2OlxcdFxcdFxcdCAgICAgICBlbnRyeSwgR0ZQX0tFUk5FTCk7XFxuMTQ0NzpcXHRcXHRpZiAoeGFfaXNfZXJyKG9sZCkpIHtcXG4xNDQ4OlxcdFxcdFxcdGludCBlcnIgPSB4YV9lcnIob2xkKTtcXG4xNDQ5OlxcdFxcbjE0NTA6XFx0XFx0XFx0V0FSTl9PTkNFKGVyciAhPSAtRU5PTUVNLCBcXFwidW5leHBlY3RlZCB4YXJyYXkgZXJyb3I6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbjE0NTE6XFx0XFx0XFx0enN3YXBfcmVqZWN0X2FsbG9jX2ZhaWwrKztcXG4xNDUyOlxcdFxcdFxcdGdvdG8gc3RvcmVfZmFpbGVkO1xcbjE0NTM6XFx0XFx0fVxcbjE0NTQ6XFx0XFxuMTQ1NTpcXHRcXHQvKlxcbjE0NTY6XFx0XFx0ICogV2UgbWF5IGhhdmUgaGFkIGFuIGV4aXN0aW5nIGVudHJ5IHRoYXQgYmVjYW1lIHN0YWxlIHdoZW5cXG4xNDU3OlxcdFxcdCAqIHRoZSBmb2xpbyB3YXMgcmVkaXJ0aWVkIGFuZCBub3cgdGhlIG5ldyB2ZXJzaW9uIGlzIGJlaW5nXFxuMTQ1ODpcXHRcXHQgKiBzd2FwcGVkIG91dC4gR2V0IHJpZCBvZiB0aGUgb2xkLlxcbjE0NTk6XFx0XFx0ICovXFxuMTQ2MDpcXHRcXHRpZiAob2xkKVxcbjE0NjE6XFx0XFx0XFx0enN3YXBfZW50cnlfZnJlZShvbGQpO1xcbjE0NjI6XFx0XFxuMTQ2MzpcXHRcXHQvKlxcbjE0NjQ6XFx0XFx0ICogVGhlIGVudHJ5IGlzIHN1Y2Nlc3NmdWxseSBjb21wcmVzc2VkIGFuZCBzdG9yZWQgaW4gdGhlIHRyZWUsIHRoZXJlIGlzXFxuMTQ2NTpcXHRcXHQgKiBubyBmdXJ0aGVyIHBvc3NpYmlsaXR5IG9mIGZhaWx1cmUuIEdyYWIgcmVmcyB0byB0aGUgcG9vbCBhbmQgb2JqY2csXFxuMTQ2NjpcXHRcXHQgKiBjaGFyZ2UgenN3YXAgbWVtb3J5LCBhbmQgaW5jcmVtZW50IHpzd2FwX3N0b3JlZF9wYWdlcy5cXG4xNDY3OlxcdFxcdCAqIFRoZSBvcHBvc2l0ZSBhY3Rpb25zIHdpbGwgYmUgcGVyZm9ybWVkIGJ5IHpzd2FwX2VudHJ5X2ZyZWUoKVxcbjE0Njg6XFx0XFx0ICogd2hlbiB0aGUgZW50cnkgaXMgcmVtb3ZlZCBmcm9tIHRoZSB0cmVlLlxcbjE0Njk6XFx0XFx0ICovXFxuMTQ3MDpcXHRcXHR6c3dhcF9wb29sX2dldChwb29sKTtcXG4xNDcxOlxcdFxcdGlmIChvYmpjZykge1xcbjE0NzI6XFx0XFx0XFx0b2JqX2Nncm91cF9nZXQob2JqY2cpO1xcbjE0NzM6XFx0XFx0XFx0b2JqX2Nncm91cF9jaGFyZ2VfenN3YXAob2JqY2csIGVudHJ5LVxcdTAwM2VsZW5ndGgpO1xcbjE0NzQ6XFx0XFx0fVxcbjE0NzU6XFx0XFx0YXRvbWljX2xvbmdfaW5jKFxcdTAwMjZ6c3dhcF9zdG9yZWRfcGFnZXMpO1xcbjE0NzY6XFx0XFx0aWYgKGVudHJ5LVxcdTAwM2VsZW5ndGggPT0gUEFHRV9TSVpFKVxcbjE0Nzc6XFx0XFx0XFx0YXRvbWljX2xvbmdfaW5jKFxcdTAwMjZ6c3dhcF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXMpO1xcbjE0Nzg6XFx0XFxuMTQ3OTpcXHRcXHQvKlxcbjE0ODA6XFx0XFx0ICogV2UgZmluaXNoIGluaXRpYWxpemluZyB0aGUgZW50cnkgd2hpbGUgaXQncyBhbHJlYWR5IGluIHhhcnJheS5cXG4xNDgxOlxcdFxcdCAqIFRoaXMgaXMgc2FmZSBiZWNhdXNlOlxcbjE0ODI6XFx0XFx0ICpcXG4xNDgzOlxcdFxcdCAqIDEuIENvbmN1cnJlbnQgc3RvcmVzIGFuZCBpbnZhbGlkYXRpb25zIGFyZSBleGNsdWRlZCBieSBmb2xpbyBsb2NrLlxcbjE0ODQ6XFx0XFx0ICpcXG4xNDg1OlxcdFxcdCAqIDIuIFdyaXRlYmFjayBpcyBleGNsdWRlZCBieSB0aGUgZW50cnkgbm90IGJlaW5nIG9uIHRoZSBMUlUgeWV0LlxcbjE0ODY6XFx0XFx0ICogICAgVGhlIHB1Ymxpc2hpbmcgb3JkZXIgbWF0dGVycyB0byBwcmV2ZW50IHdyaXRlYmFjayBmcm9tIHNlZWluZ1xcbjE0ODc6XFx0XFx0ICogICAgYW4gaW5jb2hlcmVudCBlbnRyeS5cXG4xNDg4OlxcdFxcdCAqL1xcbjE0ODk6XFx0XFx0ZW50cnktXFx1MDAzZXN3cGVudHJ5ID0gcGFnZV9zd3BlbnRyeTtcXG4xNDkwOlxcdFxcdGVudHJ5LVxcdTAwM2VvYmpjZyA9IG9iamNnO1xcbjE0OTE6XFx0XFx0ZW50cnktXFx1MDAzZXJlZmVyZW5jZWQgPSB0cnVlO1xcbjE0OTI6XFx0XFx0aWYgKGVudHJ5LVxcdTAwM2VsZW5ndGgpIHtcXG4xNDkzOlxcdFxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZlbnRyeS1cXHUwMDNlbHJ1KTtcXG4xNDk0OlxcdFxcdFxcdHpzd2FwX2xydV9hZGQoZW50cnkpO1xcbjE0OTU6XFx0XFx0fVxcbjE0OTY6XFx0XFxuMTQ5NzpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4xNDk4OlxcdFxcbjE0OTk6XFx0c3RvcmVfZmFpbGVkOlxcbjE1MDA6XFx0XFx0enNfZnJlZShwb29sLVxcdTAwM2V6c19wb29sLCBlbnRyeS1cXHUwMDNlaGFuZGxlKTtcXG4xNTAxOlxcdGNvbXByZXNzX2ZhaWxlZDpcXG4xNTAyOlxcdFxcdHpzd2FwX2VudHJ5X2NhY2hlX2ZyZWUoZW50cnkpO1xcbjE1MDM6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjE1MDQ6XFx0fVxcbjE1MDU6XFx0XFxuMTUwNjpcXHRib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuMTUwNzpcXHR7XFxuMTUwODpcXHRcXHRsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbjE1MDk6XFx0XFx0c3dwX2VudHJ5X3Qgc3dwID0gZm9saW8tXFx1MDAzZXN3YXA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIwOjE5OjAwLjI1NDQ5ODQxNFoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTUyMTE3NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgWnN3YXAgUG9vbCBJbmRleCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSW4gdGhlIGB6c3dhcF9zdG9yZV9wYWdlYCBmdW5jdGlvbiwgYmVmb3JlIHRoaXMgcGF0Y2gsIHdlIHdlcmUgc2V0dGluZyB0aGUgYGVudHJ5LVx1MDAzZWhhbmRsZWAgYW5kIGBlbnRyeS1cdTAwM2VsZW5ndGhgIHdpdGhpbiBgenN3YXBfY29tcHJlc3NgLiBUaGVuLCB0aGUgYGVudHJ5LVx1MDAzZXBvb2xgIHBvaW50ZXIgd2FzIGFzc2lnbmVkICphZnRlciogdGhlIGB4YV9zdG9yZWAgY2FsbCwgc3BlY2lmaWNhbGx5IG9uIGxpbmUgMTQ1Ny4gVGhpcyBwYXRjaCBhbHRlcnMgdGhhdCBzZXF1ZW5jZS4gTm93LCB3ZSdyZSBzZXR0aW5nIGBlbnRyeS1cdTAwM2Vwb29sX2lkeGAgKHdoaWNoLCBpbXBvcnRhbnRseSwgaXMganVzdCBhIGB1OGAgbm93KSAqYmVmb3JlKiB0aGUgYHhhX3N0b3JlYC4gVGhlIG90aGVyIGZpZWxkcywgbGlrZSBgZW50cnktXHUwMDNlc3dwZW50cnlgLCBgZW50cnktXHUwMDNlb2JqY2dgLCBgZW50cnktXHUwMDNlcmVmZXJlbmNlZGAsIGFuZCBgZW50cnktXHUwMDNlbHJ1YCwgcmVtYWluIGluaXRpYWxpemVkIGFzIHRoZXkgd2VyZSBiZWZvcmUuIEFuZCBub3csIHRoZSBgenN3YXBfZW50cnlfcG9vbChlbnRyeSlgIGZ1bmN0aW9uIHVzZXMgYHhhX2xvYWQoXHUwMDI2enN3YXBfcG9vbHMsIGVudHJ5LVx1MDAzZXBvb2xfaWR4KWAgdG8gcmV0cmlldmUgdGhlIHBvb2wuXG5cblRoZSBwcmltYXJ5IGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgbWVtb3J5IHNhZmV0eS4gV2UgbmVlZCB0byBjb25maXJtIHRoYXQgbm8gdXNlci1zcGFjZSBkYXRhIGlzIGV4cG9zZWQgb3IgdGhhdCB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBpbmFkdmVydGVudGx5IHJlYWQuIERvZXMgenN3YXAgaXRzZWxmIGNvcHkgYW55dGhpbmcgdG8gdXNlciBzcGFjZT8gTm8sIGl0IGNvbXByZXNzZXMgYW5kIGRlY29tcHJlc3NlcyBzd2FwIHBhZ2VzICp3aXRoaW4qIGtlcm5lbCBtZW1vcnkuIER1cmluZyBzd2FwLWluLCBgenN3YXBfbG9hZGAgZGVjb21wcmVzc2VzIHRoZSBjb21wcmVzc2VkIGRhdGEgYmFjayBpbnRvIHRoZSBmb2xpby9wYWdlLiBUaGF0J3MgZ29vZC5cblxuVGhlIHN3aXRjaCBmcm9tIGEgZnVsbCBwb2ludGVyIHRvIGFuIGluZGV4IChgdTggcG9vbF9pZHhgKSBzaG91bGQgdHJhbnNsYXRlIHRvIGEgNy1ieXRlIHNhdmluZyBpbiB0aGUgYHN0cnVjdCB6c3dhcF9lbnRyeWAgc3RydWN0dXJlIChmcm9tIGVpdGhlciA0OCBvciA1NiBieXRlcywgZGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUpLiAgVGhhdCdzIGEgbmljZSBsaXR0bGUgb3B0aW1pemF0aW9uLiAgQ3J1Y2lhbGx5LCBgc3RydWN0IHpzd2FwX3Bvb2xgIGlzIGludGVybmFsIHRvIHRoZSBrZXJuZWwsIGFuZCBzbyBpcyBgc3RydWN0IHpzd2FwX2VudHJ5YC5cblxuTm93LCBsZXQncyBsb29rIGF0IGB6c3dhcF9wb29sX2NyZWF0ZWAuICBTcGVjaWZpY2FsbHkgYXQgdGhlIGFsbG9jYXRpb246XG5gYGBjXG5cdHJldCA9IHhhX2FsbG9jX2JoKFx1MDAyNnpzd2FwX3Bvb2xzLCBcdTAwMjZpZCwgcG9vbCxcblx0XHRcdCAgWEFfTElNSVQoWlNXQVBfRklSU1RfUE9PTF9JRCwgWlNXQVBfTUFYX1BPT0xfSUQpLFxuXHRcdFx0ICBHRlBfS0VSTkVMKTtcblx0aWYgKHJldCkge1xuLi4uXG5cdHBvb2wtXHUwMDNlaWR4ID0gaWQ7XG5gYGBcbkhlcmUsIGBwb29sYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Moc2l6ZW9mKCpwb29sKSwgR0ZQX0tFUk5FTCk7YC4gIFdlIGNhbiB2ZXJpZnkgdGhhdCBsaW5lIDMwNSBzcGVjaWZpY2FsbHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGluZGV4IGlzIGNvcnJlY3RseSBhc3NpZ25lZCBhdCBjcmVhdGlvbi4gVGhpcyBsb29rcyBzb2xpZCBpbiB0aGUgcHJvdmlkZWQgY29kZSBzbmlwcGV0LiBJJ2xsIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgY29kZSBhZ2FpbiBmb3IgYW55IGlzc3VlcyBhcm91bmQgaG93IHRoZSBwb29sIGluZGV4IGlzIGJlaW5nIHVzZWQsIGJ1dCBpdCBzZWVtcyBzb3VuZCBzbyBmYXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1NzgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMDoxOTowNC44MDY2MjAwODRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzNDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3pzd2FwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjk1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjk1OlxcdFxcdGludCByZXQsIGNwdTtcXG4gMjk2OlxcdFxcdHUzMiBpZDtcXG4gMjk3OlxcdFxcbiAyOTg6XFx0XFx0aWYgKCF6c3dhcF9oYXNfcG9vbCBcXHUwMDI2XFx1MDAyNiAhc3RyY21wKGNvbXByZXNzb3IsIFpTV0FQX1BBUkFNX1VOU0VUKSlcXG4gMjk5OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAzMDA6XFx0XFxuIDMwMTpcXHRcXHRwb29sID0ga3phbGxvY19vYmooKnBvb2wpO1xcbiAzMDI6XFx0XFx0aWYgKCFwb29sKVxcbiAzMDM6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDMwNDpcXHRcXG4gMzA1OlxcdFxcdC8qIHVuaXF1ZSBuYW1lIGZvciBlYWNoIHBvb2wgc3BlY2lmaWNhbGx5IHJlcXVpcmVkIGJ5IHpzbWFsbG9jICovXFxuIDMwNjpcXHRcXHRzbnByaW50ZihuYW1lLCAzOCwgXFxcInpzd2FwJXhcXFwiLCBhdG9taWNfaW5jX3JldHVybihcXHUwMDI2enN3YXBfcG9vbHNfY291bnQpKTtcXG4gMzA3OlxcdFxcdHBvb2wtXFx1MDAzZXpzX3Bvb2wgPSB6c19jcmVhdGVfcG9vbChuYW1lKTtcXG4gMzA4OlxcdFxcdGlmICghcG9vbC1cXHUwMDNlenNfcG9vbClcXG4gMzA5OlxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuIDMxMDpcXHRcXG4gMzExOlxcdFxcdHN0cnNjcHkocG9vbC1cXHUwMDNldGZtX25hbWUsIGNvbXByZXNzb3IsIHNpemVvZihwb29sLVxcdTAwM2V0Zm1fbmFtZSkpO1xcbiAzMTI6XFx0XFxuIDMxMzpcXHRcXHQvKiBNYW55IHRoaW5ncyByZWx5IG9uIHRoZSB6ZXJvLWluaXRpYWxpemF0aW9uLiAqL1xcbiAzMTQ6XFx0XFx0cG9vbC1cXHUwMDNlYWNvbXBfY3R4ID0gYWxsb2NfcGVyY3B1X2dmcCgqcG9vbC1cXHUwMDNlYWNvbXBfY3R4LFxcbiAzMTU6XFx0XFx0XFx0XFx0XFx0XFx0ICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xcbiAzMTY6XFx0XFx0aWYgKCFwb29sLVxcdTAwM2VhY29tcF9jdHgpIHtcXG4gMzE3OlxcdFxcdFxcdHByX2VycihcXFwicGVyY3B1IGFsbG9jIGZhaWxlZFxcXFxuXFxcIik7XFxuIDMxODpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbiAzMTk6XFx0XFx0fVxcbiAzMjA6XFx0XFxuIDMyMTpcXHRcXHQvKlxcbiAzMjI6XFx0XFx0ICogVGhpcyBpcyBzZXJpYWxpemVkIGFnYWluc3QgQ1BVIGhvdHBsdWcgb3BlcmF0aW9ucy4gSGVuY2UsIGNvcmVzXFxuIDMyMzpcXHRcXHQgKiBjYW5ub3QgYmUgb2ZmbGluZWQgdW50aWwgdGhpcyBmaW5pc2hlcy5cXG4gMzI0OlxcdFxcdCAqL1xcbiAzMjU6XFx0XFx0cmV0ID0gY3B1aHBfc3RhdGVfYWRkX2luc3RhbmNlKENQVUhQX01NX1pTV1BfUE9PTF9QUkVQQVJFLFxcbiAzMjY6XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZwb29sLVxcdTAwM2Vub2RlKTtcXG4gMzI3OlxcdFxcbiAzMjg6XFx0XFx0LypcXG4gMzI5OlxcdFxcdCAqIGNwdWhwX3N0YXRlX2FkZF9pbnN0YW5jZSgpIHdpbGwgbm90IGNsZWFudXAgb24gZmFpbHVyZSBzaW5jZVxcbiAzMzA6XFx0XFx0ICogd2UgZG9uJ3QgcmVnaXN0ZXIgYSBob3R1bnBsdWcgY2FsbGJhY2suXFxuIDMzMTpcXHRcXHQgKi9cXG4gMzMyOlxcdFxcdGlmIChyZXQpXFxuIDMzMzpcXHRcXHRcXHRnb3RvIGNwdWhwX2FkZF9mYWlsO1xcbiAzMzQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIwOjE5OjA0LjgwNjc2NTMxNFoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDcyNDc0NDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHpzd2FwX2VudHJ5IGFuZCB6c3dhcF9wb29sIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBvZiB6c3dhcCwgc3BlY2lmaWNhbGx5IGhvdyBgenN3YXBfZW50cnlgIGFuZCBgenN3YXBfcG9vbGAgYXJlIGhhbmRsZWQuIEkgc2VlIHRoYXQgdGhlIGBwb29sYCB2YXJpYWJsZSBpcyBpbml0aWFsaXplZCB1c2luZyBga3phbGxvY19vYmooKnBvb2wpYCwgd2hpY2gsIGFzIEkgZXhwZWN0LCBhbGxvY2F0ZXMgdGhlIG1lbW9yeSBhbmQgaW1wb3J0YW50bHksIHplcm9lcyBhbGwgdGhlIGZpZWxkcy4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgZW5zdXJpbmcgYSBjbGVhbiBzbGF0ZS4gVGhlbiwgSSBub3RpY2VkIHRoYXQgYGVudHJ5LVx1MDAzZXBvb2xfaWR4YCBpcyBleHBsaWNpdGx5IGFzc2lnbmVkIGEgdmFsdWUgd2l0aGluIGB6c3dhcF9zdG9yZV9wYWdlYC4gVGhpcyBpcyBrZXk7IEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgaXMgdGhlICpvbmx5KiBwbGFjZSBpdCdzIHNldCBvciBpZiB0aGVyZSBhcmUgb3RoZXIgYXNzaWdubWVudHMgdG8gdGhpcyBjcnVjaWFsIGluZGV4LiBUaGlzIGlzIHdoZXJlIHRoaW5ncyBjb3VsZCBnbyB3cm9uZywgc28gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIG90aGVyIHBvaW50cyB3aGVyZSB0aGVzZSBjcnVjaWFsIHN0cnVjdHVyZXMgYXJlIGNyZWF0ZWQgb3IgbW9kaWZpZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGNvZGUgZmxvdyBhbmQgbWVtb3J5IGlzIG1hbmFnZWQgY29uc2lzdGVudGx5IGFuZCBhcHByb3ByaWF0ZWx5LiBUaW1lIHRvIHVzZSBteSBmYXZvcml0ZSB0b29sLiBJJ2xsIG5lZWQgdG8gZG8gYSB0aG9yb3VnaCBncmVwIGZvciBgenN3YXBfZW50cnlgIGFjcm9zcyBgbW0venN3YXAuY2AgdG8gbG9vayBmb3IgYW55IG90aGVyIGluc3RhbmNlcy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgY29tcGxldGUgcGljdHVyZSwgZW5zdXJpbmcgSSBjYW4gY2F0Y2ggYW55IHBvdGVudGlhbCBpc3N1ZXMgb3IgaW5jb25zaXN0ZW5jaWVzIGluIGluaXRpYWxpemF0aW9uIG9yIG1vZGlmaWNhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyMDcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIwOjE5OjA3LjI3OTI0MzM3NloiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwMDQ4OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwienN3YXBfZW50cnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0venN3YXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS96c3dhcC5jPTE0MD1zdHJ1Y3QgY3J5cHRvX2Fjb21wX2N0eCB7XFxuLS1cXG5tbS96c3dhcC5jLTE1MC0gKiBUaGUgb25seSBjYXNlIHdoZXJlIGxydV9sb2NrIGlzIG5vdCBhY3F1aXJlZCB3aGlsZSBob2xkaW5nIHRyZWUubG9jayBpc1xcbm1tL3pzd2FwLmM6MTUxOiAqIHdoZW4gYSB6c3dhcF9lbnRyeSBpcyB0YWtlbiBvZmYgdGhlIGxydSBmb3Igd3JpdGViYWNrLCBpbiB0aGF0IGNhc2UgaXRcXG5tbS96c3dhcC5jLTE1Mi0gKiBuZWVkcyB0byBiZSB2ZXJpZmllZCB0aGF0IGl0J3Mgc3RpbGwgdmFsaWQgaW4gdGhlIHRyZWUuXFxuLS1cXG5tbS96c3dhcC5jPTE4Mj1zdGF0aWMgc3RydWN0IHNocmlua2VyICp6c3dhcF9zaHJpbmtlcjtcXG4tLVxcbm1tL3pzd2FwLmMtMTg0LS8qXFxubW0venN3YXAuYzoxODU6ICogc3RydWN0IHpzd2FwX2VudHJ5XFxubW0venN3YXAuYy0xODYtICpcXG4tLVxcbm1tL3pzd2FwLmMtMjAxLSAqL1xcbm1tL3pzd2FwLmM6MjAyOnN0cnVjdCB6c3dhcF9lbnRyeSB7XFxubW0venN3YXAuYy0yMDMtXFx0c3dwX2VudHJ5X3Qgc3dwZW50cnk7XFxuLS1cXG5tbS96c3dhcC5jLTIxNi0gKi9cXG5tbS96c3dhcC5jOjIxNzpzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX2VudHJ5X3Bvb2woc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcXG5tbS96c3dhcC5jLTIxOC17XFxuLS1cXG5tbS96c3dhcC5jPTYzNT1zdGF0aWMgaW50IHpzd2FwX2VuYWJsZWRfcGFyYW1fc2V0KGNvbnN0IGNoYXIgKnZhbCxcXG4tLVxcbm1tL3pzd2FwLmMtNjY3LVxcbm1tL3pzd2FwLmM6NjY4OnN0YXRpYyBpbmxpbmUgaW50IGVudHJ5X3RvX25pZChzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxcbm1tL3pzd2FwLmMtNjY5LXtcXG4tLVxcbm1tL3pzd2FwLmMtNjcyLVxcbm1tL3pzd2FwLmM6NjczOnN0YXRpYyB2b2lkIHpzd2FwX2xydV9hZGQoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcXG5tbS96c3dhcC5jLTY3NC17XFxuLS1cXG5tbS96c3dhcC5jLTY5NS1cXG5tbS96c3dhcC5jOjY5NjpzdGF0aWMgdm9pZCB6c3dhcF9scnVfZGVsKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXFxubW0venN3YXAuYy02OTcte1xcbi0tXFxubW0venN3YXAuYz03MzU9dm9pZCB6c3dhcF9tZW1jZ19vZmZsaW5lX2NsZWFudXAoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0venN3YXAuYy03NDktKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5tbS96c3dhcC5jOjc1MDpzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnpzd2FwX2VudHJ5X2NhY2hlO1xcbm1tL3pzd2FwLmMtNzUxLVxcbm1tL3pzd2FwLmM6NzUyOnN0YXRpYyBzdHJ1Y3QgenN3YXBfZW50cnkgKnpzd2FwX2VudHJ5X2NhY2hlX2FsbG9jKGdmcF90IGdmcCwgaW50IG5pZClcXG5tbS96c3dhcC5jLTc1My17XFxubW0venN3YXAuYzo3NTQ6XFx0c3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeTtcXG5tbS96c3dhcC5jOjc1NTpcXHRlbnRyeSA9IGttZW1fY2FjaGVfYWxsb2Nfbm9kZSh6c3dhcF9lbnRyeV9jYWNoZSwgZ2ZwLCBuaWQpO1xcbm1tL3pzd2FwLmMtNzU2LVxcdGlmICghZW50cnkpXFxuLS1cXG5tbS96c3dhcC5jLTc2MC1cXG5tbS96c3dhcC5jOjc2MTpzdGF0aWMgdm9pZCB6c3dhcF9lbnRyeV9jYWNoZV9mcmVlKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXFxubW0venN3YXAuYy03NjIte1xcbm1tL3pzd2FwLmM6NzYzOlxcdGttZW1fY2FjaGVfZnJlZSh6c3dhcF9lbnRyeV9jYWNoZSwgZW50cnkpO1xcbm1tL3pzd2FwLmMtNzY0LX1cXG4tLVxcbm1tL3pzd2FwLmMtNzY5LSAqL1xcbm1tL3pzd2FwLmM6NzcwOnN0YXRpYyB2b2lkIHpzd2FwX2VudHJ5X2ZyZWUoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcXG5tbS96c3dhcC5jLTc3MS17XFxubW0venN3YXAuYzo3NzI6XFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSB6c3dhcF9lbnRyeV9wb29sKGVudHJ5KTtcXG5tbS96c3dhcC5jLTc3My1cXG4tLVxcbm1tL3pzd2FwLmMtNzg0LVxcdFxcdGF0b21pY19sb25nX2RlYyhcXHUwMDI2enN3YXBfc3RvcmVkX2luY29tcHJlc3NpYmxlX3BhZ2VzKTtcXG5tbS96c3dhcC5jOjc4NTpcXHR6c3dhcF9lbnRyeV9jYWNoZV9mcmVlKGVudHJ5KTtcXG5tbS96c3dhcC5jLTc4Ni1cXHRhdG9taWNfbG9uZ19kZWMoXFx1MDAyNnpzd2FwX3N0b3JlZF9wYWdlcyk7XFxuLS1cXG5tbS96c3dhcC5jPTc5Mj1zdGF0aWMgaW50IHpzd2FwX2NwdV9jb21wX3ByZXBhcmUodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUpXFxuLS1cXG5tbS96c3dhcC5jLTg0OC1cXG5tbS96c3dhcC5jOjg0OTpzdGF0aWMgYm9vbCB6c3dhcF9jb21wcmVzcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG5tbS96c3dhcC5jLTg1MC1cXHRcXHRcXHQgICBzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbClcXG4tLVxcbm1tL3pzd2FwLmMtOTMyLVxcbm1tL3pzd2FwLmM6OTMzOnN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS96c3dhcC5jLTkzNC17XFxubW0venN3YXAuYzo5MzU6XFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSB6c3dhcF9lbnRyeV9wb29sKGVudHJ5KTtcXG5tbS96c3dhcC5jLTkzNi1cXHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgaW5wdXRbMl07IC8qIHpzbWFsbG9jIHJldHVybnMgYW4gU0cgbGlzdCAxLTIgZW50cmllcyAqL1xcbi0tXFxubW0venN3YXAuYy05OTgtICovXFxubW0venN3YXAuYzo5OTk6c3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG5tbS96c3dhcC5jLTEwMDAtXFx0XFx0XFx0XFx0IHN3cF9lbnRyeV90IHN3cGVudHJ5KVxcbi0tXFxubW0venN3YXAuYy0xMDU1LVxcbm1tL3pzd2FwLmM6MTA1NjpcXHR6c3dhcF9lbnRyeV9mcmVlKGVudHJ5KTtcXG5tbS96c3dhcC5jLTEwNTctXFxuLS1cXG5tbS96c3dhcC5jPTExMDI9c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X29uZSAqbCxcXG4tLVxcbm1tL3pzd2FwLmMtMTEwNC17XFxubW0venN3YXAuYzoxMTA1OlxcdHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkgPSBjb250YWluZXJfb2YoaXRlbSwgc3RydWN0IHpzd2FwX2VudHJ5LCBscnUpO1xcbm1tL3pzd2FwLmMtMTEwNi1cXHRib29sICplbmNvdW50ZXJlZF9wYWdlX2luX3N3YXBjYWNoZSA9IChib29sICopYXJnO1xcbi0tXFxubW0venN3YXAuYz0xNDIwPXN0YXRpYyBib29sIHpzd2FwX3N0b3JlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5tbS96c3dhcC5jLTE0MjQtXFx0c3dwX2VudHJ5X3QgcGFnZV9zd3BlbnRyeSA9IHBhZ2Vfc3dhcF9lbnRyeShwYWdlKTtcXG5tbS96c3dhcC5jOjE0MjU6XFx0c3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgKm9sZDtcXG5tbS96c3dhcC5jLTE0MjYtXFxubW0venN3YXAuYy0xNDI3LVxcdC8qIGFsbG9jYXRlIGVudHJ5ICovXFxubW0venN3YXAuYzoxNDI4OlxcdGVudHJ5ID0genN3YXBfZW50cnlfY2FjaGVfYWxsb2MoR0ZQX0tFUk5FTCwgcGFnZV90b19uaWQocGFnZSkpO1xcbm1tL3pzd2FwLmMtMTQyOS1cXHRpZiAoIWVudHJ5KSB7XFxuLS1cXG5tbS96c3dhcC5jLTE0NjAtXFx0aWYgKG9sZClcXG5tbS96c3dhcC5jOjE0NjE6XFx0XFx0enN3YXBfZW50cnlfZnJlZShvbGQpO1xcbm1tL3pzd2FwLmMtMTQ2Mi1cXG4tLVxcbm1tL3pzd2FwLmMtMTQ2Ni1cXHQgKiBjaGFyZ2UgenN3YXAgbWVtb3J5LCBhbmQgaW5jcmVtZW50IHpzd2FwX3N0b3JlZF9wYWdlcy5cXG5tbS96c3dhcC5jOjE0Njc6XFx0ICogVGhlIG9wcG9zaXRlIGFjdGlvbnMgd2lsbCBiZSBwZXJmb3JtZWQgYnkgenN3YXBfZW50cnlfZnJlZSgpXFxubW0venN3YXAuYy0xNDY4LVxcdCAqIHdoZW4gdGhlIGVudHJ5IGlzIHJlbW92ZWQgZnJvbSB0aGUgdHJlZS5cXG4tLVxcbm1tL3pzd2FwLmMtMTUwMS1jb21wcmVzc19mYWlsZWQ6XFxubW0venN3YXAuYzoxNTAyOlxcdHpzd2FwX2VudHJ5X2NhY2hlX2ZyZWUoZW50cnkpO1xcbm1tL3pzd2FwLmMtMTUwMy1cXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5tbS96c3dhcC5jPTE1MDY9Ym9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0venN3YXAuYy0xNTc3LVxcdFxcdHBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3ApO1xcbm1tL3pzd2FwLmM6MTU3ODpcXHRcXHRzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5O1xcbm1tL3pzd2FwLmMtMTU3OS1cXHRcXHRzdHJ1Y3QgeGFycmF5ICp0cmVlO1xcbi0tXFxubW0venN3YXAuYy0xNTg0LVxcdFxcdFxcdGlmIChlbnRyeSlcXG5tbS96c3dhcC5jOjE1ODU6XFx0XFx0XFx0XFx0enN3YXBfZW50cnlfZnJlZShlbnRyeSk7XFxubW0venN3YXAuYy0xNTg2LVxcdFxcdH1cXG4tLVxcbm1tL3pzd2FwLmM9MTYxMj1pbnQgenN3YXBfbG9hZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0venN3YXAuYy0xNjE2LVxcdHN0cnVjdCB4YXJyYXkgKnRyZWUgPSBzd2FwX3pzd2FwX3RyZWUoc3dwKTtcXG5tbS96c3dhcC5jOjE2MTc6XFx0c3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeTtcXG5tbS96c3dhcC5jLTE2MTgtXFxuLS1cXG5tbS96c3dhcC5jLTE2NTgtXFx0eGFfZXJhc2UodHJlZSwgb2Zmc2V0KTtcXG5tbS96c3dhcC5jOjE2NTk6XFx0enN3YXBfZW50cnlfZnJlZShlbnRyeSk7XFxubW0venN3YXAuYy0xNjYwLVxcbi0tXFxubW0venN3YXAuYz0xNjY1PXZvaWQgenN3YXBfaW52YWxpZGF0ZShzd3BfZW50cnlfdCBzd3ApXFxuLS1cXG5tbS96c3dhcC5jLTE2NjgtXFx0c3RydWN0IHhhcnJheSAqdHJlZSA9IHN3YXBfenN3YXBfdHJlZShzd3ApO1xcbm1tL3pzd2FwLmM6MTY2OTpcXHRzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5O1xcbm1tL3pzd2FwLmMtMTY3MC1cXG4tLVxcbm1tL3pzd2FwLmMtMTY3NS1cXHRpZiAoZW50cnkpXFxubW0venN3YXAuYzoxNjc2OlxcdFxcdHpzd2FwX2VudHJ5X2ZyZWUoZW50cnkpO1xcbm1tL3pzd2FwLmMtMTY3Ny19XFxuLS1cXG5tbS96c3dhcC5jPTE3ODk9c3RhdGljIGludCB6c3dhcF9zZXR1cCh2b2lkKVxcbi0tXFxubW0venN3YXAuYy0xNzkzLVxcbm1tL3pzd2FwLmM6MTc5NDpcXHR6c3dhcF9lbnRyeV9jYWNoZSA9IEtNRU1fQ0FDSEUoenN3YXBfZW50cnksIDApO1xcbm1tL3pzd2FwLmM6MTc5NTpcXHRpZiAoIXpzd2FwX2VudHJ5X2NhY2hlKSB7XFxubW0venN3YXAuYy0xNzk2LVxcdFxcdHByX2VycihcXFwiZW50cnkgY2FjaGUgY3JlYXRpb24gZmFpbGVkXFxcXG5cXFwiKTtcXG4tLVxcbm1tL3pzd2FwLmMtMTg0My1ocF9mYWlsOlxcbm1tL3pzd2FwLmM6MTg0NDpcXHRrbWVtX2NhY2hlX2Rlc3Ryb3koenN3YXBfZW50cnlfY2FjaGUpO1xcbm1tL3pzd2FwLmMtMTg0NS1jYWNoZV9mYWlsOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMDoxOTowNy4zMjcyNTQzODZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg5OTU4NzkxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQ2hlY2tpbmcgTXkgQXNzdW1wdGlvbnMqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhpcyBvcHRpbWl6YXRpb24sIEkgbmVlZCB0byBtYWtlIHN1cmUgYSBmdW5kYW1lbnRhbCBjb25maWd1cmF0aW9uIGlzIHNldCBjb3JyZWN0bHkuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgdmVyaWZ5IHRoZSBjdXJyZW50IHNldHRpbmcgZm9yIGB6c3dhcF9jb21wcmVzc2AuIFRoaXMgaXMgYSBwcmV0dHkgYmFzaWMgYnV0IGNydWNpYWwgcGFyYW1ldGVyLCBhbmQgaXQgY2FuIHNhdmUgbWUgYSBsb3Qgb2YgaGVhZGFjaGUgZG93biB0aGUgbGluZSBpZiBpdCdzIHNldCBwcm9wZXJseSBmcm9tIHRoZSBnZXQtZ28uIE5vIHBvaW50IGluIHRyb3VibGVzaG9vdGluZyBjb21wbGV4IGludGVyYWN0aW9ucyBpZiB0aGUgYmFzaWNzIGFyZW4ndCBpcm9uZWQgb3V0LiBKdXN0IGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIGVuc3VyZSB0aGUgZm91bmRhdGlvbnMgYXJlIHNvbGlkIGJlZm9yZSBwcm9jZWVkaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDA4NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIwOjE5OjA5LjIyNjg0NTEzN1oiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTA2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0venN3YXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NDgsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NDg6XFx0XFxuIDg0OTpcXHRzdGF0aWMgYm9vbCB6c3dhcF9jb21wcmVzcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG4gODUwOlxcdFxcdFxcdFxcdCAgIHN0cnVjdCB6c3dhcF9wb29sICpwb29sKVxcbiA4NTE6XFx0e1xcbiA4NTI6XFx0XFx0c3RydWN0IGNyeXB0b19hY29tcF9jdHggKmFjb21wX2N0eDtcXG4gODUzOlxcdFxcdHN0cnVjdCBzY2F0dGVybGlzdCBpbnB1dCwgb3V0cHV0O1xcbiA4NTQ6XFx0XFx0aW50IGNvbXBfcmV0ID0gMCwgYWxsb2NfcmV0ID0gMDtcXG4gODU1OlxcdFxcdHVuc2lnbmVkIGludCBkbGVuID0gUEFHRV9TSVpFO1xcbiA4NTY6XFx0XFx0dW5zaWduZWQgbG9uZyBoYW5kbGU7XFxuIDg1NzpcXHRcXHRnZnBfdCBnZnA7XFxuIDg1ODpcXHRcXHR1OCAqZHN0O1xcbiA4NTk6XFx0XFx0Ym9vbCBtYXBwZWQgPSBmYWxzZTtcXG4gODYwOlxcdFxcbiA4NjE6XFx0XFx0YWNvbXBfY3R4ID0gcmF3X2NwdV9wdHIocG9vbC1cXHUwMDNlYWNvbXBfY3R4KTtcXG4gODYyOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmFjb21wX2N0eC1cXHUwMDNlbXV0ZXgpO1xcbiA4NjM6XFx0XFxuIDg2NDpcXHRcXHRkc3QgPSBhY29tcF9jdHgtXFx1MDAzZWJ1ZmZlcjtcXG4gODY1OlxcdFxcdHNnX2luaXRfdGFibGUoXFx1MDAyNmlucHV0LCAxKTtcXG4gODY2OlxcdFxcdHNnX3NldF9wYWdlKFxcdTAwMjZpbnB1dCwgcGFnZSwgUEFHRV9TSVpFLCAwKTtcXG4gODY3OlxcdFxcbiA4Njg6XFx0XFx0c2dfaW5pdF9vbmUoXFx1MDAyNm91dHB1dCwgZHN0LCBQQUdFX1NJWkUpO1xcbiA4Njk6XFx0XFx0YWNvbXBfcmVxdWVzdF9zZXRfcGFyYW1zKGFjb21wX2N0eC1cXHUwMDNlcmVxLCBcXHUwMDI2aW5wdXQsIFxcdTAwMjZvdXRwdXQsIFBBR0VfU0laRSwgZGxlbik7XFxuIDg3MDpcXHRcXG4gODcxOlxcdFxcdC8qXFxuIDg3MjpcXHRcXHQgKiBpdCBtYXliZSBsb29rcyBhIGxpdHRsZSBiaXQgc2lsbHkgdGhhdCB3ZSBzZW5kIGFuIGFzeW5jaHJvbm91cyByZXF1ZXN0LFxcbiA4NzM6XFx0XFx0ICogdGhlbiB3YWl0IGZvciBpdHMgY29tcGxldGlvbiBzeW5jaHJvbm91c2x5LiBUaGlzIG1ha2VzIHRoZSBwcm9jZXNzIGxvb2tcXG4gODc0OlxcdFxcdCAqIHN5bmNocm9ub3VzIGluIGZhY3QuXFxuIDg3NTpcXHRcXHQgKiBUaGVvcmV0aWNhbGx5LCBhY29tcCBzdXBwb3J0cyB1c2VycyBzZW5kIG11bHRpcGxlIGFjb21wIHJlcXVlc3RzIGluIG9uZVxcbiA4NzY6XFx0XFx0ICogYWNvbXAgaW5zdGFuY2UsIHRoZW4gZ2V0IHRob3NlIHJlcXVlc3RzIGRvbmUgc2ltdWx0YW5lb3VzbHkuIGJ1dCBpbiB0aGlzXFxuIDg3NzpcXHRcXHQgKiBjYXNlLCB6c3dhcCBhY3R1YWxseSBkb2VzIHN0b3JlIGFuZCBsb2FkIHBhZ2UgYnkgcGFnZSwgdGhlcmUgaXMgbm9cXG4gODc4OlxcdFxcdCAqIGV4aXN0aW5nIG1ldGhvZCB0byBzZW5kIHRoZSBzZWNvbmQgcGFnZSBiZWZvcmUgdGhlIGZpcnN0IHBhZ2UgaXMgZG9uZVxcbiA4Nzk6XFx0XFx0ICogaW4gb25lIHRocmVhZCBkb2luZyB6c3dhcC5cXG4gODgwOlxcdFxcdCAqIGJ1dCBpbiBkaWZmZXJlbnQgdGhyZWFkcyBydW5uaW5nIG9uIGRpZmZlcmVudCBjcHUsIHdlIGhhdmUgZGlmZmVyZW50XFxuIDg4MTpcXHRcXHQgKiBhY29tcCBpbnN0YW5jZSwgc28gbXVsdGlwbGUgdGhyZWFkcyBjYW4gZG8gKGRlKWNvbXByZXNzaW9uIGluIHBhcmFsbGVsLlxcbiA4ODI6XFx0XFx0ICovXFxuIDg4MzpcXHRcXHRjb21wX3JldCA9IGNyeXB0b193YWl0X3JlcShjcnlwdG9fYWNvbXBfY29tcHJlc3MoYWNvbXBfY3R4LVxcdTAwM2VyZXEpLCBcXHUwMDI2YWNvbXBfY3R4LVxcdTAwM2V3YWl0KTtcXG4gODg0OlxcdFxcdGRsZW4gPSBhY29tcF9jdHgtXFx1MDAzZXJlcS1cXHUwMDNlZGxlbjtcXG4gODg1OlxcdFxcbiA4ODY6XFx0XFx0LypcXG4gODg3OlxcdFxcdCAqIElmIGEgcGFnZSBjYW5ub3QgYmUgY29tcHJlc3NlZCBpbnRvIGEgc2l6ZSBzbWFsbGVyIHRoYW4gUEFHRV9TSVpFLFxcbiA4ODg6XFx0XFx0ICogc2F2ZSB0aGUgY29udGVudCBhcyBpcyB3aXRob3V0IGEgY29tcHJlc3Npb24sIHRvIGtlZXAgdGhlIExSVSBvcmRlclxcbiA4ODk6XFx0XFx0ICogb2Ygd3JpdGViYWNrcy4gIElmIHdyaXRlYmFjayBpcyBkaXNhYmxlZCwgcmVqZWN0IHRoZSBwYWdlIHNpbmNlIGl0XFxuIDg5MDpcXHRcXHQgKiBvbmx5IGFkZHMgbWV0YWRhdGEgb3ZlcmhlYWQuICBzd2FwX3dyaXRlb3V0KCkgd2lsbCBwdXQgdGhlIHBhZ2UgYmFja1xcbiA4OTE6XFx0XFx0ICogdG8gdGhlIGFjdGl2ZSBMUlUgbGlzdCBpbiB0aGUgY2FzZS5cXG4gODkyOlxcdFxcdCAqL1xcbiA4OTM6XFx0XFx0aWYgKGNvbXBfcmV0IHx8ICFkbGVuIHx8IGRsZW4gXFx1MDAzZT0gUEFHRV9TSVpFKSB7XFxuIDg5NDpcXHRcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIDg5NTpcXHRcXHRcXHRpZiAoIW1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoXFxuIDg5NjpcXHRcXHRcXHRcXHRcXHRcXHRmb2xpb19tZW1jZyhwYWdlX2ZvbGlvKHBhZ2UpKSkpIHtcXG4gODk3OlxcdFxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMDoxOTowOS4yMjcxOTg5MTdaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTAyMjI3NzQ1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50OiBOZWVkc0tNU0FOID0gZmFsc2UqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJ20gc2VlaW5nLCBgenN3YXBfY29tcHJlc3NgIHNldHMgdGhlIGBoYW5kbGVgIGFuZCBgbGVuZ3RoYCBvZiB0aGUgYGVudHJ5YC4gVGhlbiwgYHpzd2FwX3N0b3JlX3BhZ2VgIHBvcHVsYXRlcyB0aGUgcmVzdCBvZiB0aGUgYHpzd2FwX2VudHJ5YCBmaWVsZHM6IGBwb29sX2lkeGAsIGBzd3BlbnRyeWAsIGBvYmpjZ2AsIGByZWZlcmVuY2VkYCwgYW5kIGluaXRpYWxpemVzIHRoZSBgbHJ1YCBsaXN0IGhlYWQgYmVmb3JlIGFkZGluZyBpdCB0byB0aGUgTFJVLiBUaGlzIGlzIGFsbCBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4genN3YXAuIENydWNpYWxseSwgYWxsIHRoZSBmaWVsZHMgd2l0aGluIGBzdHJ1Y3QgenN3YXBfZW50cnlgIGFyZSAqZXhwbGljaXRseSogaW5pdGlhbGl6ZWQgYmVmb3JlIGFueSByZWFkIG9wZXJhdGlvbnMuIE5vdGhpbmcgaXMgYmVpbmcgbGVha2VkIHRvIHVzZXJzcGFjZS5cblxuVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBpbnZvbHZlIGludGVybmFsIGNoYW5nZXM6IHJlcGxhY2luZyBhIGxpbmtlZCBsaXN0IG9mIHBvb2xzIHdpdGggYW4gWEFycmF5IGFuZCBhIHBvb2wgaW5kZXgsIGFuZCB0d2Vha2luZyB0aGUgUkNVIGFuZCBsb2NraW5nIG1lY2hhbmlzbXMgYXJvdW5kIGB6c3dhcF9wb29sYC5cblxuTm93LCBjb25zaWRlcmluZyBwb3RlbnRpYWwgYnVncywgdGhlIHByaW1hcnkgcmlza3MgYXBwZWFyIHRvIGJlIGNvbmN1cnJlbmN5IGlzc3VlcyAoUkNVLCBsb2NraW5nLCByZWZjb3VudGluZyksIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIHNjZW5hcmlvcyBpbiB0aGUgcG9vbCBvciBlbnRyeSBsaWZlY3ljbGUsIGFuZCBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciB1bmV4cGVjdGVkIHJldHVybnMgZnJvbSBgeGFfbG9hZGAuIFRoZXNlIGFyZSBwcmVjaXNlbHkgdGhlIHR5cGVzIG9mIGlzc3VlcyB0aGF0IEtBU0FOLCBMT0NLREVQLCBhbmQgZ2VuZXJhbCBrZXJuZWwgYnVnIGRldGVjdG9ycyBhcmUgZGVzaWduZWQgdG8gY2F0Y2guXG5cblRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgbm8gc3RydWN0dXJlIGxlYWtzIHRvIHVzZXJzcGFjZSwgYW5kIG5vIGNvbmNlcm5zIGFyb3VuZCB1bmluaXRpYWxpemVkIHBhZGRpbmcuXG5cbkknbSBkb3VibGUtY2hlY2tpbmcgYWdhaW5zdCB0aGUgS01TQU4gY3JpdGVyaWEsIGFuZCBpdCBhbGwgY2hlY2tzIG91dDpcblxuMS4gIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2Ugd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcHJvYmxlbWF0aWMuXG4yLiAgVGhlcmUncyBubyBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcy5cbjMuICBUaGUgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gb2YgZGF0YSBzdHJ1Y3R1cmVzIGFyZSB0aG9yb3VnaCwgcHJldmVudGluZyB1bmluaXRpYWxpemVkIGZpZWxkcyBmcm9tIGJlaW5nIHJlYWQgbGF0ZXIuXG40LiAgTm8gYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW50cm9kdWNlcyBhbnkgcmlzayBvZiBhY2Nlc3NpbmcgdW5pbml0aWFsaXplZCBieXRlcyBpbiBleGlzdGluZyBidWZmZXJzLlxuXG5UaGlzIGlzIGFsbCBjb25zaXN0ZW50IHdpdGggYE5lZWRzS01TQU49ZmFsc2VgLiBMZXQncyBmb3JtdWxhdGUgdGhlIHJlc3BvbnNlIGFuZCBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTM5LCJPdXRwdXRUb2tlbnMiOjE4MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIwOjE5OjE0LjI0OTQ3OTM2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBpbnRlcm5hbCB6c3dhcCBwb29sIGFuZCBlbnRyeSBtYW5hZ2VtZW50IGluIG1tL3pzd2FwLmMgYnkgcmVwbGFjaW5nIGEgbGlua2VkIGxpc3Qgb2YgcG9vbHMgd2l0aCBhbiBYQXJyYXkgKGluZGV4ZWQgYnkgYSB1OCBwb29sX2lkeCkgYW5kIHN3aXRjaGluZyBwb29sIGxvb2t1cHMgdG8gdXNlIHhhX2xvYWQoKS4gQWxsIGFsbG9jYXRlZCBzdHJ1Y3R1cmVzICh6c3dhcF9wb29sIGFsbG9jYXRlZCB3aXRoIGt6YWxsb2Nfb2JqLCBhbmQgenN3YXBfZW50cnkgd2hvc2UgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluIHpzd2FwX3N0b3JlX3BhZ2UpIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBOb25lIG9mIHRoZSBtb2RpZmllZCBkYXRhIHN0cnVjdHVyZXMgb3IgZmllbGRzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3Mgd291bGQgaW52b2x2ZSBjb25jdXJyZW5jeSwgbGlmZXRpbWUvcmVmY291bnRpbmcsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzIHJhdGhlciB0aGFuIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGludGVybmFsIHpzd2FwIHBvb2wgYW5kIGVudHJ5IG1hbmFnZW1lbnQgaW4gbW0venN3YXAuYyBieSByZXBsYWNpbmcgYSBsaW5rZWQgbGlzdCBvZiBwb29scyB3aXRoIGFuIFhBcnJheSAoaW5kZXhlZCBieSBhIHU4IHBvb2xfaWR4KSBhbmQgc3dpdGNoaW5nIHBvb2wgbG9va3VwcyB0byB1c2UgeGFfbG9hZCgpLiBBbGwgYWxsb2NhdGVkIHN0cnVjdHVyZXMgKHpzd2FwX3Bvb2wgYWxsb2NhdGVkIHdpdGgga3phbGxvY19vYmosIGFuZCB6c3dhcF9lbnRyeSB3aG9zZSBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgaW4genN3YXBfc3RvcmVfcGFnZSkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIE5vbmUgb2YgdGhlIG1vZGlmaWVkIGRhdGEgc3RydWN0dXJlcyBvciBmaWVsZHMgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3MgYXJlIGludHJvZHVjZWQuIEFueSBwb3RlbnRpYWwgYnVncyB3b3VsZCBpbnZvbHZlIGNvbmN1cnJlbmN5LCBsaWZldGltZS9yZWZjb3VudGluZywgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMgcmF0aGVyIHRoYW4gS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrhjd2[1] Phase: Succeeded StartedAt: 2026-09-06 20:19:25 +0000 UTC FinishedAt: 2026-09-06 20:19:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhjd2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-06 20:19:25 +0000 UTC FinishedAt: 2026-09-06 20:19:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhjd2[2] Phase: Succeeded StartedAt: 2026-09-06 20:19:25 +0000 UTC FinishedAt: 2026-09-07 00:05:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhjd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_store_page","zswap_decompress","zswap_entry_free","zswap_pool_create","zswap_pool_find_get","__zswap_pool_empty","__zswap_pool_release","zswap_compressor_param_set","zswap_total_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"93ffdc1f-3681-4445-823e-9a0d77965c44","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-06 20:19:25 +0000 UTC FinishedAt: 2026-09-07 00:05:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_store_page","zswap_decompress","zswap_entry_free","zswap_pool_create","zswap_pool_find_get","__zswap_pool_empty","__zswap_pool_release","zswap_compressor_param_set","zswap_total_pages"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"93ffdc1f-3681-4445-823e-9a0d77965c44","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowrhjd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_store_page","zswap_decompress","zswap_entry_free","zswap_pool_create","zswap_pool_find_get","__zswap_pool_empty","__zswap_pool_release","zswap_compressor_param_set","zswap_total_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"93ffdc1f-3681-4445-823e-9a0d77965c44","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-06 20:19:25 +0000 UTC FinishedAt: 2026-09-06 20:19:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhjd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_store_page","zswap_decompress","zswap_entry_free","zswap_pool_create","zswap_pool_find_get","__zswap_pool_empty","__zswap_pool_release","zswap_compressor_param_set","zswap_total_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"93ffdc1f-3681-4445-823e-9a0d77965c44","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-06 20:19:25 +0000 UTC FinishedAt: 2026-09-06 20:19:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowrhjd2/series-workflowrhjd2-convert-artifact-3357547362/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrhjd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_store_page","zswap_decompress","zswap_entry_free","zswap_pool_create","zswap_pool_find_get","__zswap_pool_empty","__zswap_pool_release","zswap_compressor_param_set","zswap_total_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"93ffdc1f-3681-4445-823e-9a0d77965c44","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-06 20:19:35 +0000 UTC FinishedAt: 2026-09-06 20:36:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhjd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_store_page","zswap_decompress","zswap_entry_free","zswap_pool_create","zswap_pool_find_get","__zswap_pool_empty","__zswap_pool_release","zswap_compressor_param_set","zswap_total_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"93ffdc1f-3681-4445-823e-9a0d77965c44","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-06 20:19:35 +0000 UTC FinishedAt: 2026-09-06 20:36:39 +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:*1203b578-cea1-48f0-ac7d-cbcd7e6b60b4,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-workflowrhjd2/series-workflowrhjd2-convert-artifact-3357547362/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": "d1112625-e38b-4881-8c5b-510027e90a7a", "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-workflowrhjd2/series-workflowrhjd2-build-action-3616240416/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrhjd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_store_page","zswap_decompress","zswap_entry_free","zswap_pool_create","zswap_pool_find_get","__zswap_pool_empty","__zswap_pool_release","zswap_compressor_param_set","zswap_total_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"93ffdc1f-3681-4445-823e-9a0d77965c44","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-06 20:19:35 +0000 UTC FinishedAt: 2026-09-06 20:36:29 +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:*1203b578-cea1-48f0-ac7d-cbcd7e6b60b4,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-workflowrhjd2/series-workflowrhjd2-convert-artifact-3357547362/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": "d1112625-e38b-4881-8c5b-510027e90a7a", "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-workflowrhjd2/series-workflowrhjd2-build-action-3616240416/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrhjd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_store_page","zswap_decompress","zswap_entry_free","zswap_pool_create","zswap_pool_find_get","__zswap_pool_empty","__zswap_pool_release","zswap_compressor_param_set","zswap_total_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"93ffdc1f-3681-4445-823e-9a0d77965c44","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-06 20:36:39 +0000 UTC FinishedAt: 2026-09-06 20:36:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhjd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_store_page","zswap_decompress","zswap_entry_free","zswap_pool_create","zswap_pool_find_get","__zswap_pool_empty","__zswap_pool_release","zswap_compressor_param_set","zswap_total_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"93ffdc1f-3681-4445-823e-9a0d77965c44","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-06 20:36:39 +0000 UTC FinishedAt: 2026-09-06 20:36:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhjd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_store_page","zswap_decompress","zswap_entry_free","zswap_pool_create","zswap_pool_find_get","__zswap_pool_empty","__zswap_pool_release","zswap_compressor_param_set","zswap_total_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"93ffdc1f-3681-4445-823e-9a0d77965c44","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-06 20:36:39 +0000 UTC FinishedAt: 2026-09-06 20:36:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhjd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_store_page","zswap_decompress","zswap_entry_free","zswap_pool_create","zswap_pool_find_get","__zswap_pool_empty","__zswap_pool_release","zswap_compressor_param_set","zswap_total_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"93ffdc1f-3681-4445-823e-9a0d77965c44","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-06 20:36:39 +0000 UTC FinishedAt: 2026-09-06 20:36:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"93ffdc1f-3681-4445-823e-9a0d77965c44","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowrhjd2/series-workflowrhjd2-convert-artifact-128223677/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrhjd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_store_page","zswap_decompress","zswap_entry_free","zswap_pool_create","zswap_pool_find_get","__zswap_pool_empty","__zswap_pool_release","zswap_compressor_param_set","zswap_total_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"93ffdc1f-3681-4445-823e-9a0d77965c44","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-06 20:36:49 +0000 UTC FinishedAt: 2026-09-06 20:38:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhjd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_store_page","zswap_decompress","zswap_entry_free","zswap_pool_create","zswap_pool_find_get","__zswap_pool_empty","__zswap_pool_release","zswap_compressor_param_set","zswap_total_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"93ffdc1f-3681-4445-823e-9a0d77965c44","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-06 20:36:49 +0000 UTC FinishedAt: 2026-09-06 20:38:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d1112625-e38b-4881-8c5b-510027e90a7a,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-workflowrhjd2/series-workflowrhjd2-build-action-3616240416/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-workflowrhjd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_store_page","zswap_decompress","zswap_entry_free","zswap_pool_create","zswap_pool_find_get","__zswap_pool_empty","__zswap_pool_release","zswap_compressor_param_set","zswap_total_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"93ffdc1f-3681-4445-823e-9a0d77965c44","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-06 20:38:42 +0000 UTC FinishedAt: 2026-09-06 20:38:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhjd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_store_page","zswap_decompress","zswap_entry_free","zswap_pool_create","zswap_pool_find_get","__zswap_pool_empty","__zswap_pool_release","zswap_compressor_param_set","zswap_total_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"93ffdc1f-3681-4445-823e-9a0d77965c44","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-06 20:38:42 +0000 UTC FinishedAt: 2026-09-06 20:38:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhjd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_store_page","zswap_decompress","zswap_entry_free","zswap_pool_create","zswap_pool_find_get","__zswap_pool_empty","__zswap_pool_release","zswap_compressor_param_set","zswap_total_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"93ffdc1f-3681-4445-823e-9a0d77965c44","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-06 20:38:42 +0000 UTC FinishedAt: 2026-09-06 20:59:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhjd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_store_page","zswap_decompress","zswap_entry_free","zswap_pool_create","zswap_pool_find_get","__zswap_pool_empty","__zswap_pool_release","zswap_compressor_param_set","zswap_total_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"93ffdc1f-3681-4445-823e-9a0d77965c44","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-06 20:38:42 +0000 UTC FinishedAt: 2026-09-06 20:59:04 +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:*1203b578-cea1-48f0-ac7d-cbcd7e6b60b4,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-workflowrhjd2/series-workflowrhjd2-convert-artifact-128223677/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": "cfde7fd6-4b9e-47a8-bed3-9f0b1eb6b8b5", "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-workflowrhjd2/series-workflowrhjd2-build-action-1551051033/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrhjd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_store_page","zswap_decompress","zswap_entry_free","zswap_pool_create","zswap_pool_find_get","__zswap_pool_empty","__zswap_pool_release","zswap_compressor_param_set","zswap_total_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"93ffdc1f-3681-4445-823e-9a0d77965c44","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-06 20:38:42 +0000 UTC FinishedAt: 2026-09-06 20:58:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*1203b578-cea1-48f0-ac7d-cbcd7e6b60b4,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-workflowrhjd2/series-workflowrhjd2-convert-artifact-128223677/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": "cfde7fd6-4b9e-47a8-bed3-9f0b1eb6b8b5", "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-workflowrhjd2/series-workflowrhjd2-build-action-1551051033/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrhjd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_store_page","zswap_decompress","zswap_entry_free","zswap_pool_create","zswap_pool_find_get","__zswap_pool_empty","__zswap_pool_release","zswap_compressor_param_set","zswap_total_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"93ffdc1f-3681-4445-823e-9a0d77965c44","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-06 20:59:04 +0000 UTC FinishedAt: 2026-09-06 20:59:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhjd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_store_page","zswap_decompress","zswap_entry_free","zswap_pool_create","zswap_pool_find_get","__zswap_pool_empty","__zswap_pool_release","zswap_compressor_param_set","zswap_total_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"93ffdc1f-3681-4445-823e-9a0d77965c44","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-06 20:59:04 +0000 UTC FinishedAt: 2026-09-06 20:59:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhjd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_store_page","zswap_decompress","zswap_entry_free","zswap_pool_create","zswap_pool_find_get","__zswap_pool_empty","__zswap_pool_release","zswap_compressor_param_set","zswap_total_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"93ffdc1f-3681-4445-823e-9a0d77965c44","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-06 20:59:04 +0000 UTC FinishedAt: 2026-09-06 21:01:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhjd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_store_page","zswap_decompress","zswap_entry_free","zswap_pool_create","zswap_pool_find_get","__zswap_pool_empty","__zswap_pool_release","zswap_compressor_param_set","zswap_total_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"93ffdc1f-3681-4445-823e-9a0d77965c44","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-06 20:59:04 +0000 UTC FinishedAt: 2026-09-06 21:01:15 +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:*cfde7fd6-4b9e-47a8-bed3-9f0b1eb6b8b5,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-workflowrhjd2/series-workflowrhjd2-build-action-1551051033/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-workflowrhjd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_store_page","zswap_decompress","zswap_entry_free","zswap_pool_create","zswap_pool_find_get","__zswap_pool_empty","__zswap_pool_release","zswap_compressor_param_set","zswap_total_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"93ffdc1f-3681-4445-823e-9a0d77965c44","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-06 21:01:25 +0000 UTC FinishedAt: 2026-09-07 00:05:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhjd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_store_page","zswap_decompress","zswap_entry_free","zswap_pool_create","zswap_pool_find_get","__zswap_pool_empty","__zswap_pool_release","zswap_compressor_param_set","zswap_total_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"93ffdc1f-3681-4445-823e-9a0d77965c44","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-06 21:01:25 +0000 UTC FinishedAt: 2026-09-07 00:05:28 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_store_page","zswap_decompress","zswap_entry_free","zswap_pool_create","zswap_pool_find_get","__zswap_pool_empty","__zswap_pool_release","zswap_compressor_param_set","zswap_total_pages"],"skip_cover_check":true},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:*d1112625-e38b-4881-8c5b-510027e90a7a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cfde7fd6-4b9e-47a8-bed3-9f0b1eb6b8b5,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-workflowrhjd2/series-workflowrhjd2-build-action-3616240416/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-workflowrhjd2/series-workflowrhjd2-build-action-1551051033/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowrhjd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_store_page","zswap_decompress","zswap_entry_free","zswap_pool_create","zswap_pool_find_get","__zswap_pool_empty","__zswap_pool_release","zswap_compressor_param_set","zswap_total_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"93ffdc1f-3681-4445-823e-9a0d77965c44","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-06 21:01:25 +0000 UTC FinishedAt: 2026-09-06 21:01:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhjd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_store_page","zswap_decompress","zswap_entry_free","zswap_pool_create","zswap_pool_find_get","__zswap_pool_empty","__zswap_pool_release","zswap_compressor_param_set","zswap_total_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"93ffdc1f-3681-4445-823e-9a0d77965c44","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-06 21:01:25 +0000 UTC FinishedAt: 2026-09-06 21:01:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_store_page","zswap_decompress","zswap_entry_free","zswap_pool_create","zswap_pool_find_get","__zswap_pool_empty","__zswap_pool_release","zswap_compressor_param_set","zswap_total_pages"],"skip_cover_check":true},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-workflowrhjd2/series-workflowrhjd2-convert-artifact-2949131842/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrhjd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_store_page","zswap_decompress","zswap_entry_free","zswap_pool_create","zswap_pool_find_get","__zswap_pool_empty","__zswap_pool_release","zswap_compressor_param_set","zswap_total_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"93ffdc1f-3681-4445-823e-9a0d77965c44","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-06 21:01:25 +0000 UTC FinishedAt: 2026-09-06 21:01:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhjd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_store_page","zswap_decompress","zswap_entry_free","zswap_pool_create","zswap_pool_find_get","__zswap_pool_empty","__zswap_pool_release","zswap_compressor_param_set","zswap_total_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"93ffdc1f-3681-4445-823e-9a0d77965c44","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-06 21:01:25 +0000 UTC FinishedAt: 2026-09-06 21:01:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhjd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_store_page","zswap_decompress","zswap_entry_free","zswap_pool_create","zswap_pool_find_get","__zswap_pool_empty","__zswap_pool_release","zswap_compressor_param_set","zswap_total_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"93ffdc1f-3681-4445-823e-9a0d77965c44","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-06 21:01:25 +0000 UTC FinishedAt: 2026-09-06 21:01:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhjd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_store_page","zswap_decompress","zswap_entry_free","zswap_pool_create","zswap_pool_find_get","__zswap_pool_empty","__zswap_pool_release","zswap_compressor_param_set","zswap_total_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"93ffdc1f-3681-4445-823e-9a0d77965c44","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-06 21:01:49 +0000 UTC FinishedAt: 2026-09-07 00:05:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhjd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_store_page","zswap_decompress","zswap_entry_free","zswap_pool_create","zswap_pool_find_get","__zswap_pool_empty","__zswap_pool_release","zswap_compressor_param_set","zswap_total_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d118502628f8b673be9023db8bdf878f64a7ed45","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"93ffdc1f-3681-4445-823e-9a0d77965c44","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-06 21:01:49 +0000 UTC FinishedAt: 2026-09-07 00:05:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d1112625-e38b-4881-8c5b-510027e90a7a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cfde7fd6-4b9e-47a8-bed3-9f0b1eb6b8b5,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-workflowrhjd2/series-workflowrhjd2-build-action-3616240416/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-workflowrhjd2/series-workflowrhjd2-build-action-1551051033/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-workflowrhjd2/series-workflowrhjd2-convert-artifact-2949131842/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,}