Name: series-workflownrrq9 Phase: Succeeded StartedAt: 2026-08-21 09:20:26 +0000 UTC FinishedAt: 2026-08-21 12:05:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflownrrq9[0] Phase: Succeeded StartedAt: 2026-08-21 09:20:26 +0000 UTC FinishedAt: 2026-08-21 10:25:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflownrrq9[0].run-triage Phase: Succeeded StartedAt: 2026-08-21 09:20:26 +0000 UTC FinishedAt: 2026-08-21 10:25:21 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SMC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SMC" ], "series_id": "38f68da7-711b-4ba2-b1df-a30862afcc20" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "smc_wr_tx_get_free_slot", "smc_wr_tx_put_slot" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NNQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NtY193cl90eF9nZXRfZnJlZV9zbG90JiMzNDssCiAgICAmIzM0O3NtY193cl90eF9wdXRfc2xvdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyB0d28gaXNzdWVzOlxuMS4gSXQgcmVwbGFjZXMgYHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0YCB3aXRoIGFuIG9wZW4tY29kZWQgd2FpdCBsb29wIHVzaW5nIGBwcmVwYXJlX3RvX3dhaXRfZXhjbHVzaXZlYCB0byBmaXggYSB0aHVuZGVyaW5nIGhlcmQgcHJvYmxlbSB3aGVyZSBtdWx0aXBsZSB3YWl0aW5nIHRocmVhZHMgYXJlIHdva2VuIHVwIHNpbXVsdGFuZW91c2x5LiBUaGlzIGlzIGEgcGVyZm9ybWFuY2UvY29uY3VycmVuY3kgZml4LlxuMi4gSXQgZml4ZXMgYSBidWcgaW4gYHNtY193cl90eF9wdXRfc2xvdGAgd2hlcmUgYG1lbXNldGAgd2FzIGluY29ycmVjdGx5IGFwcGxpZWQgdG8gdGhlIHBvaW50ZXJzIGBcdTAwMjZsaW5rLVx1MDAzZXdyX3R4X3YyX3BlbmRgIGFuZCBgXHUwMDI2bGluay1cdTAwM2VsZ3ItXHUwMDNld3JfdHhfYnVmX3YyYCBpbnN0ZWFkIG9mIHRoZSBzdHJ1Y3R1cmVzIHRoZXkgcG9pbnQgdG8uXG5cbkJlY2F1c2UgdGhlIG9yaWdpbmFsIGNvZGUgemVyb2VkIHRoZSBwb2ludGVycyB0aGVtc2VsdmVzIChlZmZlY3RpdmVseSBzZXR0aW5nIHRoZW0gdG8gTlVMTCksIGFueSBzdWJzZXF1ZW50IHVzZSBvZiB0aGVzZSBwb2ludGVycyAoZS5nLiwgaW4gYHNtY193cl90eF9nZXRfdjJfc2xvdGAgb3IgYHNtY193cl90eF9wcm9jZXNzX2NxZWApIHdvdWxkIHJlc3VsdCBpbiBhIGRldGVybWluaXN0aWMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBBIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBjYXVzZXMgYSBzdGFuZGFyZCBrZXJuZWwgb29wcyBhbmQgaXMgdHJpdmlhbGx5IGNhdWdodCBieSBzdGFuZGFyZCB0ZXN0aW5nLCBLQVNBTiwgb3IgZXZlbiB3aXRob3V0IGFueSBzYW5pdGl6ZXJzLlxuXG5UaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2Ugb3Igb3ZlciB0aGUgbmV0d29yay4gVGhlIG5ldHdvcmsgdHJhbnNtaXNzaW9uIGZ1bmN0aW9ucyAoZS5nLiwgYHNtY193cl90eF92Ml9zZW5kYCkgb25seSBzZW5kIHRoZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGxlbmd0aCBvZiB0aGUgYnVmZmVyLCBhbmQgdGhlIGNhbGxlcnMgKGxpa2UgYHNtY19sbGNfc2VuZF9hZGRfbGlua2ApIGV4cGxpY2l0bHkgemVybyBhbmQgaW5pdGlhbGl6ZSB0aGUgZXhhY3QgbnVtYmVyIG9mIGJ5dGVzIHRoZXkgdHJhbnNtaXQuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgU01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHkmIzM5O3Mgd3JpdGUgcmVxdWVzdCAoV1IpIHRyYW5zbWlzc2lvbiBsb2dpYywgc3BlY2lmaWNhbGx5IHRoZSBgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RgIGFuZCBgc21jX3dyX3R4X3B1dF9zbG90YCBmdW5jdGlvbnMuIEl0IGNoYW5nZXMgdGhlIHdhaXQgbG9vcCBmb3IgZ2V0dGluZyBhIGZyZWUgc2xvdCB0byB1c2UgYHByZXBhcmVfdG9fd2FpdF9leGNsdXNpdmVgIGFuZCBmaXhlcyBhIGBtZW1zZXRgIGJ1ZyBpbiBgc21jX3dyX3R4X3B1dF9zbG90YC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjb3JlIHRvIHRoZSBTTUMgcHJvdG9jb2wmIzM5O3MgZGF0YSB0cmFuc21pc3Npb24gYW5kIGFyZSByZWFjaGFibGUgdmlhIHNvY2tldCBvcGVyYXRpb25zLiBGdXp6aW5nIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIG5ldyB3YWl0IGxvZ2ljIGFuZCBtZW1vcnkgb3BlcmF0aW9ucyBhcmUgY29ycmVjdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDUyOGEyZDVhNWFhMmUyN2NhNmRkNzEzNDNhZWQxNTAxM2JlMmI2MTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxMDoyMTo0NyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY193ci5jIGIvbmV0L3NtYy9zbWNfd3IuY1xuaW5kZXggNTljOTJiNDY5NDVjNS4uMmNkZDQwNjNjMTNkNiAxMDA2NDRcbi0tLSBhL25ldC9zbWMvc21jX3dyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zbWMvc21jX3dyLmNcbkBAIC0xOTgsMTEgJiM0MzsxOTgsMTMgQEAgaW50IHNtY193cl90eF9nZXRfZnJlZV9zbG90KHN0cnVjdCBzbWNfbGluayAqbGluayxcbiBcdFx0XHQgICAgc3RydWN0IHNtY19yZG1hX3dyICoqd3JfcmRtYV9idWYsXG4gXHRcdFx0ICAgIHN0cnVjdCBzbWNfd3JfdHhfcGVuZF9wcml2ICoqd3JfcGVuZF9wcml2KVxuIHtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBTTUNfV1JfVFhfV0FJVF9GUkVFX1NMT1RfVElNRTtcbiBcdHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyID0gc21jX2dldF9sZ3IobGluayk7XG4gXHRzdHJ1Y3Qgc21jX3dyX3R4X3BlbmQgKndyX3BlbmQ7XG4gXHR1MzIgaWR4ID0gbGluay1cdTAwM2V3cl90eF9jbnQ7XG4gXHRzdHJ1Y3QgaWJfc2VuZF93ciAqd3JfaWI7XG4gXHR1NjQgd3JfaWQ7XG4mIzQzO1x0REVGSU5FX1dBSVQod2FpdCk7XG4gXHRpbnQgcmM7XG4gXG4gXHQqd3JfYnVmID0gTlVMTDtcbkBAIC0yMTIsMTcgJiM0MzsyMTQsMzEgQEAgaW50IHNtY193cl90eF9nZXRfZnJlZV9zbG90KHN0cnVjdCBzbWNfbGluayAqbGluayxcbiBcdFx0aWYgKHJjKVxuIFx0XHRcdHJldHVybiByYztcbiBcdH0gZWxzZSB7XG4tXHRcdHJjID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoXG4tXHRcdFx0bGluay1cdTAwM2V3cl90eF93YWl0LFxuLVx0XHRcdCFzbWNfbGlua19zZW5kYWJsZShsaW5rKSB8fFxuLVx0XHRcdGxnci1cdTAwM2V0ZXJtaW5hdGluZyB8fFxuLVx0XHRcdChzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdF9pbmRleChsaW5rLCBcdTAwMjZpZHgpICE9IC1FQlVTWSksXG4tXHRcdFx0U01DX1dSX1RYX1dBSVRfRlJFRV9TTE9UX1RJTUUpO1xuLVx0XHRpZiAoIXJjKSB7XG4tXHRcdFx0LyogdGltZW91dCAtIHRlcm1pbmF0ZSBsaW5rICovXG4tXHRcdFx0c21jcl9saW5rX2Rvd25fY29uZF9zY2hlZChsaW5rKTtcbi1cdFx0XHRyZXR1cm4gLUVQSVBFO1xuJiM0MztcdFx0cmMgPSAwO1xuJiM0MztcdFx0Zm9yICg7Oykge1xuJiM0MztcdFx0XHRwcmVwYXJlX3RvX3dhaXRfZXhjbHVzaXZlKFx1MDAyNmxpbmstXHUwMDNld3JfdHhfd2FpdCwgXHUwMDI2d2FpdCxcbiYjNDM7XHRcdFx0XHRcdFx0ICBUQVNLX0lOVEVSUlVQVElCTEUpO1xuJiM0MztcdFx0XHRpZiAoIXNtY19saW5rX3NlbmRhYmxlKGxpbmspIHx8IGxnci1cdTAwM2V0ZXJtaW5hdGluZyB8fFxuJiM0MztcdFx0XHQgICAgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RfaW5kZXgobGluaywgXHUwMDI2aWR4KSAhPSAtRUJVU1kpXG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdHRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpO1xuJiM0MztcdFx0XHQvKiByZS1jaGVjayAqL1xuJiM0MztcdFx0XHRpZiAoIXNtY19saW5rX3NlbmRhYmxlKGxpbmspIHx8IGxnci1cdTAwM2V0ZXJtaW5hdGluZyB8fFxuJiM0MztcdFx0XHQgICAgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RfaW5kZXgobGluaywgXHUwMDI2aWR4KSAhPSAtRUJVU1kpXG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdGlmICghdGltZW91dCkge1xuJiM0MztcdFx0XHRcdC8qIHRpbWVvdXQgLSB0ZXJtaW5hdGUgbGluayAqL1xuJiM0MztcdFx0XHRcdHNtY3JfbGlua19kb3duX2NvbmRfc2NoZWQobGluayk7XG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7XG4mIzQzO1x0XHRcdFx0cmMgPSAtRVJFU1RBUlRTWVM7XG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdH1cbiBcdFx0fVxuJiM0MztcdFx0ZmluaXNoX3dhaXQoXHUwMDI2bGluay1cdTAwM2V3cl90eF93YWl0LCBcdTAwMjZ3YWl0KTtcbiYjNDM7XHRcdGlmIChyYylcbiYjNDM7XHRcdFx0cmV0dXJuIHJjO1xuIFx0XHRpZiAoaWR4ID09IGxpbmstXHUwMDNld3JfdHhfY250KVxuIFx0XHRcdHJldHVybiAtRVBJUEU7XG4gXHR9XG5AQCAtMjg4LDEwICYjNDM7MzA0LDEwIEBAIGludCBzbWNfd3JfdHhfcHV0X3Nsb3Qoc3RydWN0IHNtY19saW5rICpsaW5rLFxuIFx0fSBlbHNlIGlmIChsaW5rLVx1MDAzZWxnci1cdTAwM2VzbWNfdmVyc2lvbiA9PSBTTUNfVjIgXHUwMDI2XHUwMDI2XG4gXHRcdCAgIHBlbmQtXHUwMDNlaWR4ID09IGxpbmstXHUwMDNld3JfdHhfY250KSB7XG4gXHRcdC8qIExhcmdlIHYyIGJ1ZmZlciAqL1xuLVx0XHRtZW1zZXQoXHUwMDI2bGluay1cdTAwM2V3cl90eF92Ml9wZW5kLCAwLFxuLVx0XHQgICAgICAgc2l6ZW9mKGxpbmstXHUwMDNld3JfdHhfdjJfcGVuZCkpO1xuLVx0XHRtZW1zZXQoXHUwMDI2bGluay1cdTAwM2VsZ3ItXHUwMDNld3JfdHhfYnVmX3YyLCAwLFxuLVx0XHQgICAgICAgc2l6ZW9mKGxpbmstXHUwMDNlbGdyLVx1MDAzZXdyX3R4X2J1Zl92MikpO1xuJiM0MztcdFx0bWVtc2V0KGxpbmstXHUwMDNld3JfdHhfdjJfcGVuZCwgMCxcbiYjNDM7XHRcdCAgICAgICBzaXplb2YoKmxpbmstXHUwMDNld3JfdHhfdjJfcGVuZCkpO1xuJiM0MztcdFx0bWVtc2V0KGxpbmstXHUwMDNlbGdyLVx1MDAzZXdyX3R4X2J1Zl92MiwgMCxcbiYjNDM7XHRcdCAgICAgICBzaXplb2YoKmxpbmstXHUwMDNlbGdyLVx1MDAzZXdyX3R4X2J1Zl92MikpO1xuIFx0XHRyZXR1cm4gMTtcbiBcdH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U01DJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c21jX3dyX3R4X2dldF9mcmVlX3Nsb3QmIzM0OywKICAgICYjMzQ7c21jX3dyX3R4X3B1dF9zbG90JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseSYjMzk7cyB3cml0ZSByZXF1ZXN0IChXUikgdHJhbnNtaXNzaW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgdGhlIGBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdGAgYW5kIGBzbWNfd3JfdHhfcHV0X3Nsb3RgIGZ1bmN0aW9ucy4gSXQgY2hhbmdlcyB0aGUgd2FpdCBsb29wIGZvciBnZXR0aW5nIGEgZnJlZSBzbG90IHRvIHVzZSBgcHJlcGFyZV90b193YWl0X2V4Y2x1c2l2ZWAgYW5kIGZpeGVzIGEgYG1lbXNldGAgYnVnIGluIGBzbWNfd3JfdHhfcHV0X3Nsb3RgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNvcmUgdG8gdGhlIFNNQyBwcm90b2NvbCYjMzk7cyBkYXRhIHRyYW5zbWlzc2lvbiBhbmQgYXJlIHJlYWNoYWJsZSB2aWEgc29ja2V0IG9wZXJhdGlvbnMuIEZ1enppbmcgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGUgbmV3IHdhaXQgbG9naWMgYW5kIG1lbW9yeSBvcGVyYXRpb25zIGFyZSBjb3JyZWN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTI4YTJkNWE1YWEyZTI3Y2E2ZGQ3MTM0M2FlZDE1MDEzYmUyYjYxNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDIxIDEwOjIxOjQ3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfd3IuYyBiL25ldC9zbWMvc21jX3dyLmMKaW5kZXggNTljOTJiNDY5NDVjNS4uMmNkZDQwNjNjMTNkNiAxMDA2NDQKLS0tIGEvbmV0L3NtYy9zbWNfd3IuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc21jL3NtY193ci5jCkBAIC0xOTgsMTEgJiM0MzsxOTgsMTMgQEAgaW50IHNtY193cl90eF9nZXRfZnJlZV9zbG90KHN0cnVjdCBzbWNfbGluayAqbGluaywKIAkJCSAgICBzdHJ1Y3Qgc21jX3JkbWFfd3IgKip3cl9yZG1hX2J1ZiwKIAkJCSAgICBzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRfcHJpdiAqKndyX3BlbmRfcHJpdikKIHsKJiM0MzsJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gU01DX1dSX1RYX1dBSVRfRlJFRV9TTE9UX1RJTUU7CiAJc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IgPSBzbWNfZ2V0X2xncihsaW5rKTsKIAlzdHJ1Y3Qgc21jX3dyX3R4X3BlbmQgKndyX3BlbmQ7CiAJdTMyIGlkeCA9IGxpbmstJmd0O3dyX3R4X2NudDsKIAlzdHJ1Y3QgaWJfc2VuZF93ciAqd3JfaWI7CiAJdTY0IHdyX2lkOwomIzQzOwlERUZJTkVfV0FJVCh3YWl0KTsKIAlpbnQgcmM7CiAKIAkqd3JfYnVmID0gTlVMTDsKQEAgLTIxMiwxNyAmIzQzOzIxNCwzMSBAQCBpbnQgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3Qoc3RydWN0IHNtY19saW5rICpsaW5rLAogCQlpZiAocmMpCiAJCQlyZXR1cm4gcmM7CiAJfSBlbHNlIHsKLQkJcmMgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCgKLQkJCWxpbmstJmd0O3dyX3R4X3dhaXQsCi0JCQkhc21jX2xpbmtfc2VuZGFibGUobGluaykgfHwKLQkJCWxnci0mZ3Q7dGVybWluYXRpbmcgfHwKLQkJCShzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdF9pbmRleChsaW5rLCAmYW1wO2lkeCkgIT0gLUVCVVNZKSwKLQkJCVNNQ19XUl9UWF9XQUlUX0ZSRUVfU0xPVF9USU1FKTsKLQkJaWYgKCFyYykgewotCQkJLyogdGltZW91dCAtIHRlcm1pbmF0ZSBsaW5rICovCi0JCQlzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKGxpbmspOwotCQkJcmV0dXJuIC1FUElQRTsKJiM0MzsJCXJjID0gMDsKJiM0MzsJCWZvciAoOzspIHsKJiM0MzsJCQlwcmVwYXJlX3RvX3dhaXRfZXhjbHVzaXZlKCZhbXA7bGluay0mZ3Q7d3JfdHhfd2FpdCwgJmFtcDt3YWl0LAomIzQzOwkJCQkJCSAgVEFTS19JTlRFUlJVUFRJQkxFKTsKJiM0MzsJCQlpZiAoIXNtY19saW5rX3NlbmRhYmxlKGxpbmspIHx8IGxnci0mZ3Q7dGVybWluYXRpbmcgfHwKJiM0MzsJCQkgICAgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RfaW5kZXgobGluaywgJmFtcDtpZHgpICE9IC1FQlVTWSkKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJdGltZW91dCA9IHNjaGVkdWxlX3RpbWVvdXQodGltZW91dCk7CiYjNDM7CQkJLyogcmUtY2hlY2sgKi8KJiM0MzsJCQlpZiAoIXNtY19saW5rX3NlbmRhYmxlKGxpbmspIHx8IGxnci0mZ3Q7dGVybWluYXRpbmcgfHwKJiM0MzsJCQkgICAgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RfaW5kZXgobGluaywgJmFtcDtpZHgpICE9IC1FQlVTWSkKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJaWYgKCF0aW1lb3V0KSB7CiYjNDM7CQkJCS8qIHRpbWVvdXQgLSB0ZXJtaW5hdGUgbGluayAqLwomIzQzOwkJCQlzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKGxpbmspOwomIzQzOwkJCQlicmVhazsKJiM0MzsJCQl9CiYjNDM7CQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CiYjNDM7CQkJCXJjID0gLUVSRVNUQVJUU1lTOwomIzQzOwkJCQlicmVhazsKJiM0MzsJCQl9CiAJCX0KJiM0MzsJCWZpbmlzaF93YWl0KCZhbXA7bGluay0mZ3Q7d3JfdHhfd2FpdCwgJmFtcDt3YWl0KTsKJiM0MzsJCWlmIChyYykKJiM0MzsJCQlyZXR1cm4gcmM7CiAJCWlmIChpZHggPT0gbGluay0mZ3Q7d3JfdHhfY250KQogCQkJcmV0dXJuIC1FUElQRTsKIAl9CkBAIC0yODgsMTAgJiM0MzszMDQsMTAgQEAgaW50IHNtY193cl90eF9wdXRfc2xvdChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssCiAJfSBlbHNlIGlmIChsaW5rLSZndDtsZ3ItJmd0O3NtY192ZXJzaW9uID09IFNNQ19WMiAmYW1wOyZhbXA7CiAJCSAgIHBlbmQtJmd0O2lkeCA9PSBsaW5rLSZndDt3cl90eF9jbnQpIHsKIAkJLyogTGFyZ2UgdjIgYnVmZmVyICovCi0JCW1lbXNldCgmYW1wO2xpbmstJmd0O3dyX3R4X3YyX3BlbmQsIDAsCi0JCSAgICAgICBzaXplb2YobGluay0mZ3Q7d3JfdHhfdjJfcGVuZCkpOwotCQltZW1zZXQoJmFtcDtsaW5rLSZndDtsZ3ItJmd0O3dyX3R4X2J1Zl92MiwgMCwKLQkJICAgICAgIHNpemVvZihsaW5rLSZndDtsZ3ItJmd0O3dyX3R4X2J1Zl92MikpOwomIzQzOwkJbWVtc2V0KGxpbmstJmd0O3dyX3R4X3YyX3BlbmQsIDAsCiYjNDM7CQkgICAgICAgc2l6ZW9mKCpsaW5rLSZndDt3cl90eF92Ml9wZW5kKSk7CiYjNDM7CQltZW1zZXQobGluay0mZ3Q7bGdyLSZndDt3cl90eF9idWZfdjIsIDAsCiYjNDM7CQkgICAgICAgc2l6ZW9mKCpsaW5rLSZndDtsZ3ItJmd0O3dyX3R4X2J1Zl92MikpOwogCQlyZXR1cm4gMTsKIAl9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg1NgoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDE3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNNQyBXUiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9zbWMvc21jX3dyLmNgLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIGNoYW5nZSBpbiBgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RgLiAgVGhleSYjMzk7dmUgcmVwbGFjZWQgYHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0YCB3aXRoIGEgbWFudWFsIHdhaXQgbG9vcCB1c2luZyBgcHJlcGFyZV90b193YWl0X2V4Y2x1c2l2ZWAuICBUaGF0JiMzOTtzIGEgc2lnbmlmaWNhbnQgc2hpZnQuIE15IGltbWVkaWF0ZSBxdWVzdGlvbnMgYXJlOiBXaGF0JiMzOTtzIHRoZSByYXRpb25hbGU/IElzIHRoaXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIGEgYnVnIGZpeCwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/ICBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvbnRleHQgb2YgKndoeSogdGhleSBtYWRlIHRoaXMgY2hvaWNlLiBXZSBoYXZlIHRvIGNvbnNpZGVyIHdoZXRoZXIgdGhpcyBjaGFuZ2UgcHJvcGVybHkgYWRkcmVzc2VzIHRoZSByYWNlIGNvbmRpdGlvbiB0aGF0IGB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dGAgd2FzIHN1cHBvc2VkbHkgaW5zdWZmaWNpZW50IHRvIHJlc29sdmUuCgpUaGUgb3RoZXIgaXRlbSBpbiB0aGUgZGlmZiBpcyBhIGBtZW1zZXRgIGJ1ZyBmaXggaW4gYHNtY193cl90eF9wdXRfc2xvdGAuIFRoZXkgaGFkIHRoZSB3cm9uZyBhcmd1bWVudHMsIHVzaW5nIHRoZSBhZGRyZXNzIG9mIHRoZSBzdHJ1Y3R1cmUgaW5zdGVhZCBvZiB0aGUgc3RydWN0dXJlIGl0c2VsZi4gVGhpcyBpcyBzdHJhaWdodGZvcndhcmQ7IGEgY2xhc3NpYyBtZW1vcnkgY29ycnVwdGlvbiBidWcgdGhhdCBuZWVkZWQgdG8gYmUgYWRkcmVzc2VkLiAgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvcnJlY3RlZCBgbWVtc2V0YCBvcGVyYXRpb24gaXMgc3VmZmljaWVudCB0byBjbGVhciBhbnkgcG90ZW50aWFsIHN0YWxlIGRhdGEuCgpUbyBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBhY3QgYW5kIHRoZSBpbXBsaWNhdGlvbnMsIEkgbmVlZCB0byBjaGVjayB0aGUgc291cmNlIGNvZGUgYW5kIGRpc2NvdmVyIHdoaWNoIGNvbmZpZyBvcHRpb25zIGFyZSByZWxldmFudC4gSSYjMzk7bGwgaGVhZCBvdmVyIHRvIGBuZXQvc21jL3NtY193ci5jYCBhbmQgZmlndXJlIG91dCB3aGljaCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZCB3aXRoIHRoaXMgbW9kdWxlLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBhc3Nlc3NpbmcgdGhlIHNjb3BlIG9mIHRoaXMgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NtY193cl90eF9nZXRfZnJlZV9zbG90JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfd3IuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL3NtY193ci5jPTE2Mj12b2lkIHNtY193cl90eF9jcV9oYW5kbGVyKHN0cnVjdCBpYl9jcSAqaWJfY3EsIHZvaWQgKmNxX2NvbnRleHQpXG4tLVxubmV0L3NtYy9zbWNfd3IuYy0xNzAtXG5uZXQvc21jL3NtY193ci5jOjE3MTpzdGF0aWMgaW5saW5lIGludCBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdF9pbmRleChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHUzMiAqaWR4KVxubmV0L3NtYy9zbWNfd3IuYy0xNzIte1xuLS1cbm5ldC9zbWMvc21jX3dyLmMtMTg0LS8qKlxubmV0L3NtYy9zbWNfd3IuYzoxODU6ICogc21jX3dyX3R4X2dldF9mcmVlX3Nsb3QoKSAtIHJldHVybnMgYnVmZmVyIGZvciBtZXNzYWdlIGFzc2VtYmx5LFxubmV0L3NtYy9zbWNfd3IuYy0xODYtICpcdFx0XHRhbmQgc2V0cyBpbmZvIGZvciBwZW5kaW5nIHRyYW5zbWl0IHRyYWNraW5nXG4tLVxubmV0L3NtYy9zbWNfd3IuYy0xOTQtICovXG5uZXQvc21jL3NtY193ci5jOjE5NTppbnQgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3Qoc3RydWN0IHNtY19saW5rICpsaW5rLFxubmV0L3NtYy9zbWNfd3IuYy0xOTYtXHRcdFx0ICAgIHNtY193cl90eF9oYW5kbGVyIGhhbmRsZXIsXG4tLVxubmV0L3NtYy9zbWNfd3IuYy0yMTItXHRpZiAoaW5fc29mdGlycSgpIHx8IGxnci1cdTAwM2V0ZXJtaW5hdGluZykge1xubmV0L3NtYy9zbWNfd3IuYzoyMTM6XHRcdHJjID0gc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RfaW5kZXgobGluaywgXHUwMDI2aWR4KTtcbm5ldC9zbWMvc21jX3dyLmMtMjE0LVx0XHRpZiAocmMpXG4tLVxubmV0L3NtYy9zbWNfd3IuYy0yMjEtXHRcdFx0aWYgKCFzbWNfbGlua19zZW5kYWJsZShsaW5rKSB8fCBsZ3ItXHUwMDNldGVybWluYXRpbmcgfHxcbm5ldC9zbWMvc21jX3dyLmM6MjIyOlx0XHRcdCAgICBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdF9pbmRleChsaW5rLCBcdTAwMjZpZHgpICE9IC1FQlVTWSlcbm5ldC9zbWMvc21jX3dyLmMtMjIzLVx0XHRcdFx0YnJlYWs7XG4tLVxubmV0L3NtYy9zbWNfd3IuYy0yMjYtXHRcdFx0aWYgKCFzbWNfbGlua19zZW5kYWJsZShsaW5rKSB8fCBsZ3ItXHUwMDNldGVybWluYXRpbmcgfHxcbm5ldC9zbWMvc21jX3dyLmM6MjI3Olx0XHRcdCAgICBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdF9pbmRleChsaW5rLCBcdTAwMjZpZHgpICE9IC1FQlVTWSlcbm5ldC9zbWMvc21jX3dyLmMtMjI4LVx0XHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAwOAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLY29uZmlnIGFuZCBTTUMgLSBBIFF1aWNrIENoZWNrKioKCk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgU01DIChTeXN0ZW0gTWFuYWdlbWVudCBDb250cm9sbGVyKSBpcyBjb25maWd1cmVkIGluIHRoaXMgcHJvamVjdC4gRmlyc3QsIG15IG1lbnRhbCBjaGVja2xpc3QgZ29lczogKktjb25maWcqLiBHb3R0YSBzdGFydCB0aGVyZS4gSXQmIzM5O3MgdGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiBodWIsIHJpZ2h0PyBBbGwgdGhlIGVzc2VudGlhbCBzZXR0aW5ncywgZGVwZW5kZW5jaWVzLCBhbmQgcG90ZW50aWFsIGZlYXR1cmUgZmxhZ3MgZm9yIFNNQyBzaG91bGQgYmUgZGVmaW5lZCBpbiBLY29uZmlnIGZpbGVzIHNvbWV3aGVyZSBpbiB0aGUgcmVsZXZhbnQgc291cmNlIHRyZWUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBwYXRoIG9yIHRoZSByZWxldmFudCBpbmNsdWRlIGRpcmVjdGl2ZXMgdG8gbG9vayB0aHJvdWdoLiBJJiMzOTttIHRoaW5raW5nLCBpcyBTTUMgZW5hYmxlZCBhcyBhIGRldmljZSwgb3IgYSBmdW5jdGlvbj8gV2hhdCBhcmUgdGhlIGtleSBvcHRpb25zLCBhbmQgYXJlIHRoZXJlIGRlcGVuZGVuY2llcyBvbiBvdGhlciBzdWJzeXN0ZW1zIHRoYXQgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEJlc3QgdG8gZ2V0IGEgcXVpY2sgb3ZlcnZpZXcgb2YgaG93IHRoZSBidWlsZCBzeXN0ZW0gd2lsbCB0cmVhdCBpdCBhdCBhIGhpZ2ggbGV2ZWwuIFRoYXQgd2lsbCBzYXZlIG1lIHNvbWUgdGltZSBsYXRlciB3aGVuIEkgZGl2ZSBpbnRvIHRoZSBjb2RlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNNQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9zbWMvS2NvbmZpZzoyOmNvbmZpZyBTTUNcbm5ldC9zbWMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7U01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcJiMzNDtcbi0tXG5uZXQvc21jL0tjb25maWctMTMtXG5uZXQvc21jL0tjb25maWc6MTQ6Y29uZmlnIFNNQ19ESUFHXG5uZXQvc21jL0tjb25maWctMTUtXHR0cmlzdGF0ZSBcJiMzNDtTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC9zbWMvS2NvbmZpZy0yMi1cbm5ldC9zbWMvS2NvbmZpZzoyMzpjb25maWcgU01DX0hTX0NUUkxfQlBGXG5uZXQvc21jL0tjb25maWctMjQtXHRib29sIFwmIzM0O0dlbmVyaWMgZUJQRiBob29rIGZvciBTTUMgaGFuZHNoYWtlIGZsb3dcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDM0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTTUMgQ29uZmlndXJhdGlvbiBhbmQgTW9kaWZpZWQgRnVuY3Rpb25zKioKCk9rYXksIHNvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gc2V0dGluZyBpcyBTTUMuIE15IGltbWVkaWF0ZSBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGUgdHdvIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiB0b3VjaGVkOiBgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RgIGFuZCBgc21jX3dyX3R4X3B1dF9zbG90YC4gVGhleSYjMzk7cmUgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIHdyaXRlIHRyYW5zYWN0aW9uIHByb2Nlc3MsIGJ1dCBJIG5lZWQgdG8gYXNjZXJ0YWluIHRoZWlyIHNjb3BlIGFuZCBpbXBhY3QuIFRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGdvaW5nIHRvIGRvIGlzIGRldGVybWluZSBpZiB0aGVzZSBmdW5jdGlvbnMgYXJlIHBhcnQgb2YgdGhlIHB1YmxpYyBBUEkgb3IgaWYgdGhleSYjMzk7cmUgaW50ZXJuYWwuIEFyZSB0aGV5IGV4cG9ydGVkLCBtZWFuaW5nIG90aGVyIG1vZHVsZXMgb3IgY29tcG9uZW50cyBjYW4gY2FsbCB0aGVtPyBBbmQgZXZlbiBpZiBub3QgZXhwb3J0ZWQsIGFyZSB0aGV5IGNhbGxlZCBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgZ3JhcGggaXMgZXNzZW50aWFsIHRvIGFzc2Vzc2luZyB0aGUgcG90ZW50aWFsIHJpcHBsZSBlZmZlY3RzIG9mIHRoZSBtb2RpZmljYXRpb25zLiBBbnkgY2hhbmdlcyBoZXJlIGNvdWxkIGFmZmVjdCBhIHdpZGUgcmFuZ2Ugb2YgZnVuY3Rpb25hbGl0eSwgc28gSSBuZWVkIHRvIGtub3cgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGZpdCBpbnRvIHRoZSBsYXJnZXIgcGljdHVyZSBiZWZvcmUgSSBjYW4gZXZhbHVhdGUgdGhlIGNvZGUgY2hhbmdlcyBwcm9wZXJseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2NkYy5jPTczPWludCBzbWNfY2RjX2dldF9mcmVlX3Nsb3Qoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uLFxuLS1cbm5ldC9zbWMvc21jX2NkYy5jLTgwLVxubmV0L3NtYy9zbWNfY2RjLmM6ODE6XHRyYyA9IHNtY193cl90eF9nZXRfZnJlZV9zbG90KGxpbmssIHNtY19jZGNfdHhfaGFuZGxlciwgd3JfYnVmLFxubmV0L3NtYy9zbWNfY2RjLmMtODItXHRcdFx0XHQgICAgIHdyX3JkbWFfYnVmLFxuLS1cbm5ldC9zbWMvc21jX2xsYy5jPTQwMD1zdGF0aWMgaW50IHNtY19sbGNfYWRkX3BlbmRpbmdfc2VuZChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXG4tLVxubmV0L3NtYy9zbWNfbGxjLmMtNDA1LVxubmV0L3NtYy9zbWNfbGxjLmM6NDA2Olx0cmMgPSBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdChsaW5rLCBzbWNfbGxjX3R4X2hhbmRsZXIsIHdyX2J1ZiwgTlVMTCxcbm5ldC9zbWMvc21jX2xsYy5jLTQwNy1cdFx0XHRcdCAgICAgcGVuZCk7XG4tLVxubmV0L3NtYy9zbWNfd3IuYz0xNjI9dm9pZCBzbWNfd3JfdHhfY3FfaGFuZGxlcihzdHJ1Y3QgaWJfY3EgKmliX2NxLCB2b2lkICpjcV9jb250ZXh0KVxuLS1cbm5ldC9zbWMvc21jX3dyLmMtMTcwLVxubmV0L3NtYy9zbWNfd3IuYzoxNzE6c3RhdGljIGlubGluZSBpbnQgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RfaW5kZXgoc3RydWN0IHNtY19saW5rICpsaW5rLCB1MzIgKmlkeClcbm5ldC9zbWMvc21jX3dyLmMtMTcyLXtcbi0tXG5uZXQvc21jL3NtY193ci5jLTE4NC0vKipcbm5ldC9zbWMvc21jX3dyLmM6MTg1OiAqIHNtY193cl90eF9nZXRfZnJlZV9zbG90KCkgLSByZXR1cm5zIGJ1ZmZlciBmb3IgbWVzc2FnZSBhc3NlbWJseSxcbm5ldC9zbWMvc21jX3dyLmMtMTg2LSAqXHRcdFx0YW5kIHNldHMgaW5mbyBmb3IgcGVuZGluZyB0cmFuc21pdCB0cmFja2luZ1xuLS1cbm5ldC9zbWMvc21jX3dyLmMtMTk0LSAqL1xubmV0L3NtYy9zbWNfd3IuYzoxOTU6aW50IHNtY193cl90eF9nZXRfZnJlZV9zbG90KHN0cnVjdCBzbWNfbGluayAqbGluayxcbm5ldC9zbWMvc21jX3dyLmMtMTk2LVx0XHRcdCAgICBzbWNfd3JfdHhfaGFuZGxlciBoYW5kbGVyLFxuLS1cbm5ldC9zbWMvc21jX3dyLmMtMjEyLVx0aWYgKGluX3NvZnRpcnEoKSB8fCBsZ3ItXHUwMDNldGVybWluYXRpbmcpIHtcbm5ldC9zbWMvc21jX3dyLmM6MjEzOlx0XHRyYyA9IHNtY193cl90eF9nZXRfZnJlZV9zbG90X2luZGV4KGxpbmssIFx1MDAyNmlkeCk7XG5uZXQvc21jL3NtY193ci5jLTIxNC1cdFx0aWYgKHJjKVxuLS1cbm5ldC9zbWMvc21jX3dyLmMtMjIxLVx0XHRcdGlmICghc21jX2xpbmtfc2VuZGFibGUobGluaykgfHwgbGdyLVx1MDAzZXRlcm1pbmF0aW5nIHx8XG5uZXQvc21jL3NtY193ci5jOjIyMjpcdFx0XHQgICAgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RfaW5kZXgobGluaywgXHUwMDI2aWR4KSAhPSAtRUJVU1kpXG5uZXQvc21jL3NtY193ci5jLTIyMy1cdFx0XHRcdGJyZWFrO1xuLS1cbm5ldC9zbWMvc21jX3dyLmMtMjI2LVx0XHRcdGlmICghc21jX2xpbmtfc2VuZGFibGUobGluaykgfHwgbGdyLVx1MDAzZXRlcm1pbmF0aW5nIHx8XG5uZXQvc21jL3NtY193ci5jOjIyNzpcdFx0XHQgICAgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RfaW5kZXgobGluaywgXHUwMDI2aWR4KSAhPSAtRUJVU1kpXG5uZXQvc21jL3NtY193ci5jLTIyOC1cdFx0XHRcdGJyZWFrO1xuLS1cbm5ldC9zbWMvc21jX3dyLmg9MTExPXZvaWQgc21jX3dyX2FkZF9kZXYoc3RydWN0IHNtY19pYl9kZXZpY2UgKnNtY2liZGV2KTtcbm5ldC9zbWMvc21jX3dyLmgtMTEyLVxubmV0L3NtYy9zbWNfd3IuaDoxMTM6aW50IHNtY193cl90eF9nZXRfZnJlZV9zbG90KHN0cnVjdCBzbWNfbGluayAqbGluaywgc21jX3dyX3R4X2hhbmRsZXIgaGFuZGxlcixcbm5ldC9zbWMvc21jX3dyLmgtMTE0LVx0XHRcdCAgICBzdHJ1Y3Qgc21jX3dyX2J1ZiAqKndyX2J1ZixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzM2CgkJCQkJCQlvdXRwdXQ6IDE4OAoJCQkJCQkJdGhvdWdodHM6IDIxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFN0cmF0ZWd5IGZvciBTTUMgUHJvdG9jb2wqKgoKT2theSwgc28gSSYjMzk7dmUgaWRlbnRpZmllZCB0d28ga2V5IGZ1bmN0aW9ucyB3aXRoaW4gdGhlIFNNQyBwcm90b2NvbCB0aGF0IHNlZW0gbGlrZSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nOiBgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RgIGFuZCBgc21jX3dyX3R4X3B1dF9zbG90YC4gQ29uc2lkZXJpbmcgU01DIGlzIGEgc29ja2V0IHByb3RvY29sIGZhbWlseSwgaXQmIzM5O3MgZGVmaW5pdGVseSB3aXRoaW4gcmVhY2ggZm9yIHRoaXMga2luZCBvZiB0ZXN0aW5nLCBhbmQgYmFzZWQgb24gbXkgaW5pdGlhbCBhc3Nlc3NtZW50LCB0aGVzZSBmdW5jdGlvbnMgYXJlIHdvcnRoIGEgY2xvc2VyIGxvb2suIFRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIHNldHRpbmcgaXMgYFNNQ2AuCgpOb3csIGJlZm9yZSBJIGNvbW1pdCB0byBqdXN0IHRob3NlLCBsZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgcmVsYXRlZCBmdW5jdGlvbnMgdGhhdCBtaWdodCBicm9hZGVuIHRoZSBzY29wZSBhbmQgaW5jcmVhc2UgbXkgY2hhbmNlcyBvZiBmaW5kaW5nIHNvbWV0aGluZyBpbnRlcmVzdGluZy4gRXhjZWxsZW50LCBJIHNlZSB0aGF0IGBzbWNfY2RjX2dldF9mcmVlX3Nsb3RgICphbHNvKiB1dGlsaXplcyBgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RgLCBhbmQgYHNtY19sbGNfYWRkX3BlbmRpbmdfc2VuZGAgaXMgYWxzbyBjYWxsaW5nIGBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdGAuCgpBbHJpZ2h0LCBJJiMzOTtsbCB1cGRhdGUgbXkgc3RyYXRlZ3kuIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBGb2N1c1N5bWJvbHNgIHRvIHRoZSBwYWlyIG9mIGBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdGAgYW5kIGBzbWNfd3JfdHhfcHV0X3Nsb3RgIGFuZCB3aWxsIG1ha2Ugc3VyZSB0byBlbmFibGUgdGhlIGBTTUNgIGNvbmZpZ3VyYXRpb24sIGFuZCB0aGF0IHdpbGwgYmUgbXkgZnV6emluZyB0YXJnZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTTUMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdCYjMzQ7LAogICAgJiMzNDtzbWNfd3JfdHhfcHV0X3Nsb3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNNQyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5JiMzOTtzIHdyaXRlIHJlcXVlc3QgKFdSKSB0cmFuc21pc3Npb24gbG9naWMsIHNwZWNpZmljYWxseSB0aGUgYHNtY193cl90eF9nZXRfZnJlZV9zbG90YCBhbmQgYHNtY193cl90eF9wdXRfc2xvdGAgZnVuY3Rpb25zLiBJdCBjaGFuZ2VzIHRoZSB3YWl0IGxvb3AgZm9yIGdldHRpbmcgYSBmcmVlIHNsb3QgdG8gdXNlIGBwcmVwYXJlX3RvX3dhaXRfZXhjbHVzaXZlYCBhbmQgZml4ZXMgYSBgbWVtc2V0YCBidWcgaW4gYHNtY193cl90eF9wdXRfc2xvdGAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY29yZSB0byB0aGUgU01DIHByb3RvY29sJiMzOTtzIGRhdGEgdHJhbnNtaXNzaW9uIGFuZCBhcmUgcmVhY2hhYmxlIHZpYSBzb2NrZXQgb3BlcmF0aW9ucy4gRnV6emluZyBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoZSBuZXcgd2FpdCBsb2dpYyBhbmQgbWVtb3J5IG9wZXJhdGlvbnMgYXJlIGNvcnJlY3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NNQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NtY193cl90eF9nZXRfZnJlZV9zbG90JiMzNDssCiAgICAmIzM0O3NtY193cl90eF9wdXRfc2xvdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgU01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHkmIzM5O3Mgd3JpdGUgcmVxdWVzdCAoV1IpIHRyYW5zbWlzc2lvbiBsb2dpYywgc3BlY2lmaWNhbGx5IHRoZSBgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RgIGFuZCBgc21jX3dyX3R4X3B1dF9zbG90YCBmdW5jdGlvbnMuIEl0IGNoYW5nZXMgdGhlIHdhaXQgbG9vcCBmb3IgZ2V0dGluZyBhIGZyZWUgc2xvdCB0byB1c2UgYHByZXBhcmVfdG9fd2FpdF9leGNsdXNpdmVgIGFuZCBmaXhlcyBhIGBtZW1zZXRgIGJ1ZyBpbiBgc21jX3dyX3R4X3B1dF9zbG90YC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjb3JlIHRvIHRoZSBTTUMgcHJvdG9jb2wmIzM5O3MgZGF0YSB0cmFuc21pc3Npb24gYW5kIGFyZSByZWFjaGFibGUgdmlhIHNvY2tldCBvcGVyYXRpb25zLiBGdXp6aW5nIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIG5ldyB3YWl0IGxvZ2ljIGFuZCBtZW1vcnkgb3BlcmF0aW9ucyBhcmUgY29ycmVjdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MjI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgdHdvIGlzc3VlczpcbjEuIEl0IHJlcGxhY2VzIGB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dGAgd2l0aCBhbiBvcGVuLWNvZGVkIHdhaXQgbG9vcCB1c2luZyBgcHJlcGFyZV90b193YWl0X2V4Y2x1c2l2ZWAgdG8gZml4IGEgdGh1bmRlcmluZyBoZXJkIHByb2JsZW0gd2hlcmUgbXVsdGlwbGUgd2FpdGluZyB0aHJlYWRzIGFyZSB3b2tlbiB1cCBzaW11bHRhbmVvdXNseS4gVGhpcyBpcyBhIHBlcmZvcm1hbmNlL2NvbmN1cnJlbmN5IGZpeC5cbjIuIEl0IGZpeGVzIGEgYnVnIGluIGBzbWNfd3JfdHhfcHV0X3Nsb3RgIHdoZXJlIGBtZW1zZXRgIHdhcyBpbmNvcnJlY3RseSBhcHBsaWVkIHRvIHRoZSBwb2ludGVycyBgXHUwMDI2bGluay1cdTAwM2V3cl90eF92Ml9wZW5kYCBhbmQgYFx1MDAyNmxpbmstXHUwMDNlbGdyLVx1MDAzZXdyX3R4X2J1Zl92MmAgaW5zdGVhZCBvZiB0aGUgc3RydWN0dXJlcyB0aGV5IHBvaW50IHRvLlxuXG5CZWNhdXNlIHRoZSBvcmlnaW5hbCBjb2RlIHplcm9lZCB0aGUgcG9pbnRlcnMgdGhlbXNlbHZlcyAoZWZmZWN0aXZlbHkgc2V0dGluZyB0aGVtIHRvIE5VTEwpLCBhbnkgc3Vic2VxdWVudCB1c2Ugb2YgdGhlc2UgcG9pbnRlcnMgKGUuZy4sIGluIGBzbWNfd3JfdHhfZ2V0X3YyX3Nsb3RgIG9yIGBzbWNfd3JfdHhfcHJvY2Vzc19jcWVgKSB3b3VsZCByZXN1bHQgaW4gYSBkZXRlcm1pbmlzdGljIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4gQSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgY2F1c2VzIGEgc3RhbmRhcmQga2VybmVsIG9vcHMgYW5kIGlzIHRyaXZpYWxseSBjYXVnaHQgYnkgc3RhbmRhcmQgdGVzdGluZywgS0FTQU4sIG9yIGV2ZW4gd2l0aG91dCBhbnkgc2FuaXRpemVycy5cblxuVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlIG9yIG92ZXIgdGhlIG5ldHdvcmsuIFRoZSBuZXR3b3JrIHRyYW5zbWlzc2lvbiBmdW5jdGlvbnMgKGUuZy4sIGBzbWNfd3JfdHhfdjJfc2VuZGApIG9ubHkgc2VuZCB0aGUgZXhwbGljaXRseSBpbml0aWFsaXplZCBsZW5ndGggb2YgdGhlIGJ1ZmZlciwgYW5kIHRoZSBjYWxsZXJzIChsaWtlIGBzbWNfbGxjX3NlbmRfYWRkX2xpbmtgKSBleHBsaWNpdGx5IHplcm8gYW5kIGluaXRpYWxpemUgdGhlIGV4YWN0IG51bWJlciBvZiBieXRlcyB0aGV5IHRyYW5zbWl0LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTI4YTJkNWE1YWEyZTI3Y2E2ZGQ3MTM0M2FlZDE1MDEzYmUyYjYxNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDIxIDEwOjIxOjQ3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfd3IuYyBiL25ldC9zbWMvc21jX3dyLmMKaW5kZXggNTljOTJiNDY5NDVjNS4uMmNkZDQwNjNjMTNkNiAxMDA2NDQKLS0tIGEvbmV0L3NtYy9zbWNfd3IuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc21jL3NtY193ci5jCkBAIC0xOTgsMTEgJiM0MzsxOTgsMTMgQEAgaW50IHNtY193cl90eF9nZXRfZnJlZV9zbG90KHN0cnVjdCBzbWNfbGluayAqbGluaywKIAkJCSAgICBzdHJ1Y3Qgc21jX3JkbWFfd3IgKip3cl9yZG1hX2J1ZiwKIAkJCSAgICBzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRfcHJpdiAqKndyX3BlbmRfcHJpdikKIHsKJiM0MzsJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gU01DX1dSX1RYX1dBSVRfRlJFRV9TTE9UX1RJTUU7CiAJc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IgPSBzbWNfZ2V0X2xncihsaW5rKTsKIAlzdHJ1Y3Qgc21jX3dyX3R4X3BlbmQgKndyX3BlbmQ7CiAJdTMyIGlkeCA9IGxpbmstJmd0O3dyX3R4X2NudDsKIAlzdHJ1Y3QgaWJfc2VuZF93ciAqd3JfaWI7CiAJdTY0IHdyX2lkOwomIzQzOwlERUZJTkVfV0FJVCh3YWl0KTsKIAlpbnQgcmM7CiAKIAkqd3JfYnVmID0gTlVMTDsKQEAgLTIxMiwxNyAmIzQzOzIxNCwzMSBAQCBpbnQgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3Qoc3RydWN0IHNtY19saW5rICpsaW5rLAogCQlpZiAocmMpCiAJCQlyZXR1cm4gcmM7CiAJfSBlbHNlIHsKLQkJcmMgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCgKLQkJCWxpbmstJmd0O3dyX3R4X3dhaXQsCi0JCQkhc21jX2xpbmtfc2VuZGFibGUobGluaykgfHwKLQkJCWxnci0mZ3Q7dGVybWluYXRpbmcgfHwKLQkJCShzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdF9pbmRleChsaW5rLCAmYW1wO2lkeCkgIT0gLUVCVVNZKSwKLQkJCVNNQ19XUl9UWF9XQUlUX0ZSRUVfU0xPVF9USU1FKTsKLQkJaWYgKCFyYykgewotCQkJLyogdGltZW91dCAtIHRlcm1pbmF0ZSBsaW5rICovCi0JCQlzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKGxpbmspOwotCQkJcmV0dXJuIC1FUElQRTsKJiM0MzsJCXJjID0gMDsKJiM0MzsJCWZvciAoOzspIHsKJiM0MzsJCQlwcmVwYXJlX3RvX3dhaXRfZXhjbHVzaXZlKCZhbXA7bGluay0mZ3Q7d3JfdHhfd2FpdCwgJmFtcDt3YWl0LAomIzQzOwkJCQkJCSAgVEFTS19JTlRFUlJVUFRJQkxFKTsKJiM0MzsJCQlpZiAoIXNtY19saW5rX3NlbmRhYmxlKGxpbmspIHx8IGxnci0mZ3Q7dGVybWluYXRpbmcgfHwKJiM0MzsJCQkgICAgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RfaW5kZXgobGluaywgJmFtcDtpZHgpICE9IC1FQlVTWSkKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJdGltZW91dCA9IHNjaGVkdWxlX3RpbWVvdXQodGltZW91dCk7CiYjNDM7CQkJLyogcmUtY2hlY2sgKi8KJiM0MzsJCQlpZiAoIXNtY19saW5rX3NlbmRhYmxlKGxpbmspIHx8IGxnci0mZ3Q7dGVybWluYXRpbmcgfHwKJiM0MzsJCQkgICAgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RfaW5kZXgobGluaywgJmFtcDtpZHgpICE9IC1FQlVTWSkKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJaWYgKCF0aW1lb3V0KSB7CiYjNDM7CQkJCS8qIHRpbWVvdXQgLSB0ZXJtaW5hdGUgbGluayAqLwomIzQzOwkJCQlzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKGxpbmspOwomIzQzOwkJCQlicmVhazsKJiM0MzsJCQl9CiYjNDM7CQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CiYjNDM7CQkJCXJjID0gLUVSRVNUQVJUU1lTOwomIzQzOwkJCQlicmVhazsKJiM0MzsJCQl9CiAJCX0KJiM0MzsJCWZpbmlzaF93YWl0KCZhbXA7bGluay0mZ3Q7d3JfdHhfd2FpdCwgJmFtcDt3YWl0KTsKJiM0MzsJCWlmIChyYykKJiM0MzsJCQlyZXR1cm4gcmM7CiAJCWlmIChpZHggPT0gbGluay0mZ3Q7d3JfdHhfY250KQogCQkJcmV0dXJuIC1FUElQRTsKIAl9CkBAIC0yODgsMTAgJiM0MzszMDQsMTAgQEAgaW50IHNtY193cl90eF9wdXRfc2xvdChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssCiAJfSBlbHNlIGlmIChsaW5rLSZndDtsZ3ItJmd0O3NtY192ZXJzaW9uID09IFNNQ19WMiAmYW1wOyZhbXA7CiAJCSAgIHBlbmQtJmd0O2lkeCA9PSBsaW5rLSZndDt3cl90eF9jbnQpIHsKIAkJLyogTGFyZ2UgdjIgYnVmZmVyICovCi0JCW1lbXNldCgmYW1wO2xpbmstJmd0O3dyX3R4X3YyX3BlbmQsIDAsCi0JCSAgICAgICBzaXplb2YobGluay0mZ3Q7d3JfdHhfdjJfcGVuZCkpOwotCQltZW1zZXQoJmFtcDtsaW5rLSZndDtsZ3ItJmd0O3dyX3R4X2J1Zl92MiwgMCwKLQkJICAgICAgIHNpemVvZihsaW5rLSZndDtsZ3ItJmd0O3dyX3R4X2J1Zl92MikpOwomIzQzOwkJbWVtc2V0KGxpbmstJmd0O3dyX3R4X3YyX3BlbmQsIDAsCiYjNDM7CQkgICAgICAgc2l6ZW9mKCpsaW5rLSZndDt3cl90eF92Ml9wZW5kKSk7CiYjNDM7CQltZW1zZXQobGluay0mZ3Q7bGdyLSZndDt3cl90eF9idWZfdjIsIDAsCiYjNDM7CQkgICAgICAgc2l6ZW9mKCpsaW5rLSZndDtsZ3ItJmd0O3dyX3R4X2J1Zl92MikpOwogCQlyZXR1cm4gMTsKIAl9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NTMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhpcyBTTUMgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RgIGluIGBuZXQvc21jL3NtY193ci5jYC4gVGhlIGZpcnN0IHRoaW5nIEkgc2VlIGlzIHRoZXkmIzM5O3JlIGRpdGNoaW5nIGB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dGAgZm9yIGEgY3VzdG9tIHdhaXQgbG9vcCB1c2luZyBgcHJlcGFyZV90b193YWl0X2V4Y2x1c2l2ZWAsIGBzY2hlZHVsZV90aW1lb3V0YCwgYW5kIGBmaW5pc2hfd2FpdGAuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIEkgd29uZGVyIHdoYXQgdGhlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBhcmUuIElzIHRoZXJlIGEgc3BlY2lmaWMgcmVhc29uIHRoZXkmIzM5O3JlIGF2b2lkaW5nIHRoZSBzdGFuZGFyZCBrZXJuZWwgbWVjaGFuaXNtcyBoZXJlPwoKVGhlbiBJIGhpdCBhIGJ1ZyBmaXggaW4gYHNtY193cl90eF9wdXRfc2xvdGAsIGFuZCB0aGlzIGNhdGNoZXMgbXkgZXllIGltbWVkaWF0ZWx5LiBUaGV5JiMzOTtyZSBjaGFuZ2luZyB0aGUgYG1lbXNldGAgY2FsbC4gVGhleSYjMzk7cmUgcmVwbGFjaW5nIGBtZW1zZXQoJmFtcDtsaW5rLSZndDt3cl90eF92Ml9wZW5kLCAwLCBzaXplb2YobGluay0mZ3Q7d3JfdHhfdjJfcGVuZCkpYCB3aXRoIHNvbWV0aGluZyBlbHNlLiBXYWl0LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdC4uLiBhaGEhIEl0JiMzOTtzIGBtZW1zZXQobGluay0mZ3Q7d3JfdHhfdjJfcGVuZCwgMCwgc2l6ZW9mKCpsaW5rLSZndDt3cl90eF92Ml9wZW5kKSlgLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBwb2ludGVyIGRlcmVmZXJlbmNpbmcgaXNzdWUuIFRoZSBvbGQgY29kZSB3YXMgbGlrZWx5IHplcm9pbmcgdGhlICpwb2ludGVyKiBpdHNlbGYsIHJhdGhlciB0aGFuIHRoZSBtZW1vcnkgaXQgcG9pbnRlZCB0by4gTGV0IG1lIHNlZS4uLiBJZiBgbGluay0mZ3Q7d3JfdHhfdjJfcGVuZGAgaXMgYSBwb2ludGVyLCB3aGljaCBJIHN1c3BlY3QgaXQgaXMsIHRoZSBwcmV2aW91cyBjb2RlIHdhcyBvbmx5IHplcm9pbmcgdGhlIGFkZHJlc3Mgc3RvcmVkIGluIHRoZSBwb2ludGVyIGl0c2VsZiwgd2hpY2ggaXMgcHJvYmFibHkgOCBieXRlcy4gVGhpcyBtZWFucyB0aGUgYWxsb2NhdGVkIGJ1ZmZlciB3YXNuJiMzOTt0IGFjdHVhbGx5IGdldHRpbmcgaW5pdGlhbGl6ZWQsIHJpZ2h0PwoKT2theSwgc28gaWYgdGhlIGJ1ZmZlciBpc24mIzM5O3QgemVyb2VkLCBjb3VsZCB0aGF0IGxlYWQgdG8gc29tZSBuYXN0aW5lc3MgZG93biB0aGUgbGluZSwgbWF5YmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdHJhbnNtaXR0ZWQgb3IgdXNlZD8gVGhhdCBjb3VsZCBiZSBhIHNlcmlvdXMgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSwgb3IgYXQgbGVhc3QgYSBwb3RlbnRpYWwgZGF0YSBjb3JydXB0aW9uIGlzc3VlLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgc3RydWN0dXJlIG9mIHRoaXMgdGhpbmcuLi4gVGltZSB0byBkaXZlIGludG8gdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBzbWNfbGlua2AgYW5kIGBzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXBgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGB3cl90eF92Ml9wZW5kYCBhbmQgYHdyX3R4X2J1Zl92MmAgYWN0dWFsbHkgKmFyZSogdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhpcyBmaXguIEdvdHRhIGdldCB0aGUgbG93LWRvd24gb24gdGhlIHNpemVzIGFuZCB1c2FnZSBwYXR0ZXJucyBvZiB0aGVzZSBidWZmZXJzLiBUaGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IHNtY19saW5rIFxceyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2NvcmUuaD04OT1zdHJ1Y3Qgc21jX3JkbWFfd3Ige1x0XHRcdFx0Lyogd29yayByZXF1ZXN0cyBwZXIgbWVzc2FnZVxuLS1cbm5ldC9zbWMvc21jX2NvcmUuaC05Ni1cbm5ldC9zbWMvc21jX2NvcmUuaDo5NzpzdHJ1Y3Qgc21jX2xpbmsge1xubmV0L3NtYy9zbWNfY29yZS5oLTk4LVx0c3RydWN0IHNtY19pYl9kZXZpY2VcdCpzbWNpYmRldjtcdC8qIGliLWRldmljZSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODQwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgU01DIExpbmsgU3RydWN0dXJlKioKCk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYHNtY19saW5rYCBzdHJ1Y3QuIExldCYjMzk7cyBoZWFkIHN0cmFpZ2h0IHRvIGBuZXQvc21jL3NtY19jb3JlLmhgLiBJIHdhbnQgdG8gcXVpY2tseSByZXZpZXcgaXRzIGtleSBtZW1iZXJzIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIG92ZXJhbGwgU01DIHByb3RvY29sIGltcGxlbWVudGF0aW9uLiBJJiMzOTttIHByaW1hcmlseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgdGhlIGN1cnJlbnQgc3RhdGUgYW5kIGhvdyBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIGxvd2VyIGxheWVycyBhbmQgdGhlIHNvY2tldC4gTGV0IG1lIHNlZS4uLiBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueXRoaW5nIHRoYXQgaGFzIHRvIGRvIHdpdGggY29ubmVjdGlvbiBlc3RhYmxpc2htZW50LCBkYXRhIHRyYW5zZmVyLCBhbmQgZXJyb3IgaGFuZGxpbmcuIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIGFzc3VtcHRpb25zIEkmIzM5O20gbWFraW5nIGFib3V0IGl0cyBpbnRlcm5hbCBzdGF0ZSBhcmUgc3RpbGwgdmFsaWQgd2l0aCByZXNwZWN0IHRvIHRoZSBjdXJyZW50IGNvZGUuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gbG9vayBmb3IgYW55IHJlY2VudCBjaGFuZ2VzIHRoYXQgbWlnaHQgaGF2ZSBhZmZlY3RlZCBpdHMgY29yZSBmdW5jdGlvbmFsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2NvcmUuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDk3Olx0c3RydWN0IHNtY19saW5rIHtcbiAgOTg6XHRcdHN0cnVjdCBzbWNfaWJfZGV2aWNlXHQqc21jaWJkZXY7XHQvKiBpYi1kZXZpY2UgKi9cbiAgOTk6XHRcdHU4XHRcdFx0aWJwb3J0O1x0XHQvKiBwb3J0IC0gdmFsdWVzIDEgfCAyICovXG4gMTAwOlx0XHRzdHJ1Y3QgaWJfcGRcdFx0KnJvY2VfcGQ7XHQvKiBJQiBwcm90ZWN0aW9uIGRvbWFpbixcbiAxMDE6XHRcdFx0XHRcdFx0XHQgKiB1bmlxdWUgZm9yIGV2ZXJ5IFJvQ0UgUVBcbiAxMDI6XHRcdFx0XHRcdFx0XHQgKi9cbiAxMDM6XHRcdHN0cnVjdCBpYl9xcFx0XHQqcm9jZV9xcDtcdC8qIElCIHF1ZXVlIHBhaXIgKi9cbiAxMDQ6XHRcdHN0cnVjdCBpYl9xcF9hdHRyXHRxcF9hdHRyO1x0LyogSUIgcXVldWUgcGFpciBhdHRyaWJ1dGVzICovXG4gMTA1Olx0XG4gMTA2Olx0XHRzdHJ1Y3Qgc21jX3dyX2J1Zlx0KndyX3R4X2J1ZnM7XHQvKiBXUiBzZW5kIHBheWxvYWQgYnVmZmVycyAqL1xuIDEwNzpcdFx0c3RydWN0IGliX3NlbmRfd3JcdCp3cl90eF9pYnM7XHQvKiBXUiBzZW5kIG1ldGEgZGF0YSAqL1xuIDEwODpcdFx0c3RydWN0IGliX3NnZVx0XHQqd3JfdHhfc2dlcztcdC8qIFdSIHNlbmQgZ2F0aGVyIG1ldGEgZGF0YSAqL1xuIDEwOTpcdFx0c3RydWN0IHNtY19yZG1hX3NnZXNcdCp3cl90eF9yZG1hX3NnZXM7LypSRE1BIFdSSVRFIGdhdGhlciBtZXRhIGRhdGEqL1xuIDExMDpcdFx0c3RydWN0IHNtY19yZG1hX3dyXHQqd3JfdHhfcmRtYXM7XHQvKiBXUiBSRE1BIFdSSVRFICovXG4gMTExOlx0XHRzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRcdCp3cl90eF9wZW5kcztcdC8qIFdSIHNlbmQgd2FpdGluZyBmb3IgQ1FFICovXG4gMTEyOlx0XHRzdHJ1Y3QgY29tcGxldGlvblx0KndyX3R4X2NvbXBsO1x0LyogV1Igc2VuZCBDUUUgY29tcGxldGlvbiAqL1xuIDExMzpcdFx0LyogYWJvdmUgZm91ciB2ZWN0b3JzIGhhdmUgd3JfdHhfY250IGVsZW1lbnRzIGFuZCB1c2UgdGhlIHNhbWUgaW5kZXggKi9cbiAxMTQ6XHRcdHN0cnVjdCBpYl9zZW5kX3dyXHQqd3JfdHhfdjJfaWI7XHQvKiBXUiBzZW5kIHYyIG1ldGEgZGF0YSAqL1xuIDExNTpcdFx0c3RydWN0IGliX3NnZVx0XHQqd3JfdHhfdjJfc2dlO1x0LyogV1Igc2VuZCB2MiBnYXRoZXIgbWV0YSBkYXRhKi9cbiAxMTY6XHRcdHN0cnVjdCBzbWNfd3JfdHhfcGVuZFx0KndyX3R4X3YyX3BlbmQ7XHQvKiBXUiBzZW5kIHYyIHdhaXRpbmcgZm9yIENRRSAqL1xuIDExNzpcdFx0ZG1hX2FkZHJfdFx0XHR3cl90eF9kbWFfYWRkcjtcdC8qIERNQSBhZGRyZXNzIG9mIHdyX3R4X2J1ZnMgKi9cbiAxMTg6XHRcdGRtYV9hZGRyX3RcdFx0d3JfdHhfdjJfZG1hX2FkZHI7IC8qIERNQSBhZGRyZXNzIG9mIHYyIHR4IGJ1ZiovXG4gMTE5Olx0XHRhdG9taWNfbG9uZ190XHRcdHdyX3R4X2lkO1x0Lyogc2VxICMgb2YgbGFzdCBzZW50IFdSICovXG4gMTIwOlx0XHR1bnNpZ25lZCBsb25nXHRcdCp3cl90eF9tYXNrO1x0LyogYml0IG1hc2sgb2YgdXNlZCBpbmRleGVzICovXG4gMTIxOlx0XHR1MzJcdFx0XHR3cl90eF9jbnQ7XHQvKiBudW1iZXIgb2YgV1Igc2VuZCBidWZmZXJzICovXG4gMTIyOlx0XHR3YWl0X3F1ZXVlX2hlYWRfdFx0d3JfdHhfd2FpdDtcdC8qIHdhaXQgZm9yIGZyZWUgV1Igc2VuZCBidWYgKi9cbiAxMjM6XHRcdHN0cnVjdCB7XG4gMTI0Olx0XHRcdHN0cnVjdCBwZXJjcHVfcmVmXHR3cl90eF9yZWZzO1xuIDEyNTpcdFx0fSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xuIDEyNjpcdFx0c3RydWN0IGNvbXBsZXRpb25cdHR4X3JlZl9jb21wO1xuIDEyNzpcdFxuIDEyODpcdFx0dThcdFx0XHQqd3JfcnhfYnVmcztcdC8qIFdSIHJlY3YgcGF5bG9hZCBidWZmZXJzICovXG4gMTI5Olx0XHRzdHJ1Y3QgaWJfcmVjdl93clx0KndyX3J4X2licztcdC8qIFdSIHJlY3YgbWV0YSBkYXRhICovXG4gMTMwOlx0XHRzdHJ1Y3QgaWJfc2dlXHRcdCp3cl9yeF9zZ2VzO1x0LyogV1IgcmVjdiBzY2F0dGVyIG1ldGEgZGF0YSAqL1xuIDEzMTpcdFx0LyogYWJvdmUgdGhyZWUgdmVjdG9ycyBoYXZlIHdyX3J4X2NudCBlbGVtZW50cyBhbmQgdXNlIHRoZSBzYW1lIGluZGV4ICovXG4gMTMyOlx0XHRpbnRcdFx0XHR3cl9yeF9zZ2VfY250OyAvKiByeCBzZ2UsIFYxIGlzIDEsIFYyIGlzIGVpdGhlciAyIG9yIDEgKi9cbiAxMzM6XHRcdGludFx0XHRcdHdyX3J4X2J1ZmxlbjtcdC8qIGJ1ZmZlciBsZW4gZm9yIHRoZSBmaXJzdCBzZ2UsIGxlbiBmb3IgdGhlXG4gMTM0Olx0XHRcdFx0XHRcdFx0ICogc2Vjb25kIHNnZSBpcyBsZ3Igc2hhcmVkIGlmIHJ4IHNnZSBpcyAyLlxuIDEzNTpcdFx0XHRcdFx0XHRcdCAqL1xuIDEzNjpcdFx0ZG1hX2FkZHJfdFx0XHR3cl9yeF9kbWFfYWRkcjtcdC8qIERNQSBhZGRyZXNzIG9mIHdyX3J4X2J1ZnMgKi9cbiAxMzc6XHRcdGRtYV9hZGRyX3RcdFx0d3JfcnhfdjJfZG1hX2FkZHI7IC8qIERNQSBhZGRyZXNzIG9mIHYyIHJ4IGJ1ZiovXG4gMTM4Olx0XHR1NjRcdFx0XHR3cl9yeF9pZDtcdC8qIHNlcSAjIG9mIGxhc3QgcmVjdiBXUiAqL1xuIDEzOTpcdFx0dTY0XHRcdFx0d3JfcnhfaWRfY29tcGw7IC8qIHNlcSAjIG9mIGxhc3QgY29tcGxldGVkIFdSICovXG4gMTQwOlx0XHR1MzJcdFx0XHR3cl9yeF9jbnQ7XHQvKiBudW1iZXIgb2YgV1IgcmVjdiBidWZmZXJzICovXG4gMTQxOlx0XHR1bnNpZ25lZCBsb25nXHRcdHdyX3J4X3RzdGFtcDtcdC8qIGppZmZpZXMgd2hlbiBsYXN0IGJ1ZiByeCAqL1xuIDE0MjpcdFx0d2FpdF9xdWV1ZV9oZWFkX3QgICAgICAgd3JfcnhfZW1wdHlfd2FpdDsgLyogd2FpdCBmb3IgUlEgZW1wdHkgKi9cbiAxNDM6XHRcbiAxNDQ6XHRcdHN0cnVjdCBpYl9yZWdfd3JcdHdyX3JlZztcdFx0LyogV1IgcmVnaXN0ZXIgbWVtb3J5IHJlZ2lvbiAqL1xuIDE0NTpcdFx0d2FpdF9xdWV1ZV9oZWFkX3RcdHdyX3JlZ193YWl0O1x0Lyogd2FpdCBmb3Igd3JfcmVnIHJlc3VsdCAqL1xuIDE0NjpcdFx0c3RydWN0IHtcbiAxNDc6XHRcdFx0c3RydWN0IHBlcmNwdV9yZWZcdHdyX3JlZ19yZWZzO1xuIDE0ODpcdFx0fSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xuIDE0OTpcdFx0c3RydWN0IGNvbXBsZXRpb25cdHJlZ19yZWZfY29tcDtcbiAxNTA6XHRcdGVudW0gc21jX3dyX3JlZ19zdGF0ZVx0d3JfcmVnX3N0YXRlO1x0Lyogc3RhdGUgb2Ygd3JfcmVnIHJlcXVlc3QgKi9cbiAxNTE6XHRcbiAxNTI6XHRcdHU4XHRcdFx0Z2lkW1NNQ19HSURfU0laRV07LyogZ2lkIG1hdGNoaW5nIHVzZWQgdmxhbiBpZCovXG4gMTUzOlx0XHR1OFx0XHRcdHNnaWRfaW5kZXg7XHQvKiBnaWQgaW5kZXggZm9yIHZsYW4gaWQgICAgICAqL1xuIDE1NDpcdFx0dTMyXHRcdFx0cGVlcl9xcG47XHQvKiBRUCBudW1iZXIgb2YgcGVlciAqL1xuIDE1NTpcdFx0ZW51bSBpYl9tdHVcdFx0cGF0aF9tdHU7XHQvKiB1c2VkIG10dSAqL1xuIDE1NjpcdFx0ZW51bSBpYl9tdHVcdFx0cGVlcl9tdHU7XHQvKiBtdHUgc2l6ZSBvZiBwZWVyICovXG4gMTU3Olx0XHR1MzJcdFx0XHRwc25faW5pdGlhbDtcdC8qIFFQIHR4IGluaXRpYWwgcGFja2V0IHNlcW5vICovXG4gMTU4Olx0XHR1MzJcdFx0XHRwZWVyX3BzbjtcdC8qIFFQIHJ4IGluaXRpYWwgcGFja2V0IHNlcW5vICovXG4gMTU5Olx0XHR1OFx0XHRcdHBlZXJfbWFjW0VUSF9BTEVOXTtcdC8qID0gZ2lkWzg6MTB8fDEzOjE1XSAqL1xuIDE2MDpcdFx0dThcdFx0XHRwZWVyX2dpZFtTTUNfR0lEX1NJWkVdO1x0LyogZ2lkIG9mIHBlZXIqL1xuIDE2MTpcdFx0dThcdFx0XHRsaW5rX2lkO1x0LyogdW5pcXVlICMgd2l0aGluIGxpbmsgZ3JvdXAgKi9cbiAxNjI6XHRcdHU4XHRcdFx0bGlua191aWRbU01DX0xHUl9JRF9TSVpFXTsgLyogdW5pcXVlIGxuayBpZCAqL1xuIDE2MzpcdFx0dThcdFx0XHRwZWVyX2xpbmtfdWlkW1NNQ19MR1JfSURfU0laRV07IC8qIHBlZXIgdWlkICovXG4gMTY0Olx0XHR1OFx0XHRcdGxpbmtfaWR4O1x0LyogaW5kZXggaW4gbGdyIGxpbmsgYXJyYXkgKi9cbiAxNjU6XHRcdHU4XHRcdFx0bGlua19pc19hc3ltO1x0LyogaXMgbGluayBhc3ltbWV0cmljPyAqL1xuIDE2NjpcdFx0dThcdFx0XHRjbGVhcmluZyA6IDE7XHQvKiBsaW5rIGlzIGJlaW5nIGNsZWFyZWQgKi9cbiAxNjc6XHRcdHJlZmNvdW50X3RcdFx0cmVmY250O1x0XHQvKiBsaW5rIHJlZmVyZW5jZSBjb3VudCAqL1xuIDE2ODpcdFx0c3RydWN0IHNtY19saW5rX2dyb3VwXHQqbGdyO1x0XHQvKiBwYXJlbnQgbGluayBncm91cCAqL1xuIDE2OTpcdFx0c3RydWN0IHdvcmtfc3RydWN0XHRsaW5rX2Rvd25fd3JrO1x0Lyogd3JrIHRvIGJyaW5nIGxpbmsgZG93biAqL1xuIDE3MDpcdFx0Y2hhclx0XHRcdGlibmFtZVtJQl9ERVZJQ0VfTkFNRV9NQVhdOyAvKiBpYiBkZXZpY2UgbmFtZSAqL1xuIDE3MTpcdFx0aW50XHRcdFx0bmRldl9pZmlkeDsgLyogbmV0d29yayBkZXZpY2UgaWZpbmRleCAqL1xuIDE3MjpcdFxuIDE3MzpcdFx0ZW51bSBzbWNfbGlua19zdGF0ZVx0c3RhdGU7XHRcdC8qIHN0YXRlIG9mIGxpbmsgKi9cbiAxNzQ6XHRcdHN0cnVjdCBkZWxheWVkX3dvcmtcdGxsY190ZXN0bGlua193cms7IC8qIHRlc3RsaW5rIHdvcmtlciAqL1xuIDE3NTpcdFx0c3RydWN0IGNvbXBsZXRpb25cdGxsY190ZXN0bGlua19yZXNwOyAvKiB3YWl0IGZvciByeCBvZiB0ZXN0bGluayAqL1xuIDE3NjpcdFx0aW50XHRcdFx0bGxjX3Rlc3RsaW5rX3RpbWU7IC8qIHRlc3RsaW5rIGludGVydmFsICovXG4gMTc3Olx0XHRhdG9taWNfdFx0XHRjb25uX2NudDsgLyogY29ubmVjdGlvbnMgb24gdGhpcyBsaW5rICovXG4gMTc4Olx0XHR1MTZcdFx0XHRtYXhfc2VuZF93cjtcbiAxNzk6XHRcdHUxNlx0XHRcdG1heF9yZWN2X3dyO1xuIDE4MDpcdH07XG4gMTgxOlx0XG4gMTgyOlx0LyogRm9yIG5vdyB3ZSBqdXN0IGFsbG93IG9uZSBwYXJhbGxlbCBsaW5rIHBlciBsaW5rIGdyb3VwLiBUaGUgU01DIHByb3RvY29sXG4gMTgzOlx0ICogYWxsb3dzIG1vcmUgKHVwIHRvIDgpLlxuIDE4NDpcdCAqL1xuIDE4NTpcdCNkZWZpbmUgU01DX0xJTktTX1BFUl9MR1JfTUFYXHQzXG4gMTg2Olx0I2RlZmluZSBTTUNfU0lOR0xFX0xJTktcdFx0MFxuIDE4NzpcdCNkZWZpbmUgU01DX0xJTktTX0FERF9MTktfTUlOXHQxXHQvKiBtaW4uICMgb2YgbGlua3MgcGVyIGxpbmsgZ3JvdXAgKi9cbiAxODg6XHQjZGVmaW5lIFNNQ19MSU5LU19BRERfTE5LX01BWFx0Mlx0LyogbWF4LiAjIG9mIGxpbmtzIHBlciBsaW5rIGdyb3VwLCBhbHNvIGlzIHRoZVxuIDE4OTpcdFx0XHRcdFx0XHQgKiBkZWZhdWx0IHZhbHVlIGZvciBzbWMtciB2MS4wIGFuZCB2Mi4wXG4gMTkwOlx0XHRcdFx0XHRcdCAqL1xuIDE5MTpcdCNkZWZpbmUgU01DX0xJTktTX1BFUl9MR1JfTUFYX1BSRUZFUlx0Mlx0LyogUHJlZmVycmVkIG1heCBsaW5rcyBwZXIgbGluayBncm91cCB1c2VkIGZvclxuIDE5MjpcdFx0XHRcdFx0XHRcdCAqIFNNQy1SIHYyLjEgYW5kIGxhdGVyIG5lZ290aWF0aW9uLCB2ZW5kb3JzIG9yXG4gMTkzOlx0XHRcdFx0XHRcdFx0ICogZGlzdHJpYnV0aW9ucyBtYXkgbW9kaWZ5IGl0IHRvIGEgdmFsdWUgYmV0d2VlblxuIDE5NDpcdFx0XHRcdFx0XHRcdCAqIDEtMiBhcyBuZWVkZWQuXG4gMTk1Olx0XHRcdFx0XHRcdFx0ICovXG4gMTk2Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzODkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVidWdnaW5nIGEgUG90ZW50aWFsIE5VTEwgUG9pbnRlciBEZXJlZmVyZW5jZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBgc3RydWN0IHNtY193cl90eF9wZW5kICp3cl90eF92Ml9wZW5kO2AuIFJpZ2h0LCBhIHBvaW50ZXIuIFRoZW4gdGhhdCBgbWVtc2V0YCBjYWxsLCBgbWVtc2V0KCZhbXA7bGluay0mZ3Q7d3JfdHhfdjJfcGVuZCwgMCwgc2l6ZW9mKGxpbmstJmd0O3dyX3R4X3YyX3BlbmQpKWAsIHRoYXQgd2FzIHplcm9pbmcgdGhlICpwb2ludGVyKiBpdHNlbGYsIG5vdCB0aGUgbWVtb3J5IGl0IHBvaW50cyB0by4gSG1tLCB0aGF0JiMzOTtzIG5vdCB3aGF0JiMzOTtzIGludGVuZGVkLgoKU28gYGxpbmstJmd0O3dyX3R4X3YyX3BlbmRgIGlzIGEgcG9pbnRlciB0byB0aGUgYHN0cnVjdCBzbWNfd3JfdHhfcGVuZGAuIElmIHRoYXQgYG1lbXNldGAgemVyb2VkIHRoZSBwb2ludGVyLCBpdCB3b3VsZCBzZXQgaXQgdG8gTlVMTC4gIEFuZCB0aGF0IG1ha2VzIG1lIHRoaW5rLCBpZiBgbGluay0mZ3Q7d3JfdHhfdjJfcGVuZGAgKndhcyogemVyb2VkLCBpdCB3b3VsZCBiZWNvbWUgTlVMTC4gVGhhdCYjMzk7cyBhIHRleHRib29rIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBzaXR1YXRpb24sIGFuZCBLQVNBTiBvciBhbnkgZGVjZW50IHN0YXRpYyBhbmFseXNpcyB0b29sIHdvdWxkIHBpY2sgdGhhdCB1cCBwcmV0dHkgcXVpY2tseSB0aGUgbmV4dCB0aW1lIGl0IHdhcyB1c2VkLiBJdCYjMzk7cyBhbGxvY2F0ZWQgc29tZXdoZXJlLCB0aG91Z2guIElmIHRoYXQgYmVjYW1lIE5VTEwsIGFuZCB3ZSBhY2Nlc3NlZCBpdCwgd2Ugc2hvdWxkIGJlIHNlZWluZyB0aGF0IHByZXR0eSBlYXNpbHkuCgpCdXQgd2FpdCwgSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZyByZWxhdGVkLiBXaGF0IGFib3V0IGBsaW5rLSZndDtsZ3ItJmd0O3dyX3R4X2J1Zl92MmA/IFRoYXQmIzM5O3MgbGlrZWx5IHJlbGF0ZWQsIGFuZCBJIHdhbnQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGBzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXBgIHRvIHNlZSBob3cgdGhvc2UgYXJlIHJlbGF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBzbWNfbGlua19ncm91cCBcXHsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL3NtY19jb3JlLmg9MjgxPXN0cnVjdCBzbWNfbGxjX2Zsb3cge1xuLS1cbm5ldC9zbWMvc21jX2NvcmUuaC0yODUtXG5uZXQvc21jL3NtY19jb3JlLmg6Mjg2OnN0cnVjdCBzbWNfbGlua19ncm91cCB7XG5uZXQvc21jL3NtY19jb3JlLmgtMjg3LVx0c3RydWN0IGxpc3RfaGVhZFx0bGlzdDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA0OAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgYW5kIHRoaW5raW5nIGFib3V0IHRoZSBzdHJ1Y3Q6CgoqKkFuYWx5emluZyBgc3RydWN0IHNtY19saW5rX2dyb3VwYCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXBgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGF0JiMzOTtzIHRoZSBjb250ZXh0IGhlcmU/IFRoaXMgc2NyZWFtcyBTeXN0ZW1zIE1hbmFnZW1lbnQgQ29udHJvbGxlciwgbGlrZWx5IGRlYWxpbmcgd2l0aCBzb21lIGtpbmQgb2YgbGlua2VkIG9yIGdyb3VwZWQgcmVzb3VyY2UuJiMzNDsgS25vd2luZyB0aGUgbmFtZSwgSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBpbmZvcm1hdGlvbiBhYm91dCBob3cgZGlmZmVyZW50IFNNQyBsaW5rcyBhcmUgb3JnYW5pemVkIGFuZCBtYW5hZ2VkIHRvZ2V0aGVyLiBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIGVsZW1lbnRzIGxpa2UgbGluayBJRHMsIHBlcmhhcHMgc29tZSBraW5kIG9mIGdyb3VwIGlkZW50aWZpZXIsIGFuZCBwb3RlbnRpYWxseSBwb2ludGVycyBvciByZWZlcmVuY2VzIHRvIHRoZSBpbmRpdmlkdWFsIGxpbmtzIHRoZW1zZWx2ZXMsIG9yIGRhdGEgYWJvdXQgdGhlIGdyb3VwIGFzIGEgd2hvbGUuIEkgYWxzbyBleHBlY3QgdGhhdCB0aGVyZSYjMzk7bGwgYmUgZGF0YSByZWdhcmRpbmcgdGhlIHN0YXRlcyBvZiB0aGUgbGlua3MgKGFjdGl2ZS9pbmFjdGl2ZSwgaGVhbHRoeS9mYWlsZWQpLCB3aGljaCB3aWxsIGRpY3RhdGUgdGhlIGdyb3VwJiMzOTtzIG92ZXJhbGwgc3RhdGUuIEkgYmV0IHRoZXJlJiMzOTtzIHNvbWUgc29ydCBvZiByZXNvdXJjZSBsb2NraW5nIG1lY2hhbmlzbSBvciBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlIGluY2x1ZGVkIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIGR1cmluZyBjb25jdXJyZW50IGFjY2VzcyBvZiB0aGUgbGlua3MuIEkmIzM5O20gYWxzbyByZWFsbHkgY3VyaW91cyB3aGV0aGVyIHRoaXMgZGF0YSBzdHJ1Y3R1cmUgaXMgZGVzaWduZWQgdG8gcmVwcmVzZW50IGEgc3RhdGljIGNvbmZpZ3VyYXRpb24gb3IgaWYgaXQgY2FuIGJlIGR5bmFtaWNhbGx5IG1vZGlmaWVkIOKAkyB0aGF0JiMzOTtsbCByZWFsbHkgYWZmZWN0IGhvdyB0aGlzIHN0cnVjdHVyZSBpcyB1c2VkIGFuZCBtYW5hZ2VkIGJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVtLiBVbHRpbWF0ZWx5LCBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IFNNQyBsaW5rcyBhcmUgYWJzdHJhY3RlZCBhbmQgY29udHJvbGxlZCBhdCB0aGUgc29mdHdhcmUgbGV2ZWwuIEkgYWxzbyB3b3VsZG4mIzM5O3QgYmUgc3VycHJpc2VkIHRvIHNlZSBhIHBlcmZvcm1hbmNlIGVsZW1lbnQgaGVyZSwgc3VjaCBhcyBkYXRhIHN0cnVjdHVyZXMgdGhhdCBmYWNpbGl0YXRlIGZhc3QgbG9va3VwcyBvZiBtZW1iZXJzIGluIHRoZSBsaW5rIGdyb3VwLiBJJiMzOTttIGVhZ2VyIHRvIGRpZyBpbiBhbmQgc2VlIGhvdyB3ZWxsIHRoaXMgdGhpbmcgaXMgZGVzaWduZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfY29yZS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjg2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjg2Olx0c3RydWN0IHNtY19saW5rX2dyb3VwIHtcbiAyODc6XHRcdHN0cnVjdCBsaXN0X2hlYWRcdGxpc3Q7XG4gMjg4Olx0XHRzdHJ1Y3QgcmJfcm9vdFx0XHRjb25uc19hbGw7XHQvKiBjb25uZWN0aW9uIHRyZWUgKi9cbiAyODk6XHRcdHJ3bG9ja190XHRcdGNvbm5zX2xvY2s7XHQvKiBwcm90ZWN0cyBjb25uc19hbGwgKi9cbiAyOTA6XHRcdHVuc2lnbmVkIGludFx0XHRjb25uc19udW07XHQvKiBjdXJyZW50ICMgb2YgY29ubmVjdGlvbnMgKi9cbiAyOTE6XHRcdHVuc2lnbmVkIHNob3J0XHRcdHZsYW5faWQ7XHQvKiB2bGFuIGlkIG9mIGxpbmsgZ3JvdXAgKi9cbiAyOTI6XHRcbiAyOTM6XHRcdHN0cnVjdCBsaXN0X2hlYWRcdHNuZGJ1ZnNbU01DX1JNQkVfU0laRVNdOy8qIHR4IGJ1ZmZlcnMgKi9cbiAyOTQ6XHRcdHN0cnVjdCByd19zZW1hcGhvcmVcdHNuZGJ1ZnNfbG9jaztcdC8qIHByb3RlY3RzIHR4IGJ1ZmZlcnMgKi9cbiAyOTU6XHRcdHN0cnVjdCBsaXN0X2hlYWRcdHJtYnNbU01DX1JNQkVfU0laRVNdO1x0LyogcnggYnVmZmVycyAqL1xuIDI5NjpcdFx0c3RydWN0IHJ3X3NlbWFwaG9yZVx0cm1ic19sb2NrO1x0LyogcHJvdGVjdHMgcnggYnVmZmVycyAqL1xuIDI5NzpcdFx0dTY0XHRcdFx0YWxsb2Nfc25kYnVmcztcdC8qIHN0YXRzIG9mIHR4IGJ1ZmZlcnMgKi9cbiAyOTg6XHRcdHU2NFx0XHRcdGFsbG9jX3JtYnM7XHQvKiBzdGF0cyBvZiByeCBidWZmZXJzICovXG4gMjk5Olx0XG4gMzAwOlx0XHR1OFx0XHRcdGlkW1NNQ19MR1JfSURfU0laRV07XHQvKiB1bmlxdWUgbGdyIGlkICovXG4gMzAxOlx0XHRzdHJ1Y3QgZGVsYXllZF93b3JrXHRmcmVlX3dvcms7XHQvKiBkZWxheWVkIGZyZWVpbmcgb2YgYW4gbGdyICovXG4gMzAyOlx0XHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdHRlcm1pbmF0ZV93b3JrO1x0LyogYWJub3JtYWwgbGdyIHRlcm1pbmF0aW9uICovXG4gMzAzOlx0XHRzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdFx0KnR4X3dxO1x0XHQvKiB3cSBmb3IgY29ubi4gdHggd29ya2VycyAqL1xuIDMwNDpcdFx0dThcdFx0XHRzeW5jX2VyciA6IDE7XHQvKiBsZ3Igbm8gbG9uZ2VyIGZpdHMgdG8gcGVlciAqL1xuIDMwNTpcdFx0dThcdFx0XHR0ZXJtaW5hdGluZyA6IDE7LyogbGdyIGlzIHRlcm1pbmF0aW5nICovXG4gMzA2Olx0XHR1OFx0XHRcdGZyZWVpbmcgOiAxO1x0LyogbGdyIGlzIGJlaW5nIGZyZWVkICovXG4gMzA3Olx0XG4gMzA4Olx0XHRyZWZjb3VudF90XHRcdHJlZmNudDtcdFx0LyogbGdyIHJlZmVyZW5jZSBjb3VudCAqL1xuIDMwOTpcdFx0Ym9vbFx0XHRcdGlzX3NtY2Q7XHQvKiBTTUMtUiBvciBTTUMtRCAqL1xuIDMxMDpcdFx0dThcdFx0XHRzbWNfdmVyc2lvbjtcbiAzMTE6XHRcdHU4XHRcdFx0bmVnb3RpYXRlZF9laWRbU01DX01BWF9FSURfTEVOXTtcbiAzMTI6XHRcdHU4XHRcdFx0cGVlcl9vcztcdC8qIHBlZXIgb3BlcmF0aW5nIHN5c3RlbSAqL1xuIDMxMzpcdFx0dThcdFx0XHRwZWVyX3NtY19yZWxlYXNlO1xuIDMxNDpcdFx0dThcdFx0XHRwZWVyX2hvc3RuYW1lW1NNQ19NQVhfSE9TVE5BTUVfTEVOXTtcbiAzMTU6XHRcdHVuaW9uIHtcbiAzMTY6XHRcdFx0c3RydWN0IHsgLyogU01DLVIgKi9cbiAzMTc6XHRcdFx0XHRlbnVtIHNtY19sZ3Jfcm9sZVx0cm9sZTtcbiAzMTg6XHRcdFx0XHRcdFx0XHQvKiBjbGllbnQgb3Igc2VydmVyICovXG4gMzE5Olx0XHRcdFx0c3RydWN0IHNtY19saW5rXHRcdGxua1tTTUNfTElOS1NfUEVSX0xHUl9NQVhdO1xuIDMyMDpcdFx0XHRcdFx0XHRcdC8qIHNtYyBsaW5rICovXG4gMzIxOlx0XHRcdFx0c3RydWN0IHNtY193cl92Ml9idWZcdCp3cl9yeF9idWZfdjI7XG4gMzIyOlx0XHRcdFx0XHRcdFx0LyogV1IgdjIgcmVjdiBwYXlsb2FkIGJ1ZmZlciAqL1xuIDMyMzpcdFx0XHRcdHN0cnVjdCBzbWNfd3JfdjJfYnVmXHQqd3JfdHhfYnVmX3YyO1xuIDMyNDpcdFx0XHRcdFx0XHRcdC8qIFdSIHYyIHNlbmQgcGF5bG9hZCBidWZmZXIgKi9cbiAzMjU6XHRcdFx0XHRjaGFyXHRcdFx0cGVlcl9zeXN0ZW1pZFtTTUNfU1lTVEVNSURfTEVOXTtcbiAzMjY6XHRcdFx0XHRcdFx0XHQvKiB1bmlxdWUgc3lzdGVtX2lkIG9mIHBlZXIgKi9cbiAzMjc6XHRcdFx0XHRzdHJ1Y3Qgc21jX3J0b2tlblx0cnRva2Vuc1tTTUNfUk1CU19QRVJfTEdSX01BWF1cbiAzMjg6XHRcdFx0XHRcdFx0XHRbU01DX0xJTktTX1BFUl9MR1JfTUFYXTtcbiAzMjk6XHRcdFx0XHRcdFx0XHQvKiByZW1vdGUgYWRkci9rZXkgcGFpcnMgKi9cbiAzMzA6XHRcdFx0XHRERUNMQVJFX0JJVE1BUChydG9rZW5zX3VzZWRfbWFzaywgU01DX1JNQlNfUEVSX0xHUl9NQVgpO1xuIDMzMTpcdFx0XHRcdFx0XHRcdC8qIHVzZWQgcnRva2VuIGVsZW1lbnRzICovXG4gMzMyOlx0XHRcdFx0dThcdFx0XHRuZXh0X2xpbmtfaWQ7XG4gMzMzOlx0XHRcdFx0ZW51bSBzbWNfbGdyX3R5cGVcdHR5cGU7XG4gMzM0Olx0XHRcdFx0ZW51bSBzbWNyX2J1Zl90eXBlXHRidWZfdHlwZTtcbiAzMzU6XHRcdFx0XHRcdFx0XHQvKiByZWR1bmRhbmN5IHN0YXRlICovXG4gMzM2Olx0XHRcdFx0dThcdFx0XHRwbmV0X2lkW1NNQ19NQVhfUE5FVElEX0xFTiAmIzQzOyAxXTtcbiAzMzc6XHRcdFx0XHRcdFx0XHQvKiBwbmV0IGlkIG9mIHRoaXMgbGdyICovXG4gMzM4Olx0XHRcdFx0c3RydWN0IGxpc3RfaGVhZFx0bGxjX2V2ZW50X3E7XG4gMzM5Olx0XHRcdFx0XHRcdFx0LyogcXVldWUgZm9yIGxsYyBldmVudHMgKi9cbiAzNDA6XHRcdFx0XHRzcGlubG9ja190XHRcdGxsY19ldmVudF9xX2xvY2s7XG4gMzQxOlx0XHRcdFx0XHRcdFx0LyogcHJvdGVjdHMgbGxjX2V2ZW50X3EgKi9cbiAzNDI6XHRcdFx0XHRzdHJ1Y3Qgcndfc2VtYXBob3JlXHRsbGNfY29uZl9tdXRleDtcbiAzNDM6XHRcdFx0XHRcdFx0XHQvKiBwcm90ZWN0cyBsZ3IgcmVjb25maWcuICovXG4gMzQ0Olx0XHRcdFx0c3RydWN0IHdvcmtfc3RydWN0XHRsbGNfYWRkX2xpbmtfd29yaztcbiAzNDU6XHRcdFx0XHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdGxsY19kZWxfbGlua193b3JrO1xuIDM0NjpcdFx0XHRcdHN0cnVjdCB3b3JrX3N0cnVjdFx0bGxjX2V2ZW50X3dvcms7XG4gMzQ3Olx0XHRcdFx0XHRcdFx0LyogbGxjIGV2ZW50IHdvcmtlciAqL1xuIDM0ODpcdFx0XHRcdHdhaXRfcXVldWVfaGVhZF90XHRsbGNfZmxvd193YWl0ZXI7XG4gMzQ5Olx0XHRcdFx0XHRcdFx0LyogdzQgbmV4dCBsbGMgZXZlbnQgKi9cbiAzNTA6XHRcdFx0XHR3YWl0X3F1ZXVlX2hlYWRfdFx0bGxjX21zZ193YWl0ZXI7XG4gMzUxOlx0XHRcdFx0XHRcdFx0LyogdzQgbmV4dCBsbGMgbXNnICovXG4gMzUyOlx0XHRcdFx0c3RydWN0IHNtY19sbGNfZmxvd1x0bGxjX2Zsb3dfbGNsO1xuIDM1MzpcdFx0XHRcdFx0XHRcdC8qIGxsYyBsb2NhbCBjb250cm9sIGZpZWxkICovXG4gMzU0Olx0XHRcdFx0c3RydWN0IHNtY19sbGNfZmxvd1x0bGxjX2Zsb3dfcm10O1xuIDM1NTpcdFx0XHRcdFx0XHRcdC8qIGxsYyByZW1vdGUgY29udHJvbCBmaWVsZCAqL1xuIDM1NjpcdFx0XHRcdHN0cnVjdCBzbWNfbGxjX3FlbnRyeVx0KmRlbGF5ZWRfZXZlbnQ7XG4gMzU3Olx0XHRcdFx0XHRcdFx0LyogYXJyaXZlZCB3aGVuIGZsb3cgYWN0aXZlICovXG4gMzU4Olx0XHRcdFx0c3BpbmxvY2tfdFx0XHRsbGNfZmxvd19sb2NrO1xuIDM1OTpcdFx0XHRcdFx0XHRcdC8qIHByb3RlY3RzIGxsYyBmbG93ICovXG4gMzYwOlx0XHRcdFx0aW50XHRcdFx0bGxjX3Rlc3RsaW5rX3RpbWU7XG4gMzYxOlx0XHRcdFx0XHRcdFx0LyogbGluayBrZWVwIGFsaXZlIHRpbWUgKi9cbiAzNjI6XHRcdFx0XHR1MzJcdFx0XHRsbGNfdGVybWluYXRpb25fcnNuO1xuIDM2MzpcdFx0XHRcdFx0XHRcdC8qIHJzbiBjb2RlIGZvciB0ZXJtaW5hdGlvbiAqL1xuIDM2NDpcdFx0XHRcdHU4XHRcdFx0bmV4dGhvcF9tYWNbRVRIX0FMRU5dO1xuIDM2NTpcdFx0XHRcdHU4XHRcdFx0dXNlc19nYXRld2F5O1xuIDM2NjpcdFx0XHRcdF9fYmUzMlx0XHRcdHNhZGRyO1xuIDM2NzpcdFx0XHRcdFx0XHRcdC8qIG5ldCBuYW1lc3BhY2UgKi9cbiAzNjg6XHRcdFx0XHRzdHJ1Y3QgbmV0XHRcdCpuZXQ7XG4gMzY5Olx0XHRcdFx0dThcdFx0XHRtYXhfY29ubnM7XG4gMzcwOlx0XHRcdFx0XHRcdFx0LyogbWF4IGNvbm4gY2FuIGJlIGFzc2lnbmVkIHRvIGxnciAqL1xuIDM3MTpcdFx0XHRcdHU4XHRcdFx0bWF4X2xpbmtzO1xuIDM3MjpcdFx0XHRcdFx0XHRcdC8qIG1heCBsaW5rcyBjYW4gYmUgYWRkZWQgaW4gbGdyICovXG4gMzczOlx0XHRcdFx0dTE2XHRcdFx0bWF4X3NlbmRfd3I7XG4gMzc0Olx0XHRcdFx0XHRcdFx0LyogbnVtYmVyIG9mIFdSIGJ1ZmZlcnMgb24gc2VuZCAqL1xuIDM3NTpcdFx0XHRcdHUxNlx0XHRcdG1heF9yZWN2X3dyO1xuIDM3NjpcdFx0XHRcdFx0XHRcdC8qIG51bWJlciBvZiBXUiBidWZmZXJzIG9uIHJlY3YgKi9cbiAzNzc6XHRcdFx0fTtcbiAzNzg6XHRcdFx0c3RydWN0IHsgLyogU01DLUQgKi9cbiAzNzk6XHRcdFx0XHRzdHJ1Y3Qgc21jZF9naWRcdFx0cGVlcl9naWQ7XG4gMzgwOlx0XHRcdFx0XHRcdFx0LyogUGVlciBHSUQgKHJlbW90ZSkgKi9cbiAzODE6XHRcdFx0XHRzdHJ1Y3Qgc21jZF9kZXZcdFx0KnNtY2Q7XG4gMzgyOlx0XHRcdFx0XHRcdFx0LyogSVNNIGRldmljZSBmb3IgVkxBTiByZWcuICovXG4gMzgzOlx0XHRcdFx0dThcdFx0XHRwZWVyX3NodXRkb3duIDogMTtcbiAzODQ6XHRcdFx0XHRcdFx0XHQvKiBwZWVyIHRyaWdnZXJlZCBzaHV0ZG93bm4gKi9cbiAzODU6XHRcdFx0fTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTI0OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDcml0aWNhbCBNZW1vcnkgSW5pdGlhbGl6YXRpb24gRml4KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBzZWUgc29tZXRoaW5nIGltcG9ydGFudC4gVGhlIGNvZGUgb3JpZ2luYWxseSBoYWQgYG1lbXNldCgmYW1wO2xpbmstJmd0O2xnci0mZ3Q7d3JfdHhfYnVmX3YyLCAwLCBzaXplb2YobGluay0mZ3Q7bGdyLSZndDt3cl90eF9idWZfdjIpKWAuIFJpZ2h0LCBgd3JfdHhfYnVmX3YyYCBpcyAqYWxzbyogYSBwb2ludGVyLCBhIGBzdHJ1Y3Qgc21jX3dyX3YyX2J1ZiAqYCwgc28gdGFraW5nIGl0cyBhZGRyZXNzIGFuZCB6ZXJvaW5nIHRoZSAqcG9pbnRlciBpdHNlbGYqIGlzIGRlZmluaXRlbHkgd3JvbmcuIFRoZSBwYXRjaCBpcyBjaGFuZ2luZyBpdCB0byBgbWVtc2V0KGxpbmstJmd0O2xnci0mZ3Q7d3JfdHhfYnVmX3YyLCAwLCBzaXplb2YoKmxpbmstJmd0O2xnci0mZ3Q7d3JfdHhfYnVmX3YyKSlgLiAgVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyB0aGlzIGlzIG5vdyBjb3JyZWN0bHkgemVyb2luZyB0aGUgYWN0dWFsIGB3cl90eF9idWZfdjJgIGJ1ZmZlciB0aGF0IHRoZSBwb2ludGVyIHJlZmVyZW5jZXMuCgpXYWl0IGEgbWludXRlLi4uIGlmIHRoZSBvcmlnaW5hbCBjb2RlIHdhcyB6ZXJvaW5nIHRoZSAqcG9pbnRlciogYW5kIGVzc2VudGlhbGx5IGNvcnJ1cHRpbmcgaXQsIHRoZW4gdGhhdCBtZWFucyB0aGUgcG9pbnRlciB3b3VsZCBsaWtlbHkgYmUgc2V0IHRvIGBOVUxMYCAob3Igc29tZSBvdGhlciBnYXJiYWdlIHZhbHVlKS4gVGhhdCBtZWFucyBhbnkgc3Vic2VxdWVudCBhY2Nlc3MgdG8gYGxpbmstJmd0O2xnci0mZ3Q7d3JfdHhfYnVmX3YyYCBzaG91bGQgaGF2ZSB0cmlnZ2VyZWQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB3aGVyZSBgd3JfdHhfYnVmX3YyYCBpcyB1c2VkIHRvIGNvbmZpcm0gdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d3JfdHhfYnVmX3YyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfY29yZS5oPTI4Nj1zdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAge1xuLS1cbm5ldC9zbWMvc21jX2NvcmUuaC0zMjItXHRcdFx0XHRcdFx0LyogV1IgdjIgcmVjdiBwYXlsb2FkIGJ1ZmZlciAqL1xubmV0L3NtYy9zbWNfY29yZS5oOjMyMzpcdFx0XHRzdHJ1Y3Qgc21jX3dyX3YyX2J1Zlx0KndyX3R4X2J1Zl92Mjtcbm5ldC9zbWMvc21jX2NvcmUuaC0zMjQtXHRcdFx0XHRcdFx0LyogV1IgdjIgc2VuZCBwYXlsb2FkIGJ1ZmZlciAqL1xuLS1cbm5ldC9zbWMvc21jX3dyLmM9Nzc9c3RhdGljIGlubGluZSB2b2lkIHNtY193cl90eF9wcm9jZXNzX2NxZShzdHJ1Y3QgaWJfd2MgKndjKVxuLS1cbm5ldC9zbWMvc21jX3dyLmMtMTAzLVx0XHQgICAgICAgc2l6ZW9mKCpsaW5rLVx1MDAzZXdyX3R4X3YyX3BlbmQpKTtcbm5ldC9zbWMvc21jX3dyLmM6MTA0Olx0XHRtZW1zZXQobGluay1cdTAwM2VsZ3ItXHUwMDNld3JfdHhfYnVmX3YyLCAwLFxubmV0L3NtYy9zbWNfd3IuYzoxMDU6XHRcdCAgICAgICBzaXplb2YoKmxpbmstXHUwMDNlbGdyLVx1MDAzZXdyX3R4X2J1Zl92MikpO1xubmV0L3NtYy9zbWNfd3IuYy0xMDYtXHR9IGVsc2Uge1xuLS1cbm5ldC9zbWMvc21jX3dyLmMtMTI0LVx0XHRcdCAgICAgICBzaXplb2YoKmxpbmstXHUwMDNld3JfdHhfdjJfcGVuZCkpO1xubmV0L3NtYy9zbWNfd3IuYzoxMjU6XHRcdFx0bWVtc2V0KGxpbmstXHUwMDNlbGdyLVx1MDAzZXdyX3R4X2J1Zl92MiwgMCxcbm5ldC9zbWMvc21jX3dyLmM6MTI2Olx0XHRcdCAgICAgICBzaXplb2YoKmxpbmstXHUwMDNlbGdyLVx1MDAzZXdyX3R4X2J1Zl92MikpO1xubmV0L3NtYy9zbWNfd3IuYy0xMjctXHRcdH1cbi0tXG5uZXQvc21jL3NtY193ci5jPTI2MD1pbnQgc21jX3dyX3R4X2dldF92Ml9zbG90KHN0cnVjdCBzbWNfbGluayAqbGluayxcbi0tXG5uZXQvc21jL3NtY193ci5jLTI4MS1cdHdyX2liLVx1MDAzZXdyX2lkID0gd3JfaWQ7XG5uZXQvc21jL3NtY193ci5jOjI4MjpcdCp3cl9idWYgPSBsaW5rLVx1MDAzZWxnci1cdTAwM2V3cl90eF9idWZfdjI7XG5uZXQvc21jL3NtY193ci5jLTI4My1cdCp3cl9wZW5kX3ByaXYgPSBcdTAwMjZ3cl9wZW5kLVx1MDAzZXByaXY7XG4tLVxubmV0L3NtYy9zbWNfd3IuYz0yODc9aW50IHNtY193cl90eF9wdXRfc2xvdChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXG4tLVxubmV0L3NtYy9zbWNfd3IuYy0zMDgtXHRcdCAgICAgICBzaXplb2YoKmxpbmstXHUwMDNld3JfdHhfdjJfcGVuZCkpO1xubmV0L3NtYy9zbWNfd3IuYzozMDk6XHRcdG1lbXNldChsaW5rLVx1MDAzZWxnci1cdTAwM2V3cl90eF9idWZfdjIsIDAsXG5uZXQvc21jL3NtY193ci5jOjMxMDpcdFx0ICAgICAgIHNpemVvZigqbGluay1cdTAwM2VsZ3ItXHUwMDNld3JfdHhfYnVmX3YyKSk7XG5uZXQvc21jL3NtY193ci5jLTMxMS1cdFx0cmV0dXJuIDE7XG4tLVxubmV0L3NtYy9zbWNfd3IuYz02OTg9dm9pZCBzbWNfd3JfZnJlZV9sZ3JfbWVtKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyKVxuLS1cbm5ldC9zbWMvc21jX3dyLmMtNzA0LVx0bGdyLVx1MDAzZXdyX3J4X2J1Zl92MiA9IE5VTEw7XG5uZXQvc21jL3NtY193ci5jOjcwNTpcdGtmcmVlKGxnci1cdTAwM2V3cl90eF9idWZfdjIpO1xubmV0L3NtYy9zbWNfd3IuYzo3MDY6XHRsZ3ItXHUwMDNld3JfdHhfYnVmX3YyID0gTlVMTDtcbm5ldC9zbWMvc21jX3dyLmMtNzA3LX1cbi0tXG5uZXQvc21jL3NtY193ci5jPTc0MT1pbnQgc21jX3dyX2FsbG9jX2xncl9tZW0oc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IpXG4tLVxubmV0L3NtYy9zbWNfd3IuYy03NDgtXHRcdHJldHVybiAtRU5PTUVNO1xubmV0L3NtYy9zbWNfd3IuYzo3NDk6XHRsZ3ItXHUwMDNld3JfdHhfYnVmX3YyID0ga3phbGxvYyhTTUNfV1JfQlVGX1YyX1NJWkUsIEdGUF9LRVJORUwpO1xubmV0L3NtYy9zbWNfd3IuYzo3NTA6XHRpZiAoIWxnci1cdTAwM2V3cl90eF9idWZfdjIpIHtcbm5ldC9zbWMvc21jX3dyLmMtNzUxLVx0XHRrZnJlZShsZ3ItXHUwMDNld3JfcnhfYnVmX3YyKTtcbi0tXG5uZXQvc21jL3NtY193ci5jPTg3MT1pbnQgc21jX3dyX2NyZWF0ZV9saW5rKHN0cnVjdCBzbWNfbGluayAqbG5rKVxuLS1cbm5ldC9zbWMvc21jX3dyLmMtODk3LVx0XHRsbmstXHUwMDNld3JfdHhfdjJfZG1hX2FkZHIgPSBpYl9kbWFfbWFwX3NpbmdsZShpYmRldixcbm5ldC9zbWMvc21jX3dyLmM6ODk4Olx0XHRcdGxuay1cdTAwM2VsZ3ItXHUwMDNld3JfdHhfYnVmX3YyLCBTTUNfV1JfQlVGX1YyX1NJWkUsXG5uZXQvc21jL3NtY193ci5jLTg5OS1cdFx0XHRETUFfVE9fREVWSUNFKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMDEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFNNQyBXcml0ZSBUcmFuc2FjdGlvbiBCdWZmZXIqKgoKT2theSwgc28gYHNtY193cl90eF9nZXRfdjJfc2xvdGAgaXMgcmV0dXJuaW5nIGBsaW5rLSZndDtsZ3ItJmd0O3dyX3R4X2J1Zl92MmAgdGhyb3VnaCBgKndyX2J1ZmAuIFRoZSBjYWxsZXIgdGhlbiBwb3B1bGF0ZXMgdGhpcyBidWZmZXIgYW5kIHNlbmRzIGl0LiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGlzOiBpZiBgc21jX3dyX3R4X3B1dF9zbG90YCBpcyBtaXN0YWtlbmx5IHplcm9pbmcgb3V0IHRoZSAqcG9pbnRlciogYGxpbmstJmd0O2xnci0mZ3Q7d3JfdHhfYnVmX3YyYCwgdGhlIG5leHQgY2FsbCB0byBgc21jX3dyX3R4X2dldF92Ml9zbG90YCBpcyBnb2luZyB0byByZXR1cm4gYE5VTExgIHZpYSBgKndyX2J1ZmAuIFRoZW4sIHRoZSBjYWxsZXIgd2lsbCB0cnkgdG8gZGVyZWZlcmVuY2UgYSBgTlVMTGAgcG9pbnRlciwgd2hpY2ggaXMgYSBjbGFzc2ljLCBlYXNpbHkgZGV0ZWN0YWJsZSBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UgYW5kIGEga2VybmVsIGNyYXNoLgoKQnV0IHdhaXQsIGhvbGQgb24uIElzIGl0IHBvc3NpYmxlIHRoYXQgYGxpbmstJmd0O2xnci0mZ3Q7d3JfdHhfYnVmX3YyYCAqaXNuJiMzOTt0KiB6ZXJvZWQsIGFuZCB3ZSYjMzk7cmUgcG90ZW50aWFsbHkgc2VuZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8sIHRoYXQmIzM5O3Mgbm90IGxpa2VseS4gSSByZWNhbGwgaXQmIzM5O3MgYWxsb2NhdGVkIGluIGBzbWNfd3JfYWxsb2NfbGdyX21lbWAgdXNpbmcgYGt6YWxsb2MoU01DX1dSX0JVRl9WMl9TSVpFLCBHRlBfS0VSTkVMKTtgLiBUaGUgYGt6YWxsb2NgIGZ1bmN0aW9uIGd1YXJhbnRlZXMgdGhlIG1lbW9yeSBpcyB6ZXJvZWQgb3V0IGluaXRpYWxseS4gU28sIHRoZSBidWZmZXIgaXMgYWxsb2NhdGVkLCB6ZXJvZWQsIHVzZWQgdG8gdHJhbnNtaXQgZGF0YSwgYW5kIHRoZW4gYHNtY193cl90eF9wdXRfc2xvdGAgaXMgY2FsbGVkIHRvIGNsZWFyIGl0IGZvciBzdWJzZXF1ZW50IHVzZS4gVGhlIHByb2JsZW0gaXMgdGhhdCB0aGUgY2xlYXJpbmcgbWF5IGJlIGZhaWxpbmcuIFRoZSBidWcgaXMgdGhhdCBpdCBpcyBzdXBwb3NlZCB0byBjbGVhciB0aGUgKmJ1ZmZlciogYnV0IGl0IGlzIGNsZWFyaW5nIHRoZSAqcG9pbnRlciosIHdoaWNoIHdvdWxkIHJlc3VsdCBpbiBhIE5VTEwgcG9pbnRlci4gVGhlIHBvaW50ZXIgYmVjb21lcyBOVUxMLgoKU28sIGhlcmUmIzM5O3MgdGhlIHNlcXVlbmNlOiBgc21jX3dyX3R4X2dldF92Ml9zbG90YCByZXR1cm5zIGEgdmFsaWQgcG9pbnRlciAoaW5pdGlhbGx5IHplcm9lZCkuIFRoZSBjYWxsZXIgdXNlcyBpdCwgdGhlbiBgc21jX3dyX3R4X3B1dF9zbG90YCBlZmZlY3RpdmVseSB0dXJucyBpdCBpbnRvIGEgYE5VTExgIHBvaW50ZXIuIFRoZSBuZXh0IGNhbGwgdG8gYHNtY193cl90eF9nZXRfdjJfc2xvdGAgcmV0dXJucyBgTlVMTGAsIGFuZCB0aGUgY2FsbGVyIHRoZW4gdHJpZXMgdG8gd3JpdGUgdG8gaXQsIGNhdXNpbmcgYSBjcmFzaC4KCkkgbmVlZCB0byBpbW1lZGlhdGVseSBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHNtY193cl90eF9wdXRfc2xvdGAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHByb2JsZW0gYWxtb3N0IGNlcnRhaW5seSBsaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX3dyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI4NzpcdGludCBzbWNfd3JfdHhfcHV0X3Nsb3Qoc3RydWN0IHNtY19saW5rICpsaW5rLFxuIDI4ODpcdFx0XHQgICAgICAgc3RydWN0IHNtY193cl90eF9wZW5kX3ByaXYgKndyX3BlbmRfcHJpdilcbiAyODk6XHR7XG4gMjkwOlx0XHRzdHJ1Y3Qgc21jX3dyX3R4X3BlbmQgKnBlbmQ7XG4gMjkxOlx0XG4gMjkyOlx0XHRwZW5kID0gY29udGFpbmVyX29mKHdyX3BlbmRfcHJpdiwgc3RydWN0IHNtY193cl90eF9wZW5kLCBwcml2KTtcbiAyOTM6XHRcdGlmIChwZW5kLVx1MDAzZWlkeCBcdTAwM2MgbGluay1cdTAwM2V3cl90eF9jbnQpIHtcbiAyOTQ6XHRcdFx0dTMyIGlkeCA9IHBlbmQtXHUwMDNlaWR4O1xuIDI5NTpcdFxuIDI5NjpcdFx0XHQvKiBjbGVhciB0aGUgZnVsbCBzdHJ1Y3Qgc21jX3dyX3R4X3BlbmQgaW5jbHVkaW5nIC5wcml2ICovXG4gMjk3Olx0XHRcdG1lbXNldChcdTAwMjZsaW5rLVx1MDAzZXdyX3R4X3BlbmRzW2lkeF0sIDAsXG4gMjk4Olx0XHRcdCAgICAgICBzaXplb2YobGluay1cdTAwM2V3cl90eF9wZW5kc1tpZHhdKSk7XG4gMjk5Olx0XHRcdG1lbXNldChcdTAwMjZsaW5rLVx1MDAzZXdyX3R4X2J1ZnNbaWR4XSwgMCxcbiAzMDA6XHRcdFx0ICAgICAgIHNpemVvZihsaW5rLVx1MDAzZXdyX3R4X2J1ZnNbaWR4XSkpO1xuIDMwMTpcdFx0XHR0ZXN0X2FuZF9jbGVhcl9iaXQoaWR4LCBsaW5rLVx1MDAzZXdyX3R4X21hc2spO1xuIDMwMjpcdFx0XHR3YWtlX3VwKFx1MDAyNmxpbmstXHUwMDNld3JfdHhfd2FpdCk7XG4gMzAzOlx0XHRcdHJldHVybiAxO1xuIDMwNDpcdFx0fSBlbHNlIGlmIChsaW5rLVx1MDAzZWxnci1cdTAwM2VzbWNfdmVyc2lvbiA9PSBTTUNfVjIgXHUwMDI2XHUwMDI2XG4gMzA1Olx0XHRcdCAgIHBlbmQtXHUwMDNlaWR4ID09IGxpbmstXHUwMDNld3JfdHhfY250KSB7XG4gMzA2Olx0XHRcdC8qIExhcmdlIHYyIGJ1ZmZlciAqL1xuIDMwNzpcdFx0XHRtZW1zZXQobGluay1cdTAwM2V3cl90eF92Ml9wZW5kLCAwLFxuIDMwODpcdFx0XHQgICAgICAgc2l6ZW9mKCpsaW5rLVx1MDAzZXdyX3R4X3YyX3BlbmQpKTtcbiAzMDk6XHRcdFx0bWVtc2V0KGxpbmstXHUwMDNlbGdyLVx1MDAzZXdyX3R4X2J1Zl92MiwgMCxcbiAzMTA6XHRcdFx0ICAgICAgIHNpemVvZigqbGluay1cdTAwM2VsZ3ItXHUwMDNld3JfdHhfYnVmX3YyKSk7XG4gMzExOlx0XHRcdHJldHVybiAxO1xuIDMxMjpcdFx0fVxuIDMxMzpcdFxuIDMxNDpcdFx0cmV0dXJuIDA7XG4gMzE1Olx0fVxuIDMxNjpcdFxuIDMxNzpcdC8qIFNlbmQgcHJlcGFyZWQgV1Igc2xvdCB2aWEgaWJfcG9zdF9zZW5kLlxuIDMxODpcdCAqIEBwcml2OiBwb2ludGVyIHRvIHNtY193cl90eF9wZW5kX3ByaXYgaWRlbnRpZnlpbmcgcHJlcGFyZWQgbWVzc2FnZSBidWZmZXJcbiAzMTk6XHQgKi9cbiAzMjA6XHRpbnQgc21jX3dyX3R4X3NlbmQoc3RydWN0IHNtY19saW5rICpsaW5rLCBzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRfcHJpdiAqcHJpdilcbiAzMjE6XHR7XG4gMzIyOlx0XHRzdHJ1Y3Qgc21jX3dyX3R4X3BlbmQgKnBlbmQ7XG4gMzIzOlx0XHRpbnQgcmM7XG4gMzI0Olx0XG4gMzI1Olx0XHRpYl9yZXFfbm90aWZ5X2NxKGxpbmstXHUwMDNlc21jaWJkZXYtXHUwMDNlcm9jZV9jcV9zZW5kLFxuIDMyNjpcdFx0XHRcdCBJQl9DUV9ORVhUX0NPTVAgfCBJQl9DUV9SRVBPUlRfTUlTU0VEX0VWRU5UUyk7XG4gMzI3Olx0XHRwZW5kID0gY29udGFpbmVyX29mKHByaXYsIHN0cnVjdCBzbWNfd3JfdHhfcGVuZCwgcHJpdik7XG4gMzI4Olx0XHRyYyA9IGliX3Bvc3Rfc2VuZChsaW5rLVx1MDAzZXJvY2VfcXAsIFx1MDAyNmxpbmstXHUwMDNld3JfdHhfaWJzW3BlbmQtXHUwMDNlaWR4XSwgTlVMTCk7XG4gMzI5Olx0XHRpZiAocmMpIHtcbiAzMzA6XHRcdFx0c21jX3dyX3R4X3B1dF9zbG90KGxpbmssIHByaXYpO1xuIDMzMTpcdFx0XHRzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKGxpbmspO1xuIDMzMjpcdFx0fVxuIDMzMzpcdFx0cmV0dXJuIHJjO1xuIDMzNDpcdH1cbiAzMzU6XHRcbiAzMzY6XHRpbnQgc21jX3dyX3R4X3YyX3NlbmQoc3RydWN0IHNtY19saW5rICpsaW5rLCBzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRfcHJpdiAqcHJpdixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4NTIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDIENvZGUgU25pcHBldCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGF0IGBtZW1zZXRgIGNhbGwgaW1tZWRpYXRlbHkgZ3JhYnMgbXkgYXR0ZW50aW9uLiBJIHNlZSB0aGF0IHRoZSBvcmlnaW5hbCBjb2RlIHNuaXBwZXQgaW52b2x2ZXMgdHdvIGBtZW1zZXRgIG9wZXJhdGlvbnMsIHRhcmdldGluZyBgbGluay0mZ3Q7d3JfdHhfdjJfcGVuZGAgYW5kIGBsaW5rLSZndDtsZ3ItJmd0O3dyX3R4X2J1Zl92MmAuIFRoZSBrZXkgaGVyZSwgYW5kIEkmIzM5O20gc3VyZSBJIGRvbiYjMzk7dCBuZWVkIHRvIHBvaW50IHRoaXMgb3V0LCBpcyB1bmRlcnN0YW5kaW5nIHRoZSBkYXRhIHR5cGVzIGludm9sdmVkLgoKSSByZWNvZ25pemUgdGhhdCBib3RoIGBsaW5rLSZndDt3cl90eF92Ml9wZW5kYCBhbmQgYGxpbmstJmd0O2xnci0mZ3Q7d3JfdHhfYnVmX3YyYCBhcmUgKnBvaW50ZXJzKi4gVGhlIGNvZGUgaXMgY2xlYXJseSB6ZXJvaW5nIHRoZSAqbWVtb3J5IGFkZHJlc3MqIG9mIHRoZSBwb2ludGVycy4gYHNpemVvZigpYCB3aWxsIHJldHVybiB0aGUgc2l6ZSBvZiB0aGUgKnBvaW50ZXIgaXRzZWxmKiwgd2hpY2ggaXMgOCBieXRlcyBvbiBhIDY0LWJpdCBhcmNoaXRlY3R1cmUg4oCTIHN0YW5kYXJkIHN0dWZmLiBUaGVyZWZvcmUsIHRoZSBlZmZlY3Qgb2YgdGhlc2UgYG1lbXNldGAgY2FsbHMgaXMgdG8gZWZmZWN0aXZlbHkgbnVsbGlmeSB0aG9zZSBwb2ludGVycy4KClNpbmNlIHRoZXNlIHBvaW50ZXJzIGFyZSBpbml0aWFsaXplZCB0byBOVUxMLCB0aGVuIGl0IHdpbGwgaGF2ZSBpbXBsaWNhdGlvbnMgd2hlbiB0aGUgYHNtY193cl90eF9nZXRfdjJfc2xvdGAgaXMgY2FsbGVkLCBhbmQgSSBuZWVkIHRvIHJldmlldyB0aGlzIGZ1bmN0aW9uIG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfd3IuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjYwOlx0aW50IHNtY193cl90eF9nZXRfdjJfc2xvdChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXG4gMjYxOlx0XHRcdFx0ICBzbWNfd3JfdHhfaGFuZGxlciBoYW5kbGVyLFxuIDI2MjpcdFx0XHRcdCAgc3RydWN0IHNtY193cl92Ml9idWYgKip3cl9idWYsXG4gMjYzOlx0XHRcdFx0ICBzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRfcHJpdiAqKndyX3BlbmRfcHJpdilcbiAyNjQ6XHR7XG4gMjY1Olx0XHRzdHJ1Y3Qgc21jX3dyX3R4X3BlbmQgKndyX3BlbmQ7XG4gMjY2Olx0XHRzdHJ1Y3QgaWJfc2VuZF93ciAqd3JfaWI7XG4gMjY3Olx0XHR1NjQgd3JfaWQ7XG4gMjY4Olx0XG4gMjY5Olx0XHRpZiAobGluay1cdTAwM2V3cl90eF92Ml9wZW5kLVx1MDAzZWlkeCA9PSBsaW5rLVx1MDAzZXdyX3R4X2NudClcbiAyNzA6XHRcdFx0cmV0dXJuIC1FQlVTWTtcbiAyNzE6XHRcbiAyNzI6XHRcdCp3cl9idWYgPSBOVUxMO1xuIDI3MzpcdFx0KndyX3BlbmRfcHJpdiA9IE5VTEw7XG4gMjc0Olx0XHR3cl9pZCA9IHNtY193cl90eF9nZXRfbmV4dF93cl9pZChsaW5rKTtcbiAyNzU6XHRcdHdyX3BlbmQgPSBsaW5rLVx1MDAzZXdyX3R4X3YyX3BlbmQ7XG4gMjc2Olx0XHR3cl9wZW5kLVx1MDAzZXdyX2lkID0gd3JfaWQ7XG4gMjc3Olx0XHR3cl9wZW5kLVx1MDAzZWhhbmRsZXIgPSBoYW5kbGVyO1xuIDI3ODpcdFx0d3JfcGVuZC1cdTAwM2VsaW5rID0gbGluaztcbiAyNzk6XHRcdHdyX3BlbmQtXHUwMDNlaWR4ID0gbGluay1cdTAwM2V3cl90eF9jbnQ7XG4gMjgwOlx0XHR3cl9pYiA9IGxpbmstXHUwMDNld3JfdHhfdjJfaWI7XG4gMjgxOlx0XHR3cl9pYi1cdTAwM2V3cl9pZCA9IHdyX2lkO1xuIDI4MjpcdFx0KndyX2J1ZiA9IGxpbmstXHUwMDNlbGdyLVx1MDAzZXdyX3R4X2J1Zl92MjtcbiAyODM6XHRcdCp3cl9wZW5kX3ByaXYgPSBcdTAwMjZ3cl9wZW5kLVx1MDAzZXByaXY7XG4gMjg0Olx0XHRyZXR1cm4gMDtcbiAyODU6XHR9XG4gMjg2Olx0XG4gMjg3Olx0aW50IHNtY193cl90eF9wdXRfc2xvdChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXG4gMjg4Olx0XHRcdCAgICAgICBzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRfcHJpdiAqd3JfcGVuZF9wcml2KVxuIDI4OTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5NjgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW1tZWRpYXRlIEJ1ZyBBbmFseXNpcyoqCgpPa2F5LCBoZXJlJiMzOTtzIHRoZSBkZWFsLiBJJiMzOTt2ZSBiZWVuIHN0YXJpbmcgYXQgdGhpcyBjb2RlLCBhbmQgaXQmIzM5O3MgaGl0dGluZyBtZSByaWdodCBiZXR3ZWVuIHRoZSBleWVzLiBJZiBgbGluay0mZ3Q7d3JfdHhfdjJfcGVuZGAgaXMgZXZlciB6ZXJv4oCUbWVhbmluZyBpdCYjMzk7cyBwb2ludGluZyB0byBub3RoaW5nLCBpdCYjMzk7cyBOVUxM4oCUdGhlbiB0aGF0IGxpbmUgaXMgZ29pbmcgdG8gYmxvdyB1cC4gVHJ5aW5nIHRvIGFjY2VzcyBgbGluay0mZ3Q7d3JfdHhfdjJfcGVuZC0mZ3Q7aWR4YCB3aGVuIHRoYXQgcG9pbnRlciBpcyBnYXJiYWdlIGlzIGEgY2xhc3NpYyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIEJhbmchIEluc3RhbnQgY3Jhc2guIFNvLCB0aGUgY29yZSBpc3N1ZSBpcyBzdHJhaWdodGZvcndhcmQ6IHdlJiMzOTtyZSBkZXJlZmVyZW5jaW5nIGEgTlVMTCBwb2ludGVyLgoKQnV0IEkmIzM5O20gbm90IGp1c3Qgc3RvcHBpbmcgYXQgdGhlIGVhc3kgc3R1ZmYuIEkgbmVlZCB0byBrbm93IHRoZSBpbXBsaWNhdGlvbnMuIElzIHRoZXJlIGFueSBjaGFuY2UgdGhpcyBpcyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIHRoYXQgY291bGQgbGVhayBpbmZvcm1hdGlvbj8gSWYgdGhlIHBvaW50ZXIgaXMgemVyb2VkLCBpdCBqdXN0IGNyYXNoZXMuIEFuZCBob3cgZG9lcyB0aGF0IGZ1bmN0aW9uIGBzbWNfd3JfdHhfcHJvY2Vzc19jcWVgIHJlbGF0ZSB0byBgc21jX3dyX3R4X3B1dF9zbG90YD8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc21jL3NtY193ci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA3NzpcdHN0YXRpYyBpbmxpbmUgdm9pZCBzbWNfd3JfdHhfcHJvY2Vzc19jcWUoc3RydWN0IGliX3djICp3YylcbiAgNzg6XHR7XG4gIDc5Olx0XHRzdHJ1Y3Qgc21jX3dyX3R4X3BlbmQgcG5kX3NuZDtcbiAgODA6XHRcdHN0cnVjdCBzbWNfbGluayAqbGluaztcbiAgODE6XHRcdHUzMiBwbmRfc25kX2lkeDtcbiAgODI6XHRcbiAgODM6XHRcdGxpbmsgPSB3Yy1cdTAwM2VxcC1cdTAwM2VxcF9jb250ZXh0O1xuICA4NDpcdFxuICA4NTpcdFx0aWYgKHdjLVx1MDAzZW9wY29kZSA9PSBJQl9XQ19SRUdfTVIpIHtcbiAgODY6XHRcdFx0aWYgKHdjLVx1MDAzZXN0YXR1cylcbiAgODc6XHRcdFx0XHRsaW5rLVx1MDAzZXdyX3JlZ19zdGF0ZSA9IEZBSUxFRDtcbiAgODg6XHRcdFx0ZWxzZVxuICA4OTpcdFx0XHRcdGxpbmstXHUwMDNld3JfcmVnX3N0YXRlID0gQ09ORklSTUVEO1xuICA5MDpcdFx0XHRzbWNfd3Jfd2FrZXVwX3JlZ193YWl0KGxpbmspO1xuICA5MTpcdFx0XHRyZXR1cm47XG4gIDkyOlx0XHR9XG4gIDkzOlx0XG4gIDk0Olx0XHRwbmRfc25kX2lkeCA9IHNtY193cl90eF9maW5kX3BlbmRpbmdfaW5kZXgobGluaywgd2MtXHUwMDNld3JfaWQpO1xuICA5NTpcdFx0aWYgKHBuZF9zbmRfaWR4ID09IGxpbmstXHUwMDNld3JfdHhfY250KSB7XG4gIDk2Olx0XHRcdGlmIChsaW5rLVx1MDAzZWxnci1cdTAwM2VzbWNfdmVyc2lvbiAhPSBTTUNfVjIgfHxcbiAgOTc6XHRcdFx0ICAgIGxpbmstXHUwMDNld3JfdHhfdjJfcGVuZC1cdTAwM2V3cl9pZCAhPSB3Yy1cdTAwM2V3cl9pZClcbiAgOTg6XHRcdFx0XHRyZXR1cm47XG4gIDk5Olx0XHRcdGxpbmstXHUwMDNld3JfdHhfdjJfcGVuZC1cdTAwM2V3Y19zdGF0dXMgPSB3Yy1cdTAwM2VzdGF0dXM7XG4gMTAwOlx0XHRcdG1lbWNweShcdTAwMjZwbmRfc25kLCBsaW5rLVx1MDAzZXdyX3R4X3YyX3BlbmQsIHNpemVvZihwbmRfc25kKSk7XG4gMTAxOlx0XHRcdC8qIGNsZWFyIHRoZSBmdWxsIHN0cnVjdCBzbWNfd3JfdHhfcGVuZCBpbmNsdWRpbmcgLnByaXYgKi9cbiAxMDI6XHRcdFx0bWVtc2V0KGxpbmstXHUwMDNld3JfdHhfdjJfcGVuZCwgMCxcbiAxMDM6XHRcdFx0ICAgICAgIHNpemVvZigqbGluay1cdTAwM2V3cl90eF92Ml9wZW5kKSk7XG4gMTA0Olx0XHRcdG1lbXNldChsaW5rLVx1MDAzZWxnci1cdTAwM2V3cl90eF9idWZfdjIsIDAsXG4gMTA1Olx0XHRcdCAgICAgICBzaXplb2YoKmxpbmstXHUwMDNlbGdyLVx1MDAzZXdyX3R4X2J1Zl92MikpO1xuIDEwNjpcdFx0fSBlbHNlIHtcbiAxMDc6XHRcdFx0bGluay1cdTAwM2V3cl90eF9wZW5kc1twbmRfc25kX2lkeF0ud2Nfc3RhdHVzID0gd2MtXHUwMDNlc3RhdHVzO1xuIDEwODpcdFx0XHRpZiAobGluay1cdTAwM2V3cl90eF9wZW5kc1twbmRfc25kX2lkeF0uY29tcGxfcmVxdWVzdGVkKVxuIDEwOTpcdFx0XHRcdGNvbXBsZXRlKFx1MDAyNmxpbmstXHUwMDNld3JfdHhfY29tcGxbcG5kX3NuZF9pZHhdKTtcbiAxMTA6XHRcdFx0bWVtY3B5KFx1MDAyNnBuZF9zbmQsIFx1MDAyNmxpbmstXHUwMDNld3JfdHhfcGVuZHNbcG5kX3NuZF9pZHhdLFxuIDExMTpcdFx0XHQgICAgICAgc2l6ZW9mKHBuZF9zbmQpKTtcbiAxMTI6XHRcdFx0LyogY2xlYXIgdGhlIGZ1bGwgc3RydWN0IHNtY193cl90eF9wZW5kIGluY2x1ZGluZyAucHJpdiAqL1xuIDExMzpcdFx0XHRtZW1zZXQoXHUwMDI2bGluay1cdTAwM2V3cl90eF9wZW5kc1twbmRfc25kX2lkeF0sIDAsXG4gMTE0Olx0XHRcdCAgICAgICBzaXplb2YobGluay1cdTAwM2V3cl90eF9wZW5kc1twbmRfc25kX2lkeF0pKTtcbiAxMTU6XHRcdFx0bWVtc2V0KFx1MDAyNmxpbmstXHUwMDNld3JfdHhfYnVmc1twbmRfc25kX2lkeF0sIDAsXG4gMTE2Olx0XHRcdCAgICAgICBzaXplb2YobGluay1cdTAwM2V3cl90eF9idWZzW3BuZF9zbmRfaWR4XSkpO1xuIDExNzpcdFx0XHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChwbmRfc25kX2lkeCwgbGluay1cdTAwM2V3cl90eF9tYXNrKSlcbiAxMTg6XHRcdFx0XHRyZXR1cm47XG4gMTE5Olx0XHR9XG4gMTIwOlx0XG4gMTIxOlx0XHRpZiAod2MtXHUwMDNlc3RhdHVzKSB7XG4gMTIyOlx0XHRcdGlmIChsaW5rLVx1MDAzZWxnci1cdTAwM2VzbWNfdmVyc2lvbiA9PSBTTUNfVjIpIHtcbiAxMjM6XHRcdFx0XHRtZW1zZXQobGluay1cdTAwM2V3cl90eF92Ml9wZW5kLCAwLFxuIDEyNDpcdFx0XHRcdCAgICAgICBzaXplb2YoKmxpbmstXHUwMDNld3JfdHhfdjJfcGVuZCkpO1xuIDEyNTpcdFx0XHRcdG1lbXNldChsaW5rLVx1MDAzZWxnci1cdTAwM2V3cl90eF9idWZfdjIsIDAsXG4gMTI2Olx0XHRcdFx0ICAgICAgIHNpemVvZigqbGluay1cdTAwM2VsZ3ItXHUwMDNld3JfdHhfYnVmX3YyKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzE2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTAwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNNQyBXcml0ZSBUcmFuc2FjdGlvbiBDb2RlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEluIGBzbWNfd3JfdHhfcHJvY2Vzc19jcWVgLCBJIHNlZSB0aGUgY29kZSBleHBsaWNpdGx5IHplcm9pbmcgb3V0IGBsaW5rLSZndDt3cl90eF92Ml9wZW5kYCBhbmQgYGxpbmstJmd0O2xnci0mZ3Q7d3JfdHhfYnVmX3YyYC4gVGhhdCYjMzk7cyBnb29kOyBpdCBjb25maXJtcyB0aGF0IHRoZSBpbml0aWFsIHRob3VnaHQgYWJvdXQgdGhlIGlzc3VlIGluIHRoYXQgZnVuY3Rpb24gaXMgY29ycmVjdCwgYW5kIG5vdCB0aGUgc291cmNlIG9mIHRoZSBwcm9ibGVtLgoKVGhlIGJ1ZywgdGhlbiwgc2VlbXMgdG8gcmVzaWRlIHNxdWFyZWx5IGluIGBzbWNfd3JfdHhfcHV0X3Nsb3RgLiBUaGlzIGZ1bmN0aW9uIGlzIGludm9rZWQgd2hlbiBgaWJfcG9zdF9zZW5kYCBmYWlscywgb3Igd2hlbiBhIHNsb3QgaXMgcmV0dXJuZWQgd2l0aG91dCBzZW5kaW5nLiBJdCB6ZXJvZXMgYSBwb2ludGVyLCBhbmQgYWZ0ZXIgdGhhdCwgdGhlIHBvaW50ZXIgaXMgc2V0IHRvIE5VTEwuIFRoZSBpbXBsaWNhdGlvbiBpcyB0aGF0IHN1YnNlcXVlbnQgY2FsbHMgdG8gYHNtY193cl90eF9nZXRfdjJfc2xvdGAgb3IgYHNtY193cl90eF9wcm9jZXNzX2NxZWAgd2lsbCB0aGVuIGRlcmVmZXJlbmNlIGEgTlVMTCBwb2ludGVyLiBBIGNsYXNzaWMsIG5hc3R5IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4gR290IGl0LgoKTm93LCB0aGF0IG90aGVyIHBhcnQgb2YgdGhlIHBhdGNoLi4uIHRoZSBvbmUgdGhhdCBhbHRlcnMgdGhlIHdhaXRpbmcgbWVjaGFuaXNtLiBXaHkgc3dpdGNoIGZyb20gYHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0YCB0byB0aGF0IG9wZW4tY29kZWQgd2FpdCBsb29wIHdpdGggYHByZXBhcmVfdG9fd2FpdF9leGNsdXNpdmVgPyBBaCwgcmlnaHQuIGB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dGAgdXNlcyBgcHJlcGFyZV90b193YWl0YCwgd2hpY2ggaXNuJiMzOTt0IGV4Y2x1c2l2ZS4gVGhpcyBtZWFucyB3aGVuIGEgc2xvdCAqZG9lcyogYmVjb21lIGZyZWUsIG11bHRpcGxlIHRocmVhZHMgY291bGQgZ2V0IHdva2VuIHVwIOKAkyBhICYjMzQ7dGh1bmRlcmluZyBoZXJkJiMzNDsgc2NlbmFyaW8uIGBwcmVwYXJlX3RvX3dhaXRfZXhjbHVzaXZlYCwgaG93ZXZlciwgd2FrZXMgKm9ubHkgb25lKiB3YWl0aW5nIHRocmVhZC4gVGhpcyBpcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgcHJldmVudGluZyB0aGUgd2FzdGUgb2YgYSB0aHVuZGVyaW5nIGhlcmQsIGFuZCBhbHNvIG1ha2VzIHRoZSBjb2RlIG1vcmUgcm9idXN0IGFnYWluc3QgcmFjZSBjb25kaXRpb25zLiBJdCYjMzk7cyBhIGNvbmN1cnJlbmN5IGltcHJvdmVtZW50LCByZWFsbHksIG5vdCBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSBJIHRob3VnaHQgYWJvdXQuCgpIYW5nIG9uLiBMZXQmIzM5O3MgbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3Npbmcgc29tZXRoaW5nLiBJZiB3ZSAqd2VyZSogdXNpbmcgYHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0YCwgbXVsdGlwbGUgdGhyZWFkcyBjb3VsZCB3YWtlIHVwLCBhbmQgdGhlbiBgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RfaW5kZXhgIG1pZ2h0IGdpdmUgdGhlIHNhbWUgaW5kZXggdG8gbXVsdGlwbGUgdGhyZWFkcy4gQnV0Li4uIHdhaXQuIGBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdF9pbmRleGAgdXNlcyBgdGVzdF9hbmRfc2V0X2JpdGAuIFRoYXQgKnNob3VsZCogZW5zdXJlIGF0b21pY2l0eSBhbmQgcHJldmVudCB0aGUgcmFjZS4gU28sIG5vLCB0aGUgc3dpdGNoIHRvIGV4Y2x1c2l2ZSB3YWl0aW5nIGlzICpwcmltYXJpbHkqIGFib3V0IHRoZSBwZXJmb3JtYW5jZSBnYWluIGZyb20gYXZvaWRpbmcgdGhlIHRodW5kZXJpbmcgaGVyZC4gSXQmIzM5O3MgYSBwZXJmb3JtYW5jZS9jb25jdXJyZW5jeSBpbXByb3ZlbWVudC4gVGhlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1ZyBpcyBzdGlsbCB0aGUgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBzbWNfd3JfdHhfcHV0X3Nsb3RgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX3dyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE4MDpcdFx0KmlkeCA9IGxpbmstXHUwMDNld3JfdHhfY250O1xuIDE4MTpcdFx0cmV0dXJuIC1FQlVTWTtcbiAxODI6XHR9XG4gMTgzOlx0XG4gMTg0Olx0LyoqXG4gMTg1Olx0ICogc21jX3dyX3R4X2dldF9mcmVlX3Nsb3QoKSAtIHJldHVybnMgYnVmZmVyIGZvciBtZXNzYWdlIGFzc2VtYmx5LFxuIDE4NjpcdCAqXHRcdFx0YW5kIHNldHMgaW5mbyBmb3IgcGVuZGluZyB0cmFuc21pdCB0cmFja2luZ1xuIDE4NzpcdCAqIEBsaW5rOlx0XHRQb2ludGVyIHRvIHNtY19saW5rIHVzZWQgdG8gbGF0ZXIgc2VuZCB0aGUgbWVzc2FnZS5cbiAxODg6XHQgKiBAaGFuZGxlcjpcdFx0U2VuZCBjb21wbGV0aW9uIGhhbmRsZXIgZnVuY3Rpb24gcG9pbnRlci5cbiAxODk6XHQgKiBAd3JfYnVmOlx0XHRPdXQgdmFsdWUgcmV0dXJucyBwb2ludGVyIHRvIG1lc3NhZ2UgYnVmZmVyLlxuIDE5MDpcdCAqIEB3cl9yZG1hX2J1ZjpcdE91dCB2YWx1ZSByZXR1cm5zIHBvaW50ZXIgdG8gcmRtYSB3b3JrIHJlcXVlc3QuXG4gMTkxOlx0ICogQHdyX3BlbmRfcHJpdjpcdE91dCB2YWx1ZSByZXR1cm5zIHBvaW50ZXIgc2VydmluZyBhcyBoYW5kbGVyIGNvbnRleHQuXG4gMTkyOlx0ICpcbiAxOTM6XHQgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgLWVycm5vIG9uIGVycm9yLlxuIDE5NDpcdCAqL1xuIDE5NTpcdGludCBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXG4gMTk2Olx0XHRcdFx0ICAgIHNtY193cl90eF9oYW5kbGVyIGhhbmRsZXIsXG4gMTk3Olx0XHRcdFx0ICAgIHN0cnVjdCBzbWNfd3JfYnVmICoqd3JfYnVmLFxuIDE5ODpcdFx0XHRcdCAgICBzdHJ1Y3Qgc21jX3JkbWFfd3IgKip3cl9yZG1hX2J1ZixcbiAxOTk6XHRcdFx0XHQgICAgc3RydWN0IHNtY193cl90eF9wZW5kX3ByaXYgKip3cl9wZW5kX3ByaXYpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3Mjk0CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoYXQgZnVuY3Rpb24gY2FsbDoKCioqQW5hbHl6aW5nIGBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdF9pbmRleGAqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgZnVuY3Rpb24gbmFtZSwgYHNtY193cl90eF9nZXRfZnJlZV9zbG90X2luZGV4YC4gQmFzZWQgb24gdGhlIG5hbWluZyBjb252ZW50aW9uLCB3aGljaCBzZWVtcyBwcmV0dHkgc3RhbmRhcmQsIEkgY2FuIGltbWVkaWF0ZWx5IGluZmVyIGEgZmV3IHRoaW5ncy4gJiMzNDtzbWMmIzM0OyBsaWtlbHkgcmVmZXJzIHRvIHNvbWUga2luZCBvZiBTeXN0ZW0gTWFuYWdlbWVudCBDb250cm9sbGVyIG9yIGEgc2ltaWxhciBwZXJpcGhlcmFsIOKAkyBwZXJoYXBzIHJlbGF0ZWQgdG8gc2hhcmVkIG1lbW9yeSBjb21tdW5pY2F0aW9uLiAmIzM0O3dyJiMzNDsgcHJvYmFibHkgaW5kaWNhdGVzICYjMzQ7d3JpdGUmIzM0OyBvciAmIzM0O3dyaXRpbmcsJiMzNDsgc3BlY2lmaWNhbGx5IGZvciBhIHRyYW5zbWlzc2lvbiwgc28gbGlrZWx5IHRoZSBmdW5jdGlvbiBoYW5kbGVzIHRyYW5zYWN0aW9ucyBmcm9tIHRoZSBjb250cm9sbGVyIHRvLCBzYXksIG1lbW9yeS4gJiMzNDt0eCYjMzQ7IGRlZmluaXRlbHkgbWVhbnMgJiMzNDt0cmFuc21pdC4mIzM0OyBBbmQgZmluYWxseSwgJiMzNDtnZXRfZnJlZV9zbG90X2luZGV4JiMzNDsgc2NyZWFtcyAmIzM0O2ZpbmQgYW4gYXZhaWxhYmxlIGJ1ZmZlci9zbG90L2luZGV4IHdpdGhpbiBhIHRyYW5zbWlzc2lvbiBidWZmZXIuJiMzNDsKClNvLCBpbiBlc3NlbmNlLCB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgKm5leHQqIGF2YWlsYWJsZSB3cml0ZSBzbG90IG9yIGJ1ZmZlciBpbmRleCB3aXRoaW4gYSB0cmFuc21pc3Npb24gc3RydWN0dXJlIG1hbmFnZWQgYnkgdGhlIFNNQy4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJiMzOTtkIGV4cGVjdCBpdCB0byBiZSBhIGNyaXRpY2FsIGNvbXBvbmVudCBmb3IgaGFuZGxpbmcgdGhlIHJhdGUgYW5kIGZsb3cgb2YgZGF0YSB0cmFuc2ZlcnMsIGVuc3VyaW5nIHRoYXQgd2UgZG9uJiMzOTt0IG92ZXJ3cml0ZSBvciBzdGFydmUgdGhlIHRyYW5zbWlzc2lvbiBwcm9jZXNzLiBUaGlzIHN1Z2dlc3RzIHRoZSBmdW5jdGlvbiB3b3VsZCBsaWtlbHkgYmUgY2FsbGVkIHByaW9yIHRvIGFjdHVhbGx5IHdyaXRpbmcgZGF0YSB0byB0aGUgdHJhbnNtaXNzaW9uIGJ1ZmZlciwgdG8gZGV0ZXJtaW5lIHRoZSBhcHByb3ByaWF0ZSBvZmZzZXQuIFRoZSBmdW5jdGlvbiB3aWxsIGxpa2VseSBuZWVkIHRvIGRlYWwgd2l0aCB0aGUgcG9pbnRlciBhcml0aG1ldGljIHRvIGhhbmRsZSB0aGUgdmFyaW91cyB0cmFuc21pc3Npb24gc2xvdHMsIGFuZCBzaG91bGQgYmUgY2FyZWZ1bGx5IHJldmlld2VkIGZvciByYWNlIGNvbmRpdGlvbnMgYW5kIHBvdGVudGlhbCBsb2NraW5nIHJlcXVpcmVtZW50cyBpZiB0aGUgU01DIGlzIHNoYXJlZCB3aXRoIG90aGVyIGNvbnRyb2xsZXJzIG9yIHRocmVhZHMuIEFueSBwb3RlbnRpYWwgZm9yIGJ1ZmZlciBvdmVyZmxvd3Mgb3IgdW5kZXJmbG93cyBpcyBhbHNvIHBhcmFtb3VudC4gVGhpcyBjb3VsZCBiZSBhIGNyaXRpY2FsIHBhdGggZnVuY3Rpb24gc28gY2FyZWZ1bCBwZXJmb3JtYW5jZSBldmFsdWF0aW9uLCBhbmQgcG90ZW50aWFsIG9wdGltaXphdGlvbnMgc2hvdWxkIGJlIGNvbnNpZGVyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfd3IuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTYwOlx0fVxuIDE2MTpcdFxuIDE2MjpcdHZvaWQgc21jX3dyX3R4X2NxX2hhbmRsZXIoc3RydWN0IGliX2NxICppYl9jcSwgdm9pZCAqY3FfY29udGV4dClcbiAxNjM6XHR7XG4gMTY0Olx0XHRzdHJ1Y3Qgc21jX2liX2RldmljZSAqZGV2ID0gKHN0cnVjdCBzbWNfaWJfZGV2aWNlICopY3FfY29udGV4dDtcbiAxNjU6XHRcbiAxNjY6XHRcdHRhc2tsZXRfc2NoZWR1bGUoXHUwMDI2ZGV2LVx1MDAzZXNlbmRfdGFza2xldCk7XG4gMTY3Olx0fVxuIDE2ODpcdFxuIDE2OTpcdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSByZXF1ZXN0IHN1Ym1pc3Npb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbiAxNzA6XHRcbiAxNzE6XHRzdGF0aWMgaW5saW5lIGludCBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdF9pbmRleChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHUzMiAqaWR4KVxuIDE3MjpcdHtcbiAxNzM6XHRcdCppZHggPSBsaW5rLVx1MDAzZXdyX3R4X2NudDtcbiAxNzQ6XHRcdGlmICghc21jX2xpbmtfc2VuZGFibGUobGluaykpXG4gMTc1Olx0XHRcdHJldHVybiAtRU5PTElOSztcbiAxNzY6XHRcdGZvcl9lYWNoX2NsZWFyX2JpdCgqaWR4LCBsaW5rLVx1MDAzZXdyX3R4X21hc2ssIGxpbmstXHUwMDNld3JfdHhfY250KSB7XG4gMTc3Olx0XHRcdGlmICghdGVzdF9hbmRfc2V0X2JpdCgqaWR4LCBsaW5rLVx1MDAzZXdyX3R4X21hc2spKVxuIDE3ODpcdFx0XHRcdHJldHVybiAwO1xuIDE3OTpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODAzOAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDUzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIE1lbW9yeSBDb3JydXB0aW9uIGluIFNNQyBXcml0ZSBUWCoqCgpPa2F5LCBzbyBgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RfaW5kZXhgIGlzIGRlZmluaXRlbHkgdGhyZWFkLXNhZmU7IGB0ZXN0X2FuZF9zZXRfYml0YCB0YWtlcyBjYXJlIG9mIHRoYXQuIEFuZCB0aGF0IGNoYW5nZSB0byBgcHJlcGFyZV90b193YWl0X2V4Y2x1c2l2ZWA/IFB1cmVseSBmb3IgYXZvaWRpbmcgdGhlIHRodW5kZXJpbmcgaGVyZCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEJ1dCB0aGlzIGBtZW1zZXRgIGZpeOKApiBpdCYjMzk7cyBnb3QgbWUgdGhpbmtpbmcuCgpMZXQmIzM5O3Mgc2VlOgpgYGBjCi0JCW1lbXNldCgmYW1wO2xpbmstJmd0O3dyX3R4X3YyX3BlbmQsIDAsCi0JCSAgICAgICBzaXplb2YobGluay0mZ3Q7d3JfdHhfdjJfcGVuZCkpOwotCQltZW1zZXQoJmFtcDtsaW5rLSZndDtsZ3ItJmd0O3dyX3R4X2J1Zl92MiwgMCwKLQkJICAgICAgIHNpemVvZihsaW5rLSZndDtsZ3ItJmd0O3dyX3R4X2J1Zl92MikpOwomIzQzOwkJbWVtc2V0KGxpbmstJmd0O3dyX3R4X3YyX3BlbmQsIDAsCiYjNDM7CQkgICAgICAgc2l6ZW9mKCpsaW5rLSZndDt3cl90eF92Ml9wZW5kKSk7CiYjNDM7CQltZW1zZXQobGluay0mZ3Q7bGdyLSZndDt3cl90eF9idWZfdjIsIDAsCiYjNDM7CQkgICAgICAgc2l6ZW9mKCpsaW5rLSZndDt3cl90eF9idWZfdjIpKTsKYGBgCgpBbHJpZ2h0LCBzbyB0aGUgb3JpZ2luYWwgY29kZSB3YXMgemVyb2luZyB0aGUgKnBvaW50ZXJzKiB0aGVtc2VsdmVzLCBub3QgdGhlIG1lbW9yeSB0aGV5IHBvaW50IHRvLiBgbGluay0mZ3Q7d3JfdHhfdjJfcGVuZGAgaXMgYSBwb2ludGVyIHRvIGEgYHN0cnVjdCBzbWNfd3JfdHhfcGVuZGAsIGFuZCBgbGluay0mZ3Q7bGdyLSZndDt3cl90eF9idWZfdjJgIGlzIGEgcG9pbnRlciB0byBhIGBzdHJ1Y3Qgc21jX3dyX3YyX2J1ZmAuIE5vdywgdGhlIGNvZGUgbm93IHplcm9lcyB0aGUgc3RydWN0dXJlcy4gVGhhdCBtZWFucyB0aGF0IHRoZSBvbGQgY29kZSB3YXMgbGVhdmluZyB0aGUgcG9pbnRlZC10byBzdHJ1Y3R1cmVzIHVuaW5pdGlhbGl6ZWQsIGFuZCB0aGlzIG5ldyBjb2RlIGNvcnJlY3RzIHRoYXQuCgpXYWl0IGEgc2Vjb25k4oCmIElmIHRoZSBwb2ludGVycyB3ZXJlIGJlaW5nIHplcm9lZCwgdGhlIGFjdHVhbCBkYXRhIGJ1ZmZlcnMgd2VyZW4mIzM5O3QgYmVpbmcgY2xlYXJlZC4gVGhhdCBtZWFucyB0aGUgbmV4dCB0aW1lIHRob3NlIGJ1ZmZlcnMgd2VyZSB1c2VkLCB0aGV5IG1pZ2h0IGhhdmUgY29udGFpbmVkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGF0JiMzOTtzIGEgaHVnZSBwb3RlbnRpYWwgc2VjdXJpdHkgaXNzdWUuIFRoZXNlIGFyZSBuZXR3b3JrIGJ1ZmZlcnM7IGlmIHRoZXJlJiMzOTtzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB0aGF0IGNvdWxkIG1lYW4gbGVha2luZyBzZW5zaXRpdmUgaW5mb3JtYXRpb24uCgpMZXQmIzM5O3MgbG9vayBhdCBob3cgYGxpbmstJmd0O2xnci0mZ3Q7d3JfdHhfYnVmX3YyYCBpcyB1c2VkLiBSaWdodCwgaXQmIzM5O3MgdXNlZCB0byBzZW5kIGRhdGEgb3ZlciB0aGUgbmV0d29yay4gSWYgaXQgd2FzbiYjMzk7dCB6ZXJvZWQsIHRoYXQmIzM5O3MgYSAqbWFzc2l2ZSogcHJvYmxlbS4gSSBuZWVkIHRvIGtub3cgaWYgd2UgYXJlIHBvc3NpYmx5IGxlYWtpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIExldCYjMzk7cyBzZWUuLi4gYHNtY193cl90eF9nZXRfdjJfc2xvdGAgcmV0dXJucyBgbGluay0mZ3Q7bGdyLSZndDt3cl90eF9idWZfdjJgIGFzIGAqd3JfYnVmYC4gVGhlbiB0aGUgY2FsbGVyIGZpbGxzIGl0IHdpdGggZGF0YSBhbmQgc2VuZHMgaXQuCgpPa2F5LCB0aGUgcXVlc3Rpb24gaXM6IGRvZXMgdGhlIGNhbGxlciBmaWxsIHRoZSAqZW50aXJlKiBidWZmZXIsIG9yIGFyZSBwYXJ0cyBvZiBpdCBsZWZ0IHVuaW5pdGlhbGl6ZWQ/IElmIHBhcnRzIGFyZSBsZWZ0IHVuaW5pdGlhbGl6ZWQsIGFuZCB0aGUgYnVmZmVyIHdhc24mIzM5O3QgemVyb2VkLCB3ZSBjb3VsZCBiZSBzZW5kaW5nIGdhcmJhZ2UgYWNyb3NzIHRoZSBuZXR3b3JrLCBhbmQgcG90ZW50aWFsbHkgbGVha2luZy4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsZXJzIG9mIGBzbWNfd3JfdHhfZ2V0X3YyX3Nsb3RgIGFuZCB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBkYXRhIHRoZXkmIzM5O3JlIHdyaXRpbmcuIFRoaXMgbmVlZHMgYSBkZWVwZXIgZGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c21jX3dyX3R4X2dldF92Ml9zbG90JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfbGxjLmM9NDIyPXN0YXRpYyBpbnQgc21jX2xsY19hZGRfcGVuZGluZ19zZW5kX3YyKHN0cnVjdCBzbWNfbGluayAqbGluayxcbi0tXG5uZXQvc21jL3NtY19sbGMuYy00MjctXG5uZXQvc21jL3NtY19sbGMuYzo0Mjg6XHRyYyA9IHNtY193cl90eF9nZXRfdjJfc2xvdChsaW5rLCBzbWNfbGxjX3R4X2hhbmRsZXIsIHdyX2J1ZiwgcGVuZCk7XG5uZXQvc21jL3NtY19sbGMuYy00MjktXHRpZiAocmMgXHUwMDNjIDApXG4tLVxubmV0L3NtYy9zbWNfd3IuYz0xOTU9aW50IHNtY193cl90eF9nZXRfZnJlZV9zbG90KHN0cnVjdCBzbWNfbGluayAqbGluayxcbi0tXG5uZXQvc21jL3NtY193ci5jLTI1OS1cbm5ldC9zbWMvc21jX3dyLmM6MjYwOmludCBzbWNfd3JfdHhfZ2V0X3YyX3Nsb3Qoc3RydWN0IHNtY19saW5rICpsaW5rLFxubmV0L3NtYy9zbWNfd3IuYy0yNjEtXHRcdFx0ICBzbWNfd3JfdHhfaGFuZGxlciBoYW5kbGVyLFxuLS1cbm5ldC9zbWMvc21jX3dyLmg9MTEzPWludCBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHNtY193cl90eF9oYW5kbGVyIGhhbmRsZXIsXG4tLVxubmV0L3NtYy9zbWNfd3IuaC0xMTYtXHRcdFx0ICAgIHN0cnVjdCBzbWNfd3JfdHhfcGVuZF9wcml2ICoqd3JfcGVuZF9wcml2KTtcbm5ldC9zbWMvc21jX3dyLmg6MTE3OmludCBzbWNfd3JfdHhfZ2V0X3YyX3Nsb3Qoc3RydWN0IHNtY19saW5rICpsaW5rLFxubmV0L3NtYy9zbWNfd3IuaC0xMTgtXHRcdFx0ICBzbWNfd3JfdHhfaGFuZGxlciBoYW5kbGVyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTcxMAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGlnZ2luZyBpbnRvIHRoZSBGdW5jdGlvbiBDYWxsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBpZWNlIG9mIGNvZGUsIGFuZCB0aGUga2V5IGZ1bmN0aW9uIGNhbGwgaXMgYHNtY19sbGNfYWRkX3BlbmRpbmdfc2VuZF92MmAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGFjdGlvbiBpcywgaXQgbG9va3MgbGlrZS4gIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBpbnRvIHRoYXQgZnVuY3Rpb24uIExldCYjMzk7cyBzZWUgd2hhdCBgc21jX2xsY19hZGRfcGVuZGluZ19zZW5kX3YyYCBpcyBhbGwgYWJvdXQuIFVuZGVyc3RhbmRpbmcgaXRzIGltcGxlbWVudGF0aW9uIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgd2hhdCYjMzk7cyBnb2luZyBvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGFyZ3VtZW50cywgaXRzIGNvbnRyb2wgZmxvdywgYW5kIGl0cyBzaWRlIGVmZmVjdHMuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfbGxjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MjIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQyMjpcdHN0YXRpYyBpbnQgc21jX2xsY19hZGRfcGVuZGluZ19zZW5kX3YyKHN0cnVjdCBzbWNfbGluayAqbGluayxcbiA0MjM6XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc21jX3dyX3YyX2J1ZiAqKndyX2J1ZixcbiA0MjQ6XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRfcHJpdiAqKnBlbmQpXG4gNDI1Olx0e1xuIDQyNjpcdFx0aW50IHJjO1xuIDQyNzpcdFxuIDQyODpcdFx0cmMgPSBzbWNfd3JfdHhfZ2V0X3YyX3Nsb3QobGluaywgc21jX2xsY190eF9oYW5kbGVyLCB3cl9idWYsIHBlbmQpO1xuIDQyOTpcdFx0aWYgKHJjIFx1MDAzYyAwKVxuIDQzMDpcdFx0XHRyZXR1cm4gcmM7XG4gNDMxOlx0XHRyZXR1cm4gMDtcbiA0MzI6XHR9XG4gNDMzOlx0XG4gNDM0Olx0c3RhdGljIHZvaWQgc21jX2xsY19pbml0X21zZ19oZHIoc3RydWN0IHNtY19sbGNfaGRyICpoZHIsXG4gNDM1Olx0XHRcdFx0XHQgc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsIHNpemVfdCBsZW4pXG4gNDM2Olx0e1xuIDQzNzpcdFx0aWYgKGxnci1cdTAwM2VzbWNfdmVyc2lvbiA9PSBTTUNfVjIpIHtcbiA0Mzg6XHRcdFx0aGRyLVx1MDAzZWNvbW1vbi5sbGNfdmVyc2lvbiA9IFNNQ19WMjtcbiA0Mzk6XHRcdFx0aGRyLVx1MDAzZWxlbmd0aF92MiA9IGxlbjtcbiA0NDA6XHRcdH0gZWxzZSB7XG4gNDQxOlx0XHRcdGhkci1cdTAwM2Vjb21tb24ubGxjX3ZlcnNpb24gPSAwO1xuIDQ0MjpcdFx0XHRoZHItXHUwMDNlbGVuZ3RoID0gbGVuO1xuIDQ0MzpcdFx0fVxuIDQ0NDpcdH1cbiA0NDU6XHRcbiA0NDY6XHQvKiBoaWdoLWxldmVsIEFQSSB0byBzZW5kIExMQyBjb25maXJtIGxpbmsgKi9cbiA0NDc6XHRpbnQgc21jX2xsY19zZW5kX2NvbmZpcm1fbGluayhzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXG4gNDQ4Olx0XHRcdFx0ICAgICAgZW51bSBzbWNfbGxjX3JlcXJlc3AgcmVxcmVzcClcbiA0NDk6XHR7XG4gNDUwOlx0XHRzdHJ1Y3Qgc21jX2xsY19tc2dfY29uZmlybV9saW5rICpjb25mbGxjO1xuIDQ1MTpcdFx0c3RydWN0IHNtY193cl90eF9wZW5kX3ByaXYgKnBlbmQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNDQ4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgQ2FsbCBTdGFjazogYHNtY19sbGNfYWRkX3BlbmRpbmdfc2VuZF92MmAqKgoKQWxyaWdodCwgSSYjMzk7bSBkaXZpbmcgaW4uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgc3Vycm91bmRpbmcgYHNtY19sbGNfYWRkX3BlbmRpbmdfc2VuZF92MmAuIEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uLCBidXQgd2l0aG91dCBrbm93aW5nIHRoZSBjYWxsZXJzLCBpdHMgYmVoYXZpb3IgaXMgZ29pbmcgdG8gYmUgb3BhcXVlLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoaXMgcG9pbnQuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGNhbGwgc3RhY2ssIG5hdHVyYWxseS4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHVwc3RyZWFtIGZ1bmN0aW9ucyB0aGF0IGFyZSByZXNwb25zaWJsZSBmb3IgKmludm9raW5nKiB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24uIElzIGl0IHRyaWdnZXJlZCBieSBhbiBpbnRlcnJ1cHQsIGEgdGFza2xldCwgb3IgYSBkaXJlY3QgZnVuY3Rpb24gY2FsbCBmcm9tIHNvbWUgb3RoZXIgcGFydCBvZiB0aGUgbmV0d29yayBzdGFjaywgcGVyaGFwcyByZWxhdGVkIHRvIHNvY2tldCBtYW5hZ2VtZW50PyBEZXRlcm1pbmluZyB0aGUgZW50cnkgcG9pbnRzIHdpbGwgaW5mb3JtIG1lIGFib3V0IHRoZSBwb3RlbnRpYWwgc291cmNlcyBvZiBsYXRlbmN5LCBlcnJvcnMsIG9yIGluZWZmaWNpZW5jaWVzIGlmIHRoaW5ncyBhcmVuJiMzOTt0IHdvcmtpbmcgYXMgZXhwZWN0ZWQuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBlZmZpY2llbmN5LCBzbyBrbm93aW5nIHdoZXJlIHRoZSBjYWxsIG9yaWdpbmF0ZXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgd2hhdCBkYXRhIGlzIGxpa2VseSBiZWluZyBwcm9jZXNzZWQgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBib3R0bGVuZWNrcyB1cHN0cmVhbS4gTGV0JiMzOTtzIHNlZSB3aG8mIzM5O3MgZG9pbmcgdGhlIGNhbGxpbmcgYW5kIGxldCYjMzk7cyBnbyBmcm9tIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNfbGxjX2FkZF9wZW5kaW5nX3NlbmRfdjImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL3NtY19sbGMuYz00MDA9c3RhdGljIGludCBzbWNfbGxjX2FkZF9wZW5kaW5nX3NlbmQoc3RydWN0IHNtY19saW5rICpsaW5rLFxuLS1cbm5ldC9zbWMvc21jX2xsYy5jLTQyMS1cbm5ldC9zbWMvc21jX2xsYy5jOjQyMjpzdGF0aWMgaW50IHNtY19sbGNfYWRkX3BlbmRpbmdfc2VuZF92MihzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXG5uZXQvc21jL3NtY19sbGMuYy00MjMtXHRcdFx0XHQgICAgICAgc3RydWN0IHNtY193cl92Ml9idWYgKip3cl9idWYsXG4tLVxubmV0L3NtYy9zbWNfbGxjLmM9NjQzPWludCBzbWNfbGxjX3NlbmRfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLCB1OCBtYWNbXSwgdTggZ2lkW10sXG4tLVxubmV0L3NtYy9zbWNfbGxjLmMtNjU3LVxubmV0L3NtYy9zbWNfbGxjLmM6NjU4Olx0XHRyYyA9IHNtY19sbGNfYWRkX3BlbmRpbmdfc2VuZF92MihsaW5rLCBcdTAwMjZ3cl9idWYsIFx1MDAyNnBlbmQpO1xubmV0L3NtYy9zbWNfbGxjLmMtNjU5LVx0XHRpZiAocmMpXG4tLVxubmV0L3NtYy9zbWNfbGxjLmM9MTEyNj1zdGF0aWMgdm9pZCBzbWNfbGxjX3NlbmRfcmVxdWVzdF9hZGRfbGluayhzdHJ1Y3Qgc21jX2xpbmsgKmxpbmspXG4tLVxubmV0L3NtYy9zbWNfbGxjLmMtMTE0My1cbm5ldC9zbWMvc21jX2xsYy5jOjExNDQ6XHRyYyA9IHNtY19sbGNfYWRkX3BlbmRpbmdfc2VuZF92MihsaW5rLCBcdTAwMjZ3cl9idWYsIFx1MDAyNnBlbmQpO1xubmV0L3NtYy9zbWNfbGxjLmMtMTE0NS1cdGlmIChyYylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExODUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9uczoKCioqRGlnZ2luZyBpbnRvIHRoZSBMaW5rIEFkZGl0aW9uIFByb2Nlc3MqKgoKT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBsaW5rIGFkZGl0aW9uIHNlcXVlbmNlLCBwYXJ0aWN1bGFybHkgdGhlIHNpZ25hbGluZy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHRha2luZyBhIGNsb3NlciBsb29rIGF0IGBzbWNfbGxjX3NlbmRfYWRkX2xpbmtgIGFuZCBgc21jX2xsY19zZW5kX3JlcXVlc3RfYWRkX2xpbmtgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBvZiBob3cgdGhlc2UgdHdvIGZ1bmN0aW9ucyBpbnRlcmFjdC4gSSYjMzk7bSB0aGlua2luZywgYXJlIHRoZXJlIHN1YnRsZSBkaWZmZXJlbmNlcyBpbiB0aGUgKnNlbmRpbmcqIGJlaGF2aW9yIGJldHdlZW4gdGhlIGluaXRpYWwgcmVxdWVzdCBhbmQgdGhlIGNvbmZpcm1hdGlvbiBwaGFzZT8gQXJlIHdlIGRlYWxpbmcgd2l0aCB0aGUgc2FtZSB1bmRlcmx5aW5nIG1lY2hhbmlzbSB3aXRoIHNsaWdodCB2YXJpYXRpb25zLCBvciBhcmUgdGhlc2UgZGlzdGluY3QgZnVuY3Rpb24gY2FsbHMgc2VydmluZyBmdW5kYW1lbnRhbGx5IHNlcGFyYXRlIHB1cnBvc2VzIGluIHRoZSBwcm90b2NvbD8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgc29tZSBpbXBvcnRhbnQgZGV0YWlscyB0byB1bnBhY2sgaGVyZSByZWdhcmRpbmcgZXJyb3IgaGFuZGxpbmcsIHJldHJhbnNtaXNzaW9ucywgb3IgcGVyaGFwcyBkaWZmZXJlbnQgc2V0cyBvZiBwYXJhbWV0ZXJzIHJlcXVpcmVkIGluIGVhY2guIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIHRvIHNlZSBpZiB0aGVyZSBhcmUgb3B0aW1pemF0aW9ucyBvciBwb3RlbnRpYWwgYXJlYXMgZm9yIGltcHJvdmVtZW50LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc21jL3NtY19sbGMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY0MywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjQzOlx0aW50IHNtY19sbGNfc2VuZF9hZGRfbGluayhzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHU4IG1hY1tdLCB1OCBnaWRbXSxcbiA2NDQ6XHRcdFx0XHQgIHN0cnVjdCBzbWNfbGluayAqbGlua19uZXcsXG4gNjQ1Olx0XHRcdFx0ICBlbnVtIHNtY19sbGNfcmVxcmVzcCByZXFyZXNwKVxuIDY0NjpcdHtcbiA2NDc6XHRcdHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGlua192Ml9leHQgKmV4dCA9IE5VTEw7XG4gNjQ4Olx0XHRzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmsgKmFkZGxsYztcbiA2NDk6XHRcdHN0cnVjdCBzbWNfd3JfdHhfcGVuZF9wcml2ICpwZW5kO1xuIDY1MDpcdFx0aW50IGxlbiA9IHNpemVvZigqYWRkbGxjKTtcbiA2NTE6XHRcdGludCByYztcbiA2NTI6XHRcbiA2NTM6XHRcdGlmICghc21jX3dyX3R4X2xpbmtfaG9sZChsaW5rKSlcbiA2NTQ6XHRcdFx0cmV0dXJuIC1FTk9MSU5LO1xuIDY1NTpcdFx0aWYgKGxpbmstXHUwMDNlbGdyLVx1MDAzZXNtY192ZXJzaW9uID09IFNNQ19WMikge1xuIDY1NjpcdFx0XHRzdHJ1Y3Qgc21jX3dyX3YyX2J1ZiAqd3JfYnVmO1xuIDY1NzpcdFxuIDY1ODpcdFx0XHRyYyA9IHNtY19sbGNfYWRkX3BlbmRpbmdfc2VuZF92MihsaW5rLCBcdTAwMjZ3cl9idWYsIFx1MDAyNnBlbmQpO1xuIDY1OTpcdFx0XHRpZiAocmMpXG4gNjYwOlx0XHRcdFx0Z290byBwdXRfb3V0O1xuIDY2MTpcdFx0XHRhZGRsbGMgPSAoc3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rICopd3JfYnVmO1xuIDY2MjpcdFx0XHRleHQgPSAoc3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rX3YyX2V4dCAqKVxuIDY2MzpcdFx0XHRcdFx0XHRcdFx1MDAyNndyX2J1Zi1cdTAwM2VyYXdbc2l6ZW9mKCphZGRsbGMpXTtcbiA2NjQ6XHRcdFx0bWVtc2V0KGV4dCwgMCwgU01DX1dSX1RYX1NJWkUpO1xuIDY2NTpcdFx0fSBlbHNlIHtcbiA2NjY6XHRcdFx0c3RydWN0IHNtY193cl9idWYgKndyX2J1ZjtcbiA2Njc6XHRcbiA2Njg6XHRcdFx0cmMgPSBzbWNfbGxjX2FkZF9wZW5kaW5nX3NlbmQobGluaywgXHUwMDI2d3JfYnVmLCBcdTAwMjZwZW5kKTtcbiA2Njk6XHRcdFx0aWYgKHJjKVxuIDY3MDpcdFx0XHRcdGdvdG8gcHV0X291dDtcbiA2NzE6XHRcdFx0YWRkbGxjID0gKHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGluayAqKXdyX2J1ZjtcbiA2NzI6XHRcdH1cbiA2NzM6XHRcbiA2NzQ6XHRcdG1lbXNldChhZGRsbGMsIDAsIHNpemVvZigqYWRkbGxjKSk7XG4gNjc1Olx0XHRhZGRsbGMtXHUwMDNlaGQuY29tbW9uLmxsY190eXBlID0gU01DX0xMQ19BRERfTElOSztcbiA2NzY6XHRcdGlmIChyZXFyZXNwID09IFNNQ19MTENfUkVTUClcbiA2Nzc6XHRcdFx0YWRkbGxjLVx1MDAzZWhkLmZsYWdzIHw9IFNNQ19MTENfRkxBR19SRVNQO1xuIDY3ODpcdFx0bWVtY3B5KGFkZGxsYy1cdTAwM2VzZW5kZXJfbWFjLCBtYWMsIEVUSF9BTEVOKTtcbiA2Nzk6XHRcdG1lbWNweShhZGRsbGMtXHUwMDNlc2VuZGVyX2dpZCwgZ2lkLCBTTUNfR0lEX1NJWkUpO1xuIDY4MDpcdFx0aWYgKGxpbmtfbmV3KSB7XG4gNjgxOlx0XHRcdGFkZGxsYy1cdTAwM2VsaW5rX251bSA9IGxpbmtfbmV3LVx1MDAzZWxpbmtfaWQ7XG4gNjgyOlx0XHRcdGh0b24yNChhZGRsbGMtXHUwMDNlc2VuZGVyX3FwX251bSwgbGlua19uZXctXHUwMDNlcm9jZV9xcC1cdTAwM2VxcF9udW0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjI0OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJ1ZmZlciBaZXJvaW5nIGluIGBzbWNfbGxjX3NlbmRfYWRkX2xpbmtgKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEluIGBzbWNfbGxjX3NlbmRfYWRkX2xpbmtgLCBwYXJ0aWN1bGFybHkgZm9yIFNNQ19WMiBsaW5rcywgSSBzZWUgd2UgYWxsb2NhdGUgYSB3cml0ZSBidWZmZXIgKGB3cl9idWZgKSB1c2luZyBgc21jX2xsY19hZGRfcGVuZGluZ19zZW5kX3YyYC4gTm93LCB0aGUgY3J1Y2lhbCBwYXJ0IEkmIzM5O20gZm9jdXNpbmcgb24gaXMgdGhlIGV4cGxpY2l0IHplcm9pbmcgb2YgbWVtb3J5LiBGaXJzdCwgYG1lbXNldChleHQsIDAsIFNNQ19XUl9UWF9TSVpFKWAgemVybyYjMzk7cyBgZXh0YC4gVGhlbiwgYG1lbXNldChhZGRsbGMsIDAsIHNpemVvZigqYWRkbGxjKSlgIHplcm8mIzM5O3MgYGFkZGxsY2AuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2h5IHRoZSBkb3VibGUgemVyb2luZz8gQm90aCBgZXh0YCBhbmQgYGFkZGxsY2AgYXJlIGJlaW5nIHplcm9lZC4gSWYgSSBsb29rIGF0IHRoZSBzaXplcywgSSBzZWUgYFNNQ19XUl9UWF9TSVpFYCBpcyA0NCBieXRlcyBhbmQgYHNpemVvZigqYWRkbGxjKWAgaXMgYWxzbyA0NC4gU28gZmFyLCB0aGUgYnVmZmVyIGFsbG9jYXRlZCBpcyBqdXN0IGJlaW5nIHplcm9lZCB0d2ljZSEgYGFkZGxsY2AgYXBwZWFycyB0byBiZSBjYXN0IGZyb20gdGhlIHNhbWUgYnVmZmVyIGFzIGB3cl9idWZgLiBUaGVuIGBleHRgIGlzIGNhc3QsIGFuZCBgYWRkbGxjYCBpcyB6ZXJvZWQuCgpUaGlzIGxvb2tzIGxpa2UgYGFkZGxsY2AgYW5kIGBleHRgIGFyZSBwYXJ0IG9mIHRoZSBzYW1lIGFsbG9jYXRlZCBidWZmZXIuIEkmIzM5O20gc2VlaW5nIGEgcG9zc2libGUgcmVkdW5kYW5jeSBoZXJlLCBvciBtYXliZSBhIGRlc2lnbiBjaG9pY2UuIFRoaXMgZmVlbHMgaW5lZmZpY2llbnQuIFdoYXQmIzM5O3MgdGhlIGNvbXBsZXRlIHN0cnVjdHVyZT8gSSYjMzk7bSBtaXNzaW5nIHNvbWV0aGluZywgSSBuZWVkIHRvIGtub3cgdGhlIHNpemUgb2YgYHN0cnVjdCBzbWNfd3JfdjJfYnVmYCB0byBmdWxseSB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGlzIGJ1ZmZlciBhbGxvY2F0aW9uIGFuZCB6ZXJvaW5nIHNlcXVlbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3Qgc21jX3dyX3YyX2J1ZiBcXHsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL3NtY19jb3JlLmg9NjE9c3RydWN0IHNtY193cl9idWYge1xuLS1cbm5ldC9zbWMvc21jX2NvcmUuaC02NC1cbm5ldC9zbWMvc21jX2NvcmUuaDo2NTpzdHJ1Y3Qgc21jX3dyX3YyX2J1ZiB7XG5uZXQvc21jL3NtY19jb3JlLmgtNjYtXHR1OFx0cmF3W1NNQ19XUl9CVUZfVjJfU0laRV07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMDU1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDaGVja2luZyBgU01DX1dSX0JVRl9WMl9TSVpFYCoqCgpPa2F5LCB0aW1lIHRvIGNpcmNsZSBiYWNrIHRvIGBTTUNfV1JfQlVGX1YyX1NJWkVgLiBJIG5lZWQgdG8gZW5zdXJlIGl0JiMzOTtzIHN0aWxsIGNvbnNpc3RlbnQgd2l0aCB0aGUgY3VycmVudCBhcmNoaXRlY3R1cmUuIExldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSBpdHMgZGVmaW5pdGlvbiwgZXNwZWNpYWxseSBpZiB0aGVyZSBoYXZlIGJlZW4gYW55IHJlY2VudCBtb2RpZmljYXRpb25zIHRvIHRoZSBtZW1vcnkgbWFwcGluZyBvciBidWZmZXIgYWxsb2NhdGlvbiBzdHJhdGVnaWVzLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBhbGlnbm1lbnQgaXNzdWVzIG9yIGZyYWdtZW50YXRpb24gcHJvYmxlbXMgaWYgdGhlIHNpemUgaXNuJiMzOTt0IHJpZ2h0LCB5b3Uga25vdywgdGhlIHVzdWFsIGN1bHByaXRzLiBJdCYjMzk7cyBhIGNyaXRpY2FsIHBhcmFtZXRlcjsgYW55IGRldmlhdGlvbiBjb3VsZCBsZWFkIHRvIG92ZXJmbG93IGNvbmRpdGlvbnMgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIHNwZWNpZmljYWxseSwgaWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBsYXJnZXIgdHJhbnNhY3Rpb25zIG9yIG1vcmUgZnJlcXVlbnQgdXBkYXRlcy4gR2l2ZW4gdGhlIGNvbnRleHQsIEkgc2hvdWxkIGRvdWJsZS1jaGVjayBpdHMgcmVsYXRpb25zaGlwIHdpdGggYW55IGNhY2hlIGNvaGVyZW5jeSBwcm90b2NvbHMgd2UmIzM5O3JlIHVzaW5nLiBJIHNob3VsZCBhbHNvIHNlZSBpZiB0aGVyZSYjMzk7cyBiZWVuIGFueSBkZWJhdGUgb3IgZGlzY3Vzc2lvbiBvbiBpdHMgdmFsdWUgcmVjZW50bHkuIFJpZ2h0LCBsZXQgbWUgcHVsbCB1cCB0aGUgcmVsZXZhbnQgaGVhZGVyIGZpbGVzIGFuZCBkb2N1bWVudGF0aW9u4oCmIGdvdCB0byBrZWVwIGEgY2xvc2UgZXllIG9uIHRoZXNlIHRoaW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U01DX1dSX0JVRl9WMl9TSVpFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfY29yZS5jPTc4OD1pbnQgc21jcl9saW5rX2luaXQoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsIHN0cnVjdCBzbWNfbGluayAqbG5rLFxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy03OTktXHRcdGxuay1cdTAwM2V3cl9yeF9idWZsZW4gPSBzbWNfbGlua19zaGFyZWRfdjJfcnhidWYobG5rKSA/XG5uZXQvc21jL3NtY19jb3JlLmM6ODAwOlx0XHRcdFNNQ19XUl9CVUZfU0laRSA6IFNNQ19XUl9CVUZfVjJfU0laRTtcbm5ldC9zbWMvc21jX2NvcmUuYy04MDEtXHR9IGVsc2Uge1xuLS1cbm5ldC9zbWMvc21jX2NvcmUuaD01MT1lbnVtIHNtY19saW5rX3N0YXRlIHtcdFx0XHQvKiBwb3NzaWJsZSBzdGF0ZXMgb2YgYSBsaW5rICovXG4tLVxubmV0L3NtYy9zbWNfY29yZS5oLTU4LSNkZWZpbmUgU01DX1dSX0JVRl9TSVpFXHRcdDQ4XHQvKiBzaXplIG9mIHdvcmsgcmVxdWVzdCBidWZmZXIgKi9cbm5ldC9zbWMvc21jX2NvcmUuaDo1OTojZGVmaW5lIFNNQ19XUl9CVUZfVjJfU0laRVx0ODE5Mlx0Lyogc2l6ZSBvZiB2MiB3b3JrIHJlcXVlc3QgYnVmZmVyICovXG5uZXQvc21jL3NtY19jb3JlLmgtNjAtXG4tLVxubmV0L3NtYy9zbWNfY29yZS5oPTY1PXN0cnVjdCBzbWNfd3JfdjJfYnVmIHtcbm5ldC9zbWMvc21jX2NvcmUuaDo2NjpcdHU4XHRyYXdbU01DX1dSX0JVRl9WMl9TSVpFXTtcbm5ldC9zbWMvc21jX2NvcmUuaC02Ny19O1xuLS1cbm5ldC9zbWMvc21jX3dyLmM9NTcyPXN0YXRpYyB2b2lkIHNtY193cl9pbml0X3NnZShzdHJ1Y3Qgc21jX2xpbmsgKmxuaylcbi0tXG5uZXQvc21jL3NtY193ci5jLTYwNy1cdFx0bG5rLVx1MDAzZXdyX3R4X3YyX3NnZS1cdTAwM2VhZGRyID0gbG5rLVx1MDAzZXdyX3R4X3YyX2RtYV9hZGRyO1xubmV0L3NtYy9zbWNfd3IuYzo2MDg6XHRcdGxuay1cdTAwM2V3cl90eF92Ml9zZ2UtXHUwMDNlbGVuZ3RoID0gU01DX1dSX0JVRl9WMl9TSVpFO1xubmV0L3NtYy9zbWNfd3IuYy02MDktXHRcdGxuay1cdTAwM2V3cl90eF92Ml9zZ2UtXHUwMDNlbGtleSA9IGxuay1cdTAwM2Vyb2NlX3BkLVx1MDAzZWxvY2FsX2RtYV9sa2V5O1xuLS1cbm5ldC9zbWMvc21jX3dyLmMtNjM2LVx0XHRcdGxuay1cdTAwM2V3cl9yeF9zZ2VzW3ggJiM0MzsgMV0ubGVuZ3RoID1cbm5ldC9zbWMvc21jX3dyLmM6NjM3Olx0XHRcdFx0XHRTTUNfV1JfQlVGX1YyX1NJWkUgLSBTTUNfV1JfVFhfU0laRTtcbm5ldC9zbWMvc21jX3dyLmMtNjM4LVx0XHRcdGxuay1cdTAwM2V3cl9yeF9zZ2VzW3ggJiM0MzsgMV0ubGtleSA9XG4tLVxubmV0L3NtYy9zbWNfd3IuYz02NTI9dm9pZCBzbWNfd3JfZnJlZV9saW5rKHN0cnVjdCBzbWNfbGluayAqbG5rKVxuLS1cbm5ldC9zbWMvc21jX3dyLmMtNjc5LVx0XHRpYl9kbWFfdW5tYXBfc2luZ2xlKGliZGV2LCBsbmstXHUwMDNld3JfcnhfdjJfZG1hX2FkZHIsXG5uZXQvc21jL3NtY193ci5jOjY4MDpcdFx0XHRcdCAgICBTTUNfV1JfQlVGX1YyX1NJWkUsXG5uZXQvc21jL3NtY193ci5jLTY4MS1cdFx0XHRcdCAgICBETUFfRlJPTV9ERVZJQ0UpO1xuLS1cbm5ldC9zbWMvc21jX3dyLmMtNjkxLVx0XHRpYl9kbWFfdW5tYXBfc2luZ2xlKGliZGV2LCBsbmstXHUwMDNld3JfdHhfdjJfZG1hX2FkZHIsXG5uZXQvc21jL3NtY193ci5jOjY5MjpcdFx0XHRcdCAgICBTTUNfV1JfQlVGX1YyX1NJWkUsXG5uZXQvc21jL3NtY193ci5jLTY5My1cdFx0XHRcdCAgICBETUFfVE9fREVWSUNFKTtcbi0tXG5uZXQvc21jL3NtY193ci5jPTc0MT1pbnQgc21jX3dyX2FsbG9jX2xncl9tZW0oc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IpXG4tLVxubmV0L3NtYy9zbWNfd3IuYy03NDUtXG5uZXQvc21jL3NtY193ci5jOjc0NjpcdGxnci1cdTAwM2V3cl9yeF9idWZfdjIgPSBremFsbG9jKFNNQ19XUl9CVUZfVjJfU0laRSwgR0ZQX0tFUk5FTCk7XG5uZXQvc21jL3NtY193ci5jLTc0Ny1cdGlmICghbGdyLVx1MDAzZXdyX3J4X2J1Zl92Milcbm5ldC9zbWMvc21jX3dyLmMtNzQ4LVx0XHRyZXR1cm4gLUVOT01FTTtcbm5ldC9zbWMvc21jX3dyLmM6NzQ5Olx0bGdyLVx1MDAzZXdyX3R4X2J1Zl92MiA9IGt6YWxsb2MoU01DX1dSX0JVRl9WMl9TSVpFLCBHRlBfS0VSTkVMKTtcbm5ldC9zbWMvc21jX3dyLmMtNzUwLVx0aWYgKCFsZ3ItXHUwMDNld3JfdHhfYnVmX3YyKSB7XG4tLVxubmV0L3NtYy9zbWNfd3IuYz04NzE9aW50IHNtY193cl9jcmVhdGVfbGluayhzdHJ1Y3Qgc21jX2xpbmsgKmxuaylcbi0tXG5uZXQvc21jL3NtY193ci5jLTg4OS1cdFx0XHRcdGliX2RtYV9tYXBfc2luZ2xlKGliZGV2LCBsbmstXHUwMDNlbGdyLVx1MDAzZXdyX3J4X2J1Zl92Mixcbm5ldC9zbWMvc21jX3dyLmM6ODkwOlx0XHRcdFx0XHRcdCAgU01DX1dSX0JVRl9WMl9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpO1xubmV0L3NtYy9zbWNfd3IuYy04OTEtXHRcdFx0aWYgKGliX2RtYV9tYXBwaW5nX2Vycm9yKGliZGV2LCBsbmstXHUwMDNld3JfcnhfdjJfZG1hX2FkZHIpKSB7XG4tLVxubmV0L3NtYy9zbWNfd3IuYy04OTctXHRcdGxuay1cdTAwM2V3cl90eF92Ml9kbWFfYWRkciA9IGliX2RtYV9tYXBfc2luZ2xlKGliZGV2LFxubmV0L3NtYy9zbWNfd3IuYzo4OTg6XHRcdFx0bG5rLVx1MDAzZWxnci1cdTAwM2V3cl90eF9idWZfdjIsIFNNQ19XUl9CVUZfVjJfU0laRSxcbm5ldC9zbWMvc21jX3dyLmMtODk5LVx0XHRcdERNQV9UT19ERVZJQ0UpO1xuLS1cbm5ldC9zbWMvc21jX3dyLmMtOTMyLVx0XHRpYl9kbWFfdW5tYXBfc2luZ2xlKGliZGV2LCBsbmstXHUwMDNld3JfcnhfdjJfZG1hX2FkZHIsXG5uZXQvc21jL3NtY193ci5jOjkzMzpcdFx0XHRcdCAgICBTTUNfV1JfQlVGX1YyX1NJWkUsXG5uZXQvc21jL3NtY193ci5jLTkzNC1cdFx0XHRcdCAgICBETUFfRlJPTV9ERVZJQ0UpO1xuLS1cbm5ldC9zbWMvc21jX3dyLmMtOTM4LVx0XHRpYl9kbWFfdW5tYXBfc2luZ2xlKGliZGV2LCBsbmstXHUwMDNld3JfdHhfdjJfZG1hX2FkZHIsXG5uZXQvc21jL3NtY193ci5jOjkzOTpcdFx0XHRcdCAgICBTTUNfV1JfQlVGX1YyX1NJWkUsXG5uZXQvc21jL3NtY193ci5jLTk0MC1cdFx0XHRcdCAgICBETUFfVE9fREVWSUNFKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ5NjgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uY2VybnMgUmVnYXJkaW5nIEJ1ZmZlciBJbml0aWFsaXphdGlvbiBpbiBgc21jX2xsY19zZW5kX2FkZF9saW5rYCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBqdXN0IG5vdGljZWQgc29tZXRoaW5nIHBvdGVudGlhbGx5IHByb2JsZW1hdGljLiBJIGtub3cgdGhhdCBgU01DX1dSX0JVRl9WMl9TSVpFYCBpcyBkZWZpbmVkIGFzIDgxOTIgYnl0ZXMsIHdoaWNoIGlzIGEgc2lnbmlmaWNhbnQgY2h1bmsgb2YgbWVtb3J5LiBIb3dldmVyLCBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBzbWNfbGxjX3NlbmRfYWRkX2xpbmtgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSB0aGVyZSBtaWdodCBiZSBhbiBpc3N1ZSB3aXRoIGhvdyB0aGUgYnVmZmVyIGlzIGJlaW5nIGluaXRpYWxpemVkLgoKU3BlY2lmaWNhbGx5LCBJIHNlZSB0aGF0IGFuIGBhZGRsbGNgIHN0cnVjdHVyZSBpcyBjYXN0IG9udG8gdGhlIGJ1ZmZlciBhbmQgdGhlbiBhbiBleHRlbnNpb24gYGV4dGAgc3RydWN0dXJlIGlzIHBsYWNlZCByaWdodCBhZnRlciBpdC4gVGhlIGNvZGUgdGhlbiB1c2VzIGBtZW1zZXRgIHRvIHplcm8gb3V0IHRoZSBleHRlbnNpb24uIFRoZSBwcm9ibGVtIGlzIHRoYXQgYFNNQ19XUl9UWF9TSVpFYCBpcyA0NCwgd2hpY2ggaXMgdGhlIHNhbWUgc2l6ZSBhcyBgc2l6ZW9mKCphZGRsbGMpYC4gVGh1cywgSSBzZWUgdGhhdCBvbmx5IDg4IGJ5dGVzLCA0NCBlYWNoIGluIGBhZGRsbGNgIGFuZCBgZXh0YCwgYXJlIGJlaW5nIGV4cGxpY2l0bHkgemVyb2VkIG91dCwgYnV0IHRoZSBidWZmZXIgaXMgKm11Y2gqIGxhcmdlciEKCk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogd2hhdCBoYXBwZW5zIHRvIHRoZSByZW1haW5pbmcgODAwNCBieXRlcz8gQXJlIHRoZXNlIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgYnl0ZXMgc2VudCBvdmVyIHRoZSBuZXR3b3JrPyBUaGF0IHdvdWxkIGJlIGEgc2VyaW91cyBzZWN1cml0eSBjb25jZXJuLCBhbmQgZXZlbiBpZiBpdCBpc24mIzM5O3QsIHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBsZWFkIHRvIGEgdmFyaWV0eSBvZiBzdWJ0bGUgYW5kIGhhcmQtdG8tZGVidWcgaXNzdWVzLiBJIG5lZWQgdG8gdGFrZSBhbm90aGVyIGxvb2sgYXQgdGhlIGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgaG93IHRoZSByZXN0IG9mIHRoZSBidWZmZXIgaXMgaGFuZGxlZCBhbmQgaWYgdGhpcyBpcyBhIHJlYWwgcHJvYmxlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc21jL3NtY19sbGMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjgwOlx0XHRpZiAobGlua19uZXcpIHtcbiA2ODE6XHRcdFx0YWRkbGxjLVx1MDAzZWxpbmtfbnVtID0gbGlua19uZXctXHUwMDNlbGlua19pZDtcbiA2ODI6XHRcdFx0aHRvbjI0KGFkZGxsYy1cdTAwM2VzZW5kZXJfcXBfbnVtLCBsaW5rX25ldy1cdTAwM2Vyb2NlX3FwLVx1MDAzZXFwX251bSk7XG4gNjgzOlx0XHRcdGh0b24yNChhZGRsbGMtXHUwMDNlaW5pdGlhbF9wc24sIGxpbmtfbmV3LVx1MDAzZXBzbl9pbml0aWFsKTtcbiA2ODQ6XHRcdFx0aWYgKHJlcXJlc3AgPT0gU01DX0xMQ19SRVEpXG4gNjg1Olx0XHRcdFx0YWRkbGxjLVx1MDAzZXFwX210dSA9IGxpbmtfbmV3LVx1MDAzZXBhdGhfbXR1O1xuIDY4NjpcdFx0XHRlbHNlXG4gNjg3Olx0XHRcdFx0YWRkbGxjLVx1MDAzZXFwX210dSA9IG1pbihsaW5rX25ldy1cdTAwM2VwYXRoX210dSxcbiA2ODg6XHRcdFx0XHRcdFx0ICAgICBsaW5rX25ldy1cdTAwM2VwZWVyX210dSk7XG4gNjg5Olx0XHR9XG4gNjkwOlx0XHRpZiAoZXh0IFx1MDAyNlx1MDAyNiBsaW5rX25ldylcbiA2OTE6XHRcdFx0bGVuICYjNDM7PSBzbWNfbGxjX2ZpbGxfZXh0X3YyKGV4dCwgbGluaywgbGlua19uZXcpO1xuIDY5MjpcdFx0c21jX2xsY19pbml0X21zZ19oZHIoXHUwMDI2YWRkbGxjLVx1MDAzZWhkLCBsaW5rLVx1MDAzZWxnciwgbGVuKTtcbiA2OTM6XHRcdC8qIHNlbmQgbGxjIG1lc3NhZ2UgKi9cbiA2OTQ6XHRcdGlmIChsaW5rLVx1MDAzZWxnci1cdTAwM2VzbWNfdmVyc2lvbiA9PSBTTUNfVjIpXG4gNjk1Olx0XHRcdHJjID0gc21jX3dyX3R4X3YyX3NlbmQobGluaywgcGVuZCwgbGVuKTtcbiA2OTY6XHRcdGVsc2VcbiA2OTc6XHRcdFx0cmMgPSBzbWNfd3JfdHhfc2VuZChsaW5rLCBwZW5kKTtcbiA2OTg6XHRwdXRfb3V0OlxuIDY5OTpcdFx0c21jX3dyX3R4X2xpbmtfcHV0KGxpbmspO1xuIDcwMDpcdFx0cmV0dXJuIHJjO1xuIDcwMTpcdH1cbiA3MDI6XHRcbiA3MDM6XHQvKiBzZW5kIERFTEVURSBMSU5LIHJlcXVlc3Qgb3IgcmVzcG9uc2UgKi9cbiA3MDQ6XHRpbnQgc21jX2xsY19zZW5kX2RlbGV0ZV9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluaywgdTggbGlua19kZWxfaWQsXG4gNzA1Olx0XHRcdFx0ICAgICBlbnVtIHNtY19sbGNfcmVxcmVzcCByZXFyZXNwLCBib29sIG9yZGVybHksXG4gNzA2Olx0XHRcdFx0ICAgICB1MzIgcmVhc29uKVxuIDcwNzpcdHtcbiA3MDg6XHRcdHN0cnVjdCBzbWNfbGxjX21zZ19kZWxfbGluayAqZGVsbGxjO1xuIDcwOTpcdFx0c3RydWN0IHNtY193cl90eF9wZW5kX3ByaXYgKnBlbmQ7XG4gNzEwOlx0XHRzdHJ1Y3Qgc21jX3dyX2J1ZiAqd3JfYnVmO1xuIDcxMTpcdFx0aW50IHJjO1xuIDcxMjpcdFxuIDcxMzpcdFx0aWYgKCFzbWNfd3JfdHhfbGlua19ob2xkKGxpbmspKVxuIDcxNDpcdFx0XHRyZXR1cm4gLUVOT0xJTks7XG4gNzE1Olx0XHRyYyA9IHNtY19sbGNfYWRkX3BlbmRpbmdfc2VuZChsaW5rLCBcdTAwMjZ3cl9idWYsIFx1MDAyNnBlbmQpO1xuIDcxNjpcdFx0aWYgKHJjKVxuIDcxNzpcdFx0XHRnb3RvIHB1dF9vdXQ7XG4gNzE4Olx0XHRkZWxsbGMgPSAoc3RydWN0IHNtY19sbGNfbXNnX2RlbF9saW5rICopd3JfYnVmO1xuIDcxOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjMwNgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIENvbmNlcm4gUmVnYXJkaW5nIGBzbWNfd3JfdHhfdjJfc2VuZGAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHNtY193cl90eF92Ml9zZW5kKGxpbmssIHBlbmQsIGxlbik7YCBjYWxsIGFuZCBzb21ldGhpbmcgaXMgaW1tZWRpYXRlbHkganVtcGluZyBvdXQgYXQgbWUuIFRoZSBmdW5jdGlvbiBpdHNlbGYgb25seSB0cmFuc21pdHMgYGxlbmAgYnl0ZXMsIHJpZ2h0PyBBbmQgSSBzZWUgaG93IGBsZW5gIGlzIGJlaW5nIGNhbGN1bGF0ZWQ6CgpgYGBjCgkJaW50IGxlbiA9IHNpemVvZigqYWRkbGxjKTsKICAgICAgICAuLi4KCQlpZiAoZXh0ICZhbXA7JmFtcDsgbGlua19uZXcpCgkJCWxlbiAmIzQzOz0gc21jX2xsY19maWxsX2V4dF92MihleHQsIGxpbmssIGxpbmtfbmV3KTsKYGBgCgpTbyBgbGVuYCBzdGFydHMgd2l0aCB0aGUgc2l6ZSBvZiBgYWRkbGxjYCBhbmQgcG90ZW50aWFsbHkgZ2V0cyBiaWdnZXIgZGVwZW5kaW5nIG9uIHNvbWUgZXh0ZW5zaW9ucyBhbmQgbmV3IGxpbmsgY29uZmlndXJhdGlvbnMuIEJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlbGV2YW50IHN0cnVjdHVyZXMgYW5kIHRoZSBwb3RlbnRpYWwgY2FsbCB0byBgc21jX2xsY19maWxsX2V4dF92MmAsIHRoZSBtYXhpbXVtIHZhbHVlIG9mIGBsZW5gIHdpbGwgYmUgODggYnl0ZXMgaW4gdGhpcyBzY2VuYXJpby4KClRoZSBjcnVjaWFsIHBvaW50IGhlcmUgaXMgdGhhdCBpZiBgc21jX3dyX3R4X3YyX3NlbmRgICpvbmx5KiBzZW5kcyBgbGVuYCBieXRlcywgdGhlbiBhbnkgZGF0YSB0aGF0IG1pZ2h0IGV4aXN0IGluIHRoZSBidWZmZXIgKmJleW9uZCogdGhvc2UgYGxlbmAgYnl0ZXMgaXMgc2ltcGx5ICpub3QqIGdvaW5nIHRvIGJlIHRyYW5zbWl0dGVkIG92ZXIgdGhlIG5ldHdvcmsuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgYHNtY193cl90eF92Ml9zZW5kYCBiZWhhdmlvciBpbiBtb3JlIGRldGFpbCBhbmQgY29uZmlybSBteSBjdXJyZW50IGNvbmNlcm5zLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBkaXZlIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBzbWNfd3JfdHhfdjJfc2VuZGAgdG8gZW5zdXJlIHRoaXMgc3BlY2lmaWMgYXNwZWN0IGlzIGhhbmRsZWQgY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX3dyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMzNjpcdGludCBzbWNfd3JfdHhfdjJfc2VuZChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHN0cnVjdCBzbWNfd3JfdHhfcGVuZF9wcml2ICpwcml2LFxuIDMzNzpcdFx0XHQgICAgICBpbnQgbGVuKVxuIDMzODpcdHtcbiAzMzk6XHRcdGludCByYztcbiAzNDA6XHRcbiAzNDE6XHRcdGxpbmstXHUwMDNld3JfdHhfdjJfaWItXHUwMDNlc2dfbGlzdFswXS5sZW5ndGggPSBsZW47XG4gMzQyOlx0XHRpYl9yZXFfbm90aWZ5X2NxKGxpbmstXHUwMDNlc21jaWJkZXYtXHUwMDNlcm9jZV9jcV9zZW5kLFxuIDM0MzpcdFx0XHRcdCBJQl9DUV9ORVhUX0NPTVAgfCBJQl9DUV9SRVBPUlRfTUlTU0VEX0VWRU5UUyk7XG4gMzQ0Olx0XHRyYyA9IGliX3Bvc3Rfc2VuZChsaW5rLVx1MDAzZXJvY2VfcXAsIGxpbmstXHUwMDNld3JfdHhfdjJfaWIsIE5VTEwpO1xuIDM0NTpcdFx0aWYgKHJjKSB7XG4gMzQ2Olx0XHRcdHNtY193cl90eF9wdXRfc2xvdChsaW5rLCBwcml2KTtcbiAzNDc6XHRcdFx0c21jcl9saW5rX2Rvd25fY29uZF9zY2hlZChsaW5rKTtcbiAzNDg6XHRcdH1cbiAzNDk6XHRcdHJldHVybiByYztcbiAzNTA6XHR9XG4gMzUxOlx0XG4gMzUyOlx0LyogU2VuZCBwcmVwYXJlZCBXUiBzbG90IHZpYSBpYl9wb3N0X3NlbmQgYW5kIHdhaXQgZm9yIHNlbmQgY29tcGxldGlvblxuIDM1MzpcdCAqIG5vdGlmaWNhdGlvbi5cbiAzNTQ6XHQgKiBAcHJpdjogcG9pbnRlciB0byBzbWNfd3JfdHhfcGVuZF9wcml2IGlkZW50aWZ5aW5nIHByZXBhcmVkIG1lc3NhZ2UgYnVmZmVyXG4gMzU1Olx0ICovXG4gMzU2Olx0aW50IHNtY193cl90eF9zZW5kX3dhaXQoc3RydWN0IHNtY19saW5rICpsaW5rLCBzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRfcHJpdiAqcHJpdixcbiAzNTc6XHRcdFx0XHR1bnNpZ25lZCBsb25nIHRpbWVvdXQpXG4gMzU4Olx0e1xuIDM1OTpcdFx0c3RydWN0IHNtY193cl90eF9wZW5kICpwZW5kO1xuIDM2MDpcdFx0dTMyIHBuZF9pZHg7XG4gMzYxOlx0XHRpbnQgcmM7XG4gMzYyOlx0XG4gMzYzOlx0XHRwZW5kID0gY29udGFpbmVyX29mKHByaXYsIHN0cnVjdCBzbWNfd3JfdHhfcGVuZCwgcHJpdik7XG4gMzY0Olx0XHRwZW5kLVx1MDAzZWNvbXBsX3JlcXVlc3RlZCA9IDE7XG4gMzY1Olx0XHRwbmRfaWR4ID0gcGVuZC1cdTAwM2VpZHg7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MzY0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjQ1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgU01DIFdSIFRYIENvZGUgYW5kIFBvdGVudGlhbCBJc3N1ZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyB3YXMgb24gdGhlIHBvc3NpYmlsaXR5IG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHNlbnQgb3ZlciB0aGUgbmV0d29yay4gVGhlIGNvZGUgc2VlbWVkIHRvIGluaXRpYWxpemUgYSBidWZmZXIgd2l0aCBgbGVuYCBieXRlcywgYW5kIHRoZW4gZXhwbGljaXRseSB6ZXJvIG91dCB0aGlzIGJ1ZmZlciB3aXRoIGEgYG1lbXNldGAuIFRoaXMgbG9va3MgY29ycmVjdCwgYnV0IEkgZ290IGNvbmNlcm5lZCBhYm91dCB3aGF0IHdvdWxkIGhhcHBlbiBpZiB0aGUgd3JpdGUgYnVmZmVyIHdhcyB6ZXJvZWQgYWZ0ZXIgaXQgd2FzIHVzZWQuIEkgd2FzIGNvbmNlcm5lZCBhYm91dCBgc21jX3dyX3R4X3B1dF9zbG90YCB6ZXJvaW5nIHRoZSBidWZmZXIsIHRoZW4gYHNtY193cl90eF9nZXRfdjJfc2xvdGAgcmV0dXJuaW5nIGEgcG9pbnRlciB0byB0aGF0IHplcm9lZCBidWZmZXIsIGFuZCBhIHN1YnNlcXVlbnQgdXNlIHdvdWxkIGRlcmVmZXJlbmNlIGEgTlVMTCBwb2ludGVyLiAgSXQgbG9va2VkIGxpa2UgYSBjbGVhciBwb3RlbnRpYWwgZm9yIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBpcyBhIHN0YW5kYXJkIGtlcm5lbCBvb3BzLiBCdXQgYWZ0ZXIgdHJhY2luZyB0aGUgbG9naWMsIHRoaXMgb25seSBoYXBwZW5lZCBvbiBlcnJvcnMgb3IgZXhwbGljaXQgYWJvcnRzLiBUaGlzIG1lYW50IHRoZXJlIHdhcyBOTyB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrIGlzc3VlLgoKVGhlbiBJIGNvbnNpZGVyZWQgdGhlIGNoYW5nZSBmcm9tIGB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dGAgdG8gdGhlIG9wZW4tY29kZWQgd2FpdCBsb29wLiAgVGhlIG9yaWdpbmFsIGNvbmNlcm4gd2FzIHRoYXQgYHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0YCBtaWdodCBldmFsdWF0ZSBhIGNvbmRpdGlvbiB3aXRoIHNpZGUgZWZmZWN0cywgbGlrZSBgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RfaW5kZXhgLCB3aGljaCBjYWxscyBgdGVzdF9hbmRfc2V0X2JpdGAuIEl0JiMzOTtzIGEgbWFjcm8sIGFuZCBteSBjb25jZXJuIHdhcyB0aGF0IGNvbmRpdGlvbiBtaWdodCBiZSBldmFsdWF0ZWQgbXVsdGlwbGUgdGltZXMsIHBvdGVudGlhbGx5IGxlYWtpbmcgc2xvdHMuICBIb3dldmVyLCBhZnRlciBleGFtaW5pbmcgdGhlIG1hY3JvIGRlZmluaXRpb24sIEkgZG9uJiMzOTt0IHNlZSBob3cgdGhhdCBpcyBwb3NzaWJsZSwgYXMgdGhlIG1hY3JvIHNlZW1zIHRvIG9ubHkgZXZhbHVhdGUgdGhlIGNvbmRpdGlvbiBvbmNlLgoKVGhlICpyZWFsKiBpc3N1ZSB3aXRoIGB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dGAgaXMgdGhhdCBpdCB1c2VzIGBwcmVwYXJlX3RvX3dhaXRgIHdoaWNoIGFkZHMgdGFza3MgdG8gYSAqbm9uLWV4Y2x1c2l2ZSogd2FpdCBxdWV1ZS4gVGhpcyBtZWFucyBgd2FrZV91cGAgd291bGQgd2FrZSB1cCBhbGwgd2FpdGluZyB0aHJlYWRzLiAgVGhpcyBsZWFkcyB0byBhIHRodW5kZXJpbmcgaGVyZCBwcm9ibGVtLiBUaGUgY2hhbmdlIHRvIGBwcmVwYXJlX3RvX3dhaXRfZXhjbHVzaXZlYCB3aXRoIHRoZSBvcGVuLWNvZGVkIGxvb3AgdXNpbmcgYHdha2VfdXBgIGZpeGVzIHRoaXMuIEl0IG9wdGltaXplcyBwZXJmb3JtYW5jZSBhbmQgcHJldmVudHMgcG90ZW50aWFsIENQVSBzcGlrZXMsIGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBjb3JydXB0aW9uIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvbmNlcm5zLgoKRmluYWxseSwgSSByZXZpc2l0ZWQgdGhlIGBtZW1zZXRgIGNoYW5nZS4gT3JpZ2luYWxseSwgdGhlIGNvZGUgd2FzIHplcm9pbmcgdGhlICphZGRyZXNzKiBvZiBhIHBvaW50ZXIgaW5zdGVhZCBvZiB0aGUgbWVtb3J5IHRoZSBwb2ludGVyIHdhcyBwb2ludGluZyB0by4gQnkgY2hhbmdpbmcgdGhpcyB0byBgbWVtc2V0YCBvbiB0aGUgcG9pbnRlciBpdHNlbGYsIGl0IGZpeGVkIHRoZSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgbWVudGlvbmVkIGFib3ZlLiBUaGlzIGlzIGNvcnJlY3QuIFRoZSBjb2RlIG1ha2VzIGl0IHNvIHRoYXQgb25seSBleHBsaWNpdGx5IHplcm9lZCBhbmQgaW5pdGlhbGl6ZWQgYnl0ZXMgYXJlIHNlbnQgb3ZlciB0aGUgbmV0d29yaywgYW5kIHRoZSBidWZmZXIgaXMgemVyb2VkIG91dCBieSBgc21jX2xsY19zZW5kX2FkZF9saW5rYC4gU28sIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzLiBJIHNob3VsZCByZXZpZXcgb3RoZXIgdXNlcnMgb2YgYHNtY193cl90eF9nZXRfdjJfc2xvdGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NtY193cl90eF9nZXRfdjJfc2xvdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2xsYy5jPTQyMj1zdGF0aWMgaW50IHNtY19sbGNfYWRkX3BlbmRpbmdfc2VuZF92MihzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXG4tLVxubmV0L3NtYy9zbWNfbGxjLmMtNDI3LVxubmV0L3NtYy9zbWNfbGxjLmM6NDI4Olx0cmMgPSBzbWNfd3JfdHhfZ2V0X3YyX3Nsb3QobGluaywgc21jX2xsY190eF9oYW5kbGVyLCB3cl9idWYsIHBlbmQpO1xubmV0L3NtYy9zbWNfbGxjLmMtNDI5LVx0aWYgKHJjIFx1MDAzYyAwKVxuLS1cbm5ldC9zbWMvc21jX3dyLmM9MTk1PWludCBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXG4tLVxubmV0L3NtYy9zbWNfd3IuYy0yNTktXG5uZXQvc21jL3NtY193ci5jOjI2MDppbnQgc21jX3dyX3R4X2dldF92Ml9zbG90KHN0cnVjdCBzbWNfbGluayAqbGluayxcbm5ldC9zbWMvc21jX3dyLmMtMjYxLVx0XHRcdCAgc21jX3dyX3R4X2hhbmRsZXIgaGFuZGxlcixcbi0tXG5uZXQvc21jL3NtY193ci5oPTExMz1pbnQgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3Qoc3RydWN0IHNtY19saW5rICpsaW5rLCBzbWNfd3JfdHhfaGFuZGxlciBoYW5kbGVyLFxuLS1cbm5ldC9zbWMvc21jX3dyLmgtMTE2LVx0XHRcdCAgICBzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRfcHJpdiAqKndyX3BlbmRfcHJpdik7XG5uZXQvc21jL3NtY193ci5oOjExNzppbnQgc21jX3dyX3R4X2dldF92Ml9zbG90KHN0cnVjdCBzbWNfbGluayAqbGluayxcbm5ldC9zbWMvc21jX3dyLmgtMTE4LVx0XHRcdCAgc21jX3dyX3R4X2hhbmRsZXIgaGFuZGxlcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA4NjcKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipUcmFjaW5nIHRoZSBDYWxsZXJzIG9mIGBzbWNfbGxjX2FkZF9wZW5kaW5nX3NlbmRfdjJgKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgZmxvdyBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2Ugd2hlcmUgYHNtY19sbGNfYWRkX3BlbmRpbmdfc2VuZF92MmAgaXMgYWN0dWFsbHkgKnVzZWQqLiBJdCBsb29rcyBsaWtlIHRoZSBjb2RlIG9ubHkgc2hvd3MgYHNtY19sbGNfYWRkX3BlbmRpbmdfc2VuZF92MmAgYmVpbmcgY2FsbGVkIGJ5IHRoZSBmdW5jdGlvbiBgc21jX2xsY19hZGRfcGVuZGluZ19zZW5kX3YyYCBpdHNlbGYuIE5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hvJiMzOTtzIGNhbGxpbmcgKnRoYXQqIGZ1bmN0aW9uLiBJIHNlZSB0aGF0IGBzbWNfbGxjX2FkZF9wZW5kaW5nX3NlbmRfdjJgIGlzIG9ubHkgY2FsbGVkIGJ5IHR3byBmdW5jdGlvbnM6IGBzbWNfbGxjX3NlbmRfYWRkX2xpbmtgIGFuZCBgc21jX2xsY19zZW5kX3JlcXVlc3RfYWRkX2xpbmtgLiBJIHRoaW5rIGl0IGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBgc21jX2xsY19zZW5kX3JlcXVlc3RfYWRkX2xpbmtgIGZ1bmN0aW9uLCBzaW5jZSBpdCBzZWVtcyB0byBiZSB0aGUgbW9zdCBjcml0aWNhbCBvZiB0aGUgdHdvIHRvIGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2xsYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEyNiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTI2Olx0c3RhdGljIHZvaWQgc21jX2xsY19zZW5kX3JlcXVlc3RfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rKVxuMTEyNzpcdHtcbjExMjg6XHRcdHN0cnVjdCBzbWNfbGxjX21zZ19yZXFfYWRkX2xpbmtfdjIgKmxsYztcbjExMjk6XHRcdHN0cnVjdCBzbWNfd3JfdHhfcGVuZF9wcml2ICpwZW5kO1xuMTEzMDpcdFx0c3RydWN0IHNtY193cl92Ml9idWYgKndyX2J1ZjtcbjExMzE6XHRcdHN0cnVjdCBzbWNfZ2lkbGlzdCBnaWRsaXN0O1xuMTEzMjpcdFx0aW50IHJjLCBsZW4sIGk7XG4xMTMzOlx0XG4xMTM0Olx0XHRpZiAoIXNtY193cl90eF9saW5rX2hvbGQobGluaykpXG4xMTM1Olx0XHRcdHJldHVybjtcbjExMzY6XHRcdGlmIChsaW5rLVx1MDAzZWxnci1cdTAwM2V0eXBlID09IFNNQ19MR1JfU1lNTUVUUklDIHx8XG4xMTM3Olx0XHQgICAgbGluay1cdTAwM2VsZ3ItXHUwMDNldHlwZSA9PSBTTUNfTEdSX0FTWU1NRVRSSUNfUEVFUilcbjExMzg6XHRcdFx0Z290byBwdXRfb3V0O1xuMTEzOTpcdFxuMTE0MDpcdFx0c21jX2ZpbGxfZ2lkX2xpc3QobGluay1cdTAwM2VsZ3IsIFx1MDAyNmdpZGxpc3QsIGxpbmstXHUwMDNlc21jaWJkZXYsIGxpbmstXHUwMDNlZ2lkKTtcbjExNDE6XHRcdGlmIChnaWRsaXN0LmxlbiBcdTAwM2M9IDEpXG4xMTQyOlx0XHRcdGdvdG8gcHV0X291dDtcbjExNDM6XHRcbjExNDQ6XHRcdHJjID0gc21jX2xsY19hZGRfcGVuZGluZ19zZW5kX3YyKGxpbmssIFx1MDAyNndyX2J1ZiwgXHUwMDI2cGVuZCk7XG4xMTQ1Olx0XHRpZiAocmMpXG4xMTQ2Olx0XHRcdGdvdG8gcHV0X291dDtcbjExNDc6XHRcdGxsYyA9IChzdHJ1Y3Qgc21jX2xsY19tc2dfcmVxX2FkZF9saW5rX3YyICopd3JfYnVmO1xuMTE0ODpcdFx0bWVtc2V0KGxsYywgMCwgU01DX1dSX1RYX1NJWkUpO1xuMTE0OTpcdFxuMTE1MDpcdFx0bGxjLVx1MDAzZWhkLmNvbW1vbi5sbGNfdHlwZSA9IFNNQ19MTENfUkVRX0FERF9MSU5LO1xuMTE1MTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZ2lkbGlzdC5sZW47IGkmIzQzOyYjNDM7KVxuMTE1MjpcdFx0XHRtZW1jcHkobGxjLVx1MDAzZWdpZFtpXSwgZ2lkbGlzdC5saXN0W2ldLCBzaXplb2YoZ2lkbGlzdC5saXN0WzBdKSk7XG4xMTUzOlx0XHRsbGMtXHUwMDNlZ2lkX2NudCA9IGdpZGxpc3QubGVuO1xuMTE1NDpcdFx0bGVuID0gc2l6ZW9mKCpsbGMpICYjNDM7IChnaWRsaXN0LmxlbiAqIHNpemVvZihnaWRsaXN0Lmxpc3RbMF0pKTtcbjExNTU6XHRcdHNtY19sbGNfaW5pdF9tc2dfaGRyKFx1MDAyNmxsYy1cdTAwM2VoZCwgbGluay1cdTAwM2VsZ3IsIGxlbik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxODQzCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVxdWVzdCBBZGRpdGlvbiBvZiBhIExpbmsgaW4gdGhlIFNNQyBMYXllcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBzbWNfbGxjX3NlbmRfcmVxdWVzdF9hZGRfbGlua2AgZnVuY3Rpb24sIGFuZCBJIHNlZSB0aGV5JiMzOTtyZSBpbml0aWFsaXppbmcgdGhlIGBsbGNgIHZhcmlhYmxlIHRvIHBvaW50IHRvIGEgYnVmZmVyIChgd3JfYnVmYCkgYW5kIGNhc3RpbmcgaXQgYXMgYSBgc3RydWN0IHNtY19sbGNfbXNnX3JlcV9hZGRfbGlua192MmAuIE1ha2VzIHNlbnNlLCB3ZSYjMzk7cmUgYnVpbGRpbmcgYSByZXF1ZXN0IG1lc3NhZ2UgZm9yIGFkZGluZyBhIGxpbmsuIFRoZXkmIzM5O3JlIHRoZW4gemVyb2luZyBvdXQgdGhlIGJ1ZmZlciB1c2luZyBgbWVtc2V0YCwgdXNpbmcgYFNNQ19XUl9UWF9TSVpFYC4KCkJ1dCB3YWl0IGEgbWludXRlLi4uIGBTTUNfV1JfVFhfU0laRWAgaXMgZGVmaW5lZCBhcyA0NCBieXRlcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0JiMzOTtzIHRoZSBjb3JyZWN0IHNpemUuIFRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlLCBpcyB0aGF0IHJlYWxseSBsYXJnZSBlbm91Z2ggZm9yIGBzdHJ1Y3Qgc21jX2xsY19tc2dfcmVxX2FkZF9saW5rX3YyYD8gSSBoYXZlIHRvIGNvbmZpcm0gdGhlIHN0cnVjdHVyZSBzaXplLCBpbiBjYXNlIHdlIGhhdmUgYSBidWZmZXIgb3ZlcmZsb3cuIFRoaXMgaXMgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBpZiB0aGUgc3RydWN0IGlzIGxhcmdlciB0aGFuIDQ0IGJ5dGVzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3Qgc21jX2xsY19tc2dfcmVxX2FkZF9saW5rX3YyIFxceyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2xsYy5jPTg2PXN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGlua192Ml9leHQge1xuLS1cbm5ldC9zbWMvc21jX2xsYy5jLTEwMy1cbm5ldC9zbWMvc21jX2xsYy5jOjEwNDpzdHJ1Y3Qgc21jX2xsY19tc2dfcmVxX2FkZF9saW5rX3YyIHtcbm5ldC9zbWMvc21jX2xsYy5jLTEwNS1cdHN0cnVjdCBzbWNfbGxjX2hkciBoZDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIzNjEKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYHN0cnVjdCBzbWNfbGxjX21zZ19yZXFfYWRkX2xpbmtfdjJgIFN0cnVjdHVyZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHN0cnVjdCBzbWNfbGxjX21zZ19yZXFfYWRkX2xpbmtfdjJgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCYjMzk7cyBuZXcgb3IgZGlmZmVyZW50IGhlcmUgY29tcGFyZWQgdG8gdGhlIHByZXZpb3VzIHZlcnNpb24gb3Igc2ltaWxhciBzdHJ1Y3R1cmVzPyBJcyB0aGlzIGEgY29tcGxldGUgcmV3cml0ZSwgYSBtaW5vciB0d2Vhaywgb3IgYW4gaW5jcmVtZW50YWwgaW1wcm92ZW1lbnQ/IEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGtleSBmaWVsZHMgdGhhdCBkZWZpbmUgbGluayBhZGRpdGlvbiwgcGFydGljdWxhcmx5IGFueXRoaW5nIHJlbGF0ZWQgdG8gdmVyc2lvbmluZywgc2VjdXJpdHksIG9yIHBlcmZvcm1hbmNlIGVuaGFuY2VtZW50cywgYW5kIGhvdyB0aGV5IGludGVyYWN0LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IGhvdyB0aGlzIGltcGFjdHMgdGhlIG92ZXJhbGwgZmxvdyBvZiB0aGUgTGluayBMYXllciBDb250cm9sIChMTEMpIG1lc3NhZ2VzIGluIHRoZSBTTUMgcHJvdG9jb2wgYW5kIHdoZXJlIGl0IGZpdHMgaW4gdGhlIHNlcXVlbmNlLiBJIGFudGljaXBhdGUgaXQmIzM5O2xsIGhvbGQgaW5mb3JtYXRpb24gbGlrZSBwZWVyIGFkZHJlc3NlcywgY29ubmVjdGlvbiBwYXJhbWV0ZXJzLCBhbmQgcmVzb3VyY2UgYWxsb2NhdGlvbiBkZXRhaWxzLiBUaGUgJiMzNDt2MiYjMzQ7IHN0cm9uZ2x5IGltcGxpZXMgYSBwcm90b2NvbCBldm9sdXRpb24sIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb21wYXRpYmlsaXR5IGltcGxpY2F0aW9uc+KAlGlzIGl0IGJhY2t3YXJkIGNvbXBhdGlibGUsIG9yIGRvIHdlIG5lZWQgdmVyc2lvbiBuZWdvdGlhdGlvbj8gTGV0JiMzOTtzIGNoZWNrIHRoZSBoZWFkZXIgZmlsZXMgYW5kIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfbGxjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwNDpcdHN0cnVjdCBzbWNfbGxjX21zZ19yZXFfYWRkX2xpbmtfdjIge1xuIDEwNTpcdFx0c3RydWN0IHNtY19sbGNfaGRyIGhkO1xuIDEwNjpcdFx0dTggcmVzZXJ2ZWRbMjBdO1xuIDEwNzpcdFx0dTggZ2lkX2NudDtcbiAxMDg6XHRcdHU4IHJlc2VydmVkMlszXTtcbiAxMDk6XHRcdHU4IGdpZFtdW1NNQ19HSURfU0laRV07XG4gMTEwOlx0fTtcbiAxMTE6XHRcbiAxMTI6XHQjZGVmaW5lIFNNQ19MTENfUktFWVNfUEVSX0NPTlRfTVNHXHQyXG4gMTEzOlx0XG4gMTE0Olx0c3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rX2NvbnQge1x0LyogdHlwZSAweDAzICovXG4gMTE1Olx0XHRzdHJ1Y3Qgc21jX2xsY19oZHIgaGQ7XG4gMTE2Olx0XHR1OCBsaW5rX251bTtcbiAxMTc6XHRcdHU4IG51bV9ya2V5cztcbiAxMTg6XHRcdHU4IHJlc2VydmVkMlsyXTtcbiAxMTk6XHRcdHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGlua19jb250X3J0IHJ0W1NNQ19MTENfUktFWVNfUEVSX0NPTlRfTVNHXTtcbiAxMjA6XHRcdHU4IHJlc2VydmVkWzRdO1xuIDEyMTpcdH0gX19wYWNrZWQ7XHRcdFx0LyogZm9ybWF0IGRlZmluZWQgaW4gUkZDNzYwOSAqL1xuIDEyMjpcdFxuIDEyMzpcdCNkZWZpbmUgU01DX0xMQ19GTEFHX0RFTF9MSU5LX0FMTFx0MHg0MFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzAxOAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNNQyBMTEMgTWVzc2FnZSBSZXF1ZXN0KioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgYHN0cnVjdCBzbWNfbGxjX21zZ19yZXFfYWRkX2xpbmtfdjJgLiBJIHNlZSBpdCYjMzk7cyBnb3QgYSBmaXhlZCBoZWFkZXIgKGBoZGApIG9mIDE2IGJ5dGVzLCBhIHJlc2VydmVkIHNwYWNlIChgcmVzZXJ2ZWRgKSBmb3IgMjAgYnl0ZXMsIGEgYGdpZF9jbnRgIHdoaWNoIGlzIGp1c3QgMSBieXRlLCBhbmQgYW5vdGhlciAzIGJ5dGVzIG9mIGByZXNlcnZlZDJgLiBUaGF0JiMzOTtzIGEgdG90YWwgb2YgNDAgYnl0ZXMgZm9yIHRoZSBmaXhlZCBwb3J0aW9uLiBUaGVuLCB3ZSBoYXZlIHRoZSB2YXJpYWJsZS1sZW5ndGggYGdpZGAgYXJyYXksIGBnaWRbXVtTTUNfR0lEX1NJWkVdYCwgd2hlcmUgYFNNQ19HSURfU0laRWAgaXMsIEkgcmVjYWxsLCAxNi4KCkhtbSwgdGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBJIHNlZSBhIGBtZW1zZXQobGxjLCAwLCBTTUNfV1JfVFhfU0laRSk7YCB3aGljaCBjbGVhcnMgNDQgYnl0ZXMuIEJ1dCB0aGVuIHRoZSBzaXplIGlzIGNhbGN1bGF0ZWQgZGlmZmVyZW50bHk6IGBsZW4gPSBzaXplb2YoKmxsYykgJiM0MzsgKGdpZGxpc3QubGVuICogc2l6ZW9mKGdpZGxpc3QubGlzdFswXSkpO2AuIGBzaXplb2YoKmxsYylgIGNvcnJlY3RseSBnaXZlcyA0MCBieXRlcywgYnV0IHdoYXQmIzM5O3MgdGhlIHVwcGVyIGJvdW5kIG9uIGBnaWRsaXN0LmxlbmA/IEkgbmVlZCB0byBjaGVjayBgc21jX2ZpbGxfZ2lkX2xpc3RgIHRvIHNlZSBob3cgdGhhdCYjMzk7cyBoYW5kbGVkLiBMb29rcyBsaWtlIHRoaXMgY291bGQgY3JlYXRlIGEgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvdyB2dWxuZXJhYmlsaXR5LiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5IGhhbmRsZSBpdC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNfZmlsbF9naWRfbGlzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvYWZfc21jLmM9MTE4OD1zdGF0aWMgaW50IHNtY19jb25uZWN0X2NsYyhzdHJ1Y3Qgc21jX3NvY2sgKnNtYyxcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTEyMDItXG5uZXQvc21jL2FmX3NtYy5jOjEyMDM6dm9pZCBzbWNfZmlsbF9naWRfbGlzdChzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncixcbm5ldC9zbWMvYWZfc21jLmMtMTIwNC1cdFx0ICAgICAgIHN0cnVjdCBzbWNfZ2lkbGlzdCAqZ2lkbGlzdCxcbi0tXG5uZXQvc21jL2FmX3NtYy5jPTEyNjc9c3RhdGljIGludCBzbWNfY29ubmVjdF9yZG1hKHN0cnVjdCBzbWNfc29jayAqc21jLFxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMTM1OS1cdFx0aWYgKGluaS1cdTAwM2VmaXJzdF9jb250YWN0X2xvY2FsKVxubmV0L3NtYy9hZl9zbWMuYzoxMzYwOlx0XHRcdHNtY19maWxsX2dpZF9saXN0KGxpbmstXHUwMDNlbGdyLCBcdTAwMjZpbmktXHUwMDNlc21jcnYyLmdpZGxpc3QsXG5uZXQvc21jL2FmX3NtYy5jLTEzNjEtXHRcdFx0XHRcdCAgbGluay1cdTAwM2VzbWNpYmRldiwgbGluay1cdTAwM2VnaWQpO1xuLS1cbm5ldC9zbWMvc21jLmg9NDE5PXZvaWQgc21jX2Nsb3NlX25vbl9hY2NlcHRlZChzdHJ1Y3Qgc29jayAqc2spO1xubmV0L3NtYy9zbWMuaDo0MjA6dm9pZCBzbWNfZmlsbF9naWRfbGlzdChzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncixcbm5ldC9zbWMvc21jLmgtNDIxLVx0XHQgICAgICAgc3RydWN0IHNtY19naWRsaXN0ICpnaWRsaXN0LFxuLS1cbm5ldC9zbWMvc21jX2xsYy5jPTExMjY9c3RhdGljIHZvaWQgc21jX2xsY19zZW5kX3JlcXVlc3RfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rKVxuLS1cbm5ldC9zbWMvc21jX2xsYy5jLTExMzktXG5uZXQvc21jL3NtY19sbGMuYzoxMTQwOlx0c21jX2ZpbGxfZ2lkX2xpc3QobGluay1cdTAwM2VsZ3IsIFx1MDAyNmdpZGxpc3QsIGxpbmstXHUwMDNlc21jaWJkZXYsIGxpbmstXHUwMDNlZ2lkKTtcbm5ldC9zbWMvc21jX2xsYy5jLTExNDEtXHRpZiAoZ2lkbGlzdC5sZW4gXHUwMDNjPSAxKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDA1MAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYHNtY19maWxsX2dpZF9saXN0YCBpbiBgbmV0L3NtYy9hZl9zbWMuY2AqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgZ3V0cyBvZiB0aGUgU01DIGNvZGUuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gYHNtY19maWxsX2dpZF9saXN0YCB3aXRoaW4gYG5ldC9zbWMvYWZfc21jLmNgLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSByZXNwb25zaWJsZSBmb3IgcG9wdWxhdGluZyB0aGUgR0lEIGxpc3QsIHdoaWNoIGlzIGEgY3JpdGljYWwgcGFydCBvZiB0aGUgU01DIChTaGFyZWQgTWVtb3J5IENvbW11bmljYXRpb25zKSBzZXR1cC4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byBoYW5kbGUgdGhlIG1hcHBpbmcgb2YgZ2xvYmFsIGlkZW50aWZpZXJzIHRvIHRoZSB1bmRlcmx5aW5nIHNoYXJlZCBtZW1vcnkgcmVnaW9ucy4gVW5kZXJzdGFuZGluZyBob3cgaXQgaGFuZGxlcyBHSUQgYWxsb2NhdGlvbiwgcG90ZW50aWFsbHkgd2l0aCB1c2VyIHNwYWNlIGludGVyYWN0aW9ucyBvciB3aXRoaW4gdGhlIGtlcm5lbCBpdHNlbGYsIHdpbGwgYmUga2V5IHRvIGdyYXNwaW5nIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMuIEkmIzM5O20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJmYWNlcyB3aXRoIG90aGVyIFNNQyBjb21wb25lbnRzLCBzdWNoIGFzIHNvY2tldCBjcmVhdGlvbi9tYW5hZ2VtZW50IGFuZCB0aGUgc2hhcmVkIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljLiBUaGUgZ29hbCBpcyB0byBlaXRoZXIgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9yIHF1aWNrbHkgaWRlbnRpZnkgYSBzcGVjaWZpYyBhcmVhIG9mIGludGVyZXN0LiBBbnkgc3VidGxlIHRocmVhZGluZyBvciBsb2NraW5nIG1lY2hhbmlzbXMgd2l0aGluIHRoaXMgcm91dGluZSB3aWxsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc21jL2FmX3NtYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIwMywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjAzOlx0dm9pZCBzbWNfZmlsbF9naWRfbGlzdChzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncixcbjEyMDQ6XHRcdFx0ICAgICAgIHN0cnVjdCBzbWNfZ2lkbGlzdCAqZ2lkbGlzdCxcbjEyMDU6XHRcdFx0ICAgICAgIHN0cnVjdCBzbWNfaWJfZGV2aWNlICprbm93bl9kZXYsIHU4ICprbm93bl9naWQpXG4xMjA2Olx0e1xuMTIwNzpcdFx0c3RydWN0IHNtY19pbml0X2luZm8gKmFsdF9pbmkgPSBOVUxMO1xuMTIwODpcdFxuMTIwOTpcdFx0bWVtc2V0KGdpZGxpc3QsIDAsIHNpemVvZigqZ2lkbGlzdCkpO1xuMTIxMDpcdFx0bWVtY3B5KGdpZGxpc3QtXHUwMDNlbGlzdFtnaWRsaXN0LVx1MDAzZWxlbiYjNDM7JiM0MztdLCBrbm93bl9naWQsIFNNQ19HSURfU0laRSk7XG4xMjExOlx0XG4xMjEyOlx0XHRhbHRfaW5pID0ga3phbGxvY19vYmooKmFsdF9pbmkpO1xuMTIxMzpcdFx0aWYgKCFhbHRfaW5pKVxuMTIxNDpcdFx0XHRnb3RvIG91dDtcbjEyMTU6XHRcbjEyMTY6XHRcdGFsdF9pbmktXHUwMDNldmxhbl9pZCA9IGxnci1cdTAwM2V2bGFuX2lkO1xuMTIxNzpcdFx0YWx0X2luaS1cdTAwM2VjaGVja19zbWNydjIgPSB0cnVlO1xuMTIxODpcdFx0YWx0X2luaS1cdTAwM2VzbWNydjIuc2FkZHIgPSBsZ3ItXHUwMDNlc2FkZHI7XG4xMjE5Olx0XHRzbWNfcG5ldF9maW5kX2FsdF9yb2NlKGxnciwgYWx0X2luaSwga25vd25fZGV2KTtcbjEyMjA6XHRcbjEyMjE6XHRcdGlmICghYWx0X2luaS1cdTAwM2VzbWNydjIuaWJfZGV2X3YyKVxuMTIyMjpcdFx0XHRnb3RvIG91dDtcbjEyMjM6XHRcbjEyMjQ6XHRcdG1lbWNweShnaWRsaXN0LVx1MDAzZWxpc3RbZ2lkbGlzdC1cdTAwM2VsZW4mIzQzOyYjNDM7XSwgYWx0X2luaS1cdTAwM2VzbWNydjIuaWJfZ2lkX3YyLFxuMTIyNTpcdFx0ICAgICAgIFNNQ19HSURfU0laRSk7XG4xMjI2Olx0XG4xMjI3Olx0b3V0OlxuMTIyODpcdFx0a2ZyZWUoYWx0X2luaSk7XG4xMjI5Olx0fVxuMTIzMDpcdFxuMTIzMTpcdHN0YXRpYyBpbnQgc21jX2Nvbm5lY3RfcmRtYV92Ml9wcmVwYXJlKHN0cnVjdCBzbWNfc29jayAqc21jLFxuMTIzMjpcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBzbWNfY2xjX21zZ19hY2NlcHRfY29uZmlybSAqYWNsYyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ4NzcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMzYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IEluaXRpYWxpemF0aW9uIGFuZCBCdWcgRml4KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCByZWdhcmRpbmcgdGhlIGluaXRpYWwgY29uY2VybiBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBgc21jX3dyX3R4X2dldF92Ml9zbG90YCwgbXkgYW5hbHlzaXMgY29uZmlybXMgdGhhdCB0aGUgY29kZSAqZG9lcyogZnVsbHkgaW5pdGlhbGl6ZSB0aGUgYnVmZmVyLiBgZ2lkbGlzdC0mZ3Q7bGVuYCBpcyBhdCBtb3N0IDIsIHNvIHRoZSBjYWxjdWxhdGVkIGxlbmd0aCwgYGxlbiA9IDQwICYjNDM7IDIgKiAxNiA9IDcyYCwgY29ycmVjdGx5IGFjY291bnRzIGZvciB0aGUgaGVhZGVyICg0MCBieXRlcykgYW5kIHRoZSB0d28gcG90ZW50aWFsIGVudHJpZXMgaW4gYGdpZGxpc3RgIChlYWNoIDE2IGJ5dGVzKS4gV2hpbGUgYG1lbXNldGAgaW5pdGlhbGx5IHplcm9lcyBvbmx5IDQ0IGJ5dGVzLCB0aGUgc3Vic2VxdWVudCBgbWVtY3B5YCBjYWxscyBmaWxsIHRoZSByZW1haW5pbmcgMzIgYnl0ZXMgb2YgdGhlIGJ1ZmZlciBmcm9tIGBnaWRsaXN0Lmxpc3RbaV1gIHRvIGBsbGMtJmd0O2dpZFtpXWAuIFRodXMsIHRoZSBieXRlcyBmcm9tIDQwIHRvIDcyIGFyZSBjb3JyZWN0bHkgd3JpdHRlbi4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgbGVha2luZy4gVGhhdCYjMzk7cyBnb29kLgoKTm93LCBmb2N1c2luZyBvbiB0aGUgYnVnIGluIGBzbWNfd3JfdHhfcHV0X3Nsb3RgLiBUaGUgb3JpZ2luYWwgZml4IGNoYW5nZXMgYSBgbWVtc2V0YCBvbiBhIHBvaW50ZXIgdG8gY2xlYXIgdGhlIG1lbW9yeS4gSWYgYGxpbmstJmd0O2xnci0mZ3Q7d3JfdHhfYnVmX3YyYCBpcyBpbmRlZWQgYSBwb2ludGVyIGFuZCBpcyB6ZXJvZWQsIHRoZW4gdGhlIG5leHQgY2FsbCB0byBgc21jX3dyX3R4X2dldF92Ml9zbG90YCByZXR1cm5zIGBOVUxMYC4gVGhlIHN1YnNlcXVlbnQgYGFkZGxsY2AgYXNzaWdubWVudCBhbmQgYG1lbXNldGAgcmVzdWx0IGluIGEgY2xhc3NpYyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHdoaWNoIHRyaWdnZXJzIGVpdGhlciBLQVNBTiBvciBhIHN0YW5kYXJkIGtlcm5lbCBvb3BzLiBUaGlzIGlzbiYjMzk7dCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkOyBpdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBkZXJlZmVyZW5jZSBvZiBhIG51bGwgcG9pbnRlciwgbWVhbmluZyBubyBpbmZvcm1hdGlvbiBsZWFrYWdlLiBJIHN1c3BlY3QgdGhpcyB3aWxsIGJlIGVhc3kgdG8gcmVwcm9kdWNlLCBnb29kIQoKU2ltaWxhcmx5LCB6ZXJvaW5nIGBsaW5rLSZndDt3cl90eF92Ml9wZW5kYCAoYW5vdGhlciBwb2ludGVyKSBsZWFkcyB0byB0aGUgc2FtZSBwcm9ibGVtOiBhIE5VTEwgZGVyZWZlcmVuY2Ugd2l0aGluIGBzbWNfd3JfdHhfZ2V0X3YyX3Nsb3RgIHdoZW4gYWNjZXNzaW5nIGBsaW5rLSZndDt3cl90eF92Ml9wZW5kLSZndDtpZHhgLiBUaGUgcHJvYmxlbSBpcyB0aGF0IHRoZSBgbWVtc2V0YCBpcyB6ZXJvaW5nIHRoZSAqcG9pbnRlciogcmF0aGVyIHRoYW4gdGhlIG1lbW9yeSBpdCBwb2ludHMgdG8uCgpGaW5hbGx5LCByZWdhcmRpbmcgdGhlIGNoYW5nZSBmcm9tIGB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dGAgdG8gdGhlIG9wZW4tY29kZWQgbG9vcCwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gVGhlIGNvZGUgaXMgbWVhbnQgdG8gYXZvaWQgdGhlICYjMzQ7dGh1bmRlcmluZyBoZXJkJiMzNDsgZWZmZWN0IGJ5IHVzaW5nIGBwcmVwYXJlX3RvX3dhaXRfZXhjbHVzaXZlYCwgd2hpY2ggaXMgc3RhbmRhcmQuIEJ1dC4uLiBjb3VsZCB0aGVyZSBiZSBhIHJhY2UgY29uZGl0aW9uPyBDb3VsZCBgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXRgIHJldHVybiwgdGhlIGNvZGUgKnRoZW4qIGNoZWNrcyB0aGUgY29uZGl0aW9uICphZ2FpbiogYW5kIGdldCBhIGRpZmZlcmVudCByZXN1bHQ/IExldCBtZSBjaGVjayB0aGUgbWFjcm8gZXhwYW5zaW9uIG9mIGB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dGAuLi4gTm8sIGl0IHNob3VsZCBiZSBmaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3dhaXQuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3dhaXQuaD00NzY9ZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi0tXG5pbmNsdWRlL2xpbnV4L3dhaXQuaC01MzQtICovXG5pbmNsdWRlL2xpbnV4L3dhaXQuaDo1MzU6I2RlZmluZSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCh3cV9oZWFkLCBjb25kaXRpb24sIHRpbWVvdXQpXHRcdFxcXG5pbmNsdWRlL2xpbnV4L3dhaXQuaC01MzYtKHtcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2OTI4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsJiMzOTtzIFdhaXQgTWVjaGFuaXNtKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQmIzM5O3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIHRoZSBoZWFydCBvZiB0aGUgd2FpdCBtZWNoYW5pc20gaW4gdGhlIExpbnV4IGtlcm5lbC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXRgIGFjdHVhbGx5IHdvcmtzLiBJIGtub3cgdGhlIGdlbmVyYWwgaWRlYSAtIGl0IHB1dHMgYSBwcm9jZXNzIHRvIHNsZWVwLCBwb3RlbnRpYWxseSBhbGxvd2luZyBpdCB0byBiZSB3b2tlbiBieSBhbiBpbnRlcnJ1cHQgb3Igc2lnbmFsLCB3aXRoIGEgc3BlY2lmaWVkIHRpbWVvdXQuIEJ1dCBJIHdhbnQgdG8gbmFpbCBkb3duIHRoZSBzcGVjaWZpY3MsIHBhcnRpY3VsYXJseSB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIHdhaXQgcXVldWUsIHRoZSB0YXNrIHN0YXRlLCBzaWduYWwgaGFuZGxpbmcsIGFuZCB0aGUgdGltZW91dCBpbXBsZW1lbnRhdGlvbiBpdHNlbGYuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0aGUgYXRvbWljIG9wZXJhdGlvbnMsIGFuZCBob3cgdGhleSBlbnN1cmUgY29ycmVjdG5lc3MgaW4gYSBtdWx0aS10aHJlYWRlZCwgaW50ZXJydXB0LWRyaXZlbiBlbnZpcm9ubWVudC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBpbnRlcmVzdGluZyBkZXRhaWxzIHJlZ2FyZGluZyBzcGlubG9ja3MgYW5kIGFueSByZWxhdGVkIHJhY2UgY29uZGl0aW9ucyB0aGF0IGFyZSBoYW5kbGVkIGFuZCB3aWxsIGJlIGxvb2tpbmcgZm9yIGhvdyB0aGUgaW1wbGVtZW50YXRpb24gaGFuZGxlcyBkaWZmZXJlbnQgc2NlbmFyaW9zLCBwYXJ0aWN1bGFybHkgc2lnbmFsIGRlbGl2ZXJ5IGR1cmluZyB0aGUgd2FpdGluZyBwZXJpb2QuIFVsdGltYXRlbHksIHRoZSBnb2FsIGlzIHRvIGZ1bGx5IGdyYXNwIHRoZSBpbnRyaWNhY2llcyB0aGF0IGRpY3RhdGUgdGhlIHByZWNpc2UgYmVoYXZpb3IgdW5kZXIgYSByYW5nZSBvZiBjb25kaXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvd2FpdC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MzU6XHQjZGVmaW5lIHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHdxX2hlYWQsIGNvbmRpdGlvbiwgdGltZW91dClcdFx0XFxcbiA1MzY6XHQoe1x0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiA1Mzc6XHRcdGxvbmcgX19yZXQgPSB0aW1lb3V0O1x0XHRcdFx0XHRcdFx0XFxcbiA1Mzg6XHRcdG1pZ2h0X3NsZWVwKCk7XHRcdFx0XHRcdFx0XHRcdFxcXG4gNTM5Olx0XHRpZiAoIV9fX3dhaXRfY29uZF90aW1lb3V0KGNvbmRpdGlvbikpXHRcdFx0XHRcdFxcXG4gNTQwOlx0XHRcdF9fcmV0ID0gX193YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCh3cV9oZWFkLFx0XHRcXFxuIDU0MTpcdFx0XHRcdFx0XHRcdGNvbmRpdGlvbiwgdGltZW91dCk7XHRcdFxcXG4gNTQyOlx0XHRfX3JldDtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIDU0MzpcdH0pXG4gNTQ0Olx0XG4gNTQ1Olx0I2RlZmluZSBfX3dhaXRfZXZlbnRfaHJ0aW1lb3V0KHdxX2hlYWQsIGNvbmRpdGlvbiwgdGltZW91dCwgc3RhdGUpXHRcdFxcXG4gNTQ2Olx0KHtcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4gNTQ3Olx0XHRpbnQgX19yZXQgPSAwO1x0XHRcdFx0XHRcdFx0XHRcXFxuIDU0ODpcdFx0c3RydWN0IGhydGltZXJfc2xlZXBlciBfX3Q7XHRcdFx0XHRcdFx0XFxcbiA1NDk6XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4gNTUwOlx0XHRocnRpbWVyX3NldHVwX3NsZWVwZXJfb25fc3RhY2soXHUwMDI2X190LCBDTE9DS19NT05PVE9OSUMsXHRcdFx0XFxcbiA1NTE6XHRcdFx0XHRcdCAgICAgICBIUlRJTUVSX01PREVfUkVMKTtcdFx0XHRcXFxuIDU1MjpcdFx0aWYgKCh0aW1lb3V0KSAhPSBLVElNRV9NQVgpIHtcdFx0XHRcdFx0XHRcXFxuIDU1MzpcdFx0XHRocnRpbWVyX3NldF9leHBpcmVzX3JhbmdlX25zKFx1MDAyNl9fdC50aW1lciwgdGltZW91dCxcdFx0XFxcbiA1NTQ6XHRcdFx0XHRcdFx0Y3VycmVudC1cdTAwM2V0aW1lcl9zbGFja19ucyk7XHRcdFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3NTgyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgYF9fd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXRgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYF9fd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXRgLiBUaGF0IGZ1bmN0aW9uIGlzIGEgY3J1Y2lhbCBwaWVjZSBvZiB0aGUga2VybmVsJiMzOTtzIHN5bmNocm9uaXphdGlvbiBtYWNoaW5lcnksIGFuZCB1bmRlcnN0YW5kaW5nIGl0cyBiZWhhdmlvciBpcyBvZnRlbiBrZXkgdG8gZGVidWdnaW5nIGNvbmN1cnJlbmN5IGlzc3VlcywgcGFydGljdWxhcmx5IHRob3NlIGludm9sdmluZyB3YWl0aW5nIG9uIGV2ZW50cy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQmIzM5O3MgaW1wbGVtZW50ZWQuIFNwZWNpZmljYWxseSwgaG93IGl0IGhhbmRsZXMgdGhlIHRpbWVvdXQgYXNwZWN0IGFuZCBob3cgaW50ZXJydXB0cyBwbGF5IGludG8gdGhhdC4gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBncmFzcCBpdHMgaW50ZXJuYWwgd29ya2luZ3MsIHRoZSBtZWNoYW5pc21zIGl0IHV0aWxpemVzIHRvIHBvdGVudGlhbGx5IGJsb2NrIGEgdGFzaywgYW5kIGhvdyB0aG9zZSBtZWNoYW5pc21zIGRpZmZlciBmcm9tIG90aGVyIHJlbGF0ZWQgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuIEkgbmVlZCB0byByZW1lbWJlciB0aGUgc3VidGxldGllcyBvZiBpbnRlcnJ1cHRpYmxlIHZzLiB1bmludGVycnVwdGlibGUgc3RhdGVzIGFuZCBob3cgdGhlc2UgcmVsYXRlIHRvIHNpZ25hbCBoYW5kbGluZyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhhdCBmdW5jdGlvbi4gTGV0JiMzOTtzIHNlZSBob3cgaXQmIzM5O3Mgc2V0IHVwIHRvIGhhbmRsZSBhIHRpbWVvdXQuIFRoaXMgbGlrZWx5IGludm9sdmVzIHNvbWUgY2xldmVyIHVzZSBvZiB0aW1lcnMgYW5kIHNjaGVkdWxlciBpbnRlZ3JhdGlvbi4gTXkgZ29hbCBoZXJlIGlzIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGJ1aWxkaW5nIGJsb2NrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUgX193YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvd2FpdC5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvd2FpdC5oPTQ3Nj1kbyB7XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmluY2x1ZGUvbGludXgvd2FpdC5oLTUwOS1cbmluY2x1ZGUvbGludXgvd2FpdC5oOjUxMDojZGVmaW5lIF9fd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQod3FfaGVhZCwgY29uZGl0aW9uLCB0aW1lb3V0KVx0XHRcXFxuaW5jbHVkZS9saW51eC93YWl0LmgtNTExLVx0X19fd2FpdF9ldmVudCh3cV9oZWFkLCBfX193YWl0X2NvbmRfdGltZW91dChjb25kaXRpb24pLFx0XHRcdFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3OTc4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGBfX3dhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0YCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGlzIGBfX3dhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0YCBmdW5jdGlvbi4gUmlnaHQsIHNvIHRoaXMgc3VnZ2VzdHMgdGhhdCBhIHByb2Nlc3MgaXMgZ29pbmcgdG8gd2FpdCwgYnV0IGl0JiMzOTtzICppbnRlcnJ1cHRpYmxlKiAoY3J1Y2lhbCwgb2YgY291cnNlIOKAkyB3ZSB3b3VsZG7igJl0IHdhbnQgYSBkZWFkbG9jayBzaXR1YXRpb24pLiBBbmQgdGhlcmUmIzM5O3MgYSB0aW1lb3V0IGludm9sdmVkIOKAkyBzb21lIGtpbmQgb2YgdXBwZXIgYm91bmQgb24gdGhlIHdhaXRpbmcgcGVyaW9kLiBUaGlzIGltcGxpZXMgYSBuZWVkIGZvciBib3VuZGVkIHdhaXQgdGltZXMsIHBvdGVudGlhbGx5IGltcG9ydGFudCBmb3IgcmVhbC10aW1lIGFwcGxpY2F0aW9ucyBvciBwcmV2ZW50aW5nIHJ1bmF3YXkgaGFuZ3MuCgpJJiMzOTttIGltbWVkaWF0ZWx5IGNvbnNpZGVyaW5nIHRoZSBpbXBsaWNhdGlvbnM6IHNpZ25hbHMgY291bGQgd2FrZSB0aGUgcHJvY2VzcyBlYXJseSwgYSBzcGVjaWZpZWQgdGltZW91dCBkdXJhdGlvbiBpcyBpbXBvc2VkLCBhbmQsIGZ1bmRhbWVudGFsbHksIGl0JiMzOTtzIGFib3V0IHB1dHRpbmcgdGhlIHByb2Nlc3MgdG8gc2xlZXAgKnNhZmVseSogd2hpbGUgd2Ugd2FpdCBmb3IgYSBzcGVjaWZpYyBjb25kaXRpb24uIFdoYXQgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmUgaXMgaXQgb3BlcmF0aW5nIG9uPyBBIHdhaXQgcXVldWU/IE11dGV4PyBDb25kaXRpb24gdmFyaWFibGU/IEtub3dpbmcgdGhpcyBpcyB2aXRhbCB0byB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zIGF0IHBsYXkuIEkgYmV0IHRoaXMgaXMgYXQgdGhlIGhlYXJ0IG9mIGhvdyBpbnRlcnJ1cHRzIGFyZSBoYW5kbGVkIGluIGNvbmp1bmN0aW9uIHdpdGggb3RoZXIgYXN5bmNocm9ub3VzIGV2ZW50cy4KCkxldCYjMzk7cyBzZWUgd2hhdCB0aGUgaW1wbGVtZW50YXRpb24gcmV2ZWFscyBhYm91dCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgaW50ZXJydXB0IGhhbmRsZXIsIHRoZSB0aW1lb3V0IG1lY2hhbmlzbSBhbmQgdGhlIHdha2luZyBvZiB0aGUgcHJvY2Vzcy4gSXMgaXQgdXNpbmcgYSB0aW1lciB0byB0cmlnZ2VyIHRoZSB0aW1lb3V0PyBJZiBzbywgaXMgdGhhdCB0aW1lciBtYW5hZ2VkIHByb3Blcmx5IGFuZCB3aGF0IGFib3V0IHRoZSBjb25zZXF1ZW5jZXMgb2YgZWFybHkgb3IgbWlzc2VkIGV2ZW50cz8gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgcmFjZXMgYmV0d2VlbiB0aGUgaW50ZXJydXB0IGFuZCB0aGUgdGltZW91dC4gVGhlIGdvYWwsIHVsdGltYXRlbHksIGlzIHRvIGVuc3VyZSB0aGF0IGEgcmVzb3VyY2Ugb3IgYSBjb25kaXRpb24gaXNu4oCZdCBoZWxkIGluZGVmaW5pdGVseSwgYW5kIHRoYXQgdGhpcyBjb2RlIGRvZXNuJiMzOTt0IGludHJvZHVjZSB2dWxuZXJhYmlsaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC93YWl0LmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUxMDpcdCNkZWZpbmUgX193YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCh3cV9oZWFkLCBjb25kaXRpb24sIHRpbWVvdXQpXHRcdFxcXG4gNTExOlx0XHRfX193YWl0X2V2ZW50KHdxX2hlYWQsIF9fX3dhaXRfY29uZF90aW1lb3V0KGNvbmRpdGlvbiksXHRcdFx0XFxcbiA1MTI6XHRcdFx0ICAgICAgVEFTS19JTlRFUlJVUFRJQkxFLCAwLCB0aW1lb3V0LFx0XHRcdFx0XFxcbiA1MTM6XHRcdFx0ICAgICAgX19yZXQgPSBzY2hlZHVsZV90aW1lb3V0KF9fcmV0KSlcbiA1MTQ6XHRcbiA1MTU6XHQvKipcbiA1MTY6XHQgKiB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCAtIHNsZWVwIHVudGlsIGEgY29uZGl0aW9uIGdldHMgdHJ1ZSBvciBhIHRpbWVvdXQgZWxhcHNlc1xuIDUxNzpcdCAqIEB3cV9oZWFkOiB0aGUgd2FpdHF1ZXVlIHRvIHdhaXQgb25cbiA1MTg6XHQgKiBAY29uZGl0aW9uOiBhIEMgZXhwcmVzc2lvbiBmb3IgdGhlIGV2ZW50IHRvIHdhaXQgZm9yXG4gNTE5Olx0ICogQHRpbWVvdXQ6IHRpbWVvdXQsIGluIGppZmZpZXNcbiA1MjA6XHQgKlxuIDUyMTpcdCAqIFRoZSBwcm9jZXNzIGlzIHB1dCB0byBzbGVlcCAoVEFTS19JTlRFUlJVUFRJQkxFKSB1bnRpbCB0aGVcbiA1MjI6XHQgKiBAY29uZGl0aW9uIGV2YWx1YXRlcyB0byB0cnVlIG9yIGEgc2lnbmFsIGlzIHJlY2VpdmVkLlxuIDUyMzpcdCAqIFRoZSBAY29uZGl0aW9uIGlzIGNoZWNrZWQgZWFjaCB0aW1lIHRoZSB3YWl0cXVldWUgQHdxX2hlYWQgaXMgd29rZW4gdXAuXG4gNTI0Olx0ICpcbiA1MjU6XHQgKiB3YWtlX3VwKCkgaGFzIHRvIGJlIGNhbGxlZCBhZnRlciBjaGFuZ2luZyBhbnkgdmFyaWFibGUgdGhhdCBjb3VsZFxuIDUyNjpcdCAqIGNoYW5nZSB0aGUgcmVzdWx0IG9mIHRoZSB3YWl0IGNvbmRpdGlvbi5cbiA1Mjc6XHQgKlxuIDUyODpcdCAqIFJldHVybnM6XG4gNTI5Olx0ICogMCBpZiB0aGUgQGNvbmRpdGlvbiBldmFsdWF0ZWQgdG8gJWZhbHNlIGFmdGVyIHRoZSBAdGltZW91dCBlbGFwc2VkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODc2MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNoZWNraW5nIGBfX193YWl0X2V2ZW50YCoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBUaGUgbWVudGFsIG1vZGVsIGltbWVkaWF0ZWx5IGtpY2tzIGluOiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGJlaGF2aW9yIGFuZCB1c2FnZSBvZiBgX19fd2FpdF9ldmVudGAuIFRoaXMgbGlrZWx5IG1lYW5zIEkmIzM5O20gbG9va2luZyBhdCBhIGtlcm5lbC1sZXZlbCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlLCBwcm9iYWJseSBhIGxvd2VyLWxldmVsIGNvbnN0cnVjdCB0aGFuIGEgbW9yZSB1c2VyLWZhY2luZyBtZWNoYW5pc20gbGlrZSBhIHNlbWFwaG9yZSBvciBtdXRleC4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBxdWVzdGlvbnM6IHdoYXQmIzM5O3MgdGhlIGNvbnRleHQ/IFdoYXQmIzM5O3MgdGhlIGFyY2hpdGVjdHVyZSBpdCYjMzk7cyBydW5uaW5nIG9uPyBJcyBpdCBhIGJ1c3ktd2FpdCB2YXJpYW50LCBvciBhIG1vcmUgZWZmaWNpZW50IHNsZWVwaW5nIHByaW1pdGl2ZT8gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggaXQmIzM5O3MgdHJpZ2dlcmVkIG9yIHVuYmxvY2tlZC4gUGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIGFyZSB0b3Agb2YgbWluZDogd2hhdCYjMzk7cyB0aGUgb3ZlcmhlYWQgaW52b2x2ZWQgaW4gaXRzIHVzZSwgYW5kIGFyZSB0aGVyZSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggbG9jayBjb250ZW50aW9uIG9yIHByaW9yaXR5IGludmVyc2lvbj8gSSYjMzk7bSBwcm9iYWJseSBnb2luZyB0byBiZSBsb29raW5nIGZvciBhc3NvY2lhdGVkIGNvZGUgcGF0aHMgYXMgd2VsbC4gSSYjMzk7bGwgYmUgaW50ZXJlc3RlZCBpbiB3aGVyZSBpdCYjMzk7cyBjYWxsZWQsIGhvdyBpdCYjMzk7cyB1c2VkLCBhbmQgd2hhdCBkYXRhIHN0cnVjdHVyZXMgaXQmIzM5O3MgcHJvdGVjdGluZy4gSXMgdGhlcmUgYSBjbGVhciBkb2N1bWVudGF0aW9uLCBvciB3aWxsIEkgbmVlZCB0byB3b3JrIHRocm91Z2ggaXQgc3RlcCBieSBzdGVwPyBBbHJpZ2h0LCBsZXQmIzM5O3Mgc3RhcnQgZGlnZ2luZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVmaW5lIF9fX3dhaXRfZXZlbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3dhaXQuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3dhaXQuaD0yODg9ZXh0ZXJuIHZvaWQgaW5pdF93YWl0X2VudHJ5KHN0cnVjdCB3YWl0X3F1ZXVlX2VudHJ5ICp3cV9lbnRyeSwgaW50IGZsYWdzKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3dhaXQuaC0zMDEtXG5pbmNsdWRlL2xpbnV4L3dhaXQuaDozMDI6I2RlZmluZSBfX193YWl0X2V2ZW50KHdxX2hlYWQsIGNvbmRpdGlvbiwgc3RhdGUsIGV4Y2x1c2l2ZSwgcmV0LCBjbWQpXHRcdFxcXG5pbmNsdWRlL2xpbnV4L3dhaXQuaC0zMDMtKHtcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MTcwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgU2lnbmlmaWNhbmNlIG9mIGBfX193YWl0X2V2ZW50YCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSByaWdodCBpbi4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoYXQgZnVuY3Rpb246IGBfX193YWl0X2V2ZW50YC4gVGhhdCBuYW1lIGlzIHNjcmVhbWluZyAmIzM0O2tlcm5lbC1sZXZlbCBjb25jdXJyZW5jeSBwcmltaXRpdmUmIzM0OyB0byBtZS4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZywgJiMzNDtPa2F5LCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIG1lY2hhbmlzbSBmb3IgYSB0YXNrIHRvIHJlbGlucXVpc2ggY29udHJvbCwgdG8gcHV0IGl0c2VsZiB0byBzbGVlcCwgKndhaXRpbmcqIGZvciBhIHNwZWNpZmljIGNvbmRpdGlvbiB0byBiZWNvbWUgdHJ1ZS4mIzM0OyBUaGlzIGlzIGZ1bmRhbWVudGFsIHN0dWZmLiBJdCYjMzk7cyB0aGUgY29yZSBvZiBob3cgd2Ugc3luY2hyb25pemUgYWN0aXZpdGllcywgaG93IHdlIGhhbmRsZSByZXNvdXJjZSBjb250ZW50aW9uLCBhbmQgaG93IHdlIGFjaGlldmUgcmVzcG9uc2l2ZW5lc3MgaW4gYSBtdWx0aS10aHJlYWRlZCBvciBtdWx0aS1wcm9jZXNzIGVudmlyb25tZW50LgoKTm93LCBteSBtaW5kIHN0YXJ0cyB0byByYWNlLiBJJiMzOTttIGdvaW5nIHRocm91Z2ggdGhlIGRpZmZlcmVudCBjb250ZXh0cyB3aGVyZSBJJiMzOTt2ZSBzZWVuIHdhaXQgZXZlbnRzLiBJcyB0aGlzIGEgc3BpbmxvY2s/IEEgbXV0ZXg/IENvbmRpdGlvbiB2YXJpYWJsZXM/IElzIHRoaXMgcGFydCBvZiBhIHJlYWRlci13cml0ZXIgbG9jayBpbXBsZW1lbnRhdGlvbj8gQW0gSSBsb29raW5nIGF0IHNvbWV0aGluZyByZWxhdGVkIHRvIGludGVycnVwdHMgb3IgaGFyZHdhcmUgc2lnbmFscz8gV2hhdCBhcmUgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHVzZWQgaGVyZT8gQXJlIHdlIGRlYWxpbmcgd2l0aCBwcmlvcml0eSBpbmhlcml0YW5jZSBvciBzb21lIGZvcm0gb2YgZmFpcm5lc3MgaW4gdGhlIHdhaXRpbmcgbWVjaGFuaXNtPyBJJiMzOTttIGFscmVhZHkgYXNraW5nIG15c2VsZiB0aGUgY3JpdGljYWwgcXVlc3Rpb25zIHJlZ2FyZGluZyB0aGUgaW1wbGVtZW50YXRpb24gc3BlY2lmaWNzLgoKVGhlIGRvdWJsZSB1bmRlcnNjb3JlIGluIHRoZSBuYW1lIGlzIGFsc28gYSBjbHVlLiBMaWtlbHksIHRoaXMgaXMgYW4gaW50ZXJuYWwgZnVuY3Rpb24sIG5vdCBpbnRlbmRlZCBmb3IgZGlyZWN0IHVzZSBieSB1c2VyLWxldmVsIHByb2dyYW1zLiBUaGlzIG1lYW5zIGl0JiMzOTtzIHRoZSBidWlsZGluZyBibG9jayB1cG9uIHdoaWNoIGhpZ2hlci1sZXZlbCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBhcmUgY29uc3RydWN0ZWQuIFRoaXMgaXMgdGhlIGJlZHJvY2ssIHRoZSBhdG9tLCB0aGUgZnVuZGFtZW50YWwgYnJpY2sgYW5kIG1vcnRhciB3ZSBtdXN0IGxvb2sgYXQgdG8gdW5kZXJzdGFuZCBhbGwgdGhlIG90aGVyIHN5bmNocm9uaXphdGlvbiBtZXRob2RzLiBTbywgSeKAmW0gbWVudGFsbHkgcGVlbGluZyBiYWNrIGxheWVycywgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gaXMgd292ZW4gaW50byB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUgb2YgdGhlIGtlcm5lbCwgdGhlIHN5bmNocm9uaXphdGlvbiBtb2RlbC4gVmVyeSBpbXBvcnRhbnQgYW5kIEkgbmVlZCB0byBzZWUgbW9yZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvd2FpdC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzAyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMDI6XHQjZGVmaW5lIF9fX3dhaXRfZXZlbnQod3FfaGVhZCwgY29uZGl0aW9uLCBzdGF0ZSwgZXhjbHVzaXZlLCByZXQsIGNtZClcdFx0XFxcbiAzMDM6XHQoe1x0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiAzMDQ6XHRcdF9fbGFiZWxfXyBfX291dDtcdFx0XHRcdFx0XHRcdFxcXG4gMzA1Olx0XHRzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeSBfX3dxX2VudHJ5O1x0XHRcdFx0XHRcXFxuIDMwNjpcdFx0bG9uZyBfX3JldCA9IHJldDtcdC8qIGV4cGxpY2l0IHNoYWRvdyAqL1x0XHRcdFx0XFxcbiAzMDc6XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4gMzA4Olx0XHRpbml0X3dhaXRfZW50cnkoXHUwMDI2X193cV9lbnRyeSwgZXhjbHVzaXZlID8gV1FfRkxBR19FWENMVVNJVkUgOiAwKTtcdFxcXG4gMzA5Olx0XHRmb3IgKDs7KSB7XHRcdFx0XHRcdFx0XHRcdFxcXG4gMzEwOlx0XHRcdGxvbmcgX19pbnQgPSBwcmVwYXJlX3RvX3dhaXRfZXZlbnQoXHUwMDI2d3FfaGVhZCwgXHUwMDI2X193cV9lbnRyeSwgc3RhdGUpO1xcXG4gMzExOlx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIDMxMjpcdFx0XHRpZiAoY29uZGl0aW9uKVx0XHRcdFx0XHRcdFx0XFxcbiAzMTM6XHRcdFx0XHRicmVhaztcdFx0XHRcdFx0XHRcdFxcXG4gMzE0Olx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIDMxNTpcdFx0XHRpZiAoX19fd2FpdF9pc19pbnRlcnJ1cHRpYmxlKHN0YXRlKSBcdTAwMjZcdTAwMjYgX19pbnQpIHtcdFx0XHRcXFxuIDMxNjpcdFx0XHRcdF9fcmV0ID0gX19pbnQ7XHRcdFx0XHRcdFx0XFxcbiAzMTc6XHRcdFx0XHRnb3RvIF9fb3V0O1x0XHRcdFx0XHRcdFxcXG4gMzE4Olx0XHRcdH1cdFx0XHRcdFx0XHRcdFx0XFxcbiAzMTk6XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4gMzIwOlx0XHRcdGNtZDtcdFx0XHRcdFx0XHRcdFx0XFxcbiAzMjE6XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4gMzIyOlx0XHRcdGlmIChjb25kaXRpb24pXHRcdFx0XHRcdFx0XHRcXFxuIDMyMzpcdFx0XHRcdGJyZWFrO1x0XHRcdFx0XHRcdFx0XFxcbiAzMjQ6XHRcdH1cdFx0XHRcdFx0XHRcdFx0XHRcXFxuIDMyNTpcdFx0ZmluaXNoX3dhaXQoXHUwMDI2d3FfaGVhZCwgXHUwMDI2X193cV9lbnRyeSk7XHRcdFx0XHRcdFxcXG4gMzI2Olx0X19vdXQ6XHRfX3JldDtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIDMyNzpcdH0pXG4gMzI4Olx0XG4gMzI5Olx0I2RlZmluZSBfX3dhaXRfZXZlbnQod3FfaGVhZCwgY29uZGl0aW9uKVx0XHRcdFx0XHRcXFxuIDMzMDpcdFx0KHZvaWQpX19fd2FpdF9ldmVudCh3cV9oZWFkLCBjb25kaXRpb24sIFRBU0tfVU5JTlRFUlJVUFRJQkxFLCAwLCAwLFx0XFxcbiAzMzE6XHRcdFx0XHQgICAgc2NoZWR1bGUoKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAwNjUKCQkJCQkJCW91dHB1dDogMzQ1CgkJCQkJCQl0aG91Z2h0czogMTY3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2ggYW5kIEtNU0FOIFJlcXVpcmVtZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXM6IHdhaXQsIHRoYXQgYF9fX3dhaXRfZXZlbnRgIGxvb3AgbG9va3MgbGlrZSBpdCBldmFsdWF0ZXMgdGhlIGBjb25kaXRpb25gIHR3aWNlIGluIGVhY2ggaXRlcmF0aW9uLiBCdXQgdGhlbiBJIHJlbWVtYmVyIGhvdyB0aGUgYHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0YCBmdW5jdGlvbiB3b3Jrcy4gSXQgY2hlY2tzIHRoZSBjb25kaXRpb24gKm9uY2UqIGJlZm9yZSBlbnRlcmluZyB0aGUgbG9vcC4gVGhlbiwgd2l0aGluIHRoZSBsb29wLCB0aGUgY29uZGl0aW9uICptaWdodCogYmUgY2hlY2tlZCBhZ2Fpbi4gU28gdGhlIG1heGltdW0gaXMgdHdvIGV2YWx1YXRpb25zIHBlciBpdGVyYXRpb24uIENydWNpYWxseSwgdGhlIGNvZGUgaW4gcXVlc3Rpb24sIHNwZWNpZmljYWxseSB0aGUgcGFydCBpbnZvbHZpbmcgYHNtY193cl90eF9nZXRfZnJlZV9zbG90X2luZGV4YCwgaGFzIHNpZGUgZWZmZWN0cyB3aXRoIGB0ZXN0X2FuZF9zZXRfYml0YC4gQnV0IGlmIHRoZSBjb25kaXRpb24gaXMgdHJ1ZSAqaW1tZWRpYXRlbHkqIGFmdGVyIHRoYXQgY2FsbCwgdGhlIGxvb3AgYnJlYWtzISBTbyB0aGVyZSYjMzk7cyBhY3R1YWxseSBvbmx5ICpvbmUqIGNvbmRpdGlvbiBjaGVjayBpZiB0aGUgJiMzOTtnb29kJiMzOTsgcGF0aCBpcyB0YWtlbi4KCk5vdywgdGhlIHBhdGNoIGlzIGNoYW5naW5nIHRoaXMgdG8gYW4gb3Blbi1jb2RlZCBsb29wLCBhbmQgdGhpcyBzaGlmdCBtYWtlcyB0aGUgY29uZGl0aW9uIGNoZWNrIGhhcHBlbiB0aGUgc2FtZSBudW1iZXIgb2YgdGltZXMgYW5kIGZpeGVzIHRoZSBwb3RlbnRpYWwgdGh1bmRlcmluZyBoZXJkIHByb2JsZW0uIFRoZSBgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXRgIGZ1bmN0aW9uIHVzZXMgYSBub24tZXhjbHVzaXZlIHdhaXQuIE1hbnkgdGhyZWFkcyBjb3VsZCBiZSB3b2tlbiB1cCBzaW11bHRhbmVvdXNseSBpZiB0aGUgY29uZGl0aW9uIGJlY29tZXMgdHJ1ZS4gVGhlIG9wZW4tY29kZWQgbG9vcCBub3cgdXRpbGl6ZXMgYW4gZXhjbHVzaXZlIHdhaXQgd2l0aCBgcHJlcGFyZV90b193YWl0X2V4Y2x1c2l2ZWAuIFRoaXMgZW5zdXJlcyBvbmx5ICpvbmUqIHdhaXRpbmcgdGhyZWFkIGlzIHdva2VuLiBUaGlzIGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIGFuZCBhdm9pZHMgdGhlIHRodW5kZXJpbmcgaGVyZC4KCkJ1dCB0aGVyZSYjMzk7cyBhbHNvIHRoZSBidWcgZml4IGludm9sdmluZyB0aGUgYnVmZmVyLiBUaGUgcGF0Y2ggaXMgbm93IHplcm9pbmcgdGhlIGJ1ZmZlciwgYnV0IHRoZSAqb2xkKiBjb2RlIHplcm9lZCB0aGUgKnBvaW50ZXIqISBJZiB0aGUgcG9pbnRlciBpcyB6ZXJvZWQsIHRoZSBuZXh0IHRpbWUgaXQmIzM5O3MgZGVyZWZlcmVuY2VkLCBpdCYjMzk7cyBhIE5VTEwgcG9pbnRlci4gV2hpY2ggaXMgZ29pbmcgdG8gY3Jhc2ggdGhlIGtlcm5lbCB3aXRoIGEgc3RhbmRhcmQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBOb3QgYW4gdW5pbml0aWFsaXplZCByZWFkLCB3aGljaCBpcyB3aGF0IEtNU0FOIGlzIGZvci4KClNvLCB0aGlua2luZyBhYm91dCB0aGUgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB0aGUgYGxpbmstJmd0O2xnci0mZ3Q7d3JfdHhfYnVmX3YyYCBwb3RlbnRpYWxseSBjb3VsZCBiZSB1bmluaXRpYWxpemVkLiBCdXQsIGFmdGVyIGxvb2tpbmcgdGhyb3VnaCB0aGUgcmVsZXZhbnQgcGFydHMgb2YgYHNtY193cl90eF9wdXRfc2xvdGAsIGBzbWNfd3JfdHhfZ2V0X3YyX3Nsb3RgIGFuZCBgc21jX2xsY19zZW5kX2FkZF9saW5rYCwgaXQgYmVjb21lcyBjbGVhciB0aGF0IGl0IGlzICpub3QqIHJlYWQuIFRoZSBjb2RlIGV4cGxpY2l0bHkgemVybyYjMzk7cyB0aGUgcGFydHMgdGhhdCBnZXQgdXNlZCEgRXZlbiBpZiB0aGVyZSB3YXMgb2xkIGRhdGEsIGl0IHdvdWxkbiYjMzk7dCBiZSBzZW50IG92ZXIgdGhlIG5ldHdvcmsuIFRoZXJlZm9yZSwgdGhlcmUmIzM5O3Mgbm8gcG9zc2liaWxpdHkgb2YgYSBtZW1vcnkgbGVhayBvciB1bmluaXRpYWxpemVkIGRhdGEgYmVpbmcgc2VudCBvdXQuIFRoZSBhY3R1YWwgYnVnIHdhcyB0aGF0IHRoZSBQT0lOVEVSIHdhcyB6ZXJvZWQgYW5kIG5vdCB0aGUgYnVmZmVyISBJZiBgd3JfYnVmYCBpcyBOVUxMLCB0aGVuIHRoZSBgbWVtc2V0KE5VTEwsIDAsIDQ0KWAgaXMgYSBzdXJlZmlyZSBDUkFTSC4KCkluIHN1bW1hcnksIHRoZSBwYXRjaDoKCjEuICBSZXBsYWNlcyBgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXRgIHdpdGggYW4gZXhjbHVzaXZlIHdhaXQgbG9vcCwgYWRkcmVzc2luZyB0aGUgdGh1bmRlcmluZyBoZXJkIGlzc3VlLCBhIHBlcmZvcm1hbmNlIGFuZCBjb3JyZWN0bmVzcyBwcm9ibGVtLCBub3QgYSBtZW1vcnkgc2FmZXR5IG9uZS4KMi4gIEZpeGVzIGEgYnVnIHdoZXJlIHBvaW50ZXJzIHdlcmUgaW5jb3JyZWN0bHkgemVyb2VkIGluc3RlYWQgb2YgdGhlIGJ1ZmZlcnMsIHdoaWNoLCBpZiB0aGUgcG9pbnRlcnMgdGhlbXNlbHZlcyBhcmUgTlVMTCwgY2F1c2UgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuCgpUaGUgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGlzIGVhc2lseSBkZXRlY3RlZCBieSBzdGFuZGFyZCB0b29scyBsaWtlIEtBU0FOIGFuZCBLQVNBTi1saXRlLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIHNlbnQgb3ZlciB0aGUgbmV0d29yay4gU28sIG5vIEtNU0FOIGlzIG5lZWRlZC4gVGhpcyBpcyBhIDEwMCUgcmVsaWFibGUgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCBhIHN0YW5kYXJkIGtlcm5lbCBwYW5pYy4gVGltZSB0byBjYWxsIGl0LCBgTmVlZHNLTVNBTj1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyB0d28gaXNzdWVzOlxuMS4gSXQgcmVwbGFjZXMgYHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0YCB3aXRoIGFuIG9wZW4tY29kZWQgd2FpdCBsb29wIHVzaW5nIGBwcmVwYXJlX3RvX3dhaXRfZXhjbHVzaXZlYCB0byBmaXggYSB0aHVuZGVyaW5nIGhlcmQgcHJvYmxlbSB3aGVyZSBtdWx0aXBsZSB3YWl0aW5nIHRocmVhZHMgYXJlIHdva2VuIHVwIHNpbXVsdGFuZW91c2x5LiBUaGlzIGlzIGEgcGVyZm9ybWFuY2UvY29uY3VycmVuY3kgZml4LlxuMi4gSXQgZml4ZXMgYSBidWcgaW4gYHNtY193cl90eF9wdXRfc2xvdGAgd2hlcmUgYG1lbXNldGAgd2FzIGluY29ycmVjdGx5IGFwcGxpZWQgdG8gdGhlIHBvaW50ZXJzIGBcdTAwMjZsaW5rLVx1MDAzZXdyX3R4X3YyX3BlbmRgIGFuZCBgXHUwMDI2bGluay1cdTAwM2VsZ3ItXHUwMDNld3JfdHhfYnVmX3YyYCBpbnN0ZWFkIG9mIHRoZSBzdHJ1Y3R1cmVzIHRoZXkgcG9pbnQgdG8uXG5cbkJlY2F1c2UgdGhlIG9yaWdpbmFsIGNvZGUgemVyb2VkIHRoZSBwb2ludGVycyB0aGVtc2VsdmVzIChlZmZlY3RpdmVseSBzZXR0aW5nIHRoZW0gdG8gTlVMTCksIGFueSBzdWJzZXF1ZW50IHVzZSBvZiB0aGVzZSBwb2ludGVycyAoZS5nLiwgaW4gYHNtY193cl90eF9nZXRfdjJfc2xvdGAgb3IgYHNtY193cl90eF9wcm9jZXNzX2NxZWApIHdvdWxkIHJlc3VsdCBpbiBhIGRldGVybWluaXN0aWMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBBIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBjYXVzZXMgYSBzdGFuZGFyZCBrZXJuZWwgb29wcyBhbmQgaXMgdHJpdmlhbGx5IGNhdWdodCBieSBzdGFuZGFyZCB0ZXN0aW5nLCBLQVNBTiwgb3IgZXZlbiB3aXRob3V0IGFueSBzYW5pdGl6ZXJzLlxuXG5UaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2Ugb3Igb3ZlciB0aGUgbmV0d29yay4gVGhlIG5ldHdvcmsgdHJhbnNtaXNzaW9uIGZ1bmN0aW9ucyAoZS5nLiwgYHNtY193cl90eF92Ml9zZW5kYCkgb25seSBzZW5kIHRoZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGxlbmd0aCBvZiB0aGUgYnVmZmVyLCBhbmQgdGhlIGNhbGxlcnMgKGxpa2UgYHNtY19sbGNfc2VuZF9hZGRfbGlua2ApIGV4cGxpY2l0bHkgemVybyBhbmQgaW5pdGlhbGl6ZSB0aGUgZXhhY3QgbnVtYmVyIG9mIGJ5dGVzIHRoZXkgdHJhbnNtaXQuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHR3byBpc3N1ZXM6XG4xLiBJdCByZXBsYWNlcyBgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXRgIHdpdGggYW4gb3Blbi1jb2RlZCB3YWl0IGxvb3AgdXNpbmcgYHByZXBhcmVfdG9fd2FpdF9leGNsdXNpdmVgIHRvIGZpeCBhIHRodW5kZXJpbmcgaGVyZCBwcm9ibGVtIHdoZXJlIG11bHRpcGxlIHdhaXRpbmcgdGhyZWFkcyBhcmUgd29rZW4gdXAgc2ltdWx0YW5lb3VzbHkuIFRoaXMgaXMgYSBwZXJmb3JtYW5jZS9jb25jdXJyZW5jeSBmaXguXG4yLiBJdCBmaXhlcyBhIGJ1ZyBpbiBgc21jX3dyX3R4X3B1dF9zbG90YCB3aGVyZSBgbWVtc2V0YCB3YXMgaW5jb3JyZWN0bHkgYXBwbGllZCB0byB0aGUgcG9pbnRlcnMgYFx1MDAyNmxpbmstXHUwMDNld3JfdHhfdjJfcGVuZGAgYW5kIGBcdTAwMjZsaW5rLVx1MDAzZWxnci1cdTAwM2V3cl90eF9idWZfdjJgIGluc3RlYWQgb2YgdGhlIHN0cnVjdHVyZXMgdGhleSBwb2ludCB0by5cblxuQmVjYXVzZSB0aGUgb3JpZ2luYWwgY29kZSB6ZXJvZWQgdGhlIHBvaW50ZXJzIHRoZW1zZWx2ZXMgKGVmZmVjdGl2ZWx5IHNldHRpbmcgdGhlbSB0byBOVUxMKSwgYW55IHN1YnNlcXVlbnQgdXNlIG9mIHRoZXNlIHBvaW50ZXJzIChlLmcuLCBpbiBgc21jX3dyX3R4X2dldF92Ml9zbG90YCBvciBgc21jX3dyX3R4X3Byb2Nlc3NfY3FlYCkgd291bGQgcmVzdWx0IGluIGEgZGV0ZXJtaW5pc3RpYyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIEEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGNhdXNlcyBhIHN0YW5kYXJkIGtlcm5lbCBvb3BzIGFuZCBpcyB0cml2aWFsbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIHRlc3RpbmcsIEtBU0FOLCBvciBldmVuIHdpdGhvdXQgYW55IHNhbml0aXplcnMuXG5cblRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZSBvciBvdmVyIHRoZSBuZXR3b3JrLiBUaGUgbmV0d29yayB0cmFuc21pc3Npb24gZnVuY3Rpb25zIChlLmcuLCBgc21jX3dyX3R4X3YyX3NlbmRgKSBvbmx5IHNlbmQgdGhlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgbGVuZ3RoIG9mIHRoZSBidWZmZXIsIGFuZCB0aGUgY2FsbGVycyAobGlrZSBgc21jX2xsY19zZW5kX2FkZF9saW5rYCkgZXhwbGljaXRseSB6ZXJvIGFuZCBpbml0aWFsaXplIHRoZSBleGFjdCBudW1iZXIgb2YgYnl0ZXMgdGhleSB0cmFuc21pdC4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjIxOjQ4LjgxNTA3NDU2MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMTc0NDk1OTI1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTTUNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdFwiLFxuICAgIFwic21jX3dyX3R4X3B1dF9zbG90XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgdHdvIGlzc3VlczpcXG4xLiBJdCByZXBsYWNlcyBgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXRgIHdpdGggYW4gb3Blbi1jb2RlZCB3YWl0IGxvb3AgdXNpbmcgYHByZXBhcmVfdG9fd2FpdF9leGNsdXNpdmVgIHRvIGZpeCBhIHRodW5kZXJpbmcgaGVyZCBwcm9ibGVtIHdoZXJlIG11bHRpcGxlIHdhaXRpbmcgdGhyZWFkcyBhcmUgd29rZW4gdXAgc2ltdWx0YW5lb3VzbHkuIFRoaXMgaXMgYSBwZXJmb3JtYW5jZS9jb25jdXJyZW5jeSBmaXguXFxuMi4gSXQgZml4ZXMgYSBidWcgaW4gYHNtY193cl90eF9wdXRfc2xvdGAgd2hlcmUgYG1lbXNldGAgd2FzIGluY29ycmVjdGx5IGFwcGxpZWQgdG8gdGhlIHBvaW50ZXJzIGBcXHUwMDI2bGluay1cXHUwMDNld3JfdHhfdjJfcGVuZGAgYW5kIGBcXHUwMDI2bGluay1cXHUwMDNlbGdyLVxcdTAwM2V3cl90eF9idWZfdjJgIGluc3RlYWQgb2YgdGhlIHN0cnVjdHVyZXMgdGhleSBwb2ludCB0by5cXG5cXG5CZWNhdXNlIHRoZSBvcmlnaW5hbCBjb2RlIHplcm9lZCB0aGUgcG9pbnRlcnMgdGhlbXNlbHZlcyAoZWZmZWN0aXZlbHkgc2V0dGluZyB0aGVtIHRvIE5VTEwpLCBhbnkgc3Vic2VxdWVudCB1c2Ugb2YgdGhlc2UgcG9pbnRlcnMgKGUuZy4sIGluIGBzbWNfd3JfdHhfZ2V0X3YyX3Nsb3RgIG9yIGBzbWNfd3JfdHhfcHJvY2Vzc19jcWVgKSB3b3VsZCByZXN1bHQgaW4gYSBkZXRlcm1pbmlzdGljIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4gQSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgY2F1c2VzIGEgc3RhbmRhcmQga2VybmVsIG9vcHMgYW5kIGlzIHRyaXZpYWxseSBjYXVnaHQgYnkgc3RhbmRhcmQgdGVzdGluZywgS0FTQU4sIG9yIGV2ZW4gd2l0aG91dCBhbnkgc2FuaXRpemVycy5cXG5cXG5UaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2Ugb3Igb3ZlciB0aGUgbmV0d29yay4gVGhlIG5ldHdvcmsgdHJhbnNtaXNzaW9uIGZ1bmN0aW9ucyAoZS5nLiwgYHNtY193cl90eF92Ml9zZW5kYCkgb25seSBzZW5kIHRoZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGxlbmd0aCBvZiB0aGUgYnVmZmVyLCBhbmQgdGhlIGNhbGxlcnMgKGxpa2UgYHNtY19sbGNfc2VuZF9hZGRfbGlua2ApIGV4cGxpY2l0bHkgemVybyBhbmQgaW5pdGlhbGl6ZSB0aGUgZXhhY3QgbnVtYmVyIG9mIGJ5dGVzIHRoZXkgdHJhbnNtaXQuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseSdzIHdyaXRlIHJlcXVlc3QgKFdSKSB0cmFuc21pc3Npb24gbG9naWMsIHNwZWNpZmljYWxseSB0aGUgYHNtY193cl90eF9nZXRfZnJlZV9zbG90YCBhbmQgYHNtY193cl90eF9wdXRfc2xvdGAgZnVuY3Rpb25zLiBJdCBjaGFuZ2VzIHRoZSB3YWl0IGxvb3AgZm9yIGdldHRpbmcgYSBmcmVlIHNsb3QgdG8gdXNlIGBwcmVwYXJlX3RvX3dhaXRfZXhjbHVzaXZlYCBhbmQgZml4ZXMgYSBgbWVtc2V0YCBidWcgaW4gYHNtY193cl90eF9wdXRfc2xvdGAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY29yZSB0byB0aGUgU01DIHByb3RvY29sJ3MgZGF0YSB0cmFuc21pc3Npb24gYW5kIGFyZSByZWFjaGFibGUgdmlhIHNvY2tldCBvcGVyYXRpb25zLiBGdXp6aW5nIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIG5ldyB3YWl0IGxvZ2ljIGFuZCBtZW1vcnkgb3BlcmF0aW9ucyBhcmUgY29ycmVjdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjE6NDguODE1MDc5ODcxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzUwMjQyNDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNTI4YTJkNWE1YWEyZTI3Y2E2ZGQ3MTM0M2FlZDE1MDEzYmUyYjYxNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxMDoyMTo0NyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY193ci5jIGIvbmV0L3NtYy9zbWNfd3IuY1xcbmluZGV4IDU5YzkyYjQ2OTQ1YzUuLjJjZGQ0MDYzYzEzZDYgMTAwNjQ0XFxuLS0tIGEvbmV0L3NtYy9zbWNfd3IuY1xcbisrKyBiL25ldC9zbWMvc21jX3dyLmNcXG5AQCAtMTk4LDExICsxOTgsMTMgQEAgaW50IHNtY193cl90eF9nZXRfZnJlZV9zbG90KHN0cnVjdCBzbWNfbGluayAqbGluayxcXG4gXFx0XFx0XFx0ICAgIHN0cnVjdCBzbWNfcmRtYV93ciAqKndyX3JkbWFfYnVmLFxcbiBcXHRcXHRcXHQgICAgc3RydWN0IHNtY193cl90eF9wZW5kX3ByaXYgKip3cl9wZW5kX3ByaXYpXFxuIHtcXG4rXFx0dW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gU01DX1dSX1RYX1dBSVRfRlJFRV9TTE9UX1RJTUU7XFxuIFxcdHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyID0gc21jX2dldF9sZ3IobGluayk7XFxuIFxcdHN0cnVjdCBzbWNfd3JfdHhfcGVuZCAqd3JfcGVuZDtcXG4gXFx0dTMyIGlkeCA9IGxpbmstXFx1MDAzZXdyX3R4X2NudDtcXG4gXFx0c3RydWN0IGliX3NlbmRfd3IgKndyX2liO1xcbiBcXHR1NjQgd3JfaWQ7XFxuK1xcdERFRklORV9XQUlUKHdhaXQpO1xcbiBcXHRpbnQgcmM7XFxuIFxcbiBcXHQqd3JfYnVmID0gTlVMTDtcXG5AQCAtMjEyLDE3ICsyMTQsMzEgQEAgaW50IHNtY193cl90eF9nZXRfZnJlZV9zbG90KHN0cnVjdCBzbWNfbGluayAqbGluayxcXG4gXFx0XFx0aWYgKHJjKVxcbiBcXHRcXHRcXHRyZXR1cm4gcmM7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdHJjID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoXFxuLVxcdFxcdFxcdGxpbmstXFx1MDAzZXdyX3R4X3dhaXQsXFxuLVxcdFxcdFxcdCFzbWNfbGlua19zZW5kYWJsZShsaW5rKSB8fFxcbi1cXHRcXHRcXHRsZ3ItXFx1MDAzZXRlcm1pbmF0aW5nIHx8XFxuLVxcdFxcdFxcdChzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdF9pbmRleChsaW5rLCBcXHUwMDI2aWR4KSAhPSAtRUJVU1kpLFxcbi1cXHRcXHRcXHRTTUNfV1JfVFhfV0FJVF9GUkVFX1NMT1RfVElNRSk7XFxuLVxcdFxcdGlmICghcmMpIHtcXG4tXFx0XFx0XFx0LyogdGltZW91dCAtIHRlcm1pbmF0ZSBsaW5rICovXFxuLVxcdFxcdFxcdHNtY3JfbGlua19kb3duX2NvbmRfc2NoZWQobGluayk7XFxuLVxcdFxcdFxcdHJldHVybiAtRVBJUEU7XFxuK1xcdFxcdHJjID0gMDtcXG4rXFx0XFx0Zm9yICg7Oykge1xcbitcXHRcXHRcXHRwcmVwYXJlX3RvX3dhaXRfZXhjbHVzaXZlKFxcdTAwMjZsaW5rLVxcdTAwM2V3cl90eF93YWl0LCBcXHUwMDI2d2FpdCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBUQVNLX0lOVEVSUlVQVElCTEUpO1xcbitcXHRcXHRcXHRpZiAoIXNtY19saW5rX3NlbmRhYmxlKGxpbmspIHx8IGxnci1cXHUwMDNldGVybWluYXRpbmcgfHxcXG4rXFx0XFx0XFx0ICAgIHNtY193cl90eF9nZXRfZnJlZV9zbG90X2luZGV4KGxpbmssIFxcdTAwMjZpZHgpICE9IC1FQlVTWSlcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdHRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpO1xcbitcXHRcXHRcXHQvKiByZS1jaGVjayAqL1xcbitcXHRcXHRcXHRpZiAoIXNtY19saW5rX3NlbmRhYmxlKGxpbmspIHx8IGxnci1cXHUwMDNldGVybWluYXRpbmcgfHxcXG4rXFx0XFx0XFx0ICAgIHNtY193cl90eF9nZXRfZnJlZV9zbG90X2luZGV4KGxpbmssIFxcdTAwMjZpZHgpICE9IC1FQlVTWSlcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdGlmICghdGltZW91dCkge1xcbitcXHRcXHRcXHRcXHQvKiB0aW1lb3V0IC0gdGVybWluYXRlIGxpbmsgKi9cXG4rXFx0XFx0XFx0XFx0c21jcl9saW5rX2Rvd25fY29uZF9zY2hlZChsaW5rKTtcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7XFxuK1xcdFxcdFxcdFxcdHJjID0gLUVSRVNUQVJUU1lTO1xcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuK1xcdFxcdGZpbmlzaF93YWl0KFxcdTAwMjZsaW5rLVxcdTAwM2V3cl90eF93YWl0LCBcXHUwMDI2d2FpdCk7XFxuK1xcdFxcdGlmIChyYylcXG4rXFx0XFx0XFx0cmV0dXJuIHJjO1xcbiBcXHRcXHRpZiAoaWR4ID09IGxpbmstXFx1MDAzZXdyX3R4X2NudClcXG4gXFx0XFx0XFx0cmV0dXJuIC1FUElQRTtcXG4gXFx0fVxcbkBAIC0yODgsMTAgKzMwNCwxMCBAQCBpbnQgc21jX3dyX3R4X3B1dF9zbG90KHN0cnVjdCBzbWNfbGluayAqbGluayxcXG4gXFx0fSBlbHNlIGlmIChsaW5rLVxcdTAwM2VsZ3ItXFx1MDAzZXNtY192ZXJzaW9uID09IFNNQ19WMiBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICBwZW5kLVxcdTAwM2VpZHggPT0gbGluay1cXHUwMDNld3JfdHhfY250KSB7XFxuIFxcdFxcdC8qIExhcmdlIHYyIGJ1ZmZlciAqL1xcbi1cXHRcXHRtZW1zZXQoXFx1MDAyNmxpbmstXFx1MDAzZXdyX3R4X3YyX3BlbmQsIDAsXFxuLVxcdFxcdCAgICAgICBzaXplb2YobGluay1cXHUwMDNld3JfdHhfdjJfcGVuZCkpO1xcbi1cXHRcXHRtZW1zZXQoXFx1MDAyNmxpbmstXFx1MDAzZWxnci1cXHUwMDNld3JfdHhfYnVmX3YyLCAwLFxcbi1cXHRcXHQgICAgICAgc2l6ZW9mKGxpbmstXFx1MDAzZWxnci1cXHUwMDNld3JfdHhfYnVmX3YyKSk7XFxuK1xcdFxcdG1lbXNldChsaW5rLVxcdTAwM2V3cl90eF92Ml9wZW5kLCAwLFxcbitcXHRcXHQgICAgICAgc2l6ZW9mKCpsaW5rLVxcdTAwM2V3cl90eF92Ml9wZW5kKSk7XFxuK1xcdFxcdG1lbXNldChsaW5rLVxcdTAwM2VsZ3ItXFx1MDAzZXdyX3R4X2J1Zl92MiwgMCxcXG4rXFx0XFx0ICAgICAgIHNpemVvZigqbGluay1cXHUwMDNlbGdyLVxcdTAwM2V3cl90eF9idWZfdjIpKTtcXG4gXFx0XFx0cmV0dXJuIDE7XFxuIFxcdH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjIxOjUwLjE2NjA4Mjk1MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE4MjY0OTY5MzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNNQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNtY193cl90eF9nZXRfZnJlZV9zbG90XCIsXG4gICAgXCJzbWNfd3JfdHhfcHV0X3Nsb3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgU01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHkncyB3cml0ZSByZXF1ZXN0IChXUikgdHJhbnNtaXNzaW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgdGhlIGBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdGAgYW5kIGBzbWNfd3JfdHhfcHV0X3Nsb3RgIGZ1bmN0aW9ucy4gSXQgY2hhbmdlcyB0aGUgd2FpdCBsb29wIGZvciBnZXR0aW5nIGEgZnJlZSBzbG90IHRvIHVzZSBgcHJlcGFyZV90b193YWl0X2V4Y2x1c2l2ZWAgYW5kIGZpeGVzIGEgYG1lbXNldGAgYnVnIGluIGBzbWNfd3JfdHhfcHV0X3Nsb3RgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNvcmUgdG8gdGhlIFNNQyBwcm90b2NvbCdzIGRhdGEgdHJhbnNtaXNzaW9uIGFuZCBhcmUgcmVhY2hhYmxlIHZpYSBzb2NrZXQgb3BlcmF0aW9ucy4gRnV6emluZyBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoZSBuZXcgd2FpdCBsb2dpYyBhbmQgbWVtb3J5IG9wZXJhdGlvbnMgYXJlIGNvcnJlY3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDUyOGEyZDVhNWFhMmUyN2NhNmRkNzEzNDNhZWQxNTAxM2JlMmI2MTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxMDoyMTo0NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX3dyLmMgYi9uZXQvc21jL3NtY193ci5jXG5pbmRleCA1OWM5MmI0Njk0NWM1Li4yY2RkNDA2M2MxM2Q2IDEwMDY0NFxuLS0tIGEvbmV0L3NtYy9zbWNfd3IuY1xuKysrIGIvbmV0L3NtYy9zbWNfd3IuY1xuQEAgLTE5OCwxMSArMTk4LDEzIEBAIGludCBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXG4gXHRcdFx0ICAgIHN0cnVjdCBzbWNfcmRtYV93ciAqKndyX3JkbWFfYnVmLFxuIFx0XHRcdCAgICBzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRfcHJpdiAqKndyX3BlbmRfcHJpdilcbiB7XG4rXHR1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBTTUNfV1JfVFhfV0FJVF9GUkVFX1NMT1RfVElNRTtcbiBcdHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyID0gc21jX2dldF9sZ3IobGluayk7XG4gXHRzdHJ1Y3Qgc21jX3dyX3R4X3BlbmQgKndyX3BlbmQ7XG4gXHR1MzIgaWR4ID0gbGluay1cdTAwM2V3cl90eF9jbnQ7XG4gXHRzdHJ1Y3QgaWJfc2VuZF93ciAqd3JfaWI7XG4gXHR1NjQgd3JfaWQ7XG4rXHRERUZJTkVfV0FJVCh3YWl0KTtcbiBcdGludCByYztcbiBcbiBcdCp3cl9idWYgPSBOVUxMO1xuQEAgLTIxMiwxNyArMjE0LDMxIEBAIGludCBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXG4gXHRcdGlmIChyYylcbiBcdFx0XHRyZXR1cm4gcmM7XG4gXHR9IGVsc2Uge1xuLVx0XHRyYyA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KFxuLVx0XHRcdGxpbmstXHUwMDNld3JfdHhfd2FpdCxcbi1cdFx0XHQhc21jX2xpbmtfc2VuZGFibGUobGluaykgfHxcbi1cdFx0XHRsZ3ItXHUwMDNldGVybWluYXRpbmcgfHxcbi1cdFx0XHQoc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RfaW5kZXgobGluaywgXHUwMDI2aWR4KSAhPSAtRUJVU1kpLFxuLVx0XHRcdFNNQ19XUl9UWF9XQUlUX0ZSRUVfU0xPVF9USU1FKTtcbi1cdFx0aWYgKCFyYykge1xuLVx0XHRcdC8qIHRpbWVvdXQgLSB0ZXJtaW5hdGUgbGluayAqL1xuLVx0XHRcdHNtY3JfbGlua19kb3duX2NvbmRfc2NoZWQobGluayk7XG4tXHRcdFx0cmV0dXJuIC1FUElQRTtcbitcdFx0cmMgPSAwO1xuK1x0XHRmb3IgKDs7KSB7XG4rXHRcdFx0cHJlcGFyZV90b193YWl0X2V4Y2x1c2l2ZShcdTAwMjZsaW5rLVx1MDAzZXdyX3R4X3dhaXQsIFx1MDAyNndhaXQsXG4rXHRcdFx0XHRcdFx0ICBUQVNLX0lOVEVSUlVQVElCTEUpO1xuK1x0XHRcdGlmICghc21jX2xpbmtfc2VuZGFibGUobGluaykgfHwgbGdyLVx1MDAzZXRlcm1pbmF0aW5nIHx8XG4rXHRcdFx0ICAgIHNtY193cl90eF9nZXRfZnJlZV9zbG90X2luZGV4KGxpbmssIFx1MDAyNmlkeCkgIT0gLUVCVVNZKVxuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdFx0dGltZW91dCA9IHNjaGVkdWxlX3RpbWVvdXQodGltZW91dCk7XG4rXHRcdFx0LyogcmUtY2hlY2sgKi9cbitcdFx0XHRpZiAoIXNtY19saW5rX3NlbmRhYmxlKGxpbmspIHx8IGxnci1cdTAwM2V0ZXJtaW5hdGluZyB8fFxuK1x0XHRcdCAgICBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdF9pbmRleChsaW5rLCBcdTAwMjZpZHgpICE9IC1FQlVTWSlcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdGlmICghdGltZW91dCkge1xuK1x0XHRcdFx0LyogdGltZW91dCAtIHRlcm1pbmF0ZSBsaW5rICovXG4rXHRcdFx0XHRzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKGxpbmspO1xuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdFx0fVxuK1x0XHRcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xuK1x0XHRcdFx0cmMgPSAtRVJFU1RBUlRTWVM7XG4rXHRcdFx0XHRicmVhaztcbitcdFx0XHR9XG4gXHRcdH1cbitcdFx0ZmluaXNoX3dhaXQoXHUwMDI2bGluay1cdTAwM2V3cl90eF93YWl0LCBcdTAwMjZ3YWl0KTtcbitcdFx0aWYgKHJjKVxuK1x0XHRcdHJldHVybiByYztcbiBcdFx0aWYgKGlkeCA9PSBsaW5rLVx1MDAzZXdyX3R4X2NudClcbiBcdFx0XHRyZXR1cm4gLUVQSVBFO1xuIFx0fVxuQEAgLTI4OCwxMCArMzA0LDEwIEBAIGludCBzbWNfd3JfdHhfcHV0X3Nsb3Qoc3RydWN0IHNtY19saW5rICpsaW5rLFxuIFx0fSBlbHNlIGlmIChsaW5rLVx1MDAzZWxnci1cdTAwM2VzbWNfdmVyc2lvbiA9PSBTTUNfVjIgXHUwMDI2XHUwMDI2XG4gXHRcdCAgIHBlbmQtXHUwMDNlaWR4ID09IGxpbmstXHUwMDNld3JfdHhfY250KSB7XG4gXHRcdC8qIExhcmdlIHYyIGJ1ZmZlciAqL1xuLVx0XHRtZW1zZXQoXHUwMDI2bGluay1cdTAwM2V3cl90eF92Ml9wZW5kLCAwLFxuLVx0XHQgICAgICAgc2l6ZW9mKGxpbmstXHUwMDNld3JfdHhfdjJfcGVuZCkpO1xuLVx0XHRtZW1zZXQoXHUwMDI2bGluay1cdTAwM2VsZ3ItXHUwMDNld3JfdHhfYnVmX3YyLCAwLFxuLVx0XHQgICAgICAgc2l6ZW9mKGxpbmstXHUwMDNlbGdyLVx1MDAzZXdyX3R4X2J1Zl92MikpO1xuK1x0XHRtZW1zZXQobGluay1cdTAwM2V3cl90eF92Ml9wZW5kLCAwLFxuK1x0XHQgICAgICAgc2l6ZW9mKCpsaW5rLVx1MDAzZXdyX3R4X3YyX3BlbmQpKTtcbitcdFx0bWVtc2V0KGxpbmstXHUwMDNlbGdyLVx1MDAzZXdyX3R4X2J1Zl92MiwgMCxcbitcdFx0ICAgICAgIHNpemVvZigqbGluay1cdTAwM2VsZ3ItXHUwMDNld3JfdHhfYnVmX3YyKSk7XG4gXHRcdHJldHVybiAxO1xuIFx0fVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjE6NTAuMTY2MDg0MTkxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg2NDYyOTc1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNNQyBXUiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvc21jL3NtY193ci5jYC4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBjaGFuZ2UgaW4gYHNtY193cl90eF9nZXRfZnJlZV9zbG90YC4gIFRoZXkndmUgcmVwbGFjZWQgYHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0YCB3aXRoIGEgbWFudWFsIHdhaXQgbG9vcCB1c2luZyBgcHJlcGFyZV90b193YWl0X2V4Y2x1c2l2ZWAuICBUaGF0J3MgYSBzaWduaWZpY2FudCBzaGlmdC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9ucyBhcmU6IFdoYXQncyB0aGUgcmF0aW9uYWxlPyBJcyB0aGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBhIGJ1ZyBmaXgsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyAgSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb250ZXh0IG9mICp3aHkqIHRoZXkgbWFkZSB0aGlzIGNob2ljZS4gV2UgaGF2ZSB0byBjb25zaWRlciB3aGV0aGVyIHRoaXMgY2hhbmdlIHByb3Blcmx5IGFkZHJlc3NlcyB0aGUgcmFjZSBjb25kaXRpb24gdGhhdCBgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXRgIHdhcyBzdXBwb3NlZGx5IGluc3VmZmljaWVudCB0byByZXNvbHZlLlxuXG5UaGUgb3RoZXIgaXRlbSBpbiB0aGUgZGlmZiBpcyBhIGBtZW1zZXRgIGJ1ZyBmaXggaW4gYHNtY193cl90eF9wdXRfc2xvdGAuIFRoZXkgaGFkIHRoZSB3cm9uZyBhcmd1bWVudHMsIHVzaW5nIHRoZSBhZGRyZXNzIG9mIHRoZSBzdHJ1Y3R1cmUgaW5zdGVhZCBvZiB0aGUgc3RydWN0dXJlIGl0c2VsZi4gVGhpcyBpcyBzdHJhaWdodGZvcndhcmQ7IGEgY2xhc3NpYyBtZW1vcnkgY29ycnVwdGlvbiBidWcgdGhhdCBuZWVkZWQgdG8gYmUgYWRkcmVzc2VkLiAgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvcnJlY3RlZCBgbWVtc2V0YCBvcGVyYXRpb24gaXMgc3VmZmljaWVudCB0byBjbGVhciBhbnkgcG90ZW50aWFsIHN0YWxlIGRhdGEuXG5cblRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGFjdCBhbmQgdGhlIGltcGxpY2F0aW9ucywgSSBuZWVkIHRvIGNoZWNrIHRoZSBzb3VyY2UgY29kZSBhbmQgZGlzY292ZXIgd2hpY2ggY29uZmlnIG9wdGlvbnMgYXJlIHJlbGV2YW50LiBJJ2xsIGhlYWQgb3ZlciB0byBgbmV0L3NtYy9zbWNfd3IuY2AgYW5kIGZpZ3VyZSBvdXQgd2hpY2ggY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQgd2l0aCB0aGlzIG1vZHVsZS4gVGhpcyBpcyBjcml0aWNhbCBmb3IgYXNzZXNzaW5nIHRoZSBzY29wZSBvZiB0aGlzIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg1NiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjIxOjU1LjAzMDcyMjYyMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDc3NjEzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL3NtY193ci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX3dyLmM9MTYyPXZvaWQgc21jX3dyX3R4X2NxX2hhbmRsZXIoc3RydWN0IGliX2NxICppYl9jcSwgdm9pZCAqY3FfY29udGV4dClcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmMtMTcwLVxcbm5ldC9zbWMvc21jX3dyLmM6MTcxOnN0YXRpYyBpbmxpbmUgaW50IHNtY193cl90eF9nZXRfZnJlZV9zbG90X2luZGV4KHN0cnVjdCBzbWNfbGluayAqbGluaywgdTMyICppZHgpXFxubmV0L3NtYy9zbWNfd3IuYy0xNzIte1xcbi0tXFxubmV0L3NtYy9zbWNfd3IuYy0xODQtLyoqXFxubmV0L3NtYy9zbWNfd3IuYzoxODU6ICogc21jX3dyX3R4X2dldF9mcmVlX3Nsb3QoKSAtIHJldHVybnMgYnVmZmVyIGZvciBtZXNzYWdlIGFzc2VtYmx5LFxcbm5ldC9zbWMvc21jX3dyLmMtMTg2LSAqXFx0XFx0XFx0YW5kIHNldHMgaW5mbyBmb3IgcGVuZGluZyB0cmFuc21pdCB0cmFja2luZ1xcbi0tXFxubmV0L3NtYy9zbWNfd3IuYy0xOTQtICovXFxubmV0L3NtYy9zbWNfd3IuYzoxOTU6aW50IHNtY193cl90eF9nZXRfZnJlZV9zbG90KHN0cnVjdCBzbWNfbGluayAqbGluayxcXG5uZXQvc21jL3NtY193ci5jLTE5Ni1cXHRcXHRcXHQgICAgc21jX3dyX3R4X2hhbmRsZXIgaGFuZGxlcixcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmMtMjEyLVxcdGlmIChpbl9zb2Z0aXJxKCkgfHwgbGdyLVxcdTAwM2V0ZXJtaW5hdGluZykge1xcbm5ldC9zbWMvc21jX3dyLmM6MjEzOlxcdFxcdHJjID0gc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RfaW5kZXgobGluaywgXFx1MDAyNmlkeCk7XFxubmV0L3NtYy9zbWNfd3IuYy0yMTQtXFx0XFx0aWYgKHJjKVxcbi0tXFxubmV0L3NtYy9zbWNfd3IuYy0yMjEtXFx0XFx0XFx0aWYgKCFzbWNfbGlua19zZW5kYWJsZShsaW5rKSB8fCBsZ3ItXFx1MDAzZXRlcm1pbmF0aW5nIHx8XFxubmV0L3NtYy9zbWNfd3IuYzoyMjI6XFx0XFx0XFx0ICAgIHNtY193cl90eF9nZXRfZnJlZV9zbG90X2luZGV4KGxpbmssIFxcdTAwMjZpZHgpICE9IC1FQlVTWSlcXG5uZXQvc21jL3NtY193ci5jLTIyMy1cXHRcXHRcXHRcXHRicmVhaztcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmMtMjI2LVxcdFxcdFxcdGlmICghc21jX2xpbmtfc2VuZGFibGUobGluaykgfHwgbGdyLVxcdTAwM2V0ZXJtaW5hdGluZyB8fFxcbm5ldC9zbWMvc21jX3dyLmM6MjI3OlxcdFxcdFxcdCAgICBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdF9pbmRleChsaW5rLCBcXHUwMDI2aWR4KSAhPSAtRUJVU1kpXFxubmV0L3NtYy9zbWNfd3IuYy0yMjgtXFx0XFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjIxOjU1LjA3NTUwMTc5N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDg5MTk2MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2NvbmZpZyBhbmQgU01DIC0gQSBRdWljayBDaGVjayoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgU01DIChTeXN0ZW0gTWFuYWdlbWVudCBDb250cm9sbGVyKSBpcyBjb25maWd1cmVkIGluIHRoaXMgcHJvamVjdC4gRmlyc3QsIG15IG1lbnRhbCBjaGVja2xpc3QgZ29lczogKktjb25maWcqLiBHb3R0YSBzdGFydCB0aGVyZS4gSXQncyB0aGUgY2VudHJhbCBjb25maWd1cmF0aW9uIGh1YiwgcmlnaHQ/IEFsbCB0aGUgZXNzZW50aWFsIHNldHRpbmdzLCBkZXBlbmRlbmNpZXMsIGFuZCBwb3RlbnRpYWwgZmVhdHVyZSBmbGFncyBmb3IgU01DIHNob3VsZCBiZSBkZWZpbmVkIGluIEtjb25maWcgZmlsZXMgc29tZXdoZXJlIGluIHRoZSByZWxldmFudCBzb3VyY2UgdHJlZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IHBhdGggb3IgdGhlIHJlbGV2YW50IGluY2x1ZGUgZGlyZWN0aXZlcyB0byBsb29rIHRocm91Z2guIEknbSB0aGlua2luZywgaXMgU01DIGVuYWJsZWQgYXMgYSBkZXZpY2UsIG9yIGEgZnVuY3Rpb24/IFdoYXQgYXJlIHRoZSBrZXkgb3B0aW9ucywgYW5kIGFyZSB0aGVyZSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgc3Vic3lzdGVtcyB0aGF0IEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBCZXN0IHRvIGdldCBhIHF1aWNrIG92ZXJ2aWV3IG9mIGhvdyB0aGUgYnVpbGQgc3lzdGVtIHdpbGwgdHJlYXQgaXQgYXQgYSBoaWdoIGxldmVsLiBUaGF0IHdpbGwgc2F2ZSBtZSBzb21lIHRpbWUgbGF0ZXIgd2hlbiBJIGRpdmUgaW50byB0aGUgY29kZS4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDAwOCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjE6NTguNTg0NDIzNDY3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MTkwODI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTTUNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC9zbWMvS2NvbmZpZzoyOmNvbmZpZyBTTUNcXG5uZXQvc21jL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiU01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcXFwiXFxuLS1cXG5uZXQvc21jL0tjb25maWctMTMtXFxubmV0L3NtYy9LY29uZmlnOjE0OmNvbmZpZyBTTUNfRElBR1xcbm5ldC9zbWMvS2NvbmZpZy0xNS1cXHR0cmlzdGF0ZSBcXFwiU01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQvc21jL0tjb25maWctMjItXFxubmV0L3NtYy9LY29uZmlnOjIzOmNvbmZpZyBTTUNfSFNfQ1RSTF9CUEZcXG5uZXQvc21jL0tjb25maWctMjQtXFx0Ym9vbCBcXFwiR2VuZXJpYyBlQlBGIGhvb2sgZm9yIFNNQyBoYW5kc2hha2UgZmxvd1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjE6NTguNjMxNjE4OTEyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ4MDEwOTc4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNNQyBDb25maWd1cmF0aW9uIGFuZCBNb2RpZmllZCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIHNldHRpbmcgaXMgU01DLiBNeSBpbW1lZGlhdGUgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIHR3byBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gdG91Y2hlZDogYHNtY193cl90eF9nZXRfZnJlZV9zbG90YCBhbmQgYHNtY193cl90eF9wdXRfc2xvdGAuIFRoZXkncmUgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIHdyaXRlIHRyYW5zYWN0aW9uIHByb2Nlc3MsIGJ1dCBJIG5lZWQgdG8gYXNjZXJ0YWluIHRoZWlyIHNjb3BlIGFuZCBpbXBhY3QuIFRoZSBmaXJzdCB0aGluZyBJJ20gZ29pbmcgdG8gZG8gaXMgZGV0ZXJtaW5lIGlmIHRoZXNlIGZ1bmN0aW9ucyBhcmUgcGFydCBvZiB0aGUgcHVibGljIEFQSSBvciBpZiB0aGV5J3JlIGludGVybmFsLiBBcmUgdGhleSBleHBvcnRlZCwgbWVhbmluZyBvdGhlciBtb2R1bGVzIG9yIGNvbXBvbmVudHMgY2FuIGNhbGwgdGhlbT8gQW5kIGV2ZW4gaWYgbm90IGV4cG9ydGVkLCBhcmUgdGhleSBjYWxsZWQgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtPyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIGdyYXBoIGlzIGVzc2VudGlhbCB0byBhc3Nlc3NpbmcgdGhlIHBvdGVudGlhbCByaXBwbGUgZWZmZWN0cyBvZiB0aGUgbW9kaWZpY2F0aW9ucy4gQW55IGNoYW5nZXMgaGVyZSBjb3VsZCBhZmZlY3QgYSB3aWRlIHJhbmdlIG9mIGZ1bmN0aW9uYWxpdHksIHNvIEkgbmVlZCB0byBrbm93IHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBmaXQgaW50byB0aGUgbGFyZ2VyIHBpY3R1cmUgYmVmb3JlIEkgY2FuIGV2YWx1YXRlIHRoZSBjb2RlIGNoYW5nZXMgcHJvcGVybHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MzQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDoyMjowMi4xMTE3MzA3NjlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzczNDAxNDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNtY193cl90eF9nZXRfZnJlZV9zbG90XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX2NkYy5jPTczPWludCBzbWNfY2RjX2dldF9mcmVlX3Nsb3Qoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uLFxcbi0tXFxubmV0L3NtYy9zbWNfY2RjLmMtODAtXFxubmV0L3NtYy9zbWNfY2RjLmM6ODE6XFx0cmMgPSBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdChsaW5rLCBzbWNfY2RjX3R4X2hhbmRsZXIsIHdyX2J1ZixcXG5uZXQvc21jL3NtY19jZGMuYy04Mi1cXHRcXHRcXHRcXHQgICAgIHdyX3JkbWFfYnVmLFxcbi0tXFxubmV0L3NtYy9zbWNfbGxjLmM9NDAwPXN0YXRpYyBpbnQgc21jX2xsY19hZGRfcGVuZGluZ19zZW5kKHN0cnVjdCBzbWNfbGluayAqbGluayxcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jLTQwNS1cXG5uZXQvc21jL3NtY19sbGMuYzo0MDY6XFx0cmMgPSBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdChsaW5rLCBzbWNfbGxjX3R4X2hhbmRsZXIsIHdyX2J1ZiwgTlVMTCxcXG5uZXQvc21jL3NtY19sbGMuYy00MDctXFx0XFx0XFx0XFx0ICAgICBwZW5kKTtcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmM9MTYyPXZvaWQgc21jX3dyX3R4X2NxX2hhbmRsZXIoc3RydWN0IGliX2NxICppYl9jcSwgdm9pZCAqY3FfY29udGV4dClcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmMtMTcwLVxcbm5ldC9zbWMvc21jX3dyLmM6MTcxOnN0YXRpYyBpbmxpbmUgaW50IHNtY193cl90eF9nZXRfZnJlZV9zbG90X2luZGV4KHN0cnVjdCBzbWNfbGluayAqbGluaywgdTMyICppZHgpXFxubmV0L3NtYy9zbWNfd3IuYy0xNzIte1xcbi0tXFxubmV0L3NtYy9zbWNfd3IuYy0xODQtLyoqXFxubmV0L3NtYy9zbWNfd3IuYzoxODU6ICogc21jX3dyX3R4X2dldF9mcmVlX3Nsb3QoKSAtIHJldHVybnMgYnVmZmVyIGZvciBtZXNzYWdlIGFzc2VtYmx5LFxcbm5ldC9zbWMvc21jX3dyLmMtMTg2LSAqXFx0XFx0XFx0YW5kIHNldHMgaW5mbyBmb3IgcGVuZGluZyB0cmFuc21pdCB0cmFja2luZ1xcbi0tXFxubmV0L3NtYy9zbWNfd3IuYy0xOTQtICovXFxubmV0L3NtYy9zbWNfd3IuYzoxOTU6aW50IHNtY193cl90eF9nZXRfZnJlZV9zbG90KHN0cnVjdCBzbWNfbGluayAqbGluayxcXG5uZXQvc21jL3NtY193ci5jLTE5Ni1cXHRcXHRcXHQgICAgc21jX3dyX3R4X2hhbmRsZXIgaGFuZGxlcixcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmMtMjEyLVxcdGlmIChpbl9zb2Z0aXJxKCkgfHwgbGdyLVxcdTAwM2V0ZXJtaW5hdGluZykge1xcbm5ldC9zbWMvc21jX3dyLmM6MjEzOlxcdFxcdHJjID0gc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RfaW5kZXgobGluaywgXFx1MDAyNmlkeCk7XFxubmV0L3NtYy9zbWNfd3IuYy0yMTQtXFx0XFx0aWYgKHJjKVxcbi0tXFxubmV0L3NtYy9zbWNfd3IuYy0yMjEtXFx0XFx0XFx0aWYgKCFzbWNfbGlua19zZW5kYWJsZShsaW5rKSB8fCBsZ3ItXFx1MDAzZXRlcm1pbmF0aW5nIHx8XFxubmV0L3NtYy9zbWNfd3IuYzoyMjI6XFx0XFx0XFx0ICAgIHNtY193cl90eF9nZXRfZnJlZV9zbG90X2luZGV4KGxpbmssIFxcdTAwMjZpZHgpICE9IC1FQlVTWSlcXG5uZXQvc21jL3NtY193ci5jLTIyMy1cXHRcXHRcXHRcXHRicmVhaztcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmMtMjI2LVxcdFxcdFxcdGlmICghc21jX2xpbmtfc2VuZGFibGUobGluaykgfHwgbGdyLVxcdTAwM2V0ZXJtaW5hdGluZyB8fFxcbm5ldC9zbWMvc21jX3dyLmM6MjI3OlxcdFxcdFxcdCAgICBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdF9pbmRleChsaW5rLCBcXHUwMDI2aWR4KSAhPSAtRUJVU1kpXFxubmV0L3NtYy9zbWNfd3IuYy0yMjgtXFx0XFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvc21jL3NtY193ci5oPTExMT12b2lkIHNtY193cl9hZGRfZGV2KHN0cnVjdCBzbWNfaWJfZGV2aWNlICpzbWNpYmRldik7XFxubmV0L3NtYy9zbWNfd3IuaC0xMTItXFxubmV0L3NtYy9zbWNfd3IuaDoxMTM6aW50IHNtY193cl90eF9nZXRfZnJlZV9zbG90KHN0cnVjdCBzbWNfbGluayAqbGluaywgc21jX3dyX3R4X2hhbmRsZXIgaGFuZGxlcixcXG5uZXQvc21jL3NtY193ci5oLTExNC1cXHRcXHRcXHQgICAgc3RydWN0IHNtY193cl9idWYgKip3cl9idWYsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjIyOjAyLjQ4NTEzNTY2MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4NjcxMTAzMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBTdHJhdGVneSBmb3IgU01DIFByb3RvY29sKipcblxuT2theSwgc28gSSd2ZSBpZGVudGlmaWVkIHR3byBrZXkgZnVuY3Rpb25zIHdpdGhpbiB0aGUgU01DIHByb3RvY29sIHRoYXQgc2VlbSBsaWtlIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmc6IGBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdGAgYW5kIGBzbWNfd3JfdHhfcHV0X3Nsb3RgLiBDb25zaWRlcmluZyBTTUMgaXMgYSBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5LCBpdCdzIGRlZmluaXRlbHkgd2l0aGluIHJlYWNoIGZvciB0aGlzIGtpbmQgb2YgdGVzdGluZywgYW5kIGJhc2VkIG9uIG15IGluaXRpYWwgYXNzZXNzbWVudCwgdGhlc2UgZnVuY3Rpb25zIGFyZSB3b3J0aCBhIGNsb3NlciBsb29rLiBUaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBzZXR0aW5nIGlzIGBTTUNgLlxuXG5Ob3csIGJlZm9yZSBJIGNvbW1pdCB0byBqdXN0IHRob3NlLCBsZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSByZWxhdGVkIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJyb2FkZW4gdGhlIHNjb3BlIGFuZCBpbmNyZWFzZSBteSBjaGFuY2VzIG9mIGZpbmRpbmcgc29tZXRoaW5nIGludGVyZXN0aW5nLiBFeGNlbGxlbnQsIEkgc2VlIHRoYXQgYHNtY19jZGNfZ2V0X2ZyZWVfc2xvdGAgKmFsc28qIHV0aWxpemVzIGBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdGAsIGFuZCBgc21jX2xsY19hZGRfcGVuZGluZ19zZW5kYCBpcyBhbHNvIGNhbGxpbmcgYHNtY193cl90eF9nZXRfZnJlZV9zbG90YC5cblxuQWxyaWdodCwgSSdsbCB1cGRhdGUgbXkgc3RyYXRlZ3kuIEknbSBnb2luZyB0byBzZXQgYEZvY3VzU3ltYm9sc2AgdG8gdGhlIHBhaXIgb2YgYHNtY193cl90eF9nZXRfZnJlZV9zbG90YCBhbmQgYHNtY193cl90eF9wdXRfc2xvdGAgYW5kIHdpbGwgbWFrZSBzdXJlIHRvIGVuYWJsZSB0aGUgYFNNQ2AgY29uZmlndXJhdGlvbiwgYW5kIHRoYXQgd2lsbCBiZSBteSBmdXp6aW5nIHRhcmdldC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTczNiwiT3V0cHV0VG9rZW5zIjoxODgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjI6MDguMzUyMjQ3ODIzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg4MDE5NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNNQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNtY193cl90eF9nZXRfZnJlZV9zbG90XCIsXG4gICAgXCJzbWNfd3JfdHhfcHV0X3Nsb3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgU01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHkncyB3cml0ZSByZXF1ZXN0IChXUikgdHJhbnNtaXNzaW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgdGhlIGBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdGAgYW5kIGBzbWNfd3JfdHhfcHV0X3Nsb3RgIGZ1bmN0aW9ucy4gSXQgY2hhbmdlcyB0aGUgd2FpdCBsb29wIGZvciBnZXR0aW5nIGEgZnJlZSBzbG90IHRvIHVzZSBgcHJlcGFyZV90b193YWl0X2V4Y2x1c2l2ZWAgYW5kIGZpeGVzIGEgYG1lbXNldGAgYnVnIGluIGBzbWNfd3JfdHhfcHV0X3Nsb3RgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNvcmUgdG8gdGhlIFNNQyBwcm90b2NvbCdzIGRhdGEgdHJhbnNtaXNzaW9uIGFuZCBhcmUgcmVhY2hhYmxlIHZpYSBzb2NrZXQgb3BlcmF0aW9ucy4gRnV6emluZyBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoZSBuZXcgd2FpdCBsb2dpYyBhbmQgbWVtb3J5IG9wZXJhdGlvbnMgYXJlIGNvcnJlY3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU01DXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic21jX3dyX3R4X2dldF9mcmVlX3Nsb3RcIixcbiAgICBcInNtY193cl90eF9wdXRfc2xvdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseSdzIHdyaXRlIHJlcXVlc3QgKFdSKSB0cmFuc21pc3Npb24gbG9naWMsIHNwZWNpZmljYWxseSB0aGUgYHNtY193cl90eF9nZXRfZnJlZV9zbG90YCBhbmQgYHNtY193cl90eF9wdXRfc2xvdGAgZnVuY3Rpb25zLiBJdCBjaGFuZ2VzIHRoZSB3YWl0IGxvb3AgZm9yIGdldHRpbmcgYSBmcmVlIHNsb3QgdG8gdXNlIGBwcmVwYXJlX3RvX3dhaXRfZXhjbHVzaXZlYCBhbmQgZml4ZXMgYSBgbWVtc2V0YCBidWcgaW4gYHNtY193cl90eF9wdXRfc2xvdGAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY29yZSB0byB0aGUgU01DIHByb3RvY29sJ3MgZGF0YSB0cmFuc21pc3Npb24gYW5kIGFyZSByZWFjaGFibGUgdmlhIHNvY2tldCBvcGVyYXRpb25zLiBGdXp6aW5nIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIG5ldyB3YWl0IGxvZ2ljIGFuZCBtZW1vcnkgb3BlcmF0aW9ucyBhcmUgY29ycmVjdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjI6MDguNDMxMDU1OTkyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODIxMjg5Njk2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDoyMjowOC40MzE0NjE5MjJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTgyMTI4NTYwNDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgdHdvIGlzc3VlczpcXG4xLiBJdCByZXBsYWNlcyBgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXRgIHdpdGggYW4gb3Blbi1jb2RlZCB3YWl0IGxvb3AgdXNpbmcgYHByZXBhcmVfdG9fd2FpdF9leGNsdXNpdmVgIHRvIGZpeCBhIHRodW5kZXJpbmcgaGVyZCBwcm9ibGVtIHdoZXJlIG11bHRpcGxlIHdhaXRpbmcgdGhyZWFkcyBhcmUgd29rZW4gdXAgc2ltdWx0YW5lb3VzbHkuIFRoaXMgaXMgYSBwZXJmb3JtYW5jZS9jb25jdXJyZW5jeSBmaXguXFxuMi4gSXQgZml4ZXMgYSBidWcgaW4gYHNtY193cl90eF9wdXRfc2xvdGAgd2hlcmUgYG1lbXNldGAgd2FzIGluY29ycmVjdGx5IGFwcGxpZWQgdG8gdGhlIHBvaW50ZXJzIGBcXHUwMDI2bGluay1cXHUwMDNld3JfdHhfdjJfcGVuZGAgYW5kIGBcXHUwMDI2bGluay1cXHUwMDNlbGdyLVxcdTAwM2V3cl90eF9idWZfdjJgIGluc3RlYWQgb2YgdGhlIHN0cnVjdHVyZXMgdGhleSBwb2ludCB0by5cXG5cXG5CZWNhdXNlIHRoZSBvcmlnaW5hbCBjb2RlIHplcm9lZCB0aGUgcG9pbnRlcnMgdGhlbXNlbHZlcyAoZWZmZWN0aXZlbHkgc2V0dGluZyB0aGVtIHRvIE5VTEwpLCBhbnkgc3Vic2VxdWVudCB1c2Ugb2YgdGhlc2UgcG9pbnRlcnMgKGUuZy4sIGluIGBzbWNfd3JfdHhfZ2V0X3YyX3Nsb3RgIG9yIGBzbWNfd3JfdHhfcHJvY2Vzc19jcWVgKSB3b3VsZCByZXN1bHQgaW4gYSBkZXRlcm1pbmlzdGljIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4gQSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgY2F1c2VzIGEgc3RhbmRhcmQga2VybmVsIG9vcHMgYW5kIGlzIHRyaXZpYWxseSBjYXVnaHQgYnkgc3RhbmRhcmQgdGVzdGluZywgS0FTQU4sIG9yIGV2ZW4gd2l0aG91dCBhbnkgc2FuaXRpemVycy5cXG5cXG5UaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2Ugb3Igb3ZlciB0aGUgbmV0d29yay4gVGhlIG5ldHdvcmsgdHJhbnNtaXNzaW9uIGZ1bmN0aW9ucyAoZS5nLiwgYHNtY193cl90eF92Ml9zZW5kYCkgb25seSBzZW5kIHRoZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGxlbmd0aCBvZiB0aGUgYnVmZmVyLCBhbmQgdGhlIGNhbGxlcnMgKGxpa2UgYHNtY19sbGNfc2VuZF9hZGRfbGlua2ApIGV4cGxpY2l0bHkgemVybyBhbmQgaW5pdGlhbGl6ZSB0aGUgZXhhY3QgbnVtYmVyIG9mIGJ5dGVzIHRoZXkgdHJhbnNtaXQuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDUyOGEyZDVhNWFhMmUyN2NhNmRkNzEzNDNhZWQxNTAxM2JlMmI2MTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxMDoyMTo0NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX3dyLmMgYi9uZXQvc21jL3NtY193ci5jXG5pbmRleCA1OWM5MmI0Njk0NWM1Li4yY2RkNDA2M2MxM2Q2IDEwMDY0NFxuLS0tIGEvbmV0L3NtYy9zbWNfd3IuY1xuKysrIGIvbmV0L3NtYy9zbWNfd3IuY1xuQEAgLTE5OCwxMSArMTk4LDEzIEBAIGludCBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXG4gXHRcdFx0ICAgIHN0cnVjdCBzbWNfcmRtYV93ciAqKndyX3JkbWFfYnVmLFxuIFx0XHRcdCAgICBzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRfcHJpdiAqKndyX3BlbmRfcHJpdilcbiB7XG4rXHR1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBTTUNfV1JfVFhfV0FJVF9GUkVFX1NMT1RfVElNRTtcbiBcdHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyID0gc21jX2dldF9sZ3IobGluayk7XG4gXHRzdHJ1Y3Qgc21jX3dyX3R4X3BlbmQgKndyX3BlbmQ7XG4gXHR1MzIgaWR4ID0gbGluay1cdTAwM2V3cl90eF9jbnQ7XG4gXHRzdHJ1Y3QgaWJfc2VuZF93ciAqd3JfaWI7XG4gXHR1NjQgd3JfaWQ7XG4rXHRERUZJTkVfV0FJVCh3YWl0KTtcbiBcdGludCByYztcbiBcbiBcdCp3cl9idWYgPSBOVUxMO1xuQEAgLTIxMiwxNyArMjE0LDMxIEBAIGludCBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXG4gXHRcdGlmIChyYylcbiBcdFx0XHRyZXR1cm4gcmM7XG4gXHR9IGVsc2Uge1xuLVx0XHRyYyA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KFxuLVx0XHRcdGxpbmstXHUwMDNld3JfdHhfd2FpdCxcbi1cdFx0XHQhc21jX2xpbmtfc2VuZGFibGUobGluaykgfHxcbi1cdFx0XHRsZ3ItXHUwMDNldGVybWluYXRpbmcgfHxcbi1cdFx0XHQoc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RfaW5kZXgobGluaywgXHUwMDI2aWR4KSAhPSAtRUJVU1kpLFxuLVx0XHRcdFNNQ19XUl9UWF9XQUlUX0ZSRUVfU0xPVF9USU1FKTtcbi1cdFx0aWYgKCFyYykge1xuLVx0XHRcdC8qIHRpbWVvdXQgLSB0ZXJtaW5hdGUgbGluayAqL1xuLVx0XHRcdHNtY3JfbGlua19kb3duX2NvbmRfc2NoZWQobGluayk7XG4tXHRcdFx0cmV0dXJuIC1FUElQRTtcbitcdFx0cmMgPSAwO1xuK1x0XHRmb3IgKDs7KSB7XG4rXHRcdFx0cHJlcGFyZV90b193YWl0X2V4Y2x1c2l2ZShcdTAwMjZsaW5rLVx1MDAzZXdyX3R4X3dhaXQsIFx1MDAyNndhaXQsXG4rXHRcdFx0XHRcdFx0ICBUQVNLX0lOVEVSUlVQVElCTEUpO1xuK1x0XHRcdGlmICghc21jX2xpbmtfc2VuZGFibGUobGluaykgfHwgbGdyLVx1MDAzZXRlcm1pbmF0aW5nIHx8XG4rXHRcdFx0ICAgIHNtY193cl90eF9nZXRfZnJlZV9zbG90X2luZGV4KGxpbmssIFx1MDAyNmlkeCkgIT0gLUVCVVNZKVxuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdFx0dGltZW91dCA9IHNjaGVkdWxlX3RpbWVvdXQodGltZW91dCk7XG4rXHRcdFx0LyogcmUtY2hlY2sgKi9cbitcdFx0XHRpZiAoIXNtY19saW5rX3NlbmRhYmxlKGxpbmspIHx8IGxnci1cdTAwM2V0ZXJtaW5hdGluZyB8fFxuK1x0XHRcdCAgICBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdF9pbmRleChsaW5rLCBcdTAwMjZpZHgpICE9IC1FQlVTWSlcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdGlmICghdGltZW91dCkge1xuK1x0XHRcdFx0LyogdGltZW91dCAtIHRlcm1pbmF0ZSBsaW5rICovXG4rXHRcdFx0XHRzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKGxpbmspO1xuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdFx0fVxuK1x0XHRcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xuK1x0XHRcdFx0cmMgPSAtRVJFU1RBUlRTWVM7XG4rXHRcdFx0XHRicmVhaztcbitcdFx0XHR9XG4gXHRcdH1cbitcdFx0ZmluaXNoX3dhaXQoXHUwMDI2bGluay1cdTAwM2V3cl90eF93YWl0LCBcdTAwMjZ3YWl0KTtcbitcdFx0aWYgKHJjKVxuK1x0XHRcdHJldHVybiByYztcbiBcdFx0aWYgKGlkeCA9PSBsaW5rLVx1MDAzZXdyX3R4X2NudClcbiBcdFx0XHRyZXR1cm4gLUVQSVBFO1xuIFx0fVxuQEAgLTI4OCwxMCArMzA0LDEwIEBAIGludCBzbWNfd3JfdHhfcHV0X3Nsb3Qoc3RydWN0IHNtY19saW5rICpsaW5rLFxuIFx0fSBlbHNlIGlmIChsaW5rLVx1MDAzZWxnci1cdTAwM2VzbWNfdmVyc2lvbiA9PSBTTUNfVjIgXHUwMDI2XHUwMDI2XG4gXHRcdCAgIHBlbmQtXHUwMDNlaWR4ID09IGxpbmstXHUwMDNld3JfdHhfY250KSB7XG4gXHRcdC8qIExhcmdlIHYyIGJ1ZmZlciAqL1xuLVx0XHRtZW1zZXQoXHUwMDI2bGluay1cdTAwM2V3cl90eF92Ml9wZW5kLCAwLFxuLVx0XHQgICAgICAgc2l6ZW9mKGxpbmstXHUwMDNld3JfdHhfdjJfcGVuZCkpO1xuLVx0XHRtZW1zZXQoXHUwMDI2bGluay1cdTAwM2VsZ3ItXHUwMDNld3JfdHhfYnVmX3YyLCAwLFxuLVx0XHQgICAgICAgc2l6ZW9mKGxpbmstXHUwMDNlbGdyLVx1MDAzZXdyX3R4X2J1Zl92MikpO1xuK1x0XHRtZW1zZXQobGluay1cdTAwM2V3cl90eF92Ml9wZW5kLCAwLFxuK1x0XHQgICAgICAgc2l6ZW9mKCpsaW5rLVx1MDAzZXdyX3R4X3YyX3BlbmQpKTtcbitcdFx0bWVtc2V0KGxpbmstXHUwMDNlbGdyLVx1MDAzZXdyX3R4X2J1Zl92MiwgMCxcbitcdFx0ICAgICAgIHNpemVvZigqbGluay1cdTAwM2VsZ3ItXHUwMDNld3JfdHhfYnVmX3YyKSk7XG4gXHRcdHJldHVybiAxO1xuIFx0fVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjI6MDguNDMxNDYyNjYyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3NTU3NzgzMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhpcyBTTUMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdGAgaW4gYG5ldC9zbWMvc21jX3dyLmNgLiBUaGUgZmlyc3QgdGhpbmcgSSBzZWUgaXMgdGhleSdyZSBkaXRjaGluZyBgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXRgIGZvciBhIGN1c3RvbSB3YWl0IGxvb3AgdXNpbmcgYHByZXBhcmVfdG9fd2FpdF9leGNsdXNpdmVgLCBgc2NoZWR1bGVfdGltZW91dGAsIGFuZCBgZmluaXNoX3dhaXRgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIEkgd29uZGVyIHdoYXQgdGhlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBhcmUuIElzIHRoZXJlIGEgc3BlY2lmaWMgcmVhc29uIHRoZXkncmUgYXZvaWRpbmcgdGhlIHN0YW5kYXJkIGtlcm5lbCBtZWNoYW5pc21zIGhlcmU/XG5cblRoZW4gSSBoaXQgYSBidWcgZml4IGluIGBzbWNfd3JfdHhfcHV0X3Nsb3RgLCBhbmQgdGhpcyBjYXRjaGVzIG15IGV5ZSBpbW1lZGlhdGVseS4gVGhleSdyZSBjaGFuZ2luZyB0aGUgYG1lbXNldGAgY2FsbC4gVGhleSdyZSByZXBsYWNpbmcgYG1lbXNldChcdTAwMjZsaW5rLVx1MDAzZXdyX3R4X3YyX3BlbmQsIDAsIHNpemVvZihsaW5rLVx1MDAzZXdyX3R4X3YyX3BlbmQpKWAgd2l0aCBzb21ldGhpbmcgZWxzZS4gV2FpdCwgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQuLi4gYWhhISBJdCdzIGBtZW1zZXQobGluay1cdTAwM2V3cl90eF92Ml9wZW5kLCAwLCBzaXplb2YoKmxpbmstXHUwMDNld3JfdHhfdjJfcGVuZCkpYC4gVGhhdCdzIGEgY2xhc3NpYyBwb2ludGVyIGRlcmVmZXJlbmNpbmcgaXNzdWUuIFRoZSBvbGQgY29kZSB3YXMgbGlrZWx5IHplcm9pbmcgdGhlICpwb2ludGVyKiBpdHNlbGYsIHJhdGhlciB0aGFuIHRoZSBtZW1vcnkgaXQgcG9pbnRlZCB0by4gTGV0IG1lIHNlZS4uLiBJZiBgbGluay1cdTAwM2V3cl90eF92Ml9wZW5kYCBpcyBhIHBvaW50ZXIsIHdoaWNoIEkgc3VzcGVjdCBpdCBpcywgdGhlIHByZXZpb3VzIGNvZGUgd2FzIG9ubHkgemVyb2luZyB0aGUgYWRkcmVzcyBzdG9yZWQgaW4gdGhlIHBvaW50ZXIgaXRzZWxmLCB3aGljaCBpcyBwcm9iYWJseSA4IGJ5dGVzLiBUaGlzIG1lYW5zIHRoZSBhbGxvY2F0ZWQgYnVmZmVyIHdhc24ndCBhY3R1YWxseSBnZXR0aW5nIGluaXRpYWxpemVkLCByaWdodD9cblxuT2theSwgc28gaWYgdGhlIGJ1ZmZlciBpc24ndCB6ZXJvZWQsIGNvdWxkIHRoYXQgbGVhZCB0byBzb21lIG5hc3RpbmVzcyBkb3duIHRoZSBsaW5lLCBtYXliZSB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB0cmFuc21pdHRlZCBvciB1c2VkPyBUaGF0IGNvdWxkIGJlIGEgc2VyaW91cyBzZWN1cml0eSB2dWxuZXJhYmlsaXR5LCBvciBhdCBsZWFzdCBhIHBvdGVudGlhbCBkYXRhIGNvcnJ1cHRpb24gaXNzdWUuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBzdHJ1Y3R1cmUgb2YgdGhpcyB0aGluZy4uLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IHNtY19saW5rYCBhbmQgYHN0cnVjdCBzbWNfbGlua19ncm91cGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHdyX3R4X3YyX3BlbmRgIGFuZCBgd3JfdHhfYnVmX3YyYCBhY3R1YWxseSAqYXJlKiB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGlzIGZpeC4gR290dGEgZ2V0IHRoZSBsb3ctZG93biBvbiB0aGUgc2l6ZXMgYW5kIHVzYWdlIHBhdHRlcm5zIG9mIHRoZXNlIGJ1ZmZlcnMuIFRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODUzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQ4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjI6MTUuMTg3MjQ0MDAzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDc1NjE2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3Qgc21jX2xpbmsgXFxcXHtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9zbWNfY29yZS5oPTg5PXN0cnVjdCBzbWNfcmRtYV93ciB7XFx0XFx0XFx0XFx0Lyogd29yayByZXF1ZXN0cyBwZXIgbWVzc2FnZVxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5oLTk2LVxcbm5ldC9zbWMvc21jX2NvcmUuaDo5NzpzdHJ1Y3Qgc21jX2xpbmsge1xcbm5ldC9zbWMvc21jX2NvcmUuaC05OC1cXHRzdHJ1Y3Qgc21jX2liX2RldmljZVxcdCpzbWNpYmRldjtcXHQvKiBpYi1kZXZpY2UgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjI6MTUuMjMyMDA3NjU4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMDc4NDM3NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIFNNQyBMaW5rIFN0cnVjdHVyZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYHNtY19saW5rYCBzdHJ1Y3QuIExldCdzIGhlYWQgc3RyYWlnaHQgdG8gYG5ldC9zbWMvc21jX2NvcmUuaGAuIEkgd2FudCB0byBxdWlja2x5IHJldmlldyBpdHMga2V5IG1lbWJlcnMgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgb3ZlcmFsbCBTTUMgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24uIEknbSBwcmltYXJpbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBjdXJyZW50IHN0YXRlIGFuZCBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBsb3dlciBsYXllcnMgYW5kIHRoZSBzb2NrZXQuIExldCBtZSBzZWUuLi4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueXRoaW5nIHRoYXQgaGFzIHRvIGRvIHdpdGggY29ubmVjdGlvbiBlc3RhYmxpc2htZW50LCBkYXRhIHRyYW5zZmVyLCBhbmQgZXJyb3IgaGFuZGxpbmcuIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIGFzc3VtcHRpb25zIEknbSBtYWtpbmcgYWJvdXQgaXRzIGludGVybmFsIHN0YXRlIGFyZSBzdGlsbCB2YWxpZCB3aXRoIHJlc3BlY3QgdG8gdGhlIGN1cnJlbnQgY29kZS4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGxvb2sgZm9yIGFueSByZWNlbnQgY2hhbmdlcyB0aGF0IG1pZ2h0IGhhdmUgYWZmZWN0ZWQgaXRzIGNvcmUgZnVuY3Rpb25hbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg0MCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjIyOjIwLjUzOTg1MzQ1OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc21jL3NtY19jb3JlLmhcIixcbiAgXCJGaXJzdExpbmVcIjogOTcsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDk3OlxcdHN0cnVjdCBzbWNfbGluayB7XFxuICA5ODpcXHRcXHRzdHJ1Y3Qgc21jX2liX2RldmljZVxcdCpzbWNpYmRldjtcXHQvKiBpYi1kZXZpY2UgKi9cXG4gIDk5OlxcdFxcdHU4XFx0XFx0XFx0aWJwb3J0O1xcdFxcdC8qIHBvcnQgLSB2YWx1ZXMgMSB8IDIgKi9cXG4gMTAwOlxcdFxcdHN0cnVjdCBpYl9wZFxcdFxcdCpyb2NlX3BkO1xcdC8qIElCIHByb3RlY3Rpb24gZG9tYWluLFxcbiAxMDE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICogdW5pcXVlIGZvciBldmVyeSBSb0NFIFFQXFxuIDEwMjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgKi9cXG4gMTAzOlxcdFxcdHN0cnVjdCBpYl9xcFxcdFxcdCpyb2NlX3FwO1xcdC8qIElCIHF1ZXVlIHBhaXIgKi9cXG4gMTA0OlxcdFxcdHN0cnVjdCBpYl9xcF9hdHRyXFx0cXBfYXR0cjtcXHQvKiBJQiBxdWV1ZSBwYWlyIGF0dHJpYnV0ZXMgKi9cXG4gMTA1OlxcdFxcbiAxMDY6XFx0XFx0c3RydWN0IHNtY193cl9idWZcXHQqd3JfdHhfYnVmcztcXHQvKiBXUiBzZW5kIHBheWxvYWQgYnVmZmVycyAqL1xcbiAxMDc6XFx0XFx0c3RydWN0IGliX3NlbmRfd3JcXHQqd3JfdHhfaWJzO1xcdC8qIFdSIHNlbmQgbWV0YSBkYXRhICovXFxuIDEwODpcXHRcXHRzdHJ1Y3QgaWJfc2dlXFx0XFx0KndyX3R4X3NnZXM7XFx0LyogV1Igc2VuZCBnYXRoZXIgbWV0YSBkYXRhICovXFxuIDEwOTpcXHRcXHRzdHJ1Y3Qgc21jX3JkbWFfc2dlc1xcdCp3cl90eF9yZG1hX3NnZXM7LypSRE1BIFdSSVRFIGdhdGhlciBtZXRhIGRhdGEqL1xcbiAxMTA6XFx0XFx0c3RydWN0IHNtY19yZG1hX3dyXFx0KndyX3R4X3JkbWFzO1xcdC8qIFdSIFJETUEgV1JJVEUgKi9cXG4gMTExOlxcdFxcdHN0cnVjdCBzbWNfd3JfdHhfcGVuZFxcdCp3cl90eF9wZW5kcztcXHQvKiBXUiBzZW5kIHdhaXRpbmcgZm9yIENRRSAqL1xcbiAxMTI6XFx0XFx0c3RydWN0IGNvbXBsZXRpb25cXHQqd3JfdHhfY29tcGw7XFx0LyogV1Igc2VuZCBDUUUgY29tcGxldGlvbiAqL1xcbiAxMTM6XFx0XFx0LyogYWJvdmUgZm91ciB2ZWN0b3JzIGhhdmUgd3JfdHhfY250IGVsZW1lbnRzIGFuZCB1c2UgdGhlIHNhbWUgaW5kZXggKi9cXG4gMTE0OlxcdFxcdHN0cnVjdCBpYl9zZW5kX3dyXFx0KndyX3R4X3YyX2liO1xcdC8qIFdSIHNlbmQgdjIgbWV0YSBkYXRhICovXFxuIDExNTpcXHRcXHRzdHJ1Y3QgaWJfc2dlXFx0XFx0KndyX3R4X3YyX3NnZTtcXHQvKiBXUiBzZW5kIHYyIGdhdGhlciBtZXRhIGRhdGEqL1xcbiAxMTY6XFx0XFx0c3RydWN0IHNtY193cl90eF9wZW5kXFx0KndyX3R4X3YyX3BlbmQ7XFx0LyogV1Igc2VuZCB2MiB3YWl0aW5nIGZvciBDUUUgKi9cXG4gMTE3OlxcdFxcdGRtYV9hZGRyX3RcXHRcXHR3cl90eF9kbWFfYWRkcjtcXHQvKiBETUEgYWRkcmVzcyBvZiB3cl90eF9idWZzICovXFxuIDExODpcXHRcXHRkbWFfYWRkcl90XFx0XFx0d3JfdHhfdjJfZG1hX2FkZHI7IC8qIERNQSBhZGRyZXNzIG9mIHYyIHR4IGJ1ZiovXFxuIDExOTpcXHRcXHRhdG9taWNfbG9uZ190XFx0XFx0d3JfdHhfaWQ7XFx0Lyogc2VxICMgb2YgbGFzdCBzZW50IFdSICovXFxuIDEyMDpcXHRcXHR1bnNpZ25lZCBsb25nXFx0XFx0KndyX3R4X21hc2s7XFx0LyogYml0IG1hc2sgb2YgdXNlZCBpbmRleGVzICovXFxuIDEyMTpcXHRcXHR1MzJcXHRcXHRcXHR3cl90eF9jbnQ7XFx0LyogbnVtYmVyIG9mIFdSIHNlbmQgYnVmZmVycyAqL1xcbiAxMjI6XFx0XFx0d2FpdF9xdWV1ZV9oZWFkX3RcXHR3cl90eF93YWl0O1xcdC8qIHdhaXQgZm9yIGZyZWUgV1Igc2VuZCBidWYgKi9cXG4gMTIzOlxcdFxcdHN0cnVjdCB7XFxuIDEyNDpcXHRcXHRcXHRzdHJ1Y3QgcGVyY3B1X3JlZlxcdHdyX3R4X3JlZnM7XFxuIDEyNTpcXHRcXHR9IF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XFxuIDEyNjpcXHRcXHRzdHJ1Y3QgY29tcGxldGlvblxcdHR4X3JlZl9jb21wO1xcbiAxMjc6XFx0XFxuIDEyODpcXHRcXHR1OFxcdFxcdFxcdCp3cl9yeF9idWZzO1xcdC8qIFdSIHJlY3YgcGF5bG9hZCBidWZmZXJzICovXFxuIDEyOTpcXHRcXHRzdHJ1Y3QgaWJfcmVjdl93clxcdCp3cl9yeF9pYnM7XFx0LyogV1IgcmVjdiBtZXRhIGRhdGEgKi9cXG4gMTMwOlxcdFxcdHN0cnVjdCBpYl9zZ2VcXHRcXHQqd3Jfcnhfc2dlcztcXHQvKiBXUiByZWN2IHNjYXR0ZXIgbWV0YSBkYXRhICovXFxuIDEzMTpcXHRcXHQvKiBhYm92ZSB0aHJlZSB2ZWN0b3JzIGhhdmUgd3JfcnhfY250IGVsZW1lbnRzIGFuZCB1c2UgdGhlIHNhbWUgaW5kZXggKi9cXG4gMTMyOlxcdFxcdGludFxcdFxcdFxcdHdyX3J4X3NnZV9jbnQ7IC8qIHJ4IHNnZSwgVjEgaXMgMSwgVjIgaXMgZWl0aGVyIDIgb3IgMSAqL1xcbiAxMzM6XFx0XFx0aW50XFx0XFx0XFx0d3JfcnhfYnVmbGVuO1xcdC8qIGJ1ZmZlciBsZW4gZm9yIHRoZSBmaXJzdCBzZ2UsIGxlbiBmb3IgdGhlXFxuIDEzNDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgKiBzZWNvbmQgc2dlIGlzIGxnciBzaGFyZWQgaWYgcnggc2dlIGlzIDIuXFxuIDEzNTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgKi9cXG4gMTM2OlxcdFxcdGRtYV9hZGRyX3RcXHRcXHR3cl9yeF9kbWFfYWRkcjtcXHQvKiBETUEgYWRkcmVzcyBvZiB3cl9yeF9idWZzICovXFxuIDEzNzpcXHRcXHRkbWFfYWRkcl90XFx0XFx0d3JfcnhfdjJfZG1hX2FkZHI7IC8qIERNQSBhZGRyZXNzIG9mIHYyIHJ4IGJ1ZiovXFxuIDEzODpcXHRcXHR1NjRcXHRcXHRcXHR3cl9yeF9pZDtcXHQvKiBzZXEgIyBvZiBsYXN0IHJlY3YgV1IgKi9cXG4gMTM5OlxcdFxcdHU2NFxcdFxcdFxcdHdyX3J4X2lkX2NvbXBsOyAvKiBzZXEgIyBvZiBsYXN0IGNvbXBsZXRlZCBXUiAqL1xcbiAxNDA6XFx0XFx0dTMyXFx0XFx0XFx0d3JfcnhfY250O1xcdC8qIG51bWJlciBvZiBXUiByZWN2IGJ1ZmZlcnMgKi9cXG4gMTQxOlxcdFxcdHVuc2lnbmVkIGxvbmdcXHRcXHR3cl9yeF90c3RhbXA7XFx0LyogamlmZmllcyB3aGVuIGxhc3QgYnVmIHJ4ICovXFxuIDE0MjpcXHRcXHR3YWl0X3F1ZXVlX2hlYWRfdCAgICAgICB3cl9yeF9lbXB0eV93YWl0OyAvKiB3YWl0IGZvciBSUSBlbXB0eSAqL1xcbiAxNDM6XFx0XFxuIDE0NDpcXHRcXHRzdHJ1Y3QgaWJfcmVnX3dyXFx0d3JfcmVnO1xcdFxcdC8qIFdSIHJlZ2lzdGVyIG1lbW9yeSByZWdpb24gKi9cXG4gMTQ1OlxcdFxcdHdhaXRfcXVldWVfaGVhZF90XFx0d3JfcmVnX3dhaXQ7XFx0Lyogd2FpdCBmb3Igd3JfcmVnIHJlc3VsdCAqL1xcbiAxNDY6XFx0XFx0c3RydWN0IHtcXG4gMTQ3OlxcdFxcdFxcdHN0cnVjdCBwZXJjcHVfcmVmXFx0d3JfcmVnX3JlZnM7XFxuIDE0ODpcXHRcXHR9IF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XFxuIDE0OTpcXHRcXHRzdHJ1Y3QgY29tcGxldGlvblxcdHJlZ19yZWZfY29tcDtcXG4gMTUwOlxcdFxcdGVudW0gc21jX3dyX3JlZ19zdGF0ZVxcdHdyX3JlZ19zdGF0ZTtcXHQvKiBzdGF0ZSBvZiB3cl9yZWcgcmVxdWVzdCAqL1xcbiAxNTE6XFx0XFxuIDE1MjpcXHRcXHR1OFxcdFxcdFxcdGdpZFtTTUNfR0lEX1NJWkVdOy8qIGdpZCBtYXRjaGluZyB1c2VkIHZsYW4gaWQqL1xcbiAxNTM6XFx0XFx0dThcXHRcXHRcXHRzZ2lkX2luZGV4O1xcdC8qIGdpZCBpbmRleCBmb3IgdmxhbiBpZCAgICAgICovXFxuIDE1NDpcXHRcXHR1MzJcXHRcXHRcXHRwZWVyX3FwbjtcXHQvKiBRUCBudW1iZXIgb2YgcGVlciAqL1xcbiAxNTU6XFx0XFx0ZW51bSBpYl9tdHVcXHRcXHRwYXRoX210dTtcXHQvKiB1c2VkIG10dSAqL1xcbiAxNTY6XFx0XFx0ZW51bSBpYl9tdHVcXHRcXHRwZWVyX210dTtcXHQvKiBtdHUgc2l6ZSBvZiBwZWVyICovXFxuIDE1NzpcXHRcXHR1MzJcXHRcXHRcXHRwc25faW5pdGlhbDtcXHQvKiBRUCB0eCBpbml0aWFsIHBhY2tldCBzZXFubyAqL1xcbiAxNTg6XFx0XFx0dTMyXFx0XFx0XFx0cGVlcl9wc247XFx0LyogUVAgcnggaW5pdGlhbCBwYWNrZXQgc2Vxbm8gKi9cXG4gMTU5OlxcdFxcdHU4XFx0XFx0XFx0cGVlcl9tYWNbRVRIX0FMRU5dO1xcdC8qID0gZ2lkWzg6MTB8fDEzOjE1XSAqL1xcbiAxNjA6XFx0XFx0dThcXHRcXHRcXHRwZWVyX2dpZFtTTUNfR0lEX1NJWkVdO1xcdC8qIGdpZCBvZiBwZWVyKi9cXG4gMTYxOlxcdFxcdHU4XFx0XFx0XFx0bGlua19pZDtcXHQvKiB1bmlxdWUgIyB3aXRoaW4gbGluayBncm91cCAqL1xcbiAxNjI6XFx0XFx0dThcXHRcXHRcXHRsaW5rX3VpZFtTTUNfTEdSX0lEX1NJWkVdOyAvKiB1bmlxdWUgbG5rIGlkICovXFxuIDE2MzpcXHRcXHR1OFxcdFxcdFxcdHBlZXJfbGlua191aWRbU01DX0xHUl9JRF9TSVpFXTsgLyogcGVlciB1aWQgKi9cXG4gMTY0OlxcdFxcdHU4XFx0XFx0XFx0bGlua19pZHg7XFx0LyogaW5kZXggaW4gbGdyIGxpbmsgYXJyYXkgKi9cXG4gMTY1OlxcdFxcdHU4XFx0XFx0XFx0bGlua19pc19hc3ltO1xcdC8qIGlzIGxpbmsgYXN5bW1ldHJpYz8gKi9cXG4gMTY2OlxcdFxcdHU4XFx0XFx0XFx0Y2xlYXJpbmcgOiAxO1xcdC8qIGxpbmsgaXMgYmVpbmcgY2xlYXJlZCAqL1xcbiAxNjc6XFx0XFx0cmVmY291bnRfdFxcdFxcdHJlZmNudDtcXHRcXHQvKiBsaW5rIHJlZmVyZW5jZSBjb3VudCAqL1xcbiAxNjg6XFx0XFx0c3RydWN0IHNtY19saW5rX2dyb3VwXFx0KmxncjtcXHRcXHQvKiBwYXJlbnQgbGluayBncm91cCAqL1xcbiAxNjk6XFx0XFx0c3RydWN0IHdvcmtfc3RydWN0XFx0bGlua19kb3duX3dyaztcXHQvKiB3cmsgdG8gYnJpbmcgbGluayBkb3duICovXFxuIDE3MDpcXHRcXHRjaGFyXFx0XFx0XFx0aWJuYW1lW0lCX0RFVklDRV9OQU1FX01BWF07IC8qIGliIGRldmljZSBuYW1lICovXFxuIDE3MTpcXHRcXHRpbnRcXHRcXHRcXHRuZGV2X2lmaWR4OyAvKiBuZXR3b3JrIGRldmljZSBpZmluZGV4ICovXFxuIDE3MjpcXHRcXG4gMTczOlxcdFxcdGVudW0gc21jX2xpbmtfc3RhdGVcXHRzdGF0ZTtcXHRcXHQvKiBzdGF0ZSBvZiBsaW5rICovXFxuIDE3NDpcXHRcXHRzdHJ1Y3QgZGVsYXllZF93b3JrXFx0bGxjX3Rlc3RsaW5rX3dyazsgLyogdGVzdGxpbmsgd29ya2VyICovXFxuIDE3NTpcXHRcXHRzdHJ1Y3QgY29tcGxldGlvblxcdGxsY190ZXN0bGlua19yZXNwOyAvKiB3YWl0IGZvciByeCBvZiB0ZXN0bGluayAqL1xcbiAxNzY6XFx0XFx0aW50XFx0XFx0XFx0bGxjX3Rlc3RsaW5rX3RpbWU7IC8qIHRlc3RsaW5rIGludGVydmFsICovXFxuIDE3NzpcXHRcXHRhdG9taWNfdFxcdFxcdGNvbm5fY250OyAvKiBjb25uZWN0aW9ucyBvbiB0aGlzIGxpbmsgKi9cXG4gMTc4OlxcdFxcdHUxNlxcdFxcdFxcdG1heF9zZW5kX3dyO1xcbiAxNzk6XFx0XFx0dTE2XFx0XFx0XFx0bWF4X3JlY3Zfd3I7XFxuIDE4MDpcXHR9O1xcbiAxODE6XFx0XFxuIDE4MjpcXHQvKiBGb3Igbm93IHdlIGp1c3QgYWxsb3cgb25lIHBhcmFsbGVsIGxpbmsgcGVyIGxpbmsgZ3JvdXAuIFRoZSBTTUMgcHJvdG9jb2xcXG4gMTgzOlxcdCAqIGFsbG93cyBtb3JlICh1cCB0byA4KS5cXG4gMTg0OlxcdCAqL1xcbiAxODU6XFx0I2RlZmluZSBTTUNfTElOS1NfUEVSX0xHUl9NQVhcXHQzXFxuIDE4NjpcXHQjZGVmaW5lIFNNQ19TSU5HTEVfTElOS1xcdFxcdDBcXG4gMTg3OlxcdCNkZWZpbmUgU01DX0xJTktTX0FERF9MTktfTUlOXFx0MVxcdC8qIG1pbi4gIyBvZiBsaW5rcyBwZXIgbGluayBncm91cCAqL1xcbiAxODg6XFx0I2RlZmluZSBTTUNfTElOS1NfQUREX0xOS19NQVhcXHQyXFx0LyogbWF4LiAjIG9mIGxpbmtzIHBlciBsaW5rIGdyb3VwLCBhbHNvIGlzIHRoZVxcbiAxODk6XFx0XFx0XFx0XFx0XFx0XFx0ICogZGVmYXVsdCB2YWx1ZSBmb3Igc21jLXIgdjEuMCBhbmQgdjIuMFxcbiAxOTA6XFx0XFx0XFx0XFx0XFx0XFx0ICovXFxuIDE5MTpcXHQjZGVmaW5lIFNNQ19MSU5LU19QRVJfTEdSX01BWF9QUkVGRVJcXHQyXFx0LyogUHJlZmVycmVkIG1heCBsaW5rcyBwZXIgbGluayBncm91cCB1c2VkIGZvclxcbiAxOTI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICogU01DLVIgdjIuMSBhbmQgbGF0ZXIgbmVnb3RpYXRpb24sIHZlbmRvcnMgb3JcXG4gMTkzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAqIGRpc3RyaWJ1dGlvbnMgbWF5IG1vZGlmeSBpdCB0byBhIHZhbHVlIGJldHdlZW5cXG4gMTk0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAqIDEtMiBhcyBuZWVkZWQuXFxuIDE5NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgKi9cXG4gMTk2OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDoyMjoyMC41Mzk5Mzg4MzhaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc1MjMwNzE1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWJ1Z2dpbmcgYSBQb3RlbnRpYWwgTlVMTCBQb2ludGVyIERlcmVmZXJlbmNlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBgc3RydWN0IHNtY193cl90eF9wZW5kICp3cl90eF92Ml9wZW5kO2AuIFJpZ2h0LCBhIHBvaW50ZXIuIFRoZW4gdGhhdCBgbWVtc2V0YCBjYWxsLCBgbWVtc2V0KFx1MDAyNmxpbmstXHUwMDNld3JfdHhfdjJfcGVuZCwgMCwgc2l6ZW9mKGxpbmstXHUwMDNld3JfdHhfdjJfcGVuZCkpYCwgdGhhdCB3YXMgemVyb2luZyB0aGUgKnBvaW50ZXIqIGl0c2VsZiwgbm90IHRoZSBtZW1vcnkgaXQgcG9pbnRzIHRvLiBIbW0sIHRoYXQncyBub3Qgd2hhdCdzIGludGVuZGVkLlxuXG5TbyBgbGluay1cdTAwM2V3cl90eF92Ml9wZW5kYCBpcyBhIHBvaW50ZXIgdG8gdGhlIGBzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRgLiBJZiB0aGF0IGBtZW1zZXRgIHplcm9lZCB0aGUgcG9pbnRlciwgaXQgd291bGQgc2V0IGl0IHRvIE5VTEwuICBBbmQgdGhhdCBtYWtlcyBtZSB0aGluaywgaWYgYGxpbmstXHUwMDNld3JfdHhfdjJfcGVuZGAgKndhcyogemVyb2VkLCBpdCB3b3VsZCBiZWNvbWUgTlVMTC4gVGhhdCdzIGEgdGV4dGJvb2sgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHNpdHVhdGlvbiwgYW5kIEtBU0FOIG9yIGFueSBkZWNlbnQgc3RhdGljIGFuYWx5c2lzIHRvb2wgd291bGQgcGljayB0aGF0IHVwIHByZXR0eSBxdWlja2x5IHRoZSBuZXh0IHRpbWUgaXQgd2FzIHVzZWQuIEl0J3MgYWxsb2NhdGVkIHNvbWV3aGVyZSwgdGhvdWdoLiBJZiB0aGF0IGJlY2FtZSBOVUxMLCBhbmQgd2UgYWNjZXNzZWQgaXQsIHdlIHNob3VsZCBiZSBzZWVpbmcgdGhhdCBwcmV0dHkgZWFzaWx5LlxuXG5CdXQgd2FpdCwgSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZyByZWxhdGVkLiBXaGF0IGFib3V0IGBsaW5rLVx1MDAzZWxnci1cdTAwM2V3cl90eF9idWZfdjJgPyBUaGF0J3MgbGlrZWx5IHJlbGF0ZWQsIGFuZCBJIHdhbnQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGBzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXBgIHRvIHNlZSBob3cgdGhvc2UgYXJlIHJlbGF0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzODksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDoyMjoyNS4yOTIyNTIxMzdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NzgzNjc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBzbWNfbGlua19ncm91cCBcXFxce1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL3NtY19jb3JlLmg9MjgxPXN0cnVjdCBzbWNfbGxjX2Zsb3cge1xcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5oLTI4NS1cXG5uZXQvc21jL3NtY19jb3JlLmg6Mjg2OnN0cnVjdCBzbWNfbGlua19ncm91cCB7XFxubmV0L3NtYy9zbWNfY29yZS5oLTI4Ny1cXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0bGlzdDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjI6MjUuMzM3MDM4MTgyWiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNjg4ODQwMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHJlYWRpbmcgYW5kIHRoaW5raW5nIGFib3V0IHRoZSBzdHJ1Y3Q6XG5cbioqQW5hbHl6aW5nIGBzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXBgKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIGBzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXBgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGF0J3MgdGhlIGNvbnRleHQgaGVyZT8gVGhpcyBzY3JlYW1zIFN5c3RlbXMgTWFuYWdlbWVudCBDb250cm9sbGVyLCBsaWtlbHkgZGVhbGluZyB3aXRoIHNvbWUga2luZCBvZiBsaW5rZWQgb3IgZ3JvdXBlZCByZXNvdXJjZS5cIiBLbm93aW5nIHRoZSBuYW1lLCBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgaW5mb3JtYXRpb24gYWJvdXQgaG93IGRpZmZlcmVudCBTTUMgbGlua3MgYXJlIG9yZ2FuaXplZCBhbmQgbWFuYWdlZCB0b2dldGhlci4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIGVsZW1lbnRzIGxpa2UgbGluayBJRHMsIHBlcmhhcHMgc29tZSBraW5kIG9mIGdyb3VwIGlkZW50aWZpZXIsIGFuZCBwb3RlbnRpYWxseSBwb2ludGVycyBvciByZWZlcmVuY2VzIHRvIHRoZSBpbmRpdmlkdWFsIGxpbmtzIHRoZW1zZWx2ZXMsIG9yIGRhdGEgYWJvdXQgdGhlIGdyb3VwIGFzIGEgd2hvbGUuIEkgYWxzbyBleHBlY3QgdGhhdCB0aGVyZSdsbCBiZSBkYXRhIHJlZ2FyZGluZyB0aGUgc3RhdGVzIG9mIHRoZSBsaW5rcyAoYWN0aXZlL2luYWN0aXZlLCBoZWFsdGh5L2ZhaWxlZCksIHdoaWNoIHdpbGwgZGljdGF0ZSB0aGUgZ3JvdXAncyBvdmVyYWxsIHN0YXRlLiBJIGJldCB0aGVyZSdzIHNvbWUgc29ydCBvZiByZXNvdXJjZSBsb2NraW5nIG1lY2hhbmlzbSBvciBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlIGluY2x1ZGVkIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIGR1cmluZyBjb25jdXJyZW50IGFjY2VzcyBvZiB0aGUgbGlua3MuIEknbSBhbHNvIHJlYWxseSBjdXJpb3VzIHdoZXRoZXIgdGhpcyBkYXRhIHN0cnVjdHVyZSBpcyBkZXNpZ25lZCB0byByZXByZXNlbnQgYSBzdGF0aWMgY29uZmlndXJhdGlvbiBvciBpZiBpdCBjYW4gYmUgZHluYW1pY2FsbHkgbW9kaWZpZWQg4oCTIHRoYXQnbGwgcmVhbGx5IGFmZmVjdCBob3cgdGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBhbmQgbWFuYWdlZCBieSB0aGUgb3BlcmF0aW5nIHN5c3RlbS4gVWx0aW1hdGVseSwgSSdtIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IFNNQyBsaW5rcyBhcmUgYWJzdHJhY3RlZCBhbmQgY29udHJvbGxlZCBhdCB0aGUgc29mdHdhcmUgbGV2ZWwuIEkgYWxzbyB3b3VsZG4ndCBiZSBzdXJwcmlzZWQgdG8gc2VlIGEgcGVyZm9ybWFuY2UgZWxlbWVudCBoZXJlLCBzdWNoIGFzIGRhdGEgc3RydWN0dXJlcyB0aGF0IGZhY2lsaXRhdGUgZmFzdCBsb29rdXBzIG9mIG1lbWJlcnMgaW4gdGhlIGxpbmsgZ3JvdXAuIEknbSBlYWdlciB0byBkaWcgaW4gYW5kIHNlZSBob3cgd2VsbCB0aGlzIHRoaW5nIGlzIGRlc2lnbmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDQ4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjI6MjkuNjA1OTI0NDk2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc21jL3NtY19jb3JlLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMjg2LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI4NjpcXHRzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAge1xcbiAyODc6XFx0XFx0c3RydWN0IGxpc3RfaGVhZFxcdGxpc3Q7XFxuIDI4ODpcXHRcXHRzdHJ1Y3QgcmJfcm9vdFxcdFxcdGNvbm5zX2FsbDtcXHQvKiBjb25uZWN0aW9uIHRyZWUgKi9cXG4gMjg5OlxcdFxcdHJ3bG9ja190XFx0XFx0Y29ubnNfbG9jaztcXHQvKiBwcm90ZWN0cyBjb25uc19hbGwgKi9cXG4gMjkwOlxcdFxcdHVuc2lnbmVkIGludFxcdFxcdGNvbm5zX251bTtcXHQvKiBjdXJyZW50ICMgb2YgY29ubmVjdGlvbnMgKi9cXG4gMjkxOlxcdFxcdHVuc2lnbmVkIHNob3J0XFx0XFx0dmxhbl9pZDtcXHQvKiB2bGFuIGlkIG9mIGxpbmsgZ3JvdXAgKi9cXG4gMjkyOlxcdFxcbiAyOTM6XFx0XFx0c3RydWN0IGxpc3RfaGVhZFxcdHNuZGJ1ZnNbU01DX1JNQkVfU0laRVNdOy8qIHR4IGJ1ZmZlcnMgKi9cXG4gMjk0OlxcdFxcdHN0cnVjdCByd19zZW1hcGhvcmVcXHRzbmRidWZzX2xvY2s7XFx0LyogcHJvdGVjdHMgdHggYnVmZmVycyAqL1xcbiAyOTU6XFx0XFx0c3RydWN0IGxpc3RfaGVhZFxcdHJtYnNbU01DX1JNQkVfU0laRVNdO1xcdC8qIHJ4IGJ1ZmZlcnMgKi9cXG4gMjk2OlxcdFxcdHN0cnVjdCByd19zZW1hcGhvcmVcXHRybWJzX2xvY2s7XFx0LyogcHJvdGVjdHMgcnggYnVmZmVycyAqL1xcbiAyOTc6XFx0XFx0dTY0XFx0XFx0XFx0YWxsb2Nfc25kYnVmcztcXHQvKiBzdGF0cyBvZiB0eCBidWZmZXJzICovXFxuIDI5ODpcXHRcXHR1NjRcXHRcXHRcXHRhbGxvY19ybWJzO1xcdC8qIHN0YXRzIG9mIHJ4IGJ1ZmZlcnMgKi9cXG4gMjk5OlxcdFxcbiAzMDA6XFx0XFx0dThcXHRcXHRcXHRpZFtTTUNfTEdSX0lEX1NJWkVdO1xcdC8qIHVuaXF1ZSBsZ3IgaWQgKi9cXG4gMzAxOlxcdFxcdHN0cnVjdCBkZWxheWVkX3dvcmtcXHRmcmVlX3dvcms7XFx0LyogZGVsYXllZCBmcmVlaW5nIG9mIGFuIGxnciAqL1xcbiAzMDI6XFx0XFx0c3RydWN0IHdvcmtfc3RydWN0XFx0dGVybWluYXRlX3dvcms7XFx0LyogYWJub3JtYWwgbGdyIHRlcm1pbmF0aW9uICovXFxuIDMwMzpcXHRcXHRzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdFxcdCp0eF93cTtcXHRcXHQvKiB3cSBmb3IgY29ubi4gdHggd29ya2VycyAqL1xcbiAzMDQ6XFx0XFx0dThcXHRcXHRcXHRzeW5jX2VyciA6IDE7XFx0LyogbGdyIG5vIGxvbmdlciBmaXRzIHRvIHBlZXIgKi9cXG4gMzA1OlxcdFxcdHU4XFx0XFx0XFx0dGVybWluYXRpbmcgOiAxOy8qIGxnciBpcyB0ZXJtaW5hdGluZyAqL1xcbiAzMDY6XFx0XFx0dThcXHRcXHRcXHRmcmVlaW5nIDogMTtcXHQvKiBsZ3IgaXMgYmVpbmcgZnJlZWQgKi9cXG4gMzA3OlxcdFxcbiAzMDg6XFx0XFx0cmVmY291bnRfdFxcdFxcdHJlZmNudDtcXHRcXHQvKiBsZ3IgcmVmZXJlbmNlIGNvdW50ICovXFxuIDMwOTpcXHRcXHRib29sXFx0XFx0XFx0aXNfc21jZDtcXHQvKiBTTUMtUiBvciBTTUMtRCAqL1xcbiAzMTA6XFx0XFx0dThcXHRcXHRcXHRzbWNfdmVyc2lvbjtcXG4gMzExOlxcdFxcdHU4XFx0XFx0XFx0bmVnb3RpYXRlZF9laWRbU01DX01BWF9FSURfTEVOXTtcXG4gMzEyOlxcdFxcdHU4XFx0XFx0XFx0cGVlcl9vcztcXHQvKiBwZWVyIG9wZXJhdGluZyBzeXN0ZW0gKi9cXG4gMzEzOlxcdFxcdHU4XFx0XFx0XFx0cGVlcl9zbWNfcmVsZWFzZTtcXG4gMzE0OlxcdFxcdHU4XFx0XFx0XFx0cGVlcl9ob3N0bmFtZVtTTUNfTUFYX0hPU1ROQU1FX0xFTl07XFxuIDMxNTpcXHRcXHR1bmlvbiB7XFxuIDMxNjpcXHRcXHRcXHRzdHJ1Y3QgeyAvKiBTTUMtUiAqL1xcbiAzMTc6XFx0XFx0XFx0XFx0ZW51bSBzbWNfbGdyX3JvbGVcXHRyb2xlO1xcbiAzMTg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0LyogY2xpZW50IG9yIHNlcnZlciAqL1xcbiAzMTk6XFx0XFx0XFx0XFx0c3RydWN0IHNtY19saW5rXFx0XFx0bG5rW1NNQ19MSU5LU19QRVJfTEdSX01BWF07XFxuIDMyMDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQvKiBzbWMgbGluayAqL1xcbiAzMjE6XFx0XFx0XFx0XFx0c3RydWN0IHNtY193cl92Ml9idWZcXHQqd3JfcnhfYnVmX3YyO1xcbiAzMjI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0LyogV1IgdjIgcmVjdiBwYXlsb2FkIGJ1ZmZlciAqL1xcbiAzMjM6XFx0XFx0XFx0XFx0c3RydWN0IHNtY193cl92Ml9idWZcXHQqd3JfdHhfYnVmX3YyO1xcbiAzMjQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0LyogV1IgdjIgc2VuZCBwYXlsb2FkIGJ1ZmZlciAqL1xcbiAzMjU6XFx0XFx0XFx0XFx0Y2hhclxcdFxcdFxcdHBlZXJfc3lzdGVtaWRbU01DX1NZU1RFTUlEX0xFTl07XFxuIDMyNjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQvKiB1bmlxdWUgc3lzdGVtX2lkIG9mIHBlZXIgKi9cXG4gMzI3OlxcdFxcdFxcdFxcdHN0cnVjdCBzbWNfcnRva2VuXFx0cnRva2Vuc1tTTUNfUk1CU19QRVJfTEdSX01BWF1cXG4gMzI4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFtTTUNfTElOS1NfUEVSX0xHUl9NQVhdO1xcbiAzMjk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0LyogcmVtb3RlIGFkZHIva2V5IHBhaXJzICovXFxuIDMzMDpcXHRcXHRcXHRcXHRERUNMQVJFX0JJVE1BUChydG9rZW5zX3VzZWRfbWFzaywgU01DX1JNQlNfUEVSX0xHUl9NQVgpO1xcbiAzMzE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0LyogdXNlZCBydG9rZW4gZWxlbWVudHMgKi9cXG4gMzMyOlxcdFxcdFxcdFxcdHU4XFx0XFx0XFx0bmV4dF9saW5rX2lkO1xcbiAzMzM6XFx0XFx0XFx0XFx0ZW51bSBzbWNfbGdyX3R5cGVcXHR0eXBlO1xcbiAzMzQ6XFx0XFx0XFx0XFx0ZW51bSBzbWNyX2J1Zl90eXBlXFx0YnVmX3R5cGU7XFxuIDMzNTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQvKiByZWR1bmRhbmN5IHN0YXRlICovXFxuIDMzNjpcXHRcXHRcXHRcXHR1OFxcdFxcdFxcdHBuZXRfaWRbU01DX01BWF9QTkVUSURfTEVOICsgMV07XFxuIDMzNzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQvKiBwbmV0IGlkIG9mIHRoaXMgbGdyICovXFxuIDMzODpcXHRcXHRcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0bGxjX2V2ZW50X3E7XFxuIDMzOTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQvKiBxdWV1ZSBmb3IgbGxjIGV2ZW50cyAqL1xcbiAzNDA6XFx0XFx0XFx0XFx0c3BpbmxvY2tfdFxcdFxcdGxsY19ldmVudF9xX2xvY2s7XFxuIDM0MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQvKiBwcm90ZWN0cyBsbGNfZXZlbnRfcSAqL1xcbiAzNDI6XFx0XFx0XFx0XFx0c3RydWN0IHJ3X3NlbWFwaG9yZVxcdGxsY19jb25mX211dGV4O1xcbiAzNDM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0LyogcHJvdGVjdHMgbGdyIHJlY29uZmlnLiAqL1xcbiAzNDQ6XFx0XFx0XFx0XFx0c3RydWN0IHdvcmtfc3RydWN0XFx0bGxjX2FkZF9saW5rX3dvcms7XFxuIDM0NTpcXHRcXHRcXHRcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcXHRsbGNfZGVsX2xpbmtfd29yaztcXG4gMzQ2OlxcdFxcdFxcdFxcdHN0cnVjdCB3b3JrX3N0cnVjdFxcdGxsY19ldmVudF93b3JrO1xcbiAzNDc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0LyogbGxjIGV2ZW50IHdvcmtlciAqL1xcbiAzNDg6XFx0XFx0XFx0XFx0d2FpdF9xdWV1ZV9oZWFkX3RcXHRsbGNfZmxvd193YWl0ZXI7XFxuIDM0OTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQvKiB3NCBuZXh0IGxsYyBldmVudCAqL1xcbiAzNTA6XFx0XFx0XFx0XFx0d2FpdF9xdWV1ZV9oZWFkX3RcXHRsbGNfbXNnX3dhaXRlcjtcXG4gMzUxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdC8qIHc0IG5leHQgbGxjIG1zZyAqL1xcbiAzNTI6XFx0XFx0XFx0XFx0c3RydWN0IHNtY19sbGNfZmxvd1xcdGxsY19mbG93X2xjbDtcXG4gMzUzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdC8qIGxsYyBsb2NhbCBjb250cm9sIGZpZWxkICovXFxuIDM1NDpcXHRcXHRcXHRcXHRzdHJ1Y3Qgc21jX2xsY19mbG93XFx0bGxjX2Zsb3dfcm10O1xcbiAzNTU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0LyogbGxjIHJlbW90ZSBjb250cm9sIGZpZWxkICovXFxuIDM1NjpcXHRcXHRcXHRcXHRzdHJ1Y3Qgc21jX2xsY19xZW50cnlcXHQqZGVsYXllZF9ldmVudDtcXG4gMzU3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdC8qIGFycml2ZWQgd2hlbiBmbG93IGFjdGl2ZSAqL1xcbiAzNTg6XFx0XFx0XFx0XFx0c3BpbmxvY2tfdFxcdFxcdGxsY19mbG93X2xvY2s7XFxuIDM1OTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQvKiBwcm90ZWN0cyBsbGMgZmxvdyAqL1xcbiAzNjA6XFx0XFx0XFx0XFx0aW50XFx0XFx0XFx0bGxjX3Rlc3RsaW5rX3RpbWU7XFxuIDM2MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQvKiBsaW5rIGtlZXAgYWxpdmUgdGltZSAqL1xcbiAzNjI6XFx0XFx0XFx0XFx0dTMyXFx0XFx0XFx0bGxjX3Rlcm1pbmF0aW9uX3JzbjtcXG4gMzYzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdC8qIHJzbiBjb2RlIGZvciB0ZXJtaW5hdGlvbiAqL1xcbiAzNjQ6XFx0XFx0XFx0XFx0dThcXHRcXHRcXHRuZXh0aG9wX21hY1tFVEhfQUxFTl07XFxuIDM2NTpcXHRcXHRcXHRcXHR1OFxcdFxcdFxcdHVzZXNfZ2F0ZXdheTtcXG4gMzY2OlxcdFxcdFxcdFxcdF9fYmUzMlxcdFxcdFxcdHNhZGRyO1xcbiAzNjc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0LyogbmV0IG5hbWVzcGFjZSAqL1xcbiAzNjg6XFx0XFx0XFx0XFx0c3RydWN0IG5ldFxcdFxcdCpuZXQ7XFxuIDM2OTpcXHRcXHRcXHRcXHR1OFxcdFxcdFxcdG1heF9jb25ucztcXG4gMzcwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdC8qIG1heCBjb25uIGNhbiBiZSBhc3NpZ25lZCB0byBsZ3IgKi9cXG4gMzcxOlxcdFxcdFxcdFxcdHU4XFx0XFx0XFx0bWF4X2xpbmtzO1xcbiAzNzI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0LyogbWF4IGxpbmtzIGNhbiBiZSBhZGRlZCBpbiBsZ3IgKi9cXG4gMzczOlxcdFxcdFxcdFxcdHUxNlxcdFxcdFxcdG1heF9zZW5kX3dyO1xcbiAzNzQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0LyogbnVtYmVyIG9mIFdSIGJ1ZmZlcnMgb24gc2VuZCAqL1xcbiAzNzU6XFx0XFx0XFx0XFx0dTE2XFx0XFx0XFx0bWF4X3JlY3Zfd3I7XFxuIDM3NjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQvKiBudW1iZXIgb2YgV1IgYnVmZmVycyBvbiByZWN2ICovXFxuIDM3NzpcXHRcXHRcXHR9O1xcbiAzNzg6XFx0XFx0XFx0c3RydWN0IHsgLyogU01DLUQgKi9cXG4gMzc5OlxcdFxcdFxcdFxcdHN0cnVjdCBzbWNkX2dpZFxcdFxcdHBlZXJfZ2lkO1xcbiAzODA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0LyogUGVlciBHSUQgKHJlbW90ZSkgKi9cXG4gMzgxOlxcdFxcdFxcdFxcdHN0cnVjdCBzbWNkX2RldlxcdFxcdCpzbWNkO1xcbiAzODI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0LyogSVNNIGRldmljZSBmb3IgVkxBTiByZWcuICovXFxuIDM4MzpcXHRcXHRcXHRcXHR1OFxcdFxcdFxcdHBlZXJfc2h1dGRvd24gOiAxO1xcbiAzODQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0LyogcGVlciB0cmlnZ2VyZWQgc2h1dGRvd25uICovXFxuIDM4NTpcXHRcXHRcXHR9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDoyMjoyOS42MDYwMzQ4MjZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAyNjY4NzMzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBDcml0aWNhbCBNZW1vcnkgSW5pdGlhbGl6YXRpb24gRml4KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgc2VlIHNvbWV0aGluZyBpbXBvcnRhbnQuIFRoZSBjb2RlIG9yaWdpbmFsbHkgaGFkIGBtZW1zZXQoXHUwMDI2bGluay1cdTAwM2VsZ3ItXHUwMDNld3JfdHhfYnVmX3YyLCAwLCBzaXplb2YobGluay1cdTAwM2VsZ3ItXHUwMDNld3JfdHhfYnVmX3YyKSlgLiBSaWdodCwgYHdyX3R4X2J1Zl92MmAgaXMgKmFsc28qIGEgcG9pbnRlciwgYSBgc3RydWN0IHNtY193cl92Ml9idWYgKmAsIHNvIHRha2luZyBpdHMgYWRkcmVzcyBhbmQgemVyb2luZyB0aGUgKnBvaW50ZXIgaXRzZWxmKiBpcyBkZWZpbml0ZWx5IHdyb25nLiBUaGUgcGF0Y2ggaXMgY2hhbmdpbmcgaXQgdG8gYG1lbXNldChsaW5rLVx1MDAzZWxnci1cdTAwM2V3cl90eF9idWZfdjIsIDAsIHNpemVvZigqbGluay1cdTAwM2VsZ3ItXHUwMDNld3JfdHhfYnVmX3YyKSlgLiAgVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyB0aGlzIGlzIG5vdyBjb3JyZWN0bHkgemVyb2luZyB0aGUgYWN0dWFsIGB3cl90eF9idWZfdjJgIGJ1ZmZlciB0aGF0IHRoZSBwb2ludGVyIHJlZmVyZW5jZXMuXG5cbldhaXQgYSBtaW51dGUuLi4gaWYgdGhlIG9yaWdpbmFsIGNvZGUgd2FzIHplcm9pbmcgdGhlICpwb2ludGVyKiBhbmQgZXNzZW50aWFsbHkgY29ycnVwdGluZyBpdCwgdGhlbiB0aGF0IG1lYW5zIHRoZSBwb2ludGVyIHdvdWxkIGxpa2VseSBiZSBzZXQgdG8gYE5VTExgIChvciBzb21lIG90aGVyIGdhcmJhZ2UgdmFsdWUpLiBUaGF0IG1lYW5zIGFueSBzdWJzZXF1ZW50IGFjY2VzcyB0byBgbGluay1cdTAwM2VsZ3ItXHUwMDNld3JfdHhfYnVmX3YyYCBzaG91bGQgaGF2ZSB0cmlnZ2VyZWQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB3aGVyZSBgd3JfdHhfYnVmX3YyYCBpcyB1c2VkIHRvIGNvbmZpcm0gdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTI0OCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjIyOjMzLjYzMjcyNTE1NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1MTM1NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid3JfdHhfYnVmX3YyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX2NvcmUuaD0yODY9c3RydWN0IHNtY19saW5rX2dyb3VwIHtcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuaC0zMjItXFx0XFx0XFx0XFx0XFx0XFx0LyogV1IgdjIgcmVjdiBwYXlsb2FkIGJ1ZmZlciAqL1xcbm5ldC9zbWMvc21jX2NvcmUuaDozMjM6XFx0XFx0XFx0c3RydWN0IHNtY193cl92Ml9idWZcXHQqd3JfdHhfYnVmX3YyO1xcbm5ldC9zbWMvc21jX2NvcmUuaC0zMjQtXFx0XFx0XFx0XFx0XFx0XFx0LyogV1IgdjIgc2VuZCBwYXlsb2FkIGJ1ZmZlciAqL1xcbi0tXFxubmV0L3NtYy9zbWNfd3IuYz03Nz1zdGF0aWMgaW5saW5lIHZvaWQgc21jX3dyX3R4X3Byb2Nlc3NfY3FlKHN0cnVjdCBpYl93YyAqd2MpXFxuLS1cXG5uZXQvc21jL3NtY193ci5jLTEwMy1cXHRcXHQgICAgICAgc2l6ZW9mKCpsaW5rLVxcdTAwM2V3cl90eF92Ml9wZW5kKSk7XFxubmV0L3NtYy9zbWNfd3IuYzoxMDQ6XFx0XFx0bWVtc2V0KGxpbmstXFx1MDAzZWxnci1cXHUwMDNld3JfdHhfYnVmX3YyLCAwLFxcbm5ldC9zbWMvc21jX3dyLmM6MTA1OlxcdFxcdCAgICAgICBzaXplb2YoKmxpbmstXFx1MDAzZWxnci1cXHUwMDNld3JfdHhfYnVmX3YyKSk7XFxubmV0L3NtYy9zbWNfd3IuYy0xMDYtXFx0fSBlbHNlIHtcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmMtMTI0LVxcdFxcdFxcdCAgICAgICBzaXplb2YoKmxpbmstXFx1MDAzZXdyX3R4X3YyX3BlbmQpKTtcXG5uZXQvc21jL3NtY193ci5jOjEyNTpcXHRcXHRcXHRtZW1zZXQobGluay1cXHUwMDNlbGdyLVxcdTAwM2V3cl90eF9idWZfdjIsIDAsXFxubmV0L3NtYy9zbWNfd3IuYzoxMjY6XFx0XFx0XFx0ICAgICAgIHNpemVvZigqbGluay1cXHUwMDNlbGdyLVxcdTAwM2V3cl90eF9idWZfdjIpKTtcXG5uZXQvc21jL3NtY193ci5jLTEyNy1cXHRcXHR9XFxuLS1cXG5uZXQvc21jL3NtY193ci5jPTI2MD1pbnQgc21jX3dyX3R4X2dldF92Ml9zbG90KHN0cnVjdCBzbWNfbGluayAqbGluayxcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmMtMjgxLVxcdHdyX2liLVxcdTAwM2V3cl9pZCA9IHdyX2lkO1xcbm5ldC9zbWMvc21jX3dyLmM6MjgyOlxcdCp3cl9idWYgPSBsaW5rLVxcdTAwM2VsZ3ItXFx1MDAzZXdyX3R4X2J1Zl92MjtcXG5uZXQvc21jL3NtY193ci5jLTI4My1cXHQqd3JfcGVuZF9wcml2ID0gXFx1MDAyNndyX3BlbmQtXFx1MDAzZXByaXY7XFxuLS1cXG5uZXQvc21jL3NtY193ci5jPTI4Nz1pbnQgc21jX3dyX3R4X3B1dF9zbG90KHN0cnVjdCBzbWNfbGluayAqbGluayxcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmMtMzA4LVxcdFxcdCAgICAgICBzaXplb2YoKmxpbmstXFx1MDAzZXdyX3R4X3YyX3BlbmQpKTtcXG5uZXQvc21jL3NtY193ci5jOjMwOTpcXHRcXHRtZW1zZXQobGluay1cXHUwMDNlbGdyLVxcdTAwM2V3cl90eF9idWZfdjIsIDAsXFxubmV0L3NtYy9zbWNfd3IuYzozMTA6XFx0XFx0ICAgICAgIHNpemVvZigqbGluay1cXHUwMDNlbGdyLVxcdTAwM2V3cl90eF9idWZfdjIpKTtcXG5uZXQvc21jL3NtY193ci5jLTMxMS1cXHRcXHRyZXR1cm4gMTtcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmM9Njk4PXZvaWQgc21jX3dyX2ZyZWVfbGdyX21lbShzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncilcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmMtNzA0LVxcdGxnci1cXHUwMDNld3JfcnhfYnVmX3YyID0gTlVMTDtcXG5uZXQvc21jL3NtY193ci5jOjcwNTpcXHRrZnJlZShsZ3ItXFx1MDAzZXdyX3R4X2J1Zl92Mik7XFxubmV0L3NtYy9zbWNfd3IuYzo3MDY6XFx0bGdyLVxcdTAwM2V3cl90eF9idWZfdjIgPSBOVUxMO1xcbm5ldC9zbWMvc21jX3dyLmMtNzA3LX1cXG4tLVxcbm5ldC9zbWMvc21jX3dyLmM9NzQxPWludCBzbWNfd3JfYWxsb2NfbGdyX21lbShzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncilcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmMtNzQ4LVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm5ldC9zbWMvc21jX3dyLmM6NzQ5OlxcdGxnci1cXHUwMDNld3JfdHhfYnVmX3YyID0ga3phbGxvYyhTTUNfV1JfQlVGX1YyX1NJWkUsIEdGUF9LRVJORUwpO1xcbm5ldC9zbWMvc21jX3dyLmM6NzUwOlxcdGlmICghbGdyLVxcdTAwM2V3cl90eF9idWZfdjIpIHtcXG5uZXQvc21jL3NtY193ci5jLTc1MS1cXHRcXHRrZnJlZShsZ3ItXFx1MDAzZXdyX3J4X2J1Zl92Mik7XFxuLS1cXG5uZXQvc21jL3NtY193ci5jPTg3MT1pbnQgc21jX3dyX2NyZWF0ZV9saW5rKHN0cnVjdCBzbWNfbGluayAqbG5rKVxcbi0tXFxubmV0L3NtYy9zbWNfd3IuYy04OTctXFx0XFx0bG5rLVxcdTAwM2V3cl90eF92Ml9kbWFfYWRkciA9IGliX2RtYV9tYXBfc2luZ2xlKGliZGV2LFxcbm5ldC9zbWMvc21jX3dyLmM6ODk4OlxcdFxcdFxcdGxuay1cXHUwMDNlbGdyLVxcdTAwM2V3cl90eF9idWZfdjIsIFNNQ19XUl9CVUZfVjJfU0laRSxcXG5uZXQvc21jL3NtY193ci5jLTg5OS1cXHRcXHRcXHRETUFfVE9fREVWSUNFKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjI6MzMuNjc4MjQyOTI5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5NTQ3NjI2ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFNNQyBXcml0ZSBUcmFuc2FjdGlvbiBCdWZmZXIqKlxuXG5Pa2F5LCBzbyBgc21jX3dyX3R4X2dldF92Ml9zbG90YCBpcyByZXR1cm5pbmcgYGxpbmstXHUwMDNlbGdyLVx1MDAzZXdyX3R4X2J1Zl92MmAgdGhyb3VnaCBgKndyX2J1ZmAuIFRoZSBjYWxsZXIgdGhlbiBwb3B1bGF0ZXMgdGhpcyBidWZmZXIgYW5kIHNlbmRzIGl0LiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGlzOiBpZiBgc21jX3dyX3R4X3B1dF9zbG90YCBpcyBtaXN0YWtlbmx5IHplcm9pbmcgb3V0IHRoZSAqcG9pbnRlciogYGxpbmstXHUwMDNlbGdyLVx1MDAzZXdyX3R4X2J1Zl92MmAsIHRoZSBuZXh0IGNhbGwgdG8gYHNtY193cl90eF9nZXRfdjJfc2xvdGAgaXMgZ29pbmcgdG8gcmV0dXJuIGBOVUxMYCB2aWEgYCp3cl9idWZgLiBUaGVuLCB0aGUgY2FsbGVyIHdpbGwgdHJ5IHRvIGRlcmVmZXJlbmNlIGEgYE5VTExgIHBvaW50ZXIsIHdoaWNoIGlzIGEgY2xhc3NpYywgZWFzaWx5IGRldGVjdGFibGUgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIGFuZCBhIGtlcm5lbCBjcmFzaC5cblxuQnV0IHdhaXQsIGhvbGQgb24uIElzIGl0IHBvc3NpYmxlIHRoYXQgYGxpbmstXHUwMDNlbGdyLVx1MDAzZXdyX3R4X2J1Zl92MmAgKmlzbid0KiB6ZXJvZWQsIGFuZCB3ZSdyZSBwb3RlbnRpYWxseSBzZW5kaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBObywgdGhhdCdzIG5vdCBsaWtlbHkuIEkgcmVjYWxsIGl0J3MgYWxsb2NhdGVkIGluIGBzbWNfd3JfYWxsb2NfbGdyX21lbWAgdXNpbmcgYGt6YWxsb2MoU01DX1dSX0JVRl9WMl9TSVpFLCBHRlBfS0VSTkVMKTtgLiBUaGUgYGt6YWxsb2NgIGZ1bmN0aW9uIGd1YXJhbnRlZXMgdGhlIG1lbW9yeSBpcyB6ZXJvZWQgb3V0IGluaXRpYWxseS4gU28sIHRoZSBidWZmZXIgaXMgYWxsb2NhdGVkLCB6ZXJvZWQsIHVzZWQgdG8gdHJhbnNtaXQgZGF0YSwgYW5kIHRoZW4gYHNtY193cl90eF9wdXRfc2xvdGAgaXMgY2FsbGVkIHRvIGNsZWFyIGl0IGZvciBzdWJzZXF1ZW50IHVzZS4gVGhlIHByb2JsZW0gaXMgdGhhdCB0aGUgY2xlYXJpbmcgbWF5IGJlIGZhaWxpbmcuIFRoZSBidWcgaXMgdGhhdCBpdCBpcyBzdXBwb3NlZCB0byBjbGVhciB0aGUgKmJ1ZmZlciogYnV0IGl0IGlzIGNsZWFyaW5nIHRoZSAqcG9pbnRlciosIHdoaWNoIHdvdWxkIHJlc3VsdCBpbiBhIE5VTEwgcG9pbnRlci4gVGhlIHBvaW50ZXIgYmVjb21lcyBOVUxMLlxuXG5TbywgaGVyZSdzIHRoZSBzZXF1ZW5jZTogYHNtY193cl90eF9nZXRfdjJfc2xvdGAgcmV0dXJucyBhIHZhbGlkIHBvaW50ZXIgKGluaXRpYWxseSB6ZXJvZWQpLiBUaGUgY2FsbGVyIHVzZXMgaXQsIHRoZW4gYHNtY193cl90eF9wdXRfc2xvdGAgZWZmZWN0aXZlbHkgdHVybnMgaXQgaW50byBhIGBOVUxMYCBwb2ludGVyLiBUaGUgbmV4dCBjYWxsIHRvIGBzbWNfd3JfdHhfZ2V0X3YyX3Nsb3RgIHJldHVybnMgYE5VTExgLCBhbmQgdGhlIGNhbGxlciB0aGVuIHRyaWVzIHRvIHdyaXRlIHRvIGl0LCBjYXVzaW5nIGEgY3Jhc2guXG5cbkkgbmVlZCB0byBpbW1lZGlhdGVseSBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHNtY193cl90eF9wdXRfc2xvdGAuIFRoYXQncyB3aGVyZSB0aGUgcHJvYmxlbSBhbG1vc3QgY2VydGFpbmx5IGxpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDAxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjIyOjQwLjYzMzAwNzk5MloiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc21jL3NtY193ci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4NyxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI4NzpcXHRpbnQgc21jX3dyX3R4X3B1dF9zbG90KHN0cnVjdCBzbWNfbGluayAqbGluayxcXG4gMjg4OlxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRfcHJpdiAqd3JfcGVuZF9wcml2KVxcbiAyODk6XFx0e1xcbiAyOTA6XFx0XFx0c3RydWN0IHNtY193cl90eF9wZW5kICpwZW5kO1xcbiAyOTE6XFx0XFxuIDI5MjpcXHRcXHRwZW5kID0gY29udGFpbmVyX29mKHdyX3BlbmRfcHJpdiwgc3RydWN0IHNtY193cl90eF9wZW5kLCBwcml2KTtcXG4gMjkzOlxcdFxcdGlmIChwZW5kLVxcdTAwM2VpZHggXFx1MDAzYyBsaW5rLVxcdTAwM2V3cl90eF9jbnQpIHtcXG4gMjk0OlxcdFxcdFxcdHUzMiBpZHggPSBwZW5kLVxcdTAwM2VpZHg7XFxuIDI5NTpcXHRcXG4gMjk2OlxcdFxcdFxcdC8qIGNsZWFyIHRoZSBmdWxsIHN0cnVjdCBzbWNfd3JfdHhfcGVuZCBpbmNsdWRpbmcgLnByaXYgKi9cXG4gMjk3OlxcdFxcdFxcdG1lbXNldChcXHUwMDI2bGluay1cXHUwMDNld3JfdHhfcGVuZHNbaWR4XSwgMCxcXG4gMjk4OlxcdFxcdFxcdCAgICAgICBzaXplb2YobGluay1cXHUwMDNld3JfdHhfcGVuZHNbaWR4XSkpO1xcbiAyOTk6XFx0XFx0XFx0bWVtc2V0KFxcdTAwMjZsaW5rLVxcdTAwM2V3cl90eF9idWZzW2lkeF0sIDAsXFxuIDMwMDpcXHRcXHRcXHQgICAgICAgc2l6ZW9mKGxpbmstXFx1MDAzZXdyX3R4X2J1ZnNbaWR4XSkpO1xcbiAzMDE6XFx0XFx0XFx0dGVzdF9hbmRfY2xlYXJfYml0KGlkeCwgbGluay1cXHUwMDNld3JfdHhfbWFzayk7XFxuIDMwMjpcXHRcXHRcXHR3YWtlX3VwKFxcdTAwMjZsaW5rLVxcdTAwM2V3cl90eF93YWl0KTtcXG4gMzAzOlxcdFxcdFxcdHJldHVybiAxO1xcbiAzMDQ6XFx0XFx0fSBlbHNlIGlmIChsaW5rLVxcdTAwM2VsZ3ItXFx1MDAzZXNtY192ZXJzaW9uID09IFNNQ19WMiBcXHUwMDI2XFx1MDAyNlxcbiAzMDU6XFx0XFx0XFx0ICAgcGVuZC1cXHUwMDNlaWR4ID09IGxpbmstXFx1MDAzZXdyX3R4X2NudCkge1xcbiAzMDY6XFx0XFx0XFx0LyogTGFyZ2UgdjIgYnVmZmVyICovXFxuIDMwNzpcXHRcXHRcXHRtZW1zZXQobGluay1cXHUwMDNld3JfdHhfdjJfcGVuZCwgMCxcXG4gMzA4OlxcdFxcdFxcdCAgICAgICBzaXplb2YoKmxpbmstXFx1MDAzZXdyX3R4X3YyX3BlbmQpKTtcXG4gMzA5OlxcdFxcdFxcdG1lbXNldChsaW5rLVxcdTAwM2VsZ3ItXFx1MDAzZXdyX3R4X2J1Zl92MiwgMCxcXG4gMzEwOlxcdFxcdFxcdCAgICAgICBzaXplb2YoKmxpbmstXFx1MDAzZWxnci1cXHUwMDNld3JfdHhfYnVmX3YyKSk7XFxuIDMxMTpcXHRcXHRcXHRyZXR1cm4gMTtcXG4gMzEyOlxcdFxcdH1cXG4gMzEzOlxcdFxcbiAzMTQ6XFx0XFx0cmV0dXJuIDA7XFxuIDMxNTpcXHR9XFxuIDMxNjpcXHRcXG4gMzE3OlxcdC8qIFNlbmQgcHJlcGFyZWQgV1Igc2xvdCB2aWEgaWJfcG9zdF9zZW5kLlxcbiAzMTg6XFx0ICogQHByaXY6IHBvaW50ZXIgdG8gc21jX3dyX3R4X3BlbmRfcHJpdiBpZGVudGlmeWluZyBwcmVwYXJlZCBtZXNzYWdlIGJ1ZmZlclxcbiAzMTk6XFx0ICovXFxuIDMyMDpcXHRpbnQgc21jX3dyX3R4X3NlbmQoc3RydWN0IHNtY19saW5rICpsaW5rLCBzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRfcHJpdiAqcHJpdilcXG4gMzIxOlxcdHtcXG4gMzIyOlxcdFxcdHN0cnVjdCBzbWNfd3JfdHhfcGVuZCAqcGVuZDtcXG4gMzIzOlxcdFxcdGludCByYztcXG4gMzI0OlxcdFxcbiAzMjU6XFx0XFx0aWJfcmVxX25vdGlmeV9jcShsaW5rLVxcdTAwM2VzbWNpYmRldi1cXHUwMDNlcm9jZV9jcV9zZW5kLFxcbiAzMjY6XFx0XFx0XFx0XFx0IElCX0NRX05FWFRfQ09NUCB8IElCX0NRX1JFUE9SVF9NSVNTRURfRVZFTlRTKTtcXG4gMzI3OlxcdFxcdHBlbmQgPSBjb250YWluZXJfb2YocHJpdiwgc3RydWN0IHNtY193cl90eF9wZW5kLCBwcml2KTtcXG4gMzI4OlxcdFxcdHJjID0gaWJfcG9zdF9zZW5kKGxpbmstXFx1MDAzZXJvY2VfcXAsIFxcdTAwMjZsaW5rLVxcdTAwM2V3cl90eF9pYnNbcGVuZC1cXHUwMDNlaWR4XSwgTlVMTCk7XFxuIDMyOTpcXHRcXHRpZiAocmMpIHtcXG4gMzMwOlxcdFxcdFxcdHNtY193cl90eF9wdXRfc2xvdChsaW5rLCBwcml2KTtcXG4gMzMxOlxcdFxcdFxcdHNtY3JfbGlua19kb3duX2NvbmRfc2NoZWQobGluayk7XFxuIDMzMjpcXHRcXHR9XFxuIDMzMzpcXHRcXHRyZXR1cm4gcmM7XFxuIDMzNDpcXHR9XFxuIDMzNTpcXHRcXG4gMzM2OlxcdGludCBzbWNfd3JfdHhfdjJfc2VuZChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHN0cnVjdCBzbWNfd3JfdHhfcGVuZF9wcml2ICpwcml2LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDoyMjo0MC42MzMxMDYwNDJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ5NzgxNjI5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEMgQ29kZSBTbmlwcGV0KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGF0IGBtZW1zZXRgIGNhbGwgaW1tZWRpYXRlbHkgZ3JhYnMgbXkgYXR0ZW50aW9uLiBJIHNlZSB0aGF0IHRoZSBvcmlnaW5hbCBjb2RlIHNuaXBwZXQgaW52b2x2ZXMgdHdvIGBtZW1zZXRgIG9wZXJhdGlvbnMsIHRhcmdldGluZyBgbGluay1cdTAwM2V3cl90eF92Ml9wZW5kYCBhbmQgYGxpbmstXHUwMDNlbGdyLVx1MDAzZXdyX3R4X2J1Zl92MmAuIFRoZSBrZXkgaGVyZSwgYW5kIEknbSBzdXJlIEkgZG9uJ3QgbmVlZCB0byBwb2ludCB0aGlzIG91dCwgaXMgdW5kZXJzdGFuZGluZyB0aGUgZGF0YSB0eXBlcyBpbnZvbHZlZC5cblxuSSByZWNvZ25pemUgdGhhdCBib3RoIGBsaW5rLVx1MDAzZXdyX3R4X3YyX3BlbmRgIGFuZCBgbGluay1cdTAwM2VsZ3ItXHUwMDNld3JfdHhfYnVmX3YyYCBhcmUgKnBvaW50ZXJzKi4gVGhlIGNvZGUgaXMgY2xlYXJseSB6ZXJvaW5nIHRoZSAqbWVtb3J5IGFkZHJlc3MqIG9mIHRoZSBwb2ludGVycy4gYHNpemVvZigpYCB3aWxsIHJldHVybiB0aGUgc2l6ZSBvZiB0aGUgKnBvaW50ZXIgaXRzZWxmKiwgd2hpY2ggaXMgOCBieXRlcyBvbiBhIDY0LWJpdCBhcmNoaXRlY3R1cmUg4oCTIHN0YW5kYXJkIHN0dWZmLiBUaGVyZWZvcmUsIHRoZSBlZmZlY3Qgb2YgdGhlc2UgYG1lbXNldGAgY2FsbHMgaXMgdG8gZWZmZWN0aXZlbHkgbnVsbGlmeSB0aG9zZSBwb2ludGVycy5cblxuU2luY2UgdGhlc2UgcG9pbnRlcnMgYXJlIGluaXRpYWxpemVkIHRvIE5VTEwsIHRoZW4gaXQgd2lsbCBoYXZlIGltcGxpY2F0aW9ucyB3aGVuIHRoZSBgc21jX3dyX3R4X2dldF92Ml9zbG90YCBpcyBjYWxsZWQsIGFuZCBJIG5lZWQgdG8gcmV2aWV3IHRoaXMgZnVuY3Rpb24gbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4NTIsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDoyMjo0NS4xMzA5MjUwNDNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0ODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zbWMvc21jX3dyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjYwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjYwOlxcdGludCBzbWNfd3JfdHhfZ2V0X3YyX3Nsb3Qoc3RydWN0IHNtY19saW5rICpsaW5rLFxcbiAyNjE6XFx0XFx0XFx0XFx0ICBzbWNfd3JfdHhfaGFuZGxlciBoYW5kbGVyLFxcbiAyNjI6XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc21jX3dyX3YyX2J1ZiAqKndyX2J1ZixcXG4gMjYzOlxcdFxcdFxcdFxcdCAgc3RydWN0IHNtY193cl90eF9wZW5kX3ByaXYgKip3cl9wZW5kX3ByaXYpXFxuIDI2NDpcXHR7XFxuIDI2NTpcXHRcXHRzdHJ1Y3Qgc21jX3dyX3R4X3BlbmQgKndyX3BlbmQ7XFxuIDI2NjpcXHRcXHRzdHJ1Y3QgaWJfc2VuZF93ciAqd3JfaWI7XFxuIDI2NzpcXHRcXHR1NjQgd3JfaWQ7XFxuIDI2ODpcXHRcXG4gMjY5OlxcdFxcdGlmIChsaW5rLVxcdTAwM2V3cl90eF92Ml9wZW5kLVxcdTAwM2VpZHggPT0gbGluay1cXHUwMDNld3JfdHhfY250KVxcbiAyNzA6XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gMjcxOlxcdFxcbiAyNzI6XFx0XFx0KndyX2J1ZiA9IE5VTEw7XFxuIDI3MzpcXHRcXHQqd3JfcGVuZF9wcml2ID0gTlVMTDtcXG4gMjc0OlxcdFxcdHdyX2lkID0gc21jX3dyX3R4X2dldF9uZXh0X3dyX2lkKGxpbmspO1xcbiAyNzU6XFx0XFx0d3JfcGVuZCA9IGxpbmstXFx1MDAzZXdyX3R4X3YyX3BlbmQ7XFxuIDI3NjpcXHRcXHR3cl9wZW5kLVxcdTAwM2V3cl9pZCA9IHdyX2lkO1xcbiAyNzc6XFx0XFx0d3JfcGVuZC1cXHUwMDNlaGFuZGxlciA9IGhhbmRsZXI7XFxuIDI3ODpcXHRcXHR3cl9wZW5kLVxcdTAwM2VsaW5rID0gbGluaztcXG4gMjc5OlxcdFxcdHdyX3BlbmQtXFx1MDAzZWlkeCA9IGxpbmstXFx1MDAzZXdyX3R4X2NudDtcXG4gMjgwOlxcdFxcdHdyX2liID0gbGluay1cXHUwMDNld3JfdHhfdjJfaWI7XFxuIDI4MTpcXHRcXHR3cl9pYi1cXHUwMDNld3JfaWQgPSB3cl9pZDtcXG4gMjgyOlxcdFxcdCp3cl9idWYgPSBsaW5rLVxcdTAwM2VsZ3ItXFx1MDAzZXdyX3R4X2J1Zl92MjtcXG4gMjgzOlxcdFxcdCp3cl9wZW5kX3ByaXYgPSBcXHUwMDI2d3JfcGVuZC1cXHUwMDNlcHJpdjtcXG4gMjg0OlxcdFxcdHJldHVybiAwO1xcbiAyODU6XFx0fVxcbiAyODY6XFx0XFxuIDI4NzpcXHRpbnQgc21jX3dyX3R4X3B1dF9zbG90KHN0cnVjdCBzbWNfbGluayAqbGluayxcXG4gMjg4OlxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRfcHJpdiAqd3JfcGVuZF9wcml2KVxcbiAyODk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDoyMjo0NS4xMzEwMzExNTJaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ2NzA1ODkyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbW1lZGlhdGUgQnVnIEFuYWx5c2lzKipcblxuT2theSwgaGVyZSdzIHRoZSBkZWFsLiBJJ3ZlIGJlZW4gc3RhcmluZyBhdCB0aGlzIGNvZGUsIGFuZCBpdCdzIGhpdHRpbmcgbWUgcmlnaHQgYmV0d2VlbiB0aGUgZXllcy4gSWYgYGxpbmstXHUwMDNld3JfdHhfdjJfcGVuZGAgaXMgZXZlciB6ZXJv4oCUbWVhbmluZyBpdCdzIHBvaW50aW5nIHRvIG5vdGhpbmcsIGl0J3MgTlVMTOKAlHRoZW4gdGhhdCBsaW5lIGlzIGdvaW5nIHRvIGJsb3cgdXAuIFRyeWluZyB0byBhY2Nlc3MgYGxpbmstXHUwMDNld3JfdHhfdjJfcGVuZC1cdTAwM2VpZHhgIHdoZW4gdGhhdCBwb2ludGVyIGlzIGdhcmJhZ2UgaXMgYSBjbGFzc2ljIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4gQmFuZyEgSW5zdGFudCBjcmFzaC4gU28sIHRoZSBjb3JlIGlzc3VlIGlzIHN0cmFpZ2h0Zm9yd2FyZDogd2UncmUgZGVyZWZlcmVuY2luZyBhIE5VTEwgcG9pbnRlci5cblxuQnV0IEknbSBub3QganVzdCBzdG9wcGluZyBhdCB0aGUgZWFzeSBzdHVmZi4gSSBuZWVkIHRvIGtub3cgdGhlIGltcGxpY2F0aW9ucy4gSXMgdGhlcmUgYW55IGNoYW5jZSB0aGlzIGlzIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgdGhhdCBjb3VsZCBsZWFrIGluZm9ybWF0aW9uPyBJZiB0aGUgcG9pbnRlciBpcyB6ZXJvZWQsIGl0IGp1c3QgY3Jhc2hlcy4gQW5kIGhvdyBkb2VzIHRoYXQgZnVuY3Rpb24gYHNtY193cl90eF9wcm9jZXNzX2NxZWAgcmVsYXRlIHRvIGBzbWNfd3JfdHhfcHV0X3Nsb3RgP1xuXG5cbiIsIklucHV0VG9rZW5zIjoxMzk2OCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjIyOjQ5LjU5ODA5MjQ5OVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDc1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NtYy9zbWNfd3IuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NyxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA3NzpcXHRzdGF0aWMgaW5saW5lIHZvaWQgc21jX3dyX3R4X3Byb2Nlc3NfY3FlKHN0cnVjdCBpYl93YyAqd2MpXFxuICA3ODpcXHR7XFxuICA3OTpcXHRcXHRzdHJ1Y3Qgc21jX3dyX3R4X3BlbmQgcG5kX3NuZDtcXG4gIDgwOlxcdFxcdHN0cnVjdCBzbWNfbGluayAqbGluaztcXG4gIDgxOlxcdFxcdHUzMiBwbmRfc25kX2lkeDtcXG4gIDgyOlxcdFxcbiAgODM6XFx0XFx0bGluayA9IHdjLVxcdTAwM2VxcC1cXHUwMDNlcXBfY29udGV4dDtcXG4gIDg0OlxcdFxcbiAgODU6XFx0XFx0aWYgKHdjLVxcdTAwM2VvcGNvZGUgPT0gSUJfV0NfUkVHX01SKSB7XFxuICA4NjpcXHRcXHRcXHRpZiAod2MtXFx1MDAzZXN0YXR1cylcXG4gIDg3OlxcdFxcdFxcdFxcdGxpbmstXFx1MDAzZXdyX3JlZ19zdGF0ZSA9IEZBSUxFRDtcXG4gIDg4OlxcdFxcdFxcdGVsc2VcXG4gIDg5OlxcdFxcdFxcdFxcdGxpbmstXFx1MDAzZXdyX3JlZ19zdGF0ZSA9IENPTkZJUk1FRDtcXG4gIDkwOlxcdFxcdFxcdHNtY193cl93YWtldXBfcmVnX3dhaXQobGluayk7XFxuICA5MTpcXHRcXHRcXHRyZXR1cm47XFxuICA5MjpcXHRcXHR9XFxuICA5MzpcXHRcXG4gIDk0OlxcdFxcdHBuZF9zbmRfaWR4ID0gc21jX3dyX3R4X2ZpbmRfcGVuZGluZ19pbmRleChsaW5rLCB3Yy1cXHUwMDNld3JfaWQpO1xcbiAgOTU6XFx0XFx0aWYgKHBuZF9zbmRfaWR4ID09IGxpbmstXFx1MDAzZXdyX3R4X2NudCkge1xcbiAgOTY6XFx0XFx0XFx0aWYgKGxpbmstXFx1MDAzZWxnci1cXHUwMDNlc21jX3ZlcnNpb24gIT0gU01DX1YyIHx8XFxuICA5NzpcXHRcXHRcXHQgICAgbGluay1cXHUwMDNld3JfdHhfdjJfcGVuZC1cXHUwMDNld3JfaWQgIT0gd2MtXFx1MDAzZXdyX2lkKVxcbiAgOTg6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiAgOTk6XFx0XFx0XFx0bGluay1cXHUwMDNld3JfdHhfdjJfcGVuZC1cXHUwMDNld2Nfc3RhdHVzID0gd2MtXFx1MDAzZXN0YXR1cztcXG4gMTAwOlxcdFxcdFxcdG1lbWNweShcXHUwMDI2cG5kX3NuZCwgbGluay1cXHUwMDNld3JfdHhfdjJfcGVuZCwgc2l6ZW9mKHBuZF9zbmQpKTtcXG4gMTAxOlxcdFxcdFxcdC8qIGNsZWFyIHRoZSBmdWxsIHN0cnVjdCBzbWNfd3JfdHhfcGVuZCBpbmNsdWRpbmcgLnByaXYgKi9cXG4gMTAyOlxcdFxcdFxcdG1lbXNldChsaW5rLVxcdTAwM2V3cl90eF92Ml9wZW5kLCAwLFxcbiAxMDM6XFx0XFx0XFx0ICAgICAgIHNpemVvZigqbGluay1cXHUwMDNld3JfdHhfdjJfcGVuZCkpO1xcbiAxMDQ6XFx0XFx0XFx0bWVtc2V0KGxpbmstXFx1MDAzZWxnci1cXHUwMDNld3JfdHhfYnVmX3YyLCAwLFxcbiAxMDU6XFx0XFx0XFx0ICAgICAgIHNpemVvZigqbGluay1cXHUwMDNlbGdyLVxcdTAwM2V3cl90eF9idWZfdjIpKTtcXG4gMTA2OlxcdFxcdH0gZWxzZSB7XFxuIDEwNzpcXHRcXHRcXHRsaW5rLVxcdTAwM2V3cl90eF9wZW5kc1twbmRfc25kX2lkeF0ud2Nfc3RhdHVzID0gd2MtXFx1MDAzZXN0YXR1cztcXG4gMTA4OlxcdFxcdFxcdGlmIChsaW5rLVxcdTAwM2V3cl90eF9wZW5kc1twbmRfc25kX2lkeF0uY29tcGxfcmVxdWVzdGVkKVxcbiAxMDk6XFx0XFx0XFx0XFx0Y29tcGxldGUoXFx1MDAyNmxpbmstXFx1MDAzZXdyX3R4X2NvbXBsW3BuZF9zbmRfaWR4XSk7XFxuIDExMDpcXHRcXHRcXHRtZW1jcHkoXFx1MDAyNnBuZF9zbmQsIFxcdTAwMjZsaW5rLVxcdTAwM2V3cl90eF9wZW5kc1twbmRfc25kX2lkeF0sXFxuIDExMTpcXHRcXHRcXHQgICAgICAgc2l6ZW9mKHBuZF9zbmQpKTtcXG4gMTEyOlxcdFxcdFxcdC8qIGNsZWFyIHRoZSBmdWxsIHN0cnVjdCBzbWNfd3JfdHhfcGVuZCBpbmNsdWRpbmcgLnByaXYgKi9cXG4gMTEzOlxcdFxcdFxcdG1lbXNldChcXHUwMDI2bGluay1cXHUwMDNld3JfdHhfcGVuZHNbcG5kX3NuZF9pZHhdLCAwLFxcbiAxMTQ6XFx0XFx0XFx0ICAgICAgIHNpemVvZihsaW5rLVxcdTAwM2V3cl90eF9wZW5kc1twbmRfc25kX2lkeF0pKTtcXG4gMTE1OlxcdFxcdFxcdG1lbXNldChcXHUwMDI2bGluay1cXHUwMDNld3JfdHhfYnVmc1twbmRfc25kX2lkeF0sIDAsXFxuIDExNjpcXHRcXHRcXHQgICAgICAgc2l6ZW9mKGxpbmstXFx1MDAzZXdyX3R4X2J1ZnNbcG5kX3NuZF9pZHhdKSk7XFxuIDExNzpcXHRcXHRcXHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChwbmRfc25kX2lkeCwgbGluay1cXHUwMDNld3JfdHhfbWFzaykpXFxuIDExODpcXHRcXHRcXHRcXHRyZXR1cm47XFxuIDExOTpcXHRcXHR9XFxuIDEyMDpcXHRcXG4gMTIxOlxcdFxcdGlmICh3Yy1cXHUwMDNlc3RhdHVzKSB7XFxuIDEyMjpcXHRcXHRcXHRpZiAobGluay1cXHUwMDNlbGdyLVxcdTAwM2VzbWNfdmVyc2lvbiA9PSBTTUNfVjIpIHtcXG4gMTIzOlxcdFxcdFxcdFxcdG1lbXNldChsaW5rLVxcdTAwM2V3cl90eF92Ml9wZW5kLCAwLFxcbiAxMjQ6XFx0XFx0XFx0XFx0ICAgICAgIHNpemVvZigqbGluay1cXHUwMDNld3JfdHhfdjJfcGVuZCkpO1xcbiAxMjU6XFx0XFx0XFx0XFx0bWVtc2V0KGxpbmstXFx1MDAzZWxnci1cXHUwMDNld3JfdHhfYnVmX3YyLCAwLFxcbiAxMjY6XFx0XFx0XFx0XFx0ICAgICAgIHNpemVvZigqbGluay1cXHUwMDNlbGdyLVxcdTAwM2V3cl90eF9idWZfdjIpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjI6NDkuNTk4MjA1Nzg5WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMTM1Njk3NTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU01DIFdyaXRlIFRyYW5zYWN0aW9uIENvZGUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEluIGBzbWNfd3JfdHhfcHJvY2Vzc19jcWVgLCBJIHNlZSB0aGUgY29kZSBleHBsaWNpdGx5IHplcm9pbmcgb3V0IGBsaW5rLVx1MDAzZXdyX3R4X3YyX3BlbmRgIGFuZCBgbGluay1cdTAwM2VsZ3ItXHUwMDNld3JfdHhfYnVmX3YyYC4gVGhhdCdzIGdvb2Q7IGl0IGNvbmZpcm1zIHRoYXQgdGhlIGluaXRpYWwgdGhvdWdodCBhYm91dCB0aGUgaXNzdWUgaW4gdGhhdCBmdW5jdGlvbiBpcyBjb3JyZWN0LCBhbmQgbm90IHRoZSBzb3VyY2Ugb2YgdGhlIHByb2JsZW0uXG5cblRoZSBidWcsIHRoZW4sIHNlZW1zIHRvIHJlc2lkZSBzcXVhcmVseSBpbiBgc21jX3dyX3R4X3B1dF9zbG90YC4gVGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkIHdoZW4gYGliX3Bvc3Rfc2VuZGAgZmFpbHMsIG9yIHdoZW4gYSBzbG90IGlzIHJldHVybmVkIHdpdGhvdXQgc2VuZGluZy4gSXQgemVyb2VzIGEgcG9pbnRlciwgYW5kIGFmdGVyIHRoYXQsIHRoZSBwb2ludGVyIGlzIHNldCB0byBOVUxMLiBUaGUgaW1wbGljYXRpb24gaXMgdGhhdCBzdWJzZXF1ZW50IGNhbGxzIHRvIGBzbWNfd3JfdHhfZ2V0X3YyX3Nsb3RgIG9yIGBzbWNfd3JfdHhfcHJvY2Vzc19jcWVgIHdpbGwgdGhlbiBkZXJlZmVyZW5jZSBhIE5VTEwgcG9pbnRlci4gQSBjbGFzc2ljLCBuYXN0eSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIEdvdCBpdC5cblxuTm93LCB0aGF0IG90aGVyIHBhcnQgb2YgdGhlIHBhdGNoLi4uIHRoZSBvbmUgdGhhdCBhbHRlcnMgdGhlIHdhaXRpbmcgbWVjaGFuaXNtLiBXaHkgc3dpdGNoIGZyb20gYHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0YCB0byB0aGF0IG9wZW4tY29kZWQgd2FpdCBsb29wIHdpdGggYHByZXBhcmVfdG9fd2FpdF9leGNsdXNpdmVgPyBBaCwgcmlnaHQuIGB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dGAgdXNlcyBgcHJlcGFyZV90b193YWl0YCwgd2hpY2ggaXNuJ3QgZXhjbHVzaXZlLiBUaGlzIG1lYW5zIHdoZW4gYSBzbG90ICpkb2VzKiBiZWNvbWUgZnJlZSwgbXVsdGlwbGUgdGhyZWFkcyBjb3VsZCBnZXQgd29rZW4gdXAg4oCTIGEgXCJ0aHVuZGVyaW5nIGhlcmRcIiBzY2VuYXJpby4gYHByZXBhcmVfdG9fd2FpdF9leGNsdXNpdmVgLCBob3dldmVyLCB3YWtlcyAqb25seSBvbmUqIHdhaXRpbmcgdGhyZWFkLiBUaGlzIGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBwcmV2ZW50aW5nIHRoZSB3YXN0ZSBvZiBhIHRodW5kZXJpbmcgaGVyZCwgYW5kIGFsc28gbWFrZXMgdGhlIGNvZGUgbW9yZSByb2J1c3QgYWdhaW5zdCByYWNlIGNvbmRpdGlvbnMuIEl0J3MgYSBjb25jdXJyZW5jeSBpbXByb3ZlbWVudCwgcmVhbGx5LCBub3QgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgSSB0aG91Z2h0IGFib3V0LlxuXG5IYW5nIG9uLiBMZXQncyBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIHNvbWV0aGluZy4gSWYgd2UgKndlcmUqIHVzaW5nIGB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dGAsIG11bHRpcGxlIHRocmVhZHMgY291bGQgd2FrZSB1cCwgYW5kIHRoZW4gYHNtY193cl90eF9nZXRfZnJlZV9zbG90X2luZGV4YCBtaWdodCBnaXZlIHRoZSBzYW1lIGluZGV4IHRvIG11bHRpcGxlIHRocmVhZHMuIEJ1dC4uLiB3YWl0LiBgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RfaW5kZXhgIHVzZXMgYHRlc3RfYW5kX3NldF9iaXRgLiBUaGF0ICpzaG91bGQqIGVuc3VyZSBhdG9taWNpdHkgYW5kIHByZXZlbnQgdGhlIHJhY2UuIFNvLCBubywgdGhlIHN3aXRjaCB0byBleGNsdXNpdmUgd2FpdGluZyBpcyAqcHJpbWFyaWx5KiBhYm91dCB0aGUgcGVyZm9ybWFuY2UgZ2FpbiBmcm9tIGF2b2lkaW5nIHRoZSB0aHVuZGVyaW5nIGhlcmQuIEl0J3MgYSBwZXJmb3JtYW5jZS9jb25jdXJyZW5jeSBpbXByb3ZlbWVudC4gVGhlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1ZyBpcyBzdGlsbCB0aGUgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBzbWNfd3JfdHhfcHV0X3Nsb3RgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTMxNiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDoyMjo1OS43MzM5MDYzNTZaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTk2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NtYy9zbWNfd3IuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxODA6XFx0XFx0KmlkeCA9IGxpbmstXFx1MDAzZXdyX3R4X2NudDtcXG4gMTgxOlxcdFxcdHJldHVybiAtRUJVU1k7XFxuIDE4MjpcXHR9XFxuIDE4MzpcXHRcXG4gMTg0OlxcdC8qKlxcbiAxODU6XFx0ICogc21jX3dyX3R4X2dldF9mcmVlX3Nsb3QoKSAtIHJldHVybnMgYnVmZmVyIGZvciBtZXNzYWdlIGFzc2VtYmx5LFxcbiAxODY6XFx0ICpcXHRcXHRcXHRhbmQgc2V0cyBpbmZvIGZvciBwZW5kaW5nIHRyYW5zbWl0IHRyYWNraW5nXFxuIDE4NzpcXHQgKiBAbGluazpcXHRcXHRQb2ludGVyIHRvIHNtY19saW5rIHVzZWQgdG8gbGF0ZXIgc2VuZCB0aGUgbWVzc2FnZS5cXG4gMTg4OlxcdCAqIEBoYW5kbGVyOlxcdFxcdFNlbmQgY29tcGxldGlvbiBoYW5kbGVyIGZ1bmN0aW9uIHBvaW50ZXIuXFxuIDE4OTpcXHQgKiBAd3JfYnVmOlxcdFxcdE91dCB2YWx1ZSByZXR1cm5zIHBvaW50ZXIgdG8gbWVzc2FnZSBidWZmZXIuXFxuIDE5MDpcXHQgKiBAd3JfcmRtYV9idWY6XFx0T3V0IHZhbHVlIHJldHVybnMgcG9pbnRlciB0byByZG1hIHdvcmsgcmVxdWVzdC5cXG4gMTkxOlxcdCAqIEB3cl9wZW5kX3ByaXY6XFx0T3V0IHZhbHVlIHJldHVybnMgcG9pbnRlciBzZXJ2aW5nIGFzIGhhbmRsZXIgY29udGV4dC5cXG4gMTkyOlxcdCAqXFxuIDE5MzpcXHQgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgLWVycm5vIG9uIGVycm9yLlxcbiAxOTQ6XFx0ICovXFxuIDE5NTpcXHRpbnQgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3Qoc3RydWN0IHNtY19saW5rICpsaW5rLFxcbiAxOTY6XFx0XFx0XFx0XFx0ICAgIHNtY193cl90eF9oYW5kbGVyIGhhbmRsZXIsXFxuIDE5NzpcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNtY193cl9idWYgKip3cl9idWYsXFxuIDE5ODpcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNtY19yZG1hX3dyICoqd3JfcmRtYV9idWYsXFxuIDE5OTpcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNtY193cl90eF9wZW5kX3ByaXYgKip3cl9wZW5kX3ByaXYpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjIyOjU5LjczNDAwNzY0NloiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjM2MTUxNDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhhdCBmdW5jdGlvbiBjYWxsOlxuXG4qKkFuYWx5emluZyBgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RfaW5kZXhgKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBmdW5jdGlvbiBuYW1lLCBgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RfaW5kZXhgLiBCYXNlZCBvbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24sIHdoaWNoIHNlZW1zIHByZXR0eSBzdGFuZGFyZCwgSSBjYW4gaW1tZWRpYXRlbHkgaW5mZXIgYSBmZXcgdGhpbmdzLiBcInNtY1wiIGxpa2VseSByZWZlcnMgdG8gc29tZSBraW5kIG9mIFN5c3RlbSBNYW5hZ2VtZW50IENvbnRyb2xsZXIgb3IgYSBzaW1pbGFyIHBlcmlwaGVyYWwg4oCTIHBlcmhhcHMgcmVsYXRlZCB0byBzaGFyZWQgbWVtb3J5IGNvbW11bmljYXRpb24uIFwid3JcIiBwcm9iYWJseSBpbmRpY2F0ZXMgXCJ3cml0ZVwiIG9yIFwid3JpdGluZyxcIiBzcGVjaWZpY2FsbHkgZm9yIGEgdHJhbnNtaXNzaW9uLCBzbyBsaWtlbHkgdGhlIGZ1bmN0aW9uIGhhbmRsZXMgdHJhbnNhY3Rpb25zIGZyb20gdGhlIGNvbnRyb2xsZXIgdG8sIHNheSwgbWVtb3J5LiBcInR4XCIgZGVmaW5pdGVseSBtZWFucyBcInRyYW5zbWl0LlwiIEFuZCBmaW5hbGx5LCBcImdldF9mcmVlX3Nsb3RfaW5kZXhcIiBzY3JlYW1zIFwiZmluZCBhbiBhdmFpbGFibGUgYnVmZmVyL3Nsb3QvaW5kZXggd2l0aGluIGEgdHJhbnNtaXNzaW9uIGJ1ZmZlci5cIlxuXG5TbywgaW4gZXNzZW5jZSwgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlICpuZXh0KiBhdmFpbGFibGUgd3JpdGUgc2xvdCBvciBidWZmZXIgaW5kZXggd2l0aGluIGEgdHJhbnNtaXNzaW9uIHN0cnVjdHVyZSBtYW5hZ2VkIGJ5IHRoZSBTTUMuIEdpdmVuIG15IGV4cGVydGlzZSwgSSdkIGV4cGVjdCBpdCB0byBiZSBhIGNyaXRpY2FsIGNvbXBvbmVudCBmb3IgaGFuZGxpbmcgdGhlIHJhdGUgYW5kIGZsb3cgb2YgZGF0YSB0cmFuc2ZlcnMsIGVuc3VyaW5nIHRoYXQgd2UgZG9uJ3Qgb3ZlcndyaXRlIG9yIHN0YXJ2ZSB0aGUgdHJhbnNtaXNzaW9uIHByb2Nlc3MuIFRoaXMgc3VnZ2VzdHMgdGhlIGZ1bmN0aW9uIHdvdWxkIGxpa2VseSBiZSBjYWxsZWQgcHJpb3IgdG8gYWN0dWFsbHkgd3JpdGluZyBkYXRhIHRvIHRoZSB0cmFuc21pc3Npb24gYnVmZmVyLCB0byBkZXRlcm1pbmUgdGhlIGFwcHJvcHJpYXRlIG9mZnNldC4gVGhlIGZ1bmN0aW9uIHdpbGwgbGlrZWx5IG5lZWQgdG8gZGVhbCB3aXRoIHRoZSBwb2ludGVyIGFyaXRobWV0aWMgdG8gaGFuZGxlIHRoZSB2YXJpb3VzIHRyYW5zbWlzc2lvbiBzbG90cywgYW5kIHNob3VsZCBiZSBjYXJlZnVsbHkgcmV2aWV3ZWQgZm9yIHJhY2UgY29uZGl0aW9ucyBhbmQgcG90ZW50aWFsIGxvY2tpbmcgcmVxdWlyZW1lbnRzIGlmIHRoZSBTTUMgaXMgc2hhcmVkIHdpdGggb3RoZXIgY29udHJvbGxlcnMgb3IgdGhyZWFkcy4gQW55IHBvdGVudGlhbCBmb3IgYnVmZmVyIG92ZXJmbG93cyBvciB1bmRlcmZsb3dzIGlzIGFsc28gcGFyYW1vdW50LiBUaGlzIGNvdWxkIGJlIGEgY3JpdGljYWwgcGF0aCBmdW5jdGlvbiBzbyBjYXJlZnVsIHBlcmZvcm1hbmNlIGV2YWx1YXRpb24sIGFuZCBwb3RlbnRpYWwgb3B0aW1pemF0aW9ucyBzaG91bGQgYmUgY29uc2lkZXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyOTQsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjIzOjA1Ljk3MDE2MTMyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2NjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zbWMvc21jX3dyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTYwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTYwOlxcdH1cXG4gMTYxOlxcdFxcbiAxNjI6XFx0dm9pZCBzbWNfd3JfdHhfY3FfaGFuZGxlcihzdHJ1Y3QgaWJfY3EgKmliX2NxLCB2b2lkICpjcV9jb250ZXh0KVxcbiAxNjM6XFx0e1xcbiAxNjQ6XFx0XFx0c3RydWN0IHNtY19pYl9kZXZpY2UgKmRldiA9IChzdHJ1Y3Qgc21jX2liX2RldmljZSAqKWNxX2NvbnRleHQ7XFxuIDE2NTpcXHRcXG4gMTY2OlxcdFxcdHRhc2tsZXRfc2NoZWR1bGUoXFx1MDAyNmRldi1cXHUwMDNlc2VuZF90YXNrbGV0KTtcXG4gMTY3OlxcdH1cXG4gMTY4OlxcdFxcbiAxNjk6XFx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHJlcXVlc3Qgc3VibWlzc2lvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xcbiAxNzA6XFx0XFxuIDE3MTpcXHRzdGF0aWMgaW5saW5lIGludCBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdF9pbmRleChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHUzMiAqaWR4KVxcbiAxNzI6XFx0e1xcbiAxNzM6XFx0XFx0KmlkeCA9IGxpbmstXFx1MDAzZXdyX3R4X2NudDtcXG4gMTc0OlxcdFxcdGlmICghc21jX2xpbmtfc2VuZGFibGUobGluaykpXFxuIDE3NTpcXHRcXHRcXHRyZXR1cm4gLUVOT0xJTks7XFxuIDE3NjpcXHRcXHRmb3JfZWFjaF9jbGVhcl9iaXQoKmlkeCwgbGluay1cXHUwMDNld3JfdHhfbWFzaywgbGluay1cXHUwMDNld3JfdHhfY250KSB7XFxuIDE3NzpcXHRcXHRcXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoKmlkeCwgbGluay1cXHUwMDNld3JfdHhfbWFzaykpXFxuIDE3ODpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMTc5OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjM6MDUuOTcwMjU5MTRaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQzMjEwNDkzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIE1lbW9yeSBDb3JydXB0aW9uIGluIFNNQyBXcml0ZSBUWCoqXG5cbk9rYXksIHNvIGBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdF9pbmRleGAgaXMgZGVmaW5pdGVseSB0aHJlYWQtc2FmZTsgYHRlc3RfYW5kX3NldF9iaXRgIHRha2VzIGNhcmUgb2YgdGhhdC4gQW5kIHRoYXQgY2hhbmdlIHRvIGBwcmVwYXJlX3RvX3dhaXRfZXhjbHVzaXZlYD8gUHVyZWx5IGZvciBhdm9pZGluZyB0aGUgdGh1bmRlcmluZyBoZXJkLCB3aGljaCBtYWtlcyBzZW5zZS4gQnV0IHRoaXMgYG1lbXNldGAgZml44oCmIGl0J3MgZ290IG1lIHRoaW5raW5nLlxuXG5MZXQncyBzZWU6XG5gYGBjXG4tXHRcdG1lbXNldChcdTAwMjZsaW5rLVx1MDAzZXdyX3R4X3YyX3BlbmQsIDAsXG4tXHRcdCAgICAgICBzaXplb2YobGluay1cdTAwM2V3cl90eF92Ml9wZW5kKSk7XG4tXHRcdG1lbXNldChcdTAwMjZsaW5rLVx1MDAzZWxnci1cdTAwM2V3cl90eF9idWZfdjIsIDAsXG4tXHRcdCAgICAgICBzaXplb2YobGluay1cdTAwM2VsZ3ItXHUwMDNld3JfdHhfYnVmX3YyKSk7XG4rXHRcdG1lbXNldChsaW5rLVx1MDAzZXdyX3R4X3YyX3BlbmQsIDAsXG4rXHRcdCAgICAgICBzaXplb2YoKmxpbmstXHUwMDNld3JfdHhfdjJfcGVuZCkpO1xuK1x0XHRtZW1zZXQobGluay1cdTAwM2VsZ3ItXHUwMDNld3JfdHhfYnVmX3YyLCAwLFxuK1x0XHQgICAgICAgc2l6ZW9mKCpsaW5rLVx1MDAzZXdyX3R4X2J1Zl92MikpO1xuYGBgXG5cbkFscmlnaHQsIHNvIHRoZSBvcmlnaW5hbCBjb2RlIHdhcyB6ZXJvaW5nIHRoZSAqcG9pbnRlcnMqIHRoZW1zZWx2ZXMsIG5vdCB0aGUgbWVtb3J5IHRoZXkgcG9pbnQgdG8uIGBsaW5rLVx1MDAzZXdyX3R4X3YyX3BlbmRgIGlzIGEgcG9pbnRlciB0byBhIGBzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRgLCBhbmQgYGxpbmstXHUwMDNlbGdyLVx1MDAzZXdyX3R4X2J1Zl92MmAgaXMgYSBwb2ludGVyIHRvIGEgYHN0cnVjdCBzbWNfd3JfdjJfYnVmYC4gTm93LCB0aGUgY29kZSBub3cgemVyb2VzIHRoZSBzdHJ1Y3R1cmVzLiBUaGF0IG1lYW5zIHRoYXQgdGhlIG9sZCBjb2RlIHdhcyBsZWF2aW5nIHRoZSBwb2ludGVkLXRvIHN0cnVjdHVyZXMgdW5pbml0aWFsaXplZCwgYW5kIHRoaXMgbmV3IGNvZGUgY29ycmVjdHMgdGhhdC5cblxuV2FpdCBhIHNlY29uZOKApiBJZiB0aGUgcG9pbnRlcnMgd2VyZSBiZWluZyB6ZXJvZWQsIHRoZSBhY3R1YWwgZGF0YSBidWZmZXJzIHdlcmVuJ3QgYmVpbmcgY2xlYXJlZC4gVGhhdCBtZWFucyB0aGUgbmV4dCB0aW1lIHRob3NlIGJ1ZmZlcnMgd2VyZSB1c2VkLCB0aGV5IG1pZ2h0IGhhdmUgY29udGFpbmVkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGF0J3MgYSBodWdlIHBvdGVudGlhbCBzZWN1cml0eSBpc3N1ZS4gVGhlc2UgYXJlIG5ldHdvcmsgYnVmZmVyczsgaWYgdGhlcmUncyB1bmluaXRpYWxpemVkIG1lbW9yeSwgdGhhdCBjb3VsZCBtZWFuIGxlYWtpbmcgc2Vuc2l0aXZlIGluZm9ybWF0aW9uLlxuXG5MZXQncyBsb29rIGF0IGhvdyBgbGluay1cdTAwM2VsZ3ItXHUwMDNld3JfdHhfYnVmX3YyYCBpcyB1c2VkLiBSaWdodCwgaXQncyB1c2VkIHRvIHNlbmQgZGF0YSBvdmVyIHRoZSBuZXR3b3JrLiBJZiBpdCB3YXNuJ3QgemVyb2VkLCB0aGF0J3MgYSAqbWFzc2l2ZSogcHJvYmxlbS4gSSBuZWVkIHRvIGtub3cgaWYgd2UgYXJlIHBvc3NpYmx5IGxlYWtpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIExldCdzIHNlZS4uLiBgc21jX3dyX3R4X2dldF92Ml9zbG90YCByZXR1cm5zIGBsaW5rLVx1MDAzZWxnci1cdTAwM2V3cl90eF9idWZfdjJgIGFzIGAqd3JfYnVmYC4gVGhlbiB0aGUgY2FsbGVyIGZpbGxzIGl0IHdpdGggZGF0YSBhbmQgc2VuZHMgaXQuXG5cbk9rYXksIHRoZSBxdWVzdGlvbiBpczogZG9lcyB0aGUgY2FsbGVyIGZpbGwgdGhlICplbnRpcmUqIGJ1ZmZlciwgb3IgYXJlIHBhcnRzIG9mIGl0IGxlZnQgdW5pbml0aWFsaXplZD8gSWYgcGFydHMgYXJlIGxlZnQgdW5pbml0aWFsaXplZCwgYW5kIHRoZSBidWZmZXIgd2Fzbid0IHplcm9lZCwgd2UgY291bGQgYmUgc2VuZGluZyBnYXJiYWdlIGFjcm9zcyB0aGUgbmV0d29yaywgYW5kIHBvdGVudGlhbGx5IGxlYWtpbmcuIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbGVycyBvZiBgc21jX3dyX3R4X2dldF92Ml9zbG90YCBhbmQgdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgZGF0YSB0aGV5J3JlIHdyaXRpbmcuIFRoaXMgbmVlZHMgYSBkZWVwZXIgZGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwMzgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDoyMzoxMy40MDIzNjc5MzZaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDUxNDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNtY193cl90eF9nZXRfdjJfc2xvdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL3NtY19sbGMuYz00MjI9c3RhdGljIGludCBzbWNfbGxjX2FkZF9wZW5kaW5nX3NlbmRfdjIoc3RydWN0IHNtY19saW5rICpsaW5rLFxcbi0tXFxubmV0L3NtYy9zbWNfbGxjLmMtNDI3LVxcbm5ldC9zbWMvc21jX2xsYy5jOjQyODpcXHRyYyA9IHNtY193cl90eF9nZXRfdjJfc2xvdChsaW5rLCBzbWNfbGxjX3R4X2hhbmRsZXIsIHdyX2J1ZiwgcGVuZCk7XFxubmV0L3NtYy9zbWNfbGxjLmMtNDI5LVxcdGlmIChyYyBcXHUwMDNjIDApXFxuLS1cXG5uZXQvc21jL3NtY193ci5jPTE5NT1pbnQgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3Qoc3RydWN0IHNtY19saW5rICpsaW5rLFxcbi0tXFxubmV0L3NtYy9zbWNfd3IuYy0yNTktXFxubmV0L3NtYy9zbWNfd3IuYzoyNjA6aW50IHNtY193cl90eF9nZXRfdjJfc2xvdChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXFxubmV0L3NtYy9zbWNfd3IuYy0yNjEtXFx0XFx0XFx0ICBzbWNfd3JfdHhfaGFuZGxlciBoYW5kbGVyLFxcbi0tXFxubmV0L3NtYy9zbWNfd3IuaD0xMTM9aW50IHNtY193cl90eF9nZXRfZnJlZV9zbG90KHN0cnVjdCBzbWNfbGluayAqbGluaywgc21jX3dyX3R4X2hhbmRsZXIgaGFuZGxlcixcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmgtMTE2LVxcdFxcdFxcdCAgICBzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRfcHJpdiAqKndyX3BlbmRfcHJpdik7XFxubmV0L3NtYy9zbWNfd3IuaDoxMTc6aW50IHNtY193cl90eF9nZXRfdjJfc2xvdChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXFxubmV0L3NtYy9zbWNfd3IuaC0xMTgtXFx0XFx0XFx0ICBzbWNfd3JfdHhfaGFuZGxlciBoYW5kbGVyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDoyMzoxMy40NDY0MjQ2MTFaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwODg2NzE5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaWdnaW5nIGludG8gdGhlIEZ1bmN0aW9uIENhbGwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBpZWNlIG9mIGNvZGUsIGFuZCB0aGUga2V5IGZ1bmN0aW9uIGNhbGwgaXMgYHNtY19sbGNfYWRkX3BlbmRpbmdfc2VuZF92MmAuIFRoYXQncyB3aGVyZSB0aGUgYWN0aW9uIGlzLCBpdCBsb29rcyBsaWtlLiAgTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGludG8gdGhhdCBmdW5jdGlvbi4gTGV0J3Mgc2VlIHdoYXQgYHNtY19sbGNfYWRkX3BlbmRpbmdfc2VuZF92MmAgaXMgYWxsIGFib3V0LiBVbmRlcnN0YW5kaW5nIGl0cyBpbXBsZW1lbnRhdGlvbiBpcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHdoYXQncyBnb2luZyBvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGFyZ3VtZW50cywgaXRzIGNvbnRyb2wgZmxvdywgYW5kIGl0cyBzaWRlIGVmZmVjdHMuIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk3MTAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDoyMzoxNy4zNTUyOTQzNDVaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zbWMvc21jX2xsYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQyMixcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQyMjpcXHRzdGF0aWMgaW50IHNtY19sbGNfYWRkX3BlbmRpbmdfc2VuZF92MihzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXFxuIDQyMzpcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNtY193cl92Ml9idWYgKip3cl9idWYsXFxuIDQyNDpcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNtY193cl90eF9wZW5kX3ByaXYgKipwZW5kKVxcbiA0MjU6XFx0e1xcbiA0MjY6XFx0XFx0aW50IHJjO1xcbiA0Mjc6XFx0XFxuIDQyODpcXHRcXHRyYyA9IHNtY193cl90eF9nZXRfdjJfc2xvdChsaW5rLCBzbWNfbGxjX3R4X2hhbmRsZXIsIHdyX2J1ZiwgcGVuZCk7XFxuIDQyOTpcXHRcXHRpZiAocmMgXFx1MDAzYyAwKVxcbiA0MzA6XFx0XFx0XFx0cmV0dXJuIHJjO1xcbiA0MzE6XFx0XFx0cmV0dXJuIDA7XFxuIDQzMjpcXHR9XFxuIDQzMzpcXHRcXG4gNDM0OlxcdHN0YXRpYyB2b2lkIHNtY19sbGNfaW5pdF9tc2dfaGRyKHN0cnVjdCBzbWNfbGxjX2hkciAqaGRyLFxcbiA0MzU6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLCBzaXplX3QgbGVuKVxcbiA0MzY6XFx0e1xcbiA0Mzc6XFx0XFx0aWYgKGxnci1cXHUwMDNlc21jX3ZlcnNpb24gPT0gU01DX1YyKSB7XFxuIDQzODpcXHRcXHRcXHRoZHItXFx1MDAzZWNvbW1vbi5sbGNfdmVyc2lvbiA9IFNNQ19WMjtcXG4gNDM5OlxcdFxcdFxcdGhkci1cXHUwMDNlbGVuZ3RoX3YyID0gbGVuO1xcbiA0NDA6XFx0XFx0fSBlbHNlIHtcXG4gNDQxOlxcdFxcdFxcdGhkci1cXHUwMDNlY29tbW9uLmxsY192ZXJzaW9uID0gMDtcXG4gNDQyOlxcdFxcdFxcdGhkci1cXHUwMDNlbGVuZ3RoID0gbGVuO1xcbiA0NDM6XFx0XFx0fVxcbiA0NDQ6XFx0fVxcbiA0NDU6XFx0XFxuIDQ0NjpcXHQvKiBoaWdoLWxldmVsIEFQSSB0byBzZW5kIExMQyBjb25maXJtIGxpbmsgKi9cXG4gNDQ3OlxcdGludCBzbWNfbGxjX3NlbmRfY29uZmlybV9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluayxcXG4gNDQ4OlxcdFxcdFxcdFxcdCAgICAgIGVudW0gc21jX2xsY19yZXFyZXNwIHJlcXJlc3ApXFxuIDQ0OTpcXHR7XFxuIDQ1MDpcXHRcXHRzdHJ1Y3Qgc21jX2xsY19tc2dfY29uZmlybV9saW5rICpjb25mbGxjO1xcbiA0NTE6XFx0XFx0c3RydWN0IHNtY193cl90eF9wZW5kX3ByaXYgKnBlbmQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjIzOjE3LjM1NTQzMDg4NVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjk3NTM0MjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBDYWxsIFN0YWNrOiBgc21jX2xsY19hZGRfcGVuZGluZ19zZW5kX3YyYCoqXG5cbkFscmlnaHQsIEknbSBkaXZpbmcgaW4uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgc3Vycm91bmRpbmcgYHNtY19sbGNfYWRkX3BlbmRpbmdfc2VuZF92MmAuIEl0J3MgYSBrZXkgZnVuY3Rpb24sIGJ1dCB3aXRob3V0IGtub3dpbmcgdGhlIGNhbGxlcnMsIGl0cyBiZWhhdmlvciBpcyBnb2luZyB0byBiZSBvcGFxdWUuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhpcyBwb2ludC4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBjYWxsIHN0YWNrLCBuYXR1cmFsbHkuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSB1cHN0cmVhbSBmdW5jdGlvbnMgdGhhdCBhcmUgcmVzcG9uc2libGUgZm9yICppbnZva2luZyogdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uLiBJcyBpdCB0cmlnZ2VyZWQgYnkgYW4gaW50ZXJydXB0LCBhIHRhc2tsZXQsIG9yIGEgZGlyZWN0IGZ1bmN0aW9uIGNhbGwgZnJvbSBzb21lIG90aGVyIHBhcnQgb2YgdGhlIG5ldHdvcmsgc3RhY2ssIHBlcmhhcHMgcmVsYXRlZCB0byBzb2NrZXQgbWFuYWdlbWVudD8gRGV0ZXJtaW5pbmcgdGhlIGVudHJ5IHBvaW50cyB3aWxsIGluZm9ybSBtZSBhYm91dCB0aGUgcG90ZW50aWFsIHNvdXJjZXMgb2YgbGF0ZW5jeSwgZXJyb3JzLCBvciBpbmVmZmljaWVuY2llcyBpZiB0aGluZ3MgYXJlbid0IHdvcmtpbmcgYXMgZXhwZWN0ZWQuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBlZmZpY2llbmN5LCBzbyBrbm93aW5nIHdoZXJlIHRoZSBjYWxsIG9yaWdpbmF0ZXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgd2hhdCBkYXRhIGlzIGxpa2VseSBiZWluZyBwcm9jZXNzZWQgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBib3R0bGVuZWNrcyB1cHN0cmVhbS4gTGV0J3Mgc2VlIHdobydzIGRvaW5nIHRoZSBjYWxsaW5nIGFuZCBsZXQncyBnbyBmcm9tIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDQ0OCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjM6MjAuNjUyOTY3NTcyWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDA0OTI4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbWNfbGxjX2FkZF9wZW5kaW5nX3NlbmRfdjJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9zbWNfbGxjLmM9NDAwPXN0YXRpYyBpbnQgc21jX2xsY19hZGRfcGVuZGluZ19zZW5kKHN0cnVjdCBzbWNfbGluayAqbGluayxcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jLTQyMS1cXG5uZXQvc21jL3NtY19sbGMuYzo0MjI6c3RhdGljIGludCBzbWNfbGxjX2FkZF9wZW5kaW5nX3NlbmRfdjIoc3RydWN0IHNtY19saW5rICpsaW5rLFxcbm5ldC9zbWMvc21jX2xsYy5jLTQyMy1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNtY193cl92Ml9idWYgKip3cl9idWYsXFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYz02NDM9aW50IHNtY19sbGNfc2VuZF9hZGRfbGluayhzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHU4IG1hY1tdLCB1OCBnaWRbXSxcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jLTY1Ny1cXG5uZXQvc21jL3NtY19sbGMuYzo2NTg6XFx0XFx0cmMgPSBzbWNfbGxjX2FkZF9wZW5kaW5nX3NlbmRfdjIobGluaywgXFx1MDAyNndyX2J1ZiwgXFx1MDAyNnBlbmQpO1xcbm5ldC9zbWMvc21jX2xsYy5jLTY1OS1cXHRcXHRpZiAocmMpXFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYz0xMTI2PXN0YXRpYyB2b2lkIHNtY19sbGNfc2VuZF9yZXF1ZXN0X2FkZF9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluaylcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jLTExNDMtXFxubmV0L3NtYy9zbWNfbGxjLmM6MTE0NDpcXHRyYyA9IHNtY19sbGNfYWRkX3BlbmRpbmdfc2VuZF92MihsaW5rLCBcXHUwMDI2d3JfYnVmLCBcXHUwMDI2cGVuZCk7XFxubmV0L3NtYy9zbWNfbGxjLmMtMTE0NS1cXHRpZiAocmMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjIzOjIwLjY5NzAyMjEwN1oiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDgzMDM4NTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnM6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBMaW5rIEFkZGl0aW9uIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGxpbmsgYWRkaXRpb24gc2VxdWVuY2UsIHBhcnRpY3VsYXJseSB0aGUgc2lnbmFsaW5nLiBMZXQncyBzdGFydCBieSB0YWtpbmcgYSBjbG9zZXIgbG9vayBhdCBgc21jX2xsY19zZW5kX2FkZF9saW5rYCBhbmQgYHNtY19sbGNfc2VuZF9yZXF1ZXN0X2FkZF9saW5rYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgaG93IHRoZXNlIHR3byBmdW5jdGlvbnMgaW50ZXJhY3QuIEknbSB0aGlua2luZywgYXJlIHRoZXJlIHN1YnRsZSBkaWZmZXJlbmNlcyBpbiB0aGUgKnNlbmRpbmcqIGJlaGF2aW9yIGJldHdlZW4gdGhlIGluaXRpYWwgcmVxdWVzdCBhbmQgdGhlIGNvbmZpcm1hdGlvbiBwaGFzZT8gQXJlIHdlIGRlYWxpbmcgd2l0aCB0aGUgc2FtZSB1bmRlcmx5aW5nIG1lY2hhbmlzbSB3aXRoIHNsaWdodCB2YXJpYXRpb25zLCBvciBhcmUgdGhlc2UgZGlzdGluY3QgZnVuY3Rpb24gY2FsbHMgc2VydmluZyBmdW5kYW1lbnRhbGx5IHNlcGFyYXRlIHB1cnBvc2VzIGluIHRoZSBwcm90b2NvbD8gSSdtIGFudGljaXBhdGluZyBzb21lIGltcG9ydGFudCBkZXRhaWxzIHRvIHVucGFjayBoZXJlIHJlZ2FyZGluZyBlcnJvciBoYW5kbGluZywgcmV0cmFuc21pc3Npb25zLCBvciBwZXJoYXBzIGRpZmZlcmVudCBzZXRzIG9mIHBhcmFtZXRlcnMgcmVxdWlyZWQgaW4gZWFjaC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCB0byBzZWUgaWYgdGhlcmUgYXJlIG9wdGltaXphdGlvbnMgb3IgcG90ZW50aWFsIGFyZWFzIGZvciBpbXByb3ZlbWVudC4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExODUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDoyMzoyMy43ODAwNjMwMVoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjk4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NtYy9zbWNfbGxjLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjQzLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjQzOlxcdGludCBzbWNfbGxjX3NlbmRfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLCB1OCBtYWNbXSwgdTggZ2lkW10sXFxuIDY0NDpcXHRcXHRcXHRcXHQgIHN0cnVjdCBzbWNfbGluayAqbGlua19uZXcsXFxuIDY0NTpcXHRcXHRcXHRcXHQgIGVudW0gc21jX2xsY19yZXFyZXNwIHJlcXJlc3ApXFxuIDY0NjpcXHR7XFxuIDY0NzpcXHRcXHRzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtfdjJfZXh0ICpleHQgPSBOVUxMO1xcbiA2NDg6XFx0XFx0c3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rICphZGRsbGM7XFxuIDY0OTpcXHRcXHRzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRfcHJpdiAqcGVuZDtcXG4gNjUwOlxcdFxcdGludCBsZW4gPSBzaXplb2YoKmFkZGxsYyk7XFxuIDY1MTpcXHRcXHRpbnQgcmM7XFxuIDY1MjpcXHRcXG4gNjUzOlxcdFxcdGlmICghc21jX3dyX3R4X2xpbmtfaG9sZChsaW5rKSlcXG4gNjU0OlxcdFxcdFxcdHJldHVybiAtRU5PTElOSztcXG4gNjU1OlxcdFxcdGlmIChsaW5rLVxcdTAwM2VsZ3ItXFx1MDAzZXNtY192ZXJzaW9uID09IFNNQ19WMikge1xcbiA2NTY6XFx0XFx0XFx0c3RydWN0IHNtY193cl92Ml9idWYgKndyX2J1ZjtcXG4gNjU3OlxcdFxcbiA2NTg6XFx0XFx0XFx0cmMgPSBzbWNfbGxjX2FkZF9wZW5kaW5nX3NlbmRfdjIobGluaywgXFx1MDAyNndyX2J1ZiwgXFx1MDAyNnBlbmQpO1xcbiA2NTk6XFx0XFx0XFx0aWYgKHJjKVxcbiA2NjA6XFx0XFx0XFx0XFx0Z290byBwdXRfb3V0O1xcbiA2NjE6XFx0XFx0XFx0YWRkbGxjID0gKHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGluayAqKXdyX2J1ZjtcXG4gNjYyOlxcdFxcdFxcdGV4dCA9IChzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtfdjJfZXh0ICopXFxuIDY2MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2d3JfYnVmLVxcdTAwM2VyYXdbc2l6ZW9mKCphZGRsbGMpXTtcXG4gNjY0OlxcdFxcdFxcdG1lbXNldChleHQsIDAsIFNNQ19XUl9UWF9TSVpFKTtcXG4gNjY1OlxcdFxcdH0gZWxzZSB7XFxuIDY2NjpcXHRcXHRcXHRzdHJ1Y3Qgc21jX3dyX2J1ZiAqd3JfYnVmO1xcbiA2Njc6XFx0XFxuIDY2ODpcXHRcXHRcXHRyYyA9IHNtY19sbGNfYWRkX3BlbmRpbmdfc2VuZChsaW5rLCBcXHUwMDI2d3JfYnVmLCBcXHUwMDI2cGVuZCk7XFxuIDY2OTpcXHRcXHRcXHRpZiAocmMpXFxuIDY3MDpcXHRcXHRcXHRcXHRnb3RvIHB1dF9vdXQ7XFxuIDY3MTpcXHRcXHRcXHRhZGRsbGMgPSAoc3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rICopd3JfYnVmO1xcbiA2NzI6XFx0XFx0fVxcbiA2NzM6XFx0XFxuIDY3NDpcXHRcXHRtZW1zZXQoYWRkbGxjLCAwLCBzaXplb2YoKmFkZGxsYykpO1xcbiA2NzU6XFx0XFx0YWRkbGxjLVxcdTAwM2VoZC5jb21tb24ubGxjX3R5cGUgPSBTTUNfTExDX0FERF9MSU5LO1xcbiA2NzY6XFx0XFx0aWYgKHJlcXJlc3AgPT0gU01DX0xMQ19SRVNQKVxcbiA2Nzc6XFx0XFx0XFx0YWRkbGxjLVxcdTAwM2VoZC5mbGFncyB8PSBTTUNfTExDX0ZMQUdfUkVTUDtcXG4gNjc4OlxcdFxcdG1lbWNweShhZGRsbGMtXFx1MDAzZXNlbmRlcl9tYWMsIG1hYywgRVRIX0FMRU4pO1xcbiA2Nzk6XFx0XFx0bWVtY3B5KGFkZGxsYy1cXHUwMDNlc2VuZGVyX2dpZCwgZ2lkLCBTTUNfR0lEX1NJWkUpO1xcbiA2ODA6XFx0XFx0aWYgKGxpbmtfbmV3KSB7XFxuIDY4MTpcXHRcXHRcXHRhZGRsbGMtXFx1MDAzZWxpbmtfbnVtID0gbGlua19uZXctXFx1MDAzZWxpbmtfaWQ7XFxuIDY4MjpcXHRcXHRcXHRodG9uMjQoYWRkbGxjLVxcdTAwM2VzZW5kZXJfcXBfbnVtLCBsaW5rX25ldy1cXHUwMDNlcm9jZV9xcC1cXHUwMDNlcXBfbnVtKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjM6MjMuNzgwMTkzOTdaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU5MDQxODMxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJ1ZmZlciBaZXJvaW5nIGluIGBzbWNfbGxjX3NlbmRfYWRkX2xpbmtgKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJbiBgc21jX2xsY19zZW5kX2FkZF9saW5rYCwgcGFydGljdWxhcmx5IGZvciBTTUNfVjIgbGlua3MsIEkgc2VlIHdlIGFsbG9jYXRlIGEgd3JpdGUgYnVmZmVyIChgd3JfYnVmYCkgdXNpbmcgYHNtY19sbGNfYWRkX3BlbmRpbmdfc2VuZF92MmAuIE5vdywgdGhlIGNydWNpYWwgcGFydCBJJ20gZm9jdXNpbmcgb24gaXMgdGhlIGV4cGxpY2l0IHplcm9pbmcgb2YgbWVtb3J5LiBGaXJzdCwgYG1lbXNldChleHQsIDAsIFNNQ19XUl9UWF9TSVpFKWAgemVybydzIGBleHRgLiBUaGVuLCBgbWVtc2V0KGFkZGxsYywgMCwgc2l6ZW9mKCphZGRsbGMpKWAgemVybydzIGBhZGRsbGNgLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2h5IHRoZSBkb3VibGUgemVyb2luZz8gQm90aCBgZXh0YCBhbmQgYGFkZGxsY2AgYXJlIGJlaW5nIHplcm9lZC4gSWYgSSBsb29rIGF0IHRoZSBzaXplcywgSSBzZWUgYFNNQ19XUl9UWF9TSVpFYCBpcyA0NCBieXRlcyBhbmQgYHNpemVvZigqYWRkbGxjKWAgaXMgYWxzbyA0NC4gU28gZmFyLCB0aGUgYnVmZmVyIGFsbG9jYXRlZCBpcyBqdXN0IGJlaW5nIHplcm9lZCB0d2ljZSEgYGFkZGxsY2AgYXBwZWFycyB0byBiZSBjYXN0IGZyb20gdGhlIHNhbWUgYnVmZmVyIGFzIGB3cl9idWZgLiBUaGVuIGBleHRgIGlzIGNhc3QsIGFuZCBgYWRkbGxjYCBpcyB6ZXJvZWQuXG5cblRoaXMgbG9va3MgbGlrZSBgYWRkbGxjYCBhbmQgYGV4dGAgYXJlIHBhcnQgb2YgdGhlIHNhbWUgYWxsb2NhdGVkIGJ1ZmZlci4gSSdtIHNlZWluZyBhIHBvc3NpYmxlIHJlZHVuZGFuY3kgaGVyZSwgb3IgbWF5YmUgYSBkZXNpZ24gY2hvaWNlLiBUaGlzIGZlZWxzIGluZWZmaWNpZW50LiBXaGF0J3MgdGhlIGNvbXBsZXRlIHN0cnVjdHVyZT8gSSdtIG1pc3Npbmcgc29tZXRoaW5nLCBJIG5lZWQgdG8ga25vdyB0aGUgc2l6ZSBvZiBgc3RydWN0IHNtY193cl92Ml9idWZgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhpcyBidWZmZXIgYWxsb2NhdGlvbiBhbmQgemVyb2luZyBzZXF1ZW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIyNDksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDoyMzoyOS4zNzA2MTQ5MDFaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NzAyNzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBzbWNfd3JfdjJfYnVmIFxcXFx7XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX2NvcmUuaD02MT1zdHJ1Y3Qgc21jX3dyX2J1ZiB7XFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmgtNjQtXFxubmV0L3NtYy9zbWNfY29yZS5oOjY1OnN0cnVjdCBzbWNfd3JfdjJfYnVmIHtcXG5uZXQvc21jL3NtY19jb3JlLmgtNjYtXFx0dThcXHRyYXdbU01DX1dSX0JVRl9WMl9TSVpFXTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjM6MjkuNDE1MzIxNzE2WiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTQwNDQwMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgYFNNQ19XUl9CVUZfVjJfU0laRWAqKlxuXG5Pa2F5LCB0aW1lIHRvIGNpcmNsZSBiYWNrIHRvIGBTTUNfV1JfQlVGX1YyX1NJWkVgLiBJIG5lZWQgdG8gZW5zdXJlIGl0J3Mgc3RpbGwgY29uc2lzdGVudCB3aXRoIHRoZSBjdXJyZW50IGFyY2hpdGVjdHVyZS4gTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIGl0cyBkZWZpbml0aW9uLCBlc3BlY2lhbGx5IGlmIHRoZXJlIGhhdmUgYmVlbiBhbnkgcmVjZW50IG1vZGlmaWNhdGlvbnMgdG8gdGhlIG1lbW9yeSBtYXBwaW5nIG9yIGJ1ZmZlciBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMuIEknbSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgYWxpZ25tZW50IGlzc3VlcyBvciBmcmFnbWVudGF0aW9uIHByb2JsZW1zIGlmIHRoZSBzaXplIGlzbid0IHJpZ2h0LCB5b3Uga25vdywgdGhlIHVzdWFsIGN1bHByaXRzLiBJdCdzIGEgY3JpdGljYWwgcGFyYW1ldGVyOyBhbnkgZGV2aWF0aW9uIGNvdWxkIGxlYWQgdG8gb3ZlcmZsb3cgY29uZGl0aW9ucyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcywgc3BlY2lmaWNhbGx5LCBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggbGFyZ2VyIHRyYW5zYWN0aW9ucyBvciBtb3JlIGZyZXF1ZW50IHVwZGF0ZXMuIEdpdmVuIHRoZSBjb250ZXh0LCBJIHNob3VsZCBkb3VibGUtY2hlY2sgaXRzIHJlbGF0aW9uc2hpcCB3aXRoIGFueSBjYWNoZSBjb2hlcmVuY3kgcHJvdG9jb2xzIHdlJ3JlIHVzaW5nLiBJIHNob3VsZCBhbHNvIHNlZSBpZiB0aGVyZSdzIGJlZW4gYW55IGRlYmF0ZSBvciBkaXNjdXNzaW9uIG9uIGl0cyB2YWx1ZSByZWNlbnRseS4gUmlnaHQsIGxldCBtZSBwdWxsIHVwIHRoZSByZWxldmFudCBoZWFkZXIgZmlsZXMgYW5kIGRvY3VtZW50YXRpb27igKYgZ290IHRvIGtlZXAgYSBjbG9zZSBleWUgb24gdGhlc2UgdGhpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzA1NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjIzOjMyLjYyOTM2ODM3NFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1MDMxNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiU01DX1dSX0JVRl9WMl9TSVpFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX2NvcmUuYz03ODg9aW50IHNtY3JfbGlua19pbml0KHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLCBzdHJ1Y3Qgc21jX2xpbmsgKmxuayxcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy03OTktXFx0XFx0bG5rLVxcdTAwM2V3cl9yeF9idWZsZW4gPSBzbWNfbGlua19zaGFyZWRfdjJfcnhidWYobG5rKSA/XFxubmV0L3NtYy9zbWNfY29yZS5jOjgwMDpcXHRcXHRcXHRTTUNfV1JfQlVGX1NJWkUgOiBTTUNfV1JfQlVGX1YyX1NJWkU7XFxubmV0L3NtYy9zbWNfY29yZS5jLTgwMS1cXHR9IGVsc2Uge1xcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5oPTUxPWVudW0gc21jX2xpbmtfc3RhdGUge1xcdFxcdFxcdC8qIHBvc3NpYmxlIHN0YXRlcyBvZiBhIGxpbmsgKi9cXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuaC01OC0jZGVmaW5lIFNNQ19XUl9CVUZfU0laRVxcdFxcdDQ4XFx0Lyogc2l6ZSBvZiB3b3JrIHJlcXVlc3QgYnVmZmVyICovXFxubmV0L3NtYy9zbWNfY29yZS5oOjU5OiNkZWZpbmUgU01DX1dSX0JVRl9WMl9TSVpFXFx0ODE5MlxcdC8qIHNpemUgb2YgdjIgd29yayByZXF1ZXN0IGJ1ZmZlciAqL1xcbm5ldC9zbWMvc21jX2NvcmUuaC02MC1cXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuaD02NT1zdHJ1Y3Qgc21jX3dyX3YyX2J1ZiB7XFxubmV0L3NtYy9zbWNfY29yZS5oOjY2OlxcdHU4XFx0cmF3W1NNQ19XUl9CVUZfVjJfU0laRV07XFxubmV0L3NtYy9zbWNfY29yZS5oLTY3LX07XFxuLS1cXG5uZXQvc21jL3NtY193ci5jPTU3Mj1zdGF0aWMgdm9pZCBzbWNfd3JfaW5pdF9zZ2Uoc3RydWN0IHNtY19saW5rICpsbmspXFxuLS1cXG5uZXQvc21jL3NtY193ci5jLTYwNy1cXHRcXHRsbmstXFx1MDAzZXdyX3R4X3YyX3NnZS1cXHUwMDNlYWRkciA9IGxuay1cXHUwMDNld3JfdHhfdjJfZG1hX2FkZHI7XFxubmV0L3NtYy9zbWNfd3IuYzo2MDg6XFx0XFx0bG5rLVxcdTAwM2V3cl90eF92Ml9zZ2UtXFx1MDAzZWxlbmd0aCA9IFNNQ19XUl9CVUZfVjJfU0laRTtcXG5uZXQvc21jL3NtY193ci5jLTYwOS1cXHRcXHRsbmstXFx1MDAzZXdyX3R4X3YyX3NnZS1cXHUwMDNlbGtleSA9IGxuay1cXHUwMDNlcm9jZV9wZC1cXHUwMDNlbG9jYWxfZG1hX2xrZXk7XFxuLS1cXG5uZXQvc21jL3NtY193ci5jLTYzNi1cXHRcXHRcXHRsbmstXFx1MDAzZXdyX3J4X3NnZXNbeCArIDFdLmxlbmd0aCA9XFxubmV0L3NtYy9zbWNfd3IuYzo2Mzc6XFx0XFx0XFx0XFx0XFx0U01DX1dSX0JVRl9WMl9TSVpFIC0gU01DX1dSX1RYX1NJWkU7XFxubmV0L3NtYy9zbWNfd3IuYy02MzgtXFx0XFx0XFx0bG5rLVxcdTAwM2V3cl9yeF9zZ2VzW3ggKyAxXS5sa2V5ID1cXG4tLVxcbm5ldC9zbWMvc21jX3dyLmM9NjUyPXZvaWQgc21jX3dyX2ZyZWVfbGluayhzdHJ1Y3Qgc21jX2xpbmsgKmxuaylcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmMtNjc5LVxcdFxcdGliX2RtYV91bm1hcF9zaW5nbGUoaWJkZXYsIGxuay1cXHUwMDNld3JfcnhfdjJfZG1hX2FkZHIsXFxubmV0L3NtYy9zbWNfd3IuYzo2ODA6XFx0XFx0XFx0XFx0ICAgIFNNQ19XUl9CVUZfVjJfU0laRSxcXG5uZXQvc21jL3NtY193ci5jLTY4MS1cXHRcXHRcXHRcXHQgICAgRE1BX0ZST01fREVWSUNFKTtcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmMtNjkxLVxcdFxcdGliX2RtYV91bm1hcF9zaW5nbGUoaWJkZXYsIGxuay1cXHUwMDNld3JfdHhfdjJfZG1hX2FkZHIsXFxubmV0L3NtYy9zbWNfd3IuYzo2OTI6XFx0XFx0XFx0XFx0ICAgIFNNQ19XUl9CVUZfVjJfU0laRSxcXG5uZXQvc21jL3NtY193ci5jLTY5My1cXHRcXHRcXHRcXHQgICAgRE1BX1RPX0RFVklDRSk7XFxuLS1cXG5uZXQvc21jL3NtY193ci5jPTc0MT1pbnQgc21jX3dyX2FsbG9jX2xncl9tZW0oc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IpXFxuLS1cXG5uZXQvc21jL3NtY193ci5jLTc0NS1cXG5uZXQvc21jL3NtY193ci5jOjc0NjpcXHRsZ3ItXFx1MDAzZXdyX3J4X2J1Zl92MiA9IGt6YWxsb2MoU01DX1dSX0JVRl9WMl9TSVpFLCBHRlBfS0VSTkVMKTtcXG5uZXQvc21jL3NtY193ci5jLTc0Ny1cXHRpZiAoIWxnci1cXHUwMDNld3JfcnhfYnVmX3YyKVxcbm5ldC9zbWMvc21jX3dyLmMtNzQ4LVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm5ldC9zbWMvc21jX3dyLmM6NzQ5OlxcdGxnci1cXHUwMDNld3JfdHhfYnVmX3YyID0ga3phbGxvYyhTTUNfV1JfQlVGX1YyX1NJWkUsIEdGUF9LRVJORUwpO1xcbm5ldC9zbWMvc21jX3dyLmMtNzUwLVxcdGlmICghbGdyLVxcdTAwM2V3cl90eF9idWZfdjIpIHtcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmM9ODcxPWludCBzbWNfd3JfY3JlYXRlX2xpbmsoc3RydWN0IHNtY19saW5rICpsbmspXFxuLS1cXG5uZXQvc21jL3NtY193ci5jLTg4OS1cXHRcXHRcXHRcXHRpYl9kbWFfbWFwX3NpbmdsZShpYmRldiwgbG5rLVxcdTAwM2VsZ3ItXFx1MDAzZXdyX3J4X2J1Zl92MixcXG5uZXQvc21jL3NtY193ci5jOjg5MDpcXHRcXHRcXHRcXHRcXHRcXHQgIFNNQ19XUl9CVUZfVjJfU0laRSwgRE1BX0ZST01fREVWSUNFKTtcXG5uZXQvc21jL3NtY193ci5jLTg5MS1cXHRcXHRcXHRpZiAoaWJfZG1hX21hcHBpbmdfZXJyb3IoaWJkZXYsIGxuay1cXHUwMDNld3JfcnhfdjJfZG1hX2FkZHIpKSB7XFxuLS1cXG5uZXQvc21jL3NtY193ci5jLTg5Ny1cXHRcXHRsbmstXFx1MDAzZXdyX3R4X3YyX2RtYV9hZGRyID0gaWJfZG1hX21hcF9zaW5nbGUoaWJkZXYsXFxubmV0L3NtYy9zbWNfd3IuYzo4OTg6XFx0XFx0XFx0bG5rLVxcdTAwM2VsZ3ItXFx1MDAzZXdyX3R4X2J1Zl92MiwgU01DX1dSX0JVRl9WMl9TSVpFLFxcbm5ldC9zbWMvc21jX3dyLmMtODk5LVxcdFxcdFxcdERNQV9UT19ERVZJQ0UpO1xcbi0tXFxubmV0L3NtYy9zbWNfd3IuYy05MzItXFx0XFx0aWJfZG1hX3VubWFwX3NpbmdsZShpYmRldiwgbG5rLVxcdTAwM2V3cl9yeF92Ml9kbWFfYWRkcixcXG5uZXQvc21jL3NtY193ci5jOjkzMzpcXHRcXHRcXHRcXHQgICAgU01DX1dSX0JVRl9WMl9TSVpFLFxcbm5ldC9zbWMvc21jX3dyLmMtOTM0LVxcdFxcdFxcdFxcdCAgICBETUFfRlJPTV9ERVZJQ0UpO1xcbi0tXFxubmV0L3NtYy9zbWNfd3IuYy05MzgtXFx0XFx0aWJfZG1hX3VubWFwX3NpbmdsZShpYmRldiwgbG5rLVxcdTAwM2V3cl90eF92Ml9kbWFfYWRkcixcXG5uZXQvc21jL3NtY193ci5jOjkzOTpcXHRcXHRcXHRcXHQgICAgU01DX1dSX0JVRl9WMl9TSVpFLFxcbm5ldC9zbWMvc21jX3dyLmMtOTQwLVxcdFxcdFxcdFxcdCAgICBETUFfVE9fREVWSUNFKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjM6MzIuNjc0ODc2NjE5WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzODY0NzEzMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uY2VybnMgUmVnYXJkaW5nIEJ1ZmZlciBJbml0aWFsaXphdGlvbiBpbiBgc21jX2xsY19zZW5kX2FkZF9saW5rYCoqXG5cbk9rYXksIHNvIEkndmUganVzdCBub3RpY2VkIHNvbWV0aGluZyBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYy4gSSBrbm93IHRoYXQgYFNNQ19XUl9CVUZfVjJfU0laRWAgaXMgZGVmaW5lZCBhcyA4MTkyIGJ5dGVzLCB3aGljaCBpcyBhIHNpZ25pZmljYW50IGNodW5rIG9mIG1lbW9yeS4gSG93ZXZlciwgSSdtIGxvb2tpbmcgYXQgdGhlIGBzbWNfbGxjX3NlbmRfYWRkX2xpbmtgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSB0aGVyZSBtaWdodCBiZSBhbiBpc3N1ZSB3aXRoIGhvdyB0aGUgYnVmZmVyIGlzIGJlaW5nIGluaXRpYWxpemVkLlxuXG5TcGVjaWZpY2FsbHksIEkgc2VlIHRoYXQgYW4gYGFkZGxsY2Agc3RydWN0dXJlIGlzIGNhc3Qgb250byB0aGUgYnVmZmVyIGFuZCB0aGVuIGFuIGV4dGVuc2lvbiBgZXh0YCBzdHJ1Y3R1cmUgaXMgcGxhY2VkIHJpZ2h0IGFmdGVyIGl0LiBUaGUgY29kZSB0aGVuIHVzZXMgYG1lbXNldGAgdG8gemVybyBvdXQgdGhlIGV4dGVuc2lvbi4gVGhlIHByb2JsZW0gaXMgdGhhdCBgU01DX1dSX1RYX1NJWkVgIGlzIDQ0LCB3aGljaCBpcyB0aGUgc2FtZSBzaXplIGFzIGBzaXplb2YoKmFkZGxsYylgLiBUaHVzLCBJIHNlZSB0aGF0IG9ubHkgODggYnl0ZXMsIDQ0IGVhY2ggaW4gYGFkZGxsY2AgYW5kIGBleHRgLCBhcmUgYmVpbmcgZXhwbGljaXRseSB6ZXJvZWQgb3V0LCBidXQgdGhlIGJ1ZmZlciBpcyAqbXVjaCogbGFyZ2VyIVxuXG5NeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IHdoYXQgaGFwcGVucyB0byB0aGUgcmVtYWluaW5nIDgwMDQgYnl0ZXM/IEFyZSB0aGVzZSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGJ5dGVzIHNlbnQgb3ZlciB0aGUgbmV0d29yaz8gVGhhdCB3b3VsZCBiZSBhIHNlcmlvdXMgc2VjdXJpdHkgY29uY2VybiwgYW5kIGV2ZW4gaWYgaXQgaXNuJ3QsIHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBsZWFkIHRvIGEgdmFyaWV0eSBvZiBzdWJ0bGUgYW5kIGhhcmQtdG8tZGVidWcgaXNzdWVzLiBJIG5lZWQgdG8gdGFrZSBhbm90aGVyIGxvb2sgYXQgdGhlIGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgaG93IHRoZSByZXN0IG9mIHRoZSBidWZmZXIgaXMgaGFuZGxlZCBhbmQgaWYgdGhpcyBpcyBhIHJlYWwgcHJvYmxlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ5NjgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjM6MzguMDYxMzUwNzk3WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc21jL3NtY19sbGMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2ODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2ODA6XFx0XFx0aWYgKGxpbmtfbmV3KSB7XFxuIDY4MTpcXHRcXHRcXHRhZGRsbGMtXFx1MDAzZWxpbmtfbnVtID0gbGlua19uZXctXFx1MDAzZWxpbmtfaWQ7XFxuIDY4MjpcXHRcXHRcXHRodG9uMjQoYWRkbGxjLVxcdTAwM2VzZW5kZXJfcXBfbnVtLCBsaW5rX25ldy1cXHUwMDNlcm9jZV9xcC1cXHUwMDNlcXBfbnVtKTtcXG4gNjgzOlxcdFxcdFxcdGh0b24yNChhZGRsbGMtXFx1MDAzZWluaXRpYWxfcHNuLCBsaW5rX25ldy1cXHUwMDNlcHNuX2luaXRpYWwpO1xcbiA2ODQ6XFx0XFx0XFx0aWYgKHJlcXJlc3AgPT0gU01DX0xMQ19SRVEpXFxuIDY4NTpcXHRcXHRcXHRcXHRhZGRsbGMtXFx1MDAzZXFwX210dSA9IGxpbmtfbmV3LVxcdTAwM2VwYXRoX210dTtcXG4gNjg2OlxcdFxcdFxcdGVsc2VcXG4gNjg3OlxcdFxcdFxcdFxcdGFkZGxsYy1cXHUwMDNlcXBfbXR1ID0gbWluKGxpbmtfbmV3LVxcdTAwM2VwYXRoX210dSxcXG4gNjg4OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgbGlua19uZXctXFx1MDAzZXBlZXJfbXR1KTtcXG4gNjg5OlxcdFxcdH1cXG4gNjkwOlxcdFxcdGlmIChleHQgXFx1MDAyNlxcdTAwMjYgbGlua19uZXcpXFxuIDY5MTpcXHRcXHRcXHRsZW4gKz0gc21jX2xsY19maWxsX2V4dF92MihleHQsIGxpbmssIGxpbmtfbmV3KTtcXG4gNjkyOlxcdFxcdHNtY19sbGNfaW5pdF9tc2dfaGRyKFxcdTAwMjZhZGRsbGMtXFx1MDAzZWhkLCBsaW5rLVxcdTAwM2VsZ3IsIGxlbik7XFxuIDY5MzpcXHRcXHQvKiBzZW5kIGxsYyBtZXNzYWdlICovXFxuIDY5NDpcXHRcXHRpZiAobGluay1cXHUwMDNlbGdyLVxcdTAwM2VzbWNfdmVyc2lvbiA9PSBTTUNfVjIpXFxuIDY5NTpcXHRcXHRcXHRyYyA9IHNtY193cl90eF92Ml9zZW5kKGxpbmssIHBlbmQsIGxlbik7XFxuIDY5NjpcXHRcXHRlbHNlXFxuIDY5NzpcXHRcXHRcXHRyYyA9IHNtY193cl90eF9zZW5kKGxpbmssIHBlbmQpO1xcbiA2OTg6XFx0cHV0X291dDpcXG4gNjk5OlxcdFxcdHNtY193cl90eF9saW5rX3B1dChsaW5rKTtcXG4gNzAwOlxcdFxcdHJldHVybiByYztcXG4gNzAxOlxcdH1cXG4gNzAyOlxcdFxcbiA3MDM6XFx0Lyogc2VuZCBERUxFVEUgTElOSyByZXF1ZXN0IG9yIHJlc3BvbnNlICovXFxuIDcwNDpcXHRpbnQgc21jX2xsY19zZW5kX2RlbGV0ZV9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluaywgdTggbGlua19kZWxfaWQsXFxuIDcwNTpcXHRcXHRcXHRcXHQgICAgIGVudW0gc21jX2xsY19yZXFyZXNwIHJlcXJlc3AsIGJvb2wgb3JkZXJseSxcXG4gNzA2OlxcdFxcdFxcdFxcdCAgICAgdTMyIHJlYXNvbilcXG4gNzA3OlxcdHtcXG4gNzA4OlxcdFxcdHN0cnVjdCBzbWNfbGxjX21zZ19kZWxfbGluayAqZGVsbGxjO1xcbiA3MDk6XFx0XFx0c3RydWN0IHNtY193cl90eF9wZW5kX3ByaXYgKnBlbmQ7XFxuIDcxMDpcXHRcXHRzdHJ1Y3Qgc21jX3dyX2J1ZiAqd3JfYnVmO1xcbiA3MTE6XFx0XFx0aW50IHJjO1xcbiA3MTI6XFx0XFxuIDcxMzpcXHRcXHRpZiAoIXNtY193cl90eF9saW5rX2hvbGQobGluaykpXFxuIDcxNDpcXHRcXHRcXHRyZXR1cm4gLUVOT0xJTks7XFxuIDcxNTpcXHRcXHRyYyA9IHNtY19sbGNfYWRkX3BlbmRpbmdfc2VuZChsaW5rLCBcXHUwMDI2d3JfYnVmLCBcXHUwMDI2cGVuZCk7XFxuIDcxNjpcXHRcXHRpZiAocmMpXFxuIDcxNzpcXHRcXHRcXHRnb3RvIHB1dF9vdXQ7XFxuIDcxODpcXHRcXHRkZWxsbGMgPSAoc3RydWN0IHNtY19sbGNfbXNnX2RlbF9saW5rICopd3JfYnVmO1xcbiA3MTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjIzOjM4LjA2MTQ5Njc3OFoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjYyMTQxNDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQ29uY2VybiBSZWdhcmRpbmcgYHNtY193cl90eF92Ml9zZW5kYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHNtY193cl90eF92Ml9zZW5kKGxpbmssIHBlbmQsIGxlbik7YCBjYWxsIGFuZCBzb21ldGhpbmcgaXMgaW1tZWRpYXRlbHkganVtcGluZyBvdXQgYXQgbWUuIFRoZSBmdW5jdGlvbiBpdHNlbGYgb25seSB0cmFuc21pdHMgYGxlbmAgYnl0ZXMsIHJpZ2h0PyBBbmQgSSBzZWUgaG93IGBsZW5gIGlzIGJlaW5nIGNhbGN1bGF0ZWQ6XG5cbmBgYGNcblx0XHRpbnQgbGVuID0gc2l6ZW9mKCphZGRsbGMpO1xuICAgICAgICAuLi5cblx0XHRpZiAoZXh0IFx1MDAyNlx1MDAyNiBsaW5rX25ldylcblx0XHRcdGxlbiArPSBzbWNfbGxjX2ZpbGxfZXh0X3YyKGV4dCwgbGluaywgbGlua19uZXcpO1xuYGBgXG5cblNvIGBsZW5gIHN0YXJ0cyB3aXRoIHRoZSBzaXplIG9mIGBhZGRsbGNgIGFuZCBwb3RlbnRpYWxseSBnZXRzIGJpZ2dlciBkZXBlbmRpbmcgb24gc29tZSBleHRlbnNpb25zIGFuZCBuZXcgbGluayBjb25maWd1cmF0aW9ucy4gQmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVsZXZhbnQgc3RydWN0dXJlcyBhbmQgdGhlIHBvdGVudGlhbCBjYWxsIHRvIGBzbWNfbGxjX2ZpbGxfZXh0X3YyYCwgdGhlIG1heGltdW0gdmFsdWUgb2YgYGxlbmAgd2lsbCBiZSA4OCBieXRlcyBpbiB0aGlzIHNjZW5hcmlvLlxuXG5UaGUgY3J1Y2lhbCBwb2ludCBoZXJlIGlzIHRoYXQgaWYgYHNtY193cl90eF92Ml9zZW5kYCAqb25seSogc2VuZHMgYGxlbmAgYnl0ZXMsIHRoZW4gYW55IGRhdGEgdGhhdCBtaWdodCBleGlzdCBpbiB0aGUgYnVmZmVyICpiZXlvbmQqIHRob3NlIGBsZW5gIGJ5dGVzIGlzIHNpbXBseSAqbm90KiBnb2luZyB0byBiZSB0cmFuc21pdHRlZCBvdmVyIHRoZSBuZXR3b3JrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGBzbWNfd3JfdHhfdjJfc2VuZGAgYmVoYXZpb3IgaW4gbW9yZSBkZXRhaWwgYW5kIGNvbmZpcm0gbXkgY3VycmVudCBjb25jZXJucy4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZGl2ZSBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgc21jX3dyX3R4X3YyX3NlbmRgIHRvIGVuc3VyZSB0aGlzIHNwZWNpZmljIGFzcGVjdCBpcyBoYW5kbGVkIGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYzMDYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDoyMzo0Mi4zMjM2NDA5MTFaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTYyMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NtYy9zbWNfd3IuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzYsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMzY6XFx0aW50IHNtY193cl90eF92Ml9zZW5kKHN0cnVjdCBzbWNfbGluayAqbGluaywgc3RydWN0IHNtY193cl90eF9wZW5kX3ByaXYgKnByaXYsXFxuIDMzNzpcXHRcXHRcXHQgICAgICBpbnQgbGVuKVxcbiAzMzg6XFx0e1xcbiAzMzk6XFx0XFx0aW50IHJjO1xcbiAzNDA6XFx0XFxuIDM0MTpcXHRcXHRsaW5rLVxcdTAwM2V3cl90eF92Ml9pYi1cXHUwMDNlc2dfbGlzdFswXS5sZW5ndGggPSBsZW47XFxuIDM0MjpcXHRcXHRpYl9yZXFfbm90aWZ5X2NxKGxpbmstXFx1MDAzZXNtY2liZGV2LVxcdTAwM2Vyb2NlX2NxX3NlbmQsXFxuIDM0MzpcXHRcXHRcXHRcXHQgSUJfQ1FfTkVYVF9DT01QIHwgSUJfQ1FfUkVQT1JUX01JU1NFRF9FVkVOVFMpO1xcbiAzNDQ6XFx0XFx0cmMgPSBpYl9wb3N0X3NlbmQobGluay1cXHUwMDNlcm9jZV9xcCwgbGluay1cXHUwMDNld3JfdHhfdjJfaWIsIE5VTEwpO1xcbiAzNDU6XFx0XFx0aWYgKHJjKSB7XFxuIDM0NjpcXHRcXHRcXHRzbWNfd3JfdHhfcHV0X3Nsb3QobGluaywgcHJpdik7XFxuIDM0NzpcXHRcXHRcXHRzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKGxpbmspO1xcbiAzNDg6XFx0XFx0fVxcbiAzNDk6XFx0XFx0cmV0dXJuIHJjO1xcbiAzNTA6XFx0fVxcbiAzNTE6XFx0XFxuIDM1MjpcXHQvKiBTZW5kIHByZXBhcmVkIFdSIHNsb3QgdmlhIGliX3Bvc3Rfc2VuZCBhbmQgd2FpdCBmb3Igc2VuZCBjb21wbGV0aW9uXFxuIDM1MzpcXHQgKiBub3RpZmljYXRpb24uXFxuIDM1NDpcXHQgKiBAcHJpdjogcG9pbnRlciB0byBzbWNfd3JfdHhfcGVuZF9wcml2IGlkZW50aWZ5aW5nIHByZXBhcmVkIG1lc3NhZ2UgYnVmZmVyXFxuIDM1NTpcXHQgKi9cXG4gMzU2OlxcdGludCBzbWNfd3JfdHhfc2VuZF93YWl0KHN0cnVjdCBzbWNfbGluayAqbGluaywgc3RydWN0IHNtY193cl90eF9wZW5kX3ByaXYgKnByaXYsXFxuIDM1NzpcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHRpbWVvdXQpXFxuIDM1ODpcXHR7XFxuIDM1OTpcXHRcXHRzdHJ1Y3Qgc21jX3dyX3R4X3BlbmQgKnBlbmQ7XFxuIDM2MDpcXHRcXHR1MzIgcG5kX2lkeDtcXG4gMzYxOlxcdFxcdGludCByYztcXG4gMzYyOlxcdFxcbiAzNjM6XFx0XFx0cGVuZCA9IGNvbnRhaW5lcl9vZihwcml2LCBzdHJ1Y3Qgc21jX3dyX3R4X3BlbmQsIHByaXYpO1xcbiAzNjQ6XFx0XFx0cGVuZC1cXHUwMDNlY29tcGxfcmVxdWVzdGVkID0gMTtcXG4gMzY1OlxcdFxcdHBuZF9pZHggPSBwZW5kLVxcdTAwM2VpZHg7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjIzOjQyLjMyMzczODU3MVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDY0MTg0NjkyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgU01DIFdSIFRYIENvZGUgYW5kIFBvdGVudGlhbCBJc3N1ZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgd2FzIG9uIHRoZSBwb3NzaWJpbGl0eSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBzZW50IG92ZXIgdGhlIG5ldHdvcmsuIFRoZSBjb2RlIHNlZW1lZCB0byBpbml0aWFsaXplIGEgYnVmZmVyIHdpdGggYGxlbmAgYnl0ZXMsIGFuZCB0aGVuIGV4cGxpY2l0bHkgemVybyBvdXQgdGhpcyBidWZmZXIgd2l0aCBhIGBtZW1zZXRgLiBUaGlzIGxvb2tzIGNvcnJlY3QsIGJ1dCBJIGdvdCBjb25jZXJuZWQgYWJvdXQgd2hhdCB3b3VsZCBoYXBwZW4gaWYgdGhlIHdyaXRlIGJ1ZmZlciB3YXMgemVyb2VkIGFmdGVyIGl0IHdhcyB1c2VkLiBJIHdhcyBjb25jZXJuZWQgYWJvdXQgYHNtY193cl90eF9wdXRfc2xvdGAgemVyb2luZyB0aGUgYnVmZmVyLCB0aGVuIGBzbWNfd3JfdHhfZ2V0X3YyX3Nsb3RgIHJldHVybmluZyBhIHBvaW50ZXIgdG8gdGhhdCB6ZXJvZWQgYnVmZmVyLCBhbmQgYSBzdWJzZXF1ZW50IHVzZSB3b3VsZCBkZXJlZmVyZW5jZSBhIE5VTEwgcG9pbnRlci4gIEl0IGxvb2tlZCBsaWtlIGEgY2xlYXIgcG90ZW50aWFsIGZvciBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgd2hpY2ggaXMgYSBzdGFuZGFyZCBrZXJuZWwgb29wcy4gQnV0IGFmdGVyIHRyYWNpbmcgdGhlIGxvZ2ljLCB0aGlzIG9ubHkgaGFwcGVuZWQgb24gZXJyb3JzIG9yIGV4cGxpY2l0IGFib3J0cy4gVGhpcyBtZWFudCB0aGVyZSB3YXMgTk8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhayBpc3N1ZS5cblxuVGhlbiBJIGNvbnNpZGVyZWQgdGhlIGNoYW5nZSBmcm9tIGB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dGAgdG8gdGhlIG9wZW4tY29kZWQgd2FpdCBsb29wLiAgVGhlIG9yaWdpbmFsIGNvbmNlcm4gd2FzIHRoYXQgYHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0YCBtaWdodCBldmFsdWF0ZSBhIGNvbmRpdGlvbiB3aXRoIHNpZGUgZWZmZWN0cywgbGlrZSBgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RfaW5kZXhgLCB3aGljaCBjYWxscyBgdGVzdF9hbmRfc2V0X2JpdGAuIEl0J3MgYSBtYWNybywgYW5kIG15IGNvbmNlcm4gd2FzIHRoYXQgY29uZGl0aW9uIG1pZ2h0IGJlIGV2YWx1YXRlZCBtdWx0aXBsZSB0aW1lcywgcG90ZW50aWFsbHkgbGVha2luZyBzbG90cy4gIEhvd2V2ZXIsIGFmdGVyIGV4YW1pbmluZyB0aGUgbWFjcm8gZGVmaW5pdGlvbiwgSSBkb24ndCBzZWUgaG93IHRoYXQgaXMgcG9zc2libGUsIGFzIHRoZSBtYWNybyBzZWVtcyB0byBvbmx5IGV2YWx1YXRlIHRoZSBjb25kaXRpb24gb25jZS5cblxuVGhlICpyZWFsKiBpc3N1ZSB3aXRoIGB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dGAgaXMgdGhhdCBpdCB1c2VzIGBwcmVwYXJlX3RvX3dhaXRgIHdoaWNoIGFkZHMgdGFza3MgdG8gYSAqbm9uLWV4Y2x1c2l2ZSogd2FpdCBxdWV1ZS4gVGhpcyBtZWFucyBgd2FrZV91cGAgd291bGQgd2FrZSB1cCBhbGwgd2FpdGluZyB0aHJlYWRzLiAgVGhpcyBsZWFkcyB0byBhIHRodW5kZXJpbmcgaGVyZCBwcm9ibGVtLiBUaGUgY2hhbmdlIHRvIGBwcmVwYXJlX3RvX3dhaXRfZXhjbHVzaXZlYCB3aXRoIHRoZSBvcGVuLWNvZGVkIGxvb3AgdXNpbmcgYHdha2VfdXBgIGZpeGVzIHRoaXMuIEl0IG9wdGltaXplcyBwZXJmb3JtYW5jZSBhbmQgcHJldmVudHMgcG90ZW50aWFsIENQVSBzcGlrZXMsIGFuZCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgY29uY2VybnMuXG5cbkZpbmFsbHksIEkgcmV2aXNpdGVkIHRoZSBgbWVtc2V0YCBjaGFuZ2UuIE9yaWdpbmFsbHksIHRoZSBjb2RlIHdhcyB6ZXJvaW5nIHRoZSAqYWRkcmVzcyogb2YgYSBwb2ludGVyIGluc3RlYWQgb2YgdGhlIG1lbW9yeSB0aGUgcG9pbnRlciB3YXMgcG9pbnRpbmcgdG8uIEJ5IGNoYW5naW5nIHRoaXMgdG8gYG1lbXNldGAgb24gdGhlIHBvaW50ZXIgaXRzZWxmLCBpdCBmaXhlZCB0aGUgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG1lbnRpb25lZCBhYm92ZS4gVGhpcyBpcyBjb3JyZWN0LiBUaGUgY29kZSBtYWtlcyBpdCBzbyB0aGF0IG9ubHkgZXhwbGljaXRseSB6ZXJvZWQgYW5kIGluaXRpYWxpemVkIGJ5dGVzIGFyZSBzZW50IG92ZXIgdGhlIG5ldHdvcmssIGFuZCB0aGUgYnVmZmVyIGlzIHplcm9lZCBvdXQgYnkgYHNtY19sbGNfc2VuZF9hZGRfbGlua2AuIFNvLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrcy4gSSBzaG91bGQgcmV2aWV3IG90aGVyIHVzZXJzIG9mIGBzbWNfd3JfdHhfZ2V0X3YyX3Nsb3RgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzM2NCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDoyNDowMi45NjU1ODc2NjdaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NDU5MTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNtY193cl90eF9nZXRfdjJfc2xvdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL3NtY19sbGMuYz00MjI9c3RhdGljIGludCBzbWNfbGxjX2FkZF9wZW5kaW5nX3NlbmRfdjIoc3RydWN0IHNtY19saW5rICpsaW5rLFxcbi0tXFxubmV0L3NtYy9zbWNfbGxjLmMtNDI3LVxcbm5ldC9zbWMvc21jX2xsYy5jOjQyODpcXHRyYyA9IHNtY193cl90eF9nZXRfdjJfc2xvdChsaW5rLCBzbWNfbGxjX3R4X2hhbmRsZXIsIHdyX2J1ZiwgcGVuZCk7XFxubmV0L3NtYy9zbWNfbGxjLmMtNDI5LVxcdGlmIChyYyBcXHUwMDNjIDApXFxuLS1cXG5uZXQvc21jL3NtY193ci5jPTE5NT1pbnQgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3Qoc3RydWN0IHNtY19saW5rICpsaW5rLFxcbi0tXFxubmV0L3NtYy9zbWNfd3IuYy0yNTktXFxubmV0L3NtYy9zbWNfd3IuYzoyNjA6aW50IHNtY193cl90eF9nZXRfdjJfc2xvdChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXFxubmV0L3NtYy9zbWNfd3IuYy0yNjEtXFx0XFx0XFx0ICBzbWNfd3JfdHhfaGFuZGxlciBoYW5kbGVyLFxcbi0tXFxubmV0L3NtYy9zbWNfd3IuaD0xMTM9aW50IHNtY193cl90eF9nZXRfZnJlZV9zbG90KHN0cnVjdCBzbWNfbGluayAqbGluaywgc21jX3dyX3R4X2hhbmRsZXIgaGFuZGxlcixcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmgtMTE2LVxcdFxcdFxcdCAgICBzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRfcHJpdiAqKndyX3BlbmRfcHJpdik7XFxubmV0L3NtYy9zbWNfd3IuaDoxMTc6aW50IHNtY193cl90eF9nZXRfdjJfc2xvdChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXFxubmV0L3NtYy9zbWNfd3IuaC0xMTgtXFx0XFx0XFx0ICBzbWNfd3JfdHhfaGFuZGxlciBoYW5kbGVyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDoyNDowMy4wMTUwNTA5NzJaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA0Nzk2MzE3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipUcmFjaW5nIHRoZSBDYWxsZXJzIG9mIGBzbWNfbGxjX2FkZF9wZW5kaW5nX3NlbmRfdjJgKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGZsb3cgaGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHdoZXJlIGBzbWNfbGxjX2FkZF9wZW5kaW5nX3NlbmRfdjJgIGlzIGFjdHVhbGx5ICp1c2VkKi4gSXQgbG9va3MgbGlrZSB0aGUgY29kZSBvbmx5IHNob3dzIGBzbWNfbGxjX2FkZF9wZW5kaW5nX3NlbmRfdjJgIGJlaW5nIGNhbGxlZCBieSB0aGUgZnVuY3Rpb24gYHNtY19sbGNfYWRkX3BlbmRpbmdfc2VuZF92MmAgaXRzZWxmLiBOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdobydzIGNhbGxpbmcgKnRoYXQqIGZ1bmN0aW9uLiBJIHNlZSB0aGF0IGBzbWNfbGxjX2FkZF9wZW5kaW5nX3NlbmRfdjJgIGlzIG9ubHkgY2FsbGVkIGJ5IHR3byBmdW5jdGlvbnM6IGBzbWNfbGxjX3NlbmRfYWRkX2xpbmtgIGFuZCBgc21jX2xsY19zZW5kX3JlcXVlc3RfYWRkX2xpbmtgLiBJIHRoaW5rIGl0IGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBgc21jX2xsY19zZW5kX3JlcXVlc3RfYWRkX2xpbmtgIGZ1bmN0aW9uLCBzaW5jZSBpdCBzZWVtcyB0byBiZSB0aGUgbW9zdCBjcml0aWNhbCBvZiB0aGUgdHdvIHRvIGNoZWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDg2NywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjI0OjA2LjA2MzAxNzEzMVoiLCJTZXEiOjUyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjM3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NtYy9zbWNfbGxjLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTEyNixcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTEyNjpcXHRzdGF0aWMgdm9pZCBzbWNfbGxjX3NlbmRfcmVxdWVzdF9hZGRfbGluayhzdHJ1Y3Qgc21jX2xpbmsgKmxpbmspXFxuMTEyNzpcXHR7XFxuMTEyODpcXHRcXHRzdHJ1Y3Qgc21jX2xsY19tc2dfcmVxX2FkZF9saW5rX3YyICpsbGM7XFxuMTEyOTpcXHRcXHRzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRfcHJpdiAqcGVuZDtcXG4xMTMwOlxcdFxcdHN0cnVjdCBzbWNfd3JfdjJfYnVmICp3cl9idWY7XFxuMTEzMTpcXHRcXHRzdHJ1Y3Qgc21jX2dpZGxpc3QgZ2lkbGlzdDtcXG4xMTMyOlxcdFxcdGludCByYywgbGVuLCBpO1xcbjExMzM6XFx0XFxuMTEzNDpcXHRcXHRpZiAoIXNtY193cl90eF9saW5rX2hvbGQobGluaykpXFxuMTEzNTpcXHRcXHRcXHRyZXR1cm47XFxuMTEzNjpcXHRcXHRpZiAobGluay1cXHUwMDNlbGdyLVxcdTAwM2V0eXBlID09IFNNQ19MR1JfU1lNTUVUUklDIHx8XFxuMTEzNzpcXHRcXHQgICAgbGluay1cXHUwMDNlbGdyLVxcdTAwM2V0eXBlID09IFNNQ19MR1JfQVNZTU1FVFJJQ19QRUVSKVxcbjExMzg6XFx0XFx0XFx0Z290byBwdXRfb3V0O1xcbjExMzk6XFx0XFxuMTE0MDpcXHRcXHRzbWNfZmlsbF9naWRfbGlzdChsaW5rLVxcdTAwM2VsZ3IsIFxcdTAwMjZnaWRsaXN0LCBsaW5rLVxcdTAwM2VzbWNpYmRldiwgbGluay1cXHUwMDNlZ2lkKTtcXG4xMTQxOlxcdFxcdGlmIChnaWRsaXN0LmxlbiBcXHUwMDNjPSAxKVxcbjExNDI6XFx0XFx0XFx0Z290byBwdXRfb3V0O1xcbjExNDM6XFx0XFxuMTE0NDpcXHRcXHRyYyA9IHNtY19sbGNfYWRkX3BlbmRpbmdfc2VuZF92MihsaW5rLCBcXHUwMDI2d3JfYnVmLCBcXHUwMDI2cGVuZCk7XFxuMTE0NTpcXHRcXHRpZiAocmMpXFxuMTE0NjpcXHRcXHRcXHRnb3RvIHB1dF9vdXQ7XFxuMTE0NzpcXHRcXHRsbGMgPSAoc3RydWN0IHNtY19sbGNfbXNnX3JlcV9hZGRfbGlua192MiAqKXdyX2J1ZjtcXG4xMTQ4OlxcdFxcdG1lbXNldChsbGMsIDAsIFNNQ19XUl9UWF9TSVpFKTtcXG4xMTQ5OlxcdFxcbjExNTA6XFx0XFx0bGxjLVxcdTAwM2VoZC5jb21tb24ubGxjX3R5cGUgPSBTTUNfTExDX1JFUV9BRERfTElOSztcXG4xMTUxOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBnaWRsaXN0LmxlbjsgaSsrKVxcbjExNTI6XFx0XFx0XFx0bWVtY3B5KGxsYy1cXHUwMDNlZ2lkW2ldLCBnaWRsaXN0Lmxpc3RbaV0sIHNpemVvZihnaWRsaXN0Lmxpc3RbMF0pKTtcXG4xMTUzOlxcdFxcdGxsYy1cXHUwMDNlZ2lkX2NudCA9IGdpZGxpc3QubGVuO1xcbjExNTQ6XFx0XFx0bGVuID0gc2l6ZW9mKCpsbGMpICsgKGdpZGxpc3QubGVuICogc2l6ZW9mKGdpZGxpc3QubGlzdFswXSkpO1xcbjExNTU6XFx0XFx0c21jX2xsY19pbml0X21zZ19oZHIoXFx1MDAyNmxsYy1cXHUwMDNlaGQsIGxpbmstXFx1MDAzZWxnciwgbGVuKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjQ6MDYuMDYzMTQxOTgxWiIsIlNlcSI6NTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2Mjc2NDAxNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZXF1ZXN0IEFkZGl0aW9uIG9mIGEgTGluayBpbiB0aGUgU01DIExheWVyKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCB0aGUgYHNtY19sbGNfc2VuZF9yZXF1ZXN0X2FkZF9saW5rYCBmdW5jdGlvbiwgYW5kIEkgc2VlIHRoZXkncmUgaW5pdGlhbGl6aW5nIHRoZSBgbGxjYCB2YXJpYWJsZSB0byBwb2ludCB0byBhIGJ1ZmZlciAoYHdyX2J1ZmApIGFuZCBjYXN0aW5nIGl0IGFzIGEgYHN0cnVjdCBzbWNfbGxjX21zZ19yZXFfYWRkX2xpbmtfdjJgLiBNYWtlcyBzZW5zZSwgd2UncmUgYnVpbGRpbmcgYSByZXF1ZXN0IG1lc3NhZ2UgZm9yIGFkZGluZyBhIGxpbmsuIFRoZXkncmUgdGhlbiB6ZXJvaW5nIG91dCB0aGUgYnVmZmVyIHVzaW5nIGBtZW1zZXRgLCB1c2luZyBgU01DX1dSX1RYX1NJWkVgLlxuXG5CdXQgd2FpdCBhIG1pbnV0ZS4uLiBgU01DX1dSX1RYX1NJWkVgIGlzIGRlZmluZWQgYXMgNDQgYnl0ZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCdzIHRoZSBjb3JyZWN0IHNpemUuIFRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlLCBpcyB0aGF0IHJlYWxseSBsYXJnZSBlbm91Z2ggZm9yIGBzdHJ1Y3Qgc21jX2xsY19tc2dfcmVxX2FkZF9saW5rX3YyYD8gSSBoYXZlIHRvIGNvbmZpcm0gdGhlIHN0cnVjdHVyZSBzaXplLCBpbiBjYXNlIHdlIGhhdmUgYSBidWZmZXIgb3ZlcmZsb3cuIFRoaXMgaXMgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBpZiB0aGUgc3RydWN0IGlzIGxhcmdlciB0aGFuIDQ0IGJ5dGVzIVxuXG5cbiIsIklucHV0VG9rZW5zIjozMTg0MywiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjI0OjA5LjY5MDc4NDkyNFoiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ2MDQxNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IHNtY19sbGNfbXNnX3JlcV9hZGRfbGlua192MiBcXFxce1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL3NtY19sbGMuYz04Nj1zdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtfdjJfZXh0IHtcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jLTEwMy1cXG5uZXQvc21jL3NtY19sbGMuYzoxMDQ6c3RydWN0IHNtY19sbGNfbXNnX3JlcV9hZGRfbGlua192MiB7XFxubmV0L3NtYy9zbWNfbGxjLmMtMTA1LVxcdHN0cnVjdCBzbWNfbGxjX2hkciBoZDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjQ6MDkuNzM1Mzk0OTg5WiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NjU3NjQ5NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgc3RydWN0IHNtY19sbGNfbXNnX3JlcV9hZGRfbGlua192MmAgU3RydWN0dXJlKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHN0cnVjdCBzbWNfbGxjX21zZ19yZXFfYWRkX2xpbmtfdjJgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCdzIG5ldyBvciBkaWZmZXJlbnQgaGVyZSBjb21wYXJlZCB0byB0aGUgcHJldmlvdXMgdmVyc2lvbiBvciBzaW1pbGFyIHN0cnVjdHVyZXM/IElzIHRoaXMgYSBjb21wbGV0ZSByZXdyaXRlLCBhIG1pbm9yIHR3ZWFrLCBvciBhbiBpbmNyZW1lbnRhbCBpbXByb3ZlbWVudD8gSSdtIGxvb2tpbmcgZm9yIHRoZSBrZXkgZmllbGRzIHRoYXQgZGVmaW5lIGxpbmsgYWRkaXRpb24sIHBhcnRpY3VsYXJseSBhbnl0aGluZyByZWxhdGVkIHRvIHZlcnNpb25pbmcsIHNlY3VyaXR5LCBvciBwZXJmb3JtYW5jZSBlbmhhbmNlbWVudHMsIGFuZCBob3cgdGhleSBpbnRlcmFjdC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyBob3cgdGhpcyBpbXBhY3RzIHRoZSBvdmVyYWxsIGZsb3cgb2YgdGhlIExpbmsgTGF5ZXIgQ29udHJvbCAoTExDKSBtZXNzYWdlcyBpbiB0aGUgU01DIHByb3RvY29sIGFuZCB3aGVyZSBpdCBmaXRzIGluIHRoZSBzZXF1ZW5jZS4gSSBhbnRpY2lwYXRlIGl0J2xsIGhvbGQgaW5mb3JtYXRpb24gbGlrZSBwZWVyIGFkZHJlc3NlcywgY29ubmVjdGlvbiBwYXJhbWV0ZXJzLCBhbmQgcmVzb3VyY2UgYWxsb2NhdGlvbiBkZXRhaWxzLiBUaGUgXCJ2MlwiIHN0cm9uZ2x5IGltcGxpZXMgYSBwcm90b2NvbCBldm9sdXRpb24sIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb21wYXRpYmlsaXR5IGltcGxpY2F0aW9uc+KAlGlzIGl0IGJhY2t3YXJkIGNvbXBhdGlibGUsIG9yIGRvIHdlIG5lZWQgdmVyc2lvbiBuZWdvdGlhdGlvbj8gTGV0J3MgY2hlY2sgdGhlIGhlYWRlciBmaWxlcyBhbmQgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGZvciB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIzNjEsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDoyNDoxMy42MDExNjIyNjlaIiwiU2VxIjo1NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyNTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zbWMvc21jX2xsYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwNDpcXHRzdHJ1Y3Qgc21jX2xsY19tc2dfcmVxX2FkZF9saW5rX3YyIHtcXG4gMTA1OlxcdFxcdHN0cnVjdCBzbWNfbGxjX2hkciBoZDtcXG4gMTA2OlxcdFxcdHU4IHJlc2VydmVkWzIwXTtcXG4gMTA3OlxcdFxcdHU4IGdpZF9jbnQ7XFxuIDEwODpcXHRcXHR1OCByZXNlcnZlZDJbM107XFxuIDEwOTpcXHRcXHR1OCBnaWRbXVtTTUNfR0lEX1NJWkVdO1xcbiAxMTA6XFx0fTtcXG4gMTExOlxcdFxcbiAxMTI6XFx0I2RlZmluZSBTTUNfTExDX1JLRVlTX1BFUl9DT05UX01TR1xcdDJcXG4gMTEzOlxcdFxcbiAxMTQ6XFx0c3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rX2NvbnQge1xcdC8qIHR5cGUgMHgwMyAqL1xcbiAxMTU6XFx0XFx0c3RydWN0IHNtY19sbGNfaGRyIGhkO1xcbiAxMTY6XFx0XFx0dTggbGlua19udW07XFxuIDExNzpcXHRcXHR1OCBudW1fcmtleXM7XFxuIDExODpcXHRcXHR1OCByZXNlcnZlZDJbMl07XFxuIDExOTpcXHRcXHRzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtfY29udF9ydCBydFtTTUNfTExDX1JLRVlTX1BFUl9DT05UX01TR107XFxuIDEyMDpcXHRcXHR1OCByZXNlcnZlZFs0XTtcXG4gMTIxOlxcdH0gX19wYWNrZWQ7XFx0XFx0XFx0LyogZm9ybWF0IGRlZmluZWQgaW4gUkZDNzYwOSAqL1xcbiAxMjI6XFx0XFxuIDEyMzpcXHQjZGVmaW5lIFNNQ19MTENfRkxBR19ERUxfTElOS19BTExcXHQweDQwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjI0OjEzLjYwMTI4NjIwOVoiLCJTZXEiOjU3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTY1ODIzNDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU01DIExMQyBNZXNzYWdlIFJlcXVlc3QqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgYHN0cnVjdCBzbWNfbGxjX21zZ19yZXFfYWRkX2xpbmtfdjJgLiBJIHNlZSBpdCdzIGdvdCBhIGZpeGVkIGhlYWRlciAoYGhkYCkgb2YgMTYgYnl0ZXMsIGEgcmVzZXJ2ZWQgc3BhY2UgKGByZXNlcnZlZGApIGZvciAyMCBieXRlcywgYSBgZ2lkX2NudGAgd2hpY2ggaXMganVzdCAxIGJ5dGUsIGFuZCBhbm90aGVyIDMgYnl0ZXMgb2YgYHJlc2VydmVkMmAuIFRoYXQncyBhIHRvdGFsIG9mIDQwIGJ5dGVzIGZvciB0aGUgZml4ZWQgcG9ydGlvbi4gVGhlbiwgd2UgaGF2ZSB0aGUgdmFyaWFibGUtbGVuZ3RoIGBnaWRgIGFycmF5LCBgZ2lkW11bU01DX0dJRF9TSVpFXWAsIHdoZXJlIGBTTUNfR0lEX1NJWkVgIGlzLCBJIHJlY2FsbCwgMTYuXG5cbkhtbSwgdGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBJIHNlZSBhIGBtZW1zZXQobGxjLCAwLCBTTUNfV1JfVFhfU0laRSk7YCB3aGljaCBjbGVhcnMgNDQgYnl0ZXMuIEJ1dCB0aGVuIHRoZSBzaXplIGlzIGNhbGN1bGF0ZWQgZGlmZmVyZW50bHk6IGBsZW4gPSBzaXplb2YoKmxsYykgKyAoZ2lkbGlzdC5sZW4gKiBzaXplb2YoZ2lkbGlzdC5saXN0WzBdKSk7YC4gYHNpemVvZigqbGxjKWAgY29ycmVjdGx5IGdpdmVzIDQwIGJ5dGVzLCBidXQgd2hhdCdzIHRoZSB1cHBlciBib3VuZCBvbiBgZ2lkbGlzdC5sZW5gPyBJIG5lZWQgdG8gY2hlY2sgYHNtY19maWxsX2dpZF9saXN0YCB0byBzZWUgaG93IHRoYXQncyBoYW5kbGVkLiBMb29rcyBsaWtlIHRoaXMgY291bGQgY3JlYXRlIGEgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvdyB2dWxuZXJhYmlsaXR5LiBMZXQncyBzZWUgaG93IHRoZXkgaGFuZGxlIGl0Li4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMDE4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjQ6MTguNTY3MTExNzkxWiIsIlNlcSI6NTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDEzMTQ0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbWNfZmlsbF9naWRfbGlzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL2FmX3NtYy5jPTExODg9c3RhdGljIGludCBzbWNfY29ubmVjdF9jbGMoc3RydWN0IHNtY19zb2NrICpzbWMsXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTEyMDItXFxubmV0L3NtYy9hZl9zbWMuYzoxMjAzOnZvaWQgc21jX2ZpbGxfZ2lkX2xpc3Qoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsXFxubmV0L3NtYy9hZl9zbWMuYy0xMjA0LVxcdFxcdCAgICAgICBzdHJ1Y3Qgc21jX2dpZGxpc3QgKmdpZGxpc3QsXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jPTEyNjc9c3RhdGljIGludCBzbWNfY29ubmVjdF9yZG1hKHN0cnVjdCBzbWNfc29jayAqc21jLFxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0xMzU5LVxcdFxcdGlmIChpbmktXFx1MDAzZWZpcnN0X2NvbnRhY3RfbG9jYWwpXFxubmV0L3NtYy9hZl9zbWMuYzoxMzYwOlxcdFxcdFxcdHNtY19maWxsX2dpZF9saXN0KGxpbmstXFx1MDAzZWxnciwgXFx1MDAyNmluaS1cXHUwMDNlc21jcnYyLmdpZGxpc3QsXFxubmV0L3NtYy9hZl9zbWMuYy0xMzYxLVxcdFxcdFxcdFxcdFxcdCAgbGluay1cXHUwMDNlc21jaWJkZXYsIGxpbmstXFx1MDAzZWdpZCk7XFxuLS1cXG5uZXQvc21jL3NtYy5oPTQxOT12b2lkIHNtY19jbG9zZV9ub25fYWNjZXB0ZWQoc3RydWN0IHNvY2sgKnNrKTtcXG5uZXQvc21jL3NtYy5oOjQyMDp2b2lkIHNtY19maWxsX2dpZF9saXN0KHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLFxcbm5ldC9zbWMvc21jLmgtNDIxLVxcdFxcdCAgICAgICBzdHJ1Y3Qgc21jX2dpZGxpc3QgKmdpZGxpc3QsXFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYz0xMTI2PXN0YXRpYyB2b2lkIHNtY19sbGNfc2VuZF9yZXF1ZXN0X2FkZF9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluaylcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jLTExMzktXFxubmV0L3NtYy9zbWNfbGxjLmM6MTE0MDpcXHRzbWNfZmlsbF9naWRfbGlzdChsaW5rLVxcdTAwM2VsZ3IsIFxcdTAwMjZnaWRsaXN0LCBsaW5rLVxcdTAwM2VzbWNpYmRldiwgbGluay1cXHUwMDNlZ2lkKTtcXG5uZXQvc21jL3NtY19sbGMuYy0xMTQxLVxcdGlmIChnaWRsaXN0LmxlbiBcXHUwMDNjPSAxKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDoyNDoxOC42MTEyNDY1NzZaIiwiU2VxIjo1OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0NTAzNzY4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgc21jX2ZpbGxfZ2lkX2xpc3RgIGluIGBuZXQvc21jL2FmX3NtYy5jYCoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGd1dHMgb2YgdGhlIFNNQyBjb2RlLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIGBzbWNfZmlsbF9naWRfbGlzdGAgd2l0aGluIGBuZXQvc21jL2FmX3NtYy5jYC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIHBvcHVsYXRpbmcgdGhlIEdJRCBsaXN0LCB3aGljaCBpcyBhIGNyaXRpY2FsIHBhcnQgb2YgdGhlIFNNQyAoU2hhcmVkIE1lbW9yeSBDb21tdW5pY2F0aW9ucykgc2V0dXAuIEknbSBleHBlY3RpbmcgdGhpcyB0byBoYW5kbGUgdGhlIG1hcHBpbmcgb2YgZ2xvYmFsIGlkZW50aWZpZXJzIHRvIHRoZSB1bmRlcmx5aW5nIHNoYXJlZCBtZW1vcnkgcmVnaW9ucy4gVW5kZXJzdGFuZGluZyBob3cgaXQgaGFuZGxlcyBHSUQgYWxsb2NhdGlvbiwgcG90ZW50aWFsbHkgd2l0aCB1c2VyIHNwYWNlIGludGVyYWN0aW9ucyBvciB3aXRoaW4gdGhlIGtlcm5lbCBpdHNlbGYsIHdpbGwgYmUga2V5IHRvIGdyYXNwaW5nIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMuIEknbSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmZhY2VzIHdpdGggb3RoZXIgU01DIGNvbXBvbmVudHMsIHN1Y2ggYXMgc29ja2V0IGNyZWF0aW9uL21hbmFnZW1lbnQgYW5kIHRoZSBzaGFyZWQgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMuIFRoZSBnb2FsIGlzIHRvIGVpdGhlciByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb3IgcXVpY2tseSBpZGVudGlmeSBhIHNwZWNpZmljIGFyZWEgb2YgaW50ZXJlc3QuIEFueSBzdWJ0bGUgdGhyZWFkaW5nIG9yIGxvY2tpbmcgbWVjaGFuaXNtcyB3aXRoaW4gdGhpcyByb3V0aW5lIHdpbGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDA1MCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjI0OjIyLjE1NjI4NjU0WiIsIlNlcSI6NjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NzM3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc21jL2FmX3NtYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMDMsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyMDM6XFx0dm9pZCBzbWNfZmlsbF9naWRfbGlzdChzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncixcXG4xMjA0OlxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc21jX2dpZGxpc3QgKmdpZGxpc3QsXFxuMTIwNTpcXHRcXHRcXHQgICAgICAgc3RydWN0IHNtY19pYl9kZXZpY2UgKmtub3duX2RldiwgdTggKmtub3duX2dpZClcXG4xMjA2OlxcdHtcXG4xMjA3OlxcdFxcdHN0cnVjdCBzbWNfaW5pdF9pbmZvICphbHRfaW5pID0gTlVMTDtcXG4xMjA4OlxcdFxcbjEyMDk6XFx0XFx0bWVtc2V0KGdpZGxpc3QsIDAsIHNpemVvZigqZ2lkbGlzdCkpO1xcbjEyMTA6XFx0XFx0bWVtY3B5KGdpZGxpc3QtXFx1MDAzZWxpc3RbZ2lkbGlzdC1cXHUwMDNlbGVuKytdLCBrbm93bl9naWQsIFNNQ19HSURfU0laRSk7XFxuMTIxMTpcXHRcXG4xMjEyOlxcdFxcdGFsdF9pbmkgPSBremFsbG9jX29iaigqYWx0X2luaSk7XFxuMTIxMzpcXHRcXHRpZiAoIWFsdF9pbmkpXFxuMTIxNDpcXHRcXHRcXHRnb3RvIG91dDtcXG4xMjE1OlxcdFxcbjEyMTY6XFx0XFx0YWx0X2luaS1cXHUwMDNldmxhbl9pZCA9IGxnci1cXHUwMDNldmxhbl9pZDtcXG4xMjE3OlxcdFxcdGFsdF9pbmktXFx1MDAzZWNoZWNrX3NtY3J2MiA9IHRydWU7XFxuMTIxODpcXHRcXHRhbHRfaW5pLVxcdTAwM2VzbWNydjIuc2FkZHIgPSBsZ3ItXFx1MDAzZXNhZGRyO1xcbjEyMTk6XFx0XFx0c21jX3BuZXRfZmluZF9hbHRfcm9jZShsZ3IsIGFsdF9pbmksIGtub3duX2Rldik7XFxuMTIyMDpcXHRcXG4xMjIxOlxcdFxcdGlmICghYWx0X2luaS1cXHUwMDNlc21jcnYyLmliX2Rldl92MilcXG4xMjIyOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjEyMjM6XFx0XFxuMTIyNDpcXHRcXHRtZW1jcHkoZ2lkbGlzdC1cXHUwMDNlbGlzdFtnaWRsaXN0LVxcdTAwM2VsZW4rK10sIGFsdF9pbmktXFx1MDAzZXNtY3J2Mi5pYl9naWRfdjIsXFxuMTIyNTpcXHRcXHQgICAgICAgU01DX0dJRF9TSVpFKTtcXG4xMjI2OlxcdFxcbjEyMjc6XFx0b3V0OlxcbjEyMjg6XFx0XFx0a2ZyZWUoYWx0X2luaSk7XFxuMTIyOTpcXHR9XFxuMTIzMDpcXHRcXG4xMjMxOlxcdHN0YXRpYyBpbnQgc21jX2Nvbm5lY3RfcmRtYV92Ml9wcmVwYXJlKHN0cnVjdCBzbWNfc29jayAqc21jLFxcbjEyMzI6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzbWNfY2xjX21zZ19hY2NlcHRfY29uZmlybSAqYWNsYyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjQ6MjIuMTU2NDM1MDNaIiwiU2VxIjo2MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE2MTM2NzEzMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgSW5pdGlhbGl6YXRpb24gYW5kIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCByZWdhcmRpbmcgdGhlIGluaXRpYWwgY29uY2VybiBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBgc21jX3dyX3R4X2dldF92Ml9zbG90YCwgbXkgYW5hbHlzaXMgY29uZmlybXMgdGhhdCB0aGUgY29kZSAqZG9lcyogZnVsbHkgaW5pdGlhbGl6ZSB0aGUgYnVmZmVyLiBgZ2lkbGlzdC1cdTAwM2VsZW5gIGlzIGF0IG1vc3QgMiwgc28gdGhlIGNhbGN1bGF0ZWQgbGVuZ3RoLCBgbGVuID0gNDAgKyAyICogMTYgPSA3MmAsIGNvcnJlY3RseSBhY2NvdW50cyBmb3IgdGhlIGhlYWRlciAoNDAgYnl0ZXMpIGFuZCB0aGUgdHdvIHBvdGVudGlhbCBlbnRyaWVzIGluIGBnaWRsaXN0YCAoZWFjaCAxNiBieXRlcykuIFdoaWxlIGBtZW1zZXRgIGluaXRpYWxseSB6ZXJvZXMgb25seSA0NCBieXRlcywgdGhlIHN1YnNlcXVlbnQgYG1lbWNweWAgY2FsbHMgZmlsbCB0aGUgcmVtYWluaW5nIDMyIGJ5dGVzIG9mIHRoZSBidWZmZXIgZnJvbSBgZ2lkbGlzdC5saXN0W2ldYCB0byBgbGxjLVx1MDAzZWdpZFtpXWAuIFRodXMsIHRoZSBieXRlcyBmcm9tIDQwIHRvIDcyIGFyZSBjb3JyZWN0bHkgd3JpdHRlbi4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgbGVha2luZy4gVGhhdCdzIGdvb2QuXG5cbk5vdywgZm9jdXNpbmcgb24gdGhlIGJ1ZyBpbiBgc21jX3dyX3R4X3B1dF9zbG90YC4gVGhlIG9yaWdpbmFsIGZpeCBjaGFuZ2VzIGEgYG1lbXNldGAgb24gYSBwb2ludGVyIHRvIGNsZWFyIHRoZSBtZW1vcnkuIElmIGBsaW5rLVx1MDAzZWxnci1cdTAwM2V3cl90eF9idWZfdjJgIGlzIGluZGVlZCBhIHBvaW50ZXIgYW5kIGlzIHplcm9lZCwgdGhlbiB0aGUgbmV4dCBjYWxsIHRvIGBzbWNfd3JfdHhfZ2V0X3YyX3Nsb3RgIHJldHVybnMgYE5VTExgLiBUaGUgc3Vic2VxdWVudCBgYWRkbGxjYCBhc3NpZ25tZW50IGFuZCBgbWVtc2V0YCByZXN1bHQgaW4gYSBjbGFzc2ljIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgd2hpY2ggdHJpZ2dlcnMgZWl0aGVyIEtBU0FOIG9yIGEgc3RhbmRhcmQga2VybmVsIG9vcHMuIFRoaXMgaXNuJ3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZDsgaXQncyBhIHN0cmFpZ2h0Zm9yd2FyZCBkZXJlZmVyZW5jZSBvZiBhIG51bGwgcG9pbnRlciwgbWVhbmluZyBubyBpbmZvcm1hdGlvbiBsZWFrYWdlLiBJIHN1c3BlY3QgdGhpcyB3aWxsIGJlIGVhc3kgdG8gcmVwcm9kdWNlLCBnb29kIVxuXG5TaW1pbGFybHksIHplcm9pbmcgYGxpbmstXHUwMDNld3JfdHhfdjJfcGVuZGAgKGFub3RoZXIgcG9pbnRlcikgbGVhZHMgdG8gdGhlIHNhbWUgcHJvYmxlbTogYSBOVUxMIGRlcmVmZXJlbmNlIHdpdGhpbiBgc21jX3dyX3R4X2dldF92Ml9zbG90YCB3aGVuIGFjY2Vzc2luZyBgbGluay1cdTAwM2V3cl90eF92Ml9wZW5kLVx1MDAzZWlkeGAuIFRoZSBwcm9ibGVtIGlzIHRoYXQgdGhlIGBtZW1zZXRgIGlzIHplcm9pbmcgdGhlICpwb2ludGVyKiByYXRoZXIgdGhhbiB0aGUgbWVtb3J5IGl0IHBvaW50cyB0by5cblxuRmluYWxseSwgcmVnYXJkaW5nIHRoZSBjaGFuZ2UgZnJvbSBgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXRgIHRvIHRoZSBvcGVuLWNvZGVkIGxvb3AsIHRoYXQncyBpbnRlcmVzdGluZy4gVGhlIGNvZGUgaXMgbWVhbnQgdG8gYXZvaWQgdGhlIFwidGh1bmRlcmluZyBoZXJkXCIgZWZmZWN0IGJ5IHVzaW5nIGBwcmVwYXJlX3RvX3dhaXRfZXhjbHVzaXZlYCwgd2hpY2ggaXMgc3RhbmRhcmQuIEJ1dC4uLiBjb3VsZCB0aGVyZSBiZSBhIHJhY2UgY29uZGl0aW9uPyBDb3VsZCBgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXRgIHJldHVybiwgdGhlIGNvZGUgKnRoZW4qIGNoZWNrcyB0aGUgY29uZGl0aW9uICphZ2FpbiogYW5kIGdldCBhIGRpZmZlcmVudCByZXN1bHQ/IExldCBtZSBjaGVjayB0aGUgbWFjcm8gZXhwYW5zaW9uIG9mIGB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dGAuLi4gTm8sIGl0IHNob3VsZCBiZSBmaW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDg3NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDoyNDozMy43NzAxMDg5MTJaIiwiU2VxIjo2MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MDk1NDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmluZSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L3dhaXQuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3dhaXQuaD00NzY9ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvd2FpdC5oLTUzNC0gKi9cXG5pbmNsdWRlL2xpbnV4L3dhaXQuaDo1MzU6I2RlZmluZSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCh3cV9oZWFkLCBjb25kaXRpb24sIHRpbWVvdXQpXFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvd2FpdC5oLTUzNi0oe1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjQ6MzMuODE2MjExMzA3WiIsIlNlcSI6NjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0Nzk4MTkyNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCdzIFdhaXQgTWVjaGFuaXNtKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byB0aGUgaGVhcnQgb2YgdGhlIHdhaXQgbWVjaGFuaXNtIGluIHRoZSBMaW51eCBrZXJuZWwuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgYHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0YCBhY3R1YWxseSB3b3Jrcy4gSSBrbm93IHRoZSBnZW5lcmFsIGlkZWEgLSBpdCBwdXRzIGEgcHJvY2VzcyB0byBzbGVlcCwgcG90ZW50aWFsbHkgYWxsb3dpbmcgaXQgdG8gYmUgd29rZW4gYnkgYW4gaW50ZXJydXB0IG9yIHNpZ25hbCwgd2l0aCBhIHNwZWNpZmllZCB0aW1lb3V0LiBCdXQgSSB3YW50IHRvIG5haWwgZG93biB0aGUgc3BlY2lmaWNzLCBwYXJ0aWN1bGFybHkgdGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSB3YWl0IHF1ZXVlLCB0aGUgdGFzayBzdGF0ZSwgc2lnbmFsIGhhbmRsaW5nLCBhbmQgdGhlIHRpbWVvdXQgaW1wbGVtZW50YXRpb24gaXRzZWxmLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0aGUgYXRvbWljIG9wZXJhdGlvbnMsIGFuZCBob3cgdGhleSBlbnN1cmUgY29ycmVjdG5lc3MgaW4gYSBtdWx0aS10aHJlYWRlZCwgaW50ZXJydXB0LWRyaXZlbiBlbnZpcm9ubWVudC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGludGVyZXN0aW5nIGRldGFpbHMgcmVnYXJkaW5nIHNwaW5sb2NrcyBhbmQgYW55IHJlbGF0ZWQgcmFjZSBjb25kaXRpb25zIHRoYXQgYXJlIGhhbmRsZWQgYW5kIHdpbGwgYmUgbG9va2luZyBmb3IgaG93IHRoZSBpbXBsZW1lbnRhdGlvbiBoYW5kbGVzIGRpZmZlcmVudCBzY2VuYXJpb3MsIHBhcnRpY3VsYXJseSBzaWduYWwgZGVsaXZlcnkgZHVyaW5nIHRoZSB3YWl0aW5nIHBlcmlvZC4gVWx0aW1hdGVseSwgdGhlIGdvYWwgaXMgdG8gZnVsbHkgZ3Jhc3AgdGhlIGludHJpY2FjaWVzIHRoYXQgZGljdGF0ZSB0aGUgcHJlY2lzZSBiZWhhdmlvciB1bmRlciBhIHJhbmdlIG9mIGNvbmRpdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2OTI4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjQ6MzcuMjk2MDMyNzQ0WiIsIlNlcSI6NjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3dhaXQuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA1MzUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MzU6XFx0I2RlZmluZSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCh3cV9oZWFkLCBjb25kaXRpb24sIHRpbWVvdXQpXFx0XFx0XFxcXFxcbiA1MzY6XFx0KHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDUzNzpcXHRcXHRsb25nIF9fcmV0ID0gdGltZW91dDtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDUzODpcXHRcXHRtaWdodF9zbGVlcCgpO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gNTM5OlxcdFxcdGlmICghX19fd2FpdF9jb25kX3RpbWVvdXQoY29uZGl0aW9uKSlcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDU0MDpcXHRcXHRcXHRfX3JldCA9IF9fd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQod3FfaGVhZCxcXHRcXHRcXFxcXFxuIDU0MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRjb25kaXRpb24sIHRpbWVvdXQpO1xcdFxcdFxcXFxcXG4gNTQyOlxcdFxcdF9fcmV0O1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gNTQzOlxcdH0pXFxuIDU0NDpcXHRcXG4gNTQ1OlxcdCNkZWZpbmUgX193YWl0X2V2ZW50X2hydGltZW91dCh3cV9oZWFkLCBjb25kaXRpb24sIHRpbWVvdXQsIHN0YXRlKVxcdFxcdFxcXFxcXG4gNTQ2OlxcdCh7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiA1NDc6XFx0XFx0aW50IF9fcmV0ID0gMDtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDU0ODpcXHRcXHRzdHJ1Y3QgaHJ0aW1lcl9zbGVlcGVyIF9fdDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDU0OTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDU1MDpcXHRcXHRocnRpbWVyX3NldHVwX3NsZWVwZXJfb25fc3RhY2soXFx1MDAyNl9fdCwgQ0xPQ0tfTU9OT1RPTklDLFxcdFxcdFxcdFxcXFxcXG4gNTUxOlxcdFxcdFxcdFxcdFxcdCAgICAgICBIUlRJTUVSX01PREVfUkVMKTtcXHRcXHRcXHRcXFxcXFxuIDU1MjpcXHRcXHRpZiAoKHRpbWVvdXQpICE9IEtUSU1FX01BWCkge1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gNTUzOlxcdFxcdFxcdGhydGltZXJfc2V0X2V4cGlyZXNfcmFuZ2VfbnMoXFx1MDAyNl9fdC50aW1lciwgdGltZW91dCxcXHRcXHRcXFxcXFxuIDU1NDpcXHRcXHRcXHRcXHRcXHRcXHRjdXJyZW50LVxcdTAwM2V0aW1lcl9zbGFja19ucyk7XFx0XFx0XFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDoyNDozNy4yOTYxNDkzMDRaIiwiU2VxIjo2NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ3MjE0NDc1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIGBfX3dhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0YCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYF9fd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXRgLiBUaGF0IGZ1bmN0aW9uIGlzIGEgY3J1Y2lhbCBwaWVjZSBvZiB0aGUga2VybmVsJ3Mgc3luY2hyb25pemF0aW9uIG1hY2hpbmVyeSwgYW5kIHVuZGVyc3RhbmRpbmcgaXRzIGJlaGF2aW9yIGlzIG9mdGVuIGtleSB0byBkZWJ1Z2dpbmcgY29uY3VycmVuY3kgaXNzdWVzLCBwYXJ0aWN1bGFybHkgdGhvc2UgaW52b2x2aW5nIHdhaXRpbmcgb24gZXZlbnRzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBpdCdzIGltcGxlbWVudGVkLiBTcGVjaWZpY2FsbHksIGhvdyBpdCBoYW5kbGVzIHRoZSB0aW1lb3V0IGFzcGVjdCBhbmQgaG93IGludGVycnVwdHMgcGxheSBpbnRvIHRoYXQuIEknbSBob3BpbmcgdG8gcXVpY2tseSBncmFzcCBpdHMgaW50ZXJuYWwgd29ya2luZ3MsIHRoZSBtZWNoYW5pc21zIGl0IHV0aWxpemVzIHRvIHBvdGVudGlhbGx5IGJsb2NrIGEgdGFzaywgYW5kIGhvdyB0aG9zZSBtZWNoYW5pc21zIGRpZmZlciBmcm9tIG90aGVyIHJlbGF0ZWQgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuIEkgbmVlZCB0byByZW1lbWJlciB0aGUgc3VidGxldGllcyBvZiBpbnRlcnJ1cHRpYmxlIHZzLiB1bmludGVycnVwdGlibGUgc3RhdGVzIGFuZCBob3cgdGhlc2UgcmVsYXRlIHRvIHNpZ25hbCBoYW5kbGluZyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhhdCBmdW5jdGlvbi4gTGV0J3Mgc2VlIGhvdyBpdCdzIHNldCB1cCB0byBoYW5kbGUgYSB0aW1lb3V0LiBUaGlzIGxpa2VseSBpbnZvbHZlcyBzb21lIGNsZXZlciB1c2Ugb2YgdGltZXJzIGFuZCBzY2hlZHVsZXIgaW50ZWdyYXRpb24uIE15IGdvYWwgaGVyZSBpcyBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBidWlsZGluZyBibG9jay5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc1ODIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjI0OjQwLjc2ODI5NzQ5WiIsIlNlcSI6NjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDYyODA0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZWZpbmUgX193YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L3dhaXQuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3dhaXQuaD00NzY9ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvd2FpdC5oLTUwOS1cXG5pbmNsdWRlL2xpbnV4L3dhaXQuaDo1MTA6I2RlZmluZSBfX3dhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHdxX2hlYWQsIGNvbmRpdGlvbiwgdGltZW91dClcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC93YWl0LmgtNTExLVxcdF9fX3dhaXRfZXZlbnQod3FfaGVhZCwgX19fd2FpdF9jb25kX3RpbWVvdXQoY29uZGl0aW9uKSxcXHRcXHRcXHRcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjI0OjQwLjgxMjkyODQwNVoiLCJTZXEiOjY3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzQ1NTUzODU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYF9fd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXRgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiB3aXRoIHRoaXMgYF9fd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXRgIGZ1bmN0aW9uLiBSaWdodCwgc28gdGhpcyBzdWdnZXN0cyB0aGF0IGEgcHJvY2VzcyBpcyBnb2luZyB0byB3YWl0LCBidXQgaXQncyAqaW50ZXJydXB0aWJsZSogKGNydWNpYWwsIG9mIGNvdXJzZSDigJMgd2Ugd291bGRu4oCZdCB3YW50IGEgZGVhZGxvY2sgc2l0dWF0aW9uKS4gQW5kIHRoZXJlJ3MgYSB0aW1lb3V0IGludm9sdmVkIOKAkyBzb21lIGtpbmQgb2YgdXBwZXIgYm91bmQgb24gdGhlIHdhaXRpbmcgcGVyaW9kLiBUaGlzIGltcGxpZXMgYSBuZWVkIGZvciBib3VuZGVkIHdhaXQgdGltZXMsIHBvdGVudGlhbGx5IGltcG9ydGFudCBmb3IgcmVhbC10aW1lIGFwcGxpY2F0aW9ucyBvciBwcmV2ZW50aW5nIHJ1bmF3YXkgaGFuZ3MuXG5cbkknbSBpbW1lZGlhdGVseSBjb25zaWRlcmluZyB0aGUgaW1wbGljYXRpb25zOiBzaWduYWxzIGNvdWxkIHdha2UgdGhlIHByb2Nlc3MgZWFybHksIGEgc3BlY2lmaWVkIHRpbWVvdXQgZHVyYXRpb24gaXMgaW1wb3NlZCwgYW5kLCBmdW5kYW1lbnRhbGx5LCBpdCdzIGFib3V0IHB1dHRpbmcgdGhlIHByb2Nlc3MgdG8gc2xlZXAgKnNhZmVseSogd2hpbGUgd2Ugd2FpdCBmb3IgYSBzcGVjaWZpYyBjb25kaXRpb24uIFdoYXQgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmUgaXMgaXQgb3BlcmF0aW5nIG9uPyBBIHdhaXQgcXVldWU/IE11dGV4PyBDb25kaXRpb24gdmFyaWFibGU/IEtub3dpbmcgdGhpcyBpcyB2aXRhbCB0byB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zIGF0IHBsYXkuIEkgYmV0IHRoaXMgaXMgYXQgdGhlIGhlYXJ0IG9mIGhvdyBpbnRlcnJ1cHRzIGFyZSBoYW5kbGVkIGluIGNvbmp1bmN0aW9uIHdpdGggb3RoZXIgYXN5bmNocm9ub3VzIGV2ZW50cy5cblxuTGV0J3Mgc2VlIHdoYXQgdGhlIGltcGxlbWVudGF0aW9uIHJldmVhbHMgYWJvdXQgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGludGVycnVwdCBoYW5kbGVyLCB0aGUgdGltZW91dCBtZWNoYW5pc20gYW5kIHRoZSB3YWtpbmcgb2YgdGhlIHByb2Nlc3MuIElzIGl0IHVzaW5nIGEgdGltZXIgdG8gdHJpZ2dlciB0aGUgdGltZW91dD8gSWYgc28sIGlzIHRoYXQgdGltZXIgbWFuYWdlZCBwcm9wZXJseSBhbmQgd2hhdCBhYm91dCB0aGUgY29uc2VxdWVuY2VzIG9mIGVhcmx5IG9yIG1pc3NlZCBldmVudHM/IEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgdGhleSdyZSBoYW5kbGluZyByYWNlcyBiZXR3ZWVuIHRoZSBpbnRlcnJ1cHQgYW5kIHRoZSB0aW1lb3V0LiBUaGUgZ29hbCwgdWx0aW1hdGVseSwgaXMgdG8gZW5zdXJlIHRoYXQgYSByZXNvdXJjZSBvciBhIGNvbmRpdGlvbiBpc27igJl0IGhlbGQgaW5kZWZpbml0ZWx5LCBhbmQgdGhhdCB0aGlzIGNvZGUgZG9lc24ndCBpbnRyb2R1Y2UgdnVsbmVyYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzk3OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjI0OjQ1LjU1ODQ4NDgwMloiLCJTZXEiOjY4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC93YWl0LmhcIixcbiAgXCJGaXJzdExpbmVcIjogNTEwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTEwOlxcdCNkZWZpbmUgX193YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCh3cV9oZWFkLCBjb25kaXRpb24sIHRpbWVvdXQpXFx0XFx0XFxcXFxcbiA1MTE6XFx0XFx0X19fd2FpdF9ldmVudCh3cV9oZWFkLCBfX193YWl0X2NvbmRfdGltZW91dChjb25kaXRpb24pLFxcdFxcdFxcdFxcXFxcXG4gNTEyOlxcdFxcdFxcdCAgICAgIFRBU0tfSU5URVJSVVBUSUJMRSwgMCwgdGltZW91dCxcXHRcXHRcXHRcXHRcXFxcXFxuIDUxMzpcXHRcXHRcXHQgICAgICBfX3JldCA9IHNjaGVkdWxlX3RpbWVvdXQoX19yZXQpKVxcbiA1MTQ6XFx0XFxuIDUxNTpcXHQvKipcXG4gNTE2OlxcdCAqIHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0IC0gc2xlZXAgdW50aWwgYSBjb25kaXRpb24gZ2V0cyB0cnVlIG9yIGEgdGltZW91dCBlbGFwc2VzXFxuIDUxNzpcXHQgKiBAd3FfaGVhZDogdGhlIHdhaXRxdWV1ZSB0byB3YWl0IG9uXFxuIDUxODpcXHQgKiBAY29uZGl0aW9uOiBhIEMgZXhwcmVzc2lvbiBmb3IgdGhlIGV2ZW50IHRvIHdhaXQgZm9yXFxuIDUxOTpcXHQgKiBAdGltZW91dDogdGltZW91dCwgaW4gamlmZmllc1xcbiA1MjA6XFx0ICpcXG4gNTIxOlxcdCAqIFRoZSBwcm9jZXNzIGlzIHB1dCB0byBzbGVlcCAoVEFTS19JTlRFUlJVUFRJQkxFKSB1bnRpbCB0aGVcXG4gNTIyOlxcdCAqIEBjb25kaXRpb24gZXZhbHVhdGVzIHRvIHRydWUgb3IgYSBzaWduYWwgaXMgcmVjZWl2ZWQuXFxuIDUyMzpcXHQgKiBUaGUgQGNvbmRpdGlvbiBpcyBjaGVja2VkIGVhY2ggdGltZSB0aGUgd2FpdHF1ZXVlIEB3cV9oZWFkIGlzIHdva2VuIHVwLlxcbiA1MjQ6XFx0ICpcXG4gNTI1OlxcdCAqIHdha2VfdXAoKSBoYXMgdG8gYmUgY2FsbGVkIGFmdGVyIGNoYW5naW5nIGFueSB2YXJpYWJsZSB0aGF0IGNvdWxkXFxuIDUyNjpcXHQgKiBjaGFuZ2UgdGhlIHJlc3VsdCBvZiB0aGUgd2FpdCBjb25kaXRpb24uXFxuIDUyNzpcXHQgKlxcbiA1Mjg6XFx0ICogUmV0dXJuczpcXG4gNTI5OlxcdCAqIDAgaWYgdGhlIEBjb25kaXRpb24gZXZhbHVhdGVkIHRvICVmYWxzZSBhZnRlciB0aGUgQHRpbWVvdXQgZWxhcHNlZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjQ6NDUuNTU4NTg4NzkyWiIsIlNlcSI6NjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NjAzNTg4ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNoZWNraW5nIGBfX193YWl0X2V2ZW50YCoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIG1lbnRhbCBtb2RlbCBpbW1lZGlhdGVseSBraWNrcyBpbjogSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSBiZWhhdmlvciBhbmQgdXNhZ2Ugb2YgYF9fX3dhaXRfZXZlbnRgLiBUaGlzIGxpa2VseSBtZWFucyBJJ20gbG9va2luZyBhdCBhIGtlcm5lbC1sZXZlbCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlLCBwcm9iYWJseSBhIGxvd2VyLWxldmVsIGNvbnN0cnVjdCB0aGFuIGEgbW9yZSB1c2VyLWZhY2luZyBtZWNoYW5pc20gbGlrZSBhIHNlbWFwaG9yZSBvciBtdXRleC4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHF1ZXN0aW9uczogd2hhdCdzIHRoZSBjb250ZXh0PyBXaGF0J3MgdGhlIGFyY2hpdGVjdHVyZSBpdCdzIHJ1bm5pbmcgb24/IElzIGl0IGEgYnVzeS13YWl0IHZhcmlhbnQsIG9yIGEgbW9yZSBlZmZpY2llbnQgc2xlZXBpbmcgcHJpbWl0aXZlPyBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gYW5kIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0J3MgdHJpZ2dlcmVkIG9yIHVuYmxvY2tlZC4gUGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIGFyZSB0b3Agb2YgbWluZDogd2hhdCdzIHRoZSBvdmVyaGVhZCBpbnZvbHZlZCBpbiBpdHMgdXNlLCBhbmQgYXJlIHRoZXJlIHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBsb2NrIGNvbnRlbnRpb24gb3IgcHJpb3JpdHkgaW52ZXJzaW9uPyBJJ20gcHJvYmFibHkgZ29pbmcgdG8gYmUgbG9va2luZyBmb3IgYXNzb2NpYXRlZCBjb2RlIHBhdGhzIGFzIHdlbGwuIEknbGwgYmUgaW50ZXJlc3RlZCBpbiB3aGVyZSBpdCdzIGNhbGxlZCwgaG93IGl0J3MgdXNlZCwgYW5kIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGl0J3MgcHJvdGVjdGluZy4gSXMgdGhlcmUgYSBjbGVhciBkb2N1bWVudGF0aW9uLCBvciB3aWxsIEkgbmVlZCB0byB3b3JrIHRocm91Z2ggaXQgc3RlcCBieSBzdGVwPyBBbHJpZ2h0LCBsZXQncyBzdGFydCBkaWdnaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjozODc2MCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjQ6NDkuMDE4OTUwNjA3WiIsIlNlcSI6NzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTEyODY1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZWZpbmUgX19fd2FpdF9ldmVudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L3dhaXQuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3dhaXQuaD0yODg9ZXh0ZXJuIHZvaWQgaW5pdF93YWl0X2VudHJ5KHN0cnVjdCB3YWl0X3F1ZXVlX2VudHJ5ICp3cV9lbnRyeSwgaW50IGZsYWdzKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvd2FpdC5oLTMwMS1cXG5pbmNsdWRlL2xpbnV4L3dhaXQuaDozMDI6I2RlZmluZSBfX193YWl0X2V2ZW50KHdxX2hlYWQsIGNvbmRpdGlvbiwgc3RhdGUsIGV4Y2x1c2l2ZSwgcmV0LCBjbWQpXFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvd2FpdC5oLTMwMy0oe1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjQ6NDkuMDY0MDgyMzkyWiIsIlNlcSI6NzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NzQyMDY4MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIFNpZ25pZmljYW5jZSBvZiBgX19fd2FpdF9ldmVudGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIHJpZ2h0IGluLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhhdCBmdW5jdGlvbjogYF9fX3dhaXRfZXZlbnRgLiBUaGF0IG5hbWUgaXMgc2NyZWFtaW5nIFwia2VybmVsLWxldmVsIGNvbmN1cnJlbmN5IHByaW1pdGl2ZVwiIHRvIG1lLiBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcsIFwiT2theSwgd2UncmUgdGFsa2luZyBhYm91dCBhIG1lY2hhbmlzbSBmb3IgYSB0YXNrIHRvIHJlbGlucXVpc2ggY29udHJvbCwgdG8gcHV0IGl0c2VsZiB0byBzbGVlcCwgKndhaXRpbmcqIGZvciBhIHNwZWNpZmljIGNvbmRpdGlvbiB0byBiZWNvbWUgdHJ1ZS5cIiBUaGlzIGlzIGZ1bmRhbWVudGFsIHN0dWZmLiBJdCdzIHRoZSBjb3JlIG9mIGhvdyB3ZSBzeW5jaHJvbml6ZSBhY3Rpdml0aWVzLCBob3cgd2UgaGFuZGxlIHJlc291cmNlIGNvbnRlbnRpb24sIGFuZCBob3cgd2UgYWNoaWV2ZSByZXNwb25zaXZlbmVzcyBpbiBhIG11bHRpLXRocmVhZGVkIG9yIG11bHRpLXByb2Nlc3MgZW52aXJvbm1lbnQuXG5cbk5vdywgbXkgbWluZCBzdGFydHMgdG8gcmFjZS4gSSdtIGdvaW5nIHRocm91Z2ggdGhlIGRpZmZlcmVudCBjb250ZXh0cyB3aGVyZSBJJ3ZlIHNlZW4gd2FpdCBldmVudHMuIElzIHRoaXMgYSBzcGlubG9jaz8gQSBtdXRleD8gQ29uZGl0aW9uIHZhcmlhYmxlcz8gSXMgdGhpcyBwYXJ0IG9mIGEgcmVhZGVyLXdyaXRlciBsb2NrIGltcGxlbWVudGF0aW9uPyBBbSBJIGxvb2tpbmcgYXQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gaW50ZXJydXB0cyBvciBoYXJkd2FyZSBzaWduYWxzPyBXaGF0IGFyZSB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgdXNlZCBoZXJlPyBBcmUgd2UgZGVhbGluZyB3aXRoIHByaW9yaXR5IGluaGVyaXRhbmNlIG9yIHNvbWUgZm9ybSBvZiBmYWlybmVzcyBpbiB0aGUgd2FpdGluZyBtZWNoYW5pc20/IEknbSBhbHJlYWR5IGFza2luZyBteXNlbGYgdGhlIGNyaXRpY2FsIHF1ZXN0aW9ucyByZWdhcmRpbmcgdGhlIGltcGxlbWVudGF0aW9uIHNwZWNpZmljcy5cblxuVGhlIGRvdWJsZSB1bmRlcnNjb3JlIGluIHRoZSBuYW1lIGlzIGFsc28gYSBjbHVlLiBMaWtlbHksIHRoaXMgaXMgYW4gaW50ZXJuYWwgZnVuY3Rpb24sIG5vdCBpbnRlbmRlZCBmb3IgZGlyZWN0IHVzZSBieSB1c2VyLWxldmVsIHByb2dyYW1zLiBUaGlzIG1lYW5zIGl0J3MgdGhlIGJ1aWxkaW5nIGJsb2NrIHVwb24gd2hpY2ggaGlnaGVyLWxldmVsIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGFyZSBjb25zdHJ1Y3RlZC4gVGhpcyBpcyB0aGUgYmVkcm9jaywgdGhlIGF0b20sIHRoZSBmdW5kYW1lbnRhbCBicmljayBhbmQgbW9ydGFyIHdlIG11c3QgbG9vayBhdCB0byB1bmRlcnN0YW5kIGFsbCB0aGUgb3RoZXIgc3luY2hyb25pemF0aW9uIG1ldGhvZHMuIFNvLCBJ4oCZbSBtZW50YWxseSBwZWVsaW5nIGJhY2sgbGF5ZXJzLCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBpcyB3b3ZlbiBpbnRvIHRoZSBicm9hZGVyIGFyY2hpdGVjdHVyZSBvZiB0aGUga2VybmVsLCB0aGUgc3luY2hyb25pemF0aW9uIG1vZGVsLiBWZXJ5IGltcG9ydGFudCBhbmQgSSBuZWVkIHRvIHNlZSBtb3JlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MTcwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjQ6NTIuOTM4MjkxMTIzWiIsIlNlcSI6NzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4MjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvd2FpdC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwMixcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMwMjpcXHQjZGVmaW5lIF9fX3dhaXRfZXZlbnQod3FfaGVhZCwgY29uZGl0aW9uLCBzdGF0ZSwgZXhjbHVzaXZlLCByZXQsIGNtZClcXHRcXHRcXFxcXFxuIDMwMzpcXHQoe1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMzA0OlxcdFxcdF9fbGFiZWxfXyBfX291dDtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDMwNTpcXHRcXHRzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeSBfX3dxX2VudHJ5O1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMzA2OlxcdFxcdGxvbmcgX19yZXQgPSByZXQ7XFx0LyogZXhwbGljaXQgc2hhZG93ICovXFx0XFx0XFx0XFx0XFxcXFxcbiAzMDc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAzMDg6XFx0XFx0aW5pdF93YWl0X2VudHJ5KFxcdTAwMjZfX3dxX2VudHJ5LCBleGNsdXNpdmUgPyBXUV9GTEFHX0VYQ0xVU0lWRSA6IDApO1xcdFxcXFxcXG4gMzA5OlxcdFxcdGZvciAoOzspIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDMxMDpcXHRcXHRcXHRsb25nIF9faW50ID0gcHJlcGFyZV90b193YWl0X2V2ZW50KFxcdTAwMjZ3cV9oZWFkLCBcXHUwMDI2X193cV9lbnRyeSwgc3RhdGUpO1xcXFxcXG4gMzExOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMzEyOlxcdFxcdFxcdGlmIChjb25kaXRpb24pXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAzMTM6XFx0XFx0XFx0XFx0YnJlYWs7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAzMTQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAzMTU6XFx0XFx0XFx0aWYgKF9fX3dhaXRfaXNfaW50ZXJydXB0aWJsZShzdGF0ZSkgXFx1MDAyNlxcdTAwMjYgX19pbnQpIHtcXHRcXHRcXHRcXFxcXFxuIDMxNjpcXHRcXHRcXHRcXHRfX3JldCA9IF9faW50O1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMzE3OlxcdFxcdFxcdFxcdGdvdG8gX19vdXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAzMTg6XFx0XFx0XFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMzE5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMzIwOlxcdFxcdFxcdGNtZDtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDMyMTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDMyMjpcXHRcXHRcXHRpZiAoY29uZGl0aW9uKVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMzIzOlxcdFxcdFxcdFxcdGJyZWFrO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMzI0OlxcdFxcdH1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDMyNTpcXHRcXHRmaW5pc2hfd2FpdChcXHUwMDI2d3FfaGVhZCwgXFx1MDAyNl9fd3FfZW50cnkpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMzI2OlxcdF9fb3V0OlxcdF9fcmV0O1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMzI3OlxcdH0pXFxuIDMyODpcXHRcXG4gMzI5OlxcdCNkZWZpbmUgX193YWl0X2V2ZW50KHdxX2hlYWQsIGNvbmRpdGlvbilcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDMzMDpcXHRcXHQodm9pZClfX193YWl0X2V2ZW50KHdxX2hlYWQsIGNvbmRpdGlvbiwgVEFTS19VTklOVEVSUlVQVElCTEUsIDAsIDAsXFx0XFxcXFxcbiAzMzE6XFx0XFx0XFx0XFx0ICAgIHNjaGVkdWxlKCkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjI0OjUyLjkzODM5MDM2M1oiLCJTZXEiOjczLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzYyMTU5NzIwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2ggYW5kIEtNU0FOIFJlcXVpcmVtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzOiB3YWl0LCB0aGF0IGBfX193YWl0X2V2ZW50YCBsb29wIGxvb2tzIGxpa2UgaXQgZXZhbHVhdGVzIHRoZSBgY29uZGl0aW9uYCB0d2ljZSBpbiBlYWNoIGl0ZXJhdGlvbi4gQnV0IHRoZW4gSSByZW1lbWJlciBob3cgdGhlIGB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dGAgZnVuY3Rpb24gd29ya3MuIEl0IGNoZWNrcyB0aGUgY29uZGl0aW9uICpvbmNlKiBiZWZvcmUgZW50ZXJpbmcgdGhlIGxvb3AuIFRoZW4sIHdpdGhpbiB0aGUgbG9vcCwgdGhlIGNvbmRpdGlvbiAqbWlnaHQqIGJlIGNoZWNrZWQgYWdhaW4uIFNvIHRoZSBtYXhpbXVtIGlzIHR3byBldmFsdWF0aW9ucyBwZXIgaXRlcmF0aW9uLiBDcnVjaWFsbHksIHRoZSBjb2RlIGluIHF1ZXN0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIHBhcnQgaW52b2x2aW5nIGBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdF9pbmRleGAsIGhhcyBzaWRlIGVmZmVjdHMgd2l0aCBgdGVzdF9hbmRfc2V0X2JpdGAuIEJ1dCBpZiB0aGUgY29uZGl0aW9uIGlzIHRydWUgKmltbWVkaWF0ZWx5KiBhZnRlciB0aGF0IGNhbGwsIHRoZSBsb29wIGJyZWFrcyEgU28gdGhlcmUncyBhY3R1YWxseSBvbmx5ICpvbmUqIGNvbmRpdGlvbiBjaGVjayBpZiB0aGUgJ2dvb2QnIHBhdGggaXMgdGFrZW4uXG5cbk5vdywgdGhlIHBhdGNoIGlzIGNoYW5naW5nIHRoaXMgdG8gYW4gb3Blbi1jb2RlZCBsb29wLCBhbmQgdGhpcyBzaGlmdCBtYWtlcyB0aGUgY29uZGl0aW9uIGNoZWNrIGhhcHBlbiB0aGUgc2FtZSBudW1iZXIgb2YgdGltZXMgYW5kIGZpeGVzIHRoZSBwb3RlbnRpYWwgdGh1bmRlcmluZyBoZXJkIHByb2JsZW0uIFRoZSBgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXRgIGZ1bmN0aW9uIHVzZXMgYSBub24tZXhjbHVzaXZlIHdhaXQuIE1hbnkgdGhyZWFkcyBjb3VsZCBiZSB3b2tlbiB1cCBzaW11bHRhbmVvdXNseSBpZiB0aGUgY29uZGl0aW9uIGJlY29tZXMgdHJ1ZS4gVGhlIG9wZW4tY29kZWQgbG9vcCBub3cgdXRpbGl6ZXMgYW4gZXhjbHVzaXZlIHdhaXQgd2l0aCBgcHJlcGFyZV90b193YWl0X2V4Y2x1c2l2ZWAuIFRoaXMgZW5zdXJlcyBvbmx5ICpvbmUqIHdhaXRpbmcgdGhyZWFkIGlzIHdva2VuLiBUaGlzIGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIGFuZCBhdm9pZHMgdGhlIHRodW5kZXJpbmcgaGVyZC5cblxuQnV0IHRoZXJlJ3MgYWxzbyB0aGUgYnVnIGZpeCBpbnZvbHZpbmcgdGhlIGJ1ZmZlci4gVGhlIHBhdGNoIGlzIG5vdyB6ZXJvaW5nIHRoZSBidWZmZXIsIGJ1dCB0aGUgKm9sZCogY29kZSB6ZXJvZWQgdGhlICpwb2ludGVyKiEgSWYgdGhlIHBvaW50ZXIgaXMgemVyb2VkLCB0aGUgbmV4dCB0aW1lIGl0J3MgZGVyZWZlcmVuY2VkLCBpdCdzIGEgTlVMTCBwb2ludGVyLiBXaGljaCBpcyBnb2luZyB0byBjcmFzaCB0aGUga2VybmVsIHdpdGggYSBzdGFuZGFyZCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIE5vdCBhbiB1bmluaXRpYWxpemVkIHJlYWQsIHdoaWNoIGlzIHdoYXQgS01TQU4gaXMgZm9yLlxuXG5TbywgdGhpbmtpbmcgYWJvdXQgdGhlIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdGhlIGBsaW5rLVx1MDAzZWxnci1cdTAwM2V3cl90eF9idWZfdjJgIHBvdGVudGlhbGx5IGNvdWxkIGJlIHVuaW5pdGlhbGl6ZWQuIEJ1dCwgYWZ0ZXIgbG9va2luZyB0aHJvdWdoIHRoZSByZWxldmFudCBwYXJ0cyBvZiBgc21jX3dyX3R4X3B1dF9zbG90YCwgYHNtY193cl90eF9nZXRfdjJfc2xvdGAgYW5kIGBzbWNfbGxjX3NlbmRfYWRkX2xpbmtgLCBpdCBiZWNvbWVzIGNsZWFyIHRoYXQgaXQgaXMgKm5vdCogcmVhZC4gVGhlIGNvZGUgZXhwbGljaXRseSB6ZXJvJ3MgdGhlIHBhcnRzIHRoYXQgZ2V0IHVzZWQhIEV2ZW4gaWYgdGhlcmUgd2FzIG9sZCBkYXRhLCBpdCB3b3VsZG4ndCBiZSBzZW50IG92ZXIgdGhlIG5ldHdvcmsuIFRoZXJlZm9yZSwgdGhlcmUncyBubyBwb3NzaWJpbGl0eSBvZiBhIG1lbW9yeSBsZWFrIG9yIHVuaW5pdGlhbGl6ZWQgZGF0YSBiZWluZyBzZW50IG91dC4gVGhlIGFjdHVhbCBidWcgd2FzIHRoYXQgdGhlIFBPSU5URVIgd2FzIHplcm9lZCBhbmQgbm90IHRoZSBidWZmZXIhIElmIGB3cl9idWZgIGlzIE5VTEwsIHRoZW4gdGhlIGBtZW1zZXQoTlVMTCwgMCwgNDQpYCBpcyBhIHN1cmVmaXJlIENSQVNILlxuXG5JbiBzdW1tYXJ5LCB0aGUgcGF0Y2g6XG5cbjEuICBSZXBsYWNlcyBgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXRgIHdpdGggYW4gZXhjbHVzaXZlIHdhaXQgbG9vcCwgYWRkcmVzc2luZyB0aGUgdGh1bmRlcmluZyBoZXJkIGlzc3VlLCBhIHBlcmZvcm1hbmNlIGFuZCBjb3JyZWN0bmVzcyBwcm9ibGVtLCBub3QgYSBtZW1vcnkgc2FmZXR5IG9uZS5cbjIuICBGaXhlcyBhIGJ1ZyB3aGVyZSBwb2ludGVycyB3ZXJlIGluY29ycmVjdGx5IHplcm9lZCBpbnN0ZWFkIG9mIHRoZSBidWZmZXJzLCB3aGljaCwgaWYgdGhlIHBvaW50ZXJzIHRoZW1zZWx2ZXMgYXJlIE5VTEwsIGNhdXNlIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLlxuXG5UaGUgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGlzIGVhc2lseSBkZXRlY3RlZCBieSBzdGFuZGFyZCB0b29scyBsaWtlIEtBU0FOIGFuZCBLQVNBTi1saXRlLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIHNlbnQgb3ZlciB0aGUgbmV0d29yay4gU28sIG5vIEtNU0FOIGlzIG5lZWRlZC4gVGhpcyBpcyBhIDEwMCUgcmVsaWFibGUgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCBhIHN0YW5kYXJkIGtlcm5lbCBwYW5pYy4gVGltZSB0byBjYWxsIGl0LCBgTmVlZHNLTVNBTj1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwMDY1LCJPdXRwdXRUb2tlbnMiOjM0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDoyNToxMC41NTk5OTA2MDJaIiwiU2VxIjo3NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyB0d28gaXNzdWVzOlxcbjEuIEl0IHJlcGxhY2VzIGB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dGAgd2l0aCBhbiBvcGVuLWNvZGVkIHdhaXQgbG9vcCB1c2luZyBgcHJlcGFyZV90b193YWl0X2V4Y2x1c2l2ZWAgdG8gZml4IGEgdGh1bmRlcmluZyBoZXJkIHByb2JsZW0gd2hlcmUgbXVsdGlwbGUgd2FpdGluZyB0aHJlYWRzIGFyZSB3b2tlbiB1cCBzaW11bHRhbmVvdXNseS4gVGhpcyBpcyBhIHBlcmZvcm1hbmNlL2NvbmN1cnJlbmN5IGZpeC5cXG4yLiBJdCBmaXhlcyBhIGJ1ZyBpbiBgc21jX3dyX3R4X3B1dF9zbG90YCB3aGVyZSBgbWVtc2V0YCB3YXMgaW5jb3JyZWN0bHkgYXBwbGllZCB0byB0aGUgcG9pbnRlcnMgYFxcdTAwMjZsaW5rLVxcdTAwM2V3cl90eF92Ml9wZW5kYCBhbmQgYFxcdTAwMjZsaW5rLVxcdTAwM2VsZ3ItXFx1MDAzZXdyX3R4X2J1Zl92MmAgaW5zdGVhZCBvZiB0aGUgc3RydWN0dXJlcyB0aGV5IHBvaW50IHRvLlxcblxcbkJlY2F1c2UgdGhlIG9yaWdpbmFsIGNvZGUgemVyb2VkIHRoZSBwb2ludGVycyB0aGVtc2VsdmVzIChlZmZlY3RpdmVseSBzZXR0aW5nIHRoZW0gdG8gTlVMTCksIGFueSBzdWJzZXF1ZW50IHVzZSBvZiB0aGVzZSBwb2ludGVycyAoZS5nLiwgaW4gYHNtY193cl90eF9nZXRfdjJfc2xvdGAgb3IgYHNtY193cl90eF9wcm9jZXNzX2NxZWApIHdvdWxkIHJlc3VsdCBpbiBhIGRldGVybWluaXN0aWMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBBIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBjYXVzZXMgYSBzdGFuZGFyZCBrZXJuZWwgb29wcyBhbmQgaXMgdHJpdmlhbGx5IGNhdWdodCBieSBzdGFuZGFyZCB0ZXN0aW5nLCBLQVNBTiwgb3IgZXZlbiB3aXRob3V0IGFueSBzYW5pdGl6ZXJzLlxcblxcblRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZSBvciBvdmVyIHRoZSBuZXR3b3JrLiBUaGUgbmV0d29yayB0cmFuc21pc3Npb24gZnVuY3Rpb25zIChlLmcuLCBgc21jX3dyX3R4X3YyX3NlbmRgKSBvbmx5IHNlbmQgdGhlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgbGVuZ3RoIG9mIHRoZSBidWZmZXIsIGFuZCB0aGUgY2FsbGVycyAobGlrZSBgc21jX2xsY19zZW5kX2FkZF9saW5rYCkgZXhwbGljaXRseSB6ZXJvIGFuZCBpbml0aWFsaXplIHRoZSBleGFjdCBudW1iZXIgb2YgYnl0ZXMgdGhleSB0cmFuc21pdC4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIHR3byBpc3N1ZXM6XFxuMS4gSXQgcmVwbGFjZXMgYHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0YCB3aXRoIGFuIG9wZW4tY29kZWQgd2FpdCBsb29wIHVzaW5nIGBwcmVwYXJlX3RvX3dhaXRfZXhjbHVzaXZlYCB0byBmaXggYSB0aHVuZGVyaW5nIGhlcmQgcHJvYmxlbSB3aGVyZSBtdWx0aXBsZSB3YWl0aW5nIHRocmVhZHMgYXJlIHdva2VuIHVwIHNpbXVsdGFuZW91c2x5LiBUaGlzIGlzIGEgcGVyZm9ybWFuY2UvY29uY3VycmVuY3kgZml4LlxcbjIuIEl0IGZpeGVzIGEgYnVnIGluIGBzbWNfd3JfdHhfcHV0X3Nsb3RgIHdoZXJlIGBtZW1zZXRgIHdhcyBpbmNvcnJlY3RseSBhcHBsaWVkIHRvIHRoZSBwb2ludGVycyBgXFx1MDAyNmxpbmstXFx1MDAzZXdyX3R4X3YyX3BlbmRgIGFuZCBgXFx1MDAyNmxpbmstXFx1MDAzZWxnci1cXHUwMDNld3JfdHhfYnVmX3YyYCBpbnN0ZWFkIG9mIHRoZSBzdHJ1Y3R1cmVzIHRoZXkgcG9pbnQgdG8uXFxuXFxuQmVjYXVzZSB0aGUgb3JpZ2luYWwgY29kZSB6ZXJvZWQgdGhlIHBvaW50ZXJzIHRoZW1zZWx2ZXMgKGVmZmVjdGl2ZWx5IHNldHRpbmcgdGhlbSB0byBOVUxMKSwgYW55IHN1YnNlcXVlbnQgdXNlIG9mIHRoZXNlIHBvaW50ZXJzIChlLmcuLCBpbiBgc21jX3dyX3R4X2dldF92Ml9zbG90YCBvciBgc21jX3dyX3R4X3Byb2Nlc3NfY3FlYCkgd291bGQgcmVzdWx0IGluIGEgZGV0ZXJtaW5pc3RpYyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIEEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGNhdXNlcyBhIHN0YW5kYXJkIGtlcm5lbCBvb3BzIGFuZCBpcyB0cml2aWFsbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIHRlc3RpbmcsIEtBU0FOLCBvciBldmVuIHdpdGhvdXQgYW55IHNhbml0aXplcnMuXFxuXFxuVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlIG9yIG92ZXIgdGhlIG5ldHdvcmsuIFRoZSBuZXR3b3JrIHRyYW5zbWlzc2lvbiBmdW5jdGlvbnMgKGUuZy4sIGBzbWNfd3JfdHhfdjJfc2VuZGApIG9ubHkgc2VuZCB0aGUgZXhwbGljaXRseSBpbml0aWFsaXplZCBsZW5ndGggb2YgdGhlIGJ1ZmZlciwgYW5kIHRoZSBjYWxsZXJzIChsaWtlIGBzbWNfbGxjX3NlbmRfYWRkX2xpbmtgKSBleHBsaWNpdGx5IHplcm8gYW5kIGluaXRpYWxpemUgdGhlIGV4YWN0IG51bWJlciBvZiBieXRlcyB0aGV5IHRyYW5zbWl0LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflownrrq9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-21 09:20:26 +0000 UTC FinishedAt: 2026-08-21 10:25:12 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SMC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SMC" ], "series_id": "38f68da7-711b-4ba2-b1df-a30862afcc20" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "smc_wr_tx_get_free_slot", "smc_wr_tx_put_slot" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NNQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NtY193cl90eF9nZXRfZnJlZV9zbG90JiMzNDssCiAgICAmIzM0O3NtY193cl90eF9wdXRfc2xvdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyB0d28gaXNzdWVzOlxuMS4gSXQgcmVwbGFjZXMgYHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0YCB3aXRoIGFuIG9wZW4tY29kZWQgd2FpdCBsb29wIHVzaW5nIGBwcmVwYXJlX3RvX3dhaXRfZXhjbHVzaXZlYCB0byBmaXggYSB0aHVuZGVyaW5nIGhlcmQgcHJvYmxlbSB3aGVyZSBtdWx0aXBsZSB3YWl0aW5nIHRocmVhZHMgYXJlIHdva2VuIHVwIHNpbXVsdGFuZW91c2x5LiBUaGlzIGlzIGEgcGVyZm9ybWFuY2UvY29uY3VycmVuY3kgZml4LlxuMi4gSXQgZml4ZXMgYSBidWcgaW4gYHNtY193cl90eF9wdXRfc2xvdGAgd2hlcmUgYG1lbXNldGAgd2FzIGluY29ycmVjdGx5IGFwcGxpZWQgdG8gdGhlIHBvaW50ZXJzIGBcdTAwMjZsaW5rLVx1MDAzZXdyX3R4X3YyX3BlbmRgIGFuZCBgXHUwMDI2bGluay1cdTAwM2VsZ3ItXHUwMDNld3JfdHhfYnVmX3YyYCBpbnN0ZWFkIG9mIHRoZSBzdHJ1Y3R1cmVzIHRoZXkgcG9pbnQgdG8uXG5cbkJlY2F1c2UgdGhlIG9yaWdpbmFsIGNvZGUgemVyb2VkIHRoZSBwb2ludGVycyB0aGVtc2VsdmVzIChlZmZlY3RpdmVseSBzZXR0aW5nIHRoZW0gdG8gTlVMTCksIGFueSBzdWJzZXF1ZW50IHVzZSBvZiB0aGVzZSBwb2ludGVycyAoZS5nLiwgaW4gYHNtY193cl90eF9nZXRfdjJfc2xvdGAgb3IgYHNtY193cl90eF9wcm9jZXNzX2NxZWApIHdvdWxkIHJlc3VsdCBpbiBhIGRldGVybWluaXN0aWMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBBIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBjYXVzZXMgYSBzdGFuZGFyZCBrZXJuZWwgb29wcyBhbmQgaXMgdHJpdmlhbGx5IGNhdWdodCBieSBzdGFuZGFyZCB0ZXN0aW5nLCBLQVNBTiwgb3IgZXZlbiB3aXRob3V0IGFueSBzYW5pdGl6ZXJzLlxuXG5UaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2Ugb3Igb3ZlciB0aGUgbmV0d29yay4gVGhlIG5ldHdvcmsgdHJhbnNtaXNzaW9uIGZ1bmN0aW9ucyAoZS5nLiwgYHNtY193cl90eF92Ml9zZW5kYCkgb25seSBzZW5kIHRoZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGxlbmd0aCBvZiB0aGUgYnVmZmVyLCBhbmQgdGhlIGNhbGxlcnMgKGxpa2UgYHNtY19sbGNfc2VuZF9hZGRfbGlua2ApIGV4cGxpY2l0bHkgemVybyBhbmQgaW5pdGlhbGl6ZSB0aGUgZXhhY3QgbnVtYmVyIG9mIGJ5dGVzIHRoZXkgdHJhbnNtaXQuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgU01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHkmIzM5O3Mgd3JpdGUgcmVxdWVzdCAoV1IpIHRyYW5zbWlzc2lvbiBsb2dpYywgc3BlY2lmaWNhbGx5IHRoZSBgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RgIGFuZCBgc21jX3dyX3R4X3B1dF9zbG90YCBmdW5jdGlvbnMuIEl0IGNoYW5nZXMgdGhlIHdhaXQgbG9vcCBmb3IgZ2V0dGluZyBhIGZyZWUgc2xvdCB0byB1c2UgYHByZXBhcmVfdG9fd2FpdF9leGNsdXNpdmVgIGFuZCBmaXhlcyBhIGBtZW1zZXRgIGJ1ZyBpbiBgc21jX3dyX3R4X3B1dF9zbG90YC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjb3JlIHRvIHRoZSBTTUMgcHJvdG9jb2wmIzM5O3MgZGF0YSB0cmFuc21pc3Npb24gYW5kIGFyZSByZWFjaGFibGUgdmlhIHNvY2tldCBvcGVyYXRpb25zLiBGdXp6aW5nIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIG5ldyB3YWl0IGxvZ2ljIGFuZCBtZW1vcnkgb3BlcmF0aW9ucyBhcmUgY29ycmVjdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDUyOGEyZDVhNWFhMmUyN2NhNmRkNzEzNDNhZWQxNTAxM2JlMmI2MTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxMDoyMTo0NyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY193ci5jIGIvbmV0L3NtYy9zbWNfd3IuY1xuaW5kZXggNTljOTJiNDY5NDVjNS4uMmNkZDQwNjNjMTNkNiAxMDA2NDRcbi0tLSBhL25ldC9zbWMvc21jX3dyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zbWMvc21jX3dyLmNcbkBAIC0xOTgsMTEgJiM0MzsxOTgsMTMgQEAgaW50IHNtY193cl90eF9nZXRfZnJlZV9zbG90KHN0cnVjdCBzbWNfbGluayAqbGluayxcbiBcdFx0XHQgICAgc3RydWN0IHNtY19yZG1hX3dyICoqd3JfcmRtYV9idWYsXG4gXHRcdFx0ICAgIHN0cnVjdCBzbWNfd3JfdHhfcGVuZF9wcml2ICoqd3JfcGVuZF9wcml2KVxuIHtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBTTUNfV1JfVFhfV0FJVF9GUkVFX1NMT1RfVElNRTtcbiBcdHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyID0gc21jX2dldF9sZ3IobGluayk7XG4gXHRzdHJ1Y3Qgc21jX3dyX3R4X3BlbmQgKndyX3BlbmQ7XG4gXHR1MzIgaWR4ID0gbGluay1cdTAwM2V3cl90eF9jbnQ7XG4gXHRzdHJ1Y3QgaWJfc2VuZF93ciAqd3JfaWI7XG4gXHR1NjQgd3JfaWQ7XG4mIzQzO1x0REVGSU5FX1dBSVQod2FpdCk7XG4gXHRpbnQgcmM7XG4gXG4gXHQqd3JfYnVmID0gTlVMTDtcbkBAIC0yMTIsMTcgJiM0MzsyMTQsMzEgQEAgaW50IHNtY193cl90eF9nZXRfZnJlZV9zbG90KHN0cnVjdCBzbWNfbGluayAqbGluayxcbiBcdFx0aWYgKHJjKVxuIFx0XHRcdHJldHVybiByYztcbiBcdH0gZWxzZSB7XG4tXHRcdHJjID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoXG4tXHRcdFx0bGluay1cdTAwM2V3cl90eF93YWl0LFxuLVx0XHRcdCFzbWNfbGlua19zZW5kYWJsZShsaW5rKSB8fFxuLVx0XHRcdGxnci1cdTAwM2V0ZXJtaW5hdGluZyB8fFxuLVx0XHRcdChzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdF9pbmRleChsaW5rLCBcdTAwMjZpZHgpICE9IC1FQlVTWSksXG4tXHRcdFx0U01DX1dSX1RYX1dBSVRfRlJFRV9TTE9UX1RJTUUpO1xuLVx0XHRpZiAoIXJjKSB7XG4tXHRcdFx0LyogdGltZW91dCAtIHRlcm1pbmF0ZSBsaW5rICovXG4tXHRcdFx0c21jcl9saW5rX2Rvd25fY29uZF9zY2hlZChsaW5rKTtcbi1cdFx0XHRyZXR1cm4gLUVQSVBFO1xuJiM0MztcdFx0cmMgPSAwO1xuJiM0MztcdFx0Zm9yICg7Oykge1xuJiM0MztcdFx0XHRwcmVwYXJlX3RvX3dhaXRfZXhjbHVzaXZlKFx1MDAyNmxpbmstXHUwMDNld3JfdHhfd2FpdCwgXHUwMDI2d2FpdCxcbiYjNDM7XHRcdFx0XHRcdFx0ICBUQVNLX0lOVEVSUlVQVElCTEUpO1xuJiM0MztcdFx0XHRpZiAoIXNtY19saW5rX3NlbmRhYmxlKGxpbmspIHx8IGxnci1cdTAwM2V0ZXJtaW5hdGluZyB8fFxuJiM0MztcdFx0XHQgICAgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RfaW5kZXgobGluaywgXHUwMDI2aWR4KSAhPSAtRUJVU1kpXG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdHRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpO1xuJiM0MztcdFx0XHQvKiByZS1jaGVjayAqL1xuJiM0MztcdFx0XHRpZiAoIXNtY19saW5rX3NlbmRhYmxlKGxpbmspIHx8IGxnci1cdTAwM2V0ZXJtaW5hdGluZyB8fFxuJiM0MztcdFx0XHQgICAgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RfaW5kZXgobGluaywgXHUwMDI2aWR4KSAhPSAtRUJVU1kpXG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdGlmICghdGltZW91dCkge1xuJiM0MztcdFx0XHRcdC8qIHRpbWVvdXQgLSB0ZXJtaW5hdGUgbGluayAqL1xuJiM0MztcdFx0XHRcdHNtY3JfbGlua19kb3duX2NvbmRfc2NoZWQobGluayk7XG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7XG4mIzQzO1x0XHRcdFx0cmMgPSAtRVJFU1RBUlRTWVM7XG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdH1cbiBcdFx0fVxuJiM0MztcdFx0ZmluaXNoX3dhaXQoXHUwMDI2bGluay1cdTAwM2V3cl90eF93YWl0LCBcdTAwMjZ3YWl0KTtcbiYjNDM7XHRcdGlmIChyYylcbiYjNDM7XHRcdFx0cmV0dXJuIHJjO1xuIFx0XHRpZiAoaWR4ID09IGxpbmstXHUwMDNld3JfdHhfY250KVxuIFx0XHRcdHJldHVybiAtRVBJUEU7XG4gXHR9XG5AQCAtMjg4LDEwICYjNDM7MzA0LDEwIEBAIGludCBzbWNfd3JfdHhfcHV0X3Nsb3Qoc3RydWN0IHNtY19saW5rICpsaW5rLFxuIFx0fSBlbHNlIGlmIChsaW5rLVx1MDAzZWxnci1cdTAwM2VzbWNfdmVyc2lvbiA9PSBTTUNfVjIgXHUwMDI2XHUwMDI2XG4gXHRcdCAgIHBlbmQtXHUwMDNlaWR4ID09IGxpbmstXHUwMDNld3JfdHhfY250KSB7XG4gXHRcdC8qIExhcmdlIHYyIGJ1ZmZlciAqL1xuLVx0XHRtZW1zZXQoXHUwMDI2bGluay1cdTAwM2V3cl90eF92Ml9wZW5kLCAwLFxuLVx0XHQgICAgICAgc2l6ZW9mKGxpbmstXHUwMDNld3JfdHhfdjJfcGVuZCkpO1xuLVx0XHRtZW1zZXQoXHUwMDI2bGluay1cdTAwM2VsZ3ItXHUwMDNld3JfdHhfYnVmX3YyLCAwLFxuLVx0XHQgICAgICAgc2l6ZW9mKGxpbmstXHUwMDNlbGdyLVx1MDAzZXdyX3R4X2J1Zl92MikpO1xuJiM0MztcdFx0bWVtc2V0KGxpbmstXHUwMDNld3JfdHhfdjJfcGVuZCwgMCxcbiYjNDM7XHRcdCAgICAgICBzaXplb2YoKmxpbmstXHUwMDNld3JfdHhfdjJfcGVuZCkpO1xuJiM0MztcdFx0bWVtc2V0KGxpbmstXHUwMDNlbGdyLVx1MDAzZXdyX3R4X2J1Zl92MiwgMCxcbiYjNDM7XHRcdCAgICAgICBzaXplb2YoKmxpbmstXHUwMDNlbGdyLVx1MDAzZXdyX3R4X2J1Zl92MikpO1xuIFx0XHRyZXR1cm4gMTtcbiBcdH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U01DJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c21jX3dyX3R4X2dldF9mcmVlX3Nsb3QmIzM0OywKICAgICYjMzQ7c21jX3dyX3R4X3B1dF9zbG90JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseSYjMzk7cyB3cml0ZSByZXF1ZXN0IChXUikgdHJhbnNtaXNzaW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgdGhlIGBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdGAgYW5kIGBzbWNfd3JfdHhfcHV0X3Nsb3RgIGZ1bmN0aW9ucy4gSXQgY2hhbmdlcyB0aGUgd2FpdCBsb29wIGZvciBnZXR0aW5nIGEgZnJlZSBzbG90IHRvIHVzZSBgcHJlcGFyZV90b193YWl0X2V4Y2x1c2l2ZWAgYW5kIGZpeGVzIGEgYG1lbXNldGAgYnVnIGluIGBzbWNfd3JfdHhfcHV0X3Nsb3RgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNvcmUgdG8gdGhlIFNNQyBwcm90b2NvbCYjMzk7cyBkYXRhIHRyYW5zbWlzc2lvbiBhbmQgYXJlIHJlYWNoYWJsZSB2aWEgc29ja2V0IG9wZXJhdGlvbnMuIEZ1enppbmcgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGUgbmV3IHdhaXQgbG9naWMgYW5kIG1lbW9yeSBvcGVyYXRpb25zIGFyZSBjb3JyZWN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTI4YTJkNWE1YWEyZTI3Y2E2ZGQ3MTM0M2FlZDE1MDEzYmUyYjYxNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDIxIDEwOjIxOjQ3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfd3IuYyBiL25ldC9zbWMvc21jX3dyLmMKaW5kZXggNTljOTJiNDY5NDVjNS4uMmNkZDQwNjNjMTNkNiAxMDA2NDQKLS0tIGEvbmV0L3NtYy9zbWNfd3IuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc21jL3NtY193ci5jCkBAIC0xOTgsMTEgJiM0MzsxOTgsMTMgQEAgaW50IHNtY193cl90eF9nZXRfZnJlZV9zbG90KHN0cnVjdCBzbWNfbGluayAqbGluaywKIAkJCSAgICBzdHJ1Y3Qgc21jX3JkbWFfd3IgKip3cl9yZG1hX2J1ZiwKIAkJCSAgICBzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRfcHJpdiAqKndyX3BlbmRfcHJpdikKIHsKJiM0MzsJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gU01DX1dSX1RYX1dBSVRfRlJFRV9TTE9UX1RJTUU7CiAJc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IgPSBzbWNfZ2V0X2xncihsaW5rKTsKIAlzdHJ1Y3Qgc21jX3dyX3R4X3BlbmQgKndyX3BlbmQ7CiAJdTMyIGlkeCA9IGxpbmstJmd0O3dyX3R4X2NudDsKIAlzdHJ1Y3QgaWJfc2VuZF93ciAqd3JfaWI7CiAJdTY0IHdyX2lkOwomIzQzOwlERUZJTkVfV0FJVCh3YWl0KTsKIAlpbnQgcmM7CiAKIAkqd3JfYnVmID0gTlVMTDsKQEAgLTIxMiwxNyAmIzQzOzIxNCwzMSBAQCBpbnQgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3Qoc3RydWN0IHNtY19saW5rICpsaW5rLAogCQlpZiAocmMpCiAJCQlyZXR1cm4gcmM7CiAJfSBlbHNlIHsKLQkJcmMgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCgKLQkJCWxpbmstJmd0O3dyX3R4X3dhaXQsCi0JCQkhc21jX2xpbmtfc2VuZGFibGUobGluaykgfHwKLQkJCWxnci0mZ3Q7dGVybWluYXRpbmcgfHwKLQkJCShzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdF9pbmRleChsaW5rLCAmYW1wO2lkeCkgIT0gLUVCVVNZKSwKLQkJCVNNQ19XUl9UWF9XQUlUX0ZSRUVfU0xPVF9USU1FKTsKLQkJaWYgKCFyYykgewotCQkJLyogdGltZW91dCAtIHRlcm1pbmF0ZSBsaW5rICovCi0JCQlzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKGxpbmspOwotCQkJcmV0dXJuIC1FUElQRTsKJiM0MzsJCXJjID0gMDsKJiM0MzsJCWZvciAoOzspIHsKJiM0MzsJCQlwcmVwYXJlX3RvX3dhaXRfZXhjbHVzaXZlKCZhbXA7bGluay0mZ3Q7d3JfdHhfd2FpdCwgJmFtcDt3YWl0LAomIzQzOwkJCQkJCSAgVEFTS19JTlRFUlJVUFRJQkxFKTsKJiM0MzsJCQlpZiAoIXNtY19saW5rX3NlbmRhYmxlKGxpbmspIHx8IGxnci0mZ3Q7dGVybWluYXRpbmcgfHwKJiM0MzsJCQkgICAgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RfaW5kZXgobGluaywgJmFtcDtpZHgpICE9IC1FQlVTWSkKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJdGltZW91dCA9IHNjaGVkdWxlX3RpbWVvdXQodGltZW91dCk7CiYjNDM7CQkJLyogcmUtY2hlY2sgKi8KJiM0MzsJCQlpZiAoIXNtY19saW5rX3NlbmRhYmxlKGxpbmspIHx8IGxnci0mZ3Q7dGVybWluYXRpbmcgfHwKJiM0MzsJCQkgICAgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RfaW5kZXgobGluaywgJmFtcDtpZHgpICE9IC1FQlVTWSkKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJaWYgKCF0aW1lb3V0KSB7CiYjNDM7CQkJCS8qIHRpbWVvdXQgLSB0ZXJtaW5hdGUgbGluayAqLwomIzQzOwkJCQlzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKGxpbmspOwomIzQzOwkJCQlicmVhazsKJiM0MzsJCQl9CiYjNDM7CQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CiYjNDM7CQkJCXJjID0gLUVSRVNUQVJUU1lTOwomIzQzOwkJCQlicmVhazsKJiM0MzsJCQl9CiAJCX0KJiM0MzsJCWZpbmlzaF93YWl0KCZhbXA7bGluay0mZ3Q7d3JfdHhfd2FpdCwgJmFtcDt3YWl0KTsKJiM0MzsJCWlmIChyYykKJiM0MzsJCQlyZXR1cm4gcmM7CiAJCWlmIChpZHggPT0gbGluay0mZ3Q7d3JfdHhfY250KQogCQkJcmV0dXJuIC1FUElQRTsKIAl9CkBAIC0yODgsMTAgJiM0MzszMDQsMTAgQEAgaW50IHNtY193cl90eF9wdXRfc2xvdChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssCiAJfSBlbHNlIGlmIChsaW5rLSZndDtsZ3ItJmd0O3NtY192ZXJzaW9uID09IFNNQ19WMiAmYW1wOyZhbXA7CiAJCSAgIHBlbmQtJmd0O2lkeCA9PSBsaW5rLSZndDt3cl90eF9jbnQpIHsKIAkJLyogTGFyZ2UgdjIgYnVmZmVyICovCi0JCW1lbXNldCgmYW1wO2xpbmstJmd0O3dyX3R4X3YyX3BlbmQsIDAsCi0JCSAgICAgICBzaXplb2YobGluay0mZ3Q7d3JfdHhfdjJfcGVuZCkpOwotCQltZW1zZXQoJmFtcDtsaW5rLSZndDtsZ3ItJmd0O3dyX3R4X2J1Zl92MiwgMCwKLQkJICAgICAgIHNpemVvZihsaW5rLSZndDtsZ3ItJmd0O3dyX3R4X2J1Zl92MikpOwomIzQzOwkJbWVtc2V0KGxpbmstJmd0O3dyX3R4X3YyX3BlbmQsIDAsCiYjNDM7CQkgICAgICAgc2l6ZW9mKCpsaW5rLSZndDt3cl90eF92Ml9wZW5kKSk7CiYjNDM7CQltZW1zZXQobGluay0mZ3Q7bGdyLSZndDt3cl90eF9idWZfdjIsIDAsCiYjNDM7CQkgICAgICAgc2l6ZW9mKCpsaW5rLSZndDtsZ3ItJmd0O3dyX3R4X2J1Zl92MikpOwogCQlyZXR1cm4gMTsKIAl9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg1NgoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDE3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNNQyBXUiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9zbWMvc21jX3dyLmNgLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIGNoYW5nZSBpbiBgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RgLiAgVGhleSYjMzk7dmUgcmVwbGFjZWQgYHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0YCB3aXRoIGEgbWFudWFsIHdhaXQgbG9vcCB1c2luZyBgcHJlcGFyZV90b193YWl0X2V4Y2x1c2l2ZWAuICBUaGF0JiMzOTtzIGEgc2lnbmlmaWNhbnQgc2hpZnQuIE15IGltbWVkaWF0ZSBxdWVzdGlvbnMgYXJlOiBXaGF0JiMzOTtzIHRoZSByYXRpb25hbGU/IElzIHRoaXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIGEgYnVnIGZpeCwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/ICBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvbnRleHQgb2YgKndoeSogdGhleSBtYWRlIHRoaXMgY2hvaWNlLiBXZSBoYXZlIHRvIGNvbnNpZGVyIHdoZXRoZXIgdGhpcyBjaGFuZ2UgcHJvcGVybHkgYWRkcmVzc2VzIHRoZSByYWNlIGNvbmRpdGlvbiB0aGF0IGB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dGAgd2FzIHN1cHBvc2VkbHkgaW5zdWZmaWNpZW50IHRvIHJlc29sdmUuCgpUaGUgb3RoZXIgaXRlbSBpbiB0aGUgZGlmZiBpcyBhIGBtZW1zZXRgIGJ1ZyBmaXggaW4gYHNtY193cl90eF9wdXRfc2xvdGAuIFRoZXkgaGFkIHRoZSB3cm9uZyBhcmd1bWVudHMsIHVzaW5nIHRoZSBhZGRyZXNzIG9mIHRoZSBzdHJ1Y3R1cmUgaW5zdGVhZCBvZiB0aGUgc3RydWN0dXJlIGl0c2VsZi4gVGhpcyBpcyBzdHJhaWdodGZvcndhcmQ7IGEgY2xhc3NpYyBtZW1vcnkgY29ycnVwdGlvbiBidWcgdGhhdCBuZWVkZWQgdG8gYmUgYWRkcmVzc2VkLiAgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvcnJlY3RlZCBgbWVtc2V0YCBvcGVyYXRpb24gaXMgc3VmZmljaWVudCB0byBjbGVhciBhbnkgcG90ZW50aWFsIHN0YWxlIGRhdGEuCgpUbyBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBhY3QgYW5kIHRoZSBpbXBsaWNhdGlvbnMsIEkgbmVlZCB0byBjaGVjayB0aGUgc291cmNlIGNvZGUgYW5kIGRpc2NvdmVyIHdoaWNoIGNvbmZpZyBvcHRpb25zIGFyZSByZWxldmFudC4gSSYjMzk7bGwgaGVhZCBvdmVyIHRvIGBuZXQvc21jL3NtY193ci5jYCBhbmQgZmlndXJlIG91dCB3aGljaCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZCB3aXRoIHRoaXMgbW9kdWxlLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBhc3Nlc3NpbmcgdGhlIHNjb3BlIG9mIHRoaXMgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NtY193cl90eF9nZXRfZnJlZV9zbG90JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfd3IuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL3NtY193ci5jPTE2Mj12b2lkIHNtY193cl90eF9jcV9oYW5kbGVyKHN0cnVjdCBpYl9jcSAqaWJfY3EsIHZvaWQgKmNxX2NvbnRleHQpXG4tLVxubmV0L3NtYy9zbWNfd3IuYy0xNzAtXG5uZXQvc21jL3NtY193ci5jOjE3MTpzdGF0aWMgaW5saW5lIGludCBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdF9pbmRleChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHUzMiAqaWR4KVxubmV0L3NtYy9zbWNfd3IuYy0xNzIte1xuLS1cbm5ldC9zbWMvc21jX3dyLmMtMTg0LS8qKlxubmV0L3NtYy9zbWNfd3IuYzoxODU6ICogc21jX3dyX3R4X2dldF9mcmVlX3Nsb3QoKSAtIHJldHVybnMgYnVmZmVyIGZvciBtZXNzYWdlIGFzc2VtYmx5LFxubmV0L3NtYy9zbWNfd3IuYy0xODYtICpcdFx0XHRhbmQgc2V0cyBpbmZvIGZvciBwZW5kaW5nIHRyYW5zbWl0IHRyYWNraW5nXG4tLVxubmV0L3NtYy9zbWNfd3IuYy0xOTQtICovXG5uZXQvc21jL3NtY193ci5jOjE5NTppbnQgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3Qoc3RydWN0IHNtY19saW5rICpsaW5rLFxubmV0L3NtYy9zbWNfd3IuYy0xOTYtXHRcdFx0ICAgIHNtY193cl90eF9oYW5kbGVyIGhhbmRsZXIsXG4tLVxubmV0L3NtYy9zbWNfd3IuYy0yMTItXHRpZiAoaW5fc29mdGlycSgpIHx8IGxnci1cdTAwM2V0ZXJtaW5hdGluZykge1xubmV0L3NtYy9zbWNfd3IuYzoyMTM6XHRcdHJjID0gc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RfaW5kZXgobGluaywgXHUwMDI2aWR4KTtcbm5ldC9zbWMvc21jX3dyLmMtMjE0LVx0XHRpZiAocmMpXG4tLVxubmV0L3NtYy9zbWNfd3IuYy0yMjEtXHRcdFx0aWYgKCFzbWNfbGlua19zZW5kYWJsZShsaW5rKSB8fCBsZ3ItXHUwMDNldGVybWluYXRpbmcgfHxcbm5ldC9zbWMvc21jX3dyLmM6MjIyOlx0XHRcdCAgICBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdF9pbmRleChsaW5rLCBcdTAwMjZpZHgpICE9IC1FQlVTWSlcbm5ldC9zbWMvc21jX3dyLmMtMjIzLVx0XHRcdFx0YnJlYWs7XG4tLVxubmV0L3NtYy9zbWNfd3IuYy0yMjYtXHRcdFx0aWYgKCFzbWNfbGlua19zZW5kYWJsZShsaW5rKSB8fCBsZ3ItXHUwMDNldGVybWluYXRpbmcgfHxcbm5ldC9zbWMvc21jX3dyLmM6MjI3Olx0XHRcdCAgICBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdF9pbmRleChsaW5rLCBcdTAwMjZpZHgpICE9IC1FQlVTWSlcbm5ldC9zbWMvc21jX3dyLmMtMjI4LVx0XHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAwOAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLY29uZmlnIGFuZCBTTUMgLSBBIFF1aWNrIENoZWNrKioKCk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgU01DIChTeXN0ZW0gTWFuYWdlbWVudCBDb250cm9sbGVyKSBpcyBjb25maWd1cmVkIGluIHRoaXMgcHJvamVjdC4gRmlyc3QsIG15IG1lbnRhbCBjaGVja2xpc3QgZ29lczogKktjb25maWcqLiBHb3R0YSBzdGFydCB0aGVyZS4gSXQmIzM5O3MgdGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiBodWIsIHJpZ2h0PyBBbGwgdGhlIGVzc2VudGlhbCBzZXR0aW5ncywgZGVwZW5kZW5jaWVzLCBhbmQgcG90ZW50aWFsIGZlYXR1cmUgZmxhZ3MgZm9yIFNNQyBzaG91bGQgYmUgZGVmaW5lZCBpbiBLY29uZmlnIGZpbGVzIHNvbWV3aGVyZSBpbiB0aGUgcmVsZXZhbnQgc291cmNlIHRyZWUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBwYXRoIG9yIHRoZSByZWxldmFudCBpbmNsdWRlIGRpcmVjdGl2ZXMgdG8gbG9vayB0aHJvdWdoLiBJJiMzOTttIHRoaW5raW5nLCBpcyBTTUMgZW5hYmxlZCBhcyBhIGRldmljZSwgb3IgYSBmdW5jdGlvbj8gV2hhdCBhcmUgdGhlIGtleSBvcHRpb25zLCBhbmQgYXJlIHRoZXJlIGRlcGVuZGVuY2llcyBvbiBvdGhlciBzdWJzeXN0ZW1zIHRoYXQgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEJlc3QgdG8gZ2V0IGEgcXVpY2sgb3ZlcnZpZXcgb2YgaG93IHRoZSBidWlsZCBzeXN0ZW0gd2lsbCB0cmVhdCBpdCBhdCBhIGhpZ2ggbGV2ZWwuIFRoYXQgd2lsbCBzYXZlIG1lIHNvbWUgdGltZSBsYXRlciB3aGVuIEkgZGl2ZSBpbnRvIHRoZSBjb2RlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNNQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9zbWMvS2NvbmZpZzoyOmNvbmZpZyBTTUNcbm5ldC9zbWMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7U01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcJiMzNDtcbi0tXG5uZXQvc21jL0tjb25maWctMTMtXG5uZXQvc21jL0tjb25maWc6MTQ6Y29uZmlnIFNNQ19ESUFHXG5uZXQvc21jL0tjb25maWctMTUtXHR0cmlzdGF0ZSBcJiMzNDtTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC9zbWMvS2NvbmZpZy0yMi1cbm5ldC9zbWMvS2NvbmZpZzoyMzpjb25maWcgU01DX0hTX0NUUkxfQlBGXG5uZXQvc21jL0tjb25maWctMjQtXHRib29sIFwmIzM0O0dlbmVyaWMgZUJQRiBob29rIGZvciBTTUMgaGFuZHNoYWtlIGZsb3dcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDM0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTTUMgQ29uZmlndXJhdGlvbiBhbmQgTW9kaWZpZWQgRnVuY3Rpb25zKioKCk9rYXksIHNvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gc2V0dGluZyBpcyBTTUMuIE15IGltbWVkaWF0ZSBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGUgdHdvIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiB0b3VjaGVkOiBgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RgIGFuZCBgc21jX3dyX3R4X3B1dF9zbG90YC4gVGhleSYjMzk7cmUgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIHdyaXRlIHRyYW5zYWN0aW9uIHByb2Nlc3MsIGJ1dCBJIG5lZWQgdG8gYXNjZXJ0YWluIHRoZWlyIHNjb3BlIGFuZCBpbXBhY3QuIFRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGdvaW5nIHRvIGRvIGlzIGRldGVybWluZSBpZiB0aGVzZSBmdW5jdGlvbnMgYXJlIHBhcnQgb2YgdGhlIHB1YmxpYyBBUEkgb3IgaWYgdGhleSYjMzk7cmUgaW50ZXJuYWwuIEFyZSB0aGV5IGV4cG9ydGVkLCBtZWFuaW5nIG90aGVyIG1vZHVsZXMgb3IgY29tcG9uZW50cyBjYW4gY2FsbCB0aGVtPyBBbmQgZXZlbiBpZiBub3QgZXhwb3J0ZWQsIGFyZSB0aGV5IGNhbGxlZCBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgZ3JhcGggaXMgZXNzZW50aWFsIHRvIGFzc2Vzc2luZyB0aGUgcG90ZW50aWFsIHJpcHBsZSBlZmZlY3RzIG9mIHRoZSBtb2RpZmljYXRpb25zLiBBbnkgY2hhbmdlcyBoZXJlIGNvdWxkIGFmZmVjdCBhIHdpZGUgcmFuZ2Ugb2YgZnVuY3Rpb25hbGl0eSwgc28gSSBuZWVkIHRvIGtub3cgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGZpdCBpbnRvIHRoZSBsYXJnZXIgcGljdHVyZSBiZWZvcmUgSSBjYW4gZXZhbHVhdGUgdGhlIGNvZGUgY2hhbmdlcyBwcm9wZXJseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2NkYy5jPTczPWludCBzbWNfY2RjX2dldF9mcmVlX3Nsb3Qoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uLFxuLS1cbm5ldC9zbWMvc21jX2NkYy5jLTgwLVxubmV0L3NtYy9zbWNfY2RjLmM6ODE6XHRyYyA9IHNtY193cl90eF9nZXRfZnJlZV9zbG90KGxpbmssIHNtY19jZGNfdHhfaGFuZGxlciwgd3JfYnVmLFxubmV0L3NtYy9zbWNfY2RjLmMtODItXHRcdFx0XHQgICAgIHdyX3JkbWFfYnVmLFxuLS1cbm5ldC9zbWMvc21jX2xsYy5jPTQwMD1zdGF0aWMgaW50IHNtY19sbGNfYWRkX3BlbmRpbmdfc2VuZChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXG4tLVxubmV0L3NtYy9zbWNfbGxjLmMtNDA1LVxubmV0L3NtYy9zbWNfbGxjLmM6NDA2Olx0cmMgPSBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdChsaW5rLCBzbWNfbGxjX3R4X2hhbmRsZXIsIHdyX2J1ZiwgTlVMTCxcbm5ldC9zbWMvc21jX2xsYy5jLTQwNy1cdFx0XHRcdCAgICAgcGVuZCk7XG4tLVxubmV0L3NtYy9zbWNfd3IuYz0xNjI9dm9pZCBzbWNfd3JfdHhfY3FfaGFuZGxlcihzdHJ1Y3QgaWJfY3EgKmliX2NxLCB2b2lkICpjcV9jb250ZXh0KVxuLS1cbm5ldC9zbWMvc21jX3dyLmMtMTcwLVxubmV0L3NtYy9zbWNfd3IuYzoxNzE6c3RhdGljIGlubGluZSBpbnQgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RfaW5kZXgoc3RydWN0IHNtY19saW5rICpsaW5rLCB1MzIgKmlkeClcbm5ldC9zbWMvc21jX3dyLmMtMTcyLXtcbi0tXG5uZXQvc21jL3NtY193ci5jLTE4NC0vKipcbm5ldC9zbWMvc21jX3dyLmM6MTg1OiAqIHNtY193cl90eF9nZXRfZnJlZV9zbG90KCkgLSByZXR1cm5zIGJ1ZmZlciBmb3IgbWVzc2FnZSBhc3NlbWJseSxcbm5ldC9zbWMvc21jX3dyLmMtMTg2LSAqXHRcdFx0YW5kIHNldHMgaW5mbyBmb3IgcGVuZGluZyB0cmFuc21pdCB0cmFja2luZ1xuLS1cbm5ldC9zbWMvc21jX3dyLmMtMTk0LSAqL1xubmV0L3NtYy9zbWNfd3IuYzoxOTU6aW50IHNtY193cl90eF9nZXRfZnJlZV9zbG90KHN0cnVjdCBzbWNfbGluayAqbGluayxcbm5ldC9zbWMvc21jX3dyLmMtMTk2LVx0XHRcdCAgICBzbWNfd3JfdHhfaGFuZGxlciBoYW5kbGVyLFxuLS1cbm5ldC9zbWMvc21jX3dyLmMtMjEyLVx0aWYgKGluX3NvZnRpcnEoKSB8fCBsZ3ItXHUwMDNldGVybWluYXRpbmcpIHtcbm5ldC9zbWMvc21jX3dyLmM6MjEzOlx0XHRyYyA9IHNtY193cl90eF9nZXRfZnJlZV9zbG90X2luZGV4KGxpbmssIFx1MDAyNmlkeCk7XG5uZXQvc21jL3NtY193ci5jLTIxNC1cdFx0aWYgKHJjKVxuLS1cbm5ldC9zbWMvc21jX3dyLmMtMjIxLVx0XHRcdGlmICghc21jX2xpbmtfc2VuZGFibGUobGluaykgfHwgbGdyLVx1MDAzZXRlcm1pbmF0aW5nIHx8XG5uZXQvc21jL3NtY193ci5jOjIyMjpcdFx0XHQgICAgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RfaW5kZXgobGluaywgXHUwMDI2aWR4KSAhPSAtRUJVU1kpXG5uZXQvc21jL3NtY193ci5jLTIyMy1cdFx0XHRcdGJyZWFrO1xuLS1cbm5ldC9zbWMvc21jX3dyLmMtMjI2LVx0XHRcdGlmICghc21jX2xpbmtfc2VuZGFibGUobGluaykgfHwgbGdyLVx1MDAzZXRlcm1pbmF0aW5nIHx8XG5uZXQvc21jL3NtY193ci5jOjIyNzpcdFx0XHQgICAgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RfaW5kZXgobGluaywgXHUwMDI2aWR4KSAhPSAtRUJVU1kpXG5uZXQvc21jL3NtY193ci5jLTIyOC1cdFx0XHRcdGJyZWFrO1xuLS1cbm5ldC9zbWMvc21jX3dyLmg9MTExPXZvaWQgc21jX3dyX2FkZF9kZXYoc3RydWN0IHNtY19pYl9kZXZpY2UgKnNtY2liZGV2KTtcbm5ldC9zbWMvc21jX3dyLmgtMTEyLVxubmV0L3NtYy9zbWNfd3IuaDoxMTM6aW50IHNtY193cl90eF9nZXRfZnJlZV9zbG90KHN0cnVjdCBzbWNfbGluayAqbGluaywgc21jX3dyX3R4X2hhbmRsZXIgaGFuZGxlcixcbm5ldC9zbWMvc21jX3dyLmgtMTE0LVx0XHRcdCAgICBzdHJ1Y3Qgc21jX3dyX2J1ZiAqKndyX2J1ZixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzM2CgkJCQkJCQlvdXRwdXQ6IDE4OAoJCQkJCQkJdGhvdWdodHM6IDIxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFN0cmF0ZWd5IGZvciBTTUMgUHJvdG9jb2wqKgoKT2theSwgc28gSSYjMzk7dmUgaWRlbnRpZmllZCB0d28ga2V5IGZ1bmN0aW9ucyB3aXRoaW4gdGhlIFNNQyBwcm90b2NvbCB0aGF0IHNlZW0gbGlrZSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nOiBgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RgIGFuZCBgc21jX3dyX3R4X3B1dF9zbG90YC4gQ29uc2lkZXJpbmcgU01DIGlzIGEgc29ja2V0IHByb3RvY29sIGZhbWlseSwgaXQmIzM5O3MgZGVmaW5pdGVseSB3aXRoaW4gcmVhY2ggZm9yIHRoaXMga2luZCBvZiB0ZXN0aW5nLCBhbmQgYmFzZWQgb24gbXkgaW5pdGlhbCBhc3Nlc3NtZW50LCB0aGVzZSBmdW5jdGlvbnMgYXJlIHdvcnRoIGEgY2xvc2VyIGxvb2suIFRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIHNldHRpbmcgaXMgYFNNQ2AuCgpOb3csIGJlZm9yZSBJIGNvbW1pdCB0byBqdXN0IHRob3NlLCBsZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgcmVsYXRlZCBmdW5jdGlvbnMgdGhhdCBtaWdodCBicm9hZGVuIHRoZSBzY29wZSBhbmQgaW5jcmVhc2UgbXkgY2hhbmNlcyBvZiBmaW5kaW5nIHNvbWV0aGluZyBpbnRlcmVzdGluZy4gRXhjZWxsZW50LCBJIHNlZSB0aGF0IGBzbWNfY2RjX2dldF9mcmVlX3Nsb3RgICphbHNvKiB1dGlsaXplcyBgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RgLCBhbmQgYHNtY19sbGNfYWRkX3BlbmRpbmdfc2VuZGAgaXMgYWxzbyBjYWxsaW5nIGBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdGAuCgpBbHJpZ2h0LCBJJiMzOTtsbCB1cGRhdGUgbXkgc3RyYXRlZ3kuIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBGb2N1c1N5bWJvbHNgIHRvIHRoZSBwYWlyIG9mIGBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdGAgYW5kIGBzbWNfd3JfdHhfcHV0X3Nsb3RgIGFuZCB3aWxsIG1ha2Ugc3VyZSB0byBlbmFibGUgdGhlIGBTTUNgIGNvbmZpZ3VyYXRpb24sIGFuZCB0aGF0IHdpbGwgYmUgbXkgZnV6emluZyB0YXJnZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTTUMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdCYjMzQ7LAogICAgJiMzNDtzbWNfd3JfdHhfcHV0X3Nsb3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNNQyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5JiMzOTtzIHdyaXRlIHJlcXVlc3QgKFdSKSB0cmFuc21pc3Npb24gbG9naWMsIHNwZWNpZmljYWxseSB0aGUgYHNtY193cl90eF9nZXRfZnJlZV9zbG90YCBhbmQgYHNtY193cl90eF9wdXRfc2xvdGAgZnVuY3Rpb25zLiBJdCBjaGFuZ2VzIHRoZSB3YWl0IGxvb3AgZm9yIGdldHRpbmcgYSBmcmVlIHNsb3QgdG8gdXNlIGBwcmVwYXJlX3RvX3dhaXRfZXhjbHVzaXZlYCBhbmQgZml4ZXMgYSBgbWVtc2V0YCBidWcgaW4gYHNtY193cl90eF9wdXRfc2xvdGAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY29yZSB0byB0aGUgU01DIHByb3RvY29sJiMzOTtzIGRhdGEgdHJhbnNtaXNzaW9uIGFuZCBhcmUgcmVhY2hhYmxlIHZpYSBzb2NrZXQgb3BlcmF0aW9ucy4gRnV6emluZyBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoZSBuZXcgd2FpdCBsb2dpYyBhbmQgbWVtb3J5IG9wZXJhdGlvbnMgYXJlIGNvcnJlY3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NNQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NtY193cl90eF9nZXRfZnJlZV9zbG90JiMzNDssCiAgICAmIzM0O3NtY193cl90eF9wdXRfc2xvdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgU01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHkmIzM5O3Mgd3JpdGUgcmVxdWVzdCAoV1IpIHRyYW5zbWlzc2lvbiBsb2dpYywgc3BlY2lmaWNhbGx5IHRoZSBgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RgIGFuZCBgc21jX3dyX3R4X3B1dF9zbG90YCBmdW5jdGlvbnMuIEl0IGNoYW5nZXMgdGhlIHdhaXQgbG9vcCBmb3IgZ2V0dGluZyBhIGZyZWUgc2xvdCB0byB1c2UgYHByZXBhcmVfdG9fd2FpdF9leGNsdXNpdmVgIGFuZCBmaXhlcyBhIGBtZW1zZXRgIGJ1ZyBpbiBgc21jX3dyX3R4X3B1dF9zbG90YC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjb3JlIHRvIHRoZSBTTUMgcHJvdG9jb2wmIzM5O3MgZGF0YSB0cmFuc21pc3Npb24gYW5kIGFyZSByZWFjaGFibGUgdmlhIHNvY2tldCBvcGVyYXRpb25zLiBGdXp6aW5nIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIG5ldyB3YWl0IGxvZ2ljIGFuZCBtZW1vcnkgb3BlcmF0aW9ucyBhcmUgY29ycmVjdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MjI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgdHdvIGlzc3VlczpcbjEuIEl0IHJlcGxhY2VzIGB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dGAgd2l0aCBhbiBvcGVuLWNvZGVkIHdhaXQgbG9vcCB1c2luZyBgcHJlcGFyZV90b193YWl0X2V4Y2x1c2l2ZWAgdG8gZml4IGEgdGh1bmRlcmluZyBoZXJkIHByb2JsZW0gd2hlcmUgbXVsdGlwbGUgd2FpdGluZyB0aHJlYWRzIGFyZSB3b2tlbiB1cCBzaW11bHRhbmVvdXNseS4gVGhpcyBpcyBhIHBlcmZvcm1hbmNlL2NvbmN1cnJlbmN5IGZpeC5cbjIuIEl0IGZpeGVzIGEgYnVnIGluIGBzbWNfd3JfdHhfcHV0X3Nsb3RgIHdoZXJlIGBtZW1zZXRgIHdhcyBpbmNvcnJlY3RseSBhcHBsaWVkIHRvIHRoZSBwb2ludGVycyBgXHUwMDI2bGluay1cdTAwM2V3cl90eF92Ml9wZW5kYCBhbmQgYFx1MDAyNmxpbmstXHUwMDNlbGdyLVx1MDAzZXdyX3R4X2J1Zl92MmAgaW5zdGVhZCBvZiB0aGUgc3RydWN0dXJlcyB0aGV5IHBvaW50IHRvLlxuXG5CZWNhdXNlIHRoZSBvcmlnaW5hbCBjb2RlIHplcm9lZCB0aGUgcG9pbnRlcnMgdGhlbXNlbHZlcyAoZWZmZWN0aXZlbHkgc2V0dGluZyB0aGVtIHRvIE5VTEwpLCBhbnkgc3Vic2VxdWVudCB1c2Ugb2YgdGhlc2UgcG9pbnRlcnMgKGUuZy4sIGluIGBzbWNfd3JfdHhfZ2V0X3YyX3Nsb3RgIG9yIGBzbWNfd3JfdHhfcHJvY2Vzc19jcWVgKSB3b3VsZCByZXN1bHQgaW4gYSBkZXRlcm1pbmlzdGljIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4gQSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgY2F1c2VzIGEgc3RhbmRhcmQga2VybmVsIG9vcHMgYW5kIGlzIHRyaXZpYWxseSBjYXVnaHQgYnkgc3RhbmRhcmQgdGVzdGluZywgS0FTQU4sIG9yIGV2ZW4gd2l0aG91dCBhbnkgc2FuaXRpemVycy5cblxuVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlIG9yIG92ZXIgdGhlIG5ldHdvcmsuIFRoZSBuZXR3b3JrIHRyYW5zbWlzc2lvbiBmdW5jdGlvbnMgKGUuZy4sIGBzbWNfd3JfdHhfdjJfc2VuZGApIG9ubHkgc2VuZCB0aGUgZXhwbGljaXRseSBpbml0aWFsaXplZCBsZW5ndGggb2YgdGhlIGJ1ZmZlciwgYW5kIHRoZSBjYWxsZXJzIChsaWtlIGBzbWNfbGxjX3NlbmRfYWRkX2xpbmtgKSBleHBsaWNpdGx5IHplcm8gYW5kIGluaXRpYWxpemUgdGhlIGV4YWN0IG51bWJlciBvZiBieXRlcyB0aGV5IHRyYW5zbWl0LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTI4YTJkNWE1YWEyZTI3Y2E2ZGQ3MTM0M2FlZDE1MDEzYmUyYjYxNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDIxIDEwOjIxOjQ3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfd3IuYyBiL25ldC9zbWMvc21jX3dyLmMKaW5kZXggNTljOTJiNDY5NDVjNS4uMmNkZDQwNjNjMTNkNiAxMDA2NDQKLS0tIGEvbmV0L3NtYy9zbWNfd3IuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc21jL3NtY193ci5jCkBAIC0xOTgsMTEgJiM0MzsxOTgsMTMgQEAgaW50IHNtY193cl90eF9nZXRfZnJlZV9zbG90KHN0cnVjdCBzbWNfbGluayAqbGluaywKIAkJCSAgICBzdHJ1Y3Qgc21jX3JkbWFfd3IgKip3cl9yZG1hX2J1ZiwKIAkJCSAgICBzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRfcHJpdiAqKndyX3BlbmRfcHJpdikKIHsKJiM0MzsJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gU01DX1dSX1RYX1dBSVRfRlJFRV9TTE9UX1RJTUU7CiAJc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IgPSBzbWNfZ2V0X2xncihsaW5rKTsKIAlzdHJ1Y3Qgc21jX3dyX3R4X3BlbmQgKndyX3BlbmQ7CiAJdTMyIGlkeCA9IGxpbmstJmd0O3dyX3R4X2NudDsKIAlzdHJ1Y3QgaWJfc2VuZF93ciAqd3JfaWI7CiAJdTY0IHdyX2lkOwomIzQzOwlERUZJTkVfV0FJVCh3YWl0KTsKIAlpbnQgcmM7CiAKIAkqd3JfYnVmID0gTlVMTDsKQEAgLTIxMiwxNyAmIzQzOzIxNCwzMSBAQCBpbnQgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3Qoc3RydWN0IHNtY19saW5rICpsaW5rLAogCQlpZiAocmMpCiAJCQlyZXR1cm4gcmM7CiAJfSBlbHNlIHsKLQkJcmMgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCgKLQkJCWxpbmstJmd0O3dyX3R4X3dhaXQsCi0JCQkhc21jX2xpbmtfc2VuZGFibGUobGluaykgfHwKLQkJCWxnci0mZ3Q7dGVybWluYXRpbmcgfHwKLQkJCShzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdF9pbmRleChsaW5rLCAmYW1wO2lkeCkgIT0gLUVCVVNZKSwKLQkJCVNNQ19XUl9UWF9XQUlUX0ZSRUVfU0xPVF9USU1FKTsKLQkJaWYgKCFyYykgewotCQkJLyogdGltZW91dCAtIHRlcm1pbmF0ZSBsaW5rICovCi0JCQlzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKGxpbmspOwotCQkJcmV0dXJuIC1FUElQRTsKJiM0MzsJCXJjID0gMDsKJiM0MzsJCWZvciAoOzspIHsKJiM0MzsJCQlwcmVwYXJlX3RvX3dhaXRfZXhjbHVzaXZlKCZhbXA7bGluay0mZ3Q7d3JfdHhfd2FpdCwgJmFtcDt3YWl0LAomIzQzOwkJCQkJCSAgVEFTS19JTlRFUlJVUFRJQkxFKTsKJiM0MzsJCQlpZiAoIXNtY19saW5rX3NlbmRhYmxlKGxpbmspIHx8IGxnci0mZ3Q7dGVybWluYXRpbmcgfHwKJiM0MzsJCQkgICAgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RfaW5kZXgobGluaywgJmFtcDtpZHgpICE9IC1FQlVTWSkKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJdGltZW91dCA9IHNjaGVkdWxlX3RpbWVvdXQodGltZW91dCk7CiYjNDM7CQkJLyogcmUtY2hlY2sgKi8KJiM0MzsJCQlpZiAoIXNtY19saW5rX3NlbmRhYmxlKGxpbmspIHx8IGxnci0mZ3Q7dGVybWluYXRpbmcgfHwKJiM0MzsJCQkgICAgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RfaW5kZXgobGluaywgJmFtcDtpZHgpICE9IC1FQlVTWSkKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJaWYgKCF0aW1lb3V0KSB7CiYjNDM7CQkJCS8qIHRpbWVvdXQgLSB0ZXJtaW5hdGUgbGluayAqLwomIzQzOwkJCQlzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKGxpbmspOwomIzQzOwkJCQlicmVhazsKJiM0MzsJCQl9CiYjNDM7CQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CiYjNDM7CQkJCXJjID0gLUVSRVNUQVJUU1lTOwomIzQzOwkJCQlicmVhazsKJiM0MzsJCQl9CiAJCX0KJiM0MzsJCWZpbmlzaF93YWl0KCZhbXA7bGluay0mZ3Q7d3JfdHhfd2FpdCwgJmFtcDt3YWl0KTsKJiM0MzsJCWlmIChyYykKJiM0MzsJCQlyZXR1cm4gcmM7CiAJCWlmIChpZHggPT0gbGluay0mZ3Q7d3JfdHhfY250KQogCQkJcmV0dXJuIC1FUElQRTsKIAl9CkBAIC0yODgsMTAgJiM0MzszMDQsMTAgQEAgaW50IHNtY193cl90eF9wdXRfc2xvdChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssCiAJfSBlbHNlIGlmIChsaW5rLSZndDtsZ3ItJmd0O3NtY192ZXJzaW9uID09IFNNQ19WMiAmYW1wOyZhbXA7CiAJCSAgIHBlbmQtJmd0O2lkeCA9PSBsaW5rLSZndDt3cl90eF9jbnQpIHsKIAkJLyogTGFyZ2UgdjIgYnVmZmVyICovCi0JCW1lbXNldCgmYW1wO2xpbmstJmd0O3dyX3R4X3YyX3BlbmQsIDAsCi0JCSAgICAgICBzaXplb2YobGluay0mZ3Q7d3JfdHhfdjJfcGVuZCkpOwotCQltZW1zZXQoJmFtcDtsaW5rLSZndDtsZ3ItJmd0O3dyX3R4X2J1Zl92MiwgMCwKLQkJICAgICAgIHNpemVvZihsaW5rLSZndDtsZ3ItJmd0O3dyX3R4X2J1Zl92MikpOwomIzQzOwkJbWVtc2V0KGxpbmstJmd0O3dyX3R4X3YyX3BlbmQsIDAsCiYjNDM7CQkgICAgICAgc2l6ZW9mKCpsaW5rLSZndDt3cl90eF92Ml9wZW5kKSk7CiYjNDM7CQltZW1zZXQobGluay0mZ3Q7bGdyLSZndDt3cl90eF9idWZfdjIsIDAsCiYjNDM7CQkgICAgICAgc2l6ZW9mKCpsaW5rLSZndDtsZ3ItJmd0O3dyX3R4X2J1Zl92MikpOwogCQlyZXR1cm4gMTsKIAl9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NTMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhpcyBTTUMgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RgIGluIGBuZXQvc21jL3NtY193ci5jYC4gVGhlIGZpcnN0IHRoaW5nIEkgc2VlIGlzIHRoZXkmIzM5O3JlIGRpdGNoaW5nIGB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dGAgZm9yIGEgY3VzdG9tIHdhaXQgbG9vcCB1c2luZyBgcHJlcGFyZV90b193YWl0X2V4Y2x1c2l2ZWAsIGBzY2hlZHVsZV90aW1lb3V0YCwgYW5kIGBmaW5pc2hfd2FpdGAuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIEkgd29uZGVyIHdoYXQgdGhlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBhcmUuIElzIHRoZXJlIGEgc3BlY2lmaWMgcmVhc29uIHRoZXkmIzM5O3JlIGF2b2lkaW5nIHRoZSBzdGFuZGFyZCBrZXJuZWwgbWVjaGFuaXNtcyBoZXJlPwoKVGhlbiBJIGhpdCBhIGJ1ZyBmaXggaW4gYHNtY193cl90eF9wdXRfc2xvdGAsIGFuZCB0aGlzIGNhdGNoZXMgbXkgZXllIGltbWVkaWF0ZWx5LiBUaGV5JiMzOTtyZSBjaGFuZ2luZyB0aGUgYG1lbXNldGAgY2FsbC4gVGhleSYjMzk7cmUgcmVwbGFjaW5nIGBtZW1zZXQoJmFtcDtsaW5rLSZndDt3cl90eF92Ml9wZW5kLCAwLCBzaXplb2YobGluay0mZ3Q7d3JfdHhfdjJfcGVuZCkpYCB3aXRoIHNvbWV0aGluZyBlbHNlLiBXYWl0LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdC4uLiBhaGEhIEl0JiMzOTtzIGBtZW1zZXQobGluay0mZ3Q7d3JfdHhfdjJfcGVuZCwgMCwgc2l6ZW9mKCpsaW5rLSZndDt3cl90eF92Ml9wZW5kKSlgLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBwb2ludGVyIGRlcmVmZXJlbmNpbmcgaXNzdWUuIFRoZSBvbGQgY29kZSB3YXMgbGlrZWx5IHplcm9pbmcgdGhlICpwb2ludGVyKiBpdHNlbGYsIHJhdGhlciB0aGFuIHRoZSBtZW1vcnkgaXQgcG9pbnRlZCB0by4gTGV0IG1lIHNlZS4uLiBJZiBgbGluay0mZ3Q7d3JfdHhfdjJfcGVuZGAgaXMgYSBwb2ludGVyLCB3aGljaCBJIHN1c3BlY3QgaXQgaXMsIHRoZSBwcmV2aW91cyBjb2RlIHdhcyBvbmx5IHplcm9pbmcgdGhlIGFkZHJlc3Mgc3RvcmVkIGluIHRoZSBwb2ludGVyIGl0c2VsZiwgd2hpY2ggaXMgcHJvYmFibHkgOCBieXRlcy4gVGhpcyBtZWFucyB0aGUgYWxsb2NhdGVkIGJ1ZmZlciB3YXNuJiMzOTt0IGFjdHVhbGx5IGdldHRpbmcgaW5pdGlhbGl6ZWQsIHJpZ2h0PwoKT2theSwgc28gaWYgdGhlIGJ1ZmZlciBpc24mIzM5O3QgemVyb2VkLCBjb3VsZCB0aGF0IGxlYWQgdG8gc29tZSBuYXN0aW5lc3MgZG93biB0aGUgbGluZSwgbWF5YmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdHJhbnNtaXR0ZWQgb3IgdXNlZD8gVGhhdCBjb3VsZCBiZSBhIHNlcmlvdXMgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSwgb3IgYXQgbGVhc3QgYSBwb3RlbnRpYWwgZGF0YSBjb3JydXB0aW9uIGlzc3VlLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgc3RydWN0dXJlIG9mIHRoaXMgdGhpbmcuLi4gVGltZSB0byBkaXZlIGludG8gdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBzbWNfbGlua2AgYW5kIGBzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXBgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGB3cl90eF92Ml9wZW5kYCBhbmQgYHdyX3R4X2J1Zl92MmAgYWN0dWFsbHkgKmFyZSogdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhpcyBmaXguIEdvdHRhIGdldCB0aGUgbG93LWRvd24gb24gdGhlIHNpemVzIGFuZCB1c2FnZSBwYXR0ZXJucyBvZiB0aGVzZSBidWZmZXJzLiBUaGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IHNtY19saW5rIFxceyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2NvcmUuaD04OT1zdHJ1Y3Qgc21jX3JkbWFfd3Ige1x0XHRcdFx0Lyogd29yayByZXF1ZXN0cyBwZXIgbWVzc2FnZVxuLS1cbm5ldC9zbWMvc21jX2NvcmUuaC05Ni1cbm5ldC9zbWMvc21jX2NvcmUuaDo5NzpzdHJ1Y3Qgc21jX2xpbmsge1xubmV0L3NtYy9zbWNfY29yZS5oLTk4LVx0c3RydWN0IHNtY19pYl9kZXZpY2VcdCpzbWNpYmRldjtcdC8qIGliLWRldmljZSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODQwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgU01DIExpbmsgU3RydWN0dXJlKioKCk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYHNtY19saW5rYCBzdHJ1Y3QuIExldCYjMzk7cyBoZWFkIHN0cmFpZ2h0IHRvIGBuZXQvc21jL3NtY19jb3JlLmhgLiBJIHdhbnQgdG8gcXVpY2tseSByZXZpZXcgaXRzIGtleSBtZW1iZXJzIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIG92ZXJhbGwgU01DIHByb3RvY29sIGltcGxlbWVudGF0aW9uLiBJJiMzOTttIHByaW1hcmlseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgdGhlIGN1cnJlbnQgc3RhdGUgYW5kIGhvdyBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIGxvd2VyIGxheWVycyBhbmQgdGhlIHNvY2tldC4gTGV0IG1lIHNlZS4uLiBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueXRoaW5nIHRoYXQgaGFzIHRvIGRvIHdpdGggY29ubmVjdGlvbiBlc3RhYmxpc2htZW50LCBkYXRhIHRyYW5zZmVyLCBhbmQgZXJyb3IgaGFuZGxpbmcuIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIGFzc3VtcHRpb25zIEkmIzM5O20gbWFraW5nIGFib3V0IGl0cyBpbnRlcm5hbCBzdGF0ZSBhcmUgc3RpbGwgdmFsaWQgd2l0aCByZXNwZWN0IHRvIHRoZSBjdXJyZW50IGNvZGUuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gbG9vayBmb3IgYW55IHJlY2VudCBjaGFuZ2VzIHRoYXQgbWlnaHQgaGF2ZSBhZmZlY3RlZCBpdHMgY29yZSBmdW5jdGlvbmFsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2NvcmUuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDk3Olx0c3RydWN0IHNtY19saW5rIHtcbiAgOTg6XHRcdHN0cnVjdCBzbWNfaWJfZGV2aWNlXHQqc21jaWJkZXY7XHQvKiBpYi1kZXZpY2UgKi9cbiAgOTk6XHRcdHU4XHRcdFx0aWJwb3J0O1x0XHQvKiBwb3J0IC0gdmFsdWVzIDEgfCAyICovXG4gMTAwOlx0XHRzdHJ1Y3QgaWJfcGRcdFx0KnJvY2VfcGQ7XHQvKiBJQiBwcm90ZWN0aW9uIGRvbWFpbixcbiAxMDE6XHRcdFx0XHRcdFx0XHQgKiB1bmlxdWUgZm9yIGV2ZXJ5IFJvQ0UgUVBcbiAxMDI6XHRcdFx0XHRcdFx0XHQgKi9cbiAxMDM6XHRcdHN0cnVjdCBpYl9xcFx0XHQqcm9jZV9xcDtcdC8qIElCIHF1ZXVlIHBhaXIgKi9cbiAxMDQ6XHRcdHN0cnVjdCBpYl9xcF9hdHRyXHRxcF9hdHRyO1x0LyogSUIgcXVldWUgcGFpciBhdHRyaWJ1dGVzICovXG4gMTA1Olx0XG4gMTA2Olx0XHRzdHJ1Y3Qgc21jX3dyX2J1Zlx0KndyX3R4X2J1ZnM7XHQvKiBXUiBzZW5kIHBheWxvYWQgYnVmZmVycyAqL1xuIDEwNzpcdFx0c3RydWN0IGliX3NlbmRfd3JcdCp3cl90eF9pYnM7XHQvKiBXUiBzZW5kIG1ldGEgZGF0YSAqL1xuIDEwODpcdFx0c3RydWN0IGliX3NnZVx0XHQqd3JfdHhfc2dlcztcdC8qIFdSIHNlbmQgZ2F0aGVyIG1ldGEgZGF0YSAqL1xuIDEwOTpcdFx0c3RydWN0IHNtY19yZG1hX3NnZXNcdCp3cl90eF9yZG1hX3NnZXM7LypSRE1BIFdSSVRFIGdhdGhlciBtZXRhIGRhdGEqL1xuIDExMDpcdFx0c3RydWN0IHNtY19yZG1hX3dyXHQqd3JfdHhfcmRtYXM7XHQvKiBXUiBSRE1BIFdSSVRFICovXG4gMTExOlx0XHRzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRcdCp3cl90eF9wZW5kcztcdC8qIFdSIHNlbmQgd2FpdGluZyBmb3IgQ1FFICovXG4gMTEyOlx0XHRzdHJ1Y3QgY29tcGxldGlvblx0KndyX3R4X2NvbXBsO1x0LyogV1Igc2VuZCBDUUUgY29tcGxldGlvbiAqL1xuIDExMzpcdFx0LyogYWJvdmUgZm91ciB2ZWN0b3JzIGhhdmUgd3JfdHhfY250IGVsZW1lbnRzIGFuZCB1c2UgdGhlIHNhbWUgaW5kZXggKi9cbiAxMTQ6XHRcdHN0cnVjdCBpYl9zZW5kX3dyXHQqd3JfdHhfdjJfaWI7XHQvKiBXUiBzZW5kIHYyIG1ldGEgZGF0YSAqL1xuIDExNTpcdFx0c3RydWN0IGliX3NnZVx0XHQqd3JfdHhfdjJfc2dlO1x0LyogV1Igc2VuZCB2MiBnYXRoZXIgbWV0YSBkYXRhKi9cbiAxMTY6XHRcdHN0cnVjdCBzbWNfd3JfdHhfcGVuZFx0KndyX3R4X3YyX3BlbmQ7XHQvKiBXUiBzZW5kIHYyIHdhaXRpbmcgZm9yIENRRSAqL1xuIDExNzpcdFx0ZG1hX2FkZHJfdFx0XHR3cl90eF9kbWFfYWRkcjtcdC8qIERNQSBhZGRyZXNzIG9mIHdyX3R4X2J1ZnMgKi9cbiAxMTg6XHRcdGRtYV9hZGRyX3RcdFx0d3JfdHhfdjJfZG1hX2FkZHI7IC8qIERNQSBhZGRyZXNzIG9mIHYyIHR4IGJ1ZiovXG4gMTE5Olx0XHRhdG9taWNfbG9uZ190XHRcdHdyX3R4X2lkO1x0Lyogc2VxICMgb2YgbGFzdCBzZW50IFdSICovXG4gMTIwOlx0XHR1bnNpZ25lZCBsb25nXHRcdCp3cl90eF9tYXNrO1x0LyogYml0IG1hc2sgb2YgdXNlZCBpbmRleGVzICovXG4gMTIxOlx0XHR1MzJcdFx0XHR3cl90eF9jbnQ7XHQvKiBudW1iZXIgb2YgV1Igc2VuZCBidWZmZXJzICovXG4gMTIyOlx0XHR3YWl0X3F1ZXVlX2hlYWRfdFx0d3JfdHhfd2FpdDtcdC8qIHdhaXQgZm9yIGZyZWUgV1Igc2VuZCBidWYgKi9cbiAxMjM6XHRcdHN0cnVjdCB7XG4gMTI0Olx0XHRcdHN0cnVjdCBwZXJjcHVfcmVmXHR3cl90eF9yZWZzO1xuIDEyNTpcdFx0fSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xuIDEyNjpcdFx0c3RydWN0IGNvbXBsZXRpb25cdHR4X3JlZl9jb21wO1xuIDEyNzpcdFxuIDEyODpcdFx0dThcdFx0XHQqd3JfcnhfYnVmcztcdC8qIFdSIHJlY3YgcGF5bG9hZCBidWZmZXJzICovXG4gMTI5Olx0XHRzdHJ1Y3QgaWJfcmVjdl93clx0KndyX3J4X2licztcdC8qIFdSIHJlY3YgbWV0YSBkYXRhICovXG4gMTMwOlx0XHRzdHJ1Y3QgaWJfc2dlXHRcdCp3cl9yeF9zZ2VzO1x0LyogV1IgcmVjdiBzY2F0dGVyIG1ldGEgZGF0YSAqL1xuIDEzMTpcdFx0LyogYWJvdmUgdGhyZWUgdmVjdG9ycyBoYXZlIHdyX3J4X2NudCBlbGVtZW50cyBhbmQgdXNlIHRoZSBzYW1lIGluZGV4ICovXG4gMTMyOlx0XHRpbnRcdFx0XHR3cl9yeF9zZ2VfY250OyAvKiByeCBzZ2UsIFYxIGlzIDEsIFYyIGlzIGVpdGhlciAyIG9yIDEgKi9cbiAxMzM6XHRcdGludFx0XHRcdHdyX3J4X2J1ZmxlbjtcdC8qIGJ1ZmZlciBsZW4gZm9yIHRoZSBmaXJzdCBzZ2UsIGxlbiBmb3IgdGhlXG4gMTM0Olx0XHRcdFx0XHRcdFx0ICogc2Vjb25kIHNnZSBpcyBsZ3Igc2hhcmVkIGlmIHJ4IHNnZSBpcyAyLlxuIDEzNTpcdFx0XHRcdFx0XHRcdCAqL1xuIDEzNjpcdFx0ZG1hX2FkZHJfdFx0XHR3cl9yeF9kbWFfYWRkcjtcdC8qIERNQSBhZGRyZXNzIG9mIHdyX3J4X2J1ZnMgKi9cbiAxMzc6XHRcdGRtYV9hZGRyX3RcdFx0d3JfcnhfdjJfZG1hX2FkZHI7IC8qIERNQSBhZGRyZXNzIG9mIHYyIHJ4IGJ1ZiovXG4gMTM4Olx0XHR1NjRcdFx0XHR3cl9yeF9pZDtcdC8qIHNlcSAjIG9mIGxhc3QgcmVjdiBXUiAqL1xuIDEzOTpcdFx0dTY0XHRcdFx0d3JfcnhfaWRfY29tcGw7IC8qIHNlcSAjIG9mIGxhc3QgY29tcGxldGVkIFdSICovXG4gMTQwOlx0XHR1MzJcdFx0XHR3cl9yeF9jbnQ7XHQvKiBudW1iZXIgb2YgV1IgcmVjdiBidWZmZXJzICovXG4gMTQxOlx0XHR1bnNpZ25lZCBsb25nXHRcdHdyX3J4X3RzdGFtcDtcdC8qIGppZmZpZXMgd2hlbiBsYXN0IGJ1ZiByeCAqL1xuIDE0MjpcdFx0d2FpdF9xdWV1ZV9oZWFkX3QgICAgICAgd3JfcnhfZW1wdHlfd2FpdDsgLyogd2FpdCBmb3IgUlEgZW1wdHkgKi9cbiAxNDM6XHRcbiAxNDQ6XHRcdHN0cnVjdCBpYl9yZWdfd3JcdHdyX3JlZztcdFx0LyogV1IgcmVnaXN0ZXIgbWVtb3J5IHJlZ2lvbiAqL1xuIDE0NTpcdFx0d2FpdF9xdWV1ZV9oZWFkX3RcdHdyX3JlZ193YWl0O1x0Lyogd2FpdCBmb3Igd3JfcmVnIHJlc3VsdCAqL1xuIDE0NjpcdFx0c3RydWN0IHtcbiAxNDc6XHRcdFx0c3RydWN0IHBlcmNwdV9yZWZcdHdyX3JlZ19yZWZzO1xuIDE0ODpcdFx0fSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xuIDE0OTpcdFx0c3RydWN0IGNvbXBsZXRpb25cdHJlZ19yZWZfY29tcDtcbiAxNTA6XHRcdGVudW0gc21jX3dyX3JlZ19zdGF0ZVx0d3JfcmVnX3N0YXRlO1x0Lyogc3RhdGUgb2Ygd3JfcmVnIHJlcXVlc3QgKi9cbiAxNTE6XHRcbiAxNTI6XHRcdHU4XHRcdFx0Z2lkW1NNQ19HSURfU0laRV07LyogZ2lkIG1hdGNoaW5nIHVzZWQgdmxhbiBpZCovXG4gMTUzOlx0XHR1OFx0XHRcdHNnaWRfaW5kZXg7XHQvKiBnaWQgaW5kZXggZm9yIHZsYW4gaWQgICAgICAqL1xuIDE1NDpcdFx0dTMyXHRcdFx0cGVlcl9xcG47XHQvKiBRUCBudW1iZXIgb2YgcGVlciAqL1xuIDE1NTpcdFx0ZW51bSBpYl9tdHVcdFx0cGF0aF9tdHU7XHQvKiB1c2VkIG10dSAqL1xuIDE1NjpcdFx0ZW51bSBpYl9tdHVcdFx0cGVlcl9tdHU7XHQvKiBtdHUgc2l6ZSBvZiBwZWVyICovXG4gMTU3Olx0XHR1MzJcdFx0XHRwc25faW5pdGlhbDtcdC8qIFFQIHR4IGluaXRpYWwgcGFja2V0IHNlcW5vICovXG4gMTU4Olx0XHR1MzJcdFx0XHRwZWVyX3BzbjtcdC8qIFFQIHJ4IGluaXRpYWwgcGFja2V0IHNlcW5vICovXG4gMTU5Olx0XHR1OFx0XHRcdHBlZXJfbWFjW0VUSF9BTEVOXTtcdC8qID0gZ2lkWzg6MTB8fDEzOjE1XSAqL1xuIDE2MDpcdFx0dThcdFx0XHRwZWVyX2dpZFtTTUNfR0lEX1NJWkVdO1x0LyogZ2lkIG9mIHBlZXIqL1xuIDE2MTpcdFx0dThcdFx0XHRsaW5rX2lkO1x0LyogdW5pcXVlICMgd2l0aGluIGxpbmsgZ3JvdXAgKi9cbiAxNjI6XHRcdHU4XHRcdFx0bGlua191aWRbU01DX0xHUl9JRF9TSVpFXTsgLyogdW5pcXVlIGxuayBpZCAqL1xuIDE2MzpcdFx0dThcdFx0XHRwZWVyX2xpbmtfdWlkW1NNQ19MR1JfSURfU0laRV07IC8qIHBlZXIgdWlkICovXG4gMTY0Olx0XHR1OFx0XHRcdGxpbmtfaWR4O1x0LyogaW5kZXggaW4gbGdyIGxpbmsgYXJyYXkgKi9cbiAxNjU6XHRcdHU4XHRcdFx0bGlua19pc19hc3ltO1x0LyogaXMgbGluayBhc3ltbWV0cmljPyAqL1xuIDE2NjpcdFx0dThcdFx0XHRjbGVhcmluZyA6IDE7XHQvKiBsaW5rIGlzIGJlaW5nIGNsZWFyZWQgKi9cbiAxNjc6XHRcdHJlZmNvdW50X3RcdFx0cmVmY250O1x0XHQvKiBsaW5rIHJlZmVyZW5jZSBjb3VudCAqL1xuIDE2ODpcdFx0c3RydWN0IHNtY19saW5rX2dyb3VwXHQqbGdyO1x0XHQvKiBwYXJlbnQgbGluayBncm91cCAqL1xuIDE2OTpcdFx0c3RydWN0IHdvcmtfc3RydWN0XHRsaW5rX2Rvd25fd3JrO1x0Lyogd3JrIHRvIGJyaW5nIGxpbmsgZG93biAqL1xuIDE3MDpcdFx0Y2hhclx0XHRcdGlibmFtZVtJQl9ERVZJQ0VfTkFNRV9NQVhdOyAvKiBpYiBkZXZpY2UgbmFtZSAqL1xuIDE3MTpcdFx0aW50XHRcdFx0bmRldl9pZmlkeDsgLyogbmV0d29yayBkZXZpY2UgaWZpbmRleCAqL1xuIDE3MjpcdFxuIDE3MzpcdFx0ZW51bSBzbWNfbGlua19zdGF0ZVx0c3RhdGU7XHRcdC8qIHN0YXRlIG9mIGxpbmsgKi9cbiAxNzQ6XHRcdHN0cnVjdCBkZWxheWVkX3dvcmtcdGxsY190ZXN0bGlua193cms7IC8qIHRlc3RsaW5rIHdvcmtlciAqL1xuIDE3NTpcdFx0c3RydWN0IGNvbXBsZXRpb25cdGxsY190ZXN0bGlua19yZXNwOyAvKiB3YWl0IGZvciByeCBvZiB0ZXN0bGluayAqL1xuIDE3NjpcdFx0aW50XHRcdFx0bGxjX3Rlc3RsaW5rX3RpbWU7IC8qIHRlc3RsaW5rIGludGVydmFsICovXG4gMTc3Olx0XHRhdG9taWNfdFx0XHRjb25uX2NudDsgLyogY29ubmVjdGlvbnMgb24gdGhpcyBsaW5rICovXG4gMTc4Olx0XHR1MTZcdFx0XHRtYXhfc2VuZF93cjtcbiAxNzk6XHRcdHUxNlx0XHRcdG1heF9yZWN2X3dyO1xuIDE4MDpcdH07XG4gMTgxOlx0XG4gMTgyOlx0LyogRm9yIG5vdyB3ZSBqdXN0IGFsbG93IG9uZSBwYXJhbGxlbCBsaW5rIHBlciBsaW5rIGdyb3VwLiBUaGUgU01DIHByb3RvY29sXG4gMTgzOlx0ICogYWxsb3dzIG1vcmUgKHVwIHRvIDgpLlxuIDE4NDpcdCAqL1xuIDE4NTpcdCNkZWZpbmUgU01DX0xJTktTX1BFUl9MR1JfTUFYXHQzXG4gMTg2Olx0I2RlZmluZSBTTUNfU0lOR0xFX0xJTktcdFx0MFxuIDE4NzpcdCNkZWZpbmUgU01DX0xJTktTX0FERF9MTktfTUlOXHQxXHQvKiBtaW4uICMgb2YgbGlua3MgcGVyIGxpbmsgZ3JvdXAgKi9cbiAxODg6XHQjZGVmaW5lIFNNQ19MSU5LU19BRERfTE5LX01BWFx0Mlx0LyogbWF4LiAjIG9mIGxpbmtzIHBlciBsaW5rIGdyb3VwLCBhbHNvIGlzIHRoZVxuIDE4OTpcdFx0XHRcdFx0XHQgKiBkZWZhdWx0IHZhbHVlIGZvciBzbWMtciB2MS4wIGFuZCB2Mi4wXG4gMTkwOlx0XHRcdFx0XHRcdCAqL1xuIDE5MTpcdCNkZWZpbmUgU01DX0xJTktTX1BFUl9MR1JfTUFYX1BSRUZFUlx0Mlx0LyogUHJlZmVycmVkIG1heCBsaW5rcyBwZXIgbGluayBncm91cCB1c2VkIGZvclxuIDE5MjpcdFx0XHRcdFx0XHRcdCAqIFNNQy1SIHYyLjEgYW5kIGxhdGVyIG5lZ290aWF0aW9uLCB2ZW5kb3JzIG9yXG4gMTkzOlx0XHRcdFx0XHRcdFx0ICogZGlzdHJpYnV0aW9ucyBtYXkgbW9kaWZ5IGl0IHRvIGEgdmFsdWUgYmV0d2VlblxuIDE5NDpcdFx0XHRcdFx0XHRcdCAqIDEtMiBhcyBuZWVkZWQuXG4gMTk1Olx0XHRcdFx0XHRcdFx0ICovXG4gMTk2Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzODkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVidWdnaW5nIGEgUG90ZW50aWFsIE5VTEwgUG9pbnRlciBEZXJlZmVyZW5jZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBgc3RydWN0IHNtY193cl90eF9wZW5kICp3cl90eF92Ml9wZW5kO2AuIFJpZ2h0LCBhIHBvaW50ZXIuIFRoZW4gdGhhdCBgbWVtc2V0YCBjYWxsLCBgbWVtc2V0KCZhbXA7bGluay0mZ3Q7d3JfdHhfdjJfcGVuZCwgMCwgc2l6ZW9mKGxpbmstJmd0O3dyX3R4X3YyX3BlbmQpKWAsIHRoYXQgd2FzIHplcm9pbmcgdGhlICpwb2ludGVyKiBpdHNlbGYsIG5vdCB0aGUgbWVtb3J5IGl0IHBvaW50cyB0by4gSG1tLCB0aGF0JiMzOTtzIG5vdCB3aGF0JiMzOTtzIGludGVuZGVkLgoKU28gYGxpbmstJmd0O3dyX3R4X3YyX3BlbmRgIGlzIGEgcG9pbnRlciB0byB0aGUgYHN0cnVjdCBzbWNfd3JfdHhfcGVuZGAuIElmIHRoYXQgYG1lbXNldGAgemVyb2VkIHRoZSBwb2ludGVyLCBpdCB3b3VsZCBzZXQgaXQgdG8gTlVMTC4gIEFuZCB0aGF0IG1ha2VzIG1lIHRoaW5rLCBpZiBgbGluay0mZ3Q7d3JfdHhfdjJfcGVuZGAgKndhcyogemVyb2VkLCBpdCB3b3VsZCBiZWNvbWUgTlVMTC4gVGhhdCYjMzk7cyBhIHRleHRib29rIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBzaXR1YXRpb24sIGFuZCBLQVNBTiBvciBhbnkgZGVjZW50IHN0YXRpYyBhbmFseXNpcyB0b29sIHdvdWxkIHBpY2sgdGhhdCB1cCBwcmV0dHkgcXVpY2tseSB0aGUgbmV4dCB0aW1lIGl0IHdhcyB1c2VkLiBJdCYjMzk7cyBhbGxvY2F0ZWQgc29tZXdoZXJlLCB0aG91Z2guIElmIHRoYXQgYmVjYW1lIE5VTEwsIGFuZCB3ZSBhY2Nlc3NlZCBpdCwgd2Ugc2hvdWxkIGJlIHNlZWluZyB0aGF0IHByZXR0eSBlYXNpbHkuCgpCdXQgd2FpdCwgSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZyByZWxhdGVkLiBXaGF0IGFib3V0IGBsaW5rLSZndDtsZ3ItJmd0O3dyX3R4X2J1Zl92MmA/IFRoYXQmIzM5O3MgbGlrZWx5IHJlbGF0ZWQsIGFuZCBJIHdhbnQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGBzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXBgIHRvIHNlZSBob3cgdGhvc2UgYXJlIHJlbGF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBzbWNfbGlua19ncm91cCBcXHsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL3NtY19jb3JlLmg9MjgxPXN0cnVjdCBzbWNfbGxjX2Zsb3cge1xuLS1cbm5ldC9zbWMvc21jX2NvcmUuaC0yODUtXG5uZXQvc21jL3NtY19jb3JlLmg6Mjg2OnN0cnVjdCBzbWNfbGlua19ncm91cCB7XG5uZXQvc21jL3NtY19jb3JlLmgtMjg3LVx0c3RydWN0IGxpc3RfaGVhZFx0bGlzdDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA0OAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgYW5kIHRoaW5raW5nIGFib3V0IHRoZSBzdHJ1Y3Q6CgoqKkFuYWx5emluZyBgc3RydWN0IHNtY19saW5rX2dyb3VwYCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXBgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGF0JiMzOTtzIHRoZSBjb250ZXh0IGhlcmU/IFRoaXMgc2NyZWFtcyBTeXN0ZW1zIE1hbmFnZW1lbnQgQ29udHJvbGxlciwgbGlrZWx5IGRlYWxpbmcgd2l0aCBzb21lIGtpbmQgb2YgbGlua2VkIG9yIGdyb3VwZWQgcmVzb3VyY2UuJiMzNDsgS25vd2luZyB0aGUgbmFtZSwgSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBpbmZvcm1hdGlvbiBhYm91dCBob3cgZGlmZmVyZW50IFNNQyBsaW5rcyBhcmUgb3JnYW5pemVkIGFuZCBtYW5hZ2VkIHRvZ2V0aGVyLiBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIGVsZW1lbnRzIGxpa2UgbGluayBJRHMsIHBlcmhhcHMgc29tZSBraW5kIG9mIGdyb3VwIGlkZW50aWZpZXIsIGFuZCBwb3RlbnRpYWxseSBwb2ludGVycyBvciByZWZlcmVuY2VzIHRvIHRoZSBpbmRpdmlkdWFsIGxpbmtzIHRoZW1zZWx2ZXMsIG9yIGRhdGEgYWJvdXQgdGhlIGdyb3VwIGFzIGEgd2hvbGUuIEkgYWxzbyBleHBlY3QgdGhhdCB0aGVyZSYjMzk7bGwgYmUgZGF0YSByZWdhcmRpbmcgdGhlIHN0YXRlcyBvZiB0aGUgbGlua3MgKGFjdGl2ZS9pbmFjdGl2ZSwgaGVhbHRoeS9mYWlsZWQpLCB3aGljaCB3aWxsIGRpY3RhdGUgdGhlIGdyb3VwJiMzOTtzIG92ZXJhbGwgc3RhdGUuIEkgYmV0IHRoZXJlJiMzOTtzIHNvbWUgc29ydCBvZiByZXNvdXJjZSBsb2NraW5nIG1lY2hhbmlzbSBvciBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlIGluY2x1ZGVkIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIGR1cmluZyBjb25jdXJyZW50IGFjY2VzcyBvZiB0aGUgbGlua3MuIEkmIzM5O20gYWxzbyByZWFsbHkgY3VyaW91cyB3aGV0aGVyIHRoaXMgZGF0YSBzdHJ1Y3R1cmUgaXMgZGVzaWduZWQgdG8gcmVwcmVzZW50IGEgc3RhdGljIGNvbmZpZ3VyYXRpb24gb3IgaWYgaXQgY2FuIGJlIGR5bmFtaWNhbGx5IG1vZGlmaWVkIOKAkyB0aGF0JiMzOTtsbCByZWFsbHkgYWZmZWN0IGhvdyB0aGlzIHN0cnVjdHVyZSBpcyB1c2VkIGFuZCBtYW5hZ2VkIGJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVtLiBVbHRpbWF0ZWx5LCBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IFNNQyBsaW5rcyBhcmUgYWJzdHJhY3RlZCBhbmQgY29udHJvbGxlZCBhdCB0aGUgc29mdHdhcmUgbGV2ZWwuIEkgYWxzbyB3b3VsZG4mIzM5O3QgYmUgc3VycHJpc2VkIHRvIHNlZSBhIHBlcmZvcm1hbmNlIGVsZW1lbnQgaGVyZSwgc3VjaCBhcyBkYXRhIHN0cnVjdHVyZXMgdGhhdCBmYWNpbGl0YXRlIGZhc3QgbG9va3VwcyBvZiBtZW1iZXJzIGluIHRoZSBsaW5rIGdyb3VwLiBJJiMzOTttIGVhZ2VyIHRvIGRpZyBpbiBhbmQgc2VlIGhvdyB3ZWxsIHRoaXMgdGhpbmcgaXMgZGVzaWduZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfY29yZS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjg2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjg2Olx0c3RydWN0IHNtY19saW5rX2dyb3VwIHtcbiAyODc6XHRcdHN0cnVjdCBsaXN0X2hlYWRcdGxpc3Q7XG4gMjg4Olx0XHRzdHJ1Y3QgcmJfcm9vdFx0XHRjb25uc19hbGw7XHQvKiBjb25uZWN0aW9uIHRyZWUgKi9cbiAyODk6XHRcdHJ3bG9ja190XHRcdGNvbm5zX2xvY2s7XHQvKiBwcm90ZWN0cyBjb25uc19hbGwgKi9cbiAyOTA6XHRcdHVuc2lnbmVkIGludFx0XHRjb25uc19udW07XHQvKiBjdXJyZW50ICMgb2YgY29ubmVjdGlvbnMgKi9cbiAyOTE6XHRcdHVuc2lnbmVkIHNob3J0XHRcdHZsYW5faWQ7XHQvKiB2bGFuIGlkIG9mIGxpbmsgZ3JvdXAgKi9cbiAyOTI6XHRcbiAyOTM6XHRcdHN0cnVjdCBsaXN0X2hlYWRcdHNuZGJ1ZnNbU01DX1JNQkVfU0laRVNdOy8qIHR4IGJ1ZmZlcnMgKi9cbiAyOTQ6XHRcdHN0cnVjdCByd19zZW1hcGhvcmVcdHNuZGJ1ZnNfbG9jaztcdC8qIHByb3RlY3RzIHR4IGJ1ZmZlcnMgKi9cbiAyOTU6XHRcdHN0cnVjdCBsaXN0X2hlYWRcdHJtYnNbU01DX1JNQkVfU0laRVNdO1x0LyogcnggYnVmZmVycyAqL1xuIDI5NjpcdFx0c3RydWN0IHJ3X3NlbWFwaG9yZVx0cm1ic19sb2NrO1x0LyogcHJvdGVjdHMgcnggYnVmZmVycyAqL1xuIDI5NzpcdFx0dTY0XHRcdFx0YWxsb2Nfc25kYnVmcztcdC8qIHN0YXRzIG9mIHR4IGJ1ZmZlcnMgKi9cbiAyOTg6XHRcdHU2NFx0XHRcdGFsbG9jX3JtYnM7XHQvKiBzdGF0cyBvZiByeCBidWZmZXJzICovXG4gMjk5Olx0XG4gMzAwOlx0XHR1OFx0XHRcdGlkW1NNQ19MR1JfSURfU0laRV07XHQvKiB1bmlxdWUgbGdyIGlkICovXG4gMzAxOlx0XHRzdHJ1Y3QgZGVsYXllZF93b3JrXHRmcmVlX3dvcms7XHQvKiBkZWxheWVkIGZyZWVpbmcgb2YgYW4gbGdyICovXG4gMzAyOlx0XHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdHRlcm1pbmF0ZV93b3JrO1x0LyogYWJub3JtYWwgbGdyIHRlcm1pbmF0aW9uICovXG4gMzAzOlx0XHRzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdFx0KnR4X3dxO1x0XHQvKiB3cSBmb3IgY29ubi4gdHggd29ya2VycyAqL1xuIDMwNDpcdFx0dThcdFx0XHRzeW5jX2VyciA6IDE7XHQvKiBsZ3Igbm8gbG9uZ2VyIGZpdHMgdG8gcGVlciAqL1xuIDMwNTpcdFx0dThcdFx0XHR0ZXJtaW5hdGluZyA6IDE7LyogbGdyIGlzIHRlcm1pbmF0aW5nICovXG4gMzA2Olx0XHR1OFx0XHRcdGZyZWVpbmcgOiAxO1x0LyogbGdyIGlzIGJlaW5nIGZyZWVkICovXG4gMzA3Olx0XG4gMzA4Olx0XHRyZWZjb3VudF90XHRcdHJlZmNudDtcdFx0LyogbGdyIHJlZmVyZW5jZSBjb3VudCAqL1xuIDMwOTpcdFx0Ym9vbFx0XHRcdGlzX3NtY2Q7XHQvKiBTTUMtUiBvciBTTUMtRCAqL1xuIDMxMDpcdFx0dThcdFx0XHRzbWNfdmVyc2lvbjtcbiAzMTE6XHRcdHU4XHRcdFx0bmVnb3RpYXRlZF9laWRbU01DX01BWF9FSURfTEVOXTtcbiAzMTI6XHRcdHU4XHRcdFx0cGVlcl9vcztcdC8qIHBlZXIgb3BlcmF0aW5nIHN5c3RlbSAqL1xuIDMxMzpcdFx0dThcdFx0XHRwZWVyX3NtY19yZWxlYXNlO1xuIDMxNDpcdFx0dThcdFx0XHRwZWVyX2hvc3RuYW1lW1NNQ19NQVhfSE9TVE5BTUVfTEVOXTtcbiAzMTU6XHRcdHVuaW9uIHtcbiAzMTY6XHRcdFx0c3RydWN0IHsgLyogU01DLVIgKi9cbiAzMTc6XHRcdFx0XHRlbnVtIHNtY19sZ3Jfcm9sZVx0cm9sZTtcbiAzMTg6XHRcdFx0XHRcdFx0XHQvKiBjbGllbnQgb3Igc2VydmVyICovXG4gMzE5Olx0XHRcdFx0c3RydWN0IHNtY19saW5rXHRcdGxua1tTTUNfTElOS1NfUEVSX0xHUl9NQVhdO1xuIDMyMDpcdFx0XHRcdFx0XHRcdC8qIHNtYyBsaW5rICovXG4gMzIxOlx0XHRcdFx0c3RydWN0IHNtY193cl92Ml9idWZcdCp3cl9yeF9idWZfdjI7XG4gMzIyOlx0XHRcdFx0XHRcdFx0LyogV1IgdjIgcmVjdiBwYXlsb2FkIGJ1ZmZlciAqL1xuIDMyMzpcdFx0XHRcdHN0cnVjdCBzbWNfd3JfdjJfYnVmXHQqd3JfdHhfYnVmX3YyO1xuIDMyNDpcdFx0XHRcdFx0XHRcdC8qIFdSIHYyIHNlbmQgcGF5bG9hZCBidWZmZXIgKi9cbiAzMjU6XHRcdFx0XHRjaGFyXHRcdFx0cGVlcl9zeXN0ZW1pZFtTTUNfU1lTVEVNSURfTEVOXTtcbiAzMjY6XHRcdFx0XHRcdFx0XHQvKiB1bmlxdWUgc3lzdGVtX2lkIG9mIHBlZXIgKi9cbiAzMjc6XHRcdFx0XHRzdHJ1Y3Qgc21jX3J0b2tlblx0cnRva2Vuc1tTTUNfUk1CU19QRVJfTEdSX01BWF1cbiAzMjg6XHRcdFx0XHRcdFx0XHRbU01DX0xJTktTX1BFUl9MR1JfTUFYXTtcbiAzMjk6XHRcdFx0XHRcdFx0XHQvKiByZW1vdGUgYWRkci9rZXkgcGFpcnMgKi9cbiAzMzA6XHRcdFx0XHRERUNMQVJFX0JJVE1BUChydG9rZW5zX3VzZWRfbWFzaywgU01DX1JNQlNfUEVSX0xHUl9NQVgpO1xuIDMzMTpcdFx0XHRcdFx0XHRcdC8qIHVzZWQgcnRva2VuIGVsZW1lbnRzICovXG4gMzMyOlx0XHRcdFx0dThcdFx0XHRuZXh0X2xpbmtfaWQ7XG4gMzMzOlx0XHRcdFx0ZW51bSBzbWNfbGdyX3R5cGVcdHR5cGU7XG4gMzM0Olx0XHRcdFx0ZW51bSBzbWNyX2J1Zl90eXBlXHRidWZfdHlwZTtcbiAzMzU6XHRcdFx0XHRcdFx0XHQvKiByZWR1bmRhbmN5IHN0YXRlICovXG4gMzM2Olx0XHRcdFx0dThcdFx0XHRwbmV0X2lkW1NNQ19NQVhfUE5FVElEX0xFTiAmIzQzOyAxXTtcbiAzMzc6XHRcdFx0XHRcdFx0XHQvKiBwbmV0IGlkIG9mIHRoaXMgbGdyICovXG4gMzM4Olx0XHRcdFx0c3RydWN0IGxpc3RfaGVhZFx0bGxjX2V2ZW50X3E7XG4gMzM5Olx0XHRcdFx0XHRcdFx0LyogcXVldWUgZm9yIGxsYyBldmVudHMgKi9cbiAzNDA6XHRcdFx0XHRzcGlubG9ja190XHRcdGxsY19ldmVudF9xX2xvY2s7XG4gMzQxOlx0XHRcdFx0XHRcdFx0LyogcHJvdGVjdHMgbGxjX2V2ZW50X3EgKi9cbiAzNDI6XHRcdFx0XHRzdHJ1Y3Qgcndfc2VtYXBob3JlXHRsbGNfY29uZl9tdXRleDtcbiAzNDM6XHRcdFx0XHRcdFx0XHQvKiBwcm90ZWN0cyBsZ3IgcmVjb25maWcuICovXG4gMzQ0Olx0XHRcdFx0c3RydWN0IHdvcmtfc3RydWN0XHRsbGNfYWRkX2xpbmtfd29yaztcbiAzNDU6XHRcdFx0XHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdGxsY19kZWxfbGlua193b3JrO1xuIDM0NjpcdFx0XHRcdHN0cnVjdCB3b3JrX3N0cnVjdFx0bGxjX2V2ZW50X3dvcms7XG4gMzQ3Olx0XHRcdFx0XHRcdFx0LyogbGxjIGV2ZW50IHdvcmtlciAqL1xuIDM0ODpcdFx0XHRcdHdhaXRfcXVldWVfaGVhZF90XHRsbGNfZmxvd193YWl0ZXI7XG4gMzQ5Olx0XHRcdFx0XHRcdFx0LyogdzQgbmV4dCBsbGMgZXZlbnQgKi9cbiAzNTA6XHRcdFx0XHR3YWl0X3F1ZXVlX2hlYWRfdFx0bGxjX21zZ193YWl0ZXI7XG4gMzUxOlx0XHRcdFx0XHRcdFx0LyogdzQgbmV4dCBsbGMgbXNnICovXG4gMzUyOlx0XHRcdFx0c3RydWN0IHNtY19sbGNfZmxvd1x0bGxjX2Zsb3dfbGNsO1xuIDM1MzpcdFx0XHRcdFx0XHRcdC8qIGxsYyBsb2NhbCBjb250cm9sIGZpZWxkICovXG4gMzU0Olx0XHRcdFx0c3RydWN0IHNtY19sbGNfZmxvd1x0bGxjX2Zsb3dfcm10O1xuIDM1NTpcdFx0XHRcdFx0XHRcdC8qIGxsYyByZW1vdGUgY29udHJvbCBmaWVsZCAqL1xuIDM1NjpcdFx0XHRcdHN0cnVjdCBzbWNfbGxjX3FlbnRyeVx0KmRlbGF5ZWRfZXZlbnQ7XG4gMzU3Olx0XHRcdFx0XHRcdFx0LyogYXJyaXZlZCB3aGVuIGZsb3cgYWN0aXZlICovXG4gMzU4Olx0XHRcdFx0c3BpbmxvY2tfdFx0XHRsbGNfZmxvd19sb2NrO1xuIDM1OTpcdFx0XHRcdFx0XHRcdC8qIHByb3RlY3RzIGxsYyBmbG93ICovXG4gMzYwOlx0XHRcdFx0aW50XHRcdFx0bGxjX3Rlc3RsaW5rX3RpbWU7XG4gMzYxOlx0XHRcdFx0XHRcdFx0LyogbGluayBrZWVwIGFsaXZlIHRpbWUgKi9cbiAzNjI6XHRcdFx0XHR1MzJcdFx0XHRsbGNfdGVybWluYXRpb25fcnNuO1xuIDM2MzpcdFx0XHRcdFx0XHRcdC8qIHJzbiBjb2RlIGZvciB0ZXJtaW5hdGlvbiAqL1xuIDM2NDpcdFx0XHRcdHU4XHRcdFx0bmV4dGhvcF9tYWNbRVRIX0FMRU5dO1xuIDM2NTpcdFx0XHRcdHU4XHRcdFx0dXNlc19nYXRld2F5O1xuIDM2NjpcdFx0XHRcdF9fYmUzMlx0XHRcdHNhZGRyO1xuIDM2NzpcdFx0XHRcdFx0XHRcdC8qIG5ldCBuYW1lc3BhY2UgKi9cbiAzNjg6XHRcdFx0XHRzdHJ1Y3QgbmV0XHRcdCpuZXQ7XG4gMzY5Olx0XHRcdFx0dThcdFx0XHRtYXhfY29ubnM7XG4gMzcwOlx0XHRcdFx0XHRcdFx0LyogbWF4IGNvbm4gY2FuIGJlIGFzc2lnbmVkIHRvIGxnciAqL1xuIDM3MTpcdFx0XHRcdHU4XHRcdFx0bWF4X2xpbmtzO1xuIDM3MjpcdFx0XHRcdFx0XHRcdC8qIG1heCBsaW5rcyBjYW4gYmUgYWRkZWQgaW4gbGdyICovXG4gMzczOlx0XHRcdFx0dTE2XHRcdFx0bWF4X3NlbmRfd3I7XG4gMzc0Olx0XHRcdFx0XHRcdFx0LyogbnVtYmVyIG9mIFdSIGJ1ZmZlcnMgb24gc2VuZCAqL1xuIDM3NTpcdFx0XHRcdHUxNlx0XHRcdG1heF9yZWN2X3dyO1xuIDM3NjpcdFx0XHRcdFx0XHRcdC8qIG51bWJlciBvZiBXUiBidWZmZXJzIG9uIHJlY3YgKi9cbiAzNzc6XHRcdFx0fTtcbiAzNzg6XHRcdFx0c3RydWN0IHsgLyogU01DLUQgKi9cbiAzNzk6XHRcdFx0XHRzdHJ1Y3Qgc21jZF9naWRcdFx0cGVlcl9naWQ7XG4gMzgwOlx0XHRcdFx0XHRcdFx0LyogUGVlciBHSUQgKHJlbW90ZSkgKi9cbiAzODE6XHRcdFx0XHRzdHJ1Y3Qgc21jZF9kZXZcdFx0KnNtY2Q7XG4gMzgyOlx0XHRcdFx0XHRcdFx0LyogSVNNIGRldmljZSBmb3IgVkxBTiByZWcuICovXG4gMzgzOlx0XHRcdFx0dThcdFx0XHRwZWVyX3NodXRkb3duIDogMTtcbiAzODQ6XHRcdFx0XHRcdFx0XHQvKiBwZWVyIHRyaWdnZXJlZCBzaHV0ZG93bm4gKi9cbiAzODU6XHRcdFx0fTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTI0OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDcml0aWNhbCBNZW1vcnkgSW5pdGlhbGl6YXRpb24gRml4KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBzZWUgc29tZXRoaW5nIGltcG9ydGFudC4gVGhlIGNvZGUgb3JpZ2luYWxseSBoYWQgYG1lbXNldCgmYW1wO2xpbmstJmd0O2xnci0mZ3Q7d3JfdHhfYnVmX3YyLCAwLCBzaXplb2YobGluay0mZ3Q7bGdyLSZndDt3cl90eF9idWZfdjIpKWAuIFJpZ2h0LCBgd3JfdHhfYnVmX3YyYCBpcyAqYWxzbyogYSBwb2ludGVyLCBhIGBzdHJ1Y3Qgc21jX3dyX3YyX2J1ZiAqYCwgc28gdGFraW5nIGl0cyBhZGRyZXNzIGFuZCB6ZXJvaW5nIHRoZSAqcG9pbnRlciBpdHNlbGYqIGlzIGRlZmluaXRlbHkgd3JvbmcuIFRoZSBwYXRjaCBpcyBjaGFuZ2luZyBpdCB0byBgbWVtc2V0KGxpbmstJmd0O2xnci0mZ3Q7d3JfdHhfYnVmX3YyLCAwLCBzaXplb2YoKmxpbmstJmd0O2xnci0mZ3Q7d3JfdHhfYnVmX3YyKSlgLiAgVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyB0aGlzIGlzIG5vdyBjb3JyZWN0bHkgemVyb2luZyB0aGUgYWN0dWFsIGB3cl90eF9idWZfdjJgIGJ1ZmZlciB0aGF0IHRoZSBwb2ludGVyIHJlZmVyZW5jZXMuCgpXYWl0IGEgbWludXRlLi4uIGlmIHRoZSBvcmlnaW5hbCBjb2RlIHdhcyB6ZXJvaW5nIHRoZSAqcG9pbnRlciogYW5kIGVzc2VudGlhbGx5IGNvcnJ1cHRpbmcgaXQsIHRoZW4gdGhhdCBtZWFucyB0aGUgcG9pbnRlciB3b3VsZCBsaWtlbHkgYmUgc2V0IHRvIGBOVUxMYCAob3Igc29tZSBvdGhlciBnYXJiYWdlIHZhbHVlKS4gVGhhdCBtZWFucyBhbnkgc3Vic2VxdWVudCBhY2Nlc3MgdG8gYGxpbmstJmd0O2xnci0mZ3Q7d3JfdHhfYnVmX3YyYCBzaG91bGQgaGF2ZSB0cmlnZ2VyZWQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB3aGVyZSBgd3JfdHhfYnVmX3YyYCBpcyB1c2VkIHRvIGNvbmZpcm0gdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d3JfdHhfYnVmX3YyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfY29yZS5oPTI4Nj1zdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAge1xuLS1cbm5ldC9zbWMvc21jX2NvcmUuaC0zMjItXHRcdFx0XHRcdFx0LyogV1IgdjIgcmVjdiBwYXlsb2FkIGJ1ZmZlciAqL1xubmV0L3NtYy9zbWNfY29yZS5oOjMyMzpcdFx0XHRzdHJ1Y3Qgc21jX3dyX3YyX2J1Zlx0KndyX3R4X2J1Zl92Mjtcbm5ldC9zbWMvc21jX2NvcmUuaC0zMjQtXHRcdFx0XHRcdFx0LyogV1IgdjIgc2VuZCBwYXlsb2FkIGJ1ZmZlciAqL1xuLS1cbm5ldC9zbWMvc21jX3dyLmM9Nzc9c3RhdGljIGlubGluZSB2b2lkIHNtY193cl90eF9wcm9jZXNzX2NxZShzdHJ1Y3QgaWJfd2MgKndjKVxuLS1cbm5ldC9zbWMvc21jX3dyLmMtMTAzLVx0XHQgICAgICAgc2l6ZW9mKCpsaW5rLVx1MDAzZXdyX3R4X3YyX3BlbmQpKTtcbm5ldC9zbWMvc21jX3dyLmM6MTA0Olx0XHRtZW1zZXQobGluay1cdTAwM2VsZ3ItXHUwMDNld3JfdHhfYnVmX3YyLCAwLFxubmV0L3NtYy9zbWNfd3IuYzoxMDU6XHRcdCAgICAgICBzaXplb2YoKmxpbmstXHUwMDNlbGdyLVx1MDAzZXdyX3R4X2J1Zl92MikpO1xubmV0L3NtYy9zbWNfd3IuYy0xMDYtXHR9IGVsc2Uge1xuLS1cbm5ldC9zbWMvc21jX3dyLmMtMTI0LVx0XHRcdCAgICAgICBzaXplb2YoKmxpbmstXHUwMDNld3JfdHhfdjJfcGVuZCkpO1xubmV0L3NtYy9zbWNfd3IuYzoxMjU6XHRcdFx0bWVtc2V0KGxpbmstXHUwMDNlbGdyLVx1MDAzZXdyX3R4X2J1Zl92MiwgMCxcbm5ldC9zbWMvc21jX3dyLmM6MTI2Olx0XHRcdCAgICAgICBzaXplb2YoKmxpbmstXHUwMDNlbGdyLVx1MDAzZXdyX3R4X2J1Zl92MikpO1xubmV0L3NtYy9zbWNfd3IuYy0xMjctXHRcdH1cbi0tXG5uZXQvc21jL3NtY193ci5jPTI2MD1pbnQgc21jX3dyX3R4X2dldF92Ml9zbG90KHN0cnVjdCBzbWNfbGluayAqbGluayxcbi0tXG5uZXQvc21jL3NtY193ci5jLTI4MS1cdHdyX2liLVx1MDAzZXdyX2lkID0gd3JfaWQ7XG5uZXQvc21jL3NtY193ci5jOjI4MjpcdCp3cl9idWYgPSBsaW5rLVx1MDAzZWxnci1cdTAwM2V3cl90eF9idWZfdjI7XG5uZXQvc21jL3NtY193ci5jLTI4My1cdCp3cl9wZW5kX3ByaXYgPSBcdTAwMjZ3cl9wZW5kLVx1MDAzZXByaXY7XG4tLVxubmV0L3NtYy9zbWNfd3IuYz0yODc9aW50IHNtY193cl90eF9wdXRfc2xvdChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXG4tLVxubmV0L3NtYy9zbWNfd3IuYy0zMDgtXHRcdCAgICAgICBzaXplb2YoKmxpbmstXHUwMDNld3JfdHhfdjJfcGVuZCkpO1xubmV0L3NtYy9zbWNfd3IuYzozMDk6XHRcdG1lbXNldChsaW5rLVx1MDAzZWxnci1cdTAwM2V3cl90eF9idWZfdjIsIDAsXG5uZXQvc21jL3NtY193ci5jOjMxMDpcdFx0ICAgICAgIHNpemVvZigqbGluay1cdTAwM2VsZ3ItXHUwMDNld3JfdHhfYnVmX3YyKSk7XG5uZXQvc21jL3NtY193ci5jLTMxMS1cdFx0cmV0dXJuIDE7XG4tLVxubmV0L3NtYy9zbWNfd3IuYz02OTg9dm9pZCBzbWNfd3JfZnJlZV9sZ3JfbWVtKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyKVxuLS1cbm5ldC9zbWMvc21jX3dyLmMtNzA0LVx0bGdyLVx1MDAzZXdyX3J4X2J1Zl92MiA9IE5VTEw7XG5uZXQvc21jL3NtY193ci5jOjcwNTpcdGtmcmVlKGxnci1cdTAwM2V3cl90eF9idWZfdjIpO1xubmV0L3NtYy9zbWNfd3IuYzo3MDY6XHRsZ3ItXHUwMDNld3JfdHhfYnVmX3YyID0gTlVMTDtcbm5ldC9zbWMvc21jX3dyLmMtNzA3LX1cbi0tXG5uZXQvc21jL3NtY193ci5jPTc0MT1pbnQgc21jX3dyX2FsbG9jX2xncl9tZW0oc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IpXG4tLVxubmV0L3NtYy9zbWNfd3IuYy03NDgtXHRcdHJldHVybiAtRU5PTUVNO1xubmV0L3NtYy9zbWNfd3IuYzo3NDk6XHRsZ3ItXHUwMDNld3JfdHhfYnVmX3YyID0ga3phbGxvYyhTTUNfV1JfQlVGX1YyX1NJWkUsIEdGUF9LRVJORUwpO1xubmV0L3NtYy9zbWNfd3IuYzo3NTA6XHRpZiAoIWxnci1cdTAwM2V3cl90eF9idWZfdjIpIHtcbm5ldC9zbWMvc21jX3dyLmMtNzUxLVx0XHRrZnJlZShsZ3ItXHUwMDNld3JfcnhfYnVmX3YyKTtcbi0tXG5uZXQvc21jL3NtY193ci5jPTg3MT1pbnQgc21jX3dyX2NyZWF0ZV9saW5rKHN0cnVjdCBzbWNfbGluayAqbG5rKVxuLS1cbm5ldC9zbWMvc21jX3dyLmMtODk3LVx0XHRsbmstXHUwMDNld3JfdHhfdjJfZG1hX2FkZHIgPSBpYl9kbWFfbWFwX3NpbmdsZShpYmRldixcbm5ldC9zbWMvc21jX3dyLmM6ODk4Olx0XHRcdGxuay1cdTAwM2VsZ3ItXHUwMDNld3JfdHhfYnVmX3YyLCBTTUNfV1JfQlVGX1YyX1NJWkUsXG5uZXQvc21jL3NtY193ci5jLTg5OS1cdFx0XHRETUFfVE9fREVWSUNFKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMDEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFNNQyBXcml0ZSBUcmFuc2FjdGlvbiBCdWZmZXIqKgoKT2theSwgc28gYHNtY193cl90eF9nZXRfdjJfc2xvdGAgaXMgcmV0dXJuaW5nIGBsaW5rLSZndDtsZ3ItJmd0O3dyX3R4X2J1Zl92MmAgdGhyb3VnaCBgKndyX2J1ZmAuIFRoZSBjYWxsZXIgdGhlbiBwb3B1bGF0ZXMgdGhpcyBidWZmZXIgYW5kIHNlbmRzIGl0LiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGlzOiBpZiBgc21jX3dyX3R4X3B1dF9zbG90YCBpcyBtaXN0YWtlbmx5IHplcm9pbmcgb3V0IHRoZSAqcG9pbnRlciogYGxpbmstJmd0O2xnci0mZ3Q7d3JfdHhfYnVmX3YyYCwgdGhlIG5leHQgY2FsbCB0byBgc21jX3dyX3R4X2dldF92Ml9zbG90YCBpcyBnb2luZyB0byByZXR1cm4gYE5VTExgIHZpYSBgKndyX2J1ZmAuIFRoZW4sIHRoZSBjYWxsZXIgd2lsbCB0cnkgdG8gZGVyZWZlcmVuY2UgYSBgTlVMTGAgcG9pbnRlciwgd2hpY2ggaXMgYSBjbGFzc2ljLCBlYXNpbHkgZGV0ZWN0YWJsZSBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UgYW5kIGEga2VybmVsIGNyYXNoLgoKQnV0IHdhaXQsIGhvbGQgb24uIElzIGl0IHBvc3NpYmxlIHRoYXQgYGxpbmstJmd0O2xnci0mZ3Q7d3JfdHhfYnVmX3YyYCAqaXNuJiMzOTt0KiB6ZXJvZWQsIGFuZCB3ZSYjMzk7cmUgcG90ZW50aWFsbHkgc2VuZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8sIHRoYXQmIzM5O3Mgbm90IGxpa2VseS4gSSByZWNhbGwgaXQmIzM5O3MgYWxsb2NhdGVkIGluIGBzbWNfd3JfYWxsb2NfbGdyX21lbWAgdXNpbmcgYGt6YWxsb2MoU01DX1dSX0JVRl9WMl9TSVpFLCBHRlBfS0VSTkVMKTtgLiBUaGUgYGt6YWxsb2NgIGZ1bmN0aW9uIGd1YXJhbnRlZXMgdGhlIG1lbW9yeSBpcyB6ZXJvZWQgb3V0IGluaXRpYWxseS4gU28sIHRoZSBidWZmZXIgaXMgYWxsb2NhdGVkLCB6ZXJvZWQsIHVzZWQgdG8gdHJhbnNtaXQgZGF0YSwgYW5kIHRoZW4gYHNtY193cl90eF9wdXRfc2xvdGAgaXMgY2FsbGVkIHRvIGNsZWFyIGl0IGZvciBzdWJzZXF1ZW50IHVzZS4gVGhlIHByb2JsZW0gaXMgdGhhdCB0aGUgY2xlYXJpbmcgbWF5IGJlIGZhaWxpbmcuIFRoZSBidWcgaXMgdGhhdCBpdCBpcyBzdXBwb3NlZCB0byBjbGVhciB0aGUgKmJ1ZmZlciogYnV0IGl0IGlzIGNsZWFyaW5nIHRoZSAqcG9pbnRlciosIHdoaWNoIHdvdWxkIHJlc3VsdCBpbiBhIE5VTEwgcG9pbnRlci4gVGhlIHBvaW50ZXIgYmVjb21lcyBOVUxMLgoKU28sIGhlcmUmIzM5O3MgdGhlIHNlcXVlbmNlOiBgc21jX3dyX3R4X2dldF92Ml9zbG90YCByZXR1cm5zIGEgdmFsaWQgcG9pbnRlciAoaW5pdGlhbGx5IHplcm9lZCkuIFRoZSBjYWxsZXIgdXNlcyBpdCwgdGhlbiBgc21jX3dyX3R4X3B1dF9zbG90YCBlZmZlY3RpdmVseSB0dXJucyBpdCBpbnRvIGEgYE5VTExgIHBvaW50ZXIuIFRoZSBuZXh0IGNhbGwgdG8gYHNtY193cl90eF9nZXRfdjJfc2xvdGAgcmV0dXJucyBgTlVMTGAsIGFuZCB0aGUgY2FsbGVyIHRoZW4gdHJpZXMgdG8gd3JpdGUgdG8gaXQsIGNhdXNpbmcgYSBjcmFzaC4KCkkgbmVlZCB0byBpbW1lZGlhdGVseSBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHNtY193cl90eF9wdXRfc2xvdGAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHByb2JsZW0gYWxtb3N0IGNlcnRhaW5seSBsaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX3dyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI4NzpcdGludCBzbWNfd3JfdHhfcHV0X3Nsb3Qoc3RydWN0IHNtY19saW5rICpsaW5rLFxuIDI4ODpcdFx0XHQgICAgICAgc3RydWN0IHNtY193cl90eF9wZW5kX3ByaXYgKndyX3BlbmRfcHJpdilcbiAyODk6XHR7XG4gMjkwOlx0XHRzdHJ1Y3Qgc21jX3dyX3R4X3BlbmQgKnBlbmQ7XG4gMjkxOlx0XG4gMjkyOlx0XHRwZW5kID0gY29udGFpbmVyX29mKHdyX3BlbmRfcHJpdiwgc3RydWN0IHNtY193cl90eF9wZW5kLCBwcml2KTtcbiAyOTM6XHRcdGlmIChwZW5kLVx1MDAzZWlkeCBcdTAwM2MgbGluay1cdTAwM2V3cl90eF9jbnQpIHtcbiAyOTQ6XHRcdFx0dTMyIGlkeCA9IHBlbmQtXHUwMDNlaWR4O1xuIDI5NTpcdFxuIDI5NjpcdFx0XHQvKiBjbGVhciB0aGUgZnVsbCBzdHJ1Y3Qgc21jX3dyX3R4X3BlbmQgaW5jbHVkaW5nIC5wcml2ICovXG4gMjk3Olx0XHRcdG1lbXNldChcdTAwMjZsaW5rLVx1MDAzZXdyX3R4X3BlbmRzW2lkeF0sIDAsXG4gMjk4Olx0XHRcdCAgICAgICBzaXplb2YobGluay1cdTAwM2V3cl90eF9wZW5kc1tpZHhdKSk7XG4gMjk5Olx0XHRcdG1lbXNldChcdTAwMjZsaW5rLVx1MDAzZXdyX3R4X2J1ZnNbaWR4XSwgMCxcbiAzMDA6XHRcdFx0ICAgICAgIHNpemVvZihsaW5rLVx1MDAzZXdyX3R4X2J1ZnNbaWR4XSkpO1xuIDMwMTpcdFx0XHR0ZXN0X2FuZF9jbGVhcl9iaXQoaWR4LCBsaW5rLVx1MDAzZXdyX3R4X21hc2spO1xuIDMwMjpcdFx0XHR3YWtlX3VwKFx1MDAyNmxpbmstXHUwMDNld3JfdHhfd2FpdCk7XG4gMzAzOlx0XHRcdHJldHVybiAxO1xuIDMwNDpcdFx0fSBlbHNlIGlmIChsaW5rLVx1MDAzZWxnci1cdTAwM2VzbWNfdmVyc2lvbiA9PSBTTUNfVjIgXHUwMDI2XHUwMDI2XG4gMzA1Olx0XHRcdCAgIHBlbmQtXHUwMDNlaWR4ID09IGxpbmstXHUwMDNld3JfdHhfY250KSB7XG4gMzA2Olx0XHRcdC8qIExhcmdlIHYyIGJ1ZmZlciAqL1xuIDMwNzpcdFx0XHRtZW1zZXQobGluay1cdTAwM2V3cl90eF92Ml9wZW5kLCAwLFxuIDMwODpcdFx0XHQgICAgICAgc2l6ZW9mKCpsaW5rLVx1MDAzZXdyX3R4X3YyX3BlbmQpKTtcbiAzMDk6XHRcdFx0bWVtc2V0KGxpbmstXHUwMDNlbGdyLVx1MDAzZXdyX3R4X2J1Zl92MiwgMCxcbiAzMTA6XHRcdFx0ICAgICAgIHNpemVvZigqbGluay1cdTAwM2VsZ3ItXHUwMDNld3JfdHhfYnVmX3YyKSk7XG4gMzExOlx0XHRcdHJldHVybiAxO1xuIDMxMjpcdFx0fVxuIDMxMzpcdFxuIDMxNDpcdFx0cmV0dXJuIDA7XG4gMzE1Olx0fVxuIDMxNjpcdFxuIDMxNzpcdC8qIFNlbmQgcHJlcGFyZWQgV1Igc2xvdCB2aWEgaWJfcG9zdF9zZW5kLlxuIDMxODpcdCAqIEBwcml2OiBwb2ludGVyIHRvIHNtY193cl90eF9wZW5kX3ByaXYgaWRlbnRpZnlpbmcgcHJlcGFyZWQgbWVzc2FnZSBidWZmZXJcbiAzMTk6XHQgKi9cbiAzMjA6XHRpbnQgc21jX3dyX3R4X3NlbmQoc3RydWN0IHNtY19saW5rICpsaW5rLCBzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRfcHJpdiAqcHJpdilcbiAzMjE6XHR7XG4gMzIyOlx0XHRzdHJ1Y3Qgc21jX3dyX3R4X3BlbmQgKnBlbmQ7XG4gMzIzOlx0XHRpbnQgcmM7XG4gMzI0Olx0XG4gMzI1Olx0XHRpYl9yZXFfbm90aWZ5X2NxKGxpbmstXHUwMDNlc21jaWJkZXYtXHUwMDNlcm9jZV9jcV9zZW5kLFxuIDMyNjpcdFx0XHRcdCBJQl9DUV9ORVhUX0NPTVAgfCBJQl9DUV9SRVBPUlRfTUlTU0VEX0VWRU5UUyk7XG4gMzI3Olx0XHRwZW5kID0gY29udGFpbmVyX29mKHByaXYsIHN0cnVjdCBzbWNfd3JfdHhfcGVuZCwgcHJpdik7XG4gMzI4Olx0XHRyYyA9IGliX3Bvc3Rfc2VuZChsaW5rLVx1MDAzZXJvY2VfcXAsIFx1MDAyNmxpbmstXHUwMDNld3JfdHhfaWJzW3BlbmQtXHUwMDNlaWR4XSwgTlVMTCk7XG4gMzI5Olx0XHRpZiAocmMpIHtcbiAzMzA6XHRcdFx0c21jX3dyX3R4X3B1dF9zbG90KGxpbmssIHByaXYpO1xuIDMzMTpcdFx0XHRzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKGxpbmspO1xuIDMzMjpcdFx0fVxuIDMzMzpcdFx0cmV0dXJuIHJjO1xuIDMzNDpcdH1cbiAzMzU6XHRcbiAzMzY6XHRpbnQgc21jX3dyX3R4X3YyX3NlbmQoc3RydWN0IHNtY19saW5rICpsaW5rLCBzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRfcHJpdiAqcHJpdixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4NTIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDIENvZGUgU25pcHBldCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGF0IGBtZW1zZXRgIGNhbGwgaW1tZWRpYXRlbHkgZ3JhYnMgbXkgYXR0ZW50aW9uLiBJIHNlZSB0aGF0IHRoZSBvcmlnaW5hbCBjb2RlIHNuaXBwZXQgaW52b2x2ZXMgdHdvIGBtZW1zZXRgIG9wZXJhdGlvbnMsIHRhcmdldGluZyBgbGluay0mZ3Q7d3JfdHhfdjJfcGVuZGAgYW5kIGBsaW5rLSZndDtsZ3ItJmd0O3dyX3R4X2J1Zl92MmAuIFRoZSBrZXkgaGVyZSwgYW5kIEkmIzM5O20gc3VyZSBJIGRvbiYjMzk7dCBuZWVkIHRvIHBvaW50IHRoaXMgb3V0LCBpcyB1bmRlcnN0YW5kaW5nIHRoZSBkYXRhIHR5cGVzIGludm9sdmVkLgoKSSByZWNvZ25pemUgdGhhdCBib3RoIGBsaW5rLSZndDt3cl90eF92Ml9wZW5kYCBhbmQgYGxpbmstJmd0O2xnci0mZ3Q7d3JfdHhfYnVmX3YyYCBhcmUgKnBvaW50ZXJzKi4gVGhlIGNvZGUgaXMgY2xlYXJseSB6ZXJvaW5nIHRoZSAqbWVtb3J5IGFkZHJlc3MqIG9mIHRoZSBwb2ludGVycy4gYHNpemVvZigpYCB3aWxsIHJldHVybiB0aGUgc2l6ZSBvZiB0aGUgKnBvaW50ZXIgaXRzZWxmKiwgd2hpY2ggaXMgOCBieXRlcyBvbiBhIDY0LWJpdCBhcmNoaXRlY3R1cmUg4oCTIHN0YW5kYXJkIHN0dWZmLiBUaGVyZWZvcmUsIHRoZSBlZmZlY3Qgb2YgdGhlc2UgYG1lbXNldGAgY2FsbHMgaXMgdG8gZWZmZWN0aXZlbHkgbnVsbGlmeSB0aG9zZSBwb2ludGVycy4KClNpbmNlIHRoZXNlIHBvaW50ZXJzIGFyZSBpbml0aWFsaXplZCB0byBOVUxMLCB0aGVuIGl0IHdpbGwgaGF2ZSBpbXBsaWNhdGlvbnMgd2hlbiB0aGUgYHNtY193cl90eF9nZXRfdjJfc2xvdGAgaXMgY2FsbGVkLCBhbmQgSSBuZWVkIHRvIHJldmlldyB0aGlzIGZ1bmN0aW9uIG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfd3IuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjYwOlx0aW50IHNtY193cl90eF9nZXRfdjJfc2xvdChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXG4gMjYxOlx0XHRcdFx0ICBzbWNfd3JfdHhfaGFuZGxlciBoYW5kbGVyLFxuIDI2MjpcdFx0XHRcdCAgc3RydWN0IHNtY193cl92Ml9idWYgKip3cl9idWYsXG4gMjYzOlx0XHRcdFx0ICBzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRfcHJpdiAqKndyX3BlbmRfcHJpdilcbiAyNjQ6XHR7XG4gMjY1Olx0XHRzdHJ1Y3Qgc21jX3dyX3R4X3BlbmQgKndyX3BlbmQ7XG4gMjY2Olx0XHRzdHJ1Y3QgaWJfc2VuZF93ciAqd3JfaWI7XG4gMjY3Olx0XHR1NjQgd3JfaWQ7XG4gMjY4Olx0XG4gMjY5Olx0XHRpZiAobGluay1cdTAwM2V3cl90eF92Ml9wZW5kLVx1MDAzZWlkeCA9PSBsaW5rLVx1MDAzZXdyX3R4X2NudClcbiAyNzA6XHRcdFx0cmV0dXJuIC1FQlVTWTtcbiAyNzE6XHRcbiAyNzI6XHRcdCp3cl9idWYgPSBOVUxMO1xuIDI3MzpcdFx0KndyX3BlbmRfcHJpdiA9IE5VTEw7XG4gMjc0Olx0XHR3cl9pZCA9IHNtY193cl90eF9nZXRfbmV4dF93cl9pZChsaW5rKTtcbiAyNzU6XHRcdHdyX3BlbmQgPSBsaW5rLVx1MDAzZXdyX3R4X3YyX3BlbmQ7XG4gMjc2Olx0XHR3cl9wZW5kLVx1MDAzZXdyX2lkID0gd3JfaWQ7XG4gMjc3Olx0XHR3cl9wZW5kLVx1MDAzZWhhbmRsZXIgPSBoYW5kbGVyO1xuIDI3ODpcdFx0d3JfcGVuZC1cdTAwM2VsaW5rID0gbGluaztcbiAyNzk6XHRcdHdyX3BlbmQtXHUwMDNlaWR4ID0gbGluay1cdTAwM2V3cl90eF9jbnQ7XG4gMjgwOlx0XHR3cl9pYiA9IGxpbmstXHUwMDNld3JfdHhfdjJfaWI7XG4gMjgxOlx0XHR3cl9pYi1cdTAwM2V3cl9pZCA9IHdyX2lkO1xuIDI4MjpcdFx0KndyX2J1ZiA9IGxpbmstXHUwMDNlbGdyLVx1MDAzZXdyX3R4X2J1Zl92MjtcbiAyODM6XHRcdCp3cl9wZW5kX3ByaXYgPSBcdTAwMjZ3cl9wZW5kLVx1MDAzZXByaXY7XG4gMjg0Olx0XHRyZXR1cm4gMDtcbiAyODU6XHR9XG4gMjg2Olx0XG4gMjg3Olx0aW50IHNtY193cl90eF9wdXRfc2xvdChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXG4gMjg4Olx0XHRcdCAgICAgICBzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRfcHJpdiAqd3JfcGVuZF9wcml2KVxuIDI4OTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5NjgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW1tZWRpYXRlIEJ1ZyBBbmFseXNpcyoqCgpPa2F5LCBoZXJlJiMzOTtzIHRoZSBkZWFsLiBJJiMzOTt2ZSBiZWVuIHN0YXJpbmcgYXQgdGhpcyBjb2RlLCBhbmQgaXQmIzM5O3MgaGl0dGluZyBtZSByaWdodCBiZXR3ZWVuIHRoZSBleWVzLiBJZiBgbGluay0mZ3Q7d3JfdHhfdjJfcGVuZGAgaXMgZXZlciB6ZXJv4oCUbWVhbmluZyBpdCYjMzk7cyBwb2ludGluZyB0byBub3RoaW5nLCBpdCYjMzk7cyBOVUxM4oCUdGhlbiB0aGF0IGxpbmUgaXMgZ29pbmcgdG8gYmxvdyB1cC4gVHJ5aW5nIHRvIGFjY2VzcyBgbGluay0mZ3Q7d3JfdHhfdjJfcGVuZC0mZ3Q7aWR4YCB3aGVuIHRoYXQgcG9pbnRlciBpcyBnYXJiYWdlIGlzIGEgY2xhc3NpYyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIEJhbmchIEluc3RhbnQgY3Jhc2guIFNvLCB0aGUgY29yZSBpc3N1ZSBpcyBzdHJhaWdodGZvcndhcmQ6IHdlJiMzOTtyZSBkZXJlZmVyZW5jaW5nIGEgTlVMTCBwb2ludGVyLgoKQnV0IEkmIzM5O20gbm90IGp1c3Qgc3RvcHBpbmcgYXQgdGhlIGVhc3kgc3R1ZmYuIEkgbmVlZCB0byBrbm93IHRoZSBpbXBsaWNhdGlvbnMuIElzIHRoZXJlIGFueSBjaGFuY2UgdGhpcyBpcyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIHRoYXQgY291bGQgbGVhayBpbmZvcm1hdGlvbj8gSWYgdGhlIHBvaW50ZXIgaXMgemVyb2VkLCBpdCBqdXN0IGNyYXNoZXMuIEFuZCBob3cgZG9lcyB0aGF0IGZ1bmN0aW9uIGBzbWNfd3JfdHhfcHJvY2Vzc19jcWVgIHJlbGF0ZSB0byBgc21jX3dyX3R4X3B1dF9zbG90YD8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc21jL3NtY193ci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA3NzpcdHN0YXRpYyBpbmxpbmUgdm9pZCBzbWNfd3JfdHhfcHJvY2Vzc19jcWUoc3RydWN0IGliX3djICp3YylcbiAgNzg6XHR7XG4gIDc5Olx0XHRzdHJ1Y3Qgc21jX3dyX3R4X3BlbmQgcG5kX3NuZDtcbiAgODA6XHRcdHN0cnVjdCBzbWNfbGluayAqbGluaztcbiAgODE6XHRcdHUzMiBwbmRfc25kX2lkeDtcbiAgODI6XHRcbiAgODM6XHRcdGxpbmsgPSB3Yy1cdTAwM2VxcC1cdTAwM2VxcF9jb250ZXh0O1xuICA4NDpcdFxuICA4NTpcdFx0aWYgKHdjLVx1MDAzZW9wY29kZSA9PSBJQl9XQ19SRUdfTVIpIHtcbiAgODY6XHRcdFx0aWYgKHdjLVx1MDAzZXN0YXR1cylcbiAgODc6XHRcdFx0XHRsaW5rLVx1MDAzZXdyX3JlZ19zdGF0ZSA9IEZBSUxFRDtcbiAgODg6XHRcdFx0ZWxzZVxuICA4OTpcdFx0XHRcdGxpbmstXHUwMDNld3JfcmVnX3N0YXRlID0gQ09ORklSTUVEO1xuICA5MDpcdFx0XHRzbWNfd3Jfd2FrZXVwX3JlZ193YWl0KGxpbmspO1xuICA5MTpcdFx0XHRyZXR1cm47XG4gIDkyOlx0XHR9XG4gIDkzOlx0XG4gIDk0Olx0XHRwbmRfc25kX2lkeCA9IHNtY193cl90eF9maW5kX3BlbmRpbmdfaW5kZXgobGluaywgd2MtXHUwMDNld3JfaWQpO1xuICA5NTpcdFx0aWYgKHBuZF9zbmRfaWR4ID09IGxpbmstXHUwMDNld3JfdHhfY250KSB7XG4gIDk2Olx0XHRcdGlmIChsaW5rLVx1MDAzZWxnci1cdTAwM2VzbWNfdmVyc2lvbiAhPSBTTUNfVjIgfHxcbiAgOTc6XHRcdFx0ICAgIGxpbmstXHUwMDNld3JfdHhfdjJfcGVuZC1cdTAwM2V3cl9pZCAhPSB3Yy1cdTAwM2V3cl9pZClcbiAgOTg6XHRcdFx0XHRyZXR1cm47XG4gIDk5Olx0XHRcdGxpbmstXHUwMDNld3JfdHhfdjJfcGVuZC1cdTAwM2V3Y19zdGF0dXMgPSB3Yy1cdTAwM2VzdGF0dXM7XG4gMTAwOlx0XHRcdG1lbWNweShcdTAwMjZwbmRfc25kLCBsaW5rLVx1MDAzZXdyX3R4X3YyX3BlbmQsIHNpemVvZihwbmRfc25kKSk7XG4gMTAxOlx0XHRcdC8qIGNsZWFyIHRoZSBmdWxsIHN0cnVjdCBzbWNfd3JfdHhfcGVuZCBpbmNsdWRpbmcgLnByaXYgKi9cbiAxMDI6XHRcdFx0bWVtc2V0KGxpbmstXHUwMDNld3JfdHhfdjJfcGVuZCwgMCxcbiAxMDM6XHRcdFx0ICAgICAgIHNpemVvZigqbGluay1cdTAwM2V3cl90eF92Ml9wZW5kKSk7XG4gMTA0Olx0XHRcdG1lbXNldChsaW5rLVx1MDAzZWxnci1cdTAwM2V3cl90eF9idWZfdjIsIDAsXG4gMTA1Olx0XHRcdCAgICAgICBzaXplb2YoKmxpbmstXHUwMDNlbGdyLVx1MDAzZXdyX3R4X2J1Zl92MikpO1xuIDEwNjpcdFx0fSBlbHNlIHtcbiAxMDc6XHRcdFx0bGluay1cdTAwM2V3cl90eF9wZW5kc1twbmRfc25kX2lkeF0ud2Nfc3RhdHVzID0gd2MtXHUwMDNlc3RhdHVzO1xuIDEwODpcdFx0XHRpZiAobGluay1cdTAwM2V3cl90eF9wZW5kc1twbmRfc25kX2lkeF0uY29tcGxfcmVxdWVzdGVkKVxuIDEwOTpcdFx0XHRcdGNvbXBsZXRlKFx1MDAyNmxpbmstXHUwMDNld3JfdHhfY29tcGxbcG5kX3NuZF9pZHhdKTtcbiAxMTA6XHRcdFx0bWVtY3B5KFx1MDAyNnBuZF9zbmQsIFx1MDAyNmxpbmstXHUwMDNld3JfdHhfcGVuZHNbcG5kX3NuZF9pZHhdLFxuIDExMTpcdFx0XHQgICAgICAgc2l6ZW9mKHBuZF9zbmQpKTtcbiAxMTI6XHRcdFx0LyogY2xlYXIgdGhlIGZ1bGwgc3RydWN0IHNtY193cl90eF9wZW5kIGluY2x1ZGluZyAucHJpdiAqL1xuIDExMzpcdFx0XHRtZW1zZXQoXHUwMDI2bGluay1cdTAwM2V3cl90eF9wZW5kc1twbmRfc25kX2lkeF0sIDAsXG4gMTE0Olx0XHRcdCAgICAgICBzaXplb2YobGluay1cdTAwM2V3cl90eF9wZW5kc1twbmRfc25kX2lkeF0pKTtcbiAxMTU6XHRcdFx0bWVtc2V0KFx1MDAyNmxpbmstXHUwMDNld3JfdHhfYnVmc1twbmRfc25kX2lkeF0sIDAsXG4gMTE2Olx0XHRcdCAgICAgICBzaXplb2YobGluay1cdTAwM2V3cl90eF9idWZzW3BuZF9zbmRfaWR4XSkpO1xuIDExNzpcdFx0XHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChwbmRfc25kX2lkeCwgbGluay1cdTAwM2V3cl90eF9tYXNrKSlcbiAxMTg6XHRcdFx0XHRyZXR1cm47XG4gMTE5Olx0XHR9XG4gMTIwOlx0XG4gMTIxOlx0XHRpZiAod2MtXHUwMDNlc3RhdHVzKSB7XG4gMTIyOlx0XHRcdGlmIChsaW5rLVx1MDAzZWxnci1cdTAwM2VzbWNfdmVyc2lvbiA9PSBTTUNfVjIpIHtcbiAxMjM6XHRcdFx0XHRtZW1zZXQobGluay1cdTAwM2V3cl90eF92Ml9wZW5kLCAwLFxuIDEyNDpcdFx0XHRcdCAgICAgICBzaXplb2YoKmxpbmstXHUwMDNld3JfdHhfdjJfcGVuZCkpO1xuIDEyNTpcdFx0XHRcdG1lbXNldChsaW5rLVx1MDAzZWxnci1cdTAwM2V3cl90eF9idWZfdjIsIDAsXG4gMTI2Olx0XHRcdFx0ICAgICAgIHNpemVvZigqbGluay1cdTAwM2VsZ3ItXHUwMDNld3JfdHhfYnVmX3YyKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzE2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTAwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNNQyBXcml0ZSBUcmFuc2FjdGlvbiBDb2RlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEluIGBzbWNfd3JfdHhfcHJvY2Vzc19jcWVgLCBJIHNlZSB0aGUgY29kZSBleHBsaWNpdGx5IHplcm9pbmcgb3V0IGBsaW5rLSZndDt3cl90eF92Ml9wZW5kYCBhbmQgYGxpbmstJmd0O2xnci0mZ3Q7d3JfdHhfYnVmX3YyYC4gVGhhdCYjMzk7cyBnb29kOyBpdCBjb25maXJtcyB0aGF0IHRoZSBpbml0aWFsIHRob3VnaHQgYWJvdXQgdGhlIGlzc3VlIGluIHRoYXQgZnVuY3Rpb24gaXMgY29ycmVjdCwgYW5kIG5vdCB0aGUgc291cmNlIG9mIHRoZSBwcm9ibGVtLgoKVGhlIGJ1ZywgdGhlbiwgc2VlbXMgdG8gcmVzaWRlIHNxdWFyZWx5IGluIGBzbWNfd3JfdHhfcHV0X3Nsb3RgLiBUaGlzIGZ1bmN0aW9uIGlzIGludm9rZWQgd2hlbiBgaWJfcG9zdF9zZW5kYCBmYWlscywgb3Igd2hlbiBhIHNsb3QgaXMgcmV0dXJuZWQgd2l0aG91dCBzZW5kaW5nLiBJdCB6ZXJvZXMgYSBwb2ludGVyLCBhbmQgYWZ0ZXIgdGhhdCwgdGhlIHBvaW50ZXIgaXMgc2V0IHRvIE5VTEwuIFRoZSBpbXBsaWNhdGlvbiBpcyB0aGF0IHN1YnNlcXVlbnQgY2FsbHMgdG8gYHNtY193cl90eF9nZXRfdjJfc2xvdGAgb3IgYHNtY193cl90eF9wcm9jZXNzX2NxZWAgd2lsbCB0aGVuIGRlcmVmZXJlbmNlIGEgTlVMTCBwb2ludGVyLiBBIGNsYXNzaWMsIG5hc3R5IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4gR290IGl0LgoKTm93LCB0aGF0IG90aGVyIHBhcnQgb2YgdGhlIHBhdGNoLi4uIHRoZSBvbmUgdGhhdCBhbHRlcnMgdGhlIHdhaXRpbmcgbWVjaGFuaXNtLiBXaHkgc3dpdGNoIGZyb20gYHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0YCB0byB0aGF0IG9wZW4tY29kZWQgd2FpdCBsb29wIHdpdGggYHByZXBhcmVfdG9fd2FpdF9leGNsdXNpdmVgPyBBaCwgcmlnaHQuIGB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dGAgdXNlcyBgcHJlcGFyZV90b193YWl0YCwgd2hpY2ggaXNuJiMzOTt0IGV4Y2x1c2l2ZS4gVGhpcyBtZWFucyB3aGVuIGEgc2xvdCAqZG9lcyogYmVjb21lIGZyZWUsIG11bHRpcGxlIHRocmVhZHMgY291bGQgZ2V0IHdva2VuIHVwIOKAkyBhICYjMzQ7dGh1bmRlcmluZyBoZXJkJiMzNDsgc2NlbmFyaW8uIGBwcmVwYXJlX3RvX3dhaXRfZXhjbHVzaXZlYCwgaG93ZXZlciwgd2FrZXMgKm9ubHkgb25lKiB3YWl0aW5nIHRocmVhZC4gVGhpcyBpcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgcHJldmVudGluZyB0aGUgd2FzdGUgb2YgYSB0aHVuZGVyaW5nIGhlcmQsIGFuZCBhbHNvIG1ha2VzIHRoZSBjb2RlIG1vcmUgcm9idXN0IGFnYWluc3QgcmFjZSBjb25kaXRpb25zLiBJdCYjMzk7cyBhIGNvbmN1cnJlbmN5IGltcHJvdmVtZW50LCByZWFsbHksIG5vdCBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSBJIHRob3VnaHQgYWJvdXQuCgpIYW5nIG9uLiBMZXQmIzM5O3MgbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3Npbmcgc29tZXRoaW5nLiBJZiB3ZSAqd2VyZSogdXNpbmcgYHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0YCwgbXVsdGlwbGUgdGhyZWFkcyBjb3VsZCB3YWtlIHVwLCBhbmQgdGhlbiBgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RfaW5kZXhgIG1pZ2h0IGdpdmUgdGhlIHNhbWUgaW5kZXggdG8gbXVsdGlwbGUgdGhyZWFkcy4gQnV0Li4uIHdhaXQuIGBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdF9pbmRleGAgdXNlcyBgdGVzdF9hbmRfc2V0X2JpdGAuIFRoYXQgKnNob3VsZCogZW5zdXJlIGF0b21pY2l0eSBhbmQgcHJldmVudCB0aGUgcmFjZS4gU28sIG5vLCB0aGUgc3dpdGNoIHRvIGV4Y2x1c2l2ZSB3YWl0aW5nIGlzICpwcmltYXJpbHkqIGFib3V0IHRoZSBwZXJmb3JtYW5jZSBnYWluIGZyb20gYXZvaWRpbmcgdGhlIHRodW5kZXJpbmcgaGVyZC4gSXQmIzM5O3MgYSBwZXJmb3JtYW5jZS9jb25jdXJyZW5jeSBpbXByb3ZlbWVudC4gVGhlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1ZyBpcyBzdGlsbCB0aGUgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBzbWNfd3JfdHhfcHV0X3Nsb3RgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX3dyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE4MDpcdFx0KmlkeCA9IGxpbmstXHUwMDNld3JfdHhfY250O1xuIDE4MTpcdFx0cmV0dXJuIC1FQlVTWTtcbiAxODI6XHR9XG4gMTgzOlx0XG4gMTg0Olx0LyoqXG4gMTg1Olx0ICogc21jX3dyX3R4X2dldF9mcmVlX3Nsb3QoKSAtIHJldHVybnMgYnVmZmVyIGZvciBtZXNzYWdlIGFzc2VtYmx5LFxuIDE4NjpcdCAqXHRcdFx0YW5kIHNldHMgaW5mbyBmb3IgcGVuZGluZyB0cmFuc21pdCB0cmFja2luZ1xuIDE4NzpcdCAqIEBsaW5rOlx0XHRQb2ludGVyIHRvIHNtY19saW5rIHVzZWQgdG8gbGF0ZXIgc2VuZCB0aGUgbWVzc2FnZS5cbiAxODg6XHQgKiBAaGFuZGxlcjpcdFx0U2VuZCBjb21wbGV0aW9uIGhhbmRsZXIgZnVuY3Rpb24gcG9pbnRlci5cbiAxODk6XHQgKiBAd3JfYnVmOlx0XHRPdXQgdmFsdWUgcmV0dXJucyBwb2ludGVyIHRvIG1lc3NhZ2UgYnVmZmVyLlxuIDE5MDpcdCAqIEB3cl9yZG1hX2J1ZjpcdE91dCB2YWx1ZSByZXR1cm5zIHBvaW50ZXIgdG8gcmRtYSB3b3JrIHJlcXVlc3QuXG4gMTkxOlx0ICogQHdyX3BlbmRfcHJpdjpcdE91dCB2YWx1ZSByZXR1cm5zIHBvaW50ZXIgc2VydmluZyBhcyBoYW5kbGVyIGNvbnRleHQuXG4gMTkyOlx0ICpcbiAxOTM6XHQgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgLWVycm5vIG9uIGVycm9yLlxuIDE5NDpcdCAqL1xuIDE5NTpcdGludCBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXG4gMTk2Olx0XHRcdFx0ICAgIHNtY193cl90eF9oYW5kbGVyIGhhbmRsZXIsXG4gMTk3Olx0XHRcdFx0ICAgIHN0cnVjdCBzbWNfd3JfYnVmICoqd3JfYnVmLFxuIDE5ODpcdFx0XHRcdCAgICBzdHJ1Y3Qgc21jX3JkbWFfd3IgKip3cl9yZG1hX2J1ZixcbiAxOTk6XHRcdFx0XHQgICAgc3RydWN0IHNtY193cl90eF9wZW5kX3ByaXYgKip3cl9wZW5kX3ByaXYpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3Mjk0CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoYXQgZnVuY3Rpb24gY2FsbDoKCioqQW5hbHl6aW5nIGBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdF9pbmRleGAqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgZnVuY3Rpb24gbmFtZSwgYHNtY193cl90eF9nZXRfZnJlZV9zbG90X2luZGV4YC4gQmFzZWQgb24gdGhlIG5hbWluZyBjb252ZW50aW9uLCB3aGljaCBzZWVtcyBwcmV0dHkgc3RhbmRhcmQsIEkgY2FuIGltbWVkaWF0ZWx5IGluZmVyIGEgZmV3IHRoaW5ncy4gJiMzNDtzbWMmIzM0OyBsaWtlbHkgcmVmZXJzIHRvIHNvbWUga2luZCBvZiBTeXN0ZW0gTWFuYWdlbWVudCBDb250cm9sbGVyIG9yIGEgc2ltaWxhciBwZXJpcGhlcmFsIOKAkyBwZXJoYXBzIHJlbGF0ZWQgdG8gc2hhcmVkIG1lbW9yeSBjb21tdW5pY2F0aW9uLiAmIzM0O3dyJiMzNDsgcHJvYmFibHkgaW5kaWNhdGVzICYjMzQ7d3JpdGUmIzM0OyBvciAmIzM0O3dyaXRpbmcsJiMzNDsgc3BlY2lmaWNhbGx5IGZvciBhIHRyYW5zbWlzc2lvbiwgc28gbGlrZWx5IHRoZSBmdW5jdGlvbiBoYW5kbGVzIHRyYW5zYWN0aW9ucyBmcm9tIHRoZSBjb250cm9sbGVyIHRvLCBzYXksIG1lbW9yeS4gJiMzNDt0eCYjMzQ7IGRlZmluaXRlbHkgbWVhbnMgJiMzNDt0cmFuc21pdC4mIzM0OyBBbmQgZmluYWxseSwgJiMzNDtnZXRfZnJlZV9zbG90X2luZGV4JiMzNDsgc2NyZWFtcyAmIzM0O2ZpbmQgYW4gYXZhaWxhYmxlIGJ1ZmZlci9zbG90L2luZGV4IHdpdGhpbiBhIHRyYW5zbWlzc2lvbiBidWZmZXIuJiMzNDsKClNvLCBpbiBlc3NlbmNlLCB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgKm5leHQqIGF2YWlsYWJsZSB3cml0ZSBzbG90IG9yIGJ1ZmZlciBpbmRleCB3aXRoaW4gYSB0cmFuc21pc3Npb24gc3RydWN0dXJlIG1hbmFnZWQgYnkgdGhlIFNNQy4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJiMzOTtkIGV4cGVjdCBpdCB0byBiZSBhIGNyaXRpY2FsIGNvbXBvbmVudCBmb3IgaGFuZGxpbmcgdGhlIHJhdGUgYW5kIGZsb3cgb2YgZGF0YSB0cmFuc2ZlcnMsIGVuc3VyaW5nIHRoYXQgd2UgZG9uJiMzOTt0IG92ZXJ3cml0ZSBvciBzdGFydmUgdGhlIHRyYW5zbWlzc2lvbiBwcm9jZXNzLiBUaGlzIHN1Z2dlc3RzIHRoZSBmdW5jdGlvbiB3b3VsZCBsaWtlbHkgYmUgY2FsbGVkIHByaW9yIHRvIGFjdHVhbGx5IHdyaXRpbmcgZGF0YSB0byB0aGUgdHJhbnNtaXNzaW9uIGJ1ZmZlciwgdG8gZGV0ZXJtaW5lIHRoZSBhcHByb3ByaWF0ZSBvZmZzZXQuIFRoZSBmdW5jdGlvbiB3aWxsIGxpa2VseSBuZWVkIHRvIGRlYWwgd2l0aCB0aGUgcG9pbnRlciBhcml0aG1ldGljIHRvIGhhbmRsZSB0aGUgdmFyaW91cyB0cmFuc21pc3Npb24gc2xvdHMsIGFuZCBzaG91bGQgYmUgY2FyZWZ1bGx5IHJldmlld2VkIGZvciByYWNlIGNvbmRpdGlvbnMgYW5kIHBvdGVudGlhbCBsb2NraW5nIHJlcXVpcmVtZW50cyBpZiB0aGUgU01DIGlzIHNoYXJlZCB3aXRoIG90aGVyIGNvbnRyb2xsZXJzIG9yIHRocmVhZHMuIEFueSBwb3RlbnRpYWwgZm9yIGJ1ZmZlciBvdmVyZmxvd3Mgb3IgdW5kZXJmbG93cyBpcyBhbHNvIHBhcmFtb3VudC4gVGhpcyBjb3VsZCBiZSBhIGNyaXRpY2FsIHBhdGggZnVuY3Rpb24gc28gY2FyZWZ1bCBwZXJmb3JtYW5jZSBldmFsdWF0aW9uLCBhbmQgcG90ZW50aWFsIG9wdGltaXphdGlvbnMgc2hvdWxkIGJlIGNvbnNpZGVyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfd3IuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTYwOlx0fVxuIDE2MTpcdFxuIDE2MjpcdHZvaWQgc21jX3dyX3R4X2NxX2hhbmRsZXIoc3RydWN0IGliX2NxICppYl9jcSwgdm9pZCAqY3FfY29udGV4dClcbiAxNjM6XHR7XG4gMTY0Olx0XHRzdHJ1Y3Qgc21jX2liX2RldmljZSAqZGV2ID0gKHN0cnVjdCBzbWNfaWJfZGV2aWNlICopY3FfY29udGV4dDtcbiAxNjU6XHRcbiAxNjY6XHRcdHRhc2tsZXRfc2NoZWR1bGUoXHUwMDI2ZGV2LVx1MDAzZXNlbmRfdGFza2xldCk7XG4gMTY3Olx0fVxuIDE2ODpcdFxuIDE2OTpcdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSByZXF1ZXN0IHN1Ym1pc3Npb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbiAxNzA6XHRcbiAxNzE6XHRzdGF0aWMgaW5saW5lIGludCBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdF9pbmRleChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHUzMiAqaWR4KVxuIDE3MjpcdHtcbiAxNzM6XHRcdCppZHggPSBsaW5rLVx1MDAzZXdyX3R4X2NudDtcbiAxNzQ6XHRcdGlmICghc21jX2xpbmtfc2VuZGFibGUobGluaykpXG4gMTc1Olx0XHRcdHJldHVybiAtRU5PTElOSztcbiAxNzY6XHRcdGZvcl9lYWNoX2NsZWFyX2JpdCgqaWR4LCBsaW5rLVx1MDAzZXdyX3R4X21hc2ssIGxpbmstXHUwMDNld3JfdHhfY250KSB7XG4gMTc3Olx0XHRcdGlmICghdGVzdF9hbmRfc2V0X2JpdCgqaWR4LCBsaW5rLVx1MDAzZXdyX3R4X21hc2spKVxuIDE3ODpcdFx0XHRcdHJldHVybiAwO1xuIDE3OTpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODAzOAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDUzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIE1lbW9yeSBDb3JydXB0aW9uIGluIFNNQyBXcml0ZSBUWCoqCgpPa2F5LCBzbyBgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RfaW5kZXhgIGlzIGRlZmluaXRlbHkgdGhyZWFkLXNhZmU7IGB0ZXN0X2FuZF9zZXRfYml0YCB0YWtlcyBjYXJlIG9mIHRoYXQuIEFuZCB0aGF0IGNoYW5nZSB0byBgcHJlcGFyZV90b193YWl0X2V4Y2x1c2l2ZWA/IFB1cmVseSBmb3IgYXZvaWRpbmcgdGhlIHRodW5kZXJpbmcgaGVyZCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEJ1dCB0aGlzIGBtZW1zZXRgIGZpeOKApiBpdCYjMzk7cyBnb3QgbWUgdGhpbmtpbmcuCgpMZXQmIzM5O3Mgc2VlOgpgYGBjCi0JCW1lbXNldCgmYW1wO2xpbmstJmd0O3dyX3R4X3YyX3BlbmQsIDAsCi0JCSAgICAgICBzaXplb2YobGluay0mZ3Q7d3JfdHhfdjJfcGVuZCkpOwotCQltZW1zZXQoJmFtcDtsaW5rLSZndDtsZ3ItJmd0O3dyX3R4X2J1Zl92MiwgMCwKLQkJICAgICAgIHNpemVvZihsaW5rLSZndDtsZ3ItJmd0O3dyX3R4X2J1Zl92MikpOwomIzQzOwkJbWVtc2V0KGxpbmstJmd0O3dyX3R4X3YyX3BlbmQsIDAsCiYjNDM7CQkgICAgICAgc2l6ZW9mKCpsaW5rLSZndDt3cl90eF92Ml9wZW5kKSk7CiYjNDM7CQltZW1zZXQobGluay0mZ3Q7bGdyLSZndDt3cl90eF9idWZfdjIsIDAsCiYjNDM7CQkgICAgICAgc2l6ZW9mKCpsaW5rLSZndDt3cl90eF9idWZfdjIpKTsKYGBgCgpBbHJpZ2h0LCBzbyB0aGUgb3JpZ2luYWwgY29kZSB3YXMgemVyb2luZyB0aGUgKnBvaW50ZXJzKiB0aGVtc2VsdmVzLCBub3QgdGhlIG1lbW9yeSB0aGV5IHBvaW50IHRvLiBgbGluay0mZ3Q7d3JfdHhfdjJfcGVuZGAgaXMgYSBwb2ludGVyIHRvIGEgYHN0cnVjdCBzbWNfd3JfdHhfcGVuZGAsIGFuZCBgbGluay0mZ3Q7bGdyLSZndDt3cl90eF9idWZfdjJgIGlzIGEgcG9pbnRlciB0byBhIGBzdHJ1Y3Qgc21jX3dyX3YyX2J1ZmAuIE5vdywgdGhlIGNvZGUgbm93IHplcm9lcyB0aGUgc3RydWN0dXJlcy4gVGhhdCBtZWFucyB0aGF0IHRoZSBvbGQgY29kZSB3YXMgbGVhdmluZyB0aGUgcG9pbnRlZC10byBzdHJ1Y3R1cmVzIHVuaW5pdGlhbGl6ZWQsIGFuZCB0aGlzIG5ldyBjb2RlIGNvcnJlY3RzIHRoYXQuCgpXYWl0IGEgc2Vjb25k4oCmIElmIHRoZSBwb2ludGVycyB3ZXJlIGJlaW5nIHplcm9lZCwgdGhlIGFjdHVhbCBkYXRhIGJ1ZmZlcnMgd2VyZW4mIzM5O3QgYmVpbmcgY2xlYXJlZC4gVGhhdCBtZWFucyB0aGUgbmV4dCB0aW1lIHRob3NlIGJ1ZmZlcnMgd2VyZSB1c2VkLCB0aGV5IG1pZ2h0IGhhdmUgY29udGFpbmVkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGF0JiMzOTtzIGEgaHVnZSBwb3RlbnRpYWwgc2VjdXJpdHkgaXNzdWUuIFRoZXNlIGFyZSBuZXR3b3JrIGJ1ZmZlcnM7IGlmIHRoZXJlJiMzOTtzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB0aGF0IGNvdWxkIG1lYW4gbGVha2luZyBzZW5zaXRpdmUgaW5mb3JtYXRpb24uCgpMZXQmIzM5O3MgbG9vayBhdCBob3cgYGxpbmstJmd0O2xnci0mZ3Q7d3JfdHhfYnVmX3YyYCBpcyB1c2VkLiBSaWdodCwgaXQmIzM5O3MgdXNlZCB0byBzZW5kIGRhdGEgb3ZlciB0aGUgbmV0d29yay4gSWYgaXQgd2FzbiYjMzk7dCB6ZXJvZWQsIHRoYXQmIzM5O3MgYSAqbWFzc2l2ZSogcHJvYmxlbS4gSSBuZWVkIHRvIGtub3cgaWYgd2UgYXJlIHBvc3NpYmx5IGxlYWtpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIExldCYjMzk7cyBzZWUuLi4gYHNtY193cl90eF9nZXRfdjJfc2xvdGAgcmV0dXJucyBgbGluay0mZ3Q7bGdyLSZndDt3cl90eF9idWZfdjJgIGFzIGAqd3JfYnVmYC4gVGhlbiB0aGUgY2FsbGVyIGZpbGxzIGl0IHdpdGggZGF0YSBhbmQgc2VuZHMgaXQuCgpPa2F5LCB0aGUgcXVlc3Rpb24gaXM6IGRvZXMgdGhlIGNhbGxlciBmaWxsIHRoZSAqZW50aXJlKiBidWZmZXIsIG9yIGFyZSBwYXJ0cyBvZiBpdCBsZWZ0IHVuaW5pdGlhbGl6ZWQ/IElmIHBhcnRzIGFyZSBsZWZ0IHVuaW5pdGlhbGl6ZWQsIGFuZCB0aGUgYnVmZmVyIHdhc24mIzM5O3QgemVyb2VkLCB3ZSBjb3VsZCBiZSBzZW5kaW5nIGdhcmJhZ2UgYWNyb3NzIHRoZSBuZXR3b3JrLCBhbmQgcG90ZW50aWFsbHkgbGVha2luZy4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsZXJzIG9mIGBzbWNfd3JfdHhfZ2V0X3YyX3Nsb3RgIGFuZCB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBkYXRhIHRoZXkmIzM5O3JlIHdyaXRpbmcuIFRoaXMgbmVlZHMgYSBkZWVwZXIgZGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c21jX3dyX3R4X2dldF92Ml9zbG90JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfbGxjLmM9NDIyPXN0YXRpYyBpbnQgc21jX2xsY19hZGRfcGVuZGluZ19zZW5kX3YyKHN0cnVjdCBzbWNfbGluayAqbGluayxcbi0tXG5uZXQvc21jL3NtY19sbGMuYy00MjctXG5uZXQvc21jL3NtY19sbGMuYzo0Mjg6XHRyYyA9IHNtY193cl90eF9nZXRfdjJfc2xvdChsaW5rLCBzbWNfbGxjX3R4X2hhbmRsZXIsIHdyX2J1ZiwgcGVuZCk7XG5uZXQvc21jL3NtY19sbGMuYy00MjktXHRpZiAocmMgXHUwMDNjIDApXG4tLVxubmV0L3NtYy9zbWNfd3IuYz0xOTU9aW50IHNtY193cl90eF9nZXRfZnJlZV9zbG90KHN0cnVjdCBzbWNfbGluayAqbGluayxcbi0tXG5uZXQvc21jL3NtY193ci5jLTI1OS1cbm5ldC9zbWMvc21jX3dyLmM6MjYwOmludCBzbWNfd3JfdHhfZ2V0X3YyX3Nsb3Qoc3RydWN0IHNtY19saW5rICpsaW5rLFxubmV0L3NtYy9zbWNfd3IuYy0yNjEtXHRcdFx0ICBzbWNfd3JfdHhfaGFuZGxlciBoYW5kbGVyLFxuLS1cbm5ldC9zbWMvc21jX3dyLmg9MTEzPWludCBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHNtY193cl90eF9oYW5kbGVyIGhhbmRsZXIsXG4tLVxubmV0L3NtYy9zbWNfd3IuaC0xMTYtXHRcdFx0ICAgIHN0cnVjdCBzbWNfd3JfdHhfcGVuZF9wcml2ICoqd3JfcGVuZF9wcml2KTtcbm5ldC9zbWMvc21jX3dyLmg6MTE3OmludCBzbWNfd3JfdHhfZ2V0X3YyX3Nsb3Qoc3RydWN0IHNtY19saW5rICpsaW5rLFxubmV0L3NtYy9zbWNfd3IuaC0xMTgtXHRcdFx0ICBzbWNfd3JfdHhfaGFuZGxlciBoYW5kbGVyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTcxMAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGlnZ2luZyBpbnRvIHRoZSBGdW5jdGlvbiBDYWxsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBpZWNlIG9mIGNvZGUsIGFuZCB0aGUga2V5IGZ1bmN0aW9uIGNhbGwgaXMgYHNtY19sbGNfYWRkX3BlbmRpbmdfc2VuZF92MmAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGFjdGlvbiBpcywgaXQgbG9va3MgbGlrZS4gIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBpbnRvIHRoYXQgZnVuY3Rpb24uIExldCYjMzk7cyBzZWUgd2hhdCBgc21jX2xsY19hZGRfcGVuZGluZ19zZW5kX3YyYCBpcyBhbGwgYWJvdXQuIFVuZGVyc3RhbmRpbmcgaXRzIGltcGxlbWVudGF0aW9uIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgd2hhdCYjMzk7cyBnb2luZyBvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGFyZ3VtZW50cywgaXRzIGNvbnRyb2wgZmxvdywgYW5kIGl0cyBzaWRlIGVmZmVjdHMuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfbGxjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MjIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQyMjpcdHN0YXRpYyBpbnQgc21jX2xsY19hZGRfcGVuZGluZ19zZW5kX3YyKHN0cnVjdCBzbWNfbGluayAqbGluayxcbiA0MjM6XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc21jX3dyX3YyX2J1ZiAqKndyX2J1ZixcbiA0MjQ6XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRfcHJpdiAqKnBlbmQpXG4gNDI1Olx0e1xuIDQyNjpcdFx0aW50IHJjO1xuIDQyNzpcdFxuIDQyODpcdFx0cmMgPSBzbWNfd3JfdHhfZ2V0X3YyX3Nsb3QobGluaywgc21jX2xsY190eF9oYW5kbGVyLCB3cl9idWYsIHBlbmQpO1xuIDQyOTpcdFx0aWYgKHJjIFx1MDAzYyAwKVxuIDQzMDpcdFx0XHRyZXR1cm4gcmM7XG4gNDMxOlx0XHRyZXR1cm4gMDtcbiA0MzI6XHR9XG4gNDMzOlx0XG4gNDM0Olx0c3RhdGljIHZvaWQgc21jX2xsY19pbml0X21zZ19oZHIoc3RydWN0IHNtY19sbGNfaGRyICpoZHIsXG4gNDM1Olx0XHRcdFx0XHQgc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsIHNpemVfdCBsZW4pXG4gNDM2Olx0e1xuIDQzNzpcdFx0aWYgKGxnci1cdTAwM2VzbWNfdmVyc2lvbiA9PSBTTUNfVjIpIHtcbiA0Mzg6XHRcdFx0aGRyLVx1MDAzZWNvbW1vbi5sbGNfdmVyc2lvbiA9IFNNQ19WMjtcbiA0Mzk6XHRcdFx0aGRyLVx1MDAzZWxlbmd0aF92MiA9IGxlbjtcbiA0NDA6XHRcdH0gZWxzZSB7XG4gNDQxOlx0XHRcdGhkci1cdTAwM2Vjb21tb24ubGxjX3ZlcnNpb24gPSAwO1xuIDQ0MjpcdFx0XHRoZHItXHUwMDNlbGVuZ3RoID0gbGVuO1xuIDQ0MzpcdFx0fVxuIDQ0NDpcdH1cbiA0NDU6XHRcbiA0NDY6XHQvKiBoaWdoLWxldmVsIEFQSSB0byBzZW5kIExMQyBjb25maXJtIGxpbmsgKi9cbiA0NDc6XHRpbnQgc21jX2xsY19zZW5kX2NvbmZpcm1fbGluayhzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXG4gNDQ4Olx0XHRcdFx0ICAgICAgZW51bSBzbWNfbGxjX3JlcXJlc3AgcmVxcmVzcClcbiA0NDk6XHR7XG4gNDUwOlx0XHRzdHJ1Y3Qgc21jX2xsY19tc2dfY29uZmlybV9saW5rICpjb25mbGxjO1xuIDQ1MTpcdFx0c3RydWN0IHNtY193cl90eF9wZW5kX3ByaXYgKnBlbmQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNDQ4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgQ2FsbCBTdGFjazogYHNtY19sbGNfYWRkX3BlbmRpbmdfc2VuZF92MmAqKgoKQWxyaWdodCwgSSYjMzk7bSBkaXZpbmcgaW4uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgc3Vycm91bmRpbmcgYHNtY19sbGNfYWRkX3BlbmRpbmdfc2VuZF92MmAuIEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uLCBidXQgd2l0aG91dCBrbm93aW5nIHRoZSBjYWxsZXJzLCBpdHMgYmVoYXZpb3IgaXMgZ29pbmcgdG8gYmUgb3BhcXVlLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoaXMgcG9pbnQuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGNhbGwgc3RhY2ssIG5hdHVyYWxseS4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHVwc3RyZWFtIGZ1bmN0aW9ucyB0aGF0IGFyZSByZXNwb25zaWJsZSBmb3IgKmludm9raW5nKiB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24uIElzIGl0IHRyaWdnZXJlZCBieSBhbiBpbnRlcnJ1cHQsIGEgdGFza2xldCwgb3IgYSBkaXJlY3QgZnVuY3Rpb24gY2FsbCBmcm9tIHNvbWUgb3RoZXIgcGFydCBvZiB0aGUgbmV0d29yayBzdGFjaywgcGVyaGFwcyByZWxhdGVkIHRvIHNvY2tldCBtYW5hZ2VtZW50PyBEZXRlcm1pbmluZyB0aGUgZW50cnkgcG9pbnRzIHdpbGwgaW5mb3JtIG1lIGFib3V0IHRoZSBwb3RlbnRpYWwgc291cmNlcyBvZiBsYXRlbmN5LCBlcnJvcnMsIG9yIGluZWZmaWNpZW5jaWVzIGlmIHRoaW5ncyBhcmVuJiMzOTt0IHdvcmtpbmcgYXMgZXhwZWN0ZWQuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBlZmZpY2llbmN5LCBzbyBrbm93aW5nIHdoZXJlIHRoZSBjYWxsIG9yaWdpbmF0ZXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgd2hhdCBkYXRhIGlzIGxpa2VseSBiZWluZyBwcm9jZXNzZWQgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBib3R0bGVuZWNrcyB1cHN0cmVhbS4gTGV0JiMzOTtzIHNlZSB3aG8mIzM5O3MgZG9pbmcgdGhlIGNhbGxpbmcgYW5kIGxldCYjMzk7cyBnbyBmcm9tIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNfbGxjX2FkZF9wZW5kaW5nX3NlbmRfdjImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL3NtY19sbGMuYz00MDA9c3RhdGljIGludCBzbWNfbGxjX2FkZF9wZW5kaW5nX3NlbmQoc3RydWN0IHNtY19saW5rICpsaW5rLFxuLS1cbm5ldC9zbWMvc21jX2xsYy5jLTQyMS1cbm5ldC9zbWMvc21jX2xsYy5jOjQyMjpzdGF0aWMgaW50IHNtY19sbGNfYWRkX3BlbmRpbmdfc2VuZF92MihzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXG5uZXQvc21jL3NtY19sbGMuYy00MjMtXHRcdFx0XHQgICAgICAgc3RydWN0IHNtY193cl92Ml9idWYgKip3cl9idWYsXG4tLVxubmV0L3NtYy9zbWNfbGxjLmM9NjQzPWludCBzbWNfbGxjX3NlbmRfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLCB1OCBtYWNbXSwgdTggZ2lkW10sXG4tLVxubmV0L3NtYy9zbWNfbGxjLmMtNjU3LVxubmV0L3NtYy9zbWNfbGxjLmM6NjU4Olx0XHRyYyA9IHNtY19sbGNfYWRkX3BlbmRpbmdfc2VuZF92MihsaW5rLCBcdTAwMjZ3cl9idWYsIFx1MDAyNnBlbmQpO1xubmV0L3NtYy9zbWNfbGxjLmMtNjU5LVx0XHRpZiAocmMpXG4tLVxubmV0L3NtYy9zbWNfbGxjLmM9MTEyNj1zdGF0aWMgdm9pZCBzbWNfbGxjX3NlbmRfcmVxdWVzdF9hZGRfbGluayhzdHJ1Y3Qgc21jX2xpbmsgKmxpbmspXG4tLVxubmV0L3NtYy9zbWNfbGxjLmMtMTE0My1cbm5ldC9zbWMvc21jX2xsYy5jOjExNDQ6XHRyYyA9IHNtY19sbGNfYWRkX3BlbmRpbmdfc2VuZF92MihsaW5rLCBcdTAwMjZ3cl9idWYsIFx1MDAyNnBlbmQpO1xubmV0L3NtYy9zbWNfbGxjLmMtMTE0NS1cdGlmIChyYylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExODUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9uczoKCioqRGlnZ2luZyBpbnRvIHRoZSBMaW5rIEFkZGl0aW9uIFByb2Nlc3MqKgoKT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBsaW5rIGFkZGl0aW9uIHNlcXVlbmNlLCBwYXJ0aWN1bGFybHkgdGhlIHNpZ25hbGluZy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHRha2luZyBhIGNsb3NlciBsb29rIGF0IGBzbWNfbGxjX3NlbmRfYWRkX2xpbmtgIGFuZCBgc21jX2xsY19zZW5kX3JlcXVlc3RfYWRkX2xpbmtgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBvZiBob3cgdGhlc2UgdHdvIGZ1bmN0aW9ucyBpbnRlcmFjdC4gSSYjMzk7bSB0aGlua2luZywgYXJlIHRoZXJlIHN1YnRsZSBkaWZmZXJlbmNlcyBpbiB0aGUgKnNlbmRpbmcqIGJlaGF2aW9yIGJldHdlZW4gdGhlIGluaXRpYWwgcmVxdWVzdCBhbmQgdGhlIGNvbmZpcm1hdGlvbiBwaGFzZT8gQXJlIHdlIGRlYWxpbmcgd2l0aCB0aGUgc2FtZSB1bmRlcmx5aW5nIG1lY2hhbmlzbSB3aXRoIHNsaWdodCB2YXJpYXRpb25zLCBvciBhcmUgdGhlc2UgZGlzdGluY3QgZnVuY3Rpb24gY2FsbHMgc2VydmluZyBmdW5kYW1lbnRhbGx5IHNlcGFyYXRlIHB1cnBvc2VzIGluIHRoZSBwcm90b2NvbD8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgc29tZSBpbXBvcnRhbnQgZGV0YWlscyB0byB1bnBhY2sgaGVyZSByZWdhcmRpbmcgZXJyb3IgaGFuZGxpbmcsIHJldHJhbnNtaXNzaW9ucywgb3IgcGVyaGFwcyBkaWZmZXJlbnQgc2V0cyBvZiBwYXJhbWV0ZXJzIHJlcXVpcmVkIGluIGVhY2guIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIHRvIHNlZSBpZiB0aGVyZSBhcmUgb3B0aW1pemF0aW9ucyBvciBwb3RlbnRpYWwgYXJlYXMgZm9yIGltcHJvdmVtZW50LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc21jL3NtY19sbGMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY0MywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjQzOlx0aW50IHNtY19sbGNfc2VuZF9hZGRfbGluayhzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHU4IG1hY1tdLCB1OCBnaWRbXSxcbiA2NDQ6XHRcdFx0XHQgIHN0cnVjdCBzbWNfbGluayAqbGlua19uZXcsXG4gNjQ1Olx0XHRcdFx0ICBlbnVtIHNtY19sbGNfcmVxcmVzcCByZXFyZXNwKVxuIDY0NjpcdHtcbiA2NDc6XHRcdHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGlua192Ml9leHQgKmV4dCA9IE5VTEw7XG4gNjQ4Olx0XHRzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmsgKmFkZGxsYztcbiA2NDk6XHRcdHN0cnVjdCBzbWNfd3JfdHhfcGVuZF9wcml2ICpwZW5kO1xuIDY1MDpcdFx0aW50IGxlbiA9IHNpemVvZigqYWRkbGxjKTtcbiA2NTE6XHRcdGludCByYztcbiA2NTI6XHRcbiA2NTM6XHRcdGlmICghc21jX3dyX3R4X2xpbmtfaG9sZChsaW5rKSlcbiA2NTQ6XHRcdFx0cmV0dXJuIC1FTk9MSU5LO1xuIDY1NTpcdFx0aWYgKGxpbmstXHUwMDNlbGdyLVx1MDAzZXNtY192ZXJzaW9uID09IFNNQ19WMikge1xuIDY1NjpcdFx0XHRzdHJ1Y3Qgc21jX3dyX3YyX2J1ZiAqd3JfYnVmO1xuIDY1NzpcdFxuIDY1ODpcdFx0XHRyYyA9IHNtY19sbGNfYWRkX3BlbmRpbmdfc2VuZF92MihsaW5rLCBcdTAwMjZ3cl9idWYsIFx1MDAyNnBlbmQpO1xuIDY1OTpcdFx0XHRpZiAocmMpXG4gNjYwOlx0XHRcdFx0Z290byBwdXRfb3V0O1xuIDY2MTpcdFx0XHRhZGRsbGMgPSAoc3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rICopd3JfYnVmO1xuIDY2MjpcdFx0XHRleHQgPSAoc3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rX3YyX2V4dCAqKVxuIDY2MzpcdFx0XHRcdFx0XHRcdFx1MDAyNndyX2J1Zi1cdTAwM2VyYXdbc2l6ZW9mKCphZGRsbGMpXTtcbiA2NjQ6XHRcdFx0bWVtc2V0KGV4dCwgMCwgU01DX1dSX1RYX1NJWkUpO1xuIDY2NTpcdFx0fSBlbHNlIHtcbiA2NjY6XHRcdFx0c3RydWN0IHNtY193cl9idWYgKndyX2J1ZjtcbiA2Njc6XHRcbiA2Njg6XHRcdFx0cmMgPSBzbWNfbGxjX2FkZF9wZW5kaW5nX3NlbmQobGluaywgXHUwMDI2d3JfYnVmLCBcdTAwMjZwZW5kKTtcbiA2Njk6XHRcdFx0aWYgKHJjKVxuIDY3MDpcdFx0XHRcdGdvdG8gcHV0X291dDtcbiA2NzE6XHRcdFx0YWRkbGxjID0gKHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGluayAqKXdyX2J1ZjtcbiA2NzI6XHRcdH1cbiA2NzM6XHRcbiA2NzQ6XHRcdG1lbXNldChhZGRsbGMsIDAsIHNpemVvZigqYWRkbGxjKSk7XG4gNjc1Olx0XHRhZGRsbGMtXHUwMDNlaGQuY29tbW9uLmxsY190eXBlID0gU01DX0xMQ19BRERfTElOSztcbiA2NzY6XHRcdGlmIChyZXFyZXNwID09IFNNQ19MTENfUkVTUClcbiA2Nzc6XHRcdFx0YWRkbGxjLVx1MDAzZWhkLmZsYWdzIHw9IFNNQ19MTENfRkxBR19SRVNQO1xuIDY3ODpcdFx0bWVtY3B5KGFkZGxsYy1cdTAwM2VzZW5kZXJfbWFjLCBtYWMsIEVUSF9BTEVOKTtcbiA2Nzk6XHRcdG1lbWNweShhZGRsbGMtXHUwMDNlc2VuZGVyX2dpZCwgZ2lkLCBTTUNfR0lEX1NJWkUpO1xuIDY4MDpcdFx0aWYgKGxpbmtfbmV3KSB7XG4gNjgxOlx0XHRcdGFkZGxsYy1cdTAwM2VsaW5rX251bSA9IGxpbmtfbmV3LVx1MDAzZWxpbmtfaWQ7XG4gNjgyOlx0XHRcdGh0b24yNChhZGRsbGMtXHUwMDNlc2VuZGVyX3FwX251bSwgbGlua19uZXctXHUwMDNlcm9jZV9xcC1cdTAwM2VxcF9udW0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjI0OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJ1ZmZlciBaZXJvaW5nIGluIGBzbWNfbGxjX3NlbmRfYWRkX2xpbmtgKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEluIGBzbWNfbGxjX3NlbmRfYWRkX2xpbmtgLCBwYXJ0aWN1bGFybHkgZm9yIFNNQ19WMiBsaW5rcywgSSBzZWUgd2UgYWxsb2NhdGUgYSB3cml0ZSBidWZmZXIgKGB3cl9idWZgKSB1c2luZyBgc21jX2xsY19hZGRfcGVuZGluZ19zZW5kX3YyYC4gTm93LCB0aGUgY3J1Y2lhbCBwYXJ0IEkmIzM5O20gZm9jdXNpbmcgb24gaXMgdGhlIGV4cGxpY2l0IHplcm9pbmcgb2YgbWVtb3J5LiBGaXJzdCwgYG1lbXNldChleHQsIDAsIFNNQ19XUl9UWF9TSVpFKWAgemVybyYjMzk7cyBgZXh0YC4gVGhlbiwgYG1lbXNldChhZGRsbGMsIDAsIHNpemVvZigqYWRkbGxjKSlgIHplcm8mIzM5O3MgYGFkZGxsY2AuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2h5IHRoZSBkb3VibGUgemVyb2luZz8gQm90aCBgZXh0YCBhbmQgYGFkZGxsY2AgYXJlIGJlaW5nIHplcm9lZC4gSWYgSSBsb29rIGF0IHRoZSBzaXplcywgSSBzZWUgYFNNQ19XUl9UWF9TSVpFYCBpcyA0NCBieXRlcyBhbmQgYHNpemVvZigqYWRkbGxjKWAgaXMgYWxzbyA0NC4gU28gZmFyLCB0aGUgYnVmZmVyIGFsbG9jYXRlZCBpcyBqdXN0IGJlaW5nIHplcm9lZCB0d2ljZSEgYGFkZGxsY2AgYXBwZWFycyB0byBiZSBjYXN0IGZyb20gdGhlIHNhbWUgYnVmZmVyIGFzIGB3cl9idWZgLiBUaGVuIGBleHRgIGlzIGNhc3QsIGFuZCBgYWRkbGxjYCBpcyB6ZXJvZWQuCgpUaGlzIGxvb2tzIGxpa2UgYGFkZGxsY2AgYW5kIGBleHRgIGFyZSBwYXJ0IG9mIHRoZSBzYW1lIGFsbG9jYXRlZCBidWZmZXIuIEkmIzM5O20gc2VlaW5nIGEgcG9zc2libGUgcmVkdW5kYW5jeSBoZXJlLCBvciBtYXliZSBhIGRlc2lnbiBjaG9pY2UuIFRoaXMgZmVlbHMgaW5lZmZpY2llbnQuIFdoYXQmIzM5O3MgdGhlIGNvbXBsZXRlIHN0cnVjdHVyZT8gSSYjMzk7bSBtaXNzaW5nIHNvbWV0aGluZywgSSBuZWVkIHRvIGtub3cgdGhlIHNpemUgb2YgYHN0cnVjdCBzbWNfd3JfdjJfYnVmYCB0byBmdWxseSB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGlzIGJ1ZmZlciBhbGxvY2F0aW9uIGFuZCB6ZXJvaW5nIHNlcXVlbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3Qgc21jX3dyX3YyX2J1ZiBcXHsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL3NtY19jb3JlLmg9NjE9c3RydWN0IHNtY193cl9idWYge1xuLS1cbm5ldC9zbWMvc21jX2NvcmUuaC02NC1cbm5ldC9zbWMvc21jX2NvcmUuaDo2NTpzdHJ1Y3Qgc21jX3dyX3YyX2J1ZiB7XG5uZXQvc21jL3NtY19jb3JlLmgtNjYtXHR1OFx0cmF3W1NNQ19XUl9CVUZfVjJfU0laRV07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMDU1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDaGVja2luZyBgU01DX1dSX0JVRl9WMl9TSVpFYCoqCgpPa2F5LCB0aW1lIHRvIGNpcmNsZSBiYWNrIHRvIGBTTUNfV1JfQlVGX1YyX1NJWkVgLiBJIG5lZWQgdG8gZW5zdXJlIGl0JiMzOTtzIHN0aWxsIGNvbnNpc3RlbnQgd2l0aCB0aGUgY3VycmVudCBhcmNoaXRlY3R1cmUuIExldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSBpdHMgZGVmaW5pdGlvbiwgZXNwZWNpYWxseSBpZiB0aGVyZSBoYXZlIGJlZW4gYW55IHJlY2VudCBtb2RpZmljYXRpb25zIHRvIHRoZSBtZW1vcnkgbWFwcGluZyBvciBidWZmZXIgYWxsb2NhdGlvbiBzdHJhdGVnaWVzLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBhbGlnbm1lbnQgaXNzdWVzIG9yIGZyYWdtZW50YXRpb24gcHJvYmxlbXMgaWYgdGhlIHNpemUgaXNuJiMzOTt0IHJpZ2h0LCB5b3Uga25vdywgdGhlIHVzdWFsIGN1bHByaXRzLiBJdCYjMzk7cyBhIGNyaXRpY2FsIHBhcmFtZXRlcjsgYW55IGRldmlhdGlvbiBjb3VsZCBsZWFkIHRvIG92ZXJmbG93IGNvbmRpdGlvbnMgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIHNwZWNpZmljYWxseSwgaWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBsYXJnZXIgdHJhbnNhY3Rpb25zIG9yIG1vcmUgZnJlcXVlbnQgdXBkYXRlcy4gR2l2ZW4gdGhlIGNvbnRleHQsIEkgc2hvdWxkIGRvdWJsZS1jaGVjayBpdHMgcmVsYXRpb25zaGlwIHdpdGggYW55IGNhY2hlIGNvaGVyZW5jeSBwcm90b2NvbHMgd2UmIzM5O3JlIHVzaW5nLiBJIHNob3VsZCBhbHNvIHNlZSBpZiB0aGVyZSYjMzk7cyBiZWVuIGFueSBkZWJhdGUgb3IgZGlzY3Vzc2lvbiBvbiBpdHMgdmFsdWUgcmVjZW50bHkuIFJpZ2h0LCBsZXQgbWUgcHVsbCB1cCB0aGUgcmVsZXZhbnQgaGVhZGVyIGZpbGVzIGFuZCBkb2N1bWVudGF0aW9u4oCmIGdvdCB0byBrZWVwIGEgY2xvc2UgZXllIG9uIHRoZXNlIHRoaW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U01DX1dSX0JVRl9WMl9TSVpFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfY29yZS5jPTc4OD1pbnQgc21jcl9saW5rX2luaXQoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsIHN0cnVjdCBzbWNfbGluayAqbG5rLFxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy03OTktXHRcdGxuay1cdTAwM2V3cl9yeF9idWZsZW4gPSBzbWNfbGlua19zaGFyZWRfdjJfcnhidWYobG5rKSA/XG5uZXQvc21jL3NtY19jb3JlLmM6ODAwOlx0XHRcdFNNQ19XUl9CVUZfU0laRSA6IFNNQ19XUl9CVUZfVjJfU0laRTtcbm5ldC9zbWMvc21jX2NvcmUuYy04MDEtXHR9IGVsc2Uge1xuLS1cbm5ldC9zbWMvc21jX2NvcmUuaD01MT1lbnVtIHNtY19saW5rX3N0YXRlIHtcdFx0XHQvKiBwb3NzaWJsZSBzdGF0ZXMgb2YgYSBsaW5rICovXG4tLVxubmV0L3NtYy9zbWNfY29yZS5oLTU4LSNkZWZpbmUgU01DX1dSX0JVRl9TSVpFXHRcdDQ4XHQvKiBzaXplIG9mIHdvcmsgcmVxdWVzdCBidWZmZXIgKi9cbm5ldC9zbWMvc21jX2NvcmUuaDo1OTojZGVmaW5lIFNNQ19XUl9CVUZfVjJfU0laRVx0ODE5Mlx0Lyogc2l6ZSBvZiB2MiB3b3JrIHJlcXVlc3QgYnVmZmVyICovXG5uZXQvc21jL3NtY19jb3JlLmgtNjAtXG4tLVxubmV0L3NtYy9zbWNfY29yZS5oPTY1PXN0cnVjdCBzbWNfd3JfdjJfYnVmIHtcbm5ldC9zbWMvc21jX2NvcmUuaDo2NjpcdHU4XHRyYXdbU01DX1dSX0JVRl9WMl9TSVpFXTtcbm5ldC9zbWMvc21jX2NvcmUuaC02Ny19O1xuLS1cbm5ldC9zbWMvc21jX3dyLmM9NTcyPXN0YXRpYyB2b2lkIHNtY193cl9pbml0X3NnZShzdHJ1Y3Qgc21jX2xpbmsgKmxuaylcbi0tXG5uZXQvc21jL3NtY193ci5jLTYwNy1cdFx0bG5rLVx1MDAzZXdyX3R4X3YyX3NnZS1cdTAwM2VhZGRyID0gbG5rLVx1MDAzZXdyX3R4X3YyX2RtYV9hZGRyO1xubmV0L3NtYy9zbWNfd3IuYzo2MDg6XHRcdGxuay1cdTAwM2V3cl90eF92Ml9zZ2UtXHUwMDNlbGVuZ3RoID0gU01DX1dSX0JVRl9WMl9TSVpFO1xubmV0L3NtYy9zbWNfd3IuYy02MDktXHRcdGxuay1cdTAwM2V3cl90eF92Ml9zZ2UtXHUwMDNlbGtleSA9IGxuay1cdTAwM2Vyb2NlX3BkLVx1MDAzZWxvY2FsX2RtYV9sa2V5O1xuLS1cbm5ldC9zbWMvc21jX3dyLmMtNjM2LVx0XHRcdGxuay1cdTAwM2V3cl9yeF9zZ2VzW3ggJiM0MzsgMV0ubGVuZ3RoID1cbm5ldC9zbWMvc21jX3dyLmM6NjM3Olx0XHRcdFx0XHRTTUNfV1JfQlVGX1YyX1NJWkUgLSBTTUNfV1JfVFhfU0laRTtcbm5ldC9zbWMvc21jX3dyLmMtNjM4LVx0XHRcdGxuay1cdTAwM2V3cl9yeF9zZ2VzW3ggJiM0MzsgMV0ubGtleSA9XG4tLVxubmV0L3NtYy9zbWNfd3IuYz02NTI9dm9pZCBzbWNfd3JfZnJlZV9saW5rKHN0cnVjdCBzbWNfbGluayAqbG5rKVxuLS1cbm5ldC9zbWMvc21jX3dyLmMtNjc5LVx0XHRpYl9kbWFfdW5tYXBfc2luZ2xlKGliZGV2LCBsbmstXHUwMDNld3JfcnhfdjJfZG1hX2FkZHIsXG5uZXQvc21jL3NtY193ci5jOjY4MDpcdFx0XHRcdCAgICBTTUNfV1JfQlVGX1YyX1NJWkUsXG5uZXQvc21jL3NtY193ci5jLTY4MS1cdFx0XHRcdCAgICBETUFfRlJPTV9ERVZJQ0UpO1xuLS1cbm5ldC9zbWMvc21jX3dyLmMtNjkxLVx0XHRpYl9kbWFfdW5tYXBfc2luZ2xlKGliZGV2LCBsbmstXHUwMDNld3JfdHhfdjJfZG1hX2FkZHIsXG5uZXQvc21jL3NtY193ci5jOjY5MjpcdFx0XHRcdCAgICBTTUNfV1JfQlVGX1YyX1NJWkUsXG5uZXQvc21jL3NtY193ci5jLTY5My1cdFx0XHRcdCAgICBETUFfVE9fREVWSUNFKTtcbi0tXG5uZXQvc21jL3NtY193ci5jPTc0MT1pbnQgc21jX3dyX2FsbG9jX2xncl9tZW0oc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IpXG4tLVxubmV0L3NtYy9zbWNfd3IuYy03NDUtXG5uZXQvc21jL3NtY193ci5jOjc0NjpcdGxnci1cdTAwM2V3cl9yeF9idWZfdjIgPSBremFsbG9jKFNNQ19XUl9CVUZfVjJfU0laRSwgR0ZQX0tFUk5FTCk7XG5uZXQvc21jL3NtY193ci5jLTc0Ny1cdGlmICghbGdyLVx1MDAzZXdyX3J4X2J1Zl92Milcbm5ldC9zbWMvc21jX3dyLmMtNzQ4LVx0XHRyZXR1cm4gLUVOT01FTTtcbm5ldC9zbWMvc21jX3dyLmM6NzQ5Olx0bGdyLVx1MDAzZXdyX3R4X2J1Zl92MiA9IGt6YWxsb2MoU01DX1dSX0JVRl9WMl9TSVpFLCBHRlBfS0VSTkVMKTtcbm5ldC9zbWMvc21jX3dyLmMtNzUwLVx0aWYgKCFsZ3ItXHUwMDNld3JfdHhfYnVmX3YyKSB7XG4tLVxubmV0L3NtYy9zbWNfd3IuYz04NzE9aW50IHNtY193cl9jcmVhdGVfbGluayhzdHJ1Y3Qgc21jX2xpbmsgKmxuaylcbi0tXG5uZXQvc21jL3NtY193ci5jLTg4OS1cdFx0XHRcdGliX2RtYV9tYXBfc2luZ2xlKGliZGV2LCBsbmstXHUwMDNlbGdyLVx1MDAzZXdyX3J4X2J1Zl92Mixcbm5ldC9zbWMvc21jX3dyLmM6ODkwOlx0XHRcdFx0XHRcdCAgU01DX1dSX0JVRl9WMl9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpO1xubmV0L3NtYy9zbWNfd3IuYy04OTEtXHRcdFx0aWYgKGliX2RtYV9tYXBwaW5nX2Vycm9yKGliZGV2LCBsbmstXHUwMDNld3JfcnhfdjJfZG1hX2FkZHIpKSB7XG4tLVxubmV0L3NtYy9zbWNfd3IuYy04OTctXHRcdGxuay1cdTAwM2V3cl90eF92Ml9kbWFfYWRkciA9IGliX2RtYV9tYXBfc2luZ2xlKGliZGV2LFxubmV0L3NtYy9zbWNfd3IuYzo4OTg6XHRcdFx0bG5rLVx1MDAzZWxnci1cdTAwM2V3cl90eF9idWZfdjIsIFNNQ19XUl9CVUZfVjJfU0laRSxcbm5ldC9zbWMvc21jX3dyLmMtODk5LVx0XHRcdERNQV9UT19ERVZJQ0UpO1xuLS1cbm5ldC9zbWMvc21jX3dyLmMtOTMyLVx0XHRpYl9kbWFfdW5tYXBfc2luZ2xlKGliZGV2LCBsbmstXHUwMDNld3JfcnhfdjJfZG1hX2FkZHIsXG5uZXQvc21jL3NtY193ci5jOjkzMzpcdFx0XHRcdCAgICBTTUNfV1JfQlVGX1YyX1NJWkUsXG5uZXQvc21jL3NtY193ci5jLTkzNC1cdFx0XHRcdCAgICBETUFfRlJPTV9ERVZJQ0UpO1xuLS1cbm5ldC9zbWMvc21jX3dyLmMtOTM4LVx0XHRpYl9kbWFfdW5tYXBfc2luZ2xlKGliZGV2LCBsbmstXHUwMDNld3JfdHhfdjJfZG1hX2FkZHIsXG5uZXQvc21jL3NtY193ci5jOjkzOTpcdFx0XHRcdCAgICBTTUNfV1JfQlVGX1YyX1NJWkUsXG5uZXQvc21jL3NtY193ci5jLTk0MC1cdFx0XHRcdCAgICBETUFfVE9fREVWSUNFKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ5NjgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uY2VybnMgUmVnYXJkaW5nIEJ1ZmZlciBJbml0aWFsaXphdGlvbiBpbiBgc21jX2xsY19zZW5kX2FkZF9saW5rYCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBqdXN0IG5vdGljZWQgc29tZXRoaW5nIHBvdGVudGlhbGx5IHByb2JsZW1hdGljLiBJIGtub3cgdGhhdCBgU01DX1dSX0JVRl9WMl9TSVpFYCBpcyBkZWZpbmVkIGFzIDgxOTIgYnl0ZXMsIHdoaWNoIGlzIGEgc2lnbmlmaWNhbnQgY2h1bmsgb2YgbWVtb3J5LiBIb3dldmVyLCBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBzbWNfbGxjX3NlbmRfYWRkX2xpbmtgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSB0aGVyZSBtaWdodCBiZSBhbiBpc3N1ZSB3aXRoIGhvdyB0aGUgYnVmZmVyIGlzIGJlaW5nIGluaXRpYWxpemVkLgoKU3BlY2lmaWNhbGx5LCBJIHNlZSB0aGF0IGFuIGBhZGRsbGNgIHN0cnVjdHVyZSBpcyBjYXN0IG9udG8gdGhlIGJ1ZmZlciBhbmQgdGhlbiBhbiBleHRlbnNpb24gYGV4dGAgc3RydWN0dXJlIGlzIHBsYWNlZCByaWdodCBhZnRlciBpdC4gVGhlIGNvZGUgdGhlbiB1c2VzIGBtZW1zZXRgIHRvIHplcm8gb3V0IHRoZSBleHRlbnNpb24uIFRoZSBwcm9ibGVtIGlzIHRoYXQgYFNNQ19XUl9UWF9TSVpFYCBpcyA0NCwgd2hpY2ggaXMgdGhlIHNhbWUgc2l6ZSBhcyBgc2l6ZW9mKCphZGRsbGMpYC4gVGh1cywgSSBzZWUgdGhhdCBvbmx5IDg4IGJ5dGVzLCA0NCBlYWNoIGluIGBhZGRsbGNgIGFuZCBgZXh0YCwgYXJlIGJlaW5nIGV4cGxpY2l0bHkgemVyb2VkIG91dCwgYnV0IHRoZSBidWZmZXIgaXMgKm11Y2gqIGxhcmdlciEKCk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogd2hhdCBoYXBwZW5zIHRvIHRoZSByZW1haW5pbmcgODAwNCBieXRlcz8gQXJlIHRoZXNlIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgYnl0ZXMgc2VudCBvdmVyIHRoZSBuZXR3b3JrPyBUaGF0IHdvdWxkIGJlIGEgc2VyaW91cyBzZWN1cml0eSBjb25jZXJuLCBhbmQgZXZlbiBpZiBpdCBpc24mIzM5O3QsIHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBsZWFkIHRvIGEgdmFyaWV0eSBvZiBzdWJ0bGUgYW5kIGhhcmQtdG8tZGVidWcgaXNzdWVzLiBJIG5lZWQgdG8gdGFrZSBhbm90aGVyIGxvb2sgYXQgdGhlIGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgaG93IHRoZSByZXN0IG9mIHRoZSBidWZmZXIgaXMgaGFuZGxlZCBhbmQgaWYgdGhpcyBpcyBhIHJlYWwgcHJvYmxlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc21jL3NtY19sbGMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjgwOlx0XHRpZiAobGlua19uZXcpIHtcbiA2ODE6XHRcdFx0YWRkbGxjLVx1MDAzZWxpbmtfbnVtID0gbGlua19uZXctXHUwMDNlbGlua19pZDtcbiA2ODI6XHRcdFx0aHRvbjI0KGFkZGxsYy1cdTAwM2VzZW5kZXJfcXBfbnVtLCBsaW5rX25ldy1cdTAwM2Vyb2NlX3FwLVx1MDAzZXFwX251bSk7XG4gNjgzOlx0XHRcdGh0b24yNChhZGRsbGMtXHUwMDNlaW5pdGlhbF9wc24sIGxpbmtfbmV3LVx1MDAzZXBzbl9pbml0aWFsKTtcbiA2ODQ6XHRcdFx0aWYgKHJlcXJlc3AgPT0gU01DX0xMQ19SRVEpXG4gNjg1Olx0XHRcdFx0YWRkbGxjLVx1MDAzZXFwX210dSA9IGxpbmtfbmV3LVx1MDAzZXBhdGhfbXR1O1xuIDY4NjpcdFx0XHRlbHNlXG4gNjg3Olx0XHRcdFx0YWRkbGxjLVx1MDAzZXFwX210dSA9IG1pbihsaW5rX25ldy1cdTAwM2VwYXRoX210dSxcbiA2ODg6XHRcdFx0XHRcdFx0ICAgICBsaW5rX25ldy1cdTAwM2VwZWVyX210dSk7XG4gNjg5Olx0XHR9XG4gNjkwOlx0XHRpZiAoZXh0IFx1MDAyNlx1MDAyNiBsaW5rX25ldylcbiA2OTE6XHRcdFx0bGVuICYjNDM7PSBzbWNfbGxjX2ZpbGxfZXh0X3YyKGV4dCwgbGluaywgbGlua19uZXcpO1xuIDY5MjpcdFx0c21jX2xsY19pbml0X21zZ19oZHIoXHUwMDI2YWRkbGxjLVx1MDAzZWhkLCBsaW5rLVx1MDAzZWxnciwgbGVuKTtcbiA2OTM6XHRcdC8qIHNlbmQgbGxjIG1lc3NhZ2UgKi9cbiA2OTQ6XHRcdGlmIChsaW5rLVx1MDAzZWxnci1cdTAwM2VzbWNfdmVyc2lvbiA9PSBTTUNfVjIpXG4gNjk1Olx0XHRcdHJjID0gc21jX3dyX3R4X3YyX3NlbmQobGluaywgcGVuZCwgbGVuKTtcbiA2OTY6XHRcdGVsc2VcbiA2OTc6XHRcdFx0cmMgPSBzbWNfd3JfdHhfc2VuZChsaW5rLCBwZW5kKTtcbiA2OTg6XHRwdXRfb3V0OlxuIDY5OTpcdFx0c21jX3dyX3R4X2xpbmtfcHV0KGxpbmspO1xuIDcwMDpcdFx0cmV0dXJuIHJjO1xuIDcwMTpcdH1cbiA3MDI6XHRcbiA3MDM6XHQvKiBzZW5kIERFTEVURSBMSU5LIHJlcXVlc3Qgb3IgcmVzcG9uc2UgKi9cbiA3MDQ6XHRpbnQgc21jX2xsY19zZW5kX2RlbGV0ZV9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluaywgdTggbGlua19kZWxfaWQsXG4gNzA1Olx0XHRcdFx0ICAgICBlbnVtIHNtY19sbGNfcmVxcmVzcCByZXFyZXNwLCBib29sIG9yZGVybHksXG4gNzA2Olx0XHRcdFx0ICAgICB1MzIgcmVhc29uKVxuIDcwNzpcdHtcbiA3MDg6XHRcdHN0cnVjdCBzbWNfbGxjX21zZ19kZWxfbGluayAqZGVsbGxjO1xuIDcwOTpcdFx0c3RydWN0IHNtY193cl90eF9wZW5kX3ByaXYgKnBlbmQ7XG4gNzEwOlx0XHRzdHJ1Y3Qgc21jX3dyX2J1ZiAqd3JfYnVmO1xuIDcxMTpcdFx0aW50IHJjO1xuIDcxMjpcdFxuIDcxMzpcdFx0aWYgKCFzbWNfd3JfdHhfbGlua19ob2xkKGxpbmspKVxuIDcxNDpcdFx0XHRyZXR1cm4gLUVOT0xJTks7XG4gNzE1Olx0XHRyYyA9IHNtY19sbGNfYWRkX3BlbmRpbmdfc2VuZChsaW5rLCBcdTAwMjZ3cl9idWYsIFx1MDAyNnBlbmQpO1xuIDcxNjpcdFx0aWYgKHJjKVxuIDcxNzpcdFx0XHRnb3RvIHB1dF9vdXQ7XG4gNzE4Olx0XHRkZWxsbGMgPSAoc3RydWN0IHNtY19sbGNfbXNnX2RlbF9saW5rICopd3JfYnVmO1xuIDcxOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjMwNgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIENvbmNlcm4gUmVnYXJkaW5nIGBzbWNfd3JfdHhfdjJfc2VuZGAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHNtY193cl90eF92Ml9zZW5kKGxpbmssIHBlbmQsIGxlbik7YCBjYWxsIGFuZCBzb21ldGhpbmcgaXMgaW1tZWRpYXRlbHkganVtcGluZyBvdXQgYXQgbWUuIFRoZSBmdW5jdGlvbiBpdHNlbGYgb25seSB0cmFuc21pdHMgYGxlbmAgYnl0ZXMsIHJpZ2h0PyBBbmQgSSBzZWUgaG93IGBsZW5gIGlzIGJlaW5nIGNhbGN1bGF0ZWQ6CgpgYGBjCgkJaW50IGxlbiA9IHNpemVvZigqYWRkbGxjKTsKICAgICAgICAuLi4KCQlpZiAoZXh0ICZhbXA7JmFtcDsgbGlua19uZXcpCgkJCWxlbiAmIzQzOz0gc21jX2xsY19maWxsX2V4dF92MihleHQsIGxpbmssIGxpbmtfbmV3KTsKYGBgCgpTbyBgbGVuYCBzdGFydHMgd2l0aCB0aGUgc2l6ZSBvZiBgYWRkbGxjYCBhbmQgcG90ZW50aWFsbHkgZ2V0cyBiaWdnZXIgZGVwZW5kaW5nIG9uIHNvbWUgZXh0ZW5zaW9ucyBhbmQgbmV3IGxpbmsgY29uZmlndXJhdGlvbnMuIEJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlbGV2YW50IHN0cnVjdHVyZXMgYW5kIHRoZSBwb3RlbnRpYWwgY2FsbCB0byBgc21jX2xsY19maWxsX2V4dF92MmAsIHRoZSBtYXhpbXVtIHZhbHVlIG9mIGBsZW5gIHdpbGwgYmUgODggYnl0ZXMgaW4gdGhpcyBzY2VuYXJpby4KClRoZSBjcnVjaWFsIHBvaW50IGhlcmUgaXMgdGhhdCBpZiBgc21jX3dyX3R4X3YyX3NlbmRgICpvbmx5KiBzZW5kcyBgbGVuYCBieXRlcywgdGhlbiBhbnkgZGF0YSB0aGF0IG1pZ2h0IGV4aXN0IGluIHRoZSBidWZmZXIgKmJleW9uZCogdGhvc2UgYGxlbmAgYnl0ZXMgaXMgc2ltcGx5ICpub3QqIGdvaW5nIHRvIGJlIHRyYW5zbWl0dGVkIG92ZXIgdGhlIG5ldHdvcmsuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgYHNtY193cl90eF92Ml9zZW5kYCBiZWhhdmlvciBpbiBtb3JlIGRldGFpbCBhbmQgY29uZmlybSBteSBjdXJyZW50IGNvbmNlcm5zLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBkaXZlIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBzbWNfd3JfdHhfdjJfc2VuZGAgdG8gZW5zdXJlIHRoaXMgc3BlY2lmaWMgYXNwZWN0IGlzIGhhbmRsZWQgY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX3dyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMzNjpcdGludCBzbWNfd3JfdHhfdjJfc2VuZChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHN0cnVjdCBzbWNfd3JfdHhfcGVuZF9wcml2ICpwcml2LFxuIDMzNzpcdFx0XHQgICAgICBpbnQgbGVuKVxuIDMzODpcdHtcbiAzMzk6XHRcdGludCByYztcbiAzNDA6XHRcbiAzNDE6XHRcdGxpbmstXHUwMDNld3JfdHhfdjJfaWItXHUwMDNlc2dfbGlzdFswXS5sZW5ndGggPSBsZW47XG4gMzQyOlx0XHRpYl9yZXFfbm90aWZ5X2NxKGxpbmstXHUwMDNlc21jaWJkZXYtXHUwMDNlcm9jZV9jcV9zZW5kLFxuIDM0MzpcdFx0XHRcdCBJQl9DUV9ORVhUX0NPTVAgfCBJQl9DUV9SRVBPUlRfTUlTU0VEX0VWRU5UUyk7XG4gMzQ0Olx0XHRyYyA9IGliX3Bvc3Rfc2VuZChsaW5rLVx1MDAzZXJvY2VfcXAsIGxpbmstXHUwMDNld3JfdHhfdjJfaWIsIE5VTEwpO1xuIDM0NTpcdFx0aWYgKHJjKSB7XG4gMzQ2Olx0XHRcdHNtY193cl90eF9wdXRfc2xvdChsaW5rLCBwcml2KTtcbiAzNDc6XHRcdFx0c21jcl9saW5rX2Rvd25fY29uZF9zY2hlZChsaW5rKTtcbiAzNDg6XHRcdH1cbiAzNDk6XHRcdHJldHVybiByYztcbiAzNTA6XHR9XG4gMzUxOlx0XG4gMzUyOlx0LyogU2VuZCBwcmVwYXJlZCBXUiBzbG90IHZpYSBpYl9wb3N0X3NlbmQgYW5kIHdhaXQgZm9yIHNlbmQgY29tcGxldGlvblxuIDM1MzpcdCAqIG5vdGlmaWNhdGlvbi5cbiAzNTQ6XHQgKiBAcHJpdjogcG9pbnRlciB0byBzbWNfd3JfdHhfcGVuZF9wcml2IGlkZW50aWZ5aW5nIHByZXBhcmVkIG1lc3NhZ2UgYnVmZmVyXG4gMzU1Olx0ICovXG4gMzU2Olx0aW50IHNtY193cl90eF9zZW5kX3dhaXQoc3RydWN0IHNtY19saW5rICpsaW5rLCBzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRfcHJpdiAqcHJpdixcbiAzNTc6XHRcdFx0XHR1bnNpZ25lZCBsb25nIHRpbWVvdXQpXG4gMzU4Olx0e1xuIDM1OTpcdFx0c3RydWN0IHNtY193cl90eF9wZW5kICpwZW5kO1xuIDM2MDpcdFx0dTMyIHBuZF9pZHg7XG4gMzYxOlx0XHRpbnQgcmM7XG4gMzYyOlx0XG4gMzYzOlx0XHRwZW5kID0gY29udGFpbmVyX29mKHByaXYsIHN0cnVjdCBzbWNfd3JfdHhfcGVuZCwgcHJpdik7XG4gMzY0Olx0XHRwZW5kLVx1MDAzZWNvbXBsX3JlcXVlc3RlZCA9IDE7XG4gMzY1Olx0XHRwbmRfaWR4ID0gcGVuZC1cdTAwM2VpZHg7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MzY0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjQ1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgU01DIFdSIFRYIENvZGUgYW5kIFBvdGVudGlhbCBJc3N1ZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyB3YXMgb24gdGhlIHBvc3NpYmlsaXR5IG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHNlbnQgb3ZlciB0aGUgbmV0d29yay4gVGhlIGNvZGUgc2VlbWVkIHRvIGluaXRpYWxpemUgYSBidWZmZXIgd2l0aCBgbGVuYCBieXRlcywgYW5kIHRoZW4gZXhwbGljaXRseSB6ZXJvIG91dCB0aGlzIGJ1ZmZlciB3aXRoIGEgYG1lbXNldGAuIFRoaXMgbG9va3MgY29ycmVjdCwgYnV0IEkgZ290IGNvbmNlcm5lZCBhYm91dCB3aGF0IHdvdWxkIGhhcHBlbiBpZiB0aGUgd3JpdGUgYnVmZmVyIHdhcyB6ZXJvZWQgYWZ0ZXIgaXQgd2FzIHVzZWQuIEkgd2FzIGNvbmNlcm5lZCBhYm91dCBgc21jX3dyX3R4X3B1dF9zbG90YCB6ZXJvaW5nIHRoZSBidWZmZXIsIHRoZW4gYHNtY193cl90eF9nZXRfdjJfc2xvdGAgcmV0dXJuaW5nIGEgcG9pbnRlciB0byB0aGF0IHplcm9lZCBidWZmZXIsIGFuZCBhIHN1YnNlcXVlbnQgdXNlIHdvdWxkIGRlcmVmZXJlbmNlIGEgTlVMTCBwb2ludGVyLiAgSXQgbG9va2VkIGxpa2UgYSBjbGVhciBwb3RlbnRpYWwgZm9yIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBpcyBhIHN0YW5kYXJkIGtlcm5lbCBvb3BzLiBCdXQgYWZ0ZXIgdHJhY2luZyB0aGUgbG9naWMsIHRoaXMgb25seSBoYXBwZW5lZCBvbiBlcnJvcnMgb3IgZXhwbGljaXQgYWJvcnRzLiBUaGlzIG1lYW50IHRoZXJlIHdhcyBOTyB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrIGlzc3VlLgoKVGhlbiBJIGNvbnNpZGVyZWQgdGhlIGNoYW5nZSBmcm9tIGB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dGAgdG8gdGhlIG9wZW4tY29kZWQgd2FpdCBsb29wLiAgVGhlIG9yaWdpbmFsIGNvbmNlcm4gd2FzIHRoYXQgYHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0YCBtaWdodCBldmFsdWF0ZSBhIGNvbmRpdGlvbiB3aXRoIHNpZGUgZWZmZWN0cywgbGlrZSBgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RfaW5kZXhgLCB3aGljaCBjYWxscyBgdGVzdF9hbmRfc2V0X2JpdGAuIEl0JiMzOTtzIGEgbWFjcm8sIGFuZCBteSBjb25jZXJuIHdhcyB0aGF0IGNvbmRpdGlvbiBtaWdodCBiZSBldmFsdWF0ZWQgbXVsdGlwbGUgdGltZXMsIHBvdGVudGlhbGx5IGxlYWtpbmcgc2xvdHMuICBIb3dldmVyLCBhZnRlciBleGFtaW5pbmcgdGhlIG1hY3JvIGRlZmluaXRpb24sIEkgZG9uJiMzOTt0IHNlZSBob3cgdGhhdCBpcyBwb3NzaWJsZSwgYXMgdGhlIG1hY3JvIHNlZW1zIHRvIG9ubHkgZXZhbHVhdGUgdGhlIGNvbmRpdGlvbiBvbmNlLgoKVGhlICpyZWFsKiBpc3N1ZSB3aXRoIGB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dGAgaXMgdGhhdCBpdCB1c2VzIGBwcmVwYXJlX3RvX3dhaXRgIHdoaWNoIGFkZHMgdGFza3MgdG8gYSAqbm9uLWV4Y2x1c2l2ZSogd2FpdCBxdWV1ZS4gVGhpcyBtZWFucyBgd2FrZV91cGAgd291bGQgd2FrZSB1cCBhbGwgd2FpdGluZyB0aHJlYWRzLiAgVGhpcyBsZWFkcyB0byBhIHRodW5kZXJpbmcgaGVyZCBwcm9ibGVtLiBUaGUgY2hhbmdlIHRvIGBwcmVwYXJlX3RvX3dhaXRfZXhjbHVzaXZlYCB3aXRoIHRoZSBvcGVuLWNvZGVkIGxvb3AgdXNpbmcgYHdha2VfdXBgIGZpeGVzIHRoaXMuIEl0IG9wdGltaXplcyBwZXJmb3JtYW5jZSBhbmQgcHJldmVudHMgcG90ZW50aWFsIENQVSBzcGlrZXMsIGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBjb3JydXB0aW9uIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvbmNlcm5zLgoKRmluYWxseSwgSSByZXZpc2l0ZWQgdGhlIGBtZW1zZXRgIGNoYW5nZS4gT3JpZ2luYWxseSwgdGhlIGNvZGUgd2FzIHplcm9pbmcgdGhlICphZGRyZXNzKiBvZiBhIHBvaW50ZXIgaW5zdGVhZCBvZiB0aGUgbWVtb3J5IHRoZSBwb2ludGVyIHdhcyBwb2ludGluZyB0by4gQnkgY2hhbmdpbmcgdGhpcyB0byBgbWVtc2V0YCBvbiB0aGUgcG9pbnRlciBpdHNlbGYsIGl0IGZpeGVkIHRoZSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgbWVudGlvbmVkIGFib3ZlLiBUaGlzIGlzIGNvcnJlY3QuIFRoZSBjb2RlIG1ha2VzIGl0IHNvIHRoYXQgb25seSBleHBsaWNpdGx5IHplcm9lZCBhbmQgaW5pdGlhbGl6ZWQgYnl0ZXMgYXJlIHNlbnQgb3ZlciB0aGUgbmV0d29yaywgYW5kIHRoZSBidWZmZXIgaXMgemVyb2VkIG91dCBieSBgc21jX2xsY19zZW5kX2FkZF9saW5rYC4gU28sIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzLiBJIHNob3VsZCByZXZpZXcgb3RoZXIgdXNlcnMgb2YgYHNtY193cl90eF9nZXRfdjJfc2xvdGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NtY193cl90eF9nZXRfdjJfc2xvdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2xsYy5jPTQyMj1zdGF0aWMgaW50IHNtY19sbGNfYWRkX3BlbmRpbmdfc2VuZF92MihzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXG4tLVxubmV0L3NtYy9zbWNfbGxjLmMtNDI3LVxubmV0L3NtYy9zbWNfbGxjLmM6NDI4Olx0cmMgPSBzbWNfd3JfdHhfZ2V0X3YyX3Nsb3QobGluaywgc21jX2xsY190eF9oYW5kbGVyLCB3cl9idWYsIHBlbmQpO1xubmV0L3NtYy9zbWNfbGxjLmMtNDI5LVx0aWYgKHJjIFx1MDAzYyAwKVxuLS1cbm5ldC9zbWMvc21jX3dyLmM9MTk1PWludCBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXG4tLVxubmV0L3NtYy9zbWNfd3IuYy0yNTktXG5uZXQvc21jL3NtY193ci5jOjI2MDppbnQgc21jX3dyX3R4X2dldF92Ml9zbG90KHN0cnVjdCBzbWNfbGluayAqbGluayxcbm5ldC9zbWMvc21jX3dyLmMtMjYxLVx0XHRcdCAgc21jX3dyX3R4X2hhbmRsZXIgaGFuZGxlcixcbi0tXG5uZXQvc21jL3NtY193ci5oPTExMz1pbnQgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3Qoc3RydWN0IHNtY19saW5rICpsaW5rLCBzbWNfd3JfdHhfaGFuZGxlciBoYW5kbGVyLFxuLS1cbm5ldC9zbWMvc21jX3dyLmgtMTE2LVx0XHRcdCAgICBzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRfcHJpdiAqKndyX3BlbmRfcHJpdik7XG5uZXQvc21jL3NtY193ci5oOjExNzppbnQgc21jX3dyX3R4X2dldF92Ml9zbG90KHN0cnVjdCBzbWNfbGluayAqbGluayxcbm5ldC9zbWMvc21jX3dyLmgtMTE4LVx0XHRcdCAgc21jX3dyX3R4X2hhbmRsZXIgaGFuZGxlcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA4NjcKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipUcmFjaW5nIHRoZSBDYWxsZXJzIG9mIGBzbWNfbGxjX2FkZF9wZW5kaW5nX3NlbmRfdjJgKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgZmxvdyBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2Ugd2hlcmUgYHNtY19sbGNfYWRkX3BlbmRpbmdfc2VuZF92MmAgaXMgYWN0dWFsbHkgKnVzZWQqLiBJdCBsb29rcyBsaWtlIHRoZSBjb2RlIG9ubHkgc2hvd3MgYHNtY19sbGNfYWRkX3BlbmRpbmdfc2VuZF92MmAgYmVpbmcgY2FsbGVkIGJ5IHRoZSBmdW5jdGlvbiBgc21jX2xsY19hZGRfcGVuZGluZ19zZW5kX3YyYCBpdHNlbGYuIE5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hvJiMzOTtzIGNhbGxpbmcgKnRoYXQqIGZ1bmN0aW9uLiBJIHNlZSB0aGF0IGBzbWNfbGxjX2FkZF9wZW5kaW5nX3NlbmRfdjJgIGlzIG9ubHkgY2FsbGVkIGJ5IHR3byBmdW5jdGlvbnM6IGBzbWNfbGxjX3NlbmRfYWRkX2xpbmtgIGFuZCBgc21jX2xsY19zZW5kX3JlcXVlc3RfYWRkX2xpbmtgLiBJIHRoaW5rIGl0IGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBgc21jX2xsY19zZW5kX3JlcXVlc3RfYWRkX2xpbmtgIGZ1bmN0aW9uLCBzaW5jZSBpdCBzZWVtcyB0byBiZSB0aGUgbW9zdCBjcml0aWNhbCBvZiB0aGUgdHdvIHRvIGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2xsYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEyNiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTI2Olx0c3RhdGljIHZvaWQgc21jX2xsY19zZW5kX3JlcXVlc3RfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rKVxuMTEyNzpcdHtcbjExMjg6XHRcdHN0cnVjdCBzbWNfbGxjX21zZ19yZXFfYWRkX2xpbmtfdjIgKmxsYztcbjExMjk6XHRcdHN0cnVjdCBzbWNfd3JfdHhfcGVuZF9wcml2ICpwZW5kO1xuMTEzMDpcdFx0c3RydWN0IHNtY193cl92Ml9idWYgKndyX2J1ZjtcbjExMzE6XHRcdHN0cnVjdCBzbWNfZ2lkbGlzdCBnaWRsaXN0O1xuMTEzMjpcdFx0aW50IHJjLCBsZW4sIGk7XG4xMTMzOlx0XG4xMTM0Olx0XHRpZiAoIXNtY193cl90eF9saW5rX2hvbGQobGluaykpXG4xMTM1Olx0XHRcdHJldHVybjtcbjExMzY6XHRcdGlmIChsaW5rLVx1MDAzZWxnci1cdTAwM2V0eXBlID09IFNNQ19MR1JfU1lNTUVUUklDIHx8XG4xMTM3Olx0XHQgICAgbGluay1cdTAwM2VsZ3ItXHUwMDNldHlwZSA9PSBTTUNfTEdSX0FTWU1NRVRSSUNfUEVFUilcbjExMzg6XHRcdFx0Z290byBwdXRfb3V0O1xuMTEzOTpcdFxuMTE0MDpcdFx0c21jX2ZpbGxfZ2lkX2xpc3QobGluay1cdTAwM2VsZ3IsIFx1MDAyNmdpZGxpc3QsIGxpbmstXHUwMDNlc21jaWJkZXYsIGxpbmstXHUwMDNlZ2lkKTtcbjExNDE6XHRcdGlmIChnaWRsaXN0LmxlbiBcdTAwM2M9IDEpXG4xMTQyOlx0XHRcdGdvdG8gcHV0X291dDtcbjExNDM6XHRcbjExNDQ6XHRcdHJjID0gc21jX2xsY19hZGRfcGVuZGluZ19zZW5kX3YyKGxpbmssIFx1MDAyNndyX2J1ZiwgXHUwMDI2cGVuZCk7XG4xMTQ1Olx0XHRpZiAocmMpXG4xMTQ2Olx0XHRcdGdvdG8gcHV0X291dDtcbjExNDc6XHRcdGxsYyA9IChzdHJ1Y3Qgc21jX2xsY19tc2dfcmVxX2FkZF9saW5rX3YyICopd3JfYnVmO1xuMTE0ODpcdFx0bWVtc2V0KGxsYywgMCwgU01DX1dSX1RYX1NJWkUpO1xuMTE0OTpcdFxuMTE1MDpcdFx0bGxjLVx1MDAzZWhkLmNvbW1vbi5sbGNfdHlwZSA9IFNNQ19MTENfUkVRX0FERF9MSU5LO1xuMTE1MTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZ2lkbGlzdC5sZW47IGkmIzQzOyYjNDM7KVxuMTE1MjpcdFx0XHRtZW1jcHkobGxjLVx1MDAzZWdpZFtpXSwgZ2lkbGlzdC5saXN0W2ldLCBzaXplb2YoZ2lkbGlzdC5saXN0WzBdKSk7XG4xMTUzOlx0XHRsbGMtXHUwMDNlZ2lkX2NudCA9IGdpZGxpc3QubGVuO1xuMTE1NDpcdFx0bGVuID0gc2l6ZW9mKCpsbGMpICYjNDM7IChnaWRsaXN0LmxlbiAqIHNpemVvZihnaWRsaXN0Lmxpc3RbMF0pKTtcbjExNTU6XHRcdHNtY19sbGNfaW5pdF9tc2dfaGRyKFx1MDAyNmxsYy1cdTAwM2VoZCwgbGluay1cdTAwM2VsZ3IsIGxlbik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxODQzCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVxdWVzdCBBZGRpdGlvbiBvZiBhIExpbmsgaW4gdGhlIFNNQyBMYXllcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBzbWNfbGxjX3NlbmRfcmVxdWVzdF9hZGRfbGlua2AgZnVuY3Rpb24sIGFuZCBJIHNlZSB0aGV5JiMzOTtyZSBpbml0aWFsaXppbmcgdGhlIGBsbGNgIHZhcmlhYmxlIHRvIHBvaW50IHRvIGEgYnVmZmVyIChgd3JfYnVmYCkgYW5kIGNhc3RpbmcgaXQgYXMgYSBgc3RydWN0IHNtY19sbGNfbXNnX3JlcV9hZGRfbGlua192MmAuIE1ha2VzIHNlbnNlLCB3ZSYjMzk7cmUgYnVpbGRpbmcgYSByZXF1ZXN0IG1lc3NhZ2UgZm9yIGFkZGluZyBhIGxpbmsuIFRoZXkmIzM5O3JlIHRoZW4gemVyb2luZyBvdXQgdGhlIGJ1ZmZlciB1c2luZyBgbWVtc2V0YCwgdXNpbmcgYFNNQ19XUl9UWF9TSVpFYC4KCkJ1dCB3YWl0IGEgbWludXRlLi4uIGBTTUNfV1JfVFhfU0laRWAgaXMgZGVmaW5lZCBhcyA0NCBieXRlcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0JiMzOTtzIHRoZSBjb3JyZWN0IHNpemUuIFRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlLCBpcyB0aGF0IHJlYWxseSBsYXJnZSBlbm91Z2ggZm9yIGBzdHJ1Y3Qgc21jX2xsY19tc2dfcmVxX2FkZF9saW5rX3YyYD8gSSBoYXZlIHRvIGNvbmZpcm0gdGhlIHN0cnVjdHVyZSBzaXplLCBpbiBjYXNlIHdlIGhhdmUgYSBidWZmZXIgb3ZlcmZsb3cuIFRoaXMgaXMgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBpZiB0aGUgc3RydWN0IGlzIGxhcmdlciB0aGFuIDQ0IGJ5dGVzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3Qgc21jX2xsY19tc2dfcmVxX2FkZF9saW5rX3YyIFxceyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2xsYy5jPTg2PXN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGlua192Ml9leHQge1xuLS1cbm5ldC9zbWMvc21jX2xsYy5jLTEwMy1cbm5ldC9zbWMvc21jX2xsYy5jOjEwNDpzdHJ1Y3Qgc21jX2xsY19tc2dfcmVxX2FkZF9saW5rX3YyIHtcbm5ldC9zbWMvc21jX2xsYy5jLTEwNS1cdHN0cnVjdCBzbWNfbGxjX2hkciBoZDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIzNjEKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYHN0cnVjdCBzbWNfbGxjX21zZ19yZXFfYWRkX2xpbmtfdjJgIFN0cnVjdHVyZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHN0cnVjdCBzbWNfbGxjX21zZ19yZXFfYWRkX2xpbmtfdjJgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCYjMzk7cyBuZXcgb3IgZGlmZmVyZW50IGhlcmUgY29tcGFyZWQgdG8gdGhlIHByZXZpb3VzIHZlcnNpb24gb3Igc2ltaWxhciBzdHJ1Y3R1cmVzPyBJcyB0aGlzIGEgY29tcGxldGUgcmV3cml0ZSwgYSBtaW5vciB0d2Vhaywgb3IgYW4gaW5jcmVtZW50YWwgaW1wcm92ZW1lbnQ/IEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGtleSBmaWVsZHMgdGhhdCBkZWZpbmUgbGluayBhZGRpdGlvbiwgcGFydGljdWxhcmx5IGFueXRoaW5nIHJlbGF0ZWQgdG8gdmVyc2lvbmluZywgc2VjdXJpdHksIG9yIHBlcmZvcm1hbmNlIGVuaGFuY2VtZW50cywgYW5kIGhvdyB0aGV5IGludGVyYWN0LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IGhvdyB0aGlzIGltcGFjdHMgdGhlIG92ZXJhbGwgZmxvdyBvZiB0aGUgTGluayBMYXllciBDb250cm9sIChMTEMpIG1lc3NhZ2VzIGluIHRoZSBTTUMgcHJvdG9jb2wgYW5kIHdoZXJlIGl0IGZpdHMgaW4gdGhlIHNlcXVlbmNlLiBJIGFudGljaXBhdGUgaXQmIzM5O2xsIGhvbGQgaW5mb3JtYXRpb24gbGlrZSBwZWVyIGFkZHJlc3NlcywgY29ubmVjdGlvbiBwYXJhbWV0ZXJzLCBhbmQgcmVzb3VyY2UgYWxsb2NhdGlvbiBkZXRhaWxzLiBUaGUgJiMzNDt2MiYjMzQ7IHN0cm9uZ2x5IGltcGxpZXMgYSBwcm90b2NvbCBldm9sdXRpb24sIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb21wYXRpYmlsaXR5IGltcGxpY2F0aW9uc+KAlGlzIGl0IGJhY2t3YXJkIGNvbXBhdGlibGUsIG9yIGRvIHdlIG5lZWQgdmVyc2lvbiBuZWdvdGlhdGlvbj8gTGV0JiMzOTtzIGNoZWNrIHRoZSBoZWFkZXIgZmlsZXMgYW5kIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfbGxjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwNDpcdHN0cnVjdCBzbWNfbGxjX21zZ19yZXFfYWRkX2xpbmtfdjIge1xuIDEwNTpcdFx0c3RydWN0IHNtY19sbGNfaGRyIGhkO1xuIDEwNjpcdFx0dTggcmVzZXJ2ZWRbMjBdO1xuIDEwNzpcdFx0dTggZ2lkX2NudDtcbiAxMDg6XHRcdHU4IHJlc2VydmVkMlszXTtcbiAxMDk6XHRcdHU4IGdpZFtdW1NNQ19HSURfU0laRV07XG4gMTEwOlx0fTtcbiAxMTE6XHRcbiAxMTI6XHQjZGVmaW5lIFNNQ19MTENfUktFWVNfUEVSX0NPTlRfTVNHXHQyXG4gMTEzOlx0XG4gMTE0Olx0c3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rX2NvbnQge1x0LyogdHlwZSAweDAzICovXG4gMTE1Olx0XHRzdHJ1Y3Qgc21jX2xsY19oZHIgaGQ7XG4gMTE2Olx0XHR1OCBsaW5rX251bTtcbiAxMTc6XHRcdHU4IG51bV9ya2V5cztcbiAxMTg6XHRcdHU4IHJlc2VydmVkMlsyXTtcbiAxMTk6XHRcdHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGlua19jb250X3J0IHJ0W1NNQ19MTENfUktFWVNfUEVSX0NPTlRfTVNHXTtcbiAxMjA6XHRcdHU4IHJlc2VydmVkWzRdO1xuIDEyMTpcdH0gX19wYWNrZWQ7XHRcdFx0LyogZm9ybWF0IGRlZmluZWQgaW4gUkZDNzYwOSAqL1xuIDEyMjpcdFxuIDEyMzpcdCNkZWZpbmUgU01DX0xMQ19GTEFHX0RFTF9MSU5LX0FMTFx0MHg0MFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzAxOAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNNQyBMTEMgTWVzc2FnZSBSZXF1ZXN0KioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgYHN0cnVjdCBzbWNfbGxjX21zZ19yZXFfYWRkX2xpbmtfdjJgLiBJIHNlZSBpdCYjMzk7cyBnb3QgYSBmaXhlZCBoZWFkZXIgKGBoZGApIG9mIDE2IGJ5dGVzLCBhIHJlc2VydmVkIHNwYWNlIChgcmVzZXJ2ZWRgKSBmb3IgMjAgYnl0ZXMsIGEgYGdpZF9jbnRgIHdoaWNoIGlzIGp1c3QgMSBieXRlLCBhbmQgYW5vdGhlciAzIGJ5dGVzIG9mIGByZXNlcnZlZDJgLiBUaGF0JiMzOTtzIGEgdG90YWwgb2YgNDAgYnl0ZXMgZm9yIHRoZSBmaXhlZCBwb3J0aW9uLiBUaGVuLCB3ZSBoYXZlIHRoZSB2YXJpYWJsZS1sZW5ndGggYGdpZGAgYXJyYXksIGBnaWRbXVtTTUNfR0lEX1NJWkVdYCwgd2hlcmUgYFNNQ19HSURfU0laRWAgaXMsIEkgcmVjYWxsLCAxNi4KCkhtbSwgdGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBJIHNlZSBhIGBtZW1zZXQobGxjLCAwLCBTTUNfV1JfVFhfU0laRSk7YCB3aGljaCBjbGVhcnMgNDQgYnl0ZXMuIEJ1dCB0aGVuIHRoZSBzaXplIGlzIGNhbGN1bGF0ZWQgZGlmZmVyZW50bHk6IGBsZW4gPSBzaXplb2YoKmxsYykgJiM0MzsgKGdpZGxpc3QubGVuICogc2l6ZW9mKGdpZGxpc3QubGlzdFswXSkpO2AuIGBzaXplb2YoKmxsYylgIGNvcnJlY3RseSBnaXZlcyA0MCBieXRlcywgYnV0IHdoYXQmIzM5O3MgdGhlIHVwcGVyIGJvdW5kIG9uIGBnaWRsaXN0LmxlbmA/IEkgbmVlZCB0byBjaGVjayBgc21jX2ZpbGxfZ2lkX2xpc3RgIHRvIHNlZSBob3cgdGhhdCYjMzk7cyBoYW5kbGVkLiBMb29rcyBsaWtlIHRoaXMgY291bGQgY3JlYXRlIGEgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvdyB2dWxuZXJhYmlsaXR5LiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5IGhhbmRsZSBpdC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNfZmlsbF9naWRfbGlzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvYWZfc21jLmM9MTE4OD1zdGF0aWMgaW50IHNtY19jb25uZWN0X2NsYyhzdHJ1Y3Qgc21jX3NvY2sgKnNtYyxcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTEyMDItXG5uZXQvc21jL2FmX3NtYy5jOjEyMDM6dm9pZCBzbWNfZmlsbF9naWRfbGlzdChzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncixcbm5ldC9zbWMvYWZfc21jLmMtMTIwNC1cdFx0ICAgICAgIHN0cnVjdCBzbWNfZ2lkbGlzdCAqZ2lkbGlzdCxcbi0tXG5uZXQvc21jL2FmX3NtYy5jPTEyNjc9c3RhdGljIGludCBzbWNfY29ubmVjdF9yZG1hKHN0cnVjdCBzbWNfc29jayAqc21jLFxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMTM1OS1cdFx0aWYgKGluaS1cdTAwM2VmaXJzdF9jb250YWN0X2xvY2FsKVxubmV0L3NtYy9hZl9zbWMuYzoxMzYwOlx0XHRcdHNtY19maWxsX2dpZF9saXN0KGxpbmstXHUwMDNlbGdyLCBcdTAwMjZpbmktXHUwMDNlc21jcnYyLmdpZGxpc3QsXG5uZXQvc21jL2FmX3NtYy5jLTEzNjEtXHRcdFx0XHRcdCAgbGluay1cdTAwM2VzbWNpYmRldiwgbGluay1cdTAwM2VnaWQpO1xuLS1cbm5ldC9zbWMvc21jLmg9NDE5PXZvaWQgc21jX2Nsb3NlX25vbl9hY2NlcHRlZChzdHJ1Y3Qgc29jayAqc2spO1xubmV0L3NtYy9zbWMuaDo0MjA6dm9pZCBzbWNfZmlsbF9naWRfbGlzdChzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncixcbm5ldC9zbWMvc21jLmgtNDIxLVx0XHQgICAgICAgc3RydWN0IHNtY19naWRsaXN0ICpnaWRsaXN0LFxuLS1cbm5ldC9zbWMvc21jX2xsYy5jPTExMjY9c3RhdGljIHZvaWQgc21jX2xsY19zZW5kX3JlcXVlc3RfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rKVxuLS1cbm5ldC9zbWMvc21jX2xsYy5jLTExMzktXG5uZXQvc21jL3NtY19sbGMuYzoxMTQwOlx0c21jX2ZpbGxfZ2lkX2xpc3QobGluay1cdTAwM2VsZ3IsIFx1MDAyNmdpZGxpc3QsIGxpbmstXHUwMDNlc21jaWJkZXYsIGxpbmstXHUwMDNlZ2lkKTtcbm5ldC9zbWMvc21jX2xsYy5jLTExNDEtXHRpZiAoZ2lkbGlzdC5sZW4gXHUwMDNjPSAxKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDA1MAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYHNtY19maWxsX2dpZF9saXN0YCBpbiBgbmV0L3NtYy9hZl9zbWMuY2AqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgZ3V0cyBvZiB0aGUgU01DIGNvZGUuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gYHNtY19maWxsX2dpZF9saXN0YCB3aXRoaW4gYG5ldC9zbWMvYWZfc21jLmNgLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSByZXNwb25zaWJsZSBmb3IgcG9wdWxhdGluZyB0aGUgR0lEIGxpc3QsIHdoaWNoIGlzIGEgY3JpdGljYWwgcGFydCBvZiB0aGUgU01DIChTaGFyZWQgTWVtb3J5IENvbW11bmljYXRpb25zKSBzZXR1cC4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byBoYW5kbGUgdGhlIG1hcHBpbmcgb2YgZ2xvYmFsIGlkZW50aWZpZXJzIHRvIHRoZSB1bmRlcmx5aW5nIHNoYXJlZCBtZW1vcnkgcmVnaW9ucy4gVW5kZXJzdGFuZGluZyBob3cgaXQgaGFuZGxlcyBHSUQgYWxsb2NhdGlvbiwgcG90ZW50aWFsbHkgd2l0aCB1c2VyIHNwYWNlIGludGVyYWN0aW9ucyBvciB3aXRoaW4gdGhlIGtlcm5lbCBpdHNlbGYsIHdpbGwgYmUga2V5IHRvIGdyYXNwaW5nIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMuIEkmIzM5O20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJmYWNlcyB3aXRoIG90aGVyIFNNQyBjb21wb25lbnRzLCBzdWNoIGFzIHNvY2tldCBjcmVhdGlvbi9tYW5hZ2VtZW50IGFuZCB0aGUgc2hhcmVkIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljLiBUaGUgZ29hbCBpcyB0byBlaXRoZXIgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9yIHF1aWNrbHkgaWRlbnRpZnkgYSBzcGVjaWZpYyBhcmVhIG9mIGludGVyZXN0LiBBbnkgc3VidGxlIHRocmVhZGluZyBvciBsb2NraW5nIG1lY2hhbmlzbXMgd2l0aGluIHRoaXMgcm91dGluZSB3aWxsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc21jL2FmX3NtYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIwMywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjAzOlx0dm9pZCBzbWNfZmlsbF9naWRfbGlzdChzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncixcbjEyMDQ6XHRcdFx0ICAgICAgIHN0cnVjdCBzbWNfZ2lkbGlzdCAqZ2lkbGlzdCxcbjEyMDU6XHRcdFx0ICAgICAgIHN0cnVjdCBzbWNfaWJfZGV2aWNlICprbm93bl9kZXYsIHU4ICprbm93bl9naWQpXG4xMjA2Olx0e1xuMTIwNzpcdFx0c3RydWN0IHNtY19pbml0X2luZm8gKmFsdF9pbmkgPSBOVUxMO1xuMTIwODpcdFxuMTIwOTpcdFx0bWVtc2V0KGdpZGxpc3QsIDAsIHNpemVvZigqZ2lkbGlzdCkpO1xuMTIxMDpcdFx0bWVtY3B5KGdpZGxpc3QtXHUwMDNlbGlzdFtnaWRsaXN0LVx1MDAzZWxlbiYjNDM7JiM0MztdLCBrbm93bl9naWQsIFNNQ19HSURfU0laRSk7XG4xMjExOlx0XG4xMjEyOlx0XHRhbHRfaW5pID0ga3phbGxvY19vYmooKmFsdF9pbmkpO1xuMTIxMzpcdFx0aWYgKCFhbHRfaW5pKVxuMTIxNDpcdFx0XHRnb3RvIG91dDtcbjEyMTU6XHRcbjEyMTY6XHRcdGFsdF9pbmktXHUwMDNldmxhbl9pZCA9IGxnci1cdTAwM2V2bGFuX2lkO1xuMTIxNzpcdFx0YWx0X2luaS1cdTAwM2VjaGVja19zbWNydjIgPSB0cnVlO1xuMTIxODpcdFx0YWx0X2luaS1cdTAwM2VzbWNydjIuc2FkZHIgPSBsZ3ItXHUwMDNlc2FkZHI7XG4xMjE5Olx0XHRzbWNfcG5ldF9maW5kX2FsdF9yb2NlKGxnciwgYWx0X2luaSwga25vd25fZGV2KTtcbjEyMjA6XHRcbjEyMjE6XHRcdGlmICghYWx0X2luaS1cdTAwM2VzbWNydjIuaWJfZGV2X3YyKVxuMTIyMjpcdFx0XHRnb3RvIG91dDtcbjEyMjM6XHRcbjEyMjQ6XHRcdG1lbWNweShnaWRsaXN0LVx1MDAzZWxpc3RbZ2lkbGlzdC1cdTAwM2VsZW4mIzQzOyYjNDM7XSwgYWx0X2luaS1cdTAwM2VzbWNydjIuaWJfZ2lkX3YyLFxuMTIyNTpcdFx0ICAgICAgIFNNQ19HSURfU0laRSk7XG4xMjI2Olx0XG4xMjI3Olx0b3V0OlxuMTIyODpcdFx0a2ZyZWUoYWx0X2luaSk7XG4xMjI5Olx0fVxuMTIzMDpcdFxuMTIzMTpcdHN0YXRpYyBpbnQgc21jX2Nvbm5lY3RfcmRtYV92Ml9wcmVwYXJlKHN0cnVjdCBzbWNfc29jayAqc21jLFxuMTIzMjpcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBzbWNfY2xjX21zZ19hY2NlcHRfY29uZmlybSAqYWNsYyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ4NzcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMzYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IEluaXRpYWxpemF0aW9uIGFuZCBCdWcgRml4KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCByZWdhcmRpbmcgdGhlIGluaXRpYWwgY29uY2VybiBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBgc21jX3dyX3R4X2dldF92Ml9zbG90YCwgbXkgYW5hbHlzaXMgY29uZmlybXMgdGhhdCB0aGUgY29kZSAqZG9lcyogZnVsbHkgaW5pdGlhbGl6ZSB0aGUgYnVmZmVyLiBgZ2lkbGlzdC0mZ3Q7bGVuYCBpcyBhdCBtb3N0IDIsIHNvIHRoZSBjYWxjdWxhdGVkIGxlbmd0aCwgYGxlbiA9IDQwICYjNDM7IDIgKiAxNiA9IDcyYCwgY29ycmVjdGx5IGFjY291bnRzIGZvciB0aGUgaGVhZGVyICg0MCBieXRlcykgYW5kIHRoZSB0d28gcG90ZW50aWFsIGVudHJpZXMgaW4gYGdpZGxpc3RgIChlYWNoIDE2IGJ5dGVzKS4gV2hpbGUgYG1lbXNldGAgaW5pdGlhbGx5IHplcm9lcyBvbmx5IDQ0IGJ5dGVzLCB0aGUgc3Vic2VxdWVudCBgbWVtY3B5YCBjYWxscyBmaWxsIHRoZSByZW1haW5pbmcgMzIgYnl0ZXMgb2YgdGhlIGJ1ZmZlciBmcm9tIGBnaWRsaXN0Lmxpc3RbaV1gIHRvIGBsbGMtJmd0O2dpZFtpXWAuIFRodXMsIHRoZSBieXRlcyBmcm9tIDQwIHRvIDcyIGFyZSBjb3JyZWN0bHkgd3JpdHRlbi4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgbGVha2luZy4gVGhhdCYjMzk7cyBnb29kLgoKTm93LCBmb2N1c2luZyBvbiB0aGUgYnVnIGluIGBzbWNfd3JfdHhfcHV0X3Nsb3RgLiBUaGUgb3JpZ2luYWwgZml4IGNoYW5nZXMgYSBgbWVtc2V0YCBvbiBhIHBvaW50ZXIgdG8gY2xlYXIgdGhlIG1lbW9yeS4gSWYgYGxpbmstJmd0O2xnci0mZ3Q7d3JfdHhfYnVmX3YyYCBpcyBpbmRlZWQgYSBwb2ludGVyIGFuZCBpcyB6ZXJvZWQsIHRoZW4gdGhlIG5leHQgY2FsbCB0byBgc21jX3dyX3R4X2dldF92Ml9zbG90YCByZXR1cm5zIGBOVUxMYC4gVGhlIHN1YnNlcXVlbnQgYGFkZGxsY2AgYXNzaWdubWVudCBhbmQgYG1lbXNldGAgcmVzdWx0IGluIGEgY2xhc3NpYyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHdoaWNoIHRyaWdnZXJzIGVpdGhlciBLQVNBTiBvciBhIHN0YW5kYXJkIGtlcm5lbCBvb3BzLiBUaGlzIGlzbiYjMzk7dCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkOyBpdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBkZXJlZmVyZW5jZSBvZiBhIG51bGwgcG9pbnRlciwgbWVhbmluZyBubyBpbmZvcm1hdGlvbiBsZWFrYWdlLiBJIHN1c3BlY3QgdGhpcyB3aWxsIGJlIGVhc3kgdG8gcmVwcm9kdWNlLCBnb29kIQoKU2ltaWxhcmx5LCB6ZXJvaW5nIGBsaW5rLSZndDt3cl90eF92Ml9wZW5kYCAoYW5vdGhlciBwb2ludGVyKSBsZWFkcyB0byB0aGUgc2FtZSBwcm9ibGVtOiBhIE5VTEwgZGVyZWZlcmVuY2Ugd2l0aGluIGBzbWNfd3JfdHhfZ2V0X3YyX3Nsb3RgIHdoZW4gYWNjZXNzaW5nIGBsaW5rLSZndDt3cl90eF92Ml9wZW5kLSZndDtpZHhgLiBUaGUgcHJvYmxlbSBpcyB0aGF0IHRoZSBgbWVtc2V0YCBpcyB6ZXJvaW5nIHRoZSAqcG9pbnRlciogcmF0aGVyIHRoYW4gdGhlIG1lbW9yeSBpdCBwb2ludHMgdG8uCgpGaW5hbGx5LCByZWdhcmRpbmcgdGhlIGNoYW5nZSBmcm9tIGB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dGAgdG8gdGhlIG9wZW4tY29kZWQgbG9vcCwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gVGhlIGNvZGUgaXMgbWVhbnQgdG8gYXZvaWQgdGhlICYjMzQ7dGh1bmRlcmluZyBoZXJkJiMzNDsgZWZmZWN0IGJ5IHVzaW5nIGBwcmVwYXJlX3RvX3dhaXRfZXhjbHVzaXZlYCwgd2hpY2ggaXMgc3RhbmRhcmQuIEJ1dC4uLiBjb3VsZCB0aGVyZSBiZSBhIHJhY2UgY29uZGl0aW9uPyBDb3VsZCBgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXRgIHJldHVybiwgdGhlIGNvZGUgKnRoZW4qIGNoZWNrcyB0aGUgY29uZGl0aW9uICphZ2FpbiogYW5kIGdldCBhIGRpZmZlcmVudCByZXN1bHQ/IExldCBtZSBjaGVjayB0aGUgbWFjcm8gZXhwYW5zaW9uIG9mIGB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dGAuLi4gTm8sIGl0IHNob3VsZCBiZSBmaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3dhaXQuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3dhaXQuaD00NzY9ZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi0tXG5pbmNsdWRlL2xpbnV4L3dhaXQuaC01MzQtICovXG5pbmNsdWRlL2xpbnV4L3dhaXQuaDo1MzU6I2RlZmluZSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCh3cV9oZWFkLCBjb25kaXRpb24sIHRpbWVvdXQpXHRcdFxcXG5pbmNsdWRlL2xpbnV4L3dhaXQuaC01MzYtKHtcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2OTI4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsJiMzOTtzIFdhaXQgTWVjaGFuaXNtKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQmIzM5O3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIHRoZSBoZWFydCBvZiB0aGUgd2FpdCBtZWNoYW5pc20gaW4gdGhlIExpbnV4IGtlcm5lbC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXRgIGFjdHVhbGx5IHdvcmtzLiBJIGtub3cgdGhlIGdlbmVyYWwgaWRlYSAtIGl0IHB1dHMgYSBwcm9jZXNzIHRvIHNsZWVwLCBwb3RlbnRpYWxseSBhbGxvd2luZyBpdCB0byBiZSB3b2tlbiBieSBhbiBpbnRlcnJ1cHQgb3Igc2lnbmFsLCB3aXRoIGEgc3BlY2lmaWVkIHRpbWVvdXQuIEJ1dCBJIHdhbnQgdG8gbmFpbCBkb3duIHRoZSBzcGVjaWZpY3MsIHBhcnRpY3VsYXJseSB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIHdhaXQgcXVldWUsIHRoZSB0YXNrIHN0YXRlLCBzaWduYWwgaGFuZGxpbmcsIGFuZCB0aGUgdGltZW91dCBpbXBsZW1lbnRhdGlvbiBpdHNlbGYuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0aGUgYXRvbWljIG9wZXJhdGlvbnMsIGFuZCBob3cgdGhleSBlbnN1cmUgY29ycmVjdG5lc3MgaW4gYSBtdWx0aS10aHJlYWRlZCwgaW50ZXJydXB0LWRyaXZlbiBlbnZpcm9ubWVudC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBpbnRlcmVzdGluZyBkZXRhaWxzIHJlZ2FyZGluZyBzcGlubG9ja3MgYW5kIGFueSByZWxhdGVkIHJhY2UgY29uZGl0aW9ucyB0aGF0IGFyZSBoYW5kbGVkIGFuZCB3aWxsIGJlIGxvb2tpbmcgZm9yIGhvdyB0aGUgaW1wbGVtZW50YXRpb24gaGFuZGxlcyBkaWZmZXJlbnQgc2NlbmFyaW9zLCBwYXJ0aWN1bGFybHkgc2lnbmFsIGRlbGl2ZXJ5IGR1cmluZyB0aGUgd2FpdGluZyBwZXJpb2QuIFVsdGltYXRlbHksIHRoZSBnb2FsIGlzIHRvIGZ1bGx5IGdyYXNwIHRoZSBpbnRyaWNhY2llcyB0aGF0IGRpY3RhdGUgdGhlIHByZWNpc2UgYmVoYXZpb3IgdW5kZXIgYSByYW5nZSBvZiBjb25kaXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvd2FpdC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MzU6XHQjZGVmaW5lIHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHdxX2hlYWQsIGNvbmRpdGlvbiwgdGltZW91dClcdFx0XFxcbiA1MzY6XHQoe1x0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiA1Mzc6XHRcdGxvbmcgX19yZXQgPSB0aW1lb3V0O1x0XHRcdFx0XHRcdFx0XFxcbiA1Mzg6XHRcdG1pZ2h0X3NsZWVwKCk7XHRcdFx0XHRcdFx0XHRcdFxcXG4gNTM5Olx0XHRpZiAoIV9fX3dhaXRfY29uZF90aW1lb3V0KGNvbmRpdGlvbikpXHRcdFx0XHRcdFxcXG4gNTQwOlx0XHRcdF9fcmV0ID0gX193YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCh3cV9oZWFkLFx0XHRcXFxuIDU0MTpcdFx0XHRcdFx0XHRcdGNvbmRpdGlvbiwgdGltZW91dCk7XHRcdFxcXG4gNTQyOlx0XHRfX3JldDtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIDU0MzpcdH0pXG4gNTQ0Olx0XG4gNTQ1Olx0I2RlZmluZSBfX3dhaXRfZXZlbnRfaHJ0aW1lb3V0KHdxX2hlYWQsIGNvbmRpdGlvbiwgdGltZW91dCwgc3RhdGUpXHRcdFxcXG4gNTQ2Olx0KHtcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4gNTQ3Olx0XHRpbnQgX19yZXQgPSAwO1x0XHRcdFx0XHRcdFx0XHRcXFxuIDU0ODpcdFx0c3RydWN0IGhydGltZXJfc2xlZXBlciBfX3Q7XHRcdFx0XHRcdFx0XFxcbiA1NDk6XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4gNTUwOlx0XHRocnRpbWVyX3NldHVwX3NsZWVwZXJfb25fc3RhY2soXHUwMDI2X190LCBDTE9DS19NT05PVE9OSUMsXHRcdFx0XFxcbiA1NTE6XHRcdFx0XHRcdCAgICAgICBIUlRJTUVSX01PREVfUkVMKTtcdFx0XHRcXFxuIDU1MjpcdFx0aWYgKCh0aW1lb3V0KSAhPSBLVElNRV9NQVgpIHtcdFx0XHRcdFx0XHRcXFxuIDU1MzpcdFx0XHRocnRpbWVyX3NldF9leHBpcmVzX3JhbmdlX25zKFx1MDAyNl9fdC50aW1lciwgdGltZW91dCxcdFx0XFxcbiA1NTQ6XHRcdFx0XHRcdFx0Y3VycmVudC1cdTAwM2V0aW1lcl9zbGFja19ucyk7XHRcdFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3NTgyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgYF9fd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXRgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYF9fd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXRgLiBUaGF0IGZ1bmN0aW9uIGlzIGEgY3J1Y2lhbCBwaWVjZSBvZiB0aGUga2VybmVsJiMzOTtzIHN5bmNocm9uaXphdGlvbiBtYWNoaW5lcnksIGFuZCB1bmRlcnN0YW5kaW5nIGl0cyBiZWhhdmlvciBpcyBvZnRlbiBrZXkgdG8gZGVidWdnaW5nIGNvbmN1cnJlbmN5IGlzc3VlcywgcGFydGljdWxhcmx5IHRob3NlIGludm9sdmluZyB3YWl0aW5nIG9uIGV2ZW50cy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQmIzM5O3MgaW1wbGVtZW50ZWQuIFNwZWNpZmljYWxseSwgaG93IGl0IGhhbmRsZXMgdGhlIHRpbWVvdXQgYXNwZWN0IGFuZCBob3cgaW50ZXJydXB0cyBwbGF5IGludG8gdGhhdC4gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBncmFzcCBpdHMgaW50ZXJuYWwgd29ya2luZ3MsIHRoZSBtZWNoYW5pc21zIGl0IHV0aWxpemVzIHRvIHBvdGVudGlhbGx5IGJsb2NrIGEgdGFzaywgYW5kIGhvdyB0aG9zZSBtZWNoYW5pc21zIGRpZmZlciBmcm9tIG90aGVyIHJlbGF0ZWQgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuIEkgbmVlZCB0byByZW1lbWJlciB0aGUgc3VidGxldGllcyBvZiBpbnRlcnJ1cHRpYmxlIHZzLiB1bmludGVycnVwdGlibGUgc3RhdGVzIGFuZCBob3cgdGhlc2UgcmVsYXRlIHRvIHNpZ25hbCBoYW5kbGluZyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhhdCBmdW5jdGlvbi4gTGV0JiMzOTtzIHNlZSBob3cgaXQmIzM5O3Mgc2V0IHVwIHRvIGhhbmRsZSBhIHRpbWVvdXQuIFRoaXMgbGlrZWx5IGludm9sdmVzIHNvbWUgY2xldmVyIHVzZSBvZiB0aW1lcnMgYW5kIHNjaGVkdWxlciBpbnRlZ3JhdGlvbi4gTXkgZ29hbCBoZXJlIGlzIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGJ1aWxkaW5nIGJsb2NrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUgX193YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvd2FpdC5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvd2FpdC5oPTQ3Nj1kbyB7XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmluY2x1ZGUvbGludXgvd2FpdC5oLTUwOS1cbmluY2x1ZGUvbGludXgvd2FpdC5oOjUxMDojZGVmaW5lIF9fd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQod3FfaGVhZCwgY29uZGl0aW9uLCB0aW1lb3V0KVx0XHRcXFxuaW5jbHVkZS9saW51eC93YWl0LmgtNTExLVx0X19fd2FpdF9ldmVudCh3cV9oZWFkLCBfX193YWl0X2NvbmRfdGltZW91dChjb25kaXRpb24pLFx0XHRcdFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3OTc4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGBfX3dhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0YCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGlzIGBfX3dhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0YCBmdW5jdGlvbi4gUmlnaHQsIHNvIHRoaXMgc3VnZ2VzdHMgdGhhdCBhIHByb2Nlc3MgaXMgZ29pbmcgdG8gd2FpdCwgYnV0IGl0JiMzOTtzICppbnRlcnJ1cHRpYmxlKiAoY3J1Y2lhbCwgb2YgY291cnNlIOKAkyB3ZSB3b3VsZG7igJl0IHdhbnQgYSBkZWFkbG9jayBzaXR1YXRpb24pLiBBbmQgdGhlcmUmIzM5O3MgYSB0aW1lb3V0IGludm9sdmVkIOKAkyBzb21lIGtpbmQgb2YgdXBwZXIgYm91bmQgb24gdGhlIHdhaXRpbmcgcGVyaW9kLiBUaGlzIGltcGxpZXMgYSBuZWVkIGZvciBib3VuZGVkIHdhaXQgdGltZXMsIHBvdGVudGlhbGx5IGltcG9ydGFudCBmb3IgcmVhbC10aW1lIGFwcGxpY2F0aW9ucyBvciBwcmV2ZW50aW5nIHJ1bmF3YXkgaGFuZ3MuCgpJJiMzOTttIGltbWVkaWF0ZWx5IGNvbnNpZGVyaW5nIHRoZSBpbXBsaWNhdGlvbnM6IHNpZ25hbHMgY291bGQgd2FrZSB0aGUgcHJvY2VzcyBlYXJseSwgYSBzcGVjaWZpZWQgdGltZW91dCBkdXJhdGlvbiBpcyBpbXBvc2VkLCBhbmQsIGZ1bmRhbWVudGFsbHksIGl0JiMzOTtzIGFib3V0IHB1dHRpbmcgdGhlIHByb2Nlc3MgdG8gc2xlZXAgKnNhZmVseSogd2hpbGUgd2Ugd2FpdCBmb3IgYSBzcGVjaWZpYyBjb25kaXRpb24uIFdoYXQgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmUgaXMgaXQgb3BlcmF0aW5nIG9uPyBBIHdhaXQgcXVldWU/IE11dGV4PyBDb25kaXRpb24gdmFyaWFibGU/IEtub3dpbmcgdGhpcyBpcyB2aXRhbCB0byB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zIGF0IHBsYXkuIEkgYmV0IHRoaXMgaXMgYXQgdGhlIGhlYXJ0IG9mIGhvdyBpbnRlcnJ1cHRzIGFyZSBoYW5kbGVkIGluIGNvbmp1bmN0aW9uIHdpdGggb3RoZXIgYXN5bmNocm9ub3VzIGV2ZW50cy4KCkxldCYjMzk7cyBzZWUgd2hhdCB0aGUgaW1wbGVtZW50YXRpb24gcmV2ZWFscyBhYm91dCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgaW50ZXJydXB0IGhhbmRsZXIsIHRoZSB0aW1lb3V0IG1lY2hhbmlzbSBhbmQgdGhlIHdha2luZyBvZiB0aGUgcHJvY2Vzcy4gSXMgaXQgdXNpbmcgYSB0aW1lciB0byB0cmlnZ2VyIHRoZSB0aW1lb3V0PyBJZiBzbywgaXMgdGhhdCB0aW1lciBtYW5hZ2VkIHByb3Blcmx5IGFuZCB3aGF0IGFib3V0IHRoZSBjb25zZXF1ZW5jZXMgb2YgZWFybHkgb3IgbWlzc2VkIGV2ZW50cz8gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgcmFjZXMgYmV0d2VlbiB0aGUgaW50ZXJydXB0IGFuZCB0aGUgdGltZW91dC4gVGhlIGdvYWwsIHVsdGltYXRlbHksIGlzIHRvIGVuc3VyZSB0aGF0IGEgcmVzb3VyY2Ugb3IgYSBjb25kaXRpb24gaXNu4oCZdCBoZWxkIGluZGVmaW5pdGVseSwgYW5kIHRoYXQgdGhpcyBjb2RlIGRvZXNuJiMzOTt0IGludHJvZHVjZSB2dWxuZXJhYmlsaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC93YWl0LmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUxMDpcdCNkZWZpbmUgX193YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCh3cV9oZWFkLCBjb25kaXRpb24sIHRpbWVvdXQpXHRcdFxcXG4gNTExOlx0XHRfX193YWl0X2V2ZW50KHdxX2hlYWQsIF9fX3dhaXRfY29uZF90aW1lb3V0KGNvbmRpdGlvbiksXHRcdFx0XFxcbiA1MTI6XHRcdFx0ICAgICAgVEFTS19JTlRFUlJVUFRJQkxFLCAwLCB0aW1lb3V0LFx0XHRcdFx0XFxcbiA1MTM6XHRcdFx0ICAgICAgX19yZXQgPSBzY2hlZHVsZV90aW1lb3V0KF9fcmV0KSlcbiA1MTQ6XHRcbiA1MTU6XHQvKipcbiA1MTY6XHQgKiB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCAtIHNsZWVwIHVudGlsIGEgY29uZGl0aW9uIGdldHMgdHJ1ZSBvciBhIHRpbWVvdXQgZWxhcHNlc1xuIDUxNzpcdCAqIEB3cV9oZWFkOiB0aGUgd2FpdHF1ZXVlIHRvIHdhaXQgb25cbiA1MTg6XHQgKiBAY29uZGl0aW9uOiBhIEMgZXhwcmVzc2lvbiBmb3IgdGhlIGV2ZW50IHRvIHdhaXQgZm9yXG4gNTE5Olx0ICogQHRpbWVvdXQ6IHRpbWVvdXQsIGluIGppZmZpZXNcbiA1MjA6XHQgKlxuIDUyMTpcdCAqIFRoZSBwcm9jZXNzIGlzIHB1dCB0byBzbGVlcCAoVEFTS19JTlRFUlJVUFRJQkxFKSB1bnRpbCB0aGVcbiA1MjI6XHQgKiBAY29uZGl0aW9uIGV2YWx1YXRlcyB0byB0cnVlIG9yIGEgc2lnbmFsIGlzIHJlY2VpdmVkLlxuIDUyMzpcdCAqIFRoZSBAY29uZGl0aW9uIGlzIGNoZWNrZWQgZWFjaCB0aW1lIHRoZSB3YWl0cXVldWUgQHdxX2hlYWQgaXMgd29rZW4gdXAuXG4gNTI0Olx0ICpcbiA1MjU6XHQgKiB3YWtlX3VwKCkgaGFzIHRvIGJlIGNhbGxlZCBhZnRlciBjaGFuZ2luZyBhbnkgdmFyaWFibGUgdGhhdCBjb3VsZFxuIDUyNjpcdCAqIGNoYW5nZSB0aGUgcmVzdWx0IG9mIHRoZSB3YWl0IGNvbmRpdGlvbi5cbiA1Mjc6XHQgKlxuIDUyODpcdCAqIFJldHVybnM6XG4gNTI5Olx0ICogMCBpZiB0aGUgQGNvbmRpdGlvbiBldmFsdWF0ZWQgdG8gJWZhbHNlIGFmdGVyIHRoZSBAdGltZW91dCBlbGFwc2VkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODc2MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNoZWNraW5nIGBfX193YWl0X2V2ZW50YCoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBUaGUgbWVudGFsIG1vZGVsIGltbWVkaWF0ZWx5IGtpY2tzIGluOiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGJlaGF2aW9yIGFuZCB1c2FnZSBvZiBgX19fd2FpdF9ldmVudGAuIFRoaXMgbGlrZWx5IG1lYW5zIEkmIzM5O20gbG9va2luZyBhdCBhIGtlcm5lbC1sZXZlbCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlLCBwcm9iYWJseSBhIGxvd2VyLWxldmVsIGNvbnN0cnVjdCB0aGFuIGEgbW9yZSB1c2VyLWZhY2luZyBtZWNoYW5pc20gbGlrZSBhIHNlbWFwaG9yZSBvciBtdXRleC4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBxdWVzdGlvbnM6IHdoYXQmIzM5O3MgdGhlIGNvbnRleHQ/IFdoYXQmIzM5O3MgdGhlIGFyY2hpdGVjdHVyZSBpdCYjMzk7cyBydW5uaW5nIG9uPyBJcyBpdCBhIGJ1c3ktd2FpdCB2YXJpYW50LCBvciBhIG1vcmUgZWZmaWNpZW50IHNsZWVwaW5nIHByaW1pdGl2ZT8gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggaXQmIzM5O3MgdHJpZ2dlcmVkIG9yIHVuYmxvY2tlZC4gUGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIGFyZSB0b3Agb2YgbWluZDogd2hhdCYjMzk7cyB0aGUgb3ZlcmhlYWQgaW52b2x2ZWQgaW4gaXRzIHVzZSwgYW5kIGFyZSB0aGVyZSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggbG9jayBjb250ZW50aW9uIG9yIHByaW9yaXR5IGludmVyc2lvbj8gSSYjMzk7bSBwcm9iYWJseSBnb2luZyB0byBiZSBsb29raW5nIGZvciBhc3NvY2lhdGVkIGNvZGUgcGF0aHMgYXMgd2VsbC4gSSYjMzk7bGwgYmUgaW50ZXJlc3RlZCBpbiB3aGVyZSBpdCYjMzk7cyBjYWxsZWQsIGhvdyBpdCYjMzk7cyB1c2VkLCBhbmQgd2hhdCBkYXRhIHN0cnVjdHVyZXMgaXQmIzM5O3MgcHJvdGVjdGluZy4gSXMgdGhlcmUgYSBjbGVhciBkb2N1bWVudGF0aW9uLCBvciB3aWxsIEkgbmVlZCB0byB3b3JrIHRocm91Z2ggaXQgc3RlcCBieSBzdGVwPyBBbHJpZ2h0LCBsZXQmIzM5O3Mgc3RhcnQgZGlnZ2luZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVmaW5lIF9fX3dhaXRfZXZlbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3dhaXQuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3dhaXQuaD0yODg9ZXh0ZXJuIHZvaWQgaW5pdF93YWl0X2VudHJ5KHN0cnVjdCB3YWl0X3F1ZXVlX2VudHJ5ICp3cV9lbnRyeSwgaW50IGZsYWdzKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3dhaXQuaC0zMDEtXG5pbmNsdWRlL2xpbnV4L3dhaXQuaDozMDI6I2RlZmluZSBfX193YWl0X2V2ZW50KHdxX2hlYWQsIGNvbmRpdGlvbiwgc3RhdGUsIGV4Y2x1c2l2ZSwgcmV0LCBjbWQpXHRcdFxcXG5pbmNsdWRlL2xpbnV4L3dhaXQuaC0zMDMtKHtcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MTcwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgU2lnbmlmaWNhbmNlIG9mIGBfX193YWl0X2V2ZW50YCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSByaWdodCBpbi4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoYXQgZnVuY3Rpb246IGBfX193YWl0X2V2ZW50YC4gVGhhdCBuYW1lIGlzIHNjcmVhbWluZyAmIzM0O2tlcm5lbC1sZXZlbCBjb25jdXJyZW5jeSBwcmltaXRpdmUmIzM0OyB0byBtZS4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZywgJiMzNDtPa2F5LCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIG1lY2hhbmlzbSBmb3IgYSB0YXNrIHRvIHJlbGlucXVpc2ggY29udHJvbCwgdG8gcHV0IGl0c2VsZiB0byBzbGVlcCwgKndhaXRpbmcqIGZvciBhIHNwZWNpZmljIGNvbmRpdGlvbiB0byBiZWNvbWUgdHJ1ZS4mIzM0OyBUaGlzIGlzIGZ1bmRhbWVudGFsIHN0dWZmLiBJdCYjMzk7cyB0aGUgY29yZSBvZiBob3cgd2Ugc3luY2hyb25pemUgYWN0aXZpdGllcywgaG93IHdlIGhhbmRsZSByZXNvdXJjZSBjb250ZW50aW9uLCBhbmQgaG93IHdlIGFjaGlldmUgcmVzcG9uc2l2ZW5lc3MgaW4gYSBtdWx0aS10aHJlYWRlZCBvciBtdWx0aS1wcm9jZXNzIGVudmlyb25tZW50LgoKTm93LCBteSBtaW5kIHN0YXJ0cyB0byByYWNlLiBJJiMzOTttIGdvaW5nIHRocm91Z2ggdGhlIGRpZmZlcmVudCBjb250ZXh0cyB3aGVyZSBJJiMzOTt2ZSBzZWVuIHdhaXQgZXZlbnRzLiBJcyB0aGlzIGEgc3BpbmxvY2s/IEEgbXV0ZXg/IENvbmRpdGlvbiB2YXJpYWJsZXM/IElzIHRoaXMgcGFydCBvZiBhIHJlYWRlci13cml0ZXIgbG9jayBpbXBsZW1lbnRhdGlvbj8gQW0gSSBsb29raW5nIGF0IHNvbWV0aGluZyByZWxhdGVkIHRvIGludGVycnVwdHMgb3IgaGFyZHdhcmUgc2lnbmFscz8gV2hhdCBhcmUgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHVzZWQgaGVyZT8gQXJlIHdlIGRlYWxpbmcgd2l0aCBwcmlvcml0eSBpbmhlcml0YW5jZSBvciBzb21lIGZvcm0gb2YgZmFpcm5lc3MgaW4gdGhlIHdhaXRpbmcgbWVjaGFuaXNtPyBJJiMzOTttIGFscmVhZHkgYXNraW5nIG15c2VsZiB0aGUgY3JpdGljYWwgcXVlc3Rpb25zIHJlZ2FyZGluZyB0aGUgaW1wbGVtZW50YXRpb24gc3BlY2lmaWNzLgoKVGhlIGRvdWJsZSB1bmRlcnNjb3JlIGluIHRoZSBuYW1lIGlzIGFsc28gYSBjbHVlLiBMaWtlbHksIHRoaXMgaXMgYW4gaW50ZXJuYWwgZnVuY3Rpb24sIG5vdCBpbnRlbmRlZCBmb3IgZGlyZWN0IHVzZSBieSB1c2VyLWxldmVsIHByb2dyYW1zLiBUaGlzIG1lYW5zIGl0JiMzOTtzIHRoZSBidWlsZGluZyBibG9jayB1cG9uIHdoaWNoIGhpZ2hlci1sZXZlbCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBhcmUgY29uc3RydWN0ZWQuIFRoaXMgaXMgdGhlIGJlZHJvY2ssIHRoZSBhdG9tLCB0aGUgZnVuZGFtZW50YWwgYnJpY2sgYW5kIG1vcnRhciB3ZSBtdXN0IGxvb2sgYXQgdG8gdW5kZXJzdGFuZCBhbGwgdGhlIG90aGVyIHN5bmNocm9uaXphdGlvbiBtZXRob2RzLiBTbywgSeKAmW0gbWVudGFsbHkgcGVlbGluZyBiYWNrIGxheWVycywgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gaXMgd292ZW4gaW50byB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUgb2YgdGhlIGtlcm5lbCwgdGhlIHN5bmNocm9uaXphdGlvbiBtb2RlbC4gVmVyeSBpbXBvcnRhbnQgYW5kIEkgbmVlZCB0byBzZWUgbW9yZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvd2FpdC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzAyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMDI6XHQjZGVmaW5lIF9fX3dhaXRfZXZlbnQod3FfaGVhZCwgY29uZGl0aW9uLCBzdGF0ZSwgZXhjbHVzaXZlLCByZXQsIGNtZClcdFx0XFxcbiAzMDM6XHQoe1x0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiAzMDQ6XHRcdF9fbGFiZWxfXyBfX291dDtcdFx0XHRcdFx0XHRcdFxcXG4gMzA1Olx0XHRzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeSBfX3dxX2VudHJ5O1x0XHRcdFx0XHRcXFxuIDMwNjpcdFx0bG9uZyBfX3JldCA9IHJldDtcdC8qIGV4cGxpY2l0IHNoYWRvdyAqL1x0XHRcdFx0XFxcbiAzMDc6XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4gMzA4Olx0XHRpbml0X3dhaXRfZW50cnkoXHUwMDI2X193cV9lbnRyeSwgZXhjbHVzaXZlID8gV1FfRkxBR19FWENMVVNJVkUgOiAwKTtcdFxcXG4gMzA5Olx0XHRmb3IgKDs7KSB7XHRcdFx0XHRcdFx0XHRcdFxcXG4gMzEwOlx0XHRcdGxvbmcgX19pbnQgPSBwcmVwYXJlX3RvX3dhaXRfZXZlbnQoXHUwMDI2d3FfaGVhZCwgXHUwMDI2X193cV9lbnRyeSwgc3RhdGUpO1xcXG4gMzExOlx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIDMxMjpcdFx0XHRpZiAoY29uZGl0aW9uKVx0XHRcdFx0XHRcdFx0XFxcbiAzMTM6XHRcdFx0XHRicmVhaztcdFx0XHRcdFx0XHRcdFxcXG4gMzE0Olx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIDMxNTpcdFx0XHRpZiAoX19fd2FpdF9pc19pbnRlcnJ1cHRpYmxlKHN0YXRlKSBcdTAwMjZcdTAwMjYgX19pbnQpIHtcdFx0XHRcXFxuIDMxNjpcdFx0XHRcdF9fcmV0ID0gX19pbnQ7XHRcdFx0XHRcdFx0XFxcbiAzMTc6XHRcdFx0XHRnb3RvIF9fb3V0O1x0XHRcdFx0XHRcdFxcXG4gMzE4Olx0XHRcdH1cdFx0XHRcdFx0XHRcdFx0XFxcbiAzMTk6XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4gMzIwOlx0XHRcdGNtZDtcdFx0XHRcdFx0XHRcdFx0XFxcbiAzMjE6XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4gMzIyOlx0XHRcdGlmIChjb25kaXRpb24pXHRcdFx0XHRcdFx0XHRcXFxuIDMyMzpcdFx0XHRcdGJyZWFrO1x0XHRcdFx0XHRcdFx0XFxcbiAzMjQ6XHRcdH1cdFx0XHRcdFx0XHRcdFx0XHRcXFxuIDMyNTpcdFx0ZmluaXNoX3dhaXQoXHUwMDI2d3FfaGVhZCwgXHUwMDI2X193cV9lbnRyeSk7XHRcdFx0XHRcdFxcXG4gMzI2Olx0X19vdXQ6XHRfX3JldDtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIDMyNzpcdH0pXG4gMzI4Olx0XG4gMzI5Olx0I2RlZmluZSBfX3dhaXRfZXZlbnQod3FfaGVhZCwgY29uZGl0aW9uKVx0XHRcdFx0XHRcXFxuIDMzMDpcdFx0KHZvaWQpX19fd2FpdF9ldmVudCh3cV9oZWFkLCBjb25kaXRpb24sIFRBU0tfVU5JTlRFUlJVUFRJQkxFLCAwLCAwLFx0XFxcbiAzMzE6XHRcdFx0XHQgICAgc2NoZWR1bGUoKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAwNjUKCQkJCQkJCW91dHB1dDogMzQ1CgkJCQkJCQl0aG91Z2h0czogMTY3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2ggYW5kIEtNU0FOIFJlcXVpcmVtZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXM6IHdhaXQsIHRoYXQgYF9fX3dhaXRfZXZlbnRgIGxvb3AgbG9va3MgbGlrZSBpdCBldmFsdWF0ZXMgdGhlIGBjb25kaXRpb25gIHR3aWNlIGluIGVhY2ggaXRlcmF0aW9uLiBCdXQgdGhlbiBJIHJlbWVtYmVyIGhvdyB0aGUgYHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0YCBmdW5jdGlvbiB3b3Jrcy4gSXQgY2hlY2tzIHRoZSBjb25kaXRpb24gKm9uY2UqIGJlZm9yZSBlbnRlcmluZyB0aGUgbG9vcC4gVGhlbiwgd2l0aGluIHRoZSBsb29wLCB0aGUgY29uZGl0aW9uICptaWdodCogYmUgY2hlY2tlZCBhZ2Fpbi4gU28gdGhlIG1heGltdW0gaXMgdHdvIGV2YWx1YXRpb25zIHBlciBpdGVyYXRpb24uIENydWNpYWxseSwgdGhlIGNvZGUgaW4gcXVlc3Rpb24sIHNwZWNpZmljYWxseSB0aGUgcGFydCBpbnZvbHZpbmcgYHNtY193cl90eF9nZXRfZnJlZV9zbG90X2luZGV4YCwgaGFzIHNpZGUgZWZmZWN0cyB3aXRoIGB0ZXN0X2FuZF9zZXRfYml0YC4gQnV0IGlmIHRoZSBjb25kaXRpb24gaXMgdHJ1ZSAqaW1tZWRpYXRlbHkqIGFmdGVyIHRoYXQgY2FsbCwgdGhlIGxvb3AgYnJlYWtzISBTbyB0aGVyZSYjMzk7cyBhY3R1YWxseSBvbmx5ICpvbmUqIGNvbmRpdGlvbiBjaGVjayBpZiB0aGUgJiMzOTtnb29kJiMzOTsgcGF0aCBpcyB0YWtlbi4KCk5vdywgdGhlIHBhdGNoIGlzIGNoYW5naW5nIHRoaXMgdG8gYW4gb3Blbi1jb2RlZCBsb29wLCBhbmQgdGhpcyBzaGlmdCBtYWtlcyB0aGUgY29uZGl0aW9uIGNoZWNrIGhhcHBlbiB0aGUgc2FtZSBudW1iZXIgb2YgdGltZXMgYW5kIGZpeGVzIHRoZSBwb3RlbnRpYWwgdGh1bmRlcmluZyBoZXJkIHByb2JsZW0uIFRoZSBgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXRgIGZ1bmN0aW9uIHVzZXMgYSBub24tZXhjbHVzaXZlIHdhaXQuIE1hbnkgdGhyZWFkcyBjb3VsZCBiZSB3b2tlbiB1cCBzaW11bHRhbmVvdXNseSBpZiB0aGUgY29uZGl0aW9uIGJlY29tZXMgdHJ1ZS4gVGhlIG9wZW4tY29kZWQgbG9vcCBub3cgdXRpbGl6ZXMgYW4gZXhjbHVzaXZlIHdhaXQgd2l0aCBgcHJlcGFyZV90b193YWl0X2V4Y2x1c2l2ZWAuIFRoaXMgZW5zdXJlcyBvbmx5ICpvbmUqIHdhaXRpbmcgdGhyZWFkIGlzIHdva2VuLiBUaGlzIGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIGFuZCBhdm9pZHMgdGhlIHRodW5kZXJpbmcgaGVyZC4KCkJ1dCB0aGVyZSYjMzk7cyBhbHNvIHRoZSBidWcgZml4IGludm9sdmluZyB0aGUgYnVmZmVyLiBUaGUgcGF0Y2ggaXMgbm93IHplcm9pbmcgdGhlIGJ1ZmZlciwgYnV0IHRoZSAqb2xkKiBjb2RlIHplcm9lZCB0aGUgKnBvaW50ZXIqISBJZiB0aGUgcG9pbnRlciBpcyB6ZXJvZWQsIHRoZSBuZXh0IHRpbWUgaXQmIzM5O3MgZGVyZWZlcmVuY2VkLCBpdCYjMzk7cyBhIE5VTEwgcG9pbnRlci4gV2hpY2ggaXMgZ29pbmcgdG8gY3Jhc2ggdGhlIGtlcm5lbCB3aXRoIGEgc3RhbmRhcmQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBOb3QgYW4gdW5pbml0aWFsaXplZCByZWFkLCB3aGljaCBpcyB3aGF0IEtNU0FOIGlzIGZvci4KClNvLCB0aGlua2luZyBhYm91dCB0aGUgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB0aGUgYGxpbmstJmd0O2xnci0mZ3Q7d3JfdHhfYnVmX3YyYCBwb3RlbnRpYWxseSBjb3VsZCBiZSB1bmluaXRpYWxpemVkLiBCdXQsIGFmdGVyIGxvb2tpbmcgdGhyb3VnaCB0aGUgcmVsZXZhbnQgcGFydHMgb2YgYHNtY193cl90eF9wdXRfc2xvdGAsIGBzbWNfd3JfdHhfZ2V0X3YyX3Nsb3RgIGFuZCBgc21jX2xsY19zZW5kX2FkZF9saW5rYCwgaXQgYmVjb21lcyBjbGVhciB0aGF0IGl0IGlzICpub3QqIHJlYWQuIFRoZSBjb2RlIGV4cGxpY2l0bHkgemVybyYjMzk7cyB0aGUgcGFydHMgdGhhdCBnZXQgdXNlZCEgRXZlbiBpZiB0aGVyZSB3YXMgb2xkIGRhdGEsIGl0IHdvdWxkbiYjMzk7dCBiZSBzZW50IG92ZXIgdGhlIG5ldHdvcmsuIFRoZXJlZm9yZSwgdGhlcmUmIzM5O3Mgbm8gcG9zc2liaWxpdHkgb2YgYSBtZW1vcnkgbGVhayBvciB1bmluaXRpYWxpemVkIGRhdGEgYmVpbmcgc2VudCBvdXQuIFRoZSBhY3R1YWwgYnVnIHdhcyB0aGF0IHRoZSBQT0lOVEVSIHdhcyB6ZXJvZWQgYW5kIG5vdCB0aGUgYnVmZmVyISBJZiBgd3JfYnVmYCBpcyBOVUxMLCB0aGVuIHRoZSBgbWVtc2V0KE5VTEwsIDAsIDQ0KWAgaXMgYSBzdXJlZmlyZSBDUkFTSC4KCkluIHN1bW1hcnksIHRoZSBwYXRjaDoKCjEuICBSZXBsYWNlcyBgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXRgIHdpdGggYW4gZXhjbHVzaXZlIHdhaXQgbG9vcCwgYWRkcmVzc2luZyB0aGUgdGh1bmRlcmluZyBoZXJkIGlzc3VlLCBhIHBlcmZvcm1hbmNlIGFuZCBjb3JyZWN0bmVzcyBwcm9ibGVtLCBub3QgYSBtZW1vcnkgc2FmZXR5IG9uZS4KMi4gIEZpeGVzIGEgYnVnIHdoZXJlIHBvaW50ZXJzIHdlcmUgaW5jb3JyZWN0bHkgemVyb2VkIGluc3RlYWQgb2YgdGhlIGJ1ZmZlcnMsIHdoaWNoLCBpZiB0aGUgcG9pbnRlcnMgdGhlbXNlbHZlcyBhcmUgTlVMTCwgY2F1c2UgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuCgpUaGUgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGlzIGVhc2lseSBkZXRlY3RlZCBieSBzdGFuZGFyZCB0b29scyBsaWtlIEtBU0FOIGFuZCBLQVNBTi1saXRlLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIHNlbnQgb3ZlciB0aGUgbmV0d29yay4gU28sIG5vIEtNU0FOIGlzIG5lZWRlZC4gVGhpcyBpcyBhIDEwMCUgcmVsaWFibGUgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCBhIHN0YW5kYXJkIGtlcm5lbCBwYW5pYy4gVGltZSB0byBjYWxsIGl0LCBgTmVlZHNLTVNBTj1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyB0d28gaXNzdWVzOlxuMS4gSXQgcmVwbGFjZXMgYHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0YCB3aXRoIGFuIG9wZW4tY29kZWQgd2FpdCBsb29wIHVzaW5nIGBwcmVwYXJlX3RvX3dhaXRfZXhjbHVzaXZlYCB0byBmaXggYSB0aHVuZGVyaW5nIGhlcmQgcHJvYmxlbSB3aGVyZSBtdWx0aXBsZSB3YWl0aW5nIHRocmVhZHMgYXJlIHdva2VuIHVwIHNpbXVsdGFuZW91c2x5LiBUaGlzIGlzIGEgcGVyZm9ybWFuY2UvY29uY3VycmVuY3kgZml4LlxuMi4gSXQgZml4ZXMgYSBidWcgaW4gYHNtY193cl90eF9wdXRfc2xvdGAgd2hlcmUgYG1lbXNldGAgd2FzIGluY29ycmVjdGx5IGFwcGxpZWQgdG8gdGhlIHBvaW50ZXJzIGBcdTAwMjZsaW5rLVx1MDAzZXdyX3R4X3YyX3BlbmRgIGFuZCBgXHUwMDI2bGluay1cdTAwM2VsZ3ItXHUwMDNld3JfdHhfYnVmX3YyYCBpbnN0ZWFkIG9mIHRoZSBzdHJ1Y3R1cmVzIHRoZXkgcG9pbnQgdG8uXG5cbkJlY2F1c2UgdGhlIG9yaWdpbmFsIGNvZGUgemVyb2VkIHRoZSBwb2ludGVycyB0aGVtc2VsdmVzIChlZmZlY3RpdmVseSBzZXR0aW5nIHRoZW0gdG8gTlVMTCksIGFueSBzdWJzZXF1ZW50IHVzZSBvZiB0aGVzZSBwb2ludGVycyAoZS5nLiwgaW4gYHNtY193cl90eF9nZXRfdjJfc2xvdGAgb3IgYHNtY193cl90eF9wcm9jZXNzX2NxZWApIHdvdWxkIHJlc3VsdCBpbiBhIGRldGVybWluaXN0aWMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBBIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBjYXVzZXMgYSBzdGFuZGFyZCBrZXJuZWwgb29wcyBhbmQgaXMgdHJpdmlhbGx5IGNhdWdodCBieSBzdGFuZGFyZCB0ZXN0aW5nLCBLQVNBTiwgb3IgZXZlbiB3aXRob3V0IGFueSBzYW5pdGl6ZXJzLlxuXG5UaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2Ugb3Igb3ZlciB0aGUgbmV0d29yay4gVGhlIG5ldHdvcmsgdHJhbnNtaXNzaW9uIGZ1bmN0aW9ucyAoZS5nLiwgYHNtY193cl90eF92Ml9zZW5kYCkgb25seSBzZW5kIHRoZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGxlbmd0aCBvZiB0aGUgYnVmZmVyLCBhbmQgdGhlIGNhbGxlcnMgKGxpa2UgYHNtY19sbGNfc2VuZF9hZGRfbGlua2ApIGV4cGxpY2l0bHkgemVybyBhbmQgaW5pdGlhbGl6ZSB0aGUgZXhhY3QgbnVtYmVyIG9mIGJ5dGVzIHRoZXkgdHJhbnNtaXQuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHR3byBpc3N1ZXM6XG4xLiBJdCByZXBsYWNlcyBgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXRgIHdpdGggYW4gb3Blbi1jb2RlZCB3YWl0IGxvb3AgdXNpbmcgYHByZXBhcmVfdG9fd2FpdF9leGNsdXNpdmVgIHRvIGZpeCBhIHRodW5kZXJpbmcgaGVyZCBwcm9ibGVtIHdoZXJlIG11bHRpcGxlIHdhaXRpbmcgdGhyZWFkcyBhcmUgd29rZW4gdXAgc2ltdWx0YW5lb3VzbHkuIFRoaXMgaXMgYSBwZXJmb3JtYW5jZS9jb25jdXJyZW5jeSBmaXguXG4yLiBJdCBmaXhlcyBhIGJ1ZyBpbiBgc21jX3dyX3R4X3B1dF9zbG90YCB3aGVyZSBgbWVtc2V0YCB3YXMgaW5jb3JyZWN0bHkgYXBwbGllZCB0byB0aGUgcG9pbnRlcnMgYFx1MDAyNmxpbmstXHUwMDNld3JfdHhfdjJfcGVuZGAgYW5kIGBcdTAwMjZsaW5rLVx1MDAzZWxnci1cdTAwM2V3cl90eF9idWZfdjJgIGluc3RlYWQgb2YgdGhlIHN0cnVjdHVyZXMgdGhleSBwb2ludCB0by5cblxuQmVjYXVzZSB0aGUgb3JpZ2luYWwgY29kZSB6ZXJvZWQgdGhlIHBvaW50ZXJzIHRoZW1zZWx2ZXMgKGVmZmVjdGl2ZWx5IHNldHRpbmcgdGhlbSB0byBOVUxMKSwgYW55IHN1YnNlcXVlbnQgdXNlIG9mIHRoZXNlIHBvaW50ZXJzIChlLmcuLCBpbiBgc21jX3dyX3R4X2dldF92Ml9zbG90YCBvciBgc21jX3dyX3R4X3Byb2Nlc3NfY3FlYCkgd291bGQgcmVzdWx0IGluIGEgZGV0ZXJtaW5pc3RpYyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIEEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGNhdXNlcyBhIHN0YW5kYXJkIGtlcm5lbCBvb3BzIGFuZCBpcyB0cml2aWFsbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIHRlc3RpbmcsIEtBU0FOLCBvciBldmVuIHdpdGhvdXQgYW55IHNhbml0aXplcnMuXG5cblRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZSBvciBvdmVyIHRoZSBuZXR3b3JrLiBUaGUgbmV0d29yayB0cmFuc21pc3Npb24gZnVuY3Rpb25zIChlLmcuLCBgc21jX3dyX3R4X3YyX3NlbmRgKSBvbmx5IHNlbmQgdGhlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgbGVuZ3RoIG9mIHRoZSBidWZmZXIsIGFuZCB0aGUgY2FsbGVycyAobGlrZSBgc21jX2xsY19zZW5kX2FkZF9saW5rYCkgZXhwbGljaXRseSB6ZXJvIGFuZCBpbml0aWFsaXplIHRoZSBleGFjdCBudW1iZXIgb2YgYnl0ZXMgdGhleSB0cmFuc21pdC4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjIxOjQ4LjgxNTA3NDU2MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMTc0NDk1OTI1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTTUNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdFwiLFxuICAgIFwic21jX3dyX3R4X3B1dF9zbG90XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgdHdvIGlzc3VlczpcXG4xLiBJdCByZXBsYWNlcyBgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXRgIHdpdGggYW4gb3Blbi1jb2RlZCB3YWl0IGxvb3AgdXNpbmcgYHByZXBhcmVfdG9fd2FpdF9leGNsdXNpdmVgIHRvIGZpeCBhIHRodW5kZXJpbmcgaGVyZCBwcm9ibGVtIHdoZXJlIG11bHRpcGxlIHdhaXRpbmcgdGhyZWFkcyBhcmUgd29rZW4gdXAgc2ltdWx0YW5lb3VzbHkuIFRoaXMgaXMgYSBwZXJmb3JtYW5jZS9jb25jdXJyZW5jeSBmaXguXFxuMi4gSXQgZml4ZXMgYSBidWcgaW4gYHNtY193cl90eF9wdXRfc2xvdGAgd2hlcmUgYG1lbXNldGAgd2FzIGluY29ycmVjdGx5IGFwcGxpZWQgdG8gdGhlIHBvaW50ZXJzIGBcXHUwMDI2bGluay1cXHUwMDNld3JfdHhfdjJfcGVuZGAgYW5kIGBcXHUwMDI2bGluay1cXHUwMDNlbGdyLVxcdTAwM2V3cl90eF9idWZfdjJgIGluc3RlYWQgb2YgdGhlIHN0cnVjdHVyZXMgdGhleSBwb2ludCB0by5cXG5cXG5CZWNhdXNlIHRoZSBvcmlnaW5hbCBjb2RlIHplcm9lZCB0aGUgcG9pbnRlcnMgdGhlbXNlbHZlcyAoZWZmZWN0aXZlbHkgc2V0dGluZyB0aGVtIHRvIE5VTEwpLCBhbnkgc3Vic2VxdWVudCB1c2Ugb2YgdGhlc2UgcG9pbnRlcnMgKGUuZy4sIGluIGBzbWNfd3JfdHhfZ2V0X3YyX3Nsb3RgIG9yIGBzbWNfd3JfdHhfcHJvY2Vzc19jcWVgKSB3b3VsZCByZXN1bHQgaW4gYSBkZXRlcm1pbmlzdGljIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4gQSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgY2F1c2VzIGEgc3RhbmRhcmQga2VybmVsIG9vcHMgYW5kIGlzIHRyaXZpYWxseSBjYXVnaHQgYnkgc3RhbmRhcmQgdGVzdGluZywgS0FTQU4sIG9yIGV2ZW4gd2l0aG91dCBhbnkgc2FuaXRpemVycy5cXG5cXG5UaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2Ugb3Igb3ZlciB0aGUgbmV0d29yay4gVGhlIG5ldHdvcmsgdHJhbnNtaXNzaW9uIGZ1bmN0aW9ucyAoZS5nLiwgYHNtY193cl90eF92Ml9zZW5kYCkgb25seSBzZW5kIHRoZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGxlbmd0aCBvZiB0aGUgYnVmZmVyLCBhbmQgdGhlIGNhbGxlcnMgKGxpa2UgYHNtY19sbGNfc2VuZF9hZGRfbGlua2ApIGV4cGxpY2l0bHkgemVybyBhbmQgaW5pdGlhbGl6ZSB0aGUgZXhhY3QgbnVtYmVyIG9mIGJ5dGVzIHRoZXkgdHJhbnNtaXQuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseSdzIHdyaXRlIHJlcXVlc3QgKFdSKSB0cmFuc21pc3Npb24gbG9naWMsIHNwZWNpZmljYWxseSB0aGUgYHNtY193cl90eF9nZXRfZnJlZV9zbG90YCBhbmQgYHNtY193cl90eF9wdXRfc2xvdGAgZnVuY3Rpb25zLiBJdCBjaGFuZ2VzIHRoZSB3YWl0IGxvb3AgZm9yIGdldHRpbmcgYSBmcmVlIHNsb3QgdG8gdXNlIGBwcmVwYXJlX3RvX3dhaXRfZXhjbHVzaXZlYCBhbmQgZml4ZXMgYSBgbWVtc2V0YCBidWcgaW4gYHNtY193cl90eF9wdXRfc2xvdGAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY29yZSB0byB0aGUgU01DIHByb3RvY29sJ3MgZGF0YSB0cmFuc21pc3Npb24gYW5kIGFyZSByZWFjaGFibGUgdmlhIHNvY2tldCBvcGVyYXRpb25zLiBGdXp6aW5nIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIG5ldyB3YWl0IGxvZ2ljIGFuZCBtZW1vcnkgb3BlcmF0aW9ucyBhcmUgY29ycmVjdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjE6NDguODE1MDc5ODcxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzUwMjQyNDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNTI4YTJkNWE1YWEyZTI3Y2E2ZGQ3MTM0M2FlZDE1MDEzYmUyYjYxNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxMDoyMTo0NyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY193ci5jIGIvbmV0L3NtYy9zbWNfd3IuY1xcbmluZGV4IDU5YzkyYjQ2OTQ1YzUuLjJjZGQ0MDYzYzEzZDYgMTAwNjQ0XFxuLS0tIGEvbmV0L3NtYy9zbWNfd3IuY1xcbisrKyBiL25ldC9zbWMvc21jX3dyLmNcXG5AQCAtMTk4LDExICsxOTgsMTMgQEAgaW50IHNtY193cl90eF9nZXRfZnJlZV9zbG90KHN0cnVjdCBzbWNfbGluayAqbGluayxcXG4gXFx0XFx0XFx0ICAgIHN0cnVjdCBzbWNfcmRtYV93ciAqKndyX3JkbWFfYnVmLFxcbiBcXHRcXHRcXHQgICAgc3RydWN0IHNtY193cl90eF9wZW5kX3ByaXYgKip3cl9wZW5kX3ByaXYpXFxuIHtcXG4rXFx0dW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gU01DX1dSX1RYX1dBSVRfRlJFRV9TTE9UX1RJTUU7XFxuIFxcdHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyID0gc21jX2dldF9sZ3IobGluayk7XFxuIFxcdHN0cnVjdCBzbWNfd3JfdHhfcGVuZCAqd3JfcGVuZDtcXG4gXFx0dTMyIGlkeCA9IGxpbmstXFx1MDAzZXdyX3R4X2NudDtcXG4gXFx0c3RydWN0IGliX3NlbmRfd3IgKndyX2liO1xcbiBcXHR1NjQgd3JfaWQ7XFxuK1xcdERFRklORV9XQUlUKHdhaXQpO1xcbiBcXHRpbnQgcmM7XFxuIFxcbiBcXHQqd3JfYnVmID0gTlVMTDtcXG5AQCAtMjEyLDE3ICsyMTQsMzEgQEAgaW50IHNtY193cl90eF9nZXRfZnJlZV9zbG90KHN0cnVjdCBzbWNfbGluayAqbGluayxcXG4gXFx0XFx0aWYgKHJjKVxcbiBcXHRcXHRcXHRyZXR1cm4gcmM7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdHJjID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoXFxuLVxcdFxcdFxcdGxpbmstXFx1MDAzZXdyX3R4X3dhaXQsXFxuLVxcdFxcdFxcdCFzbWNfbGlua19zZW5kYWJsZShsaW5rKSB8fFxcbi1cXHRcXHRcXHRsZ3ItXFx1MDAzZXRlcm1pbmF0aW5nIHx8XFxuLVxcdFxcdFxcdChzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdF9pbmRleChsaW5rLCBcXHUwMDI2aWR4KSAhPSAtRUJVU1kpLFxcbi1cXHRcXHRcXHRTTUNfV1JfVFhfV0FJVF9GUkVFX1NMT1RfVElNRSk7XFxuLVxcdFxcdGlmICghcmMpIHtcXG4tXFx0XFx0XFx0LyogdGltZW91dCAtIHRlcm1pbmF0ZSBsaW5rICovXFxuLVxcdFxcdFxcdHNtY3JfbGlua19kb3duX2NvbmRfc2NoZWQobGluayk7XFxuLVxcdFxcdFxcdHJldHVybiAtRVBJUEU7XFxuK1xcdFxcdHJjID0gMDtcXG4rXFx0XFx0Zm9yICg7Oykge1xcbitcXHRcXHRcXHRwcmVwYXJlX3RvX3dhaXRfZXhjbHVzaXZlKFxcdTAwMjZsaW5rLVxcdTAwM2V3cl90eF93YWl0LCBcXHUwMDI2d2FpdCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBUQVNLX0lOVEVSUlVQVElCTEUpO1xcbitcXHRcXHRcXHRpZiAoIXNtY19saW5rX3NlbmRhYmxlKGxpbmspIHx8IGxnci1cXHUwMDNldGVybWluYXRpbmcgfHxcXG4rXFx0XFx0XFx0ICAgIHNtY193cl90eF9nZXRfZnJlZV9zbG90X2luZGV4KGxpbmssIFxcdTAwMjZpZHgpICE9IC1FQlVTWSlcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdHRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpO1xcbitcXHRcXHRcXHQvKiByZS1jaGVjayAqL1xcbitcXHRcXHRcXHRpZiAoIXNtY19saW5rX3NlbmRhYmxlKGxpbmspIHx8IGxnci1cXHUwMDNldGVybWluYXRpbmcgfHxcXG4rXFx0XFx0XFx0ICAgIHNtY193cl90eF9nZXRfZnJlZV9zbG90X2luZGV4KGxpbmssIFxcdTAwMjZpZHgpICE9IC1FQlVTWSlcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdGlmICghdGltZW91dCkge1xcbitcXHRcXHRcXHRcXHQvKiB0aW1lb3V0IC0gdGVybWluYXRlIGxpbmsgKi9cXG4rXFx0XFx0XFx0XFx0c21jcl9saW5rX2Rvd25fY29uZF9zY2hlZChsaW5rKTtcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7XFxuK1xcdFxcdFxcdFxcdHJjID0gLUVSRVNUQVJUU1lTO1xcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuK1xcdFxcdGZpbmlzaF93YWl0KFxcdTAwMjZsaW5rLVxcdTAwM2V3cl90eF93YWl0LCBcXHUwMDI2d2FpdCk7XFxuK1xcdFxcdGlmIChyYylcXG4rXFx0XFx0XFx0cmV0dXJuIHJjO1xcbiBcXHRcXHRpZiAoaWR4ID09IGxpbmstXFx1MDAzZXdyX3R4X2NudClcXG4gXFx0XFx0XFx0cmV0dXJuIC1FUElQRTtcXG4gXFx0fVxcbkBAIC0yODgsMTAgKzMwNCwxMCBAQCBpbnQgc21jX3dyX3R4X3B1dF9zbG90KHN0cnVjdCBzbWNfbGluayAqbGluayxcXG4gXFx0fSBlbHNlIGlmIChsaW5rLVxcdTAwM2VsZ3ItXFx1MDAzZXNtY192ZXJzaW9uID09IFNNQ19WMiBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICBwZW5kLVxcdTAwM2VpZHggPT0gbGluay1cXHUwMDNld3JfdHhfY250KSB7XFxuIFxcdFxcdC8qIExhcmdlIHYyIGJ1ZmZlciAqL1xcbi1cXHRcXHRtZW1zZXQoXFx1MDAyNmxpbmstXFx1MDAzZXdyX3R4X3YyX3BlbmQsIDAsXFxuLVxcdFxcdCAgICAgICBzaXplb2YobGluay1cXHUwMDNld3JfdHhfdjJfcGVuZCkpO1xcbi1cXHRcXHRtZW1zZXQoXFx1MDAyNmxpbmstXFx1MDAzZWxnci1cXHUwMDNld3JfdHhfYnVmX3YyLCAwLFxcbi1cXHRcXHQgICAgICAgc2l6ZW9mKGxpbmstXFx1MDAzZWxnci1cXHUwMDNld3JfdHhfYnVmX3YyKSk7XFxuK1xcdFxcdG1lbXNldChsaW5rLVxcdTAwM2V3cl90eF92Ml9wZW5kLCAwLFxcbitcXHRcXHQgICAgICAgc2l6ZW9mKCpsaW5rLVxcdTAwM2V3cl90eF92Ml9wZW5kKSk7XFxuK1xcdFxcdG1lbXNldChsaW5rLVxcdTAwM2VsZ3ItXFx1MDAzZXdyX3R4X2J1Zl92MiwgMCxcXG4rXFx0XFx0ICAgICAgIHNpemVvZigqbGluay1cXHUwMDNlbGdyLVxcdTAwM2V3cl90eF9idWZfdjIpKTtcXG4gXFx0XFx0cmV0dXJuIDE7XFxuIFxcdH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjIxOjUwLjE2NjA4Mjk1MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE4MjY0OTY5MzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNNQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNtY193cl90eF9nZXRfZnJlZV9zbG90XCIsXG4gICAgXCJzbWNfd3JfdHhfcHV0X3Nsb3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgU01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHkncyB3cml0ZSByZXF1ZXN0IChXUikgdHJhbnNtaXNzaW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgdGhlIGBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdGAgYW5kIGBzbWNfd3JfdHhfcHV0X3Nsb3RgIGZ1bmN0aW9ucy4gSXQgY2hhbmdlcyB0aGUgd2FpdCBsb29wIGZvciBnZXR0aW5nIGEgZnJlZSBzbG90IHRvIHVzZSBgcHJlcGFyZV90b193YWl0X2V4Y2x1c2l2ZWAgYW5kIGZpeGVzIGEgYG1lbXNldGAgYnVnIGluIGBzbWNfd3JfdHhfcHV0X3Nsb3RgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNvcmUgdG8gdGhlIFNNQyBwcm90b2NvbCdzIGRhdGEgdHJhbnNtaXNzaW9uIGFuZCBhcmUgcmVhY2hhYmxlIHZpYSBzb2NrZXQgb3BlcmF0aW9ucy4gRnV6emluZyBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoZSBuZXcgd2FpdCBsb2dpYyBhbmQgbWVtb3J5IG9wZXJhdGlvbnMgYXJlIGNvcnJlY3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDUyOGEyZDVhNWFhMmUyN2NhNmRkNzEzNDNhZWQxNTAxM2JlMmI2MTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxMDoyMTo0NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX3dyLmMgYi9uZXQvc21jL3NtY193ci5jXG5pbmRleCA1OWM5MmI0Njk0NWM1Li4yY2RkNDA2M2MxM2Q2IDEwMDY0NFxuLS0tIGEvbmV0L3NtYy9zbWNfd3IuY1xuKysrIGIvbmV0L3NtYy9zbWNfd3IuY1xuQEAgLTE5OCwxMSArMTk4LDEzIEBAIGludCBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXG4gXHRcdFx0ICAgIHN0cnVjdCBzbWNfcmRtYV93ciAqKndyX3JkbWFfYnVmLFxuIFx0XHRcdCAgICBzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRfcHJpdiAqKndyX3BlbmRfcHJpdilcbiB7XG4rXHR1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBTTUNfV1JfVFhfV0FJVF9GUkVFX1NMT1RfVElNRTtcbiBcdHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyID0gc21jX2dldF9sZ3IobGluayk7XG4gXHRzdHJ1Y3Qgc21jX3dyX3R4X3BlbmQgKndyX3BlbmQ7XG4gXHR1MzIgaWR4ID0gbGluay1cdTAwM2V3cl90eF9jbnQ7XG4gXHRzdHJ1Y3QgaWJfc2VuZF93ciAqd3JfaWI7XG4gXHR1NjQgd3JfaWQ7XG4rXHRERUZJTkVfV0FJVCh3YWl0KTtcbiBcdGludCByYztcbiBcbiBcdCp3cl9idWYgPSBOVUxMO1xuQEAgLTIxMiwxNyArMjE0LDMxIEBAIGludCBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXG4gXHRcdGlmIChyYylcbiBcdFx0XHRyZXR1cm4gcmM7XG4gXHR9IGVsc2Uge1xuLVx0XHRyYyA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KFxuLVx0XHRcdGxpbmstXHUwMDNld3JfdHhfd2FpdCxcbi1cdFx0XHQhc21jX2xpbmtfc2VuZGFibGUobGluaykgfHxcbi1cdFx0XHRsZ3ItXHUwMDNldGVybWluYXRpbmcgfHxcbi1cdFx0XHQoc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RfaW5kZXgobGluaywgXHUwMDI2aWR4KSAhPSAtRUJVU1kpLFxuLVx0XHRcdFNNQ19XUl9UWF9XQUlUX0ZSRUVfU0xPVF9USU1FKTtcbi1cdFx0aWYgKCFyYykge1xuLVx0XHRcdC8qIHRpbWVvdXQgLSB0ZXJtaW5hdGUgbGluayAqL1xuLVx0XHRcdHNtY3JfbGlua19kb3duX2NvbmRfc2NoZWQobGluayk7XG4tXHRcdFx0cmV0dXJuIC1FUElQRTtcbitcdFx0cmMgPSAwO1xuK1x0XHRmb3IgKDs7KSB7XG4rXHRcdFx0cHJlcGFyZV90b193YWl0X2V4Y2x1c2l2ZShcdTAwMjZsaW5rLVx1MDAzZXdyX3R4X3dhaXQsIFx1MDAyNndhaXQsXG4rXHRcdFx0XHRcdFx0ICBUQVNLX0lOVEVSUlVQVElCTEUpO1xuK1x0XHRcdGlmICghc21jX2xpbmtfc2VuZGFibGUobGluaykgfHwgbGdyLVx1MDAzZXRlcm1pbmF0aW5nIHx8XG4rXHRcdFx0ICAgIHNtY193cl90eF9nZXRfZnJlZV9zbG90X2luZGV4KGxpbmssIFx1MDAyNmlkeCkgIT0gLUVCVVNZKVxuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdFx0dGltZW91dCA9IHNjaGVkdWxlX3RpbWVvdXQodGltZW91dCk7XG4rXHRcdFx0LyogcmUtY2hlY2sgKi9cbitcdFx0XHRpZiAoIXNtY19saW5rX3NlbmRhYmxlKGxpbmspIHx8IGxnci1cdTAwM2V0ZXJtaW5hdGluZyB8fFxuK1x0XHRcdCAgICBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdF9pbmRleChsaW5rLCBcdTAwMjZpZHgpICE9IC1FQlVTWSlcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdGlmICghdGltZW91dCkge1xuK1x0XHRcdFx0LyogdGltZW91dCAtIHRlcm1pbmF0ZSBsaW5rICovXG4rXHRcdFx0XHRzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKGxpbmspO1xuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdFx0fVxuK1x0XHRcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xuK1x0XHRcdFx0cmMgPSAtRVJFU1RBUlRTWVM7XG4rXHRcdFx0XHRicmVhaztcbitcdFx0XHR9XG4gXHRcdH1cbitcdFx0ZmluaXNoX3dhaXQoXHUwMDI2bGluay1cdTAwM2V3cl90eF93YWl0LCBcdTAwMjZ3YWl0KTtcbitcdFx0aWYgKHJjKVxuK1x0XHRcdHJldHVybiByYztcbiBcdFx0aWYgKGlkeCA9PSBsaW5rLVx1MDAzZXdyX3R4X2NudClcbiBcdFx0XHRyZXR1cm4gLUVQSVBFO1xuIFx0fVxuQEAgLTI4OCwxMCArMzA0LDEwIEBAIGludCBzbWNfd3JfdHhfcHV0X3Nsb3Qoc3RydWN0IHNtY19saW5rICpsaW5rLFxuIFx0fSBlbHNlIGlmIChsaW5rLVx1MDAzZWxnci1cdTAwM2VzbWNfdmVyc2lvbiA9PSBTTUNfVjIgXHUwMDI2XHUwMDI2XG4gXHRcdCAgIHBlbmQtXHUwMDNlaWR4ID09IGxpbmstXHUwMDNld3JfdHhfY250KSB7XG4gXHRcdC8qIExhcmdlIHYyIGJ1ZmZlciAqL1xuLVx0XHRtZW1zZXQoXHUwMDI2bGluay1cdTAwM2V3cl90eF92Ml9wZW5kLCAwLFxuLVx0XHQgICAgICAgc2l6ZW9mKGxpbmstXHUwMDNld3JfdHhfdjJfcGVuZCkpO1xuLVx0XHRtZW1zZXQoXHUwMDI2bGluay1cdTAwM2VsZ3ItXHUwMDNld3JfdHhfYnVmX3YyLCAwLFxuLVx0XHQgICAgICAgc2l6ZW9mKGxpbmstXHUwMDNlbGdyLVx1MDAzZXdyX3R4X2J1Zl92MikpO1xuK1x0XHRtZW1zZXQobGluay1cdTAwM2V3cl90eF92Ml9wZW5kLCAwLFxuK1x0XHQgICAgICAgc2l6ZW9mKCpsaW5rLVx1MDAzZXdyX3R4X3YyX3BlbmQpKTtcbitcdFx0bWVtc2V0KGxpbmstXHUwMDNlbGdyLVx1MDAzZXdyX3R4X2J1Zl92MiwgMCxcbitcdFx0ICAgICAgIHNpemVvZigqbGluay1cdTAwM2VsZ3ItXHUwMDNld3JfdHhfYnVmX3YyKSk7XG4gXHRcdHJldHVybiAxO1xuIFx0fVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjE6NTAuMTY2MDg0MTkxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg2NDYyOTc1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNNQyBXUiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvc21jL3NtY193ci5jYC4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBjaGFuZ2UgaW4gYHNtY193cl90eF9nZXRfZnJlZV9zbG90YC4gIFRoZXkndmUgcmVwbGFjZWQgYHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0YCB3aXRoIGEgbWFudWFsIHdhaXQgbG9vcCB1c2luZyBgcHJlcGFyZV90b193YWl0X2V4Y2x1c2l2ZWAuICBUaGF0J3MgYSBzaWduaWZpY2FudCBzaGlmdC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9ucyBhcmU6IFdoYXQncyB0aGUgcmF0aW9uYWxlPyBJcyB0aGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBhIGJ1ZyBmaXgsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyAgSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb250ZXh0IG9mICp3aHkqIHRoZXkgbWFkZSB0aGlzIGNob2ljZS4gV2UgaGF2ZSB0byBjb25zaWRlciB3aGV0aGVyIHRoaXMgY2hhbmdlIHByb3Blcmx5IGFkZHJlc3NlcyB0aGUgcmFjZSBjb25kaXRpb24gdGhhdCBgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXRgIHdhcyBzdXBwb3NlZGx5IGluc3VmZmljaWVudCB0byByZXNvbHZlLlxuXG5UaGUgb3RoZXIgaXRlbSBpbiB0aGUgZGlmZiBpcyBhIGBtZW1zZXRgIGJ1ZyBmaXggaW4gYHNtY193cl90eF9wdXRfc2xvdGAuIFRoZXkgaGFkIHRoZSB3cm9uZyBhcmd1bWVudHMsIHVzaW5nIHRoZSBhZGRyZXNzIG9mIHRoZSBzdHJ1Y3R1cmUgaW5zdGVhZCBvZiB0aGUgc3RydWN0dXJlIGl0c2VsZi4gVGhpcyBpcyBzdHJhaWdodGZvcndhcmQ7IGEgY2xhc3NpYyBtZW1vcnkgY29ycnVwdGlvbiBidWcgdGhhdCBuZWVkZWQgdG8gYmUgYWRkcmVzc2VkLiAgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvcnJlY3RlZCBgbWVtc2V0YCBvcGVyYXRpb24gaXMgc3VmZmljaWVudCB0byBjbGVhciBhbnkgcG90ZW50aWFsIHN0YWxlIGRhdGEuXG5cblRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGFjdCBhbmQgdGhlIGltcGxpY2F0aW9ucywgSSBuZWVkIHRvIGNoZWNrIHRoZSBzb3VyY2UgY29kZSBhbmQgZGlzY292ZXIgd2hpY2ggY29uZmlnIG9wdGlvbnMgYXJlIHJlbGV2YW50LiBJJ2xsIGhlYWQgb3ZlciB0byBgbmV0L3NtYy9zbWNfd3IuY2AgYW5kIGZpZ3VyZSBvdXQgd2hpY2ggY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQgd2l0aCB0aGlzIG1vZHVsZS4gVGhpcyBpcyBjcml0aWNhbCBmb3IgYXNzZXNzaW5nIHRoZSBzY29wZSBvZiB0aGlzIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg1NiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjIxOjU1LjAzMDcyMjYyMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDc3NjEzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL3NtY193ci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX3dyLmM9MTYyPXZvaWQgc21jX3dyX3R4X2NxX2hhbmRsZXIoc3RydWN0IGliX2NxICppYl9jcSwgdm9pZCAqY3FfY29udGV4dClcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmMtMTcwLVxcbm5ldC9zbWMvc21jX3dyLmM6MTcxOnN0YXRpYyBpbmxpbmUgaW50IHNtY193cl90eF9nZXRfZnJlZV9zbG90X2luZGV4KHN0cnVjdCBzbWNfbGluayAqbGluaywgdTMyICppZHgpXFxubmV0L3NtYy9zbWNfd3IuYy0xNzIte1xcbi0tXFxubmV0L3NtYy9zbWNfd3IuYy0xODQtLyoqXFxubmV0L3NtYy9zbWNfd3IuYzoxODU6ICogc21jX3dyX3R4X2dldF9mcmVlX3Nsb3QoKSAtIHJldHVybnMgYnVmZmVyIGZvciBtZXNzYWdlIGFzc2VtYmx5LFxcbm5ldC9zbWMvc21jX3dyLmMtMTg2LSAqXFx0XFx0XFx0YW5kIHNldHMgaW5mbyBmb3IgcGVuZGluZyB0cmFuc21pdCB0cmFja2luZ1xcbi0tXFxubmV0L3NtYy9zbWNfd3IuYy0xOTQtICovXFxubmV0L3NtYy9zbWNfd3IuYzoxOTU6aW50IHNtY193cl90eF9nZXRfZnJlZV9zbG90KHN0cnVjdCBzbWNfbGluayAqbGluayxcXG5uZXQvc21jL3NtY193ci5jLTE5Ni1cXHRcXHRcXHQgICAgc21jX3dyX3R4X2hhbmRsZXIgaGFuZGxlcixcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmMtMjEyLVxcdGlmIChpbl9zb2Z0aXJxKCkgfHwgbGdyLVxcdTAwM2V0ZXJtaW5hdGluZykge1xcbm5ldC9zbWMvc21jX3dyLmM6MjEzOlxcdFxcdHJjID0gc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RfaW5kZXgobGluaywgXFx1MDAyNmlkeCk7XFxubmV0L3NtYy9zbWNfd3IuYy0yMTQtXFx0XFx0aWYgKHJjKVxcbi0tXFxubmV0L3NtYy9zbWNfd3IuYy0yMjEtXFx0XFx0XFx0aWYgKCFzbWNfbGlua19zZW5kYWJsZShsaW5rKSB8fCBsZ3ItXFx1MDAzZXRlcm1pbmF0aW5nIHx8XFxubmV0L3NtYy9zbWNfd3IuYzoyMjI6XFx0XFx0XFx0ICAgIHNtY193cl90eF9nZXRfZnJlZV9zbG90X2luZGV4KGxpbmssIFxcdTAwMjZpZHgpICE9IC1FQlVTWSlcXG5uZXQvc21jL3NtY193ci5jLTIyMy1cXHRcXHRcXHRcXHRicmVhaztcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmMtMjI2LVxcdFxcdFxcdGlmICghc21jX2xpbmtfc2VuZGFibGUobGluaykgfHwgbGdyLVxcdTAwM2V0ZXJtaW5hdGluZyB8fFxcbm5ldC9zbWMvc21jX3dyLmM6MjI3OlxcdFxcdFxcdCAgICBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdF9pbmRleChsaW5rLCBcXHUwMDI2aWR4KSAhPSAtRUJVU1kpXFxubmV0L3NtYy9zbWNfd3IuYy0yMjgtXFx0XFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjIxOjU1LjA3NTUwMTc5N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDg5MTk2MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2NvbmZpZyBhbmQgU01DIC0gQSBRdWljayBDaGVjayoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgU01DIChTeXN0ZW0gTWFuYWdlbWVudCBDb250cm9sbGVyKSBpcyBjb25maWd1cmVkIGluIHRoaXMgcHJvamVjdC4gRmlyc3QsIG15IG1lbnRhbCBjaGVja2xpc3QgZ29lczogKktjb25maWcqLiBHb3R0YSBzdGFydCB0aGVyZS4gSXQncyB0aGUgY2VudHJhbCBjb25maWd1cmF0aW9uIGh1YiwgcmlnaHQ/IEFsbCB0aGUgZXNzZW50aWFsIHNldHRpbmdzLCBkZXBlbmRlbmNpZXMsIGFuZCBwb3RlbnRpYWwgZmVhdHVyZSBmbGFncyBmb3IgU01DIHNob3VsZCBiZSBkZWZpbmVkIGluIEtjb25maWcgZmlsZXMgc29tZXdoZXJlIGluIHRoZSByZWxldmFudCBzb3VyY2UgdHJlZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IHBhdGggb3IgdGhlIHJlbGV2YW50IGluY2x1ZGUgZGlyZWN0aXZlcyB0byBsb29rIHRocm91Z2guIEknbSB0aGlua2luZywgaXMgU01DIGVuYWJsZWQgYXMgYSBkZXZpY2UsIG9yIGEgZnVuY3Rpb24/IFdoYXQgYXJlIHRoZSBrZXkgb3B0aW9ucywgYW5kIGFyZSB0aGVyZSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgc3Vic3lzdGVtcyB0aGF0IEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBCZXN0IHRvIGdldCBhIHF1aWNrIG92ZXJ2aWV3IG9mIGhvdyB0aGUgYnVpbGQgc3lzdGVtIHdpbGwgdHJlYXQgaXQgYXQgYSBoaWdoIGxldmVsLiBUaGF0IHdpbGwgc2F2ZSBtZSBzb21lIHRpbWUgbGF0ZXIgd2hlbiBJIGRpdmUgaW50byB0aGUgY29kZS4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDAwOCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjE6NTguNTg0NDIzNDY3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MTkwODI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTTUNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC9zbWMvS2NvbmZpZzoyOmNvbmZpZyBTTUNcXG5uZXQvc21jL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiU01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcXFwiXFxuLS1cXG5uZXQvc21jL0tjb25maWctMTMtXFxubmV0L3NtYy9LY29uZmlnOjE0OmNvbmZpZyBTTUNfRElBR1xcbm5ldC9zbWMvS2NvbmZpZy0xNS1cXHR0cmlzdGF0ZSBcXFwiU01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQvc21jL0tjb25maWctMjItXFxubmV0L3NtYy9LY29uZmlnOjIzOmNvbmZpZyBTTUNfSFNfQ1RSTF9CUEZcXG5uZXQvc21jL0tjb25maWctMjQtXFx0Ym9vbCBcXFwiR2VuZXJpYyBlQlBGIGhvb2sgZm9yIFNNQyBoYW5kc2hha2UgZmxvd1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjE6NTguNjMxNjE4OTEyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ4MDEwOTc4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNNQyBDb25maWd1cmF0aW9uIGFuZCBNb2RpZmllZCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIHNldHRpbmcgaXMgU01DLiBNeSBpbW1lZGlhdGUgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIHR3byBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gdG91Y2hlZDogYHNtY193cl90eF9nZXRfZnJlZV9zbG90YCBhbmQgYHNtY193cl90eF9wdXRfc2xvdGAuIFRoZXkncmUgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIHdyaXRlIHRyYW5zYWN0aW9uIHByb2Nlc3MsIGJ1dCBJIG5lZWQgdG8gYXNjZXJ0YWluIHRoZWlyIHNjb3BlIGFuZCBpbXBhY3QuIFRoZSBmaXJzdCB0aGluZyBJJ20gZ29pbmcgdG8gZG8gaXMgZGV0ZXJtaW5lIGlmIHRoZXNlIGZ1bmN0aW9ucyBhcmUgcGFydCBvZiB0aGUgcHVibGljIEFQSSBvciBpZiB0aGV5J3JlIGludGVybmFsLiBBcmUgdGhleSBleHBvcnRlZCwgbWVhbmluZyBvdGhlciBtb2R1bGVzIG9yIGNvbXBvbmVudHMgY2FuIGNhbGwgdGhlbT8gQW5kIGV2ZW4gaWYgbm90IGV4cG9ydGVkLCBhcmUgdGhleSBjYWxsZWQgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtPyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIGdyYXBoIGlzIGVzc2VudGlhbCB0byBhc3Nlc3NpbmcgdGhlIHBvdGVudGlhbCByaXBwbGUgZWZmZWN0cyBvZiB0aGUgbW9kaWZpY2F0aW9ucy4gQW55IGNoYW5nZXMgaGVyZSBjb3VsZCBhZmZlY3QgYSB3aWRlIHJhbmdlIG9mIGZ1bmN0aW9uYWxpdHksIHNvIEkgbmVlZCB0byBrbm93IHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBmaXQgaW50byB0aGUgbGFyZ2VyIHBpY3R1cmUgYmVmb3JlIEkgY2FuIGV2YWx1YXRlIHRoZSBjb2RlIGNoYW5nZXMgcHJvcGVybHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MzQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDoyMjowMi4xMTE3MzA3NjlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzczNDAxNDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNtY193cl90eF9nZXRfZnJlZV9zbG90XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX2NkYy5jPTczPWludCBzbWNfY2RjX2dldF9mcmVlX3Nsb3Qoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uLFxcbi0tXFxubmV0L3NtYy9zbWNfY2RjLmMtODAtXFxubmV0L3NtYy9zbWNfY2RjLmM6ODE6XFx0cmMgPSBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdChsaW5rLCBzbWNfY2RjX3R4X2hhbmRsZXIsIHdyX2J1ZixcXG5uZXQvc21jL3NtY19jZGMuYy04Mi1cXHRcXHRcXHRcXHQgICAgIHdyX3JkbWFfYnVmLFxcbi0tXFxubmV0L3NtYy9zbWNfbGxjLmM9NDAwPXN0YXRpYyBpbnQgc21jX2xsY19hZGRfcGVuZGluZ19zZW5kKHN0cnVjdCBzbWNfbGluayAqbGluayxcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jLTQwNS1cXG5uZXQvc21jL3NtY19sbGMuYzo0MDY6XFx0cmMgPSBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdChsaW5rLCBzbWNfbGxjX3R4X2hhbmRsZXIsIHdyX2J1ZiwgTlVMTCxcXG5uZXQvc21jL3NtY19sbGMuYy00MDctXFx0XFx0XFx0XFx0ICAgICBwZW5kKTtcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmM9MTYyPXZvaWQgc21jX3dyX3R4X2NxX2hhbmRsZXIoc3RydWN0IGliX2NxICppYl9jcSwgdm9pZCAqY3FfY29udGV4dClcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmMtMTcwLVxcbm5ldC9zbWMvc21jX3dyLmM6MTcxOnN0YXRpYyBpbmxpbmUgaW50IHNtY193cl90eF9nZXRfZnJlZV9zbG90X2luZGV4KHN0cnVjdCBzbWNfbGluayAqbGluaywgdTMyICppZHgpXFxubmV0L3NtYy9zbWNfd3IuYy0xNzIte1xcbi0tXFxubmV0L3NtYy9zbWNfd3IuYy0xODQtLyoqXFxubmV0L3NtYy9zbWNfd3IuYzoxODU6ICogc21jX3dyX3R4X2dldF9mcmVlX3Nsb3QoKSAtIHJldHVybnMgYnVmZmVyIGZvciBtZXNzYWdlIGFzc2VtYmx5LFxcbm5ldC9zbWMvc21jX3dyLmMtMTg2LSAqXFx0XFx0XFx0YW5kIHNldHMgaW5mbyBmb3IgcGVuZGluZyB0cmFuc21pdCB0cmFja2luZ1xcbi0tXFxubmV0L3NtYy9zbWNfd3IuYy0xOTQtICovXFxubmV0L3NtYy9zbWNfd3IuYzoxOTU6aW50IHNtY193cl90eF9nZXRfZnJlZV9zbG90KHN0cnVjdCBzbWNfbGluayAqbGluayxcXG5uZXQvc21jL3NtY193ci5jLTE5Ni1cXHRcXHRcXHQgICAgc21jX3dyX3R4X2hhbmRsZXIgaGFuZGxlcixcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmMtMjEyLVxcdGlmIChpbl9zb2Z0aXJxKCkgfHwgbGdyLVxcdTAwM2V0ZXJtaW5hdGluZykge1xcbm5ldC9zbWMvc21jX3dyLmM6MjEzOlxcdFxcdHJjID0gc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RfaW5kZXgobGluaywgXFx1MDAyNmlkeCk7XFxubmV0L3NtYy9zbWNfd3IuYy0yMTQtXFx0XFx0aWYgKHJjKVxcbi0tXFxubmV0L3NtYy9zbWNfd3IuYy0yMjEtXFx0XFx0XFx0aWYgKCFzbWNfbGlua19zZW5kYWJsZShsaW5rKSB8fCBsZ3ItXFx1MDAzZXRlcm1pbmF0aW5nIHx8XFxubmV0L3NtYy9zbWNfd3IuYzoyMjI6XFx0XFx0XFx0ICAgIHNtY193cl90eF9nZXRfZnJlZV9zbG90X2luZGV4KGxpbmssIFxcdTAwMjZpZHgpICE9IC1FQlVTWSlcXG5uZXQvc21jL3NtY193ci5jLTIyMy1cXHRcXHRcXHRcXHRicmVhaztcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmMtMjI2LVxcdFxcdFxcdGlmICghc21jX2xpbmtfc2VuZGFibGUobGluaykgfHwgbGdyLVxcdTAwM2V0ZXJtaW5hdGluZyB8fFxcbm5ldC9zbWMvc21jX3dyLmM6MjI3OlxcdFxcdFxcdCAgICBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdF9pbmRleChsaW5rLCBcXHUwMDI2aWR4KSAhPSAtRUJVU1kpXFxubmV0L3NtYy9zbWNfd3IuYy0yMjgtXFx0XFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvc21jL3NtY193ci5oPTExMT12b2lkIHNtY193cl9hZGRfZGV2KHN0cnVjdCBzbWNfaWJfZGV2aWNlICpzbWNpYmRldik7XFxubmV0L3NtYy9zbWNfd3IuaC0xMTItXFxubmV0L3NtYy9zbWNfd3IuaDoxMTM6aW50IHNtY193cl90eF9nZXRfZnJlZV9zbG90KHN0cnVjdCBzbWNfbGluayAqbGluaywgc21jX3dyX3R4X2hhbmRsZXIgaGFuZGxlcixcXG5uZXQvc21jL3NtY193ci5oLTExNC1cXHRcXHRcXHQgICAgc3RydWN0IHNtY193cl9idWYgKip3cl9idWYsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjIyOjAyLjQ4NTEzNTY2MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4NjcxMTAzMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBTdHJhdGVneSBmb3IgU01DIFByb3RvY29sKipcblxuT2theSwgc28gSSd2ZSBpZGVudGlmaWVkIHR3byBrZXkgZnVuY3Rpb25zIHdpdGhpbiB0aGUgU01DIHByb3RvY29sIHRoYXQgc2VlbSBsaWtlIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmc6IGBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdGAgYW5kIGBzbWNfd3JfdHhfcHV0X3Nsb3RgLiBDb25zaWRlcmluZyBTTUMgaXMgYSBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5LCBpdCdzIGRlZmluaXRlbHkgd2l0aGluIHJlYWNoIGZvciB0aGlzIGtpbmQgb2YgdGVzdGluZywgYW5kIGJhc2VkIG9uIG15IGluaXRpYWwgYXNzZXNzbWVudCwgdGhlc2UgZnVuY3Rpb25zIGFyZSB3b3J0aCBhIGNsb3NlciBsb29rLiBUaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBzZXR0aW5nIGlzIGBTTUNgLlxuXG5Ob3csIGJlZm9yZSBJIGNvbW1pdCB0byBqdXN0IHRob3NlLCBsZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSByZWxhdGVkIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJyb2FkZW4gdGhlIHNjb3BlIGFuZCBpbmNyZWFzZSBteSBjaGFuY2VzIG9mIGZpbmRpbmcgc29tZXRoaW5nIGludGVyZXN0aW5nLiBFeGNlbGxlbnQsIEkgc2VlIHRoYXQgYHNtY19jZGNfZ2V0X2ZyZWVfc2xvdGAgKmFsc28qIHV0aWxpemVzIGBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdGAsIGFuZCBgc21jX2xsY19hZGRfcGVuZGluZ19zZW5kYCBpcyBhbHNvIGNhbGxpbmcgYHNtY193cl90eF9nZXRfZnJlZV9zbG90YC5cblxuQWxyaWdodCwgSSdsbCB1cGRhdGUgbXkgc3RyYXRlZ3kuIEknbSBnb2luZyB0byBzZXQgYEZvY3VzU3ltYm9sc2AgdG8gdGhlIHBhaXIgb2YgYHNtY193cl90eF9nZXRfZnJlZV9zbG90YCBhbmQgYHNtY193cl90eF9wdXRfc2xvdGAgYW5kIHdpbGwgbWFrZSBzdXJlIHRvIGVuYWJsZSB0aGUgYFNNQ2AgY29uZmlndXJhdGlvbiwgYW5kIHRoYXQgd2lsbCBiZSBteSBmdXp6aW5nIHRhcmdldC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTczNiwiT3V0cHV0VG9rZW5zIjoxODgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjI6MDguMzUyMjQ3ODIzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg4MDE5NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNNQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNtY193cl90eF9nZXRfZnJlZV9zbG90XCIsXG4gICAgXCJzbWNfd3JfdHhfcHV0X3Nsb3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgU01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHkncyB3cml0ZSByZXF1ZXN0IChXUikgdHJhbnNtaXNzaW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgdGhlIGBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdGAgYW5kIGBzbWNfd3JfdHhfcHV0X3Nsb3RgIGZ1bmN0aW9ucy4gSXQgY2hhbmdlcyB0aGUgd2FpdCBsb29wIGZvciBnZXR0aW5nIGEgZnJlZSBzbG90IHRvIHVzZSBgcHJlcGFyZV90b193YWl0X2V4Y2x1c2l2ZWAgYW5kIGZpeGVzIGEgYG1lbXNldGAgYnVnIGluIGBzbWNfd3JfdHhfcHV0X3Nsb3RgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNvcmUgdG8gdGhlIFNNQyBwcm90b2NvbCdzIGRhdGEgdHJhbnNtaXNzaW9uIGFuZCBhcmUgcmVhY2hhYmxlIHZpYSBzb2NrZXQgb3BlcmF0aW9ucy4gRnV6emluZyBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoZSBuZXcgd2FpdCBsb2dpYyBhbmQgbWVtb3J5IG9wZXJhdGlvbnMgYXJlIGNvcnJlY3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU01DXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic21jX3dyX3R4X2dldF9mcmVlX3Nsb3RcIixcbiAgICBcInNtY193cl90eF9wdXRfc2xvdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseSdzIHdyaXRlIHJlcXVlc3QgKFdSKSB0cmFuc21pc3Npb24gbG9naWMsIHNwZWNpZmljYWxseSB0aGUgYHNtY193cl90eF9nZXRfZnJlZV9zbG90YCBhbmQgYHNtY193cl90eF9wdXRfc2xvdGAgZnVuY3Rpb25zLiBJdCBjaGFuZ2VzIHRoZSB3YWl0IGxvb3AgZm9yIGdldHRpbmcgYSBmcmVlIHNsb3QgdG8gdXNlIGBwcmVwYXJlX3RvX3dhaXRfZXhjbHVzaXZlYCBhbmQgZml4ZXMgYSBgbWVtc2V0YCBidWcgaW4gYHNtY193cl90eF9wdXRfc2xvdGAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY29yZSB0byB0aGUgU01DIHByb3RvY29sJ3MgZGF0YSB0cmFuc21pc3Npb24gYW5kIGFyZSByZWFjaGFibGUgdmlhIHNvY2tldCBvcGVyYXRpb25zLiBGdXp6aW5nIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIG5ldyB3YWl0IGxvZ2ljIGFuZCBtZW1vcnkgb3BlcmF0aW9ucyBhcmUgY29ycmVjdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjI6MDguNDMxMDU1OTkyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODIxMjg5Njk2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDoyMjowOC40MzE0NjE5MjJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTgyMTI4NTYwNDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgdHdvIGlzc3VlczpcXG4xLiBJdCByZXBsYWNlcyBgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXRgIHdpdGggYW4gb3Blbi1jb2RlZCB3YWl0IGxvb3AgdXNpbmcgYHByZXBhcmVfdG9fd2FpdF9leGNsdXNpdmVgIHRvIGZpeCBhIHRodW5kZXJpbmcgaGVyZCBwcm9ibGVtIHdoZXJlIG11bHRpcGxlIHdhaXRpbmcgdGhyZWFkcyBhcmUgd29rZW4gdXAgc2ltdWx0YW5lb3VzbHkuIFRoaXMgaXMgYSBwZXJmb3JtYW5jZS9jb25jdXJyZW5jeSBmaXguXFxuMi4gSXQgZml4ZXMgYSBidWcgaW4gYHNtY193cl90eF9wdXRfc2xvdGAgd2hlcmUgYG1lbXNldGAgd2FzIGluY29ycmVjdGx5IGFwcGxpZWQgdG8gdGhlIHBvaW50ZXJzIGBcXHUwMDI2bGluay1cXHUwMDNld3JfdHhfdjJfcGVuZGAgYW5kIGBcXHUwMDI2bGluay1cXHUwMDNlbGdyLVxcdTAwM2V3cl90eF9idWZfdjJgIGluc3RlYWQgb2YgdGhlIHN0cnVjdHVyZXMgdGhleSBwb2ludCB0by5cXG5cXG5CZWNhdXNlIHRoZSBvcmlnaW5hbCBjb2RlIHplcm9lZCB0aGUgcG9pbnRlcnMgdGhlbXNlbHZlcyAoZWZmZWN0aXZlbHkgc2V0dGluZyB0aGVtIHRvIE5VTEwpLCBhbnkgc3Vic2VxdWVudCB1c2Ugb2YgdGhlc2UgcG9pbnRlcnMgKGUuZy4sIGluIGBzbWNfd3JfdHhfZ2V0X3YyX3Nsb3RgIG9yIGBzbWNfd3JfdHhfcHJvY2Vzc19jcWVgKSB3b3VsZCByZXN1bHQgaW4gYSBkZXRlcm1pbmlzdGljIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4gQSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgY2F1c2VzIGEgc3RhbmRhcmQga2VybmVsIG9vcHMgYW5kIGlzIHRyaXZpYWxseSBjYXVnaHQgYnkgc3RhbmRhcmQgdGVzdGluZywgS0FTQU4sIG9yIGV2ZW4gd2l0aG91dCBhbnkgc2FuaXRpemVycy5cXG5cXG5UaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2Ugb3Igb3ZlciB0aGUgbmV0d29yay4gVGhlIG5ldHdvcmsgdHJhbnNtaXNzaW9uIGZ1bmN0aW9ucyAoZS5nLiwgYHNtY193cl90eF92Ml9zZW5kYCkgb25seSBzZW5kIHRoZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGxlbmd0aCBvZiB0aGUgYnVmZmVyLCBhbmQgdGhlIGNhbGxlcnMgKGxpa2UgYHNtY19sbGNfc2VuZF9hZGRfbGlua2ApIGV4cGxpY2l0bHkgemVybyBhbmQgaW5pdGlhbGl6ZSB0aGUgZXhhY3QgbnVtYmVyIG9mIGJ5dGVzIHRoZXkgdHJhbnNtaXQuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDUyOGEyZDVhNWFhMmUyN2NhNmRkNzEzNDNhZWQxNTAxM2JlMmI2MTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxMDoyMTo0NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX3dyLmMgYi9uZXQvc21jL3NtY193ci5jXG5pbmRleCA1OWM5MmI0Njk0NWM1Li4yY2RkNDA2M2MxM2Q2IDEwMDY0NFxuLS0tIGEvbmV0L3NtYy9zbWNfd3IuY1xuKysrIGIvbmV0L3NtYy9zbWNfd3IuY1xuQEAgLTE5OCwxMSArMTk4LDEzIEBAIGludCBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXG4gXHRcdFx0ICAgIHN0cnVjdCBzbWNfcmRtYV93ciAqKndyX3JkbWFfYnVmLFxuIFx0XHRcdCAgICBzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRfcHJpdiAqKndyX3BlbmRfcHJpdilcbiB7XG4rXHR1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBTTUNfV1JfVFhfV0FJVF9GUkVFX1NMT1RfVElNRTtcbiBcdHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyID0gc21jX2dldF9sZ3IobGluayk7XG4gXHRzdHJ1Y3Qgc21jX3dyX3R4X3BlbmQgKndyX3BlbmQ7XG4gXHR1MzIgaWR4ID0gbGluay1cdTAwM2V3cl90eF9jbnQ7XG4gXHRzdHJ1Y3QgaWJfc2VuZF93ciAqd3JfaWI7XG4gXHR1NjQgd3JfaWQ7XG4rXHRERUZJTkVfV0FJVCh3YWl0KTtcbiBcdGludCByYztcbiBcbiBcdCp3cl9idWYgPSBOVUxMO1xuQEAgLTIxMiwxNyArMjE0LDMxIEBAIGludCBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXG4gXHRcdGlmIChyYylcbiBcdFx0XHRyZXR1cm4gcmM7XG4gXHR9IGVsc2Uge1xuLVx0XHRyYyA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KFxuLVx0XHRcdGxpbmstXHUwMDNld3JfdHhfd2FpdCxcbi1cdFx0XHQhc21jX2xpbmtfc2VuZGFibGUobGluaykgfHxcbi1cdFx0XHRsZ3ItXHUwMDNldGVybWluYXRpbmcgfHxcbi1cdFx0XHQoc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RfaW5kZXgobGluaywgXHUwMDI2aWR4KSAhPSAtRUJVU1kpLFxuLVx0XHRcdFNNQ19XUl9UWF9XQUlUX0ZSRUVfU0xPVF9USU1FKTtcbi1cdFx0aWYgKCFyYykge1xuLVx0XHRcdC8qIHRpbWVvdXQgLSB0ZXJtaW5hdGUgbGluayAqL1xuLVx0XHRcdHNtY3JfbGlua19kb3duX2NvbmRfc2NoZWQobGluayk7XG4tXHRcdFx0cmV0dXJuIC1FUElQRTtcbitcdFx0cmMgPSAwO1xuK1x0XHRmb3IgKDs7KSB7XG4rXHRcdFx0cHJlcGFyZV90b193YWl0X2V4Y2x1c2l2ZShcdTAwMjZsaW5rLVx1MDAzZXdyX3R4X3dhaXQsIFx1MDAyNndhaXQsXG4rXHRcdFx0XHRcdFx0ICBUQVNLX0lOVEVSUlVQVElCTEUpO1xuK1x0XHRcdGlmICghc21jX2xpbmtfc2VuZGFibGUobGluaykgfHwgbGdyLVx1MDAzZXRlcm1pbmF0aW5nIHx8XG4rXHRcdFx0ICAgIHNtY193cl90eF9nZXRfZnJlZV9zbG90X2luZGV4KGxpbmssIFx1MDAyNmlkeCkgIT0gLUVCVVNZKVxuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdFx0dGltZW91dCA9IHNjaGVkdWxlX3RpbWVvdXQodGltZW91dCk7XG4rXHRcdFx0LyogcmUtY2hlY2sgKi9cbitcdFx0XHRpZiAoIXNtY19saW5rX3NlbmRhYmxlKGxpbmspIHx8IGxnci1cdTAwM2V0ZXJtaW5hdGluZyB8fFxuK1x0XHRcdCAgICBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdF9pbmRleChsaW5rLCBcdTAwMjZpZHgpICE9IC1FQlVTWSlcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdGlmICghdGltZW91dCkge1xuK1x0XHRcdFx0LyogdGltZW91dCAtIHRlcm1pbmF0ZSBsaW5rICovXG4rXHRcdFx0XHRzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKGxpbmspO1xuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdFx0fVxuK1x0XHRcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xuK1x0XHRcdFx0cmMgPSAtRVJFU1RBUlRTWVM7XG4rXHRcdFx0XHRicmVhaztcbitcdFx0XHR9XG4gXHRcdH1cbitcdFx0ZmluaXNoX3dhaXQoXHUwMDI2bGluay1cdTAwM2V3cl90eF93YWl0LCBcdTAwMjZ3YWl0KTtcbitcdFx0aWYgKHJjKVxuK1x0XHRcdHJldHVybiByYztcbiBcdFx0aWYgKGlkeCA9PSBsaW5rLVx1MDAzZXdyX3R4X2NudClcbiBcdFx0XHRyZXR1cm4gLUVQSVBFO1xuIFx0fVxuQEAgLTI4OCwxMCArMzA0LDEwIEBAIGludCBzbWNfd3JfdHhfcHV0X3Nsb3Qoc3RydWN0IHNtY19saW5rICpsaW5rLFxuIFx0fSBlbHNlIGlmIChsaW5rLVx1MDAzZWxnci1cdTAwM2VzbWNfdmVyc2lvbiA9PSBTTUNfVjIgXHUwMDI2XHUwMDI2XG4gXHRcdCAgIHBlbmQtXHUwMDNlaWR4ID09IGxpbmstXHUwMDNld3JfdHhfY250KSB7XG4gXHRcdC8qIExhcmdlIHYyIGJ1ZmZlciAqL1xuLVx0XHRtZW1zZXQoXHUwMDI2bGluay1cdTAwM2V3cl90eF92Ml9wZW5kLCAwLFxuLVx0XHQgICAgICAgc2l6ZW9mKGxpbmstXHUwMDNld3JfdHhfdjJfcGVuZCkpO1xuLVx0XHRtZW1zZXQoXHUwMDI2bGluay1cdTAwM2VsZ3ItXHUwMDNld3JfdHhfYnVmX3YyLCAwLFxuLVx0XHQgICAgICAgc2l6ZW9mKGxpbmstXHUwMDNlbGdyLVx1MDAzZXdyX3R4X2J1Zl92MikpO1xuK1x0XHRtZW1zZXQobGluay1cdTAwM2V3cl90eF92Ml9wZW5kLCAwLFxuK1x0XHQgICAgICAgc2l6ZW9mKCpsaW5rLVx1MDAzZXdyX3R4X3YyX3BlbmQpKTtcbitcdFx0bWVtc2V0KGxpbmstXHUwMDNlbGdyLVx1MDAzZXdyX3R4X2J1Zl92MiwgMCxcbitcdFx0ICAgICAgIHNpemVvZigqbGluay1cdTAwM2VsZ3ItXHUwMDNld3JfdHhfYnVmX3YyKSk7XG4gXHRcdHJldHVybiAxO1xuIFx0fVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjI6MDguNDMxNDYyNjYyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3NTU3NzgzMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhpcyBTTUMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdGAgaW4gYG5ldC9zbWMvc21jX3dyLmNgLiBUaGUgZmlyc3QgdGhpbmcgSSBzZWUgaXMgdGhleSdyZSBkaXRjaGluZyBgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXRgIGZvciBhIGN1c3RvbSB3YWl0IGxvb3AgdXNpbmcgYHByZXBhcmVfdG9fd2FpdF9leGNsdXNpdmVgLCBgc2NoZWR1bGVfdGltZW91dGAsIGFuZCBgZmluaXNoX3dhaXRgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIEkgd29uZGVyIHdoYXQgdGhlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBhcmUuIElzIHRoZXJlIGEgc3BlY2lmaWMgcmVhc29uIHRoZXkncmUgYXZvaWRpbmcgdGhlIHN0YW5kYXJkIGtlcm5lbCBtZWNoYW5pc21zIGhlcmU/XG5cblRoZW4gSSBoaXQgYSBidWcgZml4IGluIGBzbWNfd3JfdHhfcHV0X3Nsb3RgLCBhbmQgdGhpcyBjYXRjaGVzIG15IGV5ZSBpbW1lZGlhdGVseS4gVGhleSdyZSBjaGFuZ2luZyB0aGUgYG1lbXNldGAgY2FsbC4gVGhleSdyZSByZXBsYWNpbmcgYG1lbXNldChcdTAwMjZsaW5rLVx1MDAzZXdyX3R4X3YyX3BlbmQsIDAsIHNpemVvZihsaW5rLVx1MDAzZXdyX3R4X3YyX3BlbmQpKWAgd2l0aCBzb21ldGhpbmcgZWxzZS4gV2FpdCwgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQuLi4gYWhhISBJdCdzIGBtZW1zZXQobGluay1cdTAwM2V3cl90eF92Ml9wZW5kLCAwLCBzaXplb2YoKmxpbmstXHUwMDNld3JfdHhfdjJfcGVuZCkpYC4gVGhhdCdzIGEgY2xhc3NpYyBwb2ludGVyIGRlcmVmZXJlbmNpbmcgaXNzdWUuIFRoZSBvbGQgY29kZSB3YXMgbGlrZWx5IHplcm9pbmcgdGhlICpwb2ludGVyKiBpdHNlbGYsIHJhdGhlciB0aGFuIHRoZSBtZW1vcnkgaXQgcG9pbnRlZCB0by4gTGV0IG1lIHNlZS4uLiBJZiBgbGluay1cdTAwM2V3cl90eF92Ml9wZW5kYCBpcyBhIHBvaW50ZXIsIHdoaWNoIEkgc3VzcGVjdCBpdCBpcywgdGhlIHByZXZpb3VzIGNvZGUgd2FzIG9ubHkgemVyb2luZyB0aGUgYWRkcmVzcyBzdG9yZWQgaW4gdGhlIHBvaW50ZXIgaXRzZWxmLCB3aGljaCBpcyBwcm9iYWJseSA4IGJ5dGVzLiBUaGlzIG1lYW5zIHRoZSBhbGxvY2F0ZWQgYnVmZmVyIHdhc24ndCBhY3R1YWxseSBnZXR0aW5nIGluaXRpYWxpemVkLCByaWdodD9cblxuT2theSwgc28gaWYgdGhlIGJ1ZmZlciBpc24ndCB6ZXJvZWQsIGNvdWxkIHRoYXQgbGVhZCB0byBzb21lIG5hc3RpbmVzcyBkb3duIHRoZSBsaW5lLCBtYXliZSB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB0cmFuc21pdHRlZCBvciB1c2VkPyBUaGF0IGNvdWxkIGJlIGEgc2VyaW91cyBzZWN1cml0eSB2dWxuZXJhYmlsaXR5LCBvciBhdCBsZWFzdCBhIHBvdGVudGlhbCBkYXRhIGNvcnJ1cHRpb24gaXNzdWUuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBzdHJ1Y3R1cmUgb2YgdGhpcyB0aGluZy4uLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IHNtY19saW5rYCBhbmQgYHN0cnVjdCBzbWNfbGlua19ncm91cGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHdyX3R4X3YyX3BlbmRgIGFuZCBgd3JfdHhfYnVmX3YyYCBhY3R1YWxseSAqYXJlKiB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGlzIGZpeC4gR290dGEgZ2V0IHRoZSBsb3ctZG93biBvbiB0aGUgc2l6ZXMgYW5kIHVzYWdlIHBhdHRlcm5zIG9mIHRoZXNlIGJ1ZmZlcnMuIFRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODUzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQ4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjI6MTUuMTg3MjQ0MDAzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDc1NjE2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3Qgc21jX2xpbmsgXFxcXHtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9zbWNfY29yZS5oPTg5PXN0cnVjdCBzbWNfcmRtYV93ciB7XFx0XFx0XFx0XFx0Lyogd29yayByZXF1ZXN0cyBwZXIgbWVzc2FnZVxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5oLTk2LVxcbm5ldC9zbWMvc21jX2NvcmUuaDo5NzpzdHJ1Y3Qgc21jX2xpbmsge1xcbm5ldC9zbWMvc21jX2NvcmUuaC05OC1cXHRzdHJ1Y3Qgc21jX2liX2RldmljZVxcdCpzbWNpYmRldjtcXHQvKiBpYi1kZXZpY2UgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjI6MTUuMjMyMDA3NjU4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMDc4NDM3NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIFNNQyBMaW5rIFN0cnVjdHVyZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYHNtY19saW5rYCBzdHJ1Y3QuIExldCdzIGhlYWQgc3RyYWlnaHQgdG8gYG5ldC9zbWMvc21jX2NvcmUuaGAuIEkgd2FudCB0byBxdWlja2x5IHJldmlldyBpdHMga2V5IG1lbWJlcnMgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgb3ZlcmFsbCBTTUMgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24uIEknbSBwcmltYXJpbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBjdXJyZW50IHN0YXRlIGFuZCBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBsb3dlciBsYXllcnMgYW5kIHRoZSBzb2NrZXQuIExldCBtZSBzZWUuLi4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueXRoaW5nIHRoYXQgaGFzIHRvIGRvIHdpdGggY29ubmVjdGlvbiBlc3RhYmxpc2htZW50LCBkYXRhIHRyYW5zZmVyLCBhbmQgZXJyb3IgaGFuZGxpbmcuIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIGFzc3VtcHRpb25zIEknbSBtYWtpbmcgYWJvdXQgaXRzIGludGVybmFsIHN0YXRlIGFyZSBzdGlsbCB2YWxpZCB3aXRoIHJlc3BlY3QgdG8gdGhlIGN1cnJlbnQgY29kZS4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGxvb2sgZm9yIGFueSByZWNlbnQgY2hhbmdlcyB0aGF0IG1pZ2h0IGhhdmUgYWZmZWN0ZWQgaXRzIGNvcmUgZnVuY3Rpb25hbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg0MCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjIyOjIwLjUzOTg1MzQ1OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc21jL3NtY19jb3JlLmhcIixcbiAgXCJGaXJzdExpbmVcIjogOTcsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDk3OlxcdHN0cnVjdCBzbWNfbGluayB7XFxuICA5ODpcXHRcXHRzdHJ1Y3Qgc21jX2liX2RldmljZVxcdCpzbWNpYmRldjtcXHQvKiBpYi1kZXZpY2UgKi9cXG4gIDk5OlxcdFxcdHU4XFx0XFx0XFx0aWJwb3J0O1xcdFxcdC8qIHBvcnQgLSB2YWx1ZXMgMSB8IDIgKi9cXG4gMTAwOlxcdFxcdHN0cnVjdCBpYl9wZFxcdFxcdCpyb2NlX3BkO1xcdC8qIElCIHByb3RlY3Rpb24gZG9tYWluLFxcbiAxMDE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICogdW5pcXVlIGZvciBldmVyeSBSb0NFIFFQXFxuIDEwMjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgKi9cXG4gMTAzOlxcdFxcdHN0cnVjdCBpYl9xcFxcdFxcdCpyb2NlX3FwO1xcdC8qIElCIHF1ZXVlIHBhaXIgKi9cXG4gMTA0OlxcdFxcdHN0cnVjdCBpYl9xcF9hdHRyXFx0cXBfYXR0cjtcXHQvKiBJQiBxdWV1ZSBwYWlyIGF0dHJpYnV0ZXMgKi9cXG4gMTA1OlxcdFxcbiAxMDY6XFx0XFx0c3RydWN0IHNtY193cl9idWZcXHQqd3JfdHhfYnVmcztcXHQvKiBXUiBzZW5kIHBheWxvYWQgYnVmZmVycyAqL1xcbiAxMDc6XFx0XFx0c3RydWN0IGliX3NlbmRfd3JcXHQqd3JfdHhfaWJzO1xcdC8qIFdSIHNlbmQgbWV0YSBkYXRhICovXFxuIDEwODpcXHRcXHRzdHJ1Y3QgaWJfc2dlXFx0XFx0KndyX3R4X3NnZXM7XFx0LyogV1Igc2VuZCBnYXRoZXIgbWV0YSBkYXRhICovXFxuIDEwOTpcXHRcXHRzdHJ1Y3Qgc21jX3JkbWFfc2dlc1xcdCp3cl90eF9yZG1hX3NnZXM7LypSRE1BIFdSSVRFIGdhdGhlciBtZXRhIGRhdGEqL1xcbiAxMTA6XFx0XFx0c3RydWN0IHNtY19yZG1hX3dyXFx0KndyX3R4X3JkbWFzO1xcdC8qIFdSIFJETUEgV1JJVEUgKi9cXG4gMTExOlxcdFxcdHN0cnVjdCBzbWNfd3JfdHhfcGVuZFxcdCp3cl90eF9wZW5kcztcXHQvKiBXUiBzZW5kIHdhaXRpbmcgZm9yIENRRSAqL1xcbiAxMTI6XFx0XFx0c3RydWN0IGNvbXBsZXRpb25cXHQqd3JfdHhfY29tcGw7XFx0LyogV1Igc2VuZCBDUUUgY29tcGxldGlvbiAqL1xcbiAxMTM6XFx0XFx0LyogYWJvdmUgZm91ciB2ZWN0b3JzIGhhdmUgd3JfdHhfY250IGVsZW1lbnRzIGFuZCB1c2UgdGhlIHNhbWUgaW5kZXggKi9cXG4gMTE0OlxcdFxcdHN0cnVjdCBpYl9zZW5kX3dyXFx0KndyX3R4X3YyX2liO1xcdC8qIFdSIHNlbmQgdjIgbWV0YSBkYXRhICovXFxuIDExNTpcXHRcXHRzdHJ1Y3QgaWJfc2dlXFx0XFx0KndyX3R4X3YyX3NnZTtcXHQvKiBXUiBzZW5kIHYyIGdhdGhlciBtZXRhIGRhdGEqL1xcbiAxMTY6XFx0XFx0c3RydWN0IHNtY193cl90eF9wZW5kXFx0KndyX3R4X3YyX3BlbmQ7XFx0LyogV1Igc2VuZCB2MiB3YWl0aW5nIGZvciBDUUUgKi9cXG4gMTE3OlxcdFxcdGRtYV9hZGRyX3RcXHRcXHR3cl90eF9kbWFfYWRkcjtcXHQvKiBETUEgYWRkcmVzcyBvZiB3cl90eF9idWZzICovXFxuIDExODpcXHRcXHRkbWFfYWRkcl90XFx0XFx0d3JfdHhfdjJfZG1hX2FkZHI7IC8qIERNQSBhZGRyZXNzIG9mIHYyIHR4IGJ1ZiovXFxuIDExOTpcXHRcXHRhdG9taWNfbG9uZ190XFx0XFx0d3JfdHhfaWQ7XFx0Lyogc2VxICMgb2YgbGFzdCBzZW50IFdSICovXFxuIDEyMDpcXHRcXHR1bnNpZ25lZCBsb25nXFx0XFx0KndyX3R4X21hc2s7XFx0LyogYml0IG1hc2sgb2YgdXNlZCBpbmRleGVzICovXFxuIDEyMTpcXHRcXHR1MzJcXHRcXHRcXHR3cl90eF9jbnQ7XFx0LyogbnVtYmVyIG9mIFdSIHNlbmQgYnVmZmVycyAqL1xcbiAxMjI6XFx0XFx0d2FpdF9xdWV1ZV9oZWFkX3RcXHR3cl90eF93YWl0O1xcdC8qIHdhaXQgZm9yIGZyZWUgV1Igc2VuZCBidWYgKi9cXG4gMTIzOlxcdFxcdHN0cnVjdCB7XFxuIDEyNDpcXHRcXHRcXHRzdHJ1Y3QgcGVyY3B1X3JlZlxcdHdyX3R4X3JlZnM7XFxuIDEyNTpcXHRcXHR9IF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XFxuIDEyNjpcXHRcXHRzdHJ1Y3QgY29tcGxldGlvblxcdHR4X3JlZl9jb21wO1xcbiAxMjc6XFx0XFxuIDEyODpcXHRcXHR1OFxcdFxcdFxcdCp3cl9yeF9idWZzO1xcdC8qIFdSIHJlY3YgcGF5bG9hZCBidWZmZXJzICovXFxuIDEyOTpcXHRcXHRzdHJ1Y3QgaWJfcmVjdl93clxcdCp3cl9yeF9pYnM7XFx0LyogV1IgcmVjdiBtZXRhIGRhdGEgKi9cXG4gMTMwOlxcdFxcdHN0cnVjdCBpYl9zZ2VcXHRcXHQqd3Jfcnhfc2dlcztcXHQvKiBXUiByZWN2IHNjYXR0ZXIgbWV0YSBkYXRhICovXFxuIDEzMTpcXHRcXHQvKiBhYm92ZSB0aHJlZSB2ZWN0b3JzIGhhdmUgd3JfcnhfY250IGVsZW1lbnRzIGFuZCB1c2UgdGhlIHNhbWUgaW5kZXggKi9cXG4gMTMyOlxcdFxcdGludFxcdFxcdFxcdHdyX3J4X3NnZV9jbnQ7IC8qIHJ4IHNnZSwgVjEgaXMgMSwgVjIgaXMgZWl0aGVyIDIgb3IgMSAqL1xcbiAxMzM6XFx0XFx0aW50XFx0XFx0XFx0d3JfcnhfYnVmbGVuO1xcdC8qIGJ1ZmZlciBsZW4gZm9yIHRoZSBmaXJzdCBzZ2UsIGxlbiBmb3IgdGhlXFxuIDEzNDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgKiBzZWNvbmQgc2dlIGlzIGxnciBzaGFyZWQgaWYgcnggc2dlIGlzIDIuXFxuIDEzNTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgKi9cXG4gMTM2OlxcdFxcdGRtYV9hZGRyX3RcXHRcXHR3cl9yeF9kbWFfYWRkcjtcXHQvKiBETUEgYWRkcmVzcyBvZiB3cl9yeF9idWZzICovXFxuIDEzNzpcXHRcXHRkbWFfYWRkcl90XFx0XFx0d3JfcnhfdjJfZG1hX2FkZHI7IC8qIERNQSBhZGRyZXNzIG9mIHYyIHJ4IGJ1ZiovXFxuIDEzODpcXHRcXHR1NjRcXHRcXHRcXHR3cl9yeF9pZDtcXHQvKiBzZXEgIyBvZiBsYXN0IHJlY3YgV1IgKi9cXG4gMTM5OlxcdFxcdHU2NFxcdFxcdFxcdHdyX3J4X2lkX2NvbXBsOyAvKiBzZXEgIyBvZiBsYXN0IGNvbXBsZXRlZCBXUiAqL1xcbiAxNDA6XFx0XFx0dTMyXFx0XFx0XFx0d3JfcnhfY250O1xcdC8qIG51bWJlciBvZiBXUiByZWN2IGJ1ZmZlcnMgKi9cXG4gMTQxOlxcdFxcdHVuc2lnbmVkIGxvbmdcXHRcXHR3cl9yeF90c3RhbXA7XFx0LyogamlmZmllcyB3aGVuIGxhc3QgYnVmIHJ4ICovXFxuIDE0MjpcXHRcXHR3YWl0X3F1ZXVlX2hlYWRfdCAgICAgICB3cl9yeF9lbXB0eV93YWl0OyAvKiB3YWl0IGZvciBSUSBlbXB0eSAqL1xcbiAxNDM6XFx0XFxuIDE0NDpcXHRcXHRzdHJ1Y3QgaWJfcmVnX3dyXFx0d3JfcmVnO1xcdFxcdC8qIFdSIHJlZ2lzdGVyIG1lbW9yeSByZWdpb24gKi9cXG4gMTQ1OlxcdFxcdHdhaXRfcXVldWVfaGVhZF90XFx0d3JfcmVnX3dhaXQ7XFx0Lyogd2FpdCBmb3Igd3JfcmVnIHJlc3VsdCAqL1xcbiAxNDY6XFx0XFx0c3RydWN0IHtcXG4gMTQ3OlxcdFxcdFxcdHN0cnVjdCBwZXJjcHVfcmVmXFx0d3JfcmVnX3JlZnM7XFxuIDE0ODpcXHRcXHR9IF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XFxuIDE0OTpcXHRcXHRzdHJ1Y3QgY29tcGxldGlvblxcdHJlZ19yZWZfY29tcDtcXG4gMTUwOlxcdFxcdGVudW0gc21jX3dyX3JlZ19zdGF0ZVxcdHdyX3JlZ19zdGF0ZTtcXHQvKiBzdGF0ZSBvZiB3cl9yZWcgcmVxdWVzdCAqL1xcbiAxNTE6XFx0XFxuIDE1MjpcXHRcXHR1OFxcdFxcdFxcdGdpZFtTTUNfR0lEX1NJWkVdOy8qIGdpZCBtYXRjaGluZyB1c2VkIHZsYW4gaWQqL1xcbiAxNTM6XFx0XFx0dThcXHRcXHRcXHRzZ2lkX2luZGV4O1xcdC8qIGdpZCBpbmRleCBmb3IgdmxhbiBpZCAgICAgICovXFxuIDE1NDpcXHRcXHR1MzJcXHRcXHRcXHRwZWVyX3FwbjtcXHQvKiBRUCBudW1iZXIgb2YgcGVlciAqL1xcbiAxNTU6XFx0XFx0ZW51bSBpYl9tdHVcXHRcXHRwYXRoX210dTtcXHQvKiB1c2VkIG10dSAqL1xcbiAxNTY6XFx0XFx0ZW51bSBpYl9tdHVcXHRcXHRwZWVyX210dTtcXHQvKiBtdHUgc2l6ZSBvZiBwZWVyICovXFxuIDE1NzpcXHRcXHR1MzJcXHRcXHRcXHRwc25faW5pdGlhbDtcXHQvKiBRUCB0eCBpbml0aWFsIHBhY2tldCBzZXFubyAqL1xcbiAxNTg6XFx0XFx0dTMyXFx0XFx0XFx0cGVlcl9wc247XFx0LyogUVAgcnggaW5pdGlhbCBwYWNrZXQgc2Vxbm8gKi9cXG4gMTU5OlxcdFxcdHU4XFx0XFx0XFx0cGVlcl9tYWNbRVRIX0FMRU5dO1xcdC8qID0gZ2lkWzg6MTB8fDEzOjE1XSAqL1xcbiAxNjA6XFx0XFx0dThcXHRcXHRcXHRwZWVyX2dpZFtTTUNfR0lEX1NJWkVdO1xcdC8qIGdpZCBvZiBwZWVyKi9cXG4gMTYxOlxcdFxcdHU4XFx0XFx0XFx0bGlua19pZDtcXHQvKiB1bmlxdWUgIyB3aXRoaW4gbGluayBncm91cCAqL1xcbiAxNjI6XFx0XFx0dThcXHRcXHRcXHRsaW5rX3VpZFtTTUNfTEdSX0lEX1NJWkVdOyAvKiB1bmlxdWUgbG5rIGlkICovXFxuIDE2MzpcXHRcXHR1OFxcdFxcdFxcdHBlZXJfbGlua191aWRbU01DX0xHUl9JRF9TSVpFXTsgLyogcGVlciB1aWQgKi9cXG4gMTY0OlxcdFxcdHU4XFx0XFx0XFx0bGlua19pZHg7XFx0LyogaW5kZXggaW4gbGdyIGxpbmsgYXJyYXkgKi9cXG4gMTY1OlxcdFxcdHU4XFx0XFx0XFx0bGlua19pc19hc3ltO1xcdC8qIGlzIGxpbmsgYXN5bW1ldHJpYz8gKi9cXG4gMTY2OlxcdFxcdHU4XFx0XFx0XFx0Y2xlYXJpbmcgOiAxO1xcdC8qIGxpbmsgaXMgYmVpbmcgY2xlYXJlZCAqL1xcbiAxNjc6XFx0XFx0cmVmY291bnRfdFxcdFxcdHJlZmNudDtcXHRcXHQvKiBsaW5rIHJlZmVyZW5jZSBjb3VudCAqL1xcbiAxNjg6XFx0XFx0c3RydWN0IHNtY19saW5rX2dyb3VwXFx0KmxncjtcXHRcXHQvKiBwYXJlbnQgbGluayBncm91cCAqL1xcbiAxNjk6XFx0XFx0c3RydWN0IHdvcmtfc3RydWN0XFx0bGlua19kb3duX3dyaztcXHQvKiB3cmsgdG8gYnJpbmcgbGluayBkb3duICovXFxuIDE3MDpcXHRcXHRjaGFyXFx0XFx0XFx0aWJuYW1lW0lCX0RFVklDRV9OQU1FX01BWF07IC8qIGliIGRldmljZSBuYW1lICovXFxuIDE3MTpcXHRcXHRpbnRcXHRcXHRcXHRuZGV2X2lmaWR4OyAvKiBuZXR3b3JrIGRldmljZSBpZmluZGV4ICovXFxuIDE3MjpcXHRcXG4gMTczOlxcdFxcdGVudW0gc21jX2xpbmtfc3RhdGVcXHRzdGF0ZTtcXHRcXHQvKiBzdGF0ZSBvZiBsaW5rICovXFxuIDE3NDpcXHRcXHRzdHJ1Y3QgZGVsYXllZF93b3JrXFx0bGxjX3Rlc3RsaW5rX3dyazsgLyogdGVzdGxpbmsgd29ya2VyICovXFxuIDE3NTpcXHRcXHRzdHJ1Y3QgY29tcGxldGlvblxcdGxsY190ZXN0bGlua19yZXNwOyAvKiB3YWl0IGZvciByeCBvZiB0ZXN0bGluayAqL1xcbiAxNzY6XFx0XFx0aW50XFx0XFx0XFx0bGxjX3Rlc3RsaW5rX3RpbWU7IC8qIHRlc3RsaW5rIGludGVydmFsICovXFxuIDE3NzpcXHRcXHRhdG9taWNfdFxcdFxcdGNvbm5fY250OyAvKiBjb25uZWN0aW9ucyBvbiB0aGlzIGxpbmsgKi9cXG4gMTc4OlxcdFxcdHUxNlxcdFxcdFxcdG1heF9zZW5kX3dyO1xcbiAxNzk6XFx0XFx0dTE2XFx0XFx0XFx0bWF4X3JlY3Zfd3I7XFxuIDE4MDpcXHR9O1xcbiAxODE6XFx0XFxuIDE4MjpcXHQvKiBGb3Igbm93IHdlIGp1c3QgYWxsb3cgb25lIHBhcmFsbGVsIGxpbmsgcGVyIGxpbmsgZ3JvdXAuIFRoZSBTTUMgcHJvdG9jb2xcXG4gMTgzOlxcdCAqIGFsbG93cyBtb3JlICh1cCB0byA4KS5cXG4gMTg0OlxcdCAqL1xcbiAxODU6XFx0I2RlZmluZSBTTUNfTElOS1NfUEVSX0xHUl9NQVhcXHQzXFxuIDE4NjpcXHQjZGVmaW5lIFNNQ19TSU5HTEVfTElOS1xcdFxcdDBcXG4gMTg3OlxcdCNkZWZpbmUgU01DX0xJTktTX0FERF9MTktfTUlOXFx0MVxcdC8qIG1pbi4gIyBvZiBsaW5rcyBwZXIgbGluayBncm91cCAqL1xcbiAxODg6XFx0I2RlZmluZSBTTUNfTElOS1NfQUREX0xOS19NQVhcXHQyXFx0LyogbWF4LiAjIG9mIGxpbmtzIHBlciBsaW5rIGdyb3VwLCBhbHNvIGlzIHRoZVxcbiAxODk6XFx0XFx0XFx0XFx0XFx0XFx0ICogZGVmYXVsdCB2YWx1ZSBmb3Igc21jLXIgdjEuMCBhbmQgdjIuMFxcbiAxOTA6XFx0XFx0XFx0XFx0XFx0XFx0ICovXFxuIDE5MTpcXHQjZGVmaW5lIFNNQ19MSU5LU19QRVJfTEdSX01BWF9QUkVGRVJcXHQyXFx0LyogUHJlZmVycmVkIG1heCBsaW5rcyBwZXIgbGluayBncm91cCB1c2VkIGZvclxcbiAxOTI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICogU01DLVIgdjIuMSBhbmQgbGF0ZXIgbmVnb3RpYXRpb24sIHZlbmRvcnMgb3JcXG4gMTkzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAqIGRpc3RyaWJ1dGlvbnMgbWF5IG1vZGlmeSBpdCB0byBhIHZhbHVlIGJldHdlZW5cXG4gMTk0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAqIDEtMiBhcyBuZWVkZWQuXFxuIDE5NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgKi9cXG4gMTk2OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDoyMjoyMC41Mzk5Mzg4MzhaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc1MjMwNzE1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWJ1Z2dpbmcgYSBQb3RlbnRpYWwgTlVMTCBQb2ludGVyIERlcmVmZXJlbmNlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBgc3RydWN0IHNtY193cl90eF9wZW5kICp3cl90eF92Ml9wZW5kO2AuIFJpZ2h0LCBhIHBvaW50ZXIuIFRoZW4gdGhhdCBgbWVtc2V0YCBjYWxsLCBgbWVtc2V0KFx1MDAyNmxpbmstXHUwMDNld3JfdHhfdjJfcGVuZCwgMCwgc2l6ZW9mKGxpbmstXHUwMDNld3JfdHhfdjJfcGVuZCkpYCwgdGhhdCB3YXMgemVyb2luZyB0aGUgKnBvaW50ZXIqIGl0c2VsZiwgbm90IHRoZSBtZW1vcnkgaXQgcG9pbnRzIHRvLiBIbW0sIHRoYXQncyBub3Qgd2hhdCdzIGludGVuZGVkLlxuXG5TbyBgbGluay1cdTAwM2V3cl90eF92Ml9wZW5kYCBpcyBhIHBvaW50ZXIgdG8gdGhlIGBzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRgLiBJZiB0aGF0IGBtZW1zZXRgIHplcm9lZCB0aGUgcG9pbnRlciwgaXQgd291bGQgc2V0IGl0IHRvIE5VTEwuICBBbmQgdGhhdCBtYWtlcyBtZSB0aGluaywgaWYgYGxpbmstXHUwMDNld3JfdHhfdjJfcGVuZGAgKndhcyogemVyb2VkLCBpdCB3b3VsZCBiZWNvbWUgTlVMTC4gVGhhdCdzIGEgdGV4dGJvb2sgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHNpdHVhdGlvbiwgYW5kIEtBU0FOIG9yIGFueSBkZWNlbnQgc3RhdGljIGFuYWx5c2lzIHRvb2wgd291bGQgcGljayB0aGF0IHVwIHByZXR0eSBxdWlja2x5IHRoZSBuZXh0IHRpbWUgaXQgd2FzIHVzZWQuIEl0J3MgYWxsb2NhdGVkIHNvbWV3aGVyZSwgdGhvdWdoLiBJZiB0aGF0IGJlY2FtZSBOVUxMLCBhbmQgd2UgYWNjZXNzZWQgaXQsIHdlIHNob3VsZCBiZSBzZWVpbmcgdGhhdCBwcmV0dHkgZWFzaWx5LlxuXG5CdXQgd2FpdCwgSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZyByZWxhdGVkLiBXaGF0IGFib3V0IGBsaW5rLVx1MDAzZWxnci1cdTAwM2V3cl90eF9idWZfdjJgPyBUaGF0J3MgbGlrZWx5IHJlbGF0ZWQsIGFuZCBJIHdhbnQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGBzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXBgIHRvIHNlZSBob3cgdGhvc2UgYXJlIHJlbGF0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzODksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDoyMjoyNS4yOTIyNTIxMzdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NzgzNjc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBzbWNfbGlua19ncm91cCBcXFxce1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL3NtY19jb3JlLmg9MjgxPXN0cnVjdCBzbWNfbGxjX2Zsb3cge1xcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5oLTI4NS1cXG5uZXQvc21jL3NtY19jb3JlLmg6Mjg2OnN0cnVjdCBzbWNfbGlua19ncm91cCB7XFxubmV0L3NtYy9zbWNfY29yZS5oLTI4Ny1cXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0bGlzdDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjI6MjUuMzM3MDM4MTgyWiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNjg4ODQwMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHJlYWRpbmcgYW5kIHRoaW5raW5nIGFib3V0IHRoZSBzdHJ1Y3Q6XG5cbioqQW5hbHl6aW5nIGBzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXBgKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIGBzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXBgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGF0J3MgdGhlIGNvbnRleHQgaGVyZT8gVGhpcyBzY3JlYW1zIFN5c3RlbXMgTWFuYWdlbWVudCBDb250cm9sbGVyLCBsaWtlbHkgZGVhbGluZyB3aXRoIHNvbWUga2luZCBvZiBsaW5rZWQgb3IgZ3JvdXBlZCByZXNvdXJjZS5cIiBLbm93aW5nIHRoZSBuYW1lLCBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgaW5mb3JtYXRpb24gYWJvdXQgaG93IGRpZmZlcmVudCBTTUMgbGlua3MgYXJlIG9yZ2FuaXplZCBhbmQgbWFuYWdlZCB0b2dldGhlci4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIGVsZW1lbnRzIGxpa2UgbGluayBJRHMsIHBlcmhhcHMgc29tZSBraW5kIG9mIGdyb3VwIGlkZW50aWZpZXIsIGFuZCBwb3RlbnRpYWxseSBwb2ludGVycyBvciByZWZlcmVuY2VzIHRvIHRoZSBpbmRpdmlkdWFsIGxpbmtzIHRoZW1zZWx2ZXMsIG9yIGRhdGEgYWJvdXQgdGhlIGdyb3VwIGFzIGEgd2hvbGUuIEkgYWxzbyBleHBlY3QgdGhhdCB0aGVyZSdsbCBiZSBkYXRhIHJlZ2FyZGluZyB0aGUgc3RhdGVzIG9mIHRoZSBsaW5rcyAoYWN0aXZlL2luYWN0aXZlLCBoZWFsdGh5L2ZhaWxlZCksIHdoaWNoIHdpbGwgZGljdGF0ZSB0aGUgZ3JvdXAncyBvdmVyYWxsIHN0YXRlLiBJIGJldCB0aGVyZSdzIHNvbWUgc29ydCBvZiByZXNvdXJjZSBsb2NraW5nIG1lY2hhbmlzbSBvciBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlIGluY2x1ZGVkIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIGR1cmluZyBjb25jdXJyZW50IGFjY2VzcyBvZiB0aGUgbGlua3MuIEknbSBhbHNvIHJlYWxseSBjdXJpb3VzIHdoZXRoZXIgdGhpcyBkYXRhIHN0cnVjdHVyZSBpcyBkZXNpZ25lZCB0byByZXByZXNlbnQgYSBzdGF0aWMgY29uZmlndXJhdGlvbiBvciBpZiBpdCBjYW4gYmUgZHluYW1pY2FsbHkgbW9kaWZpZWQg4oCTIHRoYXQnbGwgcmVhbGx5IGFmZmVjdCBob3cgdGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBhbmQgbWFuYWdlZCBieSB0aGUgb3BlcmF0aW5nIHN5c3RlbS4gVWx0aW1hdGVseSwgSSdtIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IFNNQyBsaW5rcyBhcmUgYWJzdHJhY3RlZCBhbmQgY29udHJvbGxlZCBhdCB0aGUgc29mdHdhcmUgbGV2ZWwuIEkgYWxzbyB3b3VsZG4ndCBiZSBzdXJwcmlzZWQgdG8gc2VlIGEgcGVyZm9ybWFuY2UgZWxlbWVudCBoZXJlLCBzdWNoIGFzIGRhdGEgc3RydWN0dXJlcyB0aGF0IGZhY2lsaXRhdGUgZmFzdCBsb29rdXBzIG9mIG1lbWJlcnMgaW4gdGhlIGxpbmsgZ3JvdXAuIEknbSBlYWdlciB0byBkaWcgaW4gYW5kIHNlZSBob3cgd2VsbCB0aGlzIHRoaW5nIGlzIGRlc2lnbmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDQ4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjI6MjkuNjA1OTI0NDk2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc21jL3NtY19jb3JlLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMjg2LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI4NjpcXHRzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAge1xcbiAyODc6XFx0XFx0c3RydWN0IGxpc3RfaGVhZFxcdGxpc3Q7XFxuIDI4ODpcXHRcXHRzdHJ1Y3QgcmJfcm9vdFxcdFxcdGNvbm5zX2FsbDtcXHQvKiBjb25uZWN0aW9uIHRyZWUgKi9cXG4gMjg5OlxcdFxcdHJ3bG9ja190XFx0XFx0Y29ubnNfbG9jaztcXHQvKiBwcm90ZWN0cyBjb25uc19hbGwgKi9cXG4gMjkwOlxcdFxcdHVuc2lnbmVkIGludFxcdFxcdGNvbm5zX251bTtcXHQvKiBjdXJyZW50ICMgb2YgY29ubmVjdGlvbnMgKi9cXG4gMjkxOlxcdFxcdHVuc2lnbmVkIHNob3J0XFx0XFx0dmxhbl9pZDtcXHQvKiB2bGFuIGlkIG9mIGxpbmsgZ3JvdXAgKi9cXG4gMjkyOlxcdFxcbiAyOTM6XFx0XFx0c3RydWN0IGxpc3RfaGVhZFxcdHNuZGJ1ZnNbU01DX1JNQkVfU0laRVNdOy8qIHR4IGJ1ZmZlcnMgKi9cXG4gMjk0OlxcdFxcdHN0cnVjdCByd19zZW1hcGhvcmVcXHRzbmRidWZzX2xvY2s7XFx0LyogcHJvdGVjdHMgdHggYnVmZmVycyAqL1xcbiAyOTU6XFx0XFx0c3RydWN0IGxpc3RfaGVhZFxcdHJtYnNbU01DX1JNQkVfU0laRVNdO1xcdC8qIHJ4IGJ1ZmZlcnMgKi9cXG4gMjk2OlxcdFxcdHN0cnVjdCByd19zZW1hcGhvcmVcXHRybWJzX2xvY2s7XFx0LyogcHJvdGVjdHMgcnggYnVmZmVycyAqL1xcbiAyOTc6XFx0XFx0dTY0XFx0XFx0XFx0YWxsb2Nfc25kYnVmcztcXHQvKiBzdGF0cyBvZiB0eCBidWZmZXJzICovXFxuIDI5ODpcXHRcXHR1NjRcXHRcXHRcXHRhbGxvY19ybWJzO1xcdC8qIHN0YXRzIG9mIHJ4IGJ1ZmZlcnMgKi9cXG4gMjk5OlxcdFxcbiAzMDA6XFx0XFx0dThcXHRcXHRcXHRpZFtTTUNfTEdSX0lEX1NJWkVdO1xcdC8qIHVuaXF1ZSBsZ3IgaWQgKi9cXG4gMzAxOlxcdFxcdHN0cnVjdCBkZWxheWVkX3dvcmtcXHRmcmVlX3dvcms7XFx0LyogZGVsYXllZCBmcmVlaW5nIG9mIGFuIGxnciAqL1xcbiAzMDI6XFx0XFx0c3RydWN0IHdvcmtfc3RydWN0XFx0dGVybWluYXRlX3dvcms7XFx0LyogYWJub3JtYWwgbGdyIHRlcm1pbmF0aW9uICovXFxuIDMwMzpcXHRcXHRzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdFxcdCp0eF93cTtcXHRcXHQvKiB3cSBmb3IgY29ubi4gdHggd29ya2VycyAqL1xcbiAzMDQ6XFx0XFx0dThcXHRcXHRcXHRzeW5jX2VyciA6IDE7XFx0LyogbGdyIG5vIGxvbmdlciBmaXRzIHRvIHBlZXIgKi9cXG4gMzA1OlxcdFxcdHU4XFx0XFx0XFx0dGVybWluYXRpbmcgOiAxOy8qIGxnciBpcyB0ZXJtaW5hdGluZyAqL1xcbiAzMDY6XFx0XFx0dThcXHRcXHRcXHRmcmVlaW5nIDogMTtcXHQvKiBsZ3IgaXMgYmVpbmcgZnJlZWQgKi9cXG4gMzA3OlxcdFxcbiAzMDg6XFx0XFx0cmVmY291bnRfdFxcdFxcdHJlZmNudDtcXHRcXHQvKiBsZ3IgcmVmZXJlbmNlIGNvdW50ICovXFxuIDMwOTpcXHRcXHRib29sXFx0XFx0XFx0aXNfc21jZDtcXHQvKiBTTUMtUiBvciBTTUMtRCAqL1xcbiAzMTA6XFx0XFx0dThcXHRcXHRcXHRzbWNfdmVyc2lvbjtcXG4gMzExOlxcdFxcdHU4XFx0XFx0XFx0bmVnb3RpYXRlZF9laWRbU01DX01BWF9FSURfTEVOXTtcXG4gMzEyOlxcdFxcdHU4XFx0XFx0XFx0cGVlcl9vcztcXHQvKiBwZWVyIG9wZXJhdGluZyBzeXN0ZW0gKi9cXG4gMzEzOlxcdFxcdHU4XFx0XFx0XFx0cGVlcl9zbWNfcmVsZWFzZTtcXG4gMzE0OlxcdFxcdHU4XFx0XFx0XFx0cGVlcl9ob3N0bmFtZVtTTUNfTUFYX0hPU1ROQU1FX0xFTl07XFxuIDMxNTpcXHRcXHR1bmlvbiB7XFxuIDMxNjpcXHRcXHRcXHRzdHJ1Y3QgeyAvKiBTTUMtUiAqL1xcbiAzMTc6XFx0XFx0XFx0XFx0ZW51bSBzbWNfbGdyX3JvbGVcXHRyb2xlO1xcbiAzMTg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0LyogY2xpZW50IG9yIHNlcnZlciAqL1xcbiAzMTk6XFx0XFx0XFx0XFx0c3RydWN0IHNtY19saW5rXFx0XFx0bG5rW1NNQ19MSU5LU19QRVJfTEdSX01BWF07XFxuIDMyMDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQvKiBzbWMgbGluayAqL1xcbiAzMjE6XFx0XFx0XFx0XFx0c3RydWN0IHNtY193cl92Ml9idWZcXHQqd3JfcnhfYnVmX3YyO1xcbiAzMjI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0LyogV1IgdjIgcmVjdiBwYXlsb2FkIGJ1ZmZlciAqL1xcbiAzMjM6XFx0XFx0XFx0XFx0c3RydWN0IHNtY193cl92Ml9idWZcXHQqd3JfdHhfYnVmX3YyO1xcbiAzMjQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0LyogV1IgdjIgc2VuZCBwYXlsb2FkIGJ1ZmZlciAqL1xcbiAzMjU6XFx0XFx0XFx0XFx0Y2hhclxcdFxcdFxcdHBlZXJfc3lzdGVtaWRbU01DX1NZU1RFTUlEX0xFTl07XFxuIDMyNjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQvKiB1bmlxdWUgc3lzdGVtX2lkIG9mIHBlZXIgKi9cXG4gMzI3OlxcdFxcdFxcdFxcdHN0cnVjdCBzbWNfcnRva2VuXFx0cnRva2Vuc1tTTUNfUk1CU19QRVJfTEdSX01BWF1cXG4gMzI4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFtTTUNfTElOS1NfUEVSX0xHUl9NQVhdO1xcbiAzMjk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0LyogcmVtb3RlIGFkZHIva2V5IHBhaXJzICovXFxuIDMzMDpcXHRcXHRcXHRcXHRERUNMQVJFX0JJVE1BUChydG9rZW5zX3VzZWRfbWFzaywgU01DX1JNQlNfUEVSX0xHUl9NQVgpO1xcbiAzMzE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0LyogdXNlZCBydG9rZW4gZWxlbWVudHMgKi9cXG4gMzMyOlxcdFxcdFxcdFxcdHU4XFx0XFx0XFx0bmV4dF9saW5rX2lkO1xcbiAzMzM6XFx0XFx0XFx0XFx0ZW51bSBzbWNfbGdyX3R5cGVcXHR0eXBlO1xcbiAzMzQ6XFx0XFx0XFx0XFx0ZW51bSBzbWNyX2J1Zl90eXBlXFx0YnVmX3R5cGU7XFxuIDMzNTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQvKiByZWR1bmRhbmN5IHN0YXRlICovXFxuIDMzNjpcXHRcXHRcXHRcXHR1OFxcdFxcdFxcdHBuZXRfaWRbU01DX01BWF9QTkVUSURfTEVOICsgMV07XFxuIDMzNzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQvKiBwbmV0IGlkIG9mIHRoaXMgbGdyICovXFxuIDMzODpcXHRcXHRcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0bGxjX2V2ZW50X3E7XFxuIDMzOTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQvKiBxdWV1ZSBmb3IgbGxjIGV2ZW50cyAqL1xcbiAzNDA6XFx0XFx0XFx0XFx0c3BpbmxvY2tfdFxcdFxcdGxsY19ldmVudF9xX2xvY2s7XFxuIDM0MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQvKiBwcm90ZWN0cyBsbGNfZXZlbnRfcSAqL1xcbiAzNDI6XFx0XFx0XFx0XFx0c3RydWN0IHJ3X3NlbWFwaG9yZVxcdGxsY19jb25mX211dGV4O1xcbiAzNDM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0LyogcHJvdGVjdHMgbGdyIHJlY29uZmlnLiAqL1xcbiAzNDQ6XFx0XFx0XFx0XFx0c3RydWN0IHdvcmtfc3RydWN0XFx0bGxjX2FkZF9saW5rX3dvcms7XFxuIDM0NTpcXHRcXHRcXHRcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcXHRsbGNfZGVsX2xpbmtfd29yaztcXG4gMzQ2OlxcdFxcdFxcdFxcdHN0cnVjdCB3b3JrX3N0cnVjdFxcdGxsY19ldmVudF93b3JrO1xcbiAzNDc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0LyogbGxjIGV2ZW50IHdvcmtlciAqL1xcbiAzNDg6XFx0XFx0XFx0XFx0d2FpdF9xdWV1ZV9oZWFkX3RcXHRsbGNfZmxvd193YWl0ZXI7XFxuIDM0OTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQvKiB3NCBuZXh0IGxsYyBldmVudCAqL1xcbiAzNTA6XFx0XFx0XFx0XFx0d2FpdF9xdWV1ZV9oZWFkX3RcXHRsbGNfbXNnX3dhaXRlcjtcXG4gMzUxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdC8qIHc0IG5leHQgbGxjIG1zZyAqL1xcbiAzNTI6XFx0XFx0XFx0XFx0c3RydWN0IHNtY19sbGNfZmxvd1xcdGxsY19mbG93X2xjbDtcXG4gMzUzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdC8qIGxsYyBsb2NhbCBjb250cm9sIGZpZWxkICovXFxuIDM1NDpcXHRcXHRcXHRcXHRzdHJ1Y3Qgc21jX2xsY19mbG93XFx0bGxjX2Zsb3dfcm10O1xcbiAzNTU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0LyogbGxjIHJlbW90ZSBjb250cm9sIGZpZWxkICovXFxuIDM1NjpcXHRcXHRcXHRcXHRzdHJ1Y3Qgc21jX2xsY19xZW50cnlcXHQqZGVsYXllZF9ldmVudDtcXG4gMzU3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdC8qIGFycml2ZWQgd2hlbiBmbG93IGFjdGl2ZSAqL1xcbiAzNTg6XFx0XFx0XFx0XFx0c3BpbmxvY2tfdFxcdFxcdGxsY19mbG93X2xvY2s7XFxuIDM1OTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQvKiBwcm90ZWN0cyBsbGMgZmxvdyAqL1xcbiAzNjA6XFx0XFx0XFx0XFx0aW50XFx0XFx0XFx0bGxjX3Rlc3RsaW5rX3RpbWU7XFxuIDM2MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQvKiBsaW5rIGtlZXAgYWxpdmUgdGltZSAqL1xcbiAzNjI6XFx0XFx0XFx0XFx0dTMyXFx0XFx0XFx0bGxjX3Rlcm1pbmF0aW9uX3JzbjtcXG4gMzYzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdC8qIHJzbiBjb2RlIGZvciB0ZXJtaW5hdGlvbiAqL1xcbiAzNjQ6XFx0XFx0XFx0XFx0dThcXHRcXHRcXHRuZXh0aG9wX21hY1tFVEhfQUxFTl07XFxuIDM2NTpcXHRcXHRcXHRcXHR1OFxcdFxcdFxcdHVzZXNfZ2F0ZXdheTtcXG4gMzY2OlxcdFxcdFxcdFxcdF9fYmUzMlxcdFxcdFxcdHNhZGRyO1xcbiAzNjc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0LyogbmV0IG5hbWVzcGFjZSAqL1xcbiAzNjg6XFx0XFx0XFx0XFx0c3RydWN0IG5ldFxcdFxcdCpuZXQ7XFxuIDM2OTpcXHRcXHRcXHRcXHR1OFxcdFxcdFxcdG1heF9jb25ucztcXG4gMzcwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdC8qIG1heCBjb25uIGNhbiBiZSBhc3NpZ25lZCB0byBsZ3IgKi9cXG4gMzcxOlxcdFxcdFxcdFxcdHU4XFx0XFx0XFx0bWF4X2xpbmtzO1xcbiAzNzI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0LyogbWF4IGxpbmtzIGNhbiBiZSBhZGRlZCBpbiBsZ3IgKi9cXG4gMzczOlxcdFxcdFxcdFxcdHUxNlxcdFxcdFxcdG1heF9zZW5kX3dyO1xcbiAzNzQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0LyogbnVtYmVyIG9mIFdSIGJ1ZmZlcnMgb24gc2VuZCAqL1xcbiAzNzU6XFx0XFx0XFx0XFx0dTE2XFx0XFx0XFx0bWF4X3JlY3Zfd3I7XFxuIDM3NjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQvKiBudW1iZXIgb2YgV1IgYnVmZmVycyBvbiByZWN2ICovXFxuIDM3NzpcXHRcXHRcXHR9O1xcbiAzNzg6XFx0XFx0XFx0c3RydWN0IHsgLyogU01DLUQgKi9cXG4gMzc5OlxcdFxcdFxcdFxcdHN0cnVjdCBzbWNkX2dpZFxcdFxcdHBlZXJfZ2lkO1xcbiAzODA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0LyogUGVlciBHSUQgKHJlbW90ZSkgKi9cXG4gMzgxOlxcdFxcdFxcdFxcdHN0cnVjdCBzbWNkX2RldlxcdFxcdCpzbWNkO1xcbiAzODI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0LyogSVNNIGRldmljZSBmb3IgVkxBTiByZWcuICovXFxuIDM4MzpcXHRcXHRcXHRcXHR1OFxcdFxcdFxcdHBlZXJfc2h1dGRvd24gOiAxO1xcbiAzODQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0LyogcGVlciB0cmlnZ2VyZWQgc2h1dGRvd25uICovXFxuIDM4NTpcXHRcXHRcXHR9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDoyMjoyOS42MDYwMzQ4MjZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAyNjY4NzMzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBDcml0aWNhbCBNZW1vcnkgSW5pdGlhbGl6YXRpb24gRml4KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgc2VlIHNvbWV0aGluZyBpbXBvcnRhbnQuIFRoZSBjb2RlIG9yaWdpbmFsbHkgaGFkIGBtZW1zZXQoXHUwMDI2bGluay1cdTAwM2VsZ3ItXHUwMDNld3JfdHhfYnVmX3YyLCAwLCBzaXplb2YobGluay1cdTAwM2VsZ3ItXHUwMDNld3JfdHhfYnVmX3YyKSlgLiBSaWdodCwgYHdyX3R4X2J1Zl92MmAgaXMgKmFsc28qIGEgcG9pbnRlciwgYSBgc3RydWN0IHNtY193cl92Ml9idWYgKmAsIHNvIHRha2luZyBpdHMgYWRkcmVzcyBhbmQgemVyb2luZyB0aGUgKnBvaW50ZXIgaXRzZWxmKiBpcyBkZWZpbml0ZWx5IHdyb25nLiBUaGUgcGF0Y2ggaXMgY2hhbmdpbmcgaXQgdG8gYG1lbXNldChsaW5rLVx1MDAzZWxnci1cdTAwM2V3cl90eF9idWZfdjIsIDAsIHNpemVvZigqbGluay1cdTAwM2VsZ3ItXHUwMDNld3JfdHhfYnVmX3YyKSlgLiAgVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyB0aGlzIGlzIG5vdyBjb3JyZWN0bHkgemVyb2luZyB0aGUgYWN0dWFsIGB3cl90eF9idWZfdjJgIGJ1ZmZlciB0aGF0IHRoZSBwb2ludGVyIHJlZmVyZW5jZXMuXG5cbldhaXQgYSBtaW51dGUuLi4gaWYgdGhlIG9yaWdpbmFsIGNvZGUgd2FzIHplcm9pbmcgdGhlICpwb2ludGVyKiBhbmQgZXNzZW50aWFsbHkgY29ycnVwdGluZyBpdCwgdGhlbiB0aGF0IG1lYW5zIHRoZSBwb2ludGVyIHdvdWxkIGxpa2VseSBiZSBzZXQgdG8gYE5VTExgIChvciBzb21lIG90aGVyIGdhcmJhZ2UgdmFsdWUpLiBUaGF0IG1lYW5zIGFueSBzdWJzZXF1ZW50IGFjY2VzcyB0byBgbGluay1cdTAwM2VsZ3ItXHUwMDNld3JfdHhfYnVmX3YyYCBzaG91bGQgaGF2ZSB0cmlnZ2VyZWQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB3aGVyZSBgd3JfdHhfYnVmX3YyYCBpcyB1c2VkIHRvIGNvbmZpcm0gdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTI0OCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjIyOjMzLjYzMjcyNTE1NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1MTM1NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid3JfdHhfYnVmX3YyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX2NvcmUuaD0yODY9c3RydWN0IHNtY19saW5rX2dyb3VwIHtcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuaC0zMjItXFx0XFx0XFx0XFx0XFx0XFx0LyogV1IgdjIgcmVjdiBwYXlsb2FkIGJ1ZmZlciAqL1xcbm5ldC9zbWMvc21jX2NvcmUuaDozMjM6XFx0XFx0XFx0c3RydWN0IHNtY193cl92Ml9idWZcXHQqd3JfdHhfYnVmX3YyO1xcbm5ldC9zbWMvc21jX2NvcmUuaC0zMjQtXFx0XFx0XFx0XFx0XFx0XFx0LyogV1IgdjIgc2VuZCBwYXlsb2FkIGJ1ZmZlciAqL1xcbi0tXFxubmV0L3NtYy9zbWNfd3IuYz03Nz1zdGF0aWMgaW5saW5lIHZvaWQgc21jX3dyX3R4X3Byb2Nlc3NfY3FlKHN0cnVjdCBpYl93YyAqd2MpXFxuLS1cXG5uZXQvc21jL3NtY193ci5jLTEwMy1cXHRcXHQgICAgICAgc2l6ZW9mKCpsaW5rLVxcdTAwM2V3cl90eF92Ml9wZW5kKSk7XFxubmV0L3NtYy9zbWNfd3IuYzoxMDQ6XFx0XFx0bWVtc2V0KGxpbmstXFx1MDAzZWxnci1cXHUwMDNld3JfdHhfYnVmX3YyLCAwLFxcbm5ldC9zbWMvc21jX3dyLmM6MTA1OlxcdFxcdCAgICAgICBzaXplb2YoKmxpbmstXFx1MDAzZWxnci1cXHUwMDNld3JfdHhfYnVmX3YyKSk7XFxubmV0L3NtYy9zbWNfd3IuYy0xMDYtXFx0fSBlbHNlIHtcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmMtMTI0LVxcdFxcdFxcdCAgICAgICBzaXplb2YoKmxpbmstXFx1MDAzZXdyX3R4X3YyX3BlbmQpKTtcXG5uZXQvc21jL3NtY193ci5jOjEyNTpcXHRcXHRcXHRtZW1zZXQobGluay1cXHUwMDNlbGdyLVxcdTAwM2V3cl90eF9idWZfdjIsIDAsXFxubmV0L3NtYy9zbWNfd3IuYzoxMjY6XFx0XFx0XFx0ICAgICAgIHNpemVvZigqbGluay1cXHUwMDNlbGdyLVxcdTAwM2V3cl90eF9idWZfdjIpKTtcXG5uZXQvc21jL3NtY193ci5jLTEyNy1cXHRcXHR9XFxuLS1cXG5uZXQvc21jL3NtY193ci5jPTI2MD1pbnQgc21jX3dyX3R4X2dldF92Ml9zbG90KHN0cnVjdCBzbWNfbGluayAqbGluayxcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmMtMjgxLVxcdHdyX2liLVxcdTAwM2V3cl9pZCA9IHdyX2lkO1xcbm5ldC9zbWMvc21jX3dyLmM6MjgyOlxcdCp3cl9idWYgPSBsaW5rLVxcdTAwM2VsZ3ItXFx1MDAzZXdyX3R4X2J1Zl92MjtcXG5uZXQvc21jL3NtY193ci5jLTI4My1cXHQqd3JfcGVuZF9wcml2ID0gXFx1MDAyNndyX3BlbmQtXFx1MDAzZXByaXY7XFxuLS1cXG5uZXQvc21jL3NtY193ci5jPTI4Nz1pbnQgc21jX3dyX3R4X3B1dF9zbG90KHN0cnVjdCBzbWNfbGluayAqbGluayxcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmMtMzA4LVxcdFxcdCAgICAgICBzaXplb2YoKmxpbmstXFx1MDAzZXdyX3R4X3YyX3BlbmQpKTtcXG5uZXQvc21jL3NtY193ci5jOjMwOTpcXHRcXHRtZW1zZXQobGluay1cXHUwMDNlbGdyLVxcdTAwM2V3cl90eF9idWZfdjIsIDAsXFxubmV0L3NtYy9zbWNfd3IuYzozMTA6XFx0XFx0ICAgICAgIHNpemVvZigqbGluay1cXHUwMDNlbGdyLVxcdTAwM2V3cl90eF9idWZfdjIpKTtcXG5uZXQvc21jL3NtY193ci5jLTMxMS1cXHRcXHRyZXR1cm4gMTtcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmM9Njk4PXZvaWQgc21jX3dyX2ZyZWVfbGdyX21lbShzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncilcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmMtNzA0LVxcdGxnci1cXHUwMDNld3JfcnhfYnVmX3YyID0gTlVMTDtcXG5uZXQvc21jL3NtY193ci5jOjcwNTpcXHRrZnJlZShsZ3ItXFx1MDAzZXdyX3R4X2J1Zl92Mik7XFxubmV0L3NtYy9zbWNfd3IuYzo3MDY6XFx0bGdyLVxcdTAwM2V3cl90eF9idWZfdjIgPSBOVUxMO1xcbm5ldC9zbWMvc21jX3dyLmMtNzA3LX1cXG4tLVxcbm5ldC9zbWMvc21jX3dyLmM9NzQxPWludCBzbWNfd3JfYWxsb2NfbGdyX21lbShzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncilcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmMtNzQ4LVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm5ldC9zbWMvc21jX3dyLmM6NzQ5OlxcdGxnci1cXHUwMDNld3JfdHhfYnVmX3YyID0ga3phbGxvYyhTTUNfV1JfQlVGX1YyX1NJWkUsIEdGUF9LRVJORUwpO1xcbm5ldC9zbWMvc21jX3dyLmM6NzUwOlxcdGlmICghbGdyLVxcdTAwM2V3cl90eF9idWZfdjIpIHtcXG5uZXQvc21jL3NtY193ci5jLTc1MS1cXHRcXHRrZnJlZShsZ3ItXFx1MDAzZXdyX3J4X2J1Zl92Mik7XFxuLS1cXG5uZXQvc21jL3NtY193ci5jPTg3MT1pbnQgc21jX3dyX2NyZWF0ZV9saW5rKHN0cnVjdCBzbWNfbGluayAqbG5rKVxcbi0tXFxubmV0L3NtYy9zbWNfd3IuYy04OTctXFx0XFx0bG5rLVxcdTAwM2V3cl90eF92Ml9kbWFfYWRkciA9IGliX2RtYV9tYXBfc2luZ2xlKGliZGV2LFxcbm5ldC9zbWMvc21jX3dyLmM6ODk4OlxcdFxcdFxcdGxuay1cXHUwMDNlbGdyLVxcdTAwM2V3cl90eF9idWZfdjIsIFNNQ19XUl9CVUZfVjJfU0laRSxcXG5uZXQvc21jL3NtY193ci5jLTg5OS1cXHRcXHRcXHRETUFfVE9fREVWSUNFKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjI6MzMuNjc4MjQyOTI5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5NTQ3NjI2ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFNNQyBXcml0ZSBUcmFuc2FjdGlvbiBCdWZmZXIqKlxuXG5Pa2F5LCBzbyBgc21jX3dyX3R4X2dldF92Ml9zbG90YCBpcyByZXR1cm5pbmcgYGxpbmstXHUwMDNlbGdyLVx1MDAzZXdyX3R4X2J1Zl92MmAgdGhyb3VnaCBgKndyX2J1ZmAuIFRoZSBjYWxsZXIgdGhlbiBwb3B1bGF0ZXMgdGhpcyBidWZmZXIgYW5kIHNlbmRzIGl0LiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGlzOiBpZiBgc21jX3dyX3R4X3B1dF9zbG90YCBpcyBtaXN0YWtlbmx5IHplcm9pbmcgb3V0IHRoZSAqcG9pbnRlciogYGxpbmstXHUwMDNlbGdyLVx1MDAzZXdyX3R4X2J1Zl92MmAsIHRoZSBuZXh0IGNhbGwgdG8gYHNtY193cl90eF9nZXRfdjJfc2xvdGAgaXMgZ29pbmcgdG8gcmV0dXJuIGBOVUxMYCB2aWEgYCp3cl9idWZgLiBUaGVuLCB0aGUgY2FsbGVyIHdpbGwgdHJ5IHRvIGRlcmVmZXJlbmNlIGEgYE5VTExgIHBvaW50ZXIsIHdoaWNoIGlzIGEgY2xhc3NpYywgZWFzaWx5IGRldGVjdGFibGUgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIGFuZCBhIGtlcm5lbCBjcmFzaC5cblxuQnV0IHdhaXQsIGhvbGQgb24uIElzIGl0IHBvc3NpYmxlIHRoYXQgYGxpbmstXHUwMDNlbGdyLVx1MDAzZXdyX3R4X2J1Zl92MmAgKmlzbid0KiB6ZXJvZWQsIGFuZCB3ZSdyZSBwb3RlbnRpYWxseSBzZW5kaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBObywgdGhhdCdzIG5vdCBsaWtlbHkuIEkgcmVjYWxsIGl0J3MgYWxsb2NhdGVkIGluIGBzbWNfd3JfYWxsb2NfbGdyX21lbWAgdXNpbmcgYGt6YWxsb2MoU01DX1dSX0JVRl9WMl9TSVpFLCBHRlBfS0VSTkVMKTtgLiBUaGUgYGt6YWxsb2NgIGZ1bmN0aW9uIGd1YXJhbnRlZXMgdGhlIG1lbW9yeSBpcyB6ZXJvZWQgb3V0IGluaXRpYWxseS4gU28sIHRoZSBidWZmZXIgaXMgYWxsb2NhdGVkLCB6ZXJvZWQsIHVzZWQgdG8gdHJhbnNtaXQgZGF0YSwgYW5kIHRoZW4gYHNtY193cl90eF9wdXRfc2xvdGAgaXMgY2FsbGVkIHRvIGNsZWFyIGl0IGZvciBzdWJzZXF1ZW50IHVzZS4gVGhlIHByb2JsZW0gaXMgdGhhdCB0aGUgY2xlYXJpbmcgbWF5IGJlIGZhaWxpbmcuIFRoZSBidWcgaXMgdGhhdCBpdCBpcyBzdXBwb3NlZCB0byBjbGVhciB0aGUgKmJ1ZmZlciogYnV0IGl0IGlzIGNsZWFyaW5nIHRoZSAqcG9pbnRlciosIHdoaWNoIHdvdWxkIHJlc3VsdCBpbiBhIE5VTEwgcG9pbnRlci4gVGhlIHBvaW50ZXIgYmVjb21lcyBOVUxMLlxuXG5TbywgaGVyZSdzIHRoZSBzZXF1ZW5jZTogYHNtY193cl90eF9nZXRfdjJfc2xvdGAgcmV0dXJucyBhIHZhbGlkIHBvaW50ZXIgKGluaXRpYWxseSB6ZXJvZWQpLiBUaGUgY2FsbGVyIHVzZXMgaXQsIHRoZW4gYHNtY193cl90eF9wdXRfc2xvdGAgZWZmZWN0aXZlbHkgdHVybnMgaXQgaW50byBhIGBOVUxMYCBwb2ludGVyLiBUaGUgbmV4dCBjYWxsIHRvIGBzbWNfd3JfdHhfZ2V0X3YyX3Nsb3RgIHJldHVybnMgYE5VTExgLCBhbmQgdGhlIGNhbGxlciB0aGVuIHRyaWVzIHRvIHdyaXRlIHRvIGl0LCBjYXVzaW5nIGEgY3Jhc2guXG5cbkkgbmVlZCB0byBpbW1lZGlhdGVseSBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHNtY193cl90eF9wdXRfc2xvdGAuIFRoYXQncyB3aGVyZSB0aGUgcHJvYmxlbSBhbG1vc3QgY2VydGFpbmx5IGxpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDAxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjIyOjQwLjYzMzAwNzk5MloiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc21jL3NtY193ci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4NyxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI4NzpcXHRpbnQgc21jX3dyX3R4X3B1dF9zbG90KHN0cnVjdCBzbWNfbGluayAqbGluayxcXG4gMjg4OlxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRfcHJpdiAqd3JfcGVuZF9wcml2KVxcbiAyODk6XFx0e1xcbiAyOTA6XFx0XFx0c3RydWN0IHNtY193cl90eF9wZW5kICpwZW5kO1xcbiAyOTE6XFx0XFxuIDI5MjpcXHRcXHRwZW5kID0gY29udGFpbmVyX29mKHdyX3BlbmRfcHJpdiwgc3RydWN0IHNtY193cl90eF9wZW5kLCBwcml2KTtcXG4gMjkzOlxcdFxcdGlmIChwZW5kLVxcdTAwM2VpZHggXFx1MDAzYyBsaW5rLVxcdTAwM2V3cl90eF9jbnQpIHtcXG4gMjk0OlxcdFxcdFxcdHUzMiBpZHggPSBwZW5kLVxcdTAwM2VpZHg7XFxuIDI5NTpcXHRcXG4gMjk2OlxcdFxcdFxcdC8qIGNsZWFyIHRoZSBmdWxsIHN0cnVjdCBzbWNfd3JfdHhfcGVuZCBpbmNsdWRpbmcgLnByaXYgKi9cXG4gMjk3OlxcdFxcdFxcdG1lbXNldChcXHUwMDI2bGluay1cXHUwMDNld3JfdHhfcGVuZHNbaWR4XSwgMCxcXG4gMjk4OlxcdFxcdFxcdCAgICAgICBzaXplb2YobGluay1cXHUwMDNld3JfdHhfcGVuZHNbaWR4XSkpO1xcbiAyOTk6XFx0XFx0XFx0bWVtc2V0KFxcdTAwMjZsaW5rLVxcdTAwM2V3cl90eF9idWZzW2lkeF0sIDAsXFxuIDMwMDpcXHRcXHRcXHQgICAgICAgc2l6ZW9mKGxpbmstXFx1MDAzZXdyX3R4X2J1ZnNbaWR4XSkpO1xcbiAzMDE6XFx0XFx0XFx0dGVzdF9hbmRfY2xlYXJfYml0KGlkeCwgbGluay1cXHUwMDNld3JfdHhfbWFzayk7XFxuIDMwMjpcXHRcXHRcXHR3YWtlX3VwKFxcdTAwMjZsaW5rLVxcdTAwM2V3cl90eF93YWl0KTtcXG4gMzAzOlxcdFxcdFxcdHJldHVybiAxO1xcbiAzMDQ6XFx0XFx0fSBlbHNlIGlmIChsaW5rLVxcdTAwM2VsZ3ItXFx1MDAzZXNtY192ZXJzaW9uID09IFNNQ19WMiBcXHUwMDI2XFx1MDAyNlxcbiAzMDU6XFx0XFx0XFx0ICAgcGVuZC1cXHUwMDNlaWR4ID09IGxpbmstXFx1MDAzZXdyX3R4X2NudCkge1xcbiAzMDY6XFx0XFx0XFx0LyogTGFyZ2UgdjIgYnVmZmVyICovXFxuIDMwNzpcXHRcXHRcXHRtZW1zZXQobGluay1cXHUwMDNld3JfdHhfdjJfcGVuZCwgMCxcXG4gMzA4OlxcdFxcdFxcdCAgICAgICBzaXplb2YoKmxpbmstXFx1MDAzZXdyX3R4X3YyX3BlbmQpKTtcXG4gMzA5OlxcdFxcdFxcdG1lbXNldChsaW5rLVxcdTAwM2VsZ3ItXFx1MDAzZXdyX3R4X2J1Zl92MiwgMCxcXG4gMzEwOlxcdFxcdFxcdCAgICAgICBzaXplb2YoKmxpbmstXFx1MDAzZWxnci1cXHUwMDNld3JfdHhfYnVmX3YyKSk7XFxuIDMxMTpcXHRcXHRcXHRyZXR1cm4gMTtcXG4gMzEyOlxcdFxcdH1cXG4gMzEzOlxcdFxcbiAzMTQ6XFx0XFx0cmV0dXJuIDA7XFxuIDMxNTpcXHR9XFxuIDMxNjpcXHRcXG4gMzE3OlxcdC8qIFNlbmQgcHJlcGFyZWQgV1Igc2xvdCB2aWEgaWJfcG9zdF9zZW5kLlxcbiAzMTg6XFx0ICogQHByaXY6IHBvaW50ZXIgdG8gc21jX3dyX3R4X3BlbmRfcHJpdiBpZGVudGlmeWluZyBwcmVwYXJlZCBtZXNzYWdlIGJ1ZmZlclxcbiAzMTk6XFx0ICovXFxuIDMyMDpcXHRpbnQgc21jX3dyX3R4X3NlbmQoc3RydWN0IHNtY19saW5rICpsaW5rLCBzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRfcHJpdiAqcHJpdilcXG4gMzIxOlxcdHtcXG4gMzIyOlxcdFxcdHN0cnVjdCBzbWNfd3JfdHhfcGVuZCAqcGVuZDtcXG4gMzIzOlxcdFxcdGludCByYztcXG4gMzI0OlxcdFxcbiAzMjU6XFx0XFx0aWJfcmVxX25vdGlmeV9jcShsaW5rLVxcdTAwM2VzbWNpYmRldi1cXHUwMDNlcm9jZV9jcV9zZW5kLFxcbiAzMjY6XFx0XFx0XFx0XFx0IElCX0NRX05FWFRfQ09NUCB8IElCX0NRX1JFUE9SVF9NSVNTRURfRVZFTlRTKTtcXG4gMzI3OlxcdFxcdHBlbmQgPSBjb250YWluZXJfb2YocHJpdiwgc3RydWN0IHNtY193cl90eF9wZW5kLCBwcml2KTtcXG4gMzI4OlxcdFxcdHJjID0gaWJfcG9zdF9zZW5kKGxpbmstXFx1MDAzZXJvY2VfcXAsIFxcdTAwMjZsaW5rLVxcdTAwM2V3cl90eF9pYnNbcGVuZC1cXHUwMDNlaWR4XSwgTlVMTCk7XFxuIDMyOTpcXHRcXHRpZiAocmMpIHtcXG4gMzMwOlxcdFxcdFxcdHNtY193cl90eF9wdXRfc2xvdChsaW5rLCBwcml2KTtcXG4gMzMxOlxcdFxcdFxcdHNtY3JfbGlua19kb3duX2NvbmRfc2NoZWQobGluayk7XFxuIDMzMjpcXHRcXHR9XFxuIDMzMzpcXHRcXHRyZXR1cm4gcmM7XFxuIDMzNDpcXHR9XFxuIDMzNTpcXHRcXG4gMzM2OlxcdGludCBzbWNfd3JfdHhfdjJfc2VuZChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHN0cnVjdCBzbWNfd3JfdHhfcGVuZF9wcml2ICpwcml2LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDoyMjo0MC42MzMxMDYwNDJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ5NzgxNjI5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEMgQ29kZSBTbmlwcGV0KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGF0IGBtZW1zZXRgIGNhbGwgaW1tZWRpYXRlbHkgZ3JhYnMgbXkgYXR0ZW50aW9uLiBJIHNlZSB0aGF0IHRoZSBvcmlnaW5hbCBjb2RlIHNuaXBwZXQgaW52b2x2ZXMgdHdvIGBtZW1zZXRgIG9wZXJhdGlvbnMsIHRhcmdldGluZyBgbGluay1cdTAwM2V3cl90eF92Ml9wZW5kYCBhbmQgYGxpbmstXHUwMDNlbGdyLVx1MDAzZXdyX3R4X2J1Zl92MmAuIFRoZSBrZXkgaGVyZSwgYW5kIEknbSBzdXJlIEkgZG9uJ3QgbmVlZCB0byBwb2ludCB0aGlzIG91dCwgaXMgdW5kZXJzdGFuZGluZyB0aGUgZGF0YSB0eXBlcyBpbnZvbHZlZC5cblxuSSByZWNvZ25pemUgdGhhdCBib3RoIGBsaW5rLVx1MDAzZXdyX3R4X3YyX3BlbmRgIGFuZCBgbGluay1cdTAwM2VsZ3ItXHUwMDNld3JfdHhfYnVmX3YyYCBhcmUgKnBvaW50ZXJzKi4gVGhlIGNvZGUgaXMgY2xlYXJseSB6ZXJvaW5nIHRoZSAqbWVtb3J5IGFkZHJlc3MqIG9mIHRoZSBwb2ludGVycy4gYHNpemVvZigpYCB3aWxsIHJldHVybiB0aGUgc2l6ZSBvZiB0aGUgKnBvaW50ZXIgaXRzZWxmKiwgd2hpY2ggaXMgOCBieXRlcyBvbiBhIDY0LWJpdCBhcmNoaXRlY3R1cmUg4oCTIHN0YW5kYXJkIHN0dWZmLiBUaGVyZWZvcmUsIHRoZSBlZmZlY3Qgb2YgdGhlc2UgYG1lbXNldGAgY2FsbHMgaXMgdG8gZWZmZWN0aXZlbHkgbnVsbGlmeSB0aG9zZSBwb2ludGVycy5cblxuU2luY2UgdGhlc2UgcG9pbnRlcnMgYXJlIGluaXRpYWxpemVkIHRvIE5VTEwsIHRoZW4gaXQgd2lsbCBoYXZlIGltcGxpY2F0aW9ucyB3aGVuIHRoZSBgc21jX3dyX3R4X2dldF92Ml9zbG90YCBpcyBjYWxsZWQsIGFuZCBJIG5lZWQgdG8gcmV2aWV3IHRoaXMgZnVuY3Rpb24gbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4NTIsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDoyMjo0NS4xMzA5MjUwNDNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0ODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zbWMvc21jX3dyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjYwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjYwOlxcdGludCBzbWNfd3JfdHhfZ2V0X3YyX3Nsb3Qoc3RydWN0IHNtY19saW5rICpsaW5rLFxcbiAyNjE6XFx0XFx0XFx0XFx0ICBzbWNfd3JfdHhfaGFuZGxlciBoYW5kbGVyLFxcbiAyNjI6XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc21jX3dyX3YyX2J1ZiAqKndyX2J1ZixcXG4gMjYzOlxcdFxcdFxcdFxcdCAgc3RydWN0IHNtY193cl90eF9wZW5kX3ByaXYgKip3cl9wZW5kX3ByaXYpXFxuIDI2NDpcXHR7XFxuIDI2NTpcXHRcXHRzdHJ1Y3Qgc21jX3dyX3R4X3BlbmQgKndyX3BlbmQ7XFxuIDI2NjpcXHRcXHRzdHJ1Y3QgaWJfc2VuZF93ciAqd3JfaWI7XFxuIDI2NzpcXHRcXHR1NjQgd3JfaWQ7XFxuIDI2ODpcXHRcXG4gMjY5OlxcdFxcdGlmIChsaW5rLVxcdTAwM2V3cl90eF92Ml9wZW5kLVxcdTAwM2VpZHggPT0gbGluay1cXHUwMDNld3JfdHhfY250KVxcbiAyNzA6XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gMjcxOlxcdFxcbiAyNzI6XFx0XFx0KndyX2J1ZiA9IE5VTEw7XFxuIDI3MzpcXHRcXHQqd3JfcGVuZF9wcml2ID0gTlVMTDtcXG4gMjc0OlxcdFxcdHdyX2lkID0gc21jX3dyX3R4X2dldF9uZXh0X3dyX2lkKGxpbmspO1xcbiAyNzU6XFx0XFx0d3JfcGVuZCA9IGxpbmstXFx1MDAzZXdyX3R4X3YyX3BlbmQ7XFxuIDI3NjpcXHRcXHR3cl9wZW5kLVxcdTAwM2V3cl9pZCA9IHdyX2lkO1xcbiAyNzc6XFx0XFx0d3JfcGVuZC1cXHUwMDNlaGFuZGxlciA9IGhhbmRsZXI7XFxuIDI3ODpcXHRcXHR3cl9wZW5kLVxcdTAwM2VsaW5rID0gbGluaztcXG4gMjc5OlxcdFxcdHdyX3BlbmQtXFx1MDAzZWlkeCA9IGxpbmstXFx1MDAzZXdyX3R4X2NudDtcXG4gMjgwOlxcdFxcdHdyX2liID0gbGluay1cXHUwMDNld3JfdHhfdjJfaWI7XFxuIDI4MTpcXHRcXHR3cl9pYi1cXHUwMDNld3JfaWQgPSB3cl9pZDtcXG4gMjgyOlxcdFxcdCp3cl9idWYgPSBsaW5rLVxcdTAwM2VsZ3ItXFx1MDAzZXdyX3R4X2J1Zl92MjtcXG4gMjgzOlxcdFxcdCp3cl9wZW5kX3ByaXYgPSBcXHUwMDI2d3JfcGVuZC1cXHUwMDNlcHJpdjtcXG4gMjg0OlxcdFxcdHJldHVybiAwO1xcbiAyODU6XFx0fVxcbiAyODY6XFx0XFxuIDI4NzpcXHRpbnQgc21jX3dyX3R4X3B1dF9zbG90KHN0cnVjdCBzbWNfbGluayAqbGluayxcXG4gMjg4OlxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRfcHJpdiAqd3JfcGVuZF9wcml2KVxcbiAyODk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDoyMjo0NS4xMzEwMzExNTJaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ2NzA1ODkyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbW1lZGlhdGUgQnVnIEFuYWx5c2lzKipcblxuT2theSwgaGVyZSdzIHRoZSBkZWFsLiBJJ3ZlIGJlZW4gc3RhcmluZyBhdCB0aGlzIGNvZGUsIGFuZCBpdCdzIGhpdHRpbmcgbWUgcmlnaHQgYmV0d2VlbiB0aGUgZXllcy4gSWYgYGxpbmstXHUwMDNld3JfdHhfdjJfcGVuZGAgaXMgZXZlciB6ZXJv4oCUbWVhbmluZyBpdCdzIHBvaW50aW5nIHRvIG5vdGhpbmcsIGl0J3MgTlVMTOKAlHRoZW4gdGhhdCBsaW5lIGlzIGdvaW5nIHRvIGJsb3cgdXAuIFRyeWluZyB0byBhY2Nlc3MgYGxpbmstXHUwMDNld3JfdHhfdjJfcGVuZC1cdTAwM2VpZHhgIHdoZW4gdGhhdCBwb2ludGVyIGlzIGdhcmJhZ2UgaXMgYSBjbGFzc2ljIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4gQmFuZyEgSW5zdGFudCBjcmFzaC4gU28sIHRoZSBjb3JlIGlzc3VlIGlzIHN0cmFpZ2h0Zm9yd2FyZDogd2UncmUgZGVyZWZlcmVuY2luZyBhIE5VTEwgcG9pbnRlci5cblxuQnV0IEknbSBub3QganVzdCBzdG9wcGluZyBhdCB0aGUgZWFzeSBzdHVmZi4gSSBuZWVkIHRvIGtub3cgdGhlIGltcGxpY2F0aW9ucy4gSXMgdGhlcmUgYW55IGNoYW5jZSB0aGlzIGlzIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgdGhhdCBjb3VsZCBsZWFrIGluZm9ybWF0aW9uPyBJZiB0aGUgcG9pbnRlciBpcyB6ZXJvZWQsIGl0IGp1c3QgY3Jhc2hlcy4gQW5kIGhvdyBkb2VzIHRoYXQgZnVuY3Rpb24gYHNtY193cl90eF9wcm9jZXNzX2NxZWAgcmVsYXRlIHRvIGBzbWNfd3JfdHhfcHV0X3Nsb3RgP1xuXG5cbiIsIklucHV0VG9rZW5zIjoxMzk2OCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjIyOjQ5LjU5ODA5MjQ5OVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDc1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NtYy9zbWNfd3IuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NyxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA3NzpcXHRzdGF0aWMgaW5saW5lIHZvaWQgc21jX3dyX3R4X3Byb2Nlc3NfY3FlKHN0cnVjdCBpYl93YyAqd2MpXFxuICA3ODpcXHR7XFxuICA3OTpcXHRcXHRzdHJ1Y3Qgc21jX3dyX3R4X3BlbmQgcG5kX3NuZDtcXG4gIDgwOlxcdFxcdHN0cnVjdCBzbWNfbGluayAqbGluaztcXG4gIDgxOlxcdFxcdHUzMiBwbmRfc25kX2lkeDtcXG4gIDgyOlxcdFxcbiAgODM6XFx0XFx0bGluayA9IHdjLVxcdTAwM2VxcC1cXHUwMDNlcXBfY29udGV4dDtcXG4gIDg0OlxcdFxcbiAgODU6XFx0XFx0aWYgKHdjLVxcdTAwM2VvcGNvZGUgPT0gSUJfV0NfUkVHX01SKSB7XFxuICA4NjpcXHRcXHRcXHRpZiAod2MtXFx1MDAzZXN0YXR1cylcXG4gIDg3OlxcdFxcdFxcdFxcdGxpbmstXFx1MDAzZXdyX3JlZ19zdGF0ZSA9IEZBSUxFRDtcXG4gIDg4OlxcdFxcdFxcdGVsc2VcXG4gIDg5OlxcdFxcdFxcdFxcdGxpbmstXFx1MDAzZXdyX3JlZ19zdGF0ZSA9IENPTkZJUk1FRDtcXG4gIDkwOlxcdFxcdFxcdHNtY193cl93YWtldXBfcmVnX3dhaXQobGluayk7XFxuICA5MTpcXHRcXHRcXHRyZXR1cm47XFxuICA5MjpcXHRcXHR9XFxuICA5MzpcXHRcXG4gIDk0OlxcdFxcdHBuZF9zbmRfaWR4ID0gc21jX3dyX3R4X2ZpbmRfcGVuZGluZ19pbmRleChsaW5rLCB3Yy1cXHUwMDNld3JfaWQpO1xcbiAgOTU6XFx0XFx0aWYgKHBuZF9zbmRfaWR4ID09IGxpbmstXFx1MDAzZXdyX3R4X2NudCkge1xcbiAgOTY6XFx0XFx0XFx0aWYgKGxpbmstXFx1MDAzZWxnci1cXHUwMDNlc21jX3ZlcnNpb24gIT0gU01DX1YyIHx8XFxuICA5NzpcXHRcXHRcXHQgICAgbGluay1cXHUwMDNld3JfdHhfdjJfcGVuZC1cXHUwMDNld3JfaWQgIT0gd2MtXFx1MDAzZXdyX2lkKVxcbiAgOTg6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiAgOTk6XFx0XFx0XFx0bGluay1cXHUwMDNld3JfdHhfdjJfcGVuZC1cXHUwMDNld2Nfc3RhdHVzID0gd2MtXFx1MDAzZXN0YXR1cztcXG4gMTAwOlxcdFxcdFxcdG1lbWNweShcXHUwMDI2cG5kX3NuZCwgbGluay1cXHUwMDNld3JfdHhfdjJfcGVuZCwgc2l6ZW9mKHBuZF9zbmQpKTtcXG4gMTAxOlxcdFxcdFxcdC8qIGNsZWFyIHRoZSBmdWxsIHN0cnVjdCBzbWNfd3JfdHhfcGVuZCBpbmNsdWRpbmcgLnByaXYgKi9cXG4gMTAyOlxcdFxcdFxcdG1lbXNldChsaW5rLVxcdTAwM2V3cl90eF92Ml9wZW5kLCAwLFxcbiAxMDM6XFx0XFx0XFx0ICAgICAgIHNpemVvZigqbGluay1cXHUwMDNld3JfdHhfdjJfcGVuZCkpO1xcbiAxMDQ6XFx0XFx0XFx0bWVtc2V0KGxpbmstXFx1MDAzZWxnci1cXHUwMDNld3JfdHhfYnVmX3YyLCAwLFxcbiAxMDU6XFx0XFx0XFx0ICAgICAgIHNpemVvZigqbGluay1cXHUwMDNlbGdyLVxcdTAwM2V3cl90eF9idWZfdjIpKTtcXG4gMTA2OlxcdFxcdH0gZWxzZSB7XFxuIDEwNzpcXHRcXHRcXHRsaW5rLVxcdTAwM2V3cl90eF9wZW5kc1twbmRfc25kX2lkeF0ud2Nfc3RhdHVzID0gd2MtXFx1MDAzZXN0YXR1cztcXG4gMTA4OlxcdFxcdFxcdGlmIChsaW5rLVxcdTAwM2V3cl90eF9wZW5kc1twbmRfc25kX2lkeF0uY29tcGxfcmVxdWVzdGVkKVxcbiAxMDk6XFx0XFx0XFx0XFx0Y29tcGxldGUoXFx1MDAyNmxpbmstXFx1MDAzZXdyX3R4X2NvbXBsW3BuZF9zbmRfaWR4XSk7XFxuIDExMDpcXHRcXHRcXHRtZW1jcHkoXFx1MDAyNnBuZF9zbmQsIFxcdTAwMjZsaW5rLVxcdTAwM2V3cl90eF9wZW5kc1twbmRfc25kX2lkeF0sXFxuIDExMTpcXHRcXHRcXHQgICAgICAgc2l6ZW9mKHBuZF9zbmQpKTtcXG4gMTEyOlxcdFxcdFxcdC8qIGNsZWFyIHRoZSBmdWxsIHN0cnVjdCBzbWNfd3JfdHhfcGVuZCBpbmNsdWRpbmcgLnByaXYgKi9cXG4gMTEzOlxcdFxcdFxcdG1lbXNldChcXHUwMDI2bGluay1cXHUwMDNld3JfdHhfcGVuZHNbcG5kX3NuZF9pZHhdLCAwLFxcbiAxMTQ6XFx0XFx0XFx0ICAgICAgIHNpemVvZihsaW5rLVxcdTAwM2V3cl90eF9wZW5kc1twbmRfc25kX2lkeF0pKTtcXG4gMTE1OlxcdFxcdFxcdG1lbXNldChcXHUwMDI2bGluay1cXHUwMDNld3JfdHhfYnVmc1twbmRfc25kX2lkeF0sIDAsXFxuIDExNjpcXHRcXHRcXHQgICAgICAgc2l6ZW9mKGxpbmstXFx1MDAzZXdyX3R4X2J1ZnNbcG5kX3NuZF9pZHhdKSk7XFxuIDExNzpcXHRcXHRcXHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChwbmRfc25kX2lkeCwgbGluay1cXHUwMDNld3JfdHhfbWFzaykpXFxuIDExODpcXHRcXHRcXHRcXHRyZXR1cm47XFxuIDExOTpcXHRcXHR9XFxuIDEyMDpcXHRcXG4gMTIxOlxcdFxcdGlmICh3Yy1cXHUwMDNlc3RhdHVzKSB7XFxuIDEyMjpcXHRcXHRcXHRpZiAobGluay1cXHUwMDNlbGdyLVxcdTAwM2VzbWNfdmVyc2lvbiA9PSBTTUNfVjIpIHtcXG4gMTIzOlxcdFxcdFxcdFxcdG1lbXNldChsaW5rLVxcdTAwM2V3cl90eF92Ml9wZW5kLCAwLFxcbiAxMjQ6XFx0XFx0XFx0XFx0ICAgICAgIHNpemVvZigqbGluay1cXHUwMDNld3JfdHhfdjJfcGVuZCkpO1xcbiAxMjU6XFx0XFx0XFx0XFx0bWVtc2V0KGxpbmstXFx1MDAzZWxnci1cXHUwMDNld3JfdHhfYnVmX3YyLCAwLFxcbiAxMjY6XFx0XFx0XFx0XFx0ICAgICAgIHNpemVvZigqbGluay1cXHUwMDNlbGdyLVxcdTAwM2V3cl90eF9idWZfdjIpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjI6NDkuNTk4MjA1Nzg5WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMTM1Njk3NTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU01DIFdyaXRlIFRyYW5zYWN0aW9uIENvZGUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEluIGBzbWNfd3JfdHhfcHJvY2Vzc19jcWVgLCBJIHNlZSB0aGUgY29kZSBleHBsaWNpdGx5IHplcm9pbmcgb3V0IGBsaW5rLVx1MDAzZXdyX3R4X3YyX3BlbmRgIGFuZCBgbGluay1cdTAwM2VsZ3ItXHUwMDNld3JfdHhfYnVmX3YyYC4gVGhhdCdzIGdvb2Q7IGl0IGNvbmZpcm1zIHRoYXQgdGhlIGluaXRpYWwgdGhvdWdodCBhYm91dCB0aGUgaXNzdWUgaW4gdGhhdCBmdW5jdGlvbiBpcyBjb3JyZWN0LCBhbmQgbm90IHRoZSBzb3VyY2Ugb2YgdGhlIHByb2JsZW0uXG5cblRoZSBidWcsIHRoZW4sIHNlZW1zIHRvIHJlc2lkZSBzcXVhcmVseSBpbiBgc21jX3dyX3R4X3B1dF9zbG90YC4gVGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkIHdoZW4gYGliX3Bvc3Rfc2VuZGAgZmFpbHMsIG9yIHdoZW4gYSBzbG90IGlzIHJldHVybmVkIHdpdGhvdXQgc2VuZGluZy4gSXQgemVyb2VzIGEgcG9pbnRlciwgYW5kIGFmdGVyIHRoYXQsIHRoZSBwb2ludGVyIGlzIHNldCB0byBOVUxMLiBUaGUgaW1wbGljYXRpb24gaXMgdGhhdCBzdWJzZXF1ZW50IGNhbGxzIHRvIGBzbWNfd3JfdHhfZ2V0X3YyX3Nsb3RgIG9yIGBzbWNfd3JfdHhfcHJvY2Vzc19jcWVgIHdpbGwgdGhlbiBkZXJlZmVyZW5jZSBhIE5VTEwgcG9pbnRlci4gQSBjbGFzc2ljLCBuYXN0eSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIEdvdCBpdC5cblxuTm93LCB0aGF0IG90aGVyIHBhcnQgb2YgdGhlIHBhdGNoLi4uIHRoZSBvbmUgdGhhdCBhbHRlcnMgdGhlIHdhaXRpbmcgbWVjaGFuaXNtLiBXaHkgc3dpdGNoIGZyb20gYHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0YCB0byB0aGF0IG9wZW4tY29kZWQgd2FpdCBsb29wIHdpdGggYHByZXBhcmVfdG9fd2FpdF9leGNsdXNpdmVgPyBBaCwgcmlnaHQuIGB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dGAgdXNlcyBgcHJlcGFyZV90b193YWl0YCwgd2hpY2ggaXNuJ3QgZXhjbHVzaXZlLiBUaGlzIG1lYW5zIHdoZW4gYSBzbG90ICpkb2VzKiBiZWNvbWUgZnJlZSwgbXVsdGlwbGUgdGhyZWFkcyBjb3VsZCBnZXQgd29rZW4gdXAg4oCTIGEgXCJ0aHVuZGVyaW5nIGhlcmRcIiBzY2VuYXJpby4gYHByZXBhcmVfdG9fd2FpdF9leGNsdXNpdmVgLCBob3dldmVyLCB3YWtlcyAqb25seSBvbmUqIHdhaXRpbmcgdGhyZWFkLiBUaGlzIGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBwcmV2ZW50aW5nIHRoZSB3YXN0ZSBvZiBhIHRodW5kZXJpbmcgaGVyZCwgYW5kIGFsc28gbWFrZXMgdGhlIGNvZGUgbW9yZSByb2J1c3QgYWdhaW5zdCByYWNlIGNvbmRpdGlvbnMuIEl0J3MgYSBjb25jdXJyZW5jeSBpbXByb3ZlbWVudCwgcmVhbGx5LCBub3QgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgSSB0aG91Z2h0IGFib3V0LlxuXG5IYW5nIG9uLiBMZXQncyBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIHNvbWV0aGluZy4gSWYgd2UgKndlcmUqIHVzaW5nIGB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dGAsIG11bHRpcGxlIHRocmVhZHMgY291bGQgd2FrZSB1cCwgYW5kIHRoZW4gYHNtY193cl90eF9nZXRfZnJlZV9zbG90X2luZGV4YCBtaWdodCBnaXZlIHRoZSBzYW1lIGluZGV4IHRvIG11bHRpcGxlIHRocmVhZHMuIEJ1dC4uLiB3YWl0LiBgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RfaW5kZXhgIHVzZXMgYHRlc3RfYW5kX3NldF9iaXRgLiBUaGF0ICpzaG91bGQqIGVuc3VyZSBhdG9taWNpdHkgYW5kIHByZXZlbnQgdGhlIHJhY2UuIFNvLCBubywgdGhlIHN3aXRjaCB0byBleGNsdXNpdmUgd2FpdGluZyBpcyAqcHJpbWFyaWx5KiBhYm91dCB0aGUgcGVyZm9ybWFuY2UgZ2FpbiBmcm9tIGF2b2lkaW5nIHRoZSB0aHVuZGVyaW5nIGhlcmQuIEl0J3MgYSBwZXJmb3JtYW5jZS9jb25jdXJyZW5jeSBpbXByb3ZlbWVudC4gVGhlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1ZyBpcyBzdGlsbCB0aGUgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBzbWNfd3JfdHhfcHV0X3Nsb3RgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTMxNiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDoyMjo1OS43MzM5MDYzNTZaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTk2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NtYy9zbWNfd3IuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxODA6XFx0XFx0KmlkeCA9IGxpbmstXFx1MDAzZXdyX3R4X2NudDtcXG4gMTgxOlxcdFxcdHJldHVybiAtRUJVU1k7XFxuIDE4MjpcXHR9XFxuIDE4MzpcXHRcXG4gMTg0OlxcdC8qKlxcbiAxODU6XFx0ICogc21jX3dyX3R4X2dldF9mcmVlX3Nsb3QoKSAtIHJldHVybnMgYnVmZmVyIGZvciBtZXNzYWdlIGFzc2VtYmx5LFxcbiAxODY6XFx0ICpcXHRcXHRcXHRhbmQgc2V0cyBpbmZvIGZvciBwZW5kaW5nIHRyYW5zbWl0IHRyYWNraW5nXFxuIDE4NzpcXHQgKiBAbGluazpcXHRcXHRQb2ludGVyIHRvIHNtY19saW5rIHVzZWQgdG8gbGF0ZXIgc2VuZCB0aGUgbWVzc2FnZS5cXG4gMTg4OlxcdCAqIEBoYW5kbGVyOlxcdFxcdFNlbmQgY29tcGxldGlvbiBoYW5kbGVyIGZ1bmN0aW9uIHBvaW50ZXIuXFxuIDE4OTpcXHQgKiBAd3JfYnVmOlxcdFxcdE91dCB2YWx1ZSByZXR1cm5zIHBvaW50ZXIgdG8gbWVzc2FnZSBidWZmZXIuXFxuIDE5MDpcXHQgKiBAd3JfcmRtYV9idWY6XFx0T3V0IHZhbHVlIHJldHVybnMgcG9pbnRlciB0byByZG1hIHdvcmsgcmVxdWVzdC5cXG4gMTkxOlxcdCAqIEB3cl9wZW5kX3ByaXY6XFx0T3V0IHZhbHVlIHJldHVybnMgcG9pbnRlciBzZXJ2aW5nIGFzIGhhbmRsZXIgY29udGV4dC5cXG4gMTkyOlxcdCAqXFxuIDE5MzpcXHQgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgLWVycm5vIG9uIGVycm9yLlxcbiAxOTQ6XFx0ICovXFxuIDE5NTpcXHRpbnQgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3Qoc3RydWN0IHNtY19saW5rICpsaW5rLFxcbiAxOTY6XFx0XFx0XFx0XFx0ICAgIHNtY193cl90eF9oYW5kbGVyIGhhbmRsZXIsXFxuIDE5NzpcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNtY193cl9idWYgKip3cl9idWYsXFxuIDE5ODpcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNtY19yZG1hX3dyICoqd3JfcmRtYV9idWYsXFxuIDE5OTpcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNtY193cl90eF9wZW5kX3ByaXYgKip3cl9wZW5kX3ByaXYpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjIyOjU5LjczNDAwNzY0NloiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjM2MTUxNDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhhdCBmdW5jdGlvbiBjYWxsOlxuXG4qKkFuYWx5emluZyBgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RfaW5kZXhgKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBmdW5jdGlvbiBuYW1lLCBgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RfaW5kZXhgLiBCYXNlZCBvbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24sIHdoaWNoIHNlZW1zIHByZXR0eSBzdGFuZGFyZCwgSSBjYW4gaW1tZWRpYXRlbHkgaW5mZXIgYSBmZXcgdGhpbmdzLiBcInNtY1wiIGxpa2VseSByZWZlcnMgdG8gc29tZSBraW5kIG9mIFN5c3RlbSBNYW5hZ2VtZW50IENvbnRyb2xsZXIgb3IgYSBzaW1pbGFyIHBlcmlwaGVyYWwg4oCTIHBlcmhhcHMgcmVsYXRlZCB0byBzaGFyZWQgbWVtb3J5IGNvbW11bmljYXRpb24uIFwid3JcIiBwcm9iYWJseSBpbmRpY2F0ZXMgXCJ3cml0ZVwiIG9yIFwid3JpdGluZyxcIiBzcGVjaWZpY2FsbHkgZm9yIGEgdHJhbnNtaXNzaW9uLCBzbyBsaWtlbHkgdGhlIGZ1bmN0aW9uIGhhbmRsZXMgdHJhbnNhY3Rpb25zIGZyb20gdGhlIGNvbnRyb2xsZXIgdG8sIHNheSwgbWVtb3J5LiBcInR4XCIgZGVmaW5pdGVseSBtZWFucyBcInRyYW5zbWl0LlwiIEFuZCBmaW5hbGx5LCBcImdldF9mcmVlX3Nsb3RfaW5kZXhcIiBzY3JlYW1zIFwiZmluZCBhbiBhdmFpbGFibGUgYnVmZmVyL3Nsb3QvaW5kZXggd2l0aGluIGEgdHJhbnNtaXNzaW9uIGJ1ZmZlci5cIlxuXG5TbywgaW4gZXNzZW5jZSwgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlICpuZXh0KiBhdmFpbGFibGUgd3JpdGUgc2xvdCBvciBidWZmZXIgaW5kZXggd2l0aGluIGEgdHJhbnNtaXNzaW9uIHN0cnVjdHVyZSBtYW5hZ2VkIGJ5IHRoZSBTTUMuIEdpdmVuIG15IGV4cGVydGlzZSwgSSdkIGV4cGVjdCBpdCB0byBiZSBhIGNyaXRpY2FsIGNvbXBvbmVudCBmb3IgaGFuZGxpbmcgdGhlIHJhdGUgYW5kIGZsb3cgb2YgZGF0YSB0cmFuc2ZlcnMsIGVuc3VyaW5nIHRoYXQgd2UgZG9uJ3Qgb3ZlcndyaXRlIG9yIHN0YXJ2ZSB0aGUgdHJhbnNtaXNzaW9uIHByb2Nlc3MuIFRoaXMgc3VnZ2VzdHMgdGhlIGZ1bmN0aW9uIHdvdWxkIGxpa2VseSBiZSBjYWxsZWQgcHJpb3IgdG8gYWN0dWFsbHkgd3JpdGluZyBkYXRhIHRvIHRoZSB0cmFuc21pc3Npb24gYnVmZmVyLCB0byBkZXRlcm1pbmUgdGhlIGFwcHJvcHJpYXRlIG9mZnNldC4gVGhlIGZ1bmN0aW9uIHdpbGwgbGlrZWx5IG5lZWQgdG8gZGVhbCB3aXRoIHRoZSBwb2ludGVyIGFyaXRobWV0aWMgdG8gaGFuZGxlIHRoZSB2YXJpb3VzIHRyYW5zbWlzc2lvbiBzbG90cywgYW5kIHNob3VsZCBiZSBjYXJlZnVsbHkgcmV2aWV3ZWQgZm9yIHJhY2UgY29uZGl0aW9ucyBhbmQgcG90ZW50aWFsIGxvY2tpbmcgcmVxdWlyZW1lbnRzIGlmIHRoZSBTTUMgaXMgc2hhcmVkIHdpdGggb3RoZXIgY29udHJvbGxlcnMgb3IgdGhyZWFkcy4gQW55IHBvdGVudGlhbCBmb3IgYnVmZmVyIG92ZXJmbG93cyBvciB1bmRlcmZsb3dzIGlzIGFsc28gcGFyYW1vdW50LiBUaGlzIGNvdWxkIGJlIGEgY3JpdGljYWwgcGF0aCBmdW5jdGlvbiBzbyBjYXJlZnVsIHBlcmZvcm1hbmNlIGV2YWx1YXRpb24sIGFuZCBwb3RlbnRpYWwgb3B0aW1pemF0aW9ucyBzaG91bGQgYmUgY29uc2lkZXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyOTQsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjIzOjA1Ljk3MDE2MTMyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2NjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zbWMvc21jX3dyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTYwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTYwOlxcdH1cXG4gMTYxOlxcdFxcbiAxNjI6XFx0dm9pZCBzbWNfd3JfdHhfY3FfaGFuZGxlcihzdHJ1Y3QgaWJfY3EgKmliX2NxLCB2b2lkICpjcV9jb250ZXh0KVxcbiAxNjM6XFx0e1xcbiAxNjQ6XFx0XFx0c3RydWN0IHNtY19pYl9kZXZpY2UgKmRldiA9IChzdHJ1Y3Qgc21jX2liX2RldmljZSAqKWNxX2NvbnRleHQ7XFxuIDE2NTpcXHRcXG4gMTY2OlxcdFxcdHRhc2tsZXRfc2NoZWR1bGUoXFx1MDAyNmRldi1cXHUwMDNlc2VuZF90YXNrbGV0KTtcXG4gMTY3OlxcdH1cXG4gMTY4OlxcdFxcbiAxNjk6XFx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHJlcXVlc3Qgc3VibWlzc2lvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xcbiAxNzA6XFx0XFxuIDE3MTpcXHRzdGF0aWMgaW5saW5lIGludCBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdF9pbmRleChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHUzMiAqaWR4KVxcbiAxNzI6XFx0e1xcbiAxNzM6XFx0XFx0KmlkeCA9IGxpbmstXFx1MDAzZXdyX3R4X2NudDtcXG4gMTc0OlxcdFxcdGlmICghc21jX2xpbmtfc2VuZGFibGUobGluaykpXFxuIDE3NTpcXHRcXHRcXHRyZXR1cm4gLUVOT0xJTks7XFxuIDE3NjpcXHRcXHRmb3JfZWFjaF9jbGVhcl9iaXQoKmlkeCwgbGluay1cXHUwMDNld3JfdHhfbWFzaywgbGluay1cXHUwMDNld3JfdHhfY250KSB7XFxuIDE3NzpcXHRcXHRcXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoKmlkeCwgbGluay1cXHUwMDNld3JfdHhfbWFzaykpXFxuIDE3ODpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMTc5OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjM6MDUuOTcwMjU5MTRaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQzMjEwNDkzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIE1lbW9yeSBDb3JydXB0aW9uIGluIFNNQyBXcml0ZSBUWCoqXG5cbk9rYXksIHNvIGBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdF9pbmRleGAgaXMgZGVmaW5pdGVseSB0aHJlYWQtc2FmZTsgYHRlc3RfYW5kX3NldF9iaXRgIHRha2VzIGNhcmUgb2YgdGhhdC4gQW5kIHRoYXQgY2hhbmdlIHRvIGBwcmVwYXJlX3RvX3dhaXRfZXhjbHVzaXZlYD8gUHVyZWx5IGZvciBhdm9pZGluZyB0aGUgdGh1bmRlcmluZyBoZXJkLCB3aGljaCBtYWtlcyBzZW5zZS4gQnV0IHRoaXMgYG1lbXNldGAgZml44oCmIGl0J3MgZ290IG1lIHRoaW5raW5nLlxuXG5MZXQncyBzZWU6XG5gYGBjXG4tXHRcdG1lbXNldChcdTAwMjZsaW5rLVx1MDAzZXdyX3R4X3YyX3BlbmQsIDAsXG4tXHRcdCAgICAgICBzaXplb2YobGluay1cdTAwM2V3cl90eF92Ml9wZW5kKSk7XG4tXHRcdG1lbXNldChcdTAwMjZsaW5rLVx1MDAzZWxnci1cdTAwM2V3cl90eF9idWZfdjIsIDAsXG4tXHRcdCAgICAgICBzaXplb2YobGluay1cdTAwM2VsZ3ItXHUwMDNld3JfdHhfYnVmX3YyKSk7XG4rXHRcdG1lbXNldChsaW5rLVx1MDAzZXdyX3R4X3YyX3BlbmQsIDAsXG4rXHRcdCAgICAgICBzaXplb2YoKmxpbmstXHUwMDNld3JfdHhfdjJfcGVuZCkpO1xuK1x0XHRtZW1zZXQobGluay1cdTAwM2VsZ3ItXHUwMDNld3JfdHhfYnVmX3YyLCAwLFxuK1x0XHQgICAgICAgc2l6ZW9mKCpsaW5rLVx1MDAzZXdyX3R4X2J1Zl92MikpO1xuYGBgXG5cbkFscmlnaHQsIHNvIHRoZSBvcmlnaW5hbCBjb2RlIHdhcyB6ZXJvaW5nIHRoZSAqcG9pbnRlcnMqIHRoZW1zZWx2ZXMsIG5vdCB0aGUgbWVtb3J5IHRoZXkgcG9pbnQgdG8uIGBsaW5rLVx1MDAzZXdyX3R4X3YyX3BlbmRgIGlzIGEgcG9pbnRlciB0byBhIGBzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRgLCBhbmQgYGxpbmstXHUwMDNlbGdyLVx1MDAzZXdyX3R4X2J1Zl92MmAgaXMgYSBwb2ludGVyIHRvIGEgYHN0cnVjdCBzbWNfd3JfdjJfYnVmYC4gTm93LCB0aGUgY29kZSBub3cgemVyb2VzIHRoZSBzdHJ1Y3R1cmVzLiBUaGF0IG1lYW5zIHRoYXQgdGhlIG9sZCBjb2RlIHdhcyBsZWF2aW5nIHRoZSBwb2ludGVkLXRvIHN0cnVjdHVyZXMgdW5pbml0aWFsaXplZCwgYW5kIHRoaXMgbmV3IGNvZGUgY29ycmVjdHMgdGhhdC5cblxuV2FpdCBhIHNlY29uZOKApiBJZiB0aGUgcG9pbnRlcnMgd2VyZSBiZWluZyB6ZXJvZWQsIHRoZSBhY3R1YWwgZGF0YSBidWZmZXJzIHdlcmVuJ3QgYmVpbmcgY2xlYXJlZC4gVGhhdCBtZWFucyB0aGUgbmV4dCB0aW1lIHRob3NlIGJ1ZmZlcnMgd2VyZSB1c2VkLCB0aGV5IG1pZ2h0IGhhdmUgY29udGFpbmVkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGF0J3MgYSBodWdlIHBvdGVudGlhbCBzZWN1cml0eSBpc3N1ZS4gVGhlc2UgYXJlIG5ldHdvcmsgYnVmZmVyczsgaWYgdGhlcmUncyB1bmluaXRpYWxpemVkIG1lbW9yeSwgdGhhdCBjb3VsZCBtZWFuIGxlYWtpbmcgc2Vuc2l0aXZlIGluZm9ybWF0aW9uLlxuXG5MZXQncyBsb29rIGF0IGhvdyBgbGluay1cdTAwM2VsZ3ItXHUwMDNld3JfdHhfYnVmX3YyYCBpcyB1c2VkLiBSaWdodCwgaXQncyB1c2VkIHRvIHNlbmQgZGF0YSBvdmVyIHRoZSBuZXR3b3JrLiBJZiBpdCB3YXNuJ3QgemVyb2VkLCB0aGF0J3MgYSAqbWFzc2l2ZSogcHJvYmxlbS4gSSBuZWVkIHRvIGtub3cgaWYgd2UgYXJlIHBvc3NpYmx5IGxlYWtpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIExldCdzIHNlZS4uLiBgc21jX3dyX3R4X2dldF92Ml9zbG90YCByZXR1cm5zIGBsaW5rLVx1MDAzZWxnci1cdTAwM2V3cl90eF9idWZfdjJgIGFzIGAqd3JfYnVmYC4gVGhlbiB0aGUgY2FsbGVyIGZpbGxzIGl0IHdpdGggZGF0YSBhbmQgc2VuZHMgaXQuXG5cbk9rYXksIHRoZSBxdWVzdGlvbiBpczogZG9lcyB0aGUgY2FsbGVyIGZpbGwgdGhlICplbnRpcmUqIGJ1ZmZlciwgb3IgYXJlIHBhcnRzIG9mIGl0IGxlZnQgdW5pbml0aWFsaXplZD8gSWYgcGFydHMgYXJlIGxlZnQgdW5pbml0aWFsaXplZCwgYW5kIHRoZSBidWZmZXIgd2Fzbid0IHplcm9lZCwgd2UgY291bGQgYmUgc2VuZGluZyBnYXJiYWdlIGFjcm9zcyB0aGUgbmV0d29yaywgYW5kIHBvdGVudGlhbGx5IGxlYWtpbmcuIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbGVycyBvZiBgc21jX3dyX3R4X2dldF92Ml9zbG90YCBhbmQgdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgZGF0YSB0aGV5J3JlIHdyaXRpbmcuIFRoaXMgbmVlZHMgYSBkZWVwZXIgZGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwMzgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDoyMzoxMy40MDIzNjc5MzZaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDUxNDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNtY193cl90eF9nZXRfdjJfc2xvdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL3NtY19sbGMuYz00MjI9c3RhdGljIGludCBzbWNfbGxjX2FkZF9wZW5kaW5nX3NlbmRfdjIoc3RydWN0IHNtY19saW5rICpsaW5rLFxcbi0tXFxubmV0L3NtYy9zbWNfbGxjLmMtNDI3LVxcbm5ldC9zbWMvc21jX2xsYy5jOjQyODpcXHRyYyA9IHNtY193cl90eF9nZXRfdjJfc2xvdChsaW5rLCBzbWNfbGxjX3R4X2hhbmRsZXIsIHdyX2J1ZiwgcGVuZCk7XFxubmV0L3NtYy9zbWNfbGxjLmMtNDI5LVxcdGlmIChyYyBcXHUwMDNjIDApXFxuLS1cXG5uZXQvc21jL3NtY193ci5jPTE5NT1pbnQgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3Qoc3RydWN0IHNtY19saW5rICpsaW5rLFxcbi0tXFxubmV0L3NtYy9zbWNfd3IuYy0yNTktXFxubmV0L3NtYy9zbWNfd3IuYzoyNjA6aW50IHNtY193cl90eF9nZXRfdjJfc2xvdChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXFxubmV0L3NtYy9zbWNfd3IuYy0yNjEtXFx0XFx0XFx0ICBzbWNfd3JfdHhfaGFuZGxlciBoYW5kbGVyLFxcbi0tXFxubmV0L3NtYy9zbWNfd3IuaD0xMTM9aW50IHNtY193cl90eF9nZXRfZnJlZV9zbG90KHN0cnVjdCBzbWNfbGluayAqbGluaywgc21jX3dyX3R4X2hhbmRsZXIgaGFuZGxlcixcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmgtMTE2LVxcdFxcdFxcdCAgICBzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRfcHJpdiAqKndyX3BlbmRfcHJpdik7XFxubmV0L3NtYy9zbWNfd3IuaDoxMTc6aW50IHNtY193cl90eF9nZXRfdjJfc2xvdChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXFxubmV0L3NtYy9zbWNfd3IuaC0xMTgtXFx0XFx0XFx0ICBzbWNfd3JfdHhfaGFuZGxlciBoYW5kbGVyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDoyMzoxMy40NDY0MjQ2MTFaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwODg2NzE5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaWdnaW5nIGludG8gdGhlIEZ1bmN0aW9uIENhbGwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBpZWNlIG9mIGNvZGUsIGFuZCB0aGUga2V5IGZ1bmN0aW9uIGNhbGwgaXMgYHNtY19sbGNfYWRkX3BlbmRpbmdfc2VuZF92MmAuIFRoYXQncyB3aGVyZSB0aGUgYWN0aW9uIGlzLCBpdCBsb29rcyBsaWtlLiAgTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGludG8gdGhhdCBmdW5jdGlvbi4gTGV0J3Mgc2VlIHdoYXQgYHNtY19sbGNfYWRkX3BlbmRpbmdfc2VuZF92MmAgaXMgYWxsIGFib3V0LiBVbmRlcnN0YW5kaW5nIGl0cyBpbXBsZW1lbnRhdGlvbiBpcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHdoYXQncyBnb2luZyBvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGFyZ3VtZW50cywgaXRzIGNvbnRyb2wgZmxvdywgYW5kIGl0cyBzaWRlIGVmZmVjdHMuIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk3MTAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDoyMzoxNy4zNTUyOTQzNDVaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zbWMvc21jX2xsYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQyMixcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQyMjpcXHRzdGF0aWMgaW50IHNtY19sbGNfYWRkX3BlbmRpbmdfc2VuZF92MihzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXFxuIDQyMzpcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNtY193cl92Ml9idWYgKip3cl9idWYsXFxuIDQyNDpcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNtY193cl90eF9wZW5kX3ByaXYgKipwZW5kKVxcbiA0MjU6XFx0e1xcbiA0MjY6XFx0XFx0aW50IHJjO1xcbiA0Mjc6XFx0XFxuIDQyODpcXHRcXHRyYyA9IHNtY193cl90eF9nZXRfdjJfc2xvdChsaW5rLCBzbWNfbGxjX3R4X2hhbmRsZXIsIHdyX2J1ZiwgcGVuZCk7XFxuIDQyOTpcXHRcXHRpZiAocmMgXFx1MDAzYyAwKVxcbiA0MzA6XFx0XFx0XFx0cmV0dXJuIHJjO1xcbiA0MzE6XFx0XFx0cmV0dXJuIDA7XFxuIDQzMjpcXHR9XFxuIDQzMzpcXHRcXG4gNDM0OlxcdHN0YXRpYyB2b2lkIHNtY19sbGNfaW5pdF9tc2dfaGRyKHN0cnVjdCBzbWNfbGxjX2hkciAqaGRyLFxcbiA0MzU6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLCBzaXplX3QgbGVuKVxcbiA0MzY6XFx0e1xcbiA0Mzc6XFx0XFx0aWYgKGxnci1cXHUwMDNlc21jX3ZlcnNpb24gPT0gU01DX1YyKSB7XFxuIDQzODpcXHRcXHRcXHRoZHItXFx1MDAzZWNvbW1vbi5sbGNfdmVyc2lvbiA9IFNNQ19WMjtcXG4gNDM5OlxcdFxcdFxcdGhkci1cXHUwMDNlbGVuZ3RoX3YyID0gbGVuO1xcbiA0NDA6XFx0XFx0fSBlbHNlIHtcXG4gNDQxOlxcdFxcdFxcdGhkci1cXHUwMDNlY29tbW9uLmxsY192ZXJzaW9uID0gMDtcXG4gNDQyOlxcdFxcdFxcdGhkci1cXHUwMDNlbGVuZ3RoID0gbGVuO1xcbiA0NDM6XFx0XFx0fVxcbiA0NDQ6XFx0fVxcbiA0NDU6XFx0XFxuIDQ0NjpcXHQvKiBoaWdoLWxldmVsIEFQSSB0byBzZW5kIExMQyBjb25maXJtIGxpbmsgKi9cXG4gNDQ3OlxcdGludCBzbWNfbGxjX3NlbmRfY29uZmlybV9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluayxcXG4gNDQ4OlxcdFxcdFxcdFxcdCAgICAgIGVudW0gc21jX2xsY19yZXFyZXNwIHJlcXJlc3ApXFxuIDQ0OTpcXHR7XFxuIDQ1MDpcXHRcXHRzdHJ1Y3Qgc21jX2xsY19tc2dfY29uZmlybV9saW5rICpjb25mbGxjO1xcbiA0NTE6XFx0XFx0c3RydWN0IHNtY193cl90eF9wZW5kX3ByaXYgKnBlbmQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjIzOjE3LjM1NTQzMDg4NVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjk3NTM0MjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBDYWxsIFN0YWNrOiBgc21jX2xsY19hZGRfcGVuZGluZ19zZW5kX3YyYCoqXG5cbkFscmlnaHQsIEknbSBkaXZpbmcgaW4uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgc3Vycm91bmRpbmcgYHNtY19sbGNfYWRkX3BlbmRpbmdfc2VuZF92MmAuIEl0J3MgYSBrZXkgZnVuY3Rpb24sIGJ1dCB3aXRob3V0IGtub3dpbmcgdGhlIGNhbGxlcnMsIGl0cyBiZWhhdmlvciBpcyBnb2luZyB0byBiZSBvcGFxdWUuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhpcyBwb2ludC4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBjYWxsIHN0YWNrLCBuYXR1cmFsbHkuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSB1cHN0cmVhbSBmdW5jdGlvbnMgdGhhdCBhcmUgcmVzcG9uc2libGUgZm9yICppbnZva2luZyogdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uLiBJcyBpdCB0cmlnZ2VyZWQgYnkgYW4gaW50ZXJydXB0LCBhIHRhc2tsZXQsIG9yIGEgZGlyZWN0IGZ1bmN0aW9uIGNhbGwgZnJvbSBzb21lIG90aGVyIHBhcnQgb2YgdGhlIG5ldHdvcmsgc3RhY2ssIHBlcmhhcHMgcmVsYXRlZCB0byBzb2NrZXQgbWFuYWdlbWVudD8gRGV0ZXJtaW5pbmcgdGhlIGVudHJ5IHBvaW50cyB3aWxsIGluZm9ybSBtZSBhYm91dCB0aGUgcG90ZW50aWFsIHNvdXJjZXMgb2YgbGF0ZW5jeSwgZXJyb3JzLCBvciBpbmVmZmljaWVuY2llcyBpZiB0aGluZ3MgYXJlbid0IHdvcmtpbmcgYXMgZXhwZWN0ZWQuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBlZmZpY2llbmN5LCBzbyBrbm93aW5nIHdoZXJlIHRoZSBjYWxsIG9yaWdpbmF0ZXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgd2hhdCBkYXRhIGlzIGxpa2VseSBiZWluZyBwcm9jZXNzZWQgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBib3R0bGVuZWNrcyB1cHN0cmVhbS4gTGV0J3Mgc2VlIHdobydzIGRvaW5nIHRoZSBjYWxsaW5nIGFuZCBsZXQncyBnbyBmcm9tIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDQ0OCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjM6MjAuNjUyOTY3NTcyWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDA0OTI4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbWNfbGxjX2FkZF9wZW5kaW5nX3NlbmRfdjJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9zbWNfbGxjLmM9NDAwPXN0YXRpYyBpbnQgc21jX2xsY19hZGRfcGVuZGluZ19zZW5kKHN0cnVjdCBzbWNfbGluayAqbGluayxcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jLTQyMS1cXG5uZXQvc21jL3NtY19sbGMuYzo0MjI6c3RhdGljIGludCBzbWNfbGxjX2FkZF9wZW5kaW5nX3NlbmRfdjIoc3RydWN0IHNtY19saW5rICpsaW5rLFxcbm5ldC9zbWMvc21jX2xsYy5jLTQyMy1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNtY193cl92Ml9idWYgKip3cl9idWYsXFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYz02NDM9aW50IHNtY19sbGNfc2VuZF9hZGRfbGluayhzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHU4IG1hY1tdLCB1OCBnaWRbXSxcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jLTY1Ny1cXG5uZXQvc21jL3NtY19sbGMuYzo2NTg6XFx0XFx0cmMgPSBzbWNfbGxjX2FkZF9wZW5kaW5nX3NlbmRfdjIobGluaywgXFx1MDAyNndyX2J1ZiwgXFx1MDAyNnBlbmQpO1xcbm5ldC9zbWMvc21jX2xsYy5jLTY1OS1cXHRcXHRpZiAocmMpXFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYz0xMTI2PXN0YXRpYyB2b2lkIHNtY19sbGNfc2VuZF9yZXF1ZXN0X2FkZF9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluaylcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jLTExNDMtXFxubmV0L3NtYy9zbWNfbGxjLmM6MTE0NDpcXHRyYyA9IHNtY19sbGNfYWRkX3BlbmRpbmdfc2VuZF92MihsaW5rLCBcXHUwMDI2d3JfYnVmLCBcXHUwMDI2cGVuZCk7XFxubmV0L3NtYy9zbWNfbGxjLmMtMTE0NS1cXHRpZiAocmMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjIzOjIwLjY5NzAyMjEwN1oiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDgzMDM4NTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnM6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBMaW5rIEFkZGl0aW9uIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGxpbmsgYWRkaXRpb24gc2VxdWVuY2UsIHBhcnRpY3VsYXJseSB0aGUgc2lnbmFsaW5nLiBMZXQncyBzdGFydCBieSB0YWtpbmcgYSBjbG9zZXIgbG9vayBhdCBgc21jX2xsY19zZW5kX2FkZF9saW5rYCBhbmQgYHNtY19sbGNfc2VuZF9yZXF1ZXN0X2FkZF9saW5rYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgaG93IHRoZXNlIHR3byBmdW5jdGlvbnMgaW50ZXJhY3QuIEknbSB0aGlua2luZywgYXJlIHRoZXJlIHN1YnRsZSBkaWZmZXJlbmNlcyBpbiB0aGUgKnNlbmRpbmcqIGJlaGF2aW9yIGJldHdlZW4gdGhlIGluaXRpYWwgcmVxdWVzdCBhbmQgdGhlIGNvbmZpcm1hdGlvbiBwaGFzZT8gQXJlIHdlIGRlYWxpbmcgd2l0aCB0aGUgc2FtZSB1bmRlcmx5aW5nIG1lY2hhbmlzbSB3aXRoIHNsaWdodCB2YXJpYXRpb25zLCBvciBhcmUgdGhlc2UgZGlzdGluY3QgZnVuY3Rpb24gY2FsbHMgc2VydmluZyBmdW5kYW1lbnRhbGx5IHNlcGFyYXRlIHB1cnBvc2VzIGluIHRoZSBwcm90b2NvbD8gSSdtIGFudGljaXBhdGluZyBzb21lIGltcG9ydGFudCBkZXRhaWxzIHRvIHVucGFjayBoZXJlIHJlZ2FyZGluZyBlcnJvciBoYW5kbGluZywgcmV0cmFuc21pc3Npb25zLCBvciBwZXJoYXBzIGRpZmZlcmVudCBzZXRzIG9mIHBhcmFtZXRlcnMgcmVxdWlyZWQgaW4gZWFjaC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCB0byBzZWUgaWYgdGhlcmUgYXJlIG9wdGltaXphdGlvbnMgb3IgcG90ZW50aWFsIGFyZWFzIGZvciBpbXByb3ZlbWVudC4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExODUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDoyMzoyMy43ODAwNjMwMVoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjk4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NtYy9zbWNfbGxjLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjQzLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjQzOlxcdGludCBzbWNfbGxjX3NlbmRfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLCB1OCBtYWNbXSwgdTggZ2lkW10sXFxuIDY0NDpcXHRcXHRcXHRcXHQgIHN0cnVjdCBzbWNfbGluayAqbGlua19uZXcsXFxuIDY0NTpcXHRcXHRcXHRcXHQgIGVudW0gc21jX2xsY19yZXFyZXNwIHJlcXJlc3ApXFxuIDY0NjpcXHR7XFxuIDY0NzpcXHRcXHRzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtfdjJfZXh0ICpleHQgPSBOVUxMO1xcbiA2NDg6XFx0XFx0c3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rICphZGRsbGM7XFxuIDY0OTpcXHRcXHRzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRfcHJpdiAqcGVuZDtcXG4gNjUwOlxcdFxcdGludCBsZW4gPSBzaXplb2YoKmFkZGxsYyk7XFxuIDY1MTpcXHRcXHRpbnQgcmM7XFxuIDY1MjpcXHRcXG4gNjUzOlxcdFxcdGlmICghc21jX3dyX3R4X2xpbmtfaG9sZChsaW5rKSlcXG4gNjU0OlxcdFxcdFxcdHJldHVybiAtRU5PTElOSztcXG4gNjU1OlxcdFxcdGlmIChsaW5rLVxcdTAwM2VsZ3ItXFx1MDAzZXNtY192ZXJzaW9uID09IFNNQ19WMikge1xcbiA2NTY6XFx0XFx0XFx0c3RydWN0IHNtY193cl92Ml9idWYgKndyX2J1ZjtcXG4gNjU3OlxcdFxcbiA2NTg6XFx0XFx0XFx0cmMgPSBzbWNfbGxjX2FkZF9wZW5kaW5nX3NlbmRfdjIobGluaywgXFx1MDAyNndyX2J1ZiwgXFx1MDAyNnBlbmQpO1xcbiA2NTk6XFx0XFx0XFx0aWYgKHJjKVxcbiA2NjA6XFx0XFx0XFx0XFx0Z290byBwdXRfb3V0O1xcbiA2NjE6XFx0XFx0XFx0YWRkbGxjID0gKHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGluayAqKXdyX2J1ZjtcXG4gNjYyOlxcdFxcdFxcdGV4dCA9IChzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtfdjJfZXh0ICopXFxuIDY2MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2d3JfYnVmLVxcdTAwM2VyYXdbc2l6ZW9mKCphZGRsbGMpXTtcXG4gNjY0OlxcdFxcdFxcdG1lbXNldChleHQsIDAsIFNNQ19XUl9UWF9TSVpFKTtcXG4gNjY1OlxcdFxcdH0gZWxzZSB7XFxuIDY2NjpcXHRcXHRcXHRzdHJ1Y3Qgc21jX3dyX2J1ZiAqd3JfYnVmO1xcbiA2Njc6XFx0XFxuIDY2ODpcXHRcXHRcXHRyYyA9IHNtY19sbGNfYWRkX3BlbmRpbmdfc2VuZChsaW5rLCBcXHUwMDI2d3JfYnVmLCBcXHUwMDI2cGVuZCk7XFxuIDY2OTpcXHRcXHRcXHRpZiAocmMpXFxuIDY3MDpcXHRcXHRcXHRcXHRnb3RvIHB1dF9vdXQ7XFxuIDY3MTpcXHRcXHRcXHRhZGRsbGMgPSAoc3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rICopd3JfYnVmO1xcbiA2NzI6XFx0XFx0fVxcbiA2NzM6XFx0XFxuIDY3NDpcXHRcXHRtZW1zZXQoYWRkbGxjLCAwLCBzaXplb2YoKmFkZGxsYykpO1xcbiA2NzU6XFx0XFx0YWRkbGxjLVxcdTAwM2VoZC5jb21tb24ubGxjX3R5cGUgPSBTTUNfTExDX0FERF9MSU5LO1xcbiA2NzY6XFx0XFx0aWYgKHJlcXJlc3AgPT0gU01DX0xMQ19SRVNQKVxcbiA2Nzc6XFx0XFx0XFx0YWRkbGxjLVxcdTAwM2VoZC5mbGFncyB8PSBTTUNfTExDX0ZMQUdfUkVTUDtcXG4gNjc4OlxcdFxcdG1lbWNweShhZGRsbGMtXFx1MDAzZXNlbmRlcl9tYWMsIG1hYywgRVRIX0FMRU4pO1xcbiA2Nzk6XFx0XFx0bWVtY3B5KGFkZGxsYy1cXHUwMDNlc2VuZGVyX2dpZCwgZ2lkLCBTTUNfR0lEX1NJWkUpO1xcbiA2ODA6XFx0XFx0aWYgKGxpbmtfbmV3KSB7XFxuIDY4MTpcXHRcXHRcXHRhZGRsbGMtXFx1MDAzZWxpbmtfbnVtID0gbGlua19uZXctXFx1MDAzZWxpbmtfaWQ7XFxuIDY4MjpcXHRcXHRcXHRodG9uMjQoYWRkbGxjLVxcdTAwM2VzZW5kZXJfcXBfbnVtLCBsaW5rX25ldy1cXHUwMDNlcm9jZV9xcC1cXHUwMDNlcXBfbnVtKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjM6MjMuNzgwMTkzOTdaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU5MDQxODMxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJ1ZmZlciBaZXJvaW5nIGluIGBzbWNfbGxjX3NlbmRfYWRkX2xpbmtgKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJbiBgc21jX2xsY19zZW5kX2FkZF9saW5rYCwgcGFydGljdWxhcmx5IGZvciBTTUNfVjIgbGlua3MsIEkgc2VlIHdlIGFsbG9jYXRlIGEgd3JpdGUgYnVmZmVyIChgd3JfYnVmYCkgdXNpbmcgYHNtY19sbGNfYWRkX3BlbmRpbmdfc2VuZF92MmAuIE5vdywgdGhlIGNydWNpYWwgcGFydCBJJ20gZm9jdXNpbmcgb24gaXMgdGhlIGV4cGxpY2l0IHplcm9pbmcgb2YgbWVtb3J5LiBGaXJzdCwgYG1lbXNldChleHQsIDAsIFNNQ19XUl9UWF9TSVpFKWAgemVybydzIGBleHRgLiBUaGVuLCBgbWVtc2V0KGFkZGxsYywgMCwgc2l6ZW9mKCphZGRsbGMpKWAgemVybydzIGBhZGRsbGNgLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2h5IHRoZSBkb3VibGUgemVyb2luZz8gQm90aCBgZXh0YCBhbmQgYGFkZGxsY2AgYXJlIGJlaW5nIHplcm9lZC4gSWYgSSBsb29rIGF0IHRoZSBzaXplcywgSSBzZWUgYFNNQ19XUl9UWF9TSVpFYCBpcyA0NCBieXRlcyBhbmQgYHNpemVvZigqYWRkbGxjKWAgaXMgYWxzbyA0NC4gU28gZmFyLCB0aGUgYnVmZmVyIGFsbG9jYXRlZCBpcyBqdXN0IGJlaW5nIHplcm9lZCB0d2ljZSEgYGFkZGxsY2AgYXBwZWFycyB0byBiZSBjYXN0IGZyb20gdGhlIHNhbWUgYnVmZmVyIGFzIGB3cl9idWZgLiBUaGVuIGBleHRgIGlzIGNhc3QsIGFuZCBgYWRkbGxjYCBpcyB6ZXJvZWQuXG5cblRoaXMgbG9va3MgbGlrZSBgYWRkbGxjYCBhbmQgYGV4dGAgYXJlIHBhcnQgb2YgdGhlIHNhbWUgYWxsb2NhdGVkIGJ1ZmZlci4gSSdtIHNlZWluZyBhIHBvc3NpYmxlIHJlZHVuZGFuY3kgaGVyZSwgb3IgbWF5YmUgYSBkZXNpZ24gY2hvaWNlLiBUaGlzIGZlZWxzIGluZWZmaWNpZW50LiBXaGF0J3MgdGhlIGNvbXBsZXRlIHN0cnVjdHVyZT8gSSdtIG1pc3Npbmcgc29tZXRoaW5nLCBJIG5lZWQgdG8ga25vdyB0aGUgc2l6ZSBvZiBgc3RydWN0IHNtY193cl92Ml9idWZgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhpcyBidWZmZXIgYWxsb2NhdGlvbiBhbmQgemVyb2luZyBzZXF1ZW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIyNDksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDoyMzoyOS4zNzA2MTQ5MDFaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NzAyNzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBzbWNfd3JfdjJfYnVmIFxcXFx7XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX2NvcmUuaD02MT1zdHJ1Y3Qgc21jX3dyX2J1ZiB7XFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmgtNjQtXFxubmV0L3NtYy9zbWNfY29yZS5oOjY1OnN0cnVjdCBzbWNfd3JfdjJfYnVmIHtcXG5uZXQvc21jL3NtY19jb3JlLmgtNjYtXFx0dThcXHRyYXdbU01DX1dSX0JVRl9WMl9TSVpFXTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjM6MjkuNDE1MzIxNzE2WiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTQwNDQwMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgYFNNQ19XUl9CVUZfVjJfU0laRWAqKlxuXG5Pa2F5LCB0aW1lIHRvIGNpcmNsZSBiYWNrIHRvIGBTTUNfV1JfQlVGX1YyX1NJWkVgLiBJIG5lZWQgdG8gZW5zdXJlIGl0J3Mgc3RpbGwgY29uc2lzdGVudCB3aXRoIHRoZSBjdXJyZW50IGFyY2hpdGVjdHVyZS4gTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIGl0cyBkZWZpbml0aW9uLCBlc3BlY2lhbGx5IGlmIHRoZXJlIGhhdmUgYmVlbiBhbnkgcmVjZW50IG1vZGlmaWNhdGlvbnMgdG8gdGhlIG1lbW9yeSBtYXBwaW5nIG9yIGJ1ZmZlciBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMuIEknbSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgYWxpZ25tZW50IGlzc3VlcyBvciBmcmFnbWVudGF0aW9uIHByb2JsZW1zIGlmIHRoZSBzaXplIGlzbid0IHJpZ2h0LCB5b3Uga25vdywgdGhlIHVzdWFsIGN1bHByaXRzLiBJdCdzIGEgY3JpdGljYWwgcGFyYW1ldGVyOyBhbnkgZGV2aWF0aW9uIGNvdWxkIGxlYWQgdG8gb3ZlcmZsb3cgY29uZGl0aW9ucyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcywgc3BlY2lmaWNhbGx5LCBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggbGFyZ2VyIHRyYW5zYWN0aW9ucyBvciBtb3JlIGZyZXF1ZW50IHVwZGF0ZXMuIEdpdmVuIHRoZSBjb250ZXh0LCBJIHNob3VsZCBkb3VibGUtY2hlY2sgaXRzIHJlbGF0aW9uc2hpcCB3aXRoIGFueSBjYWNoZSBjb2hlcmVuY3kgcHJvdG9jb2xzIHdlJ3JlIHVzaW5nLiBJIHNob3VsZCBhbHNvIHNlZSBpZiB0aGVyZSdzIGJlZW4gYW55IGRlYmF0ZSBvciBkaXNjdXNzaW9uIG9uIGl0cyB2YWx1ZSByZWNlbnRseS4gUmlnaHQsIGxldCBtZSBwdWxsIHVwIHRoZSByZWxldmFudCBoZWFkZXIgZmlsZXMgYW5kIGRvY3VtZW50YXRpb27igKYgZ290IHRvIGtlZXAgYSBjbG9zZSBleWUgb24gdGhlc2UgdGhpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzA1NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjIzOjMyLjYyOTM2ODM3NFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1MDMxNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiU01DX1dSX0JVRl9WMl9TSVpFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX2NvcmUuYz03ODg9aW50IHNtY3JfbGlua19pbml0KHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLCBzdHJ1Y3Qgc21jX2xpbmsgKmxuayxcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy03OTktXFx0XFx0bG5rLVxcdTAwM2V3cl9yeF9idWZsZW4gPSBzbWNfbGlua19zaGFyZWRfdjJfcnhidWYobG5rKSA/XFxubmV0L3NtYy9zbWNfY29yZS5jOjgwMDpcXHRcXHRcXHRTTUNfV1JfQlVGX1NJWkUgOiBTTUNfV1JfQlVGX1YyX1NJWkU7XFxubmV0L3NtYy9zbWNfY29yZS5jLTgwMS1cXHR9IGVsc2Uge1xcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5oPTUxPWVudW0gc21jX2xpbmtfc3RhdGUge1xcdFxcdFxcdC8qIHBvc3NpYmxlIHN0YXRlcyBvZiBhIGxpbmsgKi9cXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuaC01OC0jZGVmaW5lIFNNQ19XUl9CVUZfU0laRVxcdFxcdDQ4XFx0Lyogc2l6ZSBvZiB3b3JrIHJlcXVlc3QgYnVmZmVyICovXFxubmV0L3NtYy9zbWNfY29yZS5oOjU5OiNkZWZpbmUgU01DX1dSX0JVRl9WMl9TSVpFXFx0ODE5MlxcdC8qIHNpemUgb2YgdjIgd29yayByZXF1ZXN0IGJ1ZmZlciAqL1xcbm5ldC9zbWMvc21jX2NvcmUuaC02MC1cXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuaD02NT1zdHJ1Y3Qgc21jX3dyX3YyX2J1ZiB7XFxubmV0L3NtYy9zbWNfY29yZS5oOjY2OlxcdHU4XFx0cmF3W1NNQ19XUl9CVUZfVjJfU0laRV07XFxubmV0L3NtYy9zbWNfY29yZS5oLTY3LX07XFxuLS1cXG5uZXQvc21jL3NtY193ci5jPTU3Mj1zdGF0aWMgdm9pZCBzbWNfd3JfaW5pdF9zZ2Uoc3RydWN0IHNtY19saW5rICpsbmspXFxuLS1cXG5uZXQvc21jL3NtY193ci5jLTYwNy1cXHRcXHRsbmstXFx1MDAzZXdyX3R4X3YyX3NnZS1cXHUwMDNlYWRkciA9IGxuay1cXHUwMDNld3JfdHhfdjJfZG1hX2FkZHI7XFxubmV0L3NtYy9zbWNfd3IuYzo2MDg6XFx0XFx0bG5rLVxcdTAwM2V3cl90eF92Ml9zZ2UtXFx1MDAzZWxlbmd0aCA9IFNNQ19XUl9CVUZfVjJfU0laRTtcXG5uZXQvc21jL3NtY193ci5jLTYwOS1cXHRcXHRsbmstXFx1MDAzZXdyX3R4X3YyX3NnZS1cXHUwMDNlbGtleSA9IGxuay1cXHUwMDNlcm9jZV9wZC1cXHUwMDNlbG9jYWxfZG1hX2xrZXk7XFxuLS1cXG5uZXQvc21jL3NtY193ci5jLTYzNi1cXHRcXHRcXHRsbmstXFx1MDAzZXdyX3J4X3NnZXNbeCArIDFdLmxlbmd0aCA9XFxubmV0L3NtYy9zbWNfd3IuYzo2Mzc6XFx0XFx0XFx0XFx0XFx0U01DX1dSX0JVRl9WMl9TSVpFIC0gU01DX1dSX1RYX1NJWkU7XFxubmV0L3NtYy9zbWNfd3IuYy02MzgtXFx0XFx0XFx0bG5rLVxcdTAwM2V3cl9yeF9zZ2VzW3ggKyAxXS5sa2V5ID1cXG4tLVxcbm5ldC9zbWMvc21jX3dyLmM9NjUyPXZvaWQgc21jX3dyX2ZyZWVfbGluayhzdHJ1Y3Qgc21jX2xpbmsgKmxuaylcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmMtNjc5LVxcdFxcdGliX2RtYV91bm1hcF9zaW5nbGUoaWJkZXYsIGxuay1cXHUwMDNld3JfcnhfdjJfZG1hX2FkZHIsXFxubmV0L3NtYy9zbWNfd3IuYzo2ODA6XFx0XFx0XFx0XFx0ICAgIFNNQ19XUl9CVUZfVjJfU0laRSxcXG5uZXQvc21jL3NtY193ci5jLTY4MS1cXHRcXHRcXHRcXHQgICAgRE1BX0ZST01fREVWSUNFKTtcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmMtNjkxLVxcdFxcdGliX2RtYV91bm1hcF9zaW5nbGUoaWJkZXYsIGxuay1cXHUwMDNld3JfdHhfdjJfZG1hX2FkZHIsXFxubmV0L3NtYy9zbWNfd3IuYzo2OTI6XFx0XFx0XFx0XFx0ICAgIFNNQ19XUl9CVUZfVjJfU0laRSxcXG5uZXQvc21jL3NtY193ci5jLTY5My1cXHRcXHRcXHRcXHQgICAgRE1BX1RPX0RFVklDRSk7XFxuLS1cXG5uZXQvc21jL3NtY193ci5jPTc0MT1pbnQgc21jX3dyX2FsbG9jX2xncl9tZW0oc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IpXFxuLS1cXG5uZXQvc21jL3NtY193ci5jLTc0NS1cXG5uZXQvc21jL3NtY193ci5jOjc0NjpcXHRsZ3ItXFx1MDAzZXdyX3J4X2J1Zl92MiA9IGt6YWxsb2MoU01DX1dSX0JVRl9WMl9TSVpFLCBHRlBfS0VSTkVMKTtcXG5uZXQvc21jL3NtY193ci5jLTc0Ny1cXHRpZiAoIWxnci1cXHUwMDNld3JfcnhfYnVmX3YyKVxcbm5ldC9zbWMvc21jX3dyLmMtNzQ4LVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm5ldC9zbWMvc21jX3dyLmM6NzQ5OlxcdGxnci1cXHUwMDNld3JfdHhfYnVmX3YyID0ga3phbGxvYyhTTUNfV1JfQlVGX1YyX1NJWkUsIEdGUF9LRVJORUwpO1xcbm5ldC9zbWMvc21jX3dyLmMtNzUwLVxcdGlmICghbGdyLVxcdTAwM2V3cl90eF9idWZfdjIpIHtcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmM9ODcxPWludCBzbWNfd3JfY3JlYXRlX2xpbmsoc3RydWN0IHNtY19saW5rICpsbmspXFxuLS1cXG5uZXQvc21jL3NtY193ci5jLTg4OS1cXHRcXHRcXHRcXHRpYl9kbWFfbWFwX3NpbmdsZShpYmRldiwgbG5rLVxcdTAwM2VsZ3ItXFx1MDAzZXdyX3J4X2J1Zl92MixcXG5uZXQvc21jL3NtY193ci5jOjg5MDpcXHRcXHRcXHRcXHRcXHRcXHQgIFNNQ19XUl9CVUZfVjJfU0laRSwgRE1BX0ZST01fREVWSUNFKTtcXG5uZXQvc21jL3NtY193ci5jLTg5MS1cXHRcXHRcXHRpZiAoaWJfZG1hX21hcHBpbmdfZXJyb3IoaWJkZXYsIGxuay1cXHUwMDNld3JfcnhfdjJfZG1hX2FkZHIpKSB7XFxuLS1cXG5uZXQvc21jL3NtY193ci5jLTg5Ny1cXHRcXHRsbmstXFx1MDAzZXdyX3R4X3YyX2RtYV9hZGRyID0gaWJfZG1hX21hcF9zaW5nbGUoaWJkZXYsXFxubmV0L3NtYy9zbWNfd3IuYzo4OTg6XFx0XFx0XFx0bG5rLVxcdTAwM2VsZ3ItXFx1MDAzZXdyX3R4X2J1Zl92MiwgU01DX1dSX0JVRl9WMl9TSVpFLFxcbm5ldC9zbWMvc21jX3dyLmMtODk5LVxcdFxcdFxcdERNQV9UT19ERVZJQ0UpO1xcbi0tXFxubmV0L3NtYy9zbWNfd3IuYy05MzItXFx0XFx0aWJfZG1hX3VubWFwX3NpbmdsZShpYmRldiwgbG5rLVxcdTAwM2V3cl9yeF92Ml9kbWFfYWRkcixcXG5uZXQvc21jL3NtY193ci5jOjkzMzpcXHRcXHRcXHRcXHQgICAgU01DX1dSX0JVRl9WMl9TSVpFLFxcbm5ldC9zbWMvc21jX3dyLmMtOTM0LVxcdFxcdFxcdFxcdCAgICBETUFfRlJPTV9ERVZJQ0UpO1xcbi0tXFxubmV0L3NtYy9zbWNfd3IuYy05MzgtXFx0XFx0aWJfZG1hX3VubWFwX3NpbmdsZShpYmRldiwgbG5rLVxcdTAwM2V3cl90eF92Ml9kbWFfYWRkcixcXG5uZXQvc21jL3NtY193ci5jOjkzOTpcXHRcXHRcXHRcXHQgICAgU01DX1dSX0JVRl9WMl9TSVpFLFxcbm5ldC9zbWMvc21jX3dyLmMtOTQwLVxcdFxcdFxcdFxcdCAgICBETUFfVE9fREVWSUNFKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjM6MzIuNjc0ODc2NjE5WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzODY0NzEzMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uY2VybnMgUmVnYXJkaW5nIEJ1ZmZlciBJbml0aWFsaXphdGlvbiBpbiBgc21jX2xsY19zZW5kX2FkZF9saW5rYCoqXG5cbk9rYXksIHNvIEkndmUganVzdCBub3RpY2VkIHNvbWV0aGluZyBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYy4gSSBrbm93IHRoYXQgYFNNQ19XUl9CVUZfVjJfU0laRWAgaXMgZGVmaW5lZCBhcyA4MTkyIGJ5dGVzLCB3aGljaCBpcyBhIHNpZ25pZmljYW50IGNodW5rIG9mIG1lbW9yeS4gSG93ZXZlciwgSSdtIGxvb2tpbmcgYXQgdGhlIGBzbWNfbGxjX3NlbmRfYWRkX2xpbmtgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSB0aGVyZSBtaWdodCBiZSBhbiBpc3N1ZSB3aXRoIGhvdyB0aGUgYnVmZmVyIGlzIGJlaW5nIGluaXRpYWxpemVkLlxuXG5TcGVjaWZpY2FsbHksIEkgc2VlIHRoYXQgYW4gYGFkZGxsY2Agc3RydWN0dXJlIGlzIGNhc3Qgb250byB0aGUgYnVmZmVyIGFuZCB0aGVuIGFuIGV4dGVuc2lvbiBgZXh0YCBzdHJ1Y3R1cmUgaXMgcGxhY2VkIHJpZ2h0IGFmdGVyIGl0LiBUaGUgY29kZSB0aGVuIHVzZXMgYG1lbXNldGAgdG8gemVybyBvdXQgdGhlIGV4dGVuc2lvbi4gVGhlIHByb2JsZW0gaXMgdGhhdCBgU01DX1dSX1RYX1NJWkVgIGlzIDQ0LCB3aGljaCBpcyB0aGUgc2FtZSBzaXplIGFzIGBzaXplb2YoKmFkZGxsYylgLiBUaHVzLCBJIHNlZSB0aGF0IG9ubHkgODggYnl0ZXMsIDQ0IGVhY2ggaW4gYGFkZGxsY2AgYW5kIGBleHRgLCBhcmUgYmVpbmcgZXhwbGljaXRseSB6ZXJvZWQgb3V0LCBidXQgdGhlIGJ1ZmZlciBpcyAqbXVjaCogbGFyZ2VyIVxuXG5NeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IHdoYXQgaGFwcGVucyB0byB0aGUgcmVtYWluaW5nIDgwMDQgYnl0ZXM/IEFyZSB0aGVzZSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGJ5dGVzIHNlbnQgb3ZlciB0aGUgbmV0d29yaz8gVGhhdCB3b3VsZCBiZSBhIHNlcmlvdXMgc2VjdXJpdHkgY29uY2VybiwgYW5kIGV2ZW4gaWYgaXQgaXNuJ3QsIHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBsZWFkIHRvIGEgdmFyaWV0eSBvZiBzdWJ0bGUgYW5kIGhhcmQtdG8tZGVidWcgaXNzdWVzLiBJIG5lZWQgdG8gdGFrZSBhbm90aGVyIGxvb2sgYXQgdGhlIGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgaG93IHRoZSByZXN0IG9mIHRoZSBidWZmZXIgaXMgaGFuZGxlZCBhbmQgaWYgdGhpcyBpcyBhIHJlYWwgcHJvYmxlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ5NjgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjM6MzguMDYxMzUwNzk3WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc21jL3NtY19sbGMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2ODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2ODA6XFx0XFx0aWYgKGxpbmtfbmV3KSB7XFxuIDY4MTpcXHRcXHRcXHRhZGRsbGMtXFx1MDAzZWxpbmtfbnVtID0gbGlua19uZXctXFx1MDAzZWxpbmtfaWQ7XFxuIDY4MjpcXHRcXHRcXHRodG9uMjQoYWRkbGxjLVxcdTAwM2VzZW5kZXJfcXBfbnVtLCBsaW5rX25ldy1cXHUwMDNlcm9jZV9xcC1cXHUwMDNlcXBfbnVtKTtcXG4gNjgzOlxcdFxcdFxcdGh0b24yNChhZGRsbGMtXFx1MDAzZWluaXRpYWxfcHNuLCBsaW5rX25ldy1cXHUwMDNlcHNuX2luaXRpYWwpO1xcbiA2ODQ6XFx0XFx0XFx0aWYgKHJlcXJlc3AgPT0gU01DX0xMQ19SRVEpXFxuIDY4NTpcXHRcXHRcXHRcXHRhZGRsbGMtXFx1MDAzZXFwX210dSA9IGxpbmtfbmV3LVxcdTAwM2VwYXRoX210dTtcXG4gNjg2OlxcdFxcdFxcdGVsc2VcXG4gNjg3OlxcdFxcdFxcdFxcdGFkZGxsYy1cXHUwMDNlcXBfbXR1ID0gbWluKGxpbmtfbmV3LVxcdTAwM2VwYXRoX210dSxcXG4gNjg4OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgbGlua19uZXctXFx1MDAzZXBlZXJfbXR1KTtcXG4gNjg5OlxcdFxcdH1cXG4gNjkwOlxcdFxcdGlmIChleHQgXFx1MDAyNlxcdTAwMjYgbGlua19uZXcpXFxuIDY5MTpcXHRcXHRcXHRsZW4gKz0gc21jX2xsY19maWxsX2V4dF92MihleHQsIGxpbmssIGxpbmtfbmV3KTtcXG4gNjkyOlxcdFxcdHNtY19sbGNfaW5pdF9tc2dfaGRyKFxcdTAwMjZhZGRsbGMtXFx1MDAzZWhkLCBsaW5rLVxcdTAwM2VsZ3IsIGxlbik7XFxuIDY5MzpcXHRcXHQvKiBzZW5kIGxsYyBtZXNzYWdlICovXFxuIDY5NDpcXHRcXHRpZiAobGluay1cXHUwMDNlbGdyLVxcdTAwM2VzbWNfdmVyc2lvbiA9PSBTTUNfVjIpXFxuIDY5NTpcXHRcXHRcXHRyYyA9IHNtY193cl90eF92Ml9zZW5kKGxpbmssIHBlbmQsIGxlbik7XFxuIDY5NjpcXHRcXHRlbHNlXFxuIDY5NzpcXHRcXHRcXHRyYyA9IHNtY193cl90eF9zZW5kKGxpbmssIHBlbmQpO1xcbiA2OTg6XFx0cHV0X291dDpcXG4gNjk5OlxcdFxcdHNtY193cl90eF9saW5rX3B1dChsaW5rKTtcXG4gNzAwOlxcdFxcdHJldHVybiByYztcXG4gNzAxOlxcdH1cXG4gNzAyOlxcdFxcbiA3MDM6XFx0Lyogc2VuZCBERUxFVEUgTElOSyByZXF1ZXN0IG9yIHJlc3BvbnNlICovXFxuIDcwNDpcXHRpbnQgc21jX2xsY19zZW5kX2RlbGV0ZV9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluaywgdTggbGlua19kZWxfaWQsXFxuIDcwNTpcXHRcXHRcXHRcXHQgICAgIGVudW0gc21jX2xsY19yZXFyZXNwIHJlcXJlc3AsIGJvb2wgb3JkZXJseSxcXG4gNzA2OlxcdFxcdFxcdFxcdCAgICAgdTMyIHJlYXNvbilcXG4gNzA3OlxcdHtcXG4gNzA4OlxcdFxcdHN0cnVjdCBzbWNfbGxjX21zZ19kZWxfbGluayAqZGVsbGxjO1xcbiA3MDk6XFx0XFx0c3RydWN0IHNtY193cl90eF9wZW5kX3ByaXYgKnBlbmQ7XFxuIDcxMDpcXHRcXHRzdHJ1Y3Qgc21jX3dyX2J1ZiAqd3JfYnVmO1xcbiA3MTE6XFx0XFx0aW50IHJjO1xcbiA3MTI6XFx0XFxuIDcxMzpcXHRcXHRpZiAoIXNtY193cl90eF9saW5rX2hvbGQobGluaykpXFxuIDcxNDpcXHRcXHRcXHRyZXR1cm4gLUVOT0xJTks7XFxuIDcxNTpcXHRcXHRyYyA9IHNtY19sbGNfYWRkX3BlbmRpbmdfc2VuZChsaW5rLCBcXHUwMDI2d3JfYnVmLCBcXHUwMDI2cGVuZCk7XFxuIDcxNjpcXHRcXHRpZiAocmMpXFxuIDcxNzpcXHRcXHRcXHRnb3RvIHB1dF9vdXQ7XFxuIDcxODpcXHRcXHRkZWxsbGMgPSAoc3RydWN0IHNtY19sbGNfbXNnX2RlbF9saW5rICopd3JfYnVmO1xcbiA3MTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjIzOjM4LjA2MTQ5Njc3OFoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjYyMTQxNDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQ29uY2VybiBSZWdhcmRpbmcgYHNtY193cl90eF92Ml9zZW5kYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHNtY193cl90eF92Ml9zZW5kKGxpbmssIHBlbmQsIGxlbik7YCBjYWxsIGFuZCBzb21ldGhpbmcgaXMgaW1tZWRpYXRlbHkganVtcGluZyBvdXQgYXQgbWUuIFRoZSBmdW5jdGlvbiBpdHNlbGYgb25seSB0cmFuc21pdHMgYGxlbmAgYnl0ZXMsIHJpZ2h0PyBBbmQgSSBzZWUgaG93IGBsZW5gIGlzIGJlaW5nIGNhbGN1bGF0ZWQ6XG5cbmBgYGNcblx0XHRpbnQgbGVuID0gc2l6ZW9mKCphZGRsbGMpO1xuICAgICAgICAuLi5cblx0XHRpZiAoZXh0IFx1MDAyNlx1MDAyNiBsaW5rX25ldylcblx0XHRcdGxlbiArPSBzbWNfbGxjX2ZpbGxfZXh0X3YyKGV4dCwgbGluaywgbGlua19uZXcpO1xuYGBgXG5cblNvIGBsZW5gIHN0YXJ0cyB3aXRoIHRoZSBzaXplIG9mIGBhZGRsbGNgIGFuZCBwb3RlbnRpYWxseSBnZXRzIGJpZ2dlciBkZXBlbmRpbmcgb24gc29tZSBleHRlbnNpb25zIGFuZCBuZXcgbGluayBjb25maWd1cmF0aW9ucy4gQmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVsZXZhbnQgc3RydWN0dXJlcyBhbmQgdGhlIHBvdGVudGlhbCBjYWxsIHRvIGBzbWNfbGxjX2ZpbGxfZXh0X3YyYCwgdGhlIG1heGltdW0gdmFsdWUgb2YgYGxlbmAgd2lsbCBiZSA4OCBieXRlcyBpbiB0aGlzIHNjZW5hcmlvLlxuXG5UaGUgY3J1Y2lhbCBwb2ludCBoZXJlIGlzIHRoYXQgaWYgYHNtY193cl90eF92Ml9zZW5kYCAqb25seSogc2VuZHMgYGxlbmAgYnl0ZXMsIHRoZW4gYW55IGRhdGEgdGhhdCBtaWdodCBleGlzdCBpbiB0aGUgYnVmZmVyICpiZXlvbmQqIHRob3NlIGBsZW5gIGJ5dGVzIGlzIHNpbXBseSAqbm90KiBnb2luZyB0byBiZSB0cmFuc21pdHRlZCBvdmVyIHRoZSBuZXR3b3JrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGBzbWNfd3JfdHhfdjJfc2VuZGAgYmVoYXZpb3IgaW4gbW9yZSBkZXRhaWwgYW5kIGNvbmZpcm0gbXkgY3VycmVudCBjb25jZXJucy4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZGl2ZSBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgc21jX3dyX3R4X3YyX3NlbmRgIHRvIGVuc3VyZSB0aGlzIHNwZWNpZmljIGFzcGVjdCBpcyBoYW5kbGVkIGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYzMDYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDoyMzo0Mi4zMjM2NDA5MTFaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTYyMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NtYy9zbWNfd3IuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzYsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMzY6XFx0aW50IHNtY193cl90eF92Ml9zZW5kKHN0cnVjdCBzbWNfbGluayAqbGluaywgc3RydWN0IHNtY193cl90eF9wZW5kX3ByaXYgKnByaXYsXFxuIDMzNzpcXHRcXHRcXHQgICAgICBpbnQgbGVuKVxcbiAzMzg6XFx0e1xcbiAzMzk6XFx0XFx0aW50IHJjO1xcbiAzNDA6XFx0XFxuIDM0MTpcXHRcXHRsaW5rLVxcdTAwM2V3cl90eF92Ml9pYi1cXHUwMDNlc2dfbGlzdFswXS5sZW5ndGggPSBsZW47XFxuIDM0MjpcXHRcXHRpYl9yZXFfbm90aWZ5X2NxKGxpbmstXFx1MDAzZXNtY2liZGV2LVxcdTAwM2Vyb2NlX2NxX3NlbmQsXFxuIDM0MzpcXHRcXHRcXHRcXHQgSUJfQ1FfTkVYVF9DT01QIHwgSUJfQ1FfUkVQT1JUX01JU1NFRF9FVkVOVFMpO1xcbiAzNDQ6XFx0XFx0cmMgPSBpYl9wb3N0X3NlbmQobGluay1cXHUwMDNlcm9jZV9xcCwgbGluay1cXHUwMDNld3JfdHhfdjJfaWIsIE5VTEwpO1xcbiAzNDU6XFx0XFx0aWYgKHJjKSB7XFxuIDM0NjpcXHRcXHRcXHRzbWNfd3JfdHhfcHV0X3Nsb3QobGluaywgcHJpdik7XFxuIDM0NzpcXHRcXHRcXHRzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKGxpbmspO1xcbiAzNDg6XFx0XFx0fVxcbiAzNDk6XFx0XFx0cmV0dXJuIHJjO1xcbiAzNTA6XFx0fVxcbiAzNTE6XFx0XFxuIDM1MjpcXHQvKiBTZW5kIHByZXBhcmVkIFdSIHNsb3QgdmlhIGliX3Bvc3Rfc2VuZCBhbmQgd2FpdCBmb3Igc2VuZCBjb21wbGV0aW9uXFxuIDM1MzpcXHQgKiBub3RpZmljYXRpb24uXFxuIDM1NDpcXHQgKiBAcHJpdjogcG9pbnRlciB0byBzbWNfd3JfdHhfcGVuZF9wcml2IGlkZW50aWZ5aW5nIHByZXBhcmVkIG1lc3NhZ2UgYnVmZmVyXFxuIDM1NTpcXHQgKi9cXG4gMzU2OlxcdGludCBzbWNfd3JfdHhfc2VuZF93YWl0KHN0cnVjdCBzbWNfbGluayAqbGluaywgc3RydWN0IHNtY193cl90eF9wZW5kX3ByaXYgKnByaXYsXFxuIDM1NzpcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHRpbWVvdXQpXFxuIDM1ODpcXHR7XFxuIDM1OTpcXHRcXHRzdHJ1Y3Qgc21jX3dyX3R4X3BlbmQgKnBlbmQ7XFxuIDM2MDpcXHRcXHR1MzIgcG5kX2lkeDtcXG4gMzYxOlxcdFxcdGludCByYztcXG4gMzYyOlxcdFxcbiAzNjM6XFx0XFx0cGVuZCA9IGNvbnRhaW5lcl9vZihwcml2LCBzdHJ1Y3Qgc21jX3dyX3R4X3BlbmQsIHByaXYpO1xcbiAzNjQ6XFx0XFx0cGVuZC1cXHUwMDNlY29tcGxfcmVxdWVzdGVkID0gMTtcXG4gMzY1OlxcdFxcdHBuZF9pZHggPSBwZW5kLVxcdTAwM2VpZHg7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjIzOjQyLjMyMzczODU3MVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDY0MTg0NjkyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgU01DIFdSIFRYIENvZGUgYW5kIFBvdGVudGlhbCBJc3N1ZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgd2FzIG9uIHRoZSBwb3NzaWJpbGl0eSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBzZW50IG92ZXIgdGhlIG5ldHdvcmsuIFRoZSBjb2RlIHNlZW1lZCB0byBpbml0aWFsaXplIGEgYnVmZmVyIHdpdGggYGxlbmAgYnl0ZXMsIGFuZCB0aGVuIGV4cGxpY2l0bHkgemVybyBvdXQgdGhpcyBidWZmZXIgd2l0aCBhIGBtZW1zZXRgLiBUaGlzIGxvb2tzIGNvcnJlY3QsIGJ1dCBJIGdvdCBjb25jZXJuZWQgYWJvdXQgd2hhdCB3b3VsZCBoYXBwZW4gaWYgdGhlIHdyaXRlIGJ1ZmZlciB3YXMgemVyb2VkIGFmdGVyIGl0IHdhcyB1c2VkLiBJIHdhcyBjb25jZXJuZWQgYWJvdXQgYHNtY193cl90eF9wdXRfc2xvdGAgemVyb2luZyB0aGUgYnVmZmVyLCB0aGVuIGBzbWNfd3JfdHhfZ2V0X3YyX3Nsb3RgIHJldHVybmluZyBhIHBvaW50ZXIgdG8gdGhhdCB6ZXJvZWQgYnVmZmVyLCBhbmQgYSBzdWJzZXF1ZW50IHVzZSB3b3VsZCBkZXJlZmVyZW5jZSBhIE5VTEwgcG9pbnRlci4gIEl0IGxvb2tlZCBsaWtlIGEgY2xlYXIgcG90ZW50aWFsIGZvciBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgd2hpY2ggaXMgYSBzdGFuZGFyZCBrZXJuZWwgb29wcy4gQnV0IGFmdGVyIHRyYWNpbmcgdGhlIGxvZ2ljLCB0aGlzIG9ubHkgaGFwcGVuZWQgb24gZXJyb3JzIG9yIGV4cGxpY2l0IGFib3J0cy4gVGhpcyBtZWFudCB0aGVyZSB3YXMgTk8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhayBpc3N1ZS5cblxuVGhlbiBJIGNvbnNpZGVyZWQgdGhlIGNoYW5nZSBmcm9tIGB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dGAgdG8gdGhlIG9wZW4tY29kZWQgd2FpdCBsb29wLiAgVGhlIG9yaWdpbmFsIGNvbmNlcm4gd2FzIHRoYXQgYHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0YCBtaWdodCBldmFsdWF0ZSBhIGNvbmRpdGlvbiB3aXRoIHNpZGUgZWZmZWN0cywgbGlrZSBgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3RfaW5kZXhgLCB3aGljaCBjYWxscyBgdGVzdF9hbmRfc2V0X2JpdGAuIEl0J3MgYSBtYWNybywgYW5kIG15IGNvbmNlcm4gd2FzIHRoYXQgY29uZGl0aW9uIG1pZ2h0IGJlIGV2YWx1YXRlZCBtdWx0aXBsZSB0aW1lcywgcG90ZW50aWFsbHkgbGVha2luZyBzbG90cy4gIEhvd2V2ZXIsIGFmdGVyIGV4YW1pbmluZyB0aGUgbWFjcm8gZGVmaW5pdGlvbiwgSSBkb24ndCBzZWUgaG93IHRoYXQgaXMgcG9zc2libGUsIGFzIHRoZSBtYWNybyBzZWVtcyB0byBvbmx5IGV2YWx1YXRlIHRoZSBjb25kaXRpb24gb25jZS5cblxuVGhlICpyZWFsKiBpc3N1ZSB3aXRoIGB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dGAgaXMgdGhhdCBpdCB1c2VzIGBwcmVwYXJlX3RvX3dhaXRgIHdoaWNoIGFkZHMgdGFza3MgdG8gYSAqbm9uLWV4Y2x1c2l2ZSogd2FpdCBxdWV1ZS4gVGhpcyBtZWFucyBgd2FrZV91cGAgd291bGQgd2FrZSB1cCBhbGwgd2FpdGluZyB0aHJlYWRzLiAgVGhpcyBsZWFkcyB0byBhIHRodW5kZXJpbmcgaGVyZCBwcm9ibGVtLiBUaGUgY2hhbmdlIHRvIGBwcmVwYXJlX3RvX3dhaXRfZXhjbHVzaXZlYCB3aXRoIHRoZSBvcGVuLWNvZGVkIGxvb3AgdXNpbmcgYHdha2VfdXBgIGZpeGVzIHRoaXMuIEl0IG9wdGltaXplcyBwZXJmb3JtYW5jZSBhbmQgcHJldmVudHMgcG90ZW50aWFsIENQVSBzcGlrZXMsIGFuZCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgY29uY2VybnMuXG5cbkZpbmFsbHksIEkgcmV2aXNpdGVkIHRoZSBgbWVtc2V0YCBjaGFuZ2UuIE9yaWdpbmFsbHksIHRoZSBjb2RlIHdhcyB6ZXJvaW5nIHRoZSAqYWRkcmVzcyogb2YgYSBwb2ludGVyIGluc3RlYWQgb2YgdGhlIG1lbW9yeSB0aGUgcG9pbnRlciB3YXMgcG9pbnRpbmcgdG8uIEJ5IGNoYW5naW5nIHRoaXMgdG8gYG1lbXNldGAgb24gdGhlIHBvaW50ZXIgaXRzZWxmLCBpdCBmaXhlZCB0aGUgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG1lbnRpb25lZCBhYm92ZS4gVGhpcyBpcyBjb3JyZWN0LiBUaGUgY29kZSBtYWtlcyBpdCBzbyB0aGF0IG9ubHkgZXhwbGljaXRseSB6ZXJvZWQgYW5kIGluaXRpYWxpemVkIGJ5dGVzIGFyZSBzZW50IG92ZXIgdGhlIG5ldHdvcmssIGFuZCB0aGUgYnVmZmVyIGlzIHplcm9lZCBvdXQgYnkgYHNtY19sbGNfc2VuZF9hZGRfbGlua2AuIFNvLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrcy4gSSBzaG91bGQgcmV2aWV3IG90aGVyIHVzZXJzIG9mIGBzbWNfd3JfdHhfZ2V0X3YyX3Nsb3RgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzM2NCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDoyNDowMi45NjU1ODc2NjdaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NDU5MTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNtY193cl90eF9nZXRfdjJfc2xvdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL3NtY19sbGMuYz00MjI9c3RhdGljIGludCBzbWNfbGxjX2FkZF9wZW5kaW5nX3NlbmRfdjIoc3RydWN0IHNtY19saW5rICpsaW5rLFxcbi0tXFxubmV0L3NtYy9zbWNfbGxjLmMtNDI3LVxcbm5ldC9zbWMvc21jX2xsYy5jOjQyODpcXHRyYyA9IHNtY193cl90eF9nZXRfdjJfc2xvdChsaW5rLCBzbWNfbGxjX3R4X2hhbmRsZXIsIHdyX2J1ZiwgcGVuZCk7XFxubmV0L3NtYy9zbWNfbGxjLmMtNDI5LVxcdGlmIChyYyBcXHUwMDNjIDApXFxuLS1cXG5uZXQvc21jL3NtY193ci5jPTE5NT1pbnQgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3Qoc3RydWN0IHNtY19saW5rICpsaW5rLFxcbi0tXFxubmV0L3NtYy9zbWNfd3IuYy0yNTktXFxubmV0L3NtYy9zbWNfd3IuYzoyNjA6aW50IHNtY193cl90eF9nZXRfdjJfc2xvdChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXFxubmV0L3NtYy9zbWNfd3IuYy0yNjEtXFx0XFx0XFx0ICBzbWNfd3JfdHhfaGFuZGxlciBoYW5kbGVyLFxcbi0tXFxubmV0L3NtYy9zbWNfd3IuaD0xMTM9aW50IHNtY193cl90eF9nZXRfZnJlZV9zbG90KHN0cnVjdCBzbWNfbGluayAqbGluaywgc21jX3dyX3R4X2hhbmRsZXIgaGFuZGxlcixcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmgtMTE2LVxcdFxcdFxcdCAgICBzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRfcHJpdiAqKndyX3BlbmRfcHJpdik7XFxubmV0L3NtYy9zbWNfd3IuaDoxMTc6aW50IHNtY193cl90eF9nZXRfdjJfc2xvdChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXFxubmV0L3NtYy9zbWNfd3IuaC0xMTgtXFx0XFx0XFx0ICBzbWNfd3JfdHhfaGFuZGxlciBoYW5kbGVyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDoyNDowMy4wMTUwNTA5NzJaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA0Nzk2MzE3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipUcmFjaW5nIHRoZSBDYWxsZXJzIG9mIGBzbWNfbGxjX2FkZF9wZW5kaW5nX3NlbmRfdjJgKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGZsb3cgaGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHdoZXJlIGBzbWNfbGxjX2FkZF9wZW5kaW5nX3NlbmRfdjJgIGlzIGFjdHVhbGx5ICp1c2VkKi4gSXQgbG9va3MgbGlrZSB0aGUgY29kZSBvbmx5IHNob3dzIGBzbWNfbGxjX2FkZF9wZW5kaW5nX3NlbmRfdjJgIGJlaW5nIGNhbGxlZCBieSB0aGUgZnVuY3Rpb24gYHNtY19sbGNfYWRkX3BlbmRpbmdfc2VuZF92MmAgaXRzZWxmLiBOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdobydzIGNhbGxpbmcgKnRoYXQqIGZ1bmN0aW9uLiBJIHNlZSB0aGF0IGBzbWNfbGxjX2FkZF9wZW5kaW5nX3NlbmRfdjJgIGlzIG9ubHkgY2FsbGVkIGJ5IHR3byBmdW5jdGlvbnM6IGBzbWNfbGxjX3NlbmRfYWRkX2xpbmtgIGFuZCBgc21jX2xsY19zZW5kX3JlcXVlc3RfYWRkX2xpbmtgLiBJIHRoaW5rIGl0IGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBgc21jX2xsY19zZW5kX3JlcXVlc3RfYWRkX2xpbmtgIGZ1bmN0aW9uLCBzaW5jZSBpdCBzZWVtcyB0byBiZSB0aGUgbW9zdCBjcml0aWNhbCBvZiB0aGUgdHdvIHRvIGNoZWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDg2NywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjI0OjA2LjA2MzAxNzEzMVoiLCJTZXEiOjUyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjM3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NtYy9zbWNfbGxjLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTEyNixcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTEyNjpcXHRzdGF0aWMgdm9pZCBzbWNfbGxjX3NlbmRfcmVxdWVzdF9hZGRfbGluayhzdHJ1Y3Qgc21jX2xpbmsgKmxpbmspXFxuMTEyNzpcXHR7XFxuMTEyODpcXHRcXHRzdHJ1Y3Qgc21jX2xsY19tc2dfcmVxX2FkZF9saW5rX3YyICpsbGM7XFxuMTEyOTpcXHRcXHRzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRfcHJpdiAqcGVuZDtcXG4xMTMwOlxcdFxcdHN0cnVjdCBzbWNfd3JfdjJfYnVmICp3cl9idWY7XFxuMTEzMTpcXHRcXHRzdHJ1Y3Qgc21jX2dpZGxpc3QgZ2lkbGlzdDtcXG4xMTMyOlxcdFxcdGludCByYywgbGVuLCBpO1xcbjExMzM6XFx0XFxuMTEzNDpcXHRcXHRpZiAoIXNtY193cl90eF9saW5rX2hvbGQobGluaykpXFxuMTEzNTpcXHRcXHRcXHRyZXR1cm47XFxuMTEzNjpcXHRcXHRpZiAobGluay1cXHUwMDNlbGdyLVxcdTAwM2V0eXBlID09IFNNQ19MR1JfU1lNTUVUUklDIHx8XFxuMTEzNzpcXHRcXHQgICAgbGluay1cXHUwMDNlbGdyLVxcdTAwM2V0eXBlID09IFNNQ19MR1JfQVNZTU1FVFJJQ19QRUVSKVxcbjExMzg6XFx0XFx0XFx0Z290byBwdXRfb3V0O1xcbjExMzk6XFx0XFxuMTE0MDpcXHRcXHRzbWNfZmlsbF9naWRfbGlzdChsaW5rLVxcdTAwM2VsZ3IsIFxcdTAwMjZnaWRsaXN0LCBsaW5rLVxcdTAwM2VzbWNpYmRldiwgbGluay1cXHUwMDNlZ2lkKTtcXG4xMTQxOlxcdFxcdGlmIChnaWRsaXN0LmxlbiBcXHUwMDNjPSAxKVxcbjExNDI6XFx0XFx0XFx0Z290byBwdXRfb3V0O1xcbjExNDM6XFx0XFxuMTE0NDpcXHRcXHRyYyA9IHNtY19sbGNfYWRkX3BlbmRpbmdfc2VuZF92MihsaW5rLCBcXHUwMDI2d3JfYnVmLCBcXHUwMDI2cGVuZCk7XFxuMTE0NTpcXHRcXHRpZiAocmMpXFxuMTE0NjpcXHRcXHRcXHRnb3RvIHB1dF9vdXQ7XFxuMTE0NzpcXHRcXHRsbGMgPSAoc3RydWN0IHNtY19sbGNfbXNnX3JlcV9hZGRfbGlua192MiAqKXdyX2J1ZjtcXG4xMTQ4OlxcdFxcdG1lbXNldChsbGMsIDAsIFNNQ19XUl9UWF9TSVpFKTtcXG4xMTQ5OlxcdFxcbjExNTA6XFx0XFx0bGxjLVxcdTAwM2VoZC5jb21tb24ubGxjX3R5cGUgPSBTTUNfTExDX1JFUV9BRERfTElOSztcXG4xMTUxOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBnaWRsaXN0LmxlbjsgaSsrKVxcbjExNTI6XFx0XFx0XFx0bWVtY3B5KGxsYy1cXHUwMDNlZ2lkW2ldLCBnaWRsaXN0Lmxpc3RbaV0sIHNpemVvZihnaWRsaXN0Lmxpc3RbMF0pKTtcXG4xMTUzOlxcdFxcdGxsYy1cXHUwMDNlZ2lkX2NudCA9IGdpZGxpc3QubGVuO1xcbjExNTQ6XFx0XFx0bGVuID0gc2l6ZW9mKCpsbGMpICsgKGdpZGxpc3QubGVuICogc2l6ZW9mKGdpZGxpc3QubGlzdFswXSkpO1xcbjExNTU6XFx0XFx0c21jX2xsY19pbml0X21zZ19oZHIoXFx1MDAyNmxsYy1cXHUwMDNlaGQsIGxpbmstXFx1MDAzZWxnciwgbGVuKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjQ6MDYuMDYzMTQxOTgxWiIsIlNlcSI6NTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2Mjc2NDAxNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZXF1ZXN0IEFkZGl0aW9uIG9mIGEgTGluayBpbiB0aGUgU01DIExheWVyKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCB0aGUgYHNtY19sbGNfc2VuZF9yZXF1ZXN0X2FkZF9saW5rYCBmdW5jdGlvbiwgYW5kIEkgc2VlIHRoZXkncmUgaW5pdGlhbGl6aW5nIHRoZSBgbGxjYCB2YXJpYWJsZSB0byBwb2ludCB0byBhIGJ1ZmZlciAoYHdyX2J1ZmApIGFuZCBjYXN0aW5nIGl0IGFzIGEgYHN0cnVjdCBzbWNfbGxjX21zZ19yZXFfYWRkX2xpbmtfdjJgLiBNYWtlcyBzZW5zZSwgd2UncmUgYnVpbGRpbmcgYSByZXF1ZXN0IG1lc3NhZ2UgZm9yIGFkZGluZyBhIGxpbmsuIFRoZXkncmUgdGhlbiB6ZXJvaW5nIG91dCB0aGUgYnVmZmVyIHVzaW5nIGBtZW1zZXRgLCB1c2luZyBgU01DX1dSX1RYX1NJWkVgLlxuXG5CdXQgd2FpdCBhIG1pbnV0ZS4uLiBgU01DX1dSX1RYX1NJWkVgIGlzIGRlZmluZWQgYXMgNDQgYnl0ZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCdzIHRoZSBjb3JyZWN0IHNpemUuIFRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlLCBpcyB0aGF0IHJlYWxseSBsYXJnZSBlbm91Z2ggZm9yIGBzdHJ1Y3Qgc21jX2xsY19tc2dfcmVxX2FkZF9saW5rX3YyYD8gSSBoYXZlIHRvIGNvbmZpcm0gdGhlIHN0cnVjdHVyZSBzaXplLCBpbiBjYXNlIHdlIGhhdmUgYSBidWZmZXIgb3ZlcmZsb3cuIFRoaXMgaXMgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBpZiB0aGUgc3RydWN0IGlzIGxhcmdlciB0aGFuIDQ0IGJ5dGVzIVxuXG5cbiIsIklucHV0VG9rZW5zIjozMTg0MywiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjI0OjA5LjY5MDc4NDkyNFoiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ2MDQxNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IHNtY19sbGNfbXNnX3JlcV9hZGRfbGlua192MiBcXFxce1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL3NtY19sbGMuYz04Nj1zdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtfdjJfZXh0IHtcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jLTEwMy1cXG5uZXQvc21jL3NtY19sbGMuYzoxMDQ6c3RydWN0IHNtY19sbGNfbXNnX3JlcV9hZGRfbGlua192MiB7XFxubmV0L3NtYy9zbWNfbGxjLmMtMTA1LVxcdHN0cnVjdCBzbWNfbGxjX2hkciBoZDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjQ6MDkuNzM1Mzk0OTg5WiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NjU3NjQ5NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgc3RydWN0IHNtY19sbGNfbXNnX3JlcV9hZGRfbGlua192MmAgU3RydWN0dXJlKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHN0cnVjdCBzbWNfbGxjX21zZ19yZXFfYWRkX2xpbmtfdjJgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCdzIG5ldyBvciBkaWZmZXJlbnQgaGVyZSBjb21wYXJlZCB0byB0aGUgcHJldmlvdXMgdmVyc2lvbiBvciBzaW1pbGFyIHN0cnVjdHVyZXM/IElzIHRoaXMgYSBjb21wbGV0ZSByZXdyaXRlLCBhIG1pbm9yIHR3ZWFrLCBvciBhbiBpbmNyZW1lbnRhbCBpbXByb3ZlbWVudD8gSSdtIGxvb2tpbmcgZm9yIHRoZSBrZXkgZmllbGRzIHRoYXQgZGVmaW5lIGxpbmsgYWRkaXRpb24sIHBhcnRpY3VsYXJseSBhbnl0aGluZyByZWxhdGVkIHRvIHZlcnNpb25pbmcsIHNlY3VyaXR5LCBvciBwZXJmb3JtYW5jZSBlbmhhbmNlbWVudHMsIGFuZCBob3cgdGhleSBpbnRlcmFjdC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyBob3cgdGhpcyBpbXBhY3RzIHRoZSBvdmVyYWxsIGZsb3cgb2YgdGhlIExpbmsgTGF5ZXIgQ29udHJvbCAoTExDKSBtZXNzYWdlcyBpbiB0aGUgU01DIHByb3RvY29sIGFuZCB3aGVyZSBpdCBmaXRzIGluIHRoZSBzZXF1ZW5jZS4gSSBhbnRpY2lwYXRlIGl0J2xsIGhvbGQgaW5mb3JtYXRpb24gbGlrZSBwZWVyIGFkZHJlc3NlcywgY29ubmVjdGlvbiBwYXJhbWV0ZXJzLCBhbmQgcmVzb3VyY2UgYWxsb2NhdGlvbiBkZXRhaWxzLiBUaGUgXCJ2MlwiIHN0cm9uZ2x5IGltcGxpZXMgYSBwcm90b2NvbCBldm9sdXRpb24sIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb21wYXRpYmlsaXR5IGltcGxpY2F0aW9uc+KAlGlzIGl0IGJhY2t3YXJkIGNvbXBhdGlibGUsIG9yIGRvIHdlIG5lZWQgdmVyc2lvbiBuZWdvdGlhdGlvbj8gTGV0J3MgY2hlY2sgdGhlIGhlYWRlciBmaWxlcyBhbmQgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGZvciB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIzNjEsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDoyNDoxMy42MDExNjIyNjlaIiwiU2VxIjo1NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyNTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zbWMvc21jX2xsYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwNDpcXHRzdHJ1Y3Qgc21jX2xsY19tc2dfcmVxX2FkZF9saW5rX3YyIHtcXG4gMTA1OlxcdFxcdHN0cnVjdCBzbWNfbGxjX2hkciBoZDtcXG4gMTA2OlxcdFxcdHU4IHJlc2VydmVkWzIwXTtcXG4gMTA3OlxcdFxcdHU4IGdpZF9jbnQ7XFxuIDEwODpcXHRcXHR1OCByZXNlcnZlZDJbM107XFxuIDEwOTpcXHRcXHR1OCBnaWRbXVtTTUNfR0lEX1NJWkVdO1xcbiAxMTA6XFx0fTtcXG4gMTExOlxcdFxcbiAxMTI6XFx0I2RlZmluZSBTTUNfTExDX1JLRVlTX1BFUl9DT05UX01TR1xcdDJcXG4gMTEzOlxcdFxcbiAxMTQ6XFx0c3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rX2NvbnQge1xcdC8qIHR5cGUgMHgwMyAqL1xcbiAxMTU6XFx0XFx0c3RydWN0IHNtY19sbGNfaGRyIGhkO1xcbiAxMTY6XFx0XFx0dTggbGlua19udW07XFxuIDExNzpcXHRcXHR1OCBudW1fcmtleXM7XFxuIDExODpcXHRcXHR1OCByZXNlcnZlZDJbMl07XFxuIDExOTpcXHRcXHRzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtfY29udF9ydCBydFtTTUNfTExDX1JLRVlTX1BFUl9DT05UX01TR107XFxuIDEyMDpcXHRcXHR1OCByZXNlcnZlZFs0XTtcXG4gMTIxOlxcdH0gX19wYWNrZWQ7XFx0XFx0XFx0LyogZm9ybWF0IGRlZmluZWQgaW4gUkZDNzYwOSAqL1xcbiAxMjI6XFx0XFxuIDEyMzpcXHQjZGVmaW5lIFNNQ19MTENfRkxBR19ERUxfTElOS19BTExcXHQweDQwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjI0OjEzLjYwMTI4NjIwOVoiLCJTZXEiOjU3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTY1ODIzNDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU01DIExMQyBNZXNzYWdlIFJlcXVlc3QqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgYHN0cnVjdCBzbWNfbGxjX21zZ19yZXFfYWRkX2xpbmtfdjJgLiBJIHNlZSBpdCdzIGdvdCBhIGZpeGVkIGhlYWRlciAoYGhkYCkgb2YgMTYgYnl0ZXMsIGEgcmVzZXJ2ZWQgc3BhY2UgKGByZXNlcnZlZGApIGZvciAyMCBieXRlcywgYSBgZ2lkX2NudGAgd2hpY2ggaXMganVzdCAxIGJ5dGUsIGFuZCBhbm90aGVyIDMgYnl0ZXMgb2YgYHJlc2VydmVkMmAuIFRoYXQncyBhIHRvdGFsIG9mIDQwIGJ5dGVzIGZvciB0aGUgZml4ZWQgcG9ydGlvbi4gVGhlbiwgd2UgaGF2ZSB0aGUgdmFyaWFibGUtbGVuZ3RoIGBnaWRgIGFycmF5LCBgZ2lkW11bU01DX0dJRF9TSVpFXWAsIHdoZXJlIGBTTUNfR0lEX1NJWkVgIGlzLCBJIHJlY2FsbCwgMTYuXG5cbkhtbSwgdGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBJIHNlZSBhIGBtZW1zZXQobGxjLCAwLCBTTUNfV1JfVFhfU0laRSk7YCB3aGljaCBjbGVhcnMgNDQgYnl0ZXMuIEJ1dCB0aGVuIHRoZSBzaXplIGlzIGNhbGN1bGF0ZWQgZGlmZmVyZW50bHk6IGBsZW4gPSBzaXplb2YoKmxsYykgKyAoZ2lkbGlzdC5sZW4gKiBzaXplb2YoZ2lkbGlzdC5saXN0WzBdKSk7YC4gYHNpemVvZigqbGxjKWAgY29ycmVjdGx5IGdpdmVzIDQwIGJ5dGVzLCBidXQgd2hhdCdzIHRoZSB1cHBlciBib3VuZCBvbiBgZ2lkbGlzdC5sZW5gPyBJIG5lZWQgdG8gY2hlY2sgYHNtY19maWxsX2dpZF9saXN0YCB0byBzZWUgaG93IHRoYXQncyBoYW5kbGVkLiBMb29rcyBsaWtlIHRoaXMgY291bGQgY3JlYXRlIGEgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvdyB2dWxuZXJhYmlsaXR5LiBMZXQncyBzZWUgaG93IHRoZXkgaGFuZGxlIGl0Li4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMDE4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjQ6MTguNTY3MTExNzkxWiIsIlNlcSI6NTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDEzMTQ0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbWNfZmlsbF9naWRfbGlzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL2FmX3NtYy5jPTExODg9c3RhdGljIGludCBzbWNfY29ubmVjdF9jbGMoc3RydWN0IHNtY19zb2NrICpzbWMsXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTEyMDItXFxubmV0L3NtYy9hZl9zbWMuYzoxMjAzOnZvaWQgc21jX2ZpbGxfZ2lkX2xpc3Qoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsXFxubmV0L3NtYy9hZl9zbWMuYy0xMjA0LVxcdFxcdCAgICAgICBzdHJ1Y3Qgc21jX2dpZGxpc3QgKmdpZGxpc3QsXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jPTEyNjc9c3RhdGljIGludCBzbWNfY29ubmVjdF9yZG1hKHN0cnVjdCBzbWNfc29jayAqc21jLFxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0xMzU5LVxcdFxcdGlmIChpbmktXFx1MDAzZWZpcnN0X2NvbnRhY3RfbG9jYWwpXFxubmV0L3NtYy9hZl9zbWMuYzoxMzYwOlxcdFxcdFxcdHNtY19maWxsX2dpZF9saXN0KGxpbmstXFx1MDAzZWxnciwgXFx1MDAyNmluaS1cXHUwMDNlc21jcnYyLmdpZGxpc3QsXFxubmV0L3NtYy9hZl9zbWMuYy0xMzYxLVxcdFxcdFxcdFxcdFxcdCAgbGluay1cXHUwMDNlc21jaWJkZXYsIGxpbmstXFx1MDAzZWdpZCk7XFxuLS1cXG5uZXQvc21jL3NtYy5oPTQxOT12b2lkIHNtY19jbG9zZV9ub25fYWNjZXB0ZWQoc3RydWN0IHNvY2sgKnNrKTtcXG5uZXQvc21jL3NtYy5oOjQyMDp2b2lkIHNtY19maWxsX2dpZF9saXN0KHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLFxcbm5ldC9zbWMvc21jLmgtNDIxLVxcdFxcdCAgICAgICBzdHJ1Y3Qgc21jX2dpZGxpc3QgKmdpZGxpc3QsXFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYz0xMTI2PXN0YXRpYyB2b2lkIHNtY19sbGNfc2VuZF9yZXF1ZXN0X2FkZF9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluaylcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jLTExMzktXFxubmV0L3NtYy9zbWNfbGxjLmM6MTE0MDpcXHRzbWNfZmlsbF9naWRfbGlzdChsaW5rLVxcdTAwM2VsZ3IsIFxcdTAwMjZnaWRsaXN0LCBsaW5rLVxcdTAwM2VzbWNpYmRldiwgbGluay1cXHUwMDNlZ2lkKTtcXG5uZXQvc21jL3NtY19sbGMuYy0xMTQxLVxcdGlmIChnaWRsaXN0LmxlbiBcXHUwMDNjPSAxKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDoyNDoxOC42MTEyNDY1NzZaIiwiU2VxIjo1OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0NTAzNzY4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgc21jX2ZpbGxfZ2lkX2xpc3RgIGluIGBuZXQvc21jL2FmX3NtYy5jYCoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGd1dHMgb2YgdGhlIFNNQyBjb2RlLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIGBzbWNfZmlsbF9naWRfbGlzdGAgd2l0aGluIGBuZXQvc21jL2FmX3NtYy5jYC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIHBvcHVsYXRpbmcgdGhlIEdJRCBsaXN0LCB3aGljaCBpcyBhIGNyaXRpY2FsIHBhcnQgb2YgdGhlIFNNQyAoU2hhcmVkIE1lbW9yeSBDb21tdW5pY2F0aW9ucykgc2V0dXAuIEknbSBleHBlY3RpbmcgdGhpcyB0byBoYW5kbGUgdGhlIG1hcHBpbmcgb2YgZ2xvYmFsIGlkZW50aWZpZXJzIHRvIHRoZSB1bmRlcmx5aW5nIHNoYXJlZCBtZW1vcnkgcmVnaW9ucy4gVW5kZXJzdGFuZGluZyBob3cgaXQgaGFuZGxlcyBHSUQgYWxsb2NhdGlvbiwgcG90ZW50aWFsbHkgd2l0aCB1c2VyIHNwYWNlIGludGVyYWN0aW9ucyBvciB3aXRoaW4gdGhlIGtlcm5lbCBpdHNlbGYsIHdpbGwgYmUga2V5IHRvIGdyYXNwaW5nIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMuIEknbSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmZhY2VzIHdpdGggb3RoZXIgU01DIGNvbXBvbmVudHMsIHN1Y2ggYXMgc29ja2V0IGNyZWF0aW9uL21hbmFnZW1lbnQgYW5kIHRoZSBzaGFyZWQgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMuIFRoZSBnb2FsIGlzIHRvIGVpdGhlciByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb3IgcXVpY2tseSBpZGVudGlmeSBhIHNwZWNpZmljIGFyZWEgb2YgaW50ZXJlc3QuIEFueSBzdWJ0bGUgdGhyZWFkaW5nIG9yIGxvY2tpbmcgbWVjaGFuaXNtcyB3aXRoaW4gdGhpcyByb3V0aW5lIHdpbGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDA1MCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjI0OjIyLjE1NjI4NjU0WiIsIlNlcSI6NjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NzM3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc21jL2FmX3NtYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMDMsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyMDM6XFx0dm9pZCBzbWNfZmlsbF9naWRfbGlzdChzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncixcXG4xMjA0OlxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc21jX2dpZGxpc3QgKmdpZGxpc3QsXFxuMTIwNTpcXHRcXHRcXHQgICAgICAgc3RydWN0IHNtY19pYl9kZXZpY2UgKmtub3duX2RldiwgdTggKmtub3duX2dpZClcXG4xMjA2OlxcdHtcXG4xMjA3OlxcdFxcdHN0cnVjdCBzbWNfaW5pdF9pbmZvICphbHRfaW5pID0gTlVMTDtcXG4xMjA4OlxcdFxcbjEyMDk6XFx0XFx0bWVtc2V0KGdpZGxpc3QsIDAsIHNpemVvZigqZ2lkbGlzdCkpO1xcbjEyMTA6XFx0XFx0bWVtY3B5KGdpZGxpc3QtXFx1MDAzZWxpc3RbZ2lkbGlzdC1cXHUwMDNlbGVuKytdLCBrbm93bl9naWQsIFNNQ19HSURfU0laRSk7XFxuMTIxMTpcXHRcXG4xMjEyOlxcdFxcdGFsdF9pbmkgPSBremFsbG9jX29iaigqYWx0X2luaSk7XFxuMTIxMzpcXHRcXHRpZiAoIWFsdF9pbmkpXFxuMTIxNDpcXHRcXHRcXHRnb3RvIG91dDtcXG4xMjE1OlxcdFxcbjEyMTY6XFx0XFx0YWx0X2luaS1cXHUwMDNldmxhbl9pZCA9IGxnci1cXHUwMDNldmxhbl9pZDtcXG4xMjE3OlxcdFxcdGFsdF9pbmktXFx1MDAzZWNoZWNrX3NtY3J2MiA9IHRydWU7XFxuMTIxODpcXHRcXHRhbHRfaW5pLVxcdTAwM2VzbWNydjIuc2FkZHIgPSBsZ3ItXFx1MDAzZXNhZGRyO1xcbjEyMTk6XFx0XFx0c21jX3BuZXRfZmluZF9hbHRfcm9jZShsZ3IsIGFsdF9pbmksIGtub3duX2Rldik7XFxuMTIyMDpcXHRcXG4xMjIxOlxcdFxcdGlmICghYWx0X2luaS1cXHUwMDNlc21jcnYyLmliX2Rldl92MilcXG4xMjIyOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjEyMjM6XFx0XFxuMTIyNDpcXHRcXHRtZW1jcHkoZ2lkbGlzdC1cXHUwMDNlbGlzdFtnaWRsaXN0LVxcdTAwM2VsZW4rK10sIGFsdF9pbmktXFx1MDAzZXNtY3J2Mi5pYl9naWRfdjIsXFxuMTIyNTpcXHRcXHQgICAgICAgU01DX0dJRF9TSVpFKTtcXG4xMjI2OlxcdFxcbjEyMjc6XFx0b3V0OlxcbjEyMjg6XFx0XFx0a2ZyZWUoYWx0X2luaSk7XFxuMTIyOTpcXHR9XFxuMTIzMDpcXHRcXG4xMjMxOlxcdHN0YXRpYyBpbnQgc21jX2Nvbm5lY3RfcmRtYV92Ml9wcmVwYXJlKHN0cnVjdCBzbWNfc29jayAqc21jLFxcbjEyMzI6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzbWNfY2xjX21zZ19hY2NlcHRfY29uZmlybSAqYWNsYyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjQ6MjIuMTU2NDM1MDNaIiwiU2VxIjo2MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE2MTM2NzEzMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgSW5pdGlhbGl6YXRpb24gYW5kIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCByZWdhcmRpbmcgdGhlIGluaXRpYWwgY29uY2VybiBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBgc21jX3dyX3R4X2dldF92Ml9zbG90YCwgbXkgYW5hbHlzaXMgY29uZmlybXMgdGhhdCB0aGUgY29kZSAqZG9lcyogZnVsbHkgaW5pdGlhbGl6ZSB0aGUgYnVmZmVyLiBgZ2lkbGlzdC1cdTAwM2VsZW5gIGlzIGF0IG1vc3QgMiwgc28gdGhlIGNhbGN1bGF0ZWQgbGVuZ3RoLCBgbGVuID0gNDAgKyAyICogMTYgPSA3MmAsIGNvcnJlY3RseSBhY2NvdW50cyBmb3IgdGhlIGhlYWRlciAoNDAgYnl0ZXMpIGFuZCB0aGUgdHdvIHBvdGVudGlhbCBlbnRyaWVzIGluIGBnaWRsaXN0YCAoZWFjaCAxNiBieXRlcykuIFdoaWxlIGBtZW1zZXRgIGluaXRpYWxseSB6ZXJvZXMgb25seSA0NCBieXRlcywgdGhlIHN1YnNlcXVlbnQgYG1lbWNweWAgY2FsbHMgZmlsbCB0aGUgcmVtYWluaW5nIDMyIGJ5dGVzIG9mIHRoZSBidWZmZXIgZnJvbSBgZ2lkbGlzdC5saXN0W2ldYCB0byBgbGxjLVx1MDAzZWdpZFtpXWAuIFRodXMsIHRoZSBieXRlcyBmcm9tIDQwIHRvIDcyIGFyZSBjb3JyZWN0bHkgd3JpdHRlbi4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgbGVha2luZy4gVGhhdCdzIGdvb2QuXG5cbk5vdywgZm9jdXNpbmcgb24gdGhlIGJ1ZyBpbiBgc21jX3dyX3R4X3B1dF9zbG90YC4gVGhlIG9yaWdpbmFsIGZpeCBjaGFuZ2VzIGEgYG1lbXNldGAgb24gYSBwb2ludGVyIHRvIGNsZWFyIHRoZSBtZW1vcnkuIElmIGBsaW5rLVx1MDAzZWxnci1cdTAwM2V3cl90eF9idWZfdjJgIGlzIGluZGVlZCBhIHBvaW50ZXIgYW5kIGlzIHplcm9lZCwgdGhlbiB0aGUgbmV4dCBjYWxsIHRvIGBzbWNfd3JfdHhfZ2V0X3YyX3Nsb3RgIHJldHVybnMgYE5VTExgLiBUaGUgc3Vic2VxdWVudCBgYWRkbGxjYCBhc3NpZ25tZW50IGFuZCBgbWVtc2V0YCByZXN1bHQgaW4gYSBjbGFzc2ljIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgd2hpY2ggdHJpZ2dlcnMgZWl0aGVyIEtBU0FOIG9yIGEgc3RhbmRhcmQga2VybmVsIG9vcHMuIFRoaXMgaXNuJ3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZDsgaXQncyBhIHN0cmFpZ2h0Zm9yd2FyZCBkZXJlZmVyZW5jZSBvZiBhIG51bGwgcG9pbnRlciwgbWVhbmluZyBubyBpbmZvcm1hdGlvbiBsZWFrYWdlLiBJIHN1c3BlY3QgdGhpcyB3aWxsIGJlIGVhc3kgdG8gcmVwcm9kdWNlLCBnb29kIVxuXG5TaW1pbGFybHksIHplcm9pbmcgYGxpbmstXHUwMDNld3JfdHhfdjJfcGVuZGAgKGFub3RoZXIgcG9pbnRlcikgbGVhZHMgdG8gdGhlIHNhbWUgcHJvYmxlbTogYSBOVUxMIGRlcmVmZXJlbmNlIHdpdGhpbiBgc21jX3dyX3R4X2dldF92Ml9zbG90YCB3aGVuIGFjY2Vzc2luZyBgbGluay1cdTAwM2V3cl90eF92Ml9wZW5kLVx1MDAzZWlkeGAuIFRoZSBwcm9ibGVtIGlzIHRoYXQgdGhlIGBtZW1zZXRgIGlzIHplcm9pbmcgdGhlICpwb2ludGVyKiByYXRoZXIgdGhhbiB0aGUgbWVtb3J5IGl0IHBvaW50cyB0by5cblxuRmluYWxseSwgcmVnYXJkaW5nIHRoZSBjaGFuZ2UgZnJvbSBgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXRgIHRvIHRoZSBvcGVuLWNvZGVkIGxvb3AsIHRoYXQncyBpbnRlcmVzdGluZy4gVGhlIGNvZGUgaXMgbWVhbnQgdG8gYXZvaWQgdGhlIFwidGh1bmRlcmluZyBoZXJkXCIgZWZmZWN0IGJ5IHVzaW5nIGBwcmVwYXJlX3RvX3dhaXRfZXhjbHVzaXZlYCwgd2hpY2ggaXMgc3RhbmRhcmQuIEJ1dC4uLiBjb3VsZCB0aGVyZSBiZSBhIHJhY2UgY29uZGl0aW9uPyBDb3VsZCBgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXRgIHJldHVybiwgdGhlIGNvZGUgKnRoZW4qIGNoZWNrcyB0aGUgY29uZGl0aW9uICphZ2FpbiogYW5kIGdldCBhIGRpZmZlcmVudCByZXN1bHQ/IExldCBtZSBjaGVjayB0aGUgbWFjcm8gZXhwYW5zaW9uIG9mIGB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dGAuLi4gTm8sIGl0IHNob3VsZCBiZSBmaW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDg3NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDoyNDozMy43NzAxMDg5MTJaIiwiU2VxIjo2MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MDk1NDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmluZSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L3dhaXQuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3dhaXQuaD00NzY9ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvd2FpdC5oLTUzNC0gKi9cXG5pbmNsdWRlL2xpbnV4L3dhaXQuaDo1MzU6I2RlZmluZSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCh3cV9oZWFkLCBjb25kaXRpb24sIHRpbWVvdXQpXFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvd2FpdC5oLTUzNi0oe1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjQ6MzMuODE2MjExMzA3WiIsIlNlcSI6NjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0Nzk4MTkyNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCdzIFdhaXQgTWVjaGFuaXNtKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byB0aGUgaGVhcnQgb2YgdGhlIHdhaXQgbWVjaGFuaXNtIGluIHRoZSBMaW51eCBrZXJuZWwuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgYHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0YCBhY3R1YWxseSB3b3Jrcy4gSSBrbm93IHRoZSBnZW5lcmFsIGlkZWEgLSBpdCBwdXRzIGEgcHJvY2VzcyB0byBzbGVlcCwgcG90ZW50aWFsbHkgYWxsb3dpbmcgaXQgdG8gYmUgd29rZW4gYnkgYW4gaW50ZXJydXB0IG9yIHNpZ25hbCwgd2l0aCBhIHNwZWNpZmllZCB0aW1lb3V0LiBCdXQgSSB3YW50IHRvIG5haWwgZG93biB0aGUgc3BlY2lmaWNzLCBwYXJ0aWN1bGFybHkgdGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSB3YWl0IHF1ZXVlLCB0aGUgdGFzayBzdGF0ZSwgc2lnbmFsIGhhbmRsaW5nLCBhbmQgdGhlIHRpbWVvdXQgaW1wbGVtZW50YXRpb24gaXRzZWxmLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0aGUgYXRvbWljIG9wZXJhdGlvbnMsIGFuZCBob3cgdGhleSBlbnN1cmUgY29ycmVjdG5lc3MgaW4gYSBtdWx0aS10aHJlYWRlZCwgaW50ZXJydXB0LWRyaXZlbiBlbnZpcm9ubWVudC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGludGVyZXN0aW5nIGRldGFpbHMgcmVnYXJkaW5nIHNwaW5sb2NrcyBhbmQgYW55IHJlbGF0ZWQgcmFjZSBjb25kaXRpb25zIHRoYXQgYXJlIGhhbmRsZWQgYW5kIHdpbGwgYmUgbG9va2luZyBmb3IgaG93IHRoZSBpbXBsZW1lbnRhdGlvbiBoYW5kbGVzIGRpZmZlcmVudCBzY2VuYXJpb3MsIHBhcnRpY3VsYXJseSBzaWduYWwgZGVsaXZlcnkgZHVyaW5nIHRoZSB3YWl0aW5nIHBlcmlvZC4gVWx0aW1hdGVseSwgdGhlIGdvYWwgaXMgdG8gZnVsbHkgZ3Jhc3AgdGhlIGludHJpY2FjaWVzIHRoYXQgZGljdGF0ZSB0aGUgcHJlY2lzZSBiZWhhdmlvciB1bmRlciBhIHJhbmdlIG9mIGNvbmRpdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2OTI4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjQ6MzcuMjk2MDMyNzQ0WiIsIlNlcSI6NjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3dhaXQuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA1MzUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MzU6XFx0I2RlZmluZSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCh3cV9oZWFkLCBjb25kaXRpb24sIHRpbWVvdXQpXFx0XFx0XFxcXFxcbiA1MzY6XFx0KHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDUzNzpcXHRcXHRsb25nIF9fcmV0ID0gdGltZW91dDtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDUzODpcXHRcXHRtaWdodF9zbGVlcCgpO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gNTM5OlxcdFxcdGlmICghX19fd2FpdF9jb25kX3RpbWVvdXQoY29uZGl0aW9uKSlcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDU0MDpcXHRcXHRcXHRfX3JldCA9IF9fd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQod3FfaGVhZCxcXHRcXHRcXFxcXFxuIDU0MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRjb25kaXRpb24sIHRpbWVvdXQpO1xcdFxcdFxcXFxcXG4gNTQyOlxcdFxcdF9fcmV0O1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gNTQzOlxcdH0pXFxuIDU0NDpcXHRcXG4gNTQ1OlxcdCNkZWZpbmUgX193YWl0X2V2ZW50X2hydGltZW91dCh3cV9oZWFkLCBjb25kaXRpb24sIHRpbWVvdXQsIHN0YXRlKVxcdFxcdFxcXFxcXG4gNTQ2OlxcdCh7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiA1NDc6XFx0XFx0aW50IF9fcmV0ID0gMDtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDU0ODpcXHRcXHRzdHJ1Y3QgaHJ0aW1lcl9zbGVlcGVyIF9fdDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDU0OTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDU1MDpcXHRcXHRocnRpbWVyX3NldHVwX3NsZWVwZXJfb25fc3RhY2soXFx1MDAyNl9fdCwgQ0xPQ0tfTU9OT1RPTklDLFxcdFxcdFxcdFxcXFxcXG4gNTUxOlxcdFxcdFxcdFxcdFxcdCAgICAgICBIUlRJTUVSX01PREVfUkVMKTtcXHRcXHRcXHRcXFxcXFxuIDU1MjpcXHRcXHRpZiAoKHRpbWVvdXQpICE9IEtUSU1FX01BWCkge1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gNTUzOlxcdFxcdFxcdGhydGltZXJfc2V0X2V4cGlyZXNfcmFuZ2VfbnMoXFx1MDAyNl9fdC50aW1lciwgdGltZW91dCxcXHRcXHRcXFxcXFxuIDU1NDpcXHRcXHRcXHRcXHRcXHRcXHRjdXJyZW50LVxcdTAwM2V0aW1lcl9zbGFja19ucyk7XFx0XFx0XFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDoyNDozNy4yOTYxNDkzMDRaIiwiU2VxIjo2NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ3MjE0NDc1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIGBfX3dhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0YCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYF9fd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXRgLiBUaGF0IGZ1bmN0aW9uIGlzIGEgY3J1Y2lhbCBwaWVjZSBvZiB0aGUga2VybmVsJ3Mgc3luY2hyb25pemF0aW9uIG1hY2hpbmVyeSwgYW5kIHVuZGVyc3RhbmRpbmcgaXRzIGJlaGF2aW9yIGlzIG9mdGVuIGtleSB0byBkZWJ1Z2dpbmcgY29uY3VycmVuY3kgaXNzdWVzLCBwYXJ0aWN1bGFybHkgdGhvc2UgaW52b2x2aW5nIHdhaXRpbmcgb24gZXZlbnRzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBpdCdzIGltcGxlbWVudGVkLiBTcGVjaWZpY2FsbHksIGhvdyBpdCBoYW5kbGVzIHRoZSB0aW1lb3V0IGFzcGVjdCBhbmQgaG93IGludGVycnVwdHMgcGxheSBpbnRvIHRoYXQuIEknbSBob3BpbmcgdG8gcXVpY2tseSBncmFzcCBpdHMgaW50ZXJuYWwgd29ya2luZ3MsIHRoZSBtZWNoYW5pc21zIGl0IHV0aWxpemVzIHRvIHBvdGVudGlhbGx5IGJsb2NrIGEgdGFzaywgYW5kIGhvdyB0aG9zZSBtZWNoYW5pc21zIGRpZmZlciBmcm9tIG90aGVyIHJlbGF0ZWQgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuIEkgbmVlZCB0byByZW1lbWJlciB0aGUgc3VidGxldGllcyBvZiBpbnRlcnJ1cHRpYmxlIHZzLiB1bmludGVycnVwdGlibGUgc3RhdGVzIGFuZCBob3cgdGhlc2UgcmVsYXRlIHRvIHNpZ25hbCBoYW5kbGluZyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhhdCBmdW5jdGlvbi4gTGV0J3Mgc2VlIGhvdyBpdCdzIHNldCB1cCB0byBoYW5kbGUgYSB0aW1lb3V0LiBUaGlzIGxpa2VseSBpbnZvbHZlcyBzb21lIGNsZXZlciB1c2Ugb2YgdGltZXJzIGFuZCBzY2hlZHVsZXIgaW50ZWdyYXRpb24uIE15IGdvYWwgaGVyZSBpcyBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBidWlsZGluZyBibG9jay5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc1ODIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjI0OjQwLjc2ODI5NzQ5WiIsIlNlcSI6NjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDYyODA0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZWZpbmUgX193YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L3dhaXQuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3dhaXQuaD00NzY9ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvd2FpdC5oLTUwOS1cXG5pbmNsdWRlL2xpbnV4L3dhaXQuaDo1MTA6I2RlZmluZSBfX3dhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHdxX2hlYWQsIGNvbmRpdGlvbiwgdGltZW91dClcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC93YWl0LmgtNTExLVxcdF9fX3dhaXRfZXZlbnQod3FfaGVhZCwgX19fd2FpdF9jb25kX3RpbWVvdXQoY29uZGl0aW9uKSxcXHRcXHRcXHRcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjI0OjQwLjgxMjkyODQwNVoiLCJTZXEiOjY3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzQ1NTUzODU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYF9fd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXRgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiB3aXRoIHRoaXMgYF9fd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXRgIGZ1bmN0aW9uLiBSaWdodCwgc28gdGhpcyBzdWdnZXN0cyB0aGF0IGEgcHJvY2VzcyBpcyBnb2luZyB0byB3YWl0LCBidXQgaXQncyAqaW50ZXJydXB0aWJsZSogKGNydWNpYWwsIG9mIGNvdXJzZSDigJMgd2Ugd291bGRu4oCZdCB3YW50IGEgZGVhZGxvY2sgc2l0dWF0aW9uKS4gQW5kIHRoZXJlJ3MgYSB0aW1lb3V0IGludm9sdmVkIOKAkyBzb21lIGtpbmQgb2YgdXBwZXIgYm91bmQgb24gdGhlIHdhaXRpbmcgcGVyaW9kLiBUaGlzIGltcGxpZXMgYSBuZWVkIGZvciBib3VuZGVkIHdhaXQgdGltZXMsIHBvdGVudGlhbGx5IGltcG9ydGFudCBmb3IgcmVhbC10aW1lIGFwcGxpY2F0aW9ucyBvciBwcmV2ZW50aW5nIHJ1bmF3YXkgaGFuZ3MuXG5cbkknbSBpbW1lZGlhdGVseSBjb25zaWRlcmluZyB0aGUgaW1wbGljYXRpb25zOiBzaWduYWxzIGNvdWxkIHdha2UgdGhlIHByb2Nlc3MgZWFybHksIGEgc3BlY2lmaWVkIHRpbWVvdXQgZHVyYXRpb24gaXMgaW1wb3NlZCwgYW5kLCBmdW5kYW1lbnRhbGx5LCBpdCdzIGFib3V0IHB1dHRpbmcgdGhlIHByb2Nlc3MgdG8gc2xlZXAgKnNhZmVseSogd2hpbGUgd2Ugd2FpdCBmb3IgYSBzcGVjaWZpYyBjb25kaXRpb24uIFdoYXQgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmUgaXMgaXQgb3BlcmF0aW5nIG9uPyBBIHdhaXQgcXVldWU/IE11dGV4PyBDb25kaXRpb24gdmFyaWFibGU/IEtub3dpbmcgdGhpcyBpcyB2aXRhbCB0byB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zIGF0IHBsYXkuIEkgYmV0IHRoaXMgaXMgYXQgdGhlIGhlYXJ0IG9mIGhvdyBpbnRlcnJ1cHRzIGFyZSBoYW5kbGVkIGluIGNvbmp1bmN0aW9uIHdpdGggb3RoZXIgYXN5bmNocm9ub3VzIGV2ZW50cy5cblxuTGV0J3Mgc2VlIHdoYXQgdGhlIGltcGxlbWVudGF0aW9uIHJldmVhbHMgYWJvdXQgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGludGVycnVwdCBoYW5kbGVyLCB0aGUgdGltZW91dCBtZWNoYW5pc20gYW5kIHRoZSB3YWtpbmcgb2YgdGhlIHByb2Nlc3MuIElzIGl0IHVzaW5nIGEgdGltZXIgdG8gdHJpZ2dlciB0aGUgdGltZW91dD8gSWYgc28sIGlzIHRoYXQgdGltZXIgbWFuYWdlZCBwcm9wZXJseSBhbmQgd2hhdCBhYm91dCB0aGUgY29uc2VxdWVuY2VzIG9mIGVhcmx5IG9yIG1pc3NlZCBldmVudHM/IEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgdGhleSdyZSBoYW5kbGluZyByYWNlcyBiZXR3ZWVuIHRoZSBpbnRlcnJ1cHQgYW5kIHRoZSB0aW1lb3V0LiBUaGUgZ29hbCwgdWx0aW1hdGVseSwgaXMgdG8gZW5zdXJlIHRoYXQgYSByZXNvdXJjZSBvciBhIGNvbmRpdGlvbiBpc27igJl0IGhlbGQgaW5kZWZpbml0ZWx5LCBhbmQgdGhhdCB0aGlzIGNvZGUgZG9lc24ndCBpbnRyb2R1Y2UgdnVsbmVyYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzk3OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjI0OjQ1LjU1ODQ4NDgwMloiLCJTZXEiOjY4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC93YWl0LmhcIixcbiAgXCJGaXJzdExpbmVcIjogNTEwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTEwOlxcdCNkZWZpbmUgX193YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCh3cV9oZWFkLCBjb25kaXRpb24sIHRpbWVvdXQpXFx0XFx0XFxcXFxcbiA1MTE6XFx0XFx0X19fd2FpdF9ldmVudCh3cV9oZWFkLCBfX193YWl0X2NvbmRfdGltZW91dChjb25kaXRpb24pLFxcdFxcdFxcdFxcXFxcXG4gNTEyOlxcdFxcdFxcdCAgICAgIFRBU0tfSU5URVJSVVBUSUJMRSwgMCwgdGltZW91dCxcXHRcXHRcXHRcXHRcXFxcXFxuIDUxMzpcXHRcXHRcXHQgICAgICBfX3JldCA9IHNjaGVkdWxlX3RpbWVvdXQoX19yZXQpKVxcbiA1MTQ6XFx0XFxuIDUxNTpcXHQvKipcXG4gNTE2OlxcdCAqIHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0IC0gc2xlZXAgdW50aWwgYSBjb25kaXRpb24gZ2V0cyB0cnVlIG9yIGEgdGltZW91dCBlbGFwc2VzXFxuIDUxNzpcXHQgKiBAd3FfaGVhZDogdGhlIHdhaXRxdWV1ZSB0byB3YWl0IG9uXFxuIDUxODpcXHQgKiBAY29uZGl0aW9uOiBhIEMgZXhwcmVzc2lvbiBmb3IgdGhlIGV2ZW50IHRvIHdhaXQgZm9yXFxuIDUxOTpcXHQgKiBAdGltZW91dDogdGltZW91dCwgaW4gamlmZmllc1xcbiA1MjA6XFx0ICpcXG4gNTIxOlxcdCAqIFRoZSBwcm9jZXNzIGlzIHB1dCB0byBzbGVlcCAoVEFTS19JTlRFUlJVUFRJQkxFKSB1bnRpbCB0aGVcXG4gNTIyOlxcdCAqIEBjb25kaXRpb24gZXZhbHVhdGVzIHRvIHRydWUgb3IgYSBzaWduYWwgaXMgcmVjZWl2ZWQuXFxuIDUyMzpcXHQgKiBUaGUgQGNvbmRpdGlvbiBpcyBjaGVja2VkIGVhY2ggdGltZSB0aGUgd2FpdHF1ZXVlIEB3cV9oZWFkIGlzIHdva2VuIHVwLlxcbiA1MjQ6XFx0ICpcXG4gNTI1OlxcdCAqIHdha2VfdXAoKSBoYXMgdG8gYmUgY2FsbGVkIGFmdGVyIGNoYW5naW5nIGFueSB2YXJpYWJsZSB0aGF0IGNvdWxkXFxuIDUyNjpcXHQgKiBjaGFuZ2UgdGhlIHJlc3VsdCBvZiB0aGUgd2FpdCBjb25kaXRpb24uXFxuIDUyNzpcXHQgKlxcbiA1Mjg6XFx0ICogUmV0dXJuczpcXG4gNTI5OlxcdCAqIDAgaWYgdGhlIEBjb25kaXRpb24gZXZhbHVhdGVkIHRvICVmYWxzZSBhZnRlciB0aGUgQHRpbWVvdXQgZWxhcHNlZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjQ6NDUuNTU4NTg4NzkyWiIsIlNlcSI6NjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NjAzNTg4ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNoZWNraW5nIGBfX193YWl0X2V2ZW50YCoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIG1lbnRhbCBtb2RlbCBpbW1lZGlhdGVseSBraWNrcyBpbjogSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSBiZWhhdmlvciBhbmQgdXNhZ2Ugb2YgYF9fX3dhaXRfZXZlbnRgLiBUaGlzIGxpa2VseSBtZWFucyBJJ20gbG9va2luZyBhdCBhIGtlcm5lbC1sZXZlbCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlLCBwcm9iYWJseSBhIGxvd2VyLWxldmVsIGNvbnN0cnVjdCB0aGFuIGEgbW9yZSB1c2VyLWZhY2luZyBtZWNoYW5pc20gbGlrZSBhIHNlbWFwaG9yZSBvciBtdXRleC4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHF1ZXN0aW9uczogd2hhdCdzIHRoZSBjb250ZXh0PyBXaGF0J3MgdGhlIGFyY2hpdGVjdHVyZSBpdCdzIHJ1bm5pbmcgb24/IElzIGl0IGEgYnVzeS13YWl0IHZhcmlhbnQsIG9yIGEgbW9yZSBlZmZpY2llbnQgc2xlZXBpbmcgcHJpbWl0aXZlPyBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gYW5kIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0J3MgdHJpZ2dlcmVkIG9yIHVuYmxvY2tlZC4gUGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIGFyZSB0b3Agb2YgbWluZDogd2hhdCdzIHRoZSBvdmVyaGVhZCBpbnZvbHZlZCBpbiBpdHMgdXNlLCBhbmQgYXJlIHRoZXJlIHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBsb2NrIGNvbnRlbnRpb24gb3IgcHJpb3JpdHkgaW52ZXJzaW9uPyBJJ20gcHJvYmFibHkgZ29pbmcgdG8gYmUgbG9va2luZyBmb3IgYXNzb2NpYXRlZCBjb2RlIHBhdGhzIGFzIHdlbGwuIEknbGwgYmUgaW50ZXJlc3RlZCBpbiB3aGVyZSBpdCdzIGNhbGxlZCwgaG93IGl0J3MgdXNlZCwgYW5kIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGl0J3MgcHJvdGVjdGluZy4gSXMgdGhlcmUgYSBjbGVhciBkb2N1bWVudGF0aW9uLCBvciB3aWxsIEkgbmVlZCB0byB3b3JrIHRocm91Z2ggaXQgc3RlcCBieSBzdGVwPyBBbHJpZ2h0LCBsZXQncyBzdGFydCBkaWdnaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjozODc2MCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjQ6NDkuMDE4OTUwNjA3WiIsIlNlcSI6NzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTEyODY1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZWZpbmUgX19fd2FpdF9ldmVudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L3dhaXQuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3dhaXQuaD0yODg9ZXh0ZXJuIHZvaWQgaW5pdF93YWl0X2VudHJ5KHN0cnVjdCB3YWl0X3F1ZXVlX2VudHJ5ICp3cV9lbnRyeSwgaW50IGZsYWdzKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvd2FpdC5oLTMwMS1cXG5pbmNsdWRlL2xpbnV4L3dhaXQuaDozMDI6I2RlZmluZSBfX193YWl0X2V2ZW50KHdxX2hlYWQsIGNvbmRpdGlvbiwgc3RhdGUsIGV4Y2x1c2l2ZSwgcmV0LCBjbWQpXFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvd2FpdC5oLTMwMy0oe1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjQ6NDkuMDY0MDgyMzkyWiIsIlNlcSI6NzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NzQyMDY4MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIFNpZ25pZmljYW5jZSBvZiBgX19fd2FpdF9ldmVudGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIHJpZ2h0IGluLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhhdCBmdW5jdGlvbjogYF9fX3dhaXRfZXZlbnRgLiBUaGF0IG5hbWUgaXMgc2NyZWFtaW5nIFwia2VybmVsLWxldmVsIGNvbmN1cnJlbmN5IHByaW1pdGl2ZVwiIHRvIG1lLiBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcsIFwiT2theSwgd2UncmUgdGFsa2luZyBhYm91dCBhIG1lY2hhbmlzbSBmb3IgYSB0YXNrIHRvIHJlbGlucXVpc2ggY29udHJvbCwgdG8gcHV0IGl0c2VsZiB0byBzbGVlcCwgKndhaXRpbmcqIGZvciBhIHNwZWNpZmljIGNvbmRpdGlvbiB0byBiZWNvbWUgdHJ1ZS5cIiBUaGlzIGlzIGZ1bmRhbWVudGFsIHN0dWZmLiBJdCdzIHRoZSBjb3JlIG9mIGhvdyB3ZSBzeW5jaHJvbml6ZSBhY3Rpdml0aWVzLCBob3cgd2UgaGFuZGxlIHJlc291cmNlIGNvbnRlbnRpb24sIGFuZCBob3cgd2UgYWNoaWV2ZSByZXNwb25zaXZlbmVzcyBpbiBhIG11bHRpLXRocmVhZGVkIG9yIG11bHRpLXByb2Nlc3MgZW52aXJvbm1lbnQuXG5cbk5vdywgbXkgbWluZCBzdGFydHMgdG8gcmFjZS4gSSdtIGdvaW5nIHRocm91Z2ggdGhlIGRpZmZlcmVudCBjb250ZXh0cyB3aGVyZSBJJ3ZlIHNlZW4gd2FpdCBldmVudHMuIElzIHRoaXMgYSBzcGlubG9jaz8gQSBtdXRleD8gQ29uZGl0aW9uIHZhcmlhYmxlcz8gSXMgdGhpcyBwYXJ0IG9mIGEgcmVhZGVyLXdyaXRlciBsb2NrIGltcGxlbWVudGF0aW9uPyBBbSBJIGxvb2tpbmcgYXQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gaW50ZXJydXB0cyBvciBoYXJkd2FyZSBzaWduYWxzPyBXaGF0IGFyZSB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgdXNlZCBoZXJlPyBBcmUgd2UgZGVhbGluZyB3aXRoIHByaW9yaXR5IGluaGVyaXRhbmNlIG9yIHNvbWUgZm9ybSBvZiBmYWlybmVzcyBpbiB0aGUgd2FpdGluZyBtZWNoYW5pc20/IEknbSBhbHJlYWR5IGFza2luZyBteXNlbGYgdGhlIGNyaXRpY2FsIHF1ZXN0aW9ucyByZWdhcmRpbmcgdGhlIGltcGxlbWVudGF0aW9uIHNwZWNpZmljcy5cblxuVGhlIGRvdWJsZSB1bmRlcnNjb3JlIGluIHRoZSBuYW1lIGlzIGFsc28gYSBjbHVlLiBMaWtlbHksIHRoaXMgaXMgYW4gaW50ZXJuYWwgZnVuY3Rpb24sIG5vdCBpbnRlbmRlZCBmb3IgZGlyZWN0IHVzZSBieSB1c2VyLWxldmVsIHByb2dyYW1zLiBUaGlzIG1lYW5zIGl0J3MgdGhlIGJ1aWxkaW5nIGJsb2NrIHVwb24gd2hpY2ggaGlnaGVyLWxldmVsIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGFyZSBjb25zdHJ1Y3RlZC4gVGhpcyBpcyB0aGUgYmVkcm9jaywgdGhlIGF0b20sIHRoZSBmdW5kYW1lbnRhbCBicmljayBhbmQgbW9ydGFyIHdlIG11c3QgbG9vayBhdCB0byB1bmRlcnN0YW5kIGFsbCB0aGUgb3RoZXIgc3luY2hyb25pemF0aW9uIG1ldGhvZHMuIFNvLCBJ4oCZbSBtZW50YWxseSBwZWVsaW5nIGJhY2sgbGF5ZXJzLCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBpcyB3b3ZlbiBpbnRvIHRoZSBicm9hZGVyIGFyY2hpdGVjdHVyZSBvZiB0aGUga2VybmVsLCB0aGUgc3luY2hyb25pemF0aW9uIG1vZGVsLiBWZXJ5IGltcG9ydGFudCBhbmQgSSBuZWVkIHRvIHNlZSBtb3JlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MTcwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MjQ6NTIuOTM4MjkxMTIzWiIsIlNlcSI6NzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4MjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvd2FpdC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwMixcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMwMjpcXHQjZGVmaW5lIF9fX3dhaXRfZXZlbnQod3FfaGVhZCwgY29uZGl0aW9uLCBzdGF0ZSwgZXhjbHVzaXZlLCByZXQsIGNtZClcXHRcXHRcXFxcXFxuIDMwMzpcXHQoe1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMzA0OlxcdFxcdF9fbGFiZWxfXyBfX291dDtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDMwNTpcXHRcXHRzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeSBfX3dxX2VudHJ5O1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMzA2OlxcdFxcdGxvbmcgX19yZXQgPSByZXQ7XFx0LyogZXhwbGljaXQgc2hhZG93ICovXFx0XFx0XFx0XFx0XFxcXFxcbiAzMDc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAzMDg6XFx0XFx0aW5pdF93YWl0X2VudHJ5KFxcdTAwMjZfX3dxX2VudHJ5LCBleGNsdXNpdmUgPyBXUV9GTEFHX0VYQ0xVU0lWRSA6IDApO1xcdFxcXFxcXG4gMzA5OlxcdFxcdGZvciAoOzspIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDMxMDpcXHRcXHRcXHRsb25nIF9faW50ID0gcHJlcGFyZV90b193YWl0X2V2ZW50KFxcdTAwMjZ3cV9oZWFkLCBcXHUwMDI2X193cV9lbnRyeSwgc3RhdGUpO1xcXFxcXG4gMzExOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMzEyOlxcdFxcdFxcdGlmIChjb25kaXRpb24pXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAzMTM6XFx0XFx0XFx0XFx0YnJlYWs7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAzMTQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAzMTU6XFx0XFx0XFx0aWYgKF9fX3dhaXRfaXNfaW50ZXJydXB0aWJsZShzdGF0ZSkgXFx1MDAyNlxcdTAwMjYgX19pbnQpIHtcXHRcXHRcXHRcXFxcXFxuIDMxNjpcXHRcXHRcXHRcXHRfX3JldCA9IF9faW50O1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMzE3OlxcdFxcdFxcdFxcdGdvdG8gX19vdXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAzMTg6XFx0XFx0XFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMzE5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMzIwOlxcdFxcdFxcdGNtZDtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDMyMTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDMyMjpcXHRcXHRcXHRpZiAoY29uZGl0aW9uKVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMzIzOlxcdFxcdFxcdFxcdGJyZWFrO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMzI0OlxcdFxcdH1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDMyNTpcXHRcXHRmaW5pc2hfd2FpdChcXHUwMDI2d3FfaGVhZCwgXFx1MDAyNl9fd3FfZW50cnkpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMzI2OlxcdF9fb3V0OlxcdF9fcmV0O1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMzI3OlxcdH0pXFxuIDMyODpcXHRcXG4gMzI5OlxcdCNkZWZpbmUgX193YWl0X2V2ZW50KHdxX2hlYWQsIGNvbmRpdGlvbilcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDMzMDpcXHRcXHQodm9pZClfX193YWl0X2V2ZW50KHdxX2hlYWQsIGNvbmRpdGlvbiwgVEFTS19VTklOVEVSUlVQVElCTEUsIDAsIDAsXFx0XFxcXFxcbiAzMzE6XFx0XFx0XFx0XFx0ICAgIHNjaGVkdWxlKCkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjI0OjUyLjkzODM5MDM2M1oiLCJTZXEiOjczLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzYyMTU5NzIwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2ggYW5kIEtNU0FOIFJlcXVpcmVtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzOiB3YWl0LCB0aGF0IGBfX193YWl0X2V2ZW50YCBsb29wIGxvb2tzIGxpa2UgaXQgZXZhbHVhdGVzIHRoZSBgY29uZGl0aW9uYCB0d2ljZSBpbiBlYWNoIGl0ZXJhdGlvbi4gQnV0IHRoZW4gSSByZW1lbWJlciBob3cgdGhlIGB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dGAgZnVuY3Rpb24gd29ya3MuIEl0IGNoZWNrcyB0aGUgY29uZGl0aW9uICpvbmNlKiBiZWZvcmUgZW50ZXJpbmcgdGhlIGxvb3AuIFRoZW4sIHdpdGhpbiB0aGUgbG9vcCwgdGhlIGNvbmRpdGlvbiAqbWlnaHQqIGJlIGNoZWNrZWQgYWdhaW4uIFNvIHRoZSBtYXhpbXVtIGlzIHR3byBldmFsdWF0aW9ucyBwZXIgaXRlcmF0aW9uLiBDcnVjaWFsbHksIHRoZSBjb2RlIGluIHF1ZXN0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIHBhcnQgaW52b2x2aW5nIGBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdF9pbmRleGAsIGhhcyBzaWRlIGVmZmVjdHMgd2l0aCBgdGVzdF9hbmRfc2V0X2JpdGAuIEJ1dCBpZiB0aGUgY29uZGl0aW9uIGlzIHRydWUgKmltbWVkaWF0ZWx5KiBhZnRlciB0aGF0IGNhbGwsIHRoZSBsb29wIGJyZWFrcyEgU28gdGhlcmUncyBhY3R1YWxseSBvbmx5ICpvbmUqIGNvbmRpdGlvbiBjaGVjayBpZiB0aGUgJ2dvb2QnIHBhdGggaXMgdGFrZW4uXG5cbk5vdywgdGhlIHBhdGNoIGlzIGNoYW5naW5nIHRoaXMgdG8gYW4gb3Blbi1jb2RlZCBsb29wLCBhbmQgdGhpcyBzaGlmdCBtYWtlcyB0aGUgY29uZGl0aW9uIGNoZWNrIGhhcHBlbiB0aGUgc2FtZSBudW1iZXIgb2YgdGltZXMgYW5kIGZpeGVzIHRoZSBwb3RlbnRpYWwgdGh1bmRlcmluZyBoZXJkIHByb2JsZW0uIFRoZSBgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXRgIGZ1bmN0aW9uIHVzZXMgYSBub24tZXhjbHVzaXZlIHdhaXQuIE1hbnkgdGhyZWFkcyBjb3VsZCBiZSB3b2tlbiB1cCBzaW11bHRhbmVvdXNseSBpZiB0aGUgY29uZGl0aW9uIGJlY29tZXMgdHJ1ZS4gVGhlIG9wZW4tY29kZWQgbG9vcCBub3cgdXRpbGl6ZXMgYW4gZXhjbHVzaXZlIHdhaXQgd2l0aCBgcHJlcGFyZV90b193YWl0X2V4Y2x1c2l2ZWAuIFRoaXMgZW5zdXJlcyBvbmx5ICpvbmUqIHdhaXRpbmcgdGhyZWFkIGlzIHdva2VuLiBUaGlzIGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIGFuZCBhdm9pZHMgdGhlIHRodW5kZXJpbmcgaGVyZC5cblxuQnV0IHRoZXJlJ3MgYWxzbyB0aGUgYnVnIGZpeCBpbnZvbHZpbmcgdGhlIGJ1ZmZlci4gVGhlIHBhdGNoIGlzIG5vdyB6ZXJvaW5nIHRoZSBidWZmZXIsIGJ1dCB0aGUgKm9sZCogY29kZSB6ZXJvZWQgdGhlICpwb2ludGVyKiEgSWYgdGhlIHBvaW50ZXIgaXMgemVyb2VkLCB0aGUgbmV4dCB0aW1lIGl0J3MgZGVyZWZlcmVuY2VkLCBpdCdzIGEgTlVMTCBwb2ludGVyLiBXaGljaCBpcyBnb2luZyB0byBjcmFzaCB0aGUga2VybmVsIHdpdGggYSBzdGFuZGFyZCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIE5vdCBhbiB1bmluaXRpYWxpemVkIHJlYWQsIHdoaWNoIGlzIHdoYXQgS01TQU4gaXMgZm9yLlxuXG5TbywgdGhpbmtpbmcgYWJvdXQgdGhlIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdGhlIGBsaW5rLVx1MDAzZWxnci1cdTAwM2V3cl90eF9idWZfdjJgIHBvdGVudGlhbGx5IGNvdWxkIGJlIHVuaW5pdGlhbGl6ZWQuIEJ1dCwgYWZ0ZXIgbG9va2luZyB0aHJvdWdoIHRoZSByZWxldmFudCBwYXJ0cyBvZiBgc21jX3dyX3R4X3B1dF9zbG90YCwgYHNtY193cl90eF9nZXRfdjJfc2xvdGAgYW5kIGBzbWNfbGxjX3NlbmRfYWRkX2xpbmtgLCBpdCBiZWNvbWVzIGNsZWFyIHRoYXQgaXQgaXMgKm5vdCogcmVhZC4gVGhlIGNvZGUgZXhwbGljaXRseSB6ZXJvJ3MgdGhlIHBhcnRzIHRoYXQgZ2V0IHVzZWQhIEV2ZW4gaWYgdGhlcmUgd2FzIG9sZCBkYXRhLCBpdCB3b3VsZG4ndCBiZSBzZW50IG92ZXIgdGhlIG5ldHdvcmsuIFRoZXJlZm9yZSwgdGhlcmUncyBubyBwb3NzaWJpbGl0eSBvZiBhIG1lbW9yeSBsZWFrIG9yIHVuaW5pdGlhbGl6ZWQgZGF0YSBiZWluZyBzZW50IG91dC4gVGhlIGFjdHVhbCBidWcgd2FzIHRoYXQgdGhlIFBPSU5URVIgd2FzIHplcm9lZCBhbmQgbm90IHRoZSBidWZmZXIhIElmIGB3cl9idWZgIGlzIE5VTEwsIHRoZW4gdGhlIGBtZW1zZXQoTlVMTCwgMCwgNDQpYCBpcyBhIHN1cmVmaXJlIENSQVNILlxuXG5JbiBzdW1tYXJ5LCB0aGUgcGF0Y2g6XG5cbjEuICBSZXBsYWNlcyBgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXRgIHdpdGggYW4gZXhjbHVzaXZlIHdhaXQgbG9vcCwgYWRkcmVzc2luZyB0aGUgdGh1bmRlcmluZyBoZXJkIGlzc3VlLCBhIHBlcmZvcm1hbmNlIGFuZCBjb3JyZWN0bmVzcyBwcm9ibGVtLCBub3QgYSBtZW1vcnkgc2FmZXR5IG9uZS5cbjIuICBGaXhlcyBhIGJ1ZyB3aGVyZSBwb2ludGVycyB3ZXJlIGluY29ycmVjdGx5IHplcm9lZCBpbnN0ZWFkIG9mIHRoZSBidWZmZXJzLCB3aGljaCwgaWYgdGhlIHBvaW50ZXJzIHRoZW1zZWx2ZXMgYXJlIE5VTEwsIGNhdXNlIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLlxuXG5UaGUgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGlzIGVhc2lseSBkZXRlY3RlZCBieSBzdGFuZGFyZCB0b29scyBsaWtlIEtBU0FOIGFuZCBLQVNBTi1saXRlLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIHNlbnQgb3ZlciB0aGUgbmV0d29yay4gU28sIG5vIEtNU0FOIGlzIG5lZWRlZC4gVGhpcyBpcyBhIDEwMCUgcmVsaWFibGUgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCBhIHN0YW5kYXJkIGtlcm5lbCBwYW5pYy4gVGltZSB0byBjYWxsIGl0LCBgTmVlZHNLTVNBTj1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwMDY1LCJPdXRwdXRUb2tlbnMiOjM0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDoyNToxMC41NTk5OTA2MDJaIiwiU2VxIjo3NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyB0d28gaXNzdWVzOlxcbjEuIEl0IHJlcGxhY2VzIGB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dGAgd2l0aCBhbiBvcGVuLWNvZGVkIHdhaXQgbG9vcCB1c2luZyBgcHJlcGFyZV90b193YWl0X2V4Y2x1c2l2ZWAgdG8gZml4IGEgdGh1bmRlcmluZyBoZXJkIHByb2JsZW0gd2hlcmUgbXVsdGlwbGUgd2FpdGluZyB0aHJlYWRzIGFyZSB3b2tlbiB1cCBzaW11bHRhbmVvdXNseS4gVGhpcyBpcyBhIHBlcmZvcm1hbmNlL2NvbmN1cnJlbmN5IGZpeC5cXG4yLiBJdCBmaXhlcyBhIGJ1ZyBpbiBgc21jX3dyX3R4X3B1dF9zbG90YCB3aGVyZSBgbWVtc2V0YCB3YXMgaW5jb3JyZWN0bHkgYXBwbGllZCB0byB0aGUgcG9pbnRlcnMgYFxcdTAwMjZsaW5rLVxcdTAwM2V3cl90eF92Ml9wZW5kYCBhbmQgYFxcdTAwMjZsaW5rLVxcdTAwM2VsZ3ItXFx1MDAzZXdyX3R4X2J1Zl92MmAgaW5zdGVhZCBvZiB0aGUgc3RydWN0dXJlcyB0aGV5IHBvaW50IHRvLlxcblxcbkJlY2F1c2UgdGhlIG9yaWdpbmFsIGNvZGUgemVyb2VkIHRoZSBwb2ludGVycyB0aGVtc2VsdmVzIChlZmZlY3RpdmVseSBzZXR0aW5nIHRoZW0gdG8gTlVMTCksIGFueSBzdWJzZXF1ZW50IHVzZSBvZiB0aGVzZSBwb2ludGVycyAoZS5nLiwgaW4gYHNtY193cl90eF9nZXRfdjJfc2xvdGAgb3IgYHNtY193cl90eF9wcm9jZXNzX2NxZWApIHdvdWxkIHJlc3VsdCBpbiBhIGRldGVybWluaXN0aWMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBBIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBjYXVzZXMgYSBzdGFuZGFyZCBrZXJuZWwgb29wcyBhbmQgaXMgdHJpdmlhbGx5IGNhdWdodCBieSBzdGFuZGFyZCB0ZXN0aW5nLCBLQVNBTiwgb3IgZXZlbiB3aXRob3V0IGFueSBzYW5pdGl6ZXJzLlxcblxcblRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZSBvciBvdmVyIHRoZSBuZXR3b3JrLiBUaGUgbmV0d29yayB0cmFuc21pc3Npb24gZnVuY3Rpb25zIChlLmcuLCBgc21jX3dyX3R4X3YyX3NlbmRgKSBvbmx5IHNlbmQgdGhlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgbGVuZ3RoIG9mIHRoZSBidWZmZXIsIGFuZCB0aGUgY2FsbGVycyAobGlrZSBgc21jX2xsY19zZW5kX2FkZF9saW5rYCkgZXhwbGljaXRseSB6ZXJvIGFuZCBpbml0aWFsaXplIHRoZSBleGFjdCBudW1iZXIgb2YgYnl0ZXMgdGhleSB0cmFuc21pdC4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIHR3byBpc3N1ZXM6XFxuMS4gSXQgcmVwbGFjZXMgYHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0YCB3aXRoIGFuIG9wZW4tY29kZWQgd2FpdCBsb29wIHVzaW5nIGBwcmVwYXJlX3RvX3dhaXRfZXhjbHVzaXZlYCB0byBmaXggYSB0aHVuZGVyaW5nIGhlcmQgcHJvYmxlbSB3aGVyZSBtdWx0aXBsZSB3YWl0aW5nIHRocmVhZHMgYXJlIHdva2VuIHVwIHNpbXVsdGFuZW91c2x5LiBUaGlzIGlzIGEgcGVyZm9ybWFuY2UvY29uY3VycmVuY3kgZml4LlxcbjIuIEl0IGZpeGVzIGEgYnVnIGluIGBzbWNfd3JfdHhfcHV0X3Nsb3RgIHdoZXJlIGBtZW1zZXRgIHdhcyBpbmNvcnJlY3RseSBhcHBsaWVkIHRvIHRoZSBwb2ludGVycyBgXFx1MDAyNmxpbmstXFx1MDAzZXdyX3R4X3YyX3BlbmRgIGFuZCBgXFx1MDAyNmxpbmstXFx1MDAzZWxnci1cXHUwMDNld3JfdHhfYnVmX3YyYCBpbnN0ZWFkIG9mIHRoZSBzdHJ1Y3R1cmVzIHRoZXkgcG9pbnQgdG8uXFxuXFxuQmVjYXVzZSB0aGUgb3JpZ2luYWwgY29kZSB6ZXJvZWQgdGhlIHBvaW50ZXJzIHRoZW1zZWx2ZXMgKGVmZmVjdGl2ZWx5IHNldHRpbmcgdGhlbSB0byBOVUxMKSwgYW55IHN1YnNlcXVlbnQgdXNlIG9mIHRoZXNlIHBvaW50ZXJzIChlLmcuLCBpbiBgc21jX3dyX3R4X2dldF92Ml9zbG90YCBvciBgc21jX3dyX3R4X3Byb2Nlc3NfY3FlYCkgd291bGQgcmVzdWx0IGluIGEgZGV0ZXJtaW5pc3RpYyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIEEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGNhdXNlcyBhIHN0YW5kYXJkIGtlcm5lbCBvb3BzIGFuZCBpcyB0cml2aWFsbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIHRlc3RpbmcsIEtBU0FOLCBvciBldmVuIHdpdGhvdXQgYW55IHNhbml0aXplcnMuXFxuXFxuVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlIG9yIG92ZXIgdGhlIG5ldHdvcmsuIFRoZSBuZXR3b3JrIHRyYW5zbWlzc2lvbiBmdW5jdGlvbnMgKGUuZy4sIGBzbWNfd3JfdHhfdjJfc2VuZGApIG9ubHkgc2VuZCB0aGUgZXhwbGljaXRseSBpbml0aWFsaXplZCBsZW5ndGggb2YgdGhlIGJ1ZmZlciwgYW5kIHRoZSBjYWxsZXJzIChsaWtlIGBzbWNfbGxjX3NlbmRfYWRkX2xpbmtgKSBleHBsaWNpdGx5IHplcm8gYW5kIGluaXRpYWxpemUgdGhlIGV4YWN0IG51bWJlciBvZiBieXRlcyB0aGV5IHRyYW5zbWl0LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflownrrq9[1] Phase: Succeeded StartedAt: 2026-08-21 10:25:21 +0000 UTC FinishedAt: 2026-08-21 10:25:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflownrrq9[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-21 10:25:21 +0000 UTC FinishedAt: 2026-08-21 10:25:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflownrrq9[2] Phase: Succeeded StartedAt: 2026-08-21 10:25:21 +0000 UTC FinishedAt: 2026-08-21 12:05:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflownrrq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_wr_tx_get_free_slot","smc_wr_tx_put_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"38f68da7-711b-4ba2-b1df-a30862afcc20","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-21 10:25:21 +0000 UTC FinishedAt: 2026-08-21 12:05:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_wr_tx_get_free_slot","smc_wr_tx_put_slot"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"38f68da7-711b-4ba2-b1df-a30862afcc20","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflownrrq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_wr_tx_get_free_slot","smc_wr_tx_put_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"38f68da7-711b-4ba2-b1df-a30862afcc20","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-21 10:25:21 +0000 UTC FinishedAt: 2026-08-21 10:25:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflownrrq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_wr_tx_get_free_slot","smc_wr_tx_put_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"38f68da7-711b-4ba2-b1df-a30862afcc20","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-21 10:25:21 +0000 UTC FinishedAt: 2026-08-21 10:25:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflownrrq9/series-workflownrrq9-convert-artifact-2110136516/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownrrq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_wr_tx_get_free_slot","smc_wr_tx_put_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"38f68da7-711b-4ba2-b1df-a30862afcc20","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-21 10:25:31 +0000 UTC FinishedAt: 2026-08-21 10:41:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflownrrq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_wr_tx_get_free_slot","smc_wr_tx_put_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"38f68da7-711b-4ba2-b1df-a30862afcc20","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-21 10:25:31 +0000 UTC FinishedAt: 2026-08-21 10:41:56 +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:*b49f4256-3173-491b-b87a-9b7d462c0402,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-workflownrrq9/series-workflownrrq9-convert-artifact-2110136516/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": "b9c64083-5424-48ad-84e1-7ea46cc22771", "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-workflownrrq9/series-workflownrrq9-build-action-1763468290/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownrrq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_wr_tx_get_free_slot","smc_wr_tx_put_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"38f68da7-711b-4ba2-b1df-a30862afcc20","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-21 10:25:31 +0000 UTC FinishedAt: 2026-08-21 10:41:46 +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:*b49f4256-3173-491b-b87a-9b7d462c0402,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-workflownrrq9/series-workflownrrq9-convert-artifact-2110136516/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": "b9c64083-5424-48ad-84e1-7ea46cc22771", "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-workflownrrq9/series-workflownrrq9-build-action-1763468290/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownrrq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_wr_tx_get_free_slot","smc_wr_tx_put_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"38f68da7-711b-4ba2-b1df-a30862afcc20","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-21 10:41:56 +0000 UTC FinishedAt: 2026-08-21 10:41:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflownrrq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_wr_tx_get_free_slot","smc_wr_tx_put_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"38f68da7-711b-4ba2-b1df-a30862afcc20","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-21 10:41:56 +0000 UTC FinishedAt: 2026-08-21 10:41:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflownrrq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_wr_tx_get_free_slot","smc_wr_tx_put_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"38f68da7-711b-4ba2-b1df-a30862afcc20","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-21 10:41:56 +0000 UTC FinishedAt: 2026-08-21 10:42:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflownrrq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_wr_tx_get_free_slot","smc_wr_tx_put_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"38f68da7-711b-4ba2-b1df-a30862afcc20","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-21 10:41:56 +0000 UTC FinishedAt: 2026-08-21 10:42:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"38f68da7-711b-4ba2-b1df-a30862afcc20","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflownrrq9/series-workflownrrq9-convert-artifact-3052239939/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownrrq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_wr_tx_get_free_slot","smc_wr_tx_put_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"38f68da7-711b-4ba2-b1df-a30862afcc20","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-21 10:42:06 +0000 UTC FinishedAt: 2026-08-21 10:43:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflownrrq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_wr_tx_get_free_slot","smc_wr_tx_put_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"38f68da7-711b-4ba2-b1df-a30862afcc20","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-21 10:42:06 +0000 UTC FinishedAt: 2026-08-21 10:43:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b9c64083-5424-48ad-84e1-7ea46cc22771,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-workflownrrq9/series-workflownrrq9-build-action-1763468290/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-workflownrrq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_wr_tx_get_free_slot","smc_wr_tx_put_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"38f68da7-711b-4ba2-b1df-a30862afcc20","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-21 10:43:57 +0000 UTC FinishedAt: 2026-08-21 10:43:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflownrrq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_wr_tx_get_free_slot","smc_wr_tx_put_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"38f68da7-711b-4ba2-b1df-a30862afcc20","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-21 10:43:57 +0000 UTC FinishedAt: 2026-08-21 10:43:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflownrrq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_wr_tx_get_free_slot","smc_wr_tx_put_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"38f68da7-711b-4ba2-b1df-a30862afcc20","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-21 10:43:57 +0000 UTC FinishedAt: 2026-08-21 11:00:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflownrrq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_wr_tx_get_free_slot","smc_wr_tx_put_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"38f68da7-711b-4ba2-b1df-a30862afcc20","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-21 10:43:57 +0000 UTC FinishedAt: 2026-08-21 11:00:12 +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:*b49f4256-3173-491b-b87a-9b7d462c0402,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-workflownrrq9/series-workflownrrq9-convert-artifact-3052239939/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": "17c81336-d8bf-4e46-a2c3-68cbcff188ab", "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-workflownrrq9/series-workflownrrq9-build-action-111994615/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownrrq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_wr_tx_get_free_slot","smc_wr_tx_put_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"38f68da7-711b-4ba2-b1df-a30862afcc20","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-21 10:43:57 +0000 UTC FinishedAt: 2026-08-21 11:00:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b49f4256-3173-491b-b87a-9b7d462c0402,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-workflownrrq9/series-workflownrrq9-convert-artifact-3052239939/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": "17c81336-d8bf-4e46-a2c3-68cbcff188ab", "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-workflownrrq9/series-workflownrrq9-build-action-111994615/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownrrq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_wr_tx_get_free_slot","smc_wr_tx_put_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"38f68da7-711b-4ba2-b1df-a30862afcc20","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-21 11:00:12 +0000 UTC FinishedAt: 2026-08-21 11:00:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflownrrq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_wr_tx_get_free_slot","smc_wr_tx_put_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"38f68da7-711b-4ba2-b1df-a30862afcc20","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-21 11:00:12 +0000 UTC FinishedAt: 2026-08-21 11:00:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflownrrq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_wr_tx_get_free_slot","smc_wr_tx_put_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"38f68da7-711b-4ba2-b1df-a30862afcc20","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-21 11:00:12 +0000 UTC FinishedAt: 2026-08-21 11:02:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflownrrq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_wr_tx_get_free_slot","smc_wr_tx_put_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"38f68da7-711b-4ba2-b1df-a30862afcc20","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-21 11:00:12 +0000 UTC FinishedAt: 2026-08-21 11:02:00 +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:*17c81336-d8bf-4e46-a2c3-68cbcff188ab,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-workflownrrq9/series-workflownrrq9-build-action-111994615/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-workflownrrq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_wr_tx_get_free_slot","smc_wr_tx_put_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"38f68da7-711b-4ba2-b1df-a30862afcc20","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-21 11:02:10 +0000 UTC FinishedAt: 2026-08-21 12:05:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflownrrq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_wr_tx_get_free_slot","smc_wr_tx_put_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"38f68da7-711b-4ba2-b1df-a30862afcc20","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-21 11:02:10 +0000 UTC FinishedAt: 2026-08-21 12:05:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_wr_tx_get_free_slot","smc_wr_tx_put_slot"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*b9c64083-5424-48ad-84e1-7ea46cc22771,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*17c81336-d8bf-4e46-a2c3-68cbcff188ab,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-workflownrrq9/series-workflownrrq9-build-action-1763468290/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-workflownrrq9/series-workflownrrq9-build-action-111994615/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflownrrq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_wr_tx_get_free_slot","smc_wr_tx_put_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"38f68da7-711b-4ba2-b1df-a30862afcc20","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-21 11:02:10 +0000 UTC FinishedAt: 2026-08-21 11:02:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflownrrq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_wr_tx_get_free_slot","smc_wr_tx_put_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"38f68da7-711b-4ba2-b1df-a30862afcc20","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-21 11:02:10 +0000 UTC FinishedAt: 2026-08-21 11:02:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_wr_tx_get_free_slot","smc_wr_tx_put_slot"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflownrrq9/series-workflownrrq9-convert-artifact-1138345052/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownrrq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_wr_tx_get_free_slot","smc_wr_tx_put_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"38f68da7-711b-4ba2-b1df-a30862afcc20","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-21 11:02:10 +0000 UTC FinishedAt: 2026-08-21 11:02:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflownrrq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_wr_tx_get_free_slot","smc_wr_tx_put_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"38f68da7-711b-4ba2-b1df-a30862afcc20","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-21 11:02:10 +0000 UTC FinishedAt: 2026-08-21 11:02:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflownrrq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_wr_tx_get_free_slot","smc_wr_tx_put_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"38f68da7-711b-4ba2-b1df-a30862afcc20","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-21 11:02:11 +0000 UTC FinishedAt: 2026-08-21 11:02:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflownrrq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_wr_tx_get_free_slot","smc_wr_tx_put_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"38f68da7-711b-4ba2-b1df-a30862afcc20","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-21 11:02:21 +0000 UTC FinishedAt: 2026-08-21 12:05:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflownrrq9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_wr_tx_get_free_slot","smc_wr_tx_put_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"38f68da7-711b-4ba2-b1df-a30862afcc20","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-21 11:02:21 +0000 UTC FinishedAt: 2026-08-21 12:05:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b9c64083-5424-48ad-84e1-7ea46cc22771,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*17c81336-d8bf-4e46-a2c3-68cbcff188ab,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-workflownrrq9/series-workflownrrq9-build-action-1763468290/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-workflownrrq9/series-workflownrrq9-build-action-111994615/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-workflownrrq9/series-workflownrrq9-convert-artifact-1138345052/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,}