Name: series-workflowfkm52 Phase: Succeeded StartedAt: 2026-09-11 18:44:31 +0000 UTC FinishedAt: 2026-09-11 22:28:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfkm52[0] Phase: Succeeded StartedAt: 2026-09-11 18:44:31 +0000 UTC FinishedAt: 2026-09-11 18:49:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfkm52[0].run-triage Phase: Succeeded StartedAt: 2026-09-11 18:44:31 +0000 UTC FinishedAt: 2026-09-11 18:49:21 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "a401a9d547c50ef34db1088cc1fb9a201a7af657", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS", "NETFILTER", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "a401a9d547c50ef34db1088cc1fb9a201a7af657", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS", "NETFILTER", "INET" ], "series_id": "60a979ef-4c1e-4926-998f-b623ad440491" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_vs_sync_validate_flags", "ip_vs_process_message_v0", "ip_vs_proc_sync_conn", "ip_vs_process_message", "sync_thread_backup", "start_sync_thread" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "a401a9d547c50ef34db1088cc1fb9a201a7af657", "base_tree": "nf" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyYjMzQ7LAogICAgJiMzNDtpcF92c19wcm9jZXNzX21lc3NhZ2VfdjAmIzM0OywKICAgICYjMzQ7aXBfdnNfcHJvY19zeW5jX2Nvbm4mIzM0OywKICAgICYjMzQ7aXBfdnNfcHJvY2Vzc19tZXNzYWdlJiMzNDssCiAgICAmIzM0O3N5bmNfdGhyZWFkX2JhY2t1cCYjMzQ7LAogICAgJiMzNDtzdGFydF9zeW5jX3RocmVhZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZmxhZyB2YWxpZGF0aW9uIChgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFnc2ApIGluIHRoZSBJUFZTIHN5bmNocm9uaXphdGlvbiBtZXNzYWdlIGhhbmRsaW5nIGZ1bmN0aW9ucyAoYGlwX3ZzX3Byb2Nlc3NfbWVzc2FnZV92MGAgYW5kIGBpcF92c19wcm9jX3N5bmNfY29ubmApIHRvIHJlamVjdCBpbnZhbGlkIGZsYWcgY29tYmluYXRpb25zIChlLmcuLCBgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVRgIG9yIGBJUF9WU19DT05OX0ZfTk9fQ1BPUlRgIGNvbWJpbmVkIHdpdGggYElQX1ZTX0NPTk5fRl9URU1QTEFURWApLiBUaGUgZmxhZ3MgdmFyaWFibGUgaXMgZGlyZWN0bHkgaW5pdGlhbGl6ZWQgZnJvbSByZWNlaXZlZCBuZXR3b3JrIHBhY2tldCBkYXRhIChgbnRvaHNgIC8gYG50b2hsYCksIGFuZCB0aGUgdmFsaWRhdGlvbiBsb2dpYyBvbmx5IGFkZHMgZWFybHkgcmVqZWN0aW9uIG9mIGludmFsaWQgc3luYyBtZXNzYWdlcy4gTm8gaGVhcC9zdGFjayBtZW1vcnkgYWxsb2NhdGlvbnMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQsIG5vIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb25zIG9yIGNvcHlpbmcgdG8gdXNlciBzcGFjZSBhcmUgYWx0ZXJlZCwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBwYWRkaW5nIGFyZSByZWFkIG9yIGV4cG9zZWQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHN0ZW1taW5nIGZyb20gaW5jb21wYXRpYmxlIGZsYWdzIChzdWNoIGFzIHN0YXRlIGluY29uc2lzdGVuY2llcywgcmVmY291bnQgZXJyb3JzLCBvciB1c2UtYWZ0ZXItZnJlZSkgYXJlIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgS0FTQU4vcmVmY291bnQgY2hlY2tzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGZsYWcgdmFsaWRhdGlvbiAoaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncykgYW5kIHByb3BlciBtYXNraW5nIHdoZW4gcGFyc2luZyBpbmNvbWluZyBJUFZTIHN5bmMgbWVzc2FnZXMgaW4gdGhlIGJhY2t1cCBkYWVtb24sIHJlamVjdGluZyBpbmNvbXBhdGlibGUgZmxhZ3Mgc3VjaCBhcyBJUF9WU19DT05OX0ZfTk9fQ1BPUlQgd2l0aCBJUF9WU19DT05OX0ZfVEVNUExBVEUgb3IgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQgaW4gYm90aCB2MCBhbmQgdjEgbWVzc2FnZSBmb3JtYXRzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JrIHByb3RvY29sIHByb2Nlc3NpbmcgaW4gbmV0ZmlsdGVyL0lQVlMgYW5kIHdhcnJhbnRzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6NDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2ZjcyNjk5MWU2YWY2OTcxMzExYTBhMDA2OTJiMGExYmIxYzIzOTNkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMTg6NDY6MzYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcbmluZGV4IDUzODNhZWFmYjBhZWQuLjY5ZGMyODE1M2VjMTIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jXG5AQCAtOTQ5LDYgJiM0Mzs5NDksMjEgQEAgc3RhdGljIHZvaWQgaXBfdnNfcHJvY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubl9wYXJhbSAqcGFcbiBcdGlwX3ZzX2Nvbm5fcHV0KGNwKTtcbiB9XG4gXG4mIzQzOy8qIENoZWNrIGZvciBpbmNvbXBhdGlibGUgZmxhZ3MgKi9cbiYjNDM7c3RhdGljIGJvb2wgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyh1MzIgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHQvKiBXZSBkbyBub3QgZXhwZWN0IE5PX0NQT1JULCBlc3BlY2lhbGx5IHRvIGFsbG93IGxvb2t1cHNcbiYjNDM7XHQgKiB0byBoaXQgdGVtcGxhdGVzXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfTk9fQ1BPUlQpIHtcbiYjNDM7XHRcdGlmIChmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX1RFTVBMQVRFKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiAgUHJvY2VzcyByZWNlaXZlZCBtdWx0aWNhc3QgbWVzc2FnZSBmb3IgVmVyc2lvbiAwXG4gICovXG5AQCAtOTcyLDggJiM0Mzs5ODcsNyBAQCBzdGF0aWMgdm9pZCBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGNvbnN0IGNoYXIgKmJ1ZmZlclxuIFx0XHRcdHJldHVybjtcbiBcdFx0fVxuIFx0XHRzID0gKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAgKikgcDtcbi1cdFx0ZmxhZ3MgPSBudG9ocyhzLVx1MDAzZWZsYWdzKSB8IElQX1ZTX0NPTk5fRl9TWU5DO1xuLVx0XHRmbGFncyBcdTAwMjY9IH5JUF9WU19DT05OX0ZfSEFTSEVEO1xuJiM0MztcdFx0ZmxhZ3MgPSBudG9ocyhzLVx1MDAzZWZsYWdzKTtcbiBcdFx0aWYgKGZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0spIHtcbiBcdFx0XHRvcHQgPSAoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICopXHUwMDI2c1sxXTtcbiBcdFx0XHRwICYjNDM7PSBGVUxMX0NPTk5fU0laRTtcbkBAIC05ODYsNiAmIzQzOzEwMDAsMTMgQEAgc3RhdGljIHZvaWQgaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBjb25zdCBjaGFyICpidWZmZXJcbiBcdFx0XHRwICYjNDM7PSBTSU1QTEVfQ09OTl9TSVpFO1xuIFx0XHR9XG4gXG4mIzQzO1x0XHRpZiAoIWlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3MoZmxhZ3MpKSB7XG4mIzQzO1x0XHRcdElQX1ZTX0RCRygyLCBcJiMzNDtCQUNLVVAgdjAsIEludmFsaWQgZmxhZ3MgMHglWFxcblwmIzM0OywgZmxhZ3MpO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGZsYWdzIFx1MDAyNj0gSVBfVlNfQ09OTl9GX0JBQ0tVUF9NQVNLO1xuJiM0MztcdFx0ZmxhZ3MgfD0gSVBfVlNfQ09OTl9GX1NZTkM7XG4mIzQzO1xuIFx0XHRzdGF0ZSA9IG50b2hzKHMtXHUwMDNlc3RhdGUpO1xuIFx0XHRpZiAoIShmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX1RFTVBMQVRFKSkge1xuIFx0XHRcdHBwID0gaXBfdnNfcHJvdG9fZ2V0KHMtXHUwMDNlcHJvdG9jb2wpO1xuQEAgLTExNDEsNyAmIzQzOzExNjIsMTMgQEAgc3RhdGljIGlubGluZSBpbnQgaXBfdnNfcHJvY19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIF9fdTggKnAsIF9fdTggKm1cbiBcdH1cbiBcbiBcdC8qIEdldCBmbGFncyBhbmQgTWFzayBvZmYgdW5zdXBwb3J0ZWQgKi9cbi1cdGZsYWdzICA9IG50b2hsKHMtXHUwMDNldjQuZmxhZ3MpIFx1MDAyNiBJUF9WU19DT05OX0ZfQkFDS1VQX01BU0s7XG4mIzQzO1x0ZmxhZ3MgPSBudG9obChzLVx1MDAzZXY0LmZsYWdzKTtcbiYjNDM7XHRpZiAoIWlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3MoZmxhZ3MpKSB7XG4mIzQzO1x0XHRJUF9WU19EQkcoMywgXCYjMzQ7QkFDS1VQLCBJbnZhbGlkIGZsYWdzIDB4JVhcXG5cJiMzNDssIGZsYWdzKTtcbiYjNDM7XHRcdHJldGMgPSAyNTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XHRmbGFncyBcdTAwMjY9IElQX1ZTX0NPTk5fRl9CQUNLVVBfTUFTSztcbiBcdGZsYWdzIHw9IElQX1ZTX0NPTk5fRl9TWU5DO1xuIFx0c3RhdGUgPSBudG9ocyhzLVx1MDAzZXY0LnN0YXRlKTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODo0NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9WUyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3MmIzM0OywKICAgICYjMzQ7aXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwJiMzNDssCiAgICAmIzM0O2lwX3ZzX3Byb2Nfc3luY19jb25uJiMzNDssCiAgICAmIzM0O2lwX3ZzX3Byb2Nlc3NfbWVzc2FnZSYjMzQ7LAogICAgJiMzNDtzeW5jX3RocmVhZF9iYWNrdXAmIzM0OywKICAgICYjMzQ7c3RhcnRfc3luY190aHJlYWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmbGFnIHZhbGlkYXRpb24gKGlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3MpIGFuZCBwcm9wZXIgbWFza2luZyB3aGVuIHBhcnNpbmcgaW5jb21pbmcgSVBWUyBzeW5jIG1lc3NhZ2VzIGluIHRoZSBiYWNrdXAgZGFlbW9uLCByZWplY3RpbmcgaW5jb21wYXRpYmxlIGZsYWdzIHN1Y2ggYXMgSVBfVlNfQ09OTl9GX05PX0NQT1JUIHdpdGggSVBfVlNfQ09OTl9GX1RFTVBMQVRFIG9yIElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUIGluIGJvdGggdjAgYW5kIHYxIG1lc3NhZ2UgZm9ybWF0cy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0d29yayBwcm90b2NvbCBwcm9jZXNzaW5nIGluIG5ldGZpbHRlci9JUFZTIGFuZCB3YXJyYW50cyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmY3MjY5OTFlNmFmNjk3MTMxMWEwYTAwNjkyYjBhMWJiMWMyMzkzZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDE4OjQ2OjM2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMKaW5kZXggNTM4M2FlYWZiMGFlZC4uNjlkYzI4MTUzZWMxMiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jCkBAIC05NDksNiAmIzQzOzk0OSwyMSBAQCBzdGF0aWMgdm9pZCBpcF92c19wcm9jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uX3BhcmFtICpwYQogCWlwX3ZzX2Nvbm5fcHV0KGNwKTsKIH0KIAomIzQzOy8qIENoZWNrIGZvciBpbmNvbXBhdGlibGUgZmxhZ3MgKi8KJiM0MztzdGF0aWMgYm9vbCBpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzKHUzMiBmbGFncykKJiM0Mzt7CiYjNDM7CS8qIFdlIGRvIG5vdCBleHBlY3QgTk9fQ1BPUlQsIGVzcGVjaWFsbHkgdG8gYWxsb3cgbG9va3VwcwomIzQzOwkgKiB0byBoaXQgdGVtcGxhdGVzCiYjNDM7CSAqLwomIzQzOwlpZiAoZmxhZ3MgJmFtcDsgSVBfVlNfQ09OTl9GX05PX0NQT1JUKSB7CiYjNDM7CQlpZiAoZmxhZ3MgJmFtcDsgSVBfVlNfQ09OTl9GX1RFTVBMQVRFKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzOwlpZiAoZmxhZ3MgJmFtcDsgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKIC8qCiAgKiAgUHJvY2VzcyByZWNlaXZlZCBtdWx0aWNhc3QgbWVzc2FnZSBmb3IgVmVyc2lvbiAwCiAgKi8KQEAgLTk3Miw4ICYjNDM7OTg3LDcgQEAgc3RhdGljIHZvaWQgaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBjb25zdCBjaGFyICpidWZmZXIKIAkJCXJldHVybjsKIAkJfQogCQlzID0gKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAgKikgcDsKLQkJZmxhZ3MgPSBudG9ocyhzLSZndDtmbGFncykgfCBJUF9WU19DT05OX0ZfU1lOQzsKLQkJZmxhZ3MgJmFtcDs9IH5JUF9WU19DT05OX0ZfSEFTSEVEOwomIzQzOwkJZmxhZ3MgPSBudG9ocyhzLSZndDtmbGFncyk7CiAJCWlmIChmbGFncyAmYW1wOyBJUF9WU19DT05OX0ZfU0VRX01BU0spIHsKIAkJCW9wdCA9IChzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKikmYW1wO3NbMV07CiAJCQlwICYjNDM7PSBGVUxMX0NPTk5fU0laRTsKQEAgLTk4Niw2ICYjNDM7MTAwMCwxMyBAQCBzdGF0aWMgdm9pZCBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGNvbnN0IGNoYXIgKmJ1ZmZlcgogCQkJcCAmIzQzOz0gU0lNUExFX0NPTk5fU0laRTsKIAkJfQogCiYjNDM7CQlpZiAoIWlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3MoZmxhZ3MpKSB7CiYjNDM7CQkJSVBfVlNfREJHKDIsICYjMzQ7QkFDS1VQIHYwLCBJbnZhbGlkIGZsYWdzIDB4JVhcbiYjMzQ7LCBmbGFncyk7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CQlmbGFncyAmYW1wOz0gSVBfVlNfQ09OTl9GX0JBQ0tVUF9NQVNLOwomIzQzOwkJZmxhZ3MgfD0gSVBfVlNfQ09OTl9GX1NZTkM7CiYjNDM7CiAJCXN0YXRlID0gbnRvaHMocy0mZ3Q7c3RhdGUpOwogCQlpZiAoIShmbGFncyAmYW1wOyBJUF9WU19DT05OX0ZfVEVNUExBVEUpKSB7CiAJCQlwcCA9IGlwX3ZzX3Byb3RvX2dldChzLSZndDtwcm90b2NvbCk7CkBAIC0xMTQxLDcgJiM0MzsxMTYyLDEzIEBAIHN0YXRpYyBpbmxpbmUgaW50IGlwX3ZzX3Byb2Nfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBfX3U4ICpwLCBfX3U4ICptCiAJfQogCiAJLyogR2V0IGZsYWdzIGFuZCBNYXNrIG9mZiB1bnN1cHBvcnRlZCAqLwotCWZsYWdzICA9IG50b2hsKHMtJmd0O3Y0LmZsYWdzKSAmYW1wOyBJUF9WU19DT05OX0ZfQkFDS1VQX01BU0s7CiYjNDM7CWZsYWdzID0gbnRvaGwocy0mZ3Q7djQuZmxhZ3MpOwomIzQzOwlpZiAoIWlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3MoZmxhZ3MpKSB7CiYjNDM7CQlJUF9WU19EQkcoMywgJiMzNDtCQUNLVVAsIEludmFsaWQgZmxhZ3MgMHglWFxuJiMzNDssIGZsYWdzKTsKJiM0MzsJCXJldGMgPSAyNTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CWZsYWdzICZhbXA7PSBJUF9WU19DT05OX0ZfQkFDS1VQX01BU0s7CiAJZmxhZ3MgfD0gSVBfVlNfQ09OTl9GX1NZTkM7CiAJc3RhdGUgPSBudG9ocyhzLSZndDt2NC5zdGF0ZSk7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU5NwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQVlMgU3luY2hyb25pemF0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0IHRoaXMgcGF0Y2ggaXMgYWN0dWFsbHkgY2hhbmdpbmcgYW5kIHRoZSBjb250ZXh0LiBGcm9tIHRoZSBkZXNjcmlwdGlvbiwgaXQgc2VlbXMgd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBtb2RpZmljYXRpb24gdG8gYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNgLiBTbywgdGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBvZiB0aGUgc3luY2hyb25pemF0aW9uIGxvZ2ljIHJlc2lkZXMuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNoYW5nZXMgaW1wYWN0IHRoZSBleGlzdGluZyBzeW5jaHJvbml6YXRpb24gcHJvY2Vzcy4KClRoZSBsaXN0ZWQgZnVuY3Rpb25zIGFyZSB0aGUga2V5IGhlcmU6IGBpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzYCwgd2hpY2ggYXBwZWFycyB0byBiZSBhIG5ldyBoZWxwZXIsIGBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjBgLCBhbmQgYGlwX3ZzX3Byb2Nfc3luY19jb25uYC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7dmUgZ290IGEgbmV3IHZhbGlkYXRpb24gc3RlcCwgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIGZsYWdzIGJlaW5nIHN5bmNocm9uaXplZCwgYW5kIHRoZW4gaGFuZGxpbmcgdGhlIG1lc3NhZ2VzIHRoZW1zZWx2ZXMsIGFuZCBmaW5hbGx5IHRoZSBhY3R1YWwgc3luY2hyb25pemF0aW9uLgoKSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIGEgZGVlcCBkaXZlIGludG8gYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNgIHVzaW5nIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCDigJMgd2hhdGV2ZXImIzM5O3MgcXVpY2tlc3Qg4oCTIHRvIGdldCBhIGZlZWwgZm9yIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgYXJvdW5kIHRoZXNlIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHNlZSAqaG93KiB0aGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCwgdGhlIGRhdGEgc3RydWN0dXJlcyB0aGV5IGludGVyYWN0IHdpdGgsIGFuZCB3aGF0IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgZXhpc3QuCgpGaW5hbGx5LCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoZSBJUFZTIHN5bmNocm9uaXphdGlvbiBkYWVtb24gaXRzZWxmLiBJJiMzOTttIGFzc3VtaW5nIGNoYW5nZXMgaGVyZSBtaWdodCByZWxhdGUgdG8gZmVhdHVyZXMgb3IgZGVwZW5kZW5jaWVzLiBJdOKAmXMgYWxzbyBwb3NzaWJsZSB0aGUgbmV3IGhlbHBlciBoYXMgaW50cm9kdWNlZCBzb21lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIEkgd2lsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBuZXdseSBjb25maWd1cmFibGUuIFRoaXMgd2lsbCBlbnN1cmUgSSB1bmRlcnN0YW5kIGhvdyB0aGlzIHBhdGNoIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBJUFZTIGxhbmRzY2FwZSBhbmQgYW55IGNvbmZpZ3VyYXRpb24gY2hhbmdlcy4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIGl0JiMzOTtzIHByb3Blcmx5IGhhbmRsZWQgaW4gYW55IGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfdnNfc3luYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU9MTY9aXBfdnMtb2JqcyA6PVx0aXBfdnNfY29ubi5vIGlwX3ZzX2NvcmUubyBpcF92c19jdGwubyBpcF92c19zY2hlZC5vXHQgICBcXFxubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlOjE3Olx0XHRpcF92c194bWl0Lm8gaXBfdnNfYXBwLm8gaXBfdnNfc3luYy5vXHQgICBcdFx0ICAgXFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZS0xOC1cdFx0aXBfdnNfZXN0Lm8gaXBfdnNfcHJvdG8ubyBpcF92c19wZS5vXHRcdFx0ICAgXFxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTEzNDc9c3RhdGljIHZvaWQgaXBfdnNfY29ubl9leHBpcmUoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xNDE2LVx0aWYgKGlwdnMtXHUwMDNlc3luY19zdGF0ZSBcdTAwMjYgSVBfVlNfU1RBVEVfTUFTVEVSKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxNDE3Olx0XHRpcF92c19zeW5jX2Nvbm4oaXB2cywgY3AsIHN5c2N0bF9zeW5jX3RocmVzaG9sZChpcHZzKSk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTE0MTgtXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0yMDk2PWlwX3ZzX2luX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjI2Ni1cdCAqXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIyNjc6XHQgKiBGb3IgT05FX1BLVCBsZXQgaXBfdnNfc3luY19jb25uKCkgZG8gdGhlIGZpbHRlciB3b3JrLlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMjY4LVx0ICovXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMjc1LVx0aWYgKGlwdnMtXHUwMDNlc3luY19zdGF0ZSBcdTAwMjYgSVBfVlNfU1RBVEVfTUFTVEVSKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMjc2Olx0XHRpcF92c19zeW5jX2Nvbm4oaXB2cywgY3AsIHBrdHMpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMjc3LVx0ZWxzZSBpZiAoKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVCkgXHUwMDI2XHUwMDI2IGNwLVx1MDAzZWNvbnRyb2wpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIyNzg6XHRcdC8qIGluY3JlbWVudCBpcyBkb25lIGluc2lkZSBpcF92c19zeW5jX2Nvbm4gdG9vICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIyNzktXHRcdGF0b21pY19pbmMoXHUwMDI2Y3AtXHUwMDNlY29udHJvbC1cdTAwM2Vpbl9wa3RzKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTI0ODA9c3RhdGljIGludCBfX25ldF9pbml0IF9faXBfdnNfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yNTEwLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyNTExOlx0aWYgKGlwX3ZzX3N5bmNfbmV0X2luaXQoaXB2cykgXHUwMDNjIDApXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTI1MTItXHRcdGdvdG8gc3luY19mYWlsO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MjU1Mj1zdGF0aWMgdm9pZCBfX25ldF9leGl0IF9faXBfdnNfZGV2X2NsZWFudXBfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqbmV0X2xpc3QpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yNTYyLVx0XHRzbXBfd21iKCk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjI1NjM6XHRcdGlwX3ZzX3N5bmNfbmV0X2NsZWFudXAoaXB2cyk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTI1NjQtXHR9XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMy0gKiAgICAgICAgICAgICAgdGltZS1vdXRzLCBhbmQgZmlyZXdhbGwgbWFya3MuXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE0OiAqICAgICAgICAgICAgICBJbiB2ZXIuMSBcJiMzNDtpcF92c19zeW5jX2Nvbm5fb3B0aW9uc1wmIzM0OyB3aWxsIGJlIHNlbnQgaW4gbmV0dy4gb3JkZXIuXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE1LSAqICAgICAgICAgICAgICBWZXIuIDAgY2FuIGJlIHR1cm5lZCBvbiBieSBzeXNjdGwgLXcgbmV0LmlwdjQudnMuc3luY192ZXJzaW9uPTBcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTIyLSAqXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjIzOiAqIGlwX3ZzX3N5bmM6ICBzeW5jIGNvbm5lY3Rpb24gaW5mbyBmcm9tIG1hc3RlciBsb2FkIGJhbGFuY2VyIHRvIGJhY2t1cHNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjQtICogICAgICAgICAgICAgIHRocm91Z2ggbXVsdGljYXN0XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz02NT1zdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IF9faXB2c19zeW5jX2tleTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY5LSAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo3MDpzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzEtXHRfX3U4XHRcdFx0cmVzZXJ2ZWQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy04OC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6ODk6c3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtOTAtXHRzdHJ1Y3QgaXBfdnNfc2VxICAgICAgICBpbl9zZXE7ICAgICAgICAgLyogaW5jb21pbmcgc2VxLiBzdHJ1Y3QgKi9cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEzMS0gKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTMyOnN0cnVjdCBpcF92c19zeW5jX3Y0IHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTMzLVx0X191OFx0XHRcdHR5cGU7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNTMtICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE1NDpzdHJ1Y3QgaXBfdnNfc3luY192NiB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE1NS1cdF9fdThcdFx0XHR0eXBlO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTczLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNzQ6dW5pb24gaXBfdnNfc3luY19jb25uIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTc1Olx0c3RydWN0IGlwX3ZzX3N5bmNfdjRcdHY0O1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNzY6XHRzdHJ1Y3QgaXBfdnNfc3luY192Nlx0djY7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE3Ny19O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTk1LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxOTY6c3RydWN0IGlwX3ZzX3N5bmNfdGhyZWFkX2RhdGEge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xOTctXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yMDQtLyogVmVyc2lvbiAwIGRlZmluaXRpb24gb2YgcGFja2V0IHNpemVzICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjIwNTojZGVmaW5lIFNJTVBMRV9DT05OX1NJWkUgIChzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl92MCkpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTIwNi0jZGVmaW5lIEZVTExfQ09OTl9TSVpFICBcXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoyMDc6KHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwKSAmIzQzOyBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zKSlcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjA4LVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjQ0LS8qIFZlcnNpb24gMCBoZWFkZXIgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MjQ1OnN0cnVjdCBpcF92c19zeW5jX21lc2dfdjAge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yNDYtXHRfX3U4ICAgICAgICAgICAgICAgICAgICBucl9jb25ucztcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTI0OS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MjUwOlx0LyogaXBfdnNfc3luY19jb25uIGVudHJpZXMgc3RhcnQgaGVyZSAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yNTEtfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTI1My0vKiBWZXJzaW9uIDEgaGVhZGVyICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjI1NDpzdHJ1Y3QgaXBfdnNfc3luY19tZXNnIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjU1LVx0X191OFx0XHRcdHJlc2VydmVkO1x0LyogbXVzdCBiZSB6ZXJvICovXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yNjAtXHRfX3UxNlx0XHRcdHNwYXJlO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoyNjE6XHQvKiBpcF92c19zeW5jX2Nvbm4gZW50cmllcyBzdGFydCBoZXJlICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTI2Mi19O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MjY0PXVuaW9uIGlwdnNfc29ja2FkZHIge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjY4LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoyNjk6c3RydWN0IGlwX3ZzX3N5bmNfYnVmZiB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTI3MC1cdHN0cnVjdCBsaXN0X2hlYWQgICAgICAgIGxpc3Q7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yNzMtXHQvKiBwb2ludGVycyBmb3IgdGhlIG1lc3NhZ2UgZGF0YSAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoyNzQ6XHRzdHJ1Y3QgaXBfdnNfc3luY19tZXNnICAqbWVzZztcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjc1LVx0dW5zaWduZWQgY2hhciAgICAgICAgICAgKmhlYWQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0yOTU9c3RhdGljIHZvaWQgaHRvbl9zZXEoc3RydWN0IGlwX3ZzX3NlcSAqaG8sIHN0cnVjdCBpcF92c19zZXEgKm5vKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMzAxLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzozMDI6c3RhdGljIGlubGluZSBzdHJ1Y3QgaXBfdnNfc3luY19idWZmICpcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMzAzLXNiX2RlcXVldWUoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcHZzX21hc3Rlcl9zeW5jX3N0YXRlICptcylcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMzA0LXtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MzA1Olx0c3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqc2I7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTMwNi1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTMxMS1cdH0gZWxzZSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjMxMjpcdFx0c2IgPSBsaXN0X2VudHJ5KG1zLVx1MDAzZXN5bmNfcXVldWUubmV4dCwgc3RydWN0IGlwX3ZzX3N5bmNfYnVmZixcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMzEzLVx0XHRcdFx0bGlzdCk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0zMjYtICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjMyNzpzdGF0aWMgaW5saW5lIHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzozMjg6aXBfdnNfc3luY19idWZmX2NyZWF0ZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgdW5zaWduZWQgaW50IGxlbilcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMzI5LXtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MzMwOlx0c3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqc2I7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTMzMS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MzMyOlx0aWYgKCEoc2I9a21hbGxvY19vYmooc3RydWN0IGlwX3ZzX3N5bmNfYnVmZiwgR0ZQX0FUT01JQykpKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0zMzMtXHRcdHJldHVybiBOVUxMO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0zMzQtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjMzNTpcdGxlbiA9IG1heF90KHVuc2lnbmVkIGludCwgbGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19tZXNnKSxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMzM2LVx0XHQgICAgaXB2cy1cdTAwM2VtY2ZnLnN5bmNfbWF4bGVuKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTM0NC1cdHNiLVx1MDAzZW1lc2ctXHUwMDNlc3luY2lkID0gaXB2cy1cdTAwM2VtY2ZnLnN5bmNpZDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MzQ1Olx0c2ItXHUwMDNlbWVzZy1cdTAwM2VzaXplID0gaHRvbnMoc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX21lc2cpKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMzQ2LVx0c2ItXHUwMDNlbWVzZy1cdTAwM2Vucl9jb25ucyA9IDA7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTM0Ny1cdHNiLVx1MDAzZW1lc2ctXHUwMDNlc3BhcmUgPSAwO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzozNDg6XHRzYi1cdTAwM2VoZWFkID0gKHVuc2lnbmVkIGNoYXIgKilzYi1cdTAwM2VtZXNnICYjNDM7IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19tZXNnKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMzQ5LVx0c2ItXHUwMDNlZW5kID0gKHVuc2lnbmVkIGNoYXIgKilzYi1cdTAwM2VtZXNnICYjNDM7IGxlbjtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTM1NC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MzU1OnN0YXRpYyBpbmxpbmUgdm9pZCBpcF92c19zeW5jX2J1ZmZfcmVsZWFzZShzdHJ1Y3QgaXBfdnNfc3luY19idWZmICpzYilcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMzU2LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTM2MT1zdGF0aWMgaW5saW5lIHZvaWQgc2JfcXVldWVfdGFpbChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTM2My17XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjM2NDpcdHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKnNiID0gbXMtXHUwMDNlc3luY19idWZmO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0zNjUtXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0zNzktXHR9IGVsc2Vcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MzgwOlx0XHRpcF92c19zeW5jX2J1ZmZfcmVsZWFzZShzYik7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTM4MS1cdHNwaW5fdW5sb2NrKFx1MDAyNmlwdnMtXHUwMDNlc3luY19sb2NrKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTM4Ny0gKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6Mzg4OnN0YXRpYyBpbmxpbmUgc3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTM4OS1nZXRfY3Vycl9zeW5jX2J1ZmYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcHZzX21hc3Rlcl9zeW5jX3N0YXRlICptcyxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTM5MS17XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjM5MjpcdHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKnNiO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0zOTMtXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz00MDY9c2VsZWN0X21hc3Rlcl90aHJlYWRfaWQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTQxMy0gKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NDE0OnN0YXRpYyBpbmxpbmUgc3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjQxNTppcF92c19zeW5jX2J1ZmZfY3JlYXRlX3YwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCB1bnNpZ25lZCBpbnQgbGVuKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy00MTYte1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo0MTc6XHRzdHJ1Y3QgaXBfdnNfc3luY19idWZmICpzYjtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NDE4Olx0c3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCAqbWVzZztcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNDE5LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo0MjA6XHRpZiAoIShzYj1rbWFsbG9jX29iaihzdHJ1Y3QgaXBfdnNfc3luY19idWZmLCBHRlBfQVRPTUlDKSkpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTQyMS1cdFx0cmV0dXJuIE5VTEw7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTQyMi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NDIzOlx0bGVuID0gbWF4X3QodW5zaWduZWQgaW50LCBsZW4gJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjApLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy00MjQtXHRcdCAgICBpcHZzLVx1MDAzZW1jZmcuc3luY19tYXhsZW4pO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNDI5LVx0fVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo0MzA6XHRtZXNnID0gKHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjAgKilzYi1cdTAwM2VtZXNnO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy00MzEtXHRtZXNnLVx1MDAzZW5yX2Nvbm5zID0gMDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNDMyLVx0bWVzZy1cdTAwM2VzeW5jaWQgPSBpcHZzLVx1MDAzZW1jZmcuc3luY2lkO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo0MzM6XHRtZXNnLVx1MDAzZXNpemUgPSBodG9ucyhzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCkpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo0MzQ6XHRzYi1cdTAwM2VoZWFkID0gKHVuc2lnbmVkIGNoYXIgKiltZXNnICYjNDM7IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19tZXNnX3YwKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNDM1LVx0c2ItXHUwMDNlZW5kID0gKHVuc2lnbmVkIGNoYXIgKiltZXNnICYjNDM7IGxlbjtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTQ0MT1zdGF0aWMgaW5saW5lIGJvb2wgaW5fcGVyc2lzdGVuY2Uoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNDU4LSAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo0NTk6c3RhdGljIGludCBpcF92c19zeW5jX2Nvbm5fbmVlZGVkKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy00NjAtXHRcdFx0XHQgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01MzgtICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjUzOTpzdGF0aWMgdm9pZCBpcF92c19zeW5jX2Nvbm5fdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTQwLVx0XHRcdCAgICAgICBpbnQgcGt0cylcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTQxLXtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NTQyOlx0c3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCAqbTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NTQzOlx0c3RydWN0IGlwX3ZzX3N5bmNfY29ubl92MCAqcztcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NTQ0Olx0c3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqYnVmZjtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTQ1LVx0c3RydWN0IGlwdnNfbWFzdGVyX3N5bmNfc3RhdGUgKm1zO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTU0LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo1NTU6XHRpZiAoIWlwX3ZzX3N5bmNfY29ubl9uZWVkZWQoaXB2cywgY3AsIHBrdHMpKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01NTYtXHRcdHJldHVybjtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU2OS1cdGlmIChidWZmKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjU3MDpcdFx0bSA9IChzdHJ1Y3QgaXBfdnNfc3luY19tZXNnX3YwICopIGJ1ZmYtXHUwMDNlbWVzZztcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTcxLVx0XHQvKiBTZW5kIGJ1ZmZlciBpZiBpdCBpcyBmb3IgdjEgKi9cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU3OC1cdGlmICghYnVmZikge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo1Nzk6XHRcdGJ1ZmYgPSBpcF92c19zeW5jX2J1ZmZfY3JlYXRlX3YwKGlwdnMsIGxlbik7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU4MC1cdFx0aWYgKCFidWZmKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU4MS1cdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZpcHZzLVx1MDAzZXN5bmNfYnVmZl9sb2NrKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NTgyOlx0XHRcdHByX2VycihcJiMzNDtpcF92c19zeW5jX2J1ZmZfY3JlYXRlIGZhaWxlZC5cXG5cJiMzNDspO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01ODMtXHRcdFx0cmV0dXJuO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTg3LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo1ODg6XHRtID0gKHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjAgKikgYnVmZi1cdTAwM2VtZXNnO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo1ODk6XHRzID0gKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAgKikgYnVmZi1cdTAwM2VoZWFkO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01OTAtXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02MDItXHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9TRVFfTUFTSykge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo2MDM6XHRcdHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqb3B0ID1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NjA0Olx0XHRcdChzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKilcdTAwMjZzWzFdO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02MDUtXHRcdG1lbWNweShvcHQsIFx1MDAyNmNwLVx1MDAzZXN5bmNfY29ubl9vcHQsIHNpemVvZigqb3B0KSk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02MTktXHRcdFx0cGt0cyA9IHN5c2N0bF9zeW5jX3RocmVzaG9sZChpcHZzKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NjIwOlx0XHRpcF92c19zeW5jX2Nvbm4oaXB2cywgY3AsIHBrdHMpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02MjEtXHR9XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02MjgtICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjYyOTp2b2lkIGlwX3ZzX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgcGt0cylcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjMwLXtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NjMxOlx0c3RydWN0IGlwX3ZzX3N5bmNfbWVzZyAqbTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NjMyOlx0dW5pb24gaXBfdnNfc3luY19jb25uICpzO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo2MzM6XHRzdHJ1Y3QgaXBfdnNfc3luY19idWZmICpidWZmO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02MzQtXHRzdHJ1Y3QgaXB2c19tYXN0ZXJfc3luY19zdGF0ZSAqbXM7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02NDAtXHRpZiAoc3lzY3RsX3N5bmNfdmVyKGlwdnMpID09IDApIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NjQxOlx0XHRpcF92c19zeW5jX2Nvbm5fdjAoaXB2cywgY3AsIHBrdHMpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02NDItXHRcdHJldHVybjtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY0Ny1zbG9vcDpcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NjQ4Olx0aWYgKCFpcF92c19zeW5jX2Nvbm5fbmVlZGVkKGlwdnMsIGNwLCBwa3RzKSlcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjQ5LVx0XHRnb3RvIGNvbnRyb2w7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02NzEtXHRpZiAoY3AtXHUwMDNlYWYgPT0gQUZfSU5FVDYpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjY3MjpcdFx0bGVuID0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX3Y2KTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjczLVx0ZWxzZVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02NzQtI2VuZGlmXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjY3NTpcdFx0bGVuID0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX3Y0KTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjc2LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02NzctXHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9TRVFfTUFTSylcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6Njc4Olx0XHRsZW4gJiM0Mzs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMpICYjNDM7IDI7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY3OS1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTcwMC1cdGlmICghYnVmZikge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo3MDE6XHRcdGJ1ZmYgPSBpcF92c19zeW5jX2J1ZmZfY3JlYXRlKGlwdnMsIGxlbik7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTcwMi1cdFx0aWYgKCFidWZmKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTcwMy1cdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZpcHZzLVx1MDAzZXN5bmNfYnVmZl9sb2NrKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NzA0Olx0XHRcdHByX2VycihcJiMzNDtpcF92c19zeW5jX2J1ZmZfY3JlYXRlIGZhaWxlZC5cXG5cJiMzNDspO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03MDUtXHRcdFx0cmV0dXJuO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzE3LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo3MTg6XHRzID0gKHVuaW9uIGlwX3ZzX3N5bmNfY29ubiAqKXA7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTcxOS1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTczNC1cdGlmIChjcC1cdTAwM2VhZiA9PSBBRl9JTkVUNikge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo3MzU6XHRcdHAgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY192Nik7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTczNi1cdFx0cy1cdTAwM2V2Ni5jYWRkciA9IGNwLVx1MDAzZWNhZGRyLmluNjtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTc0MS1cdHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NzQyOlx0XHRwICYjNDM7PSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfdjQpO1x0Lyogb3B0aW9ucyBwdHIgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzQzLVx0XHRzLVx1MDAzZXY0LmNhZGRyID0gY3AtXHUwMDNlY2FkZHIuaXA7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03NDgtXHRcdCoocCYjNDM7JiM0MzspID0gSVBWU19PUFRfU0VRX0RBVEE7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjc0OTpcdFx0KihwJiM0MzsmIzQzOykgPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzUwLVx0XHRodG9uX3NlcShcdTAwMjZjcC1cdTAwM2Vpbl9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz03ODc9c3RhdGljIGlubGluZSBpbnRcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6Nzg4OmlwX3ZzX2Nvbm5fZmlsbF9wYXJhbV9zeW5jKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgYWYsIHVuaW9uIGlwX3ZzX3N5bmNfY29ubiAqc2MsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTc4OS1cdFx0XHQgICBzdHJ1Y3QgaXBfdnNfY29ubl9wYXJhbSAqcCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTg0MT1zdGF0aWMgdm9pZCBpcF92c19wcm9jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uX3BhcmFtICpwYXJhbSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTg0NS1cdFx0XHQgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0LCBfX3UzMiBmd21hcmssXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjg0NjpcdFx0XHQgICAgc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICpvcHQpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTg0Ny17XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05NTItLyogQ2hlY2sgZm9yIGluY29tcGF0aWJsZSBmbGFncyAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo5NTM6c3RhdGljIGJvb2wgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyh1MzIgZmxhZ3MpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTk1NC17XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz05NzA9c3RhdGljIHZvaWQgaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBjb25zdCBjaGFyICpidWZmZXIsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05NzIte1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo5NzM6XHRzdHJ1Y3QgaXBfdnNfc3luY19tZXNnX3YwICptID0gKHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjAgKilidWZmZXI7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjk3NDpcdHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAgKnM7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjk3NTpcdHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqb3B0O1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05NzYtXHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtOTgwLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo5ODE6XHRwID0gKGNoYXIgKilidWZmZXIgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjApO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05ODItXHRmb3IgKGk9MDsgaVx1MDAzY20tXHUwMDNlbnJfY29ubnM7IGkmIzQzOyYjNDM7KSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05ODgtXHRcdH1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6OTg5Olx0XHRzID0gKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAgKikgcDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtOTkwLVx0XHRmbGFncyA9IG50b2hzKHMtXHUwMDNlZmxhZ3MpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05OTEtXHRcdGlmIChmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX1NFUV9NQVNLKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjk5MjpcdFx0XHRvcHQgPSAoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICopXHUwMDI2c1sxXTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtOTkzLVx0XHRcdHAgJiM0Mzs9IEZVTExfQ09OTl9TSVpFO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTAwMi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTAwMzpcdFx0aWYgKCFpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzKGZsYWdzKSkge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMDA0LVx0XHRcdElQX1ZTX0RCRygyLCBcJiMzNDtCQUNLVVAgdjAsIEludmFsaWQgZmxhZ3MgMHglWFxcblwmIzM0OywgZmxhZ3MpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTA0NT1zdGF0aWMgaW5saW5lIGludCBpcF92c19wcm9jX3NlcW9wdChfX3U4ICpwLCB1bnNpZ25lZCBpbnQgcGxlbixcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTA0Ni1cdFx0XHRcdCAgICBfX3UzMiAqb3B0X2ZsYWdzLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMDQ3Olx0XHRcdFx0ICAgIHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqb3B0KVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMDQ4LXtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTA0OTpcdHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqdG9wdDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTA1MC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTA1MTpcdHRvcHQgPSAoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICopcDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTA1Mi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTA1MzpcdGlmIChwbGVuICE9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMpKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEwNTQtXHRcdElQX1ZTX0RCRygyLCBcJiMzNDtCQUNLVVAsIGJvZ3VzIGNvbm4gb3B0aW9ucyBsZW5ndGhcXG5cJiMzNDspO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTA4Nz1zdGF0aWMgaW5saW5lIGludCBpcF92c19wcm9jX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgX191OCAqcCwgX191OCAqbXNnX2VuZClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTA4OC17XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEwODk6XHRzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgb3B0O1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMDkwOlx0dW5pb24gIGlwX3ZzX3N5bmNfY29ubiAqcztcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTA5MS1cdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHA7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMDk4LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMDk5Olx0cyA9ICh1bmlvbiBpcF92c19zeW5jX2Nvbm4gKikgcDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTEwMC1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTExMDMtXHRcdGFmID0gQUZfSU5FVDY7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjExMDQ6XHRcdHAgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY192Nik7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTExMDUtI2Vsc2Vcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTExMTEtXHRcdGFmID0gQUZfSU5FVDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTExMjpcdFx0cCAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX3Y0KTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTExMy1cdH0gZWxzZSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMTY1LVx0ZmxhZ3MgPSBudG9obChzLVx1MDAzZXY0LmZsYWdzKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTE2NjpcdGlmICghaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyhmbGFncykpIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTE2Ny1cdFx0SVBfVlNfREJHKDMsIFwmIzM0O0JBQ0tVUCwgSW52YWxpZCBmbGFncyAweCVYXFxuXCYjMzQ7LCBmbGFncyk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xMjI3PXN0YXRpYyB2b2lkIGlwX3ZzX3Byb2Nlc3NfbWVzc2FnZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgX191OCAqYnVmZmVyLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTIyOS17XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEyMzA6XHRzdHJ1Y3QgaXBfdnNfc3luY19tZXNnICptMiA9IChzdHJ1Y3QgaXBfdnNfc3luY19tZXNnICopYnVmZmVyO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMjMxLVx0X191OCAqcCwgKm1zZ19lbmQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMjMzLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMjM0Olx0aWYgKGJ1ZmxlbiBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjApKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEyMzUtXHRcdElQX1ZTX0RCRygyLCBcJiMzNDtCQUNLVVAsIG1lc3NhZ2UgaGVhZGVyIHRvbyBzaG9ydFxcblwmIzM0Oyk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMjUxLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMjUyOlx0XHRtc2dfZW5kID0gYnVmZmVyICYjNDM7IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19tZXNnKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTI1My1cdFx0bnJfY29ubnMgPSBtMi1cdTAwM2Vucl9jb25ucztcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEyNTUtXHRcdGZvciAoaT0wOyBpXHUwMDNjbnJfY29ubnM7IGkmIzQzOyYjNDM7KSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEyNTY6XHRcdFx0dW5pb24gaXBfdnNfc3luY19jb25uICpzO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMjU3LVx0XHRcdHVuc2lnbmVkIGludCBzaXplO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTI2NC1cdFx0XHR9XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEyNjU6XHRcdFx0cyA9ICh1bmlvbiBpcF92c19zeW5jX2Nvbm4gKilwO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMjY2LVx0XHRcdHNpemUgPSBudG9ocyhzLVx1MDAzZXY0LnZlcl9zaXplKSBcdTAwMjYgU1ZFUl9NQVNLO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTYxMD1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE2MTE6aXBfdnNfc2VuZF9zeW5jX21zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgaXBfdnNfc3luY19tZXNnICptc2cpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE2MTIte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTY0Mj1zdGF0aWMgdm9pZCBtYXN0ZXJfd2FrZXVwX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNjYwLS8qIEdldCBuZXh0IGJ1ZmZlciB0byBzZW5kICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE2NjE6c3RhdGljIGlubGluZSBzdHJ1Y3QgaXBfdnNfc3luY19idWZmICpcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTY2Mi1uZXh0X3N5bmNfYnVmZihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwdnNfbWFzdGVyX3N5bmNfc3RhdGUgKm1zKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNjYzLXtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTY2NDpcdHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKnNiO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNjY1LVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTY3Mz1zdGF0aWMgaW50IHN5bmNfdGhyZWFkX21hc3Rlcih2b2lkICpkYXRhKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNjc0LXtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTY3NTpcdHN0cnVjdCBpcF92c19zeW5jX3RocmVhZF9kYXRhICp0aW5mbyA9IGRhdGE7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE2NzYtXHRzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyA9IHRpbmZvLVx1MDAzZWlwdnM7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNjc4LVx0c3RydWN0IHNvY2sgKnNrID0gdGluZm8tXHUwMDNlc29jay1cdTAwM2Vzaztcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTY3OTpcdHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKnNiO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNjgwLVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTcwMi1cdFx0fVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNzAzOlx0XHRpcF92c19zeW5jX2J1ZmZfcmVsZWFzZShzYik7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE3MDQtXHR9XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNzA4LVx0aWYgKHNiKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNzA5Olx0XHRpcF92c19zeW5jX2J1ZmZfcmVsZWFzZShzYik7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE3MTAtXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNzEyLVx0d2hpbGUgKChzYiA9IHNiX2RlcXVldWUoaXB2cywgbXMpKSlcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTcxMzpcdFx0aXBfdnNfc3luY19idWZmX3JlbGVhc2Uoc2IpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNzE0LVx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTcxOC1cdGlmIChzYilcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTcxOTpcdFx0aXBfdnNfc3luY19idWZmX3JlbGVhc2Uoc2IpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNzIwLVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTcyNT1zdGF0aWMgaW50IHN5bmNfdGhyZWFkX2JhY2t1cCh2b2lkICpkYXRhKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNzI2LXtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTcyNzpcdHN0cnVjdCBpcF92c19zeW5jX3RocmVhZF9kYXRhICp0aW5mbyA9IGRhdGE7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE3MjgtXHRzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyA9IHRpbmZvLVx1MDAzZWlwdnM7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xNzYyPWludCBzdGFydF9zeW5jX3RocmVhZChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwdnNfc3luY19kYWVtb25fY2ZnICpjLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTc2NC17XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE3NjU6XHRzdHJ1Y3QgaXBfdnNfc3luY190aHJlYWRfZGF0YSAqdGkgPSBOVUxMLCAqdGluZm87XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE3NjYtXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNzc0LVx0SVBfVlNfREJHKDcsIFwmIzM0OyVzKCk6IHBpZCAlZFxcblwmIzM0OywgX19mdW5jX18sIHRhc2tfcGlkX25yKGN1cnJlbnQpKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTc3NTpcdElQX1ZTX0RCRyg3LCBcJiMzNDtFYWNoIGlwX3ZzX3N5bmNfY29ubiBlbnRyeSBuZWVkcyAlemQgYnl0ZXNcXG5cJiMzNDssXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE3NzY6XHRcdCAgc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjApKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTc3Ny1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE4ODktXHRyZXN1bHQgPSAtRU5PTUVNO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxODkwOlx0dGkgPSBremFsbG9jX29ianMoc3RydWN0IGlwX3ZzX3N5bmNfdGhyZWFkX2RhdGEsIGNvdW50KTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTg5MS1cdGlmICghdGkpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xOTc4PWludCBzdG9wX3N5bmNfdGhyZWFkKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgc3RhdGUpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE5Nzkte1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxOTgwOlx0c3RydWN0IGlwX3ZzX3N5bmNfdGhyZWFkX2RhdGEgKnRpLCAqdGluZm87XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE5ODEtXHRpbnQgaWQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yMDY1LSAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoyMDY2OmludCBfX25ldF9pbml0IGlwX3ZzX3N5bmNfbmV0X2luaXQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTIwNjcte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjA3My1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MjA3NDp2b2lkIGlwX3ZzX3N5bmNfbmV0X2NsZWFudXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTIwNzUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDY4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBQYXRjaCYjMzk7cyBQdXJwb3NlKioKClJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gQmVmb3JlIEkgZXZlbiAqdGhpbmsqIGFib3V0IGFwcGx5aW5nIHRoaXMgcGF0Y2ggb3IgZXZhbHVhdGluZyBpdHMgcXVhbGl0eSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogaXQgZXhpc3RzLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB1c2UgYGdpdCBzaG93YCBvbiB0aGUgc3BlY2lmaWMgY29tbWl0IGluIHF1ZXN0aW9uLiBUaGF0JiMzOTtzIHRoZSBxdWlja2VzdCByb3V0ZSB0byB0aGUgbWV0YWRhdGE6IHRoZSBjb21taXQgbWVzc2FnZSwgYW55IHJlbGF0ZWQgaXNzdWUgSURzLCBhbmQgdGhlIGRpZmYgaXRzZWxmLiBUaGUgY29tbWl0IG1lc3NhZ2UgKnNob3VsZCogcHJvdmlkZSBhIGNvbmNpc2UgcHJvYmxlbSBzdGF0ZW1lbnQgYW5kLCBpZGVhbGx5LCBleHBsYWluIHRoZSB1bmRlcmx5aW5nIHJhdGlvbmFsZSBmb3IgdGhlIGZpeC4gSSYjMzk7bSBob3BpbmcgdG8gc2VlIGEgY2xlYXIgZGVzY3JpcHRpb24gb2YgdGhlIGJ1ZywgYW55IHJlbGV2YW50IHBlcmZvcm1hbmNlIG1ldHJpY3MgYmVmb3JlIGFuZCBhZnRlciwgb3IgbWF5YmUgYSByYXRpb25hbGUgZm9yIGEgbmV3IGZlYXR1cmUuCgpJJiMzOTttIGFsc28gbG9va2luZyBmb3IgYSBjbGVhbiwgd2VsbC1mb3JtZWQgY29tbWl0IG1lc3NhZ2UuIEl0IG5lZWRzIHRvIGJlIGNsZWFyIGFuZCBjb25jaXNlLiBJZiBpdOKAmXMgdW5jbGVhciwgdGhlbiBJIG1heSBuZWVkIHRvIGRpdmUgZnVydGhlciB0byB0aGUgcmVsYXRlZCB0aWNrZXQgb3IgY29kZS4KClVsdGltYXRlbHksIEkgd2FudCB0byBmb3JtIGEgbWVudGFsIG1vZGVsIG9mIHRoZSAqcHJvYmxlbSBzcGFjZSogdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nLiBVbmRlcnN0YW5kaW5nIHRoZSAqd2h5KiBpcyB0aGUgZm91bmRhdGlvbiBmb3IgcHJvcGVybHkgYXNzZXNzaW5nIHRoZSAqaG93Ki4gSSBjYW4gYWxyZWFkeSBzdGFydCB0aGlua2luZyBhYm91dCBwb3NzaWJsZSBlZGdlIGNhc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lQX1ZTX0NPTk5fRl9OT19DUE9SVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTM2Nz1fX2lwX3ZzX2Nvbm5faW5fZ2V0KGNvbnN0IHN0cnVjdCBpcF92c19jb25uX3BhcmFtICpwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMzk1LVx0XHRcdFx0ICAgICghcC1cdTAwM2VjcG9ydCBeXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjM5NjpcdFx0XHRcdCAgICAgKCEoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9OT19DUE9SVCkpKSBcdTAwMjZcdTAwMjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMzk3LVx0XHRcdFx0ICAgIHAtXHUwMDNlcHJvdG9jb2wgPT0gY3AtXHUwMDNlcHJvdG9jb2wpIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTY0Mz12b2lkIGlwX3ZzX2Nvbm5fZmlsbF9jcG9ydChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIF9fYmUxNiBjcG9ydClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTY4NC1cdFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2Y3AtXHUwMDNlbG9jayk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjY4NTpcdFx0XHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9OT19DUE9SVCBcdTAwMjZcdTAwMjYgYnlfbWUpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTY4Ni1cdFx0XHRcdGNwLVx1MDAzZWNwb3J0ID0gMDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTc1Ny1cdC8qIEZpbGwgY3BvcnQgb25jZSwgZXZlbiBpZiBtdWx0aXBsZSBwYWNrZXRzIHRyeSB0byBkbyBpdCAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo3NTg6XHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9OT19DUE9SVCBcdTAwMjZcdTAwMjYgKCFjcC1cdTAwM2VjcG9ydCB8fCBieV9tZSkpIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNzU5LVx0XHQvKiBJZiB3ZSByYWNlIHdpdGggcmVzaXppbmcgbWFrZSBzdXJlIGNwb3J0IGlzIHNldCBmb3IgZGlyIDEgKi9cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTc2NS1cdFx0XHRhdG9taWNfZGVjKFx1MDAyNmlwdnMtXHUwMDNlbm9fY3BvcnRfY29ubnNbYWZfaWRdKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6NzY2Olx0XHRcdGNwLVx1MDAzZWZsYWdzIFx1MDAyNj0gfklQX1ZTX0NPTk5fRl9OT19DUE9SVDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNzY3LVx0XHR9XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz04NzU9c3RydWN0IGlwX3ZzX3JodCAqaXBfdnNfY29ubl90YWJfYWxsb2Moc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBidWNrZXRzLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtODgyLVx0c2NvdW50cyA9IGNsYW1wKGJ1Y2tldHMgXHUwMDNlXHUwMDNlIDYsIDEsIDI1Nik7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjg4MzpcdC8qIGxvY2tzOiBiYXNlZCBvbiBwYXJhbGxlbCBJUF9WU19DT05OX0ZfTk9fQ1BPUlQgb3BlcmF0aW9ucyAmIzQzOyByZXNpemUgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtODg0LVx0bG9ja3MgPSBjbGFtcCg4LCAxLCBzY291bnRzKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTEzNDc9c3RhdGljIHZvaWQgaXBfdnNfY29ubl9leHBpcmUoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMzk0LVx0XHRpcF92c191bmJpbmRfZGVzdChjcCk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjEzOTU6XHRcdGlmICh1bmxpa2VseShjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX05PX0NQT1JUKSkge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMzk2LVx0XHRcdGludCBhZl9pZCA9IGlwX3ZzX2FmX2luZGV4KGNwLVx1MDAzZWFmKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTE0NDQ9aXBfdnNfY29ubl9uZXcoY29uc3Qgc3RydWN0IGlwX3ZzX2Nvbm5fcGFyYW0gKnAsIGludCBkZXN0X2FmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTUxNi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTUxNzpcdGlmICh1bmxpa2VseShmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX05PX0NQT1JUKSkge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xNTE4LVx0XHRpbnQgYWZfaWQgPSBpcF92c19hZl9pbmRleChjcC1cdTAwM2VhZik7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jPTI1ND1zdGF0aWMgaW50IGlwX3ZzX2Z0cF9vdXQoc3RydWN0IGlwX3ZzX2FwcCAqYXBwLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTMzNy1cdFx0bl9jcCA9IGlwX3ZzX2Nvbm5fbmV3KFx1MDAyNnAsIGNwLVx1MDAzZWFmLCBcdTAwMjZmcm9tLCBwb3J0LFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jOjMzODpcdFx0XHRcdCAgICAgIElQX1ZTX0NPTk5fRl9OT19DUE9SVCB8XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtMzM5LVx0XHRcdFx0ICAgICAgSVBfVlNfQ09OTl9GX05GQ1QsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz05NTM9c3RhdGljIGJvb2wgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyh1MzIgZmxhZ3MpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05NTctXHQgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6OTU4Olx0aWYgKGZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfTk9fQ1BPUlQpIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtOTU5LVx0XHRpZiAoZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9URU1QTEFURSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jPTc4Nz1pcF92c19uYXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYy03OTMtXHQvKiBjaGVjayBpZiBpdCBpcyBhIGNvbm5lY3Rpb24gb2Ygbm8tY2xpZW50LXBvcnQgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM6Nzk0Olx0aWYgKHVubGlrZWx5KGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfTk9fQ1BPUlQpKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jLTc5NS1cdFx0X19iZTE2IF9wdCwgKnA7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYz04NzE9aXBfdnNfbmF0X3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMtODc3LVx0LyogY2hlY2sgaWYgaXQgaXMgYSBjb25uZWN0aW9uIG9mIG5vLWNsaWVudC1wb3J0ICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jOjg3ODpcdGlmICh1bmxpa2VseShjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX05PX0NQT1JUIFx1MDAyNlx1MDAyNiAhaXB2c2gtXHUwMDNlZnJhZ29mZnMpKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jLTg3OS1cdFx0X19iZTE2IF9wdCwgKnA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0NzYKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCBjb25zaWRlcmluZyBJJiMzOTttIGFuIGV4cGVydDoKCioqRGl2aW5nIGludG8gdGhlIElQVlMgU3luY2hyb25pemF0aW9uIENvZGUqKgoKT2theSwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byB1bmRlcnN0YW5kIHRoaXMgY29kZSwgYW5kIGl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGZvY3VzZWQgb24gYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNgLiBUaGF0JiMzOTtzIHRoZSBoZWFydCBvZiBob3cgSVBWUywgdGhlIExpbnV4IFZpcnR1YWwgU2VydmVyLCBoYW5kbGVzIHN5bmNocm9uaXphdGlvbi4gUmlnaHQsIHRpbWUgdG8gZGlnIGluIGFuZCBnZXQgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNoYW5nZXMuIEkmIzM5O2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIGRpZmYuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBjbHVlcyB0aGF0IHN1Z2dlc3QgaXNzdWVzIHRoYXQgbmVlZCB0byBiZSBhZGRyZXNzZWQgaW4gdGhlIGNvbnRleHQgdGhhdCB0aGV5IGFwcGVhciBpbiB0aGUgZmlsZS4gSSB3aWxsIGZvY3VzIG9uIGFueSBuZXcgZmVhdHVyZXMsIGJ1ZyBmaXhlcywgb3IgcGVyZm9ybWFuY2UgdHdlYWtzLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGNvbnRleHQgb2YgdGhlIG1vZGlmaWNhdGlvbnMsIGFuZCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBJUFZTIHN5c3RlbS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NDU6XHRcdFx0XHRjcC1cdTAwM2V0aW1lb3V0ID0gcGQtXHUwMDNldGltZW91dF90YWJsZVtzdGF0ZV07XG4gOTQ2Olx0XHRcdGVsc2VcbiA5NDc6XHRcdFx0XHRjcC1cdTAwM2V0aW1lb3V0ID0gKDMqNjAqSFopO1xuIDk0ODpcdFx0fVxuIDk0OTpcdFx0aXBfdnNfY29ubl9wdXQoY3ApO1xuIDk1MDpcdH1cbiA5NTE6XHRcbiA5NTI6XHQvKiBDaGVjayBmb3IgaW5jb21wYXRpYmxlIGZsYWdzICovXG4gOTUzOlx0c3RhdGljIGJvb2wgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyh1MzIgZmxhZ3MpXG4gOTU0Olx0e1xuIDk1NTpcdFx0LyogV2UgZG8gbm90IGV4cGVjdCBOT19DUE9SVCwgZXNwZWNpYWxseSB0byBhbGxvdyBsb29rdXBzXG4gOTU2Olx0XHQgKiB0byBoaXQgdGVtcGxhdGVzXG4gOTU3Olx0XHQgKi9cbiA5NTg6XHRcdGlmIChmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX05PX0NQT1JUKSB7XG4gOTU5Olx0XHRcdGlmIChmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX1RFTVBMQVRFKVxuIDk2MDpcdFx0XHRcdHJldHVybiBmYWxzZTtcbiA5NjE6XHRcdH1cbiA5NjI6XHRcdGlmIChmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpXG4gOTYzOlx0XHRcdHJldHVybiBmYWxzZTtcbiA5NjQ6XHRcdHJldHVybiB0cnVlO1xuIDk2NTpcdH1cbiA5NjY6XHRcbiA5Njc6XHQvKlxuIDk2ODpcdCAqICBQcm9jZXNzIHJlY2VpdmVkIG11bHRpY2FzdCBtZXNzYWdlIGZvciBWZXJzaW9uIDBcbiA5Njk6XHQgKi9cbiA5NzA6XHRzdGF0aWMgdm9pZCBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGNvbnN0IGNoYXIgKmJ1ZmZlcixcbiA5NzE6XHRcdFx0XHRcdCAgICAgY29uc3Qgc2l6ZV90IGJ1ZmxlbilcbiA5NzI6XHR7XG4gOTczOlx0XHRzdHJ1Y3QgaXBfdnNfc3luY19tZXNnX3YwICptID0gKHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjAgKilidWZmZXI7XG4gOTc0Olx0XHRzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwICpzO1xuIDk3NTpcdFx0c3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICpvcHQ7XG4gOTc2Olx0XHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwO1xuIDk3NzpcdFx0c3RydWN0IGlwX3ZzX2Nvbm5fcGFyYW0gcGFyYW07XG4gOTc4Olx0XHRjaGFyICpwO1xuIDk3OTpcdFx0aW50IGk7XG4gOTgwOlx0XG4gOTgxOlx0XHRwID0gKGNoYXIgKilidWZmZXIgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjApO1xuIDk4MjpcdFx0Zm9yIChpPTA7IGlcdTAwM2NtLVx1MDAzZW5yX2Nvbm5zOyBpJiM0MzsmIzQzOykge1xuIDk4MzpcdFx0XHR1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0YXRlO1xuIDk4NDpcdFxuIDk4NTpcdFx0XHRpZiAocCAmIzQzOyBTSU1QTEVfQ09OTl9TSVpFIFx1MDAzZSBidWZmZXImIzQzO2J1Zmxlbikge1xuIDk4NjpcdFx0XHRcdElQX1ZTX0VSUl9STChcJiMzNDtCQUNLVVAgdjAsIGJvZ3VzIGNvbm5cXG5cJiMzNDspO1xuIDk4NzpcdFx0XHRcdHJldHVybjtcbiA5ODg6XHRcdFx0fVxuIDk4OTpcdFx0XHRzID0gKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAgKikgcDtcbiA5OTA6XHRcdFx0ZmxhZ3MgPSBudG9ocyhzLVx1MDAzZWZsYWdzKTtcbiA5OTE6XHRcdFx0aWYgKGZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0spIHtcbiA5OTI6XHRcdFx0XHRvcHQgPSAoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICopXHUwMDI2c1sxXTtcbiA5OTM6XHRcdFx0XHRwICYjNDM7PSBGVUxMX0NPTk5fU0laRTtcbiA5OTQ6XHRcdFx0XHRpZiAocCBcdTAwM2UgYnVmZmVyJiM0MztidWZsZW4pIHtcbiA5OTU6XHRcdFx0XHRcdElQX1ZTX0VSUl9STChcJiMzNDtCQUNLVVAgdjAsIERyb3BwaW5nIGJ1ZmZlciBib2d1cyBjb25uIG9wdGlvbnNcXG5cJiMzNDspO1xuIDk5NjpcdFx0XHRcdFx0cmV0dXJuO1xuIDk5NzpcdFx0XHRcdH1cbiA5OTg6XHRcdFx0fSBlbHNlIHtcbiA5OTk6XHRcdFx0XHRvcHQgPSBOVUxMO1xuMTAwMDpcdFx0XHRcdHAgJiM0Mzs9IFNJTVBMRV9DT05OX1NJWkU7XG4xMDAxOlx0XHRcdH1cbjEwMDI6XHRcbjEwMDM6XHRcdFx0aWYgKCFpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzKGZsYWdzKSkge1xuMTAwNDpcdFx0XHRcdElQX1ZTX0RCRygyLCBcJiMzNDtCQUNLVVAgdjAsIEludmFsaWQgZmxhZ3MgMHglWFxcblwmIzM0OywgZmxhZ3MpO1xuMTAwNTpcdFx0XHRcdGNvbnRpbnVlO1xuMTAwNjpcdFx0XHR9XG4xMDA3Olx0XHRcdGZsYWdzIFx1MDAyNj0gSVBfVlNfQ09OTl9GX0JBQ0tVUF9NQVNLO1xuMTAwODpcdFx0XHRmbGFncyB8PSBJUF9WU19DT05OX0ZfU1lOQztcbjEwMDk6XHRcbjEwMTA6XHRcdFx0c3RhdGUgPSBudG9ocyhzLVx1MDAzZXN0YXRlKTtcbjEwMTE6XHRcdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9URU1QTEFURSkpIHtcbjEwMTI6XHRcdFx0XHRwcCA9IGlwX3ZzX3Byb3RvX2dldChzLVx1MDAzZXByb3RvY29sKTtcbjEwMTM6XHRcdFx0XHRpZiAoIXBwKSB7XG4xMDE0Olx0XHRcdFx0XHRJUF9WU19EQkcoMiwgXCYjMzQ7QkFDS1VQIHYwLCBVbnN1cHBvcnRlZCBwcm90b2NvbCAldVxcblwmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODg1NAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBzbmlwcGV0LCBmcmFtZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIGBpcF92c19wcm9jX3N5bmNfY29ubmAgRnVuY3Rpb24qKgoKT2theSwgc28gd2UmIzM5O3JlIGZvY3VzaW5nIG9uIHNvbWUgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lcyAxMTQwIHRvIDExNzUsIGFuZCBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBgaXBfdnNfcHJvY19zeW5jX2Nvbm5gIGZ1bmN0aW9uLiBHaXZlbiBteSBleHBlcnRpc2UgaW4gdGhpcyBhcmVhLCBteSBpbml0aWFsIHRob3VnaHQgaXMgbGlrZWx5IGFib3V0IHRoZSBjb250ZXh0LiBXaGF0IGlzIHRoaXMgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yPyAmIzM0O2lwX3ZzJiMzNDsgaW1tZWRpYXRlbHkgc2NyZWFtcyAmIzM0O0lQIFZpcnR1YWwgU2VydmVyLCYjMzQ7IG1lYW5pbmcgaXQmIzM5O3MgaGlnaGx5IHJlbGV2YW50IHRvIGxvYWQgYmFsYW5jaW5nIG9yIHNpbWlsYXIgdHJhZmZpYyBtYW5hZ2VtZW50LiBUaGUgbmFtZSAmIzM0O3N5bmNfY29ubiYjMzQ7IHN1Z2dlc3RzIGl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiBzeW5jaHJvbml6aW5nIGNvbm5lY3Rpb24gaW5mb3JtYXRpb24sIHBlcmhhcHMgYmV0d2VlbiBkaWZmZXJlbnQgc2VydmVycyBpbiBhIGNsdXN0ZXIgb3IgZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBzeXN0ZW0gZGVhbGluZyB3aXRoIG5ldHdvcmsgY29ubmVjdGlvbnMuCgpJIGV4cGVjdCB0byBzZWUgdGhlIGtleSBlbGVtZW50cyBvZiBjb25uZWN0aW9uIHN0YXRlIHN5bmNocm9uaXphdGlvbi4gV2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIHRoZXkgdXNpbmc/IEFyZSB0aGV5IGVtcGxveWluZyBhbnkgbG9ja2luZyBtZWNoYW5pc21zIHRvIGVuc3VyZSBkYXRhIGludGVncml0eSBkdXJpbmcgdXBkYXRlcz8gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGZvciBkZXRhaWxzIGFyb3VuZCB0aGUgY29ubmVjdGlvbiYjMzk7cyBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIElQIGFkZHJlc3NlcyBhbmQgcG9ydHMsIGl0cyBjdXJyZW50IHN0YXRlLCB0aW1lb3V0cywgYW5kIGFueSByZWxldmFudCBtZXRhZGF0YS4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBjb25uZWN0aW9uIHRyYWNraW5nIGFuZCBzeW5jaHJvbml6YXRpb24gcHJvY2VzcyB3aXRoaW4gdGhlIElQVlMgc3lzdGVtLCBhbmQgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBpbmNvbnNpc3RlbmNpZXMuIElzIGl0IHVzaW5nIGFueSBzcGVjaWZpYyBwcm90b2NvbHMgZm9yIHN5bmMsIG9yIHNvbWV0aGluZyBjdXN0b20/IEFyZSB0aGVyZSBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucz8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYm90dGxlbmVja3Mgb3IgYW55IG9idmlvdXMgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE0MDpcdFx0XHRcdFx0XHQgICBJUF9WU19QRURBVEFfTUFYTEVOLCBcdTAwMjZvcHRfZmxhZ3MsXG4xMTQxOlx0XHRcdFx0XHRcdCAgIElQVlNfT1BUX0ZfUEVfREFUQSkpXG4xMTQyOlx0XHRcdFx0XHRyZXR1cm4gLTYwO1xuMTE0MzpcdFx0XHRcdGJyZWFrO1xuMTE0NDpcdFxuMTE0NTpcdFx0XHRjYXNlIElQVlNfT1BUX1BFX05BTUU6XG4xMTQ2Olx0XHRcdFx0aWYgKGlwX3ZzX3Byb2Nfc3RyKHAsIHBsZW4sXHUwMDI2cGVfbmFtZV9sZW4sIFx1MDAyNnBlX25hbWUsXG4xMTQ3Olx0XHRcdFx0XHRcdCAgIElQX1ZTX1BFTkFNRV9NQVhMRU4sIFx1MDAyNm9wdF9mbGFncyxcbjExNDg6XHRcdFx0XHRcdFx0ICAgSVBWU19PUFRfRl9QRV9OQU1FKSlcbjExNDk6XHRcdFx0XHRcdHJldHVybiAtNzA7XG4xMTUwOlx0XHRcdFx0YnJlYWs7XG4xMTUxOlx0XG4xMTUyOlx0XHRcdGRlZmF1bHQ6XG4xMTUzOlx0XHRcdFx0LyogUGFyYW0gZGF0YSBtYW5kYXRvcnkgPyAqL1xuMTE1NDpcdFx0XHRcdGlmICghKHB0eXBlIFx1MDAyNiBJUFZTX09QVF9GX1BBUkFNKSkge1xuMTE1NTpcdFx0XHRcdFx0SVBfVlNfREJHKDMsIFwmIzM0O0JBQ0tVUCwgVW5rbm93biBtYW5kYXRvcnkgcGFyYW0gJWQgZm91bmRcXG5cJiMzNDssXG4xMTU2Olx0XHRcdFx0XHRcdCAgcHR5cGUgXHUwMDI2IH5JUFZTX09QVF9GX1BBUkFNKTtcbjExNTc6XHRcdFx0XHRcdHJldGMgPSAyMDtcbjExNTg6XHRcdFx0XHRcdGdvdG8gb3V0O1xuMTE1OTpcdFx0XHRcdH1cbjExNjA6XHRcdFx0fVxuMTE2MTpcdFx0XHRwICYjNDM7PSBwbGVuOyAgLyogTmV4dCBvcHRpb24gKi9cbjExNjI6XHRcdH1cbjExNjM6XHRcbjExNjQ6XHRcdC8qIEdldCBmbGFncyBhbmQgTWFzayBvZmYgdW5zdXBwb3J0ZWQgKi9cbjExNjU6XHRcdGZsYWdzID0gbnRvaGwocy1cdTAwM2V2NC5mbGFncyk7XG4xMTY2Olx0XHRpZiAoIWlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3MoZmxhZ3MpKSB7XG4xMTY3Olx0XHRcdElQX1ZTX0RCRygzLCBcJiMzNDtCQUNLVVAsIEludmFsaWQgZmxhZ3MgMHglWFxcblwmIzM0OywgZmxhZ3MpO1xuMTE2ODpcdFx0XHRyZXRjID0gMjU7XG4xMTY5Olx0XHRcdGdvdG8gb3V0O1xuMTE3MDpcdFx0fVxuMTE3MTpcdFx0ZmxhZ3MgXHUwMDI2PSBJUF9WU19DT05OX0ZfQkFDS1VQX01BU0s7XG4xMTcyOlx0XHRmbGFncyB8PSBJUF9WU19DT05OX0ZfU1lOQztcbjExNzM6XHRcdHN0YXRlID0gbnRvaHMocy1cdTAwM2V2NC5zdGF0ZSk7XG4xMTc0Olx0XG4xMTc1Olx0XHRpZiAoIShmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX1RFTVBMQVRFKSkge1xuMTE3NjpcdFx0XHRwcCA9IGlwX3ZzX3Byb3RvX2dldChzLVx1MDAzZXY0LnByb3RvY29sKTtcbjExNzc6XHRcdFx0aWYgKCFwcCkge1xuMTE3ODpcdFx0XHRcdElQX1ZTX0RCRygzLFwmIzM0O0JBQ0tVUCwgVW5zdXBwb3J0ZWQgcHJvdG9jb2wgJXVcXG5cJiMzNDssXG4xMTc5Olx0XHRcdFx0XHRzLVx1MDAzZXY0LnByb3RvY29sKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk4NzYKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQ6CgoqKlVuZGVyc3RhbmRpbmcgdGhlIENvbW1pdCYjMzk7cyBIaXN0b3J5KioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBzcGVjaWZpYyBjb21taXQuIFRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGdvaW5nIHRvIGRvIGlzIHJlYWNoIGZvciBgZ2l0IGxvZ2AuIEkgd2FudCB0byBpbW1lZGlhdGVseSBncmFzcCB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4gV2hhdCYjMzk7cyB0aGUgbmFycmF0aXZlIGFyb3VuZCB0aGlzIGNoYW5nZT8gSSYjMzk7bSBub3QganVzdCBsb29raW5nIGZvciAqd2hhdCogd2FzIGNoYW5nZWQsIGJ1dCAqd2h5Ki4gVGhlIGNvbW1pdCBtZXNzYWdlIGlzIGtleSwgb2YgY291cnNlLCBidXQgaXQmIzM5O3Mgb2Z0ZW4gaW5zdWZmaWNpZW50IG9uIGl0cyBvd24uIEkgbmVlZCB0aGUgZnVsbCBwaWN0dXJlOiBXaGF0IHdhcyB0aGUgc3RhdGUgb2YgdGhlIHByb2plY3QgYmVmb3JlIHRoaXM/IFdoYXQgb3RoZXIgY29tbWl0cyB3ZXJlIG1hZGUgYXJvdW5kIHRoZSBzYW1lIHRpbWU/IFdlcmUgdGhlcmUgcmVsYXRlZCBicmFuY2hlcyBtZXJnZWQ/IEFueSByZWxldmFudCBwdWxsIHJlcXVlc3RzPyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgY29uY2lzZSBsb2csIG1heWJlIHVzaW5nIGAtLW9uZWxpbmVgIHRvIGtlZXAgaXQgZm9jdXNlZC4gVGhlbiwgSSBjYW4gZXhwYW5kIHRoZSBjb21taXQgd2l0aCBgLS1wYXRjaGAgdG8gZ28gbW9yZSBpbi1kZXB0aC4gVGhpcyBpcyBhYm91dCBidWlsZGluZyBhIG1lbnRhbCBtYXAgb2YgdGhlIGNoYW5nZXMsIHNvIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGluIHRoZSBtZXNzYWdlcy4gVGhhdCYjMzk7cyB3aGF0IEkgd2FudCB0byBlc3RhYmxpc2guIFRoZW4sIEkgY2FuIHN0YXJ0IHRvIHRoaW5rIGFib3V0IHRoZSBjb250ZW50IGl0c2VsZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTg0MT1zdGF0aWMgdm9pZCBpcF92c19wcm9jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uX3BhcmFtICpwYXJhbSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTk1Mi0vKiBDaGVjayBmb3IgaW5jb21wYXRpYmxlIGZsYWdzICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjk1MzpzdGF0aWMgYm9vbCBpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzKHUzMiBmbGFncylcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtOTU0LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTk3MD1zdGF0aWMgdm9pZCBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGNvbnN0IGNoYXIgKmJ1ZmZlcixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEwMDItXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEwMDM6XHRcdGlmICghaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyhmbGFncykpIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTAwNC1cdFx0XHRJUF9WU19EQkcoMiwgXCYjMzQ7QkFDS1VQIHYwLCBJbnZhbGlkIGZsYWdzIDB4JVhcXG5cJiMzNDssIGZsYWdzKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTEwODc9c3RhdGljIGlubGluZSBpbnQgaXBfdnNfcHJvY19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIF9fdTggKnAsIF9fdTggKm1zZ19lbmQpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMTY1LVx0ZmxhZ3MgPSBudG9obChzLVx1MDAzZXY0LmZsYWdzKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTE2NjpcdGlmICghaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyhmbGFncykpIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTE2Ny1cdFx0SVBfVlNfREJHKDMsIFwmIzM0O0JBQ0tVUCwgSW52YWxpZCBmbGFncyAweCVYXFxuXCYjMzQ7LCBmbGFncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjQ1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZSwgdXNpbmcgYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmU6CgoqKkRlbHZpbmcgaW50byBJUFZTIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljIEtjb25maWcgb3B0aW9ucyB0aGF0IGNvbnRyb2wgdGhlIGNvbmZpZ3VyYXRpb24gb2YgSVBWUyAodGhlIExpbnV4IFZpcnR1YWwgU2VydmVyKSBhbmQsIGNyaXRpY2FsbHksIGhvdyBpdHMgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgYXJlIGhhbmRsZWQuIEkga25vdyB0aGUgYmFzaWMgbGFuZHNjYXBlLCBidXQgSSB3YW50IHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueSBudWFuY2VzLiBBcmUgdGhlcmUgYW55IG5ldyBvcHRpb25zIGludHJvZHVjZWQgcmVjZW50bHk/IEkgbmVlZCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBhdmFpbGFibGUgdG8gdHVuZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgYW5kIGxvYWQgYmFsYW5jaW5nIGFjcm9zcyB0aGUgY2x1c3Rlci4gVGhpcyBpcyB3aGVyZSB0aGUgZGV2aWwgaXMgaW4gdGhlIGRldGFpbHM7IGl0JiMzOTtzIGFsd2F5cyB0aGUgZmluZS1ncmFpbmVkIHNldHRpbmdzIHRoYXQgbWFrZSBvciBicmVhayBhIGhpZ2gtcGVyZm9ybWFuY2UsIHJlc2lsaWVudCBzZXR1cC4gVGltZSB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzIGFuZCB2ZXJpZnkgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJUF9WUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTQtI1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6NTptZW51Y29uZmlnIElQX1ZTXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy02LVx0dHJpc3RhdGUgXCYjMzQ7SVAgdmlydHVhbCBzZXJ2ZXIgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI2LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6Mjc6aWYgSVBfVlNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6Mjk6Y29uZmlnXHRJUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMC1cdGJvb2wgXCYjMzQ7SVB2NiBzdXBwb3J0IGZvciBJUFZTXCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMTpcdGRlcGVuZHMgb24gSVBWNiA9IHkgfHwgSVBfVlMgPSBJUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMi1cdHNlbGVjdCBORl9ERUZSQUdfSVBWNlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTM3LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6Mzg6Y29uZmlnXHRJUF9WU19ERUJVR1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzktXHRib29sIFwmIzM0O0lQIHZpcnR1YWwgc2VydmVyIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTQ0LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6NDU6Y29uZmlnXHRJUF9WU19UQUJfQklUU1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNDYtXHRpbnQgXCYjMzQ7SVBWUyBjb25uZWN0aW9uIHRhYmxlIHNpemUgKHRoZSBOdGggcG93ZXIgb2YgMilcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz03Nz1jb21tZW50IFwmIzM0O0lQVlMgdHJhbnNwb3J0IHByb3RvY29sIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcJiMzNDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTc4LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6Nzk6Y29uZmlnXHRJUF9WU19QUk9UT19UQ1Bcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTgwLVx0Ym9vbCBcJiMzNDtUQ1AgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTg0LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6ODU6Y29uZmlnXHRJUF9WU19QUk9UT19VRFBcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTg2LVx0Ym9vbCBcJiMzNDtVRFAgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTkwLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6OTE6Y29uZmlnXHRJUF9WU19QUk9UT19BSF9FU1Bcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjkyOlx0ZGVmX2Jvb2wgSVBfVlNfUFJPVE9fRVNQIHx8IElQX1ZTX1BST1RPX0FIXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy05My1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjk0OmNvbmZpZ1x0SVBfVlNfUFJPVE9fRVNQXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy05NS1cdGJvb2wgXCYjMzQ7RVNQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy05OS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjEwMDpjb25maWdcdElQX1ZTX1BST1RPX0FIXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xMDEtXHRib29sIFwmIzM0O0FIIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xMDUtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoxMDY6Y29uZmlnICBJUF9WU19QUk9UT19TQ1RQXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xMDctXHRib29sIFwmIzM0O1NDVFAgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTExMz1jb21tZW50IFwmIzM0O0lQVlMgc2NoZWR1bGVyXCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xMTQtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoxMTU6Y29uZmlnXHRJUF9WU19SUlxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTE2LVx0dHJpc3RhdGUgXCYjMzQ7cm91bmQtcm9iaW4gc2NoZWR1bGluZ1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTEyMy0gXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoxMjQ6Y29uZmlnXHRJUF9WU19XUlJcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTEyNS1cdHRyaXN0YXRlIFwmIzM0O3dlaWdodGVkIHJvdW5kLXJvYmluIHNjaGVkdWxpbmdcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xMzYtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoxMzc6Y29uZmlnXHRJUF9WU19MQ1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTM4LVx0dHJpc3RhdGUgXCYjMzQ7bGVhc3QtY29ubmVjdGlvbiBzY2hlZHVsaW5nXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTQ2LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MTQ3OmNvbmZpZ1x0SVBfVlNfV0xDXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xNDgtXHR0cmlzdGF0ZSBcJiMzNDt3ZWlnaHRlZCBsZWFzdC1jb25uZWN0aW9uIHNjaGVkdWxpbmdcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xNTYtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoxNTc6Y29uZmlnICBJUF9WU19GT1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTU4LVx0XHR0cmlzdGF0ZSBcJiMzNDt3ZWlnaHRlZCBmYWlsb3ZlciBzY2hlZHVsaW5nXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTY2LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MTY3OmNvbmZpZyAgSVBfVlNfT1ZGXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xNjgtXHR0cmlzdGF0ZSBcJiMzNDt3ZWlnaHRlZCBvdmVyZmxvdyBzY2hlZHVsaW5nXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTc3LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MTc4OmNvbmZpZ1x0SVBfVlNfTEJMQ1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTc5LVx0dHJpc3RhdGUgXCYjMzQ7bG9jYWxpdHktYmFzZWQgbGVhc3QtY29ubmVjdGlvbiBzY2hlZHVsaW5nXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTkxLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MTkyOmNvbmZpZyAgSVBfVlNfTEJMQ1Jcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTE5My1cdHRyaXN0YXRlIFwmIzM0O2xvY2FsaXR5LWJhc2VkIGxlYXN0LWNvbm5lY3Rpb24gd2l0aCByZXBsaWNhdGlvbiBzY2hlZHVsaW5nXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjA5LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MjEwOmNvbmZpZ1x0SVBfVlNfREhcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTIxMS1cdHRyaXN0YXRlIFwmIzM0O2Rlc3RpbmF0aW9uIGhhc2hpbmcgc2NoZWR1bGluZ1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTIxOS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjIyMDpjb25maWdcdElQX1ZTX1NIXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yMjEtXHR0cmlzdGF0ZSBcJiMzNDtzb3VyY2UgaGFzaGluZyBzY2hlZHVsaW5nXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjI5LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MjMwOmNvbmZpZ1x0SVBfVlNfTUhcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTIzMS1cdHRyaXN0YXRlIFwmIzM0O21hZ2xldiBoYXNoaW5nIHNjaGVkdWxpbmdcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yNDgtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyNDk6Y29uZmlnXHRJUF9WU19TRURcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI1MC1cdHRyaXN0YXRlIFwmIzM0O3Nob3J0ZXN0IGV4cGVjdGVkIGRlbGF5IHNjaGVkdWxpbmdcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yNjEtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyNjI6Y29uZmlnXHRJUF9WU19OUVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjYzLVx0dHJpc3RhdGUgXCYjMzQ7bmV2ZXIgcXVldWUgc2NoZWR1bGluZ1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI3NC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI3NTpjb25maWdcdElQX1ZTX1RXT1Ncbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI3Ni1cdHRyaXN0YXRlIFwmIzM0O3dlaWdodGVkIHJhbmRvbSB0d29zIGNob2ljZSBsZWFzdC1jb25uZWN0aW9uIHNjaGVkdWxpbmdcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0yODY9Y29tbWVudCAmIzM5O0lQVlMgU0ggc2NoZWR1bGVyJiMzOTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4Ny1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI4ODpjb25maWcgSVBfVlNfU0hfVEFCX0JJVFNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4OS1cdGludCBcJiMzNDtJUFZTIHNvdXJjZSBoYXNoaW5nIHRhYmxlIHNpemUgKHRoZSBOdGggcG93ZXIgb2YgMilcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMDE9Y29tbWVudCAmIzM5O0lQVlMgTUggc2NoZWR1bGVyJiMzOTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwMi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMwMzpjb25maWcgSVBfVlNfTUhfVEFCX0lOREVYXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDQtXHRpbnQgXCYjMzQ7SVBWUyBtYWdsZXYgaGFzaGluZyB0YWJsZSBpbmRleCBvZiBzaXplICh0aGUgcHJpbWUgbnVtYmVycylcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMTk9Y29tbWVudCAmIzM5O0lQVlMgYXBwbGljYXRpb24gaGVscGVyJiMzOTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMyMC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMyMTpjb25maWdcdElQX1ZTX0ZUUFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzIyLVx0dHJpc3RhdGUgXCYjMzQ7RlRQIHByb3RvY29sIGhlbHBlclwmIzM0O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzIzOlx0ZGVwZW5kcyBvbiBJUF9WU19QUk9UT19UQ1AgXHUwMDI2XHUwMDI2IE5GX0NPTk5UUkFDSyBcdTAwMjZcdTAwMjYgTkZfTkFUIFx1MDAyNlx1MDAyNiBcXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzI0LVx0XHRORl9DT05OVFJBQ0tfRlRQXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMjU6XHRzZWxlY3QgSVBfVlNfTkZDVFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzI2LVx0aGVscFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMzNi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMzNzpjb25maWdcdElQX1ZTX05GQ1Rcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMzOC1cdGJvb2wgXCYjMzQ7TmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmdcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zNDQtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozNDU6Y29uZmlnXHRJUF9WU19QRV9TSVBcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTM0Ni1cdHRyaXN0YXRlIFwmIzM0O1NJUCBwZXJzaXN0ZW5jZSBlbmdpbmVcJiMzNDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjM0NzpcdGRlcGVuZHMgb24gSVBfVlNfUFJPVE9fVURQXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zNDgtXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS19TSVBcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zNTI9Y29uZmlnIEdDT1ZfUFJPRklMRV9JUFZTXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzYwLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzYxOmVuZGlmICMgSVBfVlNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMyODcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJUFZTIFN5bmNocm9uaXphdGlvbiBNb2R1bGUqKgoKT2theSwgc28gYGlwX3ZzX3N5bmMuY2AgaXMgYmVpbmcgY29tcGlsZWQgYXMgcGFydCBvZiB0aGUgYGlwX3ZzLW9ianNgLCB3aGljaCBpcyBhbGwgdW5kZXIgYENPTkZJR19JUF9WU2AuIFRpbWUgdG8gZG91YmxlLWNoZWNrIHRoYXQgTWFrZWZpbGUuLi4gWXVwLCB0aGVyZSBpdCBpczoKCmBgYG1ha2VmaWxlCmlwX3ZzLW9ianMgOj0gICBpcF92c19jb25uLm8gaXBfdnNfY29yZS5vIGlwX3ZzX2N0bC5vIGlwX3ZzX3NjaGVkLm8gICAgICAgIFwKICAgICAgICAgICAgICAgIGlwX3ZzX3htaXQubyBpcF92c19hcHAubyBpcF92c19zeW5jLm8gICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgaXBfdnNfZXN0Lm8gaXBfdnNfcHJvdG8ubyBpcF92c19wZS5vCmBgYAoKU28gYENPTkZJR19JUF9WU2AgaXMgKnRoZSogb3B0aW9uLCBodWg/IEl0IGVuYWJsZXMgdGhlIHdob2xlIElQVlMgdGhpbmcsIGluY2x1ZGluZyB0aGUgc3luY2hyb25pemF0aW9uIG1vZHVsZS4gTm93LCBsZXQmIzM5O3Mgc2VlIHdoYXQgYENPTkZJR19JUF9WU2AgZGVwZW5kcyBvbi4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUga2VybmVsJiMzOTtzIEtjb25maWcgZmlsZXMuIFRoZSB1c3VhbCBzdXNwZWN0cyB3b3VsZCBiZSBlaXRoZXIgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2Agb3IsIG1vcmUgc3BlY2lmaWNhbGx5IGZvciBJUFZTLCBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgLiBJJiMzOTtsbCBzdGFydCB3aXRoIHRob3NlIGFuZCBzZWUgd2hhdCB0dXJucyB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX1ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy00LSNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjU6bWVudWNvbmZpZyBJUF9WU1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNi1cdHRyaXN0YXRlIFwmIzM0O0lQIHZpcnR1YWwgc2VydmVyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0yODY9Y29tbWVudCAmIzM5O0lQVlMgU0ggc2NoZWR1bGVyJiMzOTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4Ny1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI4ODpjb25maWcgSVBfVlNfU0hfVEFCX0JJVFNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4OS1cdGludCBcJiMzNDtJUFZTIHNvdXJjZSBoYXNoaW5nIHRhYmxlIHNpemUgKHRoZSBOdGggcG93ZXIgb2YgMilcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMDE9Y29tbWVudCAmIzM5O0lQVlMgTUggc2NoZWR1bGVyJiMzOTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwMi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMwMzpjb25maWcgSVBfVlNfTUhfVEFCX0lOREVYXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDQtXHRpbnQgXCYjMzQ7SVBWUyBtYWdsZXYgaGFzaGluZyB0YWJsZSBpbmRleCBvZiBzaXplICh0aGUgcHJpbWUgbnVtYmVycylcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQwNDYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW5pdGlhbCB0aG91Z2h0cywgYXMgaWYgSSB3ZXJlIHJlYWRpbmcgdGhlIHRvcCBvZiBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgOgoKKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIElQVlMgS2NvbmZpZyBGaWxlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ2AgZmlsZS4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGJlIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgcmVzcG9uc2libGUgZm9yIGNvbnRyb2xsaW5nIHRoZSBjb21waWxhdGlvbiBhbmQgaW5jbHVzaW9uIG9mIHRoZSBJUCBWaXJ0dWFsIFNlcnZlciAoSVBWUykgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbC4gSSYjMzk7bSBpbW1lZGlhdGVseSBsb29raW5nIGZvciB0aGUgdG9wLWxldmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGdvdmVybiB0aGUgY29yZSBJUFZTIGZlYXR1cmUgc2V0LiBJIGFudGljaXBhdGUgc2VlaW5nIGRlcGVuZGVuY2llcywgZGVmYXVsdCB2YWx1ZXMsIGFuZCBwb3RlbnRpYWxseSBzb21lIGV4cGxhbmF0aW9ucyBvciBjb21tZW50cyB0aGF0IGNsYXJpZnkgdGhlIHB1cnBvc2UgYW5kIHNjb3BlIG9mIElQVlMgd2l0aGluIHRoZSBicm9hZGVyIG5ldHdvcmtpbmcgc3RhY2suIEkmIzM5O2xsIGJlIHF1aWNrbHkgc2Nhbm5pbmcgZm9yIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBvZiB0aGUgZmlsZTogd2hhdCYjMzk7cyBlbmFibGVkIGFzIGRlZmF1bHQgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucy4gQXJlIHRoZXJlIGFueSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXM/IEFyZSB0aGVyZSBzdWItZmVhdHVyZXMgb3IgbW9kdWxlcyB3aXRoaW4gSVBWUyB0aGF0IGFyZSBpbmRpdmlkdWFsbHkgY29uZmlndXJhYmxlPyBUaGlzIGZpbGUgZGljdGF0ZXMgd2hhdCBnZXRzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gSSYjMzk7bGwgYmUgbG9va2luZyB0byBxdWlja2x5IHVuZGVyc3RhbmQgaG93IHRoZSBvdmVyYWxsIElQVlMgZnVuY3Rpb25hbGl0eSBpcyBlbmFibGVkIGFuZCBjdXN0b21pemVkIGJ5IHRoZSB1c2VyLiBJJiMzOTttIHJlYWR5IHRvIGp1bXAgaW50byB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIElQIFZpcnR1YWwgU2VydmVyIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0bWVudWNvbmZpZyBJUF9WU1xuICAgNjpcdFx0dHJpc3RhdGUgXCYjMzQ7SVAgdmlydHVhbCBzZXJ2ZXIgc3VwcG9ydFwmIzM0O1xuICAgNzpcdFx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBORVRGSUxURVJcbiAgIDg6XHRcdGRlcGVuZHMgb24gKE5GX0NPTk5UUkFDSyB8fCBORl9DT05OVFJBQ0s9bilcbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgSVAgVmlydHVhbCBTZXJ2ZXIgc3VwcG9ydCB3aWxsIGxldCB5b3UgYnVpbGQgYSBoaWdoLXBlcmZvcm1hbmNlXG4gIDExOlx0XHQgIHZpcnR1YWwgc2VydmVyIGJhc2VkIG9uIGNsdXN0ZXIgb2YgdHdvIG9yIG1vcmUgcmVhbCBzZXJ2ZXJzLiBUaGlzXG4gIDEyOlx0XHQgIG9wdGlvbiBtdXN0IGJlIGVuYWJsZWQgZm9yIGF0IGxlYXN0IG9uZSBvZiB0aGUgY2x1c3RlcmVkIGNvbXB1dGVyc1xuICAxMzpcdFx0ICB0aGF0IHdpbGwgdGFrZSBjYXJlIG9mIGludGVyY2VwdGluZyBpbmNvbWluZyBjb25uZWN0aW9ucyB0byBhXG4gIDE0Olx0XHQgIHNpbmdsZSBJUCBhZGRyZXNzIGFuZCBzY2hlZHVsaW5nIHRoZW0gdG8gcmVhbCBzZXJ2ZXJzLlxuICAxNTpcdFxuICAxNjpcdFx0ICBUaHJlZSByZXF1ZXN0IGRpc3BhdGNoaW5nIHRlY2huaXF1ZXMgYXJlIGltcGxlbWVudGVkLCB0aGV5IGFyZVxuICAxNzpcdFx0ICB2aXJ0dWFsIHNlcnZlciB2aWEgTkFULCB2aXJ0dWFsIHNlcnZlciB2aWEgdHVubmVsaW5nIGFuZCB2aXJ0dWFsXG4gIDE4Olx0XHQgIHNlcnZlciB2aWEgZGlyZWN0IHJvdXRpbmcuIFRoZSBzZXZlcmFsIHNjaGVkdWxpbmcgYWxnb3JpdGhtcyBjYW5cbiAgMTk6XHRcdCAgYmUgdXNlZCB0byBjaG9vc2Ugd2hpY2ggc2VydmVyIHRoZSBjb25uZWN0aW9uIGlzIGRpcmVjdGVkIHRvLFxuICAyMDpcdFx0ICB0aHVzIGxvYWQgYmFsYW5jaW5nIGNhbiBiZSBhY2hpZXZlZCBhbW9uZyB0aGUgc2VydmVycy4gIEZvciBtb3JlXG4gIDIxOlx0XHQgIGluZm9ybWF0aW9uIGFuZCBpdHMgYWRtaW5pc3RyYXRpb24gcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHRoZVxuICAyMjpcdFx0ICBmb2xsb3dpbmcgVVJMOiBcdTAwM2NodHRwOi8vd3d3LmxpbnV4dmlydHVhbHNlcnZlci5vcmcvXHUwMDNlLlxuICAyMzpcdFxuICAyNDpcdFx0ICBJZiB5b3Ugd2FudCB0byBjb21waWxlIGl0IGluIGtlcm5lbCwgc2F5IFkuIFRvIGNvbXBpbGUgaXQgYXMgYVxuICAyNTpcdFx0ICBtb2R1bGUsIGNob29zZSBNIGhlcmUuIElmIHVuc3VyZSwgc2F5IE4uXG4gIDI2Olx0XG4gIDI3Olx0aWYgSVBfVlNcbiAgMjg6XHRcbiAgMjk6XHRjb25maWdcdElQX1ZTX0lQVjZcbiAgMzA6XHRcdGJvb2wgXCYjMzQ7SVB2NiBzdXBwb3J0IGZvciBJUFZTXCYjMzQ7XG4gIDMxOlx0XHRkZXBlbmRzIG9uIElQVjYgPSB5IHx8IElQX1ZTID0gSVBWNlxuICAzMjpcdFx0c2VsZWN0IE5GX0RFRlJBR19JUFY2XG4gIDMzOlx0XHRoZWxwXG4gIDM0Olx0XHQgIEFkZCBJUHY2IHN1cHBvcnQgdG8gSVBWUy5cbiAgMzU6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ4NDkKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSW52ZXN0aWdhdGluZyB0aGUgQ2FsbCBQYXRocyBvZiBJUFZTIFN5bmNocm9uaXphdGlvbiBGdW5jdGlvbnMqKgoKQWxyaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGV4ZWN1dGlvbiBmbG93IGhlcmUuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHRyYWNlIHRoZSBjYWxscyBhbmQgdW5kZXJzdGFuZCB0aGUgZW50cnkgcG9pbnRzIGZvciB0aGUgZnVuY3Rpb25zIGBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjBgIGFuZCBgaXBfdnNfcHJvY19zeW5jX2Nvbm5gLiBUaGV5JiMzOTtyZSBjZW50cmFsIHRvIHRoZSBJUFZTIHN5bmNocm9uaXphdGlvbiBwcm9jZXNzLCBzbyBnZXR0aW5nIGEgaGFuZGxlIG9uIHRoZWlyIHVzYWdlIGlzIGNydWNpYWwuIE15IGltbWVkaWF0ZSBwbGFuIGlzIHRvIGRlbHZlIGludG8gdGhlIGBpcF92c19zeW5jLmNgIGZpbGUgYW5kIHplcm8gaW4gb24gdGhlIGNhbGxlciBmdW5jdGlvbnMuIEEgZGlyZWN0IHNlYXJjaCBmb3IgY2FsbHMgdG8gdGhvc2UgZnVuY3Rpb25zIHdpdGhpbiB0aGF0IGZpbGUgc2hvdWxkIGdldCBtZSB0aGUgYW5zd2Vycy4gVGhpcyBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBwYXRocyBhbmQgc2VlaW5nIGhvdyB0aGVzZSBmdW5jdGlvbnMgZml0IGludG8gdGhlIGxhcmdlciBwaWN0dXJlIG9mIElQVlMgb3BlcmF0aW9uIGFuZCBzeW5jaHJvbml6YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3ZzX3Byb2Nlc3NfbWVzc2FnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz05NTM9c3RhdGljIGJvb2wgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyh1MzIgZmxhZ3MpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05NjktICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjk3MDpzdGF0aWMgdm9pZCBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGNvbnN0IGNoYXIgKmJ1ZmZlcixcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtOTcxLVx0XHRcdFx0ICAgICBjb25zdCBzaXplX3QgYnVmbGVuKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTA4Nz1zdGF0aWMgaW5saW5lIGludCBpcF92c19wcm9jX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgX191OCAqcCwgX191OCAqbXNnX2VuZClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEyMjYtICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEyMjc6c3RhdGljIHZvaWQgaXBfdnNfcHJvY2Vzc19tZXNzYWdlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBfX3U4ICpidWZmZXIsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEyMjgtXHRcdFx0XHQgIGNvbnN0IHNpemVfdCBidWZsZW4pXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMjg5LVx0XHQvKiBPbGQgdHlwZSBvZiBtZXNzYWdlICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEyOTA6XHRcdGlwX3ZzX3Byb2Nlc3NfbWVzc2FnZV92MChpcHZzLCBidWZmZXIsIGJ1Zmxlbik7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEyOTEtXHRcdHJldHVybjtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTE3MjU9c3RhdGljIGludCBzeW5jX3RocmVhZF9iYWNrdXAodm9pZCAqZGF0YSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE3NTMtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE3NTQ6XHRcdFx0aXBfdnNfcHJvY2Vzc19tZXNzYWdlKGlwdnMsIHRpbmZvLVx1MDAzZWJ1ZiwgbGVuKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTc1NS1cdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTY1NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQVlMgU3luY2hyb25pemF0aW9uIFByb2Nlc3MqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgSVBWUyBzeW5jIGRhZW1vbiBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSB0aGUgcGF0aCBkYXRhIHRha2VzIGZyb20gbmV0d29yayB0byBwcm9jZXNzaW5nLiBTbywgSSBzZWUgdGhhdCB0aGUgYHN5bmNfdGhyZWFkX2JhY2t1cGAgZnVuY3Rpb24gaXMgdGhlIGVudHJ5IHBvaW50LCBoYW5kbGluZyBtdWx0aWNhc3QgcGFja2V0cyByZWNlaXZlZCBvbiB0aGUgSVBWUyBzeW5jIHNvY2tldC4gSXQgdGhlbiBjYWxscyBgaXBfdnNfcHJvY2Vzc19tZXNzYWdlYCwgcGFzc2luZyB0aGUgSVBWUyBpbnN0YW5jZSAoYGlwdnNgKSwgdGhlIHBhY2tldCBidWZmZXIgKGB0aW5mby0mZ3Q7YnVmYCksIGFuZCB0aGUgcGFja2V0IGxlbmd0aCAoYGxlbmApLgoKTm93LCBgaXBfdnNfcHJvY2Vzc19tZXNzYWdlYCBpcyB0aGUgY2VudHJhbCBtZXNzYWdlIGRpc3BhdGNoZXIuIEl0IGNoZWNrcyB0aGUgbWVzc2FnZSB2ZXJzaW9uIGZvcm1hdC4gSWYgaXQmIzM5O3MgdmVyc2lvbiAwLCBpdCBkZWxlZ2F0ZXMgdG8gYGlwX3ZzX3Byb2Nlc3NfbWVzc2FnZV92MGAuIElmIGl0JiMzOTtzIHZlcnNpb24gMSwgd2hpY2ggaXMgbGlrZWx5IHRoZSBtb3JlIHJlY2VudCBhbmQgY29tcGxleCBmb3JtYXQsIGl0IGVudGVycyBhIGxvb3AgYW5kIGNhbGxzIGBpcF92c19wcm9jX3N5bmNfY29ubmAgcmVwZWF0ZWRseS4gVGhpcyBzdWdnZXN0cyB0aGF0IHZlcnNpb24gMSBtZXNzYWdlcyBsaWtlbHkgY29udGFpbiBtdWx0aXBsZSBjb25uZWN0aW9uIHN5bmMgdXBkYXRlcy4KClRoZSBuZXh0IHF1ZXN0aW9uIGlzOiBIb3cgaXMgdGhlIHN5bmMgZGFlbW9uIGl0c2VsZiBpbml0aWFsaXplZD8gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBzdGFydF9zeW5jX3RocmVhZGAgaXMgY2FsbGVkIGZyb20uIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBoaWdoLWxldmVsIHBpY3R1cmUgb2YgaG93IHRoZSB3aG9sZSBzeW5jIHByb2Nlc3MgaXMgaW5pdGlhdGVkLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsZXJzIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGFydF9zeW5jX3RocmVhZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MzQ3Mj1kb19pcF92c19zZXRfY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgc29ja3B0cl90IHB0ciwgdW5zaWduZWQgaW50IGxlbilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzUxMi1cdFx0XHRjZmcuc3luY2lkID0gZG0tXHUwMDNlc3luY2lkO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjM1MTM6XHRcdFx0cmV0ID0gc3RhcnRfc3luY190aHJlYWQoaXB2cywgXHUwMDI2Y2ZnLCBkbS1cdTAwM2VzdGF0ZSk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzUxNC1cdFx0fSBlbHNlIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9NDU2OD1zdGF0aWMgaW50IGlwX3ZzX2dlbmxfbmV3X2RhZW1vbihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IG5sYXR0ciAqKmF0dHJzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00NjIzLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjQ2MjQ6XHRyZXQgPSBzdGFydF9zeW5jX3RocmVhZChpcHZzLCBcdTAwMjZjLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQ2MjUtXHRcdFx0XHRubGFfZ2V0X3UzMihhdHRyc1tJUFZTX0RBRU1PTl9BVFRSX1NUQVRFXSkpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTcyNT1zdGF0aWMgaW50IHN5bmNfdGhyZWFkX2JhY2t1cCh2b2lkICpkYXRhKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTc2MS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTc2MjppbnQgc3RhcnRfc3luY190aHJlYWQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcHZzX3N5bmNfZGFlbW9uX2NmZyAqYyxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTc2My1cdFx0ICAgICAgaW50IHN0YXRlKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjU1OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDk4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQVlMgU3luY2hyb25pemF0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZW50cnkgcG9pbnRzIGZvciB0aGUgYmFja3VwIHN5bmNocm9uaXphdGlvbiB0aHJlYWQgKGBzdGFydF9zeW5jX3RocmVhZGApLiBJIGNhbiBzZWUgaXQmIzM5O3MgdHJpZ2dlcmVkIGluIHR3byB3YXlzOiB0aHJvdWdoIGBzZXRzb2Nrb3B0YCB3aXRoIGBJUF9WU19TT19TRVRfU1RBUlREQUVNT05gIG9uIHJhdywgVURQLCBvciBUQ1Agc29ja2V0cyAoaW4gYGRvX2lwX3ZzX3NldF9jdGxgKSwgYW5kIGFsc28gdmlhIGdlbmVyaWMgbmV0bGluayB1c2luZyBgSVBWU19DTURfTkVXX0RBRU1PTmAgd2l0aGluIGBpcF92c19nZW5sX25ld19kYWVtb25gLiBUaGF0JiMzOTtzIGEgc29saWQgc3RhcnQuCgpUaGUgc3luY2hyb25pemF0aW9uIHRocmVhZCB0aGVuIGxpc3RlbnMgb24gYSBVRFAgbXVsdGljYXN0IHNvY2tldCwgdHlwaWNhbGx5IHBvcnQgODg0OC4gVGhlIGtleSBjb25jZXJuIGhlcmUsIGFzIEkgc2VlIGl0LCBpcyB0aGUgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlLiBBbnkgcHJvY2VzcyB3aXRoIG5ldHdvcmsgYWNjZXNzIOKAkyBpbmNsdWRpbmcgdmlhIGxvb3BiYWNrLCB2ZXRoLCBvciBldmVuIHR1bi90YXAsIHBhY2tldCBvciByYXcgc29ja2V0cywgb3IgZGlyZWN0bHkgdGhyb3VnaCBhIHNvY2tldCBpZiBsb2NhbCBtdWx0aWNhc3QgZGVsaXZlcnkgaXMgZW5hYmxlZCDigJMgY2FuIHBvdGVudGlhbGx5IGluamVjdCBVRFAgcGFja2V0cyBpbnRvIHRoaXMgc3RyZWFtLiBUaGlzIGltbWVkaWF0ZWx5IHNjcmVhbXMgJiMzNDtwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSYjMzQ7LgoKTm93LCB0aW1lIHRvIHNlZSBpZiBzeXprYWxsZXIgaGFzIGFueSByZWxldmFudCBkZXNjcmlwdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIGByZWFkLXN5ei1zcGVjYCBhbmQgYHN5ei1ncmVwcGVyYCB0byBsb29rIGZvciBJUFZTLXJlbGF0ZWQgZWxlbWVudHMuIEkga25vdyBJUFZTIGlzIGZ1bGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgZ2VuZXJpYyBuZXRsaW5rIGFuZCBzZXRzb2Nrb3B0LgoKUmlnaHQsIHRoZSBwYXRjaCBpdHNlbGYuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGFkZGVkIHZhbGlkYXRpb24gY29kZS4gVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBUaGUgY29yZSBvZiB0aGUgcGF0Y2ggcmV2b2x2ZXMgYXJvdW5kIHRoZSBgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFnc2AgZnVuY3Rpb24uIEl0JiMzOTtzIGNoZWNraW5nIGZvciBhIGZldyBzcGVjaWZpYyBmbGFnIGNvbWJpbmF0aW9ucyB0aGF0IGFyZSBub3cgZGVlbWVkIGludmFsaWQ6IGBJUF9WU19DT05OX0ZfTk9fQ1BPUlRgIGNvbWJpbmVkIHdpdGggYElQX1ZTX0NPTk5fRl9URU1QTEFURWAsIG9yIHNpbXBseSBgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVRgLiBUaGVzZSBmbGFncyB3ZXJlIHNwZWNpZmljYWxseSBpbiBgaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwYCBhbmQgYGlwX3ZzX3Byb2Nfc3luY19jb25uYC4KClRoZSB2YWxpZGF0aW9uIG9jY3VycyAqYmVmb3JlKiBhcHBseWluZyB0aGUgYElQX1ZTX0NPTk5fRl9CQUNLVVBfTUFTS2AgYW5kIHRoZSBgSVBfVlNfQ09OTl9GX1NZTkNgIGZsYWcuIFRoZSBwYXRjaCBlc3NlbnRpYWxseSBmaWx0ZXJzIG91dCBjb25uZWN0aW9ucyB1c2luZyB0aGVzZSAmIzM0O2ludmFsaWQmIzM0OyBmbGFnIGNvbWJpbmF0aW9ucy4gVGhlIGBJUF9WU19EQkdgIG1lc3NhZ2VzIGFyZSBhIGdvb2QgY2x1ZSDigJMgdGhlIGdvYWwgaXMgdG8gcHJldmVudCBwcm9jZXNzaW5nIG1lc3NhZ2VzIHdpdGggdGhlc2Ugc3BlY2lmaWMgZmxhZ3MuCgpTbywgbGV0JiMzOTtzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgKndoeSogdGhlc2UgY2hlY2tzIGFyZSBhZGRlZC4gSWYgYElQX1ZTX0NPTk5fRl9OT19DUE9SVGAgKmFuZCogYElQX1ZTX0NPTk5fRl9URU1QTEFURWAgd2VyZSBhbGxvd2VkLCBvciBpZiBgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVRgIHdhcyBhbGxvd2VkLCB3aGF0IGNvdWxkIGdvIHdyb25nPyBNeSBpbnR1aXRpb24gc2F5cyB0aGVyZSYjMzk7cyBhIHBvdGVudGlhbCBmb3Igc3RhdGUgY29ycnVwdGlvbiBvciBieXBhc3NpbmcgY3J1Y2lhbCBjaGVja3MsIG9yIGV2ZW4gcGVyaGFwcywgYnlwYXNzaW5nIGEgc3BlY2lmaWMgZmxvdy4gVGltZSB0byBsb29rIHVwIHRoZSBkZWZpbml0aW9uIG9mIGBJUF9WU19DT05OX0ZfQkFDS1VQX01BU0tgIGFuZCBzZWUgaWYgdGhlIGFuc3dlciBsaWVzIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJUF9WU19DT05OX0ZfQkFDS1VQX01BU0smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL3VhcGkvbGludXgvaXBfdnMuaC05My0vKiBJbml0aWFsIGJpdHMgYWxsb3dlZCBpbiBiYWNrdXAgc2VydmVyICovXG5pbmNsdWRlL3VhcGkvbGludXgvaXBfdnMuaDo5NDojZGVmaW5lIElQX1ZTX0NPTk5fRl9CQUNLVVBfTUFTSyAoSVBfVlNfQ09OTl9GX0ZXRF9NQVNLIHwgXFxcbmluY2x1ZGUvdWFwaS9saW51eC9pcF92cy5oLTk1LVx0XHRcdFx0ICBJUF9WU19DT05OX0ZfTk9PVVRQVVQgfCBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODMxOAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRGl2aW5nIGludG8gdGhlIElQVlMgSW1wbGVtZW50YXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBJUCBWaXJ0dWFsIFNlcnZlciAoSVBWUykgd29ya3MgYXQgYSBmdW5kYW1lbnRhbCBsZXZlbC4gSSYjMzk7bSBnb2luZyB0byBuYXZpZ2F0ZSB0byB0aGUgaW5jbHVkZSBmaWxlcyBmb3IgdGhlIExpbnV4IGtlcm5lbCBhbmQgc3BlY2lmaWNhbGx5IGZvY3VzIG9uIGBpbmNsdWRlL3VhcGkvbGludXgvaXBfdnMuaGAuIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gdGhlIGNvZGUgc3RhcnRpbmcgYXJvdW5kIGxpbmUgOTMuIEkgcmVtZW1iZXIgdGhpcyBpcyB3aGVyZSBhIGtleSBkYXRhIHN0cnVjdHVyZSBzaG91bGQgYmUgZGVmaW5lZCwgdGhlIG9uZSB0aGF0IGhvbGRzIHRoZSBjb3JlIElQVlMgY29uZmlndXJhdGlvbiBvciBwZXJoYXBzIHRoZSByb3V0aW5nIHJ1bGVzLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhvc2Ugc3RydWN0cyBhcmUgZGVjbGFyZWQgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgdW5kZXJseWluZyBuZXR3b3JrIHN0YWNrLiBUaGlzIGZpbGUgaXMgcHJvYmFibHkgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBpbiB0aGVyZS4gSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBzdGFuZGFyZCBkZWZpbml0aW9ucyBoZXJlLi4uIHBlcmhhcHMgdGhlIGNyaXRpY2FsIGRhdGEgc3RydWN0dXJlcyBsaWtlIHRoZSBJUFZTIHNlcnZpY2UgdGFibGUgb3IgdGhlIHJlYWwgc2VydmVyIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlcy4gSSYjMzk7bGwgcHJvYmFibHkgYmUgbG9va2luZyBmb3IgdGhlIGZ1bmRhbWVudGFsIGluZm9ybWF0aW9uIG5lZWRlZCB0byBjb25zdHJ1Y3QgSVBWUyYjMzk7cyBuZXR3b3JrIG9wZXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS91YXBpL2xpbnV4L2lwX3ZzLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDgwOlx0I2RlZmluZSBJUF9WU19DT05OX0ZfRFJPVVRFXHQweDAwMDNcdFx0LyogZGlyZWN0IHJvdXRpbmcgKi9cbiAgODE6XHQjZGVmaW5lIElQX1ZTX0NPTk5fRl9CWVBBU1NcdDB4MDAwNFx0XHQvKiBjYWNoZSBieXBhc3MgKi9cbiAgODI6XHQjZGVmaW5lIElQX1ZTX0NPTk5fRl9TWU5DXHQweDAwMjBcdFx0LyogZW50cnkgY3JlYXRlZCBieSBzeW5jICovXG4gIDgzOlx0I2RlZmluZSBJUF9WU19DT05OX0ZfSEFTSEVEXHQweDAwNDBcdFx0LyogaGFzaGVkIGVudHJ5ICovXG4gIDg0Olx0I2RlZmluZSBJUF9WU19DT05OX0ZfTk9PVVRQVVRcdDB4MDA4MFx0XHQvKiBubyBvdXRwdXQgcGFja2V0cyAqL1xuICA4NTpcdCNkZWZpbmUgSVBfVlNfQ09OTl9GX0lOQUNUSVZFXHQweDAxMDBcdFx0Lyogbm90IGVzdGFibGlzaGVkICovXG4gIDg2Olx0I2RlZmluZSBJUF9WU19DT05OX0ZfT1VUX1NFUVx0MHgwMjAwXHRcdC8qIG11c3QgZG8gb3V0cHV0IHNlcSBhZGp1c3QgKi9cbiAgODc6XHQjZGVmaW5lIElQX1ZTX0NPTk5fRl9JTl9TRVFcdDB4MDQwMFx0XHQvKiBtdXN0IGRvIGlucHV0IHNlcSBhZGp1c3QgKi9cbiAgODg6XHQjZGVmaW5lIElQX1ZTX0NPTk5fRl9TRVFfTUFTS1x0MHgwNjAwXHRcdC8qIGluL291dCBzZXF1ZW5jZSBtYXNrICovXG4gIDg5Olx0I2RlZmluZSBJUF9WU19DT05OX0ZfTk9fQ1BPUlRcdDB4MDgwMFx0XHQvKiBubyBjbGllbnQgcG9ydCBzZXQgeWV0ICovXG4gIDkwOlx0I2RlZmluZSBJUF9WU19DT05OX0ZfVEVNUExBVEVcdDB4MTAwMFx0XHQvKiB0ZW1wbGF0ZSwgbm90IGNvbm5lY3Rpb24gKi9cbiAgOTE6XHQjZGVmaW5lIElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUXHQweDIwMDBcdFx0LyogZm9yd2FyZCBvbmx5IG9uZSBwYWNrZXQgKi9cbiAgOTI6XHRcbiAgOTM6XHQvKiBJbml0aWFsIGJpdHMgYWxsb3dlZCBpbiBiYWNrdXAgc2VydmVyICovXG4gIDk0Olx0I2RlZmluZSBJUF9WU19DT05OX0ZfQkFDS1VQX01BU0sgKElQX1ZTX0NPTk5fRl9GV0RfTUFTSyB8IFxcXG4gIDk1Olx0XHRcdFx0XHQgIElQX1ZTX0NPTk5fRl9OT09VVFBVVCB8IFxcXG4gIDk2Olx0XHRcdFx0XHQgIElQX1ZTX0NPTk5fRl9JTkFDVElWRSB8IFxcXG4gIDk3Olx0XHRcdFx0XHQgIElQX1ZTX0NPTk5fRl9TRVFfTUFTSyB8IFxcXG4gIDk4Olx0XHRcdFx0XHQgIElQX1ZTX0NPTk5fRl9OT19DUE9SVCB8IFxcXG4gIDk5Olx0XHRcdFx0XHQgIElQX1ZTX0NPTk5fRl9URU1QTEFURSBcXFxuIDEwMDpcdFx0XHRcdFx0IClcbiAxMDE6XHRcbiAxMDI6XHQvKiBCaXRzIGFsbG93ZWQgdG8gdXBkYXRlIGluIGJhY2t1cCBzZXJ2ZXIgKi9cbiAxMDM6XHQjZGVmaW5lIElQX1ZTX0NPTk5fRl9CQUNLVVBfVVBEX01BU0sgKElQX1ZTX0NPTk5fRl9JTkFDVElWRSB8IFxcXG4gMTA0Olx0XHRcdFx0XHQgICAgICBJUF9WU19DT05OX0ZfU0VRX01BU0spXG4gMTA1Olx0XG4gMTA2Olx0LyogRmxhZ3MgdGhhdCBhcmUgbm90IHNlbnQgdG8gYmFja3VwIHNlcnZlciBzdGFydCBmcm9tIGJpdCAxNiAqL1xuIDEwNzpcdCNkZWZpbmUgSVBfVlNfQ09OTl9GX05GQ1RcdCgxIFx1MDAzY1x1MDAzYyAxNilcdC8qIHVzZSBuZXRmaWx0ZXIgY29ubnRyYWNrICovXG4gMTA4Olx0XG4gMTA5Olx0LyogQ29ubmVjdGlvbiBmbGFncyBmcm9tIGRlc3RpbmF0aW9uIHRoYXQgY2FuIGJlIGNoYW5nZWQgYnkgdXNlciBzcGFjZSAqL1xuIDExMDpcdCNkZWZpbmUgSVBfVlNfQ09OTl9GX0RFU1RfTUFTSyAoSVBfVlNfQ09OTl9GX0ZXRF9NQVNLIHwgXFxcbiAxMTE6XHRcdFx0XHRcdElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUIHwgXFxcbiAxMTI6XHRcdFx0XHRcdElQX1ZTX0NPTk5fRl9ORkNUIHwgXFxcbiAxMTM6XHRcdFx0XHRcdDApXG4gMTE0Olx0XG4gMTE1Olx0I2RlZmluZSBJUF9WU19TQ0hFRE5BTUVfTUFYTEVOXHQxNlxuIDExNjpcdCNkZWZpbmUgSVBfVlNfUEVOQU1FX01BWExFTlx0MTZcbiAxMTc6XHQjZGVmaW5lIElQX1ZTX0lGTkFNRV9NQVhMRU5cdDE2XG4gMTE4Olx0XG4gMTE5Olx0I2RlZmluZSBJUF9WU19QRURBVEFfTUFYTEVOICAgICAyNTVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk1MTIKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxNzc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIElQVlMgQ29ubmVjdGlvbiBTeW5jIFZ1bG5lcmFiaWxpdHkgYW5kIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIFRoZSBrZXkgaGVyZSBpcyBob3cgSVBWUyBoYW5kbGVzIGNvbm5lY3Rpb24gc3luY2hyb25pemF0aW9uIG1lc3NhZ2VzLCBzcGVjaWZpY2FsbHkgdmVyc2lvbnMgMCBhbmQgMS4gSXQgc2VlbXMgbGlrZSB0aGUgbWFzayBgSVBfVlNfQ09OTl9GX0JBQ0tVUF9NQVNLYCBpbmNsdWRlcyBgSVBfVlNfQ09OTl9GX05PX0NQT1JUYCBhbmQgYElQX1ZTX0NPTk5fRl9URU1QTEFURWAsIHdoaWNoIGlzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLiBJZiBib3RoIGFyZSBzZXQsIHRoYXQgY291bGQgbGVhZCB0byBzb21lIHdlaXJkIGVkZ2UgY2FzZXMuCgpJbiB0aGUgcHJlLXBhdGNoIHYwIGNvZGUsIHRoZSBmbGFnIG1hc2tpbmcgd2FzICptaXNzaW5nKiBgSVBfVlNfQ09OTl9GX0JBQ0tVUF9NQVNLYCBlbnRpcmVseSEgVGhhdCBtZWFucyBhbnkgZmxhZyBjb3VsZCBzbmVhayBpbi4gV2l0aCB2MSwgdGhleSBhdCBsZWFzdCBoYXZlIGEgbWFzaywgYnV0IGl0ICppbmNsdWRlcyogYm90aCBwb3RlbnRpYWxseSBjb25mbGljdGluZyBmbGFncywgYE5PX0NQT1JUYCBhbmQgYFRFTVBMQVRFYC4gV2hhdCBoYXBwZW5zIHdoZW4gYSBjb25uZWN0aW9uIGlzIG1hcmtlZCB3aXRoICpib3RoKiBvZiB0aG9zZT8gSSBuZWVkIHRvIGNoZWNrIHRoZSBsb2dpYyBpbiBgX19pcF92c19jb25uX2luX2dldGAgYW5kIGBpcF92c19jb25uX25ld2AgdG8gc2VlIGhvdyBpdCBoYW5kbGVzIHRlbXBsYXRlcyBhbmQgYE5PX0NQT1JUYC4gVGhlIGBjcG9ydGAgZmllbGQgb24gYSB0ZW1wbGF0ZSBpcyAwLCBzbyBJIG5lZWQgdG8gc2VlIHdoYXQgdGhlIGxvb2t1cCBhbmQgY3JlYXRpb24gbG9naWMgZG9lcyB3aXRoIHRoaXMuCgpUaGUgY29kZSBzZWVtcyB0byB1c2UgYGF0b21pY19pbmNgIGFuZCBgYXRvbWljX2RlY2Agb24gYG5vX2Nwb3J0X2Nvbm5zYCB3aGVuIGBOT19DUE9SVGAgaXMgc2V0LCBhbmQgdGhlcmUmIzM5O3MgbG9naWMgYXJvdW5kIGBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVGAgYXMgd2VsbC4gSWYgYE9ORV9QQUNLRVRgIGlzIGVuYWJsZWQsIHRoZXNlIGNvbm5lY3Rpb25zIG1pZ2h0IGJlIHNob3J0IGxpdmVkLCBvciBzeW5jZWQgaW5jb3JyZWN0bHkuCgpTbywgdGhpcyBsb29rcyBsaWtlIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuIEl0JiMzOTtzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGNvZGUgd2l0aGluIHRoZSBJUFZTIGNvcmUgc3Vic3lzdGVtIChgbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY2ApLiBUaGUgc3luYyBkYWVtb24gcmVjZWl2ZXMgdGhlc2UgbWVzc2FnZXMgb3ZlciB0aGUgbmV0d29yayB2aWEgbXVsdGljYXN0IFVEUCBwYWNrZXRzLiBUaGVzZSBhcmUgcGFyc2VkIGluIGEga2VybmVsIHRocmVhZCAoYHN5bmNfdGhyZWFkX2JhY2t1cGApIHRocm91Z2ggYSBjaGFpbiBvZiBmdW5jdGlvbnMsIGFsbCB0aGUgd2F5IGRvd24gdG8gYGlwX3ZzX3Byb2Nlc3NfbWVzc2FnZWAsIGBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjBgLCBhbmQgYGlwX3ZzX3Byb2Nfc3luY19jb25uYC4gSXQgc2VlbXMgbGlrZSB0aGVzZSBmdW5jdGlvbnMgYXJlIHRoZSBrZXkgdG8gcGFyc2luZyAqdW50cnVzdGVkKiBuZXR3b3JrIHBhY2tldHMgY29taW5nIGZyb20gYSBtdWx0aWNhc3QgcmVjZWl2ZXIuCgpUaGUgcGF0Y2ggYWltcyB0byBhZGQgdmFsaWRhdGlvbiB2aWEgYGlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3NgLCBhbmQgYWRkcyBtYXNraW5nIGluIHYwLCBhbmQgcmVqZWN0cyBpbnZhbGlkIGZsYWcgY29tYmluYXRpb25zLiBTbyBpdCYjMzk7cyBhZGRyZXNzaW5nIHRoaXMgaXNzdWUgZGlyZWN0bHkuCgpCYXNlZCBvbiB0aGUgaW5zdHJ1Y3Rpb25zLCB0aGlzIGlzIGFic29sdXRlbHkgd29ydGggZnV6emluZy4gSXQgdG91Y2hlcyBjb3JlIG5ldHdvcmtpbmcsIG5ldGZpbHRlciwgSVBWUyBwcm90b2NvbHMsIGFuZCBoYW5kbGluZyB1bnRydXN0ZWQgaW5wdXQuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gYEZvY3VzU3ltYm9sc2AuIFdoYXQgYXJlIHRoZSByZWxldmFudCBzeW1ib2xzIHRvIHRhcmdldCB3aXRoIHRoZSBmdXp6ZXI/IFdlIGhhdmUgYGlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3NgIHdoaWNoIGlzIGF0IHRoZSBoZWFydCBvZiB0aGUgYWRkZWQgdmFsaWRhdGlvbi4gVGhlIGlzc3VlIGlzIHdoZXRoZXIgdGhpcyBzdGF0aWMgaGVscGVyIGlzIGlubGluZWQuCgpMb29rcyBsaWtlIGl0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uLCBhbmQgYSBzbWFsbCBoZWxwZXIuIEl0IGlzIGNhbGxlZCBpbiBgaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwYCBhbmQgYGlwX3ZzX3Byb2Nfc3luY19jb25uYC4gVGhlIGxhdHRlciBpcyBgc3RhdGljIGlubGluZWAsIHdoaWNoIG1lYW5zIHRoZSBjb21waWxlciBtaWdodCBpbmxpbmUgaXQuIExldCYjMzk7cyBzZWUgd2hhdCBjYWxscyBpdC4gYGlwX3ZzX3Byb2Nlc3NfbWVzc2FnZWAgLSZndDsgYHN5bmNfdGhyZWFkX2JhY2t1cGAgYW5kIGBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjBgLiBUaGUgdjAgZnVuY3Rpb24sIGFuZCBtYWluIHBhcnNlciwgaXMgYXJvdW5kIDcwIGxpbmVzIGFuZCBgaXBfdnNfcHJvY2Vzc19tZXNzYWdlYCBpcyBhcm91bmQgNzUgbGluZXMsIHNvLCB0aGV5IGFyZSBub3QgdGhhdCBiaWcgYW5kIG1pZ2h0IGJlIHRoZSByaWdodCBgRm9jdXNTeW1ib2xzYC4KCkkgbmVlZCB0byBmb2N1cyBvbiB3aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnRzIHRoaXMgbG9naWMuIEFjY29yZGluZyB0byB0aGUgZ3VpZGVsaW5lcywgSSBzaG91bGQgdGFyZ2V0IG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBzbyBsZXQmIzM5O3MgY2hlY2sgZm9yIGFueSBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiBgaXBfdnNfc3luYy5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVpfXS4qXFwpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTI2OT1zdHJ1Y3QgaXBfdnNfc3luY19idWZmIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTI4Mi0gKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MjgzOnN0YXRpYyB2b2lkIG50b2hfc2VxKHN0cnVjdCBpcF92c19zZXEgKm5vLCBzdHJ1Y3QgaXBfdnNfc2VxICpobylcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjg0LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTI5NC0gKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6Mjk1OnN0YXRpYyB2b2lkIGh0b25fc2VxKHN0cnVjdCBpcF92c19zZXEgKmhvLCBzdHJ1Y3QgaXBfdnNfc2VxICpubylcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjk2LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTMwMj1zdGF0aWMgaW5saW5lIHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzozMDM6c2JfZGVxdWV1ZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwdnNfbWFzdGVyX3N5bmNfc3RhdGUgKm1zKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0zMDQte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MzI3PXN0YXRpYyBpbmxpbmUgc3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjMyODppcF92c19zeW5jX2J1ZmZfY3JlYXRlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCB1bnNpZ25lZCBpbnQgbGVuKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0zMjkte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMzU0LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzozNTU6c3RhdGljIGlubGluZSB2b2lkIGlwX3ZzX3N5bmNfYnVmZl9yZWxlYXNlKHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKnNiKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0zNTYte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9NDA1PXN0YXRpYyBpbmxpbmUgaW50XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjQwNjpzZWxlY3RfbWFzdGVyX3RocmVhZF9pZChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy00MDcte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9NDE0PXN0YXRpYyBpbmxpbmUgc3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjQxNTppcF92c19zeW5jX2J1ZmZfY3JlYXRlX3YwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCB1bnNpZ25lZCBpbnQgbGVuKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy00MTYte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNDQwLS8qIENoZWNrIGlmIGNvbm5lY3Rpb24gaXMgY29udHJvbGxlZCBieSBwZXJzaXN0ZW5jZSAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo0NDE6c3RhdGljIGlubGluZSBib29sIGluX3BlcnNpc3RlbmNlKHN0cnVjdCBpcF92c19jb25uICpjcClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNDQyLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTUzOT1zdGF0aWMgdm9pZCBpcF92c19zeW5jX2Nvbm5fdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTYyOC0gKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NjI5OnZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02MzAte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9ODQxPXN0YXRpYyB2b2lkIGlwX3ZzX3Byb2NfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm5fcGFyYW0gKnBhcmFtLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtOTUyLS8qIENoZWNrIGZvciBpbmNvbXBhdGlibGUgZmxhZ3MgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6OTUzOnN0YXRpYyBib29sIGlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3ModTMyIGZsYWdzKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05NTQte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTA2Nz1zdGF0aWMgaW50IGlwX3ZzX3Byb2Nfc3RyKF9fdTggKnAsIHVuc2lnbmVkIGludCBwbGVuLCB1bnNpZ25lZCBpbnQgKmRhdGFfbGVuLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTA4Ni0gKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTA4NzpzdGF0aWMgaW5saW5lIGludCBpcF92c19wcm9jX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgX191OCAqcCwgX191OCAqbXNnX2VuZClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTA4OC17XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xMjI3PXN0YXRpYyB2b2lkIGlwX3ZzX3Byb2Nlc3NfbWVzc2FnZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgX191OCAqYnVmZmVyLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTI5OC0gKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTI5OTpzdGF0aWMgdm9pZCBzZXRfc29ja19zaXplKHN0cnVjdCBzb2NrICpzaywgaW50IG1vZGUsIGludCB2YWwpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEzMDAte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTMyMC0gKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTMyMTpzdGF0aWMgdm9pZCBzZXRfbWNhc3RfbG9vcChzdHJ1Y3Qgc29jayAqc2ssIHVfY2hhciBsb29wKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMzIyLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEzMzUtICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEzMzY6c3RhdGljIHZvaWQgc2V0X21jYXN0X3R0bChzdHJ1Y3Qgc29jayAqc2ssIHVfY2hhciB0dGwpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEzMzcte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTM1NC0vKiBDb250cm9sIGZyYWdtZW50YXRpb24gb2YgbWVzc2FnZXMgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTM1NTpzdGF0aWMgdm9pZCBzZXRfbWNhc3RfcG10dWRpc2Moc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMzU2LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEzNzUtICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEzNzY6c3RhdGljIGludCBzZXRfbWNhc3RfaWYoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMzc3LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTE0MDU9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNDA2OmpvaW5fbWNhc3RfZ3JvdXAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5fYWRkciAqYWRkciwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTQwNy17XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xNDI3PXN0YXRpYyBpbnQgam9pbl9tY2FzdF9ncm91cDYoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNDQyLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNDQzOnN0YXRpYyBpbnQgYmluZF9tY2FzdGlmX2FkZHIoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTQ0NC17XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xNTk1PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTU5NjppcF92c19zZW5kX2FzeW5jKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGNvbnN0IGNoYXIgKmJ1ZmZlciwgY29uc3Qgc2l6ZV90IGxlbmd0aClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTU5Ny17XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xNjEwPXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTYxMTppcF92c19zZW5kX3N5bmNfbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBpcF92c19zeW5jX21lc2cgKm1zZylcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTYxMi17XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xNjI1PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTYyNjppcF92c19yZWNlaXZlKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGNoYXIgKmJ1ZmZlciwgY29uc3Qgc2l6ZV90IGJ1Zmxlbilcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTYyNy17XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNjQxLS8qIFdha2V1cCB0aGUgbWFzdGVyIHRocmVhZCBmb3Igc2VuZGluZyAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNjQyOnN0YXRpYyB2b2lkIG1hc3Rlcl93YWtldXBfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTY0My17XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xNjYxPXN0YXRpYyBpbmxpbmUgc3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE2NjI6bmV4dF9zeW5jX2J1ZmYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcHZzX21hc3Rlcl9zeW5jX3N0YXRlICptcylcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTY2My17XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNjcyLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNjczOnN0YXRpYyBpbnQgc3luY190aHJlYWRfbWFzdGVyKHZvaWQgKmRhdGEpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE2NzQte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTcyNC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTcyNTpzdGF0aWMgaW50IHN5bmNfdGhyZWFkX2JhY2t1cCh2b2lkICpkYXRhKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNzI2LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTE3NjI9aW50IHN0YXJ0X3N5bmNfdGhyZWFkKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXB2c19zeW5jX2RhZW1vbl9jZmcgKmMsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xOTc3LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxOTc4OmludCBzdG9wX3N5bmNfdGhyZWFkKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgc3RhdGUpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE5Nzkte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjA2NS0gKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MjA2NjppbnQgX19uZXRfaW5pdCBpcF92c19zeW5jX25ldF9pbml0KHN0cnVjdCBuZXRuc19pcHZzICppcHZzKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yMDY3LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTIwNzMtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjIwNzQ6dm9pZCBpcF92c19zeW5jX25ldF9jbGVhbnVwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yMDc1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUwOTIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1NzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgSVBWUyBTeW5jIERhZW1vbiBGdXp6aW5nIFRhcmdldHMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIG1vc3QgZWZmZWN0aXZlIGVudHJ5IHBvaW50cyBmb3IgZnV6emluZyB0aGUgSVBWUyBzeW5jIGRhZW1vbiB1c2luZyBzeXprYWxsZXIuCgpGaXJzdCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXksIG5vbi1zdGF0aWMgQVBJIGVudHJ5IHBvaW50cyBpbiBgaXBfdnNfc3luYy5jYC4gSSBzZWU6IGBzdGFydF9zeW5jX3RocmVhZGAsIGBzdG9wX3N5bmNfdGhyZWFkYCwgYGlwX3ZzX3N5bmNfY29ubmAsIGBpcF92c19zeW5jX25ldF9pbml0YCwgYW5kIGBpcF92c19zeW5jX25ldF9jbGVhbnVwYC4gVGhvc2Ugc2VlbSBsaWtlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnRzLgoKTmV4dCwgSSBuZWVkIHRvIHplcm8gaW4gb24gd2hhdCAqZnVuY3Rpb25zKiB3aXRoaW4gYGlwX3ZzX3N5bmMuY2AgYXJlIGFjdHVhbGx5ICptb2RpZmllZCogb3IgY29yZSB0byB0aGUgc3luYyBwcm9jZXNzLiBJJiMzOTt2ZSBnb3Q6IGBpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzYCwgYGlwX3ZzX3Byb2Nlc3NfbWVzc2FnZV92MGAsIGBpcF92c19wcm9jX3N5bmNfY29ubmAsIGBpcF92c19wcm9jZXNzX21lc3NhZ2VgICh3aGljaCBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBjYWxscyBib3RoIGBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjBgIGFuZCBgaXBfdnNfcHJvY19zeW5jX2Nvbm5gKSwgYW5kIHRoZSBiYWNrdXAgdGhyZWFkIGBzeW5jX3RocmVhZF9iYWNrdXBgLgoKTm93LCBkaWdnaW5nIGRlZXBlci4gSSBzZWUgdGhhdCBgc3RhcnRfc3luY190aHJlYWRgIGlzIHRoZSBjcnVjaWFsIGVudHJ5IHBvaW50LCBzaW5jZSB1c2Vyc3BhY2UgY2FsbHMgaXQgdmlhIG5ldGxpbmsgb3IgYHNldHNvY2tvcHRgIHdpdGggYElQX1ZTX1NUQVRFX0JBQ0tVUGAgdG8gbGF1bmNoIHRoZSBkYWVtb24uIFRoZXJlZm9yZSwgdGhhdCBmdW5jdGlvbiBpcyBjcml0aWNhbC4gSW4gY29uanVuY3Rpb24sIHRoZSBvdGhlciBmdW5jdGlvbnMgbWVudGlvbmVkIHNob3VsZCBhbHNvIGJlIHRlc3RlZCwgaW4gY29uanVuY3Rpb24gd2l0aCB0aGF0IGVudHJ5LgoKR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiBzeXprYWxsZXIsIGl0IHRhcmdldHMgYW55IHN5bWJvbCBhdmFpbGFibGUgaW4gYC9wcm9jL2thbGxzeW1zYCwgZXZlbiBzdGF0aWMgZnVuY3Rpb25zIChhcyBsb25nIGFzIHRoZXkgYXJlbiYjMzk7dCBpbmxpbmVkKS4gU28sIGluY2x1ZGluZyBib3RoIHRoZSBtb2RpZmllZCBzdGF0aWMgZnVuY3Rpb25zIGxpa2UgYGlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3NgLCBgaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwYCwgYGlwX3ZzX3Byb2Nfc3luY19jb25uYCwgYW5kIGBpcF92c19wcm9jZXNzX21lc3NhZ2VgLCAqYWxvbmcqIHdpdGggdGhlIHByaW1hcnkgZmVhdHVyZSBlbnRyeXBvaW50IGBzdGFydF9zeW5jX3RocmVhZGAgYW5kIHRoZSBgc3luY190aHJlYWRfYmFja3VwYCBsb29wLCBzaG91bGQgZ2l2ZSBtZSBleGNlbGxlbnQgY292ZXJhZ2Ugd2l0aG91dCB3YXN0aW5nIGZ1enppbmcgY3ljbGVzIG9uIGlycmVsZXZhbnQgdGFyZ2V0cy4KCkZpbmFsbHksIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBlbnN1cmUgdGhlIHJpZ2h0IGtlcm5lbCBjb25maWcgb3B0aW9ucyBhcmUgc2V0LiBJIGtub3cgYENPTkZJR19JUF9WU2AgaXMgZXNzZW50aWFsLCBvYnZpb3VzbHkuIEkmIzM5O20gY2hlY2tpbmcgdGhlIGBLY29uZmlnYCBmaWxlIGFuZCBpdCBzZWVtcyB0aGlzIGFsc28gZGVwZW5kcyBvbiBgSU5FVCAmYW1wOyZhbXA7IE5FVEZJTFRFUmAsIGFuZCBwb3RlbnRpYWxseSBgTkZfQ09OTlRSQUNLYCAob3Igbm90KS4gQnV0LCBiYXNlZCBvbiBteSBxdWljayBwZXJ1c2FsIG9mIGBpcF92c19zeW5jLmNgIHRoZXJlIGRvZXNuJiMzOTt0IHNlZW0gdG8gYmUgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9yIGAjaWZkZWZgIGJsb2NrcyBhcm91bmQgdGhlIHN5bmMgZGFlbW9uIGl0c2VsZi4gSXQgbG9va3MgbGlrZSB0aGUgc3luYyBkYWVtb24gaXMgYWx3YXlzIGNvbXBpbGVkIHdoZW4gYElQX1ZTYCBpcyBlbmFibGVkLiBFeGNlbGxlbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lmZGVmLipDT05GSUcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9NjI5PXZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjY5LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo2NzA6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY3MS1cdGlmIChjcC1cdTAwM2VhZiA9PSBBRl9JTkVUNilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTczMi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NzMzOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03MzQtXHRpZiAoY3AtXHUwMDNlYWYgPT0gQUZfSU5FVDYpIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTc4OD1pcF92c19jb25uX2ZpbGxfcGFyYW1fc3luYyhzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLCB1bmlvbiBpcF92c19zeW5jX2Nvbm4gKnNjLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzkyLXtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NzkzOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03OTQtXHRpZiAoYWYgPT0gQUZfSU5FVDYpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xMDg3PXN0YXRpYyBpbmxpbmUgaW50IGlwX3ZzX3Byb2Nfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBfX3U4ICpwLCBfX3U4ICptc2dfZW5kKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTEwMS1cdGlmIChzLVx1MDAzZXY2LnR5cGUgXHUwMDI2IFNUWVBFX0ZfSU5FVDYpIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTEwMjojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTEwMy1cdFx0YWYgPSBBRl9JTkVUNjtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEyMDUtXHRcdFx0XHQpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMjA2OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMjA3LVx0ZWxzZVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTMyMT1zdGF0aWMgdm9pZCBzZXRfbWNhc3RfbG9vcChzdHJ1Y3Qgc29jayAqc2ssIHVfY2hhciBsb29wKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTMyNC1cdGluZXRfYXNzaWduX2JpdChNQ19MT09QLCBzaywgbG9vcCk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEzMjU6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEzMjYtXHRpZiAoUkVBRF9PTkNFKHNrLVx1MDAzZXNrX2ZhbWlseSkgPT0gQUZfSU5FVDYpIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTEzMzY9c3RhdGljIHZvaWQgc2V0X21jYXN0X3R0bChzdHJ1Y3Qgc29jayAqc2ssIHVfY2hhciB0dGwpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMzQyLVx0V1JJVEVfT05DRShpbmV0LVx1MDAzZW1jX3R0bCwgdHRsKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTM0MzojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTM0NC1cdGlmIChzay1cdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTEzNTU9c3RhdGljIHZvaWQgc2V0X21jYXN0X3BtdHVkaXNjKHN0cnVjdCBzb2NrICpzaywgaW50IHZhbClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEzNjEtXHRXUklURV9PTkNFKGluZXQtXHUwMDNlcG10dWRpc2MsIHZhbCk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEzNjI6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEzNjMtXHRpZiAoc2stXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xMzc2PXN0YXRpYyBpbnQgc2V0X21jYXN0X2lmKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEzODUtXHQvKiAgaW5ldC1cdTAwM2VtY19hZGRyICA9IDA7ICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEzODY6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEzODctXHRpZiAoc2stXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xNDA2PWpvaW5fbWNhc3RfZ3JvdXAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5fYWRkciAqYWRkciwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE0MjUtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE0MjY6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE0Mjctc3RhdGljIGludCBqb2luX21jYXN0X2dyb3VwNihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbjZfYWRkciAqYWRkcixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTE1NDQ9c3RhdGljIGludCBtYWtlX3JlY2VpdmVfc29jayhzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGlkLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTU3NC1cdC8qIGpvaW4gdGhlIG11bHRpY2FzdCBncm91cCAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNTc1OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNTc2LVx0aWYgKGlwdnMtXHUwMDNlYmNmZy5tY2FzdF9hZiA9PSBBRl9JTkVUNilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc4MjcKCQkJCQkJCW91dHB1dDogMjA1CgkJCQkJCQl0aG91Z2h0czogMzc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBJUFZTIFN5bmNocm9uaXphdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBgaXBfdnNfc3luYy5vYCBpcyBkZWZpbml0ZWx5IGJ1aWx0IGFsb25nc2lkZSBgaXBfdnNgIHdoZW5ldmVyIHRoZSBtYWluIGBDT05GSUdfSVBfVlNgIG9wdGlvbiBpcyBlbmFibGVkIOKAkyB0aGF0JiMzOTtzIGEgZ2l2ZW4uIEFuZCwgb2YgY291cnNlLCBgQ09ORklHX0lQX1ZTX0lQVjZgIHByb3ZpZGVzIElQdjYgc3VwcG9ydCwgYXMgZXhwZWN0ZWQuIExldCYjMzk7cyBtYWtlIHN1cmUgYENPTkZJR19JUF9WU2AgaXRzZWxmIGlzIGVuYWJsZWQuIEl0cyBwYXJlbnRzIGFyZSBgTkVURklMVEVSYCBhbmQgYElORVRgLCB3aGljaCBhcmUgZmFpcmx5IGZ1bmRhbWVudGFsLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgaW1wb3J0YW50IGZ1bmN0aW9uczoKCiogICBgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFnc2A6IEZsYWcgdmFsaWRhdGlvbiwgdGhhdCYjMzk7cyBjcnVjaWFsLgoqICAgYGlwX3ZzX3Byb2Nlc3NfbWVzc2FnZV92MGAsIGBpcF92c19wcm9jZXNzX21lc3NhZ2VgOiBJIG5lZWQgdG8gbG9vayBhdCBib3RoIHYwIGFuZCB2MSBzeW5jIG1lc3NhZ2VzLgoqICAgYGlwX3ZzX3Byb2Nfc3luY19jb25uYDogQ29ubmVjdGluZyBzeW5jaHJvbml6YXRpb24uCiogICBgc3RhcnRfc3luY190aHJlYWRgLCBgc3luY190aHJlYWRfYmFja3VwYDogVGhyZWFkIG1hbmFnZW1lbnQuCgpIZXJlJiMzOTtzIG15IEVuYWJsZUNvbmZpZ3MgY2hlY2tsaXN0OgoKKiAgIGBJUF9WU2AKKiAgIGBORVRGSUxURVJgCiogICBgSU5FVGAKCldvcnRoIGZ1enppbmc/IEFic29sdXRlbHkuIFRoZSBwYXRjaCBkZWFscyB3aXRoIGluY29taW5nIHN5bmNocm9uaXphdGlvbiBtZXNzYWdlcyBmcm9tIGJhY2t1cCBJUFZTIHRocmVhZHMg4oCTIHBvdGVudGlhbGx5IGZyb20gdW50cnVzdGVkIHNvdXJjZXMsIGFuZCBmbGFncyB3aGljaCBjYW4gaGF2ZSBpbmNvbXBhdGliaWxpdGllcy4gSXQgbG9va3MgbGlrZSBgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFnc2AgcHJldmVudHMgdGhpbmdzIGxpa2UgYElQX1ZTX0NPTk5fRl9OT19DUE9SVGAgYW5kIGBJUF9WU19DT05OX0ZfVEVNUExBVEVgIGZyb20gbWl4aW5nIHdpdGggYElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUYCBmbGFncy4gU2luY2UgdGhpcyBjb2RlIHJ1bnMgaW4gdGhlIGtlcm5lbCBhbmQgcHJvY2Vzc2VzIG5ldHdvcmsgcGFja2V0cywgaXQmIzM5O3MgZGVmaW5pdGVseSBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLiBJdCBpbXBhY3RzIHRoZSBuZXRmaWx0ZXIvSVBWUyBzdWJzeXN0ZW0gYW5kIHJlYWNoYWJsZSBuZXR3b3JrIGNvZGUuCgpGaW5hbGx5LCBsZXQmIzM5O3MgcnVuIGEgc2FuaXR5IGNoZWNrIG9uIHRoZSBpbnN0cnVjdGlvbiBzZXQ6CgoqICAgT25lIGBzZXQtcmVzdWx0c2AgY2FsbC4gQ2hlY2suCiogICBFbmFibGVDb25maWdzIGFyZSBjb3JyZWN0LiBDaGVjay4KKiAgIEZvY3VzU3ltYm9scyBhcmUgc3BlY2lmaWMsIG5vdCBnZW5lcmljIOKAkyB0aGVzZSBhcmUgZ29vZCB0YXJnZXRzIGZvciBkZWVwZXIgYW5hbHlzaXMuIENoZWNrLgoqICAgVGhlIHJlYXNvbmluZyBpcyBjb25jaXNlIGFuZCB0byB0aGUgcG9pbnQuIENoZWNrLgoKRXZlcnl0aGluZyBjaGVja3Mgb3V0LiBJJiMzOTttIHNhdGlzZmllZC4gVGltZSB0byBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfVlMmIzM0OywKICAgICYjMzQ7TkVURklMVEVSJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzJiMzNDssCiAgICAmIzM0O2lwX3ZzX3Byb2Nlc3NfbWVzc2FnZV92MCYjMzQ7LAogICAgJiMzNDtpcF92c19wcm9jX3N5bmNfY29ubiYjMzQ7LAogICAgJiMzNDtpcF92c19wcm9jZXNzX21lc3NhZ2UmIzM0OywKICAgICYjMzQ7c3luY190aHJlYWRfYmFja3VwJiMzNDssCiAgICAmIzM0O3N0YXJ0X3N5bmNfdGhyZWFkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZmxhZyB2YWxpZGF0aW9uIChpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzKSBhbmQgcHJvcGVyIG1hc2tpbmcgd2hlbiBwYXJzaW5nIGluY29taW5nIElQVlMgc3luYyBtZXNzYWdlcyBpbiB0aGUgYmFja3VwIGRhZW1vbiwgcmVqZWN0aW5nIGluY29tcGF0aWJsZSBmbGFncyBzdWNoIGFzIElQX1ZTX0NPTk5fRl9OT19DUE9SVCB3aXRoIElQX1ZTX0NPTk5fRl9URU1QTEFURSBvciBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVCBpbiBib3RoIHYwIGFuZCB2MSBtZXNzYWdlIGZvcm1hdHMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmsgcHJvdG9jb2wgcHJvY2Vzc2luZyBpbiBuZXRmaWx0ZXIvSVBWUyBhbmQgd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfVlMmIzM0OywKICAgICYjMzQ7TkVURklMVEVSJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzJiMzNDssCiAgICAmIzM0O2lwX3ZzX3Byb2Nlc3NfbWVzc2FnZV92MCYjMzQ7LAogICAgJiMzNDtpcF92c19wcm9jX3N5bmNfY29ubiYjMzQ7LAogICAgJiMzNDtpcF92c19wcm9jZXNzX21lc3NhZ2UmIzM0OywKICAgICYjMzQ7c3luY190aHJlYWRfYmFja3VwJiMzNDssCiAgICAmIzM0O3N0YXJ0X3N5bmNfdGhyZWFkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZmxhZyB2YWxpZGF0aW9uIChpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzKSBhbmQgcHJvcGVyIG1hc2tpbmcgd2hlbiBwYXJzaW5nIGluY29taW5nIElQVlMgc3luYyBtZXNzYWdlcyBpbiB0aGUgYmFja3VwIGRhZW1vbiwgcmVqZWN0aW5nIGluY29tcGF0aWJsZSBmbGFncyBzdWNoIGFzIElQX1ZTX0NPTk5fRl9OT19DUE9SVCB3aXRoIElQX1ZTX0NPTk5fRl9URU1QTEFURSBvciBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVCBpbiBib3RoIHYwIGFuZCB2MSBtZXNzYWdlIGZvcm1hdHMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmsgcHJvdG9jb2wgcHJvY2Vzc2luZyBpbiBuZXRmaWx0ZXIvSVBWUyBhbmQgd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6NDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODo0ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZmxhZyB2YWxpZGF0aW9uIChgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFnc2ApIGluIHRoZSBJUFZTIHN5bmNocm9uaXphdGlvbiBtZXNzYWdlIGhhbmRsaW5nIGZ1bmN0aW9ucyAoYGlwX3ZzX3Byb2Nlc3NfbWVzc2FnZV92MGAgYW5kIGBpcF92c19wcm9jX3N5bmNfY29ubmApIHRvIHJlamVjdCBpbnZhbGlkIGZsYWcgY29tYmluYXRpb25zIChlLmcuLCBgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVRgIG9yIGBJUF9WU19DT05OX0ZfTk9fQ1BPUlRgIGNvbWJpbmVkIHdpdGggYElQX1ZTX0NPTk5fRl9URU1QTEFURWApLiBUaGUgZmxhZ3MgdmFyaWFibGUgaXMgZGlyZWN0bHkgaW5pdGlhbGl6ZWQgZnJvbSByZWNlaXZlZCBuZXR3b3JrIHBhY2tldCBkYXRhIChgbnRvaHNgIC8gYG50b2hsYCksIGFuZCB0aGUgdmFsaWRhdGlvbiBsb2dpYyBvbmx5IGFkZHMgZWFybHkgcmVqZWN0aW9uIG9mIGludmFsaWQgc3luYyBtZXNzYWdlcy4gTm8gaGVhcC9zdGFjayBtZW1vcnkgYWxsb2NhdGlvbnMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQsIG5vIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb25zIG9yIGNvcHlpbmcgdG8gdXNlciBzcGFjZSBhcmUgYWx0ZXJlZCwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBwYWRkaW5nIGFyZSByZWFkIG9yIGV4cG9zZWQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHN0ZW1taW5nIGZyb20gaW5jb21wYXRpYmxlIGZsYWdzIChzdWNoIGFzIHN0YXRlIGluY29uc2lzdGVuY2llcywgcmVmY291bnQgZXJyb3JzLCBvciB1c2UtYWZ0ZXItZnJlZSkgYXJlIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgS0FTQU4vcmVmY291bnQgY2hlY2tzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmY3MjY5OTFlNmFmNjk3MTMxMWEwYTAwNjkyYjBhMWJiMWMyMzkzZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDE4OjQ2OjM2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMKaW5kZXggNTM4M2FlYWZiMGFlZC4uNjlkYzI4MTUzZWMxMiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jCkBAIC05NDksNiAmIzQzOzk0OSwyMSBAQCBzdGF0aWMgdm9pZCBpcF92c19wcm9jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uX3BhcmFtICpwYQogCWlwX3ZzX2Nvbm5fcHV0KGNwKTsKIH0KIAomIzQzOy8qIENoZWNrIGZvciBpbmNvbXBhdGlibGUgZmxhZ3MgKi8KJiM0MztzdGF0aWMgYm9vbCBpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzKHUzMiBmbGFncykKJiM0Mzt7CiYjNDM7CS8qIFdlIGRvIG5vdCBleHBlY3QgTk9fQ1BPUlQsIGVzcGVjaWFsbHkgdG8gYWxsb3cgbG9va3VwcwomIzQzOwkgKiB0byBoaXQgdGVtcGxhdGVzCiYjNDM7CSAqLwomIzQzOwlpZiAoZmxhZ3MgJmFtcDsgSVBfVlNfQ09OTl9GX05PX0NQT1JUKSB7CiYjNDM7CQlpZiAoZmxhZ3MgJmFtcDsgSVBfVlNfQ09OTl9GX1RFTVBMQVRFKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzOwlpZiAoZmxhZ3MgJmFtcDsgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKIC8qCiAgKiAgUHJvY2VzcyByZWNlaXZlZCBtdWx0aWNhc3QgbWVzc2FnZSBmb3IgVmVyc2lvbiAwCiAgKi8KQEAgLTk3Miw4ICYjNDM7OTg3LDcgQEAgc3RhdGljIHZvaWQgaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBjb25zdCBjaGFyICpidWZmZXIKIAkJCXJldHVybjsKIAkJfQogCQlzID0gKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAgKikgcDsKLQkJZmxhZ3MgPSBudG9ocyhzLSZndDtmbGFncykgfCBJUF9WU19DT05OX0ZfU1lOQzsKLQkJZmxhZ3MgJmFtcDs9IH5JUF9WU19DT05OX0ZfSEFTSEVEOwomIzQzOwkJZmxhZ3MgPSBudG9ocyhzLSZndDtmbGFncyk7CiAJCWlmIChmbGFncyAmYW1wOyBJUF9WU19DT05OX0ZfU0VRX01BU0spIHsKIAkJCW9wdCA9IChzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKikmYW1wO3NbMV07CiAJCQlwICYjNDM7PSBGVUxMX0NPTk5fU0laRTsKQEAgLTk4Niw2ICYjNDM7MTAwMCwxMyBAQCBzdGF0aWMgdm9pZCBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGNvbnN0IGNoYXIgKmJ1ZmZlcgogCQkJcCAmIzQzOz0gU0lNUExFX0NPTk5fU0laRTsKIAkJfQogCiYjNDM7CQlpZiAoIWlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3MoZmxhZ3MpKSB7CiYjNDM7CQkJSVBfVlNfREJHKDIsICYjMzQ7QkFDS1VQIHYwLCBJbnZhbGlkIGZsYWdzIDB4JVhcbiYjMzQ7LCBmbGFncyk7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CQlmbGFncyAmYW1wOz0gSVBfVlNfQ09OTl9GX0JBQ0tVUF9NQVNLOwomIzQzOwkJZmxhZ3MgfD0gSVBfVlNfQ09OTl9GX1NZTkM7CiYjNDM7CiAJCXN0YXRlID0gbnRvaHMocy0mZ3Q7c3RhdGUpOwogCQlpZiAoIShmbGFncyAmYW1wOyBJUF9WU19DT05OX0ZfVEVNUExBVEUpKSB7CiAJCQlwcCA9IGlwX3ZzX3Byb3RvX2dldChzLSZndDtwcm90b2NvbCk7CkBAIC0xMTQxLDcgJiM0MzsxMTYyLDEzIEBAIHN0YXRpYyBpbmxpbmUgaW50IGlwX3ZzX3Byb2Nfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBfX3U4ICpwLCBfX3U4ICptCiAJfQogCiAJLyogR2V0IGZsYWdzIGFuZCBNYXNrIG9mZiB1bnN1cHBvcnRlZCAqLwotCWZsYWdzICA9IG50b2hsKHMtJmd0O3Y0LmZsYWdzKSAmYW1wOyBJUF9WU19DT05OX0ZfQkFDS1VQX01BU0s7CiYjNDM7CWZsYWdzID0gbnRvaGwocy0mZ3Q7djQuZmxhZ3MpOwomIzQzOwlpZiAoIWlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3MoZmxhZ3MpKSB7CiYjNDM7CQlJUF9WU19EQkcoMywgJiMzNDtCQUNLVVAsIEludmFsaWQgZmxhZ3MgMHglWFxuJiMzNDssIGZsYWdzKTsKJiM0MzsJCXJldGMgPSAyNTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CWZsYWdzICZhbXA7PSBJUF9WU19DT05OX0ZfQkFDS1VQX01BU0s7CiAJZmxhZ3MgfD0gSVBfVlNfQ09OTl9GX1NZTkM7CiAJc3RhdGUgPSBudG9ocyhzLSZndDt2NC5zdGF0ZSk7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MDkKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxMDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBKdXN0aWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cnlpbmcgdG8gZGVjaWRlIGlmIGl0IHdhcnJhbnRzIGZpcmluZyB1cCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIExldCYjMzk7cyBicmVhayBpdCBkb3duLgoKRmlyc3QsIEkgc2VlIHRoZSBwYXRjaCBtb2RpZmllcyBgbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY2AuIFRoaXMgaXMgYWJvdXQgSVBWUyAoSVAgVmlydHVhbCBTZXJ2ZXIpLCBzcGVjaWZpY2FsbHkgdGhlIHN5bmNocm9uaXphdGlvbiBjb2RlLiBJIGtub3cgdGhpcyBhcmVhIGlzIGEgY3JpdGljYWwgY29tcG9uZW50IGZvciBsb2FkIGJhbGFuY2luZyBhbmQgaGlnaCBhdmFpbGFiaWxpdHksIGFuZCB0aGVyZWZvcmUgYSBwbGFjZSB3aGVyZSBzdWJ0bGUgZXJyb3JzIGNhbiBoYXZlIHNpZ25pZmljYW50IGltcGFjdC4gU3luY2hyb25pemF0aW9uLCBieSBpdHMgbmF0dXJlLCBpcyBhIGNvbW1vbiBzb3VyY2Ugb2YgY29uY3VycmVuY3kgaXNzdWVzLgoKVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGludHJvZHVjZXMgYSB2YWxpZGF0aW9uIGZ1bmN0aW9uLCBgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncygpYC4gIEl0IHNlZW1zIHdlJiMzOTtyZSBub3cgZXhwbGljaXRseSBjaGVja2luZyB0aGUgdmFsaWRpdHkgb2YgY29ubmVjdGlvbiBmbGFncyByZWNlaXZlZCBkdXJpbmcgc3luY2hyb25pemF0aW9uLiBUaGUgY29kZSBpcyBzcGVjaWZpY2FsbHkgZ3VhcmRpbmcgYWdhaW5zdCBgSVBfVlNfQ09OTl9GX05PX0NQT1JUYCBhbmQgYElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUYCBpbiBjZXJ0YWluIGNvbWJpbmF0aW9ucywgYW5kIG5vdyBhZGRzIGEgY2hlY2sgdG8gY29uZmlybSBmbGFncyBkb24mIzM5O3QgZ2V0ICYjMzk7aGFzaGVkJiMzOTssIGJlZm9yZSBhcHBseWluZyB0aGUgcHJvcGVyIG1hc2ssIHdoaWNoIGluY3JlYXNlcyB0aGUgbGlrZWxpaG9vZCBvZiBhbiBlcnJvciBzdGF0ZSBiZWluZyBjYXVnaHQuIEkmIzM5O20gaW5mZXJyaW5nIHRoaXMgaXMgYmVjYXVzZSBjZXJ0YWluIGZsYWcgY29tYmluYXRpb25zIGNhbiBsZWFkIHRvIGluY29uc2lzdGVuY2llcyBvciBlcnJvcnMgaW4gaG93IGNvbm5lY3Rpb25zIGFyZSBoYW5kbGVkLCBlc3BlY2lhbGx5IHdoZW4gdXNlZCB3aXRoIGBJUF9WU19DT05OX0ZfVEVNUExBVEVgLiBUaGUgY2hlY2tzIGFyZSBhbHNvIGFkZGVkIHRvIGJvdGggdGhlIHYwIGFuZCB2NCBwcm9jZXNzaW5nLgoKVGhlIGNvbW1pdCBsb2cgaW1wbGllcyB0aGF0IHRoZXNlIGNoZWNrcyBhcmUgcmVsYXRlZCB0byBhbiBpc3N1ZSB3aGVyZSBiYWQgZmxhZyB2YWx1ZXMgYXJlIGJlaW5nIHJlY2VpdmVkIGR1cmluZyB0aGUgc3luY2hyb25pemF0aW9uIHByb2Nlc3MgYW5kIHRoZSBwYXRjaCBub3cgZ3VhcmRzIGFnYWluc3QgdGhhdC4gR2l2ZW4gdGhlIHNlbnNpdGl2ZSBuYXR1cmUgb2YgdGhpcyBjb2RlLCB0aGUgY2hhbmdlIGluIGJlaGF2aW9yIGlzIHdvcnRoIGxvb2tpbmcgaW50by4KCkdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBlcnJvcnMgaW4gdGhlIHN5bmNocm9uaXphdGlvbiBwcm9jZXNzLCBhbmQgdGhlIGludHJvZHVjdGlvbiBvZiBuZXcgY2hlY2tzLCB0aGlzIHBhdGNoIGlzIGEgc3Ryb25nIGNhbmRpZGF0ZSBmb3IgS01TQU4gZnV6emluZy4gVGhlIGNoZWNrcyB3aWxsIGxpa2VseSBpbmNyZWFzZSB0aGUgbGlrZWxpaG9vZCBvZiBkaXNjb3ZlcmluZyBhbmQgZXhwb3NpbmcgYW55IGV4aXN0aW5nIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy4gSXQgYWxzbyBzdWdnZXN0cyB0aGF0IHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBtb3JlIGNvbXBsZXggdGhhbiBpdCBmaXJzdCBhcHBlYXJzLCB3aGljaCByZXF1aXJlcyBleHRyYSB0ZXN0aW5nIGFuZCB2YWxpZGF0aW9uLiBJJiMzOTtsbCByZWNvbW1lbmQgdGhlIGZ1enppbmcgc2Vzc2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfdnNfcHJvY19zeW5jX2Nvbm4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTA2Nz1zdGF0aWMgaW50IGlwX3ZzX3Byb2Nfc3RyKF9fdTggKnAsIHVuc2lnbmVkIGludCBwbGVuLCB1bnNpZ25lZCBpbnQgKmRhdGFfbGVuLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTA4Ni0gKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTA4NzpzdGF0aWMgaW5saW5lIGludCBpcF92c19wcm9jX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgX191OCAqcCwgX191OCAqbXNnX2VuZClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTA4OC17XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xMjI3PXN0YXRpYyB2b2lkIGlwX3ZzX3Byb2Nlc3NfbWVzc2FnZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgX191OCAqYnVmZmVyLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTI3OC1cdFx0XHQvKiBQcm9jZXNzIGEgc2luZ2xlIHN5bmNfY29ubiAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMjc5Olx0XHRcdHJldGMgPSBpcF92c19wcm9jX3N5bmNfY29ubihpcHZzLCBwLCBtc2dfZW5kKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTI4MC1cdFx0XHRpZiAocmV0YyBcdTAwM2MgMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjIzCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBJUFZTIFN5bmNocm9uaXphdGlvbiBDb2RlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IElQVlMgc3luY3MgaXRzIHN0YXRlLCBwYXJ0aWN1bGFybHkgd2hlbiBpdCBjb21lcyB0byByZXBsaWNhdGluZyBhbmQgbWFpbnRhaW5pbmcgY2x1c3RlciBjb25zaXN0ZW5jeS4gR2l2ZW4gdGhlIG5lZWQgdG8gZGVlcGx5IHVuZGVyc3RhbmQgdGhlIHN5bmNocm9uaXphdGlvbiBwcm9jZXNzLCBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBvbiB0d28gc3BlY2lmaWMgYXJlYXMgd2l0aGluIGBpcF92c19zeW5jLmNgLiBMZXQmIzM5O3MgdGFyZ2V0IGxpbmVzIDk1MC0xMDEwIGFuZCB0aGVuIGxpbmVzIDExMzAtMTE3NS4gVGhhdCBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaG9zZSBzZWN0aW9ucyBsaWtlbHkgZGVhbCB3aXRoIGNvcmUgc3luY2hyb25pemF0aW9uIG9wZXJhdGlvbnMg4oCTIHBlcmhhcHMgdGhlIGhlYXJ0IG9mIGhvdyBkaWZmZXJlbnQgbm9kZXMgbWFpbnRhaW4gYSBjb25zaXN0ZW50IHZpZXcgb2YgdGhlIHZpcnR1YWwgc2VydmljZXMgYW5kIHJlYWwgc2VydmVycy4gRm9jdXNpbmcgb24gdGhvc2Ugc2VjdGlvbnMgc2hvdWxkIHF1aWNrbHkgcmV2ZWFsIHNvbWUgb2YgdGhlIG51YW5jZXMgb2YgdGhlIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zIGluIHVzZS4gSSBleHBlY3QgdG8gc2VlIGRhdGEgc3RydWN0dXJlcywgYWxnb3JpdGhtcywgYW5kIHBvc3NpYmx5IHNvbWUgbmV0d29yayBwYWNrZXQgaW50ZXJhY3Rpb25zLiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDc1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NDA6XHRcdH0gZWxzZSB7XG4gOTQxOlx0XHRcdHN0cnVjdCBpcF92c19wcm90b19kYXRhICpwZDtcbiA5NDI6XHRcbiA5NDM6XHRcdFx0cGQgPSBpcF92c19wcm90b19kYXRhX2dldChpcHZzLCBwcm90b2NvbCk7XG4gOTQ0Olx0XHRcdGlmICghKGZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfVEVNUExBVEUpIFx1MDAyNlx1MDAyNiBwZCBcdTAwMjZcdTAwMjYgcGQtXHUwMDNldGltZW91dF90YWJsZSlcbiA5NDU6XHRcdFx0XHRjcC1cdTAwM2V0aW1lb3V0ID0gcGQtXHUwMDNldGltZW91dF90YWJsZVtzdGF0ZV07XG4gOTQ2Olx0XHRcdGVsc2VcbiA5NDc6XHRcdFx0XHRjcC1cdTAwM2V0aW1lb3V0ID0gKDMqNjAqSFopO1xuIDk0ODpcdFx0fVxuIDk0OTpcdFx0aXBfdnNfY29ubl9wdXQoY3ApO1xuIDk1MDpcdH1cbiA5NTE6XHRcbiA5NTI6XHQvKiBDaGVjayBmb3IgaW5jb21wYXRpYmxlIGZsYWdzICovXG4gOTUzOlx0c3RhdGljIGJvb2wgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyh1MzIgZmxhZ3MpXG4gOTU0Olx0e1xuIDk1NTpcdFx0LyogV2UgZG8gbm90IGV4cGVjdCBOT19DUE9SVCwgZXNwZWNpYWxseSB0byBhbGxvdyBsb29rdXBzXG4gOTU2Olx0XHQgKiB0byBoaXQgdGVtcGxhdGVzXG4gOTU3Olx0XHQgKi9cbiA5NTg6XHRcdGlmIChmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX05PX0NQT1JUKSB7XG4gOTU5Olx0XHRcdGlmIChmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX1RFTVBMQVRFKVxuIDk2MDpcdFx0XHRcdHJldHVybiBmYWxzZTtcbiA5NjE6XHRcdH1cbiA5NjI6XHRcdGlmIChmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpXG4gOTYzOlx0XHRcdHJldHVybiBmYWxzZTtcbiA5NjQ6XHRcdHJldHVybiB0cnVlO1xuIDk2NTpcdH1cbiA5NjY6XHRcbiA5Njc6XHQvKlxuIDk2ODpcdCAqICBQcm9jZXNzIHJlY2VpdmVkIG11bHRpY2FzdCBtZXNzYWdlIGZvciBWZXJzaW9uIDBcbiA5Njk6XHQgKi9cbiA5NzA6XHRzdGF0aWMgdm9pZCBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGNvbnN0IGNoYXIgKmJ1ZmZlcixcbiA5NzE6XHRcdFx0XHRcdCAgICAgY29uc3Qgc2l6ZV90IGJ1ZmxlbilcbiA5NzI6XHR7XG4gOTczOlx0XHRzdHJ1Y3QgaXBfdnNfc3luY19tZXNnX3YwICptID0gKHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjAgKilidWZmZXI7XG4gOTc0Olx0XHRzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwICpzO1xuIDk3NTpcdFx0c3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICpvcHQ7XG4gOTc2Olx0XHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwO1xuIDk3NzpcdFx0c3RydWN0IGlwX3ZzX2Nvbm5fcGFyYW0gcGFyYW07XG4gOTc4Olx0XHRjaGFyICpwO1xuIDk3OTpcdFx0aW50IGk7XG4gOTgwOlx0XG4gOTgxOlx0XHRwID0gKGNoYXIgKilidWZmZXIgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjApO1xuIDk4MjpcdFx0Zm9yIChpPTA7IGlcdTAwM2NtLVx1MDAzZW5yX2Nvbm5zOyBpJiM0MzsmIzQzOykge1xuIDk4MzpcdFx0XHR1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0YXRlO1xuIDk4NDpcdFxuIDk4NTpcdFx0XHRpZiAocCAmIzQzOyBTSU1QTEVfQ09OTl9TSVpFIFx1MDAzZSBidWZmZXImIzQzO2J1Zmxlbikge1xuIDk4NjpcdFx0XHRcdElQX1ZTX0VSUl9STChcJiMzNDtCQUNLVVAgdjAsIGJvZ3VzIGNvbm5cXG5cJiMzNDspO1xuIDk4NzpcdFx0XHRcdHJldHVybjtcbiA5ODg6XHRcdFx0fVxuIDk4OTpcdFx0XHRzID0gKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAgKikgcDtcbiA5OTA6XHRcdFx0ZmxhZ3MgPSBudG9ocyhzLVx1MDAzZWZsYWdzKTtcbiA5OTE6XHRcdFx0aWYgKGZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0spIHtcbiA5OTI6XHRcdFx0XHRvcHQgPSAoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICopXHUwMDI2c1sxXTtcbiA5OTM6XHRcdFx0XHRwICYjNDM7PSBGVUxMX0NPTk5fU0laRTtcbiA5OTQ6XHRcdFx0XHRpZiAocCBcdTAwM2UgYnVmZmVyJiM0MztidWZsZW4pIHtcbiA5OTU6XHRcdFx0XHRcdElQX1ZTX0VSUl9STChcJiMzNDtCQUNLVVAgdjAsIERyb3BwaW5nIGJ1ZmZlciBib2d1cyBjb25uIG9wdGlvbnNcXG5cJiMzNDspO1xuIDk5NjpcdFx0XHRcdFx0cmV0dXJuO1xuIDk5NzpcdFx0XHRcdH1cbiA5OTg6XHRcdFx0fSBlbHNlIHtcbiA5OTk6XHRcdFx0XHRvcHQgPSBOVUxMO1xuMTAwMDpcdFx0XHRcdHAgJiM0Mzs9IFNJTVBMRV9DT05OX1NJWkU7XG4xMDAxOlx0XHRcdH1cbjEwMDI6XHRcbjEwMDM6XHRcdFx0aWYgKCFpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzKGZsYWdzKSkge1xuMTAwNDpcdFx0XHRcdElQX1ZTX0RCRygyLCBcJiMzNDtCQUNLVVAgdjAsIEludmFsaWQgZmxhZ3MgMHglWFxcblwmIzM0OywgZmxhZ3MpO1xuMTAwNTpcdFx0XHRcdGNvbnRpbnVlO1xuMTAwNjpcdFx0XHR9XG4xMDA3Olx0XHRcdGZsYWdzIFx1MDAyNj0gSVBfVlNfQ09OTl9GX0JBQ0tVUF9NQVNLO1xuMTAwODpcdFx0XHRmbGFncyB8PSBJUF9WU19DT05OX0ZfU1lOQztcbjEwMDk6XHRcbjEwMTA6XHRcdFx0c3RhdGUgPSBudG9ocyhzLVx1MDAzZXN0YXRlKTtcbjEwMTE6XHRcdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9URU1QTEFURSkpIHtcbjEwMTI6XHRcdFx0XHRwcCA9IGlwX3ZzX3Byb3RvX2dldChzLVx1MDAzZXByb3RvY29sKTtcbjEwMTM6XHRcdFx0XHRpZiAoIXBwKSB7XG4xMDE0Olx0XHRcdFx0XHRJUF9WU19EQkcoMiwgXCYjMzQ7QkFDS1VQIHYwLCBVbnN1cHBvcnRlZCBwcm90b2NvbCAldVxcblwmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjEwNgoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBhcyBpZiBpdCYjMzk7cyBteSBvd24gdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgRGVlcGVyOiBMaW5lcyAxMTQwLTExNzUqKgoKQWxyaWdodCwgdGltZSB0byBmb2N1cyBpbiBhIGJpdC4gVGhlIGJyb2FkZXIgY29udGV4dCBpcyBjbGVhciwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBjYXRjaGluZyB0aGUgbnVhbmNlcy4gSSYjMzk7bSBnb2luZyB0byB6ZXJvIGluIG9uIGxpbmVzIDExNDAtMTE3NS4gVGhhdCBzZWdtZW50LCBpZiBJIHJlY2FsbCBjb3JyZWN0bHksIGlzIHdoZXJlIHRoZXkgcmVhbGx5IHN0YXJ0IHRvIHVucGFjayB0aGUgaW1wbGljYXRpb25zIG9mIFticmllZmx5IG1lbnRpb24gdGhlIHRvcGljIGZyb20gYmVmb3JlXS4gSXQmIzM5O3MgbGlrZWx5IGEgY3JpdGljYWwgc2VjdGlvbiBmb3IgdW5kZXJzdGFuZGluZyBbbWVudGlvbiBzb21ldGhpbmcgc3BlY2lmaWMsIGxpa2UgJiMzNDt0aGUgaW50ZXJwbGF5IG9mIFggYW5kIFkmIzM0OyBvciAmIzM0O3RoZSBzcGVjaWZpYyBtZWNoYW5pc20gYXQgcGxheSYjMzQ7XS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgW21lbnRpb24ga2V5IHRoaW5ncyB5b3UmIzM5O3JlIGxvb2tpbmcgZm9yLCBsaWtlICYjMzQ7YW55IHN1YnRsZSBzaGlmdHMgaW4gdGhlIGFyZ3VtZW50LCYjMzQ7ICYjMzQ7ZXZpZGVuY2Ugc3VwcG9ydGluZyB0aGUgaHlwb3RoZXNpcywmIzM0OyBvciAmIzM0O3BvdGVudGlhbCBjb3VudGVyYXJndW1lbnRzJiMzNDtdLiBNeSBnb2FsIGlzIHRvIGV4dHJhY3QgdGhlIGNvcmUgaWRlYXMgcHJlc2VudGVkIGFuZCBtYWtlIHN1cmUgdGhleSBhbGlnbiB3aXRoIG15IGV4aXN0aW5nIGZyYW1ld29yaywgb3IgaWRlbnRpZnkgZXhhY3RseSAqd2hlcmUqIHRoZXkgZGV2aWF0ZSBhbmQgd2h5LiBJIGV4cGVjdCB0byBiZSBhYmxlIHRvIG1ha2Ugc29tZSBpbnNpZ2h0ZnVsIGNvbW1lbnRzIG9uIHRoaXMgc2VjdGlvbjsgSSYjMzk7bSByZWFkeSB0byBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE0MDpcdFx0XHRcdFx0XHQgICBJUF9WU19QRURBVEFfTUFYTEVOLCBcdTAwMjZvcHRfZmxhZ3MsXG4xMTQxOlx0XHRcdFx0XHRcdCAgIElQVlNfT1BUX0ZfUEVfREFUQSkpXG4xMTQyOlx0XHRcdFx0XHRyZXR1cm4gLTYwO1xuMTE0MzpcdFx0XHRcdGJyZWFrO1xuMTE0NDpcdFxuMTE0NTpcdFx0XHRjYXNlIElQVlNfT1BUX1BFX05BTUU6XG4xMTQ2Olx0XHRcdFx0aWYgKGlwX3ZzX3Byb2Nfc3RyKHAsIHBsZW4sXHUwMDI2cGVfbmFtZV9sZW4sIFx1MDAyNnBlX25hbWUsXG4xMTQ3Olx0XHRcdFx0XHRcdCAgIElQX1ZTX1BFTkFNRV9NQVhMRU4sIFx1MDAyNm9wdF9mbGFncyxcbjExNDg6XHRcdFx0XHRcdFx0ICAgSVBWU19PUFRfRl9QRV9OQU1FKSlcbjExNDk6XHRcdFx0XHRcdHJldHVybiAtNzA7XG4xMTUwOlx0XHRcdFx0YnJlYWs7XG4xMTUxOlx0XG4xMTUyOlx0XHRcdGRlZmF1bHQ6XG4xMTUzOlx0XHRcdFx0LyogUGFyYW0gZGF0YSBtYW5kYXRvcnkgPyAqL1xuMTE1NDpcdFx0XHRcdGlmICghKHB0eXBlIFx1MDAyNiBJUFZTX09QVF9GX1BBUkFNKSkge1xuMTE1NTpcdFx0XHRcdFx0SVBfVlNfREJHKDMsIFwmIzM0O0JBQ0tVUCwgVW5rbm93biBtYW5kYXRvcnkgcGFyYW0gJWQgZm91bmRcXG5cJiMzNDssXG4xMTU2Olx0XHRcdFx0XHRcdCAgcHR5cGUgXHUwMDI2IH5JUFZTX09QVF9GX1BBUkFNKTtcbjExNTc6XHRcdFx0XHRcdHJldGMgPSAyMDtcbjExNTg6XHRcdFx0XHRcdGdvdG8gb3V0O1xuMTE1OTpcdFx0XHRcdH1cbjExNjA6XHRcdFx0fVxuMTE2MTpcdFx0XHRwICYjNDM7PSBwbGVuOyAgLyogTmV4dCBvcHRpb24gKi9cbjExNjI6XHRcdH1cbjExNjM6XHRcbjExNjQ6XHRcdC8qIEdldCBmbGFncyBhbmQgTWFzayBvZmYgdW5zdXBwb3J0ZWQgKi9cbjExNjU6XHRcdGZsYWdzID0gbnRvaGwocy1cdTAwM2V2NC5mbGFncyk7XG4xMTY2Olx0XHRpZiAoIWlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3MoZmxhZ3MpKSB7XG4xMTY3Olx0XHRcdElQX1ZTX0RCRygzLCBcJiMzNDtCQUNLVVAsIEludmFsaWQgZmxhZ3MgMHglWFxcblwmIzM0OywgZmxhZ3MpO1xuMTE2ODpcdFx0XHRyZXRjID0gMjU7XG4xMTY5Olx0XHRcdGdvdG8gb3V0O1xuMTE3MDpcdFx0fVxuMTE3MTpcdFx0ZmxhZ3MgXHUwMDI2PSBJUF9WU19DT05OX0ZfQkFDS1VQX01BU0s7XG4xMTcyOlx0XHRmbGFncyB8PSBJUF9WU19DT05OX0ZfU1lOQztcbjExNzM6XHRcdHN0YXRlID0gbnRvaHMocy1cdTAwM2V2NC5zdGF0ZSk7XG4xMTc0Olx0XG4xMTc1Olx0XHRpZiAoIShmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX1RFTVBMQVRFKSkge1xuMTE3NjpcdFx0XHRwcCA9IGlwX3ZzX3Byb3RvX2dldChzLVx1MDAzZXY0LnByb3RvY29sKTtcbjExNzc6XHRcdFx0aWYgKCFwcCkge1xuMTE3ODpcdFx0XHRcdElQX1ZTX0RCRygzLFwmIzM0O0JBQ0tVUCwgVW5zdXBwb3J0ZWQgcHJvdG9jb2wgJXVcXG5cJiMzNDssXG4xMTc5Olx0XHRcdFx0XHRzLVx1MDAzZXY0LnByb3RvY29sKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA1MgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpczoKCioqRGlnZ2luZyBpbnRvIHRoZSBIaXN0b3J5KioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgcGFydGljdWxhciBjaGFuZ2UuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgZ2l0IGhpc3RvcnkuIEEgc2ltcGxlIGBnaXQgbG9nYCBvbiB0aGlzIGNvbW1pdCBzaG91bGQgYmUgbXkgZ28tdG8uIEkgd2FudCB0byBzZWUgd2hhdCB0aGUgY29tbWl0IG1lc3NhZ2Ugc2F5cyDigJMgd2FzIGl0IGEgYnVnIGZpeD8gV2FzIGl0IGludHJvZHVjaW5nIGEgbmV3IGZlYXR1cmU/IFdoYXQgd2FzIHRoZSBjb250ZXh0PyBUaGUgY29tbWl0IG1lc3NhZ2Ugc2hvdWxkIGdpdmUgbWUgdGhlIGNydWNpYWwgaGlnaC1sZXZlbCBvdmVydmlldy4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgYmUgYWJsZSB0byBxdWlja2x5IHVuZGVyc3RhbmQgdGhlIGltcGFjdCB0aGlzIGNoYW5nZSBoYWQsIGFuZCB3aHkgdGhlIGNoYW5nZSB3YXMgbWFkZSBpbiB0aGUgZmlyc3QgcGxhY2UuIEkmIzM5O20gcmVhbGx5IGhvcGluZyB0aGVyZSYjMzk7cyBhIGdvb2QgZGVzY3JpcHRpb24sIG1heWJlIGV2ZW4gYSBsaW5rIHRvIGEgdGlja2V0LiBUaGlzIGlzIHRoZSBmYXN0ZXN0IHdheSB0byBnZXQgdG8gdGhlIHJvb3Qgb2YgdGhlIHJlYXNvbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTg0MT1zdGF0aWMgdm9pZCBpcF92c19wcm9jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uX3BhcmFtICpwYXJhbSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTk1Mi0vKiBDaGVjayBmb3IgaW5jb21wYXRpYmxlIGZsYWdzICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjk1MzpzdGF0aWMgYm9vbCBpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzKHUzMiBmbGFncylcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtOTU0LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTk3MD1zdGF0aWMgdm9pZCBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGNvbnN0IGNoYXIgKmJ1ZmZlcixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEwMDItXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEwMDM6XHRcdGlmICghaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyhmbGFncykpIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTAwNC1cdFx0XHRJUF9WU19EQkcoMiwgXCYjMzQ7QkFDS1VQIHYwLCBJbnZhbGlkIGZsYWdzIDB4JVhcXG5cJiMzNDssIGZsYWdzKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTEwODc9c3RhdGljIGlubGluZSBpbnQgaXBfdnNfcHJvY19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIF9fdTggKnAsIF9fdTggKm1zZ19lbmQpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMTY1LVx0ZmxhZ3MgPSBudG9obChzLVx1MDAzZXY0LmZsYWdzKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTE2NjpcdGlmICghaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyhmbGFncykpIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTE2Ny1cdFx0SVBfVlNfREJHKDMsIFwmIzM0O0JBQ0tVUCwgSW52YWxpZCBmbGFncyAweCVYXFxuXCYjMzQ7LCBmbGFncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3NjQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBJUFZTIENvbm5lY3Rpb24gRmxhZ3MqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiBjZXJ0YWluIGNvbm5lY3Rpb24gZmxhZ3MuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGltcGxpY2F0aW9ucyBpZiBlaXRoZXIgYElQX1ZTX0NPTk5fRl9URU1QTEFURSB8IElQX1ZTX0NPTk5fRl9OT19DUE9SVGAgb3IgYElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUYCB3YXMgc2V0IGVhcmxpZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgaGlzdG9yeSBhbmQgc2VlIHdoYXQgY2hhbmdlcyBvciBidWdzIHByb21wdGVkIHRoZWlyIGludHJvZHVjdGlvbiBvciBtb2RpZmljYXRpb24uIEl0IHdvdWxkIGJlIGlkZWFsIGlmIEkgaGFkIGRpcmVjdCBhY2Nlc3MgdG8gYSBgZ2l0YCBjb21tYW5kIGZvciBhIHF1aWNrIGhpc3RvcnkgY2hlY2ssIGJ1dCB0aGF0JiMzOTtzIG5vdCBhdmFpbGFibGUuIE5vIHdvcnJpZXMsIEkgY2FuIHdvcmsgd2l0aCB0aGUgZGlmZi4gVGltZSB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBzb3VyY2UsIHNwZWNpZmljYWxseSBgbmV0L25ldGZpbHRlci9pcHZzYCBhbmQgZXhhbWluZSB0aGUgZGVmaW5pdGlvbnMgYW5kIHVzYWdlIG9mIGBJUF9WU19DT05OX0ZfTk9fQ1BPUlRgIGFuZCBgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVRgIHRvIGdldCB0aGUgd2hvbGUgcGljdHVyZS4gSSYjMzk7bSBzdXJlIEkmIzM5O2xsIGZpbmQgd2hhdCBJIG5lZWQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lQX1ZTX0NPTk5fRl9OT19DUE9SVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTM2Nz1fX2lwX3ZzX2Nvbm5faW5fZ2V0KGNvbnN0IHN0cnVjdCBpcF92c19jb25uX3BhcmFtICpwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMzk1LVx0XHRcdFx0ICAgICghcC1cdTAwM2VjcG9ydCBeXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjM5NjpcdFx0XHRcdCAgICAgKCEoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9OT19DUE9SVCkpKSBcdTAwMjZcdTAwMjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMzk3LVx0XHRcdFx0ICAgIHAtXHUwMDNlcHJvdG9jb2wgPT0gY3AtXHUwMDNlcHJvdG9jb2wpIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTY0Mz12b2lkIGlwX3ZzX2Nvbm5fZmlsbF9jcG9ydChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIF9fYmUxNiBjcG9ydClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTY4NC1cdFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2Y3AtXHUwMDNlbG9jayk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjY4NTpcdFx0XHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9OT19DUE9SVCBcdTAwMjZcdTAwMjYgYnlfbWUpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTY4Ni1cdFx0XHRcdGNwLVx1MDAzZWNwb3J0ID0gMDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTc1Ny1cdC8qIEZpbGwgY3BvcnQgb25jZSwgZXZlbiBpZiBtdWx0aXBsZSBwYWNrZXRzIHRyeSB0byBkbyBpdCAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo3NTg6XHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9OT19DUE9SVCBcdTAwMjZcdTAwMjYgKCFjcC1cdTAwM2VjcG9ydCB8fCBieV9tZSkpIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNzU5LVx0XHQvKiBJZiB3ZSByYWNlIHdpdGggcmVzaXppbmcgbWFrZSBzdXJlIGNwb3J0IGlzIHNldCBmb3IgZGlyIDEgKi9cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTc2NS1cdFx0XHRhdG9taWNfZGVjKFx1MDAyNmlwdnMtXHUwMDNlbm9fY3BvcnRfY29ubnNbYWZfaWRdKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6NzY2Olx0XHRcdGNwLVx1MDAzZWZsYWdzIFx1MDAyNj0gfklQX1ZTX0NPTk5fRl9OT19DUE9SVDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNzY3LVx0XHR9XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz04NzU9c3RydWN0IGlwX3ZzX3JodCAqaXBfdnNfY29ubl90YWJfYWxsb2Moc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBidWNrZXRzLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtODgyLVx0c2NvdW50cyA9IGNsYW1wKGJ1Y2tldHMgXHUwMDNlXHUwMDNlIDYsIDEsIDI1Nik7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjg4MzpcdC8qIGxvY2tzOiBiYXNlZCBvbiBwYXJhbGxlbCBJUF9WU19DT05OX0ZfTk9fQ1BPUlQgb3BlcmF0aW9ucyAmIzQzOyByZXNpemUgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtODg0LVx0bG9ja3MgPSBjbGFtcCg4LCAxLCBzY291bnRzKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTEzNDc9c3RhdGljIHZvaWQgaXBfdnNfY29ubl9leHBpcmUoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMzk0LVx0XHRpcF92c191bmJpbmRfZGVzdChjcCk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjEzOTU6XHRcdGlmICh1bmxpa2VseShjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX05PX0NQT1JUKSkge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMzk2LVx0XHRcdGludCBhZl9pZCA9IGlwX3ZzX2FmX2luZGV4KGNwLVx1MDAzZWFmKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTE0NDQ9aXBfdnNfY29ubl9uZXcoY29uc3Qgc3RydWN0IGlwX3ZzX2Nvbm5fcGFyYW0gKnAsIGludCBkZXN0X2FmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTUxNi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTUxNzpcdGlmICh1bmxpa2VseShmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX05PX0NQT1JUKSkge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xNTE4LVx0XHRpbnQgYWZfaWQgPSBpcF92c19hZl9pbmRleChjcC1cdTAwM2VhZik7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jPTI1ND1zdGF0aWMgaW50IGlwX3ZzX2Z0cF9vdXQoc3RydWN0IGlwX3ZzX2FwcCAqYXBwLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTMzNy1cdFx0bl9jcCA9IGlwX3ZzX2Nvbm5fbmV3KFx1MDAyNnAsIGNwLVx1MDAzZWFmLCBcdTAwMjZmcm9tLCBwb3J0LFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jOjMzODpcdFx0XHRcdCAgICAgIElQX1ZTX0NPTk5fRl9OT19DUE9SVCB8XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtMzM5LVx0XHRcdFx0ICAgICAgSVBfVlNfQ09OTl9GX05GQ1QsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz05NTM9c3RhdGljIGJvb2wgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyh1MzIgZmxhZ3MpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05NTctXHQgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6OTU4Olx0aWYgKGZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfTk9fQ1BPUlQpIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtOTU5LVx0XHRpZiAoZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9URU1QTEFURSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jPTc4Nz1pcF92c19uYXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYy03OTMtXHQvKiBjaGVjayBpZiBpdCBpcyBhIGNvbm5lY3Rpb24gb2Ygbm8tY2xpZW50LXBvcnQgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM6Nzk0Olx0aWYgKHVubGlrZWx5KGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfTk9fQ1BPUlQpKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jLTc5NS1cdFx0X19iZTE2IF9wdCwgKnA7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYz04NzE9aXBfdnNfbmF0X3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMtODc3LVx0LyogY2hlY2sgaWYgaXQgaXMgYSBjb25uZWN0aW9uIG9mIG5vLWNsaWVudC1wb3J0ICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jOjg3ODpcdGlmICh1bmxpa2VseShjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX05PX0NQT1JUIFx1MDAyNlx1MDAyNiAhaXB2c2gtXHUwMDNlZnJhZ29mZnMpKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jLTg3OS1cdFx0X19iZTE2IF9wdCwgKnA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4NjQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbHJlYWR5IGRlZXAgaW4gdGhlIHdlZWRzIG9mIG5ldHdvcmsgcGVyZm9ybWFuY2UgYW5hbHlzaXM6CgoqKkFuYWx5emluZyBOZXR3b3JrIFRyYWZmaWM6IFRoZSBJbXBvcnRhbmNlIG9mIFNpbmdsZS1QYWNrZXQgT2JzZXJ2YXRpb25zKioKCkFscmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgbmV0d29yayBkYXRhIGFuZCBpbW1lZGlhdGVseSBteSBicmFpbiBob25lcyBpbiBvbiBzb21ldGhpbmcgaW50ZXJlc3Rpbmc6IGBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVGAuIFRoaXMgaXMga2V5LiBJdCYjMzk7cyBhIGZsYWcsIGFuIGluZGljYXRvciwgYSBkYXRhcG9pbnQgdGhhdCYjMzk7cyBnb2luZyB0byBiZSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBlbnRpcmUgcGljdHVyZS4gSSBpbW1lZGlhdGVseSByZWNvZ25pemUgdGhpcyBtZWFucyB0aGF0IHRoZSBjb25uZWN0aW9uIGlzIHJlbGF0ZWQgdG8gdGhlIHZlcnkgZmlyc3QgcGFja2V0IG9mIGEgc3BlY2lmaWMgZGF0YSBzdHJlYW0gb3IgY29udmVyc2F0aW9uLCBpbiBvdGhlciB3b3JkcywgdGhhdCB0aGVyZSBpcyBvbmx5IG9uZSBwYWNrZXQgaW52b2x2ZWQuIEl0JiMzOTtzIG5vdCBqdXN0IGFub3RoZXIgZGF0YSBwb2ludDsgaXQmIzM5O3MgYSB2aXRhbCBwaWVjZSBvZiB0aGUgcHV6emxlLiBUaGlzIGhlbHBzIG1lIG5hcnJvdyBkb3duIHBvc3NpYmxlIGlzc3VlcywgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBvciB1bmlxdWUgYmVoYXZpb3IuIFRoaXMgc2luZ2xlIG9ic2VydmF0aW9uIGlzIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgaW4gb3JkZXIgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJUF9WU19DT05OX0ZfT05FX1BBQ0tFVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTI2MT1zdGF0aWMgaW5saW5lIGludCBpcF92c19jb25uX2hhc2goc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMjcwLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoyNzE6XHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0yNzItXHRcdHJldHVybiAwO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9MzE2PXN0YXRpYyBpbmxpbmUgYm9vbCBpcF92c19jb25uX3VubGluayhzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0zMjQtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjMyNTpcdGlmIChjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTMyNi1cdFx0cmV0dXJuIHJlZmNvdW50X2RlY19pZl9vbmUoXHUwMDI2Y3AtXHUwMDNlcmVmY250KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTYyMD1zdGF0aWMgdm9pZCBfX2lwX3ZzX2Nvbm5fcHV0X3RpbWVyKHN0cnVjdCBpcF92c19jb25uICpjcClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNjIxLXtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6NjIyOlx0dW5zaWduZWQgbG9uZyB0ID0gKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVCkgP1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy02MjMtXHRcdDAgOiBjcC1cdTAwM2V0aW1lb3V0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9NjI5PXZvaWQgaXBfdnNfY29ubl9wdXQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy02MzAte1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo2MzE6XHRpZiAoKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVCkgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTYzMi1cdCAgICAocmVmY291bnRfcmVhZChcdTAwMjZjcC1cdTAwM2VyZWZjbnQpID09IDEpIFx1MDAyNlx1MDAyNlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9MTA4OT1pcF92c19iaW5kX2Rlc3Qoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTExMDItXHRpZiAoY3AtXHUwMDNlcHJvdG9jb2wgIT0gSVBQUk9UT19VRFApXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjExMDM6XHRcdGNvbm5fZmxhZ3MgXHUwMDI2PSB+SVBfVlNfQ09OTl9GX09ORV9QQUNLRVQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTExMDQtXHRmbGFncyA9IGNwLVx1MDAzZWZsYWdzO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTEwNy1cdFx0LyogU3luY2VkIGNvbm5zIGFyZSBoYXNoZWQsIHNvIHRoZXkgY2FuIG5vdCBnZXQgdGhpcyBmbGFnICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjExMDg6XHRcdGNvbm5fZmxhZ3MgXHUwMDI2PSB+SVBfVlNfQ09OTl9GX09ORV9QQUNLRVQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTExMDktXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz0xMzQ3PXN0YXRpYyB2b2lkIGlwX3ZzX2Nvbm5fZXhwaXJlKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTM4MS1cdFx0aWYgKChjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX05GQ1QpIFx1MDAyNlx1MDAyNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxMzgyOlx0XHQgICAgIShjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEzODMtXHRcdFx0LyogRG8gbm90IGFjY2VzcyBjb25udHJhY2tzIGR1cmluZyBzdWJzeXMgY2xlYW51cFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTM5OS1cdFx0fVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxNDAwOlx0XHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xNDAxLVx0XHRcdGlwX3ZzX2Nvbm5fcmN1X2ZyZWUoXHUwMDI2Y3AtXHUwMDNlcmN1X2hlYWQpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9MTQ0ND1pcF92c19jb25uX25ldyhjb25zdCBzdHJ1Y3QgaXBfdnNfY29ubl9wYXJhbSAqcCwgaW50IGRlc3RfYWYsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xNTQ3LVx0ICogU29tZXRpbWVzIGtlZXBpbmcgY29ubnRyYWNrIGNhbiBiZSB1c2VmdWwgZm9yXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjE1NDg6XHQgKiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVCB0b28uXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTE1NDktXHQgKi9cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTQzMD1pcF92c19zY2hlZF9wZXJzaXN0KHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy01NjgtXHRcdCBcdTAwMjZcdTAwMjYgaXBoLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVURQKSA/XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjU2OTpcdFx0SVBfVlNfQ09OTl9GX09ORV9QQUNLRVQgOiAwO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy01NzAtXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz02MTg9aXBfdnNfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2Yywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTcxNS1cdFx0IFx1MDAyNlx1MDAyNiBpcGgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19VRFApID9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6NzE2Olx0XHRJUF9WU19DT05OX0ZfT05FX1BBQ0tFVCA6IDA7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTcxNy1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTc2Mj1pbnQgaXBfdnNfbGVhdmUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2Yywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTc4My1cdFx0XHRcdCAgICAgIGlwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1VEUCkgP1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzo3ODQ6XHRcdFx0XHQgICAgICBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVCA6IDA7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTc4NS1cdFx0dW5pb24gbmZfaW5ldF9hZGRyIGRhZGRyID0geyAuYWxsID0geyAwLCAwLCAwLCAwIH0gfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTgxMC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6ODExOlx0XHRpZiAoKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVCkgXHUwMDI2XHUwMDI2IGNwLVx1MDAzZWNvbnRyb2wpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTgxMi1cdFx0XHRhdG9taWNfaW5jKFx1MDAyNmNwLVx1MDAzZWNvbnRyb2wtXHUwMDNlaW5fcGt0cyk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0xMzA5PXN0cnVjdCBpcF92c19jb25uICppcF92c19uZXdfY29ubl9vdXQoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2Yyxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTEzNjUtXHRmbGFncyA9ICgoc3ZjLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19TVkNfRl9PTkVQQUNLRVQpIFx1MDAyNlx1MDAyNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoxMzY2Olx0XHQgaXBoLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVURQKSA/IElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUIDogMDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTM2Ny1cdC8qIGNyZWF0ZSBjb25uZWN0aW9uICovXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0yMDk2PWlwX3ZzX2luX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjI2OS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MjI3MDpcdGlmIChjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIyNzEtXHRcdHBrdHMgPSBzeXNjdGxfc3luY190aHJlc2hvbGQoaXB2cyk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMjc2LVx0XHRpcF92c19zeW5jX2Nvbm4oaXB2cywgY3AsIHBrdHMpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMjc3Olx0ZWxzZSBpZiAoKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVCkgXHUwMDI2XHUwMDI2IGNwLVx1MDAzZWNvbnRyb2wpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIyNzgtXHRcdC8qIGluY3JlbWVudCBpcyBkb25lIGluc2lkZSBpcF92c19zeW5jX2Nvbm4gdG9vICovXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX25mY3QuYz03MD1pcF92c191cGRhdGVfY29ubnRyYWNrKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IG91dGluKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19uZmN0LmMtODQtXHQvKiBOZXZlciBhbHRlciBjb25udHJhY2sgZm9yIE9QUyBjb25ucyAobm8gcmVwbHkgaXMgZXhwZWN0ZWQpICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbmZjdC5jOjg1Olx0aWYgKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19uZmN0LmMtODYtXHRcdHJldHVybjtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTUzOT1zdGF0aWMgdm9pZCBpcF92c19zeW5jX2Nvbm5fdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU1MS1cdC8qIERvIG5vdCBzeW5jIE9ORSBQQUNLRVQgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NTUyOlx0aWYgKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTUzLVx0XHRyZXR1cm47XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz02Mjk9dm9pZCBpcF92c19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02NDQtXHQvKiBEbyBub3Qgc3luYyBPTkUgUEFDS0VUICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjY0NTpcdGlmIChjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY0Ni1cdFx0Z290byBjb250cm9sO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9OTUzPXN0YXRpYyBib29sIGlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3ModTMyIGZsYWdzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtOTYxLVx0fVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo5NjI6XHRpZiAoZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05NjMtXHRcdHJldHVybiBmYWxzZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5NjQKCQkJCQkJCW91dHB1dDogMjQ1CgkJCQkJCQl0aG91Z2h0czogMTUxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBJUFZTIFN5bmNocm9uaXphdGlvbiBEYWVtb24gRmxhZyBWYWxpZGF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlJiMzOTtyZSBsb29raW5nIGF0IGEgcGF0Y2ggaW4gYGlwX3ZzX3N5bmMuY2Agd2hpY2gsIGZyb20gd2hhdCBJIGdhdGhlciwgY29uY2VybnMgaXRzZWxmIHdpdGggdmFsaWRhdGluZyBjb25uZWN0aW9uIGZsYWdzIHdpdGhpbiB0aGUgSVBWUyBzeW5jaHJvbml6YXRpb24gZGFlbW9uLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2UgdGhlIGNvZGUgaXMgcmVzcG9uc2libGUgZm9yIHJlY2VpdmluZyBzeW5jIG1lc3NhZ2VzLCBsaWtlbHkgVURQIG11bHRpY2FzdCwgZnJvbSBvdGhlciBJUFZTIGRpcmVjdG9ycy4gVGhlc2UgbWVzc2FnZXMgYXJlIHBhcnNlZCB1c2luZyBgaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwYCBhbmQgYGlwX3ZzX3Byb2Nfc3luY19jb25uYCB3aGljaCBpbiB0dXJuIGNhbGwgdGhlIG5ldyBgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFnc2AgZnVuY3Rpb24uCgpUaGUgY29yZSBvZiB0aGUgcGF0Y2ggaXMgdGhhdCBgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFnc2AgcGVyZm9ybXMgdGhlc2Uga2V5IGNoZWNrczogaXQmIzM5O3MgbG9va2luZyBmb3IgdGhlIHByZXNlbmNlIG9mIGBJUF9WU19DT05OX0ZfTk9fQ1BPUlRgIGZsYWcgY29tYmluZWQgd2l0aCBgSVBfVlNfQ09OTl9GX1RFTVBMQVRFYCwgb3IganVzdCBgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVRgLiBJZiBlaXRoZXIgb2YgdGhlc2UgY29tYmluYXRpb25zIGV4aXN0LCB0aGUgcGFja2V0IGlzIHJlamVjdGVkLiBUaGUgZmxhZ3MgYXJlIGRlcml2ZWQgZnJvbSB0aGUgbmV0d29yayBidWZmZXIuCgpOb3csIGFjY29yZGluZyB0byB0aGUgZ3VpZGVsaW5lcywgdGhlIHVzZSBvZiBLTVNBTiBpcyByZXNlcnZlZCBmb3IgY2FzZXMgaW52b2x2aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBTbyBsZXQmIzM5O3Mgc3lzdGVtYXRpY2FsbHkgYW5hbHl6ZToKCjEuICAqKlVuaW5pdGlhbGl6ZWQgTWVtb3J5OioqIFRoZSBmbGFncyBjb21lIGRpcmVjdGx5IGZyb20gbmV0d29yayBkYXRhLCB0aGV5IGFyZW4mIzM5O3QgaW5pdGlhbGl6ZWQgbG9jYWxseS4gSG93ZXZlciwgdGhlIGNvZGUgdmFsaWRhdGVzIGFuZCAqcmVqZWN0cyogcGFja2V0cyBjb250YWluaW5nIHRoZSAmIzM0O2ZvcmJpZGRlbiYjMzQ7IGZsYWcgY29tYmluYXRpb25zLiBObyB1bmluaXRpYWxpemVkIGRhdGEgZXZlciBtYWtlcyBpdCBwYXN0IHRoZSBpbnB1dCB2YWxpZGF0aW9uIHRvIGJlIHVzZWQgaW4gY2FsY3VsYXRpb25zLgoyLiAgKipVc2VyIFNwYWNlIEV4cG9zdXJlOioqIE5vIGtlcm5lbCBkYXRhIGlzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSBkaXJlY3RseSBiZWNhdXNlIHRoZSBwYXRjaCBwZXJmb3JtcyBpbnB1dCB2YWxpZGF0aW9uLCBhbmQgZG9lcyBub3QgYWx0ZXIgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UuCjMuICAqKkNvbmRpdGlvbmFsIExvZ2ljICZhbXA7IFVuaW5pdGlhbGl6ZWQgVmFyaWFibGVzOioqIFRoZSBsb2dpYyBpcyBzdHJhaWdodGZvcndhcmQgLSB2YWxpZGF0ZSB0aGUgZmxhZ3MsIGFuZCBwcm9jZWVkIG9yIHJlamVjdC4gVGhlIGlucHV0IGZsYWdzIHRoZW1zZWx2ZXMgYXJlIG5vdCB1bmluaXRpYWxpemVkLCB0aGV5IGNvbWUgZnJvbSB0aGUgbmV0d29yay4KNC4gICoqRGF0YSBTdHJ1Y3R1cmUgQWxsb2NhdGlvbiAmYW1wOyBJbml0aWFsaXphdGlvbjoqKiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBkYXRhIHN0cnVjdHVyZXMsIHNvIHdlIGNhbiBkaXNyZWdhcmQgdGhpcyBhc3BlY3QuCjUuICAqKkJvdW5kcyBDaGVja3MgJmFtcDsgTGVuZ3RoczoqKiBBY3R1YWxseSwgdGhlIHBhdGNoICppbXByb3ZlcyogaW5wdXQgdmFsaWRhdGlvbiBvZiBmbGFncyBjb21pbmcgZnJvbSB0aGUgbmV0d29yaywgbWFraW5nIGl0ICptb3JlKiBkaWZmaWN1bHQgdG8gY2F1c2UgYW55IG91dC1vZi1ib3VuZHMgcmVhZHMgb3Igd3JpdGVzLgoKVGhlIG9yaWdpbmFsIGJ1ZywgaWYgb25lIGNhbiBjYWxsIGl0IHRoYXQsIHdhcyBhIHBvdGVudGlhbCBmb3IgaW5jb25zaXN0ZW50IHN0YXRlLCByZWZjb3VudCBpc3N1ZXMsIG9yIGludmFsaWQgaGFuZGxpbmcgcmVzdWx0aW5nIGZyb20gaW5jb21wYXRpYmxlIGNvbWJpbmF0aW9ucyBvZiBmbGFncyBpbiB0aGUgbmV0d29yayBtZXNzYWdlcy4gVGhlc2UgY291bGQgcG9zc2libHkgbGVhZCB0byBjcmFzaGVzLCBwYW5pY3MsIE5VTEwgZGVyZWZlcmVuY2VzIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMuIEhvd2V2ZXIsIG5vbmUgb2YgdGhhdCBpcyBkaXJlY3RseSByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBXZSBjYW4gYXNzdW1lIHRoYXQgaWYgdGhlc2UgaW52YWxpZCBmbGFnIGNvbWJpbmF0aW9ucyBjcmVhdGUgaXNzdWVzLCB0aGUgKnN0YW5kYXJkKiBidWcgZGV0ZWN0b3JzIChLQVNBTiwgTE9DS0RFUCwgcmVmY291bnQgY2hlY2tzKSB3b3VsZCBjYXRjaCB0aGVzZS4KClRoZXJlZm9yZSwgdGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEJhc2VkIG9uIHRoZSBndWlkZWxpbmVzLCAqKk5lZWRzS01TQU4gc2hvdWxkIGJlIGZhbHNlKiouCgpgYGAKLSBOZWVkc0tNU0FOOiBmYWxzZQotIEtNU0FOUmVhc29uaW5nOgpUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGZvciBpbmNvbXBhdGlibGUgY29ubmVjdGlvbiBmbGFncyAoYElQX1ZTX0NPTk5fRl9OT19DUE9SVGAgd2l0aCBgSVBfVlNfQ09OTl9GX1RFTVBMQVRFYCwgYW5kIGBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVGApIGluIHRoZSBJUFZTIHN5bmNocm9uaXphdGlvbiBtZXNzYWdlIHByb2Nlc3NpbmcgaGFuZGxlcnMgKGBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjBgIGFuZCBgaXBfdnNfcHJvY19zeW5jX2Nvbm5gKS4KVGhlIGZsYWdzIGFyZSBwYXJzZWQgZGlyZWN0bHkgZnJvbSBpbmNvbWluZyBuZXR3b3JrIHBhY2tldCBidWZmZXJzIGFuZCB2YWxpZGF0ZWQgYmVmb3JlIGZ1cnRoZXIgY29ubmVjdGlvbiBzdGF0ZSBwcm9jZXNzaW5nLiBUaGUgY2hhbmdlcyBvbmx5IGludHJvZHVjZSBpbnB1dCB2YWxpZGF0aW9uIGFuZCBlYXJseSBleGl0cywgd2l0aG91dCBhbGxvY2F0aW5nIG5ldyBtZW1vcnksIGFsdGVyaW5nIGJ1ZmZlciBzaXplcy9ib3VuZGFyaWVzLCBsZWF2aW5nIGZpZWxkcyB1bmluaXRpYWxpemVkLCBvciBleHBvc2luZyBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLiBBbnkgYnVncyByZXN1bHRpbmcgZnJvbSBtYWxmb3JtZWQgY29ubmVjdGlvbiBzdGF0ZXMgb3IgZmxhZ3MgKHN1Y2ggYXMgcmVmY291bnQgaXNzdWVzIG9yIHVzZS1hZnRlci1mcmVlKSBmYWxsIHVuZGVyIHRoZSBwdXJ2aWV3IG9mIHN0YW5kYXJkIGRldGVjdG9ycyBsaWtlIEtBU0FOIGFuZCByZWZjb3VudCBjaGVja2luZy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3IgaW5mb3JtYXRpb24gbGVhaywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuCmBgYApgYGAKc2V0LXJlc3VsdHMKYGBgCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZmxhZyB2YWxpZGF0aW9uIChgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFnc2ApIGluIHRoZSBJUFZTIHN5bmNocm9uaXphdGlvbiBtZXNzYWdlIGhhbmRsaW5nIGZ1bmN0aW9ucyAoYGlwX3ZzX3Byb2Nlc3NfbWVzc2FnZV92MGAgYW5kIGBpcF92c19wcm9jX3N5bmNfY29ubmApIHRvIHJlamVjdCBpbnZhbGlkIGZsYWcgY29tYmluYXRpb25zIChlLmcuLCBgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVRgIG9yIGBJUF9WU19DT05OX0ZfTk9fQ1BPUlRgIGNvbWJpbmVkIHdpdGggYElQX1ZTX0NPTk5fRl9URU1QTEFURWApLiBUaGUgZmxhZ3MgdmFyaWFibGUgaXMgZGlyZWN0bHkgaW5pdGlhbGl6ZWQgZnJvbSByZWNlaXZlZCBuZXR3b3JrIHBhY2tldCBkYXRhIChgbnRvaHNgIC8gYG50b2hsYCksIGFuZCB0aGUgdmFsaWRhdGlvbiBsb2dpYyBvbmx5IGFkZHMgZWFybHkgcmVqZWN0aW9uIG9mIGludmFsaWQgc3luYyBtZXNzYWdlcy4gTm8gaGVhcC9zdGFjayBtZW1vcnkgYWxsb2NhdGlvbnMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQsIG5vIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb25zIG9yIGNvcHlpbmcgdG8gdXNlciBzcGFjZSBhcmUgYWx0ZXJlZCwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBwYWRkaW5nIGFyZSByZWFkIG9yIGV4cG9zZWQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHN0ZW1taW5nIGZyb20gaW5jb21wYXRpYmxlIGZsYWdzIChzdWNoIGFzIHN0YXRlIGluY29uc2lzdGVuY2llcywgcmVmY291bnQgZXJyb3JzLCBvciB1c2UtYWZ0ZXItZnJlZSkgYXJlIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgS0FTQU4vcmVmY291bnQgY2hlY2tzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmbGFnIHZhbGlkYXRpb24gKGBpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzYCkgaW4gdGhlIElQVlMgc3luY2hyb25pemF0aW9uIG1lc3NhZ2UgaGFuZGxpbmcgZnVuY3Rpb25zIChgaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwYCBhbmQgYGlwX3ZzX3Byb2Nfc3luY19jb25uYCkgdG8gcmVqZWN0IGludmFsaWQgZmxhZyBjb21iaW5hdGlvbnMgKGUuZy4sIGBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVGAgb3IgYElQX1ZTX0NPTk5fRl9OT19DUE9SVGAgY29tYmluZWQgd2l0aCBgSVBfVlNfQ09OTl9GX1RFTVBMQVRFYCkuIFRoZSBmbGFncyB2YXJpYWJsZSBpcyBkaXJlY3RseSBpbml0aWFsaXplZCBmcm9tIHJlY2VpdmVkIG5ldHdvcmsgcGFja2V0IGRhdGEgKGBudG9oc2AgLyBgbnRvaGxgKSwgYW5kIHRoZSB2YWxpZGF0aW9uIGxvZ2ljIG9ubHkgYWRkcyBlYXJseSByZWplY3Rpb24gb2YgaW52YWxpZCBzeW5jIG1lc3NhZ2VzLiBObyBoZWFwL3N0YWNrIG1lbW9yeSBhbGxvY2F0aW9ucyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZCwgbm8gYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMgb3IgY29weWluZyB0byB1c2VyIHNwYWNlIGFyZSBhbHRlcmVkLCBhbmQgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IHBhZGRpbmcgYXJlIHJlYWQgb3IgZXhwb3NlZC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSBpbmNvbXBhdGlibGUgZmxhZ3MgKHN1Y2ggYXMgc3RhdGUgaW5jb25zaXN0ZW5jaWVzLCByZWZjb3VudCBlcnJvcnMsIG9yIHVzZS1hZnRlci1mcmVlKSBhcmUgZGV0ZWN0YWJsZSBieSBzdGFuZGFyZCBLQVNBTi9yZWZjb3VudCBjaGVja3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjQ2OjM3LjQ0MDQwOTg4NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzAyMzI0Njg1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9WU1wiLFxuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfdnNfc3luY192YWxpZGF0ZV9mbGFnc1wiLFxuICAgIFwiaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwXCIsXG4gICAgXCJpcF92c19wcm9jX3N5bmNfY29ublwiLFxuICAgIFwiaXBfdnNfcHJvY2Vzc19tZXNzYWdlXCIsXG4gICAgXCJzeW5jX3RocmVhZF9iYWNrdXBcIixcbiAgICBcInN0YXJ0X3N5bmNfdGhyZWFkXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGZsYWcgdmFsaWRhdGlvbiAoYGlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3NgKSBpbiB0aGUgSVBWUyBzeW5jaHJvbml6YXRpb24gbWVzc2FnZSBoYW5kbGluZyBmdW5jdGlvbnMgKGBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjBgIGFuZCBgaXBfdnNfcHJvY19zeW5jX2Nvbm5gKSB0byByZWplY3QgaW52YWxpZCBmbGFnIGNvbWJpbmF0aW9ucyAoZS5nLiwgYElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUYCBvciBgSVBfVlNfQ09OTl9GX05PX0NQT1JUYCBjb21iaW5lZCB3aXRoIGBJUF9WU19DT05OX0ZfVEVNUExBVEVgKS4gVGhlIGZsYWdzIHZhcmlhYmxlIGlzIGRpcmVjdGx5IGluaXRpYWxpemVkIGZyb20gcmVjZWl2ZWQgbmV0d29yayBwYWNrZXQgZGF0YSAoYG50b2hzYCAvIGBudG9obGApLCBhbmQgdGhlIHZhbGlkYXRpb24gbG9naWMgb25seSBhZGRzIGVhcmx5IHJlamVjdGlvbiBvZiBpbnZhbGlkIHN5bmMgbWVzc2FnZXMuIE5vIGhlYXAvc3RhY2sgbWVtb3J5IGFsbG9jYXRpb25zIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLCBubyBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucyBvciBjb3B5aW5nIHRvIHVzZXIgc3BhY2UgYXJlIGFsdGVyZWQsIGFuZCBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgcGFkZGluZyBhcmUgcmVhZCBvciBleHBvc2VkLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBzdGVtbWluZyBmcm9tIGluY29tcGF0aWJsZSBmbGFncyAoc3VjaCBhcyBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMsIHJlZmNvdW50IGVycm9ycywgb3IgdXNlLWFmdGVyLWZyZWUpIGFyZSBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIEtBU0FOL3JlZmNvdW50IGNoZWNrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGZsYWcgdmFsaWRhdGlvbiAoaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncykgYW5kIHByb3BlciBtYXNraW5nIHdoZW4gcGFyc2luZyBpbmNvbWluZyBJUFZTIHN5bmMgbWVzc2FnZXMgaW4gdGhlIGJhY2t1cCBkYWVtb24sIHJlamVjdGluZyBpbmNvbXBhdGlibGUgZmxhZ3Mgc3VjaCBhcyBJUF9WU19DT05OX0ZfTk9fQ1BPUlQgd2l0aCBJUF9WU19DT05OX0ZfVEVNUExBVEUgb3IgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQgaW4gYm90aCB2MCBhbmQgdjEgbWVzc2FnZSBmb3JtYXRzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JrIHByb3RvY29sIHByb2Nlc3NpbmcgaW4gbmV0ZmlsdGVyL0lQVlMgYW5kIHdhcnJhbnRzIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjQ2OjM3LjQ0MDQxNTAyNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk2Nzk4NjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNmY3MjY5OTFlNmFmNjk3MTMxMWEwYTAwNjkyYjBhMWJiMWMyMzkzZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCAxMSAxODo0NjozNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY1xcbmluZGV4IDUzODNhZWFmYjBhZWQuLjY5ZGMyODE1M2VjMTIgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcXG5AQCAtOTQ5LDYgKzk0OSwyMSBAQCBzdGF0aWMgdm9pZCBpcF92c19wcm9jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uX3BhcmFtICpwYVxcbiBcXHRpcF92c19jb25uX3B1dChjcCk7XFxuIH1cXG4gXFxuKy8qIENoZWNrIGZvciBpbmNvbXBhdGlibGUgZmxhZ3MgKi9cXG4rc3RhdGljIGJvb2wgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyh1MzIgZmxhZ3MpXFxuK3tcXG4rXFx0LyogV2UgZG8gbm90IGV4cGVjdCBOT19DUE9SVCwgZXNwZWNpYWxseSB0byBhbGxvdyBsb29rdXBzXFxuK1xcdCAqIHRvIGhpdCB0ZW1wbGF0ZXNcXG4rXFx0ICovXFxuK1xcdGlmIChmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9OT19DUE9SVCkge1xcbitcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfVEVNUExBVEUpXFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbitcXHRpZiAoZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVClcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4gLypcXG4gICogIFByb2Nlc3MgcmVjZWl2ZWQgbXVsdGljYXN0IG1lc3NhZ2UgZm9yIFZlcnNpb24gMFxcbiAgKi9cXG5AQCAtOTcyLDggKzk4Nyw3IEBAIHN0YXRpYyB2b2lkIGlwX3ZzX3Byb2Nlc3NfbWVzc2FnZV92MChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgY29uc3QgY2hhciAqYnVmZmVyXFxuIFxcdFxcdFxcdHJldHVybjtcXG4gXFx0XFx0fVxcbiBcXHRcXHRzID0gKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAgKikgcDtcXG4tXFx0XFx0ZmxhZ3MgPSBudG9ocyhzLVxcdTAwM2VmbGFncykgfCBJUF9WU19DT05OX0ZfU1lOQztcXG4tXFx0XFx0ZmxhZ3MgXFx1MDAyNj0gfklQX1ZTX0NPTk5fRl9IQVNIRUQ7XFxuK1xcdFxcdGZsYWdzID0gbnRvaHMocy1cXHUwMDNlZmxhZ3MpO1xcbiBcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0spIHtcXG4gXFx0XFx0XFx0b3B0ID0gKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqKVxcdTAwMjZzWzFdO1xcbiBcXHRcXHRcXHRwICs9IEZVTExfQ09OTl9TSVpFO1xcbkBAIC05ODYsNiArMTAwMCwxMyBAQCBzdGF0aWMgdm9pZCBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGNvbnN0IGNoYXIgKmJ1ZmZlclxcbiBcXHRcXHRcXHRwICs9IFNJTVBMRV9DT05OX1NJWkU7XFxuIFxcdFxcdH1cXG4gXFxuK1xcdFxcdGlmICghaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyhmbGFncykpIHtcXG4rXFx0XFx0XFx0SVBfVlNfREJHKDIsIFxcXCJCQUNLVVAgdjAsIEludmFsaWQgZmxhZ3MgMHglWFxcXFxuXFxcIiwgZmxhZ3MpO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXHRcXHRmbGFncyBcXHUwMDI2PSBJUF9WU19DT05OX0ZfQkFDS1VQX01BU0s7XFxuK1xcdFxcdGZsYWdzIHw9IElQX1ZTX0NPTk5fRl9TWU5DO1xcbitcXG4gXFx0XFx0c3RhdGUgPSBudG9ocyhzLVxcdTAwM2VzdGF0ZSk7XFxuIFxcdFxcdGlmICghKGZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX1RFTVBMQVRFKSkge1xcbiBcXHRcXHRcXHRwcCA9IGlwX3ZzX3Byb3RvX2dldChzLVxcdTAwM2Vwcm90b2NvbCk7XFxuQEAgLTExNDEsNyArMTE2MiwxMyBAQCBzdGF0aWMgaW5saW5lIGludCBpcF92c19wcm9jX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgX191OCAqcCwgX191OCAqbVxcbiBcXHR9XFxuIFxcbiBcXHQvKiBHZXQgZmxhZ3MgYW5kIE1hc2sgb2ZmIHVuc3VwcG9ydGVkICovXFxuLVxcdGZsYWdzICA9IG50b2hsKHMtXFx1MDAzZXY0LmZsYWdzKSBcXHUwMDI2IElQX1ZTX0NPTk5fRl9CQUNLVVBfTUFTSztcXG4rXFx0ZmxhZ3MgPSBudG9obChzLVxcdTAwM2V2NC5mbGFncyk7XFxuK1xcdGlmICghaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyhmbGFncykpIHtcXG4rXFx0XFx0SVBfVlNfREJHKDMsIFxcXCJCQUNLVVAsIEludmFsaWQgZmxhZ3MgMHglWFxcXFxuXFxcIiwgZmxhZ3MpO1xcbitcXHRcXHRyZXRjID0gMjU7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcdGZsYWdzIFxcdTAwMjY9IElQX1ZTX0NPTk5fRl9CQUNLVVBfTUFTSztcXG4gXFx0ZmxhZ3MgfD0gSVBfVlNfQ09OTl9GX1NZTkM7XFxuIFxcdHN0YXRlID0gbnRvaHMocy1cXHUwMDNldjQuc3RhdGUpO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6NDY6MzcuOTM3ODc3ODY0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo4OTg1MzMxMDk0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9WU1wiLFxuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfdnNfc3luY192YWxpZGF0ZV9mbGFnc1wiLFxuICAgIFwiaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwXCIsXG4gICAgXCJpcF92c19wcm9jX3N5bmNfY29ublwiLFxuICAgIFwiaXBfdnNfcHJvY2Vzc19tZXNzYWdlXCIsXG4gICAgXCJzeW5jX3RocmVhZF9iYWNrdXBcIixcbiAgICBcInN0YXJ0X3N5bmNfdGhyZWFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmbGFnIHZhbGlkYXRpb24gKGlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3MpIGFuZCBwcm9wZXIgbWFza2luZyB3aGVuIHBhcnNpbmcgaW5jb21pbmcgSVBWUyBzeW5jIG1lc3NhZ2VzIGluIHRoZSBiYWNrdXAgZGFlbW9uLCByZWplY3RpbmcgaW5jb21wYXRpYmxlIGZsYWdzIHN1Y2ggYXMgSVBfVlNfQ09OTl9GX05PX0NQT1JUIHdpdGggSVBfVlNfQ09OTl9GX1RFTVBMQVRFIG9yIElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUIGluIGJvdGggdjAgYW5kIHYxIG1lc3NhZ2UgZm9ybWF0cy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0d29yayBwcm90b2NvbCBwcm9jZXNzaW5nIGluIG5ldGZpbHRlci9JUFZTIGFuZCB3YXJyYW50cyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZmNzI2OTkxZTZhZjY5NzEzMTFhMGEwMDY5MmIwYTFiYjFjMjM5M2RcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAxODo0NjozNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jXG5pbmRleCA1MzgzYWVhZmIwYWVkLi42OWRjMjgxNTNlYzEyIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY1xuQEAgLTk0OSw2ICs5NDksMjEgQEAgc3RhdGljIHZvaWQgaXBfdnNfcHJvY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubl9wYXJhbSAqcGFcbiBcdGlwX3ZzX2Nvbm5fcHV0KGNwKTtcbiB9XG4gXG4rLyogQ2hlY2sgZm9yIGluY29tcGF0aWJsZSBmbGFncyAqL1xuK3N0YXRpYyBib29sIGlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3ModTMyIGZsYWdzKVxuK3tcbitcdC8qIFdlIGRvIG5vdCBleHBlY3QgTk9fQ1BPUlQsIGVzcGVjaWFsbHkgdG8gYWxsb3cgbG9va3Vwc1xuK1x0ICogdG8gaGl0IHRlbXBsYXRlc1xuK1x0ICovXG4rXHRpZiAoZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9OT19DUE9SVCkge1xuK1x0XHRpZiAoZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9URU1QTEFURSlcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4rXHRpZiAoZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4gLypcbiAgKiAgUHJvY2VzcyByZWNlaXZlZCBtdWx0aWNhc3QgbWVzc2FnZSBmb3IgVmVyc2lvbiAwXG4gICovXG5AQCAtOTcyLDggKzk4Nyw3IEBAIHN0YXRpYyB2b2lkIGlwX3ZzX3Byb2Nlc3NfbWVzc2FnZV92MChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgY29uc3QgY2hhciAqYnVmZmVyXG4gXHRcdFx0cmV0dXJuO1xuIFx0XHR9XG4gXHRcdHMgPSAoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl92MCAqKSBwO1xuLVx0XHRmbGFncyA9IG50b2hzKHMtXHUwMDNlZmxhZ3MpIHwgSVBfVlNfQ09OTl9GX1NZTkM7XG4tXHRcdGZsYWdzIFx1MDAyNj0gfklQX1ZTX0NPTk5fRl9IQVNIRUQ7XG4rXHRcdGZsYWdzID0gbnRvaHMocy1cdTAwM2VmbGFncyk7XG4gXHRcdGlmIChmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX1NFUV9NQVNLKSB7XG4gXHRcdFx0b3B0ID0gKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqKVx1MDAyNnNbMV07XG4gXHRcdFx0cCArPSBGVUxMX0NPTk5fU0laRTtcbkBAIC05ODYsNiArMTAwMCwxMyBAQCBzdGF0aWMgdm9pZCBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGNvbnN0IGNoYXIgKmJ1ZmZlclxuIFx0XHRcdHAgKz0gU0lNUExFX0NPTk5fU0laRTtcbiBcdFx0fVxuIFxuK1x0XHRpZiAoIWlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3MoZmxhZ3MpKSB7XG4rXHRcdFx0SVBfVlNfREJHKDIsIFwiQkFDS1VQIHYwLCBJbnZhbGlkIGZsYWdzIDB4JVhcXG5cIiwgZmxhZ3MpO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXHRcdGZsYWdzIFx1MDAyNj0gSVBfVlNfQ09OTl9GX0JBQ0tVUF9NQVNLO1xuK1x0XHRmbGFncyB8PSBJUF9WU19DT05OX0ZfU1lOQztcbitcbiBcdFx0c3RhdGUgPSBudG9ocyhzLVx1MDAzZXN0YXRlKTtcbiBcdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9URU1QTEFURSkpIHtcbiBcdFx0XHRwcCA9IGlwX3ZzX3Byb3RvX2dldChzLVx1MDAzZXByb3RvY29sKTtcbkBAIC0xMTQxLDcgKzExNjIsMTMgQEAgc3RhdGljIGlubGluZSBpbnQgaXBfdnNfcHJvY19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIF9fdTggKnAsIF9fdTggKm1cbiBcdH1cbiBcbiBcdC8qIEdldCBmbGFncyBhbmQgTWFzayBvZmYgdW5zdXBwb3J0ZWQgKi9cbi1cdGZsYWdzICA9IG50b2hsKHMtXHUwMDNldjQuZmxhZ3MpIFx1MDAyNiBJUF9WU19DT05OX0ZfQkFDS1VQX01BU0s7XG4rXHRmbGFncyA9IG50b2hsKHMtXHUwMDNldjQuZmxhZ3MpO1xuK1x0aWYgKCFpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzKGZsYWdzKSkge1xuK1x0XHRJUF9WU19EQkcoMywgXCJCQUNLVVAsIEludmFsaWQgZmxhZ3MgMHglWFxcblwiLCBmbGFncyk7XG4rXHRcdHJldGMgPSAyNTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXHRmbGFncyBcdTAwMjY9IElQX1ZTX0NPTk5fRl9CQUNLVVBfTUFTSztcbiBcdGZsYWdzIHw9IElQX1ZTX0NPTk5fRl9TWU5DO1xuIFx0c3RhdGUgPSBudG9ocyhzLVx1MDAzZXY0LnN0YXRlKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjQ2OjM3LjkzNzg4MDQwNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU5NjEyNzM2MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJUFZTIFN5bmNocm9uaXphdGlvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQgdGhpcyBwYXRjaCBpcyBhY3R1YWxseSBjaGFuZ2luZyBhbmQgdGhlIGNvbnRleHQuIEZyb20gdGhlIGRlc2NyaXB0aW9uLCBpdCBzZWVtcyB3ZSdyZSBsb29raW5nIGF0IGEgbW9kaWZpY2F0aW9uIHRvIGBuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jYC4gU28sIHRoYXQncyB3aGVyZSB0aGUgY29yZSBvZiB0aGUgc3luY2hyb25pemF0aW9uIGxvZ2ljIHJlc2lkZXMuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY2hhbmdlcyBpbXBhY3QgdGhlIGV4aXN0aW5nIHN5bmNocm9uaXphdGlvbiBwcm9jZXNzLlxuXG5UaGUgbGlzdGVkIGZ1bmN0aW9ucyBhcmUgdGhlIGtleSBoZXJlOiBgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFnc2AsIHdoaWNoIGFwcGVhcnMgdG8gYmUgYSBuZXcgaGVscGVyLCBgaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwYCwgYW5kIGBpcF92c19wcm9jX3N5bmNfY29ubmAuIEl0IGxvb2tzIGxpa2Ugd2UndmUgZ290IGEgbmV3IHZhbGlkYXRpb24gc3RlcCwgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIGZsYWdzIGJlaW5nIHN5bmNocm9uaXplZCwgYW5kIHRoZW4gaGFuZGxpbmcgdGhlIG1lc3NhZ2VzIHRoZW1zZWx2ZXMsIGFuZCBmaW5hbGx5IHRoZSBhY3R1YWwgc3luY2hyb25pemF0aW9uLlxuXG5JJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIGRlZXAgZGl2ZSBpbnRvIGBuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jYCB1c2luZyBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAg4oCTIHdoYXRldmVyJ3MgcXVpY2tlc3Qg4oCTIHRvIGdldCBhIGZlZWwgZm9yIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgYXJvdW5kIHRoZXNlIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHNlZSAqaG93KiB0aGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCwgdGhlIGRhdGEgc3RydWN0dXJlcyB0aGV5IGludGVyYWN0IHdpdGgsIGFuZCB3aGF0IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgZXhpc3QuXG5cbkZpbmFsbHksIEknbGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGUgSVBWUyBzeW5jaHJvbml6YXRpb24gZGFlbW9uIGl0c2VsZi4gSSdtIGFzc3VtaW5nIGNoYW5nZXMgaGVyZSBtaWdodCByZWxhdGUgdG8gZmVhdHVyZXMgb3IgZGVwZW5kZW5jaWVzLiBJdOKAmXMgYWxzbyBwb3NzaWJsZSB0aGUgbmV3IGhlbHBlciBoYXMgaW50cm9kdWNlZCBzb21lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIEkgd2lsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIG5ld2x5IGNvbmZpZ3VyYWJsZS4gVGhpcyB3aWxsIGVuc3VyZSBJIHVuZGVyc3RhbmQgaG93IHRoaXMgcGF0Y2ggZml0cyBpbnRvIHRoZSBvdmVyYWxsIElQVlMgbGFuZHNjYXBlIGFuZCBhbnkgY29uZmlndXJhdGlvbiBjaGFuZ2VzLiBUaGlzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgaXQncyBwcm9wZXJseSBoYW5kbGVkIGluIGFueSBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTk3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6NDY6NDMuODk5MTU2NTc5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MjA5NTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3ZzX3N5bmNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZT0xNj1pcF92cy1vYmpzIDo9XFx0aXBfdnNfY29ubi5vIGlwX3ZzX2NvcmUubyBpcF92c19jdGwubyBpcF92c19zY2hlZC5vXFx0ICAgXFxcXFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZToxNzpcXHRcXHRpcF92c194bWl0Lm8gaXBfdnNfYXBwLm8gaXBfdnNfc3luYy5vXFx0ICAgXFx0XFx0ICAgXFxcXFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZS0xOC1cXHRcXHRpcF92c19lc3QubyBpcF92c19wcm90by5vIGlwX3ZzX3BlLm9cXHRcXHRcXHQgICBcXFxcXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTEzNDc9c3RhdGljIHZvaWQgaXBfdnNfY29ubl9leHBpcmUoc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTE0MTYtXFx0aWYgKGlwdnMtXFx1MDAzZXN5bmNfc3RhdGUgXFx1MDAyNiBJUF9WU19TVEFURV9NQVNURVIpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxNDE3OlxcdFxcdGlwX3ZzX3N5bmNfY29ubihpcHZzLCBjcCwgc3lzY3RsX3N5bmNfdGhyZXNob2xkKGlwdnMpKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTE0MTgtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTIwOTY9aXBfdnNfaW5faG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIyNjYtXFx0ICpcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIyNjc6XFx0ICogRm9yIE9ORV9QS1QgbGV0IGlwX3ZzX3N5bmNfY29ubigpIGRvIHRoZSBmaWx0ZXIgd29yay5cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIyNjgtXFx0ICovXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIyNzUtXFx0aWYgKGlwdnMtXFx1MDAzZXN5bmNfc3RhdGUgXFx1MDAyNiBJUF9WU19TVEFURV9NQVNURVIpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMjc2OlxcdFxcdGlwX3ZzX3N5bmNfY29ubihpcHZzLCBjcCwgcGt0cyk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMjc3LVxcdGVsc2UgaWYgKChjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVCkgXFx1MDAyNlxcdTAwMjYgY3AtXFx1MDAzZWNvbnRyb2wpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMjc4OlxcdFxcdC8qIGluY3JlbWVudCBpcyBkb25lIGluc2lkZSBpcF92c19zeW5jX2Nvbm4gdG9vICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMjc5LVxcdFxcdGF0b21pY19pbmMoXFx1MDAyNmNwLVxcdTAwM2Vjb250cm9sLVxcdTAwM2Vpbl9wa3RzKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MjQ4MD1zdGF0aWMgaW50IF9fbmV0X2luaXQgX19pcF92c19pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjUxMC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjI1MTE6XFx0aWYgKGlwX3ZzX3N5bmNfbmV0X2luaXQoaXB2cykgXFx1MDAzYyAwKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjUxMi1cXHRcXHRnb3RvIHN5bmNfZmFpbDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MjU1Mj1zdGF0aWMgdm9pZCBfX25ldF9leGl0IF9faXBfdnNfZGV2X2NsZWFudXBfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqbmV0X2xpc3QpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTI1NjItXFx0XFx0c21wX3dtYigpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MjU2MzpcXHRcXHRpcF92c19zeW5jX25ldF9jbGVhbnVwKGlwdnMpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjU2NC1cXHR9XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEzLSAqICAgICAgICAgICAgICB0aW1lLW91dHMsIGFuZCBmaXJld2FsbCBtYXJrcy5cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE0OiAqICAgICAgICAgICAgICBJbiB2ZXIuMSBcXFwiaXBfdnNfc3luY19jb25uX29wdGlvbnNcXFwiIHdpbGwgYmUgc2VudCBpbiBuZXR3LiBvcmRlci5cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE1LSAqICAgICAgICAgICAgICBWZXIuIDAgY2FuIGJlIHR1cm5lZCBvbiBieSBzeXNjdGwgLXcgbmV0LmlwdjQudnMuc3luY192ZXJzaW9uPTBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjItICpcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjIzOiAqIGlwX3ZzX3N5bmM6ICBzeW5jIGNvbm5lY3Rpb24gaW5mbyBmcm9tIG1hc3RlciBsb2FkIGJhbGFuY2VyIHRvIGJhY2t1cHNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTI0LSAqICAgICAgICAgICAgICB0aHJvdWdoIG11bHRpY2FzdFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz02NT1zdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IF9faXB2c19zeW5jX2tleTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjktICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo3MDpzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTcxLVxcdF9fdThcXHRcXHRcXHRyZXNlcnZlZDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtODgtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo4OTpzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtOTAtXFx0c3RydWN0IGlwX3ZzX3NlcSAgICAgICAgaW5fc2VxOyAgICAgICAgIC8qIGluY29taW5nIHNlcS4gc3RydWN0ICovXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEzMS0gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEzMjpzdHJ1Y3QgaXBfdnNfc3luY192NCB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMzMtXFx0X191OFxcdFxcdFxcdHR5cGU7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE1My0gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE1NDpzdHJ1Y3QgaXBfdnNfc3luY192NiB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNTUtXFx0X191OFxcdFxcdFxcdHR5cGU7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE3My1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE3NDp1bmlvbiBpcF92c19zeW5jX2Nvbm4ge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTc1OlxcdHN0cnVjdCBpcF92c19zeW5jX3Y0XFx0djQ7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNzY6XFx0c3RydWN0IGlwX3ZzX3N5bmNfdjZcXHR2NjtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE3Ny19O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xOTUtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxOTY6c3RydWN0IGlwX3ZzX3N5bmNfdGhyZWFkX2RhdGEge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTk3LVxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjA0LS8qIFZlcnNpb24gMCBkZWZpbml0aW9uIG9mIHBhY2tldCBzaXplcyAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MjA1OiNkZWZpbmUgU0lNUExFX0NPTk5fU0laRSAgKHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwKSlcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTIwNi0jZGVmaW5lIEZVTExfQ09OTl9TSVpFICBcXFxcXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoyMDc6KHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwKSArIHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMpKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjA4LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yNDQtLyogVmVyc2lvbiAwIGhlYWRlciAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MjQ1OnN0cnVjdCBpcF92c19zeW5jX21lc2dfdjAge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjQ2LVxcdF9fdTggICAgICAgICAgICAgICAgICAgIG5yX2Nvbm5zO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yNDktXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoyNTA6XFx0LyogaXBfdnNfc3luY19jb25uIGVudHJpZXMgc3RhcnQgaGVyZSAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjUxLX07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTI1My0vKiBWZXJzaW9uIDEgaGVhZGVyICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoyNTQ6c3RydWN0IGlwX3ZzX3N5bmNfbWVzZyB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yNTUtXFx0X191OFxcdFxcdFxcdHJlc2VydmVkO1xcdC8qIG11c3QgYmUgemVybyAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yNjAtXFx0X191MTZcXHRcXHRcXHRzcGFyZTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjI2MTpcXHQvKiBpcF92c19zeW5jX2Nvbm4gZW50cmllcyBzdGFydCBoZXJlICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yNjItfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MjY0PXVuaW9uIGlwdnNfc29ja2FkZHIge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yNjgtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoyNjk6c3RydWN0IGlwX3ZzX3N5bmNfYnVmZiB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yNzAtXFx0c3RydWN0IGxpc3RfaGVhZCAgICAgICAgbGlzdDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjczLVxcdC8qIHBvaW50ZXJzIGZvciB0aGUgbWVzc2FnZSBkYXRhICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoyNzQ6XFx0c3RydWN0IGlwX3ZzX3N5bmNfbWVzZyAgKm1lc2c7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yNzUtXFx0dW5zaWduZWQgY2hhciAgICAgICAgICAgKmhlYWQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTI5NT1zdGF0aWMgdm9pZCBodG9uX3NlcShzdHJ1Y3QgaXBfdnNfc2VxICpobywgc3RydWN0IGlwX3ZzX3NlcSAqbm8pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTMwMS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjMwMjpzdGF0aWMgaW5saW5lIHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMzAzLXNiX2RlcXVldWUoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcHZzX21hc3Rlcl9zeW5jX3N0YXRlICptcylcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTMwNC17XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzozMDU6XFx0c3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqc2I7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0zMDYtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTMxMS1cXHR9IGVsc2Uge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MzEyOlxcdFxcdHNiID0gbGlzdF9lbnRyeShtcy1cXHUwMDNlc3luY19xdWV1ZS5uZXh0LCBzdHJ1Y3QgaXBfdnNfc3luY19idWZmLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMzEzLVxcdFxcdFxcdFxcdGxpc3QpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0zMjYtICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzozMjc6c3RhdGljIGlubGluZSBzdHJ1Y3QgaXBfdnNfc3luY19idWZmICpcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjMyODppcF92c19zeW5jX2J1ZmZfY3JlYXRlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCB1bnNpZ25lZCBpbnQgbGVuKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMzI5LXtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjMzMDpcXHRzdHJ1Y3QgaXBfdnNfc3luY19idWZmICpzYjtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTMzMS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjMzMjpcXHRpZiAoIShzYj1rbWFsbG9jX29iaihzdHJ1Y3QgaXBfdnNfc3luY19idWZmLCBHRlBfQVRPTUlDKSkpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0zMzMtXFx0XFx0cmV0dXJuIE5VTEw7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0zMzQtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzozMzU6XFx0bGVuID0gbWF4X3QodW5zaWduZWQgaW50LCBsZW4gKyBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfbWVzZyksXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0zMzYtXFx0XFx0ICAgIGlwdnMtXFx1MDAzZW1jZmcuc3luY19tYXhsZW4pO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0zNDQtXFx0c2ItXFx1MDAzZW1lc2ctXFx1MDAzZXN5bmNpZCA9IGlwdnMtXFx1MDAzZW1jZmcuc3luY2lkO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MzQ1OlxcdHNiLVxcdTAwM2VtZXNnLVxcdTAwM2VzaXplID0gaHRvbnMoc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX21lc2cpKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTM0Ni1cXHRzYi1cXHUwMDNlbWVzZy1cXHUwMDNlbnJfY29ubnMgPSAwO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMzQ3LVxcdHNiLVxcdTAwM2VtZXNnLVxcdTAwM2VzcGFyZSA9IDA7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzozNDg6XFx0c2ItXFx1MDAzZWhlYWQgPSAodW5zaWduZWQgY2hhciAqKXNiLVxcdTAwM2VtZXNnICsgc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX21lc2cpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMzQ5LVxcdHNiLVxcdTAwM2VlbmQgPSAodW5zaWduZWQgY2hhciAqKXNiLVxcdTAwM2VtZXNnICsgbGVuO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0zNTQtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzozNTU6c3RhdGljIGlubGluZSB2b2lkIGlwX3ZzX3N5bmNfYnVmZl9yZWxlYXNlKHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKnNiKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMzU2LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MzYxPXN0YXRpYyBpbmxpbmUgdm9pZCBzYl9xdWV1ZV90YWlsKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0zNjMte1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MzY0OlxcdHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKnNiID0gbXMtXFx1MDAzZXN5bmNfYnVmZjtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTM2NS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMzc5LVxcdH0gZWxzZVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MzgwOlxcdFxcdGlwX3ZzX3N5bmNfYnVmZl9yZWxlYXNlKHNiKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTM4MS1cXHRzcGluX3VubG9jayhcXHUwMDI2aXB2cy1cXHUwMDNlc3luY19sb2NrKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMzg3LSAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6Mzg4OnN0YXRpYyBpbmxpbmUgc3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0zODktZ2V0X2N1cnJfc3luY19idWZmKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXB2c19tYXN0ZXJfc3luY19zdGF0ZSAqbXMsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTM5MS17XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzozOTI6XFx0c3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqc2I7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0zOTMtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTQwNj1zZWxlY3RfbWFzdGVyX3RocmVhZF9pZChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy00MTMtICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo0MTQ6c3RhdGljIGlubGluZSBzdHJ1Y3QgaXBfdnNfc3luY19idWZmICpcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjQxNTppcF92c19zeW5jX2J1ZmZfY3JlYXRlX3YwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCB1bnNpZ25lZCBpbnQgbGVuKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNDE2LXtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjQxNzpcXHRzdHJ1Y3QgaXBfdnNfc3luY19idWZmICpzYjtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjQxODpcXHRzdHJ1Y3QgaXBfdnNfc3luY19tZXNnX3YwICptZXNnO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNDE5LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NDIwOlxcdGlmICghKHNiPWttYWxsb2Nfb2JqKHN0cnVjdCBpcF92c19zeW5jX2J1ZmYsIEdGUF9BVE9NSUMpKSlcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTQyMS1cXHRcXHRyZXR1cm4gTlVMTDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTQyMi1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjQyMzpcXHRsZW4gPSBtYXhfdCh1bnNpZ25lZCBpbnQsIGxlbiArIHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19tZXNnX3YwKSxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTQyNC1cXHRcXHQgICAgaXB2cy1cXHUwMDNlbWNmZy5zeW5jX21heGxlbik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTQyOS1cXHR9XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo0MzA6XFx0bWVzZyA9IChzdHJ1Y3QgaXBfdnNfc3luY19tZXNnX3YwICopc2ItXFx1MDAzZW1lc2c7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy00MzEtXFx0bWVzZy1cXHUwMDNlbnJfY29ubnMgPSAwO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNDMyLVxcdG1lc2ctXFx1MDAzZXN5bmNpZCA9IGlwdnMtXFx1MDAzZW1jZmcuc3luY2lkO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NDMzOlxcdG1lc2ctXFx1MDAzZXNpemUgPSBodG9ucyhzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCkpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NDM0OlxcdHNiLVxcdTAwM2VoZWFkID0gKHVuc2lnbmVkIGNoYXIgKiltZXNnICsgc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjApO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNDM1LVxcdHNiLVxcdTAwM2VlbmQgPSAodW5zaWduZWQgY2hhciAqKW1lc2cgKyBsZW47XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTQ0MT1zdGF0aWMgaW5saW5lIGJvb2wgaW5fcGVyc2lzdGVuY2Uoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy00NTgtICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo0NTk6c3RhdGljIGludCBpcF92c19zeW5jX2Nvbm5fbmVlZGVkKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNDYwLVxcdFxcdFxcdFxcdCAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgcGt0cylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTM4LSAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NTM5OnN0YXRpYyB2b2lkIGlwX3ZzX3N5bmNfY29ubl92MChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTQwLVxcdFxcdFxcdCAgICAgICBpbnQgcGt0cylcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU0MS17XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo1NDI6XFx0c3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCAqbTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjU0MzpcXHRzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwICpzO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NTQ0OlxcdHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKmJ1ZmY7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01NDUtXFx0c3RydWN0IGlwdnNfbWFzdGVyX3N5bmNfc3RhdGUgKm1zO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01NTQtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo1NTU6XFx0aWYgKCFpcF92c19zeW5jX2Nvbm5fbmVlZGVkKGlwdnMsIGNwLCBwa3RzKSlcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU1Ni1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU2OS1cXHRpZiAoYnVmZikge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NTcwOlxcdFxcdG0gPSAoc3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCAqKSBidWZmLVxcdTAwM2VtZXNnO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTcxLVxcdFxcdC8qIFNlbmQgYnVmZmVyIGlmIGl0IGlzIGZvciB2MSAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01NzgtXFx0aWYgKCFidWZmKSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo1Nzk6XFx0XFx0YnVmZiA9IGlwX3ZzX3N5bmNfYnVmZl9jcmVhdGVfdjAoaXB2cywgbGVuKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU4MC1cXHRcXHRpZiAoIWJ1ZmYpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU4MS1cXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aXB2cy1cXHUwMDNlc3luY19idWZmX2xvY2spO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NTgyOlxcdFxcdFxcdHByX2VycihcXFwiaXBfdnNfc3luY19idWZmX2NyZWF0ZSBmYWlsZWQuXFxcXG5cXFwiKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU4My1cXHRcXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU4Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjU4ODpcXHRtID0gKHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjAgKikgYnVmZi1cXHUwMDNlbWVzZztcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjU4OTpcXHRzID0gKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAgKikgYnVmZi1cXHUwMDNlaGVhZDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU5MC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjAyLVxcdGlmIChjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0spIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjYwMzpcXHRcXHRzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKm9wdCA9XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo2MDQ6XFx0XFx0XFx0KHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqKVxcdTAwMjZzWzFdO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjA1LVxcdFxcdG1lbWNweShvcHQsIFxcdTAwMjZjcC1cXHUwMDNlc3luY19jb25uX29wdCwgc2l6ZW9mKCpvcHQpKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjE5LVxcdFxcdFxcdHBrdHMgPSBzeXNjdGxfc3luY190aHJlc2hvbGQoaXB2cyk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo2MjA6XFx0XFx0aXBfdnNfc3luY19jb25uKGlwdnMsIGNwLCBwa3RzKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTYyMS1cXHR9XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTYyOC0gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjYyOTp2b2lkIGlwX3ZzX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgcGt0cylcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTYzMC17XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo2MzE6XFx0c3RydWN0IGlwX3ZzX3N5bmNfbWVzZyAqbTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjYzMjpcXHR1bmlvbiBpcF92c19zeW5jX2Nvbm4gKnM7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo2MzM6XFx0c3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqYnVmZjtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTYzNC1cXHRzdHJ1Y3QgaXB2c19tYXN0ZXJfc3luY19zdGF0ZSAqbXM7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY0MC1cXHRpZiAoc3lzY3RsX3N5bmNfdmVyKGlwdnMpID09IDApIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjY0MTpcXHRcXHRpcF92c19zeW5jX2Nvbm5fdjAoaXB2cywgY3AsIHBrdHMpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjQyLVxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjQ3LXNsb29wOlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NjQ4OlxcdGlmICghaXBfdnNfc3luY19jb25uX25lZWRlZChpcHZzLCBjcCwgcGt0cykpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02NDktXFx0XFx0Z290byBjb250cm9sO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02NzEtXFx0aWYgKGNwLVxcdTAwM2VhZiA9PSBBRl9JTkVUNilcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjY3MjpcXHRcXHRsZW4gPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfdjYpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjczLVxcdGVsc2VcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY3NC0jZW5kaWZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjY3NTpcXHRcXHRsZW4gPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfdjQpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjc2LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjc3LVxcdGlmIChjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0spXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo2Nzg6XFx0XFx0bGVuICs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMpICsgMjtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY3OS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzAwLVxcdGlmICghYnVmZikge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NzAxOlxcdFxcdGJ1ZmYgPSBpcF92c19zeW5jX2J1ZmZfY3JlYXRlKGlwdnMsIGxlbik7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03MDItXFx0XFx0aWYgKCFidWZmKSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03MDMtXFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmlwdnMtXFx1MDAzZXN5bmNfYnVmZl9sb2NrKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjcwNDpcXHRcXHRcXHRwcl9lcnIoXFxcImlwX3ZzX3N5bmNfYnVmZl9jcmVhdGUgZmFpbGVkLlxcXFxuXFxcIik7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03MDUtXFx0XFx0XFx0cmV0dXJuO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03MTctXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo3MTg6XFx0cyA9ICh1bmlvbiBpcF92c19zeW5jX2Nvbm4gKilwO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzE5LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03MzQtXFx0aWYgKGNwLVxcdTAwM2VhZiA9PSBBRl9JTkVUNikge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NzM1OlxcdFxcdHAgKz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX3Y2KTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTczNi1cXHRcXHRzLVxcdTAwM2V2Ni5jYWRkciA9IGNwLVxcdTAwM2VjYWRkci5pbjY7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTc0MS1cXHR7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo3NDI6XFx0XFx0cCArPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfdjQpO1xcdC8qIG9wdGlvbnMgcHRyICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03NDMtXFx0XFx0cy1cXHUwMDNldjQuY2FkZHIgPSBjcC1cXHUwMDNlY2FkZHIuaXA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTc0OC1cXHRcXHQqKHArKykgPSBJUFZTX09QVF9TRVFfREFUQTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjc0OTpcXHRcXHQqKHArKykgPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTc1MC1cXHRcXHRodG9uX3NlcShcXHUwMDI2Y3AtXFx1MDAzZWluX3NlcSwgKHN0cnVjdCBpcF92c19zZXEgKilwKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9Nzg3PXN0YXRpYyBpbmxpbmUgaW50XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo3ODg6aXBfdnNfY29ubl9maWxsX3BhcmFtX3N5bmMoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwgdW5pb24gaXBfdnNfc3luY19jb25uICpzYyxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTc4OS1cXHRcXHRcXHQgICBzdHJ1Y3QgaXBfdnNfY29ubl9wYXJhbSAqcCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9ODQxPXN0YXRpYyB2b2lkIGlwX3ZzX3Byb2NfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm5fcGFyYW0gKnBhcmFtLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy04NDUtXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dCwgX191MzIgZndtYXJrLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6ODQ2OlxcdFxcdFxcdCAgICBzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKm9wdClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTg0Ny17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTk1Mi0vKiBDaGVjayBmb3IgaW5jb21wYXRpYmxlIGZsYWdzICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo5NTM6c3RhdGljIGJvb2wgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyh1MzIgZmxhZ3MpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05NTQte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz05NzA9c3RhdGljIHZvaWQgaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBjb25zdCBjaGFyICpidWZmZXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTk3Mi17XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo5NzM6XFx0c3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCAqbSA9IChzdHJ1Y3QgaXBfdnNfc3luY19tZXNnX3YwICopYnVmZmVyO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6OTc0OlxcdHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAgKnM7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo5NzU6XFx0c3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICpvcHQ7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05NzYtXFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtOTgwLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6OTgxOlxcdHAgPSAoY2hhciAqKWJ1ZmZlciArIHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19tZXNnX3YwKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTk4Mi1cXHRmb3IgKGk9MDsgaVxcdTAwM2NtLVxcdTAwM2Vucl9jb25uczsgaSsrKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTk4OC1cXHRcXHR9XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo5ODk6XFx0XFx0cyA9IChzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwICopIHA7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05OTAtXFx0XFx0ZmxhZ3MgPSBudG9ocyhzLVxcdTAwM2VmbGFncyk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05OTEtXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX1NFUV9NQVNLKSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo5OTI6XFx0XFx0XFx0b3B0ID0gKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqKVxcdTAwMjZzWzFdO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtOTkzLVxcdFxcdFxcdHAgKz0gRlVMTF9DT05OX1NJWkU7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEwMDItXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMDAzOlxcdFxcdGlmICghaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyhmbGFncykpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEwMDQtXFx0XFx0XFx0SVBfVlNfREJHKDIsIFxcXCJCQUNLVVAgdjAsIEludmFsaWQgZmxhZ3MgMHglWFxcXFxuXFxcIiwgZmxhZ3MpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xMDQ1PXN0YXRpYyBpbmxpbmUgaW50IGlwX3ZzX3Byb2Nfc2Vxb3B0KF9fdTggKnAsIHVuc2lnbmVkIGludCBwbGVuLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTA0Ni1cXHRcXHRcXHRcXHQgICAgX191MzIgKm9wdF9mbGFncyxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEwNDc6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqb3B0KVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTA0OC17XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMDQ5OlxcdHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqdG9wdDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEwNTAtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMDUxOlxcdHRvcHQgPSAoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICopcDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEwNTItXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMDUzOlxcdGlmIChwbGVuICE9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMpKSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMDU0LVxcdFxcdElQX1ZTX0RCRygyLCBcXFwiQkFDS1VQLCBib2d1cyBjb25uIG9wdGlvbnMgbGVuZ3RoXFxcXG5cXFwiKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTA4Nz1zdGF0aWMgaW5saW5lIGludCBpcF92c19wcm9jX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgX191OCAqcCwgX191OCAqbXNnX2VuZClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEwODgte1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTA4OTpcXHRzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgb3B0O1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTA5MDpcXHR1bmlvbiAgaXBfdnNfc3luY19jb25uICpzO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTA5MS1cXHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMDk4LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTA5OTpcXHRzID0gKHVuaW9uIGlwX3ZzX3N5bmNfY29ubiAqKSBwO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTEwMC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTEwMy1cXHRcXHRhZiA9IEFGX0lORVQ2O1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTEwNDpcXHRcXHRwICs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY192Nik7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMTA1LSNlbHNlXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTExMTEtXFx0XFx0YWYgPSBBRl9JTkVUO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTExMjpcXHRcXHRwICs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY192NCk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMTEzLVxcdH0gZWxzZSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTExNjUtXFx0ZmxhZ3MgPSBudG9obChzLVxcdTAwM2V2NC5mbGFncyk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMTY2OlxcdGlmICghaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyhmbGFncykpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTExNjctXFx0XFx0SVBfVlNfREJHKDMsIFxcXCJCQUNLVVAsIEludmFsaWQgZmxhZ3MgMHglWFxcXFxuXFxcIiwgZmxhZ3MpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xMjI3PXN0YXRpYyB2b2lkIGlwX3ZzX3Byb2Nlc3NfbWVzc2FnZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgX191OCAqYnVmZmVyLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMjI5LXtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEyMzA6XFx0c3RydWN0IGlwX3ZzX3N5bmNfbWVzZyAqbTIgPSAoc3RydWN0IGlwX3ZzX3N5bmNfbWVzZyAqKWJ1ZmZlcjtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEyMzEtXFx0X191OCAqcCwgKm1zZ19lbmQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEyMzMtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMjM0OlxcdGlmIChidWZsZW4gXFx1MDAzYyBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCkpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEyMzUtXFx0XFx0SVBfVlNfREJHKDIsIFxcXCJCQUNLVVAsIG1lc3NhZ2UgaGVhZGVyIHRvbyBzaG9ydFxcXFxuXFxcIik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEyNTEtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMjUyOlxcdFxcdG1zZ19lbmQgPSBidWZmZXIgKyBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfbWVzZyk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMjUzLVxcdFxcdG5yX2Nvbm5zID0gbTItXFx1MDAzZW5yX2Nvbm5zO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMjU1LVxcdFxcdGZvciAoaT0wOyBpXFx1MDAzY25yX2Nvbm5zOyBpKyspIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEyNTY6XFx0XFx0XFx0dW5pb24gaXBfdnNfc3luY19jb25uICpzO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTI1Ny1cXHRcXHRcXHR1bnNpZ25lZCBpbnQgc2l6ZTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTI2NC1cXHRcXHRcXHR9XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMjY1OlxcdFxcdFxcdHMgPSAodW5pb24gaXBfdnNfc3luY19jb25uICopcDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEyNjYtXFx0XFx0XFx0c2l6ZSA9IG50b2hzKHMtXFx1MDAzZXY0LnZlcl9zaXplKSBcXHUwMDI2IFNWRVJfTUFTSztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTYxMD1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNjExOmlwX3ZzX3NlbmRfc3luY19tc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IGlwX3ZzX3N5bmNfbWVzZyAqbXNnKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTYxMi17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTE2NDI9c3RhdGljIHZvaWQgbWFzdGVyX3dha2V1cF93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNjYwLS8qIEdldCBuZXh0IGJ1ZmZlciB0byBzZW5kICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNjYxOnN0YXRpYyBpbmxpbmUgc3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNjYyLW5leHRfc3luY19idWZmKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXB2c19tYXN0ZXJfc3luY19zdGF0ZSAqbXMpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNjYzLXtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE2NjQ6XFx0c3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqc2I7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNjY1LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xNjczPXN0YXRpYyBpbnQgc3luY190aHJlYWRfbWFzdGVyKHZvaWQgKmRhdGEpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNjc0LXtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE2NzU6XFx0c3RydWN0IGlwX3ZzX3N5bmNfdGhyZWFkX2RhdGEgKnRpbmZvID0gZGF0YTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE2NzYtXFx0c3RydWN0IG5ldG5zX2lwdnMgKmlwdnMgPSB0aW5mby1cXHUwMDNlaXB2cztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTY3OC1cXHRzdHJ1Y3Qgc29jayAqc2sgPSB0aW5mby1cXHUwMDNlc29jay1cXHUwMDNlc2s7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNjc5OlxcdHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKnNiO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTY4MC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTcwMi1cXHRcXHR9XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNzAzOlxcdFxcdGlwX3ZzX3N5bmNfYnVmZl9yZWxlYXNlKHNiKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE3MDQtXFx0fVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNzA4LVxcdGlmIChzYilcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE3MDk6XFx0XFx0aXBfdnNfc3luY19idWZmX3JlbGVhc2Uoc2IpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTcxMC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTcxMi1cXHR3aGlsZSAoKHNiID0gc2JfZGVxdWV1ZShpcHZzLCBtcykpKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTcxMzpcXHRcXHRpcF92c19zeW5jX2J1ZmZfcmVsZWFzZShzYik7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNzE0LVxcdF9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTcxOC1cXHRpZiAoc2IpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNzE5OlxcdFxcdGlwX3ZzX3N5bmNfYnVmZl9yZWxlYXNlKHNiKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE3MjAtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTE3MjU9c3RhdGljIGludCBzeW5jX3RocmVhZF9iYWNrdXAodm9pZCAqZGF0YSlcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE3MjYte1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTcyNzpcXHRzdHJ1Y3QgaXBfdnNfc3luY190aHJlYWRfZGF0YSAqdGluZm8gPSBkYXRhO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTcyOC1cXHRzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyA9IHRpbmZvLVxcdTAwM2VpcHZzO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xNzYyPWludCBzdGFydF9zeW5jX3RocmVhZChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwdnNfc3luY19kYWVtb25fY2ZnICpjLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNzY0LXtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE3NjU6XFx0c3RydWN0IGlwX3ZzX3N5bmNfdGhyZWFkX2RhdGEgKnRpID0gTlVMTCwgKnRpbmZvO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTc2Ni1cXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE3NzQtXFx0SVBfVlNfREJHKDcsIFxcXCIlcygpOiBwaWQgJWRcXFxcblxcXCIsIF9fZnVuY19fLCB0YXNrX3BpZF9ucihjdXJyZW50KSk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNzc1OlxcdElQX1ZTX0RCRyg3LCBcXFwiRWFjaCBpcF92c19zeW5jX2Nvbm4gZW50cnkgbmVlZHMgJXpkIGJ5dGVzXFxcXG5cXFwiLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTc3NjpcXHRcXHQgIHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwKSk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNzc3LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xODg5LVxcdHJlc3VsdCA9IC1FTk9NRU07XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxODkwOlxcdHRpID0ga3phbGxvY19vYmpzKHN0cnVjdCBpcF92c19zeW5jX3RocmVhZF9kYXRhLCBjb3VudCk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xODkxLVxcdGlmICghdGkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTE5Nzg9aW50IHN0b3Bfc3luY190aHJlYWQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBzdGF0ZSlcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE5Nzkte1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTk4MDpcXHRzdHJ1Y3QgaXBfdnNfc3luY190aHJlYWRfZGF0YSAqdGksICp0aW5mbztcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE5ODEtXFx0aW50IGlkO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yMDY1LSAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MjA2NjppbnQgX19uZXRfaW5pdCBpcF92c19zeW5jX25ldF9pbml0KHN0cnVjdCBuZXRuc19pcHZzICppcHZzKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjA2Ny17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTIwNzMtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoyMDc0OnZvaWQgaXBfdnNfc3luY19uZXRfY2xlYW51cChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cylcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTIwNzUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODo0Njo0My45NDgzNzE2NDhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMjkwMjU5NjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIFBhdGNoJ3MgUHVycG9zZSoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGluLiBCZWZvcmUgSSBldmVuICp0aGluayogYWJvdXQgYXBwbHlpbmcgdGhpcyBwYXRjaCBvciBldmFsdWF0aW5nIGl0cyBxdWFsaXR5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiBpdCBleGlzdHMuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHVzZSBgZ2l0IHNob3dgIG9uIHRoZSBzcGVjaWZpYyBjb21taXQgaW4gcXVlc3Rpb24uIFRoYXQncyB0aGUgcXVpY2tlc3Qgcm91dGUgdG8gdGhlIG1ldGFkYXRhOiB0aGUgY29tbWl0IG1lc3NhZ2UsIGFueSByZWxhdGVkIGlzc3VlIElEcywgYW5kIHRoZSBkaWZmIGl0c2VsZi4gVGhlIGNvbW1pdCBtZXNzYWdlICpzaG91bGQqIHByb3ZpZGUgYSBjb25jaXNlIHByb2JsZW0gc3RhdGVtZW50IGFuZCwgaWRlYWxseSwgZXhwbGFpbiB0aGUgdW5kZXJseWluZyByYXRpb25hbGUgZm9yIHRoZSBmaXguIEknbSBob3BpbmcgdG8gc2VlIGEgY2xlYXIgZGVzY3JpcHRpb24gb2YgdGhlIGJ1ZywgYW55IHJlbGV2YW50IHBlcmZvcm1hbmNlIG1ldHJpY3MgYmVmb3JlIGFuZCBhZnRlciwgb3IgbWF5YmUgYSByYXRpb25hbGUgZm9yIGEgbmV3IGZlYXR1cmUuXG5cbkknbSBhbHNvIGxvb2tpbmcgZm9yIGEgY2xlYW4sIHdlbGwtZm9ybWVkIGNvbW1pdCBtZXNzYWdlLiBJdCBuZWVkcyB0byBiZSBjbGVhciBhbmQgY29uY2lzZS4gSWYgaXTigJlzIHVuY2xlYXIsIHRoZW4gSSBtYXkgbmVlZCB0byBkaXZlIGZ1cnRoZXIgdG8gdGhlIHJlbGF0ZWQgdGlja2V0IG9yIGNvZGUuXG5cblVsdGltYXRlbHksIEkgd2FudCB0byBmb3JtIGEgbWVudGFsIG1vZGVsIG9mIHRoZSAqcHJvYmxlbSBzcGFjZSogdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nLiBVbmRlcnN0YW5kaW5nIHRoZSAqd2h5KiBpcyB0aGUgZm91bmRhdGlvbiBmb3IgcHJvcGVybHkgYXNzZXNzaW5nIHRoZSAqaG93Ki4gSSBjYW4gYWxyZWFkeSBzdGFydCB0aGlua2luZyBhYm91dCBwb3NzaWJsZSBlZGdlIGNhc2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQ2OCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjQ2OjQ3LjIzODYzMzI1NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzIyNjEzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJJUF9WU19DT05OX0ZfTk9fQ1BPUlRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9MzY3PV9faXBfdnNfY29ubl9pbl9nZXQoY29uc3Qgc3RydWN0IGlwX3ZzX2Nvbm5fcGFyYW0gKnApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTM5NS1cXHRcXHRcXHRcXHQgICAgKCFwLVxcdTAwM2VjcG9ydCBeXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzozOTY6XFx0XFx0XFx0XFx0ICAgICAoIShjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfTk9fQ1BPUlQpKSkgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTM5Ny1cXHRcXHRcXHRcXHQgICAgcC1cXHUwMDNlcHJvdG9jb2wgPT0gY3AtXFx1MDAzZXByb3RvY29sKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTY0Mz12b2lkIGlwX3ZzX2Nvbm5fZmlsbF9jcG9ydChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIF9fYmUxNiBjcG9ydClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNjg0LVxcdFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2Y3AtXFx1MDAzZWxvY2spO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6Njg1OlxcdFxcdFxcdGlmIChjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfTk9fQ1BPUlQgXFx1MDAyNlxcdTAwMjYgYnlfbWUpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy02ODYtXFx0XFx0XFx0XFx0Y3AtXFx1MDAzZWNwb3J0ID0gMDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNzU3LVxcdC8qIEZpbGwgY3BvcnQgb25jZSwgZXZlbiBpZiBtdWx0aXBsZSBwYWNrZXRzIHRyeSB0byBkbyBpdCAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6NzU4OlxcdGlmIChjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfTk9fQ1BPUlQgXFx1MDAyNlxcdTAwMjYgKCFjcC1cXHUwMDNlY3BvcnQgfHwgYnlfbWUpKSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy03NTktXFx0XFx0LyogSWYgd2UgcmFjZSB3aXRoIHJlc2l6aW5nIG1ha2Ugc3VyZSBjcG9ydCBpcyBzZXQgZm9yIGRpciAxICovXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTc2NS1cXHRcXHRcXHRhdG9taWNfZGVjKFxcdTAwMjZpcHZzLVxcdTAwM2Vub19jcG9ydF9jb25uc1thZl9pZF0pO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6NzY2OlxcdFxcdFxcdGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+SVBfVlNfQ09OTl9GX05PX0NQT1JUO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNzY3LVxcdFxcdH1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9ODc1PXN0cnVjdCBpcF92c19yaHQgKmlwX3ZzX2Nvbm5fdGFiX2FsbG9jKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgYnVja2V0cyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtODgyLVxcdHNjb3VudHMgPSBjbGFtcChidWNrZXRzIFxcdTAwM2VcXHUwMDNlIDYsIDEsIDI1Nik7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo4ODM6XFx0LyogbG9ja3M6IGJhc2VkIG9uIHBhcmFsbGVsIElQX1ZTX0NPTk5fRl9OT19DUE9SVCBvcGVyYXRpb25zICsgcmVzaXplICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy04ODQtXFx0bG9ja3MgPSBjbGFtcCg4LCAxLCBzY291bnRzKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9MTM0Nz1zdGF0aWMgdm9pZCBpcF92c19jb25uX2V4cGlyZShzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTM5NC1cXHRcXHRpcF92c191bmJpbmRfZGVzdChjcCk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxMzk1OlxcdFxcdGlmICh1bmxpa2VseShjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfTk9fQ1BPUlQpKSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMzk2LVxcdFxcdFxcdGludCBhZl9pZCA9IGlwX3ZzX2FmX2luZGV4KGNwLVxcdTAwM2VhZik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTE0NDQ9aXBfdnNfY29ubl9uZXcoY29uc3Qgc3RydWN0IGlwX3ZzX2Nvbm5fcGFyYW0gKnAsIGludCBkZXN0X2FmLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xNTE2LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTUxNzpcXHRpZiAodW5saWtlbHkoZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfTk9fQ1BPUlQpKSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xNTE4LVxcdFxcdGludCBhZl9pZCA9IGlwX3ZzX2FmX2luZGV4KGNwLVxcdTAwM2VhZik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM9MjU0PXN0YXRpYyBpbnQgaXBfdnNfZnRwX291dChzdHJ1Y3QgaXBfdnNfYXBwICphcHAsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy0zMzctXFx0XFx0bl9jcCA9IGlwX3ZzX2Nvbm5fbmV3KFxcdTAwMjZwLCBjcC1cXHUwMDNlYWYsIFxcdTAwMjZmcm9tLCBwb3J0LFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYzozMzg6XFx0XFx0XFx0XFx0ICAgICAgSVBfVlNfQ09OTl9GX05PX0NQT1JUIHxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtMzM5LVxcdFxcdFxcdFxcdCAgICAgIElQX1ZTX0NPTk5fRl9ORkNULFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz05NTM9c3RhdGljIGJvb2wgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyh1MzIgZmxhZ3MpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTk1Ny1cXHQgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjk1ODpcXHRpZiAoZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfTk9fQ1BPUlQpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTk1OS1cXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfVEVNUExBVEUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jPTc4Nz1pcF92c19uYXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jLTc5My1cXHQvKiBjaGVjayBpZiBpdCBpcyBhIGNvbm5lY3Rpb24gb2Ygbm8tY2xpZW50LXBvcnQgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jOjc5NDpcXHRpZiAodW5saWtlbHkoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX05PX0NQT1JUKSkge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMtNzk1LVxcdFxcdF9fYmUxNiBfcHQsICpwO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYz04NzE9aXBfdnNfbmF0X3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYy04NzctXFx0LyogY2hlY2sgaWYgaXQgaXMgYSBjb25uZWN0aW9uIG9mIG5vLWNsaWVudC1wb3J0ICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYzo4Nzg6XFx0aWYgKHVubGlrZWx5KGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9OT19DUE9SVCBcXHUwMDI2XFx1MDAyNiAhaXB2c2gtXFx1MDAzZWZyYWdvZmZzKSkge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMtODc5LVxcdFxcdF9fYmUxNiBfcHQsICpwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODo0Njo0Ny4yODU4NjYzNjNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTE2NjM1NDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgY29uc2lkZXJpbmcgSSdtIGFuIGV4cGVydDpcblxuKipEaXZpbmcgaW50byB0aGUgSVBWUyBTeW5jaHJvbml6YXRpb24gQ29kZSoqXG5cbk9rYXksIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCB0aGlzIGNvZGUsIGFuZCBpdCBsb29rcyBsaWtlIHdlJ3JlIGZvY3VzZWQgb24gYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNgLiBUaGF0J3MgdGhlIGhlYXJ0IG9mIGhvdyBJUFZTLCB0aGUgTGludXggVmlydHVhbCBTZXJ2ZXIsIGhhbmRsZXMgc3luY2hyb25pemF0aW9uLiBSaWdodCwgdGltZSB0byBkaWcgaW4gYW5kIGdldCBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB0aGUgY2hhbmdlcy4gSSdsbCBuZWVkIHRvIGNhcmVmdWxseSBleGFtaW5lIHRoZSBkaWZmLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBjbHVlcyB0aGF0IHN1Z2dlc3QgaXNzdWVzIHRoYXQgbmVlZCB0byBiZSBhZGRyZXNzZWQgaW4gdGhlIGNvbnRleHQgdGhhdCB0aGV5IGFwcGVhciBpbiB0aGUgZmlsZS4gSSB3aWxsIGZvY3VzIG9uIGFueSBuZXcgZmVhdHVyZXMsIGJ1ZyBmaXhlcywgb3IgcGVyZm9ybWFuY2UgdHdlYWtzLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgY29udGV4dCBvZiB0aGUgbW9kaWZpY2F0aW9ucywgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIElQVlMgc3lzdGVtLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDc2LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6NDY6NDkuNDAyNTA0NDEyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzOTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTQ1LFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTQ1OlxcdFxcdFxcdFxcdGNwLVxcdTAwM2V0aW1lb3V0ID0gcGQtXFx1MDAzZXRpbWVvdXRfdGFibGVbc3RhdGVdO1xcbiA5NDY6XFx0XFx0XFx0ZWxzZVxcbiA5NDc6XFx0XFx0XFx0XFx0Y3AtXFx1MDAzZXRpbWVvdXQgPSAoMyo2MCpIWik7XFxuIDk0ODpcXHRcXHR9XFxuIDk0OTpcXHRcXHRpcF92c19jb25uX3B1dChjcCk7XFxuIDk1MDpcXHR9XFxuIDk1MTpcXHRcXG4gOTUyOlxcdC8qIENoZWNrIGZvciBpbmNvbXBhdGlibGUgZmxhZ3MgKi9cXG4gOTUzOlxcdHN0YXRpYyBib29sIGlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3ModTMyIGZsYWdzKVxcbiA5NTQ6XFx0e1xcbiA5NTU6XFx0XFx0LyogV2UgZG8gbm90IGV4cGVjdCBOT19DUE9SVCwgZXNwZWNpYWxseSB0byBhbGxvdyBsb29rdXBzXFxuIDk1NjpcXHRcXHQgKiB0byBoaXQgdGVtcGxhdGVzXFxuIDk1NzpcXHRcXHQgKi9cXG4gOTU4OlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9OT19DUE9SVCkge1xcbiA5NTk6XFx0XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX1RFTVBMQVRFKVxcbiA5NjA6XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA5NjE6XFx0XFx0fVxcbiA5NjI6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpXFxuIDk2MzpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDk2NDpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gOTY1OlxcdH1cXG4gOTY2OlxcdFxcbiA5Njc6XFx0LypcXG4gOTY4OlxcdCAqICBQcm9jZXNzIHJlY2VpdmVkIG11bHRpY2FzdCBtZXNzYWdlIGZvciBWZXJzaW9uIDBcXG4gOTY5OlxcdCAqL1xcbiA5NzA6XFx0c3RhdGljIHZvaWQgaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBjb25zdCBjaGFyICpidWZmZXIsXFxuIDk3MTpcXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHNpemVfdCBidWZsZW4pXFxuIDk3MjpcXHR7XFxuIDk3MzpcXHRcXHRzdHJ1Y3QgaXBfdnNfc3luY19tZXNnX3YwICptID0gKHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjAgKilidWZmZXI7XFxuIDk3NDpcXHRcXHRzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwICpzO1xcbiA5NzU6XFx0XFx0c3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICpvcHQ7XFxuIDk3NjpcXHRcXHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwO1xcbiA5Nzc6XFx0XFx0c3RydWN0IGlwX3ZzX2Nvbm5fcGFyYW0gcGFyYW07XFxuIDk3ODpcXHRcXHRjaGFyICpwO1xcbiA5Nzk6XFx0XFx0aW50IGk7XFxuIDk4MDpcXHRcXG4gOTgxOlxcdFxcdHAgPSAoY2hhciAqKWJ1ZmZlciArIHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19tZXNnX3YwKTtcXG4gOTgyOlxcdFxcdGZvciAoaT0wOyBpXFx1MDAzY20tXFx1MDAzZW5yX2Nvbm5zOyBpKyspIHtcXG4gOTgzOlxcdFxcdFxcdHVuc2lnbmVkIGludCBmbGFncywgc3RhdGU7XFxuIDk4NDpcXHRcXG4gOTg1OlxcdFxcdFxcdGlmIChwICsgU0lNUExFX0NPTk5fU0laRSBcXHUwMDNlIGJ1ZmZlcitidWZsZW4pIHtcXG4gOTg2OlxcdFxcdFxcdFxcdElQX1ZTX0VSUl9STChcXFwiQkFDS1VQIHYwLCBib2d1cyBjb25uXFxcXG5cXFwiKTtcXG4gOTg3OlxcdFxcdFxcdFxcdHJldHVybjtcXG4gOTg4OlxcdFxcdFxcdH1cXG4gOTg5OlxcdFxcdFxcdHMgPSAoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl92MCAqKSBwO1xcbiA5OTA6XFx0XFx0XFx0ZmxhZ3MgPSBudG9ocyhzLVxcdTAwM2VmbGFncyk7XFxuIDk5MTpcXHRcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0spIHtcXG4gOTkyOlxcdFxcdFxcdFxcdG9wdCA9IChzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKilcXHUwMDI2c1sxXTtcXG4gOTkzOlxcdFxcdFxcdFxcdHAgKz0gRlVMTF9DT05OX1NJWkU7XFxuIDk5NDpcXHRcXHRcXHRcXHRpZiAocCBcXHUwMDNlIGJ1ZmZlcitidWZsZW4pIHtcXG4gOTk1OlxcdFxcdFxcdFxcdFxcdElQX1ZTX0VSUl9STChcXFwiQkFDS1VQIHYwLCBEcm9wcGluZyBidWZmZXIgYm9ndXMgY29ubiBvcHRpb25zXFxcXG5cXFwiKTtcXG4gOTk2OlxcdFxcdFxcdFxcdFxcdHJldHVybjtcXG4gOTk3OlxcdFxcdFxcdFxcdH1cXG4gOTk4OlxcdFxcdFxcdH0gZWxzZSB7XFxuIDk5OTpcXHRcXHRcXHRcXHRvcHQgPSBOVUxMO1xcbjEwMDA6XFx0XFx0XFx0XFx0cCArPSBTSU1QTEVfQ09OTl9TSVpFO1xcbjEwMDE6XFx0XFx0XFx0fVxcbjEwMDI6XFx0XFxuMTAwMzpcXHRcXHRcXHRpZiAoIWlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3MoZmxhZ3MpKSB7XFxuMTAwNDpcXHRcXHRcXHRcXHRJUF9WU19EQkcoMiwgXFxcIkJBQ0tVUCB2MCwgSW52YWxpZCBmbGFncyAweCVYXFxcXG5cXFwiLCBmbGFncyk7XFxuMTAwNTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xMDA2OlxcdFxcdFxcdH1cXG4xMDA3OlxcdFxcdFxcdGZsYWdzIFxcdTAwMjY9IElQX1ZTX0NPTk5fRl9CQUNLVVBfTUFTSztcXG4xMDA4OlxcdFxcdFxcdGZsYWdzIHw9IElQX1ZTX0NPTk5fRl9TWU5DO1xcbjEwMDk6XFx0XFxuMTAxMDpcXHRcXHRcXHRzdGF0ZSA9IG50b2hzKHMtXFx1MDAzZXN0YXRlKTtcXG4xMDExOlxcdFxcdFxcdGlmICghKGZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX1RFTVBMQVRFKSkge1xcbjEwMTI6XFx0XFx0XFx0XFx0cHAgPSBpcF92c19wcm90b19nZXQocy1cXHUwMDNlcHJvdG9jb2wpO1xcbjEwMTM6XFx0XFx0XFx0XFx0aWYgKCFwcCkge1xcbjEwMTQ6XFx0XFx0XFx0XFx0XFx0SVBfVlNfREJHKDIsIFxcXCJCQUNLVVAgdjAsIFVuc3VwcG9ydGVkIHByb3RvY29sICV1XFxcXG5cXFwiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODo0Njo0OS40MDI2MzAyMTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2MDc0MjQ0MDUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHNuaXBwZXQsIGZyYW1lZCBhcyBteSBvd24gdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgaXBfdnNfcHJvY19zeW5jX2Nvbm5gIEZ1bmN0aW9uKipcblxuT2theSwgc28gd2UncmUgZm9jdXNpbmcgb24gc29tZSBjb2RlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDExNDAgdG8gMTE3NSwgYW5kIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGBpcF92c19wcm9jX3N5bmNfY29ubmAgZnVuY3Rpb24uIEdpdmVuIG15IGV4cGVydGlzZSBpbiB0aGlzIGFyZWEsIG15IGluaXRpYWwgdGhvdWdodCBpcyBsaWtlbHkgYWJvdXQgdGhlIGNvbnRleHQuIFdoYXQgaXMgdGhpcyBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3I/IFwiaXBfdnNcIiBpbW1lZGlhdGVseSBzY3JlYW1zIFwiSVAgVmlydHVhbCBTZXJ2ZXIsXCIgbWVhbmluZyBpdCdzIGhpZ2hseSByZWxldmFudCB0byBsb2FkIGJhbGFuY2luZyBvciBzaW1pbGFyIHRyYWZmaWMgbWFuYWdlbWVudC4gVGhlIG5hbWUgXCJzeW5jX2Nvbm5cIiBzdWdnZXN0cyBpdCdzIGxpa2VseSBpbnZvbHZlZCBpbiBzeW5jaHJvbml6aW5nIGNvbm5lY3Rpb24gaW5mb3JtYXRpb24sIHBlcmhhcHMgYmV0d2VlbiBkaWZmZXJlbnQgc2VydmVycyBpbiBhIGNsdXN0ZXIgb3IgZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBzeXN0ZW0gZGVhbGluZyB3aXRoIG5ldHdvcmsgY29ubmVjdGlvbnMuXG5cbkkgZXhwZWN0IHRvIHNlZSB0aGUga2V5IGVsZW1lbnRzIG9mIGNvbm5lY3Rpb24gc3RhdGUgc3luY2hyb25pemF0aW9uLiBXaGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgdGhleSB1c2luZz8gQXJlIHRoZXkgZW1wbG95aW5nIGFueSBsb2NraW5nIG1lY2hhbmlzbXMgdG8gZW5zdXJlIGRhdGEgaW50ZWdyaXR5IGR1cmluZyB1cGRhdGVzPyBJJ20gcHJvYmFibHkgbG9va2luZyBmb3IgZGV0YWlscyBhcm91bmQgdGhlIGNvbm5lY3Rpb24ncyBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIElQIGFkZHJlc3NlcyBhbmQgcG9ydHMsIGl0cyBjdXJyZW50IHN0YXRlLCB0aW1lb3V0cywgYW5kIGFueSByZWxldmFudCBtZXRhZGF0YS4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIGNvbm5lY3Rpb24gdHJhY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBwcm9jZXNzIHdpdGhpbiB0aGUgSVBWUyBzeXN0ZW0sIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGluY29uc2lzdGVuY2llcy4gSXMgaXQgdXNpbmcgYW55IHNwZWNpZmljIHByb3RvY29scyBmb3Igc3luYywgb3Igc29tZXRoaW5nIGN1c3RvbT8gQXJlIHRoZXJlIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zPyBJJ2xsIGJlIGxvb2tpbmcgZm9yIGJvdHRsZW5lY2tzIG9yIGFueSBvYnZpb3VzIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODg1NCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6NDY6NTUuNDc2ODc3MjU1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MjQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNDA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgSVBfVlNfUEVEQVRBX01BWExFTiwgXFx1MDAyNm9wdF9mbGFncyxcXG4xMTQxOlxcdFxcdFxcdFxcdFxcdFxcdCAgIElQVlNfT1BUX0ZfUEVfREFUQSkpXFxuMTE0MjpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLTYwO1xcbjExNDM6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTE0NDpcXHRcXG4xMTQ1OlxcdFxcdFxcdGNhc2UgSVBWU19PUFRfUEVfTkFNRTpcXG4xMTQ2OlxcdFxcdFxcdFxcdGlmIChpcF92c19wcm9jX3N0cihwLCBwbGVuLFxcdTAwMjZwZV9uYW1lX2xlbiwgXFx1MDAyNnBlX25hbWUsXFxuMTE0NzpcXHRcXHRcXHRcXHRcXHRcXHQgICBJUF9WU19QRU5BTUVfTUFYTEVOLCBcXHUwMDI2b3B0X2ZsYWdzLFxcbjExNDg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgSVBWU19PUFRfRl9QRV9OQU1FKSlcXG4xMTQ5OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtNzA7XFxuMTE1MDpcXHRcXHRcXHRcXHRicmVhaztcXG4xMTUxOlxcdFxcbjExNTI6XFx0XFx0XFx0ZGVmYXVsdDpcXG4xMTUzOlxcdFxcdFxcdFxcdC8qIFBhcmFtIGRhdGEgbWFuZGF0b3J5ID8gKi9cXG4xMTU0OlxcdFxcdFxcdFxcdGlmICghKHB0eXBlIFxcdTAwMjYgSVBWU19PUFRfRl9QQVJBTSkpIHtcXG4xMTU1OlxcdFxcdFxcdFxcdFxcdElQX1ZTX0RCRygzLCBcXFwiQkFDS1VQLCBVbmtub3duIG1hbmRhdG9yeSBwYXJhbSAlZCBmb3VuZFxcXFxuXFxcIixcXG4xMTU2OlxcdFxcdFxcdFxcdFxcdFxcdCAgcHR5cGUgXFx1MDAyNiB+SVBWU19PUFRfRl9QQVJBTSk7XFxuMTE1NzpcXHRcXHRcXHRcXHRcXHRyZXRjID0gMjA7XFxuMTE1ODpcXHRcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4xMTU5OlxcdFxcdFxcdFxcdH1cXG4xMTYwOlxcdFxcdFxcdH1cXG4xMTYxOlxcdFxcdFxcdHAgKz0gcGxlbjsgIC8qIE5leHQgb3B0aW9uICovXFxuMTE2MjpcXHRcXHR9XFxuMTE2MzpcXHRcXG4xMTY0OlxcdFxcdC8qIEdldCBmbGFncyBhbmQgTWFzayBvZmYgdW5zdXBwb3J0ZWQgKi9cXG4xMTY1OlxcdFxcdGZsYWdzID0gbnRvaGwocy1cXHUwMDNldjQuZmxhZ3MpO1xcbjExNjY6XFx0XFx0aWYgKCFpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzKGZsYWdzKSkge1xcbjExNjc6XFx0XFx0XFx0SVBfVlNfREJHKDMsIFxcXCJCQUNLVVAsIEludmFsaWQgZmxhZ3MgMHglWFxcXFxuXFxcIiwgZmxhZ3MpO1xcbjExNjg6XFx0XFx0XFx0cmV0YyA9IDI1O1xcbjExNjk6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTE3MDpcXHRcXHR9XFxuMTE3MTpcXHRcXHRmbGFncyBcXHUwMDI2PSBJUF9WU19DT05OX0ZfQkFDS1VQX01BU0s7XFxuMTE3MjpcXHRcXHRmbGFncyB8PSBJUF9WU19DT05OX0ZfU1lOQztcXG4xMTczOlxcdFxcdHN0YXRlID0gbnRvaHMocy1cXHUwMDNldjQuc3RhdGUpO1xcbjExNzQ6XFx0XFxuMTE3NTpcXHRcXHRpZiAoIShmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9URU1QTEFURSkpIHtcXG4xMTc2OlxcdFxcdFxcdHBwID0gaXBfdnNfcHJvdG9fZ2V0KHMtXFx1MDAzZXY0LnByb3RvY29sKTtcXG4xMTc3OlxcdFxcdFxcdGlmICghcHApIHtcXG4xMTc4OlxcdFxcdFxcdFxcdElQX1ZTX0RCRygzLFxcXCJCQUNLVVAsIFVuc3VwcG9ydGVkIHByb3RvY29sICV1XFxcXG5cXFwiLFxcbjExNzk6XFx0XFx0XFx0XFx0XFx0cy1cXHUwMDNldjQucHJvdG9jb2wpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODo0Njo1NS40NzcwNTIwNDVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTgxMzM3NTAzNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydDpcblxuKipVbmRlcnN0YW5kaW5nIHRoZSBDb21taXQncyBIaXN0b3J5KipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzIHNwZWNpZmljIGNvbW1pdC4gVGhlIGZpcnN0IHRoaW5nIEknbSBnb2luZyB0byBkbyBpcyByZWFjaCBmb3IgYGdpdCBsb2dgLiBJIHdhbnQgdG8gaW1tZWRpYXRlbHkgZ3Jhc3AgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIFdoYXQncyB0aGUgbmFycmF0aXZlIGFyb3VuZCB0aGlzIGNoYW5nZT8gSSdtIG5vdCBqdXN0IGxvb2tpbmcgZm9yICp3aGF0KiB3YXMgY2hhbmdlZCwgYnV0ICp3aHkqLiBUaGUgY29tbWl0IG1lc3NhZ2UgaXMga2V5LCBvZiBjb3Vyc2UsIGJ1dCBpdCdzIG9mdGVuIGluc3VmZmljaWVudCBvbiBpdHMgb3duLiBJIG5lZWQgdGhlIGZ1bGwgcGljdHVyZTogV2hhdCB3YXMgdGhlIHN0YXRlIG9mIHRoZSBwcm9qZWN0IGJlZm9yZSB0aGlzPyBXaGF0IG90aGVyIGNvbW1pdHMgd2VyZSBtYWRlIGFyb3VuZCB0aGUgc2FtZSB0aW1lPyBXZXJlIHRoZXJlIHJlbGF0ZWQgYnJhbmNoZXMgbWVyZ2VkPyBBbnkgcmVsZXZhbnQgcHVsbCByZXF1ZXN0cz8gSSdsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgY29uY2lzZSBsb2csIG1heWJlIHVzaW5nIGAtLW9uZWxpbmVgIHRvIGtlZXAgaXQgZm9jdXNlZC4gVGhlbiwgSSBjYW4gZXhwYW5kIHRoZSBjb21taXQgd2l0aCBgLS1wYXRjaGAgdG8gZ28gbW9yZSBpbi1kZXB0aC4gVGhpcyBpcyBhYm91dCBidWlsZGluZyBhIG1lbnRhbCBtYXAgb2YgdGhlIGNoYW5nZXMsIHNvIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgaW4gdGhlIG1lc3NhZ2VzLiBUaGF0J3Mgd2hhdCBJIHdhbnQgdG8gZXN0YWJsaXNoLiBUaGVuLCBJIGNhbiBzdGFydCB0byB0aGluayBhYm91dCB0aGUgY29udGVudCBpdHNlbGYuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODc2LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODo0NzoxMy42MTA4MDUwNTNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNjY5MDUzODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfdnNfc3luY192YWxpZGF0ZV9mbGFnc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTg0MT1zdGF0aWMgdm9pZCBpcF92c19wcm9jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uX3BhcmFtICpwYXJhbSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtOTUyLS8qIENoZWNrIGZvciBpbmNvbXBhdGlibGUgZmxhZ3MgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjk1MzpzdGF0aWMgYm9vbCBpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzKHUzMiBmbGFncylcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTk1NC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTk3MD1zdGF0aWMgdm9pZCBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGNvbnN0IGNoYXIgKmJ1ZmZlcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTAwMi1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEwMDM6XFx0XFx0aWYgKCFpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzKGZsYWdzKSkge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTAwNC1cXHRcXHRcXHRJUF9WU19EQkcoMiwgXFxcIkJBQ0tVUCB2MCwgSW52YWxpZCBmbGFncyAweCVYXFxcXG5cXFwiLCBmbGFncyk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTEwODc9c3RhdGljIGlubGluZSBpbnQgaXBfdnNfcHJvY19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIF9fdTggKnAsIF9fdTggKm1zZ19lbmQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTExNjUtXFx0ZmxhZ3MgPSBudG9obChzLVxcdTAwM2V2NC5mbGFncyk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMTY2OlxcdGlmICghaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyhmbGFncykpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTExNjctXFx0XFx0SVBfVlNfREJHKDMsIFxcXCJCQUNLVVAsIEludmFsaWQgZmxhZ3MgMHglWFxcXFxuXFxcIiwgZmxhZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODo0NzoxNS42Nzc3MTY1ODRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjI4MzM1MzI1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZSwgdXNpbmcgYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmU6XG5cbioqRGVsdmluZyBpbnRvIElQVlMgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljIEtjb25maWcgb3B0aW9ucyB0aGF0IGNvbnRyb2wgdGhlIGNvbmZpZ3VyYXRpb24gb2YgSVBWUyAodGhlIExpbnV4IFZpcnR1YWwgU2VydmVyKSBhbmQsIGNyaXRpY2FsbHksIGhvdyBpdHMgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgYXJlIGhhbmRsZWQuIEkga25vdyB0aGUgYmFzaWMgbGFuZHNjYXBlLCBidXQgSSB3YW50IHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IG51YW5jZXMuIEFyZSB0aGVyZSBhbnkgbmV3IG9wdGlvbnMgaW50cm9kdWNlZCByZWNlbnRseT8gSSBuZWVkIGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0J3MgYXZhaWxhYmxlIHRvIHR1bmUgdGhlIGJlaGF2aW9yIG9mIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGFuZCBsb2FkIGJhbGFuY2luZyBhY3Jvc3MgdGhlIGNsdXN0ZXIuIFRoaXMgaXMgd2hlcmUgdGhlIGRldmlsIGlzIGluIHRoZSBkZXRhaWxzOyBpdCdzIGFsd2F5cyB0aGUgZmluZS1ncmFpbmVkIHNldHRpbmdzIHRoYXQgbWFrZSBvciBicmVhayBhIGhpZ2gtcGVyZm9ybWFuY2UsIHJlc2lsaWVudCBzZXR1cC4gVGltZSB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzIGFuZCB2ZXJpZnkgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjQ1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6NDc6MTcuOTYxMDczMDNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDUyMzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklQX1ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTQtI1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjU6bWVudWNvbmZpZyBJUF9WU1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTYtXFx0dHJpc3RhdGUgXFxcIklQIHZpcnR1YWwgc2VydmVyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yNi1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyNzppZiBJUF9WU1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI5OmNvbmZpZ1xcdElQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMC1cXHRib29sIFxcXCJJUHY2IHN1cHBvcnQgZm9yIElQVlNcXFwiXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzE6XFx0ZGVwZW5kcyBvbiBJUFY2ID0geSB8fCBJUF9WUyA9IElQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMi1cXHRzZWxlY3QgTkZfREVGUkFHX0lQVjZcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTM3LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjM4OmNvbmZpZ1xcdElQX1ZTX0RFQlVHXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzktXFx0Ym9vbCBcXFwiSVAgdmlydHVhbCBzZXJ2ZXIgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNDQtXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6NDU6Y29uZmlnXFx0SVBfVlNfVEFCX0JJVFNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy00Ni1cXHRpbnQgXFxcIklQVlMgY29ubmVjdGlvbiB0YWJsZSBzaXplICh0aGUgTnRoIHBvd2VyIG9mIDIpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Nzc9Y29tbWVudCBcXFwiSVBWUyB0cmFuc3BvcnQgcHJvdG9jb2wgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFxcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy03OC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo3OTpjb25maWdcXHRJUF9WU19QUk9UT19UQ1BcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy04MC1cXHRib29sIFxcXCJUQ1AgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTg0LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjg1OmNvbmZpZ1xcdElQX1ZTX1BST1RPX1VEUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTg2LVxcdGJvb2wgXFxcIlVEUCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctOTAtXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6OTE6Y29uZmlnXFx0SVBfVlNfUFJPVE9fQUhfRVNQXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6OTI6XFx0ZGVmX2Jvb2wgSVBfVlNfUFJPVE9fRVNQIHx8IElQX1ZTX1BST1RPX0FIXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctOTMtXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6OTQ6Y29uZmlnXFx0SVBfVlNfUFJPVE9fRVNQXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctOTUtXFx0Ym9vbCBcXFwiRVNQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy05OS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoxMDA6Y29uZmlnXFx0SVBfVlNfUFJPVE9fQUhcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xMDEtXFx0Ym9vbCBcXFwiQUggbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTEwNS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoxMDY6Y29uZmlnICBJUF9WU19QUk9UT19TQ1RQXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTA3LVxcdGJvb2wgXFxcIlNDVFAgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTExMz1jb21tZW50IFxcXCJJUFZTIHNjaGVkdWxlclxcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xMTQtXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MTE1OmNvbmZpZ1xcdElQX1ZTX1JSXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTE2LVxcdHRyaXN0YXRlIFxcXCJyb3VuZC1yb2JpbiBzY2hlZHVsaW5nXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTIzLSBcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoxMjQ6Y29uZmlnXFx0SVBfVlNfV1JSXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTI1LVxcdHRyaXN0YXRlIFxcXCJ3ZWlnaHRlZCByb3VuZC1yb2JpbiBzY2hlZHVsaW5nXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTM2LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjEzNzpjb25maWdcXHRJUF9WU19MQ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTEzOC1cXHR0cmlzdGF0ZSBcXFwibGVhc3QtY29ubmVjdGlvbiBzY2hlZHVsaW5nXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTQ2LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjE0Nzpjb25maWdcXHRJUF9WU19XTENcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xNDgtXFx0dHJpc3RhdGUgXFxcIndlaWdodGVkIGxlYXN0LWNvbm5lY3Rpb24gc2NoZWR1bGluZ1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTE1Ni1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoxNTc6Y29uZmlnICBJUF9WU19GT1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTE1OC1cXHRcXHR0cmlzdGF0ZSBcXFwid2VpZ2h0ZWQgZmFpbG92ZXIgc2NoZWR1bGluZ1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTE2Ni1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoxNjc6Y29uZmlnICBJUF9WU19PVkZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xNjgtXFx0dHJpc3RhdGUgXFxcIndlaWdodGVkIG92ZXJmbG93IHNjaGVkdWxpbmdcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xNzctXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MTc4OmNvbmZpZ1xcdElQX1ZTX0xCTENcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xNzktXFx0dHJpc3RhdGUgXFxcImxvY2FsaXR5LWJhc2VkIGxlYXN0LWNvbm5lY3Rpb24gc2NoZWR1bGluZ1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTE5MS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoxOTI6Y29uZmlnICBJUF9WU19MQkxDUlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTE5My1cXHR0cmlzdGF0ZSBcXFwibG9jYWxpdHktYmFzZWQgbGVhc3QtY29ubmVjdGlvbiB3aXRoIHJlcGxpY2F0aW9uIHNjaGVkdWxpbmdcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yMDktXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MjEwOmNvbmZpZ1xcdElQX1ZTX0RIXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjExLVxcdHRyaXN0YXRlIFxcXCJkZXN0aW5hdGlvbiBoYXNoaW5nIHNjaGVkdWxpbmdcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yMTktXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MjIwOmNvbmZpZ1xcdElQX1ZTX1NIXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjIxLVxcdHRyaXN0YXRlIFxcXCJzb3VyY2UgaGFzaGluZyBzY2hlZHVsaW5nXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjI5LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjIzMDpjb25maWdcXHRJUF9WU19NSFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTIzMS1cXHR0cmlzdGF0ZSBcXFwibWFnbGV2IGhhc2hpbmcgc2NoZWR1bGluZ1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI0OC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyNDk6Y29uZmlnXFx0SVBfVlNfU0VEXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjUwLVxcdHRyaXN0YXRlIFxcXCJzaG9ydGVzdCBleHBlY3RlZCBkZWxheSBzY2hlZHVsaW5nXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjYxLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI2Mjpjb25maWdcXHRJUF9WU19OUVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI2My1cXHR0cmlzdGF0ZSBcXFwibmV2ZXIgcXVldWUgc2NoZWR1bGluZ1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI3NC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyNzU6Y29uZmlnXFx0SVBfVlNfVFdPU1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI3Ni1cXHR0cmlzdGF0ZSBcXFwid2VpZ2h0ZWQgcmFuZG9tIHR3b3MgY2hvaWNlIGxlYXN0LWNvbm5lY3Rpb24gc2NoZWR1bGluZ1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTI4Nj1jb21tZW50ICdJUFZTIFNIIHNjaGVkdWxlcidcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODctXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6Mjg4OmNvbmZpZyBJUF9WU19TSF9UQUJfQklUU1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4OS1cXHRpbnQgXFxcIklQVlMgc291cmNlIGhhc2hpbmcgdGFibGUgc2l6ZSAodGhlIE50aCBwb3dlciBvZiAyKVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTMwMT1jb21tZW50ICdJUFZTIE1IIHNjaGVkdWxlcidcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDItXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzAzOmNvbmZpZyBJUF9WU19NSF9UQUJfSU5ERVhcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDQtXFx0aW50IFxcXCJJUFZTIG1hZ2xldiBoYXNoaW5nIHRhYmxlIGluZGV4IG9mIHNpemUgKHRoZSBwcmltZSBudW1iZXJzKVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTMxOT1jb21tZW50ICdJUFZTIGFwcGxpY2F0aW9uIGhlbHBlcidcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMjAtXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzIxOmNvbmZpZ1xcdElQX1ZTX0ZUUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMyMi1cXHR0cmlzdGF0ZSBcXFwiRlRQIHByb3RvY29sIGhlbHBlclxcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMjM6XFx0ZGVwZW5kcyBvbiBJUF9WU19QUk9UT19UQ1AgXFx1MDAyNlxcdTAwMjYgTkZfQ09OTlRSQUNLIFxcdTAwMjZcXHUwMDI2IE5GX05BVCBcXHUwMDI2XFx1MDAyNiBcXFxcXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzI0LVxcdFxcdE5GX0NPTk5UUkFDS19GVFBcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMjU6XFx0c2VsZWN0IElQX1ZTX05GQ1RcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMjYtXFx0aGVscFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzM2LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMzNzpjb25maWdcXHRJUF9WU19ORkNUXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzM4LVxcdGJvb2wgXFxcIk5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzQ0LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjM0NTpjb25maWdcXHRJUF9WU19QRV9TSVBcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zNDYtXFx0dHJpc3RhdGUgXFxcIlNJUCBwZXJzaXN0ZW5jZSBlbmdpbmVcXFwiXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzQ3OlxcdGRlcGVuZHMgb24gSVBfVlNfUFJPVE9fVURQXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzQ4LVxcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLX1NJUFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzUyPWNvbmZpZyBHQ09WX1BST0ZJTEVfSVBWU1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzYwLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjM2MTplbmRpZiAjIElQX1ZTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjQ3OjE4LjAwNjUzMDgzOVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNzI3OTYyMjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSVBWUyBTeW5jaHJvbml6YXRpb24gTW9kdWxlKipcblxuT2theSwgc28gYGlwX3ZzX3N5bmMuY2AgaXMgYmVpbmcgY29tcGlsZWQgYXMgcGFydCBvZiB0aGUgYGlwX3ZzLW9ianNgLCB3aGljaCBpcyBhbGwgdW5kZXIgYENPTkZJR19JUF9WU2AuIFRpbWUgdG8gZG91YmxlLWNoZWNrIHRoYXQgTWFrZWZpbGUuLi4gWXVwLCB0aGVyZSBpdCBpczpcblxuYGBgbWFrZWZpbGVcbmlwX3ZzLW9ianMgOj0gICBpcF92c19jb25uLm8gaXBfdnNfY29yZS5vIGlwX3ZzX2N0bC5vIGlwX3ZzX3NjaGVkLm8gICAgICAgIFxcXG4gICAgICAgICAgICAgICAgaXBfdnNfeG1pdC5vIGlwX3ZzX2FwcC5vIGlwX3ZzX3N5bmMubyAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgICAgICAgIGlwX3ZzX2VzdC5vIGlwX3ZzX3Byb3RvLm8gaXBfdnNfcGUub1xuYGBgXG5cblNvIGBDT05GSUdfSVBfVlNgIGlzICp0aGUqIG9wdGlvbiwgaHVoPyBJdCBlbmFibGVzIHRoZSB3aG9sZSBJUFZTIHRoaW5nLCBpbmNsdWRpbmcgdGhlIHN5bmNocm9uaXphdGlvbiBtb2R1bGUuIE5vdywgbGV0J3Mgc2VlIHdoYXQgYENPTkZJR19JUF9WU2AgZGVwZW5kcyBvbi4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwncyBLY29uZmlnIGZpbGVzLiBUaGUgdXN1YWwgc3VzcGVjdHMgd291bGQgYmUgZWl0aGVyIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIG9yLCBtb3JlIHNwZWNpZmljYWxseSBmb3IgSVBWUywgYG5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnYC4gSSdsbCBzdGFydCB3aXRoIHRob3NlIGFuZCBzZWUgd2hhdCB0dXJucyB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMyODcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6NDc6MjAuNzM0NDk1NDU2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTQ1NjE1ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNC0jXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6NTptZW51Y29uZmlnIElQX1ZTXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNi1cXHR0cmlzdGF0ZSBcXFwiSVAgdmlydHVhbCBzZXJ2ZXIgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTI4Nj1jb21tZW50ICdJUFZTIFNIIHNjaGVkdWxlcidcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODctXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6Mjg4OmNvbmZpZyBJUF9WU19TSF9UQUJfQklUU1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4OS1cXHRpbnQgXFxcIklQVlMgc291cmNlIGhhc2hpbmcgdGFibGUgc2l6ZSAodGhlIE50aCBwb3dlciBvZiAyKVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTMwMT1jb21tZW50ICdJUFZTIE1IIHNjaGVkdWxlcidcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDItXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzAzOmNvbmZpZyBJUF9WU19NSF9UQUJfSU5ERVhcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDQtXFx0aW50IFxcXCJJUFZTIG1hZ2xldiBoYXNoaW5nIHRhYmxlIGluZGV4IG9mIHNpemUgKHRoZSBwcmltZSBudW1iZXJzKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6NDc6MjAuOTI5MDYzMDIxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU2ODc5NTQ1NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW5pdGlhbCB0aG91Z2h0cywgYXMgaWYgSSB3ZXJlIHJlYWRpbmcgdGhlIHRvcCBvZiBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgSVBWUyBLY29uZmlnIEZpbGUqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGBuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ2AgZmlsZS4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJ20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSByZXNwb25zaWJsZSBmb3IgY29udHJvbGxpbmcgdGhlIGNvbXBpbGF0aW9uIGFuZCBpbmNsdXNpb24gb2YgdGhlIElQIFZpcnR1YWwgU2VydmVyIChJUFZTKSBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgTGludXgga2VybmVsLiBJJ20gaW1tZWRpYXRlbHkgbG9va2luZyBmb3IgdGhlIHRvcC1sZXZlbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIGNvcmUgSVBWUyBmZWF0dXJlIHNldC4gSSBhbnRpY2lwYXRlIHNlZWluZyBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgcG90ZW50aWFsbHkgc29tZSBleHBsYW5hdGlvbnMgb3IgY29tbWVudHMgdGhhdCBjbGFyaWZ5IHRoZSBwdXJwb3NlIGFuZCBzY29wZSBvZiBJUFZTIHdpdGhpbiB0aGUgYnJvYWRlciBuZXR3b3JraW5nIHN0YWNrLiBJJ2xsIGJlIHF1aWNrbHkgc2Nhbm5pbmcgZm9yIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBvZiB0aGUgZmlsZTogd2hhdCdzIGVuYWJsZWQgYXMgZGVmYXVsdCBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zLiBBcmUgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcz8gQXJlIHRoZXJlIHN1Yi1mZWF0dXJlcyBvciBtb2R1bGVzIHdpdGhpbiBJUFZTIHRoYXQgYXJlIGluZGl2aWR1YWxseSBjb25maWd1cmFibGU/IFRoaXMgZmlsZSBkaWN0YXRlcyB3aGF0IGdldHMgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBJJ2xsIGJlIGxvb2tpbmcgdG8gcXVpY2tseSB1bmRlcnN0YW5kIGhvdyB0aGUgb3ZlcmFsbCBJUFZTIGZ1bmN0aW9uYWxpdHkgaXMgZW5hYmxlZCBhbmQgY3VzdG9taXplZCBieSB0aGUgdXNlci4gSSdtIHJlYWR5IHRvIGp1bXAgaW50byB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQwNDYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODo0NzoyNi42MTcwMzIyMThaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjcxMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgSVAgVmlydHVhbCBTZXJ2ZXIgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0bWVudWNvbmZpZyBJUF9WU1xcbiAgIDY6XFx0XFx0dHJpc3RhdGUgXFxcIklQIHZpcnR1YWwgc2VydmVyIHN1cHBvcnRcXFwiXFxuICAgNzpcXHRcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgTkVURklMVEVSXFxuICAgODpcXHRcXHRkZXBlbmRzIG9uIChORl9DT05OVFJBQ0sgfHwgTkZfQ09OTlRSQUNLPW4pXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIElQIFZpcnR1YWwgU2VydmVyIHN1cHBvcnQgd2lsbCBsZXQgeW91IGJ1aWxkIGEgaGlnaC1wZXJmb3JtYW5jZVxcbiAgMTE6XFx0XFx0ICB2aXJ0dWFsIHNlcnZlciBiYXNlZCBvbiBjbHVzdGVyIG9mIHR3byBvciBtb3JlIHJlYWwgc2VydmVycy4gVGhpc1xcbiAgMTI6XFx0XFx0ICBvcHRpb24gbXVzdCBiZSBlbmFibGVkIGZvciBhdCBsZWFzdCBvbmUgb2YgdGhlIGNsdXN0ZXJlZCBjb21wdXRlcnNcXG4gIDEzOlxcdFxcdCAgdGhhdCB3aWxsIHRha2UgY2FyZSBvZiBpbnRlcmNlcHRpbmcgaW5jb21pbmcgY29ubmVjdGlvbnMgdG8gYVxcbiAgMTQ6XFx0XFx0ICBzaW5nbGUgSVAgYWRkcmVzcyBhbmQgc2NoZWR1bGluZyB0aGVtIHRvIHJlYWwgc2VydmVycy5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0XFx0ICBUaHJlZSByZXF1ZXN0IGRpc3BhdGNoaW5nIHRlY2huaXF1ZXMgYXJlIGltcGxlbWVudGVkLCB0aGV5IGFyZVxcbiAgMTc6XFx0XFx0ICB2aXJ0dWFsIHNlcnZlciB2aWEgTkFULCB2aXJ0dWFsIHNlcnZlciB2aWEgdHVubmVsaW5nIGFuZCB2aXJ0dWFsXFxuICAxODpcXHRcXHQgIHNlcnZlciB2aWEgZGlyZWN0IHJvdXRpbmcuIFRoZSBzZXZlcmFsIHNjaGVkdWxpbmcgYWxnb3JpdGhtcyBjYW5cXG4gIDE5OlxcdFxcdCAgYmUgdXNlZCB0byBjaG9vc2Ugd2hpY2ggc2VydmVyIHRoZSBjb25uZWN0aW9uIGlzIGRpcmVjdGVkIHRvLFxcbiAgMjA6XFx0XFx0ICB0aHVzIGxvYWQgYmFsYW5jaW5nIGNhbiBiZSBhY2hpZXZlZCBhbW9uZyB0aGUgc2VydmVycy4gIEZvciBtb3JlXFxuICAyMTpcXHRcXHQgIGluZm9ybWF0aW9uIGFuZCBpdHMgYWRtaW5pc3RyYXRpb24gcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHRoZVxcbiAgMjI6XFx0XFx0ICBmb2xsb3dpbmcgVVJMOiBcXHUwMDNjaHR0cDovL3d3dy5saW51eHZpcnR1YWxzZXJ2ZXIub3JnL1xcdTAwM2UuXFxuICAyMzpcXHRcXG4gIDI0OlxcdFxcdCAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBpbiBrZXJuZWwsIHNheSBZLiBUbyBjb21waWxlIGl0IGFzIGFcXG4gIDI1OlxcdFxcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMjY6XFx0XFxuICAyNzpcXHRpZiBJUF9WU1xcbiAgMjg6XFx0XFxuICAyOTpcXHRjb25maWdcXHRJUF9WU19JUFY2XFxuICAzMDpcXHRcXHRib29sIFxcXCJJUHY2IHN1cHBvcnQgZm9yIElQVlNcXFwiXFxuICAzMTpcXHRcXHRkZXBlbmRzIG9uIElQVjYgPSB5IHx8IElQX1ZTID0gSVBWNlxcbiAgMzI6XFx0XFx0c2VsZWN0IE5GX0RFRlJBR19JUFY2XFxuICAzMzpcXHRcXHRoZWxwXFxuICAzNDpcXHRcXHQgIEFkZCBJUHY2IHN1cHBvcnQgdG8gSVBWUy5cXG4gIDM1OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODo0NzoyNi42MTcxMDEzOThaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDMzNDY5MDM5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIENhbGwgUGF0aHMgb2YgSVBWUyBTeW5jaHJvbml6YXRpb24gRnVuY3Rpb25zKipcblxuQWxyaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGV4ZWN1dGlvbiBmbG93IGhlcmUuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHRyYWNlIHRoZSBjYWxscyBhbmQgdW5kZXJzdGFuZCB0aGUgZW50cnkgcG9pbnRzIGZvciB0aGUgZnVuY3Rpb25zIGBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjBgIGFuZCBgaXBfdnNfcHJvY19zeW5jX2Nvbm5gLiBUaGV5J3JlIGNlbnRyYWwgdG8gdGhlIElQVlMgc3luY2hyb25pemF0aW9uIHByb2Nlc3MsIHNvIGdldHRpbmcgYSBoYW5kbGUgb24gdGhlaXIgdXNhZ2UgaXMgY3J1Y2lhbC4gTXkgaW1tZWRpYXRlIHBsYW4gaXMgdG8gZGVsdmUgaW50byB0aGUgYGlwX3ZzX3N5bmMuY2AgZmlsZSBhbmQgemVybyBpbiBvbiB0aGUgY2FsbGVyIGZ1bmN0aW9ucy4gQSBkaXJlY3Qgc2VhcmNoIGZvciBjYWxscyB0byB0aG9zZSBmdW5jdGlvbnMgd2l0aGluIHRoYXQgZmlsZSBzaG91bGQgZ2V0IG1lIHRoZSBhbnN3ZXJzLiBUaGlzIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGhzIGFuZCBzZWVpbmcgaG93IHRoZXNlIGZ1bmN0aW9ucyBmaXQgaW50byB0aGUgbGFyZ2VyIHBpY3R1cmUgb2YgSVBWUyBvcGVyYXRpb24gYW5kIHN5bmNocm9uaXphdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ4NDksIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjQ3OjMwLjk1MTc5NTM2OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkyMDExODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfdnNfcHJvY2Vzc19tZXNzYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz05NTM9c3RhdGljIGJvb2wgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyh1MzIgZmxhZ3MpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTk2OS0gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjk3MDpzdGF0aWMgdm9pZCBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGNvbnN0IGNoYXIgKmJ1ZmZlcixcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTk3MS1cXHRcXHRcXHRcXHQgICAgIGNvbnN0IHNpemVfdCBidWZsZW4pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTEwODc9c3RhdGljIGlubGluZSBpbnQgaXBfdnNfcHJvY19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIF9fdTggKnAsIF9fdTggKm1zZ19lbmQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEyMjYtICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMjI3OnN0YXRpYyB2b2lkIGlwX3ZzX3Byb2Nlc3NfbWVzc2FnZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgX191OCAqYnVmZmVyLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTIyOC1cXHRcXHRcXHRcXHQgIGNvbnN0IHNpemVfdCBidWZsZW4pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEyODktXFx0XFx0LyogT2xkIHR5cGUgb2YgbWVzc2FnZSAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTI5MDpcXHRcXHRpcF92c19wcm9jZXNzX21lc3NhZ2VfdjAoaXB2cywgYnVmZmVyLCBidWZsZW4pO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTI5MS1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTE3MjU9c3RhdGljIGludCBzeW5jX3RocmVhZF9iYWNrdXAodm9pZCAqZGF0YSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTc1My1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE3NTQ6XFx0XFx0XFx0aXBfdnNfcHJvY2Vzc19tZXNzYWdlKGlwdnMsIHRpbmZvLVxcdTAwM2VidWYsIGxlbik7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNzU1LVxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6NDc6MzEuMDAxMDA3NTU2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI4MzQyMDY5MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJUFZTIFN5bmNocm9uaXphdGlvbiBQcm9jZXNzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBJUFZTIHN5bmMgZGFlbW9uIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IHRoZSBwYXRoIGRhdGEgdGFrZXMgZnJvbSBuZXR3b3JrIHRvIHByb2Nlc3NpbmcuIFNvLCBJIHNlZSB0aGF0IHRoZSBgc3luY190aHJlYWRfYmFja3VwYCBmdW5jdGlvbiBpcyB0aGUgZW50cnkgcG9pbnQsIGhhbmRsaW5nIG11bHRpY2FzdCBwYWNrZXRzIHJlY2VpdmVkIG9uIHRoZSBJUFZTIHN5bmMgc29ja2V0LiBJdCB0aGVuIGNhbGxzIGBpcF92c19wcm9jZXNzX21lc3NhZ2VgLCBwYXNzaW5nIHRoZSBJUFZTIGluc3RhbmNlIChgaXB2c2ApLCB0aGUgcGFja2V0IGJ1ZmZlciAoYHRpbmZvLVx1MDAzZWJ1ZmApLCBhbmQgdGhlIHBhY2tldCBsZW5ndGggKGBsZW5gKS5cblxuTm93LCBgaXBfdnNfcHJvY2Vzc19tZXNzYWdlYCBpcyB0aGUgY2VudHJhbCBtZXNzYWdlIGRpc3BhdGNoZXIuIEl0IGNoZWNrcyB0aGUgbWVzc2FnZSB2ZXJzaW9uIGZvcm1hdC4gSWYgaXQncyB2ZXJzaW9uIDAsIGl0IGRlbGVnYXRlcyB0byBgaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwYC4gSWYgaXQncyB2ZXJzaW9uIDEsIHdoaWNoIGlzIGxpa2VseSB0aGUgbW9yZSByZWNlbnQgYW5kIGNvbXBsZXggZm9ybWF0LCBpdCBlbnRlcnMgYSBsb29wIGFuZCBjYWxscyBgaXBfdnNfcHJvY19zeW5jX2Nvbm5gIHJlcGVhdGVkbHkuIFRoaXMgc3VnZ2VzdHMgdGhhdCB2ZXJzaW9uIDEgbWVzc2FnZXMgbGlrZWx5IGNvbnRhaW4gbXVsdGlwbGUgY29ubmVjdGlvbiBzeW5jIHVwZGF0ZXMuXG5cblRoZSBuZXh0IHF1ZXN0aW9uIGlzOiBIb3cgaXMgdGhlIHN5bmMgZGFlbW9uIGl0c2VsZiBpbml0aWFsaXplZD8gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYHN0YXJ0X3N5bmNfdGhyZWFkYCBpcyBjYWxsZWQgZnJvbS4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIGhpZ2gtbGV2ZWwgcGljdHVyZSBvZiBob3cgdGhlIHdob2xlIHN5bmMgcHJvY2VzcyBpcyBpbml0aWF0ZWQuIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgY2FsbGVycyB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU2NTUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6NDc6MzMuODM1MjE3MjE5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTUwNTA3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGFydF9zeW5jX3RocmVhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTM0NzI9ZG9faXBfdnNfc2V0X2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHNvY2twdHJfdCBwdHIsIHVuc2lnbmVkIGludCBsZW4pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzUxMi1cXHRcXHRcXHRjZmcuc3luY2lkID0gZG0tXFx1MDAzZXN5bmNpZDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MzUxMzpcXHRcXHRcXHRyZXQgPSBzdGFydF9zeW5jX3RocmVhZChpcHZzLCBcXHUwMDI2Y2ZnLCBkbS1cXHUwMDNlc3RhdGUpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0zNTE0LVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9NDU2OD1zdGF0aWMgaW50IGlwX3ZzX2dlbmxfbmV3X2RhZW1vbihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IG5sYXR0ciAqKmF0dHJzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQ2MjMtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjQ2MjQ6XFx0cmV0ID0gc3RhcnRfc3luY190aHJlYWQoaXB2cywgXFx1MDAyNmMsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQ2MjUtXFx0XFx0XFx0XFx0bmxhX2dldF91MzIoYXR0cnNbSVBWU19EQUVNT05fQVRUUl9TVEFURV0pKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTcyNT1zdGF0aWMgaW50IHN5bmNfdGhyZWFkX2JhY2t1cCh2b2lkICpkYXRhKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNzYxLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTc2MjppbnQgc3RhcnRfc3luY190aHJlYWQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcHZzX3N5bmNfZGFlbW9uX2NmZyAqYyxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE3NjMtXFx0XFx0ICAgICAgaW50IHN0YXRlKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODo0NzozMy44OTA3MjY2NDhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6OTk1NzE4ODM5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElQVlMgU3luY2hyb25pemF0aW9uIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGVudHJ5IHBvaW50cyBmb3IgdGhlIGJhY2t1cCBzeW5jaHJvbml6YXRpb24gdGhyZWFkIChgc3RhcnRfc3luY190aHJlYWRgKS4gSSBjYW4gc2VlIGl0J3MgdHJpZ2dlcmVkIGluIHR3byB3YXlzOiB0aHJvdWdoIGBzZXRzb2Nrb3B0YCB3aXRoIGBJUF9WU19TT19TRVRfU1RBUlREQUVNT05gIG9uIHJhdywgVURQLCBvciBUQ1Agc29ja2V0cyAoaW4gYGRvX2lwX3ZzX3NldF9jdGxgKSwgYW5kIGFsc28gdmlhIGdlbmVyaWMgbmV0bGluayB1c2luZyBgSVBWU19DTURfTkVXX0RBRU1PTmAgd2l0aGluIGBpcF92c19nZW5sX25ld19kYWVtb25gLiBUaGF0J3MgYSBzb2xpZCBzdGFydC5cblxuVGhlIHN5bmNocm9uaXphdGlvbiB0aHJlYWQgdGhlbiBsaXN0ZW5zIG9uIGEgVURQIG11bHRpY2FzdCBzb2NrZXQsIHR5cGljYWxseSBwb3J0IDg4NDguIFRoZSBrZXkgY29uY2VybiBoZXJlLCBhcyBJIHNlZSBpdCwgaXMgdGhlIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZS4gQW55IHByb2Nlc3Mgd2l0aCBuZXR3b3JrIGFjY2VzcyDigJMgaW5jbHVkaW5nIHZpYSBsb29wYmFjaywgdmV0aCwgb3IgZXZlbiB0dW4vdGFwLCBwYWNrZXQgb3IgcmF3IHNvY2tldHMsIG9yIGRpcmVjdGx5IHRocm91Z2ggYSBzb2NrZXQgaWYgbG9jYWwgbXVsdGljYXN0IGRlbGl2ZXJ5IGlzIGVuYWJsZWQg4oCTIGNhbiBwb3RlbnRpYWxseSBpbmplY3QgVURQIHBhY2tldHMgaW50byB0aGlzIHN0cmVhbS4gVGhpcyBpbW1lZGlhdGVseSBzY3JlYW1zIFwicG90ZW50aWFsIHZ1bG5lcmFiaWxpdHlcIi5cblxuTm93LCB0aW1lIHRvIHNlZSBpZiBzeXprYWxsZXIgaGFzIGFueSByZWxldmFudCBkZXNjcmlwdGlvbnMuIEknbGwgbmVlZCB0byB1c2UgYHJlYWQtc3l6LXNwZWNgIGFuZCBgc3l6LWdyZXBwZXJgIHRvIGxvb2sgZm9yIElQVlMtcmVsYXRlZCBlbGVtZW50cy4gSSBrbm93IElQVlMgaXMgZnVsbHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBnZW5lcmljIG5ldGxpbmsgYW5kIHNldHNvY2tvcHQuXG5cblJpZ2h0LCB0aGUgcGF0Y2ggaXRzZWxmLiBJJ20gZm9jdXNpbmcgb24gdGhlIGFkZGVkIHZhbGlkYXRpb24gY29kZS4gVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBUaGUgY29yZSBvZiB0aGUgcGF0Y2ggcmV2b2x2ZXMgYXJvdW5kIHRoZSBgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFnc2AgZnVuY3Rpb24uIEl0J3MgY2hlY2tpbmcgZm9yIGEgZmV3IHNwZWNpZmljIGZsYWcgY29tYmluYXRpb25zIHRoYXQgYXJlIG5vdyBkZWVtZWQgaW52YWxpZDogYElQX1ZTX0NPTk5fRl9OT19DUE9SVGAgY29tYmluZWQgd2l0aCBgSVBfVlNfQ09OTl9GX1RFTVBMQVRFYCwgb3Igc2ltcGx5IGBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVGAuIFRoZXNlIGZsYWdzIHdlcmUgc3BlY2lmaWNhbGx5IGluIGBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjBgIGFuZCBgaXBfdnNfcHJvY19zeW5jX2Nvbm5gLlxuXG5UaGUgdmFsaWRhdGlvbiBvY2N1cnMgKmJlZm9yZSogYXBwbHlpbmcgdGhlIGBJUF9WU19DT05OX0ZfQkFDS1VQX01BU0tgIGFuZCB0aGUgYElQX1ZTX0NPTk5fRl9TWU5DYCBmbGFnLiBUaGUgcGF0Y2ggZXNzZW50aWFsbHkgZmlsdGVycyBvdXQgY29ubmVjdGlvbnMgdXNpbmcgdGhlc2UgXCJpbnZhbGlkXCIgZmxhZyBjb21iaW5hdGlvbnMuIFRoZSBgSVBfVlNfREJHYCBtZXNzYWdlcyBhcmUgYSBnb29kIGNsdWUg4oCTIHRoZSBnb2FsIGlzIHRvIHByZXZlbnQgcHJvY2Vzc2luZyBtZXNzYWdlcyB3aXRoIHRoZXNlIHNwZWNpZmljIGZsYWdzLlxuXG5TbywgbGV0J3Mgc3RlcCBiYWNrIGFuZCBjb25zaWRlciAqd2h5KiB0aGVzZSBjaGVja3MgYXJlIGFkZGVkLiBJZiBgSVBfVlNfQ09OTl9GX05PX0NQT1JUYCAqYW5kKiBgSVBfVlNfQ09OTl9GX1RFTVBMQVRFYCB3ZXJlIGFsbG93ZWQsIG9yIGlmIGBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVGAgd2FzIGFsbG93ZWQsIHdoYXQgY291bGQgZ28gd3Jvbmc/IE15IGludHVpdGlvbiBzYXlzIHRoZXJlJ3MgYSBwb3RlbnRpYWwgZm9yIHN0YXRlIGNvcnJ1cHRpb24gb3IgYnlwYXNzaW5nIGNydWNpYWwgY2hlY2tzLCBvciBldmVuIHBlcmhhcHMsIGJ5cGFzc2luZyBhIHNwZWNpZmljIGZsb3cuIFRpbWUgdG8gbG9vayB1cCB0aGUgZGVmaW5pdGlvbiBvZiBgSVBfVlNfQ09OTl9GX0JBQ0tVUF9NQVNLYCBhbmQgc2VlIGlmIHRoZSBhbnN3ZXIgbGllcyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY1NTksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5ODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6NDc6NDMuODQ3OTE4MTM3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjUzNDI2ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSVBfVlNfQ09OTl9GX0JBQ0tVUF9NQVNLXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvdWFwaS9saW51eC9pcF92cy5oLTkzLS8qIEluaXRpYWwgYml0cyBhbGxvd2VkIGluIGJhY2t1cCBzZXJ2ZXIgKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvaXBfdnMuaDo5NDojZGVmaW5lIElQX1ZTX0NPTk5fRl9CQUNLVVBfTUFTSyAoSVBfVlNfQ09OTl9GX0ZXRF9NQVNLIHwgXFxcXFxcbmluY2x1ZGUvdWFwaS9saW51eC9pcF92cy5oLTk1LVxcdFxcdFxcdFxcdCAgSVBfVlNfQ09OTl9GX05PT1VUUFVUIHwgXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODo0Nzo0My45NzMyNjY5MDRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjU1NzE1MzM1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipEaXZpbmcgaW50byB0aGUgSVBWUyBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgSVAgVmlydHVhbCBTZXJ2ZXIgKElQVlMpIHdvcmtzIGF0IGEgZnVuZGFtZW50YWwgbGV2ZWwuIEknbSBnb2luZyB0byBuYXZpZ2F0ZSB0byB0aGUgaW5jbHVkZSBmaWxlcyBmb3IgdGhlIExpbnV4IGtlcm5lbCBhbmQgc3BlY2lmaWNhbGx5IGZvY3VzIG9uIGBpbmNsdWRlL3VhcGkvbGludXgvaXBfdnMuaGAuIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB0aGUgY29kZSBzdGFydGluZyBhcm91bmQgbGluZSA5My4gSSByZW1lbWJlciB0aGlzIGlzIHdoZXJlIGEga2V5IGRhdGEgc3RydWN0dXJlIHNob3VsZCBiZSBkZWZpbmVkLCB0aGUgb25lIHRoYXQgaG9sZHMgdGhlIGNvcmUgSVBWUyBjb25maWd1cmF0aW9uIG9yIHBlcmhhcHMgdGhlIHJvdXRpbmcgcnVsZXMuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aG9zZSBzdHJ1Y3RzIGFyZSBkZWNsYXJlZCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgc3RhY2suIFRoaXMgZmlsZSBpcyBwcm9iYWJseSB0aGUgYmVzdCBwbGFjZSB0byBzdGFydC4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSBpbiB0aGVyZS4gSSdtIGV4cGVjdGluZyBzb21lIHN0YW5kYXJkIGRlZmluaXRpb25zIGhlcmUuLi4gcGVyaGFwcyB0aGUgY3JpdGljYWwgZGF0YSBzdHJ1Y3R1cmVzIGxpa2UgdGhlIElQVlMgc2VydmljZSB0YWJsZSBvciB0aGUgcmVhbCBzZXJ2ZXIgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmVzLiBJJ2xsIHByb2JhYmx5IGJlIGxvb2tpbmcgZm9yIHRoZSBmdW5kYW1lbnRhbCBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gY29uc3RydWN0IElQVlMncyBuZXR3b3JrIG9wZXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MzE4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6NDc6NDYuNTMwNDI0MzQ0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvdWFwaS9saW51eC9pcF92cy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDgwOlxcdCNkZWZpbmUgSVBfVlNfQ09OTl9GX0RST1VURVxcdDB4MDAwM1xcdFxcdC8qIGRpcmVjdCByb3V0aW5nICovXFxuICA4MTpcXHQjZGVmaW5lIElQX1ZTX0NPTk5fRl9CWVBBU1NcXHQweDAwMDRcXHRcXHQvKiBjYWNoZSBieXBhc3MgKi9cXG4gIDgyOlxcdCNkZWZpbmUgSVBfVlNfQ09OTl9GX1NZTkNcXHQweDAwMjBcXHRcXHQvKiBlbnRyeSBjcmVhdGVkIGJ5IHN5bmMgKi9cXG4gIDgzOlxcdCNkZWZpbmUgSVBfVlNfQ09OTl9GX0hBU0hFRFxcdDB4MDA0MFxcdFxcdC8qIGhhc2hlZCBlbnRyeSAqL1xcbiAgODQ6XFx0I2RlZmluZSBJUF9WU19DT05OX0ZfTk9PVVRQVVRcXHQweDAwODBcXHRcXHQvKiBubyBvdXRwdXQgcGFja2V0cyAqL1xcbiAgODU6XFx0I2RlZmluZSBJUF9WU19DT05OX0ZfSU5BQ1RJVkVcXHQweDAxMDBcXHRcXHQvKiBub3QgZXN0YWJsaXNoZWQgKi9cXG4gIDg2OlxcdCNkZWZpbmUgSVBfVlNfQ09OTl9GX09VVF9TRVFcXHQweDAyMDBcXHRcXHQvKiBtdXN0IGRvIG91dHB1dCBzZXEgYWRqdXN0ICovXFxuICA4NzpcXHQjZGVmaW5lIElQX1ZTX0NPTk5fRl9JTl9TRVFcXHQweDA0MDBcXHRcXHQvKiBtdXN0IGRvIGlucHV0IHNlcSBhZGp1c3QgKi9cXG4gIDg4OlxcdCNkZWZpbmUgSVBfVlNfQ09OTl9GX1NFUV9NQVNLXFx0MHgwNjAwXFx0XFx0LyogaW4vb3V0IHNlcXVlbmNlIG1hc2sgKi9cXG4gIDg5OlxcdCNkZWZpbmUgSVBfVlNfQ09OTl9GX05PX0NQT1JUXFx0MHgwODAwXFx0XFx0Lyogbm8gY2xpZW50IHBvcnQgc2V0IHlldCAqL1xcbiAgOTA6XFx0I2RlZmluZSBJUF9WU19DT05OX0ZfVEVNUExBVEVcXHQweDEwMDBcXHRcXHQvKiB0ZW1wbGF0ZSwgbm90IGNvbm5lY3Rpb24gKi9cXG4gIDkxOlxcdCNkZWZpbmUgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVRcXHQweDIwMDBcXHRcXHQvKiBmb3J3YXJkIG9ubHkgb25lIHBhY2tldCAqL1xcbiAgOTI6XFx0XFxuICA5MzpcXHQvKiBJbml0aWFsIGJpdHMgYWxsb3dlZCBpbiBiYWNrdXAgc2VydmVyICovXFxuICA5NDpcXHQjZGVmaW5lIElQX1ZTX0NPTk5fRl9CQUNLVVBfTUFTSyAoSVBfVlNfQ09OTl9GX0ZXRF9NQVNLIHwgXFxcXFxcbiAgOTU6XFx0XFx0XFx0XFx0XFx0ICBJUF9WU19DT05OX0ZfTk9PVVRQVVQgfCBcXFxcXFxuICA5NjpcXHRcXHRcXHRcXHRcXHQgIElQX1ZTX0NPTk5fRl9JTkFDVElWRSB8IFxcXFxcXG4gIDk3OlxcdFxcdFxcdFxcdFxcdCAgSVBfVlNfQ09OTl9GX1NFUV9NQVNLIHwgXFxcXFxcbiAgOTg6XFx0XFx0XFx0XFx0XFx0ICBJUF9WU19DT05OX0ZfTk9fQ1BPUlQgfCBcXFxcXFxuICA5OTpcXHRcXHRcXHRcXHRcXHQgIElQX1ZTX0NPTk5fRl9URU1QTEFURSBcXFxcXFxuIDEwMDpcXHRcXHRcXHRcXHRcXHQgKVxcbiAxMDE6XFx0XFxuIDEwMjpcXHQvKiBCaXRzIGFsbG93ZWQgdG8gdXBkYXRlIGluIGJhY2t1cCBzZXJ2ZXIgKi9cXG4gMTAzOlxcdCNkZWZpbmUgSVBfVlNfQ09OTl9GX0JBQ0tVUF9VUERfTUFTSyAoSVBfVlNfQ09OTl9GX0lOQUNUSVZFIHwgXFxcXFxcbiAxMDQ6XFx0XFx0XFx0XFx0XFx0ICAgICAgSVBfVlNfQ09OTl9GX1NFUV9NQVNLKVxcbiAxMDU6XFx0XFxuIDEwNjpcXHQvKiBGbGFncyB0aGF0IGFyZSBub3Qgc2VudCB0byBiYWNrdXAgc2VydmVyIHN0YXJ0IGZyb20gYml0IDE2ICovXFxuIDEwNzpcXHQjZGVmaW5lIElQX1ZTX0NPTk5fRl9ORkNUXFx0KDEgXFx1MDAzY1xcdTAwM2MgMTYpXFx0LyogdXNlIG5ldGZpbHRlciBjb25udHJhY2sgKi9cXG4gMTA4OlxcdFxcbiAxMDk6XFx0LyogQ29ubmVjdGlvbiBmbGFncyBmcm9tIGRlc3RpbmF0aW9uIHRoYXQgY2FuIGJlIGNoYW5nZWQgYnkgdXNlciBzcGFjZSAqL1xcbiAxMTA6XFx0I2RlZmluZSBJUF9WU19DT05OX0ZfREVTVF9NQVNLIChJUF9WU19DT05OX0ZfRldEX01BU0sgfCBcXFxcXFxuIDExMTpcXHRcXHRcXHRcXHRcXHRJUF9WU19DT05OX0ZfT05FX1BBQ0tFVCB8IFxcXFxcXG4gMTEyOlxcdFxcdFxcdFxcdFxcdElQX1ZTX0NPTk5fRl9ORkNUIHwgXFxcXFxcbiAxMTM6XFx0XFx0XFx0XFx0XFx0MClcXG4gMTE0OlxcdFxcbiAxMTU6XFx0I2RlZmluZSBJUF9WU19TQ0hFRE5BTUVfTUFYTEVOXFx0MTZcXG4gMTE2OlxcdCNkZWZpbmUgSVBfVlNfUEVOQU1FX01BWExFTlxcdDE2XFxuIDExNzpcXHQjZGVmaW5lIElQX1ZTX0lGTkFNRV9NQVhMRU5cXHQxNlxcbiAxMTg6XFx0XFxuIDExOTpcXHQjZGVmaW5lIElQX1ZTX1BFREFUQV9NQVhMRU4gICAgIDI1NVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODo0Nzo0Ni41MzA1MjU1NzRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTA1OTM1NDk5MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgSVBWUyBDb25uZWN0aW9uIFN5bmMgVnVsbmVyYWJpbGl0eSBhbmQgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIFRoZSBrZXkgaGVyZSBpcyBob3cgSVBWUyBoYW5kbGVzIGNvbm5lY3Rpb24gc3luY2hyb25pemF0aW9uIG1lc3NhZ2VzLCBzcGVjaWZpY2FsbHkgdmVyc2lvbnMgMCBhbmQgMS4gSXQgc2VlbXMgbGlrZSB0aGUgbWFzayBgSVBfVlNfQ09OTl9GX0JBQ0tVUF9NQVNLYCBpbmNsdWRlcyBgSVBfVlNfQ09OTl9GX05PX0NQT1JUYCBhbmQgYElQX1ZTX0NPTk5fRl9URU1QTEFURWAsIHdoaWNoIGlzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLiBJZiBib3RoIGFyZSBzZXQsIHRoYXQgY291bGQgbGVhZCB0byBzb21lIHdlaXJkIGVkZ2UgY2FzZXMuXG5cbkluIHRoZSBwcmUtcGF0Y2ggdjAgY29kZSwgdGhlIGZsYWcgbWFza2luZyB3YXMgKm1pc3NpbmcqIGBJUF9WU19DT05OX0ZfQkFDS1VQX01BU0tgIGVudGlyZWx5ISBUaGF0IG1lYW5zIGFueSBmbGFnIGNvdWxkIHNuZWFrIGluLiBXaXRoIHYxLCB0aGV5IGF0IGxlYXN0IGhhdmUgYSBtYXNrLCBidXQgaXQgKmluY2x1ZGVzKiBib3RoIHBvdGVudGlhbGx5IGNvbmZsaWN0aW5nIGZsYWdzLCBgTk9fQ1BPUlRgIGFuZCBgVEVNUExBVEVgLiBXaGF0IGhhcHBlbnMgd2hlbiBhIGNvbm5lY3Rpb24gaXMgbWFya2VkIHdpdGggKmJvdGgqIG9mIHRob3NlPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGxvZ2ljIGluIGBfX2lwX3ZzX2Nvbm5faW5fZ2V0YCBhbmQgYGlwX3ZzX2Nvbm5fbmV3YCB0byBzZWUgaG93IGl0IGhhbmRsZXMgdGVtcGxhdGVzIGFuZCBgTk9fQ1BPUlRgLiBUaGUgYGNwb3J0YCBmaWVsZCBvbiBhIHRlbXBsYXRlIGlzIDAsIHNvIEkgbmVlZCB0byBzZWUgd2hhdCB0aGUgbG9va3VwIGFuZCBjcmVhdGlvbiBsb2dpYyBkb2VzIHdpdGggdGhpcy5cblxuVGhlIGNvZGUgc2VlbXMgdG8gdXNlIGBhdG9taWNfaW5jYCBhbmQgYGF0b21pY19kZWNgIG9uIGBub19jcG9ydF9jb25uc2Agd2hlbiBgTk9fQ1BPUlRgIGlzIHNldCwgYW5kIHRoZXJlJ3MgbG9naWMgYXJvdW5kIGBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVGAgYXMgd2VsbC4gSWYgYE9ORV9QQUNLRVRgIGlzIGVuYWJsZWQsIHRoZXNlIGNvbm5lY3Rpb25zIG1pZ2h0IGJlIHNob3J0IGxpdmVkLCBvciBzeW5jZWQgaW5jb3JyZWN0bHkuXG5cblNvLCB0aGlzIGxvb2tzIGxpa2UgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eS4gSXQncyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBjb2RlIHdpdGhpbiB0aGUgSVBWUyBjb3JlIHN1YnN5c3RlbSAoYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNgKS4gVGhlIHN5bmMgZGFlbW9uIHJlY2VpdmVzIHRoZXNlIG1lc3NhZ2VzIG92ZXIgdGhlIG5ldHdvcmsgdmlhIG11bHRpY2FzdCBVRFAgcGFja2V0cy4gVGhlc2UgYXJlIHBhcnNlZCBpbiBhIGtlcm5lbCB0aHJlYWQgKGBzeW5jX3RocmVhZF9iYWNrdXBgKSB0aHJvdWdoIGEgY2hhaW4gb2YgZnVuY3Rpb25zLCBhbGwgdGhlIHdheSBkb3duIHRvIGBpcF92c19wcm9jZXNzX21lc3NhZ2VgLCBgaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwYCwgYW5kIGBpcF92c19wcm9jX3N5bmNfY29ubmAuIEl0IHNlZW1zIGxpa2UgdGhlc2UgZnVuY3Rpb25zIGFyZSB0aGUga2V5IHRvIHBhcnNpbmcgKnVudHJ1c3RlZCogbmV0d29yayBwYWNrZXRzIGNvbWluZyBmcm9tIGEgbXVsdGljYXN0IHJlY2VpdmVyLlxuXG5UaGUgcGF0Y2ggYWltcyB0byBhZGQgdmFsaWRhdGlvbiB2aWEgYGlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3NgLCBhbmQgYWRkcyBtYXNraW5nIGluIHYwLCBhbmQgcmVqZWN0cyBpbnZhbGlkIGZsYWcgY29tYmluYXRpb25zLiBTbyBpdCdzIGFkZHJlc3NpbmcgdGhpcyBpc3N1ZSBkaXJlY3RseS5cblxuQmFzZWQgb24gdGhlIGluc3RydWN0aW9ucywgdGhpcyBpcyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuIEl0IHRvdWNoZXMgY29yZSBuZXR3b3JraW5nLCBuZXRmaWx0ZXIsIElQVlMgcHJvdG9jb2xzLCBhbmQgaGFuZGxpbmcgdW50cnVzdGVkIGlucHV0LlxuXG5Ob3csIGxldCdzIG5haWwgZG93biBgRm9jdXNTeW1ib2xzYC4gV2hhdCBhcmUgdGhlIHJlbGV2YW50IHN5bWJvbHMgdG8gdGFyZ2V0IHdpdGggdGhlIGZ1enplcj8gV2UgaGF2ZSBgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFnc2Agd2hpY2ggaXMgYXQgdGhlIGhlYXJ0IG9mIHRoZSBhZGRlZCB2YWxpZGF0aW9uLiBUaGUgaXNzdWUgaXMgd2hldGhlciB0aGlzIHN0YXRpYyBoZWxwZXIgaXMgaW5saW5lZC5cblxuTG9va3MgbGlrZSBpdCdzIGEgc3RhdGljIGZ1bmN0aW9uLCBhbmQgYSBzbWFsbCBoZWxwZXIuIEl0IGlzIGNhbGxlZCBpbiBgaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwYCBhbmQgYGlwX3ZzX3Byb2Nfc3luY19jb25uYC4gVGhlIGxhdHRlciBpcyBgc3RhdGljIGlubGluZWAsIHdoaWNoIG1lYW5zIHRoZSBjb21waWxlciBtaWdodCBpbmxpbmUgaXQuIExldCdzIHNlZSB3aGF0IGNhbGxzIGl0LiBgaXBfdnNfcHJvY2Vzc19tZXNzYWdlYCAtXHUwMDNlIGBzeW5jX3RocmVhZF9iYWNrdXBgIGFuZCBgaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwYC4gVGhlIHYwIGZ1bmN0aW9uLCBhbmQgbWFpbiBwYXJzZXIsIGlzIGFyb3VuZCA3MCBsaW5lcyBhbmQgYGlwX3ZzX3Byb2Nlc3NfbWVzc2FnZWAgaXMgYXJvdW5kIDc1IGxpbmVzLCBzbywgdGhleSBhcmUgbm90IHRoYXQgYmlnIGFuZCBtaWdodCBiZSB0aGUgcmlnaHQgYEZvY3VzU3ltYm9sc2AuXG5cbkkgbmVlZCB0byBmb2N1cyBvbiB3aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnRzIHRoaXMgbG9naWMuIEFjY29yZGluZyB0byB0aGUgZ3VpZGVsaW5lcywgSSBzaG91bGQgdGFyZ2V0IG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBzbyBsZXQncyBjaGVjayBmb3IgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIGBpcF92c19zeW5jLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTUxMiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODo0Nzo1Ny4xMjQwNzkyNTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MDE4NTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aX10uKlxcXFwpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0yNjk9c3RydWN0IGlwX3ZzX3N5bmNfYnVmZiB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTI4Mi0gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjI4MzpzdGF0aWMgdm9pZCBudG9oX3NlcShzdHJ1Y3QgaXBfdnNfc2VxICpubywgc3RydWN0IGlwX3ZzX3NlcSAqaG8pXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yODQte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yOTQtICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoyOTU6c3RhdGljIHZvaWQgaHRvbl9zZXEoc3RydWN0IGlwX3ZzX3NlcSAqaG8sIHN0cnVjdCBpcF92c19zZXEgKm5vKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjk2LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MzAyPXN0YXRpYyBpbmxpbmUgc3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzozMDM6c2JfZGVxdWV1ZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwdnNfbWFzdGVyX3N5bmNfc3RhdGUgKm1zKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMzA0LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MzI3PXN0YXRpYyBpbmxpbmUgc3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzozMjg6aXBfdnNfc3luY19idWZmX2NyZWF0ZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgdW5zaWduZWQgaW50IGxlbilcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTMyOS17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTM1NC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjM1NTpzdGF0aWMgaW5saW5lIHZvaWQgaXBfdnNfc3luY19idWZmX3JlbGVhc2Uoc3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqc2IpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0zNTYte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz00MDU9c3RhdGljIGlubGluZSBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjQwNjpzZWxlY3RfbWFzdGVyX3RocmVhZF9pZChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNDA3LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9NDE0PXN0YXRpYyBpbmxpbmUgc3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo0MTU6aXBfdnNfc3luY19idWZmX2NyZWF0ZV92MChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgdW5zaWduZWQgaW50IGxlbilcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTQxNi17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTQ0MC0vKiBDaGVjayBpZiBjb25uZWN0aW9uIGlzIGNvbnRyb2xsZWQgYnkgcGVyc2lzdGVuY2UgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjQ0MTpzdGF0aWMgaW5saW5lIGJvb2wgaW5fcGVyc2lzdGVuY2Uoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNDQyLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9NTM5PXN0YXRpYyB2b2lkIGlwX3ZzX3N5bmNfY29ubl92MChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02MjgtICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo2Mjk6dm9pZCBpcF92c19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02MzAte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz04NDE9c3RhdGljIHZvaWQgaXBfdnNfcHJvY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubl9wYXJhbSAqcGFyYW0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTk1Mi0vKiBDaGVjayBmb3IgaW5jb21wYXRpYmxlIGZsYWdzICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo5NTM6c3RhdGljIGJvb2wgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyh1MzIgZmxhZ3MpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05NTQte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xMDY3PXN0YXRpYyBpbnQgaXBfdnNfcHJvY19zdHIoX191OCAqcCwgdW5zaWduZWQgaW50IHBsZW4sIHVuc2lnbmVkIGludCAqZGF0YV9sZW4sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEwODYtICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMDg3OnN0YXRpYyBpbmxpbmUgaW50IGlwX3ZzX3Byb2Nfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBfX3U4ICpwLCBfX3U4ICptc2dfZW5kKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTA4OC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTEyMjc9c3RhdGljIHZvaWQgaXBfdnNfcHJvY2Vzc19tZXNzYWdlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBfX3U4ICpidWZmZXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEyOTgtICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMjk5OnN0YXRpYyB2b2lkIHNldF9zb2NrX3NpemUoc3RydWN0IHNvY2sgKnNrLCBpbnQgbW9kZSwgaW50IHZhbClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEzMDAte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMzIwLSAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTMyMTpzdGF0aWMgdm9pZCBzZXRfbWNhc3RfbG9vcChzdHJ1Y3Qgc29jayAqc2ssIHVfY2hhciBsb29wKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTMyMi17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEzMzUtICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMzM2OnN0YXRpYyB2b2lkIHNldF9tY2FzdF90dGwoc3RydWN0IHNvY2sgKnNrLCB1X2NoYXIgdHRsKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTMzNy17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEzNTQtLyogQ29udHJvbCBmcmFnbWVudGF0aW9uIG9mIG1lc3NhZ2VzICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMzU1OnN0YXRpYyB2b2lkIHNldF9tY2FzdF9wbXR1ZGlzYyhzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMzU2LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTM3NS0gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEzNzY6c3RhdGljIGludCBzZXRfbWNhc3RfaWYoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTM3Ny17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTE0MDU9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTQwNjpqb2luX21jYXN0X2dyb3VwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluX2FkZHIgKmFkZHIsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNDA3LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTQyNz1zdGF0aWMgaW50IGpvaW5fbWNhc3RfZ3JvdXA2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluNl9hZGRyICphZGRyLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNDQyLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTQ0MzpzdGF0aWMgaW50IGJpbmRfbWNhc3RpZl9hZGRyKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNDQ0LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTU5NT1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNTk2OmlwX3ZzX3NlbmRfYXN5bmMoc3RydWN0IHNvY2tldCAqc29jaywgY29uc3QgY2hhciAqYnVmZmVyLCBjb25zdCBzaXplX3QgbGVuZ3RoKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTU5Ny17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTE2MTA9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTYxMTppcF92c19zZW5kX3N5bmNfbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBpcF92c19zeW5jX21lc2cgKm1zZylcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE2MTIte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xNjI1PXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE2MjY6aXBfdnNfcmVjZWl2ZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBjaGFyICpidWZmZXIsIGNvbnN0IHNpemVfdCBidWZsZW4pXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNjI3LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTY0MS0vKiBXYWtldXAgdGhlIG1hc3RlciB0aHJlYWQgZm9yIHNlbmRpbmcgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE2NDI6c3RhdGljIHZvaWQgbWFzdGVyX3dha2V1cF93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTY0My17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTE2NjE9c3RhdGljIGlubGluZSBzdHJ1Y3QgaXBfdnNfc3luY19idWZmICpcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE2NjI6bmV4dF9zeW5jX2J1ZmYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcHZzX21hc3Rlcl9zeW5jX3N0YXRlICptcylcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE2NjMte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNjcyLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTY3MzpzdGF0aWMgaW50IHN5bmNfdGhyZWFkX21hc3Rlcih2b2lkICpkYXRhKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTY3NC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE3MjQtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNzI1OnN0YXRpYyBpbnQgc3luY190aHJlYWRfYmFja3VwKHZvaWQgKmRhdGEpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNzI2LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTc2Mj1pbnQgc3RhcnRfc3luY190aHJlYWQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcHZzX3N5bmNfZGFlbW9uX2NmZyAqYyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTk3Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE5Nzg6aW50IHN0b3Bfc3luY190aHJlYWQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBzdGF0ZSlcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE5Nzkte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yMDY1LSAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MjA2NjppbnQgX19uZXRfaW5pdCBpcF92c19zeW5jX25ldF9pbml0KHN0cnVjdCBuZXRuc19pcHZzICppcHZzKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjA2Ny17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTIwNzMtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoyMDc0OnZvaWQgaXBfdnNfc3luY19uZXRfY2xlYW51cChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cylcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTIwNzUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODo0Nzo1Ny4xNzMxMDI1NTVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTM1NDAxMTUyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBJUFZTIFN5bmMgRGFlbW9uIEZ1enppbmcgVGFyZ2V0cyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIG1vc3QgZWZmZWN0aXZlIGVudHJ5IHBvaW50cyBmb3IgZnV6emluZyB0aGUgSVBWUyBzeW5jIGRhZW1vbiB1c2luZyBzeXprYWxsZXIuXG5cbkZpcnN0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSwgbm9uLXN0YXRpYyBBUEkgZW50cnkgcG9pbnRzIGluIGBpcF92c19zeW5jLmNgLiBJIHNlZTogYHN0YXJ0X3N5bmNfdGhyZWFkYCwgYHN0b3Bfc3luY190aHJlYWRgLCBgaXBfdnNfc3luY19jb25uYCwgYGlwX3ZzX3N5bmNfbmV0X2luaXRgLCBhbmQgYGlwX3ZzX3N5bmNfbmV0X2NsZWFudXBgLiBUaG9zZSBzZWVtIGxpa2Ugb2J2aW91cyBzdGFydGluZyBwb2ludHMuXG5cbk5leHQsIEkgbmVlZCB0byB6ZXJvIGluIG9uIHdoYXQgKmZ1bmN0aW9ucyogd2l0aGluIGBpcF92c19zeW5jLmNgIGFyZSBhY3R1YWxseSAqbW9kaWZpZWQqIG9yIGNvcmUgdG8gdGhlIHN5bmMgcHJvY2Vzcy4gSSd2ZSBnb3Q6IGBpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzYCwgYGlwX3ZzX3Byb2Nlc3NfbWVzc2FnZV92MGAsIGBpcF92c19wcm9jX3N5bmNfY29ubmAsIGBpcF92c19wcm9jZXNzX21lc3NhZ2VgICh3aGljaCBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBjYWxscyBib3RoIGBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjBgIGFuZCBgaXBfdnNfcHJvY19zeW5jX2Nvbm5gKSwgYW5kIHRoZSBiYWNrdXAgdGhyZWFkIGBzeW5jX3RocmVhZF9iYWNrdXBgLlxuXG5Ob3csIGRpZ2dpbmcgZGVlcGVyLiBJIHNlZSB0aGF0IGBzdGFydF9zeW5jX3RocmVhZGAgaXMgdGhlIGNydWNpYWwgZW50cnkgcG9pbnQsIHNpbmNlIHVzZXJzcGFjZSBjYWxscyBpdCB2aWEgbmV0bGluayBvciBgc2V0c29ja29wdGAgd2l0aCBgSVBfVlNfU1RBVEVfQkFDS1VQYCB0byBsYXVuY2ggdGhlIGRhZW1vbi4gVGhlcmVmb3JlLCB0aGF0IGZ1bmN0aW9uIGlzIGNyaXRpY2FsLiBJbiBjb25qdW5jdGlvbiwgdGhlIG90aGVyIGZ1bmN0aW9ucyBtZW50aW9uZWQgc2hvdWxkIGFsc28gYmUgdGVzdGVkLCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoYXQgZW50cnkuXG5cbkdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2Ygc3l6a2FsbGVyLCBpdCB0YXJnZXRzIGFueSBzeW1ib2wgYXZhaWxhYmxlIGluIGAvcHJvYy9rYWxsc3ltc2AsIGV2ZW4gc3RhdGljIGZ1bmN0aW9ucyAoYXMgbG9uZyBhcyB0aGV5IGFyZW4ndCBpbmxpbmVkKS4gU28sIGluY2x1ZGluZyBib3RoIHRoZSBtb2RpZmllZCBzdGF0aWMgZnVuY3Rpb25zIGxpa2UgYGlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3NgLCBgaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwYCwgYGlwX3ZzX3Byb2Nfc3luY19jb25uYCwgYW5kIGBpcF92c19wcm9jZXNzX21lc3NhZ2VgLCAqYWxvbmcqIHdpdGggdGhlIHByaW1hcnkgZmVhdHVyZSBlbnRyeXBvaW50IGBzdGFydF9zeW5jX3RocmVhZGAgYW5kIHRoZSBgc3luY190aHJlYWRfYmFja3VwYCBsb29wLCBzaG91bGQgZ2l2ZSBtZSBleGNlbGxlbnQgY292ZXJhZ2Ugd2l0aG91dCB3YXN0aW5nIGZ1enppbmcgY3ljbGVzIG9uIGlycmVsZXZhbnQgdGFyZ2V0cy5cblxuRmluYWxseSwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIGVuc3VyZSB0aGUgcmlnaHQga2VybmVsIGNvbmZpZyBvcHRpb25zIGFyZSBzZXQuIEkga25vdyBgQ09ORklHX0lQX1ZTYCBpcyBlc3NlbnRpYWwsIG9idmlvdXNseS4gSSdtIGNoZWNraW5nIHRoZSBgS2NvbmZpZ2AgZmlsZSBhbmQgaXQgc2VlbXMgdGhpcyBhbHNvIGRlcGVuZHMgb24gYElORVQgXHUwMDI2XHUwMDI2IE5FVEZJTFRFUmAsIGFuZCBwb3RlbnRpYWxseSBgTkZfQ09OTlRSQUNLYCAob3Igbm90KS4gQnV0LCBiYXNlZCBvbiBteSBxdWljayBwZXJ1c2FsIG9mIGBpcF92c19zeW5jLmNgIHRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb3IgYCNpZmRlZmAgYmxvY2tzIGFyb3VuZCB0aGUgc3luYyBkYWVtb24gaXRzZWxmLiBJdCBsb29rcyBsaWtlIHRoZSBzeW5jIGRhZW1vbiBpcyBhbHdheXMgY29tcGlsZWQgd2hlbiBgSVBfVlNgIGlzIGVuYWJsZWQuIEV4Y2VsbGVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUwOTIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6NDg6MDIuNTI3MTE2NTAxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTQ1MTYyNTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWZkZWYuKkNPTkZJR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9NjI5PXZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02NjktXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo2NzA6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02NzEtXFx0aWYgKGNwLVxcdTAwM2VhZiA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzMyLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NzMzOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzM0LVxcdGlmIChjcC1cXHUwMDNlYWYgPT0gQUZfSU5FVDYpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9Nzg4PWlwX3ZzX2Nvbm5fZmlsbF9wYXJhbV9zeW5jKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgYWYsIHVuaW9uIGlwX3ZzX3N5bmNfY29ubiAqc2MsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTc5Mi17XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo3OTM6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03OTQtXFx0aWYgKGFmID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xMDg3PXN0YXRpYyBpbmxpbmUgaW50IGlwX3ZzX3Byb2Nfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBfX3U4ICpwLCBfX3U4ICptc2dfZW5kKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMTAxLVxcdGlmIChzLVxcdTAwM2V2Ni50eXBlIFxcdTAwMjYgU1RZUEVfRl9JTkVUNikge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTEwMjojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTExMDMtXFx0XFx0YWYgPSBBRl9JTkVUNjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTIwNS1cXHRcXHRcXHRcXHQpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTIwNjojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEyMDctXFx0ZWxzZVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xMzIxPXN0YXRpYyB2b2lkIHNldF9tY2FzdF9sb29wKHN0cnVjdCBzb2NrICpzaywgdV9jaGFyIGxvb3ApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEzMjQtXFx0aW5ldF9hc3NpZ25fYml0KE1DX0xPT1AsIHNrLCBsb29wKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEzMjU6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMzI2LVxcdGlmIChSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX2ZhbWlseSkgPT0gQUZfSU5FVDYpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTMzNj1zdGF0aWMgdm9pZCBzZXRfbWNhc3RfdHRsKHN0cnVjdCBzb2NrICpzaywgdV9jaGFyIHR0bClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTM0Mi1cXHRXUklURV9PTkNFKGluZXQtXFx1MDAzZW1jX3R0bCwgdHRsKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEzNDM6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMzQ0LVxcdGlmIChzay1cXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTEzNTU9c3RhdGljIHZvaWQgc2V0X21jYXN0X3BtdHVkaXNjKHN0cnVjdCBzb2NrICpzaywgaW50IHZhbClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTM2MS1cXHRXUklURV9PTkNFKGluZXQtXFx1MDAzZXBtdHVkaXNjLCB2YWwpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTM2MjojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEzNjMtXFx0aWYgKHNrLVxcdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTM3Nj1zdGF0aWMgaW50IHNldF9tY2FzdF9pZihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEzODUtXFx0LyogIGluZXQtXFx1MDAzZW1jX2FkZHIgID0gMDsgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEzODY6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMzg3LVxcdGlmIChzay1cXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTE0MDY9am9pbl9tY2FzdF9ncm91cChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbl9hZGRyICphZGRyLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNDI1LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTQyNjojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE0Mjctc3RhdGljIGludCBqb2luX21jYXN0X2dyb3VwNihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbjZfYWRkciAqYWRkcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTU0ND1zdGF0aWMgaW50IG1ha2VfcmVjZWl2ZV9zb2NrKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgaWQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE1NzQtXFx0Lyogam9pbiB0aGUgbXVsdGljYXN0IGdyb3VwICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNTc1OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTU3Ni1cXHRpZiAoaXB2cy1cXHUwMDNlYmNmZy5tY2FzdF9hZiA9PSBBRl9JTkVUNilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6NDg6MDIuODgxNjM5NDgzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ4MzQ4MzIwMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIElQVlMgU3luY2hyb25pemF0aW9uIFBhdGNoKipcblxuT2theSwgc28gYGlwX3ZzX3N5bmMub2AgaXMgZGVmaW5pdGVseSBidWlsdCBhbG9uZ3NpZGUgYGlwX3ZzYCB3aGVuZXZlciB0aGUgbWFpbiBgQ09ORklHX0lQX1ZTYCBvcHRpb24gaXMgZW5hYmxlZCDigJMgdGhhdCdzIGEgZ2l2ZW4uIEFuZCwgb2YgY291cnNlLCBgQ09ORklHX0lQX1ZTX0lQVjZgIHByb3ZpZGVzIElQdjYgc3VwcG9ydCwgYXMgZXhwZWN0ZWQuIExldCdzIG1ha2Ugc3VyZSBgQ09ORklHX0lQX1ZTYCBpdHNlbGYgaXMgZW5hYmxlZC4gSXRzIHBhcmVudHMgYXJlIGBORVRGSUxURVJgIGFuZCBgSU5FVGAsIHdoaWNoIGFyZSBmYWlybHkgZnVuZGFtZW50YWwuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgaW1wb3J0YW50IGZ1bmN0aW9uczpcblxuKiAgIGBpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzYDogRmxhZyB2YWxpZGF0aW9uLCB0aGF0J3MgY3J1Y2lhbC5cbiogICBgaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwYCwgYGlwX3ZzX3Byb2Nlc3NfbWVzc2FnZWA6IEkgbmVlZCB0byBsb29rIGF0IGJvdGggdjAgYW5kIHYxIHN5bmMgbWVzc2FnZXMuXG4qICAgYGlwX3ZzX3Byb2Nfc3luY19jb25uYDogQ29ubmVjdGluZyBzeW5jaHJvbml6YXRpb24uXG4qICAgYHN0YXJ0X3N5bmNfdGhyZWFkYCwgYHN5bmNfdGhyZWFkX2JhY2t1cGA6IFRocmVhZCBtYW5hZ2VtZW50LlxuXG5IZXJlJ3MgbXkgRW5hYmxlQ29uZmlncyBjaGVja2xpc3Q6XG5cbiogICBgSVBfVlNgXG4qICAgYE5FVEZJTFRFUmBcbiogICBgSU5FVGBcblxuV29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gVGhlIHBhdGNoIGRlYWxzIHdpdGggaW5jb21pbmcgc3luY2hyb25pemF0aW9uIG1lc3NhZ2VzIGZyb20gYmFja3VwIElQVlMgdGhyZWFkcyDigJMgcG90ZW50aWFsbHkgZnJvbSB1bnRydXN0ZWQgc291cmNlcywgYW5kIGZsYWdzIHdoaWNoIGNhbiBoYXZlIGluY29tcGF0aWJpbGl0aWVzLiBJdCBsb29rcyBsaWtlIGBpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzYCBwcmV2ZW50cyB0aGluZ3MgbGlrZSBgSVBfVlNfQ09OTl9GX05PX0NQT1JUYCBhbmQgYElQX1ZTX0NPTk5fRl9URU1QTEFURWAgZnJvbSBtaXhpbmcgd2l0aCBgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVRgIGZsYWdzLiBTaW5jZSB0aGlzIGNvZGUgcnVucyBpbiB0aGUga2VybmVsIGFuZCBwcm9jZXNzZXMgbmV0d29yayBwYWNrZXRzLCBpdCdzIGRlZmluaXRlbHkgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy4gSXQgaW1wYWN0cyB0aGUgbmV0ZmlsdGVyL0lQVlMgc3Vic3lzdGVtIGFuZCByZWFjaGFibGUgbmV0d29yayBjb2RlLlxuXG5GaW5hbGx5LCBsZXQncyBydW4gYSBzYW5pdHkgY2hlY2sgb24gdGhlIGluc3RydWN0aW9uIHNldDpcblxuKiAgIE9uZSBgc2V0LXJlc3VsdHNgIGNhbGwuIENoZWNrLlxuKiAgIEVuYWJsZUNvbmZpZ3MgYXJlIGNvcnJlY3QuIENoZWNrLlxuKiAgIEZvY3VzU3ltYm9scyBhcmUgc3BlY2lmaWMsIG5vdCBnZW5lcmljIOKAkyB0aGVzZSBhcmUgZ29vZCB0YXJnZXRzIGZvciBkZWVwZXIgYW5hbHlzaXMuIENoZWNrLlxuKiAgIFRoZSByZWFzb25pbmcgaXMgY29uY2lzZSBhbmQgdG8gdGhlIHBvaW50LiBDaGVjay5cblxuRXZlcnl0aGluZyBjaGVja3Mgb3V0LiBJJ20gc2F0aXNmaWVkLiBUaW1lIHRvIG1vdmUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3ODI3LCJPdXRwdXRUb2tlbnMiOjIwNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODo0ODowNy43MTY0NzM1MzlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDcxMjE4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfVlNcIixcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3NcIixcbiAgICBcImlwX3ZzX3Byb2Nlc3NfbWVzc2FnZV92MFwiLFxuICAgIFwiaXBfdnNfcHJvY19zeW5jX2Nvbm5cIixcbiAgICBcImlwX3ZzX3Byb2Nlc3NfbWVzc2FnZVwiLFxuICAgIFwic3luY190aHJlYWRfYmFja3VwXCIsXG4gICAgXCJzdGFydF9zeW5jX3RocmVhZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZmxhZyB2YWxpZGF0aW9uIChpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzKSBhbmQgcHJvcGVyIG1hc2tpbmcgd2hlbiBwYXJzaW5nIGluY29taW5nIElQVlMgc3luYyBtZXNzYWdlcyBpbiB0aGUgYmFja3VwIGRhZW1vbiwgcmVqZWN0aW5nIGluY29tcGF0aWJsZSBmbGFncyBzdWNoIGFzIElQX1ZTX0NPTk5fRl9OT19DUE9SVCB3aXRoIElQX1ZTX0NPTk5fRl9URU1QTEFURSBvciBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVCBpbiBib3RoIHYwIGFuZCB2MSBtZXNzYWdlIGZvcm1hdHMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmsgcHJvdG9jb2wgcHJvY2Vzc2luZyBpbiBuZXRmaWx0ZXIvSVBWUyBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9WU1wiLFxuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfdnNfc3luY192YWxpZGF0ZV9mbGFnc1wiLFxuICAgIFwiaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwXCIsXG4gICAgXCJpcF92c19wcm9jX3N5bmNfY29ublwiLFxuICAgIFwiaXBfdnNfcHJvY2Vzc19tZXNzYWdlXCIsXG4gICAgXCJzeW5jX3RocmVhZF9iYWNrdXBcIixcbiAgICBcInN0YXJ0X3N5bmNfdGhyZWFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmbGFnIHZhbGlkYXRpb24gKGlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3MpIGFuZCBwcm9wZXIgbWFza2luZyB3aGVuIHBhcnNpbmcgaW5jb21pbmcgSVBWUyBzeW5jIG1lc3NhZ2VzIGluIHRoZSBiYWNrdXAgZGFlbW9uLCByZWplY3RpbmcgaW5jb21wYXRpYmxlIGZsYWdzIHN1Y2ggYXMgSVBfVlNfQ09OTl9GX05PX0NQT1JUIHdpdGggSVBfVlNfQ09OTl9GX1RFTVBMQVRFIG9yIElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUIGluIGJvdGggdjAgYW5kIHYxIG1lc3NhZ2UgZm9ybWF0cy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0d29yayBwcm90b2NvbCBwcm9jZXNzaW5nIGluIG5ldGZpbHRlci9JUFZTIGFuZCB3YXJyYW50cyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODo0ODowNy43OTExOTMwMTdaIiwiU2VxIjozMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNjcyNDI3NDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6NDg6MDcuNzkxNjE0NjI4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NjI2NzE5OTkzMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZmxhZyB2YWxpZGF0aW9uIChgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFnc2ApIGluIHRoZSBJUFZTIHN5bmNocm9uaXphdGlvbiBtZXNzYWdlIGhhbmRsaW5nIGZ1bmN0aW9ucyAoYGlwX3ZzX3Byb2Nlc3NfbWVzc2FnZV92MGAgYW5kIGBpcF92c19wcm9jX3N5bmNfY29ubmApIHRvIHJlamVjdCBpbnZhbGlkIGZsYWcgY29tYmluYXRpb25zIChlLmcuLCBgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVRgIG9yIGBJUF9WU19DT05OX0ZfTk9fQ1BPUlRgIGNvbWJpbmVkIHdpdGggYElQX1ZTX0NPTk5fRl9URU1QTEFURWApLiBUaGUgZmxhZ3MgdmFyaWFibGUgaXMgZGlyZWN0bHkgaW5pdGlhbGl6ZWQgZnJvbSByZWNlaXZlZCBuZXR3b3JrIHBhY2tldCBkYXRhIChgbnRvaHNgIC8gYG50b2hsYCksIGFuZCB0aGUgdmFsaWRhdGlvbiBsb2dpYyBvbmx5IGFkZHMgZWFybHkgcmVqZWN0aW9uIG9mIGludmFsaWQgc3luYyBtZXNzYWdlcy4gTm8gaGVhcC9zdGFjayBtZW1vcnkgYWxsb2NhdGlvbnMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQsIG5vIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb25zIG9yIGNvcHlpbmcgdG8gdXNlciBzcGFjZSBhcmUgYWx0ZXJlZCwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBwYWRkaW5nIGFyZSByZWFkIG9yIGV4cG9zZWQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHN0ZW1taW5nIGZyb20gaW5jb21wYXRpYmxlIGZsYWdzIChzdWNoIGFzIHN0YXRlIGluY29uc2lzdGVuY2llcywgcmVmY291bnQgZXJyb3JzLCBvciB1c2UtYWZ0ZXItZnJlZSkgYXJlIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgS0FTQU4vcmVmY291bnQgY2hlY2tzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZmNzI2OTkxZTZhZjY5NzEzMTFhMGEwMDY5MmIwYTFiYjFjMjM5M2RcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAxODo0NjozNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jXG5pbmRleCA1MzgzYWVhZmIwYWVkLi42OWRjMjgxNTNlYzEyIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY1xuQEAgLTk0OSw2ICs5NDksMjEgQEAgc3RhdGljIHZvaWQgaXBfdnNfcHJvY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubl9wYXJhbSAqcGFcbiBcdGlwX3ZzX2Nvbm5fcHV0KGNwKTtcbiB9XG4gXG4rLyogQ2hlY2sgZm9yIGluY29tcGF0aWJsZSBmbGFncyAqL1xuK3N0YXRpYyBib29sIGlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3ModTMyIGZsYWdzKVxuK3tcbitcdC8qIFdlIGRvIG5vdCBleHBlY3QgTk9fQ1BPUlQsIGVzcGVjaWFsbHkgdG8gYWxsb3cgbG9va3Vwc1xuK1x0ICogdG8gaGl0IHRlbXBsYXRlc1xuK1x0ICovXG4rXHRpZiAoZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9OT19DUE9SVCkge1xuK1x0XHRpZiAoZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9URU1QTEFURSlcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4rXHRpZiAoZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4gLypcbiAgKiAgUHJvY2VzcyByZWNlaXZlZCBtdWx0aWNhc3QgbWVzc2FnZSBmb3IgVmVyc2lvbiAwXG4gICovXG5AQCAtOTcyLDggKzk4Nyw3IEBAIHN0YXRpYyB2b2lkIGlwX3ZzX3Byb2Nlc3NfbWVzc2FnZV92MChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgY29uc3QgY2hhciAqYnVmZmVyXG4gXHRcdFx0cmV0dXJuO1xuIFx0XHR9XG4gXHRcdHMgPSAoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl92MCAqKSBwO1xuLVx0XHRmbGFncyA9IG50b2hzKHMtXHUwMDNlZmxhZ3MpIHwgSVBfVlNfQ09OTl9GX1NZTkM7XG4tXHRcdGZsYWdzIFx1MDAyNj0gfklQX1ZTX0NPTk5fRl9IQVNIRUQ7XG4rXHRcdGZsYWdzID0gbnRvaHMocy1cdTAwM2VmbGFncyk7XG4gXHRcdGlmIChmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX1NFUV9NQVNLKSB7XG4gXHRcdFx0b3B0ID0gKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqKVx1MDAyNnNbMV07XG4gXHRcdFx0cCArPSBGVUxMX0NPTk5fU0laRTtcbkBAIC05ODYsNiArMTAwMCwxMyBAQCBzdGF0aWMgdm9pZCBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGNvbnN0IGNoYXIgKmJ1ZmZlclxuIFx0XHRcdHAgKz0gU0lNUExFX0NPTk5fU0laRTtcbiBcdFx0fVxuIFxuK1x0XHRpZiAoIWlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3MoZmxhZ3MpKSB7XG4rXHRcdFx0SVBfVlNfREJHKDIsIFwiQkFDS1VQIHYwLCBJbnZhbGlkIGZsYWdzIDB4JVhcXG5cIiwgZmxhZ3MpO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXHRcdGZsYWdzIFx1MDAyNj0gSVBfVlNfQ09OTl9GX0JBQ0tVUF9NQVNLO1xuK1x0XHRmbGFncyB8PSBJUF9WU19DT05OX0ZfU1lOQztcbitcbiBcdFx0c3RhdGUgPSBudG9ocyhzLVx1MDAzZXN0YXRlKTtcbiBcdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9URU1QTEFURSkpIHtcbiBcdFx0XHRwcCA9IGlwX3ZzX3Byb3RvX2dldChzLVx1MDAzZXByb3RvY29sKTtcbkBAIC0xMTQxLDcgKzExNjIsMTMgQEAgc3RhdGljIGlubGluZSBpbnQgaXBfdnNfcHJvY19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIF9fdTggKnAsIF9fdTggKm1cbiBcdH1cbiBcbiBcdC8qIEdldCBmbGFncyBhbmQgTWFzayBvZmYgdW5zdXBwb3J0ZWQgKi9cbi1cdGZsYWdzICA9IG50b2hsKHMtXHUwMDNldjQuZmxhZ3MpIFx1MDAyNiBJUF9WU19DT05OX0ZfQkFDS1VQX01BU0s7XG4rXHRmbGFncyA9IG50b2hsKHMtXHUwMDNldjQuZmxhZ3MpO1xuK1x0aWYgKCFpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzKGZsYWdzKSkge1xuK1x0XHRJUF9WU19EQkcoMywgXCJCQUNLVVAsIEludmFsaWQgZmxhZ3MgMHglWFxcblwiLCBmbGFncyk7XG4rXHRcdHJldGMgPSAyNTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXHRmbGFncyBcdTAwMjY9IElQX1ZTX0NPTk5fRl9CQUNLVVBfTUFTSztcbiBcdGZsYWdzIHw9IElQX1ZTX0NPTk5fRl9TWU5DO1xuIFx0c3RhdGUgPSBudG9ocyhzLVx1MDAzZXY0LnN0YXRlKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjQ4OjA3Ljc5MTYxNTYyOFoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMDY3MjU1NTY5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIFNlc3Npb24gSnVzdGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyeWluZyB0byBkZWNpZGUgaWYgaXQgd2FycmFudHMgZmlyaW5nIHVwIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTGV0J3MgYnJlYWsgaXQgZG93bi5cblxuRmlyc3QsIEkgc2VlIHRoZSBwYXRjaCBtb2RpZmllcyBgbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY2AuIFRoaXMgaXMgYWJvdXQgSVBWUyAoSVAgVmlydHVhbCBTZXJ2ZXIpLCBzcGVjaWZpY2FsbHkgdGhlIHN5bmNocm9uaXphdGlvbiBjb2RlLiBJIGtub3cgdGhpcyBhcmVhIGlzIGEgY3JpdGljYWwgY29tcG9uZW50IGZvciBsb2FkIGJhbGFuY2luZyBhbmQgaGlnaCBhdmFpbGFiaWxpdHksIGFuZCB0aGVyZWZvcmUgYSBwbGFjZSB3aGVyZSBzdWJ0bGUgZXJyb3JzIGNhbiBoYXZlIHNpZ25pZmljYW50IGltcGFjdC4gU3luY2hyb25pemF0aW9uLCBieSBpdHMgbmF0dXJlLCBpcyBhIGNvbW1vbiBzb3VyY2Ugb2YgY29uY3VycmVuY3kgaXNzdWVzLlxuXG5UaGUgY29yZSBvZiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIHZhbGlkYXRpb24gZnVuY3Rpb24sIGBpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzKClgLiAgSXQgc2VlbXMgd2UncmUgbm93IGV4cGxpY2l0bHkgY2hlY2tpbmcgdGhlIHZhbGlkaXR5IG9mIGNvbm5lY3Rpb24gZmxhZ3MgcmVjZWl2ZWQgZHVyaW5nIHN5bmNocm9uaXphdGlvbi4gVGhlIGNvZGUgaXMgc3BlY2lmaWNhbGx5IGd1YXJkaW5nIGFnYWluc3QgYElQX1ZTX0NPTk5fRl9OT19DUE9SVGAgYW5kIGBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVGAgaW4gY2VydGFpbiBjb21iaW5hdGlvbnMsIGFuZCBub3cgYWRkcyBhIGNoZWNrIHRvIGNvbmZpcm0gZmxhZ3MgZG9uJ3QgZ2V0ICdoYXNoZWQnLCBiZWZvcmUgYXBwbHlpbmcgdGhlIHByb3BlciBtYXNrLCB3aGljaCBpbmNyZWFzZXMgdGhlIGxpa2VsaWhvb2Qgb2YgYW4gZXJyb3Igc3RhdGUgYmVpbmcgY2F1Z2h0LiBJJ20gaW5mZXJyaW5nIHRoaXMgaXMgYmVjYXVzZSBjZXJ0YWluIGZsYWcgY29tYmluYXRpb25zIGNhbiBsZWFkIHRvIGluY29uc2lzdGVuY2llcyBvciBlcnJvcnMgaW4gaG93IGNvbm5lY3Rpb25zIGFyZSBoYW5kbGVkLCBlc3BlY2lhbGx5IHdoZW4gdXNlZCB3aXRoIGBJUF9WU19DT05OX0ZfVEVNUExBVEVgLiBUaGUgY2hlY2tzIGFyZSBhbHNvIGFkZGVkIHRvIGJvdGggdGhlIHYwIGFuZCB2NCBwcm9jZXNzaW5nLlxuXG5UaGUgY29tbWl0IGxvZyBpbXBsaWVzIHRoYXQgdGhlc2UgY2hlY2tzIGFyZSByZWxhdGVkIHRvIGFuIGlzc3VlIHdoZXJlIGJhZCBmbGFnIHZhbHVlcyBhcmUgYmVpbmcgcmVjZWl2ZWQgZHVyaW5nIHRoZSBzeW5jaHJvbml6YXRpb24gcHJvY2VzcyBhbmQgdGhlIHBhdGNoIG5vdyBndWFyZHMgYWdhaW5zdCB0aGF0LiBHaXZlbiB0aGUgc2Vuc2l0aXZlIG5hdHVyZSBvZiB0aGlzIGNvZGUsIHRoZSBjaGFuZ2UgaW4gYmVoYXZpb3IgaXMgd29ydGggbG9va2luZyBpbnRvLlxuXG5HaXZlbiB0aGUgcG90ZW50aWFsIGZvciBzdWJ0bGUgZXJyb3JzIGluIHRoZSBzeW5jaHJvbml6YXRpb24gcHJvY2VzcywgYW5kIHRoZSBpbnRyb2R1Y3Rpb24gb2YgbmV3IGNoZWNrcywgdGhpcyBwYXRjaCBpcyBhIHN0cm9uZyBjYW5kaWRhdGUgZm9yIEtNU0FOIGZ1enppbmcuIFRoZSBjaGVja3Mgd2lsbCBsaWtlbHkgaW5jcmVhc2UgdGhlIGxpa2VsaWhvb2Qgb2YgZGlzY292ZXJpbmcgYW5kIGV4cG9zaW5nIGFueSBleGlzdGluZyBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuIEl0IGFsc28gc3VnZ2VzdHMgdGhhdCB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgbW9yZSBjb21wbGV4IHRoYW4gaXQgZmlyc3QgYXBwZWFycywgd2hpY2ggcmVxdWlyZXMgZXh0cmEgdGVzdGluZyBhbmQgdmFsaWRhdGlvbi4gSSdsbCByZWNvbW1lbmQgdGhlIGZ1enppbmcgc2Vzc2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgwOSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMjQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODo0ODoxOC40NjQxNzUwMThaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MTAwMjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3ZzX3Byb2Nfc3luY19jb25uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xMDY3PXN0YXRpYyBpbnQgaXBfdnNfcHJvY19zdHIoX191OCAqcCwgdW5zaWduZWQgaW50IHBsZW4sIHVuc2lnbmVkIGludCAqZGF0YV9sZW4sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEwODYtICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMDg3OnN0YXRpYyBpbmxpbmUgaW50IGlwX3ZzX3Byb2Nfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBfX3U4ICpwLCBfX3U4ICptc2dfZW5kKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTA4OC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTEyMjc9c3RhdGljIHZvaWQgaXBfdnNfcHJvY2Vzc19tZXNzYWdlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBfX3U4ICpidWZmZXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEyNzgtXFx0XFx0XFx0LyogUHJvY2VzcyBhIHNpbmdsZSBzeW5jX2Nvbm4gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEyNzk6XFx0XFx0XFx0cmV0YyA9IGlwX3ZzX3Byb2Nfc3luY19jb25uKGlwdnMsIHAsIG1zZ19lbmQpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTI4MC1cXHRcXHRcXHRpZiAocmV0YyBcXHUwMDNjIDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6NDg6MTguNTEyMjgwOTM3WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIxNDM4Mzk0NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJUFZTIFN5bmNocm9uaXphdGlvbiBDb2RlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgSVBWUyBzeW5jcyBpdHMgc3RhdGUsIHBhcnRpY3VsYXJseSB3aGVuIGl0IGNvbWVzIHRvIHJlcGxpY2F0aW5nIGFuZCBtYWludGFpbmluZyBjbHVzdGVyIGNvbnNpc3RlbmN5LiBHaXZlbiB0aGUgbmVlZCB0byBkZWVwbHkgdW5kZXJzdGFuZCB0aGUgc3luY2hyb25pemF0aW9uIHByb2Nlc3MsIEkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG9uIHR3byBzcGVjaWZpYyBhcmVhcyB3aXRoaW4gYGlwX3ZzX3N5bmMuY2AuIExldCdzIHRhcmdldCBsaW5lcyA5NTAtMTAxMCBhbmQgdGhlbiBsaW5lcyAxMTMwLTExNzUuIFRoYXQgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhvc2Ugc2VjdGlvbnMgbGlrZWx5IGRlYWwgd2l0aCBjb3JlIHN5bmNocm9uaXphdGlvbiBvcGVyYXRpb25zIOKAkyBwZXJoYXBzIHRoZSBoZWFydCBvZiBob3cgZGlmZmVyZW50IG5vZGVzIG1haW50YWluIGEgY29uc2lzdGVudCB2aWV3IG9mIHRoZSB2aXJ0dWFsIHNlcnZpY2VzIGFuZCByZWFsIHNlcnZlcnMuIEZvY3VzaW5nIG9uIHRob3NlIHNlY3Rpb25zIHNob3VsZCBxdWlja2x5IHJldmVhbCBzb21lIG9mIHRoZSBudWFuY2VzIG9mIHRoZSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyBpbiB1c2UuIEkgZXhwZWN0IHRvIHNlZSBkYXRhIHN0cnVjdHVyZXMsIGFsZ29yaXRobXMsIGFuZCBwb3NzaWJseSBzb21lIG5ldHdvcmsgcGFja2V0IGludGVyYWN0aW9ucy4gVGltZSB0byBkaWcgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2MjMsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODo0ODoyMC42NTYxMjM1MTdaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxNDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTQwLFxuICBcIkxpbmVDb3VudFwiOiA3NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTQwOlxcdFxcdH0gZWxzZSB7XFxuIDk0MTpcXHRcXHRcXHRzdHJ1Y3QgaXBfdnNfcHJvdG9fZGF0YSAqcGQ7XFxuIDk0MjpcXHRcXG4gOTQzOlxcdFxcdFxcdHBkID0gaXBfdnNfcHJvdG9fZGF0YV9nZXQoaXB2cywgcHJvdG9jb2wpO1xcbiA5NDQ6XFx0XFx0XFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfVEVNUExBVEUpIFxcdTAwMjZcXHUwMDI2IHBkIFxcdTAwMjZcXHUwMDI2IHBkLVxcdTAwM2V0aW1lb3V0X3RhYmxlKVxcbiA5NDU6XFx0XFx0XFx0XFx0Y3AtXFx1MDAzZXRpbWVvdXQgPSBwZC1cXHUwMDNldGltZW91dF90YWJsZVtzdGF0ZV07XFxuIDk0NjpcXHRcXHRcXHRlbHNlXFxuIDk0NzpcXHRcXHRcXHRcXHRjcC1cXHUwMDNldGltZW91dCA9ICgzKjYwKkhaKTtcXG4gOTQ4OlxcdFxcdH1cXG4gOTQ5OlxcdFxcdGlwX3ZzX2Nvbm5fcHV0KGNwKTtcXG4gOTUwOlxcdH1cXG4gOTUxOlxcdFxcbiA5NTI6XFx0LyogQ2hlY2sgZm9yIGluY29tcGF0aWJsZSBmbGFncyAqL1xcbiA5NTM6XFx0c3RhdGljIGJvb2wgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyh1MzIgZmxhZ3MpXFxuIDk1NDpcXHR7XFxuIDk1NTpcXHRcXHQvKiBXZSBkbyBub3QgZXhwZWN0IE5PX0NQT1JULCBlc3BlY2lhbGx5IHRvIGFsbG93IGxvb2t1cHNcXG4gOTU2OlxcdFxcdCAqIHRvIGhpdCB0ZW1wbGF0ZXNcXG4gOTU3OlxcdFxcdCAqL1xcbiA5NTg6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX05PX0NQT1JUKSB7XFxuIDk1OTpcXHRcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfVEVNUExBVEUpXFxuIDk2MDpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDk2MTpcXHRcXHR9XFxuIDk2MjpcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVClcXG4gOTYzOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gOTY0OlxcdFxcdHJldHVybiB0cnVlO1xcbiA5NjU6XFx0fVxcbiA5NjY6XFx0XFxuIDk2NzpcXHQvKlxcbiA5Njg6XFx0ICogIFByb2Nlc3MgcmVjZWl2ZWQgbXVsdGljYXN0IG1lc3NhZ2UgZm9yIFZlcnNpb24gMFxcbiA5Njk6XFx0ICovXFxuIDk3MDpcXHRzdGF0aWMgdm9pZCBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGNvbnN0IGNoYXIgKmJ1ZmZlcixcXG4gOTcxOlxcdFxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc2l6ZV90IGJ1ZmxlbilcXG4gOTcyOlxcdHtcXG4gOTczOlxcdFxcdHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjAgKm0gPSAoc3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCAqKWJ1ZmZlcjtcXG4gOTc0OlxcdFxcdHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAgKnM7XFxuIDk3NTpcXHRcXHRzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKm9wdDtcXG4gOTc2OlxcdFxcdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHA7XFxuIDk3NzpcXHRcXHRzdHJ1Y3QgaXBfdnNfY29ubl9wYXJhbSBwYXJhbTtcXG4gOTc4OlxcdFxcdGNoYXIgKnA7XFxuIDk3OTpcXHRcXHRpbnQgaTtcXG4gOTgwOlxcdFxcbiA5ODE6XFx0XFx0cCA9IChjaGFyICopYnVmZmVyICsgc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjApO1xcbiA5ODI6XFx0XFx0Zm9yIChpPTA7IGlcXHUwMDNjbS1cXHUwMDNlbnJfY29ubnM7IGkrKykge1xcbiA5ODM6XFx0XFx0XFx0dW5zaWduZWQgaW50IGZsYWdzLCBzdGF0ZTtcXG4gOTg0OlxcdFxcbiA5ODU6XFx0XFx0XFx0aWYgKHAgKyBTSU1QTEVfQ09OTl9TSVpFIFxcdTAwM2UgYnVmZmVyK2J1Zmxlbikge1xcbiA5ODY6XFx0XFx0XFx0XFx0SVBfVlNfRVJSX1JMKFxcXCJCQUNLVVAgdjAsIGJvZ3VzIGNvbm5cXFxcblxcXCIpO1xcbiA5ODc6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiA5ODg6XFx0XFx0XFx0fVxcbiA5ODk6XFx0XFx0XFx0cyA9IChzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwICopIHA7XFxuIDk5MDpcXHRcXHRcXHRmbGFncyA9IG50b2hzKHMtXFx1MDAzZWZsYWdzKTtcXG4gOTkxOlxcdFxcdFxcdGlmIChmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9TRVFfTUFTSykge1xcbiA5OTI6XFx0XFx0XFx0XFx0b3B0ID0gKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqKVxcdTAwMjZzWzFdO1xcbiA5OTM6XFx0XFx0XFx0XFx0cCArPSBGVUxMX0NPTk5fU0laRTtcXG4gOTk0OlxcdFxcdFxcdFxcdGlmIChwIFxcdTAwM2UgYnVmZmVyK2J1Zmxlbikge1xcbiA5OTU6XFx0XFx0XFx0XFx0XFx0SVBfVlNfRVJSX1JMKFxcXCJCQUNLVVAgdjAsIERyb3BwaW5nIGJ1ZmZlciBib2d1cyBjb25uIG9wdGlvbnNcXFxcblxcXCIpO1xcbiA5OTY6XFx0XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiA5OTc6XFx0XFx0XFx0XFx0fVxcbiA5OTg6XFx0XFx0XFx0fSBlbHNlIHtcXG4gOTk5OlxcdFxcdFxcdFxcdG9wdCA9IE5VTEw7XFxuMTAwMDpcXHRcXHRcXHRcXHRwICs9IFNJTVBMRV9DT05OX1NJWkU7XFxuMTAwMTpcXHRcXHRcXHR9XFxuMTAwMjpcXHRcXG4xMDAzOlxcdFxcdFxcdGlmICghaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyhmbGFncykpIHtcXG4xMDA0OlxcdFxcdFxcdFxcdElQX1ZTX0RCRygyLCBcXFwiQkFDS1VQIHYwLCBJbnZhbGlkIGZsYWdzIDB4JVhcXFxcblxcXCIsIGZsYWdzKTtcXG4xMDA1OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjEwMDY6XFx0XFx0XFx0fVxcbjEwMDc6XFx0XFx0XFx0ZmxhZ3MgXFx1MDAyNj0gSVBfVlNfQ09OTl9GX0JBQ0tVUF9NQVNLO1xcbjEwMDg6XFx0XFx0XFx0ZmxhZ3MgfD0gSVBfVlNfQ09OTl9GX1NZTkM7XFxuMTAwOTpcXHRcXG4xMDEwOlxcdFxcdFxcdHN0YXRlID0gbnRvaHMocy1cXHUwMDNlc3RhdGUpO1xcbjEwMTE6XFx0XFx0XFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfVEVNUExBVEUpKSB7XFxuMTAxMjpcXHRcXHRcXHRcXHRwcCA9IGlwX3ZzX3Byb3RvX2dldChzLVxcdTAwM2Vwcm90b2NvbCk7XFxuMTAxMzpcXHRcXHRcXHRcXHRpZiAoIXBwKSB7XFxuMTAxNDpcXHRcXHRcXHRcXHRcXHRJUF9WU19EQkcoMiwgXFxcIkJBQ0tVUCB2MCwgVW5zdXBwb3J0ZWQgcHJvdG9jb2wgJXVcXFxcblxcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjQ4OjIwLjY1NjI5MjI5N1oiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0ODczMjI1Mjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGFzIGlmIGl0J3MgbXkgb3duIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgRGVlcGVyOiBMaW5lcyAxMTQwLTExNzUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGZvY3VzIGluIGEgYml0LiBUaGUgYnJvYWRlciBjb250ZXh0IGlzIGNsZWFyLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gY2F0Y2hpbmcgdGhlIG51YW5jZXMuIEknbSBnb2luZyB0byB6ZXJvIGluIG9uIGxpbmVzIDExNDAtMTE3NS4gVGhhdCBzZWdtZW50LCBpZiBJIHJlY2FsbCBjb3JyZWN0bHksIGlzIHdoZXJlIHRoZXkgcmVhbGx5IHN0YXJ0IHRvIHVucGFjayB0aGUgaW1wbGljYXRpb25zIG9mIFticmllZmx5IG1lbnRpb24gdGhlIHRvcGljIGZyb20gYmVmb3JlXS4gSXQncyBsaWtlbHkgYSBjcml0aWNhbCBzZWN0aW9uIGZvciB1bmRlcnN0YW5kaW5nIFttZW50aW9uIHNvbWV0aGluZyBzcGVjaWZpYywgbGlrZSBcInRoZSBpbnRlcnBsYXkgb2YgWCBhbmQgWVwiIG9yIFwidGhlIHNwZWNpZmljIG1lY2hhbmlzbSBhdCBwbGF5XCJdLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIFttZW50aW9uIGtleSB0aGluZ3MgeW91J3JlIGxvb2tpbmcgZm9yLCBsaWtlIFwiYW55IHN1YnRsZSBzaGlmdHMgaW4gdGhlIGFyZ3VtZW50LFwiIFwiZXZpZGVuY2Ugc3VwcG9ydGluZyB0aGUgaHlwb3RoZXNpcyxcIiBvciBcInBvdGVudGlhbCBjb3VudGVyYXJndW1lbnRzXCJdLiBNeSBnb2FsIGlzIHRvIGV4dHJhY3QgdGhlIGNvcmUgaWRlYXMgcHJlc2VudGVkIGFuZCBtYWtlIHN1cmUgdGhleSBhbGlnbiB3aXRoIG15IGV4aXN0aW5nIGZyYW1ld29yaywgb3IgaWRlbnRpZnkgZXhhY3RseSAqd2hlcmUqIHRoZXkgZGV2aWF0ZSBhbmQgd2h5LiBJIGV4cGVjdCB0byBiZSBhYmxlIHRvIG1ha2Ugc29tZSBpbnNpZ2h0ZnVsIGNvbW1lbnRzIG9uIHRoaXMgc2VjdGlvbjsgSSdtIHJlYWR5IHRvIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjEwNiwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6NDg6MjUuNTI5NTE5ODg2WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODY3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNDA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgSVBfVlNfUEVEQVRBX01BWExFTiwgXFx1MDAyNm9wdF9mbGFncyxcXG4xMTQxOlxcdFxcdFxcdFxcdFxcdFxcdCAgIElQVlNfT1BUX0ZfUEVfREFUQSkpXFxuMTE0MjpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLTYwO1xcbjExNDM6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTE0NDpcXHRcXG4xMTQ1OlxcdFxcdFxcdGNhc2UgSVBWU19PUFRfUEVfTkFNRTpcXG4xMTQ2OlxcdFxcdFxcdFxcdGlmIChpcF92c19wcm9jX3N0cihwLCBwbGVuLFxcdTAwMjZwZV9uYW1lX2xlbiwgXFx1MDAyNnBlX25hbWUsXFxuMTE0NzpcXHRcXHRcXHRcXHRcXHRcXHQgICBJUF9WU19QRU5BTUVfTUFYTEVOLCBcXHUwMDI2b3B0X2ZsYWdzLFxcbjExNDg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgSVBWU19PUFRfRl9QRV9OQU1FKSlcXG4xMTQ5OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtNzA7XFxuMTE1MDpcXHRcXHRcXHRcXHRicmVhaztcXG4xMTUxOlxcdFxcbjExNTI6XFx0XFx0XFx0ZGVmYXVsdDpcXG4xMTUzOlxcdFxcdFxcdFxcdC8qIFBhcmFtIGRhdGEgbWFuZGF0b3J5ID8gKi9cXG4xMTU0OlxcdFxcdFxcdFxcdGlmICghKHB0eXBlIFxcdTAwMjYgSVBWU19PUFRfRl9QQVJBTSkpIHtcXG4xMTU1OlxcdFxcdFxcdFxcdFxcdElQX1ZTX0RCRygzLCBcXFwiQkFDS1VQLCBVbmtub3duIG1hbmRhdG9yeSBwYXJhbSAlZCBmb3VuZFxcXFxuXFxcIixcXG4xMTU2OlxcdFxcdFxcdFxcdFxcdFxcdCAgcHR5cGUgXFx1MDAyNiB+SVBWU19PUFRfRl9QQVJBTSk7XFxuMTE1NzpcXHRcXHRcXHRcXHRcXHRyZXRjID0gMjA7XFxuMTE1ODpcXHRcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4xMTU5OlxcdFxcdFxcdFxcdH1cXG4xMTYwOlxcdFxcdFxcdH1cXG4xMTYxOlxcdFxcdFxcdHAgKz0gcGxlbjsgIC8qIE5leHQgb3B0aW9uICovXFxuMTE2MjpcXHRcXHR9XFxuMTE2MzpcXHRcXG4xMTY0OlxcdFxcdC8qIEdldCBmbGFncyBhbmQgTWFzayBvZmYgdW5zdXBwb3J0ZWQgKi9cXG4xMTY1OlxcdFxcdGZsYWdzID0gbnRvaGwocy1cXHUwMDNldjQuZmxhZ3MpO1xcbjExNjY6XFx0XFx0aWYgKCFpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzKGZsYWdzKSkge1xcbjExNjc6XFx0XFx0XFx0SVBfVlNfREJHKDMsIFxcXCJCQUNLVVAsIEludmFsaWQgZmxhZ3MgMHglWFxcXFxuXFxcIiwgZmxhZ3MpO1xcbjExNjg6XFx0XFx0XFx0cmV0YyA9IDI1O1xcbjExNjk6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTE3MDpcXHRcXHR9XFxuMTE3MTpcXHRcXHRmbGFncyBcXHUwMDI2PSBJUF9WU19DT05OX0ZfQkFDS1VQX01BU0s7XFxuMTE3MjpcXHRcXHRmbGFncyB8PSBJUF9WU19DT05OX0ZfU1lOQztcXG4xMTczOlxcdFxcdHN0YXRlID0gbnRvaHMocy1cXHUwMDNldjQuc3RhdGUpO1xcbjExNzQ6XFx0XFxuMTE3NTpcXHRcXHRpZiAoIShmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9URU1QTEFURSkpIHtcXG4xMTc2OlxcdFxcdFxcdHBwID0gaXBfdnNfcHJvdG9fZ2V0KHMtXFx1MDAzZXY0LnByb3RvY29sKTtcXG4xMTc3OlxcdFxcdFxcdGlmICghcHApIHtcXG4xMTc4OlxcdFxcdFxcdFxcdElQX1ZTX0RCRygzLFxcXCJCQUNLVVAsIFVuc3VwcG9ydGVkIHByb3RvY29sICV1XFxcXG5cXFwiLFxcbjExNzk6XFx0XFx0XFx0XFx0XFx0cy1cXHUwMDNldjQucHJvdG9jb2wpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODo0ODoyNS41Mjk2ODA1OTZaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjY2NjM1OTI1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzOlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgSGlzdG9yeSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgcGFydGljdWxhciBjaGFuZ2UuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgZ2l0IGhpc3RvcnkuIEEgc2ltcGxlIGBnaXQgbG9nYCBvbiB0aGlzIGNvbW1pdCBzaG91bGQgYmUgbXkgZ28tdG8uIEkgd2FudCB0byBzZWUgd2hhdCB0aGUgY29tbWl0IG1lc3NhZ2Ugc2F5cyDigJMgd2FzIGl0IGEgYnVnIGZpeD8gV2FzIGl0IGludHJvZHVjaW5nIGEgbmV3IGZlYXR1cmU/IFdoYXQgd2FzIHRoZSBjb250ZXh0PyBUaGUgY29tbWl0IG1lc3NhZ2Ugc2hvdWxkIGdpdmUgbWUgdGhlIGNydWNpYWwgaGlnaC1sZXZlbCBvdmVydmlldy4gRnJvbSB0aGVyZSwgSSdsbCBiZSBhYmxlIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IHRoaXMgY2hhbmdlIGhhZCwgYW5kIHdoeSB0aGUgY2hhbmdlIHdhcyBtYWRlIGluIHRoZSBmaXJzdCBwbGFjZS4gSSdtIHJlYWxseSBob3BpbmcgdGhlcmUncyBhIGdvb2QgZGVzY3JpcHRpb24sIG1heWJlIGV2ZW4gYSBsaW5rIHRvIGEgdGlja2V0LiBUaGlzIGlzIHRoZSBmYXN0ZXN0IHdheSB0byBnZXQgdG8gdGhlIHJvb3Qgb2YgdGhlIHJlYXNvbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA1MiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6NDg6MjguMTk2MDQyMzYzWiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODExMjgxNjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz04NDE9c3RhdGljIHZvaWQgaXBfdnNfcHJvY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubl9wYXJhbSAqcGFyYW0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTk1Mi0vKiBDaGVjayBmb3IgaW5jb21wYXRpYmxlIGZsYWdzICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo5NTM6c3RhdGljIGJvb2wgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyh1MzIgZmxhZ3MpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05NTQte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz05NzA9c3RhdGljIHZvaWQgaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBjb25zdCBjaGFyICpidWZmZXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEwMDItXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMDAzOlxcdFxcdGlmICghaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyhmbGFncykpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEwMDQtXFx0XFx0XFx0SVBfVlNfREJHKDIsIFxcXCJCQUNLVVAgdjAsIEludmFsaWQgZmxhZ3MgMHglWFxcXFxuXFxcIiwgZmxhZ3MpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xMDg3PXN0YXRpYyBpbmxpbmUgaW50IGlwX3ZzX3Byb2Nfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBfX3U4ICpwLCBfX3U4ICptc2dfZW5kKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMTY1LVxcdGZsYWdzID0gbnRvaGwocy1cXHUwMDNldjQuZmxhZ3MpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTE2NjpcXHRpZiAoIWlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3MoZmxhZ3MpKSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMTY3LVxcdFxcdElQX1ZTX0RCRygzLCBcXFwiQkFDS1VQLCBJbnZhbGlkIGZsYWdzIDB4JVhcXFxcblxcXCIsIGZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6NDg6MzAuMDA3MzMwNDcxWiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjYzNTM2MDcwOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBJUFZTIENvbm5lY3Rpb24gRmxhZ3MqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgY2VydGFpbiBjb25uZWN0aW9uIGZsYWdzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBpbXBsaWNhdGlvbnMgaWYgZWl0aGVyIGBJUF9WU19DT05OX0ZfVEVNUExBVEUgfCBJUF9WU19DT05OX0ZfTk9fQ1BPUlRgIG9yIGBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVGAgd2FzIHNldCBlYXJsaWVyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGhpc3RvcnkgYW5kIHNlZSB3aGF0IGNoYW5nZXMgb3IgYnVncyBwcm9tcHRlZCB0aGVpciBpbnRyb2R1Y3Rpb24gb3IgbW9kaWZpY2F0aW9uLiBJdCB3b3VsZCBiZSBpZGVhbCBpZiBJIGhhZCBkaXJlY3QgYWNjZXNzIHRvIGEgYGdpdGAgY29tbWFuZCBmb3IgYSBxdWljayBoaXN0b3J5IGNoZWNrLCBidXQgdGhhdCdzIG5vdCBhdmFpbGFibGUuIE5vIHdvcnJpZXMsIEkgY2FuIHdvcmsgd2l0aCB0aGUgZGlmZi4gVGltZSB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBzb3VyY2UsIHNwZWNpZmljYWxseSBgbmV0L25ldGZpbHRlci9pcHZzYCBhbmQgZXhhbWluZSB0aGUgZGVmaW5pdGlvbnMgYW5kIHVzYWdlIG9mIGBJUF9WU19DT05OX0ZfTk9fQ1BPUlRgIGFuZCBgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVRgIHRvIGdldCB0aGUgd2hvbGUgcGljdHVyZS4gSSdtIHN1cmUgSSdsbCBmaW5kIHdoYXQgSSBuZWVkIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzY0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjQ4OjM2LjM2MDk0MDE2NFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA0NDQ3MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSVBfVlNfQ09OTl9GX05PX0NQT1JUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2c1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTM2Nz1fX2lwX3ZzX2Nvbm5faW5fZ2V0KGNvbnN0IHN0cnVjdCBpcF92c19jb25uX3BhcmFtICpwKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0zOTUtXFx0XFx0XFx0XFx0ICAgICghcC1cXHUwMDNlY3BvcnQgXlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6Mzk2OlxcdFxcdFxcdFxcdCAgICAgKCEoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX05PX0NQT1JUKSkpIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0zOTctXFx0XFx0XFx0XFx0ICAgIHAtXFx1MDAzZXByb3RvY29sID09IGNwLVxcdTAwM2Vwcm90b2NvbCkge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz02NDM9dm9pZCBpcF92c19jb25uX2ZpbGxfY3BvcnQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBfX2JlMTYgY3BvcnQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTY4NC1cXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmNwLVxcdTAwM2Vsb2NrKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjY4NTpcXHRcXHRcXHRpZiAoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX05PX0NQT1JUIFxcdTAwMjZcXHUwMDI2IGJ5X21lKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNjg2LVxcdFxcdFxcdFxcdGNwLVxcdTAwM2VjcG9ydCA9IDA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTc1Ny1cXHQvKiBGaWxsIGNwb3J0IG9uY2UsIGV2ZW4gaWYgbXVsdGlwbGUgcGFja2V0cyB0cnkgdG8gZG8gaXQgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjc1ODpcXHRpZiAoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX05PX0NQT1JUIFxcdTAwMjZcXHUwMDI2ICghY3AtXFx1MDAzZWNwb3J0IHx8IGJ5X21lKSkge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNzU5LVxcdFxcdC8qIElmIHdlIHJhY2Ugd2l0aCByZXNpemluZyBtYWtlIHN1cmUgY3BvcnQgaXMgc2V0IGZvciBkaXIgMSAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy03NjUtXFx0XFx0XFx0YXRvbWljX2RlYyhcXHUwMDI2aXB2cy1cXHUwMDNlbm9fY3BvcnRfY29ubnNbYWZfaWRdKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjc2NjpcXHRcXHRcXHRjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfklQX1ZTX0NPTk5fRl9OT19DUE9SVDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTc2Ny1cXHRcXHR9XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTg3NT1zdHJ1Y3QgaXBfdnNfcmh0ICppcF92c19jb25uX3RhYl9hbGxvYyhzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGJ1Y2tldHMsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTg4Mi1cXHRzY291bnRzID0gY2xhbXAoYnVja2V0cyBcXHUwMDNlXFx1MDAzZSA2LCAxLCAyNTYpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6ODgzOlxcdC8qIGxvY2tzOiBiYXNlZCBvbiBwYXJhbGxlbCBJUF9WU19DT05OX0ZfTk9fQ1BPUlQgb3BlcmF0aW9ucyArIHJlc2l6ZSAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtODg0LVxcdGxvY2tzID0gY2xhbXAoOCwgMSwgc2NvdW50cyk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTEzNDc9c3RhdGljIHZvaWQgaXBfdnNfY29ubl9leHBpcmUoc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEzOTQtXFx0XFx0aXBfdnNfdW5iaW5kX2Rlc3QoY3ApO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTM5NTpcXHRcXHRpZiAodW5saWtlbHkoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX05PX0NQT1JUKSkge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTM5Ni1cXHRcXHRcXHRpbnQgYWZfaWQgPSBpcF92c19hZl9pbmRleChjcC1cXHUwMDNlYWYpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz0xNDQ0PWlwX3ZzX2Nvbm5fbmV3KGNvbnN0IHN0cnVjdCBpcF92c19jb25uX3BhcmFtICpwLCBpbnQgZGVzdF9hZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTUxNi1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjE1MTc6XFx0aWYgKHVubGlrZWx5KGZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX05PX0NQT1JUKSkge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTUxOC1cXHRcXHRpbnQgYWZfaWQgPSBpcF92c19hZl9pbmRleChjcC1cXHUwMDNlYWYpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jPTI1ND1zdGF0aWMgaW50IGlwX3ZzX2Z0cF9vdXQoc3RydWN0IGlwX3ZzX2FwcCAqYXBwLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtMzM3LVxcdFxcdG5fY3AgPSBpcF92c19jb25uX25ldyhcXHUwMDI2cCwgY3AtXFx1MDAzZWFmLCBcXHUwMDI2ZnJvbSwgcG9ydCxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM6MzM4OlxcdFxcdFxcdFxcdCAgICAgIElQX1ZTX0NPTk5fRl9OT19DUE9SVCB8XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTMzOS1cXHRcXHRcXHRcXHQgICAgICBJUF9WU19DT05OX0ZfTkZDVCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9OTUzPXN0YXRpYyBib29sIGlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3ModTMyIGZsYWdzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05NTctXFx0ICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo5NTg6XFx0aWYgKGZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX05PX0NQT1JUKSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05NTktXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX1RFTVBMQVRFKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYz03ODc9aXBfdnNfbmF0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYy03OTMtXFx0LyogY2hlY2sgaWYgaXQgaXMgYSBjb25uZWN0aW9uIG9mIG5vLWNsaWVudC1wb3J0ICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYzo3OTQ6XFx0aWYgKHVubGlrZWx5KGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9OT19DUE9SVCkpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jLTc5NS1cXHRcXHRfX2JlMTYgX3B0LCAqcDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM9ODcxPWlwX3ZzX25hdF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMtODc3LVxcdC8qIGNoZWNrIGlmIGl0IGlzIGEgY29ubmVjdGlvbiBvZiBuby1jbGllbnQtcG9ydCAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM6ODc4OlxcdGlmICh1bmxpa2VseShjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfTk9fQ1BPUlQgXFx1MDAyNlxcdTAwMjYgIWlwdnNoLVxcdTAwM2VmcmFnb2ZmcykpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jLTg3OS1cXHRcXHRfX2JlMTYgX3B0LCAqcDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6NDg6MzYuNDIxMzkwMjEyWiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIzNTgyMzg5NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFscmVhZHkgZGVlcCBpbiB0aGUgd2VlZHMgb2YgbmV0d29yayBwZXJmb3JtYW5jZSBhbmFseXNpczpcblxuKipBbmFseXppbmcgTmV0d29yayBUcmFmZmljOiBUaGUgSW1wb3J0YW5jZSBvZiBTaW5nbGUtUGFja2V0IE9ic2VydmF0aW9ucyoqXG5cbkFscmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBuZXR3b3JrIGRhdGEgYW5kIGltbWVkaWF0ZWx5IG15IGJyYWluIGhvbmVzIGluIG9uIHNvbWV0aGluZyBpbnRlcmVzdGluZzogYElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUYC4gVGhpcyBpcyBrZXkuIEl0J3MgYSBmbGFnLCBhbiBpbmRpY2F0b3IsIGEgZGF0YXBvaW50IHRoYXQncyBnb2luZyB0byBiZSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBlbnRpcmUgcGljdHVyZS4gSSBpbW1lZGlhdGVseSByZWNvZ25pemUgdGhpcyBtZWFucyB0aGF0IHRoZSBjb25uZWN0aW9uIGlzIHJlbGF0ZWQgdG8gdGhlIHZlcnkgZmlyc3QgcGFja2V0IG9mIGEgc3BlY2lmaWMgZGF0YSBzdHJlYW0gb3IgY29udmVyc2F0aW9uLCBpbiBvdGhlciB3b3JkcywgdGhhdCB0aGVyZSBpcyBvbmx5IG9uZSBwYWNrZXQgaW52b2x2ZWQuIEl0J3Mgbm90IGp1c3QgYW5vdGhlciBkYXRhIHBvaW50OyBpdCdzIGEgdml0YWwgcGllY2Ugb2YgdGhlIHB1enpsZS4gVGhpcyBoZWxwcyBtZSBuYXJyb3cgZG93biBwb3NzaWJsZSBpc3N1ZXMsIHBvdGVudGlhbCBib3R0bGVuZWNrcywgb3IgdW5pcXVlIGJlaGF2aW9yLiBUaGlzIHNpbmdsZSBvYnNlcnZhdGlvbiBpcyB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGludmVzdGlnYXRlIGluIG9yZGVyIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg2NCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjQ4OjM4Ljc3OTYzMTkyOFoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4MDA4MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSVBfVlNfQ09OTl9GX09ORV9QQUNLRVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9MjYxPXN0YXRpYyBpbmxpbmUgaW50IGlwX3ZzX2Nvbm5faGFzaChzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTI3MC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjI3MTpcXHRpZiAoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0yNzItXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTMxNj1zdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY29ubl91bmxpbmsoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0zMjQtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzozMjU6XFx0aWYgKGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMzI2LVxcdFxcdHJldHVybiByZWZjb3VudF9kZWNfaWZfb25lKFxcdTAwMjZjcC1cXHUwMDNlcmVmY250KTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9NjIwPXN0YXRpYyB2b2lkIF9faXBfdnNfY29ubl9wdXRfdGltZXIoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNjIxLXtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjYyMjpcXHR1bnNpZ25lZCBsb25nIHQgPSAoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpID9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTYyMy1cXHRcXHQwIDogY3AtXFx1MDAzZXRpbWVvdXQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTYyOT12b2lkIGlwX3ZzX2Nvbm5fcHV0KHN0cnVjdCBpcF92c19jb25uICpjcClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTYzMC17XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo2MzE6XFx0aWYgKChjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVCkgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTYzMi1cXHQgICAgKHJlZmNvdW50X3JlYWQoXFx1MDAyNmNwLVxcdTAwM2VyZWZjbnQpID09IDEpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTEwODk9aXBfdnNfYmluZF9kZXN0KHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTExMDItXFx0aWYgKGNwLVxcdTAwM2Vwcm90b2NvbCAhPSBJUFBST1RPX1VEUClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjExMDM6XFx0XFx0Y29ubl9mbGFncyBcXHUwMDI2PSB+SVBfVlNfQ09OTl9GX09ORV9QQUNLRVQ7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMTA0LVxcdGZsYWdzID0gY3AtXFx1MDAzZWZsYWdzO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMTA3LVxcdFxcdC8qIFN5bmNlZCBjb25ucyBhcmUgaGFzaGVkLCBzbyB0aGV5IGNhbiBub3QgZ2V0IHRoaXMgZmxhZyAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTEwODpcXHRcXHRjb25uX2ZsYWdzIFxcdTAwMjY9IH5JUF9WU19DT05OX0ZfT05FX1BBQ0tFVDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTExMDktXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTEzNDc9c3RhdGljIHZvaWQgaXBfdnNfY29ubl9leHBpcmUoc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEzODEtXFx0XFx0aWYgKChjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfTkZDVCkgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjEzODI6XFx0XFx0ICAgICEoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpKSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMzgzLVxcdFxcdFxcdC8qIERvIG5vdCBhY2Nlc3MgY29ubnRyYWNrcyBkdXJpbmcgc3Vic3lzIGNsZWFudXBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTM5OS1cXHRcXHR9XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxNDAwOlxcdFxcdGlmIChjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTE0MDEtXFx0XFx0XFx0aXBfdnNfY29ubl9yY3VfZnJlZShcXHUwMDI2Y3AtXFx1MDAzZXJjdV9oZWFkKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9MTQ0ND1pcF92c19jb25uX25ldyhjb25zdCBzdHJ1Y3QgaXBfdnNfY29ubl9wYXJhbSAqcCwgaW50IGRlc3RfYWYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTE1NDctXFx0ICogU29tZXRpbWVzIGtlZXBpbmcgY29ubnRyYWNrIGNhbiBiZSB1c2VmdWwgZm9yXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxNTQ4OlxcdCAqIElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUIHRvby5cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTE1NDktXFx0ICovXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTQzMD1pcF92c19zY2hlZF9wZXJzaXN0KHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTU2OC1cXHRcXHQgXFx1MDAyNlxcdTAwMjYgaXBoLVxcdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1VEUCkgP1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6NTY5OlxcdFxcdElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUIDogMDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTU3MC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9NjE4PWlwX3ZzX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTcxNS1cXHRcXHQgXFx1MDAyNlxcdTAwMjYgaXBoLVxcdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1VEUCkgP1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6NzE2OlxcdFxcdElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUIDogMDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTcxNy1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9NzYyPWludCBpcF92c19sZWF2ZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy03ODMtXFx0XFx0XFx0XFx0ICAgICAgaXBoLVxcdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1VEUCkgP1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6Nzg0OlxcdFxcdFxcdFxcdCAgICAgIElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUIDogMDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTc4NS1cXHRcXHR1bmlvbiBuZl9pbmV0X2FkZHIgZGFkZHIgPSB7IC5hbGwgPSB7IDAsIDAsIDAsIDAgfSB9O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy04MTAtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzo4MTE6XFx0XFx0aWYgKChjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVCkgXFx1MDAyNlxcdTAwMjYgY3AtXFx1MDAzZWNvbnRyb2wpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy04MTItXFx0XFx0XFx0YXRvbWljX2luYyhcXHUwMDI2Y3AtXFx1MDAzZWNvbnRyb2wtXFx1MDAzZWluX3BrdHMpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0xMzA5PXN0cnVjdCBpcF92c19jb25uICppcF92c19uZXdfY29ubl9vdXQoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTM2NS1cXHRmbGFncyA9ICgoc3ZjLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX1NWQ19GX09ORVBBQ0tFVCkgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjEzNjY6XFx0XFx0IGlwaC1cXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19VRFApID8gSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQgOiAwO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTM2Ny1cXHQvKiBjcmVhdGUgY29ubmVjdGlvbiAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0yMDk2PWlwX3ZzX2luX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMjY5LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MjI3MDpcXHRpZiAoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMjcxLVxcdFxcdHBrdHMgPSBzeXNjdGxfc3luY190aHJlc2hvbGQoaXB2cyk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIyNzYtXFx0XFx0aXBfdnNfc3luY19jb25uKGlwdnMsIGNwLCBwa3RzKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIyNzc6XFx0ZWxzZSBpZiAoKGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUKSBcXHUwMDI2XFx1MDAyNiBjcC1cXHUwMDNlY29udHJvbClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIyNzgtXFx0XFx0LyogaW5jcmVtZW50IGlzIGRvbmUgaW5zaWRlIGlwX3ZzX3N5bmNfY29ubiB0b28gKi9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19uZmN0LmM9NzA9aXBfdnNfdXBkYXRlX2Nvbm50cmFjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBvdXRpbilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19uZmN0LmMtODQtXFx0LyogTmV2ZXIgYWx0ZXIgY29ubnRyYWNrIGZvciBPUFMgY29ubnMgKG5vIHJlcGx5IGlzIGV4cGVjdGVkKSAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19uZmN0LmM6ODU6XFx0aWYgKGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19uZmN0LmMtODYtXFx0XFx0cmV0dXJuO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz01Mzk9c3RhdGljIHZvaWQgaXBfdnNfc3luY19jb25uX3YwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU1MS1cXHQvKiBEbyBub3Qgc3luYyBPTkUgUEFDS0VUICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo1NTI6XFx0aWYgKGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTUzLVxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9NjI5PXZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02NDQtXFx0LyogRG8gbm90IHN5bmMgT05FIFBBQ0tFVCAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NjQ1OlxcdGlmIChjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY0Ni1cXHRcXHRnb3RvIGNvbnRyb2w7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTk1Mz1zdGF0aWMgYm9vbCBpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzKHUzMiBmbGFncylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtOTYxLVxcdH1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjk2MjpcXHRpZiAoZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTk2My1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjQ4OjM4LjgyNTQzNzI4N1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMTYzODAyMzU5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBJUFZTIFN5bmNocm9uaXphdGlvbiBEYWVtb24gRmxhZyBWYWxpZGF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSdyZSBsb29raW5nIGF0IGEgcGF0Y2ggaW4gYGlwX3ZzX3N5bmMuY2Agd2hpY2gsIGZyb20gd2hhdCBJIGdhdGhlciwgY29uY2VybnMgaXRzZWxmIHdpdGggdmFsaWRhdGluZyBjb25uZWN0aW9uIGZsYWdzIHdpdGhpbiB0aGUgSVBWUyBzeW5jaHJvbml6YXRpb24gZGFlbW9uLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2UgdGhlIGNvZGUgaXMgcmVzcG9uc2libGUgZm9yIHJlY2VpdmluZyBzeW5jIG1lc3NhZ2VzLCBsaWtlbHkgVURQIG11bHRpY2FzdCwgZnJvbSBvdGhlciBJUFZTIGRpcmVjdG9ycy4gVGhlc2UgbWVzc2FnZXMgYXJlIHBhcnNlZCB1c2luZyBgaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwYCBhbmQgYGlwX3ZzX3Byb2Nfc3luY19jb25uYCB3aGljaCBpbiB0dXJuIGNhbGwgdGhlIG5ldyBgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFnc2AgZnVuY3Rpb24uXG5cblRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpcyB0aGF0IGBpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzYCBwZXJmb3JtcyB0aGVzZSBrZXkgY2hlY2tzOiBpdCdzIGxvb2tpbmcgZm9yIHRoZSBwcmVzZW5jZSBvZiBgSVBfVlNfQ09OTl9GX05PX0NQT1JUYCBmbGFnIGNvbWJpbmVkIHdpdGggYElQX1ZTX0NPTk5fRl9URU1QTEFURWAsIG9yIGp1c3QgYElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUYC4gSWYgZWl0aGVyIG9mIHRoZXNlIGNvbWJpbmF0aW9ucyBleGlzdCwgdGhlIHBhY2tldCBpcyByZWplY3RlZC4gVGhlIGZsYWdzIGFyZSBkZXJpdmVkIGZyb20gdGhlIG5ldHdvcmsgYnVmZmVyLlxuXG5Ob3csIGFjY29yZGluZyB0byB0aGUgZ3VpZGVsaW5lcywgdGhlIHVzZSBvZiBLTVNBTiBpcyByZXNlcnZlZCBmb3IgY2FzZXMgaW52b2x2aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBTbyBsZXQncyBzeXN0ZW1hdGljYWxseSBhbmFseXplOlxuXG4xLiAgKipVbmluaXRpYWxpemVkIE1lbW9yeToqKiBUaGUgZmxhZ3MgY29tZSBkaXJlY3RseSBmcm9tIG5ldHdvcmsgZGF0YSwgdGhleSBhcmVuJ3QgaW5pdGlhbGl6ZWQgbG9jYWxseS4gSG93ZXZlciwgdGhlIGNvZGUgdmFsaWRhdGVzIGFuZCAqcmVqZWN0cyogcGFja2V0cyBjb250YWluaW5nIHRoZSBcImZvcmJpZGRlblwiIGZsYWcgY29tYmluYXRpb25zLiBObyB1bmluaXRpYWxpemVkIGRhdGEgZXZlciBtYWtlcyBpdCBwYXN0IHRoZSBpbnB1dCB2YWxpZGF0aW9uIHRvIGJlIHVzZWQgaW4gY2FsY3VsYXRpb25zLlxuMi4gICoqVXNlciBTcGFjZSBFeHBvc3VyZToqKiBObyBrZXJuZWwgZGF0YSBpcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UgZGlyZWN0bHkgYmVjYXVzZSB0aGUgcGF0Y2ggcGVyZm9ybXMgaW5wdXQgdmFsaWRhdGlvbiwgYW5kIGRvZXMgbm90IGFsdGVyIGFueSBrZXJuZWwgc3RydWN0dXJlcyB0aGF0IGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlLlxuMy4gICoqQ29uZGl0aW9uYWwgTG9naWMgXHUwMDI2IFVuaW5pdGlhbGl6ZWQgVmFyaWFibGVzOioqIFRoZSBsb2dpYyBpcyBzdHJhaWdodGZvcndhcmQgLSB2YWxpZGF0ZSB0aGUgZmxhZ3MsIGFuZCBwcm9jZWVkIG9yIHJlamVjdC4gVGhlIGlucHV0IGZsYWdzIHRoZW1zZWx2ZXMgYXJlIG5vdCB1bmluaXRpYWxpemVkLCB0aGV5IGNvbWUgZnJvbSB0aGUgbmV0d29yay5cbjQuICAqKkRhdGEgU3RydWN0dXJlIEFsbG9jYXRpb24gXHUwMDI2IEluaXRpYWxpemF0aW9uOioqIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGRhdGEgc3RydWN0dXJlcywgc28gd2UgY2FuIGRpc3JlZ2FyZCB0aGlzIGFzcGVjdC5cbjUuICAqKkJvdW5kcyBDaGVja3MgXHUwMDI2IExlbmd0aHM6KiogQWN0dWFsbHksIHRoZSBwYXRjaCAqaW1wcm92ZXMqIGlucHV0IHZhbGlkYXRpb24gb2YgZmxhZ3MgY29taW5nIGZyb20gdGhlIG5ldHdvcmssIG1ha2luZyBpdCAqbW9yZSogZGlmZmljdWx0IHRvIGNhdXNlIGFueSBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIHdyaXRlcy5cblxuVGhlIG9yaWdpbmFsIGJ1ZywgaWYgb25lIGNhbiBjYWxsIGl0IHRoYXQsIHdhcyBhIHBvdGVudGlhbCBmb3IgaW5jb25zaXN0ZW50IHN0YXRlLCByZWZjb3VudCBpc3N1ZXMsIG9yIGludmFsaWQgaGFuZGxpbmcgcmVzdWx0aW5nIGZyb20gaW5jb21wYXRpYmxlIGNvbWJpbmF0aW9ucyBvZiBmbGFncyBpbiB0aGUgbmV0d29yayBtZXNzYWdlcy4gVGhlc2UgY291bGQgcG9zc2libHkgbGVhZCB0byBjcmFzaGVzLCBwYW5pY3MsIE5VTEwgZGVyZWZlcmVuY2VzIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMuIEhvd2V2ZXIsIG5vbmUgb2YgdGhhdCBpcyBkaXJlY3RseSByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBXZSBjYW4gYXNzdW1lIHRoYXQgaWYgdGhlc2UgaW52YWxpZCBmbGFnIGNvbWJpbmF0aW9ucyBjcmVhdGUgaXNzdWVzLCB0aGUgKnN0YW5kYXJkKiBidWcgZGV0ZWN0b3JzIChLQVNBTiwgTE9DS0RFUCwgcmVmY291bnQgY2hlY2tzKSB3b3VsZCBjYXRjaCB0aGVzZS5cblxuVGhlcmVmb3JlLCB0aGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gQmFzZWQgb24gdGhlIGd1aWRlbGluZXMsICoqTmVlZHNLTVNBTiBzaG91bGQgYmUgZmFsc2UqKi5cblxuYGBgXG4tIE5lZWRzS01TQU46IGZhbHNlXG4tIEtNU0FOUmVhc29uaW5nOlxuVGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBmb3IgaW5jb21wYXRpYmxlIGNvbm5lY3Rpb24gZmxhZ3MgKGBJUF9WU19DT05OX0ZfTk9fQ1BPUlRgIHdpdGggYElQX1ZTX0NPTk5fRl9URU1QTEFURWAsIGFuZCBgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVRgKSBpbiB0aGUgSVBWUyBzeW5jaHJvbml6YXRpb24gbWVzc2FnZSBwcm9jZXNzaW5nIGhhbmRsZXJzIChgaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwYCBhbmQgYGlwX3ZzX3Byb2Nfc3luY19jb25uYCkuXG5UaGUgZmxhZ3MgYXJlIHBhcnNlZCBkaXJlY3RseSBmcm9tIGluY29taW5nIG5ldHdvcmsgcGFja2V0IGJ1ZmZlcnMgYW5kIHZhbGlkYXRlZCBiZWZvcmUgZnVydGhlciBjb25uZWN0aW9uIHN0YXRlIHByb2Nlc3NpbmcuIFRoZSBjaGFuZ2VzIG9ubHkgaW50cm9kdWNlIGlucHV0IHZhbGlkYXRpb24gYW5kIGVhcmx5IGV4aXRzLCB3aXRob3V0IGFsbG9jYXRpbmcgbmV3IG1lbW9yeSwgYWx0ZXJpbmcgYnVmZmVyIHNpemVzL2JvdW5kYXJpZXMsIGxlYXZpbmcgZmllbGRzIHVuaW5pdGlhbGl6ZWQsIG9yIGV4cG9zaW5nIGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UuIEFueSBidWdzIHJlc3VsdGluZyBmcm9tIG1hbGZvcm1lZCBjb25uZWN0aW9uIHN0YXRlcyBvciBmbGFncyAoc3VjaCBhcyByZWZjb3VudCBpc3N1ZXMgb3IgdXNlLWFmdGVyLWZyZWUpIGZhbGwgdW5kZXIgdGhlIHB1cnZpZXcgb2Ygc3RhbmRhcmQgZGV0ZWN0b3JzIGxpa2UgS0FTQU4gYW5kIHJlZmNvdW50IGNoZWNraW5nLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBpbmZvcm1hdGlvbiBsZWFrLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cbmBgYFxuYGBgXG5zZXQtcmVzdWx0c1xuYGBgXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTY0LCJPdXRwdXRUb2tlbnMiOjI0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6NDk6MTAuNDYzNDYzNTIzWiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmbGFnIHZhbGlkYXRpb24gKGBpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzYCkgaW4gdGhlIElQVlMgc3luY2hyb25pemF0aW9uIG1lc3NhZ2UgaGFuZGxpbmcgZnVuY3Rpb25zIChgaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwYCBhbmQgYGlwX3ZzX3Byb2Nfc3luY19jb25uYCkgdG8gcmVqZWN0IGludmFsaWQgZmxhZyBjb21iaW5hdGlvbnMgKGUuZy4sIGBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVGAgb3IgYElQX1ZTX0NPTk5fRl9OT19DUE9SVGAgY29tYmluZWQgd2l0aCBgSVBfVlNfQ09OTl9GX1RFTVBMQVRFYCkuIFRoZSBmbGFncyB2YXJpYWJsZSBpcyBkaXJlY3RseSBpbml0aWFsaXplZCBmcm9tIHJlY2VpdmVkIG5ldHdvcmsgcGFja2V0IGRhdGEgKGBudG9oc2AgLyBgbnRvaGxgKSwgYW5kIHRoZSB2YWxpZGF0aW9uIGxvZ2ljIG9ubHkgYWRkcyBlYXJseSByZWplY3Rpb24gb2YgaW52YWxpZCBzeW5jIG1lc3NhZ2VzLiBObyBoZWFwL3N0YWNrIG1lbW9yeSBhbGxvY2F0aW9ucyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZCwgbm8gYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMgb3IgY29weWluZyB0byB1c2VyIHNwYWNlIGFyZSBhbHRlcmVkLCBhbmQgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IHBhZGRpbmcgYXJlIHJlYWQgb3IgZXhwb3NlZC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSBpbmNvbXBhdGlibGUgZmxhZ3MgKHN1Y2ggYXMgc3RhdGUgaW5jb25zaXN0ZW5jaWVzLCByZWZjb3VudCBlcnJvcnMsIG9yIHVzZS1hZnRlci1mcmVlKSBhcmUgZGV0ZWN0YWJsZSBieSBzdGFuZGFyZCBLQVNBTi9yZWZjb3VudCBjaGVja3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmbGFnIHZhbGlkYXRpb24gKGBpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzYCkgaW4gdGhlIElQVlMgc3luY2hyb25pemF0aW9uIG1lc3NhZ2UgaGFuZGxpbmcgZnVuY3Rpb25zIChgaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwYCBhbmQgYGlwX3ZzX3Byb2Nfc3luY19jb25uYCkgdG8gcmVqZWN0IGludmFsaWQgZmxhZyBjb21iaW5hdGlvbnMgKGUuZy4sIGBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVGAgb3IgYElQX1ZTX0NPTk5fRl9OT19DUE9SVGAgY29tYmluZWQgd2l0aCBgSVBfVlNfQ09OTl9GX1RFTVBMQVRFYCkuIFRoZSBmbGFncyB2YXJpYWJsZSBpcyBkaXJlY3RseSBpbml0aWFsaXplZCBmcm9tIHJlY2VpdmVkIG5ldHdvcmsgcGFja2V0IGRhdGEgKGBudG9oc2AgLyBgbnRvaGxgKSwgYW5kIHRoZSB2YWxpZGF0aW9uIGxvZ2ljIG9ubHkgYWRkcyBlYXJseSByZWplY3Rpb24gb2YgaW52YWxpZCBzeW5jIG1lc3NhZ2VzLiBObyBoZWFwL3N0YWNrIG1lbW9yeSBhbGxvY2F0aW9ucyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZCwgbm8gYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMgb3IgY29weWluZyB0byB1c2VyIHNwYWNlIGFyZSBhbHRlcmVkLCBhbmQgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IHBhZGRpbmcgYXJlIHJlYWQgb3IgZXhwb3NlZC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSBpbmNvbXBhdGlibGUgZmxhZ3MgKHN1Y2ggYXMgc3RhdGUgaW5jb25zaXN0ZW5jaWVzLCByZWZjb3VudCBlcnJvcnMsIG9yIHVzZS1hZnRlci1mcmVlKSBhcmUgZGV0ZWN0YWJsZSBieSBzdGFuZGFyZCBLQVNBTi9yZWZjb3VudCBjaGVja3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfkm52[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-11 18:44:31 +0000 UTC FinishedAt: 2026-09-11 18:49:12 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "a401a9d547c50ef34db1088cc1fb9a201a7af657", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS", "NETFILTER", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "a401a9d547c50ef34db1088cc1fb9a201a7af657", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS", "NETFILTER", "INET" ], "series_id": "60a979ef-4c1e-4926-998f-b623ad440491" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_vs_sync_validate_flags", "ip_vs_process_message_v0", "ip_vs_proc_sync_conn", "ip_vs_process_message", "sync_thread_backup", "start_sync_thread" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "a401a9d547c50ef34db1088cc1fb9a201a7af657", "base_tree": "nf" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyYjMzQ7LAogICAgJiMzNDtpcF92c19wcm9jZXNzX21lc3NhZ2VfdjAmIzM0OywKICAgICYjMzQ7aXBfdnNfcHJvY19zeW5jX2Nvbm4mIzM0OywKICAgICYjMzQ7aXBfdnNfcHJvY2Vzc19tZXNzYWdlJiMzNDssCiAgICAmIzM0O3N5bmNfdGhyZWFkX2JhY2t1cCYjMzQ7LAogICAgJiMzNDtzdGFydF9zeW5jX3RocmVhZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZmxhZyB2YWxpZGF0aW9uIChgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFnc2ApIGluIHRoZSBJUFZTIHN5bmNocm9uaXphdGlvbiBtZXNzYWdlIGhhbmRsaW5nIGZ1bmN0aW9ucyAoYGlwX3ZzX3Byb2Nlc3NfbWVzc2FnZV92MGAgYW5kIGBpcF92c19wcm9jX3N5bmNfY29ubmApIHRvIHJlamVjdCBpbnZhbGlkIGZsYWcgY29tYmluYXRpb25zIChlLmcuLCBgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVRgIG9yIGBJUF9WU19DT05OX0ZfTk9fQ1BPUlRgIGNvbWJpbmVkIHdpdGggYElQX1ZTX0NPTk5fRl9URU1QTEFURWApLiBUaGUgZmxhZ3MgdmFyaWFibGUgaXMgZGlyZWN0bHkgaW5pdGlhbGl6ZWQgZnJvbSByZWNlaXZlZCBuZXR3b3JrIHBhY2tldCBkYXRhIChgbnRvaHNgIC8gYG50b2hsYCksIGFuZCB0aGUgdmFsaWRhdGlvbiBsb2dpYyBvbmx5IGFkZHMgZWFybHkgcmVqZWN0aW9uIG9mIGludmFsaWQgc3luYyBtZXNzYWdlcy4gTm8gaGVhcC9zdGFjayBtZW1vcnkgYWxsb2NhdGlvbnMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQsIG5vIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb25zIG9yIGNvcHlpbmcgdG8gdXNlciBzcGFjZSBhcmUgYWx0ZXJlZCwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBwYWRkaW5nIGFyZSByZWFkIG9yIGV4cG9zZWQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHN0ZW1taW5nIGZyb20gaW5jb21wYXRpYmxlIGZsYWdzIChzdWNoIGFzIHN0YXRlIGluY29uc2lzdGVuY2llcywgcmVmY291bnQgZXJyb3JzLCBvciB1c2UtYWZ0ZXItZnJlZSkgYXJlIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgS0FTQU4vcmVmY291bnQgY2hlY2tzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGZsYWcgdmFsaWRhdGlvbiAoaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncykgYW5kIHByb3BlciBtYXNraW5nIHdoZW4gcGFyc2luZyBpbmNvbWluZyBJUFZTIHN5bmMgbWVzc2FnZXMgaW4gdGhlIGJhY2t1cCBkYWVtb24sIHJlamVjdGluZyBpbmNvbXBhdGlibGUgZmxhZ3Mgc3VjaCBhcyBJUF9WU19DT05OX0ZfTk9fQ1BPUlQgd2l0aCBJUF9WU19DT05OX0ZfVEVNUExBVEUgb3IgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQgaW4gYm90aCB2MCBhbmQgdjEgbWVzc2FnZSBmb3JtYXRzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JrIHByb3RvY29sIHByb2Nlc3NpbmcgaW4gbmV0ZmlsdGVyL0lQVlMgYW5kIHdhcnJhbnRzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6NDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2ZjcyNjk5MWU2YWY2OTcxMzExYTBhMDA2OTJiMGExYmIxYzIzOTNkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMTg6NDY6MzYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcbmluZGV4IDUzODNhZWFmYjBhZWQuLjY5ZGMyODE1M2VjMTIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jXG5AQCAtOTQ5LDYgJiM0Mzs5NDksMjEgQEAgc3RhdGljIHZvaWQgaXBfdnNfcHJvY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubl9wYXJhbSAqcGFcbiBcdGlwX3ZzX2Nvbm5fcHV0KGNwKTtcbiB9XG4gXG4mIzQzOy8qIENoZWNrIGZvciBpbmNvbXBhdGlibGUgZmxhZ3MgKi9cbiYjNDM7c3RhdGljIGJvb2wgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyh1MzIgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHQvKiBXZSBkbyBub3QgZXhwZWN0IE5PX0NQT1JULCBlc3BlY2lhbGx5IHRvIGFsbG93IGxvb2t1cHNcbiYjNDM7XHQgKiB0byBoaXQgdGVtcGxhdGVzXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfTk9fQ1BPUlQpIHtcbiYjNDM7XHRcdGlmIChmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX1RFTVBMQVRFKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiAgUHJvY2VzcyByZWNlaXZlZCBtdWx0aWNhc3QgbWVzc2FnZSBmb3IgVmVyc2lvbiAwXG4gICovXG5AQCAtOTcyLDggJiM0Mzs5ODcsNyBAQCBzdGF0aWMgdm9pZCBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGNvbnN0IGNoYXIgKmJ1ZmZlclxuIFx0XHRcdHJldHVybjtcbiBcdFx0fVxuIFx0XHRzID0gKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAgKikgcDtcbi1cdFx0ZmxhZ3MgPSBudG9ocyhzLVx1MDAzZWZsYWdzKSB8IElQX1ZTX0NPTk5fRl9TWU5DO1xuLVx0XHRmbGFncyBcdTAwMjY9IH5JUF9WU19DT05OX0ZfSEFTSEVEO1xuJiM0MztcdFx0ZmxhZ3MgPSBudG9ocyhzLVx1MDAzZWZsYWdzKTtcbiBcdFx0aWYgKGZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0spIHtcbiBcdFx0XHRvcHQgPSAoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICopXHUwMDI2c1sxXTtcbiBcdFx0XHRwICYjNDM7PSBGVUxMX0NPTk5fU0laRTtcbkBAIC05ODYsNiAmIzQzOzEwMDAsMTMgQEAgc3RhdGljIHZvaWQgaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBjb25zdCBjaGFyICpidWZmZXJcbiBcdFx0XHRwICYjNDM7PSBTSU1QTEVfQ09OTl9TSVpFO1xuIFx0XHR9XG4gXG4mIzQzO1x0XHRpZiAoIWlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3MoZmxhZ3MpKSB7XG4mIzQzO1x0XHRcdElQX1ZTX0RCRygyLCBcJiMzNDtCQUNLVVAgdjAsIEludmFsaWQgZmxhZ3MgMHglWFxcblwmIzM0OywgZmxhZ3MpO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGZsYWdzIFx1MDAyNj0gSVBfVlNfQ09OTl9GX0JBQ0tVUF9NQVNLO1xuJiM0MztcdFx0ZmxhZ3MgfD0gSVBfVlNfQ09OTl9GX1NZTkM7XG4mIzQzO1xuIFx0XHRzdGF0ZSA9IG50b2hzKHMtXHUwMDNlc3RhdGUpO1xuIFx0XHRpZiAoIShmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX1RFTVBMQVRFKSkge1xuIFx0XHRcdHBwID0gaXBfdnNfcHJvdG9fZ2V0KHMtXHUwMDNlcHJvdG9jb2wpO1xuQEAgLTExNDEsNyAmIzQzOzExNjIsMTMgQEAgc3RhdGljIGlubGluZSBpbnQgaXBfdnNfcHJvY19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIF9fdTggKnAsIF9fdTggKm1cbiBcdH1cbiBcbiBcdC8qIEdldCBmbGFncyBhbmQgTWFzayBvZmYgdW5zdXBwb3J0ZWQgKi9cbi1cdGZsYWdzICA9IG50b2hsKHMtXHUwMDNldjQuZmxhZ3MpIFx1MDAyNiBJUF9WU19DT05OX0ZfQkFDS1VQX01BU0s7XG4mIzQzO1x0ZmxhZ3MgPSBudG9obChzLVx1MDAzZXY0LmZsYWdzKTtcbiYjNDM7XHRpZiAoIWlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3MoZmxhZ3MpKSB7XG4mIzQzO1x0XHRJUF9WU19EQkcoMywgXCYjMzQ7QkFDS1VQLCBJbnZhbGlkIGZsYWdzIDB4JVhcXG5cJiMzNDssIGZsYWdzKTtcbiYjNDM7XHRcdHJldGMgPSAyNTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XHRmbGFncyBcdTAwMjY9IElQX1ZTX0NPTk5fRl9CQUNLVVBfTUFTSztcbiBcdGZsYWdzIHw9IElQX1ZTX0NPTk5fRl9TWU5DO1xuIFx0c3RhdGUgPSBudG9ocyhzLVx1MDAzZXY0LnN0YXRlKTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODo0NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9WUyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3MmIzM0OywKICAgICYjMzQ7aXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwJiMzNDssCiAgICAmIzM0O2lwX3ZzX3Byb2Nfc3luY19jb25uJiMzNDssCiAgICAmIzM0O2lwX3ZzX3Byb2Nlc3NfbWVzc2FnZSYjMzQ7LAogICAgJiMzNDtzeW5jX3RocmVhZF9iYWNrdXAmIzM0OywKICAgICYjMzQ7c3RhcnRfc3luY190aHJlYWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmbGFnIHZhbGlkYXRpb24gKGlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3MpIGFuZCBwcm9wZXIgbWFza2luZyB3aGVuIHBhcnNpbmcgaW5jb21pbmcgSVBWUyBzeW5jIG1lc3NhZ2VzIGluIHRoZSBiYWNrdXAgZGFlbW9uLCByZWplY3RpbmcgaW5jb21wYXRpYmxlIGZsYWdzIHN1Y2ggYXMgSVBfVlNfQ09OTl9GX05PX0NQT1JUIHdpdGggSVBfVlNfQ09OTl9GX1RFTVBMQVRFIG9yIElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUIGluIGJvdGggdjAgYW5kIHYxIG1lc3NhZ2UgZm9ybWF0cy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0d29yayBwcm90b2NvbCBwcm9jZXNzaW5nIGluIG5ldGZpbHRlci9JUFZTIGFuZCB3YXJyYW50cyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmY3MjY5OTFlNmFmNjk3MTMxMWEwYTAwNjkyYjBhMWJiMWMyMzkzZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDE4OjQ2OjM2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMKaW5kZXggNTM4M2FlYWZiMGFlZC4uNjlkYzI4MTUzZWMxMiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jCkBAIC05NDksNiAmIzQzOzk0OSwyMSBAQCBzdGF0aWMgdm9pZCBpcF92c19wcm9jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uX3BhcmFtICpwYQogCWlwX3ZzX2Nvbm5fcHV0KGNwKTsKIH0KIAomIzQzOy8qIENoZWNrIGZvciBpbmNvbXBhdGlibGUgZmxhZ3MgKi8KJiM0MztzdGF0aWMgYm9vbCBpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzKHUzMiBmbGFncykKJiM0Mzt7CiYjNDM7CS8qIFdlIGRvIG5vdCBleHBlY3QgTk9fQ1BPUlQsIGVzcGVjaWFsbHkgdG8gYWxsb3cgbG9va3VwcwomIzQzOwkgKiB0byBoaXQgdGVtcGxhdGVzCiYjNDM7CSAqLwomIzQzOwlpZiAoZmxhZ3MgJmFtcDsgSVBfVlNfQ09OTl9GX05PX0NQT1JUKSB7CiYjNDM7CQlpZiAoZmxhZ3MgJmFtcDsgSVBfVlNfQ09OTl9GX1RFTVBMQVRFKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzOwlpZiAoZmxhZ3MgJmFtcDsgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKIC8qCiAgKiAgUHJvY2VzcyByZWNlaXZlZCBtdWx0aWNhc3QgbWVzc2FnZSBmb3IgVmVyc2lvbiAwCiAgKi8KQEAgLTk3Miw4ICYjNDM7OTg3LDcgQEAgc3RhdGljIHZvaWQgaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBjb25zdCBjaGFyICpidWZmZXIKIAkJCXJldHVybjsKIAkJfQogCQlzID0gKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAgKikgcDsKLQkJZmxhZ3MgPSBudG9ocyhzLSZndDtmbGFncykgfCBJUF9WU19DT05OX0ZfU1lOQzsKLQkJZmxhZ3MgJmFtcDs9IH5JUF9WU19DT05OX0ZfSEFTSEVEOwomIzQzOwkJZmxhZ3MgPSBudG9ocyhzLSZndDtmbGFncyk7CiAJCWlmIChmbGFncyAmYW1wOyBJUF9WU19DT05OX0ZfU0VRX01BU0spIHsKIAkJCW9wdCA9IChzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKikmYW1wO3NbMV07CiAJCQlwICYjNDM7PSBGVUxMX0NPTk5fU0laRTsKQEAgLTk4Niw2ICYjNDM7MTAwMCwxMyBAQCBzdGF0aWMgdm9pZCBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGNvbnN0IGNoYXIgKmJ1ZmZlcgogCQkJcCAmIzQzOz0gU0lNUExFX0NPTk5fU0laRTsKIAkJfQogCiYjNDM7CQlpZiAoIWlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3MoZmxhZ3MpKSB7CiYjNDM7CQkJSVBfVlNfREJHKDIsICYjMzQ7QkFDS1VQIHYwLCBJbnZhbGlkIGZsYWdzIDB4JVhcbiYjMzQ7LCBmbGFncyk7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CQlmbGFncyAmYW1wOz0gSVBfVlNfQ09OTl9GX0JBQ0tVUF9NQVNLOwomIzQzOwkJZmxhZ3MgfD0gSVBfVlNfQ09OTl9GX1NZTkM7CiYjNDM7CiAJCXN0YXRlID0gbnRvaHMocy0mZ3Q7c3RhdGUpOwogCQlpZiAoIShmbGFncyAmYW1wOyBJUF9WU19DT05OX0ZfVEVNUExBVEUpKSB7CiAJCQlwcCA9IGlwX3ZzX3Byb3RvX2dldChzLSZndDtwcm90b2NvbCk7CkBAIC0xMTQxLDcgJiM0MzsxMTYyLDEzIEBAIHN0YXRpYyBpbmxpbmUgaW50IGlwX3ZzX3Byb2Nfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBfX3U4ICpwLCBfX3U4ICptCiAJfQogCiAJLyogR2V0IGZsYWdzIGFuZCBNYXNrIG9mZiB1bnN1cHBvcnRlZCAqLwotCWZsYWdzICA9IG50b2hsKHMtJmd0O3Y0LmZsYWdzKSAmYW1wOyBJUF9WU19DT05OX0ZfQkFDS1VQX01BU0s7CiYjNDM7CWZsYWdzID0gbnRvaGwocy0mZ3Q7djQuZmxhZ3MpOwomIzQzOwlpZiAoIWlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3MoZmxhZ3MpKSB7CiYjNDM7CQlJUF9WU19EQkcoMywgJiMzNDtCQUNLVVAsIEludmFsaWQgZmxhZ3MgMHglWFxuJiMzNDssIGZsYWdzKTsKJiM0MzsJCXJldGMgPSAyNTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CWZsYWdzICZhbXA7PSBJUF9WU19DT05OX0ZfQkFDS1VQX01BU0s7CiAJZmxhZ3MgfD0gSVBfVlNfQ09OTl9GX1NZTkM7CiAJc3RhdGUgPSBudG9ocyhzLSZndDt2NC5zdGF0ZSk7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU5NwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQVlMgU3luY2hyb25pemF0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0IHRoaXMgcGF0Y2ggaXMgYWN0dWFsbHkgY2hhbmdpbmcgYW5kIHRoZSBjb250ZXh0LiBGcm9tIHRoZSBkZXNjcmlwdGlvbiwgaXQgc2VlbXMgd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBtb2RpZmljYXRpb24gdG8gYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNgLiBTbywgdGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBvZiB0aGUgc3luY2hyb25pemF0aW9uIGxvZ2ljIHJlc2lkZXMuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNoYW5nZXMgaW1wYWN0IHRoZSBleGlzdGluZyBzeW5jaHJvbml6YXRpb24gcHJvY2Vzcy4KClRoZSBsaXN0ZWQgZnVuY3Rpb25zIGFyZSB0aGUga2V5IGhlcmU6IGBpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzYCwgd2hpY2ggYXBwZWFycyB0byBiZSBhIG5ldyBoZWxwZXIsIGBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjBgLCBhbmQgYGlwX3ZzX3Byb2Nfc3luY19jb25uYC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7dmUgZ290IGEgbmV3IHZhbGlkYXRpb24gc3RlcCwgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIGZsYWdzIGJlaW5nIHN5bmNocm9uaXplZCwgYW5kIHRoZW4gaGFuZGxpbmcgdGhlIG1lc3NhZ2VzIHRoZW1zZWx2ZXMsIGFuZCBmaW5hbGx5IHRoZSBhY3R1YWwgc3luY2hyb25pemF0aW9uLgoKSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIGEgZGVlcCBkaXZlIGludG8gYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNgIHVzaW5nIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCDigJMgd2hhdGV2ZXImIzM5O3MgcXVpY2tlc3Qg4oCTIHRvIGdldCBhIGZlZWwgZm9yIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgYXJvdW5kIHRoZXNlIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHNlZSAqaG93KiB0aGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCwgdGhlIGRhdGEgc3RydWN0dXJlcyB0aGV5IGludGVyYWN0IHdpdGgsIGFuZCB3aGF0IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgZXhpc3QuCgpGaW5hbGx5LCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoZSBJUFZTIHN5bmNocm9uaXphdGlvbiBkYWVtb24gaXRzZWxmLiBJJiMzOTttIGFzc3VtaW5nIGNoYW5nZXMgaGVyZSBtaWdodCByZWxhdGUgdG8gZmVhdHVyZXMgb3IgZGVwZW5kZW5jaWVzLiBJdOKAmXMgYWxzbyBwb3NzaWJsZSB0aGUgbmV3IGhlbHBlciBoYXMgaW50cm9kdWNlZCBzb21lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIEkgd2lsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBuZXdseSBjb25maWd1cmFibGUuIFRoaXMgd2lsbCBlbnN1cmUgSSB1bmRlcnN0YW5kIGhvdyB0aGlzIHBhdGNoIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBJUFZTIGxhbmRzY2FwZSBhbmQgYW55IGNvbmZpZ3VyYXRpb24gY2hhbmdlcy4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIGl0JiMzOTtzIHByb3Blcmx5IGhhbmRsZWQgaW4gYW55IGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfdnNfc3luYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGU9MTY9aXBfdnMtb2JqcyA6PVx0aXBfdnNfY29ubi5vIGlwX3ZzX2NvcmUubyBpcF92c19jdGwubyBpcF92c19zY2hlZC5vXHQgICBcXFxubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlOjE3Olx0XHRpcF92c194bWl0Lm8gaXBfdnNfYXBwLm8gaXBfdnNfc3luYy5vXHQgICBcdFx0ICAgXFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZS0xOC1cdFx0aXBfdnNfZXN0Lm8gaXBfdnNfcHJvdG8ubyBpcF92c19wZS5vXHRcdFx0ICAgXFxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTEzNDc9c3RhdGljIHZvaWQgaXBfdnNfY29ubl9leHBpcmUoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xNDE2LVx0aWYgKGlwdnMtXHUwMDNlc3luY19zdGF0ZSBcdTAwMjYgSVBfVlNfU1RBVEVfTUFTVEVSKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxNDE3Olx0XHRpcF92c19zeW5jX2Nvbm4oaXB2cywgY3AsIHN5c2N0bF9zeW5jX3RocmVzaG9sZChpcHZzKSk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTE0MTgtXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0yMDk2PWlwX3ZzX2luX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjI2Ni1cdCAqXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIyNjc6XHQgKiBGb3IgT05FX1BLVCBsZXQgaXBfdnNfc3luY19jb25uKCkgZG8gdGhlIGZpbHRlciB3b3JrLlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMjY4LVx0ICovXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMjc1LVx0aWYgKGlwdnMtXHUwMDNlc3luY19zdGF0ZSBcdTAwMjYgSVBfVlNfU1RBVEVfTUFTVEVSKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMjc2Olx0XHRpcF92c19zeW5jX2Nvbm4oaXB2cywgY3AsIHBrdHMpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMjc3LVx0ZWxzZSBpZiAoKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVCkgXHUwMDI2XHUwMDI2IGNwLVx1MDAzZWNvbnRyb2wpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIyNzg6XHRcdC8qIGluY3JlbWVudCBpcyBkb25lIGluc2lkZSBpcF92c19zeW5jX2Nvbm4gdG9vICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIyNzktXHRcdGF0b21pY19pbmMoXHUwMDI2Y3AtXHUwMDNlY29udHJvbC1cdTAwM2Vpbl9wa3RzKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTI0ODA9c3RhdGljIGludCBfX25ldF9pbml0IF9faXBfdnNfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yNTEwLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyNTExOlx0aWYgKGlwX3ZzX3N5bmNfbmV0X2luaXQoaXB2cykgXHUwMDNjIDApXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTI1MTItXHRcdGdvdG8gc3luY19mYWlsO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MjU1Mj1zdGF0aWMgdm9pZCBfX25ldF9leGl0IF9faXBfdnNfZGV2X2NsZWFudXBfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqbmV0X2xpc3QpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yNTYyLVx0XHRzbXBfd21iKCk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjI1NjM6XHRcdGlwX3ZzX3N5bmNfbmV0X2NsZWFudXAoaXB2cyk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTI1NjQtXHR9XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMy0gKiAgICAgICAgICAgICAgdGltZS1vdXRzLCBhbmQgZmlyZXdhbGwgbWFya3MuXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE0OiAqICAgICAgICAgICAgICBJbiB2ZXIuMSBcJiMzNDtpcF92c19zeW5jX2Nvbm5fb3B0aW9uc1wmIzM0OyB3aWxsIGJlIHNlbnQgaW4gbmV0dy4gb3JkZXIuXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE1LSAqICAgICAgICAgICAgICBWZXIuIDAgY2FuIGJlIHR1cm5lZCBvbiBieSBzeXNjdGwgLXcgbmV0LmlwdjQudnMuc3luY192ZXJzaW9uPTBcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTIyLSAqXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjIzOiAqIGlwX3ZzX3N5bmM6ICBzeW5jIGNvbm5lY3Rpb24gaW5mbyBmcm9tIG1hc3RlciBsb2FkIGJhbGFuY2VyIHRvIGJhY2t1cHNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjQtICogICAgICAgICAgICAgIHRocm91Z2ggbXVsdGljYXN0XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz02NT1zdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IF9faXB2c19zeW5jX2tleTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY5LSAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo3MDpzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzEtXHRfX3U4XHRcdFx0cmVzZXJ2ZWQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy04OC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6ODk6c3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtOTAtXHRzdHJ1Y3QgaXBfdnNfc2VxICAgICAgICBpbl9zZXE7ICAgICAgICAgLyogaW5jb21pbmcgc2VxLiBzdHJ1Y3QgKi9cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEzMS0gKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTMyOnN0cnVjdCBpcF92c19zeW5jX3Y0IHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTMzLVx0X191OFx0XHRcdHR5cGU7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNTMtICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE1NDpzdHJ1Y3QgaXBfdnNfc3luY192NiB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE1NS1cdF9fdThcdFx0XHR0eXBlO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTczLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNzQ6dW5pb24gaXBfdnNfc3luY19jb25uIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTc1Olx0c3RydWN0IGlwX3ZzX3N5bmNfdjRcdHY0O1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNzY6XHRzdHJ1Y3QgaXBfdnNfc3luY192Nlx0djY7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE3Ny19O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTk1LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxOTY6c3RydWN0IGlwX3ZzX3N5bmNfdGhyZWFkX2RhdGEge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xOTctXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yMDQtLyogVmVyc2lvbiAwIGRlZmluaXRpb24gb2YgcGFja2V0IHNpemVzICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjIwNTojZGVmaW5lIFNJTVBMRV9DT05OX1NJWkUgIChzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl92MCkpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTIwNi0jZGVmaW5lIEZVTExfQ09OTl9TSVpFICBcXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoyMDc6KHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwKSAmIzQzOyBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zKSlcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjA4LVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjQ0LS8qIFZlcnNpb24gMCBoZWFkZXIgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MjQ1OnN0cnVjdCBpcF92c19zeW5jX21lc2dfdjAge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yNDYtXHRfX3U4ICAgICAgICAgICAgICAgICAgICBucl9jb25ucztcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTI0OS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MjUwOlx0LyogaXBfdnNfc3luY19jb25uIGVudHJpZXMgc3RhcnQgaGVyZSAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yNTEtfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTI1My0vKiBWZXJzaW9uIDEgaGVhZGVyICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjI1NDpzdHJ1Y3QgaXBfdnNfc3luY19tZXNnIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjU1LVx0X191OFx0XHRcdHJlc2VydmVkO1x0LyogbXVzdCBiZSB6ZXJvICovXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yNjAtXHRfX3UxNlx0XHRcdHNwYXJlO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoyNjE6XHQvKiBpcF92c19zeW5jX2Nvbm4gZW50cmllcyBzdGFydCBoZXJlICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTI2Mi19O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MjY0PXVuaW9uIGlwdnNfc29ja2FkZHIge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjY4LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoyNjk6c3RydWN0IGlwX3ZzX3N5bmNfYnVmZiB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTI3MC1cdHN0cnVjdCBsaXN0X2hlYWQgICAgICAgIGxpc3Q7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yNzMtXHQvKiBwb2ludGVycyBmb3IgdGhlIG1lc3NhZ2UgZGF0YSAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoyNzQ6XHRzdHJ1Y3QgaXBfdnNfc3luY19tZXNnICAqbWVzZztcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjc1LVx0dW5zaWduZWQgY2hhciAgICAgICAgICAgKmhlYWQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0yOTU9c3RhdGljIHZvaWQgaHRvbl9zZXEoc3RydWN0IGlwX3ZzX3NlcSAqaG8sIHN0cnVjdCBpcF92c19zZXEgKm5vKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMzAxLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzozMDI6c3RhdGljIGlubGluZSBzdHJ1Y3QgaXBfdnNfc3luY19idWZmICpcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMzAzLXNiX2RlcXVldWUoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcHZzX21hc3Rlcl9zeW5jX3N0YXRlICptcylcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMzA0LXtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MzA1Olx0c3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqc2I7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTMwNi1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTMxMS1cdH0gZWxzZSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjMxMjpcdFx0c2IgPSBsaXN0X2VudHJ5KG1zLVx1MDAzZXN5bmNfcXVldWUubmV4dCwgc3RydWN0IGlwX3ZzX3N5bmNfYnVmZixcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMzEzLVx0XHRcdFx0bGlzdCk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0zMjYtICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjMyNzpzdGF0aWMgaW5saW5lIHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzozMjg6aXBfdnNfc3luY19idWZmX2NyZWF0ZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgdW5zaWduZWQgaW50IGxlbilcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMzI5LXtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MzMwOlx0c3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqc2I7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTMzMS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MzMyOlx0aWYgKCEoc2I9a21hbGxvY19vYmooc3RydWN0IGlwX3ZzX3N5bmNfYnVmZiwgR0ZQX0FUT01JQykpKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0zMzMtXHRcdHJldHVybiBOVUxMO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0zMzQtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjMzNTpcdGxlbiA9IG1heF90KHVuc2lnbmVkIGludCwgbGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19tZXNnKSxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMzM2LVx0XHQgICAgaXB2cy1cdTAwM2VtY2ZnLnN5bmNfbWF4bGVuKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTM0NC1cdHNiLVx1MDAzZW1lc2ctXHUwMDNlc3luY2lkID0gaXB2cy1cdTAwM2VtY2ZnLnN5bmNpZDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MzQ1Olx0c2ItXHUwMDNlbWVzZy1cdTAwM2VzaXplID0gaHRvbnMoc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX21lc2cpKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMzQ2LVx0c2ItXHUwMDNlbWVzZy1cdTAwM2Vucl9jb25ucyA9IDA7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTM0Ny1cdHNiLVx1MDAzZW1lc2ctXHUwMDNlc3BhcmUgPSAwO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzozNDg6XHRzYi1cdTAwM2VoZWFkID0gKHVuc2lnbmVkIGNoYXIgKilzYi1cdTAwM2VtZXNnICYjNDM7IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19tZXNnKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMzQ5LVx0c2ItXHUwMDNlZW5kID0gKHVuc2lnbmVkIGNoYXIgKilzYi1cdTAwM2VtZXNnICYjNDM7IGxlbjtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTM1NC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MzU1OnN0YXRpYyBpbmxpbmUgdm9pZCBpcF92c19zeW5jX2J1ZmZfcmVsZWFzZShzdHJ1Y3QgaXBfdnNfc3luY19idWZmICpzYilcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMzU2LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTM2MT1zdGF0aWMgaW5saW5lIHZvaWQgc2JfcXVldWVfdGFpbChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTM2My17XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjM2NDpcdHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKnNiID0gbXMtXHUwMDNlc3luY19idWZmO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0zNjUtXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0zNzktXHR9IGVsc2Vcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MzgwOlx0XHRpcF92c19zeW5jX2J1ZmZfcmVsZWFzZShzYik7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTM4MS1cdHNwaW5fdW5sb2NrKFx1MDAyNmlwdnMtXHUwMDNlc3luY19sb2NrKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTM4Ny0gKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6Mzg4OnN0YXRpYyBpbmxpbmUgc3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTM4OS1nZXRfY3Vycl9zeW5jX2J1ZmYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcHZzX21hc3Rlcl9zeW5jX3N0YXRlICptcyxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTM5MS17XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjM5MjpcdHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKnNiO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0zOTMtXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz00MDY9c2VsZWN0X21hc3Rlcl90aHJlYWRfaWQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTQxMy0gKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NDE0OnN0YXRpYyBpbmxpbmUgc3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjQxNTppcF92c19zeW5jX2J1ZmZfY3JlYXRlX3YwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCB1bnNpZ25lZCBpbnQgbGVuKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy00MTYte1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo0MTc6XHRzdHJ1Y3QgaXBfdnNfc3luY19idWZmICpzYjtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NDE4Olx0c3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCAqbWVzZztcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNDE5LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo0MjA6XHRpZiAoIShzYj1rbWFsbG9jX29iaihzdHJ1Y3QgaXBfdnNfc3luY19idWZmLCBHRlBfQVRPTUlDKSkpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTQyMS1cdFx0cmV0dXJuIE5VTEw7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTQyMi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NDIzOlx0bGVuID0gbWF4X3QodW5zaWduZWQgaW50LCBsZW4gJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjApLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy00MjQtXHRcdCAgICBpcHZzLVx1MDAzZW1jZmcuc3luY19tYXhsZW4pO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNDI5LVx0fVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo0MzA6XHRtZXNnID0gKHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjAgKilzYi1cdTAwM2VtZXNnO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy00MzEtXHRtZXNnLVx1MDAzZW5yX2Nvbm5zID0gMDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNDMyLVx0bWVzZy1cdTAwM2VzeW5jaWQgPSBpcHZzLVx1MDAzZW1jZmcuc3luY2lkO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo0MzM6XHRtZXNnLVx1MDAzZXNpemUgPSBodG9ucyhzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCkpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo0MzQ6XHRzYi1cdTAwM2VoZWFkID0gKHVuc2lnbmVkIGNoYXIgKiltZXNnICYjNDM7IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19tZXNnX3YwKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNDM1LVx0c2ItXHUwMDNlZW5kID0gKHVuc2lnbmVkIGNoYXIgKiltZXNnICYjNDM7IGxlbjtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTQ0MT1zdGF0aWMgaW5saW5lIGJvb2wgaW5fcGVyc2lzdGVuY2Uoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNDU4LSAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo0NTk6c3RhdGljIGludCBpcF92c19zeW5jX2Nvbm5fbmVlZGVkKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy00NjAtXHRcdFx0XHQgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01MzgtICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjUzOTpzdGF0aWMgdm9pZCBpcF92c19zeW5jX2Nvbm5fdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTQwLVx0XHRcdCAgICAgICBpbnQgcGt0cylcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTQxLXtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NTQyOlx0c3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCAqbTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NTQzOlx0c3RydWN0IGlwX3ZzX3N5bmNfY29ubl92MCAqcztcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NTQ0Olx0c3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqYnVmZjtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTQ1LVx0c3RydWN0IGlwdnNfbWFzdGVyX3N5bmNfc3RhdGUgKm1zO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTU0LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo1NTU6XHRpZiAoIWlwX3ZzX3N5bmNfY29ubl9uZWVkZWQoaXB2cywgY3AsIHBrdHMpKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01NTYtXHRcdHJldHVybjtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU2OS1cdGlmIChidWZmKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjU3MDpcdFx0bSA9IChzdHJ1Y3QgaXBfdnNfc3luY19tZXNnX3YwICopIGJ1ZmYtXHUwMDNlbWVzZztcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTcxLVx0XHQvKiBTZW5kIGJ1ZmZlciBpZiBpdCBpcyBmb3IgdjEgKi9cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU3OC1cdGlmICghYnVmZikge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo1Nzk6XHRcdGJ1ZmYgPSBpcF92c19zeW5jX2J1ZmZfY3JlYXRlX3YwKGlwdnMsIGxlbik7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU4MC1cdFx0aWYgKCFidWZmKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU4MS1cdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZpcHZzLVx1MDAzZXN5bmNfYnVmZl9sb2NrKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NTgyOlx0XHRcdHByX2VycihcJiMzNDtpcF92c19zeW5jX2J1ZmZfY3JlYXRlIGZhaWxlZC5cXG5cJiMzNDspO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01ODMtXHRcdFx0cmV0dXJuO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTg3LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo1ODg6XHRtID0gKHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjAgKikgYnVmZi1cdTAwM2VtZXNnO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo1ODk6XHRzID0gKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAgKikgYnVmZi1cdTAwM2VoZWFkO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01OTAtXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02MDItXHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9TRVFfTUFTSykge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo2MDM6XHRcdHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqb3B0ID1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NjA0Olx0XHRcdChzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKilcdTAwMjZzWzFdO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02MDUtXHRcdG1lbWNweShvcHQsIFx1MDAyNmNwLVx1MDAzZXN5bmNfY29ubl9vcHQsIHNpemVvZigqb3B0KSk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02MTktXHRcdFx0cGt0cyA9IHN5c2N0bF9zeW5jX3RocmVzaG9sZChpcHZzKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NjIwOlx0XHRpcF92c19zeW5jX2Nvbm4oaXB2cywgY3AsIHBrdHMpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02MjEtXHR9XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02MjgtICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjYyOTp2b2lkIGlwX3ZzX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgcGt0cylcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjMwLXtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NjMxOlx0c3RydWN0IGlwX3ZzX3N5bmNfbWVzZyAqbTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NjMyOlx0dW5pb24gaXBfdnNfc3luY19jb25uICpzO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo2MzM6XHRzdHJ1Y3QgaXBfdnNfc3luY19idWZmICpidWZmO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02MzQtXHRzdHJ1Y3QgaXB2c19tYXN0ZXJfc3luY19zdGF0ZSAqbXM7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02NDAtXHRpZiAoc3lzY3RsX3N5bmNfdmVyKGlwdnMpID09IDApIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NjQxOlx0XHRpcF92c19zeW5jX2Nvbm5fdjAoaXB2cywgY3AsIHBrdHMpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02NDItXHRcdHJldHVybjtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY0Ny1zbG9vcDpcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NjQ4Olx0aWYgKCFpcF92c19zeW5jX2Nvbm5fbmVlZGVkKGlwdnMsIGNwLCBwa3RzKSlcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjQ5LVx0XHRnb3RvIGNvbnRyb2w7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02NzEtXHRpZiAoY3AtXHUwMDNlYWYgPT0gQUZfSU5FVDYpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjY3MjpcdFx0bGVuID0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX3Y2KTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjczLVx0ZWxzZVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02NzQtI2VuZGlmXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjY3NTpcdFx0bGVuID0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX3Y0KTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjc2LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02NzctXHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9TRVFfTUFTSylcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6Njc4Olx0XHRsZW4gJiM0Mzs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMpICYjNDM7IDI7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY3OS1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTcwMC1cdGlmICghYnVmZikge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo3MDE6XHRcdGJ1ZmYgPSBpcF92c19zeW5jX2J1ZmZfY3JlYXRlKGlwdnMsIGxlbik7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTcwMi1cdFx0aWYgKCFidWZmKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTcwMy1cdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZpcHZzLVx1MDAzZXN5bmNfYnVmZl9sb2NrKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NzA0Olx0XHRcdHByX2VycihcJiMzNDtpcF92c19zeW5jX2J1ZmZfY3JlYXRlIGZhaWxlZC5cXG5cJiMzNDspO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03MDUtXHRcdFx0cmV0dXJuO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzE3LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo3MTg6XHRzID0gKHVuaW9uIGlwX3ZzX3N5bmNfY29ubiAqKXA7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTcxOS1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTczNC1cdGlmIChjcC1cdTAwM2VhZiA9PSBBRl9JTkVUNikge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo3MzU6XHRcdHAgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY192Nik7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTczNi1cdFx0cy1cdTAwM2V2Ni5jYWRkciA9IGNwLVx1MDAzZWNhZGRyLmluNjtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTc0MS1cdHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NzQyOlx0XHRwICYjNDM7PSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfdjQpO1x0Lyogb3B0aW9ucyBwdHIgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzQzLVx0XHRzLVx1MDAzZXY0LmNhZGRyID0gY3AtXHUwMDNlY2FkZHIuaXA7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03NDgtXHRcdCoocCYjNDM7JiM0MzspID0gSVBWU19PUFRfU0VRX0RBVEE7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjc0OTpcdFx0KihwJiM0MzsmIzQzOykgPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzUwLVx0XHRodG9uX3NlcShcdTAwMjZjcC1cdTAwM2Vpbl9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz03ODc9c3RhdGljIGlubGluZSBpbnRcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6Nzg4OmlwX3ZzX2Nvbm5fZmlsbF9wYXJhbV9zeW5jKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgYWYsIHVuaW9uIGlwX3ZzX3N5bmNfY29ubiAqc2MsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTc4OS1cdFx0XHQgICBzdHJ1Y3QgaXBfdnNfY29ubl9wYXJhbSAqcCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTg0MT1zdGF0aWMgdm9pZCBpcF92c19wcm9jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uX3BhcmFtICpwYXJhbSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTg0NS1cdFx0XHQgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0LCBfX3UzMiBmd21hcmssXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjg0NjpcdFx0XHQgICAgc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICpvcHQpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTg0Ny17XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05NTItLyogQ2hlY2sgZm9yIGluY29tcGF0aWJsZSBmbGFncyAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo5NTM6c3RhdGljIGJvb2wgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyh1MzIgZmxhZ3MpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTk1NC17XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz05NzA9c3RhdGljIHZvaWQgaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBjb25zdCBjaGFyICpidWZmZXIsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05NzIte1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo5NzM6XHRzdHJ1Y3QgaXBfdnNfc3luY19tZXNnX3YwICptID0gKHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjAgKilidWZmZXI7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjk3NDpcdHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAgKnM7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjk3NTpcdHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqb3B0O1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05NzYtXHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtOTgwLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo5ODE6XHRwID0gKGNoYXIgKilidWZmZXIgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjApO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05ODItXHRmb3IgKGk9MDsgaVx1MDAzY20tXHUwMDNlbnJfY29ubnM7IGkmIzQzOyYjNDM7KSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05ODgtXHRcdH1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6OTg5Olx0XHRzID0gKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAgKikgcDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtOTkwLVx0XHRmbGFncyA9IG50b2hzKHMtXHUwMDNlZmxhZ3MpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05OTEtXHRcdGlmIChmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX1NFUV9NQVNLKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjk5MjpcdFx0XHRvcHQgPSAoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICopXHUwMDI2c1sxXTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtOTkzLVx0XHRcdHAgJiM0Mzs9IEZVTExfQ09OTl9TSVpFO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTAwMi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTAwMzpcdFx0aWYgKCFpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzKGZsYWdzKSkge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMDA0LVx0XHRcdElQX1ZTX0RCRygyLCBcJiMzNDtCQUNLVVAgdjAsIEludmFsaWQgZmxhZ3MgMHglWFxcblwmIzM0OywgZmxhZ3MpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTA0NT1zdGF0aWMgaW5saW5lIGludCBpcF92c19wcm9jX3NlcW9wdChfX3U4ICpwLCB1bnNpZ25lZCBpbnQgcGxlbixcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTA0Ni1cdFx0XHRcdCAgICBfX3UzMiAqb3B0X2ZsYWdzLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMDQ3Olx0XHRcdFx0ICAgIHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqb3B0KVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMDQ4LXtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTA0OTpcdHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqdG9wdDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTA1MC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTA1MTpcdHRvcHQgPSAoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICopcDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTA1Mi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTA1MzpcdGlmIChwbGVuICE9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMpKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEwNTQtXHRcdElQX1ZTX0RCRygyLCBcJiMzNDtCQUNLVVAsIGJvZ3VzIGNvbm4gb3B0aW9ucyBsZW5ndGhcXG5cJiMzNDspO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTA4Nz1zdGF0aWMgaW5saW5lIGludCBpcF92c19wcm9jX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgX191OCAqcCwgX191OCAqbXNnX2VuZClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTA4OC17XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEwODk6XHRzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgb3B0O1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMDkwOlx0dW5pb24gIGlwX3ZzX3N5bmNfY29ubiAqcztcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTA5MS1cdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHA7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMDk4LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMDk5Olx0cyA9ICh1bmlvbiBpcF92c19zeW5jX2Nvbm4gKikgcDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTEwMC1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTExMDMtXHRcdGFmID0gQUZfSU5FVDY7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjExMDQ6XHRcdHAgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY192Nik7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTExMDUtI2Vsc2Vcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTExMTEtXHRcdGFmID0gQUZfSU5FVDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTExMjpcdFx0cCAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX3Y0KTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTExMy1cdH0gZWxzZSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMTY1LVx0ZmxhZ3MgPSBudG9obChzLVx1MDAzZXY0LmZsYWdzKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTE2NjpcdGlmICghaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyhmbGFncykpIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTE2Ny1cdFx0SVBfVlNfREJHKDMsIFwmIzM0O0JBQ0tVUCwgSW52YWxpZCBmbGFncyAweCVYXFxuXCYjMzQ7LCBmbGFncyk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xMjI3PXN0YXRpYyB2b2lkIGlwX3ZzX3Byb2Nlc3NfbWVzc2FnZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgX191OCAqYnVmZmVyLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTIyOS17XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEyMzA6XHRzdHJ1Y3QgaXBfdnNfc3luY19tZXNnICptMiA9IChzdHJ1Y3QgaXBfdnNfc3luY19tZXNnICopYnVmZmVyO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMjMxLVx0X191OCAqcCwgKm1zZ19lbmQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMjMzLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMjM0Olx0aWYgKGJ1ZmxlbiBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjApKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEyMzUtXHRcdElQX1ZTX0RCRygyLCBcJiMzNDtCQUNLVVAsIG1lc3NhZ2UgaGVhZGVyIHRvbyBzaG9ydFxcblwmIzM0Oyk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMjUxLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMjUyOlx0XHRtc2dfZW5kID0gYnVmZmVyICYjNDM7IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19tZXNnKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTI1My1cdFx0bnJfY29ubnMgPSBtMi1cdTAwM2Vucl9jb25ucztcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEyNTUtXHRcdGZvciAoaT0wOyBpXHUwMDNjbnJfY29ubnM7IGkmIzQzOyYjNDM7KSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEyNTY6XHRcdFx0dW5pb24gaXBfdnNfc3luY19jb25uICpzO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMjU3LVx0XHRcdHVuc2lnbmVkIGludCBzaXplO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTI2NC1cdFx0XHR9XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEyNjU6XHRcdFx0cyA9ICh1bmlvbiBpcF92c19zeW5jX2Nvbm4gKilwO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMjY2LVx0XHRcdHNpemUgPSBudG9ocyhzLVx1MDAzZXY0LnZlcl9zaXplKSBcdTAwMjYgU1ZFUl9NQVNLO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTYxMD1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE2MTE6aXBfdnNfc2VuZF9zeW5jX21zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgaXBfdnNfc3luY19tZXNnICptc2cpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE2MTIte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTY0Mj1zdGF0aWMgdm9pZCBtYXN0ZXJfd2FrZXVwX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNjYwLS8qIEdldCBuZXh0IGJ1ZmZlciB0byBzZW5kICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE2NjE6c3RhdGljIGlubGluZSBzdHJ1Y3QgaXBfdnNfc3luY19idWZmICpcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTY2Mi1uZXh0X3N5bmNfYnVmZihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwdnNfbWFzdGVyX3N5bmNfc3RhdGUgKm1zKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNjYzLXtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTY2NDpcdHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKnNiO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNjY1LVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTY3Mz1zdGF0aWMgaW50IHN5bmNfdGhyZWFkX21hc3Rlcih2b2lkICpkYXRhKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNjc0LXtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTY3NTpcdHN0cnVjdCBpcF92c19zeW5jX3RocmVhZF9kYXRhICp0aW5mbyA9IGRhdGE7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE2NzYtXHRzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyA9IHRpbmZvLVx1MDAzZWlwdnM7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNjc4LVx0c3RydWN0IHNvY2sgKnNrID0gdGluZm8tXHUwMDNlc29jay1cdTAwM2Vzaztcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTY3OTpcdHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKnNiO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNjgwLVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTcwMi1cdFx0fVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNzAzOlx0XHRpcF92c19zeW5jX2J1ZmZfcmVsZWFzZShzYik7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE3MDQtXHR9XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNzA4LVx0aWYgKHNiKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNzA5Olx0XHRpcF92c19zeW5jX2J1ZmZfcmVsZWFzZShzYik7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE3MTAtXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNzEyLVx0d2hpbGUgKChzYiA9IHNiX2RlcXVldWUoaXB2cywgbXMpKSlcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTcxMzpcdFx0aXBfdnNfc3luY19idWZmX3JlbGVhc2Uoc2IpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNzE0LVx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTcxOC1cdGlmIChzYilcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTcxOTpcdFx0aXBfdnNfc3luY19idWZmX3JlbGVhc2Uoc2IpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNzIwLVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTcyNT1zdGF0aWMgaW50IHN5bmNfdGhyZWFkX2JhY2t1cCh2b2lkICpkYXRhKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNzI2LXtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTcyNzpcdHN0cnVjdCBpcF92c19zeW5jX3RocmVhZF9kYXRhICp0aW5mbyA9IGRhdGE7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE3MjgtXHRzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyA9IHRpbmZvLVx1MDAzZWlwdnM7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xNzYyPWludCBzdGFydF9zeW5jX3RocmVhZChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwdnNfc3luY19kYWVtb25fY2ZnICpjLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTc2NC17XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE3NjU6XHRzdHJ1Y3QgaXBfdnNfc3luY190aHJlYWRfZGF0YSAqdGkgPSBOVUxMLCAqdGluZm87XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE3NjYtXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNzc0LVx0SVBfVlNfREJHKDcsIFwmIzM0OyVzKCk6IHBpZCAlZFxcblwmIzM0OywgX19mdW5jX18sIHRhc2tfcGlkX25yKGN1cnJlbnQpKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTc3NTpcdElQX1ZTX0RCRyg3LCBcJiMzNDtFYWNoIGlwX3ZzX3N5bmNfY29ubiBlbnRyeSBuZWVkcyAlemQgYnl0ZXNcXG5cJiMzNDssXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE3NzY6XHRcdCAgc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjApKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTc3Ny1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE4ODktXHRyZXN1bHQgPSAtRU5PTUVNO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxODkwOlx0dGkgPSBremFsbG9jX29ianMoc3RydWN0IGlwX3ZzX3N5bmNfdGhyZWFkX2RhdGEsIGNvdW50KTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTg5MS1cdGlmICghdGkpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xOTc4PWludCBzdG9wX3N5bmNfdGhyZWFkKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgc3RhdGUpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE5Nzkte1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxOTgwOlx0c3RydWN0IGlwX3ZzX3N5bmNfdGhyZWFkX2RhdGEgKnRpLCAqdGluZm87XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE5ODEtXHRpbnQgaWQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yMDY1LSAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoyMDY2OmludCBfX25ldF9pbml0IGlwX3ZzX3N5bmNfbmV0X2luaXQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTIwNjcte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjA3My1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MjA3NDp2b2lkIGlwX3ZzX3N5bmNfbmV0X2NsZWFudXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTIwNzUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDY4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBQYXRjaCYjMzk7cyBQdXJwb3NlKioKClJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gQmVmb3JlIEkgZXZlbiAqdGhpbmsqIGFib3V0IGFwcGx5aW5nIHRoaXMgcGF0Y2ggb3IgZXZhbHVhdGluZyBpdHMgcXVhbGl0eSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogaXQgZXhpc3RzLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB1c2UgYGdpdCBzaG93YCBvbiB0aGUgc3BlY2lmaWMgY29tbWl0IGluIHF1ZXN0aW9uLiBUaGF0JiMzOTtzIHRoZSBxdWlja2VzdCByb3V0ZSB0byB0aGUgbWV0YWRhdGE6IHRoZSBjb21taXQgbWVzc2FnZSwgYW55IHJlbGF0ZWQgaXNzdWUgSURzLCBhbmQgdGhlIGRpZmYgaXRzZWxmLiBUaGUgY29tbWl0IG1lc3NhZ2UgKnNob3VsZCogcHJvdmlkZSBhIGNvbmNpc2UgcHJvYmxlbSBzdGF0ZW1lbnQgYW5kLCBpZGVhbGx5LCBleHBsYWluIHRoZSB1bmRlcmx5aW5nIHJhdGlvbmFsZSBmb3IgdGhlIGZpeC4gSSYjMzk7bSBob3BpbmcgdG8gc2VlIGEgY2xlYXIgZGVzY3JpcHRpb24gb2YgdGhlIGJ1ZywgYW55IHJlbGV2YW50IHBlcmZvcm1hbmNlIG1ldHJpY3MgYmVmb3JlIGFuZCBhZnRlciwgb3IgbWF5YmUgYSByYXRpb25hbGUgZm9yIGEgbmV3IGZlYXR1cmUuCgpJJiMzOTttIGFsc28gbG9va2luZyBmb3IgYSBjbGVhbiwgd2VsbC1mb3JtZWQgY29tbWl0IG1lc3NhZ2UuIEl0IG5lZWRzIHRvIGJlIGNsZWFyIGFuZCBjb25jaXNlLiBJZiBpdOKAmXMgdW5jbGVhciwgdGhlbiBJIG1heSBuZWVkIHRvIGRpdmUgZnVydGhlciB0byB0aGUgcmVsYXRlZCB0aWNrZXQgb3IgY29kZS4KClVsdGltYXRlbHksIEkgd2FudCB0byBmb3JtIGEgbWVudGFsIG1vZGVsIG9mIHRoZSAqcHJvYmxlbSBzcGFjZSogdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nLiBVbmRlcnN0YW5kaW5nIHRoZSAqd2h5KiBpcyB0aGUgZm91bmRhdGlvbiBmb3IgcHJvcGVybHkgYXNzZXNzaW5nIHRoZSAqaG93Ki4gSSBjYW4gYWxyZWFkeSBzdGFydCB0aGlua2luZyBhYm91dCBwb3NzaWJsZSBlZGdlIGNhc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lQX1ZTX0NPTk5fRl9OT19DUE9SVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTM2Nz1fX2lwX3ZzX2Nvbm5faW5fZ2V0KGNvbnN0IHN0cnVjdCBpcF92c19jb25uX3BhcmFtICpwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMzk1LVx0XHRcdFx0ICAgICghcC1cdTAwM2VjcG9ydCBeXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjM5NjpcdFx0XHRcdCAgICAgKCEoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9OT19DUE9SVCkpKSBcdTAwMjZcdTAwMjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMzk3LVx0XHRcdFx0ICAgIHAtXHUwMDNlcHJvdG9jb2wgPT0gY3AtXHUwMDNlcHJvdG9jb2wpIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTY0Mz12b2lkIGlwX3ZzX2Nvbm5fZmlsbF9jcG9ydChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIF9fYmUxNiBjcG9ydClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTY4NC1cdFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2Y3AtXHUwMDNlbG9jayk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjY4NTpcdFx0XHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9OT19DUE9SVCBcdTAwMjZcdTAwMjYgYnlfbWUpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTY4Ni1cdFx0XHRcdGNwLVx1MDAzZWNwb3J0ID0gMDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTc1Ny1cdC8qIEZpbGwgY3BvcnQgb25jZSwgZXZlbiBpZiBtdWx0aXBsZSBwYWNrZXRzIHRyeSB0byBkbyBpdCAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo3NTg6XHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9OT19DUE9SVCBcdTAwMjZcdTAwMjYgKCFjcC1cdTAwM2VjcG9ydCB8fCBieV9tZSkpIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNzU5LVx0XHQvKiBJZiB3ZSByYWNlIHdpdGggcmVzaXppbmcgbWFrZSBzdXJlIGNwb3J0IGlzIHNldCBmb3IgZGlyIDEgKi9cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTc2NS1cdFx0XHRhdG9taWNfZGVjKFx1MDAyNmlwdnMtXHUwMDNlbm9fY3BvcnRfY29ubnNbYWZfaWRdKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6NzY2Olx0XHRcdGNwLVx1MDAzZWZsYWdzIFx1MDAyNj0gfklQX1ZTX0NPTk5fRl9OT19DUE9SVDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNzY3LVx0XHR9XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz04NzU9c3RydWN0IGlwX3ZzX3JodCAqaXBfdnNfY29ubl90YWJfYWxsb2Moc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBidWNrZXRzLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtODgyLVx0c2NvdW50cyA9IGNsYW1wKGJ1Y2tldHMgXHUwMDNlXHUwMDNlIDYsIDEsIDI1Nik7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjg4MzpcdC8qIGxvY2tzOiBiYXNlZCBvbiBwYXJhbGxlbCBJUF9WU19DT05OX0ZfTk9fQ1BPUlQgb3BlcmF0aW9ucyAmIzQzOyByZXNpemUgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtODg0LVx0bG9ja3MgPSBjbGFtcCg4LCAxLCBzY291bnRzKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTEzNDc9c3RhdGljIHZvaWQgaXBfdnNfY29ubl9leHBpcmUoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMzk0LVx0XHRpcF92c191bmJpbmRfZGVzdChjcCk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjEzOTU6XHRcdGlmICh1bmxpa2VseShjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX05PX0NQT1JUKSkge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMzk2LVx0XHRcdGludCBhZl9pZCA9IGlwX3ZzX2FmX2luZGV4KGNwLVx1MDAzZWFmKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTE0NDQ9aXBfdnNfY29ubl9uZXcoY29uc3Qgc3RydWN0IGlwX3ZzX2Nvbm5fcGFyYW0gKnAsIGludCBkZXN0X2FmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTUxNi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTUxNzpcdGlmICh1bmxpa2VseShmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX05PX0NQT1JUKSkge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xNTE4LVx0XHRpbnQgYWZfaWQgPSBpcF92c19hZl9pbmRleChjcC1cdTAwM2VhZik7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jPTI1ND1zdGF0aWMgaW50IGlwX3ZzX2Z0cF9vdXQoc3RydWN0IGlwX3ZzX2FwcCAqYXBwLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTMzNy1cdFx0bl9jcCA9IGlwX3ZzX2Nvbm5fbmV3KFx1MDAyNnAsIGNwLVx1MDAzZWFmLCBcdTAwMjZmcm9tLCBwb3J0LFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jOjMzODpcdFx0XHRcdCAgICAgIElQX1ZTX0NPTk5fRl9OT19DUE9SVCB8XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtMzM5LVx0XHRcdFx0ICAgICAgSVBfVlNfQ09OTl9GX05GQ1QsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz05NTM9c3RhdGljIGJvb2wgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyh1MzIgZmxhZ3MpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05NTctXHQgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6OTU4Olx0aWYgKGZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfTk9fQ1BPUlQpIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtOTU5LVx0XHRpZiAoZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9URU1QTEFURSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jPTc4Nz1pcF92c19uYXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYy03OTMtXHQvKiBjaGVjayBpZiBpdCBpcyBhIGNvbm5lY3Rpb24gb2Ygbm8tY2xpZW50LXBvcnQgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM6Nzk0Olx0aWYgKHVubGlrZWx5KGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfTk9fQ1BPUlQpKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jLTc5NS1cdFx0X19iZTE2IF9wdCwgKnA7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYz04NzE9aXBfdnNfbmF0X3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMtODc3LVx0LyogY2hlY2sgaWYgaXQgaXMgYSBjb25uZWN0aW9uIG9mIG5vLWNsaWVudC1wb3J0ICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jOjg3ODpcdGlmICh1bmxpa2VseShjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX05PX0NQT1JUIFx1MDAyNlx1MDAyNiAhaXB2c2gtXHUwMDNlZnJhZ29mZnMpKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jLTg3OS1cdFx0X19iZTE2IF9wdCwgKnA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0NzYKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCBjb25zaWRlcmluZyBJJiMzOTttIGFuIGV4cGVydDoKCioqRGl2aW5nIGludG8gdGhlIElQVlMgU3luY2hyb25pemF0aW9uIENvZGUqKgoKT2theSwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byB1bmRlcnN0YW5kIHRoaXMgY29kZSwgYW5kIGl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGZvY3VzZWQgb24gYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNgLiBUaGF0JiMzOTtzIHRoZSBoZWFydCBvZiBob3cgSVBWUywgdGhlIExpbnV4IFZpcnR1YWwgU2VydmVyLCBoYW5kbGVzIHN5bmNocm9uaXphdGlvbi4gUmlnaHQsIHRpbWUgdG8gZGlnIGluIGFuZCBnZXQgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNoYW5nZXMuIEkmIzM5O2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIGRpZmYuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBjbHVlcyB0aGF0IHN1Z2dlc3QgaXNzdWVzIHRoYXQgbmVlZCB0byBiZSBhZGRyZXNzZWQgaW4gdGhlIGNvbnRleHQgdGhhdCB0aGV5IGFwcGVhciBpbiB0aGUgZmlsZS4gSSB3aWxsIGZvY3VzIG9uIGFueSBuZXcgZmVhdHVyZXMsIGJ1ZyBmaXhlcywgb3IgcGVyZm9ybWFuY2UgdHdlYWtzLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGNvbnRleHQgb2YgdGhlIG1vZGlmaWNhdGlvbnMsIGFuZCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBJUFZTIHN5c3RlbS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NDU6XHRcdFx0XHRjcC1cdTAwM2V0aW1lb3V0ID0gcGQtXHUwMDNldGltZW91dF90YWJsZVtzdGF0ZV07XG4gOTQ2Olx0XHRcdGVsc2VcbiA5NDc6XHRcdFx0XHRjcC1cdTAwM2V0aW1lb3V0ID0gKDMqNjAqSFopO1xuIDk0ODpcdFx0fVxuIDk0OTpcdFx0aXBfdnNfY29ubl9wdXQoY3ApO1xuIDk1MDpcdH1cbiA5NTE6XHRcbiA5NTI6XHQvKiBDaGVjayBmb3IgaW5jb21wYXRpYmxlIGZsYWdzICovXG4gOTUzOlx0c3RhdGljIGJvb2wgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyh1MzIgZmxhZ3MpXG4gOTU0Olx0e1xuIDk1NTpcdFx0LyogV2UgZG8gbm90IGV4cGVjdCBOT19DUE9SVCwgZXNwZWNpYWxseSB0byBhbGxvdyBsb29rdXBzXG4gOTU2Olx0XHQgKiB0byBoaXQgdGVtcGxhdGVzXG4gOTU3Olx0XHQgKi9cbiA5NTg6XHRcdGlmIChmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX05PX0NQT1JUKSB7XG4gOTU5Olx0XHRcdGlmIChmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX1RFTVBMQVRFKVxuIDk2MDpcdFx0XHRcdHJldHVybiBmYWxzZTtcbiA5NjE6XHRcdH1cbiA5NjI6XHRcdGlmIChmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpXG4gOTYzOlx0XHRcdHJldHVybiBmYWxzZTtcbiA5NjQ6XHRcdHJldHVybiB0cnVlO1xuIDk2NTpcdH1cbiA5NjY6XHRcbiA5Njc6XHQvKlxuIDk2ODpcdCAqICBQcm9jZXNzIHJlY2VpdmVkIG11bHRpY2FzdCBtZXNzYWdlIGZvciBWZXJzaW9uIDBcbiA5Njk6XHQgKi9cbiA5NzA6XHRzdGF0aWMgdm9pZCBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGNvbnN0IGNoYXIgKmJ1ZmZlcixcbiA5NzE6XHRcdFx0XHRcdCAgICAgY29uc3Qgc2l6ZV90IGJ1ZmxlbilcbiA5NzI6XHR7XG4gOTczOlx0XHRzdHJ1Y3QgaXBfdnNfc3luY19tZXNnX3YwICptID0gKHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjAgKilidWZmZXI7XG4gOTc0Olx0XHRzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwICpzO1xuIDk3NTpcdFx0c3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICpvcHQ7XG4gOTc2Olx0XHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwO1xuIDk3NzpcdFx0c3RydWN0IGlwX3ZzX2Nvbm5fcGFyYW0gcGFyYW07XG4gOTc4Olx0XHRjaGFyICpwO1xuIDk3OTpcdFx0aW50IGk7XG4gOTgwOlx0XG4gOTgxOlx0XHRwID0gKGNoYXIgKilidWZmZXIgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjApO1xuIDk4MjpcdFx0Zm9yIChpPTA7IGlcdTAwM2NtLVx1MDAzZW5yX2Nvbm5zOyBpJiM0MzsmIzQzOykge1xuIDk4MzpcdFx0XHR1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0YXRlO1xuIDk4NDpcdFxuIDk4NTpcdFx0XHRpZiAocCAmIzQzOyBTSU1QTEVfQ09OTl9TSVpFIFx1MDAzZSBidWZmZXImIzQzO2J1Zmxlbikge1xuIDk4NjpcdFx0XHRcdElQX1ZTX0VSUl9STChcJiMzNDtCQUNLVVAgdjAsIGJvZ3VzIGNvbm5cXG5cJiMzNDspO1xuIDk4NzpcdFx0XHRcdHJldHVybjtcbiA5ODg6XHRcdFx0fVxuIDk4OTpcdFx0XHRzID0gKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAgKikgcDtcbiA5OTA6XHRcdFx0ZmxhZ3MgPSBudG9ocyhzLVx1MDAzZWZsYWdzKTtcbiA5OTE6XHRcdFx0aWYgKGZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0spIHtcbiA5OTI6XHRcdFx0XHRvcHQgPSAoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICopXHUwMDI2c1sxXTtcbiA5OTM6XHRcdFx0XHRwICYjNDM7PSBGVUxMX0NPTk5fU0laRTtcbiA5OTQ6XHRcdFx0XHRpZiAocCBcdTAwM2UgYnVmZmVyJiM0MztidWZsZW4pIHtcbiA5OTU6XHRcdFx0XHRcdElQX1ZTX0VSUl9STChcJiMzNDtCQUNLVVAgdjAsIERyb3BwaW5nIGJ1ZmZlciBib2d1cyBjb25uIG9wdGlvbnNcXG5cJiMzNDspO1xuIDk5NjpcdFx0XHRcdFx0cmV0dXJuO1xuIDk5NzpcdFx0XHRcdH1cbiA5OTg6XHRcdFx0fSBlbHNlIHtcbiA5OTk6XHRcdFx0XHRvcHQgPSBOVUxMO1xuMTAwMDpcdFx0XHRcdHAgJiM0Mzs9IFNJTVBMRV9DT05OX1NJWkU7XG4xMDAxOlx0XHRcdH1cbjEwMDI6XHRcbjEwMDM6XHRcdFx0aWYgKCFpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzKGZsYWdzKSkge1xuMTAwNDpcdFx0XHRcdElQX1ZTX0RCRygyLCBcJiMzNDtCQUNLVVAgdjAsIEludmFsaWQgZmxhZ3MgMHglWFxcblwmIzM0OywgZmxhZ3MpO1xuMTAwNTpcdFx0XHRcdGNvbnRpbnVlO1xuMTAwNjpcdFx0XHR9XG4xMDA3Olx0XHRcdGZsYWdzIFx1MDAyNj0gSVBfVlNfQ09OTl9GX0JBQ0tVUF9NQVNLO1xuMTAwODpcdFx0XHRmbGFncyB8PSBJUF9WU19DT05OX0ZfU1lOQztcbjEwMDk6XHRcbjEwMTA6XHRcdFx0c3RhdGUgPSBudG9ocyhzLVx1MDAzZXN0YXRlKTtcbjEwMTE6XHRcdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9URU1QTEFURSkpIHtcbjEwMTI6XHRcdFx0XHRwcCA9IGlwX3ZzX3Byb3RvX2dldChzLVx1MDAzZXByb3RvY29sKTtcbjEwMTM6XHRcdFx0XHRpZiAoIXBwKSB7XG4xMDE0Olx0XHRcdFx0XHRJUF9WU19EQkcoMiwgXCYjMzQ7QkFDS1VQIHYwLCBVbnN1cHBvcnRlZCBwcm90b2NvbCAldVxcblwmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODg1NAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBzbmlwcGV0LCBmcmFtZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIGBpcF92c19wcm9jX3N5bmNfY29ubmAgRnVuY3Rpb24qKgoKT2theSwgc28gd2UmIzM5O3JlIGZvY3VzaW5nIG9uIHNvbWUgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lcyAxMTQwIHRvIDExNzUsIGFuZCBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBgaXBfdnNfcHJvY19zeW5jX2Nvbm5gIGZ1bmN0aW9uLiBHaXZlbiBteSBleHBlcnRpc2UgaW4gdGhpcyBhcmVhLCBteSBpbml0aWFsIHRob3VnaHQgaXMgbGlrZWx5IGFib3V0IHRoZSBjb250ZXh0LiBXaGF0IGlzIHRoaXMgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yPyAmIzM0O2lwX3ZzJiMzNDsgaW1tZWRpYXRlbHkgc2NyZWFtcyAmIzM0O0lQIFZpcnR1YWwgU2VydmVyLCYjMzQ7IG1lYW5pbmcgaXQmIzM5O3MgaGlnaGx5IHJlbGV2YW50IHRvIGxvYWQgYmFsYW5jaW5nIG9yIHNpbWlsYXIgdHJhZmZpYyBtYW5hZ2VtZW50LiBUaGUgbmFtZSAmIzM0O3N5bmNfY29ubiYjMzQ7IHN1Z2dlc3RzIGl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiBzeW5jaHJvbml6aW5nIGNvbm5lY3Rpb24gaW5mb3JtYXRpb24sIHBlcmhhcHMgYmV0d2VlbiBkaWZmZXJlbnQgc2VydmVycyBpbiBhIGNsdXN0ZXIgb3IgZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBzeXN0ZW0gZGVhbGluZyB3aXRoIG5ldHdvcmsgY29ubmVjdGlvbnMuCgpJIGV4cGVjdCB0byBzZWUgdGhlIGtleSBlbGVtZW50cyBvZiBjb25uZWN0aW9uIHN0YXRlIHN5bmNocm9uaXphdGlvbi4gV2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIHRoZXkgdXNpbmc/IEFyZSB0aGV5IGVtcGxveWluZyBhbnkgbG9ja2luZyBtZWNoYW5pc21zIHRvIGVuc3VyZSBkYXRhIGludGVncml0eSBkdXJpbmcgdXBkYXRlcz8gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGZvciBkZXRhaWxzIGFyb3VuZCB0aGUgY29ubmVjdGlvbiYjMzk7cyBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIElQIGFkZHJlc3NlcyBhbmQgcG9ydHMsIGl0cyBjdXJyZW50IHN0YXRlLCB0aW1lb3V0cywgYW5kIGFueSByZWxldmFudCBtZXRhZGF0YS4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBjb25uZWN0aW9uIHRyYWNraW5nIGFuZCBzeW5jaHJvbml6YXRpb24gcHJvY2VzcyB3aXRoaW4gdGhlIElQVlMgc3lzdGVtLCBhbmQgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBpbmNvbnNpc3RlbmNpZXMuIElzIGl0IHVzaW5nIGFueSBzcGVjaWZpYyBwcm90b2NvbHMgZm9yIHN5bmMsIG9yIHNvbWV0aGluZyBjdXN0b20/IEFyZSB0aGVyZSBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucz8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYm90dGxlbmVja3Mgb3IgYW55IG9idmlvdXMgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE0MDpcdFx0XHRcdFx0XHQgICBJUF9WU19QRURBVEFfTUFYTEVOLCBcdTAwMjZvcHRfZmxhZ3MsXG4xMTQxOlx0XHRcdFx0XHRcdCAgIElQVlNfT1BUX0ZfUEVfREFUQSkpXG4xMTQyOlx0XHRcdFx0XHRyZXR1cm4gLTYwO1xuMTE0MzpcdFx0XHRcdGJyZWFrO1xuMTE0NDpcdFxuMTE0NTpcdFx0XHRjYXNlIElQVlNfT1BUX1BFX05BTUU6XG4xMTQ2Olx0XHRcdFx0aWYgKGlwX3ZzX3Byb2Nfc3RyKHAsIHBsZW4sXHUwMDI2cGVfbmFtZV9sZW4sIFx1MDAyNnBlX25hbWUsXG4xMTQ3Olx0XHRcdFx0XHRcdCAgIElQX1ZTX1BFTkFNRV9NQVhMRU4sIFx1MDAyNm9wdF9mbGFncyxcbjExNDg6XHRcdFx0XHRcdFx0ICAgSVBWU19PUFRfRl9QRV9OQU1FKSlcbjExNDk6XHRcdFx0XHRcdHJldHVybiAtNzA7XG4xMTUwOlx0XHRcdFx0YnJlYWs7XG4xMTUxOlx0XG4xMTUyOlx0XHRcdGRlZmF1bHQ6XG4xMTUzOlx0XHRcdFx0LyogUGFyYW0gZGF0YSBtYW5kYXRvcnkgPyAqL1xuMTE1NDpcdFx0XHRcdGlmICghKHB0eXBlIFx1MDAyNiBJUFZTX09QVF9GX1BBUkFNKSkge1xuMTE1NTpcdFx0XHRcdFx0SVBfVlNfREJHKDMsIFwmIzM0O0JBQ0tVUCwgVW5rbm93biBtYW5kYXRvcnkgcGFyYW0gJWQgZm91bmRcXG5cJiMzNDssXG4xMTU2Olx0XHRcdFx0XHRcdCAgcHR5cGUgXHUwMDI2IH5JUFZTX09QVF9GX1BBUkFNKTtcbjExNTc6XHRcdFx0XHRcdHJldGMgPSAyMDtcbjExNTg6XHRcdFx0XHRcdGdvdG8gb3V0O1xuMTE1OTpcdFx0XHRcdH1cbjExNjA6XHRcdFx0fVxuMTE2MTpcdFx0XHRwICYjNDM7PSBwbGVuOyAgLyogTmV4dCBvcHRpb24gKi9cbjExNjI6XHRcdH1cbjExNjM6XHRcbjExNjQ6XHRcdC8qIEdldCBmbGFncyBhbmQgTWFzayBvZmYgdW5zdXBwb3J0ZWQgKi9cbjExNjU6XHRcdGZsYWdzID0gbnRvaGwocy1cdTAwM2V2NC5mbGFncyk7XG4xMTY2Olx0XHRpZiAoIWlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3MoZmxhZ3MpKSB7XG4xMTY3Olx0XHRcdElQX1ZTX0RCRygzLCBcJiMzNDtCQUNLVVAsIEludmFsaWQgZmxhZ3MgMHglWFxcblwmIzM0OywgZmxhZ3MpO1xuMTE2ODpcdFx0XHRyZXRjID0gMjU7XG4xMTY5Olx0XHRcdGdvdG8gb3V0O1xuMTE3MDpcdFx0fVxuMTE3MTpcdFx0ZmxhZ3MgXHUwMDI2PSBJUF9WU19DT05OX0ZfQkFDS1VQX01BU0s7XG4xMTcyOlx0XHRmbGFncyB8PSBJUF9WU19DT05OX0ZfU1lOQztcbjExNzM6XHRcdHN0YXRlID0gbnRvaHMocy1cdTAwM2V2NC5zdGF0ZSk7XG4xMTc0Olx0XG4xMTc1Olx0XHRpZiAoIShmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX1RFTVBMQVRFKSkge1xuMTE3NjpcdFx0XHRwcCA9IGlwX3ZzX3Byb3RvX2dldChzLVx1MDAzZXY0LnByb3RvY29sKTtcbjExNzc6XHRcdFx0aWYgKCFwcCkge1xuMTE3ODpcdFx0XHRcdElQX1ZTX0RCRygzLFwmIzM0O0JBQ0tVUCwgVW5zdXBwb3J0ZWQgcHJvdG9jb2wgJXVcXG5cJiMzNDssXG4xMTc5Olx0XHRcdFx0XHRzLVx1MDAzZXY0LnByb3RvY29sKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk4NzYKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQ6CgoqKlVuZGVyc3RhbmRpbmcgdGhlIENvbW1pdCYjMzk7cyBIaXN0b3J5KioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBzcGVjaWZpYyBjb21taXQuIFRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGdvaW5nIHRvIGRvIGlzIHJlYWNoIGZvciBgZ2l0IGxvZ2AuIEkgd2FudCB0byBpbW1lZGlhdGVseSBncmFzcCB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4gV2hhdCYjMzk7cyB0aGUgbmFycmF0aXZlIGFyb3VuZCB0aGlzIGNoYW5nZT8gSSYjMzk7bSBub3QganVzdCBsb29raW5nIGZvciAqd2hhdCogd2FzIGNoYW5nZWQsIGJ1dCAqd2h5Ki4gVGhlIGNvbW1pdCBtZXNzYWdlIGlzIGtleSwgb2YgY291cnNlLCBidXQgaXQmIzM5O3Mgb2Z0ZW4gaW5zdWZmaWNpZW50IG9uIGl0cyBvd24uIEkgbmVlZCB0aGUgZnVsbCBwaWN0dXJlOiBXaGF0IHdhcyB0aGUgc3RhdGUgb2YgdGhlIHByb2plY3QgYmVmb3JlIHRoaXM/IFdoYXQgb3RoZXIgY29tbWl0cyB3ZXJlIG1hZGUgYXJvdW5kIHRoZSBzYW1lIHRpbWU/IFdlcmUgdGhlcmUgcmVsYXRlZCBicmFuY2hlcyBtZXJnZWQ/IEFueSByZWxldmFudCBwdWxsIHJlcXVlc3RzPyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgY29uY2lzZSBsb2csIG1heWJlIHVzaW5nIGAtLW9uZWxpbmVgIHRvIGtlZXAgaXQgZm9jdXNlZC4gVGhlbiwgSSBjYW4gZXhwYW5kIHRoZSBjb21taXQgd2l0aCBgLS1wYXRjaGAgdG8gZ28gbW9yZSBpbi1kZXB0aC4gVGhpcyBpcyBhYm91dCBidWlsZGluZyBhIG1lbnRhbCBtYXAgb2YgdGhlIGNoYW5nZXMsIHNvIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGluIHRoZSBtZXNzYWdlcy4gVGhhdCYjMzk7cyB3aGF0IEkgd2FudCB0byBlc3RhYmxpc2guIFRoZW4sIEkgY2FuIHN0YXJ0IHRvIHRoaW5rIGFib3V0IHRoZSBjb250ZW50IGl0c2VsZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTg0MT1zdGF0aWMgdm9pZCBpcF92c19wcm9jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uX3BhcmFtICpwYXJhbSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTk1Mi0vKiBDaGVjayBmb3IgaW5jb21wYXRpYmxlIGZsYWdzICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjk1MzpzdGF0aWMgYm9vbCBpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzKHUzMiBmbGFncylcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtOTU0LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTk3MD1zdGF0aWMgdm9pZCBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGNvbnN0IGNoYXIgKmJ1ZmZlcixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEwMDItXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEwMDM6XHRcdGlmICghaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyhmbGFncykpIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTAwNC1cdFx0XHRJUF9WU19EQkcoMiwgXCYjMzQ7QkFDS1VQIHYwLCBJbnZhbGlkIGZsYWdzIDB4JVhcXG5cJiMzNDssIGZsYWdzKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTEwODc9c3RhdGljIGlubGluZSBpbnQgaXBfdnNfcHJvY19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIF9fdTggKnAsIF9fdTggKm1zZ19lbmQpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMTY1LVx0ZmxhZ3MgPSBudG9obChzLVx1MDAzZXY0LmZsYWdzKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTE2NjpcdGlmICghaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyhmbGFncykpIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTE2Ny1cdFx0SVBfVlNfREJHKDMsIFwmIzM0O0JBQ0tVUCwgSW52YWxpZCBmbGFncyAweCVYXFxuXCYjMzQ7LCBmbGFncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjQ1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZSwgdXNpbmcgYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmU6CgoqKkRlbHZpbmcgaW50byBJUFZTIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljIEtjb25maWcgb3B0aW9ucyB0aGF0IGNvbnRyb2wgdGhlIGNvbmZpZ3VyYXRpb24gb2YgSVBWUyAodGhlIExpbnV4IFZpcnR1YWwgU2VydmVyKSBhbmQsIGNyaXRpY2FsbHksIGhvdyBpdHMgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgYXJlIGhhbmRsZWQuIEkga25vdyB0aGUgYmFzaWMgbGFuZHNjYXBlLCBidXQgSSB3YW50IHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueSBudWFuY2VzLiBBcmUgdGhlcmUgYW55IG5ldyBvcHRpb25zIGludHJvZHVjZWQgcmVjZW50bHk/IEkgbmVlZCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBhdmFpbGFibGUgdG8gdHVuZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgYW5kIGxvYWQgYmFsYW5jaW5nIGFjcm9zcyB0aGUgY2x1c3Rlci4gVGhpcyBpcyB3aGVyZSB0aGUgZGV2aWwgaXMgaW4gdGhlIGRldGFpbHM7IGl0JiMzOTtzIGFsd2F5cyB0aGUgZmluZS1ncmFpbmVkIHNldHRpbmdzIHRoYXQgbWFrZSBvciBicmVhayBhIGhpZ2gtcGVyZm9ybWFuY2UsIHJlc2lsaWVudCBzZXR1cC4gVGltZSB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzIGFuZCB2ZXJpZnkgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJUF9WUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTQtI1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6NTptZW51Y29uZmlnIElQX1ZTXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy02LVx0dHJpc3RhdGUgXCYjMzQ7SVAgdmlydHVhbCBzZXJ2ZXIgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI2LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6Mjc6aWYgSVBfVlNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6Mjk6Y29uZmlnXHRJUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMC1cdGJvb2wgXCYjMzQ7SVB2NiBzdXBwb3J0IGZvciBJUFZTXCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMTpcdGRlcGVuZHMgb24gSVBWNiA9IHkgfHwgSVBfVlMgPSBJUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMi1cdHNlbGVjdCBORl9ERUZSQUdfSVBWNlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTM3LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6Mzg6Y29uZmlnXHRJUF9WU19ERUJVR1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzktXHRib29sIFwmIzM0O0lQIHZpcnR1YWwgc2VydmVyIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTQ0LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6NDU6Y29uZmlnXHRJUF9WU19UQUJfQklUU1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNDYtXHRpbnQgXCYjMzQ7SVBWUyBjb25uZWN0aW9uIHRhYmxlIHNpemUgKHRoZSBOdGggcG93ZXIgb2YgMilcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz03Nz1jb21tZW50IFwmIzM0O0lQVlMgdHJhbnNwb3J0IHByb3RvY29sIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcJiMzNDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTc4LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6Nzk6Y29uZmlnXHRJUF9WU19QUk9UT19UQ1Bcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTgwLVx0Ym9vbCBcJiMzNDtUQ1AgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTg0LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6ODU6Y29uZmlnXHRJUF9WU19QUk9UT19VRFBcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTg2LVx0Ym9vbCBcJiMzNDtVRFAgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTkwLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6OTE6Y29uZmlnXHRJUF9WU19QUk9UT19BSF9FU1Bcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjkyOlx0ZGVmX2Jvb2wgSVBfVlNfUFJPVE9fRVNQIHx8IElQX1ZTX1BST1RPX0FIXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy05My1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjk0OmNvbmZpZ1x0SVBfVlNfUFJPVE9fRVNQXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy05NS1cdGJvb2wgXCYjMzQ7RVNQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy05OS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjEwMDpjb25maWdcdElQX1ZTX1BST1RPX0FIXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xMDEtXHRib29sIFwmIzM0O0FIIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xMDUtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoxMDY6Y29uZmlnICBJUF9WU19QUk9UT19TQ1RQXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xMDctXHRib29sIFwmIzM0O1NDVFAgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTExMz1jb21tZW50IFwmIzM0O0lQVlMgc2NoZWR1bGVyXCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xMTQtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoxMTU6Y29uZmlnXHRJUF9WU19SUlxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTE2LVx0dHJpc3RhdGUgXCYjMzQ7cm91bmQtcm9iaW4gc2NoZWR1bGluZ1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTEyMy0gXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoxMjQ6Y29uZmlnXHRJUF9WU19XUlJcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTEyNS1cdHRyaXN0YXRlIFwmIzM0O3dlaWdodGVkIHJvdW5kLXJvYmluIHNjaGVkdWxpbmdcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xMzYtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoxMzc6Y29uZmlnXHRJUF9WU19MQ1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTM4LVx0dHJpc3RhdGUgXCYjMzQ7bGVhc3QtY29ubmVjdGlvbiBzY2hlZHVsaW5nXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTQ2LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MTQ3OmNvbmZpZ1x0SVBfVlNfV0xDXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xNDgtXHR0cmlzdGF0ZSBcJiMzNDt3ZWlnaHRlZCBsZWFzdC1jb25uZWN0aW9uIHNjaGVkdWxpbmdcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xNTYtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoxNTc6Y29uZmlnICBJUF9WU19GT1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTU4LVx0XHR0cmlzdGF0ZSBcJiMzNDt3ZWlnaHRlZCBmYWlsb3ZlciBzY2hlZHVsaW5nXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTY2LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MTY3OmNvbmZpZyAgSVBfVlNfT1ZGXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xNjgtXHR0cmlzdGF0ZSBcJiMzNDt3ZWlnaHRlZCBvdmVyZmxvdyBzY2hlZHVsaW5nXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTc3LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MTc4OmNvbmZpZ1x0SVBfVlNfTEJMQ1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTc5LVx0dHJpc3RhdGUgXCYjMzQ7bG9jYWxpdHktYmFzZWQgbGVhc3QtY29ubmVjdGlvbiBzY2hlZHVsaW5nXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTkxLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MTkyOmNvbmZpZyAgSVBfVlNfTEJMQ1Jcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTE5My1cdHRyaXN0YXRlIFwmIzM0O2xvY2FsaXR5LWJhc2VkIGxlYXN0LWNvbm5lY3Rpb24gd2l0aCByZXBsaWNhdGlvbiBzY2hlZHVsaW5nXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjA5LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MjEwOmNvbmZpZ1x0SVBfVlNfREhcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTIxMS1cdHRyaXN0YXRlIFwmIzM0O2Rlc3RpbmF0aW9uIGhhc2hpbmcgc2NoZWR1bGluZ1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTIxOS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjIyMDpjb25maWdcdElQX1ZTX1NIXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yMjEtXHR0cmlzdGF0ZSBcJiMzNDtzb3VyY2UgaGFzaGluZyBzY2hlZHVsaW5nXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjI5LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MjMwOmNvbmZpZ1x0SVBfVlNfTUhcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTIzMS1cdHRyaXN0YXRlIFwmIzM0O21hZ2xldiBoYXNoaW5nIHNjaGVkdWxpbmdcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yNDgtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyNDk6Y29uZmlnXHRJUF9WU19TRURcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI1MC1cdHRyaXN0YXRlIFwmIzM0O3Nob3J0ZXN0IGV4cGVjdGVkIGRlbGF5IHNjaGVkdWxpbmdcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yNjEtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyNjI6Y29uZmlnXHRJUF9WU19OUVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjYzLVx0dHJpc3RhdGUgXCYjMzQ7bmV2ZXIgcXVldWUgc2NoZWR1bGluZ1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI3NC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI3NTpjb25maWdcdElQX1ZTX1RXT1Ncbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI3Ni1cdHRyaXN0YXRlIFwmIzM0O3dlaWdodGVkIHJhbmRvbSB0d29zIGNob2ljZSBsZWFzdC1jb25uZWN0aW9uIHNjaGVkdWxpbmdcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0yODY9Y29tbWVudCAmIzM5O0lQVlMgU0ggc2NoZWR1bGVyJiMzOTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4Ny1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI4ODpjb25maWcgSVBfVlNfU0hfVEFCX0JJVFNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4OS1cdGludCBcJiMzNDtJUFZTIHNvdXJjZSBoYXNoaW5nIHRhYmxlIHNpemUgKHRoZSBOdGggcG93ZXIgb2YgMilcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMDE9Y29tbWVudCAmIzM5O0lQVlMgTUggc2NoZWR1bGVyJiMzOTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwMi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMwMzpjb25maWcgSVBfVlNfTUhfVEFCX0lOREVYXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDQtXHRpbnQgXCYjMzQ7SVBWUyBtYWdsZXYgaGFzaGluZyB0YWJsZSBpbmRleCBvZiBzaXplICh0aGUgcHJpbWUgbnVtYmVycylcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMTk9Y29tbWVudCAmIzM5O0lQVlMgYXBwbGljYXRpb24gaGVscGVyJiMzOTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMyMC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMyMTpjb25maWdcdElQX1ZTX0ZUUFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzIyLVx0dHJpc3RhdGUgXCYjMzQ7RlRQIHByb3RvY29sIGhlbHBlclwmIzM0O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzIzOlx0ZGVwZW5kcyBvbiBJUF9WU19QUk9UT19UQ1AgXHUwMDI2XHUwMDI2IE5GX0NPTk5UUkFDSyBcdTAwMjZcdTAwMjYgTkZfTkFUIFx1MDAyNlx1MDAyNiBcXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzI0LVx0XHRORl9DT05OVFJBQ0tfRlRQXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMjU6XHRzZWxlY3QgSVBfVlNfTkZDVFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzI2LVx0aGVscFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMzNi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMzNzpjb25maWdcdElQX1ZTX05GQ1Rcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMzOC1cdGJvb2wgXCYjMzQ7TmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmdcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zNDQtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozNDU6Y29uZmlnXHRJUF9WU19QRV9TSVBcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTM0Ni1cdHRyaXN0YXRlIFwmIzM0O1NJUCBwZXJzaXN0ZW5jZSBlbmdpbmVcJiMzNDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjM0NzpcdGRlcGVuZHMgb24gSVBfVlNfUFJPVE9fVURQXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zNDgtXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS19TSVBcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zNTI9Y29uZmlnIEdDT1ZfUFJPRklMRV9JUFZTXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzYwLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzYxOmVuZGlmICMgSVBfVlNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMyODcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJUFZTIFN5bmNocm9uaXphdGlvbiBNb2R1bGUqKgoKT2theSwgc28gYGlwX3ZzX3N5bmMuY2AgaXMgYmVpbmcgY29tcGlsZWQgYXMgcGFydCBvZiB0aGUgYGlwX3ZzLW9ianNgLCB3aGljaCBpcyBhbGwgdW5kZXIgYENPTkZJR19JUF9WU2AuIFRpbWUgdG8gZG91YmxlLWNoZWNrIHRoYXQgTWFrZWZpbGUuLi4gWXVwLCB0aGVyZSBpdCBpczoKCmBgYG1ha2VmaWxlCmlwX3ZzLW9ianMgOj0gICBpcF92c19jb25uLm8gaXBfdnNfY29yZS5vIGlwX3ZzX2N0bC5vIGlwX3ZzX3NjaGVkLm8gICAgICAgIFwKICAgICAgICAgICAgICAgIGlwX3ZzX3htaXQubyBpcF92c19hcHAubyBpcF92c19zeW5jLm8gICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgaXBfdnNfZXN0Lm8gaXBfdnNfcHJvdG8ubyBpcF92c19wZS5vCmBgYAoKU28gYENPTkZJR19JUF9WU2AgaXMgKnRoZSogb3B0aW9uLCBodWg/IEl0IGVuYWJsZXMgdGhlIHdob2xlIElQVlMgdGhpbmcsIGluY2x1ZGluZyB0aGUgc3luY2hyb25pemF0aW9uIG1vZHVsZS4gTm93LCBsZXQmIzM5O3Mgc2VlIHdoYXQgYENPTkZJR19JUF9WU2AgZGVwZW5kcyBvbi4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUga2VybmVsJiMzOTtzIEtjb25maWcgZmlsZXMuIFRoZSB1c3VhbCBzdXNwZWN0cyB3b3VsZCBiZSBlaXRoZXIgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2Agb3IsIG1vcmUgc3BlY2lmaWNhbGx5IGZvciBJUFZTLCBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgLiBJJiMzOTtsbCBzdGFydCB3aXRoIHRob3NlIGFuZCBzZWUgd2hhdCB0dXJucyB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX1ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy00LSNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjU6bWVudWNvbmZpZyBJUF9WU1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNi1cdHRyaXN0YXRlIFwmIzM0O0lQIHZpcnR1YWwgc2VydmVyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0yODY9Y29tbWVudCAmIzM5O0lQVlMgU0ggc2NoZWR1bGVyJiMzOTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4Ny1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI4ODpjb25maWcgSVBfVlNfU0hfVEFCX0JJVFNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4OS1cdGludCBcJiMzNDtJUFZTIHNvdXJjZSBoYXNoaW5nIHRhYmxlIHNpemUgKHRoZSBOdGggcG93ZXIgb2YgMilcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMDE9Y29tbWVudCAmIzM5O0lQVlMgTUggc2NoZWR1bGVyJiMzOTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwMi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMwMzpjb25maWcgSVBfVlNfTUhfVEFCX0lOREVYXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDQtXHRpbnQgXCYjMzQ7SVBWUyBtYWdsZXYgaGFzaGluZyB0YWJsZSBpbmRleCBvZiBzaXplICh0aGUgcHJpbWUgbnVtYmVycylcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQwNDYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW5pdGlhbCB0aG91Z2h0cywgYXMgaWYgSSB3ZXJlIHJlYWRpbmcgdGhlIHRvcCBvZiBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgOgoKKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIElQVlMgS2NvbmZpZyBGaWxlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ2AgZmlsZS4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGJlIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgcmVzcG9uc2libGUgZm9yIGNvbnRyb2xsaW5nIHRoZSBjb21waWxhdGlvbiBhbmQgaW5jbHVzaW9uIG9mIHRoZSBJUCBWaXJ0dWFsIFNlcnZlciAoSVBWUykgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbC4gSSYjMzk7bSBpbW1lZGlhdGVseSBsb29raW5nIGZvciB0aGUgdG9wLWxldmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGdvdmVybiB0aGUgY29yZSBJUFZTIGZlYXR1cmUgc2V0LiBJIGFudGljaXBhdGUgc2VlaW5nIGRlcGVuZGVuY2llcywgZGVmYXVsdCB2YWx1ZXMsIGFuZCBwb3RlbnRpYWxseSBzb21lIGV4cGxhbmF0aW9ucyBvciBjb21tZW50cyB0aGF0IGNsYXJpZnkgdGhlIHB1cnBvc2UgYW5kIHNjb3BlIG9mIElQVlMgd2l0aGluIHRoZSBicm9hZGVyIG5ldHdvcmtpbmcgc3RhY2suIEkmIzM5O2xsIGJlIHF1aWNrbHkgc2Nhbm5pbmcgZm9yIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBvZiB0aGUgZmlsZTogd2hhdCYjMzk7cyBlbmFibGVkIGFzIGRlZmF1bHQgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucy4gQXJlIHRoZXJlIGFueSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXM/IEFyZSB0aGVyZSBzdWItZmVhdHVyZXMgb3IgbW9kdWxlcyB3aXRoaW4gSVBWUyB0aGF0IGFyZSBpbmRpdmlkdWFsbHkgY29uZmlndXJhYmxlPyBUaGlzIGZpbGUgZGljdGF0ZXMgd2hhdCBnZXRzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gSSYjMzk7bGwgYmUgbG9va2luZyB0byBxdWlja2x5IHVuZGVyc3RhbmQgaG93IHRoZSBvdmVyYWxsIElQVlMgZnVuY3Rpb25hbGl0eSBpcyBlbmFibGVkIGFuZCBjdXN0b21pemVkIGJ5IHRoZSB1c2VyLiBJJiMzOTttIHJlYWR5IHRvIGp1bXAgaW50byB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIElQIFZpcnR1YWwgU2VydmVyIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0bWVudWNvbmZpZyBJUF9WU1xuICAgNjpcdFx0dHJpc3RhdGUgXCYjMzQ7SVAgdmlydHVhbCBzZXJ2ZXIgc3VwcG9ydFwmIzM0O1xuICAgNzpcdFx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBORVRGSUxURVJcbiAgIDg6XHRcdGRlcGVuZHMgb24gKE5GX0NPTk5UUkFDSyB8fCBORl9DT05OVFJBQ0s9bilcbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgSVAgVmlydHVhbCBTZXJ2ZXIgc3VwcG9ydCB3aWxsIGxldCB5b3UgYnVpbGQgYSBoaWdoLXBlcmZvcm1hbmNlXG4gIDExOlx0XHQgIHZpcnR1YWwgc2VydmVyIGJhc2VkIG9uIGNsdXN0ZXIgb2YgdHdvIG9yIG1vcmUgcmVhbCBzZXJ2ZXJzLiBUaGlzXG4gIDEyOlx0XHQgIG9wdGlvbiBtdXN0IGJlIGVuYWJsZWQgZm9yIGF0IGxlYXN0IG9uZSBvZiB0aGUgY2x1c3RlcmVkIGNvbXB1dGVyc1xuICAxMzpcdFx0ICB0aGF0IHdpbGwgdGFrZSBjYXJlIG9mIGludGVyY2VwdGluZyBpbmNvbWluZyBjb25uZWN0aW9ucyB0byBhXG4gIDE0Olx0XHQgIHNpbmdsZSBJUCBhZGRyZXNzIGFuZCBzY2hlZHVsaW5nIHRoZW0gdG8gcmVhbCBzZXJ2ZXJzLlxuICAxNTpcdFxuICAxNjpcdFx0ICBUaHJlZSByZXF1ZXN0IGRpc3BhdGNoaW5nIHRlY2huaXF1ZXMgYXJlIGltcGxlbWVudGVkLCB0aGV5IGFyZVxuICAxNzpcdFx0ICB2aXJ0dWFsIHNlcnZlciB2aWEgTkFULCB2aXJ0dWFsIHNlcnZlciB2aWEgdHVubmVsaW5nIGFuZCB2aXJ0dWFsXG4gIDE4Olx0XHQgIHNlcnZlciB2aWEgZGlyZWN0IHJvdXRpbmcuIFRoZSBzZXZlcmFsIHNjaGVkdWxpbmcgYWxnb3JpdGhtcyBjYW5cbiAgMTk6XHRcdCAgYmUgdXNlZCB0byBjaG9vc2Ugd2hpY2ggc2VydmVyIHRoZSBjb25uZWN0aW9uIGlzIGRpcmVjdGVkIHRvLFxuICAyMDpcdFx0ICB0aHVzIGxvYWQgYmFsYW5jaW5nIGNhbiBiZSBhY2hpZXZlZCBhbW9uZyB0aGUgc2VydmVycy4gIEZvciBtb3JlXG4gIDIxOlx0XHQgIGluZm9ybWF0aW9uIGFuZCBpdHMgYWRtaW5pc3RyYXRpb24gcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHRoZVxuICAyMjpcdFx0ICBmb2xsb3dpbmcgVVJMOiBcdTAwM2NodHRwOi8vd3d3LmxpbnV4dmlydHVhbHNlcnZlci5vcmcvXHUwMDNlLlxuICAyMzpcdFxuICAyNDpcdFx0ICBJZiB5b3Ugd2FudCB0byBjb21waWxlIGl0IGluIGtlcm5lbCwgc2F5IFkuIFRvIGNvbXBpbGUgaXQgYXMgYVxuICAyNTpcdFx0ICBtb2R1bGUsIGNob29zZSBNIGhlcmUuIElmIHVuc3VyZSwgc2F5IE4uXG4gIDI2Olx0XG4gIDI3Olx0aWYgSVBfVlNcbiAgMjg6XHRcbiAgMjk6XHRjb25maWdcdElQX1ZTX0lQVjZcbiAgMzA6XHRcdGJvb2wgXCYjMzQ7SVB2NiBzdXBwb3J0IGZvciBJUFZTXCYjMzQ7XG4gIDMxOlx0XHRkZXBlbmRzIG9uIElQVjYgPSB5IHx8IElQX1ZTID0gSVBWNlxuICAzMjpcdFx0c2VsZWN0IE5GX0RFRlJBR19JUFY2XG4gIDMzOlx0XHRoZWxwXG4gIDM0Olx0XHQgIEFkZCBJUHY2IHN1cHBvcnQgdG8gSVBWUy5cbiAgMzU6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ4NDkKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSW52ZXN0aWdhdGluZyB0aGUgQ2FsbCBQYXRocyBvZiBJUFZTIFN5bmNocm9uaXphdGlvbiBGdW5jdGlvbnMqKgoKQWxyaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGV4ZWN1dGlvbiBmbG93IGhlcmUuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHRyYWNlIHRoZSBjYWxscyBhbmQgdW5kZXJzdGFuZCB0aGUgZW50cnkgcG9pbnRzIGZvciB0aGUgZnVuY3Rpb25zIGBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjBgIGFuZCBgaXBfdnNfcHJvY19zeW5jX2Nvbm5gLiBUaGV5JiMzOTtyZSBjZW50cmFsIHRvIHRoZSBJUFZTIHN5bmNocm9uaXphdGlvbiBwcm9jZXNzLCBzbyBnZXR0aW5nIGEgaGFuZGxlIG9uIHRoZWlyIHVzYWdlIGlzIGNydWNpYWwuIE15IGltbWVkaWF0ZSBwbGFuIGlzIHRvIGRlbHZlIGludG8gdGhlIGBpcF92c19zeW5jLmNgIGZpbGUgYW5kIHplcm8gaW4gb24gdGhlIGNhbGxlciBmdW5jdGlvbnMuIEEgZGlyZWN0IHNlYXJjaCBmb3IgY2FsbHMgdG8gdGhvc2UgZnVuY3Rpb25zIHdpdGhpbiB0aGF0IGZpbGUgc2hvdWxkIGdldCBtZSB0aGUgYW5zd2Vycy4gVGhpcyBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBwYXRocyBhbmQgc2VlaW5nIGhvdyB0aGVzZSBmdW5jdGlvbnMgZml0IGludG8gdGhlIGxhcmdlciBwaWN0dXJlIG9mIElQVlMgb3BlcmF0aW9uIGFuZCBzeW5jaHJvbml6YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3ZzX3Byb2Nlc3NfbWVzc2FnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz05NTM9c3RhdGljIGJvb2wgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyh1MzIgZmxhZ3MpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05NjktICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjk3MDpzdGF0aWMgdm9pZCBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGNvbnN0IGNoYXIgKmJ1ZmZlcixcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtOTcxLVx0XHRcdFx0ICAgICBjb25zdCBzaXplX3QgYnVmbGVuKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTA4Nz1zdGF0aWMgaW5saW5lIGludCBpcF92c19wcm9jX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgX191OCAqcCwgX191OCAqbXNnX2VuZClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEyMjYtICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEyMjc6c3RhdGljIHZvaWQgaXBfdnNfcHJvY2Vzc19tZXNzYWdlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBfX3U4ICpidWZmZXIsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEyMjgtXHRcdFx0XHQgIGNvbnN0IHNpemVfdCBidWZsZW4pXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMjg5LVx0XHQvKiBPbGQgdHlwZSBvZiBtZXNzYWdlICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEyOTA6XHRcdGlwX3ZzX3Byb2Nlc3NfbWVzc2FnZV92MChpcHZzLCBidWZmZXIsIGJ1Zmxlbik7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEyOTEtXHRcdHJldHVybjtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTE3MjU9c3RhdGljIGludCBzeW5jX3RocmVhZF9iYWNrdXAodm9pZCAqZGF0YSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE3NTMtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE3NTQ6XHRcdFx0aXBfdnNfcHJvY2Vzc19tZXNzYWdlKGlwdnMsIHRpbmZvLVx1MDAzZWJ1ZiwgbGVuKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTc1NS1cdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTY1NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQVlMgU3luY2hyb25pemF0aW9uIFByb2Nlc3MqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgSVBWUyBzeW5jIGRhZW1vbiBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSB0aGUgcGF0aCBkYXRhIHRha2VzIGZyb20gbmV0d29yayB0byBwcm9jZXNzaW5nLiBTbywgSSBzZWUgdGhhdCB0aGUgYHN5bmNfdGhyZWFkX2JhY2t1cGAgZnVuY3Rpb24gaXMgdGhlIGVudHJ5IHBvaW50LCBoYW5kbGluZyBtdWx0aWNhc3QgcGFja2V0cyByZWNlaXZlZCBvbiB0aGUgSVBWUyBzeW5jIHNvY2tldC4gSXQgdGhlbiBjYWxscyBgaXBfdnNfcHJvY2Vzc19tZXNzYWdlYCwgcGFzc2luZyB0aGUgSVBWUyBpbnN0YW5jZSAoYGlwdnNgKSwgdGhlIHBhY2tldCBidWZmZXIgKGB0aW5mby0mZ3Q7YnVmYCksIGFuZCB0aGUgcGFja2V0IGxlbmd0aCAoYGxlbmApLgoKTm93LCBgaXBfdnNfcHJvY2Vzc19tZXNzYWdlYCBpcyB0aGUgY2VudHJhbCBtZXNzYWdlIGRpc3BhdGNoZXIuIEl0IGNoZWNrcyB0aGUgbWVzc2FnZSB2ZXJzaW9uIGZvcm1hdC4gSWYgaXQmIzM5O3MgdmVyc2lvbiAwLCBpdCBkZWxlZ2F0ZXMgdG8gYGlwX3ZzX3Byb2Nlc3NfbWVzc2FnZV92MGAuIElmIGl0JiMzOTtzIHZlcnNpb24gMSwgd2hpY2ggaXMgbGlrZWx5IHRoZSBtb3JlIHJlY2VudCBhbmQgY29tcGxleCBmb3JtYXQsIGl0IGVudGVycyBhIGxvb3AgYW5kIGNhbGxzIGBpcF92c19wcm9jX3N5bmNfY29ubmAgcmVwZWF0ZWRseS4gVGhpcyBzdWdnZXN0cyB0aGF0IHZlcnNpb24gMSBtZXNzYWdlcyBsaWtlbHkgY29udGFpbiBtdWx0aXBsZSBjb25uZWN0aW9uIHN5bmMgdXBkYXRlcy4KClRoZSBuZXh0IHF1ZXN0aW9uIGlzOiBIb3cgaXMgdGhlIHN5bmMgZGFlbW9uIGl0c2VsZiBpbml0aWFsaXplZD8gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBzdGFydF9zeW5jX3RocmVhZGAgaXMgY2FsbGVkIGZyb20uIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBoaWdoLWxldmVsIHBpY3R1cmUgb2YgaG93IHRoZSB3aG9sZSBzeW5jIHByb2Nlc3MgaXMgaW5pdGlhdGVkLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsZXJzIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGFydF9zeW5jX3RocmVhZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9MzQ3Mj1kb19pcF92c19zZXRfY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgc29ja3B0cl90IHB0ciwgdW5zaWduZWQgaW50IGxlbilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzUxMi1cdFx0XHRjZmcuc3luY2lkID0gZG0tXHUwMDNlc3luY2lkO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjM1MTM6XHRcdFx0cmV0ID0gc3RhcnRfc3luY190aHJlYWQoaXB2cywgXHUwMDI2Y2ZnLCBkbS1cdTAwM2VzdGF0ZSk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzUxNC1cdFx0fSBlbHNlIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9NDU2OD1zdGF0aWMgaW50IGlwX3ZzX2dlbmxfbmV3X2RhZW1vbihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IG5sYXR0ciAqKmF0dHJzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00NjIzLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjQ2MjQ6XHRyZXQgPSBzdGFydF9zeW5jX3RocmVhZChpcHZzLCBcdTAwMjZjLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQ2MjUtXHRcdFx0XHRubGFfZ2V0X3UzMihhdHRyc1tJUFZTX0RBRU1PTl9BVFRSX1NUQVRFXSkpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTcyNT1zdGF0aWMgaW50IHN5bmNfdGhyZWFkX2JhY2t1cCh2b2lkICpkYXRhKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTc2MS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTc2MjppbnQgc3RhcnRfc3luY190aHJlYWQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcHZzX3N5bmNfZGFlbW9uX2NmZyAqYyxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTc2My1cdFx0ICAgICAgaW50IHN0YXRlKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjU1OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDk4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQVlMgU3luY2hyb25pemF0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZW50cnkgcG9pbnRzIGZvciB0aGUgYmFja3VwIHN5bmNocm9uaXphdGlvbiB0aHJlYWQgKGBzdGFydF9zeW5jX3RocmVhZGApLiBJIGNhbiBzZWUgaXQmIzM5O3MgdHJpZ2dlcmVkIGluIHR3byB3YXlzOiB0aHJvdWdoIGBzZXRzb2Nrb3B0YCB3aXRoIGBJUF9WU19TT19TRVRfU1RBUlREQUVNT05gIG9uIHJhdywgVURQLCBvciBUQ1Agc29ja2V0cyAoaW4gYGRvX2lwX3ZzX3NldF9jdGxgKSwgYW5kIGFsc28gdmlhIGdlbmVyaWMgbmV0bGluayB1c2luZyBgSVBWU19DTURfTkVXX0RBRU1PTmAgd2l0aGluIGBpcF92c19nZW5sX25ld19kYWVtb25gLiBUaGF0JiMzOTtzIGEgc29saWQgc3RhcnQuCgpUaGUgc3luY2hyb25pemF0aW9uIHRocmVhZCB0aGVuIGxpc3RlbnMgb24gYSBVRFAgbXVsdGljYXN0IHNvY2tldCwgdHlwaWNhbGx5IHBvcnQgODg0OC4gVGhlIGtleSBjb25jZXJuIGhlcmUsIGFzIEkgc2VlIGl0LCBpcyB0aGUgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlLiBBbnkgcHJvY2VzcyB3aXRoIG5ldHdvcmsgYWNjZXNzIOKAkyBpbmNsdWRpbmcgdmlhIGxvb3BiYWNrLCB2ZXRoLCBvciBldmVuIHR1bi90YXAsIHBhY2tldCBvciByYXcgc29ja2V0cywgb3IgZGlyZWN0bHkgdGhyb3VnaCBhIHNvY2tldCBpZiBsb2NhbCBtdWx0aWNhc3QgZGVsaXZlcnkgaXMgZW5hYmxlZCDigJMgY2FuIHBvdGVudGlhbGx5IGluamVjdCBVRFAgcGFja2V0cyBpbnRvIHRoaXMgc3RyZWFtLiBUaGlzIGltbWVkaWF0ZWx5IHNjcmVhbXMgJiMzNDtwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSYjMzQ7LgoKTm93LCB0aW1lIHRvIHNlZSBpZiBzeXprYWxsZXIgaGFzIGFueSByZWxldmFudCBkZXNjcmlwdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIGByZWFkLXN5ei1zcGVjYCBhbmQgYHN5ei1ncmVwcGVyYCB0byBsb29rIGZvciBJUFZTLXJlbGF0ZWQgZWxlbWVudHMuIEkga25vdyBJUFZTIGlzIGZ1bGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgZ2VuZXJpYyBuZXRsaW5rIGFuZCBzZXRzb2Nrb3B0LgoKUmlnaHQsIHRoZSBwYXRjaCBpdHNlbGYuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGFkZGVkIHZhbGlkYXRpb24gY29kZS4gVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBUaGUgY29yZSBvZiB0aGUgcGF0Y2ggcmV2b2x2ZXMgYXJvdW5kIHRoZSBgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFnc2AgZnVuY3Rpb24uIEl0JiMzOTtzIGNoZWNraW5nIGZvciBhIGZldyBzcGVjaWZpYyBmbGFnIGNvbWJpbmF0aW9ucyB0aGF0IGFyZSBub3cgZGVlbWVkIGludmFsaWQ6IGBJUF9WU19DT05OX0ZfTk9fQ1BPUlRgIGNvbWJpbmVkIHdpdGggYElQX1ZTX0NPTk5fRl9URU1QTEFURWAsIG9yIHNpbXBseSBgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVRgLiBUaGVzZSBmbGFncyB3ZXJlIHNwZWNpZmljYWxseSBpbiBgaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwYCBhbmQgYGlwX3ZzX3Byb2Nfc3luY19jb25uYC4KClRoZSB2YWxpZGF0aW9uIG9jY3VycyAqYmVmb3JlKiBhcHBseWluZyB0aGUgYElQX1ZTX0NPTk5fRl9CQUNLVVBfTUFTS2AgYW5kIHRoZSBgSVBfVlNfQ09OTl9GX1NZTkNgIGZsYWcuIFRoZSBwYXRjaCBlc3NlbnRpYWxseSBmaWx0ZXJzIG91dCBjb25uZWN0aW9ucyB1c2luZyB0aGVzZSAmIzM0O2ludmFsaWQmIzM0OyBmbGFnIGNvbWJpbmF0aW9ucy4gVGhlIGBJUF9WU19EQkdgIG1lc3NhZ2VzIGFyZSBhIGdvb2QgY2x1ZSDigJMgdGhlIGdvYWwgaXMgdG8gcHJldmVudCBwcm9jZXNzaW5nIG1lc3NhZ2VzIHdpdGggdGhlc2Ugc3BlY2lmaWMgZmxhZ3MuCgpTbywgbGV0JiMzOTtzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgKndoeSogdGhlc2UgY2hlY2tzIGFyZSBhZGRlZC4gSWYgYElQX1ZTX0NPTk5fRl9OT19DUE9SVGAgKmFuZCogYElQX1ZTX0NPTk5fRl9URU1QTEFURWAgd2VyZSBhbGxvd2VkLCBvciBpZiBgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVRgIHdhcyBhbGxvd2VkLCB3aGF0IGNvdWxkIGdvIHdyb25nPyBNeSBpbnR1aXRpb24gc2F5cyB0aGVyZSYjMzk7cyBhIHBvdGVudGlhbCBmb3Igc3RhdGUgY29ycnVwdGlvbiBvciBieXBhc3NpbmcgY3J1Y2lhbCBjaGVja3MsIG9yIGV2ZW4gcGVyaGFwcywgYnlwYXNzaW5nIGEgc3BlY2lmaWMgZmxvdy4gVGltZSB0byBsb29rIHVwIHRoZSBkZWZpbml0aW9uIG9mIGBJUF9WU19DT05OX0ZfQkFDS1VQX01BU0tgIGFuZCBzZWUgaWYgdGhlIGFuc3dlciBsaWVzIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJUF9WU19DT05OX0ZfQkFDS1VQX01BU0smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL3VhcGkvbGludXgvaXBfdnMuaC05My0vKiBJbml0aWFsIGJpdHMgYWxsb3dlZCBpbiBiYWNrdXAgc2VydmVyICovXG5pbmNsdWRlL3VhcGkvbGludXgvaXBfdnMuaDo5NDojZGVmaW5lIElQX1ZTX0NPTk5fRl9CQUNLVVBfTUFTSyAoSVBfVlNfQ09OTl9GX0ZXRF9NQVNLIHwgXFxcbmluY2x1ZGUvdWFwaS9saW51eC9pcF92cy5oLTk1LVx0XHRcdFx0ICBJUF9WU19DT05OX0ZfTk9PVVRQVVQgfCBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODMxOAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRGl2aW5nIGludG8gdGhlIElQVlMgSW1wbGVtZW50YXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBJUCBWaXJ0dWFsIFNlcnZlciAoSVBWUykgd29ya3MgYXQgYSBmdW5kYW1lbnRhbCBsZXZlbC4gSSYjMzk7bSBnb2luZyB0byBuYXZpZ2F0ZSB0byB0aGUgaW5jbHVkZSBmaWxlcyBmb3IgdGhlIExpbnV4IGtlcm5lbCBhbmQgc3BlY2lmaWNhbGx5IGZvY3VzIG9uIGBpbmNsdWRlL3VhcGkvbGludXgvaXBfdnMuaGAuIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gdGhlIGNvZGUgc3RhcnRpbmcgYXJvdW5kIGxpbmUgOTMuIEkgcmVtZW1iZXIgdGhpcyBpcyB3aGVyZSBhIGtleSBkYXRhIHN0cnVjdHVyZSBzaG91bGQgYmUgZGVmaW5lZCwgdGhlIG9uZSB0aGF0IGhvbGRzIHRoZSBjb3JlIElQVlMgY29uZmlndXJhdGlvbiBvciBwZXJoYXBzIHRoZSByb3V0aW5nIHJ1bGVzLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhvc2Ugc3RydWN0cyBhcmUgZGVjbGFyZWQgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgdW5kZXJseWluZyBuZXR3b3JrIHN0YWNrLiBUaGlzIGZpbGUgaXMgcHJvYmFibHkgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBpbiB0aGVyZS4gSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBzdGFuZGFyZCBkZWZpbml0aW9ucyBoZXJlLi4uIHBlcmhhcHMgdGhlIGNyaXRpY2FsIGRhdGEgc3RydWN0dXJlcyBsaWtlIHRoZSBJUFZTIHNlcnZpY2UgdGFibGUgb3IgdGhlIHJlYWwgc2VydmVyIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlcy4gSSYjMzk7bGwgcHJvYmFibHkgYmUgbG9va2luZyBmb3IgdGhlIGZ1bmRhbWVudGFsIGluZm9ybWF0aW9uIG5lZWRlZCB0byBjb25zdHJ1Y3QgSVBWUyYjMzk7cyBuZXR3b3JrIG9wZXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS91YXBpL2xpbnV4L2lwX3ZzLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDgwOlx0I2RlZmluZSBJUF9WU19DT05OX0ZfRFJPVVRFXHQweDAwMDNcdFx0LyogZGlyZWN0IHJvdXRpbmcgKi9cbiAgODE6XHQjZGVmaW5lIElQX1ZTX0NPTk5fRl9CWVBBU1NcdDB4MDAwNFx0XHQvKiBjYWNoZSBieXBhc3MgKi9cbiAgODI6XHQjZGVmaW5lIElQX1ZTX0NPTk5fRl9TWU5DXHQweDAwMjBcdFx0LyogZW50cnkgY3JlYXRlZCBieSBzeW5jICovXG4gIDgzOlx0I2RlZmluZSBJUF9WU19DT05OX0ZfSEFTSEVEXHQweDAwNDBcdFx0LyogaGFzaGVkIGVudHJ5ICovXG4gIDg0Olx0I2RlZmluZSBJUF9WU19DT05OX0ZfTk9PVVRQVVRcdDB4MDA4MFx0XHQvKiBubyBvdXRwdXQgcGFja2V0cyAqL1xuICA4NTpcdCNkZWZpbmUgSVBfVlNfQ09OTl9GX0lOQUNUSVZFXHQweDAxMDBcdFx0Lyogbm90IGVzdGFibGlzaGVkICovXG4gIDg2Olx0I2RlZmluZSBJUF9WU19DT05OX0ZfT1VUX1NFUVx0MHgwMjAwXHRcdC8qIG11c3QgZG8gb3V0cHV0IHNlcSBhZGp1c3QgKi9cbiAgODc6XHQjZGVmaW5lIElQX1ZTX0NPTk5fRl9JTl9TRVFcdDB4MDQwMFx0XHQvKiBtdXN0IGRvIGlucHV0IHNlcSBhZGp1c3QgKi9cbiAgODg6XHQjZGVmaW5lIElQX1ZTX0NPTk5fRl9TRVFfTUFTS1x0MHgwNjAwXHRcdC8qIGluL291dCBzZXF1ZW5jZSBtYXNrICovXG4gIDg5Olx0I2RlZmluZSBJUF9WU19DT05OX0ZfTk9fQ1BPUlRcdDB4MDgwMFx0XHQvKiBubyBjbGllbnQgcG9ydCBzZXQgeWV0ICovXG4gIDkwOlx0I2RlZmluZSBJUF9WU19DT05OX0ZfVEVNUExBVEVcdDB4MTAwMFx0XHQvKiB0ZW1wbGF0ZSwgbm90IGNvbm5lY3Rpb24gKi9cbiAgOTE6XHQjZGVmaW5lIElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUXHQweDIwMDBcdFx0LyogZm9yd2FyZCBvbmx5IG9uZSBwYWNrZXQgKi9cbiAgOTI6XHRcbiAgOTM6XHQvKiBJbml0aWFsIGJpdHMgYWxsb3dlZCBpbiBiYWNrdXAgc2VydmVyICovXG4gIDk0Olx0I2RlZmluZSBJUF9WU19DT05OX0ZfQkFDS1VQX01BU0sgKElQX1ZTX0NPTk5fRl9GV0RfTUFTSyB8IFxcXG4gIDk1Olx0XHRcdFx0XHQgIElQX1ZTX0NPTk5fRl9OT09VVFBVVCB8IFxcXG4gIDk2Olx0XHRcdFx0XHQgIElQX1ZTX0NPTk5fRl9JTkFDVElWRSB8IFxcXG4gIDk3Olx0XHRcdFx0XHQgIElQX1ZTX0NPTk5fRl9TRVFfTUFTSyB8IFxcXG4gIDk4Olx0XHRcdFx0XHQgIElQX1ZTX0NPTk5fRl9OT19DUE9SVCB8IFxcXG4gIDk5Olx0XHRcdFx0XHQgIElQX1ZTX0NPTk5fRl9URU1QTEFURSBcXFxuIDEwMDpcdFx0XHRcdFx0IClcbiAxMDE6XHRcbiAxMDI6XHQvKiBCaXRzIGFsbG93ZWQgdG8gdXBkYXRlIGluIGJhY2t1cCBzZXJ2ZXIgKi9cbiAxMDM6XHQjZGVmaW5lIElQX1ZTX0NPTk5fRl9CQUNLVVBfVVBEX01BU0sgKElQX1ZTX0NPTk5fRl9JTkFDVElWRSB8IFxcXG4gMTA0Olx0XHRcdFx0XHQgICAgICBJUF9WU19DT05OX0ZfU0VRX01BU0spXG4gMTA1Olx0XG4gMTA2Olx0LyogRmxhZ3MgdGhhdCBhcmUgbm90IHNlbnQgdG8gYmFja3VwIHNlcnZlciBzdGFydCBmcm9tIGJpdCAxNiAqL1xuIDEwNzpcdCNkZWZpbmUgSVBfVlNfQ09OTl9GX05GQ1RcdCgxIFx1MDAzY1x1MDAzYyAxNilcdC8qIHVzZSBuZXRmaWx0ZXIgY29ubnRyYWNrICovXG4gMTA4Olx0XG4gMTA5Olx0LyogQ29ubmVjdGlvbiBmbGFncyBmcm9tIGRlc3RpbmF0aW9uIHRoYXQgY2FuIGJlIGNoYW5nZWQgYnkgdXNlciBzcGFjZSAqL1xuIDExMDpcdCNkZWZpbmUgSVBfVlNfQ09OTl9GX0RFU1RfTUFTSyAoSVBfVlNfQ09OTl9GX0ZXRF9NQVNLIHwgXFxcbiAxMTE6XHRcdFx0XHRcdElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUIHwgXFxcbiAxMTI6XHRcdFx0XHRcdElQX1ZTX0NPTk5fRl9ORkNUIHwgXFxcbiAxMTM6XHRcdFx0XHRcdDApXG4gMTE0Olx0XG4gMTE1Olx0I2RlZmluZSBJUF9WU19TQ0hFRE5BTUVfTUFYTEVOXHQxNlxuIDExNjpcdCNkZWZpbmUgSVBfVlNfUEVOQU1FX01BWExFTlx0MTZcbiAxMTc6XHQjZGVmaW5lIElQX1ZTX0lGTkFNRV9NQVhMRU5cdDE2XG4gMTE4Olx0XG4gMTE5Olx0I2RlZmluZSBJUF9WU19QRURBVEFfTUFYTEVOICAgICAyNTVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk1MTIKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxNzc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIElQVlMgQ29ubmVjdGlvbiBTeW5jIFZ1bG5lcmFiaWxpdHkgYW5kIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIFRoZSBrZXkgaGVyZSBpcyBob3cgSVBWUyBoYW5kbGVzIGNvbm5lY3Rpb24gc3luY2hyb25pemF0aW9uIG1lc3NhZ2VzLCBzcGVjaWZpY2FsbHkgdmVyc2lvbnMgMCBhbmQgMS4gSXQgc2VlbXMgbGlrZSB0aGUgbWFzayBgSVBfVlNfQ09OTl9GX0JBQ0tVUF9NQVNLYCBpbmNsdWRlcyBgSVBfVlNfQ09OTl9GX05PX0NQT1JUYCBhbmQgYElQX1ZTX0NPTk5fRl9URU1QTEFURWAsIHdoaWNoIGlzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLiBJZiBib3RoIGFyZSBzZXQsIHRoYXQgY291bGQgbGVhZCB0byBzb21lIHdlaXJkIGVkZ2UgY2FzZXMuCgpJbiB0aGUgcHJlLXBhdGNoIHYwIGNvZGUsIHRoZSBmbGFnIG1hc2tpbmcgd2FzICptaXNzaW5nKiBgSVBfVlNfQ09OTl9GX0JBQ0tVUF9NQVNLYCBlbnRpcmVseSEgVGhhdCBtZWFucyBhbnkgZmxhZyBjb3VsZCBzbmVhayBpbi4gV2l0aCB2MSwgdGhleSBhdCBsZWFzdCBoYXZlIGEgbWFzaywgYnV0IGl0ICppbmNsdWRlcyogYm90aCBwb3RlbnRpYWxseSBjb25mbGljdGluZyBmbGFncywgYE5PX0NQT1JUYCBhbmQgYFRFTVBMQVRFYC4gV2hhdCBoYXBwZW5zIHdoZW4gYSBjb25uZWN0aW9uIGlzIG1hcmtlZCB3aXRoICpib3RoKiBvZiB0aG9zZT8gSSBuZWVkIHRvIGNoZWNrIHRoZSBsb2dpYyBpbiBgX19pcF92c19jb25uX2luX2dldGAgYW5kIGBpcF92c19jb25uX25ld2AgdG8gc2VlIGhvdyBpdCBoYW5kbGVzIHRlbXBsYXRlcyBhbmQgYE5PX0NQT1JUYC4gVGhlIGBjcG9ydGAgZmllbGQgb24gYSB0ZW1wbGF0ZSBpcyAwLCBzbyBJIG5lZWQgdG8gc2VlIHdoYXQgdGhlIGxvb2t1cCBhbmQgY3JlYXRpb24gbG9naWMgZG9lcyB3aXRoIHRoaXMuCgpUaGUgY29kZSBzZWVtcyB0byB1c2UgYGF0b21pY19pbmNgIGFuZCBgYXRvbWljX2RlY2Agb24gYG5vX2Nwb3J0X2Nvbm5zYCB3aGVuIGBOT19DUE9SVGAgaXMgc2V0LCBhbmQgdGhlcmUmIzM5O3MgbG9naWMgYXJvdW5kIGBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVGAgYXMgd2VsbC4gSWYgYE9ORV9QQUNLRVRgIGlzIGVuYWJsZWQsIHRoZXNlIGNvbm5lY3Rpb25zIG1pZ2h0IGJlIHNob3J0IGxpdmVkLCBvciBzeW5jZWQgaW5jb3JyZWN0bHkuCgpTbywgdGhpcyBsb29rcyBsaWtlIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuIEl0JiMzOTtzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGNvZGUgd2l0aGluIHRoZSBJUFZTIGNvcmUgc3Vic3lzdGVtIChgbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY2ApLiBUaGUgc3luYyBkYWVtb24gcmVjZWl2ZXMgdGhlc2UgbWVzc2FnZXMgb3ZlciB0aGUgbmV0d29yayB2aWEgbXVsdGljYXN0IFVEUCBwYWNrZXRzLiBUaGVzZSBhcmUgcGFyc2VkIGluIGEga2VybmVsIHRocmVhZCAoYHN5bmNfdGhyZWFkX2JhY2t1cGApIHRocm91Z2ggYSBjaGFpbiBvZiBmdW5jdGlvbnMsIGFsbCB0aGUgd2F5IGRvd24gdG8gYGlwX3ZzX3Byb2Nlc3NfbWVzc2FnZWAsIGBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjBgLCBhbmQgYGlwX3ZzX3Byb2Nfc3luY19jb25uYC4gSXQgc2VlbXMgbGlrZSB0aGVzZSBmdW5jdGlvbnMgYXJlIHRoZSBrZXkgdG8gcGFyc2luZyAqdW50cnVzdGVkKiBuZXR3b3JrIHBhY2tldHMgY29taW5nIGZyb20gYSBtdWx0aWNhc3QgcmVjZWl2ZXIuCgpUaGUgcGF0Y2ggYWltcyB0byBhZGQgdmFsaWRhdGlvbiB2aWEgYGlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3NgLCBhbmQgYWRkcyBtYXNraW5nIGluIHYwLCBhbmQgcmVqZWN0cyBpbnZhbGlkIGZsYWcgY29tYmluYXRpb25zLiBTbyBpdCYjMzk7cyBhZGRyZXNzaW5nIHRoaXMgaXNzdWUgZGlyZWN0bHkuCgpCYXNlZCBvbiB0aGUgaW5zdHJ1Y3Rpb25zLCB0aGlzIGlzIGFic29sdXRlbHkgd29ydGggZnV6emluZy4gSXQgdG91Y2hlcyBjb3JlIG5ldHdvcmtpbmcsIG5ldGZpbHRlciwgSVBWUyBwcm90b2NvbHMsIGFuZCBoYW5kbGluZyB1bnRydXN0ZWQgaW5wdXQuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gYEZvY3VzU3ltYm9sc2AuIFdoYXQgYXJlIHRoZSByZWxldmFudCBzeW1ib2xzIHRvIHRhcmdldCB3aXRoIHRoZSBmdXp6ZXI/IFdlIGhhdmUgYGlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3NgIHdoaWNoIGlzIGF0IHRoZSBoZWFydCBvZiB0aGUgYWRkZWQgdmFsaWRhdGlvbi4gVGhlIGlzc3VlIGlzIHdoZXRoZXIgdGhpcyBzdGF0aWMgaGVscGVyIGlzIGlubGluZWQuCgpMb29rcyBsaWtlIGl0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uLCBhbmQgYSBzbWFsbCBoZWxwZXIuIEl0IGlzIGNhbGxlZCBpbiBgaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwYCBhbmQgYGlwX3ZzX3Byb2Nfc3luY19jb25uYC4gVGhlIGxhdHRlciBpcyBgc3RhdGljIGlubGluZWAsIHdoaWNoIG1lYW5zIHRoZSBjb21waWxlciBtaWdodCBpbmxpbmUgaXQuIExldCYjMzk7cyBzZWUgd2hhdCBjYWxscyBpdC4gYGlwX3ZzX3Byb2Nlc3NfbWVzc2FnZWAgLSZndDsgYHN5bmNfdGhyZWFkX2JhY2t1cGAgYW5kIGBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjBgLiBUaGUgdjAgZnVuY3Rpb24sIGFuZCBtYWluIHBhcnNlciwgaXMgYXJvdW5kIDcwIGxpbmVzIGFuZCBgaXBfdnNfcHJvY2Vzc19tZXNzYWdlYCBpcyBhcm91bmQgNzUgbGluZXMsIHNvLCB0aGV5IGFyZSBub3QgdGhhdCBiaWcgYW5kIG1pZ2h0IGJlIHRoZSByaWdodCBgRm9jdXNTeW1ib2xzYC4KCkkgbmVlZCB0byBmb2N1cyBvbiB3aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnRzIHRoaXMgbG9naWMuIEFjY29yZGluZyB0byB0aGUgZ3VpZGVsaW5lcywgSSBzaG91bGQgdGFyZ2V0IG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBzbyBsZXQmIzM5O3MgY2hlY2sgZm9yIGFueSBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiBgaXBfdnNfc3luYy5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVpfXS4qXFwpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTI2OT1zdHJ1Y3QgaXBfdnNfc3luY19idWZmIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTI4Mi0gKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MjgzOnN0YXRpYyB2b2lkIG50b2hfc2VxKHN0cnVjdCBpcF92c19zZXEgKm5vLCBzdHJ1Y3QgaXBfdnNfc2VxICpobylcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjg0LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTI5NC0gKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6Mjk1OnN0YXRpYyB2b2lkIGh0b25fc2VxKHN0cnVjdCBpcF92c19zZXEgKmhvLCBzdHJ1Y3QgaXBfdnNfc2VxICpubylcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjk2LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTMwMj1zdGF0aWMgaW5saW5lIHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzozMDM6c2JfZGVxdWV1ZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwdnNfbWFzdGVyX3N5bmNfc3RhdGUgKm1zKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0zMDQte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MzI3PXN0YXRpYyBpbmxpbmUgc3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjMyODppcF92c19zeW5jX2J1ZmZfY3JlYXRlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCB1bnNpZ25lZCBpbnQgbGVuKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0zMjkte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMzU0LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzozNTU6c3RhdGljIGlubGluZSB2b2lkIGlwX3ZzX3N5bmNfYnVmZl9yZWxlYXNlKHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKnNiKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0zNTYte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9NDA1PXN0YXRpYyBpbmxpbmUgaW50XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjQwNjpzZWxlY3RfbWFzdGVyX3RocmVhZF9pZChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy00MDcte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9NDE0PXN0YXRpYyBpbmxpbmUgc3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjQxNTppcF92c19zeW5jX2J1ZmZfY3JlYXRlX3YwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCB1bnNpZ25lZCBpbnQgbGVuKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy00MTYte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNDQwLS8qIENoZWNrIGlmIGNvbm5lY3Rpb24gaXMgY29udHJvbGxlZCBieSBwZXJzaXN0ZW5jZSAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo0NDE6c3RhdGljIGlubGluZSBib29sIGluX3BlcnNpc3RlbmNlKHN0cnVjdCBpcF92c19jb25uICpjcClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNDQyLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTUzOT1zdGF0aWMgdm9pZCBpcF92c19zeW5jX2Nvbm5fdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTYyOC0gKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NjI5OnZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02MzAte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9ODQxPXN0YXRpYyB2b2lkIGlwX3ZzX3Byb2NfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm5fcGFyYW0gKnBhcmFtLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtOTUyLS8qIENoZWNrIGZvciBpbmNvbXBhdGlibGUgZmxhZ3MgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6OTUzOnN0YXRpYyBib29sIGlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3ModTMyIGZsYWdzKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05NTQte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTA2Nz1zdGF0aWMgaW50IGlwX3ZzX3Byb2Nfc3RyKF9fdTggKnAsIHVuc2lnbmVkIGludCBwbGVuLCB1bnNpZ25lZCBpbnQgKmRhdGFfbGVuLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTA4Ni0gKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTA4NzpzdGF0aWMgaW5saW5lIGludCBpcF92c19wcm9jX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgX191OCAqcCwgX191OCAqbXNnX2VuZClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTA4OC17XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xMjI3PXN0YXRpYyB2b2lkIGlwX3ZzX3Byb2Nlc3NfbWVzc2FnZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgX191OCAqYnVmZmVyLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTI5OC0gKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTI5OTpzdGF0aWMgdm9pZCBzZXRfc29ja19zaXplKHN0cnVjdCBzb2NrICpzaywgaW50IG1vZGUsIGludCB2YWwpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEzMDAte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTMyMC0gKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTMyMTpzdGF0aWMgdm9pZCBzZXRfbWNhc3RfbG9vcChzdHJ1Y3Qgc29jayAqc2ssIHVfY2hhciBsb29wKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMzIyLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEzMzUtICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEzMzY6c3RhdGljIHZvaWQgc2V0X21jYXN0X3R0bChzdHJ1Y3Qgc29jayAqc2ssIHVfY2hhciB0dGwpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEzMzcte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTM1NC0vKiBDb250cm9sIGZyYWdtZW50YXRpb24gb2YgbWVzc2FnZXMgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTM1NTpzdGF0aWMgdm9pZCBzZXRfbWNhc3RfcG10dWRpc2Moc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMzU2LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEzNzUtICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEzNzY6c3RhdGljIGludCBzZXRfbWNhc3RfaWYoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMzc3LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTE0MDU9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNDA2OmpvaW5fbWNhc3RfZ3JvdXAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5fYWRkciAqYWRkciwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTQwNy17XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xNDI3PXN0YXRpYyBpbnQgam9pbl9tY2FzdF9ncm91cDYoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNDQyLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNDQzOnN0YXRpYyBpbnQgYmluZF9tY2FzdGlmX2FkZHIoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTQ0NC17XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xNTk1PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTU5NjppcF92c19zZW5kX2FzeW5jKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGNvbnN0IGNoYXIgKmJ1ZmZlciwgY29uc3Qgc2l6ZV90IGxlbmd0aClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTU5Ny17XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xNjEwPXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTYxMTppcF92c19zZW5kX3N5bmNfbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBpcF92c19zeW5jX21lc2cgKm1zZylcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTYxMi17XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xNjI1PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTYyNjppcF92c19yZWNlaXZlKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGNoYXIgKmJ1ZmZlciwgY29uc3Qgc2l6ZV90IGJ1Zmxlbilcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTYyNy17XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNjQxLS8qIFdha2V1cCB0aGUgbWFzdGVyIHRocmVhZCBmb3Igc2VuZGluZyAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNjQyOnN0YXRpYyB2b2lkIG1hc3Rlcl93YWtldXBfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTY0My17XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xNjYxPXN0YXRpYyBpbmxpbmUgc3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE2NjI6bmV4dF9zeW5jX2J1ZmYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcHZzX21hc3Rlcl9zeW5jX3N0YXRlICptcylcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTY2My17XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNjcyLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNjczOnN0YXRpYyBpbnQgc3luY190aHJlYWRfbWFzdGVyKHZvaWQgKmRhdGEpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE2NzQte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTcyNC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTcyNTpzdGF0aWMgaW50IHN5bmNfdGhyZWFkX2JhY2t1cCh2b2lkICpkYXRhKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNzI2LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTE3NjI9aW50IHN0YXJ0X3N5bmNfdGhyZWFkKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXB2c19zeW5jX2RhZW1vbl9jZmcgKmMsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xOTc3LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxOTc4OmludCBzdG9wX3N5bmNfdGhyZWFkKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgc3RhdGUpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE5Nzkte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjA2NS0gKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MjA2NjppbnQgX19uZXRfaW5pdCBpcF92c19zeW5jX25ldF9pbml0KHN0cnVjdCBuZXRuc19pcHZzICppcHZzKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yMDY3LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTIwNzMtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjIwNzQ6dm9pZCBpcF92c19zeW5jX25ldF9jbGVhbnVwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yMDc1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUwOTIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1NzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgSVBWUyBTeW5jIERhZW1vbiBGdXp6aW5nIFRhcmdldHMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIG1vc3QgZWZmZWN0aXZlIGVudHJ5IHBvaW50cyBmb3IgZnV6emluZyB0aGUgSVBWUyBzeW5jIGRhZW1vbiB1c2luZyBzeXprYWxsZXIuCgpGaXJzdCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXksIG5vbi1zdGF0aWMgQVBJIGVudHJ5IHBvaW50cyBpbiBgaXBfdnNfc3luYy5jYC4gSSBzZWU6IGBzdGFydF9zeW5jX3RocmVhZGAsIGBzdG9wX3N5bmNfdGhyZWFkYCwgYGlwX3ZzX3N5bmNfY29ubmAsIGBpcF92c19zeW5jX25ldF9pbml0YCwgYW5kIGBpcF92c19zeW5jX25ldF9jbGVhbnVwYC4gVGhvc2Ugc2VlbSBsaWtlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnRzLgoKTmV4dCwgSSBuZWVkIHRvIHplcm8gaW4gb24gd2hhdCAqZnVuY3Rpb25zKiB3aXRoaW4gYGlwX3ZzX3N5bmMuY2AgYXJlIGFjdHVhbGx5ICptb2RpZmllZCogb3IgY29yZSB0byB0aGUgc3luYyBwcm9jZXNzLiBJJiMzOTt2ZSBnb3Q6IGBpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzYCwgYGlwX3ZzX3Byb2Nlc3NfbWVzc2FnZV92MGAsIGBpcF92c19wcm9jX3N5bmNfY29ubmAsIGBpcF92c19wcm9jZXNzX21lc3NhZ2VgICh3aGljaCBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBjYWxscyBib3RoIGBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjBgIGFuZCBgaXBfdnNfcHJvY19zeW5jX2Nvbm5gKSwgYW5kIHRoZSBiYWNrdXAgdGhyZWFkIGBzeW5jX3RocmVhZF9iYWNrdXBgLgoKTm93LCBkaWdnaW5nIGRlZXBlci4gSSBzZWUgdGhhdCBgc3RhcnRfc3luY190aHJlYWRgIGlzIHRoZSBjcnVjaWFsIGVudHJ5IHBvaW50LCBzaW5jZSB1c2Vyc3BhY2UgY2FsbHMgaXQgdmlhIG5ldGxpbmsgb3IgYHNldHNvY2tvcHRgIHdpdGggYElQX1ZTX1NUQVRFX0JBQ0tVUGAgdG8gbGF1bmNoIHRoZSBkYWVtb24uIFRoZXJlZm9yZSwgdGhhdCBmdW5jdGlvbiBpcyBjcml0aWNhbC4gSW4gY29uanVuY3Rpb24sIHRoZSBvdGhlciBmdW5jdGlvbnMgbWVudGlvbmVkIHNob3VsZCBhbHNvIGJlIHRlc3RlZCwgaW4gY29uanVuY3Rpb24gd2l0aCB0aGF0IGVudHJ5LgoKR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiBzeXprYWxsZXIsIGl0IHRhcmdldHMgYW55IHN5bWJvbCBhdmFpbGFibGUgaW4gYC9wcm9jL2thbGxzeW1zYCwgZXZlbiBzdGF0aWMgZnVuY3Rpb25zIChhcyBsb25nIGFzIHRoZXkgYXJlbiYjMzk7dCBpbmxpbmVkKS4gU28sIGluY2x1ZGluZyBib3RoIHRoZSBtb2RpZmllZCBzdGF0aWMgZnVuY3Rpb25zIGxpa2UgYGlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3NgLCBgaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwYCwgYGlwX3ZzX3Byb2Nfc3luY19jb25uYCwgYW5kIGBpcF92c19wcm9jZXNzX21lc3NhZ2VgLCAqYWxvbmcqIHdpdGggdGhlIHByaW1hcnkgZmVhdHVyZSBlbnRyeXBvaW50IGBzdGFydF9zeW5jX3RocmVhZGAgYW5kIHRoZSBgc3luY190aHJlYWRfYmFja3VwYCBsb29wLCBzaG91bGQgZ2l2ZSBtZSBleGNlbGxlbnQgY292ZXJhZ2Ugd2l0aG91dCB3YXN0aW5nIGZ1enppbmcgY3ljbGVzIG9uIGlycmVsZXZhbnQgdGFyZ2V0cy4KCkZpbmFsbHksIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBlbnN1cmUgdGhlIHJpZ2h0IGtlcm5lbCBjb25maWcgb3B0aW9ucyBhcmUgc2V0LiBJIGtub3cgYENPTkZJR19JUF9WU2AgaXMgZXNzZW50aWFsLCBvYnZpb3VzbHkuIEkmIzM5O20gY2hlY2tpbmcgdGhlIGBLY29uZmlnYCBmaWxlIGFuZCBpdCBzZWVtcyB0aGlzIGFsc28gZGVwZW5kcyBvbiBgSU5FVCAmYW1wOyZhbXA7IE5FVEZJTFRFUmAsIGFuZCBwb3RlbnRpYWxseSBgTkZfQ09OTlRSQUNLYCAob3Igbm90KS4gQnV0LCBiYXNlZCBvbiBteSBxdWljayBwZXJ1c2FsIG9mIGBpcF92c19zeW5jLmNgIHRoZXJlIGRvZXNuJiMzOTt0IHNlZW0gdG8gYmUgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9yIGAjaWZkZWZgIGJsb2NrcyBhcm91bmQgdGhlIHN5bmMgZGFlbW9uIGl0c2VsZi4gSXQgbG9va3MgbGlrZSB0aGUgc3luYyBkYWVtb24gaXMgYWx3YXlzIGNvbXBpbGVkIHdoZW4gYElQX1ZTYCBpcyBlbmFibGVkLiBFeGNlbGxlbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lmZGVmLipDT05GSUcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9NjI5PXZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjY5LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo2NzA6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY3MS1cdGlmIChjcC1cdTAwM2VhZiA9PSBBRl9JTkVUNilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTczMi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NzMzOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03MzQtXHRpZiAoY3AtXHUwMDNlYWYgPT0gQUZfSU5FVDYpIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTc4OD1pcF92c19jb25uX2ZpbGxfcGFyYW1fc3luYyhzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLCB1bmlvbiBpcF92c19zeW5jX2Nvbm4gKnNjLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzkyLXtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NzkzOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03OTQtXHRpZiAoYWYgPT0gQUZfSU5FVDYpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xMDg3PXN0YXRpYyBpbmxpbmUgaW50IGlwX3ZzX3Byb2Nfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBfX3U4ICpwLCBfX3U4ICptc2dfZW5kKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTEwMS1cdGlmIChzLVx1MDAzZXY2LnR5cGUgXHUwMDI2IFNUWVBFX0ZfSU5FVDYpIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTEwMjojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTEwMy1cdFx0YWYgPSBBRl9JTkVUNjtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEyMDUtXHRcdFx0XHQpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMjA2OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMjA3LVx0ZWxzZVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTMyMT1zdGF0aWMgdm9pZCBzZXRfbWNhc3RfbG9vcChzdHJ1Y3Qgc29jayAqc2ssIHVfY2hhciBsb29wKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTMyNC1cdGluZXRfYXNzaWduX2JpdChNQ19MT09QLCBzaywgbG9vcCk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEzMjU6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEzMjYtXHRpZiAoUkVBRF9PTkNFKHNrLVx1MDAzZXNrX2ZhbWlseSkgPT0gQUZfSU5FVDYpIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTEzMzY9c3RhdGljIHZvaWQgc2V0X21jYXN0X3R0bChzdHJ1Y3Qgc29jayAqc2ssIHVfY2hhciB0dGwpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMzQyLVx0V1JJVEVfT05DRShpbmV0LVx1MDAzZW1jX3R0bCwgdHRsKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTM0MzojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTM0NC1cdGlmIChzay1cdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTEzNTU9c3RhdGljIHZvaWQgc2V0X21jYXN0X3BtdHVkaXNjKHN0cnVjdCBzb2NrICpzaywgaW50IHZhbClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEzNjEtXHRXUklURV9PTkNFKGluZXQtXHUwMDNlcG10dWRpc2MsIHZhbCk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEzNjI6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEzNjMtXHRpZiAoc2stXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xMzc2PXN0YXRpYyBpbnQgc2V0X21jYXN0X2lmKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEzODUtXHQvKiAgaW5ldC1cdTAwM2VtY19hZGRyICA9IDA7ICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEzODY6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEzODctXHRpZiAoc2stXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xNDA2PWpvaW5fbWNhc3RfZ3JvdXAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5fYWRkciAqYWRkciwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE0MjUtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE0MjY6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE0Mjctc3RhdGljIGludCBqb2luX21jYXN0X2dyb3VwNihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbjZfYWRkciAqYWRkcixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTE1NDQ9c3RhdGljIGludCBtYWtlX3JlY2VpdmVfc29jayhzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGlkLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTU3NC1cdC8qIGpvaW4gdGhlIG11bHRpY2FzdCBncm91cCAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNTc1OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNTc2LVx0aWYgKGlwdnMtXHUwMDNlYmNmZy5tY2FzdF9hZiA9PSBBRl9JTkVUNilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc4MjcKCQkJCQkJCW91dHB1dDogMjA1CgkJCQkJCQl0aG91Z2h0czogMzc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBJUFZTIFN5bmNocm9uaXphdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBgaXBfdnNfc3luYy5vYCBpcyBkZWZpbml0ZWx5IGJ1aWx0IGFsb25nc2lkZSBgaXBfdnNgIHdoZW5ldmVyIHRoZSBtYWluIGBDT05GSUdfSVBfVlNgIG9wdGlvbiBpcyBlbmFibGVkIOKAkyB0aGF0JiMzOTtzIGEgZ2l2ZW4uIEFuZCwgb2YgY291cnNlLCBgQ09ORklHX0lQX1ZTX0lQVjZgIHByb3ZpZGVzIElQdjYgc3VwcG9ydCwgYXMgZXhwZWN0ZWQuIExldCYjMzk7cyBtYWtlIHN1cmUgYENPTkZJR19JUF9WU2AgaXRzZWxmIGlzIGVuYWJsZWQuIEl0cyBwYXJlbnRzIGFyZSBgTkVURklMVEVSYCBhbmQgYElORVRgLCB3aGljaCBhcmUgZmFpcmx5IGZ1bmRhbWVudGFsLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgaW1wb3J0YW50IGZ1bmN0aW9uczoKCiogICBgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFnc2A6IEZsYWcgdmFsaWRhdGlvbiwgdGhhdCYjMzk7cyBjcnVjaWFsLgoqICAgYGlwX3ZzX3Byb2Nlc3NfbWVzc2FnZV92MGAsIGBpcF92c19wcm9jZXNzX21lc3NhZ2VgOiBJIG5lZWQgdG8gbG9vayBhdCBib3RoIHYwIGFuZCB2MSBzeW5jIG1lc3NhZ2VzLgoqICAgYGlwX3ZzX3Byb2Nfc3luY19jb25uYDogQ29ubmVjdGluZyBzeW5jaHJvbml6YXRpb24uCiogICBgc3RhcnRfc3luY190aHJlYWRgLCBgc3luY190aHJlYWRfYmFja3VwYDogVGhyZWFkIG1hbmFnZW1lbnQuCgpIZXJlJiMzOTtzIG15IEVuYWJsZUNvbmZpZ3MgY2hlY2tsaXN0OgoKKiAgIGBJUF9WU2AKKiAgIGBORVRGSUxURVJgCiogICBgSU5FVGAKCldvcnRoIGZ1enppbmc/IEFic29sdXRlbHkuIFRoZSBwYXRjaCBkZWFscyB3aXRoIGluY29taW5nIHN5bmNocm9uaXphdGlvbiBtZXNzYWdlcyBmcm9tIGJhY2t1cCBJUFZTIHRocmVhZHMg4oCTIHBvdGVudGlhbGx5IGZyb20gdW50cnVzdGVkIHNvdXJjZXMsIGFuZCBmbGFncyB3aGljaCBjYW4gaGF2ZSBpbmNvbXBhdGliaWxpdGllcy4gSXQgbG9va3MgbGlrZSBgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFnc2AgcHJldmVudHMgdGhpbmdzIGxpa2UgYElQX1ZTX0NPTk5fRl9OT19DUE9SVGAgYW5kIGBJUF9WU19DT05OX0ZfVEVNUExBVEVgIGZyb20gbWl4aW5nIHdpdGggYElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUYCBmbGFncy4gU2luY2UgdGhpcyBjb2RlIHJ1bnMgaW4gdGhlIGtlcm5lbCBhbmQgcHJvY2Vzc2VzIG5ldHdvcmsgcGFja2V0cywgaXQmIzM5O3MgZGVmaW5pdGVseSBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLiBJdCBpbXBhY3RzIHRoZSBuZXRmaWx0ZXIvSVBWUyBzdWJzeXN0ZW0gYW5kIHJlYWNoYWJsZSBuZXR3b3JrIGNvZGUuCgpGaW5hbGx5LCBsZXQmIzM5O3MgcnVuIGEgc2FuaXR5IGNoZWNrIG9uIHRoZSBpbnN0cnVjdGlvbiBzZXQ6CgoqICAgT25lIGBzZXQtcmVzdWx0c2AgY2FsbC4gQ2hlY2suCiogICBFbmFibGVDb25maWdzIGFyZSBjb3JyZWN0LiBDaGVjay4KKiAgIEZvY3VzU3ltYm9scyBhcmUgc3BlY2lmaWMsIG5vdCBnZW5lcmljIOKAkyB0aGVzZSBhcmUgZ29vZCB0YXJnZXRzIGZvciBkZWVwZXIgYW5hbHlzaXMuIENoZWNrLgoqICAgVGhlIHJlYXNvbmluZyBpcyBjb25jaXNlIGFuZCB0byB0aGUgcG9pbnQuIENoZWNrLgoKRXZlcnl0aGluZyBjaGVja3Mgb3V0LiBJJiMzOTttIHNhdGlzZmllZC4gVGltZSB0byBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfVlMmIzM0OywKICAgICYjMzQ7TkVURklMVEVSJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzJiMzNDssCiAgICAmIzM0O2lwX3ZzX3Byb2Nlc3NfbWVzc2FnZV92MCYjMzQ7LAogICAgJiMzNDtpcF92c19wcm9jX3N5bmNfY29ubiYjMzQ7LAogICAgJiMzNDtpcF92c19wcm9jZXNzX21lc3NhZ2UmIzM0OywKICAgICYjMzQ7c3luY190aHJlYWRfYmFja3VwJiMzNDssCiAgICAmIzM0O3N0YXJ0X3N5bmNfdGhyZWFkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZmxhZyB2YWxpZGF0aW9uIChpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzKSBhbmQgcHJvcGVyIG1hc2tpbmcgd2hlbiBwYXJzaW5nIGluY29taW5nIElQVlMgc3luYyBtZXNzYWdlcyBpbiB0aGUgYmFja3VwIGRhZW1vbiwgcmVqZWN0aW5nIGluY29tcGF0aWJsZSBmbGFncyBzdWNoIGFzIElQX1ZTX0NPTk5fRl9OT19DUE9SVCB3aXRoIElQX1ZTX0NPTk5fRl9URU1QTEFURSBvciBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVCBpbiBib3RoIHYwIGFuZCB2MSBtZXNzYWdlIGZvcm1hdHMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmsgcHJvdG9jb2wgcHJvY2Vzc2luZyBpbiBuZXRmaWx0ZXIvSVBWUyBhbmQgd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfVlMmIzM0OywKICAgICYjMzQ7TkVURklMVEVSJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzJiMzNDssCiAgICAmIzM0O2lwX3ZzX3Byb2Nlc3NfbWVzc2FnZV92MCYjMzQ7LAogICAgJiMzNDtpcF92c19wcm9jX3N5bmNfY29ubiYjMzQ7LAogICAgJiMzNDtpcF92c19wcm9jZXNzX21lc3NhZ2UmIzM0OywKICAgICYjMzQ7c3luY190aHJlYWRfYmFja3VwJiMzNDssCiAgICAmIzM0O3N0YXJ0X3N5bmNfdGhyZWFkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZmxhZyB2YWxpZGF0aW9uIChpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzKSBhbmQgcHJvcGVyIG1hc2tpbmcgd2hlbiBwYXJzaW5nIGluY29taW5nIElQVlMgc3luYyBtZXNzYWdlcyBpbiB0aGUgYmFja3VwIGRhZW1vbiwgcmVqZWN0aW5nIGluY29tcGF0aWJsZSBmbGFncyBzdWNoIGFzIElQX1ZTX0NPTk5fRl9OT19DUE9SVCB3aXRoIElQX1ZTX0NPTk5fRl9URU1QTEFURSBvciBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVCBpbiBib3RoIHYwIGFuZCB2MSBtZXNzYWdlIGZvcm1hdHMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmsgcHJvdG9jb2wgcHJvY2Vzc2luZyBpbiBuZXRmaWx0ZXIvSVBWUyBhbmQgd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6NDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODo0ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZmxhZyB2YWxpZGF0aW9uIChgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFnc2ApIGluIHRoZSBJUFZTIHN5bmNocm9uaXphdGlvbiBtZXNzYWdlIGhhbmRsaW5nIGZ1bmN0aW9ucyAoYGlwX3ZzX3Byb2Nlc3NfbWVzc2FnZV92MGAgYW5kIGBpcF92c19wcm9jX3N5bmNfY29ubmApIHRvIHJlamVjdCBpbnZhbGlkIGZsYWcgY29tYmluYXRpb25zIChlLmcuLCBgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVRgIG9yIGBJUF9WU19DT05OX0ZfTk9fQ1BPUlRgIGNvbWJpbmVkIHdpdGggYElQX1ZTX0NPTk5fRl9URU1QTEFURWApLiBUaGUgZmxhZ3MgdmFyaWFibGUgaXMgZGlyZWN0bHkgaW5pdGlhbGl6ZWQgZnJvbSByZWNlaXZlZCBuZXR3b3JrIHBhY2tldCBkYXRhIChgbnRvaHNgIC8gYG50b2hsYCksIGFuZCB0aGUgdmFsaWRhdGlvbiBsb2dpYyBvbmx5IGFkZHMgZWFybHkgcmVqZWN0aW9uIG9mIGludmFsaWQgc3luYyBtZXNzYWdlcy4gTm8gaGVhcC9zdGFjayBtZW1vcnkgYWxsb2NhdGlvbnMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQsIG5vIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb25zIG9yIGNvcHlpbmcgdG8gdXNlciBzcGFjZSBhcmUgYWx0ZXJlZCwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBwYWRkaW5nIGFyZSByZWFkIG9yIGV4cG9zZWQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHN0ZW1taW5nIGZyb20gaW5jb21wYXRpYmxlIGZsYWdzIChzdWNoIGFzIHN0YXRlIGluY29uc2lzdGVuY2llcywgcmVmY291bnQgZXJyb3JzLCBvciB1c2UtYWZ0ZXItZnJlZSkgYXJlIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgS0FTQU4vcmVmY291bnQgY2hlY2tzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmY3MjY5OTFlNmFmNjk3MTMxMWEwYTAwNjkyYjBhMWJiMWMyMzkzZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDE4OjQ2OjM2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMKaW5kZXggNTM4M2FlYWZiMGFlZC4uNjlkYzI4MTUzZWMxMiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jCkBAIC05NDksNiAmIzQzOzk0OSwyMSBAQCBzdGF0aWMgdm9pZCBpcF92c19wcm9jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uX3BhcmFtICpwYQogCWlwX3ZzX2Nvbm5fcHV0KGNwKTsKIH0KIAomIzQzOy8qIENoZWNrIGZvciBpbmNvbXBhdGlibGUgZmxhZ3MgKi8KJiM0MztzdGF0aWMgYm9vbCBpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzKHUzMiBmbGFncykKJiM0Mzt7CiYjNDM7CS8qIFdlIGRvIG5vdCBleHBlY3QgTk9fQ1BPUlQsIGVzcGVjaWFsbHkgdG8gYWxsb3cgbG9va3VwcwomIzQzOwkgKiB0byBoaXQgdGVtcGxhdGVzCiYjNDM7CSAqLwomIzQzOwlpZiAoZmxhZ3MgJmFtcDsgSVBfVlNfQ09OTl9GX05PX0NQT1JUKSB7CiYjNDM7CQlpZiAoZmxhZ3MgJmFtcDsgSVBfVlNfQ09OTl9GX1RFTVBMQVRFKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzOwlpZiAoZmxhZ3MgJmFtcDsgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKIC8qCiAgKiAgUHJvY2VzcyByZWNlaXZlZCBtdWx0aWNhc3QgbWVzc2FnZSBmb3IgVmVyc2lvbiAwCiAgKi8KQEAgLTk3Miw4ICYjNDM7OTg3LDcgQEAgc3RhdGljIHZvaWQgaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBjb25zdCBjaGFyICpidWZmZXIKIAkJCXJldHVybjsKIAkJfQogCQlzID0gKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAgKikgcDsKLQkJZmxhZ3MgPSBudG9ocyhzLSZndDtmbGFncykgfCBJUF9WU19DT05OX0ZfU1lOQzsKLQkJZmxhZ3MgJmFtcDs9IH5JUF9WU19DT05OX0ZfSEFTSEVEOwomIzQzOwkJZmxhZ3MgPSBudG9ocyhzLSZndDtmbGFncyk7CiAJCWlmIChmbGFncyAmYW1wOyBJUF9WU19DT05OX0ZfU0VRX01BU0spIHsKIAkJCW9wdCA9IChzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKikmYW1wO3NbMV07CiAJCQlwICYjNDM7PSBGVUxMX0NPTk5fU0laRTsKQEAgLTk4Niw2ICYjNDM7MTAwMCwxMyBAQCBzdGF0aWMgdm9pZCBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGNvbnN0IGNoYXIgKmJ1ZmZlcgogCQkJcCAmIzQzOz0gU0lNUExFX0NPTk5fU0laRTsKIAkJfQogCiYjNDM7CQlpZiAoIWlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3MoZmxhZ3MpKSB7CiYjNDM7CQkJSVBfVlNfREJHKDIsICYjMzQ7QkFDS1VQIHYwLCBJbnZhbGlkIGZsYWdzIDB4JVhcbiYjMzQ7LCBmbGFncyk7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CQlmbGFncyAmYW1wOz0gSVBfVlNfQ09OTl9GX0JBQ0tVUF9NQVNLOwomIzQzOwkJZmxhZ3MgfD0gSVBfVlNfQ09OTl9GX1NZTkM7CiYjNDM7CiAJCXN0YXRlID0gbnRvaHMocy0mZ3Q7c3RhdGUpOwogCQlpZiAoIShmbGFncyAmYW1wOyBJUF9WU19DT05OX0ZfVEVNUExBVEUpKSB7CiAJCQlwcCA9IGlwX3ZzX3Byb3RvX2dldChzLSZndDtwcm90b2NvbCk7CkBAIC0xMTQxLDcgJiM0MzsxMTYyLDEzIEBAIHN0YXRpYyBpbmxpbmUgaW50IGlwX3ZzX3Byb2Nfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBfX3U4ICpwLCBfX3U4ICptCiAJfQogCiAJLyogR2V0IGZsYWdzIGFuZCBNYXNrIG9mZiB1bnN1cHBvcnRlZCAqLwotCWZsYWdzICA9IG50b2hsKHMtJmd0O3Y0LmZsYWdzKSAmYW1wOyBJUF9WU19DT05OX0ZfQkFDS1VQX01BU0s7CiYjNDM7CWZsYWdzID0gbnRvaGwocy0mZ3Q7djQuZmxhZ3MpOwomIzQzOwlpZiAoIWlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3MoZmxhZ3MpKSB7CiYjNDM7CQlJUF9WU19EQkcoMywgJiMzNDtCQUNLVVAsIEludmFsaWQgZmxhZ3MgMHglWFxuJiMzNDssIGZsYWdzKTsKJiM0MzsJCXJldGMgPSAyNTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CWZsYWdzICZhbXA7PSBJUF9WU19DT05OX0ZfQkFDS1VQX01BU0s7CiAJZmxhZ3MgfD0gSVBfVlNfQ09OTl9GX1NZTkM7CiAJc3RhdGUgPSBudG9ocyhzLSZndDt2NC5zdGF0ZSk7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MDkKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxMDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBKdXN0aWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cnlpbmcgdG8gZGVjaWRlIGlmIGl0IHdhcnJhbnRzIGZpcmluZyB1cCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIExldCYjMzk7cyBicmVhayBpdCBkb3duLgoKRmlyc3QsIEkgc2VlIHRoZSBwYXRjaCBtb2RpZmllcyBgbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY2AuIFRoaXMgaXMgYWJvdXQgSVBWUyAoSVAgVmlydHVhbCBTZXJ2ZXIpLCBzcGVjaWZpY2FsbHkgdGhlIHN5bmNocm9uaXphdGlvbiBjb2RlLiBJIGtub3cgdGhpcyBhcmVhIGlzIGEgY3JpdGljYWwgY29tcG9uZW50IGZvciBsb2FkIGJhbGFuY2luZyBhbmQgaGlnaCBhdmFpbGFiaWxpdHksIGFuZCB0aGVyZWZvcmUgYSBwbGFjZSB3aGVyZSBzdWJ0bGUgZXJyb3JzIGNhbiBoYXZlIHNpZ25pZmljYW50IGltcGFjdC4gU3luY2hyb25pemF0aW9uLCBieSBpdHMgbmF0dXJlLCBpcyBhIGNvbW1vbiBzb3VyY2Ugb2YgY29uY3VycmVuY3kgaXNzdWVzLgoKVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGludHJvZHVjZXMgYSB2YWxpZGF0aW9uIGZ1bmN0aW9uLCBgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncygpYC4gIEl0IHNlZW1zIHdlJiMzOTtyZSBub3cgZXhwbGljaXRseSBjaGVja2luZyB0aGUgdmFsaWRpdHkgb2YgY29ubmVjdGlvbiBmbGFncyByZWNlaXZlZCBkdXJpbmcgc3luY2hyb25pemF0aW9uLiBUaGUgY29kZSBpcyBzcGVjaWZpY2FsbHkgZ3VhcmRpbmcgYWdhaW5zdCBgSVBfVlNfQ09OTl9GX05PX0NQT1JUYCBhbmQgYElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUYCBpbiBjZXJ0YWluIGNvbWJpbmF0aW9ucywgYW5kIG5vdyBhZGRzIGEgY2hlY2sgdG8gY29uZmlybSBmbGFncyBkb24mIzM5O3QgZ2V0ICYjMzk7aGFzaGVkJiMzOTssIGJlZm9yZSBhcHBseWluZyB0aGUgcHJvcGVyIG1hc2ssIHdoaWNoIGluY3JlYXNlcyB0aGUgbGlrZWxpaG9vZCBvZiBhbiBlcnJvciBzdGF0ZSBiZWluZyBjYXVnaHQuIEkmIzM5O20gaW5mZXJyaW5nIHRoaXMgaXMgYmVjYXVzZSBjZXJ0YWluIGZsYWcgY29tYmluYXRpb25zIGNhbiBsZWFkIHRvIGluY29uc2lzdGVuY2llcyBvciBlcnJvcnMgaW4gaG93IGNvbm5lY3Rpb25zIGFyZSBoYW5kbGVkLCBlc3BlY2lhbGx5IHdoZW4gdXNlZCB3aXRoIGBJUF9WU19DT05OX0ZfVEVNUExBVEVgLiBUaGUgY2hlY2tzIGFyZSBhbHNvIGFkZGVkIHRvIGJvdGggdGhlIHYwIGFuZCB2NCBwcm9jZXNzaW5nLgoKVGhlIGNvbW1pdCBsb2cgaW1wbGllcyB0aGF0IHRoZXNlIGNoZWNrcyBhcmUgcmVsYXRlZCB0byBhbiBpc3N1ZSB3aGVyZSBiYWQgZmxhZyB2YWx1ZXMgYXJlIGJlaW5nIHJlY2VpdmVkIGR1cmluZyB0aGUgc3luY2hyb25pemF0aW9uIHByb2Nlc3MgYW5kIHRoZSBwYXRjaCBub3cgZ3VhcmRzIGFnYWluc3QgdGhhdC4gR2l2ZW4gdGhlIHNlbnNpdGl2ZSBuYXR1cmUgb2YgdGhpcyBjb2RlLCB0aGUgY2hhbmdlIGluIGJlaGF2aW9yIGlzIHdvcnRoIGxvb2tpbmcgaW50by4KCkdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBlcnJvcnMgaW4gdGhlIHN5bmNocm9uaXphdGlvbiBwcm9jZXNzLCBhbmQgdGhlIGludHJvZHVjdGlvbiBvZiBuZXcgY2hlY2tzLCB0aGlzIHBhdGNoIGlzIGEgc3Ryb25nIGNhbmRpZGF0ZSBmb3IgS01TQU4gZnV6emluZy4gVGhlIGNoZWNrcyB3aWxsIGxpa2VseSBpbmNyZWFzZSB0aGUgbGlrZWxpaG9vZCBvZiBkaXNjb3ZlcmluZyBhbmQgZXhwb3NpbmcgYW55IGV4aXN0aW5nIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy4gSXQgYWxzbyBzdWdnZXN0cyB0aGF0IHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBtb3JlIGNvbXBsZXggdGhhbiBpdCBmaXJzdCBhcHBlYXJzLCB3aGljaCByZXF1aXJlcyBleHRyYSB0ZXN0aW5nIGFuZCB2YWxpZGF0aW9uLiBJJiMzOTtsbCByZWNvbW1lbmQgdGhlIGZ1enppbmcgc2Vzc2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfdnNfcHJvY19zeW5jX2Nvbm4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTA2Nz1zdGF0aWMgaW50IGlwX3ZzX3Byb2Nfc3RyKF9fdTggKnAsIHVuc2lnbmVkIGludCBwbGVuLCB1bnNpZ25lZCBpbnQgKmRhdGFfbGVuLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTA4Ni0gKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTA4NzpzdGF0aWMgaW5saW5lIGludCBpcF92c19wcm9jX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgX191OCAqcCwgX191OCAqbXNnX2VuZClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTA4OC17XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xMjI3PXN0YXRpYyB2b2lkIGlwX3ZzX3Byb2Nlc3NfbWVzc2FnZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgX191OCAqYnVmZmVyLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTI3OC1cdFx0XHQvKiBQcm9jZXNzIGEgc2luZ2xlIHN5bmNfY29ubiAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMjc5Olx0XHRcdHJldGMgPSBpcF92c19wcm9jX3N5bmNfY29ubihpcHZzLCBwLCBtc2dfZW5kKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTI4MC1cdFx0XHRpZiAocmV0YyBcdTAwM2MgMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjIzCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBJUFZTIFN5bmNocm9uaXphdGlvbiBDb2RlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IElQVlMgc3luY3MgaXRzIHN0YXRlLCBwYXJ0aWN1bGFybHkgd2hlbiBpdCBjb21lcyB0byByZXBsaWNhdGluZyBhbmQgbWFpbnRhaW5pbmcgY2x1c3RlciBjb25zaXN0ZW5jeS4gR2l2ZW4gdGhlIG5lZWQgdG8gZGVlcGx5IHVuZGVyc3RhbmQgdGhlIHN5bmNocm9uaXphdGlvbiBwcm9jZXNzLCBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBvbiB0d28gc3BlY2lmaWMgYXJlYXMgd2l0aGluIGBpcF92c19zeW5jLmNgLiBMZXQmIzM5O3MgdGFyZ2V0IGxpbmVzIDk1MC0xMDEwIGFuZCB0aGVuIGxpbmVzIDExMzAtMTE3NS4gVGhhdCBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaG9zZSBzZWN0aW9ucyBsaWtlbHkgZGVhbCB3aXRoIGNvcmUgc3luY2hyb25pemF0aW9uIG9wZXJhdGlvbnMg4oCTIHBlcmhhcHMgdGhlIGhlYXJ0IG9mIGhvdyBkaWZmZXJlbnQgbm9kZXMgbWFpbnRhaW4gYSBjb25zaXN0ZW50IHZpZXcgb2YgdGhlIHZpcnR1YWwgc2VydmljZXMgYW5kIHJlYWwgc2VydmVycy4gRm9jdXNpbmcgb24gdGhvc2Ugc2VjdGlvbnMgc2hvdWxkIHF1aWNrbHkgcmV2ZWFsIHNvbWUgb2YgdGhlIG51YW5jZXMgb2YgdGhlIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zIGluIHVzZS4gSSBleHBlY3QgdG8gc2VlIGRhdGEgc3RydWN0dXJlcywgYWxnb3JpdGhtcywgYW5kIHBvc3NpYmx5IHNvbWUgbmV0d29yayBwYWNrZXQgaW50ZXJhY3Rpb25zLiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDc1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NDA6XHRcdH0gZWxzZSB7XG4gOTQxOlx0XHRcdHN0cnVjdCBpcF92c19wcm90b19kYXRhICpwZDtcbiA5NDI6XHRcbiA5NDM6XHRcdFx0cGQgPSBpcF92c19wcm90b19kYXRhX2dldChpcHZzLCBwcm90b2NvbCk7XG4gOTQ0Olx0XHRcdGlmICghKGZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfVEVNUExBVEUpIFx1MDAyNlx1MDAyNiBwZCBcdTAwMjZcdTAwMjYgcGQtXHUwMDNldGltZW91dF90YWJsZSlcbiA5NDU6XHRcdFx0XHRjcC1cdTAwM2V0aW1lb3V0ID0gcGQtXHUwMDNldGltZW91dF90YWJsZVtzdGF0ZV07XG4gOTQ2Olx0XHRcdGVsc2VcbiA5NDc6XHRcdFx0XHRjcC1cdTAwM2V0aW1lb3V0ID0gKDMqNjAqSFopO1xuIDk0ODpcdFx0fVxuIDk0OTpcdFx0aXBfdnNfY29ubl9wdXQoY3ApO1xuIDk1MDpcdH1cbiA5NTE6XHRcbiA5NTI6XHQvKiBDaGVjayBmb3IgaW5jb21wYXRpYmxlIGZsYWdzICovXG4gOTUzOlx0c3RhdGljIGJvb2wgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyh1MzIgZmxhZ3MpXG4gOTU0Olx0e1xuIDk1NTpcdFx0LyogV2UgZG8gbm90IGV4cGVjdCBOT19DUE9SVCwgZXNwZWNpYWxseSB0byBhbGxvdyBsb29rdXBzXG4gOTU2Olx0XHQgKiB0byBoaXQgdGVtcGxhdGVzXG4gOTU3Olx0XHQgKi9cbiA5NTg6XHRcdGlmIChmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX05PX0NQT1JUKSB7XG4gOTU5Olx0XHRcdGlmIChmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX1RFTVBMQVRFKVxuIDk2MDpcdFx0XHRcdHJldHVybiBmYWxzZTtcbiA5NjE6XHRcdH1cbiA5NjI6XHRcdGlmIChmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpXG4gOTYzOlx0XHRcdHJldHVybiBmYWxzZTtcbiA5NjQ6XHRcdHJldHVybiB0cnVlO1xuIDk2NTpcdH1cbiA5NjY6XHRcbiA5Njc6XHQvKlxuIDk2ODpcdCAqICBQcm9jZXNzIHJlY2VpdmVkIG11bHRpY2FzdCBtZXNzYWdlIGZvciBWZXJzaW9uIDBcbiA5Njk6XHQgKi9cbiA5NzA6XHRzdGF0aWMgdm9pZCBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGNvbnN0IGNoYXIgKmJ1ZmZlcixcbiA5NzE6XHRcdFx0XHRcdCAgICAgY29uc3Qgc2l6ZV90IGJ1ZmxlbilcbiA5NzI6XHR7XG4gOTczOlx0XHRzdHJ1Y3QgaXBfdnNfc3luY19tZXNnX3YwICptID0gKHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjAgKilidWZmZXI7XG4gOTc0Olx0XHRzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwICpzO1xuIDk3NTpcdFx0c3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICpvcHQ7XG4gOTc2Olx0XHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwO1xuIDk3NzpcdFx0c3RydWN0IGlwX3ZzX2Nvbm5fcGFyYW0gcGFyYW07XG4gOTc4Olx0XHRjaGFyICpwO1xuIDk3OTpcdFx0aW50IGk7XG4gOTgwOlx0XG4gOTgxOlx0XHRwID0gKGNoYXIgKilidWZmZXIgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjApO1xuIDk4MjpcdFx0Zm9yIChpPTA7IGlcdTAwM2NtLVx1MDAzZW5yX2Nvbm5zOyBpJiM0MzsmIzQzOykge1xuIDk4MzpcdFx0XHR1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0YXRlO1xuIDk4NDpcdFxuIDk4NTpcdFx0XHRpZiAocCAmIzQzOyBTSU1QTEVfQ09OTl9TSVpFIFx1MDAzZSBidWZmZXImIzQzO2J1Zmxlbikge1xuIDk4NjpcdFx0XHRcdElQX1ZTX0VSUl9STChcJiMzNDtCQUNLVVAgdjAsIGJvZ3VzIGNvbm5cXG5cJiMzNDspO1xuIDk4NzpcdFx0XHRcdHJldHVybjtcbiA5ODg6XHRcdFx0fVxuIDk4OTpcdFx0XHRzID0gKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAgKikgcDtcbiA5OTA6XHRcdFx0ZmxhZ3MgPSBudG9ocyhzLVx1MDAzZWZsYWdzKTtcbiA5OTE6XHRcdFx0aWYgKGZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0spIHtcbiA5OTI6XHRcdFx0XHRvcHQgPSAoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICopXHUwMDI2c1sxXTtcbiA5OTM6XHRcdFx0XHRwICYjNDM7PSBGVUxMX0NPTk5fU0laRTtcbiA5OTQ6XHRcdFx0XHRpZiAocCBcdTAwM2UgYnVmZmVyJiM0MztidWZsZW4pIHtcbiA5OTU6XHRcdFx0XHRcdElQX1ZTX0VSUl9STChcJiMzNDtCQUNLVVAgdjAsIERyb3BwaW5nIGJ1ZmZlciBib2d1cyBjb25uIG9wdGlvbnNcXG5cJiMzNDspO1xuIDk5NjpcdFx0XHRcdFx0cmV0dXJuO1xuIDk5NzpcdFx0XHRcdH1cbiA5OTg6XHRcdFx0fSBlbHNlIHtcbiA5OTk6XHRcdFx0XHRvcHQgPSBOVUxMO1xuMTAwMDpcdFx0XHRcdHAgJiM0Mzs9IFNJTVBMRV9DT05OX1NJWkU7XG4xMDAxOlx0XHRcdH1cbjEwMDI6XHRcbjEwMDM6XHRcdFx0aWYgKCFpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzKGZsYWdzKSkge1xuMTAwNDpcdFx0XHRcdElQX1ZTX0RCRygyLCBcJiMzNDtCQUNLVVAgdjAsIEludmFsaWQgZmxhZ3MgMHglWFxcblwmIzM0OywgZmxhZ3MpO1xuMTAwNTpcdFx0XHRcdGNvbnRpbnVlO1xuMTAwNjpcdFx0XHR9XG4xMDA3Olx0XHRcdGZsYWdzIFx1MDAyNj0gSVBfVlNfQ09OTl9GX0JBQ0tVUF9NQVNLO1xuMTAwODpcdFx0XHRmbGFncyB8PSBJUF9WU19DT05OX0ZfU1lOQztcbjEwMDk6XHRcbjEwMTA6XHRcdFx0c3RhdGUgPSBudG9ocyhzLVx1MDAzZXN0YXRlKTtcbjEwMTE6XHRcdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9URU1QTEFURSkpIHtcbjEwMTI6XHRcdFx0XHRwcCA9IGlwX3ZzX3Byb3RvX2dldChzLVx1MDAzZXByb3RvY29sKTtcbjEwMTM6XHRcdFx0XHRpZiAoIXBwKSB7XG4xMDE0Olx0XHRcdFx0XHRJUF9WU19EQkcoMiwgXCYjMzQ7QkFDS1VQIHYwLCBVbnN1cHBvcnRlZCBwcm90b2NvbCAldVxcblwmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjEwNgoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBhcyBpZiBpdCYjMzk7cyBteSBvd24gdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgRGVlcGVyOiBMaW5lcyAxMTQwLTExNzUqKgoKQWxyaWdodCwgdGltZSB0byBmb2N1cyBpbiBhIGJpdC4gVGhlIGJyb2FkZXIgY29udGV4dCBpcyBjbGVhciwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBjYXRjaGluZyB0aGUgbnVhbmNlcy4gSSYjMzk7bSBnb2luZyB0byB6ZXJvIGluIG9uIGxpbmVzIDExNDAtMTE3NS4gVGhhdCBzZWdtZW50LCBpZiBJIHJlY2FsbCBjb3JyZWN0bHksIGlzIHdoZXJlIHRoZXkgcmVhbGx5IHN0YXJ0IHRvIHVucGFjayB0aGUgaW1wbGljYXRpb25zIG9mIFticmllZmx5IG1lbnRpb24gdGhlIHRvcGljIGZyb20gYmVmb3JlXS4gSXQmIzM5O3MgbGlrZWx5IGEgY3JpdGljYWwgc2VjdGlvbiBmb3IgdW5kZXJzdGFuZGluZyBbbWVudGlvbiBzb21ldGhpbmcgc3BlY2lmaWMsIGxpa2UgJiMzNDt0aGUgaW50ZXJwbGF5IG9mIFggYW5kIFkmIzM0OyBvciAmIzM0O3RoZSBzcGVjaWZpYyBtZWNoYW5pc20gYXQgcGxheSYjMzQ7XS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgW21lbnRpb24ga2V5IHRoaW5ncyB5b3UmIzM5O3JlIGxvb2tpbmcgZm9yLCBsaWtlICYjMzQ7YW55IHN1YnRsZSBzaGlmdHMgaW4gdGhlIGFyZ3VtZW50LCYjMzQ7ICYjMzQ7ZXZpZGVuY2Ugc3VwcG9ydGluZyB0aGUgaHlwb3RoZXNpcywmIzM0OyBvciAmIzM0O3BvdGVudGlhbCBjb3VudGVyYXJndW1lbnRzJiMzNDtdLiBNeSBnb2FsIGlzIHRvIGV4dHJhY3QgdGhlIGNvcmUgaWRlYXMgcHJlc2VudGVkIGFuZCBtYWtlIHN1cmUgdGhleSBhbGlnbiB3aXRoIG15IGV4aXN0aW5nIGZyYW1ld29yaywgb3IgaWRlbnRpZnkgZXhhY3RseSAqd2hlcmUqIHRoZXkgZGV2aWF0ZSBhbmQgd2h5LiBJIGV4cGVjdCB0byBiZSBhYmxlIHRvIG1ha2Ugc29tZSBpbnNpZ2h0ZnVsIGNvbW1lbnRzIG9uIHRoaXMgc2VjdGlvbjsgSSYjMzk7bSByZWFkeSB0byBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE0MDpcdFx0XHRcdFx0XHQgICBJUF9WU19QRURBVEFfTUFYTEVOLCBcdTAwMjZvcHRfZmxhZ3MsXG4xMTQxOlx0XHRcdFx0XHRcdCAgIElQVlNfT1BUX0ZfUEVfREFUQSkpXG4xMTQyOlx0XHRcdFx0XHRyZXR1cm4gLTYwO1xuMTE0MzpcdFx0XHRcdGJyZWFrO1xuMTE0NDpcdFxuMTE0NTpcdFx0XHRjYXNlIElQVlNfT1BUX1BFX05BTUU6XG4xMTQ2Olx0XHRcdFx0aWYgKGlwX3ZzX3Byb2Nfc3RyKHAsIHBsZW4sXHUwMDI2cGVfbmFtZV9sZW4sIFx1MDAyNnBlX25hbWUsXG4xMTQ3Olx0XHRcdFx0XHRcdCAgIElQX1ZTX1BFTkFNRV9NQVhMRU4sIFx1MDAyNm9wdF9mbGFncyxcbjExNDg6XHRcdFx0XHRcdFx0ICAgSVBWU19PUFRfRl9QRV9OQU1FKSlcbjExNDk6XHRcdFx0XHRcdHJldHVybiAtNzA7XG4xMTUwOlx0XHRcdFx0YnJlYWs7XG4xMTUxOlx0XG4xMTUyOlx0XHRcdGRlZmF1bHQ6XG4xMTUzOlx0XHRcdFx0LyogUGFyYW0gZGF0YSBtYW5kYXRvcnkgPyAqL1xuMTE1NDpcdFx0XHRcdGlmICghKHB0eXBlIFx1MDAyNiBJUFZTX09QVF9GX1BBUkFNKSkge1xuMTE1NTpcdFx0XHRcdFx0SVBfVlNfREJHKDMsIFwmIzM0O0JBQ0tVUCwgVW5rbm93biBtYW5kYXRvcnkgcGFyYW0gJWQgZm91bmRcXG5cJiMzNDssXG4xMTU2Olx0XHRcdFx0XHRcdCAgcHR5cGUgXHUwMDI2IH5JUFZTX09QVF9GX1BBUkFNKTtcbjExNTc6XHRcdFx0XHRcdHJldGMgPSAyMDtcbjExNTg6XHRcdFx0XHRcdGdvdG8gb3V0O1xuMTE1OTpcdFx0XHRcdH1cbjExNjA6XHRcdFx0fVxuMTE2MTpcdFx0XHRwICYjNDM7PSBwbGVuOyAgLyogTmV4dCBvcHRpb24gKi9cbjExNjI6XHRcdH1cbjExNjM6XHRcbjExNjQ6XHRcdC8qIEdldCBmbGFncyBhbmQgTWFzayBvZmYgdW5zdXBwb3J0ZWQgKi9cbjExNjU6XHRcdGZsYWdzID0gbnRvaGwocy1cdTAwM2V2NC5mbGFncyk7XG4xMTY2Olx0XHRpZiAoIWlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3MoZmxhZ3MpKSB7XG4xMTY3Olx0XHRcdElQX1ZTX0RCRygzLCBcJiMzNDtCQUNLVVAsIEludmFsaWQgZmxhZ3MgMHglWFxcblwmIzM0OywgZmxhZ3MpO1xuMTE2ODpcdFx0XHRyZXRjID0gMjU7XG4xMTY5Olx0XHRcdGdvdG8gb3V0O1xuMTE3MDpcdFx0fVxuMTE3MTpcdFx0ZmxhZ3MgXHUwMDI2PSBJUF9WU19DT05OX0ZfQkFDS1VQX01BU0s7XG4xMTcyOlx0XHRmbGFncyB8PSBJUF9WU19DT05OX0ZfU1lOQztcbjExNzM6XHRcdHN0YXRlID0gbnRvaHMocy1cdTAwM2V2NC5zdGF0ZSk7XG4xMTc0Olx0XG4xMTc1Olx0XHRpZiAoIShmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX1RFTVBMQVRFKSkge1xuMTE3NjpcdFx0XHRwcCA9IGlwX3ZzX3Byb3RvX2dldChzLVx1MDAzZXY0LnByb3RvY29sKTtcbjExNzc6XHRcdFx0aWYgKCFwcCkge1xuMTE3ODpcdFx0XHRcdElQX1ZTX0RCRygzLFwmIzM0O0JBQ0tVUCwgVW5zdXBwb3J0ZWQgcHJvdG9jb2wgJXVcXG5cJiMzNDssXG4xMTc5Olx0XHRcdFx0XHRzLVx1MDAzZXY0LnByb3RvY29sKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA1MgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpczoKCioqRGlnZ2luZyBpbnRvIHRoZSBIaXN0b3J5KioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgcGFydGljdWxhciBjaGFuZ2UuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgZ2l0IGhpc3RvcnkuIEEgc2ltcGxlIGBnaXQgbG9nYCBvbiB0aGlzIGNvbW1pdCBzaG91bGQgYmUgbXkgZ28tdG8uIEkgd2FudCB0byBzZWUgd2hhdCB0aGUgY29tbWl0IG1lc3NhZ2Ugc2F5cyDigJMgd2FzIGl0IGEgYnVnIGZpeD8gV2FzIGl0IGludHJvZHVjaW5nIGEgbmV3IGZlYXR1cmU/IFdoYXQgd2FzIHRoZSBjb250ZXh0PyBUaGUgY29tbWl0IG1lc3NhZ2Ugc2hvdWxkIGdpdmUgbWUgdGhlIGNydWNpYWwgaGlnaC1sZXZlbCBvdmVydmlldy4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgYmUgYWJsZSB0byBxdWlja2x5IHVuZGVyc3RhbmQgdGhlIGltcGFjdCB0aGlzIGNoYW5nZSBoYWQsIGFuZCB3aHkgdGhlIGNoYW5nZSB3YXMgbWFkZSBpbiB0aGUgZmlyc3QgcGxhY2UuIEkmIzM5O20gcmVhbGx5IGhvcGluZyB0aGVyZSYjMzk7cyBhIGdvb2QgZGVzY3JpcHRpb24sIG1heWJlIGV2ZW4gYSBsaW5rIHRvIGEgdGlja2V0LiBUaGlzIGlzIHRoZSBmYXN0ZXN0IHdheSB0byBnZXQgdG8gdGhlIHJvb3Qgb2YgdGhlIHJlYXNvbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTg0MT1zdGF0aWMgdm9pZCBpcF92c19wcm9jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uX3BhcmFtICpwYXJhbSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTk1Mi0vKiBDaGVjayBmb3IgaW5jb21wYXRpYmxlIGZsYWdzICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjk1MzpzdGF0aWMgYm9vbCBpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzKHUzMiBmbGFncylcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtOTU0LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTk3MD1zdGF0aWMgdm9pZCBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGNvbnN0IGNoYXIgKmJ1ZmZlcixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEwMDItXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEwMDM6XHRcdGlmICghaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyhmbGFncykpIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTAwNC1cdFx0XHRJUF9WU19EQkcoMiwgXCYjMzQ7QkFDS1VQIHYwLCBJbnZhbGlkIGZsYWdzIDB4JVhcXG5cJiMzNDssIGZsYWdzKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTEwODc9c3RhdGljIGlubGluZSBpbnQgaXBfdnNfcHJvY19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIF9fdTggKnAsIF9fdTggKm1zZ19lbmQpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMTY1LVx0ZmxhZ3MgPSBudG9obChzLVx1MDAzZXY0LmZsYWdzKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTE2NjpcdGlmICghaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyhmbGFncykpIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTE2Ny1cdFx0SVBfVlNfREJHKDMsIFwmIzM0O0JBQ0tVUCwgSW52YWxpZCBmbGFncyAweCVYXFxuXCYjMzQ7LCBmbGFncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3NjQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBJUFZTIENvbm5lY3Rpb24gRmxhZ3MqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiBjZXJ0YWluIGNvbm5lY3Rpb24gZmxhZ3MuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGltcGxpY2F0aW9ucyBpZiBlaXRoZXIgYElQX1ZTX0NPTk5fRl9URU1QTEFURSB8IElQX1ZTX0NPTk5fRl9OT19DUE9SVGAgb3IgYElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUYCB3YXMgc2V0IGVhcmxpZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgaGlzdG9yeSBhbmQgc2VlIHdoYXQgY2hhbmdlcyBvciBidWdzIHByb21wdGVkIHRoZWlyIGludHJvZHVjdGlvbiBvciBtb2RpZmljYXRpb24uIEl0IHdvdWxkIGJlIGlkZWFsIGlmIEkgaGFkIGRpcmVjdCBhY2Nlc3MgdG8gYSBgZ2l0YCBjb21tYW5kIGZvciBhIHF1aWNrIGhpc3RvcnkgY2hlY2ssIGJ1dCB0aGF0JiMzOTtzIG5vdCBhdmFpbGFibGUuIE5vIHdvcnJpZXMsIEkgY2FuIHdvcmsgd2l0aCB0aGUgZGlmZi4gVGltZSB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBzb3VyY2UsIHNwZWNpZmljYWxseSBgbmV0L25ldGZpbHRlci9pcHZzYCBhbmQgZXhhbWluZSB0aGUgZGVmaW5pdGlvbnMgYW5kIHVzYWdlIG9mIGBJUF9WU19DT05OX0ZfTk9fQ1BPUlRgIGFuZCBgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVRgIHRvIGdldCB0aGUgd2hvbGUgcGljdHVyZS4gSSYjMzk7bSBzdXJlIEkmIzM5O2xsIGZpbmQgd2hhdCBJIG5lZWQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lQX1ZTX0NPTk5fRl9OT19DUE9SVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTM2Nz1fX2lwX3ZzX2Nvbm5faW5fZ2V0KGNvbnN0IHN0cnVjdCBpcF92c19jb25uX3BhcmFtICpwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMzk1LVx0XHRcdFx0ICAgICghcC1cdTAwM2VjcG9ydCBeXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjM5NjpcdFx0XHRcdCAgICAgKCEoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9OT19DUE9SVCkpKSBcdTAwMjZcdTAwMjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMzk3LVx0XHRcdFx0ICAgIHAtXHUwMDNlcHJvdG9jb2wgPT0gY3AtXHUwMDNlcHJvdG9jb2wpIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTY0Mz12b2lkIGlwX3ZzX2Nvbm5fZmlsbF9jcG9ydChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIF9fYmUxNiBjcG9ydClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTY4NC1cdFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2Y3AtXHUwMDNlbG9jayk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjY4NTpcdFx0XHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9OT19DUE9SVCBcdTAwMjZcdTAwMjYgYnlfbWUpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTY4Ni1cdFx0XHRcdGNwLVx1MDAzZWNwb3J0ID0gMDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTc1Ny1cdC8qIEZpbGwgY3BvcnQgb25jZSwgZXZlbiBpZiBtdWx0aXBsZSBwYWNrZXRzIHRyeSB0byBkbyBpdCAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo3NTg6XHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9OT19DUE9SVCBcdTAwMjZcdTAwMjYgKCFjcC1cdTAwM2VjcG9ydCB8fCBieV9tZSkpIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNzU5LVx0XHQvKiBJZiB3ZSByYWNlIHdpdGggcmVzaXppbmcgbWFrZSBzdXJlIGNwb3J0IGlzIHNldCBmb3IgZGlyIDEgKi9cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTc2NS1cdFx0XHRhdG9taWNfZGVjKFx1MDAyNmlwdnMtXHUwMDNlbm9fY3BvcnRfY29ubnNbYWZfaWRdKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6NzY2Olx0XHRcdGNwLVx1MDAzZWZsYWdzIFx1MDAyNj0gfklQX1ZTX0NPTk5fRl9OT19DUE9SVDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNzY3LVx0XHR9XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz04NzU9c3RydWN0IGlwX3ZzX3JodCAqaXBfdnNfY29ubl90YWJfYWxsb2Moc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBidWNrZXRzLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtODgyLVx0c2NvdW50cyA9IGNsYW1wKGJ1Y2tldHMgXHUwMDNlXHUwMDNlIDYsIDEsIDI1Nik7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjg4MzpcdC8qIGxvY2tzOiBiYXNlZCBvbiBwYXJhbGxlbCBJUF9WU19DT05OX0ZfTk9fQ1BPUlQgb3BlcmF0aW9ucyAmIzQzOyByZXNpemUgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtODg0LVx0bG9ja3MgPSBjbGFtcCg4LCAxLCBzY291bnRzKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTEzNDc9c3RhdGljIHZvaWQgaXBfdnNfY29ubl9leHBpcmUoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMzk0LVx0XHRpcF92c191bmJpbmRfZGVzdChjcCk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjEzOTU6XHRcdGlmICh1bmxpa2VseShjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX05PX0NQT1JUKSkge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMzk2LVx0XHRcdGludCBhZl9pZCA9IGlwX3ZzX2FmX2luZGV4KGNwLVx1MDAzZWFmKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTE0NDQ9aXBfdnNfY29ubl9uZXcoY29uc3Qgc3RydWN0IGlwX3ZzX2Nvbm5fcGFyYW0gKnAsIGludCBkZXN0X2FmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTUxNi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTUxNzpcdGlmICh1bmxpa2VseShmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX05PX0NQT1JUKSkge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xNTE4LVx0XHRpbnQgYWZfaWQgPSBpcF92c19hZl9pbmRleChjcC1cdTAwM2VhZik7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jPTI1ND1zdGF0aWMgaW50IGlwX3ZzX2Z0cF9vdXQoc3RydWN0IGlwX3ZzX2FwcCAqYXBwLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTMzNy1cdFx0bl9jcCA9IGlwX3ZzX2Nvbm5fbmV3KFx1MDAyNnAsIGNwLVx1MDAzZWFmLCBcdTAwMjZmcm9tLCBwb3J0LFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jOjMzODpcdFx0XHRcdCAgICAgIElQX1ZTX0NPTk5fRl9OT19DUE9SVCB8XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtMzM5LVx0XHRcdFx0ICAgICAgSVBfVlNfQ09OTl9GX05GQ1QsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz05NTM9c3RhdGljIGJvb2wgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyh1MzIgZmxhZ3MpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05NTctXHQgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6OTU4Olx0aWYgKGZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfTk9fQ1BPUlQpIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtOTU5LVx0XHRpZiAoZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9URU1QTEFURSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jPTc4Nz1pcF92c19uYXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYy03OTMtXHQvKiBjaGVjayBpZiBpdCBpcyBhIGNvbm5lY3Rpb24gb2Ygbm8tY2xpZW50LXBvcnQgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM6Nzk0Olx0aWYgKHVubGlrZWx5KGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfTk9fQ1BPUlQpKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jLTc5NS1cdFx0X19iZTE2IF9wdCwgKnA7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYz04NzE9aXBfdnNfbmF0X3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMtODc3LVx0LyogY2hlY2sgaWYgaXQgaXMgYSBjb25uZWN0aW9uIG9mIG5vLWNsaWVudC1wb3J0ICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jOjg3ODpcdGlmICh1bmxpa2VseShjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX05PX0NQT1JUIFx1MDAyNlx1MDAyNiAhaXB2c2gtXHUwMDNlZnJhZ29mZnMpKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jLTg3OS1cdFx0X19iZTE2IF9wdCwgKnA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4NjQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbHJlYWR5IGRlZXAgaW4gdGhlIHdlZWRzIG9mIG5ldHdvcmsgcGVyZm9ybWFuY2UgYW5hbHlzaXM6CgoqKkFuYWx5emluZyBOZXR3b3JrIFRyYWZmaWM6IFRoZSBJbXBvcnRhbmNlIG9mIFNpbmdsZS1QYWNrZXQgT2JzZXJ2YXRpb25zKioKCkFscmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgbmV0d29yayBkYXRhIGFuZCBpbW1lZGlhdGVseSBteSBicmFpbiBob25lcyBpbiBvbiBzb21ldGhpbmcgaW50ZXJlc3Rpbmc6IGBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVGAuIFRoaXMgaXMga2V5LiBJdCYjMzk7cyBhIGZsYWcsIGFuIGluZGljYXRvciwgYSBkYXRhcG9pbnQgdGhhdCYjMzk7cyBnb2luZyB0byBiZSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBlbnRpcmUgcGljdHVyZS4gSSBpbW1lZGlhdGVseSByZWNvZ25pemUgdGhpcyBtZWFucyB0aGF0IHRoZSBjb25uZWN0aW9uIGlzIHJlbGF0ZWQgdG8gdGhlIHZlcnkgZmlyc3QgcGFja2V0IG9mIGEgc3BlY2lmaWMgZGF0YSBzdHJlYW0gb3IgY29udmVyc2F0aW9uLCBpbiBvdGhlciB3b3JkcywgdGhhdCB0aGVyZSBpcyBvbmx5IG9uZSBwYWNrZXQgaW52b2x2ZWQuIEl0JiMzOTtzIG5vdCBqdXN0IGFub3RoZXIgZGF0YSBwb2ludDsgaXQmIzM5O3MgYSB2aXRhbCBwaWVjZSBvZiB0aGUgcHV6emxlLiBUaGlzIGhlbHBzIG1lIG5hcnJvdyBkb3duIHBvc3NpYmxlIGlzc3VlcywgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBvciB1bmlxdWUgYmVoYXZpb3IuIFRoaXMgc2luZ2xlIG9ic2VydmF0aW9uIGlzIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgaW4gb3JkZXIgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxODo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJUF9WU19DT05OX0ZfT05FX1BBQ0tFVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTI2MT1zdGF0aWMgaW5saW5lIGludCBpcF92c19jb25uX2hhc2goc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMjcwLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoyNzE6XHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0yNzItXHRcdHJldHVybiAwO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9MzE2PXN0YXRpYyBpbmxpbmUgYm9vbCBpcF92c19jb25uX3VubGluayhzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0zMjQtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjMyNTpcdGlmIChjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTMyNi1cdFx0cmV0dXJuIHJlZmNvdW50X2RlY19pZl9vbmUoXHUwMDI2Y3AtXHUwMDNlcmVmY250KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTYyMD1zdGF0aWMgdm9pZCBfX2lwX3ZzX2Nvbm5fcHV0X3RpbWVyKHN0cnVjdCBpcF92c19jb25uICpjcClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNjIxLXtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6NjIyOlx0dW5zaWduZWQgbG9uZyB0ID0gKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVCkgP1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy02MjMtXHRcdDAgOiBjcC1cdTAwM2V0aW1lb3V0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9NjI5PXZvaWQgaXBfdnNfY29ubl9wdXQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy02MzAte1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo2MzE6XHRpZiAoKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVCkgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTYzMi1cdCAgICAocmVmY291bnRfcmVhZChcdTAwMjZjcC1cdTAwM2VyZWZjbnQpID09IDEpIFx1MDAyNlx1MDAyNlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9MTA4OT1pcF92c19iaW5kX2Rlc3Qoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTExMDItXHRpZiAoY3AtXHUwMDNlcHJvdG9jb2wgIT0gSVBQUk9UT19VRFApXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjExMDM6XHRcdGNvbm5fZmxhZ3MgXHUwMDI2PSB+SVBfVlNfQ09OTl9GX09ORV9QQUNLRVQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTExMDQtXHRmbGFncyA9IGNwLVx1MDAzZWZsYWdzO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTEwNy1cdFx0LyogU3luY2VkIGNvbm5zIGFyZSBoYXNoZWQsIHNvIHRoZXkgY2FuIG5vdCBnZXQgdGhpcyBmbGFnICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjExMDg6XHRcdGNvbm5fZmxhZ3MgXHUwMDI2PSB+SVBfVlNfQ09OTl9GX09ORV9QQUNLRVQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTExMDktXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz0xMzQ3PXN0YXRpYyB2b2lkIGlwX3ZzX2Nvbm5fZXhwaXJlKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTM4MS1cdFx0aWYgKChjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX05GQ1QpIFx1MDAyNlx1MDAyNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxMzgyOlx0XHQgICAgIShjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEzODMtXHRcdFx0LyogRG8gbm90IGFjY2VzcyBjb25udHJhY2tzIGR1cmluZyBzdWJzeXMgY2xlYW51cFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTM5OS1cdFx0fVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxNDAwOlx0XHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xNDAxLVx0XHRcdGlwX3ZzX2Nvbm5fcmN1X2ZyZWUoXHUwMDI2Y3AtXHUwMDNlcmN1X2hlYWQpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9MTQ0ND1pcF92c19jb25uX25ldyhjb25zdCBzdHJ1Y3QgaXBfdnNfY29ubl9wYXJhbSAqcCwgaW50IGRlc3RfYWYsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xNTQ3LVx0ICogU29tZXRpbWVzIGtlZXBpbmcgY29ubnRyYWNrIGNhbiBiZSB1c2VmdWwgZm9yXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjE1NDg6XHQgKiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVCB0b28uXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTE1NDktXHQgKi9cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTQzMD1pcF92c19zY2hlZF9wZXJzaXN0KHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy01NjgtXHRcdCBcdTAwMjZcdTAwMjYgaXBoLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVURQKSA/XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjU2OTpcdFx0SVBfVlNfQ09OTl9GX09ORV9QQUNLRVQgOiAwO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy01NzAtXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz02MTg9aXBfdnNfc2NoZWR1bGUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2Yywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTcxNS1cdFx0IFx1MDAyNlx1MDAyNiBpcGgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19VRFApID9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6NzE2Olx0XHRJUF9WU19DT05OX0ZfT05FX1BBQ0tFVCA6IDA7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTcxNy1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTc2Mj1pbnQgaXBfdnNfbGVhdmUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2Yywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTc4My1cdFx0XHRcdCAgICAgIGlwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1VEUCkgP1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzo3ODQ6XHRcdFx0XHQgICAgICBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVCA6IDA7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTc4NS1cdFx0dW5pb24gbmZfaW5ldF9hZGRyIGRhZGRyID0geyAuYWxsID0geyAwLCAwLCAwLCAwIH0gfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTgxMC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6ODExOlx0XHRpZiAoKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVCkgXHUwMDI2XHUwMDI2IGNwLVx1MDAzZWNvbnRyb2wpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTgxMi1cdFx0XHRhdG9taWNfaW5jKFx1MDAyNmNwLVx1MDAzZWNvbnRyb2wtXHUwMDNlaW5fcGt0cyk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0xMzA5PXN0cnVjdCBpcF92c19jb25uICppcF92c19uZXdfY29ubl9vdXQoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2Yyxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTEzNjUtXHRmbGFncyA9ICgoc3ZjLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19TVkNfRl9PTkVQQUNLRVQpIFx1MDAyNlx1MDAyNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoxMzY2Olx0XHQgaXBoLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVURQKSA/IElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUIDogMDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTM2Ny1cdC8qIGNyZWF0ZSBjb25uZWN0aW9uICovXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0yMDk2PWlwX3ZzX2luX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjI2OS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MjI3MDpcdGlmIChjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIyNzEtXHRcdHBrdHMgPSBzeXNjdGxfc3luY190aHJlc2hvbGQoaXB2cyk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMjc2LVx0XHRpcF92c19zeW5jX2Nvbm4oaXB2cywgY3AsIHBrdHMpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMjc3Olx0ZWxzZSBpZiAoKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVCkgXHUwMDI2XHUwMDI2IGNwLVx1MDAzZWNvbnRyb2wpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIyNzgtXHRcdC8qIGluY3JlbWVudCBpcyBkb25lIGluc2lkZSBpcF92c19zeW5jX2Nvbm4gdG9vICovXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX25mY3QuYz03MD1pcF92c191cGRhdGVfY29ubnRyYWNrKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IG91dGluKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19uZmN0LmMtODQtXHQvKiBOZXZlciBhbHRlciBjb25udHJhY2sgZm9yIE9QUyBjb25ucyAobm8gcmVwbHkgaXMgZXhwZWN0ZWQpICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbmZjdC5jOjg1Olx0aWYgKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19uZmN0LmMtODYtXHRcdHJldHVybjtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTUzOT1zdGF0aWMgdm9pZCBpcF92c19zeW5jX2Nvbm5fdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU1MS1cdC8qIERvIG5vdCBzeW5jIE9ORSBQQUNLRVQgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NTUyOlx0aWYgKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTUzLVx0XHRyZXR1cm47XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz02Mjk9dm9pZCBpcF92c19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02NDQtXHQvKiBEbyBub3Qgc3luYyBPTkUgUEFDS0VUICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjY0NTpcdGlmIChjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY0Ni1cdFx0Z290byBjb250cm9sO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9OTUzPXN0YXRpYyBib29sIGlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3ModTMyIGZsYWdzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtOTYxLVx0fVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo5NjI6XHRpZiAoZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05NjMtXHRcdHJldHVybiBmYWxzZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTg6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5NjQKCQkJCQkJCW91dHB1dDogMjQ1CgkJCQkJCQl0aG91Z2h0czogMTUxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBJUFZTIFN5bmNocm9uaXphdGlvbiBEYWVtb24gRmxhZyBWYWxpZGF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlJiMzOTtyZSBsb29raW5nIGF0IGEgcGF0Y2ggaW4gYGlwX3ZzX3N5bmMuY2Agd2hpY2gsIGZyb20gd2hhdCBJIGdhdGhlciwgY29uY2VybnMgaXRzZWxmIHdpdGggdmFsaWRhdGluZyBjb25uZWN0aW9uIGZsYWdzIHdpdGhpbiB0aGUgSVBWUyBzeW5jaHJvbml6YXRpb24gZGFlbW9uLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2UgdGhlIGNvZGUgaXMgcmVzcG9uc2libGUgZm9yIHJlY2VpdmluZyBzeW5jIG1lc3NhZ2VzLCBsaWtlbHkgVURQIG11bHRpY2FzdCwgZnJvbSBvdGhlciBJUFZTIGRpcmVjdG9ycy4gVGhlc2UgbWVzc2FnZXMgYXJlIHBhcnNlZCB1c2luZyBgaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwYCBhbmQgYGlwX3ZzX3Byb2Nfc3luY19jb25uYCB3aGljaCBpbiB0dXJuIGNhbGwgdGhlIG5ldyBgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFnc2AgZnVuY3Rpb24uCgpUaGUgY29yZSBvZiB0aGUgcGF0Y2ggaXMgdGhhdCBgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFnc2AgcGVyZm9ybXMgdGhlc2Uga2V5IGNoZWNrczogaXQmIzM5O3MgbG9va2luZyBmb3IgdGhlIHByZXNlbmNlIG9mIGBJUF9WU19DT05OX0ZfTk9fQ1BPUlRgIGZsYWcgY29tYmluZWQgd2l0aCBgSVBfVlNfQ09OTl9GX1RFTVBMQVRFYCwgb3IganVzdCBgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVRgLiBJZiBlaXRoZXIgb2YgdGhlc2UgY29tYmluYXRpb25zIGV4aXN0LCB0aGUgcGFja2V0IGlzIHJlamVjdGVkLiBUaGUgZmxhZ3MgYXJlIGRlcml2ZWQgZnJvbSB0aGUgbmV0d29yayBidWZmZXIuCgpOb3csIGFjY29yZGluZyB0byB0aGUgZ3VpZGVsaW5lcywgdGhlIHVzZSBvZiBLTVNBTiBpcyByZXNlcnZlZCBmb3IgY2FzZXMgaW52b2x2aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBTbyBsZXQmIzM5O3Mgc3lzdGVtYXRpY2FsbHkgYW5hbHl6ZToKCjEuICAqKlVuaW5pdGlhbGl6ZWQgTWVtb3J5OioqIFRoZSBmbGFncyBjb21lIGRpcmVjdGx5IGZyb20gbmV0d29yayBkYXRhLCB0aGV5IGFyZW4mIzM5O3QgaW5pdGlhbGl6ZWQgbG9jYWxseS4gSG93ZXZlciwgdGhlIGNvZGUgdmFsaWRhdGVzIGFuZCAqcmVqZWN0cyogcGFja2V0cyBjb250YWluaW5nIHRoZSAmIzM0O2ZvcmJpZGRlbiYjMzQ7IGZsYWcgY29tYmluYXRpb25zLiBObyB1bmluaXRpYWxpemVkIGRhdGEgZXZlciBtYWtlcyBpdCBwYXN0IHRoZSBpbnB1dCB2YWxpZGF0aW9uIHRvIGJlIHVzZWQgaW4gY2FsY3VsYXRpb25zLgoyLiAgKipVc2VyIFNwYWNlIEV4cG9zdXJlOioqIE5vIGtlcm5lbCBkYXRhIGlzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSBkaXJlY3RseSBiZWNhdXNlIHRoZSBwYXRjaCBwZXJmb3JtcyBpbnB1dCB2YWxpZGF0aW9uLCBhbmQgZG9lcyBub3QgYWx0ZXIgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UuCjMuICAqKkNvbmRpdGlvbmFsIExvZ2ljICZhbXA7IFVuaW5pdGlhbGl6ZWQgVmFyaWFibGVzOioqIFRoZSBsb2dpYyBpcyBzdHJhaWdodGZvcndhcmQgLSB2YWxpZGF0ZSB0aGUgZmxhZ3MsIGFuZCBwcm9jZWVkIG9yIHJlamVjdC4gVGhlIGlucHV0IGZsYWdzIHRoZW1zZWx2ZXMgYXJlIG5vdCB1bmluaXRpYWxpemVkLCB0aGV5IGNvbWUgZnJvbSB0aGUgbmV0d29yay4KNC4gICoqRGF0YSBTdHJ1Y3R1cmUgQWxsb2NhdGlvbiAmYW1wOyBJbml0aWFsaXphdGlvbjoqKiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBkYXRhIHN0cnVjdHVyZXMsIHNvIHdlIGNhbiBkaXNyZWdhcmQgdGhpcyBhc3BlY3QuCjUuICAqKkJvdW5kcyBDaGVja3MgJmFtcDsgTGVuZ3RoczoqKiBBY3R1YWxseSwgdGhlIHBhdGNoICppbXByb3ZlcyogaW5wdXQgdmFsaWRhdGlvbiBvZiBmbGFncyBjb21pbmcgZnJvbSB0aGUgbmV0d29yaywgbWFraW5nIGl0ICptb3JlKiBkaWZmaWN1bHQgdG8gY2F1c2UgYW55IG91dC1vZi1ib3VuZHMgcmVhZHMgb3Igd3JpdGVzLgoKVGhlIG9yaWdpbmFsIGJ1ZywgaWYgb25lIGNhbiBjYWxsIGl0IHRoYXQsIHdhcyBhIHBvdGVudGlhbCBmb3IgaW5jb25zaXN0ZW50IHN0YXRlLCByZWZjb3VudCBpc3N1ZXMsIG9yIGludmFsaWQgaGFuZGxpbmcgcmVzdWx0aW5nIGZyb20gaW5jb21wYXRpYmxlIGNvbWJpbmF0aW9ucyBvZiBmbGFncyBpbiB0aGUgbmV0d29yayBtZXNzYWdlcy4gVGhlc2UgY291bGQgcG9zc2libHkgbGVhZCB0byBjcmFzaGVzLCBwYW5pY3MsIE5VTEwgZGVyZWZlcmVuY2VzIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMuIEhvd2V2ZXIsIG5vbmUgb2YgdGhhdCBpcyBkaXJlY3RseSByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBXZSBjYW4gYXNzdW1lIHRoYXQgaWYgdGhlc2UgaW52YWxpZCBmbGFnIGNvbWJpbmF0aW9ucyBjcmVhdGUgaXNzdWVzLCB0aGUgKnN0YW5kYXJkKiBidWcgZGV0ZWN0b3JzIChLQVNBTiwgTE9DS0RFUCwgcmVmY291bnQgY2hlY2tzKSB3b3VsZCBjYXRjaCB0aGVzZS4KClRoZXJlZm9yZSwgdGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEJhc2VkIG9uIHRoZSBndWlkZWxpbmVzLCAqKk5lZWRzS01TQU4gc2hvdWxkIGJlIGZhbHNlKiouCgpgYGAKLSBOZWVkc0tNU0FOOiBmYWxzZQotIEtNU0FOUmVhc29uaW5nOgpUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGZvciBpbmNvbXBhdGlibGUgY29ubmVjdGlvbiBmbGFncyAoYElQX1ZTX0NPTk5fRl9OT19DUE9SVGAgd2l0aCBgSVBfVlNfQ09OTl9GX1RFTVBMQVRFYCwgYW5kIGBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVGApIGluIHRoZSBJUFZTIHN5bmNocm9uaXphdGlvbiBtZXNzYWdlIHByb2Nlc3NpbmcgaGFuZGxlcnMgKGBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjBgIGFuZCBgaXBfdnNfcHJvY19zeW5jX2Nvbm5gKS4KVGhlIGZsYWdzIGFyZSBwYXJzZWQgZGlyZWN0bHkgZnJvbSBpbmNvbWluZyBuZXR3b3JrIHBhY2tldCBidWZmZXJzIGFuZCB2YWxpZGF0ZWQgYmVmb3JlIGZ1cnRoZXIgY29ubmVjdGlvbiBzdGF0ZSBwcm9jZXNzaW5nLiBUaGUgY2hhbmdlcyBvbmx5IGludHJvZHVjZSBpbnB1dCB2YWxpZGF0aW9uIGFuZCBlYXJseSBleGl0cywgd2l0aG91dCBhbGxvY2F0aW5nIG5ldyBtZW1vcnksIGFsdGVyaW5nIGJ1ZmZlciBzaXplcy9ib3VuZGFyaWVzLCBsZWF2aW5nIGZpZWxkcyB1bmluaXRpYWxpemVkLCBvciBleHBvc2luZyBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLiBBbnkgYnVncyByZXN1bHRpbmcgZnJvbSBtYWxmb3JtZWQgY29ubmVjdGlvbiBzdGF0ZXMgb3IgZmxhZ3MgKHN1Y2ggYXMgcmVmY291bnQgaXNzdWVzIG9yIHVzZS1hZnRlci1mcmVlKSBmYWxsIHVuZGVyIHRoZSBwdXJ2aWV3IG9mIHN0YW5kYXJkIGRldGVjdG9ycyBsaWtlIEtBU0FOIGFuZCByZWZjb3VudCBjaGVja2luZy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3IgaW5mb3JtYXRpb24gbGVhaywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuCmBgYApgYGAKc2V0LXJlc3VsdHMKYGBgCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE4OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZmxhZyB2YWxpZGF0aW9uIChgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFnc2ApIGluIHRoZSBJUFZTIHN5bmNocm9uaXphdGlvbiBtZXNzYWdlIGhhbmRsaW5nIGZ1bmN0aW9ucyAoYGlwX3ZzX3Byb2Nlc3NfbWVzc2FnZV92MGAgYW5kIGBpcF92c19wcm9jX3N5bmNfY29ubmApIHRvIHJlamVjdCBpbnZhbGlkIGZsYWcgY29tYmluYXRpb25zIChlLmcuLCBgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVRgIG9yIGBJUF9WU19DT05OX0ZfTk9fQ1BPUlRgIGNvbWJpbmVkIHdpdGggYElQX1ZTX0NPTk5fRl9URU1QTEFURWApLiBUaGUgZmxhZ3MgdmFyaWFibGUgaXMgZGlyZWN0bHkgaW5pdGlhbGl6ZWQgZnJvbSByZWNlaXZlZCBuZXR3b3JrIHBhY2tldCBkYXRhIChgbnRvaHNgIC8gYG50b2hsYCksIGFuZCB0aGUgdmFsaWRhdGlvbiBsb2dpYyBvbmx5IGFkZHMgZWFybHkgcmVqZWN0aW9uIG9mIGludmFsaWQgc3luYyBtZXNzYWdlcy4gTm8gaGVhcC9zdGFjayBtZW1vcnkgYWxsb2NhdGlvbnMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQsIG5vIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb25zIG9yIGNvcHlpbmcgdG8gdXNlciBzcGFjZSBhcmUgYWx0ZXJlZCwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBwYWRkaW5nIGFyZSByZWFkIG9yIGV4cG9zZWQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHN0ZW1taW5nIGZyb20gaW5jb21wYXRpYmxlIGZsYWdzIChzdWNoIGFzIHN0YXRlIGluY29uc2lzdGVuY2llcywgcmVmY291bnQgZXJyb3JzLCBvciB1c2UtYWZ0ZXItZnJlZSkgYXJlIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgS0FTQU4vcmVmY291bnQgY2hlY2tzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmbGFnIHZhbGlkYXRpb24gKGBpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzYCkgaW4gdGhlIElQVlMgc3luY2hyb25pemF0aW9uIG1lc3NhZ2UgaGFuZGxpbmcgZnVuY3Rpb25zIChgaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwYCBhbmQgYGlwX3ZzX3Byb2Nfc3luY19jb25uYCkgdG8gcmVqZWN0IGludmFsaWQgZmxhZyBjb21iaW5hdGlvbnMgKGUuZy4sIGBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVGAgb3IgYElQX1ZTX0NPTk5fRl9OT19DUE9SVGAgY29tYmluZWQgd2l0aCBgSVBfVlNfQ09OTl9GX1RFTVBMQVRFYCkuIFRoZSBmbGFncyB2YXJpYWJsZSBpcyBkaXJlY3RseSBpbml0aWFsaXplZCBmcm9tIHJlY2VpdmVkIG5ldHdvcmsgcGFja2V0IGRhdGEgKGBudG9oc2AgLyBgbnRvaGxgKSwgYW5kIHRoZSB2YWxpZGF0aW9uIGxvZ2ljIG9ubHkgYWRkcyBlYXJseSByZWplY3Rpb24gb2YgaW52YWxpZCBzeW5jIG1lc3NhZ2VzLiBObyBoZWFwL3N0YWNrIG1lbW9yeSBhbGxvY2F0aW9ucyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZCwgbm8gYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMgb3IgY29weWluZyB0byB1c2VyIHNwYWNlIGFyZSBhbHRlcmVkLCBhbmQgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IHBhZGRpbmcgYXJlIHJlYWQgb3IgZXhwb3NlZC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSBpbmNvbXBhdGlibGUgZmxhZ3MgKHN1Y2ggYXMgc3RhdGUgaW5jb25zaXN0ZW5jaWVzLCByZWZjb3VudCBlcnJvcnMsIG9yIHVzZS1hZnRlci1mcmVlKSBhcmUgZGV0ZWN0YWJsZSBieSBzdGFuZGFyZCBLQVNBTi9yZWZjb3VudCBjaGVja3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjQ2OjM3LjQ0MDQwOTg4NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzAyMzI0Njg1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9WU1wiLFxuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfdnNfc3luY192YWxpZGF0ZV9mbGFnc1wiLFxuICAgIFwiaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwXCIsXG4gICAgXCJpcF92c19wcm9jX3N5bmNfY29ublwiLFxuICAgIFwiaXBfdnNfcHJvY2Vzc19tZXNzYWdlXCIsXG4gICAgXCJzeW5jX3RocmVhZF9iYWNrdXBcIixcbiAgICBcInN0YXJ0X3N5bmNfdGhyZWFkXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGZsYWcgdmFsaWRhdGlvbiAoYGlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3NgKSBpbiB0aGUgSVBWUyBzeW5jaHJvbml6YXRpb24gbWVzc2FnZSBoYW5kbGluZyBmdW5jdGlvbnMgKGBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjBgIGFuZCBgaXBfdnNfcHJvY19zeW5jX2Nvbm5gKSB0byByZWplY3QgaW52YWxpZCBmbGFnIGNvbWJpbmF0aW9ucyAoZS5nLiwgYElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUYCBvciBgSVBfVlNfQ09OTl9GX05PX0NQT1JUYCBjb21iaW5lZCB3aXRoIGBJUF9WU19DT05OX0ZfVEVNUExBVEVgKS4gVGhlIGZsYWdzIHZhcmlhYmxlIGlzIGRpcmVjdGx5IGluaXRpYWxpemVkIGZyb20gcmVjZWl2ZWQgbmV0d29yayBwYWNrZXQgZGF0YSAoYG50b2hzYCAvIGBudG9obGApLCBhbmQgdGhlIHZhbGlkYXRpb24gbG9naWMgb25seSBhZGRzIGVhcmx5IHJlamVjdGlvbiBvZiBpbnZhbGlkIHN5bmMgbWVzc2FnZXMuIE5vIGhlYXAvc3RhY2sgbWVtb3J5IGFsbG9jYXRpb25zIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLCBubyBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucyBvciBjb3B5aW5nIHRvIHVzZXIgc3BhY2UgYXJlIGFsdGVyZWQsIGFuZCBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgcGFkZGluZyBhcmUgcmVhZCBvciBleHBvc2VkLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBzdGVtbWluZyBmcm9tIGluY29tcGF0aWJsZSBmbGFncyAoc3VjaCBhcyBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMsIHJlZmNvdW50IGVycm9ycywgb3IgdXNlLWFmdGVyLWZyZWUpIGFyZSBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIEtBU0FOL3JlZmNvdW50IGNoZWNrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGZsYWcgdmFsaWRhdGlvbiAoaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncykgYW5kIHByb3BlciBtYXNraW5nIHdoZW4gcGFyc2luZyBpbmNvbWluZyBJUFZTIHN5bmMgbWVzc2FnZXMgaW4gdGhlIGJhY2t1cCBkYWVtb24sIHJlamVjdGluZyBpbmNvbXBhdGlibGUgZmxhZ3Mgc3VjaCBhcyBJUF9WU19DT05OX0ZfTk9fQ1BPUlQgd2l0aCBJUF9WU19DT05OX0ZfVEVNUExBVEUgb3IgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQgaW4gYm90aCB2MCBhbmQgdjEgbWVzc2FnZSBmb3JtYXRzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JrIHByb3RvY29sIHByb2Nlc3NpbmcgaW4gbmV0ZmlsdGVyL0lQVlMgYW5kIHdhcnJhbnRzIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjQ2OjM3LjQ0MDQxNTAyNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk2Nzk4NjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNmY3MjY5OTFlNmFmNjk3MTMxMWEwYTAwNjkyYjBhMWJiMWMyMzkzZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCAxMSAxODo0NjozNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY1xcbmluZGV4IDUzODNhZWFmYjBhZWQuLjY5ZGMyODE1M2VjMTIgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcXG5AQCAtOTQ5LDYgKzk0OSwyMSBAQCBzdGF0aWMgdm9pZCBpcF92c19wcm9jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uX3BhcmFtICpwYVxcbiBcXHRpcF92c19jb25uX3B1dChjcCk7XFxuIH1cXG4gXFxuKy8qIENoZWNrIGZvciBpbmNvbXBhdGlibGUgZmxhZ3MgKi9cXG4rc3RhdGljIGJvb2wgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyh1MzIgZmxhZ3MpXFxuK3tcXG4rXFx0LyogV2UgZG8gbm90IGV4cGVjdCBOT19DUE9SVCwgZXNwZWNpYWxseSB0byBhbGxvdyBsb29rdXBzXFxuK1xcdCAqIHRvIGhpdCB0ZW1wbGF0ZXNcXG4rXFx0ICovXFxuK1xcdGlmIChmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9OT19DUE9SVCkge1xcbitcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfVEVNUExBVEUpXFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbitcXHRpZiAoZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVClcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4gLypcXG4gICogIFByb2Nlc3MgcmVjZWl2ZWQgbXVsdGljYXN0IG1lc3NhZ2UgZm9yIFZlcnNpb24gMFxcbiAgKi9cXG5AQCAtOTcyLDggKzk4Nyw3IEBAIHN0YXRpYyB2b2lkIGlwX3ZzX3Byb2Nlc3NfbWVzc2FnZV92MChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgY29uc3QgY2hhciAqYnVmZmVyXFxuIFxcdFxcdFxcdHJldHVybjtcXG4gXFx0XFx0fVxcbiBcXHRcXHRzID0gKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAgKikgcDtcXG4tXFx0XFx0ZmxhZ3MgPSBudG9ocyhzLVxcdTAwM2VmbGFncykgfCBJUF9WU19DT05OX0ZfU1lOQztcXG4tXFx0XFx0ZmxhZ3MgXFx1MDAyNj0gfklQX1ZTX0NPTk5fRl9IQVNIRUQ7XFxuK1xcdFxcdGZsYWdzID0gbnRvaHMocy1cXHUwMDNlZmxhZ3MpO1xcbiBcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0spIHtcXG4gXFx0XFx0XFx0b3B0ID0gKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqKVxcdTAwMjZzWzFdO1xcbiBcXHRcXHRcXHRwICs9IEZVTExfQ09OTl9TSVpFO1xcbkBAIC05ODYsNiArMTAwMCwxMyBAQCBzdGF0aWMgdm9pZCBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGNvbnN0IGNoYXIgKmJ1ZmZlclxcbiBcXHRcXHRcXHRwICs9IFNJTVBMRV9DT05OX1NJWkU7XFxuIFxcdFxcdH1cXG4gXFxuK1xcdFxcdGlmICghaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyhmbGFncykpIHtcXG4rXFx0XFx0XFx0SVBfVlNfREJHKDIsIFxcXCJCQUNLVVAgdjAsIEludmFsaWQgZmxhZ3MgMHglWFxcXFxuXFxcIiwgZmxhZ3MpO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXHRcXHRmbGFncyBcXHUwMDI2PSBJUF9WU19DT05OX0ZfQkFDS1VQX01BU0s7XFxuK1xcdFxcdGZsYWdzIHw9IElQX1ZTX0NPTk5fRl9TWU5DO1xcbitcXG4gXFx0XFx0c3RhdGUgPSBudG9ocyhzLVxcdTAwM2VzdGF0ZSk7XFxuIFxcdFxcdGlmICghKGZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX1RFTVBMQVRFKSkge1xcbiBcXHRcXHRcXHRwcCA9IGlwX3ZzX3Byb3RvX2dldChzLVxcdTAwM2Vwcm90b2NvbCk7XFxuQEAgLTExNDEsNyArMTE2MiwxMyBAQCBzdGF0aWMgaW5saW5lIGludCBpcF92c19wcm9jX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgX191OCAqcCwgX191OCAqbVxcbiBcXHR9XFxuIFxcbiBcXHQvKiBHZXQgZmxhZ3MgYW5kIE1hc2sgb2ZmIHVuc3VwcG9ydGVkICovXFxuLVxcdGZsYWdzICA9IG50b2hsKHMtXFx1MDAzZXY0LmZsYWdzKSBcXHUwMDI2IElQX1ZTX0NPTk5fRl9CQUNLVVBfTUFTSztcXG4rXFx0ZmxhZ3MgPSBudG9obChzLVxcdTAwM2V2NC5mbGFncyk7XFxuK1xcdGlmICghaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyhmbGFncykpIHtcXG4rXFx0XFx0SVBfVlNfREJHKDMsIFxcXCJCQUNLVVAsIEludmFsaWQgZmxhZ3MgMHglWFxcXFxuXFxcIiwgZmxhZ3MpO1xcbitcXHRcXHRyZXRjID0gMjU7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcdGZsYWdzIFxcdTAwMjY9IElQX1ZTX0NPTk5fRl9CQUNLVVBfTUFTSztcXG4gXFx0ZmxhZ3MgfD0gSVBfVlNfQ09OTl9GX1NZTkM7XFxuIFxcdHN0YXRlID0gbnRvaHMocy1cXHUwMDNldjQuc3RhdGUpO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6NDY6MzcuOTM3ODc3ODY0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo4OTg1MzMxMDk0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9WU1wiLFxuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfdnNfc3luY192YWxpZGF0ZV9mbGFnc1wiLFxuICAgIFwiaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwXCIsXG4gICAgXCJpcF92c19wcm9jX3N5bmNfY29ublwiLFxuICAgIFwiaXBfdnNfcHJvY2Vzc19tZXNzYWdlXCIsXG4gICAgXCJzeW5jX3RocmVhZF9iYWNrdXBcIixcbiAgICBcInN0YXJ0X3N5bmNfdGhyZWFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmbGFnIHZhbGlkYXRpb24gKGlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3MpIGFuZCBwcm9wZXIgbWFza2luZyB3aGVuIHBhcnNpbmcgaW5jb21pbmcgSVBWUyBzeW5jIG1lc3NhZ2VzIGluIHRoZSBiYWNrdXAgZGFlbW9uLCByZWplY3RpbmcgaW5jb21wYXRpYmxlIGZsYWdzIHN1Y2ggYXMgSVBfVlNfQ09OTl9GX05PX0NQT1JUIHdpdGggSVBfVlNfQ09OTl9GX1RFTVBMQVRFIG9yIElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUIGluIGJvdGggdjAgYW5kIHYxIG1lc3NhZ2UgZm9ybWF0cy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0d29yayBwcm90b2NvbCBwcm9jZXNzaW5nIGluIG5ldGZpbHRlci9JUFZTIGFuZCB3YXJyYW50cyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZmNzI2OTkxZTZhZjY5NzEzMTFhMGEwMDY5MmIwYTFiYjFjMjM5M2RcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAxODo0NjozNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jXG5pbmRleCA1MzgzYWVhZmIwYWVkLi42OWRjMjgxNTNlYzEyIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY1xuQEAgLTk0OSw2ICs5NDksMjEgQEAgc3RhdGljIHZvaWQgaXBfdnNfcHJvY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubl9wYXJhbSAqcGFcbiBcdGlwX3ZzX2Nvbm5fcHV0KGNwKTtcbiB9XG4gXG4rLyogQ2hlY2sgZm9yIGluY29tcGF0aWJsZSBmbGFncyAqL1xuK3N0YXRpYyBib29sIGlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3ModTMyIGZsYWdzKVxuK3tcbitcdC8qIFdlIGRvIG5vdCBleHBlY3QgTk9fQ1BPUlQsIGVzcGVjaWFsbHkgdG8gYWxsb3cgbG9va3Vwc1xuK1x0ICogdG8gaGl0IHRlbXBsYXRlc1xuK1x0ICovXG4rXHRpZiAoZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9OT19DUE9SVCkge1xuK1x0XHRpZiAoZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9URU1QTEFURSlcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4rXHRpZiAoZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4gLypcbiAgKiAgUHJvY2VzcyByZWNlaXZlZCBtdWx0aWNhc3QgbWVzc2FnZSBmb3IgVmVyc2lvbiAwXG4gICovXG5AQCAtOTcyLDggKzk4Nyw3IEBAIHN0YXRpYyB2b2lkIGlwX3ZzX3Byb2Nlc3NfbWVzc2FnZV92MChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgY29uc3QgY2hhciAqYnVmZmVyXG4gXHRcdFx0cmV0dXJuO1xuIFx0XHR9XG4gXHRcdHMgPSAoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl92MCAqKSBwO1xuLVx0XHRmbGFncyA9IG50b2hzKHMtXHUwMDNlZmxhZ3MpIHwgSVBfVlNfQ09OTl9GX1NZTkM7XG4tXHRcdGZsYWdzIFx1MDAyNj0gfklQX1ZTX0NPTk5fRl9IQVNIRUQ7XG4rXHRcdGZsYWdzID0gbnRvaHMocy1cdTAwM2VmbGFncyk7XG4gXHRcdGlmIChmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX1NFUV9NQVNLKSB7XG4gXHRcdFx0b3B0ID0gKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqKVx1MDAyNnNbMV07XG4gXHRcdFx0cCArPSBGVUxMX0NPTk5fU0laRTtcbkBAIC05ODYsNiArMTAwMCwxMyBAQCBzdGF0aWMgdm9pZCBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGNvbnN0IGNoYXIgKmJ1ZmZlclxuIFx0XHRcdHAgKz0gU0lNUExFX0NPTk5fU0laRTtcbiBcdFx0fVxuIFxuK1x0XHRpZiAoIWlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3MoZmxhZ3MpKSB7XG4rXHRcdFx0SVBfVlNfREJHKDIsIFwiQkFDS1VQIHYwLCBJbnZhbGlkIGZsYWdzIDB4JVhcXG5cIiwgZmxhZ3MpO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXHRcdGZsYWdzIFx1MDAyNj0gSVBfVlNfQ09OTl9GX0JBQ0tVUF9NQVNLO1xuK1x0XHRmbGFncyB8PSBJUF9WU19DT05OX0ZfU1lOQztcbitcbiBcdFx0c3RhdGUgPSBudG9ocyhzLVx1MDAzZXN0YXRlKTtcbiBcdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9URU1QTEFURSkpIHtcbiBcdFx0XHRwcCA9IGlwX3ZzX3Byb3RvX2dldChzLVx1MDAzZXByb3RvY29sKTtcbkBAIC0xMTQxLDcgKzExNjIsMTMgQEAgc3RhdGljIGlubGluZSBpbnQgaXBfdnNfcHJvY19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIF9fdTggKnAsIF9fdTggKm1cbiBcdH1cbiBcbiBcdC8qIEdldCBmbGFncyBhbmQgTWFzayBvZmYgdW5zdXBwb3J0ZWQgKi9cbi1cdGZsYWdzICA9IG50b2hsKHMtXHUwMDNldjQuZmxhZ3MpIFx1MDAyNiBJUF9WU19DT05OX0ZfQkFDS1VQX01BU0s7XG4rXHRmbGFncyA9IG50b2hsKHMtXHUwMDNldjQuZmxhZ3MpO1xuK1x0aWYgKCFpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzKGZsYWdzKSkge1xuK1x0XHRJUF9WU19EQkcoMywgXCJCQUNLVVAsIEludmFsaWQgZmxhZ3MgMHglWFxcblwiLCBmbGFncyk7XG4rXHRcdHJldGMgPSAyNTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXHRmbGFncyBcdTAwMjY9IElQX1ZTX0NPTk5fRl9CQUNLVVBfTUFTSztcbiBcdGZsYWdzIHw9IElQX1ZTX0NPTk5fRl9TWU5DO1xuIFx0c3RhdGUgPSBudG9ocyhzLVx1MDAzZXY0LnN0YXRlKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjQ2OjM3LjkzNzg4MDQwNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU5NjEyNzM2MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJUFZTIFN5bmNocm9uaXphdGlvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQgdGhpcyBwYXRjaCBpcyBhY3R1YWxseSBjaGFuZ2luZyBhbmQgdGhlIGNvbnRleHQuIEZyb20gdGhlIGRlc2NyaXB0aW9uLCBpdCBzZWVtcyB3ZSdyZSBsb29raW5nIGF0IGEgbW9kaWZpY2F0aW9uIHRvIGBuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jYC4gU28sIHRoYXQncyB3aGVyZSB0aGUgY29yZSBvZiB0aGUgc3luY2hyb25pemF0aW9uIGxvZ2ljIHJlc2lkZXMuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY2hhbmdlcyBpbXBhY3QgdGhlIGV4aXN0aW5nIHN5bmNocm9uaXphdGlvbiBwcm9jZXNzLlxuXG5UaGUgbGlzdGVkIGZ1bmN0aW9ucyBhcmUgdGhlIGtleSBoZXJlOiBgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFnc2AsIHdoaWNoIGFwcGVhcnMgdG8gYmUgYSBuZXcgaGVscGVyLCBgaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwYCwgYW5kIGBpcF92c19wcm9jX3N5bmNfY29ubmAuIEl0IGxvb2tzIGxpa2Ugd2UndmUgZ290IGEgbmV3IHZhbGlkYXRpb24gc3RlcCwgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIGZsYWdzIGJlaW5nIHN5bmNocm9uaXplZCwgYW5kIHRoZW4gaGFuZGxpbmcgdGhlIG1lc3NhZ2VzIHRoZW1zZWx2ZXMsIGFuZCBmaW5hbGx5IHRoZSBhY3R1YWwgc3luY2hyb25pemF0aW9uLlxuXG5JJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIGRlZXAgZGl2ZSBpbnRvIGBuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jYCB1c2luZyBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAg4oCTIHdoYXRldmVyJ3MgcXVpY2tlc3Qg4oCTIHRvIGdldCBhIGZlZWwgZm9yIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgYXJvdW5kIHRoZXNlIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHNlZSAqaG93KiB0aGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCwgdGhlIGRhdGEgc3RydWN0dXJlcyB0aGV5IGludGVyYWN0IHdpdGgsIGFuZCB3aGF0IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgZXhpc3QuXG5cbkZpbmFsbHksIEknbGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGUgSVBWUyBzeW5jaHJvbml6YXRpb24gZGFlbW9uIGl0c2VsZi4gSSdtIGFzc3VtaW5nIGNoYW5nZXMgaGVyZSBtaWdodCByZWxhdGUgdG8gZmVhdHVyZXMgb3IgZGVwZW5kZW5jaWVzLiBJdOKAmXMgYWxzbyBwb3NzaWJsZSB0aGUgbmV3IGhlbHBlciBoYXMgaW50cm9kdWNlZCBzb21lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIEkgd2lsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIG5ld2x5IGNvbmZpZ3VyYWJsZS4gVGhpcyB3aWxsIGVuc3VyZSBJIHVuZGVyc3RhbmQgaG93IHRoaXMgcGF0Y2ggZml0cyBpbnRvIHRoZSBvdmVyYWxsIElQVlMgbGFuZHNjYXBlIGFuZCBhbnkgY29uZmlndXJhdGlvbiBjaGFuZ2VzLiBUaGlzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgaXQncyBwcm9wZXJseSBoYW5kbGVkIGluIGFueSBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTk3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6NDY6NDMuODk5MTU2NTc5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MjA5NTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3ZzX3N5bmNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZT0xNj1pcF92cy1vYmpzIDo9XFx0aXBfdnNfY29ubi5vIGlwX3ZzX2NvcmUubyBpcF92c19jdGwubyBpcF92c19zY2hlZC5vXFx0ICAgXFxcXFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZToxNzpcXHRcXHRpcF92c194bWl0Lm8gaXBfdnNfYXBwLm8gaXBfdnNfc3luYy5vXFx0ICAgXFx0XFx0ICAgXFxcXFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZS0xOC1cXHRcXHRpcF92c19lc3QubyBpcF92c19wcm90by5vIGlwX3ZzX3BlLm9cXHRcXHRcXHQgICBcXFxcXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTEzNDc9c3RhdGljIHZvaWQgaXBfdnNfY29ubl9leHBpcmUoc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTE0MTYtXFx0aWYgKGlwdnMtXFx1MDAzZXN5bmNfc3RhdGUgXFx1MDAyNiBJUF9WU19TVEFURV9NQVNURVIpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxNDE3OlxcdFxcdGlwX3ZzX3N5bmNfY29ubihpcHZzLCBjcCwgc3lzY3RsX3N5bmNfdGhyZXNob2xkKGlwdnMpKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTE0MTgtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTIwOTY9aXBfdnNfaW5faG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIyNjYtXFx0ICpcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIyNjc6XFx0ICogRm9yIE9ORV9QS1QgbGV0IGlwX3ZzX3N5bmNfY29ubigpIGRvIHRoZSBmaWx0ZXIgd29yay5cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIyNjgtXFx0ICovXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIyNzUtXFx0aWYgKGlwdnMtXFx1MDAzZXN5bmNfc3RhdGUgXFx1MDAyNiBJUF9WU19TVEFURV9NQVNURVIpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMjc2OlxcdFxcdGlwX3ZzX3N5bmNfY29ubihpcHZzLCBjcCwgcGt0cyk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMjc3LVxcdGVsc2UgaWYgKChjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVCkgXFx1MDAyNlxcdTAwMjYgY3AtXFx1MDAzZWNvbnRyb2wpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMjc4OlxcdFxcdC8qIGluY3JlbWVudCBpcyBkb25lIGluc2lkZSBpcF92c19zeW5jX2Nvbm4gdG9vICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMjc5LVxcdFxcdGF0b21pY19pbmMoXFx1MDAyNmNwLVxcdTAwM2Vjb250cm9sLVxcdTAwM2Vpbl9wa3RzKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MjQ4MD1zdGF0aWMgaW50IF9fbmV0X2luaXQgX19pcF92c19pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjUxMC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjI1MTE6XFx0aWYgKGlwX3ZzX3N5bmNfbmV0X2luaXQoaXB2cykgXFx1MDAzYyAwKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjUxMi1cXHRcXHRnb3RvIHN5bmNfZmFpbDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MjU1Mj1zdGF0aWMgdm9pZCBfX25ldF9leGl0IF9faXBfdnNfZGV2X2NsZWFudXBfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqbmV0X2xpc3QpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTI1NjItXFx0XFx0c21wX3dtYigpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MjU2MzpcXHRcXHRpcF92c19zeW5jX25ldF9jbGVhbnVwKGlwdnMpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjU2NC1cXHR9XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEzLSAqICAgICAgICAgICAgICB0aW1lLW91dHMsIGFuZCBmaXJld2FsbCBtYXJrcy5cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE0OiAqICAgICAgICAgICAgICBJbiB2ZXIuMSBcXFwiaXBfdnNfc3luY19jb25uX29wdGlvbnNcXFwiIHdpbGwgYmUgc2VudCBpbiBuZXR3LiBvcmRlci5cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE1LSAqICAgICAgICAgICAgICBWZXIuIDAgY2FuIGJlIHR1cm5lZCBvbiBieSBzeXNjdGwgLXcgbmV0LmlwdjQudnMuc3luY192ZXJzaW9uPTBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjItICpcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjIzOiAqIGlwX3ZzX3N5bmM6ICBzeW5jIGNvbm5lY3Rpb24gaW5mbyBmcm9tIG1hc3RlciBsb2FkIGJhbGFuY2VyIHRvIGJhY2t1cHNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTI0LSAqICAgICAgICAgICAgICB0aHJvdWdoIG11bHRpY2FzdFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz02NT1zdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IF9faXB2c19zeW5jX2tleTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjktICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo3MDpzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTcxLVxcdF9fdThcXHRcXHRcXHRyZXNlcnZlZDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtODgtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo4OTpzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtOTAtXFx0c3RydWN0IGlwX3ZzX3NlcSAgICAgICAgaW5fc2VxOyAgICAgICAgIC8qIGluY29taW5nIHNlcS4gc3RydWN0ICovXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEzMS0gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEzMjpzdHJ1Y3QgaXBfdnNfc3luY192NCB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMzMtXFx0X191OFxcdFxcdFxcdHR5cGU7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE1My0gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE1NDpzdHJ1Y3QgaXBfdnNfc3luY192NiB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNTUtXFx0X191OFxcdFxcdFxcdHR5cGU7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE3My1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE3NDp1bmlvbiBpcF92c19zeW5jX2Nvbm4ge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTc1OlxcdHN0cnVjdCBpcF92c19zeW5jX3Y0XFx0djQ7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNzY6XFx0c3RydWN0IGlwX3ZzX3N5bmNfdjZcXHR2NjtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE3Ny19O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xOTUtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxOTY6c3RydWN0IGlwX3ZzX3N5bmNfdGhyZWFkX2RhdGEge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTk3LVxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjA0LS8qIFZlcnNpb24gMCBkZWZpbml0aW9uIG9mIHBhY2tldCBzaXplcyAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MjA1OiNkZWZpbmUgU0lNUExFX0NPTk5fU0laRSAgKHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwKSlcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTIwNi0jZGVmaW5lIEZVTExfQ09OTl9TSVpFICBcXFxcXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoyMDc6KHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwKSArIHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMpKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjA4LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yNDQtLyogVmVyc2lvbiAwIGhlYWRlciAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MjQ1OnN0cnVjdCBpcF92c19zeW5jX21lc2dfdjAge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjQ2LVxcdF9fdTggICAgICAgICAgICAgICAgICAgIG5yX2Nvbm5zO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yNDktXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoyNTA6XFx0LyogaXBfdnNfc3luY19jb25uIGVudHJpZXMgc3RhcnQgaGVyZSAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjUxLX07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTI1My0vKiBWZXJzaW9uIDEgaGVhZGVyICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoyNTQ6c3RydWN0IGlwX3ZzX3N5bmNfbWVzZyB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yNTUtXFx0X191OFxcdFxcdFxcdHJlc2VydmVkO1xcdC8qIG11c3QgYmUgemVybyAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yNjAtXFx0X191MTZcXHRcXHRcXHRzcGFyZTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjI2MTpcXHQvKiBpcF92c19zeW5jX2Nvbm4gZW50cmllcyBzdGFydCBoZXJlICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yNjItfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MjY0PXVuaW9uIGlwdnNfc29ja2FkZHIge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yNjgtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoyNjk6c3RydWN0IGlwX3ZzX3N5bmNfYnVmZiB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yNzAtXFx0c3RydWN0IGxpc3RfaGVhZCAgICAgICAgbGlzdDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjczLVxcdC8qIHBvaW50ZXJzIGZvciB0aGUgbWVzc2FnZSBkYXRhICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoyNzQ6XFx0c3RydWN0IGlwX3ZzX3N5bmNfbWVzZyAgKm1lc2c7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yNzUtXFx0dW5zaWduZWQgY2hhciAgICAgICAgICAgKmhlYWQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTI5NT1zdGF0aWMgdm9pZCBodG9uX3NlcShzdHJ1Y3QgaXBfdnNfc2VxICpobywgc3RydWN0IGlwX3ZzX3NlcSAqbm8pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTMwMS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjMwMjpzdGF0aWMgaW5saW5lIHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMzAzLXNiX2RlcXVldWUoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcHZzX21hc3Rlcl9zeW5jX3N0YXRlICptcylcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTMwNC17XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzozMDU6XFx0c3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqc2I7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0zMDYtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTMxMS1cXHR9IGVsc2Uge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MzEyOlxcdFxcdHNiID0gbGlzdF9lbnRyeShtcy1cXHUwMDNlc3luY19xdWV1ZS5uZXh0LCBzdHJ1Y3QgaXBfdnNfc3luY19idWZmLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMzEzLVxcdFxcdFxcdFxcdGxpc3QpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0zMjYtICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzozMjc6c3RhdGljIGlubGluZSBzdHJ1Y3QgaXBfdnNfc3luY19idWZmICpcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjMyODppcF92c19zeW5jX2J1ZmZfY3JlYXRlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCB1bnNpZ25lZCBpbnQgbGVuKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMzI5LXtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjMzMDpcXHRzdHJ1Y3QgaXBfdnNfc3luY19idWZmICpzYjtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTMzMS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjMzMjpcXHRpZiAoIShzYj1rbWFsbG9jX29iaihzdHJ1Y3QgaXBfdnNfc3luY19idWZmLCBHRlBfQVRPTUlDKSkpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0zMzMtXFx0XFx0cmV0dXJuIE5VTEw7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0zMzQtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzozMzU6XFx0bGVuID0gbWF4X3QodW5zaWduZWQgaW50LCBsZW4gKyBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfbWVzZyksXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0zMzYtXFx0XFx0ICAgIGlwdnMtXFx1MDAzZW1jZmcuc3luY19tYXhsZW4pO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0zNDQtXFx0c2ItXFx1MDAzZW1lc2ctXFx1MDAzZXN5bmNpZCA9IGlwdnMtXFx1MDAzZW1jZmcuc3luY2lkO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MzQ1OlxcdHNiLVxcdTAwM2VtZXNnLVxcdTAwM2VzaXplID0gaHRvbnMoc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX21lc2cpKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTM0Ni1cXHRzYi1cXHUwMDNlbWVzZy1cXHUwMDNlbnJfY29ubnMgPSAwO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMzQ3LVxcdHNiLVxcdTAwM2VtZXNnLVxcdTAwM2VzcGFyZSA9IDA7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzozNDg6XFx0c2ItXFx1MDAzZWhlYWQgPSAodW5zaWduZWQgY2hhciAqKXNiLVxcdTAwM2VtZXNnICsgc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX21lc2cpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMzQ5LVxcdHNiLVxcdTAwM2VlbmQgPSAodW5zaWduZWQgY2hhciAqKXNiLVxcdTAwM2VtZXNnICsgbGVuO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0zNTQtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzozNTU6c3RhdGljIGlubGluZSB2b2lkIGlwX3ZzX3N5bmNfYnVmZl9yZWxlYXNlKHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKnNiKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMzU2LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MzYxPXN0YXRpYyBpbmxpbmUgdm9pZCBzYl9xdWV1ZV90YWlsKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0zNjMte1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MzY0OlxcdHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKnNiID0gbXMtXFx1MDAzZXN5bmNfYnVmZjtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTM2NS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMzc5LVxcdH0gZWxzZVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MzgwOlxcdFxcdGlwX3ZzX3N5bmNfYnVmZl9yZWxlYXNlKHNiKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTM4MS1cXHRzcGluX3VubG9jayhcXHUwMDI2aXB2cy1cXHUwMDNlc3luY19sb2NrKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMzg3LSAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6Mzg4OnN0YXRpYyBpbmxpbmUgc3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0zODktZ2V0X2N1cnJfc3luY19idWZmKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXB2c19tYXN0ZXJfc3luY19zdGF0ZSAqbXMsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTM5MS17XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzozOTI6XFx0c3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqc2I7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0zOTMtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTQwNj1zZWxlY3RfbWFzdGVyX3RocmVhZF9pZChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy00MTMtICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo0MTQ6c3RhdGljIGlubGluZSBzdHJ1Y3QgaXBfdnNfc3luY19idWZmICpcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjQxNTppcF92c19zeW5jX2J1ZmZfY3JlYXRlX3YwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCB1bnNpZ25lZCBpbnQgbGVuKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNDE2LXtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjQxNzpcXHRzdHJ1Y3QgaXBfdnNfc3luY19idWZmICpzYjtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjQxODpcXHRzdHJ1Y3QgaXBfdnNfc3luY19tZXNnX3YwICptZXNnO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNDE5LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NDIwOlxcdGlmICghKHNiPWttYWxsb2Nfb2JqKHN0cnVjdCBpcF92c19zeW5jX2J1ZmYsIEdGUF9BVE9NSUMpKSlcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTQyMS1cXHRcXHRyZXR1cm4gTlVMTDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTQyMi1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjQyMzpcXHRsZW4gPSBtYXhfdCh1bnNpZ25lZCBpbnQsIGxlbiArIHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19tZXNnX3YwKSxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTQyNC1cXHRcXHQgICAgaXB2cy1cXHUwMDNlbWNmZy5zeW5jX21heGxlbik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTQyOS1cXHR9XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo0MzA6XFx0bWVzZyA9IChzdHJ1Y3QgaXBfdnNfc3luY19tZXNnX3YwICopc2ItXFx1MDAzZW1lc2c7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy00MzEtXFx0bWVzZy1cXHUwMDNlbnJfY29ubnMgPSAwO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNDMyLVxcdG1lc2ctXFx1MDAzZXN5bmNpZCA9IGlwdnMtXFx1MDAzZW1jZmcuc3luY2lkO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NDMzOlxcdG1lc2ctXFx1MDAzZXNpemUgPSBodG9ucyhzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCkpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NDM0OlxcdHNiLVxcdTAwM2VoZWFkID0gKHVuc2lnbmVkIGNoYXIgKiltZXNnICsgc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjApO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNDM1LVxcdHNiLVxcdTAwM2VlbmQgPSAodW5zaWduZWQgY2hhciAqKW1lc2cgKyBsZW47XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTQ0MT1zdGF0aWMgaW5saW5lIGJvb2wgaW5fcGVyc2lzdGVuY2Uoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy00NTgtICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo0NTk6c3RhdGljIGludCBpcF92c19zeW5jX2Nvbm5fbmVlZGVkKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNDYwLVxcdFxcdFxcdFxcdCAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgcGt0cylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTM4LSAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NTM5OnN0YXRpYyB2b2lkIGlwX3ZzX3N5bmNfY29ubl92MChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTQwLVxcdFxcdFxcdCAgICAgICBpbnQgcGt0cylcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU0MS17XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo1NDI6XFx0c3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCAqbTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjU0MzpcXHRzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwICpzO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NTQ0OlxcdHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKmJ1ZmY7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01NDUtXFx0c3RydWN0IGlwdnNfbWFzdGVyX3N5bmNfc3RhdGUgKm1zO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01NTQtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo1NTU6XFx0aWYgKCFpcF92c19zeW5jX2Nvbm5fbmVlZGVkKGlwdnMsIGNwLCBwa3RzKSlcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU1Ni1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU2OS1cXHRpZiAoYnVmZikge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NTcwOlxcdFxcdG0gPSAoc3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCAqKSBidWZmLVxcdTAwM2VtZXNnO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTcxLVxcdFxcdC8qIFNlbmQgYnVmZmVyIGlmIGl0IGlzIGZvciB2MSAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01NzgtXFx0aWYgKCFidWZmKSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo1Nzk6XFx0XFx0YnVmZiA9IGlwX3ZzX3N5bmNfYnVmZl9jcmVhdGVfdjAoaXB2cywgbGVuKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU4MC1cXHRcXHRpZiAoIWJ1ZmYpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU4MS1cXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aXB2cy1cXHUwMDNlc3luY19idWZmX2xvY2spO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NTgyOlxcdFxcdFxcdHByX2VycihcXFwiaXBfdnNfc3luY19idWZmX2NyZWF0ZSBmYWlsZWQuXFxcXG5cXFwiKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU4My1cXHRcXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU4Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjU4ODpcXHRtID0gKHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjAgKikgYnVmZi1cXHUwMDNlbWVzZztcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjU4OTpcXHRzID0gKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAgKikgYnVmZi1cXHUwMDNlaGVhZDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU5MC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjAyLVxcdGlmIChjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0spIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjYwMzpcXHRcXHRzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKm9wdCA9XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo2MDQ6XFx0XFx0XFx0KHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqKVxcdTAwMjZzWzFdO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjA1LVxcdFxcdG1lbWNweShvcHQsIFxcdTAwMjZjcC1cXHUwMDNlc3luY19jb25uX29wdCwgc2l6ZW9mKCpvcHQpKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjE5LVxcdFxcdFxcdHBrdHMgPSBzeXNjdGxfc3luY190aHJlc2hvbGQoaXB2cyk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo2MjA6XFx0XFx0aXBfdnNfc3luY19jb25uKGlwdnMsIGNwLCBwa3RzKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTYyMS1cXHR9XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTYyOC0gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjYyOTp2b2lkIGlwX3ZzX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgcGt0cylcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTYzMC17XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo2MzE6XFx0c3RydWN0IGlwX3ZzX3N5bmNfbWVzZyAqbTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjYzMjpcXHR1bmlvbiBpcF92c19zeW5jX2Nvbm4gKnM7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo2MzM6XFx0c3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqYnVmZjtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTYzNC1cXHRzdHJ1Y3QgaXB2c19tYXN0ZXJfc3luY19zdGF0ZSAqbXM7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY0MC1cXHRpZiAoc3lzY3RsX3N5bmNfdmVyKGlwdnMpID09IDApIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjY0MTpcXHRcXHRpcF92c19zeW5jX2Nvbm5fdjAoaXB2cywgY3AsIHBrdHMpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjQyLVxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjQ3LXNsb29wOlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NjQ4OlxcdGlmICghaXBfdnNfc3luY19jb25uX25lZWRlZChpcHZzLCBjcCwgcGt0cykpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02NDktXFx0XFx0Z290byBjb250cm9sO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02NzEtXFx0aWYgKGNwLVxcdTAwM2VhZiA9PSBBRl9JTkVUNilcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjY3MjpcXHRcXHRsZW4gPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfdjYpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjczLVxcdGVsc2VcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY3NC0jZW5kaWZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjY3NTpcXHRcXHRsZW4gPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfdjQpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjc2LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjc3LVxcdGlmIChjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0spXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo2Nzg6XFx0XFx0bGVuICs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMpICsgMjtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY3OS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzAwLVxcdGlmICghYnVmZikge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NzAxOlxcdFxcdGJ1ZmYgPSBpcF92c19zeW5jX2J1ZmZfY3JlYXRlKGlwdnMsIGxlbik7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03MDItXFx0XFx0aWYgKCFidWZmKSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03MDMtXFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmlwdnMtXFx1MDAzZXN5bmNfYnVmZl9sb2NrKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjcwNDpcXHRcXHRcXHRwcl9lcnIoXFxcImlwX3ZzX3N5bmNfYnVmZl9jcmVhdGUgZmFpbGVkLlxcXFxuXFxcIik7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03MDUtXFx0XFx0XFx0cmV0dXJuO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03MTctXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo3MTg6XFx0cyA9ICh1bmlvbiBpcF92c19zeW5jX2Nvbm4gKilwO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzE5LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03MzQtXFx0aWYgKGNwLVxcdTAwM2VhZiA9PSBBRl9JTkVUNikge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NzM1OlxcdFxcdHAgKz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX3Y2KTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTczNi1cXHRcXHRzLVxcdTAwM2V2Ni5jYWRkciA9IGNwLVxcdTAwM2VjYWRkci5pbjY7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTc0MS1cXHR7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo3NDI6XFx0XFx0cCArPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfdjQpO1xcdC8qIG9wdGlvbnMgcHRyICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03NDMtXFx0XFx0cy1cXHUwMDNldjQuY2FkZHIgPSBjcC1cXHUwMDNlY2FkZHIuaXA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTc0OC1cXHRcXHQqKHArKykgPSBJUFZTX09QVF9TRVFfREFUQTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjc0OTpcXHRcXHQqKHArKykgPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTc1MC1cXHRcXHRodG9uX3NlcShcXHUwMDI2Y3AtXFx1MDAzZWluX3NlcSwgKHN0cnVjdCBpcF92c19zZXEgKilwKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9Nzg3PXN0YXRpYyBpbmxpbmUgaW50XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo3ODg6aXBfdnNfY29ubl9maWxsX3BhcmFtX3N5bmMoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwgdW5pb24gaXBfdnNfc3luY19jb25uICpzYyxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTc4OS1cXHRcXHRcXHQgICBzdHJ1Y3QgaXBfdnNfY29ubl9wYXJhbSAqcCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9ODQxPXN0YXRpYyB2b2lkIGlwX3ZzX3Byb2NfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm5fcGFyYW0gKnBhcmFtLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy04NDUtXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dCwgX191MzIgZndtYXJrLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6ODQ2OlxcdFxcdFxcdCAgICBzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKm9wdClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTg0Ny17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTk1Mi0vKiBDaGVjayBmb3IgaW5jb21wYXRpYmxlIGZsYWdzICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo5NTM6c3RhdGljIGJvb2wgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyh1MzIgZmxhZ3MpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05NTQte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz05NzA9c3RhdGljIHZvaWQgaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBjb25zdCBjaGFyICpidWZmZXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTk3Mi17XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo5NzM6XFx0c3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCAqbSA9IChzdHJ1Y3QgaXBfdnNfc3luY19tZXNnX3YwICopYnVmZmVyO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6OTc0OlxcdHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAgKnM7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo5NzU6XFx0c3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICpvcHQ7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05NzYtXFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtOTgwLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6OTgxOlxcdHAgPSAoY2hhciAqKWJ1ZmZlciArIHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19tZXNnX3YwKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTk4Mi1cXHRmb3IgKGk9MDsgaVxcdTAwM2NtLVxcdTAwM2Vucl9jb25uczsgaSsrKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTk4OC1cXHRcXHR9XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo5ODk6XFx0XFx0cyA9IChzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwICopIHA7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05OTAtXFx0XFx0ZmxhZ3MgPSBudG9ocyhzLVxcdTAwM2VmbGFncyk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05OTEtXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX1NFUV9NQVNLKSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo5OTI6XFx0XFx0XFx0b3B0ID0gKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqKVxcdTAwMjZzWzFdO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtOTkzLVxcdFxcdFxcdHAgKz0gRlVMTF9DT05OX1NJWkU7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEwMDItXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMDAzOlxcdFxcdGlmICghaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyhmbGFncykpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEwMDQtXFx0XFx0XFx0SVBfVlNfREJHKDIsIFxcXCJCQUNLVVAgdjAsIEludmFsaWQgZmxhZ3MgMHglWFxcXFxuXFxcIiwgZmxhZ3MpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xMDQ1PXN0YXRpYyBpbmxpbmUgaW50IGlwX3ZzX3Byb2Nfc2Vxb3B0KF9fdTggKnAsIHVuc2lnbmVkIGludCBwbGVuLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTA0Ni1cXHRcXHRcXHRcXHQgICAgX191MzIgKm9wdF9mbGFncyxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEwNDc6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqb3B0KVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTA0OC17XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMDQ5OlxcdHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqdG9wdDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEwNTAtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMDUxOlxcdHRvcHQgPSAoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICopcDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEwNTItXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMDUzOlxcdGlmIChwbGVuICE9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMpKSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMDU0LVxcdFxcdElQX1ZTX0RCRygyLCBcXFwiQkFDS1VQLCBib2d1cyBjb25uIG9wdGlvbnMgbGVuZ3RoXFxcXG5cXFwiKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTA4Nz1zdGF0aWMgaW5saW5lIGludCBpcF92c19wcm9jX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgX191OCAqcCwgX191OCAqbXNnX2VuZClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEwODgte1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTA4OTpcXHRzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgb3B0O1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTA5MDpcXHR1bmlvbiAgaXBfdnNfc3luY19jb25uICpzO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTA5MS1cXHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMDk4LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTA5OTpcXHRzID0gKHVuaW9uIGlwX3ZzX3N5bmNfY29ubiAqKSBwO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTEwMC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTEwMy1cXHRcXHRhZiA9IEFGX0lORVQ2O1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTEwNDpcXHRcXHRwICs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY192Nik7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMTA1LSNlbHNlXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTExMTEtXFx0XFx0YWYgPSBBRl9JTkVUO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTExMjpcXHRcXHRwICs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY192NCk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMTEzLVxcdH0gZWxzZSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTExNjUtXFx0ZmxhZ3MgPSBudG9obChzLVxcdTAwM2V2NC5mbGFncyk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMTY2OlxcdGlmICghaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyhmbGFncykpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTExNjctXFx0XFx0SVBfVlNfREJHKDMsIFxcXCJCQUNLVVAsIEludmFsaWQgZmxhZ3MgMHglWFxcXFxuXFxcIiwgZmxhZ3MpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xMjI3PXN0YXRpYyB2b2lkIGlwX3ZzX3Byb2Nlc3NfbWVzc2FnZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgX191OCAqYnVmZmVyLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMjI5LXtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEyMzA6XFx0c3RydWN0IGlwX3ZzX3N5bmNfbWVzZyAqbTIgPSAoc3RydWN0IGlwX3ZzX3N5bmNfbWVzZyAqKWJ1ZmZlcjtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEyMzEtXFx0X191OCAqcCwgKm1zZ19lbmQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEyMzMtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMjM0OlxcdGlmIChidWZsZW4gXFx1MDAzYyBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCkpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEyMzUtXFx0XFx0SVBfVlNfREJHKDIsIFxcXCJCQUNLVVAsIG1lc3NhZ2UgaGVhZGVyIHRvbyBzaG9ydFxcXFxuXFxcIik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEyNTEtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMjUyOlxcdFxcdG1zZ19lbmQgPSBidWZmZXIgKyBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfbWVzZyk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMjUzLVxcdFxcdG5yX2Nvbm5zID0gbTItXFx1MDAzZW5yX2Nvbm5zO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMjU1LVxcdFxcdGZvciAoaT0wOyBpXFx1MDAzY25yX2Nvbm5zOyBpKyspIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEyNTY6XFx0XFx0XFx0dW5pb24gaXBfdnNfc3luY19jb25uICpzO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTI1Ny1cXHRcXHRcXHR1bnNpZ25lZCBpbnQgc2l6ZTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTI2NC1cXHRcXHRcXHR9XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMjY1OlxcdFxcdFxcdHMgPSAodW5pb24gaXBfdnNfc3luY19jb25uICopcDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEyNjYtXFx0XFx0XFx0c2l6ZSA9IG50b2hzKHMtXFx1MDAzZXY0LnZlcl9zaXplKSBcXHUwMDI2IFNWRVJfTUFTSztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTYxMD1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNjExOmlwX3ZzX3NlbmRfc3luY19tc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IGlwX3ZzX3N5bmNfbWVzZyAqbXNnKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTYxMi17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTE2NDI9c3RhdGljIHZvaWQgbWFzdGVyX3dha2V1cF93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNjYwLS8qIEdldCBuZXh0IGJ1ZmZlciB0byBzZW5kICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNjYxOnN0YXRpYyBpbmxpbmUgc3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNjYyLW5leHRfc3luY19idWZmKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXB2c19tYXN0ZXJfc3luY19zdGF0ZSAqbXMpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNjYzLXtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE2NjQ6XFx0c3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqc2I7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNjY1LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xNjczPXN0YXRpYyBpbnQgc3luY190aHJlYWRfbWFzdGVyKHZvaWQgKmRhdGEpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNjc0LXtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE2NzU6XFx0c3RydWN0IGlwX3ZzX3N5bmNfdGhyZWFkX2RhdGEgKnRpbmZvID0gZGF0YTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE2NzYtXFx0c3RydWN0IG5ldG5zX2lwdnMgKmlwdnMgPSB0aW5mby1cXHUwMDNlaXB2cztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTY3OC1cXHRzdHJ1Y3Qgc29jayAqc2sgPSB0aW5mby1cXHUwMDNlc29jay1cXHUwMDNlc2s7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNjc5OlxcdHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKnNiO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTY4MC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTcwMi1cXHRcXHR9XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNzAzOlxcdFxcdGlwX3ZzX3N5bmNfYnVmZl9yZWxlYXNlKHNiKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE3MDQtXFx0fVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNzA4LVxcdGlmIChzYilcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE3MDk6XFx0XFx0aXBfdnNfc3luY19idWZmX3JlbGVhc2Uoc2IpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTcxMC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTcxMi1cXHR3aGlsZSAoKHNiID0gc2JfZGVxdWV1ZShpcHZzLCBtcykpKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTcxMzpcXHRcXHRpcF92c19zeW5jX2J1ZmZfcmVsZWFzZShzYik7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNzE0LVxcdF9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTcxOC1cXHRpZiAoc2IpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNzE5OlxcdFxcdGlwX3ZzX3N5bmNfYnVmZl9yZWxlYXNlKHNiKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE3MjAtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTE3MjU9c3RhdGljIGludCBzeW5jX3RocmVhZF9iYWNrdXAodm9pZCAqZGF0YSlcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE3MjYte1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTcyNzpcXHRzdHJ1Y3QgaXBfdnNfc3luY190aHJlYWRfZGF0YSAqdGluZm8gPSBkYXRhO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTcyOC1cXHRzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyA9IHRpbmZvLVxcdTAwM2VpcHZzO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xNzYyPWludCBzdGFydF9zeW5jX3RocmVhZChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwdnNfc3luY19kYWVtb25fY2ZnICpjLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNzY0LXtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE3NjU6XFx0c3RydWN0IGlwX3ZzX3N5bmNfdGhyZWFkX2RhdGEgKnRpID0gTlVMTCwgKnRpbmZvO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTc2Ni1cXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE3NzQtXFx0SVBfVlNfREJHKDcsIFxcXCIlcygpOiBwaWQgJWRcXFxcblxcXCIsIF9fZnVuY19fLCB0YXNrX3BpZF9ucihjdXJyZW50KSk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNzc1OlxcdElQX1ZTX0RCRyg3LCBcXFwiRWFjaCBpcF92c19zeW5jX2Nvbm4gZW50cnkgbmVlZHMgJXpkIGJ5dGVzXFxcXG5cXFwiLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTc3NjpcXHRcXHQgIHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwKSk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNzc3LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xODg5LVxcdHJlc3VsdCA9IC1FTk9NRU07XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxODkwOlxcdHRpID0ga3phbGxvY19vYmpzKHN0cnVjdCBpcF92c19zeW5jX3RocmVhZF9kYXRhLCBjb3VudCk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xODkxLVxcdGlmICghdGkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTE5Nzg9aW50IHN0b3Bfc3luY190aHJlYWQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBzdGF0ZSlcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE5Nzkte1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTk4MDpcXHRzdHJ1Y3QgaXBfdnNfc3luY190aHJlYWRfZGF0YSAqdGksICp0aW5mbztcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE5ODEtXFx0aW50IGlkO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yMDY1LSAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MjA2NjppbnQgX19uZXRfaW5pdCBpcF92c19zeW5jX25ldF9pbml0KHN0cnVjdCBuZXRuc19pcHZzICppcHZzKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjA2Ny17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTIwNzMtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoyMDc0OnZvaWQgaXBfdnNfc3luY19uZXRfY2xlYW51cChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cylcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTIwNzUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODo0Njo0My45NDgzNzE2NDhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMjkwMjU5NjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIFBhdGNoJ3MgUHVycG9zZSoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGluLiBCZWZvcmUgSSBldmVuICp0aGluayogYWJvdXQgYXBwbHlpbmcgdGhpcyBwYXRjaCBvciBldmFsdWF0aW5nIGl0cyBxdWFsaXR5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiBpdCBleGlzdHMuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHVzZSBgZ2l0IHNob3dgIG9uIHRoZSBzcGVjaWZpYyBjb21taXQgaW4gcXVlc3Rpb24uIFRoYXQncyB0aGUgcXVpY2tlc3Qgcm91dGUgdG8gdGhlIG1ldGFkYXRhOiB0aGUgY29tbWl0IG1lc3NhZ2UsIGFueSByZWxhdGVkIGlzc3VlIElEcywgYW5kIHRoZSBkaWZmIGl0c2VsZi4gVGhlIGNvbW1pdCBtZXNzYWdlICpzaG91bGQqIHByb3ZpZGUgYSBjb25jaXNlIHByb2JsZW0gc3RhdGVtZW50IGFuZCwgaWRlYWxseSwgZXhwbGFpbiB0aGUgdW5kZXJseWluZyByYXRpb25hbGUgZm9yIHRoZSBmaXguIEknbSBob3BpbmcgdG8gc2VlIGEgY2xlYXIgZGVzY3JpcHRpb24gb2YgdGhlIGJ1ZywgYW55IHJlbGV2YW50IHBlcmZvcm1hbmNlIG1ldHJpY3MgYmVmb3JlIGFuZCBhZnRlciwgb3IgbWF5YmUgYSByYXRpb25hbGUgZm9yIGEgbmV3IGZlYXR1cmUuXG5cbkknbSBhbHNvIGxvb2tpbmcgZm9yIGEgY2xlYW4sIHdlbGwtZm9ybWVkIGNvbW1pdCBtZXNzYWdlLiBJdCBuZWVkcyB0byBiZSBjbGVhciBhbmQgY29uY2lzZS4gSWYgaXTigJlzIHVuY2xlYXIsIHRoZW4gSSBtYXkgbmVlZCB0byBkaXZlIGZ1cnRoZXIgdG8gdGhlIHJlbGF0ZWQgdGlja2V0IG9yIGNvZGUuXG5cblVsdGltYXRlbHksIEkgd2FudCB0byBmb3JtIGEgbWVudGFsIG1vZGVsIG9mIHRoZSAqcHJvYmxlbSBzcGFjZSogdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nLiBVbmRlcnN0YW5kaW5nIHRoZSAqd2h5KiBpcyB0aGUgZm91bmRhdGlvbiBmb3IgcHJvcGVybHkgYXNzZXNzaW5nIHRoZSAqaG93Ki4gSSBjYW4gYWxyZWFkeSBzdGFydCB0aGlua2luZyBhYm91dCBwb3NzaWJsZSBlZGdlIGNhc2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQ2OCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjQ2OjQ3LjIzODYzMzI1NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzIyNjEzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJJUF9WU19DT05OX0ZfTk9fQ1BPUlRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9MzY3PV9faXBfdnNfY29ubl9pbl9nZXQoY29uc3Qgc3RydWN0IGlwX3ZzX2Nvbm5fcGFyYW0gKnApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTM5NS1cXHRcXHRcXHRcXHQgICAgKCFwLVxcdTAwM2VjcG9ydCBeXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzozOTY6XFx0XFx0XFx0XFx0ICAgICAoIShjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfTk9fQ1BPUlQpKSkgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTM5Ny1cXHRcXHRcXHRcXHQgICAgcC1cXHUwMDNlcHJvdG9jb2wgPT0gY3AtXFx1MDAzZXByb3RvY29sKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTY0Mz12b2lkIGlwX3ZzX2Nvbm5fZmlsbF9jcG9ydChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIF9fYmUxNiBjcG9ydClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNjg0LVxcdFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2Y3AtXFx1MDAzZWxvY2spO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6Njg1OlxcdFxcdFxcdGlmIChjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfTk9fQ1BPUlQgXFx1MDAyNlxcdTAwMjYgYnlfbWUpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy02ODYtXFx0XFx0XFx0XFx0Y3AtXFx1MDAzZWNwb3J0ID0gMDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNzU3LVxcdC8qIEZpbGwgY3BvcnQgb25jZSwgZXZlbiBpZiBtdWx0aXBsZSBwYWNrZXRzIHRyeSB0byBkbyBpdCAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6NzU4OlxcdGlmIChjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfTk9fQ1BPUlQgXFx1MDAyNlxcdTAwMjYgKCFjcC1cXHUwMDNlY3BvcnQgfHwgYnlfbWUpKSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy03NTktXFx0XFx0LyogSWYgd2UgcmFjZSB3aXRoIHJlc2l6aW5nIG1ha2Ugc3VyZSBjcG9ydCBpcyBzZXQgZm9yIGRpciAxICovXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTc2NS1cXHRcXHRcXHRhdG9taWNfZGVjKFxcdTAwMjZpcHZzLVxcdTAwM2Vub19jcG9ydF9jb25uc1thZl9pZF0pO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6NzY2OlxcdFxcdFxcdGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+SVBfVlNfQ09OTl9GX05PX0NQT1JUO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNzY3LVxcdFxcdH1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9ODc1PXN0cnVjdCBpcF92c19yaHQgKmlwX3ZzX2Nvbm5fdGFiX2FsbG9jKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgYnVja2V0cyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtODgyLVxcdHNjb3VudHMgPSBjbGFtcChidWNrZXRzIFxcdTAwM2VcXHUwMDNlIDYsIDEsIDI1Nik7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo4ODM6XFx0LyogbG9ja3M6IGJhc2VkIG9uIHBhcmFsbGVsIElQX1ZTX0NPTk5fRl9OT19DUE9SVCBvcGVyYXRpb25zICsgcmVzaXplICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy04ODQtXFx0bG9ja3MgPSBjbGFtcCg4LCAxLCBzY291bnRzKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9MTM0Nz1zdGF0aWMgdm9pZCBpcF92c19jb25uX2V4cGlyZShzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTM5NC1cXHRcXHRpcF92c191bmJpbmRfZGVzdChjcCk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxMzk1OlxcdFxcdGlmICh1bmxpa2VseShjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfTk9fQ1BPUlQpKSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMzk2LVxcdFxcdFxcdGludCBhZl9pZCA9IGlwX3ZzX2FmX2luZGV4KGNwLVxcdTAwM2VhZik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTE0NDQ9aXBfdnNfY29ubl9uZXcoY29uc3Qgc3RydWN0IGlwX3ZzX2Nvbm5fcGFyYW0gKnAsIGludCBkZXN0X2FmLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xNTE2LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTUxNzpcXHRpZiAodW5saWtlbHkoZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfTk9fQ1BPUlQpKSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xNTE4LVxcdFxcdGludCBhZl9pZCA9IGlwX3ZzX2FmX2luZGV4KGNwLVxcdTAwM2VhZik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM9MjU0PXN0YXRpYyBpbnQgaXBfdnNfZnRwX291dChzdHJ1Y3QgaXBfdnNfYXBwICphcHAsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy0zMzctXFx0XFx0bl9jcCA9IGlwX3ZzX2Nvbm5fbmV3KFxcdTAwMjZwLCBjcC1cXHUwMDNlYWYsIFxcdTAwMjZmcm9tLCBwb3J0LFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYzozMzg6XFx0XFx0XFx0XFx0ICAgICAgSVBfVlNfQ09OTl9GX05PX0NQT1JUIHxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtMzM5LVxcdFxcdFxcdFxcdCAgICAgIElQX1ZTX0NPTk5fRl9ORkNULFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz05NTM9c3RhdGljIGJvb2wgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyh1MzIgZmxhZ3MpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTk1Ny1cXHQgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjk1ODpcXHRpZiAoZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfTk9fQ1BPUlQpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTk1OS1cXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfVEVNUExBVEUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jPTc4Nz1pcF92c19uYXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jLTc5My1cXHQvKiBjaGVjayBpZiBpdCBpcyBhIGNvbm5lY3Rpb24gb2Ygbm8tY2xpZW50LXBvcnQgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jOjc5NDpcXHRpZiAodW5saWtlbHkoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX05PX0NQT1JUKSkge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMtNzk1LVxcdFxcdF9fYmUxNiBfcHQsICpwO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYz04NzE9aXBfdnNfbmF0X3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYy04NzctXFx0LyogY2hlY2sgaWYgaXQgaXMgYSBjb25uZWN0aW9uIG9mIG5vLWNsaWVudC1wb3J0ICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYzo4Nzg6XFx0aWYgKHVubGlrZWx5KGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9OT19DUE9SVCBcXHUwMDI2XFx1MDAyNiAhaXB2c2gtXFx1MDAzZWZyYWdvZmZzKSkge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMtODc5LVxcdFxcdF9fYmUxNiBfcHQsICpwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODo0Njo0Ny4yODU4NjYzNjNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTE2NjM1NDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgY29uc2lkZXJpbmcgSSdtIGFuIGV4cGVydDpcblxuKipEaXZpbmcgaW50byB0aGUgSVBWUyBTeW5jaHJvbml6YXRpb24gQ29kZSoqXG5cbk9rYXksIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCB0aGlzIGNvZGUsIGFuZCBpdCBsb29rcyBsaWtlIHdlJ3JlIGZvY3VzZWQgb24gYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNgLiBUaGF0J3MgdGhlIGhlYXJ0IG9mIGhvdyBJUFZTLCB0aGUgTGludXggVmlydHVhbCBTZXJ2ZXIsIGhhbmRsZXMgc3luY2hyb25pemF0aW9uLiBSaWdodCwgdGltZSB0byBkaWcgaW4gYW5kIGdldCBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB0aGUgY2hhbmdlcy4gSSdsbCBuZWVkIHRvIGNhcmVmdWxseSBleGFtaW5lIHRoZSBkaWZmLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBjbHVlcyB0aGF0IHN1Z2dlc3QgaXNzdWVzIHRoYXQgbmVlZCB0byBiZSBhZGRyZXNzZWQgaW4gdGhlIGNvbnRleHQgdGhhdCB0aGV5IGFwcGVhciBpbiB0aGUgZmlsZS4gSSB3aWxsIGZvY3VzIG9uIGFueSBuZXcgZmVhdHVyZXMsIGJ1ZyBmaXhlcywgb3IgcGVyZm9ybWFuY2UgdHdlYWtzLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgY29udGV4dCBvZiB0aGUgbW9kaWZpY2F0aW9ucywgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIElQVlMgc3lzdGVtLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDc2LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6NDY6NDkuNDAyNTA0NDEyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzOTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTQ1LFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTQ1OlxcdFxcdFxcdFxcdGNwLVxcdTAwM2V0aW1lb3V0ID0gcGQtXFx1MDAzZXRpbWVvdXRfdGFibGVbc3RhdGVdO1xcbiA5NDY6XFx0XFx0XFx0ZWxzZVxcbiA5NDc6XFx0XFx0XFx0XFx0Y3AtXFx1MDAzZXRpbWVvdXQgPSAoMyo2MCpIWik7XFxuIDk0ODpcXHRcXHR9XFxuIDk0OTpcXHRcXHRpcF92c19jb25uX3B1dChjcCk7XFxuIDk1MDpcXHR9XFxuIDk1MTpcXHRcXG4gOTUyOlxcdC8qIENoZWNrIGZvciBpbmNvbXBhdGlibGUgZmxhZ3MgKi9cXG4gOTUzOlxcdHN0YXRpYyBib29sIGlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3ModTMyIGZsYWdzKVxcbiA5NTQ6XFx0e1xcbiA5NTU6XFx0XFx0LyogV2UgZG8gbm90IGV4cGVjdCBOT19DUE9SVCwgZXNwZWNpYWxseSB0byBhbGxvdyBsb29rdXBzXFxuIDk1NjpcXHRcXHQgKiB0byBoaXQgdGVtcGxhdGVzXFxuIDk1NzpcXHRcXHQgKi9cXG4gOTU4OlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9OT19DUE9SVCkge1xcbiA5NTk6XFx0XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX1RFTVBMQVRFKVxcbiA5NjA6XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA5NjE6XFx0XFx0fVxcbiA5NjI6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpXFxuIDk2MzpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDk2NDpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gOTY1OlxcdH1cXG4gOTY2OlxcdFxcbiA5Njc6XFx0LypcXG4gOTY4OlxcdCAqICBQcm9jZXNzIHJlY2VpdmVkIG11bHRpY2FzdCBtZXNzYWdlIGZvciBWZXJzaW9uIDBcXG4gOTY5OlxcdCAqL1xcbiA5NzA6XFx0c3RhdGljIHZvaWQgaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBjb25zdCBjaGFyICpidWZmZXIsXFxuIDk3MTpcXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHNpemVfdCBidWZsZW4pXFxuIDk3MjpcXHR7XFxuIDk3MzpcXHRcXHRzdHJ1Y3QgaXBfdnNfc3luY19tZXNnX3YwICptID0gKHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjAgKilidWZmZXI7XFxuIDk3NDpcXHRcXHRzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwICpzO1xcbiA5NzU6XFx0XFx0c3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICpvcHQ7XFxuIDk3NjpcXHRcXHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwO1xcbiA5Nzc6XFx0XFx0c3RydWN0IGlwX3ZzX2Nvbm5fcGFyYW0gcGFyYW07XFxuIDk3ODpcXHRcXHRjaGFyICpwO1xcbiA5Nzk6XFx0XFx0aW50IGk7XFxuIDk4MDpcXHRcXG4gOTgxOlxcdFxcdHAgPSAoY2hhciAqKWJ1ZmZlciArIHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19tZXNnX3YwKTtcXG4gOTgyOlxcdFxcdGZvciAoaT0wOyBpXFx1MDAzY20tXFx1MDAzZW5yX2Nvbm5zOyBpKyspIHtcXG4gOTgzOlxcdFxcdFxcdHVuc2lnbmVkIGludCBmbGFncywgc3RhdGU7XFxuIDk4NDpcXHRcXG4gOTg1OlxcdFxcdFxcdGlmIChwICsgU0lNUExFX0NPTk5fU0laRSBcXHUwMDNlIGJ1ZmZlcitidWZsZW4pIHtcXG4gOTg2OlxcdFxcdFxcdFxcdElQX1ZTX0VSUl9STChcXFwiQkFDS1VQIHYwLCBib2d1cyBjb25uXFxcXG5cXFwiKTtcXG4gOTg3OlxcdFxcdFxcdFxcdHJldHVybjtcXG4gOTg4OlxcdFxcdFxcdH1cXG4gOTg5OlxcdFxcdFxcdHMgPSAoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl92MCAqKSBwO1xcbiA5OTA6XFx0XFx0XFx0ZmxhZ3MgPSBudG9ocyhzLVxcdTAwM2VmbGFncyk7XFxuIDk5MTpcXHRcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0spIHtcXG4gOTkyOlxcdFxcdFxcdFxcdG9wdCA9IChzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKilcXHUwMDI2c1sxXTtcXG4gOTkzOlxcdFxcdFxcdFxcdHAgKz0gRlVMTF9DT05OX1NJWkU7XFxuIDk5NDpcXHRcXHRcXHRcXHRpZiAocCBcXHUwMDNlIGJ1ZmZlcitidWZsZW4pIHtcXG4gOTk1OlxcdFxcdFxcdFxcdFxcdElQX1ZTX0VSUl9STChcXFwiQkFDS1VQIHYwLCBEcm9wcGluZyBidWZmZXIgYm9ndXMgY29ubiBvcHRpb25zXFxcXG5cXFwiKTtcXG4gOTk2OlxcdFxcdFxcdFxcdFxcdHJldHVybjtcXG4gOTk3OlxcdFxcdFxcdFxcdH1cXG4gOTk4OlxcdFxcdFxcdH0gZWxzZSB7XFxuIDk5OTpcXHRcXHRcXHRcXHRvcHQgPSBOVUxMO1xcbjEwMDA6XFx0XFx0XFx0XFx0cCArPSBTSU1QTEVfQ09OTl9TSVpFO1xcbjEwMDE6XFx0XFx0XFx0fVxcbjEwMDI6XFx0XFxuMTAwMzpcXHRcXHRcXHRpZiAoIWlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3MoZmxhZ3MpKSB7XFxuMTAwNDpcXHRcXHRcXHRcXHRJUF9WU19EQkcoMiwgXFxcIkJBQ0tVUCB2MCwgSW52YWxpZCBmbGFncyAweCVYXFxcXG5cXFwiLCBmbGFncyk7XFxuMTAwNTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xMDA2OlxcdFxcdFxcdH1cXG4xMDA3OlxcdFxcdFxcdGZsYWdzIFxcdTAwMjY9IElQX1ZTX0NPTk5fRl9CQUNLVVBfTUFTSztcXG4xMDA4OlxcdFxcdFxcdGZsYWdzIHw9IElQX1ZTX0NPTk5fRl9TWU5DO1xcbjEwMDk6XFx0XFxuMTAxMDpcXHRcXHRcXHRzdGF0ZSA9IG50b2hzKHMtXFx1MDAzZXN0YXRlKTtcXG4xMDExOlxcdFxcdFxcdGlmICghKGZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX1RFTVBMQVRFKSkge1xcbjEwMTI6XFx0XFx0XFx0XFx0cHAgPSBpcF92c19wcm90b19nZXQocy1cXHUwMDNlcHJvdG9jb2wpO1xcbjEwMTM6XFx0XFx0XFx0XFx0aWYgKCFwcCkge1xcbjEwMTQ6XFx0XFx0XFx0XFx0XFx0SVBfVlNfREJHKDIsIFxcXCJCQUNLVVAgdjAsIFVuc3VwcG9ydGVkIHByb3RvY29sICV1XFxcXG5cXFwiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODo0Njo0OS40MDI2MzAyMTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2MDc0MjQ0MDUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHNuaXBwZXQsIGZyYW1lZCBhcyBteSBvd24gdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgaXBfdnNfcHJvY19zeW5jX2Nvbm5gIEZ1bmN0aW9uKipcblxuT2theSwgc28gd2UncmUgZm9jdXNpbmcgb24gc29tZSBjb2RlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDExNDAgdG8gMTE3NSwgYW5kIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGBpcF92c19wcm9jX3N5bmNfY29ubmAgZnVuY3Rpb24uIEdpdmVuIG15IGV4cGVydGlzZSBpbiB0aGlzIGFyZWEsIG15IGluaXRpYWwgdGhvdWdodCBpcyBsaWtlbHkgYWJvdXQgdGhlIGNvbnRleHQuIFdoYXQgaXMgdGhpcyBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3I/IFwiaXBfdnNcIiBpbW1lZGlhdGVseSBzY3JlYW1zIFwiSVAgVmlydHVhbCBTZXJ2ZXIsXCIgbWVhbmluZyBpdCdzIGhpZ2hseSByZWxldmFudCB0byBsb2FkIGJhbGFuY2luZyBvciBzaW1pbGFyIHRyYWZmaWMgbWFuYWdlbWVudC4gVGhlIG5hbWUgXCJzeW5jX2Nvbm5cIiBzdWdnZXN0cyBpdCdzIGxpa2VseSBpbnZvbHZlZCBpbiBzeW5jaHJvbml6aW5nIGNvbm5lY3Rpb24gaW5mb3JtYXRpb24sIHBlcmhhcHMgYmV0d2VlbiBkaWZmZXJlbnQgc2VydmVycyBpbiBhIGNsdXN0ZXIgb3IgZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBzeXN0ZW0gZGVhbGluZyB3aXRoIG5ldHdvcmsgY29ubmVjdGlvbnMuXG5cbkkgZXhwZWN0IHRvIHNlZSB0aGUga2V5IGVsZW1lbnRzIG9mIGNvbm5lY3Rpb24gc3RhdGUgc3luY2hyb25pemF0aW9uLiBXaGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgdGhleSB1c2luZz8gQXJlIHRoZXkgZW1wbG95aW5nIGFueSBsb2NraW5nIG1lY2hhbmlzbXMgdG8gZW5zdXJlIGRhdGEgaW50ZWdyaXR5IGR1cmluZyB1cGRhdGVzPyBJJ20gcHJvYmFibHkgbG9va2luZyBmb3IgZGV0YWlscyBhcm91bmQgdGhlIGNvbm5lY3Rpb24ncyBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIElQIGFkZHJlc3NlcyBhbmQgcG9ydHMsIGl0cyBjdXJyZW50IHN0YXRlLCB0aW1lb3V0cywgYW5kIGFueSByZWxldmFudCBtZXRhZGF0YS4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIGNvbm5lY3Rpb24gdHJhY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBwcm9jZXNzIHdpdGhpbiB0aGUgSVBWUyBzeXN0ZW0sIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGluY29uc2lzdGVuY2llcy4gSXMgaXQgdXNpbmcgYW55IHNwZWNpZmljIHByb3RvY29scyBmb3Igc3luYywgb3Igc29tZXRoaW5nIGN1c3RvbT8gQXJlIHRoZXJlIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zPyBJJ2xsIGJlIGxvb2tpbmcgZm9yIGJvdHRsZW5lY2tzIG9yIGFueSBvYnZpb3VzIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODg1NCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6NDY6NTUuNDc2ODc3MjU1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MjQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNDA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgSVBfVlNfUEVEQVRBX01BWExFTiwgXFx1MDAyNm9wdF9mbGFncyxcXG4xMTQxOlxcdFxcdFxcdFxcdFxcdFxcdCAgIElQVlNfT1BUX0ZfUEVfREFUQSkpXFxuMTE0MjpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLTYwO1xcbjExNDM6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTE0NDpcXHRcXG4xMTQ1OlxcdFxcdFxcdGNhc2UgSVBWU19PUFRfUEVfTkFNRTpcXG4xMTQ2OlxcdFxcdFxcdFxcdGlmIChpcF92c19wcm9jX3N0cihwLCBwbGVuLFxcdTAwMjZwZV9uYW1lX2xlbiwgXFx1MDAyNnBlX25hbWUsXFxuMTE0NzpcXHRcXHRcXHRcXHRcXHRcXHQgICBJUF9WU19QRU5BTUVfTUFYTEVOLCBcXHUwMDI2b3B0X2ZsYWdzLFxcbjExNDg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgSVBWU19PUFRfRl9QRV9OQU1FKSlcXG4xMTQ5OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtNzA7XFxuMTE1MDpcXHRcXHRcXHRcXHRicmVhaztcXG4xMTUxOlxcdFxcbjExNTI6XFx0XFx0XFx0ZGVmYXVsdDpcXG4xMTUzOlxcdFxcdFxcdFxcdC8qIFBhcmFtIGRhdGEgbWFuZGF0b3J5ID8gKi9cXG4xMTU0OlxcdFxcdFxcdFxcdGlmICghKHB0eXBlIFxcdTAwMjYgSVBWU19PUFRfRl9QQVJBTSkpIHtcXG4xMTU1OlxcdFxcdFxcdFxcdFxcdElQX1ZTX0RCRygzLCBcXFwiQkFDS1VQLCBVbmtub3duIG1hbmRhdG9yeSBwYXJhbSAlZCBmb3VuZFxcXFxuXFxcIixcXG4xMTU2OlxcdFxcdFxcdFxcdFxcdFxcdCAgcHR5cGUgXFx1MDAyNiB+SVBWU19PUFRfRl9QQVJBTSk7XFxuMTE1NzpcXHRcXHRcXHRcXHRcXHRyZXRjID0gMjA7XFxuMTE1ODpcXHRcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4xMTU5OlxcdFxcdFxcdFxcdH1cXG4xMTYwOlxcdFxcdFxcdH1cXG4xMTYxOlxcdFxcdFxcdHAgKz0gcGxlbjsgIC8qIE5leHQgb3B0aW9uICovXFxuMTE2MjpcXHRcXHR9XFxuMTE2MzpcXHRcXG4xMTY0OlxcdFxcdC8qIEdldCBmbGFncyBhbmQgTWFzayBvZmYgdW5zdXBwb3J0ZWQgKi9cXG4xMTY1OlxcdFxcdGZsYWdzID0gbnRvaGwocy1cXHUwMDNldjQuZmxhZ3MpO1xcbjExNjY6XFx0XFx0aWYgKCFpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzKGZsYWdzKSkge1xcbjExNjc6XFx0XFx0XFx0SVBfVlNfREJHKDMsIFxcXCJCQUNLVVAsIEludmFsaWQgZmxhZ3MgMHglWFxcXFxuXFxcIiwgZmxhZ3MpO1xcbjExNjg6XFx0XFx0XFx0cmV0YyA9IDI1O1xcbjExNjk6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTE3MDpcXHRcXHR9XFxuMTE3MTpcXHRcXHRmbGFncyBcXHUwMDI2PSBJUF9WU19DT05OX0ZfQkFDS1VQX01BU0s7XFxuMTE3MjpcXHRcXHRmbGFncyB8PSBJUF9WU19DT05OX0ZfU1lOQztcXG4xMTczOlxcdFxcdHN0YXRlID0gbnRvaHMocy1cXHUwMDNldjQuc3RhdGUpO1xcbjExNzQ6XFx0XFxuMTE3NTpcXHRcXHRpZiAoIShmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9URU1QTEFURSkpIHtcXG4xMTc2OlxcdFxcdFxcdHBwID0gaXBfdnNfcHJvdG9fZ2V0KHMtXFx1MDAzZXY0LnByb3RvY29sKTtcXG4xMTc3OlxcdFxcdFxcdGlmICghcHApIHtcXG4xMTc4OlxcdFxcdFxcdFxcdElQX1ZTX0RCRygzLFxcXCJCQUNLVVAsIFVuc3VwcG9ydGVkIHByb3RvY29sICV1XFxcXG5cXFwiLFxcbjExNzk6XFx0XFx0XFx0XFx0XFx0cy1cXHUwMDNldjQucHJvdG9jb2wpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODo0Njo1NS40NzcwNTIwNDVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTgxMzM3NTAzNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydDpcblxuKipVbmRlcnN0YW5kaW5nIHRoZSBDb21taXQncyBIaXN0b3J5KipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzIHNwZWNpZmljIGNvbW1pdC4gVGhlIGZpcnN0IHRoaW5nIEknbSBnb2luZyB0byBkbyBpcyByZWFjaCBmb3IgYGdpdCBsb2dgLiBJIHdhbnQgdG8gaW1tZWRpYXRlbHkgZ3Jhc3AgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIFdoYXQncyB0aGUgbmFycmF0aXZlIGFyb3VuZCB0aGlzIGNoYW5nZT8gSSdtIG5vdCBqdXN0IGxvb2tpbmcgZm9yICp3aGF0KiB3YXMgY2hhbmdlZCwgYnV0ICp3aHkqLiBUaGUgY29tbWl0IG1lc3NhZ2UgaXMga2V5LCBvZiBjb3Vyc2UsIGJ1dCBpdCdzIG9mdGVuIGluc3VmZmljaWVudCBvbiBpdHMgb3duLiBJIG5lZWQgdGhlIGZ1bGwgcGljdHVyZTogV2hhdCB3YXMgdGhlIHN0YXRlIG9mIHRoZSBwcm9qZWN0IGJlZm9yZSB0aGlzPyBXaGF0IG90aGVyIGNvbW1pdHMgd2VyZSBtYWRlIGFyb3VuZCB0aGUgc2FtZSB0aW1lPyBXZXJlIHRoZXJlIHJlbGF0ZWQgYnJhbmNoZXMgbWVyZ2VkPyBBbnkgcmVsZXZhbnQgcHVsbCByZXF1ZXN0cz8gSSdsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgY29uY2lzZSBsb2csIG1heWJlIHVzaW5nIGAtLW9uZWxpbmVgIHRvIGtlZXAgaXQgZm9jdXNlZC4gVGhlbiwgSSBjYW4gZXhwYW5kIHRoZSBjb21taXQgd2l0aCBgLS1wYXRjaGAgdG8gZ28gbW9yZSBpbi1kZXB0aC4gVGhpcyBpcyBhYm91dCBidWlsZGluZyBhIG1lbnRhbCBtYXAgb2YgdGhlIGNoYW5nZXMsIHNvIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgaW4gdGhlIG1lc3NhZ2VzLiBUaGF0J3Mgd2hhdCBJIHdhbnQgdG8gZXN0YWJsaXNoLiBUaGVuLCBJIGNhbiBzdGFydCB0byB0aGluayBhYm91dCB0aGUgY29udGVudCBpdHNlbGYuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODc2LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODo0NzoxMy42MTA4MDUwNTNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNjY5MDUzODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfdnNfc3luY192YWxpZGF0ZV9mbGFnc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTg0MT1zdGF0aWMgdm9pZCBpcF92c19wcm9jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uX3BhcmFtICpwYXJhbSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtOTUyLS8qIENoZWNrIGZvciBpbmNvbXBhdGlibGUgZmxhZ3MgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjk1MzpzdGF0aWMgYm9vbCBpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzKHUzMiBmbGFncylcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTk1NC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTk3MD1zdGF0aWMgdm9pZCBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGNvbnN0IGNoYXIgKmJ1ZmZlcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTAwMi1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEwMDM6XFx0XFx0aWYgKCFpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzKGZsYWdzKSkge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTAwNC1cXHRcXHRcXHRJUF9WU19EQkcoMiwgXFxcIkJBQ0tVUCB2MCwgSW52YWxpZCBmbGFncyAweCVYXFxcXG5cXFwiLCBmbGFncyk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTEwODc9c3RhdGljIGlubGluZSBpbnQgaXBfdnNfcHJvY19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIF9fdTggKnAsIF9fdTggKm1zZ19lbmQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTExNjUtXFx0ZmxhZ3MgPSBudG9obChzLVxcdTAwM2V2NC5mbGFncyk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMTY2OlxcdGlmICghaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyhmbGFncykpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTExNjctXFx0XFx0SVBfVlNfREJHKDMsIFxcXCJCQUNLVVAsIEludmFsaWQgZmxhZ3MgMHglWFxcXFxuXFxcIiwgZmxhZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODo0NzoxNS42Nzc3MTY1ODRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjI4MzM1MzI1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZSwgdXNpbmcgYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmU6XG5cbioqRGVsdmluZyBpbnRvIElQVlMgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljIEtjb25maWcgb3B0aW9ucyB0aGF0IGNvbnRyb2wgdGhlIGNvbmZpZ3VyYXRpb24gb2YgSVBWUyAodGhlIExpbnV4IFZpcnR1YWwgU2VydmVyKSBhbmQsIGNyaXRpY2FsbHksIGhvdyBpdHMgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgYXJlIGhhbmRsZWQuIEkga25vdyB0aGUgYmFzaWMgbGFuZHNjYXBlLCBidXQgSSB3YW50IHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IG51YW5jZXMuIEFyZSB0aGVyZSBhbnkgbmV3IG9wdGlvbnMgaW50cm9kdWNlZCByZWNlbnRseT8gSSBuZWVkIGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0J3MgYXZhaWxhYmxlIHRvIHR1bmUgdGhlIGJlaGF2aW9yIG9mIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGFuZCBsb2FkIGJhbGFuY2luZyBhY3Jvc3MgdGhlIGNsdXN0ZXIuIFRoaXMgaXMgd2hlcmUgdGhlIGRldmlsIGlzIGluIHRoZSBkZXRhaWxzOyBpdCdzIGFsd2F5cyB0aGUgZmluZS1ncmFpbmVkIHNldHRpbmdzIHRoYXQgbWFrZSBvciBicmVhayBhIGhpZ2gtcGVyZm9ybWFuY2UsIHJlc2lsaWVudCBzZXR1cC4gVGltZSB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzIGFuZCB2ZXJpZnkgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjQ1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6NDc6MTcuOTYxMDczMDNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDUyMzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklQX1ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTQtI1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjU6bWVudWNvbmZpZyBJUF9WU1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTYtXFx0dHJpc3RhdGUgXFxcIklQIHZpcnR1YWwgc2VydmVyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yNi1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyNzppZiBJUF9WU1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI5OmNvbmZpZ1xcdElQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMC1cXHRib29sIFxcXCJJUHY2IHN1cHBvcnQgZm9yIElQVlNcXFwiXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzE6XFx0ZGVwZW5kcyBvbiBJUFY2ID0geSB8fCBJUF9WUyA9IElQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMi1cXHRzZWxlY3QgTkZfREVGUkFHX0lQVjZcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTM3LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjM4OmNvbmZpZ1xcdElQX1ZTX0RFQlVHXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzktXFx0Ym9vbCBcXFwiSVAgdmlydHVhbCBzZXJ2ZXIgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNDQtXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6NDU6Y29uZmlnXFx0SVBfVlNfVEFCX0JJVFNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy00Ni1cXHRpbnQgXFxcIklQVlMgY29ubmVjdGlvbiB0YWJsZSBzaXplICh0aGUgTnRoIHBvd2VyIG9mIDIpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Nzc9Y29tbWVudCBcXFwiSVBWUyB0cmFuc3BvcnQgcHJvdG9jb2wgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFxcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy03OC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo3OTpjb25maWdcXHRJUF9WU19QUk9UT19UQ1BcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy04MC1cXHRib29sIFxcXCJUQ1AgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTg0LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjg1OmNvbmZpZ1xcdElQX1ZTX1BST1RPX1VEUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTg2LVxcdGJvb2wgXFxcIlVEUCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctOTAtXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6OTE6Y29uZmlnXFx0SVBfVlNfUFJPVE9fQUhfRVNQXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6OTI6XFx0ZGVmX2Jvb2wgSVBfVlNfUFJPVE9fRVNQIHx8IElQX1ZTX1BST1RPX0FIXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctOTMtXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6OTQ6Y29uZmlnXFx0SVBfVlNfUFJPVE9fRVNQXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctOTUtXFx0Ym9vbCBcXFwiRVNQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy05OS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoxMDA6Y29uZmlnXFx0SVBfVlNfUFJPVE9fQUhcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xMDEtXFx0Ym9vbCBcXFwiQUggbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTEwNS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoxMDY6Y29uZmlnICBJUF9WU19QUk9UT19TQ1RQXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTA3LVxcdGJvb2wgXFxcIlNDVFAgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTExMz1jb21tZW50IFxcXCJJUFZTIHNjaGVkdWxlclxcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xMTQtXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MTE1OmNvbmZpZ1xcdElQX1ZTX1JSXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTE2LVxcdHRyaXN0YXRlIFxcXCJyb3VuZC1yb2JpbiBzY2hlZHVsaW5nXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTIzLSBcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoxMjQ6Y29uZmlnXFx0SVBfVlNfV1JSXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTI1LVxcdHRyaXN0YXRlIFxcXCJ3ZWlnaHRlZCByb3VuZC1yb2JpbiBzY2hlZHVsaW5nXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTM2LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjEzNzpjb25maWdcXHRJUF9WU19MQ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTEzOC1cXHR0cmlzdGF0ZSBcXFwibGVhc3QtY29ubmVjdGlvbiBzY2hlZHVsaW5nXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMTQ2LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjE0Nzpjb25maWdcXHRJUF9WU19XTENcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xNDgtXFx0dHJpc3RhdGUgXFxcIndlaWdodGVkIGxlYXN0LWNvbm5lY3Rpb24gc2NoZWR1bGluZ1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTE1Ni1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoxNTc6Y29uZmlnICBJUF9WU19GT1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTE1OC1cXHRcXHR0cmlzdGF0ZSBcXFwid2VpZ2h0ZWQgZmFpbG92ZXIgc2NoZWR1bGluZ1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTE2Ni1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoxNjc6Y29uZmlnICBJUF9WU19PVkZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xNjgtXFx0dHJpc3RhdGUgXFxcIndlaWdodGVkIG92ZXJmbG93IHNjaGVkdWxpbmdcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xNzctXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MTc4OmNvbmZpZ1xcdElQX1ZTX0xCTENcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xNzktXFx0dHJpc3RhdGUgXFxcImxvY2FsaXR5LWJhc2VkIGxlYXN0LWNvbm5lY3Rpb24gc2NoZWR1bGluZ1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTE5MS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoxOTI6Y29uZmlnICBJUF9WU19MQkxDUlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTE5My1cXHR0cmlzdGF0ZSBcXFwibG9jYWxpdHktYmFzZWQgbGVhc3QtY29ubmVjdGlvbiB3aXRoIHJlcGxpY2F0aW9uIHNjaGVkdWxpbmdcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yMDktXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MjEwOmNvbmZpZ1xcdElQX1ZTX0RIXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjExLVxcdHRyaXN0YXRlIFxcXCJkZXN0aW5hdGlvbiBoYXNoaW5nIHNjaGVkdWxpbmdcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yMTktXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MjIwOmNvbmZpZ1xcdElQX1ZTX1NIXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjIxLVxcdHRyaXN0YXRlIFxcXCJzb3VyY2UgaGFzaGluZyBzY2hlZHVsaW5nXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjI5LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjIzMDpjb25maWdcXHRJUF9WU19NSFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTIzMS1cXHR0cmlzdGF0ZSBcXFwibWFnbGV2IGhhc2hpbmcgc2NoZWR1bGluZ1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI0OC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyNDk6Y29uZmlnXFx0SVBfVlNfU0VEXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjUwLVxcdHRyaXN0YXRlIFxcXCJzaG9ydGVzdCBleHBlY3RlZCBkZWxheSBzY2hlZHVsaW5nXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjYxLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI2Mjpjb25maWdcXHRJUF9WU19OUVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI2My1cXHR0cmlzdGF0ZSBcXFwibmV2ZXIgcXVldWUgc2NoZWR1bGluZ1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI3NC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyNzU6Y29uZmlnXFx0SVBfVlNfVFdPU1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI3Ni1cXHR0cmlzdGF0ZSBcXFwid2VpZ2h0ZWQgcmFuZG9tIHR3b3MgY2hvaWNlIGxlYXN0LWNvbm5lY3Rpb24gc2NoZWR1bGluZ1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTI4Nj1jb21tZW50ICdJUFZTIFNIIHNjaGVkdWxlcidcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODctXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6Mjg4OmNvbmZpZyBJUF9WU19TSF9UQUJfQklUU1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4OS1cXHRpbnQgXFxcIklQVlMgc291cmNlIGhhc2hpbmcgdGFibGUgc2l6ZSAodGhlIE50aCBwb3dlciBvZiAyKVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTMwMT1jb21tZW50ICdJUFZTIE1IIHNjaGVkdWxlcidcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDItXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzAzOmNvbmZpZyBJUF9WU19NSF9UQUJfSU5ERVhcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDQtXFx0aW50IFxcXCJJUFZTIG1hZ2xldiBoYXNoaW5nIHRhYmxlIGluZGV4IG9mIHNpemUgKHRoZSBwcmltZSBudW1iZXJzKVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTMxOT1jb21tZW50ICdJUFZTIGFwcGxpY2F0aW9uIGhlbHBlcidcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMjAtXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzIxOmNvbmZpZ1xcdElQX1ZTX0ZUUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMyMi1cXHR0cmlzdGF0ZSBcXFwiRlRQIHByb3RvY29sIGhlbHBlclxcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMjM6XFx0ZGVwZW5kcyBvbiBJUF9WU19QUk9UT19UQ1AgXFx1MDAyNlxcdTAwMjYgTkZfQ09OTlRSQUNLIFxcdTAwMjZcXHUwMDI2IE5GX05BVCBcXHUwMDI2XFx1MDAyNiBcXFxcXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzI0LVxcdFxcdE5GX0NPTk5UUkFDS19GVFBcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMjU6XFx0c2VsZWN0IElQX1ZTX05GQ1RcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMjYtXFx0aGVscFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzM2LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMzNzpjb25maWdcXHRJUF9WU19ORkNUXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzM4LVxcdGJvb2wgXFxcIk5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzQ0LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjM0NTpjb25maWdcXHRJUF9WU19QRV9TSVBcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zNDYtXFx0dHJpc3RhdGUgXFxcIlNJUCBwZXJzaXN0ZW5jZSBlbmdpbmVcXFwiXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzQ3OlxcdGRlcGVuZHMgb24gSVBfVlNfUFJPVE9fVURQXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzQ4LVxcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLX1NJUFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzUyPWNvbmZpZyBHQ09WX1BST0ZJTEVfSVBWU1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzYwLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjM2MTplbmRpZiAjIElQX1ZTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjQ3OjE4LjAwNjUzMDgzOVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNzI3OTYyMjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSVBWUyBTeW5jaHJvbml6YXRpb24gTW9kdWxlKipcblxuT2theSwgc28gYGlwX3ZzX3N5bmMuY2AgaXMgYmVpbmcgY29tcGlsZWQgYXMgcGFydCBvZiB0aGUgYGlwX3ZzLW9ianNgLCB3aGljaCBpcyBhbGwgdW5kZXIgYENPTkZJR19JUF9WU2AuIFRpbWUgdG8gZG91YmxlLWNoZWNrIHRoYXQgTWFrZWZpbGUuLi4gWXVwLCB0aGVyZSBpdCBpczpcblxuYGBgbWFrZWZpbGVcbmlwX3ZzLW9ianMgOj0gICBpcF92c19jb25uLm8gaXBfdnNfY29yZS5vIGlwX3ZzX2N0bC5vIGlwX3ZzX3NjaGVkLm8gICAgICAgIFxcXG4gICAgICAgICAgICAgICAgaXBfdnNfeG1pdC5vIGlwX3ZzX2FwcC5vIGlwX3ZzX3N5bmMubyAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgICAgICAgIGlwX3ZzX2VzdC5vIGlwX3ZzX3Byb3RvLm8gaXBfdnNfcGUub1xuYGBgXG5cblNvIGBDT05GSUdfSVBfVlNgIGlzICp0aGUqIG9wdGlvbiwgaHVoPyBJdCBlbmFibGVzIHRoZSB3aG9sZSBJUFZTIHRoaW5nLCBpbmNsdWRpbmcgdGhlIHN5bmNocm9uaXphdGlvbiBtb2R1bGUuIE5vdywgbGV0J3Mgc2VlIHdoYXQgYENPTkZJR19JUF9WU2AgZGVwZW5kcyBvbi4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwncyBLY29uZmlnIGZpbGVzLiBUaGUgdXN1YWwgc3VzcGVjdHMgd291bGQgYmUgZWl0aGVyIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIG9yLCBtb3JlIHNwZWNpZmljYWxseSBmb3IgSVBWUywgYG5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnYC4gSSdsbCBzdGFydCB3aXRoIHRob3NlIGFuZCBzZWUgd2hhdCB0dXJucyB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMyODcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6NDc6MjAuNzM0NDk1NDU2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTQ1NjE1ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNC0jXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6NTptZW51Y29uZmlnIElQX1ZTXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNi1cXHR0cmlzdGF0ZSBcXFwiSVAgdmlydHVhbCBzZXJ2ZXIgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTI4Nj1jb21tZW50ICdJUFZTIFNIIHNjaGVkdWxlcidcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODctXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6Mjg4OmNvbmZpZyBJUF9WU19TSF9UQUJfQklUU1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4OS1cXHRpbnQgXFxcIklQVlMgc291cmNlIGhhc2hpbmcgdGFibGUgc2l6ZSAodGhlIE50aCBwb3dlciBvZiAyKVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTMwMT1jb21tZW50ICdJUFZTIE1IIHNjaGVkdWxlcidcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDItXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzAzOmNvbmZpZyBJUF9WU19NSF9UQUJfSU5ERVhcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDQtXFx0aW50IFxcXCJJUFZTIG1hZ2xldiBoYXNoaW5nIHRhYmxlIGluZGV4IG9mIHNpemUgKHRoZSBwcmltZSBudW1iZXJzKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6NDc6MjAuOTI5MDYzMDIxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU2ODc5NTQ1NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW5pdGlhbCB0aG91Z2h0cywgYXMgaWYgSSB3ZXJlIHJlYWRpbmcgdGhlIHRvcCBvZiBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgSVBWUyBLY29uZmlnIEZpbGUqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGBuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ2AgZmlsZS4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJ20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSByZXNwb25zaWJsZSBmb3IgY29udHJvbGxpbmcgdGhlIGNvbXBpbGF0aW9uIGFuZCBpbmNsdXNpb24gb2YgdGhlIElQIFZpcnR1YWwgU2VydmVyIChJUFZTKSBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgTGludXgga2VybmVsLiBJJ20gaW1tZWRpYXRlbHkgbG9va2luZyBmb3IgdGhlIHRvcC1sZXZlbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIGNvcmUgSVBWUyBmZWF0dXJlIHNldC4gSSBhbnRpY2lwYXRlIHNlZWluZyBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgcG90ZW50aWFsbHkgc29tZSBleHBsYW5hdGlvbnMgb3IgY29tbWVudHMgdGhhdCBjbGFyaWZ5IHRoZSBwdXJwb3NlIGFuZCBzY29wZSBvZiBJUFZTIHdpdGhpbiB0aGUgYnJvYWRlciBuZXR3b3JraW5nIHN0YWNrLiBJJ2xsIGJlIHF1aWNrbHkgc2Nhbm5pbmcgZm9yIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBvZiB0aGUgZmlsZTogd2hhdCdzIGVuYWJsZWQgYXMgZGVmYXVsdCBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zLiBBcmUgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcz8gQXJlIHRoZXJlIHN1Yi1mZWF0dXJlcyBvciBtb2R1bGVzIHdpdGhpbiBJUFZTIHRoYXQgYXJlIGluZGl2aWR1YWxseSBjb25maWd1cmFibGU/IFRoaXMgZmlsZSBkaWN0YXRlcyB3aGF0IGdldHMgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBJJ2xsIGJlIGxvb2tpbmcgdG8gcXVpY2tseSB1bmRlcnN0YW5kIGhvdyB0aGUgb3ZlcmFsbCBJUFZTIGZ1bmN0aW9uYWxpdHkgaXMgZW5hYmxlZCBhbmQgY3VzdG9taXplZCBieSB0aGUgdXNlci4gSSdtIHJlYWR5IHRvIGp1bXAgaW50byB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQwNDYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODo0NzoyNi42MTcwMzIyMThaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjcxMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgSVAgVmlydHVhbCBTZXJ2ZXIgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0bWVudWNvbmZpZyBJUF9WU1xcbiAgIDY6XFx0XFx0dHJpc3RhdGUgXFxcIklQIHZpcnR1YWwgc2VydmVyIHN1cHBvcnRcXFwiXFxuICAgNzpcXHRcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgTkVURklMVEVSXFxuICAgODpcXHRcXHRkZXBlbmRzIG9uIChORl9DT05OVFJBQ0sgfHwgTkZfQ09OTlRSQUNLPW4pXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIElQIFZpcnR1YWwgU2VydmVyIHN1cHBvcnQgd2lsbCBsZXQgeW91IGJ1aWxkIGEgaGlnaC1wZXJmb3JtYW5jZVxcbiAgMTE6XFx0XFx0ICB2aXJ0dWFsIHNlcnZlciBiYXNlZCBvbiBjbHVzdGVyIG9mIHR3byBvciBtb3JlIHJlYWwgc2VydmVycy4gVGhpc1xcbiAgMTI6XFx0XFx0ICBvcHRpb24gbXVzdCBiZSBlbmFibGVkIGZvciBhdCBsZWFzdCBvbmUgb2YgdGhlIGNsdXN0ZXJlZCBjb21wdXRlcnNcXG4gIDEzOlxcdFxcdCAgdGhhdCB3aWxsIHRha2UgY2FyZSBvZiBpbnRlcmNlcHRpbmcgaW5jb21pbmcgY29ubmVjdGlvbnMgdG8gYVxcbiAgMTQ6XFx0XFx0ICBzaW5nbGUgSVAgYWRkcmVzcyBhbmQgc2NoZWR1bGluZyB0aGVtIHRvIHJlYWwgc2VydmVycy5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0XFx0ICBUaHJlZSByZXF1ZXN0IGRpc3BhdGNoaW5nIHRlY2huaXF1ZXMgYXJlIGltcGxlbWVudGVkLCB0aGV5IGFyZVxcbiAgMTc6XFx0XFx0ICB2aXJ0dWFsIHNlcnZlciB2aWEgTkFULCB2aXJ0dWFsIHNlcnZlciB2aWEgdHVubmVsaW5nIGFuZCB2aXJ0dWFsXFxuICAxODpcXHRcXHQgIHNlcnZlciB2aWEgZGlyZWN0IHJvdXRpbmcuIFRoZSBzZXZlcmFsIHNjaGVkdWxpbmcgYWxnb3JpdGhtcyBjYW5cXG4gIDE5OlxcdFxcdCAgYmUgdXNlZCB0byBjaG9vc2Ugd2hpY2ggc2VydmVyIHRoZSBjb25uZWN0aW9uIGlzIGRpcmVjdGVkIHRvLFxcbiAgMjA6XFx0XFx0ICB0aHVzIGxvYWQgYmFsYW5jaW5nIGNhbiBiZSBhY2hpZXZlZCBhbW9uZyB0aGUgc2VydmVycy4gIEZvciBtb3JlXFxuICAyMTpcXHRcXHQgIGluZm9ybWF0aW9uIGFuZCBpdHMgYWRtaW5pc3RyYXRpb24gcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHRoZVxcbiAgMjI6XFx0XFx0ICBmb2xsb3dpbmcgVVJMOiBcXHUwMDNjaHR0cDovL3d3dy5saW51eHZpcnR1YWxzZXJ2ZXIub3JnL1xcdTAwM2UuXFxuICAyMzpcXHRcXG4gIDI0OlxcdFxcdCAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBpbiBrZXJuZWwsIHNheSBZLiBUbyBjb21waWxlIGl0IGFzIGFcXG4gIDI1OlxcdFxcdCAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMjY6XFx0XFxuICAyNzpcXHRpZiBJUF9WU1xcbiAgMjg6XFx0XFxuICAyOTpcXHRjb25maWdcXHRJUF9WU19JUFY2XFxuICAzMDpcXHRcXHRib29sIFxcXCJJUHY2IHN1cHBvcnQgZm9yIElQVlNcXFwiXFxuICAzMTpcXHRcXHRkZXBlbmRzIG9uIElQVjYgPSB5IHx8IElQX1ZTID0gSVBWNlxcbiAgMzI6XFx0XFx0c2VsZWN0IE5GX0RFRlJBR19JUFY2XFxuICAzMzpcXHRcXHRoZWxwXFxuICAzNDpcXHRcXHQgIEFkZCBJUHY2IHN1cHBvcnQgdG8gSVBWUy5cXG4gIDM1OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODo0NzoyNi42MTcxMDEzOThaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDMzNDY5MDM5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIENhbGwgUGF0aHMgb2YgSVBWUyBTeW5jaHJvbml6YXRpb24gRnVuY3Rpb25zKipcblxuQWxyaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGV4ZWN1dGlvbiBmbG93IGhlcmUuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHRyYWNlIHRoZSBjYWxscyBhbmQgdW5kZXJzdGFuZCB0aGUgZW50cnkgcG9pbnRzIGZvciB0aGUgZnVuY3Rpb25zIGBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjBgIGFuZCBgaXBfdnNfcHJvY19zeW5jX2Nvbm5gLiBUaGV5J3JlIGNlbnRyYWwgdG8gdGhlIElQVlMgc3luY2hyb25pemF0aW9uIHByb2Nlc3MsIHNvIGdldHRpbmcgYSBoYW5kbGUgb24gdGhlaXIgdXNhZ2UgaXMgY3J1Y2lhbC4gTXkgaW1tZWRpYXRlIHBsYW4gaXMgdG8gZGVsdmUgaW50byB0aGUgYGlwX3ZzX3N5bmMuY2AgZmlsZSBhbmQgemVybyBpbiBvbiB0aGUgY2FsbGVyIGZ1bmN0aW9ucy4gQSBkaXJlY3Qgc2VhcmNoIGZvciBjYWxscyB0byB0aG9zZSBmdW5jdGlvbnMgd2l0aGluIHRoYXQgZmlsZSBzaG91bGQgZ2V0IG1lIHRoZSBhbnN3ZXJzLiBUaGlzIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGhzIGFuZCBzZWVpbmcgaG93IHRoZXNlIGZ1bmN0aW9ucyBmaXQgaW50byB0aGUgbGFyZ2VyIHBpY3R1cmUgb2YgSVBWUyBvcGVyYXRpb24gYW5kIHN5bmNocm9uaXphdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ4NDksIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjQ3OjMwLjk1MTc5NTM2OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkyMDExODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfdnNfcHJvY2Vzc19tZXNzYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz05NTM9c3RhdGljIGJvb2wgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyh1MzIgZmxhZ3MpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTk2OS0gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjk3MDpzdGF0aWMgdm9pZCBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGNvbnN0IGNoYXIgKmJ1ZmZlcixcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTk3MS1cXHRcXHRcXHRcXHQgICAgIGNvbnN0IHNpemVfdCBidWZsZW4pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTEwODc9c3RhdGljIGlubGluZSBpbnQgaXBfdnNfcHJvY19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIF9fdTggKnAsIF9fdTggKm1zZ19lbmQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEyMjYtICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMjI3OnN0YXRpYyB2b2lkIGlwX3ZzX3Byb2Nlc3NfbWVzc2FnZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgX191OCAqYnVmZmVyLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTIyOC1cXHRcXHRcXHRcXHQgIGNvbnN0IHNpemVfdCBidWZsZW4pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEyODktXFx0XFx0LyogT2xkIHR5cGUgb2YgbWVzc2FnZSAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTI5MDpcXHRcXHRpcF92c19wcm9jZXNzX21lc3NhZ2VfdjAoaXB2cywgYnVmZmVyLCBidWZsZW4pO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTI5MS1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTE3MjU9c3RhdGljIGludCBzeW5jX3RocmVhZF9iYWNrdXAodm9pZCAqZGF0YSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTc1My1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE3NTQ6XFx0XFx0XFx0aXBfdnNfcHJvY2Vzc19tZXNzYWdlKGlwdnMsIHRpbmZvLVxcdTAwM2VidWYsIGxlbik7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNzU1LVxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6NDc6MzEuMDAxMDA3NTU2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI4MzQyMDY5MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJUFZTIFN5bmNocm9uaXphdGlvbiBQcm9jZXNzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBJUFZTIHN5bmMgZGFlbW9uIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IHRoZSBwYXRoIGRhdGEgdGFrZXMgZnJvbSBuZXR3b3JrIHRvIHByb2Nlc3NpbmcuIFNvLCBJIHNlZSB0aGF0IHRoZSBgc3luY190aHJlYWRfYmFja3VwYCBmdW5jdGlvbiBpcyB0aGUgZW50cnkgcG9pbnQsIGhhbmRsaW5nIG11bHRpY2FzdCBwYWNrZXRzIHJlY2VpdmVkIG9uIHRoZSBJUFZTIHN5bmMgc29ja2V0LiBJdCB0aGVuIGNhbGxzIGBpcF92c19wcm9jZXNzX21lc3NhZ2VgLCBwYXNzaW5nIHRoZSBJUFZTIGluc3RhbmNlIChgaXB2c2ApLCB0aGUgcGFja2V0IGJ1ZmZlciAoYHRpbmZvLVx1MDAzZWJ1ZmApLCBhbmQgdGhlIHBhY2tldCBsZW5ndGggKGBsZW5gKS5cblxuTm93LCBgaXBfdnNfcHJvY2Vzc19tZXNzYWdlYCBpcyB0aGUgY2VudHJhbCBtZXNzYWdlIGRpc3BhdGNoZXIuIEl0IGNoZWNrcyB0aGUgbWVzc2FnZSB2ZXJzaW9uIGZvcm1hdC4gSWYgaXQncyB2ZXJzaW9uIDAsIGl0IGRlbGVnYXRlcyB0byBgaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwYC4gSWYgaXQncyB2ZXJzaW9uIDEsIHdoaWNoIGlzIGxpa2VseSB0aGUgbW9yZSByZWNlbnQgYW5kIGNvbXBsZXggZm9ybWF0LCBpdCBlbnRlcnMgYSBsb29wIGFuZCBjYWxscyBgaXBfdnNfcHJvY19zeW5jX2Nvbm5gIHJlcGVhdGVkbHkuIFRoaXMgc3VnZ2VzdHMgdGhhdCB2ZXJzaW9uIDEgbWVzc2FnZXMgbGlrZWx5IGNvbnRhaW4gbXVsdGlwbGUgY29ubmVjdGlvbiBzeW5jIHVwZGF0ZXMuXG5cblRoZSBuZXh0IHF1ZXN0aW9uIGlzOiBIb3cgaXMgdGhlIHN5bmMgZGFlbW9uIGl0c2VsZiBpbml0aWFsaXplZD8gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYHN0YXJ0X3N5bmNfdGhyZWFkYCBpcyBjYWxsZWQgZnJvbS4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIGhpZ2gtbGV2ZWwgcGljdHVyZSBvZiBob3cgdGhlIHdob2xlIHN5bmMgcHJvY2VzcyBpcyBpbml0aWF0ZWQuIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgY2FsbGVycyB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU2NTUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6NDc6MzMuODM1MjE3MjE5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTUwNTA3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGFydF9zeW5jX3RocmVhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTM0NzI9ZG9faXBfdnNfc2V0X2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHNvY2twdHJfdCBwdHIsIHVuc2lnbmVkIGludCBsZW4pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzUxMi1cXHRcXHRcXHRjZmcuc3luY2lkID0gZG0tXFx1MDAzZXN5bmNpZDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6MzUxMzpcXHRcXHRcXHRyZXQgPSBzdGFydF9zeW5jX3RocmVhZChpcHZzLCBcXHUwMDI2Y2ZnLCBkbS1cXHUwMDNlc3RhdGUpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0zNTE0LVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9NDU2OD1zdGF0aWMgaW50IGlwX3ZzX2dlbmxfbmV3X2RhZW1vbihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IG5sYXR0ciAqKmF0dHJzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQ2MjMtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjQ2MjQ6XFx0cmV0ID0gc3RhcnRfc3luY190aHJlYWQoaXB2cywgXFx1MDAyNmMsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTQ2MjUtXFx0XFx0XFx0XFx0bmxhX2dldF91MzIoYXR0cnNbSVBWU19EQUVNT05fQVRUUl9TVEFURV0pKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTcyNT1zdGF0aWMgaW50IHN5bmNfdGhyZWFkX2JhY2t1cCh2b2lkICpkYXRhKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNzYxLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTc2MjppbnQgc3RhcnRfc3luY190aHJlYWQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcHZzX3N5bmNfZGFlbW9uX2NmZyAqYyxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE3NjMtXFx0XFx0ICAgICAgaW50IHN0YXRlKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODo0NzozMy44OTA3MjY2NDhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6OTk1NzE4ODM5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElQVlMgU3luY2hyb25pemF0aW9uIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGVudHJ5IHBvaW50cyBmb3IgdGhlIGJhY2t1cCBzeW5jaHJvbml6YXRpb24gdGhyZWFkIChgc3RhcnRfc3luY190aHJlYWRgKS4gSSBjYW4gc2VlIGl0J3MgdHJpZ2dlcmVkIGluIHR3byB3YXlzOiB0aHJvdWdoIGBzZXRzb2Nrb3B0YCB3aXRoIGBJUF9WU19TT19TRVRfU1RBUlREQUVNT05gIG9uIHJhdywgVURQLCBvciBUQ1Agc29ja2V0cyAoaW4gYGRvX2lwX3ZzX3NldF9jdGxgKSwgYW5kIGFsc28gdmlhIGdlbmVyaWMgbmV0bGluayB1c2luZyBgSVBWU19DTURfTkVXX0RBRU1PTmAgd2l0aGluIGBpcF92c19nZW5sX25ld19kYWVtb25gLiBUaGF0J3MgYSBzb2xpZCBzdGFydC5cblxuVGhlIHN5bmNocm9uaXphdGlvbiB0aHJlYWQgdGhlbiBsaXN0ZW5zIG9uIGEgVURQIG11bHRpY2FzdCBzb2NrZXQsIHR5cGljYWxseSBwb3J0IDg4NDguIFRoZSBrZXkgY29uY2VybiBoZXJlLCBhcyBJIHNlZSBpdCwgaXMgdGhlIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZS4gQW55IHByb2Nlc3Mgd2l0aCBuZXR3b3JrIGFjY2VzcyDigJMgaW5jbHVkaW5nIHZpYSBsb29wYmFjaywgdmV0aCwgb3IgZXZlbiB0dW4vdGFwLCBwYWNrZXQgb3IgcmF3IHNvY2tldHMsIG9yIGRpcmVjdGx5IHRocm91Z2ggYSBzb2NrZXQgaWYgbG9jYWwgbXVsdGljYXN0IGRlbGl2ZXJ5IGlzIGVuYWJsZWQg4oCTIGNhbiBwb3RlbnRpYWxseSBpbmplY3QgVURQIHBhY2tldHMgaW50byB0aGlzIHN0cmVhbS4gVGhpcyBpbW1lZGlhdGVseSBzY3JlYW1zIFwicG90ZW50aWFsIHZ1bG5lcmFiaWxpdHlcIi5cblxuTm93LCB0aW1lIHRvIHNlZSBpZiBzeXprYWxsZXIgaGFzIGFueSByZWxldmFudCBkZXNjcmlwdGlvbnMuIEknbGwgbmVlZCB0byB1c2UgYHJlYWQtc3l6LXNwZWNgIGFuZCBgc3l6LWdyZXBwZXJgIHRvIGxvb2sgZm9yIElQVlMtcmVsYXRlZCBlbGVtZW50cy4gSSBrbm93IElQVlMgaXMgZnVsbHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBnZW5lcmljIG5ldGxpbmsgYW5kIHNldHNvY2tvcHQuXG5cblJpZ2h0LCB0aGUgcGF0Y2ggaXRzZWxmLiBJJ20gZm9jdXNpbmcgb24gdGhlIGFkZGVkIHZhbGlkYXRpb24gY29kZS4gVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBUaGUgY29yZSBvZiB0aGUgcGF0Y2ggcmV2b2x2ZXMgYXJvdW5kIHRoZSBgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFnc2AgZnVuY3Rpb24uIEl0J3MgY2hlY2tpbmcgZm9yIGEgZmV3IHNwZWNpZmljIGZsYWcgY29tYmluYXRpb25zIHRoYXQgYXJlIG5vdyBkZWVtZWQgaW52YWxpZDogYElQX1ZTX0NPTk5fRl9OT19DUE9SVGAgY29tYmluZWQgd2l0aCBgSVBfVlNfQ09OTl9GX1RFTVBMQVRFYCwgb3Igc2ltcGx5IGBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVGAuIFRoZXNlIGZsYWdzIHdlcmUgc3BlY2lmaWNhbGx5IGluIGBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjBgIGFuZCBgaXBfdnNfcHJvY19zeW5jX2Nvbm5gLlxuXG5UaGUgdmFsaWRhdGlvbiBvY2N1cnMgKmJlZm9yZSogYXBwbHlpbmcgdGhlIGBJUF9WU19DT05OX0ZfQkFDS1VQX01BU0tgIGFuZCB0aGUgYElQX1ZTX0NPTk5fRl9TWU5DYCBmbGFnLiBUaGUgcGF0Y2ggZXNzZW50aWFsbHkgZmlsdGVycyBvdXQgY29ubmVjdGlvbnMgdXNpbmcgdGhlc2UgXCJpbnZhbGlkXCIgZmxhZyBjb21iaW5hdGlvbnMuIFRoZSBgSVBfVlNfREJHYCBtZXNzYWdlcyBhcmUgYSBnb29kIGNsdWUg4oCTIHRoZSBnb2FsIGlzIHRvIHByZXZlbnQgcHJvY2Vzc2luZyBtZXNzYWdlcyB3aXRoIHRoZXNlIHNwZWNpZmljIGZsYWdzLlxuXG5TbywgbGV0J3Mgc3RlcCBiYWNrIGFuZCBjb25zaWRlciAqd2h5KiB0aGVzZSBjaGVja3MgYXJlIGFkZGVkLiBJZiBgSVBfVlNfQ09OTl9GX05PX0NQT1JUYCAqYW5kKiBgSVBfVlNfQ09OTl9GX1RFTVBMQVRFYCB3ZXJlIGFsbG93ZWQsIG9yIGlmIGBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVGAgd2FzIGFsbG93ZWQsIHdoYXQgY291bGQgZ28gd3Jvbmc/IE15IGludHVpdGlvbiBzYXlzIHRoZXJlJ3MgYSBwb3RlbnRpYWwgZm9yIHN0YXRlIGNvcnJ1cHRpb24gb3IgYnlwYXNzaW5nIGNydWNpYWwgY2hlY2tzLCBvciBldmVuIHBlcmhhcHMsIGJ5cGFzc2luZyBhIHNwZWNpZmljIGZsb3cuIFRpbWUgdG8gbG9vayB1cCB0aGUgZGVmaW5pdGlvbiBvZiBgSVBfVlNfQ09OTl9GX0JBQ0tVUF9NQVNLYCBhbmQgc2VlIGlmIHRoZSBhbnN3ZXIgbGllcyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY1NTksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5ODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6NDc6NDMuODQ3OTE4MTM3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjUzNDI2ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSVBfVlNfQ09OTl9GX0JBQ0tVUF9NQVNLXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvdWFwaS9saW51eC9pcF92cy5oLTkzLS8qIEluaXRpYWwgYml0cyBhbGxvd2VkIGluIGJhY2t1cCBzZXJ2ZXIgKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvaXBfdnMuaDo5NDojZGVmaW5lIElQX1ZTX0NPTk5fRl9CQUNLVVBfTUFTSyAoSVBfVlNfQ09OTl9GX0ZXRF9NQVNLIHwgXFxcXFxcbmluY2x1ZGUvdWFwaS9saW51eC9pcF92cy5oLTk1LVxcdFxcdFxcdFxcdCAgSVBfVlNfQ09OTl9GX05PT1VUUFVUIHwgXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODo0Nzo0My45NzMyNjY5MDRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjU1NzE1MzM1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipEaXZpbmcgaW50byB0aGUgSVBWUyBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgSVAgVmlydHVhbCBTZXJ2ZXIgKElQVlMpIHdvcmtzIGF0IGEgZnVuZGFtZW50YWwgbGV2ZWwuIEknbSBnb2luZyB0byBuYXZpZ2F0ZSB0byB0aGUgaW5jbHVkZSBmaWxlcyBmb3IgdGhlIExpbnV4IGtlcm5lbCBhbmQgc3BlY2lmaWNhbGx5IGZvY3VzIG9uIGBpbmNsdWRlL3VhcGkvbGludXgvaXBfdnMuaGAuIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB0aGUgY29kZSBzdGFydGluZyBhcm91bmQgbGluZSA5My4gSSByZW1lbWJlciB0aGlzIGlzIHdoZXJlIGEga2V5IGRhdGEgc3RydWN0dXJlIHNob3VsZCBiZSBkZWZpbmVkLCB0aGUgb25lIHRoYXQgaG9sZHMgdGhlIGNvcmUgSVBWUyBjb25maWd1cmF0aW9uIG9yIHBlcmhhcHMgdGhlIHJvdXRpbmcgcnVsZXMuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aG9zZSBzdHJ1Y3RzIGFyZSBkZWNsYXJlZCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgc3RhY2suIFRoaXMgZmlsZSBpcyBwcm9iYWJseSB0aGUgYmVzdCBwbGFjZSB0byBzdGFydC4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSBpbiB0aGVyZS4gSSdtIGV4cGVjdGluZyBzb21lIHN0YW5kYXJkIGRlZmluaXRpb25zIGhlcmUuLi4gcGVyaGFwcyB0aGUgY3JpdGljYWwgZGF0YSBzdHJ1Y3R1cmVzIGxpa2UgdGhlIElQVlMgc2VydmljZSB0YWJsZSBvciB0aGUgcmVhbCBzZXJ2ZXIgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmVzLiBJJ2xsIHByb2JhYmx5IGJlIGxvb2tpbmcgZm9yIHRoZSBmdW5kYW1lbnRhbCBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gY29uc3RydWN0IElQVlMncyBuZXR3b3JrIG9wZXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MzE4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6NDc6NDYuNTMwNDI0MzQ0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvdWFwaS9saW51eC9pcF92cy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDgwOlxcdCNkZWZpbmUgSVBfVlNfQ09OTl9GX0RST1VURVxcdDB4MDAwM1xcdFxcdC8qIGRpcmVjdCByb3V0aW5nICovXFxuICA4MTpcXHQjZGVmaW5lIElQX1ZTX0NPTk5fRl9CWVBBU1NcXHQweDAwMDRcXHRcXHQvKiBjYWNoZSBieXBhc3MgKi9cXG4gIDgyOlxcdCNkZWZpbmUgSVBfVlNfQ09OTl9GX1NZTkNcXHQweDAwMjBcXHRcXHQvKiBlbnRyeSBjcmVhdGVkIGJ5IHN5bmMgKi9cXG4gIDgzOlxcdCNkZWZpbmUgSVBfVlNfQ09OTl9GX0hBU0hFRFxcdDB4MDA0MFxcdFxcdC8qIGhhc2hlZCBlbnRyeSAqL1xcbiAgODQ6XFx0I2RlZmluZSBJUF9WU19DT05OX0ZfTk9PVVRQVVRcXHQweDAwODBcXHRcXHQvKiBubyBvdXRwdXQgcGFja2V0cyAqL1xcbiAgODU6XFx0I2RlZmluZSBJUF9WU19DT05OX0ZfSU5BQ1RJVkVcXHQweDAxMDBcXHRcXHQvKiBub3QgZXN0YWJsaXNoZWQgKi9cXG4gIDg2OlxcdCNkZWZpbmUgSVBfVlNfQ09OTl9GX09VVF9TRVFcXHQweDAyMDBcXHRcXHQvKiBtdXN0IGRvIG91dHB1dCBzZXEgYWRqdXN0ICovXFxuICA4NzpcXHQjZGVmaW5lIElQX1ZTX0NPTk5fRl9JTl9TRVFcXHQweDA0MDBcXHRcXHQvKiBtdXN0IGRvIGlucHV0IHNlcSBhZGp1c3QgKi9cXG4gIDg4OlxcdCNkZWZpbmUgSVBfVlNfQ09OTl9GX1NFUV9NQVNLXFx0MHgwNjAwXFx0XFx0LyogaW4vb3V0IHNlcXVlbmNlIG1hc2sgKi9cXG4gIDg5OlxcdCNkZWZpbmUgSVBfVlNfQ09OTl9GX05PX0NQT1JUXFx0MHgwODAwXFx0XFx0Lyogbm8gY2xpZW50IHBvcnQgc2V0IHlldCAqL1xcbiAgOTA6XFx0I2RlZmluZSBJUF9WU19DT05OX0ZfVEVNUExBVEVcXHQweDEwMDBcXHRcXHQvKiB0ZW1wbGF0ZSwgbm90IGNvbm5lY3Rpb24gKi9cXG4gIDkxOlxcdCNkZWZpbmUgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVRcXHQweDIwMDBcXHRcXHQvKiBmb3J3YXJkIG9ubHkgb25lIHBhY2tldCAqL1xcbiAgOTI6XFx0XFxuICA5MzpcXHQvKiBJbml0aWFsIGJpdHMgYWxsb3dlZCBpbiBiYWNrdXAgc2VydmVyICovXFxuICA5NDpcXHQjZGVmaW5lIElQX1ZTX0NPTk5fRl9CQUNLVVBfTUFTSyAoSVBfVlNfQ09OTl9GX0ZXRF9NQVNLIHwgXFxcXFxcbiAgOTU6XFx0XFx0XFx0XFx0XFx0ICBJUF9WU19DT05OX0ZfTk9PVVRQVVQgfCBcXFxcXFxuICA5NjpcXHRcXHRcXHRcXHRcXHQgIElQX1ZTX0NPTk5fRl9JTkFDVElWRSB8IFxcXFxcXG4gIDk3OlxcdFxcdFxcdFxcdFxcdCAgSVBfVlNfQ09OTl9GX1NFUV9NQVNLIHwgXFxcXFxcbiAgOTg6XFx0XFx0XFx0XFx0XFx0ICBJUF9WU19DT05OX0ZfTk9fQ1BPUlQgfCBcXFxcXFxuICA5OTpcXHRcXHRcXHRcXHRcXHQgIElQX1ZTX0NPTk5fRl9URU1QTEFURSBcXFxcXFxuIDEwMDpcXHRcXHRcXHRcXHRcXHQgKVxcbiAxMDE6XFx0XFxuIDEwMjpcXHQvKiBCaXRzIGFsbG93ZWQgdG8gdXBkYXRlIGluIGJhY2t1cCBzZXJ2ZXIgKi9cXG4gMTAzOlxcdCNkZWZpbmUgSVBfVlNfQ09OTl9GX0JBQ0tVUF9VUERfTUFTSyAoSVBfVlNfQ09OTl9GX0lOQUNUSVZFIHwgXFxcXFxcbiAxMDQ6XFx0XFx0XFx0XFx0XFx0ICAgICAgSVBfVlNfQ09OTl9GX1NFUV9NQVNLKVxcbiAxMDU6XFx0XFxuIDEwNjpcXHQvKiBGbGFncyB0aGF0IGFyZSBub3Qgc2VudCB0byBiYWNrdXAgc2VydmVyIHN0YXJ0IGZyb20gYml0IDE2ICovXFxuIDEwNzpcXHQjZGVmaW5lIElQX1ZTX0NPTk5fRl9ORkNUXFx0KDEgXFx1MDAzY1xcdTAwM2MgMTYpXFx0LyogdXNlIG5ldGZpbHRlciBjb25udHJhY2sgKi9cXG4gMTA4OlxcdFxcbiAxMDk6XFx0LyogQ29ubmVjdGlvbiBmbGFncyBmcm9tIGRlc3RpbmF0aW9uIHRoYXQgY2FuIGJlIGNoYW5nZWQgYnkgdXNlciBzcGFjZSAqL1xcbiAxMTA6XFx0I2RlZmluZSBJUF9WU19DT05OX0ZfREVTVF9NQVNLIChJUF9WU19DT05OX0ZfRldEX01BU0sgfCBcXFxcXFxuIDExMTpcXHRcXHRcXHRcXHRcXHRJUF9WU19DT05OX0ZfT05FX1BBQ0tFVCB8IFxcXFxcXG4gMTEyOlxcdFxcdFxcdFxcdFxcdElQX1ZTX0NPTk5fRl9ORkNUIHwgXFxcXFxcbiAxMTM6XFx0XFx0XFx0XFx0XFx0MClcXG4gMTE0OlxcdFxcbiAxMTU6XFx0I2RlZmluZSBJUF9WU19TQ0hFRE5BTUVfTUFYTEVOXFx0MTZcXG4gMTE2OlxcdCNkZWZpbmUgSVBfVlNfUEVOQU1FX01BWExFTlxcdDE2XFxuIDExNzpcXHQjZGVmaW5lIElQX1ZTX0lGTkFNRV9NQVhMRU5cXHQxNlxcbiAxMTg6XFx0XFxuIDExOTpcXHQjZGVmaW5lIElQX1ZTX1BFREFUQV9NQVhMRU4gICAgIDI1NVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODo0Nzo0Ni41MzA1MjU1NzRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTA1OTM1NDk5MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgSVBWUyBDb25uZWN0aW9uIFN5bmMgVnVsbmVyYWJpbGl0eSBhbmQgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIFRoZSBrZXkgaGVyZSBpcyBob3cgSVBWUyBoYW5kbGVzIGNvbm5lY3Rpb24gc3luY2hyb25pemF0aW9uIG1lc3NhZ2VzLCBzcGVjaWZpY2FsbHkgdmVyc2lvbnMgMCBhbmQgMS4gSXQgc2VlbXMgbGlrZSB0aGUgbWFzayBgSVBfVlNfQ09OTl9GX0JBQ0tVUF9NQVNLYCBpbmNsdWRlcyBgSVBfVlNfQ09OTl9GX05PX0NQT1JUYCBhbmQgYElQX1ZTX0NPTk5fRl9URU1QTEFURWAsIHdoaWNoIGlzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLiBJZiBib3RoIGFyZSBzZXQsIHRoYXQgY291bGQgbGVhZCB0byBzb21lIHdlaXJkIGVkZ2UgY2FzZXMuXG5cbkluIHRoZSBwcmUtcGF0Y2ggdjAgY29kZSwgdGhlIGZsYWcgbWFza2luZyB3YXMgKm1pc3NpbmcqIGBJUF9WU19DT05OX0ZfQkFDS1VQX01BU0tgIGVudGlyZWx5ISBUaGF0IG1lYW5zIGFueSBmbGFnIGNvdWxkIHNuZWFrIGluLiBXaXRoIHYxLCB0aGV5IGF0IGxlYXN0IGhhdmUgYSBtYXNrLCBidXQgaXQgKmluY2x1ZGVzKiBib3RoIHBvdGVudGlhbGx5IGNvbmZsaWN0aW5nIGZsYWdzLCBgTk9fQ1BPUlRgIGFuZCBgVEVNUExBVEVgLiBXaGF0IGhhcHBlbnMgd2hlbiBhIGNvbm5lY3Rpb24gaXMgbWFya2VkIHdpdGggKmJvdGgqIG9mIHRob3NlPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGxvZ2ljIGluIGBfX2lwX3ZzX2Nvbm5faW5fZ2V0YCBhbmQgYGlwX3ZzX2Nvbm5fbmV3YCB0byBzZWUgaG93IGl0IGhhbmRsZXMgdGVtcGxhdGVzIGFuZCBgTk9fQ1BPUlRgLiBUaGUgYGNwb3J0YCBmaWVsZCBvbiBhIHRlbXBsYXRlIGlzIDAsIHNvIEkgbmVlZCB0byBzZWUgd2hhdCB0aGUgbG9va3VwIGFuZCBjcmVhdGlvbiBsb2dpYyBkb2VzIHdpdGggdGhpcy5cblxuVGhlIGNvZGUgc2VlbXMgdG8gdXNlIGBhdG9taWNfaW5jYCBhbmQgYGF0b21pY19kZWNgIG9uIGBub19jcG9ydF9jb25uc2Agd2hlbiBgTk9fQ1BPUlRgIGlzIHNldCwgYW5kIHRoZXJlJ3MgbG9naWMgYXJvdW5kIGBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVGAgYXMgd2VsbC4gSWYgYE9ORV9QQUNLRVRgIGlzIGVuYWJsZWQsIHRoZXNlIGNvbm5lY3Rpb25zIG1pZ2h0IGJlIHNob3J0IGxpdmVkLCBvciBzeW5jZWQgaW5jb3JyZWN0bHkuXG5cblNvLCB0aGlzIGxvb2tzIGxpa2UgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eS4gSXQncyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBjb2RlIHdpdGhpbiB0aGUgSVBWUyBjb3JlIHN1YnN5c3RlbSAoYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNgKS4gVGhlIHN5bmMgZGFlbW9uIHJlY2VpdmVzIHRoZXNlIG1lc3NhZ2VzIG92ZXIgdGhlIG5ldHdvcmsgdmlhIG11bHRpY2FzdCBVRFAgcGFja2V0cy4gVGhlc2UgYXJlIHBhcnNlZCBpbiBhIGtlcm5lbCB0aHJlYWQgKGBzeW5jX3RocmVhZF9iYWNrdXBgKSB0aHJvdWdoIGEgY2hhaW4gb2YgZnVuY3Rpb25zLCBhbGwgdGhlIHdheSBkb3duIHRvIGBpcF92c19wcm9jZXNzX21lc3NhZ2VgLCBgaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwYCwgYW5kIGBpcF92c19wcm9jX3N5bmNfY29ubmAuIEl0IHNlZW1zIGxpa2UgdGhlc2UgZnVuY3Rpb25zIGFyZSB0aGUga2V5IHRvIHBhcnNpbmcgKnVudHJ1c3RlZCogbmV0d29yayBwYWNrZXRzIGNvbWluZyBmcm9tIGEgbXVsdGljYXN0IHJlY2VpdmVyLlxuXG5UaGUgcGF0Y2ggYWltcyB0byBhZGQgdmFsaWRhdGlvbiB2aWEgYGlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3NgLCBhbmQgYWRkcyBtYXNraW5nIGluIHYwLCBhbmQgcmVqZWN0cyBpbnZhbGlkIGZsYWcgY29tYmluYXRpb25zLiBTbyBpdCdzIGFkZHJlc3NpbmcgdGhpcyBpc3N1ZSBkaXJlY3RseS5cblxuQmFzZWQgb24gdGhlIGluc3RydWN0aW9ucywgdGhpcyBpcyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuIEl0IHRvdWNoZXMgY29yZSBuZXR3b3JraW5nLCBuZXRmaWx0ZXIsIElQVlMgcHJvdG9jb2xzLCBhbmQgaGFuZGxpbmcgdW50cnVzdGVkIGlucHV0LlxuXG5Ob3csIGxldCdzIG5haWwgZG93biBgRm9jdXNTeW1ib2xzYC4gV2hhdCBhcmUgdGhlIHJlbGV2YW50IHN5bWJvbHMgdG8gdGFyZ2V0IHdpdGggdGhlIGZ1enplcj8gV2UgaGF2ZSBgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFnc2Agd2hpY2ggaXMgYXQgdGhlIGhlYXJ0IG9mIHRoZSBhZGRlZCB2YWxpZGF0aW9uLiBUaGUgaXNzdWUgaXMgd2hldGhlciB0aGlzIHN0YXRpYyBoZWxwZXIgaXMgaW5saW5lZC5cblxuTG9va3MgbGlrZSBpdCdzIGEgc3RhdGljIGZ1bmN0aW9uLCBhbmQgYSBzbWFsbCBoZWxwZXIuIEl0IGlzIGNhbGxlZCBpbiBgaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwYCBhbmQgYGlwX3ZzX3Byb2Nfc3luY19jb25uYC4gVGhlIGxhdHRlciBpcyBgc3RhdGljIGlubGluZWAsIHdoaWNoIG1lYW5zIHRoZSBjb21waWxlciBtaWdodCBpbmxpbmUgaXQuIExldCdzIHNlZSB3aGF0IGNhbGxzIGl0LiBgaXBfdnNfcHJvY2Vzc19tZXNzYWdlYCAtXHUwMDNlIGBzeW5jX3RocmVhZF9iYWNrdXBgIGFuZCBgaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwYC4gVGhlIHYwIGZ1bmN0aW9uLCBhbmQgbWFpbiBwYXJzZXIsIGlzIGFyb3VuZCA3MCBsaW5lcyBhbmQgYGlwX3ZzX3Byb2Nlc3NfbWVzc2FnZWAgaXMgYXJvdW5kIDc1IGxpbmVzLCBzbywgdGhleSBhcmUgbm90IHRoYXQgYmlnIGFuZCBtaWdodCBiZSB0aGUgcmlnaHQgYEZvY3VzU3ltYm9sc2AuXG5cbkkgbmVlZCB0byBmb2N1cyBvbiB3aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnRzIHRoaXMgbG9naWMuIEFjY29yZGluZyB0byB0aGUgZ3VpZGVsaW5lcywgSSBzaG91bGQgdGFyZ2V0IG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBzbyBsZXQncyBjaGVjayBmb3IgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIGBpcF92c19zeW5jLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTUxMiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODo0Nzo1Ny4xMjQwNzkyNTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MDE4NTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aX10uKlxcXFwpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0yNjk9c3RydWN0IGlwX3ZzX3N5bmNfYnVmZiB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTI4Mi0gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjI4MzpzdGF0aWMgdm9pZCBudG9oX3NlcShzdHJ1Y3QgaXBfdnNfc2VxICpubywgc3RydWN0IGlwX3ZzX3NlcSAqaG8pXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yODQte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yOTQtICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoyOTU6c3RhdGljIHZvaWQgaHRvbl9zZXEoc3RydWN0IGlwX3ZzX3NlcSAqaG8sIHN0cnVjdCBpcF92c19zZXEgKm5vKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjk2LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MzAyPXN0YXRpYyBpbmxpbmUgc3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzozMDM6c2JfZGVxdWV1ZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwdnNfbWFzdGVyX3N5bmNfc3RhdGUgKm1zKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMzA0LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MzI3PXN0YXRpYyBpbmxpbmUgc3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzozMjg6aXBfdnNfc3luY19idWZmX2NyZWF0ZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgdW5zaWduZWQgaW50IGxlbilcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTMyOS17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTM1NC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjM1NTpzdGF0aWMgaW5saW5lIHZvaWQgaXBfdnNfc3luY19idWZmX3JlbGVhc2Uoc3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqc2IpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0zNTYte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz00MDU9c3RhdGljIGlubGluZSBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjQwNjpzZWxlY3RfbWFzdGVyX3RocmVhZF9pZChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNDA3LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9NDE0PXN0YXRpYyBpbmxpbmUgc3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo0MTU6aXBfdnNfc3luY19idWZmX2NyZWF0ZV92MChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgdW5zaWduZWQgaW50IGxlbilcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTQxNi17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTQ0MC0vKiBDaGVjayBpZiBjb25uZWN0aW9uIGlzIGNvbnRyb2xsZWQgYnkgcGVyc2lzdGVuY2UgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjQ0MTpzdGF0aWMgaW5saW5lIGJvb2wgaW5fcGVyc2lzdGVuY2Uoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNDQyLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9NTM5PXN0YXRpYyB2b2lkIGlwX3ZzX3N5bmNfY29ubl92MChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02MjgtICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo2Mjk6dm9pZCBpcF92c19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02MzAte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz04NDE9c3RhdGljIHZvaWQgaXBfdnNfcHJvY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubl9wYXJhbSAqcGFyYW0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTk1Mi0vKiBDaGVjayBmb3IgaW5jb21wYXRpYmxlIGZsYWdzICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo5NTM6c3RhdGljIGJvb2wgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyh1MzIgZmxhZ3MpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05NTQte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xMDY3PXN0YXRpYyBpbnQgaXBfdnNfcHJvY19zdHIoX191OCAqcCwgdW5zaWduZWQgaW50IHBsZW4sIHVuc2lnbmVkIGludCAqZGF0YV9sZW4sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEwODYtICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMDg3OnN0YXRpYyBpbmxpbmUgaW50IGlwX3ZzX3Byb2Nfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBfX3U4ICpwLCBfX3U4ICptc2dfZW5kKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTA4OC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTEyMjc9c3RhdGljIHZvaWQgaXBfdnNfcHJvY2Vzc19tZXNzYWdlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBfX3U4ICpidWZmZXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEyOTgtICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMjk5OnN0YXRpYyB2b2lkIHNldF9zb2NrX3NpemUoc3RydWN0IHNvY2sgKnNrLCBpbnQgbW9kZSwgaW50IHZhbClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEzMDAte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMzIwLSAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTMyMTpzdGF0aWMgdm9pZCBzZXRfbWNhc3RfbG9vcChzdHJ1Y3Qgc29jayAqc2ssIHVfY2hhciBsb29wKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTMyMi17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEzMzUtICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMzM2OnN0YXRpYyB2b2lkIHNldF9tY2FzdF90dGwoc3RydWN0IHNvY2sgKnNrLCB1X2NoYXIgdHRsKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTMzNy17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEzNTQtLyogQ29udHJvbCBmcmFnbWVudGF0aW9uIG9mIG1lc3NhZ2VzICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMzU1OnN0YXRpYyB2b2lkIHNldF9tY2FzdF9wbXR1ZGlzYyhzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMzU2LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTM3NS0gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEzNzY6c3RhdGljIGludCBzZXRfbWNhc3RfaWYoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTM3Ny17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTE0MDU9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTQwNjpqb2luX21jYXN0X2dyb3VwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluX2FkZHIgKmFkZHIsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNDA3LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTQyNz1zdGF0aWMgaW50IGpvaW5fbWNhc3RfZ3JvdXA2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluNl9hZGRyICphZGRyLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNDQyLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTQ0MzpzdGF0aWMgaW50IGJpbmRfbWNhc3RpZl9hZGRyKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNDQ0LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTU5NT1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNTk2OmlwX3ZzX3NlbmRfYXN5bmMoc3RydWN0IHNvY2tldCAqc29jaywgY29uc3QgY2hhciAqYnVmZmVyLCBjb25zdCBzaXplX3QgbGVuZ3RoKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTU5Ny17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTE2MTA9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTYxMTppcF92c19zZW5kX3N5bmNfbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBpcF92c19zeW5jX21lc2cgKm1zZylcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE2MTIte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xNjI1PXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE2MjY6aXBfdnNfcmVjZWl2ZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBjaGFyICpidWZmZXIsIGNvbnN0IHNpemVfdCBidWZsZW4pXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNjI3LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTY0MS0vKiBXYWtldXAgdGhlIG1hc3RlciB0aHJlYWQgZm9yIHNlbmRpbmcgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE2NDI6c3RhdGljIHZvaWQgbWFzdGVyX3dha2V1cF93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTY0My17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTE2NjE9c3RhdGljIGlubGluZSBzdHJ1Y3QgaXBfdnNfc3luY19idWZmICpcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE2NjI6bmV4dF9zeW5jX2J1ZmYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcHZzX21hc3Rlcl9zeW5jX3N0YXRlICptcylcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE2NjMte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNjcyLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTY3MzpzdGF0aWMgaW50IHN5bmNfdGhyZWFkX21hc3Rlcih2b2lkICpkYXRhKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTY3NC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE3MjQtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNzI1OnN0YXRpYyBpbnQgc3luY190aHJlYWRfYmFja3VwKHZvaWQgKmRhdGEpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNzI2LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTc2Mj1pbnQgc3RhcnRfc3luY190aHJlYWQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcHZzX3N5bmNfZGFlbW9uX2NmZyAqYyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTk3Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE5Nzg6aW50IHN0b3Bfc3luY190aHJlYWQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBzdGF0ZSlcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE5Nzkte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yMDY1LSAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MjA2NjppbnQgX19uZXRfaW5pdCBpcF92c19zeW5jX25ldF9pbml0KHN0cnVjdCBuZXRuc19pcHZzICppcHZzKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjA2Ny17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTIwNzMtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoyMDc0OnZvaWQgaXBfdnNfc3luY19uZXRfY2xlYW51cChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cylcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTIwNzUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODo0Nzo1Ny4xNzMxMDI1NTVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTM1NDAxMTUyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBJUFZTIFN5bmMgRGFlbW9uIEZ1enppbmcgVGFyZ2V0cyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIG1vc3QgZWZmZWN0aXZlIGVudHJ5IHBvaW50cyBmb3IgZnV6emluZyB0aGUgSVBWUyBzeW5jIGRhZW1vbiB1c2luZyBzeXprYWxsZXIuXG5cbkZpcnN0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSwgbm9uLXN0YXRpYyBBUEkgZW50cnkgcG9pbnRzIGluIGBpcF92c19zeW5jLmNgLiBJIHNlZTogYHN0YXJ0X3N5bmNfdGhyZWFkYCwgYHN0b3Bfc3luY190aHJlYWRgLCBgaXBfdnNfc3luY19jb25uYCwgYGlwX3ZzX3N5bmNfbmV0X2luaXRgLCBhbmQgYGlwX3ZzX3N5bmNfbmV0X2NsZWFudXBgLiBUaG9zZSBzZWVtIGxpa2Ugb2J2aW91cyBzdGFydGluZyBwb2ludHMuXG5cbk5leHQsIEkgbmVlZCB0byB6ZXJvIGluIG9uIHdoYXQgKmZ1bmN0aW9ucyogd2l0aGluIGBpcF92c19zeW5jLmNgIGFyZSBhY3R1YWxseSAqbW9kaWZpZWQqIG9yIGNvcmUgdG8gdGhlIHN5bmMgcHJvY2Vzcy4gSSd2ZSBnb3Q6IGBpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzYCwgYGlwX3ZzX3Byb2Nlc3NfbWVzc2FnZV92MGAsIGBpcF92c19wcm9jX3N5bmNfY29ubmAsIGBpcF92c19wcm9jZXNzX21lc3NhZ2VgICh3aGljaCBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBjYWxscyBib3RoIGBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjBgIGFuZCBgaXBfdnNfcHJvY19zeW5jX2Nvbm5gKSwgYW5kIHRoZSBiYWNrdXAgdGhyZWFkIGBzeW5jX3RocmVhZF9iYWNrdXBgLlxuXG5Ob3csIGRpZ2dpbmcgZGVlcGVyLiBJIHNlZSB0aGF0IGBzdGFydF9zeW5jX3RocmVhZGAgaXMgdGhlIGNydWNpYWwgZW50cnkgcG9pbnQsIHNpbmNlIHVzZXJzcGFjZSBjYWxscyBpdCB2aWEgbmV0bGluayBvciBgc2V0c29ja29wdGAgd2l0aCBgSVBfVlNfU1RBVEVfQkFDS1VQYCB0byBsYXVuY2ggdGhlIGRhZW1vbi4gVGhlcmVmb3JlLCB0aGF0IGZ1bmN0aW9uIGlzIGNyaXRpY2FsLiBJbiBjb25qdW5jdGlvbiwgdGhlIG90aGVyIGZ1bmN0aW9ucyBtZW50aW9uZWQgc2hvdWxkIGFsc28gYmUgdGVzdGVkLCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoYXQgZW50cnkuXG5cbkdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2Ygc3l6a2FsbGVyLCBpdCB0YXJnZXRzIGFueSBzeW1ib2wgYXZhaWxhYmxlIGluIGAvcHJvYy9rYWxsc3ltc2AsIGV2ZW4gc3RhdGljIGZ1bmN0aW9ucyAoYXMgbG9uZyBhcyB0aGV5IGFyZW4ndCBpbmxpbmVkKS4gU28sIGluY2x1ZGluZyBib3RoIHRoZSBtb2RpZmllZCBzdGF0aWMgZnVuY3Rpb25zIGxpa2UgYGlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3NgLCBgaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwYCwgYGlwX3ZzX3Byb2Nfc3luY19jb25uYCwgYW5kIGBpcF92c19wcm9jZXNzX21lc3NhZ2VgLCAqYWxvbmcqIHdpdGggdGhlIHByaW1hcnkgZmVhdHVyZSBlbnRyeXBvaW50IGBzdGFydF9zeW5jX3RocmVhZGAgYW5kIHRoZSBgc3luY190aHJlYWRfYmFja3VwYCBsb29wLCBzaG91bGQgZ2l2ZSBtZSBleGNlbGxlbnQgY292ZXJhZ2Ugd2l0aG91dCB3YXN0aW5nIGZ1enppbmcgY3ljbGVzIG9uIGlycmVsZXZhbnQgdGFyZ2V0cy5cblxuRmluYWxseSwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIGVuc3VyZSB0aGUgcmlnaHQga2VybmVsIGNvbmZpZyBvcHRpb25zIGFyZSBzZXQuIEkga25vdyBgQ09ORklHX0lQX1ZTYCBpcyBlc3NlbnRpYWwsIG9idmlvdXNseS4gSSdtIGNoZWNraW5nIHRoZSBgS2NvbmZpZ2AgZmlsZSBhbmQgaXQgc2VlbXMgdGhpcyBhbHNvIGRlcGVuZHMgb24gYElORVQgXHUwMDI2XHUwMDI2IE5FVEZJTFRFUmAsIGFuZCBwb3RlbnRpYWxseSBgTkZfQ09OTlRSQUNLYCAob3Igbm90KS4gQnV0LCBiYXNlZCBvbiBteSBxdWljayBwZXJ1c2FsIG9mIGBpcF92c19zeW5jLmNgIHRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb3IgYCNpZmRlZmAgYmxvY2tzIGFyb3VuZCB0aGUgc3luYyBkYWVtb24gaXRzZWxmLiBJdCBsb29rcyBsaWtlIHRoZSBzeW5jIGRhZW1vbiBpcyBhbHdheXMgY29tcGlsZWQgd2hlbiBgSVBfVlNgIGlzIGVuYWJsZWQuIEV4Y2VsbGVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUwOTIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6NDg6MDIuNTI3MTE2NTAxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTQ1MTYyNTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWZkZWYuKkNPTkZJR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9NjI5PXZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02NjktXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo2NzA6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02NzEtXFx0aWYgKGNwLVxcdTAwM2VhZiA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzMyLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NzMzOiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzM0LVxcdGlmIChjcC1cXHUwMDNlYWYgPT0gQUZfSU5FVDYpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9Nzg4PWlwX3ZzX2Nvbm5fZmlsbF9wYXJhbV9zeW5jKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgYWYsIHVuaW9uIGlwX3ZzX3N5bmNfY29ubiAqc2MsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTc5Mi17XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo3OTM6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03OTQtXFx0aWYgKGFmID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xMDg3PXN0YXRpYyBpbmxpbmUgaW50IGlwX3ZzX3Byb2Nfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBfX3U4ICpwLCBfX3U4ICptc2dfZW5kKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMTAxLVxcdGlmIChzLVxcdTAwM2V2Ni50eXBlIFxcdTAwMjYgU1RZUEVfRl9JTkVUNikge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTEwMjojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTExMDMtXFx0XFx0YWYgPSBBRl9JTkVUNjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTIwNS1cXHRcXHRcXHRcXHQpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTIwNjojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEyMDctXFx0ZWxzZVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xMzIxPXN0YXRpYyB2b2lkIHNldF9tY2FzdF9sb29wKHN0cnVjdCBzb2NrICpzaywgdV9jaGFyIGxvb3ApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEzMjQtXFx0aW5ldF9hc3NpZ25fYml0KE1DX0xPT1AsIHNrLCBsb29wKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEzMjU6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMzI2LVxcdGlmIChSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX2ZhbWlseSkgPT0gQUZfSU5FVDYpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTMzNj1zdGF0aWMgdm9pZCBzZXRfbWNhc3RfdHRsKHN0cnVjdCBzb2NrICpzaywgdV9jaGFyIHR0bClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTM0Mi1cXHRXUklURV9PTkNFKGluZXQtXFx1MDAzZW1jX3R0bCwgdHRsKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEzNDM6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMzQ0LVxcdGlmIChzay1cXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTEzNTU9c3RhdGljIHZvaWQgc2V0X21jYXN0X3BtdHVkaXNjKHN0cnVjdCBzb2NrICpzaywgaW50IHZhbClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTM2MS1cXHRXUklURV9PTkNFKGluZXQtXFx1MDAzZXBtdHVkaXNjLCB2YWwpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTM2MjojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEzNjMtXFx0aWYgKHNrLVxcdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTM3Nj1zdGF0aWMgaW50IHNldF9tY2FzdF9pZihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEzODUtXFx0LyogIGluZXQtXFx1MDAzZW1jX2FkZHIgID0gMDsgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEzODY6I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMzg3LVxcdGlmIChzay1cXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTE0MDY9am9pbl9tY2FzdF9ncm91cChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbl9hZGRyICphZGRyLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNDI1LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTQyNjojaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE0Mjctc3RhdGljIGludCBqb2luX21jYXN0X2dyb3VwNihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbjZfYWRkciAqYWRkcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTU0ND1zdGF0aWMgaW50IG1ha2VfcmVjZWl2ZV9zb2NrKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgaWQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE1NzQtXFx0Lyogam9pbiB0aGUgbXVsdGljYXN0IGdyb3VwICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNTc1OiNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTU3Ni1cXHRpZiAoaXB2cy1cXHUwMDNlYmNmZy5tY2FzdF9hZiA9PSBBRl9JTkVUNilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6NDg6MDIuODgxNjM5NDgzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ4MzQ4MzIwMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIElQVlMgU3luY2hyb25pemF0aW9uIFBhdGNoKipcblxuT2theSwgc28gYGlwX3ZzX3N5bmMub2AgaXMgZGVmaW5pdGVseSBidWlsdCBhbG9uZ3NpZGUgYGlwX3ZzYCB3aGVuZXZlciB0aGUgbWFpbiBgQ09ORklHX0lQX1ZTYCBvcHRpb24gaXMgZW5hYmxlZCDigJMgdGhhdCdzIGEgZ2l2ZW4uIEFuZCwgb2YgY291cnNlLCBgQ09ORklHX0lQX1ZTX0lQVjZgIHByb3ZpZGVzIElQdjYgc3VwcG9ydCwgYXMgZXhwZWN0ZWQuIExldCdzIG1ha2Ugc3VyZSBgQ09ORklHX0lQX1ZTYCBpdHNlbGYgaXMgZW5hYmxlZC4gSXRzIHBhcmVudHMgYXJlIGBORVRGSUxURVJgIGFuZCBgSU5FVGAsIHdoaWNoIGFyZSBmYWlybHkgZnVuZGFtZW50YWwuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgaW1wb3J0YW50IGZ1bmN0aW9uczpcblxuKiAgIGBpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzYDogRmxhZyB2YWxpZGF0aW9uLCB0aGF0J3MgY3J1Y2lhbC5cbiogICBgaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwYCwgYGlwX3ZzX3Byb2Nlc3NfbWVzc2FnZWA6IEkgbmVlZCB0byBsb29rIGF0IGJvdGggdjAgYW5kIHYxIHN5bmMgbWVzc2FnZXMuXG4qICAgYGlwX3ZzX3Byb2Nfc3luY19jb25uYDogQ29ubmVjdGluZyBzeW5jaHJvbml6YXRpb24uXG4qICAgYHN0YXJ0X3N5bmNfdGhyZWFkYCwgYHN5bmNfdGhyZWFkX2JhY2t1cGA6IFRocmVhZCBtYW5hZ2VtZW50LlxuXG5IZXJlJ3MgbXkgRW5hYmxlQ29uZmlncyBjaGVja2xpc3Q6XG5cbiogICBgSVBfVlNgXG4qICAgYE5FVEZJTFRFUmBcbiogICBgSU5FVGBcblxuV29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gVGhlIHBhdGNoIGRlYWxzIHdpdGggaW5jb21pbmcgc3luY2hyb25pemF0aW9uIG1lc3NhZ2VzIGZyb20gYmFja3VwIElQVlMgdGhyZWFkcyDigJMgcG90ZW50aWFsbHkgZnJvbSB1bnRydXN0ZWQgc291cmNlcywgYW5kIGZsYWdzIHdoaWNoIGNhbiBoYXZlIGluY29tcGF0aWJpbGl0aWVzLiBJdCBsb29rcyBsaWtlIGBpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzYCBwcmV2ZW50cyB0aGluZ3MgbGlrZSBgSVBfVlNfQ09OTl9GX05PX0NQT1JUYCBhbmQgYElQX1ZTX0NPTk5fRl9URU1QTEFURWAgZnJvbSBtaXhpbmcgd2l0aCBgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVRgIGZsYWdzLiBTaW5jZSB0aGlzIGNvZGUgcnVucyBpbiB0aGUga2VybmVsIGFuZCBwcm9jZXNzZXMgbmV0d29yayBwYWNrZXRzLCBpdCdzIGRlZmluaXRlbHkgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy4gSXQgaW1wYWN0cyB0aGUgbmV0ZmlsdGVyL0lQVlMgc3Vic3lzdGVtIGFuZCByZWFjaGFibGUgbmV0d29yayBjb2RlLlxuXG5GaW5hbGx5LCBsZXQncyBydW4gYSBzYW5pdHkgY2hlY2sgb24gdGhlIGluc3RydWN0aW9uIHNldDpcblxuKiAgIE9uZSBgc2V0LXJlc3VsdHNgIGNhbGwuIENoZWNrLlxuKiAgIEVuYWJsZUNvbmZpZ3MgYXJlIGNvcnJlY3QuIENoZWNrLlxuKiAgIEZvY3VzU3ltYm9scyBhcmUgc3BlY2lmaWMsIG5vdCBnZW5lcmljIOKAkyB0aGVzZSBhcmUgZ29vZCB0YXJnZXRzIGZvciBkZWVwZXIgYW5hbHlzaXMuIENoZWNrLlxuKiAgIFRoZSByZWFzb25pbmcgaXMgY29uY2lzZSBhbmQgdG8gdGhlIHBvaW50LiBDaGVjay5cblxuRXZlcnl0aGluZyBjaGVja3Mgb3V0LiBJJ20gc2F0aXNmaWVkLiBUaW1lIHRvIG1vdmUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3ODI3LCJPdXRwdXRUb2tlbnMiOjIwNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODo0ODowNy43MTY0NzM1MzlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDcxMjE4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfVlNcIixcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3NcIixcbiAgICBcImlwX3ZzX3Byb2Nlc3NfbWVzc2FnZV92MFwiLFxuICAgIFwiaXBfdnNfcHJvY19zeW5jX2Nvbm5cIixcbiAgICBcImlwX3ZzX3Byb2Nlc3NfbWVzc2FnZVwiLFxuICAgIFwic3luY190aHJlYWRfYmFja3VwXCIsXG4gICAgXCJzdGFydF9zeW5jX3RocmVhZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZmxhZyB2YWxpZGF0aW9uIChpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzKSBhbmQgcHJvcGVyIG1hc2tpbmcgd2hlbiBwYXJzaW5nIGluY29taW5nIElQVlMgc3luYyBtZXNzYWdlcyBpbiB0aGUgYmFja3VwIGRhZW1vbiwgcmVqZWN0aW5nIGluY29tcGF0aWJsZSBmbGFncyBzdWNoIGFzIElQX1ZTX0NPTk5fRl9OT19DUE9SVCB3aXRoIElQX1ZTX0NPTk5fRl9URU1QTEFURSBvciBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVCBpbiBib3RoIHYwIGFuZCB2MSBtZXNzYWdlIGZvcm1hdHMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmsgcHJvdG9jb2wgcHJvY2Vzc2luZyBpbiBuZXRmaWx0ZXIvSVBWUyBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9WU1wiLFxuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfdnNfc3luY192YWxpZGF0ZV9mbGFnc1wiLFxuICAgIFwiaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwXCIsXG4gICAgXCJpcF92c19wcm9jX3N5bmNfY29ublwiLFxuICAgIFwiaXBfdnNfcHJvY2Vzc19tZXNzYWdlXCIsXG4gICAgXCJzeW5jX3RocmVhZF9iYWNrdXBcIixcbiAgICBcInN0YXJ0X3N5bmNfdGhyZWFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmbGFnIHZhbGlkYXRpb24gKGlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3MpIGFuZCBwcm9wZXIgbWFza2luZyB3aGVuIHBhcnNpbmcgaW5jb21pbmcgSVBWUyBzeW5jIG1lc3NhZ2VzIGluIHRoZSBiYWNrdXAgZGFlbW9uLCByZWplY3RpbmcgaW5jb21wYXRpYmxlIGZsYWdzIHN1Y2ggYXMgSVBfVlNfQ09OTl9GX05PX0NQT1JUIHdpdGggSVBfVlNfQ09OTl9GX1RFTVBMQVRFIG9yIElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUIGluIGJvdGggdjAgYW5kIHYxIG1lc3NhZ2UgZm9ybWF0cy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0d29yayBwcm90b2NvbCBwcm9jZXNzaW5nIGluIG5ldGZpbHRlci9JUFZTIGFuZCB3YXJyYW50cyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODo0ODowNy43OTExOTMwMTdaIiwiU2VxIjozMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNjcyNDI3NDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6NDg6MDcuNzkxNjE0NjI4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NjI2NzE5OTkzMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZmxhZyB2YWxpZGF0aW9uIChgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFnc2ApIGluIHRoZSBJUFZTIHN5bmNocm9uaXphdGlvbiBtZXNzYWdlIGhhbmRsaW5nIGZ1bmN0aW9ucyAoYGlwX3ZzX3Byb2Nlc3NfbWVzc2FnZV92MGAgYW5kIGBpcF92c19wcm9jX3N5bmNfY29ubmApIHRvIHJlamVjdCBpbnZhbGlkIGZsYWcgY29tYmluYXRpb25zIChlLmcuLCBgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVRgIG9yIGBJUF9WU19DT05OX0ZfTk9fQ1BPUlRgIGNvbWJpbmVkIHdpdGggYElQX1ZTX0NPTk5fRl9URU1QTEFURWApLiBUaGUgZmxhZ3MgdmFyaWFibGUgaXMgZGlyZWN0bHkgaW5pdGlhbGl6ZWQgZnJvbSByZWNlaXZlZCBuZXR3b3JrIHBhY2tldCBkYXRhIChgbnRvaHNgIC8gYG50b2hsYCksIGFuZCB0aGUgdmFsaWRhdGlvbiBsb2dpYyBvbmx5IGFkZHMgZWFybHkgcmVqZWN0aW9uIG9mIGludmFsaWQgc3luYyBtZXNzYWdlcy4gTm8gaGVhcC9zdGFjayBtZW1vcnkgYWxsb2NhdGlvbnMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQsIG5vIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb25zIG9yIGNvcHlpbmcgdG8gdXNlciBzcGFjZSBhcmUgYWx0ZXJlZCwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBwYWRkaW5nIGFyZSByZWFkIG9yIGV4cG9zZWQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHN0ZW1taW5nIGZyb20gaW5jb21wYXRpYmxlIGZsYWdzIChzdWNoIGFzIHN0YXRlIGluY29uc2lzdGVuY2llcywgcmVmY291bnQgZXJyb3JzLCBvciB1c2UtYWZ0ZXItZnJlZSkgYXJlIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgS0FTQU4vcmVmY291bnQgY2hlY2tzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZmNzI2OTkxZTZhZjY5NzEzMTFhMGEwMDY5MmIwYTFiYjFjMjM5M2RcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAxODo0NjozNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jXG5pbmRleCA1MzgzYWVhZmIwYWVkLi42OWRjMjgxNTNlYzEyIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY1xuQEAgLTk0OSw2ICs5NDksMjEgQEAgc3RhdGljIHZvaWQgaXBfdnNfcHJvY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubl9wYXJhbSAqcGFcbiBcdGlwX3ZzX2Nvbm5fcHV0KGNwKTtcbiB9XG4gXG4rLyogQ2hlY2sgZm9yIGluY29tcGF0aWJsZSBmbGFncyAqL1xuK3N0YXRpYyBib29sIGlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3ModTMyIGZsYWdzKVxuK3tcbitcdC8qIFdlIGRvIG5vdCBleHBlY3QgTk9fQ1BPUlQsIGVzcGVjaWFsbHkgdG8gYWxsb3cgbG9va3Vwc1xuK1x0ICogdG8gaGl0IHRlbXBsYXRlc1xuK1x0ICovXG4rXHRpZiAoZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9OT19DUE9SVCkge1xuK1x0XHRpZiAoZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9URU1QTEFURSlcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4rXHRpZiAoZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4gLypcbiAgKiAgUHJvY2VzcyByZWNlaXZlZCBtdWx0aWNhc3QgbWVzc2FnZSBmb3IgVmVyc2lvbiAwXG4gICovXG5AQCAtOTcyLDggKzk4Nyw3IEBAIHN0YXRpYyB2b2lkIGlwX3ZzX3Byb2Nlc3NfbWVzc2FnZV92MChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgY29uc3QgY2hhciAqYnVmZmVyXG4gXHRcdFx0cmV0dXJuO1xuIFx0XHR9XG4gXHRcdHMgPSAoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl92MCAqKSBwO1xuLVx0XHRmbGFncyA9IG50b2hzKHMtXHUwMDNlZmxhZ3MpIHwgSVBfVlNfQ09OTl9GX1NZTkM7XG4tXHRcdGZsYWdzIFx1MDAyNj0gfklQX1ZTX0NPTk5fRl9IQVNIRUQ7XG4rXHRcdGZsYWdzID0gbnRvaHMocy1cdTAwM2VmbGFncyk7XG4gXHRcdGlmIChmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX1NFUV9NQVNLKSB7XG4gXHRcdFx0b3B0ID0gKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqKVx1MDAyNnNbMV07XG4gXHRcdFx0cCArPSBGVUxMX0NPTk5fU0laRTtcbkBAIC05ODYsNiArMTAwMCwxMyBAQCBzdGF0aWMgdm9pZCBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGNvbnN0IGNoYXIgKmJ1ZmZlclxuIFx0XHRcdHAgKz0gU0lNUExFX0NPTk5fU0laRTtcbiBcdFx0fVxuIFxuK1x0XHRpZiAoIWlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3MoZmxhZ3MpKSB7XG4rXHRcdFx0SVBfVlNfREJHKDIsIFwiQkFDS1VQIHYwLCBJbnZhbGlkIGZsYWdzIDB4JVhcXG5cIiwgZmxhZ3MpO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXHRcdGZsYWdzIFx1MDAyNj0gSVBfVlNfQ09OTl9GX0JBQ0tVUF9NQVNLO1xuK1x0XHRmbGFncyB8PSBJUF9WU19DT05OX0ZfU1lOQztcbitcbiBcdFx0c3RhdGUgPSBudG9ocyhzLVx1MDAzZXN0YXRlKTtcbiBcdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9URU1QTEFURSkpIHtcbiBcdFx0XHRwcCA9IGlwX3ZzX3Byb3RvX2dldChzLVx1MDAzZXByb3RvY29sKTtcbkBAIC0xMTQxLDcgKzExNjIsMTMgQEAgc3RhdGljIGlubGluZSBpbnQgaXBfdnNfcHJvY19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIF9fdTggKnAsIF9fdTggKm1cbiBcdH1cbiBcbiBcdC8qIEdldCBmbGFncyBhbmQgTWFzayBvZmYgdW5zdXBwb3J0ZWQgKi9cbi1cdGZsYWdzICA9IG50b2hsKHMtXHUwMDNldjQuZmxhZ3MpIFx1MDAyNiBJUF9WU19DT05OX0ZfQkFDS1VQX01BU0s7XG4rXHRmbGFncyA9IG50b2hsKHMtXHUwMDNldjQuZmxhZ3MpO1xuK1x0aWYgKCFpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzKGZsYWdzKSkge1xuK1x0XHRJUF9WU19EQkcoMywgXCJCQUNLVVAsIEludmFsaWQgZmxhZ3MgMHglWFxcblwiLCBmbGFncyk7XG4rXHRcdHJldGMgPSAyNTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXHRmbGFncyBcdTAwMjY9IElQX1ZTX0NPTk5fRl9CQUNLVVBfTUFTSztcbiBcdGZsYWdzIHw9IElQX1ZTX0NPTk5fRl9TWU5DO1xuIFx0c3RhdGUgPSBudG9ocyhzLVx1MDAzZXY0LnN0YXRlKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjQ4OjA3Ljc5MTYxNTYyOFoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMDY3MjU1NTY5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIFNlc3Npb24gSnVzdGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyeWluZyB0byBkZWNpZGUgaWYgaXQgd2FycmFudHMgZmlyaW5nIHVwIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTGV0J3MgYnJlYWsgaXQgZG93bi5cblxuRmlyc3QsIEkgc2VlIHRoZSBwYXRjaCBtb2RpZmllcyBgbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY2AuIFRoaXMgaXMgYWJvdXQgSVBWUyAoSVAgVmlydHVhbCBTZXJ2ZXIpLCBzcGVjaWZpY2FsbHkgdGhlIHN5bmNocm9uaXphdGlvbiBjb2RlLiBJIGtub3cgdGhpcyBhcmVhIGlzIGEgY3JpdGljYWwgY29tcG9uZW50IGZvciBsb2FkIGJhbGFuY2luZyBhbmQgaGlnaCBhdmFpbGFiaWxpdHksIGFuZCB0aGVyZWZvcmUgYSBwbGFjZSB3aGVyZSBzdWJ0bGUgZXJyb3JzIGNhbiBoYXZlIHNpZ25pZmljYW50IGltcGFjdC4gU3luY2hyb25pemF0aW9uLCBieSBpdHMgbmF0dXJlLCBpcyBhIGNvbW1vbiBzb3VyY2Ugb2YgY29uY3VycmVuY3kgaXNzdWVzLlxuXG5UaGUgY29yZSBvZiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIHZhbGlkYXRpb24gZnVuY3Rpb24sIGBpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzKClgLiAgSXQgc2VlbXMgd2UncmUgbm93IGV4cGxpY2l0bHkgY2hlY2tpbmcgdGhlIHZhbGlkaXR5IG9mIGNvbm5lY3Rpb24gZmxhZ3MgcmVjZWl2ZWQgZHVyaW5nIHN5bmNocm9uaXphdGlvbi4gVGhlIGNvZGUgaXMgc3BlY2lmaWNhbGx5IGd1YXJkaW5nIGFnYWluc3QgYElQX1ZTX0NPTk5fRl9OT19DUE9SVGAgYW5kIGBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVGAgaW4gY2VydGFpbiBjb21iaW5hdGlvbnMsIGFuZCBub3cgYWRkcyBhIGNoZWNrIHRvIGNvbmZpcm0gZmxhZ3MgZG9uJ3QgZ2V0ICdoYXNoZWQnLCBiZWZvcmUgYXBwbHlpbmcgdGhlIHByb3BlciBtYXNrLCB3aGljaCBpbmNyZWFzZXMgdGhlIGxpa2VsaWhvb2Qgb2YgYW4gZXJyb3Igc3RhdGUgYmVpbmcgY2F1Z2h0LiBJJ20gaW5mZXJyaW5nIHRoaXMgaXMgYmVjYXVzZSBjZXJ0YWluIGZsYWcgY29tYmluYXRpb25zIGNhbiBsZWFkIHRvIGluY29uc2lzdGVuY2llcyBvciBlcnJvcnMgaW4gaG93IGNvbm5lY3Rpb25zIGFyZSBoYW5kbGVkLCBlc3BlY2lhbGx5IHdoZW4gdXNlZCB3aXRoIGBJUF9WU19DT05OX0ZfVEVNUExBVEVgLiBUaGUgY2hlY2tzIGFyZSBhbHNvIGFkZGVkIHRvIGJvdGggdGhlIHYwIGFuZCB2NCBwcm9jZXNzaW5nLlxuXG5UaGUgY29tbWl0IGxvZyBpbXBsaWVzIHRoYXQgdGhlc2UgY2hlY2tzIGFyZSByZWxhdGVkIHRvIGFuIGlzc3VlIHdoZXJlIGJhZCBmbGFnIHZhbHVlcyBhcmUgYmVpbmcgcmVjZWl2ZWQgZHVyaW5nIHRoZSBzeW5jaHJvbml6YXRpb24gcHJvY2VzcyBhbmQgdGhlIHBhdGNoIG5vdyBndWFyZHMgYWdhaW5zdCB0aGF0LiBHaXZlbiB0aGUgc2Vuc2l0aXZlIG5hdHVyZSBvZiB0aGlzIGNvZGUsIHRoZSBjaGFuZ2UgaW4gYmVoYXZpb3IgaXMgd29ydGggbG9va2luZyBpbnRvLlxuXG5HaXZlbiB0aGUgcG90ZW50aWFsIGZvciBzdWJ0bGUgZXJyb3JzIGluIHRoZSBzeW5jaHJvbml6YXRpb24gcHJvY2VzcywgYW5kIHRoZSBpbnRyb2R1Y3Rpb24gb2YgbmV3IGNoZWNrcywgdGhpcyBwYXRjaCBpcyBhIHN0cm9uZyBjYW5kaWRhdGUgZm9yIEtNU0FOIGZ1enppbmcuIFRoZSBjaGVja3Mgd2lsbCBsaWtlbHkgaW5jcmVhc2UgdGhlIGxpa2VsaWhvb2Qgb2YgZGlzY292ZXJpbmcgYW5kIGV4cG9zaW5nIGFueSBleGlzdGluZyBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuIEl0IGFsc28gc3VnZ2VzdHMgdGhhdCB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgbW9yZSBjb21wbGV4IHRoYW4gaXQgZmlyc3QgYXBwZWFycywgd2hpY2ggcmVxdWlyZXMgZXh0cmEgdGVzdGluZyBhbmQgdmFsaWRhdGlvbi4gSSdsbCByZWNvbW1lbmQgdGhlIGZ1enppbmcgc2Vzc2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgwOSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMjQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODo0ODoxOC40NjQxNzUwMThaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MTAwMjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3ZzX3Byb2Nfc3luY19jb25uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xMDY3PXN0YXRpYyBpbnQgaXBfdnNfcHJvY19zdHIoX191OCAqcCwgdW5zaWduZWQgaW50IHBsZW4sIHVuc2lnbmVkIGludCAqZGF0YV9sZW4sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEwODYtICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMDg3OnN0YXRpYyBpbmxpbmUgaW50IGlwX3ZzX3Byb2Nfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBfX3U4ICpwLCBfX3U4ICptc2dfZW5kKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTA4OC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTEyMjc9c3RhdGljIHZvaWQgaXBfdnNfcHJvY2Vzc19tZXNzYWdlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBfX3U4ICpidWZmZXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEyNzgtXFx0XFx0XFx0LyogUHJvY2VzcyBhIHNpbmdsZSBzeW5jX2Nvbm4gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEyNzk6XFx0XFx0XFx0cmV0YyA9IGlwX3ZzX3Byb2Nfc3luY19jb25uKGlwdnMsIHAsIG1zZ19lbmQpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTI4MC1cXHRcXHRcXHRpZiAocmV0YyBcXHUwMDNjIDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6NDg6MTguNTEyMjgwOTM3WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIxNDM4Mzk0NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJUFZTIFN5bmNocm9uaXphdGlvbiBDb2RlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgSVBWUyBzeW5jcyBpdHMgc3RhdGUsIHBhcnRpY3VsYXJseSB3aGVuIGl0IGNvbWVzIHRvIHJlcGxpY2F0aW5nIGFuZCBtYWludGFpbmluZyBjbHVzdGVyIGNvbnNpc3RlbmN5LiBHaXZlbiB0aGUgbmVlZCB0byBkZWVwbHkgdW5kZXJzdGFuZCB0aGUgc3luY2hyb25pemF0aW9uIHByb2Nlc3MsIEkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG9uIHR3byBzcGVjaWZpYyBhcmVhcyB3aXRoaW4gYGlwX3ZzX3N5bmMuY2AuIExldCdzIHRhcmdldCBsaW5lcyA5NTAtMTAxMCBhbmQgdGhlbiBsaW5lcyAxMTMwLTExNzUuIFRoYXQgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhvc2Ugc2VjdGlvbnMgbGlrZWx5IGRlYWwgd2l0aCBjb3JlIHN5bmNocm9uaXphdGlvbiBvcGVyYXRpb25zIOKAkyBwZXJoYXBzIHRoZSBoZWFydCBvZiBob3cgZGlmZmVyZW50IG5vZGVzIG1haW50YWluIGEgY29uc2lzdGVudCB2aWV3IG9mIHRoZSB2aXJ0dWFsIHNlcnZpY2VzIGFuZCByZWFsIHNlcnZlcnMuIEZvY3VzaW5nIG9uIHRob3NlIHNlY3Rpb25zIHNob3VsZCBxdWlja2x5IHJldmVhbCBzb21lIG9mIHRoZSBudWFuY2VzIG9mIHRoZSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyBpbiB1c2UuIEkgZXhwZWN0IHRvIHNlZSBkYXRhIHN0cnVjdHVyZXMsIGFsZ29yaXRobXMsIGFuZCBwb3NzaWJseSBzb21lIG5ldHdvcmsgcGFja2V0IGludGVyYWN0aW9ucy4gVGltZSB0byBkaWcgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2MjMsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODo0ODoyMC42NTYxMjM1MTdaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxNDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTQwLFxuICBcIkxpbmVDb3VudFwiOiA3NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTQwOlxcdFxcdH0gZWxzZSB7XFxuIDk0MTpcXHRcXHRcXHRzdHJ1Y3QgaXBfdnNfcHJvdG9fZGF0YSAqcGQ7XFxuIDk0MjpcXHRcXG4gOTQzOlxcdFxcdFxcdHBkID0gaXBfdnNfcHJvdG9fZGF0YV9nZXQoaXB2cywgcHJvdG9jb2wpO1xcbiA5NDQ6XFx0XFx0XFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfVEVNUExBVEUpIFxcdTAwMjZcXHUwMDI2IHBkIFxcdTAwMjZcXHUwMDI2IHBkLVxcdTAwM2V0aW1lb3V0X3RhYmxlKVxcbiA5NDU6XFx0XFx0XFx0XFx0Y3AtXFx1MDAzZXRpbWVvdXQgPSBwZC1cXHUwMDNldGltZW91dF90YWJsZVtzdGF0ZV07XFxuIDk0NjpcXHRcXHRcXHRlbHNlXFxuIDk0NzpcXHRcXHRcXHRcXHRjcC1cXHUwMDNldGltZW91dCA9ICgzKjYwKkhaKTtcXG4gOTQ4OlxcdFxcdH1cXG4gOTQ5OlxcdFxcdGlwX3ZzX2Nvbm5fcHV0KGNwKTtcXG4gOTUwOlxcdH1cXG4gOTUxOlxcdFxcbiA5NTI6XFx0LyogQ2hlY2sgZm9yIGluY29tcGF0aWJsZSBmbGFncyAqL1xcbiA5NTM6XFx0c3RhdGljIGJvb2wgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyh1MzIgZmxhZ3MpXFxuIDk1NDpcXHR7XFxuIDk1NTpcXHRcXHQvKiBXZSBkbyBub3QgZXhwZWN0IE5PX0NQT1JULCBlc3BlY2lhbGx5IHRvIGFsbG93IGxvb2t1cHNcXG4gOTU2OlxcdFxcdCAqIHRvIGhpdCB0ZW1wbGF0ZXNcXG4gOTU3OlxcdFxcdCAqL1xcbiA5NTg6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX05PX0NQT1JUKSB7XFxuIDk1OTpcXHRcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfVEVNUExBVEUpXFxuIDk2MDpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDk2MTpcXHRcXHR9XFxuIDk2MjpcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVClcXG4gOTYzOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gOTY0OlxcdFxcdHJldHVybiB0cnVlO1xcbiA5NjU6XFx0fVxcbiA5NjY6XFx0XFxuIDk2NzpcXHQvKlxcbiA5Njg6XFx0ICogIFByb2Nlc3MgcmVjZWl2ZWQgbXVsdGljYXN0IG1lc3NhZ2UgZm9yIFZlcnNpb24gMFxcbiA5Njk6XFx0ICovXFxuIDk3MDpcXHRzdGF0aWMgdm9pZCBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGNvbnN0IGNoYXIgKmJ1ZmZlcixcXG4gOTcxOlxcdFxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc2l6ZV90IGJ1ZmxlbilcXG4gOTcyOlxcdHtcXG4gOTczOlxcdFxcdHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjAgKm0gPSAoc3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCAqKWJ1ZmZlcjtcXG4gOTc0OlxcdFxcdHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAgKnM7XFxuIDk3NTpcXHRcXHRzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKm9wdDtcXG4gOTc2OlxcdFxcdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHA7XFxuIDk3NzpcXHRcXHRzdHJ1Y3QgaXBfdnNfY29ubl9wYXJhbSBwYXJhbTtcXG4gOTc4OlxcdFxcdGNoYXIgKnA7XFxuIDk3OTpcXHRcXHRpbnQgaTtcXG4gOTgwOlxcdFxcbiA5ODE6XFx0XFx0cCA9IChjaGFyICopYnVmZmVyICsgc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjApO1xcbiA5ODI6XFx0XFx0Zm9yIChpPTA7IGlcXHUwMDNjbS1cXHUwMDNlbnJfY29ubnM7IGkrKykge1xcbiA5ODM6XFx0XFx0XFx0dW5zaWduZWQgaW50IGZsYWdzLCBzdGF0ZTtcXG4gOTg0OlxcdFxcbiA5ODU6XFx0XFx0XFx0aWYgKHAgKyBTSU1QTEVfQ09OTl9TSVpFIFxcdTAwM2UgYnVmZmVyK2J1Zmxlbikge1xcbiA5ODY6XFx0XFx0XFx0XFx0SVBfVlNfRVJSX1JMKFxcXCJCQUNLVVAgdjAsIGJvZ3VzIGNvbm5cXFxcblxcXCIpO1xcbiA5ODc6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiA5ODg6XFx0XFx0XFx0fVxcbiA5ODk6XFx0XFx0XFx0cyA9IChzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwICopIHA7XFxuIDk5MDpcXHRcXHRcXHRmbGFncyA9IG50b2hzKHMtXFx1MDAzZWZsYWdzKTtcXG4gOTkxOlxcdFxcdFxcdGlmIChmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9TRVFfTUFTSykge1xcbiA5OTI6XFx0XFx0XFx0XFx0b3B0ID0gKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqKVxcdTAwMjZzWzFdO1xcbiA5OTM6XFx0XFx0XFx0XFx0cCArPSBGVUxMX0NPTk5fU0laRTtcXG4gOTk0OlxcdFxcdFxcdFxcdGlmIChwIFxcdTAwM2UgYnVmZmVyK2J1Zmxlbikge1xcbiA5OTU6XFx0XFx0XFx0XFx0XFx0SVBfVlNfRVJSX1JMKFxcXCJCQUNLVVAgdjAsIERyb3BwaW5nIGJ1ZmZlciBib2d1cyBjb25uIG9wdGlvbnNcXFxcblxcXCIpO1xcbiA5OTY6XFx0XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiA5OTc6XFx0XFx0XFx0XFx0fVxcbiA5OTg6XFx0XFx0XFx0fSBlbHNlIHtcXG4gOTk5OlxcdFxcdFxcdFxcdG9wdCA9IE5VTEw7XFxuMTAwMDpcXHRcXHRcXHRcXHRwICs9IFNJTVBMRV9DT05OX1NJWkU7XFxuMTAwMTpcXHRcXHRcXHR9XFxuMTAwMjpcXHRcXG4xMDAzOlxcdFxcdFxcdGlmICghaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyhmbGFncykpIHtcXG4xMDA0OlxcdFxcdFxcdFxcdElQX1ZTX0RCRygyLCBcXFwiQkFDS1VQIHYwLCBJbnZhbGlkIGZsYWdzIDB4JVhcXFxcblxcXCIsIGZsYWdzKTtcXG4xMDA1OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjEwMDY6XFx0XFx0XFx0fVxcbjEwMDc6XFx0XFx0XFx0ZmxhZ3MgXFx1MDAyNj0gSVBfVlNfQ09OTl9GX0JBQ0tVUF9NQVNLO1xcbjEwMDg6XFx0XFx0XFx0ZmxhZ3MgfD0gSVBfVlNfQ09OTl9GX1NZTkM7XFxuMTAwOTpcXHRcXG4xMDEwOlxcdFxcdFxcdHN0YXRlID0gbnRvaHMocy1cXHUwMDNlc3RhdGUpO1xcbjEwMTE6XFx0XFx0XFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfVEVNUExBVEUpKSB7XFxuMTAxMjpcXHRcXHRcXHRcXHRwcCA9IGlwX3ZzX3Byb3RvX2dldChzLVxcdTAwM2Vwcm90b2NvbCk7XFxuMTAxMzpcXHRcXHRcXHRcXHRpZiAoIXBwKSB7XFxuMTAxNDpcXHRcXHRcXHRcXHRcXHRJUF9WU19EQkcoMiwgXFxcIkJBQ0tVUCB2MCwgVW5zdXBwb3J0ZWQgcHJvdG9jb2wgJXVcXFxcblxcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjQ4OjIwLjY1NjI5MjI5N1oiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0ODczMjI1Mjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGFzIGlmIGl0J3MgbXkgb3duIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgRGVlcGVyOiBMaW5lcyAxMTQwLTExNzUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGZvY3VzIGluIGEgYml0LiBUaGUgYnJvYWRlciBjb250ZXh0IGlzIGNsZWFyLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gY2F0Y2hpbmcgdGhlIG51YW5jZXMuIEknbSBnb2luZyB0byB6ZXJvIGluIG9uIGxpbmVzIDExNDAtMTE3NS4gVGhhdCBzZWdtZW50LCBpZiBJIHJlY2FsbCBjb3JyZWN0bHksIGlzIHdoZXJlIHRoZXkgcmVhbGx5IHN0YXJ0IHRvIHVucGFjayB0aGUgaW1wbGljYXRpb25zIG9mIFticmllZmx5IG1lbnRpb24gdGhlIHRvcGljIGZyb20gYmVmb3JlXS4gSXQncyBsaWtlbHkgYSBjcml0aWNhbCBzZWN0aW9uIGZvciB1bmRlcnN0YW5kaW5nIFttZW50aW9uIHNvbWV0aGluZyBzcGVjaWZpYywgbGlrZSBcInRoZSBpbnRlcnBsYXkgb2YgWCBhbmQgWVwiIG9yIFwidGhlIHNwZWNpZmljIG1lY2hhbmlzbSBhdCBwbGF5XCJdLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIFttZW50aW9uIGtleSB0aGluZ3MgeW91J3JlIGxvb2tpbmcgZm9yLCBsaWtlIFwiYW55IHN1YnRsZSBzaGlmdHMgaW4gdGhlIGFyZ3VtZW50LFwiIFwiZXZpZGVuY2Ugc3VwcG9ydGluZyB0aGUgaHlwb3RoZXNpcyxcIiBvciBcInBvdGVudGlhbCBjb3VudGVyYXJndW1lbnRzXCJdLiBNeSBnb2FsIGlzIHRvIGV4dHJhY3QgdGhlIGNvcmUgaWRlYXMgcHJlc2VudGVkIGFuZCBtYWtlIHN1cmUgdGhleSBhbGlnbiB3aXRoIG15IGV4aXN0aW5nIGZyYW1ld29yaywgb3IgaWRlbnRpZnkgZXhhY3RseSAqd2hlcmUqIHRoZXkgZGV2aWF0ZSBhbmQgd2h5LiBJIGV4cGVjdCB0byBiZSBhYmxlIHRvIG1ha2Ugc29tZSBpbnNpZ2h0ZnVsIGNvbW1lbnRzIG9uIHRoaXMgc2VjdGlvbjsgSSdtIHJlYWR5IHRvIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjEwNiwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6NDg6MjUuNTI5NTE5ODg2WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODY3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNDA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgSVBfVlNfUEVEQVRBX01BWExFTiwgXFx1MDAyNm9wdF9mbGFncyxcXG4xMTQxOlxcdFxcdFxcdFxcdFxcdFxcdCAgIElQVlNfT1BUX0ZfUEVfREFUQSkpXFxuMTE0MjpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLTYwO1xcbjExNDM6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTE0NDpcXHRcXG4xMTQ1OlxcdFxcdFxcdGNhc2UgSVBWU19PUFRfUEVfTkFNRTpcXG4xMTQ2OlxcdFxcdFxcdFxcdGlmIChpcF92c19wcm9jX3N0cihwLCBwbGVuLFxcdTAwMjZwZV9uYW1lX2xlbiwgXFx1MDAyNnBlX25hbWUsXFxuMTE0NzpcXHRcXHRcXHRcXHRcXHRcXHQgICBJUF9WU19QRU5BTUVfTUFYTEVOLCBcXHUwMDI2b3B0X2ZsYWdzLFxcbjExNDg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgSVBWU19PUFRfRl9QRV9OQU1FKSlcXG4xMTQ5OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtNzA7XFxuMTE1MDpcXHRcXHRcXHRcXHRicmVhaztcXG4xMTUxOlxcdFxcbjExNTI6XFx0XFx0XFx0ZGVmYXVsdDpcXG4xMTUzOlxcdFxcdFxcdFxcdC8qIFBhcmFtIGRhdGEgbWFuZGF0b3J5ID8gKi9cXG4xMTU0OlxcdFxcdFxcdFxcdGlmICghKHB0eXBlIFxcdTAwMjYgSVBWU19PUFRfRl9QQVJBTSkpIHtcXG4xMTU1OlxcdFxcdFxcdFxcdFxcdElQX1ZTX0RCRygzLCBcXFwiQkFDS1VQLCBVbmtub3duIG1hbmRhdG9yeSBwYXJhbSAlZCBmb3VuZFxcXFxuXFxcIixcXG4xMTU2OlxcdFxcdFxcdFxcdFxcdFxcdCAgcHR5cGUgXFx1MDAyNiB+SVBWU19PUFRfRl9QQVJBTSk7XFxuMTE1NzpcXHRcXHRcXHRcXHRcXHRyZXRjID0gMjA7XFxuMTE1ODpcXHRcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4xMTU5OlxcdFxcdFxcdFxcdH1cXG4xMTYwOlxcdFxcdFxcdH1cXG4xMTYxOlxcdFxcdFxcdHAgKz0gcGxlbjsgIC8qIE5leHQgb3B0aW9uICovXFxuMTE2MjpcXHRcXHR9XFxuMTE2MzpcXHRcXG4xMTY0OlxcdFxcdC8qIEdldCBmbGFncyBhbmQgTWFzayBvZmYgdW5zdXBwb3J0ZWQgKi9cXG4xMTY1OlxcdFxcdGZsYWdzID0gbnRvaGwocy1cXHUwMDNldjQuZmxhZ3MpO1xcbjExNjY6XFx0XFx0aWYgKCFpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzKGZsYWdzKSkge1xcbjExNjc6XFx0XFx0XFx0SVBfVlNfREJHKDMsIFxcXCJCQUNLVVAsIEludmFsaWQgZmxhZ3MgMHglWFxcXFxuXFxcIiwgZmxhZ3MpO1xcbjExNjg6XFx0XFx0XFx0cmV0YyA9IDI1O1xcbjExNjk6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTE3MDpcXHRcXHR9XFxuMTE3MTpcXHRcXHRmbGFncyBcXHUwMDI2PSBJUF9WU19DT05OX0ZfQkFDS1VQX01BU0s7XFxuMTE3MjpcXHRcXHRmbGFncyB8PSBJUF9WU19DT05OX0ZfU1lOQztcXG4xMTczOlxcdFxcdHN0YXRlID0gbnRvaHMocy1cXHUwMDNldjQuc3RhdGUpO1xcbjExNzQ6XFx0XFxuMTE3NTpcXHRcXHRpZiAoIShmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9URU1QTEFURSkpIHtcXG4xMTc2OlxcdFxcdFxcdHBwID0gaXBfdnNfcHJvdG9fZ2V0KHMtXFx1MDAzZXY0LnByb3RvY29sKTtcXG4xMTc3OlxcdFxcdFxcdGlmICghcHApIHtcXG4xMTc4OlxcdFxcdFxcdFxcdElQX1ZTX0RCRygzLFxcXCJCQUNLVVAsIFVuc3VwcG9ydGVkIHByb3RvY29sICV1XFxcXG5cXFwiLFxcbjExNzk6XFx0XFx0XFx0XFx0XFx0cy1cXHUwMDNldjQucHJvdG9jb2wpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxODo0ODoyNS41Mjk2ODA1OTZaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjY2NjM1OTI1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzOlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgSGlzdG9yeSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgcGFydGljdWxhciBjaGFuZ2UuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgZ2l0IGhpc3RvcnkuIEEgc2ltcGxlIGBnaXQgbG9nYCBvbiB0aGlzIGNvbW1pdCBzaG91bGQgYmUgbXkgZ28tdG8uIEkgd2FudCB0byBzZWUgd2hhdCB0aGUgY29tbWl0IG1lc3NhZ2Ugc2F5cyDigJMgd2FzIGl0IGEgYnVnIGZpeD8gV2FzIGl0IGludHJvZHVjaW5nIGEgbmV3IGZlYXR1cmU/IFdoYXQgd2FzIHRoZSBjb250ZXh0PyBUaGUgY29tbWl0IG1lc3NhZ2Ugc2hvdWxkIGdpdmUgbWUgdGhlIGNydWNpYWwgaGlnaC1sZXZlbCBvdmVydmlldy4gRnJvbSB0aGVyZSwgSSdsbCBiZSBhYmxlIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IHRoaXMgY2hhbmdlIGhhZCwgYW5kIHdoeSB0aGUgY2hhbmdlIHdhcyBtYWRlIGluIHRoZSBmaXJzdCBwbGFjZS4gSSdtIHJlYWxseSBob3BpbmcgdGhlcmUncyBhIGdvb2QgZGVzY3JpcHRpb24sIG1heWJlIGV2ZW4gYSBsaW5rIHRvIGEgdGlja2V0LiBUaGlzIGlzIHRoZSBmYXN0ZXN0IHdheSB0byBnZXQgdG8gdGhlIHJvb3Qgb2YgdGhlIHJlYXNvbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA1MiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6NDg6MjguMTk2MDQyMzYzWiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODExMjgxNjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz04NDE9c3RhdGljIHZvaWQgaXBfdnNfcHJvY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubl9wYXJhbSAqcGFyYW0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTk1Mi0vKiBDaGVjayBmb3IgaW5jb21wYXRpYmxlIGZsYWdzICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo5NTM6c3RhdGljIGJvb2wgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyh1MzIgZmxhZ3MpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05NTQte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz05NzA9c3RhdGljIHZvaWQgaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBjb25zdCBjaGFyICpidWZmZXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEwMDItXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMDAzOlxcdFxcdGlmICghaXBfdnNfc3luY192YWxpZGF0ZV9mbGFncyhmbGFncykpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEwMDQtXFx0XFx0XFx0SVBfVlNfREJHKDIsIFxcXCJCQUNLVVAgdjAsIEludmFsaWQgZmxhZ3MgMHglWFxcXFxuXFxcIiwgZmxhZ3MpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xMDg3PXN0YXRpYyBpbmxpbmUgaW50IGlwX3ZzX3Byb2Nfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBfX3U4ICpwLCBfX3U4ICptc2dfZW5kKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMTY1LVxcdGZsYWdzID0gbnRvaGwocy1cXHUwMDNldjQuZmxhZ3MpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTE2NjpcXHRpZiAoIWlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3MoZmxhZ3MpKSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMTY3LVxcdFxcdElQX1ZTX0RCRygzLCBcXFwiQkFDS1VQLCBJbnZhbGlkIGZsYWdzIDB4JVhcXFxcblxcXCIsIGZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6NDg6MzAuMDA3MzMwNDcxWiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjYzNTM2MDcwOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBJUFZTIENvbm5lY3Rpb24gRmxhZ3MqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgY2VydGFpbiBjb25uZWN0aW9uIGZsYWdzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBpbXBsaWNhdGlvbnMgaWYgZWl0aGVyIGBJUF9WU19DT05OX0ZfVEVNUExBVEUgfCBJUF9WU19DT05OX0ZfTk9fQ1BPUlRgIG9yIGBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVGAgd2FzIHNldCBlYXJsaWVyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGhpc3RvcnkgYW5kIHNlZSB3aGF0IGNoYW5nZXMgb3IgYnVncyBwcm9tcHRlZCB0aGVpciBpbnRyb2R1Y3Rpb24gb3IgbW9kaWZpY2F0aW9uLiBJdCB3b3VsZCBiZSBpZGVhbCBpZiBJIGhhZCBkaXJlY3QgYWNjZXNzIHRvIGEgYGdpdGAgY29tbWFuZCBmb3IgYSBxdWljayBoaXN0b3J5IGNoZWNrLCBidXQgdGhhdCdzIG5vdCBhdmFpbGFibGUuIE5vIHdvcnJpZXMsIEkgY2FuIHdvcmsgd2l0aCB0aGUgZGlmZi4gVGltZSB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBzb3VyY2UsIHNwZWNpZmljYWxseSBgbmV0L25ldGZpbHRlci9pcHZzYCBhbmQgZXhhbWluZSB0aGUgZGVmaW5pdGlvbnMgYW5kIHVzYWdlIG9mIGBJUF9WU19DT05OX0ZfTk9fQ1BPUlRgIGFuZCBgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVRgIHRvIGdldCB0aGUgd2hvbGUgcGljdHVyZS4gSSdtIHN1cmUgSSdsbCBmaW5kIHdoYXQgSSBuZWVkIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzY0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjQ4OjM2LjM2MDk0MDE2NFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA0NDQ3MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSVBfVlNfQ09OTl9GX05PX0NQT1JUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2c1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTM2Nz1fX2lwX3ZzX2Nvbm5faW5fZ2V0KGNvbnN0IHN0cnVjdCBpcF92c19jb25uX3BhcmFtICpwKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0zOTUtXFx0XFx0XFx0XFx0ICAgICghcC1cXHUwMDNlY3BvcnQgXlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6Mzk2OlxcdFxcdFxcdFxcdCAgICAgKCEoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX05PX0NQT1JUKSkpIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0zOTctXFx0XFx0XFx0XFx0ICAgIHAtXFx1MDAzZXByb3RvY29sID09IGNwLVxcdTAwM2Vwcm90b2NvbCkge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz02NDM9dm9pZCBpcF92c19jb25uX2ZpbGxfY3BvcnQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBfX2JlMTYgY3BvcnQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTY4NC1cXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmNwLVxcdTAwM2Vsb2NrKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjY4NTpcXHRcXHRcXHRpZiAoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX05PX0NQT1JUIFxcdTAwMjZcXHUwMDI2IGJ5X21lKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNjg2LVxcdFxcdFxcdFxcdGNwLVxcdTAwM2VjcG9ydCA9IDA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTc1Ny1cXHQvKiBGaWxsIGNwb3J0IG9uY2UsIGV2ZW4gaWYgbXVsdGlwbGUgcGFja2V0cyB0cnkgdG8gZG8gaXQgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjc1ODpcXHRpZiAoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX05PX0NQT1JUIFxcdTAwMjZcXHUwMDI2ICghY3AtXFx1MDAzZWNwb3J0IHx8IGJ5X21lKSkge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNzU5LVxcdFxcdC8qIElmIHdlIHJhY2Ugd2l0aCByZXNpemluZyBtYWtlIHN1cmUgY3BvcnQgaXMgc2V0IGZvciBkaXIgMSAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy03NjUtXFx0XFx0XFx0YXRvbWljX2RlYyhcXHUwMDI2aXB2cy1cXHUwMDNlbm9fY3BvcnRfY29ubnNbYWZfaWRdKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjc2NjpcXHRcXHRcXHRjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfklQX1ZTX0NPTk5fRl9OT19DUE9SVDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTc2Ny1cXHRcXHR9XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTg3NT1zdHJ1Y3QgaXBfdnNfcmh0ICppcF92c19jb25uX3RhYl9hbGxvYyhzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGJ1Y2tldHMsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTg4Mi1cXHRzY291bnRzID0gY2xhbXAoYnVja2V0cyBcXHUwMDNlXFx1MDAzZSA2LCAxLCAyNTYpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6ODgzOlxcdC8qIGxvY2tzOiBiYXNlZCBvbiBwYXJhbGxlbCBJUF9WU19DT05OX0ZfTk9fQ1BPUlQgb3BlcmF0aW9ucyArIHJlc2l6ZSAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtODg0LVxcdGxvY2tzID0gY2xhbXAoOCwgMSwgc2NvdW50cyk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTEzNDc9c3RhdGljIHZvaWQgaXBfdnNfY29ubl9leHBpcmUoc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEzOTQtXFx0XFx0aXBfdnNfdW5iaW5kX2Rlc3QoY3ApO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTM5NTpcXHRcXHRpZiAodW5saWtlbHkoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX05PX0NQT1JUKSkge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTM5Ni1cXHRcXHRcXHRpbnQgYWZfaWQgPSBpcF92c19hZl9pbmRleChjcC1cXHUwMDNlYWYpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz0xNDQ0PWlwX3ZzX2Nvbm5fbmV3KGNvbnN0IHN0cnVjdCBpcF92c19jb25uX3BhcmFtICpwLCBpbnQgZGVzdF9hZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTUxNi1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjE1MTc6XFx0aWYgKHVubGlrZWx5KGZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX05PX0NQT1JUKSkge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTUxOC1cXHRcXHRpbnQgYWZfaWQgPSBpcF92c19hZl9pbmRleChjcC1cXHUwMDNlYWYpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jPTI1ND1zdGF0aWMgaW50IGlwX3ZzX2Z0cF9vdXQoc3RydWN0IGlwX3ZzX2FwcCAqYXBwLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtMzM3LVxcdFxcdG5fY3AgPSBpcF92c19jb25uX25ldyhcXHUwMDI2cCwgY3AtXFx1MDAzZWFmLCBcXHUwMDI2ZnJvbSwgcG9ydCxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM6MzM4OlxcdFxcdFxcdFxcdCAgICAgIElQX1ZTX0NPTk5fRl9OT19DUE9SVCB8XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTMzOS1cXHRcXHRcXHRcXHQgICAgICBJUF9WU19DT05OX0ZfTkZDVCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9OTUzPXN0YXRpYyBib29sIGlwX3ZzX3N5bmNfdmFsaWRhdGVfZmxhZ3ModTMyIGZsYWdzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05NTctXFx0ICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo5NTg6XFx0aWYgKGZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX05PX0NQT1JUKSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05NTktXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX1RFTVBMQVRFKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYz03ODc9aXBfdnNfbmF0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYy03OTMtXFx0LyogY2hlY2sgaWYgaXQgaXMgYSBjb25uZWN0aW9uIG9mIG5vLWNsaWVudC1wb3J0ICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYzo3OTQ6XFx0aWYgKHVubGlrZWx5KGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9OT19DUE9SVCkpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jLTc5NS1cXHRcXHRfX2JlMTYgX3B0LCAqcDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM9ODcxPWlwX3ZzX25hdF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMtODc3LVxcdC8qIGNoZWNrIGlmIGl0IGlzIGEgY29ubmVjdGlvbiBvZiBuby1jbGllbnQtcG9ydCAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmM6ODc4OlxcdGlmICh1bmxpa2VseShjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfTk9fQ1BPUlQgXFx1MDAyNlxcdTAwMjYgIWlwdnNoLVxcdTAwM2VmcmFnb2ZmcykpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jLTg3OS1cXHRcXHRfX2JlMTYgX3B0LCAqcDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6NDg6MzYuNDIxMzkwMjEyWiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIzNTgyMzg5NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFscmVhZHkgZGVlcCBpbiB0aGUgd2VlZHMgb2YgbmV0d29yayBwZXJmb3JtYW5jZSBhbmFseXNpczpcblxuKipBbmFseXppbmcgTmV0d29yayBUcmFmZmljOiBUaGUgSW1wb3J0YW5jZSBvZiBTaW5nbGUtUGFja2V0IE9ic2VydmF0aW9ucyoqXG5cbkFscmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBuZXR3b3JrIGRhdGEgYW5kIGltbWVkaWF0ZWx5IG15IGJyYWluIGhvbmVzIGluIG9uIHNvbWV0aGluZyBpbnRlcmVzdGluZzogYElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUYC4gVGhpcyBpcyBrZXkuIEl0J3MgYSBmbGFnLCBhbiBpbmRpY2F0b3IsIGEgZGF0YXBvaW50IHRoYXQncyBnb2luZyB0byBiZSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBlbnRpcmUgcGljdHVyZS4gSSBpbW1lZGlhdGVseSByZWNvZ25pemUgdGhpcyBtZWFucyB0aGF0IHRoZSBjb25uZWN0aW9uIGlzIHJlbGF0ZWQgdG8gdGhlIHZlcnkgZmlyc3QgcGFja2V0IG9mIGEgc3BlY2lmaWMgZGF0YSBzdHJlYW0gb3IgY29udmVyc2F0aW9uLCBpbiBvdGhlciB3b3JkcywgdGhhdCB0aGVyZSBpcyBvbmx5IG9uZSBwYWNrZXQgaW52b2x2ZWQuIEl0J3Mgbm90IGp1c3QgYW5vdGhlciBkYXRhIHBvaW50OyBpdCdzIGEgdml0YWwgcGllY2Ugb2YgdGhlIHB1enpsZS4gVGhpcyBoZWxwcyBtZSBuYXJyb3cgZG93biBwb3NzaWJsZSBpc3N1ZXMsIHBvdGVudGlhbCBib3R0bGVuZWNrcywgb3IgdW5pcXVlIGJlaGF2aW9yLiBUaGlzIHNpbmdsZSBvYnNlcnZhdGlvbiBpcyB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGludmVzdGlnYXRlIGluIG9yZGVyIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg2NCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjQ4OjM4Ljc3OTYzMTkyOFoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4MDA4MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSVBfVlNfQ09OTl9GX09ORV9QQUNLRVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9MjYxPXN0YXRpYyBpbmxpbmUgaW50IGlwX3ZzX2Nvbm5faGFzaChzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTI3MC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjI3MTpcXHRpZiAoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0yNzItXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTMxNj1zdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY29ubl91bmxpbmsoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0zMjQtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzozMjU6XFx0aWYgKGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMzI2LVxcdFxcdHJldHVybiByZWZjb3VudF9kZWNfaWZfb25lKFxcdTAwMjZjcC1cXHUwMDNlcmVmY250KTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9NjIwPXN0YXRpYyB2b2lkIF9faXBfdnNfY29ubl9wdXRfdGltZXIoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNjIxLXtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjYyMjpcXHR1bnNpZ25lZCBsb25nIHQgPSAoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpID9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTYyMy1cXHRcXHQwIDogY3AtXFx1MDAzZXRpbWVvdXQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTYyOT12b2lkIGlwX3ZzX2Nvbm5fcHV0KHN0cnVjdCBpcF92c19jb25uICpjcClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTYzMC17XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo2MzE6XFx0aWYgKChjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVCkgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTYzMi1cXHQgICAgKHJlZmNvdW50X3JlYWQoXFx1MDAyNmNwLVxcdTAwM2VyZWZjbnQpID09IDEpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTEwODk9aXBfdnNfYmluZF9kZXN0KHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTExMDItXFx0aWYgKGNwLVxcdTAwM2Vwcm90b2NvbCAhPSBJUFBST1RPX1VEUClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjExMDM6XFx0XFx0Y29ubl9mbGFncyBcXHUwMDI2PSB+SVBfVlNfQ09OTl9GX09ORV9QQUNLRVQ7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMTA0LVxcdGZsYWdzID0gY3AtXFx1MDAzZWZsYWdzO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMTA3LVxcdFxcdC8qIFN5bmNlZCBjb25ucyBhcmUgaGFzaGVkLCBzbyB0aGV5IGNhbiBub3QgZ2V0IHRoaXMgZmxhZyAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTEwODpcXHRcXHRjb25uX2ZsYWdzIFxcdTAwMjY9IH5JUF9WU19DT05OX0ZfT05FX1BBQ0tFVDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTExMDktXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTEzNDc9c3RhdGljIHZvaWQgaXBfdnNfY29ubl9leHBpcmUoc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTEzODEtXFx0XFx0aWYgKChjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfTkZDVCkgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjEzODI6XFx0XFx0ICAgICEoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpKSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMzgzLVxcdFxcdFxcdC8qIERvIG5vdCBhY2Nlc3MgY29ubnRyYWNrcyBkdXJpbmcgc3Vic3lzIGNsZWFudXBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTM5OS1cXHRcXHR9XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxNDAwOlxcdFxcdGlmIChjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTE0MDEtXFx0XFx0XFx0aXBfdnNfY29ubl9yY3VfZnJlZShcXHUwMDI2Y3AtXFx1MDAzZXJjdV9oZWFkKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9MTQ0ND1pcF92c19jb25uX25ldyhjb25zdCBzdHJ1Y3QgaXBfdnNfY29ubl9wYXJhbSAqcCwgaW50IGRlc3RfYWYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTE1NDctXFx0ICogU29tZXRpbWVzIGtlZXBpbmcgY29ubnRyYWNrIGNhbiBiZSB1c2VmdWwgZm9yXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzoxNTQ4OlxcdCAqIElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUIHRvby5cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTE1NDktXFx0ICovXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTQzMD1pcF92c19zY2hlZF9wZXJzaXN0KHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTU2OC1cXHRcXHQgXFx1MDAyNlxcdTAwMjYgaXBoLVxcdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1VEUCkgP1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6NTY5OlxcdFxcdElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUIDogMDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTU3MC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9NjE4PWlwX3ZzX3NjaGVkdWxlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTcxNS1cXHRcXHQgXFx1MDAyNlxcdTAwMjYgaXBoLVxcdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1VEUCkgP1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6NzE2OlxcdFxcdElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUIDogMDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTcxNy1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9NzYyPWludCBpcF92c19sZWF2ZShzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy03ODMtXFx0XFx0XFx0XFx0ICAgICAgaXBoLVxcdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1VEUCkgP1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6Nzg0OlxcdFxcdFxcdFxcdCAgICAgIElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUIDogMDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTc4NS1cXHRcXHR1bmlvbiBuZl9pbmV0X2FkZHIgZGFkZHIgPSB7IC5hbGwgPSB7IDAsIDAsIDAsIDAgfSB9O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy04MTAtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzo4MTE6XFx0XFx0aWYgKChjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVCkgXFx1MDAyNlxcdTAwMjYgY3AtXFx1MDAzZWNvbnRyb2wpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy04MTItXFx0XFx0XFx0YXRvbWljX2luYyhcXHUwMDI2Y3AtXFx1MDAzZWNvbnRyb2wtXFx1MDAzZWluX3BrdHMpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0xMzA5PXN0cnVjdCBpcF92c19jb25uICppcF92c19uZXdfY29ubl9vdXQoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTM2NS1cXHRmbGFncyA9ICgoc3ZjLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX1NWQ19GX09ORVBBQ0tFVCkgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjEzNjY6XFx0XFx0IGlwaC1cXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19VRFApID8gSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQgOiAwO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTM2Ny1cXHQvKiBjcmVhdGUgY29ubmVjdGlvbiAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0yMDk2PWlwX3ZzX2luX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMjY5LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MjI3MDpcXHRpZiAoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMjcxLVxcdFxcdHBrdHMgPSBzeXNjdGxfc3luY190aHJlc2hvbGQoaXB2cyk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIyNzYtXFx0XFx0aXBfdnNfc3luY19jb25uKGlwdnMsIGNwLCBwa3RzKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIyNzc6XFx0ZWxzZSBpZiAoKGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUKSBcXHUwMDI2XFx1MDAyNiBjcC1cXHUwMDNlY29udHJvbClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIyNzgtXFx0XFx0LyogaW5jcmVtZW50IGlzIGRvbmUgaW5zaWRlIGlwX3ZzX3N5bmNfY29ubiB0b28gKi9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19uZmN0LmM9NzA9aXBfdnNfdXBkYXRlX2Nvbm50cmFjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBvdXRpbilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19uZmN0LmMtODQtXFx0LyogTmV2ZXIgYWx0ZXIgY29ubnRyYWNrIGZvciBPUFMgY29ubnMgKG5vIHJlcGx5IGlzIGV4cGVjdGVkKSAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19uZmN0LmM6ODU6XFx0aWYgKGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19uZmN0LmMtODYtXFx0XFx0cmV0dXJuO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz01Mzk9c3RhdGljIHZvaWQgaXBfdnNfc3luY19jb25uX3YwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU1MS1cXHQvKiBEbyBub3Qgc3luYyBPTkUgUEFDS0VUICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo1NTI6XFx0aWYgKGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTUzLVxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9NjI5PXZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02NDQtXFx0LyogRG8gbm90IHN5bmMgT05FIFBBQ0tFVCAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NjQ1OlxcdGlmIChjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY0Ni1cXHRcXHRnb3RvIGNvbnRyb2w7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTk1Mz1zdGF0aWMgYm9vbCBpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzKHUzMiBmbGFncylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtOTYxLVxcdH1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjk2MjpcXHRpZiAoZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTk2My1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE4OjQ4OjM4LjgyNTQzNzI4N1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMTYzODAyMzU5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBJUFZTIFN5bmNocm9uaXphdGlvbiBEYWVtb24gRmxhZyBWYWxpZGF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSdyZSBsb29raW5nIGF0IGEgcGF0Y2ggaW4gYGlwX3ZzX3N5bmMuY2Agd2hpY2gsIGZyb20gd2hhdCBJIGdhdGhlciwgY29uY2VybnMgaXRzZWxmIHdpdGggdmFsaWRhdGluZyBjb25uZWN0aW9uIGZsYWdzIHdpdGhpbiB0aGUgSVBWUyBzeW5jaHJvbml6YXRpb24gZGFlbW9uLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2UgdGhlIGNvZGUgaXMgcmVzcG9uc2libGUgZm9yIHJlY2VpdmluZyBzeW5jIG1lc3NhZ2VzLCBsaWtlbHkgVURQIG11bHRpY2FzdCwgZnJvbSBvdGhlciBJUFZTIGRpcmVjdG9ycy4gVGhlc2UgbWVzc2FnZXMgYXJlIHBhcnNlZCB1c2luZyBgaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwYCBhbmQgYGlwX3ZzX3Byb2Nfc3luY19jb25uYCB3aGljaCBpbiB0dXJuIGNhbGwgdGhlIG5ldyBgaXBfdnNfc3luY192YWxpZGF0ZV9mbGFnc2AgZnVuY3Rpb24uXG5cblRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpcyB0aGF0IGBpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzYCBwZXJmb3JtcyB0aGVzZSBrZXkgY2hlY2tzOiBpdCdzIGxvb2tpbmcgZm9yIHRoZSBwcmVzZW5jZSBvZiBgSVBfVlNfQ09OTl9GX05PX0NQT1JUYCBmbGFnIGNvbWJpbmVkIHdpdGggYElQX1ZTX0NPTk5fRl9URU1QTEFURWAsIG9yIGp1c3QgYElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUYC4gSWYgZWl0aGVyIG9mIHRoZXNlIGNvbWJpbmF0aW9ucyBleGlzdCwgdGhlIHBhY2tldCBpcyByZWplY3RlZC4gVGhlIGZsYWdzIGFyZSBkZXJpdmVkIGZyb20gdGhlIG5ldHdvcmsgYnVmZmVyLlxuXG5Ob3csIGFjY29yZGluZyB0byB0aGUgZ3VpZGVsaW5lcywgdGhlIHVzZSBvZiBLTVNBTiBpcyByZXNlcnZlZCBmb3IgY2FzZXMgaW52b2x2aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBTbyBsZXQncyBzeXN0ZW1hdGljYWxseSBhbmFseXplOlxuXG4xLiAgKipVbmluaXRpYWxpemVkIE1lbW9yeToqKiBUaGUgZmxhZ3MgY29tZSBkaXJlY3RseSBmcm9tIG5ldHdvcmsgZGF0YSwgdGhleSBhcmVuJ3QgaW5pdGlhbGl6ZWQgbG9jYWxseS4gSG93ZXZlciwgdGhlIGNvZGUgdmFsaWRhdGVzIGFuZCAqcmVqZWN0cyogcGFja2V0cyBjb250YWluaW5nIHRoZSBcImZvcmJpZGRlblwiIGZsYWcgY29tYmluYXRpb25zLiBObyB1bmluaXRpYWxpemVkIGRhdGEgZXZlciBtYWtlcyBpdCBwYXN0IHRoZSBpbnB1dCB2YWxpZGF0aW9uIHRvIGJlIHVzZWQgaW4gY2FsY3VsYXRpb25zLlxuMi4gICoqVXNlciBTcGFjZSBFeHBvc3VyZToqKiBObyBrZXJuZWwgZGF0YSBpcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UgZGlyZWN0bHkgYmVjYXVzZSB0aGUgcGF0Y2ggcGVyZm9ybXMgaW5wdXQgdmFsaWRhdGlvbiwgYW5kIGRvZXMgbm90IGFsdGVyIGFueSBrZXJuZWwgc3RydWN0dXJlcyB0aGF0IGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlLlxuMy4gICoqQ29uZGl0aW9uYWwgTG9naWMgXHUwMDI2IFVuaW5pdGlhbGl6ZWQgVmFyaWFibGVzOioqIFRoZSBsb2dpYyBpcyBzdHJhaWdodGZvcndhcmQgLSB2YWxpZGF0ZSB0aGUgZmxhZ3MsIGFuZCBwcm9jZWVkIG9yIHJlamVjdC4gVGhlIGlucHV0IGZsYWdzIHRoZW1zZWx2ZXMgYXJlIG5vdCB1bmluaXRpYWxpemVkLCB0aGV5IGNvbWUgZnJvbSB0aGUgbmV0d29yay5cbjQuICAqKkRhdGEgU3RydWN0dXJlIEFsbG9jYXRpb24gXHUwMDI2IEluaXRpYWxpemF0aW9uOioqIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGRhdGEgc3RydWN0dXJlcywgc28gd2UgY2FuIGRpc3JlZ2FyZCB0aGlzIGFzcGVjdC5cbjUuICAqKkJvdW5kcyBDaGVja3MgXHUwMDI2IExlbmd0aHM6KiogQWN0dWFsbHksIHRoZSBwYXRjaCAqaW1wcm92ZXMqIGlucHV0IHZhbGlkYXRpb24gb2YgZmxhZ3MgY29taW5nIGZyb20gdGhlIG5ldHdvcmssIG1ha2luZyBpdCAqbW9yZSogZGlmZmljdWx0IHRvIGNhdXNlIGFueSBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIHdyaXRlcy5cblxuVGhlIG9yaWdpbmFsIGJ1ZywgaWYgb25lIGNhbiBjYWxsIGl0IHRoYXQsIHdhcyBhIHBvdGVudGlhbCBmb3IgaW5jb25zaXN0ZW50IHN0YXRlLCByZWZjb3VudCBpc3N1ZXMsIG9yIGludmFsaWQgaGFuZGxpbmcgcmVzdWx0aW5nIGZyb20gaW5jb21wYXRpYmxlIGNvbWJpbmF0aW9ucyBvZiBmbGFncyBpbiB0aGUgbmV0d29yayBtZXNzYWdlcy4gVGhlc2UgY291bGQgcG9zc2libHkgbGVhZCB0byBjcmFzaGVzLCBwYW5pY3MsIE5VTEwgZGVyZWZlcmVuY2VzIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMuIEhvd2V2ZXIsIG5vbmUgb2YgdGhhdCBpcyBkaXJlY3RseSByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBXZSBjYW4gYXNzdW1lIHRoYXQgaWYgdGhlc2UgaW52YWxpZCBmbGFnIGNvbWJpbmF0aW9ucyBjcmVhdGUgaXNzdWVzLCB0aGUgKnN0YW5kYXJkKiBidWcgZGV0ZWN0b3JzIChLQVNBTiwgTE9DS0RFUCwgcmVmY291bnQgY2hlY2tzKSB3b3VsZCBjYXRjaCB0aGVzZS5cblxuVGhlcmVmb3JlLCB0aGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gQmFzZWQgb24gdGhlIGd1aWRlbGluZXMsICoqTmVlZHNLTVNBTiBzaG91bGQgYmUgZmFsc2UqKi5cblxuYGBgXG4tIE5lZWRzS01TQU46IGZhbHNlXG4tIEtNU0FOUmVhc29uaW5nOlxuVGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBmb3IgaW5jb21wYXRpYmxlIGNvbm5lY3Rpb24gZmxhZ3MgKGBJUF9WU19DT05OX0ZfTk9fQ1BPUlRgIHdpdGggYElQX1ZTX0NPTk5fRl9URU1QTEFURWAsIGFuZCBgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVRgKSBpbiB0aGUgSVBWUyBzeW5jaHJvbml6YXRpb24gbWVzc2FnZSBwcm9jZXNzaW5nIGhhbmRsZXJzIChgaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwYCBhbmQgYGlwX3ZzX3Byb2Nfc3luY19jb25uYCkuXG5UaGUgZmxhZ3MgYXJlIHBhcnNlZCBkaXJlY3RseSBmcm9tIGluY29taW5nIG5ldHdvcmsgcGFja2V0IGJ1ZmZlcnMgYW5kIHZhbGlkYXRlZCBiZWZvcmUgZnVydGhlciBjb25uZWN0aW9uIHN0YXRlIHByb2Nlc3NpbmcuIFRoZSBjaGFuZ2VzIG9ubHkgaW50cm9kdWNlIGlucHV0IHZhbGlkYXRpb24gYW5kIGVhcmx5IGV4aXRzLCB3aXRob3V0IGFsbG9jYXRpbmcgbmV3IG1lbW9yeSwgYWx0ZXJpbmcgYnVmZmVyIHNpemVzL2JvdW5kYXJpZXMsIGxlYXZpbmcgZmllbGRzIHVuaW5pdGlhbGl6ZWQsIG9yIGV4cG9zaW5nIGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UuIEFueSBidWdzIHJlc3VsdGluZyBmcm9tIG1hbGZvcm1lZCBjb25uZWN0aW9uIHN0YXRlcyBvciBmbGFncyAoc3VjaCBhcyByZWZjb3VudCBpc3N1ZXMgb3IgdXNlLWFmdGVyLWZyZWUpIGZhbGwgdW5kZXIgdGhlIHB1cnZpZXcgb2Ygc3RhbmRhcmQgZGV0ZWN0b3JzIGxpa2UgS0FTQU4gYW5kIHJlZmNvdW50IGNoZWNraW5nLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBpbmZvcm1hdGlvbiBsZWFrLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cbmBgYFxuYGBgXG5zZXQtcmVzdWx0c1xuYGBgXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTY0LCJPdXRwdXRUb2tlbnMiOjI0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTg6NDk6MTAuNDYzNDYzNTIzWiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmbGFnIHZhbGlkYXRpb24gKGBpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzYCkgaW4gdGhlIElQVlMgc3luY2hyb25pemF0aW9uIG1lc3NhZ2UgaGFuZGxpbmcgZnVuY3Rpb25zIChgaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwYCBhbmQgYGlwX3ZzX3Byb2Nfc3luY19jb25uYCkgdG8gcmVqZWN0IGludmFsaWQgZmxhZyBjb21iaW5hdGlvbnMgKGUuZy4sIGBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVGAgb3IgYElQX1ZTX0NPTk5fRl9OT19DUE9SVGAgY29tYmluZWQgd2l0aCBgSVBfVlNfQ09OTl9GX1RFTVBMQVRFYCkuIFRoZSBmbGFncyB2YXJpYWJsZSBpcyBkaXJlY3RseSBpbml0aWFsaXplZCBmcm9tIHJlY2VpdmVkIG5ldHdvcmsgcGFja2V0IGRhdGEgKGBudG9oc2AgLyBgbnRvaGxgKSwgYW5kIHRoZSB2YWxpZGF0aW9uIGxvZ2ljIG9ubHkgYWRkcyBlYXJseSByZWplY3Rpb24gb2YgaW52YWxpZCBzeW5jIG1lc3NhZ2VzLiBObyBoZWFwL3N0YWNrIG1lbW9yeSBhbGxvY2F0aW9ucyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZCwgbm8gYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMgb3IgY29weWluZyB0byB1c2VyIHNwYWNlIGFyZSBhbHRlcmVkLCBhbmQgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IHBhZGRpbmcgYXJlIHJlYWQgb3IgZXhwb3NlZC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSBpbmNvbXBhdGlibGUgZmxhZ3MgKHN1Y2ggYXMgc3RhdGUgaW5jb25zaXN0ZW5jaWVzLCByZWZjb3VudCBlcnJvcnMsIG9yIHVzZS1hZnRlci1mcmVlKSBhcmUgZGV0ZWN0YWJsZSBieSBzdGFuZGFyZCBLQVNBTi9yZWZjb3VudCBjaGVja3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmbGFnIHZhbGlkYXRpb24gKGBpcF92c19zeW5jX3ZhbGlkYXRlX2ZsYWdzYCkgaW4gdGhlIElQVlMgc3luY2hyb25pemF0aW9uIG1lc3NhZ2UgaGFuZGxpbmcgZnVuY3Rpb25zIChgaXBfdnNfcHJvY2Vzc19tZXNzYWdlX3YwYCBhbmQgYGlwX3ZzX3Byb2Nfc3luY19jb25uYCkgdG8gcmVqZWN0IGludmFsaWQgZmxhZyBjb21iaW5hdGlvbnMgKGUuZy4sIGBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVGAgb3IgYElQX1ZTX0NPTk5fRl9OT19DUE9SVGAgY29tYmluZWQgd2l0aCBgSVBfVlNfQ09OTl9GX1RFTVBMQVRFYCkuIFRoZSBmbGFncyB2YXJpYWJsZSBpcyBkaXJlY3RseSBpbml0aWFsaXplZCBmcm9tIHJlY2VpdmVkIG5ldHdvcmsgcGFja2V0IGRhdGEgKGBudG9oc2AgLyBgbnRvaGxgKSwgYW5kIHRoZSB2YWxpZGF0aW9uIGxvZ2ljIG9ubHkgYWRkcyBlYXJseSByZWplY3Rpb24gb2YgaW52YWxpZCBzeW5jIG1lc3NhZ2VzLiBObyBoZWFwL3N0YWNrIG1lbW9yeSBhbGxvY2F0aW9ucyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZCwgbm8gYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMgb3IgY29weWluZyB0byB1c2VyIHNwYWNlIGFyZSBhbHRlcmVkLCBhbmQgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IHBhZGRpbmcgYXJlIHJlYWQgb3IgZXhwb3NlZC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSBpbmNvbXBhdGlibGUgZmxhZ3MgKHN1Y2ggYXMgc3RhdGUgaW5jb25zaXN0ZW5jaWVzLCByZWZjb3VudCBlcnJvcnMsIG9yIHVzZS1hZnRlci1mcmVlKSBhcmUgZGV0ZWN0YWJsZSBieSBzdGFuZGFyZCBLQVNBTi9yZWZjb3VudCBjaGVja3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfkm52[1] Phase: Succeeded StartedAt: 2026-09-11 18:49:21 +0000 UTC FinishedAt: 2026-09-11 18:49:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfkm52[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-11 18:49:21 +0000 UTC FinishedAt: 2026-09-11 18:49:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfkm52[2] Phase: Succeeded StartedAt: 2026-09-11 18:49:21 +0000 UTC FinishedAt: 2026-09-11 22:28:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfkm52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_validate_flags","ip_vs_process_message_v0","ip_vs_proc_sync_conn","ip_vs_process_message","sync_thread_backup","start_sync_thread"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"60a979ef-4c1e-4926-998f-b623ad440491","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-11 18:49:21 +0000 UTC FinishedAt: 2026-09-11 22:28:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"fuzz":{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_validate_flags","ip_vs_process_message_v0","ip_vs_proc_sync_conn","ip_vs_process_message","sync_thread_backup","start_sync_thread"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"60a979ef-4c1e-4926-998f-b623ad440491","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowfkm52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_validate_flags","ip_vs_process_message_v0","ip_vs_proc_sync_conn","ip_vs_process_message","sync_thread_backup","start_sync_thread"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"60a979ef-4c1e-4926-998f-b623ad440491","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-11 18:49:21 +0000 UTC FinishedAt: 2026-09-11 18:49:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfkm52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_validate_flags","ip_vs_process_message_v0","ip_vs_proc_sync_conn","ip_vs_process_message","sync_thread_backup","start_sync_thread"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"60a979ef-4c1e-4926-998f-b623ad440491","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-11 18:49:21 +0000 UTC FinishedAt: 2026-09-11 18:49:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflowfkm52/series-workflowfkm52-convert-artifact-2214314252/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfkm52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_validate_flags","ip_vs_process_message_v0","ip_vs_proc_sync_conn","ip_vs_process_message","sync_thread_backup","start_sync_thread"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"60a979ef-4c1e-4926-998f-b623ad440491","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-11 18:49:32 +0000 UTC FinishedAt: 2026-09-11 19:05:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfkm52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_validate_flags","ip_vs_process_message_v0","ip_vs_proc_sync_conn","ip_vs_process_message","sync_thread_backup","start_sync_thread"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"60a979ef-4c1e-4926-998f-b623ad440491","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-11 18:49:32 +0000 UTC FinishedAt: 2026-09-11 19:05:49 +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:*99c6f5cf-76a9-4bba-99e3-e2ea6ef65347,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-workflowfkm52/series-workflowfkm52-convert-artifact-2214314252/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": "a9f2ec54-9466-44b5-8a17-773d67065df7", "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-workflowfkm52/series-workflowfkm52-build-action-2593818426/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfkm52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_validate_flags","ip_vs_process_message_v0","ip_vs_proc_sync_conn","ip_vs_process_message","sync_thread_backup","start_sync_thread"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"60a979ef-4c1e-4926-998f-b623ad440491","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-11 18:49:32 +0000 UTC FinishedAt: 2026-09-11 19:05:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*99c6f5cf-76a9-4bba-99e3-e2ea6ef65347,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-workflowfkm52/series-workflowfkm52-convert-artifact-2214314252/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": "a9f2ec54-9466-44b5-8a17-773d67065df7", "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-workflowfkm52/series-workflowfkm52-build-action-2593818426/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfkm52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_validate_flags","ip_vs_process_message_v0","ip_vs_proc_sync_conn","ip_vs_process_message","sync_thread_backup","start_sync_thread"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"60a979ef-4c1e-4926-998f-b623ad440491","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-11 19:05:49 +0000 UTC FinishedAt: 2026-09-11 19:05:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfkm52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_validate_flags","ip_vs_process_message_v0","ip_vs_proc_sync_conn","ip_vs_process_message","sync_thread_backup","start_sync_thread"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"60a979ef-4c1e-4926-998f-b623ad440491","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-11 19:05:49 +0000 UTC FinishedAt: 2026-09-11 19:05:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfkm52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_validate_flags","ip_vs_process_message_v0","ip_vs_proc_sync_conn","ip_vs_process_message","sync_thread_backup","start_sync_thread"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"60a979ef-4c1e-4926-998f-b623ad440491","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-11 19:05:49 +0000 UTC FinishedAt: 2026-09-11 19:05:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfkm52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_validate_flags","ip_vs_process_message_v0","ip_vs_proc_sync_conn","ip_vs_process_message","sync_thread_backup","start_sync_thread"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"60a979ef-4c1e-4926-998f-b623ad440491","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-11 19:05:49 +0000 UTC FinishedAt: 2026-09-11 19:05:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"60a979ef-4c1e-4926-998f-b623ad440491","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflowfkm52/series-workflowfkm52-convert-artifact-3806749259/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfkm52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_validate_flags","ip_vs_process_message_v0","ip_vs_proc_sync_conn","ip_vs_process_message","sync_thread_backup","start_sync_thread"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"60a979ef-4c1e-4926-998f-b623ad440491","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-11 19:05:59 +0000 UTC FinishedAt: 2026-09-11 19:07:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfkm52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_validate_flags","ip_vs_process_message_v0","ip_vs_proc_sync_conn","ip_vs_process_message","sync_thread_backup","start_sync_thread"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"60a979ef-4c1e-4926-998f-b623ad440491","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-11 19:05:59 +0000 UTC FinishedAt: 2026-09-11 19:07:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a9f2ec54-9466-44b5-8a17-773d67065df7,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-workflowfkm52/series-workflowfkm52-build-action-2593818426/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-workflowfkm52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_validate_flags","ip_vs_process_message_v0","ip_vs_proc_sync_conn","ip_vs_process_message","sync_thread_backup","start_sync_thread"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"60a979ef-4c1e-4926-998f-b623ad440491","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-11 19:07:50 +0000 UTC FinishedAt: 2026-09-11 19:07:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfkm52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_validate_flags","ip_vs_process_message_v0","ip_vs_proc_sync_conn","ip_vs_process_message","sync_thread_backup","start_sync_thread"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"60a979ef-4c1e-4926-998f-b623ad440491","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-11 19:07:50 +0000 UTC FinishedAt: 2026-09-11 19:07:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfkm52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_validate_flags","ip_vs_process_message_v0","ip_vs_proc_sync_conn","ip_vs_process_message","sync_thread_backup","start_sync_thread"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"60a979ef-4c1e-4926-998f-b623ad440491","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-11 19:07:50 +0000 UTC FinishedAt: 2026-09-11 19:24:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfkm52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_validate_flags","ip_vs_process_message_v0","ip_vs_proc_sync_conn","ip_vs_process_message","sync_thread_backup","start_sync_thread"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"60a979ef-4c1e-4926-998f-b623ad440491","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-11 19:07:50 +0000 UTC FinishedAt: 2026-09-11 19:24:18 +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:*99c6f5cf-76a9-4bba-99e3-e2ea6ef65347,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-workflowfkm52/series-workflowfkm52-convert-artifact-3806749259/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": "7faa173b-a762-4e08-944a-cc32ebde5072", "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-workflowfkm52/series-workflowfkm52-build-action-2388952815/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfkm52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_validate_flags","ip_vs_process_message_v0","ip_vs_proc_sync_conn","ip_vs_process_message","sync_thread_backup","start_sync_thread"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"60a979ef-4c1e-4926-998f-b623ad440491","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-11 19:07:50 +0000 UTC FinishedAt: 2026-09-11 19:24:08 +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:*99c6f5cf-76a9-4bba-99e3-e2ea6ef65347,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-workflowfkm52/series-workflowfkm52-convert-artifact-3806749259/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": "7faa173b-a762-4e08-944a-cc32ebde5072", "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-workflowfkm52/series-workflowfkm52-build-action-2388952815/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfkm52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_validate_flags","ip_vs_process_message_v0","ip_vs_proc_sync_conn","ip_vs_process_message","sync_thread_backup","start_sync_thread"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"60a979ef-4c1e-4926-998f-b623ad440491","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-11 19:24:18 +0000 UTC FinishedAt: 2026-09-11 19:24:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfkm52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_validate_flags","ip_vs_process_message_v0","ip_vs_proc_sync_conn","ip_vs_process_message","sync_thread_backup","start_sync_thread"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"60a979ef-4c1e-4926-998f-b623ad440491","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-11 19:24:18 +0000 UTC FinishedAt: 2026-09-11 19:24:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfkm52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_validate_flags","ip_vs_process_message_v0","ip_vs_proc_sync_conn","ip_vs_process_message","sync_thread_backup","start_sync_thread"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"60a979ef-4c1e-4926-998f-b623ad440491","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-11 19:24:18 +0000 UTC FinishedAt: 2026-09-11 19:26:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfkm52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_validate_flags","ip_vs_process_message_v0","ip_vs_proc_sync_conn","ip_vs_process_message","sync_thread_backup","start_sync_thread"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"60a979ef-4c1e-4926-998f-b623ad440491","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-11 19:24:18 +0000 UTC FinishedAt: 2026-09-11 19:26: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:*7faa173b-a762-4e08-944a-cc32ebde5072,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-workflowfkm52/series-workflowfkm52-build-action-2388952815/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-workflowfkm52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_validate_flags","ip_vs_process_message_v0","ip_vs_proc_sync_conn","ip_vs_process_message","sync_thread_backup","start_sync_thread"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"60a979ef-4c1e-4926-998f-b623ad440491","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-11 19:26:10 +0000 UTC FinishedAt: 2026-09-11 22:28:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfkm52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_validate_flags","ip_vs_process_message_v0","ip_vs_proc_sync_conn","ip_vs_process_message","sync_thread_backup","start_sync_thread"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"60a979ef-4c1e-4926-998f-b623ad440491","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-11 19:26:10 +0000 UTC FinishedAt: 2026-09-11 22:28:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_validate_flags","ip_vs_process_message_v0","ip_vs_proc_sync_conn","ip_vs_process_message","sync_thread_backup","start_sync_thread"],"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:*a9f2ec54-9466-44b5-8a17-773d67065df7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7faa173b-a762-4e08-944a-cc32ebde5072,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-workflowfkm52/series-workflowfkm52-build-action-2593818426/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-workflowfkm52/series-workflowfkm52-build-action-2388952815/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowfkm52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_validate_flags","ip_vs_process_message_v0","ip_vs_proc_sync_conn","ip_vs_process_message","sync_thread_backup","start_sync_thread"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"60a979ef-4c1e-4926-998f-b623ad440491","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-11 19:26:10 +0000 UTC FinishedAt: 2026-09-11 19:26:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfkm52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_validate_flags","ip_vs_process_message_v0","ip_vs_proc_sync_conn","ip_vs_process_message","sync_thread_backup","start_sync_thread"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"60a979ef-4c1e-4926-998f-b623ad440491","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-11 19:26:10 +0000 UTC FinishedAt: 2026-09-11 19:26:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_validate_flags","ip_vs_process_message_v0","ip_vs_proc_sync_conn","ip_vs_process_message","sync_thread_backup","start_sync_thread"],"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-workflowfkm52/series-workflowfkm52-convert-artifact-2349101284/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfkm52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_validate_flags","ip_vs_process_message_v0","ip_vs_proc_sync_conn","ip_vs_process_message","sync_thread_backup","start_sync_thread"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"60a979ef-4c1e-4926-998f-b623ad440491","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-11 19:26:10 +0000 UTC FinishedAt: 2026-09-11 19:26:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfkm52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_validate_flags","ip_vs_process_message_v0","ip_vs_proc_sync_conn","ip_vs_process_message","sync_thread_backup","start_sync_thread"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"60a979ef-4c1e-4926-998f-b623ad440491","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-11 19:26:10 +0000 UTC FinishedAt: 2026-09-11 19:26:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfkm52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_validate_flags","ip_vs_process_message_v0","ip_vs_proc_sync_conn","ip_vs_process_message","sync_thread_backup","start_sync_thread"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"60a979ef-4c1e-4926-998f-b623ad440491","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-11 19:26:10 +0000 UTC FinishedAt: 2026-09-11 19:26:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfkm52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_validate_flags","ip_vs_process_message_v0","ip_vs_proc_sync_conn","ip_vs_process_message","sync_thread_backup","start_sync_thread"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"60a979ef-4c1e-4926-998f-b623ad440491","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-11 19:26:20 +0000 UTC FinishedAt: 2026-09-11 22:28:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfkm52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_validate_flags","ip_vs_process_message_v0","ip_vs_proc_sync_conn","ip_vs_process_message","sync_thread_backup","start_sync_thread"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","NETFILTER","INET"],"series_id":"60a979ef-4c1e-4926-998f-b623ad440491","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-11 19:26:20 +0000 UTC FinishedAt: 2026-09-11 22:28:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a9f2ec54-9466-44b5-8a17-773d67065df7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7faa173b-a762-4e08-944a-cc32ebde5072,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-workflowfkm52/series-workflowfkm52-build-action-2593818426/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-workflowfkm52/series-workflowfkm52-build-action-2388952815/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-workflowfkm52/series-workflowfkm52-convert-artifact-2349101284/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,}